diff --git a/go.mod b/go.mod index 1041d81..f02bcec 100644 --- a/go.mod +++ b/go.mod @@ -6,20 +6,20 @@ require ( github.com/araujo88/gin-gonic-xss-middleware v0.0.0-20221014023455-d89f16de6a7e github.com/gin-contrib/cors v1.7.5 github.com/gin-contrib/secure v1.1.1 - github.com/gin-gonic/gin v1.10.0 + github.com/gin-gonic/gin v1.11.0 github.com/go-redis/redis/v8 v8.11.5 github.com/golang-jwt/jwt v3.2.2+incompatible github.com/golang/mock v1.6.0 github.com/lib/pq v1.10.9 github.com/shopspring/decimal v1.4.0 - github.com/stretchr/testify v1.10.0 + github.com/stretchr/testify v1.11.1 github.com/swaggo/files v1.0.1 github.com/swaggo/gin-swagger v1.6.0 github.com/swaggo/swag v1.16.4 go.mongodb.org/mongo-driver v1.17.3 go.uber.org/mock v0.5.0 go.uber.org/zap v1.27.0 - golang.org/x/crypto v0.36.0 + golang.org/x/crypto v0.40.0 golang.org/x/time v0.11.0 gorm.io/driver/postgres v1.5.11 gorm.io/gorm v1.25.12 @@ -27,26 +27,24 @@ require ( require ( github.com/KyleBanks/depth v1.2.1 // indirect - github.com/PuerkitoBio/purell v1.2.1 // indirect - github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/aymerick/douceur v0.2.0 // indirect - github.com/bytedance/sonic v1.13.2 // indirect - github.com/bytedance/sonic/loader v0.2.4 // indirect - github.com/cespare/xxhash/v2 v2.1.2 // indirect - github.com/cloudwego/base64x v0.1.5 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect + github.com/bytedance/sonic v1.14.0 // indirect + github.com/bytedance/sonic/loader v0.3.0 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cloudwego/base64x v0.1.6 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/gabriel-vasile/mimetype v1.4.8 // indirect - github.com/gin-contrib/sse v1.0.0 // indirect + github.com/gin-contrib/sse v1.1.0 // indirect github.com/go-openapi/jsonpointer v0.21.1 // indirect github.com/go-openapi/jsonreference v0.21.0 // indirect github.com/go-openapi/spec v0.21.0 // indirect github.com/go-openapi/swag v0.23.1 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.26.0 // indirect + github.com/go-playground/validator/v10 v10.27.0 // indirect github.com/goccy/go-json v0.10.5 // indirect + github.com/goccy/go-yaml v1.18.0 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/gorilla/css v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect @@ -58,7 +56,7 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.16.7 // indirect - github.com/klauspost/cpuid/v2 v2.2.10 // indirect + github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/mailru/easyjson v0.9.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect @@ -66,27 +64,24 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/montanaflynn/stats v0.7.1 // indirect - github.com/pelletier/go-toml/v2 v2.2.3 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect + github.com/quic-go/qpack v0.5.1 // indirect + github.com/quic-go/quic-go v0.54.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/ugorji/go/codec v1.2.12 // indirect - github.com/urfave/cli/v2 v2.27.6 // indirect + github.com/ugorji/go/codec v1.3.0 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect - github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect go.uber.org/multierr v1.10.0 // indirect - golang.org/x/arch v0.15.0 // indirect - golang.org/x/net v0.38.0 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/text v0.23.0 // indirect - golang.org/x/tools v0.31.0 // indirect - google.golang.org/protobuf v1.36.6 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect + golang.org/x/arch v0.20.0 // indirect + golang.org/x/mod v0.25.0 // indirect + golang.org/x/net v0.42.0 // indirect + golang.org/x/sync v0.16.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/text v0.27.0 // indirect + golang.org/x/tools v0.34.0 // indirect + google.golang.org/protobuf v1.36.9 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/go.sum b/go.sum index 30042db..21e26c3 100644 --- a/go.sum +++ b/go.sum @@ -1,28 +1,17 @@ github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.2.1 h1:QsZ4TjvwiMpat6gBCBxEQI0rcS9ehtkKtSpiUnd9N28= -github.com/PuerkitoBio/purell v1.2.1/go.mod h1:ZwHcC/82TOaovDi//J/804umJFFmbOHPngi8iYYv/Eo= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/araujo88/gin-gonic-xss-middleware v0.0.0-20221014023455-d89f16de6a7e h1:LU3BP3OY2A0Gt5558uX8Szp7w6cpzU2HNt3St2nYL7k= github.com/araujo88/gin-gonic-xss-middleware v0.0.0-20221014023455-d89f16de6a7e/go.mod h1:7x5y9MHi7dSAbezjWCmFJLFd01YHn22LjARH8dXZ1ds= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= -github.com/bytedance/sonic v1.13.2 h1:8/H1FempDZqC4VqjptGo14QQlJx8VdZJegxs6wwfqpQ= -github.com/bytedance/sonic v1.13.2/go.mod h1:o68xyaF9u2gvVBuGHPlUVCy+ZfmNNO5ETf1+KgkJhz4= -github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= -github.com/bytedance/sonic/loader v0.2.4 h1:ZWCw4stuXUsn1/+zQDqeE7JKP+QO47tz7QCNan80NzY= -github.com/bytedance/sonic/loader v0.2.4/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4= -github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= -github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= -github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0= -github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/bytedance/sonic v1.14.0 h1:/OfKt8HFw0kh2rj8N0F6C/qPGRESq0BbaNZgcNXXzQQ= +github.com/bytedance/sonic v1.14.0/go.mod h1:WoEbx8WTcFJfzCe0hbmyTGrfjt8PzNEBdxlNUO24NhA= +github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA= +github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M= +github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -38,26 +27,16 @@ github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= github.com/gin-contrib/secure v1.1.1 h1:q1AGANrYRhJYYHZCF0VH/NVvP0uOSMXmXbsaqWRgIEQ= github.com/gin-contrib/secure v1.1.1/go.mod h1:4IhY8OTLEAI3R7qZF1ya4y75WowL8MJ09i2Kunl83HE= -github.com/gin-contrib/sse v1.0.0 h1:y3bT1mUWUxDpW4JLQg/HnTqV4rozuW4tC9eFKTxYI9E= -github.com/gin-contrib/sse v1.0.0/go.mod h1:zNuFdwarAygJBht0NTKiSi3jRf6RbqeILZ9Sp6Slhe0= -github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= -github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w= +github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM= +github.com/gin-gonic/gin v1.11.0 h1:OW/6PLjyusp2PPXtyxKHU0RbX6I/l28FTdDlae5ueWk= +github.com/gin-gonic/gin v1.11.0/go.mod h1:+iq/FyxlGzII0KHiBGjuNn4UNENUlKbGlNmc+W50Dls= github.com/go-openapi/jsonpointer v0.21.1 h1:whnzv/pNXtK2FbX/W9yJfRmE2gsmkfahjMKB0fZvcic= github.com/go-openapi/jsonpointer v0.21.1/go.mod h1:50I1STOfbY1ycR8jGz8DaMeLCdXiI6aDteEdRNNzpdk= -github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs= -github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= -github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M= -github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= -github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU= github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= @@ -66,21 +45,22 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.26.0 h1:SP05Nqhjcvz81uJaRfEV0YBSSSGMc/iMaVtFbr3Sw2k= -github.com/go-playground/validator/v10 v10.26.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= +github.com/go-playground/validator/v10 v10.27.0 h1:w8+XrWVMhGkxOaaowyKH35gFydVHOvC0/uWoy2Fzwn4= +github.com/go-playground/validator/v10 v10.27.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= +github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw= +github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= @@ -102,25 +82,16 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= -github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= -github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= +github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= @@ -134,38 +105,34 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= -github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= -github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= +github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= +github.com/quic-go/quic-go v0.54.0 h1:6s1YB9QotYI6Ospeiguknbp2Znb/jZYjZLRXn9kMQBg= +github.com/quic-go/quic-go v0.54.0/go.mod h1:e68ZEaCdyviluZmy44P6Iey98v/Wfz6HCjQEm+l8zTY= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M= @@ -174,18 +141,14 @@ github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A= github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= -github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -github.com/urfave/cli/v2 v2.27.6 h1:VdRdS98FNhKZ8/Az8B7MTyGQmpIr36O1EHybx/LaZ4g= -github.com/urfave/cli/v2 v2.27.6/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= +github.com/ugorji/go/codec v1.3.0 h1:Qd2W2sQawAfG8XSvzwhBeoGq71zXOC/Q1E9y/wUcsUA= +github.com/ugorji/go/codec v1.3.0/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= -github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= -github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM= github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= @@ -200,88 +163,76 @@ go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/arch v0.15.0 h1:QtOrQd0bTUnhNVNndMpLHNWrDmYzZ2KDqSrEymqInZw= -golang.org/x/arch v0.15.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE= +golang.org/x/arch v0.20.0 h1:dx1zTU0MAE98U+TQ8BLl7XsJbgze2WnNKF/8tGp/Q6c= +golang.org/x/arch v0.20.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= +golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= +golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= -golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= +golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4= +golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= -golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= -golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= +golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo= +golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= -google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= +google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= +google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/driver/postgres v1.5.11 h1:ubBVAfbKEUld/twyKZ0IYn9rSQh448EdelLYk9Mv314= gorm.io/driver/postgres v1.5.11/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI= gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= -nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= -sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= -sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/vendor/github.com/bytedance/sonic/.gitmodules b/vendor/github.com/bytedance/sonic/.gitmodules index ea84b99..5a2d998 100644 --- a/vendor/github.com/bytedance/sonic/.gitmodules +++ b/vendor/github.com/bytedance/sonic/.gitmodules @@ -4,3 +4,6 @@ [submodule "tools/simde"] path = tools/simde url = https://github.com/simd-everywhere/simde.git +[submodule "fuzz/go-fuzz-corpus"] + path = fuzz/go-fuzz-corpus + url = https://github.com/dvyukov/go-fuzz-corpus.git diff --git a/vendor/github.com/bytedance/sonic/README.md b/vendor/github.com/bytedance/sonic/README.md index 317878d..41fe776 100644 --- a/vendor/github.com/bytedance/sonic/README.md +++ b/vendor/github.com/bytedance/sonic/README.md @@ -385,12 +385,12 @@ See [ast/visitor.go](https://github.com/bytedance/sonic/blob/main/ast/visitor.go ## Compatibility -For developers who want to use sonic to meet diffirent scenarios, we provide some integrated configs as `sonic.API` +For developers who want to use sonic to meet different scenarios, we provide some integrated configs as `sonic.API` - `ConfigDefault`: the sonic's default config (`EscapeHTML=false`,`SortKeys=false`...) to run sonic fast meanwhile ensure security. - `ConfigStd`: the std-compatible config (`EscapeHTML=true`,`SortKeys=true`...) - `ConfigFastest`: the fastest config (`NoQuoteTextMarshaler=true`) to run on sonic as fast as possible. -Sonic **DOES NOT** ensure to support all environments, due to the difficulty of developing high-performance codes. On non-sonic-supporting environment, the implementation will fall back to `encoding/json`. Thus beflow configs will all equal to `ConfigStd`. +Sonic **DOES NOT** ensure to support all environments, due to the difficulty of developing high-performance codes. On non-sonic-supporting environment, the implementation will fall back to `encoding/json`. Thus below configs will all equal to `ConfigStd`. ## Tips diff --git a/vendor/github.com/bytedance/sonic/api.go b/vendor/github.com/bytedance/sonic/api.go index 406715e..3858d9a 100644 --- a/vendor/github.com/bytedance/sonic/api.go +++ b/vendor/github.com/bytedance/sonic/api.go @@ -94,6 +94,9 @@ type Config struct { // Encode Infinity or Nan float into `null`, instead of returning an error. EncodeNullForInfOrNan bool + + // CaseSensitive indicates that the decoder should not ignore the case of object keys. + CaseSensitive bool } var ( @@ -111,7 +114,6 @@ var ( // ConfigFastest is the fastest config of APIs, aiming at speed. ConfigFastest = Config{ - NoQuoteTextMarshaler: true, NoValidateJSONMarshaler: true, NoValidateJSONSkip: true, }.Froze() diff --git a/vendor/github.com/bytedance/sonic/ast/api.go b/vendor/github.com/bytedance/sonic/ast/api.go index 36151f2..38d7ab9 100644 --- a/vendor/github.com/bytedance/sonic/ast/api.go +++ b/vendor/github.com/bytedance/sonic/ast/api.go @@ -1,5 +1,5 @@ -//go:build (amd64 && go1.17 && !go1.25) || (arm64 && go1.20 && !go1.25) -// +build amd64,go1.17,!go1.25 arm64,go1.20,!go1.25 +//go:build (amd64 && go1.17 && !go1.26) || (arm64 && go1.20 && !go1.26) +// +build amd64,go1.17,!go1.26 arm64,go1.20,!go1.26 /* * Copyright 2022 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/ast/api_compat.go b/vendor/github.com/bytedance/sonic/ast/api_compat.go index 74119fe..0ca4d56 100644 --- a/vendor/github.com/bytedance/sonic/ast/api_compat.go +++ b/vendor/github.com/bytedance/sonic/ast/api_compat.go @@ -1,4 +1,4 @@ -// +build !amd64,!arm64 go1.25 !go1.17 arm64,!go1.20 +// +build !amd64,!arm64 go1.26 !go1.17 arm64,!go1.20 /* * Copyright 2022 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/ast/decode.go b/vendor/github.com/bytedance/sonic/ast/decode.go index 135ee6e..8922bac 100644 --- a/vendor/github.com/bytedance/sonic/ast/decode.go +++ b/vendor/github.com/bytedance/sonic/ast/decode.go @@ -27,8 +27,6 @@ import ( "github.com/bytedance/sonic/internal/utils" ) -// Hack: this is used for both checking space and cause friendly compile errors in 32-bit arch. -const _Sonic_Not_Support_32Bit_Arch__Checking_32Bit_Arch_Here = (1 << ' ') | (1 << '\t') | (1 << '\r') | (1 << '\n') var bytesNull = []byte("null") @@ -40,17 +38,13 @@ const ( bytesArray = "[]" ) -func isSpace(c byte) bool { - return (int(1<= 0 && isSpace(self.s[self.p]); self.p-=1 {} + for ; self.p >= 0 && utils.IsSpace(self.s[self.p]); self.p-=1 {} } func (self *Parser) decodeArray(ret *linkedNodes) (Node, types.ParsingError) { @@ -638,7 +639,7 @@ func Loads(src string) (int, interface{}, error) { } } -// LoadsUseNumber parse all json into interface{}, with numeric nodes casted to json.Number +// LoadsUseNumber parse all json into interface{}, with numeric nodes cast to json.Number func LoadsUseNumber(src string) (int, interface{}, error) { ps := &Parser{s: src} np, err := ps.Parse() @@ -692,7 +693,7 @@ func (self *Parser) ExportError(err types.ParsingError) error { } func backward(src string, i int) int { - for ; i>=0 && isSpace(src[i]); i-- {} + for ; i>=0 && utils.IsSpace(src[i]); i-- {} return i } diff --git a/vendor/github.com/bytedance/sonic/ast/visitor.go b/vendor/github.com/bytedance/sonic/ast/visitor.go index dc04785..fc71d40 100644 --- a/vendor/github.com/bytedance/sonic/ast/visitor.go +++ b/vendor/github.com/bytedance/sonic/ast/visitor.go @@ -178,7 +178,7 @@ func (self *traverser) decodeArray() error { /* allocate array space and parse every element */ if err := self.visitor.OnArrayBegin(_DEFAULT_NODE_CAP); err != nil { if err == VisitOPSkip { - // NOTICE: for user needs to skip entiry object + // NOTICE: for user needs to skip entry object self.parser.p -= 1 if _, e := self.parser.skipFast(); e != 0 { return e @@ -233,7 +233,7 @@ func (self *traverser) decodeObject() error { /* allocate object space and decode each pair */ if err := self.visitor.OnObjectBegin(_DEFAULT_NODE_CAP); err != nil { if err == VisitOPSkip { - // NOTICE: for user needs to skip entiry object + // NOTICE: for user needs to skip entry object self.parser.p -= 1 if _, e := self.parser.skipFast(); e != 0 { return e @@ -328,5 +328,5 @@ func (self *traverser) decodeString(iv int64, ep int) error { } // If visitor return this error on `OnObjectBegin()` or `OnArrayBegin()`, -// the transverer will skip entiry object or array +// the traverser will skip entry object or array var VisitOPSkip = errors.New("") diff --git a/vendor/github.com/bytedance/sonic/compat.go b/vendor/github.com/bytedance/sonic/compat.go index b694d7c..1fa670a 100644 --- a/vendor/github.com/bytedance/sonic/compat.go +++ b/vendor/github.com/bytedance/sonic/compat.go @@ -1,4 +1,4 @@ -// +build !amd64,!arm64 go1.25 !go1.17 arm64,!go1.20 +// +build !amd64,!arm64 go1.26 !go1.17 arm64,!go1.20 /* * Copyright 2021 ByteDance Inc. @@ -87,7 +87,17 @@ func (cfg frozenConfig) UnmarshalFromString(buf string, val interface{}) error { if cfg.DisallowUnknownFields { dec.DisallowUnknownFields() } - return dec.Decode(val) + err := dec.Decode(val) + if err != nil { + return err + } + + // check the trailing chars + offset := dec.InputOffset() + if t, err := dec.Token(); !(t == nil && err == io.EOF) { + return &json.SyntaxError{ Offset: offset} + } + return nil } // Unmarshal is implemented by sonic diff --git a/vendor/github.com/bytedance/sonic/decoder/decoder_compat.go b/vendor/github.com/bytedance/sonic/decoder/decoder_compat.go index 754e5fb..75b2174 100644 --- a/vendor/github.com/bytedance/sonic/decoder/decoder_compat.go +++ b/vendor/github.com/bytedance/sonic/decoder/decoder_compat.go @@ -1,5 +1,5 @@ -//go:build (!amd64 && !arm64) || go1.25 || !go1.17 || (arm64 && !go1.20) -// +build !amd64,!arm64 go1.25 !go1.17 arm64,!go1.20 +//go:build (!amd64 && !arm64) || go1.26 || !go1.17 || (arm64 && !go1.20) +// +build !amd64,!arm64 go1.26 !go1.17 arm64,!go1.20 /* * Copyright 2023 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/decoder/decoder_native.go b/vendor/github.com/bytedance/sonic/decoder/decoder_native.go index 563ca94..4313a4e 100644 --- a/vendor/github.com/bytedance/sonic/decoder/decoder_native.go +++ b/vendor/github.com/bytedance/sonic/decoder/decoder_native.go @@ -1,5 +1,5 @@ -//go:build (amd64 && go1.17 && !go1.25) || (arm64 && go1.20 && !go1.25) -// +build amd64,go1.17,!go1.25 arm64,go1.20,!go1.25 +//go:build (amd64 && go1.17 && !go1.26) || (arm64 && go1.20 && !go1.26) +// +build amd64,go1.17,!go1.26 arm64,go1.20,!go1.26 /* diff --git a/vendor/github.com/bytedance/sonic/encoder/encoder_compat.go b/vendor/github.com/bytedance/sonic/encoder/encoder_compat.go index d48e99b..a735054 100644 --- a/vendor/github.com/bytedance/sonic/encoder/encoder_compat.go +++ b/vendor/github.com/bytedance/sonic/encoder/encoder_compat.go @@ -1,4 +1,4 @@ -// +build !amd64,!arm64 go1.25 !go1.17 arm64,!go1.20 +// +build !amd64,!arm64 go1.26 !go1.17 arm64,!go1.20 /* * Copyright 2023 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/encoder/encoder_native.go b/vendor/github.com/bytedance/sonic/encoder/encoder_native.go index 2881da8..d38ab3c 100644 --- a/vendor/github.com/bytedance/sonic/encoder/encoder_native.go +++ b/vendor/github.com/bytedance/sonic/encoder/encoder_native.go @@ -1,4 +1,4 @@ -// +build amd64,go1.17,!go1.25 arm64,go1.20,!go1.25 +// +build amd64,go1.17,!go1.26 arm64,go1.20,!go1.26 /* * Copyright 2023 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/go.work b/vendor/github.com/bytedance/sonic/go.work index 8d2af51..7cac2c2 100644 --- a/vendor/github.com/bytedance/sonic/go.work +++ b/vendor/github.com/bytedance/sonic/go.work @@ -6,4 +6,5 @@ use ( ./fuzz ./generic_test ./loader + ./issue_test ) diff --git a/vendor/github.com/bytedance/sonic/internal/compat/warn.go b/vendor/github.com/bytedance/sonic/internal/compat/warn.go index bd9600e..4fabaab 100644 --- a/vendor/github.com/bytedance/sonic/internal/compat/warn.go +++ b/vendor/github.com/bytedance/sonic/internal/compat/warn.go @@ -1,4 +1,4 @@ -// +build !amd64,!arm64 go1.25 !go1.17 arm64,!go1.20 +// +build !amd64,!arm64 go1.26 !go1.17 arm64,!go1.20 package compat diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder_amd64.go b/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder_amd64.go index 551b35b..4e7f46f 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder_amd64.go @@ -1,5 +1,5 @@ -//go:build go1.17 && !go1.25 -// +build go1.17,!go1.25 +//go:build go1.17 && !go1.26 +// +build go1.17,!go1.26 /* * Copyright 2021 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder_arm64.go b/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder_arm64.go index a56e157..5a7d44d 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder_arm64.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/api/decoder_arm64.go @@ -1,4 +1,4 @@ -// +build go1.17,!go1.25 +// +build go1.17,!go1.26 /* * Copyright 2021 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/api/stream.go b/vendor/github.com/bytedance/sonic/internal/decoder/api/stream.go index 8a8102d..d0ee975 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/api/stream.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/api/stream.go @@ -17,14 +17,15 @@ package api import ( - `bytes` - `io` - `sync` - - `github.com/bytedance/sonic/internal/native` - `github.com/bytedance/sonic/internal/native/types` - `github.com/bytedance/sonic/internal/rt` - `github.com/bytedance/sonic/option` + "bytes" + "io" + "sync" + + "github.com/bytedance/sonic/internal/native" + "github.com/bytedance/sonic/internal/native/types" + "github.com/bytedance/sonic/internal/rt" + "github.com/bytedance/sonic/internal/utils" + "github.com/bytedance/sonic/option" ) var ( @@ -76,11 +77,12 @@ func (self *StreamDecoder) Decode(val interface{}) (err error) { if y := native.SkipOneFast(&src, &x); y < 0 { if self.readMore() { goto try_skip - } else { - err = SyntaxError{e, self.s, types.ParsingError(-s), ""} - self.setErr(err) - return + } + if self.err == nil { + self.err = SyntaxError{e, self.s, types.ParsingError(-s), ""} + self.setErr(self.err) } + return self.err } else { s = y + s e = x + s @@ -193,7 +195,7 @@ func (self *StreamDecoder) peek() (byte, error) { func (self *StreamDecoder) scan() (byte, bool) { for i := self.scanp; i < len(self.buf); i++ { c := self.buf[i] - if isSpace(c) { + if utils.IsSpace(c) { continue } self.scanp = i @@ -202,9 +204,6 @@ func (self *StreamDecoder) scan() (byte, bool) { return 0, true } -func isSpace(c byte) bool { - return types.SPACE_MASK & (1 << c) != 0 -} func (self *StreamDecoder) refill() error { // Make room to read more into the buffer. diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/asm_stubs_amd64_go121.go b/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/asm_stubs_amd64_go121.go index d6101b2..5cd3750 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/asm_stubs_amd64_go121.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/asm_stubs_amd64_go121.go @@ -1,4 +1,4 @@ -// +build go1.21,!go1.25 +// +build go1.21,!go1.26 // Copyright 2023 CloudWeGo Authors // diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/assembler_regabi_amd64.go b/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/assembler_regabi_amd64.go index 20c115e..10f6230 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/assembler_regabi_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/assembler_regabi_amd64.go @@ -1,5 +1,5 @@ -//go:build go1.17 && !go1.25 -// +build go1.17,!go1.25 +//go:build go1.17 && !go1.26 +// +build go1.17,!go1.26 /* * Copyright 2021 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/generic_regabi_amd64.go b/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/generic_regabi_amd64.go index 51a850a..2cb41f0 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/generic_regabi_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/generic_regabi_amd64.go @@ -1,4 +1,4 @@ -// +build go1.17,!go1.25 +// +build go1.17,!go1.26 /* * Copyright 2021 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/generic_regabi_amd64_test.s b/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/generic_regabi_amd64_test.s index f287eae..a08f0e2 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/generic_regabi_amd64_test.s +++ b/vendor/github.com/bytedance/sonic/internal/decoder/jitdec/generic_regabi_amd64_test.s @@ -1,4 +1,4 @@ -// +build go1.17,!go1.25 +// +build go1.17,!go1.26 // // Copyright 2021 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/optdec/helper.go b/vendor/github.com/bytedance/sonic/internal/decoder/optdec/helper.go index 61faa6c..0683f45 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/optdec/helper.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/optdec/helper.go @@ -28,11 +28,6 @@ func SkipNumberFast(json string, start int) (int, bool) { return pos, true } - -func isSpace(c byte) bool { - return c == ' ' || c == '\t' || c == '\n' || c == '\r' -} - // pos is the start index of the raw func ValidNumberFast(raw string) bool { ret := utils.SkipNumber(raw, 0) @@ -48,22 +43,12 @@ func ValidNumberFast(raw string) bool { return true } -func SkipOneFast2(json string, pos *int) (int, error) { - // find the number ending, we parsed in sonic-cpp, it always valid - start := native.SkipOneFast(&json, pos) - if start < 0 { - return -1, error_syntax(*pos, json, types.ParsingError(-start).Error()) - } - return start, nil -} - func SkipOneFast(json string, pos int) (string, error) { - // find the number ending, we parsed in sonic-cpp, it always valid start := native.SkipOneFast(&json, &pos) if start < 0 { - // TODO: details error code return "", error_syntax(pos, json, types.ParsingError(-start).Error()) } + return json[start:pos], nil } diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/optdec/node.go b/vendor/github.com/bytedance/sonic/internal/decoder/optdec/node.go index 774b6ee..085e811 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/optdec/node.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/optdec/node.go @@ -12,7 +12,7 @@ import ( type Context struct { Parser *Parser efacePool *efacePool - Stack bounedStack + Stack boundedStack Utf8Inv bool } @@ -26,20 +26,20 @@ type parentStat struct { con unsafe.Pointer remain uint64 } -type bounedStack struct { +type boundedStack struct { stack []parentStat index int } -func newStack(size int) bounedStack { - return bounedStack{ +func newStack(size int) boundedStack { + return boundedStack{ stack: make([]parentStat, size + 2), index: 0, } } //go:nosplit -func (s *bounedStack) Pop() (unsafe.Pointer, int, bool){ +func (s *boundedStack) Pop() (unsafe.Pointer, int, bool){ s.index-- con := s.stack[s.index].con remain := s.stack[s.index].remain &^ (uint64(1) << 63) @@ -50,7 +50,7 @@ func (s *bounedStack) Pop() (unsafe.Pointer, int, bool){ } //go:nosplit -func (s *bounedStack) Push(p unsafe.Pointer, remain int, isObj bool) { +func (s *boundedStack) Push(p unsafe.Pointer, remain int, isObj bool) { s.stack[s.index].con = p s.stack[s.index].remain = uint64(remain) if isObj { @@ -1253,7 +1253,7 @@ func (node *Node) AsEfaceFallback(ctx *Context) (interface{}, error) { if ctx.Parser.options & (1 << _F_use_number) != 0 { num, ok := node.AsNumber(ctx) if !ok { - // skip the unmacthed type + // skip the unmatched type *node = NewNode(node.Next()) return nil, newUnmatched(node.Position(), rt.JsonNumberType) } else { @@ -1275,13 +1275,13 @@ func (node *Node) AsEfaceFallback(ctx *Context) (interface{}, error) { return f, nil } - // skip the unmacthed type + // skip the unmatched type *node = NewNode(node.Next()) return nil, newUnmatched(node.Position(), rt.Int64Type) } else { num, ok := node.AsF64(ctx) if !ok { - // skip the unmacthed type + // skip the unmatched type *node = NewNode(node.Next()) return nil, newUnmatched(node.Position(), rt.Float64Type) } else { diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/alg/mapiter.go b/vendor/github.com/bytedance/sonic/internal/encoder/alg/mapiter.go index 032ae3b..090afac 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/alg/mapiter.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/alg/mapiter.go @@ -97,17 +97,18 @@ func (self *MapIterator) append(t *rt.GoType, k unsafe.Pointer, v unsafe.Pointer func (self *MapIterator) appendGeneric(p *_MapPair, t *rt.GoType, v reflect.Kind, k unsafe.Pointer) error { switch v { - case reflect.Int : p.k = rt.Mem2Str(strconv.AppendInt(p.m[:0], int64(*(*int)(k)), 10)) ; return nil - case reflect.Int8 : p.k = rt.Mem2Str(strconv.AppendInt(p.m[:0], int64(*(*int8)(k)), 10)) ; return nil - case reflect.Int16 : p.k = rt.Mem2Str(strconv.AppendInt(p.m[:0], int64(*(*int16)(k)), 10)) ; return nil - case reflect.Int32 : p.k = rt.Mem2Str(strconv.AppendInt(p.m[:0], int64(*(*int32)(k)), 10)) ; return nil - case reflect.Int64 : p.k = rt.Mem2Str(strconv.AppendInt(p.m[:0], int64(*(*int64)(k)), 10)) ; return nil + case reflect.Int : p.k = rt.Mem2Str(strconv.AppendInt(p.m[:0], int64(*(*int)(k)), 10)) ; return nil + case reflect.Int8 : p.k = rt.Mem2Str(strconv.AppendInt(p.m[:0], int64(*(*int8)(k)), 10)) ; return nil + case reflect.Int16 : p.k = rt.Mem2Str(strconv.AppendInt(p.m[:0], int64(*(*int16)(k)), 10)) ; return nil + case reflect.Int32 : p.k = rt.Mem2Str(strconv.AppendInt(p.m[:0], int64(*(*int32)(k)), 10)) ; return nil + case reflect.Int64 : p.k = rt.Mem2Str(strconv.AppendInt(p.m[:0], int64(*(*int64)(k)), 10)) ; return nil case reflect.Uint : p.k = rt.Mem2Str(strconv.AppendUint(p.m[:0], uint64(*(*uint)(k)), 10)) ; return nil case reflect.Uint8 : p.k = rt.Mem2Str(strconv.AppendUint(p.m[:0], uint64(*(*uint8)(k)), 10)) ; return nil case reflect.Uint16 : p.k = rt.Mem2Str(strconv.AppendUint(p.m[:0], uint64(*(*uint16)(k)), 10)) ; return nil case reflect.Uint32 : p.k = rt.Mem2Str(strconv.AppendUint(p.m[:0], uint64(*(*uint32)(k)), 10)) ; return nil - case reflect.Uint64 : p.k = rt.Mem2Str(strconv.AppendUint(p.m[:0], uint64(*(*uint64)(k)), 10)) ; return nil + case reflect.Uint64 : p.k = rt.Mem2Str(strconv.AppendUint(p.m[:0], uint64(*(*uint64)(k)), 10)) ; return nil case reflect.Uintptr : p.k = rt.Mem2Str(strconv.AppendUint(p.m[:0], uint64(*(*uintptr)(k)), 10)) ; return nil + case reflect.Bool : if *(*bool)(k) { p.k = "true" } else { p.k = "false" }; return nil case reflect.Interface : return self.appendInterface(p, t, k) case reflect.Struct, reflect.Ptr : return self.appendConcrete(p, t, k) default : panic("unexpected map key type") diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec.go b/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec.go index 6f76ac7..e0b2fc9 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec.go @@ -1,5 +1,5 @@ -//go:build (amd64 && go1.16 && !go1.25) || (arm64 && go1.20 && !go1.25) -// +build amd64,go1.16,!go1.25 arm64,go1.20,!go1.25 +//go:build (amd64 && go1.16 && !go1.26) || (arm64 && go1.20 && !go1.26) +// +build amd64,go1.16,!go1.26 arm64,go1.20,!go1.26 /** * Copyright 2024 ByteDance Inc. @@ -21,6 +21,7 @@ package alg import ( "runtime" + "strconv" "unsafe" "github.com/bytedance/sonic/internal/native" @@ -177,22 +178,9 @@ func F32toa(buf []byte, v float32) ([]byte) { } func I64toa(buf []byte, v int64) ([]byte) { - buf = rt.GuardSlice2(buf, 32) - ret := native.I64toa((*byte)(rt.IndexByte(buf, len(buf))), v) - if ret > 0 { - return buf[:len(buf)+ret] - } else { - return buf - } + return strconv.AppendInt(buf, v, 10) } func U64toa(buf []byte, v uint64) ([]byte) { - buf = rt.GuardSlice2(buf, 32) - ret := native.U64toa((*byte)(rt.IndexByte(buf, len(buf))), v) - if ret > 0 { - return buf[:len(buf)+ret] - } else { - return buf - } + return strconv.AppendUint(buf, v, 10) } - diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec_compat.go b/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec_compat.go index cd83698..cd9beab 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec_compat.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec_compat.go @@ -1,4 +1,4 @@ -// +build !amd64,!arm64 go1.25 !go1.16 arm64,!go1.20 +// +build !amd64,!arm64 go1.26 !go1.16 arm64,!go1.20 /** * Copyright 2024 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/x86/asm_stubs_amd64_go121.go b/vendor/github.com/bytedance/sonic/internal/encoder/x86/asm_stubs_amd64_go121.go index 6956bd9..34a2ff3 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/x86/asm_stubs_amd64_go121.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/x86/asm_stubs_amd64_go121.go @@ -1,5 +1,5 @@ -//go:build go1.21 && !go1.25 -// +build go1.21,!go1.25 +//go:build go1.21 && !go1.26 +// +build go1.21,!go1.26 // Copyright 2023 CloudWeGo Authors // diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/x86/assembler_regabi_amd64.go b/vendor/github.com/bytedance/sonic/internal/encoder/x86/assembler_regabi_amd64.go index d6d4513..927c436 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/x86/assembler_regabi_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/x86/assembler_regabi_amd64.go @@ -1,5 +1,5 @@ -//go:build go1.17 && !go1.25 -// +build go1.17,!go1.25 +//go:build go1.17 && !go1.26 +// +build go1.17,!go1.26 /* * Copyright 2021 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/x86/debug_go117.go b/vendor/github.com/bytedance/sonic/internal/encoder/x86/debug_go117.go index 1d13387..6d7659e 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/x86/debug_go117.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/x86/debug_go117.go @@ -1,5 +1,5 @@ -//go:build go1.17 && !go1.25 -// +build go1.17,!go1.25 +//go:build go1.17 && !go1.26 +// +build go1.17,!go1.26 /* * Copyright 2021 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/get_by_path_subr.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/get_by_path_subr.go index a371176..02c6944 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/get_by_path_subr.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx2/get_by_path_subr.go @@ -16,7 +16,7 @@ const ( ) const ( - _size__get_by_path = 21452 + _size__get_by_path = 22296 ) var ( @@ -28,15 +28,15 @@ var ( {0xc, 32}, {0xd, 40}, {0x14, 48}, - {0x4a1c, 240}, - {0x4a1d, 48}, - {0x4a1f, 40}, - {0x4a21, 32}, - {0x4a23, 24}, - {0x4a25, 16}, - {0x4a26, 8}, - {0x4a2a, 0}, - {0x53cc, 240}, + {0x4ca0, 240}, + {0x4ca1, 48}, + {0x4ca3, 40}, + {0x4ca5, 32}, + {0x4ca7, 24}, + {0x4ca9, 16}, + {0x4caa, 8}, + {0x4cae, 0}, + {0x5718, 240}, } ) diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/get_by_path_text_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/get_by_path_text_amd64.go index a99b8fd..3c0239f 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/get_by_path_text_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx2/get_by_path_text_amd64.go @@ -115,171 +115,170 @@ var _text_get_by_path = []byte{ 0x53, //0x0000028c pushq %rbx 0x48, 0x81, 0xec, 0xc0, 0x00, 0x00, 0x00, //0x0000028d subq $192, %rsp 0x48, 0x89, 0x4c, 0x24, 0x10, //0x00000294 movq %rcx, $16(%rsp) - 0x49, 0x89, 0xf0, //0x00000299 movq %rsi, %r8 - 0x49, 0x89, 0xfb, //0x0000029c movq %rdi, %r11 - 0x48, 0x8b, 0x42, 0x08, //0x0000029f movq $8(%rdx), %rax - 0x4c, 0x8d, 0x6f, 0x08, //0x000002a3 leaq $8(%rdi), %r13 - 0x48, 0x85, 0xc0, //0x000002a7 testq %rax, %rax - 0x48, 0x89, 0x74, 0x24, 0x08, //0x000002aa movq %rsi, $8(%rsp) - 0x48, 0x89, 0x7c, 0x24, 0x20, //0x000002af movq %rdi, $32(%rsp) - 0x0f, 0x84, 0x32, 0x2b, 0x00, 0x00, //0x000002b4 je LBB0_520 + 0x49, 0x89, 0xf1, //0x00000299 movq %rsi, %r9 + 0x48, 0x8b, 0x4a, 0x08, //0x0000029c movq $8(%rdx), %rcx + 0x48, 0x89, 0xbc, 0x24, 0x90, 0x00, 0x00, 0x00, //0x000002a0 movq %rdi, $144(%rsp) + 0x4c, 0x8d, 0x6f, 0x08, //0x000002a8 leaq $8(%rdi), %r13 + 0x48, 0x85, 0xc9, //0x000002ac testq %rcx, %rcx + 0x48, 0x89, 0x74, 0x24, 0x08, //0x000002af movq %rsi, $8(%rsp) + 0x0f, 0x84, 0xc0, 0x2d, 0x00, 0x00, //0x000002b4 je LBB0_538 0x4c, 0x8b, 0x3a, //0x000002ba movq (%rdx), %r15 - 0x48, 0xc1, 0xe0, 0x04, //0x000002bd shlq $4, %rax - 0x4c, 0x01, 0xf8, //0x000002c1 addq %r15, %rax - 0x48, 0x89, 0x84, 0x24, 0xa0, 0x00, 0x00, 0x00, //0x000002c4 movq %rax, $160(%rsp) - 0x4d, 0x8b, 0x23, //0x000002cc movq (%r11), %r12 - 0x49, 0x8b, 0x00, //0x000002cf movq (%r8), %rax + 0x48, 0xc1, 0xe1, 0x04, //0x000002bd shlq $4, %rcx + 0x4c, 0x01, 0xf9, //0x000002c1 addq %r15, %rcx + 0x48, 0x8b, 0x84, 0x24, 0x90, 0x00, 0x00, 0x00, //0x000002c4 movq $144(%rsp), %rax + 0x4c, 0x8b, 0x20, //0x000002cc movq (%rax), %r12 + 0x49, 0x8b, 0x01, //0x000002cf movq (%r9), %rax 0xc5, 0xfe, 0x6f, 0x05, 0x26, 0xfd, 0xff, 0xff, //0x000002d2 vmovdqu $-730(%rip), %ymm0 /* LCPI0_0+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x0d, 0x9e, 0xfd, 0xff, 0xff, //0x000002da vmovdqu $-610(%rip), %ymm1 /* LCPI0_7+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x15, 0xb6, 0xfd, 0xff, 0xff, //0x000002e2 vmovdqu $-586(%rip), %ymm2 /* LCPI0_8+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x2e, 0xfd, 0xff, 0xff, //0x000002ea vmovdqu $-722(%rip), %ymm3 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x46, 0xfd, 0xff, 0xff, //0x000002f2 vmovdqu $-698(%rip), %ymm4 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x2d, 0x5e, 0xfd, 0xff, 0xff, //0x000002fa vmovdqu $-674(%rip), %ymm5 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7a, 0x6f, 0x05, 0xf6, 0xfe, 0xff, 0xff, //0x00000302 vmovdqu $-266(%rip), %xmm8 /* LCPI0_6+0(%rip) */ - 0xc4, 0x41, 0x31, 0x76, 0xc9, //0x0000030a vpcmpeqd %xmm9, %xmm9, %xmm9 - 0xc5, 0x7e, 0x6f, 0x15, 0xe9, 0xfd, 0xff, 0xff, //0x0000030f vmovdqu $-535(%rip), %ymm10 /* LCPI0_11+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0xa1, 0xfd, 0xff, 0xff, //0x00000317 vmovdqu $-607(%rip), %ymm12 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0xb9, 0xfd, 0xff, 0xff, //0x0000031f vmovdqu $-583(%rip), %ymm13 /* LCPI0_10+0(%rip) */ - //0x00000327 LBB0_2 - 0x49, 0x8b, 0x4d, 0x00, //0x00000327 movq (%r13), %rcx - 0x48, 0x39, 0xc8, //0x0000032b cmpq %rcx, %rax - 0x0f, 0x83, 0x2c, 0x00, 0x00, 0x00, //0x0000032e jae LBB0_7 - 0x41, 0x8a, 0x14, 0x04, //0x00000334 movb (%r12,%rax), %dl - 0x80, 0xfa, 0x0d, //0x00000338 cmpb $13, %dl - 0x0f, 0x84, 0x1f, 0x00, 0x00, 0x00, //0x0000033b je LBB0_7 - 0x80, 0xfa, 0x20, //0x00000341 cmpb $32, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000344 je LBB0_7 - 0x80, 0xc2, 0xf7, //0x0000034a addb $-9, %dl - 0x80, 0xfa, 0x01, //0x0000034d cmpb $1, %dl - 0x0f, 0x86, 0x0a, 0x00, 0x00, 0x00, //0x00000350 jbe LBB0_7 - 0x48, 0x89, 0xc2, //0x00000356 movq %rax, %rdx - 0xe9, 0xa3, 0x01, 0x00, 0x00, //0x00000359 jmp LBB0_32 - 0x90, 0x90, //0x0000035e .p2align 4, 0x90 - //0x00000360 LBB0_7 - 0x48, 0x8d, 0x50, 0x01, //0x00000360 leaq $1(%rax), %rdx - 0x48, 0x39, 0xca, //0x00000364 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000367 jae LBB0_11 - 0x41, 0x8a, 0x1c, 0x14, //0x0000036d movb (%r12,%rdx), %bl - 0x80, 0xfb, 0x0d, //0x00000371 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000374 je LBB0_11 - 0x80, 0xfb, 0x20, //0x0000037a cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000037d je LBB0_11 - 0x80, 0xc3, 0xf7, //0x00000383 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000386 cmpb $1, %bl - 0x0f, 0x87, 0x72, 0x01, 0x00, 0x00, //0x00000389 ja LBB0_32 - 0x90, //0x0000038f .p2align 4, 0x90 - //0x00000390 LBB0_11 - 0x48, 0x8d, 0x50, 0x02, //0x00000390 leaq $2(%rax), %rdx - 0x48, 0x39, 0xca, //0x00000394 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000397 jae LBB0_15 - 0x41, 0x8a, 0x1c, 0x14, //0x0000039d movb (%r12,%rdx), %bl - 0x80, 0xfb, 0x0d, //0x000003a1 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000003a4 je LBB0_15 - 0x80, 0xfb, 0x20, //0x000003aa cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000003ad je LBB0_15 - 0x80, 0xc3, 0xf7, //0x000003b3 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x000003b6 cmpb $1, %bl - 0x0f, 0x87, 0x42, 0x01, 0x00, 0x00, //0x000003b9 ja LBB0_32 - 0x90, //0x000003bf .p2align 4, 0x90 - //0x000003c0 LBB0_15 - 0x48, 0x8d, 0x50, 0x03, //0x000003c0 leaq $3(%rax), %rdx - 0x48, 0x39, 0xca, //0x000003c4 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000003c7 jae LBB0_19 - 0x41, 0x8a, 0x1c, 0x14, //0x000003cd movb (%r12,%rdx), %bl - 0x80, 0xfb, 0x0d, //0x000003d1 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000003d4 je LBB0_19 - 0x80, 0xfb, 0x20, //0x000003da cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000003dd je LBB0_19 - 0x80, 0xc3, 0xf7, //0x000003e3 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x000003e6 cmpb $1, %bl - 0x0f, 0x87, 0x12, 0x01, 0x00, 0x00, //0x000003e9 ja LBB0_32 - 0x90, //0x000003ef .p2align 4, 0x90 - //0x000003f0 LBB0_19 - 0x4c, 0x8d, 0x70, 0x04, //0x000003f0 leaq $4(%rax), %r14 - 0x48, 0x89, 0xce, //0x000003f4 movq %rcx, %rsi - 0x4c, 0x29, 0xf6, //0x000003f7 subq %r14, %rsi - 0x0f, 0x86, 0xd0, 0x00, 0x00, 0x00, //0x000003fa jbe LBB0_629 - 0x48, 0x83, 0xfe, 0x20, //0x00000400 cmpq $32, %rsi - 0x0f, 0x82, 0xbd, 0x29, 0x00, 0x00, //0x00000404 jb LBB0_594 - 0x48, 0xc7, 0xc6, 0xfc, 0xff, 0xff, 0xff, //0x0000040a movq $-4, %rsi - 0x48, 0x29, 0xc6, //0x00000411 subq %rax, %rsi - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000414 .p2align 4, 0x90 - //0x00000420 LBB0_22 - 0xc4, 0x01, 0x7e, 0x6f, 0x34, 0x34, //0x00000420 vmovdqu (%r12,%r14), %ymm14 - 0xc4, 0x42, 0x7d, 0x00, 0xfe, //0x00000426 vpshufb %ymm14, %ymm0, %ymm15 - 0xc4, 0x41, 0x0d, 0x74, 0xf7, //0x0000042b vpcmpeqb %ymm15, %ymm14, %ymm14 - 0xc4, 0xc1, 0x7d, 0xd7, 0xd6, //0x00000430 vpmovmskb %ymm14, %edx - 0x83, 0xfa, 0xff, //0x00000435 cmpl $-1, %edx - 0x0f, 0x85, 0xb2, 0x00, 0x00, 0x00, //0x00000438 jne LBB0_31 - 0x49, 0x83, 0xc6, 0x20, //0x0000043e addq $32, %r14 - 0x48, 0x8d, 0x14, 0x31, //0x00000442 leaq (%rcx,%rsi), %rdx - 0x48, 0x83, 0xc2, 0xe0, //0x00000446 addq $-32, %rdx - 0x48, 0x83, 0xc6, 0xe0, //0x0000044a addq $-32, %rsi - 0x48, 0x83, 0xfa, 0x1f, //0x0000044e cmpq $31, %rdx - 0x0f, 0x87, 0xc8, 0xff, 0xff, 0xff, //0x00000452 ja LBB0_22 - 0x4c, 0x89, 0xe2, //0x00000458 movq %r12, %rdx - 0x48, 0x29, 0xf2, //0x0000045b subq %rsi, %rdx - 0x48, 0x01, 0xce, //0x0000045e addq %rcx, %rsi - 0x48, 0x85, 0xf6, //0x00000461 testq %rsi, %rsi - 0x0f, 0x84, 0x3e, 0x00, 0x00, 0x00, //0x00000464 je LBB0_30 - //0x0000046a LBB0_25 - 0x4c, 0x8d, 0x04, 0x32, //0x0000046a leaq (%rdx,%rsi), %r8 - 0x31, 0xff, //0x0000046e xorl %edi, %edi - //0x00000470 LBB0_26 - 0x44, 0x0f, 0xbe, 0x0c, 0x3a, //0x00000470 movsbl (%rdx,%rdi), %r9d - 0x41, 0x83, 0xf9, 0x20, //0x00000475 cmpl $32, %r9d - 0x0f, 0x87, 0x1b, 0x29, 0x00, 0x00, //0x00000479 ja LBB0_33 - 0x48, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000047f movabsq $4294977024, %rbx - 0x4c, 0x0f, 0xa3, 0xcb, //0x00000489 btq %r9, %rbx - 0x0f, 0x83, 0x07, 0x29, 0x00, 0x00, //0x0000048d jae LBB0_33 - 0x48, 0x83, 0xc7, 0x01, //0x00000493 addq $1, %rdi - 0x48, 0x39, 0xfe, //0x00000497 cmpq %rdi, %rsi - 0x0f, 0x85, 0xd0, 0xff, 0xff, 0xff, //0x0000049a jne LBB0_26 - 0x4c, 0x89, 0xc2, //0x000004a0 movq %r8, %rdx - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x000004a3 movq $8(%rsp), %r8 - //0x000004a8 LBB0_30 - 0x4c, 0x29, 0xe2, //0x000004a8 subq %r12, %rdx - 0x48, 0x39, 0xca, //0x000004ab cmpq %rcx, %rdx - 0x0f, 0x82, 0x4d, 0x00, 0x00, 0x00, //0x000004ae jb LBB0_32 - //0x000004b4 LBB0_34 - 0x31, 0xc9, //0x000004b4 xorl %ecx, %ecx - 0x49, 0x89, 0xc6, //0x000004b6 movq %rax, %r14 - 0x49, 0x8b, 0x07, //0x000004b9 movq (%r15), %rax - 0x48, 0x85, 0xc0, //0x000004bc testq %rax, %rax - 0x0f, 0x85, 0x53, 0x00, 0x00, 0x00, //0x000004bf jne LBB0_35 - 0xe9, 0x11, 0x46, 0x00, 0x00, //0x000004c5 jmp LBB0_630 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000004ca .p2align 4, 0x90 - //0x000004d0 LBB0_629 - 0x4d, 0x89, 0x30, //0x000004d0 movq %r14, (%r8) + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000002da movabsq $4294977024, %r10 + 0xc5, 0xfe, 0x6f, 0x0d, 0x94, 0xfd, 0xff, 0xff, //0x000002e4 vmovdqu $-620(%rip), %ymm1 /* LCPI0_7+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x15, 0xac, 0xfd, 0xff, 0xff, //0x000002ec vmovdqu $-596(%rip), %ymm2 /* LCPI0_8+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x24, 0xfd, 0xff, 0xff, //0x000002f4 vmovdqu $-732(%rip), %ymm3 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x3c, 0xfd, 0xff, 0xff, //0x000002fc vmovdqu $-708(%rip), %ymm4 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x2d, 0x54, 0xfd, 0xff, 0xff, //0x00000304 vmovdqu $-684(%rip), %ymm5 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7a, 0x6f, 0x05, 0xec, 0xfe, 0xff, 0xff, //0x0000030c vmovdqu $-276(%rip), %xmm8 /* LCPI0_6+0(%rip) */ + 0xc4, 0x41, 0x31, 0x76, 0xc9, //0x00000314 vpcmpeqd %xmm9, %xmm9, %xmm9 + 0xc5, 0x7e, 0x6f, 0x15, 0xdf, 0xfd, 0xff, 0xff, //0x00000319 vmovdqu $-545(%rip), %ymm10 /* LCPI0_11+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x97, 0xfd, 0xff, 0xff, //0x00000321 vmovdqu $-617(%rip), %ymm12 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0xaf, 0xfd, 0xff, 0xff, //0x00000329 vmovdqu $-593(%rip), %ymm13 /* LCPI0_10+0(%rip) */ + 0x48, 0x89, 0x8c, 0x24, 0xa0, 0x00, 0x00, 0x00, //0x00000331 movq %rcx, $160(%rsp) + //0x00000339 LBB0_2 + 0x49, 0x8b, 0x4d, 0x00, //0x00000339 movq (%r13), %rcx + 0x48, 0x39, 0xc8, //0x0000033d cmpq %rcx, %rax + 0x0f, 0x83, 0x2a, 0x00, 0x00, 0x00, //0x00000340 jae LBB0_7 + 0x41, 0x8a, 0x14, 0x04, //0x00000346 movb (%r12,%rax), %dl + 0x80, 0xfa, 0x0d, //0x0000034a cmpb $13, %dl + 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x0000034d je LBB0_7 + 0x80, 0xfa, 0x20, //0x00000353 cmpb $32, %dl + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00000356 je LBB0_7 + 0x80, 0xc2, 0xf7, //0x0000035c addb $-9, %dl + 0x80, 0xfa, 0x01, //0x0000035f cmpb $1, %dl + 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x00000362 jbe LBB0_7 + 0x48, 0x89, 0xc2, //0x00000368 movq %rax, %rdx + 0xe9, 0x91, 0x01, 0x00, 0x00, //0x0000036b jmp LBB0_32 + //0x00000370 .p2align 4, 0x90 + //0x00000370 LBB0_7 + 0x48, 0x8d, 0x50, 0x01, //0x00000370 leaq $1(%rax), %rdx + 0x48, 0x39, 0xca, //0x00000374 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000377 jae LBB0_11 + 0x41, 0x8a, 0x1c, 0x14, //0x0000037d movb (%r12,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x00000381 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000384 je LBB0_11 + 0x80, 0xfb, 0x20, //0x0000038a cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000038d je LBB0_11 + 0x80, 0xc3, 0xf7, //0x00000393 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000396 cmpb $1, %bl + 0x0f, 0x87, 0x62, 0x01, 0x00, 0x00, //0x00000399 ja LBB0_32 + 0x90, //0x0000039f .p2align 4, 0x90 + //0x000003a0 LBB0_11 + 0x48, 0x8d, 0x50, 0x02, //0x000003a0 leaq $2(%rax), %rdx + 0x48, 0x39, 0xca, //0x000003a4 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000003a7 jae LBB0_15 + 0x41, 0x8a, 0x1c, 0x14, //0x000003ad movb (%r12,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x000003b1 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000003b4 je LBB0_15 + 0x80, 0xfb, 0x20, //0x000003ba cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000003bd je LBB0_15 + 0x80, 0xc3, 0xf7, //0x000003c3 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000003c6 cmpb $1, %bl + 0x0f, 0x87, 0x32, 0x01, 0x00, 0x00, //0x000003c9 ja LBB0_32 + 0x90, //0x000003cf .p2align 4, 0x90 + //0x000003d0 LBB0_15 + 0x48, 0x8d, 0x50, 0x03, //0x000003d0 leaq $3(%rax), %rdx + 0x48, 0x39, 0xca, //0x000003d4 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000003d7 jae LBB0_19 + 0x41, 0x8a, 0x1c, 0x14, //0x000003dd movb (%r12,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x000003e1 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000003e4 je LBB0_19 + 0x80, 0xfb, 0x20, //0x000003ea cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000003ed je LBB0_19 + 0x80, 0xc3, 0xf7, //0x000003f3 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000003f6 cmpb $1, %bl + 0x0f, 0x87, 0x02, 0x01, 0x00, 0x00, //0x000003f9 ja LBB0_32 + 0x90, //0x000003ff .p2align 4, 0x90 + //0x00000400 LBB0_19 + 0x4c, 0x8d, 0x70, 0x04, //0x00000400 leaq $4(%rax), %r14 + 0x48, 0x89, 0xcf, //0x00000404 movq %rcx, %rdi + 0x4c, 0x29, 0xf7, //0x00000407 subq %r14, %rdi + 0x0f, 0x86, 0xc0, 0x00, 0x00, 0x00, //0x0000040a jbe LBB0_648 + 0x48, 0x83, 0xff, 0x20, //0x00000410 cmpq $32, %rdi + 0x0f, 0x82, 0x3b, 0x2c, 0x00, 0x00, //0x00000414 jb LBB0_613 + 0x48, 0xc7, 0xc7, 0xfc, 0xff, 0xff, 0xff, //0x0000041a movq $-4, %rdi + 0x48, 0x29, 0xc7, //0x00000421 subq %rax, %rdi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000424 .p2align 4, 0x90 + //0x00000430 LBB0_22 + 0xc4, 0x01, 0x7e, 0x6f, 0x34, 0x34, //0x00000430 vmovdqu (%r12,%r14), %ymm14 + 0xc4, 0x42, 0x7d, 0x00, 0xfe, //0x00000436 vpshufb %ymm14, %ymm0, %ymm15 + 0xc4, 0x41, 0x0d, 0x74, 0xf7, //0x0000043b vpcmpeqb %ymm15, %ymm14, %ymm14 + 0xc4, 0xc1, 0x7d, 0xd7, 0xd6, //0x00000440 vpmovmskb %ymm14, %edx + 0x83, 0xfa, 0xff, //0x00000445 cmpl $-1, %edx + 0x0f, 0x85, 0xa2, 0x00, 0x00, 0x00, //0x00000448 jne LBB0_31 + 0x49, 0x83, 0xc6, 0x20, //0x0000044e addq $32, %r14 + 0x48, 0x8d, 0x14, 0x39, //0x00000452 leaq (%rcx,%rdi), %rdx + 0x48, 0x83, 0xc2, 0xe0, //0x00000456 addq $-32, %rdx + 0x48, 0x83, 0xc7, 0xe0, //0x0000045a addq $-32, %rdi + 0x48, 0x83, 0xfa, 0x1f, //0x0000045e cmpq $31, %rdx + 0x0f, 0x87, 0xc8, 0xff, 0xff, 0xff, //0x00000462 ja LBB0_22 + 0x4c, 0x89, 0xe2, //0x00000468 movq %r12, %rdx + 0x48, 0x29, 0xfa, //0x0000046b subq %rdi, %rdx + 0x48, 0x01, 0xcf, //0x0000046e addq %rcx, %rdi + 0x48, 0x85, 0xff, //0x00000471 testq %rdi, %rdi + 0x0f, 0x84, 0x2d, 0x00, 0x00, 0x00, //0x00000474 je LBB0_30 + //0x0000047a LBB0_25 + 0x4c, 0x8d, 0x04, 0x3a, //0x0000047a leaq (%rdx,%rdi), %r8 + 0x31, 0xf6, //0x0000047e xorl %esi, %esi + //0x00000480 LBB0_26 + 0x0f, 0xbe, 0x1c, 0x32, //0x00000480 movsbl (%rdx,%rsi), %ebx + 0x83, 0xfb, 0x20, //0x00000484 cmpl $32, %ebx + 0x0f, 0x87, 0xa0, 0x2b, 0x00, 0x00, //0x00000487 ja LBB0_33 + 0x49, 0x0f, 0xa3, 0xda, //0x0000048d btq %rbx, %r10 + 0x0f, 0x83, 0x96, 0x2b, 0x00, 0x00, //0x00000491 jae LBB0_33 + 0x48, 0x83, 0xc6, 0x01, //0x00000497 addq $1, %rsi + 0x48, 0x39, 0xf7, //0x0000049b cmpq %rsi, %rdi + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x0000049e jne LBB0_26 + 0x4c, 0x89, 0xc2, //0x000004a4 movq %r8, %rdx + //0x000004a7 LBB0_30 + 0x4c, 0x29, 0xe2, //0x000004a7 subq %r12, %rdx + 0x48, 0x39, 0xca, //0x000004aa cmpq %rcx, %rdx + 0x0f, 0x82, 0x4e, 0x00, 0x00, 0x00, //0x000004ad jb LBB0_32 + //0x000004b3 LBB0_34 + 0x31, 0xc9, //0x000004b3 xorl %ecx, %ecx + 0x49, 0x89, 0xc6, //0x000004b5 movq %rax, %r14 + 0x49, 0x8b, 0x07, //0x000004b8 movq (%r15), %rax + 0x48, 0x85, 0xc0, //0x000004bb testq %rax, %rax + 0x0f, 0x85, 0x54, 0x00, 0x00, 0x00, //0x000004be jne LBB0_35 + 0xe9, 0x9f, 0x48, 0x00, 0x00, //0x000004c4 jmp LBB0_649 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000004c9 .p2align 4, 0x90 + //0x000004d0 LBB0_648 + 0x4d, 0x89, 0x31, //0x000004d0 movq %r14, (%r9) 0x31, 0xc9, //0x000004d3 xorl %ecx, %ecx 0x49, 0x8b, 0x07, //0x000004d5 movq (%r15), %rax 0x48, 0x85, 0xc0, //0x000004d8 testq %rax, %rax 0x0f, 0x85, 0x37, 0x00, 0x00, 0x00, //0x000004db jne LBB0_35 - 0xe9, 0xf5, 0x45, 0x00, 0x00, //0x000004e1 jmp LBB0_630 + 0xe9, 0x82, 0x48, 0x00, 0x00, //0x000004e1 jmp LBB0_649 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000004e6 .p2align 4, 0x90 //0x000004f0 LBB0_31 0xf7, 0xd2, //0x000004f0 notl %edx 0x0f, 0xbc, 0xd2, //0x000004f2 bsfl %edx, %edx - 0x48, 0x29, 0xf2, //0x000004f5 subq %rsi, %rdx + 0x48, 0x29, 0xfa, //0x000004f5 subq %rdi, %rdx 0x48, 0x39, 0xca, //0x000004f8 cmpq %rcx, %rdx - 0x0f, 0x83, 0xb3, 0xff, 0xff, 0xff, //0x000004fb jae LBB0_34 + 0x0f, 0x83, 0xb2, 0xff, 0xff, 0xff, //0x000004fb jae LBB0_34 //0x00000501 LBB0_32 0x4c, 0x8d, 0x72, 0x01, //0x00000501 leaq $1(%rdx), %r14 - 0x4d, 0x89, 0x30, //0x00000505 movq %r14, (%r8) + 0x4d, 0x89, 0x31, //0x00000505 movq %r14, (%r9) 0x41, 0x8a, 0x0c, 0x14, //0x00000508 movb (%r12,%rdx), %cl 0x49, 0x8b, 0x07, //0x0000050c movq (%r15), %rax 0x48, 0x85, 0xc0, //0x0000050f testq %rax, %rax - 0x0f, 0x84, 0xc3, 0x45, 0x00, 0x00, //0x00000512 je LBB0_630 + 0x0f, 0x84, 0x50, 0x48, 0x00, 0x00, //0x00000512 je LBB0_649 //0x00000518 LBB0_35 0x8a, 0x40, 0x17, //0x00000518 movb $23(%rax), %al 0x24, 0x1f, //0x0000051b andb $31, %al 0x3c, 0x02, //0x0000051d cmpb $2, %al - 0x0f, 0x84, 0xab, 0x19, 0x00, 0x00, //0x0000051f je LBB0_386 + 0x0f, 0x84, 0x5b, 0x1b, 0x00, 0x00, //0x0000051f je LBB0_399 0x3c, 0x18, //0x00000525 cmpb $24, %al - 0x0f, 0x85, 0xae, 0x45, 0x00, 0x00, //0x00000527 jne LBB0_630 + 0x0f, 0x85, 0x3b, 0x48, 0x00, 0x00, //0x00000527 jne LBB0_649 0x80, 0xf9, 0x7b, //0x0000052d cmpb $123, %cl - 0x4c, 0x89, 0x6c, 0x24, 0x28, //0x00000530 movq %r13, $40(%rsp) - 0x0f, 0x85, 0x4c, 0x47, 0x00, 0x00, //0x00000535 jne LBB0_1024 + 0x4c, 0x89, 0x6c, 0x24, 0x18, //0x00000530 movq %r13, $24(%rsp) + 0x0f, 0x85, 0xd0, 0x49, 0x00, 0x00, //0x00000535 jne LBB0_1048 //0x0000053b LBB0_38 0x49, 0x8b, 0x45, 0x00, //0x0000053b movq (%r13), %rax 0x49, 0x39, 0xc6, //0x0000053f cmpq %rax, %r14 @@ -292,3621 +291,3587 @@ var _text_get_by_path = []byte{ 0x80, 0xc1, 0xf7, //0x0000055e addb $-9, %cl 0x80, 0xf9, 0x01, //0x00000561 cmpb $1, %cl 0x0f, 0x86, 0x16, 0x00, 0x00, 0x00, //0x00000564 jbe LBB0_43 - 0x4c, 0x89, 0xf3, //0x0000056a movq %r14, %rbx - 0xe9, 0x7f, 0x01, 0x00, 0x00, //0x0000056d jmp LBB0_68 + 0x4c, 0x89, 0xf1, //0x0000056a movq %r14, %rcx + 0xe9, 0x6f, 0x01, 0x00, 0x00, //0x0000056d jmp LBB0_68 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000572 .p2align 4, 0x90 //0x00000580 LBB0_43 - 0x49, 0x8d, 0x5e, 0x01, //0x00000580 leaq $1(%r14), %rbx - 0x48, 0x39, 0xc3, //0x00000584 cmpq %rax, %rbx + 0x49, 0x8d, 0x4e, 0x01, //0x00000580 leaq $1(%r14), %rcx + 0x48, 0x39, 0xc1, //0x00000584 cmpq %rax, %rcx 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000587 jae LBB0_47 - 0x41, 0x8a, 0x0c, 0x1c, //0x0000058d movb (%r12,%rbx), %cl - 0x80, 0xf9, 0x0d, //0x00000591 cmpb $13, %cl + 0x41, 0x8a, 0x14, 0x0c, //0x0000058d movb (%r12,%rcx), %dl + 0x80, 0xfa, 0x0d, //0x00000591 cmpb $13, %dl 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000594 je LBB0_47 - 0x80, 0xf9, 0x20, //0x0000059a cmpb $32, %cl + 0x80, 0xfa, 0x20, //0x0000059a cmpb $32, %dl 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000059d je LBB0_47 - 0x80, 0xc1, 0xf7, //0x000005a3 addb $-9, %cl - 0x80, 0xf9, 0x01, //0x000005a6 cmpb $1, %cl - 0x0f, 0x87, 0x42, 0x01, 0x00, 0x00, //0x000005a9 ja LBB0_68 + 0x80, 0xc2, 0xf7, //0x000005a3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000005a6 cmpb $1, %dl + 0x0f, 0x87, 0x32, 0x01, 0x00, 0x00, //0x000005a9 ja LBB0_68 0x90, //0x000005af .p2align 4, 0x90 //0x000005b0 LBB0_47 - 0x49, 0x8d, 0x5e, 0x02, //0x000005b0 leaq $2(%r14), %rbx - 0x48, 0x39, 0xc3, //0x000005b4 cmpq %rax, %rbx + 0x49, 0x8d, 0x4e, 0x02, //0x000005b0 leaq $2(%r14), %rcx + 0x48, 0x39, 0xc1, //0x000005b4 cmpq %rax, %rcx 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000005b7 jae LBB0_51 - 0x41, 0x8a, 0x0c, 0x1c, //0x000005bd movb (%r12,%rbx), %cl - 0x80, 0xf9, 0x0d, //0x000005c1 cmpb $13, %cl + 0x41, 0x8a, 0x14, 0x0c, //0x000005bd movb (%r12,%rcx), %dl + 0x80, 0xfa, 0x0d, //0x000005c1 cmpb $13, %dl 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000005c4 je LBB0_51 - 0x80, 0xf9, 0x20, //0x000005ca cmpb $32, %cl + 0x80, 0xfa, 0x20, //0x000005ca cmpb $32, %dl 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000005cd je LBB0_51 - 0x80, 0xc1, 0xf7, //0x000005d3 addb $-9, %cl - 0x80, 0xf9, 0x01, //0x000005d6 cmpb $1, %cl - 0x0f, 0x87, 0x12, 0x01, 0x00, 0x00, //0x000005d9 ja LBB0_68 + 0x80, 0xc2, 0xf7, //0x000005d3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000005d6 cmpb $1, %dl + 0x0f, 0x87, 0x02, 0x01, 0x00, 0x00, //0x000005d9 ja LBB0_68 0x90, //0x000005df .p2align 4, 0x90 //0x000005e0 LBB0_51 - 0x49, 0x8d, 0x5e, 0x03, //0x000005e0 leaq $3(%r14), %rbx - 0x48, 0x39, 0xc3, //0x000005e4 cmpq %rax, %rbx + 0x49, 0x8d, 0x4e, 0x03, //0x000005e0 leaq $3(%r14), %rcx + 0x48, 0x39, 0xc1, //0x000005e4 cmpq %rax, %rcx 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000005e7 jae LBB0_55 - 0x41, 0x8a, 0x0c, 0x1c, //0x000005ed movb (%r12,%rbx), %cl - 0x80, 0xf9, 0x0d, //0x000005f1 cmpb $13, %cl + 0x41, 0x8a, 0x14, 0x0c, //0x000005ed movb (%r12,%rcx), %dl + 0x80, 0xfa, 0x0d, //0x000005f1 cmpb $13, %dl 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000005f4 je LBB0_55 - 0x80, 0xf9, 0x20, //0x000005fa cmpb $32, %cl + 0x80, 0xfa, 0x20, //0x000005fa cmpb $32, %dl 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000005fd je LBB0_55 - 0x80, 0xc1, 0xf7, //0x00000603 addb $-9, %cl - 0x80, 0xf9, 0x01, //0x00000606 cmpb $1, %cl - 0x0f, 0x87, 0xe2, 0x00, 0x00, 0x00, //0x00000609 ja LBB0_68 + 0x80, 0xc2, 0xf7, //0x00000603 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00000606 cmpb $1, %dl + 0x0f, 0x87, 0xd2, 0x00, 0x00, 0x00, //0x00000609 ja LBB0_68 0x90, //0x0000060f .p2align 4, 0x90 //0x00000610 LBB0_55 - 0x49, 0x8d, 0x5e, 0x04, //0x00000610 leaq $4(%r14), %rbx - 0x48, 0x89, 0xc1, //0x00000614 movq %rax, %rcx - 0x48, 0x29, 0xd9, //0x00000617 subq %rbx, %rcx - 0x0f, 0x86, 0x64, 0x46, 0x00, 0x00, //0x0000061a jbe LBB0_1022 - 0x48, 0x83, 0xf9, 0x20, //0x00000620 cmpq $32, %rcx - 0x0f, 0x82, 0x16, 0x16, 0x00, 0x00, //0x00000624 jb LBB0_190 - 0x48, 0xc7, 0xc1, 0xfc, 0xff, 0xff, 0xff, //0x0000062a movq $-4, %rcx - 0x4c, 0x29, 0xf1, //0x00000631 subq %r14, %rcx + 0x49, 0x8d, 0x4e, 0x04, //0x00000610 leaq $4(%r14), %rcx + 0x48, 0x89, 0xc2, //0x00000614 movq %rax, %rdx + 0x48, 0x29, 0xca, //0x00000617 subq %rcx, %rdx + 0x0f, 0x86, 0x94, 0x2c, 0x00, 0x00, //0x0000061a jbe LBB0_1047 + 0x48, 0x83, 0xfa, 0x20, //0x00000620 cmpq $32, %rdx + 0x0f, 0x82, 0xa3, 0x17, 0x00, 0x00, //0x00000624 jb LBB0_167 + 0x48, 0xc7, 0xc2, 0xfc, 0xff, 0xff, 0xff, //0x0000062a movq $-4, %rdx + 0x4c, 0x29, 0xf2, //0x00000631 subq %r14, %rdx 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000634 .p2align 4, 0x90 //0x00000640 LBB0_58 - 0xc4, 0x41, 0x7e, 0x6f, 0x34, 0x1c, //0x00000640 vmovdqu (%r12,%rbx), %ymm14 + 0xc4, 0x41, 0x7e, 0x6f, 0x34, 0x0c, //0x00000640 vmovdqu (%r12,%rcx), %ymm14 0xc4, 0x42, 0x7d, 0x00, 0xfe, //0x00000646 vpshufb %ymm14, %ymm0, %ymm15 0xc4, 0x41, 0x0d, 0x74, 0xf7, //0x0000064b vpcmpeqb %ymm15, %ymm14, %ymm14 - 0xc4, 0xc1, 0x7d, 0xd7, 0xd6, //0x00000650 vpmovmskb %ymm14, %edx - 0x83, 0xfa, 0xff, //0x00000655 cmpl $-1, %edx - 0x0f, 0x85, 0x82, 0x00, 0x00, 0x00, //0x00000658 jne LBB0_67 - 0x48, 0x83, 0xc3, 0x20, //0x0000065e addq $32, %rbx - 0x48, 0x8d, 0x14, 0x08, //0x00000662 leaq (%rax,%rcx), %rdx - 0x48, 0x83, 0xc2, 0xe0, //0x00000666 addq $-32, %rdx - 0x48, 0x83, 0xc1, 0xe0, //0x0000066a addq $-32, %rcx - 0x48, 0x83, 0xfa, 0x1f, //0x0000066e cmpq $31, %rdx + 0xc4, 0xc1, 0x7d, 0xd7, 0xf6, //0x00000650 vpmovmskb %ymm14, %esi + 0x83, 0xfe, 0xff, //0x00000655 cmpl $-1, %esi + 0x0f, 0x85, 0x72, 0x00, 0x00, 0x00, //0x00000658 jne LBB0_67 + 0x48, 0x83, 0xc1, 0x20, //0x0000065e addq $32, %rcx + 0x48, 0x8d, 0x34, 0x10, //0x00000662 leaq (%rax,%rdx), %rsi + 0x48, 0x83, 0xc6, 0xe0, //0x00000666 addq $-32, %rsi + 0x48, 0x83, 0xc2, 0xe0, //0x0000066a addq $-32, %rdx + 0x48, 0x83, 0xfe, 0x1f, //0x0000066e cmpq $31, %rsi 0x0f, 0x87, 0xc8, 0xff, 0xff, 0xff, //0x00000672 ja LBB0_58 - 0x4c, 0x89, 0xe3, //0x00000678 movq %r12, %rbx - 0x48, 0x29, 0xcb, //0x0000067b subq %rcx, %rbx - 0x48, 0x01, 0xc1, //0x0000067e addq %rax, %rcx - 0x48, 0x85, 0xc9, //0x00000681 testq %rcx, %rcx - 0x0f, 0x84, 0x37, 0x00, 0x00, 0x00, //0x00000684 je LBB0_66 + 0x4c, 0x89, 0xe1, //0x00000678 movq %r12, %rcx + 0x48, 0x29, 0xd1, //0x0000067b subq %rdx, %rcx + 0x48, 0x01, 0xc2, //0x0000067e addq %rax, %rdx + 0x48, 0x85, 0xd2, //0x00000681 testq %rdx, %rdx + 0x0f, 0x84, 0x2d, 0x00, 0x00, 0x00, //0x00000684 je LBB0_66 //0x0000068a LBB0_61 - 0x4c, 0x8d, 0x0c, 0x0b, //0x0000068a leaq (%rbx,%rcx), %r9 - 0x31, 0xd2, //0x0000068e xorl %edx, %edx + 0x48, 0x8d, 0x3c, 0x11, //0x0000068a leaq (%rcx,%rdx), %rdi + 0x31, 0xf6, //0x0000068e xorl %esi, %esi //0x00000690 .p2align 4, 0x90 //0x00000690 LBB0_62 - 0x0f, 0xbe, 0x3c, 0x13, //0x00000690 movsbl (%rbx,%rdx), %edi - 0x83, 0xff, 0x20, //0x00000694 cmpl $32, %edi - 0x0f, 0x87, 0x8e, 0x11, 0x00, 0x00, //0x00000697 ja LBB0_117 - 0x48, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000069d movabsq $4294977024, %rsi - 0x48, 0x0f, 0xa3, 0xfe, //0x000006a7 btq %rdi, %rsi - 0x0f, 0x83, 0x7a, 0x11, 0x00, 0x00, //0x000006ab jae LBB0_117 - 0x48, 0x83, 0xc2, 0x01, //0x000006b1 addq $1, %rdx - 0x48, 0x39, 0xd1, //0x000006b5 cmpq %rdx, %rcx - 0x0f, 0x85, 0xd2, 0xff, 0xff, 0xff, //0x000006b8 jne LBB0_62 - 0x4c, 0x89, 0xcb, //0x000006be movq %r9, %rbx - //0x000006c1 LBB0_66 - 0x4c, 0x29, 0xe3, //0x000006c1 subq %r12, %rbx - 0x48, 0x39, 0xc3, //0x000006c4 cmpq %rax, %rbx - 0x0f, 0x82, 0x24, 0x00, 0x00, 0x00, //0x000006c7 jb LBB0_68 - 0xe9, 0xb5, 0x45, 0x00, 0x00, //0x000006cd jmp LBB0_1024 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000006d2 .p2align 4, 0x90 - //0x000006e0 LBB0_67 - 0xf7, 0xd2, //0x000006e0 notl %edx - 0x0f, 0xbc, 0xda, //0x000006e2 bsfl %edx, %ebx - 0x48, 0x29, 0xcb, //0x000006e5 subq %rcx, %rbx - 0x48, 0x39, 0xc3, //0x000006e8 cmpq %rax, %rbx - 0x0f, 0x83, 0x96, 0x45, 0x00, 0x00, //0x000006eb jae LBB0_1024 - //0x000006f1 LBB0_68 - 0x4c, 0x8d, 0x4b, 0x01, //0x000006f1 leaq $1(%rbx), %r9 - 0x4d, 0x89, 0x08, //0x000006f5 movq %r9, (%r8) - 0x41, 0x8a, 0x04, 0x1c, //0x000006f8 movb (%r12,%rbx), %al - 0x3c, 0x22, //0x000006fc cmpb $34, %al - 0x0f, 0x85, 0x15, 0x29, 0x00, 0x00, //0x000006fe jne LBB0_626 - 0x49, 0x8b, 0x45, 0x00, //0x00000704 movq (%r13), %rax - 0x48, 0x89, 0xc1, //0x00000708 movq %rax, %rcx - 0x4c, 0x29, 0xc9, //0x0000070b subq %r9, %rcx - 0x0f, 0x84, 0xf3, 0x4c, 0x00, 0x00, //0x0000070e je LBB0_1101 - 0x48, 0x89, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, //0x00000714 movq %rax, $152(%rsp) - 0x49, 0x8b, 0x47, 0x08, //0x0000071c movq $8(%r15), %rax - 0x48, 0x8b, 0x38, //0x00000720 movq (%rax), %rdi - 0x48, 0x8b, 0x40, 0x08, //0x00000723 movq $8(%rax), %rax - 0x48, 0x89, 0x44, 0x24, 0x30, //0x00000727 movq %rax, $48(%rsp) - 0x4f, 0x8d, 0x1c, 0x0c, //0x0000072c leaq (%r12,%r9), %r11 - 0x48, 0x83, 0xf9, 0x40, //0x00000730 cmpq $64, %rcx - 0x4c, 0x89, 0x5c, 0x24, 0x38, //0x00000734 movq %r11, $56(%rsp) - 0x0f, 0x82, 0x41, 0x11, 0x00, 0x00, //0x00000739 jb LBB0_118 - 0x48, 0x89, 0x7c, 0x24, 0x18, //0x0000073f movq %rdi, $24(%rsp) - 0x4d, 0x89, 0xfb, //0x00000744 movq %r15, %r11 - 0x48, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x00000747 movq $-2, %rdi - 0x48, 0x29, 0xdf, //0x0000074e subq %rbx, %rdi - 0x4c, 0x8d, 0x73, 0x01, //0x00000751 leaq $1(%rbx), %r14 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00000755 movq $-1, %r13 - 0x45, 0x31, 0xc0, //0x0000075c xorl %r8d, %r8d - 0x90, //0x0000075f .p2align 4, 0x90 - //0x00000760 LBB0_72 - 0xc4, 0x01, 0x7e, 0x6f, 0x34, 0x34, //0x00000760 vmovdqu (%r12,%r14), %ymm14 - 0xc4, 0x01, 0x7e, 0x6f, 0x7c, 0x34, 0x20, //0x00000766 vmovdqu $32(%r12,%r14), %ymm15 - 0xc5, 0x0d, 0x74, 0xd9, //0x0000076d vpcmpeqb %ymm1, %ymm14, %ymm11 - 0xc4, 0xc1, 0x7d, 0xd7, 0xc3, //0x00000771 vpmovmskb %ymm11, %eax - 0xc5, 0x05, 0x74, 0xd9, //0x00000776 vpcmpeqb %ymm1, %ymm15, %ymm11 - 0xc4, 0x41, 0x7d, 0xd7, 0xd3, //0x0000077a vpmovmskb %ymm11, %r10d - 0xc5, 0x0d, 0x74, 0xda, //0x0000077f vpcmpeqb %ymm2, %ymm14, %ymm11 - 0xc4, 0xc1, 0x7d, 0xd7, 0xf3, //0x00000783 vpmovmskb %ymm11, %esi - 0xc5, 0x05, 0x74, 0xda, //0x00000788 vpcmpeqb %ymm2, %ymm15, %ymm11 - 0xc4, 0x41, 0x7d, 0xd7, 0xfb, //0x0000078c vpmovmskb %ymm11, %r15d - 0x49, 0xc1, 0xe2, 0x20, //0x00000791 shlq $32, %r10 - 0x4c, 0x09, 0xd0, //0x00000795 orq %r10, %rax - 0x49, 0xc1, 0xe7, 0x20, //0x00000798 shlq $32, %r15 - 0x4c, 0x09, 0xfe, //0x0000079c orq %r15, %rsi - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000079f jne LBB0_81 - 0x4d, 0x85, 0xc0, //0x000007a5 testq %r8, %r8 - 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x000007a8 jne LBB0_83 - 0x45, 0x31, 0xc0, //0x000007ae xorl %r8d, %r8d - 0x48, 0x85, 0xc0, //0x000007b1 testq %rax, %rax - 0x0f, 0x85, 0x86, 0x00, 0x00, 0x00, //0x000007b4 jne LBB0_84 - //0x000007ba LBB0_75 - 0x48, 0x83, 0xc1, 0xc0, //0x000007ba addq $-64, %rcx - 0x48, 0x83, 0xc7, 0xc0, //0x000007be addq $-64, %rdi - 0x49, 0x83, 0xc6, 0x40, //0x000007c2 addq $64, %r14 - 0x48, 0x83, 0xf9, 0x3f, //0x000007c6 cmpq $63, %rcx - 0x0f, 0x87, 0x90, 0xff, 0xff, 0xff, //0x000007ca ja LBB0_72 - 0xe9, 0xb2, 0x02, 0x00, 0x00, //0x000007d0 jmp LBB0_76 - //0x000007d5 LBB0_81 - 0x49, 0x83, 0xfd, 0xff, //0x000007d5 cmpq $-1, %r13 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x000007d9 jne LBB0_83 - 0x4c, 0x0f, 0xbc, 0xee, //0x000007df bsfq %rsi, %r13 - 0x4d, 0x01, 0xf5, //0x000007e3 addq %r14, %r13 - //0x000007e6 LBB0_83 - 0x4d, 0x89, 0xc2, //0x000007e6 movq %r8, %r10 - 0x49, 0xf7, 0xd2, //0x000007e9 notq %r10 - 0x49, 0x21, 0xf2, //0x000007ec andq %rsi, %r10 - 0x4b, 0x8d, 0x14, 0x12, //0x000007ef leaq (%r10,%r10), %rdx - 0x4c, 0x09, 0xc2, //0x000007f3 orq %r8, %rdx - 0x49, 0x89, 0xd7, //0x000007f6 movq %rdx, %r15 - 0x49, 0xf7, 0xd7, //0x000007f9 notq %r15 - 0x49, 0x21, 0xf7, //0x000007fc andq %rsi, %r15 - 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000007ff movabsq $-6148914691236517206, %rsi - 0x49, 0x21, 0xf7, //0x00000809 andq %rsi, %r15 - 0x45, 0x31, 0xc0, //0x0000080c xorl %r8d, %r8d - 0x4d, 0x01, 0xd7, //0x0000080f addq %r10, %r15 - 0x41, 0x0f, 0x92, 0xc0, //0x00000812 setb %r8b - 0x4d, 0x01, 0xff, //0x00000816 addq %r15, %r15 - 0x48, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000819 movabsq $6148914691236517205, %rsi - 0x49, 0x31, 0xf7, //0x00000823 xorq %rsi, %r15 - 0x49, 0x21, 0xd7, //0x00000826 andq %rdx, %r15 - 0x49, 0xf7, 0xd7, //0x00000829 notq %r15 - 0x4c, 0x21, 0xf8, //0x0000082c andq %r15, %rax - 0x48, 0x85, 0xc0, //0x0000082f testq %rax, %rax - 0x0f, 0x84, 0x82, 0xff, 0xff, 0xff, //0x00000832 je LBB0_75 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000838 .p2align 4, 0x90 - //0x00000840 LBB0_84 - 0x4c, 0x0f, 0xbc, 0xf0, //0x00000840 bsfq %rax, %r14 - 0x49, 0x29, 0xfe, //0x00000844 subq %rdi, %r14 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00000847 movq $8(%rsp), %r8 - 0x4d, 0x89, 0xdf, //0x0000084c movq %r11, %r15 - 0x48, 0x8b, 0x7c, 0x24, 0x18, //0x0000084f movq $24(%rsp), %rdi - 0x4c, 0x8b, 0x5c, 0x24, 0x38, //0x00000854 movq $56(%rsp), %r11 - 0x4c, 0x89, 0xee, //0x00000859 movq %r13, %rsi - //0x0000085c LBB0_85 - 0x4d, 0x85, 0xf6, //0x0000085c testq %r14, %r14 - 0x0f, 0x88, 0xaa, 0x4b, 0x00, 0x00, //0x0000085f js LBB0_1102 - 0x4d, 0x89, 0x30, //0x00000865 movq %r14, (%r8) - 0x48, 0x83, 0xfe, 0xff, //0x00000868 cmpq $-1, %rsi - 0x0f, 0x84, 0x09, 0x00, 0x00, 0x00, //0x0000086c je LBB0_88 - 0x4c, 0x39, 0xf6, //0x00000872 cmpq %r14, %rsi - 0x0f, 0x8e, 0x21, 0x10, 0x00, 0x00, //0x00000875 jle LBB0_119 - //0x0000087b LBB0_88 - 0x4c, 0x89, 0xf0, //0x0000087b movq %r14, %rax - 0x48, 0x29, 0xd8, //0x0000087e subq %rbx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00000881 addq $-2, %rax - 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00000885 movl $1, %r9d - 0x48, 0x89, 0xc1, //0x0000088b movq %rax, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x30, //0x0000088e movq $48(%rsp), %rdx - 0x48, 0x09, 0xd1, //0x00000893 orq %rdx, %rcx - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x00000896 movq $40(%rsp), %r13 - 0x0f, 0x85, 0x3f, 0x00, 0x00, 0x00, //0x0000089b jne LBB0_89 - 0x49, 0x8b, 0x45, 0x00, //0x000008a1 movq (%r13), %rax - 0x49, 0x39, 0xc6, //0x000008a5 cmpq %rax, %r14 - 0x0f, 0x83, 0x62, 0x02, 0x00, 0x00, //0x000008a8 jae LBB0_153 - //0x000008ae LBB0_113 - 0x43, 0x8a, 0x0c, 0x34, //0x000008ae movb (%r12,%r14), %cl - 0x80, 0xf9, 0x0d, //0x000008b2 cmpb $13, %cl - 0x0f, 0x84, 0x55, 0x02, 0x00, 0x00, //0x000008b5 je LBB0_153 - 0x80, 0xf9, 0x20, //0x000008bb cmpb $32, %cl - 0x0f, 0x84, 0x4c, 0x02, 0x00, 0x00, //0x000008be je LBB0_153 - 0x80, 0xc1, 0xf7, //0x000008c4 addb $-9, %cl - 0x80, 0xf9, 0x01, //0x000008c7 cmpb $1, %cl - 0x0f, 0x86, 0x40, 0x02, 0x00, 0x00, //0x000008ca jbe LBB0_153 - 0x4c, 0x89, 0xf1, //0x000008d0 movq %r14, %rcx - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x000008d3 movq $32(%rsp), %r11 - 0xe9, 0xb4, 0x03, 0x00, 0x00, //0x000008d8 jmp LBB0_192 - 0x90, 0x90, 0x90, //0x000008dd .p2align 4, 0x90 - //0x000008e0 LBB0_89 - 0x48, 0x39, 0xd0, //0x000008e0 cmpq %rdx, %rax - 0x0f, 0x85, 0x37, 0x00, 0x00, 0x00, //0x000008e3 jne LBB0_93 - 0x48, 0x89, 0xd1, //0x000008e9 movq %rdx, %rcx - 0x31, 0xd2, //0x000008ec xorl %edx, %edx - 0x90, 0x90, //0x000008ee .p2align 4, 0x90 - //0x000008f0 LBB0_91 - 0x48, 0x83, 0xf9, 0x20, //0x000008f0 cmpq $32, %rcx - 0x0f, 0x82, 0x3b, 0x00, 0x00, 0x00, //0x000008f4 jb LBB0_94 - 0xc4, 0x41, 0x7e, 0x6f, 0x1c, 0x13, //0x000008fa vmovdqu (%r11,%rdx), %ymm11 - 0xc5, 0x25, 0x74, 0x1c, 0x17, //0x00000900 vpcmpeqb (%rdi,%rdx), %ymm11, %ymm11 - 0xc4, 0xc1, 0x7d, 0xd7, 0xc3, //0x00000905 vpmovmskb %ymm11, %eax - 0x48, 0x83, 0xc1, 0xe0, //0x0000090a addq $-32, %rcx - 0x48, 0x83, 0xc2, 0x20, //0x0000090e addq $32, %rdx - 0x83, 0xf8, 0xff, //0x00000912 cmpl $-1, %eax - 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00000915 je LBB0_91 - 0xe9, 0x9b, 0x00, 0x00, 0x00, //0x0000091b jmp LBB0_100 - //0x00000920 .p2align 4, 0x90 - //0x00000920 LBB0_93 - 0x45, 0x31, 0xc9, //0x00000920 xorl %r9d, %r9d - 0x49, 0x8b, 0x45, 0x00, //0x00000923 movq (%r13), %rax - 0x49, 0x39, 0xc6, //0x00000927 cmpq %rax, %r14 - 0x0f, 0x82, 0x7e, 0xff, 0xff, 0xff, //0x0000092a jb LBB0_113 - 0xe9, 0xdb, 0x01, 0x00, 0x00, //0x00000930 jmp LBB0_153 - //0x00000935 LBB0_94 - 0x41, 0x8d, 0x04, 0x1c, //0x00000935 leal (%r12,%rbx), %eax - 0x01, 0xd0, //0x00000939 addl %edx, %eax - 0x83, 0xc0, 0x01, //0x0000093b addl $1, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x0000093e andl $4095, %eax - 0x3d, 0xe0, 0x0f, 0x00, 0x00, //0x00000943 cmpl $4064, %eax - 0x0f, 0x87, 0x42, 0x00, 0x00, 0x00, //0x00000948 ja LBB0_98 - 0x8d, 0x04, 0x17, //0x0000094e leal (%rdi,%rdx), %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00000951 andl $4095, %eax - 0x3d, 0xe1, 0x0f, 0x00, 0x00, //0x00000956 cmpl $4065, %eax - 0x0f, 0x83, 0x2f, 0x00, 0x00, 0x00, //0x0000095b jae LBB0_98 - 0xc4, 0x41, 0x7e, 0x6f, 0x1c, 0x13, //0x00000961 vmovdqu (%r11,%rdx), %ymm11 - 0xc5, 0x25, 0x74, 0x1c, 0x17, //0x00000967 vpcmpeqb (%rdi,%rdx), %ymm11, %ymm11 - 0xc4, 0xc1, 0x7d, 0xd7, 0xc3, //0x0000096c vpmovmskb %ymm11, %eax - 0x83, 0xf8, 0xff, //0x00000971 cmpl $-1, %eax - 0x0f, 0x84, 0xc3, 0x00, 0x00, 0x00, //0x00000974 je LBB0_107 - 0xf7, 0xd0, //0x0000097a notl %eax - 0x0f, 0xbc, 0xc0, //0x0000097c bsfl %eax, %eax - 0xe9, 0x9d, 0x00, 0x00, 0x00, //0x0000097f jmp LBB0_106 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000984 .p2align 4, 0x90 - //0x00000990 LBB0_98 - 0x48, 0x83, 0xf9, 0x10, //0x00000990 cmpq $16, %rcx - 0x0f, 0x82, 0x39, 0x00, 0x00, 0x00, //0x00000994 jb LBB0_102 - 0xc4, 0xc1, 0x7a, 0x6f, 0x34, 0x13, //0x0000099a vmovdqu (%r11,%rdx), %xmm6 - 0xc5, 0xc9, 0x74, 0x34, 0x17, //0x000009a0 vpcmpeqb (%rdi,%rdx), %xmm6, %xmm6 - 0xc5, 0xf9, 0xd7, 0xc6, //0x000009a5 vpmovmskb %xmm6, %eax - 0x48, 0x83, 0xc1, 0xf0, //0x000009a9 addq $-16, %rcx - 0x48, 0x83, 0xc2, 0x10, //0x000009ad addq $16, %rdx - 0x66, 0x83, 0xf8, 0xff, //0x000009b1 cmpw $-1, %ax - 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x000009b5 je LBB0_98 - //0x000009bb LBB0_100 - 0x31, 0xc0, //0x000009bb xorl %eax, %eax - //0x000009bd LBB0_101 - 0x44, 0x0f, 0xb6, 0xc8, //0x000009bd movzbl %al, %r9d - 0x49, 0x8b, 0x45, 0x00, //0x000009c1 movq (%r13), %rax - 0x49, 0x39, 0xc6, //0x000009c5 cmpq %rax, %r14 - 0x0f, 0x82, 0xe0, 0xfe, 0xff, 0xff, //0x000009c8 jb LBB0_113 - 0xe9, 0x3d, 0x01, 0x00, 0x00, //0x000009ce jmp LBB0_153 - //0x000009d3 LBB0_102 - 0x41, 0x8d, 0x04, 0x1c, //0x000009d3 leal (%r12,%rbx), %eax - 0x01, 0xd0, //0x000009d7 addl %edx, %eax - 0x83, 0xc0, 0x01, //0x000009d9 addl $1, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x000009dc andl $4095, %eax - 0x3d, 0xf0, 0x0f, 0x00, 0x00, //0x000009e1 cmpl $4080, %eax - 0x0f, 0x87, 0x69, 0x00, 0x00, 0x00, //0x000009e6 ja LBB0_108 - 0x8d, 0x04, 0x17, //0x000009ec leal (%rdi,%rdx), %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x000009ef andl $4095, %eax - 0x3d, 0xf1, 0x0f, 0x00, 0x00, //0x000009f4 cmpl $4081, %eax - 0x0f, 0x83, 0x56, 0x00, 0x00, 0x00, //0x000009f9 jae LBB0_108 - 0xc4, 0xc1, 0x7a, 0x6f, 0x34, 0x13, //0x000009ff vmovdqu (%r11,%rdx), %xmm6 - 0xc5, 0xc9, 0x74, 0x34, 0x17, //0x00000a05 vpcmpeqb (%rdi,%rdx), %xmm6, %xmm6 - 0xc5, 0xf9, 0xd7, 0xc6, //0x00000a0a vpmovmskb %xmm6, %eax - 0x66, 0x83, 0xf8, 0xff, //0x00000a0e cmpw $-1, %ax - 0x0f, 0x84, 0xd9, 0x00, 0x00, 0x00, //0x00000a12 je LBB0_111 - 0xf7, 0xd0, //0x00000a18 notl %eax - 0x66, 0x0f, 0xbc, 0xc0, //0x00000a1a bsfw %ax, %ax - 0x0f, 0xb7, 0xc0, //0x00000a1e movzwl %ax, %eax - //0x00000a21 LBB0_106 - 0x48, 0x39, 0xc1, //0x00000a21 cmpq %rax, %rcx - 0x0f, 0x96, 0xc0, //0x00000a24 setbe %al - 0x44, 0x0f, 0xb6, 0xc8, //0x00000a27 movzbl %al, %r9d - 0x49, 0x8b, 0x45, 0x00, //0x00000a2b movq (%r13), %rax - 0x49, 0x39, 0xc6, //0x00000a2f cmpq %rax, %r14 - 0x0f, 0x82, 0x76, 0xfe, 0xff, 0xff, //0x00000a32 jb LBB0_113 - 0xe9, 0xd3, 0x00, 0x00, 0x00, //0x00000a38 jmp LBB0_153 - //0x00000a3d LBB0_107 - 0xb0, 0x01, //0x00000a3d movb $1, %al - 0x44, 0x0f, 0xb6, 0xc8, //0x00000a3f movzbl %al, %r9d - 0x49, 0x8b, 0x45, 0x00, //0x00000a43 movq (%r13), %rax - 0x49, 0x39, 0xc6, //0x00000a47 cmpq %rax, %r14 - 0x0f, 0x82, 0x5e, 0xfe, 0xff, 0xff, //0x00000a4a jb LBB0_113 - 0xe9, 0xbb, 0x00, 0x00, 0x00, //0x00000a50 jmp LBB0_153 - //0x00000a55 LBB0_108 - 0xb0, 0x01, //0x00000a55 movb $1, %al - 0x48, 0x39, 0x54, 0x24, 0x30, //0x00000a57 cmpq %rdx, $48(%rsp) - 0x0f, 0x84, 0x5b, 0xff, 0xff, 0xff, //0x00000a5c je LBB0_101 - //0x00000a62 LBB0_109 - 0x41, 0x0f, 0xb6, 0x04, 0x13, //0x00000a62 movzbl (%r11,%rdx), %eax - 0x3a, 0x04, 0x17, //0x00000a67 cmpb (%rdi,%rdx), %al - 0x0f, 0x94, 0xc0, //0x00000a6a sete %al - 0x0f, 0x85, 0x4a, 0xff, 0xff, 0xff, //0x00000a6d jne LBB0_101 - 0x48, 0x83, 0xc2, 0x01, //0x00000a73 addq $1, %rdx - 0x48, 0x39, 0x54, 0x24, 0x30, //0x00000a77 cmpq %rdx, $48(%rsp) - 0x0f, 0x85, 0xe0, 0xff, 0xff, 0xff, //0x00000a7c jne LBB0_109 - 0xe9, 0x36, 0xff, 0xff, 0xff, //0x00000a82 jmp LBB0_101 - //0x00000a87 LBB0_76 - 0x4d, 0x01, 0xe6, //0x00000a87 addq %r12, %r14 - 0x4d, 0x89, 0xdf, //0x00000a8a movq %r11, %r15 - 0x48, 0x8b, 0x7c, 0x24, 0x18, //0x00000a8d movq $24(%rsp), %rdi - 0x4c, 0x8b, 0x5c, 0x24, 0x38, //0x00000a92 movq $56(%rsp), %r11 - 0x4c, 0x89, 0xee, //0x00000a97 movq %r13, %rsi - 0x48, 0x83, 0xf9, 0x20, //0x00000a9a cmpq $32, %rcx - 0x0f, 0x82, 0xdf, 0x12, 0x00, 0x00, //0x00000a9e jb LBB0_365 - //0x00000aa4 LBB0_77 - 0xc4, 0x41, 0x7e, 0x6f, 0x1e, //0x00000aa4 vmovdqu (%r14), %ymm11 - 0xc5, 0x25, 0x74, 0xf1, //0x00000aa9 vpcmpeqb %ymm1, %ymm11, %ymm14 - 0xc4, 0xc1, 0x7d, 0xd7, 0xc6, //0x00000aad vpmovmskb %ymm14, %eax - 0xc5, 0x25, 0x74, 0xda, //0x00000ab2 vpcmpeqb %ymm2, %ymm11, %ymm11 - 0xc4, 0x41, 0x7d, 0xd7, 0xeb, //0x00000ab6 vpmovmskb %ymm11, %r13d - 0x45, 0x85, 0xed, //0x00000abb testl %r13d, %r13d - 0x0f, 0x85, 0x43, 0x12, 0x00, 0x00, //0x00000abe jne LBB0_360 - 0x4d, 0x85, 0xc0, //0x00000ac4 testq %r8, %r8 - 0x0f, 0x85, 0x5f, 0x12, 0x00, 0x00, //0x00000ac7 jne LBB0_362 - 0x45, 0x31, 0xc0, //0x00000acd xorl %r8d, %r8d - 0x48, 0x85, 0xc0, //0x00000ad0 testq %rax, %rax - 0x0f, 0x84, 0xa2, 0x12, 0x00, 0x00, //0x00000ad3 je LBB0_364 - //0x00000ad9 LBB0_80 - 0x48, 0x0f, 0xbc, 0xc0, //0x00000ad9 bsfq %rax, %rax - 0x4d, 0x29, 0xe6, //0x00000add subq %r12, %r14 - 0x49, 0x01, 0xc6, //0x00000ae0 addq %rax, %r14 - 0x49, 0x83, 0xc6, 0x01, //0x00000ae3 addq $1, %r14 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00000ae7 movq $8(%rsp), %r8 - 0xe9, 0x6b, 0xfd, 0xff, 0xff, //0x00000aec jmp LBB0_85 - //0x00000af1 LBB0_111 - 0xb0, 0x01, //0x00000af1 movb $1, %al - 0x44, 0x0f, 0xb6, 0xc8, //0x00000af3 movzbl %al, %r9d - 0x49, 0x8b, 0x45, 0x00, //0x00000af7 movq (%r13), %rax - 0x49, 0x39, 0xc6, //0x00000afb cmpq %rax, %r14 - 0x0f, 0x82, 0xaa, 0xfd, 0xff, 0xff, //0x00000afe jb LBB0_113 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000b04 .p2align 4, 0x90 - //0x00000b10 LBB0_153 - 0x49, 0x8d, 0x4e, 0x01, //0x00000b10 leaq $1(%r14), %rcx - 0x48, 0x39, 0xc1, //0x00000b14 cmpq %rax, %rcx - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x00000b17 movq $32(%rsp), %r11 - 0x0f, 0x83, 0x2e, 0x00, 0x00, 0x00, //0x00000b1c jae LBB0_157 - 0x41, 0x8a, 0x1c, 0x0c, //0x00000b22 movb (%r12,%rcx), %bl - 0x80, 0xfb, 0x0d, //0x00000b26 cmpb $13, %bl - 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00000b29 je LBB0_157 - 0x80, 0xfb, 0x20, //0x00000b2f cmpb $32, %bl - 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x00000b32 je LBB0_157 - 0x80, 0xc3, 0xf7, //0x00000b38 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000b3b cmpb $1, %bl - 0x0f, 0x87, 0x4d, 0x01, 0x00, 0x00, //0x00000b3e ja LBB0_192 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000b44 .p2align 4, 0x90 - //0x00000b50 LBB0_157 + 0x0f, 0xbe, 0x1c, 0x31, //0x00000690 movsbl (%rcx,%rsi), %ebx + 0x83, 0xfb, 0x20, //0x00000694 cmpl $32, %ebx + 0x0f, 0x87, 0xa6, 0x12, 0x00, 0x00, //0x00000697 ja LBB0_118 + 0x49, 0x0f, 0xa3, 0xda, //0x0000069d btq %rbx, %r10 + 0x0f, 0x83, 0x9c, 0x12, 0x00, 0x00, //0x000006a1 jae LBB0_118 + 0x48, 0x83, 0xc6, 0x01, //0x000006a7 addq $1, %rsi + 0x48, 0x39, 0xf2, //0x000006ab cmpq %rsi, %rdx + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x000006ae jne LBB0_62 + 0x48, 0x89, 0xf9, //0x000006b4 movq %rdi, %rcx + //0x000006b7 LBB0_66 + 0x4c, 0x29, 0xe1, //0x000006b7 subq %r12, %rcx + 0x48, 0x39, 0xc1, //0x000006ba cmpq %rax, %rcx + 0x0f, 0x82, 0x1e, 0x00, 0x00, 0x00, //0x000006bd jb LBB0_68 + 0xe9, 0x43, 0x48, 0x00, 0x00, //0x000006c3 jmp LBB0_1048 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000006c8 .p2align 4, 0x90 + //0x000006d0 LBB0_67 + 0xf7, 0xd6, //0x000006d0 notl %esi + 0x0f, 0xbc, 0xce, //0x000006d2 bsfl %esi, %ecx + 0x48, 0x29, 0xd1, //0x000006d5 subq %rdx, %rcx + 0x48, 0x39, 0xc1, //0x000006d8 cmpq %rax, %rcx + 0x0f, 0x83, 0x2a, 0x48, 0x00, 0x00, //0x000006db jae LBB0_1048 + //0x000006e1 LBB0_68 + 0x4c, 0x8d, 0x59, 0x01, //0x000006e1 leaq $1(%rcx), %r11 + 0x4d, 0x89, 0x19, //0x000006e5 movq %r11, (%r9) + 0x41, 0x8a, 0x04, 0x0c, //0x000006e8 movb (%r12,%rcx), %al + 0x3c, 0x22, //0x000006ec cmpb $34, %al + 0x0f, 0x85, 0xc8, 0x2b, 0x00, 0x00, //0x000006ee jne LBB0_645 + 0x49, 0x8b, 0x5d, 0x00, //0x000006f4 movq (%r13), %rbx + 0x48, 0x89, 0xda, //0x000006f8 movq %rbx, %rdx + 0x4c, 0x29, 0xda, //0x000006fb subq %r11, %rdx + 0x0f, 0x84, 0xf9, 0x4f, 0x00, 0x00, //0x000006fe je LBB0_1126 + 0x49, 0x8b, 0x77, 0x08, //0x00000704 movq $8(%r15), %rsi + 0x48, 0x8b, 0x06, //0x00000708 movq (%rsi), %rax + 0x48, 0x89, 0x44, 0x24, 0x38, //0x0000070b movq %rax, $56(%rsp) + 0x48, 0x8b, 0x46, 0x08, //0x00000710 movq $8(%rsi), %rax + 0x48, 0x89, 0x44, 0x24, 0x30, //0x00000714 movq %rax, $48(%rsp) + 0x4b, 0x8d, 0x3c, 0x1c, //0x00000719 leaq (%r12,%r11), %rdi + 0x48, 0x83, 0xfa, 0x40, //0x0000071d cmpq $64, %rdx + 0x48, 0x89, 0x7c, 0x24, 0x20, //0x00000721 movq %rdi, $32(%rsp) + 0x0f, 0x82, 0x67, 0x12, 0x00, 0x00, //0x00000726 jb LBB0_119 + 0x4d, 0x89, 0xfd, //0x0000072c movq %r15, %r13 + 0x48, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x0000072f movq $-2, %rdi + 0x48, 0x29, 0xcf, //0x00000736 subq %rcx, %rdi + 0x4c, 0x8d, 0x71, 0x01, //0x00000739 leaq $1(%rcx), %r14 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000073d movq $-1, %rax + 0x45, 0x31, 0xc9, //0x00000744 xorl %r9d, %r9d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000747 .p2align 4, 0x90 + //0x00000750 LBB0_72 + 0xc4, 0x01, 0x7e, 0x6f, 0x34, 0x34, //0x00000750 vmovdqu (%r12,%r14), %ymm14 + 0xc4, 0x01, 0x7e, 0x6f, 0x7c, 0x34, 0x20, //0x00000756 vmovdqu $32(%r12,%r14), %ymm15 + 0xc5, 0x0d, 0x74, 0xd9, //0x0000075d vpcmpeqb %ymm1, %ymm14, %ymm11 + 0xc4, 0x41, 0x7d, 0xd7, 0xc3, //0x00000761 vpmovmskb %ymm11, %r8d + 0xc5, 0x05, 0x74, 0xd9, //0x00000766 vpcmpeqb %ymm1, %ymm15, %ymm11 + 0xc4, 0x41, 0x7d, 0xd7, 0xd3, //0x0000076a vpmovmskb %ymm11, %r10d + 0xc5, 0x0d, 0x74, 0xda, //0x0000076f vpcmpeqb %ymm2, %ymm14, %ymm11 + 0xc4, 0xc1, 0x7d, 0xd7, 0xf3, //0x00000773 vpmovmskb %ymm11, %esi + 0xc5, 0x05, 0x74, 0xda, //0x00000778 vpcmpeqb %ymm2, %ymm15, %ymm11 + 0xc4, 0x41, 0x7d, 0xd7, 0xfb, //0x0000077c vpmovmskb %ymm11, %r15d + 0x49, 0xc1, 0xe2, 0x20, //0x00000781 shlq $32, %r10 + 0x4d, 0x09, 0xd0, //0x00000785 orq %r10, %r8 + 0x49, 0xc1, 0xe7, 0x20, //0x00000788 shlq $32, %r15 + 0x4c, 0x09, 0xfe, //0x0000078c orq %r15, %rsi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000078f jne LBB0_81 + 0x4d, 0x85, 0xc9, //0x00000795 testq %r9, %r9 + 0x0f, 0x85, 0x45, 0x00, 0x00, 0x00, //0x00000798 jne LBB0_83 + 0x45, 0x31, 0xc9, //0x0000079e xorl %r9d, %r9d + 0x4d, 0x85, 0xc0, //0x000007a1 testq %r8, %r8 + 0x0f, 0x85, 0xa6, 0x00, 0x00, 0x00, //0x000007a4 jne LBB0_85 + //0x000007aa LBB0_75 + 0x48, 0x83, 0xc2, 0xc0, //0x000007aa addq $-64, %rdx + 0x48, 0x83, 0xc7, 0xc0, //0x000007ae addq $-64, %rdi + 0x49, 0x83, 0xc6, 0x40, //0x000007b2 addq $64, %r14 + 0x48, 0x83, 0xfa, 0x3f, //0x000007b6 cmpq $63, %rdx + 0x0f, 0x87, 0x90, 0xff, 0xff, 0xff, //0x000007ba ja LBB0_72 + 0xe9, 0xdb, 0x02, 0x00, 0x00, //0x000007c0 jmp LBB0_76 + //0x000007c5 LBB0_81 + 0x48, 0x89, 0x9c, 0x24, 0x98, 0x00, 0x00, 0x00, //0x000007c5 movq %rbx, $152(%rsp) + 0x48, 0x83, 0xf8, 0xff, //0x000007cd cmpq $-1, %rax + 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x000007d1 jne LBB0_84 + 0x48, 0x0f, 0xbc, 0xc6, //0x000007d7 bsfq %rsi, %rax + 0x4c, 0x01, 0xf0, //0x000007db addq %r14, %rax + 0xe9, 0x08, 0x00, 0x00, 0x00, //0x000007de jmp LBB0_84 + //0x000007e3 LBB0_83 + 0x48, 0x89, 0x9c, 0x24, 0x98, 0x00, 0x00, 0x00, //0x000007e3 movq %rbx, $152(%rsp) + //0x000007eb LBB0_84 + 0x4d, 0x89, 0xca, //0x000007eb movq %r9, %r10 + 0x49, 0xf7, 0xd2, //0x000007ee notq %r10 + 0x49, 0x21, 0xf2, //0x000007f1 andq %rsi, %r10 + 0x4b, 0x8d, 0x1c, 0x12, //0x000007f4 leaq (%r10,%r10), %rbx + 0x4c, 0x09, 0xcb, //0x000007f8 orq %r9, %rbx + 0x49, 0x89, 0xdf, //0x000007fb movq %rbx, %r15 + 0x49, 0xf7, 0xd7, //0x000007fe notq %r15 + 0x49, 0x21, 0xf7, //0x00000801 andq %rsi, %r15 + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000804 movabsq $-6148914691236517206, %rsi + 0x49, 0x21, 0xf7, //0x0000080e andq %rsi, %r15 + 0x45, 0x31, 0xc9, //0x00000811 xorl %r9d, %r9d + 0x4d, 0x01, 0xd7, //0x00000814 addq %r10, %r15 + 0x41, 0x0f, 0x92, 0xc1, //0x00000817 setb %r9b + 0x4d, 0x01, 0xff, //0x0000081b addq %r15, %r15 + 0x48, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000081e movabsq $6148914691236517205, %rsi + 0x49, 0x31, 0xf7, //0x00000828 xorq %rsi, %r15 + 0x49, 0x21, 0xdf, //0x0000082b andq %rbx, %r15 + 0x49, 0xf7, 0xd7, //0x0000082e notq %r15 + 0x4d, 0x21, 0xf8, //0x00000831 andq %r15, %r8 + 0x48, 0x8b, 0x9c, 0x24, 0x98, 0x00, 0x00, 0x00, //0x00000834 movq $152(%rsp), %rbx + 0x4d, 0x85, 0xc0, //0x0000083c testq %r8, %r8 + 0x0f, 0x84, 0x65, 0xff, 0xff, 0xff, //0x0000083f je LBB0_75 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000845 .p2align 4, 0x90 + //0x00000850 LBB0_85 + 0x4d, 0x0f, 0xbc, 0xf0, //0x00000850 bsfq %r8, %r14 + 0x49, 0x29, 0xfe, //0x00000854 subq %rdi, %r14 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00000857 movq $8(%rsp), %r9 + 0x4d, 0x89, 0xef, //0x0000085c movq %r13, %r15 + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000085f movabsq $4294977024, %r10 + //0x00000869 LBB0_86 + 0x4d, 0x85, 0xf6, //0x00000869 testq %r14, %r14 + 0x0f, 0x88, 0x8e, 0x4e, 0x00, 0x00, //0x0000086c js LBB0_1127 + 0x4d, 0x89, 0x31, //0x00000872 movq %r14, (%r9) + 0x48, 0x83, 0xf8, 0xff, //0x00000875 cmpq $-1, %rax + 0x0f, 0x84, 0x09, 0x00, 0x00, 0x00, //0x00000879 je LBB0_89 + 0x4c, 0x39, 0xf0, //0x0000087f cmpq %r14, %rax + 0x0f, 0x8e, 0x2a, 0x11, 0x00, 0x00, //0x00000882 jle LBB0_120 + //0x00000888 LBB0_89 + 0x4c, 0x89, 0xf6, //0x00000888 movq %r14, %rsi + 0x48, 0x29, 0xce, //0x0000088b subq %rcx, %rsi + 0x48, 0x83, 0xc6, 0xfe, //0x0000088e addq $-2, %rsi + 0xba, 0x01, 0x00, 0x00, 0x00, //0x00000892 movl $1, %edx + 0x48, 0x89, 0xf7, //0x00000897 movq %rsi, %rdi + 0x4c, 0x8b, 0x44, 0x24, 0x30, //0x0000089a movq $48(%rsp), %r8 + 0x4c, 0x09, 0xc7, //0x0000089f orq %r8, %rdi + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x000008a2 movq $24(%rsp), %r13 + 0x0f, 0x85, 0x43, 0x00, 0x00, 0x00, //0x000008a7 jne LBB0_90 + 0x49, 0x8b, 0x45, 0x00, //0x000008ad movq (%r13), %rax + 0x49, 0x39, 0xc6, //0x000008b1 cmpq %rax, %r14 + 0x0f, 0x83, 0x66, 0x02, 0x00, 0x00, //0x000008b4 jae LBB0_171 + //0x000008ba LBB0_114 + 0x43, 0x8a, 0x0c, 0x34, //0x000008ba movb (%r12,%r14), %cl + 0x80, 0xf9, 0x0d, //0x000008be cmpb $13, %cl + 0x0f, 0x84, 0x59, 0x02, 0x00, 0x00, //0x000008c1 je LBB0_171 + 0x80, 0xf9, 0x20, //0x000008c7 cmpb $32, %cl + 0x0f, 0x84, 0x50, 0x02, 0x00, 0x00, //0x000008ca je LBB0_171 + 0x80, 0xc1, 0xf7, //0x000008d0 addb $-9, %cl + 0x80, 0xf9, 0x01, //0x000008d3 cmpb $1, %cl + 0x0f, 0x86, 0x44, 0x02, 0x00, 0x00, //0x000008d6 jbe LBB0_171 + 0x4c, 0x89, 0xf1, //0x000008dc movq %r14, %rcx + 0xe9, 0x9d, 0x03, 0x00, 0x00, //0x000008df jmp LBB0_196 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000008e4 .p2align 4, 0x90 + //0x000008f0 LBB0_90 + 0x4c, 0x39, 0xc6, //0x000008f0 cmpq %r8, %rsi + 0x0f, 0x85, 0x47, 0x00, 0x00, 0x00, //0x000008f3 jne LBB0_94 + 0x31, 0xff, //0x000008f9 xorl %edi, %edi + 0x4c, 0x89, 0xc2, //0x000008fb movq %r8, %rdx + 0x48, 0x8b, 0x44, 0x24, 0x38, //0x000008fe movq $56(%rsp), %rax + 0x48, 0x8b, 0x5c, 0x24, 0x20, //0x00000903 movq $32(%rsp), %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000908 .p2align 4, 0x90 + //0x00000910 LBB0_92 + 0x48, 0x83, 0xfa, 0x20, //0x00000910 cmpq $32, %rdx + 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x00000914 jb LBB0_95 + 0xc5, 0x7e, 0x6f, 0x1c, 0x3b, //0x0000091a vmovdqu (%rbx,%rdi), %ymm11 + 0xc5, 0x25, 0x74, 0x1c, 0x38, //0x0000091f vpcmpeqb (%rax,%rdi), %ymm11, %ymm11 + 0xc4, 0xc1, 0x7d, 0xd7, 0xf3, //0x00000924 vpmovmskb %ymm11, %esi + 0x48, 0x83, 0xc2, 0xe0, //0x00000929 addq $-32, %rdx + 0x48, 0x83, 0xc7, 0x20, //0x0000092d addq $32, %rdi + 0x83, 0xfe, 0xff, //0x00000931 cmpl $-1, %esi + 0x0f, 0x84, 0xd6, 0xff, 0xff, 0xff, //0x00000934 je LBB0_92 + 0xe9, 0x9b, 0x00, 0x00, 0x00, //0x0000093a jmp LBB0_101 + 0x90, //0x0000093f .p2align 4, 0x90 + //0x00000940 LBB0_94 + 0x31, 0xd2, //0x00000940 xorl %edx, %edx + 0x49, 0x8b, 0x45, 0x00, //0x00000942 movq (%r13), %rax + 0x49, 0x39, 0xc6, //0x00000946 cmpq %rax, %r14 + 0x0f, 0x82, 0x6b, 0xff, 0xff, 0xff, //0x00000949 jb LBB0_114 + 0xe9, 0xcc, 0x01, 0x00, 0x00, //0x0000094f jmp LBB0_171 + //0x00000954 LBB0_95 + 0x41, 0x8d, 0x34, 0x0c, //0x00000954 leal (%r12,%rcx), %esi + 0x01, 0xfe, //0x00000958 addl %edi, %esi + 0x83, 0xc6, 0x01, //0x0000095a addl $1, %esi + 0x81, 0xe6, 0xff, 0x0f, 0x00, 0x00, //0x0000095d andl $4095, %esi + 0x81, 0xfe, 0xe0, 0x0f, 0x00, 0x00, //0x00000963 cmpl $4064, %esi + 0x0f, 0x87, 0x41, 0x00, 0x00, 0x00, //0x00000969 ja LBB0_99 + 0x8d, 0x34, 0x38, //0x0000096f leal (%rax,%rdi), %esi + 0x81, 0xe6, 0xff, 0x0f, 0x00, 0x00, //0x00000972 andl $4095, %esi + 0x81, 0xfe, 0xe1, 0x0f, 0x00, 0x00, //0x00000978 cmpl $4065, %esi + 0x0f, 0x83, 0x2c, 0x00, 0x00, 0x00, //0x0000097e jae LBB0_99 + 0xc5, 0x7e, 0x6f, 0x1c, 0x3b, //0x00000984 vmovdqu (%rbx,%rdi), %ymm11 + 0xc5, 0x25, 0x74, 0x1c, 0x38, //0x00000989 vpcmpeqb (%rax,%rdi), %ymm11, %ymm11 + 0xc4, 0xc1, 0x7d, 0xd7, 0xc3, //0x0000098e vpmovmskb %ymm11, %eax + 0x83, 0xf8, 0xff, //0x00000993 cmpl $-1, %eax + 0x0f, 0x84, 0xc0, 0x00, 0x00, 0x00, //0x00000996 je LBB0_108 + 0xf7, 0xd0, //0x0000099c notl %eax + 0x0f, 0xbc, 0xc0, //0x0000099e bsfl %eax, %eax + 0xe9, 0x9b, 0x00, 0x00, 0x00, //0x000009a1 jmp LBB0_107 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000009a6 .p2align 4, 0x90 + //0x000009b0 LBB0_99 + 0x48, 0x83, 0xfa, 0x10, //0x000009b0 cmpq $16, %rdx + 0x0f, 0x82, 0x37, 0x00, 0x00, 0x00, //0x000009b4 jb LBB0_103 + 0xc5, 0xfa, 0x6f, 0x34, 0x3b, //0x000009ba vmovdqu (%rbx,%rdi), %xmm6 + 0xc5, 0xc9, 0x74, 0x34, 0x38, //0x000009bf vpcmpeqb (%rax,%rdi), %xmm6, %xmm6 + 0xc5, 0xf9, 0xd7, 0xf6, //0x000009c4 vpmovmskb %xmm6, %esi + 0x48, 0x83, 0xc2, 0xf0, //0x000009c8 addq $-16, %rdx + 0x48, 0x83, 0xc7, 0x10, //0x000009cc addq $16, %rdi + 0x66, 0x83, 0xfe, 0xff, //0x000009d0 cmpw $-1, %si + 0x0f, 0x84, 0xd6, 0xff, 0xff, 0xff, //0x000009d4 je LBB0_99 + //0x000009da LBB0_101 + 0x31, 0xc9, //0x000009da xorl %ecx, %ecx + //0x000009dc LBB0_102 + 0x0f, 0xb6, 0xd1, //0x000009dc movzbl %cl, %edx + 0x49, 0x8b, 0x45, 0x00, //0x000009df movq (%r13), %rax + 0x49, 0x39, 0xc6, //0x000009e3 cmpq %rax, %r14 + 0x0f, 0x82, 0xce, 0xfe, 0xff, 0xff, //0x000009e6 jb LBB0_114 + 0xe9, 0x2f, 0x01, 0x00, 0x00, //0x000009ec jmp LBB0_171 + //0x000009f1 LBB0_103 + 0x44, 0x01, 0xe1, //0x000009f1 addl %r12d, %ecx + 0x01, 0xf9, //0x000009f4 addl %edi, %ecx + 0x83, 0xc1, 0x01, //0x000009f6 addl $1, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x000009f9 andl $4095, %ecx + 0x81, 0xf9, 0xf0, 0x0f, 0x00, 0x00, //0x000009ff cmpl $4080, %ecx + 0x0f, 0x87, 0x68, 0x00, 0x00, 0x00, //0x00000a05 ja LBB0_109 + 0x8d, 0x0c, 0x38, //0x00000a0b leal (%rax,%rdi), %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00000a0e andl $4095, %ecx + 0x81, 0xf9, 0xf1, 0x0f, 0x00, 0x00, //0x00000a14 cmpl $4081, %ecx + 0x0f, 0x83, 0x53, 0x00, 0x00, 0x00, //0x00000a1a jae LBB0_109 + 0xc5, 0xfa, 0x6f, 0x34, 0x3b, //0x00000a20 vmovdqu (%rbx,%rdi), %xmm6 + 0xc5, 0xc9, 0x74, 0x34, 0x38, //0x00000a25 vpcmpeqb (%rax,%rdi), %xmm6, %xmm6 + 0xc5, 0xf9, 0xd7, 0xc6, //0x00000a2a vpmovmskb %xmm6, %eax + 0x66, 0x83, 0xf8, 0xff, //0x00000a2e cmpw $-1, %ax + 0x0f, 0x84, 0xd4, 0x00, 0x00, 0x00, //0x00000a32 je LBB0_112 + 0xf7, 0xd0, //0x00000a38 notl %eax + 0x66, 0x0f, 0xbc, 0xc0, //0x00000a3a bsfw %ax, %ax + 0x0f, 0xb7, 0xc0, //0x00000a3e movzwl %ax, %eax + //0x00000a41 LBB0_107 + 0x48, 0x39, 0xc2, //0x00000a41 cmpq %rax, %rdx + 0x0f, 0x96, 0xc1, //0x00000a44 setbe %cl + 0x0f, 0xb6, 0xd1, //0x00000a47 movzbl %cl, %edx + 0x49, 0x8b, 0x45, 0x00, //0x00000a4a movq (%r13), %rax + 0x49, 0x39, 0xc6, //0x00000a4e cmpq %rax, %r14 + 0x0f, 0x82, 0x63, 0xfe, 0xff, 0xff, //0x00000a51 jb LBB0_114 + 0xe9, 0xc4, 0x00, 0x00, 0x00, //0x00000a57 jmp LBB0_171 + //0x00000a5c LBB0_108 + 0xb1, 0x01, //0x00000a5c movb $1, %cl + 0x0f, 0xb6, 0xd1, //0x00000a5e movzbl %cl, %edx + 0x49, 0x8b, 0x45, 0x00, //0x00000a61 movq (%r13), %rax + 0x49, 0x39, 0xc6, //0x00000a65 cmpq %rax, %r14 + 0x0f, 0x82, 0x4c, 0xfe, 0xff, 0xff, //0x00000a68 jb LBB0_114 + 0xe9, 0xad, 0x00, 0x00, 0x00, //0x00000a6e jmp LBB0_171 + //0x00000a73 LBB0_109 + 0xb1, 0x01, //0x00000a73 movb $1, %cl + 0x49, 0x39, 0xf8, //0x00000a75 cmpq %rdi, %r8 + 0x0f, 0x84, 0x5e, 0xff, 0xff, 0xff, //0x00000a78 je LBB0_102 + //0x00000a7e LBB0_110 + 0x0f, 0xb6, 0x0c, 0x3b, //0x00000a7e movzbl (%rbx,%rdi), %ecx + 0x3a, 0x0c, 0x38, //0x00000a82 cmpb (%rax,%rdi), %cl + 0x0f, 0x94, 0xc1, //0x00000a85 sete %cl + 0x0f, 0x85, 0x4e, 0xff, 0xff, 0xff, //0x00000a88 jne LBB0_102 + 0x48, 0x83, 0xc7, 0x01, //0x00000a8e addq $1, %rdi + 0x49, 0x39, 0xf8, //0x00000a92 cmpq %rdi, %r8 + 0x0f, 0x85, 0xe3, 0xff, 0xff, 0xff, //0x00000a95 jne LBB0_110 + 0xe9, 0x3c, 0xff, 0xff, 0xff, //0x00000a9b jmp LBB0_102 + //0x00000aa0 LBB0_76 + 0x4d, 0x01, 0xe6, //0x00000aa0 addq %r12, %r14 + 0x4d, 0x89, 0xef, //0x00000aa3 movq %r13, %r15 + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000aa6 movabsq $4294977024, %r10 + 0x49, 0x89, 0xdd, //0x00000ab0 movq %rbx, %r13 + 0x48, 0x83, 0xfa, 0x20, //0x00000ab3 cmpq $32, %rdx + 0x0f, 0x82, 0x4c, 0x14, 0x00, 0x00, //0x00000ab7 jb LBB0_378 + //0x00000abd LBB0_77 + 0xc4, 0x41, 0x7e, 0x6f, 0x1e, //0x00000abd vmovdqu (%r14), %ymm11 + 0xc5, 0x25, 0x74, 0xf1, //0x00000ac2 vpcmpeqb %ymm1, %ymm11, %ymm14 + 0xc4, 0xc1, 0x7d, 0xd7, 0xde, //0x00000ac6 vpmovmskb %ymm14, %ebx + 0xc5, 0x25, 0x74, 0xda, //0x00000acb vpcmpeqb %ymm2, %ymm11, %ymm11 + 0xc4, 0xc1, 0x7d, 0xd7, 0xf3, //0x00000acf vpmovmskb %ymm11, %esi + 0x85, 0xf6, //0x00000ad4 testl %esi, %esi + 0x0f, 0x85, 0xaf, 0x13, 0x00, 0x00, //0x00000ad6 jne LBB0_373 + 0x4d, 0x85, 0xc9, //0x00000adc testq %r9, %r9 + 0x0f, 0x85, 0xc8, 0x13, 0x00, 0x00, //0x00000adf jne LBB0_375 + 0x45, 0x31, 0xc9, //0x00000ae5 xorl %r9d, %r9d + 0x48, 0x85, 0xdb, //0x00000ae8 testq %rbx, %rbx + 0x0f, 0x84, 0x10, 0x14, 0x00, 0x00, //0x00000aeb je LBB0_377 + //0x00000af1 LBB0_80 + 0x48, 0x0f, 0xbc, 0xd3, //0x00000af1 bsfq %rbx, %rdx + 0x4d, 0x29, 0xe6, //0x00000af5 subq %r12, %r14 + 0x49, 0x01, 0xd6, //0x00000af8 addq %rdx, %r14 + 0x49, 0x83, 0xc6, 0x01, //0x00000afb addq $1, %r14 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00000aff movq $8(%rsp), %r9 + 0x4c, 0x89, 0xeb, //0x00000b04 movq %r13, %rbx + 0xe9, 0x5d, 0xfd, 0xff, 0xff, //0x00000b07 jmp LBB0_86 + //0x00000b0c LBB0_112 + 0xb1, 0x01, //0x00000b0c movb $1, %cl + 0x0f, 0xb6, 0xd1, //0x00000b0e movzbl %cl, %edx + 0x49, 0x8b, 0x45, 0x00, //0x00000b11 movq (%r13), %rax + 0x49, 0x39, 0xc6, //0x00000b15 cmpq %rax, %r14 + 0x0f, 0x82, 0x9c, 0xfd, 0xff, 0xff, //0x00000b18 jb LBB0_114 + 0x90, 0x90, //0x00000b1e .p2align 4, 0x90 + //0x00000b20 LBB0_171 + 0x49, 0x8d, 0x4e, 0x01, //0x00000b20 leaq $1(%r14), %rcx + 0x48, 0x39, 0xc1, //0x00000b24 cmpq %rax, %rcx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000b27 jae LBB0_175 + 0x41, 0x8a, 0x1c, 0x0c, //0x00000b2d movb (%r12,%rcx), %bl + 0x80, 0xfb, 0x0d, //0x00000b31 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000b34 je LBB0_175 + 0x80, 0xfb, 0x20, //0x00000b3a cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00000b3d je LBB0_175 + 0x80, 0xc3, 0xf7, //0x00000b43 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000b46 cmpb $1, %bl + 0x0f, 0x87, 0x32, 0x01, 0x00, 0x00, //0x00000b49 ja LBB0_196 + 0x90, //0x00000b4f .p2align 4, 0x90 + //0x00000b50 LBB0_175 0x49, 0x8d, 0x4e, 0x02, //0x00000b50 leaq $2(%r14), %rcx 0x48, 0x39, 0xc1, //0x00000b54 cmpq %rax, %rcx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000b57 jae LBB0_161 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000b57 jae LBB0_179 0x41, 0x8a, 0x1c, 0x0c, //0x00000b5d movb (%r12,%rcx), %bl 0x80, 0xfb, 0x0d, //0x00000b61 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000b64 je LBB0_161 + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000b64 je LBB0_179 0x80, 0xfb, 0x20, //0x00000b6a cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00000b6d je LBB0_161 + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00000b6d je LBB0_179 0x80, 0xc3, 0xf7, //0x00000b73 addb $-9, %bl 0x80, 0xfb, 0x01, //0x00000b76 cmpb $1, %bl - 0x0f, 0x87, 0x12, 0x01, 0x00, 0x00, //0x00000b79 ja LBB0_192 + 0x0f, 0x87, 0x02, 0x01, 0x00, 0x00, //0x00000b79 ja LBB0_196 0x90, //0x00000b7f .p2align 4, 0x90 - //0x00000b80 LBB0_161 + //0x00000b80 LBB0_179 0x49, 0x8d, 0x4e, 0x03, //0x00000b80 leaq $3(%r14), %rcx 0x48, 0x39, 0xc1, //0x00000b84 cmpq %rax, %rcx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000b87 jae LBB0_165 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000b87 jae LBB0_183 0x41, 0x8a, 0x1c, 0x0c, //0x00000b8d movb (%r12,%rcx), %bl 0x80, 0xfb, 0x0d, //0x00000b91 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000b94 je LBB0_165 + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000b94 je LBB0_183 0x80, 0xfb, 0x20, //0x00000b9a cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00000b9d je LBB0_165 + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00000b9d je LBB0_183 0x80, 0xc3, 0xf7, //0x00000ba3 addb $-9, %bl 0x80, 0xfb, 0x01, //0x00000ba6 cmpb $1, %bl - 0x0f, 0x87, 0xe2, 0x00, 0x00, 0x00, //0x00000ba9 ja LBB0_192 + 0x0f, 0x87, 0xd2, 0x00, 0x00, 0x00, //0x00000ba9 ja LBB0_196 0x90, //0x00000baf .p2align 4, 0x90 - //0x00000bb0 LBB0_165 + //0x00000bb0 LBB0_183 0x49, 0x8d, 0x4e, 0x04, //0x00000bb0 leaq $4(%r14), %rcx - 0x48, 0x89, 0xc6, //0x00000bb4 movq %rax, %rsi - 0x48, 0x29, 0xce, //0x00000bb7 subq %rcx, %rsi - 0x0f, 0x86, 0x13, 0x3f, 0x00, 0x00, //0x00000bba jbe LBB0_1023 - 0x48, 0x83, 0xfe, 0x20, //0x00000bc0 cmpq $32, %rsi - 0x0f, 0x82, 0x87, 0x10, 0x00, 0x00, //0x00000bc4 jb LBB0_351 - 0x48, 0xc7, 0xc6, 0xfc, 0xff, 0xff, 0xff, //0x00000bca movq $-4, %rsi - 0x4c, 0x29, 0xf6, //0x00000bd1 subq %r14, %rsi + 0x48, 0x89, 0xc7, //0x00000bb4 movq %rax, %rdi + 0x48, 0x29, 0xcf, //0x00000bb7 subq %rcx, %rdi + 0x0f, 0x86, 0xf4, 0x26, 0x00, 0x00, //0x00000bba jbe LBB0_1047 + 0x48, 0x83, 0xff, 0x20, //0x00000bc0 cmpq $32, %rdi + 0x0f, 0x82, 0x14, 0x12, 0x00, 0x00, //0x00000bc4 jb LBB0_366 + 0x48, 0xc7, 0xc7, 0xfc, 0xff, 0xff, 0xff, //0x00000bca movq $-4, %rdi + 0x4c, 0x29, 0xf7, //0x00000bd1 subq %r14, %rdi 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000bd4 .p2align 4, 0x90 - //0x00000be0 LBB0_168 + //0x00000be0 LBB0_186 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x0c, //0x00000be0 vmovdqu (%r12,%rcx), %ymm6 0xc4, 0x62, 0x7d, 0x00, 0xde, //0x00000be6 vpshufb %ymm6, %ymm0, %ymm11 0xc5, 0xa5, 0x74, 0xf6, //0x00000beb vpcmpeqb %ymm6, %ymm11, %ymm6 - 0xc5, 0xfd, 0xd7, 0xfe, //0x00000bef vpmovmskb %ymm6, %edi - 0x83, 0xff, 0xff, //0x00000bf3 cmpl $-1, %edi - 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x00000bf6 jne LBB0_191 + 0xc5, 0xfd, 0xd7, 0xf6, //0x00000bef vpmovmskb %ymm6, %esi + 0x83, 0xfe, 0xff, //0x00000bf3 cmpl $-1, %esi + 0x0f, 0x85, 0x74, 0x00, 0x00, 0x00, //0x00000bf6 jne LBB0_195 0x48, 0x83, 0xc1, 0x20, //0x00000bfc addq $32, %rcx - 0x48, 0x8d, 0x3c, 0x30, //0x00000c00 leaq (%rax,%rsi), %rdi - 0x48, 0x83, 0xc7, 0xe0, //0x00000c04 addq $-32, %rdi - 0x48, 0x83, 0xc6, 0xe0, //0x00000c08 addq $-32, %rsi - 0x48, 0x83, 0xff, 0x1f, //0x00000c0c cmpq $31, %rdi - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00000c10 ja LBB0_168 + 0x48, 0x8d, 0x34, 0x38, //0x00000c00 leaq (%rax,%rdi), %rsi + 0x48, 0x83, 0xc6, 0xe0, //0x00000c04 addq $-32, %rsi + 0x48, 0x83, 0xc7, 0xe0, //0x00000c08 addq $-32, %rdi + 0x48, 0x83, 0xfe, 0x1f, //0x00000c0c cmpq $31, %rsi + 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00000c10 ja LBB0_186 0x4c, 0x89, 0xe1, //0x00000c16 movq %r12, %rcx - 0x48, 0x29, 0xf1, //0x00000c19 subq %rsi, %rcx - 0x48, 0x01, 0xc6, //0x00000c1c addq %rax, %rsi - 0x48, 0x85, 0xf6, //0x00000c1f testq %rsi, %rsi - 0x0f, 0x84, 0x3e, 0x00, 0x00, 0x00, //0x00000c22 je LBB0_176 - //0x00000c28 LBB0_171 - 0x4c, 0x8d, 0x04, 0x31, //0x00000c28 leaq (%rcx,%rsi), %r8 - 0x31, 0xff, //0x00000c2c xorl %edi, %edi + 0x48, 0x29, 0xf9, //0x00000c19 subq %rdi, %rcx + 0x48, 0x01, 0xc7, //0x00000c1c addq %rax, %rdi + 0x48, 0x85, 0xff, //0x00000c1f testq %rdi, %rdi + 0x0f, 0x84, 0x2f, 0x00, 0x00, 0x00, //0x00000c22 je LBB0_194 + //0x00000c28 LBB0_189 + 0x4c, 0x8d, 0x04, 0x39, //0x00000c28 leaq (%rcx,%rdi), %r8 + 0x31, 0xf6, //0x00000c2c xorl %esi, %esi 0x90, 0x90, //0x00000c2e .p2align 4, 0x90 - //0x00000c30 LBB0_172 - 0x0f, 0xbe, 0x1c, 0x39, //0x00000c30 movsbl (%rcx,%rdi), %ebx + //0x00000c30 LBB0_190 + 0x0f, 0xbe, 0x1c, 0x31, //0x00000c30 movsbl (%rcx,%rsi), %ebx 0x83, 0xfb, 0x20, //0x00000c34 cmpl $32, %ebx - 0x0f, 0x87, 0x02, 0x0c, 0x00, 0x00, //0x00000c37 ja LBB0_348 - 0x48, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000c3d movabsq $4294977024, %rdx - 0x48, 0x0f, 0xa3, 0xda, //0x00000c47 btq %rbx, %rdx - 0x0f, 0x83, 0xee, 0x0b, 0x00, 0x00, //0x00000c4b jae LBB0_348 - 0x48, 0x83, 0xc7, 0x01, //0x00000c51 addq $1, %rdi - 0x48, 0x39, 0xfe, //0x00000c55 cmpq %rdi, %rsi - 0x0f, 0x85, 0xd2, 0xff, 0xff, 0xff, //0x00000c58 jne LBB0_172 - 0x4c, 0x89, 0xc1, //0x00000c5e movq %r8, %rcx - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00000c61 movq $8(%rsp), %r8 - //0x00000c66 LBB0_176 - 0x4c, 0x29, 0xe1, //0x00000c66 subq %r12, %rcx - 0x48, 0x39, 0xc1, //0x00000c69 cmpq %rax, %rcx - 0x0f, 0x82, 0x1f, 0x00, 0x00, 0x00, //0x00000c6c jb LBB0_192 - 0xe9, 0x10, 0x40, 0x00, 0x00, //0x00000c72 jmp LBB0_1024 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000c77 .p2align 4, 0x90 - //0x00000c80 LBB0_191 - 0xf7, 0xd7, //0x00000c80 notl %edi - 0x0f, 0xbc, 0xcf, //0x00000c82 bsfl %edi, %ecx - 0x48, 0x29, 0xf1, //0x00000c85 subq %rsi, %rcx - 0x48, 0x39, 0xc1, //0x00000c88 cmpq %rax, %rcx - 0x0f, 0x83, 0xf6, 0x3f, 0x00, 0x00, //0x00000c8b jae LBB0_1024 - //0x00000c91 LBB0_192 - 0x4c, 0x8d, 0x71, 0x01, //0x00000c91 leaq $1(%rcx), %r14 - 0x4d, 0x89, 0x30, //0x00000c95 movq %r14, (%r8) - 0x41, 0x80, 0x3c, 0x0c, 0x3a, //0x00000c98 cmpb $58, (%r12,%rcx) - 0x0f, 0x85, 0xe4, 0x3f, 0x00, 0x00, //0x00000c9d jne LBB0_1024 - 0x4d, 0x85, 0xc9, //0x00000ca3 testq %r9, %r9 - 0x0f, 0x85, 0xd4, 0x20, 0x00, 0x00, //0x00000ca6 jne LBB0_519 - 0x49, 0x8b, 0x55, 0x00, //0x00000cac movq (%r13), %rdx - 0x49, 0x39, 0xd6, //0x00000cb0 cmpq %rdx, %r14 - 0x0f, 0x83, 0x27, 0x00, 0x00, 0x00, //0x00000cb3 jae LBB0_199 - 0x43, 0x8a, 0x04, 0x34, //0x00000cb9 movb (%r12,%r14), %al - 0x3c, 0x0d, //0x00000cbd cmpb $13, %al - 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x00000cbf je LBB0_199 - 0x3c, 0x20, //0x00000cc5 cmpb $32, %al - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000cc7 je LBB0_199 - 0x04, 0xf7, //0x00000ccd addb $-9, %al - 0x3c, 0x01, //0x00000ccf cmpb $1, %al - 0x0f, 0x86, 0x09, 0x00, 0x00, 0x00, //0x00000cd1 jbe LBB0_199 - 0x4c, 0x89, 0xf0, //0x00000cd7 movq %r14, %rax - 0xe9, 0x62, 0x01, 0x00, 0x00, //0x00000cda jmp LBB0_224 - 0x90, //0x00000cdf .p2align 4, 0x90 - //0x00000ce0 LBB0_199 - 0x48, 0x8d, 0x41, 0x02, //0x00000ce0 leaq $2(%rcx), %rax - 0x48, 0x39, 0xd0, //0x00000ce4 cmpq %rdx, %rax - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000ce7 jae LBB0_203 - 0x41, 0x8a, 0x1c, 0x04, //0x00000ced movb (%r12,%rax), %bl - 0x80, 0xfb, 0x0d, //0x00000cf1 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000cf4 je LBB0_203 - 0x80, 0xfb, 0x20, //0x00000cfa cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00000cfd je LBB0_203 - 0x80, 0xc3, 0xf7, //0x00000d03 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000d06 cmpb $1, %bl - 0x0f, 0x87, 0x32, 0x01, 0x00, 0x00, //0x00000d09 ja LBB0_224 - 0x90, //0x00000d0f .p2align 4, 0x90 - //0x00000d10 LBB0_203 - 0x48, 0x8d, 0x41, 0x03, //0x00000d10 leaq $3(%rcx), %rax - 0x48, 0x39, 0xd0, //0x00000d14 cmpq %rdx, %rax - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000d17 jae LBB0_207 - 0x41, 0x8a, 0x1c, 0x04, //0x00000d1d movb (%r12,%rax), %bl - 0x80, 0xfb, 0x0d, //0x00000d21 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000d24 je LBB0_207 - 0x80, 0xfb, 0x20, //0x00000d2a cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00000d2d je LBB0_207 - 0x80, 0xc3, 0xf7, //0x00000d33 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000d36 cmpb $1, %bl - 0x0f, 0x87, 0x02, 0x01, 0x00, 0x00, //0x00000d39 ja LBB0_224 - 0x90, //0x00000d3f .p2align 4, 0x90 - //0x00000d40 LBB0_207 - 0x48, 0x8d, 0x41, 0x04, //0x00000d40 leaq $4(%rcx), %rax - 0x48, 0x39, 0xd0, //0x00000d44 cmpq %rdx, %rax - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000d47 jae LBB0_211 - 0x41, 0x8a, 0x1c, 0x04, //0x00000d4d movb (%r12,%rax), %bl - 0x80, 0xfb, 0x0d, //0x00000d51 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000d54 je LBB0_211 - 0x80, 0xfb, 0x20, //0x00000d5a cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00000d5d je LBB0_211 - 0x80, 0xc3, 0xf7, //0x00000d63 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000d66 cmpb $1, %bl - 0x0f, 0x87, 0xd2, 0x00, 0x00, 0x00, //0x00000d69 ja LBB0_224 - 0x90, //0x00000d6f .p2align 4, 0x90 - //0x00000d70 LBB0_211 - 0x48, 0x8d, 0x41, 0x05, //0x00000d70 leaq $5(%rcx), %rax - 0x48, 0x89, 0xd6, //0x00000d74 movq %rdx, %rsi - 0x48, 0x29, 0xc6, //0x00000d77 subq %rax, %rsi - 0x0f, 0x86, 0xb0, 0x05, 0x00, 0x00, //0x00000d7a jbe LBB0_282 - 0x48, 0x83, 0xfe, 0x20, //0x00000d80 cmpq $32, %rsi - 0x0f, 0x82, 0x2c, 0x0f, 0x00, 0x00, //0x00000d84 jb LBB0_354 - 0x48, 0xc7, 0xc6, 0xfb, 0xff, 0xff, 0xff, //0x00000d8a movq $-5, %rsi - 0x48, 0x29, 0xce, //0x00000d91 subq %rcx, %rsi - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000d94 .p2align 4, 0x90 - //0x00000da0 LBB0_214 - 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x04, //0x00000da0 vmovdqu (%r12,%rax), %ymm6 - 0xc4, 0x62, 0x7d, 0x00, 0xde, //0x00000da6 vpshufb %ymm6, %ymm0, %ymm11 - 0xc5, 0xa5, 0x74, 0xf6, //0x00000dab vpcmpeqb %ymm6, %ymm11, %ymm6 - 0xc5, 0xfd, 0xd7, 0xce, //0x00000daf vpmovmskb %ymm6, %ecx - 0x83, 0xf9, 0xff, //0x00000db3 cmpl $-1, %ecx - 0x0f, 0x85, 0x74, 0x00, 0x00, 0x00, //0x00000db6 jne LBB0_223 - 0x48, 0x83, 0xc0, 0x20, //0x00000dbc addq $32, %rax - 0x48, 0x8d, 0x0c, 0x32, //0x00000dc0 leaq (%rdx,%rsi), %rcx - 0x48, 0x83, 0xc1, 0xe0, //0x00000dc4 addq $-32, %rcx - 0x48, 0x83, 0xc6, 0xe0, //0x00000dc8 addq $-32, %rsi - 0x48, 0x83, 0xf9, 0x1f, //0x00000dcc cmpq $31, %rcx - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00000dd0 ja LBB0_214 - 0x4c, 0x89, 0xe0, //0x00000dd6 movq %r12, %rax - 0x48, 0x29, 0xf0, //0x00000dd9 subq %rsi, %rax - 0x48, 0x01, 0xd6, //0x00000ddc addq %rdx, %rsi - 0x48, 0x85, 0xf6, //0x00000ddf testq %rsi, %rsi - 0x0f, 0x84, 0x37, 0x00, 0x00, 0x00, //0x00000de2 je LBB0_222 - //0x00000de8 LBB0_217 - 0x4c, 0x8d, 0x0c, 0x30, //0x00000de8 leaq (%rax,%rsi), %r9 - 0x31, 0xc9, //0x00000dec xorl %ecx, %ecx - //0x00000dee LBB0_218 - 0x0f, 0xbe, 0x1c, 0x08, //0x00000dee movsbl (%rax,%rcx), %ebx - 0x83, 0xfb, 0x20, //0x00000df2 cmpl $32, %ebx - 0x0f, 0x87, 0x71, 0x0a, 0x00, 0x00, //0x00000df5 ja LBB0_350 - 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000dfb movabsq $4294977024, %rdi - 0x48, 0x0f, 0xa3, 0xdf, //0x00000e05 btq %rbx, %rdi - 0x0f, 0x83, 0x5d, 0x0a, 0x00, 0x00, //0x00000e09 jae LBB0_350 - 0x48, 0x83, 0xc1, 0x01, //0x00000e0f addq $1, %rcx - 0x48, 0x39, 0xce, //0x00000e13 cmpq %rcx, %rsi - 0x0f, 0x85, 0xd2, 0xff, 0xff, 0xff, //0x00000e16 jne LBB0_218 - 0x4c, 0x89, 0xc8, //0x00000e1c movq %r9, %rax - //0x00000e1f LBB0_222 - 0x4c, 0x29, 0xe0, //0x00000e1f subq %r12, %rax - 0x48, 0x39, 0xd0, //0x00000e22 cmpq %rdx, %rax - 0x0f, 0x82, 0x16, 0x00, 0x00, 0x00, //0x00000e25 jb LBB0_224 - 0xe9, 0x06, 0x05, 0x00, 0x00, //0x00000e2b jmp LBB0_283 - //0x00000e30 .p2align 4, 0x90 - //0x00000e30 LBB0_223 - 0xf7, 0xd1, //0x00000e30 notl %ecx - 0x0f, 0xbc, 0xc1, //0x00000e32 bsfl %ecx, %eax - 0x48, 0x29, 0xf0, //0x00000e35 subq %rsi, %rax - 0x48, 0x39, 0xd0, //0x00000e38 cmpq %rdx, %rax - 0x0f, 0x83, 0xf5, 0x04, 0x00, 0x00, //0x00000e3b jae LBB0_283 - //0x00000e41 LBB0_224 - 0x4c, 0x8d, 0x70, 0x01, //0x00000e41 leaq $1(%rax), %r14 - 0x4d, 0x89, 0x30, //0x00000e45 movq %r14, (%r8) - 0x41, 0x0f, 0xbe, 0x0c, 0x04, //0x00000e48 movsbl (%r12,%rax), %ecx - 0x83, 0xf9, 0x7b, //0x00000e4d cmpl $123, %ecx - 0x0f, 0x87, 0xda, 0x04, 0x00, 0x00, //0x00000e50 ja LBB0_282 - 0x48, 0x8d, 0x15, 0xdf, 0x49, 0x00, 0x00, //0x00000e56 leaq $18911(%rip), %rdx /* LJTI0_1+0(%rip) */ - 0x48, 0x63, 0x0c, 0x8a, //0x00000e5d movslq (%rdx,%rcx,4), %rcx - 0x48, 0x01, 0xd1, //0x00000e61 addq %rdx, %rcx - 0xff, 0xe1, //0x00000e64 jmpq *%rcx - //0x00000e66 LBB0_226 - 0x49, 0x8b, 0x55, 0x00, //0x00000e66 movq (%r13), %rdx - 0x48, 0x89, 0xd1, //0x00000e6a movq %rdx, %rcx - 0x4c, 0x29, 0xf1, //0x00000e6d subq %r14, %rcx - 0x48, 0x83, 0xf9, 0x20, //0x00000e70 cmpq $32, %rcx - 0x0f, 0x82, 0x4d, 0x0e, 0x00, 0x00, //0x00000e74 jb LBB0_355 - 0x48, 0x89, 0xc1, //0x00000e7a movq %rax, %rcx - 0x48, 0xf7, 0xd1, //0x00000e7d notq %rcx - 0x48, 0x83, 0xc0, 0x01, //0x00000e80 addq $1, %rax - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000e84 .p2align 4, 0x90 - //0x00000e90 LBB0_228 - 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x04, //0x00000e90 vmovdqu (%r12,%rax), %ymm6 - 0xc5, 0x4d, 0x74, 0xdb, //0x00000e96 vpcmpeqb %ymm3, %ymm6, %ymm11 - 0xc5, 0xcd, 0xdb, 0xf4, //0x00000e9a vpand %ymm4, %ymm6, %ymm6 - 0xc5, 0xcd, 0x74, 0xf5, //0x00000e9e vpcmpeqb %ymm5, %ymm6, %ymm6 - 0xc5, 0xa5, 0xeb, 0xf6, //0x00000ea2 vpor %ymm6, %ymm11, %ymm6 - 0xc5, 0xfd, 0xd7, 0xf6, //0x00000ea6 vpmovmskb %ymm6, %esi - 0x85, 0xf6, //0x00000eaa testl %esi, %esi - 0x0f, 0x85, 0xbe, 0x00, 0x00, 0x00, //0x00000eac jne LBB0_242 - 0x48, 0x83, 0xc0, 0x20, //0x00000eb2 addq $32, %rax - 0x48, 0x8d, 0x34, 0x0a, //0x00000eb6 leaq (%rdx,%rcx), %rsi - 0x48, 0x83, 0xc6, 0xe0, //0x00000eba addq $-32, %rsi - 0x48, 0x83, 0xc1, 0xe0, //0x00000ebe addq $-32, %rcx - 0x48, 0x83, 0xfe, 0x1f, //0x00000ec2 cmpq $31, %rsi - 0x0f, 0x87, 0xc4, 0xff, 0xff, 0xff, //0x00000ec6 ja LBB0_228 - 0x4d, 0x89, 0xe6, //0x00000ecc movq %r12, %r14 - 0x49, 0x29, 0xce, //0x00000ecf subq %rcx, %r14 - 0x48, 0x01, 0xca, //0x00000ed2 addq %rcx, %rdx - 0x48, 0x89, 0xd1, //0x00000ed5 movq %rdx, %rcx - 0x48, 0x83, 0xf9, 0x10, //0x00000ed8 cmpq $16, %rcx - 0x0f, 0x82, 0x45, 0x00, 0x00, 0x00, //0x00000edc jb LBB0_234 - //0x00000ee2 LBB0_231 - 0x4c, 0x89, 0xe0, //0x00000ee2 movq %r12, %rax - 0x4c, 0x29, 0xf0, //0x00000ee5 subq %r14, %rax - //0x00000ee8 LBB0_232 - 0xc4, 0xc1, 0x7a, 0x6f, 0x36, //0x00000ee8 vmovdqu (%r14), %xmm6 - 0xc5, 0xc9, 0x74, 0x3d, 0xeb, 0xf2, 0xff, 0xff, //0x00000eed vpcmpeqb $-3349(%rip), %xmm6, %xmm7 /* LCPI0_4+0(%rip) */ - 0xc5, 0xc9, 0xdb, 0x35, 0xf3, 0xf2, 0xff, 0xff, //0x00000ef5 vpand $-3341(%rip), %xmm6, %xmm6 /* LCPI0_5+0(%rip) */ - 0xc5, 0xb9, 0x74, 0xf6, //0x00000efd vpcmpeqb %xmm6, %xmm8, %xmm6 - 0xc5, 0xc9, 0xeb, 0xf7, //0x00000f01 vpor %xmm7, %xmm6, %xmm6 - 0xc5, 0xf9, 0xd7, 0xd6, //0x00000f05 vpmovmskb %xmm6, %edx - 0x85, 0xd2, //0x00000f09 testl %edx, %edx - 0x0f, 0x85, 0x07, 0x09, 0x00, 0x00, //0x00000f0b jne LBB0_347 - 0x49, 0x83, 0xc6, 0x10, //0x00000f11 addq $16, %r14 - 0x48, 0x83, 0xc1, 0xf0, //0x00000f15 addq $-16, %rcx - 0x48, 0x83, 0xc0, 0xf0, //0x00000f19 addq $-16, %rax - 0x48, 0x83, 0xf9, 0x0f, //0x00000f1d cmpq $15, %rcx - 0x0f, 0x87, 0xc1, 0xff, 0xff, 0xff, //0x00000f21 ja LBB0_232 - //0x00000f27 LBB0_234 - 0x48, 0x85, 0xc9, //0x00000f27 testq %rcx, %rcx - 0x0f, 0x84, 0x36, 0x00, 0x00, 0x00, //0x00000f2a je LBB0_241 - 0x49, 0x8d, 0x14, 0x0e, //0x00000f30 leaq (%r14,%rcx), %rdx - 0x31, 0xc0, //0x00000f34 xorl %eax, %eax - //0x00000f36 LBB0_236 - 0x41, 0x0f, 0xb6, 0x1c, 0x06, //0x00000f36 movzbl (%r14,%rax), %ebx - 0x80, 0xfb, 0x2c, //0x00000f3b cmpb $44, %bl - 0x0f, 0x84, 0x9d, 0x0d, 0x00, 0x00, //0x00000f3e je LBB0_356 - 0x80, 0xfb, 0x7d, //0x00000f44 cmpb $125, %bl - 0x0f, 0x84, 0x94, 0x0d, 0x00, 0x00, //0x00000f47 je LBB0_356 - 0x80, 0xfb, 0x5d, //0x00000f4d cmpb $93, %bl - 0x0f, 0x84, 0x8b, 0x0d, 0x00, 0x00, //0x00000f50 je LBB0_356 - 0x48, 0x83, 0xc0, 0x01, //0x00000f56 addq $1, %rax - 0x48, 0x39, 0xc1, //0x00000f5a cmpq %rax, %rcx - 0x0f, 0x85, 0xd3, 0xff, 0xff, 0xff, //0x00000f5d jne LBB0_236 - 0x49, 0x89, 0xd6, //0x00000f63 movq %rdx, %r14 - //0x00000f66 LBB0_241 - 0x4d, 0x29, 0xe6, //0x00000f66 subq %r12, %r14 - 0xe9, 0x79, 0x0d, 0x00, 0x00, //0x00000f69 jmp LBB0_357 - 0x90, 0x90, //0x00000f6e .p2align 4, 0x90 - //0x00000f70 LBB0_242 - 0x44, 0x0f, 0xbc, 0xf6, //0x00000f70 bsfl %esi, %r14d - 0x49, 0x29, 0xce, //0x00000f74 subq %rcx, %r14 - 0x4d, 0x89, 0x30, //0x00000f77 movq %r14, (%r8) - 0xe9, 0xb7, 0x03, 0x00, 0x00, //0x00000f7a jmp LBB0_283 - //0x00000f7f LBB0_243 - 0x48, 0x83, 0xc0, 0x04, //0x00000f7f addq $4, %rax - 0x49, 0x3b, 0x45, 0x00, //0x00000f83 cmpq (%r13), %rax - 0x0f, 0x86, 0xa3, 0x03, 0x00, 0x00, //0x00000f87 jbe LBB0_282 - 0xe9, 0xa4, 0x03, 0x00, 0x00, //0x00000f8d jmp LBB0_283 - //0x00000f92 LBB0_244 - 0x4c, 0x89, 0x7c, 0x24, 0x18, //0x00000f92 movq %r15, $24(%rsp) - 0x4d, 0x8b, 0x45, 0x00, //0x00000f97 movq (%r13), %r8 - 0x4d, 0x89, 0xc7, //0x00000f9b movq %r8, %r15 - 0x4d, 0x29, 0xf7, //0x00000f9e subq %r14, %r15 - 0x49, 0x83, 0xff, 0x20, //0x00000fa1 cmpq $32, %r15 - 0x0f, 0x8c, 0x53, 0x0d, 0x00, 0x00, //0x00000fa5 jl LBB0_359 - 0x4d, 0x8d, 0x0c, 0x04, //0x00000fab leaq (%r12,%rax), %r9 - 0x49, 0x29, 0xc0, //0x00000faf subq %rax, %r8 - 0xbb, 0x1f, 0x00, 0x00, 0x00, //0x00000fb2 movl $31, %ebx - 0x45, 0x31, 0xff, //0x00000fb7 xorl %r15d, %r15d - 0x45, 0x31, 0xdb, //0x00000fba xorl %r11d, %r11d - 0x90, 0x90, 0x90, //0x00000fbd .p2align 4, 0x90 - //0x00000fc0 LBB0_246 - 0xc4, 0x81, 0x7e, 0x6f, 0x74, 0x39, 0x01, //0x00000fc0 vmovdqu $1(%r9,%r15), %ymm6 - 0xc5, 0x4d, 0x74, 0xd9, //0x00000fc7 vpcmpeqb %ymm1, %ymm6, %ymm11 - 0xc4, 0x41, 0x7d, 0xd7, 0xd3, //0x00000fcb vpmovmskb %ymm11, %r10d - 0xc5, 0xcd, 0x74, 0xf2, //0x00000fd0 vpcmpeqb %ymm2, %ymm6, %ymm6 - 0xc5, 0xfd, 0xd7, 0xfe, //0x00000fd4 vpmovmskb %ymm6, %edi - 0x85, 0xff, //0x00000fd8 testl %edi, %edi - 0x0f, 0x85, 0x20, 0x00, 0x00, 0x00, //0x00000fda jne LBB0_249 - 0x4d, 0x85, 0xdb, //0x00000fe0 testq %r11, %r11 - 0x0f, 0x85, 0x17, 0x00, 0x00, 0x00, //0x00000fe3 jne LBB0_249 - 0x45, 0x31, 0xdb, //0x00000fe9 xorl %r11d, %r11d - 0xe9, 0x40, 0x00, 0x00, 0x00, //0x00000fec jmp LBB0_250 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000ff1 .p2align 4, 0x90 - //0x00001000 LBB0_249 - 0x44, 0x89, 0xde, //0x00001000 movl %r11d, %esi - 0xf7, 0xd6, //0x00001003 notl %esi - 0x21, 0xfe, //0x00001005 andl %edi, %esi - 0x8d, 0x0c, 0x36, //0x00001007 leal (%rsi,%rsi), %ecx - 0x44, 0x09, 0xd9, //0x0000100a orl %r11d, %ecx - 0x89, 0xca, //0x0000100d movl %ecx, %edx - 0xf7, 0xd2, //0x0000100f notl %edx - 0x21, 0xfa, //0x00001011 andl %edi, %edx - 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001013 andl $-1431655766, %edx - 0x45, 0x31, 0xdb, //0x00001019 xorl %r11d, %r11d - 0x01, 0xf2, //0x0000101c addl %esi, %edx - 0x41, 0x0f, 0x92, 0xc3, //0x0000101e setb %r11b - 0x01, 0xd2, //0x00001022 addl %edx, %edx - 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x00001024 xorl $1431655765, %edx - 0x21, 0xca, //0x0000102a andl %ecx, %edx - 0xf7, 0xd2, //0x0000102c notl %edx - 0x41, 0x21, 0xd2, //0x0000102e andl %edx, %r10d - //0x00001031 LBB0_250 - 0x4d, 0x85, 0xd2, //0x00001031 testq %r10, %r10 - 0x0f, 0x85, 0x69, 0x07, 0x00, 0x00, //0x00001034 jne LBB0_341 - 0x49, 0x83, 0xc7, 0x20, //0x0000103a addq $32, %r15 - 0x49, 0x8d, 0x0c, 0x18, //0x0000103e leaq (%r8,%rbx), %rcx - 0x48, 0x83, 0xc1, 0xe0, //0x00001042 addq $-32, %rcx - 0x48, 0x83, 0xc3, 0xe0, //0x00001046 addq $-32, %rbx - 0x48, 0x83, 0xf9, 0x3f, //0x0000104a cmpq $63, %rcx - 0x0f, 0x8f, 0x6c, 0xff, 0xff, 0xff, //0x0000104e jg LBB0_246 - 0x4d, 0x85, 0xdb, //0x00001054 testq %r11, %r11 - 0x0f, 0x85, 0x31, 0x0e, 0x00, 0x00, //0x00001057 jne LBB0_383 - 0x4b, 0x8d, 0x04, 0x0f, //0x0000105d leaq (%r15,%r9), %rax - 0x48, 0x83, 0xc0, 0x01, //0x00001061 addq $1, %rax - 0x49, 0xf7, 0xd7, //0x00001065 notq %r15 - 0x4d, 0x01, 0xc7, //0x00001068 addq %r8, %r15 - //0x0000106b LBB0_254 - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x0000106b movq $32(%rsp), %r11 - 0x4d, 0x85, 0xff, //0x00001070 testq %r15, %r15 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00001073 movq $8(%rsp), %r8 - 0x0f, 0x8f, 0x63, 0x07, 0x00, 0x00, //0x00001078 jg LBB0_344 - 0xe9, 0x8b, 0x07, 0x00, 0x00, //0x0000107e jmp LBB0_255 - //0x00001083 LBB0_256 - 0x4d, 0x8b, 0x4d, 0x00, //0x00001083 movq (%r13), %r9 - 0x4d, 0x29, 0xf1, //0x00001087 subq %r14, %r9 - 0x4d, 0x01, 0xf4, //0x0000108a addq %r14, %r12 - 0x45, 0x31, 0xd2, //0x0000108d xorl %r10d, %r10d - 0x45, 0x31, 0xdb, //0x00001090 xorl %r11d, %r11d - 0x45, 0x31, 0xf6, //0x00001093 xorl %r14d, %r14d - 0x31, 0xd2, //0x00001096 xorl %edx, %edx - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00001098 jmp LBB0_258 - //0x0000109d LBB0_257 - 0x48, 0xc1, 0xf9, 0x3f, //0x0000109d sarq $63, %rcx - 0xf3, 0x48, 0x0f, 0xb8, 0xc7, //0x000010a1 popcntq %rdi, %rax - 0x49, 0x01, 0xc6, //0x000010a6 addq %rax, %r14 - 0x49, 0x83, 0xc4, 0x40, //0x000010a9 addq $64, %r12 - 0x49, 0x83, 0xc1, 0xc0, //0x000010ad addq $-64, %r9 - 0x49, 0x89, 0xca, //0x000010b1 movq %rcx, %r10 - //0x000010b4 LBB0_258 - 0x49, 0x83, 0xf9, 0x40, //0x000010b4 cmpq $64, %r9 - 0x0f, 0x8c, 0x2f, 0x01, 0x00, 0x00, //0x000010b8 jl LBB0_265 - //0x000010be LBB0_259 - 0xc4, 0x41, 0x7e, 0x6f, 0x3c, 0x24, //0x000010be vmovdqu (%r12), %ymm15 - 0xc4, 0x41, 0x7e, 0x6f, 0x74, 0x24, 0x20, //0x000010c4 vmovdqu $32(%r12), %ymm14 - 0xc5, 0x85, 0x74, 0xf2, //0x000010cb vpcmpeqb %ymm2, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xf6, //0x000010cf vpmovmskb %ymm6, %esi - 0xc5, 0x8d, 0x74, 0xf2, //0x000010d3 vpcmpeqb %ymm2, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xc6, //0x000010d7 vpmovmskb %ymm6, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x000010db shlq $32, %rax - 0x48, 0x09, 0xc6, //0x000010df orq %rax, %rsi - 0x48, 0x89, 0xf0, //0x000010e2 movq %rsi, %rax - 0x4c, 0x09, 0xd8, //0x000010e5 orq %r11, %rax - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x000010e8 jne LBB0_261 - 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x000010ee movq $-1, %rsi - 0x45, 0x31, 0xdb, //0x000010f5 xorl %r11d, %r11d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x000010f8 jmp LBB0_262 - //0x000010fd LBB0_261 - 0x4c, 0x89, 0xd8, //0x000010fd movq %r11, %rax - 0x48, 0xf7, 0xd0, //0x00001100 notq %rax - 0x48, 0x21, 0xf0, //0x00001103 andq %rsi, %rax - 0x48, 0x8d, 0x1c, 0x00, //0x00001106 leaq (%rax,%rax), %rbx - 0x4c, 0x09, 0xdb, //0x0000110a orq %r11, %rbx - 0x48, 0x89, 0xdf, //0x0000110d movq %rbx, %rdi - 0x48, 0xf7, 0xd7, //0x00001110 notq %rdi - 0x48, 0xb9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001113 movabsq $-6148914691236517206, %rcx - 0x48, 0x21, 0xce, //0x0000111d andq %rcx, %rsi - 0x48, 0x21, 0xfe, //0x00001120 andq %rdi, %rsi - 0x45, 0x31, 0xdb, //0x00001123 xorl %r11d, %r11d - 0x48, 0x01, 0xc6, //0x00001126 addq %rax, %rsi - 0x41, 0x0f, 0x92, 0xc3, //0x00001129 setb %r11b - 0x48, 0x01, 0xf6, //0x0000112d addq %rsi, %rsi - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001130 movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc6, //0x0000113a xorq %rax, %rsi - 0x48, 0x21, 0xde, //0x0000113d andq %rbx, %rsi - 0x48, 0xf7, 0xd6, //0x00001140 notq %rsi - //0x00001143 LBB0_262 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00001143 movq $8(%rsp), %r8 - 0xc5, 0x8d, 0x74, 0xf1, //0x00001148 vpcmpeqb %ymm1, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xc6, //0x0000114c vpmovmskb %ymm6, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001150 shlq $32, %rax - 0xc5, 0x85, 0x74, 0xf1, //0x00001154 vpcmpeqb %ymm1, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xfe, //0x00001158 vpmovmskb %ymm6, %edi - 0x48, 0x09, 0xc7, //0x0000115c orq %rax, %rdi - 0x48, 0x21, 0xf7, //0x0000115f andq %rsi, %rdi - 0xc4, 0xe1, 0xf9, 0x6e, 0xf7, //0x00001162 vmovq %rdi, %xmm6 - 0xc4, 0xc3, 0x49, 0x44, 0xf1, 0x00, //0x00001167 vpclmulqdq $0, %xmm9, %xmm6, %xmm6 - 0xc4, 0xe1, 0xf9, 0x7e, 0xf1, //0x0000116d vmovq %xmm6, %rcx - 0x4c, 0x31, 0xd1, //0x00001172 xorq %r10, %rcx - 0xc4, 0xc1, 0x05, 0x74, 0xf2, //0x00001175 vpcmpeqb %ymm10, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xfe, //0x0000117a vpmovmskb %ymm6, %edi - 0xc4, 0xc1, 0x0d, 0x74, 0xf2, //0x0000117e vpcmpeqb %ymm10, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xc6, //0x00001183 vpmovmskb %ymm6, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001187 shlq $32, %rax - 0x48, 0x09, 0xc7, //0x0000118b orq %rax, %rdi - 0x48, 0x89, 0xce, //0x0000118e movq %rcx, %rsi - 0x48, 0xf7, 0xd6, //0x00001191 notq %rsi - 0x48, 0x21, 0xf7, //0x00001194 andq %rsi, %rdi - 0xc5, 0x85, 0x74, 0xf5, //0x00001197 vpcmpeqb %ymm5, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xc6, //0x0000119b vpmovmskb %ymm6, %eax - 0xc5, 0x8d, 0x74, 0xf5, //0x0000119f vpcmpeqb %ymm5, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xde, //0x000011a3 vpmovmskb %ymm6, %ebx - 0x48, 0xc1, 0xe3, 0x20, //0x000011a7 shlq $32, %rbx - 0x48, 0x09, 0xd8, //0x000011ab orq %rbx, %rax - 0x48, 0x21, 0xf0, //0x000011ae andq %rsi, %rax - 0x0f, 0x84, 0xe6, 0xfe, 0xff, 0xff, //0x000011b1 je LBB0_257 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000011b7 .p2align 4, 0x90 - //0x000011c0 LBB0_263 - 0x48, 0x8d, 0x58, 0xff, //0x000011c0 leaq $-1(%rax), %rbx - 0x48, 0x89, 0xde, //0x000011c4 movq %rbx, %rsi - 0x48, 0x21, 0xfe, //0x000011c7 andq %rdi, %rsi - 0xf3, 0x48, 0x0f, 0xb8, 0xf6, //0x000011ca popcntq %rsi, %rsi - 0x4c, 0x01, 0xf6, //0x000011cf addq %r14, %rsi - 0x48, 0x39, 0xd6, //0x000011d2 cmpq %rdx, %rsi - 0x0f, 0x86, 0x9a, 0x05, 0x00, 0x00, //0x000011d5 jbe LBB0_339 - 0x48, 0x83, 0xc2, 0x01, //0x000011db addq $1, %rdx - 0x48, 0x21, 0xd8, //0x000011df andq %rbx, %rax - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x000011e2 jne LBB0_263 - 0xe9, 0xb0, 0xfe, 0xff, 0xff, //0x000011e8 jmp LBB0_257 - //0x000011ed LBB0_265 - 0x4d, 0x85, 0xc9, //0x000011ed testq %r9, %r9 - 0x0f, 0x8e, 0x85, 0x0c, 0x00, 0x00, //0x000011f0 jle LBB0_382 - 0xc5, 0xc9, 0xef, 0xf6, //0x000011f6 vpxor %xmm6, %xmm6, %xmm6 - 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x60, //0x000011fa vmovdqu %ymm6, $96(%rsp) - 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x00001200 vmovdqu %ymm6, $64(%rsp) - 0x44, 0x89, 0xe0, //0x00001206 movl %r12d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00001209 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x0000120e cmpl $4033, %eax - 0x0f, 0x82, 0x28, 0x00, 0x00, 0x00, //0x00001213 jb LBB0_269 - 0x49, 0x83, 0xf9, 0x20, //0x00001219 cmpq $32, %r9 - 0x0f, 0x82, 0x28, 0x00, 0x00, 0x00, //0x0000121d jb LBB0_270 - 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x24, //0x00001223 vmovdqu (%r12), %ymm6 - 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x00001229 vmovdqu %ymm6, $64(%rsp) - 0x49, 0x83, 0xc4, 0x20, //0x0000122f addq $32, %r12 - 0x49, 0x8d, 0x79, 0xe0, //0x00001233 leaq $-32(%r9), %rdi - 0x4c, 0x8d, 0x44, 0x24, 0x60, //0x00001237 leaq $96(%rsp), %r8 - 0xe9, 0x12, 0x00, 0x00, 0x00, //0x0000123c jmp LBB0_271 - //0x00001241 LBB0_269 - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x00001241 movq $40(%rsp), %r13 - 0xe9, 0x73, 0xfe, 0xff, 0xff, //0x00001246 jmp LBB0_259 - //0x0000124b LBB0_270 - 0x4c, 0x8d, 0x44, 0x24, 0x40, //0x0000124b leaq $64(%rsp), %r8 - 0x4c, 0x89, 0xcf, //0x00001250 movq %r9, %rdi - //0x00001253 LBB0_271 - 0x48, 0x83, 0xff, 0x10, //0x00001253 cmpq $16, %rdi - 0x0f, 0x82, 0x4d, 0x00, 0x00, 0x00, //0x00001257 jb LBB0_272 - 0xc4, 0xc1, 0x7a, 0x6f, 0x34, 0x24, //0x0000125d vmovdqu (%r12), %xmm6 - 0xc4, 0xc1, 0x7a, 0x7f, 0x30, //0x00001263 vmovdqu %xmm6, (%r8) - 0x49, 0x83, 0xc4, 0x10, //0x00001268 addq $16, %r12 - 0x49, 0x83, 0xc0, 0x10, //0x0000126c addq $16, %r8 - 0x48, 0x83, 0xc7, 0xf0, //0x00001270 addq $-16, %rdi - 0x48, 0x83, 0xff, 0x08, //0x00001274 cmpq $8, %rdi - 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x00001278 jae LBB0_279 - //0x0000127e LBB0_273 - 0x48, 0x83, 0xff, 0x04, //0x0000127e cmpq $4, %rdi - 0x0f, 0x8c, 0x49, 0x00, 0x00, 0x00, //0x00001282 jl LBB0_274 - //0x00001288 LBB0_280 - 0x41, 0x8b, 0x04, 0x24, //0x00001288 movl (%r12), %eax - 0x41, 0x89, 0x00, //0x0000128c movl %eax, (%r8) - 0x49, 0x83, 0xc4, 0x04, //0x0000128f addq $4, %r12 - 0x49, 0x83, 0xc0, 0x04, //0x00001293 addq $4, %r8 - 0x48, 0x83, 0xc7, 0xfc, //0x00001297 addq $-4, %rdi - 0x48, 0x83, 0xff, 0x02, //0x0000129b cmpq $2, %rdi - 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x0000129f jae LBB0_275 - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x000012a5 jmp LBB0_276 - //0x000012aa LBB0_272 - 0x48, 0x83, 0xff, 0x08, //0x000012aa cmpq $8, %rdi - 0x0f, 0x82, 0xca, 0xff, 0xff, 0xff, //0x000012ae jb LBB0_273 - //0x000012b4 LBB0_279 - 0x49, 0x8b, 0x04, 0x24, //0x000012b4 movq (%r12), %rax - 0x49, 0x89, 0x00, //0x000012b8 movq %rax, (%r8) - 0x49, 0x83, 0xc4, 0x08, //0x000012bb addq $8, %r12 - 0x49, 0x83, 0xc0, 0x08, //0x000012bf addq $8, %r8 - 0x48, 0x83, 0xc7, 0xf8, //0x000012c3 addq $-8, %rdi - 0x48, 0x83, 0xff, 0x04, //0x000012c7 cmpq $4, %rdi - 0x0f, 0x8d, 0xb7, 0xff, 0xff, 0xff, //0x000012cb jge LBB0_280 - //0x000012d1 LBB0_274 - 0x48, 0x83, 0xff, 0x02, //0x000012d1 cmpq $2, %rdi - 0x0f, 0x82, 0x15, 0x00, 0x00, 0x00, //0x000012d5 jb LBB0_276 - //0x000012db LBB0_275 - 0x41, 0x0f, 0xb7, 0x04, 0x24, //0x000012db movzwl (%r12), %eax - 0x66, 0x41, 0x89, 0x00, //0x000012e0 movw %ax, (%r8) - 0x49, 0x83, 0xc4, 0x02, //0x000012e4 addq $2, %r12 - 0x49, 0x83, 0xc0, 0x02, //0x000012e8 addq $2, %r8 - 0x48, 0x83, 0xc7, 0xfe, //0x000012ec addq $-2, %rdi - //0x000012f0 LBB0_276 - 0x4c, 0x89, 0xe0, //0x000012f0 movq %r12, %rax - 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x000012f3 leaq $64(%rsp), %r12 - 0x48, 0x85, 0xff, //0x000012f8 testq %rdi, %rdi - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x000012fb movq $40(%rsp), %r13 - 0x0f, 0x84, 0xb8, 0xfd, 0xff, 0xff, //0x00001300 je LBB0_259 - 0x8a, 0x00, //0x00001306 movb (%rax), %al - 0x41, 0x88, 0x00, //0x00001308 movb %al, (%r8) - 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x0000130b leaq $64(%rsp), %r12 - 0xe9, 0xa9, 0xfd, 0xff, 0xff, //0x00001310 jmp LBB0_259 - //0x00001315 LBB0_281 - 0x48, 0x83, 0xc0, 0x05, //0x00001315 addq $5, %rax - 0x49, 0x3b, 0x45, 0x00, //0x00001319 cmpq (%r13), %rax - 0x0f, 0x87, 0x13, 0x00, 0x00, 0x00, //0x0000131d ja LBB0_283 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001323 .p2align 4, 0x90 - //0x00001330 LBB0_282 - 0x49, 0x89, 0x00, //0x00001330 movq %rax, (%r8) - 0x49, 0x89, 0xc6, //0x00001333 movq %rax, %r14 - //0x00001336 LBB0_283 - 0x4d, 0x8b, 0x23, //0x00001336 movq (%r11), %r12 - 0x49, 0x8b, 0x43, 0x08, //0x00001339 movq $8(%r11), %rax - 0x49, 0x39, 0xc6, //0x0000133d cmpq %rax, %r14 - 0x0f, 0x83, 0x2a, 0x00, 0x00, 0x00, //0x00001340 jae LBB0_288 - 0x43, 0x8a, 0x0c, 0x34, //0x00001346 movb (%r12,%r14), %cl - 0x80, 0xf9, 0x0d, //0x0000134a cmpb $13, %cl - 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x0000134d je LBB0_288 - 0x80, 0xf9, 0x20, //0x00001353 cmpb $32, %cl - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00001356 je LBB0_288 - 0x80, 0xc1, 0xf7, //0x0000135c addb $-9, %cl - 0x80, 0xf9, 0x01, //0x0000135f cmpb $1, %cl - 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x00001362 jbe LBB0_288 - 0x4c, 0x89, 0xf1, //0x00001368 movq %r14, %rcx - 0xe9, 0x61, 0x01, 0x00, 0x00, //0x0000136b jmp LBB0_313 - //0x00001370 .p2align 4, 0x90 - //0x00001370 LBB0_288 - 0x49, 0x8d, 0x4e, 0x01, //0x00001370 leaq $1(%r14), %rcx - 0x48, 0x39, 0xc1, //0x00001374 cmpq %rax, %rcx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001377 jae LBB0_292 - 0x41, 0x8a, 0x14, 0x0c, //0x0000137d movb (%r12,%rcx), %dl - 0x80, 0xfa, 0x0d, //0x00001381 cmpb $13, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001384 je LBB0_292 - 0x80, 0xfa, 0x20, //0x0000138a cmpb $32, %dl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000138d je LBB0_292 - 0x80, 0xc2, 0xf7, //0x00001393 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x00001396 cmpb $1, %dl - 0x0f, 0x87, 0x32, 0x01, 0x00, 0x00, //0x00001399 ja LBB0_313 - 0x90, //0x0000139f .p2align 4, 0x90 - //0x000013a0 LBB0_292 - 0x49, 0x8d, 0x4e, 0x02, //0x000013a0 leaq $2(%r14), %rcx - 0x48, 0x39, 0xc1, //0x000013a4 cmpq %rax, %rcx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000013a7 jae LBB0_296 - 0x41, 0x8a, 0x14, 0x0c, //0x000013ad movb (%r12,%rcx), %dl - 0x80, 0xfa, 0x0d, //0x000013b1 cmpb $13, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000013b4 je LBB0_296 - 0x80, 0xfa, 0x20, //0x000013ba cmpb $32, %dl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000013bd je LBB0_296 - 0x80, 0xc2, 0xf7, //0x000013c3 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x000013c6 cmpb $1, %dl - 0x0f, 0x87, 0x02, 0x01, 0x00, 0x00, //0x000013c9 ja LBB0_313 - 0x90, //0x000013cf .p2align 4, 0x90 - //0x000013d0 LBB0_296 - 0x49, 0x8d, 0x4e, 0x03, //0x000013d0 leaq $3(%r14), %rcx - 0x48, 0x39, 0xc1, //0x000013d4 cmpq %rax, %rcx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000013d7 jae LBB0_300 - 0x41, 0x8a, 0x14, 0x0c, //0x000013dd movb (%r12,%rcx), %dl - 0x80, 0xfa, 0x0d, //0x000013e1 cmpb $13, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000013e4 je LBB0_300 - 0x80, 0xfa, 0x20, //0x000013ea cmpb $32, %dl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000013ed je LBB0_300 - 0x80, 0xc2, 0xf7, //0x000013f3 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x000013f6 cmpb $1, %dl - 0x0f, 0x87, 0xd2, 0x00, 0x00, 0x00, //0x000013f9 ja LBB0_313 - 0x90, //0x000013ff .p2align 4, 0x90 - //0x00001400 LBB0_300 - 0x49, 0x8d, 0x4e, 0x04, //0x00001400 leaq $4(%r14), %rcx - 0x48, 0x89, 0xc2, //0x00001404 movq %rax, %rdx - 0x48, 0x29, 0xca, //0x00001407 subq %rcx, %rdx - 0x0f, 0x86, 0xc3, 0x36, 0x00, 0x00, //0x0000140a jbe LBB0_1023 - 0x48, 0x83, 0xfa, 0x20, //0x00001410 cmpq $32, %rdx - 0x0f, 0x82, 0x8b, 0x08, 0x00, 0x00, //0x00001414 jb LBB0_353 - 0x48, 0xc7, 0xc2, 0xfc, 0xff, 0xff, 0xff, //0x0000141a movq $-4, %rdx - 0x4c, 0x29, 0xf2, //0x00001421 subq %r14, %rdx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001424 .p2align 4, 0x90 - //0x00001430 LBB0_303 - 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x0c, //0x00001430 vmovdqu (%r12,%rcx), %ymm6 - 0xc4, 0xe2, 0x7d, 0x00, 0xfe, //0x00001436 vpshufb %ymm6, %ymm0, %ymm7 - 0xc5, 0xcd, 0x74, 0xf7, //0x0000143b vpcmpeqb %ymm7, %ymm6, %ymm6 - 0xc5, 0xfd, 0xd7, 0xf6, //0x0000143f vpmovmskb %ymm6, %esi - 0x83, 0xfe, 0xff, //0x00001443 cmpl $-1, %esi - 0x0f, 0x85, 0x74, 0x00, 0x00, 0x00, //0x00001446 jne LBB0_312 - 0x48, 0x83, 0xc1, 0x20, //0x0000144c addq $32, %rcx - 0x48, 0x8d, 0x34, 0x10, //0x00001450 leaq (%rax,%rdx), %rsi - 0x48, 0x83, 0xc6, 0xe0, //0x00001454 addq $-32, %rsi - 0x48, 0x83, 0xc2, 0xe0, //0x00001458 addq $-32, %rdx - 0x48, 0x83, 0xfe, 0x1f, //0x0000145c cmpq $31, %rsi - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00001460 ja LBB0_303 - 0x4c, 0x89, 0xe1, //0x00001466 movq %r12, %rcx - 0x48, 0x29, 0xd1, //0x00001469 subq %rdx, %rcx - 0x48, 0x01, 0xc2, //0x0000146c addq %rax, %rdx - 0x48, 0x85, 0xd2, //0x0000146f testq %rdx, %rdx - 0x0f, 0x84, 0x37, 0x00, 0x00, 0x00, //0x00001472 je LBB0_311 - //0x00001478 LBB0_306 - 0x4c, 0x8d, 0x0c, 0x11, //0x00001478 leaq (%rcx,%rdx), %r9 - 0x31, 0xf6, //0x0000147c xorl %esi, %esi - //0x0000147e LBB0_307 - 0x0f, 0xbe, 0x1c, 0x31, //0x0000147e movsbl (%rcx,%rsi), %ebx - 0x83, 0xfb, 0x20, //0x00001482 cmpl $32, %ebx - 0x0f, 0x87, 0xcd, 0x03, 0x00, 0x00, //0x00001485 ja LBB0_349 - 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000148b movabsq $4294977024, %rdi - 0x48, 0x0f, 0xa3, 0xdf, //0x00001495 btq %rbx, %rdi - 0x0f, 0x83, 0xb9, 0x03, 0x00, 0x00, //0x00001499 jae LBB0_349 - 0x48, 0x83, 0xc6, 0x01, //0x0000149f addq $1, %rsi - 0x48, 0x39, 0xf2, //0x000014a3 cmpq %rsi, %rdx - 0x0f, 0x85, 0xd2, 0xff, 0xff, 0xff, //0x000014a6 jne LBB0_307 - 0x4c, 0x89, 0xc9, //0x000014ac movq %r9, %rcx - //0x000014af LBB0_311 - 0x4c, 0x29, 0xe1, //0x000014af subq %r12, %rcx - 0x48, 0x39, 0xc1, //0x000014b2 cmpq %rax, %rcx - 0x0f, 0x82, 0x16, 0x00, 0x00, 0x00, //0x000014b5 jb LBB0_313 - 0xe9, 0xc7, 0x37, 0x00, 0x00, //0x000014bb jmp LBB0_1024 - //0x000014c0 .p2align 4, 0x90 - //0x000014c0 LBB0_312 - 0xf7, 0xd6, //0x000014c0 notl %esi - 0x0f, 0xbc, 0xce, //0x000014c2 bsfl %esi, %ecx - 0x48, 0x29, 0xd1, //0x000014c5 subq %rdx, %rcx - 0x48, 0x39, 0xc1, //0x000014c8 cmpq %rax, %rcx - 0x0f, 0x83, 0xb6, 0x37, 0x00, 0x00, //0x000014cb jae LBB0_1024 - //0x000014d1 LBB0_313 - 0x4c, 0x8d, 0x71, 0x01, //0x000014d1 leaq $1(%rcx), %r14 - 0x4d, 0x89, 0x30, //0x000014d5 movq %r14, (%r8) - 0x41, 0x8a, 0x04, 0x0c, //0x000014d8 movb (%r12,%rcx), %al - 0x3c, 0x2c, //0x000014dc cmpb $44, %al - 0x0f, 0x84, 0x57, 0xf0, 0xff, 0xff, //0x000014de je LBB0_38 - 0xe9, 0x33, 0x1b, 0x00, 0x00, //0x000014e4 jmp LBB0_627 - //0x000014e9 LBB0_314 - 0x4d, 0x8b, 0x4d, 0x00, //0x000014e9 movq (%r13), %r9 - 0x4d, 0x29, 0xf1, //0x000014ed subq %r14, %r9 - 0x4d, 0x01, 0xf4, //0x000014f0 addq %r14, %r12 - 0x45, 0x31, 0xd2, //0x000014f3 xorl %r10d, %r10d - 0x45, 0x31, 0xdb, //0x000014f6 xorl %r11d, %r11d - 0x45, 0x31, 0xf6, //0x000014f9 xorl %r14d, %r14d - 0x31, 0xd2, //0x000014fc xorl %edx, %edx - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x000014fe jmp LBB0_316 - //0x00001503 LBB0_315 - 0x48, 0xc1, 0xf9, 0x3f, //0x00001503 sarq $63, %rcx - 0xf3, 0x48, 0x0f, 0xb8, 0xc7, //0x00001507 popcntq %rdi, %rax - 0x49, 0x01, 0xc6, //0x0000150c addq %rax, %r14 - 0x49, 0x83, 0xc4, 0x40, //0x0000150f addq $64, %r12 - 0x49, 0x83, 0xc1, 0xc0, //0x00001513 addq $-64, %r9 - 0x49, 0x89, 0xca, //0x00001517 movq %rcx, %r10 - //0x0000151a LBB0_316 - 0x49, 0x83, 0xf9, 0x40, //0x0000151a cmpq $64, %r9 - 0x0f, 0x8c, 0x29, 0x01, 0x00, 0x00, //0x0000151e jl LBB0_323 - //0x00001524 LBB0_317 - 0xc4, 0x41, 0x7e, 0x6f, 0x3c, 0x24, //0x00001524 vmovdqu (%r12), %ymm15 - 0xc4, 0x41, 0x7e, 0x6f, 0x74, 0x24, 0x20, //0x0000152a vmovdqu $32(%r12), %ymm14 - 0xc5, 0x85, 0x74, 0xf2, //0x00001531 vpcmpeqb %ymm2, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xf6, //0x00001535 vpmovmskb %ymm6, %esi - 0xc5, 0x8d, 0x74, 0xf2, //0x00001539 vpcmpeqb %ymm2, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xc6, //0x0000153d vpmovmskb %ymm6, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001541 shlq $32, %rax - 0x48, 0x09, 0xc6, //0x00001545 orq %rax, %rsi - 0x48, 0x89, 0xf0, //0x00001548 movq %rsi, %rax - 0x4c, 0x09, 0xd8, //0x0000154b orq %r11, %rax - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x0000154e jne LBB0_319 - 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00001554 movq $-1, %rsi - 0x45, 0x31, 0xdb, //0x0000155b xorl %r11d, %r11d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x0000155e jmp LBB0_320 - //0x00001563 LBB0_319 - 0x4c, 0x89, 0xd8, //0x00001563 movq %r11, %rax - 0x48, 0xf7, 0xd0, //0x00001566 notq %rax - 0x48, 0x21, 0xf0, //0x00001569 andq %rsi, %rax - 0x48, 0x8d, 0x1c, 0x00, //0x0000156c leaq (%rax,%rax), %rbx - 0x4c, 0x09, 0xdb, //0x00001570 orq %r11, %rbx - 0x48, 0x89, 0xdf, //0x00001573 movq %rbx, %rdi - 0x48, 0xf7, 0xd7, //0x00001576 notq %rdi - 0x48, 0xb9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001579 movabsq $-6148914691236517206, %rcx - 0x48, 0x21, 0xce, //0x00001583 andq %rcx, %rsi - 0x48, 0x21, 0xfe, //0x00001586 andq %rdi, %rsi - 0x45, 0x31, 0xdb, //0x00001589 xorl %r11d, %r11d - 0x48, 0x01, 0xc6, //0x0000158c addq %rax, %rsi - 0x41, 0x0f, 0x92, 0xc3, //0x0000158f setb %r11b - 0x48, 0x01, 0xf6, //0x00001593 addq %rsi, %rsi - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001596 movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc6, //0x000015a0 xorq %rax, %rsi - 0x48, 0x21, 0xde, //0x000015a3 andq %rbx, %rsi - 0x48, 0xf7, 0xd6, //0x000015a6 notq %rsi - //0x000015a9 LBB0_320 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x000015a9 movq $8(%rsp), %r8 - 0xc5, 0x8d, 0x74, 0xf1, //0x000015ae vpcmpeqb %ymm1, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xc6, //0x000015b2 vpmovmskb %ymm6, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x000015b6 shlq $32, %rax - 0xc5, 0x85, 0x74, 0xf1, //0x000015ba vpcmpeqb %ymm1, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xfe, //0x000015be vpmovmskb %ymm6, %edi - 0x48, 0x09, 0xc7, //0x000015c2 orq %rax, %rdi - 0x48, 0x21, 0xf7, //0x000015c5 andq %rsi, %rdi - 0xc4, 0xe1, 0xf9, 0x6e, 0xf7, //0x000015c8 vmovq %rdi, %xmm6 - 0xc4, 0xc3, 0x49, 0x44, 0xf1, 0x00, //0x000015cd vpclmulqdq $0, %xmm9, %xmm6, %xmm6 - 0xc4, 0xe1, 0xf9, 0x7e, 0xf1, //0x000015d3 vmovq %xmm6, %rcx - 0x4c, 0x31, 0xd1, //0x000015d8 xorq %r10, %rcx - 0xc4, 0xc1, 0x05, 0x74, 0xf4, //0x000015db vpcmpeqb %ymm12, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xfe, //0x000015e0 vpmovmskb %ymm6, %edi - 0xc4, 0xc1, 0x0d, 0x74, 0xf4, //0x000015e4 vpcmpeqb %ymm12, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xc6, //0x000015e9 vpmovmskb %ymm6, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x000015ed shlq $32, %rax - 0x48, 0x09, 0xc7, //0x000015f1 orq %rax, %rdi - 0x48, 0x89, 0xce, //0x000015f4 movq %rcx, %rsi - 0x48, 0xf7, 0xd6, //0x000015f7 notq %rsi - 0x48, 0x21, 0xf7, //0x000015fa andq %rsi, %rdi - 0xc4, 0xc1, 0x05, 0x74, 0xf5, //0x000015fd vpcmpeqb %ymm13, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xc6, //0x00001602 vpmovmskb %ymm6, %eax - 0xc4, 0xc1, 0x0d, 0x74, 0xf5, //0x00001606 vpcmpeqb %ymm13, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xde, //0x0000160b vpmovmskb %ymm6, %ebx - 0x48, 0xc1, 0xe3, 0x20, //0x0000160f shlq $32, %rbx - 0x48, 0x09, 0xd8, //0x00001613 orq %rbx, %rax - 0x48, 0x21, 0xf0, //0x00001616 andq %rsi, %rax - 0x0f, 0x84, 0xe4, 0xfe, 0xff, 0xff, //0x00001619 je LBB0_315 - 0x90, //0x0000161f .p2align 4, 0x90 - //0x00001620 LBB0_321 - 0x48, 0x8d, 0x58, 0xff, //0x00001620 leaq $-1(%rax), %rbx - 0x48, 0x89, 0xde, //0x00001624 movq %rbx, %rsi - 0x48, 0x21, 0xfe, //0x00001627 andq %rdi, %rsi - 0xf3, 0x48, 0x0f, 0xb8, 0xf6, //0x0000162a popcntq %rsi, %rsi - 0x4c, 0x01, 0xf6, //0x0000162f addq %r14, %rsi - 0x48, 0x39, 0xd6, //0x00001632 cmpq %rdx, %rsi - 0x0f, 0x86, 0x3a, 0x01, 0x00, 0x00, //0x00001635 jbe LBB0_339 - 0x48, 0x83, 0xc2, 0x01, //0x0000163b addq $1, %rdx - 0x48, 0x21, 0xd8, //0x0000163f andq %rbx, %rax - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00001642 jne LBB0_321 - 0xe9, 0xb6, 0xfe, 0xff, 0xff, //0x00001648 jmp LBB0_315 - //0x0000164d LBB0_323 - 0x4d, 0x85, 0xc9, //0x0000164d testq %r9, %r9 - 0x0f, 0x8e, 0x25, 0x08, 0x00, 0x00, //0x00001650 jle LBB0_382 - 0xc5, 0xc9, 0xef, 0xf6, //0x00001656 vpxor %xmm6, %xmm6, %xmm6 - 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x60, //0x0000165a vmovdqu %ymm6, $96(%rsp) - 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x00001660 vmovdqu %ymm6, $64(%rsp) - 0x44, 0x89, 0xe0, //0x00001666 movl %r12d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00001669 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x0000166e cmpl $4033, %eax - 0x0f, 0x82, 0x28, 0x00, 0x00, 0x00, //0x00001673 jb LBB0_327 - 0x49, 0x83, 0xf9, 0x20, //0x00001679 cmpq $32, %r9 - 0x0f, 0x82, 0x28, 0x00, 0x00, 0x00, //0x0000167d jb LBB0_328 - 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x24, //0x00001683 vmovdqu (%r12), %ymm6 - 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x00001689 vmovdqu %ymm6, $64(%rsp) - 0x49, 0x83, 0xc4, 0x20, //0x0000168f addq $32, %r12 - 0x49, 0x8d, 0x79, 0xe0, //0x00001693 leaq $-32(%r9), %rdi - 0x4c, 0x8d, 0x44, 0x24, 0x60, //0x00001697 leaq $96(%rsp), %r8 - 0xe9, 0x12, 0x00, 0x00, 0x00, //0x0000169c jmp LBB0_329 - //0x000016a1 LBB0_327 - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x000016a1 movq $40(%rsp), %r13 - 0xe9, 0x79, 0xfe, 0xff, 0xff, //0x000016a6 jmp LBB0_317 - //0x000016ab LBB0_328 - 0x4c, 0x8d, 0x44, 0x24, 0x40, //0x000016ab leaq $64(%rsp), %r8 - 0x4c, 0x89, 0xcf, //0x000016b0 movq %r9, %rdi - //0x000016b3 LBB0_329 - 0x48, 0x83, 0xff, 0x10, //0x000016b3 cmpq $16, %rdi - 0x0f, 0x82, 0x4d, 0x00, 0x00, 0x00, //0x000016b7 jb LBB0_330 - 0xc4, 0xc1, 0x7a, 0x6f, 0x34, 0x24, //0x000016bd vmovdqu (%r12), %xmm6 - 0xc4, 0xc1, 0x7a, 0x7f, 0x30, //0x000016c3 vmovdqu %xmm6, (%r8) - 0x49, 0x83, 0xc4, 0x10, //0x000016c8 addq $16, %r12 - 0x49, 0x83, 0xc0, 0x10, //0x000016cc addq $16, %r8 - 0x48, 0x83, 0xc7, 0xf0, //0x000016d0 addq $-16, %rdi - 0x48, 0x83, 0xff, 0x08, //0x000016d4 cmpq $8, %rdi - 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x000016d8 jae LBB0_337 - //0x000016de LBB0_331 - 0x48, 0x83, 0xff, 0x04, //0x000016de cmpq $4, %rdi - 0x0f, 0x8c, 0x49, 0x00, 0x00, 0x00, //0x000016e2 jl LBB0_332 - //0x000016e8 LBB0_338 - 0x41, 0x8b, 0x04, 0x24, //0x000016e8 movl (%r12), %eax - 0x41, 0x89, 0x00, //0x000016ec movl %eax, (%r8) - 0x49, 0x83, 0xc4, 0x04, //0x000016ef addq $4, %r12 - 0x49, 0x83, 0xc0, 0x04, //0x000016f3 addq $4, %r8 - 0x48, 0x83, 0xc7, 0xfc, //0x000016f7 addq $-4, %rdi - 0x48, 0x83, 0xff, 0x02, //0x000016fb cmpq $2, %rdi - 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x000016ff jae LBB0_333 - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001705 jmp LBB0_334 - //0x0000170a LBB0_330 - 0x48, 0x83, 0xff, 0x08, //0x0000170a cmpq $8, %rdi - 0x0f, 0x82, 0xca, 0xff, 0xff, 0xff, //0x0000170e jb LBB0_331 - //0x00001714 LBB0_337 - 0x49, 0x8b, 0x04, 0x24, //0x00001714 movq (%r12), %rax - 0x49, 0x89, 0x00, //0x00001718 movq %rax, (%r8) - 0x49, 0x83, 0xc4, 0x08, //0x0000171b addq $8, %r12 - 0x49, 0x83, 0xc0, 0x08, //0x0000171f addq $8, %r8 - 0x48, 0x83, 0xc7, 0xf8, //0x00001723 addq $-8, %rdi - 0x48, 0x83, 0xff, 0x04, //0x00001727 cmpq $4, %rdi - 0x0f, 0x8d, 0xb7, 0xff, 0xff, 0xff, //0x0000172b jge LBB0_338 - //0x00001731 LBB0_332 - 0x48, 0x83, 0xff, 0x02, //0x00001731 cmpq $2, %rdi - 0x0f, 0x82, 0x15, 0x00, 0x00, 0x00, //0x00001735 jb LBB0_334 - //0x0000173b LBB0_333 - 0x41, 0x0f, 0xb7, 0x04, 0x24, //0x0000173b movzwl (%r12), %eax - 0x66, 0x41, 0x89, 0x00, //0x00001740 movw %ax, (%r8) - 0x49, 0x83, 0xc4, 0x02, //0x00001744 addq $2, %r12 - 0x49, 0x83, 0xc0, 0x02, //0x00001748 addq $2, %r8 - 0x48, 0x83, 0xc7, 0xfe, //0x0000174c addq $-2, %rdi - //0x00001750 LBB0_334 - 0x4c, 0x89, 0xe0, //0x00001750 movq %r12, %rax - 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x00001753 leaq $64(%rsp), %r12 - 0x48, 0x85, 0xff, //0x00001758 testq %rdi, %rdi - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x0000175b movq $40(%rsp), %r13 - 0x0f, 0x84, 0xbe, 0xfd, 0xff, 0xff, //0x00001760 je LBB0_317 - 0x8a, 0x00, //0x00001766 movb (%rax), %al - 0x41, 0x88, 0x00, //0x00001768 movb %al, (%r8) - 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x0000176b leaq $64(%rsp), %r12 - 0xe9, 0xaf, 0xfd, 0xff, 0xff, //0x00001770 jmp LBB0_317 - //0x00001775 LBB0_339 - 0x49, 0x8b, 0x4d, 0x00, //0x00001775 movq (%r13), %rcx - 0x48, 0x0f, 0xbc, 0xc0, //0x00001779 bsfq %rax, %rax - 0x4c, 0x29, 0xc8, //0x0000177d subq %r9, %rax - 0x4c, 0x8d, 0x34, 0x08, //0x00001780 leaq (%rax,%rcx), %r14 - 0x49, 0x83, 0xc6, 0x01, //0x00001784 addq $1, %r14 - 0x4d, 0x89, 0x30, //0x00001788 movq %r14, (%r8) - 0x49, 0x8b, 0x45, 0x00, //0x0000178b movq (%r13), %rax - 0x49, 0x39, 0xc6, //0x0000178f cmpq %rax, %r14 - 0x4c, 0x0f, 0x47, 0xf0, //0x00001792 cmovaq %rax, %r14 - //0x00001796 LBB0_340 - 0x4d, 0x89, 0x30, //0x00001796 movq %r14, (%r8) - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x00001799 movq $32(%rsp), %r11 - 0xe9, 0x93, 0xfb, 0xff, 0xff, //0x0000179e jmp LBB0_283 - //0x000017a3 LBB0_341 - 0x41, 0x0f, 0xbc, 0xca, //0x000017a3 bsfl %r10d, %ecx - 0x48, 0x01, 0xc1, //0x000017a7 addq %rax, %rcx - 0x4d, 0x8d, 0x34, 0x0f, //0x000017aa leaq (%r15,%rcx), %r14 - 0x49, 0x83, 0xc6, 0x02, //0x000017ae addq $2, %r14 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x000017b2 movq $8(%rsp), %r8 - 0x4d, 0x89, 0x30, //0x000017b7 movq %r14, (%r8) - //0x000017ba LBB0_342 - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x000017ba movq $32(%rsp), %r11 - 0x4c, 0x8b, 0x7c, 0x24, 0x18, //0x000017bf movq $24(%rsp), %r15 - 0xe9, 0x6d, 0xfb, 0xff, 0xff, //0x000017c4 jmp LBB0_283 - //0x000017c9 LBB0_343 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x000017c9 movq $-2, %rdx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x000017d0 movl $2, %esi - 0x48, 0x01, 0xf0, //0x000017d5 addq %rsi, %rax - 0x49, 0x01, 0xd7, //0x000017d8 addq %rdx, %r15 - 0x0f, 0x8e, 0x2d, 0x00, 0x00, 0x00, //0x000017db jle LBB0_255 - //0x000017e1 LBB0_344 - 0x0f, 0xb6, 0x10, //0x000017e1 movzbl (%rax), %edx - 0x80, 0xfa, 0x5c, //0x000017e4 cmpb $92, %dl - 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x000017e7 je LBB0_343 - 0x80, 0xfa, 0x22, //0x000017ed cmpb $34, %dl - 0x0f, 0x84, 0x6c, 0x04, 0x00, 0x00, //0x000017f0 je LBB0_352 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000017f6 movq $-1, %rdx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x000017fd movl $1, %esi - 0x48, 0x01, 0xf0, //0x00001802 addq %rsi, %rax - 0x49, 0x01, 0xd7, //0x00001805 addq %rdx, %r15 - 0x0f, 0x8f, 0xd3, 0xff, 0xff, 0xff, //0x00001808 jg LBB0_344 - //0x0000180e LBB0_255 - 0x4c, 0x8b, 0x7c, 0x24, 0x18, //0x0000180e movq $24(%rsp), %r15 - 0xe9, 0x1e, 0xfb, 0xff, 0xff, //0x00001813 jmp LBB0_283 - //0x00001818 LBB0_347 - 0x66, 0x0f, 0xbc, 0xca, //0x00001818 bsfw %dx, %cx - 0x44, 0x0f, 0xb7, 0xf1, //0x0000181c movzwl %cx, %r14d - 0x49, 0x29, 0xc6, //0x00001820 subq %rax, %r14 - 0x4d, 0x89, 0x30, //0x00001823 movq %r14, (%r8) - 0xe9, 0x0b, 0xfb, 0xff, 0xff, //0x00001826 jmp LBB0_283 - //0x0000182b LBB0_117 - 0x4c, 0x29, 0xe3, //0x0000182b subq %r12, %rbx - 0x48, 0x01, 0xd3, //0x0000182e addq %rdx, %rbx - 0x48, 0x39, 0xc3, //0x00001831 cmpq %rax, %rbx - 0x0f, 0x82, 0xb7, 0xee, 0xff, 0xff, //0x00001834 jb LBB0_68 - 0xe9, 0x48, 0x34, 0x00, 0x00, //0x0000183a jmp LBB0_1024 - //0x0000183f LBB0_348 - 0x4c, 0x29, 0xe1, //0x0000183f subq %r12, %rcx - 0x48, 0x01, 0xf9, //0x00001842 addq %rdi, %rcx - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00001845 movq $8(%rsp), %r8 - 0x48, 0x39, 0xc1, //0x0000184a cmpq %rax, %rcx - 0x0f, 0x82, 0x3e, 0xf4, 0xff, 0xff, //0x0000184d jb LBB0_192 - 0xe9, 0x2f, 0x34, 0x00, 0x00, //0x00001853 jmp LBB0_1024 - //0x00001858 LBB0_349 - 0x4c, 0x29, 0xe1, //0x00001858 subq %r12, %rcx - 0x48, 0x01, 0xf1, //0x0000185b addq %rsi, %rcx - 0x48, 0x39, 0xc1, //0x0000185e cmpq %rax, %rcx - 0x0f, 0x82, 0x6a, 0xfc, 0xff, 0xff, //0x00001861 jb LBB0_313 - 0xe9, 0x1b, 0x34, 0x00, 0x00, //0x00001867 jmp LBB0_1024 - //0x0000186c LBB0_350 - 0x4c, 0x29, 0xe0, //0x0000186c subq %r12, %rax - 0x48, 0x01, 0xc8, //0x0000186f addq %rcx, %rax - 0x48, 0x39, 0xd0, //0x00001872 cmpq %rdx, %rax - 0x0f, 0x82, 0xc6, 0xf5, 0xff, 0xff, //0x00001875 jb LBB0_224 - 0xe9, 0xb6, 0xfa, 0xff, 0xff, //0x0000187b jmp LBB0_283 - //0x00001880 LBB0_118 - 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00001880 movq $-1, %rsi - 0x45, 0x31, 0xc0, //0x00001887 xorl %r8d, %r8d - 0x4d, 0x89, 0xde, //0x0000188a movq %r11, %r14 - 0x48, 0x83, 0xf9, 0x20, //0x0000188d cmpq $32, %rcx - 0x0f, 0x83, 0x0d, 0xf2, 0xff, 0xff, //0x00001891 jae LBB0_77 - 0xe9, 0xe7, 0x04, 0x00, 0x00, //0x00001897 jmp LBB0_365 - //0x0000189c LBB0_119 - 0x4c, 0x89, 0x7c, 0x24, 0x18, //0x0000189c movq %r15, $24(%rsp) - 0x48, 0xc7, 0x44, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, //0x000018a1 movq $0, $64(%rsp) - 0x49, 0x8d, 0x46, 0xff, //0x000018aa leaq $-1(%r14), %rax - 0x4f, 0x8d, 0x04, 0x34, //0x000018ae leaq (%r12,%r14), %r8 - 0x49, 0x83, 0xc0, 0xff, //0x000018b2 addq $-1, %r8 - 0x48, 0x8b, 0x4c, 0x24, 0x30, //0x000018b6 movq $48(%rsp), %rcx - 0x4c, 0x8d, 0x3c, 0x0f, //0x000018bb leaq (%rdi,%rcx), %r15 - 0x49, 0x39, 0xc1, //0x000018bf cmpq %rax, %r9 - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x000018c2 movq $40(%rsp), %r13 - 0x0f, 0x8d, 0xac, 0x03, 0x00, 0x00, //0x000018c7 jge LBB0_151 - 0x48, 0x85, 0xc9, //0x000018cd testq %rcx, %rcx - 0x0f, 0x8e, 0xa3, 0x03, 0x00, 0x00, //0x000018d0 jle LBB0_151 - //0x000018d6 LBB0_121 - 0x41, 0x8a, 0x03, //0x000018d6 movb (%r11), %al - 0x3c, 0x5c, //0x000018d9 cmpb $92, %al - 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x000018db jne LBB0_126 - 0x4c, 0x89, 0xc2, //0x000018e1 movq %r8, %rdx - 0x4c, 0x29, 0xda, //0x000018e4 subq %r11, %rdx - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000018e7 movq $-1, %r13 - 0x48, 0x85, 0xd2, //0x000018ee testq %rdx, %rdx - 0x0f, 0x8e, 0xd1, 0x3c, 0x00, 0x00, //0x000018f1 jle LBB0_1124 - 0x41, 0x0f, 0xb6, 0x43, 0x01, //0x000018f7 movzbl $1(%r11), %eax - 0x48, 0x8d, 0x0d, 0xfd, 0x45, 0x00, 0x00, //0x000018fc leaq $17917(%rip), %rcx /* __UnquoteTab+0(%rip) */ - 0x8a, 0x1c, 0x08, //0x00001903 movb (%rax,%rcx), %bl - 0x80, 0xfb, 0xff, //0x00001906 cmpb $-1, %bl - 0x0f, 0x84, 0x34, 0x00, 0x00, 0x00, //0x00001909 je LBB0_128 - 0x84, 0xdb, //0x0000190f testb %bl, %bl - 0x0f, 0x84, 0x9d, 0x3c, 0x00, 0x00, //0x00001911 je LBB0_1122 - 0x88, 0x5c, 0x24, 0x40, //0x00001917 movb %bl, $64(%rsp) - 0x49, 0x83, 0xc3, 0x02, //0x0000191b addq $2, %r11 - 0xba, 0x01, 0x00, 0x00, 0x00, //0x0000191f movl $1, %edx - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x00001924 movq $40(%rsp), %r13 - 0xe9, 0x26, 0x01, 0x00, 0x00, //0x00001929 jmp LBB0_139 - //0x0000192e LBB0_126 - 0x3a, 0x07, //0x0000192e cmpb (%rdi), %al - 0x0f, 0x85, 0xa3, 0x03, 0x00, 0x00, //0x00001930 jne LBB0_358 - 0x49, 0x83, 0xc3, 0x01, //0x00001936 addq $1, %r11 - 0x48, 0x83, 0xc7, 0x01, //0x0000193a addq $1, %rdi - 0xe9, 0x82, 0x01, 0x00, 0x00, //0x0000193e jmp LBB0_149 - //0x00001943 LBB0_128 - 0x48, 0x83, 0xfa, 0x04, //0x00001943 cmpq $4, %rdx - 0x0f, 0x8c, 0x77, 0x3c, 0x00, 0x00, //0x00001947 jl LBB0_1123 - 0x49, 0x89, 0xf9, //0x0000194d movq %rdi, %r9 - 0x4d, 0x8d, 0x53, 0x02, //0x00001950 leaq $2(%r11), %r10 - 0x41, 0x8b, 0x73, 0x02, //0x00001954 movl $2(%r11), %esi - 0x89, 0xf7, //0x00001958 movl %esi, %edi - 0xf7, 0xd7, //0x0000195a notl %edi - 0x8d, 0x9e, 0xd0, 0xcf, 0xcf, 0xcf, //0x0000195c leal $-808464432(%rsi), %ebx - 0x81, 0xe7, 0x80, 0x80, 0x80, 0x80, //0x00001962 andl $-2139062144, %edi - 0x49, 0xc7, 0xc5, 0xfe, 0xff, 0xff, 0xff, //0x00001968 movq $-2, %r13 - 0x85, 0xdf, //0x0000196f testl %ebx, %edi - 0x0f, 0x85, 0x0e, 0x3c, 0x00, 0x00, //0x00001971 jne LBB0_1134 - 0x8d, 0x9e, 0x19, 0x19, 0x19, 0x19, //0x00001977 leal $421075225(%rsi), %ebx - 0x09, 0xf3, //0x0000197d orl %esi, %ebx - 0xf7, 0xc3, 0x80, 0x80, 0x80, 0x80, //0x0000197f testl $-2139062144, %ebx - 0x0f, 0x85, 0xfa, 0x3b, 0x00, 0x00, //0x00001985 jne LBB0_1134 - 0x89, 0xf3, //0x0000198b movl %esi, %ebx - 0x81, 0xe3, 0x7f, 0x7f, 0x7f, 0x7f, //0x0000198d andl $2139062143, %ebx - 0xb8, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001993 movl $-1061109568, %eax - 0x29, 0xd8, //0x00001998 subl %ebx, %eax - 0x8d, 0x8b, 0x46, 0x46, 0x46, 0x46, //0x0000199a leal $1179010630(%rbx), %ecx - 0x21, 0xf8, //0x000019a0 andl %edi, %eax - 0x85, 0xc8, //0x000019a2 testl %ecx, %eax - 0x0f, 0x85, 0xdb, 0x3b, 0x00, 0x00, //0x000019a4 jne LBB0_1134 - 0xb8, 0xe0, 0xe0, 0xe0, 0xe0, //0x000019aa movl $-522133280, %eax - 0x29, 0xd8, //0x000019af subl %ebx, %eax - 0x81, 0xc3, 0x39, 0x39, 0x39, 0x39, //0x000019b1 addl $960051513, %ebx - 0x21, 0xc7, //0x000019b7 andl %eax, %edi - 0x85, 0xdf, //0x000019b9 testl %ebx, %edi - 0x0f, 0x85, 0x0a, 0x3c, 0x00, 0x00, //0x000019bb jne LBB0_1125 - 0x0f, 0xce, //0x000019c1 bswapl %esi - 0x89, 0xf0, //0x000019c3 movl %esi, %eax - 0xc1, 0xe8, 0x04, //0x000019c5 shrl $4, %eax - 0xf7, 0xd0, //0x000019c8 notl %eax - 0x25, 0x01, 0x01, 0x01, 0x01, //0x000019ca andl $16843009, %eax - 0x8d, 0x04, 0xc0, //0x000019cf leal (%rax,%rax,8), %eax - 0x81, 0xe6, 0x0f, 0x0f, 0x0f, 0x0f, //0x000019d2 andl $252645135, %esi - 0x01, 0xc6, //0x000019d8 addl %eax, %esi - 0x89, 0xf3, //0x000019da movl %esi, %ebx - 0xc1, 0xeb, 0x04, //0x000019dc shrl $4, %ebx - 0x09, 0xf3, //0x000019df orl %esi, %ebx - 0x89, 0xde, //0x000019e1 movl %ebx, %esi - 0xc1, 0xee, 0x08, //0x000019e3 shrl $8, %esi - 0x81, 0xe6, 0x00, 0xff, 0x00, 0x00, //0x000019e6 andl $65280, %esi - 0x0f, 0xb6, 0xfb, //0x000019ec movzbl %bl, %edi - 0x09, 0xf7, //0x000019ef orl %esi, %edi - 0x4d, 0x8d, 0x53, 0x06, //0x000019f1 leaq $6(%r11), %r10 - 0x83, 0xff, 0x7f, //0x000019f5 cmpl $127, %edi - 0x0f, 0x86, 0xde, 0x00, 0x00, 0x00, //0x000019f8 jbe LBB0_177 - 0x81, 0xff, 0xff, 0x07, 0x00, 0x00, //0x000019fe cmpl $2047, %edi - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x00001a04 movq $40(%rsp), %r13 - 0x0f, 0x86, 0xde, 0x00, 0x00, 0x00, //0x00001a09 jbe LBB0_178 - 0x89, 0xd8, //0x00001a0f movl %ebx, %eax - 0x25, 0x00, 0x00, 0xf8, 0x00, //0x00001a11 andl $16252928, %eax - 0x3d, 0x00, 0x00, 0xd8, 0x00, //0x00001a16 cmpl $14155776, %eax - 0x0f, 0x84, 0xee, 0x00, 0x00, 0x00, //0x00001a1b je LBB0_179 - 0xc1, 0xee, 0x0c, //0x00001a21 shrl $12, %esi - 0x40, 0x80, 0xce, 0xe0, //0x00001a24 orb $-32, %sil - 0x40, 0x88, 0x74, 0x24, 0x40, //0x00001a28 movb %sil, $64(%rsp) - 0xc1, 0xef, 0x06, //0x00001a2d shrl $6, %edi - 0x40, 0x80, 0xe7, 0x3f, //0x00001a30 andb $63, %dil - 0x40, 0x80, 0xcf, 0x80, //0x00001a34 orb $-128, %dil - 0x40, 0x88, 0x7c, 0x24, 0x41, //0x00001a38 movb %dil, $65(%rsp) - 0x80, 0xe3, 0x3f, //0x00001a3d andb $63, %bl - 0x80, 0xcb, 0x80, //0x00001a40 orb $-128, %bl - 0x88, 0x5c, 0x24, 0x42, //0x00001a43 movb %bl, $66(%rsp) - 0xba, 0x03, 0x00, 0x00, 0x00, //0x00001a47 movl $3, %edx - 0x89, 0xf3, //0x00001a4c movl %esi, %ebx - //0x00001a4e LBB0_137 - 0x4d, 0x89, 0xd3, //0x00001a4e movq %r10, %r11 - //0x00001a51 LBB0_138 - 0x4c, 0x89, 0xcf, //0x00001a51 movq %r9, %rdi - //0x00001a54 LBB0_139 - 0x48, 0x8d, 0x04, 0x14, //0x00001a54 leaq (%rsp,%rdx), %rax - 0x48, 0x83, 0xc0, 0x40, //0x00001a58 addq $64, %rax - 0x4c, 0x39, 0xff, //0x00001a5c cmpq %r15, %rdi - 0x0f, 0x83, 0x52, 0x00, 0x00, 0x00, //0x00001a5f jae LBB0_147 - 0x48, 0x8d, 0x4c, 0x24, 0x40, //0x00001a65 leaq $64(%rsp), %rcx - 0x48, 0x39, 0xc8, //0x00001a6a cmpq %rcx, %rax - 0x0f, 0x86, 0x44, 0x00, 0x00, 0x00, //0x00001a6d jbe LBB0_147 - 0x38, 0x1f, //0x00001a73 cmpb %bl, (%rdi) - 0x0f, 0x85, 0x3c, 0x00, 0x00, 0x00, //0x00001a75 jne LBB0_147 - 0x48, 0x83, 0xc7, 0x01, //0x00001a7b addq $1, %rdi - 0x48, 0x8d, 0x74, 0x24, 0x41, //0x00001a7f leaq $65(%rsp), %rsi - //0x00001a84 LBB0_143 - 0x48, 0x89, 0xf2, //0x00001a84 movq %rsi, %rdx - 0x4c, 0x39, 0xff, //0x00001a87 cmpq %r15, %rdi - 0x0f, 0x83, 0x2c, 0x00, 0x00, 0x00, //0x00001a8a jae LBB0_148 - 0x48, 0x39, 0xc2, //0x00001a90 cmpq %rax, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001a93 jae LBB0_148 - 0x0f, 0xb6, 0x0f, //0x00001a99 movzbl (%rdi), %ecx - 0x48, 0x89, 0xfb, //0x00001a9c movq %rdi, %rbx - 0x48, 0x83, 0xc7, 0x01, //0x00001a9f addq $1, %rdi - 0x48, 0x8d, 0x72, 0x01, //0x00001aa3 leaq $1(%rdx), %rsi - 0x3a, 0x0a, //0x00001aa7 cmpb (%rdx), %cl - 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00001aa9 je LBB0_143 - 0x48, 0x89, 0xdf, //0x00001aaf movq %rbx, %rdi - 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00001ab2 jmp LBB0_148 - //0x00001ab7 LBB0_147 - 0x48, 0x8d, 0x54, 0x24, 0x40, //0x00001ab7 leaq $64(%rsp), %rdx - //0x00001abc LBB0_148 - 0x48, 0x39, 0xc2, //0x00001abc cmpq %rax, %rdx - 0x0f, 0x85, 0x14, 0x02, 0x00, 0x00, //0x00001abf jne LBB0_358 - //0x00001ac5 LBB0_149 - 0x4d, 0x39, 0xc3, //0x00001ac5 cmpq %r8, %r11 - 0x0f, 0x83, 0xab, 0x01, 0x00, 0x00, //0x00001ac8 jae LBB0_151 - 0x4c, 0x39, 0xff, //0x00001ace cmpq %r15, %rdi - 0x0f, 0x82, 0xff, 0xfd, 0xff, 0xff, //0x00001ad1 jb LBB0_121 - 0xe9, 0x9d, 0x01, 0x00, 0x00, //0x00001ad7 jmp LBB0_151 - //0x00001adc LBB0_177 - 0x88, 0x5c, 0x24, 0x40, //0x00001adc movb %bl, $64(%rsp) - 0xba, 0x01, 0x00, 0x00, 0x00, //0x00001ae0 movl $1, %edx - 0x4d, 0x89, 0xd3, //0x00001ae5 movq %r10, %r11 - 0xe9, 0x49, 0x01, 0x00, 0x00, //0x00001ae8 jmp LBB0_189 - //0x00001aed LBB0_178 - 0xc1, 0xef, 0x06, //0x00001aed shrl $6, %edi - 0x40, 0x80, 0xcf, 0xc0, //0x00001af0 orb $-64, %dil - 0x40, 0x88, 0x7c, 0x24, 0x40, //0x00001af4 movb %dil, $64(%rsp) - 0x80, 0xe3, 0x3f, //0x00001af9 andb $63, %bl - 0x80, 0xcb, 0x80, //0x00001afc orb $-128, %bl - 0x88, 0x5c, 0x24, 0x41, //0x00001aff movb %bl, $65(%rsp) - 0xba, 0x02, 0x00, 0x00, 0x00, //0x00001b03 movl $2, %edx - 0x89, 0xfb, //0x00001b08 movl %edi, %ebx - 0xe9, 0x3f, 0xff, 0xff, 0xff, //0x00001b0a jmp LBB0_137 - //0x00001b0f LBB0_179 - 0x49, 0xc7, 0xc5, 0xfc, 0xff, 0xff, 0xff, //0x00001b0f movq $-4, %r13 - 0x48, 0x83, 0xfa, 0x06, //0x00001b16 cmpq $6, %rdx - 0x0f, 0x8c, 0xab, 0x3a, 0x00, 0x00, //0x00001b1a jl LBB0_1125 - 0x81, 0xff, 0xff, 0xdb, 0x00, 0x00, //0x00001b20 cmpl $56319, %edi - 0x0f, 0x87, 0x9f, 0x3a, 0x00, 0x00, //0x00001b26 ja LBB0_1125 - 0x41, 0x80, 0x3a, 0x5c, //0x00001b2c cmpb $92, (%r10) - 0x0f, 0x85, 0x95, 0x3a, 0x00, 0x00, //0x00001b30 jne LBB0_1125 - 0x41, 0x80, 0x7b, 0x07, 0x75, //0x00001b36 cmpb $117, $7(%r11) - 0x0f, 0x85, 0x8a, 0x3a, 0x00, 0x00, //0x00001b3b jne LBB0_1125 - 0x4c, 0x89, 0xd8, //0x00001b41 movq %r11, %rax - 0x4d, 0x8d, 0x53, 0x08, //0x00001b44 leaq $8(%r11), %r10 - 0x41, 0x8b, 0x53, 0x08, //0x00001b48 movl $8(%r11), %edx - 0x89, 0xd6, //0x00001b4c movl %edx, %esi - 0xf7, 0xd6, //0x00001b4e notl %esi - 0x8d, 0x82, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001b50 leal $-808464432(%rdx), %eax - 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x00001b56 andl $-2139062144, %esi - 0x85, 0xc6, //0x00001b5c testl %eax, %esi - 0x0f, 0x85, 0x21, 0x3a, 0x00, 0x00, //0x00001b5e jne LBB0_1134 - 0x8d, 0x82, 0x19, 0x19, 0x19, 0x19, //0x00001b64 leal $421075225(%rdx), %eax - 0x09, 0xd0, //0x00001b6a orl %edx, %eax - 0xa9, 0x80, 0x80, 0x80, 0x80, //0x00001b6c testl $-2139062144, %eax - 0x0f, 0x85, 0x0e, 0x3a, 0x00, 0x00, //0x00001b71 jne LBB0_1134 - 0x89, 0xd3, //0x00001b77 movl %edx, %ebx - 0x81, 0xe3, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001b79 andl $2139062143, %ebx - 0xb8, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001b7f movl $-1061109568, %eax - 0x29, 0xd8, //0x00001b84 subl %ebx, %eax - 0x8d, 0x8b, 0x46, 0x46, 0x46, 0x46, //0x00001b86 leal $1179010630(%rbx), %ecx - 0x21, 0xf0, //0x00001b8c andl %esi, %eax - 0x85, 0xc8, //0x00001b8e testl %ecx, %eax - 0x0f, 0x85, 0xef, 0x39, 0x00, 0x00, //0x00001b90 jne LBB0_1134 - 0xb8, 0xe0, 0xe0, 0xe0, 0xe0, //0x00001b96 movl $-522133280, %eax - 0x29, 0xd8, //0x00001b9b subl %ebx, %eax - 0x81, 0xc3, 0x39, 0x39, 0x39, 0x39, //0x00001b9d addl $960051513, %ebx - 0x21, 0xc6, //0x00001ba3 andl %eax, %esi - 0x85, 0xde, //0x00001ba5 testl %ebx, %esi - 0x0f, 0x85, 0xd8, 0x39, 0x00, 0x00, //0x00001ba7 jne LBB0_1134 - 0x0f, 0xca, //0x00001bad bswapl %edx - 0x89, 0xd0, //0x00001baf movl %edx, %eax - 0xc1, 0xe8, 0x04, //0x00001bb1 shrl $4, %eax - 0xf7, 0xd0, //0x00001bb4 notl %eax - 0x25, 0x01, 0x01, 0x01, 0x01, //0x00001bb6 andl $16843009, %eax - 0x8d, 0x04, 0xc0, //0x00001bbb leal (%rax,%rax,8), %eax - 0x81, 0xe2, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001bbe andl $252645135, %edx - 0x01, 0xc2, //0x00001bc4 addl %eax, %edx - 0x89, 0xd6, //0x00001bc6 movl %edx, %esi - 0xc1, 0xee, 0x04, //0x00001bc8 shrl $4, %esi - 0x09, 0xd6, //0x00001bcb orl %edx, %esi - 0x89, 0xf0, //0x00001bcd movl %esi, %eax - 0x25, 0x00, 0x00, 0xfc, 0x00, //0x00001bcf andl $16515072, %eax - 0x3d, 0x00, 0x00, 0xdc, 0x00, //0x00001bd4 cmpl $14417920, %eax - 0x0f, 0x85, 0xec, 0x39, 0x00, 0x00, //0x00001bd9 jne LBB0_1125 - 0x89, 0xf0, //0x00001bdf movl %esi, %eax - 0xc1, 0xe8, 0x08, //0x00001be1 shrl $8, %eax - 0x25, 0x00, 0xff, 0x00, 0x00, //0x00001be4 andl $65280, %eax - 0x40, 0x0f, 0xb6, 0xce, //0x00001be9 movzbl %sil, %ecx - 0x09, 0xc1, //0x00001bed orl %eax, %ecx - 0xc1, 0xe7, 0x0a, //0x00001bef shll $10, %edi - 0x8d, 0x04, 0x39, //0x00001bf2 leal (%rcx,%rdi), %eax - 0x01, 0xf9, //0x00001bf5 addl %edi, %ecx - 0x81, 0xc1, 0x00, 0x24, 0xa0, 0xfc, //0x00001bf7 addl $-56613888, %ecx - 0x89, 0xcb, //0x00001bfd movl %ecx, %ebx - 0xc1, 0xeb, 0x12, //0x00001bff shrl $18, %ebx - 0x80, 0xcb, 0xf0, //0x00001c02 orb $-16, %bl - 0x88, 0x5c, 0x24, 0x40, //0x00001c05 movb %bl, $64(%rsp) - 0x89, 0xca, //0x00001c09 movl %ecx, %edx - 0xc1, 0xea, 0x0c, //0x00001c0b shrl $12, %edx - 0x80, 0xe2, 0x3f, //0x00001c0e andb $63, %dl - 0x80, 0xca, 0x80, //0x00001c11 orb $-128, %dl - 0x88, 0x54, 0x24, 0x41, //0x00001c14 movb %dl, $65(%rsp) - 0xc1, 0xe9, 0x06, //0x00001c18 shrl $6, %ecx - 0x80, 0xe1, 0x3f, //0x00001c1b andb $63, %cl - 0x80, 0xc9, 0x80, //0x00001c1e orb $-128, %cl - 0x88, 0x4c, 0x24, 0x42, //0x00001c21 movb %cl, $66(%rsp) - 0x24, 0x3f, //0x00001c25 andb $63, %al - 0x0c, 0x80, //0x00001c27 orb $-128, %al - 0x88, 0x44, 0x24, 0x43, //0x00001c29 movb %al, $67(%rsp) - 0x49, 0x83, 0xc3, 0x0c, //0x00001c2d addq $12, %r11 - 0xba, 0x04, 0x00, 0x00, 0x00, //0x00001c31 movl $4, %edx - //0x00001c36 LBB0_189 - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x00001c36 movq $40(%rsp), %r13 - 0xe9, 0x11, 0xfe, 0xff, 0xff, //0x00001c3b jmp LBB0_138 - //0x00001c40 LBB0_190 - 0x4c, 0x01, 0xe3, //0x00001c40 addq %r12, %rbx - 0x48, 0x85, 0xc9, //0x00001c43 testq %rcx, %rcx - 0x0f, 0x85, 0x3e, 0xea, 0xff, 0xff, //0x00001c46 jne LBB0_61 - 0xe9, 0x70, 0xea, 0xff, 0xff, //0x00001c4c jmp LBB0_66 - //0x00001c51 LBB0_351 - 0x4c, 0x01, 0xe1, //0x00001c51 addq %r12, %rcx - 0x48, 0x85, 0xf6, //0x00001c54 testq %rsi, %rsi - 0x0f, 0x85, 0xcb, 0xef, 0xff, 0xff, //0x00001c57 jne LBB0_171 - 0xe9, 0x04, 0xf0, 0xff, 0xff, //0x00001c5d jmp LBB0_176 - //0x00001c62 LBB0_352 - 0x4c, 0x29, 0xe0, //0x00001c62 subq %r12, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00001c65 addq $1, %rax - 0x49, 0x89, 0x00, //0x00001c69 movq %rax, (%r8) - 0x49, 0x89, 0xc6, //0x00001c6c movq %rax, %r14 - 0x4c, 0x8b, 0x7c, 0x24, 0x18, //0x00001c6f movq $24(%rsp), %r15 - 0xe9, 0xbd, 0xf6, 0xff, 0xff, //0x00001c74 jmp LBB0_283 - //0x00001c79 LBB0_151 - 0x4d, 0x31, 0xc3, //0x00001c79 xorq %r8, %r11 - 0x4c, 0x31, 0xff, //0x00001c7c xorq %r15, %rdi - 0x45, 0x31, 0xc9, //0x00001c7f xorl %r9d, %r9d - 0x4c, 0x09, 0xdf, //0x00001c82 orq %r11, %rdi - 0x41, 0x0f, 0x94, 0xc1, //0x00001c85 sete %r9b - //0x00001c89 LBB0_152 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00001c89 movq $8(%rsp), %r8 - 0x4c, 0x8b, 0x7c, 0x24, 0x18, //0x00001c8e movq $24(%rsp), %r15 - 0x49, 0x8b, 0x45, 0x00, //0x00001c93 movq (%r13), %rax - 0x49, 0x39, 0xc6, //0x00001c97 cmpq %rax, %r14 - 0x0f, 0x82, 0x0e, 0xec, 0xff, 0xff, //0x00001c9a jb LBB0_113 - 0xe9, 0x6b, 0xee, 0xff, 0xff, //0x00001ca0 jmp LBB0_153 - //0x00001ca5 LBB0_353 - 0x4c, 0x01, 0xe1, //0x00001ca5 addq %r12, %rcx - 0x48, 0x85, 0xd2, //0x00001ca8 testq %rdx, %rdx - 0x0f, 0x85, 0xc7, 0xf7, 0xff, 0xff, //0x00001cab jne LBB0_306 - 0xe9, 0xf9, 0xf7, 0xff, 0xff, //0x00001cb1 jmp LBB0_311 - //0x00001cb6 LBB0_354 - 0x4c, 0x01, 0xe0, //0x00001cb6 addq %r12, %rax - 0x48, 0x85, 0xf6, //0x00001cb9 testq %rsi, %rsi - 0x0f, 0x85, 0x26, 0xf1, 0xff, 0xff, //0x00001cbc jne LBB0_217 - 0xe9, 0x58, 0xf1, 0xff, 0xff, //0x00001cc2 jmp LBB0_222 - //0x00001cc7 LBB0_355 - 0x4d, 0x01, 0xe6, //0x00001cc7 addq %r12, %r14 - 0x48, 0x83, 0xf9, 0x10, //0x00001cca cmpq $16, %rcx - 0x0f, 0x83, 0x0e, 0xf2, 0xff, 0xff, //0x00001cce jae LBB0_231 - 0xe9, 0x4e, 0xf2, 0xff, 0xff, //0x00001cd4 jmp LBB0_234 - //0x00001cd9 LBB0_358 - 0x45, 0x31, 0xc9, //0x00001cd9 xorl %r9d, %r9d - 0xe9, 0xa8, 0xff, 0xff, 0xff, //0x00001cdc jmp LBB0_152 - //0x00001ce1 LBB0_356 - 0x4d, 0x29, 0xe6, //0x00001ce1 subq %r12, %r14 - 0x49, 0x01, 0xc6, //0x00001ce4 addq %rax, %r14 - //0x00001ce7 LBB0_357 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00001ce7 movq $8(%rsp), %r8 - 0x4d, 0x89, 0x30, //0x00001cec movq %r14, (%r8) - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x00001cef movq $40(%rsp), %r13 - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x00001cf4 movq $32(%rsp), %r11 - 0xe9, 0x38, 0xf6, 0xff, 0xff, //0x00001cf9 jmp LBB0_283 - //0x00001cfe LBB0_359 - 0x4b, 0x8d, 0x04, 0x34, //0x00001cfe leaq (%r12,%r14), %rax - 0xe9, 0x64, 0xf3, 0xff, 0xff, //0x00001d02 jmp LBB0_254 - //0x00001d07 LBB0_360 - 0x49, 0x89, 0xf2, //0x00001d07 movq %rsi, %r10 - 0x49, 0x89, 0xfb, //0x00001d0a movq %rdi, %r11 - 0x4c, 0x89, 0xfa, //0x00001d0d movq %r15, %rdx - 0x48, 0x83, 0xfe, 0xff, //0x00001d10 cmpq $-1, %rsi - 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x00001d14 jne LBB0_363 - 0x4c, 0x89, 0xf7, //0x00001d1a movq %r14, %rdi - 0x4c, 0x29, 0xe7, //0x00001d1d subq %r12, %rdi - 0x49, 0x0f, 0xbc, 0xf5, //0x00001d20 bsfq %r13, %rsi - 0x48, 0x01, 0xfe, //0x00001d24 addq %rdi, %rsi - 0xe9, 0x06, 0x00, 0x00, 0x00, //0x00001d27 jmp LBB0_363 - //0x00001d2c LBB0_362 - 0x49, 0x89, 0xfb, //0x00001d2c movq %rdi, %r11 - 0x4c, 0x89, 0xfa, //0x00001d2f movq %r15, %rdx - //0x00001d32 LBB0_363 - 0x45, 0x89, 0xc2, //0x00001d32 movl %r8d, %r10d - 0x41, 0xf7, 0xd2, //0x00001d35 notl %r10d - 0x45, 0x21, 0xea, //0x00001d38 andl %r13d, %r10d - 0x43, 0x8d, 0x3c, 0x12, //0x00001d3b leal (%r10,%r10), %edi - 0x47, 0x8d, 0x3c, 0x50, //0x00001d3f leal (%r8,%r10,2), %r15d - 0xf7, 0xd7, //0x00001d43 notl %edi - 0x44, 0x21, 0xef, //0x00001d45 andl %r13d, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001d48 andl $-1431655766, %edi - 0x45, 0x31, 0xc0, //0x00001d4e xorl %r8d, %r8d - 0x44, 0x01, 0xd7, //0x00001d51 addl %r10d, %edi - 0x41, 0x0f, 0x92, 0xc0, //0x00001d54 setb %r8b - 0x01, 0xff, //0x00001d58 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00001d5a xorl $1431655765, %edi - 0x44, 0x21, 0xff, //0x00001d60 andl %r15d, %edi - 0xf7, 0xd7, //0x00001d63 notl %edi - 0x21, 0xf8, //0x00001d65 andl %edi, %eax - 0x49, 0x89, 0xd7, //0x00001d67 movq %rdx, %r15 - 0x4c, 0x89, 0xdf, //0x00001d6a movq %r11, %rdi - 0x4c, 0x8b, 0x5c, 0x24, 0x38, //0x00001d6d movq $56(%rsp), %r11 - 0x48, 0x85, 0xc0, //0x00001d72 testq %rax, %rax - 0x0f, 0x85, 0x5e, 0xed, 0xff, 0xff, //0x00001d75 jne LBB0_80 - //0x00001d7b LBB0_364 - 0x49, 0x83, 0xc6, 0x20, //0x00001d7b addq $32, %r14 - 0x48, 0x83, 0xc1, 0xe0, //0x00001d7f addq $-32, %rcx - //0x00001d83 LBB0_365 - 0x48, 0x89, 0xfa, //0x00001d83 movq %rdi, %rdx - 0x4d, 0x85, 0xc0, //0x00001d86 testq %r8, %r8 - 0x0f, 0x85, 0xb4, 0x00, 0x00, 0x00, //0x00001d89 jne LBB0_380 - 0x4d, 0x89, 0xe2, //0x00001d8f movq %r12, %r10 - 0x49, 0xf7, 0xd2, //0x00001d92 notq %r10 - 0x49, 0x89, 0xf0, //0x00001d95 movq %rsi, %r8 - 0x48, 0x85, 0xc9, //0x00001d98 testq %rcx, %rcx - 0x0f, 0x84, 0x7a, 0x00, 0x00, 0x00, //0x00001d9b je LBB0_378 - //0x00001da1 LBB0_367 - 0x49, 0x83, 0xc2, 0x01, //0x00001da1 addq $1, %r10 - //0x00001da5 LBB0_368 - 0x31, 0xff, //0x00001da5 xorl %edi, %edi - //0x00001da7 LBB0_369 - 0x41, 0x0f, 0xb6, 0x04, 0x3e, //0x00001da7 movzbl (%r14,%rdi), %eax - 0x3c, 0x22, //0x00001dac cmpb $34, %al - 0x0f, 0x84, 0x60, 0x00, 0x00, 0x00, //0x00001dae je LBB0_377 - 0x3c, 0x5c, //0x00001db4 cmpb $92, %al - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00001db6 je LBB0_374 - 0x48, 0x83, 0xc7, 0x01, //0x00001dbc addq $1, %rdi - 0x48, 0x39, 0xf9, //0x00001dc0 cmpq %rdi, %rcx - 0x0f, 0x85, 0xde, 0xff, 0xff, 0xff, //0x00001dc3 jne LBB0_369 - 0xe9, 0x5d, 0x00, 0x00, 0x00, //0x00001dc9 jmp LBB0_372 - //0x00001dce LBB0_374 - 0x48, 0x8d, 0x41, 0xff, //0x00001dce leaq $-1(%rcx), %rax - 0x48, 0x39, 0xf8, //0x00001dd2 cmpq %rdi, %rax - 0x0f, 0x84, 0x40, 0x38, 0x00, 0x00, //0x00001dd5 je LBB0_376 - 0x4b, 0x8d, 0x04, 0x32, //0x00001ddb leaq (%r10,%r14), %rax - 0x48, 0x01, 0xf8, //0x00001ddf addq %rdi, %rax - 0x49, 0x83, 0xf8, 0xff, //0x00001de2 cmpq $-1, %r8 - 0x48, 0x0f, 0x44, 0xf0, //0x00001de6 cmoveq %rax, %rsi - 0x4c, 0x0f, 0x44, 0xc0, //0x00001dea cmoveq %rax, %r8 - 0x49, 0x01, 0xfe, //0x00001dee addq %rdi, %r14 - 0x49, 0x83, 0xc6, 0x02, //0x00001df1 addq $2, %r14 - 0x48, 0x89, 0xc8, //0x00001df5 movq %rcx, %rax - 0x48, 0x29, 0xf8, //0x00001df8 subq %rdi, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00001dfb addq $-2, %rax - 0x48, 0x83, 0xc1, 0xfe, //0x00001dff addq $-2, %rcx - 0x48, 0x39, 0xf9, //0x00001e03 cmpq %rdi, %rcx - 0x48, 0x89, 0xc1, //0x00001e06 movq %rax, %rcx - 0x0f, 0x85, 0x96, 0xff, 0xff, 0xff, //0x00001e09 jne LBB0_368 - 0xe9, 0x07, 0x38, 0x00, 0x00, //0x00001e0f jmp LBB0_376 - //0x00001e14 LBB0_377 - 0x49, 0x01, 0xfe, //0x00001e14 addq %rdi, %r14 - 0x49, 0x83, 0xc6, 0x01, //0x00001e17 addq $1, %r14 - //0x00001e1b LBB0_378 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00001e1b movq $8(%rsp), %r8 - 0x48, 0x89, 0xd7, //0x00001e20 movq %rdx, %rdi - //0x00001e23 LBB0_379 - 0x4d, 0x29, 0xe6, //0x00001e23 subq %r12, %r14 - 0xe9, 0x31, 0xea, 0xff, 0xff, //0x00001e26 jmp LBB0_85 - //0x00001e2b LBB0_372 - 0x3c, 0x22, //0x00001e2b cmpb $34, %al - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00001e2d movq $8(%rsp), %r8 - 0x0f, 0x85, 0xd7, 0x35, 0x00, 0x00, //0x00001e32 jne LBB0_1102 - 0x48, 0x89, 0xd7, //0x00001e38 movq %rdx, %rdi - 0x49, 0x01, 0xce, //0x00001e3b addq %rcx, %r14 - 0xe9, 0xe0, 0xff, 0xff, 0xff, //0x00001e3e jmp LBB0_379 - //0x00001e43 LBB0_380 - 0x48, 0x85, 0xc9, //0x00001e43 testq %rcx, %rcx - 0x0f, 0x84, 0xcf, 0x37, 0x00, 0x00, //0x00001e46 je LBB0_376 - 0x4d, 0x89, 0xe2, //0x00001e4c movq %r12, %r10 - 0x49, 0xf7, 0xd2, //0x00001e4f notq %r10 - 0x4b, 0x8d, 0x04, 0x16, //0x00001e52 leaq (%r14,%r10), %rax - 0x48, 0x83, 0xfe, 0xff, //0x00001e56 cmpq $-1, %rsi - 0x49, 0x89, 0xf0, //0x00001e5a movq %rsi, %r8 - 0x48, 0x0f, 0x44, 0xf0, //0x00001e5d cmoveq %rax, %rsi - 0x4c, 0x0f, 0x44, 0xc0, //0x00001e61 cmoveq %rax, %r8 - 0x49, 0x83, 0xc6, 0x01, //0x00001e65 addq $1, %r14 - 0x48, 0x83, 0xc1, 0xff, //0x00001e69 addq $-1, %rcx - 0x48, 0x85, 0xc9, //0x00001e6d testq %rcx, %rcx - 0x0f, 0x85, 0x2b, 0xff, 0xff, 0xff, //0x00001e70 jne LBB0_367 - 0xe9, 0xa0, 0xff, 0xff, 0xff, //0x00001e76 jmp LBB0_378 - //0x00001e7b LBB0_382 - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x00001e7b movq $40(%rsp), %r13 - 0x4d, 0x8b, 0x75, 0x00, //0x00001e80 movq (%r13), %r14 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00001e84 movq $8(%rsp), %r8 - 0xe9, 0x08, 0xf9, 0xff, 0xff, //0x00001e89 jmp LBB0_340 - //0x00001e8e LBB0_383 - 0x49, 0x8d, 0x40, 0xff, //0x00001e8e leaq $-1(%r8), %rax - 0x4c, 0x39, 0xf8, //0x00001e92 cmpq %r15, %rax - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001e95 jne LBB0_385 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00001e9b movq $8(%rsp), %r8 - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x00001ea0 movq $40(%rsp), %r13 - 0xe9, 0x10, 0xf9, 0xff, 0xff, //0x00001ea5 jmp LBB0_342 - //0x00001eaa LBB0_385 - 0x4b, 0x8d, 0x04, 0x0f, //0x00001eaa leaq (%r15,%r9), %rax - 0x48, 0x83, 0xc0, 0x02, //0x00001eae addq $2, %rax - 0x4d, 0x29, 0xf8, //0x00001eb2 subq %r15, %r8 - 0x49, 0x83, 0xc0, 0xfe, //0x00001eb5 addq $-2, %r8 - 0x4d, 0x89, 0xc7, //0x00001eb9 movq %r8, %r15 - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x00001ebc movq $40(%rsp), %r13 - 0xe9, 0xa5, 0xf1, 0xff, 0xff, //0x00001ec1 jmp LBB0_254 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001ec6 .p2align 4, 0x90 - //0x00001ed0 LBB0_386 - 0x80, 0xf9, 0x5b, //0x00001ed0 cmpb $91, %cl - 0x0f, 0x85, 0xae, 0x2d, 0x00, 0x00, //0x00001ed3 jne LBB0_1024 - 0x49, 0x8b, 0x47, 0x08, //0x00001ed9 movq $8(%r15), %rax - 0x4c, 0x8b, 0x08, //0x00001edd movq (%rax), %r9 - 0x4d, 0x85, 0xc9, //0x00001ee0 testq %r9, %r9 - 0x0f, 0x88, 0xf2, 0x2b, 0x00, 0x00, //0x00001ee3 js LBB0_630 - 0x49, 0x8b, 0x4d, 0x00, //0x00001ee9 movq (%r13), %rcx - 0x49, 0x39, 0xce, //0x00001eed cmpq %rcx, %r14 - 0x0f, 0x83, 0x2a, 0x00, 0x00, 0x00, //0x00001ef0 jae LBB0_393 - 0x43, 0x8a, 0x04, 0x34, //0x00001ef6 movb (%r12,%r14), %al - 0x3c, 0x0d, //0x00001efa cmpb $13, %al - 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x00001efc je LBB0_393 - 0x3c, 0x20, //0x00001f02 cmpb $32, %al - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001f04 je LBB0_393 - 0x04, 0xf7, //0x00001f0a addb $-9, %al - 0x3c, 0x01, //0x00001f0c cmpb $1, %al - 0x0f, 0x86, 0x0c, 0x00, 0x00, 0x00, //0x00001f0e jbe LBB0_393 - 0x4c, 0x89, 0xf2, //0x00001f14 movq %r14, %rdx - 0xe9, 0x6d, 0x01, 0x00, 0x00, //0x00001f17 jmp LBB0_419 - 0x90, 0x90, 0x90, 0x90, //0x00001f1c .p2align 4, 0x90 - //0x00001f20 LBB0_393 - 0x49, 0x8d, 0x56, 0x01, //0x00001f20 leaq $1(%r14), %rdx - 0x48, 0x39, 0xca, //0x00001f24 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001f27 jae LBB0_397 - 0x41, 0x8a, 0x04, 0x14, //0x00001f2d movb (%r12,%rdx), %al - 0x3c, 0x0d, //0x00001f31 cmpb $13, %al - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00001f33 je LBB0_397 - 0x3c, 0x20, //0x00001f39 cmpb $32, %al - 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x00001f3b je LBB0_397 - 0x04, 0xf7, //0x00001f41 addb $-9, %al - 0x3c, 0x01, //0x00001f43 cmpb $1, %al - 0x0f, 0x87, 0x3e, 0x01, 0x00, 0x00, //0x00001f45 ja LBB0_419 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001f4b .p2align 4, 0x90 - //0x00001f50 LBB0_397 - 0x49, 0x8d, 0x56, 0x02, //0x00001f50 leaq $2(%r14), %rdx - 0x48, 0x39, 0xca, //0x00001f54 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001f57 jae LBB0_401 - 0x41, 0x8a, 0x04, 0x14, //0x00001f5d movb (%r12,%rdx), %al - 0x3c, 0x0d, //0x00001f61 cmpb $13, %al - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00001f63 je LBB0_401 - 0x3c, 0x20, //0x00001f69 cmpb $32, %al - 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x00001f6b je LBB0_401 - 0x04, 0xf7, //0x00001f71 addb $-9, %al - 0x3c, 0x01, //0x00001f73 cmpb $1, %al - 0x0f, 0x87, 0x0e, 0x01, 0x00, 0x00, //0x00001f75 ja LBB0_419 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001f7b .p2align 4, 0x90 - //0x00001f80 LBB0_401 - 0x49, 0x8d, 0x56, 0x03, //0x00001f80 leaq $3(%r14), %rdx - 0x48, 0x39, 0xca, //0x00001f84 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001f87 jae LBB0_405 - 0x41, 0x8a, 0x04, 0x14, //0x00001f8d movb (%r12,%rdx), %al - 0x3c, 0x0d, //0x00001f91 cmpb $13, %al - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00001f93 je LBB0_405 - 0x3c, 0x20, //0x00001f99 cmpb $32, %al - 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x00001f9b je LBB0_405 - 0x04, 0xf7, //0x00001fa1 addb $-9, %al - 0x3c, 0x01, //0x00001fa3 cmpb $1, %al - 0x0f, 0x87, 0xde, 0x00, 0x00, 0x00, //0x00001fa5 ja LBB0_419 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001fab .p2align 4, 0x90 - //0x00001fb0 LBB0_405 - 0x49, 0x8d, 0x56, 0x04, //0x00001fb0 leaq $4(%r14), %rdx - 0x48, 0x89, 0xc8, //0x00001fb4 movq %rcx, %rax - 0x48, 0x29, 0xd0, //0x00001fb7 subq %rdx, %rax - 0x0f, 0x86, 0xb0, 0x00, 0x00, 0x00, //0x00001fba jbe LBB0_417 - 0x48, 0x83, 0xf8, 0x20, //0x00001fc0 cmpq $32, %rax - 0x0f, 0x82, 0x11, 0x0e, 0x00, 0x00, //0x00001fc4 jb LBB0_595 - 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x00001fca movq $-4, %rax - 0x4c, 0x29, 0xf0, //0x00001fd1 subq %r14, %rax - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001fd4 .p2align 4, 0x90 - //0x00001fe0 LBB0_408 - 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x14, //0x00001fe0 vmovdqu (%r12,%rdx), %ymm6 - 0xc4, 0xe2, 0x7d, 0x00, 0xfe, //0x00001fe6 vpshufb %ymm6, %ymm0, %ymm7 - 0xc5, 0xcd, 0x74, 0xf7, //0x00001feb vpcmpeqb %ymm7, %ymm6, %ymm6 - 0xc5, 0xfd, 0xd7, 0xf6, //0x00001fef vpmovmskb %ymm6, %esi - 0x83, 0xfe, 0xff, //0x00001ff3 cmpl $-1, %esi - 0x0f, 0x85, 0x7c, 0x00, 0x00, 0x00, //0x00001ff6 jne LBB0_418 - 0x48, 0x83, 0xc2, 0x20, //0x00001ffc addq $32, %rdx - 0x48, 0x8d, 0x34, 0x01, //0x00002000 leaq (%rcx,%rax), %rsi - 0x48, 0x83, 0xc6, 0xe0, //0x00002004 addq $-32, %rsi - 0x48, 0x83, 0xc0, 0xe0, //0x00002008 addq $-32, %rax - 0x48, 0x83, 0xfe, 0x1f, //0x0000200c cmpq $31, %rsi - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00002010 ja LBB0_408 - 0x4c, 0x89, 0xe2, //0x00002016 movq %r12, %rdx - 0x48, 0x29, 0xc2, //0x00002019 subq %rax, %rdx - 0x48, 0x01, 0xc8, //0x0000201c addq %rcx, %rax - 0x48, 0x85, 0xc0, //0x0000201f testq %rax, %rax - 0x0f, 0x84, 0x37, 0x00, 0x00, 0x00, //0x00002022 je LBB0_416 - //0x00002028 LBB0_411 - 0x4c, 0x8d, 0x14, 0x02, //0x00002028 leaq (%rdx,%rax), %r10 - 0x31, 0xf6, //0x0000202c xorl %esi, %esi - //0x0000202e LBB0_412 - 0x0f, 0xbe, 0x1c, 0x32, //0x0000202e movsbl (%rdx,%rsi), %ebx - 0x83, 0xfb, 0x20, //0x00002032 cmpl $32, %ebx - 0x0f, 0x87, 0x78, 0x0d, 0x00, 0x00, //0x00002035 ja LBB0_593 - 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000203b movabsq $4294977024, %rdi - 0x48, 0x0f, 0xa3, 0xdf, //0x00002045 btq %rbx, %rdi - 0x0f, 0x83, 0x64, 0x0d, 0x00, 0x00, //0x00002049 jae LBB0_593 - 0x48, 0x83, 0xc6, 0x01, //0x0000204f addq $1, %rsi - 0x48, 0x39, 0xf0, //0x00002053 cmpq %rsi, %rax - 0x0f, 0x85, 0xd2, 0xff, 0xff, 0xff, //0x00002056 jne LBB0_412 - 0x4c, 0x89, 0xd2, //0x0000205c movq %r10, %rdx - //0x0000205f LBB0_416 - 0x4c, 0x29, 0xe2, //0x0000205f subq %r12, %rdx - 0x48, 0x39, 0xca, //0x00002062 cmpq %rcx, %rdx - 0x0f, 0x82, 0x1e, 0x00, 0x00, 0x00, //0x00002065 jb LBB0_419 - 0xe9, 0x2b, 0x00, 0x00, 0x00, //0x0000206b jmp LBB0_420 - //0x00002070 LBB0_417 - 0x49, 0x89, 0xd6, //0x00002070 movq %rdx, %r14 - 0xe9, 0x23, 0x00, 0x00, 0x00, //0x00002073 jmp LBB0_420 - //0x00002078 LBB0_418 - 0xf7, 0xd6, //0x00002078 notl %esi - 0x0f, 0xbc, 0xd6, //0x0000207a bsfl %esi, %edx - 0x48, 0x29, 0xc2, //0x0000207d subq %rax, %rdx - 0x48, 0x39, 0xca, //0x00002080 cmpq %rcx, %rdx - 0x0f, 0x83, 0x12, 0x00, 0x00, 0x00, //0x00002083 jae LBB0_420 - //0x00002089 LBB0_419 - 0x4c, 0x8d, 0x72, 0x01, //0x00002089 leaq $1(%rdx), %r14 - 0x4d, 0x89, 0x30, //0x0000208d movq %r14, (%r8) - 0x41, 0x80, 0x3c, 0x14, 0x5d, //0x00002090 cmpb $93, (%r12,%rdx) - 0x0f, 0x84, 0x89, 0x0f, 0x00, 0x00, //0x00002095 je LBB0_628 - //0x0000209b LBB0_420 - 0x49, 0x83, 0xc6, 0xff, //0x0000209b addq $-1, %r14 - 0x4d, 0x89, 0x30, //0x0000209f movq %r14, (%r8) - 0x4d, 0x85, 0xc9, //0x000020a2 testq %r9, %r9 - 0x0f, 0x8e, 0xd5, 0x0c, 0x00, 0x00, //0x000020a5 jle LBB0_519 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x000020ab .p2align 4, 0x90 - //0x000020b0 LBB0_421 - 0x49, 0x8b, 0x55, 0x00, //0x000020b0 movq (%r13), %rdx - 0x49, 0x39, 0xd6, //0x000020b4 cmpq %rdx, %r14 - 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x000020b7 jae LBB0_426 - 0x43, 0x8a, 0x04, 0x34, //0x000020bd movb (%r12,%r14), %al - 0x3c, 0x0d, //0x000020c1 cmpb $13, %al - 0x0f, 0x84, 0x27, 0x00, 0x00, 0x00, //0x000020c3 je LBB0_426 - 0x3c, 0x20, //0x000020c9 cmpb $32, %al - 0x0f, 0x84, 0x1f, 0x00, 0x00, 0x00, //0x000020cb je LBB0_426 - 0x04, 0xf7, //0x000020d1 addb $-9, %al - 0x3c, 0x01, //0x000020d3 cmpb $1, %al - 0x0f, 0x86, 0x15, 0x00, 0x00, 0x00, //0x000020d5 jbe LBB0_426 - 0x4c, 0x89, 0xf1, //0x000020db movq %r14, %rcx - 0xe9, 0x6e, 0x01, 0x00, 0x00, //0x000020de jmp LBB0_451 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000020e3 .p2align 4, 0x90 - //0x000020f0 LBB0_426 - 0x49, 0x8d, 0x4e, 0x01, //0x000020f0 leaq $1(%r14), %rcx - 0x48, 0x39, 0xd1, //0x000020f4 cmpq %rdx, %rcx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000020f7 jae LBB0_430 - 0x41, 0x8a, 0x04, 0x0c, //0x000020fd movb (%r12,%rcx), %al - 0x3c, 0x0d, //0x00002101 cmpb $13, %al - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00002103 je LBB0_430 - 0x3c, 0x20, //0x00002109 cmpb $32, %al - 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000210b je LBB0_430 - 0x04, 0xf7, //0x00002111 addb $-9, %al - 0x3c, 0x01, //0x00002113 cmpb $1, %al - 0x0f, 0x87, 0x36, 0x01, 0x00, 0x00, //0x00002115 ja LBB0_451 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000211b .p2align 4, 0x90 - //0x00002120 LBB0_430 - 0x49, 0x8d, 0x4e, 0x02, //0x00002120 leaq $2(%r14), %rcx - 0x48, 0x39, 0xd1, //0x00002124 cmpq %rdx, %rcx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002127 jae LBB0_434 - 0x41, 0x8a, 0x04, 0x0c, //0x0000212d movb (%r12,%rcx), %al - 0x3c, 0x0d, //0x00002131 cmpb $13, %al - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00002133 je LBB0_434 - 0x3c, 0x20, //0x00002139 cmpb $32, %al - 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000213b je LBB0_434 - 0x04, 0xf7, //0x00002141 addb $-9, %al - 0x3c, 0x01, //0x00002143 cmpb $1, %al - 0x0f, 0x87, 0x06, 0x01, 0x00, 0x00, //0x00002145 ja LBB0_451 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000214b .p2align 4, 0x90 - //0x00002150 LBB0_434 - 0x49, 0x8d, 0x4e, 0x03, //0x00002150 leaq $3(%r14), %rcx - 0x48, 0x39, 0xd1, //0x00002154 cmpq %rdx, %rcx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002157 jae LBB0_438 - 0x41, 0x8a, 0x04, 0x0c, //0x0000215d movb (%r12,%rcx), %al - 0x3c, 0x0d, //0x00002161 cmpb $13, %al - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00002163 je LBB0_438 - 0x3c, 0x20, //0x00002169 cmpb $32, %al - 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000216b je LBB0_438 - 0x04, 0xf7, //0x00002171 addb $-9, %al - 0x3c, 0x01, //0x00002173 cmpb $1, %al - 0x0f, 0x87, 0xd6, 0x00, 0x00, 0x00, //0x00002175 ja LBB0_451 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000217b .p2align 4, 0x90 - //0x00002180 LBB0_438 - 0x49, 0x8d, 0x4e, 0x04, //0x00002180 leaq $4(%r14), %rcx - 0x48, 0x89, 0xd0, //0x00002184 movq %rdx, %rax - 0x48, 0x29, 0xc8, //0x00002187 subq %rcx, %rax - 0x0f, 0x86, 0x30, 0x03, 0x00, 0x00, //0x0000218a jbe LBB0_486 - 0x48, 0x83, 0xf8, 0x20, //0x00002190 cmpq $32, %rax - 0x0f, 0x82, 0x51, 0x0b, 0x00, 0x00, //0x00002194 jb LBB0_583 - 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x0000219a movq $-4, %rax - 0x4c, 0x29, 0xf0, //0x000021a1 subq %r14, %rax - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000021a4 .p2align 4, 0x90 - //0x000021b0 LBB0_441 - 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x0c, //0x000021b0 vmovdqu (%r12,%rcx), %ymm6 - 0xc4, 0xe2, 0x7d, 0x00, 0xfe, //0x000021b6 vpshufb %ymm6, %ymm0, %ymm7 - 0xc5, 0xcd, 0x74, 0xf7, //0x000021bb vpcmpeqb %ymm7, %ymm6, %ymm6 - 0xc5, 0xfd, 0xd7, 0xf6, //0x000021bf vpmovmskb %ymm6, %esi - 0x83, 0xfe, 0xff, //0x000021c3 cmpl $-1, %esi - 0x0f, 0x85, 0x74, 0x00, 0x00, 0x00, //0x000021c6 jne LBB0_450 - 0x48, 0x83, 0xc1, 0x20, //0x000021cc addq $32, %rcx - 0x48, 0x8d, 0x34, 0x02, //0x000021d0 leaq (%rdx,%rax), %rsi - 0x48, 0x83, 0xc6, 0xe0, //0x000021d4 addq $-32, %rsi - 0x48, 0x83, 0xc0, 0xe0, //0x000021d8 addq $-32, %rax - 0x48, 0x83, 0xfe, 0x1f, //0x000021dc cmpq $31, %rsi - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x000021e0 ja LBB0_441 - 0x4c, 0x89, 0xe1, //0x000021e6 movq %r12, %rcx - 0x48, 0x29, 0xc1, //0x000021e9 subq %rax, %rcx - 0x48, 0x01, 0xd0, //0x000021ec addq %rdx, %rax - 0x48, 0x85, 0xc0, //0x000021ef testq %rax, %rax - 0x0f, 0x84, 0x37, 0x00, 0x00, 0x00, //0x000021f2 je LBB0_449 - //0x000021f8 LBB0_444 - 0x4c, 0x8d, 0x14, 0x01, //0x000021f8 leaq (%rcx,%rax), %r10 - 0x31, 0xf6, //0x000021fc xorl %esi, %esi - //0x000021fe LBB0_445 - 0x0f, 0xbe, 0x1c, 0x31, //0x000021fe movsbl (%rcx,%rsi), %ebx - 0x83, 0xfb, 0x20, //0x00002202 cmpl $32, %ebx - 0x0f, 0x87, 0x21, 0x0a, 0x00, 0x00, //0x00002205 ja LBB0_580 - 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000220b movabsq $4294977024, %rdi - 0x48, 0x0f, 0xa3, 0xdf, //0x00002215 btq %rbx, %rdi - 0x0f, 0x83, 0x0d, 0x0a, 0x00, 0x00, //0x00002219 jae LBB0_580 - 0x48, 0x83, 0xc6, 0x01, //0x0000221f addq $1, %rsi - 0x48, 0x39, 0xf0, //0x00002223 cmpq %rsi, %rax - 0x0f, 0x85, 0xd2, 0xff, 0xff, 0xff, //0x00002226 jne LBB0_445 - 0x4c, 0x89, 0xd1, //0x0000222c movq %r10, %rcx - //0x0000222f LBB0_449 - 0x4c, 0x29, 0xe1, //0x0000222f subq %r12, %rcx - 0x48, 0x39, 0xd1, //0x00002232 cmpq %rdx, %rcx - 0x0f, 0x82, 0x16, 0x00, 0x00, 0x00, //0x00002235 jb LBB0_451 - 0xe9, 0x86, 0x02, 0x00, 0x00, //0x0000223b jmp LBB0_487 - //0x00002240 .p2align 4, 0x90 - //0x00002240 LBB0_450 - 0xf7, 0xd6, //0x00002240 notl %esi - 0x0f, 0xbc, 0xce, //0x00002242 bsfl %esi, %ecx - 0x48, 0x29, 0xc1, //0x00002245 subq %rax, %rcx - 0x48, 0x39, 0xd1, //0x00002248 cmpq %rdx, %rcx - 0x0f, 0x83, 0x75, 0x02, 0x00, 0x00, //0x0000224b jae LBB0_487 - //0x00002251 LBB0_451 - 0x4c, 0x8d, 0x71, 0x01, //0x00002251 leaq $1(%rcx), %r14 - 0x4d, 0x89, 0x30, //0x00002255 movq %r14, (%r8) - 0x41, 0x0f, 0xbe, 0x04, 0x0c, //0x00002258 movsbl (%r12,%rcx), %eax - 0x83, 0xf8, 0x7b, //0x0000225d cmpl $123, %eax - 0x0f, 0x87, 0x5a, 0x02, 0x00, 0x00, //0x00002260 ja LBB0_486 - 0x48, 0x8d, 0x15, 0xdf, 0x33, 0x00, 0x00, //0x00002266 leaq $13279(%rip), %rdx /* LJTI0_0+0(%rip) */ - 0x48, 0x63, 0x04, 0x82, //0x0000226d movslq (%rdx,%rax,4), %rax - 0x48, 0x01, 0xd0, //0x00002271 addq %rdx, %rax - 0xff, 0xe0, //0x00002274 jmpq *%rax - //0x00002276 LBB0_453 - 0x49, 0x8b, 0x45, 0x00, //0x00002276 movq (%r13), %rax - 0x48, 0x89, 0xc2, //0x0000227a movq %rax, %rdx - 0x4c, 0x29, 0xf2, //0x0000227d subq %r14, %rdx - 0x48, 0x83, 0xfa, 0x20, //0x00002280 cmpq $32, %rdx - 0x0f, 0x82, 0x72, 0x0a, 0x00, 0x00, //0x00002284 jb LBB0_584 - 0x48, 0x89, 0xca, //0x0000228a movq %rcx, %rdx - 0x48, 0xf7, 0xd2, //0x0000228d notq %rdx - 0x48, 0x83, 0xc1, 0x01, //0x00002290 addq $1, %rcx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002294 .p2align 4, 0x90 - //0x000022a0 LBB0_455 - 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x0c, //0x000022a0 vmovdqu (%r12,%rcx), %ymm6 - 0xc5, 0xcd, 0x74, 0xfb, //0x000022a6 vpcmpeqb %ymm3, %ymm6, %ymm7 - 0xc5, 0xcd, 0xdb, 0xf4, //0x000022aa vpand %ymm4, %ymm6, %ymm6 - 0xc5, 0xcd, 0x74, 0xf5, //0x000022ae vpcmpeqb %ymm5, %ymm6, %ymm6 - 0xc5, 0xcd, 0xeb, 0xf7, //0x000022b2 vpor %ymm7, %ymm6, %ymm6 - 0xc5, 0xfd, 0xd7, 0xf6, //0x000022b6 vpmovmskb %ymm6, %esi - 0x85, 0xf6, //0x000022ba testl %esi, %esi - 0x0f, 0x85, 0xce, 0x00, 0x00, 0x00, //0x000022bc jne LBB0_469 - 0x48, 0x83, 0xc1, 0x20, //0x000022c2 addq $32, %rcx - 0x48, 0x8d, 0x34, 0x10, //0x000022c6 leaq (%rax,%rdx), %rsi - 0x48, 0x83, 0xc6, 0xe0, //0x000022ca addq $-32, %rsi - 0x48, 0x83, 0xc2, 0xe0, //0x000022ce addq $-32, %rdx - 0x48, 0x83, 0xfe, 0x1f, //0x000022d2 cmpq $31, %rsi - 0x0f, 0x87, 0xc4, 0xff, 0xff, 0xff, //0x000022d6 ja LBB0_455 - 0x4d, 0x89, 0xe6, //0x000022dc movq %r12, %r14 - 0x49, 0x29, 0xd6, //0x000022df subq %rdx, %r14 - 0x48, 0x01, 0xd0, //0x000022e2 addq %rdx, %rax - 0x48, 0x89, 0xc2, //0x000022e5 movq %rax, %rdx - 0x48, 0x83, 0xfa, 0x10, //0x000022e8 cmpq $16, %rdx - 0x0f, 0x82, 0x4d, 0x00, 0x00, 0x00, //0x000022ec jb LBB0_461 - //0x000022f2 LBB0_458 - 0x4c, 0x89, 0xe0, //0x000022f2 movq %r12, %rax - 0x4c, 0x29, 0xf0, //0x000022f5 subq %r14, %rax - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000022f8 .p2align 4, 0x90 - //0x00002300 LBB0_459 - 0xc4, 0xc1, 0x7a, 0x6f, 0x36, //0x00002300 vmovdqu (%r14), %xmm6 - 0xc5, 0xc9, 0x74, 0x3d, 0xd3, 0xde, 0xff, 0xff, //0x00002305 vpcmpeqb $-8493(%rip), %xmm6, %xmm7 /* LCPI0_4+0(%rip) */ - 0xc5, 0xc9, 0xdb, 0x35, 0xdb, 0xde, 0xff, 0xff, //0x0000230d vpand $-8485(%rip), %xmm6, %xmm6 /* LCPI0_5+0(%rip) */ - 0xc5, 0xb9, 0x74, 0xf6, //0x00002315 vpcmpeqb %xmm6, %xmm8, %xmm6 - 0xc5, 0xc9, 0xeb, 0xf7, //0x00002319 vpor %xmm7, %xmm6, %xmm6 - 0xc5, 0xf9, 0xd7, 0xce, //0x0000231d vpmovmskb %xmm6, %ecx - 0x85, 0xc9, //0x00002321 testl %ecx, %ecx - 0x0f, 0x85, 0xdc, 0x08, 0x00, 0x00, //0x00002323 jne LBB0_578 - 0x49, 0x83, 0xc6, 0x10, //0x00002329 addq $16, %r14 - 0x48, 0x83, 0xc2, 0xf0, //0x0000232d addq $-16, %rdx - 0x48, 0x83, 0xc0, 0xf0, //0x00002331 addq $-16, %rax - 0x48, 0x83, 0xfa, 0x0f, //0x00002335 cmpq $15, %rdx - 0x0f, 0x87, 0xc1, 0xff, 0xff, 0xff, //0x00002339 ja LBB0_459 - //0x0000233f LBB0_461 - 0x48, 0x85, 0xd2, //0x0000233f testq %rdx, %rdx - 0x0f, 0x84, 0x36, 0x00, 0x00, 0x00, //0x00002342 je LBB0_468 - 0x49, 0x8d, 0x0c, 0x16, //0x00002348 leaq (%r14,%rdx), %rcx - 0x31, 0xc0, //0x0000234c xorl %eax, %eax - //0x0000234e LBB0_463 - 0x41, 0x0f, 0xb6, 0x1c, 0x06, //0x0000234e movzbl (%r14,%rax), %ebx - 0x80, 0xfb, 0x2c, //0x00002353 cmpb $44, %bl - 0x0f, 0x84, 0xb2, 0x09, 0x00, 0x00, //0x00002356 je LBB0_585 - 0x80, 0xfb, 0x7d, //0x0000235c cmpb $125, %bl - 0x0f, 0x84, 0xa9, 0x09, 0x00, 0x00, //0x0000235f je LBB0_585 - 0x80, 0xfb, 0x5d, //0x00002365 cmpb $93, %bl - 0x0f, 0x84, 0xa0, 0x09, 0x00, 0x00, //0x00002368 je LBB0_585 - 0x48, 0x83, 0xc0, 0x01, //0x0000236e addq $1, %rax - 0x48, 0x39, 0xc2, //0x00002372 cmpq %rax, %rdx - 0x0f, 0x85, 0xd3, 0xff, 0xff, 0xff, //0x00002375 jne LBB0_463 - 0x49, 0x89, 0xce, //0x0000237b movq %rcx, %r14 - //0x0000237e LBB0_468 - 0x4d, 0x29, 0xe6, //0x0000237e subq %r12, %r14 - 0xe9, 0x8e, 0x09, 0x00, 0x00, //0x00002381 jmp LBB0_586 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002386 .p2align 4, 0x90 - //0x00002390 LBB0_469 - 0x44, 0x0f, 0xbc, 0xf6, //0x00002390 bsfl %esi, %r14d - 0x49, 0x29, 0xd6, //0x00002394 subq %rdx, %r14 - 0x4d, 0x89, 0x30, //0x00002397 movq %r14, (%r8) - 0xe9, 0x27, 0x01, 0x00, 0x00, //0x0000239a jmp LBB0_487 - //0x0000239f LBB0_470 - 0x48, 0x83, 0xc1, 0x04, //0x0000239f addq $4, %rcx - 0x49, 0x3b, 0x4d, 0x00, //0x000023a3 cmpq (%r13), %rcx - 0x0f, 0x86, 0x13, 0x01, 0x00, 0x00, //0x000023a7 jbe LBB0_486 - 0xe9, 0x14, 0x01, 0x00, 0x00, //0x000023ad jmp LBB0_487 - //0x000023b2 LBB0_471 - 0x4c, 0x89, 0x7c, 0x24, 0x18, //0x000023b2 movq %r15, $24(%rsp) - 0x4c, 0x89, 0x6c, 0x24, 0x28, //0x000023b7 movq %r13, $40(%rsp) - 0x4d, 0x8b, 0x45, 0x00, //0x000023bc movq (%r13), %r8 - 0x4d, 0x89, 0xc5, //0x000023c0 movq %r8, %r13 - 0x4d, 0x29, 0xf5, //0x000023c3 subq %r14, %r13 - 0x49, 0x83, 0xfd, 0x20, //0x000023c6 cmpq $32, %r13 - 0x0f, 0x8c, 0x56, 0x09, 0x00, 0x00, //0x000023ca jl LBB0_587 - 0x4d, 0x8d, 0x14, 0x0c, //0x000023d0 leaq (%r12,%rcx), %r10 - 0x49, 0x29, 0xc8, //0x000023d4 subq %rcx, %r8 - 0xb8, 0x1f, 0x00, 0x00, 0x00, //0x000023d7 movl $31, %eax - 0x45, 0x31, 0xed, //0x000023dc xorl %r13d, %r13d - 0x45, 0x31, 0xff, //0x000023df xorl %r15d, %r15d - 0xe9, 0x5d, 0x00, 0x00, 0x00, //0x000023e2 jmp LBB0_473 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000023e7 .p2align 4, 0x90 - //0x000023f0 LBB0_479 - 0x44, 0x89, 0xfe, //0x000023f0 movl %r15d, %esi - 0xf7, 0xd6, //0x000023f3 notl %esi - 0x21, 0xde, //0x000023f5 andl %ebx, %esi - 0x8d, 0x14, 0x36, //0x000023f7 leal (%rsi,%rsi), %edx - 0x44, 0x09, 0xfa, //0x000023fa orl %r15d, %edx - 0x89, 0xd7, //0x000023fd movl %edx, %edi - 0xf7, 0xd7, //0x000023ff notl %edi - 0x21, 0xdf, //0x00002401 andl %ebx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002403 andl $-1431655766, %edi - 0x45, 0x31, 0xff, //0x00002409 xorl %r15d, %r15d - 0x01, 0xf7, //0x0000240c addl %esi, %edi - 0x41, 0x0f, 0x92, 0xc7, //0x0000240e setb %r15b - 0x01, 0xff, //0x00002412 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00002414 xorl $1431655765, %edi - 0x21, 0xd7, //0x0000241a andl %edx, %edi - 0xf7, 0xd7, //0x0000241c notl %edi - 0x41, 0x21, 0xfb, //0x0000241e andl %edi, %r11d - 0x4d, 0x85, 0xdb, //0x00002421 testq %r11, %r11 - 0x0f, 0x85, 0x4e, 0x00, 0x00, 0x00, //0x00002424 jne LBB0_476 - //0x0000242a LBB0_480 - 0x49, 0x83, 0xc5, 0x20, //0x0000242a addq $32, %r13 - 0x49, 0x8d, 0x14, 0x00, //0x0000242e leaq (%r8,%rax), %rdx - 0x48, 0x83, 0xc2, 0xe0, //0x00002432 addq $-32, %rdx - 0x48, 0x83, 0xc0, 0xe0, //0x00002436 addq $-32, %rax - 0x48, 0x83, 0xfa, 0x3f, //0x0000243a cmpq $63, %rdx - 0x0f, 0x8e, 0xfc, 0x07, 0x00, 0x00, //0x0000243e jle LBB0_481 - //0x00002444 LBB0_473 - 0xc4, 0x81, 0x7e, 0x6f, 0x74, 0x2a, 0x01, //0x00002444 vmovdqu $1(%r10,%r13), %ymm6 - 0xc5, 0xcd, 0x74, 0xf9, //0x0000244b vpcmpeqb %ymm1, %ymm6, %ymm7 - 0xc5, 0x7d, 0xd7, 0xdf, //0x0000244f vpmovmskb %ymm7, %r11d - 0xc5, 0xcd, 0x74, 0xf2, //0x00002453 vpcmpeqb %ymm2, %ymm6, %ymm6 - 0xc5, 0xfd, 0xd7, 0xde, //0x00002457 vpmovmskb %ymm6, %ebx - 0x85, 0xdb, //0x0000245b testl %ebx, %ebx - 0x0f, 0x85, 0x8d, 0xff, 0xff, 0xff, //0x0000245d jne LBB0_479 - 0x4d, 0x85, 0xff, //0x00002463 testq %r15, %r15 - 0x0f, 0x85, 0x84, 0xff, 0xff, 0xff, //0x00002466 jne LBB0_479 - 0x45, 0x31, 0xff, //0x0000246c xorl %r15d, %r15d - 0x4d, 0x85, 0xdb, //0x0000246f testq %r11, %r11 - 0x0f, 0x84, 0xb2, 0xff, 0xff, 0xff, //0x00002472 je LBB0_480 - //0x00002478 LBB0_476 - 0x41, 0x0f, 0xbc, 0xc3, //0x00002478 bsfl %r11d, %eax - 0x48, 0x01, 0xc8, //0x0000247c addq %rcx, %rax - 0x4e, 0x8d, 0x34, 0x28, //0x0000247f leaq (%rax,%r13), %r14 - 0x49, 0x83, 0xc6, 0x02, //0x00002483 addq $2, %r14 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00002487 movq $8(%rsp), %r8 - 0x4d, 0x89, 0x30, //0x0000248c movq %r14, (%r8) - //0x0000248f LBB0_477 - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x0000248f movq $40(%rsp), %r13 - //0x00002494 LBB0_478 - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x00002494 movq $32(%rsp), %r11 - 0x4c, 0x8b, 0x7c, 0x24, 0x18, //0x00002499 movq $24(%rsp), %r15 - 0xe9, 0x23, 0x00, 0x00, 0x00, //0x0000249e jmp LBB0_487 - //0x000024a3 LBB0_485 - 0x48, 0x83, 0xc1, 0x05, //0x000024a3 addq $5, %rcx - 0x49, 0x3b, 0x4d, 0x00, //0x000024a7 cmpq (%r13), %rcx - 0x0f, 0x87, 0x15, 0x00, 0x00, 0x00, //0x000024ab ja LBB0_487 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000024b1 .p2align 4, 0x90 - //0x000024c0 LBB0_486 - 0x49, 0x89, 0x08, //0x000024c0 movq %rcx, (%r8) - 0x49, 0x89, 0xce, //0x000024c3 movq %rcx, %r14 - //0x000024c6 LBB0_487 - 0x4d, 0x8b, 0x23, //0x000024c6 movq (%r11), %r12 - 0x49, 0x8b, 0x4b, 0x08, //0x000024c9 movq $8(%r11), %rcx - 0x49, 0x39, 0xce, //0x000024cd cmpq %rcx, %r14 - 0x0f, 0x83, 0x2a, 0x00, 0x00, 0x00, //0x000024d0 jae LBB0_492 - 0x43, 0x8a, 0x04, 0x34, //0x000024d6 movb (%r12,%r14), %al - 0x3c, 0x0d, //0x000024da cmpb $13, %al - 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x000024dc je LBB0_492 - 0x3c, 0x20, //0x000024e2 cmpb $32, %al - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000024e4 je LBB0_492 - 0x04, 0xf7, //0x000024ea addb $-9, %al - 0x3c, 0x01, //0x000024ec cmpb $1, %al - 0x0f, 0x86, 0x0c, 0x00, 0x00, 0x00, //0x000024ee jbe LBB0_492 - 0x4c, 0x89, 0xf2, //0x000024f4 movq %r14, %rdx - 0xe9, 0x75, 0x01, 0x00, 0x00, //0x000024f7 jmp LBB0_517 - 0x90, 0x90, 0x90, 0x90, //0x000024fc .p2align 4, 0x90 - //0x00002500 LBB0_492 - 0x49, 0x8d, 0x56, 0x01, //0x00002500 leaq $1(%r14), %rdx - 0x48, 0x39, 0xca, //0x00002504 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002507 jae LBB0_496 - 0x41, 0x8a, 0x04, 0x14, //0x0000250d movb (%r12,%rdx), %al - 0x3c, 0x0d, //0x00002511 cmpb $13, %al - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00002513 je LBB0_496 - 0x3c, 0x20, //0x00002519 cmpb $32, %al - 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000251b je LBB0_496 - 0x04, 0xf7, //0x00002521 addb $-9, %al - 0x3c, 0x01, //0x00002523 cmpb $1, %al - 0x0f, 0x87, 0x46, 0x01, 0x00, 0x00, //0x00002525 ja LBB0_517 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000252b .p2align 4, 0x90 - //0x00002530 LBB0_496 - 0x49, 0x8d, 0x56, 0x02, //0x00002530 leaq $2(%r14), %rdx - 0x48, 0x39, 0xca, //0x00002534 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002537 jae LBB0_500 - 0x41, 0x8a, 0x04, 0x14, //0x0000253d movb (%r12,%rdx), %al - 0x3c, 0x0d, //0x00002541 cmpb $13, %al - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00002543 je LBB0_500 - 0x3c, 0x20, //0x00002549 cmpb $32, %al - 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000254b je LBB0_500 - 0x04, 0xf7, //0x00002551 addb $-9, %al - 0x3c, 0x01, //0x00002553 cmpb $1, %al - 0x0f, 0x87, 0x16, 0x01, 0x00, 0x00, //0x00002555 ja LBB0_517 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000255b .p2align 4, 0x90 - //0x00002560 LBB0_500 - 0x49, 0x8d, 0x56, 0x03, //0x00002560 leaq $3(%r14), %rdx - 0x48, 0x39, 0xca, //0x00002564 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002567 jae LBB0_504 - 0x41, 0x8a, 0x04, 0x14, //0x0000256d movb (%r12,%rdx), %al - 0x3c, 0x0d, //0x00002571 cmpb $13, %al - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00002573 je LBB0_504 - 0x3c, 0x20, //0x00002579 cmpb $32, %al - 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000257b je LBB0_504 - 0x04, 0xf7, //0x00002581 addb $-9, %al - 0x3c, 0x01, //0x00002583 cmpb $1, %al - 0x0f, 0x87, 0xe6, 0x00, 0x00, 0x00, //0x00002585 ja LBB0_517 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000258b .p2align 4, 0x90 - //0x00002590 LBB0_504 - 0x49, 0x8d, 0x56, 0x04, //0x00002590 leaq $4(%r14), %rdx - 0x48, 0x89, 0xc8, //0x00002594 movq %rcx, %rax - 0x48, 0x29, 0xd0, //0x00002597 subq %rdx, %rax - 0x0f, 0x86, 0xbc, 0x26, 0x00, 0x00, //0x0000259a jbe LBB0_1017 - 0x48, 0x83, 0xf8, 0x20, //0x000025a0 cmpq $32, %rax - 0x0f, 0x82, 0x30, 0x07, 0x00, 0x00, //0x000025a4 jb LBB0_582 - 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x000025aa movq $-4, %rax - 0x4c, 0x29, 0xf0, //0x000025b1 subq %r14, %rax - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000025b4 .p2align 4, 0x90 - //0x000025c0 LBB0_507 - 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x14, //0x000025c0 vmovdqu (%r12,%rdx), %ymm6 - 0xc4, 0xe2, 0x7d, 0x00, 0xfe, //0x000025c6 vpshufb %ymm6, %ymm0, %ymm7 - 0xc5, 0xcd, 0x74, 0xf7, //0x000025cb vpcmpeqb %ymm7, %ymm6, %ymm6 - 0xc5, 0xfd, 0xd7, 0xf6, //0x000025cf vpmovmskb %ymm6, %esi - 0x83, 0xfe, 0xff, //0x000025d3 cmpl $-1, %esi - 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x000025d6 jne LBB0_516 - 0x48, 0x83, 0xc2, 0x20, //0x000025dc addq $32, %rdx - 0x48, 0x8d, 0x34, 0x01, //0x000025e0 leaq (%rcx,%rax), %rsi - 0x48, 0x83, 0xc6, 0xe0, //0x000025e4 addq $-32, %rsi - 0x48, 0x83, 0xc0, 0xe0, //0x000025e8 addq $-32, %rax - 0x48, 0x83, 0xfe, 0x1f, //0x000025ec cmpq $31, %rsi - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x000025f0 ja LBB0_507 - 0x4c, 0x89, 0xe2, //0x000025f6 movq %r12, %rdx - 0x48, 0x29, 0xc2, //0x000025f9 subq %rax, %rdx - 0x48, 0x01, 0xc8, //0x000025fc addq %rcx, %rax - 0x48, 0x85, 0xc0, //0x000025ff testq %rax, %rax - 0x0f, 0x84, 0x39, 0x00, 0x00, 0x00, //0x00002602 je LBB0_515 - //0x00002608 LBB0_510 - 0x4c, 0x8d, 0x14, 0x02, //0x00002608 leaq (%rdx,%rax), %r10 - 0x31, 0xf6, //0x0000260c xorl %esi, %esi - 0x90, 0x90, //0x0000260e .p2align 4, 0x90 - //0x00002610 LBB0_511 - 0x0f, 0xbe, 0x1c, 0x32, //0x00002610 movsbl (%rdx,%rsi), %ebx - 0x83, 0xfb, 0x20, //0x00002614 cmpl $32, %ebx - 0x0f, 0x87, 0xfb, 0x05, 0x00, 0x00, //0x00002617 ja LBB0_579 - 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000261d movabsq $4294977024, %rdi - 0x48, 0x0f, 0xa3, 0xdf, //0x00002627 btq %rbx, %rdi - 0x0f, 0x83, 0xe7, 0x05, 0x00, 0x00, //0x0000262b jae LBB0_579 - 0x48, 0x83, 0xc6, 0x01, //0x00002631 addq $1, %rsi - 0x48, 0x39, 0xf0, //0x00002635 cmpq %rsi, %rax - 0x0f, 0x85, 0xd2, 0xff, 0xff, 0xff, //0x00002638 jne LBB0_511 - 0x4c, 0x89, 0xd2, //0x0000263e movq %r10, %rdx - //0x00002641 LBB0_515 - 0x4c, 0x29, 0xe2, //0x00002641 subq %r12, %rdx - 0x48, 0x39, 0xca, //0x00002644 cmpq %rcx, %rdx - 0x0f, 0x82, 0x24, 0x00, 0x00, 0x00, //0x00002647 jb LBB0_517 - 0xe9, 0x35, 0x26, 0x00, 0x00, //0x0000264d jmp LBB0_1024 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002652 .p2align 4, 0x90 - //0x00002660 LBB0_516 - 0xf7, 0xd6, //0x00002660 notl %esi - 0x0f, 0xbc, 0xd6, //0x00002662 bsfl %esi, %edx - 0x48, 0x29, 0xc2, //0x00002665 subq %rax, %rdx - 0x48, 0x39, 0xca, //0x00002668 cmpq %rcx, %rdx - 0x0f, 0x83, 0x16, 0x26, 0x00, 0x00, //0x0000266b jae LBB0_1024 - //0x00002671 LBB0_517 - 0x4c, 0x8d, 0x72, 0x01, //0x00002671 leaq $1(%rdx), %r14 - 0x4d, 0x89, 0x30, //0x00002675 movq %r14, (%r8) - 0x41, 0x8a, 0x04, 0x14, //0x00002678 movb (%r12,%rdx), %al - 0x3c, 0x2c, //0x0000267c cmpb $44, %al - 0x0f, 0x85, 0x88, 0x09, 0x00, 0x00, //0x0000267e jne LBB0_625 - 0x49, 0x8d, 0x41, 0xff, //0x00002684 leaq $-1(%r9), %rax - 0x49, 0x83, 0xf9, 0x02, //0x00002688 cmpq $2, %r9 - 0x49, 0x89, 0xc1, //0x0000268c movq %rax, %r9 - 0x0f, 0x8d, 0x1b, 0xfa, 0xff, 0xff, //0x0000268f jge LBB0_421 - 0xe9, 0xe6, 0x06, 0x00, 0x00, //0x00002695 jmp LBB0_519 - //0x0000269a LBB0_522 - 0x4c, 0x89, 0x7c, 0x24, 0x18, //0x0000269a movq %r15, $24(%rsp) - 0x4d, 0x8b, 0x55, 0x00, //0x0000269f movq (%r13), %r10 - 0x4d, 0x29, 0xf2, //0x000026a3 subq %r14, %r10 - 0x4d, 0x01, 0xf4, //0x000026a6 addq %r14, %r12 - 0x45, 0x31, 0xdb, //0x000026a9 xorl %r11d, %r11d - 0x45, 0x31, 0xf6, //0x000026ac xorl %r14d, %r14d - 0x45, 0x31, 0xff, //0x000026af xorl %r15d, %r15d - 0x31, 0xdb, //0x000026b2 xorl %ebx, %ebx - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x000026b4 jmp LBB0_524 - //0x000026b9 LBB0_523 - 0x48, 0xc1, 0xf8, 0x3f, //0x000026b9 sarq $63, %rax - 0xf3, 0x48, 0x0f, 0xb8, 0xce, //0x000026bd popcntq %rsi, %rcx - 0x49, 0x01, 0xcf, //0x000026c2 addq %rcx, %r15 - 0x49, 0x83, 0xc4, 0x40, //0x000026c5 addq $64, %r12 - 0x49, 0x83, 0xc2, 0xc0, //0x000026c9 addq $-64, %r10 - 0x49, 0x89, 0xc3, //0x000026cd movq %rax, %r11 - //0x000026d0 LBB0_524 - 0x49, 0x83, 0xfa, 0x40, //0x000026d0 cmpq $64, %r10 - 0x0f, 0x8c, 0x33, 0x01, 0x00, 0x00, //0x000026d4 jl LBB0_532 - //0x000026da LBB0_525 - 0xc4, 0x41, 0x7e, 0x6f, 0x3c, 0x24, //0x000026da vmovdqu (%r12), %ymm15 - 0xc4, 0x41, 0x7e, 0x6f, 0x74, 0x24, 0x20, //0x000026e0 vmovdqu $32(%r12), %ymm14 - 0xc5, 0x85, 0x74, 0xf2, //0x000026e7 vpcmpeqb %ymm2, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xc6, //0x000026eb vpmovmskb %ymm6, %eax - 0xc5, 0x8d, 0x74, 0xf2, //0x000026ef vpcmpeqb %ymm2, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xce, //0x000026f3 vpmovmskb %ymm6, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x000026f7 shlq $32, %rcx - 0x48, 0x09, 0xc8, //0x000026fb orq %rcx, %rax - 0x48, 0x89, 0xc1, //0x000026fe movq %rax, %rcx - 0x4c, 0x09, 0xf1, //0x00002701 orq %r14, %rcx - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00002704 jne LBB0_527 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000270a movq $-1, %rax - 0x45, 0x31, 0xf6, //0x00002711 xorl %r14d, %r14d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00002714 jmp LBB0_528 - //0x00002719 LBB0_527 - 0x4c, 0x89, 0xf1, //0x00002719 movq %r14, %rcx - 0x48, 0xf7, 0xd1, //0x0000271c notq %rcx - 0x48, 0x21, 0xc1, //0x0000271f andq %rax, %rcx - 0x48, 0x8d, 0x34, 0x09, //0x00002722 leaq (%rcx,%rcx), %rsi - 0x4c, 0x09, 0xf6, //0x00002726 orq %r14, %rsi - 0x48, 0x89, 0xf7, //0x00002729 movq %rsi, %rdi - 0x48, 0xf7, 0xd7, //0x0000272c notq %rdi - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000272f movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd0, //0x00002739 andq %rdx, %rax - 0x48, 0x21, 0xf8, //0x0000273c andq %rdi, %rax - 0x45, 0x31, 0xf6, //0x0000273f xorl %r14d, %r14d - 0x48, 0x01, 0xc8, //0x00002742 addq %rcx, %rax - 0x41, 0x0f, 0x92, 0xc6, //0x00002745 setb %r14b - 0x48, 0x01, 0xc0, //0x00002749 addq %rax, %rax - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000274c movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xc8, //0x00002756 xorq %rcx, %rax - 0x48, 0x21, 0xf0, //0x00002759 andq %rsi, %rax - 0x48, 0xf7, 0xd0, //0x0000275c notq %rax - //0x0000275f LBB0_528 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x0000275f movq $8(%rsp), %r8 - 0xc5, 0x8d, 0x74, 0xf1, //0x00002764 vpcmpeqb %ymm1, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xce, //0x00002768 vpmovmskb %ymm6, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x0000276c shlq $32, %rcx - 0xc5, 0x85, 0x74, 0xf1, //0x00002770 vpcmpeqb %ymm1, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xf6, //0x00002774 vpmovmskb %ymm6, %esi - 0x48, 0x09, 0xce, //0x00002778 orq %rcx, %rsi - 0x48, 0x21, 0xc6, //0x0000277b andq %rax, %rsi - 0xc4, 0xe1, 0xf9, 0x6e, 0xf6, //0x0000277e vmovq %rsi, %xmm6 - 0xc4, 0xc3, 0x49, 0x44, 0xf1, 0x00, //0x00002783 vpclmulqdq $0, %xmm9, %xmm6, %xmm6 - 0xc4, 0xe1, 0xf9, 0x7e, 0xf0, //0x00002789 vmovq %xmm6, %rax - 0x4c, 0x31, 0xd8, //0x0000278e xorq %r11, %rax - 0xc4, 0xc1, 0x05, 0x74, 0xf4, //0x00002791 vpcmpeqb %ymm12, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xf6, //0x00002796 vpmovmskb %ymm6, %esi - 0xc4, 0xc1, 0x0d, 0x74, 0xf4, //0x0000279a vpcmpeqb %ymm12, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xce, //0x0000279f vpmovmskb %ymm6, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x000027a3 shlq $32, %rcx - 0x48, 0x09, 0xce, //0x000027a7 orq %rcx, %rsi - 0x48, 0x89, 0xc1, //0x000027aa movq %rax, %rcx - 0x48, 0xf7, 0xd1, //0x000027ad notq %rcx - 0x48, 0x21, 0xce, //0x000027b0 andq %rcx, %rsi - 0xc4, 0xc1, 0x05, 0x74, 0xf5, //0x000027b3 vpcmpeqb %ymm13, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xfe, //0x000027b8 vpmovmskb %ymm6, %edi - 0xc4, 0xc1, 0x0d, 0x74, 0xf5, //0x000027bc vpcmpeqb %ymm13, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xd6, //0x000027c1 vpmovmskb %ymm6, %edx - 0x48, 0xc1, 0xe2, 0x20, //0x000027c5 shlq $32, %rdx - 0x48, 0x09, 0xd7, //0x000027c9 orq %rdx, %rdi - 0x48, 0x21, 0xcf, //0x000027cc andq %rcx, %rdi - 0x0f, 0x84, 0xe4, 0xfe, 0xff, 0xff, //0x000027cf je LBB0_523 - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x000027d5 movq $32(%rsp), %r11 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000027da .p2align 4, 0x90 - //0x000027e0 LBB0_530 - 0x48, 0x8d, 0x4f, 0xff, //0x000027e0 leaq $-1(%rdi), %rcx - 0x48, 0x89, 0xca, //0x000027e4 movq %rcx, %rdx - 0x48, 0x21, 0xf2, //0x000027e7 andq %rsi, %rdx - 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x000027ea popcntq %rdx, %rdx - 0x4c, 0x01, 0xfa, //0x000027ef addq %r15, %rdx - 0x48, 0x39, 0xda, //0x000027f2 cmpq %rbx, %rdx - 0x0f, 0x86, 0xdc, 0x03, 0x00, 0x00, //0x000027f5 jbe LBB0_572 - 0x48, 0x83, 0xc3, 0x01, //0x000027fb addq $1, %rbx - 0x48, 0x21, 0xcf, //0x000027ff andq %rcx, %rdi - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00002802 jne LBB0_530 - 0xe9, 0xac, 0xfe, 0xff, 0xff, //0x00002808 jmp LBB0_523 - //0x0000280d LBB0_532 - 0x4d, 0x85, 0xd2, //0x0000280d testq %r10, %r10 - 0x0f, 0x8e, 0x19, 0x05, 0x00, 0x00, //0x00002810 jle LBB0_588 - 0xc5, 0xc9, 0xef, 0xf6, //0x00002816 vpxor %xmm6, %xmm6, %xmm6 - 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x60, //0x0000281a vmovdqu %ymm6, $96(%rsp) - 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x00002820 vmovdqu %ymm6, $64(%rsp) - 0x44, 0x89, 0xe0, //0x00002826 movl %r12d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00002829 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x0000282e cmpl $4033, %eax - 0x0f, 0x82, 0xa1, 0xfe, 0xff, 0xff, //0x00002833 jb LBB0_525 - 0x49, 0x83, 0xfa, 0x20, //0x00002839 cmpq $32, %r10 - 0x0f, 0x82, 0x1e, 0x00, 0x00, 0x00, //0x0000283d jb LBB0_536 - 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x24, //0x00002843 vmovdqu (%r12), %ymm6 - 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x00002849 vmovdqu %ymm6, $64(%rsp) - 0x49, 0x83, 0xc4, 0x20, //0x0000284f addq $32, %r12 - 0x49, 0x8d, 0x7a, 0xe0, //0x00002853 leaq $-32(%r10), %rdi - 0x4c, 0x8d, 0x44, 0x24, 0x60, //0x00002857 leaq $96(%rsp), %r8 - 0xe9, 0x08, 0x00, 0x00, 0x00, //0x0000285c jmp LBB0_537 - //0x00002861 LBB0_536 - 0x4c, 0x8d, 0x44, 0x24, 0x40, //0x00002861 leaq $64(%rsp), %r8 - 0x4c, 0x89, 0xd7, //0x00002866 movq %r10, %rdi - //0x00002869 LBB0_537 - 0x48, 0x83, 0xff, 0x10, //0x00002869 cmpq $16, %rdi - 0x0f, 0x82, 0x5e, 0x00, 0x00, 0x00, //0x0000286d jb LBB0_538 - 0xc4, 0xc1, 0x7a, 0x6f, 0x34, 0x24, //0x00002873 vmovdqu (%r12), %xmm6 - 0xc4, 0xc1, 0x7a, 0x7f, 0x30, //0x00002879 vmovdqu %xmm6, (%r8) - 0x49, 0x83, 0xc4, 0x10, //0x0000287e addq $16, %r12 - 0x49, 0x83, 0xc0, 0x10, //0x00002882 addq $16, %r8 - 0x48, 0x83, 0xc7, 0xf0, //0x00002886 addq $-16, %rdi - 0x48, 0x83, 0xff, 0x08, //0x0000288a cmpq $8, %rdi - 0x0f, 0x83, 0x47, 0x00, 0x00, 0x00, //0x0000288e jae LBB0_543 - //0x00002894 LBB0_539 - 0x48, 0x83, 0xff, 0x04, //0x00002894 cmpq $4, %rdi - 0x0f, 0x8c, 0x5a, 0x00, 0x00, 0x00, //0x00002898 jl LBB0_540 - //0x0000289e LBB0_544 - 0x41, 0x8b, 0x04, 0x24, //0x0000289e movl (%r12), %eax - 0x41, 0x89, 0x00, //0x000028a2 movl %eax, (%r8) - 0x49, 0x83, 0xc4, 0x04, //0x000028a5 addq $4, %r12 - 0x49, 0x83, 0xc0, 0x04, //0x000028a9 addq $4, %r8 - 0x48, 0x83, 0xc7, 0xfc, //0x000028ad addq $-4, %rdi - 0x48, 0x83, 0xff, 0x02, //0x000028b1 cmpq $2, %rdi - 0x0f, 0x83, 0x47, 0x00, 0x00, 0x00, //0x000028b5 jae LBB0_545 - //0x000028bb LBB0_541 - 0x4c, 0x89, 0xe0, //0x000028bb movq %r12, %rax - 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x000028be leaq $64(%rsp), %r12 - 0x48, 0x85, 0xff, //0x000028c3 testq %rdi, %rdi - 0x0f, 0x85, 0x5c, 0x00, 0x00, 0x00, //0x000028c6 jne LBB0_546 - 0xe9, 0x09, 0xfe, 0xff, 0xff, //0x000028cc jmp LBB0_525 - //0x000028d1 LBB0_538 - 0x48, 0x83, 0xff, 0x08, //0x000028d1 cmpq $8, %rdi - 0x0f, 0x82, 0xb9, 0xff, 0xff, 0xff, //0x000028d5 jb LBB0_539 - //0x000028db LBB0_543 - 0x49, 0x8b, 0x04, 0x24, //0x000028db movq (%r12), %rax - 0x49, 0x89, 0x00, //0x000028df movq %rax, (%r8) - 0x49, 0x83, 0xc4, 0x08, //0x000028e2 addq $8, %r12 - 0x49, 0x83, 0xc0, 0x08, //0x000028e6 addq $8, %r8 - 0x48, 0x83, 0xc7, 0xf8, //0x000028ea addq $-8, %rdi - 0x48, 0x83, 0xff, 0x04, //0x000028ee cmpq $4, %rdi - 0x0f, 0x8d, 0xa6, 0xff, 0xff, 0xff, //0x000028f2 jge LBB0_544 - //0x000028f8 LBB0_540 - 0x48, 0x83, 0xff, 0x02, //0x000028f8 cmpq $2, %rdi - 0x0f, 0x82, 0xb9, 0xff, 0xff, 0xff, //0x000028fc jb LBB0_541 - //0x00002902 LBB0_545 - 0x41, 0x0f, 0xb7, 0x04, 0x24, //0x00002902 movzwl (%r12), %eax - 0x66, 0x41, 0x89, 0x00, //0x00002907 movw %ax, (%r8) - 0x49, 0x83, 0xc4, 0x02, //0x0000290b addq $2, %r12 - 0x49, 0x83, 0xc0, 0x02, //0x0000290f addq $2, %r8 - 0x48, 0x83, 0xc7, 0xfe, //0x00002913 addq $-2, %rdi - 0x4c, 0x89, 0xe0, //0x00002917 movq %r12, %rax - 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x0000291a leaq $64(%rsp), %r12 - 0x48, 0x85, 0xff, //0x0000291f testq %rdi, %rdi - 0x0f, 0x84, 0xb2, 0xfd, 0xff, 0xff, //0x00002922 je LBB0_525 - //0x00002928 LBB0_546 - 0x8a, 0x00, //0x00002928 movb (%rax), %al - 0x41, 0x88, 0x00, //0x0000292a movb %al, (%r8) - 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x0000292d leaq $64(%rsp), %r12 - 0xe9, 0xa3, 0xfd, 0xff, 0xff, //0x00002932 jmp LBB0_525 - //0x00002937 LBB0_547 - 0x4c, 0x89, 0x7c, 0x24, 0x18, //0x00002937 movq %r15, $24(%rsp) - 0x4d, 0x8b, 0x55, 0x00, //0x0000293c movq (%r13), %r10 - 0x4d, 0x29, 0xf2, //0x00002940 subq %r14, %r10 - 0x4d, 0x01, 0xf4, //0x00002943 addq %r14, %r12 - 0x45, 0x31, 0xdb, //0x00002946 xorl %r11d, %r11d - 0x45, 0x31, 0xf6, //0x00002949 xorl %r14d, %r14d - 0x45, 0x31, 0xff, //0x0000294c xorl %r15d, %r15d - 0x31, 0xdb, //0x0000294f xorl %ebx, %ebx - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00002951 jmp LBB0_549 - //0x00002956 LBB0_548 - 0x48, 0xc1, 0xf8, 0x3f, //0x00002956 sarq $63, %rax - 0xf3, 0x48, 0x0f, 0xb8, 0xce, //0x0000295a popcntq %rsi, %rcx - 0x49, 0x01, 0xcf, //0x0000295f addq %rcx, %r15 - 0x49, 0x83, 0xc4, 0x40, //0x00002962 addq $64, %r12 - 0x49, 0x83, 0xc2, 0xc0, //0x00002966 addq $-64, %r10 - 0x49, 0x89, 0xc3, //0x0000296a movq %rax, %r11 - //0x0000296d LBB0_549 - 0x49, 0x83, 0xfa, 0x40, //0x0000296d cmpq $64, %r10 - 0x0f, 0x8c, 0x36, 0x01, 0x00, 0x00, //0x00002971 jl LBB0_557 - //0x00002977 LBB0_550 - 0xc4, 0x41, 0x7e, 0x6f, 0x3c, 0x24, //0x00002977 vmovdqu (%r12), %ymm15 - 0xc4, 0x41, 0x7e, 0x6f, 0x74, 0x24, 0x20, //0x0000297d vmovdqu $32(%r12), %ymm14 - 0xc5, 0x85, 0x74, 0xf2, //0x00002984 vpcmpeqb %ymm2, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xc6, //0x00002988 vpmovmskb %ymm6, %eax - 0xc5, 0x8d, 0x74, 0xf2, //0x0000298c vpcmpeqb %ymm2, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xce, //0x00002990 vpmovmskb %ymm6, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00002994 shlq $32, %rcx - 0x48, 0x09, 0xc8, //0x00002998 orq %rcx, %rax - 0x48, 0x89, 0xc1, //0x0000299b movq %rax, %rcx - 0x4c, 0x09, 0xf1, //0x0000299e orq %r14, %rcx - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x000029a1 jne LBB0_552 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000029a7 movq $-1, %rax - 0x45, 0x31, 0xf6, //0x000029ae xorl %r14d, %r14d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x000029b1 jmp LBB0_553 - //0x000029b6 LBB0_552 - 0x4c, 0x89, 0xf1, //0x000029b6 movq %r14, %rcx - 0x48, 0xf7, 0xd1, //0x000029b9 notq %rcx - 0x48, 0x21, 0xc1, //0x000029bc andq %rax, %rcx - 0x48, 0x8d, 0x34, 0x09, //0x000029bf leaq (%rcx,%rcx), %rsi - 0x4c, 0x09, 0xf6, //0x000029c3 orq %r14, %rsi - 0x48, 0x89, 0xf7, //0x000029c6 movq %rsi, %rdi - 0x48, 0xf7, 0xd7, //0x000029c9 notq %rdi - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000029cc movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd0, //0x000029d6 andq %rdx, %rax - 0x48, 0x21, 0xf8, //0x000029d9 andq %rdi, %rax - 0x45, 0x31, 0xf6, //0x000029dc xorl %r14d, %r14d - 0x48, 0x01, 0xc8, //0x000029df addq %rcx, %rax - 0x41, 0x0f, 0x92, 0xc6, //0x000029e2 setb %r14b - 0x48, 0x01, 0xc0, //0x000029e6 addq %rax, %rax - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000029e9 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xc8, //0x000029f3 xorq %rcx, %rax - 0x48, 0x21, 0xf0, //0x000029f6 andq %rsi, %rax - 0x48, 0xf7, 0xd0, //0x000029f9 notq %rax - //0x000029fc LBB0_553 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x000029fc movq $8(%rsp), %r8 - 0xc5, 0x8d, 0x74, 0xf1, //0x00002a01 vpcmpeqb %ymm1, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xce, //0x00002a05 vpmovmskb %ymm6, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00002a09 shlq $32, %rcx - 0xc5, 0x85, 0x74, 0xf1, //0x00002a0d vpcmpeqb %ymm1, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xf6, //0x00002a11 vpmovmskb %ymm6, %esi - 0x48, 0x09, 0xce, //0x00002a15 orq %rcx, %rsi - 0x48, 0x21, 0xc6, //0x00002a18 andq %rax, %rsi - 0xc4, 0xe1, 0xf9, 0x6e, 0xf6, //0x00002a1b vmovq %rsi, %xmm6 - 0xc4, 0xc3, 0x49, 0x44, 0xf1, 0x00, //0x00002a20 vpclmulqdq $0, %xmm9, %xmm6, %xmm6 - 0xc4, 0xe1, 0xf9, 0x7e, 0xf0, //0x00002a26 vmovq %xmm6, %rax - 0x4c, 0x31, 0xd8, //0x00002a2b xorq %r11, %rax - 0xc4, 0xc1, 0x05, 0x74, 0xf2, //0x00002a2e vpcmpeqb %ymm10, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xf6, //0x00002a33 vpmovmskb %ymm6, %esi - 0xc4, 0xc1, 0x0d, 0x74, 0xf2, //0x00002a37 vpcmpeqb %ymm10, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xce, //0x00002a3c vpmovmskb %ymm6, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00002a40 shlq $32, %rcx - 0x48, 0x09, 0xce, //0x00002a44 orq %rcx, %rsi - 0x48, 0x89, 0xc1, //0x00002a47 movq %rax, %rcx - 0x48, 0xf7, 0xd1, //0x00002a4a notq %rcx - 0x48, 0x21, 0xce, //0x00002a4d andq %rcx, %rsi - 0xc5, 0x85, 0x74, 0xf5, //0x00002a50 vpcmpeqb %ymm5, %ymm15, %ymm6 - 0xc5, 0xfd, 0xd7, 0xfe, //0x00002a54 vpmovmskb %ymm6, %edi - 0xc5, 0x8d, 0x74, 0xf5, //0x00002a58 vpcmpeqb %ymm5, %ymm14, %ymm6 - 0xc5, 0xfd, 0xd7, 0xd6, //0x00002a5c vpmovmskb %ymm6, %edx - 0x48, 0xc1, 0xe2, 0x20, //0x00002a60 shlq $32, %rdx - 0x48, 0x09, 0xd7, //0x00002a64 orq %rdx, %rdi - 0x48, 0x21, 0xcf, //0x00002a67 andq %rcx, %rdi - 0x0f, 0x84, 0xe6, 0xfe, 0xff, 0xff, //0x00002a6a je LBB0_548 - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x00002a70 movq $32(%rsp), %r11 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002a75 .p2align 4, 0x90 - //0x00002a80 LBB0_555 - 0x48, 0x8d, 0x4f, 0xff, //0x00002a80 leaq $-1(%rdi), %rcx - 0x48, 0x89, 0xca, //0x00002a84 movq %rcx, %rdx - 0x48, 0x21, 0xf2, //0x00002a87 andq %rsi, %rdx - 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x00002a8a popcntq %rdx, %rdx - 0x4c, 0x01, 0xfa, //0x00002a8f addq %r15, %rdx - 0x48, 0x39, 0xda, //0x00002a92 cmpq %rbx, %rdx - 0x0f, 0x86, 0x3c, 0x01, 0x00, 0x00, //0x00002a95 jbe LBB0_572 - 0x48, 0x83, 0xc3, 0x01, //0x00002a9b addq $1, %rbx - 0x48, 0x21, 0xcf, //0x00002a9f andq %rcx, %rdi - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00002aa2 jne LBB0_555 - 0xe9, 0xa9, 0xfe, 0xff, 0xff, //0x00002aa8 jmp LBB0_548 - //0x00002aad LBB0_557 - 0x4d, 0x85, 0xd2, //0x00002aad testq %r10, %r10 - 0x0f, 0x8e, 0x79, 0x02, 0x00, 0x00, //0x00002ab0 jle LBB0_588 - 0xc5, 0xc9, 0xef, 0xf6, //0x00002ab6 vpxor %xmm6, %xmm6, %xmm6 - 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x60, //0x00002aba vmovdqu %ymm6, $96(%rsp) - 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x00002ac0 vmovdqu %ymm6, $64(%rsp) - 0x44, 0x89, 0xe0, //0x00002ac6 movl %r12d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00002ac9 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00002ace cmpl $4033, %eax - 0x0f, 0x82, 0x9e, 0xfe, 0xff, 0xff, //0x00002ad3 jb LBB0_550 - 0x49, 0x83, 0xfa, 0x20, //0x00002ad9 cmpq $32, %r10 - 0x0f, 0x82, 0x1e, 0x00, 0x00, 0x00, //0x00002add jb LBB0_561 - 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x24, //0x00002ae3 vmovdqu (%r12), %ymm6 - 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x00002ae9 vmovdqu %ymm6, $64(%rsp) - 0x49, 0x83, 0xc4, 0x20, //0x00002aef addq $32, %r12 - 0x49, 0x8d, 0x7a, 0xe0, //0x00002af3 leaq $-32(%r10), %rdi - 0x4c, 0x8d, 0x44, 0x24, 0x60, //0x00002af7 leaq $96(%rsp), %r8 - 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00002afc jmp LBB0_562 - //0x00002b01 LBB0_561 - 0x4c, 0x8d, 0x44, 0x24, 0x40, //0x00002b01 leaq $64(%rsp), %r8 - 0x4c, 0x89, 0xd7, //0x00002b06 movq %r10, %rdi - //0x00002b09 LBB0_562 - 0x48, 0x83, 0xff, 0x10, //0x00002b09 cmpq $16, %rdi - 0x0f, 0x82, 0x5e, 0x00, 0x00, 0x00, //0x00002b0d jb LBB0_563 - 0xc4, 0xc1, 0x7a, 0x6f, 0x34, 0x24, //0x00002b13 vmovdqu (%r12), %xmm6 - 0xc4, 0xc1, 0x7a, 0x7f, 0x30, //0x00002b19 vmovdqu %xmm6, (%r8) - 0x49, 0x83, 0xc4, 0x10, //0x00002b1e addq $16, %r12 - 0x49, 0x83, 0xc0, 0x10, //0x00002b22 addq $16, %r8 - 0x48, 0x83, 0xc7, 0xf0, //0x00002b26 addq $-16, %rdi - 0x48, 0x83, 0xff, 0x08, //0x00002b2a cmpq $8, %rdi - 0x0f, 0x83, 0x47, 0x00, 0x00, 0x00, //0x00002b2e jae LBB0_568 - //0x00002b34 LBB0_564 - 0x48, 0x83, 0xff, 0x04, //0x00002b34 cmpq $4, %rdi - 0x0f, 0x8c, 0x5a, 0x00, 0x00, 0x00, //0x00002b38 jl LBB0_565 - //0x00002b3e LBB0_569 - 0x41, 0x8b, 0x04, 0x24, //0x00002b3e movl (%r12), %eax - 0x41, 0x89, 0x00, //0x00002b42 movl %eax, (%r8) - 0x49, 0x83, 0xc4, 0x04, //0x00002b45 addq $4, %r12 - 0x49, 0x83, 0xc0, 0x04, //0x00002b49 addq $4, %r8 - 0x48, 0x83, 0xc7, 0xfc, //0x00002b4d addq $-4, %rdi - 0x48, 0x83, 0xff, 0x02, //0x00002b51 cmpq $2, %rdi - 0x0f, 0x83, 0x47, 0x00, 0x00, 0x00, //0x00002b55 jae LBB0_570 - //0x00002b5b LBB0_566 - 0x4c, 0x89, 0xe0, //0x00002b5b movq %r12, %rax - 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x00002b5e leaq $64(%rsp), %r12 - 0x48, 0x85, 0xff, //0x00002b63 testq %rdi, %rdi - 0x0f, 0x85, 0x5c, 0x00, 0x00, 0x00, //0x00002b66 jne LBB0_571 - 0xe9, 0x06, 0xfe, 0xff, 0xff, //0x00002b6c jmp LBB0_550 - //0x00002b71 LBB0_563 - 0x48, 0x83, 0xff, 0x08, //0x00002b71 cmpq $8, %rdi - 0x0f, 0x82, 0xb9, 0xff, 0xff, 0xff, //0x00002b75 jb LBB0_564 - //0x00002b7b LBB0_568 - 0x49, 0x8b, 0x04, 0x24, //0x00002b7b movq (%r12), %rax - 0x49, 0x89, 0x00, //0x00002b7f movq %rax, (%r8) - 0x49, 0x83, 0xc4, 0x08, //0x00002b82 addq $8, %r12 - 0x49, 0x83, 0xc0, 0x08, //0x00002b86 addq $8, %r8 - 0x48, 0x83, 0xc7, 0xf8, //0x00002b8a addq $-8, %rdi - 0x48, 0x83, 0xff, 0x04, //0x00002b8e cmpq $4, %rdi - 0x0f, 0x8d, 0xa6, 0xff, 0xff, 0xff, //0x00002b92 jge LBB0_569 - //0x00002b98 LBB0_565 - 0x48, 0x83, 0xff, 0x02, //0x00002b98 cmpq $2, %rdi - 0x0f, 0x82, 0xb9, 0xff, 0xff, 0xff, //0x00002b9c jb LBB0_566 - //0x00002ba2 LBB0_570 - 0x41, 0x0f, 0xb7, 0x04, 0x24, //0x00002ba2 movzwl (%r12), %eax - 0x66, 0x41, 0x89, 0x00, //0x00002ba7 movw %ax, (%r8) - 0x49, 0x83, 0xc4, 0x02, //0x00002bab addq $2, %r12 - 0x49, 0x83, 0xc0, 0x02, //0x00002baf addq $2, %r8 - 0x48, 0x83, 0xc7, 0xfe, //0x00002bb3 addq $-2, %rdi - 0x4c, 0x89, 0xe0, //0x00002bb7 movq %r12, %rax - 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x00002bba leaq $64(%rsp), %r12 - 0x48, 0x85, 0xff, //0x00002bbf testq %rdi, %rdi - 0x0f, 0x84, 0xaf, 0xfd, 0xff, 0xff, //0x00002bc2 je LBB0_550 - //0x00002bc8 LBB0_571 - 0x8a, 0x00, //0x00002bc8 movb (%rax), %al - 0x41, 0x88, 0x00, //0x00002bca movb %al, (%r8) - 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x00002bcd leaq $64(%rsp), %r12 - 0xe9, 0xa0, 0xfd, 0xff, 0xff, //0x00002bd2 jmp LBB0_550 - //0x00002bd7 LBB0_572 - 0x49, 0x8b, 0x45, 0x00, //0x00002bd7 movq (%r13), %rax - 0x48, 0x0f, 0xbc, 0xcf, //0x00002bdb bsfq %rdi, %rcx - 0x4c, 0x29, 0xd1, //0x00002bdf subq %r10, %rcx - 0x4c, 0x8d, 0x34, 0x01, //0x00002be2 leaq (%rcx,%rax), %r14 - 0x49, 0x83, 0xc6, 0x01, //0x00002be6 addq $1, %r14 - 0x4d, 0x89, 0x30, //0x00002bea movq %r14, (%r8) - 0x49, 0x8b, 0x45, 0x00, //0x00002bed movq (%r13), %rax - 0x49, 0x39, 0xc6, //0x00002bf1 cmpq %rax, %r14 - 0x4c, 0x0f, 0x47, 0xf0, //0x00002bf4 cmovaq %rax, %r14 - 0x4d, 0x89, 0x30, //0x00002bf8 movq %r14, (%r8) - 0x4c, 0x8b, 0x7c, 0x24, 0x18, //0x00002bfb movq $24(%rsp), %r15 - 0xe9, 0xc1, 0xf8, 0xff, 0xff, //0x00002c00 jmp LBB0_487 - //0x00002c05 LBB0_578 - 0x66, 0x0f, 0xbc, 0xc9, //0x00002c05 bsfw %cx, %cx - 0x44, 0x0f, 0xb7, 0xf1, //0x00002c09 movzwl %cx, %r14d - 0x49, 0x29, 0xc6, //0x00002c0d subq %rax, %r14 - 0x4d, 0x89, 0x30, //0x00002c10 movq %r14, (%r8) - 0xe9, 0xae, 0xf8, 0xff, 0xff, //0x00002c13 jmp LBB0_487 - //0x00002c18 LBB0_579 - 0x4c, 0x29, 0xe2, //0x00002c18 subq %r12, %rdx - 0x48, 0x01, 0xf2, //0x00002c1b addq %rsi, %rdx - 0x48, 0x39, 0xca, //0x00002c1e cmpq %rcx, %rdx - 0x0f, 0x82, 0x4a, 0xfa, 0xff, 0xff, //0x00002c21 jb LBB0_517 - 0xe9, 0x5b, 0x20, 0x00, 0x00, //0x00002c27 jmp LBB0_1024 - //0x00002c2c LBB0_580 - 0x4c, 0x29, 0xe1, //0x00002c2c subq %r12, %rcx - 0x48, 0x01, 0xf1, //0x00002c2f addq %rsi, %rcx - 0x48, 0x39, 0xd1, //0x00002c32 cmpq %rdx, %rcx - 0x0f, 0x82, 0x16, 0xf6, 0xff, 0xff, //0x00002c35 jb LBB0_451 - 0xe9, 0x86, 0xf8, 0xff, 0xff, //0x00002c3b jmp LBB0_487 - //0x00002c40 LBB0_481 - 0x4d, 0x85, 0xff, //0x00002c40 testq %r15, %r15 - 0x0f, 0x85, 0x06, 0x01, 0x00, 0x00, //0x00002c43 jne LBB0_590 - 0x4b, 0x8d, 0x04, 0x2a, //0x00002c49 leaq (%r10,%r13), %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002c4d addq $1, %rax - 0x49, 0xf7, 0xd5, //0x00002c51 notq %r13 - 0x4d, 0x01, 0xc5, //0x00002c54 addq %r8, %r13 - //0x00002c57 LBB0_483 - 0x4c, 0x8b, 0x7c, 0x24, 0x18, //0x00002c57 movq $24(%rsp), %r15 - 0x4d, 0x85, 0xed, //0x00002c5c testq %r13, %r13 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00002c5f movq $8(%rsp), %r8 - 0x0f, 0x8e, 0xd6, 0x00, 0x00, 0x00, //0x00002c64 jle LBB0_589 - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x00002c6a movq $32(%rsp), %r11 - 0xe9, 0x18, 0x00, 0x00, 0x00, //0x00002c6f jmp LBB0_574 - //0x00002c74 LBB0_573 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002c74 movq $-2, %rcx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002c7b movl $2, %esi - 0x48, 0x01, 0xf0, //0x00002c80 addq %rsi, %rax - 0x49, 0x01, 0xcd, //0x00002c83 addq %rcx, %r13 - 0x0f, 0x8e, 0x2d, 0x00, 0x00, 0x00, //0x00002c86 jle LBB0_577 - //0x00002c8c LBB0_574 - 0x0f, 0xb6, 0x08, //0x00002c8c movzbl (%rax), %ecx - 0x80, 0xf9, 0x5c, //0x00002c8f cmpb $92, %cl - 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x00002c92 je LBB0_573 - 0x80, 0xf9, 0x22, //0x00002c98 cmpb $34, %cl - 0x0f, 0x84, 0x22, 0x00, 0x00, 0x00, //0x00002c9b je LBB0_581 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002ca1 movq $-1, %rcx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002ca8 movl $1, %esi - 0x48, 0x01, 0xf0, //0x00002cad addq %rsi, %rax - 0x49, 0x01, 0xcd, //0x00002cb0 addq %rcx, %r13 - 0x0f, 0x8f, 0xd3, 0xff, 0xff, 0xff, //0x00002cb3 jg LBB0_574 - //0x00002cb9 LBB0_577 - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x00002cb9 movq $40(%rsp), %r13 - 0xe9, 0x03, 0xf8, 0xff, 0xff, //0x00002cbe jmp LBB0_487 - //0x00002cc3 LBB0_581 - 0x4c, 0x29, 0xe0, //0x00002cc3 subq %r12, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002cc6 addq $1, %rax - 0x49, 0x89, 0x00, //0x00002cca movq %rax, (%r8) - 0x49, 0x89, 0xc6, //0x00002ccd movq %rax, %r14 - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x00002cd0 movq $40(%rsp), %r13 - 0xe9, 0xec, 0xf7, 0xff, 0xff, //0x00002cd5 jmp LBB0_487 - //0x00002cda LBB0_582 - 0x4c, 0x01, 0xe2, //0x00002cda addq %r12, %rdx - 0x48, 0x85, 0xc0, //0x00002cdd testq %rax, %rax - 0x0f, 0x85, 0x22, 0xf9, 0xff, 0xff, //0x00002ce0 jne LBB0_510 - 0xe9, 0x56, 0xf9, 0xff, 0xff, //0x00002ce6 jmp LBB0_515 - //0x00002ceb LBB0_583 - 0x4c, 0x01, 0xe1, //0x00002ceb addq %r12, %rcx - 0x48, 0x85, 0xc0, //0x00002cee testq %rax, %rax - 0x0f, 0x85, 0x01, 0xf5, 0xff, 0xff, //0x00002cf1 jne LBB0_444 - 0xe9, 0x33, 0xf5, 0xff, 0xff, //0x00002cf7 jmp LBB0_449 - //0x00002cfc LBB0_584 - 0x4d, 0x01, 0xe6, //0x00002cfc addq %r12, %r14 - 0x48, 0x83, 0xfa, 0x10, //0x00002cff cmpq $16, %rdx - 0x0f, 0x83, 0xe9, 0xf5, 0xff, 0xff, //0x00002d03 jae LBB0_458 - 0xe9, 0x31, 0xf6, 0xff, 0xff, //0x00002d09 jmp LBB0_461 - //0x00002d0e LBB0_585 - 0x4d, 0x29, 0xe6, //0x00002d0e subq %r12, %r14 - 0x49, 0x01, 0xc6, //0x00002d11 addq %rax, %r14 - //0x00002d14 LBB0_586 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00002d14 movq $8(%rsp), %r8 - 0x4d, 0x89, 0x30, //0x00002d19 movq %r14, (%r8) - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x00002d1c movq $32(%rsp), %r11 - 0xe9, 0xa0, 0xf7, 0xff, 0xff, //0x00002d21 jmp LBB0_487 - //0x00002d26 LBB0_587 - 0x4b, 0x8d, 0x04, 0x34, //0x00002d26 leaq (%r12,%r14), %rax - 0xe9, 0x28, 0xff, 0xff, 0xff, //0x00002d2a jmp LBB0_483 - //0x00002d2f LBB0_588 - 0x4d, 0x8b, 0x75, 0x00, //0x00002d2f movq (%r13), %r14 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00002d33 movq $8(%rsp), %r8 - 0x4d, 0x89, 0x30, //0x00002d38 movq %r14, (%r8) - 0xe9, 0x54, 0xf7, 0xff, 0xff, //0x00002d3b jmp LBB0_478 - //0x00002d40 LBB0_589 - 0x4c, 0x8b, 0x6c, 0x24, 0x28, //0x00002d40 movq $40(%rsp), %r13 - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x00002d45 movq $32(%rsp), %r11 - 0xe9, 0x77, 0xf7, 0xff, 0xff, //0x00002d4a jmp LBB0_487 - //0x00002d4f LBB0_590 - 0x49, 0x8d, 0x40, 0xff, //0x00002d4f leaq $-1(%r8), %rax - 0x4c, 0x39, 0xe8, //0x00002d53 cmpq %r13, %rax - 0x0f, 0x85, 0x0a, 0x00, 0x00, 0x00, //0x00002d56 jne LBB0_592 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00002d5c movq $8(%rsp), %r8 - 0xe9, 0x29, 0xf7, 0xff, 0xff, //0x00002d61 jmp LBB0_477 - //0x00002d66 LBB0_592 - 0x4b, 0x8d, 0x04, 0x2a, //0x00002d66 leaq (%r10,%r13), %rax - 0x48, 0x83, 0xc0, 0x02, //0x00002d6a addq $2, %rax - 0x4d, 0x29, 0xe8, //0x00002d6e subq %r13, %r8 - 0x49, 0x83, 0xc0, 0xfe, //0x00002d71 addq $-2, %r8 - 0x4d, 0x89, 0xc5, //0x00002d75 movq %r8, %r13 - 0xe9, 0xda, 0xfe, 0xff, 0xff, //0x00002d78 jmp LBB0_483 - 0x90, 0x90, 0x90, //0x00002d7d .p2align 4, 0x90 - //0x00002d80 LBB0_519 - 0x49, 0x83, 0xc7, 0x10, //0x00002d80 addq $16, %r15 - 0x4c, 0x89, 0xf0, //0x00002d84 movq %r14, %rax - 0x4c, 0x3b, 0xbc, 0x24, 0xa0, 0x00, 0x00, 0x00, //0x00002d87 cmpq $160(%rsp), %r15 - 0x0f, 0x85, 0x92, 0xd5, 0xff, 0xff, //0x00002d8f jne LBB0_2 - 0xe9, 0x52, 0x00, 0x00, 0x00, //0x00002d95 jmp LBB0_520 - //0x00002d9a LBB0_33 - 0x4c, 0x29, 0xe2, //0x00002d9a subq %r12, %rdx - 0x48, 0x01, 0xfa, //0x00002d9d addq %rdi, %rdx - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00002da0 movq $8(%rsp), %r8 - 0x48, 0x39, 0xca, //0x00002da5 cmpq %rcx, %rdx - 0x0f, 0x82, 0x53, 0xd7, 0xff, 0xff, //0x00002da8 jb LBB0_32 - 0xe9, 0x01, 0xd7, 0xff, 0xff, //0x00002dae jmp LBB0_34 - //0x00002db3 LBB0_593 - 0x4c, 0x29, 0xe2, //0x00002db3 subq %r12, %rdx - 0x48, 0x01, 0xf2, //0x00002db6 addq %rsi, %rdx - 0x48, 0x39, 0xca, //0x00002db9 cmpq %rcx, %rdx - 0x0f, 0x82, 0xc7, 0xf2, 0xff, 0xff, //0x00002dbc jb LBB0_419 - 0xe9, 0xd4, 0xf2, 0xff, 0xff, //0x00002dc2 jmp LBB0_420 - //0x00002dc7 LBB0_594 - 0x4d, 0x01, 0xe6, //0x00002dc7 addq %r12, %r14 - 0x4c, 0x89, 0xf2, //0x00002dca movq %r14, %rdx - 0x48, 0x85, 0xf6, //0x00002dcd testq %rsi, %rsi - 0x0f, 0x85, 0x94, 0xd6, 0xff, 0xff, //0x00002dd0 jne LBB0_25 - 0xe9, 0xcd, 0xd6, 0xff, 0xff, //0x00002dd6 jmp LBB0_30 - //0x00002ddb LBB0_595 - 0x4c, 0x01, 0xe2, //0x00002ddb addq %r12, %rdx - 0x48, 0x85, 0xc0, //0x00002dde testq %rax, %rax - 0x0f, 0x85, 0x41, 0xf2, 0xff, 0xff, //0x00002de1 jne LBB0_411 - 0xe9, 0x73, 0xf2, 0xff, 0xff, //0x00002de7 jmp LBB0_416 - //0x00002dec LBB0_520 - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00002dec movq $16(%rsp), %r12 - 0x4d, 0x85, 0xe4, //0x00002df1 testq %r12, %r12 - 0x0f, 0x84, 0x7e, 0x00, 0x00, 0x00, //0x00002df4 je LBB0_596 - 0x4c, 0x89, 0x6c, 0x24, 0x28, //0x00002dfa movq %r13, $40(%rsp) - 0xc5, 0xfa, 0x6f, 0x05, 0x09, 0xd4, 0xff, 0xff, //0x00002dff vmovdqu $-11255(%rip), %xmm0 /* LCPI0_12+0(%rip) */ - 0xc4, 0xc1, 0x7a, 0x7f, 0x04, 0x24, //0x00002e07 vmovdqu %xmm0, (%r12) - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002e0d movq $-1, %r10 - 0xc5, 0xfe, 0x6f, 0x2d, 0xe4, 0xd1, 0xff, 0xff, //0x00002e14 vmovdqu $-11804(%rip), %ymm5 /* LCPI0_0+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x5c, 0xd2, 0xff, 0xff, //0x00002e1c vmovdqu $-11684(%rip), %ymm6 /* LCPI0_7+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x74, 0xd2, 0xff, 0xff, //0x00002e24 vmovdqu $-11660(%rip), %ymm7 /* LCPI0_8+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0xec, 0xd2, 0xff, 0xff, //0x00002e2c vmovdqu $-11540(%rip), %ymm8 /* LCPI0_13+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x0d, 0x04, 0xd3, 0xff, 0xff, //0x00002e34 vmovdqu $-11516(%rip), %ymm9 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x15, 0x1c, 0xd3, 0xff, 0xff, //0x00002e3c vmovdqu $-11492(%rip), %ymm10 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0x34, 0xd3, 0xff, 0xff, //0x00002e44 vmovdqu $-11468(%rip), %ymm11 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0xec, 0xd1, 0xff, 0xff, //0x00002e4c vmovdqu $-11796(%rip), %ymm12 /* LCPI0_2+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0x44, 0xd3, 0xff, 0xff, //0x00002e54 vmovdqu $-11452(%rip), %ymm13 /* LCPI0_17+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0x5c, 0xd3, 0xff, 0xff, //0x00002e5c vmovdqu $-11428(%rip), %ymm14 /* LCPI0_18+0(%rip) */ - 0xc5, 0x7a, 0x6f, 0x3d, 0xb4, 0xd3, 0xff, 0xff, //0x00002e64 vmovdqu $-11340(%rip), %xmm15 /* LCPI0_19+0(%rip) */ - 0x4c, 0x8d, 0x35, 0xb9, 0x2b, 0x00, 0x00, //0x00002e6c leaq $11193(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0xe9, 0x68, 0x02, 0x00, 0x00, //0x00002e73 jmp LBB0_654 - //0x00002e78 LBB0_596 - 0x4d, 0x89, 0xef, //0x00002e78 movq %r13, %r15 - 0x4c, 0x89, 0xd8, //0x00002e7b movq %r11, %rax - 0x4d, 0x8b, 0x1b, //0x00002e7e movq (%r11), %r11 - 0x48, 0x8b, 0x58, 0x08, //0x00002e81 movq $8(%rax), %rbx - 0x49, 0x8b, 0x38, //0x00002e85 movq (%r8), %rdi - 0x48, 0x39, 0xdf, //0x00002e88 cmpq %rbx, %rdi - 0x0f, 0x83, 0x26, 0x00, 0x00, 0x00, //0x00002e8b jae LBB0_601 - 0x41, 0x8a, 0x04, 0x3b, //0x00002e91 movb (%r11,%rdi), %al - 0x3c, 0x0d, //0x00002e95 cmpb $13, %al - 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00002e97 je LBB0_601 - 0x3c, 0x20, //0x00002e9d cmpb $32, %al - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002e9f je LBB0_601 - 0x04, 0xf7, //0x00002ea5 addb $-9, %al - 0x3c, 0x01, //0x00002ea7 cmpb $1, %al - 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x00002ea9 jbe LBB0_601 - 0x48, 0x89, 0xf8, //0x00002eaf movq %rdi, %rax - 0xe9, 0x4f, 0x1c, 0x00, 0x00, //0x00002eb2 jmp LBB0_632 - //0x00002eb7 LBB0_601 - 0x48, 0x8d, 0x47, 0x01, //0x00002eb7 leaq $1(%rdi), %rax - 0x48, 0x39, 0xd8, //0x00002ebb cmpq %rbx, %rax - 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x00002ebe jae LBB0_605 - 0x41, 0x8a, 0x0c, 0x03, //0x00002ec4 movb (%r11,%rax), %cl - 0x80, 0xf9, 0x0d, //0x00002ec8 cmpb $13, %cl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00002ecb je LBB0_605 - 0x80, 0xf9, 0x20, //0x00002ed1 cmpb $32, %cl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x00002ed4 je LBB0_605 - 0x80, 0xc1, 0xf7, //0x00002eda addb $-9, %cl - 0x80, 0xf9, 0x01, //0x00002edd cmpb $1, %cl - 0x0f, 0x87, 0x20, 0x1c, 0x00, 0x00, //0x00002ee0 ja LBB0_632 - //0x00002ee6 LBB0_605 - 0x48, 0x8d, 0x47, 0x02, //0x00002ee6 leaq $2(%rdi), %rax - 0x48, 0x39, 0xd8, //0x00002eea cmpq %rbx, %rax - 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x00002eed jae LBB0_609 - 0x41, 0x8a, 0x0c, 0x03, //0x00002ef3 movb (%r11,%rax), %cl - 0x80, 0xf9, 0x0d, //0x00002ef7 cmpb $13, %cl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00002efa je LBB0_609 - 0x80, 0xf9, 0x20, //0x00002f00 cmpb $32, %cl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x00002f03 je LBB0_609 - 0x80, 0xc1, 0xf7, //0x00002f09 addb $-9, %cl - 0x80, 0xf9, 0x01, //0x00002f0c cmpb $1, %cl - 0x0f, 0x87, 0xf1, 0x1b, 0x00, 0x00, //0x00002f0f ja LBB0_632 - //0x00002f15 LBB0_609 - 0x48, 0x8d, 0x47, 0x03, //0x00002f15 leaq $3(%rdi), %rax - 0x48, 0x39, 0xd8, //0x00002f19 cmpq %rbx, %rax - 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x00002f1c jae LBB0_613 - 0x41, 0x8a, 0x0c, 0x03, //0x00002f22 movb (%r11,%rax), %cl - 0x80, 0xf9, 0x0d, //0x00002f26 cmpb $13, %cl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00002f29 je LBB0_613 - 0x80, 0xf9, 0x20, //0x00002f2f cmpb $32, %cl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x00002f32 je LBB0_613 - 0x80, 0xc1, 0xf7, //0x00002f38 addb $-9, %cl - 0x80, 0xf9, 0x01, //0x00002f3b cmpb $1, %cl - 0x0f, 0x87, 0xc2, 0x1b, 0x00, 0x00, //0x00002f3e ja LBB0_632 - //0x00002f44 LBB0_613 - 0x48, 0x8d, 0x47, 0x04, //0x00002f44 leaq $4(%rdi), %rax - 0x48, 0x89, 0xda, //0x00002f48 movq %rbx, %rdx - 0x48, 0x29, 0xc2, //0x00002f4b subq %rax, %rdx - 0x0f, 0x86, 0xc3, 0x24, 0x00, 0x00, //0x00002f4e jbe LBB0_1103 - 0x48, 0x83, 0xfa, 0x20, //0x00002f54 cmpq $32, %rdx - 0x0f, 0x82, 0x45, 0x26, 0x00, 0x00, //0x00002f58 jb LBB0_1121 - 0x48, 0xc7, 0xc2, 0xfc, 0xff, 0xff, 0xff, //0x00002f5e movq $-4, %rdx - 0x48, 0x29, 0xfa, //0x00002f65 subq %rdi, %rdx - 0xc5, 0xfe, 0x6f, 0x05, 0x90, 0xd0, 0xff, 0xff, //0x00002f68 vmovdqu $-12144(%rip), %ymm0 /* LCPI0_0+0(%rip) */ - //0x00002f70 .p2align 4, 0x90 - //0x00002f70 LBB0_616 - 0xc4, 0xc1, 0x7e, 0x6f, 0x0c, 0x03, //0x00002f70 vmovdqu (%r11,%rax), %ymm1 - 0xc4, 0xe2, 0x7d, 0x00, 0xd1, //0x00002f76 vpshufb %ymm1, %ymm0, %ymm2 - 0xc5, 0xf5, 0x74, 0xca, //0x00002f7b vpcmpeqb %ymm2, %ymm1, %ymm1 - 0xc5, 0xfd, 0xd7, 0xc9, //0x00002f7f vpmovmskb %ymm1, %ecx - 0x83, 0xf9, 0xff, //0x00002f83 cmpl $-1, %ecx - 0x0f, 0x85, 0x62, 0x1b, 0x00, 0x00, //0x00002f86 jne LBB0_631 - 0x48, 0x83, 0xc0, 0x20, //0x00002f8c addq $32, %rax - 0x48, 0x8d, 0x0c, 0x13, //0x00002f90 leaq (%rbx,%rdx), %rcx - 0x48, 0x83, 0xc1, 0xe0, //0x00002f94 addq $-32, %rcx - 0x48, 0x83, 0xc2, 0xe0, //0x00002f98 addq $-32, %rdx - 0x48, 0x83, 0xf9, 0x1f, //0x00002f9c cmpq $31, %rcx - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00002fa0 ja LBB0_616 - 0x4c, 0x89, 0xd8, //0x00002fa6 movq %r11, %rax - 0x48, 0x29, 0xd0, //0x00002fa9 subq %rdx, %rax - 0x48, 0x01, 0xda, //0x00002fac addq %rbx, %rdx - 0x48, 0x85, 0xd2, //0x00002faf testq %rdx, %rdx - 0x0f, 0x84, 0x3c, 0x00, 0x00, 0x00, //0x00002fb2 je LBB0_624 - //0x00002fb8 LBB0_619 - 0x4c, 0x8d, 0x04, 0x10, //0x00002fb8 leaq (%rax,%rdx), %r8 - 0x31, 0xf6, //0x00002fbc xorl %esi, %esi - 0x48, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002fbe movabsq $4294977024, %rcx - //0x00002fc8 LBB0_620 - 0x0f, 0xbe, 0x3c, 0x30, //0x00002fc8 movsbl (%rax,%rsi), %edi - 0x83, 0xff, 0x20, //0x00002fcc cmpl $32, %edi - 0x0f, 0x87, 0x90, 0x25, 0x00, 0x00, //0x00002fcf ja LBB0_1119 - 0x48, 0x0f, 0xa3, 0xf9, //0x00002fd5 btq %rdi, %rcx - 0x0f, 0x83, 0x86, 0x25, 0x00, 0x00, //0x00002fd9 jae LBB0_1119 - 0x48, 0x83, 0xc6, 0x01, //0x00002fdf addq $1, %rsi - 0x48, 0x39, 0xf2, //0x00002fe3 cmpq %rsi, %rdx - 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x00002fe6 jne LBB0_620 - 0x4c, 0x89, 0xc0, //0x00002fec movq %r8, %rax - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00002fef movq $8(%rsp), %r8 - //0x00002ff4 LBB0_624 - 0x4c, 0x29, 0xd8, //0x00002ff4 subq %r11, %rax - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00002ff7 movq $-1, %r13 - 0x48, 0x39, 0xd8, //0x00002ffe cmpq %rbx, %rax - 0x0f, 0x82, 0xff, 0x1a, 0x00, 0x00, //0x00003001 jb LBB0_632 - 0xe9, 0x89, 0x1c, 0x00, 0x00, //0x00003007 jmp LBB0_1026 - //0x0000300c LBB0_625 - 0x3c, 0x5d, //0x0000300c cmpb $93, %al - 0x0f, 0x84, 0x10, 0x00, 0x00, 0x00, //0x0000300e je LBB0_628 - 0xe9, 0x6e, 0x1c, 0x00, 0x00, //0x00003014 jmp LBB0_1024 - //0x00003019 LBB0_626 - 0x4d, 0x89, 0xce, //0x00003019 movq %r9, %r14 - //0x0000301c LBB0_627 - 0x3c, 0x7d, //0x0000301c cmpb $125, %al - 0x0f, 0x85, 0x63, 0x1c, 0x00, 0x00, //0x0000301e jne LBB0_1024 - //0x00003024 LBB0_628 - 0x49, 0x83, 0xc6, 0xff, //0x00003024 addq $-1, %r14 - 0x4d, 0x89, 0x30, //0x00003028 movq %r14, (%r8) - 0x49, 0xc7, 0xc5, 0xdf, 0xff, 0xff, 0xff, //0x0000302b movq $-33, %r13 - 0xe9, 0x5e, 0x1c, 0x00, 0x00, //0x00003032 jmp LBB0_1026 - //0x00003037 LBB0_1029 - 0x49, 0xf7, 0xdb, //0x00003037 negq %r11 - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x0000303a movq $16(%rsp), %r12 - 0xc5, 0xfe, 0x6f, 0x2d, 0xb9, 0xcf, 0xff, 0xff, //0x0000303f vmovdqu $-12359(%rip), %ymm5 /* LCPI0_0+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x31, 0xd0, 0xff, 0xff, //0x00003047 vmovdqu $-12239(%rip), %ymm6 /* LCPI0_7+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x49, 0xd0, 0xff, 0xff, //0x0000304f vmovdqu $-12215(%rip), %ymm7 /* LCPI0_8+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0xc1, 0xd0, 0xff, 0xff, //0x00003057 vmovdqu $-12095(%rip), %ymm8 /* LCPI0_13+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x0d, 0xd9, 0xd0, 0xff, 0xff, //0x0000305f vmovdqu $-12071(%rip), %ymm9 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x15, 0xf1, 0xd0, 0xff, 0xff, //0x00003067 vmovdqu $-12047(%rip), %ymm10 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0x09, 0xd1, 0xff, 0xff, //0x0000306f vmovdqu $-12023(%rip), %ymm11 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0xc1, 0xcf, 0xff, 0xff, //0x00003077 vmovdqu $-12351(%rip), %ymm12 /* LCPI0_2+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0x19, 0xd1, 0xff, 0xff, //0x0000307f vmovdqu $-12007(%rip), %ymm13 /* LCPI0_17+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0x31, 0xd1, 0xff, 0xff, //0x00003087 vmovdqu $-11983(%rip), %ymm14 /* LCPI0_18+0(%rip) */ - 0x4d, 0x85, 0xdb, //0x0000308f testq %r11, %r11 - 0x0f, 0x88, 0x65, 0x1c, 0x00, 0x00, //0x00003092 js LBB0_1030 - //0x00003098 LBB0_936 - 0x48, 0x8b, 0x0e, //0x00003098 movq (%rsi), %rcx - 0x48, 0x83, 0xc1, 0xff, //0x0000309b addq $-1, %rcx - 0x4c, 0x8b, 0x4c, 0x24, 0x18, //0x0000309f movq $24(%rsp), %r9 - //0x000030a4 LBB0_651 - 0x4c, 0x01, 0xd9, //0x000030a4 addq %r11, %rcx - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x000030a7 movq $8(%rsp), %r8 - 0x49, 0x89, 0x08, //0x000030ac movq %rcx, (%r8) - 0x4d, 0x85, 0xc9, //0x000030af testq %r9, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x000030b2 movq $32(%rsp), %r11 - 0x0f, 0x8e, 0xd8, 0x1b, 0x00, 0x00, //0x000030b7 jle LBB0_1026 - 0x90, 0x90, 0x90, //0x000030bd .p2align 4, 0x90 - //0x000030c0 LBB0_652 - 0x49, 0x8b, 0x14, 0x24, //0x000030c0 movq (%r12), %rdx - 0x4d, 0x89, 0xd5, //0x000030c4 movq %r10, %r13 - 0x48, 0x85, 0xd2, //0x000030c7 testq %rdx, %rdx - 0x0f, 0x85, 0x10, 0x00, 0x00, 0x00, //0x000030ca jne LBB0_654 - 0xe9, 0xc0, 0x1b, 0x00, 0x00, //0x000030d0 jmp LBB0_1026 - //0x000030d5 LBB0_650 - 0x4c, 0x89, 0xe9, //0x000030d5 movq %r13, %rcx - 0xe9, 0xc7, 0xff, 0xff, 0xff, //0x000030d8 jmp LBB0_651 - 0x90, 0x90, 0x90, //0x000030dd .p2align 4, 0x90 - //0x000030e0 LBB0_654 - 0x4c, 0x89, 0xd1, //0x000030e0 movq %r10, %rcx - 0x4d, 0x8b, 0x3b, //0x000030e3 movq (%r11), %r15 - 0x49, 0x8b, 0x53, 0x08, //0x000030e6 movq $8(%r11), %rdx - 0x49, 0x8b, 0x38, //0x000030ea movq (%r8), %rdi - 0x48, 0x39, 0xd7, //0x000030ed cmpq %rdx, %rdi - 0x0f, 0x83, 0x2a, 0x00, 0x00, 0x00, //0x000030f0 jae LBB0_659 - 0x41, 0x8a, 0x04, 0x3f, //0x000030f6 movb (%r15,%rdi), %al - 0x3c, 0x0d, //0x000030fa cmpb $13, %al - 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x000030fc je LBB0_659 - 0x3c, 0x20, //0x00003102 cmpb $32, %al - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00003104 je LBB0_659 - 0x04, 0xf7, //0x0000310a addb $-9, %al - 0x3c, 0x01, //0x0000310c cmpb $1, %al - 0x0f, 0x86, 0x0c, 0x00, 0x00, 0x00, //0x0000310e jbe LBB0_659 - 0x49, 0x89, 0xfa, //0x00003114 movq %rdi, %r10 - 0xe9, 0x76, 0x01, 0x00, 0x00, //0x00003117 jmp LBB0_684 - 0x90, 0x90, 0x90, 0x90, //0x0000311c .p2align 4, 0x90 - //0x00003120 LBB0_659 - 0x4c, 0x8d, 0x57, 0x01, //0x00003120 leaq $1(%rdi), %r10 - 0x49, 0x39, 0xd2, //0x00003124 cmpq %rdx, %r10 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00003127 jae LBB0_663 - 0x43, 0x8a, 0x1c, 0x17, //0x0000312d movb (%r15,%r10), %bl - 0x80, 0xfb, 0x0d, //0x00003131 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00003134 je LBB0_663 - 0x80, 0xfb, 0x20, //0x0000313a cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000313d je LBB0_663 - 0x80, 0xc3, 0xf7, //0x00003143 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00003146 cmpb $1, %bl - 0x0f, 0x87, 0x43, 0x01, 0x00, 0x00, //0x00003149 ja LBB0_684 - 0x90, //0x0000314f .p2align 4, 0x90 - //0x00003150 LBB0_663 - 0x4c, 0x8d, 0x57, 0x02, //0x00003150 leaq $2(%rdi), %r10 - 0x49, 0x39, 0xd2, //0x00003154 cmpq %rdx, %r10 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00003157 jae LBB0_667 - 0x43, 0x8a, 0x1c, 0x17, //0x0000315d movb (%r15,%r10), %bl - 0x80, 0xfb, 0x0d, //0x00003161 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00003164 je LBB0_667 - 0x80, 0xfb, 0x20, //0x0000316a cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000316d je LBB0_667 - 0x80, 0xc3, 0xf7, //0x00003173 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00003176 cmpb $1, %bl - 0x0f, 0x87, 0x13, 0x01, 0x00, 0x00, //0x00003179 ja LBB0_684 - 0x90, //0x0000317f .p2align 4, 0x90 - //0x00003180 LBB0_667 - 0x4c, 0x8d, 0x57, 0x03, //0x00003180 leaq $3(%rdi), %r10 - 0x49, 0x39, 0xd2, //0x00003184 cmpq %rdx, %r10 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00003187 jae LBB0_671 - 0x43, 0x8a, 0x1c, 0x17, //0x0000318d movb (%r15,%r10), %bl - 0x80, 0xfb, 0x0d, //0x00003191 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00003194 je LBB0_671 - 0x80, 0xfb, 0x20, //0x0000319a cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000319d je LBB0_671 - 0x80, 0xc3, 0xf7, //0x000031a3 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x000031a6 cmpb $1, %bl - 0x0f, 0x87, 0xe3, 0x00, 0x00, 0x00, //0x000031a9 ja LBB0_684 - 0x90, //0x000031af .p2align 4, 0x90 - //0x000031b0 LBB0_671 - 0x4c, 0x8d, 0x57, 0x04, //0x000031b0 leaq $4(%rdi), %r10 - 0x48, 0x89, 0xd6, //0x000031b4 movq %rdx, %rsi - 0x4c, 0x29, 0xd6, //0x000031b7 subq %r10, %rsi - 0x0f, 0x86, 0xb5, 0x1a, 0x00, 0x00, //0x000031ba jbe LBB0_1020 - 0x48, 0x83, 0xfe, 0x20, //0x000031c0 cmpq $32, %rsi - 0x0f, 0x82, 0x98, 0x12, 0x00, 0x00, //0x000031c4 jb LBB0_937 - 0x48, 0xc7, 0xc6, 0xfc, 0xff, 0xff, 0xff, //0x000031ca movq $-4, %rsi - 0x48, 0x29, 0xfe, //0x000031d1 subq %rdi, %rsi - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000031d4 .p2align 4, 0x90 - //0x000031e0 LBB0_674 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x17, //0x000031e0 vmovdqu (%r15,%r10), %ymm0 - 0xc4, 0xe2, 0x55, 0x00, 0xc8, //0x000031e6 vpshufb %ymm0, %ymm5, %ymm1 - 0xc5, 0xfd, 0x74, 0xc1, //0x000031eb vpcmpeqb %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf8, //0x000031ef vpmovmskb %ymm0, %edi - 0x83, 0xff, 0xff, //0x000031f3 cmpl $-1, %edi - 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x000031f6 jne LBB0_683 - 0x49, 0x83, 0xc2, 0x20, //0x000031fc addq $32, %r10 - 0x48, 0x8d, 0x3c, 0x32, //0x00003200 leaq (%rdx,%rsi), %rdi - 0x48, 0x83, 0xc7, 0xe0, //0x00003204 addq $-32, %rdi - 0x48, 0x83, 0xc6, 0xe0, //0x00003208 addq $-32, %rsi - 0x48, 0x83, 0xff, 0x1f, //0x0000320c cmpq $31, %rdi - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00003210 ja LBB0_674 - 0x4d, 0x89, 0xfa, //0x00003216 movq %r15, %r10 - 0x49, 0x29, 0xf2, //0x00003219 subq %rsi, %r10 - 0x48, 0x01, 0xd6, //0x0000321c addq %rdx, %rsi - 0x48, 0x85, 0xf6, //0x0000321f testq %rsi, %rsi - 0x0f, 0x84, 0x3f, 0x00, 0x00, 0x00, //0x00003222 je LBB0_682 - //0x00003228 LBB0_677 - 0x4d, 0x8d, 0x04, 0x32, //0x00003228 leaq (%r10,%rsi), %r8 - 0x31, 0xff, //0x0000322c xorl %edi, %edi - 0x90, 0x90, //0x0000322e .p2align 4, 0x90 - //0x00003230 LBB0_678 - 0x41, 0x0f, 0xbe, 0x1c, 0x3a, //0x00003230 movsbl (%r10,%rdi), %ebx - 0x83, 0xfb, 0x20, //0x00003235 cmpl $32, %ebx - 0x0f, 0x87, 0x07, 0x11, 0x00, 0x00, //0x00003238 ja LBB0_928 - 0x48, 0xb8, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000323e movabsq $4294977024, %rax - 0x48, 0x0f, 0xa3, 0xd8, //0x00003248 btq %rbx, %rax - 0x0f, 0x83, 0xf3, 0x10, 0x00, 0x00, //0x0000324c jae LBB0_928 - 0x48, 0x83, 0xc7, 0x01, //0x00003252 addq $1, %rdi - 0x48, 0x39, 0xfe, //0x00003256 cmpq %rdi, %rsi - 0x0f, 0x85, 0xd1, 0xff, 0xff, 0xff, //0x00003259 jne LBB0_678 - 0x4d, 0x89, 0xc2, //0x0000325f movq %r8, %r10 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00003262 movq $8(%rsp), %r8 - //0x00003267 LBB0_682 - 0x4d, 0x29, 0xfa, //0x00003267 subq %r15, %r10 - 0x49, 0x39, 0xd2, //0x0000326a cmpq %rdx, %r10 - 0x0f, 0x82, 0x1f, 0x00, 0x00, 0x00, //0x0000326d jb LBB0_684 - 0xe9, 0x00, 0x1a, 0x00, 0x00, //0x00003273 jmp LBB0_1021 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003278 .p2align 4, 0x90 - //0x00003280 LBB0_683 - 0xf7, 0xd7, //0x00003280 notl %edi - 0x44, 0x0f, 0xbc, 0xd7, //0x00003282 bsfl %edi, %r10d - 0x49, 0x29, 0xf2, //0x00003286 subq %rsi, %r10 - 0x49, 0x39, 0xd2, //0x00003289 cmpq %rdx, %r10 - 0x0f, 0x83, 0xe6, 0x19, 0x00, 0x00, //0x0000328c jae LBB0_1021 - //0x00003292 LBB0_684 - 0x49, 0x8d, 0x52, 0x01, //0x00003292 leaq $1(%r10), %rdx - 0x49, 0x89, 0x10, //0x00003296 movq %rdx, (%r8) - 0x43, 0x0f, 0xbe, 0x3c, 0x17, //0x00003299 movsbl (%r15,%r10), %edi - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x0000329e movq $-1, %r13 - 0x85, 0xff, //0x000032a5 testl %edi, %edi - 0x0f, 0x84, 0xe8, 0x19, 0x00, 0x00, //0x000032a7 je LBB0_1026 - 0x49, 0x8b, 0x34, 0x24, //0x000032ad movq (%r12), %rsi - 0x48, 0x8d, 0x56, 0xff, //0x000032b1 leaq $-1(%rsi), %rdx - 0x41, 0x8b, 0x1c, 0xf4, //0x000032b5 movl (%r12,%rsi,8), %ebx - 0x48, 0x83, 0xf9, 0xff, //0x000032b9 cmpq $-1, %rcx - 0x4c, 0x0f, 0x45, 0xd1, //0x000032bd cmovneq %rcx, %r10 - 0x83, 0xc3, 0xff, //0x000032c1 addl $-1, %ebx - 0x83, 0xfb, 0x05, //0x000032c4 cmpl $5, %ebx - 0x0f, 0x87, 0x20, 0x00, 0x00, 0x00, //0x000032c7 ja LBB0_690 - 0x49, 0x63, 0x0c, 0x9e, //0x000032cd movslq (%r14,%rbx,4), %rcx - 0x4c, 0x01, 0xf1, //0x000032d1 addq %r14, %rcx - 0xff, 0xe1, //0x000032d4 jmpq *%rcx - //0x000032d6 LBB0_687 - 0x83, 0xff, 0x2c, //0x000032d6 cmpl $44, %edi - 0x0f, 0x84, 0x04, 0x06, 0x00, 0x00, //0x000032d9 je LBB0_776 - 0x83, 0xff, 0x5d, //0x000032df cmpl $93, %edi - 0x0f, 0x84, 0xe6, 0x05, 0x00, 0x00, //0x000032e2 je LBB0_689 - 0xe9, 0xa1, 0x19, 0x00, 0x00, //0x000032e8 jmp LBB0_1025 - //0x000032ed LBB0_690 - 0x49, 0x89, 0x14, 0x24, //0x000032ed movq %rdx, (%r12) - 0x83, 0xff, 0x7b, //0x000032f1 cmpl $123, %edi - 0x0f, 0x86, 0xc3, 0x01, 0x00, 0x00, //0x000032f4 jbe LBB0_718 - 0xe9, 0x8f, 0x19, 0x00, 0x00, //0x000032fa jmp LBB0_1025 - //0x000032ff LBB0_691 - 0x83, 0xff, 0x2c, //0x000032ff cmpl $44, %edi - 0x0f, 0x85, 0xbd, 0x05, 0x00, 0x00, //0x00003302 jne LBB0_692 - 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00003308 cmpq $4095, %rsi - 0x0f, 0x8f, 0x95, 0x19, 0x00, 0x00, //0x0000330f jg LBB0_1108 - 0x48, 0x8d, 0x4e, 0x01, //0x00003315 leaq $1(%rsi), %rcx - 0x49, 0x89, 0x0c, 0x24, //0x00003319 movq %rcx, (%r12) - 0x49, 0xc7, 0x44, 0xf4, 0x08, 0x03, 0x00, 0x00, 0x00, //0x0000331d movq $3, $8(%r12,%rsi,8) - 0xe9, 0x95, 0xfd, 0xff, 0xff, //0x00003326 jmp LBB0_652 - //0x0000332b LBB0_693 - 0x40, 0x80, 0xff, 0x22, //0x0000332b cmpb $34, %dil - 0x0f, 0x85, 0x59, 0x19, 0x00, 0x00, //0x0000332f jne LBB0_1025 - 0x49, 0xc7, 0x04, 0xf4, 0x04, 0x00, 0x00, 0x00, //0x00003335 movq $4, (%r12,%rsi,8) - 0x4d, 0x8b, 0x08, //0x0000333d movq (%r8), %r9 - 0x48, 0x8b, 0x44, 0x24, 0x28, //0x00003340 movq $40(%rsp), %rax - 0x4c, 0x8b, 0x18, //0x00003345 movq (%rax), %r11 - 0x4c, 0x89, 0xd9, //0x00003348 movq %r11, %rcx - 0x4c, 0x29, 0xc9, //0x0000334b subq %r9, %rcx - 0x0f, 0x84, 0x09, 0x22, 0x00, 0x00, //0x0000334e je LBB0_1129 - 0x48, 0x83, 0xf9, 0x40, //0x00003354 cmpq $64, %rcx - 0x0f, 0x82, 0xd1, 0x11, 0x00, 0x00, //0x00003358 jb LBB0_944 - 0x4c, 0x89, 0xcf, //0x0000335e movq %r9, %rdi - 0x48, 0xf7, 0xd7, //0x00003361 notq %rdi - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003364 movq $-1, %r8 - 0x4d, 0x89, 0xcd, //0x0000336b movq %r9, %r13 - 0x45, 0x31, 0xf6, //0x0000336e xorl %r14d, %r14d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003371 .p2align 4, 0x90 - //0x00003380 LBB0_697 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x2f, //0x00003380 vmovdqu (%r15,%r13), %ymm0 - 0xc4, 0x81, 0x7e, 0x6f, 0x4c, 0x2f, 0x20, //0x00003386 vmovdqu $32(%r15,%r13), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x0000338d vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00003391 vpmovmskb %ymm2, %edx - 0xc5, 0xf5, 0x74, 0xd6, //0x00003395 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xda, //0x00003399 vpmovmskb %ymm2, %ebx - 0xc5, 0xfd, 0x74, 0xc7, //0x0000339d vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x000033a1 vpmovmskb %ymm0, %esi - 0xc5, 0xf5, 0x74, 0xc7, //0x000033a5 vpcmpeqb %ymm7, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x000033a9 vpmovmskb %ymm0, %eax - 0x48, 0xc1, 0xe3, 0x20, //0x000033ad shlq $32, %rbx - 0x48, 0x09, 0xda, //0x000033b1 orq %rbx, %rdx - 0x48, 0xc1, 0xe0, 0x20, //0x000033b4 shlq $32, %rax - 0x48, 0x09, 0xc6, //0x000033b8 orq %rax, %rsi - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000033bb jne LBB0_706 - 0x4d, 0x85, 0xf6, //0x000033c1 testq %r14, %r14 - 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x000033c4 jne LBB0_708 - 0x45, 0x31, 0xf6, //0x000033ca xorl %r14d, %r14d - 0x48, 0x85, 0xd2, //0x000033cd testq %rdx, %rdx - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x000033d0 jne LBB0_709 - //0x000033d6 LBB0_700 - 0x48, 0x83, 0xc1, 0xc0, //0x000033d6 addq $-64, %rcx - 0x48, 0x83, 0xc7, 0xc0, //0x000033da addq $-64, %rdi - 0x49, 0x83, 0xc5, 0x40, //0x000033de addq $64, %r13 - 0x48, 0x83, 0xf9, 0x3f, //0x000033e2 cmpq $63, %rcx - 0x0f, 0x87, 0x94, 0xff, 0xff, 0xff, //0x000033e6 ja LBB0_697 - 0xe9, 0xd7, 0x0d, 0x00, 0x00, //0x000033ec jmp LBB0_701 - //0x000033f1 LBB0_706 - 0x49, 0x83, 0xf8, 0xff, //0x000033f1 cmpq $-1, %r8 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x000033f5 jne LBB0_708 - 0x4c, 0x0f, 0xbc, 0xc6, //0x000033fb bsfq %rsi, %r8 - 0x4d, 0x01, 0xe8, //0x000033ff addq %r13, %r8 - //0x00003402 LBB0_708 - 0x4c, 0x89, 0xf0, //0x00003402 movq %r14, %rax - 0x48, 0xf7, 0xd0, //0x00003405 notq %rax - 0x48, 0x21, 0xf0, //0x00003408 andq %rsi, %rax - 0x4c, 0x8d, 0x24, 0x00, //0x0000340b leaq (%rax,%rax), %r12 - 0x4d, 0x09, 0xf4, //0x0000340f orq %r14, %r12 - 0x4c, 0x89, 0xe3, //0x00003412 movq %r12, %rbx - 0x48, 0xf7, 0xd3, //0x00003415 notq %rbx - 0x48, 0x21, 0xf3, //0x00003418 andq %rsi, %rbx - 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000341b movabsq $-6148914691236517206, %rsi - 0x48, 0x21, 0xf3, //0x00003425 andq %rsi, %rbx - 0x45, 0x31, 0xf6, //0x00003428 xorl %r14d, %r14d - 0x48, 0x01, 0xc3, //0x0000342b addq %rax, %rbx - 0x41, 0x0f, 0x92, 0xc6, //0x0000342e setb %r14b - 0x48, 0x01, 0xdb, //0x00003432 addq %rbx, %rbx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00003435 movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc3, //0x0000343f xorq %rax, %rbx - 0x4c, 0x21, 0xe3, //0x00003442 andq %r12, %rbx - 0x48, 0xf7, 0xd3, //0x00003445 notq %rbx - 0x48, 0x21, 0xda, //0x00003448 andq %rbx, %rdx - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x0000344b movq $16(%rsp), %r12 - 0x48, 0x85, 0xd2, //0x00003450 testq %rdx, %rdx - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00003453 je LBB0_700 - //0x00003459 LBB0_709 - 0x4c, 0x0f, 0xbc, 0xea, //0x00003459 bsfq %rdx, %r13 - 0x49, 0x29, 0xfd, //0x0000345d subq %rdi, %r13 - 0x4c, 0x8d, 0x35, 0xc5, 0x25, 0x00, 0x00, //0x00003460 leaq $9669(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0x4d, 0x85, 0xed, //0x00003467 testq %r13, %r13 - 0x0f, 0x88, 0x46, 0x18, 0x00, 0x00, //0x0000346a js LBB0_833 - //0x00003470 LBB0_712 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00003470 movq $8(%rsp), %r8 - 0x4d, 0x89, 0x28, //0x00003475 movq %r13, (%r8) - 0x4d, 0x85, 0xc9, //0x00003478 testq %r9, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x0000347b movq $32(%rsp), %r11 - 0x0f, 0x8f, 0x3a, 0xfc, 0xff, 0xff, //0x00003480 jg LBB0_652 - 0xe9, 0x4c, 0x18, 0x00, 0x00, //0x00003486 jmp LBB0_713 - //0x0000348b LBB0_714 - 0x40, 0x80, 0xff, 0x3a, //0x0000348b cmpb $58, %dil - 0x0f, 0x85, 0xf9, 0x17, 0x00, 0x00, //0x0000348f jne LBB0_1025 - 0x49, 0xc7, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x00, //0x00003495 movq $0, (%r12,%rsi,8) - 0xe9, 0x1e, 0xfc, 0xff, 0xff, //0x0000349d jmp LBB0_652 - //0x000034a2 LBB0_716 - 0x40, 0x80, 0xff, 0x5d, //0x000034a2 cmpb $93, %dil - 0x0f, 0x84, 0x22, 0x04, 0x00, 0x00, //0x000034a6 je LBB0_689 - 0x49, 0xc7, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x00, //0x000034ac movq $1, (%r12,%rsi,8) - 0x83, 0xff, 0x7b, //0x000034b4 cmpl $123, %edi - 0x0f, 0x87, 0xd1, 0x17, 0x00, 0x00, //0x000034b7 ja LBB0_1025 - //0x000034bd LBB0_718 - 0x89, 0xf8, //0x000034bd movl %edi, %eax - 0x48, 0x8d, 0x0d, 0x7e, 0x25, 0x00, 0x00, //0x000034bf leaq $9598(%rip), %rcx /* LJTI0_3+0(%rip) */ - 0x48, 0x63, 0x04, 0x81, //0x000034c6 movslq (%rcx,%rax,4), %rax - 0x48, 0x01, 0xc8, //0x000034ca addq %rcx, %rax - 0xff, 0xe0, //0x000034cd jmpq *%rax - //0x000034cf LBB0_721 - 0x4c, 0x89, 0xc0, //0x000034cf movq %r8, %rax - 0x48, 0x8b, 0x4c, 0x24, 0x28, //0x000034d2 movq $40(%rsp), %rcx - 0x4c, 0x8b, 0x01, //0x000034d7 movq (%rcx), %r8 - 0x4c, 0x8b, 0x08, //0x000034da movq (%rax), %r9 - 0x4d, 0x8d, 0x69, 0xff, //0x000034dd leaq $-1(%r9), %r13 - 0x4d, 0x29, 0xe8, //0x000034e1 subq %r13, %r8 - 0x0f, 0x84, 0x02, 0x18, 0x00, 0x00, //0x000034e4 je LBB0_1028 - 0x4b, 0x8d, 0x04, 0x0f, //0x000034ea leaq (%r15,%r9), %rax - 0x48, 0x83, 0xc0, 0xff, //0x000034ee addq $-1, %rax - 0x48, 0x89, 0x44, 0x24, 0x38, //0x000034f2 movq %rax, $56(%rsp) - 0x80, 0x38, 0x30, //0x000034f7 cmpb $48, (%rax) - 0x0f, 0x85, 0x3a, 0x00, 0x00, 0x00, //0x000034fa jne LBB0_726 - 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00003500 movl $1, %r11d - 0x49, 0x83, 0xf8, 0x01, //0x00003506 cmpq $1, %r8 - 0x0f, 0x84, 0xc5, 0xfb, 0xff, 0xff, //0x0000350a je LBB0_650 - 0x43, 0x8a, 0x0c, 0x0f, //0x00003510 movb (%r15,%r9), %cl - 0x80, 0xc1, 0xd2, //0x00003514 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x00003517 cmpb $55, %cl - 0x0f, 0x87, 0xb5, 0xfb, 0xff, 0xff, //0x0000351a ja LBB0_650 - 0x0f, 0xb6, 0xc1, //0x00003520 movzbl %cl, %eax - 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00003523 movabsq $36028797027352577, %rcx - 0x48, 0x0f, 0xa3, 0xc1, //0x0000352d btq %rax, %rcx - 0x4c, 0x89, 0xe9, //0x00003531 movq %r13, %rcx - 0x0f, 0x83, 0x6a, 0xfb, 0xff, 0xff, //0x00003534 jae LBB0_651 - //0x0000353a LBB0_726 - 0x49, 0x83, 0xf8, 0x20, //0x0000353a cmpq $32, %r8 - 0x4c, 0x89, 0x4c, 0x24, 0x18, //0x0000353e movq %r9, $24(%rsp) - 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x00003543 movq $-1, %r12 - 0x0f, 0x82, 0xfc, 0x0f, 0x00, 0x00, //0x0000354a jb LBB0_945 - 0x45, 0x31, 0xdb, //0x00003550 xorl %r11d, %r11d - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003553 movq $-1, %rax - 0x48, 0xc7, 0x44, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff, //0x0000355a movq $-1, $48(%rsp) - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003563 .p2align 4, 0x90 - //0x00003570 LBB0_728 - 0x48, 0x8b, 0x4c, 0x24, 0x38, //0x00003570 movq $56(%rsp), %rcx - 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x19, //0x00003575 vmovdqu (%rcx,%r11), %ymm0 - 0xc4, 0xc1, 0x7d, 0x64, 0xc8, //0x0000357b vpcmpgtb %ymm8, %ymm0, %ymm1 - 0xc5, 0xb5, 0x64, 0xd0, //0x00003580 vpcmpgtb %ymm0, %ymm9, %ymm2 - 0xc5, 0xed, 0xdb, 0xc9, //0x00003584 vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0xad, 0x74, 0xd0, //0x00003588 vpcmpeqb %ymm0, %ymm10, %ymm2 - 0xc5, 0xa5, 0x74, 0xd8, //0x0000358c vpcmpeqb %ymm0, %ymm11, %ymm3 - 0xc5, 0xe5, 0xeb, 0xd2, //0x00003590 vpor %ymm2, %ymm3, %ymm2 - 0xc5, 0x9d, 0xdb, 0xd8, //0x00003594 vpand %ymm0, %ymm12, %ymm3 - 0xc5, 0x95, 0x74, 0xc0, //0x00003598 vpcmpeqb %ymm0, %ymm13, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x0000359c vpmovmskb %ymm0, %esi - 0xc5, 0x8d, 0x74, 0xdb, //0x000035a0 vpcmpeqb %ymm3, %ymm14, %ymm3 - 0xc5, 0xfd, 0xd7, 0xdb, //0x000035a4 vpmovmskb %ymm3, %ebx - 0xc5, 0xfd, 0xd7, 0xfa, //0x000035a8 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0xeb, 0xc0, //0x000035ac vpor %ymm0, %ymm1, %ymm0 - 0xc5, 0xe5, 0xeb, 0xca, //0x000035b0 vpor %ymm2, %ymm3, %ymm1 - 0xc5, 0xfd, 0xeb, 0xc1, //0x000035b4 vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc8, //0x000035b8 vpmovmskb %ymm0, %ecx - 0x48, 0xf7, 0xd1, //0x000035bc notq %rcx - 0x48, 0x0f, 0xbc, 0xc9, //0x000035bf bsfq %rcx, %rcx - 0x83, 0xf9, 0x20, //0x000035c3 cmpl $32, %ecx - 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x000035c6 je LBB0_730 - 0xba, 0xff, 0xff, 0xff, 0xff, //0x000035cc movl $-1, %edx - 0xd3, 0xe2, //0x000035d1 shll %cl, %edx - 0xf7, 0xd2, //0x000035d3 notl %edx - 0x21, 0xd6, //0x000035d5 andl %edx, %esi - 0x21, 0xd3, //0x000035d7 andl %edx, %ebx - 0x21, 0xfa, //0x000035d9 andl %edi, %edx - 0x89, 0xd7, //0x000035db movl %edx, %edi - //0x000035dd LBB0_730 - 0x8d, 0x56, 0xff, //0x000035dd leal $-1(%rsi), %edx - 0x21, 0xf2, //0x000035e0 andl %esi, %edx - 0x0f, 0x85, 0x43, 0x0c, 0x00, 0x00, //0x000035e2 jne LBB0_912 - 0x8d, 0x53, 0xff, //0x000035e8 leal $-1(%rbx), %edx - 0x21, 0xda, //0x000035eb andl %ebx, %edx - 0x0f, 0x85, 0x38, 0x0c, 0x00, 0x00, //0x000035ed jne LBB0_912 - 0x8d, 0x57, 0xff, //0x000035f3 leal $-1(%rdi), %edx - 0x21, 0xfa, //0x000035f6 andl %edi, %edx - 0x0f, 0x85, 0x2d, 0x0c, 0x00, 0x00, //0x000035f8 jne LBB0_912 - 0x85, 0xf6, //0x000035fe testl %esi, %esi - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00003600 je LBB0_736 - 0x0f, 0xbc, 0xf6, //0x00003606 bsfl %esi, %esi - 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x00003609 cmpq $-1, $48(%rsp) - 0x0f, 0x85, 0x49, 0x0d, 0x00, 0x00, //0x0000360f jne LBB0_929 - 0x4c, 0x01, 0xde, //0x00003615 addq %r11, %rsi - 0x48, 0x89, 0x74, 0x24, 0x30, //0x00003618 movq %rsi, $48(%rsp) - //0x0000361d LBB0_736 - 0x85, 0xdb, //0x0000361d testl %ebx, %ebx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000361f je LBB0_739 - 0x0f, 0xbc, 0xf3, //0x00003625 bsfl %ebx, %esi - 0x48, 0x83, 0xf8, 0xff, //0x00003628 cmpq $-1, %rax - 0x0f, 0x85, 0x2c, 0x0d, 0x00, 0x00, //0x0000362c jne LBB0_929 - 0x4c, 0x01, 0xde, //0x00003632 addq %r11, %rsi - 0x48, 0x89, 0xf0, //0x00003635 movq %rsi, %rax - //0x00003638 LBB0_739 - 0x85, 0xff, //0x00003638 testl %edi, %edi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000363a je LBB0_742 - 0x0f, 0xbc, 0xf7, //0x00003640 bsfl %edi, %esi - 0x49, 0x83, 0xfc, 0xff, //0x00003643 cmpq $-1, %r12 - 0x0f, 0x85, 0x11, 0x0d, 0x00, 0x00, //0x00003647 jne LBB0_929 - 0x4c, 0x01, 0xde, //0x0000364d addq %r11, %rsi - 0x49, 0x89, 0xf4, //0x00003650 movq %rsi, %r12 - //0x00003653 LBB0_742 - 0x83, 0xf9, 0x20, //0x00003653 cmpl $32, %ecx - 0x0f, 0x85, 0x21, 0x04, 0x00, 0x00, //0x00003656 jne LBB0_801 - 0x49, 0x83, 0xc0, 0xe0, //0x0000365c addq $-32, %r8 - 0x49, 0x83, 0xc3, 0x20, //0x00003660 addq $32, %r11 - 0x49, 0x83, 0xf8, 0x1f, //0x00003664 cmpq $31, %r8 - 0x0f, 0x87, 0x02, 0xff, 0xff, 0xff, //0x00003668 ja LBB0_728 - 0xc5, 0xf8, 0x77, //0x0000366e vzeroupper - 0xc5, 0x7a, 0x6f, 0x3d, 0xa7, 0xcb, 0xff, 0xff, //0x00003671 vmovdqu $-13401(%rip), %xmm15 /* LCPI0_19+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0x3f, 0xcb, 0xff, 0xff, //0x00003679 vmovdqu $-13505(%rip), %ymm14 /* LCPI0_18+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0x17, 0xcb, 0xff, 0xff, //0x00003681 vmovdqu $-13545(%rip), %ymm13 /* LCPI0_17+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0xaf, 0xc9, 0xff, 0xff, //0x00003689 vmovdqu $-13905(%rip), %ymm12 /* LCPI0_2+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0xe7, 0xca, 0xff, 0xff, //0x00003691 vmovdqu $-13593(%rip), %ymm11 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x15, 0xbf, 0xca, 0xff, 0xff, //0x00003699 vmovdqu $-13633(%rip), %ymm10 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x0d, 0x97, 0xca, 0xff, 0xff, //0x000036a1 vmovdqu $-13673(%rip), %ymm9 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x6f, 0xca, 0xff, 0xff, //0x000036a9 vmovdqu $-13713(%rip), %ymm8 /* LCPI0_13+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0xe7, 0xc9, 0xff, 0xff, //0x000036b1 vmovdqu $-13849(%rip), %ymm7 /* LCPI0_8+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0xbf, 0xc9, 0xff, 0xff, //0x000036b9 vmovdqu $-13889(%rip), %ymm6 /* LCPI0_7+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x2d, 0x37, 0xc9, 0xff, 0xff, //0x000036c1 vmovdqu $-14025(%rip), %ymm5 /* LCPI0_0+0(%rip) */ - 0x4c, 0x03, 0x5c, 0x24, 0x38, //0x000036c9 addq $56(%rsp), %r11 - 0x49, 0x83, 0xf8, 0x10, //0x000036ce cmpq $16, %r8 - 0x0f, 0x82, 0x37, 0x01, 0x00, 0x00, //0x000036d2 jb LBB0_763 - //0x000036d8 LBB0_745 - 0x4d, 0x89, 0xde, //0x000036d8 movq %r11, %r14 - 0x4d, 0x29, 0xce, //0x000036db subq %r9, %r14 - 0x4d, 0x29, 0xfe, //0x000036de subq %r15, %r14 - 0x49, 0x83, 0xc6, 0x01, //0x000036e1 addq $1, %r14 - 0x45, 0x31, 0xc9, //0x000036e5 xorl %r9d, %r9d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000036e8 .p2align 4, 0x90 - //0x000036f0 LBB0_746 - 0xc4, 0x81, 0x7a, 0x6f, 0x04, 0x0b, //0x000036f0 vmovdqu (%r11,%r9), %xmm0 - 0xc4, 0xc1, 0x79, 0x64, 0xcf, //0x000036f6 vpcmpgtb %xmm15, %xmm0, %xmm1 - 0xc5, 0xfa, 0x6f, 0x15, 0x2d, 0xcb, 0xff, 0xff, //0x000036fb vmovdqu $-13523(%rip), %xmm2 /* LCPI0_20+0(%rip) */ - 0xc5, 0xe9, 0x64, 0xd0, //0x00003703 vpcmpgtb %xmm0, %xmm2, %xmm2 - 0xc5, 0xf1, 0xdb, 0xca, //0x00003707 vpand %xmm2, %xmm1, %xmm1 - 0xc5, 0xf9, 0x74, 0x15, 0x2d, 0xcb, 0xff, 0xff, //0x0000370b vpcmpeqb $-13523(%rip), %xmm0, %xmm2 /* LCPI0_21+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x1d, 0x35, 0xcb, 0xff, 0xff, //0x00003713 vpcmpeqb $-13515(%rip), %xmm0, %xmm3 /* LCPI0_22+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xd2, //0x0000371b vpor %xmm2, %xmm3, %xmm2 - 0xc5, 0xf9, 0xdb, 0x1d, 0xc9, 0xca, 0xff, 0xff, //0x0000371f vpand $-13623(%rip), %xmm0, %xmm3 /* LCPI0_5+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0x31, 0xcb, 0xff, 0xff, //0x00003727 vpcmpeqb $-13519(%rip), %xmm0, %xmm0 /* LCPI0_23+0(%rip) */ - 0xc5, 0xe1, 0x74, 0x1d, 0x39, 0xcb, 0xff, 0xff, //0x0000372f vpcmpeqb $-13511(%rip), %xmm3, %xmm3 /* LCPI0_24+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xe0, //0x00003737 vpor %xmm0, %xmm3, %xmm4 - 0xc5, 0xe9, 0xeb, 0xc9, //0x0000373b vpor %xmm1, %xmm2, %xmm1 - 0xc5, 0xd9, 0xeb, 0xc9, //0x0000373f vpor %xmm1, %xmm4, %xmm1 - 0xc5, 0xf9, 0xd7, 0xf0, //0x00003743 vpmovmskb %xmm0, %esi - 0xc5, 0xf9, 0xd7, 0xdb, //0x00003747 vpmovmskb %xmm3, %ebx - 0xc5, 0xf9, 0xd7, 0xfa, //0x0000374b vpmovmskb %xmm2, %edi - 0xc5, 0xf9, 0xd7, 0xc9, //0x0000374f vpmovmskb %xmm1, %ecx - 0xf7, 0xd1, //0x00003753 notl %ecx - 0x0f, 0xbc, 0xc9, //0x00003755 bsfl %ecx, %ecx - 0x83, 0xf9, 0x10, //0x00003758 cmpl $16, %ecx - 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x0000375b je LBB0_748 - 0xba, 0xff, 0xff, 0xff, 0xff, //0x00003761 movl $-1, %edx - 0xd3, 0xe2, //0x00003766 shll %cl, %edx - 0xf7, 0xd2, //0x00003768 notl %edx - 0x21, 0xd6, //0x0000376a andl %edx, %esi - 0x21, 0xd3, //0x0000376c andl %edx, %ebx - 0x21, 0xfa, //0x0000376e andl %edi, %edx - 0x89, 0xd7, //0x00003770 movl %edx, %edi - //0x00003772 LBB0_748 - 0x8d, 0x56, 0xff, //0x00003772 leal $-1(%rsi), %edx - 0x21, 0xf2, //0x00003775 andl %esi, %edx - 0x0f, 0x85, 0x7d, 0x0c, 0x00, 0x00, //0x00003777 jne LBB0_932 - 0x8d, 0x53, 0xff, //0x0000377d leal $-1(%rbx), %edx - 0x21, 0xda, //0x00003780 andl %ebx, %edx - 0x0f, 0x85, 0x72, 0x0c, 0x00, 0x00, //0x00003782 jne LBB0_932 - 0x8d, 0x57, 0xff, //0x00003788 leal $-1(%rdi), %edx - 0x21, 0xfa, //0x0000378b andl %edi, %edx - 0x0f, 0x85, 0x67, 0x0c, 0x00, 0x00, //0x0000378d jne LBB0_932 - 0x85, 0xf6, //0x00003793 testl %esi, %esi - 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00003795 je LBB0_754 - 0x0f, 0xbc, 0xf6, //0x0000379b bsfl %esi, %esi - 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x0000379e cmpq $-1, $48(%rsp) - 0x0f, 0x85, 0x82, 0x0c, 0x00, 0x00, //0x000037a4 jne LBB0_934 - 0x4c, 0x01, 0xf6, //0x000037aa addq %r14, %rsi - 0x4c, 0x01, 0xce, //0x000037ad addq %r9, %rsi - 0x48, 0x89, 0x74, 0x24, 0x30, //0x000037b0 movq %rsi, $48(%rsp) - //0x000037b5 LBB0_754 - 0x85, 0xdb, //0x000037b5 testl %ebx, %ebx - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000037b7 je LBB0_757 - 0x0f, 0xbc, 0xf3, //0x000037bd bsfl %ebx, %esi - 0x48, 0x83, 0xf8, 0xff, //0x000037c0 cmpq $-1, %rax - 0x0f, 0x85, 0x62, 0x0c, 0x00, 0x00, //0x000037c4 jne LBB0_934 - 0x4c, 0x01, 0xf6, //0x000037ca addq %r14, %rsi - 0x4c, 0x01, 0xce, //0x000037cd addq %r9, %rsi - 0x48, 0x89, 0xf0, //0x000037d0 movq %rsi, %rax - //0x000037d3 LBB0_757 - 0x85, 0xff, //0x000037d3 testl %edi, %edi - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000037d5 je LBB0_760 - 0x0f, 0xbc, 0xf7, //0x000037db bsfl %edi, %esi - 0x49, 0x83, 0xfc, 0xff, //0x000037de cmpq $-1, %r12 - 0x0f, 0x85, 0x44, 0x0c, 0x00, 0x00, //0x000037e2 jne LBB0_934 - 0x4c, 0x01, 0xf6, //0x000037e8 addq %r14, %rsi - 0x4c, 0x01, 0xce, //0x000037eb addq %r9, %rsi - 0x49, 0x89, 0xf4, //0x000037ee movq %rsi, %r12 - //0x000037f1 LBB0_760 - 0x83, 0xf9, 0x10, //0x000037f1 cmpl $16, %ecx - 0x0f, 0x85, 0x9e, 0x02, 0x00, 0x00, //0x000037f4 jne LBB0_802 - 0x49, 0x83, 0xc0, 0xf0, //0x000037fa addq $-16, %r8 - 0x49, 0x83, 0xc1, 0x10, //0x000037fe addq $16, %r9 - 0x49, 0x83, 0xf8, 0x0f, //0x00003802 cmpq $15, %r8 - 0x0f, 0x87, 0xe4, 0xfe, 0xff, 0xff, //0x00003806 ja LBB0_746 - 0x4d, 0x01, 0xcb, //0x0000380c addq %r9, %r11 - //0x0000380f LBB0_763 - 0x4d, 0x85, 0xc0, //0x0000380f testq %r8, %r8 - 0x48, 0x8d, 0x1d, 0x87, 0x24, 0x00, 0x00, //0x00003812 leaq $9351(%rip), %rbx /* LJTI0_5+0(%rip) */ - 0x4c, 0x8d, 0x35, 0x0c, 0x22, 0x00, 0x00, //0x00003819 leaq $8716(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0x0f, 0x84, 0x89, 0x02, 0x00, 0x00, //0x00003820 je LBB0_804 - 0x4f, 0x8d, 0x0c, 0x03, //0x00003826 leaq (%r11,%r8), %r9 - 0x4c, 0x89, 0xdf, //0x0000382a movq %r11, %rdi - 0x48, 0x2b, 0x7c, 0x24, 0x18, //0x0000382d subq $24(%rsp), %rdi - 0x4c, 0x29, 0xff, //0x00003832 subq %r15, %rdi - 0x48, 0x83, 0xc7, 0x01, //0x00003835 addq $1, %rdi - 0x31, 0xc9, //0x00003839 xorl %ecx, %ecx - 0xe9, 0x0d, 0x00, 0x00, 0x00, //0x0000383b jmp LBB0_766 - //0x00003840 .p2align 4, 0x90 - //0x00003840 LBB0_765 - 0x48, 0x83, 0xc1, 0x01, //0x00003840 addq $1, %rcx - 0x49, 0x39, 0xc8, //0x00003844 cmpq %rcx, %r8 - 0x0f, 0x84, 0x73, 0x09, 0x00, 0x00, //0x00003847 je LBB0_911 - //0x0000384d LBB0_766 - 0x41, 0x0f, 0xbe, 0x34, 0x0b, //0x0000384d movsbl (%r11,%rcx), %esi - 0x8d, 0x56, 0xd0, //0x00003852 leal $-48(%rsi), %edx - 0x83, 0xfa, 0x0a, //0x00003855 cmpl $10, %edx - 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x00003858 jb LBB0_765 - 0x8d, 0x56, 0xd5, //0x0000385e leal $-43(%rsi), %edx - 0x83, 0xfa, 0x1a, //0x00003861 cmpl $26, %edx - 0x0f, 0x87, 0x1c, 0x00, 0x00, 0x00, //0x00003864 ja LBB0_771 - 0x48, 0x63, 0x14, 0x93, //0x0000386a movslq (%rbx,%rdx,4), %rdx - 0x48, 0x01, 0xda, //0x0000386e addq %rbx, %rdx - 0xff, 0xe2, //0x00003871 jmpq *%rdx - //0x00003873 LBB0_769 - 0x49, 0x83, 0xfc, 0xff, //0x00003873 cmpq $-1, %r12 - 0x0f, 0x85, 0x85, 0x0b, 0x00, 0x00, //0x00003877 jne LBB0_933 - 0x4c, 0x8d, 0x24, 0x0f, //0x0000387d leaq (%rdi,%rcx), %r12 - 0xe9, 0xba, 0xff, 0xff, 0xff, //0x00003881 jmp LBB0_765 - //0x00003886 LBB0_771 - 0x83, 0xfe, 0x65, //0x00003886 cmpl $101, %esi - 0x0f, 0x85, 0x1d, 0x02, 0x00, 0x00, //0x00003889 jne LBB0_803 - //0x0000388f LBB0_772 - 0x48, 0x83, 0xf8, 0xff, //0x0000388f cmpq $-1, %rax - 0x0f, 0x85, 0x69, 0x0b, 0x00, 0x00, //0x00003893 jne LBB0_933 - 0x48, 0x8d, 0x04, 0x0f, //0x00003899 leaq (%rdi,%rcx), %rax - 0xe9, 0x9e, 0xff, 0xff, 0xff, //0x0000389d jmp LBB0_765 - //0x000038a2 LBB0_774 - 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x000038a2 cmpq $-1, $48(%rsp) - 0x0f, 0x85, 0x54, 0x0b, 0x00, 0x00, //0x000038a8 jne LBB0_933 - 0x48, 0x8d, 0x14, 0x0f, //0x000038ae leaq (%rdi,%rcx), %rdx - 0x48, 0x89, 0x54, 0x24, 0x30, //0x000038b2 movq %rdx, $48(%rsp) - 0xe9, 0x84, 0xff, 0xff, 0xff, //0x000038b7 jmp LBB0_765 - //0x000038bc LBB0_719 - 0x83, 0xff, 0x22, //0x000038bc cmpl $34, %edi - 0x0f, 0x84, 0x41, 0x00, 0x00, 0x00, //0x000038bf je LBB0_780 - //0x000038c5 LBB0_692 - 0x83, 0xff, 0x7d, //0x000038c5 cmpl $125, %edi - 0x0f, 0x85, 0xc0, 0x13, 0x00, 0x00, //0x000038c8 jne LBB0_1025 - //0x000038ce LBB0_689 - 0x49, 0x89, 0x14, 0x24, //0x000038ce movq %rdx, (%r12) - 0x4d, 0x89, 0xd5, //0x000038d2 movq %r10, %r13 - 0x48, 0x85, 0xd2, //0x000038d5 testq %rdx, %rdx - 0x0f, 0x85, 0x02, 0xf8, 0xff, 0xff, //0x000038d8 jne LBB0_654 - 0xe9, 0xb2, 0x13, 0x00, 0x00, //0x000038de jmp LBB0_1026 - //0x000038e3 LBB0_776 - 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x000038e3 cmpq $4095, %rsi - 0x0f, 0x8f, 0xba, 0x13, 0x00, 0x00, //0x000038ea jg LBB0_1108 - 0x48, 0x8d, 0x4e, 0x01, //0x000038f0 leaq $1(%rsi), %rcx - 0x49, 0x89, 0x0c, 0x24, //0x000038f4 movq %rcx, (%r12) - 0x49, 0xc7, 0x44, 0xf4, 0x08, 0x00, 0x00, 0x00, 0x00, //0x000038f8 movq $0, $8(%r12,%rsi,8) - 0xe9, 0xba, 0xf7, 0xff, 0xff, //0x00003901 jmp LBB0_652 - //0x00003906 LBB0_780 - 0x49, 0xc7, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x00, //0x00003906 movq $2, (%r12,%rsi,8) - 0x4d, 0x8b, 0x08, //0x0000390e movq (%r8), %r9 - 0x48, 0x8b, 0x44, 0x24, 0x28, //0x00003911 movq $40(%rsp), %rax - 0x4c, 0x8b, 0x18, //0x00003916 movq (%rax), %r11 - 0x4c, 0x89, 0xd9, //0x00003919 movq %r11, %rcx - 0x4c, 0x29, 0xc9, //0x0000391c subq %r9, %rcx - 0x0f, 0x84, 0x38, 0x1c, 0x00, 0x00, //0x0000391f je LBB0_1129 - 0x48, 0x83, 0xf9, 0x40, //0x00003925 cmpq $64, %rcx - 0x0f, 0x82, 0xf6, 0x0c, 0x00, 0x00, //0x00003929 jb LBB0_956 - 0x4c, 0x89, 0xcf, //0x0000392f movq %r9, %rdi - 0x48, 0xf7, 0xd7, //0x00003932 notq %rdi - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003935 movq $-1, %r8 - 0x4d, 0x89, 0xcd, //0x0000393c movq %r9, %r13 - 0x45, 0x31, 0xf6, //0x0000393f xorl %r14d, %r14d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003942 .p2align 4, 0x90 - //0x00003950 LBB0_783 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x2f, //0x00003950 vmovdqu (%r15,%r13), %ymm0 - 0xc4, 0x81, 0x7e, 0x6f, 0x4c, 0x2f, 0x20, //0x00003956 vmovdqu $32(%r15,%r13), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x0000395d vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00003961 vpmovmskb %ymm2, %edx - 0xc5, 0xf5, 0x74, 0xd6, //0x00003965 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00003969 vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xc7, //0x0000396d vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x00003971 vpmovmskb %ymm0, %esi - 0xc5, 0xf5, 0x74, 0xc7, //0x00003975 vpcmpeqb %ymm7, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x00003979 vpmovmskb %ymm0, %ebx - 0x48, 0xc1, 0xe0, 0x20, //0x0000397d shlq $32, %rax - 0x48, 0x09, 0xc2, //0x00003981 orq %rax, %rdx - 0x48, 0xc1, 0xe3, 0x20, //0x00003984 shlq $32, %rbx - 0x48, 0x09, 0xde, //0x00003988 orq %rbx, %rsi - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000398b jne LBB0_792 - 0x4d, 0x85, 0xf6, //0x00003991 testq %r14, %r14 - 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x00003994 jne LBB0_794 - 0x45, 0x31, 0xf6, //0x0000399a xorl %r14d, %r14d - 0x48, 0x85, 0xd2, //0x0000399d testq %rdx, %rdx - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x000039a0 jne LBB0_795 - //0x000039a6 LBB0_786 - 0x48, 0x83, 0xc1, 0xc0, //0x000039a6 addq $-64, %rcx - 0x48, 0x83, 0xc7, 0xc0, //0x000039aa addq $-64, %rdi - 0x49, 0x83, 0xc5, 0x40, //0x000039ae addq $64, %r13 - 0x48, 0x83, 0xf9, 0x3f, //0x000039b2 cmpq $63, %rcx - 0x0f, 0x87, 0x94, 0xff, 0xff, 0xff, //0x000039b6 ja LBB0_783 - 0xe9, 0xbd, 0x09, 0x00, 0x00, //0x000039bc jmp LBB0_787 - //0x000039c1 LBB0_792 - 0x49, 0x83, 0xf8, 0xff, //0x000039c1 cmpq $-1, %r8 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x000039c5 jne LBB0_794 - 0x4c, 0x0f, 0xbc, 0xc6, //0x000039cb bsfq %rsi, %r8 - 0x4d, 0x01, 0xe8, //0x000039cf addq %r13, %r8 - //0x000039d2 LBB0_794 - 0x4c, 0x89, 0xf0, //0x000039d2 movq %r14, %rax - 0x48, 0xf7, 0xd0, //0x000039d5 notq %rax - 0x48, 0x21, 0xf0, //0x000039d8 andq %rsi, %rax - 0x4c, 0x8d, 0x24, 0x00, //0x000039db leaq (%rax,%rax), %r12 - 0x4d, 0x09, 0xf4, //0x000039df orq %r14, %r12 - 0x4c, 0x89, 0xe3, //0x000039e2 movq %r12, %rbx - 0x48, 0xf7, 0xd3, //0x000039e5 notq %rbx - 0x48, 0x21, 0xf3, //0x000039e8 andq %rsi, %rbx - 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000039eb movabsq $-6148914691236517206, %rsi - 0x48, 0x21, 0xf3, //0x000039f5 andq %rsi, %rbx - 0x45, 0x31, 0xf6, //0x000039f8 xorl %r14d, %r14d - 0x48, 0x01, 0xc3, //0x000039fb addq %rax, %rbx - 0x41, 0x0f, 0x92, 0xc6, //0x000039fe setb %r14b - 0x48, 0x01, 0xdb, //0x00003a02 addq %rbx, %rbx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00003a05 movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc3, //0x00003a0f xorq %rax, %rbx - 0x4c, 0x21, 0xe3, //0x00003a12 andq %r12, %rbx - 0x48, 0xf7, 0xd3, //0x00003a15 notq %rbx - 0x48, 0x21, 0xda, //0x00003a18 andq %rbx, %rdx - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00003a1b movq $16(%rsp), %r12 - 0x48, 0x85, 0xd2, //0x00003a20 testq %rdx, %rdx - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00003a23 je LBB0_786 - //0x00003a29 LBB0_795 - 0x4c, 0x0f, 0xbc, 0xea, //0x00003a29 bsfq %rdx, %r13 - 0x49, 0x29, 0xfd, //0x00003a2d subq %rdi, %r13 - 0x4c, 0x8d, 0x35, 0xf5, 0x1f, 0x00, 0x00, //0x00003a30 leaq $8181(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0x4d, 0x85, 0xed, //0x00003a37 testq %r13, %r13 - 0x0f, 0x88, 0x76, 0x12, 0x00, 0x00, //0x00003a3a js LBB0_833 - //0x00003a40 LBB0_798 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00003a40 movq $8(%rsp), %r8 - 0x4d, 0x89, 0x28, //0x00003a45 movq %r13, (%r8) - 0x4d, 0x85, 0xc9, //0x00003a48 testq %r9, %r9 - 0x0f, 0x8e, 0x86, 0x12, 0x00, 0x00, //0x00003a4b jle LBB0_713 - 0x49, 0x8b, 0x0c, 0x24, //0x00003a51 movq (%r12), %rcx - 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00003a55 cmpq $4095, %rcx - 0x0f, 0x8f, 0x48, 0x12, 0x00, 0x00, //0x00003a5c jg LBB0_1108 - 0x48, 0x8d, 0x41, 0x01, //0x00003a62 leaq $1(%rcx), %rax - 0x49, 0x89, 0x04, 0x24, //0x00003a66 movq %rax, (%r12) - 0x49, 0xc7, 0x44, 0xcc, 0x08, 0x04, 0x00, 0x00, 0x00, //0x00003a6a movq $4, $8(%r12,%rcx,8) - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x00003a73 movq $32(%rsp), %r11 - 0xe9, 0x43, 0xf6, 0xff, 0xff, //0x00003a78 jmp LBB0_652 - //0x00003a7d LBB0_801 - 0x4c, 0x01, 0xd9, //0x00003a7d addq %r11, %rcx - 0x48, 0x03, 0x4c, 0x24, 0x38, //0x00003a80 addq $56(%rsp), %rcx - 0xc5, 0xf8, 0x77, //0x00003a85 vzeroupper - 0xc5, 0x7a, 0x6f, 0x3d, 0x90, 0xc7, 0xff, 0xff, //0x00003a88 vmovdqu $-14448(%rip), %xmm15 /* LCPI0_19+0(%rip) */ - 0x49, 0x89, 0xcb, //0x00003a90 movq %rcx, %r11 - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00003a93 jmp LBB0_804 - //0x00003a98 LBB0_802 - 0x89, 0xc9, //0x00003a98 movl %ecx, %ecx - 0x49, 0x01, 0xcb, //0x00003a9a addq %rcx, %r11 - 0x4d, 0x01, 0xcb, //0x00003a9d addq %r9, %r11 - 0x4c, 0x8d, 0x35, 0x85, 0x1f, 0x00, 0x00, //0x00003aa0 leaq $8069(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00003aa7 jmp LBB0_804 - //0x00003aac LBB0_803 - 0x49, 0x01, 0xcb, //0x00003aac addq %rcx, %r11 - //0x00003aaf LBB0_804 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003aaf movq $-1, %rcx - 0x48, 0x8b, 0x7c, 0x24, 0x30, //0x00003ab6 movq $48(%rsp), %rdi - 0x48, 0x85, 0xff, //0x00003abb testq %rdi, %rdi - 0x48, 0x8b, 0x74, 0x24, 0x08, //0x00003abe movq $8(%rsp), %rsi - 0x0f, 0x84, 0x37, 0x12, 0x00, 0x00, //0x00003ac3 je LBB0_1031 - 0x4d, 0x85, 0xe4, //0x00003ac9 testq %r12, %r12 - 0x0f, 0x84, 0x2e, 0x12, 0x00, 0x00, //0x00003acc je LBB0_1031 - 0x48, 0x85, 0xc0, //0x00003ad2 testq %rax, %rax - 0x0f, 0x84, 0x25, 0x12, 0x00, 0x00, //0x00003ad5 je LBB0_1031 - 0x4c, 0x2b, 0x5c, 0x24, 0x38, //0x00003adb subq $56(%rsp), %r11 - 0x49, 0x8d, 0x4b, 0xff, //0x00003ae0 leaq $-1(%r11), %rcx - 0x48, 0x39, 0xcf, //0x00003ae4 cmpq %rcx, %rdi - 0x0f, 0x84, 0x4a, 0xf5, 0xff, 0xff, //0x00003ae7 je LBB0_1029 - 0x49, 0x39, 0xcc, //0x00003aed cmpq %rcx, %r12 - 0x0f, 0x84, 0x41, 0xf5, 0xff, 0xff, //0x00003af0 je LBB0_1029 - 0x48, 0x39, 0xc8, //0x00003af6 cmpq %rcx, %rax - 0x0f, 0x84, 0x38, 0xf5, 0xff, 0xff, //0x00003af9 je LBB0_1029 - 0x4d, 0x85, 0xe4, //0x00003aff testq %r12, %r12 - 0xc5, 0xfe, 0x6f, 0x2d, 0xf6, 0xc4, 0xff, 0xff, //0x00003b02 vmovdqu $-15114(%rip), %ymm5 /* LCPI0_0+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x6e, 0xc5, 0xff, 0xff, //0x00003b0a vmovdqu $-14994(%rip), %ymm6 /* LCPI0_7+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x86, 0xc5, 0xff, 0xff, //0x00003b12 vmovdqu $-14970(%rip), %ymm7 /* LCPI0_8+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0xfe, 0xc5, 0xff, 0xff, //0x00003b1a vmovdqu $-14850(%rip), %ymm8 /* LCPI0_13+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x0d, 0x16, 0xc6, 0xff, 0xff, //0x00003b22 vmovdqu $-14826(%rip), %ymm9 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x15, 0x2e, 0xc6, 0xff, 0xff, //0x00003b2a vmovdqu $-14802(%rip), %ymm10 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0x46, 0xc6, 0xff, 0xff, //0x00003b32 vmovdqu $-14778(%rip), %ymm11 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0xfe, 0xc4, 0xff, 0xff, //0x00003b3a vmovdqu $-15106(%rip), %ymm12 /* LCPI0_2+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0x56, 0xc6, 0xff, 0xff, //0x00003b42 vmovdqu $-14762(%rip), %ymm13 /* LCPI0_17+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0x6e, 0xc6, 0xff, 0xff, //0x00003b4a vmovdqu $-14738(%rip), %ymm14 /* LCPI0_18+0(%rip) */ - 0x0f, 0x8e, 0x27, 0x00, 0x00, 0x00, //0x00003b52 jle LBB0_813 - 0x49, 0x8d, 0x4c, 0x24, 0xff, //0x00003b58 leaq $-1(%r12), %rcx - 0x48, 0x39, 0xc8, //0x00003b5d cmpq %rcx, %rax - 0x0f, 0x84, 0x19, 0x00, 0x00, 0x00, //0x00003b60 je LBB0_813 - 0x49, 0xf7, 0xd4, //0x00003b66 notq %r12 - 0x4d, 0x89, 0xe3, //0x00003b69 movq %r12, %r11 - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00003b6c movq $16(%rsp), %r12 - 0x4d, 0x85, 0xdb, //0x00003b71 testq %r11, %r11 - 0x0f, 0x89, 0x1e, 0xf5, 0xff, 0xff, //0x00003b74 jns LBB0_936 - 0xe9, 0x7e, 0x11, 0x00, 0x00, //0x00003b7a jmp LBB0_1030 - //0x00003b7f LBB0_813 - 0x48, 0x89, 0xf9, //0x00003b7f movq %rdi, %rcx - 0x48, 0x09, 0xc1, //0x00003b82 orq %rax, %rcx - 0x0f, 0x99, 0xc1, //0x00003b85 setns %cl - 0x0f, 0x88, 0x90, 0x02, 0x00, 0x00, //0x00003b88 js LBB0_857 - 0x48, 0x39, 0xc7, //0x00003b8e cmpq %rax, %rdi - 0x0f, 0x8c, 0x87, 0x02, 0x00, 0x00, //0x00003b91 jl LBB0_857 - 0x48, 0xf7, 0xd7, //0x00003b97 notq %rdi - 0x49, 0x89, 0xfb, //0x00003b9a movq %rdi, %r11 - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00003b9d movq $16(%rsp), %r12 - 0x4d, 0x85, 0xdb, //0x00003ba2 testq %r11, %r11 - 0x0f, 0x89, 0xed, 0xf4, 0xff, 0xff, //0x00003ba5 jns LBB0_936 - 0xe9, 0x4d, 0x11, 0x00, 0x00, //0x00003bab jmp LBB0_1030 - //0x00003bb0 LBB0_816 - 0x4d, 0x8b, 0x08, //0x00003bb0 movq (%r8), %r9 - 0x48, 0x8b, 0x44, 0x24, 0x28, //0x00003bb3 movq $40(%rsp), %rax - 0x4c, 0x8b, 0x18, //0x00003bb8 movq (%rax), %r11 - 0x4c, 0x89, 0xd9, //0x00003bbb movq %r11, %rcx - 0x4c, 0x29, 0xc9, //0x00003bbe subq %r9, %rcx - 0x0f, 0x84, 0x96, 0x19, 0x00, 0x00, //0x00003bc1 je LBB0_1129 - 0x48, 0x83, 0xf9, 0x40, //0x00003bc7 cmpq $64, %rcx - 0x0f, 0x82, 0x78, 0x0a, 0x00, 0x00, //0x00003bcb jb LBB0_958 - 0x4c, 0x89, 0xcf, //0x00003bd1 movq %r9, %rdi - 0x48, 0xf7, 0xd7, //0x00003bd4 notq %rdi - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003bd7 movq $-1, %r8 - 0x4d, 0x89, 0xcd, //0x00003bde movq %r9, %r13 - 0x45, 0x31, 0xf6, //0x00003be1 xorl %r14d, %r14d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003be4 .p2align 4, 0x90 - //0x00003bf0 LBB0_819 + 0x0f, 0x87, 0x1a, 0x0d, 0x00, 0x00, //0x00000c37 ja LBB0_363 + 0x49, 0x0f, 0xa3, 0xda, //0x00000c3d btq %rbx, %r10 + 0x0f, 0x83, 0x10, 0x0d, 0x00, 0x00, //0x00000c41 jae LBB0_363 + 0x48, 0x83, 0xc6, 0x01, //0x00000c47 addq $1, %rsi + 0x48, 0x39, 0xf7, //0x00000c4b cmpq %rsi, %rdi + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x00000c4e jne LBB0_190 + 0x4c, 0x89, 0xc1, //0x00000c54 movq %r8, %rcx + //0x00000c57 LBB0_194 + 0x4c, 0x29, 0xe1, //0x00000c57 subq %r12, %rcx + 0x48, 0x39, 0xc1, //0x00000c5a cmpq %rax, %rcx + 0x0f, 0x82, 0x1e, 0x00, 0x00, 0x00, //0x00000c5d jb LBB0_196 + 0xe9, 0xa3, 0x42, 0x00, 0x00, //0x00000c63 jmp LBB0_1048 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000c68 .p2align 4, 0x90 + //0x00000c70 LBB0_195 + 0xf7, 0xd6, //0x00000c70 notl %esi + 0x0f, 0xbc, 0xce, //0x00000c72 bsfl %esi, %ecx + 0x48, 0x29, 0xf9, //0x00000c75 subq %rdi, %rcx + 0x48, 0x39, 0xc1, //0x00000c78 cmpq %rax, %rcx + 0x0f, 0x83, 0x8a, 0x42, 0x00, 0x00, //0x00000c7b jae LBB0_1048 + //0x00000c81 LBB0_196 + 0x4c, 0x8d, 0x71, 0x01, //0x00000c81 leaq $1(%rcx), %r14 + 0x4d, 0x89, 0x31, //0x00000c85 movq %r14, (%r9) + 0x41, 0x80, 0x3c, 0x0c, 0x3a, //0x00000c88 cmpb $58, (%r12,%rcx) + 0x0f, 0x85, 0x78, 0x42, 0x00, 0x00, //0x00000c8d jne LBB0_1048 + 0x48, 0x85, 0xd2, //0x00000c93 testq %rdx, %rdx + 0x0f, 0x85, 0x74, 0x23, 0x00, 0x00, //0x00000c96 jne LBB0_537 + 0x49, 0x8b, 0x55, 0x00, //0x00000c9c movq (%r13), %rdx + 0x49, 0x39, 0xd6, //0x00000ca0 cmpq %rdx, %r14 + 0x0f, 0x83, 0x27, 0x00, 0x00, 0x00, //0x00000ca3 jae LBB0_203 + 0x43, 0x8a, 0x04, 0x34, //0x00000ca9 movb (%r12,%r14), %al + 0x3c, 0x0d, //0x00000cad cmpb $13, %al + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x00000caf je LBB0_203 + 0x3c, 0x20, //0x00000cb5 cmpb $32, %al + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000cb7 je LBB0_203 + 0x04, 0xf7, //0x00000cbd addb $-9, %al + 0x3c, 0x01, //0x00000cbf cmpb $1, %al + 0x0f, 0x86, 0x09, 0x00, 0x00, 0x00, //0x00000cc1 jbe LBB0_203 + 0x4c, 0x89, 0xf0, //0x00000cc7 movq %r14, %rax + 0xe9, 0x62, 0x01, 0x00, 0x00, //0x00000cca jmp LBB0_228 + 0x90, //0x00000ccf .p2align 4, 0x90 + //0x00000cd0 LBB0_203 + 0x48, 0x8d, 0x41, 0x02, //0x00000cd0 leaq $2(%rcx), %rax + 0x48, 0x39, 0xd0, //0x00000cd4 cmpq %rdx, %rax + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000cd7 jae LBB0_207 + 0x41, 0x8a, 0x1c, 0x04, //0x00000cdd movb (%r12,%rax), %bl + 0x80, 0xfb, 0x0d, //0x00000ce1 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000ce4 je LBB0_207 + 0x80, 0xfb, 0x20, //0x00000cea cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00000ced je LBB0_207 + 0x80, 0xc3, 0xf7, //0x00000cf3 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000cf6 cmpb $1, %bl + 0x0f, 0x87, 0x32, 0x01, 0x00, 0x00, //0x00000cf9 ja LBB0_228 + 0x90, //0x00000cff .p2align 4, 0x90 + //0x00000d00 LBB0_207 + 0x48, 0x8d, 0x41, 0x03, //0x00000d00 leaq $3(%rcx), %rax + 0x48, 0x39, 0xd0, //0x00000d04 cmpq %rdx, %rax + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000d07 jae LBB0_211 + 0x41, 0x8a, 0x1c, 0x04, //0x00000d0d movb (%r12,%rax), %bl + 0x80, 0xfb, 0x0d, //0x00000d11 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000d14 je LBB0_211 + 0x80, 0xfb, 0x20, //0x00000d1a cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00000d1d je LBB0_211 + 0x80, 0xc3, 0xf7, //0x00000d23 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000d26 cmpb $1, %bl + 0x0f, 0x87, 0x02, 0x01, 0x00, 0x00, //0x00000d29 ja LBB0_228 + 0x90, //0x00000d2f .p2align 4, 0x90 + //0x00000d30 LBB0_211 + 0x48, 0x8d, 0x41, 0x04, //0x00000d30 leaq $4(%rcx), %rax + 0x48, 0x39, 0xd0, //0x00000d34 cmpq %rdx, %rax + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000d37 jae LBB0_215 + 0x41, 0x8a, 0x1c, 0x04, //0x00000d3d movb (%r12,%rax), %bl + 0x80, 0xfb, 0x0d, //0x00000d41 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000d44 je LBB0_215 + 0x80, 0xfb, 0x20, //0x00000d4a cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00000d4d je LBB0_215 + 0x80, 0xc3, 0xf7, //0x00000d53 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000d56 cmpb $1, %bl + 0x0f, 0x87, 0xd2, 0x00, 0x00, 0x00, //0x00000d59 ja LBB0_228 + 0x90, //0x00000d5f .p2align 4, 0x90 + //0x00000d60 LBB0_215 + 0x48, 0x8d, 0x41, 0x05, //0x00000d60 leaq $5(%rcx), %rax + 0x48, 0x89, 0xd7, //0x00000d64 movq %rdx, %rdi + 0x48, 0x29, 0xc7, //0x00000d67 subq %rax, %rdi + 0x0f, 0x86, 0x70, 0x06, 0x00, 0x00, //0x00000d6a jbe LBB0_292 + 0x48, 0x83, 0xff, 0x20, //0x00000d70 cmpq $32, %rdi + 0x0f, 0x82, 0xcc, 0x10, 0x00, 0x00, //0x00000d74 jb LBB0_369 + 0x48, 0xc7, 0xc7, 0xfb, 0xff, 0xff, 0xff, //0x00000d7a movq $-5, %rdi + 0x48, 0x29, 0xcf, //0x00000d81 subq %rcx, %rdi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000d84 .p2align 4, 0x90 + //0x00000d90 LBB0_218 + 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x04, //0x00000d90 vmovdqu (%r12,%rax), %ymm6 + 0xc4, 0x62, 0x7d, 0x00, 0xde, //0x00000d96 vpshufb %ymm6, %ymm0, %ymm11 + 0xc5, 0xa5, 0x74, 0xf6, //0x00000d9b vpcmpeqb %ymm6, %ymm11, %ymm6 + 0xc5, 0xfd, 0xd7, 0xce, //0x00000d9f vpmovmskb %ymm6, %ecx + 0x83, 0xf9, 0xff, //0x00000da3 cmpl $-1, %ecx + 0x0f, 0x85, 0x74, 0x00, 0x00, 0x00, //0x00000da6 jne LBB0_227 + 0x48, 0x83, 0xc0, 0x20, //0x00000dac addq $32, %rax + 0x48, 0x8d, 0x0c, 0x3a, //0x00000db0 leaq (%rdx,%rdi), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00000db4 addq $-32, %rcx + 0x48, 0x83, 0xc7, 0xe0, //0x00000db8 addq $-32, %rdi + 0x48, 0x83, 0xf9, 0x1f, //0x00000dbc cmpq $31, %rcx + 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00000dc0 ja LBB0_218 + 0x4c, 0x89, 0xe0, //0x00000dc6 movq %r12, %rax + 0x48, 0x29, 0xf8, //0x00000dc9 subq %rdi, %rax + 0x48, 0x01, 0xd7, //0x00000dcc addq %rdx, %rdi + 0x48, 0x85, 0xff, //0x00000dcf testq %rdi, %rdi + 0x0f, 0x84, 0x2d, 0x00, 0x00, 0x00, //0x00000dd2 je LBB0_226 + //0x00000dd8 LBB0_221 + 0x48, 0x8d, 0x34, 0x38, //0x00000dd8 leaq (%rax,%rdi), %rsi + 0x31, 0xc9, //0x00000ddc xorl %ecx, %ecx + //0x00000dde LBB0_222 + 0x0f, 0xbe, 0x1c, 0x08, //0x00000dde movsbl (%rax,%rcx), %ebx + 0x83, 0xfb, 0x20, //0x00000de2 cmpl $32, %ebx + 0x0f, 0x87, 0x94, 0x0b, 0x00, 0x00, //0x00000de5 ja LBB0_365 + 0x49, 0x0f, 0xa3, 0xda, //0x00000deb btq %rbx, %r10 + 0x0f, 0x83, 0x8a, 0x0b, 0x00, 0x00, //0x00000def jae LBB0_365 + 0x48, 0x83, 0xc1, 0x01, //0x00000df5 addq $1, %rcx + 0x48, 0x39, 0xcf, //0x00000df9 cmpq %rcx, %rdi + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x00000dfc jne LBB0_222 + 0x48, 0x89, 0xf0, //0x00000e02 movq %rsi, %rax + //0x00000e05 LBB0_226 + 0x4c, 0x29, 0xe0, //0x00000e05 subq %r12, %rax + 0x48, 0x39, 0xd0, //0x00000e08 cmpq %rdx, %rax + 0x0f, 0x82, 0x20, 0x00, 0x00, 0x00, //0x00000e0b jb LBB0_228 + 0xe9, 0xd0, 0x05, 0x00, 0x00, //0x00000e11 jmp LBB0_293 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000e16 .p2align 4, 0x90 + //0x00000e20 LBB0_227 + 0xf7, 0xd1, //0x00000e20 notl %ecx + 0x0f, 0xbc, 0xc1, //0x00000e22 bsfl %ecx, %eax + 0x48, 0x29, 0xf8, //0x00000e25 subq %rdi, %rax + 0x48, 0x39, 0xd0, //0x00000e28 cmpq %rdx, %rax + 0x0f, 0x83, 0xb5, 0x05, 0x00, 0x00, //0x00000e2b jae LBB0_293 + //0x00000e31 LBB0_228 + 0x4c, 0x8d, 0x70, 0x01, //0x00000e31 leaq $1(%rax), %r14 + 0x4d, 0x89, 0x31, //0x00000e35 movq %r14, (%r9) + 0x41, 0x0f, 0xbe, 0x0c, 0x04, //0x00000e38 movsbl (%r12,%rax), %ecx + 0x83, 0xf9, 0x7b, //0x00000e3d cmpl $123, %ecx + 0x0f, 0x87, 0x9a, 0x05, 0x00, 0x00, //0x00000e40 ja LBB0_292 + 0x48, 0x8d, 0x15, 0x3b, 0x4d, 0x00, 0x00, //0x00000e46 leaq $19771(%rip), %rdx /* LJTI0_1+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8a, //0x00000e4d movslq (%rdx,%rcx,4), %rcx + 0x48, 0x01, 0xd1, //0x00000e51 addq %rdx, %rcx + 0xff, 0xe1, //0x00000e54 jmpq *%rcx + //0x00000e56 LBB0_230 + 0x4d, 0x8b, 0x45, 0x00, //0x00000e56 movq (%r13), %r8 + 0x4c, 0x89, 0xc1, //0x00000e5a movq %r8, %rcx + 0x4c, 0x29, 0xf1, //0x00000e5d subq %r14, %rcx + 0x48, 0x83, 0xf9, 0x20, //0x00000e60 cmpq $32, %rcx + 0x0f, 0x82, 0xed, 0x0f, 0x00, 0x00, //0x00000e64 jb LBB0_370 + 0x48, 0x89, 0xc7, //0x00000e6a movq %rax, %rdi + 0x48, 0xf7, 0xd7, //0x00000e6d notq %rdi + 0x48, 0x8d, 0x58, 0x01, //0x00000e70 leaq $1(%rax), %rbx + 0x48, 0x8d, 0x48, 0x02, //0x00000e74 leaq $2(%rax), %rcx + 0x49, 0x8d, 0x14, 0x04, //0x00000e78 leaq (%r12,%rax), %rdx + 0x90, 0x90, 0x90, 0x90, //0x00000e7c .p2align 4, 0x90 + //0x00000e80 LBB0_232 + 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x1c, //0x00000e80 vmovdqu (%r12,%rbx), %ymm6 + 0xc5, 0x4d, 0x74, 0xdb, //0x00000e86 vpcmpeqb %ymm3, %ymm6, %ymm11 + 0xc5, 0xcd, 0xdb, 0xf4, //0x00000e8a vpand %ymm4, %ymm6, %ymm6 + 0xc5, 0xcd, 0x74, 0xf5, //0x00000e8e vpcmpeqb %ymm5, %ymm6, %ymm6 + 0xc5, 0xa5, 0xeb, 0xf6, //0x00000e92 vpor %ymm6, %ymm11, %ymm6 + 0xc5, 0xfd, 0xd7, 0xf6, //0x00000e96 vpmovmskb %ymm6, %esi + 0x85, 0xf6, //0x00000e9a testl %esi, %esi + 0x0f, 0x85, 0x1e, 0x01, 0x00, 0x00, //0x00000e9c jne LBB0_247 + 0x48, 0x83, 0xc3, 0x20, //0x00000ea2 addq $32, %rbx + 0x49, 0x8d, 0x34, 0x38, //0x00000ea6 leaq (%r8,%rdi), %rsi + 0x48, 0x83, 0xc6, 0xe0, //0x00000eaa addq $-32, %rsi + 0x48, 0x83, 0xc7, 0xe0, //0x00000eae addq $-32, %rdi + 0x48, 0x83, 0xc1, 0x20, //0x00000eb2 addq $32, %rcx + 0x48, 0x83, 0xc0, 0x20, //0x00000eb6 addq $32, %rax + 0x48, 0x83, 0xc2, 0x20, //0x00000eba addq $32, %rdx + 0x48, 0x83, 0xfe, 0x1f, //0x00000ebe cmpq $31, %rsi + 0x0f, 0x87, 0xb8, 0xff, 0xff, 0xff, //0x00000ec2 ja LBB0_232 + 0x4d, 0x89, 0xe6, //0x00000ec8 movq %r12, %r14 + 0x49, 0x29, 0xfe, //0x00000ecb subq %rdi, %r14 + 0x49, 0x01, 0xf8, //0x00000ece addq %rdi, %r8 + 0x4c, 0x89, 0xc1, //0x00000ed1 movq %r8, %rcx + 0x48, 0x83, 0xf9, 0x10, //0x00000ed4 cmpq $16, %rcx + 0x0f, 0x82, 0x65, 0x00, 0x00, 0x00, //0x00000ed8 jb LBB0_238 + //0x00000ede LBB0_235 + 0x4c, 0x89, 0xe6, //0x00000ede movq %r12, %rsi + 0x4c, 0x29, 0xf6, //0x00000ee1 subq %r14, %rsi + 0x4c, 0x89, 0xf0, //0x00000ee4 movq %r14, %rax + 0x4c, 0x29, 0xe0, //0x00000ee7 subq %r12, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00000eea addq $1, %rax + 0x49, 0x8d, 0x56, 0xff, //0x00000eee leaq $-1(%r14), %rdx + 0x48, 0x89, 0xd7, //0x00000ef2 movq %rdx, %rdi + 0x4c, 0x29, 0xe7, //0x00000ef5 subq %r12, %rdi + //0x00000ef8 LBB0_236 + 0xc4, 0xc1, 0x7a, 0x6f, 0x36, //0x00000ef8 vmovdqu (%r14), %xmm6 + 0xc5, 0xc9, 0x74, 0x3d, 0xdb, 0xf2, 0xff, 0xff, //0x00000efd vpcmpeqb $-3365(%rip), %xmm6, %xmm7 /* LCPI0_4+0(%rip) */ + 0xc5, 0xc9, 0xdb, 0x35, 0xe3, 0xf2, 0xff, 0xff, //0x00000f05 vpand $-3357(%rip), %xmm6, %xmm6 /* LCPI0_5+0(%rip) */ + 0xc5, 0xb9, 0x74, 0xf6, //0x00000f0d vpcmpeqb %xmm6, %xmm8, %xmm6 + 0xc5, 0xc9, 0xeb, 0xf7, //0x00000f11 vpor %xmm7, %xmm6, %xmm6 + 0xc5, 0xf9, 0xd7, 0xde, //0x00000f15 vpmovmskb %xmm6, %ebx + 0x85, 0xdb, //0x00000f19 testl %ebx, %ebx + 0x0f, 0x85, 0xc7, 0x09, 0x00, 0x00, //0x00000f1b jne LBB0_358 + 0x49, 0x83, 0xc6, 0x10, //0x00000f21 addq $16, %r14 + 0x48, 0x83, 0xc1, 0xf0, //0x00000f25 addq $-16, %rcx + 0x48, 0x83, 0xc6, 0xf0, //0x00000f29 addq $-16, %rsi + 0x48, 0x83, 0xc0, 0x10, //0x00000f2d addq $16, %rax + 0x48, 0x83, 0xc7, 0x10, //0x00000f31 addq $16, %rdi + 0x48, 0x83, 0xc2, 0x10, //0x00000f35 addq $16, %rdx + 0x48, 0x83, 0xf9, 0x0f, //0x00000f39 cmpq $15, %rcx + 0x0f, 0x87, 0xb5, 0xff, 0xff, 0xff, //0x00000f3d ja LBB0_236 + //0x00000f43 LBB0_238 + 0x48, 0x85, 0xc9, //0x00000f43 testq %rcx, %rcx + 0x0f, 0x84, 0x49, 0x00, 0x00, 0x00, //0x00000f46 je LBB0_246 + 0x49, 0x8d, 0x04, 0x0e, //0x00000f4c leaq (%r14,%rcx), %rax + 0x48, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00000f50 movabsq $17596481021440, %rsi + //0x00000f5a LBB0_240 + 0x41, 0x0f, 0xb6, 0x16, //0x00000f5a movzbl (%r14), %edx + 0x48, 0x83, 0xfa, 0x2c, //0x00000f5e cmpq $44, %rdx + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x00000f62 ja LBB0_242 + 0x48, 0x0f, 0xa3, 0xd6, //0x00000f68 btq %rdx, %rsi + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x00000f6c jb LBB0_246 + //0x00000f72 LBB0_242 + 0x80, 0xfa, 0x5d, //0x00000f72 cmpb $93, %dl + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00000f75 je LBB0_246 + 0x80, 0xfa, 0x7d, //0x00000f7b cmpb $125, %dl + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00000f7e je LBB0_246 + 0x49, 0x83, 0xc6, 0x01, //0x00000f84 addq $1, %r14 + 0x48, 0x83, 0xc1, 0xff, //0x00000f88 addq $-1, %rcx + 0x0f, 0x85, 0xc8, 0xff, 0xff, 0xff, //0x00000f8c jne LBB0_240 + 0x49, 0x89, 0xc6, //0x00000f92 movq %rax, %r14 + //0x00000f95 LBB0_246 + 0x4d, 0x29, 0xe6, //0x00000f95 subq %r12, %r14 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00000f98 movq $8(%rsp), %r9 + 0x4d, 0x89, 0x31, //0x00000f9d movq %r14, (%r9) + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x00000fa0 movq $24(%rsp), %r13 + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000fa5 movabsq $4294977024, %r10 + 0xe9, 0x32, 0x04, 0x00, 0x00, //0x00000faf jmp LBB0_293 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000fb4 .p2align 4, 0x90 + //0x00000fc0 LBB0_247 + 0x0f, 0xbc, 0xf6, //0x00000fc0 bsfl %esi, %esi + 0x49, 0x89, 0xf6, //0x00000fc3 movq %rsi, %r14 + 0x49, 0x29, 0xfe, //0x00000fc6 subq %rdi, %r14 + 0x4d, 0x89, 0x31, //0x00000fc9 movq %r14, (%r9) + 0x4d, 0x85, 0xf6, //0x00000fcc testq %r14, %r14 + 0x0f, 0x8e, 0x11, 0x04, 0x00, 0x00, //0x00000fcf jle LBB0_293 + 0x48, 0x01, 0xf1, //0x00000fd5 addq %rsi, %rcx + 0x48, 0x01, 0xf0, //0x00000fd8 addq %rsi, %rax + 0x48, 0x01, 0xf2, //0x00000fdb addq %rsi, %rdx + 0x90, 0x90, //0x00000fde .p2align 4, 0x90 + //0x00000fe0 LBB0_249 + 0x0f, 0xb6, 0x32, //0x00000fe0 movzbl (%rdx), %esi + 0x48, 0x83, 0xfe, 0x20, //0x00000fe3 cmpq $32, %rsi + 0x0f, 0x87, 0xf9, 0x03, 0x00, 0x00, //0x00000fe7 ja LBB0_293 + 0x49, 0x0f, 0xa3, 0xf2, //0x00000fed btq %rsi, %r10 + 0x0f, 0x83, 0xef, 0x03, 0x00, 0x00, //0x00000ff1 jae LBB0_293 + 0x49, 0x89, 0x01, //0x00000ff7 movq %rax, (%r9) + 0x48, 0x83, 0xc1, 0xff, //0x00000ffa addq $-1, %rcx + 0x48, 0x83, 0xc0, 0xff, //0x00000ffe addq $-1, %rax + 0x48, 0x83, 0xc2, 0xff, //0x00001002 addq $-1, %rdx + 0x49, 0x83, 0xc6, 0xff, //0x00001006 addq $-1, %r14 + 0x48, 0x83, 0xf9, 0x01, //0x0000100a cmpq $1, %rcx + 0x0f, 0x8f, 0xcc, 0xff, 0xff, 0xff, //0x0000100e jg LBB0_249 + 0xe9, 0xcd, 0x03, 0x00, 0x00, //0x00001014 jmp LBB0_293 + //0x00001019 LBB0_252 + 0x48, 0x83, 0xc0, 0x04, //0x00001019 addq $4, %rax + 0x49, 0x3b, 0x45, 0x00, //0x0000101d cmpq (%r13), %rax + 0x0f, 0x86, 0xb9, 0x03, 0x00, 0x00, //0x00001021 jbe LBB0_292 + 0xe9, 0xba, 0x03, 0x00, 0x00, //0x00001027 jmp LBB0_293 + //0x0000102c LBB0_253 + 0x4c, 0x89, 0x7c, 0x24, 0x28, //0x0000102c movq %r15, $40(%rsp) + 0x4d, 0x8b, 0x45, 0x00, //0x00001031 movq (%r13), %r8 + 0x4d, 0x89, 0xc7, //0x00001035 movq %r8, %r15 + 0x4d, 0x29, 0xf7, //0x00001038 subq %r14, %r15 + 0x49, 0x83, 0xff, 0x20, //0x0000103b cmpq $32, %r15 + 0x0f, 0x8c, 0x3d, 0x0e, 0x00, 0x00, //0x0000103f jl LBB0_372 + 0x4d, 0x8d, 0x0c, 0x04, //0x00001045 leaq (%r12,%rax), %r9 + 0x49, 0x29, 0xc0, //0x00001049 subq %rax, %r8 + 0xbb, 0x1f, 0x00, 0x00, 0x00, //0x0000104c movl $31, %ebx + 0x45, 0x31, 0xff, //0x00001051 xorl %r15d, %r15d + 0x45, 0x31, 0xdb, //0x00001054 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001057 .p2align 4, 0x90 + //0x00001060 LBB0_255 + 0xc4, 0x81, 0x7e, 0x6f, 0x74, 0x39, 0x01, //0x00001060 vmovdqu $1(%r9,%r15), %ymm6 + 0xc5, 0x4d, 0x74, 0xd9, //0x00001067 vpcmpeqb %ymm1, %ymm6, %ymm11 + 0xc4, 0x41, 0x7d, 0xd7, 0xd3, //0x0000106b vpmovmskb %ymm11, %r10d + 0xc5, 0xcd, 0x74, 0xf2, //0x00001070 vpcmpeqb %ymm2, %ymm6, %ymm6 + 0xc5, 0xfd, 0xd7, 0xfe, //0x00001074 vpmovmskb %ymm6, %edi + 0x85, 0xff, //0x00001078 testl %edi, %edi + 0x0f, 0x85, 0x20, 0x00, 0x00, 0x00, //0x0000107a jne LBB0_258 + 0x4d, 0x85, 0xdb, //0x00001080 testq %r11, %r11 + 0x0f, 0x85, 0x17, 0x00, 0x00, 0x00, //0x00001083 jne LBB0_258 + 0x45, 0x31, 0xdb, //0x00001089 xorl %r11d, %r11d + 0xe9, 0x40, 0x00, 0x00, 0x00, //0x0000108c jmp LBB0_259 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001091 .p2align 4, 0x90 + //0x000010a0 LBB0_258 + 0x44, 0x89, 0xde, //0x000010a0 movl %r11d, %esi + 0xf7, 0xd6, //0x000010a3 notl %esi + 0x21, 0xfe, //0x000010a5 andl %edi, %esi + 0x8d, 0x0c, 0x36, //0x000010a7 leal (%rsi,%rsi), %ecx + 0x44, 0x09, 0xd9, //0x000010aa orl %r11d, %ecx + 0x89, 0xca, //0x000010ad movl %ecx, %edx + 0xf7, 0xd2, //0x000010af notl %edx + 0x21, 0xfa, //0x000010b1 andl %edi, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x000010b3 andl $-1431655766, %edx + 0x45, 0x31, 0xdb, //0x000010b9 xorl %r11d, %r11d + 0x01, 0xf2, //0x000010bc addl %esi, %edx + 0x41, 0x0f, 0x92, 0xc3, //0x000010be setb %r11b + 0x01, 0xd2, //0x000010c2 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x000010c4 xorl $1431655765, %edx + 0x21, 0xca, //0x000010ca andl %ecx, %edx + 0xf7, 0xd2, //0x000010cc notl %edx + 0x41, 0x21, 0xd2, //0x000010ce andl %edx, %r10d + //0x000010d1 LBB0_259 + 0x4d, 0x85, 0xd2, //0x000010d1 testq %r10, %r10 + 0x0f, 0x85, 0x94, 0x07, 0x00, 0x00, //0x000010d4 jne LBB0_351 + 0x49, 0x83, 0xc7, 0x20, //0x000010da addq $32, %r15 + 0x49, 0x8d, 0x0c, 0x18, //0x000010de leaq (%r8,%rbx), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x000010e2 addq $-32, %rcx + 0x48, 0x83, 0xc3, 0xe0, //0x000010e6 addq $-32, %rbx + 0x48, 0x83, 0xf9, 0x3f, //0x000010ea cmpq $63, %rcx + 0x0f, 0x8f, 0x6c, 0xff, 0xff, 0xff, //0x000010ee jg LBB0_255 + 0x4d, 0x85, 0xdb, //0x000010f4 testq %r11, %r11 + 0x0f, 0x85, 0x48, 0x0f, 0x00, 0x00, //0x000010f7 jne LBB0_396 + 0x4b, 0x8d, 0x04, 0x0f, //0x000010fd leaq (%r15,%r9), %rax + 0x48, 0x83, 0xc0, 0x01, //0x00001101 addq $1, %rax + 0x49, 0xf7, 0xd7, //0x00001105 notq %r15 + 0x4d, 0x01, 0xc7, //0x00001108 addq %r8, %r15 + //0x0000110b LBB0_263 + 0x4d, 0x85, 0xff, //0x0000110b testq %r15, %r15 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x0000110e movq $8(%rsp), %r9 + 0x0f, 0x8e, 0x6c, 0x07, 0x00, 0x00, //0x00001113 jle LBB0_352 + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001119 movabsq $4294977024, %r10 + 0xe9, 0x89, 0x07, 0x00, 0x00, //0x00001123 jmp LBB0_354 + //0x00001128 LBB0_265 + 0x4d, 0x8b, 0x45, 0x00, //0x00001128 movq (%r13), %r8 + 0x4d, 0x29, 0xf0, //0x0000112c subq %r14, %r8 + 0x4d, 0x01, 0xf4, //0x0000112f addq %r14, %r12 + 0x45, 0x31, 0xd2, //0x00001132 xorl %r10d, %r10d + 0x45, 0x31, 0xdb, //0x00001135 xorl %r11d, %r11d + 0x45, 0x31, 0xf6, //0x00001138 xorl %r14d, %r14d + 0x31, 0xd2, //0x0000113b xorl %edx, %edx + 0xe9, 0x17, 0x00, 0x00, 0x00, //0x0000113d jmp LBB0_267 + //0x00001142 LBB0_266 + 0x48, 0xc1, 0xf9, 0x3f, //0x00001142 sarq $63, %rcx + 0xf3, 0x48, 0x0f, 0xb8, 0xc7, //0x00001146 popcntq %rdi, %rax + 0x49, 0x01, 0xc6, //0x0000114b addq %rax, %r14 + 0x49, 0x83, 0xc4, 0x40, //0x0000114e addq $64, %r12 + 0x49, 0x83, 0xc0, 0xc0, //0x00001152 addq $-64, %r8 + 0x49, 0x89, 0xca, //0x00001156 movq %rcx, %r10 + //0x00001159 LBB0_267 + 0x49, 0x83, 0xf8, 0x40, //0x00001159 cmpq $64, %r8 + 0x0f, 0x8c, 0x3a, 0x01, 0x00, 0x00, //0x0000115d jl LBB0_275 + //0x00001163 LBB0_268 + 0xc4, 0x41, 0x7e, 0x6f, 0x3c, 0x24, //0x00001163 vmovdqu (%r12), %ymm15 + 0xc4, 0x41, 0x7e, 0x6f, 0x74, 0x24, 0x20, //0x00001169 vmovdqu $32(%r12), %ymm14 + 0xc5, 0x85, 0x74, 0xf2, //0x00001170 vpcmpeqb %ymm2, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xf6, //0x00001174 vpmovmskb %ymm6, %esi + 0xc5, 0x8d, 0x74, 0xf2, //0x00001178 vpcmpeqb %ymm2, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xc6, //0x0000117c vpmovmskb %ymm6, %eax + 0x48, 0xc1, 0xe0, 0x20, //0x00001180 shlq $32, %rax + 0x48, 0x09, 0xc6, //0x00001184 orq %rax, %rsi + 0x48, 0x89, 0xf0, //0x00001187 movq %rsi, %rax + 0x4c, 0x09, 0xd8, //0x0000118a orq %r11, %rax + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x0000118d jne LBB0_270 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00001193 movq $-1, %rsi + 0x45, 0x31, 0xdb, //0x0000119a xorl %r11d, %r11d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x0000119d jmp LBB0_271 + //0x000011a2 LBB0_270 + 0x4c, 0x89, 0xd8, //0x000011a2 movq %r11, %rax + 0x48, 0xf7, 0xd0, //0x000011a5 notq %rax + 0x48, 0x21, 0xf0, //0x000011a8 andq %rsi, %rax + 0x48, 0x8d, 0x1c, 0x00, //0x000011ab leaq (%rax,%rax), %rbx + 0x4c, 0x09, 0xdb, //0x000011af orq %r11, %rbx + 0x48, 0x89, 0xdf, //0x000011b2 movq %rbx, %rdi + 0x48, 0xf7, 0xd7, //0x000011b5 notq %rdi + 0x48, 0xb9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000011b8 movabsq $-6148914691236517206, %rcx + 0x48, 0x21, 0xce, //0x000011c2 andq %rcx, %rsi + 0x48, 0x21, 0xfe, //0x000011c5 andq %rdi, %rsi + 0x45, 0x31, 0xdb, //0x000011c8 xorl %r11d, %r11d + 0x48, 0x01, 0xc6, //0x000011cb addq %rax, %rsi + 0x41, 0x0f, 0x92, 0xc3, //0x000011ce setb %r11b + 0x48, 0x01, 0xf6, //0x000011d2 addq %rsi, %rsi + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000011d5 movabsq $6148914691236517205, %rax + 0x48, 0x31, 0xc6, //0x000011df xorq %rax, %rsi + 0x48, 0x21, 0xde, //0x000011e2 andq %rbx, %rsi + 0x48, 0xf7, 0xd6, //0x000011e5 notq %rsi + //0x000011e8 LBB0_271 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x000011e8 movq $8(%rsp), %r9 + 0xc5, 0x8d, 0x74, 0xf1, //0x000011ed vpcmpeqb %ymm1, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xc6, //0x000011f1 vpmovmskb %ymm6, %eax + 0x48, 0xc1, 0xe0, 0x20, //0x000011f5 shlq $32, %rax + 0xc5, 0x85, 0x74, 0xf1, //0x000011f9 vpcmpeqb %ymm1, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xfe, //0x000011fd vpmovmskb %ymm6, %edi + 0x48, 0x09, 0xc7, //0x00001201 orq %rax, %rdi + 0x48, 0x21, 0xf7, //0x00001204 andq %rsi, %rdi + 0xc4, 0xe1, 0xf9, 0x6e, 0xf7, //0x00001207 vmovq %rdi, %xmm6 + 0xc4, 0xc3, 0x49, 0x44, 0xf1, 0x00, //0x0000120c vpclmulqdq $0, %xmm9, %xmm6, %xmm6 + 0xc4, 0xe1, 0xf9, 0x7e, 0xf1, //0x00001212 vmovq %xmm6, %rcx + 0x4c, 0x31, 0xd1, //0x00001217 xorq %r10, %rcx + 0xc4, 0xc1, 0x05, 0x74, 0xf2, //0x0000121a vpcmpeqb %ymm10, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xfe, //0x0000121f vpmovmskb %ymm6, %edi + 0xc4, 0xc1, 0x0d, 0x74, 0xf2, //0x00001223 vpcmpeqb %ymm10, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xc6, //0x00001228 vpmovmskb %ymm6, %eax + 0x48, 0xc1, 0xe0, 0x20, //0x0000122c shlq $32, %rax + 0x48, 0x09, 0xc7, //0x00001230 orq %rax, %rdi + 0x48, 0x89, 0xce, //0x00001233 movq %rcx, %rsi + 0x48, 0xf7, 0xd6, //0x00001236 notq %rsi + 0x48, 0x21, 0xf7, //0x00001239 andq %rsi, %rdi + 0xc5, 0x85, 0x74, 0xf5, //0x0000123c vpcmpeqb %ymm5, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xc6, //0x00001240 vpmovmskb %ymm6, %eax + 0xc5, 0x8d, 0x74, 0xf5, //0x00001244 vpcmpeqb %ymm5, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xde, //0x00001248 vpmovmskb %ymm6, %ebx + 0x48, 0xc1, 0xe3, 0x20, //0x0000124c shlq $32, %rbx + 0x48, 0x09, 0xd8, //0x00001250 orq %rbx, %rax + 0x48, 0x21, 0xf0, //0x00001253 andq %rsi, %rax + 0x0f, 0x84, 0xe6, 0xfe, 0xff, 0xff, //0x00001256 je LBB0_266 + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000125c movabsq $4294977024, %r10 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001266 .p2align 4, 0x90 + //0x00001270 LBB0_273 + 0x48, 0x8d, 0x58, 0xff, //0x00001270 leaq $-1(%rax), %rbx + 0x48, 0x89, 0xde, //0x00001274 movq %rbx, %rsi + 0x48, 0x21, 0xfe, //0x00001277 andq %rdi, %rsi + 0xf3, 0x48, 0x0f, 0xb8, 0xf6, //0x0000127a popcntq %rsi, %rsi + 0x4c, 0x01, 0xf6, //0x0000127f addq %r14, %rsi + 0x48, 0x39, 0xd6, //0x00001282 cmpq %rdx, %rsi + 0x0f, 0x86, 0xba, 0x05, 0x00, 0x00, //0x00001285 jbe LBB0_350 + 0x48, 0x83, 0xc2, 0x01, //0x0000128b addq $1, %rdx + 0x48, 0x21, 0xd8, //0x0000128f andq %rbx, %rax + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00001292 jne LBB0_273 + 0xe9, 0xa5, 0xfe, 0xff, 0xff, //0x00001298 jmp LBB0_266 + //0x0000129d LBB0_275 + 0x4d, 0x85, 0xc0, //0x0000129d testq %r8, %r8 + 0x0f, 0x8e, 0x7f, 0x0d, 0x00, 0x00, //0x000012a0 jle LBB0_395 + 0xc5, 0xc9, 0xef, 0xf6, //0x000012a6 vpxor %xmm6, %xmm6, %xmm6 + 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x60, //0x000012aa vmovdqu %ymm6, $96(%rsp) + 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x000012b0 vmovdqu %ymm6, $64(%rsp) + 0x44, 0x89, 0xe0, //0x000012b6 movl %r12d, %eax + 0x25, 0xff, 0x0f, 0x00, 0x00, //0x000012b9 andl $4095, %eax + 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x000012be cmpl $4033, %eax + 0x0f, 0x82, 0x28, 0x00, 0x00, 0x00, //0x000012c3 jb LBB0_279 + 0x49, 0x83, 0xf8, 0x20, //0x000012c9 cmpq $32, %r8 + 0x0f, 0x82, 0x28, 0x00, 0x00, 0x00, //0x000012cd jb LBB0_280 + 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x24, //0x000012d3 vmovdqu (%r12), %ymm6 + 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x000012d9 vmovdqu %ymm6, $64(%rsp) + 0x49, 0x83, 0xc4, 0x20, //0x000012df addq $32, %r12 + 0x49, 0x8d, 0x78, 0xe0, //0x000012e3 leaq $-32(%r8), %rdi + 0x4c, 0x8d, 0x4c, 0x24, 0x60, //0x000012e7 leaq $96(%rsp), %r9 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x000012ec jmp LBB0_281 + //0x000012f1 LBB0_279 + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x000012f1 movq $24(%rsp), %r13 + 0xe9, 0x68, 0xfe, 0xff, 0xff, //0x000012f6 jmp LBB0_268 + //0x000012fb LBB0_280 + 0x4c, 0x8d, 0x4c, 0x24, 0x40, //0x000012fb leaq $64(%rsp), %r9 + 0x4c, 0x89, 0xc7, //0x00001300 movq %r8, %rdi + //0x00001303 LBB0_281 + 0x48, 0x83, 0xff, 0x10, //0x00001303 cmpq $16, %rdi + 0x0f, 0x82, 0x4d, 0x00, 0x00, 0x00, //0x00001307 jb LBB0_282 + 0xc4, 0xc1, 0x7a, 0x6f, 0x34, 0x24, //0x0000130d vmovdqu (%r12), %xmm6 + 0xc4, 0xc1, 0x7a, 0x7f, 0x31, //0x00001313 vmovdqu %xmm6, (%r9) + 0x49, 0x83, 0xc4, 0x10, //0x00001318 addq $16, %r12 + 0x49, 0x83, 0xc1, 0x10, //0x0000131c addq $16, %r9 + 0x48, 0x83, 0xc7, 0xf0, //0x00001320 addq $-16, %rdi + 0x48, 0x83, 0xff, 0x08, //0x00001324 cmpq $8, %rdi + 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x00001328 jae LBB0_289 + //0x0000132e LBB0_283 + 0x48, 0x83, 0xff, 0x04, //0x0000132e cmpq $4, %rdi + 0x0f, 0x8c, 0x49, 0x00, 0x00, 0x00, //0x00001332 jl LBB0_284 + //0x00001338 LBB0_290 + 0x41, 0x8b, 0x04, 0x24, //0x00001338 movl (%r12), %eax + 0x41, 0x89, 0x01, //0x0000133c movl %eax, (%r9) + 0x49, 0x83, 0xc4, 0x04, //0x0000133f addq $4, %r12 + 0x49, 0x83, 0xc1, 0x04, //0x00001343 addq $4, %r9 + 0x48, 0x83, 0xc7, 0xfc, //0x00001347 addq $-4, %rdi + 0x48, 0x83, 0xff, 0x02, //0x0000134b cmpq $2, %rdi + 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x0000134f jae LBB0_285 + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001355 jmp LBB0_286 + //0x0000135a LBB0_282 + 0x48, 0x83, 0xff, 0x08, //0x0000135a cmpq $8, %rdi + 0x0f, 0x82, 0xca, 0xff, 0xff, 0xff, //0x0000135e jb LBB0_283 + //0x00001364 LBB0_289 + 0x49, 0x8b, 0x04, 0x24, //0x00001364 movq (%r12), %rax + 0x49, 0x89, 0x01, //0x00001368 movq %rax, (%r9) + 0x49, 0x83, 0xc4, 0x08, //0x0000136b addq $8, %r12 + 0x49, 0x83, 0xc1, 0x08, //0x0000136f addq $8, %r9 + 0x48, 0x83, 0xc7, 0xf8, //0x00001373 addq $-8, %rdi + 0x48, 0x83, 0xff, 0x04, //0x00001377 cmpq $4, %rdi + 0x0f, 0x8d, 0xb7, 0xff, 0xff, 0xff, //0x0000137b jge LBB0_290 + //0x00001381 LBB0_284 + 0x48, 0x83, 0xff, 0x02, //0x00001381 cmpq $2, %rdi + 0x0f, 0x82, 0x15, 0x00, 0x00, 0x00, //0x00001385 jb LBB0_286 + //0x0000138b LBB0_285 + 0x41, 0x0f, 0xb7, 0x04, 0x24, //0x0000138b movzwl (%r12), %eax + 0x66, 0x41, 0x89, 0x01, //0x00001390 movw %ax, (%r9) + 0x49, 0x83, 0xc4, 0x02, //0x00001394 addq $2, %r12 + 0x49, 0x83, 0xc1, 0x02, //0x00001398 addq $2, %r9 + 0x48, 0x83, 0xc7, 0xfe, //0x0000139c addq $-2, %rdi + //0x000013a0 LBB0_286 + 0x4c, 0x89, 0xe0, //0x000013a0 movq %r12, %rax + 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x000013a3 leaq $64(%rsp), %r12 + 0x48, 0x85, 0xff, //0x000013a8 testq %rdi, %rdi + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x000013ab movq $24(%rsp), %r13 + 0x0f, 0x84, 0xad, 0xfd, 0xff, 0xff, //0x000013b0 je LBB0_268 + 0x8a, 0x00, //0x000013b6 movb (%rax), %al + 0x41, 0x88, 0x01, //0x000013b8 movb %al, (%r9) + 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x000013bb leaq $64(%rsp), %r12 + 0xe9, 0x9e, 0xfd, 0xff, 0xff, //0x000013c0 jmp LBB0_268 + //0x000013c5 LBB0_291 + 0x48, 0x83, 0xc0, 0x05, //0x000013c5 addq $5, %rax + 0x49, 0x3b, 0x45, 0x00, //0x000013c9 cmpq (%r13), %rax + 0x0f, 0x87, 0x13, 0x00, 0x00, 0x00, //0x000013cd ja LBB0_293 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000013d3 .p2align 4, 0x90 + //0x000013e0 LBB0_292 + 0x49, 0x89, 0x01, //0x000013e0 movq %rax, (%r9) + 0x49, 0x89, 0xc6, //0x000013e3 movq %rax, %r14 + //0x000013e6 LBB0_293 + 0x48, 0x8b, 0x84, 0x24, 0x90, 0x00, 0x00, 0x00, //0x000013e6 movq $144(%rsp), %rax + 0x4c, 0x8b, 0x20, //0x000013ee movq (%rax), %r12 + 0x48, 0x8b, 0x40, 0x08, //0x000013f1 movq $8(%rax), %rax + 0x49, 0x39, 0xc6, //0x000013f5 cmpq %rax, %r14 + 0x0f, 0x83, 0x32, 0x00, 0x00, 0x00, //0x000013f8 jae LBB0_298 + 0x43, 0x8a, 0x0c, 0x34, //0x000013fe movb (%r12,%r14), %cl + 0x80, 0xf9, 0x0d, //0x00001402 cmpb $13, %cl + 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00001405 je LBB0_298 + 0x80, 0xf9, 0x20, //0x0000140b cmpb $32, %cl + 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x0000140e je LBB0_298 + 0x80, 0xc1, 0xf7, //0x00001414 addb $-9, %cl + 0x80, 0xf9, 0x01, //0x00001417 cmpb $1, %cl + 0x0f, 0x86, 0x10, 0x00, 0x00, 0x00, //0x0000141a jbe LBB0_298 + 0x4c, 0x89, 0xf1, //0x00001420 movq %r14, %rcx + 0xe9, 0x69, 0x01, 0x00, 0x00, //0x00001423 jmp LBB0_323 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001428 .p2align 4, 0x90 + //0x00001430 LBB0_298 + 0x49, 0x8d, 0x4e, 0x01, //0x00001430 leaq $1(%r14), %rcx + 0x48, 0x39, 0xc1, //0x00001434 cmpq %rax, %rcx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001437 jae LBB0_302 + 0x41, 0x8a, 0x14, 0x0c, //0x0000143d movb (%r12,%rcx), %dl + 0x80, 0xfa, 0x0d, //0x00001441 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001444 je LBB0_302 + 0x80, 0xfa, 0x20, //0x0000144a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000144d je LBB0_302 + 0x80, 0xc2, 0xf7, //0x00001453 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00001456 cmpb $1, %dl + 0x0f, 0x87, 0x32, 0x01, 0x00, 0x00, //0x00001459 ja LBB0_323 + 0x90, //0x0000145f .p2align 4, 0x90 + //0x00001460 LBB0_302 + 0x49, 0x8d, 0x4e, 0x02, //0x00001460 leaq $2(%r14), %rcx + 0x48, 0x39, 0xc1, //0x00001464 cmpq %rax, %rcx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001467 jae LBB0_306 + 0x41, 0x8a, 0x14, 0x0c, //0x0000146d movb (%r12,%rcx), %dl + 0x80, 0xfa, 0x0d, //0x00001471 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001474 je LBB0_306 + 0x80, 0xfa, 0x20, //0x0000147a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000147d je LBB0_306 + 0x80, 0xc2, 0xf7, //0x00001483 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00001486 cmpb $1, %dl + 0x0f, 0x87, 0x02, 0x01, 0x00, 0x00, //0x00001489 ja LBB0_323 + 0x90, //0x0000148f .p2align 4, 0x90 + //0x00001490 LBB0_306 + 0x49, 0x8d, 0x4e, 0x03, //0x00001490 leaq $3(%r14), %rcx + 0x48, 0x39, 0xc1, //0x00001494 cmpq %rax, %rcx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001497 jae LBB0_310 + 0x41, 0x8a, 0x14, 0x0c, //0x0000149d movb (%r12,%rcx), %dl + 0x80, 0xfa, 0x0d, //0x000014a1 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000014a4 je LBB0_310 + 0x80, 0xfa, 0x20, //0x000014aa cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000014ad je LBB0_310 + 0x80, 0xc2, 0xf7, //0x000014b3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000014b6 cmpb $1, %dl + 0x0f, 0x87, 0xd2, 0x00, 0x00, 0x00, //0x000014b9 ja LBB0_323 + 0x90, //0x000014bf .p2align 4, 0x90 + //0x000014c0 LBB0_310 + 0x49, 0x8d, 0x4e, 0x04, //0x000014c0 leaq $4(%r14), %rcx + 0x48, 0x89, 0xc2, //0x000014c4 movq %rax, %rdx + 0x48, 0x29, 0xca, //0x000014c7 subq %rcx, %rdx + 0x0f, 0x86, 0xe4, 0x1d, 0x00, 0x00, //0x000014ca jbe LBB0_1047 + 0x48, 0x83, 0xfa, 0x20, //0x000014d0 cmpq $32, %rdx + 0x0f, 0x82, 0x2c, 0x09, 0x00, 0x00, //0x000014d4 jb LBB0_368 + 0x48, 0xc7, 0xc2, 0xfc, 0xff, 0xff, 0xff, //0x000014da movq $-4, %rdx + 0x4c, 0x29, 0xf2, //0x000014e1 subq %r14, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000014e4 .p2align 4, 0x90 + //0x000014f0 LBB0_313 + 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x0c, //0x000014f0 vmovdqu (%r12,%rcx), %ymm6 + 0xc4, 0xe2, 0x7d, 0x00, 0xfe, //0x000014f6 vpshufb %ymm6, %ymm0, %ymm7 + 0xc5, 0xcd, 0x74, 0xf7, //0x000014fb vpcmpeqb %ymm7, %ymm6, %ymm6 + 0xc5, 0xfd, 0xd7, 0xf6, //0x000014ff vpmovmskb %ymm6, %esi + 0x83, 0xfe, 0xff, //0x00001503 cmpl $-1, %esi + 0x0f, 0x85, 0x74, 0x00, 0x00, 0x00, //0x00001506 jne LBB0_322 + 0x48, 0x83, 0xc1, 0x20, //0x0000150c addq $32, %rcx + 0x48, 0x8d, 0x34, 0x10, //0x00001510 leaq (%rax,%rdx), %rsi + 0x48, 0x83, 0xc6, 0xe0, //0x00001514 addq $-32, %rsi + 0x48, 0x83, 0xc2, 0xe0, //0x00001518 addq $-32, %rdx + 0x48, 0x83, 0xfe, 0x1f, //0x0000151c cmpq $31, %rsi + 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00001520 ja LBB0_313 + 0x4c, 0x89, 0xe1, //0x00001526 movq %r12, %rcx + 0x48, 0x29, 0xd1, //0x00001529 subq %rdx, %rcx + 0x48, 0x01, 0xc2, //0x0000152c addq %rax, %rdx + 0x48, 0x85, 0xd2, //0x0000152f testq %rdx, %rdx + 0x0f, 0x84, 0x2d, 0x00, 0x00, 0x00, //0x00001532 je LBB0_321 + //0x00001538 LBB0_316 + 0x48, 0x8d, 0x3c, 0x11, //0x00001538 leaq (%rcx,%rdx), %rdi + 0x31, 0xf6, //0x0000153c xorl %esi, %esi + //0x0000153e LBB0_317 + 0x0f, 0xbe, 0x1c, 0x31, //0x0000153e movsbl (%rcx,%rsi), %ebx + 0x83, 0xfb, 0x20, //0x00001542 cmpl $32, %ebx + 0x0f, 0x87, 0x20, 0x04, 0x00, 0x00, //0x00001545 ja LBB0_364 + 0x49, 0x0f, 0xa3, 0xda, //0x0000154b btq %rbx, %r10 + 0x0f, 0x83, 0x16, 0x04, 0x00, 0x00, //0x0000154f jae LBB0_364 + 0x48, 0x83, 0xc6, 0x01, //0x00001555 addq $1, %rsi + 0x48, 0x39, 0xf2, //0x00001559 cmpq %rsi, %rdx + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x0000155c jne LBB0_317 + 0x48, 0x89, 0xf9, //0x00001562 movq %rdi, %rcx + //0x00001565 LBB0_321 + 0x4c, 0x29, 0xe1, //0x00001565 subq %r12, %rcx + 0x48, 0x39, 0xc1, //0x00001568 cmpq %rax, %rcx + 0x0f, 0x82, 0x20, 0x00, 0x00, 0x00, //0x0000156b jb LBB0_323 + 0xe9, 0x95, 0x39, 0x00, 0x00, //0x00001571 jmp LBB0_1048 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001576 .p2align 4, 0x90 + //0x00001580 LBB0_322 + 0xf7, 0xd6, //0x00001580 notl %esi + 0x0f, 0xbc, 0xce, //0x00001582 bsfl %esi, %ecx + 0x48, 0x29, 0xd1, //0x00001585 subq %rdx, %rcx + 0x48, 0x39, 0xc1, //0x00001588 cmpq %rax, %rcx + 0x0f, 0x83, 0x7a, 0x39, 0x00, 0x00, //0x0000158b jae LBB0_1048 + //0x00001591 LBB0_323 + 0x4c, 0x8d, 0x71, 0x01, //0x00001591 leaq $1(%rcx), %r14 + 0x4d, 0x89, 0x31, //0x00001595 movq %r14, (%r9) + 0x41, 0x8a, 0x04, 0x0c, //0x00001598 movb (%r12,%rcx), %al + 0x3c, 0x2c, //0x0000159c cmpb $44, %al + 0x0f, 0x84, 0x97, 0xef, 0xff, 0xff, //0x0000159e je LBB0_38 + 0xe9, 0x16, 0x1d, 0x00, 0x00, //0x000015a4 jmp LBB0_646 + //0x000015a9 LBB0_324 + 0x4d, 0x8b, 0x45, 0x00, //0x000015a9 movq (%r13), %r8 + 0x4d, 0x29, 0xf0, //0x000015ad subq %r14, %r8 + 0x4d, 0x01, 0xf4, //0x000015b0 addq %r14, %r12 + 0x45, 0x31, 0xd2, //0x000015b3 xorl %r10d, %r10d + 0x45, 0x31, 0xdb, //0x000015b6 xorl %r11d, %r11d + 0x45, 0x31, 0xf6, //0x000015b9 xorl %r14d, %r14d + 0x31, 0xd2, //0x000015bc xorl %edx, %edx + 0xe9, 0x17, 0x00, 0x00, 0x00, //0x000015be jmp LBB0_326 + //0x000015c3 LBB0_325 + 0x48, 0xc1, 0xf9, 0x3f, //0x000015c3 sarq $63, %rcx + 0xf3, 0x48, 0x0f, 0xb8, 0xc7, //0x000015c7 popcntq %rdi, %rax + 0x49, 0x01, 0xc6, //0x000015cc addq %rax, %r14 + 0x49, 0x83, 0xc4, 0x40, //0x000015cf addq $64, %r12 + 0x49, 0x83, 0xc0, 0xc0, //0x000015d3 addq $-64, %r8 + 0x49, 0x89, 0xca, //0x000015d7 movq %rcx, %r10 + //0x000015da LBB0_326 + 0x49, 0x83, 0xf8, 0x40, //0x000015da cmpq $64, %r8 + 0x0f, 0x8c, 0x39, 0x01, 0x00, 0x00, //0x000015de jl LBB0_334 + //0x000015e4 LBB0_327 + 0xc4, 0x41, 0x7e, 0x6f, 0x3c, 0x24, //0x000015e4 vmovdqu (%r12), %ymm15 + 0xc4, 0x41, 0x7e, 0x6f, 0x74, 0x24, 0x20, //0x000015ea vmovdqu $32(%r12), %ymm14 + 0xc5, 0x85, 0x74, 0xf2, //0x000015f1 vpcmpeqb %ymm2, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xf6, //0x000015f5 vpmovmskb %ymm6, %esi + 0xc5, 0x8d, 0x74, 0xf2, //0x000015f9 vpcmpeqb %ymm2, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xc6, //0x000015fd vpmovmskb %ymm6, %eax + 0x48, 0xc1, 0xe0, 0x20, //0x00001601 shlq $32, %rax + 0x48, 0x09, 0xc6, //0x00001605 orq %rax, %rsi + 0x48, 0x89, 0xf0, //0x00001608 movq %rsi, %rax + 0x4c, 0x09, 0xd8, //0x0000160b orq %r11, %rax + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x0000160e jne LBB0_329 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00001614 movq $-1, %rsi + 0x45, 0x31, 0xdb, //0x0000161b xorl %r11d, %r11d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x0000161e jmp LBB0_330 + //0x00001623 LBB0_329 + 0x4c, 0x89, 0xd8, //0x00001623 movq %r11, %rax + 0x48, 0xf7, 0xd0, //0x00001626 notq %rax + 0x48, 0x21, 0xf0, //0x00001629 andq %rsi, %rax + 0x48, 0x8d, 0x1c, 0x00, //0x0000162c leaq (%rax,%rax), %rbx + 0x4c, 0x09, 0xdb, //0x00001630 orq %r11, %rbx + 0x48, 0x89, 0xdf, //0x00001633 movq %rbx, %rdi + 0x48, 0xf7, 0xd7, //0x00001636 notq %rdi + 0x48, 0xb9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001639 movabsq $-6148914691236517206, %rcx + 0x48, 0x21, 0xce, //0x00001643 andq %rcx, %rsi + 0x48, 0x21, 0xfe, //0x00001646 andq %rdi, %rsi + 0x45, 0x31, 0xdb, //0x00001649 xorl %r11d, %r11d + 0x48, 0x01, 0xc6, //0x0000164c addq %rax, %rsi + 0x41, 0x0f, 0x92, 0xc3, //0x0000164f setb %r11b + 0x48, 0x01, 0xf6, //0x00001653 addq %rsi, %rsi + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001656 movabsq $6148914691236517205, %rax + 0x48, 0x31, 0xc6, //0x00001660 xorq %rax, %rsi + 0x48, 0x21, 0xde, //0x00001663 andq %rbx, %rsi + 0x48, 0xf7, 0xd6, //0x00001666 notq %rsi + //0x00001669 LBB0_330 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00001669 movq $8(%rsp), %r9 + 0xc5, 0x8d, 0x74, 0xf1, //0x0000166e vpcmpeqb %ymm1, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xc6, //0x00001672 vpmovmskb %ymm6, %eax + 0x48, 0xc1, 0xe0, 0x20, //0x00001676 shlq $32, %rax + 0xc5, 0x85, 0x74, 0xf1, //0x0000167a vpcmpeqb %ymm1, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xfe, //0x0000167e vpmovmskb %ymm6, %edi + 0x48, 0x09, 0xc7, //0x00001682 orq %rax, %rdi + 0x48, 0x21, 0xf7, //0x00001685 andq %rsi, %rdi + 0xc4, 0xe1, 0xf9, 0x6e, 0xf7, //0x00001688 vmovq %rdi, %xmm6 + 0xc4, 0xc3, 0x49, 0x44, 0xf1, 0x00, //0x0000168d vpclmulqdq $0, %xmm9, %xmm6, %xmm6 + 0xc4, 0xe1, 0xf9, 0x7e, 0xf1, //0x00001693 vmovq %xmm6, %rcx + 0x4c, 0x31, 0xd1, //0x00001698 xorq %r10, %rcx + 0xc4, 0xc1, 0x05, 0x74, 0xf4, //0x0000169b vpcmpeqb %ymm12, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xfe, //0x000016a0 vpmovmskb %ymm6, %edi + 0xc4, 0xc1, 0x0d, 0x74, 0xf4, //0x000016a4 vpcmpeqb %ymm12, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xc6, //0x000016a9 vpmovmskb %ymm6, %eax + 0x48, 0xc1, 0xe0, 0x20, //0x000016ad shlq $32, %rax + 0x48, 0x09, 0xc7, //0x000016b1 orq %rax, %rdi + 0x48, 0x89, 0xce, //0x000016b4 movq %rcx, %rsi + 0x48, 0xf7, 0xd6, //0x000016b7 notq %rsi + 0x48, 0x21, 0xf7, //0x000016ba andq %rsi, %rdi + 0xc4, 0xc1, 0x05, 0x74, 0xf5, //0x000016bd vpcmpeqb %ymm13, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xc6, //0x000016c2 vpmovmskb %ymm6, %eax + 0xc4, 0xc1, 0x0d, 0x74, 0xf5, //0x000016c6 vpcmpeqb %ymm13, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xde, //0x000016cb vpmovmskb %ymm6, %ebx + 0x48, 0xc1, 0xe3, 0x20, //0x000016cf shlq $32, %rbx + 0x48, 0x09, 0xd8, //0x000016d3 orq %rbx, %rax + 0x48, 0x21, 0xf0, //0x000016d6 andq %rsi, %rax + 0x0f, 0x84, 0xe4, 0xfe, 0xff, 0xff, //0x000016d9 je LBB0_325 + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000016df movabsq $4294977024, %r10 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000016e9 .p2align 4, 0x90 + //0x000016f0 LBB0_332 + 0x48, 0x8d, 0x58, 0xff, //0x000016f0 leaq $-1(%rax), %rbx + 0x48, 0x89, 0xde, //0x000016f4 movq %rbx, %rsi + 0x48, 0x21, 0xfe, //0x000016f7 andq %rdi, %rsi + 0xf3, 0x48, 0x0f, 0xb8, 0xf6, //0x000016fa popcntq %rsi, %rsi + 0x4c, 0x01, 0xf6, //0x000016ff addq %r14, %rsi + 0x48, 0x39, 0xd6, //0x00001702 cmpq %rdx, %rsi + 0x0f, 0x86, 0x3a, 0x01, 0x00, 0x00, //0x00001705 jbe LBB0_350 + 0x48, 0x83, 0xc2, 0x01, //0x0000170b addq $1, %rdx + 0x48, 0x21, 0xd8, //0x0000170f andq %rbx, %rax + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00001712 jne LBB0_332 + 0xe9, 0xa6, 0xfe, 0xff, 0xff, //0x00001718 jmp LBB0_325 + //0x0000171d LBB0_334 + 0x4d, 0x85, 0xc0, //0x0000171d testq %r8, %r8 + 0x0f, 0x8e, 0xff, 0x08, 0x00, 0x00, //0x00001720 jle LBB0_395 + 0xc5, 0xc9, 0xef, 0xf6, //0x00001726 vpxor %xmm6, %xmm6, %xmm6 + 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x60, //0x0000172a vmovdqu %ymm6, $96(%rsp) + 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x00001730 vmovdqu %ymm6, $64(%rsp) + 0x44, 0x89, 0xe0, //0x00001736 movl %r12d, %eax + 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00001739 andl $4095, %eax + 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x0000173e cmpl $4033, %eax + 0x0f, 0x82, 0x28, 0x00, 0x00, 0x00, //0x00001743 jb LBB0_338 + 0x49, 0x83, 0xf8, 0x20, //0x00001749 cmpq $32, %r8 + 0x0f, 0x82, 0x28, 0x00, 0x00, 0x00, //0x0000174d jb LBB0_339 + 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x24, //0x00001753 vmovdqu (%r12), %ymm6 + 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x00001759 vmovdqu %ymm6, $64(%rsp) + 0x49, 0x83, 0xc4, 0x20, //0x0000175f addq $32, %r12 + 0x49, 0x8d, 0x78, 0xe0, //0x00001763 leaq $-32(%r8), %rdi + 0x4c, 0x8d, 0x4c, 0x24, 0x60, //0x00001767 leaq $96(%rsp), %r9 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x0000176c jmp LBB0_340 + //0x00001771 LBB0_338 + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x00001771 movq $24(%rsp), %r13 + 0xe9, 0x69, 0xfe, 0xff, 0xff, //0x00001776 jmp LBB0_327 + //0x0000177b LBB0_339 + 0x4c, 0x8d, 0x4c, 0x24, 0x40, //0x0000177b leaq $64(%rsp), %r9 + 0x4c, 0x89, 0xc7, //0x00001780 movq %r8, %rdi + //0x00001783 LBB0_340 + 0x48, 0x83, 0xff, 0x10, //0x00001783 cmpq $16, %rdi + 0x0f, 0x82, 0x4d, 0x00, 0x00, 0x00, //0x00001787 jb LBB0_341 + 0xc4, 0xc1, 0x7a, 0x6f, 0x34, 0x24, //0x0000178d vmovdqu (%r12), %xmm6 + 0xc4, 0xc1, 0x7a, 0x7f, 0x31, //0x00001793 vmovdqu %xmm6, (%r9) + 0x49, 0x83, 0xc4, 0x10, //0x00001798 addq $16, %r12 + 0x49, 0x83, 0xc1, 0x10, //0x0000179c addq $16, %r9 + 0x48, 0x83, 0xc7, 0xf0, //0x000017a0 addq $-16, %rdi + 0x48, 0x83, 0xff, 0x08, //0x000017a4 cmpq $8, %rdi + 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x000017a8 jae LBB0_348 + //0x000017ae LBB0_342 + 0x48, 0x83, 0xff, 0x04, //0x000017ae cmpq $4, %rdi + 0x0f, 0x8c, 0x49, 0x00, 0x00, 0x00, //0x000017b2 jl LBB0_343 + //0x000017b8 LBB0_349 + 0x41, 0x8b, 0x04, 0x24, //0x000017b8 movl (%r12), %eax + 0x41, 0x89, 0x01, //0x000017bc movl %eax, (%r9) + 0x49, 0x83, 0xc4, 0x04, //0x000017bf addq $4, %r12 + 0x49, 0x83, 0xc1, 0x04, //0x000017c3 addq $4, %r9 + 0x48, 0x83, 0xc7, 0xfc, //0x000017c7 addq $-4, %rdi + 0x48, 0x83, 0xff, 0x02, //0x000017cb cmpq $2, %rdi + 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x000017cf jae LBB0_344 + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x000017d5 jmp LBB0_345 + //0x000017da LBB0_341 + 0x48, 0x83, 0xff, 0x08, //0x000017da cmpq $8, %rdi + 0x0f, 0x82, 0xca, 0xff, 0xff, 0xff, //0x000017de jb LBB0_342 + //0x000017e4 LBB0_348 + 0x49, 0x8b, 0x04, 0x24, //0x000017e4 movq (%r12), %rax + 0x49, 0x89, 0x01, //0x000017e8 movq %rax, (%r9) + 0x49, 0x83, 0xc4, 0x08, //0x000017eb addq $8, %r12 + 0x49, 0x83, 0xc1, 0x08, //0x000017ef addq $8, %r9 + 0x48, 0x83, 0xc7, 0xf8, //0x000017f3 addq $-8, %rdi + 0x48, 0x83, 0xff, 0x04, //0x000017f7 cmpq $4, %rdi + 0x0f, 0x8d, 0xb7, 0xff, 0xff, 0xff, //0x000017fb jge LBB0_349 + //0x00001801 LBB0_343 + 0x48, 0x83, 0xff, 0x02, //0x00001801 cmpq $2, %rdi + 0x0f, 0x82, 0x15, 0x00, 0x00, 0x00, //0x00001805 jb LBB0_345 + //0x0000180b LBB0_344 + 0x41, 0x0f, 0xb7, 0x04, 0x24, //0x0000180b movzwl (%r12), %eax + 0x66, 0x41, 0x89, 0x01, //0x00001810 movw %ax, (%r9) + 0x49, 0x83, 0xc4, 0x02, //0x00001814 addq $2, %r12 + 0x49, 0x83, 0xc1, 0x02, //0x00001818 addq $2, %r9 + 0x48, 0x83, 0xc7, 0xfe, //0x0000181c addq $-2, %rdi + //0x00001820 LBB0_345 + 0x4c, 0x89, 0xe0, //0x00001820 movq %r12, %rax + 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x00001823 leaq $64(%rsp), %r12 + 0x48, 0x85, 0xff, //0x00001828 testq %rdi, %rdi + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x0000182b movq $24(%rsp), %r13 + 0x0f, 0x84, 0xae, 0xfd, 0xff, 0xff, //0x00001830 je LBB0_327 + 0x8a, 0x00, //0x00001836 movb (%rax), %al + 0x41, 0x88, 0x01, //0x00001838 movb %al, (%r9) + 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x0000183b leaq $64(%rsp), %r12 + 0xe9, 0x9f, 0xfd, 0xff, 0xff, //0x00001840 jmp LBB0_327 + //0x00001845 LBB0_350 + 0x49, 0x8b, 0x4d, 0x00, //0x00001845 movq (%r13), %rcx + 0x48, 0x0f, 0xbc, 0xc0, //0x00001849 bsfq %rax, %rax + 0x4c, 0x29, 0xc0, //0x0000184d subq %r8, %rax + 0x4c, 0x8d, 0x34, 0x08, //0x00001850 leaq (%rax,%rcx), %r14 + 0x49, 0x83, 0xc6, 0x01, //0x00001854 addq $1, %r14 + 0x4d, 0x89, 0x31, //0x00001858 movq %r14, (%r9) + 0x49, 0x8b, 0x45, 0x00, //0x0000185b movq (%r13), %rax + 0x49, 0x39, 0xc6, //0x0000185f cmpq %rax, %r14 + 0x4c, 0x0f, 0x47, 0xf0, //0x00001862 cmovaq %rax, %r14 + 0x4d, 0x89, 0x31, //0x00001866 movq %r14, (%r9) + 0xe9, 0x78, 0xfb, 0xff, 0xff, //0x00001869 jmp LBB0_293 + //0x0000186e LBB0_351 + 0x41, 0x0f, 0xbc, 0xca, //0x0000186e bsfl %r10d, %ecx + 0x48, 0x01, 0xc1, //0x00001872 addq %rax, %rcx + 0x4d, 0x8d, 0x34, 0x0f, //0x00001875 leaq (%r15,%rcx), %r14 + 0x49, 0x83, 0xc6, 0x02, //0x00001879 addq $2, %r14 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x0000187d movq $8(%rsp), %r9 + 0x4d, 0x89, 0x31, //0x00001882 movq %r14, (%r9) + //0x00001885 LBB0_352 + 0x4c, 0x8b, 0x7c, 0x24, 0x28, //0x00001885 movq $40(%rsp), %r15 + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000188a movabsq $4294977024, %r10 + 0xe9, 0x4d, 0xfb, 0xff, 0xff, //0x00001894 jmp LBB0_293 + //0x00001899 LBB0_353 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00001899 movq $-2, %rdx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x000018a0 movl $2, %esi + 0x48, 0x01, 0xf0, //0x000018a5 addq %rsi, %rax + 0x49, 0x01, 0xd7, //0x000018a8 addq %rdx, %r15 + 0x0f, 0x8e, 0x2d, 0x00, 0x00, 0x00, //0x000018ab jle LBB0_357 + //0x000018b1 LBB0_354 + 0x0f, 0xb6, 0x10, //0x000018b1 movzbl (%rax), %edx + 0x80, 0xfa, 0x5c, //0x000018b4 cmpb $92, %dl + 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x000018b7 je LBB0_353 + 0x80, 0xfa, 0x22, //0x000018bd cmpb $34, %dl + 0x0f, 0x84, 0x29, 0x05, 0x00, 0x00, //0x000018c0 je LBB0_367 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000018c6 movq $-1, %rdx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x000018cd movl $1, %esi + 0x48, 0x01, 0xf0, //0x000018d2 addq %rsi, %rax + 0x49, 0x01, 0xd7, //0x000018d5 addq %rdx, %r15 + 0x0f, 0x8f, 0xd3, 0xff, 0xff, 0xff, //0x000018d8 jg LBB0_354 + //0x000018de LBB0_357 + 0x4c, 0x8b, 0x7c, 0x24, 0x28, //0x000018de movq $40(%rsp), %r15 + 0xe9, 0xfe, 0xfa, 0xff, 0xff, //0x000018e3 jmp LBB0_293 + //0x000018e8 LBB0_358 + 0x66, 0x0f, 0xbc, 0xcb, //0x000018e8 bsfw %bx, %cx + 0x0f, 0xb7, 0xc9, //0x000018ec movzwl %cx, %ecx + 0x49, 0x89, 0xce, //0x000018ef movq %rcx, %r14 + 0x49, 0x29, 0xf6, //0x000018f2 subq %rsi, %r14 + 0x4d, 0x89, 0x31, //0x000018f5 movq %r14, (%r9) + 0x4d, 0x85, 0xf6, //0x000018f8 testq %r14, %r14 + 0x0f, 0x8e, 0xe5, 0xfa, 0xff, 0xff, //0x000018fb jle LBB0_293 + 0x48, 0x01, 0xc8, //0x00001901 addq %rcx, %rax + 0x48, 0x01, 0xcf, //0x00001904 addq %rcx, %rdi + 0x48, 0x01, 0xca, //0x00001907 addq %rcx, %rdx + //0x0000190a LBB0_360 + 0x0f, 0xb6, 0x0a, //0x0000190a movzbl (%rdx), %ecx + 0x48, 0x83, 0xf9, 0x20, //0x0000190d cmpq $32, %rcx + 0x0f, 0x87, 0xcf, 0xfa, 0xff, 0xff, //0x00001911 ja LBB0_293 + 0x49, 0x0f, 0xa3, 0xca, //0x00001917 btq %rcx, %r10 + 0x0f, 0x83, 0xc5, 0xfa, 0xff, 0xff, //0x0000191b jae LBB0_293 + 0x49, 0x89, 0x39, //0x00001921 movq %rdi, (%r9) + 0x48, 0x83, 0xc0, 0xff, //0x00001924 addq $-1, %rax + 0x48, 0x83, 0xc7, 0xff, //0x00001928 addq $-1, %rdi + 0x48, 0x83, 0xc2, 0xff, //0x0000192c addq $-1, %rdx + 0x49, 0x83, 0xc6, 0xff, //0x00001930 addq $-1, %r14 + 0x48, 0x83, 0xf8, 0x01, //0x00001934 cmpq $1, %rax + 0x0f, 0x8f, 0xcc, 0xff, 0xff, 0xff, //0x00001938 jg LBB0_360 + 0xe9, 0xa3, 0xfa, 0xff, 0xff, //0x0000193e jmp LBB0_293 + //0x00001943 LBB0_118 + 0x4c, 0x29, 0xe1, //0x00001943 subq %r12, %rcx + 0x48, 0x01, 0xf1, //0x00001946 addq %rsi, %rcx + 0x48, 0x39, 0xc1, //0x00001949 cmpq %rax, %rcx + 0x0f, 0x82, 0x8f, 0xed, 0xff, 0xff, //0x0000194c jb LBB0_68 + 0xe9, 0xb4, 0x35, 0x00, 0x00, //0x00001952 jmp LBB0_1048 + //0x00001957 LBB0_363 + 0x4c, 0x29, 0xe1, //0x00001957 subq %r12, %rcx + 0x48, 0x01, 0xf1, //0x0000195a addq %rsi, %rcx + 0x48, 0x39, 0xc1, //0x0000195d cmpq %rax, %rcx + 0x0f, 0x82, 0x1b, 0xf3, 0xff, 0xff, //0x00001960 jb LBB0_196 + 0xe9, 0xa0, 0x35, 0x00, 0x00, //0x00001966 jmp LBB0_1048 + //0x0000196b LBB0_364 + 0x4c, 0x29, 0xe1, //0x0000196b subq %r12, %rcx + 0x48, 0x01, 0xf1, //0x0000196e addq %rsi, %rcx + 0x48, 0x39, 0xc1, //0x00001971 cmpq %rax, %rcx + 0x0f, 0x82, 0x17, 0xfc, 0xff, 0xff, //0x00001974 jb LBB0_323 + 0xe9, 0x8c, 0x35, 0x00, 0x00, //0x0000197a jmp LBB0_1048 + //0x0000197f LBB0_365 + 0x4c, 0x29, 0xe0, //0x0000197f subq %r12, %rax + 0x48, 0x01, 0xc8, //0x00001982 addq %rcx, %rax + 0x48, 0x39, 0xd0, //0x00001985 cmpq %rdx, %rax + 0x0f, 0x82, 0xa3, 0xf4, 0xff, 0xff, //0x00001988 jb LBB0_228 + 0xe9, 0x53, 0xfa, 0xff, 0xff, //0x0000198e jmp LBB0_293 + //0x00001993 LBB0_119 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00001993 movq $-1, %rax + 0x45, 0x31, 0xc9, //0x0000199a xorl %r9d, %r9d + 0x49, 0x89, 0xfe, //0x0000199d movq %rdi, %r14 + 0x49, 0x89, 0xdd, //0x000019a0 movq %rbx, %r13 + 0x48, 0x83, 0xfa, 0x20, //0x000019a3 cmpq $32, %rdx + 0x0f, 0x83, 0x10, 0xf1, 0xff, 0xff, //0x000019a7 jae LBB0_77 + 0xe9, 0x57, 0x05, 0x00, 0x00, //0x000019ad jmp LBB0_378 + //0x000019b2 LBB0_120 + 0x48, 0xc7, 0x44, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, //0x000019b2 movq $0, $64(%rsp) + 0x49, 0x8d, 0x56, 0xff, //0x000019bb leaq $-1(%r14), %rdx + 0x4b, 0x8d, 0x3c, 0x34, //0x000019bf leaq (%r12,%r14), %rdi + 0x48, 0x83, 0xc7, 0xff, //0x000019c3 addq $-1, %rdi + 0x48, 0x8b, 0x44, 0x24, 0x38, //0x000019c7 movq $56(%rsp), %rax + 0x48, 0x8b, 0x4c, 0x24, 0x30, //0x000019cc movq $48(%rsp), %rcx + 0x4c, 0x8d, 0x04, 0x08, //0x000019d1 leaq (%rax,%rcx), %r8 + 0x49, 0x39, 0xd3, //0x000019d5 cmpq %rdx, %r11 + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x000019d8 movq $24(%rsp), %r13 + 0x0f, 0x8d, 0x34, 0x04, 0x00, 0x00, //0x000019dd jge LBB0_168 + 0x48, 0x85, 0xc9, //0x000019e3 testq %rcx, %rcx + 0x0f, 0x8e, 0x2b, 0x04, 0x00, 0x00, //0x000019e6 jle LBB0_168 + 0x48, 0x8b, 0x5c, 0x24, 0x38, //0x000019ec movq $56(%rsp), %rbx + 0x4c, 0x89, 0x7c, 0x24, 0x28, //0x000019f1 movq %r15, $40(%rsp) + //0x000019f6 LBB0_123 + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x000019f6 movq $32(%rsp), %rax + 0x8a, 0x10, //0x000019fb movb (%rax), %dl + 0x80, 0xfa, 0x5c, //0x000019fd cmpb $92, %dl + 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00001a00 jne LBB0_128 + 0x49, 0x89, 0xd9, //0x00001a06 movq %rbx, %r9 + 0x48, 0x89, 0xfb, //0x00001a09 movq %rdi, %rbx + 0x48, 0x29, 0xc3, //0x00001a0c subq %rax, %rbx + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00001a0f movq $-1, %r13 + 0x48, 0x85, 0xdb, //0x00001a16 testq %rbx, %rbx + 0x0f, 0x8e, 0xca, 0x3e, 0x00, 0x00, //0x00001a19 jle LBB0_1151 + 0x0f, 0xb6, 0x50, 0x01, //0x00001a1f movzbl $1(%rax), %edx + 0x48, 0x8d, 0x05, 0x26, 0x48, 0x00, 0x00, //0x00001a23 leaq $18470(%rip), %rax /* __UnquoteTab+0(%rip) */ + 0x8a, 0x14, 0x02, //0x00001a2a movb (%rdx,%rax), %dl + 0x80, 0xfa, 0xff, //0x00001a2d cmpb $-1, %dl + 0x0f, 0x84, 0x3b, 0x00, 0x00, 0x00, //0x00001a30 je LBB0_130 + 0x84, 0xd2, //0x00001a36 testb %dl, %dl + 0x0f, 0x84, 0xc4, 0x3e, 0x00, 0x00, //0x00001a38 je LBB0_1153 + 0x88, 0x54, 0x24, 0x40, //0x00001a3e movb %dl, $64(%rsp) + 0x48, 0x83, 0x44, 0x24, 0x20, 0x02, //0x00001a42 addq $2, $32(%rsp) + 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00001a48 movl $1, %ebx + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x00001a4d movq $24(%rsp), %r13 + 0xe9, 0x4a, 0x01, 0x00, 0x00, //0x00001a52 jmp LBB0_142 + //0x00001a57 LBB0_128 + 0x3a, 0x13, //0x00001a57 cmpb (%rbx), %dl + 0x0f, 0x85, 0x0a, 0x04, 0x00, 0x00, //0x00001a59 jne LBB0_371 + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x00001a5f movq $32(%rsp), %rax + 0x48, 0x83, 0xc0, 0x01, //0x00001a64 addq $1, %rax + 0x48, 0x83, 0xc3, 0x01, //0x00001a68 addq $1, %rbx + 0xe9, 0xaf, 0x01, 0x00, 0x00, //0x00001a6c jmp LBB0_153 + //0x00001a71 LBB0_130 + 0x48, 0x83, 0xfb, 0x04, //0x00001a71 cmpq $4, %rbx + 0x0f, 0x8c, 0x9c, 0x3e, 0x00, 0x00, //0x00001a75 jl LBB0_1154 + 0x48, 0x89, 0xf8, //0x00001a7b movq %rdi, %rax + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00001a7e movq $32(%rsp), %rcx + 0x4c, 0x8d, 0x79, 0x02, //0x00001a83 leaq $2(%rcx), %r15 + 0x8b, 0x71, 0x02, //0x00001a87 movl $2(%rcx), %esi + 0x89, 0xf2, //0x00001a8a movl %esi, %edx + 0xf7, 0xd2, //0x00001a8c notl %edx + 0x8d, 0xbe, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001a8e leal $-808464432(%rsi), %edi + 0x81, 0xe2, 0x80, 0x80, 0x80, 0x80, //0x00001a94 andl $-2139062144, %edx + 0x49, 0xc7, 0xc5, 0xfe, 0xff, 0xff, 0xff, //0x00001a9a movq $-2, %r13 + 0x85, 0xfa, //0x00001aa1 testl %edi, %edx + 0x0f, 0x85, 0x22, 0x3e, 0x00, 0x00, //0x00001aa3 jne LBB0_1156 + 0x8d, 0xbe, 0x19, 0x19, 0x19, 0x19, //0x00001aa9 leal $421075225(%rsi), %edi + 0x09, 0xf7, //0x00001aaf orl %esi, %edi + 0xf7, 0xc7, 0x80, 0x80, 0x80, 0x80, //0x00001ab1 testl $-2139062144, %edi + 0x0f, 0x85, 0x0e, 0x3e, 0x00, 0x00, //0x00001ab7 jne LBB0_1156 + 0x89, 0xf7, //0x00001abd movl %esi, %edi + 0x81, 0xe7, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001abf andl $2139062143, %edi + 0xb9, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001ac5 movl $-1061109568, %ecx + 0x29, 0xf9, //0x00001aca subl %edi, %ecx + 0x44, 0x8d, 0x97, 0x46, 0x46, 0x46, 0x46, //0x00001acc leal $1179010630(%rdi), %r10d + 0x21, 0xd1, //0x00001ad3 andl %edx, %ecx + 0x44, 0x85, 0xd1, //0x00001ad5 testl %r10d, %ecx + 0x0f, 0x85, 0xed, 0x3d, 0x00, 0x00, //0x00001ad8 jne LBB0_1156 + 0xb9, 0xe0, 0xe0, 0xe0, 0xe0, //0x00001ade movl $-522133280, %ecx + 0x29, 0xf9, //0x00001ae3 subl %edi, %ecx + 0x81, 0xc7, 0x39, 0x39, 0x39, 0x39, //0x00001ae5 addl $960051513, %edi + 0x21, 0xca, //0x00001aeb andl %ecx, %edx + 0x85, 0xfa, //0x00001aed testl %edi, %edx + 0x0f, 0x85, 0x2b, 0x3e, 0x00, 0x00, //0x00001aef jne LBB0_1157 + 0x0f, 0xce, //0x00001af5 bswapl %esi + 0x89, 0xf1, //0x00001af7 movl %esi, %ecx + 0xc1, 0xe9, 0x04, //0x00001af9 shrl $4, %ecx + 0xf7, 0xd1, //0x00001afc notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00001afe andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00001b04 leal (%rcx,%rcx,8), %ecx + 0x81, 0xe6, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001b07 andl $252645135, %esi + 0x01, 0xce, //0x00001b0d addl %ecx, %esi + 0x89, 0xf2, //0x00001b0f movl %esi, %edx + 0xc1, 0xea, 0x04, //0x00001b11 shrl $4, %edx + 0x09, 0xf2, //0x00001b14 orl %esi, %edx + 0x89, 0xd6, //0x00001b16 movl %edx, %esi + 0xc1, 0xee, 0x08, //0x00001b18 shrl $8, %esi + 0x81, 0xe6, 0x00, 0xff, 0x00, 0x00, //0x00001b1b andl $65280, %esi + 0x0f, 0xb6, 0xfa, //0x00001b21 movzbl %dl, %edi + 0x09, 0xf7, //0x00001b24 orl %esi, %edi + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00001b26 movq $32(%rsp), %rcx + 0x4c, 0x8d, 0x79, 0x06, //0x00001b2b leaq $6(%rcx), %r15 + 0x83, 0xff, 0x7f, //0x00001b2f cmpl $127, %edi + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001b32 movabsq $4294977024, %r10 + 0x0f, 0x86, 0xfa, 0x00, 0x00, 0x00, //0x00001b3c jbe LBB0_155 + 0x81, 0xff, 0xff, 0x07, 0x00, 0x00, //0x00001b42 cmpl $2047, %edi + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x00001b48 movq $24(%rsp), %r13 + 0x0f, 0x86, 0x01, 0x01, 0x00, 0x00, //0x00001b4d jbe LBB0_156 + 0x89, 0xd1, //0x00001b53 movl %edx, %ecx + 0x81, 0xe1, 0x00, 0x00, 0xf8, 0x00, //0x00001b55 andl $16252928, %ecx + 0x81, 0xf9, 0x00, 0x00, 0xd8, 0x00, //0x00001b5b cmpl $14155776, %ecx + 0x0f, 0x84, 0x0f, 0x01, 0x00, 0x00, //0x00001b61 je LBB0_157 + 0xc1, 0xee, 0x0c, //0x00001b67 shrl $12, %esi + 0x40, 0x80, 0xce, 0xe0, //0x00001b6a orb $-32, %sil + 0x40, 0x88, 0x74, 0x24, 0x40, //0x00001b6e movb %sil, $64(%rsp) + 0xc1, 0xef, 0x06, //0x00001b73 shrl $6, %edi + 0x40, 0x80, 0xe7, 0x3f, //0x00001b76 andb $63, %dil + 0x40, 0x80, 0xcf, 0x80, //0x00001b7a orb $-128, %dil + 0x40, 0x88, 0x7c, 0x24, 0x41, //0x00001b7e movb %dil, $65(%rsp) + 0x80, 0xe2, 0x3f, //0x00001b83 andb $63, %dl + 0x80, 0xca, 0x80, //0x00001b86 orb $-128, %dl + 0x88, 0x54, 0x24, 0x42, //0x00001b89 movb %dl, $66(%rsp) + 0xbb, 0x03, 0x00, 0x00, 0x00, //0x00001b8d movl $3, %ebx + 0x89, 0xf2, //0x00001b92 movl %esi, %edx + //0x00001b94 LBB0_139 + 0x4c, 0x89, 0x7c, 0x24, 0x20, //0x00001b94 movq %r15, $32(%rsp) + //0x00001b99 LBB0_140 + 0x4c, 0x8b, 0x7c, 0x24, 0x28, //0x00001b99 movq $40(%rsp), %r15 + //0x00001b9e LBB0_141 + 0x48, 0x89, 0xc7, //0x00001b9e movq %rax, %rdi + //0x00001ba1 LBB0_142 + 0x48, 0x8d, 0x34, 0x1c, //0x00001ba1 leaq (%rsp,%rbx), %rsi + 0x48, 0x83, 0xc6, 0x40, //0x00001ba5 addq $64, %rsi + 0x4c, 0x89, 0xcb, //0x00001ba9 movq %r9, %rbx + 0x4d, 0x39, 0xc1, //0x00001bac cmpq %r8, %r9 + 0x0f, 0x83, 0x58, 0x00, 0x00, 0x00, //0x00001baf jae LBB0_151 + 0x48, 0x8d, 0x44, 0x24, 0x40, //0x00001bb5 leaq $64(%rsp), %rax + 0x48, 0x39, 0xc6, //0x00001bba cmpq %rax, %rsi + 0x0f, 0x86, 0x4a, 0x00, 0x00, 0x00, //0x00001bbd jbe LBB0_151 + 0x38, 0x13, //0x00001bc3 cmpb %dl, (%rbx) + 0x0f, 0x85, 0x42, 0x00, 0x00, 0x00, //0x00001bc5 jne LBB0_151 + 0x49, 0x89, 0xf9, //0x00001bcb movq %rdi, %r9 + 0x48, 0x83, 0xc3, 0x01, //0x00001bce addq $1, %rbx + 0x48, 0x8d, 0x7c, 0x24, 0x41, //0x00001bd2 leaq $65(%rsp), %rdi + //0x00001bd7 LBB0_146 + 0x48, 0x89, 0xfa, //0x00001bd7 movq %rdi, %rdx + 0x4c, 0x39, 0xc3, //0x00001bda cmpq %r8, %rbx + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x00001bdd jae LBB0_150 + 0x48, 0x39, 0xf2, //0x00001be3 cmpq %rsi, %rdx + 0x0f, 0x83, 0x19, 0x00, 0x00, 0x00, //0x00001be6 jae LBB0_150 + 0x0f, 0xb6, 0x0b, //0x00001bec movzbl (%rbx), %ecx + 0x48, 0x89, 0xd8, //0x00001bef movq %rbx, %rax + 0x48, 0x83, 0xc3, 0x01, //0x00001bf2 addq $1, %rbx + 0x48, 0x8d, 0x7a, 0x01, //0x00001bf6 leaq $1(%rdx), %rdi + 0x3a, 0x0a, //0x00001bfa cmpb (%rdx), %cl + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00001bfc je LBB0_146 + 0x48, 0x89, 0xc3, //0x00001c02 movq %rax, %rbx + //0x00001c05 LBB0_150 + 0x4c, 0x89, 0xcf, //0x00001c05 movq %r9, %rdi + 0xe9, 0x05, 0x00, 0x00, 0x00, //0x00001c08 jmp LBB0_152 + //0x00001c0d LBB0_151 + 0x48, 0x8d, 0x54, 0x24, 0x40, //0x00001c0d leaq $64(%rsp), %rdx + //0x00001c12 LBB0_152 + 0x48, 0x39, 0xf2, //0x00001c12 cmpq %rsi, %rdx + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x00001c15 movq $32(%rsp), %rax + 0x0f, 0x85, 0x49, 0x02, 0x00, 0x00, //0x00001c1a jne LBB0_371 + //0x00001c20 LBB0_153 + 0x48, 0x89, 0x44, 0x24, 0x20, //0x00001c20 movq %rax, $32(%rsp) + 0x48, 0x39, 0xf8, //0x00001c25 cmpq %rdi, %rax + 0x0f, 0x83, 0xee, 0x01, 0x00, 0x00, //0x00001c28 jae LBB0_169 + 0x4c, 0x39, 0xc3, //0x00001c2e cmpq %r8, %rbx + 0x0f, 0x82, 0xbf, 0xfd, 0xff, 0xff, //0x00001c31 jb LBB0_123 + 0xe9, 0xe0, 0x01, 0x00, 0x00, //0x00001c37 jmp LBB0_169 + //0x00001c3c LBB0_155 + 0x88, 0x54, 0x24, 0x40, //0x00001c3c movb %dl, $64(%rsp) + 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00001c40 movl $1, %ebx + 0x4c, 0x89, 0x7c, 0x24, 0x20, //0x00001c45 movq %r15, $32(%rsp) + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x00001c4a movq $24(%rsp), %r13 + 0xe9, 0x45, 0xff, 0xff, 0xff, //0x00001c4f jmp LBB0_140 + //0x00001c54 LBB0_156 + 0xc1, 0xef, 0x06, //0x00001c54 shrl $6, %edi + 0x40, 0x80, 0xcf, 0xc0, //0x00001c57 orb $-64, %dil + 0x40, 0x88, 0x7c, 0x24, 0x40, //0x00001c5b movb %dil, $64(%rsp) + 0x80, 0xe2, 0x3f, //0x00001c60 andb $63, %dl + 0x80, 0xca, 0x80, //0x00001c63 orb $-128, %dl + 0x88, 0x54, 0x24, 0x41, //0x00001c66 movb %dl, $65(%rsp) + 0xbb, 0x02, 0x00, 0x00, 0x00, //0x00001c6a movl $2, %ebx + 0x89, 0xfa, //0x00001c6f movl %edi, %edx + 0xe9, 0x1e, 0xff, 0xff, 0xff, //0x00001c71 jmp LBB0_139 + //0x00001c76 LBB0_157 + 0x49, 0xc7, 0xc5, 0xfc, 0xff, 0xff, 0xff, //0x00001c76 movq $-4, %r13 + 0x48, 0x83, 0xfb, 0x06, //0x00001c7d cmpq $6, %rbx + 0x0f, 0x8c, 0x99, 0x3c, 0x00, 0x00, //0x00001c81 jl LBB0_1157 + 0x81, 0xff, 0xff, 0xdb, 0x00, 0x00, //0x00001c87 cmpl $56319, %edi + 0x0f, 0x87, 0x8d, 0x3c, 0x00, 0x00, //0x00001c8d ja LBB0_1157 + 0x41, 0x80, 0x3f, 0x5c, //0x00001c93 cmpb $92, (%r15) + 0x0f, 0x85, 0x83, 0x3c, 0x00, 0x00, //0x00001c97 jne LBB0_1157 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00001c9d movq $32(%rsp), %rcx + 0x80, 0x79, 0x07, 0x75, //0x00001ca2 cmpb $117, $7(%rcx) + 0x0f, 0x85, 0x74, 0x3c, 0x00, 0x00, //0x00001ca6 jne LBB0_1157 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00001cac movq $32(%rsp), %rcx + 0x4c, 0x8d, 0x79, 0x08, //0x00001cb1 leaq $8(%rcx), %r15 + 0x8b, 0x59, 0x08, //0x00001cb5 movl $8(%rcx), %ebx + 0x89, 0xde, //0x00001cb8 movl %ebx, %esi + 0xf7, 0xd6, //0x00001cba notl %esi + 0x8d, 0x8b, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001cbc leal $-808464432(%rbx), %ecx + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x00001cc2 andl $-2139062144, %esi + 0x85, 0xce, //0x00001cc8 testl %ecx, %esi + 0x0f, 0x85, 0xfb, 0x3b, 0x00, 0x00, //0x00001cca jne LBB0_1156 + 0x8d, 0x8b, 0x19, 0x19, 0x19, 0x19, //0x00001cd0 leal $421075225(%rbx), %ecx + 0x09, 0xd9, //0x00001cd6 orl %ebx, %ecx + 0xf7, 0xc1, 0x80, 0x80, 0x80, 0x80, //0x00001cd8 testl $-2139062144, %ecx + 0x0f, 0x85, 0xe7, 0x3b, 0x00, 0x00, //0x00001cde jne LBB0_1156 + 0x89, 0xda, //0x00001ce4 movl %ebx, %edx + 0x81, 0xe2, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001ce6 andl $2139062143, %edx + 0xb9, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001cec movl $-1061109568, %ecx + 0x29, 0xd1, //0x00001cf1 subl %edx, %ecx + 0x44, 0x8d, 0x92, 0x46, 0x46, 0x46, 0x46, //0x00001cf3 leal $1179010630(%rdx), %r10d + 0x21, 0xf1, //0x00001cfa andl %esi, %ecx + 0x44, 0x85, 0xd1, //0x00001cfc testl %r10d, %ecx + 0x0f, 0x85, 0xc6, 0x3b, 0x00, 0x00, //0x00001cff jne LBB0_1156 + 0xb9, 0xe0, 0xe0, 0xe0, 0xe0, //0x00001d05 movl $-522133280, %ecx + 0x29, 0xd1, //0x00001d0a subl %edx, %ecx + 0x81, 0xc2, 0x39, 0x39, 0x39, 0x39, //0x00001d0c addl $960051513, %edx + 0x21, 0xce, //0x00001d12 andl %ecx, %esi + 0x85, 0xd6, //0x00001d14 testl %edx, %esi + 0x0f, 0x85, 0xaf, 0x3b, 0x00, 0x00, //0x00001d16 jne LBB0_1156 + 0x0f, 0xcb, //0x00001d1c bswapl %ebx + 0x89, 0xd9, //0x00001d1e movl %ebx, %ecx + 0xc1, 0xe9, 0x04, //0x00001d20 shrl $4, %ecx + 0xf7, 0xd1, //0x00001d23 notl %ecx + 0x81, 0xe1, 0x01, 0x01, 0x01, 0x01, //0x00001d25 andl $16843009, %ecx + 0x8d, 0x0c, 0xc9, //0x00001d2b leal (%rcx,%rcx,8), %ecx + 0x81, 0xe3, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001d2e andl $252645135, %ebx + 0x01, 0xcb, //0x00001d34 addl %ecx, %ebx + 0x89, 0xde, //0x00001d36 movl %ebx, %esi + 0xc1, 0xee, 0x04, //0x00001d38 shrl $4, %esi + 0x09, 0xde, //0x00001d3b orl %ebx, %esi + 0x89, 0xf1, //0x00001d3d movl %esi, %ecx + 0x81, 0xe1, 0x00, 0x00, 0xfc, 0x00, //0x00001d3f andl $16515072, %ecx + 0x81, 0xf9, 0x00, 0x00, 0xdc, 0x00, //0x00001d45 cmpl $14417920, %ecx + 0x0f, 0x85, 0xcf, 0x3b, 0x00, 0x00, //0x00001d4b jne LBB0_1157 + 0x89, 0xf1, //0x00001d51 movl %esi, %ecx + 0xc1, 0xe9, 0x08, //0x00001d53 shrl $8, %ecx + 0x81, 0xe1, 0x00, 0xff, 0x00, 0x00, //0x00001d56 andl $65280, %ecx + 0x40, 0x0f, 0xb6, 0xd6, //0x00001d5c movzbl %sil, %edx + 0x09, 0xca, //0x00001d60 orl %ecx, %edx + 0xc1, 0xe7, 0x0a, //0x00001d62 shll $10, %edi + 0x8d, 0x0c, 0x3a, //0x00001d65 leal (%rdx,%rdi), %ecx + 0x8d, 0x34, 0x17, //0x00001d68 leal (%rdi,%rdx), %esi + 0x81, 0xc6, 0x00, 0x24, 0xa0, 0xfc, //0x00001d6b addl $-56613888, %esi + 0x89, 0xf2, //0x00001d71 movl %esi, %edx + 0xc1, 0xea, 0x12, //0x00001d73 shrl $18, %edx + 0x80, 0xca, 0xf0, //0x00001d76 orb $-16, %dl + 0x88, 0x54, 0x24, 0x40, //0x00001d79 movb %dl, $64(%rsp) + 0x89, 0xf7, //0x00001d7d movl %esi, %edi + 0xc1, 0xef, 0x0c, //0x00001d7f shrl $12, %edi + 0x40, 0x80, 0xe7, 0x3f, //0x00001d82 andb $63, %dil + 0x40, 0x80, 0xcf, 0x80, //0x00001d86 orb $-128, %dil + 0x40, 0x88, 0x7c, 0x24, 0x41, //0x00001d8a movb %dil, $65(%rsp) + 0xc1, 0xee, 0x06, //0x00001d8f shrl $6, %esi + 0x40, 0x80, 0xe6, 0x3f, //0x00001d92 andb $63, %sil + 0x40, 0x80, 0xce, 0x80, //0x00001d96 orb $-128, %sil + 0x40, 0x88, 0x74, 0x24, 0x42, //0x00001d9a movb %sil, $66(%rsp) + 0x80, 0xe1, 0x3f, //0x00001d9f andb $63, %cl + 0x80, 0xc9, 0x80, //0x00001da2 orb $-128, %cl + 0x88, 0x4c, 0x24, 0x43, //0x00001da5 movb %cl, $67(%rsp) + 0x48, 0x83, 0x44, 0x24, 0x20, 0x0c, //0x00001da9 addq $12, $32(%rsp) + 0xbb, 0x04, 0x00, 0x00, 0x00, //0x00001daf movl $4, %ebx + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x00001db4 movq $24(%rsp), %r13 + 0x4c, 0x8b, 0x7c, 0x24, 0x28, //0x00001db9 movq $40(%rsp), %r15 + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001dbe movabsq $4294977024, %r10 + 0xe9, 0xd1, 0xfd, 0xff, 0xff, //0x00001dc8 jmp LBB0_141 + //0x00001dcd LBB0_167 + 0x4c, 0x01, 0xe1, //0x00001dcd addq %r12, %rcx + 0x48, 0x85, 0xd2, //0x00001dd0 testq %rdx, %rdx + 0x0f, 0x85, 0xb1, 0xe8, 0xff, 0xff, //0x00001dd3 jne LBB0_61 + 0xe9, 0xd9, 0xe8, 0xff, 0xff, //0x00001dd9 jmp LBB0_66 + //0x00001dde LBB0_366 + 0x4c, 0x01, 0xe1, //0x00001dde addq %r12, %rcx + 0x48, 0x85, 0xff, //0x00001de1 testq %rdi, %rdi + 0x0f, 0x85, 0x3e, 0xee, 0xff, 0xff, //0x00001de4 jne LBB0_189 + 0xe9, 0x68, 0xee, 0xff, 0xff, //0x00001dea jmp LBB0_194 + //0x00001def LBB0_367 + 0x4c, 0x29, 0xe0, //0x00001def subq %r12, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00001df2 addq $1, %rax + 0x49, 0x89, 0x01, //0x00001df6 movq %rax, (%r9) + 0x49, 0x89, 0xc6, //0x00001df9 movq %rax, %r14 + 0x4c, 0x8b, 0x7c, 0x24, 0x28, //0x00001dfc movq $40(%rsp), %r15 + 0xe9, 0xe0, 0xf5, 0xff, 0xff, //0x00001e01 jmp LBB0_293 + //0x00001e06 LBB0_368 + 0x4c, 0x01, 0xe1, //0x00001e06 addq %r12, %rcx + 0x48, 0x85, 0xd2, //0x00001e09 testq %rdx, %rdx + 0x0f, 0x85, 0x26, 0xf7, 0xff, 0xff, //0x00001e0c jne LBB0_316 + 0xe9, 0x4e, 0xf7, 0xff, 0xff, //0x00001e12 jmp LBB0_321 + //0x00001e17 LBB0_168 + 0x48, 0x8b, 0x5c, 0x24, 0x38, //0x00001e17 movq $56(%rsp), %rbx + //0x00001e1c LBB0_169 + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x00001e1c movq $32(%rsp), %rax + 0x48, 0x31, 0xf8, //0x00001e21 xorq %rdi, %rax + 0x4c, 0x31, 0xc3, //0x00001e24 xorq %r8, %rbx + 0x31, 0xd2, //0x00001e27 xorl %edx, %edx + 0x48, 0x09, 0xc3, //0x00001e29 orq %rax, %rbx + 0x0f, 0x94, 0xc2, //0x00001e2c sete %dl + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00001e2f movq $8(%rsp), %r9 + 0x49, 0x8b, 0x45, 0x00, //0x00001e34 movq (%r13), %rax + 0x49, 0x39, 0xc6, //0x00001e38 cmpq %rax, %r14 + 0x0f, 0x82, 0x79, 0xea, 0xff, 0xff, //0x00001e3b jb LBB0_114 + 0xe9, 0xda, 0xec, 0xff, 0xff, //0x00001e41 jmp LBB0_171 + //0x00001e46 LBB0_369 + 0x4c, 0x01, 0xe0, //0x00001e46 addq %r12, %rax + 0x48, 0x85, 0xff, //0x00001e49 testq %rdi, %rdi + 0x0f, 0x85, 0x86, 0xef, 0xff, 0xff, //0x00001e4c jne LBB0_221 + 0xe9, 0xae, 0xef, 0xff, 0xff, //0x00001e52 jmp LBB0_226 + //0x00001e57 LBB0_370 + 0x4d, 0x01, 0xe6, //0x00001e57 addq %r12, %r14 + 0x48, 0x83, 0xf9, 0x10, //0x00001e5a cmpq $16, %rcx + 0x0f, 0x83, 0x7a, 0xf0, 0xff, 0xff, //0x00001e5e jae LBB0_235 + 0xe9, 0xda, 0xf0, 0xff, 0xff, //0x00001e64 jmp LBB0_238 + //0x00001e69 LBB0_371 + 0x31, 0xd2, //0x00001e69 xorl %edx, %edx + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00001e6b movq $8(%rsp), %r9 + 0x49, 0x8b, 0x45, 0x00, //0x00001e70 movq (%r13), %rax + 0x49, 0x39, 0xc6, //0x00001e74 cmpq %rax, %r14 + 0x0f, 0x82, 0x3d, 0xea, 0xff, 0xff, //0x00001e77 jb LBB0_114 + 0xe9, 0x9e, 0xec, 0xff, 0xff, //0x00001e7d jmp LBB0_171 + //0x00001e82 LBB0_372 + 0x4b, 0x8d, 0x04, 0x34, //0x00001e82 leaq (%r12,%r14), %rax + 0xe9, 0x80, 0xf2, 0xff, 0xff, //0x00001e86 jmp LBB0_263 + //0x00001e8b LBB0_373 + 0x49, 0x89, 0xc0, //0x00001e8b movq %rax, %r8 + 0x4c, 0x89, 0xff, //0x00001e8e movq %r15, %rdi + 0x48, 0x83, 0xf8, 0xff, //0x00001e91 cmpq $-1, %rax + 0x0f, 0x85, 0x15, 0x00, 0x00, 0x00, //0x00001e95 jne LBB0_376 + 0x4d, 0x89, 0xf0, //0x00001e9b movq %r14, %r8 + 0x4d, 0x29, 0xe0, //0x00001e9e subq %r12, %r8 + 0x48, 0x0f, 0xbc, 0xc6, //0x00001ea1 bsfq %rsi, %rax + 0x4c, 0x01, 0xc0, //0x00001ea5 addq %r8, %rax + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00001ea8 jmp LBB0_376 + //0x00001ead LBB0_375 + 0x4c, 0x89, 0xff, //0x00001ead movq %r15, %rdi + //0x00001eb0 LBB0_376 + 0x45, 0x89, 0xc8, //0x00001eb0 movl %r9d, %r8d + 0x41, 0xf7, 0xd0, //0x00001eb3 notl %r8d + 0x41, 0x21, 0xf0, //0x00001eb6 andl %esi, %r8d + 0x47, 0x8d, 0x14, 0x00, //0x00001eb9 leal (%r8,%r8), %r10d + 0x47, 0x8d, 0x3c, 0x41, //0x00001ebd leal (%r9,%r8,2), %r15d + 0x41, 0xf7, 0xd2, //0x00001ec1 notl %r10d + 0x41, 0x21, 0xf2, //0x00001ec4 andl %esi, %r10d + 0x41, 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001ec7 andl $-1431655766, %r10d + 0x45, 0x31, 0xc9, //0x00001ece xorl %r9d, %r9d + 0x45, 0x01, 0xc2, //0x00001ed1 addl %r8d, %r10d + 0x41, 0x0f, 0x92, 0xc1, //0x00001ed4 setb %r9b + 0x45, 0x01, 0xd2, //0x00001ed8 addl %r10d, %r10d + 0x41, 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x00001edb xorl $1431655765, %r10d + 0x45, 0x21, 0xfa, //0x00001ee2 andl %r15d, %r10d + 0x41, 0xf7, 0xd2, //0x00001ee5 notl %r10d + 0x44, 0x21, 0xd3, //0x00001ee8 andl %r10d, %ebx + 0x49, 0x89, 0xff, //0x00001eeb movq %rdi, %r15 + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001eee movabsq $4294977024, %r10 + 0x48, 0x85, 0xdb, //0x00001ef8 testq %rbx, %rbx + 0x0f, 0x85, 0xf0, 0xeb, 0xff, 0xff, //0x00001efb jne LBB0_80 + //0x00001f01 LBB0_377 + 0x49, 0x83, 0xc6, 0x20, //0x00001f01 addq $32, %r14 + 0x48, 0x83, 0xc2, 0xe0, //0x00001f05 addq $-32, %rdx + //0x00001f09 LBB0_378 + 0x4d, 0x85, 0xc9, //0x00001f09 testq %r9, %r9 + 0x0f, 0x85, 0xd3, 0x00, 0x00, 0x00, //0x00001f0c jne LBB0_393 + 0x4c, 0x89, 0xeb, //0x00001f12 movq %r13, %rbx + 0x4d, 0x89, 0xe2, //0x00001f15 movq %r12, %r10 + 0x49, 0xf7, 0xd2, //0x00001f18 notq %r10 + 0x49, 0x89, 0xc0, //0x00001f1b movq %rax, %r8 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00001f1e movq $8(%rsp), %r9 + 0x48, 0x85, 0xd2, //0x00001f23 testq %rdx, %rdx + 0x0f, 0x84, 0x86, 0x00, 0x00, 0x00, //0x00001f26 je LBB0_391 + //0x00001f2c LBB0_380 + 0x49, 0x83, 0xc2, 0x01, //0x00001f2c addq $1, %r10 + //0x00001f30 LBB0_381 + 0x31, 0xf6, //0x00001f30 xorl %esi, %esi + //0x00001f32 LBB0_382 + 0x45, 0x0f, 0xb6, 0x0c, 0x36, //0x00001f32 movzbl (%r14,%rsi), %r9d + 0x41, 0x80, 0xf9, 0x22, //0x00001f37 cmpb $34, %r9b + 0x0f, 0x84, 0x65, 0x00, 0x00, 0x00, //0x00001f3b je LBB0_390 + 0x41, 0x80, 0xf9, 0x5c, //0x00001f41 cmpb $92, %r9b + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00001f45 je LBB0_387 + 0x48, 0x83, 0xc6, 0x01, //0x00001f4b addq $1, %rsi + 0x48, 0x39, 0xf2, //0x00001f4f cmpq %rsi, %rdx + 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x00001f52 jne LBB0_382 + 0xe9, 0x67, 0x00, 0x00, 0x00, //0x00001f58 jmp LBB0_385 + //0x00001f5d LBB0_387 + 0x48, 0x8d, 0x7a, 0xff, //0x00001f5d leaq $-1(%rdx), %rdi + 0x48, 0x39, 0xf7, //0x00001f61 cmpq %rsi, %rdi + 0x0f, 0x84, 0xfa, 0x39, 0x00, 0x00, //0x00001f64 je LBB0_1161 + 0x4b, 0x8d, 0x3c, 0x32, //0x00001f6a leaq (%r10,%r14), %rdi + 0x48, 0x01, 0xf7, //0x00001f6e addq %rsi, %rdi + 0x49, 0x83, 0xf8, 0xff, //0x00001f71 cmpq $-1, %r8 + 0x48, 0x0f, 0x44, 0xc7, //0x00001f75 cmoveq %rdi, %rax + 0x4c, 0x0f, 0x44, 0xc7, //0x00001f79 cmoveq %rdi, %r8 + 0x49, 0x01, 0xf6, //0x00001f7d addq %rsi, %r14 + 0x49, 0x83, 0xc6, 0x02, //0x00001f80 addq $2, %r14 + 0x48, 0x89, 0xd7, //0x00001f84 movq %rdx, %rdi + 0x48, 0x29, 0xf7, //0x00001f87 subq %rsi, %rdi + 0x48, 0x83, 0xc7, 0xfe, //0x00001f8a addq $-2, %rdi + 0x48, 0x83, 0xc2, 0xfe, //0x00001f8e addq $-2, %rdx + 0x48, 0x39, 0xf2, //0x00001f92 cmpq %rsi, %rdx + 0x48, 0x89, 0xfa, //0x00001f95 movq %rdi, %rdx + 0x4c, 0x89, 0xeb, //0x00001f98 movq %r13, %rbx + 0x0f, 0x85, 0x8f, 0xff, 0xff, 0xff, //0x00001f9b jne LBB0_381 + 0xe9, 0x9c, 0x39, 0x00, 0x00, //0x00001fa1 jmp LBB0_389 + //0x00001fa6 LBB0_390 + 0x49, 0x01, 0xf6, //0x00001fa6 addq %rsi, %r14 + 0x49, 0x83, 0xc6, 0x01, //0x00001fa9 addq $1, %r14 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00001fad movq $8(%rsp), %r9 + //0x00001fb2 LBB0_391 + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001fb2 movabsq $4294977024, %r10 + //0x00001fbc LBB0_392 + 0x4d, 0x29, 0xe6, //0x00001fbc subq %r12, %r14 + 0xe9, 0xa5, 0xe8, 0xff, 0xff, //0x00001fbf jmp LBB0_86 + //0x00001fc4 LBB0_385 + 0x41, 0x80, 0xf9, 0x22, //0x00001fc4 cmpb $34, %r9b + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001fc8 movabsq $4294977024, %r10 + 0x0f, 0x85, 0x6a, 0x39, 0x00, 0x00, //0x00001fd2 jne LBB0_389 + 0x49, 0x01, 0xd6, //0x00001fd8 addq %rdx, %r14 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00001fdb movq $8(%rsp), %r9 + 0xe9, 0xd7, 0xff, 0xff, 0xff, //0x00001fe0 jmp LBB0_392 + //0x00001fe5 LBB0_393 + 0x48, 0x85, 0xd2, //0x00001fe5 testq %rdx, %rdx + 0x0f, 0x84, 0x76, 0x39, 0x00, 0x00, //0x00001fe8 je LBB0_1161 + 0x4d, 0x89, 0xe2, //0x00001fee movq %r12, %r10 + 0x49, 0xf7, 0xd2, //0x00001ff1 notq %r10 + 0x4f, 0x8d, 0x0c, 0x16, //0x00001ff4 leaq (%r14,%r10), %r9 + 0x48, 0x83, 0xf8, 0xff, //0x00001ff8 cmpq $-1, %rax + 0x49, 0x89, 0xc0, //0x00001ffc movq %rax, %r8 + 0x49, 0x0f, 0x44, 0xc1, //0x00001fff cmoveq %r9, %rax + 0x4d, 0x0f, 0x44, 0xc1, //0x00002003 cmoveq %r9, %r8 + 0x49, 0x83, 0xc6, 0x01, //0x00002007 addq $1, %r14 + 0x48, 0x83, 0xc2, 0xff, //0x0000200b addq $-1, %rdx + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x0000200f movq $8(%rsp), %r9 + 0x4c, 0x89, 0xeb, //0x00002014 movq %r13, %rbx + 0x48, 0x85, 0xd2, //0x00002017 testq %rdx, %rdx + 0x0f, 0x85, 0x0c, 0xff, 0xff, 0xff, //0x0000201a jne LBB0_380 + 0xe9, 0x8d, 0xff, 0xff, 0xff, //0x00002020 jmp LBB0_391 + //0x00002025 LBB0_395 + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x00002025 movq $24(%rsp), %r13 + 0x4d, 0x8b, 0x75, 0x00, //0x0000202a movq (%r13), %r14 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x0000202e movq $8(%rsp), %r9 + 0x4d, 0x89, 0x31, //0x00002033 movq %r14, (%r9) + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002036 movabsq $4294977024, %r10 + 0xe9, 0xa1, 0xf3, 0xff, 0xff, //0x00002040 jmp LBB0_293 + //0x00002045 LBB0_396 + 0x49, 0x8d, 0x40, 0xff, //0x00002045 leaq $-1(%r8), %rax + 0x4c, 0x39, 0xf8, //0x00002049 cmpq %r15, %rax + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x0000204c jne LBB0_398 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00002052 movq $8(%rsp), %r9 + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x00002057 movq $24(%rsp), %r13 + 0xe9, 0x24, 0xf8, 0xff, 0xff, //0x0000205c jmp LBB0_352 + //0x00002061 LBB0_398 + 0x4b, 0x8d, 0x04, 0x0f, //0x00002061 leaq (%r15,%r9), %rax + 0x48, 0x83, 0xc0, 0x02, //0x00002065 addq $2, %rax + 0x4d, 0x29, 0xf8, //0x00002069 subq %r15, %r8 + 0x49, 0x83, 0xc0, 0xfe, //0x0000206c addq $-2, %r8 + 0x4d, 0x89, 0xc7, //0x00002070 movq %r8, %r15 + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x00002073 movq $24(%rsp), %r13 + 0xe9, 0x8e, 0xf0, 0xff, 0xff, //0x00002078 jmp LBB0_263 + 0x90, 0x90, 0x90, //0x0000207d .p2align 4, 0x90 + //0x00002080 LBB0_399 + 0x80, 0xf9, 0x5b, //0x00002080 cmpb $91, %cl + 0x0f, 0x85, 0x82, 0x2e, 0x00, 0x00, //0x00002083 jne LBB0_1048 + 0x49, 0x8b, 0x47, 0x08, //0x00002089 movq $8(%r15), %rax + 0x4c, 0x8b, 0x00, //0x0000208d movq (%rax), %r8 + 0x4d, 0x85, 0xc0, //0x00002090 testq %r8, %r8 + 0x0f, 0x88, 0xcf, 0x2c, 0x00, 0x00, //0x00002093 js LBB0_649 + 0x49, 0x8b, 0x4d, 0x00, //0x00002099 movq (%r13), %rcx + 0x49, 0x39, 0xce, //0x0000209d cmpq %rcx, %r14 + 0x0f, 0x83, 0x2a, 0x00, 0x00, 0x00, //0x000020a0 jae LBB0_406 + 0x43, 0x8a, 0x04, 0x34, //0x000020a6 movb (%r12,%r14), %al + 0x3c, 0x0d, //0x000020aa cmpb $13, %al + 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x000020ac je LBB0_406 + 0x3c, 0x20, //0x000020b2 cmpb $32, %al + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000020b4 je LBB0_406 + 0x04, 0xf7, //0x000020ba addb $-9, %al + 0x3c, 0x01, //0x000020bc cmpb $1, %al + 0x0f, 0x86, 0x0c, 0x00, 0x00, 0x00, //0x000020be jbe LBB0_406 + 0x4c, 0x89, 0xf2, //0x000020c4 movq %r14, %rdx + 0xe9, 0x63, 0x01, 0x00, 0x00, //0x000020c7 jmp LBB0_432 + 0x90, 0x90, 0x90, 0x90, //0x000020cc .p2align 4, 0x90 + //0x000020d0 LBB0_406 + 0x49, 0x8d, 0x56, 0x01, //0x000020d0 leaq $1(%r14), %rdx + 0x48, 0x39, 0xca, //0x000020d4 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000020d7 jae LBB0_410 + 0x41, 0x8a, 0x04, 0x14, //0x000020dd movb (%r12,%rdx), %al + 0x3c, 0x0d, //0x000020e1 cmpb $13, %al + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x000020e3 je LBB0_410 + 0x3c, 0x20, //0x000020e9 cmpb $32, %al + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x000020eb je LBB0_410 + 0x04, 0xf7, //0x000020f1 addb $-9, %al + 0x3c, 0x01, //0x000020f3 cmpb $1, %al + 0x0f, 0x87, 0x34, 0x01, 0x00, 0x00, //0x000020f5 ja LBB0_432 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000020fb .p2align 4, 0x90 + //0x00002100 LBB0_410 + 0x49, 0x8d, 0x56, 0x02, //0x00002100 leaq $2(%r14), %rdx + 0x48, 0x39, 0xca, //0x00002104 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002107 jae LBB0_414 + 0x41, 0x8a, 0x04, 0x14, //0x0000210d movb (%r12,%rdx), %al + 0x3c, 0x0d, //0x00002111 cmpb $13, %al + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00002113 je LBB0_414 + 0x3c, 0x20, //0x00002119 cmpb $32, %al + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000211b je LBB0_414 + 0x04, 0xf7, //0x00002121 addb $-9, %al + 0x3c, 0x01, //0x00002123 cmpb $1, %al + 0x0f, 0x87, 0x04, 0x01, 0x00, 0x00, //0x00002125 ja LBB0_432 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000212b .p2align 4, 0x90 + //0x00002130 LBB0_414 + 0x49, 0x8d, 0x56, 0x03, //0x00002130 leaq $3(%r14), %rdx + 0x48, 0x39, 0xca, //0x00002134 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002137 jae LBB0_418 + 0x41, 0x8a, 0x04, 0x14, //0x0000213d movb (%r12,%rdx), %al + 0x3c, 0x0d, //0x00002141 cmpb $13, %al + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00002143 je LBB0_418 + 0x3c, 0x20, //0x00002149 cmpb $32, %al + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000214b je LBB0_418 + 0x04, 0xf7, //0x00002151 addb $-9, %al + 0x3c, 0x01, //0x00002153 cmpb $1, %al + 0x0f, 0x87, 0xd4, 0x00, 0x00, 0x00, //0x00002155 ja LBB0_432 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000215b .p2align 4, 0x90 + //0x00002160 LBB0_418 + 0x49, 0x8d, 0x56, 0x04, //0x00002160 leaq $4(%r14), %rdx + 0x48, 0x89, 0xc8, //0x00002164 movq %rcx, %rax + 0x48, 0x29, 0xd0, //0x00002167 subq %rdx, %rax + 0x0f, 0x86, 0xa6, 0x00, 0x00, 0x00, //0x0000216a jbe LBB0_430 + 0x48, 0x83, 0xf8, 0x20, //0x00002170 cmpq $32, %rax + 0x0f, 0x82, 0xef, 0x0e, 0x00, 0x00, //0x00002174 jb LBB0_614 + 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x0000217a movq $-4, %rax + 0x4c, 0x29, 0xf0, //0x00002181 subq %r14, %rax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002184 .p2align 4, 0x90 + //0x00002190 LBB0_421 + 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x14, //0x00002190 vmovdqu (%r12,%rdx), %ymm6 + 0xc4, 0xe2, 0x7d, 0x00, 0xfe, //0x00002196 vpshufb %ymm6, %ymm0, %ymm7 + 0xc5, 0xcd, 0x74, 0xf7, //0x0000219b vpcmpeqb %ymm7, %ymm6, %ymm6 + 0xc5, 0xfd, 0xd7, 0xf6, //0x0000219f vpmovmskb %ymm6, %esi + 0x83, 0xfe, 0xff, //0x000021a3 cmpl $-1, %esi + 0x0f, 0x85, 0x72, 0x00, 0x00, 0x00, //0x000021a6 jne LBB0_431 + 0x48, 0x83, 0xc2, 0x20, //0x000021ac addq $32, %rdx + 0x48, 0x8d, 0x34, 0x01, //0x000021b0 leaq (%rcx,%rax), %rsi + 0x48, 0x83, 0xc6, 0xe0, //0x000021b4 addq $-32, %rsi + 0x48, 0x83, 0xc0, 0xe0, //0x000021b8 addq $-32, %rax + 0x48, 0x83, 0xfe, 0x1f, //0x000021bc cmpq $31, %rsi + 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x000021c0 ja LBB0_421 + 0x4c, 0x89, 0xe2, //0x000021c6 movq %r12, %rdx + 0x48, 0x29, 0xc2, //0x000021c9 subq %rax, %rdx + 0x48, 0x01, 0xc8, //0x000021cc addq %rcx, %rax + 0x48, 0x85, 0xc0, //0x000021cf testq %rax, %rax + 0x0f, 0x84, 0x2d, 0x00, 0x00, 0x00, //0x000021d2 je LBB0_429 + //0x000021d8 LBB0_424 + 0x48, 0x8d, 0x3c, 0x02, //0x000021d8 leaq (%rdx,%rax), %rdi + 0x31, 0xf6, //0x000021dc xorl %esi, %esi + //0x000021de LBB0_425 + 0x0f, 0xbe, 0x1c, 0x32, //0x000021de movsbl (%rdx,%rsi), %ebx + 0x83, 0xfb, 0x20, //0x000021e2 cmpl $32, %ebx + 0x0f, 0x87, 0x56, 0x0e, 0x00, 0x00, //0x000021e5 ja LBB0_612 + 0x49, 0x0f, 0xa3, 0xda, //0x000021eb btq %rbx, %r10 + 0x0f, 0x83, 0x4c, 0x0e, 0x00, 0x00, //0x000021ef jae LBB0_612 + 0x48, 0x83, 0xc6, 0x01, //0x000021f5 addq $1, %rsi + 0x48, 0x39, 0xf0, //0x000021f9 cmpq %rsi, %rax + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x000021fc jne LBB0_425 + 0x48, 0x89, 0xfa, //0x00002202 movq %rdi, %rdx + //0x00002205 LBB0_429 + 0x4c, 0x29, 0xe2, //0x00002205 subq %r12, %rdx + 0x48, 0x39, 0xca, //0x00002208 cmpq %rcx, %rdx + 0x0f, 0x82, 0x1e, 0x00, 0x00, 0x00, //0x0000220b jb LBB0_432 + 0xe9, 0x2b, 0x00, 0x00, 0x00, //0x00002211 jmp LBB0_433 + //0x00002216 LBB0_430 + 0x49, 0x89, 0xd6, //0x00002216 movq %rdx, %r14 + 0xe9, 0x23, 0x00, 0x00, 0x00, //0x00002219 jmp LBB0_433 + //0x0000221e LBB0_431 + 0xf7, 0xd6, //0x0000221e notl %esi + 0x0f, 0xbc, 0xd6, //0x00002220 bsfl %esi, %edx + 0x48, 0x29, 0xc2, //0x00002223 subq %rax, %rdx + 0x48, 0x39, 0xca, //0x00002226 cmpq %rcx, %rdx + 0x0f, 0x83, 0x12, 0x00, 0x00, 0x00, //0x00002229 jae LBB0_433 + //0x0000222f LBB0_432 + 0x4c, 0x8d, 0x72, 0x01, //0x0000222f leaq $1(%rdx), %r14 + 0x4d, 0x89, 0x31, //0x00002233 movq %r14, (%r9) + 0x41, 0x80, 0x3c, 0x14, 0x5d, //0x00002236 cmpb $93, (%r12,%rdx) + 0x0f, 0x84, 0x86, 0x10, 0x00, 0x00, //0x0000223b je LBB0_647 + //0x00002241 LBB0_433 + 0x49, 0x83, 0xc6, 0xff, //0x00002241 addq $-1, %r14 + 0x4d, 0x89, 0x31, //0x00002245 movq %r14, (%r9) + 0x4d, 0x85, 0xc0, //0x00002248 testq %r8, %r8 + 0x0f, 0x8e, 0xbf, 0x0d, 0x00, 0x00, //0x0000224b jle LBB0_537 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002251 .p2align 4, 0x90 + //0x00002260 LBB0_434 + 0x49, 0x8b, 0x55, 0x00, //0x00002260 movq (%r13), %rdx + 0x49, 0x39, 0xd6, //0x00002264 cmpq %rdx, %r14 + 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x00002267 jae LBB0_439 + 0x43, 0x8a, 0x04, 0x34, //0x0000226d movb (%r12,%r14), %al + 0x3c, 0x0d, //0x00002271 cmpb $13, %al + 0x0f, 0x84, 0x27, 0x00, 0x00, 0x00, //0x00002273 je LBB0_439 + 0x3c, 0x20, //0x00002279 cmpb $32, %al + 0x0f, 0x84, 0x1f, 0x00, 0x00, 0x00, //0x0000227b je LBB0_439 + 0x04, 0xf7, //0x00002281 addb $-9, %al + 0x3c, 0x01, //0x00002283 cmpb $1, %al + 0x0f, 0x86, 0x15, 0x00, 0x00, 0x00, //0x00002285 jbe LBB0_439 + 0x4c, 0x89, 0xf1, //0x0000228b movq %r14, %rcx + 0xe9, 0x6e, 0x01, 0x00, 0x00, //0x0000228e jmp LBB0_464 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002293 .p2align 4, 0x90 + //0x000022a0 LBB0_439 + 0x49, 0x8d, 0x4e, 0x01, //0x000022a0 leaq $1(%r14), %rcx + 0x48, 0x39, 0xd1, //0x000022a4 cmpq %rdx, %rcx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000022a7 jae LBB0_443 + 0x41, 0x8a, 0x04, 0x0c, //0x000022ad movb (%r12,%rcx), %al + 0x3c, 0x0d, //0x000022b1 cmpb $13, %al + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x000022b3 je LBB0_443 + 0x3c, 0x20, //0x000022b9 cmpb $32, %al + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x000022bb je LBB0_443 + 0x04, 0xf7, //0x000022c1 addb $-9, %al + 0x3c, 0x01, //0x000022c3 cmpb $1, %al + 0x0f, 0x87, 0x36, 0x01, 0x00, 0x00, //0x000022c5 ja LBB0_464 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000022cb .p2align 4, 0x90 + //0x000022d0 LBB0_443 + 0x49, 0x8d, 0x4e, 0x02, //0x000022d0 leaq $2(%r14), %rcx + 0x48, 0x39, 0xd1, //0x000022d4 cmpq %rdx, %rcx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000022d7 jae LBB0_447 + 0x41, 0x8a, 0x04, 0x0c, //0x000022dd movb (%r12,%rcx), %al + 0x3c, 0x0d, //0x000022e1 cmpb $13, %al + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x000022e3 je LBB0_447 + 0x3c, 0x20, //0x000022e9 cmpb $32, %al + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x000022eb je LBB0_447 + 0x04, 0xf7, //0x000022f1 addb $-9, %al + 0x3c, 0x01, //0x000022f3 cmpb $1, %al + 0x0f, 0x87, 0x06, 0x01, 0x00, 0x00, //0x000022f5 ja LBB0_464 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000022fb .p2align 4, 0x90 + //0x00002300 LBB0_447 + 0x49, 0x8d, 0x4e, 0x03, //0x00002300 leaq $3(%r14), %rcx + 0x48, 0x39, 0xd1, //0x00002304 cmpq %rdx, %rcx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002307 jae LBB0_451 + 0x41, 0x8a, 0x04, 0x0c, //0x0000230d movb (%r12,%rcx), %al + 0x3c, 0x0d, //0x00002311 cmpb $13, %al + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00002313 je LBB0_451 + 0x3c, 0x20, //0x00002319 cmpb $32, %al + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000231b je LBB0_451 + 0x04, 0xf7, //0x00002321 addb $-9, %al + 0x3c, 0x01, //0x00002323 cmpb $1, %al + 0x0f, 0x87, 0xd6, 0x00, 0x00, 0x00, //0x00002325 ja LBB0_464 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000232b .p2align 4, 0x90 + //0x00002330 LBB0_451 + 0x49, 0x8d, 0x4e, 0x04, //0x00002330 leaq $4(%r14), %rcx + 0x48, 0x89, 0xd0, //0x00002334 movq %rdx, %rax + 0x48, 0x29, 0xc8, //0x00002337 subq %rcx, %rax + 0x0f, 0x86, 0xd0, 0x03, 0x00, 0x00, //0x0000233a jbe LBB0_504 + 0x48, 0x83, 0xf8, 0x20, //0x00002340 cmpq $32, %rax + 0x0f, 0x82, 0x52, 0x0c, 0x00, 0x00, //0x00002344 jb LBB0_605 + 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x0000234a movq $-4, %rax + 0x4c, 0x29, 0xf0, //0x00002351 subq %r14, %rax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002354 .p2align 4, 0x90 + //0x00002360 LBB0_454 + 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x0c, //0x00002360 vmovdqu (%r12,%rcx), %ymm6 + 0xc4, 0xe2, 0x7d, 0x00, 0xfe, //0x00002366 vpshufb %ymm6, %ymm0, %ymm7 + 0xc5, 0xcd, 0x74, 0xf7, //0x0000236b vpcmpeqb %ymm7, %ymm6, %ymm6 + 0xc5, 0xfd, 0xd7, 0xf6, //0x0000236f vpmovmskb %ymm6, %esi + 0x83, 0xfe, 0xff, //0x00002373 cmpl $-1, %esi + 0x0f, 0x85, 0x74, 0x00, 0x00, 0x00, //0x00002376 jne LBB0_463 + 0x48, 0x83, 0xc1, 0x20, //0x0000237c addq $32, %rcx + 0x48, 0x8d, 0x34, 0x02, //0x00002380 leaq (%rdx,%rax), %rsi + 0x48, 0x83, 0xc6, 0xe0, //0x00002384 addq $-32, %rsi + 0x48, 0x83, 0xc0, 0xe0, //0x00002388 addq $-32, %rax + 0x48, 0x83, 0xfe, 0x1f, //0x0000238c cmpq $31, %rsi + 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00002390 ja LBB0_454 + 0x4c, 0x89, 0xe1, //0x00002396 movq %r12, %rcx + 0x48, 0x29, 0xc1, //0x00002399 subq %rax, %rcx + 0x48, 0x01, 0xd0, //0x0000239c addq %rdx, %rax + 0x48, 0x85, 0xc0, //0x0000239f testq %rax, %rax + 0x0f, 0x84, 0x2d, 0x00, 0x00, 0x00, //0x000023a2 je LBB0_462 + //0x000023a8 LBB0_457 + 0x48, 0x8d, 0x3c, 0x01, //0x000023a8 leaq (%rcx,%rax), %rdi + 0x31, 0xf6, //0x000023ac xorl %esi, %esi + //0x000023ae LBB0_458 + 0x0f, 0xbe, 0x1c, 0x31, //0x000023ae movsbl (%rcx,%rsi), %ebx + 0x83, 0xfb, 0x20, //0x000023b2 cmpl $32, %ebx + 0x0f, 0x87, 0x1d, 0x0b, 0x00, 0x00, //0x000023b5 ja LBB0_601 + 0x49, 0x0f, 0xa3, 0xda, //0x000023bb btq %rbx, %r10 + 0x0f, 0x83, 0x13, 0x0b, 0x00, 0x00, //0x000023bf jae LBB0_601 + 0x48, 0x83, 0xc6, 0x01, //0x000023c5 addq $1, %rsi + 0x48, 0x39, 0xf0, //0x000023c9 cmpq %rsi, %rax + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x000023cc jne LBB0_458 + 0x48, 0x89, 0xf9, //0x000023d2 movq %rdi, %rcx + //0x000023d5 LBB0_462 + 0x4c, 0x29, 0xe1, //0x000023d5 subq %r12, %rcx + 0x48, 0x39, 0xd1, //0x000023d8 cmpq %rdx, %rcx + 0x0f, 0x82, 0x20, 0x00, 0x00, 0x00, //0x000023db jb LBB0_464 + 0xe9, 0x30, 0x03, 0x00, 0x00, //0x000023e1 jmp LBB0_505 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000023e6 .p2align 4, 0x90 + //0x000023f0 LBB0_463 + 0xf7, 0xd6, //0x000023f0 notl %esi + 0x0f, 0xbc, 0xce, //0x000023f2 bsfl %esi, %ecx + 0x48, 0x29, 0xc1, //0x000023f5 subq %rax, %rcx + 0x48, 0x39, 0xd1, //0x000023f8 cmpq %rdx, %rcx + 0x0f, 0x83, 0x15, 0x03, 0x00, 0x00, //0x000023fb jae LBB0_505 + //0x00002401 LBB0_464 + 0x4c, 0x8d, 0x71, 0x01, //0x00002401 leaq $1(%rcx), %r14 + 0x4d, 0x89, 0x31, //0x00002405 movq %r14, (%r9) + 0x41, 0x0f, 0xbe, 0x04, 0x0c, //0x00002408 movsbl (%r12,%rcx), %eax + 0x83, 0xf8, 0x7b, //0x0000240d cmpl $123, %eax + 0x0f, 0x87, 0xfa, 0x02, 0x00, 0x00, //0x00002410 ja LBB0_504 + 0x48, 0x8d, 0x15, 0x7b, 0x35, 0x00, 0x00, //0x00002416 leaq $13691(%rip), %rdx /* LJTI0_0+0(%rip) */ + 0x48, 0x63, 0x04, 0x82, //0x0000241d movslq (%rdx,%rax,4), %rax + 0x48, 0x01, 0xd0, //0x00002421 addq %rdx, %rax + 0xff, 0xe0, //0x00002424 jmpq *%rax + //0x00002426 LBB0_466 + 0x4d, 0x8b, 0x4d, 0x00, //0x00002426 movq (%r13), %r9 + 0x4c, 0x89, 0xca, //0x0000242a movq %r9, %rdx + 0x4c, 0x29, 0xf2, //0x0000242d subq %r14, %rdx + 0x48, 0x83, 0xfa, 0x20, //0x00002430 cmpq $32, %rdx + 0x0f, 0x82, 0x73, 0x0b, 0x00, 0x00, //0x00002434 jb LBB0_606 + 0x48, 0x89, 0xce, //0x0000243a movq %rcx, %rsi + 0x48, 0xf7, 0xd6, //0x0000243d notq %rsi + 0x48, 0x8d, 0x59, 0x01, //0x00002440 leaq $1(%rcx), %rbx + 0x48, 0x8d, 0x51, 0x02, //0x00002444 leaq $2(%rcx), %rdx + 0x49, 0x8d, 0x3c, 0x0c, //0x00002448 leaq (%r12,%rcx), %rdi + 0x90, 0x90, 0x90, 0x90, //0x0000244c .p2align 4, 0x90 + //0x00002450 LBB0_468 + 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x1c, //0x00002450 vmovdqu (%r12,%rbx), %ymm6 + 0xc5, 0xcd, 0x74, 0xfb, //0x00002456 vpcmpeqb %ymm3, %ymm6, %ymm7 + 0xc5, 0xcd, 0xdb, 0xf4, //0x0000245a vpand %ymm4, %ymm6, %ymm6 + 0xc5, 0xcd, 0x74, 0xf5, //0x0000245e vpcmpeqb %ymm5, %ymm6, %ymm6 + 0xc5, 0xcd, 0xeb, 0xf7, //0x00002462 vpor %ymm7, %ymm6, %ymm6 + 0xc5, 0xfd, 0xd7, 0xc6, //0x00002466 vpmovmskb %ymm6, %eax + 0x85, 0xc0, //0x0000246a testl %eax, %eax + 0x0f, 0x85, 0x1e, 0x01, 0x00, 0x00, //0x0000246c jne LBB0_483 + 0x48, 0x83, 0xc3, 0x20, //0x00002472 addq $32, %rbx + 0x49, 0x8d, 0x04, 0x31, //0x00002476 leaq (%r9,%rsi), %rax + 0x48, 0x83, 0xc0, 0xe0, //0x0000247a addq $-32, %rax + 0x48, 0x83, 0xc6, 0xe0, //0x0000247e addq $-32, %rsi + 0x48, 0x83, 0xc2, 0x20, //0x00002482 addq $32, %rdx + 0x48, 0x83, 0xc1, 0x20, //0x00002486 addq $32, %rcx + 0x48, 0x83, 0xc7, 0x20, //0x0000248a addq $32, %rdi + 0x48, 0x83, 0xf8, 0x1f, //0x0000248e cmpq $31, %rax + 0x0f, 0x87, 0xb8, 0xff, 0xff, 0xff, //0x00002492 ja LBB0_468 + 0x4d, 0x89, 0xe6, //0x00002498 movq %r12, %r14 + 0x49, 0x29, 0xf6, //0x0000249b subq %rsi, %r14 + 0x49, 0x01, 0xf1, //0x0000249e addq %rsi, %r9 + 0x4c, 0x89, 0xca, //0x000024a1 movq %r9, %rdx + 0x48, 0x83, 0xfa, 0x10, //0x000024a4 cmpq $16, %rdx + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x000024a8 movq $8(%rsp), %r9 + 0x0f, 0x82, 0x68, 0x00, 0x00, 0x00, //0x000024ad jb LBB0_474 + //0x000024b3 LBB0_471 + 0x4c, 0x89, 0xe0, //0x000024b3 movq %r12, %rax + 0x4c, 0x29, 0xf0, //0x000024b6 subq %r14, %rax + 0x4c, 0x89, 0xf1, //0x000024b9 movq %r14, %rcx + 0x4c, 0x29, 0xe1, //0x000024bc subq %r12, %rcx + 0x48, 0x83, 0xc1, 0x01, //0x000024bf addq $1, %rcx + 0x49, 0x8d, 0x5e, 0xff, //0x000024c3 leaq $-1(%r14), %rbx + 0x48, 0x89, 0xdf, //0x000024c7 movq %rbx, %rdi + 0x4c, 0x29, 0xe7, //0x000024ca subq %r12, %rdi + 0x90, 0x90, 0x90, //0x000024cd .p2align 4, 0x90 + //0x000024d0 LBB0_472 + 0xc4, 0xc1, 0x7a, 0x6f, 0x36, //0x000024d0 vmovdqu (%r14), %xmm6 + 0xc5, 0xc9, 0x74, 0x3d, 0x03, 0xdd, 0xff, 0xff, //0x000024d5 vpcmpeqb $-8957(%rip), %xmm6, %xmm7 /* LCPI0_4+0(%rip) */ + 0xc5, 0xc9, 0xdb, 0x35, 0x0b, 0xdd, 0xff, 0xff, //0x000024dd vpand $-8949(%rip), %xmm6, %xmm6 /* LCPI0_5+0(%rip) */ + 0xc5, 0xb9, 0x74, 0xf6, //0x000024e5 vpcmpeqb %xmm6, %xmm8, %xmm6 + 0xc5, 0xc9, 0xeb, 0xf7, //0x000024e9 vpor %xmm7, %xmm6, %xmm6 + 0xc5, 0xf9, 0xd7, 0xf6, //0x000024ed vpmovmskb %xmm6, %esi + 0x85, 0xf6, //0x000024f1 testl %esi, %esi + 0x0f, 0x85, 0x62, 0x09, 0x00, 0x00, //0x000024f3 jne LBB0_595 + 0x49, 0x83, 0xc6, 0x10, //0x000024f9 addq $16, %r14 + 0x48, 0x83, 0xc2, 0xf0, //0x000024fd addq $-16, %rdx + 0x48, 0x83, 0xc0, 0xf0, //0x00002501 addq $-16, %rax + 0x48, 0x83, 0xc1, 0x10, //0x00002505 addq $16, %rcx + 0x48, 0x83, 0xc7, 0x10, //0x00002509 addq $16, %rdi + 0x48, 0x83, 0xc3, 0x10, //0x0000250d addq $16, %rbx + 0x48, 0x83, 0xfa, 0x0f, //0x00002511 cmpq $15, %rdx + 0x0f, 0x87, 0xb5, 0xff, 0xff, 0xff, //0x00002515 ja LBB0_472 + //0x0000251b LBB0_474 + 0x48, 0x85, 0xd2, //0x0000251b testq %rdx, %rdx + 0x0f, 0x84, 0x49, 0x00, 0x00, 0x00, //0x0000251e je LBB0_482 + 0x49, 0x8d, 0x04, 0x16, //0x00002524 leaq (%r14,%rdx), %rax + 0x48, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00002528 movabsq $17596481021440, %rsi + //0x00002532 LBB0_476 + 0x41, 0x0f, 0xb6, 0x0e, //0x00002532 movzbl (%r14), %ecx + 0x48, 0x83, 0xf9, 0x2c, //0x00002536 cmpq $44, %rcx + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x0000253a ja LBB0_478 + 0x48, 0x0f, 0xa3, 0xce, //0x00002540 btq %rcx, %rsi + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x00002544 jb LBB0_482 + //0x0000254a LBB0_478 + 0x80, 0xf9, 0x5d, //0x0000254a cmpb $93, %cl + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x0000254d je LBB0_482 + 0x80, 0xf9, 0x7d, //0x00002553 cmpb $125, %cl + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00002556 je LBB0_482 + 0x49, 0x83, 0xc6, 0x01, //0x0000255c addq $1, %r14 + 0x48, 0x83, 0xc2, 0xff, //0x00002560 addq $-1, %rdx + 0x0f, 0x85, 0xc8, 0xff, 0xff, 0xff, //0x00002564 jne LBB0_476 + 0x49, 0x89, 0xc6, //0x0000256a movq %rax, %r14 + //0x0000256d LBB0_482 + 0x4d, 0x29, 0xe6, //0x0000256d subq %r12, %r14 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00002570 movq $8(%rsp), %r9 + 0x4d, 0x89, 0x31, //0x00002575 movq %r14, (%r9) + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002578 movabsq $4294977024, %r10 + 0xe9, 0x8f, 0x01, 0x00, 0x00, //0x00002582 jmp LBB0_505 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002587 .p2align 4, 0x90 + //0x00002590 LBB0_483 + 0x0f, 0xbc, 0xc0, //0x00002590 bsfl %eax, %eax + 0x49, 0x89, 0xc6, //0x00002593 movq %rax, %r14 + 0x49, 0x29, 0xf6, //0x00002596 subq %rsi, %r14 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00002599 movq $8(%rsp), %r9 + 0x4d, 0x89, 0x31, //0x0000259e movq %r14, (%r9) + 0x4d, 0x85, 0xf6, //0x000025a1 testq %r14, %r14 + 0x0f, 0x8e, 0x6c, 0x01, 0x00, 0x00, //0x000025a4 jle LBB0_505 + 0x48, 0x01, 0xc2, //0x000025aa addq %rax, %rdx + 0x48, 0x01, 0xc1, //0x000025ad addq %rax, %rcx + 0x48, 0x01, 0xc7, //0x000025b0 addq %rax, %rdi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000025b3 .p2align 4, 0x90 + //0x000025c0 LBB0_485 + 0x0f, 0xb6, 0x07, //0x000025c0 movzbl (%rdi), %eax + 0x48, 0x83, 0xf8, 0x20, //0x000025c3 cmpq $32, %rax + 0x0f, 0x87, 0x49, 0x01, 0x00, 0x00, //0x000025c7 ja LBB0_505 + 0x49, 0x0f, 0xa3, 0xc2, //0x000025cd btq %rax, %r10 + 0x0f, 0x83, 0x3f, 0x01, 0x00, 0x00, //0x000025d1 jae LBB0_505 + 0x49, 0x89, 0x09, //0x000025d7 movq %rcx, (%r9) + 0x48, 0x83, 0xc2, 0xff, //0x000025da addq $-1, %rdx + 0x48, 0x83, 0xc1, 0xff, //0x000025de addq $-1, %rcx + 0x48, 0x83, 0xc7, 0xff, //0x000025e2 addq $-1, %rdi + 0x49, 0x83, 0xc6, 0xff, //0x000025e6 addq $-1, %r14 + 0x48, 0x83, 0xfa, 0x01, //0x000025ea cmpq $1, %rdx + 0x0f, 0x8f, 0xcc, 0xff, 0xff, 0xff, //0x000025ee jg LBB0_485 + 0x45, 0x31, 0xf6, //0x000025f4 xorl %r14d, %r14d + 0xe9, 0x1a, 0x01, 0x00, 0x00, //0x000025f7 jmp LBB0_505 + //0x000025fc LBB0_489 + 0x48, 0x83, 0xc1, 0x04, //0x000025fc addq $4, %rcx + 0x49, 0x3b, 0x4d, 0x00, //0x00002600 cmpq (%r13), %rcx + 0x0f, 0x86, 0x06, 0x01, 0x00, 0x00, //0x00002604 jbe LBB0_504 + 0xe9, 0x07, 0x01, 0x00, 0x00, //0x0000260a jmp LBB0_505 + //0x0000260f LBB0_490 + 0x4c, 0x89, 0x7c, 0x24, 0x28, //0x0000260f movq %r15, $40(%rsp) + 0x4c, 0x89, 0x6c, 0x24, 0x18, //0x00002614 movq %r13, $24(%rsp) + 0x4d, 0x8b, 0x4d, 0x00, //0x00002619 movq (%r13), %r9 + 0x4d, 0x89, 0xcd, //0x0000261d movq %r9, %r13 + 0x4d, 0x29, 0xf5, //0x00002620 subq %r14, %r13 + 0x49, 0x83, 0xfd, 0x20, //0x00002623 cmpq $32, %r13 + 0x0f, 0x8c, 0x97, 0x09, 0x00, 0x00, //0x00002627 jl LBB0_607 + 0x4d, 0x8d, 0x14, 0x0c, //0x0000262d leaq (%r12,%rcx), %r10 + 0x49, 0x29, 0xc9, //0x00002631 subq %rcx, %r9 + 0xb8, 0x1f, 0x00, 0x00, 0x00, //0x00002634 movl $31, %eax + 0x45, 0x31, 0xed, //0x00002639 xorl %r13d, %r13d + 0x45, 0x31, 0xff, //0x0000263c xorl %r15d, %r15d + 0xe9, 0x60, 0x00, 0x00, 0x00, //0x0000263f jmp LBB0_492 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002644 .p2align 4, 0x90 + //0x00002650 LBB0_497 + 0x44, 0x89, 0xfe, //0x00002650 movl %r15d, %esi + 0xf7, 0xd6, //0x00002653 notl %esi + 0x21, 0xde, //0x00002655 andl %ebx, %esi + 0x8d, 0x14, 0x36, //0x00002657 leal (%rsi,%rsi), %edx + 0x44, 0x09, 0xfa, //0x0000265a orl %r15d, %edx + 0x89, 0xd7, //0x0000265d movl %edx, %edi + 0xf7, 0xd7, //0x0000265f notl %edi + 0x21, 0xdf, //0x00002661 andl %ebx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002663 andl $-1431655766, %edi + 0x45, 0x31, 0xff, //0x00002669 xorl %r15d, %r15d + 0x01, 0xf7, //0x0000266c addl %esi, %edi + 0x41, 0x0f, 0x92, 0xc7, //0x0000266e setb %r15b + 0x01, 0xff, //0x00002672 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00002674 xorl $1431655765, %edi + 0x21, 0xd7, //0x0000267a andl %edx, %edi + 0xf7, 0xd7, //0x0000267c notl %edi + 0x41, 0x21, 0xfb, //0x0000267e andl %edi, %r11d + 0x4d, 0x85, 0xdb, //0x00002681 testq %r11, %r11 + 0x0f, 0x85, 0x4e, 0x00, 0x00, 0x00, //0x00002684 jne LBB0_495 + //0x0000268a LBB0_498 + 0x49, 0x83, 0xc5, 0x20, //0x0000268a addq $32, %r13 + 0x49, 0x8d, 0x14, 0x01, //0x0000268e leaq (%r9,%rax), %rdx + 0x48, 0x83, 0xc2, 0xe0, //0x00002692 addq $-32, %rdx + 0x48, 0x83, 0xc0, 0xe0, //0x00002696 addq $-32, %rax + 0x48, 0x83, 0xfa, 0x3f, //0x0000269a cmpq $63, %rdx + 0x0f, 0x8e, 0x48, 0x08, 0x00, 0x00, //0x0000269e jle LBB0_499 + //0x000026a4 LBB0_492 + 0xc4, 0x81, 0x7e, 0x6f, 0x74, 0x2a, 0x01, //0x000026a4 vmovdqu $1(%r10,%r13), %ymm6 + 0xc5, 0xcd, 0x74, 0xf9, //0x000026ab vpcmpeqb %ymm1, %ymm6, %ymm7 + 0xc5, 0x7d, 0xd7, 0xdf, //0x000026af vpmovmskb %ymm7, %r11d + 0xc5, 0xcd, 0x74, 0xf2, //0x000026b3 vpcmpeqb %ymm2, %ymm6, %ymm6 + 0xc5, 0xfd, 0xd7, 0xde, //0x000026b7 vpmovmskb %ymm6, %ebx + 0x85, 0xdb, //0x000026bb testl %ebx, %ebx + 0x0f, 0x85, 0x8d, 0xff, 0xff, 0xff, //0x000026bd jne LBB0_497 + 0x4d, 0x85, 0xff, //0x000026c3 testq %r15, %r15 + 0x0f, 0x85, 0x84, 0xff, 0xff, 0xff, //0x000026c6 jne LBB0_497 + 0x45, 0x31, 0xff, //0x000026cc xorl %r15d, %r15d + 0x4d, 0x85, 0xdb, //0x000026cf testq %r11, %r11 + 0x0f, 0x84, 0xb2, 0xff, 0xff, 0xff, //0x000026d2 je LBB0_498 + //0x000026d8 LBB0_495 + 0x41, 0x0f, 0xbc, 0xc3, //0x000026d8 bsfl %r11d, %eax + 0x48, 0x01, 0xc8, //0x000026dc addq %rcx, %rax + 0x4e, 0x8d, 0x34, 0x28, //0x000026df leaq (%rax,%r13), %r14 + 0x49, 0x83, 0xc6, 0x02, //0x000026e3 addq $2, %r14 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x000026e7 movq $8(%rsp), %r9 + 0x4d, 0x89, 0x31, //0x000026ec movq %r14, (%r9) + //0x000026ef LBB0_496 + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x000026ef movq $24(%rsp), %r13 + 0xe9, 0x4e, 0x07, 0x00, 0x00, //0x000026f4 jmp LBB0_590 + //0x000026f9 LBB0_503 + 0x48, 0x83, 0xc1, 0x05, //0x000026f9 addq $5, %rcx + 0x49, 0x3b, 0x4d, 0x00, //0x000026fd cmpq (%r13), %rcx + 0x0f, 0x87, 0x0f, 0x00, 0x00, 0x00, //0x00002701 ja LBB0_505 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002707 .p2align 4, 0x90 + //0x00002710 LBB0_504 + 0x49, 0x89, 0x09, //0x00002710 movq %rcx, (%r9) + 0x49, 0x89, 0xce, //0x00002713 movq %rcx, %r14 + //0x00002716 LBB0_505 + 0x48, 0x8b, 0x84, 0x24, 0x90, 0x00, 0x00, 0x00, //0x00002716 movq $144(%rsp), %rax + 0x4c, 0x8b, 0x20, //0x0000271e movq (%rax), %r12 + 0x48, 0x8b, 0x48, 0x08, //0x00002721 movq $8(%rax), %rcx + 0x49, 0x39, 0xce, //0x00002725 cmpq %rcx, %r14 + 0x0f, 0x83, 0x32, 0x00, 0x00, 0x00, //0x00002728 jae LBB0_510 + 0x43, 0x8a, 0x04, 0x34, //0x0000272e movb (%r12,%r14), %al + 0x3c, 0x0d, //0x00002732 cmpb $13, %al + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002734 je LBB0_510 + 0x3c, 0x20, //0x0000273a cmpb $32, %al + 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x0000273c je LBB0_510 + 0x04, 0xf7, //0x00002742 addb $-9, %al + 0x3c, 0x01, //0x00002744 cmpb $1, %al + 0x0f, 0x86, 0x14, 0x00, 0x00, 0x00, //0x00002746 jbe LBB0_510 + 0x4c, 0x89, 0xf2, //0x0000274c movq %r14, %rdx + 0xe9, 0x6d, 0x01, 0x00, 0x00, //0x0000274f jmp LBB0_535 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002754 .p2align 4, 0x90 + //0x00002760 LBB0_510 + 0x49, 0x8d, 0x56, 0x01, //0x00002760 leaq $1(%r14), %rdx + 0x48, 0x39, 0xca, //0x00002764 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002767 jae LBB0_514 + 0x41, 0x8a, 0x04, 0x14, //0x0000276d movb (%r12,%rdx), %al + 0x3c, 0x0d, //0x00002771 cmpb $13, %al + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00002773 je LBB0_514 + 0x3c, 0x20, //0x00002779 cmpb $32, %al + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x0000277b je LBB0_514 + 0x04, 0xf7, //0x00002781 addb $-9, %al + 0x3c, 0x01, //0x00002783 cmpb $1, %al + 0x0f, 0x87, 0x36, 0x01, 0x00, 0x00, //0x00002785 ja LBB0_535 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000278b .p2align 4, 0x90 + //0x00002790 LBB0_514 + 0x49, 0x8d, 0x56, 0x02, //0x00002790 leaq $2(%r14), %rdx + 0x48, 0x39, 0xca, //0x00002794 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002797 jae LBB0_518 + 0x41, 0x8a, 0x04, 0x14, //0x0000279d movb (%r12,%rdx), %al + 0x3c, 0x0d, //0x000027a1 cmpb $13, %al + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x000027a3 je LBB0_518 + 0x3c, 0x20, //0x000027a9 cmpb $32, %al + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x000027ab je LBB0_518 + 0x04, 0xf7, //0x000027b1 addb $-9, %al + 0x3c, 0x01, //0x000027b3 cmpb $1, %al + 0x0f, 0x87, 0x06, 0x01, 0x00, 0x00, //0x000027b5 ja LBB0_535 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000027bb .p2align 4, 0x90 + //0x000027c0 LBB0_518 + 0x49, 0x8d, 0x56, 0x03, //0x000027c0 leaq $3(%r14), %rdx + 0x48, 0x39, 0xca, //0x000027c4 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000027c7 jae LBB0_522 + 0x41, 0x8a, 0x04, 0x14, //0x000027cd movb (%r12,%rdx), %al + 0x3c, 0x0d, //0x000027d1 cmpb $13, %al + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x000027d3 je LBB0_522 + 0x3c, 0x20, //0x000027d9 cmpb $32, %al + 0x0f, 0x84, 0x0f, 0x00, 0x00, 0x00, //0x000027db je LBB0_522 + 0x04, 0xf7, //0x000027e1 addb $-9, %al + 0x3c, 0x01, //0x000027e3 cmpb $1, %al + 0x0f, 0x87, 0xd6, 0x00, 0x00, 0x00, //0x000027e5 ja LBB0_535 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000027eb .p2align 4, 0x90 + //0x000027f0 LBB0_522 + 0x49, 0x8d, 0x56, 0x04, //0x000027f0 leaq $4(%r14), %rdx + 0x48, 0x89, 0xc8, //0x000027f4 movq %rcx, %rax + 0x48, 0x29, 0xd0, //0x000027f7 subq %rdx, %rax + 0x0f, 0x86, 0x08, 0x27, 0x00, 0x00, //0x000027fa jbe LBB0_1038 + 0x48, 0x83, 0xf8, 0x20, //0x00002800 cmpq $32, %rax + 0x0f, 0x82, 0x81, 0x07, 0x00, 0x00, //0x00002804 jb LBB0_603 + 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x0000280a movq $-4, %rax + 0x4c, 0x29, 0xf0, //0x00002811 subq %r14, %rax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002814 .p2align 4, 0x90 + //0x00002820 LBB0_525 + 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x14, //0x00002820 vmovdqu (%r12,%rdx), %ymm6 + 0xc4, 0xe2, 0x7d, 0x00, 0xfe, //0x00002826 vpshufb %ymm6, %ymm0, %ymm7 + 0xc5, 0xcd, 0x74, 0xf7, //0x0000282b vpcmpeqb %ymm7, %ymm6, %ymm6 + 0xc5, 0xfd, 0xd7, 0xf6, //0x0000282f vpmovmskb %ymm6, %esi + 0x83, 0xfe, 0xff, //0x00002833 cmpl $-1, %esi + 0x0f, 0x85, 0x74, 0x00, 0x00, 0x00, //0x00002836 jne LBB0_534 + 0x48, 0x83, 0xc2, 0x20, //0x0000283c addq $32, %rdx + 0x48, 0x8d, 0x34, 0x01, //0x00002840 leaq (%rcx,%rax), %rsi + 0x48, 0x83, 0xc6, 0xe0, //0x00002844 addq $-32, %rsi + 0x48, 0x83, 0xc0, 0xe0, //0x00002848 addq $-32, %rax + 0x48, 0x83, 0xfe, 0x1f, //0x0000284c cmpq $31, %rsi + 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00002850 ja LBB0_525 + 0x4c, 0x89, 0xe2, //0x00002856 movq %r12, %rdx + 0x48, 0x29, 0xc2, //0x00002859 subq %rax, %rdx + 0x48, 0x01, 0xc8, //0x0000285c addq %rcx, %rax + 0x48, 0x85, 0xc0, //0x0000285f testq %rax, %rax + 0x0f, 0x84, 0x2f, 0x00, 0x00, 0x00, //0x00002862 je LBB0_533 + //0x00002868 LBB0_528 + 0x48, 0x8d, 0x3c, 0x02, //0x00002868 leaq (%rdx,%rax), %rdi + 0x31, 0xf6, //0x0000286c xorl %esi, %esi + 0x90, 0x90, //0x0000286e .p2align 4, 0x90 + //0x00002870 LBB0_529 + 0x0f, 0xbe, 0x1c, 0x32, //0x00002870 movsbl (%rdx,%rsi), %ebx + 0x83, 0xfb, 0x20, //0x00002874 cmpl $32, %ebx + 0x0f, 0x87, 0x47, 0x06, 0x00, 0x00, //0x00002877 ja LBB0_600 + 0x49, 0x0f, 0xa3, 0xda, //0x0000287d btq %rbx, %r10 + 0x0f, 0x83, 0x3d, 0x06, 0x00, 0x00, //0x00002881 jae LBB0_600 + 0x48, 0x83, 0xc6, 0x01, //0x00002887 addq $1, %rsi + 0x48, 0x39, 0xf0, //0x0000288b cmpq %rsi, %rax + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x0000288e jne LBB0_529 + 0x48, 0x89, 0xfa, //0x00002894 movq %rdi, %rdx + //0x00002897 LBB0_533 + 0x4c, 0x29, 0xe2, //0x00002897 subq %r12, %rdx + 0x48, 0x39, 0xca, //0x0000289a cmpq %rcx, %rdx + 0x0f, 0x82, 0x1e, 0x00, 0x00, 0x00, //0x0000289d jb LBB0_535 + 0xe9, 0x63, 0x26, 0x00, 0x00, //0x000028a3 jmp LBB0_1048 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000028a8 .p2align 4, 0x90 + //0x000028b0 LBB0_534 + 0xf7, 0xd6, //0x000028b0 notl %esi + 0x0f, 0xbc, 0xd6, //0x000028b2 bsfl %esi, %edx + 0x48, 0x29, 0xc2, //0x000028b5 subq %rax, %rdx + 0x48, 0x39, 0xca, //0x000028b8 cmpq %rcx, %rdx + 0x0f, 0x83, 0x4a, 0x26, 0x00, 0x00, //0x000028bb jae LBB0_1048 + //0x000028c1 LBB0_535 + 0x4c, 0x8d, 0x72, 0x01, //0x000028c1 leaq $1(%rdx), %r14 + 0x4d, 0x89, 0x31, //0x000028c5 movq %r14, (%r9) + 0x41, 0x8a, 0x04, 0x14, //0x000028c8 movb (%r12,%rdx), %al + 0x3c, 0x2c, //0x000028cc cmpb $44, %al + 0x0f, 0x85, 0xd3, 0x09, 0x00, 0x00, //0x000028ce jne LBB0_644 + 0x49, 0x8d, 0x40, 0xff, //0x000028d4 leaq $-1(%r8), %rax + 0x49, 0x83, 0xf8, 0x02, //0x000028d8 cmpq $2, %r8 + 0x49, 0x89, 0xc0, //0x000028dc movq %rax, %r8 + 0x0f, 0x8d, 0x7b, 0xf9, 0xff, 0xff, //0x000028df jge LBB0_434 + 0xe9, 0x26, 0x07, 0x00, 0x00, //0x000028e5 jmp LBB0_537 + //0x000028ea LBB0_540 + 0x4c, 0x89, 0x7c, 0x24, 0x28, //0x000028ea movq %r15, $40(%rsp) + 0x4d, 0x8b, 0x55, 0x00, //0x000028ef movq (%r13), %r10 + 0x4d, 0x29, 0xf2, //0x000028f3 subq %r14, %r10 + 0x4d, 0x01, 0xf4, //0x000028f6 addq %r14, %r12 + 0x45, 0x31, 0xdb, //0x000028f9 xorl %r11d, %r11d + 0x45, 0x31, 0xf6, //0x000028fc xorl %r14d, %r14d + 0x45, 0x31, 0xff, //0x000028ff xorl %r15d, %r15d + 0x31, 0xdb, //0x00002902 xorl %ebx, %ebx + 0x49, 0x83, 0xfa, 0x40, //0x00002904 cmpq $64, %r10 + 0x0f, 0x8c, 0x4b, 0x01, 0x00, 0x00, //0x00002908 jl LBB0_549 + //0x0000290e LBB0_543 + 0xc4, 0x41, 0x7e, 0x6f, 0x3c, 0x24, //0x0000290e vmovdqu (%r12), %ymm15 + 0xc4, 0x41, 0x7e, 0x6f, 0x74, 0x24, 0x20, //0x00002914 vmovdqu $32(%r12), %ymm14 + 0xc5, 0x85, 0x74, 0xf2, //0x0000291b vpcmpeqb %ymm2, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xc6, //0x0000291f vpmovmskb %ymm6, %eax + 0xc5, 0x8d, 0x74, 0xf2, //0x00002923 vpcmpeqb %ymm2, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xce, //0x00002927 vpmovmskb %ymm6, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x0000292b shlq $32, %rcx + 0x48, 0x09, 0xc8, //0x0000292f orq %rcx, %rax + 0x48, 0x89, 0xc1, //0x00002932 movq %rax, %rcx + 0x4c, 0x09, 0xf1, //0x00002935 orq %r14, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00002938 jne LBB0_545 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000293e movq $-1, %rax + 0x45, 0x31, 0xf6, //0x00002945 xorl %r14d, %r14d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00002948 jmp LBB0_546 + //0x0000294d LBB0_545 + 0x4c, 0x89, 0xf1, //0x0000294d movq %r14, %rcx + 0x48, 0xf7, 0xd1, //0x00002950 notq %rcx + 0x48, 0x21, 0xc1, //0x00002953 andq %rax, %rcx + 0x48, 0x8d, 0x34, 0x09, //0x00002956 leaq (%rcx,%rcx), %rsi + 0x4c, 0x09, 0xf6, //0x0000295a orq %r14, %rsi + 0x48, 0x89, 0xf7, //0x0000295d movq %rsi, %rdi + 0x48, 0xf7, 0xd7, //0x00002960 notq %rdi + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002963 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd0, //0x0000296d andq %rdx, %rax + 0x48, 0x21, 0xf8, //0x00002970 andq %rdi, %rax + 0x45, 0x31, 0xf6, //0x00002973 xorl %r14d, %r14d + 0x48, 0x01, 0xc8, //0x00002976 addq %rcx, %rax + 0x41, 0x0f, 0x92, 0xc6, //0x00002979 setb %r14b + 0x48, 0x01, 0xc0, //0x0000297d addq %rax, %rax + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002980 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xc8, //0x0000298a xorq %rcx, %rax + 0x48, 0x21, 0xf0, //0x0000298d andq %rsi, %rax + 0x48, 0xf7, 0xd0, //0x00002990 notq %rax + //0x00002993 LBB0_546 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00002993 movq $8(%rsp), %r9 + 0xc5, 0x8d, 0x74, 0xf1, //0x00002998 vpcmpeqb %ymm1, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xce, //0x0000299c vpmovmskb %ymm6, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x000029a0 shlq $32, %rcx + 0xc5, 0x85, 0x74, 0xf1, //0x000029a4 vpcmpeqb %ymm1, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xf6, //0x000029a8 vpmovmskb %ymm6, %esi + 0x48, 0x09, 0xce, //0x000029ac orq %rcx, %rsi + 0x48, 0x21, 0xc6, //0x000029af andq %rax, %rsi + 0xc4, 0xe1, 0xf9, 0x6e, 0xf6, //0x000029b2 vmovq %rsi, %xmm6 + 0xc4, 0xc3, 0x49, 0x44, 0xf1, 0x00, //0x000029b7 vpclmulqdq $0, %xmm9, %xmm6, %xmm6 + 0xc4, 0xe1, 0xf9, 0x7e, 0xf0, //0x000029bd vmovq %xmm6, %rax + 0x4c, 0x31, 0xd8, //0x000029c2 xorq %r11, %rax + 0xc4, 0xc1, 0x05, 0x74, 0xf2, //0x000029c5 vpcmpeqb %ymm10, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xf6, //0x000029ca vpmovmskb %ymm6, %esi + 0xc4, 0xc1, 0x0d, 0x74, 0xf2, //0x000029ce vpcmpeqb %ymm10, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xce, //0x000029d3 vpmovmskb %ymm6, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x000029d7 shlq $32, %rcx + 0x48, 0x09, 0xce, //0x000029db orq %rcx, %rsi + 0x48, 0x89, 0xc1, //0x000029de movq %rax, %rcx + 0x48, 0xf7, 0xd1, //0x000029e1 notq %rcx + 0x48, 0x21, 0xce, //0x000029e4 andq %rcx, %rsi + 0xc5, 0x85, 0x74, 0xf5, //0x000029e7 vpcmpeqb %ymm5, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xfe, //0x000029eb vpmovmskb %ymm6, %edi + 0xc5, 0x8d, 0x74, 0xf5, //0x000029ef vpcmpeqb %ymm5, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xd6, //0x000029f3 vpmovmskb %ymm6, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x000029f7 shlq $32, %rdx + 0x48, 0x09, 0xd7, //0x000029fb orq %rdx, %rdi + 0x48, 0x21, 0xcf, //0x000029fe andq %rcx, %rdi + 0x0f, 0x84, 0x31, 0x00, 0x00, 0x00, //0x00002a01 je LBB0_541 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002a07 .p2align 4, 0x90 + //0x00002a10 LBB0_547 + 0x48, 0x8d, 0x4f, 0xff, //0x00002a10 leaq $-1(%rdi), %rcx + 0x48, 0x89, 0xca, //0x00002a14 movq %rcx, %rdx + 0x48, 0x21, 0xf2, //0x00002a17 andq %rsi, %rdx + 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x00002a1a popcntq %rdx, %rdx + 0x4c, 0x01, 0xfa, //0x00002a1f addq %r15, %rdx + 0x48, 0x39, 0xda, //0x00002a22 cmpq %rbx, %rdx + 0x0f, 0x86, 0xf8, 0x03, 0x00, 0x00, //0x00002a25 jbe LBB0_588 + 0x48, 0x83, 0xc3, 0x01, //0x00002a2b addq $1, %rbx + 0x48, 0x21, 0xcf, //0x00002a2f andq %rcx, %rdi + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00002a32 jne LBB0_547 + //0x00002a38 LBB0_541 + 0x48, 0xc1, 0xf8, 0x3f, //0x00002a38 sarq $63, %rax + 0xf3, 0x48, 0x0f, 0xb8, 0xce, //0x00002a3c popcntq %rsi, %rcx + 0x49, 0x01, 0xcf, //0x00002a41 addq %rcx, %r15 + 0x49, 0x83, 0xc4, 0x40, //0x00002a44 addq $64, %r12 + 0x49, 0x83, 0xc2, 0xc0, //0x00002a48 addq $-64, %r10 + 0x49, 0x89, 0xc3, //0x00002a4c movq %rax, %r11 + 0x49, 0x83, 0xfa, 0x40, //0x00002a4f cmpq $64, %r10 + 0x0f, 0x8d, 0xb5, 0xfe, 0xff, 0xff, //0x00002a53 jge LBB0_543 + //0x00002a59 LBB0_549 + 0x4d, 0x85, 0xd2, //0x00002a59 testq %r10, %r10 + 0x0f, 0x8e, 0x6b, 0x05, 0x00, 0x00, //0x00002a5c jle LBB0_608 + 0xc5, 0xc9, 0xef, 0xf6, //0x00002a62 vpxor %xmm6, %xmm6, %xmm6 + 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x60, //0x00002a66 vmovdqu %ymm6, $96(%rsp) + 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x00002a6c vmovdqu %ymm6, $64(%rsp) + 0x44, 0x89, 0xe0, //0x00002a72 movl %r12d, %eax + 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00002a75 andl $4095, %eax + 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00002a7a cmpl $4033, %eax + 0x0f, 0x82, 0x89, 0xfe, 0xff, 0xff, //0x00002a7f jb LBB0_543 + 0x49, 0x83, 0xfa, 0x20, //0x00002a85 cmpq $32, %r10 + 0x0f, 0x82, 0x1e, 0x00, 0x00, 0x00, //0x00002a89 jb LBB0_553 + 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x24, //0x00002a8f vmovdqu (%r12), %ymm6 + 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x00002a95 vmovdqu %ymm6, $64(%rsp) + 0x49, 0x83, 0xc4, 0x20, //0x00002a9b addq $32, %r12 + 0x49, 0x8d, 0x7a, 0xe0, //0x00002a9f leaq $-32(%r10), %rdi + 0x4c, 0x8d, 0x4c, 0x24, 0x60, //0x00002aa3 leaq $96(%rsp), %r9 + 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00002aa8 jmp LBB0_554 + //0x00002aad LBB0_553 + 0x4c, 0x8d, 0x4c, 0x24, 0x40, //0x00002aad leaq $64(%rsp), %r9 + 0x4c, 0x89, 0xd7, //0x00002ab2 movq %r10, %rdi + //0x00002ab5 LBB0_554 + 0x48, 0x83, 0xff, 0x10, //0x00002ab5 cmpq $16, %rdi + 0x0f, 0x82, 0x5e, 0x00, 0x00, 0x00, //0x00002ab9 jb LBB0_555 + 0xc4, 0xc1, 0x7a, 0x6f, 0x34, 0x24, //0x00002abf vmovdqu (%r12), %xmm6 + 0xc4, 0xc1, 0x7a, 0x7f, 0x31, //0x00002ac5 vmovdqu %xmm6, (%r9) + 0x49, 0x83, 0xc4, 0x10, //0x00002aca addq $16, %r12 + 0x49, 0x83, 0xc1, 0x10, //0x00002ace addq $16, %r9 + 0x48, 0x83, 0xc7, 0xf0, //0x00002ad2 addq $-16, %rdi + 0x48, 0x83, 0xff, 0x08, //0x00002ad6 cmpq $8, %rdi + 0x0f, 0x83, 0x47, 0x00, 0x00, 0x00, //0x00002ada jae LBB0_560 + //0x00002ae0 LBB0_556 + 0x48, 0x83, 0xff, 0x04, //0x00002ae0 cmpq $4, %rdi + 0x0f, 0x8c, 0x5a, 0x00, 0x00, 0x00, //0x00002ae4 jl LBB0_557 + //0x00002aea LBB0_561 + 0x41, 0x8b, 0x04, 0x24, //0x00002aea movl (%r12), %eax + 0x41, 0x89, 0x01, //0x00002aee movl %eax, (%r9) + 0x49, 0x83, 0xc4, 0x04, //0x00002af1 addq $4, %r12 + 0x49, 0x83, 0xc1, 0x04, //0x00002af5 addq $4, %r9 + 0x48, 0x83, 0xc7, 0xfc, //0x00002af9 addq $-4, %rdi + 0x48, 0x83, 0xff, 0x02, //0x00002afd cmpq $2, %rdi + 0x0f, 0x83, 0x47, 0x00, 0x00, 0x00, //0x00002b01 jae LBB0_562 + //0x00002b07 LBB0_558 + 0x4c, 0x89, 0xe0, //0x00002b07 movq %r12, %rax + 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x00002b0a leaq $64(%rsp), %r12 + 0x48, 0x85, 0xff, //0x00002b0f testq %rdi, %rdi + 0x0f, 0x85, 0x5c, 0x00, 0x00, 0x00, //0x00002b12 jne LBB0_563 + 0xe9, 0xf1, 0xfd, 0xff, 0xff, //0x00002b18 jmp LBB0_543 + //0x00002b1d LBB0_555 + 0x48, 0x83, 0xff, 0x08, //0x00002b1d cmpq $8, %rdi + 0x0f, 0x82, 0xb9, 0xff, 0xff, 0xff, //0x00002b21 jb LBB0_556 + //0x00002b27 LBB0_560 + 0x49, 0x8b, 0x04, 0x24, //0x00002b27 movq (%r12), %rax + 0x49, 0x89, 0x01, //0x00002b2b movq %rax, (%r9) + 0x49, 0x83, 0xc4, 0x08, //0x00002b2e addq $8, %r12 + 0x49, 0x83, 0xc1, 0x08, //0x00002b32 addq $8, %r9 + 0x48, 0x83, 0xc7, 0xf8, //0x00002b36 addq $-8, %rdi + 0x48, 0x83, 0xff, 0x04, //0x00002b3a cmpq $4, %rdi + 0x0f, 0x8d, 0xa6, 0xff, 0xff, 0xff, //0x00002b3e jge LBB0_561 + //0x00002b44 LBB0_557 + 0x48, 0x83, 0xff, 0x02, //0x00002b44 cmpq $2, %rdi + 0x0f, 0x82, 0xb9, 0xff, 0xff, 0xff, //0x00002b48 jb LBB0_558 + //0x00002b4e LBB0_562 + 0x41, 0x0f, 0xb7, 0x04, 0x24, //0x00002b4e movzwl (%r12), %eax + 0x66, 0x41, 0x89, 0x01, //0x00002b53 movw %ax, (%r9) + 0x49, 0x83, 0xc4, 0x02, //0x00002b57 addq $2, %r12 + 0x49, 0x83, 0xc1, 0x02, //0x00002b5b addq $2, %r9 + 0x48, 0x83, 0xc7, 0xfe, //0x00002b5f addq $-2, %rdi + 0x4c, 0x89, 0xe0, //0x00002b63 movq %r12, %rax + 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x00002b66 leaq $64(%rsp), %r12 + 0x48, 0x85, 0xff, //0x00002b6b testq %rdi, %rdi + 0x0f, 0x84, 0x9a, 0xfd, 0xff, 0xff, //0x00002b6e je LBB0_543 + //0x00002b74 LBB0_563 + 0x8a, 0x00, //0x00002b74 movb (%rax), %al + 0x41, 0x88, 0x01, //0x00002b76 movb %al, (%r9) + 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x00002b79 leaq $64(%rsp), %r12 + 0xe9, 0x8b, 0xfd, 0xff, 0xff, //0x00002b7e jmp LBB0_543 + //0x00002b83 LBB0_564 + 0x4c, 0x89, 0x7c, 0x24, 0x28, //0x00002b83 movq %r15, $40(%rsp) + 0x4d, 0x8b, 0x55, 0x00, //0x00002b88 movq (%r13), %r10 + 0x4d, 0x29, 0xf2, //0x00002b8c subq %r14, %r10 + 0x4d, 0x01, 0xf4, //0x00002b8f addq %r14, %r12 + 0x45, 0x31, 0xdb, //0x00002b92 xorl %r11d, %r11d + 0x45, 0x31, 0xf6, //0x00002b95 xorl %r14d, %r14d + 0x45, 0x31, 0xff, //0x00002b98 xorl %r15d, %r15d + 0x31, 0xdb, //0x00002b9b xorl %ebx, %ebx + 0x49, 0x83, 0xfa, 0x40, //0x00002b9d cmpq $64, %r10 + 0x0f, 0x8c, 0x52, 0x01, 0x00, 0x00, //0x00002ba1 jl LBB0_573 + //0x00002ba7 LBB0_567 + 0xc4, 0x41, 0x7e, 0x6f, 0x3c, 0x24, //0x00002ba7 vmovdqu (%r12), %ymm15 + 0xc4, 0x41, 0x7e, 0x6f, 0x74, 0x24, 0x20, //0x00002bad vmovdqu $32(%r12), %ymm14 + 0xc5, 0x85, 0x74, 0xf2, //0x00002bb4 vpcmpeqb %ymm2, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xc6, //0x00002bb8 vpmovmskb %ymm6, %eax + 0xc5, 0x8d, 0x74, 0xf2, //0x00002bbc vpcmpeqb %ymm2, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xce, //0x00002bc0 vpmovmskb %ymm6, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00002bc4 shlq $32, %rcx + 0x48, 0x09, 0xc8, //0x00002bc8 orq %rcx, %rax + 0x48, 0x89, 0xc1, //0x00002bcb movq %rax, %rcx + 0x4c, 0x09, 0xf1, //0x00002bce orq %r14, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00002bd1 jne LBB0_569 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002bd7 movq $-1, %rax + 0x45, 0x31, 0xf6, //0x00002bde xorl %r14d, %r14d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00002be1 jmp LBB0_570 + //0x00002be6 LBB0_569 + 0x4c, 0x89, 0xf1, //0x00002be6 movq %r14, %rcx + 0x48, 0xf7, 0xd1, //0x00002be9 notq %rcx + 0x48, 0x21, 0xc1, //0x00002bec andq %rax, %rcx + 0x48, 0x8d, 0x34, 0x09, //0x00002bef leaq (%rcx,%rcx), %rsi + 0x4c, 0x09, 0xf6, //0x00002bf3 orq %r14, %rsi + 0x48, 0x89, 0xf7, //0x00002bf6 movq %rsi, %rdi + 0x48, 0xf7, 0xd7, //0x00002bf9 notq %rdi + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002bfc movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd0, //0x00002c06 andq %rdx, %rax + 0x48, 0x21, 0xf8, //0x00002c09 andq %rdi, %rax + 0x45, 0x31, 0xf6, //0x00002c0c xorl %r14d, %r14d + 0x48, 0x01, 0xc8, //0x00002c0f addq %rcx, %rax + 0x41, 0x0f, 0x92, 0xc6, //0x00002c12 setb %r14b + 0x48, 0x01, 0xc0, //0x00002c16 addq %rax, %rax + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002c19 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xc8, //0x00002c23 xorq %rcx, %rax + 0x48, 0x21, 0xf0, //0x00002c26 andq %rsi, %rax + 0x48, 0xf7, 0xd0, //0x00002c29 notq %rax + //0x00002c2c LBB0_570 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00002c2c movq $8(%rsp), %r9 + 0xc5, 0x8d, 0x74, 0xf1, //0x00002c31 vpcmpeqb %ymm1, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xce, //0x00002c35 vpmovmskb %ymm6, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00002c39 shlq $32, %rcx + 0xc5, 0x85, 0x74, 0xf1, //0x00002c3d vpcmpeqb %ymm1, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xf6, //0x00002c41 vpmovmskb %ymm6, %esi + 0x48, 0x09, 0xce, //0x00002c45 orq %rcx, %rsi + 0x48, 0x21, 0xc6, //0x00002c48 andq %rax, %rsi + 0xc4, 0xe1, 0xf9, 0x6e, 0xf6, //0x00002c4b vmovq %rsi, %xmm6 + 0xc4, 0xc3, 0x49, 0x44, 0xf1, 0x00, //0x00002c50 vpclmulqdq $0, %xmm9, %xmm6, %xmm6 + 0xc4, 0xe1, 0xf9, 0x7e, 0xf0, //0x00002c56 vmovq %xmm6, %rax + 0x4c, 0x31, 0xd8, //0x00002c5b xorq %r11, %rax + 0xc4, 0xc1, 0x05, 0x74, 0xf4, //0x00002c5e vpcmpeqb %ymm12, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xf6, //0x00002c63 vpmovmskb %ymm6, %esi + 0xc4, 0xc1, 0x0d, 0x74, 0xf4, //0x00002c67 vpcmpeqb %ymm12, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xce, //0x00002c6c vpmovmskb %ymm6, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00002c70 shlq $32, %rcx + 0x48, 0x09, 0xce, //0x00002c74 orq %rcx, %rsi + 0x48, 0x89, 0xc1, //0x00002c77 movq %rax, %rcx + 0x48, 0xf7, 0xd1, //0x00002c7a notq %rcx + 0x48, 0x21, 0xce, //0x00002c7d andq %rcx, %rsi + 0xc4, 0xc1, 0x05, 0x74, 0xf5, //0x00002c80 vpcmpeqb %ymm13, %ymm15, %ymm6 + 0xc5, 0xfd, 0xd7, 0xfe, //0x00002c85 vpmovmskb %ymm6, %edi + 0xc4, 0xc1, 0x0d, 0x74, 0xf5, //0x00002c89 vpcmpeqb %ymm13, %ymm14, %ymm6 + 0xc5, 0xfd, 0xd7, 0xd6, //0x00002c8e vpmovmskb %ymm6, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x00002c92 shlq $32, %rdx + 0x48, 0x09, 0xd7, //0x00002c96 orq %rdx, %rdi + 0x48, 0x21, 0xcf, //0x00002c99 andq %rcx, %rdi + 0x0f, 0x84, 0x36, 0x00, 0x00, 0x00, //0x00002c9c je LBB0_565 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002ca2 .p2align 4, 0x90 + //0x00002cb0 LBB0_571 + 0x48, 0x8d, 0x4f, 0xff, //0x00002cb0 leaq $-1(%rdi), %rcx + 0x48, 0x89, 0xca, //0x00002cb4 movq %rcx, %rdx + 0x48, 0x21, 0xf2, //0x00002cb7 andq %rsi, %rdx + 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x00002cba popcntq %rdx, %rdx + 0x4c, 0x01, 0xfa, //0x00002cbf addq %r15, %rdx + 0x48, 0x39, 0xda, //0x00002cc2 cmpq %rbx, %rdx + 0x0f, 0x86, 0x58, 0x01, 0x00, 0x00, //0x00002cc5 jbe LBB0_588 + 0x48, 0x83, 0xc3, 0x01, //0x00002ccb addq $1, %rbx + 0x48, 0x21, 0xcf, //0x00002ccf andq %rcx, %rdi + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00002cd2 jne LBB0_571 + //0x00002cd8 LBB0_565 + 0x48, 0xc1, 0xf8, 0x3f, //0x00002cd8 sarq $63, %rax + 0xf3, 0x48, 0x0f, 0xb8, 0xce, //0x00002cdc popcntq %rsi, %rcx + 0x49, 0x01, 0xcf, //0x00002ce1 addq %rcx, %r15 + 0x49, 0x83, 0xc4, 0x40, //0x00002ce4 addq $64, %r12 + 0x49, 0x83, 0xc2, 0xc0, //0x00002ce8 addq $-64, %r10 + 0x49, 0x89, 0xc3, //0x00002cec movq %rax, %r11 + 0x49, 0x83, 0xfa, 0x40, //0x00002cef cmpq $64, %r10 + 0x0f, 0x8d, 0xae, 0xfe, 0xff, 0xff, //0x00002cf3 jge LBB0_567 + //0x00002cf9 LBB0_573 + 0x4d, 0x85, 0xd2, //0x00002cf9 testq %r10, %r10 + 0x0f, 0x8e, 0xcb, 0x02, 0x00, 0x00, //0x00002cfc jle LBB0_608 + 0xc5, 0xc9, 0xef, 0xf6, //0x00002d02 vpxor %xmm6, %xmm6, %xmm6 + 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x60, //0x00002d06 vmovdqu %ymm6, $96(%rsp) + 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x00002d0c vmovdqu %ymm6, $64(%rsp) + 0x44, 0x89, 0xe0, //0x00002d12 movl %r12d, %eax + 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00002d15 andl $4095, %eax + 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00002d1a cmpl $4033, %eax + 0x0f, 0x82, 0x82, 0xfe, 0xff, 0xff, //0x00002d1f jb LBB0_567 + 0x49, 0x83, 0xfa, 0x20, //0x00002d25 cmpq $32, %r10 + 0x0f, 0x82, 0x1e, 0x00, 0x00, 0x00, //0x00002d29 jb LBB0_577 + 0xc4, 0xc1, 0x7e, 0x6f, 0x34, 0x24, //0x00002d2f vmovdqu (%r12), %ymm6 + 0xc5, 0xfe, 0x7f, 0x74, 0x24, 0x40, //0x00002d35 vmovdqu %ymm6, $64(%rsp) + 0x49, 0x83, 0xc4, 0x20, //0x00002d3b addq $32, %r12 + 0x49, 0x8d, 0x7a, 0xe0, //0x00002d3f leaq $-32(%r10), %rdi + 0x4c, 0x8d, 0x4c, 0x24, 0x60, //0x00002d43 leaq $96(%rsp), %r9 + 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00002d48 jmp LBB0_578 + //0x00002d4d LBB0_577 + 0x4c, 0x8d, 0x4c, 0x24, 0x40, //0x00002d4d leaq $64(%rsp), %r9 + 0x4c, 0x89, 0xd7, //0x00002d52 movq %r10, %rdi + //0x00002d55 LBB0_578 + 0x48, 0x83, 0xff, 0x10, //0x00002d55 cmpq $16, %rdi + 0x0f, 0x82, 0x5e, 0x00, 0x00, 0x00, //0x00002d59 jb LBB0_579 + 0xc4, 0xc1, 0x7a, 0x6f, 0x34, 0x24, //0x00002d5f vmovdqu (%r12), %xmm6 + 0xc4, 0xc1, 0x7a, 0x7f, 0x31, //0x00002d65 vmovdqu %xmm6, (%r9) + 0x49, 0x83, 0xc4, 0x10, //0x00002d6a addq $16, %r12 + 0x49, 0x83, 0xc1, 0x10, //0x00002d6e addq $16, %r9 + 0x48, 0x83, 0xc7, 0xf0, //0x00002d72 addq $-16, %rdi + 0x48, 0x83, 0xff, 0x08, //0x00002d76 cmpq $8, %rdi + 0x0f, 0x83, 0x47, 0x00, 0x00, 0x00, //0x00002d7a jae LBB0_584 + //0x00002d80 LBB0_580 + 0x48, 0x83, 0xff, 0x04, //0x00002d80 cmpq $4, %rdi + 0x0f, 0x8c, 0x5a, 0x00, 0x00, 0x00, //0x00002d84 jl LBB0_581 + //0x00002d8a LBB0_585 + 0x41, 0x8b, 0x04, 0x24, //0x00002d8a movl (%r12), %eax + 0x41, 0x89, 0x01, //0x00002d8e movl %eax, (%r9) + 0x49, 0x83, 0xc4, 0x04, //0x00002d91 addq $4, %r12 + 0x49, 0x83, 0xc1, 0x04, //0x00002d95 addq $4, %r9 + 0x48, 0x83, 0xc7, 0xfc, //0x00002d99 addq $-4, %rdi + 0x48, 0x83, 0xff, 0x02, //0x00002d9d cmpq $2, %rdi + 0x0f, 0x83, 0x47, 0x00, 0x00, 0x00, //0x00002da1 jae LBB0_586 + //0x00002da7 LBB0_582 + 0x4c, 0x89, 0xe0, //0x00002da7 movq %r12, %rax + 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x00002daa leaq $64(%rsp), %r12 + 0x48, 0x85, 0xff, //0x00002daf testq %rdi, %rdi + 0x0f, 0x85, 0x5c, 0x00, 0x00, 0x00, //0x00002db2 jne LBB0_587 + 0xe9, 0xea, 0xfd, 0xff, 0xff, //0x00002db8 jmp LBB0_567 + //0x00002dbd LBB0_579 + 0x48, 0x83, 0xff, 0x08, //0x00002dbd cmpq $8, %rdi + 0x0f, 0x82, 0xb9, 0xff, 0xff, 0xff, //0x00002dc1 jb LBB0_580 + //0x00002dc7 LBB0_584 + 0x49, 0x8b, 0x04, 0x24, //0x00002dc7 movq (%r12), %rax + 0x49, 0x89, 0x01, //0x00002dcb movq %rax, (%r9) + 0x49, 0x83, 0xc4, 0x08, //0x00002dce addq $8, %r12 + 0x49, 0x83, 0xc1, 0x08, //0x00002dd2 addq $8, %r9 + 0x48, 0x83, 0xc7, 0xf8, //0x00002dd6 addq $-8, %rdi + 0x48, 0x83, 0xff, 0x04, //0x00002dda cmpq $4, %rdi + 0x0f, 0x8d, 0xa6, 0xff, 0xff, 0xff, //0x00002dde jge LBB0_585 + //0x00002de4 LBB0_581 + 0x48, 0x83, 0xff, 0x02, //0x00002de4 cmpq $2, %rdi + 0x0f, 0x82, 0xb9, 0xff, 0xff, 0xff, //0x00002de8 jb LBB0_582 + //0x00002dee LBB0_586 + 0x41, 0x0f, 0xb7, 0x04, 0x24, //0x00002dee movzwl (%r12), %eax + 0x66, 0x41, 0x89, 0x01, //0x00002df3 movw %ax, (%r9) + 0x49, 0x83, 0xc4, 0x02, //0x00002df7 addq $2, %r12 + 0x49, 0x83, 0xc1, 0x02, //0x00002dfb addq $2, %r9 + 0x48, 0x83, 0xc7, 0xfe, //0x00002dff addq $-2, %rdi + 0x4c, 0x89, 0xe0, //0x00002e03 movq %r12, %rax + 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x00002e06 leaq $64(%rsp), %r12 + 0x48, 0x85, 0xff, //0x00002e0b testq %rdi, %rdi + 0x0f, 0x84, 0x93, 0xfd, 0xff, 0xff, //0x00002e0e je LBB0_567 + //0x00002e14 LBB0_587 + 0x8a, 0x00, //0x00002e14 movb (%rax), %al + 0x41, 0x88, 0x01, //0x00002e16 movb %al, (%r9) + 0x4c, 0x8d, 0x64, 0x24, 0x40, //0x00002e19 leaq $64(%rsp), %r12 + 0xe9, 0x84, 0xfd, 0xff, 0xff, //0x00002e1e jmp LBB0_567 + //0x00002e23 LBB0_588 + 0x49, 0x8b, 0x45, 0x00, //0x00002e23 movq (%r13), %rax + 0x48, 0x0f, 0xbc, 0xcf, //0x00002e27 bsfq %rdi, %rcx + 0x4c, 0x29, 0xd1, //0x00002e2b subq %r10, %rcx + 0x4c, 0x8d, 0x34, 0x01, //0x00002e2e leaq (%rcx,%rax), %r14 + 0x49, 0x83, 0xc6, 0x01, //0x00002e32 addq $1, %r14 + 0x4d, 0x89, 0x31, //0x00002e36 movq %r14, (%r9) + 0x49, 0x8b, 0x45, 0x00, //0x00002e39 movq (%r13), %rax + 0x49, 0x39, 0xc6, //0x00002e3d cmpq %rax, %r14 + 0x4c, 0x0f, 0x47, 0xf0, //0x00002e40 cmovaq %rax, %r14 + //0x00002e44 LBB0_589 + 0x4d, 0x89, 0x31, //0x00002e44 movq %r14, (%r9) + //0x00002e47 LBB0_590 + 0x4c, 0x8b, 0x7c, 0x24, 0x28, //0x00002e47 movq $40(%rsp), %r15 + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002e4c movabsq $4294977024, %r10 + 0xe9, 0xbb, 0xf8, 0xff, 0xff, //0x00002e56 jmp LBB0_505 + //0x00002e5b LBB0_595 + 0x66, 0x0f, 0xbc, 0xd6, //0x00002e5b bsfw %si, %dx + 0x0f, 0xb7, 0xf2, //0x00002e5f movzwl %dx, %esi + 0x48, 0x89, 0xf2, //0x00002e62 movq %rsi, %rdx + 0x48, 0x29, 0xc2, //0x00002e65 subq %rax, %rdx + 0x49, 0x89, 0x11, //0x00002e68 movq %rdx, (%r9) + 0x48, 0x85, 0xd2, //0x00002e6b testq %rdx, %rdx + 0x0f, 0x8e, 0x48, 0x00, 0x00, 0x00, //0x00002e6e jle LBB0_604 + 0x48, 0x01, 0xf1, //0x00002e74 addq %rsi, %rcx + 0x48, 0x01, 0xf7, //0x00002e77 addq %rsi, %rdi + 0x48, 0x01, 0xf3, //0x00002e7a addq %rsi, %rbx + //0x00002e7d LBB0_597 + 0x0f, 0xb6, 0x03, //0x00002e7d movzbl (%rbx), %eax + 0x48, 0x83, 0xf8, 0x20, //0x00002e80 cmpq $32, %rax + 0x0f, 0x87, 0x32, 0x00, 0x00, 0x00, //0x00002e84 ja LBB0_604 + 0x49, 0x0f, 0xa3, 0xc2, //0x00002e8a btq %rax, %r10 + 0x0f, 0x83, 0x28, 0x00, 0x00, 0x00, //0x00002e8e jae LBB0_604 + 0x49, 0x89, 0x39, //0x00002e94 movq %rdi, (%r9) + 0x48, 0x83, 0xc1, 0xff, //0x00002e97 addq $-1, %rcx + 0x48, 0x83, 0xc7, 0xff, //0x00002e9b addq $-1, %rdi + 0x48, 0x83, 0xc3, 0xff, //0x00002e9f addq $-1, %rbx + 0x48, 0x83, 0xc2, 0xff, //0x00002ea3 addq $-1, %rdx + 0x41, 0xbe, 0x00, 0x00, 0x00, 0x00, //0x00002ea7 movl $0, %r14d + 0x48, 0x83, 0xf9, 0x01, //0x00002ead cmpq $1, %rcx + 0x0f, 0x8f, 0xc6, 0xff, 0xff, 0xff, //0x00002eb1 jg LBB0_597 + 0xe9, 0x5a, 0xf8, 0xff, 0xff, //0x00002eb7 jmp LBB0_505 + //0x00002ebc LBB0_604 + 0x49, 0x89, 0xd6, //0x00002ebc movq %rdx, %r14 + 0xe9, 0x52, 0xf8, 0xff, 0xff, //0x00002ebf jmp LBB0_505 + //0x00002ec4 LBB0_600 + 0x4c, 0x29, 0xe2, //0x00002ec4 subq %r12, %rdx + 0x48, 0x01, 0xf2, //0x00002ec7 addq %rsi, %rdx + 0x48, 0x39, 0xca, //0x00002eca cmpq %rcx, %rdx + 0x0f, 0x82, 0xee, 0xf9, 0xff, 0xff, //0x00002ecd jb LBB0_535 + 0xe9, 0x33, 0x20, 0x00, 0x00, //0x00002ed3 jmp LBB0_1048 + //0x00002ed8 LBB0_601 + 0x4c, 0x29, 0xe1, //0x00002ed8 subq %r12, %rcx + 0x48, 0x01, 0xf1, //0x00002edb addq %rsi, %rcx + 0x48, 0x39, 0xd1, //0x00002ede cmpq %rdx, %rcx + 0x0f, 0x82, 0x1a, 0xf5, 0xff, 0xff, //0x00002ee1 jb LBB0_464 + 0xe9, 0x2a, 0xf8, 0xff, 0xff, //0x00002ee7 jmp LBB0_505 + //0x00002eec LBB0_499 + 0x4d, 0x85, 0xff, //0x00002eec testq %r15, %r15 + 0x0f, 0x85, 0xe6, 0x00, 0x00, 0x00, //0x00002eef jne LBB0_609 + 0x4b, 0x8d, 0x04, 0x2a, //0x00002ef5 leaq (%r10,%r13), %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002ef9 addq $1, %rax + 0x49, 0xf7, 0xd5, //0x00002efd notq %r13 + 0x4d, 0x01, 0xcd, //0x00002f00 addq %r9, %r13 + //0x00002f03 LBB0_501 + 0x4c, 0x8b, 0x7c, 0x24, 0x28, //0x00002f03 movq $40(%rsp), %r15 + 0x4d, 0x85, 0xed, //0x00002f08 testq %r13, %r13 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00002f0b movq $8(%rsp), %r9 + 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f10 movabsq $4294977024, %r10 + 0x0f, 0x8f, 0x1d, 0x00, 0x00, 0x00, //0x00002f1a jg LBB0_592 + 0xe9, 0x45, 0x00, 0x00, 0x00, //0x00002f20 jmp LBB0_502 + //0x00002f25 LBB0_591 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002f25 movq $-2, %rcx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002f2c movl $2, %esi + 0x48, 0x01, 0xf0, //0x00002f31 addq %rsi, %rax + 0x49, 0x01, 0xcd, //0x00002f34 addq %rcx, %r13 + 0x0f, 0x8e, 0x2d, 0x00, 0x00, 0x00, //0x00002f37 jle LBB0_502 + //0x00002f3d LBB0_592 + 0x0f, 0xb6, 0x08, //0x00002f3d movzbl (%rax), %ecx + 0x80, 0xf9, 0x5c, //0x00002f40 cmpb $92, %cl + 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x00002f43 je LBB0_591 + 0x80, 0xf9, 0x22, //0x00002f49 cmpb $34, %cl + 0x0f, 0x84, 0x22, 0x00, 0x00, 0x00, //0x00002f4c je LBB0_602 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002f52 movq $-1, %rcx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002f59 movl $1, %esi + 0x48, 0x01, 0xf0, //0x00002f5e addq %rsi, %rax + 0x49, 0x01, 0xcd, //0x00002f61 addq %rcx, %r13 + 0x0f, 0x8f, 0xd3, 0xff, 0xff, 0xff, //0x00002f64 jg LBB0_592 + //0x00002f6a LBB0_502 + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x00002f6a movq $24(%rsp), %r13 + 0xe9, 0xa2, 0xf7, 0xff, 0xff, //0x00002f6f jmp LBB0_505 + //0x00002f74 LBB0_602 + 0x4c, 0x29, 0xe0, //0x00002f74 subq %r12, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002f77 addq $1, %rax + 0x49, 0x89, 0x01, //0x00002f7b movq %rax, (%r9) + 0x49, 0x89, 0xc6, //0x00002f7e movq %rax, %r14 + 0x4c, 0x8b, 0x6c, 0x24, 0x18, //0x00002f81 movq $24(%rsp), %r13 + 0xe9, 0x8b, 0xf7, 0xff, 0xff, //0x00002f86 jmp LBB0_505 + //0x00002f8b LBB0_603 + 0x4c, 0x01, 0xe2, //0x00002f8b addq %r12, %rdx + 0x48, 0x85, 0xc0, //0x00002f8e testq %rax, %rax + 0x0f, 0x85, 0xd1, 0xf8, 0xff, 0xff, //0x00002f91 jne LBB0_528 + 0xe9, 0xfb, 0xf8, 0xff, 0xff, //0x00002f97 jmp LBB0_533 + //0x00002f9c LBB0_605 + 0x4c, 0x01, 0xe1, //0x00002f9c addq %r12, %rcx + 0x48, 0x85, 0xc0, //0x00002f9f testq %rax, %rax + 0x0f, 0x85, 0x00, 0xf4, 0xff, 0xff, //0x00002fa2 jne LBB0_457 + 0xe9, 0x28, 0xf4, 0xff, 0xff, //0x00002fa8 jmp LBB0_462 + //0x00002fad LBB0_606 + 0x4d, 0x01, 0xe6, //0x00002fad addq %r12, %r14 + 0x48, 0x83, 0xfa, 0x10, //0x00002fb0 cmpq $16, %rdx + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00002fb4 movq $8(%rsp), %r9 + 0x0f, 0x83, 0xf4, 0xf4, 0xff, 0xff, //0x00002fb9 jae LBB0_471 + 0xe9, 0x57, 0xf5, 0xff, 0xff, //0x00002fbf jmp LBB0_474 + //0x00002fc4 LBB0_607 + 0x4b, 0x8d, 0x04, 0x34, //0x00002fc4 leaq (%r12,%r14), %rax + 0xe9, 0x36, 0xff, 0xff, 0xff, //0x00002fc8 jmp LBB0_501 + //0x00002fcd LBB0_608 + 0x4d, 0x8b, 0x75, 0x00, //0x00002fcd movq (%r13), %r14 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00002fd1 movq $8(%rsp), %r9 + 0xe9, 0x69, 0xfe, 0xff, 0xff, //0x00002fd6 jmp LBB0_589 + //0x00002fdb LBB0_609 + 0x49, 0x8d, 0x41, 0xff, //0x00002fdb leaq $-1(%r9), %rax + 0x4c, 0x39, 0xe8, //0x00002fdf cmpq %r13, %rax + 0x0f, 0x85, 0x0a, 0x00, 0x00, 0x00, //0x00002fe2 jne LBB0_611 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00002fe8 movq $8(%rsp), %r9 + 0xe9, 0xfd, 0xf6, 0xff, 0xff, //0x00002fed jmp LBB0_496 + //0x00002ff2 LBB0_611 + 0x4b, 0x8d, 0x04, 0x2a, //0x00002ff2 leaq (%r10,%r13), %rax + 0x48, 0x83, 0xc0, 0x02, //0x00002ff6 addq $2, %rax + 0x4d, 0x29, 0xe9, //0x00002ffa subq %r13, %r9 + 0x49, 0x83, 0xc1, 0xfe, //0x00002ffd addq $-2, %r9 + 0x4d, 0x89, 0xcd, //0x00003001 movq %r9, %r13 + 0xe9, 0xfa, 0xfe, 0xff, 0xff, //0x00003004 jmp LBB0_501 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003009 .p2align 4, 0x90 + //0x00003010 LBB0_537 + 0x49, 0x83, 0xc7, 0x10, //0x00003010 addq $16, %r15 + 0x4c, 0x89, 0xf0, //0x00003014 movq %r14, %rax + 0x48, 0x8b, 0x8c, 0x24, 0xa0, 0x00, 0x00, 0x00, //0x00003017 movq $160(%rsp), %rcx + 0x49, 0x39, 0xcf, //0x0000301f cmpq %rcx, %r15 + 0x0f, 0x85, 0x11, 0xd3, 0xff, 0xff, //0x00003022 jne LBB0_2 + 0xe9, 0x4d, 0x00, 0x00, 0x00, //0x00003028 jmp LBB0_538 + //0x0000302d LBB0_33 + 0x4c, 0x29, 0xe2, //0x0000302d subq %r12, %rdx + 0x48, 0x01, 0xf2, //0x00003030 addq %rsi, %rdx + 0x48, 0x39, 0xca, //0x00003033 cmpq %rcx, %rdx + 0x0f, 0x82, 0xc5, 0xd4, 0xff, 0xff, //0x00003036 jb LBB0_32 + 0xe9, 0x72, 0xd4, 0xff, 0xff, //0x0000303c jmp LBB0_34 + //0x00003041 LBB0_612 + 0x4c, 0x29, 0xe2, //0x00003041 subq %r12, %rdx + 0x48, 0x01, 0xf2, //0x00003044 addq %rsi, %rdx + 0x48, 0x39, 0xca, //0x00003047 cmpq %rcx, %rdx + 0x0f, 0x82, 0xdf, 0xf1, 0xff, 0xff, //0x0000304a jb LBB0_432 + 0xe9, 0xec, 0xf1, 0xff, 0xff, //0x00003050 jmp LBB0_433 + //0x00003055 LBB0_613 + 0x4d, 0x01, 0xe6, //0x00003055 addq %r12, %r14 + 0x4c, 0x89, 0xf2, //0x00003058 movq %r14, %rdx + 0x48, 0x85, 0xff, //0x0000305b testq %rdi, %rdi + 0x0f, 0x85, 0x16, 0xd4, 0xff, 0xff, //0x0000305e jne LBB0_25 + 0xe9, 0x3e, 0xd4, 0xff, 0xff, //0x00003064 jmp LBB0_30 + //0x00003069 LBB0_614 + 0x4c, 0x01, 0xe2, //0x00003069 addq %r12, %rdx + 0x48, 0x85, 0xc0, //0x0000306c testq %rax, %rax + 0x0f, 0x85, 0x63, 0xf1, 0xff, 0xff, //0x0000306f jne LBB0_424 + 0xe9, 0x8b, 0xf1, 0xff, 0xff, //0x00003075 jmp LBB0_429 + //0x0000307a LBB0_538 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x0000307a movq $16(%rsp), %r12 + 0x4d, 0x85, 0xe4, //0x0000307f testq %r12, %r12 + 0x0f, 0x84, 0x7e, 0x00, 0x00, 0x00, //0x00003082 je LBB0_615 + 0x4c, 0x89, 0x6c, 0x24, 0x18, //0x00003088 movq %r13, $24(%rsp) + 0xc5, 0xfa, 0x6f, 0x05, 0x7b, 0xd1, 0xff, 0xff, //0x0000308d vmovdqu $-11909(%rip), %xmm0 /* LCPI0_12+0(%rip) */ + 0xc4, 0xc1, 0x7a, 0x7f, 0x04, 0x24, //0x00003095 vmovdqu %xmm0, (%r12) + 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000309b movq $-1, %r10 + 0xc5, 0xfe, 0x6f, 0x2d, 0x56, 0xcf, 0xff, 0xff, //0x000030a2 vmovdqu $-12458(%rip), %ymm5 /* LCPI0_0+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0xce, 0xcf, 0xff, 0xff, //0x000030aa vmovdqu $-12338(%rip), %ymm6 /* LCPI0_7+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0xe6, 0xcf, 0xff, 0xff, //0x000030b2 vmovdqu $-12314(%rip), %ymm7 /* LCPI0_8+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x5e, 0xd0, 0xff, 0xff, //0x000030ba vmovdqu $-12194(%rip), %ymm8 /* LCPI0_13+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x0d, 0x76, 0xd0, 0xff, 0xff, //0x000030c2 vmovdqu $-12170(%rip), %ymm9 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x15, 0x8e, 0xd0, 0xff, 0xff, //0x000030ca vmovdqu $-12146(%rip), %ymm10 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0xa6, 0xd0, 0xff, 0xff, //0x000030d2 vmovdqu $-12122(%rip), %ymm11 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x5e, 0xcf, 0xff, 0xff, //0x000030da vmovdqu $-12450(%rip), %ymm12 /* LCPI0_2+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0xb6, 0xd0, 0xff, 0xff, //0x000030e2 vmovdqu $-12106(%rip), %ymm13 /* LCPI0_17+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0xce, 0xd0, 0xff, 0xff, //0x000030ea vmovdqu $-12082(%rip), %ymm14 /* LCPI0_18+0(%rip) */ + 0xc5, 0x7a, 0x6f, 0x3d, 0x26, 0xd1, 0xff, 0xff, //0x000030f2 vmovdqu $-11994(%rip), %xmm15 /* LCPI0_19+0(%rip) */ + 0x4c, 0x8d, 0x35, 0x77, 0x2c, 0x00, 0x00, //0x000030fa leaq $11383(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0xe9, 0x7a, 0x02, 0x00, 0x00, //0x00003101 jmp LBB0_676 + //0x00003106 LBB0_615 + 0x4d, 0x89, 0xef, //0x00003106 movq %r13, %r15 + 0x48, 0x8b, 0x84, 0x24, 0x90, 0x00, 0x00, 0x00, //0x00003109 movq $144(%rsp), %rax + 0x4c, 0x8b, 0x18, //0x00003111 movq (%rax), %r11 + 0x48, 0x8b, 0x58, 0x08, //0x00003114 movq $8(%rax), %rbx + 0x49, 0x8b, 0x39, //0x00003118 movq (%r9), %rdi + 0x48, 0x39, 0xdf, //0x0000311b cmpq %rbx, %rdi + 0x0f, 0x83, 0x26, 0x00, 0x00, 0x00, //0x0000311e jae LBB0_620 + 0x41, 0x8a, 0x04, 0x3b, //0x00003124 movb (%r11,%rdi), %al + 0x3c, 0x0d, //0x00003128 cmpb $13, %al + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x0000312a je LBB0_620 + 0x3c, 0x20, //0x00003130 cmpb $32, %al + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003132 je LBB0_620 + 0x04, 0xf7, //0x00003138 addb $-9, %al + 0x3c, 0x01, //0x0000313a cmpb $1, %al + 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x0000313c jbe LBB0_620 + 0x48, 0x89, 0xf8, //0x00003142 movq %rdi, %rax + 0xe9, 0x58, 0x1c, 0x00, 0x00, //0x00003145 jmp LBB0_652 + //0x0000314a LBB0_620 + 0x48, 0x8d, 0x47, 0x01, //0x0000314a leaq $1(%rdi), %rax + 0x48, 0x39, 0xd8, //0x0000314e cmpq %rbx, %rax + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x00003151 jae LBB0_624 + 0x41, 0x8a, 0x0c, 0x03, //0x00003157 movb (%r11,%rax), %cl + 0x80, 0xf9, 0x0d, //0x0000315b cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x0000315e je LBB0_624 + 0x80, 0xf9, 0x20, //0x00003164 cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x00003167 je LBB0_624 + 0x80, 0xc1, 0xf7, //0x0000316d addb $-9, %cl + 0x80, 0xf9, 0x01, //0x00003170 cmpb $1, %cl + 0x0f, 0x87, 0x29, 0x1c, 0x00, 0x00, //0x00003173 ja LBB0_652 + //0x00003179 LBB0_624 + 0x48, 0x8d, 0x47, 0x02, //0x00003179 leaq $2(%rdi), %rax + 0x48, 0x39, 0xd8, //0x0000317d cmpq %rbx, %rax + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x00003180 jae LBB0_628 + 0x41, 0x8a, 0x0c, 0x03, //0x00003186 movb (%r11,%rax), %cl + 0x80, 0xf9, 0x0d, //0x0000318a cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x0000318d je LBB0_628 + 0x80, 0xf9, 0x20, //0x00003193 cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x00003196 je LBB0_628 + 0x80, 0xc1, 0xf7, //0x0000319c addb $-9, %cl + 0x80, 0xf9, 0x01, //0x0000319f cmpb $1, %cl + 0x0f, 0x87, 0xfa, 0x1b, 0x00, 0x00, //0x000031a2 ja LBB0_652 + //0x000031a8 LBB0_628 + 0x48, 0x8d, 0x47, 0x03, //0x000031a8 leaq $3(%rdi), %rax + 0x48, 0x39, 0xd8, //0x000031ac cmpq %rbx, %rax + 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x000031af jae LBB0_632 + 0x41, 0x8a, 0x0c, 0x03, //0x000031b5 movb (%r11,%rax), %cl + 0x80, 0xf9, 0x0d, //0x000031b9 cmpb $13, %cl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000031bc je LBB0_632 + 0x80, 0xf9, 0x20, //0x000031c2 cmpb $32, %cl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000031c5 je LBB0_632 + 0x80, 0xc1, 0xf7, //0x000031cb addb $-9, %cl + 0x80, 0xf9, 0x01, //0x000031ce cmpb $1, %cl + 0x0f, 0x87, 0xcb, 0x1b, 0x00, 0x00, //0x000031d1 ja LBB0_652 + //0x000031d7 LBB0_632 + 0x48, 0x8d, 0x47, 0x04, //0x000031d7 leaq $4(%rdi), %rax + 0x48, 0x89, 0xda, //0x000031db movq %rbx, %rdx + 0x48, 0x29, 0xc2, //0x000031de subq %rax, %rdx + 0x0f, 0x86, 0x94, 0x1b, 0x00, 0x00, //0x000031e1 jbe LBB0_650 + 0x48, 0x83, 0xfa, 0x20, //0x000031e7 cmpq $32, %rdx + 0x0f, 0x82, 0x00, 0x27, 0x00, 0x00, //0x000031eb jb LBB0_1152 + 0x48, 0xc7, 0xc2, 0xfc, 0xff, 0xff, 0xff, //0x000031f1 movq $-4, %rdx + 0x48, 0x29, 0xfa, //0x000031f8 subq %rdi, %rdx + 0xc5, 0xfe, 0x6f, 0x05, 0xfd, 0xcd, 0xff, 0xff, //0x000031fb vmovdqu $-12803(%rip), %ymm0 /* LCPI0_0+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003203 .p2align 4, 0x90 + //0x00003210 LBB0_635 + 0xc4, 0xc1, 0x7e, 0x6f, 0x0c, 0x03, //0x00003210 vmovdqu (%r11,%rax), %ymm1 + 0xc4, 0xe2, 0x7d, 0x00, 0xd1, //0x00003216 vpshufb %ymm1, %ymm0, %ymm2 + 0xc5, 0xf5, 0x74, 0xca, //0x0000321b vpcmpeqb %ymm2, %ymm1, %ymm1 + 0xc5, 0xfd, 0xd7, 0xc9, //0x0000321f vpmovmskb %ymm1, %ecx + 0x83, 0xf9, 0xff, //0x00003223 cmpl $-1, %ecx + 0x0f, 0x85, 0x5e, 0x1b, 0x00, 0x00, //0x00003226 jne LBB0_651 + 0x48, 0x83, 0xc0, 0x20, //0x0000322c addq $32, %rax + 0x48, 0x8d, 0x0c, 0x13, //0x00003230 leaq (%rbx,%rdx), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00003234 addq $-32, %rcx + 0x48, 0x83, 0xc2, 0xe0, //0x00003238 addq $-32, %rdx + 0x48, 0x83, 0xf9, 0x1f, //0x0000323c cmpq $31, %rcx + 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00003240 ja LBB0_635 + 0x4c, 0x89, 0xd8, //0x00003246 movq %r11, %rax + 0x48, 0x29, 0xd0, //0x00003249 subq %rdx, %rax + 0x48, 0x01, 0xda, //0x0000324c addq %rbx, %rdx + 0x48, 0x85, 0xd2, //0x0000324f testq %rdx, %rdx + 0x0f, 0x84, 0x37, 0x00, 0x00, 0x00, //0x00003252 je LBB0_643 + //0x00003258 LBB0_638 + 0x4c, 0x8d, 0x04, 0x10, //0x00003258 leaq (%rax,%rdx), %r8 + 0x31, 0xf6, //0x0000325c xorl %esi, %esi + 0x48, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000325e movabsq $4294977024, %rcx + //0x00003268 LBB0_639 + 0x0f, 0xbe, 0x3c, 0x30, //0x00003268 movsbl (%rax,%rsi), %edi + 0x83, 0xff, 0x20, //0x0000326c cmpl $32, %edi + 0x0f, 0x87, 0x3b, 0x26, 0x00, 0x00, //0x0000326f ja LBB0_1149 + 0x48, 0x0f, 0xa3, 0xf9, //0x00003275 btq %rdi, %rcx + 0x0f, 0x83, 0x31, 0x26, 0x00, 0x00, //0x00003279 jae LBB0_1149 + 0x48, 0x83, 0xc6, 0x01, //0x0000327f addq $1, %rsi + 0x48, 0x39, 0xf2, //0x00003283 cmpq %rsi, %rdx + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x00003286 jne LBB0_639 + 0x4c, 0x89, 0xc0, //0x0000328c movq %r8, %rax + //0x0000328f LBB0_643 + 0x4c, 0x29, 0xd8, //0x0000328f subq %r11, %rax + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00003292 movq $-1, %r13 + 0x48, 0x39, 0xd8, //0x00003299 cmpq %rbx, %rax + 0x0f, 0x82, 0x00, 0x1b, 0x00, 0x00, //0x0000329c jb LBB0_652 + 0xe9, 0x72, 0x1c, 0x00, 0x00, //0x000032a2 jmp LBB0_1050 + //0x000032a7 LBB0_644 + 0x3c, 0x5d, //0x000032a7 cmpb $93, %al + 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x000032a9 je LBB0_647 + 0xe9, 0x57, 0x1c, 0x00, 0x00, //0x000032af jmp LBB0_1048 + //0x000032b4 LBB0_1047 + 0x49, 0x89, 0xce, //0x000032b4 movq %rcx, %r14 + 0xe9, 0x4f, 0x1c, 0x00, 0x00, //0x000032b7 jmp LBB0_1048 + //0x000032bc LBB0_645 + 0x4d, 0x89, 0xde, //0x000032bc movq %r11, %r14 + //0x000032bf LBB0_646 + 0x3c, 0x7d, //0x000032bf cmpb $125, %al + 0x0f, 0x85, 0x44, 0x1c, 0x00, 0x00, //0x000032c1 jne LBB0_1048 + //0x000032c7 LBB0_647 + 0x49, 0x83, 0xc6, 0xff, //0x000032c7 addq $-1, %r14 + 0x4d, 0x89, 0x31, //0x000032cb movq %r14, (%r9) + 0x49, 0xc7, 0xc5, 0xdf, 0xff, 0xff, 0xff, //0x000032ce movq $-33, %r13 + 0xe9, 0x3f, 0x1c, 0x00, 0x00, //0x000032d5 jmp LBB0_1050 + //0x000032da LBB0_1053 + 0x49, 0xf7, 0xdb, //0x000032da negq %r11 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x000032dd movq $16(%rsp), %r12 + 0xc5, 0xfe, 0x6f, 0x2d, 0x16, 0xcd, 0xff, 0xff, //0x000032e2 vmovdqu $-13034(%rip), %ymm5 /* LCPI0_0+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x8e, 0xcd, 0xff, 0xff, //0x000032ea vmovdqu $-12914(%rip), %ymm6 /* LCPI0_7+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0xa6, 0xcd, 0xff, 0xff, //0x000032f2 vmovdqu $-12890(%rip), %ymm7 /* LCPI0_8+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x1e, 0xce, 0xff, 0xff, //0x000032fa vmovdqu $-12770(%rip), %ymm8 /* LCPI0_13+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x0d, 0x36, 0xce, 0xff, 0xff, //0x00003302 vmovdqu $-12746(%rip), %ymm9 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x15, 0x4e, 0xce, 0xff, 0xff, //0x0000330a vmovdqu $-12722(%rip), %ymm10 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0x66, 0xce, 0xff, 0xff, //0x00003312 vmovdqu $-12698(%rip), %ymm11 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x1e, 0xcd, 0xff, 0xff, //0x0000331a vmovdqu $-13026(%rip), %ymm12 /* LCPI0_2+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0x76, 0xce, 0xff, 0xff, //0x00003322 vmovdqu $-12682(%rip), %ymm13 /* LCPI0_17+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x8e, 0xce, 0xff, 0xff, //0x0000332a vmovdqu $-12658(%rip), %ymm14 /* LCPI0_18+0(%rip) */ + 0x4d, 0x85, 0xdb, //0x00003332 testq %r11, %r11 + 0x0f, 0x88, 0xba, 0x1c, 0x00, 0x00, //0x00003335 js LBB0_1054 + //0x0000333b LBB0_960 + 0x49, 0x8b, 0x09, //0x0000333b movq (%r9), %rcx + 0x48, 0x83, 0xc1, 0xff, //0x0000333e addq $-1, %rcx + 0x48, 0x8b, 0x44, 0x24, 0x38, //0x00003342 movq $56(%rsp), %rax + //0x00003347 LBB0_673 + 0x4c, 0x01, 0xd9, //0x00003347 addq %r11, %rcx + 0x49, 0x89, 0x09, //0x0000334a movq %rcx, (%r9) + 0x48, 0x85, 0xc0, //0x0000334d testq %rax, %rax + 0x0f, 0x8e, 0xc3, 0x1b, 0x00, 0x00, //0x00003350 jle LBB0_1050 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003356 .p2align 4, 0x90 + //0x00003360 LBB0_674 + 0x49, 0x8b, 0x14, 0x24, //0x00003360 movq (%r12), %rdx + 0x4d, 0x89, 0xd5, //0x00003364 movq %r10, %r13 + 0x48, 0x85, 0xd2, //0x00003367 testq %rdx, %rdx + 0x0f, 0x85, 0x10, 0x00, 0x00, 0x00, //0x0000336a jne LBB0_676 + 0xe9, 0xa4, 0x1b, 0x00, 0x00, //0x00003370 jmp LBB0_1050 + //0x00003375 LBB0_672 + 0x4c, 0x89, 0xe9, //0x00003375 movq %r13, %rcx + 0xe9, 0xca, 0xff, 0xff, 0xff, //0x00003378 jmp LBB0_673 + 0x90, 0x90, 0x90, //0x0000337d .p2align 4, 0x90 + //0x00003380 LBB0_676 + 0x4c, 0x89, 0xd1, //0x00003380 movq %r10, %rcx + 0x48, 0x8b, 0x84, 0x24, 0x90, 0x00, 0x00, 0x00, //0x00003383 movq $144(%rsp), %rax + 0x4c, 0x8b, 0x38, //0x0000338b movq (%rax), %r15 + 0x48, 0x8b, 0x58, 0x08, //0x0000338e movq $8(%rax), %rbx + 0x49, 0x8b, 0x39, //0x00003392 movq (%r9), %rdi + 0x48, 0x39, 0xdf, //0x00003395 cmpq %rbx, %rdi + 0x0f, 0x83, 0x32, 0x00, 0x00, 0x00, //0x00003398 jae LBB0_681 + 0x41, 0x8a, 0x04, 0x3f, //0x0000339e movb (%r15,%rdi), %al + 0x3c, 0x0d, //0x000033a2 cmpb $13, %al + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x000033a4 je LBB0_681 + 0x3c, 0x20, //0x000033aa cmpb $32, %al + 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x000033ac je LBB0_681 + 0x04, 0xf7, //0x000033b2 addb $-9, %al + 0x3c, 0x01, //0x000033b4 cmpb $1, %al + 0x0f, 0x86, 0x14, 0x00, 0x00, 0x00, //0x000033b6 jbe LBB0_681 + 0x49, 0x89, 0xfa, //0x000033bc movq %rdi, %r10 + 0xe9, 0x7e, 0x01, 0x00, 0x00, //0x000033bf jmp LBB0_706 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000033c4 .p2align 4, 0x90 + //0x000033d0 LBB0_681 + 0x4c, 0x8d, 0x57, 0x01, //0x000033d0 leaq $1(%rdi), %r10 + 0x49, 0x39, 0xda, //0x000033d4 cmpq %rbx, %r10 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000033d7 jae LBB0_685 + 0x43, 0x8a, 0x14, 0x17, //0x000033dd movb (%r15,%r10), %dl + 0x80, 0xfa, 0x0d, //0x000033e1 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000033e4 je LBB0_685 + 0x80, 0xfa, 0x20, //0x000033ea cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000033ed je LBB0_685 + 0x80, 0xc2, 0xf7, //0x000033f3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000033f6 cmpb $1, %dl + 0x0f, 0x87, 0x43, 0x01, 0x00, 0x00, //0x000033f9 ja LBB0_706 + 0x90, //0x000033ff .p2align 4, 0x90 + //0x00003400 LBB0_685 + 0x4c, 0x8d, 0x57, 0x02, //0x00003400 leaq $2(%rdi), %r10 + 0x49, 0x39, 0xda, //0x00003404 cmpq %rbx, %r10 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00003407 jae LBB0_689 + 0x43, 0x8a, 0x14, 0x17, //0x0000340d movb (%r15,%r10), %dl + 0x80, 0xfa, 0x0d, //0x00003411 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00003414 je LBB0_689 + 0x80, 0xfa, 0x20, //0x0000341a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000341d je LBB0_689 + 0x80, 0xc2, 0xf7, //0x00003423 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00003426 cmpb $1, %dl + 0x0f, 0x87, 0x13, 0x01, 0x00, 0x00, //0x00003429 ja LBB0_706 + 0x90, //0x0000342f .p2align 4, 0x90 + //0x00003430 LBB0_689 + 0x4c, 0x8d, 0x57, 0x03, //0x00003430 leaq $3(%rdi), %r10 + 0x49, 0x39, 0xda, //0x00003434 cmpq %rbx, %r10 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00003437 jae LBB0_693 + 0x43, 0x8a, 0x14, 0x17, //0x0000343d movb (%r15,%r10), %dl + 0x80, 0xfa, 0x0d, //0x00003441 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00003444 je LBB0_693 + 0x80, 0xfa, 0x20, //0x0000344a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000344d je LBB0_693 + 0x80, 0xc2, 0xf7, //0x00003453 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00003456 cmpb $1, %dl + 0x0f, 0x87, 0xe3, 0x00, 0x00, 0x00, //0x00003459 ja LBB0_706 + 0x90, //0x0000345f .p2align 4, 0x90 + //0x00003460 LBB0_693 + 0x4c, 0x8d, 0x57, 0x04, //0x00003460 leaq $4(%rdi), %r10 + 0x48, 0x89, 0xda, //0x00003464 movq %rbx, %rdx + 0x4c, 0x29, 0xd2, //0x00003467 subq %r10, %rdx + 0x0f, 0x86, 0x28, 0x1b, 0x00, 0x00, //0x0000346a jbe LBB0_1045 + 0x48, 0x83, 0xfa, 0x20, //0x00003470 cmpq $32, %rdx + 0x0f, 0x82, 0x90, 0x12, 0x00, 0x00, //0x00003474 jb LBB0_961 + 0x48, 0xc7, 0xc2, 0xfc, 0xff, 0xff, 0xff, //0x0000347a movq $-4, %rdx + 0x48, 0x29, 0xfa, //0x00003481 subq %rdi, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003484 .p2align 4, 0x90 + //0x00003490 LBB0_696 + 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x17, //0x00003490 vmovdqu (%r15,%r10), %ymm0 + 0xc4, 0xe2, 0x55, 0x00, 0xc8, //0x00003496 vpshufb %ymm0, %ymm5, %ymm1 + 0xc5, 0xfd, 0x74, 0xc1, //0x0000349b vpcmpeqb %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x0000349f vpmovmskb %ymm0, %esi + 0x83, 0xfe, 0xff, //0x000034a3 cmpl $-1, %esi + 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x000034a6 jne LBB0_705 + 0x49, 0x83, 0xc2, 0x20, //0x000034ac addq $32, %r10 + 0x48, 0x8d, 0x34, 0x13, //0x000034b0 leaq (%rbx,%rdx), %rsi + 0x48, 0x83, 0xc6, 0xe0, //0x000034b4 addq $-32, %rsi + 0x48, 0x83, 0xc2, 0xe0, //0x000034b8 addq $-32, %rdx + 0x48, 0x83, 0xfe, 0x1f, //0x000034bc cmpq $31, %rsi + 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x000034c0 ja LBB0_696 + 0x4d, 0x89, 0xfa, //0x000034c6 movq %r15, %r10 + 0x49, 0x29, 0xd2, //0x000034c9 subq %rdx, %r10 + 0x48, 0x01, 0xda, //0x000034cc addq %rbx, %rdx + 0x48, 0x85, 0xd2, //0x000034cf testq %rdx, %rdx + 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x000034d2 je LBB0_704 + //0x000034d8 LBB0_699 + 0x4d, 0x8d, 0x04, 0x12, //0x000034d8 leaq (%r10,%rdx), %r8 + 0x31, 0xf6, //0x000034dc xorl %esi, %esi + 0x90, 0x90, //0x000034de .p2align 4, 0x90 + //0x000034e0 LBB0_700 + 0x41, 0x0f, 0xbe, 0x3c, 0x32, //0x000034e0 movsbl (%r10,%rsi), %edi + 0x83, 0xff, 0x20, //0x000034e5 cmpl $32, %edi + 0x0f, 0x87, 0x0e, 0x11, 0x00, 0x00, //0x000034e8 ja LBB0_950 + 0x48, 0xb8, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000034ee movabsq $4294977024, %rax + 0x48, 0x0f, 0xa3, 0xf8, //0x000034f8 btq %rdi, %rax + 0x0f, 0x83, 0xfa, 0x10, 0x00, 0x00, //0x000034fc jae LBB0_950 + 0x48, 0x83, 0xc6, 0x01, //0x00003502 addq $1, %rsi + 0x48, 0x39, 0xf2, //0x00003506 cmpq %rsi, %rdx + 0x0f, 0x85, 0xd1, 0xff, 0xff, 0xff, //0x00003509 jne LBB0_700 + 0x4d, 0x89, 0xc2, //0x0000350f movq %r8, %r10 + //0x00003512 LBB0_704 + 0x4d, 0x29, 0xfa, //0x00003512 subq %r15, %r10 + 0x49, 0x39, 0xda, //0x00003515 cmpq %rbx, %r10 + 0x0f, 0x82, 0x24, 0x00, 0x00, 0x00, //0x00003518 jb LBB0_706 + 0xe9, 0x78, 0x1a, 0x00, 0x00, //0x0000351e jmp LBB0_1046 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003523 .p2align 4, 0x90 + //0x00003530 LBB0_705 + 0xf7, 0xd6, //0x00003530 notl %esi + 0x44, 0x0f, 0xbc, 0xd6, //0x00003532 bsfl %esi, %r10d + 0x49, 0x29, 0xd2, //0x00003536 subq %rdx, %r10 + 0x49, 0x39, 0xda, //0x00003539 cmpq %rbx, %r10 + 0x0f, 0x83, 0x59, 0x1a, 0x00, 0x00, //0x0000353c jae LBB0_1046 + //0x00003542 LBB0_706 + 0x49, 0x8d, 0x52, 0x01, //0x00003542 leaq $1(%r10), %rdx + 0x49, 0x89, 0x11, //0x00003546 movq %rdx, (%r9) + 0x43, 0x0f, 0xbe, 0x3c, 0x17, //0x00003549 movsbl (%r15,%r10), %edi + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x0000354e movq $-1, %r13 + 0x85, 0xff, //0x00003555 testl %edi, %edi + 0x0f, 0x84, 0xbc, 0x19, 0x00, 0x00, //0x00003557 je LBB0_1050 + 0x49, 0x8b, 0x34, 0x24, //0x0000355d movq (%r12), %rsi + 0x48, 0x8d, 0x56, 0xff, //0x00003561 leaq $-1(%rsi), %rdx + 0x41, 0x8b, 0x1c, 0xf4, //0x00003565 movl (%r12,%rsi,8), %ebx + 0x48, 0x83, 0xf9, 0xff, //0x00003569 cmpq $-1, %rcx + 0x4c, 0x0f, 0x45, 0xd1, //0x0000356d cmovneq %rcx, %r10 + 0x83, 0xc3, 0xff, //0x00003571 addl $-1, %ebx + 0x83, 0xfb, 0x05, //0x00003574 cmpl $5, %ebx + 0x0f, 0x87, 0x99, 0x01, 0x00, 0x00, //0x00003577 ja LBB0_736 + 0x49, 0x63, 0x0c, 0x9e, //0x0000357d movslq (%r14,%rbx,4), %rcx + 0x4c, 0x01, 0xf1, //0x00003581 addq %r14, %rcx + 0xff, 0xe1, //0x00003584 jmpq *%rcx + //0x00003586 LBB0_709 + 0x83, 0xff, 0x2c, //0x00003586 cmpl $44, %edi + 0x0f, 0x84, 0xfb, 0x05, 0x00, 0x00, //0x00003589 je LBB0_798 + 0x83, 0xff, 0x5d, //0x0000358f cmpl $93, %edi + 0x0f, 0x84, 0xdd, 0x05, 0x00, 0x00, //0x00003592 je LBB0_711 + 0xe9, 0x75, 0x19, 0x00, 0x00, //0x00003598 jmp LBB0_1049 + //0x0000359d LBB0_712 + 0x40, 0x80, 0xff, 0x22, //0x0000359d cmpb $34, %dil + 0x0f, 0x85, 0x6b, 0x19, 0x00, 0x00, //0x000035a1 jne LBB0_1049 + 0x49, 0xc7, 0x04, 0xf4, 0x04, 0x00, 0x00, 0x00, //0x000035a7 movq $4, (%r12,%rsi,8) + 0x4d, 0x8b, 0x19, //0x000035af movq (%r9), %r11 + 0x48, 0x8b, 0x44, 0x24, 0x18, //0x000035b2 movq $24(%rsp), %rax + 0x4c, 0x8b, 0x08, //0x000035b7 movq (%rax), %r9 + 0x4c, 0x89, 0xc9, //0x000035ba movq %r9, %rcx + 0x4c, 0x29, 0xd9, //0x000035bd subq %r11, %rcx + 0x0f, 0x84, 0xe2, 0x22, 0x00, 0x00, //0x000035c0 je LBB0_1158 + 0x48, 0x83, 0xf9, 0x40, //0x000035c6 cmpq $64, %rcx + 0x0f, 0x82, 0x0f, 0x12, 0x00, 0x00, //0x000035ca jb LBB0_969 + 0x4c, 0x89, 0xdf, //0x000035d0 movq %r11, %rdi + 0x48, 0xf7, 0xd7, //0x000035d3 notq %rdi + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000035d6 movq $-1, %r8 + 0x4d, 0x89, 0xdd, //0x000035dd movq %r11, %r13 + 0x45, 0x31, 0xf6, //0x000035e0 xorl %r14d, %r14d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000035e3 .p2align 4, 0x90 + //0x000035f0 LBB0_716 + 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x2f, //0x000035f0 vmovdqu (%r15,%r13), %ymm0 + 0xc4, 0x81, 0x7e, 0x6f, 0x4c, 0x2f, 0x20, //0x000035f6 vmovdqu $32(%r15,%r13), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x000035fd vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00003601 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd6, //0x00003605 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x00003609 vpmovmskb %ymm2, %ebx + 0xc5, 0xfd, 0x74, 0xc7, //0x0000360d vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00003611 vpmovmskb %ymm0, %esi + 0xc5, 0xf5, 0x74, 0xc7, //0x00003615 vpcmpeqb %ymm7, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc0, //0x00003619 vpmovmskb %ymm0, %eax + 0x48, 0xc1, 0xe3, 0x20, //0x0000361d shlq $32, %rbx + 0x48, 0x09, 0xda, //0x00003621 orq %rbx, %rdx + 0x48, 0xc1, 0xe0, 0x20, //0x00003624 shlq $32, %rax + 0x48, 0x09, 0xc6, //0x00003628 orq %rax, %rsi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000362b jne LBB0_725 + 0x4d, 0x85, 0xf6, //0x00003631 testq %r14, %r14 + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x00003634 jne LBB0_727 + 0x45, 0x31, 0xf6, //0x0000363a xorl %r14d, %r14d + 0x48, 0x85, 0xd2, //0x0000363d testq %rdx, %rdx + 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x00003640 jne LBB0_728 + //0x00003646 LBB0_719 + 0x48, 0x83, 0xc1, 0xc0, //0x00003646 addq $-64, %rcx + 0x48, 0x83, 0xc7, 0xc0, //0x0000364a addq $-64, %rdi + 0x49, 0x83, 0xc5, 0x40, //0x0000364e addq $64, %r13 + 0x48, 0x83, 0xf9, 0x3f, //0x00003652 cmpq $63, %rcx + 0x0f, 0x87, 0x94, 0xff, 0xff, 0xff, //0x00003656 ja LBB0_716 + 0xe9, 0xfc, 0x0d, 0x00, 0x00, //0x0000365c jmp LBB0_720 + //0x00003661 LBB0_725 + 0x49, 0x83, 0xf8, 0xff, //0x00003661 cmpq $-1, %r8 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00003665 jne LBB0_727 + 0x4c, 0x0f, 0xbc, 0xc6, //0x0000366b bsfq %rsi, %r8 + 0x4d, 0x01, 0xe8, //0x0000366f addq %r13, %r8 + //0x00003672 LBB0_727 + 0x4c, 0x89, 0xf0, //0x00003672 movq %r14, %rax + 0x48, 0xf7, 0xd0, //0x00003675 notq %rax + 0x48, 0x21, 0xf0, //0x00003678 andq %rsi, %rax + 0x4c, 0x8d, 0x24, 0x00, //0x0000367b leaq (%rax,%rax), %r12 + 0x4d, 0x09, 0xf4, //0x0000367f orq %r14, %r12 + 0x4c, 0x89, 0xe3, //0x00003682 movq %r12, %rbx + 0x48, 0xf7, 0xd3, //0x00003685 notq %rbx + 0x48, 0x21, 0xf3, //0x00003688 andq %rsi, %rbx + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000368b movabsq $-6148914691236517206, %rsi + 0x48, 0x21, 0xf3, //0x00003695 andq %rsi, %rbx + 0x45, 0x31, 0xf6, //0x00003698 xorl %r14d, %r14d + 0x48, 0x01, 0xc3, //0x0000369b addq %rax, %rbx + 0x41, 0x0f, 0x92, 0xc6, //0x0000369e setb %r14b + 0x48, 0x01, 0xdb, //0x000036a2 addq %rbx, %rbx + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000036a5 movabsq $6148914691236517205, %rax + 0x48, 0x31, 0xc3, //0x000036af xorq %rax, %rbx + 0x4c, 0x21, 0xe3, //0x000036b2 andq %r12, %rbx + 0x48, 0xf7, 0xd3, //0x000036b5 notq %rbx + 0x48, 0x21, 0xda, //0x000036b8 andq %rbx, %rdx + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x000036bb movq $16(%rsp), %r12 + 0x48, 0x85, 0xd2, //0x000036c0 testq %rdx, %rdx + 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x000036c3 je LBB0_719 + //0x000036c9 LBB0_728 + 0x4c, 0x0f, 0xbc, 0xea, //0x000036c9 bsfq %rdx, %r13 + 0x49, 0x29, 0xfd, //0x000036cd subq %rdi, %r13 + 0x4c, 0x8d, 0x35, 0xa1, 0x26, 0x00, 0x00, //0x000036d0 leaq $9889(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x4d, 0x85, 0xed, //0x000036d7 testq %r13, %r13 + 0x0f, 0x88, 0xd3, 0x18, 0x00, 0x00, //0x000036da js LBB0_860 + //0x000036e0 LBB0_731 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x000036e0 movq $8(%rsp), %r9 + 0x4d, 0x89, 0x29, //0x000036e5 movq %r13, (%r9) + 0x4d, 0x85, 0xdb, //0x000036e8 testq %r11, %r11 + 0x0f, 0x8f, 0x6f, 0xfc, 0xff, 0xff, //0x000036eb jg LBB0_674 + 0xe9, 0xde, 0x18, 0x00, 0x00, //0x000036f1 jmp LBB0_732 + //0x000036f6 LBB0_733 + 0x40, 0x80, 0xff, 0x5d, //0x000036f6 cmpb $93, %dil + 0x0f, 0x84, 0x75, 0x04, 0x00, 0x00, //0x000036fa je LBB0_711 + 0x49, 0xc7, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x00, //0x00003700 movq $1, (%r12,%rsi,8) + 0x83, 0xff, 0x7b, //0x00003708 cmpl $123, %edi + 0x0f, 0x86, 0x12, 0x00, 0x00, 0x00, //0x0000370b jbe LBB0_735 + 0xe9, 0xfc, 0x17, 0x00, 0x00, //0x00003711 jmp LBB0_1049 + //0x00003716 LBB0_736 + 0x49, 0x89, 0x14, 0x24, //0x00003716 movq %rdx, (%r12) + 0x83, 0xff, 0x7b, //0x0000371a cmpl $123, %edi + 0x0f, 0x87, 0xef, 0x17, 0x00, 0x00, //0x0000371d ja LBB0_1049 + //0x00003723 LBB0_735 + 0x89, 0xf8, //0x00003723 movl %edi, %eax + 0x48, 0x8d, 0x0d, 0x64, 0x26, 0x00, 0x00, //0x00003725 leaq $9828(%rip), %rcx /* LJTI0_3+0(%rip) */ + 0x48, 0x63, 0x04, 0x81, //0x0000372c movslq (%rcx,%rax,4), %rax + 0x48, 0x01, 0xc8, //0x00003730 addq %rcx, %rax + 0xff, 0xe0, //0x00003733 jmpq *%rax + //0x00003735 LBB0_743 + 0x48, 0x8b, 0x44, 0x24, 0x18, //0x00003735 movq $24(%rsp), %rax + 0x4c, 0x8b, 0x00, //0x0000373a movq (%rax), %r8 + 0x49, 0x8b, 0x01, //0x0000373d movq (%r9), %rax + 0x4c, 0x8d, 0x68, 0xff, //0x00003740 leaq $-1(%rax), %r13 + 0x4d, 0x29, 0xe8, //0x00003744 subq %r13, %r8 + 0x0f, 0x84, 0x9c, 0x18, 0x00, 0x00, //0x00003747 je LBB0_1052 + 0x49, 0x8d, 0x0c, 0x07, //0x0000374d leaq (%r15,%rax), %rcx + 0x48, 0x83, 0xc1, 0xff, //0x00003751 addq $-1, %rcx + 0x48, 0x89, 0x4c, 0x24, 0x20, //0x00003755 movq %rcx, $32(%rsp) + 0x80, 0x39, 0x30, //0x0000375a cmpb $48, (%rcx) + 0x0f, 0x85, 0x40, 0x00, 0x00, 0x00, //0x0000375d jne LBB0_748 + 0x41, 0xbb, 0x01, 0x00, 0x00, 0x00, //0x00003763 movl $1, %r11d + 0x49, 0x83, 0xf8, 0x01, //0x00003769 cmpq $1, %r8 + 0x0f, 0x84, 0x02, 0xfc, 0xff, 0xff, //0x0000376d je LBB0_672 + 0x41, 0x8a, 0x0c, 0x07, //0x00003773 movb (%r15,%rax), %cl + 0x80, 0xc1, 0xd2, //0x00003777 addb $-46, %cl + 0x80, 0xf9, 0x37, //0x0000377a cmpb $55, %cl + 0x0f, 0x87, 0xf2, 0xfb, 0xff, 0xff, //0x0000377d ja LBB0_672 + 0x48, 0x89, 0xc2, //0x00003783 movq %rax, %rdx + 0x0f, 0xb6, 0xc1, //0x00003786 movzbl %cl, %eax + 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00003789 movabsq $36028797027352577, %rcx + 0x48, 0x0f, 0xa3, 0xc1, //0x00003793 btq %rax, %rcx + 0x48, 0x89, 0xd0, //0x00003797 movq %rdx, %rax + 0x4c, 0x89, 0xe9, //0x0000379a movq %r13, %rcx + 0x0f, 0x83, 0xa4, 0xfb, 0xff, 0xff, //0x0000379d jae LBB0_673 + //0x000037a3 LBB0_748 + 0x48, 0x89, 0x44, 0x24, 0x38, //0x000037a3 movq %rax, $56(%rsp) + 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x000037a8 movq $-1, %r12 + 0x49, 0x83, 0xf8, 0x20, //0x000037af cmpq $32, %r8 + 0x0f, 0x82, 0x43, 0x10, 0x00, 0x00, //0x000037b3 jb LBB0_970 + 0x45, 0x31, 0xdb, //0x000037b9 xorl %r11d, %r11d + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000037bc movq $-1, %rax + 0x48, 0xc7, 0x44, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff, //0x000037c3 movq $-1, $48(%rsp) + 0x90, 0x90, 0x90, 0x90, //0x000037cc .p2align 4, 0x90 + //0x000037d0 LBB0_750 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x000037d0 movq $32(%rsp), %rcx + 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x19, //0x000037d5 vmovdqu (%rcx,%r11), %ymm0 + 0xc4, 0xc1, 0x7d, 0x64, 0xc8, //0x000037db vpcmpgtb %ymm8, %ymm0, %ymm1 + 0xc5, 0xb5, 0x64, 0xd0, //0x000037e0 vpcmpgtb %ymm0, %ymm9, %ymm2 + 0xc5, 0xed, 0xdb, 0xc9, //0x000037e4 vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0xad, 0x74, 0xd0, //0x000037e8 vpcmpeqb %ymm0, %ymm10, %ymm2 + 0xc5, 0xa5, 0x74, 0xd8, //0x000037ec vpcmpeqb %ymm0, %ymm11, %ymm3 + 0xc5, 0xe5, 0xeb, 0xd2, //0x000037f0 vpor %ymm2, %ymm3, %ymm2 + 0xc5, 0x9d, 0xdb, 0xd8, //0x000037f4 vpand %ymm0, %ymm12, %ymm3 + 0xc5, 0x95, 0x74, 0xc0, //0x000037f8 vpcmpeqb %ymm0, %ymm13, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x000037fc vpmovmskb %ymm0, %esi + 0xc5, 0x8d, 0x74, 0xdb, //0x00003800 vpcmpeqb %ymm3, %ymm14, %ymm3 + 0xc5, 0xfd, 0xd7, 0xfb, //0x00003804 vpmovmskb %ymm3, %edi + 0xc5, 0xfd, 0xd7, 0xda, //0x00003808 vpmovmskb %ymm2, %ebx + 0xc5, 0xf5, 0xeb, 0xc0, //0x0000380c vpor %ymm0, %ymm1, %ymm0 + 0xc5, 0xe5, 0xeb, 0xca, //0x00003810 vpor %ymm2, %ymm3, %ymm1 + 0xc5, 0xfd, 0xeb, 0xc1, //0x00003814 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x00003818 vpmovmskb %ymm0, %ecx + 0x48, 0xf7, 0xd1, //0x0000381c notq %rcx + 0x48, 0x0f, 0xbc, 0xc9, //0x0000381f bsfq %rcx, %rcx + 0x83, 0xf9, 0x20, //0x00003823 cmpl $32, %ecx + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00003826 je LBB0_752 + 0xba, 0xff, 0xff, 0xff, 0xff, //0x0000382c movl $-1, %edx + 0xd3, 0xe2, //0x00003831 shll %cl, %edx + 0xf7, 0xd2, //0x00003833 notl %edx + 0x21, 0xd6, //0x00003835 andl %edx, %esi + 0x21, 0xd7, //0x00003837 andl %edx, %edi + 0x21, 0xda, //0x00003839 andl %ebx, %edx + 0x89, 0xd3, //0x0000383b movl %edx, %ebx + //0x0000383d LBB0_752 + 0x8d, 0x56, 0xff, //0x0000383d leal $-1(%rsi), %edx + 0x21, 0xf2, //0x00003840 andl %esi, %edx + 0x0f, 0x85, 0x78, 0x0c, 0x00, 0x00, //0x00003842 jne LBB0_935 + 0x8d, 0x57, 0xff, //0x00003848 leal $-1(%rdi), %edx + 0x21, 0xfa, //0x0000384b andl %edi, %edx + 0x0f, 0x85, 0x6d, 0x0c, 0x00, 0x00, //0x0000384d jne LBB0_935 + 0x8d, 0x53, 0xff, //0x00003853 leal $-1(%rbx), %edx + 0x21, 0xda, //0x00003856 andl %ebx, %edx + 0x0f, 0x85, 0x62, 0x0c, 0x00, 0x00, //0x00003858 jne LBB0_935 + 0x85, 0xf6, //0x0000385e testl %esi, %esi + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00003860 je LBB0_758 + 0x0f, 0xbc, 0xf6, //0x00003866 bsfl %esi, %esi + 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x00003869 cmpq $-1, $48(%rsp) + 0x0f, 0x85, 0x9b, 0x0d, 0x00, 0x00, //0x0000386f jne LBB0_951 + 0x4c, 0x01, 0xde, //0x00003875 addq %r11, %rsi + 0x48, 0x89, 0x74, 0x24, 0x30, //0x00003878 movq %rsi, $48(%rsp) + //0x0000387d LBB0_758 + 0x85, 0xff, //0x0000387d testl %edi, %edi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000387f je LBB0_761 + 0x0f, 0xbc, 0xf7, //0x00003885 bsfl %edi, %esi + 0x48, 0x83, 0xf8, 0xff, //0x00003888 cmpq $-1, %rax + 0x0f, 0x85, 0x7e, 0x0d, 0x00, 0x00, //0x0000388c jne LBB0_951 + 0x4c, 0x01, 0xde, //0x00003892 addq %r11, %rsi + 0x48, 0x89, 0xf0, //0x00003895 movq %rsi, %rax + //0x00003898 LBB0_761 + 0x85, 0xdb, //0x00003898 testl %ebx, %ebx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000389a je LBB0_764 + 0x0f, 0xbc, 0xf3, //0x000038a0 bsfl %ebx, %esi + 0x49, 0x83, 0xfc, 0xff, //0x000038a3 cmpq $-1, %r12 + 0x0f, 0x85, 0x63, 0x0d, 0x00, 0x00, //0x000038a7 jne LBB0_951 + 0x4c, 0x01, 0xde, //0x000038ad addq %r11, %rsi + 0x49, 0x89, 0xf4, //0x000038b0 movq %rsi, %r12 + //0x000038b3 LBB0_764 + 0x83, 0xf9, 0x20, //0x000038b3 cmpl $32, %ecx + 0x0f, 0x85, 0x5c, 0x04, 0x00, 0x00, //0x000038b6 jne LBB0_823 + 0x49, 0x83, 0xc0, 0xe0, //0x000038bc addq $-32, %r8 + 0x49, 0x83, 0xc3, 0x20, //0x000038c0 addq $32, %r11 + 0x49, 0x83, 0xf8, 0x1f, //0x000038c4 cmpq $31, %r8 + 0x0f, 0x87, 0x02, 0xff, 0xff, 0xff, //0x000038c8 ja LBB0_750 + 0xc5, 0xf8, 0x77, //0x000038ce vzeroupper + 0xc5, 0x7a, 0x6f, 0x3d, 0x47, 0xc9, 0xff, 0xff, //0x000038d1 vmovdqu $-14009(%rip), %xmm15 /* LCPI0_19+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0xdf, 0xc8, 0xff, 0xff, //0x000038d9 vmovdqu $-14113(%rip), %ymm14 /* LCPI0_18+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0xb7, 0xc8, 0xff, 0xff, //0x000038e1 vmovdqu $-14153(%rip), %ymm13 /* LCPI0_17+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x4f, 0xc7, 0xff, 0xff, //0x000038e9 vmovdqu $-14513(%rip), %ymm12 /* LCPI0_2+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0x87, 0xc8, 0xff, 0xff, //0x000038f1 vmovdqu $-14201(%rip), %ymm11 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x15, 0x5f, 0xc8, 0xff, 0xff, //0x000038f9 vmovdqu $-14241(%rip), %ymm10 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x0d, 0x37, 0xc8, 0xff, 0xff, //0x00003901 vmovdqu $-14281(%rip), %ymm9 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x0f, 0xc8, 0xff, 0xff, //0x00003909 vmovdqu $-14321(%rip), %ymm8 /* LCPI0_13+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x87, 0xc7, 0xff, 0xff, //0x00003911 vmovdqu $-14457(%rip), %ymm7 /* LCPI0_8+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x5f, 0xc7, 0xff, 0xff, //0x00003919 vmovdqu $-14497(%rip), %ymm6 /* LCPI0_7+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x2d, 0xd7, 0xc6, 0xff, 0xff, //0x00003921 vmovdqu $-14633(%rip), %ymm5 /* LCPI0_0+0(%rip) */ + 0x4c, 0x03, 0x5c, 0x24, 0x20, //0x00003929 addq $32(%rsp), %r11 + 0x49, 0x83, 0xf8, 0x10, //0x0000392e cmpq $16, %r8 + 0x0f, 0x82, 0x41, 0x01, 0x00, 0x00, //0x00003932 jb LBB0_785 + //0x00003938 LBB0_767 + 0x4d, 0x89, 0xde, //0x00003938 movq %r11, %r14 + 0x4c, 0x2b, 0x74, 0x24, 0x38, //0x0000393b subq $56(%rsp), %r14 + 0x4d, 0x29, 0xfe, //0x00003940 subq %r15, %r14 + 0x49, 0x83, 0xc6, 0x01, //0x00003943 addq $1, %r14 + 0x31, 0xdb, //0x00003947 xorl %ebx, %ebx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003949 .p2align 4, 0x90 + //0x00003950 LBB0_768 + 0xc4, 0xc1, 0x7a, 0x6f, 0x04, 0x1b, //0x00003950 vmovdqu (%r11,%rbx), %xmm0 + 0xc4, 0xc1, 0x79, 0x64, 0xcf, //0x00003956 vpcmpgtb %xmm15, %xmm0, %xmm1 + 0xc5, 0xfa, 0x6f, 0x15, 0xcd, 0xc8, 0xff, 0xff, //0x0000395b vmovdqu $-14131(%rip), %xmm2 /* LCPI0_20+0(%rip) */ + 0xc5, 0xe9, 0x64, 0xd0, //0x00003963 vpcmpgtb %xmm0, %xmm2, %xmm2 + 0xc5, 0xf1, 0xdb, 0xca, //0x00003967 vpand %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0x74, 0x15, 0xcd, 0xc8, 0xff, 0xff, //0x0000396b vpcmpeqb $-14131(%rip), %xmm0, %xmm2 /* LCPI0_21+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x1d, 0xd5, 0xc8, 0xff, 0xff, //0x00003973 vpcmpeqb $-14123(%rip), %xmm0, %xmm3 /* LCPI0_22+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xd2, //0x0000397b vpor %xmm2, %xmm3, %xmm2 + 0xc5, 0xf9, 0xdb, 0x1d, 0x69, 0xc8, 0xff, 0xff, //0x0000397f vpand $-14231(%rip), %xmm0, %xmm3 /* LCPI0_5+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0xd1, 0xc8, 0xff, 0xff, //0x00003987 vpcmpeqb $-14127(%rip), %xmm0, %xmm0 /* LCPI0_23+0(%rip) */ + 0xc5, 0xe1, 0x74, 0x1d, 0xd9, 0xc8, 0xff, 0xff, //0x0000398f vpcmpeqb $-14119(%rip), %xmm3, %xmm3 /* LCPI0_24+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xe0, //0x00003997 vpor %xmm0, %xmm3, %xmm4 + 0xc5, 0xe9, 0xeb, 0xc9, //0x0000399b vpor %xmm1, %xmm2, %xmm1 + 0xc5, 0xd9, 0xeb, 0xc9, //0x0000399f vpor %xmm1, %xmm4, %xmm1 + 0xc5, 0xf9, 0xd7, 0xf0, //0x000039a3 vpmovmskb %xmm0, %esi + 0xc5, 0x79, 0xd7, 0xcb, //0x000039a7 vpmovmskb %xmm3, %r9d + 0xc5, 0xf9, 0xd7, 0xfa, //0x000039ab vpmovmskb %xmm2, %edi + 0xc5, 0xf9, 0xd7, 0xc9, //0x000039af vpmovmskb %xmm1, %ecx + 0xf7, 0xd1, //0x000039b3 notl %ecx + 0x0f, 0xbc, 0xc9, //0x000039b5 bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x000039b8 cmpl $16, %ecx + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000039bb je LBB0_770 + 0xba, 0xff, 0xff, 0xff, 0xff, //0x000039c1 movl $-1, %edx + 0xd3, 0xe2, //0x000039c6 shll %cl, %edx + 0xf7, 0xd2, //0x000039c8 notl %edx + 0x21, 0xd6, //0x000039ca andl %edx, %esi + 0x41, 0x21, 0xd1, //0x000039cc andl %edx, %r9d + 0x21, 0xfa, //0x000039cf andl %edi, %edx + 0x89, 0xd7, //0x000039d1 movl %edx, %edi + //0x000039d3 LBB0_770 + 0x8d, 0x56, 0xff, //0x000039d3 leal $-1(%rsi), %edx + 0x21, 0xf2, //0x000039d6 andl %esi, %edx + 0x0f, 0x85, 0xd7, 0x0c, 0x00, 0x00, //0x000039d8 jne LBB0_954 + 0x41, 0x8d, 0x51, 0xff, //0x000039de leal $-1(%r9), %edx + 0x44, 0x21, 0xca, //0x000039e2 andl %r9d, %edx + 0x0f, 0x85, 0xca, 0x0c, 0x00, 0x00, //0x000039e5 jne LBB0_954 + 0x8d, 0x57, 0xff, //0x000039eb leal $-1(%rdi), %edx + 0x21, 0xfa, //0x000039ee andl %edi, %edx + 0x0f, 0x85, 0xbf, 0x0c, 0x00, 0x00, //0x000039f0 jne LBB0_954 + 0x85, 0xf6, //0x000039f6 testl %esi, %esi + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x000039f8 je LBB0_776 + 0x0f, 0xbc, 0xf6, //0x000039fe bsfl %esi, %esi + 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x00003a01 cmpq $-1, $48(%rsp) + 0x0f, 0x85, 0xc7, 0x0c, 0x00, 0x00, //0x00003a07 jne LBB0_957 + 0x4c, 0x01, 0xf6, //0x00003a0d addq %r14, %rsi + 0x48, 0x01, 0xde, //0x00003a10 addq %rbx, %rsi + 0x48, 0x89, 0x74, 0x24, 0x30, //0x00003a13 movq %rsi, $48(%rsp) + //0x00003a18 LBB0_776 + 0x45, 0x85, 0xc9, //0x00003a18 testl %r9d, %r9d + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00003a1b je LBB0_779 + 0x41, 0x0f, 0xbc, 0xf1, //0x00003a21 bsfl %r9d, %esi + 0x48, 0x83, 0xf8, 0xff, //0x00003a25 cmpq $-1, %rax + 0x0f, 0x85, 0xa5, 0x0c, 0x00, 0x00, //0x00003a29 jne LBB0_957 + 0x4c, 0x01, 0xf6, //0x00003a2f addq %r14, %rsi + 0x48, 0x01, 0xde, //0x00003a32 addq %rbx, %rsi + 0x48, 0x89, 0xf0, //0x00003a35 movq %rsi, %rax + //0x00003a38 LBB0_779 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00003a38 movq $8(%rsp), %r9 + 0x85, 0xff, //0x00003a3d testl %edi, %edi + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00003a3f je LBB0_782 + 0x0f, 0xbc, 0xf7, //0x00003a45 bsfl %edi, %esi + 0x49, 0x83, 0xfc, 0xff, //0x00003a48 cmpq $-1, %r12 + 0x0f, 0x85, 0xee, 0x0c, 0x00, 0x00, //0x00003a4c jne LBB0_964 + 0x4c, 0x01, 0xf6, //0x00003a52 addq %r14, %rsi + 0x48, 0x01, 0xde, //0x00003a55 addq %rbx, %rsi + 0x49, 0x89, 0xf4, //0x00003a58 movq %rsi, %r12 + //0x00003a5b LBB0_782 + 0x83, 0xf9, 0x10, //0x00003a5b cmpl $16, %ecx + 0x0f, 0x85, 0xcf, 0x02, 0x00, 0x00, //0x00003a5e jne LBB0_824 + 0x49, 0x83, 0xc0, 0xf0, //0x00003a64 addq $-16, %r8 + 0x48, 0x83, 0xc3, 0x10, //0x00003a68 addq $16, %rbx + 0x49, 0x83, 0xf8, 0x0f, //0x00003a6c cmpq $15, %r8 + 0x0f, 0x87, 0xda, 0xfe, 0xff, 0xff, //0x00003a70 ja LBB0_768 + 0x49, 0x01, 0xdb, //0x00003a76 addq %rbx, %r11 + //0x00003a79 LBB0_785 + 0x4d, 0x85, 0xc0, //0x00003a79 testq %r8, %r8 + 0x48, 0x8d, 0x1d, 0x69, 0x25, 0x00, 0x00, //0x00003a7c leaq $9577(%rip), %rbx /* LJTI0_5+0(%rip) */ + 0x0f, 0x84, 0xba, 0x02, 0x00, 0x00, //0x00003a83 je LBB0_826 + 0x4f, 0x8d, 0x34, 0x03, //0x00003a89 leaq (%r11,%r8), %r14 + 0x4c, 0x89, 0xdf, //0x00003a8d movq %r11, %rdi + 0x48, 0x2b, 0x7c, 0x24, 0x38, //0x00003a90 subq $56(%rsp), %rdi + 0x4c, 0x29, 0xff, //0x00003a95 subq %r15, %rdi + 0x48, 0x83, 0xc7, 0x01, //0x00003a98 addq $1, %rdi + 0x31, 0xc9, //0x00003a9c xorl %ecx, %ecx + 0xe9, 0x2a, 0x00, 0x00, 0x00, //0x00003a9e jmp LBB0_791 + //0x00003aa3 LBB0_787 + 0x83, 0xfe, 0x65, //0x00003aa3 cmpl $101, %esi + 0x0f, 0x85, 0x94, 0x02, 0x00, 0x00, //0x00003aa6 jne LBB0_825 + //0x00003aac LBB0_788 + 0x48, 0x83, 0xf8, 0xff, //0x00003aac cmpq $-1, %rax + 0x0f, 0x85, 0x07, 0x0c, 0x00, 0x00, //0x00003ab0 jne LBB0_955 + 0x48, 0x8d, 0x04, 0x0f, //0x00003ab6 leaq (%rdi,%rcx), %rax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003aba .p2align 4, 0x90 + //0x00003ac0 LBB0_790 + 0x48, 0x83, 0xc1, 0x01, //0x00003ac0 addq $1, %rcx + 0x49, 0x39, 0xc8, //0x00003ac4 cmpq %rcx, %r8 + 0x0f, 0x84, 0x88, 0x09, 0x00, 0x00, //0x00003ac7 je LBB0_934 + //0x00003acd LBB0_791 + 0x41, 0x0f, 0xbe, 0x34, 0x0b, //0x00003acd movsbl (%r11,%rcx), %esi + 0x8d, 0x56, 0xd0, //0x00003ad2 leal $-48(%rsi), %edx + 0x83, 0xfa, 0x0a, //0x00003ad5 cmpl $10, %edx + 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x00003ad8 jb LBB0_790 + 0x8d, 0x56, 0xd5, //0x00003ade leal $-43(%rsi), %edx + 0x83, 0xfa, 0x1a, //0x00003ae1 cmpl $26, %edx + 0x0f, 0x87, 0xb9, 0xff, 0xff, 0xff, //0x00003ae4 ja LBB0_787 + 0x48, 0x63, 0x14, 0x93, //0x00003aea movslq (%rbx,%rdx,4), %rdx + 0x48, 0x01, 0xda, //0x00003aee addq %rbx, %rdx + 0xff, 0xe2, //0x00003af1 jmpq *%rdx + //0x00003af3 LBB0_794 + 0x49, 0x83, 0xfc, 0xff, //0x00003af3 cmpq $-1, %r12 + 0x0f, 0x85, 0xc0, 0x0b, 0x00, 0x00, //0x00003af7 jne LBB0_955 + 0x4c, 0x8d, 0x24, 0x0f, //0x00003afd leaq (%rdi,%rcx), %r12 + 0xe9, 0xba, 0xff, 0xff, 0xff, //0x00003b01 jmp LBB0_790 + //0x00003b06 LBB0_796 + 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x00003b06 cmpq $-1, $48(%rsp) + 0x0f, 0x85, 0xab, 0x0b, 0x00, 0x00, //0x00003b0c jne LBB0_955 + 0x48, 0x8d, 0x14, 0x0f, //0x00003b12 leaq (%rdi,%rcx), %rdx + 0x48, 0x89, 0x54, 0x24, 0x30, //0x00003b16 movq %rdx, $48(%rsp) + 0xe9, 0xa0, 0xff, 0xff, 0xff, //0x00003b1b jmp LBB0_790 + //0x00003b20 LBB0_737 + 0x83, 0xff, 0x2c, //0x00003b20 cmpl $44, %edi + 0x0f, 0x85, 0x43, 0x00, 0x00, 0x00, //0x00003b23 jne LBB0_738 + 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00003b29 cmpq $4095, %rsi + 0x0f, 0x8f, 0x71, 0x14, 0x00, 0x00, //0x00003b30 jg LBB0_1135 + 0x48, 0x8d, 0x4e, 0x01, //0x00003b36 leaq $1(%rsi), %rcx + 0x49, 0x89, 0x0c, 0x24, //0x00003b3a movq %rcx, (%r12) + 0x49, 0xc7, 0x44, 0xf4, 0x08, 0x03, 0x00, 0x00, 0x00, //0x00003b3e movq $3, $8(%r12,%rsi,8) + 0xe9, 0x14, 0xf8, 0xff, 0xff, //0x00003b47 jmp LBB0_674 + //0x00003b4c LBB0_739 + 0x40, 0x80, 0xff, 0x3a, //0x00003b4c cmpb $58, %dil + 0x0f, 0x85, 0xbc, 0x13, 0x00, 0x00, //0x00003b50 jne LBB0_1049 + 0x49, 0xc7, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x00, //0x00003b56 movq $0, (%r12,%rsi,8) + 0xe9, 0xfd, 0xf7, 0xff, 0xff, //0x00003b5e jmp LBB0_674 + //0x00003b63 LBB0_741 + 0x83, 0xff, 0x22, //0x00003b63 cmpl $34, %edi + 0x0f, 0x84, 0x41, 0x00, 0x00, 0x00, //0x00003b66 je LBB0_802 + //0x00003b6c LBB0_738 + 0x83, 0xff, 0x7d, //0x00003b6c cmpl $125, %edi + 0x0f, 0x85, 0x9d, 0x13, 0x00, 0x00, //0x00003b6f jne LBB0_1049 + //0x00003b75 LBB0_711 + 0x49, 0x89, 0x14, 0x24, //0x00003b75 movq %rdx, (%r12) + 0x4d, 0x89, 0xd5, //0x00003b79 movq %r10, %r13 + 0x48, 0x85, 0xd2, //0x00003b7c testq %rdx, %rdx + 0x0f, 0x85, 0xfb, 0xf7, 0xff, 0xff, //0x00003b7f jne LBB0_676 + 0xe9, 0x8f, 0x13, 0x00, 0x00, //0x00003b85 jmp LBB0_1050 + //0x00003b8a LBB0_798 + 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00003b8a cmpq $4095, %rsi + 0x0f, 0x8f, 0x10, 0x14, 0x00, 0x00, //0x00003b91 jg LBB0_1135 + 0x48, 0x8d, 0x4e, 0x01, //0x00003b97 leaq $1(%rsi), %rcx + 0x49, 0x89, 0x0c, 0x24, //0x00003b9b movq %rcx, (%r12) + 0x49, 0xc7, 0x44, 0xf4, 0x08, 0x00, 0x00, 0x00, 0x00, //0x00003b9f movq $0, $8(%r12,%rsi,8) + 0xe9, 0xb3, 0xf7, 0xff, 0xff, //0x00003ba8 jmp LBB0_674 + //0x00003bad LBB0_802 + 0x49, 0xc7, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x00, //0x00003bad movq $2, (%r12,%rsi,8) + 0x4d, 0x8b, 0x19, //0x00003bb5 movq (%r9), %r11 + 0x48, 0x8b, 0x44, 0x24, 0x18, //0x00003bb8 movq $24(%rsp), %rax + 0x4c, 0x8b, 0x08, //0x00003bbd movq (%rax), %r9 + 0x4c, 0x89, 0xc9, //0x00003bc0 movq %r9, %rcx + 0x4c, 0x29, 0xd9, //0x00003bc3 subq %r11, %rcx + 0x0f, 0x84, 0xdc, 0x1c, 0x00, 0x00, //0x00003bc6 je LBB0_1158 + 0x48, 0x83, 0xf9, 0x40, //0x00003bcc cmpq $64, %rcx + 0x0f, 0x82, 0x51, 0x0c, 0x00, 0x00, //0x00003bd0 jb LBB0_972 + 0x4c, 0x89, 0xdf, //0x00003bd6 movq %r11, %rdi + 0x48, 0xf7, 0xd7, //0x00003bd9 notq %rdi + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003bdc movq $-1, %r8 + 0x4d, 0x89, 0xdd, //0x00003be3 movq %r11, %r13 + 0x45, 0x31, 0xf6, //0x00003be6 xorl %r14d, %r14d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003be9 .p2align 4, 0x90 + //0x00003bf0 LBB0_805 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x2f, //0x00003bf0 vmovdqu (%r15,%r13), %ymm0 0xc4, 0x81, 0x7e, 0x6f, 0x4c, 0x2f, 0x20, //0x00003bf6 vmovdqu $32(%r15,%r13), %ymm1 0xc5, 0xfd, 0x74, 0xd6, //0x00003bfd vpcmpeqb %ymm6, %ymm0, %ymm2 @@ -3921,25 +3886,25 @@ var _text_get_by_path = []byte{ 0x48, 0x09, 0xc2, //0x00003c21 orq %rax, %rdx 0x48, 0xc1, 0xe3, 0x20, //0x00003c24 shlq $32, %rbx 0x48, 0x09, 0xde, //0x00003c28 orq %rbx, %rsi - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x00003c2b jne LBB0_828 + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x00003c2b jne LBB0_814 0x4d, 0x85, 0xf6, //0x00003c31 testq %r14, %r14 - 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x00003c34 jne LBB0_830 + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x00003c34 jne LBB0_816 0x45, 0x31, 0xf6, //0x00003c3a xorl %r14d, %r14d 0x48, 0x85, 0xd2, //0x00003c3d testq %rdx, %rdx - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x00003c40 jne LBB0_831 - //0x00003c46 LBB0_822 + 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x00003c40 jne LBB0_817 + //0x00003c46 LBB0_808 0x48, 0x83, 0xc1, 0xc0, //0x00003c46 addq $-64, %rcx 0x48, 0x83, 0xc7, 0xc0, //0x00003c4a addq $-64, %rdi 0x49, 0x83, 0xc5, 0x40, //0x00003c4e addq $64, %r13 0x48, 0x83, 0xf9, 0x3f, //0x00003c52 cmpq $63, %rcx - 0x0f, 0x87, 0x94, 0xff, 0xff, 0xff, //0x00003c56 ja LBB0_819 - 0xe9, 0x37, 0x08, 0x00, 0x00, //0x00003c5c jmp LBB0_823 - //0x00003c61 LBB0_828 + 0x0f, 0x87, 0x94, 0xff, 0xff, 0xff, //0x00003c56 ja LBB0_805 + 0xe9, 0xca, 0x09, 0x00, 0x00, //0x00003c5c jmp LBB0_809 + //0x00003c61 LBB0_814 0x49, 0x83, 0xf8, 0xff, //0x00003c61 cmpq $-1, %r8 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00003c65 jne LBB0_830 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00003c65 jne LBB0_816 0x4c, 0x0f, 0xbc, 0xc6, //0x00003c6b bsfq %rsi, %r8 0x4d, 0x01, 0xe8, //0x00003c6f addq %r13, %r8 - //0x00003c72 LBB0_830 + //0x00003c72 LBB0_816 0x4c, 0x89, 0xf0, //0x00003c72 movq %r14, %rax 0x48, 0xf7, 0xd0, //0x00003c75 notq %rax 0x48, 0x21, 0xf0, //0x00003c78 andq %rsi, %rax @@ -3961,2380 +3926,2585 @@ var _text_get_by_path = []byte{ 0x48, 0x21, 0xda, //0x00003cb8 andq %rbx, %rdx 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00003cbb movq $16(%rsp), %r12 0x48, 0x85, 0xd2, //0x00003cc0 testq %rdx, %rdx - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00003cc3 je LBB0_822 - //0x00003cc9 LBB0_831 + 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00003cc3 je LBB0_808 + //0x00003cc9 LBB0_817 0x4c, 0x0f, 0xbc, 0xea, //0x00003cc9 bsfq %rdx, %r13 0x49, 0x29, 0xfd, //0x00003ccd subq %rdi, %r13 - //0x00003cd0 LBB0_832 - 0x4d, 0x85, 0xed, //0x00003cd0 testq %r13, %r13 - 0x4c, 0x8d, 0x35, 0x52, 0x1d, 0x00, 0x00, //0x00003cd3 leaq $7506(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0x0f, 0x89, 0x90, 0xf7, 0xff, 0xff, //0x00003cda jns LBB0_712 - 0xe9, 0xd1, 0x0f, 0x00, 0x00, //0x00003ce0 jmp LBB0_833 - //0x00003ce5 LBB0_836 - 0x48, 0x8b, 0x44, 0x24, 0x28, //0x00003ce5 movq $40(%rsp), %rax - 0x4c, 0x8b, 0x30, //0x00003cea movq (%rax), %r14 - 0x4d, 0x8b, 0x28, //0x00003ced movq (%r8), %r13 - 0x4d, 0x29, 0xee, //0x00003cf0 subq %r13, %r14 - 0x0f, 0x84, 0x3c, 0x17, 0x00, 0x00, //0x00003cf3 je LBB0_1105 - 0x4b, 0x8d, 0x04, 0x2f, //0x00003cf9 leaq (%r15,%r13), %rax - 0x48, 0x89, 0x44, 0x24, 0x38, //0x00003cfd movq %rax, $56(%rsp) - 0x80, 0x38, 0x30, //0x00003d02 cmpb $48, (%rax) - 0x0f, 0x85, 0x68, 0x01, 0x00, 0x00, //0x00003d05 jne LBB0_860 - 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00003d0b movl $1, %r9d - 0x49, 0x83, 0xfe, 0x01, //0x00003d11 cmpq $1, %r14 - 0x0f, 0x85, 0x2a, 0x01, 0x00, 0x00, //0x00003d15 jne LBB0_858 - //0x00003d1b LBB0_839 - 0x4c, 0x89, 0xe9, //0x00003d1b movq %r13, %rcx - 0xe9, 0x6b, 0x08, 0x00, 0x00, //0x00003d1e jmp LBB0_950 - //0x00003d23 LBB0_840 - 0x49, 0x8b, 0x0c, 0x24, //0x00003d23 movq (%r12), %rcx - 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00003d27 cmpq $4095, %rcx - 0x0f, 0x8f, 0x76, 0x0f, 0x00, 0x00, //0x00003d2e jg LBB0_1108 - 0x48, 0x8d, 0x41, 0x01, //0x00003d34 leaq $1(%rcx), %rax - 0x49, 0x89, 0x04, 0x24, //0x00003d38 movq %rax, (%r12) - 0x49, 0xc7, 0x44, 0xcc, 0x08, 0x05, 0x00, 0x00, 0x00, //0x00003d3c movq $5, $8(%r12,%rcx,8) - 0xe9, 0x76, 0xf3, 0xff, 0xff, //0x00003d45 jmp LBB0_652 - //0x00003d4a LBB0_842 - 0x49, 0x8b, 0x08, //0x00003d4a movq (%r8), %rcx - 0x48, 0x8b, 0x44, 0x24, 0x28, //0x00003d4d movq $40(%rsp), %rax - 0x48, 0x8b, 0x10, //0x00003d52 movq (%rax), %rdx - 0x48, 0x8d, 0x42, 0xfc, //0x00003d55 leaq $-4(%rdx), %rax - 0x48, 0x39, 0xc1, //0x00003d59 cmpq %rax, %rcx - 0x0f, 0x87, 0x53, 0x16, 0x00, 0x00, //0x00003d5c ja LBB0_1107 - 0x41, 0x8b, 0x14, 0x0f, //0x00003d62 movl (%r15,%rcx), %edx - 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x00003d66 cmpl $1702063201, %edx - 0x0f, 0x85, 0xcf, 0x16, 0x00, 0x00, //0x00003d6c jne LBB0_1109 - 0x48, 0x8d, 0x41, 0x04, //0x00003d72 leaq $4(%rcx), %rax - 0x49, 0x89, 0x00, //0x00003d76 movq %rax, (%r8) - 0x48, 0x85, 0xc9, //0x00003d79 testq %rcx, %rcx - 0x0f, 0x8f, 0x3e, 0xf3, 0xff, 0xff, //0x00003d7c jg LBB0_652 - 0xe9, 0xae, 0x17, 0x00, 0x00, //0x00003d82 jmp LBB0_845 - //0x00003d87 LBB0_846 - 0x49, 0x8b, 0x08, //0x00003d87 movq (%r8), %rcx - 0x48, 0x8b, 0x44, 0x24, 0x28, //0x00003d8a movq $40(%rsp), %rax - 0x48, 0x8b, 0x10, //0x00003d8f movq (%rax), %rdx - 0x48, 0x8d, 0x42, 0xfd, //0x00003d92 leaq $-3(%rdx), %rax - 0x48, 0x39, 0xc1, //0x00003d96 cmpq %rax, %rcx - 0x0f, 0x87, 0x16, 0x16, 0x00, 0x00, //0x00003d99 ja LBB0_1107 - 0x4c, 0x8d, 0x69, 0xff, //0x00003d9f leaq $-1(%rcx), %r13 - 0x41, 0x81, 0x7c, 0x0f, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x00003da3 cmpl $1819047278, $-1(%r15,%rcx) - 0x0f, 0x84, 0x30, 0x00, 0x00, 0x00, //0x00003dac je LBB0_854 - 0xe9, 0xe4, 0x16, 0x00, 0x00, //0x00003db2 jmp LBB0_848 - //0x00003db7 LBB0_852 - 0x49, 0x8b, 0x08, //0x00003db7 movq (%r8), %rcx - 0x48, 0x8b, 0x44, 0x24, 0x28, //0x00003dba movq $40(%rsp), %rax - 0x48, 0x8b, 0x10, //0x00003dbf movq (%rax), %rdx - 0x48, 0x8d, 0x42, 0xfd, //0x00003dc2 leaq $-3(%rdx), %rax - 0x48, 0x39, 0xc1, //0x00003dc6 cmpq %rax, %rcx - 0x0f, 0x87, 0xe6, 0x15, 0x00, 0x00, //0x00003dc9 ja LBB0_1107 - 0x4c, 0x8d, 0x69, 0xff, //0x00003dcf leaq $-1(%rcx), %r13 - 0x41, 0x81, 0x7c, 0x0f, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00003dd3 cmpl $1702195828, $-1(%r15,%rcx) - 0x0f, 0x85, 0x00, 0x17, 0x00, 0x00, //0x00003ddc jne LBB0_1114 - //0x00003de2 LBB0_854 - 0x48, 0x8d, 0x41, 0x03, //0x00003de2 leaq $3(%rcx), %rax - 0x49, 0x89, 0x00, //0x00003de6 movq %rax, (%r8) - 0x48, 0x85, 0xc9, //0x00003de9 testq %rcx, %rcx - 0x0f, 0x8f, 0xce, 0xf2, 0xff, 0xff, //0x00003dec jg LBB0_652 - 0xe9, 0x9e, 0x0e, 0x00, 0x00, //0x00003df2 jmp LBB0_1026 - //0x00003df7 LBB0_855 - 0x49, 0x8b, 0x0c, 0x24, //0x00003df7 movq (%r12), %rcx - 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00003dfb cmpq $4095, %rcx - 0x0f, 0x8f, 0xa2, 0x0e, 0x00, 0x00, //0x00003e02 jg LBB0_1108 - 0x48, 0x8d, 0x41, 0x01, //0x00003e08 leaq $1(%rcx), %rax - 0x49, 0x89, 0x04, 0x24, //0x00003e0c movq %rax, (%r12) - 0x49, 0xc7, 0x44, 0xcc, 0x08, 0x06, 0x00, 0x00, 0x00, //0x00003e10 movq $6, $8(%r12,%rcx,8) - 0xe9, 0xa2, 0xf2, 0xff, 0xff, //0x00003e19 jmp LBB0_652 - //0x00003e1e LBB0_857 - 0x48, 0x8d, 0x50, 0xff, //0x00003e1e leaq $-1(%rax), %rdx - 0x48, 0x39, 0xd7, //0x00003e22 cmpq %rdx, %rdi - 0x48, 0xf7, 0xd0, //0x00003e25 notq %rax - 0x49, 0x0f, 0x45, 0xc3, //0x00003e28 cmovneq %r11, %rax - 0x84, 0xc9, //0x00003e2c testb %cl, %cl - 0x4c, 0x0f, 0x45, 0xd8, //0x00003e2e cmovneq %rax, %r11 - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00003e32 movq $16(%rsp), %r12 - 0x4d, 0x85, 0xdb, //0x00003e37 testq %r11, %r11 - 0x0f, 0x89, 0x58, 0xf2, 0xff, 0xff, //0x00003e3a jns LBB0_936 - 0xe9, 0xb8, 0x0e, 0x00, 0x00, //0x00003e40 jmp LBB0_1030 - //0x00003e45 LBB0_858 - 0x48, 0x8b, 0x44, 0x24, 0x38, //0x00003e45 movq $56(%rsp), %rax - 0x8a, 0x48, 0x01, //0x00003e4a movb $1(%rax), %cl - 0x80, 0xc1, 0xd2, //0x00003e4d addb $-46, %cl - 0x80, 0xf9, 0x37, //0x00003e50 cmpb $55, %cl - 0x0f, 0x87, 0xc2, 0xfe, 0xff, 0xff, //0x00003e53 ja LBB0_839 - 0x0f, 0xb6, 0xc1, //0x00003e59 movzbl %cl, %eax - 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00003e5c movabsq $36028797027352577, %rcx - 0x48, 0x0f, 0xa3, 0xc1, //0x00003e66 btq %rax, %rcx - 0x4c, 0x89, 0xe9, //0x00003e6a movq %r13, %rcx - 0x0f, 0x83, 0x1b, 0x07, 0x00, 0x00, //0x00003e6d jae LBB0_950 - //0x00003e73 LBB0_860 - 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x00003e73 movq $-1, %r12 - 0x49, 0x83, 0xfe, 0x20, //0x00003e7a cmpq $32, %r14 - 0x0f, 0x82, 0xe2, 0x07, 0x00, 0x00, //0x00003e7e jb LBB0_959 - 0x45, 0x31, 0xc9, //0x00003e84 xorl %r9d, %r9d - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003e87 movq $-1, %r8 - 0x48, 0xc7, 0x44, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff, //0x00003e8e movq $-1, $48(%rsp) - //0x00003e97 LBB0_862 - 0x48, 0x8b, 0x44, 0x24, 0x38, //0x00003e97 movq $56(%rsp), %rax - 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x08, //0x00003e9c vmovdqu (%rax,%r9), %ymm0 - 0xc4, 0xc1, 0x7d, 0x64, 0xc8, //0x00003ea2 vpcmpgtb %ymm8, %ymm0, %ymm1 - 0xc5, 0xb5, 0x64, 0xd0, //0x00003ea7 vpcmpgtb %ymm0, %ymm9, %ymm2 - 0xc5, 0xed, 0xdb, 0xc9, //0x00003eab vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0xad, 0x74, 0xd0, //0x00003eaf vpcmpeqb %ymm0, %ymm10, %ymm2 - 0xc5, 0xa5, 0x74, 0xd8, //0x00003eb3 vpcmpeqb %ymm0, %ymm11, %ymm3 - 0xc5, 0xe5, 0xeb, 0xd2, //0x00003eb7 vpor %ymm2, %ymm3, %ymm2 - 0xc5, 0x9d, 0xdb, 0xd8, //0x00003ebb vpand %ymm0, %ymm12, %ymm3 - 0xc5, 0x95, 0x74, 0xc0, //0x00003ebf vpcmpeqb %ymm0, %ymm13, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x00003ec3 vpmovmskb %ymm0, %ebx - 0xc5, 0x8d, 0x74, 0xdb, //0x00003ec7 vpcmpeqb %ymm3, %ymm14, %ymm3 - 0xc5, 0xfd, 0xd7, 0xf3, //0x00003ecb vpmovmskb %ymm3, %esi - 0xc5, 0xfd, 0xd7, 0xfa, //0x00003ecf vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0xeb, 0xc0, //0x00003ed3 vpor %ymm0, %ymm1, %ymm0 - 0xc5, 0xe5, 0xeb, 0xca, //0x00003ed7 vpor %ymm2, %ymm3, %ymm1 - 0xc5, 0xfd, 0xeb, 0xc1, //0x00003edb vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x00003edf vpmovmskb %ymm0, %eax - 0x48, 0xf7, 0xd0, //0x00003ee3 notq %rax - 0x48, 0x0f, 0xbc, 0xc8, //0x00003ee6 bsfq %rax, %rcx - 0x83, 0xf9, 0x20, //0x00003eea cmpl $32, %ecx - 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00003eed je LBB0_864 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00003ef3 movl $-1, %eax - 0xd3, 0xe0, //0x00003ef8 shll %cl, %eax - 0xf7, 0xd0, //0x00003efa notl %eax - 0x21, 0xc3, //0x00003efc andl %eax, %ebx - 0x21, 0xc6, //0x00003efe andl %eax, %esi - 0x21, 0xf8, //0x00003f00 andl %edi, %eax - 0x89, 0xc7, //0x00003f02 movl %eax, %edi - //0x00003f04 LBB0_864 - 0x8d, 0x53, 0xff, //0x00003f04 leal $-1(%rbx), %edx - 0x21, 0xda, //0x00003f07 andl %ebx, %edx - 0x0f, 0x85, 0x81, 0x05, 0x00, 0x00, //0x00003f09 jne LBB0_939 - 0x8d, 0x56, 0xff, //0x00003f0f leal $-1(%rsi), %edx - 0x21, 0xf2, //0x00003f12 andl %esi, %edx - 0x0f, 0x85, 0x76, 0x05, 0x00, 0x00, //0x00003f14 jne LBB0_939 - 0x8d, 0x57, 0xff, //0x00003f1a leal $-1(%rdi), %edx - 0x21, 0xfa, //0x00003f1d andl %edi, %edx - 0x0f, 0x85, 0x6b, 0x05, 0x00, 0x00, //0x00003f1f jne LBB0_939 - 0x85, 0xdb, //0x00003f25 testl %ebx, %ebx - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00003f27 je LBB0_870 - 0x0f, 0xbc, 0xdb, //0x00003f2d bsfl %ebx, %ebx - 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x00003f30 cmpq $-1, $48(%rsp) - 0x0f, 0x85, 0x34, 0x06, 0x00, 0x00, //0x00003f36 jne LBB0_946 - 0x4c, 0x01, 0xcb, //0x00003f3c addq %r9, %rbx - 0x48, 0x89, 0x5c, 0x24, 0x30, //0x00003f3f movq %rbx, $48(%rsp) - //0x00003f44 LBB0_870 - 0x85, 0xf6, //0x00003f44 testl %esi, %esi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00003f46 je LBB0_873 - 0x0f, 0xbc, 0xf6, //0x00003f4c bsfl %esi, %esi - 0x49, 0x83, 0xf8, 0xff, //0x00003f4f cmpq $-1, %r8 - 0x0f, 0x85, 0xcf, 0x05, 0x00, 0x00, //0x00003f53 jne LBB0_943 - 0x4c, 0x01, 0xce, //0x00003f59 addq %r9, %rsi - 0x49, 0x89, 0xf0, //0x00003f5c movq %rsi, %r8 - //0x00003f5f LBB0_873 - 0x85, 0xff, //0x00003f5f testl %edi, %edi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00003f61 je LBB0_876 - 0x0f, 0xbc, 0xf7, //0x00003f67 bsfl %edi, %esi - 0x49, 0x83, 0xfc, 0xff, //0x00003f6a cmpq $-1, %r12 - 0x0f, 0x85, 0xb4, 0x05, 0x00, 0x00, //0x00003f6e jne LBB0_943 - 0x4c, 0x01, 0xce, //0x00003f74 addq %r9, %rsi - 0x49, 0x89, 0xf4, //0x00003f77 movq %rsi, %r12 - //0x00003f7a LBB0_876 - 0x83, 0xf9, 0x20, //0x00003f7a cmpl $32, %ecx - 0x0f, 0x85, 0x0d, 0x02, 0x00, 0x00, //0x00003f7d jne LBB0_910 - 0x49, 0x83, 0xc6, 0xe0, //0x00003f83 addq $-32, %r14 - 0x49, 0x83, 0xc1, 0x20, //0x00003f87 addq $32, %r9 - 0x49, 0x83, 0xfe, 0x1f, //0x00003f8b cmpq $31, %r14 - 0x0f, 0x87, 0x02, 0xff, 0xff, 0xff, //0x00003f8f ja LBB0_862 - 0xc5, 0xf8, 0x77, //0x00003f95 vzeroupper - 0x4c, 0x03, 0x4c, 0x24, 0x38, //0x00003f98 addq $56(%rsp), %r9 - 0x4c, 0x89, 0x64, 0x24, 0x18, //0x00003f9d movq %r12, $24(%rsp) - 0x49, 0x83, 0xfe, 0x10, //0x00003fa2 cmpq $16, %r14 - 0xc5, 0x7a, 0x6f, 0x3d, 0x72, 0xc2, 0xff, 0xff, //0x00003fa6 vmovdqu $-15758(%rip), %xmm15 /* LCPI0_19+0(%rip) */ - 0x0f, 0x82, 0x37, 0x01, 0x00, 0x00, //0x00003fae jb LBB0_897 - //0x00003fb4 LBB0_879 - 0x4d, 0x89, 0xcc, //0x00003fb4 movq %r9, %r12 - 0x4c, 0x2b, 0x64, 0x24, 0x38, //0x00003fb7 subq $56(%rsp), %r12 - 0x31, 0xc0, //0x00003fbc xorl %eax, %eax - //0x00003fbe LBB0_880 - 0xc4, 0xc1, 0x7a, 0x6f, 0x04, 0x01, //0x00003fbe vmovdqu (%r9,%rax), %xmm0 - 0xc4, 0xc1, 0x79, 0x64, 0xcf, //0x00003fc4 vpcmpgtb %xmm15, %xmm0, %xmm1 - 0xc5, 0xfa, 0x6f, 0x15, 0x5f, 0xc2, 0xff, 0xff, //0x00003fc9 vmovdqu $-15777(%rip), %xmm2 /* LCPI0_20+0(%rip) */ - 0xc5, 0xe9, 0x64, 0xd0, //0x00003fd1 vpcmpgtb %xmm0, %xmm2, %xmm2 - 0xc5, 0xf1, 0xdb, 0xca, //0x00003fd5 vpand %xmm2, %xmm1, %xmm1 - 0xc5, 0xf9, 0x74, 0x15, 0x5f, 0xc2, 0xff, 0xff, //0x00003fd9 vpcmpeqb $-15777(%rip), %xmm0, %xmm2 /* LCPI0_21+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x1d, 0x67, 0xc2, 0xff, 0xff, //0x00003fe1 vpcmpeqb $-15769(%rip), %xmm0, %xmm3 /* LCPI0_22+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xd2, //0x00003fe9 vpor %xmm2, %xmm3, %xmm2 - 0xc5, 0xf9, 0xdb, 0x1d, 0xfb, 0xc1, 0xff, 0xff, //0x00003fed vpand $-15877(%rip), %xmm0, %xmm3 /* LCPI0_5+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0x63, 0xc2, 0xff, 0xff, //0x00003ff5 vpcmpeqb $-15773(%rip), %xmm0, %xmm0 /* LCPI0_23+0(%rip) */ - 0xc5, 0xe1, 0x74, 0x1d, 0x6b, 0xc2, 0xff, 0xff, //0x00003ffd vpcmpeqb $-15765(%rip), %xmm3, %xmm3 /* LCPI0_24+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xe0, //0x00004005 vpor %xmm0, %xmm3, %xmm4 - 0xc5, 0xe9, 0xeb, 0xc9, //0x00004009 vpor %xmm1, %xmm2, %xmm1 - 0xc5, 0xd9, 0xeb, 0xc9, //0x0000400d vpor %xmm1, %xmm4, %xmm1 - 0xc5, 0x79, 0xd7, 0xd8, //0x00004011 vpmovmskb %xmm0, %r11d - 0xc5, 0xf9, 0xd7, 0xf3, //0x00004015 vpmovmskb %xmm3, %esi - 0xc5, 0xf9, 0xd7, 0xfa, //0x00004019 vpmovmskb %xmm2, %edi - 0xc5, 0xf9, 0xd7, 0xc9, //0x0000401d vpmovmskb %xmm1, %ecx - 0xf7, 0xd1, //0x00004021 notl %ecx - 0x0f, 0xbc, 0xc9, //0x00004023 bsfl %ecx, %ecx - 0x83, 0xf9, 0x10, //0x00004026 cmpl $16, %ecx - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00004029 je LBB0_882 - 0xbb, 0xff, 0xff, 0xff, 0xff, //0x0000402f movl $-1, %ebx - 0xd3, 0xe3, //0x00004034 shll %cl, %ebx - 0xf7, 0xd3, //0x00004036 notl %ebx - 0x41, 0x21, 0xdb, //0x00004038 andl %ebx, %r11d - 0x21, 0xde, //0x0000403b andl %ebx, %esi - 0x21, 0xfb, //0x0000403d andl %edi, %ebx - 0x89, 0xdf, //0x0000403f movl %ebx, %edi - //0x00004041 LBB0_882 - 0x41, 0x8d, 0x5b, 0xff, //0x00004041 leal $-1(%r11), %ebx - 0x44, 0x21, 0xdb, //0x00004045 andl %r11d, %ebx - 0x0f, 0x85, 0x9d, 0x04, 0x00, 0x00, //0x00004048 jne LBB0_940 - 0x8d, 0x5e, 0xff, //0x0000404e leal $-1(%rsi), %ebx - 0x21, 0xf3, //0x00004051 andl %esi, %ebx - 0x0f, 0x85, 0x92, 0x04, 0x00, 0x00, //0x00004053 jne LBB0_940 - 0x8d, 0x5f, 0xff, //0x00004059 leal $-1(%rdi), %ebx - 0x21, 0xfb, //0x0000405c andl %edi, %ebx - 0x0f, 0x85, 0x87, 0x04, 0x00, 0x00, //0x0000405e jne LBB0_940 - 0x45, 0x85, 0xdb, //0x00004064 testl %r11d, %r11d - 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x00004067 je LBB0_888 - 0x41, 0x0f, 0xbc, 0xdb, //0x0000406d bsfl %r11d, %ebx - 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x00004071 cmpq $-1, $48(%rsp) - 0x0f, 0x85, 0xc5, 0x05, 0x00, 0x00, //0x00004077 jne LBB0_957 - 0x4c, 0x01, 0xe3, //0x0000407d addq %r12, %rbx - 0x48, 0x01, 0xc3, //0x00004080 addq %rax, %rbx - 0x48, 0x89, 0x5c, 0x24, 0x30, //0x00004083 movq %rbx, $48(%rsp) - //0x00004088 LBB0_888 - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x00004088 movq $32(%rsp), %r11 - 0x85, 0xf6, //0x0000408d testl %esi, %esi - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x0000408f je LBB0_891 - 0x0f, 0xbc, 0xf6, //0x00004095 bsfl %esi, %esi - 0x49, 0x83, 0xf8, 0xff, //0x00004098 cmpq $-1, %r8 - 0x0f, 0x85, 0x07, 0x05, 0x00, 0x00, //0x0000409c jne LBB0_952 - 0x4c, 0x01, 0xe6, //0x000040a2 addq %r12, %rsi - 0x48, 0x01, 0xc6, //0x000040a5 addq %rax, %rsi - 0x49, 0x89, 0xf0, //0x000040a8 movq %rsi, %r8 - //0x000040ab LBB0_891 - 0x85, 0xff, //0x000040ab testl %edi, %edi - 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x000040ad je LBB0_894 - 0x0f, 0xbc, 0xf7, //0x000040b3 bsfl %edi, %esi - 0x48, 0x83, 0x7c, 0x24, 0x18, 0xff, //0x000040b6 cmpq $-1, $24(%rsp) - 0x0f, 0x85, 0xe7, 0x04, 0x00, 0x00, //0x000040bc jne LBB0_952 - 0x4c, 0x01, 0xe6, //0x000040c2 addq %r12, %rsi - 0x48, 0x01, 0xc6, //0x000040c5 addq %rax, %rsi - 0x48, 0x89, 0x74, 0x24, 0x18, //0x000040c8 movq %rsi, $24(%rsp) - //0x000040cd LBB0_894 - 0x83, 0xf9, 0x10, //0x000040cd cmpl $16, %ecx - 0x0f, 0x85, 0x5d, 0x01, 0x00, 0x00, //0x000040d0 jne LBB0_913 - 0x49, 0x83, 0xc6, 0xf0, //0x000040d6 addq $-16, %r14 - 0x48, 0x83, 0xc0, 0x10, //0x000040da addq $16, %rax - 0x49, 0x83, 0xfe, 0x0f, //0x000040de cmpq $15, %r14 - 0x0f, 0x87, 0xd6, 0xfe, 0xff, 0xff, //0x000040e2 ja LBB0_880 - 0x49, 0x01, 0xc1, //0x000040e8 addq %rax, %r9 - //0x000040eb LBB0_897 - 0x4d, 0x85, 0xf6, //0x000040eb testq %r14, %r14 - 0x4c, 0x8b, 0x64, 0x24, 0x18, //0x000040ee movq $24(%rsp), %r12 - 0x0f, 0x84, 0x64, 0x01, 0x00, 0x00, //0x000040f3 je LBB0_915 - 0x4b, 0x8d, 0x34, 0x31, //0x000040f9 leaq (%r9,%r14), %rsi - 0x4c, 0x89, 0xcf, //0x000040fd movq %r9, %rdi - 0x48, 0x2b, 0x7c, 0x24, 0x38, //0x00004100 subq $56(%rsp), %rdi - 0x31, 0xc9, //0x00004105 xorl %ecx, %ecx - 0xe9, 0x21, 0x00, 0x00, 0x00, //0x00004107 jmp LBB0_902 - //0x0000410c LBB0_899 - 0x49, 0x83, 0xfc, 0xff, //0x0000410c cmpq $-1, %r12 - 0x0f, 0x85, 0xfe, 0x03, 0x00, 0x00, //0x00004110 jne LBB0_942 - 0x4c, 0x8d, 0x24, 0x0f, //0x00004116 leaq (%rdi,%rcx), %r12 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000411a .p2align 4, 0x90 - //0x00004120 LBB0_901 - 0x48, 0x83, 0xc1, 0x01, //0x00004120 addq $1, %rcx - 0x49, 0x39, 0xce, //0x00004124 cmpq %rcx, %r14 - 0x0f, 0x84, 0x46, 0x03, 0x00, 0x00, //0x00004127 je LBB0_938 - //0x0000412d LBB0_902 - 0x41, 0x0f, 0xbe, 0x1c, 0x09, //0x0000412d movsbl (%r9,%rcx), %ebx - 0x8d, 0x43, 0xd0, //0x00004132 leal $-48(%rbx), %eax - 0x83, 0xf8, 0x0a, //0x00004135 cmpl $10, %eax - 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x00004138 jb LBB0_901 - 0x8d, 0x53, 0xd5, //0x0000413e leal $-43(%rbx), %edx - 0x83, 0xfa, 0x1a, //0x00004141 cmpl $26, %edx - 0x0f, 0x87, 0x2a, 0x00, 0x00, 0x00, //0x00004144 ja LBB0_907 - 0x48, 0x8d, 0x1d, 0xe3, 0x1a, 0x00, 0x00, //0x0000414a leaq $6883(%rip), %rbx /* LJTI0_4+0(%rip) */ - 0x48, 0x63, 0x04, 0x93, //0x00004151 movslq (%rbx,%rdx,4), %rax - 0x48, 0x01, 0xd8, //0x00004155 addq %rbx, %rax - 0xff, 0xe0, //0x00004158 jmpq *%rax - //0x0000415a LBB0_905 - 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x0000415a cmpq $-1, $48(%rsp) - 0x0f, 0x85, 0xae, 0x03, 0x00, 0x00, //0x00004160 jne LBB0_942 - 0x48, 0x8d, 0x04, 0x0f, //0x00004166 leaq (%rdi,%rcx), %rax - 0x48, 0x89, 0x44, 0x24, 0x30, //0x0000416a movq %rax, $48(%rsp) - 0xe9, 0xac, 0xff, 0xff, 0xff, //0x0000416f jmp LBB0_901 - //0x00004174 LBB0_907 - 0x83, 0xfb, 0x65, //0x00004174 cmpl $101, %ebx - 0x0f, 0x85, 0xdd, 0x00, 0x00, 0x00, //0x00004177 jne LBB0_914 - //0x0000417d LBB0_908 - 0x49, 0x83, 0xf8, 0xff, //0x0000417d cmpq $-1, %r8 - 0x0f, 0x85, 0x8d, 0x03, 0x00, 0x00, //0x00004181 jne LBB0_942 - 0x4c, 0x8d, 0x04, 0x0f, //0x00004187 leaq (%rdi,%rcx), %r8 - 0xe9, 0x90, 0xff, 0xff, 0xff, //0x0000418b jmp LBB0_901 - //0x00004190 LBB0_910 - 0x4c, 0x01, 0xc9, //0x00004190 addq %r9, %rcx - 0x48, 0x03, 0x4c, 0x24, 0x38, //0x00004193 addq $56(%rsp), %rcx - 0xc5, 0xf8, 0x77, //0x00004198 vzeroupper - 0xc5, 0x7a, 0x6f, 0x3d, 0x7d, 0xc0, 0xff, 0xff, //0x0000419b vmovdqu $-16259(%rip), %xmm15 /* LCPI0_19+0(%rip) */ - 0x49, 0x89, 0xc9, //0x000041a3 movq %rcx, %r9 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000041a6 movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x30, //0x000041ad movq $48(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x000041b2 testq %rdx, %rdx - 0x0f, 0x85, 0xb7, 0x00, 0x00, 0x00, //0x000041b5 jne LBB0_916 - 0xe9, 0x8d, 0x13, 0x00, 0x00, //0x000041bb jmp LBB0_1106 - //0x000041c0 LBB0_911 - 0x4d, 0x89, 0xcb, //0x000041c0 movq %r9, %r11 - 0xe9, 0xe7, 0xf8, 0xff, 0xff, //0x000041c3 jmp LBB0_804 - //0x000041c8 LBB0_701 - 0x4d, 0x01, 0xfd, //0x000041c8 addq %r15, %r13 - 0x48, 0x83, 0xf9, 0x20, //0x000041cb cmpq $32, %rcx - 0x0f, 0x82, 0x1e, 0x05, 0x00, 0x00, //0x000041cf jb LBB0_964 - //0x000041d5 LBB0_702 - 0xc4, 0xc1, 0x7e, 0x6f, 0x45, 0x00, //0x000041d5 vmovdqu (%r13), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x000041db vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x000041df vpmovmskb %ymm1, %edx - 0xc5, 0xfd, 0x74, 0xc7, //0x000041e3 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x000041e7 vpmovmskb %ymm0, %esi - 0x85, 0xf6, //0x000041eb testl %esi, %esi - 0x0f, 0x85, 0xa4, 0x04, 0x00, 0x00, //0x000041ed jne LBB0_960 - 0x4d, 0x85, 0xf6, //0x000041f3 testq %r14, %r14 - 0x0f, 0x85, 0xb2, 0x04, 0x00, 0x00, //0x000041f6 jne LBB0_962 - 0x45, 0x31, 0xf6, //0x000041fc xorl %r14d, %r14d - 0x48, 0x85, 0xd2, //0x000041ff testq %rdx, %rdx - 0x0f, 0x84, 0xe3, 0x04, 0x00, 0x00, //0x00004202 je LBB0_963 - //0x00004208 LBB0_705 - 0x48, 0x0f, 0xbc, 0xc2, //0x00004208 bsfq %rdx, %rax - 0x4d, 0x29, 0xfd, //0x0000420c subq %r15, %r13 - 0x49, 0x01, 0xc5, //0x0000420f addq %rax, %r13 - 0x49, 0x83, 0xc5, 0x01, //0x00004212 addq $1, %r13 - 0x4c, 0x8d, 0x35, 0x0f, 0x18, 0x00, 0x00, //0x00004216 leaq $6159(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0x4d, 0x85, 0xed, //0x0000421d testq %r13, %r13 - 0x0f, 0x89, 0x4a, 0xf2, 0xff, 0xff, //0x00004220 jns LBB0_712 - 0xe9, 0x8b, 0x0a, 0x00, 0x00, //0x00004226 jmp LBB0_833 - //0x0000422b LBB0_912 - 0x0f, 0xbc, 0xc2, //0x0000422b bsfl %edx, %eax - 0xe9, 0x2d, 0x01, 0x00, 0x00, //0x0000422e jmp LBB0_930 - //0x00004233 LBB0_913 - 0x89, 0xc9, //0x00004233 movl %ecx, %ecx - 0x49, 0x01, 0xc9, //0x00004235 addq %rcx, %r9 - 0x49, 0x01, 0xc1, //0x00004238 addq %rax, %r9 - 0x4c, 0x8b, 0x64, 0x24, 0x18, //0x0000423b movq $24(%rsp), %r12 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00004240 movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x30, //0x00004247 movq $48(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x0000424c testq %rdx, %rdx - 0x0f, 0x85, 0x1d, 0x00, 0x00, 0x00, //0x0000424f jne LBB0_916 - 0xe9, 0xf3, 0x12, 0x00, 0x00, //0x00004255 jmp LBB0_1106 - //0x0000425a LBB0_914 - 0x49, 0x01, 0xc9, //0x0000425a addq %rcx, %r9 - //0x0000425d LBB0_915 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000425d movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x30, //0x00004264 movq $48(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00004269 testq %rdx, %rdx - 0x0f, 0x84, 0xdb, 0x12, 0x00, 0x00, //0x0000426c je LBB0_1106 - //0x00004272 LBB0_916 - 0x4d, 0x85, 0xe4, //0x00004272 testq %r12, %r12 - 0xc5, 0xfe, 0x6f, 0x2d, 0x83, 0xbd, 0xff, 0xff, //0x00004275 vmovdqu $-17021(%rip), %ymm5 /* LCPI0_0+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0xfb, 0xbd, 0xff, 0xff, //0x0000427d vmovdqu $-16901(%rip), %ymm6 /* LCPI0_7+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x13, 0xbe, 0xff, 0xff, //0x00004285 vmovdqu $-16877(%rip), %ymm7 /* LCPI0_8+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x8b, 0xbe, 0xff, 0xff, //0x0000428d vmovdqu $-16757(%rip), %ymm8 /* LCPI0_13+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x0d, 0xa3, 0xbe, 0xff, 0xff, //0x00004295 vmovdqu $-16733(%rip), %ymm9 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x15, 0xbb, 0xbe, 0xff, 0xff, //0x0000429d vmovdqu $-16709(%rip), %ymm10 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0xd3, 0xbe, 0xff, 0xff, //0x000042a5 vmovdqu $-16685(%rip), %ymm11 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x8b, 0xbd, 0xff, 0xff, //0x000042ad vmovdqu $-17013(%rip), %ymm12 /* LCPI0_2+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0xe3, 0xbe, 0xff, 0xff, //0x000042b5 vmovdqu $-16669(%rip), %ymm13 /* LCPI0_17+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0xfb, 0xbe, 0xff, 0xff, //0x000042bd vmovdqu $-16645(%rip), %ymm14 /* LCPI0_18+0(%rip) */ - 0x0f, 0x84, 0x82, 0x12, 0x00, 0x00, //0x000042c5 je LBB0_1106 - 0x4d, 0x85, 0xc0, //0x000042cb testq %r8, %r8 - 0x0f, 0x84, 0x79, 0x12, 0x00, 0x00, //0x000042ce je LBB0_1106 - 0x4c, 0x2b, 0x4c, 0x24, 0x38, //0x000042d4 subq $56(%rsp), %r9 - 0x49, 0x8d, 0x49, 0xff, //0x000042d9 leaq $-1(%r9), %rcx - 0x48, 0x39, 0xca, //0x000042dd cmpq %rcx, %rdx - 0x0f, 0x84, 0x34, 0x00, 0x00, 0x00, //0x000042e0 je LBB0_924 - 0x49, 0x39, 0xcc, //0x000042e6 cmpq %rcx, %r12 - 0x0f, 0x84, 0x2b, 0x00, 0x00, 0x00, //0x000042e9 je LBB0_924 - 0x49, 0x39, 0xc8, //0x000042ef cmpq %rcx, %r8 - 0x0f, 0x84, 0x22, 0x00, 0x00, 0x00, //0x000042f2 je LBB0_924 - 0x4d, 0x85, 0xe4, //0x000042f8 testq %r12, %r12 - 0x0f, 0x8e, 0x21, 0x00, 0x00, 0x00, //0x000042fb jle LBB0_925 - 0x49, 0x8d, 0x44, 0x24, 0xff, //0x00004301 leaq $-1(%r12), %rax - 0x49, 0x39, 0xc0, //0x00004306 cmpq %rax, %r8 - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00004309 je LBB0_925 - 0x49, 0xf7, 0xd4, //0x0000430f notq %r12 - 0x4d, 0x89, 0xe1, //0x00004312 movq %r12, %r9 - 0xe9, 0x5e, 0x02, 0x00, 0x00, //0x00004315 jmp LBB0_948 - //0x0000431a LBB0_924 - 0x49, 0xf7, 0xd9, //0x0000431a negq %r9 - 0xe9, 0x56, 0x02, 0x00, 0x00, //0x0000431d jmp LBB0_948 - //0x00004322 LBB0_925 - 0x48, 0x89, 0xd0, //0x00004322 movq %rdx, %rax - 0x4c, 0x09, 0xc0, //0x00004325 orq %r8, %rax - 0x0f, 0x99, 0xc1, //0x00004328 setns %cl - 0x0f, 0x88, 0xb0, 0x00, 0x00, 0x00, //0x0000432b js LBB0_931 - 0x4c, 0x39, 0xc2, //0x00004331 cmpq %r8, %rdx - 0x0f, 0x8c, 0xa7, 0x00, 0x00, 0x00, //0x00004334 jl LBB0_931 - 0x48, 0xf7, 0xd2, //0x0000433a notq %rdx - 0x49, 0x89, 0xd1, //0x0000433d movq %rdx, %r9 - 0xe9, 0x33, 0x02, 0x00, 0x00, //0x00004340 jmp LBB0_948 - //0x00004345 LBB0_928 - 0x4d, 0x29, 0xfa, //0x00004345 subq %r15, %r10 - 0x49, 0x01, 0xfa, //0x00004348 addq %rdi, %r10 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x0000434b movq $8(%rsp), %r8 - 0x49, 0x39, 0xd2, //0x00004350 cmpq %rdx, %r10 - 0x0f, 0x82, 0x39, 0xef, 0xff, 0xff, //0x00004353 jb LBB0_684 - 0xe9, 0x1a, 0x09, 0x00, 0x00, //0x00004359 jmp LBB0_1021 - //0x0000435e LBB0_929 - 0x89, 0xf0, //0x0000435e movl %esi, %eax - //0x00004360 LBB0_930 - 0x49, 0xf7, 0xd3, //0x00004360 notq %r11 - 0x49, 0x29, 0xc3, //0x00004363 subq %rax, %r11 - 0x48, 0x8b, 0x74, 0x24, 0x08, //0x00004366 movq $8(%rsp), %rsi - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x0000436b movq $16(%rsp), %r12 - 0x4d, 0x85, 0xdb, //0x00004370 testq %r11, %r11 - 0x0f, 0x89, 0x1f, 0xed, 0xff, 0xff, //0x00004373 jns LBB0_936 - 0xe9, 0x7f, 0x09, 0x00, 0x00, //0x00004379 jmp LBB0_1030 - //0x0000437e LBB0_787 - 0x4d, 0x01, 0xfd, //0x0000437e addq %r15, %r13 - 0x48, 0x83, 0xf9, 0x20, //0x00004381 cmpq $32, %rcx - 0x0f, 0x82, 0x9d, 0x04, 0x00, 0x00, //0x00004385 jb LBB0_981 - //0x0000438b LBB0_788 - 0xc4, 0xc1, 0x7e, 0x6f, 0x45, 0x00, //0x0000438b vmovdqu (%r13), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00004391 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x00004395 vpmovmskb %ymm1, %edx - 0xc5, 0xfd, 0x74, 0xc7, //0x00004399 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x0000439d vpmovmskb %ymm0, %esi - 0x85, 0xf6, //0x000043a1 testl %esi, %esi - 0x0f, 0x85, 0x23, 0x04, 0x00, 0x00, //0x000043a3 jne LBB0_977 - 0x4d, 0x85, 0xf6, //0x000043a9 testq %r14, %r14 - 0x0f, 0x85, 0x31, 0x04, 0x00, 0x00, //0x000043ac jne LBB0_979 - 0x45, 0x31, 0xf6, //0x000043b2 xorl %r14d, %r14d - 0x48, 0x85, 0xd2, //0x000043b5 testq %rdx, %rdx - 0x0f, 0x84, 0x62, 0x04, 0x00, 0x00, //0x000043b8 je LBB0_980 - //0x000043be LBB0_791 - 0x48, 0x0f, 0xbc, 0xc2, //0x000043be bsfq %rdx, %rax - 0x4d, 0x29, 0xfd, //0x000043c2 subq %r15, %r13 - 0x49, 0x01, 0xc5, //0x000043c5 addq %rax, %r13 - 0x49, 0x83, 0xc5, 0x01, //0x000043c8 addq $1, %r13 - 0x4c, 0x8d, 0x35, 0x59, 0x16, 0x00, 0x00, //0x000043cc leaq $5721(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0x4d, 0x85, 0xed, //0x000043d3 testq %r13, %r13 - 0x0f, 0x89, 0x64, 0xf6, 0xff, 0xff, //0x000043d6 jns LBB0_798 - 0xe9, 0xd5, 0x08, 0x00, 0x00, //0x000043dc jmp LBB0_833 - //0x000043e1 LBB0_931 - 0x49, 0x8d, 0x40, 0xff, //0x000043e1 leaq $-1(%r8), %rax - 0x48, 0x39, 0xc2, //0x000043e5 cmpq %rax, %rdx - 0x49, 0xf7, 0xd0, //0x000043e8 notq %r8 - 0x4d, 0x0f, 0x45, 0xc1, //0x000043eb cmovneq %r9, %r8 - 0x84, 0xc9, //0x000043ef testb %cl, %cl - 0x4d, 0x0f, 0x45, 0xc8, //0x000043f1 cmovneq %r8, %r9 - 0xe9, 0x7e, 0x01, 0x00, 0x00, //0x000043f5 jmp LBB0_948 - //0x000043fa LBB0_932 - 0x0f, 0xbc, 0xc2, //0x000043fa bsfl %edx, %eax - 0xe9, 0x2c, 0x00, 0x00, 0x00, //0x000043fd jmp LBB0_935 - //0x00004402 LBB0_933 - 0x4c, 0x03, 0x7c, 0x24, 0x18, //0x00004402 addq $24(%rsp), %r15 - 0x4d, 0x29, 0xdf, //0x00004407 subq %r11, %r15 - 0x49, 0x29, 0xcf, //0x0000440a subq %rcx, %r15 - 0x49, 0x83, 0xc7, 0xfe, //0x0000440d addq $-2, %r15 - 0x4d, 0x89, 0xfb, //0x00004411 movq %r15, %r11 - 0x48, 0x8b, 0x74, 0x24, 0x08, //0x00004414 movq $8(%rsp), %rsi - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004419 movq $16(%rsp), %r12 - 0x4d, 0x85, 0xdb, //0x0000441e testq %r11, %r11 - 0x0f, 0x89, 0x71, 0xec, 0xff, 0xff, //0x00004421 jns LBB0_936 - 0xe9, 0xd1, 0x08, 0x00, 0x00, //0x00004427 jmp LBB0_1030 - //0x0000442c LBB0_934 - 0x89, 0xf0, //0x0000442c movl %esi, %eax - //0x0000442e LBB0_935 - 0x4c, 0x03, 0x7c, 0x24, 0x18, //0x0000442e addq $24(%rsp), %r15 - 0x4d, 0x29, 0xdf, //0x00004433 subq %r11, %r15 - 0x49, 0x29, 0xc7, //0x00004436 subq %rax, %r15 - 0x4d, 0x29, 0xcf, //0x00004439 subq %r9, %r15 - 0x49, 0x83, 0xc7, 0xfe, //0x0000443c addq $-2, %r15 - 0x4d, 0x89, 0xfb, //0x00004440 movq %r15, %r11 - 0x48, 0x8b, 0x74, 0x24, 0x08, //0x00004443 movq $8(%rsp), %rsi - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004448 movq $16(%rsp), %r12 - 0x4c, 0x8d, 0x35, 0xd8, 0x15, 0x00, 0x00, //0x0000444d leaq $5592(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0x4d, 0x85, 0xdb, //0x00004454 testq %r11, %r11 - 0x0f, 0x89, 0x3b, 0xec, 0xff, 0xff, //0x00004457 jns LBB0_936 - 0xe9, 0x9b, 0x08, 0x00, 0x00, //0x0000445d jmp LBB0_1030 - //0x00004462 LBB0_937 - 0x4d, 0x01, 0xfa, //0x00004462 addq %r15, %r10 - 0x48, 0x85, 0xf6, //0x00004465 testq %rsi, %rsi - 0x0f, 0x85, 0xba, 0xed, 0xff, 0xff, //0x00004468 jne LBB0_677 - 0xe9, 0xf4, 0xed, 0xff, 0xff, //0x0000446e jmp LBB0_682 - //0x00004473 LBB0_938 - 0x49, 0x89, 0xf1, //0x00004473 movq %rsi, %r9 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00004476 movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x30, //0x0000447d movq $48(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00004482 testq %rdx, %rdx - 0x0f, 0x85, 0xe7, 0xfd, 0xff, 0xff, //0x00004485 jne LBB0_916 - 0xe9, 0xbd, 0x10, 0x00, 0x00, //0x0000448b jmp LBB0_1106 - //0x00004490 LBB0_939 - 0x0f, 0xbc, 0xc2, //0x00004490 bsfl %edx, %eax - 0xe9, 0xda, 0x00, 0x00, 0x00, //0x00004493 jmp LBB0_947 - //0x00004498 LBB0_823 - 0x4d, 0x01, 0xfd, //0x00004498 addq %r15, %r13 - 0x48, 0x83, 0xf9, 0x20, //0x0000449b cmpq $32, %rcx - 0x0f, 0x82, 0x40, 0x05, 0x00, 0x00, //0x0000449f jb LBB0_1002 - //0x000044a5 LBB0_824 - 0xc4, 0xc1, 0x7e, 0x6f, 0x45, 0x00, //0x000044a5 vmovdqu (%r13), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x000044ab vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x000044af vpmovmskb %ymm1, %edx - 0xc5, 0xfd, 0x74, 0xc7, //0x000044b3 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x000044b7 vpmovmskb %ymm0, %esi - 0x85, 0xf6, //0x000044bb testl %esi, %esi - 0x0f, 0x85, 0xc6, 0x04, 0x00, 0x00, //0x000044bd jne LBB0_998 - 0x4d, 0x85, 0xf6, //0x000044c3 testq %r14, %r14 - 0x0f, 0x85, 0xd4, 0x04, 0x00, 0x00, //0x000044c6 jne LBB0_1000 - 0x45, 0x31, 0xf6, //0x000044cc xorl %r14d, %r14d - 0x48, 0x85, 0xd2, //0x000044cf testq %rdx, %rdx - 0x0f, 0x84, 0x05, 0x05, 0x00, 0x00, //0x000044d2 je LBB0_1001 - //0x000044d8 LBB0_827 - 0x48, 0x0f, 0xbc, 0xc2, //0x000044d8 bsfq %rdx, %rax - 0x4d, 0x29, 0xfd, //0x000044dc subq %r15, %r13 - 0x49, 0x01, 0xc5, //0x000044df addq %rax, %r13 - 0x49, 0x83, 0xc5, 0x01, //0x000044e2 addq $1, %r13 - 0xe9, 0xe5, 0xf7, 0xff, 0xff, //0x000044e6 jmp LBB0_832 - //0x000044eb LBB0_940 - 0x0f, 0xbc, 0xcb, //0x000044eb bsfl %ebx, %ecx - //0x000044ee LBB0_941 - 0x4d, 0x01, 0xef, //0x000044ee addq %r13, %r15 - 0x4d, 0x29, 0xcf, //0x000044f1 subq %r9, %r15 - 0x49, 0x29, 0xcf, //0x000044f4 subq %rcx, %r15 - 0x48, 0xf7, 0xd0, //0x000044f7 notq %rax - 0x4c, 0x01, 0xf8, //0x000044fa addq %r15, %rax - 0x49, 0x89, 0xc1, //0x000044fd movq %rax, %r9 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00004500 movq $8(%rsp), %r8 - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004505 movq $16(%rsp), %r12 - 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x0000450a movq $32(%rsp), %r11 - 0xe9, 0xb3, 0x00, 0x00, 0x00, //0x0000450f jmp LBB0_954 - //0x00004514 LBB0_942 - 0x4d, 0x01, 0xef, //0x00004514 addq %r13, %r15 - 0x4d, 0x29, 0xcf, //0x00004517 subq %r9, %r15 - 0x48, 0xf7, 0xd1, //0x0000451a notq %rcx - 0x4c, 0x01, 0xf9, //0x0000451d addq %r15, %rcx - 0x49, 0x89, 0xc9, //0x00004520 movq %rcx, %r9 - 0xe9, 0x95, 0x00, 0x00, 0x00, //0x00004523 jmp LBB0_953 - //0x00004528 LBB0_943 - 0x89, 0xf0, //0x00004528 movl %esi, %eax - 0xe9, 0x43, 0x00, 0x00, 0x00, //0x0000452a jmp LBB0_947 - //0x0000452f LBB0_944 - 0x4f, 0x8d, 0x2c, 0x0f, //0x0000452f leaq (%r15,%r9), %r13 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004533 movq $-1, %r8 - 0x45, 0x31, 0xf6, //0x0000453a xorl %r14d, %r14d - 0x48, 0x83, 0xf9, 0x20, //0x0000453d cmpq $32, %rcx - 0x0f, 0x83, 0x8e, 0xfc, 0xff, 0xff, //0x00004541 jae LBB0_702 - 0xe9, 0xa7, 0x01, 0x00, 0x00, //0x00004547 jmp LBB0_964 - //0x0000454c LBB0_945 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000454c movq $-1, %rax - 0x48, 0xc7, 0x44, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff, //0x00004553 movq $-1, $48(%rsp) - 0x4c, 0x8b, 0x5c, 0x24, 0x38, //0x0000455c movq $56(%rsp), %r11 - 0x49, 0x83, 0xf8, 0x10, //0x00004561 cmpq $16, %r8 - 0x0f, 0x83, 0x6d, 0xf1, 0xff, 0xff, //0x00004565 jae LBB0_745 - 0xe9, 0x9f, 0xf2, 0xff, 0xff, //0x0000456b jmp LBB0_763 - //0x00004570 LBB0_946 - 0x89, 0xd8, //0x00004570 movl %ebx, %eax - //0x00004572 LBB0_947 - 0x49, 0xf7, 0xd1, //0x00004572 notq %r9 - 0x49, 0x29, 0xc1, //0x00004575 subq %rax, %r9 - //0x00004578 LBB0_948 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x00004578 movq $8(%rsp), %r8 - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x0000457d movq $16(%rsp), %r12 - 0x4d, 0x85, 0xc9, //0x00004582 testq %r9, %r9 - 0x0f, 0x88, 0xbf, 0x0f, 0x00, 0x00, //0x00004585 js LBB0_955 - //0x0000458b LBB0_949 - 0x49, 0x8b, 0x08, //0x0000458b movq (%r8), %rcx - //0x0000458e LBB0_950 - 0x4c, 0x01, 0xc9, //0x0000458e addq %r9, %rcx - 0x49, 0x89, 0x08, //0x00004591 movq %rcx, (%r8) - 0x4d, 0x85, 0xed, //0x00004594 testq %r13, %r13 - 0x4c, 0x8d, 0x35, 0x8e, 0x14, 0x00, 0x00, //0x00004597 leaq $5262(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0x0f, 0x8f, 0x1c, 0xeb, 0xff, 0xff, //0x0000459e jg LBB0_652 - 0xe9, 0x98, 0x0f, 0x00, 0x00, //0x000045a4 jmp LBB0_951 - //0x000045a9 LBB0_952 - 0x89, 0xf1, //0x000045a9 movl %esi, %ecx - 0x4d, 0x01, 0xef, //0x000045ab addq %r13, %r15 - 0x4d, 0x29, 0xcf, //0x000045ae subq %r9, %r15 - 0x49, 0x29, 0xcf, //0x000045b1 subq %rcx, %r15 - 0x48, 0xf7, 0xd0, //0x000045b4 notq %rax - 0x4c, 0x01, 0xf8, //0x000045b7 addq %r15, %rax - 0x49, 0x89, 0xc1, //0x000045ba movq %rax, %r9 - //0x000045bd LBB0_953 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x000045bd movq $8(%rsp), %r8 - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x000045c2 movq $16(%rsp), %r12 - //0x000045c7 LBB0_954 - 0xc5, 0xfe, 0x6f, 0x2d, 0x31, 0xba, 0xff, 0xff, //0x000045c7 vmovdqu $-17871(%rip), %ymm5 /* LCPI0_0+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0xa9, 0xba, 0xff, 0xff, //0x000045cf vmovdqu $-17751(%rip), %ymm6 /* LCPI0_7+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0xc1, 0xba, 0xff, 0xff, //0x000045d7 vmovdqu $-17727(%rip), %ymm7 /* LCPI0_8+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x39, 0xbb, 0xff, 0xff, //0x000045df vmovdqu $-17607(%rip), %ymm8 /* LCPI0_13+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x0d, 0x51, 0xbb, 0xff, 0xff, //0x000045e7 vmovdqu $-17583(%rip), %ymm9 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x15, 0x69, 0xbb, 0xff, 0xff, //0x000045ef vmovdqu $-17559(%rip), %ymm10 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0x81, 0xbb, 0xff, 0xff, //0x000045f7 vmovdqu $-17535(%rip), %ymm11 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x39, 0xba, 0xff, 0xff, //0x000045ff vmovdqu $-17863(%rip), %ymm12 /* LCPI0_2+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0x91, 0xbb, 0xff, 0xff, //0x00004607 vmovdqu $-17519(%rip), %ymm13 /* LCPI0_17+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0xa9, 0xbb, 0xff, 0xff, //0x0000460f vmovdqu $-17495(%rip), %ymm14 /* LCPI0_18+0(%rip) */ - 0x4d, 0x85, 0xc9, //0x00004617 testq %r9, %r9 - 0x0f, 0x89, 0x6b, 0xff, 0xff, 0xff, //0x0000461a jns LBB0_949 - 0xe9, 0x25, 0x0f, 0x00, 0x00, //0x00004620 jmp LBB0_955 - //0x00004625 LBB0_956 - 0x4f, 0x8d, 0x2c, 0x0f, //0x00004625 leaq (%r15,%r9), %r13 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004629 movq $-1, %r8 - 0x45, 0x31, 0xf6, //0x00004630 xorl %r14d, %r14d - 0x48, 0x83, 0xf9, 0x20, //0x00004633 cmpq $32, %rcx - 0x0f, 0x83, 0x4e, 0xfd, 0xff, 0xff, //0x00004637 jae LBB0_788 - 0xe9, 0xe6, 0x01, 0x00, 0x00, //0x0000463d jmp LBB0_981 - //0x00004642 LBB0_957 - 0x89, 0xd9, //0x00004642 movl %ebx, %ecx - 0xe9, 0xa5, 0xfe, 0xff, 0xff, //0x00004644 jmp LBB0_941 - //0x00004649 LBB0_958 - 0x4f, 0x8d, 0x2c, 0x0f, //0x00004649 leaq (%r15,%r9), %r13 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000464d movq $-1, %r8 - 0x45, 0x31, 0xf6, //0x00004654 xorl %r14d, %r14d - 0x48, 0x83, 0xf9, 0x20, //0x00004657 cmpq $32, %rcx - 0x0f, 0x83, 0x44, 0xfe, 0xff, 0xff, //0x0000465b jae LBB0_824 - 0xe9, 0x7f, 0x03, 0x00, 0x00, //0x00004661 jmp LBB0_1002 - //0x00004666 LBB0_959 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004666 movq $-1, %r8 - 0x48, 0xc7, 0x44, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff, //0x0000466d movq $-1, $48(%rsp) - 0x4c, 0x8b, 0x4c, 0x24, 0x38, //0x00004676 movq $56(%rsp), %r9 - 0x4c, 0x89, 0x64, 0x24, 0x18, //0x0000467b movq %r12, $24(%rsp) - 0x49, 0x83, 0xfe, 0x10, //0x00004680 cmpq $16, %r14 - 0xc5, 0x7a, 0x6f, 0x3d, 0x94, 0xbb, 0xff, 0xff, //0x00004684 vmovdqu $-17516(%rip), %xmm15 /* LCPI0_19+0(%rip) */ - 0x0f, 0x83, 0x22, 0xf9, 0xff, 0xff, //0x0000468c jae LBB0_879 - 0xe9, 0x54, 0xfa, 0xff, 0xff, //0x00004692 jmp LBB0_897 - //0x00004697 LBB0_960 - 0x49, 0x83, 0xf8, 0xff, //0x00004697 cmpq $-1, %r8 - 0x0f, 0x85, 0x0d, 0x00, 0x00, 0x00, //0x0000469b jne LBB0_962 - 0x4c, 0x89, 0xe8, //0x000046a1 movq %r13, %rax - 0x4c, 0x29, 0xf8, //0x000046a4 subq %r15, %rax - 0x4c, 0x0f, 0xbc, 0xc6, //0x000046a7 bsfq %rsi, %r8 - 0x49, 0x01, 0xc0, //0x000046ab addq %rax, %r8 - //0x000046ae LBB0_962 - 0x44, 0x89, 0xf0, //0x000046ae movl %r14d, %eax - 0xf7, 0xd0, //0x000046b1 notl %eax - 0x21, 0xf0, //0x000046b3 andl %esi, %eax - 0x8d, 0x3c, 0x00, //0x000046b5 leal (%rax,%rax), %edi - 0x41, 0x8d, 0x1c, 0x46, //0x000046b8 leal (%r14,%rax,2), %ebx - 0xf7, 0xd7, //0x000046bc notl %edi - 0x21, 0xf7, //0x000046be andl %esi, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x000046c0 andl $-1431655766, %edi - 0x45, 0x31, 0xf6, //0x000046c6 xorl %r14d, %r14d - 0x01, 0xc7, //0x000046c9 addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc6, //0x000046cb setb %r14b - 0x01, 0xff, //0x000046cf addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x000046d1 xorl $1431655765, %edi - 0x21, 0xdf, //0x000046d7 andl %ebx, %edi - 0xf7, 0xd7, //0x000046d9 notl %edi - 0x21, 0xfa, //0x000046db andl %edi, %edx - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x000046dd movq $16(%rsp), %r12 - 0x48, 0x85, 0xd2, //0x000046e2 testq %rdx, %rdx - 0x0f, 0x85, 0x1d, 0xfb, 0xff, 0xff, //0x000046e5 jne LBB0_705 - //0x000046eb LBB0_963 - 0x49, 0x83, 0xc5, 0x20, //0x000046eb addq $32, %r13 - 0x48, 0x83, 0xc1, 0xe0, //0x000046ef addq $-32, %rcx - //0x000046f3 LBB0_964 - 0x4d, 0x85, 0xf6, //0x000046f3 testq %r14, %r14 - 0x0f, 0x85, 0x05, 0x02, 0x00, 0x00, //0x000046f6 jne LBB0_994 - 0x4c, 0x89, 0xfa, //0x000046fc movq %r15, %rdx - 0x48, 0xf7, 0xd2, //0x000046ff notq %rdx - 0x4c, 0x89, 0xc7, //0x00004702 movq %r8, %rdi - 0x4c, 0x8d, 0x35, 0x20, 0x13, 0x00, 0x00, //0x00004705 leaq $4896(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0x48, 0x85, 0xc9, //0x0000470c testq %rcx, %rcx - 0x0f, 0x84, 0x89, 0x00, 0x00, 0x00, //0x0000470f je LBB0_976 - //0x00004715 LBB0_966 - 0x48, 0x83, 0xc2, 0x01, //0x00004715 addq $1, %rdx - //0x00004719 LBB0_967 - 0x31, 0xf6, //0x00004719 xorl %esi, %esi - //0x0000471b LBB0_968 - 0x41, 0x0f, 0xb6, 0x5c, 0x35, 0x00, //0x0000471b movzbl (%r13,%rsi), %ebx - 0x80, 0xfb, 0x22, //0x00004721 cmpb $34, %bl - 0x0f, 0x84, 0x6d, 0x00, 0x00, 0x00, //0x00004724 je LBB0_975 - 0x80, 0xfb, 0x5c, //0x0000472a cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x0000472d je LBB0_973 - 0x48, 0x83, 0xc6, 0x01, //0x00004733 addq $1, %rsi - 0x48, 0x39, 0xf1, //0x00004737 cmpq %rsi, %rcx - 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x0000473a jne LBB0_968 - 0xe9, 0x6a, 0x00, 0x00, 0x00, //0x00004740 jmp LBB0_971 - //0x00004745 LBB0_973 - 0x48, 0x8d, 0x41, 0xff, //0x00004745 leaq $-1(%rcx), %rax - 0x48, 0x39, 0xf0, //0x00004749 cmpq %rsi, %rax - 0x0f, 0x84, 0x6e, 0x05, 0x00, 0x00, //0x0000474c je LBB0_834 - 0x4a, 0x8d, 0x04, 0x2a, //0x00004752 leaq (%rdx,%r13), %rax - 0x48, 0x01, 0xf0, //0x00004756 addq %rsi, %rax - 0x48, 0x83, 0xff, 0xff, //0x00004759 cmpq $-1, %rdi - 0x4c, 0x0f, 0x44, 0xc0, //0x0000475d cmoveq %rax, %r8 - 0x48, 0x0f, 0x44, 0xf8, //0x00004761 cmoveq %rax, %rdi - 0x49, 0x01, 0xf5, //0x00004765 addq %rsi, %r13 - 0x49, 0x83, 0xc5, 0x02, //0x00004768 addq $2, %r13 - 0x48, 0x89, 0xc8, //0x0000476c movq %rcx, %rax - 0x48, 0x29, 0xf0, //0x0000476f subq %rsi, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00004772 addq $-2, %rax - 0x48, 0x83, 0xc1, 0xfe, //0x00004776 addq $-2, %rcx - 0x48, 0x39, 0xf1, //0x0000477a cmpq %rsi, %rcx - 0x48, 0x89, 0xc1, //0x0000477d movq %rax, %rcx - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004780 movq $16(%rsp), %r12 - 0x4c, 0x8d, 0x35, 0xa0, 0x12, 0x00, 0x00, //0x00004785 leaq $4768(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0x0f, 0x85, 0x87, 0xff, 0xff, 0xff, //0x0000478c jne LBB0_967 - 0xe9, 0x29, 0x05, 0x00, 0x00, //0x00004792 jmp LBB0_834 - //0x00004797 LBB0_975 - 0x49, 0x01, 0xf5, //0x00004797 addq %rsi, %r13 - 0x49, 0x83, 0xc5, 0x01, //0x0000479a addq $1, %r13 - //0x0000479e LBB0_976 - 0x4d, 0x29, 0xfd, //0x0000479e subq %r15, %r13 - 0x4d, 0x85, 0xed, //0x000047a1 testq %r13, %r13 - 0x0f, 0x89, 0xc6, 0xec, 0xff, 0xff, //0x000047a4 jns LBB0_712 - 0xe9, 0x07, 0x05, 0x00, 0x00, //0x000047aa jmp LBB0_833 - //0x000047af LBB0_971 - 0x80, 0xfb, 0x22, //0x000047af cmpb $34, %bl - 0x0f, 0x85, 0x08, 0x05, 0x00, 0x00, //0x000047b2 jne LBB0_834 - 0x49, 0x01, 0xcd, //0x000047b8 addq %rcx, %r13 - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x000047bb movq $16(%rsp), %r12 - 0x4c, 0x8d, 0x35, 0x65, 0x12, 0x00, 0x00, //0x000047c0 leaq $4709(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0xe9, 0xd2, 0xff, 0xff, 0xff, //0x000047c7 jmp LBB0_976 - //0x000047cc LBB0_977 - 0x49, 0x83, 0xf8, 0xff, //0x000047cc cmpq $-1, %r8 - 0x0f, 0x85, 0x0d, 0x00, 0x00, 0x00, //0x000047d0 jne LBB0_979 - 0x4c, 0x89, 0xe8, //0x000047d6 movq %r13, %rax - 0x4c, 0x29, 0xf8, //0x000047d9 subq %r15, %rax - 0x4c, 0x0f, 0xbc, 0xc6, //0x000047dc bsfq %rsi, %r8 - 0x49, 0x01, 0xc0, //0x000047e0 addq %rax, %r8 - //0x000047e3 LBB0_979 - 0x44, 0x89, 0xf0, //0x000047e3 movl %r14d, %eax - 0xf7, 0xd0, //0x000047e6 notl %eax - 0x21, 0xf0, //0x000047e8 andl %esi, %eax - 0x8d, 0x3c, 0x00, //0x000047ea leal (%rax,%rax), %edi - 0x41, 0x8d, 0x1c, 0x46, //0x000047ed leal (%r14,%rax,2), %ebx - 0xf7, 0xd7, //0x000047f1 notl %edi - 0x21, 0xf7, //0x000047f3 andl %esi, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x000047f5 andl $-1431655766, %edi - 0x45, 0x31, 0xf6, //0x000047fb xorl %r14d, %r14d - 0x01, 0xc7, //0x000047fe addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc6, //0x00004800 setb %r14b - 0x01, 0xff, //0x00004804 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00004806 xorl $1431655765, %edi - 0x21, 0xdf, //0x0000480c andl %ebx, %edi - 0xf7, 0xd7, //0x0000480e notl %edi - 0x21, 0xfa, //0x00004810 andl %edi, %edx - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004812 movq $16(%rsp), %r12 - 0x48, 0x85, 0xd2, //0x00004817 testq %rdx, %rdx - 0x0f, 0x85, 0x9e, 0xfb, 0xff, 0xff, //0x0000481a jne LBB0_791 - //0x00004820 LBB0_980 - 0x49, 0x83, 0xc5, 0x20, //0x00004820 addq $32, %r13 - 0x48, 0x83, 0xc1, 0xe0, //0x00004824 addq $-32, %rcx - //0x00004828 LBB0_981 - 0x4d, 0x85, 0xf6, //0x00004828 testq %r14, %r14 - 0x0f, 0x85, 0x14, 0x01, 0x00, 0x00, //0x0000482b jne LBB0_996 - 0x4c, 0x89, 0xfa, //0x00004831 movq %r15, %rdx - 0x48, 0xf7, 0xd2, //0x00004834 notq %rdx - 0x4c, 0x89, 0xc7, //0x00004837 movq %r8, %rdi - 0x4c, 0x8d, 0x35, 0xeb, 0x11, 0x00, 0x00, //0x0000483a leaq $4587(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0x48, 0x85, 0xc9, //0x00004841 testq %rcx, %rcx - 0x0f, 0x84, 0x89, 0x00, 0x00, 0x00, //0x00004844 je LBB0_993 - //0x0000484a LBB0_983 - 0x48, 0x83, 0xc2, 0x01, //0x0000484a addq $1, %rdx - //0x0000484e LBB0_984 - 0x31, 0xf6, //0x0000484e xorl %esi, %esi - //0x00004850 LBB0_985 - 0x41, 0x0f, 0xb6, 0x5c, 0x35, 0x00, //0x00004850 movzbl (%r13,%rsi), %ebx - 0x80, 0xfb, 0x22, //0x00004856 cmpb $34, %bl - 0x0f, 0x84, 0x6d, 0x00, 0x00, 0x00, //0x00004859 je LBB0_992 - 0x80, 0xfb, 0x5c, //0x0000485f cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00004862 je LBB0_990 - 0x48, 0x83, 0xc6, 0x01, //0x00004868 addq $1, %rsi - 0x48, 0x39, 0xf1, //0x0000486c cmpq %rsi, %rcx - 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x0000486f jne LBB0_985 - 0xe9, 0x6a, 0x00, 0x00, 0x00, //0x00004875 jmp LBB0_988 - //0x0000487a LBB0_990 - 0x48, 0x8d, 0x41, 0xff, //0x0000487a leaq $-1(%rcx), %rax - 0x48, 0x39, 0xf0, //0x0000487e cmpq %rsi, %rax - 0x0f, 0x84, 0x39, 0x04, 0x00, 0x00, //0x00004881 je LBB0_834 - 0x4a, 0x8d, 0x04, 0x2a, //0x00004887 leaq (%rdx,%r13), %rax - 0x48, 0x01, 0xf0, //0x0000488b addq %rsi, %rax - 0x48, 0x83, 0xff, 0xff, //0x0000488e cmpq $-1, %rdi - 0x4c, 0x0f, 0x44, 0xc0, //0x00004892 cmoveq %rax, %r8 - 0x48, 0x0f, 0x44, 0xf8, //0x00004896 cmoveq %rax, %rdi - 0x49, 0x01, 0xf5, //0x0000489a addq %rsi, %r13 - 0x49, 0x83, 0xc5, 0x02, //0x0000489d addq $2, %r13 - 0x48, 0x89, 0xc8, //0x000048a1 movq %rcx, %rax - 0x48, 0x29, 0xf0, //0x000048a4 subq %rsi, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x000048a7 addq $-2, %rax - 0x48, 0x83, 0xc1, 0xfe, //0x000048ab addq $-2, %rcx - 0x48, 0x39, 0xf1, //0x000048af cmpq %rsi, %rcx - 0x48, 0x89, 0xc1, //0x000048b2 movq %rax, %rcx - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x000048b5 movq $16(%rsp), %r12 - 0x4c, 0x8d, 0x35, 0x6b, 0x11, 0x00, 0x00, //0x000048ba leaq $4459(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0x0f, 0x85, 0x87, 0xff, 0xff, 0xff, //0x000048c1 jne LBB0_984 - 0xe9, 0xf4, 0x03, 0x00, 0x00, //0x000048c7 jmp LBB0_834 - //0x000048cc LBB0_992 - 0x49, 0x01, 0xf5, //0x000048cc addq %rsi, %r13 - 0x49, 0x83, 0xc5, 0x01, //0x000048cf addq $1, %r13 - //0x000048d3 LBB0_993 - 0x4d, 0x29, 0xfd, //0x000048d3 subq %r15, %r13 - 0x4d, 0x85, 0xed, //0x000048d6 testq %r13, %r13 - 0x0f, 0x89, 0x61, 0xf1, 0xff, 0xff, //0x000048d9 jns LBB0_798 - 0xe9, 0xd2, 0x03, 0x00, 0x00, //0x000048df jmp LBB0_833 - //0x000048e4 LBB0_988 - 0x80, 0xfb, 0x22, //0x000048e4 cmpb $34, %bl - 0x0f, 0x85, 0xd3, 0x03, 0x00, 0x00, //0x000048e7 jne LBB0_834 - 0x49, 0x01, 0xcd, //0x000048ed addq %rcx, %r13 - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x000048f0 movq $16(%rsp), %r12 - 0x4c, 0x8d, 0x35, 0x30, 0x11, 0x00, 0x00, //0x000048f5 leaq $4400(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0xe9, 0xd2, 0xff, 0xff, 0xff, //0x000048fc jmp LBB0_993 - //0x00004901 LBB0_994 - 0x48, 0x85, 0xc9, //0x00004901 testq %rcx, %rcx - 0x0f, 0x84, 0xb6, 0x03, 0x00, 0x00, //0x00004904 je LBB0_834 - 0x4c, 0x89, 0xfa, //0x0000490a movq %r15, %rdx - 0x48, 0xf7, 0xd2, //0x0000490d notq %rdx - 0x4a, 0x8d, 0x04, 0x2a, //0x00004910 leaq (%rdx,%r13), %rax - 0x49, 0x83, 0xf8, 0xff, //0x00004914 cmpq $-1, %r8 - 0x4c, 0x89, 0xc7, //0x00004918 movq %r8, %rdi - 0x4c, 0x0f, 0x44, 0xc0, //0x0000491b cmoveq %rax, %r8 - 0x48, 0x0f, 0x44, 0xf8, //0x0000491f cmoveq %rax, %rdi - 0x49, 0x83, 0xc5, 0x01, //0x00004923 addq $1, %r13 - 0x48, 0x83, 0xc1, 0xff, //0x00004927 addq $-1, %rcx - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x0000492b movq $16(%rsp), %r12 - 0x4c, 0x8d, 0x35, 0xf5, 0x10, 0x00, 0x00, //0x00004930 leaq $4341(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0x48, 0x85, 0xc9, //0x00004937 testq %rcx, %rcx - 0x0f, 0x85, 0xd5, 0xfd, 0xff, 0xff, //0x0000493a jne LBB0_966 - 0xe9, 0x59, 0xfe, 0xff, 0xff, //0x00004940 jmp LBB0_976 - //0x00004945 LBB0_996 - 0x48, 0x85, 0xc9, //0x00004945 testq %rcx, %rcx - 0x0f, 0x84, 0x72, 0x03, 0x00, 0x00, //0x00004948 je LBB0_834 - 0x4c, 0x89, 0xfa, //0x0000494e movq %r15, %rdx - 0x48, 0xf7, 0xd2, //0x00004951 notq %rdx - 0x4a, 0x8d, 0x04, 0x2a, //0x00004954 leaq (%rdx,%r13), %rax - 0x49, 0x83, 0xf8, 0xff, //0x00004958 cmpq $-1, %r8 - 0x4c, 0x89, 0xc7, //0x0000495c movq %r8, %rdi - 0x4c, 0x0f, 0x44, 0xc0, //0x0000495f cmoveq %rax, %r8 - 0x48, 0x0f, 0x44, 0xf8, //0x00004963 cmoveq %rax, %rdi - 0x49, 0x83, 0xc5, 0x01, //0x00004967 addq $1, %r13 - 0x48, 0x83, 0xc1, 0xff, //0x0000496b addq $-1, %rcx - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x0000496f movq $16(%rsp), %r12 - 0x4c, 0x8d, 0x35, 0xb1, 0x10, 0x00, 0x00, //0x00004974 leaq $4273(%rip), %r14 /* LJTI0_2+0(%rip) */ - 0x48, 0x85, 0xc9, //0x0000497b testq %rcx, %rcx - 0x0f, 0x85, 0xc6, 0xfe, 0xff, 0xff, //0x0000497e jne LBB0_983 - 0xe9, 0x4a, 0xff, 0xff, 0xff, //0x00004984 jmp LBB0_993 - //0x00004989 LBB0_998 - 0x49, 0x83, 0xf8, 0xff, //0x00004989 cmpq $-1, %r8 - 0x0f, 0x85, 0x0d, 0x00, 0x00, 0x00, //0x0000498d jne LBB0_1000 - 0x4c, 0x89, 0xe8, //0x00004993 movq %r13, %rax - 0x4c, 0x29, 0xf8, //0x00004996 subq %r15, %rax - 0x4c, 0x0f, 0xbc, 0xc6, //0x00004999 bsfq %rsi, %r8 - 0x49, 0x01, 0xc0, //0x0000499d addq %rax, %r8 - //0x000049a0 LBB0_1000 - 0x44, 0x89, 0xf0, //0x000049a0 movl %r14d, %eax - 0xf7, 0xd0, //0x000049a3 notl %eax - 0x21, 0xf0, //0x000049a5 andl %esi, %eax - 0x8d, 0x3c, 0x00, //0x000049a7 leal (%rax,%rax), %edi - 0x41, 0x8d, 0x1c, 0x46, //0x000049aa leal (%r14,%rax,2), %ebx - 0xf7, 0xd7, //0x000049ae notl %edi - 0x21, 0xf7, //0x000049b0 andl %esi, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x000049b2 andl $-1431655766, %edi - 0x45, 0x31, 0xf6, //0x000049b8 xorl %r14d, %r14d - 0x01, 0xc7, //0x000049bb addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc6, //0x000049bd setb %r14b - 0x01, 0xff, //0x000049c1 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x000049c3 xorl $1431655765, %edi - 0x21, 0xdf, //0x000049c9 andl %ebx, %edi - 0xf7, 0xd7, //0x000049cb notl %edi - 0x21, 0xfa, //0x000049cd andl %edi, %edx - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x000049cf movq $16(%rsp), %r12 - 0x48, 0x85, 0xd2, //0x000049d4 testq %rdx, %rdx - 0x0f, 0x85, 0xfb, 0xfa, 0xff, 0xff, //0x000049d7 jne LBB0_827 - //0x000049dd LBB0_1001 - 0x49, 0x83, 0xc5, 0x20, //0x000049dd addq $32, %r13 - 0x48, 0x83, 0xc1, 0xe0, //0x000049e1 addq $-32, %rcx - //0x000049e5 LBB0_1002 - 0x4d, 0x85, 0xf6, //0x000049e5 testq %r14, %r14 - 0x0f, 0x85, 0xad, 0x00, 0x00, 0x00, //0x000049e8 jne LBB0_1015 - 0x4c, 0x89, 0xfa, //0x000049ee movq %r15, %rdx - 0x48, 0xf7, 0xd2, //0x000049f1 notq %rdx - 0x4c, 0x89, 0xc7, //0x000049f4 movq %r8, %rdi - 0x48, 0x85, 0xc9, //0x000049f7 testq %rcx, %rcx - 0x0f, 0x84, 0x7d, 0x00, 0x00, 0x00, //0x000049fa je LBB0_1014 - //0x00004a00 LBB0_1004 - 0x48, 0x83, 0xc2, 0x01, //0x00004a00 addq $1, %rdx - //0x00004a04 LBB0_1005 - 0x31, 0xf6, //0x00004a04 xorl %esi, %esi - //0x00004a06 LBB0_1006 - 0x41, 0x0f, 0xb6, 0x5c, 0x35, 0x00, //0x00004a06 movzbl (%r13,%rsi), %ebx - 0x80, 0xfb, 0x22, //0x00004a0c cmpb $34, %bl - 0x0f, 0x84, 0x61, 0x00, 0x00, 0x00, //0x00004a0f je LBB0_1013 - 0x80, 0xfb, 0x5c, //0x00004a15 cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00004a18 je LBB0_1011 - 0x48, 0x83, 0xc6, 0x01, //0x00004a1e addq $1, %rsi - 0x48, 0x39, 0xf1, //0x00004a22 cmpq %rsi, %rcx - 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x00004a25 jne LBB0_1006 - 0xe9, 0x5a, 0x00, 0x00, 0x00, //0x00004a2b jmp LBB0_1009 - //0x00004a30 LBB0_1011 - 0x48, 0x8d, 0x41, 0xff, //0x00004a30 leaq $-1(%rcx), %rax - 0x48, 0x39, 0xf0, //0x00004a34 cmpq %rsi, %rax - 0x0f, 0x84, 0x83, 0x02, 0x00, 0x00, //0x00004a37 je LBB0_834 - 0x4a, 0x8d, 0x04, 0x2a, //0x00004a3d leaq (%rdx,%r13), %rax - 0x48, 0x01, 0xf0, //0x00004a41 addq %rsi, %rax - 0x48, 0x83, 0xff, 0xff, //0x00004a44 cmpq $-1, %rdi - 0x4c, 0x0f, 0x44, 0xc0, //0x00004a48 cmoveq %rax, %r8 - 0x48, 0x0f, 0x44, 0xf8, //0x00004a4c cmoveq %rax, %rdi - 0x49, 0x01, 0xf5, //0x00004a50 addq %rsi, %r13 - 0x49, 0x83, 0xc5, 0x02, //0x00004a53 addq $2, %r13 - 0x48, 0x89, 0xc8, //0x00004a57 movq %rcx, %rax - 0x48, 0x29, 0xf0, //0x00004a5a subq %rsi, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00004a5d addq $-2, %rax - 0x48, 0x83, 0xc1, 0xfe, //0x00004a61 addq $-2, %rcx - 0x48, 0x39, 0xf1, //0x00004a65 cmpq %rsi, %rcx - 0x48, 0x89, 0xc1, //0x00004a68 movq %rax, %rcx - 0x0f, 0x85, 0x93, 0xff, 0xff, 0xff, //0x00004a6b jne LBB0_1005 - 0xe9, 0x4a, 0x02, 0x00, 0x00, //0x00004a71 jmp LBB0_834 - //0x00004a76 LBB0_1013 - 0x49, 0x01, 0xf5, //0x00004a76 addq %rsi, %r13 - 0x49, 0x83, 0xc5, 0x01, //0x00004a79 addq $1, %r13 - //0x00004a7d LBB0_1014 - 0x4d, 0x29, 0xfd, //0x00004a7d subq %r15, %r13 - 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004a80 movq $16(%rsp), %r12 - 0xe9, 0x46, 0xf2, 0xff, 0xff, //0x00004a85 jmp LBB0_832 - //0x00004a8a LBB0_1009 - 0x80, 0xfb, 0x22, //0x00004a8a cmpb $34, %bl - 0x0f, 0x85, 0x2d, 0x02, 0x00, 0x00, //0x00004a8d jne LBB0_834 - 0x49, 0x01, 0xcd, //0x00004a93 addq %rcx, %r13 - 0xe9, 0xe2, 0xff, 0xff, 0xff, //0x00004a96 jmp LBB0_1014 - //0x00004a9b LBB0_1015 - 0x48, 0x85, 0xc9, //0x00004a9b testq %rcx, %rcx - 0x0f, 0x84, 0x1c, 0x02, 0x00, 0x00, //0x00004a9e je LBB0_834 - 0x4c, 0x89, 0xfa, //0x00004aa4 movq %r15, %rdx - 0x48, 0xf7, 0xd2, //0x00004aa7 notq %rdx - 0x4a, 0x8d, 0x04, 0x2a, //0x00004aaa leaq (%rdx,%r13), %rax - 0x49, 0x83, 0xf8, 0xff, //0x00004aae cmpq $-1, %r8 - 0x4c, 0x89, 0xc7, //0x00004ab2 movq %r8, %rdi - 0x4c, 0x0f, 0x44, 0xc0, //0x00004ab5 cmoveq %rax, %r8 - 0x48, 0x0f, 0x44, 0xf8, //0x00004ab9 cmoveq %rax, %rdi - 0x49, 0x83, 0xc5, 0x01, //0x00004abd addq $1, %r13 - 0x48, 0x83, 0xc1, 0xff, //0x00004ac1 addq $-1, %rcx - 0x48, 0x85, 0xc9, //0x00004ac5 testq %rcx, %rcx - 0x0f, 0x85, 0x32, 0xff, 0xff, 0xff, //0x00004ac8 jne LBB0_1004 - 0xe9, 0xaa, 0xff, 0xff, 0xff, //0x00004ace jmp LBB0_1014 - //0x00004ad3 LBB0_1023 - 0x49, 0x89, 0xce, //0x00004ad3 movq %rcx, %r14 - 0xe9, 0xac, 0x01, 0x00, 0x00, //0x00004ad6 jmp LBB0_1024 - //0x00004adb LBB0_630 - 0x49, 0x83, 0xc6, 0xff, //0x00004adb addq $-1, %r14 - 0x4d, 0x89, 0x30, //0x00004adf movq %r14, (%r8) - 0x49, 0xc7, 0xc5, 0xde, 0xff, 0xff, 0xff, //0x00004ae2 movq $-34, %r13 - 0xe9, 0xa7, 0x01, 0x00, 0x00, //0x00004ae9 jmp LBB0_1026 - //0x00004aee LBB0_631 - 0xf7, 0xd1, //0x00004aee notl %ecx - 0x0f, 0xbc, 0xc1, //0x00004af0 bsfl %ecx, %eax - 0x48, 0x29, 0xd0, //0x00004af3 subq %rdx, %rax - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00004af6 movq $-1, %r13 - 0x48, 0x39, 0xd8, //0x00004afd cmpq %rbx, %rax - 0x0f, 0x83, 0x8f, 0x01, 0x00, 0x00, //0x00004b00 jae LBB0_1026 - //0x00004b06 LBB0_632 - 0x48, 0x8d, 0x50, 0x01, //0x00004b06 leaq $1(%rax), %rdx - 0x49, 0x89, 0x10, //0x00004b0a movq %rdx, (%r8) - 0x41, 0x0f, 0xbe, 0x0c, 0x03, //0x00004b0d movsbl (%r11,%rax), %ecx - 0x83, 0xf9, 0x7b, //0x00004b12 cmpl $123, %ecx - 0x0f, 0x87, 0xf7, 0x01, 0x00, 0x00, //0x00004b15 ja LBB0_1032 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00004b1b movq $-1, %r13 - 0x48, 0x8d, 0x35, 0xe3, 0x11, 0x00, 0x00, //0x00004b22 leaq $4579(%rip), %rsi /* LJTI0_6+0(%rip) */ - 0x48, 0x63, 0x0c, 0x8e, //0x00004b29 movslq (%rsi,%rcx,4), %rcx - 0x48, 0x01, 0xf1, //0x00004b2d addq %rsi, %rcx - 0xff, 0xe1, //0x00004b30 jmpq *%rcx - //0x00004b32 LBB0_634 - 0x49, 0x8b, 0x37, //0x00004b32 movq (%r15), %rsi - 0x48, 0x89, 0xf7, //0x00004b35 movq %rsi, %rdi - 0x48, 0x29, 0xd7, //0x00004b38 subq %rdx, %rdi - 0x48, 0x83, 0xff, 0x20, //0x00004b3b cmpq $32, %rdi - 0x0f, 0x82, 0x96, 0x0a, 0x00, 0x00, //0x00004b3f jb LBB0_1126 - 0x48, 0x89, 0xc7, //0x00004b45 movq %rax, %rdi - 0x48, 0xf7, 0xd7, //0x00004b48 notq %rdi - 0xc5, 0xfe, 0x6f, 0x05, 0xcd, 0xb4, 0xff, 0xff, //0x00004b4b vmovdqu $-19251(%rip), %ymm0 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x0d, 0xe5, 0xb4, 0xff, 0xff, //0x00004b53 vmovdqu $-19227(%rip), %ymm1 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x15, 0xfd, 0xb4, 0xff, 0xff, //0x00004b5b vmovdqu $-19203(%rip), %ymm2 /* LCPI0_3+0(%rip) */ - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004b63 .p2align 4, 0x90 - //0x00004b70 LBB0_636 - 0xc4, 0xc1, 0x7e, 0x6f, 0x1c, 0x13, //0x00004b70 vmovdqu (%r11,%rdx), %ymm3 - 0xc5, 0xe5, 0x74, 0xe0, //0x00004b76 vpcmpeqb %ymm0, %ymm3, %ymm4 - 0xc5, 0xe5, 0xdb, 0xd9, //0x00004b7a vpand %ymm1, %ymm3, %ymm3 - 0xc5, 0xe5, 0x74, 0xda, //0x00004b7e vpcmpeqb %ymm2, %ymm3, %ymm3 - 0xc5, 0xe5, 0xeb, 0xdc, //0x00004b82 vpor %ymm4, %ymm3, %ymm3 - 0xc5, 0xfd, 0xd7, 0xcb, //0x00004b86 vpmovmskb %ymm3, %ecx - 0x85, 0xc9, //0x00004b8a testl %ecx, %ecx - 0x0f, 0x85, 0xd2, 0x00, 0x00, 0x00, //0x00004b8c jne LBB0_1018 - 0x48, 0x83, 0xc2, 0x20, //0x00004b92 addq $32, %rdx - 0x48, 0x8d, 0x0c, 0x3e, //0x00004b96 leaq (%rsi,%rdi), %rcx - 0x48, 0x83, 0xc1, 0xe0, //0x00004b9a addq $-32, %rcx - 0x48, 0x83, 0xc7, 0xe0, //0x00004b9e addq $-32, %rdi - 0x48, 0x83, 0xf9, 0x1f, //0x00004ba2 cmpq $31, %rcx - 0x0f, 0x87, 0xc4, 0xff, 0xff, 0xff, //0x00004ba6 ja LBB0_636 - 0x4c, 0x89, 0xda, //0x00004bac movq %r11, %rdx - 0x48, 0x29, 0xfa, //0x00004baf subq %rdi, %rdx - 0x48, 0x01, 0xfe, //0x00004bb2 addq %rdi, %rsi - 0x48, 0x89, 0xf7, //0x00004bb5 movq %rsi, %rdi - 0x48, 0x83, 0xff, 0x10, //0x00004bb8 cmpq $16, %rdi - 0x0f, 0x82, 0x54, 0x00, 0x00, 0x00, //0x00004bbc jb LBB0_642 - //0x00004bc2 LBB0_639 - 0x4c, 0x89, 0xde, //0x00004bc2 movq %r11, %rsi - 0x48, 0x29, 0xd6, //0x00004bc5 subq %rdx, %rsi - 0xc5, 0xfa, 0x6f, 0x05, 0x10, 0xb6, 0xff, 0xff, //0x00004bc8 vmovdqu $-18928(%rip), %xmm0 /* LCPI0_4+0(%rip) */ - 0xc5, 0xfa, 0x6f, 0x0d, 0x18, 0xb6, 0xff, 0xff, //0x00004bd0 vmovdqu $-18920(%rip), %xmm1 /* LCPI0_5+0(%rip) */ - 0xc5, 0xfa, 0x6f, 0x15, 0x20, 0xb6, 0xff, 0xff, //0x00004bd8 vmovdqu $-18912(%rip), %xmm2 /* LCPI0_6+0(%rip) */ - //0x00004be0 LBB0_640 - 0xc5, 0xfa, 0x6f, 0x1a, //0x00004be0 vmovdqu (%rdx), %xmm3 - 0xc5, 0xe1, 0x74, 0xe0, //0x00004be4 vpcmpeqb %xmm0, %xmm3, %xmm4 - 0xc5, 0xe1, 0xdb, 0xd9, //0x00004be8 vpand %xmm1, %xmm3, %xmm3 - 0xc5, 0xe1, 0x74, 0xda, //0x00004bec vpcmpeqb %xmm2, %xmm3, %xmm3 - 0xc5, 0xe1, 0xeb, 0xdc, //0x00004bf0 vpor %xmm4, %xmm3, %xmm3 - 0xc5, 0xf9, 0xd7, 0xcb, //0x00004bf4 vpmovmskb %xmm3, %ecx - 0x85, 0xc9, //0x00004bf8 testl %ecx, %ecx - 0x0f, 0x85, 0x26, 0x08, 0x00, 0x00, //0x00004bfa jne LBB0_1104 - 0x48, 0x83, 0xc2, 0x10, //0x00004c00 addq $16, %rdx - 0x48, 0x83, 0xc7, 0xf0, //0x00004c04 addq $-16, %rdi - 0x48, 0x83, 0xc6, 0xf0, //0x00004c08 addq $-16, %rsi - 0x48, 0x83, 0xff, 0x0f, //0x00004c0c cmpq $15, %rdi - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00004c10 ja LBB0_640 - //0x00004c16 LBB0_642 - 0x48, 0x85, 0xff, //0x00004c16 testq %rdi, %rdi - 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00004c19 je LBB0_649 - 0x48, 0x8d, 0x1c, 0x3a, //0x00004c1f leaq (%rdx,%rdi), %rbx - 0x31, 0xf6, //0x00004c23 xorl %esi, %esi - //0x00004c25 LBB0_644 - 0x0f, 0xb6, 0x0c, 0x32, //0x00004c25 movzbl (%rdx,%rsi), %ecx - 0x80, 0xf9, 0x2c, //0x00004c29 cmpb $44, %cl - 0x0f, 0x84, 0xbb, 0x09, 0x00, 0x00, //0x00004c2c je LBB0_1127 - 0x80, 0xf9, 0x7d, //0x00004c32 cmpb $125, %cl - 0x0f, 0x84, 0xb2, 0x09, 0x00, 0x00, //0x00004c35 je LBB0_1127 - 0x80, 0xf9, 0x5d, //0x00004c3b cmpb $93, %cl - 0x0f, 0x84, 0xa9, 0x09, 0x00, 0x00, //0x00004c3e je LBB0_1127 - 0x48, 0x83, 0xc6, 0x01, //0x00004c44 addq $1, %rsi - 0x48, 0x39, 0xf7, //0x00004c48 cmpq %rsi, %rdi - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x00004c4b jne LBB0_644 - 0x48, 0x89, 0xda, //0x00004c51 movq %rbx, %rdx - //0x00004c54 LBB0_649 - 0x4c, 0x29, 0xda, //0x00004c54 subq %r11, %rdx - 0xe9, 0x97, 0x09, 0x00, 0x00, //0x00004c57 jmp LBB0_1128 - //0x00004c5c LBB0_1017 - 0x49, 0x89, 0xd6, //0x00004c5c movq %rdx, %r14 - 0xe9, 0x23, 0x00, 0x00, 0x00, //0x00004c5f jmp LBB0_1024 - //0x00004c64 LBB0_1018 - 0x0f, 0xbc, 0xc9, //0x00004c64 bsfl %ecx, %ecx - 0x48, 0x29, 0xf9, //0x00004c67 subq %rdi, %rcx - //0x00004c6a LBB0_1019 - 0x49, 0x89, 0x08, //0x00004c6a movq %rcx, (%r8) - 0x49, 0x89, 0xc5, //0x00004c6d movq %rax, %r13 - 0xe9, 0x20, 0x00, 0x00, 0x00, //0x00004c70 jmp LBB0_1026 - //0x00004c75 LBB0_1020 - 0x4d, 0x89, 0x10, //0x00004c75 movq %r10, (%r8) - //0x00004c78 LBB0_1021 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00004c78 movq $-1, %r13 - 0xe9, 0x11, 0x00, 0x00, 0x00, //0x00004c7f jmp LBB0_1026 - //0x00004c84 LBB0_1022 - 0x49, 0x89, 0xde, //0x00004c84 movq %rbx, %r14 - //0x00004c87 LBB0_1024 - 0x49, 0x83, 0xc6, 0xff, //0x00004c87 addq $-1, %r14 - 0x4d, 0x89, 0x30, //0x00004c8b movq %r14, (%r8) - //0x00004c8e LBB0_1025 - 0x49, 0xc7, 0xc5, 0xfe, 0xff, 0xff, 0xff, //0x00004c8e movq $-2, %r13 - //0x00004c95 LBB0_1026 - 0x4c, 0x89, 0xe8, //0x00004c95 movq %r13, %rax - 0x48, 0x8d, 0x65, 0xd8, //0x00004c98 leaq $-40(%rbp), %rsp - 0x5b, //0x00004c9c popq %rbx - 0x41, 0x5c, //0x00004c9d popq %r12 - 0x41, 0x5d, //0x00004c9f popq %r13 - 0x41, 0x5e, //0x00004ca1 popq %r14 - 0x41, 0x5f, //0x00004ca3 popq %r15 - 0x5d, //0x00004ca5 popq %rbp - 0xc5, 0xf8, 0x77, //0x00004ca6 vzeroupper - 0xc3, //0x00004ca9 retq - //0x00004caa LBB0_1108 - 0x49, 0xc7, 0xc5, 0xf9, 0xff, 0xff, 0xff, //0x00004caa movq $-7, %r13 - 0xe9, 0xdf, 0xff, 0xff, 0xff, //0x00004cb1 jmp LBB0_1026 - //0x00004cb6 LBB0_833 - 0x49, 0x83, 0xfd, 0xff, //0x00004cb6 cmpq $-1, %r13 - 0x0f, 0x85, 0x0a, 0x00, 0x00, 0x00, //0x00004cba jne LBB0_835 - //0x00004cc0 LBB0_834 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00004cc0 movq $-1, %r13 - 0x4d, 0x89, 0xd8, //0x00004cc7 movq %r11, %r8 - //0x00004cca LBB0_835 - 0x48, 0x8b, 0x44, 0x24, 0x08, //0x00004cca movq $8(%rsp), %rax - 0x4c, 0x89, 0x00, //0x00004ccf movq %r8, (%rax) - 0xe9, 0xbe, 0xff, 0xff, 0xff, //0x00004cd2 jmp LBB0_1026 - //0x00004cd7 LBB0_713 - 0x49, 0x83, 0xc1, 0xff, //0x00004cd7 addq $-1, %r9 - 0x4d, 0x89, 0xcd, //0x00004cdb movq %r9, %r13 - 0xe9, 0xb2, 0xff, 0xff, 0xff, //0x00004cde jmp LBB0_1026 - //0x00004ce3 LBB0_1027 - 0x48, 0x8d, 0x48, 0x04, //0x00004ce3 leaq $4(%rax), %rcx - 0xe9, 0xc0, 0x03, 0x00, 0x00, //0x00004ce7 jmp LBB0_1070 - //0x00004cec LBB0_1028 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00004cec movq $-1, %rcx - 0x48, 0x8b, 0x74, 0x24, 0x08, //0x00004cf3 movq $8(%rsp), %rsi - 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00004cf8 jmp LBB0_1031 - //0x00004cfd LBB0_1030 - 0x4c, 0x89, 0xd9, //0x00004cfd movq %r11, %rcx - //0x00004d00 LBB0_1031 - 0x48, 0x8b, 0x06, //0x00004d00 movq (%rsi), %rax - 0x48, 0x29, 0xc8, //0x00004d03 subq %rcx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00004d06 addq $-2, %rax - 0x48, 0x89, 0x06, //0x00004d0a movq %rax, (%rsi) - 0xe9, 0x7c, 0xff, 0xff, 0xff, //0x00004d0d jmp LBB0_1025 - //0x00004d12 LBB0_1032 - 0x49, 0x89, 0x00, //0x00004d12 movq %rax, (%r8) - 0xe9, 0x74, 0xff, 0xff, 0xff, //0x00004d15 jmp LBB0_1025 - //0x00004d1a LBB0_1033 - 0x4d, 0x8b, 0x07, //0x00004d1a movq (%r15), %r8 - 0x4d, 0x89, 0xc7, //0x00004d1d movq %r8, %r15 - 0x49, 0x29, 0xd7, //0x00004d20 subq %rdx, %r15 - 0x49, 0x83, 0xff, 0x20, //0x00004d23 cmpq $32, %r15 - 0x0f, 0x8c, 0xd6, 0x08, 0x00, 0x00, //0x00004d27 jl LBB0_1130 - 0x4d, 0x8d, 0x0c, 0x03, //0x00004d2d leaq (%r11,%rax), %r9 - 0x49, 0x29, 0xc0, //0x00004d31 subq %rax, %r8 - 0xbb, 0x1f, 0x00, 0x00, 0x00, //0x00004d34 movl $31, %ebx - 0x45, 0x31, 0xff, //0x00004d39 xorl %r15d, %r15d - 0xc5, 0xfe, 0x6f, 0x05, 0x3c, 0xb3, 0xff, 0xff, //0x00004d3c vmovdqu $-19652(%rip), %ymm0 /* LCPI0_7+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x0d, 0x54, 0xb3, 0xff, 0xff, //0x00004d44 vmovdqu $-19628(%rip), %ymm1 /* LCPI0_8+0(%rip) */ - 0x45, 0x31, 0xe4, //0x00004d4c xorl %r12d, %r12d - //0x00004d4f LBB0_1035 - 0xc4, 0x81, 0x7e, 0x6f, 0x54, 0x39, 0x01, //0x00004d4f vmovdqu $1(%r9,%r15), %ymm2 - 0xc5, 0xed, 0x74, 0xd8, //0x00004d56 vpcmpeqb %ymm0, %ymm2, %ymm3 - 0xc5, 0x7d, 0xd7, 0xf3, //0x00004d5a vpmovmskb %ymm3, %r14d - 0xc5, 0xed, 0x74, 0xd1, //0x00004d5e vpcmpeqb %ymm1, %ymm2, %ymm2 - 0xc5, 0xfd, 0xd7, 0xca, //0x00004d62 vpmovmskb %ymm2, %ecx - 0x85, 0xc9, //0x00004d66 testl %ecx, %ecx - 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x00004d68 jne LBB0_1038 - 0x4d, 0x85, 0xe4, //0x00004d6e testq %r12, %r12 - 0x0f, 0x85, 0x08, 0x00, 0x00, 0x00, //0x00004d71 jne LBB0_1038 - 0x45, 0x31, 0xe4, //0x00004d77 xorl %r12d, %r12d - 0xe9, 0x31, 0x00, 0x00, 0x00, //0x00004d7a jmp LBB0_1039 - //0x00004d7f LBB0_1038 - 0x44, 0x89, 0xe6, //0x00004d7f movl %r12d, %esi - 0xf7, 0xd6, //0x00004d82 notl %esi - 0x21, 0xce, //0x00004d84 andl %ecx, %esi - 0x8d, 0x14, 0x36, //0x00004d86 leal (%rsi,%rsi), %edx - 0x44, 0x09, 0xe2, //0x00004d89 orl %r12d, %edx - 0x89, 0xd7, //0x00004d8c movl %edx, %edi - 0xf7, 0xd7, //0x00004d8e notl %edi - 0x21, 0xcf, //0x00004d90 andl %ecx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00004d92 andl $-1431655766, %edi - 0x45, 0x31, 0xe4, //0x00004d98 xorl %r12d, %r12d - 0x01, 0xf7, //0x00004d9b addl %esi, %edi - 0x41, 0x0f, 0x92, 0xc4, //0x00004d9d setb %r12b - 0x01, 0xff, //0x00004da1 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00004da3 xorl $1431655765, %edi - 0x21, 0xd7, //0x00004da9 andl %edx, %edi - 0xf7, 0xd7, //0x00004dab notl %edi - 0x41, 0x21, 0xfe, //0x00004dad andl %edi, %r14d - //0x00004db0 LBB0_1039 - 0x4d, 0x85, 0xf6, //0x00004db0 testq %r14, %r14 - 0x0f, 0x85, 0xde, 0x05, 0x00, 0x00, //0x00004db3 jne LBB0_1096 - 0x49, 0x83, 0xc7, 0x20, //0x00004db9 addq $32, %r15 - 0x49, 0x8d, 0x0c, 0x18, //0x00004dbd leaq (%r8,%rbx), %rcx - 0x48, 0x83, 0xc1, 0xe0, //0x00004dc1 addq $-32, %rcx - 0x48, 0x83, 0xc3, 0xe0, //0x00004dc5 addq $-32, %rbx - 0x48, 0x83, 0xf9, 0x3f, //0x00004dc9 cmpq $63, %rcx - 0x0f, 0x8f, 0x7c, 0xff, 0xff, 0xff, //0x00004dcd jg LBB0_1035 - 0x4d, 0x85, 0xe4, //0x00004dd3 testq %r12, %r12 - 0x0f, 0x85, 0x49, 0x08, 0x00, 0x00, //0x00004dd6 jne LBB0_1132 - 0x4b, 0x8d, 0x14, 0x0f, //0x00004ddc leaq (%r15,%r9), %rdx - 0x48, 0x83, 0xc2, 0x01, //0x00004de0 addq $1, %rdx - 0x49, 0xf7, 0xd7, //0x00004de4 notq %r15 - 0x4d, 0x01, 0xc7, //0x00004de7 addq %r8, %r15 - //0x00004dea LBB0_1043 - 0x4d, 0x85, 0xff, //0x00004dea testq %r15, %r15 - 0x48, 0x8b, 0x7c, 0x24, 0x08, //0x00004ded movq $8(%rsp), %rdi - 0x0f, 0x8e, 0x9d, 0xfe, 0xff, 0xff, //0x00004df2 jle LBB0_1026 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00004df8 movq $-1, %r13 - 0xe9, 0xd1, 0x05, 0x00, 0x00, //0x00004dff jmp LBB0_1098 - //0x00004e04 LBB0_1045 - 0x4d, 0x8b, 0x27, //0x00004e04 movq (%r15), %r12 - 0x49, 0x29, 0xd4, //0x00004e07 subq %rdx, %r12 - 0x49, 0x01, 0xd3, //0x00004e0a addq %rdx, %r11 - 0x45, 0x31, 0xf6, //0x00004e0d xorl %r14d, %r14d - 0xc5, 0xfe, 0x6f, 0x05, 0x88, 0xb2, 0xff, 0xff, //0x00004e10 vmovdqu $-19832(%rip), %ymm0 /* LCPI0_8+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x0d, 0x60, 0xb2, 0xff, 0xff, //0x00004e18 vmovdqu $-19872(%rip), %ymm1 /* LCPI0_7+0(%rip) */ - 0xc5, 0xe9, 0x76, 0xd2, //0x00004e20 vpcmpeqd %xmm2, %xmm2, %xmm2 - 0xc5, 0xfe, 0x6f, 0x1d, 0xd4, 0xb2, 0xff, 0xff, //0x00004e24 vmovdqu $-19756(%rip), %ymm3 /* LCPI0_11+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x2c, 0xb2, 0xff, 0xff, //0x00004e2c vmovdqu $-19924(%rip), %ymm4 /* LCPI0_3+0(%rip) */ - 0xc4, 0x41, 0x31, 0xef, 0xc9, //0x00004e34 vpxor %xmm9, %xmm9, %xmm9 - 0x45, 0x31, 0xc9, //0x00004e39 xorl %r9d, %r9d - 0x45, 0x31, 0xc0, //0x00004e3c xorl %r8d, %r8d - 0x31, 0xdb, //0x00004e3f xorl %ebx, %ebx - 0x49, 0x83, 0xfc, 0x40, //0x00004e41 cmpq $64, %r12 - 0x0f, 0x8c, 0x3d, 0x01, 0x00, 0x00, //0x00004e45 jl LBB0_1054 - //0x00004e4b LBB0_1048 - 0xc4, 0xc1, 0x7e, 0x6f, 0x3b, //0x00004e4b vmovdqu (%r11), %ymm7 - 0xc4, 0xc1, 0x7e, 0x6f, 0x73, 0x20, //0x00004e50 vmovdqu $32(%r11), %ymm6 - 0xc5, 0x45, 0x74, 0xc0, //0x00004e56 vpcmpeqb %ymm0, %ymm7, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xf0, //0x00004e5a vpmovmskb %ymm8, %esi - 0xc5, 0x4d, 0x74, 0xc0, //0x00004e5f vpcmpeqb %ymm0, %ymm6, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x00004e63 vpmovmskb %ymm8, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00004e68 shlq $32, %rcx - 0x48, 0x09, 0xce, //0x00004e6c orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00004e6f movq %rsi, %rcx - 0x4c, 0x09, 0xc9, //0x00004e72 orq %r9, %rcx - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00004e75 jne LBB0_1050 - 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00004e7b movq $-1, %rsi - 0x45, 0x31, 0xc9, //0x00004e82 xorl %r9d, %r9d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00004e85 jmp LBB0_1051 - //0x00004e8a LBB0_1050 - 0x4c, 0x89, 0xc9, //0x00004e8a movq %r9, %rcx - 0x48, 0xf7, 0xd1, //0x00004e8d notq %rcx - 0x48, 0x21, 0xf1, //0x00004e90 andq %rsi, %rcx - 0x4c, 0x8d, 0x14, 0x09, //0x00004e93 leaq (%rcx,%rcx), %r10 - 0x4d, 0x09, 0xca, //0x00004e97 orq %r9, %r10 - 0x4c, 0x89, 0xd7, //0x00004e9a movq %r10, %rdi - 0x48, 0xf7, 0xd7, //0x00004e9d notq %rdi - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00004ea0 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd6, //0x00004eaa andq %rdx, %rsi - 0x48, 0x21, 0xfe, //0x00004ead andq %rdi, %rsi - 0x45, 0x31, 0xc9, //0x00004eb0 xorl %r9d, %r9d - 0x48, 0x01, 0xce, //0x00004eb3 addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc1, //0x00004eb6 setb %r9b - 0x48, 0x01, 0xf6, //0x00004eba addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00004ebd movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00004ec7 xorq %rcx, %rsi - 0x4c, 0x21, 0xd6, //0x00004eca andq %r10, %rsi - 0x48, 0xf7, 0xd6, //0x00004ecd notq %rsi - //0x00004ed0 LBB0_1051 - 0xc5, 0x4d, 0x74, 0xc1, //0x00004ed0 vpcmpeqb %ymm1, %ymm6, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x00004ed4 vpmovmskb %ymm8, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00004ed9 shlq $32, %rcx - 0xc5, 0x45, 0x74, 0xc1, //0x00004edd vpcmpeqb %ymm1, %ymm7, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xd0, //0x00004ee1 vpmovmskb %ymm8, %edx - 0x48, 0x09, 0xca, //0x00004ee6 orq %rcx, %rdx - 0x48, 0x21, 0xf2, //0x00004ee9 andq %rsi, %rdx - 0xc4, 0xe1, 0xf9, 0x6e, 0xea, //0x00004eec vmovq %rdx, %xmm5 - 0xc4, 0xe3, 0x51, 0x44, 0xea, 0x00, //0x00004ef1 vpclmulqdq $0, %xmm2, %xmm5, %xmm5 - 0xc4, 0xc1, 0xf9, 0x7e, 0xea, //0x00004ef7 vmovq %xmm5, %r10 - 0x4d, 0x31, 0xf2, //0x00004efc xorq %r14, %r10 - 0xc5, 0xc5, 0x74, 0xeb, //0x00004eff vpcmpeqb %ymm3, %ymm7, %ymm5 - 0xc5, 0xfd, 0xd7, 0xd5, //0x00004f03 vpmovmskb %ymm5, %edx - 0xc5, 0xcd, 0x74, 0xeb, //0x00004f07 vpcmpeqb %ymm3, %ymm6, %ymm5 - 0xc5, 0xfd, 0xd7, 0xcd, //0x00004f0b vpmovmskb %ymm5, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00004f0f shlq $32, %rcx - 0x48, 0x09, 0xca, //0x00004f13 orq %rcx, %rdx - 0x4c, 0x89, 0xd1, //0x00004f16 movq %r10, %rcx - 0x48, 0xf7, 0xd1, //0x00004f19 notq %rcx - 0x48, 0x21, 0xca, //0x00004f1c andq %rcx, %rdx - 0xc5, 0xc5, 0x74, 0xec, //0x00004f1f vpcmpeqb %ymm4, %ymm7, %ymm5 - 0xc5, 0xfd, 0xd7, 0xfd, //0x00004f23 vpmovmskb %ymm5, %edi - 0xc5, 0xcd, 0x74, 0xec, //0x00004f27 vpcmpeqb %ymm4, %ymm6, %ymm5 - 0xc5, 0xfd, 0xd7, 0xf5, //0x00004f2b vpmovmskb %ymm5, %esi - 0x48, 0xc1, 0xe6, 0x20, //0x00004f2f shlq $32, %rsi - 0x48, 0x09, 0xf7, //0x00004f33 orq %rsi, %rdi - 0x48, 0x21, 0xcf, //0x00004f36 andq %rcx, %rdi - 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x00004f39 je LBB0_1046 - //0x00004f3f LBB0_1052 - 0x48, 0x8d, 0x4f, 0xff, //0x00004f3f leaq $-1(%rdi), %rcx - 0x48, 0x89, 0xce, //0x00004f43 movq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00004f46 andq %rdx, %rsi - 0xf3, 0x48, 0x0f, 0xb8, 0xf6, //0x00004f49 popcntq %rsi, %rsi - 0x4c, 0x01, 0xc6, //0x00004f4e addq %r8, %rsi - 0x48, 0x39, 0xde, //0x00004f51 cmpq %rbx, %rsi - 0x0f, 0x86, 0x04, 0x04, 0x00, 0x00, //0x00004f54 jbe LBB0_1095 - 0x48, 0x83, 0xc3, 0x01, //0x00004f5a addq $1, %rbx - 0x48, 0x21, 0xcf, //0x00004f5e andq %rcx, %rdi - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00004f61 jne LBB0_1052 - //0x00004f67 LBB0_1046 - 0x49, 0xc1, 0xfa, 0x3f, //0x00004f67 sarq $63, %r10 - 0xf3, 0x48, 0x0f, 0xb8, 0xca, //0x00004f6b popcntq %rdx, %rcx - 0x49, 0x01, 0xc8, //0x00004f70 addq %rcx, %r8 - 0x49, 0x83, 0xc3, 0x40, //0x00004f73 addq $64, %r11 - 0x49, 0x83, 0xc4, 0xc0, //0x00004f77 addq $-64, %r12 - 0x4d, 0x89, 0xd6, //0x00004f7b movq %r10, %r14 - 0x49, 0x83, 0xfc, 0x40, //0x00004f7e cmpq $64, %r12 - 0x0f, 0x8d, 0xc3, 0xfe, 0xff, 0xff, //0x00004f82 jge LBB0_1048 - //0x00004f88 LBB0_1054 - 0x4d, 0x85, 0xe4, //0x00004f88 testq %r12, %r12 - 0x0f, 0x8e, 0x7a, 0x06, 0x00, 0x00, //0x00004f8b jle LBB0_1131 - 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x60, //0x00004f91 vmovdqu %ymm9, $96(%rsp) - 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x40, //0x00004f97 vmovdqu %ymm9, $64(%rsp) - 0x44, 0x89, 0xd9, //0x00004f9d movl %r11d, %ecx - 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00004fa0 andl $4095, %ecx - 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00004fa6 cmpl $4033, %ecx - 0x0f, 0x82, 0x99, 0xfe, 0xff, 0xff, //0x00004fac jb LBB0_1048 - 0x49, 0x83, 0xfc, 0x20, //0x00004fb2 cmpq $32, %r12 - 0x0f, 0x82, 0x1e, 0x00, 0x00, 0x00, //0x00004fb6 jb LBB0_1058 - 0xc4, 0xc1, 0x7e, 0x6f, 0x2b, //0x00004fbc vmovdqu (%r11), %ymm5 - 0xc5, 0xfe, 0x7f, 0x6c, 0x24, 0x40, //0x00004fc1 vmovdqu %ymm5, $64(%rsp) - 0x49, 0x83, 0xc3, 0x20, //0x00004fc7 addq $32, %r11 - 0x49, 0x8d, 0x54, 0x24, 0xe0, //0x00004fcb leaq $-32(%r12), %rdx - 0x48, 0x8d, 0x7c, 0x24, 0x60, //0x00004fd0 leaq $96(%rsp), %rdi - 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00004fd5 jmp LBB0_1059 - //0x00004fda LBB0_1058 - 0x48, 0x8d, 0x7c, 0x24, 0x40, //0x00004fda leaq $64(%rsp), %rdi - 0x4c, 0x89, 0xe2, //0x00004fdf movq %r12, %rdx - //0x00004fe2 LBB0_1059 - 0x48, 0x83, 0xfa, 0x10, //0x00004fe2 cmpq $16, %rdx - 0x0f, 0x82, 0x5a, 0x00, 0x00, 0x00, //0x00004fe6 jb LBB0_1060 - 0xc4, 0xc1, 0x7a, 0x6f, 0x2b, //0x00004fec vmovdqu (%r11), %xmm5 - 0xc5, 0xfa, 0x7f, 0x2f, //0x00004ff1 vmovdqu %xmm5, (%rdi) - 0x49, 0x83, 0xc3, 0x10, //0x00004ff5 addq $16, %r11 - 0x48, 0x83, 0xc7, 0x10, //0x00004ff9 addq $16, %rdi - 0x48, 0x83, 0xc2, 0xf0, //0x00004ffd addq $-16, %rdx - 0x48, 0x83, 0xfa, 0x08, //0x00005001 cmpq $8, %rdx - 0x0f, 0x83, 0x45, 0x00, 0x00, 0x00, //0x00005005 jae LBB0_1065 - //0x0000500b LBB0_1061 - 0x48, 0x83, 0xfa, 0x04, //0x0000500b cmpq $4, %rdx - 0x0f, 0x8c, 0x57, 0x00, 0x00, 0x00, //0x0000500f jl LBB0_1062 - //0x00005015 LBB0_1066 - 0x41, 0x8b, 0x0b, //0x00005015 movl (%r11), %ecx - 0x89, 0x0f, //0x00005018 movl %ecx, (%rdi) - 0x49, 0x83, 0xc3, 0x04, //0x0000501a addq $4, %r11 - 0x48, 0x83, 0xc7, 0x04, //0x0000501e addq $4, %rdi - 0x48, 0x83, 0xc2, 0xfc, //0x00005022 addq $-4, %rdx - 0x48, 0x83, 0xfa, 0x02, //0x00005026 cmpq $2, %rdx - 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x0000502a jae LBB0_1067 - //0x00005030 LBB0_1063 - 0x4c, 0x89, 0xde, //0x00005030 movq %r11, %rsi - 0x4c, 0x8d, 0x5c, 0x24, 0x40, //0x00005033 leaq $64(%rsp), %r11 - 0x48, 0x85, 0xd2, //0x00005038 testq %rdx, %rdx - 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x0000503b jne LBB0_1068 - 0xe9, 0x05, 0xfe, 0xff, 0xff, //0x00005041 jmp LBB0_1048 - //0x00005046 LBB0_1060 - 0x48, 0x83, 0xfa, 0x08, //0x00005046 cmpq $8, %rdx - 0x0f, 0x82, 0xbb, 0xff, 0xff, 0xff, //0x0000504a jb LBB0_1061 - //0x00005050 LBB0_1065 - 0x49, 0x8b, 0x0b, //0x00005050 movq (%r11), %rcx - 0x48, 0x89, 0x0f, //0x00005053 movq %rcx, (%rdi) - 0x49, 0x83, 0xc3, 0x08, //0x00005056 addq $8, %r11 - 0x48, 0x83, 0xc7, 0x08, //0x0000505a addq $8, %rdi - 0x48, 0x83, 0xc2, 0xf8, //0x0000505e addq $-8, %rdx - 0x48, 0x83, 0xfa, 0x04, //0x00005062 cmpq $4, %rdx - 0x0f, 0x8d, 0xa9, 0xff, 0xff, 0xff, //0x00005066 jge LBB0_1066 - //0x0000506c LBB0_1062 - 0x48, 0x83, 0xfa, 0x02, //0x0000506c cmpq $2, %rdx - 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x00005070 jb LBB0_1063 - //0x00005076 LBB0_1067 - 0x41, 0x0f, 0xb7, 0x0b, //0x00005076 movzwl (%r11), %ecx - 0x66, 0x89, 0x0f, //0x0000507a movw %cx, (%rdi) - 0x49, 0x83, 0xc3, 0x02, //0x0000507d addq $2, %r11 - 0x48, 0x83, 0xc7, 0x02, //0x00005081 addq $2, %rdi - 0x48, 0x83, 0xc2, 0xfe, //0x00005085 addq $-2, %rdx - 0x4c, 0x89, 0xde, //0x00005089 movq %r11, %rsi - 0x4c, 0x8d, 0x5c, 0x24, 0x40, //0x0000508c leaq $64(%rsp), %r11 - 0x48, 0x85, 0xd2, //0x00005091 testq %rdx, %rdx - 0x0f, 0x84, 0xb1, 0xfd, 0xff, 0xff, //0x00005094 je LBB0_1048 - //0x0000509a LBB0_1068 - 0x8a, 0x0e, //0x0000509a movb (%rsi), %cl - 0x88, 0x0f, //0x0000509c movb %cl, (%rdi) - 0x4c, 0x8d, 0x5c, 0x24, 0x40, //0x0000509e leaq $64(%rsp), %r11 - 0xe9, 0xa3, 0xfd, 0xff, 0xff, //0x000050a3 jmp LBB0_1048 - //0x000050a8 LBB0_1069 - 0x48, 0x8d, 0x48, 0x05, //0x000050a8 leaq $5(%rax), %rcx - //0x000050ac LBB0_1070 - 0x49, 0x3b, 0x0f, //0x000050ac cmpq (%r15), %rcx - 0x0f, 0x86, 0xb5, 0xfb, 0xff, 0xff, //0x000050af jbe LBB0_1019 - 0xe9, 0xdb, 0xfb, 0xff, 0xff, //0x000050b5 jmp LBB0_1026 - //0x000050ba LBB0_1071 - 0x4d, 0x8b, 0x27, //0x000050ba movq (%r15), %r12 - 0x49, 0x29, 0xd4, //0x000050bd subq %rdx, %r12 - 0x49, 0x01, 0xd3, //0x000050c0 addq %rdx, %r11 - 0x45, 0x31, 0xf6, //0x000050c3 xorl %r14d, %r14d - 0xc5, 0xfe, 0x6f, 0x05, 0xd2, 0xaf, 0xff, 0xff, //0x000050c6 vmovdqu $-20526(%rip), %ymm0 /* LCPI0_8+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x0d, 0xaa, 0xaf, 0xff, 0xff, //0x000050ce vmovdqu $-20566(%rip), %ymm1 /* LCPI0_7+0(%rip) */ - 0xc5, 0xe9, 0x76, 0xd2, //0x000050d6 vpcmpeqd %xmm2, %xmm2, %xmm2 - 0xc5, 0xfe, 0x6f, 0x1d, 0xde, 0xaf, 0xff, 0xff, //0x000050da vmovdqu $-20514(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0xf6, 0xaf, 0xff, 0xff, //0x000050e2 vmovdqu $-20490(%rip), %ymm4 /* LCPI0_10+0(%rip) */ - 0xc4, 0x41, 0x31, 0xef, 0xc9, //0x000050ea vpxor %xmm9, %xmm9, %xmm9 - 0x45, 0x31, 0xc9, //0x000050ef xorl %r9d, %r9d - 0x45, 0x31, 0xc0, //0x000050f2 xorl %r8d, %r8d - 0x31, 0xdb, //0x000050f5 xorl %ebx, %ebx - 0x49, 0x83, 0xfc, 0x40, //0x000050f7 cmpq $64, %r12 - 0x0f, 0x8c, 0x3d, 0x01, 0x00, 0x00, //0x000050fb jl LBB0_1080 - //0x00005101 LBB0_1074 - 0xc4, 0xc1, 0x7e, 0x6f, 0x3b, //0x00005101 vmovdqu (%r11), %ymm7 - 0xc4, 0xc1, 0x7e, 0x6f, 0x73, 0x20, //0x00005106 vmovdqu $32(%r11), %ymm6 - 0xc5, 0x45, 0x74, 0xc0, //0x0000510c vpcmpeqb %ymm0, %ymm7, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xf0, //0x00005110 vpmovmskb %ymm8, %esi - 0xc5, 0x4d, 0x74, 0xc0, //0x00005115 vpcmpeqb %ymm0, %ymm6, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x00005119 vpmovmskb %ymm8, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x0000511e shlq $32, %rcx - 0x48, 0x09, 0xce, //0x00005122 orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00005125 movq %rsi, %rcx - 0x4c, 0x09, 0xc9, //0x00005128 orq %r9, %rcx - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x0000512b jne LBB0_1076 - 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00005131 movq $-1, %rsi - 0x45, 0x31, 0xc9, //0x00005138 xorl %r9d, %r9d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x0000513b jmp LBB0_1077 - //0x00005140 LBB0_1076 - 0x4c, 0x89, 0xc9, //0x00005140 movq %r9, %rcx - 0x48, 0xf7, 0xd1, //0x00005143 notq %rcx - 0x48, 0x21, 0xf1, //0x00005146 andq %rsi, %rcx - 0x4c, 0x8d, 0x14, 0x09, //0x00005149 leaq (%rcx,%rcx), %r10 - 0x4d, 0x09, 0xca, //0x0000514d orq %r9, %r10 - 0x4c, 0x89, 0xd7, //0x00005150 movq %r10, %rdi - 0x48, 0xf7, 0xd7, //0x00005153 notq %rdi - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00005156 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd6, //0x00005160 andq %rdx, %rsi - 0x48, 0x21, 0xfe, //0x00005163 andq %rdi, %rsi - 0x45, 0x31, 0xc9, //0x00005166 xorl %r9d, %r9d - 0x48, 0x01, 0xce, //0x00005169 addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc1, //0x0000516c setb %r9b - 0x48, 0x01, 0xf6, //0x00005170 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00005173 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x0000517d xorq %rcx, %rsi - 0x4c, 0x21, 0xd6, //0x00005180 andq %r10, %rsi - 0x48, 0xf7, 0xd6, //0x00005183 notq %rsi - //0x00005186 LBB0_1077 - 0xc5, 0x4d, 0x74, 0xc1, //0x00005186 vpcmpeqb %ymm1, %ymm6, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x0000518a vpmovmskb %ymm8, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x0000518f shlq $32, %rcx - 0xc5, 0x45, 0x74, 0xc1, //0x00005193 vpcmpeqb %ymm1, %ymm7, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xd0, //0x00005197 vpmovmskb %ymm8, %edx - 0x48, 0x09, 0xca, //0x0000519c orq %rcx, %rdx - 0x48, 0x21, 0xf2, //0x0000519f andq %rsi, %rdx - 0xc4, 0xe1, 0xf9, 0x6e, 0xea, //0x000051a2 vmovq %rdx, %xmm5 - 0xc4, 0xe3, 0x51, 0x44, 0xea, 0x00, //0x000051a7 vpclmulqdq $0, %xmm2, %xmm5, %xmm5 - 0xc4, 0xc1, 0xf9, 0x7e, 0xea, //0x000051ad vmovq %xmm5, %r10 - 0x4d, 0x31, 0xf2, //0x000051b2 xorq %r14, %r10 - 0xc5, 0xc5, 0x74, 0xeb, //0x000051b5 vpcmpeqb %ymm3, %ymm7, %ymm5 - 0xc5, 0xfd, 0xd7, 0xd5, //0x000051b9 vpmovmskb %ymm5, %edx - 0xc5, 0xcd, 0x74, 0xeb, //0x000051bd vpcmpeqb %ymm3, %ymm6, %ymm5 - 0xc5, 0xfd, 0xd7, 0xcd, //0x000051c1 vpmovmskb %ymm5, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x000051c5 shlq $32, %rcx - 0x48, 0x09, 0xca, //0x000051c9 orq %rcx, %rdx - 0x4c, 0x89, 0xd1, //0x000051cc movq %r10, %rcx - 0x48, 0xf7, 0xd1, //0x000051cf notq %rcx - 0x48, 0x21, 0xca, //0x000051d2 andq %rcx, %rdx - 0xc5, 0xc5, 0x74, 0xec, //0x000051d5 vpcmpeqb %ymm4, %ymm7, %ymm5 - 0xc5, 0xfd, 0xd7, 0xfd, //0x000051d9 vpmovmskb %ymm5, %edi - 0xc5, 0xcd, 0x74, 0xec, //0x000051dd vpcmpeqb %ymm4, %ymm6, %ymm5 - 0xc5, 0xfd, 0xd7, 0xf5, //0x000051e1 vpmovmskb %ymm5, %esi - 0x48, 0xc1, 0xe6, 0x20, //0x000051e5 shlq $32, %rsi - 0x48, 0x09, 0xf7, //0x000051e9 orq %rsi, %rdi - 0x48, 0x21, 0xcf, //0x000051ec andq %rcx, %rdi - 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x000051ef je LBB0_1072 - //0x000051f5 LBB0_1078 - 0x48, 0x8d, 0x4f, 0xff, //0x000051f5 leaq $-1(%rdi), %rcx - 0x48, 0x89, 0xce, //0x000051f9 movq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x000051fc andq %rdx, %rsi - 0xf3, 0x48, 0x0f, 0xb8, 0xf6, //0x000051ff popcntq %rsi, %rsi - 0x4c, 0x01, 0xc6, //0x00005204 addq %r8, %rsi - 0x48, 0x39, 0xde, //0x00005207 cmpq %rbx, %rsi - 0x0f, 0x86, 0x4e, 0x01, 0x00, 0x00, //0x0000520a jbe LBB0_1095 - 0x48, 0x83, 0xc3, 0x01, //0x00005210 addq $1, %rbx - 0x48, 0x21, 0xcf, //0x00005214 andq %rcx, %rdi - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00005217 jne LBB0_1078 - //0x0000521d LBB0_1072 - 0x49, 0xc1, 0xfa, 0x3f, //0x0000521d sarq $63, %r10 - 0xf3, 0x48, 0x0f, 0xb8, 0xca, //0x00005221 popcntq %rdx, %rcx - 0x49, 0x01, 0xc8, //0x00005226 addq %rcx, %r8 - 0x49, 0x83, 0xc3, 0x40, //0x00005229 addq $64, %r11 - 0x49, 0x83, 0xc4, 0xc0, //0x0000522d addq $-64, %r12 - 0x4d, 0x89, 0xd6, //0x00005231 movq %r10, %r14 - 0x49, 0x83, 0xfc, 0x40, //0x00005234 cmpq $64, %r12 - 0x0f, 0x8d, 0xc3, 0xfe, 0xff, 0xff, //0x00005238 jge LBB0_1074 - //0x0000523e LBB0_1080 - 0x4d, 0x85, 0xe4, //0x0000523e testq %r12, %r12 - 0x0f, 0x8e, 0xc4, 0x03, 0x00, 0x00, //0x00005241 jle LBB0_1131 - 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x60, //0x00005247 vmovdqu %ymm9, $96(%rsp) - 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x40, //0x0000524d vmovdqu %ymm9, $64(%rsp) - 0x44, 0x89, 0xd9, //0x00005253 movl %r11d, %ecx - 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00005256 andl $4095, %ecx - 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x0000525c cmpl $4033, %ecx - 0x0f, 0x82, 0x99, 0xfe, 0xff, 0xff, //0x00005262 jb LBB0_1074 - 0x49, 0x83, 0xfc, 0x20, //0x00005268 cmpq $32, %r12 - 0x0f, 0x82, 0x1e, 0x00, 0x00, 0x00, //0x0000526c jb LBB0_1084 - 0xc4, 0xc1, 0x7e, 0x6f, 0x2b, //0x00005272 vmovdqu (%r11), %ymm5 - 0xc5, 0xfe, 0x7f, 0x6c, 0x24, 0x40, //0x00005277 vmovdqu %ymm5, $64(%rsp) - 0x49, 0x83, 0xc3, 0x20, //0x0000527d addq $32, %r11 - 0x49, 0x8d, 0x54, 0x24, 0xe0, //0x00005281 leaq $-32(%r12), %rdx - 0x48, 0x8d, 0x7c, 0x24, 0x60, //0x00005286 leaq $96(%rsp), %rdi - 0xe9, 0x08, 0x00, 0x00, 0x00, //0x0000528b jmp LBB0_1085 - //0x00005290 LBB0_1084 - 0x48, 0x8d, 0x7c, 0x24, 0x40, //0x00005290 leaq $64(%rsp), %rdi - 0x4c, 0x89, 0xe2, //0x00005295 movq %r12, %rdx - //0x00005298 LBB0_1085 - 0x48, 0x83, 0xfa, 0x10, //0x00005298 cmpq $16, %rdx - 0x0f, 0x82, 0x5a, 0x00, 0x00, 0x00, //0x0000529c jb LBB0_1086 - 0xc4, 0xc1, 0x7a, 0x6f, 0x2b, //0x000052a2 vmovdqu (%r11), %xmm5 - 0xc5, 0xfa, 0x7f, 0x2f, //0x000052a7 vmovdqu %xmm5, (%rdi) - 0x49, 0x83, 0xc3, 0x10, //0x000052ab addq $16, %r11 - 0x48, 0x83, 0xc7, 0x10, //0x000052af addq $16, %rdi - 0x48, 0x83, 0xc2, 0xf0, //0x000052b3 addq $-16, %rdx - 0x48, 0x83, 0xfa, 0x08, //0x000052b7 cmpq $8, %rdx - 0x0f, 0x83, 0x45, 0x00, 0x00, 0x00, //0x000052bb jae LBB0_1091 - //0x000052c1 LBB0_1087 - 0x48, 0x83, 0xfa, 0x04, //0x000052c1 cmpq $4, %rdx - 0x0f, 0x8c, 0x57, 0x00, 0x00, 0x00, //0x000052c5 jl LBB0_1088 - //0x000052cb LBB0_1092 - 0x41, 0x8b, 0x0b, //0x000052cb movl (%r11), %ecx - 0x89, 0x0f, //0x000052ce movl %ecx, (%rdi) - 0x49, 0x83, 0xc3, 0x04, //0x000052d0 addq $4, %r11 - 0x48, 0x83, 0xc7, 0x04, //0x000052d4 addq $4, %rdi - 0x48, 0x83, 0xc2, 0xfc, //0x000052d8 addq $-4, %rdx - 0x48, 0x83, 0xfa, 0x02, //0x000052dc cmpq $2, %rdx - 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x000052e0 jae LBB0_1093 - //0x000052e6 LBB0_1089 - 0x4c, 0x89, 0xde, //0x000052e6 movq %r11, %rsi - 0x4c, 0x8d, 0x5c, 0x24, 0x40, //0x000052e9 leaq $64(%rsp), %r11 - 0x48, 0x85, 0xd2, //0x000052ee testq %rdx, %rdx - 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x000052f1 jne LBB0_1094 - 0xe9, 0x05, 0xfe, 0xff, 0xff, //0x000052f7 jmp LBB0_1074 - //0x000052fc LBB0_1086 - 0x48, 0x83, 0xfa, 0x08, //0x000052fc cmpq $8, %rdx - 0x0f, 0x82, 0xbb, 0xff, 0xff, 0xff, //0x00005300 jb LBB0_1087 - //0x00005306 LBB0_1091 - 0x49, 0x8b, 0x0b, //0x00005306 movq (%r11), %rcx - 0x48, 0x89, 0x0f, //0x00005309 movq %rcx, (%rdi) - 0x49, 0x83, 0xc3, 0x08, //0x0000530c addq $8, %r11 - 0x48, 0x83, 0xc7, 0x08, //0x00005310 addq $8, %rdi - 0x48, 0x83, 0xc2, 0xf8, //0x00005314 addq $-8, %rdx - 0x48, 0x83, 0xfa, 0x04, //0x00005318 cmpq $4, %rdx - 0x0f, 0x8d, 0xa9, 0xff, 0xff, 0xff, //0x0000531c jge LBB0_1092 - //0x00005322 LBB0_1088 - 0x48, 0x83, 0xfa, 0x02, //0x00005322 cmpq $2, %rdx - 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x00005326 jb LBB0_1089 - //0x0000532c LBB0_1093 - 0x41, 0x0f, 0xb7, 0x0b, //0x0000532c movzwl (%r11), %ecx - 0x66, 0x89, 0x0f, //0x00005330 movw %cx, (%rdi) - 0x49, 0x83, 0xc3, 0x02, //0x00005333 addq $2, %r11 - 0x48, 0x83, 0xc7, 0x02, //0x00005337 addq $2, %rdi - 0x48, 0x83, 0xc2, 0xfe, //0x0000533b addq $-2, %rdx - 0x4c, 0x89, 0xde, //0x0000533f movq %r11, %rsi - 0x4c, 0x8d, 0x5c, 0x24, 0x40, //0x00005342 leaq $64(%rsp), %r11 - 0x48, 0x85, 0xd2, //0x00005347 testq %rdx, %rdx - 0x0f, 0x84, 0xb1, 0xfd, 0xff, 0xff, //0x0000534a je LBB0_1074 - //0x00005350 LBB0_1094 - 0x8a, 0x0e, //0x00005350 movb (%rsi), %cl - 0x88, 0x0f, //0x00005352 movb %cl, (%rdi) - 0x4c, 0x8d, 0x5c, 0x24, 0x40, //0x00005354 leaq $64(%rsp), %r11 - 0xe9, 0xa3, 0xfd, 0xff, 0xff, //0x00005359 jmp LBB0_1074 - //0x0000535e LBB0_1095 - 0x49, 0x8b, 0x0f, //0x0000535e movq (%r15), %rcx - 0x48, 0x0f, 0xbc, 0xd7, //0x00005361 bsfq %rdi, %rdx - 0x4c, 0x29, 0xe2, //0x00005365 subq %r12, %rdx - 0x48, 0x01, 0xd1, //0x00005368 addq %rdx, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x0000536b addq $1, %rcx - 0x48, 0x8b, 0x74, 0x24, 0x08, //0x0000536f movq $8(%rsp), %rsi - 0x48, 0x89, 0x0e, //0x00005374 movq %rcx, (%rsi) - 0x49, 0x8b, 0x17, //0x00005377 movq (%r15), %rdx - 0x48, 0x39, 0xd1, //0x0000537a cmpq %rdx, %rcx - 0x48, 0x0f, 0x47, 0xca, //0x0000537d cmovaq %rdx, %rcx - 0x48, 0x89, 0x0e, //0x00005381 movq %rcx, (%rsi) - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00005384 movq $-1, %rcx - 0x48, 0x0f, 0x47, 0xc1, //0x0000538b cmovaq %rcx, %rax - 0x49, 0x89, 0xc5, //0x0000538f movq %rax, %r13 - 0xe9, 0xfe, 0xf8, 0xff, 0xff, //0x00005392 jmp LBB0_1026 - //0x00005397 LBB0_1096 - 0x41, 0x0f, 0xbc, 0xce, //0x00005397 bsfl %r14d, %ecx - 0x48, 0x01, 0xc1, //0x0000539b addq %rax, %rcx - 0x4c, 0x01, 0xf9, //0x0000539e addq %r15, %rcx - 0x48, 0x83, 0xc1, 0x02, //0x000053a1 addq $2, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x08, //0x000053a5 movq $8(%rsp), %rdx - 0x48, 0x89, 0x0a, //0x000053aa movq %rcx, (%rdx) - 0x49, 0x89, 0xc5, //0x000053ad movq %rax, %r13 - 0xe9, 0xe0, 0xf8, 0xff, 0xff, //0x000053b0 jmp LBB0_1026 - //0x000053b5 LBB0_1107 - 0x49, 0x89, 0x10, //0x000053b5 movq %rdx, (%r8) - 0xe9, 0xd8, 0xf8, 0xff, 0xff, //0x000053b8 jmp LBB0_1026 - //0x000053bd LBB0_1097 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000053bd movq $-2, %rcx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x000053c4 movl $2, %esi - 0x48, 0x01, 0xf2, //0x000053c9 addq %rsi, %rdx - 0x49, 0x01, 0xcf, //0x000053cc addq %rcx, %r15 - 0x0f, 0x8e, 0xc0, 0xf8, 0xff, 0xff, //0x000053cf jle LBB0_1026 - //0x000053d5 LBB0_1098 - 0x0f, 0xb6, 0x0a, //0x000053d5 movzbl (%rdx), %ecx - 0x80, 0xf9, 0x5c, //0x000053d8 cmpb $92, %cl - 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x000053db je LBB0_1097 - 0x80, 0xf9, 0x22, //0x000053e1 cmpb $34, %cl - 0x0f, 0x84, 0xa7, 0x01, 0x00, 0x00, //0x000053e4 je LBB0_1120 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000053ea movq $-1, %rcx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x000053f1 movl $1, %esi - 0x48, 0x01, 0xf2, //0x000053f6 addq %rsi, %rdx - 0x49, 0x01, 0xcf, //0x000053f9 addq %rcx, %r15 - 0x0f, 0x8f, 0xd3, 0xff, 0xff, 0xff, //0x000053fc jg LBB0_1098 - 0xe9, 0x8e, 0xf8, 0xff, 0xff, //0x00005402 jmp LBB0_1026 - //0x00005407 LBB0_1101 - 0x4c, 0x89, 0x8c, 0x24, 0x98, 0x00, 0x00, 0x00, //0x00005407 movq %r9, $152(%rsp) - //0x0000540f LBB0_1102 - 0x48, 0x8b, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, //0x0000540f movq $152(%rsp), %rax - //0x00005417 LBB0_1103 - 0x49, 0x89, 0x00, //0x00005417 movq %rax, (%r8) - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x0000541a movq $-1, %r13 - 0xe9, 0x6f, 0xf8, 0xff, 0xff, //0x00005421 jmp LBB0_1026 - //0x00005426 LBB0_1104 - 0x66, 0x0f, 0xbc, 0xc9, //0x00005426 bsfw %cx, %cx - 0x0f, 0xb7, 0xc9, //0x0000542a movzwl %cx, %ecx - 0x48, 0x29, 0xf1, //0x0000542d subq %rsi, %rcx - 0xe9, 0x35, 0xf8, 0xff, 0xff, //0x00005430 jmp LBB0_1019 - //0x00005435 LBB0_1105 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00005435 movq $-1, %rcx - 0xe9, 0x0c, 0x01, 0x00, 0x00, //0x0000543c jmp LBB0_1106 - //0x00005441 LBB0_1109 - 0x49, 0xc7, 0xc5, 0xfe, 0xff, 0xff, 0xff, //0x00005441 movq $-2, %r13 - 0x80, 0xfa, 0x61, //0x00005448 cmpb $97, %dl - 0x0f, 0x85, 0x44, 0xf8, 0xff, 0xff, //0x0000544b jne LBB0_1026 - 0x48, 0x8d, 0x41, 0x01, //0x00005451 leaq $1(%rcx), %rax - 0x49, 0x89, 0x00, //0x00005455 movq %rax, (%r8) - 0x41, 0x80, 0x7c, 0x0f, 0x01, 0x6c, //0x00005458 cmpb $108, $1(%r15,%rcx) - 0x0f, 0x85, 0x31, 0xf8, 0xff, 0xff, //0x0000545e jne LBB0_1026 - 0x48, 0x8d, 0x41, 0x02, //0x00005464 leaq $2(%rcx), %rax - 0x49, 0x89, 0x00, //0x00005468 movq %rax, (%r8) - 0x41, 0x80, 0x7c, 0x0f, 0x02, 0x73, //0x0000546b cmpb $115, $2(%r15,%rcx) - 0x0f, 0x85, 0x1e, 0xf8, 0xff, 0xff, //0x00005471 jne LBB0_1026 - 0x48, 0x8d, 0x41, 0x03, //0x00005477 leaq $3(%rcx), %rax - 0x49, 0x89, 0x00, //0x0000547b movq %rax, (%r8) - 0x41, 0x80, 0x7c, 0x0f, 0x03, 0x65, //0x0000547e cmpb $101, $3(%r15,%rcx) - 0x0f, 0x85, 0x0b, 0xf8, 0xff, 0xff, //0x00005484 jne LBB0_1026 - 0x48, 0x83, 0xc1, 0x04, //0x0000548a addq $4, %rcx - 0x48, 0x8b, 0x44, 0x24, 0x08, //0x0000548e movq $8(%rsp), %rax - 0x48, 0x89, 0x08, //0x00005493 movq %rcx, (%rax) - 0xe9, 0xfa, 0xf7, 0xff, 0xff, //0x00005496 jmp LBB0_1026 - //0x0000549b LBB0_848 - 0x4d, 0x89, 0x28, //0x0000549b movq %r13, (%r8) - 0x43, 0x80, 0x3c, 0x2f, 0x6e, //0x0000549e cmpb $110, (%r15,%r13) - 0x0f, 0x85, 0xe5, 0xf7, 0xff, 0xff, //0x000054a3 jne LBB0_1025 - 0x49, 0x89, 0x08, //0x000054a9 movq %rcx, (%r8) - 0x41, 0x80, 0x3c, 0x0f, 0x75, //0x000054ac cmpb $117, (%r15,%rcx) - 0x0f, 0x85, 0xd7, 0xf7, 0xff, 0xff, //0x000054b1 jne LBB0_1025 - 0x48, 0x8d, 0x41, 0x01, //0x000054b7 leaq $1(%rcx), %rax - 0x49, 0x89, 0x00, //0x000054bb movq %rax, (%r8) - 0x41, 0x80, 0x7c, 0x0f, 0x01, 0x6c, //0x000054be cmpb $108, $1(%r15,%rcx) - 0x0f, 0x85, 0xc4, 0xf7, 0xff, 0xff, //0x000054c4 jne LBB0_1025 - 0x48, 0x8d, 0x41, 0x02, //0x000054ca leaq $2(%rcx), %rax - 0x49, 0x89, 0x00, //0x000054ce movq %rax, (%r8) - 0x41, 0x80, 0x7c, 0x0f, 0x02, 0x6c, //0x000054d1 cmpb $108, $2(%r15,%rcx) - 0x0f, 0x85, 0xb1, 0xf7, 0xff, 0xff, //0x000054d7 jne LBB0_1025 - 0xe9, 0x42, 0x00, 0x00, 0x00, //0x000054dd jmp LBB0_1118 - //0x000054e2 LBB0_1114 - 0x4d, 0x89, 0x28, //0x000054e2 movq %r13, (%r8) - 0x43, 0x80, 0x3c, 0x2f, 0x74, //0x000054e5 cmpb $116, (%r15,%r13) - 0x0f, 0x85, 0x9e, 0xf7, 0xff, 0xff, //0x000054ea jne LBB0_1025 - 0x49, 0x89, 0x08, //0x000054f0 movq %rcx, (%r8) - 0x41, 0x80, 0x3c, 0x0f, 0x72, //0x000054f3 cmpb $114, (%r15,%rcx) - 0x0f, 0x85, 0x90, 0xf7, 0xff, 0xff, //0x000054f8 jne LBB0_1025 - 0x48, 0x8d, 0x41, 0x01, //0x000054fe leaq $1(%rcx), %rax - 0x49, 0x89, 0x00, //0x00005502 movq %rax, (%r8) - 0x41, 0x80, 0x7c, 0x0f, 0x01, 0x75, //0x00005505 cmpb $117, $1(%r15,%rcx) - 0x0f, 0x85, 0x7d, 0xf7, 0xff, 0xff, //0x0000550b jne LBB0_1025 - 0x48, 0x8d, 0x41, 0x02, //0x00005511 leaq $2(%rcx), %rax - 0x49, 0x89, 0x00, //0x00005515 movq %rax, (%r8) - 0x41, 0x80, 0x7c, 0x0f, 0x02, 0x65, //0x00005518 cmpb $101, $2(%r15,%rcx) - 0x0f, 0x85, 0x6a, 0xf7, 0xff, 0xff, //0x0000551e jne LBB0_1025 - //0x00005524 LBB0_1118 - 0x48, 0x83, 0xc1, 0x03, //0x00005524 addq $3, %rcx - 0x48, 0x8b, 0x44, 0x24, 0x08, //0x00005528 movq $8(%rsp), %rax - 0x48, 0x89, 0x08, //0x0000552d movq %rcx, (%rax) - 0xe9, 0x59, 0xf7, 0xff, 0xff, //0x00005530 jmp LBB0_1025 - //0x00005535 LBB0_845 - 0x48, 0x83, 0xc1, 0xff, //0x00005535 addq $-1, %rcx - 0x49, 0x89, 0xcd, //0x00005539 movq %rcx, %r13 - 0xe9, 0x54, 0xf7, 0xff, 0xff, //0x0000553c jmp LBB0_1026 - //0x00005541 LBB0_951 - 0x49, 0x83, 0xc5, 0xff, //0x00005541 addq $-1, %r13 - 0xe9, 0x4b, 0xf7, 0xff, 0xff, //0x00005545 jmp LBB0_1026 - //0x0000554a LBB0_955 - 0x4c, 0x89, 0xc9, //0x0000554a movq %r9, %rcx - //0x0000554d LBB0_1106 - 0x48, 0xf7, 0xd1, //0x0000554d notq %rcx - 0x48, 0x8b, 0x44, 0x24, 0x08, //0x00005550 movq $8(%rsp), %rax - 0x48, 0x01, 0x08, //0x00005555 addq %rcx, (%rax) - 0xe9, 0x31, 0xf7, 0xff, 0xff, //0x00005558 jmp LBB0_1025 - //0x0000555d LBB0_1129 - 0x4d, 0x89, 0xcb, //0x0000555d movq %r9, %r11 - 0xe9, 0x5b, 0xf7, 0xff, 0xff, //0x00005560 jmp LBB0_834 - //0x00005565 LBB0_1119 - 0x4c, 0x29, 0xd8, //0x00005565 subq %r11, %rax - 0x48, 0x01, 0xf0, //0x00005568 addq %rsi, %rax - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x0000556b movq $8(%rsp), %r8 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00005570 movq $-1, %r13 - 0x48, 0x39, 0xd8, //0x00005577 cmpq %rbx, %rax - 0x0f, 0x82, 0x86, 0xf5, 0xff, 0xff, //0x0000557a jb LBB0_632 - 0xe9, 0x10, 0xf7, 0xff, 0xff, //0x00005580 jmp LBB0_1026 - //0x00005585 LBB0_1134 - 0x49, 0xc7, 0xc5, 0xfe, 0xff, 0xff, 0xff, //0x00005585 movq $-2, %r13 - 0xe9, 0x3a, 0x00, 0x00, 0x00, //0x0000558c jmp LBB0_1125 - //0x00005591 LBB0_1120 - 0x4c, 0x29, 0xda, //0x00005591 subq %r11, %rdx - 0x48, 0x83, 0xc2, 0x01, //0x00005594 addq $1, %rdx - 0x48, 0x89, 0x17, //0x00005598 movq %rdx, (%rdi) - 0x49, 0x89, 0xc5, //0x0000559b movq %rax, %r13 - 0xe9, 0xf2, 0xf6, 0xff, 0xff, //0x0000559e jmp LBB0_1026 - //0x000055a3 LBB0_1121 - 0x4c, 0x01, 0xd8, //0x000055a3 addq %r11, %rax - 0x48, 0x85, 0xd2, //0x000055a6 testq %rdx, %rdx - 0x0f, 0x85, 0x09, 0xda, 0xff, 0xff, //0x000055a9 jne LBB0_619 - 0xe9, 0x40, 0xda, 0xff, 0xff, //0x000055af jmp LBB0_624 - //0x000055b4 LBB0_1122 - 0x49, 0x83, 0xc3, 0x01, //0x000055b4 addq $1, %r11 - 0x49, 0xc7, 0xc5, 0xfd, 0xff, 0xff, 0xff, //0x000055b8 movq $-3, %r13 - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x000055bf jmp LBB0_1124 - //0x000055c4 LBB0_1123 - 0x49, 0x83, 0xc3, 0x01, //0x000055c4 addq $1, %r11 - //0x000055c8 LBB0_1124 - 0x4d, 0x89, 0xda, //0x000055c8 movq %r11, %r10 - //0x000055cb LBB0_1125 - 0x4d, 0x29, 0xe2, //0x000055cb subq %r12, %r10 - 0x48, 0x8b, 0x44, 0x24, 0x08, //0x000055ce movq $8(%rsp), %rax - 0x4c, 0x89, 0x10, //0x000055d3 movq %r10, (%rax) - 0xe9, 0xba, 0xf6, 0xff, 0xff, //0x000055d6 jmp LBB0_1026 - //0x000055db LBB0_1126 - 0x4c, 0x01, 0xda, //0x000055db addq %r11, %rdx - 0x48, 0x83, 0xff, 0x10, //0x000055de cmpq $16, %rdi - 0x0f, 0x83, 0xda, 0xf5, 0xff, 0xff, //0x000055e2 jae LBB0_639 - 0xe9, 0x29, 0xf6, 0xff, 0xff, //0x000055e8 jmp LBB0_642 - //0x000055ed LBB0_1127 - 0x4c, 0x29, 0xda, //0x000055ed subq %r11, %rdx - 0x48, 0x01, 0xf2, //0x000055f0 addq %rsi, %rdx - //0x000055f3 LBB0_1128 - 0x48, 0x8b, 0x4c, 0x24, 0x08, //0x000055f3 movq $8(%rsp), %rcx - 0x48, 0x89, 0x11, //0x000055f8 movq %rdx, (%rcx) - 0x49, 0x89, 0xc5, //0x000055fb movq %rax, %r13 - 0xe9, 0x92, 0xf6, 0xff, 0xff, //0x000055fe jmp LBB0_1026 - //0x00005603 LBB0_1130 - 0x4c, 0x01, 0xda, //0x00005603 addq %r11, %rdx - 0xe9, 0xdf, 0xf7, 0xff, 0xff, //0x00005606 jmp LBB0_1043 - //0x0000560b LBB0_1131 - 0x49, 0x8b, 0x07, //0x0000560b movq (%r15), %rax - 0x48, 0x8b, 0x4c, 0x24, 0x08, //0x0000560e movq $8(%rsp), %rcx - 0x48, 0x89, 0x01, //0x00005613 movq %rax, (%rcx) - 0xe9, 0x7a, 0xf6, 0xff, 0xff, //0x00005616 jmp LBB0_1026 - //0x0000561b LBB0_376 - 0x4c, 0x8b, 0x44, 0x24, 0x08, //0x0000561b movq $8(%rsp), %r8 - 0xe9, 0xea, 0xfd, 0xff, 0xff, //0x00005620 jmp LBB0_1102 - //0x00005625 LBB0_1132 - 0x49, 0x8d, 0x48, 0xff, //0x00005625 leaq $-1(%r8), %rcx - 0x4c, 0x39, 0xf9, //0x00005629 cmpq %r15, %rcx - 0x0f, 0x84, 0x63, 0xf6, 0xff, 0xff, //0x0000562c je LBB0_1026 - 0x4b, 0x8d, 0x14, 0x0f, //0x00005632 leaq (%r15,%r9), %rdx - 0x48, 0x83, 0xc2, 0x02, //0x00005636 addq $2, %rdx - 0x4d, 0x29, 0xf8, //0x0000563a subq %r15, %r8 - 0x49, 0x83, 0xc0, 0xfe, //0x0000563d addq $-2, %r8 - 0x4d, 0x89, 0xc7, //0x00005641 movq %r8, %r15 - 0xe9, 0xa1, 0xf7, 0xff, 0xff, //0x00005644 jmp LBB0_1043 - 0x90, 0x90, 0x90, //0x00005649 .p2align 2, 0x90 - // // .set L0_0_set_487, LBB0_487-LJTI0_0 - // // .set L0_0_set_486, LBB0_486-LJTI0_0 - // // .set L0_0_set_471, LBB0_471-LJTI0_0 - // // .set L0_0_set_453, LBB0_453-LJTI0_0 - // // .set L0_0_set_547, LBB0_547-LJTI0_0 - // // .set L0_0_set_485, LBB0_485-LJTI0_0 - // // .set L0_0_set_470, LBB0_470-LJTI0_0 - // // .set L0_0_set_522, LBB0_522-LJTI0_0 - //0x0000564c LJTI0_0 - 0x7a, 0xce, 0xff, 0xff, //0x0000564c .long L0_0_set_487 - 0x74, 0xce, 0xff, 0xff, //0x00005650 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005654 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005658 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x0000565c .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005660 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005664 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005668 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x0000566c .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005670 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005674 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005678 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x0000567c .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005680 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005684 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005688 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x0000568c .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005690 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005694 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005698 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x0000569c .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056a0 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056a4 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056a8 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056ac .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056b0 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056b4 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056b8 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056bc .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056c0 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056c4 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056c8 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056cc .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056d0 .long L0_0_set_486 - 0x66, 0xcd, 0xff, 0xff, //0x000056d4 .long L0_0_set_471 - 0x74, 0xce, 0xff, 0xff, //0x000056d8 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056dc .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056e0 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056e4 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056e8 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056ec .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056f0 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056f4 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056f8 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000056fc .long L0_0_set_486 - 0x2a, 0xcc, 0xff, 0xff, //0x00005700 .long L0_0_set_453 - 0x74, 0xce, 0xff, 0xff, //0x00005704 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005708 .long L0_0_set_486 - 0x2a, 0xcc, 0xff, 0xff, //0x0000570c .long L0_0_set_453 - 0x2a, 0xcc, 0xff, 0xff, //0x00005710 .long L0_0_set_453 - 0x2a, 0xcc, 0xff, 0xff, //0x00005714 .long L0_0_set_453 - 0x2a, 0xcc, 0xff, 0xff, //0x00005718 .long L0_0_set_453 - 0x2a, 0xcc, 0xff, 0xff, //0x0000571c .long L0_0_set_453 - 0x2a, 0xcc, 0xff, 0xff, //0x00005720 .long L0_0_set_453 - 0x2a, 0xcc, 0xff, 0xff, //0x00005724 .long L0_0_set_453 - 0x2a, 0xcc, 0xff, 0xff, //0x00005728 .long L0_0_set_453 - 0x2a, 0xcc, 0xff, 0xff, //0x0000572c .long L0_0_set_453 - 0x2a, 0xcc, 0xff, 0xff, //0x00005730 .long L0_0_set_453 - 0x74, 0xce, 0xff, 0xff, //0x00005734 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005738 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x0000573c .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005740 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005744 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005748 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x0000574c .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005750 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005754 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005758 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x0000575c .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005760 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005764 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005768 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x0000576c .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005770 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005774 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005778 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x0000577c .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005780 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005784 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005788 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x0000578c .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005790 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005794 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005798 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x0000579c .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057a0 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057a4 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057a8 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057ac .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057b0 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057b4 .long L0_0_set_486 - 0xeb, 0xd2, 0xff, 0xff, //0x000057b8 .long L0_0_set_547 - 0x74, 0xce, 0xff, 0xff, //0x000057bc .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057c0 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057c4 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057c8 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057cc .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057d0 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057d4 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057d8 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057dc .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057e0 .long L0_0_set_486 - 0x57, 0xce, 0xff, 0xff, //0x000057e4 .long L0_0_set_485 - 0x74, 0xce, 0xff, 0xff, //0x000057e8 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057ec .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057f0 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057f4 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057f8 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x000057fc .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005800 .long L0_0_set_486 - 0x53, 0xcd, 0xff, 0xff, //0x00005804 .long L0_0_set_470 - 0x74, 0xce, 0xff, 0xff, //0x00005808 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x0000580c .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005810 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005814 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005818 .long L0_0_set_486 - 0x53, 0xcd, 0xff, 0xff, //0x0000581c .long L0_0_set_470 - 0x74, 0xce, 0xff, 0xff, //0x00005820 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005824 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005828 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x0000582c .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005830 .long L0_0_set_486 - 0x74, 0xce, 0xff, 0xff, //0x00005834 .long L0_0_set_486 - 0x4e, 0xd0, 0xff, 0xff, //0x00005838 .long L0_0_set_522 - // // .set L0_1_set_283, LBB0_283-LJTI0_1 - // // .set L0_1_set_282, LBB0_282-LJTI0_1 - // // .set L0_1_set_244, LBB0_244-LJTI0_1 - // // .set L0_1_set_226, LBB0_226-LJTI0_1 - // // .set L0_1_set_256, LBB0_256-LJTI0_1 - // // .set L0_1_set_281, LBB0_281-LJTI0_1 - // // .set L0_1_set_243, LBB0_243-LJTI0_1 - // // .set L0_1_set_314, LBB0_314-LJTI0_1 - //0x0000583c LJTI0_1 - 0xfa, 0xba, 0xff, 0xff, //0x0000583c .long L0_1_set_283 - 0xf4, 0xba, 0xff, 0xff, //0x00005840 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005844 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005848 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x0000584c .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005850 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005854 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005858 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x0000585c .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005860 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005864 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005868 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x0000586c .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005870 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005874 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005878 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x0000587c .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005880 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005884 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005888 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x0000588c .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005890 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005894 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005898 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x0000589c .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058a0 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058a4 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058a8 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058ac .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058b0 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058b4 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058b8 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058bc .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058c0 .long L0_1_set_282 - 0x56, 0xb7, 0xff, 0xff, //0x000058c4 .long L0_1_set_244 - 0xf4, 0xba, 0xff, 0xff, //0x000058c8 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058cc .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058d0 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058d4 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058d8 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058dc .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058e0 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058e4 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058e8 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058ec .long L0_1_set_282 - 0x2a, 0xb6, 0xff, 0xff, //0x000058f0 .long L0_1_set_226 - 0xf4, 0xba, 0xff, 0xff, //0x000058f4 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000058f8 .long L0_1_set_282 - 0x2a, 0xb6, 0xff, 0xff, //0x000058fc .long L0_1_set_226 - 0x2a, 0xb6, 0xff, 0xff, //0x00005900 .long L0_1_set_226 - 0x2a, 0xb6, 0xff, 0xff, //0x00005904 .long L0_1_set_226 - 0x2a, 0xb6, 0xff, 0xff, //0x00005908 .long L0_1_set_226 - 0x2a, 0xb6, 0xff, 0xff, //0x0000590c .long L0_1_set_226 - 0x2a, 0xb6, 0xff, 0xff, //0x00005910 .long L0_1_set_226 - 0x2a, 0xb6, 0xff, 0xff, //0x00005914 .long L0_1_set_226 - 0x2a, 0xb6, 0xff, 0xff, //0x00005918 .long L0_1_set_226 - 0x2a, 0xb6, 0xff, 0xff, //0x0000591c .long L0_1_set_226 - 0x2a, 0xb6, 0xff, 0xff, //0x00005920 .long L0_1_set_226 - 0xf4, 0xba, 0xff, 0xff, //0x00005924 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005928 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x0000592c .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005930 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005934 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005938 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x0000593c .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005940 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005944 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005948 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x0000594c .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005950 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005954 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005958 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x0000595c .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005960 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005964 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005968 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x0000596c .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005970 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005974 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005978 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x0000597c .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005980 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005984 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005988 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x0000598c .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005990 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005994 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005998 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x0000599c .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059a0 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059a4 .long L0_1_set_282 - 0x47, 0xb8, 0xff, 0xff, //0x000059a8 .long L0_1_set_256 - 0xf4, 0xba, 0xff, 0xff, //0x000059ac .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059b0 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059b4 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059b8 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059bc .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059c0 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059c4 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059c8 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059cc .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059d0 .long L0_1_set_282 - 0xd9, 0xba, 0xff, 0xff, //0x000059d4 .long L0_1_set_281 - 0xf4, 0xba, 0xff, 0xff, //0x000059d8 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059dc .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059e0 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059e4 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059e8 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059ec .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059f0 .long L0_1_set_282 - 0x43, 0xb7, 0xff, 0xff, //0x000059f4 .long L0_1_set_243 - 0xf4, 0xba, 0xff, 0xff, //0x000059f8 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x000059fc .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005a00 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005a04 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005a08 .long L0_1_set_282 - 0x43, 0xb7, 0xff, 0xff, //0x00005a0c .long L0_1_set_243 - 0xf4, 0xba, 0xff, 0xff, //0x00005a10 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005a14 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005a18 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005a1c .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005a20 .long L0_1_set_282 - 0xf4, 0xba, 0xff, 0xff, //0x00005a24 .long L0_1_set_282 - 0xad, 0xbc, 0xff, 0xff, //0x00005a28 .long L0_1_set_314 - // // .set L0_2_set_687, LBB0_687-LJTI0_2 - // // .set L0_2_set_691, LBB0_691-LJTI0_2 - // // .set L0_2_set_693, LBB0_693-LJTI0_2 - // // .set L0_2_set_714, LBB0_714-LJTI0_2 - // // .set L0_2_set_716, LBB0_716-LJTI0_2 - // // .set L0_2_set_719, LBB0_719-LJTI0_2 - //0x00005a2c LJTI0_2 - 0xaa, 0xd8, 0xff, 0xff, //0x00005a2c .long L0_2_set_687 - 0xd3, 0xd8, 0xff, 0xff, //0x00005a30 .long L0_2_set_691 - 0xff, 0xd8, 0xff, 0xff, //0x00005a34 .long L0_2_set_693 - 0x5f, 0xda, 0xff, 0xff, //0x00005a38 .long L0_2_set_714 - 0x76, 0xda, 0xff, 0xff, //0x00005a3c .long L0_2_set_716 - 0x90, 0xde, 0xff, 0xff, //0x00005a40 .long L0_2_set_719 - // // .set L0_3_set_1026, LBB0_1026-LJTI0_3 - // // .set L0_3_set_1025, LBB0_1025-LJTI0_3 - // // .set L0_3_set_816, LBB0_816-LJTI0_3 - // // .set L0_3_set_836, LBB0_836-LJTI0_3 - // // .set L0_3_set_721, LBB0_721-LJTI0_3 - // // .set L0_3_set_840, LBB0_840-LJTI0_3 - // // .set L0_3_set_842, LBB0_842-LJTI0_3 - // // .set L0_3_set_846, LBB0_846-LJTI0_3 - // // .set L0_3_set_852, LBB0_852-LJTI0_3 - // // .set L0_3_set_855, LBB0_855-LJTI0_3 - //0x00005a44 LJTI0_3 - 0x51, 0xf2, 0xff, 0xff, //0x00005a44 .long L0_3_set_1026 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a48 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a4c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a50 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a54 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a58 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a5c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a60 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a64 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a68 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a6c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a70 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a74 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a78 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a7c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a80 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a84 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a88 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a8c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a90 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a94 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a98 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005a9c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005aa0 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005aa4 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005aa8 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005aac .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005ab0 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005ab4 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005ab8 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005abc .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005ac0 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005ac4 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005ac8 .long L0_3_set_1025 - 0x6c, 0xe1, 0xff, 0xff, //0x00005acc .long L0_3_set_816 - 0x4a, 0xf2, 0xff, 0xff, //0x00005ad0 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005ad4 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005ad8 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005adc .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005ae0 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005ae4 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005ae8 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005aec .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005af0 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005af4 .long L0_3_set_1025 - 0xa1, 0xe2, 0xff, 0xff, //0x00005af8 .long L0_3_set_836 - 0x4a, 0xf2, 0xff, 0xff, //0x00005afc .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b00 .long L0_3_set_1025 - 0x8b, 0xda, 0xff, 0xff, //0x00005b04 .long L0_3_set_721 - 0x8b, 0xda, 0xff, 0xff, //0x00005b08 .long L0_3_set_721 - 0x8b, 0xda, 0xff, 0xff, //0x00005b0c .long L0_3_set_721 - 0x8b, 0xda, 0xff, 0xff, //0x00005b10 .long L0_3_set_721 - 0x8b, 0xda, 0xff, 0xff, //0x00005b14 .long L0_3_set_721 - 0x8b, 0xda, 0xff, 0xff, //0x00005b18 .long L0_3_set_721 - 0x8b, 0xda, 0xff, 0xff, //0x00005b1c .long L0_3_set_721 - 0x8b, 0xda, 0xff, 0xff, //0x00005b20 .long L0_3_set_721 - 0x8b, 0xda, 0xff, 0xff, //0x00005b24 .long L0_3_set_721 - 0x8b, 0xda, 0xff, 0xff, //0x00005b28 .long L0_3_set_721 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b2c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b30 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b34 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b38 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b3c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b40 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b44 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b48 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b4c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b50 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b54 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b58 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b5c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b60 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b64 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b68 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b6c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b70 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b74 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b78 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b7c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b80 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b84 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b88 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b8c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b90 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b94 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b98 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005b9c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005ba0 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005ba4 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005ba8 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005bac .long L0_3_set_1025 - 0xdf, 0xe2, 0xff, 0xff, //0x00005bb0 .long L0_3_set_840 - 0x4a, 0xf2, 0xff, 0xff, //0x00005bb4 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005bb8 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005bbc .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005bc0 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005bc4 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005bc8 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005bcc .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005bd0 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005bd4 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005bd8 .long L0_3_set_1025 - 0x06, 0xe3, 0xff, 0xff, //0x00005bdc .long L0_3_set_842 - 0x4a, 0xf2, 0xff, 0xff, //0x00005be0 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005be4 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005be8 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005bec .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005bf0 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005bf4 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005bf8 .long L0_3_set_1025 - 0x43, 0xe3, 0xff, 0xff, //0x00005bfc .long L0_3_set_846 - 0x4a, 0xf2, 0xff, 0xff, //0x00005c00 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005c04 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005c08 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005c0c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005c10 .long L0_3_set_1025 - 0x73, 0xe3, 0xff, 0xff, //0x00005c14 .long L0_3_set_852 - 0x4a, 0xf2, 0xff, 0xff, //0x00005c18 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005c1c .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005c20 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005c24 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005c28 .long L0_3_set_1025 - 0x4a, 0xf2, 0xff, 0xff, //0x00005c2c .long L0_3_set_1025 - 0xb3, 0xe3, 0xff, 0xff, //0x00005c30 .long L0_3_set_855 - // // .set L0_4_set_899, LBB0_899-LJTI0_4 - // // .set L0_4_set_914, LBB0_914-LJTI0_4 - // // .set L0_4_set_905, LBB0_905-LJTI0_4 - // // .set L0_4_set_908, LBB0_908-LJTI0_4 - //0x00005c34 LJTI0_4 - 0xd8, 0xe4, 0xff, 0xff, //0x00005c34 .long L0_4_set_899 - 0x26, 0xe6, 0xff, 0xff, //0x00005c38 .long L0_4_set_914 - 0xd8, 0xe4, 0xff, 0xff, //0x00005c3c .long L0_4_set_899 - 0x26, 0xe5, 0xff, 0xff, //0x00005c40 .long L0_4_set_905 - 0x26, 0xe6, 0xff, 0xff, //0x00005c44 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c48 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c4c .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c50 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c54 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c58 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c5c .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c60 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c64 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c68 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c6c .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c70 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c74 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c78 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c7c .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c80 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c84 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c88 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c8c .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c90 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c94 .long L0_4_set_914 - 0x26, 0xe6, 0xff, 0xff, //0x00005c98 .long L0_4_set_914 - 0x49, 0xe5, 0xff, 0xff, //0x00005c9c .long L0_4_set_908 - // // .set L0_5_set_769, LBB0_769-LJTI0_5 - // // .set L0_5_set_803, LBB0_803-LJTI0_5 - // // .set L0_5_set_774, LBB0_774-LJTI0_5 - // // .set L0_5_set_772, LBB0_772-LJTI0_5 - //0x00005ca0 LJTI0_5 - 0xd3, 0xdb, 0xff, 0xff, //0x00005ca0 .long L0_5_set_769 - 0x0c, 0xde, 0xff, 0xff, //0x00005ca4 .long L0_5_set_803 - 0xd3, 0xdb, 0xff, 0xff, //0x00005ca8 .long L0_5_set_769 - 0x02, 0xdc, 0xff, 0xff, //0x00005cac .long L0_5_set_774 - 0x0c, 0xde, 0xff, 0xff, //0x00005cb0 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005cb4 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005cb8 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005cbc .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005cc0 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005cc4 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005cc8 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005ccc .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005cd0 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005cd4 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005cd8 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005cdc .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005ce0 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005ce4 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005ce8 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005cec .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005cf0 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005cf4 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005cf8 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005cfc .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005d00 .long L0_5_set_803 - 0x0c, 0xde, 0xff, 0xff, //0x00005d04 .long L0_5_set_803 - 0xef, 0xdb, 0xff, 0xff, //0x00005d08 .long L0_5_set_772 - // // .set L0_6_set_1026, LBB0_1026-LJTI0_6 - // // .set L0_6_set_1032, LBB0_1032-LJTI0_6 - // // .set L0_6_set_1033, LBB0_1033-LJTI0_6 - // // .set L0_6_set_634, LBB0_634-LJTI0_6 - // // .set L0_6_set_1045, LBB0_1045-LJTI0_6 + 0x4c, 0x8d, 0x35, 0xa1, 0x20, 0x00, 0x00, //0x00003cd0 leaq $8353(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x4d, 0x85, 0xed, //0x00003cd7 testq %r13, %r13 + 0x0f, 0x88, 0xd3, 0x12, 0x00, 0x00, //0x00003cda js LBB0_860 + //0x00003ce0 LBB0_820 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00003ce0 movq $8(%rsp), %r9 + 0x4d, 0x89, 0x29, //0x00003ce5 movq %r13, (%r9) + 0x4d, 0x85, 0xdb, //0x00003ce8 testq %r11, %r11 + 0x0f, 0x8e, 0xe3, 0x12, 0x00, 0x00, //0x00003ceb jle LBB0_732 + 0x49, 0x8b, 0x0c, 0x24, //0x00003cf1 movq (%r12), %rcx + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00003cf5 cmpq $4095, %rcx + 0x0f, 0x8f, 0xa5, 0x12, 0x00, 0x00, //0x00003cfc jg LBB0_1135 + 0x48, 0x8d, 0x41, 0x01, //0x00003d02 leaq $1(%rcx), %rax + 0x49, 0x89, 0x04, 0x24, //0x00003d06 movq %rax, (%r12) + 0x49, 0xc7, 0x44, 0xcc, 0x08, 0x04, 0x00, 0x00, 0x00, //0x00003d0a movq $4, $8(%r12,%rcx,8) + 0xe9, 0x48, 0xf6, 0xff, 0xff, //0x00003d13 jmp LBB0_674 + //0x00003d18 LBB0_823 + 0x4c, 0x01, 0xd9, //0x00003d18 addq %r11, %rcx + 0x48, 0x03, 0x4c, 0x24, 0x20, //0x00003d1b addq $32(%rsp), %rcx + 0xc5, 0xf8, 0x77, //0x00003d20 vzeroupper + 0xc5, 0x7a, 0x6f, 0x3d, 0xf5, 0xc4, 0xff, 0xff, //0x00003d23 vmovdqu $-15115(%rip), %xmm15 /* LCPI0_19+0(%rip) */ + 0x49, 0x89, 0xcb, //0x00003d2b movq %rcx, %r11 + 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00003d2e jmp LBB0_827 + //0x00003d33 LBB0_824 + 0x89, 0xc9, //0x00003d33 movl %ecx, %ecx + 0x49, 0x01, 0xcb, //0x00003d35 addq %rcx, %r11 + 0x49, 0x01, 0xdb, //0x00003d38 addq %rbx, %r11 + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00003d3b jmp LBB0_826 + //0x00003d40 LBB0_825 + 0x49, 0x01, 0xcb, //0x00003d40 addq %rcx, %r11 + //0x00003d43 LBB0_826 + 0x4c, 0x8d, 0x35, 0x2e, 0x20, 0x00, 0x00, //0x00003d43 leaq $8238(%rip), %r14 /* LJTI0_2+0(%rip) */ + //0x00003d4a LBB0_827 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003d4a movq $-1, %rcx + 0x48, 0x8b, 0x74, 0x24, 0x30, //0x00003d51 movq $48(%rsp), %rsi + 0x48, 0x85, 0xf6, //0x00003d56 testq %rsi, %rsi + 0x0f, 0x84, 0x99, 0x12, 0x00, 0x00, //0x00003d59 je LBB0_1055 + 0x4d, 0x85, 0xe4, //0x00003d5f testq %r12, %r12 + 0x0f, 0x84, 0x90, 0x12, 0x00, 0x00, //0x00003d62 je LBB0_1055 + 0x48, 0x85, 0xc0, //0x00003d68 testq %rax, %rax + 0x0f, 0x84, 0x87, 0x12, 0x00, 0x00, //0x00003d6b je LBB0_1055 + 0x4c, 0x2b, 0x5c, 0x24, 0x20, //0x00003d71 subq $32(%rsp), %r11 + 0x49, 0x8d, 0x4b, 0xff, //0x00003d76 leaq $-1(%r11), %rcx + 0x48, 0x39, 0xce, //0x00003d7a cmpq %rcx, %rsi + 0x0f, 0x84, 0x57, 0xf5, 0xff, 0xff, //0x00003d7d je LBB0_1053 + 0x49, 0x39, 0xcc, //0x00003d83 cmpq %rcx, %r12 + 0x0f, 0x84, 0x4e, 0xf5, 0xff, 0xff, //0x00003d86 je LBB0_1053 + 0x48, 0x39, 0xc8, //0x00003d8c cmpq %rcx, %rax + 0x0f, 0x84, 0x45, 0xf5, 0xff, 0xff, //0x00003d8f je LBB0_1053 + 0x4d, 0x85, 0xe4, //0x00003d95 testq %r12, %r12 + 0xc5, 0xfe, 0x6f, 0x2d, 0x60, 0xc2, 0xff, 0xff, //0x00003d98 vmovdqu $-15776(%rip), %ymm5 /* LCPI0_0+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0xd8, 0xc2, 0xff, 0xff, //0x00003da0 vmovdqu $-15656(%rip), %ymm6 /* LCPI0_7+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0xf0, 0xc2, 0xff, 0xff, //0x00003da8 vmovdqu $-15632(%rip), %ymm7 /* LCPI0_8+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x68, 0xc3, 0xff, 0xff, //0x00003db0 vmovdqu $-15512(%rip), %ymm8 /* LCPI0_13+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x0d, 0x80, 0xc3, 0xff, 0xff, //0x00003db8 vmovdqu $-15488(%rip), %ymm9 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x15, 0x98, 0xc3, 0xff, 0xff, //0x00003dc0 vmovdqu $-15464(%rip), %ymm10 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0xb0, 0xc3, 0xff, 0xff, //0x00003dc8 vmovdqu $-15440(%rip), %ymm11 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x68, 0xc2, 0xff, 0xff, //0x00003dd0 vmovdqu $-15768(%rip), %ymm12 /* LCPI0_2+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0xc0, 0xc3, 0xff, 0xff, //0x00003dd8 vmovdqu $-15424(%rip), %ymm13 /* LCPI0_17+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0xd8, 0xc3, 0xff, 0xff, //0x00003de0 vmovdqu $-15400(%rip), %ymm14 /* LCPI0_18+0(%rip) */ + 0x0f, 0x8e, 0x27, 0x00, 0x00, 0x00, //0x00003de8 jle LBB0_836 + 0x49, 0x8d, 0x4c, 0x24, 0xff, //0x00003dee leaq $-1(%r12), %rcx + 0x48, 0x39, 0xc8, //0x00003df3 cmpq %rcx, %rax + 0x0f, 0x84, 0x19, 0x00, 0x00, 0x00, //0x00003df6 je LBB0_836 + 0x49, 0xf7, 0xd4, //0x00003dfc notq %r12 + 0x4d, 0x89, 0xe3, //0x00003dff movq %r12, %r11 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00003e02 movq $16(%rsp), %r12 + 0x4d, 0x85, 0xdb, //0x00003e07 testq %r11, %r11 + 0x0f, 0x89, 0x2b, 0xf5, 0xff, 0xff, //0x00003e0a jns LBB0_960 + 0xe9, 0xe0, 0x11, 0x00, 0x00, //0x00003e10 jmp LBB0_1054 + //0x00003e15 LBB0_836 + 0x48, 0x89, 0xf1, //0x00003e15 movq %rsi, %rcx + 0x48, 0x09, 0xc1, //0x00003e18 orq %rax, %rcx + 0x0f, 0x99, 0xc1, //0x00003e1b setns %cl + 0x0f, 0x88, 0x89, 0x02, 0x00, 0x00, //0x00003e1e js LBB0_880 + 0x48, 0x39, 0xc6, //0x00003e24 cmpq %rax, %rsi + 0x0f, 0x8c, 0x80, 0x02, 0x00, 0x00, //0x00003e27 jl LBB0_880 + 0x48, 0xf7, 0xd6, //0x00003e2d notq %rsi + 0x49, 0x89, 0xf3, //0x00003e30 movq %rsi, %r11 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00003e33 movq $16(%rsp), %r12 + 0x4d, 0x85, 0xdb, //0x00003e38 testq %r11, %r11 + 0x0f, 0x89, 0xfa, 0xf4, 0xff, 0xff, //0x00003e3b jns LBB0_960 + 0xe9, 0xaf, 0x11, 0x00, 0x00, //0x00003e41 jmp LBB0_1054 + //0x00003e46 LBB0_839 + 0x49, 0x8b, 0x09, //0x00003e46 movq (%r9), %rcx + 0x48, 0x8b, 0x44, 0x24, 0x18, //0x00003e49 movq $24(%rsp), %rax + 0x48, 0x8b, 0x10, //0x00003e4e movq (%rax), %rdx + 0x48, 0x8d, 0x42, 0xfc, //0x00003e51 leaq $-4(%rdx), %rax + 0x48, 0x39, 0xc1, //0x00003e55 cmpq %rax, %rcx + 0x0f, 0x87, 0x4d, 0x18, 0x00, 0x00, //0x00003e58 ja LBB0_1134 + 0x41, 0x8b, 0x14, 0x0f, //0x00003e5e movl (%r15,%rcx), %edx + 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x00003e62 cmpl $1702063201, %edx + 0x0f, 0x85, 0x1e, 0x19, 0x00, 0x00, //0x00003e68 jne LBB0_1136 + 0x48, 0x8d, 0x41, 0x04, //0x00003e6e leaq $4(%rcx), %rax + 0x49, 0x89, 0x01, //0x00003e72 movq %rax, (%r9) + 0x48, 0x85, 0xc9, //0x00003e75 testq %rcx, %rcx + 0x0f, 0x8f, 0xe2, 0xf4, 0xff, 0xff, //0x00003e78 jg LBB0_674 + 0xe9, 0xfd, 0x19, 0x00, 0x00, //0x00003e7e jmp LBB0_842 + //0x00003e83 LBB0_843 + 0x4d, 0x8b, 0x19, //0x00003e83 movq (%r9), %r11 + 0x48, 0x8b, 0x44, 0x24, 0x18, //0x00003e86 movq $24(%rsp), %rax + 0x4c, 0x8b, 0x08, //0x00003e8b movq (%rax), %r9 + 0x4c, 0x89, 0xc9, //0x00003e8e movq %r9, %rcx + 0x4c, 0x29, 0xd9, //0x00003e91 subq %r11, %rcx + 0x0f, 0x84, 0x0e, 0x1a, 0x00, 0x00, //0x00003e94 je LBB0_1158 + 0x48, 0x83, 0xf9, 0x40, //0x00003e9a cmpq $64, %rcx + 0x0f, 0x82, 0x3a, 0x0a, 0x00, 0x00, //0x00003e9e jb LBB0_979 + 0x4c, 0x89, 0xdf, //0x00003ea4 movq %r11, %rdi + 0x48, 0xf7, 0xd7, //0x00003ea7 notq %rdi + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003eaa movq $-1, %r8 + 0x4d, 0x89, 0xdd, //0x00003eb1 movq %r11, %r13 + 0x45, 0x31, 0xf6, //0x00003eb4 xorl %r14d, %r14d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003eb7 .p2align 4, 0x90 + //0x00003ec0 LBB0_846 + 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x2f, //0x00003ec0 vmovdqu (%r15,%r13), %ymm0 + 0xc4, 0x81, 0x7e, 0x6f, 0x4c, 0x2f, 0x20, //0x00003ec6 vmovdqu $32(%r15,%r13), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x00003ecd vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00003ed1 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd6, //0x00003ed5 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xc2, //0x00003ed9 vpmovmskb %ymm2, %eax + 0xc5, 0xfd, 0x74, 0xc7, //0x00003edd vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00003ee1 vpmovmskb %ymm0, %esi + 0xc5, 0xf5, 0x74, 0xc7, //0x00003ee5 vpcmpeqb %ymm7, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd8, //0x00003ee9 vpmovmskb %ymm0, %ebx + 0x48, 0xc1, 0xe0, 0x20, //0x00003eed shlq $32, %rax + 0x48, 0x09, 0xc2, //0x00003ef1 orq %rax, %rdx + 0x48, 0xc1, 0xe3, 0x20, //0x00003ef4 shlq $32, %rbx + 0x48, 0x09, 0xde, //0x00003ef8 orq %rbx, %rsi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x00003efb jne LBB0_855 + 0x4d, 0x85, 0xf6, //0x00003f01 testq %r14, %r14 + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x00003f04 jne LBB0_857 + 0x45, 0x31, 0xf6, //0x00003f0a xorl %r14d, %r14d + 0x48, 0x85, 0xd2, //0x00003f0d testq %rdx, %rdx + 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x00003f10 jne LBB0_858 + //0x00003f16 LBB0_849 + 0x48, 0x83, 0xc1, 0xc0, //0x00003f16 addq $-64, %rcx + 0x48, 0x83, 0xc7, 0xc0, //0x00003f1a addq $-64, %rdi + 0x49, 0x83, 0xc5, 0x40, //0x00003f1e addq $64, %r13 + 0x48, 0x83, 0xf9, 0x3f, //0x00003f22 cmpq $63, %rcx + 0x0f, 0x87, 0x94, 0xff, 0xff, 0xff, //0x00003f26 ja LBB0_846 + 0xe9, 0x24, 0x08, 0x00, 0x00, //0x00003f2c jmp LBB0_850 + //0x00003f31 LBB0_855 + 0x49, 0x83, 0xf8, 0xff, //0x00003f31 cmpq $-1, %r8 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00003f35 jne LBB0_857 + 0x4c, 0x0f, 0xbc, 0xc6, //0x00003f3b bsfq %rsi, %r8 + 0x4d, 0x01, 0xe8, //0x00003f3f addq %r13, %r8 + //0x00003f42 LBB0_857 + 0x4c, 0x89, 0xf0, //0x00003f42 movq %r14, %rax + 0x48, 0xf7, 0xd0, //0x00003f45 notq %rax + 0x48, 0x21, 0xf0, //0x00003f48 andq %rsi, %rax + 0x4c, 0x8d, 0x24, 0x00, //0x00003f4b leaq (%rax,%rax), %r12 + 0x4d, 0x09, 0xf4, //0x00003f4f orq %r14, %r12 + 0x4c, 0x89, 0xe3, //0x00003f52 movq %r12, %rbx + 0x48, 0xf7, 0xd3, //0x00003f55 notq %rbx + 0x48, 0x21, 0xf3, //0x00003f58 andq %rsi, %rbx + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003f5b movabsq $-6148914691236517206, %rsi + 0x48, 0x21, 0xf3, //0x00003f65 andq %rsi, %rbx + 0x45, 0x31, 0xf6, //0x00003f68 xorl %r14d, %r14d + 0x48, 0x01, 0xc3, //0x00003f6b addq %rax, %rbx + 0x41, 0x0f, 0x92, 0xc6, //0x00003f6e setb %r14b + 0x48, 0x01, 0xdb, //0x00003f72 addq %rbx, %rbx + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00003f75 movabsq $6148914691236517205, %rax + 0x48, 0x31, 0xc3, //0x00003f7f xorq %rax, %rbx + 0x4c, 0x21, 0xe3, //0x00003f82 andq %r12, %rbx + 0x48, 0xf7, 0xd3, //0x00003f85 notq %rbx + 0x48, 0x21, 0xda, //0x00003f88 andq %rbx, %rdx + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00003f8b movq $16(%rsp), %r12 + 0x48, 0x85, 0xd2, //0x00003f90 testq %rdx, %rdx + 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00003f93 je LBB0_849 + //0x00003f99 LBB0_858 + 0x4c, 0x0f, 0xbc, 0xea, //0x00003f99 bsfq %rdx, %r13 + 0x49, 0x29, 0xfd, //0x00003f9d subq %rdi, %r13 + //0x00003fa0 LBB0_859 + 0x4d, 0x85, 0xed, //0x00003fa0 testq %r13, %r13 + 0x4c, 0x8d, 0x35, 0xce, 0x1d, 0x00, 0x00, //0x00003fa3 leaq $7630(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x0f, 0x89, 0x30, 0xf7, 0xff, 0xff, //0x00003faa jns LBB0_731 + 0xe9, 0xfe, 0x0f, 0x00, 0x00, //0x00003fb0 jmp LBB0_860 + //0x00003fb5 LBB0_863 + 0x48, 0x8b, 0x44, 0x24, 0x18, //0x00003fb5 movq $24(%rsp), %rax + 0x4c, 0x8b, 0x30, //0x00003fba movq (%rax), %r14 + 0x4d, 0x8b, 0x29, //0x00003fbd movq (%r9), %r13 + 0x4d, 0x29, 0xee, //0x00003fc0 subq %r13, %r14 + 0x0f, 0x84, 0xb7, 0x17, 0x00, 0x00, //0x00003fc3 je LBB0_1133 + 0x4f, 0x8d, 0x1c, 0x2f, //0x00003fc9 leaq (%r15,%r13), %r11 + 0x41, 0x80, 0x3b, 0x30, //0x00003fcd cmpb $48, (%r11) + 0x0f, 0x85, 0x27, 0x01, 0x00, 0x00, //0x00003fd1 jne LBB0_883 + 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00003fd7 movl $1, %r9d + 0x49, 0x83, 0xfe, 0x01, //0x00003fdd cmpq $1, %r14 + 0x0f, 0x85, 0xed, 0x00, 0x00, 0x00, //0x00003fe1 jne LBB0_881 + //0x00003fe7 LBB0_866 + 0x4c, 0x89, 0xe9, //0x00003fe7 movq %r13, %rcx + 0xe9, 0xcf, 0x08, 0x00, 0x00, //0x00003fea jmp LBB0_977 + //0x00003fef LBB0_867 + 0x49, 0x8b, 0x0c, 0x24, //0x00003fef movq (%r12), %rcx + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00003ff3 cmpq $4095, %rcx + 0x0f, 0x8f, 0xa7, 0x0f, 0x00, 0x00, //0x00003ffa jg LBB0_1135 + 0x48, 0x8d, 0x41, 0x01, //0x00004000 leaq $1(%rcx), %rax + 0x49, 0x89, 0x04, 0x24, //0x00004004 movq %rax, (%r12) + 0x49, 0xc7, 0x44, 0xcc, 0x08, 0x05, 0x00, 0x00, 0x00, //0x00004008 movq $5, $8(%r12,%rcx,8) + 0xe9, 0x4a, 0xf3, 0xff, 0xff, //0x00004011 jmp LBB0_674 + //0x00004016 LBB0_869 + 0x49, 0x8b, 0x09, //0x00004016 movq (%r9), %rcx + 0x48, 0x8b, 0x44, 0x24, 0x18, //0x00004019 movq $24(%rsp), %rax + 0x48, 0x8b, 0x10, //0x0000401e movq (%rax), %rdx + 0x48, 0x8d, 0x42, 0xfd, //0x00004021 leaq $-3(%rdx), %rax + 0x48, 0x39, 0xc1, //0x00004025 cmpq %rax, %rcx + 0x0f, 0x87, 0x7d, 0x16, 0x00, 0x00, //0x00004028 ja LBB0_1134 + 0x4c, 0x8d, 0x69, 0xff, //0x0000402e leaq $-1(%rcx), %r13 + 0x41, 0x81, 0x7c, 0x0f, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x00004032 cmpl $1819047278, $-1(%r15,%rcx) + 0x0f, 0x84, 0x30, 0x00, 0x00, 0x00, //0x0000403b je LBB0_877 + 0xe9, 0xa0, 0x17, 0x00, 0x00, //0x00004041 jmp LBB0_871 + //0x00004046 LBB0_875 + 0x49, 0x8b, 0x09, //0x00004046 movq (%r9), %rcx + 0x48, 0x8b, 0x44, 0x24, 0x18, //0x00004049 movq $24(%rsp), %rax + 0x48, 0x8b, 0x10, //0x0000404e movq (%rax), %rdx + 0x48, 0x8d, 0x42, 0xfd, //0x00004051 leaq $-3(%rdx), %rax + 0x48, 0x39, 0xc1, //0x00004055 cmpq %rax, %rcx + 0x0f, 0x87, 0x4d, 0x16, 0x00, 0x00, //0x00004058 ja LBB0_1134 + 0x4c, 0x8d, 0x69, 0xff, //0x0000405e leaq $-1(%rcx), %r13 + 0x41, 0x81, 0x7c, 0x0f, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00004062 cmpl $1702195828, $-1(%r15,%rcx) + 0x0f, 0x85, 0xbc, 0x17, 0x00, 0x00, //0x0000406b jne LBB0_1141 + //0x00004071 LBB0_877 + 0x48, 0x8d, 0x41, 0x03, //0x00004071 leaq $3(%rcx), %rax + 0x49, 0x89, 0x01, //0x00004075 movq %rax, (%r9) + 0x48, 0x85, 0xc9, //0x00004078 testq %rcx, %rcx + 0x0f, 0x8f, 0xdf, 0xf2, 0xff, 0xff, //0x0000407b jg LBB0_674 + 0xe9, 0x93, 0x0e, 0x00, 0x00, //0x00004081 jmp LBB0_1050 + //0x00004086 LBB0_878 + 0x49, 0x8b, 0x0c, 0x24, //0x00004086 movq (%r12), %rcx + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x0000408a cmpq $4095, %rcx + 0x0f, 0x8f, 0x10, 0x0f, 0x00, 0x00, //0x00004091 jg LBB0_1135 + 0x48, 0x8d, 0x41, 0x01, //0x00004097 leaq $1(%rcx), %rax + 0x49, 0x89, 0x04, 0x24, //0x0000409b movq %rax, (%r12) + 0x49, 0xc7, 0x44, 0xcc, 0x08, 0x06, 0x00, 0x00, 0x00, //0x0000409f movq $6, $8(%r12,%rcx,8) + 0xe9, 0xb3, 0xf2, 0xff, 0xff, //0x000040a8 jmp LBB0_674 + //0x000040ad LBB0_880 + 0x48, 0x8d, 0x50, 0xff, //0x000040ad leaq $-1(%rax), %rdx + 0x48, 0x39, 0xd6, //0x000040b1 cmpq %rdx, %rsi + 0x48, 0xf7, 0xd0, //0x000040b4 notq %rax + 0x49, 0x0f, 0x45, 0xc3, //0x000040b7 cmovneq %r11, %rax + 0x84, 0xc9, //0x000040bb testb %cl, %cl + 0x4c, 0x0f, 0x45, 0xd8, //0x000040bd cmovneq %rax, %r11 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x000040c1 movq $16(%rsp), %r12 + 0x4d, 0x85, 0xdb, //0x000040c6 testq %r11, %r11 + 0x0f, 0x89, 0x6c, 0xf2, 0xff, 0xff, //0x000040c9 jns LBB0_960 + 0xe9, 0x21, 0x0f, 0x00, 0x00, //0x000040cf jmp LBB0_1054 + //0x000040d4 LBB0_881 + 0x41, 0x8a, 0x4b, 0x01, //0x000040d4 movb $1(%r11), %cl + 0x80, 0xc1, 0xd2, //0x000040d8 addb $-46, %cl + 0x80, 0xf9, 0x37, //0x000040db cmpb $55, %cl + 0x0f, 0x87, 0x03, 0xff, 0xff, 0xff, //0x000040de ja LBB0_866 + 0x0f, 0xb6, 0xc1, //0x000040e4 movzbl %cl, %eax + 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x000040e7 movabsq $36028797027352577, %rcx + 0x48, 0x0f, 0xa3, 0xc1, //0x000040f1 btq %rax, %rcx + 0x4c, 0x89, 0xe9, //0x000040f5 movq %r13, %rcx + 0x0f, 0x83, 0xc0, 0x07, 0x00, 0x00, //0x000040f8 jae LBB0_977 + //0x000040fe LBB0_883 + 0x49, 0x83, 0xfe, 0x20, //0x000040fe cmpq $32, %r14 + 0x0f, 0x82, 0xf3, 0x07, 0x00, 0x00, //0x00004102 jb LBB0_980 + 0x48, 0xc7, 0x44, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff, //0x00004108 movq $-1, $48(%rsp) + 0x45, 0x31, 0xc9, //0x00004111 xorl %r9d, %r9d + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004114 movq $-1, %r8 + 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x0000411b movq $-1, %r12 + //0x00004122 LBB0_885 + 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x0b, //0x00004122 vmovdqu (%r11,%r9), %ymm0 + 0xc4, 0xc1, 0x7d, 0x64, 0xc8, //0x00004128 vpcmpgtb %ymm8, %ymm0, %ymm1 + 0xc5, 0xb5, 0x64, 0xd0, //0x0000412d vpcmpgtb %ymm0, %ymm9, %ymm2 + 0xc5, 0xed, 0xdb, 0xc9, //0x00004131 vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0xad, 0x74, 0xd0, //0x00004135 vpcmpeqb %ymm0, %ymm10, %ymm2 + 0xc5, 0xa5, 0x74, 0xd8, //0x00004139 vpcmpeqb %ymm0, %ymm11, %ymm3 + 0xc5, 0xe5, 0xeb, 0xd2, //0x0000413d vpor %ymm2, %ymm3, %ymm2 + 0xc5, 0x9d, 0xdb, 0xd8, //0x00004141 vpand %ymm0, %ymm12, %ymm3 + 0xc5, 0x95, 0x74, 0xc0, //0x00004145 vpcmpeqb %ymm0, %ymm13, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00004149 vpmovmskb %ymm0, %esi + 0xc5, 0x8d, 0x74, 0xdb, //0x0000414d vpcmpeqb %ymm3, %ymm14, %ymm3 + 0xc5, 0xfd, 0xd7, 0xdb, //0x00004151 vpmovmskb %ymm3, %ebx + 0xc5, 0xfd, 0xd7, 0xfa, //0x00004155 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0xeb, 0xc0, //0x00004159 vpor %ymm0, %ymm1, %ymm0 + 0xc5, 0xe5, 0xeb, 0xca, //0x0000415d vpor %ymm2, %ymm3, %ymm1 + 0xc5, 0xfd, 0xeb, 0xc1, //0x00004161 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc0, //0x00004165 vpmovmskb %ymm0, %eax + 0x48, 0xf7, 0xd0, //0x00004169 notq %rax + 0x48, 0x0f, 0xbc, 0xc8, //0x0000416c bsfq %rax, %rcx + 0x83, 0xf9, 0x20, //0x00004170 cmpl $32, %ecx + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00004173 je LBB0_887 + 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00004179 movl $-1, %eax + 0xd3, 0xe0, //0x0000417e shll %cl, %eax + 0xf7, 0xd0, //0x00004180 notl %eax + 0x21, 0xc6, //0x00004182 andl %eax, %esi + 0x21, 0xc3, //0x00004184 andl %eax, %ebx + 0x21, 0xf8, //0x00004186 andl %edi, %eax + 0x89, 0xc7, //0x00004188 movl %eax, %edi + //0x0000418a LBB0_887 + 0x8d, 0x56, 0xff, //0x0000418a leal $-1(%rsi), %edx + 0x21, 0xf2, //0x0000418d andl %esi, %edx + 0x0f, 0x85, 0xa3, 0x05, 0x00, 0x00, //0x0000418f jne LBB0_963 + 0x8d, 0x53, 0xff, //0x00004195 leal $-1(%rbx), %edx + 0x21, 0xda, //0x00004198 andl %ebx, %edx + 0x0f, 0x85, 0x98, 0x05, 0x00, 0x00, //0x0000419a jne LBB0_963 + 0x8d, 0x57, 0xff, //0x000041a0 leal $-1(%rdi), %edx + 0x21, 0xfa, //0x000041a3 andl %edi, %edx + 0x0f, 0x85, 0x8d, 0x05, 0x00, 0x00, //0x000041a5 jne LBB0_963 + 0x85, 0xf6, //0x000041ab testl %esi, %esi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000041ad je LBB0_893 + 0x0f, 0xbc, 0xf6, //0x000041b3 bsfl %esi, %esi + 0x49, 0x83, 0xfc, 0xff, //0x000041b6 cmpq $-1, %r12 + 0x0f, 0x85, 0xe8, 0x05, 0x00, 0x00, //0x000041ba jne LBB0_965 + 0x4c, 0x01, 0xce, //0x000041c0 addq %r9, %rsi + 0x49, 0x89, 0xf4, //0x000041c3 movq %rsi, %r12 + //0x000041c6 LBB0_893 + 0x85, 0xdb, //0x000041c6 testl %ebx, %ebx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000041c8 je LBB0_896 + 0x0f, 0xbc, 0xf3, //0x000041ce bsfl %ebx, %esi + 0x49, 0x83, 0xf8, 0xff, //0x000041d1 cmpq $-1, %r8 + 0x0f, 0x85, 0xcd, 0x05, 0x00, 0x00, //0x000041d5 jne LBB0_965 + 0x4c, 0x01, 0xce, //0x000041db addq %r9, %rsi + 0x49, 0x89, 0xf0, //0x000041de movq %rsi, %r8 + //0x000041e1 LBB0_896 + 0x85, 0xff, //0x000041e1 testl %edi, %edi + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x000041e3 je LBB0_899 + 0x0f, 0xbc, 0xf7, //0x000041e9 bsfl %edi, %esi + 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x000041ec cmpq $-1, $48(%rsp) + 0x0f, 0x85, 0xb0, 0x05, 0x00, 0x00, //0x000041f2 jne LBB0_965 + 0x4c, 0x01, 0xce, //0x000041f8 addq %r9, %rsi + 0x48, 0x89, 0x74, 0x24, 0x30, //0x000041fb movq %rsi, $48(%rsp) + //0x00004200 LBB0_899 + 0x83, 0xf9, 0x20, //0x00004200 cmpl $32, %ecx + 0x0f, 0x85, 0x1e, 0x02, 0x00, 0x00, //0x00004203 jne LBB0_933 + 0x49, 0x83, 0xc6, 0xe0, //0x00004209 addq $-32, %r14 + 0x49, 0x83, 0xc1, 0x20, //0x0000420d addq $32, %r9 + 0x49, 0x83, 0xfe, 0x1f, //0x00004211 cmpq $31, %r14 + 0x0f, 0x87, 0x07, 0xff, 0xff, 0xff, //0x00004215 ja LBB0_885 + 0xc5, 0xf8, 0x77, //0x0000421b vzeroupper + 0x4d, 0x01, 0xd9, //0x0000421e addq %r11, %r9 + 0x49, 0x83, 0xfe, 0x10, //0x00004221 cmpq $16, %r14 + 0xc5, 0x7a, 0x6f, 0x3d, 0xf3, 0xbf, 0xff, 0xff, //0x00004225 vmovdqu $-16397(%rip), %xmm15 /* LCPI0_19+0(%rip) */ + 0x0f, 0x82, 0x5c, 0x01, 0x00, 0x00, //0x0000422d jb LBB0_920 + //0x00004233 LBB0_902 + 0x4c, 0x89, 0xc8, //0x00004233 movq %r9, %rax + 0x4c, 0x29, 0xd8, //0x00004236 subq %r11, %rax + 0x48, 0x89, 0x44, 0x24, 0x20, //0x00004239 movq %rax, $32(%rsp) + 0x31, 0xc0, //0x0000423e xorl %eax, %eax + //0x00004240 LBB0_903 + 0x4c, 0x89, 0xe2, //0x00004240 movq %r12, %rdx + 0x4d, 0x89, 0xdc, //0x00004243 movq %r11, %r12 + 0xc4, 0xc1, 0x7a, 0x6f, 0x04, 0x01, //0x00004246 vmovdqu (%r9,%rax), %xmm0 + 0xc4, 0xc1, 0x79, 0x64, 0xcf, //0x0000424c vpcmpgtb %xmm15, %xmm0, %xmm1 + 0xc5, 0xfa, 0x6f, 0x15, 0xd7, 0xbf, 0xff, 0xff, //0x00004251 vmovdqu $-16425(%rip), %xmm2 /* LCPI0_20+0(%rip) */ + 0xc5, 0xe9, 0x64, 0xd0, //0x00004259 vpcmpgtb %xmm0, %xmm2, %xmm2 + 0xc5, 0xf1, 0xdb, 0xca, //0x0000425d vpand %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0x74, 0x15, 0xd7, 0xbf, 0xff, 0xff, //0x00004261 vpcmpeqb $-16425(%rip), %xmm0, %xmm2 /* LCPI0_21+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x1d, 0xdf, 0xbf, 0xff, 0xff, //0x00004269 vpcmpeqb $-16417(%rip), %xmm0, %xmm3 /* LCPI0_22+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xd2, //0x00004271 vpor %xmm2, %xmm3, %xmm2 + 0xc5, 0xf9, 0xdb, 0x1d, 0x73, 0xbf, 0xff, 0xff, //0x00004275 vpand $-16525(%rip), %xmm0, %xmm3 /* LCPI0_5+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0xdb, 0xbf, 0xff, 0xff, //0x0000427d vpcmpeqb $-16421(%rip), %xmm0, %xmm0 /* LCPI0_23+0(%rip) */ + 0xc5, 0xe1, 0x74, 0x1d, 0xe3, 0xbf, 0xff, 0xff, //0x00004285 vpcmpeqb $-16413(%rip), %xmm3, %xmm3 /* LCPI0_24+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xe0, //0x0000428d vpor %xmm0, %xmm3, %xmm4 + 0xc5, 0xe9, 0xeb, 0xc9, //0x00004291 vpor %xmm1, %xmm2, %xmm1 + 0xc5, 0xd9, 0xeb, 0xc9, //0x00004295 vpor %xmm1, %xmm4, %xmm1 + 0xc5, 0x79, 0xd7, 0xd8, //0x00004299 vpmovmskb %xmm0, %r11d + 0xc5, 0xf9, 0xd7, 0xf3, //0x0000429d vpmovmskb %xmm3, %esi + 0xc5, 0xf9, 0xd7, 0xfa, //0x000042a1 vpmovmskb %xmm2, %edi + 0xc5, 0xf9, 0xd7, 0xc9, //0x000042a5 vpmovmskb %xmm1, %ecx + 0xf7, 0xd1, //0x000042a9 notl %ecx + 0x0f, 0xbc, 0xc9, //0x000042ab bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x000042ae cmpl $16, %ecx + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000042b1 je LBB0_905 + 0xbb, 0xff, 0xff, 0xff, 0xff, //0x000042b7 movl $-1, %ebx + 0xd3, 0xe3, //0x000042bc shll %cl, %ebx + 0xf7, 0xd3, //0x000042be notl %ebx + 0x41, 0x21, 0xdb, //0x000042c0 andl %ebx, %r11d + 0x21, 0xde, //0x000042c3 andl %ebx, %esi + 0x21, 0xfb, //0x000042c5 andl %edi, %ebx + 0x89, 0xdf, //0x000042c7 movl %ebx, %edi + //0x000042c9 LBB0_905 + 0x41, 0x8d, 0x5b, 0xff, //0x000042c9 leal $-1(%r11), %ebx + 0x44, 0x21, 0xdb, //0x000042cd andl %r11d, %ebx + 0x0f, 0x85, 0xed, 0x04, 0x00, 0x00, //0x000042d0 jne LBB0_967 + 0x8d, 0x5e, 0xff, //0x000042d6 leal $-1(%rsi), %ebx + 0x21, 0xf3, //0x000042d9 andl %esi, %ebx + 0x0f, 0x85, 0xe2, 0x04, 0x00, 0x00, //0x000042db jne LBB0_967 + 0x8d, 0x5f, 0xff, //0x000042e1 leal $-1(%rdi), %ebx + 0x21, 0xfb, //0x000042e4 andl %edi, %ebx + 0x0f, 0x85, 0xd7, 0x04, 0x00, 0x00, //0x000042e6 jne LBB0_967 + 0x45, 0x85, 0xdb, //0x000042ec testl %r11d, %r11d + 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x000042ef je LBB0_911 + 0x41, 0x0f, 0xbc, 0xdb, //0x000042f5 bsfl %r11d, %ebx + 0x48, 0x83, 0xfa, 0xff, //0x000042f9 cmpq $-1, %rdx + 0x0f, 0x85, 0x41, 0x05, 0x00, 0x00, //0x000042fd jne LBB0_973 + 0x48, 0x8b, 0x54, 0x24, 0x20, //0x00004303 movq $32(%rsp), %rdx + 0x48, 0x01, 0xc2, //0x00004308 addq %rax, %rdx + 0x48, 0x01, 0xd3, //0x0000430b addq %rdx, %rbx + 0x48, 0x89, 0xda, //0x0000430e movq %rbx, %rdx + //0x00004311 LBB0_911 + 0x4d, 0x89, 0xe3, //0x00004311 movq %r12, %r11 + 0x85, 0xf6, //0x00004314 testl %esi, %esi + 0x0f, 0x84, 0x2b, 0x00, 0x00, 0x00, //0x00004316 je LBB0_914 + 0x0f, 0xbc, 0xf6, //0x0000431c bsfl %esi, %esi + 0x49, 0x83, 0xf8, 0xff, //0x0000431f cmpq $-1, %r8 + 0x0f, 0x85, 0xf7, 0x04, 0x00, 0x00, //0x00004323 jne LBB0_971 + 0x49, 0x89, 0xd4, //0x00004329 movq %rdx, %r12 + 0x48, 0x8b, 0x54, 0x24, 0x20, //0x0000432c movq $32(%rsp), %rdx + 0x48, 0x01, 0xc2, //0x00004331 addq %rax, %rdx + 0x48, 0x01, 0xd6, //0x00004334 addq %rdx, %rsi + 0x49, 0x89, 0xf0, //0x00004337 movq %rsi, %r8 + 0x85, 0xff, //0x0000433a testl %edi, %edi + 0x0f, 0x85, 0x10, 0x00, 0x00, 0x00, //0x0000433c jne LBB0_915 + 0xe9, 0x2a, 0x00, 0x00, 0x00, //0x00004342 jmp LBB0_917 + //0x00004347 LBB0_914 + 0x49, 0x89, 0xd4, //0x00004347 movq %rdx, %r12 + 0x85, 0xff, //0x0000434a testl %edi, %edi + 0x0f, 0x84, 0x1f, 0x00, 0x00, 0x00, //0x0000434c je LBB0_917 + //0x00004352 LBB0_915 + 0x0f, 0xbc, 0xf7, //0x00004352 bsfl %edi, %esi + 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x00004355 cmpq $-1, $48(%rsp) + 0x0f, 0x85, 0xbf, 0x04, 0x00, 0x00, //0x0000435b jne LBB0_971 + 0x48, 0x8b, 0x54, 0x24, 0x20, //0x00004361 movq $32(%rsp), %rdx + 0x48, 0x01, 0xc2, //0x00004366 addq %rax, %rdx + 0x48, 0x01, 0xd6, //0x00004369 addq %rdx, %rsi + 0x48, 0x89, 0x74, 0x24, 0x30, //0x0000436c movq %rsi, $48(%rsp) + //0x00004371 LBB0_917 + 0x83, 0xf9, 0x10, //0x00004371 cmpl $16, %ecx + 0x0f, 0x85, 0x4e, 0x01, 0x00, 0x00, //0x00004374 jne LBB0_936 + 0x49, 0x83, 0xc6, 0xf0, //0x0000437a addq $-16, %r14 + 0x48, 0x83, 0xc0, 0x10, //0x0000437e addq $16, %rax + 0x49, 0x83, 0xfe, 0x0f, //0x00004382 cmpq $15, %r14 + 0x0f, 0x87, 0xb4, 0xfe, 0xff, 0xff, //0x00004386 ja LBB0_903 + 0x49, 0x01, 0xc1, //0x0000438c addq %rax, %r9 + //0x0000438f LBB0_920 + 0x4d, 0x85, 0xf6, //0x0000438f testq %r14, %r14 + 0x0f, 0x84, 0x55, 0x01, 0x00, 0x00, //0x00004392 je LBB0_938 + 0x4b, 0x8d, 0x1c, 0x31, //0x00004398 leaq (%r9,%r14), %rbx + 0x4c, 0x89, 0xcf, //0x0000439c movq %r9, %rdi + 0x4c, 0x29, 0xdf, //0x0000439f subq %r11, %rdi + 0x31, 0xc9, //0x000043a2 xorl %ecx, %ecx + 0xe9, 0x24, 0x00, 0x00, 0x00, //0x000043a4 jmp LBB0_926 + //0x000043a9 LBB0_922 + 0x83, 0xfe, 0x65, //0x000043a9 cmpl $101, %esi + 0x0f, 0x85, 0x38, 0x01, 0x00, 0x00, //0x000043ac jne LBB0_937 + //0x000043b2 LBB0_923 + 0x49, 0x83, 0xf8, 0xff, //0x000043b2 cmpq $-1, %r8 + 0x0f, 0x85, 0x0f, 0x04, 0x00, 0x00, //0x000043b6 jne LBB0_968 + 0x4c, 0x8d, 0x04, 0x0f, //0x000043bc leaq (%rdi,%rcx), %r8 + //0x000043c0 .p2align 4, 0x90 + //0x000043c0 LBB0_925 + 0x48, 0x83, 0xc1, 0x01, //0x000043c0 addq $1, %rcx + 0x49, 0x39, 0xce, //0x000043c4 cmpq %rcx, %r14 + 0x0f, 0x84, 0x4e, 0x03, 0x00, 0x00, //0x000043c7 je LBB0_962 + //0x000043cd LBB0_926 + 0x41, 0x0f, 0xbe, 0x34, 0x09, //0x000043cd movsbl (%r9,%rcx), %esi + 0x8d, 0x46, 0xd0, //0x000043d2 leal $-48(%rsi), %eax + 0x83, 0xf8, 0x0a, //0x000043d5 cmpl $10, %eax + 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x000043d8 jb LBB0_925 + 0x8d, 0x56, 0xd5, //0x000043de leal $-43(%rsi), %edx + 0x83, 0xfa, 0x1a, //0x000043e1 cmpl $26, %edx + 0x0f, 0x87, 0xbf, 0xff, 0xff, 0xff, //0x000043e4 ja LBB0_922 + 0x48, 0x8d, 0x35, 0x8f, 0x1b, 0x00, 0x00, //0x000043ea leaq $7055(%rip), %rsi /* LJTI0_4+0(%rip) */ + 0x48, 0x63, 0x04, 0x96, //0x000043f1 movslq (%rsi,%rdx,4), %rax + 0x48, 0x01, 0xf0, //0x000043f5 addq %rsi, %rax + 0xff, 0xe0, //0x000043f8 jmpq *%rax + //0x000043fa LBB0_929 + 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x000043fa cmpq $-1, $48(%rsp) + 0x0f, 0x85, 0xc5, 0x03, 0x00, 0x00, //0x00004400 jne LBB0_968 + 0x48, 0x8d, 0x04, 0x0f, //0x00004406 leaq (%rdi,%rcx), %rax + 0x48, 0x89, 0x44, 0x24, 0x30, //0x0000440a movq %rax, $48(%rsp) + 0xe9, 0xac, 0xff, 0xff, 0xff, //0x0000440f jmp LBB0_925 + //0x00004414 LBB0_931 + 0x49, 0x83, 0xfc, 0xff, //0x00004414 cmpq $-1, %r12 + 0x0f, 0x85, 0xad, 0x03, 0x00, 0x00, //0x00004418 jne LBB0_968 + 0x4c, 0x8d, 0x24, 0x0f, //0x0000441e leaq (%rdi,%rcx), %r12 + 0xe9, 0x99, 0xff, 0xff, 0xff, //0x00004422 jmp LBB0_925 + //0x00004427 LBB0_933 + 0x4c, 0x01, 0xc9, //0x00004427 addq %r9, %rcx + 0x4c, 0x01, 0xd9, //0x0000442a addq %r11, %rcx + 0xc5, 0xf8, 0x77, //0x0000442d vzeroupper + 0xc5, 0x7a, 0x6f, 0x3d, 0xe8, 0xbd, 0xff, 0xff, //0x00004430 vmovdqu $-16920(%rip), %xmm15 /* LCPI0_19+0(%rip) */ + 0x49, 0x89, 0xc9, //0x00004438 movq %rcx, %r9 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000443b movq $-1, %rcx + 0x4d, 0x85, 0xe4, //0x00004442 testq %r12, %r12 + 0x48, 0x8b, 0x54, 0x24, 0x30, //0x00004445 movq $48(%rsp), %rdx + 0x0f, 0x85, 0xb2, 0x00, 0x00, 0x00, //0x0000444a jne LBB0_939 + 0xe9, 0x43, 0x14, 0x00, 0x00, //0x00004450 jmp LBB0_1148 + //0x00004455 LBB0_934 + 0x4d, 0x89, 0xf3, //0x00004455 movq %r14, %r11 + 0xe9, 0xe6, 0xf8, 0xff, 0xff, //0x00004458 jmp LBB0_826 + //0x0000445d LBB0_720 + 0x4d, 0x01, 0xfd, //0x0000445d addq %r15, %r13 + 0x48, 0x83, 0xf9, 0x20, //0x00004460 cmpq $32, %rcx + 0x0f, 0x82, 0x1e, 0x05, 0x00, 0x00, //0x00004464 jb LBB0_985 + //0x0000446a LBB0_721 + 0xc4, 0xc1, 0x7e, 0x6f, 0x45, 0x00, //0x0000446a vmovdqu (%r13), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00004470 vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00004474 vpmovmskb %ymm1, %edx + 0xc5, 0xfd, 0x74, 0xc7, //0x00004478 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x0000447c vpmovmskb %ymm0, %esi + 0x85, 0xf6, //0x00004480 testl %esi, %esi + 0x0f, 0x85, 0xa4, 0x04, 0x00, 0x00, //0x00004482 jne LBB0_981 + 0x4d, 0x85, 0xf6, //0x00004488 testq %r14, %r14 + 0x0f, 0x85, 0xb2, 0x04, 0x00, 0x00, //0x0000448b jne LBB0_983 + 0x45, 0x31, 0xf6, //0x00004491 xorl %r14d, %r14d + 0x48, 0x85, 0xd2, //0x00004494 testq %rdx, %rdx + 0x0f, 0x84, 0xe3, 0x04, 0x00, 0x00, //0x00004497 je LBB0_984 + //0x0000449d LBB0_724 + 0x48, 0x0f, 0xbc, 0xc2, //0x0000449d bsfq %rdx, %rax + 0x4d, 0x29, 0xfd, //0x000044a1 subq %r15, %r13 + 0x49, 0x01, 0xc5, //0x000044a4 addq %rax, %r13 + 0x49, 0x83, 0xc5, 0x01, //0x000044a7 addq $1, %r13 + 0x4c, 0x8d, 0x35, 0xc6, 0x18, 0x00, 0x00, //0x000044ab leaq $6342(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x4d, 0x85, 0xed, //0x000044b2 testq %r13, %r13 + 0x0f, 0x89, 0x25, 0xf2, 0xff, 0xff, //0x000044b5 jns LBB0_731 + 0xe9, 0xf3, 0x0a, 0x00, 0x00, //0x000044bb jmp LBB0_860 + //0x000044c0 LBB0_935 + 0x0f, 0xbc, 0xc2, //0x000044c0 bsfl %edx, %eax + 0xe9, 0x4a, 0x01, 0x00, 0x00, //0x000044c3 jmp LBB0_952 + //0x000044c8 LBB0_936 + 0x89, 0xc9, //0x000044c8 movl %ecx, %ecx + 0x49, 0x01, 0xc9, //0x000044ca addq %rcx, %r9 + 0x49, 0x01, 0xc1, //0x000044cd addq %rax, %r9 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000044d0 movq $-1, %rcx + 0x4d, 0x85, 0xe4, //0x000044d7 testq %r12, %r12 + 0x48, 0x8b, 0x54, 0x24, 0x30, //0x000044da movq $48(%rsp), %rdx + 0x0f, 0x85, 0x1d, 0x00, 0x00, 0x00, //0x000044df jne LBB0_939 + 0xe9, 0xae, 0x13, 0x00, 0x00, //0x000044e5 jmp LBB0_1148 + //0x000044ea LBB0_937 + 0x49, 0x01, 0xc9, //0x000044ea addq %rcx, %r9 + //0x000044ed LBB0_938 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000044ed movq $-1, %rcx + 0x4d, 0x85, 0xe4, //0x000044f4 testq %r12, %r12 + 0x48, 0x8b, 0x54, 0x24, 0x30, //0x000044f7 movq $48(%rsp), %rdx + 0x0f, 0x84, 0x96, 0x13, 0x00, 0x00, //0x000044fc je LBB0_1148 + //0x00004502 LBB0_939 + 0x48, 0x85, 0xd2, //0x00004502 testq %rdx, %rdx + 0xc5, 0xfe, 0x6f, 0x2d, 0xf3, 0xba, 0xff, 0xff, //0x00004505 vmovdqu $-17677(%rip), %ymm5 /* LCPI0_0+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x6b, 0xbb, 0xff, 0xff, //0x0000450d vmovdqu $-17557(%rip), %ymm6 /* LCPI0_7+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x83, 0xbb, 0xff, 0xff, //0x00004515 vmovdqu $-17533(%rip), %ymm7 /* LCPI0_8+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0xfb, 0xbb, 0xff, 0xff, //0x0000451d vmovdqu $-17413(%rip), %ymm8 /* LCPI0_13+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x0d, 0x13, 0xbc, 0xff, 0xff, //0x00004525 vmovdqu $-17389(%rip), %ymm9 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x15, 0x2b, 0xbc, 0xff, 0xff, //0x0000452d vmovdqu $-17365(%rip), %ymm10 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0x43, 0xbc, 0xff, 0xff, //0x00004535 vmovdqu $-17341(%rip), %ymm11 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0xfb, 0xba, 0xff, 0xff, //0x0000453d vmovdqu $-17669(%rip), %ymm12 /* LCPI0_2+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0x53, 0xbc, 0xff, 0xff, //0x00004545 vmovdqu $-17325(%rip), %ymm13 /* LCPI0_17+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x6b, 0xbc, 0xff, 0xff, //0x0000454d vmovdqu $-17301(%rip), %ymm14 /* LCPI0_18+0(%rip) */ + 0x0f, 0x84, 0x3d, 0x13, 0x00, 0x00, //0x00004555 je LBB0_1148 + 0x4d, 0x85, 0xc0, //0x0000455b testq %r8, %r8 + 0x0f, 0x84, 0x34, 0x13, 0x00, 0x00, //0x0000455e je LBB0_1148 + 0x4d, 0x29, 0xd9, //0x00004564 subq %r11, %r9 + 0x49, 0x8d, 0x49, 0xff, //0x00004567 leaq $-1(%r9), %rcx + 0x49, 0x39, 0xcc, //0x0000456b cmpq %rcx, %r12 + 0x0f, 0x84, 0x41, 0x00, 0x00, 0x00, //0x0000456e je LBB0_1146 + 0x48, 0x39, 0xca, //0x00004574 cmpq %rcx, %rdx + 0x0f, 0x84, 0x38, 0x00, 0x00, 0x00, //0x00004577 je LBB0_1146 + 0x49, 0x39, 0xc8, //0x0000457d cmpq %rcx, %r8 + 0x0f, 0x84, 0x2f, 0x00, 0x00, 0x00, //0x00004580 je LBB0_1146 + 0x48, 0x85, 0xd2, //0x00004586 testq %rdx, %rdx + 0x0f, 0x8e, 0x3c, 0x00, 0x00, 0x00, //0x00004589 jle LBB0_947 + 0x48, 0x8d, 0x42, 0xff, //0x0000458f leaq $-1(%rdx), %rax + 0x49, 0x39, 0xc0, //0x00004593 cmpq %rax, %r8 + 0x0f, 0x84, 0x2f, 0x00, 0x00, 0x00, //0x00004596 je LBB0_947 + 0x48, 0xf7, 0xd2, //0x0000459c notq %rdx + 0x49, 0x89, 0xd1, //0x0000459f movq %rdx, %r9 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x000045a2 movq $16(%rsp), %r12 + 0x4d, 0x85, 0xc9, //0x000045a7 testq %r9, %r9 + 0x0f, 0x89, 0x06, 0x03, 0x00, 0x00, //0x000045aa jns LBB0_976 + 0xe9, 0xe0, 0x12, 0x00, 0x00, //0x000045b0 jmp LBB0_1147 + //0x000045b5 LBB0_1146 + 0x49, 0xf7, 0xd9, //0x000045b5 negq %r9 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x000045b8 movq $16(%rsp), %r12 + 0x4d, 0x85, 0xc9, //0x000045bd testq %r9, %r9 + 0x0f, 0x89, 0xf0, 0x02, 0x00, 0x00, //0x000045c0 jns LBB0_976 + 0xe9, 0xca, 0x12, 0x00, 0x00, //0x000045c6 jmp LBB0_1147 + //0x000045cb LBB0_947 + 0x4c, 0x89, 0xe0, //0x000045cb movq %r12, %rax + 0x4c, 0x09, 0xc0, //0x000045ce orq %r8, %rax + 0x0f, 0x99, 0xc1, //0x000045d1 setns %cl + 0x0f, 0x88, 0xb4, 0x00, 0x00, 0x00, //0x000045d4 js LBB0_953 + 0x4d, 0x39, 0xc4, //0x000045da cmpq %r8, %r12 + 0x0f, 0x8c, 0xab, 0x00, 0x00, 0x00, //0x000045dd jl LBB0_953 + 0x49, 0xf7, 0xd4, //0x000045e3 notq %r12 + 0x4d, 0x89, 0xe1, //0x000045e6 movq %r12, %r9 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x000045e9 movq $16(%rsp), %r12 + 0x4d, 0x85, 0xc9, //0x000045ee testq %r9, %r9 + 0x0f, 0x89, 0xbf, 0x02, 0x00, 0x00, //0x000045f1 jns LBB0_976 + 0xe9, 0x99, 0x12, 0x00, 0x00, //0x000045f7 jmp LBB0_1147 + //0x000045fc LBB0_950 + 0x4d, 0x29, 0xfa, //0x000045fc subq %r15, %r10 + 0x49, 0x01, 0xf2, //0x000045ff addq %rsi, %r10 + 0x49, 0x39, 0xda, //0x00004602 cmpq %rbx, %r10 + 0x0f, 0x82, 0x37, 0xef, 0xff, 0xff, //0x00004605 jb LBB0_706 + 0xe9, 0x8b, 0x09, 0x00, 0x00, //0x0000460b jmp LBB0_1046 + //0x00004610 LBB0_951 + 0x89, 0xf0, //0x00004610 movl %esi, %eax + //0x00004612 LBB0_952 + 0x49, 0xf7, 0xd3, //0x00004612 notq %r11 + 0x49, 0x29, 0xc3, //0x00004615 subq %rax, %r11 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004618 movq $16(%rsp), %r12 + 0x4d, 0x85, 0xdb, //0x0000461d testq %r11, %r11 + 0x0f, 0x89, 0x15, 0xed, 0xff, 0xff, //0x00004620 jns LBB0_960 + 0xe9, 0xca, 0x09, 0x00, 0x00, //0x00004626 jmp LBB0_1054 + //0x0000462b LBB0_809 + 0x4d, 0x01, 0xfd, //0x0000462b addq %r15, %r13 + 0x48, 0x83, 0xf9, 0x20, //0x0000462e cmpq $32, %rcx + 0x0f, 0x82, 0x85, 0x04, 0x00, 0x00, //0x00004632 jb LBB0_1002 + //0x00004638 LBB0_810 + 0xc4, 0xc1, 0x7e, 0x6f, 0x45, 0x00, //0x00004638 vmovdqu (%r13), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x0000463e vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00004642 vpmovmskb %ymm1, %edx + 0xc5, 0xfd, 0x74, 0xc7, //0x00004646 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x0000464a vpmovmskb %ymm0, %esi + 0x85, 0xf6, //0x0000464e testl %esi, %esi + 0x0f, 0x85, 0x0b, 0x04, 0x00, 0x00, //0x00004650 jne LBB0_998 + 0x4d, 0x85, 0xf6, //0x00004656 testq %r14, %r14 + 0x0f, 0x85, 0x19, 0x04, 0x00, 0x00, //0x00004659 jne LBB0_1000 + 0x45, 0x31, 0xf6, //0x0000465f xorl %r14d, %r14d + 0x48, 0x85, 0xd2, //0x00004662 testq %rdx, %rdx + 0x0f, 0x84, 0x4a, 0x04, 0x00, 0x00, //0x00004665 je LBB0_1001 + //0x0000466b LBB0_813 + 0x48, 0x0f, 0xbc, 0xc2, //0x0000466b bsfq %rdx, %rax + 0x4d, 0x29, 0xfd, //0x0000466f subq %r15, %r13 + 0x49, 0x01, 0xc5, //0x00004672 addq %rax, %r13 + 0x49, 0x83, 0xc5, 0x01, //0x00004675 addq $1, %r13 + 0x4c, 0x8d, 0x35, 0xf8, 0x16, 0x00, 0x00, //0x00004679 leaq $5880(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x4d, 0x85, 0xed, //0x00004680 testq %r13, %r13 + 0x0f, 0x89, 0x57, 0xf6, 0xff, 0xff, //0x00004683 jns LBB0_820 + 0xe9, 0x25, 0x09, 0x00, 0x00, //0x00004689 jmp LBB0_860 + //0x0000468e LBB0_953 + 0x49, 0x8d, 0x40, 0xff, //0x0000468e leaq $-1(%r8), %rax + 0x49, 0x39, 0xc4, //0x00004692 cmpq %rax, %r12 + 0x49, 0xf7, 0xd0, //0x00004695 notq %r8 + 0x4d, 0x0f, 0x45, 0xc1, //0x00004698 cmovneq %r9, %r8 + 0x84, 0xc9, //0x0000469c testb %cl, %cl + 0x4d, 0x0f, 0x45, 0xc8, //0x0000469e cmovneq %r8, %r9 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x000046a2 movq $16(%rsp), %r12 + 0x4d, 0x85, 0xc9, //0x000046a7 testq %r9, %r9 + 0x0f, 0x89, 0x06, 0x02, 0x00, 0x00, //0x000046aa jns LBB0_976 + 0xe9, 0xe0, 0x11, 0x00, 0x00, //0x000046b0 jmp LBB0_1147 + //0x000046b5 LBB0_954 + 0x0f, 0xbc, 0xc2, //0x000046b5 bsfl %edx, %eax + 0xe9, 0x19, 0x00, 0x00, 0x00, //0x000046b8 jmp LBB0_958 + //0x000046bd LBB0_955 + 0x4c, 0x03, 0x7c, 0x24, 0x38, //0x000046bd addq $56(%rsp), %r15 + 0x4d, 0x29, 0xdf, //0x000046c2 subq %r11, %r15 + 0x49, 0x29, 0xcf, //0x000046c5 subq %rcx, %r15 + //0x000046c8 LBB0_956 + 0x49, 0x83, 0xc7, 0xfe, //0x000046c8 addq $-2, %r15 + 0x4d, 0x89, 0xfb, //0x000046cc movq %r15, %r11 + 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x000046cf jmp LBB0_959 + //0x000046d4 LBB0_957 + 0x89, 0xf0, //0x000046d4 movl %esi, %eax + //0x000046d6 LBB0_958 + 0x4c, 0x03, 0x7c, 0x24, 0x38, //0x000046d6 addq $56(%rsp), %r15 + 0x4d, 0x29, 0xdf, //0x000046db subq %r11, %r15 + 0x49, 0x29, 0xc7, //0x000046de subq %rax, %r15 + 0x49, 0x29, 0xdf, //0x000046e1 subq %rbx, %r15 + 0x49, 0x83, 0xc7, 0xfe, //0x000046e4 addq $-2, %r15 + 0x4d, 0x89, 0xfb, //0x000046e8 movq %r15, %r11 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x000046eb movq $8(%rsp), %r9 + //0x000046f0 LBB0_959 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x000046f0 movq $16(%rsp), %r12 + 0x4c, 0x8d, 0x35, 0x7c, 0x16, 0x00, 0x00, //0x000046f5 leaq $5756(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x4d, 0x85, 0xdb, //0x000046fc testq %r11, %r11 + 0x0f, 0x89, 0x36, 0xec, 0xff, 0xff, //0x000046ff jns LBB0_960 + 0xe9, 0xeb, 0x08, 0x00, 0x00, //0x00004705 jmp LBB0_1054 + //0x0000470a LBB0_961 + 0x4d, 0x01, 0xfa, //0x0000470a addq %r15, %r10 + 0x48, 0x85, 0xd2, //0x0000470d testq %rdx, %rdx + 0x0f, 0x85, 0xc2, 0xed, 0xff, 0xff, //0x00004710 jne LBB0_699 + 0xe9, 0xf7, 0xed, 0xff, 0xff, //0x00004716 jmp LBB0_704 + //0x0000471b LBB0_962 + 0x49, 0x89, 0xd9, //0x0000471b movq %rbx, %r9 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000471e movq $-1, %rcx + 0x4d, 0x85, 0xe4, //0x00004725 testq %r12, %r12 + 0x48, 0x8b, 0x54, 0x24, 0x30, //0x00004728 movq $48(%rsp), %rdx + 0x0f, 0x85, 0xcf, 0xfd, 0xff, 0xff, //0x0000472d jne LBB0_939 + 0xe9, 0x60, 0x11, 0x00, 0x00, //0x00004733 jmp LBB0_1148 + //0x00004738 LBB0_963 + 0x0f, 0xbc, 0xc2, //0x00004738 bsfl %edx, %eax + 0xe9, 0x6a, 0x00, 0x00, 0x00, //0x0000473b jmp LBB0_966 + //0x00004740 LBB0_964 + 0x89, 0xf0, //0x00004740 movl %esi, %eax + 0x4c, 0x03, 0x7c, 0x24, 0x38, //0x00004742 addq $56(%rsp), %r15 + 0x4d, 0x29, 0xdf, //0x00004747 subq %r11, %r15 + 0x49, 0x29, 0xc7, //0x0000474a subq %rax, %r15 + 0x49, 0x29, 0xdf, //0x0000474d subq %rbx, %r15 + 0xe9, 0x73, 0xff, 0xff, 0xff, //0x00004750 jmp LBB0_956 + //0x00004755 LBB0_850 + 0x4d, 0x01, 0xfd, //0x00004755 addq %r15, %r13 + 0x48, 0x83, 0xf9, 0x20, //0x00004758 cmpq $32, %rcx + 0x0f, 0x82, 0x18, 0x05, 0x00, 0x00, //0x0000475c jb LBB0_1023 + //0x00004762 LBB0_851 + 0xc4, 0xc1, 0x7e, 0x6f, 0x45, 0x00, //0x00004762 vmovdqu (%r13), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00004768 vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x0000476c vpmovmskb %ymm1, %edx + 0xc5, 0xfd, 0x74, 0xc7, //0x00004770 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00004774 vpmovmskb %ymm0, %esi + 0x85, 0xf6, //0x00004778 testl %esi, %esi + 0x0f, 0x85, 0x9e, 0x04, 0x00, 0x00, //0x0000477a jne LBB0_1019 + 0x4d, 0x85, 0xf6, //0x00004780 testq %r14, %r14 + 0x0f, 0x85, 0xac, 0x04, 0x00, 0x00, //0x00004783 jne LBB0_1021 + 0x45, 0x31, 0xf6, //0x00004789 xorl %r14d, %r14d + 0x48, 0x85, 0xd2, //0x0000478c testq %rdx, %rdx + 0x0f, 0x84, 0xdd, 0x04, 0x00, 0x00, //0x0000478f je LBB0_1022 + //0x00004795 LBB0_854 + 0x48, 0x0f, 0xbc, 0xc2, //0x00004795 bsfq %rdx, %rax + 0x4d, 0x29, 0xfd, //0x00004799 subq %r15, %r13 + 0x49, 0x01, 0xc5, //0x0000479c addq %rax, %r13 + 0x49, 0x83, 0xc5, 0x01, //0x0000479f addq $1, %r13 + 0xe9, 0xf8, 0xf7, 0xff, 0xff, //0x000047a3 jmp LBB0_859 + //0x000047a8 LBB0_965 + 0x89, 0xf0, //0x000047a8 movl %esi, %eax + //0x000047aa LBB0_966 + 0x49, 0xf7, 0xd1, //0x000047aa notq %r9 + 0x49, 0x29, 0xc1, //0x000047ad subq %rax, %r9 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x000047b0 movq $16(%rsp), %r12 + 0x4d, 0x85, 0xc9, //0x000047b5 testq %r9, %r9 + 0x0f, 0x89, 0xf8, 0x00, 0x00, 0x00, //0x000047b8 jns LBB0_976 + 0xe9, 0xd2, 0x10, 0x00, 0x00, //0x000047be jmp LBB0_1147 + //0x000047c3 LBB0_967 + 0x0f, 0xbc, 0xcb, //0x000047c3 bsfl %ebx, %ecx + 0xe9, 0x7b, 0x00, 0x00, 0x00, //0x000047c6 jmp LBB0_974 + //0x000047cb LBB0_968 + 0x4d, 0x01, 0xef, //0x000047cb addq %r13, %r15 + 0x4d, 0x29, 0xcf, //0x000047ce subq %r9, %r15 + 0x48, 0xf7, 0xd1, //0x000047d1 notq %rcx + 0x4c, 0x01, 0xf9, //0x000047d4 addq %r15, %rcx + 0x49, 0x89, 0xc9, //0x000047d7 movq %rcx, %r9 + 0xe9, 0x79, 0x00, 0x00, 0x00, //0x000047da jmp LBB0_975 + //0x000047df LBB0_969 + 0x4f, 0x8d, 0x2c, 0x1f, //0x000047df leaq (%r15,%r11), %r13 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000047e3 movq $-1, %r8 + 0x45, 0x31, 0xf6, //0x000047ea xorl %r14d, %r14d + 0x48, 0x83, 0xf9, 0x20, //0x000047ed cmpq $32, %rcx + 0x0f, 0x83, 0x73, 0xfc, 0xff, 0xff, //0x000047f1 jae LBB0_721 + 0xe9, 0x8c, 0x01, 0x00, 0x00, //0x000047f7 jmp LBB0_985 + //0x000047fc LBB0_970 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000047fc movq $-1, %rax + 0x48, 0xc7, 0x44, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff, //0x00004803 movq $-1, $48(%rsp) + 0x4c, 0x8b, 0x5c, 0x24, 0x20, //0x0000480c movq $32(%rsp), %r11 + 0x49, 0x83, 0xf8, 0x10, //0x00004811 cmpq $16, %r8 + 0x0f, 0x83, 0x1d, 0xf1, 0xff, 0xff, //0x00004815 jae LBB0_767 + 0xe9, 0x59, 0xf2, 0xff, 0xff, //0x0000481b jmp LBB0_785 + //0x00004820 LBB0_971 + 0x89, 0xf1, //0x00004820 movl %esi, %ecx + 0xe9, 0x1f, 0x00, 0x00, 0x00, //0x00004822 jmp LBB0_974 + //0x00004827 LBB0_972 + 0x4f, 0x8d, 0x2c, 0x1f, //0x00004827 leaq (%r15,%r11), %r13 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000482b movq $-1, %r8 + 0x45, 0x31, 0xf6, //0x00004832 xorl %r14d, %r14d + 0x48, 0x83, 0xf9, 0x20, //0x00004835 cmpq $32, %rcx + 0x0f, 0x83, 0xf9, 0xfd, 0xff, 0xff, //0x00004839 jae LBB0_810 + 0xe9, 0x79, 0x02, 0x00, 0x00, //0x0000483f jmp LBB0_1002 + //0x00004844 LBB0_973 + 0x89, 0xd9, //0x00004844 movl %ebx, %ecx + //0x00004846 LBB0_974 + 0x4d, 0x01, 0xef, //0x00004846 addq %r13, %r15 + 0x4d, 0x29, 0xcf, //0x00004849 subq %r9, %r15 + 0x49, 0x29, 0xcf, //0x0000484c subq %rcx, %r15 + 0x48, 0xf7, 0xd0, //0x0000484f notq %rax + 0x4c, 0x01, 0xf8, //0x00004852 addq %r15, %rax + 0x49, 0x89, 0xc1, //0x00004855 movq %rax, %r9 + //0x00004858 LBB0_975 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004858 movq $16(%rsp), %r12 + 0xc5, 0xfe, 0x6f, 0x2d, 0x9b, 0xb7, 0xff, 0xff, //0x0000485d vmovdqu $-18533(%rip), %ymm5 /* LCPI0_0+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x13, 0xb8, 0xff, 0xff, //0x00004865 vmovdqu $-18413(%rip), %ymm6 /* LCPI0_7+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x2b, 0xb8, 0xff, 0xff, //0x0000486d vmovdqu $-18389(%rip), %ymm7 /* LCPI0_8+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0xa3, 0xb8, 0xff, 0xff, //0x00004875 vmovdqu $-18269(%rip), %ymm8 /* LCPI0_13+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x0d, 0xbb, 0xb8, 0xff, 0xff, //0x0000487d vmovdqu $-18245(%rip), %ymm9 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x15, 0xd3, 0xb8, 0xff, 0xff, //0x00004885 vmovdqu $-18221(%rip), %ymm10 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0xeb, 0xb8, 0xff, 0xff, //0x0000488d vmovdqu $-18197(%rip), %ymm11 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0xa3, 0xb7, 0xff, 0xff, //0x00004895 vmovdqu $-18525(%rip), %ymm12 /* LCPI0_2+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0xfb, 0xb8, 0xff, 0xff, //0x0000489d vmovdqu $-18181(%rip), %ymm13 /* LCPI0_17+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x13, 0xb9, 0xff, 0xff, //0x000048a5 vmovdqu $-18157(%rip), %ymm14 /* LCPI0_18+0(%rip) */ + 0x4d, 0x85, 0xc9, //0x000048ad testq %r9, %r9 + 0x0f, 0x88, 0xdf, 0x0f, 0x00, 0x00, //0x000048b0 js LBB0_1147 + //0x000048b6 LBB0_976 + 0x48, 0x8b, 0x44, 0x24, 0x08, //0x000048b6 movq $8(%rsp), %rax + 0x48, 0x8b, 0x08, //0x000048bb movq (%rax), %rcx + //0x000048be LBB0_977 + 0x4c, 0x01, 0xc9, //0x000048be addq %r9, %rcx + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x000048c1 movq $8(%rsp), %r9 + 0x49, 0x89, 0x09, //0x000048c6 movq %rcx, (%r9) + 0x4d, 0x85, 0xed, //0x000048c9 testq %r13, %r13 + 0x4c, 0x8d, 0x35, 0xa5, 0x14, 0x00, 0x00, //0x000048cc leaq $5285(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x0f, 0x8f, 0x87, 0xea, 0xff, 0xff, //0x000048d3 jg LBB0_674 + 0xe9, 0xae, 0x0f, 0x00, 0x00, //0x000048d9 jmp LBB0_978 + //0x000048de LBB0_979 + 0x4f, 0x8d, 0x2c, 0x1f, //0x000048de leaq (%r15,%r11), %r13 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000048e2 movq $-1, %r8 + 0x45, 0x31, 0xf6, //0x000048e9 xorl %r14d, %r14d + 0x48, 0x83, 0xf9, 0x20, //0x000048ec cmpq $32, %rcx + 0x0f, 0x83, 0x6c, 0xfe, 0xff, 0xff, //0x000048f0 jae LBB0_851 + 0xe9, 0x7f, 0x03, 0x00, 0x00, //0x000048f6 jmp LBB0_1023 + //0x000048fb LBB0_980 + 0x48, 0xc7, 0x44, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff, //0x000048fb movq $-1, $48(%rsp) + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004904 movq $-1, %r8 + 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x0000490b movq $-1, %r12 + 0x4d, 0x89, 0xd9, //0x00004912 movq %r11, %r9 + 0x49, 0x83, 0xfe, 0x10, //0x00004915 cmpq $16, %r14 + 0xc5, 0x7a, 0x6f, 0x3d, 0xff, 0xb8, 0xff, 0xff, //0x00004919 vmovdqu $-18177(%rip), %xmm15 /* LCPI0_19+0(%rip) */ + 0x0f, 0x83, 0x0c, 0xf9, 0xff, 0xff, //0x00004921 jae LBB0_902 + 0xe9, 0x63, 0xfa, 0xff, 0xff, //0x00004927 jmp LBB0_920 + //0x0000492c LBB0_981 + 0x49, 0x83, 0xf8, 0xff, //0x0000492c cmpq $-1, %r8 + 0x0f, 0x85, 0x0d, 0x00, 0x00, 0x00, //0x00004930 jne LBB0_983 + 0x4c, 0x89, 0xe8, //0x00004936 movq %r13, %rax + 0x4c, 0x29, 0xf8, //0x00004939 subq %r15, %rax + 0x4c, 0x0f, 0xbc, 0xc6, //0x0000493c bsfq %rsi, %r8 + 0x49, 0x01, 0xc0, //0x00004940 addq %rax, %r8 + //0x00004943 LBB0_983 + 0x44, 0x89, 0xf0, //0x00004943 movl %r14d, %eax + 0xf7, 0xd0, //0x00004946 notl %eax + 0x21, 0xf0, //0x00004948 andl %esi, %eax + 0x8d, 0x3c, 0x00, //0x0000494a leal (%rax,%rax), %edi + 0x41, 0x8d, 0x1c, 0x46, //0x0000494d leal (%r14,%rax,2), %ebx + 0xf7, 0xd7, //0x00004951 notl %edi + 0x21, 0xf7, //0x00004953 andl %esi, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00004955 andl $-1431655766, %edi + 0x45, 0x31, 0xf6, //0x0000495b xorl %r14d, %r14d + 0x01, 0xc7, //0x0000495e addl %eax, %edi + 0x41, 0x0f, 0x92, 0xc6, //0x00004960 setb %r14b + 0x01, 0xff, //0x00004964 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00004966 xorl $1431655765, %edi + 0x21, 0xdf, //0x0000496c andl %ebx, %edi + 0xf7, 0xd7, //0x0000496e notl %edi + 0x21, 0xfa, //0x00004970 andl %edi, %edx + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004972 movq $16(%rsp), %r12 + 0x48, 0x85, 0xd2, //0x00004977 testq %rdx, %rdx + 0x0f, 0x85, 0x1d, 0xfb, 0xff, 0xff, //0x0000497a jne LBB0_724 + //0x00004980 LBB0_984 + 0x49, 0x83, 0xc5, 0x20, //0x00004980 addq $32, %r13 + 0x48, 0x83, 0xc1, 0xe0, //0x00004984 addq $-32, %rcx + //0x00004988 LBB0_985 + 0x4d, 0x85, 0xf6, //0x00004988 testq %r14, %r14 + 0x0f, 0x85, 0x05, 0x02, 0x00, 0x00, //0x0000498b jne LBB0_1015 + 0x4c, 0x89, 0xfa, //0x00004991 movq %r15, %rdx + 0x48, 0xf7, 0xd2, //0x00004994 notq %rdx + 0x4c, 0x89, 0xc7, //0x00004997 movq %r8, %rdi + 0x4c, 0x8d, 0x35, 0xd7, 0x13, 0x00, 0x00, //0x0000499a leaq $5079(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x48, 0x85, 0xc9, //0x000049a1 testq %rcx, %rcx + 0x0f, 0x84, 0x89, 0x00, 0x00, 0x00, //0x000049a4 je LBB0_997 + //0x000049aa LBB0_987 + 0x48, 0x83, 0xc2, 0x01, //0x000049aa addq $1, %rdx + //0x000049ae LBB0_988 + 0x31, 0xf6, //0x000049ae xorl %esi, %esi + //0x000049b0 LBB0_989 + 0x41, 0x0f, 0xb6, 0x5c, 0x35, 0x00, //0x000049b0 movzbl (%r13,%rsi), %ebx + 0x80, 0xfb, 0x22, //0x000049b6 cmpb $34, %bl + 0x0f, 0x84, 0x6d, 0x00, 0x00, 0x00, //0x000049b9 je LBB0_996 + 0x80, 0xfb, 0x5c, //0x000049bf cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000049c2 je LBB0_994 + 0x48, 0x83, 0xc6, 0x01, //0x000049c8 addq $1, %rsi + 0x48, 0x39, 0xf1, //0x000049cc cmpq %rsi, %rcx + 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x000049cf jne LBB0_989 + 0xe9, 0x6a, 0x00, 0x00, 0x00, //0x000049d5 jmp LBB0_992 + //0x000049da LBB0_994 + 0x48, 0x8d, 0x41, 0xff, //0x000049da leaq $-1(%rcx), %rax + 0x48, 0x39, 0xf0, //0x000049de cmpq %rsi, %rax + 0x0f, 0x84, 0xd6, 0x05, 0x00, 0x00, //0x000049e1 je LBB0_861 + 0x4a, 0x8d, 0x04, 0x2a, //0x000049e7 leaq (%rdx,%r13), %rax + 0x48, 0x01, 0xf0, //0x000049eb addq %rsi, %rax + 0x48, 0x83, 0xff, 0xff, //0x000049ee cmpq $-1, %rdi + 0x4c, 0x0f, 0x44, 0xc0, //0x000049f2 cmoveq %rax, %r8 + 0x48, 0x0f, 0x44, 0xf8, //0x000049f6 cmoveq %rax, %rdi + 0x49, 0x01, 0xf5, //0x000049fa addq %rsi, %r13 + 0x49, 0x83, 0xc5, 0x02, //0x000049fd addq $2, %r13 + 0x48, 0x89, 0xc8, //0x00004a01 movq %rcx, %rax + 0x48, 0x29, 0xf0, //0x00004a04 subq %rsi, %rax + 0x48, 0x83, 0xc0, 0xfe, //0x00004a07 addq $-2, %rax + 0x48, 0x83, 0xc1, 0xfe, //0x00004a0b addq $-2, %rcx + 0x48, 0x39, 0xf1, //0x00004a0f cmpq %rsi, %rcx + 0x48, 0x89, 0xc1, //0x00004a12 movq %rax, %rcx + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004a15 movq $16(%rsp), %r12 + 0x4c, 0x8d, 0x35, 0x57, 0x13, 0x00, 0x00, //0x00004a1a leaq $4951(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x0f, 0x85, 0x87, 0xff, 0xff, 0xff, //0x00004a21 jne LBB0_988 + 0xe9, 0x91, 0x05, 0x00, 0x00, //0x00004a27 jmp LBB0_861 + //0x00004a2c LBB0_996 + 0x49, 0x01, 0xf5, //0x00004a2c addq %rsi, %r13 + 0x49, 0x83, 0xc5, 0x01, //0x00004a2f addq $1, %r13 + //0x00004a33 LBB0_997 + 0x4d, 0x29, 0xfd, //0x00004a33 subq %r15, %r13 + 0x4d, 0x85, 0xed, //0x00004a36 testq %r13, %r13 + 0x0f, 0x89, 0xa1, 0xec, 0xff, 0xff, //0x00004a39 jns LBB0_731 + 0xe9, 0x6f, 0x05, 0x00, 0x00, //0x00004a3f jmp LBB0_860 + //0x00004a44 LBB0_992 + 0x80, 0xfb, 0x22, //0x00004a44 cmpb $34, %bl + 0x0f, 0x85, 0x70, 0x05, 0x00, 0x00, //0x00004a47 jne LBB0_861 + 0x49, 0x01, 0xcd, //0x00004a4d addq %rcx, %r13 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004a50 movq $16(%rsp), %r12 + 0x4c, 0x8d, 0x35, 0x1c, 0x13, 0x00, 0x00, //0x00004a55 leaq $4892(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0xe9, 0xd2, 0xff, 0xff, 0xff, //0x00004a5c jmp LBB0_997 + //0x00004a61 LBB0_998 + 0x49, 0x83, 0xf8, 0xff, //0x00004a61 cmpq $-1, %r8 + 0x0f, 0x85, 0x0d, 0x00, 0x00, 0x00, //0x00004a65 jne LBB0_1000 + 0x4c, 0x89, 0xe8, //0x00004a6b movq %r13, %rax + 0x4c, 0x29, 0xf8, //0x00004a6e subq %r15, %rax + 0x4c, 0x0f, 0xbc, 0xc6, //0x00004a71 bsfq %rsi, %r8 + 0x49, 0x01, 0xc0, //0x00004a75 addq %rax, %r8 + //0x00004a78 LBB0_1000 + 0x44, 0x89, 0xf0, //0x00004a78 movl %r14d, %eax + 0xf7, 0xd0, //0x00004a7b notl %eax + 0x21, 0xf0, //0x00004a7d andl %esi, %eax + 0x8d, 0x3c, 0x00, //0x00004a7f leal (%rax,%rax), %edi + 0x41, 0x8d, 0x1c, 0x46, //0x00004a82 leal (%r14,%rax,2), %ebx + 0xf7, 0xd7, //0x00004a86 notl %edi + 0x21, 0xf7, //0x00004a88 andl %esi, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00004a8a andl $-1431655766, %edi + 0x45, 0x31, 0xf6, //0x00004a90 xorl %r14d, %r14d + 0x01, 0xc7, //0x00004a93 addl %eax, %edi + 0x41, 0x0f, 0x92, 0xc6, //0x00004a95 setb %r14b + 0x01, 0xff, //0x00004a99 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00004a9b xorl $1431655765, %edi + 0x21, 0xdf, //0x00004aa1 andl %ebx, %edi + 0xf7, 0xd7, //0x00004aa3 notl %edi + 0x21, 0xfa, //0x00004aa5 andl %edi, %edx + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004aa7 movq $16(%rsp), %r12 + 0x48, 0x85, 0xd2, //0x00004aac testq %rdx, %rdx + 0x0f, 0x85, 0xb6, 0xfb, 0xff, 0xff, //0x00004aaf jne LBB0_813 + //0x00004ab5 LBB0_1001 + 0x49, 0x83, 0xc5, 0x20, //0x00004ab5 addq $32, %r13 + 0x48, 0x83, 0xc1, 0xe0, //0x00004ab9 addq $-32, %rcx + //0x00004abd LBB0_1002 + 0x4d, 0x85, 0xf6, //0x00004abd testq %r14, %r14 + 0x0f, 0x85, 0x14, 0x01, 0x00, 0x00, //0x00004ac0 jne LBB0_1017 + 0x4c, 0x89, 0xfa, //0x00004ac6 movq %r15, %rdx + 0x48, 0xf7, 0xd2, //0x00004ac9 notq %rdx + 0x4c, 0x89, 0xc7, //0x00004acc movq %r8, %rdi + 0x4c, 0x8d, 0x35, 0xa2, 0x12, 0x00, 0x00, //0x00004acf leaq $4770(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x48, 0x85, 0xc9, //0x00004ad6 testq %rcx, %rcx + 0x0f, 0x84, 0x89, 0x00, 0x00, 0x00, //0x00004ad9 je LBB0_1014 + //0x00004adf LBB0_1004 + 0x48, 0x83, 0xc2, 0x01, //0x00004adf addq $1, %rdx + //0x00004ae3 LBB0_1005 + 0x31, 0xf6, //0x00004ae3 xorl %esi, %esi + //0x00004ae5 LBB0_1006 + 0x41, 0x0f, 0xb6, 0x5c, 0x35, 0x00, //0x00004ae5 movzbl (%r13,%rsi), %ebx + 0x80, 0xfb, 0x22, //0x00004aeb cmpb $34, %bl + 0x0f, 0x84, 0x6d, 0x00, 0x00, 0x00, //0x00004aee je LBB0_1013 + 0x80, 0xfb, 0x5c, //0x00004af4 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00004af7 je LBB0_1011 + 0x48, 0x83, 0xc6, 0x01, //0x00004afd addq $1, %rsi + 0x48, 0x39, 0xf1, //0x00004b01 cmpq %rsi, %rcx + 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x00004b04 jne LBB0_1006 + 0xe9, 0x6a, 0x00, 0x00, 0x00, //0x00004b0a jmp LBB0_1009 + //0x00004b0f LBB0_1011 + 0x48, 0x8d, 0x41, 0xff, //0x00004b0f leaq $-1(%rcx), %rax + 0x48, 0x39, 0xf0, //0x00004b13 cmpq %rsi, %rax + 0x0f, 0x84, 0xa1, 0x04, 0x00, 0x00, //0x00004b16 je LBB0_861 + 0x4a, 0x8d, 0x04, 0x2a, //0x00004b1c leaq (%rdx,%r13), %rax + 0x48, 0x01, 0xf0, //0x00004b20 addq %rsi, %rax + 0x48, 0x83, 0xff, 0xff, //0x00004b23 cmpq $-1, %rdi + 0x4c, 0x0f, 0x44, 0xc0, //0x00004b27 cmoveq %rax, %r8 + 0x48, 0x0f, 0x44, 0xf8, //0x00004b2b cmoveq %rax, %rdi + 0x49, 0x01, 0xf5, //0x00004b2f addq %rsi, %r13 + 0x49, 0x83, 0xc5, 0x02, //0x00004b32 addq $2, %r13 + 0x48, 0x89, 0xc8, //0x00004b36 movq %rcx, %rax + 0x48, 0x29, 0xf0, //0x00004b39 subq %rsi, %rax + 0x48, 0x83, 0xc0, 0xfe, //0x00004b3c addq $-2, %rax + 0x48, 0x83, 0xc1, 0xfe, //0x00004b40 addq $-2, %rcx + 0x48, 0x39, 0xf1, //0x00004b44 cmpq %rsi, %rcx + 0x48, 0x89, 0xc1, //0x00004b47 movq %rax, %rcx + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004b4a movq $16(%rsp), %r12 + 0x4c, 0x8d, 0x35, 0x22, 0x12, 0x00, 0x00, //0x00004b4f leaq $4642(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x0f, 0x85, 0x87, 0xff, 0xff, 0xff, //0x00004b56 jne LBB0_1005 + 0xe9, 0x5c, 0x04, 0x00, 0x00, //0x00004b5c jmp LBB0_861 + //0x00004b61 LBB0_1013 + 0x49, 0x01, 0xf5, //0x00004b61 addq %rsi, %r13 + 0x49, 0x83, 0xc5, 0x01, //0x00004b64 addq $1, %r13 + //0x00004b68 LBB0_1014 + 0x4d, 0x29, 0xfd, //0x00004b68 subq %r15, %r13 + 0x4d, 0x85, 0xed, //0x00004b6b testq %r13, %r13 + 0x0f, 0x89, 0x6c, 0xf1, 0xff, 0xff, //0x00004b6e jns LBB0_820 + 0xe9, 0x3a, 0x04, 0x00, 0x00, //0x00004b74 jmp LBB0_860 + //0x00004b79 LBB0_1009 + 0x80, 0xfb, 0x22, //0x00004b79 cmpb $34, %bl + 0x0f, 0x85, 0x3b, 0x04, 0x00, 0x00, //0x00004b7c jne LBB0_861 + 0x49, 0x01, 0xcd, //0x00004b82 addq %rcx, %r13 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004b85 movq $16(%rsp), %r12 + 0x4c, 0x8d, 0x35, 0xe7, 0x11, 0x00, 0x00, //0x00004b8a leaq $4583(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0xe9, 0xd2, 0xff, 0xff, 0xff, //0x00004b91 jmp LBB0_1014 + //0x00004b96 LBB0_1015 + 0x48, 0x85, 0xc9, //0x00004b96 testq %rcx, %rcx + 0x0f, 0x84, 0x1e, 0x04, 0x00, 0x00, //0x00004b99 je LBB0_861 + 0x4c, 0x89, 0xfa, //0x00004b9f movq %r15, %rdx + 0x48, 0xf7, 0xd2, //0x00004ba2 notq %rdx + 0x4a, 0x8d, 0x04, 0x2a, //0x00004ba5 leaq (%rdx,%r13), %rax + 0x49, 0x83, 0xf8, 0xff, //0x00004ba9 cmpq $-1, %r8 + 0x4c, 0x89, 0xc7, //0x00004bad movq %r8, %rdi + 0x4c, 0x0f, 0x44, 0xc0, //0x00004bb0 cmoveq %rax, %r8 + 0x48, 0x0f, 0x44, 0xf8, //0x00004bb4 cmoveq %rax, %rdi + 0x49, 0x83, 0xc5, 0x01, //0x00004bb8 addq $1, %r13 + 0x48, 0x83, 0xc1, 0xff, //0x00004bbc addq $-1, %rcx + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004bc0 movq $16(%rsp), %r12 + 0x4c, 0x8d, 0x35, 0xac, 0x11, 0x00, 0x00, //0x00004bc5 leaq $4524(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x48, 0x85, 0xc9, //0x00004bcc testq %rcx, %rcx + 0x0f, 0x85, 0xd5, 0xfd, 0xff, 0xff, //0x00004bcf jne LBB0_987 + 0xe9, 0x59, 0xfe, 0xff, 0xff, //0x00004bd5 jmp LBB0_997 + //0x00004bda LBB0_1017 + 0x48, 0x85, 0xc9, //0x00004bda testq %rcx, %rcx + 0x0f, 0x84, 0xda, 0x03, 0x00, 0x00, //0x00004bdd je LBB0_861 + 0x4c, 0x89, 0xfa, //0x00004be3 movq %r15, %rdx + 0x48, 0xf7, 0xd2, //0x00004be6 notq %rdx + 0x4a, 0x8d, 0x04, 0x2a, //0x00004be9 leaq (%rdx,%r13), %rax + 0x49, 0x83, 0xf8, 0xff, //0x00004bed cmpq $-1, %r8 + 0x4c, 0x89, 0xc7, //0x00004bf1 movq %r8, %rdi + 0x4c, 0x0f, 0x44, 0xc0, //0x00004bf4 cmoveq %rax, %r8 + 0x48, 0x0f, 0x44, 0xf8, //0x00004bf8 cmoveq %rax, %rdi + 0x49, 0x83, 0xc5, 0x01, //0x00004bfc addq $1, %r13 + 0x48, 0x83, 0xc1, 0xff, //0x00004c00 addq $-1, %rcx + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004c04 movq $16(%rsp), %r12 + 0x4c, 0x8d, 0x35, 0x68, 0x11, 0x00, 0x00, //0x00004c09 leaq $4456(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x48, 0x85, 0xc9, //0x00004c10 testq %rcx, %rcx + 0x0f, 0x85, 0xc6, 0xfe, 0xff, 0xff, //0x00004c13 jne LBB0_1004 + 0xe9, 0x4a, 0xff, 0xff, 0xff, //0x00004c19 jmp LBB0_1014 + //0x00004c1e LBB0_1019 + 0x49, 0x83, 0xf8, 0xff, //0x00004c1e cmpq $-1, %r8 + 0x0f, 0x85, 0x0d, 0x00, 0x00, 0x00, //0x00004c22 jne LBB0_1021 + 0x4c, 0x89, 0xe8, //0x00004c28 movq %r13, %rax + 0x4c, 0x29, 0xf8, //0x00004c2b subq %r15, %rax + 0x4c, 0x0f, 0xbc, 0xc6, //0x00004c2e bsfq %rsi, %r8 + 0x49, 0x01, 0xc0, //0x00004c32 addq %rax, %r8 + //0x00004c35 LBB0_1021 + 0x44, 0x89, 0xf0, //0x00004c35 movl %r14d, %eax + 0xf7, 0xd0, //0x00004c38 notl %eax + 0x21, 0xf0, //0x00004c3a andl %esi, %eax + 0x8d, 0x3c, 0x00, //0x00004c3c leal (%rax,%rax), %edi + 0x41, 0x8d, 0x1c, 0x46, //0x00004c3f leal (%r14,%rax,2), %ebx + 0xf7, 0xd7, //0x00004c43 notl %edi + 0x21, 0xf7, //0x00004c45 andl %esi, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00004c47 andl $-1431655766, %edi + 0x45, 0x31, 0xf6, //0x00004c4d xorl %r14d, %r14d + 0x01, 0xc7, //0x00004c50 addl %eax, %edi + 0x41, 0x0f, 0x92, 0xc6, //0x00004c52 setb %r14b + 0x01, 0xff, //0x00004c56 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00004c58 xorl $1431655765, %edi + 0x21, 0xdf, //0x00004c5e andl %ebx, %edi + 0xf7, 0xd7, //0x00004c60 notl %edi + 0x21, 0xfa, //0x00004c62 andl %edi, %edx + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004c64 movq $16(%rsp), %r12 + 0x48, 0x85, 0xd2, //0x00004c69 testq %rdx, %rdx + 0x0f, 0x85, 0x23, 0xfb, 0xff, 0xff, //0x00004c6c jne LBB0_854 + //0x00004c72 LBB0_1022 + 0x49, 0x83, 0xc5, 0x20, //0x00004c72 addq $32, %r13 + 0x48, 0x83, 0xc1, 0xe0, //0x00004c76 addq $-32, %rcx + //0x00004c7a LBB0_1023 + 0x4d, 0x85, 0xf6, //0x00004c7a testq %r14, %r14 + 0x0f, 0x85, 0xad, 0x00, 0x00, 0x00, //0x00004c7d jne LBB0_1036 + 0x4c, 0x89, 0xfa, //0x00004c83 movq %r15, %rdx + 0x48, 0xf7, 0xd2, //0x00004c86 notq %rdx + 0x4c, 0x89, 0xc7, //0x00004c89 movq %r8, %rdi + 0x48, 0x85, 0xc9, //0x00004c8c testq %rcx, %rcx + 0x0f, 0x84, 0x7d, 0x00, 0x00, 0x00, //0x00004c8f je LBB0_1035 + //0x00004c95 LBB0_1025 + 0x48, 0x83, 0xc2, 0x01, //0x00004c95 addq $1, %rdx + //0x00004c99 LBB0_1026 + 0x31, 0xf6, //0x00004c99 xorl %esi, %esi + //0x00004c9b LBB0_1027 + 0x41, 0x0f, 0xb6, 0x5c, 0x35, 0x00, //0x00004c9b movzbl (%r13,%rsi), %ebx + 0x80, 0xfb, 0x22, //0x00004ca1 cmpb $34, %bl + 0x0f, 0x84, 0x61, 0x00, 0x00, 0x00, //0x00004ca4 je LBB0_1034 + 0x80, 0xfb, 0x5c, //0x00004caa cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00004cad je LBB0_1032 + 0x48, 0x83, 0xc6, 0x01, //0x00004cb3 addq $1, %rsi + 0x48, 0x39, 0xf1, //0x00004cb7 cmpq %rsi, %rcx + 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x00004cba jne LBB0_1027 + 0xe9, 0x5a, 0x00, 0x00, 0x00, //0x00004cc0 jmp LBB0_1030 + //0x00004cc5 LBB0_1032 + 0x48, 0x8d, 0x41, 0xff, //0x00004cc5 leaq $-1(%rcx), %rax + 0x48, 0x39, 0xf0, //0x00004cc9 cmpq %rsi, %rax + 0x0f, 0x84, 0xeb, 0x02, 0x00, 0x00, //0x00004ccc je LBB0_861 + 0x4a, 0x8d, 0x04, 0x2a, //0x00004cd2 leaq (%rdx,%r13), %rax + 0x48, 0x01, 0xf0, //0x00004cd6 addq %rsi, %rax + 0x48, 0x83, 0xff, 0xff, //0x00004cd9 cmpq $-1, %rdi + 0x4c, 0x0f, 0x44, 0xc0, //0x00004cdd cmoveq %rax, %r8 + 0x48, 0x0f, 0x44, 0xf8, //0x00004ce1 cmoveq %rax, %rdi + 0x49, 0x01, 0xf5, //0x00004ce5 addq %rsi, %r13 + 0x49, 0x83, 0xc5, 0x02, //0x00004ce8 addq $2, %r13 + 0x48, 0x89, 0xc8, //0x00004cec movq %rcx, %rax + 0x48, 0x29, 0xf0, //0x00004cef subq %rsi, %rax + 0x48, 0x83, 0xc0, 0xfe, //0x00004cf2 addq $-2, %rax + 0x48, 0x83, 0xc1, 0xfe, //0x00004cf6 addq $-2, %rcx + 0x48, 0x39, 0xf1, //0x00004cfa cmpq %rsi, %rcx + 0x48, 0x89, 0xc1, //0x00004cfd movq %rax, %rcx + 0x0f, 0x85, 0x93, 0xff, 0xff, 0xff, //0x00004d00 jne LBB0_1026 + 0xe9, 0xb2, 0x02, 0x00, 0x00, //0x00004d06 jmp LBB0_861 + //0x00004d0b LBB0_1034 + 0x49, 0x01, 0xf5, //0x00004d0b addq %rsi, %r13 + 0x49, 0x83, 0xc5, 0x01, //0x00004d0e addq $1, %r13 + //0x00004d12 LBB0_1035 + 0x4d, 0x29, 0xfd, //0x00004d12 subq %r15, %r13 + 0x4c, 0x8b, 0x64, 0x24, 0x10, //0x00004d15 movq $16(%rsp), %r12 + 0xe9, 0x81, 0xf2, 0xff, 0xff, //0x00004d1a jmp LBB0_859 + //0x00004d1f LBB0_1030 + 0x80, 0xfb, 0x22, //0x00004d1f cmpb $34, %bl + 0x0f, 0x85, 0x95, 0x02, 0x00, 0x00, //0x00004d22 jne LBB0_861 + 0x49, 0x01, 0xcd, //0x00004d28 addq %rcx, %r13 + 0xe9, 0xe2, 0xff, 0xff, 0xff, //0x00004d2b jmp LBB0_1035 + //0x00004d30 LBB0_1036 + 0x48, 0x85, 0xc9, //0x00004d30 testq %rcx, %rcx + 0x0f, 0x84, 0x84, 0x02, 0x00, 0x00, //0x00004d33 je LBB0_861 + 0x4c, 0x89, 0xfa, //0x00004d39 movq %r15, %rdx + 0x48, 0xf7, 0xd2, //0x00004d3c notq %rdx + 0x4a, 0x8d, 0x04, 0x2a, //0x00004d3f leaq (%rdx,%r13), %rax + 0x49, 0x83, 0xf8, 0xff, //0x00004d43 cmpq $-1, %r8 + 0x4c, 0x89, 0xc7, //0x00004d47 movq %r8, %rdi + 0x4c, 0x0f, 0x44, 0xc0, //0x00004d4a cmoveq %rax, %r8 + 0x48, 0x0f, 0x44, 0xf8, //0x00004d4e cmoveq %rax, %rdi + 0x49, 0x83, 0xc5, 0x01, //0x00004d52 addq $1, %r13 + 0x48, 0x83, 0xc1, 0xff, //0x00004d56 addq $-1, %rcx + 0x48, 0x85, 0xc9, //0x00004d5a testq %rcx, %rcx + 0x0f, 0x85, 0x32, 0xff, 0xff, 0xff, //0x00004d5d jne LBB0_1025 + 0xe9, 0xaa, 0xff, 0xff, 0xff, //0x00004d63 jmp LBB0_1035 + //0x00004d68 LBB0_649 + 0x49, 0x83, 0xc6, 0xff, //0x00004d68 addq $-1, %r14 + 0x4d, 0x89, 0x31, //0x00004d6c movq %r14, (%r9) + 0x49, 0xc7, 0xc5, 0xde, 0xff, 0xff, 0xff, //0x00004d6f movq $-34, %r13 + 0xe9, 0x9e, 0x01, 0x00, 0x00, //0x00004d76 jmp LBB0_1050 + //0x00004d7b LBB0_650 + 0x49, 0x89, 0x01, //0x00004d7b movq %rax, (%r9) + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00004d7e movq $-1, %r13 + 0xe9, 0x8f, 0x01, 0x00, 0x00, //0x00004d85 jmp LBB0_1050 + //0x00004d8a LBB0_651 + 0xf7, 0xd1, //0x00004d8a notl %ecx + 0x0f, 0xbc, 0xc1, //0x00004d8c bsfl %ecx, %eax + 0x48, 0x29, 0xd0, //0x00004d8f subq %rdx, %rax + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00004d92 movq $-1, %r13 + 0x48, 0x39, 0xd8, //0x00004d99 cmpq %rbx, %rax + 0x0f, 0x83, 0x77, 0x01, 0x00, 0x00, //0x00004d9c jae LBB0_1050 + //0x00004da2 LBB0_652 + 0x48, 0x8d, 0x50, 0x01, //0x00004da2 leaq $1(%rax), %rdx + 0x49, 0x89, 0x11, //0x00004da6 movq %rdx, (%r9) + 0x41, 0x0f, 0xbe, 0x0c, 0x03, //0x00004da9 movsbl (%r11,%rax), %ecx + 0x83, 0xf9, 0x7b, //0x00004dae cmpl $123, %ecx + 0x0f, 0x87, 0x4b, 0x02, 0x00, 0x00, //0x00004db1 ja LBB0_1056 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00004db7 movq $-1, %r13 + 0x48, 0x8d, 0x35, 0x93, 0x12, 0x00, 0x00, //0x00004dbe leaq $4755(%rip), %rsi /* LJTI0_6+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8e, //0x00004dc5 movslq (%rsi,%rcx,4), %rcx + 0x48, 0x01, 0xf1, //0x00004dc9 addq %rsi, %rcx + 0xff, 0xe1, //0x00004dcc jmpq *%rcx + //0x00004dce LBB0_654 + 0x49, 0x8b, 0x3f, //0x00004dce movq (%r15), %rdi + 0x48, 0x29, 0xd7, //0x00004dd1 subq %rdx, %rdi + 0x48, 0x83, 0xff, 0x20, //0x00004dd4 cmpq $32, %rdi + 0x0f, 0x82, 0x52, 0x0b, 0x00, 0x00, //0x00004dd8 jb LBB0_1155 + 0x31, 0xf6, //0x00004dde xorl %esi, %esi + 0xc5, 0xfe, 0x6f, 0x05, 0x38, 0xb2, 0xff, 0xff, //0x00004de0 vmovdqu $-19912(%rip), %ymm0 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x0d, 0x50, 0xb2, 0xff, 0xff, //0x00004de8 vmovdqu $-19888(%rip), %ymm1 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x15, 0x68, 0xb2, 0xff, 0xff, //0x00004df0 vmovdqu $-19864(%rip), %ymm2 /* LCPI0_3+0(%rip) */ + 0x4c, 0x89, 0xda, //0x00004df8 movq %r11, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004dfb .p2align 4, 0x90 + //0x00004e00 LBB0_656 + 0xc5, 0xfe, 0x6f, 0x5c, 0x02, 0x01, //0x00004e00 vmovdqu $1(%rdx,%rax), %ymm3 + 0xc5, 0xe5, 0x74, 0xe0, //0x00004e06 vpcmpeqb %ymm0, %ymm3, %ymm4 + 0xc5, 0xe5, 0xdb, 0xd9, //0x00004e0a vpand %ymm1, %ymm3, %ymm3 + 0xc5, 0xe5, 0x74, 0xda, //0x00004e0e vpcmpeqb %ymm2, %ymm3, %ymm3 + 0xc5, 0xe5, 0xeb, 0xdc, //0x00004e12 vpor %ymm4, %ymm3, %ymm3 + 0xc5, 0xfd, 0xd7, 0xcb, //0x00004e16 vpmovmskb %ymm3, %ecx + 0x85, 0xc9, //0x00004e1a testl %ecx, %ecx + 0x0f, 0x85, 0x0c, 0x01, 0x00, 0x00, //0x00004e1c jne LBB0_1039 + 0x48, 0x83, 0xc2, 0x20, //0x00004e22 addq $32, %rdx + 0x48, 0x8d, 0x0c, 0x37, //0x00004e26 leaq (%rdi,%rsi), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00004e2a addq $-32, %rcx + 0x48, 0x83, 0xc6, 0xe0, //0x00004e2e addq $-32, %rsi + 0x48, 0x83, 0xf9, 0x1f, //0x00004e32 cmpq $31, %rcx + 0x0f, 0x87, 0xc4, 0xff, 0xff, 0xff, //0x00004e36 ja LBB0_656 + 0x48, 0x01, 0xc2, //0x00004e3c addq %rax, %rdx + 0x48, 0x83, 0xc2, 0x01, //0x00004e3f addq $1, %rdx + 0x48, 0x01, 0xf7, //0x00004e43 addq %rsi, %rdi + 0x48, 0x83, 0xff, 0x10, //0x00004e46 cmpq $16, %rdi + 0x0f, 0x82, 0x54, 0x00, 0x00, 0x00, //0x00004e4a jb LBB0_663 + //0x00004e50 LBB0_659 + 0x48, 0x8d, 0x5a, 0xff, //0x00004e50 leaq $-1(%rdx), %rbx + 0x31, 0xf6, //0x00004e54 xorl %esi, %esi + 0xc5, 0xfa, 0x6f, 0x05, 0x82, 0xb3, 0xff, 0xff, //0x00004e56 vmovdqu $-19582(%rip), %xmm0 /* LCPI0_4+0(%rip) */ + 0xc5, 0xfa, 0x6f, 0x0d, 0x8a, 0xb3, 0xff, 0xff, //0x00004e5e vmovdqu $-19574(%rip), %xmm1 /* LCPI0_5+0(%rip) */ + 0xc5, 0xfa, 0x6f, 0x15, 0x92, 0xb3, 0xff, 0xff, //0x00004e66 vmovdqu $-19566(%rip), %xmm2 /* LCPI0_6+0(%rip) */ + //0x00004e6e LBB0_660 + 0xc5, 0xfa, 0x6f, 0x1c, 0x32, //0x00004e6e vmovdqu (%rdx,%rsi), %xmm3 + 0xc5, 0xe1, 0x74, 0xe0, //0x00004e73 vpcmpeqb %xmm0, %xmm3, %xmm4 + 0xc5, 0xe1, 0xdb, 0xd9, //0x00004e77 vpand %xmm1, %xmm3, %xmm3 + 0xc5, 0xe1, 0x74, 0xda, //0x00004e7b vpcmpeqb %xmm2, %xmm3, %xmm3 + 0xc5, 0xe1, 0xeb, 0xdc, //0x00004e7f vpor %xmm4, %xmm3, %xmm3 + 0xc5, 0xf9, 0xd7, 0xcb, //0x00004e83 vpmovmskb %xmm3, %ecx + 0x85, 0xc9, //0x00004e87 testl %ecx, %ecx + 0x0f, 0x85, 0x80, 0x08, 0x00, 0x00, //0x00004e89 jne LBB0_1128 + 0x48, 0x83, 0xc7, 0xf0, //0x00004e8f addq $-16, %rdi + 0x48, 0x83, 0xc6, 0x10, //0x00004e93 addq $16, %rsi + 0x48, 0x83, 0xff, 0x0f, //0x00004e97 cmpq $15, %rdi + 0x0f, 0x87, 0xcd, 0xff, 0xff, 0xff, //0x00004e9b ja LBB0_660 + 0x48, 0x01, 0xf2, //0x00004ea1 addq %rsi, %rdx + //0x00004ea4 LBB0_663 + 0x48, 0x85, 0xff, //0x00004ea4 testq %rdi, %rdi + 0x0f, 0x84, 0x48, 0x00, 0x00, 0x00, //0x00004ea7 je LBB0_671 + 0x48, 0x8d, 0x34, 0x3a, //0x00004ead leaq (%rdx,%rdi), %rsi + 0x48, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00004eb1 movabsq $17596481021440, %rbx + //0x00004ebb LBB0_665 + 0x0f, 0xb6, 0x0a, //0x00004ebb movzbl (%rdx), %ecx + 0x48, 0x83, 0xf9, 0x2c, //0x00004ebe cmpq $44, %rcx + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x00004ec2 ja LBB0_667 + 0x48, 0x0f, 0xa3, 0xcb, //0x00004ec8 btq %rcx, %rbx + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x00004ecc jb LBB0_671 + //0x00004ed2 LBB0_667 + 0x80, 0xf9, 0x5d, //0x00004ed2 cmpb $93, %cl + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00004ed5 je LBB0_671 + 0x80, 0xf9, 0x7d, //0x00004edb cmpb $125, %cl + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00004ede je LBB0_671 + 0x48, 0x83, 0xc2, 0x01, //0x00004ee4 addq $1, %rdx + 0x48, 0x83, 0xc7, 0xff, //0x00004ee8 addq $-1, %rdi + 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x00004eec jne LBB0_665 + 0x48, 0x89, 0xf2, //0x00004ef2 movq %rsi, %rdx + //0x00004ef5 LBB0_671 + 0x4c, 0x29, 0xda, //0x00004ef5 subq %r11, %rdx + 0x48, 0x8b, 0x4c, 0x24, 0x08, //0x00004ef8 movq $8(%rsp), %rcx + 0x48, 0x89, 0x11, //0x00004efd movq %rdx, (%rcx) + 0x49, 0x89, 0xc5, //0x00004f00 movq %rax, %r13 + 0xe9, 0x11, 0x00, 0x00, 0x00, //0x00004f03 jmp LBB0_1050 + //0x00004f08 LBB0_1038 + 0x49, 0x89, 0xd6, //0x00004f08 movq %rdx, %r14 + //0x00004f0b LBB0_1048 + 0x49, 0x83, 0xc6, 0xff, //0x00004f0b addq $-1, %r14 + 0x4d, 0x89, 0x31, //0x00004f0f movq %r14, (%r9) + //0x00004f12 LBB0_1049 + 0x49, 0xc7, 0xc5, 0xfe, 0xff, 0xff, 0xff, //0x00004f12 movq $-2, %r13 + //0x00004f19 LBB0_1050 + 0x4c, 0x89, 0xe8, //0x00004f19 movq %r13, %rax + 0x48, 0x8d, 0x65, 0xd8, //0x00004f1c leaq $-40(%rbp), %rsp + 0x5b, //0x00004f20 popq %rbx + 0x41, 0x5c, //0x00004f21 popq %r12 + 0x41, 0x5d, //0x00004f23 popq %r13 + 0x41, 0x5e, //0x00004f25 popq %r14 + 0x41, 0x5f, //0x00004f27 popq %r15 + 0x5d, //0x00004f29 popq %rbp + 0xc5, 0xf8, 0x77, //0x00004f2a vzeroupper + 0xc3, //0x00004f2d retq + //0x00004f2e LBB0_1039 + 0x0f, 0xbc, 0xf9, //0x00004f2e bsfl %ecx, %edi + 0x48, 0x01, 0xc7, //0x00004f31 addq %rax, %rdi + 0x48, 0x89, 0xf9, //0x00004f34 movq %rdi, %rcx + 0x48, 0x29, 0xf1, //0x00004f37 subq %rsi, %rcx + 0x48, 0x8d, 0x71, 0x01, //0x00004f3a leaq $1(%rcx), %rsi + 0x49, 0x89, 0x31, //0x00004f3e movq %rsi, (%r9) + 0x48, 0x85, 0xf6, //0x00004f41 testq %rsi, %rsi + 0x0f, 0x8e, 0x46, 0x00, 0x00, 0x00, //0x00004f44 jle LBB0_1044 + 0x48, 0x8d, 0x71, 0x02, //0x00004f4a leaq $2(%rcx), %rsi + 0x48, 0x01, 0xfa, //0x00004f4e addq %rdi, %rdx + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00004f51 movabsq $4294977024, %rdi + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00004f5b .p2align 4, 0x90 + //0x00004f60 LBB0_1041 + 0x0f, 0xb6, 0x1a, //0x00004f60 movzbl (%rdx), %ebx + 0x48, 0x83, 0xfb, 0x20, //0x00004f63 cmpq $32, %rbx + 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00004f67 ja LBB0_1044 + 0x48, 0x0f, 0xa3, 0xdf, //0x00004f6d btq %rbx, %rdi + 0x0f, 0x83, 0x19, 0x00, 0x00, 0x00, //0x00004f71 jae LBB0_1044 + 0x49, 0x89, 0x09, //0x00004f77 movq %rcx, (%r9) + 0x48, 0x83, 0xc6, 0xff, //0x00004f7a addq $-1, %rsi + 0x48, 0x83, 0xc1, 0xff, //0x00004f7e addq $-1, %rcx + 0x48, 0x83, 0xc2, 0xff, //0x00004f82 addq $-1, %rdx + 0x48, 0x83, 0xfe, 0x01, //0x00004f86 cmpq $1, %rsi + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x00004f8a jg LBB0_1041 + //0x00004f90 LBB0_1044 + 0x49, 0x89, 0xc5, //0x00004f90 movq %rax, %r13 + 0xe9, 0x81, 0xff, 0xff, 0xff, //0x00004f93 jmp LBB0_1050 + //0x00004f98 LBB0_1045 + 0x4d, 0x89, 0x11, //0x00004f98 movq %r10, (%r9) + //0x00004f9b LBB0_1046 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00004f9b movq $-1, %r13 + 0xe9, 0x72, 0xff, 0xff, 0xff, //0x00004fa2 jmp LBB0_1050 + //0x00004fa7 LBB0_1135 + 0x49, 0xc7, 0xc5, 0xf9, 0xff, 0xff, 0xff, //0x00004fa7 movq $-7, %r13 + 0xe9, 0x66, 0xff, 0xff, 0xff, //0x00004fae jmp LBB0_1050 + //0x00004fb3 LBB0_860 + 0x49, 0x83, 0xfd, 0xff, //0x00004fb3 cmpq $-1, %r13 + 0x0f, 0x85, 0x0a, 0x00, 0x00, 0x00, //0x00004fb7 jne LBB0_862 + //0x00004fbd LBB0_861 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00004fbd movq $-1, %r13 + 0x4d, 0x89, 0xc8, //0x00004fc4 movq %r9, %r8 + //0x00004fc7 LBB0_862 + 0x48, 0x8b, 0x44, 0x24, 0x08, //0x00004fc7 movq $8(%rsp), %rax + 0x4c, 0x89, 0x00, //0x00004fcc movq %r8, (%rax) + 0xe9, 0x45, 0xff, 0xff, 0xff, //0x00004fcf jmp LBB0_1050 + //0x00004fd4 LBB0_732 + 0x49, 0x83, 0xc3, 0xff, //0x00004fd4 addq $-1, %r11 + 0x4d, 0x89, 0xdd, //0x00004fd8 movq %r11, %r13 + 0xe9, 0x39, 0xff, 0xff, 0xff, //0x00004fdb jmp LBB0_1050 + //0x00004fe0 LBB0_1051 + 0x48, 0x8d, 0x48, 0x04, //0x00004fe0 leaq $4(%rax), %rcx + 0xe9, 0xb3, 0x03, 0x00, 0x00, //0x00004fe4 jmp LBB0_1094 + //0x00004fe9 LBB0_1052 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00004fe9 movq $-1, %rcx + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00004ff0 jmp LBB0_1055 + //0x00004ff5 LBB0_1054 + 0x4c, 0x89, 0xd9, //0x00004ff5 movq %r11, %rcx + //0x00004ff8 LBB0_1055 + 0x49, 0x8b, 0x01, //0x00004ff8 movq (%r9), %rax + 0x48, 0x29, 0xc8, //0x00004ffb subq %rcx, %rax + 0x48, 0x83, 0xc0, 0xfe, //0x00004ffe addq $-2, %rax + //0x00005002 LBB0_1056 + 0x49, 0x89, 0x01, //0x00005002 movq %rax, (%r9) + 0xe9, 0x08, 0xff, 0xff, 0xff, //0x00005005 jmp LBB0_1049 + //0x0000500a LBB0_1057 + 0x4d, 0x8b, 0x07, //0x0000500a movq (%r15), %r8 + 0x4d, 0x89, 0xc7, //0x0000500d movq %r8, %r15 + 0x49, 0x29, 0xd7, //0x00005010 subq %rdx, %r15 + 0x49, 0x83, 0xff, 0x20, //0x00005013 cmpq $32, %r15 + 0x0f, 0x8c, 0x2f, 0x09, 0x00, 0x00, //0x00005017 jl LBB0_1159 + 0x4d, 0x8d, 0x0c, 0x03, //0x0000501d leaq (%r11,%rax), %r9 + 0x49, 0x29, 0xc0, //0x00005021 subq %rax, %r8 + 0xbb, 0x1f, 0x00, 0x00, 0x00, //0x00005024 movl $31, %ebx + 0x45, 0x31, 0xff, //0x00005029 xorl %r15d, %r15d + 0xc5, 0xfe, 0x6f, 0x05, 0x4c, 0xb0, 0xff, 0xff, //0x0000502c vmovdqu $-20404(%rip), %ymm0 /* LCPI0_7+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x0d, 0x64, 0xb0, 0xff, 0xff, //0x00005034 vmovdqu $-20380(%rip), %ymm1 /* LCPI0_8+0(%rip) */ + 0x45, 0x31, 0xe4, //0x0000503c xorl %r12d, %r12d + //0x0000503f LBB0_1059 + 0xc4, 0x81, 0x7e, 0x6f, 0x54, 0x39, 0x01, //0x0000503f vmovdqu $1(%r9,%r15), %ymm2 + 0xc5, 0xed, 0x74, 0xd8, //0x00005046 vpcmpeqb %ymm0, %ymm2, %ymm3 + 0xc5, 0x7d, 0xd7, 0xf3, //0x0000504a vpmovmskb %ymm3, %r14d + 0xc5, 0xed, 0x74, 0xd1, //0x0000504e vpcmpeqb %ymm1, %ymm2, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00005052 vpmovmskb %ymm2, %ecx + 0x85, 0xc9, //0x00005056 testl %ecx, %ecx + 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x00005058 jne LBB0_1062 + 0x4d, 0x85, 0xe4, //0x0000505e testq %r12, %r12 + 0x0f, 0x85, 0x08, 0x00, 0x00, 0x00, //0x00005061 jne LBB0_1062 + 0x45, 0x31, 0xe4, //0x00005067 xorl %r12d, %r12d + 0xe9, 0x31, 0x00, 0x00, 0x00, //0x0000506a jmp LBB0_1063 + //0x0000506f LBB0_1062 + 0x44, 0x89, 0xe6, //0x0000506f movl %r12d, %esi + 0xf7, 0xd6, //0x00005072 notl %esi + 0x21, 0xce, //0x00005074 andl %ecx, %esi + 0x8d, 0x14, 0x36, //0x00005076 leal (%rsi,%rsi), %edx + 0x44, 0x09, 0xe2, //0x00005079 orl %r12d, %edx + 0x89, 0xd7, //0x0000507c movl %edx, %edi + 0xf7, 0xd7, //0x0000507e notl %edi + 0x21, 0xcf, //0x00005080 andl %ecx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00005082 andl $-1431655766, %edi + 0x45, 0x31, 0xe4, //0x00005088 xorl %r12d, %r12d + 0x01, 0xf7, //0x0000508b addl %esi, %edi + 0x41, 0x0f, 0x92, 0xc4, //0x0000508d setb %r12b + 0x01, 0xff, //0x00005091 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00005093 xorl $1431655765, %edi + 0x21, 0xd7, //0x00005099 andl %edx, %edi + 0xf7, 0xd7, //0x0000509b notl %edi + 0x41, 0x21, 0xfe, //0x0000509d andl %edi, %r14d + //0x000050a0 LBB0_1063 + 0x4d, 0x85, 0xf6, //0x000050a0 testq %r14, %r14 + 0x0f, 0x85, 0xe4, 0x05, 0x00, 0x00, //0x000050a3 jne LBB0_1121 + 0x49, 0x83, 0xc7, 0x20, //0x000050a9 addq $32, %r15 + 0x49, 0x8d, 0x0c, 0x18, //0x000050ad leaq (%r8,%rbx), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x000050b1 addq $-32, %rcx + 0x48, 0x83, 0xc3, 0xe0, //0x000050b5 addq $-32, %rbx + 0x48, 0x83, 0xf9, 0x3f, //0x000050b9 cmpq $63, %rcx + 0x0f, 0x8f, 0x7c, 0xff, 0xff, 0xff, //0x000050bd jg LBB0_1059 + 0x4d, 0x85, 0xe4, //0x000050c3 testq %r12, %r12 + 0x0f, 0x85, 0xa5, 0x08, 0x00, 0x00, //0x000050c6 jne LBB0_1162 + 0x4b, 0x8d, 0x14, 0x0f, //0x000050cc leaq (%r15,%r9), %rdx + 0x48, 0x83, 0xc2, 0x01, //0x000050d0 addq $1, %rdx + 0x49, 0xf7, 0xd7, //0x000050d4 notq %r15 + 0x4d, 0x01, 0xc7, //0x000050d7 addq %r8, %r15 + //0x000050da LBB0_1067 + 0x4d, 0x85, 0xff, //0x000050da testq %r15, %r15 + 0x48, 0x8b, 0x7c, 0x24, 0x08, //0x000050dd movq $8(%rsp), %rdi + 0x0f, 0x8e, 0x31, 0xfe, 0xff, 0xff, //0x000050e2 jle LBB0_1050 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000050e8 movq $-1, %r13 + 0xe9, 0xd7, 0x05, 0x00, 0x00, //0x000050ef jmp LBB0_1123 + //0x000050f4 LBB0_1069 + 0x4d, 0x8b, 0x27, //0x000050f4 movq (%r15), %r12 + 0x49, 0x29, 0xd4, //0x000050f7 subq %rdx, %r12 + 0x49, 0x01, 0xd3, //0x000050fa addq %rdx, %r11 + 0x45, 0x31, 0xf6, //0x000050fd xorl %r14d, %r14d + 0xc5, 0xfe, 0x6f, 0x05, 0x98, 0xaf, 0xff, 0xff, //0x00005100 vmovdqu $-20584(%rip), %ymm0 /* LCPI0_8+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x0d, 0x70, 0xaf, 0xff, 0xff, //0x00005108 vmovdqu $-20624(%rip), %ymm1 /* LCPI0_7+0(%rip) */ + 0xc5, 0xe9, 0x76, 0xd2, //0x00005110 vpcmpeqd %xmm2, %xmm2, %xmm2 + 0xc5, 0xfe, 0x6f, 0x1d, 0xe4, 0xaf, 0xff, 0xff, //0x00005114 vmovdqu $-20508(%rip), %ymm3 /* LCPI0_11+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x3c, 0xaf, 0xff, 0xff, //0x0000511c vmovdqu $-20676(%rip), %ymm4 /* LCPI0_3+0(%rip) */ + 0xc4, 0x41, 0x31, 0xef, 0xc9, //0x00005124 vpxor %xmm9, %xmm9, %xmm9 + 0x45, 0x31, 0xc9, //0x00005129 xorl %r9d, %r9d + 0x45, 0x31, 0xc0, //0x0000512c xorl %r8d, %r8d + 0x31, 0xdb, //0x0000512f xorl %ebx, %ebx + 0x49, 0x83, 0xfc, 0x40, //0x00005131 cmpq $64, %r12 + 0x0f, 0x8c, 0x3d, 0x01, 0x00, 0x00, //0x00005135 jl LBB0_1078 + //0x0000513b LBB0_1072 + 0xc4, 0xc1, 0x7e, 0x6f, 0x3b, //0x0000513b vmovdqu (%r11), %ymm7 + 0xc4, 0xc1, 0x7e, 0x6f, 0x73, 0x20, //0x00005140 vmovdqu $32(%r11), %ymm6 + 0xc5, 0x45, 0x74, 0xc0, //0x00005146 vpcmpeqb %ymm0, %ymm7, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xf0, //0x0000514a vpmovmskb %ymm8, %esi + 0xc5, 0x4d, 0x74, 0xc0, //0x0000514f vpcmpeqb %ymm0, %ymm6, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x00005153 vpmovmskb %ymm8, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00005158 shlq $32, %rcx + 0x48, 0x09, 0xce, //0x0000515c orq %rcx, %rsi + 0x48, 0x89, 0xf1, //0x0000515f movq %rsi, %rcx + 0x4c, 0x09, 0xc9, //0x00005162 orq %r9, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00005165 jne LBB0_1074 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x0000516b movq $-1, %rsi + 0x45, 0x31, 0xc9, //0x00005172 xorl %r9d, %r9d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00005175 jmp LBB0_1075 + //0x0000517a LBB0_1074 + 0x4c, 0x89, 0xc9, //0x0000517a movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x0000517d notq %rcx + 0x48, 0x21, 0xf1, //0x00005180 andq %rsi, %rcx + 0x4c, 0x8d, 0x14, 0x09, //0x00005183 leaq (%rcx,%rcx), %r10 + 0x4d, 0x09, 0xca, //0x00005187 orq %r9, %r10 + 0x4c, 0x89, 0xd7, //0x0000518a movq %r10, %rdi + 0x48, 0xf7, 0xd7, //0x0000518d notq %rdi + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00005190 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd6, //0x0000519a andq %rdx, %rsi + 0x48, 0x21, 0xfe, //0x0000519d andq %rdi, %rsi + 0x45, 0x31, 0xc9, //0x000051a0 xorl %r9d, %r9d + 0x48, 0x01, 0xce, //0x000051a3 addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc1, //0x000051a6 setb %r9b + 0x48, 0x01, 0xf6, //0x000051aa addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000051ad movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x000051b7 xorq %rcx, %rsi + 0x4c, 0x21, 0xd6, //0x000051ba andq %r10, %rsi + 0x48, 0xf7, 0xd6, //0x000051bd notq %rsi + //0x000051c0 LBB0_1075 + 0xc5, 0x4d, 0x74, 0xc1, //0x000051c0 vpcmpeqb %ymm1, %ymm6, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x000051c4 vpmovmskb %ymm8, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x000051c9 shlq $32, %rcx + 0xc5, 0x45, 0x74, 0xc1, //0x000051cd vpcmpeqb %ymm1, %ymm7, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xd0, //0x000051d1 vpmovmskb %ymm8, %edx + 0x48, 0x09, 0xca, //0x000051d6 orq %rcx, %rdx + 0x48, 0x21, 0xf2, //0x000051d9 andq %rsi, %rdx + 0xc4, 0xe1, 0xf9, 0x6e, 0xea, //0x000051dc vmovq %rdx, %xmm5 + 0xc4, 0xe3, 0x51, 0x44, 0xea, 0x00, //0x000051e1 vpclmulqdq $0, %xmm2, %xmm5, %xmm5 + 0xc4, 0xc1, 0xf9, 0x7e, 0xea, //0x000051e7 vmovq %xmm5, %r10 + 0x4d, 0x31, 0xf2, //0x000051ec xorq %r14, %r10 + 0xc5, 0xc5, 0x74, 0xeb, //0x000051ef vpcmpeqb %ymm3, %ymm7, %ymm5 + 0xc5, 0xfd, 0xd7, 0xd5, //0x000051f3 vpmovmskb %ymm5, %edx + 0xc5, 0xcd, 0x74, 0xeb, //0x000051f7 vpcmpeqb %ymm3, %ymm6, %ymm5 + 0xc5, 0xfd, 0xd7, 0xcd, //0x000051fb vpmovmskb %ymm5, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x000051ff shlq $32, %rcx + 0x48, 0x09, 0xca, //0x00005203 orq %rcx, %rdx + 0x4c, 0x89, 0xd1, //0x00005206 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00005209 notq %rcx + 0x48, 0x21, 0xca, //0x0000520c andq %rcx, %rdx + 0xc5, 0xc5, 0x74, 0xec, //0x0000520f vpcmpeqb %ymm4, %ymm7, %ymm5 + 0xc5, 0xfd, 0xd7, 0xfd, //0x00005213 vpmovmskb %ymm5, %edi + 0xc5, 0xcd, 0x74, 0xec, //0x00005217 vpcmpeqb %ymm4, %ymm6, %ymm5 + 0xc5, 0xfd, 0xd7, 0xf5, //0x0000521b vpmovmskb %ymm5, %esi + 0x48, 0xc1, 0xe6, 0x20, //0x0000521f shlq $32, %rsi + 0x48, 0x09, 0xf7, //0x00005223 orq %rsi, %rdi + 0x48, 0x21, 0xcf, //0x00005226 andq %rcx, %rdi + 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x00005229 je LBB0_1070 + //0x0000522f LBB0_1076 + 0x48, 0x8d, 0x4f, 0xff, //0x0000522f leaq $-1(%rdi), %rcx + 0x48, 0x89, 0xce, //0x00005233 movq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00005236 andq %rdx, %rsi + 0xf3, 0x48, 0x0f, 0xb8, 0xf6, //0x00005239 popcntq %rsi, %rsi + 0x4c, 0x01, 0xc6, //0x0000523e addq %r8, %rsi + 0x48, 0x39, 0xde, //0x00005241 cmpq %rbx, %rsi + 0x0f, 0x86, 0x0a, 0x04, 0x00, 0x00, //0x00005244 jbe LBB0_1120 + 0x48, 0x83, 0xc3, 0x01, //0x0000524a addq $1, %rbx + 0x48, 0x21, 0xcf, //0x0000524e andq %rcx, %rdi + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00005251 jne LBB0_1076 + //0x00005257 LBB0_1070 + 0x49, 0xc1, 0xfa, 0x3f, //0x00005257 sarq $63, %r10 + 0xf3, 0x48, 0x0f, 0xb8, 0xca, //0x0000525b popcntq %rdx, %rcx + 0x49, 0x01, 0xc8, //0x00005260 addq %rcx, %r8 + 0x49, 0x83, 0xc3, 0x40, //0x00005263 addq $64, %r11 + 0x49, 0x83, 0xc4, 0xc0, //0x00005267 addq $-64, %r12 + 0x4d, 0x89, 0xd6, //0x0000526b movq %r10, %r14 + 0x49, 0x83, 0xfc, 0x40, //0x0000526e cmpq $64, %r12 + 0x0f, 0x8d, 0xc3, 0xfe, 0xff, 0xff, //0x00005272 jge LBB0_1072 + //0x00005278 LBB0_1078 + 0x4d, 0x85, 0xe4, //0x00005278 testq %r12, %r12 + 0x0f, 0x8e, 0xd3, 0x06, 0x00, 0x00, //0x0000527b jle LBB0_1160 + 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x60, //0x00005281 vmovdqu %ymm9, $96(%rsp) + 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x40, //0x00005287 vmovdqu %ymm9, $64(%rsp) + 0x44, 0x89, 0xd9, //0x0000528d movl %r11d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00005290 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00005296 cmpl $4033, %ecx + 0x0f, 0x82, 0x99, 0xfe, 0xff, 0xff, //0x0000529c jb LBB0_1072 + 0x49, 0x83, 0xfc, 0x20, //0x000052a2 cmpq $32, %r12 + 0x0f, 0x82, 0x1e, 0x00, 0x00, 0x00, //0x000052a6 jb LBB0_1082 + 0xc4, 0xc1, 0x7e, 0x6f, 0x2b, //0x000052ac vmovdqu (%r11), %ymm5 + 0xc5, 0xfe, 0x7f, 0x6c, 0x24, 0x40, //0x000052b1 vmovdqu %ymm5, $64(%rsp) + 0x49, 0x83, 0xc3, 0x20, //0x000052b7 addq $32, %r11 + 0x49, 0x8d, 0x54, 0x24, 0xe0, //0x000052bb leaq $-32(%r12), %rdx + 0x48, 0x8d, 0x7c, 0x24, 0x60, //0x000052c0 leaq $96(%rsp), %rdi + 0xe9, 0x08, 0x00, 0x00, 0x00, //0x000052c5 jmp LBB0_1083 + //0x000052ca LBB0_1082 + 0x48, 0x8d, 0x7c, 0x24, 0x40, //0x000052ca leaq $64(%rsp), %rdi + 0x4c, 0x89, 0xe2, //0x000052cf movq %r12, %rdx + //0x000052d2 LBB0_1083 + 0x48, 0x83, 0xfa, 0x10, //0x000052d2 cmpq $16, %rdx + 0x0f, 0x82, 0x5a, 0x00, 0x00, 0x00, //0x000052d6 jb LBB0_1084 + 0xc4, 0xc1, 0x7a, 0x6f, 0x2b, //0x000052dc vmovdqu (%r11), %xmm5 + 0xc5, 0xfa, 0x7f, 0x2f, //0x000052e1 vmovdqu %xmm5, (%rdi) + 0x49, 0x83, 0xc3, 0x10, //0x000052e5 addq $16, %r11 + 0x48, 0x83, 0xc7, 0x10, //0x000052e9 addq $16, %rdi + 0x48, 0x83, 0xc2, 0xf0, //0x000052ed addq $-16, %rdx + 0x48, 0x83, 0xfa, 0x08, //0x000052f1 cmpq $8, %rdx + 0x0f, 0x83, 0x45, 0x00, 0x00, 0x00, //0x000052f5 jae LBB0_1089 + //0x000052fb LBB0_1085 + 0x48, 0x83, 0xfa, 0x04, //0x000052fb cmpq $4, %rdx + 0x0f, 0x8c, 0x57, 0x00, 0x00, 0x00, //0x000052ff jl LBB0_1086 + //0x00005305 LBB0_1090 + 0x41, 0x8b, 0x0b, //0x00005305 movl (%r11), %ecx + 0x89, 0x0f, //0x00005308 movl %ecx, (%rdi) + 0x49, 0x83, 0xc3, 0x04, //0x0000530a addq $4, %r11 + 0x48, 0x83, 0xc7, 0x04, //0x0000530e addq $4, %rdi + 0x48, 0x83, 0xc2, 0xfc, //0x00005312 addq $-4, %rdx + 0x48, 0x83, 0xfa, 0x02, //0x00005316 cmpq $2, %rdx + 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x0000531a jae LBB0_1091 + //0x00005320 LBB0_1087 + 0x4c, 0x89, 0xde, //0x00005320 movq %r11, %rsi + 0x4c, 0x8d, 0x5c, 0x24, 0x40, //0x00005323 leaq $64(%rsp), %r11 + 0x48, 0x85, 0xd2, //0x00005328 testq %rdx, %rdx + 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x0000532b jne LBB0_1092 + 0xe9, 0x05, 0xfe, 0xff, 0xff, //0x00005331 jmp LBB0_1072 + //0x00005336 LBB0_1084 + 0x48, 0x83, 0xfa, 0x08, //0x00005336 cmpq $8, %rdx + 0x0f, 0x82, 0xbb, 0xff, 0xff, 0xff, //0x0000533a jb LBB0_1085 + //0x00005340 LBB0_1089 + 0x49, 0x8b, 0x0b, //0x00005340 movq (%r11), %rcx + 0x48, 0x89, 0x0f, //0x00005343 movq %rcx, (%rdi) + 0x49, 0x83, 0xc3, 0x08, //0x00005346 addq $8, %r11 + 0x48, 0x83, 0xc7, 0x08, //0x0000534a addq $8, %rdi + 0x48, 0x83, 0xc2, 0xf8, //0x0000534e addq $-8, %rdx + 0x48, 0x83, 0xfa, 0x04, //0x00005352 cmpq $4, %rdx + 0x0f, 0x8d, 0xa9, 0xff, 0xff, 0xff, //0x00005356 jge LBB0_1090 + //0x0000535c LBB0_1086 + 0x48, 0x83, 0xfa, 0x02, //0x0000535c cmpq $2, %rdx + 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x00005360 jb LBB0_1087 + //0x00005366 LBB0_1091 + 0x41, 0x0f, 0xb7, 0x0b, //0x00005366 movzwl (%r11), %ecx + 0x66, 0x89, 0x0f, //0x0000536a movw %cx, (%rdi) + 0x49, 0x83, 0xc3, 0x02, //0x0000536d addq $2, %r11 + 0x48, 0x83, 0xc7, 0x02, //0x00005371 addq $2, %rdi + 0x48, 0x83, 0xc2, 0xfe, //0x00005375 addq $-2, %rdx + 0x4c, 0x89, 0xde, //0x00005379 movq %r11, %rsi + 0x4c, 0x8d, 0x5c, 0x24, 0x40, //0x0000537c leaq $64(%rsp), %r11 + 0x48, 0x85, 0xd2, //0x00005381 testq %rdx, %rdx + 0x0f, 0x84, 0xb1, 0xfd, 0xff, 0xff, //0x00005384 je LBB0_1072 + //0x0000538a LBB0_1092 + 0x8a, 0x0e, //0x0000538a movb (%rsi), %cl + 0x88, 0x0f, //0x0000538c movb %cl, (%rdi) + 0x4c, 0x8d, 0x5c, 0x24, 0x40, //0x0000538e leaq $64(%rsp), %r11 + 0xe9, 0xa3, 0xfd, 0xff, 0xff, //0x00005393 jmp LBB0_1072 + //0x00005398 LBB0_1093 + 0x48, 0x8d, 0x48, 0x05, //0x00005398 leaq $5(%rax), %rcx + //0x0000539c LBB0_1094 + 0x49, 0x3b, 0x0f, //0x0000539c cmpq (%r15), %rcx + 0x0f, 0x87, 0x74, 0xfb, 0xff, 0xff, //0x0000539f ja LBB0_1050 + 0x49, 0x89, 0x09, //0x000053a5 movq %rcx, (%r9) + 0x49, 0x89, 0xc5, //0x000053a8 movq %rax, %r13 + 0xe9, 0x69, 0xfb, 0xff, 0xff, //0x000053ab jmp LBB0_1050 + //0x000053b0 LBB0_1096 + 0x4d, 0x8b, 0x27, //0x000053b0 movq (%r15), %r12 + 0x49, 0x29, 0xd4, //0x000053b3 subq %rdx, %r12 + 0x49, 0x01, 0xd3, //0x000053b6 addq %rdx, %r11 + 0x45, 0x31, 0xf6, //0x000053b9 xorl %r14d, %r14d + 0xc5, 0xfe, 0x6f, 0x05, 0xdc, 0xac, 0xff, 0xff, //0x000053bc vmovdqu $-21284(%rip), %ymm0 /* LCPI0_8+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x0d, 0xb4, 0xac, 0xff, 0xff, //0x000053c4 vmovdqu $-21324(%rip), %ymm1 /* LCPI0_7+0(%rip) */ + 0xc5, 0xe9, 0x76, 0xd2, //0x000053cc vpcmpeqd %xmm2, %xmm2, %xmm2 + 0xc5, 0xfe, 0x6f, 0x1d, 0xe8, 0xac, 0xff, 0xff, //0x000053d0 vmovdqu $-21272(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x00, 0xad, 0xff, 0xff, //0x000053d8 vmovdqu $-21248(%rip), %ymm4 /* LCPI0_10+0(%rip) */ + 0xc4, 0x41, 0x31, 0xef, 0xc9, //0x000053e0 vpxor %xmm9, %xmm9, %xmm9 + 0x45, 0x31, 0xc9, //0x000053e5 xorl %r9d, %r9d + 0x45, 0x31, 0xc0, //0x000053e8 xorl %r8d, %r8d + 0x31, 0xdb, //0x000053eb xorl %ebx, %ebx + 0x49, 0x83, 0xfc, 0x40, //0x000053ed cmpq $64, %r12 + 0x0f, 0x8c, 0x3d, 0x01, 0x00, 0x00, //0x000053f1 jl LBB0_1105 + //0x000053f7 LBB0_1099 + 0xc4, 0xc1, 0x7e, 0x6f, 0x3b, //0x000053f7 vmovdqu (%r11), %ymm7 + 0xc4, 0xc1, 0x7e, 0x6f, 0x73, 0x20, //0x000053fc vmovdqu $32(%r11), %ymm6 + 0xc5, 0x45, 0x74, 0xc0, //0x00005402 vpcmpeqb %ymm0, %ymm7, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xf0, //0x00005406 vpmovmskb %ymm8, %esi + 0xc5, 0x4d, 0x74, 0xc0, //0x0000540b vpcmpeqb %ymm0, %ymm6, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x0000540f vpmovmskb %ymm8, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00005414 shlq $32, %rcx + 0x48, 0x09, 0xce, //0x00005418 orq %rcx, %rsi + 0x48, 0x89, 0xf1, //0x0000541b movq %rsi, %rcx + 0x4c, 0x09, 0xc9, //0x0000541e orq %r9, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00005421 jne LBB0_1101 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00005427 movq $-1, %rsi + 0x45, 0x31, 0xc9, //0x0000542e xorl %r9d, %r9d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00005431 jmp LBB0_1102 + //0x00005436 LBB0_1101 + 0x4c, 0x89, 0xc9, //0x00005436 movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x00005439 notq %rcx + 0x48, 0x21, 0xf1, //0x0000543c andq %rsi, %rcx + 0x4c, 0x8d, 0x14, 0x09, //0x0000543f leaq (%rcx,%rcx), %r10 + 0x4d, 0x09, 0xca, //0x00005443 orq %r9, %r10 + 0x4c, 0x89, 0xd7, //0x00005446 movq %r10, %rdi + 0x48, 0xf7, 0xd7, //0x00005449 notq %rdi + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000544c movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd6, //0x00005456 andq %rdx, %rsi + 0x48, 0x21, 0xfe, //0x00005459 andq %rdi, %rsi + 0x45, 0x31, 0xc9, //0x0000545c xorl %r9d, %r9d + 0x48, 0x01, 0xce, //0x0000545f addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc1, //0x00005462 setb %r9b + 0x48, 0x01, 0xf6, //0x00005466 addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00005469 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x00005473 xorq %rcx, %rsi + 0x4c, 0x21, 0xd6, //0x00005476 andq %r10, %rsi + 0x48, 0xf7, 0xd6, //0x00005479 notq %rsi + //0x0000547c LBB0_1102 + 0xc5, 0x4d, 0x74, 0xc1, //0x0000547c vpcmpeqb %ymm1, %ymm6, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x00005480 vpmovmskb %ymm8, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00005485 shlq $32, %rcx + 0xc5, 0x45, 0x74, 0xc1, //0x00005489 vpcmpeqb %ymm1, %ymm7, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xd0, //0x0000548d vpmovmskb %ymm8, %edx + 0x48, 0x09, 0xca, //0x00005492 orq %rcx, %rdx + 0x48, 0x21, 0xf2, //0x00005495 andq %rsi, %rdx + 0xc4, 0xe1, 0xf9, 0x6e, 0xea, //0x00005498 vmovq %rdx, %xmm5 + 0xc4, 0xe3, 0x51, 0x44, 0xea, 0x00, //0x0000549d vpclmulqdq $0, %xmm2, %xmm5, %xmm5 + 0xc4, 0xc1, 0xf9, 0x7e, 0xea, //0x000054a3 vmovq %xmm5, %r10 + 0x4d, 0x31, 0xf2, //0x000054a8 xorq %r14, %r10 + 0xc5, 0xc5, 0x74, 0xeb, //0x000054ab vpcmpeqb %ymm3, %ymm7, %ymm5 + 0xc5, 0xfd, 0xd7, 0xd5, //0x000054af vpmovmskb %ymm5, %edx + 0xc5, 0xcd, 0x74, 0xeb, //0x000054b3 vpcmpeqb %ymm3, %ymm6, %ymm5 + 0xc5, 0xfd, 0xd7, 0xcd, //0x000054b7 vpmovmskb %ymm5, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x000054bb shlq $32, %rcx + 0x48, 0x09, 0xca, //0x000054bf orq %rcx, %rdx + 0x4c, 0x89, 0xd1, //0x000054c2 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x000054c5 notq %rcx + 0x48, 0x21, 0xca, //0x000054c8 andq %rcx, %rdx + 0xc5, 0xc5, 0x74, 0xec, //0x000054cb vpcmpeqb %ymm4, %ymm7, %ymm5 + 0xc5, 0xfd, 0xd7, 0xfd, //0x000054cf vpmovmskb %ymm5, %edi + 0xc5, 0xcd, 0x74, 0xec, //0x000054d3 vpcmpeqb %ymm4, %ymm6, %ymm5 + 0xc5, 0xfd, 0xd7, 0xf5, //0x000054d7 vpmovmskb %ymm5, %esi + 0x48, 0xc1, 0xe6, 0x20, //0x000054db shlq $32, %rsi + 0x48, 0x09, 0xf7, //0x000054df orq %rsi, %rdi + 0x48, 0x21, 0xcf, //0x000054e2 andq %rcx, %rdi + 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x000054e5 je LBB0_1097 + //0x000054eb LBB0_1103 + 0x48, 0x8d, 0x4f, 0xff, //0x000054eb leaq $-1(%rdi), %rcx + 0x48, 0x89, 0xce, //0x000054ef movq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x000054f2 andq %rdx, %rsi + 0xf3, 0x48, 0x0f, 0xb8, 0xf6, //0x000054f5 popcntq %rsi, %rsi + 0x4c, 0x01, 0xc6, //0x000054fa addq %r8, %rsi + 0x48, 0x39, 0xde, //0x000054fd cmpq %rbx, %rsi + 0x0f, 0x86, 0x4e, 0x01, 0x00, 0x00, //0x00005500 jbe LBB0_1120 + 0x48, 0x83, 0xc3, 0x01, //0x00005506 addq $1, %rbx + 0x48, 0x21, 0xcf, //0x0000550a andq %rcx, %rdi + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x0000550d jne LBB0_1103 + //0x00005513 LBB0_1097 + 0x49, 0xc1, 0xfa, 0x3f, //0x00005513 sarq $63, %r10 + 0xf3, 0x48, 0x0f, 0xb8, 0xca, //0x00005517 popcntq %rdx, %rcx + 0x49, 0x01, 0xc8, //0x0000551c addq %rcx, %r8 + 0x49, 0x83, 0xc3, 0x40, //0x0000551f addq $64, %r11 + 0x49, 0x83, 0xc4, 0xc0, //0x00005523 addq $-64, %r12 + 0x4d, 0x89, 0xd6, //0x00005527 movq %r10, %r14 + 0x49, 0x83, 0xfc, 0x40, //0x0000552a cmpq $64, %r12 + 0x0f, 0x8d, 0xc3, 0xfe, 0xff, 0xff, //0x0000552e jge LBB0_1099 + //0x00005534 LBB0_1105 + 0x4d, 0x85, 0xe4, //0x00005534 testq %r12, %r12 + 0x0f, 0x8e, 0x17, 0x04, 0x00, 0x00, //0x00005537 jle LBB0_1160 + 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x60, //0x0000553d vmovdqu %ymm9, $96(%rsp) + 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x40, //0x00005543 vmovdqu %ymm9, $64(%rsp) + 0x44, 0x89, 0xd9, //0x00005549 movl %r11d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x0000554c andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00005552 cmpl $4033, %ecx + 0x0f, 0x82, 0x99, 0xfe, 0xff, 0xff, //0x00005558 jb LBB0_1099 + 0x49, 0x83, 0xfc, 0x20, //0x0000555e cmpq $32, %r12 + 0x0f, 0x82, 0x1e, 0x00, 0x00, 0x00, //0x00005562 jb LBB0_1109 + 0xc4, 0xc1, 0x7e, 0x6f, 0x2b, //0x00005568 vmovdqu (%r11), %ymm5 + 0xc5, 0xfe, 0x7f, 0x6c, 0x24, 0x40, //0x0000556d vmovdqu %ymm5, $64(%rsp) + 0x49, 0x83, 0xc3, 0x20, //0x00005573 addq $32, %r11 + 0x49, 0x8d, 0x54, 0x24, 0xe0, //0x00005577 leaq $-32(%r12), %rdx + 0x48, 0x8d, 0x7c, 0x24, 0x60, //0x0000557c leaq $96(%rsp), %rdi + 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00005581 jmp LBB0_1110 + //0x00005586 LBB0_1109 + 0x48, 0x8d, 0x7c, 0x24, 0x40, //0x00005586 leaq $64(%rsp), %rdi + 0x4c, 0x89, 0xe2, //0x0000558b movq %r12, %rdx + //0x0000558e LBB0_1110 + 0x48, 0x83, 0xfa, 0x10, //0x0000558e cmpq $16, %rdx + 0x0f, 0x82, 0x5a, 0x00, 0x00, 0x00, //0x00005592 jb LBB0_1111 + 0xc4, 0xc1, 0x7a, 0x6f, 0x2b, //0x00005598 vmovdqu (%r11), %xmm5 + 0xc5, 0xfa, 0x7f, 0x2f, //0x0000559d vmovdqu %xmm5, (%rdi) + 0x49, 0x83, 0xc3, 0x10, //0x000055a1 addq $16, %r11 + 0x48, 0x83, 0xc7, 0x10, //0x000055a5 addq $16, %rdi + 0x48, 0x83, 0xc2, 0xf0, //0x000055a9 addq $-16, %rdx + 0x48, 0x83, 0xfa, 0x08, //0x000055ad cmpq $8, %rdx + 0x0f, 0x83, 0x45, 0x00, 0x00, 0x00, //0x000055b1 jae LBB0_1116 + //0x000055b7 LBB0_1112 + 0x48, 0x83, 0xfa, 0x04, //0x000055b7 cmpq $4, %rdx + 0x0f, 0x8c, 0x57, 0x00, 0x00, 0x00, //0x000055bb jl LBB0_1113 + //0x000055c1 LBB0_1117 + 0x41, 0x8b, 0x0b, //0x000055c1 movl (%r11), %ecx + 0x89, 0x0f, //0x000055c4 movl %ecx, (%rdi) + 0x49, 0x83, 0xc3, 0x04, //0x000055c6 addq $4, %r11 + 0x48, 0x83, 0xc7, 0x04, //0x000055ca addq $4, %rdi + 0x48, 0x83, 0xc2, 0xfc, //0x000055ce addq $-4, %rdx + 0x48, 0x83, 0xfa, 0x02, //0x000055d2 cmpq $2, %rdx + 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x000055d6 jae LBB0_1118 + //0x000055dc LBB0_1114 + 0x4c, 0x89, 0xde, //0x000055dc movq %r11, %rsi + 0x4c, 0x8d, 0x5c, 0x24, 0x40, //0x000055df leaq $64(%rsp), %r11 + 0x48, 0x85, 0xd2, //0x000055e4 testq %rdx, %rdx + 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x000055e7 jne LBB0_1119 + 0xe9, 0x05, 0xfe, 0xff, 0xff, //0x000055ed jmp LBB0_1099 + //0x000055f2 LBB0_1111 + 0x48, 0x83, 0xfa, 0x08, //0x000055f2 cmpq $8, %rdx + 0x0f, 0x82, 0xbb, 0xff, 0xff, 0xff, //0x000055f6 jb LBB0_1112 + //0x000055fc LBB0_1116 + 0x49, 0x8b, 0x0b, //0x000055fc movq (%r11), %rcx + 0x48, 0x89, 0x0f, //0x000055ff movq %rcx, (%rdi) + 0x49, 0x83, 0xc3, 0x08, //0x00005602 addq $8, %r11 + 0x48, 0x83, 0xc7, 0x08, //0x00005606 addq $8, %rdi + 0x48, 0x83, 0xc2, 0xf8, //0x0000560a addq $-8, %rdx + 0x48, 0x83, 0xfa, 0x04, //0x0000560e cmpq $4, %rdx + 0x0f, 0x8d, 0xa9, 0xff, 0xff, 0xff, //0x00005612 jge LBB0_1117 + //0x00005618 LBB0_1113 + 0x48, 0x83, 0xfa, 0x02, //0x00005618 cmpq $2, %rdx + 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x0000561c jb LBB0_1114 + //0x00005622 LBB0_1118 + 0x41, 0x0f, 0xb7, 0x0b, //0x00005622 movzwl (%r11), %ecx + 0x66, 0x89, 0x0f, //0x00005626 movw %cx, (%rdi) + 0x49, 0x83, 0xc3, 0x02, //0x00005629 addq $2, %r11 + 0x48, 0x83, 0xc7, 0x02, //0x0000562d addq $2, %rdi + 0x48, 0x83, 0xc2, 0xfe, //0x00005631 addq $-2, %rdx + 0x4c, 0x89, 0xde, //0x00005635 movq %r11, %rsi + 0x4c, 0x8d, 0x5c, 0x24, 0x40, //0x00005638 leaq $64(%rsp), %r11 + 0x48, 0x85, 0xd2, //0x0000563d testq %rdx, %rdx + 0x0f, 0x84, 0xb1, 0xfd, 0xff, 0xff, //0x00005640 je LBB0_1099 + //0x00005646 LBB0_1119 + 0x8a, 0x0e, //0x00005646 movb (%rsi), %cl + 0x88, 0x0f, //0x00005648 movb %cl, (%rdi) + 0x4c, 0x8d, 0x5c, 0x24, 0x40, //0x0000564a leaq $64(%rsp), %r11 + 0xe9, 0xa3, 0xfd, 0xff, 0xff, //0x0000564f jmp LBB0_1099 + //0x00005654 LBB0_1120 + 0x49, 0x8b, 0x0f, //0x00005654 movq (%r15), %rcx + 0x48, 0x0f, 0xbc, 0xd7, //0x00005657 bsfq %rdi, %rdx + 0x4c, 0x29, 0xe2, //0x0000565b subq %r12, %rdx + 0x48, 0x01, 0xd1, //0x0000565e addq %rdx, %rcx + 0x48, 0x83, 0xc1, 0x01, //0x00005661 addq $1, %rcx + 0x48, 0x8b, 0x74, 0x24, 0x08, //0x00005665 movq $8(%rsp), %rsi + 0x48, 0x89, 0x0e, //0x0000566a movq %rcx, (%rsi) + 0x49, 0x8b, 0x17, //0x0000566d movq (%r15), %rdx + 0x48, 0x39, 0xd1, //0x00005670 cmpq %rdx, %rcx + 0x48, 0x0f, 0x47, 0xca, //0x00005673 cmovaq %rdx, %rcx + 0x48, 0x89, 0x0e, //0x00005677 movq %rcx, (%rsi) + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000567a movq $-1, %rcx + 0x48, 0x0f, 0x47, 0xc1, //0x00005681 cmovaq %rcx, %rax + 0x49, 0x89, 0xc5, //0x00005685 movq %rax, %r13 + 0xe9, 0x8c, 0xf8, 0xff, 0xff, //0x00005688 jmp LBB0_1050 + //0x0000568d LBB0_1121 + 0x41, 0x0f, 0xbc, 0xce, //0x0000568d bsfl %r14d, %ecx + 0x48, 0x01, 0xc1, //0x00005691 addq %rax, %rcx + 0x4c, 0x01, 0xf9, //0x00005694 addq %r15, %rcx + 0x48, 0x83, 0xc1, 0x02, //0x00005697 addq $2, %rcx + 0x48, 0x8b, 0x54, 0x24, 0x08, //0x0000569b movq $8(%rsp), %rdx + 0x48, 0x89, 0x0a, //0x000056a0 movq %rcx, (%rdx) + 0x49, 0x89, 0xc5, //0x000056a3 movq %rax, %r13 + 0xe9, 0x6e, 0xf8, 0xff, 0xff, //0x000056a6 jmp LBB0_1050 + //0x000056ab LBB0_1134 + 0x49, 0x89, 0x11, //0x000056ab movq %rdx, (%r9) + 0xe9, 0x66, 0xf8, 0xff, 0xff, //0x000056ae jmp LBB0_1050 + //0x000056b3 LBB0_1122 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000056b3 movq $-2, %rcx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x000056ba movl $2, %esi + 0x48, 0x01, 0xf2, //0x000056bf addq %rsi, %rdx + 0x49, 0x01, 0xcf, //0x000056c2 addq %rcx, %r15 + 0x0f, 0x8e, 0x4e, 0xf8, 0xff, 0xff, //0x000056c5 jle LBB0_1050 + //0x000056cb LBB0_1123 + 0x0f, 0xb6, 0x0a, //0x000056cb movzbl (%rdx), %ecx + 0x80, 0xf9, 0x5c, //0x000056ce cmpb $92, %cl + 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x000056d1 je LBB0_1122 + 0x80, 0xf9, 0x22, //0x000056d7 cmpb $34, %cl + 0x0f, 0x84, 0xf7, 0x01, 0x00, 0x00, //0x000056da je LBB0_1150 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000056e0 movq $-1, %rcx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x000056e7 movl $1, %esi + 0x48, 0x01, 0xf2, //0x000056ec addq %rsi, %rdx + 0x49, 0x01, 0xcf, //0x000056ef addq %rcx, %r15 + 0x0f, 0x8f, 0xd3, 0xff, 0xff, 0xff, //0x000056f2 jg LBB0_1123 + 0xe9, 0x1c, 0xf8, 0xff, 0xff, //0x000056f8 jmp LBB0_1050 + //0x000056fd LBB0_1126 + 0x4c, 0x89, 0xdb, //0x000056fd movq %r11, %rbx + //0x00005700 LBB0_1127 + 0x49, 0x89, 0x19, //0x00005700 movq %rbx, (%r9) + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00005703 movq $-1, %r13 + 0xe9, 0x0a, 0xf8, 0xff, 0xff, //0x0000570a jmp LBB0_1050 + //0x0000570f LBB0_1128 + 0x66, 0x0f, 0xbc, 0xc9, //0x0000570f bsfw %cx, %cx + 0x0f, 0xb7, 0xf9, //0x00005713 movzwl %cx, %edi + 0x4c, 0x29, 0xda, //0x00005716 subq %r11, %rdx + 0x48, 0x01, 0xfa, //0x00005719 addq %rdi, %rdx + 0x48, 0x8d, 0x0c, 0x32, //0x0000571c leaq (%rdx,%rsi), %rcx + 0x49, 0x89, 0x09, //0x00005720 movq %rcx, (%r9) + 0x48, 0x85, 0xc9, //0x00005723 testq %rcx, %rcx + 0x0f, 0x8e, 0x64, 0xf8, 0xff, 0xff, //0x00005726 jle LBB0_1044 + 0x48, 0x8d, 0x0c, 0x16, //0x0000572c leaq (%rsi,%rdx), %rcx + 0x48, 0x83, 0xc1, 0x01, //0x00005730 addq $1, %rcx + 0x48, 0x01, 0xf2, //0x00005734 addq %rsi, %rdx + 0x48, 0x83, 0xc2, 0xff, //0x00005737 addq $-1, %rdx + 0x48, 0x01, 0xfb, //0x0000573b addq %rdi, %rbx + 0x48, 0x01, 0xf3, //0x0000573e addq %rsi, %rbx + 0x48, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00005741 movabsq $4294977024, %rsi + //0x0000574b LBB0_1130 + 0x0f, 0xb6, 0x3b, //0x0000574b movzbl (%rbx), %edi + 0x48, 0x83, 0xff, 0x20, //0x0000574e cmpq $32, %rdi + 0x0f, 0x87, 0x38, 0xf8, 0xff, 0xff, //0x00005752 ja LBB0_1044 + 0x48, 0x0f, 0xa3, 0xfe, //0x00005758 btq %rdi, %rsi + 0x0f, 0x83, 0x2e, 0xf8, 0xff, 0xff, //0x0000575c jae LBB0_1044 + 0x49, 0x89, 0x11, //0x00005762 movq %rdx, (%r9) + 0x48, 0x83, 0xc1, 0xff, //0x00005765 addq $-1, %rcx + 0x48, 0x83, 0xc2, 0xff, //0x00005769 addq $-1, %rdx + 0x48, 0x83, 0xc3, 0xff, //0x0000576d addq $-1, %rbx + 0x48, 0x83, 0xf9, 0x01, //0x00005771 cmpq $1, %rcx + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x00005775 jg LBB0_1130 + 0xe9, 0x10, 0xf8, 0xff, 0xff, //0x0000577b jmp LBB0_1044 + //0x00005780 LBB0_1133 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00005780 movq $-1, %rcx + 0xe9, 0x0c, 0x01, 0x00, 0x00, //0x00005787 jmp LBB0_1148 + //0x0000578c LBB0_1136 + 0x49, 0xc7, 0xc5, 0xfe, 0xff, 0xff, 0xff, //0x0000578c movq $-2, %r13 + 0x80, 0xfa, 0x61, //0x00005793 cmpb $97, %dl + 0x0f, 0x85, 0x7d, 0xf7, 0xff, 0xff, //0x00005796 jne LBB0_1050 + 0x48, 0x8d, 0x41, 0x01, //0x0000579c leaq $1(%rcx), %rax + 0x49, 0x89, 0x01, //0x000057a0 movq %rax, (%r9) + 0x41, 0x80, 0x7c, 0x0f, 0x01, 0x6c, //0x000057a3 cmpb $108, $1(%r15,%rcx) + 0x0f, 0x85, 0x6a, 0xf7, 0xff, 0xff, //0x000057a9 jne LBB0_1050 + 0x48, 0x8d, 0x41, 0x02, //0x000057af leaq $2(%rcx), %rax + 0x49, 0x89, 0x01, //0x000057b3 movq %rax, (%r9) + 0x41, 0x80, 0x7c, 0x0f, 0x02, 0x73, //0x000057b6 cmpb $115, $2(%r15,%rcx) + 0x0f, 0x85, 0x57, 0xf7, 0xff, 0xff, //0x000057bc jne LBB0_1050 + 0x48, 0x8d, 0x41, 0x03, //0x000057c2 leaq $3(%rcx), %rax + 0x49, 0x89, 0x01, //0x000057c6 movq %rax, (%r9) + 0x41, 0x80, 0x7c, 0x0f, 0x03, 0x65, //0x000057c9 cmpb $101, $3(%r15,%rcx) + 0x0f, 0x85, 0x44, 0xf7, 0xff, 0xff, //0x000057cf jne LBB0_1050 + 0x48, 0x83, 0xc1, 0x04, //0x000057d5 addq $4, %rcx + 0x48, 0x8b, 0x44, 0x24, 0x08, //0x000057d9 movq $8(%rsp), %rax + 0x48, 0x89, 0x08, //0x000057de movq %rcx, (%rax) + 0xe9, 0x33, 0xf7, 0xff, 0xff, //0x000057e1 jmp LBB0_1050 + //0x000057e6 LBB0_871 + 0x4d, 0x89, 0x29, //0x000057e6 movq %r13, (%r9) + 0x43, 0x80, 0x3c, 0x2f, 0x6e, //0x000057e9 cmpb $110, (%r15,%r13) + 0x0f, 0x85, 0x1e, 0xf7, 0xff, 0xff, //0x000057ee jne LBB0_1049 + 0x49, 0x89, 0x09, //0x000057f4 movq %rcx, (%r9) + 0x41, 0x80, 0x3c, 0x0f, 0x75, //0x000057f7 cmpb $117, (%r15,%rcx) + 0x0f, 0x85, 0x10, 0xf7, 0xff, 0xff, //0x000057fc jne LBB0_1049 + 0x48, 0x8d, 0x41, 0x01, //0x00005802 leaq $1(%rcx), %rax + 0x49, 0x89, 0x01, //0x00005806 movq %rax, (%r9) + 0x41, 0x80, 0x7c, 0x0f, 0x01, 0x6c, //0x00005809 cmpb $108, $1(%r15,%rcx) + 0x0f, 0x85, 0xfd, 0xf6, 0xff, 0xff, //0x0000580f jne LBB0_1049 + 0x48, 0x8d, 0x41, 0x02, //0x00005815 leaq $2(%rcx), %rax + 0x49, 0x89, 0x01, //0x00005819 movq %rax, (%r9) + 0x41, 0x80, 0x7c, 0x0f, 0x02, 0x6c, //0x0000581c cmpb $108, $2(%r15,%rcx) + 0x0f, 0x85, 0xea, 0xf6, 0xff, 0xff, //0x00005822 jne LBB0_1049 + 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00005828 jmp LBB0_1145 + //0x0000582d LBB0_1141 + 0x4d, 0x89, 0x29, //0x0000582d movq %r13, (%r9) + 0x43, 0x80, 0x3c, 0x2f, 0x74, //0x00005830 cmpb $116, (%r15,%r13) + 0x0f, 0x85, 0xd7, 0xf6, 0xff, 0xff, //0x00005835 jne LBB0_1049 + 0x49, 0x89, 0x09, //0x0000583b movq %rcx, (%r9) + 0x41, 0x80, 0x3c, 0x0f, 0x72, //0x0000583e cmpb $114, (%r15,%rcx) + 0x0f, 0x85, 0xc9, 0xf6, 0xff, 0xff, //0x00005843 jne LBB0_1049 + 0x48, 0x8d, 0x41, 0x01, //0x00005849 leaq $1(%rcx), %rax + 0x49, 0x89, 0x01, //0x0000584d movq %rax, (%r9) + 0x41, 0x80, 0x7c, 0x0f, 0x01, 0x75, //0x00005850 cmpb $117, $1(%r15,%rcx) + 0x0f, 0x85, 0xb6, 0xf6, 0xff, 0xff, //0x00005856 jne LBB0_1049 + 0x48, 0x8d, 0x41, 0x02, //0x0000585c leaq $2(%rcx), %rax + 0x49, 0x89, 0x01, //0x00005860 movq %rax, (%r9) + 0x41, 0x80, 0x7c, 0x0f, 0x02, 0x65, //0x00005863 cmpb $101, $2(%r15,%rcx) + 0x0f, 0x85, 0xa3, 0xf6, 0xff, 0xff, //0x00005869 jne LBB0_1049 + //0x0000586f LBB0_1145 + 0x48, 0x83, 0xc1, 0x03, //0x0000586f addq $3, %rcx + 0x48, 0x8b, 0x44, 0x24, 0x08, //0x00005873 movq $8(%rsp), %rax + 0x48, 0x89, 0x08, //0x00005878 movq %rcx, (%rax) + 0xe9, 0x92, 0xf6, 0xff, 0xff, //0x0000587b jmp LBB0_1049 + //0x00005880 LBB0_842 + 0x48, 0x83, 0xc1, 0xff, //0x00005880 addq $-1, %rcx + 0x49, 0x89, 0xcd, //0x00005884 movq %rcx, %r13 + 0xe9, 0x8d, 0xf6, 0xff, 0xff, //0x00005887 jmp LBB0_1050 + //0x0000588c LBB0_978 + 0x49, 0x83, 0xc5, 0xff, //0x0000588c addq $-1, %r13 + 0xe9, 0x84, 0xf6, 0xff, 0xff, //0x00005890 jmp LBB0_1050 + //0x00005895 LBB0_1147 + 0x4c, 0x89, 0xc9, //0x00005895 movq %r9, %rcx + //0x00005898 LBB0_1148 + 0x48, 0xf7, 0xd1, //0x00005898 notq %rcx + 0x48, 0x8b, 0x44, 0x24, 0x08, //0x0000589b movq $8(%rsp), %rax + 0x48, 0x01, 0x08, //0x000058a0 addq %rcx, (%rax) + 0xe9, 0x6a, 0xf6, 0xff, 0xff, //0x000058a3 jmp LBB0_1049 + //0x000058a8 LBB0_1158 + 0x4d, 0x89, 0xd9, //0x000058a8 movq %r11, %r9 + 0xe9, 0x0d, 0xf7, 0xff, 0xff, //0x000058ab jmp LBB0_861 + //0x000058b0 LBB0_1149 + 0x4c, 0x29, 0xd8, //0x000058b0 subq %r11, %rax + 0x48, 0x01, 0xf0, //0x000058b3 addq %rsi, %rax + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000058b6 movq $-1, %r13 + 0x48, 0x39, 0xd8, //0x000058bd cmpq %rbx, %rax + 0x0f, 0x82, 0xdc, 0xf4, 0xff, 0xff, //0x000058c0 jb LBB0_652 + 0xe9, 0x4e, 0xf6, 0xff, 0xff, //0x000058c6 jmp LBB0_1050 + //0x000058cb LBB0_1156 + 0x49, 0xc7, 0xc5, 0xfe, 0xff, 0xff, 0xff, //0x000058cb movq $-2, %r13 + 0xe9, 0x49, 0x00, 0x00, 0x00, //0x000058d2 jmp LBB0_1157 + //0x000058d7 LBB0_1150 + 0x4c, 0x29, 0xda, //0x000058d7 subq %r11, %rdx + 0x48, 0x83, 0xc2, 0x01, //0x000058da addq $1, %rdx + 0x48, 0x89, 0x17, //0x000058de movq %rdx, (%rdi) + 0x49, 0x89, 0xc5, //0x000058e1 movq %rax, %r13 + 0xe9, 0x30, 0xf6, 0xff, 0xff, //0x000058e4 jmp LBB0_1050 + //0x000058e9 LBB0_1151 + 0x49, 0x89, 0xc7, //0x000058e9 movq %rax, %r15 + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x000058ec jmp LBB0_1157 + //0x000058f1 LBB0_1152 + 0x4c, 0x01, 0xd8, //0x000058f1 addq %r11, %rax + 0x48, 0x85, 0xd2, //0x000058f4 testq %rdx, %rdx + 0x0f, 0x85, 0x5b, 0xd9, 0xff, 0xff, //0x000058f7 jne LBB0_638 + 0xe9, 0x8d, 0xd9, 0xff, 0xff, //0x000058fd jmp LBB0_643 + //0x00005902 LBB0_1153 + 0x4c, 0x8b, 0x7c, 0x24, 0x20, //0x00005902 movq $32(%rsp), %r15 + 0x49, 0x83, 0xc7, 0x01, //0x00005907 addq $1, %r15 + 0x49, 0xc7, 0xc5, 0xfd, 0xff, 0xff, 0xff, //0x0000590b movq $-3, %r13 + 0xe9, 0x09, 0x00, 0x00, 0x00, //0x00005912 jmp LBB0_1157 + //0x00005917 LBB0_1154 + 0x4c, 0x8b, 0x7c, 0x24, 0x20, //0x00005917 movq $32(%rsp), %r15 + 0x49, 0x83, 0xc7, 0x01, //0x0000591c addq $1, %r15 + //0x00005920 LBB0_1157 + 0x4d, 0x29, 0xe7, //0x00005920 subq %r12, %r15 + 0x48, 0x8b, 0x44, 0x24, 0x08, //0x00005923 movq $8(%rsp), %rax + 0x4c, 0x89, 0x38, //0x00005928 movq %r15, (%rax) + 0xe9, 0xe9, 0xf5, 0xff, 0xff, //0x0000592b jmp LBB0_1050 + //0x00005930 LBB0_1155 + 0x4c, 0x01, 0xda, //0x00005930 addq %r11, %rdx + 0x48, 0x83, 0xff, 0x10, //0x00005933 cmpq $16, %rdi + 0x0f, 0x83, 0x13, 0xf5, 0xff, 0xff, //0x00005937 jae LBB0_659 + 0xe9, 0x62, 0xf5, 0xff, 0xff, //0x0000593d jmp LBB0_663 + //0x00005942 LBB0_389 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00005942 movq $8(%rsp), %r9 + 0xe9, 0xb4, 0xfd, 0xff, 0xff, //0x00005947 jmp LBB0_1127 + //0x0000594c LBB0_1159 + 0x4c, 0x01, 0xda, //0x0000594c addq %r11, %rdx + 0xe9, 0x86, 0xf7, 0xff, 0xff, //0x0000594f jmp LBB0_1067 + //0x00005954 LBB0_1160 + 0x49, 0x8b, 0x07, //0x00005954 movq (%r15), %rax + 0x48, 0x8b, 0x4c, 0x24, 0x08, //0x00005957 movq $8(%rsp), %rcx + 0x48, 0x89, 0x01, //0x0000595c movq %rax, (%rcx) + 0xe9, 0xb5, 0xf5, 0xff, 0xff, //0x0000595f jmp LBB0_1050 + //0x00005964 LBB0_1161 + 0x4c, 0x8b, 0x4c, 0x24, 0x08, //0x00005964 movq $8(%rsp), %r9 + 0x4c, 0x89, 0xeb, //0x00005969 movq %r13, %rbx + 0xe9, 0x8f, 0xfd, 0xff, 0xff, //0x0000596c jmp LBB0_1127 + //0x00005971 LBB0_1162 + 0x49, 0x8d, 0x48, 0xff, //0x00005971 leaq $-1(%r8), %rcx + 0x4c, 0x39, 0xf9, //0x00005975 cmpq %r15, %rcx + 0x0f, 0x84, 0x9b, 0xf5, 0xff, 0xff, //0x00005978 je LBB0_1050 + 0x4b, 0x8d, 0x14, 0x0f, //0x0000597e leaq (%r15,%r9), %rdx + 0x48, 0x83, 0xc2, 0x02, //0x00005982 addq $2, %rdx + 0x4d, 0x29, 0xf8, //0x00005986 subq %r15, %r8 + 0x49, 0x83, 0xc0, 0xfe, //0x00005989 addq $-2, %r8 + 0x4d, 0x89, 0xc7, //0x0000598d movq %r8, %r15 + 0xe9, 0x45, 0xf7, 0xff, 0xff, //0x00005990 jmp LBB0_1067 + 0x90, 0x90, 0x90, //0x00005995 .p2align 2, 0x90 + // // .set L0_0_set_505, LBB0_505-LJTI0_0 + // // .set L0_0_set_504, LBB0_504-LJTI0_0 + // // .set L0_0_set_490, LBB0_490-LJTI0_0 + // // .set L0_0_set_466, LBB0_466-LJTI0_0 + // // .set L0_0_set_540, LBB0_540-LJTI0_0 + // // .set L0_0_set_503, LBB0_503-LJTI0_0 + // // .set L0_0_set_489, LBB0_489-LJTI0_0 + // // .set L0_0_set_564, LBB0_564-LJTI0_0 + //0x00005998 LJTI0_0 + 0x7e, 0xcd, 0xff, 0xff, //0x00005998 .long L0_0_set_505 + 0x78, 0xcd, 0xff, 0xff, //0x0000599c .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059a0 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059a4 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059a8 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059ac .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059b0 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059b4 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059b8 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059bc .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059c0 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059c4 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059c8 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059cc .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059d0 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059d4 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059d8 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059dc .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059e0 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059e4 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059e8 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059ec .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059f0 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059f4 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059f8 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x000059fc .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a00 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a04 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a08 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a0c .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a10 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a14 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a18 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a1c .long L0_0_set_504 + 0x77, 0xcc, 0xff, 0xff, //0x00005a20 .long L0_0_set_490 + 0x78, 0xcd, 0xff, 0xff, //0x00005a24 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a28 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a2c .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a30 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a34 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a38 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a3c .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a40 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a44 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a48 .long L0_0_set_504 + 0x8e, 0xca, 0xff, 0xff, //0x00005a4c .long L0_0_set_466 + 0x78, 0xcd, 0xff, 0xff, //0x00005a50 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a54 .long L0_0_set_504 + 0x8e, 0xca, 0xff, 0xff, //0x00005a58 .long L0_0_set_466 + 0x8e, 0xca, 0xff, 0xff, //0x00005a5c .long L0_0_set_466 + 0x8e, 0xca, 0xff, 0xff, //0x00005a60 .long L0_0_set_466 + 0x8e, 0xca, 0xff, 0xff, //0x00005a64 .long L0_0_set_466 + 0x8e, 0xca, 0xff, 0xff, //0x00005a68 .long L0_0_set_466 + 0x8e, 0xca, 0xff, 0xff, //0x00005a6c .long L0_0_set_466 + 0x8e, 0xca, 0xff, 0xff, //0x00005a70 .long L0_0_set_466 + 0x8e, 0xca, 0xff, 0xff, //0x00005a74 .long L0_0_set_466 + 0x8e, 0xca, 0xff, 0xff, //0x00005a78 .long L0_0_set_466 + 0x8e, 0xca, 0xff, 0xff, //0x00005a7c .long L0_0_set_466 + 0x78, 0xcd, 0xff, 0xff, //0x00005a80 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a84 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a88 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a8c .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a90 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a94 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a98 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005a9c .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005aa0 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005aa4 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005aa8 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005aac .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005ab0 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005ab4 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005ab8 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005abc .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005ac0 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005ac4 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005ac8 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005acc .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005ad0 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005ad4 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005ad8 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005adc .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005ae0 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005ae4 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005ae8 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005aec .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005af0 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005af4 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005af8 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005afc .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b00 .long L0_0_set_504 + 0x52, 0xcf, 0xff, 0xff, //0x00005b04 .long L0_0_set_540 + 0x78, 0xcd, 0xff, 0xff, //0x00005b08 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b0c .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b10 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b14 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b18 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b1c .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b20 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b24 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b28 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b2c .long L0_0_set_504 + 0x61, 0xcd, 0xff, 0xff, //0x00005b30 .long L0_0_set_503 + 0x78, 0xcd, 0xff, 0xff, //0x00005b34 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b38 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b3c .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b40 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b44 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b48 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b4c .long L0_0_set_504 + 0x64, 0xcc, 0xff, 0xff, //0x00005b50 .long L0_0_set_489 + 0x78, 0xcd, 0xff, 0xff, //0x00005b54 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b58 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b5c .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b60 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b64 .long L0_0_set_504 + 0x64, 0xcc, 0xff, 0xff, //0x00005b68 .long L0_0_set_489 + 0x78, 0xcd, 0xff, 0xff, //0x00005b6c .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b70 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b74 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b78 .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b7c .long L0_0_set_504 + 0x78, 0xcd, 0xff, 0xff, //0x00005b80 .long L0_0_set_504 + 0xeb, 0xd1, 0xff, 0xff, //0x00005b84 .long L0_0_set_564 + // // .set L0_1_set_293, LBB0_293-LJTI0_1 + // // .set L0_1_set_292, LBB0_292-LJTI0_1 + // // .set L0_1_set_253, LBB0_253-LJTI0_1 + // // .set L0_1_set_230, LBB0_230-LJTI0_1 + // // .set L0_1_set_265, LBB0_265-LJTI0_1 + // // .set L0_1_set_291, LBB0_291-LJTI0_1 + // // .set L0_1_set_252, LBB0_252-LJTI0_1 + // // .set L0_1_set_324, LBB0_324-LJTI0_1 + //0x00005b88 LJTI0_1 + 0x5e, 0xb8, 0xff, 0xff, //0x00005b88 .long L0_1_set_293 + 0x58, 0xb8, 0xff, 0xff, //0x00005b8c .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005b90 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005b94 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005b98 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005b9c .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005ba0 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005ba4 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005ba8 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bac .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bb0 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bb4 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bb8 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bbc .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bc0 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bc4 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bc8 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bcc .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bd0 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bd4 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bd8 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bdc .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005be0 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005be4 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005be8 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bec .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bf0 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bf4 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bf8 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005bfc .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c00 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c04 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c08 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c0c .long L0_1_set_292 + 0xa4, 0xb4, 0xff, 0xff, //0x00005c10 .long L0_1_set_253 + 0x58, 0xb8, 0xff, 0xff, //0x00005c14 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c18 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c1c .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c20 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c24 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c28 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c2c .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c30 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c34 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c38 .long L0_1_set_292 + 0xce, 0xb2, 0xff, 0xff, //0x00005c3c .long L0_1_set_230 + 0x58, 0xb8, 0xff, 0xff, //0x00005c40 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c44 .long L0_1_set_292 + 0xce, 0xb2, 0xff, 0xff, //0x00005c48 .long L0_1_set_230 + 0xce, 0xb2, 0xff, 0xff, //0x00005c4c .long L0_1_set_230 + 0xce, 0xb2, 0xff, 0xff, //0x00005c50 .long L0_1_set_230 + 0xce, 0xb2, 0xff, 0xff, //0x00005c54 .long L0_1_set_230 + 0xce, 0xb2, 0xff, 0xff, //0x00005c58 .long L0_1_set_230 + 0xce, 0xb2, 0xff, 0xff, //0x00005c5c .long L0_1_set_230 + 0xce, 0xb2, 0xff, 0xff, //0x00005c60 .long L0_1_set_230 + 0xce, 0xb2, 0xff, 0xff, //0x00005c64 .long L0_1_set_230 + 0xce, 0xb2, 0xff, 0xff, //0x00005c68 .long L0_1_set_230 + 0xce, 0xb2, 0xff, 0xff, //0x00005c6c .long L0_1_set_230 + 0x58, 0xb8, 0xff, 0xff, //0x00005c70 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c74 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c78 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c7c .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c80 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c84 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c88 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c8c .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c90 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c94 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c98 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005c9c .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005ca0 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005ca4 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005ca8 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005cac .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005cb0 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005cb4 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005cb8 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005cbc .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005cc0 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005cc4 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005cc8 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005ccc .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005cd0 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005cd4 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005cd8 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005cdc .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005ce0 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005ce4 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005ce8 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005cec .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005cf0 .long L0_1_set_292 + 0xa0, 0xb5, 0xff, 0xff, //0x00005cf4 .long L0_1_set_265 + 0x58, 0xb8, 0xff, 0xff, //0x00005cf8 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005cfc .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d00 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d04 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d08 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d0c .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d10 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d14 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d18 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d1c .long L0_1_set_292 + 0x3d, 0xb8, 0xff, 0xff, //0x00005d20 .long L0_1_set_291 + 0x58, 0xb8, 0xff, 0xff, //0x00005d24 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d28 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d2c .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d30 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d34 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d38 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d3c .long L0_1_set_292 + 0x91, 0xb4, 0xff, 0xff, //0x00005d40 .long L0_1_set_252 + 0x58, 0xb8, 0xff, 0xff, //0x00005d44 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d48 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d4c .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d50 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d54 .long L0_1_set_292 + 0x91, 0xb4, 0xff, 0xff, //0x00005d58 .long L0_1_set_252 + 0x58, 0xb8, 0xff, 0xff, //0x00005d5c .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d60 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d64 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d68 .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d6c .long L0_1_set_292 + 0x58, 0xb8, 0xff, 0xff, //0x00005d70 .long L0_1_set_292 + 0x21, 0xba, 0xff, 0xff, //0x00005d74 .long L0_1_set_324 + // // .set L0_2_set_709, LBB0_709-LJTI0_2 + // // .set L0_2_set_737, LBB0_737-LJTI0_2 + // // .set L0_2_set_712, LBB0_712-LJTI0_2 + // // .set L0_2_set_739, LBB0_739-LJTI0_2 + // // .set L0_2_set_733, LBB0_733-LJTI0_2 + // // .set L0_2_set_741, LBB0_741-LJTI0_2 + //0x00005d78 LJTI0_2 + 0x0e, 0xd8, 0xff, 0xff, //0x00005d78 .long L0_2_set_709 + 0xa8, 0xdd, 0xff, 0xff, //0x00005d7c .long L0_2_set_737 + 0x25, 0xd8, 0xff, 0xff, //0x00005d80 .long L0_2_set_712 + 0xd4, 0xdd, 0xff, 0xff, //0x00005d84 .long L0_2_set_739 + 0x7e, 0xd9, 0xff, 0xff, //0x00005d88 .long L0_2_set_733 + 0xeb, 0xdd, 0xff, 0xff, //0x00005d8c .long L0_2_set_741 + // // .set L0_3_set_1050, LBB0_1050-LJTI0_3 + // // .set L0_3_set_1049, LBB0_1049-LJTI0_3 + // // .set L0_3_set_843, LBB0_843-LJTI0_3 + // // .set L0_3_set_863, LBB0_863-LJTI0_3 + // // .set L0_3_set_743, LBB0_743-LJTI0_3 + // // .set L0_3_set_867, LBB0_867-LJTI0_3 + // // .set L0_3_set_839, LBB0_839-LJTI0_3 + // // .set L0_3_set_869, LBB0_869-LJTI0_3 + // // .set L0_3_set_875, LBB0_875-LJTI0_3 + // // .set L0_3_set_878, LBB0_878-LJTI0_3 + //0x00005d90 LJTI0_3 + 0x89, 0xf1, 0xff, 0xff, //0x00005d90 .long L0_3_set_1050 + 0x82, 0xf1, 0xff, 0xff, //0x00005d94 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005d98 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005d9c .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005da0 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005da4 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005da8 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005dac .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005db0 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005db4 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005db8 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005dbc .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005dc0 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005dc4 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005dc8 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005dcc .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005dd0 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005dd4 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005dd8 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ddc .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005de0 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005de4 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005de8 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005dec .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005df0 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005df4 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005df8 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005dfc .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e00 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e04 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e08 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e0c .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e10 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e14 .long L0_3_set_1049 + 0xf3, 0xe0, 0xff, 0xff, //0x00005e18 .long L0_3_set_843 + 0x82, 0xf1, 0xff, 0xff, //0x00005e1c .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e20 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e24 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e28 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e2c .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e30 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e34 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e38 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e3c .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e40 .long L0_3_set_1049 + 0x25, 0xe2, 0xff, 0xff, //0x00005e44 .long L0_3_set_863 + 0x82, 0xf1, 0xff, 0xff, //0x00005e48 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e4c .long L0_3_set_1049 + 0xa5, 0xd9, 0xff, 0xff, //0x00005e50 .long L0_3_set_743 + 0xa5, 0xd9, 0xff, 0xff, //0x00005e54 .long L0_3_set_743 + 0xa5, 0xd9, 0xff, 0xff, //0x00005e58 .long L0_3_set_743 + 0xa5, 0xd9, 0xff, 0xff, //0x00005e5c .long L0_3_set_743 + 0xa5, 0xd9, 0xff, 0xff, //0x00005e60 .long L0_3_set_743 + 0xa5, 0xd9, 0xff, 0xff, //0x00005e64 .long L0_3_set_743 + 0xa5, 0xd9, 0xff, 0xff, //0x00005e68 .long L0_3_set_743 + 0xa5, 0xd9, 0xff, 0xff, //0x00005e6c .long L0_3_set_743 + 0xa5, 0xd9, 0xff, 0xff, //0x00005e70 .long L0_3_set_743 + 0xa5, 0xd9, 0xff, 0xff, //0x00005e74 .long L0_3_set_743 + 0x82, 0xf1, 0xff, 0xff, //0x00005e78 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e7c .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e80 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e84 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e88 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e8c .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e90 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e94 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e98 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005e9c .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ea0 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ea4 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ea8 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005eac .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005eb0 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005eb4 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005eb8 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ebc .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ec0 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ec4 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ec8 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ecc .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ed0 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ed4 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ed8 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005edc .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ee0 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ee4 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ee8 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005eec .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ef0 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ef4 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005ef8 .long L0_3_set_1049 + 0x5f, 0xe2, 0xff, 0xff, //0x00005efc .long L0_3_set_867 + 0x82, 0xf1, 0xff, 0xff, //0x00005f00 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f04 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f08 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f0c .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f10 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f14 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f18 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f1c .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f20 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f24 .long L0_3_set_1049 + 0xb6, 0xe0, 0xff, 0xff, //0x00005f28 .long L0_3_set_839 + 0x82, 0xf1, 0xff, 0xff, //0x00005f2c .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f30 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f34 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f38 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f3c .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f40 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f44 .long L0_3_set_1049 + 0x86, 0xe2, 0xff, 0xff, //0x00005f48 .long L0_3_set_869 + 0x82, 0xf1, 0xff, 0xff, //0x00005f4c .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f50 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f54 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f58 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f5c .long L0_3_set_1049 + 0xb6, 0xe2, 0xff, 0xff, //0x00005f60 .long L0_3_set_875 + 0x82, 0xf1, 0xff, 0xff, //0x00005f64 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f68 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f6c .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f70 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f74 .long L0_3_set_1049 + 0x82, 0xf1, 0xff, 0xff, //0x00005f78 .long L0_3_set_1049 + 0xf6, 0xe2, 0xff, 0xff, //0x00005f7c .long L0_3_set_878 + // // .set L0_4_set_929, LBB0_929-LJTI0_4 + // // .set L0_4_set_937, LBB0_937-LJTI0_4 + // // .set L0_4_set_931, LBB0_931-LJTI0_4 + // // .set L0_4_set_923, LBB0_923-LJTI0_4 + //0x00005f80 LJTI0_4 + 0x7a, 0xe4, 0xff, 0xff, //0x00005f80 .long L0_4_set_929 + 0x6a, 0xe5, 0xff, 0xff, //0x00005f84 .long L0_4_set_937 + 0x7a, 0xe4, 0xff, 0xff, //0x00005f88 .long L0_4_set_929 + 0x94, 0xe4, 0xff, 0xff, //0x00005f8c .long L0_4_set_931 + 0x6a, 0xe5, 0xff, 0xff, //0x00005f90 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005f94 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005f98 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005f9c .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fa0 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fa4 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fa8 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fac .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fb0 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fb4 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fb8 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fbc .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fc0 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fc4 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fc8 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fcc .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fd0 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fd4 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fd8 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fdc .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fe0 .long L0_4_set_937 + 0x6a, 0xe5, 0xff, 0xff, //0x00005fe4 .long L0_4_set_937 + 0x32, 0xe4, 0xff, 0xff, //0x00005fe8 .long L0_4_set_923 + // // .set L0_5_set_794, LBB0_794-LJTI0_5 + // // .set L0_5_set_825, LBB0_825-LJTI0_5 + // // .set L0_5_set_796, LBB0_796-LJTI0_5 + // // .set L0_5_set_788, LBB0_788-LJTI0_5 + //0x00005fec LJTI0_5 + 0x07, 0xdb, 0xff, 0xff, //0x00005fec .long L0_5_set_794 + 0x54, 0xdd, 0xff, 0xff, //0x00005ff0 .long L0_5_set_825 + 0x07, 0xdb, 0xff, 0xff, //0x00005ff4 .long L0_5_set_794 + 0x1a, 0xdb, 0xff, 0xff, //0x00005ff8 .long L0_5_set_796 + 0x54, 0xdd, 0xff, 0xff, //0x00005ffc .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006000 .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006004 .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006008 .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x0000600c .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006010 .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006014 .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006018 .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x0000601c .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006020 .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006024 .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006028 .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x0000602c .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006030 .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006034 .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006038 .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x0000603c .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006040 .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006044 .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006048 .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x0000604c .long L0_5_set_825 + 0x54, 0xdd, 0xff, 0xff, //0x00006050 .long L0_5_set_825 + 0xc0, 0xda, 0xff, 0xff, //0x00006054 .long L0_5_set_788 + // // .set L0_6_set_1050, LBB0_1050-LJTI0_6 + // // .set L0_6_set_1056, LBB0_1056-LJTI0_6 + // // .set L0_6_set_1057, LBB0_1057-LJTI0_6 + // // .set L0_6_set_654, LBB0_654-LJTI0_6 // // .set L0_6_set_1069, LBB0_1069-LJTI0_6 - // // .set L0_6_set_1027, LBB0_1027-LJTI0_6 - // // .set L0_6_set_1071, LBB0_1071-LJTI0_6 - //0x00005d0c LJTI0_6 - 0x89, 0xef, 0xff, 0xff, //0x00005d0c .long L0_6_set_1026 - 0x06, 0xf0, 0xff, 0xff, //0x00005d10 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d14 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d18 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d1c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d20 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d24 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d28 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d2c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d30 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d34 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d38 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d3c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d40 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d44 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d48 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d4c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d50 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d54 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d58 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d5c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d60 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d64 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d68 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d6c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d70 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d74 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d78 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d7c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d80 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d84 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d88 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d8c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d90 .long L0_6_set_1032 - 0x0e, 0xf0, 0xff, 0xff, //0x00005d94 .long L0_6_set_1033 - 0x06, 0xf0, 0xff, 0xff, //0x00005d98 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005d9c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005da0 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005da4 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005da8 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005dac .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005db0 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005db4 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005db8 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005dbc .long L0_6_set_1032 - 0x26, 0xee, 0xff, 0xff, //0x00005dc0 .long L0_6_set_634 - 0x06, 0xf0, 0xff, 0xff, //0x00005dc4 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005dc8 .long L0_6_set_1032 - 0x26, 0xee, 0xff, 0xff, //0x00005dcc .long L0_6_set_634 - 0x26, 0xee, 0xff, 0xff, //0x00005dd0 .long L0_6_set_634 - 0x26, 0xee, 0xff, 0xff, //0x00005dd4 .long L0_6_set_634 - 0x26, 0xee, 0xff, 0xff, //0x00005dd8 .long L0_6_set_634 - 0x26, 0xee, 0xff, 0xff, //0x00005ddc .long L0_6_set_634 - 0x26, 0xee, 0xff, 0xff, //0x00005de0 .long L0_6_set_634 - 0x26, 0xee, 0xff, 0xff, //0x00005de4 .long L0_6_set_634 - 0x26, 0xee, 0xff, 0xff, //0x00005de8 .long L0_6_set_634 - 0x26, 0xee, 0xff, 0xff, //0x00005dec .long L0_6_set_634 - 0x26, 0xee, 0xff, 0xff, //0x00005df0 .long L0_6_set_634 - 0x06, 0xf0, 0xff, 0xff, //0x00005df4 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005df8 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005dfc .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e00 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e04 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e08 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e0c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e10 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e14 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e18 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e1c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e20 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e24 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e28 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e2c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e30 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e34 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e38 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e3c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e40 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e44 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e48 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e4c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e50 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e54 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e58 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e5c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e60 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e64 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e68 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e6c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e70 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e74 .long L0_6_set_1032 - 0xf8, 0xf0, 0xff, 0xff, //0x00005e78 .long L0_6_set_1045 - 0x06, 0xf0, 0xff, 0xff, //0x00005e7c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e80 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e84 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e88 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e8c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e90 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e94 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e98 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005e9c .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005ea0 .long L0_6_set_1032 - 0x9c, 0xf3, 0xff, 0xff, //0x00005ea4 .long L0_6_set_1069 - 0x06, 0xf0, 0xff, 0xff, //0x00005ea8 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005eac .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005eb0 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005eb4 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005eb8 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005ebc .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005ec0 .long L0_6_set_1032 - 0xd7, 0xef, 0xff, 0xff, //0x00005ec4 .long L0_6_set_1027 - 0x06, 0xf0, 0xff, 0xff, //0x00005ec8 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005ecc .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005ed0 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005ed4 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005ed8 .long L0_6_set_1032 - 0xd7, 0xef, 0xff, 0xff, //0x00005edc .long L0_6_set_1027 - 0x06, 0xf0, 0xff, 0xff, //0x00005ee0 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005ee4 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005ee8 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005eec .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005ef0 .long L0_6_set_1032 - 0x06, 0xf0, 0xff, 0xff, //0x00005ef4 .long L0_6_set_1032 - 0xae, 0xf3, 0xff, 0xff, //0x00005ef8 .long L0_6_set_1071 - //0x00005efc .p2align 2, 0x00 - //0x00005efc _MASK_USE_NUMBER - 0x02, 0x00, 0x00, 0x00, //0x00005efc .long 2 - //0x00005f00 .p2align 4, 0x00 - //0x00005f00 __UnquoteTab - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f00 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f10 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, //0x00005f20 QUAD $0x0000000000220000; QUAD $0x2f00000000000000 // .ascii 16, '\x00\x00"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f30 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f40 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, //0x00005f50 QUAD $0x0000000000000000; QUAD $0x0000005c00000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\\\x00\x00\x00' - 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, //0x00005f60 QUAD $0x000c000000080000; QUAD $0x000a000000000000 // .ascii 16, '\x00\x00\x08\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\n\x00' - 0x00, 0x00, 0x0d, 0x00, 0x09, 0xff, //0x00005f70 LONG $0x000d0000; WORD $0xff09 // .ascii 6, '\x00\x00\r\x00\t\xff' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f76 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f86 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f96 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005fa6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005fb6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005fc6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005fd6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005fe6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005ff6 QUAD $0x0000000000000000; WORD $0x0000 // .space 10, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + // // .set L0_6_set_1093, LBB0_1093-LJTI0_6 + // // .set L0_6_set_1051, LBB0_1051-LJTI0_6 + // // .set L0_6_set_1096, LBB0_1096-LJTI0_6 + //0x00006058 LJTI0_6 + 0xc1, 0xee, 0xff, 0xff, //0x00006058 .long L0_6_set_1050 + 0xaa, 0xef, 0xff, 0xff, //0x0000605c .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006060 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006064 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006068 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x0000606c .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006070 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006074 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006078 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x0000607c .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006080 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006084 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006088 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x0000608c .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006090 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006094 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006098 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x0000609c .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060a0 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060a4 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060a8 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060ac .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060b0 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060b4 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060b8 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060bc .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060c0 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060c4 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060c8 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060cc .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060d0 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060d4 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060d8 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060dc .long L0_6_set_1056 + 0xb2, 0xef, 0xff, 0xff, //0x000060e0 .long L0_6_set_1057 + 0xaa, 0xef, 0xff, 0xff, //0x000060e4 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060e8 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060ec .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060f0 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060f4 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060f8 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000060fc .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006100 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006104 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006108 .long L0_6_set_1056 + 0x76, 0xed, 0xff, 0xff, //0x0000610c .long L0_6_set_654 + 0xaa, 0xef, 0xff, 0xff, //0x00006110 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006114 .long L0_6_set_1056 + 0x76, 0xed, 0xff, 0xff, //0x00006118 .long L0_6_set_654 + 0x76, 0xed, 0xff, 0xff, //0x0000611c .long L0_6_set_654 + 0x76, 0xed, 0xff, 0xff, //0x00006120 .long L0_6_set_654 + 0x76, 0xed, 0xff, 0xff, //0x00006124 .long L0_6_set_654 + 0x76, 0xed, 0xff, 0xff, //0x00006128 .long L0_6_set_654 + 0x76, 0xed, 0xff, 0xff, //0x0000612c .long L0_6_set_654 + 0x76, 0xed, 0xff, 0xff, //0x00006130 .long L0_6_set_654 + 0x76, 0xed, 0xff, 0xff, //0x00006134 .long L0_6_set_654 + 0x76, 0xed, 0xff, 0xff, //0x00006138 .long L0_6_set_654 + 0x76, 0xed, 0xff, 0xff, //0x0000613c .long L0_6_set_654 + 0xaa, 0xef, 0xff, 0xff, //0x00006140 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006144 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006148 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x0000614c .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006150 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006154 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006158 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x0000615c .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006160 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006164 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006168 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x0000616c .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006170 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006174 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006178 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x0000617c .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006180 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006184 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006188 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x0000618c .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006190 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006194 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006198 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x0000619c .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061a0 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061a4 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061a8 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061ac .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061b0 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061b4 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061b8 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061bc .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061c0 .long L0_6_set_1056 + 0x9c, 0xf0, 0xff, 0xff, //0x000061c4 .long L0_6_set_1069 + 0xaa, 0xef, 0xff, 0xff, //0x000061c8 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061cc .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061d0 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061d4 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061d8 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061dc .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061e0 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061e4 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061e8 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061ec .long L0_6_set_1056 + 0x40, 0xf3, 0xff, 0xff, //0x000061f0 .long L0_6_set_1093 + 0xaa, 0xef, 0xff, 0xff, //0x000061f4 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061f8 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x000061fc .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006200 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006204 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006208 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x0000620c .long L0_6_set_1056 + 0x88, 0xef, 0xff, 0xff, //0x00006210 .long L0_6_set_1051 + 0xaa, 0xef, 0xff, 0xff, //0x00006214 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006218 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x0000621c .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006220 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006224 .long L0_6_set_1056 + 0x88, 0xef, 0xff, 0xff, //0x00006228 .long L0_6_set_1051 + 0xaa, 0xef, 0xff, 0xff, //0x0000622c .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006230 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006234 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006238 .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x0000623c .long L0_6_set_1056 + 0xaa, 0xef, 0xff, 0xff, //0x00006240 .long L0_6_set_1056 + 0x58, 0xf3, 0xff, 0xff, //0x00006244 .long L0_6_set_1096 + //0x00006248 .p2align 2, 0x00 + //0x00006248 _MASK_USE_NUMBER + 0x02, 0x00, 0x00, 0x00, //0x00006248 .long 2 + 0x00, 0x00, 0x00, 0x00, //0x0000624c .p2align 4, 0x00 + //0x00006250 __UnquoteTab + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00006250 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00006260 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, //0x00006270 QUAD $0x0000000000220000; QUAD $0x2f00000000000000 // .ascii 16, '\x00\x00"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00006280 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00006290 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, //0x000062a0 QUAD $0x0000000000000000; QUAD $0x0000005c00000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\\\x00\x00\x00' + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, //0x000062b0 QUAD $0x000c000000080000; QUAD $0x000a000000000000 // .ascii 16, '\x00\x00\x08\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\n\x00' + 0x00, 0x00, 0x0d, 0x00, 0x09, 0xff, //0x000062c0 LONG $0x000d0000; WORD $0xff09 // .ascii 6, '\x00\x00\r\x00\t\xff' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000062c6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000062d6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000062e6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000062f6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00006306 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00006316 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00006326 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00006336 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00006346 QUAD $0x0000000000000000; WORD $0x0000 // .space 10, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' } diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_array_subr.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_array_subr.go index 229d54e..29ad7f0 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_array_subr.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_array_subr.go @@ -16,7 +16,7 @@ const ( ) const ( - _size__skip_array = 15136 + _size__skip_array = 15384 ) var ( @@ -28,15 +28,15 @@ var ( {0xc, 32}, {0xd, 40}, {0x14, 48}, - {0x38dd, 208}, - {0x38de, 48}, - {0x38e0, 40}, - {0x38e2, 32}, - {0x38e4, 24}, - {0x38e6, 16}, - {0x38e7, 8}, - {0x38eb, 0}, - {0x3b20, 208}, + {0x3a59, 208}, + {0x3a5a, 48}, + {0x3a5c, 40}, + {0x3a5e, 32}, + {0x3a60, 24}, + {0x3a62, 16}, + {0x3a63, 8}, + {0x3a67, 0}, + {0x3c18, 208}, } ) diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_array_text_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_array_text_amd64.go index 94393ff..89e167b 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_array_text_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_array_text_amd64.go @@ -118,4081 +118,4142 @@ var _text_skip_array = []byte{ 0x53, //0x000002cc pushq %rbx 0x48, 0x81, 0xec, 0xa0, 0x00, 0x00, 0x00, //0x000002cd subq $160, %rsp 0x49, 0x89, 0xcb, //0x000002d4 movq %rcx, %r11 - 0x49, 0x89, 0xd7, //0x000002d7 movq %rdx, %r15 - 0x49, 0x89, 0xf5, //0x000002da movq %rsi, %r13 - 0xc5, 0xfa, 0x6f, 0x05, 0x1b, 0xfd, 0xff, 0xff, //0x000002dd vmovdqu $-741(%rip), %xmm0 /* LCPI0_0+0(%rip) */ - 0xc5, 0xfa, 0x7f, 0x02, //0x000002e5 vmovdqu %xmm0, (%rdx) - 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x000002e9 movq $-1, %r12 - 0xc5, 0xfe, 0x6f, 0x2d, 0xc8, 0xfd, 0xff, 0xff, //0x000002f0 vmovdqu $-568(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0xe0, 0xfd, 0xff, 0xff, //0x000002f8 vmovdqu $-544(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0xf8, 0xfd, 0xff, 0xff, //0x00000300 vmovdqu $-520(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x10, 0xfe, 0xff, 0xff, //0x00000308 vmovdqu $-496(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00000310 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0xe3, 0xfe, 0xff, 0xff, //0x00000315 vmovdqu $-285(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0xfb, 0xfe, 0xff, 0xff, //0x0000031d vmovdqu $-261(%rip), %ymm13 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0x13, 0xff, 0xff, 0xff, //0x00000325 vmovdqu $-237(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0xab, 0xfe, 0xff, 0xff, //0x0000032d vmovdqu $-341(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x63, 0xff, 0xff, 0xff, //0x00000335 vmovdqu $-157(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x7b, 0xfe, 0xff, 0xff, //0x0000033d vmovdqu $-389(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0xf3, 0xfd, 0xff, 0xff, //0x00000345 vmovdqu $-525(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x0b, 0xfe, 0xff, 0xff, //0x0000034d vmovdqu $-501(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - 0x48, 0x89, 0x4c, 0x24, 0x18, //0x00000355 movq %rcx, $24(%rsp) - 0x48, 0x89, 0x7c, 0x24, 0x10, //0x0000035a movq %rdi, $16(%rsp) - 0x48, 0x89, 0x54, 0x24, 0x08, //0x0000035f movq %rdx, $8(%rsp) - 0xe9, 0x77, 0x00, 0x00, 0x00, //0x00000364 jmp LBB0_5 - //0x00000369 LBB0_153 - 0x41, 0x0f, 0xbc, 0xc3, //0x00000369 bsfl %r11d, %eax - 0x4c, 0x01, 0xc0, //0x0000036d addq %r8, %rax - 0x4c, 0x8d, 0x0c, 0x06, //0x00000370 leaq (%rsi,%rax), %r9 - 0x49, 0x83, 0xc1, 0x01, //0x00000374 addq $1, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00000378 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x0000037d movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00000382 movq $8(%rsp), %r15 - 0x4d, 0x89, 0x4d, 0x00, //0x00000387 movq %r9, (%r13) - 0x4d, 0x85, 0xc0, //0x0000038b testq %r8, %r8 - 0x0f, 0x8e, 0x98, 0x37, 0x00, 0x00, //0x0000038e jle LBB0_679 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000394 .p2align 4, 0x90 + 0x49, 0x89, 0xf7, //0x000002d7 movq %rsi, %r15 + 0x48, 0x89, 0x7c, 0x24, 0x20, //0x000002da movq %rdi, $32(%rsp) + 0xc5, 0xfa, 0x6f, 0x05, 0x19, 0xfd, 0xff, 0xff, //0x000002df vmovdqu $-743(%rip), %xmm0 /* LCPI0_0+0(%rip) */ + 0x48, 0x89, 0x54, 0x24, 0x18, //0x000002e7 movq %rdx, $24(%rsp) + 0xc5, 0xfa, 0x7f, 0x02, //0x000002ec vmovdqu %xmm0, (%rdx) + 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x000002f0 movq $-1, %r12 + 0xc5, 0xfe, 0x6f, 0x2d, 0xc1, 0xfd, 0xff, 0xff, //0x000002f7 vmovdqu $-575(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0xd9, 0xfd, 0xff, 0xff, //0x000002ff vmovdqu $-551(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0xf1, 0xfd, 0xff, 0xff, //0x00000307 vmovdqu $-527(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x09, 0xfe, 0xff, 0xff, //0x0000030f vmovdqu $-503(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00000317 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0xdc, 0xfe, 0xff, 0xff, //0x0000031c vmovdqu $-292(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0xf4, 0xfe, 0xff, 0xff, //0x00000324 vmovdqu $-268(%rip), %ymm13 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0x0c, 0xff, 0xff, 0xff, //0x0000032c vmovdqu $-244(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0xa4, 0xfe, 0xff, 0xff, //0x00000334 vmovdqu $-348(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x5c, 0xff, 0xff, 0xff, //0x0000033c vmovdqu $-164(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x74, 0xfe, 0xff, 0xff, //0x00000344 vmovdqu $-396(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0xec, 0xfd, 0xff, 0xff, //0x0000034c vmovdqu $-532(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x04, 0xfe, 0xff, 0xff, //0x00000354 vmovdqu $-508(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + 0x48, 0x89, 0x74, 0x24, 0x08, //0x0000035c movq %rsi, $8(%rsp) + 0x48, 0x89, 0x0c, 0x24, //0x00000361 movq %rcx, (%rsp) + 0xe9, 0x96, 0x00, 0x00, 0x00, //0x00000365 jmp LBB0_5 + //0x0000036a LBB0_235 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000036a movl $64, %edx + 0x4c, 0x8b, 0x1c, 0x24, //0x0000036f movq (%rsp), %r11 + 0x48, 0x39, 0xca, //0x00000373 cmpq %rcx, %rdx + 0x0f, 0x82, 0x0a, 0x3b, 0x00, 0x00, //0x00000376 jb LBB0_162 + //0x0000037c LBB0_236 + 0x48, 0x01, 0xc8, //0x0000037c addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000037f addq $1, %rax + 0x48, 0x85, 0xc0, //0x00000383 testq %rax, %rax + 0x0f, 0x88, 0x35, 0x39, 0x00, 0x00, //0x00000386 js LBB0_702 + //0x0000038c LBB0_237 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000038c movq $8(%rsp), %r15 + 0x49, 0x89, 0x07, //0x00000391 movq %rax, (%r15) + 0x4d, 0x85, 0xc9, //0x00000394 testq %r9, %r9 + 0x0f, 0x8e, 0x3d, 0x39, 0x00, 0x00, //0x00000397 jle LBB0_475 + 0x90, 0x90, 0x90, //0x0000039d .p2align 4, 0x90 //0x000003a0 LBB0_3 - 0x4d, 0x8b, 0x07, //0x000003a0 movq (%r15), %r8 - 0x4c, 0x89, 0x24, 0x24, //0x000003a3 movq %r12, (%rsp) - 0x4d, 0x85, 0xc0, //0x000003a7 testq %r8, %r8 - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000003aa jne LBB0_5 - 0xe9, 0xe0, 0x37, 0x00, 0x00, //0x000003b0 jmp LBB0_711 - //0x000003b5 LBB0_1 - 0x48, 0x89, 0xd1, //0x000003b5 movq %rdx, %rcx - //0x000003b8 LBB0_2 - 0x4c, 0x01, 0xe9, //0x000003b8 addq %r13, %rcx - 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x000003bb movq $48(%rsp), %r13 - 0x49, 0x89, 0x4d, 0x00, //0x000003c0 movq %rcx, (%r13) - 0x48, 0x85, 0xdb, //0x000003c4 testq %rbx, %rbx - 0x0f, 0x8f, 0xd3, 0xff, 0xff, 0xff, //0x000003c7 jg LBB0_3 - 0xe9, 0xc3, 0x37, 0x00, 0x00, //0x000003cd jmp LBB0_711 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000003d2 .p2align 4, 0x90 - //0x000003e0 LBB0_5 - 0x4d, 0x89, 0xe1, //0x000003e0 movq %r12, %r9 - 0x4c, 0x8b, 0x37, //0x000003e3 movq (%rdi), %r14 - 0x48, 0x8b, 0x5f, 0x08, //0x000003e6 movq $8(%rdi), %rbx - 0x49, 0x8b, 0x75, 0x00, //0x000003ea movq (%r13), %rsi - 0x48, 0x39, 0xde, //0x000003ee cmpq %rbx, %rsi - 0x0f, 0x83, 0x29, 0x00, 0x00, 0x00, //0x000003f1 jae LBB0_10 - 0x41, 0x8a, 0x04, 0x36, //0x000003f7 movb (%r14,%rsi), %al - 0x3c, 0x0d, //0x000003fb cmpb $13, %al - 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x000003fd je LBB0_10 - 0x3c, 0x20, //0x00000403 cmpb $32, %al - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000405 je LBB0_10 - 0x04, 0xf7, //0x0000040b addb $-9, %al - 0x3c, 0x01, //0x0000040d cmpb $1, %al - 0x0f, 0x86, 0x0b, 0x00, 0x00, 0x00, //0x0000040f jbe LBB0_10 - 0x49, 0x89, 0xf4, //0x00000415 movq %rsi, %r12 - 0xe9, 0x75, 0x01, 0x00, 0x00, //0x00000418 jmp LBB0_35 - 0x90, 0x90, 0x90, //0x0000041d .p2align 4, 0x90 - //0x00000420 LBB0_10 - 0x4c, 0x8d, 0x66, 0x01, //0x00000420 leaq $1(%rsi), %r12 - 0x49, 0x39, 0xdc, //0x00000424 cmpq %rbx, %r12 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000427 jae LBB0_14 - 0x43, 0x8a, 0x14, 0x26, //0x0000042d movb (%r14,%r12), %dl - 0x80, 0xfa, 0x0d, //0x00000431 cmpb $13, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000434 je LBB0_14 - 0x80, 0xfa, 0x20, //0x0000043a cmpb $32, %dl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000043d je LBB0_14 - 0x80, 0xc2, 0xf7, //0x00000443 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x00000446 cmpb $1, %dl - 0x0f, 0x87, 0x43, 0x01, 0x00, 0x00, //0x00000449 ja LBB0_35 - 0x90, //0x0000044f .p2align 4, 0x90 - //0x00000450 LBB0_14 - 0x4c, 0x8d, 0x66, 0x02, //0x00000450 leaq $2(%rsi), %r12 - 0x49, 0x39, 0xdc, //0x00000454 cmpq %rbx, %r12 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000457 jae LBB0_18 - 0x43, 0x8a, 0x14, 0x26, //0x0000045d movb (%r14,%r12), %dl - 0x80, 0xfa, 0x0d, //0x00000461 cmpb $13, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000464 je LBB0_18 - 0x80, 0xfa, 0x20, //0x0000046a cmpb $32, %dl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000046d je LBB0_18 - 0x80, 0xc2, 0xf7, //0x00000473 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x00000476 cmpb $1, %dl - 0x0f, 0x87, 0x13, 0x01, 0x00, 0x00, //0x00000479 ja LBB0_35 - 0x90, //0x0000047f .p2align 4, 0x90 - //0x00000480 LBB0_18 - 0x4c, 0x8d, 0x66, 0x03, //0x00000480 leaq $3(%rsi), %r12 - 0x49, 0x39, 0xdc, //0x00000484 cmpq %rbx, %r12 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000487 jae LBB0_22 - 0x43, 0x8a, 0x14, 0x26, //0x0000048d movb (%r14,%r12), %dl - 0x80, 0xfa, 0x0d, //0x00000491 cmpb $13, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000494 je LBB0_22 - 0x80, 0xfa, 0x20, //0x0000049a cmpb $32, %dl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000049d je LBB0_22 - 0x80, 0xc2, 0xf7, //0x000004a3 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x000004a6 cmpb $1, %dl - 0x0f, 0x87, 0xe3, 0x00, 0x00, 0x00, //0x000004a9 ja LBB0_35 - 0x90, //0x000004af .p2align 4, 0x90 - //0x000004b0 LBB0_22 - 0x4c, 0x8d, 0x66, 0x04, //0x000004b0 leaq $4(%rsi), %r12 - 0x48, 0x89, 0xd8, //0x000004b4 movq %rbx, %rax - 0x4c, 0x29, 0xe0, //0x000004b7 subq %r12, %rax - 0x0f, 0x86, 0x4e, 0x36, 0x00, 0x00, //0x000004ba jbe LBB0_675 - 0x48, 0x83, 0xf8, 0x20, //0x000004c0 cmpq $32, %rax - 0x0f, 0x82, 0x69, 0x23, 0x00, 0x00, //0x000004c4 jb LBB0_488 - 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x000004ca movq $-4, %rax - 0x48, 0x29, 0xf0, //0x000004d1 subq %rsi, %rax - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000004d4 .p2align 4, 0x90 - //0x000004e0 LBB0_25 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x26, //0x000004e0 vmovdqu (%r14,%r12), %ymm0 - 0xc4, 0xe2, 0x55, 0x00, 0xc8, //0x000004e6 vpshufb %ymm0, %ymm5, %ymm1 - 0xc5, 0xfd, 0x74, 0xc1, //0x000004eb vpcmpeqb %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x000004ef vpmovmskb %ymm0, %edx - 0x83, 0xfa, 0xff, //0x000004f3 cmpl $-1, %edx - 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x000004f6 jne LBB0_34 - 0x49, 0x83, 0xc4, 0x20, //0x000004fc addq $32, %r12 - 0x48, 0x8d, 0x14, 0x03, //0x00000500 leaq (%rbx,%rax), %rdx - 0x48, 0x83, 0xc2, 0xe0, //0x00000504 addq $-32, %rdx - 0x48, 0x83, 0xc0, 0xe0, //0x00000508 addq $-32, %rax - 0x48, 0x83, 0xfa, 0x1f, //0x0000050c cmpq $31, %rdx - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00000510 ja LBB0_25 - 0x4d, 0x89, 0xf4, //0x00000516 movq %r14, %r12 - 0x49, 0x29, 0xc4, //0x00000519 subq %rax, %r12 - 0x48, 0x01, 0xd8, //0x0000051c addq %rbx, %rax - 0x48, 0x85, 0xc0, //0x0000051f testq %rax, %rax - 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00000522 je LBB0_33 - //0x00000528 LBB0_28 - 0x4d, 0x8d, 0x04, 0x04, //0x00000528 leaq (%r12,%rax), %r8 - 0x31, 0xd2, //0x0000052c xorl %edx, %edx - 0x90, 0x90, //0x0000052e .p2align 4, 0x90 - //0x00000530 LBB0_29 - 0x41, 0x0f, 0xbe, 0x34, 0x14, //0x00000530 movsbl (%r12,%rdx), %esi - 0x83, 0xfe, 0x20, //0x00000535 cmpl $32, %esi - 0x0f, 0x87, 0x78, 0x1f, 0x00, 0x00, //0x00000538 ja LBB0_676 - 0x48, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000053e movabsq $4294977024, %rcx - 0x48, 0x0f, 0xa3, 0xf1, //0x00000548 btq %rsi, %rcx - 0x0f, 0x83, 0x64, 0x1f, 0x00, 0x00, //0x0000054c jae LBB0_676 - 0x48, 0x83, 0xc2, 0x01, //0x00000552 addq $1, %rdx - 0x48, 0x39, 0xd0, //0x00000556 cmpq %rdx, %rax - 0x0f, 0x85, 0xd1, 0xff, 0xff, 0xff, //0x00000559 jne LBB0_29 - 0x4d, 0x89, 0xc4, //0x0000055f movq %r8, %r12 - //0x00000562 LBB0_33 - 0x4d, 0x29, 0xf4, //0x00000562 subq %r14, %r12 - 0x49, 0x39, 0xdc, //0x00000565 cmpq %rbx, %r12 - 0x0f, 0x82, 0x24, 0x00, 0x00, 0x00, //0x00000568 jb LBB0_35 - 0xe9, 0x9f, 0x35, 0x00, 0x00, //0x0000056e jmp LBB0_677 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000573 .p2align 4, 0x90 - //0x00000580 LBB0_34 - 0xf7, 0xd2, //0x00000580 notl %edx - 0x44, 0x0f, 0xbc, 0xe2, //0x00000582 bsfl %edx, %r12d - 0x49, 0x29, 0xc4, //0x00000586 subq %rax, %r12 - 0x49, 0x39, 0xdc, //0x00000589 cmpq %rbx, %r12 - 0x0f, 0x83, 0x80, 0x35, 0x00, 0x00, //0x0000058c jae LBB0_677 - //0x00000592 LBB0_35 - 0x49, 0x8d, 0x54, 0x24, 0x01, //0x00000592 leaq $1(%r12), %rdx - 0x49, 0x89, 0x55, 0x00, //0x00000597 movq %rdx, (%r13) - 0x43, 0x0f, 0xbe, 0x04, 0x26, //0x0000059b movsbl (%r14,%r12), %eax - 0x85, 0xc0, //0x000005a0 testl %eax, %eax - 0x0f, 0x84, 0x6a, 0x35, 0x00, 0x00, //0x000005a2 je LBB0_677 - 0x49, 0x8b, 0x37, //0x000005a8 movq (%r15), %rsi - 0x4c, 0x8d, 0x46, 0xff, //0x000005ab leaq $-1(%rsi), %r8 - 0x41, 0x8b, 0x1c, 0xf7, //0x000005af movl (%r15,%rsi,8), %ebx - 0x49, 0x83, 0xf9, 0xff, //0x000005b3 cmpq $-1, %r9 - 0x4d, 0x0f, 0x45, 0xe1, //0x000005b7 cmovneq %r9, %r12 - 0x83, 0xc3, 0xff, //0x000005bb addl $-1, %ebx - 0x83, 0xfb, 0x05, //0x000005be cmpl $5, %ebx - 0x0f, 0x87, 0x27, 0x00, 0x00, 0x00, //0x000005c1 ja LBB0_41 - 0x48, 0x8d, 0x15, 0x12, 0x38, 0x00, 0x00, //0x000005c7 leaq $14354(%rip), %rdx /* LJTI0_0+0(%rip) */ - 0x48, 0x63, 0x0c, 0x9a, //0x000005ce movslq (%rdx,%rbx,4), %rcx - 0x48, 0x01, 0xd1, //0x000005d2 addq %rdx, %rcx - 0xff, 0xe1, //0x000005d5 jmpq *%rcx - //0x000005d7 LBB0_38 - 0x83, 0xf8, 0x2c, //0x000005d7 cmpl $44, %eax - 0x0f, 0x84, 0x41, 0x06, 0x00, 0x00, //0x000005da je LBB0_126 - 0x83, 0xf8, 0x5d, //0x000005e0 cmpl $93, %eax - 0x0f, 0x84, 0x23, 0x06, 0x00, 0x00, //0x000005e3 je LBB0_40 - 0xe9, 0x9f, 0x35, 0x00, 0x00, //0x000005e9 jmp LBB0_710 - //0x000005ee LBB0_41 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x000005ee movq $-1, (%rsp) - 0x4d, 0x89, 0x07, //0x000005f6 movq %r8, (%r15) - 0x83, 0xf8, 0x7b, //0x000005f9 cmpl $123, %eax - 0x0f, 0x86, 0xaf, 0x01, 0x00, 0x00, //0x000005fc jbe LBB0_67 - 0xe9, 0x86, 0x35, 0x00, 0x00, //0x00000602 jmp LBB0_710 - //0x00000607 LBB0_42 - 0x83, 0xf8, 0x2c, //0x00000607 cmpl $44, %eax - 0x0f, 0x85, 0xf3, 0x05, 0x00, 0x00, //0x0000060a jne LBB0_43 - 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00000610 cmpq $4095, %rsi - 0x0f, 0x8f, 0x02, 0x35, 0x00, 0x00, //0x00000617 jg LBB0_705 - 0x48, 0x8d, 0x4e, 0x01, //0x0000061d leaq $1(%rsi), %rcx - 0x49, 0x89, 0x0f, //0x00000621 movq %rcx, (%r15) - 0x49, 0xc7, 0x44, 0xf7, 0x08, 0x03, 0x00, 0x00, 0x00, //0x00000624 movq $3, $8(%r15,%rsi,8) - 0xe9, 0x6e, 0xfd, 0xff, 0xff, //0x0000062d jmp LBB0_3 - //0x00000632 LBB0_44 - 0x3c, 0x22, //0x00000632 cmpb $34, %al - 0x0f, 0x85, 0x53, 0x35, 0x00, 0x00, //0x00000634 jne LBB0_710 - 0x49, 0xc7, 0x04, 0xf7, 0x04, 0x00, 0x00, 0x00, //0x0000063a movq $4, (%r15,%rsi,8) - 0x41, 0xf6, 0xc3, 0x40, //0x00000642 testb $64, %r11b - 0x0f, 0x85, 0x2f, 0x07, 0x00, 0x00, //0x00000646 jne LBB0_148 - 0x4d, 0x8b, 0x4d, 0x00, //0x0000064c movq (%r13), %r9 - 0x4c, 0x8b, 0x47, 0x08, //0x00000650 movq $8(%rdi), %r8 - 0x4c, 0x89, 0xc3, //0x00000654 movq %r8, %rbx - 0x41, 0xf6, 0xc3, 0x20, //0x00000657 testb $32, %r11b - 0x0f, 0x85, 0xf6, 0x09, 0x00, 0x00, //0x0000065b jne LBB0_190 - 0x4c, 0x29, 0xcb, //0x00000661 subq %r9, %rbx - 0x0f, 0x84, 0xb2, 0x36, 0x00, 0x00, //0x00000664 je LBB0_717 - 0x48, 0x83, 0xfb, 0x40, //0x0000066a cmpq $64, %rbx - 0x0f, 0x82, 0x29, 0x24, 0x00, 0x00, //0x0000066e jb LBB0_504 - 0x4c, 0x89, 0xce, //0x00000674 movq %r9, %rsi - 0x48, 0xf7, 0xd6, //0x00000677 notq %rsi - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x0000067a movq $-1, %r11 - 0x4c, 0x89, 0xc9, //0x00000681 movq %r9, %rcx - 0x45, 0x31, 0xd2, //0x00000684 xorl %r10d, %r10d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000687 .p2align 4, 0x90 - //0x00000690 LBB0_50 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x0e, //0x00000690 vmovdqu (%r14,%rcx), %ymm0 - 0x49, 0x89, 0xcf, //0x00000696 movq %rcx, %r15 - 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x0e, 0x20, //0x00000699 vmovdqu $32(%r14,%rcx), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x000006a0 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x000006a4 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x000006a8 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x000006ac vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xc7, //0x000006b0 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x000006b4 vpmovmskb %ymm0, %edx - 0xc5, 0xf5, 0x74, 0xc7, //0x000006b8 vpcmpeqb %ymm7, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc8, //0x000006bc vpmovmskb %ymm0, %ecx - 0x48, 0xc1, 0xe0, 0x20, //0x000006c0 shlq $32, %rax - 0x48, 0x09, 0xc7, //0x000006c4 orq %rax, %rdi - 0x48, 0xc1, 0xe1, 0x20, //0x000006c7 shlq $32, %rcx - 0x48, 0x09, 0xca, //0x000006cb orq %rcx, %rdx - 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x000006ce jne LBB0_59 - 0x4d, 0x85, 0xd2, //0x000006d4 testq %r10, %r10 - 0x0f, 0x85, 0x3b, 0x00, 0x00, 0x00, //0x000006d7 jne LBB0_61 - 0x45, 0x31, 0xd2, //0x000006dd xorl %r10d, %r10d - 0x48, 0x85, 0xff, //0x000006e0 testq %rdi, %rdi - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x000006e3 jne LBB0_62 - //0x000006e9 LBB0_53 - 0x48, 0x83, 0xc3, 0xc0, //0x000006e9 addq $-64, %rbx - 0x48, 0x83, 0xc6, 0xc0, //0x000006ed addq $-64, %rsi - 0x4c, 0x89, 0xf9, //0x000006f1 movq %r15, %rcx - 0x48, 0x83, 0xc1, 0x40, //0x000006f4 addq $64, %rcx - 0x48, 0x83, 0xfb, 0x3f, //0x000006f8 cmpq $63, %rbx - 0x0f, 0x87, 0x8e, 0xff, 0xff, 0xff, //0x000006fc ja LBB0_50 - 0xe9, 0x42, 0x20, 0x00, 0x00, //0x00000702 jmp LBB0_54 - //0x00000707 LBB0_59 - 0x49, 0x83, 0xfb, 0xff, //0x00000707 cmpq $-1, %r11 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x0000070b jne LBB0_61 - 0x4c, 0x0f, 0xbc, 0xda, //0x00000711 bsfq %rdx, %r11 - 0x4d, 0x01, 0xfb, //0x00000715 addq %r15, %r11 - //0x00000718 LBB0_61 - 0x4c, 0x89, 0xd0, //0x00000718 movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x0000071b notq %rax - 0x48, 0x21, 0xd0, //0x0000071e andq %rdx, %rax - 0x48, 0x8d, 0x0c, 0x00, //0x00000721 leaq (%rax,%rax), %rcx - 0x4c, 0x09, 0xd1, //0x00000725 orq %r10, %rcx - 0x48, 0x89, 0x0c, 0x24, //0x00000728 movq %rcx, (%rsp) - 0x48, 0xf7, 0xd1, //0x0000072c notq %rcx - 0x48, 0x21, 0xd1, //0x0000072f andq %rdx, %rcx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000732 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd1, //0x0000073c andq %rdx, %rcx - 0x45, 0x31, 0xd2, //0x0000073f xorl %r10d, %r10d - 0x48, 0x01, 0xc1, //0x00000742 addq %rax, %rcx - 0x41, 0x0f, 0x92, 0xc2, //0x00000745 setb %r10b - 0x48, 0x01, 0xc9, //0x00000749 addq %rcx, %rcx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000074c movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc1, //0x00000756 xorq %rax, %rcx - 0x48, 0x23, 0x0c, 0x24, //0x00000759 andq (%rsp), %rcx - 0x48, 0xf7, 0xd1, //0x0000075d notq %rcx - 0x48, 0x21, 0xcf, //0x00000760 andq %rcx, %rdi - 0x48, 0x85, 0xff, //0x00000763 testq %rdi, %rdi - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000766 je LBB0_53 - //0x0000076c LBB0_62 - 0x4c, 0x0f, 0xbc, 0xd7, //0x0000076c bsfq %rdi, %r10 - 0x49, 0x29, 0xf2, //0x00000770 subq %rsi, %r10 - 0x4d, 0x89, 0xdf, //0x00000773 movq %r11, %r15 - 0xe9, 0xa5, 0x0b, 0x00, 0x00, //0x00000776 jmp LBB0_232 - //0x0000077b LBB0_63 - 0x3c, 0x3a, //0x0000077b cmpb $58, %al - 0x0f, 0x85, 0x0a, 0x34, 0x00, 0x00, //0x0000077d jne LBB0_710 - 0x49, 0xc7, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x00, //0x00000783 movq $0, (%r15,%rsi,8) - 0xe9, 0x10, 0xfc, 0xff, 0xff, //0x0000078b jmp LBB0_3 - //0x00000790 LBB0_65 - 0x3c, 0x5d, //0x00000790 cmpb $93, %al - 0x0f, 0x84, 0x74, 0x04, 0x00, 0x00, //0x00000792 je LBB0_40 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00000798 movq $-1, (%rsp) - 0x49, 0xc7, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x00, //0x000007a0 movq $1, (%r15,%rsi,8) - 0x83, 0xf8, 0x7b, //0x000007a8 cmpl $123, %eax - 0x0f, 0x87, 0xdc, 0x33, 0x00, 0x00, //0x000007ab ja LBB0_710 - //0x000007b1 LBB0_67 - 0x89, 0xc0, //0x000007b1 movl %eax, %eax - 0x48, 0x8d, 0x0d, 0x3e, 0x36, 0x00, 0x00, //0x000007b3 leaq $13886(%rip), %rcx /* LJTI0_1+0(%rip) */ - 0x48, 0x63, 0x04, 0x81, //0x000007ba movslq (%rcx,%rax,4), %rax - 0x48, 0x01, 0xc8, //0x000007be addq %rcx, %rax - 0xff, 0xe0, //0x000007c1 jmpq *%rax - //0x000007c3 LBB0_70 - 0x4c, 0x8b, 0x47, 0x08, //0x000007c3 movq $8(%rdi), %r8 - 0x49, 0x8b, 0x5d, 0x00, //0x000007c7 movq (%r13), %rbx - 0x41, 0xf6, 0xc3, 0x40, //0x000007cb testb $64, %r11b - 0x0f, 0x85, 0x67, 0x06, 0x00, 0x00, //0x000007cf jne LBB0_159 - 0x4c, 0x89, 0x6c, 0x24, 0x30, //0x000007d5 movq %r13, $48(%rsp) - 0x48, 0x8d, 0x53, 0xff, //0x000007da leaq $-1(%rbx), %rdx - 0x49, 0x29, 0xd0, //0x000007de subq %rdx, %r8 - 0x0f, 0x84, 0x78, 0x33, 0x00, 0x00, //0x000007e1 je LBB0_682 - 0x49, 0x8d, 0x04, 0x1e, //0x000007e7 leaq (%r14,%rbx), %rax - 0x48, 0x83, 0xc0, 0xff, //0x000007eb addq $-1, %rax - 0x48, 0x89, 0x44, 0x24, 0x38, //0x000007ef movq %rax, $56(%rsp) - 0x80, 0x38, 0x30, //0x000007f4 cmpb $48, (%rax) - 0x48, 0x89, 0x14, 0x24, //0x000007f7 movq %rdx, (%rsp) - 0x0f, 0x85, 0x3a, 0x00, 0x00, 0x00, //0x000007fb jne LBB0_76 - 0x41, 0xbd, 0x01, 0x00, 0x00, 0x00, //0x00000801 movl $1, %r13d - 0x49, 0x83, 0xf8, 0x01, //0x00000807 cmpq $1, %r8 - 0x0f, 0x84, 0xa4, 0xfb, 0xff, 0xff, //0x0000080b je LBB0_1 - 0x41, 0x8a, 0x0c, 0x1e, //0x00000811 movb (%r14,%rbx), %cl - 0x80, 0xc1, 0xd2, //0x00000815 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x00000818 cmpb $55, %cl - 0x0f, 0x87, 0x94, 0xfb, 0xff, 0xff, //0x0000081b ja LBB0_1 - 0x0f, 0xb6, 0xc1, //0x00000821 movzbl %cl, %eax - 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00000824 movabsq $36028797027352577, %rcx - 0x48, 0x0f, 0xa3, 0xc1, //0x0000082e btq %rax, %rcx - 0x48, 0x89, 0xd1, //0x00000832 movq %rdx, %rcx - 0x0f, 0x83, 0x7d, 0xfb, 0xff, 0xff, //0x00000835 jae LBB0_2 - //0x0000083b LBB0_76 - 0x48, 0x89, 0x5c, 0x24, 0x20, //0x0000083b movq %rbx, $32(%rsp) - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00000840 movq $-1, %r10 - 0x49, 0x83, 0xf8, 0x20, //0x00000847 cmpq $32, %r8 - 0x0f, 0x82, 0x21, 0x22, 0x00, 0x00, //0x0000084b jb LBB0_502 - 0x45, 0x31, 0xed, //0x00000851 xorl %r13d, %r13d - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00000854 movq $-1, %r9 - 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x0000085b movq $-1, $40(%rsp) - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000864 .p2align 4, 0x90 - //0x00000870 LBB0_78 - 0x48, 0x8b, 0x44, 0x24, 0x38, //0x00000870 movq $56(%rsp), %rax - 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x28, //0x00000875 vmovdqu (%rax,%r13), %ymm0 - 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x0000087b vpcmpgtb %ymm10, %ymm0, %ymm1 - 0xc5, 0x95, 0x64, 0xd0, //0x00000880 vpcmpgtb %ymm0, %ymm13, %ymm2 - 0xc5, 0xed, 0xdb, 0xc9, //0x00000884 vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0x85, 0x74, 0xd0, //0x00000888 vpcmpeqb %ymm0, %ymm15, %ymm2 - 0xc5, 0xfd, 0x74, 0x1d, 0xcc, 0xf9, 0xff, 0xff, //0x0000088c vpcmpeqb $-1588(%rip), %ymm0, %ymm3 /* LCPI0_17+0(%rip) */ - 0xc5, 0xe5, 0xeb, 0xd2, //0x00000894 vpor %ymm2, %ymm3, %ymm2 - 0xc5, 0x8d, 0xdb, 0xd8, //0x00000898 vpand %ymm0, %ymm14, %ymm3 - 0xc5, 0xfd, 0x74, 0x05, 0xdc, 0xf9, 0xff, 0xff, //0x0000089c vpcmpeqb $-1572(%rip), %ymm0, %ymm0 /* LCPI0_18+0(%rip) */ - 0xc5, 0xfd, 0xd7, 0xd0, //0x000008a4 vpmovmskb %ymm0, %edx - 0xc5, 0xe5, 0x74, 0xdc, //0x000008a8 vpcmpeqb %ymm4, %ymm3, %ymm3 - 0xc5, 0xfd, 0xd7, 0xf3, //0x000008ac vpmovmskb %ymm3, %esi - 0xc5, 0x7d, 0xd7, 0xfa, //0x000008b0 vpmovmskb %ymm2, %r15d - 0xc5, 0xf5, 0xeb, 0xc0, //0x000008b4 vpor %ymm0, %ymm1, %ymm0 - 0xc5, 0xe5, 0xeb, 0xca, //0x000008b8 vpor %ymm2, %ymm3, %ymm1 - 0xc5, 0xfd, 0xeb, 0xc1, //0x000008bc vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x000008c0 vpmovmskb %ymm0, %eax - 0x48, 0xf7, 0xd0, //0x000008c4 notq %rax - 0x48, 0x0f, 0xbc, 0xc8, //0x000008c7 bsfq %rax, %rcx - 0x83, 0xf9, 0x20, //0x000008cb cmpl $32, %ecx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000008ce je LBB0_80 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x000008d4 movl $-1, %eax - 0xd3, 0xe0, //0x000008d9 shll %cl, %eax - 0xf7, 0xd0, //0x000008db notl %eax - 0x21, 0xc2, //0x000008dd andl %eax, %edx - 0x21, 0xc6, //0x000008df andl %eax, %esi - 0x44, 0x21, 0xf8, //0x000008e1 andl %r15d, %eax - 0x41, 0x89, 0xc7, //0x000008e4 movl %eax, %r15d - //0x000008e7 LBB0_80 - 0x8d, 0x5a, 0xff, //0x000008e7 leal $-1(%rdx), %ebx - 0x21, 0xd3, //0x000008ea andl %edx, %ebx - 0xc5, 0xfe, 0x6f, 0x1d, 0xcc, 0xf8, 0xff, 0xff, //0x000008ec vmovdqu $-1844(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0x0f, 0x85, 0x4e, 0x1c, 0x00, 0x00, //0x000008f4 jne LBB0_464 - 0x8d, 0x5e, 0xff, //0x000008fa leal $-1(%rsi), %ebx - 0x21, 0xf3, //0x000008fd andl %esi, %ebx - 0x0f, 0x85, 0x43, 0x1c, 0x00, 0x00, //0x000008ff jne LBB0_464 - 0x41, 0x8d, 0x5f, 0xff, //0x00000905 leal $-1(%r15), %ebx - 0x44, 0x21, 0xfb, //0x00000909 andl %r15d, %ebx - 0x0f, 0x85, 0x36, 0x1c, 0x00, 0x00, //0x0000090c jne LBB0_464 - 0x85, 0xd2, //0x00000912 testl %edx, %edx - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00000914 je LBB0_86 - 0x0f, 0xbc, 0xd2, //0x0000091a bsfl %edx, %edx - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000091d cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0xde, 0x1d, 0x00, 0x00, //0x00000923 jne LBB0_483 - 0x4c, 0x01, 0xea, //0x00000929 addq %r13, %rdx - 0x48, 0x89, 0x54, 0x24, 0x28, //0x0000092c movq %rdx, $40(%rsp) - //0x00000931 LBB0_86 - 0x85, 0xf6, //0x00000931 testl %esi, %esi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000933 je LBB0_89 - 0x0f, 0xbc, 0xd6, //0x00000939 bsfl %esi, %edx - 0x49, 0x83, 0xf9, 0xff, //0x0000093c cmpq $-1, %r9 - 0x0f, 0x85, 0xc1, 0x1d, 0x00, 0x00, //0x00000940 jne LBB0_483 - 0x4c, 0x01, 0xea, //0x00000946 addq %r13, %rdx - 0x49, 0x89, 0xd1, //0x00000949 movq %rdx, %r9 - //0x0000094c LBB0_89 - 0x45, 0x85, 0xff, //0x0000094c testl %r15d, %r15d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x0000094f je LBB0_92 - 0x41, 0x0f, 0xbc, 0xd7, //0x00000955 bsfl %r15d, %edx - 0x49, 0x83, 0xfa, 0xff, //0x00000959 cmpq $-1, %r10 - 0x0f, 0x85, 0xa4, 0x1d, 0x00, 0x00, //0x0000095d jne LBB0_483 - 0x4c, 0x01, 0xea, //0x00000963 addq %r13, %rdx - 0x49, 0x89, 0xd2, //0x00000966 movq %rdx, %r10 - //0x00000969 LBB0_92 - 0x83, 0xf9, 0x20, //0x00000969 cmpl $32, %ecx - 0x0f, 0x85, 0x39, 0x08, 0x00, 0x00, //0x0000096c jne LBB0_210 - 0x49, 0x83, 0xc0, 0xe0, //0x00000972 addq $-32, %r8 - 0x49, 0x83, 0xc5, 0x20, //0x00000976 addq $32, %r13 - 0x49, 0x83, 0xf8, 0x1f, //0x0000097a cmpq $31, %r8 - 0x0f, 0x87, 0xec, 0xfe, 0xff, 0xff, //0x0000097e ja LBB0_78 - 0xc5, 0xf8, 0x77, //0x00000984 vzeroupper - 0xc5, 0x7e, 0x6f, 0x35, 0x51, 0xf8, 0xff, 0xff, //0x00000987 vmovdqu $-1967(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0xa9, 0xf8, 0xff, 0xff, //0x0000098f vmovdqu $-1879(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0x81, 0xf8, 0xff, 0xff, //0x00000997 vmovdqu $-1919(%rip), %ymm13 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x15, 0x59, 0xf8, 0xff, 0xff, //0x0000099f vmovdqu $-1959(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0xb1, 0xf7, 0xff, 0xff, //0x000009a7 vmovdqu $-2127(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0x89, 0xf7, 0xff, 0xff, //0x000009af vmovdqu $-2167(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000009b7 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x05, 0x5c, 0xf7, 0xff, 0xff, //0x000009bc vmovdqu $-2212(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x34, 0xf7, 0xff, 0xff, //0x000009c4 vmovdqu $-2252(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x0c, 0xf7, 0xff, 0xff, //0x000009cc vmovdqu $-2292(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x2d, 0xe4, 0xf6, 0xff, 0xff, //0x000009d4 vmovdqu $-2332(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0x4c, 0x03, 0x6c, 0x24, 0x38, //0x000009dc addq $56(%rsp), %r13 - 0x49, 0x83, 0xf8, 0x10, //0x000009e1 cmpq $16, %r8 - 0x0f, 0x82, 0x57, 0x01, 0x00, 0x00, //0x000009e5 jb LBB0_113 - //0x000009eb LBB0_95 - 0x4c, 0x89, 0xef, //0x000009eb movq %r13, %rdi - 0x48, 0x2b, 0x7c, 0x24, 0x20, //0x000009ee subq $32(%rsp), %rdi - 0x4c, 0x29, 0xf7, //0x000009f3 subq %r14, %rdi - 0x48, 0x83, 0xc7, 0x01, //0x000009f6 addq $1, %rdi - 0x45, 0x31, 0xff, //0x000009fa xorl %r15d, %r15d - 0x90, 0x90, 0x90, //0x000009fd .p2align 4, 0x90 - //0x00000a00 LBB0_96 - 0xc4, 0x81, 0x7a, 0x6f, 0x44, 0x3d, 0x00, //0x00000a00 vmovdqu (%r13,%r15), %xmm0 - 0xc5, 0xf9, 0x64, 0x0d, 0x31, 0xf6, 0xff, 0xff, //0x00000a07 vpcmpgtb $-2511(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ - 0xc5, 0xfa, 0x6f, 0x15, 0x39, 0xf6, 0xff, 0xff, //0x00000a0f vmovdqu $-2503(%rip), %xmm2 /* LCPI0_21+0(%rip) */ - 0xc5, 0xe9, 0x64, 0xd0, //0x00000a17 vpcmpgtb %xmm0, %xmm2, %xmm2 - 0xc5, 0xf1, 0xdb, 0xca, //0x00000a1b vpand %xmm2, %xmm1, %xmm1 - 0xc5, 0xf9, 0x74, 0x15, 0x39, 0xf6, 0xff, 0xff, //0x00000a1f vpcmpeqb $-2503(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x1d, 0x41, 0xf6, 0xff, 0xff, //0x00000a27 vpcmpeqb $-2495(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xd2, //0x00000a2f vpor %xmm2, %xmm3, %xmm2 - 0xc5, 0xf9, 0xdb, 0x1d, 0xe5, 0xf5, 0xff, 0xff, //0x00000a33 vpand $-2587(%rip), %xmm0, %xmm3 /* LCPI0_12+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0x3d, 0xf6, 0xff, 0xff, //0x00000a3b vpcmpeqb $-2499(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ - 0xc5, 0xe1, 0x74, 0x1d, 0x45, 0xf6, 0xff, 0xff, //0x00000a43 vpcmpeqb $-2491(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xe0, //0x00000a4b vpor %xmm0, %xmm3, %xmm4 - 0xc5, 0xe9, 0xeb, 0xc9, //0x00000a4f vpor %xmm1, %xmm2, %xmm1 - 0xc5, 0xd9, 0xeb, 0xc9, //0x00000a53 vpor %xmm1, %xmm4, %xmm1 - 0xc5, 0xf9, 0xd7, 0xd0, //0x00000a57 vpmovmskb %xmm0, %edx - 0xc5, 0x79, 0xd7, 0xdb, //0x00000a5b vpmovmskb %xmm3, %r11d - 0xc5, 0xf9, 0xd7, 0xf2, //0x00000a5f vpmovmskb %xmm2, %esi - 0xc5, 0xf9, 0xd7, 0xc1, //0x00000a63 vpmovmskb %xmm1, %eax - 0xf7, 0xd0, //0x00000a67 notl %eax - 0x0f, 0xbc, 0xc8, //0x00000a69 bsfl %eax, %ecx - 0x83, 0xf9, 0x10, //0x00000a6c cmpl $16, %ecx - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00000a6f je LBB0_98 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00000a75 movl $-1, %eax - 0xd3, 0xe0, //0x00000a7a shll %cl, %eax - 0xf7, 0xd0, //0x00000a7c notl %eax - 0x21, 0xc2, //0x00000a7e andl %eax, %edx - 0x41, 0x21, 0xc3, //0x00000a80 andl %eax, %r11d - 0x21, 0xf0, //0x00000a83 andl %esi, %eax - 0x89, 0xc6, //0x00000a85 movl %eax, %esi - //0x00000a87 LBB0_98 - 0xc5, 0xfe, 0x6f, 0x25, 0x11, 0xf8, 0xff, 0xff, //0x00000a87 vmovdqu $-2031(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x29, 0xf7, 0xff, 0xff, //0x00000a8f vmovdqu $-2263(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0x8d, 0x5a, 0xff, //0x00000a97 leal $-1(%rdx), %ebx - 0x21, 0xd3, //0x00000a9a andl %edx, %ebx - 0x0f, 0x85, 0x62, 0x1d, 0x00, 0x00, //0x00000a9c jne LBB0_486 - 0x41, 0x8d, 0x5b, 0xff, //0x00000aa2 leal $-1(%r11), %ebx - 0x44, 0x21, 0xdb, //0x00000aa6 andl %r11d, %ebx - 0x0f, 0x85, 0x55, 0x1d, 0x00, 0x00, //0x00000aa9 jne LBB0_486 - 0x8d, 0x5e, 0xff, //0x00000aaf leal $-1(%rsi), %ebx - 0x21, 0xf3, //0x00000ab2 andl %esi, %ebx - 0x0f, 0x85, 0x4a, 0x1d, 0x00, 0x00, //0x00000ab4 jne LBB0_486 - 0x85, 0xd2, //0x00000aba testl %edx, %edx - 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00000abc je LBB0_104 - 0x0f, 0xbc, 0xd2, //0x00000ac2 bsfl %edx, %edx - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x00000ac5 cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0x73, 0x1d, 0x00, 0x00, //0x00000acb jne LBB0_489 - 0x48, 0x01, 0xfa, //0x00000ad1 addq %rdi, %rdx - 0x4c, 0x01, 0xfa, //0x00000ad4 addq %r15, %rdx - 0x48, 0x89, 0x54, 0x24, 0x28, //0x00000ad7 movq %rdx, $40(%rsp) - //0x00000adc LBB0_104 - 0x45, 0x85, 0xdb, //0x00000adc testl %r11d, %r11d - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00000adf je LBB0_107 - 0x41, 0x0f, 0xbc, 0xd3, //0x00000ae5 bsfl %r11d, %edx - 0x49, 0x83, 0xf9, 0xff, //0x00000ae9 cmpq $-1, %r9 - 0x0f, 0x85, 0x51, 0x1d, 0x00, 0x00, //0x00000aed jne LBB0_489 - 0x48, 0x01, 0xfa, //0x00000af3 addq %rdi, %rdx - 0x4c, 0x01, 0xfa, //0x00000af6 addq %r15, %rdx - 0x49, 0x89, 0xd1, //0x00000af9 movq %rdx, %r9 - //0x00000afc LBB0_107 - 0x85, 0xf6, //0x00000afc testl %esi, %esi - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000afe je LBB0_110 - 0x0f, 0xbc, 0xd6, //0x00000b04 bsfl %esi, %edx - 0x49, 0x83, 0xfa, 0xff, //0x00000b07 cmpq $-1, %r10 - 0x0f, 0x85, 0x33, 0x1d, 0x00, 0x00, //0x00000b0b jne LBB0_489 - 0x48, 0x01, 0xfa, //0x00000b11 addq %rdi, %rdx - 0x4c, 0x01, 0xfa, //0x00000b14 addq %r15, %rdx - 0x49, 0x89, 0xd2, //0x00000b17 movq %rdx, %r10 - //0x00000b1a LBB0_110 - 0x83, 0xf9, 0x10, //0x00000b1a cmpl $16, %ecx - 0x0f, 0x85, 0xbe, 0x0a, 0x00, 0x00, //0x00000b1d jne LBB0_277 - 0x49, 0x83, 0xc0, 0xf0, //0x00000b23 addq $-16, %r8 - 0x49, 0x83, 0xc7, 0x10, //0x00000b27 addq $16, %r15 - 0x49, 0x83, 0xf8, 0x0f, //0x00000b2b cmpq $15, %r8 - 0x0f, 0x87, 0xcb, 0xfe, 0xff, 0xff, //0x00000b2f ja LBB0_96 - 0x4d, 0x01, 0xfd, //0x00000b35 addq %r15, %r13 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00000b38 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00000b3d movq $16(%rsp), %rdi - //0x00000b42 LBB0_113 - 0x4d, 0x85, 0xc0, //0x00000b42 testq %r8, %r8 - 0xc5, 0xfe, 0x6f, 0x25, 0x53, 0xf7, 0xff, 0xff, //0x00000b45 vmovdqu $-2221(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x0f, 0x84, 0xa8, 0x0a, 0x00, 0x00, //0x00000b4d je LBB0_279 - 0x4f, 0x8d, 0x3c, 0x28, //0x00000b53 leaq (%r8,%r13), %r15 - 0x4c, 0x89, 0xee, //0x00000b57 movq %r13, %rsi - 0x48, 0x2b, 0x74, 0x24, 0x20, //0x00000b5a subq $32(%rsp), %rsi - 0x4c, 0x29, 0xf6, //0x00000b5f subq %r14, %rsi - 0x48, 0x83, 0xc6, 0x01, //0x00000b62 addq $1, %rsi - 0x31, 0xc9, //0x00000b66 xorl %ecx, %ecx - 0xc5, 0xfe, 0x6f, 0x1d, 0x50, 0xf6, 0xff, 0xff, //0x00000b68 vmovdqu $-2480(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xe9, 0x28, 0x00, 0x00, 0x00, //0x00000b70 jmp LBB0_118 - //0x00000b75 LBB0_115 - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x00000b75 cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0x8f, 0x1c, 0x00, 0x00, //0x00000b7b jne LBB0_487 - 0x48, 0x8d, 0x04, 0x0e, //0x00000b81 leaq (%rsi,%rcx), %rax - 0x48, 0x89, 0x44, 0x24, 0x28, //0x00000b85 movq %rax, $40(%rsp) - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000b8a .p2align 4, 0x90 - //0x00000b90 LBB0_117 - 0x48, 0x83, 0xc1, 0x01, //0x00000b90 addq $1, %rcx - 0x49, 0x39, 0xc8, //0x00000b94 cmpq %rcx, %r8 - 0x0f, 0x84, 0x2d, 0x19, 0x00, 0x00, //0x00000b97 je LBB0_457 - //0x00000b9d LBB0_118 - 0x41, 0x0f, 0xbe, 0x54, 0x0d, 0x00, //0x00000b9d movsbl (%r13,%rcx), %edx - 0x8d, 0x42, 0xd0, //0x00000ba3 leal $-48(%rdx), %eax - 0x83, 0xf8, 0x0a, //0x00000ba6 cmpl $10, %eax - 0x0f, 0x82, 0xe1, 0xff, 0xff, 0xff, //0x00000ba9 jb LBB0_117 - 0x8d, 0x5a, 0xd5, //0x00000baf leal $-43(%rdx), %ebx - 0x83, 0xfb, 0x1a, //0x00000bb2 cmpl $26, %ebx - 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00000bb5 ja LBB0_123 - 0x48, 0x8d, 0x15, 0x92, 0x34, 0x00, 0x00, //0x00000bbb leaq $13458(%rip), %rdx /* LJTI0_3+0(%rip) */ - 0x48, 0x63, 0x04, 0x9a, //0x00000bc2 movslq (%rdx,%rbx,4), %rax - 0x48, 0x01, 0xd0, //0x00000bc6 addq %rdx, %rax - 0xff, 0xe0, //0x00000bc9 jmpq *%rax - //0x00000bcb LBB0_121 - 0x49, 0x83, 0xfa, 0xff, //0x00000bcb cmpq $-1, %r10 - 0x0f, 0x85, 0x3b, 0x1c, 0x00, 0x00, //0x00000bcf jne LBB0_487 - 0x4c, 0x8d, 0x14, 0x0e, //0x00000bd5 leaq (%rsi,%rcx), %r10 - 0xe9, 0xb2, 0xff, 0xff, 0xff, //0x00000bd9 jmp LBB0_117 - //0x00000bde LBB0_123 - 0x83, 0xfa, 0x65, //0x00000bde cmpl $101, %edx - 0x0f, 0x85, 0x11, 0x0a, 0x00, 0x00, //0x00000be1 jne LBB0_278 - //0x00000be7 LBB0_124 - 0x49, 0x83, 0xf9, 0xff, //0x00000be7 cmpq $-1, %r9 - 0x0f, 0x85, 0x1f, 0x1c, 0x00, 0x00, //0x00000beb jne LBB0_487 - 0x4c, 0x8d, 0x0c, 0x0e, //0x00000bf1 leaq (%rsi,%rcx), %r9 - 0xe9, 0x96, 0xff, 0xff, 0xff, //0x00000bf5 jmp LBB0_117 - //0x00000bfa LBB0_68 - 0x83, 0xf8, 0x22, //0x00000bfa cmpl $34, %eax - 0x0f, 0x84, 0x40, 0x00, 0x00, 0x00, //0x00000bfd je LBB0_130 - //0x00000c03 LBB0_43 - 0x83, 0xf8, 0x7d, //0x00000c03 cmpl $125, %eax - 0x0f, 0x85, 0x81, 0x2f, 0x00, 0x00, //0x00000c06 jne LBB0_710 - //0x00000c0c LBB0_40 - 0x4d, 0x89, 0x07, //0x00000c0c movq %r8, (%r15) - 0x4c, 0x89, 0x24, 0x24, //0x00000c0f movq %r12, (%rsp) - 0x4d, 0x85, 0xc0, //0x00000c13 testq %r8, %r8 - 0x0f, 0x85, 0xc4, 0xf7, 0xff, 0xff, //0x00000c16 jne LBB0_5 - 0xe9, 0x74, 0x2f, 0x00, 0x00, //0x00000c1c jmp LBB0_711 - //0x00000c21 LBB0_126 - 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00000c21 cmpq $4095, %rsi - 0x0f, 0x8f, 0xf1, 0x2e, 0x00, 0x00, //0x00000c28 jg LBB0_705 - 0x48, 0x8d, 0x4e, 0x01, //0x00000c2e leaq $1(%rsi), %rcx - 0x49, 0x89, 0x0f, //0x00000c32 movq %rcx, (%r15) - 0x49, 0xc7, 0x44, 0xf7, 0x08, 0x00, 0x00, 0x00, 0x00, //0x00000c35 movq $0, $8(%r15,%rsi,8) - 0xe9, 0x5d, 0xf7, 0xff, 0xff, //0x00000c3e jmp LBB0_3 - //0x00000c43 LBB0_130 - 0x49, 0xc7, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x00, //0x00000c43 movq $2, (%r15,%rsi,8) - 0x41, 0xf6, 0xc3, 0x40, //0x00000c4b testb $64, %r11b - 0x0f, 0x85, 0x17, 0x03, 0x00, 0x00, //0x00000c4f jne LBB0_179 - 0x4d, 0x8b, 0x4d, 0x00, //0x00000c55 movq (%r13), %r9 - 0x4c, 0x8b, 0x47, 0x08, //0x00000c59 movq $8(%rdi), %r8 - 0x4c, 0x89, 0xc1, //0x00000c5d movq %r8, %rcx - 0x41, 0xf6, 0xc3, 0x20, //0x00000c60 testb $32, %r11b - 0x0f, 0x85, 0x54, 0x05, 0x00, 0x00, //0x00000c64 jne LBB0_211 - 0x4c, 0x29, 0xc9, //0x00000c6a subq %r9, %rcx - 0x0f, 0x84, 0xa9, 0x30, 0x00, 0x00, //0x00000c6d je LBB0_717 - 0x48, 0x83, 0xf9, 0x40, //0x00000c73 cmpq $64, %rcx - 0x0f, 0x82, 0xc8, 0x1e, 0x00, 0x00, //0x00000c77 jb LBB0_511 - 0x4c, 0x89, 0xce, //0x00000c7d movq %r9, %rsi - 0x48, 0xf7, 0xd6, //0x00000c80 notq %rsi - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00000c83 movq $-1, %r11 - 0x4c, 0x89, 0xcb, //0x00000c8a movq %r9, %rbx - 0x45, 0x31, 0xd2, //0x00000c8d xorl %r10d, %r10d - //0x00000c90 .p2align 4, 0x90 - //0x00000c90 LBB0_135 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x1e, //0x00000c90 vmovdqu (%r14,%rbx), %ymm0 - 0x49, 0x89, 0xdf, //0x00000c96 movq %rbx, %r15 - 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x1e, 0x20, //0x00000c99 vmovdqu $32(%r14,%rbx), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x00000ca0 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x00000ca4 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x00000ca8 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00000cac vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xc7, //0x00000cb0 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x00000cb4 vpmovmskb %ymm0, %edx - 0xc5, 0xf5, 0x74, 0xc7, //0x00000cb8 vpcmpeqb %ymm7, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x00000cbc vpmovmskb %ymm0, %ebx - 0x48, 0xc1, 0xe0, 0x20, //0x00000cc0 shlq $32, %rax - 0x48, 0x09, 0xc7, //0x00000cc4 orq %rax, %rdi - 0x48, 0xc1, 0xe3, 0x20, //0x00000cc7 shlq $32, %rbx - 0x48, 0x09, 0xda, //0x00000ccb orq %rbx, %rdx - 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x00000cce jne LBB0_144 - 0x4d, 0x85, 0xd2, //0x00000cd4 testq %r10, %r10 - 0x0f, 0x85, 0x3b, 0x00, 0x00, 0x00, //0x00000cd7 jne LBB0_146 - 0x45, 0x31, 0xd2, //0x00000cdd xorl %r10d, %r10d - 0x48, 0x85, 0xff, //0x00000ce0 testq %rdi, %rdi - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x00000ce3 jne LBB0_147 - //0x00000ce9 LBB0_138 - 0x48, 0x83, 0xc1, 0xc0, //0x00000ce9 addq $-64, %rcx - 0x48, 0x83, 0xc6, 0xc0, //0x00000ced addq $-64, %rsi - 0x4c, 0x89, 0xfb, //0x00000cf1 movq %r15, %rbx - 0x48, 0x83, 0xc3, 0x40, //0x00000cf4 addq $64, %rbx - 0x48, 0x83, 0xf9, 0x3f, //0x00000cf8 cmpq $63, %rcx - 0x0f, 0x87, 0x8e, 0xff, 0xff, 0xff, //0x00000cfc ja LBB0_135 - 0xe9, 0x6f, 0x1b, 0x00, 0x00, //0x00000d02 jmp LBB0_139 - //0x00000d07 LBB0_144 - 0x49, 0x83, 0xfb, 0xff, //0x00000d07 cmpq $-1, %r11 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00000d0b jne LBB0_146 - 0x4c, 0x0f, 0xbc, 0xda, //0x00000d11 bsfq %rdx, %r11 - 0x4d, 0x01, 0xfb, //0x00000d15 addq %r15, %r11 - //0x00000d18 LBB0_146 - 0x4c, 0x89, 0xd0, //0x00000d18 movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x00000d1b notq %rax - 0x48, 0x21, 0xd0, //0x00000d1e andq %rdx, %rax - 0x48, 0x8d, 0x1c, 0x00, //0x00000d21 leaq (%rax,%rax), %rbx - 0x4c, 0x09, 0xd3, //0x00000d25 orq %r10, %rbx - 0x48, 0x89, 0x1c, 0x24, //0x00000d28 movq %rbx, (%rsp) - 0x48, 0xf7, 0xd3, //0x00000d2c notq %rbx - 0x48, 0x21, 0xd3, //0x00000d2f andq %rdx, %rbx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000d32 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd3, //0x00000d3c andq %rdx, %rbx - 0x45, 0x31, 0xd2, //0x00000d3f xorl %r10d, %r10d - 0x48, 0x01, 0xc3, //0x00000d42 addq %rax, %rbx - 0x41, 0x0f, 0x92, 0xc2, //0x00000d45 setb %r10b - 0x48, 0x01, 0xdb, //0x00000d49 addq %rbx, %rbx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000d4c movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc3, //0x00000d56 xorq %rax, %rbx - 0x48, 0x23, 0x1c, 0x24, //0x00000d59 andq (%rsp), %rbx - 0x48, 0xf7, 0xd3, //0x00000d5d notq %rbx - 0x48, 0x21, 0xdf, //0x00000d60 andq %rbx, %rdi - 0x48, 0x85, 0xff, //0x00000d63 testq %rdi, %rdi - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000d66 je LBB0_138 - //0x00000d6c LBB0_147 - 0x4c, 0x0f, 0xbc, 0xd7, //0x00000d6c bsfq %rdi, %r10 - 0x49, 0x29, 0xf2, //0x00000d70 subq %rsi, %r10 - 0x4d, 0x89, 0xdf, //0x00000d73 movq %r11, %r15 - 0xe9, 0x11, 0x0a, 0x00, 0x00, //0x00000d76 jmp LBB0_298 - //0x00000d7b LBB0_148 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00000d7b movq $-1, (%rsp) - 0x4c, 0x8b, 0x57, 0x08, //0x00000d83 movq $8(%rdi), %r10 - 0x4d, 0x8b, 0x45, 0x00, //0x00000d87 movq (%r13), %r8 - 0x4f, 0x8d, 0x0c, 0x06, //0x00000d8b leaq (%r14,%r8), %r9 - 0x4d, 0x29, 0xc2, //0x00000d8f subq %r8, %r10 - 0x49, 0x83, 0xfa, 0x20, //0x00000d92 cmpq $32, %r10 - 0x0f, 0x8c, 0x9e, 0x17, 0x00, 0x00, //0x00000d96 jl LBB0_158 - 0xb9, 0x20, 0x00, 0x00, 0x00, //0x00000d9c movl $32, %ecx - 0x31, 0xf6, //0x00000da1 xorl %esi, %esi - 0x45, 0x31, 0xff, //0x00000da3 xorl %r15d, %r15d - 0xe9, 0x59, 0x00, 0x00, 0x00, //0x00000da6 jmp LBB0_150 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000dab .p2align 4, 0x90 - //0x00000db0 LBB0_154 - 0x44, 0x89, 0xfa, //0x00000db0 movl %r15d, %edx - 0xf7, 0xd2, //0x00000db3 notl %edx - 0x21, 0xda, //0x00000db5 andl %ebx, %edx - 0x8d, 0x04, 0x12, //0x00000db7 leal (%rdx,%rdx), %eax - 0x44, 0x09, 0xf8, //0x00000dba orl %r15d, %eax - 0x89, 0xc7, //0x00000dbd movl %eax, %edi - 0xf7, 0xd7, //0x00000dbf notl %edi - 0x21, 0xdf, //0x00000dc1 andl %ebx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000dc3 andl $-1431655766, %edi - 0x45, 0x31, 0xff, //0x00000dc9 xorl %r15d, %r15d - 0x01, 0xd7, //0x00000dcc addl %edx, %edi - 0x41, 0x0f, 0x92, 0xc7, //0x00000dce setb %r15b - 0x01, 0xff, //0x00000dd2 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00000dd4 xorl $1431655765, %edi - 0x21, 0xc7, //0x00000dda andl %eax, %edi - 0xf7, 0xd7, //0x00000ddc notl %edi - 0x41, 0x21, 0xfb, //0x00000dde andl %edi, %r11d - 0x4d, 0x85, 0xdb, //0x00000de1 testq %r11, %r11 - 0x0f, 0x85, 0x7f, 0xf5, 0xff, 0xff, //0x00000de4 jne LBB0_153 - //0x00000dea LBB0_155 - 0x48, 0x83, 0xc6, 0x20, //0x00000dea addq $32, %rsi - 0x49, 0x8d, 0x04, 0x0a, //0x00000dee leaq (%r10,%rcx), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x00000df2 addq $-32, %rax - 0x48, 0x83, 0xc1, 0xe0, //0x00000df6 addq $-32, %rcx - 0x48, 0x83, 0xf8, 0x3f, //0x00000dfa cmpq $63, %rax - 0x0f, 0x8e, 0x18, 0x17, 0x00, 0x00, //0x00000dfe jle LBB0_156 - //0x00000e04 LBB0_150 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00000e04 vmovdqu (%r9,%rsi), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00000e0a vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd9, //0x00000e0e vpmovmskb %ymm1, %r11d - 0xc5, 0xfd, 0x74, 0xc7, //0x00000e12 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x00000e16 vpmovmskb %ymm0, %ebx - 0x85, 0xdb, //0x00000e1a testl %ebx, %ebx - 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x00000e1c jne LBB0_154 - 0x4d, 0x85, 0xff, //0x00000e22 testq %r15, %r15 - 0x0f, 0x85, 0x85, 0xff, 0xff, 0xff, //0x00000e25 jne LBB0_154 - 0x45, 0x31, 0xff, //0x00000e2b xorl %r15d, %r15d - 0x4d, 0x85, 0xdb, //0x00000e2e testq %r11, %r11 - 0x0f, 0x84, 0xb3, 0xff, 0xff, 0xff, //0x00000e31 je LBB0_155 - 0xe9, 0x2d, 0xf5, 0xff, 0xff, //0x00000e37 jmp LBB0_153 - //0x00000e3c LBB0_159 - 0x4c, 0x89, 0xc6, //0x00000e3c movq %r8, %rsi - 0x48, 0x29, 0xde, //0x00000e3f subq %rbx, %rsi - 0x48, 0x83, 0xfe, 0x20, //0x00000e42 cmpq $32, %rsi - 0x0f, 0x82, 0x13, 0x1c, 0x00, 0x00, //0x00000e46 jb LBB0_501 - 0x48, 0x89, 0xda, //0x00000e4c movq %rbx, %rdx - 0x48, 0xf7, 0xda, //0x00000e4f negq %rdx - 0x48, 0x89, 0xd9, //0x00000e52 movq %rbx, %rcx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000e55 .p2align 4, 0x90 - //0x00000e60 LBB0_161 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x0e, //0x00000e60 vmovdqu (%r14,%rcx), %ymm0 - 0xc5, 0xfd, 0x74, 0xcb, //0x00000e66 vpcmpeqb %ymm3, %ymm0, %ymm1 - 0xc5, 0x8d, 0xdb, 0xc0, //0x00000e6a vpand %ymm0, %ymm14, %ymm0 - 0xc5, 0xfd, 0x74, 0x05, 0x2a, 0xf3, 0xff, 0xff, //0x00000e6e vpcmpeqb $-3286(%rip), %ymm0, %ymm0 /* LCPI0_8+0(%rip) */ - 0xc5, 0xfd, 0xeb, 0xc1, //0x00000e76 vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x00000e7a vpmovmskb %ymm0, %esi - 0x85, 0xf6, //0x00000e7e testl %esi, %esi - 0x0f, 0x85, 0xce, 0x00, 0x00, 0x00, //0x00000e80 jne LBB0_175 - 0x48, 0x83, 0xc1, 0x20, //0x00000e86 addq $32, %rcx - 0x49, 0x8d, 0x04, 0x10, //0x00000e8a leaq (%r8,%rdx), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x00000e8e addq $-32, %rax - 0x48, 0x83, 0xc2, 0xe0, //0x00000e92 addq $-32, %rdx - 0x48, 0x83, 0xf8, 0x1f, //0x00000e96 cmpq $31, %rax - 0x0f, 0x87, 0xc0, 0xff, 0xff, 0xff, //0x00000e9a ja LBB0_161 - 0x4c, 0x89, 0xf1, //0x00000ea0 movq %r14, %rcx - 0x48, 0x29, 0xd1, //0x00000ea3 subq %rdx, %rcx - 0x49, 0x01, 0xd0, //0x00000ea6 addq %rdx, %r8 - 0x4c, 0x89, 0xc6, //0x00000ea9 movq %r8, %rsi - 0x48, 0x83, 0xfe, 0x10, //0x00000eac cmpq $16, %rsi - 0x0f, 0x82, 0x48, 0x00, 0x00, 0x00, //0x00000eb0 jb LBB0_167 - //0x00000eb6 LBB0_164 - 0x4c, 0x89, 0xf2, //0x00000eb6 movq %r14, %rdx - 0x48, 0x29, 0xca, //0x00000eb9 subq %rcx, %rdx - //0x00000ebc LBB0_165 - 0xc5, 0xfa, 0x6f, 0x01, //0x00000ebc vmovdqu (%rcx), %xmm0 - 0xc5, 0xf9, 0x74, 0x0d, 0x48, 0xf1, 0xff, 0xff, //0x00000ec0 vpcmpeqb $-3768(%rip), %xmm0, %xmm1 /* LCPI0_11+0(%rip) */ - 0xc5, 0xf9, 0xdb, 0x05, 0x50, 0xf1, 0xff, 0xff, //0x00000ec8 vpand $-3760(%rip), %xmm0, %xmm0 /* LCPI0_12+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0x58, 0xf1, 0xff, 0xff, //0x00000ed0 vpcmpeqb $-3752(%rip), %xmm0, %xmm0 /* LCPI0_13+0(%rip) */ - 0xc5, 0xf9, 0xeb, 0xc1, //0x00000ed8 vpor %xmm1, %xmm0, %xmm0 - 0xc5, 0xf9, 0xd7, 0xc0, //0x00000edc vpmovmskb %xmm0, %eax - 0x85, 0xc0, //0x00000ee0 testl %eax, %eax - 0x0f, 0x85, 0x6c, 0x16, 0x00, 0x00, //0x00000ee2 jne LBB0_465 - 0x48, 0x83, 0xc1, 0x10, //0x00000ee8 addq $16, %rcx - 0x48, 0x83, 0xc6, 0xf0, //0x00000eec addq $-16, %rsi - 0x48, 0x83, 0xc2, 0xf0, //0x00000ef0 addq $-16, %rdx - 0x48, 0x83, 0xfe, 0x0f, //0x00000ef4 cmpq $15, %rsi - 0x0f, 0x87, 0xbe, 0xff, 0xff, 0xff, //0x00000ef8 ja LBB0_165 - //0x00000efe LBB0_167 - 0x48, 0x89, 0xd8, //0x00000efe movq %rbx, %rax - 0xc5, 0x7d, 0x7f, 0xe1, //0x00000f01 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00000f05 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00000f09 vmovdqa %ymm13, %ymm11 - 0x48, 0x85, 0xf6, //0x00000f0e testq %rsi, %rsi - 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00000f11 je LBB0_174 - 0x48, 0x8d, 0x3c, 0x31, //0x00000f17 leaq (%rcx,%rsi), %rdi - 0x31, 0xd2, //0x00000f1b xorl %edx, %edx - //0x00000f1d LBB0_169 - 0x0f, 0xb6, 0x1c, 0x11, //0x00000f1d movzbl (%rcx,%rdx), %ebx - 0x80, 0xfb, 0x2c, //0x00000f21 cmpb $44, %bl - 0x0f, 0x84, 0xb0, 0x1b, 0x00, 0x00, //0x00000f24 je LBB0_507 - 0x80, 0xfb, 0x7d, //0x00000f2a cmpb $125, %bl - 0x0f, 0x84, 0xa7, 0x1b, 0x00, 0x00, //0x00000f2d je LBB0_507 - 0x80, 0xfb, 0x5d, //0x00000f33 cmpb $93, %bl - 0x0f, 0x84, 0x9e, 0x1b, 0x00, 0x00, //0x00000f36 je LBB0_507 - 0x48, 0x83, 0xc2, 0x01, //0x00000f3c addq $1, %rdx - 0x48, 0x39, 0xd6, //0x00000f40 cmpq %rdx, %rsi - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x00000f43 jne LBB0_169 - 0x48, 0x89, 0xf9, //0x00000f49 movq %rdi, %rcx - //0x00000f4c LBB0_174 - 0x4c, 0x29, 0xf1, //0x00000f4c subq %r14, %rcx - 0xe9, 0x8c, 0x1b, 0x00, 0x00, //0x00000f4f jmp LBB0_508 - //0x00000f54 LBB0_175 - 0x0f, 0xbc, 0xce, //0x00000f54 bsfl %esi, %ecx - //0x00000f57 LBB0_176 - 0x48, 0x29, 0xd1, //0x00000f57 subq %rdx, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x00000f5a movq %rcx, (%r13) - 0x48, 0x85, 0xdb, //0x00000f5e testq %rbx, %rbx - 0x0f, 0x8f, 0x39, 0xf4, 0xff, 0xff, //0x00000f61 jg LBB0_3 - 0xe9, 0xff, 0x2b, 0x00, 0x00, //0x00000f67 jmp LBB0_178 - //0x00000f6c LBB0_179 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00000f6c movq $-1, (%rsp) - 0x4c, 0x8b, 0x57, 0x08, //0x00000f74 movq $8(%rdi), %r10 - 0x4d, 0x8b, 0x45, 0x00, //0x00000f78 movq (%r13), %r8 - 0x4f, 0x8d, 0x0c, 0x06, //0x00000f7c leaq (%r14,%r8), %r9 - 0x4d, 0x29, 0xc2, //0x00000f80 subq %r8, %r10 - 0x49, 0x83, 0xfa, 0x20, //0x00000f83 cmpq $32, %r10 - 0x0f, 0x8c, 0xae, 0x17, 0x00, 0x00, //0x00000f87 jl LBB0_189 - 0xb9, 0x20, 0x00, 0x00, 0x00, //0x00000f8d movl $32, %ecx - 0x31, 0xf6, //0x00000f92 xorl %esi, %esi - 0x45, 0x31, 0xff, //0x00000f94 xorl %r15d, %r15d - 0xe9, 0x58, 0x00, 0x00, 0x00, //0x00000f97 jmp LBB0_181 - 0x90, 0x90, 0x90, 0x90, //0x00000f9c .p2align 4, 0x90 - //0x00000fa0 LBB0_185 - 0x44, 0x89, 0xf8, //0x00000fa0 movl %r15d, %eax - 0xf7, 0xd0, //0x00000fa3 notl %eax - 0x21, 0xd8, //0x00000fa5 andl %ebx, %eax - 0x8d, 0x14, 0x00, //0x00000fa7 leal (%rax,%rax), %edx - 0x44, 0x09, 0xfa, //0x00000faa orl %r15d, %edx - 0x89, 0xd7, //0x00000fad movl %edx, %edi - 0xf7, 0xd7, //0x00000faf notl %edi - 0x21, 0xdf, //0x00000fb1 andl %ebx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000fb3 andl $-1431655766, %edi - 0x45, 0x31, 0xff, //0x00000fb9 xorl %r15d, %r15d - 0x01, 0xc7, //0x00000fbc addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc7, //0x00000fbe setb %r15b - 0x01, 0xff, //0x00000fc2 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00000fc4 xorl $1431655765, %edi - 0x21, 0xd7, //0x00000fca andl %edx, %edi - 0xf7, 0xd7, //0x00000fcc notl %edi - 0x41, 0x21, 0xfb, //0x00000fce andl %edi, %r11d - 0x4d, 0x85, 0xdb, //0x00000fd1 testq %r11, %r11 - 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x00000fd4 jne LBB0_184 - //0x00000fda LBB0_186 - 0x48, 0x83, 0xc6, 0x20, //0x00000fda addq $32, %rsi - 0x49, 0x8d, 0x04, 0x0a, //0x00000fde leaq (%r10,%rcx), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x00000fe2 addq $-32, %rax - 0x48, 0x83, 0xc1, 0xe0, //0x00000fe6 addq $-32, %rcx - 0x48, 0x83, 0xf8, 0x3f, //0x00000fea cmpq $63, %rax - 0x0f, 0x8e, 0x29, 0x17, 0x00, 0x00, //0x00000fee jle LBB0_187 - //0x00000ff4 LBB0_181 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00000ff4 vmovdqu (%r9,%rsi), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00000ffa vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd9, //0x00000ffe vpmovmskb %ymm1, %r11d - 0xc5, 0xfd, 0x74, 0xc7, //0x00001002 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x00001006 vpmovmskb %ymm0, %ebx - 0x85, 0xdb, //0x0000100a testl %ebx, %ebx - 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x0000100c jne LBB0_185 - 0x4d, 0x85, 0xff, //0x00001012 testq %r15, %r15 - 0x0f, 0x85, 0x85, 0xff, 0xff, 0xff, //0x00001015 jne LBB0_185 - 0x45, 0x31, 0xff, //0x0000101b xorl %r15d, %r15d - 0x4d, 0x85, 0xdb, //0x0000101e testq %r11, %r11 - 0x0f, 0x84, 0xb3, 0xff, 0xff, 0xff, //0x00001021 je LBB0_186 - //0x00001027 LBB0_184 - 0x41, 0x0f, 0xbc, 0xc3, //0x00001027 bsfl %r11d, %eax - 0x4c, 0x01, 0xc0, //0x0000102b addq %r8, %rax - 0x4c, 0x8d, 0x0c, 0x06, //0x0000102e leaq (%rsi,%rax), %r9 - 0x49, 0x83, 0xc1, 0x01, //0x00001032 addq $1, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00001036 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x0000103b movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001040 movq $8(%rsp), %r15 - 0x4d, 0x89, 0x4d, 0x00, //0x00001045 movq %r9, (%r13) - 0x4d, 0x85, 0xc0, //0x00001049 testq %r8, %r8 - 0x0f, 0x8f, 0x5f, 0x07, 0x00, 0x00, //0x0000104c jg LBB0_300 - 0xe9, 0xd5, 0x2a, 0x00, 0x00, //0x00001052 jmp LBB0_679 - //0x00001057 LBB0_190 - 0x4c, 0x29, 0xcb, //0x00001057 subq %r9, %rbx - 0x0f, 0x84, 0xbc, 0x2c, 0x00, 0x00, //0x0000105a je LBB0_717 - 0x48, 0x83, 0xfb, 0x40, //0x00001060 cmpq $64, %rbx - 0x0f, 0x82, 0x53, 0x1a, 0x00, 0x00, //0x00001064 jb LBB0_506 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000106a movq $-1, %r15 - 0x4d, 0x89, 0xca, //0x00001071 movq %r9, %r10 - 0x45, 0x31, 0xdb, //0x00001074 xorl %r11d, %r11d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001077 .p2align 4, 0x90 - //0x00001080 LBB0_193 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x16, //0x00001080 vmovdqu (%r14,%r10), %ymm0 - 0xc4, 0x81, 0x7e, 0x6f, 0x4c, 0x16, 0x20, //0x00001086 vmovdqu $32(%r14,%r10), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x0000108d vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x00001091 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x00001095 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001099 vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xd7, //0x0000109d vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x000010a1 vpmovmskb %ymm2, %edx - 0xc5, 0xf5, 0x74, 0xd7, //0x000010a5 vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xca, //0x000010a9 vpmovmskb %ymm2, %ecx - 0xc5, 0xbd, 0x64, 0xd1, //0x000010ad vpcmpgtb %ymm1, %ymm8, %ymm2 - 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x000010b1 vpcmpgtb %ymm9, %ymm1, %ymm1 - 0xc5, 0xed, 0xdb, 0xc9, //0x000010b6 vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x000010ba vpmovmskb %ymm1, %esi - 0x48, 0xc1, 0xe0, 0x20, //0x000010be shlq $32, %rax - 0x48, 0x09, 0xc7, //0x000010c2 orq %rax, %rdi - 0x48, 0xc1, 0xe1, 0x20, //0x000010c5 shlq $32, %rcx - 0x48, 0xc1, 0xe6, 0x20, //0x000010c9 shlq $32, %rsi - 0x48, 0x09, 0xca, //0x000010cd orq %rcx, %rdx - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x000010d0 jne LBB0_204 - 0x4d, 0x85, 0xdb, //0x000010d6 testq %r11, %r11 - 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x000010d9 jne LBB0_206 - 0x45, 0x31, 0xdb, //0x000010df xorl %r11d, %r11d - //0x000010e2 LBB0_196 - 0xc5, 0xbd, 0x64, 0xc8, //0x000010e2 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x000010e6 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x000010eb vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x000010ef vpmovmskb %ymm0, %eax - 0x48, 0x09, 0xc6, //0x000010f3 orq %rax, %rsi - 0x48, 0x85, 0xff, //0x000010f6 testq %rdi, %rdi - 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, //0x000010f9 jne LBB0_207 - 0x48, 0x85, 0xf6, //0x000010ff testq %rsi, %rsi - 0x0f, 0x85, 0xac, 0x2a, 0x00, 0x00, //0x00001102 jne LBB0_699 - 0x48, 0x83, 0xc3, 0xc0, //0x00001108 addq $-64, %rbx - 0x49, 0x83, 0xc2, 0x40, //0x0000110c addq $64, %r10 - 0x48, 0x83, 0xfb, 0x3f, //0x00001110 cmpq $63, %rbx - 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x00001114 ja LBB0_193 - 0xe9, 0x81, 0x16, 0x00, 0x00, //0x0000111a jmp LBB0_199 - //0x0000111f LBB0_204 - 0x49, 0x83, 0xff, 0xff, //0x0000111f cmpq $-1, %r15 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00001123 jne LBB0_206 - 0x4c, 0x0f, 0xbc, 0xfa, //0x00001129 bsfq %rdx, %r15 - 0x4d, 0x01, 0xd7, //0x0000112d addq %r10, %r15 - //0x00001130 LBB0_206 - 0x4c, 0x89, 0x3c, 0x24, //0x00001130 movq %r15, (%rsp) - 0x4c, 0x89, 0xd8, //0x00001134 movq %r11, %rax - 0x48, 0xf7, 0xd0, //0x00001137 notq %rax - 0x48, 0x21, 0xd0, //0x0000113a andq %rdx, %rax - 0x4d, 0x89, 0xd7, //0x0000113d movq %r10, %r15 - 0x4c, 0x8d, 0x14, 0x00, //0x00001140 leaq (%rax,%rax), %r10 - 0x4d, 0x09, 0xda, //0x00001144 orq %r11, %r10 - 0x4c, 0x89, 0xd1, //0x00001147 movq %r10, %rcx - 0x48, 0xf7, 0xd1, //0x0000114a notq %rcx - 0x48, 0x21, 0xd1, //0x0000114d andq %rdx, %rcx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001150 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd1, //0x0000115a andq %rdx, %rcx - 0x45, 0x31, 0xdb, //0x0000115d xorl %r11d, %r11d - 0x48, 0x01, 0xc1, //0x00001160 addq %rax, %rcx - 0x41, 0x0f, 0x92, 0xc3, //0x00001163 setb %r11b - 0x48, 0x01, 0xc9, //0x00001167 addq %rcx, %rcx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000116a movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc1, //0x00001174 xorq %rax, %rcx - 0x4c, 0x21, 0xd1, //0x00001177 andq %r10, %rcx - 0x4d, 0x89, 0xfa, //0x0000117a movq %r15, %r10 - 0x4c, 0x8b, 0x3c, 0x24, //0x0000117d movq (%rsp), %r15 - 0x48, 0xf7, 0xd1, //0x00001181 notq %rcx - 0x48, 0x21, 0xcf, //0x00001184 andq %rcx, %rdi - 0xe9, 0x56, 0xff, 0xff, 0xff, //0x00001187 jmp LBB0_196 - //0x0000118c LBB0_207 - 0x48, 0x0f, 0xbc, 0xcf, //0x0000118c bsfq %rdi, %rcx - 0x48, 0x85, 0xf6, //0x00001190 testq %rsi, %rsi - 0x0f, 0x84, 0x72, 0x01, 0x00, 0x00, //0x00001193 je LBB0_230 - 0x48, 0x0f, 0xbc, 0xd6, //0x00001199 bsfq %rsi, %rdx - 0x48, 0x39, 0xca, //0x0000119d cmpq %rcx, %rdx - 0x0f, 0x83, 0x73, 0x01, 0x00, 0x00, //0x000011a0 jae LBB0_231 - 0xe9, 0x8b, 0x2b, 0x00, 0x00, //0x000011a6 jmp LBB0_209 - //0x000011ab LBB0_210 - 0x4c, 0x01, 0xe9, //0x000011ab addq %r13, %rcx - 0x48, 0x03, 0x4c, 0x24, 0x38, //0x000011ae addq $56(%rsp), %rcx - 0xc5, 0xf8, 0x77, //0x000011b3 vzeroupper - 0x49, 0x89, 0xcd, //0x000011b6 movq %rcx, %r13 - 0xe9, 0x3d, 0x04, 0x00, 0x00, //0x000011b9 jmp LBB0_279 - //0x000011be LBB0_211 - 0x4c, 0x29, 0xc9, //0x000011be subq %r9, %rcx - 0x0f, 0x84, 0x55, 0x2b, 0x00, 0x00, //0x000011c1 je LBB0_717 - 0x48, 0x83, 0xf9, 0x40, //0x000011c7 cmpq $64, %rcx - 0x0f, 0x82, 0x94, 0x19, 0x00, 0x00, //0x000011cb jb LBB0_513 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000011d1 movq $-1, %r15 - 0x4d, 0x89, 0xca, //0x000011d8 movq %r9, %r10 - 0x45, 0x31, 0xdb, //0x000011db xorl %r11d, %r11d - 0x90, 0x90, //0x000011de .p2align 4, 0x90 - //0x000011e0 LBB0_214 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x16, //0x000011e0 vmovdqu (%r14,%r10), %ymm0 - 0xc4, 0x81, 0x7e, 0x6f, 0x4c, 0x16, 0x20, //0x000011e6 vmovdqu $32(%r14,%r10), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x000011ed vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x000011f1 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x000011f5 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x000011f9 vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xd7, //0x000011fd vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00001201 vpmovmskb %ymm2, %edx - 0xc5, 0xf5, 0x74, 0xd7, //0x00001205 vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xda, //0x00001209 vpmovmskb %ymm2, %ebx - 0xc5, 0xbd, 0x64, 0xd1, //0x0000120d vpcmpgtb %ymm1, %ymm8, %ymm2 - 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00001211 vpcmpgtb %ymm9, %ymm1, %ymm1 - 0xc5, 0xed, 0xdb, 0xc9, //0x00001216 vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x0000121a vpmovmskb %ymm1, %esi - 0x48, 0xc1, 0xe0, 0x20, //0x0000121e shlq $32, %rax - 0x48, 0x09, 0xc7, //0x00001222 orq %rax, %rdi - 0x48, 0xc1, 0xe3, 0x20, //0x00001225 shlq $32, %rbx - 0x48, 0xc1, 0xe6, 0x20, //0x00001229 shlq $32, %rsi - 0x48, 0x09, 0xda, //0x0000122d orq %rbx, %rdx - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00001230 jne LBB0_225 - 0x4d, 0x85, 0xdb, //0x00001236 testq %r11, %r11 - 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00001239 jne LBB0_227 - 0x45, 0x31, 0xdb, //0x0000123f xorl %r11d, %r11d - //0x00001242 LBB0_217 - 0xc5, 0xbd, 0x64, 0xc8, //0x00001242 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00001246 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x0000124b vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x0000124f vpmovmskb %ymm0, %eax - 0x48, 0x09, 0xc6, //0x00001253 orq %rax, %rsi - 0x48, 0x85, 0xff, //0x00001256 testq %rdi, %rdi - 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, //0x00001259 jne LBB0_228 - 0x48, 0x85, 0xf6, //0x0000125f testq %rsi, %rsi - 0x0f, 0x85, 0x4c, 0x29, 0x00, 0x00, //0x00001262 jne LBB0_699 - 0x48, 0x83, 0xc1, 0xc0, //0x00001268 addq $-64, %rcx - 0x49, 0x83, 0xc2, 0x40, //0x0000126c addq $64, %r10 - 0x48, 0x83, 0xf9, 0x3f, //0x00001270 cmpq $63, %rcx - 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x00001274 ja LBB0_214 - 0xe9, 0x4e, 0x16, 0x00, 0x00, //0x0000127a jmp LBB0_220 - //0x0000127f LBB0_225 - 0x49, 0x83, 0xff, 0xff, //0x0000127f cmpq $-1, %r15 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00001283 jne LBB0_227 - 0x4c, 0x0f, 0xbc, 0xfa, //0x00001289 bsfq %rdx, %r15 - 0x4d, 0x01, 0xd7, //0x0000128d addq %r10, %r15 - //0x00001290 LBB0_227 - 0x4c, 0x89, 0x3c, 0x24, //0x00001290 movq %r15, (%rsp) - 0x4c, 0x89, 0xd8, //0x00001294 movq %r11, %rax - 0x48, 0xf7, 0xd0, //0x00001297 notq %rax - 0x48, 0x21, 0xd0, //0x0000129a andq %rdx, %rax - 0x4d, 0x89, 0xd7, //0x0000129d movq %r10, %r15 - 0x4c, 0x8d, 0x14, 0x00, //0x000012a0 leaq (%rax,%rax), %r10 - 0x4d, 0x09, 0xda, //0x000012a4 orq %r11, %r10 - 0x4c, 0x89, 0xd3, //0x000012a7 movq %r10, %rbx - 0x48, 0xf7, 0xd3, //0x000012aa notq %rbx - 0x48, 0x21, 0xd3, //0x000012ad andq %rdx, %rbx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000012b0 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd3, //0x000012ba andq %rdx, %rbx - 0x45, 0x31, 0xdb, //0x000012bd xorl %r11d, %r11d - 0x48, 0x01, 0xc3, //0x000012c0 addq %rax, %rbx - 0x41, 0x0f, 0x92, 0xc3, //0x000012c3 setb %r11b - 0x48, 0x01, 0xdb, //0x000012c7 addq %rbx, %rbx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000012ca movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc3, //0x000012d4 xorq %rax, %rbx - 0x4c, 0x21, 0xd3, //0x000012d7 andq %r10, %rbx - 0x4d, 0x89, 0xfa, //0x000012da movq %r15, %r10 - 0x4c, 0x8b, 0x3c, 0x24, //0x000012dd movq (%rsp), %r15 - 0x48, 0xf7, 0xd3, //0x000012e1 notq %rbx - 0x48, 0x21, 0xdf, //0x000012e4 andq %rbx, %rdi - 0xe9, 0x56, 0xff, 0xff, 0xff, //0x000012e7 jmp LBB0_217 - //0x000012ec LBB0_228 - 0x48, 0x0f, 0xbc, 0xcf, //0x000012ec bsfq %rdi, %rcx - 0x48, 0x85, 0xf6, //0x000012f0 testq %rsi, %rsi - 0x0f, 0x84, 0x7e, 0x04, 0x00, 0x00, //0x000012f3 je LBB0_296 - 0x48, 0x0f, 0xbc, 0xd6, //0x000012f9 bsfq %rsi, %rdx - 0x48, 0x39, 0xca, //0x000012fd cmpq %rcx, %rdx - 0x0f, 0x83, 0x7f, 0x04, 0x00, 0x00, //0x00001300 jae LBB0_297 - 0xe9, 0x2b, 0x2a, 0x00, 0x00, //0x00001306 jmp LBB0_209 - //0x0000130b LBB0_230 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000130b movl $64, %edx - 0x48, 0x39, 0xca, //0x00001310 cmpq %rcx, %rdx - 0x0f, 0x82, 0x1d, 0x2a, 0x00, 0x00, //0x00001313 jb LBB0_209 - //0x00001319 LBB0_231 - 0x49, 0x01, 0xca, //0x00001319 addq %rcx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x0000131c addq $1, %r10 - //0x00001320 LBB0_232 - 0x4d, 0x85, 0xd2, //0x00001320 testq %r10, %r10 - 0x0f, 0x88, 0x1d, 0x28, 0x00, 0x00, //0x00001323 js LBB0_680 - 0x4d, 0x89, 0x55, 0x00, //0x00001329 movq %r10, (%r13) - 0x4d, 0x85, 0xc9, //0x0000132d testq %r9, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00001330 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00001335 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000133a movq $8(%rsp), %r15 - 0x0f, 0x8f, 0x5b, 0xf0, 0xff, 0xff, //0x0000133f jg LBB0_3 - 0xe9, 0xef, 0x27, 0x00, 0x00, //0x00001345 jmp LBB0_463 - //0x0000134a LBB0_234 - 0x41, 0xf6, 0xc3, 0x40, //0x0000134a testb $64, %r11b - 0x0f, 0x85, 0x82, 0x04, 0x00, 0x00, //0x0000134e jne LBB0_302 - 0x4d, 0x8b, 0x4d, 0x00, //0x00001354 movq (%r13), %r9 - 0x4c, 0x8b, 0x7f, 0x08, //0x00001358 movq $8(%rdi), %r15 - 0x4d, 0x89, 0xf8, //0x0000135c movq %r15, %r8 - 0x41, 0xf6, 0xc3, 0x20, //0x0000135f testb $32, %r11b - 0x0f, 0x85, 0x97, 0x0c, 0x00, 0x00, //0x00001363 jne LBB0_385 - 0x4d, 0x29, 0xc8, //0x00001369 subq %r9, %r8 - 0x0f, 0x84, 0xf1, 0x29, 0x00, 0x00, //0x0000136c je LBB0_718 - 0x49, 0x83, 0xf8, 0x40, //0x00001372 cmpq $64, %r8 - 0x0f, 0x82, 0x48, 0x18, 0x00, 0x00, //0x00001376 jb LBB0_516 - 0x4c, 0x89, 0xce, //0x0000137c movq %r9, %rsi - 0x48, 0xf7, 0xd6, //0x0000137f notq %rsi - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00001382 movq $-1, %r11 - 0x4c, 0x89, 0xcf, //0x00001389 movq %r9, %rdi - 0x45, 0x31, 0xd2, //0x0000138c xorl %r10d, %r10d - 0x90, //0x0000138f .p2align 4, 0x90 - //0x00001390 LBB0_239 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x3e, //0x00001390 vmovdqu (%r14,%rdi), %ymm0 - 0x48, 0x89, 0xf9, //0x00001396 movq %rdi, %rcx - 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x3e, 0x20, //0x00001399 vmovdqu $32(%r14,%rdi), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x000013a0 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x000013a4 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x000013a8 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x000013ac vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xc7, //0x000013b0 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x000013b4 vpmovmskb %ymm0, %edx - 0xc5, 0xf5, 0x74, 0xc7, //0x000013b8 vpcmpeqb %ymm7, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x000013bc vpmovmskb %ymm0, %ebx - 0x48, 0xc1, 0xe0, 0x20, //0x000013c0 shlq $32, %rax - 0x48, 0x09, 0xc7, //0x000013c4 orq %rax, %rdi - 0x48, 0xc1, 0xe3, 0x20, //0x000013c7 shlq $32, %rbx - 0x48, 0x09, 0xda, //0x000013cb orq %rbx, %rdx - 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x000013ce jne LBB0_248 - 0x4d, 0x85, 0xd2, //0x000013d4 testq %r10, %r10 - 0x0f, 0x85, 0x48, 0x00, 0x00, 0x00, //0x000013d7 jne LBB0_250 - 0x45, 0x31, 0xd2, //0x000013dd xorl %r10d, %r10d - 0x48, 0x85, 0xff, //0x000013e0 testq %rdi, %rdi - 0x0f, 0x85, 0x96, 0x00, 0x00, 0x00, //0x000013e3 jne LBB0_252 - //0x000013e9 LBB0_242 - 0x49, 0x83, 0xc0, 0xc0, //0x000013e9 addq $-64, %r8 - 0x48, 0x83, 0xc6, 0xc0, //0x000013ed addq $-64, %rsi - 0x48, 0x89, 0xcf, //0x000013f1 movq %rcx, %rdi - 0x48, 0x83, 0xc7, 0x40, //0x000013f4 addq $64, %rdi - 0x49, 0x83, 0xf8, 0x3f, //0x000013f8 cmpq $63, %r8 - 0x0f, 0x87, 0x8e, 0xff, 0xff, 0xff, //0x000013fc ja LBB0_239 - 0xe9, 0x99, 0x15, 0x00, 0x00, //0x00001402 jmp LBB0_243 - //0x00001407 LBB0_248 - 0x4c, 0x89, 0x1c, 0x24, //0x00001407 movq %r11, (%rsp) - 0x49, 0x83, 0xfb, 0xff, //0x0000140b cmpq $-1, %r11 - 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x0000140f jne LBB0_251 - 0x48, 0x0f, 0xbc, 0xc2, //0x00001415 bsfq %rdx, %rax - 0x48, 0x01, 0xc8, //0x00001419 addq %rcx, %rax - 0x48, 0x89, 0x04, 0x24, //0x0000141c movq %rax, (%rsp) - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00001420 jmp LBB0_251 - //0x00001425 LBB0_250 - 0x4c, 0x89, 0x1c, 0x24, //0x00001425 movq %r11, (%rsp) - //0x00001429 LBB0_251 - 0x4c, 0x89, 0xd0, //0x00001429 movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x0000142c notq %rax - 0x48, 0x21, 0xd0, //0x0000142f andq %rdx, %rax - 0x4c, 0x8d, 0x1c, 0x00, //0x00001432 leaq (%rax,%rax), %r11 - 0x4d, 0x09, 0xd3, //0x00001436 orq %r10, %r11 - 0x4c, 0x89, 0xdb, //0x00001439 movq %r11, %rbx - 0x48, 0xf7, 0xd3, //0x0000143c notq %rbx - 0x48, 0x21, 0xd3, //0x0000143f andq %rdx, %rbx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001442 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd3, //0x0000144c andq %rdx, %rbx - 0x45, 0x31, 0xd2, //0x0000144f xorl %r10d, %r10d - 0x48, 0x01, 0xc3, //0x00001452 addq %rax, %rbx - 0x41, 0x0f, 0x92, 0xc2, //0x00001455 setb %r10b - 0x48, 0x01, 0xdb, //0x00001459 addq %rbx, %rbx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000145c movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc3, //0x00001466 xorq %rax, %rbx - 0x4c, 0x21, 0xdb, //0x00001469 andq %r11, %rbx - 0x48, 0xf7, 0xd3, //0x0000146c notq %rbx - 0x48, 0x21, 0xdf, //0x0000146f andq %rbx, %rdi - 0x4c, 0x8b, 0x1c, 0x24, //0x00001472 movq (%rsp), %r11 - 0x48, 0x85, 0xff, //0x00001476 testq %rdi, %rdi - 0x0f, 0x84, 0x6a, 0xff, 0xff, 0xff, //0x00001479 je LBB0_242 - //0x0000147f LBB0_252 - 0xc5, 0x7d, 0x7f, 0xea, //0x0000147f vmovdqa %ymm13, %ymm2 - 0x48, 0x0f, 0xbc, 0xcf, //0x00001483 bsfq %rdi, %rcx - 0x48, 0x29, 0xf1, //0x00001487 subq %rsi, %rcx - 0xe9, 0x5f, 0x10, 0x00, 0x00, //0x0000148a jmp LBB0_461 - //0x0000148f LBB0_253 - 0x4c, 0x8b, 0x57, 0x08, //0x0000148f movq $8(%rdi), %r10 - 0x49, 0x8b, 0x4d, 0x00, //0x00001493 movq (%r13), %rcx - 0x41, 0xf6, 0xc3, 0x40, //0x00001497 testb $64, %r11b - 0x48, 0x89, 0x0c, 0x24, //0x0000149b movq %rcx, (%rsp) - 0x0f, 0x85, 0x0b, 0x04, 0x00, 0x00, //0x0000149f jne LBB0_313 - 0x49, 0x29, 0xca, //0x000014a5 subq %rcx, %r10 - 0x0f, 0x84, 0x3a, 0x28, 0x00, 0x00, //0x000014a8 je LBB0_704 - 0x49, 0x8d, 0x04, 0x0e, //0x000014ae leaq (%r14,%rcx), %rax - 0x48, 0x89, 0x44, 0x24, 0x38, //0x000014b2 movq %rax, $56(%rsp) - 0x80, 0x38, 0x30, //0x000014b7 cmpb $48, (%rax) - 0x0f, 0x85, 0xab, 0x0c, 0x00, 0x00, //0x000014ba jne LBB0_406 - 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, //0x000014c0 movl $1, %r9d - 0x49, 0x83, 0xfa, 0x01, //0x000014c6 cmpq $1, %r10 - 0x0f, 0x85, 0x6c, 0x0c, 0x00, 0x00, //0x000014ca jne LBB0_404 - //0x000014d0 LBB0_257 - 0x48, 0x8b, 0x0c, 0x24, //0x000014d0 movq (%rsp), %rcx - 0xe9, 0xb0, 0x14, 0x00, 0x00, //0x000014d4 jmp LBB0_498 - //0x000014d9 LBB0_258 - 0x41, 0xf6, 0xc3, 0x40, //0x000014d9 testb $64, %r11b - 0x0f, 0x85, 0xe2, 0x04, 0x00, 0x00, //0x000014dd jne LBB0_329 - 0x49, 0x8b, 0x0f, //0x000014e3 movq (%r15), %rcx - 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000014e6 cmpq $4095, %rcx - 0x0f, 0x8f, 0x2c, 0x26, 0x00, 0x00, //0x000014ed jg LBB0_705 - 0x48, 0x8d, 0x41, 0x01, //0x000014f3 leaq $1(%rcx), %rax - 0x49, 0x89, 0x07, //0x000014f7 movq %rax, (%r15) - 0x49, 0xc7, 0x44, 0xcf, 0x08, 0x05, 0x00, 0x00, 0x00, //0x000014fa movq $5, $8(%r15,%rcx,8) - 0xe9, 0x98, 0xee, 0xff, 0xff, //0x00001503 jmp LBB0_3 - //0x00001508 LBB0_261 - 0x49, 0x8b, 0x4d, 0x00, //0x00001508 movq (%r13), %rcx - 0x48, 0x8b, 0x57, 0x08, //0x0000150c movq $8(%rdi), %rdx - 0x48, 0x8d, 0x42, 0xfc, //0x00001510 leaq $-4(%rdx), %rax - 0x48, 0x39, 0xc1, //0x00001514 cmpq %rax, %rcx - 0x0f, 0x87, 0x8e, 0x26, 0x00, 0x00, //0x00001517 ja LBB0_686 - 0x41, 0x8b, 0x14, 0x0e, //0x0000151d movl (%r14,%rcx), %edx - 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x00001521 cmpl $1702063201, %edx - 0x0f, 0x85, 0xac, 0x26, 0x00, 0x00, //0x00001527 jne LBB0_687 - 0x48, 0x8d, 0x41, 0x04, //0x0000152d leaq $4(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00001531 movq %rax, (%r13) - 0x48, 0x85, 0xc9, //0x00001535 testq %rcx, %rcx - 0x0f, 0x8f, 0x62, 0xee, 0xff, 0xff, //0x00001538 jg LBB0_3 - 0xe9, 0x98, 0x27, 0x00, 0x00, //0x0000153e jmp LBB0_264 - //0x00001543 LBB0_265 - 0x49, 0x8b, 0x4d, 0x00, //0x00001543 movq (%r13), %rcx - 0x48, 0x8b, 0x57, 0x08, //0x00001547 movq $8(%rdi), %rdx - 0x48, 0x8d, 0x42, 0xfd, //0x0000154b leaq $-3(%rdx), %rax - 0x48, 0x39, 0xc1, //0x0000154f cmpq %rax, %rcx - 0x0f, 0x87, 0x53, 0x26, 0x00, 0x00, //0x00001552 ja LBB0_686 - 0x48, 0x8d, 0x41, 0xff, //0x00001558 leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0e, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x0000155c cmpl $1819047278, $-1(%r14,%rcx) - 0x0f, 0x84, 0x2d, 0x00, 0x00, 0x00, //0x00001565 je LBB0_273 - 0xe9, 0xc3, 0x26, 0x00, 0x00, //0x0000156b jmp LBB0_267 - //0x00001570 LBB0_271 - 0x49, 0x8b, 0x4d, 0x00, //0x00001570 movq (%r13), %rcx - 0x48, 0x8b, 0x57, 0x08, //0x00001574 movq $8(%rdi), %rdx - 0x48, 0x8d, 0x42, 0xfd, //0x00001578 leaq $-3(%rdx), %rax - 0x48, 0x39, 0xc1, //0x0000157c cmpq %rax, %rcx - 0x0f, 0x87, 0x26, 0x26, 0x00, 0x00, //0x0000157f ja LBB0_686 - 0x48, 0x8d, 0x41, 0xff, //0x00001585 leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0e, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00001589 cmpl $1702195828, $-1(%r14,%rcx) - 0x0f, 0x85, 0xe6, 0x26, 0x00, 0x00, //0x00001592 jne LBB0_692 - //0x00001598 LBB0_273 - 0x48, 0x89, 0x04, 0x24, //0x00001598 movq %rax, (%rsp) - 0x48, 0x8d, 0x41, 0x03, //0x0000159c leaq $3(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x000015a0 movq %rax, (%r13) - 0x48, 0x85, 0xc9, //0x000015a4 testq %rcx, %rcx - 0x0f, 0x8f, 0xf3, 0xed, 0xff, 0xff, //0x000015a7 jg LBB0_3 - 0xe9, 0xe3, 0x25, 0x00, 0x00, //0x000015ad jmp LBB0_711 - //0x000015b2 LBB0_274 - 0x41, 0xf6, 0xc3, 0x40, //0x000015b2 testb $64, %r11b - 0x0f, 0x85, 0xfb, 0x06, 0x00, 0x00, //0x000015b6 jne LBB0_355 - 0x49, 0x8b, 0x0f, //0x000015bc movq (%r15), %rcx - 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000015bf cmpq $4095, %rcx - 0x0f, 0x8f, 0x53, 0x25, 0x00, 0x00, //0x000015c6 jg LBB0_705 - 0x48, 0x8d, 0x41, 0x01, //0x000015cc leaq $1(%rcx), %rax - 0x49, 0x89, 0x07, //0x000015d0 movq %rax, (%r15) - 0x49, 0xc7, 0x44, 0xcf, 0x08, 0x06, 0x00, 0x00, 0x00, //0x000015d3 movq $6, $8(%r15,%rcx,8) - 0xe9, 0xbf, 0xed, 0xff, 0xff, //0x000015dc jmp LBB0_3 - //0x000015e1 LBB0_277 - 0x89, 0xc8, //0x000015e1 movl %ecx, %eax - 0x49, 0x01, 0xc5, //0x000015e3 addq %rax, %r13 - 0x4d, 0x01, 0xfd, //0x000015e6 addq %r15, %r13 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x000015e9 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x000015ee movq $16(%rsp), %rdi - 0xe9, 0x03, 0x00, 0x00, 0x00, //0x000015f3 jmp LBB0_279 - //0x000015f8 LBB0_278 - 0x49, 0x01, 0xcd, //0x000015f8 addq %rcx, %r13 - //0x000015fb LBB0_279 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000015fb movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x28, //0x00001602 movq $40(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00001607 testq %rdx, %rdx - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000160a movq $8(%rsp), %r15 - 0x0f, 0x84, 0x66, 0x25, 0x00, 0x00, //0x0000160f je LBB0_684 - 0x4d, 0x85, 0xd2, //0x00001615 testq %r10, %r10 - 0xc5, 0xfe, 0x6f, 0x1d, 0xa0, 0xeb, 0xff, 0xff, //0x00001618 vmovdqu $-5216(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0x0f, 0x84, 0x55, 0x25, 0x00, 0x00, //0x00001620 je LBB0_684 - 0x4d, 0x85, 0xc9, //0x00001626 testq %r9, %r9 - 0x0f, 0x84, 0x4c, 0x25, 0x00, 0x00, //0x00001629 je LBB0_684 - 0x4c, 0x2b, 0x6c, 0x24, 0x38, //0x0000162f subq $56(%rsp), %r13 - 0x49, 0x8d, 0x4d, 0xff, //0x00001634 leaq $-1(%r13), %rcx - 0x48, 0x39, 0xca, //0x00001638 cmpq %rcx, %rdx - 0x0f, 0x84, 0x80, 0x00, 0x00, 0x00, //0x0000163b je LBB0_288 - 0x49, 0x39, 0xca, //0x00001641 cmpq %rcx, %r10 - 0x0f, 0x84, 0x77, 0x00, 0x00, 0x00, //0x00001644 je LBB0_288 - 0x49, 0x39, 0xc9, //0x0000164a cmpq %rcx, %r9 - 0x0f, 0x84, 0x6e, 0x00, 0x00, 0x00, //0x0000164d je LBB0_288 - 0x4d, 0x85, 0xd2, //0x00001653 testq %r10, %r10 - 0xc5, 0xfe, 0x6f, 0x2d, 0x62, 0xea, 0xff, 0xff, //0x00001656 vmovdqu $-5534(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x7a, 0xea, 0xff, 0xff, //0x0000165e vmovdqu $-5510(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x92, 0xea, 0xff, 0xff, //0x00001666 vmovdqu $-5486(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0xaa, 0xea, 0xff, 0xff, //0x0000166e vmovdqu $-5462(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001676 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0x7d, 0xeb, 0xff, 0xff, //0x0000167b vmovdqu $-5251(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x05, 0x95, 0xeb, 0xff, 0xff, //0x00001683 vmovdqu $-5227(%rip), %ymm0 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0xad, 0xeb, 0xff, 0xff, //0x0000168b vmovdqu $-5203(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0x45, 0xeb, 0xff, 0xff, //0x00001693 vmovdqu $-5307(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0xfd, 0xeb, 0xff, 0xff, //0x0000169b vmovdqu $-5123(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x0f, 0x8e, 0x9b, 0x00, 0x00, 0x00, //0x000016a3 jle LBB0_293 - 0x49, 0x8d, 0x42, 0xff, //0x000016a9 leaq $-1(%r10), %rax - 0x49, 0x39, 0xc1, //0x000016ad cmpq %rax, %r9 - 0x0f, 0x84, 0x8e, 0x00, 0x00, 0x00, //0x000016b0 je LBB0_293 - 0x49, 0xf7, 0xd2, //0x000016b6 notq %r10 - 0x4d, 0x89, 0xd5, //0x000016b9 movq %r10, %r13 - 0xe9, 0x50, 0x00, 0x00, 0x00, //0x000016bc jmp LBB0_289 - //0x000016c1 LBB0_288 - 0x49, 0xf7, 0xdd, //0x000016c1 negq %r13 - 0xc5, 0xfe, 0x6f, 0x2d, 0xf4, 0xe9, 0xff, 0xff, //0x000016c4 vmovdqu $-5644(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x0c, 0xea, 0xff, 0xff, //0x000016cc vmovdqu $-5620(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x24, 0xea, 0xff, 0xff, //0x000016d4 vmovdqu $-5596(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x3c, 0xea, 0xff, 0xff, //0x000016dc vmovdqu $-5572(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000016e4 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0x0f, 0xeb, 0xff, 0xff, //0x000016e9 vmovdqu $-5361(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x05, 0x27, 0xeb, 0xff, 0xff, //0x000016f1 vmovdqu $-5337(%rip), %ymm0 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0x3f, 0xeb, 0xff, 0xff, //0x000016f9 vmovdqu $-5313(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0xd7, 0xea, 0xff, 0xff, //0x00001701 vmovdqu $-5417(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x8f, 0xeb, 0xff, 0xff, //0x00001709 vmovdqu $-5233(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - //0x00001711 LBB0_289 - 0xc5, 0x7e, 0x6f, 0x1d, 0x27, 0xea, 0xff, 0xff, //0x00001711 vmovdqu $-5593(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x3f, 0xea, 0xff, 0xff, //0x00001719 vmovdqu $-5569(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - //0x00001721 LBB0_290 - 0x48, 0x8b, 0x5c, 0x24, 0x20, //0x00001721 movq $32(%rsp), %rbx - //0x00001726 LBB0_291 - 0x4d, 0x85, 0xed, //0x00001726 testq %r13, %r13 - 0x0f, 0x88, 0x49, 0x24, 0x00, 0x00, //0x00001729 js LBB0_683 - 0x48, 0x8b, 0x44, 0x24, 0x30, //0x0000172f movq $48(%rsp), %rax - 0x48, 0x8b, 0x08, //0x00001734 movq (%rax), %rcx - 0x48, 0x83, 0xc1, 0xff, //0x00001737 addq $-1, %rcx - 0xc5, 0x7d, 0x6f, 0xe8, //0x0000173b vmovdqa %ymm0, %ymm13 - 0xe9, 0x74, 0xec, 0xff, 0xff, //0x0000173f jmp LBB0_2 - //0x00001744 LBB0_293 - 0x48, 0x89, 0xd0, //0x00001744 movq %rdx, %rax - 0x4c, 0x09, 0xc8, //0x00001747 orq %r9, %rax - 0x0f, 0x99, 0xc1, //0x0000174a setns %cl - 0xc5, 0x7e, 0x6f, 0x1d, 0xeb, 0xe9, 0xff, 0xff, //0x0000174d vmovdqu $-5653(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x03, 0xea, 0xff, 0xff, //0x00001755 vmovdqu $-5629(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - 0x0f, 0x88, 0x84, 0x08, 0x00, 0x00, //0x0000175d js LBB0_384 - 0x4c, 0x39, 0xca, //0x00001763 cmpq %r9, %rdx - 0x0f, 0x8c, 0x7b, 0x08, 0x00, 0x00, //0x00001766 jl LBB0_384 - 0x48, 0xf7, 0xd2, //0x0000176c notq %rdx - 0x49, 0x89, 0xd5, //0x0000176f movq %rdx, %r13 - 0xe9, 0xaa, 0xff, 0xff, 0xff, //0x00001772 jmp LBB0_290 - //0x00001777 LBB0_296 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001777 movl $64, %edx - 0x48, 0x39, 0xca, //0x0000177c cmpq %rcx, %rdx - 0x0f, 0x82, 0xb1, 0x25, 0x00, 0x00, //0x0000177f jb LBB0_209 - //0x00001785 LBB0_297 - 0x49, 0x01, 0xca, //0x00001785 addq %rcx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00001788 addq $1, %r10 - //0x0000178c LBB0_298 - 0x4d, 0x85, 0xd2, //0x0000178c testq %r10, %r10 - 0x0f, 0x88, 0xb1, 0x23, 0x00, 0x00, //0x0000178f js LBB0_680 - 0x4d, 0x89, 0x55, 0x00, //0x00001795 movq %r10, (%r13) - 0x4d, 0x85, 0xc9, //0x00001799 testq %r9, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x0000179c movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x000017a1 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x000017a6 movq $8(%rsp), %r15 - 0x0f, 0x8e, 0x88, 0x23, 0x00, 0x00, //0x000017ab jle LBB0_463 - //0x000017b1 LBB0_300 - 0x49, 0x8b, 0x0f, //0x000017b1 movq (%r15), %rcx - 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000017b4 cmpq $4095, %rcx - 0x0f, 0x8f, 0x5e, 0x23, 0x00, 0x00, //0x000017bb jg LBB0_705 - 0x48, 0x8d, 0x41, 0x01, //0x000017c1 leaq $1(%rcx), %rax - 0x49, 0x89, 0x07, //0x000017c5 movq %rax, (%r15) - 0x49, 0xc7, 0x44, 0xcf, 0x08, 0x04, 0x00, 0x00, 0x00, //0x000017c8 movq $4, $8(%r15,%rcx,8) - 0xe9, 0xca, 0xeb, 0xff, 0xff, //0x000017d1 jmp LBB0_3 - //0x000017d6 LBB0_302 - 0x4c, 0x8b, 0x57, 0x08, //0x000017d6 movq $8(%rdi), %r10 - 0x4d, 0x8b, 0x45, 0x00, //0x000017da movq (%r13), %r8 - 0x4f, 0x8d, 0x0c, 0x06, //0x000017de leaq (%r14,%r8), %r9 - 0x4d, 0x29, 0xc2, //0x000017e2 subq %r8, %r10 - 0x49, 0x83, 0xfa, 0x20, //0x000017e5 cmpq $32, %r10 - 0x0f, 0x8c, 0xa4, 0x00, 0x00, 0x00, //0x000017e9 jl LBB0_312 - 0xb9, 0x20, 0x00, 0x00, 0x00, //0x000017ef movl $32, %ecx - 0x31, 0xf6, //0x000017f4 xorl %esi, %esi - 0x45, 0x31, 0xff, //0x000017f6 xorl %r15d, %r15d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000017f9 .p2align 4, 0x90 - //0x00001800 LBB0_304 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00001800 vmovdqu (%r9,%rsi), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00001806 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd9, //0x0000180a vpmovmskb %ymm1, %r11d - 0xc5, 0xfd, 0x74, 0xc7, //0x0000180e vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x00001812 vpmovmskb %ymm0, %ebx - 0x85, 0xdb, //0x00001816 testl %ebx, %ebx - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00001818 jne LBB0_307 - 0x4d, 0x85, 0xff, //0x0000181e testq %r15, %r15 - 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00001821 jne LBB0_307 - 0x45, 0x31, 0xff, //0x00001827 xorl %r15d, %r15d - 0xe9, 0x32, 0x00, 0x00, 0x00, //0x0000182a jmp LBB0_308 - 0x90, //0x0000182f .p2align 4, 0x90 - //0x00001830 LBB0_307 - 0x44, 0x89, 0xf8, //0x00001830 movl %r15d, %eax - 0xf7, 0xd0, //0x00001833 notl %eax - 0x21, 0xd8, //0x00001835 andl %ebx, %eax - 0x8d, 0x14, 0x00, //0x00001837 leal (%rax,%rax), %edx - 0x44, 0x09, 0xfa, //0x0000183a orl %r15d, %edx - 0x89, 0xd7, //0x0000183d movl %edx, %edi - 0xf7, 0xd7, //0x0000183f notl %edi - 0x21, 0xdf, //0x00001841 andl %ebx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001843 andl $-1431655766, %edi - 0x45, 0x31, 0xff, //0x00001849 xorl %r15d, %r15d - 0x01, 0xc7, //0x0000184c addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc7, //0x0000184e setb %r15b - 0x01, 0xff, //0x00001852 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00001854 xorl $1431655765, %edi - 0x21, 0xd7, //0x0000185a andl %edx, %edi - 0xf7, 0xd7, //0x0000185c notl %edi - 0x41, 0x21, 0xfb, //0x0000185e andl %edi, %r11d - //0x00001861 LBB0_308 - 0x4d, 0x85, 0xdb, //0x00001861 testq %r11, %r11 - 0x0f, 0x85, 0xff, 0xea, 0xff, 0xff, //0x00001864 jne LBB0_153 - 0x48, 0x83, 0xc6, 0x20, //0x0000186a addq $32, %rsi - 0x49, 0x8d, 0x04, 0x0a, //0x0000186e leaq (%r10,%rcx), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x00001872 addq $-32, %rax - 0x48, 0x83, 0xc1, 0xe0, //0x00001876 addq $-32, %rcx - 0x48, 0x83, 0xf8, 0x3f, //0x0000187a cmpq $63, %rax - 0x0f, 0x8f, 0x7c, 0xff, 0xff, 0xff, //0x0000187e jg LBB0_304 - 0x4d, 0x85, 0xff, //0x00001884 testq %r15, %r15 - 0x0f, 0x85, 0xd7, 0x1d, 0x00, 0x00, //0x00001887 jne LBB0_622 - 0x49, 0x01, 0xf1, //0x0000188d addq %rsi, %r9 - 0x49, 0x29, 0xf2, //0x00001890 subq %rsi, %r10 - //0x00001893 LBB0_312 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00001893 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00001898 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000189d movq $8(%rsp), %r15 - 0x4d, 0x85, 0xd2, //0x000018a2 testq %r10, %r10 - 0x0f, 0x8f, 0x32, 0x1e, 0x00, 0x00, //0x000018a5 jg LBB0_626 - 0xe9, 0xe5, 0x22, 0x00, 0x00, //0x000018ab jmp LBB0_711 - //0x000018b0 LBB0_313 - 0x4c, 0x89, 0xd6, //0x000018b0 movq %r10, %rsi - 0x48, 0x29, 0xce, //0x000018b3 subq %rcx, %rsi - 0x48, 0x83, 0xfe, 0x20, //0x000018b6 cmpq $32, %rsi - 0x0f, 0x82, 0xc2, 0x12, 0x00, 0x00, //0x000018ba jb LBB0_514 - 0x48, 0x89, 0xca, //0x000018c0 movq %rcx, %rdx - 0x48, 0xf7, 0xda, //0x000018c3 negq %rdx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000018c6 .p2align 4, 0x90 - //0x000018d0 LBB0_315 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x0e, //0x000018d0 vmovdqu (%r14,%rcx), %ymm0 - 0xc5, 0xfd, 0x74, 0xcb, //0x000018d6 vpcmpeqb %ymm3, %ymm0, %ymm1 - 0xc5, 0x8d, 0xdb, 0xc0, //0x000018da vpand %ymm0, %ymm14, %ymm0 - 0xc5, 0xfd, 0x74, 0x05, 0xba, 0xe8, 0xff, 0xff, //0x000018de vpcmpeqb $-5958(%rip), %ymm0, %ymm0 /* LCPI0_8+0(%rip) */ - 0xc5, 0xfd, 0xeb, 0xc1, //0x000018e6 vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x000018ea vpmovmskb %ymm0, %esi - 0x85, 0xf6, //0x000018ee testl %esi, %esi - 0x0f, 0x85, 0xd5, 0x06, 0x00, 0x00, //0x000018f0 jne LBB0_382 - 0x48, 0x83, 0xc1, 0x20, //0x000018f6 addq $32, %rcx - 0x49, 0x8d, 0x04, 0x12, //0x000018fa leaq (%r10,%rdx), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x000018fe addq $-32, %rax - 0x48, 0x83, 0xc2, 0xe0, //0x00001902 addq $-32, %rdx - 0x48, 0x83, 0xf8, 0x1f, //0x00001906 cmpq $31, %rax - 0x0f, 0x87, 0xc0, 0xff, 0xff, 0xff, //0x0000190a ja LBB0_315 - 0x4c, 0x89, 0xf1, //0x00001910 movq %r14, %rcx - 0x48, 0x29, 0xd1, //0x00001913 subq %rdx, %rcx - 0x49, 0x01, 0xd2, //0x00001916 addq %rdx, %r10 - 0x4c, 0x89, 0xd6, //0x00001919 movq %r10, %rsi - 0x48, 0x83, 0xfe, 0x10, //0x0000191c cmpq $16, %rsi - 0x48, 0x8b, 0x1c, 0x24, //0x00001920 movq (%rsp), %rbx - 0x0f, 0x82, 0x48, 0x00, 0x00, 0x00, //0x00001924 jb LBB0_321 - //0x0000192a LBB0_318 - 0x4c, 0x89, 0xf2, //0x0000192a movq %r14, %rdx - 0x48, 0x29, 0xca, //0x0000192d subq %rcx, %rdx - //0x00001930 LBB0_319 - 0xc5, 0xfa, 0x6f, 0x01, //0x00001930 vmovdqu (%rcx), %xmm0 - 0xc5, 0xf9, 0x74, 0x0d, 0xd4, 0xe6, 0xff, 0xff, //0x00001934 vpcmpeqb $-6444(%rip), %xmm0, %xmm1 /* LCPI0_11+0(%rip) */ - 0xc5, 0xf9, 0xdb, 0x05, 0xdc, 0xe6, 0xff, 0xff, //0x0000193c vpand $-6436(%rip), %xmm0, %xmm0 /* LCPI0_12+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0xe4, 0xe6, 0xff, 0xff, //0x00001944 vpcmpeqb $-6428(%rip), %xmm0, %xmm0 /* LCPI0_13+0(%rip) */ - 0xc5, 0xf9, 0xeb, 0xc1, //0x0000194c vpor %xmm1, %xmm0, %xmm0 - 0xc5, 0xf9, 0xd7, 0xc0, //0x00001950 vpmovmskb %xmm0, %eax - 0x85, 0xc0, //0x00001954 testl %eax, %eax - 0x0f, 0x85, 0xe5, 0x0f, 0x00, 0x00, //0x00001956 jne LBB0_697 - 0x48, 0x83, 0xc1, 0x10, //0x0000195c addq $16, %rcx - 0x48, 0x83, 0xc6, 0xf0, //0x00001960 addq $-16, %rsi - 0x48, 0x83, 0xc2, 0xf0, //0x00001964 addq $-16, %rdx - 0x48, 0x83, 0xfe, 0x0f, //0x00001968 cmpq $15, %rsi - 0x0f, 0x87, 0xbe, 0xff, 0xff, 0xff, //0x0000196c ja LBB0_319 - //0x00001972 LBB0_321 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00001972 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00001976 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000197a vmovdqa %ymm13, %ymm11 - 0x48, 0x85, 0xf6, //0x0000197f testq %rsi, %rsi - 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00001982 je LBB0_328 - 0x48, 0x8d, 0x3c, 0x31, //0x00001988 leaq (%rcx,%rsi), %rdi - 0x31, 0xd2, //0x0000198c xorl %edx, %edx - //0x0000198e LBB0_323 - 0x0f, 0xb6, 0x1c, 0x11, //0x0000198e movzbl (%rcx,%rdx), %ebx - 0x80, 0xfb, 0x2c, //0x00001992 cmpb $44, %bl - 0x0f, 0x84, 0x85, 0x12, 0x00, 0x00, //0x00001995 je LBB0_520 - 0x80, 0xfb, 0x7d, //0x0000199b cmpb $125, %bl - 0x0f, 0x84, 0x7c, 0x12, 0x00, 0x00, //0x0000199e je LBB0_520 - 0x80, 0xfb, 0x5d, //0x000019a4 cmpb $93, %bl - 0x0f, 0x84, 0x73, 0x12, 0x00, 0x00, //0x000019a7 je LBB0_520 - 0x48, 0x83, 0xc2, 0x01, //0x000019ad addq $1, %rdx - 0x48, 0x39, 0xd6, //0x000019b1 cmpq %rdx, %rsi - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x000019b4 jne LBB0_323 - 0x48, 0x89, 0xf9, //0x000019ba movq %rdi, %rcx - //0x000019bd LBB0_328 - 0x4c, 0x29, 0xf1, //0x000019bd subq %r14, %rcx - 0xe9, 0x61, 0x12, 0x00, 0x00, //0x000019c0 jmp LBB0_521 - //0x000019c5 LBB0_329 - 0x4c, 0x8b, 0x4f, 0x08, //0x000019c5 movq $8(%rdi), %r9 - 0x4d, 0x8b, 0x45, 0x00, //0x000019c9 movq (%r13), %r8 - 0x4d, 0x29, 0xc1, //0x000019cd subq %r8, %r9 - 0x4d, 0x01, 0xc6, //0x000019d0 addq %r8, %r14 - 0x45, 0x31, 0xdb, //0x000019d3 xorl %r11d, %r11d - 0x45, 0x31, 0xd2, //0x000019d6 xorl %r10d, %r10d - 0x45, 0x31, 0xff, //0x000019d9 xorl %r15d, %r15d - 0x31, 0xdb, //0x000019dc xorl %ebx, %ebx - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x000019de jmp LBB0_331 - //0x000019e3 LBB0_330 - 0x48, 0xc1, 0xff, 0x3f, //0x000019e3 sarq $63, %rdi - 0xf3, 0x48, 0x0f, 0xb8, 0xc6, //0x000019e7 popcntq %rsi, %rax - 0x49, 0x01, 0xc7, //0x000019ec addq %rax, %r15 - 0x49, 0x83, 0xc6, 0x40, //0x000019ef addq $64, %r14 - 0x49, 0x83, 0xc1, 0xc0, //0x000019f3 addq $-64, %r9 - 0x49, 0x89, 0xfb, //0x000019f7 movq %rdi, %r11 - //0x000019fa LBB0_331 - 0x49, 0x83, 0xf9, 0x40, //0x000019fa cmpq $64, %r9 - 0x0f, 0x8c, 0x59, 0x01, 0x00, 0x00, //0x000019fe jl LBB0_339 - //0x00001a04 LBB0_332 - 0xc4, 0x41, 0x7d, 0x6f, 0xfd, //0x00001a04 vmovdqa %ymm13, %ymm15 - 0xc4, 0xc1, 0x7e, 0x6f, 0x0e, //0x00001a09 vmovdqu (%r14), %ymm1 - 0xc4, 0xc1, 0x7e, 0x6f, 0x46, 0x20, //0x00001a0e vmovdqu $32(%r14), %ymm0 - 0xc5, 0xf5, 0x74, 0xd7, //0x00001a14 vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00001a18 vpmovmskb %ymm2, %edx - 0xc5, 0xfd, 0x74, 0xd7, //0x00001a1c vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001a20 vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001a24 shlq $32, %rax - 0x48, 0x09, 0xc2, //0x00001a28 orq %rax, %rdx - 0x48, 0x89, 0xd0, //0x00001a2b movq %rdx, %rax - 0xc4, 0x41, 0x7d, 0x6f, 0xea, //0x00001a2e vmovdqa %ymm10, %ymm13 - 0x4c, 0x09, 0xd0, //0x00001a33 orq %r10, %rax - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001a36 jne LBB0_334 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001a3c movq $-1, %rdx - 0x45, 0x31, 0xd2, //0x00001a43 xorl %r10d, %r10d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001a46 jmp LBB0_335 - //0x00001a4b LBB0_334 - 0x4c, 0x89, 0xd0, //0x00001a4b movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x00001a4e notq %rax - 0x48, 0x21, 0xd0, //0x00001a51 andq %rdx, %rax - 0x48, 0x8d, 0x0c, 0x00, //0x00001a54 leaq (%rax,%rax), %rcx - 0x4c, 0x09, 0xd1, //0x00001a58 orq %r10, %rcx - 0x48, 0x89, 0xce, //0x00001a5b movq %rcx, %rsi - 0x48, 0xf7, 0xd6, //0x00001a5e notq %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001a61 movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfa, //0x00001a6b andq %rdi, %rdx - 0x48, 0x21, 0xf2, //0x00001a6e andq %rsi, %rdx - 0x45, 0x31, 0xd2, //0x00001a71 xorl %r10d, %r10d - 0x48, 0x01, 0xc2, //0x00001a74 addq %rax, %rdx - 0x41, 0x0f, 0x92, 0xc2, //0x00001a77 setb %r10b - 0x48, 0x01, 0xd2, //0x00001a7b addq %rdx, %rdx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001a7e movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc2, //0x00001a88 xorq %rax, %rdx - 0x48, 0x21, 0xca, //0x00001a8b andq %rcx, %rdx - 0x48, 0xf7, 0xd2, //0x00001a8e notq %rdx - //0x00001a91 LBB0_335 - 0xc5, 0xfd, 0x74, 0xd6, //0x00001a91 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001a95 vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001a99 shlq $32, %rax - 0xc5, 0xf5, 0x74, 0xd6, //0x00001a9d vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xca, //0x00001aa1 vpmovmskb %ymm2, %ecx - 0x48, 0x09, 0xc1, //0x00001aa5 orq %rax, %rcx - 0x48, 0x21, 0xd1, //0x00001aa8 andq %rdx, %rcx - 0xc4, 0xe1, 0xf9, 0x6e, 0xd1, //0x00001aab vmovq %rcx, %xmm2 - 0xc4, 0xe3, 0x69, 0x44, 0x15, 0xe6, 0xe5, 0xff, 0xff, 0x00, //0x00001ab0 vpclmulqdq $0, $-6682(%rip), %xmm2, %xmm2 /* LCPI0_26+0(%rip) */ - 0xc4, 0xe1, 0xf9, 0x7e, 0xd7, //0x00001aba vmovq %xmm2, %rdi - 0x4c, 0x31, 0xdf, //0x00001abf xorq %r11, %rdi - 0xc5, 0x7e, 0x6f, 0x15, 0xb6, 0xe6, 0xff, 0xff, //0x00001ac2 vmovdqu $-6474(%rip), %ymm10 /* LCPI0_7+0(%rip) */ - 0xc5, 0xad, 0x74, 0xd1, //0x00001aca vpcmpeqb %ymm1, %ymm10, %ymm2 - 0xc5, 0xfd, 0xd7, 0xf2, //0x00001ace vpmovmskb %ymm2, %esi - 0xc5, 0xad, 0x74, 0xd0, //0x00001ad2 vpcmpeqb %ymm0, %ymm10, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001ad6 vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001ada shlq $32, %rax - 0x48, 0x09, 0xc6, //0x00001ade orq %rax, %rsi - 0x48, 0x89, 0xf8, //0x00001ae1 movq %rdi, %rax - 0x48, 0xf7, 0xd0, //0x00001ae4 notq %rax - 0x48, 0x21, 0xc6, //0x00001ae7 andq %rax, %rsi - 0xc5, 0xfe, 0x6f, 0x15, 0xae, 0xe6, 0xff, 0xff, //0x00001aea vmovdqu $-6482(%rip), %ymm2 /* LCPI0_8+0(%rip) */ - 0xc5, 0xf5, 0x74, 0xca, //0x00001af2 vpcmpeqb %ymm2, %ymm1, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x00001af6 vpmovmskb %ymm1, %edx - 0xc5, 0xfd, 0x74, 0xc2, //0x00001afa vpcmpeqb %ymm2, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc8, //0x00001afe vpmovmskb %ymm0, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00001b02 shlq $32, %rcx - 0x48, 0x09, 0xca, //0x00001b06 orq %rcx, %rdx - 0xc4, 0x41, 0x7d, 0x6f, 0xd5, //0x00001b09 vmovdqa %ymm13, %ymm10 - 0xc4, 0x41, 0x7d, 0x6f, 0xef, //0x00001b0e vmovdqa %ymm15, %ymm13 - 0x48, 0x21, 0xc2, //0x00001b13 andq %rax, %rdx - 0x0f, 0x84, 0xc7, 0xfe, 0xff, 0xff, //0x00001b16 je LBB0_330 - 0xc5, 0x7e, 0x6f, 0x3d, 0x1c, 0xe7, 0xff, 0xff, //0x00001b1c vmovdqu $-6372(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001b24 .p2align 4, 0x90 - //0x00001b30 LBB0_337 - 0x48, 0x8d, 0x4a, 0xff, //0x00001b30 leaq $-1(%rdx), %rcx - 0x48, 0x89, 0xc8, //0x00001b34 movq %rcx, %rax - 0x48, 0x21, 0xf0, //0x00001b37 andq %rsi, %rax - 0xf3, 0x48, 0x0f, 0xb8, 0xc0, //0x00001b3a popcntq %rax, %rax - 0x4c, 0x01, 0xf8, //0x00001b3f addq %r15, %rax - 0x48, 0x39, 0xd8, //0x00001b42 cmpq %rbx, %rax - 0x0f, 0x86, 0x38, 0x04, 0x00, 0x00, //0x00001b45 jbe LBB0_380 - 0x48, 0x83, 0xc3, 0x01, //0x00001b4b addq $1, %rbx - 0x48, 0x21, 0xca, //0x00001b4f andq %rcx, %rdx - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00001b52 jne LBB0_337 - 0xe9, 0x86, 0xfe, 0xff, 0xff, //0x00001b58 jmp LBB0_330 - //0x00001b5d LBB0_339 - 0x4d, 0x85, 0xc9, //0x00001b5d testq %r9, %r9 - 0x0f, 0x8e, 0x17, 0x22, 0x00, 0x00, //0x00001b60 jle LBB0_720 - 0xc5, 0x7d, 0x7f, 0xd9, //0x00001b66 vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00001b6a vmovdqa %ymm13, %ymm11 - 0xc5, 0xf9, 0xef, 0xc0, //0x00001b6f vpxor %xmm0, %xmm0, %xmm0 - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x60, //0x00001b73 vmovdqu %ymm0, $96(%rsp) - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001b79 vmovdqu %ymm0, $64(%rsp) - 0x44, 0x89, 0xf0, //0x00001b7f movl %r14d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00001b82 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00001b87 cmpl $4033, %eax - 0x0f, 0x82, 0x27, 0x00, 0x00, 0x00, //0x00001b8c jb LBB0_343 - 0x49, 0x83, 0xf9, 0x20, //0x00001b92 cmpq $32, %r9 - 0x0f, 0x82, 0x40, 0x00, 0x00, 0x00, //0x00001b96 jb LBB0_344 - 0xc4, 0xc1, 0x7e, 0x6f, 0x06, //0x00001b9c vmovdqu (%r14), %ymm0 - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001ba1 vmovdqu %ymm0, $64(%rsp) - 0x49, 0x83, 0xc6, 0x20, //0x00001ba7 addq $32, %r14 - 0x49, 0x8d, 0x79, 0xe0, //0x00001bab leaq $-32(%r9), %rdi - 0x48, 0x8d, 0x74, 0x24, 0x60, //0x00001baf leaq $96(%rsp), %rsi - 0xe9, 0x2b, 0x00, 0x00, 0x00, //0x00001bb4 jmp LBB0_345 - //0x00001bb9 LBB0_343 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001bb9 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001bbe vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0xd5, 0xe6, 0xff, 0xff, //0x00001bc3 vmovdqu $-6443(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xed, 0xe5, 0xff, 0xff, //0x00001bcb vmovdqu $-6675(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x00001bd3 vmovdqa %ymm1, %ymm11 - 0xe9, 0x28, 0xfe, 0xff, 0xff, //0x00001bd7 jmp LBB0_332 - //0x00001bdc LBB0_344 - 0x48, 0x8d, 0x74, 0x24, 0x40, //0x00001bdc leaq $64(%rsp), %rsi - 0x4c, 0x89, 0xcf, //0x00001be1 movq %r9, %rdi - //0x00001be4 LBB0_345 - 0x48, 0x83, 0xff, 0x10, //0x00001be4 cmpq $16, %rdi - 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00001be8 jb LBB0_346 - 0xc4, 0xc1, 0x7a, 0x6f, 0x06, //0x00001bee vmovdqu (%r14), %xmm0 - 0xc5, 0xfa, 0x7f, 0x06, //0x00001bf3 vmovdqu %xmm0, (%rsi) - 0x49, 0x83, 0xc6, 0x10, //0x00001bf7 addq $16, %r14 - 0x48, 0x83, 0xc6, 0x10, //0x00001bfb addq $16, %rsi - 0x48, 0x83, 0xc7, 0xf0, //0x00001bff addq $-16, %rdi - 0x48, 0x83, 0xff, 0x08, //0x00001c03 cmpq $8, %rdi - 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00001c07 jae LBB0_353 - //0x00001c0d LBB0_347 - 0x48, 0x83, 0xff, 0x04, //0x00001c0d cmpq $4, %rdi - 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x00001c11 jl LBB0_348 - //0x00001c17 LBB0_354 - 0x41, 0x8b, 0x06, //0x00001c17 movl (%r14), %eax - 0x89, 0x06, //0x00001c1a movl %eax, (%rsi) - 0x49, 0x83, 0xc6, 0x04, //0x00001c1c addq $4, %r14 - 0x48, 0x83, 0xc6, 0x04, //0x00001c20 addq $4, %rsi - 0x48, 0x83, 0xc7, 0xfc, //0x00001c24 addq $-4, %rdi - 0x48, 0x83, 0xff, 0x02, //0x00001c28 cmpq $2, %rdi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001c2c jae LBB0_349 - 0xe9, 0x43, 0x00, 0x00, 0x00, //0x00001c32 jmp LBB0_350 - //0x00001c37 LBB0_346 - 0x48, 0x83, 0xff, 0x08, //0x00001c37 cmpq $8, %rdi - 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x00001c3b jb LBB0_347 - //0x00001c41 LBB0_353 - 0x49, 0x8b, 0x06, //0x00001c41 movq (%r14), %rax - 0x48, 0x89, 0x06, //0x00001c44 movq %rax, (%rsi) - 0x49, 0x83, 0xc6, 0x08, //0x00001c47 addq $8, %r14 - 0x48, 0x83, 0xc6, 0x08, //0x00001c4b addq $8, %rsi - 0x48, 0x83, 0xc7, 0xf8, //0x00001c4f addq $-8, %rdi - 0x48, 0x83, 0xff, 0x04, //0x00001c53 cmpq $4, %rdi - 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x00001c57 jge LBB0_354 - //0x00001c5d LBB0_348 - 0x48, 0x83, 0xff, 0x02, //0x00001c5d cmpq $2, %rdi - 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x00001c61 jb LBB0_350 - //0x00001c67 LBB0_349 - 0x41, 0x0f, 0xb7, 0x06, //0x00001c67 movzwl (%r14), %eax - 0x66, 0x89, 0x06, //0x00001c6b movw %ax, (%rsi) - 0x49, 0x83, 0xc6, 0x02, //0x00001c6e addq $2, %r14 - 0x48, 0x83, 0xc6, 0x02, //0x00001c72 addq $2, %rsi - 0x48, 0x83, 0xc7, 0xfe, //0x00001c76 addq $-2, %rdi - //0x00001c7a LBB0_350 - 0x4c, 0x89, 0xf2, //0x00001c7a movq %r14, %rdx - 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001c7d leaq $64(%rsp), %r14 - 0x48, 0x85, 0xff, //0x00001c82 testq %rdi, %rdi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001c85 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001c8a vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x09, 0xe6, 0xff, 0xff, //0x00001c8f vmovdqu $-6647(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x21, 0xe5, 0xff, 0xff, //0x00001c97 vmovdqu $-6879(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x00001c9f vmovdqa %ymm1, %ymm11 - 0x0f, 0x84, 0x5b, 0xfd, 0xff, 0xff, //0x00001ca3 je LBB0_332 - 0x8a, 0x02, //0x00001ca9 movb (%rdx), %al - 0x88, 0x06, //0x00001cab movb %al, (%rsi) - 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001cad leaq $64(%rsp), %r14 - 0xe9, 0x4d, 0xfd, 0xff, 0xff, //0x00001cb2 jmp LBB0_332 - //0x00001cb7 LBB0_355 - 0x4c, 0x8b, 0x4f, 0x08, //0x00001cb7 movq $8(%rdi), %r9 - 0x4d, 0x8b, 0x45, 0x00, //0x00001cbb movq (%r13), %r8 - 0x4d, 0x29, 0xc1, //0x00001cbf subq %r8, %r9 - 0x4d, 0x01, 0xc6, //0x00001cc2 addq %r8, %r14 - 0x45, 0x31, 0xdb, //0x00001cc5 xorl %r11d, %r11d - 0x45, 0x31, 0xd2, //0x00001cc8 xorl %r10d, %r10d - 0x45, 0x31, 0xff, //0x00001ccb xorl %r15d, %r15d - 0x31, 0xdb, //0x00001cce xorl %ebx, %ebx - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00001cd0 jmp LBB0_357 - //0x00001cd5 LBB0_356 - 0x48, 0xc1, 0xff, 0x3f, //0x00001cd5 sarq $63, %rdi - 0xf3, 0x48, 0x0f, 0xb8, 0xc6, //0x00001cd9 popcntq %rsi, %rax - 0x49, 0x01, 0xc7, //0x00001cde addq %rax, %r15 - 0x49, 0x83, 0xc6, 0x40, //0x00001ce1 addq $64, %r14 - 0x49, 0x83, 0xc1, 0xc0, //0x00001ce5 addq $-64, %r9 - 0x49, 0x89, 0xfb, //0x00001ce9 movq %rdi, %r11 - //0x00001cec LBB0_357 - 0x49, 0x83, 0xf9, 0x40, //0x00001cec cmpq $64, %r9 - 0x0f, 0x8c, 0x27, 0x01, 0x00, 0x00, //0x00001cf0 jl LBB0_364 - //0x00001cf6 LBB0_358 - 0xc4, 0xc1, 0x7e, 0x6f, 0x0e, //0x00001cf6 vmovdqu (%r14), %ymm1 - 0xc4, 0xc1, 0x7e, 0x6f, 0x46, 0x20, //0x00001cfb vmovdqu $32(%r14), %ymm0 - 0xc5, 0xf5, 0x74, 0xd7, //0x00001d01 vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00001d05 vpmovmskb %ymm2, %edx - 0xc5, 0xfd, 0x74, 0xd7, //0x00001d09 vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001d0d vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001d11 shlq $32, %rax - 0x48, 0x09, 0xc2, //0x00001d15 orq %rax, %rdx - 0x48, 0x89, 0xd0, //0x00001d18 movq %rdx, %rax - 0x4c, 0x09, 0xd0, //0x00001d1b orq %r10, %rax - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001d1e jne LBB0_360 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001d24 movq $-1, %rdx - 0x45, 0x31, 0xd2, //0x00001d2b xorl %r10d, %r10d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001d2e jmp LBB0_361 - //0x00001d33 LBB0_360 - 0x4c, 0x89, 0xd0, //0x00001d33 movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x00001d36 notq %rax - 0x48, 0x21, 0xd0, //0x00001d39 andq %rdx, %rax - 0x48, 0x8d, 0x0c, 0x00, //0x00001d3c leaq (%rax,%rax), %rcx - 0x4c, 0x09, 0xd1, //0x00001d40 orq %r10, %rcx - 0x48, 0x89, 0xce, //0x00001d43 movq %rcx, %rsi - 0x48, 0xf7, 0xd6, //0x00001d46 notq %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001d49 movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfa, //0x00001d53 andq %rdi, %rdx - 0x48, 0x21, 0xf2, //0x00001d56 andq %rsi, %rdx - 0x45, 0x31, 0xd2, //0x00001d59 xorl %r10d, %r10d - 0x48, 0x01, 0xc2, //0x00001d5c addq %rax, %rdx - 0x41, 0x0f, 0x92, 0xc2, //0x00001d5f setb %r10b - 0x48, 0x01, 0xd2, //0x00001d63 addq %rdx, %rdx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001d66 movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc2, //0x00001d70 xorq %rax, %rdx - 0x48, 0x21, 0xca, //0x00001d73 andq %rcx, %rdx - 0x48, 0xf7, 0xd2, //0x00001d76 notq %rdx - //0x00001d79 LBB0_361 - 0xc5, 0xfd, 0x74, 0xd6, //0x00001d79 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001d7d vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001d81 shlq $32, %rax - 0xc5, 0xf5, 0x74, 0xd6, //0x00001d85 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xca, //0x00001d89 vpmovmskb %ymm2, %ecx - 0x48, 0x09, 0xc1, //0x00001d8d orq %rax, %rcx - 0x48, 0x21, 0xd1, //0x00001d90 andq %rdx, %rcx - 0xc4, 0xe1, 0xf9, 0x6e, 0xd1, //0x00001d93 vmovq %rcx, %xmm2 - 0xc4, 0xe3, 0x69, 0x44, 0x15, 0xfe, 0xe2, 0xff, 0xff, 0x00, //0x00001d98 vpclmulqdq $0, $-7426(%rip), %xmm2, %xmm2 /* LCPI0_26+0(%rip) */ - 0xc4, 0xe1, 0xf9, 0x7e, 0xd7, //0x00001da2 vmovq %xmm2, %rdi - 0x4c, 0x31, 0xdf, //0x00001da7 xorq %r11, %rdi - 0xc5, 0xa5, 0x74, 0xd1, //0x00001daa vpcmpeqb %ymm1, %ymm11, %ymm2 - 0xc5, 0xfd, 0xd7, 0xf2, //0x00001dae vpmovmskb %ymm2, %esi - 0xc5, 0xa5, 0x74, 0xd0, //0x00001db2 vpcmpeqb %ymm0, %ymm11, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001db6 vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001dba shlq $32, %rax - 0x48, 0x09, 0xc6, //0x00001dbe orq %rax, %rsi - 0x48, 0x89, 0xf8, //0x00001dc1 movq %rdi, %rax - 0x48, 0xf7, 0xd0, //0x00001dc4 notq %rax - 0x48, 0x21, 0xc6, //0x00001dc7 andq %rax, %rsi - 0xc5, 0x9d, 0x74, 0xc9, //0x00001dca vpcmpeqb %ymm1, %ymm12, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x00001dce vpmovmskb %ymm1, %edx - 0xc5, 0x9d, 0x74, 0xc0, //0x00001dd2 vpcmpeqb %ymm0, %ymm12, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc8, //0x00001dd6 vpmovmskb %ymm0, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00001dda shlq $32, %rcx - 0x48, 0x09, 0xca, //0x00001dde orq %rcx, %rdx - 0x48, 0x21, 0xc2, //0x00001de1 andq %rax, %rdx - 0x0f, 0x84, 0xeb, 0xfe, 0xff, 0xff, //0x00001de4 je LBB0_356 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001dea .p2align 4, 0x90 - //0x00001df0 LBB0_362 - 0x48, 0x8d, 0x4a, 0xff, //0x00001df0 leaq $-1(%rdx), %rcx - 0x48, 0x89, 0xc8, //0x00001df4 movq %rcx, %rax - 0x48, 0x21, 0xf0, //0x00001df7 andq %rsi, %rax - 0xf3, 0x48, 0x0f, 0xb8, 0xc0, //0x00001dfa popcntq %rax, %rax - 0x4c, 0x01, 0xf8, //0x00001dff addq %r15, %rax - 0x48, 0x39, 0xd8, //0x00001e02 cmpq %rbx, %rax - 0x0f, 0x86, 0x78, 0x01, 0x00, 0x00, //0x00001e05 jbe LBB0_380 + 0x48, 0x8b, 0x44, 0x24, 0x18, //0x000003a0 movq $24(%rsp), %rax + 0x4c, 0x8b, 0x00, //0x000003a5 movq (%rax), %r8 + 0x4c, 0x89, 0xe0, //0x000003a8 movq %r12, %rax + 0x4d, 0x85, 0xc0, //0x000003ab testq %r8, %r8 + 0x0f, 0x85, 0x4c, 0x00, 0x00, 0x00, //0x000003ae jne LBB0_5 + 0xe9, 0x5c, 0x39, 0x00, 0x00, //0x000003b4 jmp LBB0_728 + //0x000003b9 LBB0_1 + 0x4d, 0x29, 0xf0, //0x000003b9 subq %r14, %r8 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x000003bc movq $8(%rsp), %r15 + 0x4d, 0x89, 0x07, //0x000003c1 movq %r8, (%r15) + 0x4c, 0x8b, 0x1c, 0x24, //0x000003c4 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000003c8 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000003cd vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xc6, 0xfe, 0xff, 0xff, //0x000003d2 vmovdqu $-314(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xde, 0xfd, 0xff, 0xff, //0x000003da vmovdqu $-546(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000003e2 vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x000003e6 vmovdqa %ymm1, %ymm12 + //0x000003ea LBB0_2 + 0x4d, 0x85, 0xed, //0x000003ea testq %r13, %r13 + 0x0f, 0x8f, 0xad, 0xff, 0xff, 0xff, //0x000003ed jg LBB0_3 + 0xe9, 0xee, 0x38, 0x00, 0x00, //0x000003f3 jmp LBB0_705 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000003f8 .p2align 4, 0x90 + //0x00000400 LBB0_5 + 0x4c, 0x89, 0xe1, //0x00000400 movq %r12, %rcx + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x00000403 movq $32(%rsp), %rax + 0x4c, 0x8b, 0x30, //0x00000408 movq (%rax), %r14 + 0x48, 0x8b, 0x78, 0x08, //0x0000040b movq $8(%rax), %rdi + 0x49, 0x8b, 0x17, //0x0000040f movq (%r15), %rdx + 0x48, 0x39, 0xfa, //0x00000412 cmpq %rdi, %rdx + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00000415 jae LBB0_10 + 0x41, 0x8a, 0x04, 0x16, //0x0000041b movb (%r14,%rdx), %al + 0x3c, 0x0d, //0x0000041f cmpb $13, %al + 0x0f, 0x84, 0x29, 0x00, 0x00, 0x00, //0x00000421 je LBB0_10 + 0x3c, 0x20, //0x00000427 cmpb $32, %al + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00000429 je LBB0_10 + 0x04, 0xf7, //0x0000042f addb $-9, %al + 0x3c, 0x01, //0x00000431 cmpb $1, %al + 0x0f, 0x86, 0x17, 0x00, 0x00, 0x00, //0x00000433 jbe LBB0_10 + 0x49, 0x89, 0xd4, //0x00000439 movq %rdx, %r12 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x0000043c movq $24(%rsp), %r10 + 0xe9, 0x8c, 0x01, 0x00, 0x00, //0x00000441 jmp LBB0_35 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000446 .p2align 4, 0x90 + //0x00000450 LBB0_10 + 0x4c, 0x8d, 0x62, 0x01, //0x00000450 leaq $1(%rdx), %r12 + 0x49, 0x39, 0xfc, //0x00000454 cmpq %rdi, %r12 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00000457 movq $24(%rsp), %r10 + 0x0f, 0x83, 0x2e, 0x00, 0x00, 0x00, //0x0000045c jae LBB0_14 + 0x43, 0x8a, 0x1c, 0x26, //0x00000462 movb (%r14,%r12), %bl + 0x80, 0xfb, 0x0d, //0x00000466 cmpb $13, %bl + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00000469 je LBB0_14 + 0x80, 0xfb, 0x20, //0x0000046f cmpb $32, %bl + 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x00000472 je LBB0_14 + 0x80, 0xc3, 0xf7, //0x00000478 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x0000047b cmpb $1, %bl + 0x0f, 0x87, 0x4e, 0x01, 0x00, 0x00, //0x0000047e ja LBB0_35 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000484 .p2align 4, 0x90 + //0x00000490 LBB0_14 + 0x4c, 0x8d, 0x62, 0x02, //0x00000490 leaq $2(%rdx), %r12 + 0x49, 0x39, 0xfc, //0x00000494 cmpq %rdi, %r12 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000497 jae LBB0_18 + 0x43, 0x8a, 0x1c, 0x26, //0x0000049d movb (%r14,%r12), %bl + 0x80, 0xfb, 0x0d, //0x000004a1 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000004a4 je LBB0_18 + 0x80, 0xfb, 0x20, //0x000004aa cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000004ad je LBB0_18 + 0x80, 0xc3, 0xf7, //0x000004b3 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000004b6 cmpb $1, %bl + 0x0f, 0x87, 0x13, 0x01, 0x00, 0x00, //0x000004b9 ja LBB0_35 + 0x90, //0x000004bf .p2align 4, 0x90 + //0x000004c0 LBB0_18 + 0x4c, 0x8d, 0x62, 0x03, //0x000004c0 leaq $3(%rdx), %r12 + 0x49, 0x39, 0xfc, //0x000004c4 cmpq %rdi, %r12 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000004c7 jae LBB0_22 + 0x43, 0x8a, 0x1c, 0x26, //0x000004cd movb (%r14,%r12), %bl + 0x80, 0xfb, 0x0d, //0x000004d1 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000004d4 je LBB0_22 + 0x80, 0xfb, 0x20, //0x000004da cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000004dd je LBB0_22 + 0x80, 0xc3, 0xf7, //0x000004e3 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000004e6 cmpb $1, %bl + 0x0f, 0x87, 0xe3, 0x00, 0x00, 0x00, //0x000004e9 ja LBB0_35 + 0x90, //0x000004ef .p2align 4, 0x90 + //0x000004f0 LBB0_22 + 0x4c, 0x8d, 0x62, 0x04, //0x000004f0 leaq $4(%rdx), %r12 + 0x48, 0x89, 0xfe, //0x000004f4 movq %rdi, %rsi + 0x4c, 0x29, 0xe6, //0x000004f7 subq %r12, %rsi + 0x0f, 0x86, 0x9a, 0x37, 0x00, 0x00, //0x000004fa jbe LBB0_697 + 0x48, 0x83, 0xfe, 0x20, //0x00000500 cmpq $32, %rsi + 0x0f, 0x82, 0x3e, 0x25, 0x00, 0x00, //0x00000504 jb LBB0_504 + 0x48, 0xc7, 0xc6, 0xfc, 0xff, 0xff, 0xff, //0x0000050a movq $-4, %rsi + 0x48, 0x29, 0xd6, //0x00000511 subq %rdx, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000514 .p2align 4, 0x90 + //0x00000520 LBB0_25 + 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x26, //0x00000520 vmovdqu (%r14,%r12), %ymm0 + 0xc4, 0xe2, 0x55, 0x00, 0xc8, //0x00000526 vpshufb %ymm0, %ymm5, %ymm1 + 0xc5, 0xfd, 0x74, 0xc1, //0x0000052b vpcmpeqb %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x0000052f vpmovmskb %ymm0, %edx + 0x83, 0xfa, 0xff, //0x00000533 cmpl $-1, %edx + 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x00000536 jne LBB0_34 + 0x49, 0x83, 0xc4, 0x20, //0x0000053c addq $32, %r12 + 0x48, 0x8d, 0x04, 0x37, //0x00000540 leaq (%rdi,%rsi), %rax + 0x48, 0x83, 0xc0, 0xe0, //0x00000544 addq $-32, %rax + 0x48, 0x83, 0xc6, 0xe0, //0x00000548 addq $-32, %rsi + 0x48, 0x83, 0xf8, 0x1f, //0x0000054c cmpq $31, %rax + 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00000550 ja LBB0_25 + 0x4d, 0x89, 0xf4, //0x00000556 movq %r14, %r12 + 0x49, 0x29, 0xf4, //0x00000559 subq %rsi, %r12 + 0x48, 0x01, 0xfe, //0x0000055c addq %rdi, %rsi + 0x48, 0x85, 0xf6, //0x0000055f testq %rsi, %rsi + 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00000562 je LBB0_33 + //0x00000568 LBB0_28 + 0x4d, 0x8d, 0x04, 0x34, //0x00000568 leaq (%r12,%rsi), %r8 + 0x31, 0xd2, //0x0000056c xorl %edx, %edx + 0x90, 0x90, //0x0000056e .p2align 4, 0x90 + //0x00000570 LBB0_29 + 0x41, 0x0f, 0xbe, 0x04, 0x14, //0x00000570 movsbl (%r12,%rdx), %eax + 0x83, 0xf8, 0x20, //0x00000575 cmpl $32, %eax + 0x0f, 0x87, 0x23, 0x21, 0x00, 0x00, //0x00000578 ja LBB0_468 + 0x48, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000057e movabsq $4294977024, %rbx + 0x48, 0x0f, 0xa3, 0xc3, //0x00000588 btq %rax, %rbx + 0x0f, 0x83, 0x0f, 0x21, 0x00, 0x00, //0x0000058c jae LBB0_468 + 0x48, 0x83, 0xc2, 0x01, //0x00000592 addq $1, %rdx + 0x48, 0x39, 0xd6, //0x00000596 cmpq %rdx, %rsi + 0x0f, 0x85, 0xd1, 0xff, 0xff, 0xff, //0x00000599 jne LBB0_29 + 0x4d, 0x89, 0xc4, //0x0000059f movq %r8, %r12 + //0x000005a2 LBB0_33 + 0x4d, 0x29, 0xf4, //0x000005a2 subq %r14, %r12 + 0x49, 0x39, 0xfc, //0x000005a5 cmpq %rdi, %r12 + 0x0f, 0x82, 0x24, 0x00, 0x00, 0x00, //0x000005a8 jb LBB0_35 + 0xe9, 0xea, 0x36, 0x00, 0x00, //0x000005ae jmp LBB0_698 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000005b3 .p2align 4, 0x90 + //0x000005c0 LBB0_34 + 0xf7, 0xd2, //0x000005c0 notl %edx + 0x44, 0x0f, 0xbc, 0xe2, //0x000005c2 bsfl %edx, %r12d + 0x49, 0x29, 0xf4, //0x000005c6 subq %rsi, %r12 + 0x49, 0x39, 0xfc, //0x000005c9 cmpq %rdi, %r12 + 0x0f, 0x83, 0xcb, 0x36, 0x00, 0x00, //0x000005cc jae LBB0_698 + //0x000005d2 LBB0_35 + 0x49, 0x8d, 0x44, 0x24, 0x01, //0x000005d2 leaq $1(%r12), %rax + 0x49, 0x89, 0x07, //0x000005d7 movq %rax, (%r15) + 0x43, 0x0f, 0xbe, 0x3c, 0x26, //0x000005da movsbl (%r14,%r12), %edi + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000005df movq $-1, %rax + 0x85, 0xff, //0x000005e6 testl %edi, %edi + 0x0f, 0x84, 0x27, 0x37, 0x00, 0x00, //0x000005e8 je LBB0_728 + 0x49, 0x8b, 0x32, //0x000005ee movq (%r10), %rsi + 0x4c, 0x8d, 0x46, 0xff, //0x000005f1 leaq $-1(%rsi), %r8 + 0x41, 0x8b, 0x1c, 0xf2, //0x000005f5 movl (%r10,%rsi,8), %ebx + 0x48, 0x83, 0xf9, 0xff, //0x000005f9 cmpq $-1, %rcx + 0x4c, 0x0f, 0x45, 0xe1, //0x000005fd cmovneq %rcx, %r12 + 0x83, 0xc3, 0xff, //0x00000601 addl $-1, %ebx + 0x83, 0xfb, 0x05, //0x00000604 cmpl $5, %ebx + 0x0f, 0x87, 0x27, 0x00, 0x00, 0x00, //0x00000607 ja LBB0_41 + 0x48, 0x8d, 0x15, 0xc4, 0x38, 0x00, 0x00, //0x0000060d leaq $14532(%rip), %rdx /* LJTI0_0+0(%rip) */ + 0x48, 0x63, 0x0c, 0x9a, //0x00000614 movslq (%rdx,%rbx,4), %rcx + 0x48, 0x01, 0xd1, //0x00000618 addq %rdx, %rcx + 0xff, 0xe1, //0x0000061b jmpq *%rcx + //0x0000061d LBB0_38 + 0x83, 0xff, 0x2c, //0x0000061d cmpl $44, %edi + 0x0f, 0x84, 0x4e, 0x02, 0x00, 0x00, //0x00000620 je LBB0_76 + 0x83, 0xff, 0x5d, //0x00000626 cmpl $93, %edi + 0x0f, 0x84, 0x31, 0x02, 0x00, 0x00, //0x00000629 je LBB0_40 + 0xe9, 0xda, 0x36, 0x00, 0x00, //0x0000062f jmp LBB0_727 + //0x00000634 LBB0_41 + 0x4d, 0x89, 0x02, //0x00000634 movq %r8, (%r10) + 0x83, 0xff, 0x7b, //0x00000637 cmpl $123, %edi + 0x0f, 0x86, 0xaf, 0x01, 0x00, 0x00, //0x0000063a jbe LBB0_68 + 0xe9, 0xc9, 0x36, 0x00, 0x00, //0x00000640 jmp LBB0_727 + //0x00000645 LBB0_42 + 0x83, 0xff, 0x2c, //0x00000645 cmpl $44, %edi + 0x0f, 0x85, 0x09, 0x02, 0x00, 0x00, //0x00000648 jne LBB0_43 + 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x0000064e cmpq $4095, %rsi + 0x0f, 0x8f, 0x4e, 0x36, 0x00, 0x00, //0x00000655 jg LBB0_724 + 0x48, 0x8d, 0x46, 0x01, //0x0000065b leaq $1(%rsi), %rax + 0x49, 0x89, 0x02, //0x0000065f movq %rax, (%r10) + 0x49, 0xc7, 0x44, 0xf2, 0x08, 0x03, 0x00, 0x00, 0x00, //0x00000662 movq $3, $8(%r10,%rsi,8) + 0xe9, 0x30, 0xfd, 0xff, 0xff, //0x0000066b jmp LBB0_3 + //0x00000670 LBB0_44 + 0x40, 0x80, 0xff, 0x22, //0x00000670 cmpb $34, %dil + 0x0f, 0x85, 0x94, 0x36, 0x00, 0x00, //0x00000674 jne LBB0_727 + 0x49, 0xc7, 0x04, 0xf2, 0x04, 0x00, 0x00, 0x00, //0x0000067a movq $4, (%r10,%rsi,8) + 0x41, 0xf6, 0xc3, 0x40, //0x00000682 testb $64, %r11b + 0x0f, 0x85, 0x4d, 0x03, 0x00, 0x00, //0x00000686 jne LBB0_99 + 0x4d, 0x8b, 0x0f, //0x0000068c movq (%r15), %r9 + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x0000068f movq $32(%rsp), %rax + 0x4c, 0x8b, 0x40, 0x08, //0x00000694 movq $8(%rax), %r8 + 0x41, 0xf6, 0xc3, 0x20, //0x00000698 testb $32, %r11b + 0x0f, 0x85, 0xd6, 0x06, 0x00, 0x00, //0x0000069c jne LBB0_143 + 0x4d, 0x89, 0xc3, //0x000006a2 movq %r8, %r11 + 0x4d, 0x29, 0xcb, //0x000006a5 subq %r9, %r11 + 0x0f, 0x84, 0xd0, 0x37, 0x00, 0x00, //0x000006a8 je LBB0_732 + 0x49, 0x83, 0xfb, 0x40, //0x000006ae cmpq $64, %r11 + 0x0f, 0x82, 0x5e, 0x26, 0x00, 0x00, //0x000006b2 jb LBB0_531 + 0x4c, 0x89, 0xce, //0x000006b8 movq %r9, %rsi + 0x48, 0xf7, 0xd6, //0x000006bb notq %rsi + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000006be movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x000006c5 movq %r9, %rax + 0x45, 0x31, 0xd2, //0x000006c8 xorl %r10d, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000006cb .p2align 4, 0x90 + //0x000006d0 LBB0_50 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x000006d0 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x000006d6 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x000006dd vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x000006e1 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd6, //0x000006e5 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x000006e9 vpmovmskb %ymm2, %ecx + 0xc5, 0xfd, 0x74, 0xc7, //0x000006ed vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf8, //0x000006f1 vpmovmskb %ymm0, %edi + 0xc5, 0xf5, 0x74, 0xc7, //0x000006f5 vpcmpeqb %ymm7, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd8, //0x000006f9 vpmovmskb %ymm0, %ebx + 0x48, 0xc1, 0xe1, 0x20, //0x000006fd shlq $32, %rcx + 0x48, 0x09, 0xca, //0x00000701 orq %rcx, %rdx + 0x48, 0xc1, 0xe3, 0x20, //0x00000704 shlq $32, %rbx + 0x48, 0x09, 0xdf, //0x00000708 orq %rbx, %rdi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000070b jne LBB0_59 + 0x4d, 0x85, 0xd2, //0x00000711 testq %r10, %r10 + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x00000714 jne LBB0_61 + 0x45, 0x31, 0xd2, //0x0000071a xorl %r10d, %r10d + 0x48, 0x85, 0xd2, //0x0000071d testq %rdx, %rdx + 0x0f, 0x85, 0x7e, 0x00, 0x00, 0x00, //0x00000720 jne LBB0_62 + //0x00000726 LBB0_53 + 0x49, 0x83, 0xc3, 0xc0, //0x00000726 addq $-64, %r11 + 0x48, 0x83, 0xc6, 0xc0, //0x0000072a addq $-64, %rsi + 0x48, 0x83, 0xc0, 0x40, //0x0000072e addq $64, %rax + 0x49, 0x83, 0xfb, 0x3f, //0x00000732 cmpq $63, %r11 + 0x0f, 0x87, 0x94, 0xff, 0xff, 0xff, //0x00000736 ja LBB0_50 + 0xe9, 0x0b, 0x22, 0x00, 0x00, //0x0000073c jmp LBB0_54 + //0x00000741 LBB0_59 + 0x49, 0x83, 0xff, 0xff, //0x00000741 cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00000745 jne LBB0_61 + 0x4c, 0x0f, 0xbc, 0xff, //0x0000074b bsfq %rdi, %r15 + 0x49, 0x01, 0xc7, //0x0000074f addq %rax, %r15 + //0x00000752 LBB0_61 + 0x4c, 0x89, 0xd1, //0x00000752 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00000755 notq %rcx + 0x48, 0x21, 0xf9, //0x00000758 andq %rdi, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x0000075b leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xd5, //0x0000075f orq %r10, %r13 + 0x4c, 0x89, 0xeb, //0x00000762 movq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00000765 notq %rbx + 0x48, 0x21, 0xfb, //0x00000768 andq %rdi, %rbx + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000076b movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfb, //0x00000775 andq %rdi, %rbx + 0x45, 0x31, 0xd2, //0x00000778 xorl %r10d, %r10d + 0x48, 0x01, 0xcb, //0x0000077b addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc2, //0x0000077e setb %r10b + 0x48, 0x01, 0xdb, //0x00000782 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000785 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x0000078f xorq %rcx, %rbx + 0x4c, 0x21, 0xeb, //0x00000792 andq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00000795 notq %rbx + 0x48, 0x21, 0xda, //0x00000798 andq %rbx, %rdx + 0x48, 0x85, 0xd2, //0x0000079b testq %rdx, %rdx + 0x0f, 0x84, 0x82, 0xff, 0xff, 0xff, //0x0000079e je LBB0_53 + //0x000007a4 LBB0_62 + 0x48, 0x0f, 0xbc, 0xc2, //0x000007a4 bsfq %rdx, %rax + 0x48, 0x29, 0xf0, //0x000007a8 subq %rsi, %rax + //0x000007ab LBB0_63 + 0x4c, 0x8b, 0x1c, 0x24, //0x000007ab movq (%rsp), %r11 + 0x48, 0x85, 0xc0, //0x000007af testq %rax, %rax + 0x0f, 0x89, 0xd4, 0xfb, 0xff, 0xff, //0x000007b2 jns LBB0_237 + 0xe9, 0x04, 0x35, 0x00, 0x00, //0x000007b8 jmp LBB0_702 + //0x000007bd LBB0_64 + 0x40, 0x80, 0xff, 0x3a, //0x000007bd cmpb $58, %dil + 0x0f, 0x85, 0x47, 0x35, 0x00, 0x00, //0x000007c1 jne LBB0_727 + 0x49, 0xc7, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x00, //0x000007c7 movq $0, (%r10,%rsi,8) + 0xe9, 0xcc, 0xfb, 0xff, 0xff, //0x000007cf jmp LBB0_3 + //0x000007d4 LBB0_66 + 0x40, 0x80, 0xff, 0x5d, //0x000007d4 cmpb $93, %dil + 0x0f, 0x84, 0x82, 0x00, 0x00, 0x00, //0x000007d8 je LBB0_40 + 0x49, 0xc7, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x00, //0x000007de movq $1, (%r10,%rsi,8) + 0x83, 0xff, 0x7b, //0x000007e6 cmpl $123, %edi + 0x0f, 0x87, 0x1f, 0x35, 0x00, 0x00, //0x000007e9 ja LBB0_727 + //0x000007ef LBB0_68 + 0x89, 0xf9, //0x000007ef movl %edi, %ecx + 0x48, 0x8d, 0x15, 0xf8, 0x36, 0x00, 0x00, //0x000007f1 leaq $14072(%rip), %rdx /* LJTI0_1+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8a, //0x000007f8 movslq (%rdx,%rcx,4), %rcx + 0x48, 0x01, 0xd1, //0x000007fc addq %rdx, %rcx + 0xff, 0xe1, //0x000007ff jmpq *%rcx + //0x00000801 LBB0_71 + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x00000801 movq $32(%rsp), %rax + 0x4c, 0x8b, 0x48, 0x08, //0x00000806 movq $8(%rax), %r9 + 0x4d, 0x8b, 0x2f, //0x0000080a movq (%r15), %r13 + 0x41, 0xf6, 0xc3, 0x40, //0x0000080d testb $64, %r11b + 0x0f, 0x85, 0xac, 0x02, 0x00, 0x00, //0x00000811 jne LBB0_111 + 0x49, 0x8d, 0x45, 0xff, //0x00000817 leaq $-1(%r13), %rax + 0x49, 0x29, 0xc1, //0x0000081b subq %rax, %r9 + 0x0f, 0x84, 0xce, 0x34, 0x00, 0x00, //0x0000081e je LBB0_706 + 0x4f, 0x8d, 0x04, 0x2e, //0x00000824 leaq (%r14,%r13), %r8 + 0x49, 0x83, 0xc0, 0xff, //0x00000828 addq $-1, %r8 + 0x41, 0x80, 0x38, 0x30, //0x0000082c cmpb $48, (%r8) + 0x0f, 0x85, 0x0a, 0x08, 0x00, 0x00, //0x00000830 jne LBB0_184 + 0x41, 0xba, 0x01, 0x00, 0x00, 0x00, //0x00000836 movl $1, %r10d + 0x49, 0x83, 0xf9, 0x01, //0x0000083c cmpq $1, %r9 + 0x0f, 0x85, 0xd0, 0x07, 0x00, 0x00, //0x00000840 jne LBB0_182 + //0x00000846 LBB0_75 + 0x48, 0x89, 0xc1, //0x00000846 movq %rax, %rcx + 0xe9, 0xe0, 0x0f, 0x00, 0x00, //0x00000849 jmp LBB0_296 + //0x0000084e LBB0_69 + 0x83, 0xff, 0x22, //0x0000084e cmpl $34, %edi + 0x0f, 0x84, 0x3f, 0x00, 0x00, 0x00, //0x00000851 je LBB0_80 + //0x00000857 LBB0_43 + 0x83, 0xff, 0x7d, //0x00000857 cmpl $125, %edi + 0x0f, 0x85, 0xae, 0x34, 0x00, 0x00, //0x0000085a jne LBB0_727 + //0x00000860 LBB0_40 + 0x4d, 0x89, 0x02, //0x00000860 movq %r8, (%r10) + 0x4c, 0x89, 0xe0, //0x00000863 movq %r12, %rax + 0x4d, 0x85, 0xc0, //0x00000866 testq %r8, %r8 + 0x0f, 0x85, 0x91, 0xfb, 0xff, 0xff, //0x00000869 jne LBB0_5 + 0xe9, 0xa1, 0x34, 0x00, 0x00, //0x0000086f jmp LBB0_728 + //0x00000874 LBB0_76 + 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00000874 cmpq $4095, %rsi + 0x0f, 0x8f, 0x28, 0x34, 0x00, 0x00, //0x0000087b jg LBB0_724 + 0x48, 0x8d, 0x46, 0x01, //0x00000881 leaq $1(%rsi), %rax + 0x49, 0x89, 0x02, //0x00000885 movq %rax, (%r10) + 0x49, 0xc7, 0x44, 0xf2, 0x08, 0x00, 0x00, 0x00, 0x00, //0x00000888 movq $0, $8(%r10,%rsi,8) + 0xe9, 0x0a, 0xfb, 0xff, 0xff, //0x00000891 jmp LBB0_3 + //0x00000896 LBB0_80 + 0x49, 0xc7, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x00, //0x00000896 movq $2, (%r10,%rsi,8) + 0x41, 0xf6, 0xc3, 0x40, //0x0000089e testb $64, %r11b + 0x0f, 0x85, 0xdd, 0x03, 0x00, 0x00, //0x000008a2 jne LBB0_132 + 0x4d, 0x8b, 0x0f, //0x000008a8 movq (%r15), %r9 + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x000008ab movq $32(%rsp), %rax + 0x4c, 0x8b, 0x40, 0x08, //0x000008b0 movq $8(%rax), %r8 + 0x41, 0xf6, 0xc3, 0x20, //0x000008b4 testb $32, %r11b + 0x0f, 0x85, 0x03, 0x06, 0x00, 0x00, //0x000008b8 jne LBB0_163 + 0x4d, 0x89, 0xc3, //0x000008be movq %r8, %r11 + 0x4d, 0x29, 0xcb, //0x000008c1 subq %r9, %r11 + 0x0f, 0x84, 0xb4, 0x35, 0x00, 0x00, //0x000008c4 je LBB0_732 + 0x49, 0x83, 0xfb, 0x40, //0x000008ca cmpq $64, %r11 + 0x0f, 0x82, 0x92, 0x24, 0x00, 0x00, //0x000008ce jb LBB0_536 + 0x4c, 0x89, 0xce, //0x000008d4 movq %r9, %rsi + 0x48, 0xf7, 0xd6, //0x000008d7 notq %rsi + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000008da movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x000008e1 movq %r9, %rax + 0x45, 0x31, 0xd2, //0x000008e4 xorl %r10d, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000008e7 .p2align 4, 0x90 + //0x000008f0 LBB0_85 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x000008f0 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x000008f6 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x000008fd vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00000901 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd6, //0x00000905 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x00000909 vpmovmskb %ymm2, %ebx + 0xc5, 0xfd, 0x74, 0xc7, //0x0000090d vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf8, //0x00000911 vpmovmskb %ymm0, %edi + 0xc5, 0xf5, 0x74, 0xc7, //0x00000915 vpcmpeqb %ymm7, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x00000919 vpmovmskb %ymm0, %ecx + 0x48, 0xc1, 0xe3, 0x20, //0x0000091d shlq $32, %rbx + 0x48, 0x09, 0xda, //0x00000921 orq %rbx, %rdx + 0x48, 0xc1, 0xe1, 0x20, //0x00000924 shlq $32, %rcx + 0x48, 0x09, 0xcf, //0x00000928 orq %rcx, %rdi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000092b jne LBB0_94 + 0x4d, 0x85, 0xd2, //0x00000931 testq %r10, %r10 + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x00000934 jne LBB0_96 + 0x45, 0x31, 0xd2, //0x0000093a xorl %r10d, %r10d + 0x48, 0x85, 0xd2, //0x0000093d testq %rdx, %rdx + 0x0f, 0x85, 0x7e, 0x00, 0x00, 0x00, //0x00000940 jne LBB0_97 + //0x00000946 LBB0_88 + 0x49, 0x83, 0xc3, 0xc0, //0x00000946 addq $-64, %r11 + 0x48, 0x83, 0xc6, 0xc0, //0x0000094a addq $-64, %rsi + 0x48, 0x83, 0xc0, 0x40, //0x0000094e addq $64, %rax + 0x49, 0x83, 0xfb, 0x3f, //0x00000952 cmpq $63, %r11 + 0x0f, 0x87, 0x94, 0xff, 0xff, 0xff, //0x00000956 ja LBB0_85 + 0xe9, 0xf8, 0x20, 0x00, 0x00, //0x0000095c jmp LBB0_89 + //0x00000961 LBB0_94 + 0x49, 0x83, 0xff, 0xff, //0x00000961 cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00000965 jne LBB0_96 + 0x4c, 0x0f, 0xbc, 0xff, //0x0000096b bsfq %rdi, %r15 + 0x49, 0x01, 0xc7, //0x0000096f addq %rax, %r15 + //0x00000972 LBB0_96 + 0x4c, 0x89, 0xd1, //0x00000972 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00000975 notq %rcx + 0x48, 0x21, 0xf9, //0x00000978 andq %rdi, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x0000097b leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xd5, //0x0000097f orq %r10, %r13 + 0x4c, 0x89, 0xeb, //0x00000982 movq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00000985 notq %rbx + 0x48, 0x21, 0xfb, //0x00000988 andq %rdi, %rbx + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000098b movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfb, //0x00000995 andq %rdi, %rbx + 0x45, 0x31, 0xd2, //0x00000998 xorl %r10d, %r10d + 0x48, 0x01, 0xcb, //0x0000099b addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc2, //0x0000099e setb %r10b + 0x48, 0x01, 0xdb, //0x000009a2 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000009a5 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x000009af xorq %rcx, %rbx + 0x4c, 0x21, 0xeb, //0x000009b2 andq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x000009b5 notq %rbx + 0x48, 0x21, 0xda, //0x000009b8 andq %rbx, %rdx + 0x48, 0x85, 0xd2, //0x000009bb testq %rdx, %rdx + 0x0f, 0x84, 0x82, 0xff, 0xff, 0xff, //0x000009be je LBB0_88 + //0x000009c4 LBB0_97 + 0x48, 0x0f, 0xbc, 0xc2, //0x000009c4 bsfq %rdx, %rax + 0x48, 0x29, 0xf0, //0x000009c8 subq %rsi, %rax + //0x000009cb LBB0_98 + 0x4c, 0x8b, 0x1c, 0x24, //0x000009cb movq (%rsp), %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000009cf movq $24(%rsp), %r10 + 0xe9, 0xb5, 0x0e, 0x00, 0x00, //0x000009d4 jmp LBB0_302 + //0x000009d9 LBB0_99 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x000009d9 movq $32(%rsp), %rcx + 0x4c, 0x8b, 0x51, 0x08, //0x000009de movq $8(%rcx), %r10 + 0x4d, 0x8b, 0x07, //0x000009e2 movq (%r15), %r8 + 0x4f, 0x8d, 0x0c, 0x06, //0x000009e5 leaq (%r14,%r8), %r9 + 0x4d, 0x29, 0xc2, //0x000009e9 subq %r8, %r10 + 0x49, 0x83, 0xfa, 0x20, //0x000009ec cmpq $32, %r10 + 0x0f, 0x8c, 0x21, 0x1d, 0x00, 0x00, //0x000009f0 jl LBB0_110 + 0xba, 0x20, 0x00, 0x00, 0x00, //0x000009f6 movl $32, %edx + 0x31, 0xf6, //0x000009fb xorl %esi, %esi + 0x45, 0x31, 0xff, //0x000009fd xorl %r15d, %r15d + 0xe9, 0x62, 0x00, 0x00, 0x00, //0x00000a00 jmp LBB0_101 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000a05 .p2align 4, 0x90 + //0x00000a10 LBB0_106 + 0x44, 0x89, 0xf9, //0x00000a10 movl %r15d, %ecx + 0xf7, 0xd1, //0x00000a13 notl %ecx + 0x21, 0xd9, //0x00000a15 andl %ebx, %ecx + 0x44, 0x8d, 0x2c, 0x09, //0x00000a17 leal (%rcx,%rcx), %r13d + 0x45, 0x09, 0xfd, //0x00000a1b orl %r15d, %r13d + 0x44, 0x89, 0xef, //0x00000a1e movl %r13d, %edi + 0xf7, 0xd7, //0x00000a21 notl %edi + 0x21, 0xdf, //0x00000a23 andl %ebx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000a25 andl $-1431655766, %edi + 0x45, 0x31, 0xff, //0x00000a2b xorl %r15d, %r15d + 0x01, 0xcf, //0x00000a2e addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc7, //0x00000a30 setb %r15b + 0x01, 0xff, //0x00000a34 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00000a36 xorl $1431655765, %edi + 0x44, 0x21, 0xef, //0x00000a3c andl %r13d, %edi + 0xf7, 0xd7, //0x00000a3f notl %edi + 0x41, 0x21, 0xfb, //0x00000a41 andl %edi, %r11d + 0x4d, 0x85, 0xdb, //0x00000a44 testq %r11, %r11 + 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x00000a47 jne LBB0_104 + //0x00000a4d LBB0_107 + 0x48, 0x83, 0xc6, 0x20, //0x00000a4d addq $32, %rsi + 0x49, 0x8d, 0x0c, 0x12, //0x00000a51 leaq (%r10,%rdx), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00000a55 addq $-32, %rcx + 0x48, 0x83, 0xc2, 0xe0, //0x00000a59 addq $-32, %rdx + 0x48, 0x83, 0xf9, 0x3f, //0x00000a5d cmpq $63, %rcx + 0x0f, 0x8e, 0x98, 0x1c, 0x00, 0x00, //0x00000a61 jle LBB0_108 + //0x00000a67 LBB0_101 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00000a67 vmovdqu (%r9,%rsi), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00000a6d vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd9, //0x00000a71 vpmovmskb %ymm1, %r11d + 0xc5, 0xfd, 0x74, 0xc7, //0x00000a75 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd8, //0x00000a79 vpmovmskb %ymm0, %ebx + 0x85, 0xdb, //0x00000a7d testl %ebx, %ebx + 0x0f, 0x85, 0x8b, 0xff, 0xff, 0xff, //0x00000a7f jne LBB0_106 + 0x4d, 0x85, 0xff, //0x00000a85 testq %r15, %r15 + 0x0f, 0x85, 0x82, 0xff, 0xff, 0xff, //0x00000a88 jne LBB0_106 + 0x45, 0x31, 0xff, //0x00000a8e xorl %r15d, %r15d + 0x4d, 0x85, 0xdb, //0x00000a91 testq %r11, %r11 + 0x0f, 0x84, 0xb3, 0xff, 0xff, 0xff, //0x00000a94 je LBB0_107 + //0x00000a9a LBB0_104 + 0x41, 0x0f, 0xbc, 0xc3, //0x00000a9a bsfl %r11d, %eax + 0x4c, 0x01, 0xc0, //0x00000a9e addq %r8, %rax + 0x4c, 0x8d, 0x0c, 0x06, //0x00000aa1 leaq (%rsi,%rax), %r9 + 0x49, 0x83, 0xc1, 0x01, //0x00000aa5 addq $1, %r9 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00000aa9 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00000aae movq (%rsp), %r11 + //0x00000ab2 LBB0_105 + 0x4d, 0x89, 0x0f, //0x00000ab2 movq %r9, (%r15) + //0x00000ab5 LBB0_387 + 0x4d, 0x85, 0xc0, //0x00000ab5 testq %r8, %r8 + 0x0f, 0x8f, 0xe2, 0xf8, 0xff, 0xff, //0x00000ab8 jg LBB0_3 + 0xe9, 0xf2, 0x31, 0x00, 0x00, //0x00000abe jmp LBB0_700 + //0x00000ac3 LBB0_111 + 0x4c, 0x89, 0xcf, //0x00000ac3 movq %r9, %rdi + 0x4c, 0x29, 0xef, //0x00000ac6 subq %r13, %rdi + 0x48, 0x83, 0xff, 0x20, //0x00000ac9 cmpq $32, %rdi + 0x0f, 0x82, 0xe4, 0x21, 0x00, 0x00, //0x00000acd jb LBB0_526 + 0x4c, 0x89, 0xef, //0x00000ad3 movq %r13, %rdi + 0x48, 0xf7, 0xdf, //0x00000ad6 negq %rdi + 0x49, 0x8d, 0x4d, 0x01, //0x00000ad9 leaq $1(%r13), %rcx + 0x49, 0x8d, 0x55, 0xff, //0x00000add leaq $-1(%r13), %rdx + 0x4b, 0x8d, 0x34, 0x2e, //0x00000ae1 leaq (%r14,%r13), %rsi + 0x48, 0x83, 0xc6, 0xff, //0x00000ae5 addq $-1, %rsi + 0x4c, 0x89, 0xeb, //0x00000ae9 movq %r13, %rbx + 0x90, 0x90, 0x90, 0x90, //0x00000aec .p2align 4, 0x90 + //0x00000af0 LBB0_113 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x1e, //0x00000af0 vmovdqu (%r14,%rbx), %ymm0 + 0xc5, 0xfd, 0x74, 0xcb, //0x00000af6 vpcmpeqb %ymm3, %ymm0, %ymm1 + 0xc5, 0x8d, 0xdb, 0xc0, //0x00000afa vpand %ymm0, %ymm14, %ymm0 + 0xc5, 0xfd, 0x74, 0x05, 0x9a, 0xf6, 0xff, 0xff, //0x00000afe vpcmpeqb $-2406(%rip), %ymm0, %ymm0 /* LCPI0_8+0(%rip) */ + 0xc5, 0xfd, 0xeb, 0xc1, //0x00000b06 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc0, //0x00000b0a vpmovmskb %ymm0, %eax + 0x85, 0xc0, //0x00000b0e testl %eax, %eax + 0x0f, 0x85, 0x09, 0x01, 0x00, 0x00, //0x00000b10 jne LBB0_127 + 0x48, 0x83, 0xc3, 0x20, //0x00000b16 addq $32, %rbx + 0x49, 0x8d, 0x04, 0x39, //0x00000b1a leaq (%r9,%rdi), %rax + 0x48, 0x83, 0xc0, 0xe0, //0x00000b1e addq $-32, %rax + 0x48, 0x83, 0xc7, 0xe0, //0x00000b22 addq $-32, %rdi + 0x48, 0x83, 0xc1, 0x20, //0x00000b26 addq $32, %rcx + 0x48, 0x83, 0xc2, 0x20, //0x00000b2a addq $32, %rdx + 0x48, 0x83, 0xc6, 0x20, //0x00000b2e addq $32, %rsi + 0x48, 0x83, 0xf8, 0x1f, //0x00000b32 cmpq $31, %rax + 0x0f, 0x87, 0xb4, 0xff, 0xff, 0xff, //0x00000b36 ja LBB0_113 + 0x4d, 0x89, 0xf0, //0x00000b3c movq %r14, %r8 + 0x49, 0x29, 0xf8, //0x00000b3f subq %rdi, %r8 + 0x49, 0x01, 0xf9, //0x00000b42 addq %rdi, %r9 + 0x4c, 0x89, 0xcf, //0x00000b45 movq %r9, %rdi + 0x48, 0x83, 0xff, 0x10, //0x00000b48 cmpq $16, %rdi + 0x0f, 0x82, 0x69, 0x00, 0x00, 0x00, //0x00000b4c jb LBB0_119 + //0x00000b52 LBB0_116 + 0x4d, 0x89, 0xf1, //0x00000b52 movq %r14, %r9 + 0x4d, 0x29, 0xc1, //0x00000b55 subq %r8, %r9 + 0x4c, 0x89, 0xc1, //0x00000b58 movq %r8, %rcx + 0x4c, 0x29, 0xf1, //0x00000b5b subq %r14, %rcx + 0x48, 0x83, 0xc1, 0x01, //0x00000b5e addq $1, %rcx + 0x49, 0x8d, 0x50, 0xff, //0x00000b62 leaq $-1(%r8), %rdx + 0x48, 0x89, 0xd6, //0x00000b66 movq %rdx, %rsi + 0x4c, 0x29, 0xf6, //0x00000b69 subq %r14, %rsi + //0x00000b6c LBB0_117 + 0xc4, 0xc1, 0x7a, 0x6f, 0x00, //0x00000b6c vmovdqu (%r8), %xmm0 + 0xc5, 0xf9, 0x74, 0x0d, 0x97, 0xf4, 0xff, 0xff, //0x00000b71 vpcmpeqb $-2921(%rip), %xmm0, %xmm1 /* LCPI0_11+0(%rip) */ + 0xc5, 0xf9, 0xdb, 0x05, 0x9f, 0xf4, 0xff, 0xff, //0x00000b79 vpand $-2913(%rip), %xmm0, %xmm0 /* LCPI0_12+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0xa7, 0xf4, 0xff, 0xff, //0x00000b81 vpcmpeqb $-2905(%rip), %xmm0, %xmm0 /* LCPI0_13+0(%rip) */ + 0xc5, 0xf9, 0xeb, 0xc1, //0x00000b89 vpor %xmm1, %xmm0, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd8, //0x00000b8d vpmovmskb %xmm0, %ebx + 0x85, 0xdb, //0x00000b91 testl %ebx, %ebx + 0x0f, 0x85, 0x9e, 0x1b, 0x00, 0x00, //0x00000b93 jne LBB0_478 + 0x49, 0x83, 0xc0, 0x10, //0x00000b99 addq $16, %r8 + 0x48, 0x83, 0xc7, 0xf0, //0x00000b9d addq $-16, %rdi + 0x49, 0x83, 0xc1, 0xf0, //0x00000ba1 addq $-16, %r9 + 0x48, 0x83, 0xc1, 0x10, //0x00000ba5 addq $16, %rcx + 0x48, 0x83, 0xc6, 0x10, //0x00000ba9 addq $16, %rsi + 0x48, 0x83, 0xc2, 0x10, //0x00000bad addq $16, %rdx + 0x48, 0x83, 0xff, 0x0f, //0x00000bb1 cmpq $15, %rdi + 0x0f, 0x87, 0xb1, 0xff, 0xff, 0xff, //0x00000bb5 ja LBB0_117 + //0x00000bbb LBB0_119 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00000bbb vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00000bbf vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00000bc3 vmovdqa %ymm13, %ymm11 + 0x48, 0x85, 0xff, //0x00000bc8 testq %rdi, %rdi + 0x0f, 0x84, 0xe8, 0xf7, 0xff, 0xff, //0x00000bcb je LBB0_1 + 0x49, 0x8d, 0x0c, 0x38, //0x00000bd1 leaq (%r8,%rdi), %rcx + 0x48, 0xb8, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00000bd5 movabsq $17596481021440, %rax + //0x00000bdf LBB0_121 + 0x41, 0x0f, 0xb6, 0x10, //0x00000bdf movzbl (%r8), %edx + 0x48, 0x83, 0xfa, 0x2c, //0x00000be3 cmpq $44, %rdx + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x00000be7 ja LBB0_123 + 0x48, 0x0f, 0xa3, 0xd0, //0x00000bed btq %rdx, %rax + 0x0f, 0x82, 0xc2, 0xf7, 0xff, 0xff, //0x00000bf1 jb LBB0_1 + //0x00000bf7 LBB0_123 + 0x80, 0xfa, 0x5d, //0x00000bf7 cmpb $93, %dl + 0x0f, 0x84, 0xb9, 0xf7, 0xff, 0xff, //0x00000bfa je LBB0_1 + 0x80, 0xfa, 0x7d, //0x00000c00 cmpb $125, %dl + 0x0f, 0x84, 0xb0, 0xf7, 0xff, 0xff, //0x00000c03 je LBB0_1 + 0x49, 0x83, 0xc0, 0x01, //0x00000c09 addq $1, %r8 + 0x48, 0x83, 0xc7, 0xff, //0x00000c0d addq $-1, %rdi + 0x0f, 0x85, 0xc8, 0xff, 0xff, 0xff, //0x00000c11 jne LBB0_121 + 0x49, 0x89, 0xc8, //0x00000c17 movq %rcx, %r8 + 0xe9, 0x9a, 0xf7, 0xff, 0xff, //0x00000c1a jmp LBB0_1 + //0x00000c1f LBB0_127 + 0x0f, 0xbc, 0xd8, //0x00000c1f bsfl %eax, %ebx + 0x48, 0x89, 0xd8, //0x00000c22 movq %rbx, %rax + 0x48, 0x29, 0xf8, //0x00000c25 subq %rdi, %rax + 0x49, 0x89, 0x07, //0x00000c28 movq %rax, (%r15) + 0x48, 0x85, 0xc0, //0x00000c2b testq %rax, %rax + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000c2e movabsq $4294977024, %rdi + 0x0f, 0x8e, 0xac, 0xf7, 0xff, 0xff, //0x00000c38 jle LBB0_2 + 0x48, 0x01, 0xd9, //0x00000c3e addq %rbx, %rcx + 0x48, 0x01, 0xda, //0x00000c41 addq %rbx, %rdx + 0x48, 0x01, 0xde, //0x00000c44 addq %rbx, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000c47 .p2align 4, 0x90 + //0x00000c50 LBB0_129 + 0x0f, 0xb6, 0x06, //0x00000c50 movzbl (%rsi), %eax + 0x48, 0x83, 0xf8, 0x20, //0x00000c53 cmpq $32, %rax + 0x0f, 0x87, 0x8d, 0xf7, 0xff, 0xff, //0x00000c57 ja LBB0_2 + 0x48, 0x0f, 0xa3, 0xc7, //0x00000c5d btq %rax, %rdi + 0x0f, 0x83, 0x83, 0xf7, 0xff, 0xff, //0x00000c61 jae LBB0_2 + 0x49, 0x89, 0x17, //0x00000c67 movq %rdx, (%r15) + 0x48, 0x83, 0xc1, 0xff, //0x00000c6a addq $-1, %rcx + 0x48, 0x83, 0xc2, 0xff, //0x00000c6e addq $-1, %rdx + 0x48, 0x83, 0xc6, 0xff, //0x00000c72 addq $-1, %rsi + 0x48, 0x83, 0xf9, 0x01, //0x00000c76 cmpq $1, %rcx + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x00000c7a jg LBB0_129 + 0xe9, 0x65, 0xf7, 0xff, 0xff, //0x00000c80 jmp LBB0_2 + //0x00000c85 LBB0_132 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00000c85 movq $32(%rsp), %rcx + 0x4c, 0x8b, 0x51, 0x08, //0x00000c8a movq $8(%rcx), %r10 + 0x4d, 0x8b, 0x07, //0x00000c8e movq (%r15), %r8 + 0x4f, 0x8d, 0x0c, 0x06, //0x00000c91 leaq (%r14,%r8), %r9 + 0x4d, 0x29, 0xc2, //0x00000c95 subq %r8, %r10 + 0x49, 0x83, 0xfa, 0x20, //0x00000c98 cmpq $32, %r10 + 0x0f, 0x8c, 0x9c, 0x1c, 0x00, 0x00, //0x00000c9c jl LBB0_142 + 0xba, 0x20, 0x00, 0x00, 0x00, //0x00000ca2 movl $32, %edx + 0x31, 0xf6, //0x00000ca7 xorl %esi, %esi + 0x45, 0x31, 0xff, //0x00000ca9 xorl %r15d, %r15d + 0xe9, 0x66, 0x00, 0x00, 0x00, //0x00000cac jmp LBB0_134 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000cb1 .p2align 4, 0x90 + //0x00000cc0 LBB0_138 + 0x44, 0x89, 0xf9, //0x00000cc0 movl %r15d, %ecx + 0xf7, 0xd1, //0x00000cc3 notl %ecx + 0x21, 0xd9, //0x00000cc5 andl %ebx, %ecx + 0x44, 0x8d, 0x2c, 0x09, //0x00000cc7 leal (%rcx,%rcx), %r13d + 0x45, 0x09, 0xfd, //0x00000ccb orl %r15d, %r13d + 0x44, 0x89, 0xef, //0x00000cce movl %r13d, %edi + 0xf7, 0xd7, //0x00000cd1 notl %edi + 0x21, 0xdf, //0x00000cd3 andl %ebx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000cd5 andl $-1431655766, %edi + 0x45, 0x31, 0xff, //0x00000cdb xorl %r15d, %r15d + 0x01, 0xcf, //0x00000cde addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc7, //0x00000ce0 setb %r15b + 0x01, 0xff, //0x00000ce4 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00000ce6 xorl $1431655765, %edi + 0x44, 0x21, 0xef, //0x00000cec andl %r13d, %edi + 0xf7, 0xd7, //0x00000cef notl %edi + 0x41, 0x21, 0xfb, //0x00000cf1 andl %edi, %r11d + 0x4d, 0x85, 0xdb, //0x00000cf4 testq %r11, %r11 + 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x00000cf7 jne LBB0_137 + //0x00000cfd LBB0_139 + 0x48, 0x83, 0xc6, 0x20, //0x00000cfd addq $32, %rsi + 0x49, 0x8d, 0x0c, 0x12, //0x00000d01 leaq (%r10,%rdx), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00000d05 addq $-32, %rcx + 0x48, 0x83, 0xc2, 0xe0, //0x00000d09 addq $-32, %rdx + 0x48, 0x83, 0xf9, 0x3f, //0x00000d0d cmpq $63, %rcx + 0x0f, 0x8e, 0x0f, 0x1c, 0x00, 0x00, //0x00000d11 jle LBB0_140 + //0x00000d17 LBB0_134 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00000d17 vmovdqu (%r9,%rsi), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00000d1d vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd9, //0x00000d21 vpmovmskb %ymm1, %r11d + 0xc5, 0xfd, 0x74, 0xc7, //0x00000d25 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd8, //0x00000d29 vpmovmskb %ymm0, %ebx + 0x85, 0xdb, //0x00000d2d testl %ebx, %ebx + 0x0f, 0x85, 0x8b, 0xff, 0xff, 0xff, //0x00000d2f jne LBB0_138 + 0x4d, 0x85, 0xff, //0x00000d35 testq %r15, %r15 + 0x0f, 0x85, 0x82, 0xff, 0xff, 0xff, //0x00000d38 jne LBB0_138 + 0x45, 0x31, 0xff, //0x00000d3e xorl %r15d, %r15d + 0x4d, 0x85, 0xdb, //0x00000d41 testq %r11, %r11 + 0x0f, 0x84, 0xb3, 0xff, 0xff, 0xff, //0x00000d44 je LBB0_139 + //0x00000d4a LBB0_137 + 0x41, 0x0f, 0xbc, 0xc3, //0x00000d4a bsfl %r11d, %eax + 0x4c, 0x01, 0xc0, //0x00000d4e addq %r8, %rax + 0x4c, 0x8d, 0x0c, 0x06, //0x00000d51 leaq (%rsi,%rax), %r9 + 0x49, 0x83, 0xc1, 0x01, //0x00000d55 addq $1, %r9 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00000d59 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00000d5e movq (%rsp), %r11 + 0x4d, 0x89, 0x0f, //0x00000d62 movq %r9, (%r15) + 0x4d, 0x85, 0xc0, //0x00000d65 testq %r8, %r8 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00000d68 movq $24(%rsp), %r10 + 0x0f, 0x8f, 0x35, 0x0b, 0x00, 0x00, //0x00000d6d jg LBB0_304 + 0xe9, 0x3d, 0x2f, 0x00, 0x00, //0x00000d73 jmp LBB0_700 + //0x00000d78 LBB0_143 + 0x4d, 0x89, 0xc5, //0x00000d78 movq %r8, %r13 + 0x4d, 0x29, 0xcd, //0x00000d7b subq %r9, %r13 + 0x0f, 0x84, 0xfa, 0x30, 0x00, 0x00, //0x00000d7e je LBB0_732 + 0x49, 0x83, 0xfd, 0x40, //0x00000d84 cmpq $64, %r13 + 0x0f, 0x82, 0xa5, 0x1f, 0x00, 0x00, //0x00000d88 jb LBB0_532 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00000d8e movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x00000d95 movq %r9, %rax + 0x45, 0x31, 0xdb, //0x00000d98 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000d9b .p2align 4, 0x90 + //0x00000da0 LBB0_146 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x00000da0 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x00000da6 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x00000dad vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x00000db1 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0x74, 0xd6, //0x00000db5 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00000db9 vpmovmskb %ymm2, %ecx + 0xc5, 0xfd, 0x74, 0xd7, //0x00000dbd vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00000dc1 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd7, //0x00000dc5 vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x00000dc9 vpmovmskb %ymm2, %ebx + 0xc5, 0xbd, 0x64, 0xd1, //0x00000dcd vpcmpgtb %ymm1, %ymm8, %ymm2 + 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00000dd1 vpcmpgtb %ymm9, %ymm1, %ymm1 + 0xc5, 0xed, 0xdb, 0xc9, //0x00000dd6 vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf1, //0x00000dda vpmovmskb %ymm1, %esi + 0x48, 0xc1, 0xe1, 0x20, //0x00000dde shlq $32, %rcx + 0x48, 0x09, 0xcf, //0x00000de2 orq %rcx, %rdi + 0x48, 0xc1, 0xe3, 0x20, //0x00000de5 shlq $32, %rbx + 0x48, 0xc1, 0xe6, 0x20, //0x00000de9 shlq $32, %rsi + 0x48, 0x09, 0xda, //0x00000ded orq %rbx, %rdx + 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00000df0 jne LBB0_157 + 0x4d, 0x85, 0xdb, //0x00000df6 testq %r11, %r11 + 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00000df9 jne LBB0_159 + 0x45, 0x31, 0xdb, //0x00000dff xorl %r11d, %r11d + //0x00000e02 LBB0_149 + 0xc5, 0xbd, 0x64, 0xc8, //0x00000e02 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00000e06 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00000e0b vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x00000e0f vpmovmskb %ymm0, %ecx + 0x48, 0x09, 0xce, //0x00000e13 orq %rcx, %rsi + 0x48, 0x85, 0xff, //0x00000e16 testq %rdi, %rdi + 0x0f, 0x85, 0x7f, 0x00, 0x00, 0x00, //0x00000e19 jne LBB0_160 + 0x48, 0x85, 0xf6, //0x00000e1f testq %rsi, %rsi + 0x0f, 0x85, 0x07, 0x2f, 0x00, 0x00, //0x00000e22 jne LBB0_709 + 0x49, 0x83, 0xc5, 0xc0, //0x00000e28 addq $-64, %r13 + 0x48, 0x83, 0xc0, 0x40, //0x00000e2c addq $64, %rax + 0x49, 0x83, 0xfd, 0x3f, //0x00000e30 cmpq $63, %r13 + 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x00000e34 ja LBB0_146 + 0xe9, 0x5e, 0x1b, 0x00, 0x00, //0x00000e3a jmp LBB0_152 + //0x00000e3f LBB0_157 + 0x49, 0x83, 0xff, 0xff, //0x00000e3f cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00000e43 jne LBB0_159 + 0x4c, 0x0f, 0xbc, 0xfa, //0x00000e49 bsfq %rdx, %r15 + 0x49, 0x01, 0xc7, //0x00000e4d addq %rax, %r15 + //0x00000e50 LBB0_159 + 0x4c, 0x89, 0xd9, //0x00000e50 movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x00000e53 notq %rcx + 0x48, 0x21, 0xd1, //0x00000e56 andq %rdx, %rcx + 0x4c, 0x8d, 0x14, 0x09, //0x00000e59 leaq (%rcx,%rcx), %r10 + 0x4d, 0x09, 0xda, //0x00000e5d orq %r11, %r10 + 0x4c, 0x89, 0xd3, //0x00000e60 movq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00000e63 notq %rbx + 0x48, 0x21, 0xd3, //0x00000e66 andq %rdx, %rbx + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000e69 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd3, //0x00000e73 andq %rdx, %rbx + 0x45, 0x31, 0xdb, //0x00000e76 xorl %r11d, %r11d + 0x48, 0x01, 0xcb, //0x00000e79 addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc3, //0x00000e7c setb %r11b + 0x48, 0x01, 0xdb, //0x00000e80 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000e83 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x00000e8d xorq %rcx, %rbx + 0x4c, 0x21, 0xd3, //0x00000e90 andq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00000e93 notq %rbx + 0x48, 0x21, 0xdf, //0x00000e96 andq %rbx, %rdi + 0xe9, 0x64, 0xff, 0xff, 0xff, //0x00000e99 jmp LBB0_149 + //0x00000e9e LBB0_160 + 0x48, 0x0f, 0xbc, 0xcf, //0x00000e9e bsfq %rdi, %rcx + 0x48, 0x85, 0xf6, //0x00000ea2 testq %rsi, %rsi + 0x0f, 0x84, 0xbf, 0xf4, 0xff, 0xff, //0x00000ea5 je LBB0_235 + 0x48, 0x0f, 0xbc, 0xd6, //0x00000eab bsfq %rsi, %rdx + 0x4c, 0x8b, 0x1c, 0x24, //0x00000eaf movq (%rsp), %r11 + 0x48, 0x39, 0xca, //0x00000eb3 cmpq %rcx, %rdx + 0x0f, 0x83, 0xc0, 0xf4, 0xff, 0xff, //0x00000eb6 jae LBB0_236 + 0xe9, 0xc5, 0x2f, 0x00, 0x00, //0x00000ebc jmp LBB0_162 + //0x00000ec1 LBB0_163 + 0x4d, 0x89, 0xc5, //0x00000ec1 movq %r8, %r13 + 0x4d, 0x29, 0xcd, //0x00000ec4 subq %r9, %r13 + 0x0f, 0x84, 0xb1, 0x2f, 0x00, 0x00, //0x00000ec7 je LBB0_732 + 0x49, 0x83, 0xfd, 0x40, //0x00000ecd cmpq $64, %r13 + 0x0f, 0x82, 0xac, 0x1e, 0x00, 0x00, //0x00000ed1 jb LBB0_537 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00000ed7 movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x00000ede movq %r9, %rax + 0x45, 0x31, 0xdb, //0x00000ee1 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000ee4 .p2align 4, 0x90 + //0x00000ef0 LBB0_166 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x00000ef0 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x00000ef6 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x00000efd vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x00000f01 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0x74, 0xd6, //0x00000f05 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x00000f09 vpmovmskb %ymm2, %ebx + 0xc5, 0xfd, 0x74, 0xd7, //0x00000f0d vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00000f11 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd7, //0x00000f15 vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00000f19 vpmovmskb %ymm2, %ecx + 0xc5, 0xbd, 0x64, 0xd1, //0x00000f1d vpcmpgtb %ymm1, %ymm8, %ymm2 + 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00000f21 vpcmpgtb %ymm9, %ymm1, %ymm1 + 0xc5, 0xed, 0xdb, 0xc9, //0x00000f26 vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf1, //0x00000f2a vpmovmskb %ymm1, %esi + 0x48, 0xc1, 0xe3, 0x20, //0x00000f2e shlq $32, %rbx + 0x48, 0x09, 0xdf, //0x00000f32 orq %rbx, %rdi + 0x48, 0xc1, 0xe1, 0x20, //0x00000f35 shlq $32, %rcx + 0x48, 0xc1, 0xe6, 0x20, //0x00000f39 shlq $32, %rsi + 0x48, 0x09, 0xca, //0x00000f3d orq %rcx, %rdx + 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00000f40 jne LBB0_177 + 0x4d, 0x85, 0xdb, //0x00000f46 testq %r11, %r11 + 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00000f49 jne LBB0_179 + 0x45, 0x31, 0xdb, //0x00000f4f xorl %r11d, %r11d + //0x00000f52 LBB0_169 + 0xc5, 0xbd, 0x64, 0xc8, //0x00000f52 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00000f56 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00000f5b vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x00000f5f vpmovmskb %ymm0, %ecx + 0x48, 0x09, 0xce, //0x00000f63 orq %rcx, %rsi + 0x48, 0x85, 0xff, //0x00000f66 testq %rdi, %rdi + 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x00000f69 jne LBB0_180 + 0x48, 0x85, 0xf6, //0x00000f6f testq %rsi, %rsi + 0x0f, 0x85, 0xb7, 0x2d, 0x00, 0x00, //0x00000f72 jne LBB0_709 + 0x49, 0x83, 0xc5, 0xc0, //0x00000f78 addq $-64, %r13 + 0x48, 0x83, 0xc0, 0x40, //0x00000f7c addq $64, %rax + 0x49, 0x83, 0xfd, 0x3f, //0x00000f80 cmpq $63, %r13 + 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x00000f84 ja LBB0_166 + 0xe9, 0x1b, 0x1b, 0x00, 0x00, //0x00000f8a jmp LBB0_172 + //0x00000f8f LBB0_177 + 0x49, 0x83, 0xff, 0xff, //0x00000f8f cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00000f93 jne LBB0_179 + 0x4c, 0x0f, 0xbc, 0xfa, //0x00000f99 bsfq %rdx, %r15 + 0x49, 0x01, 0xc7, //0x00000f9d addq %rax, %r15 + //0x00000fa0 LBB0_179 + 0x4c, 0x89, 0xd9, //0x00000fa0 movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x00000fa3 notq %rcx + 0x48, 0x21, 0xd1, //0x00000fa6 andq %rdx, %rcx + 0x4c, 0x8d, 0x14, 0x09, //0x00000fa9 leaq (%rcx,%rcx), %r10 + 0x4d, 0x09, 0xda, //0x00000fad orq %r11, %r10 + 0x4c, 0x89, 0xd3, //0x00000fb0 movq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00000fb3 notq %rbx + 0x48, 0x21, 0xd3, //0x00000fb6 andq %rdx, %rbx + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000fb9 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd3, //0x00000fc3 andq %rdx, %rbx + 0x45, 0x31, 0xdb, //0x00000fc6 xorl %r11d, %r11d + 0x48, 0x01, 0xcb, //0x00000fc9 addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc3, //0x00000fcc setb %r11b + 0x48, 0x01, 0xdb, //0x00000fd0 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000fd3 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x00000fdd xorq %rcx, %rbx + 0x4c, 0x21, 0xd3, //0x00000fe0 andq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00000fe3 notq %rbx + 0x48, 0x21, 0xdf, //0x00000fe6 andq %rbx, %rdi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00000fe9 movq $24(%rsp), %r10 + 0xe9, 0x5f, 0xff, 0xff, 0xff, //0x00000fee jmp LBB0_169 + //0x00000ff3 LBB0_180 + 0x48, 0x0f, 0xbc, 0xcf, //0x00000ff3 bsfq %rdi, %rcx + 0x48, 0x85, 0xf6, //0x00000ff7 testq %rsi, %rsi + 0x0f, 0x84, 0x75, 0x08, 0x00, 0x00, //0x00000ffa je LBB0_300 + 0x48, 0x0f, 0xbc, 0xd6, //0x00001000 bsfq %rsi, %rdx + 0x4c, 0x8b, 0x1c, 0x24, //0x00001004 movq (%rsp), %r11 + 0x48, 0x39, 0xca, //0x00001008 cmpq %rcx, %rdx + 0x0f, 0x83, 0x76, 0x08, 0x00, 0x00, //0x0000100b jae LBB0_301 + 0xe9, 0x70, 0x2e, 0x00, 0x00, //0x00001011 jmp LBB0_162 + //0x00001016 LBB0_182 + 0x43, 0x8a, 0x0c, 0x2e, //0x00001016 movb (%r14,%r13), %cl + 0x80, 0xc1, 0xd2, //0x0000101a addb $-46, %cl + 0x80, 0xf9, 0x37, //0x0000101d cmpb $55, %cl + 0x0f, 0x87, 0x20, 0xf8, 0xff, 0xff, //0x00001020 ja LBB0_75 + 0x0f, 0xb6, 0xc9, //0x00001026 movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00001029 movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x00001033 btq %rcx, %rdx + 0x48, 0x89, 0xc1, //0x00001037 movq %rax, %rcx + 0x0f, 0x83, 0xee, 0x07, 0x00, 0x00, //0x0000103a jae LBB0_296 + //0x00001040 LBB0_184 + 0x4c, 0x89, 0x6c, 0x24, 0x10, //0x00001040 movq %r13, $16(%rsp) + 0x49, 0x83, 0xf9, 0x20, //0x00001045 cmpq $32, %r9 + 0x0f, 0x82, 0x7b, 0x1c, 0x00, 0x00, //0x00001049 jb LBB0_527 + 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x0000104f movq $-1, $40(%rsp) + 0x45, 0x31, 0xd2, //0x00001058 xorl %r10d, %r10d + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x0000105b movq $-1, %r13 + 0x48, 0xc7, 0x44, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff, //0x00001062 movq $-1, $48(%rsp) + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000106b .p2align 4, 0x90 + //0x00001070 LBB0_186 + 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x10, //0x00001070 vmovdqu (%r8,%r10), %ymm0 + 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x00001076 vpcmpgtb %ymm10, %ymm0, %ymm1 + 0xc5, 0x95, 0x64, 0xd0, //0x0000107b vpcmpgtb %ymm0, %ymm13, %ymm2 + 0xc5, 0xed, 0xdb, 0xc9, //0x0000107f vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0x85, 0x74, 0xd0, //0x00001083 vpcmpeqb %ymm0, %ymm15, %ymm2 + 0xc5, 0xfd, 0x74, 0x1d, 0xd1, 0xf1, 0xff, 0xff, //0x00001087 vpcmpeqb $-3631(%rip), %ymm0, %ymm3 /* LCPI0_17+0(%rip) */ + 0xc5, 0xe5, 0xeb, 0xd2, //0x0000108f vpor %ymm2, %ymm3, %ymm2 + 0xc5, 0x8d, 0xdb, 0xd8, //0x00001093 vpand %ymm0, %ymm14, %ymm3 + 0xc5, 0xfd, 0x74, 0x05, 0xe1, 0xf1, 0xff, 0xff, //0x00001097 vpcmpeqb $-3615(%rip), %ymm0, %ymm0 /* LCPI0_18+0(%rip) */ + 0xc5, 0xfd, 0xd7, 0xf8, //0x0000109f vpmovmskb %ymm0, %edi + 0xc5, 0xe5, 0x74, 0xdc, //0x000010a3 vpcmpeqb %ymm4, %ymm3, %ymm3 + 0xc5, 0xfd, 0xd7, 0xf3, //0x000010a7 vpmovmskb %ymm3, %esi + 0xc5, 0xfd, 0xd7, 0xd2, //0x000010ab vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0xeb, 0xc0, //0x000010af vpor %ymm0, %ymm1, %ymm0 + 0xc5, 0xe5, 0xeb, 0xca, //0x000010b3 vpor %ymm2, %ymm3, %ymm1 + 0xc5, 0xfd, 0xeb, 0xc1, //0x000010b7 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x000010bb vpmovmskb %ymm0, %ecx + 0x48, 0xf7, 0xd1, //0x000010bf notq %rcx + 0x48, 0x0f, 0xbc, 0xc9, //0x000010c2 bsfq %rcx, %rcx + 0x83, 0xf9, 0x20, //0x000010c6 cmpl $32, %ecx + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x000010c9 je LBB0_188 + 0xbb, 0xff, 0xff, 0xff, 0xff, //0x000010cf movl $-1, %ebx + 0xd3, 0xe3, //0x000010d4 shll %cl, %ebx + 0xf7, 0xd3, //0x000010d6 notl %ebx + 0x21, 0xdf, //0x000010d8 andl %ebx, %edi + 0x21, 0xde, //0x000010da andl %ebx, %esi + 0x21, 0xd3, //0x000010dc andl %edx, %ebx + 0x89, 0xda, //0x000010de movl %ebx, %edx + //0x000010e0 LBB0_188 + 0x8d, 0x5f, 0xff, //0x000010e0 leal $-1(%rdi), %ebx + 0x21, 0xfb, //0x000010e3 andl %edi, %ebx + 0xc5, 0xfe, 0x6f, 0x1d, 0xd3, 0xf0, 0xff, 0xff, //0x000010e5 vmovdqu $-3885(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0x0f, 0x85, 0x32, 0x16, 0x00, 0x00, //0x000010ed jne LBB0_476 + 0x8d, 0x5e, 0xff, //0x000010f3 leal $-1(%rsi), %ebx + 0x21, 0xf3, //0x000010f6 andl %esi, %ebx + 0x0f, 0x85, 0x27, 0x16, 0x00, 0x00, //0x000010f8 jne LBB0_476 + 0x8d, 0x5a, 0xff, //0x000010fe leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x00001101 andl %edx, %ebx + 0x0f, 0x85, 0x1c, 0x16, 0x00, 0x00, //0x00001103 jne LBB0_476 + 0x85, 0xff, //0x00001109 testl %edi, %edi + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x0000110b je LBB0_194 + 0x0f, 0xbc, 0xff, //0x00001111 bsfl %edi, %edi + 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x00001114 cmpq $-1, $48(%rsp) + 0x0f, 0x85, 0xd1, 0x19, 0x00, 0x00, //0x0000111a jne LBB0_505 + 0x4c, 0x01, 0xd7, //0x00001120 addq %r10, %rdi + 0x48, 0x89, 0x7c, 0x24, 0x30, //0x00001123 movq %rdi, $48(%rsp) + //0x00001128 LBB0_194 + 0x85, 0xf6, //0x00001128 testl %esi, %esi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000112a je LBB0_197 + 0x0f, 0xbc, 0xf6, //0x00001130 bsfl %esi, %esi + 0x49, 0x83, 0xfd, 0xff, //0x00001133 cmpq $-1, %r13 + 0x0f, 0x85, 0xbf, 0x19, 0x00, 0x00, //0x00001137 jne LBB0_506 + 0x4c, 0x01, 0xd6, //0x0000113d addq %r10, %rsi + 0x49, 0x89, 0xf5, //0x00001140 movq %rsi, %r13 + //0x00001143 LBB0_197 + 0x85, 0xd2, //0x00001143 testl %edx, %edx + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00001145 je LBB0_200 + 0x0f, 0xbc, 0xd2, //0x0000114b bsfl %edx, %edx + 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000114e cmpq $-1, $40(%rsp) + 0x0f, 0x85, 0xad, 0x19, 0x00, 0x00, //0x00001154 jne LBB0_507 + 0x4c, 0x01, 0xd2, //0x0000115a addq %r10, %rdx + 0x48, 0x89, 0x54, 0x24, 0x28, //0x0000115d movq %rdx, $40(%rsp) + //0x00001162 LBB0_200 + 0x83, 0xf9, 0x20, //0x00001162 cmpl $32, %ecx + 0x0f, 0x85, 0xc3, 0x02, 0x00, 0x00, //0x00001165 jne LBB0_234 + 0x49, 0x83, 0xc1, 0xe0, //0x0000116b addq $-32, %r9 + 0x49, 0x83, 0xc2, 0x20, //0x0000116f addq $32, %r10 + 0x49, 0x83, 0xf9, 0x1f, //0x00001173 cmpq $31, %r9 + 0x0f, 0x87, 0xf3, 0xfe, 0xff, 0xff, //0x00001177 ja LBB0_186 + 0xc5, 0xf8, 0x77, //0x0000117d vzeroupper + 0xc5, 0x7e, 0x6f, 0x35, 0x58, 0xf0, 0xff, 0xff, //0x00001180 vmovdqu $-4008(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0xb0, 0xf0, 0xff, 0xff, //0x00001188 vmovdqu $-3920(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0x88, 0xf0, 0xff, 0xff, //0x00001190 vmovdqu $-3960(%rip), %ymm13 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x15, 0x60, 0xf0, 0xff, 0xff, //0x00001198 vmovdqu $-4000(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0xb8, 0xef, 0xff, 0xff, //0x000011a0 vmovdqu $-4168(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0x90, 0xef, 0xff, 0xff, //0x000011a8 vmovdqu $-4208(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000011b0 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x05, 0x63, 0xef, 0xff, 0xff, //0x000011b5 vmovdqu $-4253(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x3b, 0xef, 0xff, 0xff, //0x000011bd vmovdqu $-4293(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x13, 0xef, 0xff, 0xff, //0x000011c5 vmovdqu $-4333(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x2d, 0xeb, 0xee, 0xff, 0xff, //0x000011cd vmovdqu $-4373(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0x4d, 0x01, 0xc2, //0x000011d5 addq %r8, %r10 + 0x49, 0x83, 0xf9, 0x10, //0x000011d8 cmpq $16, %r9 + 0x0f, 0x82, 0x8f, 0x01, 0x00, 0x00, //0x000011dc jb LBB0_221 + //0x000011e2 LBB0_203 + 0x4c, 0x89, 0xd1, //0x000011e2 movq %r10, %rcx + 0x48, 0x2b, 0x4c, 0x24, 0x10, //0x000011e5 subq $16(%rsp), %rcx + 0x4c, 0x29, 0xf1, //0x000011ea subq %r14, %rcx + 0x48, 0x83, 0xc1, 0x01, //0x000011ed addq $1, %rcx + 0x48, 0x89, 0x4c, 0x24, 0x38, //0x000011f1 movq %rcx, $56(%rsp) + 0x45, 0x31, 0xff, //0x000011f6 xorl %r15d, %r15d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000011f9 .p2align 4, 0x90 + //0x00001200 LBB0_204 + 0x4d, 0x89, 0xeb, //0x00001200 movq %r13, %r11 + 0x4d, 0x89, 0xc5, //0x00001203 movq %r8, %r13 + 0xc4, 0x81, 0x7a, 0x6f, 0x04, 0x3a, //0x00001206 vmovdqu (%r10,%r15), %xmm0 + 0xc5, 0xf9, 0x64, 0x0d, 0x2c, 0xee, 0xff, 0xff, //0x0000120c vpcmpgtb $-4564(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ + 0xc5, 0xfa, 0x6f, 0x15, 0x34, 0xee, 0xff, 0xff, //0x00001214 vmovdqu $-4556(%rip), %xmm2 /* LCPI0_21+0(%rip) */ + 0xc5, 0xe9, 0x64, 0xd0, //0x0000121c vpcmpgtb %xmm0, %xmm2, %xmm2 + 0xc5, 0xf1, 0xdb, 0xca, //0x00001220 vpand %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0x74, 0x15, 0x34, 0xee, 0xff, 0xff, //0x00001224 vpcmpeqb $-4556(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x1d, 0x3c, 0xee, 0xff, 0xff, //0x0000122c vpcmpeqb $-4548(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xd2, //0x00001234 vpor %xmm2, %xmm3, %xmm2 + 0xc5, 0xf9, 0xdb, 0x1d, 0xe0, 0xed, 0xff, 0xff, //0x00001238 vpand $-4640(%rip), %xmm0, %xmm3 /* LCPI0_12+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0x38, 0xee, 0xff, 0xff, //0x00001240 vpcmpeqb $-4552(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ + 0xc5, 0xe1, 0x74, 0x1d, 0x40, 0xee, 0xff, 0xff, //0x00001248 vpcmpeqb $-4544(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xe0, //0x00001250 vpor %xmm0, %xmm3, %xmm4 + 0xc5, 0xe9, 0xeb, 0xc9, //0x00001254 vpor %xmm1, %xmm2, %xmm1 + 0xc5, 0xd9, 0xeb, 0xc9, //0x00001258 vpor %xmm1, %xmm4, %xmm1 + 0xc5, 0x79, 0xd7, 0xc0, //0x0000125c vpmovmskb %xmm0, %r8d + 0xc5, 0xf9, 0xd7, 0xf3, //0x00001260 vpmovmskb %xmm3, %esi + 0xc5, 0xf9, 0xd7, 0xd2, //0x00001264 vpmovmskb %xmm2, %edx + 0xc5, 0xf9, 0xd7, 0xc9, //0x00001268 vpmovmskb %xmm1, %ecx + 0xf7, 0xd1, //0x0000126c notl %ecx + 0x0f, 0xbc, 0xc9, //0x0000126e bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x00001271 cmpl $16, %ecx + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00001274 je LBB0_206 + 0xbf, 0xff, 0xff, 0xff, 0xff, //0x0000127a movl $-1, %edi + 0xd3, 0xe7, //0x0000127f shll %cl, %edi + 0xf7, 0xd7, //0x00001281 notl %edi + 0x41, 0x21, 0xf8, //0x00001283 andl %edi, %r8d + 0x21, 0xfe, //0x00001286 andl %edi, %esi + 0x21, 0xd7, //0x00001288 andl %edx, %edi + 0x89, 0xfa, //0x0000128a movl %edi, %edx + //0x0000128c LBB0_206 + 0xc5, 0xfe, 0x6f, 0x25, 0x0c, 0xf0, 0xff, 0xff, //0x0000128c vmovdqu $-4084(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x24, 0xef, 0xff, 0xff, //0x00001294 vmovdqu $-4316(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0x41, 0x8d, 0x78, 0xff, //0x0000129c leal $-1(%r8), %edi + 0x44, 0x21, 0xc7, //0x000012a0 andl %r8d, %edi + 0x0f, 0x85, 0x54, 0x17, 0x00, 0x00, //0x000012a3 jne LBB0_501 + 0x8d, 0x7e, 0xff, //0x000012a9 leal $-1(%rsi), %edi + 0x21, 0xf7, //0x000012ac andl %esi, %edi + 0x0f, 0x85, 0x49, 0x17, 0x00, 0x00, //0x000012ae jne LBB0_501 + 0x8d, 0x7a, 0xff, //0x000012b4 leal $-1(%rdx), %edi + 0x21, 0xd7, //0x000012b7 andl %edx, %edi + 0x0f, 0x85, 0x3e, 0x17, 0x00, 0x00, //0x000012b9 jne LBB0_501 + 0x45, 0x85, 0xc0, //0x000012bf testl %r8d, %r8d + 0x0f, 0x84, 0x20, 0x00, 0x00, 0x00, //0x000012c2 je LBB0_212 + 0x41, 0x0f, 0xbc, 0xf8, //0x000012c8 bsfl %r8d, %edi + 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x000012cc cmpq $-1, $48(%rsp) + 0x0f, 0x85, 0xf0, 0x18, 0x00, 0x00, //0x000012d2 jne LBB0_520 + 0x48, 0x8b, 0x5c, 0x24, 0x38, //0x000012d8 movq $56(%rsp), %rbx + 0x4c, 0x01, 0xfb, //0x000012dd addq %r15, %rbx + 0x48, 0x01, 0xdf, //0x000012e0 addq %rbx, %rdi + 0x48, 0x89, 0x7c, 0x24, 0x30, //0x000012e3 movq %rdi, $48(%rsp) + //0x000012e8 LBB0_212 + 0x85, 0xf6, //0x000012e8 testl %esi, %esi + 0x4d, 0x89, 0xe8, //0x000012ea movq %r13, %r8 + 0x0f, 0x84, 0x2d, 0x00, 0x00, 0x00, //0x000012ed je LBB0_215 + 0x0f, 0xbc, 0xf6, //0x000012f3 bsfl %esi, %esi + 0x49, 0x83, 0xfb, 0xff, //0x000012f6 cmpq $-1, %r11 + 0x0f, 0x85, 0xd3, 0x18, 0x00, 0x00, //0x000012fa jne LBB0_521 + 0x48, 0x8b, 0x7c, 0x24, 0x38, //0x00001300 movq $56(%rsp), %rdi + 0x4c, 0x01, 0xff, //0x00001305 addq %r15, %rdi + 0x48, 0x01, 0xfe, //0x00001308 addq %rdi, %rsi + 0x49, 0x89, 0xf5, //0x0000130b movq %rsi, %r13 + 0x85, 0xd2, //0x0000130e testl %edx, %edx + 0x0f, 0x85, 0x15, 0x00, 0x00, 0x00, //0x00001310 jne LBB0_216 + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00001316 jmp LBB0_218 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000131b .p2align 4, 0x90 + //0x00001320 LBB0_215 + 0x4d, 0x89, 0xdd, //0x00001320 movq %r11, %r13 + 0x85, 0xd2, //0x00001323 testl %edx, %edx + 0x0f, 0x84, 0x1f, 0x00, 0x00, 0x00, //0x00001325 je LBB0_218 + //0x0000132b LBB0_216 + 0x0f, 0xbc, 0xd2, //0x0000132b bsfl %edx, %edx + 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000132e cmpq $-1, $40(%rsp) + 0x0f, 0x85, 0xa4, 0x18, 0x00, 0x00, //0x00001334 jne LBB0_522 + 0x48, 0x8b, 0x74, 0x24, 0x38, //0x0000133a movq $56(%rsp), %rsi + 0x4c, 0x01, 0xfe, //0x0000133f addq %r15, %rsi + 0x48, 0x01, 0xf2, //0x00001342 addq %rsi, %rdx + 0x48, 0x89, 0x54, 0x24, 0x28, //0x00001345 movq %rdx, $40(%rsp) + //0x0000134a LBB0_218 + 0x83, 0xf9, 0x10, //0x0000134a cmpl $16, %ecx + 0x0f, 0x85, 0x85, 0x03, 0x00, 0x00, //0x0000134d jne LBB0_280 + 0x49, 0x83, 0xc1, 0xf0, //0x00001353 addq $-16, %r9 + 0x49, 0x83, 0xc7, 0x10, //0x00001357 addq $16, %r15 + 0x49, 0x83, 0xf9, 0x0f, //0x0000135b cmpq $15, %r9 + 0x0f, 0x87, 0x9b, 0xfe, 0xff, 0xff, //0x0000135f ja LBB0_204 + 0x4d, 0x01, 0xfa, //0x00001365 addq %r15, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001368 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x0000136d movq (%rsp), %r11 + //0x00001371 LBB0_221 + 0x4d, 0x85, 0xc9, //0x00001371 testq %r9, %r9 + 0xc5, 0xfe, 0x6f, 0x25, 0x24, 0xef, 0xff, 0xff, //0x00001374 vmovdqu $-4316(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x0f, 0x84, 0x6f, 0x03, 0x00, 0x00, //0x0000137c je LBB0_282 + 0x4b, 0x8d, 0x0c, 0x0a, //0x00001382 leaq (%r10,%r9), %rcx + 0x48, 0x89, 0x4c, 0x24, 0x38, //0x00001386 movq %rcx, $56(%rsp) + 0x4c, 0x89, 0xd6, //0x0000138b movq %r10, %rsi + 0x48, 0x2b, 0x74, 0x24, 0x10, //0x0000138e subq $16(%rsp), %rsi + 0x4c, 0x29, 0xf6, //0x00001393 subq %r14, %rsi + 0x48, 0x83, 0xc6, 0x01, //0x00001396 addq $1, %rsi + 0x31, 0xc9, //0x0000139a xorl %ecx, %ecx + 0xc5, 0xfe, 0x6f, 0x1d, 0x1c, 0xee, 0xff, 0xff, //0x0000139c vmovdqu $-4580(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xe9, 0x24, 0x00, 0x00, 0x00, //0x000013a4 jmp LBB0_227 + //0x000013a9 LBB0_223 + 0x83, 0xff, 0x65, //0x000013a9 cmpl $101, %edi + 0x0f, 0x85, 0x3c, 0x03, 0x00, 0x00, //0x000013ac jne LBB0_281 + //0x000013b2 LBB0_224 + 0x49, 0x83, 0xfd, 0xff, //0x000013b2 cmpq $-1, %r13 + 0x0f, 0x85, 0x6e, 0x16, 0x00, 0x00, //0x000013b6 jne LBB0_503 + 0x4c, 0x8d, 0x2c, 0x0e, //0x000013bc leaq (%rsi,%rcx), %r13 + //0x000013c0 .p2align 4, 0x90 + //0x000013c0 LBB0_226 + 0x48, 0x83, 0xc1, 0x01, //0x000013c0 addq $1, %rcx + 0x49, 0x39, 0xc9, //0x000013c4 cmpq %rcx, %r9 + 0x0f, 0x84, 0xe8, 0x12, 0x00, 0x00, //0x000013c7 je LBB0_469 + //0x000013cd LBB0_227 + 0x41, 0x0f, 0xbe, 0x3c, 0x0a, //0x000013cd movsbl (%r10,%rcx), %edi + 0x8d, 0x5f, 0xd0, //0x000013d2 leal $-48(%rdi), %ebx + 0x83, 0xfb, 0x0a, //0x000013d5 cmpl $10, %ebx + 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x000013d8 jb LBB0_226 + 0x8d, 0x5f, 0xd5, //0x000013de leal $-43(%rdi), %ebx + 0x83, 0xfb, 0x1a, //0x000013e1 cmpl $26, %ebx + 0x0f, 0x87, 0xbf, 0xff, 0xff, 0xff, //0x000013e4 ja LBB0_223 + 0x48, 0x8d, 0x15, 0x5b, 0x2d, 0x00, 0x00, //0x000013ea leaq $11611(%rip), %rdx /* LJTI0_3+0(%rip) */ + 0x48, 0x63, 0x3c, 0x9a, //0x000013f1 movslq (%rdx,%rbx,4), %rdi + 0x48, 0x01, 0xd7, //0x000013f5 addq %rdx, %rdi + 0xff, 0xe7, //0x000013f8 jmpq *%rdi + //0x000013fa LBB0_230 + 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x000013fa cmpq $-1, $40(%rsp) + 0x0f, 0x85, 0x24, 0x16, 0x00, 0x00, //0x00001400 jne LBB0_503 + 0x48, 0x8d, 0x14, 0x0e, //0x00001406 leaq (%rsi,%rcx), %rdx + 0x48, 0x89, 0x54, 0x24, 0x28, //0x0000140a movq %rdx, $40(%rsp) + 0xe9, 0xac, 0xff, 0xff, 0xff, //0x0000140f jmp LBB0_226 + //0x00001414 LBB0_232 + 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x00001414 cmpq $-1, $48(%rsp) + 0x0f, 0x85, 0x0a, 0x16, 0x00, 0x00, //0x0000141a jne LBB0_503 + 0x48, 0x8d, 0x14, 0x0e, //0x00001420 leaq (%rsi,%rcx), %rdx + 0x48, 0x89, 0x54, 0x24, 0x30, //0x00001424 movq %rdx, $48(%rsp) + 0xe9, 0x92, 0xff, 0xff, 0xff, //0x00001429 jmp LBB0_226 + //0x0000142e LBB0_234 + 0x4c, 0x01, 0xd1, //0x0000142e addq %r10, %rcx + 0x4c, 0x01, 0xc1, //0x00001431 addq %r8, %rcx + 0xc5, 0xf8, 0x77, //0x00001434 vzeroupper + 0x49, 0x89, 0xca, //0x00001437 movq %rcx, %r10 + 0xe9, 0xb2, 0x02, 0x00, 0x00, //0x0000143a jmp LBB0_282 + //0x0000143f LBB0_238 + 0x41, 0xf6, 0xc3, 0x40, //0x0000143f testb $64, %r11b + 0x0f, 0x85, 0x84, 0x04, 0x00, 0x00, //0x00001443 jne LBB0_306 + 0x4d, 0x8b, 0x0f, //0x00001449 movq (%r15), %r9 + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x0000144c movq $32(%rsp), %rax + 0x4c, 0x8b, 0x40, 0x08, //0x00001451 movq $8(%rax), %r8 + 0x41, 0xf6, 0xc3, 0x20, //0x00001455 testb $32, %r11b + 0x0f, 0x85, 0x88, 0x0d, 0x00, 0x00, //0x00001459 jne LBB0_396 + 0x4d, 0x89, 0xc3, //0x0000145f movq %r8, %r11 + 0x4d, 0x29, 0xcb, //0x00001462 subq %r9, %r11 + 0x0f, 0x84, 0x13, 0x2a, 0x00, 0x00, //0x00001465 je LBB0_732 + 0x49, 0x83, 0xfb, 0x40, //0x0000146b cmpq $64, %r11 + 0x0f, 0x82, 0x71, 0x19, 0x00, 0x00, //0x0000146f jb LBB0_541 + 0x4c, 0x89, 0xce, //0x00001475 movq %r9, %rsi + 0x48, 0xf7, 0xd6, //0x00001478 notq %rsi + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000147b movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x00001482 movq %r9, %rax + 0x45, 0x31, 0xd2, //0x00001485 xorl %r10d, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001488 .p2align 4, 0x90 + //0x00001490 LBB0_243 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x00001490 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x00001496 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x0000149d vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x000014a1 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd6, //0x000014a5 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x000014a9 vpmovmskb %ymm2, %ebx + 0xc5, 0xfd, 0x74, 0xc7, //0x000014ad vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf8, //0x000014b1 vpmovmskb %ymm0, %edi + 0xc5, 0xf5, 0x74, 0xc7, //0x000014b5 vpcmpeqb %ymm7, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x000014b9 vpmovmskb %ymm0, %ecx + 0x48, 0xc1, 0xe3, 0x20, //0x000014bd shlq $32, %rbx + 0x48, 0x09, 0xda, //0x000014c1 orq %rbx, %rdx + 0x48, 0xc1, 0xe1, 0x20, //0x000014c4 shlq $32, %rcx + 0x48, 0x09, 0xcf, //0x000014c8 orq %rcx, %rdi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000014cb jne LBB0_252 + 0x4d, 0x85, 0xd2, //0x000014d1 testq %r10, %r10 + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x000014d4 jne LBB0_254 + 0x45, 0x31, 0xd2, //0x000014da xorl %r10d, %r10d + 0x48, 0x85, 0xd2, //0x000014dd testq %rdx, %rdx + 0x0f, 0x85, 0x7e, 0x00, 0x00, 0x00, //0x000014e0 jne LBB0_255 + //0x000014e6 LBB0_246 + 0x49, 0x83, 0xc3, 0xc0, //0x000014e6 addq $-64, %r11 + 0x48, 0x83, 0xc6, 0xc0, //0x000014ea addq $-64, %rsi + 0x48, 0x83, 0xc0, 0x40, //0x000014ee addq $64, %rax + 0x49, 0x83, 0xfb, 0x3f, //0x000014f2 cmpq $63, %r11 + 0x0f, 0x87, 0x94, 0xff, 0xff, 0xff, //0x000014f6 ja LBB0_243 + 0xe9, 0xe8, 0x16, 0x00, 0x00, //0x000014fc jmp LBB0_247 + //0x00001501 LBB0_252 + 0x49, 0x83, 0xff, 0xff, //0x00001501 cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00001505 jne LBB0_254 + 0x4c, 0x0f, 0xbc, 0xff, //0x0000150b bsfq %rdi, %r15 + 0x49, 0x01, 0xc7, //0x0000150f addq %rax, %r15 + //0x00001512 LBB0_254 + 0x4c, 0x89, 0xd1, //0x00001512 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00001515 notq %rcx + 0x48, 0x21, 0xf9, //0x00001518 andq %rdi, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x0000151b leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xd5, //0x0000151f orq %r10, %r13 + 0x4c, 0x89, 0xeb, //0x00001522 movq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00001525 notq %rbx + 0x48, 0x21, 0xfb, //0x00001528 andq %rdi, %rbx + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000152b movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfb, //0x00001535 andq %rdi, %rbx + 0x45, 0x31, 0xd2, //0x00001538 xorl %r10d, %r10d + 0x48, 0x01, 0xcb, //0x0000153b addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc2, //0x0000153e setb %r10b + 0x48, 0x01, 0xdb, //0x00001542 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001545 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x0000154f xorq %rcx, %rbx + 0x4c, 0x21, 0xeb, //0x00001552 andq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00001555 notq %rbx + 0x48, 0x21, 0xda, //0x00001558 andq %rbx, %rdx + 0x48, 0x85, 0xd2, //0x0000155b testq %rdx, %rdx + 0x0f, 0x84, 0x82, 0xff, 0xff, 0xff, //0x0000155e je LBB0_246 + //0x00001564 LBB0_255 + 0xc5, 0x7d, 0x7f, 0xea, //0x00001564 vmovdqa %ymm13, %ymm2 + 0x48, 0x0f, 0xbc, 0xc2, //0x00001568 bsfq %rdx, %rax + 0x48, 0x29, 0xf0, //0x0000156c subq %rsi, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x0000156f movq (%rsp), %r11 + 0xe9, 0x64, 0x11, 0x00, 0x00, //0x00001573 jmp LBB0_473 + //0x00001578 LBB0_256 + 0x4c, 0x89, 0xd9, //0x00001578 movq %r11, %rcx + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x0000157b movq $32(%rsp), %rax + 0x4c, 0x8b, 0x58, 0x08, //0x00001580 movq $8(%rax), %r11 + 0x49, 0x8b, 0x07, //0x00001584 movq (%r15), %rax + 0xf6, 0xc1, 0x40, //0x00001587 testb $64, %cl + 0x0f, 0x85, 0x1d, 0x04, 0x00, 0x00, //0x0000158a jne LBB0_317 + 0x49, 0x29, 0xc3, //0x00001590 subq %rax, %r11 + 0x0f, 0x84, 0xc6, 0x28, 0x00, 0x00, //0x00001593 je LBB0_723 + 0x4d, 0x8d, 0x2c, 0x06, //0x00001599 leaq (%r14,%rax), %r13 + 0x41, 0x80, 0x7d, 0x00, 0x30, //0x0000159d cmpb $48, (%r13) + 0x0f, 0x85, 0xa6, 0x0d, 0x00, 0x00, //0x000015a2 jne LBB0_417 + 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000015a8 movl $1, %r8d + 0x49, 0x83, 0xfb, 0x01, //0x000015ae cmpq $1, %r11 + 0x0f, 0x85, 0x6c, 0x0d, 0x00, 0x00, //0x000015b2 jne LBB0_415 + //0x000015b8 LBB0_260 + 0x48, 0x89, 0xc1, //0x000015b8 movq %rax, %rcx + 0xe9, 0x8e, 0x15, 0x00, 0x00, //0x000015bb jmp LBB0_514 + //0x000015c0 LBB0_261 + 0x41, 0xf6, 0xc3, 0x40, //0x000015c0 testb $64, %r11b + 0x0f, 0x85, 0x7a, 0x05, 0x00, 0x00, //0x000015c4 jne LBB0_334 + 0x48, 0x8b, 0x54, 0x24, 0x18, //0x000015ca movq $24(%rsp), %rdx + 0x48, 0x8b, 0x0a, //0x000015cf movq (%rdx), %rcx + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000015d2 cmpq $4095, %rcx + 0x0f, 0x8f, 0xca, 0x26, 0x00, 0x00, //0x000015d9 jg LBB0_724 + 0x48, 0x8d, 0x41, 0x01, //0x000015df leaq $1(%rcx), %rax + 0x48, 0x89, 0x02, //0x000015e3 movq %rax, (%rdx) + 0x48, 0xc7, 0x44, 0xca, 0x08, 0x05, 0x00, 0x00, 0x00, //0x000015e6 movq $5, $8(%rdx,%rcx,8) + 0xe9, 0xac, 0xed, 0xff, 0xff, //0x000015ef jmp LBB0_3 + //0x000015f4 LBB0_264 + 0x49, 0x8b, 0x0f, //0x000015f4 movq (%r15), %rcx + 0x48, 0x8b, 0x54, 0x24, 0x20, //0x000015f7 movq $32(%rsp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x000015fc movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfc, //0x00001600 leaq $-4(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001604 cmpq %rsi, %rcx + 0x0f, 0x87, 0x1a, 0x27, 0x00, 0x00, //0x00001607 ja LBB0_711 + 0x41, 0x8b, 0x14, 0x0e, //0x0000160d movl (%r14,%rcx), %edx + 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x00001611 cmpl $1702063201, %edx + 0x0f, 0x85, 0x28, 0x27, 0x00, 0x00, //0x00001617 jne LBB0_712 + 0x48, 0x8d, 0x41, 0x04, //0x0000161d leaq $4(%rcx), %rax + 0x49, 0x89, 0x07, //0x00001621 movq %rax, (%r15) + 0x48, 0x85, 0xc9, //0x00001624 testq %rcx, %rcx + 0x0f, 0x8f, 0x73, 0xed, 0xff, 0xff, //0x00001627 jg LBB0_3 + 0xe9, 0x06, 0x28, 0x00, 0x00, //0x0000162d jmp LBB0_267 + //0x00001632 LBB0_268 + 0x49, 0x8b, 0x0f, //0x00001632 movq (%r15), %rcx + 0x48, 0x8b, 0x54, 0x24, 0x20, //0x00001635 movq $32(%rsp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x0000163a movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x0000163e leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001642 cmpq %rsi, %rcx + 0x0f, 0x87, 0xdc, 0x26, 0x00, 0x00, //0x00001645 ja LBB0_711 + 0x48, 0x8d, 0x41, 0xff, //0x0000164b leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0e, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x0000164f cmpl $1819047278, $-1(%r14,%rcx) + 0x0f, 0x84, 0x31, 0x00, 0x00, 0x00, //0x00001658 je LBB0_276 + 0xe9, 0x37, 0x27, 0x00, 0x00, //0x0000165e jmp LBB0_270 + //0x00001663 LBB0_274 + 0x49, 0x8b, 0x0f, //0x00001663 movq (%r15), %rcx + 0x48, 0x8b, 0x54, 0x24, 0x20, //0x00001666 movq $32(%rsp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x0000166b movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x0000166f leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001673 cmpq %rsi, %rcx + 0x0f, 0x87, 0xab, 0x26, 0x00, 0x00, //0x00001676 ja LBB0_711 + 0x48, 0x8d, 0x41, 0xff, //0x0000167c leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0e, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00001680 cmpl $1702195828, $-1(%r14,%rcx) + 0x0f, 0x85, 0x52, 0x27, 0x00, 0x00, //0x00001689 jne LBB0_717 + //0x0000168f LBB0_276 + 0x48, 0x8d, 0x51, 0x03, //0x0000168f leaq $3(%rcx), %rdx + 0x49, 0x89, 0x17, //0x00001693 movq %rdx, (%r15) + 0x48, 0x85, 0xc9, //0x00001696 testq %rcx, %rcx + 0x0f, 0x8f, 0x01, 0xed, 0xff, 0xff, //0x00001699 jg LBB0_3 + 0xe9, 0x71, 0x26, 0x00, 0x00, //0x0000169f jmp LBB0_728 + //0x000016a4 LBB0_277 + 0x41, 0xf6, 0xc3, 0x40, //0x000016a4 testb $64, %r11b + 0x0f, 0x85, 0x9f, 0x07, 0x00, 0x00, //0x000016a8 jne LBB0_360 + 0x48, 0x8b, 0x54, 0x24, 0x18, //0x000016ae movq $24(%rsp), %rdx + 0x48, 0x8b, 0x0a, //0x000016b3 movq (%rdx), %rcx + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000016b6 cmpq $4095, %rcx + 0x0f, 0x8f, 0xe6, 0x25, 0x00, 0x00, //0x000016bd jg LBB0_724 + 0x48, 0x8d, 0x41, 0x01, //0x000016c3 leaq $1(%rcx), %rax + 0x48, 0x89, 0x02, //0x000016c7 movq %rax, (%rdx) + 0x48, 0xc7, 0x44, 0xca, 0x08, 0x06, 0x00, 0x00, 0x00, //0x000016ca movq $6, $8(%rdx,%rcx,8) + 0xe9, 0xc8, 0xec, 0xff, 0xff, //0x000016d3 jmp LBB0_3 + //0x000016d8 LBB0_280 + 0x89, 0xc9, //0x000016d8 movl %ecx, %ecx + 0x49, 0x01, 0xca, //0x000016da addq %rcx, %r10 + 0x4d, 0x01, 0xfa, //0x000016dd addq %r15, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x000016e0 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x000016e5 movq (%rsp), %r11 + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x000016e9 jmp LBB0_282 + //0x000016ee LBB0_281 + 0x49, 0x01, 0xca, //0x000016ee addq %rcx, %r10 + //0x000016f1 LBB0_282 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000016f1 movq $-1, %rcx + 0x48, 0x8b, 0x74, 0x24, 0x30, //0x000016f8 movq $48(%rsp), %rsi + 0x48, 0x85, 0xf6, //0x000016fd testq %rsi, %rsi + 0x48, 0x8b, 0x54, 0x24, 0x28, //0x00001700 movq $40(%rsp), %rdx + 0x0f, 0x84, 0xf6, 0x25, 0x00, 0x00, //0x00001705 je LBB0_708 + 0x48, 0x85, 0xd2, //0x0000170b testq %rdx, %rdx + 0xc5, 0xfe, 0x6f, 0x1d, 0xaa, 0xea, 0xff, 0xff, //0x0000170e vmovdqu $-5462(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0x0f, 0x84, 0xe5, 0x25, 0x00, 0x00, //0x00001716 je LBB0_708 + 0x4d, 0x85, 0xed, //0x0000171c testq %r13, %r13 + 0x0f, 0x84, 0xdc, 0x25, 0x00, 0x00, //0x0000171f je LBB0_708 + 0x4d, 0x29, 0xc2, //0x00001725 subq %r8, %r10 + 0x49, 0x8d, 0x4a, 0xff, //0x00001728 leaq $-1(%r10), %rcx + 0x48, 0x39, 0xce, //0x0000172c cmpq %rcx, %rsi + 0x0f, 0x84, 0x80, 0x00, 0x00, 0x00, //0x0000172f je LBB0_291 + 0x48, 0x39, 0xca, //0x00001735 cmpq %rcx, %rdx + 0x0f, 0x84, 0x77, 0x00, 0x00, 0x00, //0x00001738 je LBB0_291 + 0x49, 0x39, 0xcd, //0x0000173e cmpq %rcx, %r13 + 0x0f, 0x84, 0x6e, 0x00, 0x00, 0x00, //0x00001741 je LBB0_291 + 0x48, 0x85, 0xd2, //0x00001747 testq %rdx, %rdx + 0xc5, 0xfe, 0x6f, 0x2d, 0x6e, 0xe9, 0xff, 0xff, //0x0000174a vmovdqu $-5778(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x86, 0xe9, 0xff, 0xff, //0x00001752 vmovdqu $-5754(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x9e, 0xe9, 0xff, 0xff, //0x0000175a vmovdqu $-5730(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0xb6, 0xe9, 0xff, 0xff, //0x00001762 vmovdqu $-5706(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000176a vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0x89, 0xea, 0xff, 0xff, //0x0000176f vmovdqu $-5495(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x05, 0xa1, 0xea, 0xff, 0xff, //0x00001777 vmovdqu $-5471(%rip), %ymm0 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0xb9, 0xea, 0xff, 0xff, //0x0000177f vmovdqu $-5447(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x51, 0xea, 0xff, 0xff, //0x00001787 vmovdqu $-5551(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x09, 0xeb, 0xff, 0xff, //0x0000178f vmovdqu $-5367(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x0f, 0x8e, 0xa5, 0x00, 0x00, 0x00, //0x00001797 jle LBB0_297 + 0x48, 0x8d, 0x4a, 0xff, //0x0000179d leaq $-1(%rdx), %rcx + 0x49, 0x39, 0xcd, //0x000017a1 cmpq %rcx, %r13 + 0x0f, 0x84, 0x98, 0x00, 0x00, 0x00, //0x000017a4 je LBB0_297 + 0x48, 0xf7, 0xd2, //0x000017aa notq %rdx + 0x49, 0x89, 0xd2, //0x000017ad movq %rdx, %r10 + 0xe9, 0x50, 0x00, 0x00, 0x00, //0x000017b0 jmp LBB0_292 + //0x000017b5 LBB0_291 + 0x49, 0xf7, 0xda, //0x000017b5 negq %r10 + 0xc5, 0xfe, 0x6f, 0x2d, 0x00, 0xe9, 0xff, 0xff, //0x000017b8 vmovdqu $-5888(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x18, 0xe9, 0xff, 0xff, //0x000017c0 vmovdqu $-5864(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x30, 0xe9, 0xff, 0xff, //0x000017c8 vmovdqu $-5840(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x48, 0xe9, 0xff, 0xff, //0x000017d0 vmovdqu $-5816(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000017d8 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0x1b, 0xea, 0xff, 0xff, //0x000017dd vmovdqu $-5605(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x05, 0x33, 0xea, 0xff, 0xff, //0x000017e5 vmovdqu $-5581(%rip), %ymm0 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0x4b, 0xea, 0xff, 0xff, //0x000017ed vmovdqu $-5557(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0xe3, 0xe9, 0xff, 0xff, //0x000017f5 vmovdqu $-5661(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x9b, 0xea, 0xff, 0xff, //0x000017fd vmovdqu $-5477(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + //0x00001805 LBB0_292 + 0xc5, 0x7e, 0x6f, 0x1d, 0x33, 0xe9, 0xff, 0xff, //0x00001805 vmovdqu $-5837(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x4b, 0xe9, 0xff, 0xff, //0x0000180d vmovdqu $-5813(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + //0x00001815 LBB0_293 + 0x4c, 0x8b, 0x6c, 0x24, 0x10, //0x00001815 movq $16(%rsp), %r13 + //0x0000181a LBB0_294 + 0x4d, 0x85, 0xd2, //0x0000181a testq %r10, %r10 + 0x0f, 0x88, 0xdb, 0x24, 0x00, 0x00, //0x0000181d js LBB0_707 + 0x49, 0x8b, 0x0f, //0x00001823 movq (%r15), %rcx + 0x48, 0x83, 0xc1, 0xff, //0x00001826 addq $-1, %rcx + 0xc5, 0x7d, 0x6f, 0xe8, //0x0000182a vmovdqa %ymm0, %ymm13 + //0x0000182e LBB0_296 + 0x4c, 0x01, 0xd1, //0x0000182e addq %r10, %rcx + 0x49, 0x89, 0x0f, //0x00001831 movq %rcx, (%r15) + 0x4d, 0x85, 0xed, //0x00001834 testq %r13, %r13 + 0x0f, 0x8f, 0x63, 0xeb, 0xff, 0xff, //0x00001837 jg LBB0_3 + 0xe9, 0xd3, 0x24, 0x00, 0x00, //0x0000183d jmp LBB0_728 + //0x00001842 LBB0_297 + 0x48, 0x89, 0xf1, //0x00001842 movq %rsi, %rcx + 0x4c, 0x09, 0xe9, //0x00001845 orq %r13, %rcx + 0x0f, 0x99, 0xc1, //0x00001848 setns %cl + 0xc5, 0x7e, 0x6f, 0x1d, 0xed, 0xe8, 0xff, 0xff, //0x0000184b vmovdqu $-5907(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x05, 0xe9, 0xff, 0xff, //0x00001853 vmovdqu $-5883(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + 0x0f, 0x88, 0x6d, 0x09, 0x00, 0x00, //0x0000185b js LBB0_395 + 0x4c, 0x39, 0xee, //0x00001861 cmpq %r13, %rsi + 0x0f, 0x8c, 0x64, 0x09, 0x00, 0x00, //0x00001864 jl LBB0_395 + 0x48, 0xf7, 0xd6, //0x0000186a notq %rsi + 0x49, 0x89, 0xf2, //0x0000186d movq %rsi, %r10 + 0xe9, 0xa0, 0xff, 0xff, 0xff, //0x00001870 jmp LBB0_293 + //0x00001875 LBB0_300 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001875 movl $64, %edx + 0x4c, 0x8b, 0x1c, 0x24, //0x0000187a movq (%rsp), %r11 + 0x48, 0x39, 0xca, //0x0000187e cmpq %rcx, %rdx + 0x0f, 0x82, 0xff, 0x25, 0x00, 0x00, //0x00001881 jb LBB0_162 + //0x00001887 LBB0_301 + 0x48, 0x01, 0xc8, //0x00001887 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000188a addq $1, %rax + //0x0000188e LBB0_302 + 0x48, 0x85, 0xc0, //0x0000188e testq %rax, %rax + 0x0f, 0x88, 0x2a, 0x24, 0x00, 0x00, //0x00001891 js LBB0_702 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001897 movq $8(%rsp), %r15 + 0x49, 0x89, 0x07, //0x0000189c movq %rax, (%r15) + 0x4d, 0x85, 0xc9, //0x0000189f testq %r9, %r9 + 0x0f, 0x8e, 0x32, 0x24, 0x00, 0x00, //0x000018a2 jle LBB0_475 + //0x000018a8 LBB0_304 + 0x49, 0x8b, 0x0a, //0x000018a8 movq (%r10), %rcx + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000018ab cmpq $4095, %rcx + 0x0f, 0x8f, 0xf1, 0x23, 0x00, 0x00, //0x000018b2 jg LBB0_724 + 0x48, 0x8d, 0x41, 0x01, //0x000018b8 leaq $1(%rcx), %rax + 0x49, 0x89, 0x02, //0x000018bc movq %rax, (%r10) + 0x49, 0xc7, 0x44, 0xca, 0x08, 0x04, 0x00, 0x00, 0x00, //0x000018bf movq $4, $8(%r10,%rcx,8) + 0xe9, 0xd3, 0xea, 0xff, 0xff, //0x000018c8 jmp LBB0_3 + //0x000018cd LBB0_306 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x000018cd movq $32(%rsp), %rcx + 0x4c, 0x8b, 0x51, 0x08, //0x000018d2 movq $8(%rcx), %r10 + 0x4d, 0x8b, 0x07, //0x000018d6 movq (%r15), %r8 + 0x4f, 0x8d, 0x0c, 0x06, //0x000018d9 leaq (%r14,%r8), %r9 + 0x4d, 0x29, 0xc2, //0x000018dd subq %r8, %r10 + 0x49, 0x83, 0xfa, 0x20, //0x000018e0 cmpq $32, %r10 + 0x0f, 0x8c, 0xac, 0x00, 0x00, 0x00, //0x000018e4 jl LBB0_316 + 0xba, 0x20, 0x00, 0x00, 0x00, //0x000018ea movl $32, %edx + 0x31, 0xf6, //0x000018ef xorl %esi, %esi + 0x45, 0x31, 0xff, //0x000018f1 xorl %r15d, %r15d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000018f4 .p2align 4, 0x90 + //0x00001900 LBB0_308 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00001900 vmovdqu (%r9,%rsi), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00001906 vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd9, //0x0000190a vpmovmskb %ymm1, %r11d + 0xc5, 0xfd, 0x74, 0xc7, //0x0000190e vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd8, //0x00001912 vpmovmskb %ymm0, %ebx + 0x85, 0xdb, //0x00001916 testl %ebx, %ebx + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00001918 jne LBB0_311 + 0x4d, 0x85, 0xff, //0x0000191e testq %r15, %r15 + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00001921 jne LBB0_311 + 0x45, 0x31, 0xff, //0x00001927 xorl %r15d, %r15d + 0xe9, 0x35, 0x00, 0x00, 0x00, //0x0000192a jmp LBB0_312 + 0x90, //0x0000192f .p2align 4, 0x90 + //0x00001930 LBB0_311 + 0x44, 0x89, 0xf9, //0x00001930 movl %r15d, %ecx + 0xf7, 0xd1, //0x00001933 notl %ecx + 0x21, 0xd9, //0x00001935 andl %ebx, %ecx + 0x44, 0x8d, 0x2c, 0x09, //0x00001937 leal (%rcx,%rcx), %r13d + 0x45, 0x09, 0xfd, //0x0000193b orl %r15d, %r13d + 0x44, 0x89, 0xef, //0x0000193e movl %r13d, %edi + 0xf7, 0xd7, //0x00001941 notl %edi + 0x21, 0xdf, //0x00001943 andl %ebx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001945 andl $-1431655766, %edi + 0x45, 0x31, 0xff, //0x0000194b xorl %r15d, %r15d + 0x01, 0xcf, //0x0000194e addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc7, //0x00001950 setb %r15b + 0x01, 0xff, //0x00001954 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00001956 xorl $1431655765, %edi + 0x44, 0x21, 0xef, //0x0000195c andl %r13d, %edi + 0xf7, 0xd7, //0x0000195f notl %edi + 0x41, 0x21, 0xfb, //0x00001961 andl %edi, %r11d + //0x00001964 LBB0_312 + 0x4d, 0x85, 0xdb, //0x00001964 testq %r11, %r11 + 0x0f, 0x85, 0x2d, 0xf1, 0xff, 0xff, //0x00001967 jne LBB0_104 + 0x48, 0x83, 0xc6, 0x20, //0x0000196d addq $32, %rsi + 0x49, 0x8d, 0x0c, 0x12, //0x00001971 leaq (%r10,%rdx), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00001975 addq $-32, %rcx + 0x48, 0x83, 0xc2, 0xe0, //0x00001979 addq $-32, %rdx + 0x48, 0x83, 0xf9, 0x3f, //0x0000197d cmpq $63, %rcx + 0x0f, 0x8f, 0x79, 0xff, 0xff, 0xff, //0x00001981 jg LBB0_308 + 0x4d, 0x85, 0xff, //0x00001987 testq %r15, %r15 + 0x0f, 0x85, 0xad, 0x1e, 0x00, 0x00, //0x0000198a jne LBB0_645 + 0x49, 0x01, 0xf1, //0x00001990 addq %rsi, %r9 + 0x49, 0x29, 0xf2, //0x00001993 subq %rsi, %r10 + //0x00001996 LBB0_316 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001996 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x0000199b movq (%rsp), %r11 + 0x4d, 0x85, 0xd2, //0x0000199f testq %r10, %r10 + 0x0f, 0x8f, 0x07, 0x1f, 0x00, 0x00, //0x000019a2 jg LBB0_649 + 0xe9, 0x68, 0x23, 0x00, 0x00, //0x000019a8 jmp LBB0_728 + //0x000019ad LBB0_317 + 0x4c, 0x89, 0xde, //0x000019ad movq %r11, %rsi + 0x48, 0x29, 0xc6, //0x000019b0 subq %rax, %rsi + 0x48, 0x83, 0xfe, 0x20, //0x000019b3 cmpq $32, %rsi + 0x0f, 0x82, 0xe8, 0x13, 0x00, 0x00, //0x000019b7 jb LBB0_539 + 0x48, 0x89, 0xc7, //0x000019bd movq %rax, %rdi + 0x48, 0xf7, 0xdf, //0x000019c0 negq %rdi + 0x4c, 0x8d, 0x40, 0x01, //0x000019c3 leaq $1(%rax), %r8 + 0x48, 0x8d, 0x50, 0xff, //0x000019c7 leaq $-1(%rax), %rdx + 0x49, 0x8d, 0x34, 0x06, //0x000019cb leaq (%r14,%rax), %rsi + 0x48, 0x83, 0xc6, 0xff, //0x000019cf addq $-1, %rsi + 0x48, 0x89, 0xc3, //0x000019d3 movq %rax, %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000019d6 .p2align 4, 0x90 + //0x000019e0 LBB0_319 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x1e, //0x000019e0 vmovdqu (%r14,%rbx), %ymm0 + 0xc5, 0xfd, 0x74, 0xcb, //0x000019e6 vpcmpeqb %ymm3, %ymm0, %ymm1 + 0xc5, 0x8d, 0xdb, 0xc0, //0x000019ea vpand %ymm0, %ymm14, %ymm0 + 0xc5, 0xfd, 0x74, 0x05, 0xaa, 0xe7, 0xff, 0xff, //0x000019ee vpcmpeqb $-6230(%rip), %ymm0, %ymm0 /* LCPI0_8+0(%rip) */ + 0xc5, 0xfd, 0xeb, 0xc1, //0x000019f6 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x000019fa vpmovmskb %ymm0, %ecx + 0x85, 0xc9, //0x000019fe testl %ecx, %ecx + 0x0f, 0x85, 0x57, 0x07, 0x00, 0x00, //0x00001a00 jne LBB0_388 + 0x48, 0x83, 0xc3, 0x20, //0x00001a06 addq $32, %rbx + 0x49, 0x8d, 0x0c, 0x3b, //0x00001a0a leaq (%r11,%rdi), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00001a0e addq $-32, %rcx + 0x48, 0x83, 0xc7, 0xe0, //0x00001a12 addq $-32, %rdi + 0x49, 0x83, 0xc0, 0x20, //0x00001a16 addq $32, %r8 + 0x48, 0x83, 0xc2, 0x20, //0x00001a1a addq $32, %rdx + 0x48, 0x83, 0xc6, 0x20, //0x00001a1e addq $32, %rsi + 0x48, 0x83, 0xf9, 0x1f, //0x00001a22 cmpq $31, %rcx + 0x0f, 0x87, 0xb4, 0xff, 0xff, 0xff, //0x00001a26 ja LBB0_319 + 0x4d, 0x89, 0xf0, //0x00001a2c movq %r14, %r8 + 0x49, 0x29, 0xf8, //0x00001a2f subq %rdi, %r8 + 0x49, 0x01, 0xfb, //0x00001a32 addq %rdi, %r11 + 0x4c, 0x89, 0xde, //0x00001a35 movq %r11, %rsi + 0x48, 0x83, 0xfe, 0x10, //0x00001a38 cmpq $16, %rsi + 0x4c, 0x8b, 0x1c, 0x24, //0x00001a3c movq (%rsp), %r11 + 0x0f, 0x82, 0x69, 0x00, 0x00, 0x00, //0x00001a40 jb LBB0_325 + //0x00001a46 LBB0_322 + 0x4d, 0x89, 0xf1, //0x00001a46 movq %r14, %r9 + 0x4d, 0x29, 0xc1, //0x00001a49 subq %r8, %r9 + 0x4c, 0x89, 0xc7, //0x00001a4c movq %r8, %rdi + 0x4c, 0x29, 0xf7, //0x00001a4f subq %r14, %rdi + 0x48, 0x83, 0xc7, 0x01, //0x00001a52 addq $1, %rdi + 0x49, 0x8d, 0x58, 0xff, //0x00001a56 leaq $-1(%r8), %rbx + 0x48, 0x89, 0xda, //0x00001a5a movq %rbx, %rdx + 0x4c, 0x29, 0xf2, //0x00001a5d subq %r14, %rdx + //0x00001a60 LBB0_323 + 0xc4, 0xc1, 0x7a, 0x6f, 0x00, //0x00001a60 vmovdqu (%r8), %xmm0 + 0xc5, 0xf9, 0x74, 0x0d, 0xa3, 0xe5, 0xff, 0xff, //0x00001a65 vpcmpeqb $-6749(%rip), %xmm0, %xmm1 /* LCPI0_11+0(%rip) */ + 0xc5, 0xf9, 0xdb, 0x05, 0xab, 0xe5, 0xff, 0xff, //0x00001a6d vpand $-6741(%rip), %xmm0, %xmm0 /* LCPI0_12+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0xb3, 0xe5, 0xff, 0xff, //0x00001a75 vpcmpeqb $-6733(%rip), %xmm0, %xmm0 /* LCPI0_13+0(%rip) */ + 0xc5, 0xf9, 0xeb, 0xc1, //0x00001a7d vpor %xmm1, %xmm0, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x00001a81 vpmovmskb %xmm0, %ecx + 0x85, 0xc9, //0x00001a85 testl %ecx, %ecx + 0x0f, 0x85, 0xd9, 0x10, 0x00, 0x00, //0x00001a87 jne LBB0_515 + 0x49, 0x83, 0xc0, 0x10, //0x00001a8d addq $16, %r8 + 0x48, 0x83, 0xc6, 0xf0, //0x00001a91 addq $-16, %rsi + 0x49, 0x83, 0xc1, 0xf0, //0x00001a95 addq $-16, %r9 + 0x48, 0x83, 0xc7, 0x10, //0x00001a99 addq $16, %rdi + 0x48, 0x83, 0xc2, 0x10, //0x00001a9d addq $16, %rdx + 0x48, 0x83, 0xc3, 0x10, //0x00001aa1 addq $16, %rbx + 0x48, 0x83, 0xfe, 0x0f, //0x00001aa5 cmpq $15, %rsi + 0x0f, 0x87, 0xb1, 0xff, 0xff, 0xff, //0x00001aa9 ja LBB0_323 + //0x00001aaf LBB0_325 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00001aaf vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00001ab3 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00001ab7 vmovdqa %ymm13, %ymm11 + 0x48, 0x85, 0xf6, //0x00001abc testq %rsi, %rsi + 0x0f, 0x84, 0x49, 0x00, 0x00, 0x00, //0x00001abf je LBB0_333 + 0x49, 0x8d, 0x0c, 0x30, //0x00001ac5 leaq (%r8,%rsi), %rcx + //0x00001ac9 LBB0_327 + 0x41, 0x0f, 0xb6, 0x10, //0x00001ac9 movzbl (%r8), %edx + 0x48, 0x83, 0xfa, 0x2c, //0x00001acd cmpq $44, %rdx + 0x0f, 0x87, 0x14, 0x00, 0x00, 0x00, //0x00001ad1 ja LBB0_329 + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00001ad7 movabsq $17596481021440, %rdi + 0x48, 0x0f, 0xa3, 0xd7, //0x00001ae1 btq %rdx, %rdi + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x00001ae5 jb LBB0_333 + //0x00001aeb LBB0_329 + 0x80, 0xfa, 0x5d, //0x00001aeb cmpb $93, %dl + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00001aee je LBB0_333 + 0x80, 0xfa, 0x7d, //0x00001af4 cmpb $125, %dl + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00001af7 je LBB0_333 + 0x49, 0x83, 0xc0, 0x01, //0x00001afd addq $1, %r8 + 0x48, 0x83, 0xc6, 0xff, //0x00001b01 addq $-1, %rsi + 0x0f, 0x85, 0xbe, 0xff, 0xff, 0xff, //0x00001b05 jne LBB0_327 + 0x49, 0x89, 0xc8, //0x00001b0b movq %rcx, %r8 + //0x00001b0e LBB0_333 + 0x4d, 0x29, 0xf0, //0x00001b0e subq %r14, %r8 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001b11 movq $8(%rsp), %r15 + 0x4d, 0x89, 0x07, //0x00001b16 movq %r8, (%r15) + 0x4c, 0x8b, 0x1c, 0x24, //0x00001b19 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001b1d vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001b22 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x71, 0xe7, 0xff, 0xff, //0x00001b27 vmovdqu $-6287(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x89, 0xe6, 0xff, 0xff, //0x00001b2f vmovdqu $-6519(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00001b37 vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x00001b3b vmovdqa %ymm1, %ymm12 + 0xe9, 0x7c, 0x06, 0x00, 0x00, //0x00001b3f jmp LBB0_393 + //0x00001b44 LBB0_334 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00001b44 movq $32(%rsp), %rcx + 0x4c, 0x8b, 0x49, 0x08, //0x00001b49 movq $8(%rcx), %r9 + 0x4d, 0x8b, 0x07, //0x00001b4d movq (%r15), %r8 + 0x4d, 0x29, 0xc1, //0x00001b50 subq %r8, %r9 + 0x4d, 0x01, 0xc6, //0x00001b53 addq %r8, %r14 + 0x45, 0x31, 0xdb, //0x00001b56 xorl %r11d, %r11d + 0x45, 0x31, 0xd2, //0x00001b59 xorl %r10d, %r10d + 0x45, 0x31, 0xff, //0x00001b5c xorl %r15d, %r15d + 0x31, 0xdb, //0x00001b5f xorl %ebx, %ebx + 0x49, 0x83, 0xf9, 0x40, //0x00001b61 cmpq $64, %r9 + 0x0f, 0x8d, 0x57, 0x01, 0x00, 0x00, //0x00001b65 jge LBB0_335 + //0x00001b6b LBB0_344 + 0x4d, 0x85, 0xc9, //0x00001b6b testq %r9, %r9 + 0x0f, 0x8e, 0x24, 0x23, 0x00, 0x00, //0x00001b6e jle LBB0_733 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00001b74 vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00001b78 vmovdqa %ymm13, %ymm11 + 0xc5, 0xf9, 0xef, 0xc0, //0x00001b7d vpxor %xmm0, %xmm0, %xmm0 + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x60, //0x00001b81 vmovdqu %ymm0, $96(%rsp) + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001b87 vmovdqu %ymm0, $64(%rsp) + 0x44, 0x89, 0xf1, //0x00001b8d movl %r14d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00001b90 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00001b96 cmpl $4033, %ecx + 0x0f, 0x82, 0x27, 0x00, 0x00, 0x00, //0x00001b9c jb LBB0_348 + 0x49, 0x83, 0xf9, 0x20, //0x00001ba2 cmpq $32, %r9 + 0x0f, 0x82, 0x40, 0x00, 0x00, 0x00, //0x00001ba6 jb LBB0_349 + 0xc4, 0xc1, 0x7e, 0x6f, 0x06, //0x00001bac vmovdqu (%r14), %ymm0 + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001bb1 vmovdqu %ymm0, $64(%rsp) + 0x49, 0x83, 0xc6, 0x20, //0x00001bb7 addq $32, %r14 + 0x49, 0x8d, 0x79, 0xe0, //0x00001bbb leaq $-32(%r9), %rdi + 0x48, 0x8d, 0x74, 0x24, 0x60, //0x00001bbf leaq $96(%rsp), %rsi + 0xe9, 0x2b, 0x00, 0x00, 0x00, //0x00001bc4 jmp LBB0_350 + //0x00001bc9 LBB0_348 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001bc9 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001bce vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xc5, 0xe6, 0xff, 0xff, //0x00001bd3 vmovdqu $-6459(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xdd, 0xe5, 0xff, 0xff, //0x00001bdb vmovdqu $-6691(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x00001be3 vmovdqa %ymm1, %ymm11 + 0xe9, 0xd6, 0x00, 0x00, 0x00, //0x00001be7 jmp LBB0_335 + //0x00001bec LBB0_349 + 0x48, 0x8d, 0x74, 0x24, 0x40, //0x00001bec leaq $64(%rsp), %rsi + 0x4c, 0x89, 0xcf, //0x00001bf1 movq %r9, %rdi + //0x00001bf4 LBB0_350 + 0x48, 0x83, 0xff, 0x10, //0x00001bf4 cmpq $16, %rdi + 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00001bf8 jb LBB0_351 + 0xc4, 0xc1, 0x7a, 0x6f, 0x06, //0x00001bfe vmovdqu (%r14), %xmm0 + 0xc5, 0xfa, 0x7f, 0x06, //0x00001c03 vmovdqu %xmm0, (%rsi) + 0x49, 0x83, 0xc6, 0x10, //0x00001c07 addq $16, %r14 + 0x48, 0x83, 0xc6, 0x10, //0x00001c0b addq $16, %rsi + 0x48, 0x83, 0xc7, 0xf0, //0x00001c0f addq $-16, %rdi + 0x48, 0x83, 0xff, 0x08, //0x00001c13 cmpq $8, %rdi + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00001c17 jae LBB0_358 + //0x00001c1d LBB0_352 + 0x48, 0x83, 0xff, 0x04, //0x00001c1d cmpq $4, %rdi + 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x00001c21 jl LBB0_353 + //0x00001c27 LBB0_359 + 0x41, 0x8b, 0x0e, //0x00001c27 movl (%r14), %ecx + 0x89, 0x0e, //0x00001c2a movl %ecx, (%rsi) + 0x49, 0x83, 0xc6, 0x04, //0x00001c2c addq $4, %r14 + 0x48, 0x83, 0xc6, 0x04, //0x00001c30 addq $4, %rsi + 0x48, 0x83, 0xc7, 0xfc, //0x00001c34 addq $-4, %rdi + 0x48, 0x83, 0xff, 0x02, //0x00001c38 cmpq $2, %rdi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001c3c jae LBB0_354 + 0xe9, 0x43, 0x00, 0x00, 0x00, //0x00001c42 jmp LBB0_355 + //0x00001c47 LBB0_351 + 0x48, 0x83, 0xff, 0x08, //0x00001c47 cmpq $8, %rdi + 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x00001c4b jb LBB0_352 + //0x00001c51 LBB0_358 + 0x49, 0x8b, 0x0e, //0x00001c51 movq (%r14), %rcx + 0x48, 0x89, 0x0e, //0x00001c54 movq %rcx, (%rsi) + 0x49, 0x83, 0xc6, 0x08, //0x00001c57 addq $8, %r14 + 0x48, 0x83, 0xc6, 0x08, //0x00001c5b addq $8, %rsi + 0x48, 0x83, 0xc7, 0xf8, //0x00001c5f addq $-8, %rdi + 0x48, 0x83, 0xff, 0x04, //0x00001c63 cmpq $4, %rdi + 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x00001c67 jge LBB0_359 + //0x00001c6d LBB0_353 + 0x48, 0x83, 0xff, 0x02, //0x00001c6d cmpq $2, %rdi + 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x00001c71 jb LBB0_355 + //0x00001c77 LBB0_354 + 0x41, 0x0f, 0xb7, 0x0e, //0x00001c77 movzwl (%r14), %ecx + 0x66, 0x89, 0x0e, //0x00001c7b movw %cx, (%rsi) + 0x49, 0x83, 0xc6, 0x02, //0x00001c7e addq $2, %r14 + 0x48, 0x83, 0xc6, 0x02, //0x00001c82 addq $2, %rsi + 0x48, 0x83, 0xc7, 0xfe, //0x00001c86 addq $-2, %rdi + //0x00001c8a LBB0_355 + 0x4c, 0x89, 0xf2, //0x00001c8a movq %r14, %rdx + 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001c8d leaq $64(%rsp), %r14 + 0x48, 0x85, 0xff, //0x00001c92 testq %rdi, %rdi + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001c95 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001c9a vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xf9, 0xe5, 0xff, 0xff, //0x00001c9f vmovdqu $-6663(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x11, 0xe5, 0xff, 0xff, //0x00001ca7 vmovdqu $-6895(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x00001caf vmovdqa %ymm1, %ymm11 + 0x0f, 0x84, 0x09, 0x00, 0x00, 0x00, //0x00001cb3 je LBB0_335 + 0x8a, 0x0a, //0x00001cb9 movb (%rdx), %cl + 0x88, 0x0e, //0x00001cbb movb %cl, (%rsi) + 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001cbd leaq $64(%rsp), %r14 + //0x00001cc2 LBB0_335 + 0xc4, 0x41, 0x7d, 0x6f, 0xfd, //0x00001cc2 vmovdqa %ymm13, %ymm15 + 0xc4, 0xc1, 0x7e, 0x6f, 0x0e, //0x00001cc7 vmovdqu (%r14), %ymm1 + 0xc4, 0xc1, 0x7e, 0x6f, 0x46, 0x20, //0x00001ccc vmovdqu $32(%r14), %ymm0 + 0xc5, 0xf5, 0x74, 0xd7, //0x00001cd2 vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00001cd6 vpmovmskb %ymm2, %edx + 0xc5, 0xfd, 0x74, 0xd7, //0x00001cda vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001cde vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001ce2 shlq $32, %rcx + 0x48, 0x09, 0xca, //0x00001ce6 orq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x00001ce9 movq %rdx, %rcx + 0xc4, 0x41, 0x7d, 0x6f, 0xea, //0x00001cec vmovdqa %ymm10, %ymm13 + 0x4c, 0x09, 0xd1, //0x00001cf1 orq %r10, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001cf4 jne LBB0_337 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001cfa movq $-1, %rdx + 0x45, 0x31, 0xd2, //0x00001d01 xorl %r10d, %r10d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001d04 jmp LBB0_338 + //0x00001d09 LBB0_337 + 0x4c, 0x89, 0xd1, //0x00001d09 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00001d0c notq %rcx + 0x48, 0x21, 0xd1, //0x00001d0f andq %rdx, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x00001d12 leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xd5, //0x00001d16 orq %r10, %r13 + 0x4c, 0x89, 0xef, //0x00001d19 movq %r13, %rdi + 0x48, 0xf7, 0xd7, //0x00001d1c notq %rdi + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001d1f movabsq $-6148914691236517206, %rsi + 0x48, 0x21, 0xf2, //0x00001d29 andq %rsi, %rdx + 0x48, 0x21, 0xfa, //0x00001d2c andq %rdi, %rdx + 0x45, 0x31, 0xd2, //0x00001d2f xorl %r10d, %r10d + 0x48, 0x01, 0xca, //0x00001d32 addq %rcx, %rdx + 0x41, 0x0f, 0x92, 0xc2, //0x00001d35 setb %r10b + 0x48, 0x01, 0xd2, //0x00001d39 addq %rdx, %rdx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001d3c movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xca, //0x00001d46 xorq %rcx, %rdx + 0x4c, 0x21, 0xea, //0x00001d49 andq %r13, %rdx + 0x48, 0xf7, 0xd2, //0x00001d4c notq %rdx + //0x00001d4f LBB0_338 + 0xc5, 0xfd, 0x74, 0xd6, //0x00001d4f vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001d53 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001d57 shlq $32, %rcx + 0xc5, 0xf5, 0x74, 0xd6, //0x00001d5b vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xf2, //0x00001d5f vpmovmskb %ymm2, %esi + 0x48, 0x09, 0xce, //0x00001d63 orq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00001d66 andq %rdx, %rsi + 0xc4, 0xe1, 0xf9, 0x6e, 0xd6, //0x00001d69 vmovq %rsi, %xmm2 + 0xc4, 0xe3, 0x69, 0x44, 0x15, 0x28, 0xe3, 0xff, 0xff, 0x00, //0x00001d6e vpclmulqdq $0, $-7384(%rip), %xmm2, %xmm2 /* LCPI0_26+0(%rip) */ + 0xc4, 0xc1, 0xf9, 0x7e, 0xd5, //0x00001d78 vmovq %xmm2, %r13 + 0x4d, 0x31, 0xdd, //0x00001d7d xorq %r11, %r13 + 0xc5, 0x7e, 0x6f, 0x15, 0xf8, 0xe3, 0xff, 0xff, //0x00001d80 vmovdqu $-7176(%rip), %ymm10 /* LCPI0_7+0(%rip) */ + 0xc5, 0xad, 0x74, 0xd1, //0x00001d88 vpcmpeqb %ymm1, %ymm10, %ymm2 + 0xc5, 0xfd, 0xd7, 0xf2, //0x00001d8c vpmovmskb %ymm2, %esi + 0xc5, 0xad, 0x74, 0xd0, //0x00001d90 vpcmpeqb %ymm0, %ymm10, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001d94 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001d98 shlq $32, %rcx + 0x48, 0x09, 0xce, //0x00001d9c orq %rcx, %rsi + 0x4c, 0x89, 0xe9, //0x00001d9f movq %r13, %rcx + 0x48, 0xf7, 0xd1, //0x00001da2 notq %rcx + 0x48, 0x21, 0xce, //0x00001da5 andq %rcx, %rsi + 0xc5, 0xfe, 0x6f, 0x15, 0xf0, 0xe3, 0xff, 0xff, //0x00001da8 vmovdqu $-7184(%rip), %ymm2 /* LCPI0_8+0(%rip) */ + 0xc5, 0xf5, 0x74, 0xca, //0x00001db0 vpcmpeqb %ymm2, %ymm1, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf9, //0x00001db4 vpmovmskb %ymm1, %edi + 0xc5, 0xfd, 0x74, 0xc2, //0x00001db8 vpcmpeqb %ymm2, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x00001dbc vpmovmskb %ymm0, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x00001dc0 shlq $32, %rdx + 0x48, 0x09, 0xd7, //0x00001dc4 orq %rdx, %rdi + 0x48, 0x21, 0xcf, //0x00001dc7 andq %rcx, %rdi + 0x0f, 0x84, 0x4d, 0x00, 0x00, 0x00, //0x00001dca je LBB0_342 + 0x4c, 0x8b, 0x1c, 0x24, //0x00001dd0 movq (%rsp), %r11 + 0xc4, 0x41, 0x7d, 0x6f, 0xd5, //0x00001dd4 vmovdqa %ymm13, %ymm10 + 0xc4, 0x41, 0x7d, 0x6f, 0xef, //0x00001dd9 vmovdqa %ymm15, %ymm13 + 0xc5, 0x7e, 0x6f, 0x3d, 0x5a, 0xe4, 0xff, 0xff, //0x00001dde vmovdqu $-7078(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001de6 .p2align 4, 0x90 + //0x00001df0 LBB0_340 + 0x48, 0x8d, 0x4f, 0xff, //0x00001df0 leaq $-1(%rdi), %rcx + 0x48, 0x89, 0xca, //0x00001df4 movq %rcx, %rdx + 0x48, 0x21, 0xf2, //0x00001df7 andq %rsi, %rdx + 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x00001dfa popcntq %rdx, %rdx + 0x4c, 0x01, 0xfa, //0x00001dff addq %r15, %rdx + 0x48, 0x39, 0xda, //0x00001e02 cmpq %rbx, %rdx + 0x0f, 0x86, 0x1a, 0x03, 0x00, 0x00, //0x00001e05 jbe LBB0_386 0x48, 0x83, 0xc3, 0x01, //0x00001e0b addq $1, %rbx - 0x48, 0x21, 0xca, //0x00001e0f andq %rcx, %rdx - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00001e12 jne LBB0_362 - 0xe9, 0xb8, 0xfe, 0xff, 0xff, //0x00001e18 jmp LBB0_356 - //0x00001e1d LBB0_364 - 0x4d, 0x85, 0xc9, //0x00001e1d testq %r9, %r9 - 0x0f, 0x8e, 0x57, 0x1f, 0x00, 0x00, //0x00001e20 jle LBB0_720 - 0xc5, 0x7d, 0x7f, 0xe2, //0x00001e26 vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x00001e2a vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00001e2e vmovdqa %ymm13, %ymm11 - 0xc5, 0xf9, 0xef, 0xc0, //0x00001e33 vpxor %xmm0, %xmm0, %xmm0 - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x60, //0x00001e37 vmovdqu %ymm0, $96(%rsp) - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001e3d vmovdqu %ymm0, $64(%rsp) - 0x44, 0x89, 0xf0, //0x00001e43 movl %r14d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00001e46 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00001e4b cmpl $4033, %eax - 0x0f, 0x82, 0x27, 0x00, 0x00, 0x00, //0x00001e50 jb LBB0_368 - 0x49, 0x83, 0xf9, 0x20, //0x00001e56 cmpq $32, %r9 - 0x0f, 0x82, 0x44, 0x00, 0x00, 0x00, //0x00001e5a jb LBB0_369 - 0xc4, 0xc1, 0x7e, 0x6f, 0x06, //0x00001e60 vmovdqu (%r14), %ymm0 - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001e65 vmovdqu %ymm0, $64(%rsp) - 0x49, 0x83, 0xc6, 0x20, //0x00001e6b addq $32, %r14 - 0x49, 0x8d, 0x79, 0xe0, //0x00001e6f leaq $-32(%r9), %rdi - 0x48, 0x8d, 0x74, 0x24, 0x60, //0x00001e73 leaq $96(%rsp), %rsi - 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00001e78 jmp LBB0_370 - //0x00001e7d LBB0_368 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001e7d vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001e82 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x11, 0xe4, 0xff, 0xff, //0x00001e87 vmovdqu $-7151(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x29, 0xe3, 0xff, 0xff, //0x00001e8f vmovdqu $-7383(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x00001e97 vmovdqa %ymm1, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe2, //0x00001e9b vmovdqa %ymm2, %ymm12 - 0xe9, 0x52, 0xfe, 0xff, 0xff, //0x00001e9f jmp LBB0_358 - //0x00001ea4 LBB0_369 - 0x48, 0x8d, 0x74, 0x24, 0x40, //0x00001ea4 leaq $64(%rsp), %rsi - 0x4c, 0x89, 0xcf, //0x00001ea9 movq %r9, %rdi - //0x00001eac LBB0_370 - 0x48, 0x83, 0xff, 0x10, //0x00001eac cmpq $16, %rdi - 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00001eb0 jb LBB0_371 - 0xc4, 0xc1, 0x7a, 0x6f, 0x06, //0x00001eb6 vmovdqu (%r14), %xmm0 - 0xc5, 0xfa, 0x7f, 0x06, //0x00001ebb vmovdqu %xmm0, (%rsi) - 0x49, 0x83, 0xc6, 0x10, //0x00001ebf addq $16, %r14 - 0x48, 0x83, 0xc6, 0x10, //0x00001ec3 addq $16, %rsi - 0x48, 0x83, 0xc7, 0xf0, //0x00001ec7 addq $-16, %rdi - 0x48, 0x83, 0xff, 0x08, //0x00001ecb cmpq $8, %rdi - 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00001ecf jae LBB0_378 - //0x00001ed5 LBB0_372 - 0x48, 0x83, 0xff, 0x04, //0x00001ed5 cmpq $4, %rdi - 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x00001ed9 jl LBB0_373 - //0x00001edf LBB0_379 - 0x41, 0x8b, 0x06, //0x00001edf movl (%r14), %eax - 0x89, 0x06, //0x00001ee2 movl %eax, (%rsi) - 0x49, 0x83, 0xc6, 0x04, //0x00001ee4 addq $4, %r14 - 0x48, 0x83, 0xc6, 0x04, //0x00001ee8 addq $4, %rsi - 0x48, 0x83, 0xc7, 0xfc, //0x00001eec addq $-4, %rdi - 0x48, 0x83, 0xff, 0x02, //0x00001ef0 cmpq $2, %rdi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001ef4 jae LBB0_374 - 0xe9, 0x43, 0x00, 0x00, 0x00, //0x00001efa jmp LBB0_375 - //0x00001eff LBB0_371 - 0x48, 0x83, 0xff, 0x08, //0x00001eff cmpq $8, %rdi - 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x00001f03 jb LBB0_372 - //0x00001f09 LBB0_378 - 0x49, 0x8b, 0x06, //0x00001f09 movq (%r14), %rax - 0x48, 0x89, 0x06, //0x00001f0c movq %rax, (%rsi) - 0x49, 0x83, 0xc6, 0x08, //0x00001f0f addq $8, %r14 - 0x48, 0x83, 0xc6, 0x08, //0x00001f13 addq $8, %rsi - 0x48, 0x83, 0xc7, 0xf8, //0x00001f17 addq $-8, %rdi - 0x48, 0x83, 0xff, 0x04, //0x00001f1b cmpq $4, %rdi - 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x00001f1f jge LBB0_379 - //0x00001f25 LBB0_373 - 0x48, 0x83, 0xff, 0x02, //0x00001f25 cmpq $2, %rdi - 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x00001f29 jb LBB0_375 - //0x00001f2f LBB0_374 - 0x41, 0x0f, 0xb7, 0x06, //0x00001f2f movzwl (%r14), %eax - 0x66, 0x89, 0x06, //0x00001f33 movw %ax, (%rsi) - 0x49, 0x83, 0xc6, 0x02, //0x00001f36 addq $2, %r14 - 0x48, 0x83, 0xc6, 0x02, //0x00001f3a addq $2, %rsi - 0x48, 0x83, 0xc7, 0xfe, //0x00001f3e addq $-2, %rdi - //0x00001f42 LBB0_375 - 0x4c, 0x89, 0xf2, //0x00001f42 movq %r14, %rdx - 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001f45 leaq $64(%rsp), %r14 - 0x48, 0x85, 0xff, //0x00001f4a testq %rdi, %rdi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001f4d vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001f52 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x41, 0xe3, 0xff, 0xff, //0x00001f57 vmovdqu $-7359(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x59, 0xe2, 0xff, 0xff, //0x00001f5f vmovdqu $-7591(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x00001f67 vmovdqa %ymm1, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe2, //0x00001f6b vmovdqa %ymm2, %ymm12 - 0x0f, 0x84, 0x81, 0xfd, 0xff, 0xff, //0x00001f6f je LBB0_358 - 0x8a, 0x02, //0x00001f75 movb (%rdx), %al - 0x88, 0x06, //0x00001f77 movb %al, (%rsi) - 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001f79 leaq $64(%rsp), %r14 - 0xe9, 0x73, 0xfd, 0xff, 0xff, //0x00001f7e jmp LBB0_358 - //0x00001f83 LBB0_380 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00001f83 movq $16(%rsp), %rdi - 0x48, 0x8b, 0x47, 0x08, //0x00001f88 movq $8(%rdi), %rax - 0x48, 0x0f, 0xbc, 0xca, //0x00001f8c bsfq %rdx, %rcx - 0x4c, 0x29, 0xc9, //0x00001f90 subq %r9, %rcx - 0x48, 0x01, 0xc8, //0x00001f93 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00001f96 addq $1, %rax - 0x49, 0x89, 0x45, 0x00, //0x00001f9a movq %rax, (%r13) - 0x48, 0x8b, 0x4f, 0x08, //0x00001f9e movq $8(%rdi), %rcx - 0x48, 0x39, 0xc8, //0x00001fa2 cmpq %rcx, %rax - 0x48, 0x0f, 0x47, 0xc1, //0x00001fa5 cmovaq %rcx, %rax - 0x49, 0x89, 0x45, 0x00, //0x00001fa9 movq %rax, (%r13) - 0x0f, 0x87, 0xe2, 0x1b, 0x00, 0x00, //0x00001fad ja LBB0_711 - 0x4d, 0x85, 0xc0, //0x00001fb3 testq %r8, %r8 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00001fb6 movq $24(%rsp), %r11 - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001fbb movq $8(%rsp), %r15 - 0x0f, 0x8f, 0xda, 0xe3, 0xff, 0xff, //0x00001fc0 jg LBB0_3 - 0xe9, 0x61, 0x1b, 0x00, 0x00, //0x00001fc6 jmp LBB0_679 - //0x00001fcb LBB0_382 - 0x0f, 0xbc, 0xce, //0x00001fcb bsfl %esi, %ecx - 0x48, 0x29, 0xd1, //0x00001fce subq %rdx, %rcx - //0x00001fd1 LBB0_383 - 0x48, 0x8b, 0x1c, 0x24, //0x00001fd1 movq (%rsp), %rbx - 0x49, 0x89, 0x4d, 0x00, //0x00001fd5 movq %rcx, (%r13) - 0x48, 0x85, 0xdb, //0x00001fd9 testq %rbx, %rbx - 0x0f, 0x8f, 0xbe, 0xe3, 0xff, 0xff, //0x00001fdc jg LBB0_3 - 0xe9, 0xea, 0x1c, 0x00, 0x00, //0x00001fe2 jmp LBB0_698 - //0x00001fe7 LBB0_384 - 0x49, 0x8d, 0x41, 0xff, //0x00001fe7 leaq $-1(%r9), %rax - 0x48, 0x39, 0xc2, //0x00001feb cmpq %rax, %rdx - 0x49, 0xf7, 0xd1, //0x00001fee notq %r9 - 0x4d, 0x0f, 0x45, 0xcd, //0x00001ff1 cmovneq %r13, %r9 - 0x84, 0xc9, //0x00001ff5 testb %cl, %cl - 0x4d, 0x0f, 0x45, 0xe9, //0x00001ff7 cmovneq %r9, %r13 - 0xe9, 0x21, 0xf7, 0xff, 0xff, //0x00001ffb jmp LBB0_290 - //0x00002000 LBB0_385 - 0x4d, 0x29, 0xc8, //0x00002000 subq %r9, %r8 - 0x0f, 0x84, 0x5a, 0x1d, 0x00, 0x00, //0x00002003 je LBB0_718 - 0x49, 0x83, 0xf8, 0x40, //0x00002009 cmpq $64, %r8 - 0x0f, 0x82, 0xdb, 0x0b, 0x00, 0x00, //0x0000200d jb LBB0_518 - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002013 movq $-1, %r10 - 0x4c, 0x89, 0xc9, //0x0000201a movq %r9, %rcx - 0x45, 0x31, 0xdb, //0x0000201d xorl %r11d, %r11d - //0x00002020 .p2align 4, 0x90 - //0x00002020 LBB0_388 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x0e, //0x00002020 vmovdqu (%r14,%rcx), %ymm0 - 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x0e, 0x20, //0x00002026 vmovdqu $32(%r14,%rcx), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x0000202d vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x00002031 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x00002035 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00002039 vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xd7, //0x0000203d vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00002041 vpmovmskb %ymm2, %edx - 0xc5, 0xf5, 0x74, 0xd7, //0x00002045 vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xda, //0x00002049 vpmovmskb %ymm2, %ebx - 0xc5, 0xbd, 0x64, 0xd1, //0x0000204d vpcmpgtb %ymm1, %ymm8, %ymm2 - 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00002051 vpcmpgtb %ymm9, %ymm1, %ymm1 - 0xc5, 0xed, 0xdb, 0xc9, //0x00002056 vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x0000205a vpmovmskb %ymm1, %esi - 0x48, 0xc1, 0xe0, 0x20, //0x0000205e shlq $32, %rax - 0x48, 0x09, 0xc7, //0x00002062 orq %rax, %rdi - 0x48, 0xc1, 0xe3, 0x20, //0x00002065 shlq $32, %rbx - 0x48, 0xc1, 0xe6, 0x20, //0x00002069 shlq $32, %rsi - 0x48, 0x09, 0xda, //0x0000206d orq %rbx, %rdx - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00002070 jne LBB0_399 - 0x4d, 0x85, 0xdb, //0x00002076 testq %r11, %r11 - 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00002079 jne LBB0_401 - 0x45, 0x31, 0xdb, //0x0000207f xorl %r11d, %r11d - //0x00002082 LBB0_391 - 0xc5, 0xbd, 0x64, 0xc8, //0x00002082 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00002086 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x0000208b vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x0000208f vpmovmskb %ymm0, %eax - 0x48, 0x09, 0xc6, //0x00002093 orq %rax, %rsi - 0x48, 0x85, 0xff, //0x00002096 testq %rdi, %rdi - 0x0f, 0x85, 0x87, 0x00, 0x00, 0x00, //0x00002099 jne LBB0_402 - 0x48, 0x85, 0xf6, //0x0000209f testq %rsi, %rsi - 0x0f, 0x85, 0x7c, 0x1c, 0x00, 0x00, //0x000020a2 jne LBB0_712 - 0x49, 0x83, 0xc0, 0xc0, //0x000020a8 addq $-64, %r8 - 0x48, 0x83, 0xc1, 0x40, //0x000020ac addq $64, %rcx - 0x49, 0x83, 0xf8, 0x3f, //0x000020b0 cmpq $63, %r8 - 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x000020b4 ja LBB0_388 - 0xe9, 0x39, 0x09, 0x00, 0x00, //0x000020ba jmp LBB0_394 - //0x000020bf LBB0_399 - 0x49, 0x83, 0xfa, 0xff, //0x000020bf cmpq $-1, %r10 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x000020c3 jne LBB0_401 - 0x4c, 0x0f, 0xbc, 0xd2, //0x000020c9 bsfq %rdx, %r10 - 0x49, 0x01, 0xca, //0x000020cd addq %rcx, %r10 - //0x000020d0 LBB0_401 - 0x4c, 0x89, 0xd8, //0x000020d0 movq %r11, %rax - 0x48, 0xf7, 0xd0, //0x000020d3 notq %rax - 0x48, 0x21, 0xd0, //0x000020d6 andq %rdx, %rax - 0x48, 0x89, 0x0c, 0x24, //0x000020d9 movq %rcx, (%rsp) - 0x48, 0x8d, 0x0c, 0x00, //0x000020dd leaq (%rax,%rax), %rcx - 0x4c, 0x09, 0xd9, //0x000020e1 orq %r11, %rcx - 0x48, 0x89, 0xcb, //0x000020e4 movq %rcx, %rbx - 0x48, 0xf7, 0xd3, //0x000020e7 notq %rbx - 0x48, 0x21, 0xd3, //0x000020ea andq %rdx, %rbx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000020ed movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd3, //0x000020f7 andq %rdx, %rbx - 0x45, 0x31, 0xdb, //0x000020fa xorl %r11d, %r11d - 0x48, 0x01, 0xc3, //0x000020fd addq %rax, %rbx - 0x41, 0x0f, 0x92, 0xc3, //0x00002100 setb %r11b - 0x48, 0x01, 0xdb, //0x00002104 addq %rbx, %rbx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002107 movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc3, //0x00002111 xorq %rax, %rbx - 0x48, 0x21, 0xcb, //0x00002114 andq %rcx, %rbx - 0x48, 0x8b, 0x0c, 0x24, //0x00002117 movq (%rsp), %rcx - 0x48, 0xf7, 0xd3, //0x0000211b notq %rbx - 0x48, 0x21, 0xdf, //0x0000211e andq %rbx, %rdi - 0xe9, 0x5c, 0xff, 0xff, 0xff, //0x00002121 jmp LBB0_391 - //0x00002126 LBB0_402 - 0x48, 0x0f, 0xbc, 0xc7, //0x00002126 bsfq %rdi, %rax - 0x48, 0x85, 0xf6, //0x0000212a testq %rsi, %rsi - 0x0f, 0x84, 0x9f, 0x03, 0x00, 0x00, //0x0000212d je LBB0_458 - 0x48, 0x0f, 0xbc, 0xd6, //0x00002133 bsfq %rsi, %rdx - 0xe9, 0x9b, 0x03, 0x00, 0x00, //0x00002137 jmp LBB0_459 - //0x0000213c LBB0_404 - 0x48, 0x8b, 0x44, 0x24, 0x38, //0x0000213c movq $56(%rsp), %rax - 0x8a, 0x48, 0x01, //0x00002141 movb $1(%rax), %cl - 0x80, 0xc1, 0xd2, //0x00002144 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x00002147 cmpb $55, %cl - 0x0f, 0x87, 0x80, 0xf3, 0xff, 0xff, //0x0000214a ja LBB0_257 - 0x0f, 0xb6, 0xc1, //0x00002150 movzbl %cl, %eax - 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00002153 movabsq $36028797027352577, %rcx - 0x48, 0x0f, 0xa3, 0xc1, //0x0000215d btq %rax, %rcx - 0x48, 0x8b, 0x0c, 0x24, //0x00002161 movq (%rsp), %rcx - 0x0f, 0x83, 0x1e, 0x08, 0x00, 0x00, //0x00002165 jae LBB0_498 - //0x0000216b LBB0_406 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000216b movq $-1, %r8 - 0x49, 0x83, 0xfa, 0x20, //0x00002172 cmpq $32, %r10 - 0x0f, 0x82, 0x1c, 0x0a, 0x00, 0x00, //0x00002176 jb LBB0_515 - 0x45, 0x31, 0xc9, //0x0000217c xorl %r9d, %r9d - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000217f movq $-1, %r15 - 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x00002186 movq $-1, $40(%rsp) - 0x4c, 0x8b, 0x5c, 0x24, 0x38, //0x0000218f movq $56(%rsp), %r11 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002194 .p2align 4, 0x90 - //0x000021a0 LBB0_408 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x0b, //0x000021a0 vmovdqu (%r11,%r9), %ymm0 - 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x000021a6 vpcmpgtb %ymm10, %ymm0, %ymm1 - 0xc5, 0x95, 0x64, 0xd0, //0x000021ab vpcmpgtb %ymm0, %ymm13, %ymm2 - 0xc5, 0xed, 0xdb, 0xc9, //0x000021af vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0x85, 0x74, 0xd0, //0x000021b3 vpcmpeqb %ymm0, %ymm15, %ymm2 - 0xc5, 0xfd, 0x74, 0x1d, 0xa1, 0xe0, 0xff, 0xff, //0x000021b7 vpcmpeqb $-8031(%rip), %ymm0, %ymm3 /* LCPI0_17+0(%rip) */ - 0xc5, 0xe5, 0xeb, 0xd2, //0x000021bf vpor %ymm2, %ymm3, %ymm2 - 0xc5, 0x8d, 0xdb, 0xd8, //0x000021c3 vpand %ymm0, %ymm14, %ymm3 - 0xc5, 0xfd, 0x74, 0x05, 0xb1, 0xe0, 0xff, 0xff, //0x000021c7 vpcmpeqb $-8015(%rip), %ymm0, %ymm0 /* LCPI0_18+0(%rip) */ - 0xc5, 0xfd, 0xd7, 0xd0, //0x000021cf vpmovmskb %ymm0, %edx - 0xc5, 0xe5, 0x74, 0xdc, //0x000021d3 vpcmpeqb %ymm4, %ymm3, %ymm3 - 0xc5, 0xfd, 0xd7, 0xfb, //0x000021d7 vpmovmskb %ymm3, %edi - 0xc5, 0xfd, 0xd7, 0xf2, //0x000021db vpmovmskb %ymm2, %esi - 0xc5, 0xf5, 0xeb, 0xc0, //0x000021df vpor %ymm0, %ymm1, %ymm0 - 0xc5, 0xe5, 0xeb, 0xca, //0x000021e3 vpor %ymm2, %ymm3, %ymm1 - 0xc5, 0xfd, 0xeb, 0xc1, //0x000021e7 vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x000021eb vpmovmskb %ymm0, %eax - 0x48, 0xf7, 0xd0, //0x000021ef notq %rax - 0x48, 0x0f, 0xbc, 0xc8, //0x000021f2 bsfq %rax, %rcx - 0x83, 0xf9, 0x20, //0x000021f6 cmpl $32, %ecx - 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x000021f9 je LBB0_410 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x000021ff movl $-1, %eax - 0xd3, 0xe0, //0x00002204 shll %cl, %eax - 0xf7, 0xd0, //0x00002206 notl %eax - 0x21, 0xc2, //0x00002208 andl %eax, %edx - 0x21, 0xc7, //0x0000220a andl %eax, %edi - 0x21, 0xf0, //0x0000220c andl %esi, %eax - 0x89, 0xc6, //0x0000220e movl %eax, %esi - //0x00002210 LBB0_410 - 0x8d, 0x5a, 0xff, //0x00002210 leal $-1(%rdx), %ebx - 0x21, 0xd3, //0x00002213 andl %edx, %ebx - 0xc5, 0xfe, 0x6f, 0x1d, 0xa3, 0xdf, 0xff, 0xff, //0x00002215 vmovdqu $-8285(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0x0f, 0x85, 0x12, 0x07, 0x00, 0x00, //0x0000221d jne LBB0_492 - 0x8d, 0x5f, 0xff, //0x00002223 leal $-1(%rdi), %ebx - 0x21, 0xfb, //0x00002226 andl %edi, %ebx - 0x0f, 0x85, 0x07, 0x07, 0x00, 0x00, //0x00002228 jne LBB0_492 - 0x8d, 0x5e, 0xff, //0x0000222e leal $-1(%rsi), %ebx - 0x21, 0xf3, //0x00002231 andl %esi, %ebx - 0x0f, 0x85, 0xfc, 0x06, 0x00, 0x00, //0x00002233 jne LBB0_492 - 0x85, 0xd2, //0x00002239 testl %edx, %edx - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x0000223b je LBB0_416 - 0x0f, 0xbc, 0xd2, //0x00002241 bsfl %edx, %edx - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x00002244 cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0x0d, 0x07, 0x00, 0x00, //0x0000224a jne LBB0_493 - 0x4c, 0x01, 0xca, //0x00002250 addq %r9, %rdx - 0x48, 0x89, 0x54, 0x24, 0x28, //0x00002253 movq %rdx, $40(%rsp) - //0x00002258 LBB0_416 - 0x85, 0xff, //0x00002258 testl %edi, %edi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000225a je LBB0_419 - 0x0f, 0xbc, 0xd7, //0x00002260 bsfl %edi, %edx - 0x49, 0x83, 0xff, 0xff, //0x00002263 cmpq $-1, %r15 - 0x0f, 0x85, 0xf0, 0x06, 0x00, 0x00, //0x00002267 jne LBB0_493 - 0x4c, 0x01, 0xca, //0x0000226d addq %r9, %rdx - 0x49, 0x89, 0xd7, //0x00002270 movq %rdx, %r15 - //0x00002273 LBB0_419 - 0x85, 0xf6, //0x00002273 testl %esi, %esi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00002275 je LBB0_422 - 0x0f, 0xbc, 0xd6, //0x0000227b bsfl %esi, %edx - 0x49, 0x83, 0xf8, 0xff, //0x0000227e cmpq $-1, %r8 - 0x0f, 0x85, 0xd5, 0x06, 0x00, 0x00, //0x00002282 jne LBB0_493 - 0x4c, 0x01, 0xca, //0x00002288 addq %r9, %rdx - 0x49, 0x89, 0xd0, //0x0000228b movq %rdx, %r8 - //0x0000228e LBB0_422 - 0x83, 0xf9, 0x20, //0x0000228e cmpl $32, %ecx - 0x0f, 0x85, 0xf9, 0x01, 0x00, 0x00, //0x00002291 jne LBB0_456 - 0x49, 0x83, 0xc2, 0xe0, //0x00002297 addq $-32, %r10 - 0x49, 0x83, 0xc1, 0x20, //0x0000229b addq $32, %r9 - 0x49, 0x83, 0xfa, 0x1f, //0x0000229f cmpq $31, %r10 - 0x0f, 0x87, 0xf7, 0xfe, 0xff, 0xff, //0x000022a3 ja LBB0_408 - 0xc5, 0xf8, 0x77, //0x000022a9 vzeroupper - 0x4d, 0x01, 0xd9, //0x000022ac addq %r11, %r9 - 0x4c, 0x89, 0x6c, 0x24, 0x30, //0x000022af movq %r13, $48(%rsp) - 0x49, 0x83, 0xfa, 0x10, //0x000022b4 cmpq $16, %r10 - 0x0f, 0x82, 0x35, 0x01, 0x00, 0x00, //0x000022b8 jb LBB0_443 - //0x000022be LBB0_425 - 0x4c, 0x89, 0xcb, //0x000022be movq %r9, %rbx - 0x4c, 0x29, 0xdb, //0x000022c1 subq %r11, %rbx - 0x45, 0x31, 0xed, //0x000022c4 xorl %r13d, %r13d - //0x000022c7 LBB0_426 - 0xc4, 0x81, 0x7a, 0x6f, 0x04, 0x29, //0x000022c7 vmovdqu (%r9,%r13), %xmm0 - 0xc5, 0xf9, 0x64, 0x0d, 0x6b, 0xdd, 0xff, 0xff, //0x000022cd vpcmpgtb $-8853(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ - 0xc5, 0xfa, 0x6f, 0x15, 0x73, 0xdd, 0xff, 0xff, //0x000022d5 vmovdqu $-8845(%rip), %xmm2 /* LCPI0_21+0(%rip) */ - 0xc5, 0xe9, 0x64, 0xd0, //0x000022dd vpcmpgtb %xmm0, %xmm2, %xmm2 - 0xc5, 0xf1, 0xdb, 0xca, //0x000022e1 vpand %xmm2, %xmm1, %xmm1 - 0xc5, 0xf9, 0x74, 0x15, 0x73, 0xdd, 0xff, 0xff, //0x000022e5 vpcmpeqb $-8845(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x1d, 0x7b, 0xdd, 0xff, 0xff, //0x000022ed vpcmpeqb $-8837(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xd2, //0x000022f5 vpor %xmm2, %xmm3, %xmm2 - 0xc5, 0xf9, 0xdb, 0x1d, 0x1f, 0xdd, 0xff, 0xff, //0x000022f9 vpand $-8929(%rip), %xmm0, %xmm3 /* LCPI0_12+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0x77, 0xdd, 0xff, 0xff, //0x00002301 vpcmpeqb $-8841(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ - 0xc5, 0xe1, 0x74, 0x1d, 0x7f, 0xdd, 0xff, 0xff, //0x00002309 vpcmpeqb $-8833(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xe0, //0x00002311 vpor %xmm0, %xmm3, %xmm4 - 0xc5, 0xe9, 0xeb, 0xc9, //0x00002315 vpor %xmm1, %xmm2, %xmm1 - 0xc5, 0xd9, 0xeb, 0xc9, //0x00002319 vpor %xmm1, %xmm4, %xmm1 - 0xc5, 0x79, 0xd7, 0xd8, //0x0000231d vpmovmskb %xmm0, %r11d - 0xc5, 0xf9, 0xd7, 0xd3, //0x00002321 vpmovmskb %xmm3, %edx - 0xc5, 0xf9, 0xd7, 0xfa, //0x00002325 vpmovmskb %xmm2, %edi - 0xc5, 0xf9, 0xd7, 0xc1, //0x00002329 vpmovmskb %xmm1, %eax - 0xf7, 0xd0, //0x0000232d notl %eax - 0x0f, 0xbc, 0xc8, //0x0000232f bsfl %eax, %ecx - 0x83, 0xf9, 0x10, //0x00002332 cmpl $16, %ecx - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002335 je LBB0_428 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x0000233b movl $-1, %eax - 0xd3, 0xe0, //0x00002340 shll %cl, %eax - 0xf7, 0xd0, //0x00002342 notl %eax - 0x41, 0x21, 0xc3, //0x00002344 andl %eax, %r11d - 0x21, 0xc2, //0x00002347 andl %eax, %edx - 0x21, 0xf8, //0x00002349 andl %edi, %eax - 0x89, 0xc7, //0x0000234b movl %eax, %edi - //0x0000234d LBB0_428 - 0x41, 0x8d, 0x73, 0xff, //0x0000234d leal $-1(%r11), %esi - 0x44, 0x21, 0xde, //0x00002351 andl %r11d, %esi - 0x0f, 0x85, 0xe8, 0x06, 0x00, 0x00, //0x00002354 jne LBB0_499 - 0x8d, 0x72, 0xff, //0x0000235a leal $-1(%rdx), %esi - 0x21, 0xd6, //0x0000235d andl %edx, %esi - 0x0f, 0x85, 0xdd, 0x06, 0x00, 0x00, //0x0000235f jne LBB0_499 - 0x8d, 0x77, 0xff, //0x00002365 leal $-1(%rdi), %esi - 0x21, 0xfe, //0x00002368 andl %edi, %esi - 0x0f, 0x85, 0xd2, 0x06, 0x00, 0x00, //0x0000236a jne LBB0_499 - 0x45, 0x85, 0xdb, //0x00002370 testl %r11d, %r11d - 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x00002373 je LBB0_434 - 0x41, 0x0f, 0xbc, 0xf3, //0x00002379 bsfl %r11d, %esi - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000237d cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0x9d, 0x07, 0x00, 0x00, //0x00002383 jne LBB0_509 - 0x48, 0x01, 0xde, //0x00002389 addq %rbx, %rsi - 0x4c, 0x01, 0xee, //0x0000238c addq %r13, %rsi - 0x48, 0x89, 0x74, 0x24, 0x28, //0x0000238f movq %rsi, $40(%rsp) - //0x00002394 LBB0_434 - 0x4c, 0x8b, 0x5c, 0x24, 0x38, //0x00002394 movq $56(%rsp), %r11 - 0x85, 0xd2, //0x00002399 testl %edx, %edx - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x0000239b je LBB0_437 - 0x0f, 0xbc, 0xd2, //0x000023a1 bsfl %edx, %edx - 0x49, 0x83, 0xff, 0xff, //0x000023a4 cmpq $-1, %r15 - 0x0f, 0x85, 0xe8, 0x06, 0x00, 0x00, //0x000023a8 jne LBB0_503 - 0x48, 0x01, 0xda, //0x000023ae addq %rbx, %rdx - 0x4c, 0x01, 0xea, //0x000023b1 addq %r13, %rdx - 0x49, 0x89, 0xd7, //0x000023b4 movq %rdx, %r15 - //0x000023b7 LBB0_437 - 0x85, 0xff, //0x000023b7 testl %edi, %edi - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000023b9 je LBB0_440 - 0x0f, 0xbc, 0xd7, //0x000023bf bsfl %edi, %edx - 0x49, 0x83, 0xf8, 0xff, //0x000023c2 cmpq $-1, %r8 - 0x0f, 0x85, 0xca, 0x06, 0x00, 0x00, //0x000023c6 jne LBB0_503 - 0x48, 0x01, 0xda, //0x000023cc addq %rbx, %rdx - 0x4c, 0x01, 0xea, //0x000023cf addq %r13, %rdx - 0x49, 0x89, 0xd0, //0x000023d2 movq %rdx, %r8 - //0x000023d5 LBB0_440 - 0x83, 0xf9, 0x10, //0x000023d5 cmpl $16, %ecx - 0x0f, 0x85, 0x82, 0x01, 0x00, 0x00, //0x000023d8 jne LBB0_466 - 0x49, 0x83, 0xc2, 0xf0, //0x000023de addq $-16, %r10 - 0x49, 0x83, 0xc5, 0x10, //0x000023e2 addq $16, %r13 - 0x49, 0x83, 0xfa, 0x0f, //0x000023e6 cmpq $15, %r10 - 0x0f, 0x87, 0xd7, 0xfe, 0xff, 0xff, //0x000023ea ja LBB0_426 - 0x4d, 0x01, 0xe9, //0x000023f0 addq %r13, %r9 - //0x000023f3 LBB0_443 - 0x4d, 0x85, 0xd2, //0x000023f3 testq %r10, %r10 - 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x000023f6 movq $48(%rsp), %r13 - 0x0f, 0x84, 0x89, 0x01, 0x00, 0x00, //0x000023fb je LBB0_468 - 0x4b, 0x8d, 0x34, 0x11, //0x00002401 leaq (%r9,%r10), %rsi - 0x4c, 0x89, 0xcf, //0x00002405 movq %r9, %rdi - 0x4c, 0x29, 0xdf, //0x00002408 subq %r11, %rdi - 0x31, 0xc9, //0x0000240b xorl %ecx, %ecx - 0xe9, 0x1b, 0x00, 0x00, 0x00, //0x0000240d jmp LBB0_448 - //0x00002412 LBB0_445 - 0x49, 0x83, 0xf8, 0xff, //0x00002412 cmpq $-1, %r8 - 0x0f, 0x85, 0x2e, 0x06, 0x00, 0x00, //0x00002416 jne LBB0_500 - 0x4c, 0x8d, 0x04, 0x0f, //0x0000241c leaq (%rdi,%rcx), %r8 - //0x00002420 .p2align 4, 0x90 - //0x00002420 LBB0_447 - 0x48, 0x83, 0xc1, 0x01, //0x00002420 addq $1, %rcx - 0x49, 0x39, 0xca, //0x00002424 cmpq %rcx, %r10 - 0x0f, 0x84, 0xeb, 0x04, 0x00, 0x00, //0x00002427 je LBB0_491 - //0x0000242d LBB0_448 - 0x41, 0x0f, 0xbe, 0x14, 0x09, //0x0000242d movsbl (%r9,%rcx), %edx - 0x8d, 0x42, 0xd0, //0x00002432 leal $-48(%rdx), %eax - 0x83, 0xf8, 0x0a, //0x00002435 cmpl $10, %eax - 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x00002438 jb LBB0_447 - 0x8d, 0x5a, 0xd5, //0x0000243e leal $-43(%rdx), %ebx - 0x83, 0xfb, 0x1a, //0x00002441 cmpl $26, %ebx - 0x0f, 0x87, 0x2a, 0x00, 0x00, 0x00, //0x00002444 ja LBB0_453 - 0x48, 0x8d, 0x15, 0x97, 0x1b, 0x00, 0x00, //0x0000244a leaq $7063(%rip), %rdx /* LJTI0_2+0(%rip) */ - 0x48, 0x63, 0x04, 0x9a, //0x00002451 movslq (%rdx,%rbx,4), %rax - 0x48, 0x01, 0xd0, //0x00002455 addq %rdx, %rax - 0xff, 0xe0, //0x00002458 jmpq *%rax - //0x0000245a LBB0_451 - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000245a cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0xe4, 0x05, 0x00, 0x00, //0x00002460 jne LBB0_500 - 0x48, 0x8d, 0x04, 0x0f, //0x00002466 leaq (%rdi,%rcx), %rax - 0x48, 0x89, 0x44, 0x24, 0x28, //0x0000246a movq %rax, $40(%rsp) - 0xe9, 0xac, 0xff, 0xff, 0xff, //0x0000246f jmp LBB0_447 - //0x00002474 LBB0_453 - 0x83, 0xfa, 0x65, //0x00002474 cmpl $101, %edx - 0x0f, 0x85, 0x0a, 0x01, 0x00, 0x00, //0x00002477 jne LBB0_467 - //0x0000247d LBB0_454 - 0x49, 0x83, 0xff, 0xff, //0x0000247d cmpq $-1, %r15 - 0x0f, 0x85, 0xc3, 0x05, 0x00, 0x00, //0x00002481 jne LBB0_500 - 0x4c, 0x8d, 0x3c, 0x0f, //0x00002487 leaq (%rdi,%rcx), %r15 - 0xe9, 0x90, 0xff, 0xff, 0xff, //0x0000248b jmp LBB0_447 - //0x00002490 LBB0_456 - 0x4c, 0x01, 0xc9, //0x00002490 addq %r9, %rcx - 0x4c, 0x01, 0xd9, //0x00002493 addq %r11, %rcx - 0xc5, 0xf8, 0x77, //0x00002496 vzeroupper - 0x49, 0x89, 0xc9, //0x00002499 movq %rcx, %r9 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000249c movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x28, //0x000024a3 movq $40(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x000024a8 testq %rdx, %rdx - 0x0f, 0x85, 0xee, 0x00, 0x00, 0x00, //0x000024ab jne LBB0_469 - 0xe9, 0x5a, 0x18, 0x00, 0x00, //0x000024b1 jmp LBB0_709 - //0x000024b6 LBB0_676 - 0x4d, 0x29, 0xf4, //0x000024b6 subq %r14, %r12 - 0x49, 0x01, 0xd4, //0x000024b9 addq %rdx, %r12 - 0x49, 0x39, 0xdc, //0x000024bc cmpq %rbx, %r12 - 0x0f, 0x82, 0xcd, 0xe0, 0xff, 0xff, //0x000024bf jb LBB0_35 - 0xe9, 0x48, 0x16, 0x00, 0x00, //0x000024c5 jmp LBB0_677 - //0x000024ca LBB0_457 - 0x4d, 0x89, 0xfd, //0x000024ca movq %r15, %r13 - 0xe9, 0x29, 0xf1, 0xff, 0xff, //0x000024cd jmp LBB0_279 - //0x000024d2 LBB0_458 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x000024d2 movl $64, %edx - //0x000024d7 LBB0_459 - 0x4d, 0x89, 0xd3, //0x000024d7 movq %r10, %r11 - 0x48, 0x39, 0xc2, //0x000024da cmpq %rax, %rdx - 0x0f, 0x82, 0x88, 0x18, 0x00, 0x00, //0x000024dd jb LBB0_719 - 0xc5, 0x7d, 0x7f, 0xea, //0x000024e3 vmovdqa %ymm13, %ymm2 - 0x48, 0x01, 0xc1, //0x000024e7 addq %rax, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x000024ea addq $1, %rcx - //0x000024ee LBB0_461 - 0x48, 0x85, 0xc9, //0x000024ee testq %rcx, %rcx - 0x0f, 0x88, 0xfd, 0x17, 0x00, 0x00, //0x000024f1 js LBB0_706 - 0x49, 0x89, 0x4d, 0x00, //0x000024f7 movq %rcx, (%r13) - 0x4d, 0x85, 0xc9, //0x000024fb testq %r9, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x000024fe movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002503 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002508 movq $8(%rsp), %r15 - 0xc5, 0x7d, 0x6f, 0xea, //0x0000250d vmovdqa %ymm2, %ymm13 - 0x0f, 0x8f, 0x89, 0xde, 0xff, 0xff, //0x00002511 jg LBB0_3 - 0xe9, 0x1d, 0x16, 0x00, 0x00, //0x00002517 jmp LBB0_463 - //0x0000251c LBB0_156 - 0x4d, 0x85, 0xff, //0x0000251c testq %r15, %r15 - 0x0f, 0x85, 0x37, 0x07, 0x00, 0x00, //0x0000251f jne LBB0_522 - 0x49, 0x01, 0xf1, //0x00002525 addq %rsi, %r9 - 0x49, 0x29, 0xf2, //0x00002528 subq %rsi, %r10 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x0000252b movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002530 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002535 movq $8(%rsp), %r15 - //0x0000253a LBB0_158 - 0x4d, 0x85, 0xd2, //0x0000253a testq %r10, %r10 - 0x0f, 0x8f, 0x9d, 0x07, 0x00, 0x00, //0x0000253d jg LBB0_526 - 0xe9, 0x4d, 0x16, 0x00, 0x00, //0x00002543 jmp LBB0_711 - //0x00002548 LBB0_464 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002548 vmovdqa %ymm13, %ymm0 - 0x0f, 0xbc, 0xc3, //0x0000254c bsfl %ebx, %eax - 0xe9, 0xb9, 0x01, 0x00, 0x00, //0x0000254f jmp LBB0_484 - //0x00002554 LBB0_465 - 0x66, 0x0f, 0xbc, 0xc0, //0x00002554 bsfw %ax, %ax - 0x0f, 0xb7, 0xc8, //0x00002558 movzwl %ax, %ecx - 0xe9, 0xf7, 0xe9, 0xff, 0xff, //0x0000255b jmp LBB0_176 - //0x00002560 LBB0_466 - 0x89, 0xc8, //0x00002560 movl %ecx, %eax - 0x49, 0x01, 0xc1, //0x00002562 addq %rax, %r9 - 0x4d, 0x01, 0xe9, //0x00002565 addq %r13, %r9 - 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x00002568 movq $48(%rsp), %r13 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000256d movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x28, //0x00002574 movq $40(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00002579 testq %rdx, %rdx - 0x0f, 0x85, 0x1d, 0x00, 0x00, 0x00, //0x0000257c jne LBB0_469 - 0xe9, 0x89, 0x17, 0x00, 0x00, //0x00002582 jmp LBB0_709 - //0x00002587 LBB0_467 - 0x49, 0x01, 0xc9, //0x00002587 addq %rcx, %r9 - //0x0000258a LBB0_468 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000258a movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x28, //0x00002591 movq $40(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00002596 testq %rdx, %rdx - 0x0f, 0x84, 0x71, 0x17, 0x00, 0x00, //0x00002599 je LBB0_709 - //0x0000259f LBB0_469 - 0x4d, 0x85, 0xc0, //0x0000259f testq %r8, %r8 - 0x0f, 0x84, 0x68, 0x17, 0x00, 0x00, //0x000025a2 je LBB0_709 - 0x4d, 0x85, 0xff, //0x000025a8 testq %r15, %r15 - 0x0f, 0x84, 0x5f, 0x17, 0x00, 0x00, //0x000025ab je LBB0_709 - 0x4d, 0x29, 0xd9, //0x000025b1 subq %r11, %r9 - 0x49, 0x8d, 0x49, 0xff, //0x000025b4 leaq $-1(%r9), %rcx - 0x48, 0x39, 0xca, //0x000025b8 cmpq %rcx, %rdx - 0x0f, 0x84, 0x97, 0x00, 0x00, 0x00, //0x000025bb je LBB0_477 - 0x49, 0x39, 0xc8, //0x000025c1 cmpq %rcx, %r8 - 0x0f, 0x84, 0x8e, 0x00, 0x00, 0x00, //0x000025c4 je LBB0_477 - 0x49, 0x39, 0xcf, //0x000025ca cmpq %rcx, %r15 - 0x0f, 0x84, 0x85, 0x00, 0x00, 0x00, //0x000025cd je LBB0_477 - 0x4d, 0x85, 0xc0, //0x000025d3 testq %r8, %r8 - 0xc5, 0xfe, 0x6f, 0x2d, 0xe2, 0xda, 0xff, 0xff, //0x000025d6 vmovdqu $-9502(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0xfa, 0xda, 0xff, 0xff, //0x000025de vmovdqu $-9478(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x12, 0xdb, 0xff, 0xff, //0x000025e6 vmovdqu $-9454(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x2a, 0xdb, 0xff, 0xff, //0x000025ee vmovdqu $-9430(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000025f6 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0xfd, 0xdb, 0xff, 0xff, //0x000025fb vmovdqu $-9219(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x05, 0x15, 0xdc, 0xff, 0xff, //0x00002603 vmovdqu $-9195(%rip), %ymm0 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0x2d, 0xdc, 0xff, 0xff, //0x0000260b vmovdqu $-9171(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0xc5, 0xdb, 0xff, 0xff, //0x00002613 vmovdqu $-9275(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x7d, 0xdc, 0xff, 0xff, //0x0000261b vmovdqu $-9091(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x95, 0xdb, 0xff, 0xff, //0x00002623 vmovdqu $-9323(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0x0f, 0x8e, 0xa3, 0x00, 0x00, 0x00, //0x0000262b jle LBB0_480 - 0x49, 0x8d, 0x40, 0xff, //0x00002631 leaq $-1(%r8), %rax - 0x49, 0x39, 0xc7, //0x00002635 cmpq %rax, %r15 - 0x0f, 0x84, 0x96, 0x00, 0x00, 0x00, //0x00002638 je LBB0_480 - 0x49, 0xf7, 0xd0, //0x0000263e notq %r8 - 0x4d, 0x89, 0xc1, //0x00002641 movq %r8, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002644 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002649 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000264e movq $8(%rsp), %r15 - 0xe9, 0x67, 0x00, 0x00, 0x00, //0x00002653 jmp LBB0_479 - //0x00002658 LBB0_477 - 0x49, 0xf7, 0xd9, //0x00002658 negq %r9 - //0x0000265b LBB0_478 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x0000265b movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002660 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002665 movq $8(%rsp), %r15 - 0xc5, 0xfe, 0x6f, 0x2d, 0x4e, 0xda, 0xff, 0xff, //0x0000266a vmovdqu $-9650(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x66, 0xda, 0xff, 0xff, //0x00002672 vmovdqu $-9626(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x7e, 0xda, 0xff, 0xff, //0x0000267a vmovdqu $-9602(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x96, 0xda, 0xff, 0xff, //0x00002682 vmovdqu $-9578(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000268a vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0x69, 0xdb, 0xff, 0xff, //0x0000268f vmovdqu $-9367(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x05, 0x81, 0xdb, 0xff, 0xff, //0x00002697 vmovdqu $-9343(%rip), %ymm0 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0x99, 0xdb, 0xff, 0xff, //0x0000269f vmovdqu $-9319(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0x31, 0xdb, 0xff, 0xff, //0x000026a7 vmovdqu $-9423(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0xe9, 0xdb, 0xff, 0xff, //0x000026af vmovdqu $-9239(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x01, 0xdb, 0xff, 0xff, //0x000026b7 vmovdqu $-9471(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - //0x000026bf LBB0_479 - 0xc5, 0x7e, 0x6f, 0x1d, 0x79, 0xda, 0xff, 0xff, //0x000026bf vmovdqu $-9607(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x91, 0xda, 0xff, 0xff, //0x000026c7 vmovdqu $-9583(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - 0xe9, 0xa4, 0x02, 0x00, 0x00, //0x000026cf jmp LBB0_496 - //0x000026d4 LBB0_480 - 0x48, 0x89, 0xd0, //0x000026d4 movq %rdx, %rax - 0x4c, 0x09, 0xf8, //0x000026d7 orq %r15, %rax - 0x0f, 0x99, 0xc1, //0x000026da setns %cl - 0xc5, 0x7e, 0x6f, 0x1d, 0x5b, 0xda, 0xff, 0xff, //0x000026dd vmovdqu $-9637(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x73, 0xda, 0xff, 0xff, //0x000026e5 vmovdqu $-9613(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - 0x0f, 0x88, 0xf8, 0x00, 0x00, 0x00, //0x000026ed js LBB0_485 - 0x4c, 0x39, 0xfa, //0x000026f3 cmpq %r15, %rdx - 0x0f, 0x8c, 0xef, 0x00, 0x00, 0x00, //0x000026f6 jl LBB0_485 - 0x48, 0xf7, 0xd2, //0x000026fc notq %rdx - 0x49, 0x89, 0xd1, //0x000026ff movq %rdx, %r9 - 0xe9, 0x62, 0x02, 0x00, 0x00, //0x00002702 jmp LBB0_495 - //0x00002707 LBB0_483 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002707 vmovdqa %ymm13, %ymm0 - 0x89, 0xd0, //0x0000270b movl %edx, %eax - //0x0000270d LBB0_484 - 0x49, 0xf7, 0xd5, //0x0000270d notq %r13 - 0x49, 0x29, 0xc5, //0x00002710 subq %rax, %r13 - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002713 movq $8(%rsp), %r15 - 0xe9, 0x04, 0xf0, 0xff, 0xff, //0x00002718 jmp LBB0_290 - //0x0000271d LBB0_187 - 0x4d, 0x85, 0xff, //0x0000271d testq %r15, %r15 - 0x0f, 0x85, 0x9f, 0x07, 0x00, 0x00, //0x00002720 jne LBB0_547 - 0x49, 0x01, 0xf1, //0x00002726 addq %rsi, %r9 - 0x49, 0x29, 0xf2, //0x00002729 subq %rsi, %r10 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x0000272c movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002731 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002736 movq $8(%rsp), %r15 - //0x0000273b LBB0_189 - 0x4d, 0x85, 0xd2, //0x0000273b testq %r10, %r10 - 0x0f, 0x8f, 0xfa, 0x07, 0x00, 0x00, //0x0000273e jg LBB0_551 - 0xe9, 0x4c, 0x14, 0x00, 0x00, //0x00002744 jmp LBB0_711 - //0x00002749 LBB0_54 - 0x4c, 0x01, 0xf1, //0x00002749 addq %r14, %rcx - 0x48, 0x83, 0xfb, 0x20, //0x0000274c cmpq $32, %rbx - 0x0f, 0x82, 0x5f, 0x03, 0x00, 0x00, //0x00002750 jb LBB0_505 - //0x00002756 LBB0_55 - 0xc5, 0xfe, 0x6f, 0x01, //0x00002756 vmovdqu (%rcx), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x0000275a vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x0000275e vpmovmskb %ymm1, %esi - 0xc5, 0xfd, 0x74, 0xc7, //0x00002762 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x00002766 vpmovmskb %ymm0, %edx - 0x85, 0xd2, //0x0000276a testl %edx, %edx - 0x4d, 0x89, 0xdf, //0x0000276c movq %r11, %r15 - 0x0f, 0x85, 0xa6, 0x05, 0x00, 0x00, //0x0000276f jne LBB0_529 - 0x4d, 0x85, 0xd2, //0x00002775 testq %r10, %r10 - 0x0f, 0x85, 0xcb, 0x05, 0x00, 0x00, //0x00002778 jne LBB0_531 - 0x45, 0x31, 0xd2, //0x0000277e xorl %r10d, %r10d - 0x48, 0x85, 0xf6, //0x00002781 testq %rsi, %rsi - 0x0f, 0x84, 0x34, 0x06, 0x00, 0x00, //0x00002784 je LBB0_533 - //0x0000278a LBB0_58 - 0x48, 0x0f, 0xbc, 0xc6, //0x0000278a bsfq %rsi, %rax - 0x49, 0x89, 0xca, //0x0000278e movq %rcx, %r10 - 0x4d, 0x29, 0xf2, //0x00002791 subq %r14, %r10 - 0x49, 0x01, 0xc2, //0x00002794 addq %rax, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00002797 addq $1, %r10 - 0xe9, 0x80, 0xeb, 0xff, 0xff, //0x0000279b jmp LBB0_232 - //0x000027a0 LBB0_199 - 0x4d, 0x01, 0xf2, //0x000027a0 addq %r14, %r10 - 0x48, 0x83, 0xfb, 0x20, //0x000027a3 cmpq $32, %rbx - 0x0f, 0x82, 0xef, 0x08, 0x00, 0x00, //0x000027a7 jb LBB0_564 - //0x000027ad LBB0_200 - 0x4c, 0x89, 0xd1, //0x000027ad movq %r10, %rcx - 0xc4, 0xc1, 0x7e, 0x6f, 0x02, //0x000027b0 vmovdqu (%r10), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x000027b5 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd1, //0x000027b9 vpmovmskb %ymm1, %r10d - 0xc5, 0xfd, 0x74, 0xcf, //0x000027bd vpcmpeqb %ymm7, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x000027c1 vpmovmskb %ymm1, %edx - 0x85, 0xd2, //0x000027c5 testl %edx, %edx - 0x0f, 0x85, 0xc5, 0x07, 0x00, 0x00, //0x000027c7 jne LBB0_554 - 0x4d, 0x85, 0xdb, //0x000027cd testq %r11, %r11 - 0x0f, 0x85, 0xf2, 0x07, 0x00, 0x00, //0x000027d0 jne LBB0_556 - 0x45, 0x31, 0xdb, //0x000027d6 xorl %r11d, %r11d - 0x4d, 0x85, 0xd2, //0x000027d9 testq %r10, %r10 - 0x0f, 0x84, 0x60, 0x08, 0x00, 0x00, //0x000027dc je LBB0_558 - //0x000027e2 LBB0_203 - 0x49, 0x0f, 0xbc, 0xd2, //0x000027e2 bsfq %r10, %rdx - 0xe9, 0x5c, 0x08, 0x00, 0x00, //0x000027e6 jmp LBB0_559 - //0x000027eb LBB0_485 - 0x49, 0x8d, 0x47, 0xff, //0x000027eb leaq $-1(%r15), %rax - 0x48, 0x39, 0xc2, //0x000027ef cmpq %rax, %rdx - 0x49, 0xf7, 0xd7, //0x000027f2 notq %r15 - 0x4d, 0x0f, 0x45, 0xf9, //0x000027f5 cmovneq %r9, %r15 - 0x84, 0xc9, //0x000027f9 testb %cl, %cl - 0x4d, 0x0f, 0x45, 0xcf, //0x000027fb cmovneq %r15, %r9 - 0xe9, 0x65, 0x01, 0x00, 0x00, //0x000027ff jmp LBB0_495 - //0x00002804 LBB0_486 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002804 vmovdqa %ymm13, %ymm0 - 0x0f, 0xbc, 0xc3, //0x00002808 bsfl %ebx, %eax - 0xe9, 0x3a, 0x00, 0x00, 0x00, //0x0000280b jmp LBB0_490 - //0x00002810 LBB0_487 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002810 vmovdqa %ymm13, %ymm0 - 0x48, 0x8b, 0x5c, 0x24, 0x20, //0x00002814 movq $32(%rsp), %rbx - 0x49, 0x01, 0xde, //0x00002819 addq %rbx, %r14 - 0x4d, 0x29, 0xee, //0x0000281c subq %r13, %r14 - 0x49, 0x29, 0xce, //0x0000281f subq %rcx, %r14 - 0x49, 0x83, 0xc6, 0xfe, //0x00002822 addq $-2, %r14 - 0x4d, 0x89, 0xf5, //0x00002826 movq %r14, %r13 - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002829 movq $8(%rsp), %r15 - 0xe9, 0xf3, 0xee, 0xff, 0xff, //0x0000282e jmp LBB0_291 - //0x00002833 LBB0_488 - 0x4d, 0x01, 0xf4, //0x00002833 addq %r14, %r12 - 0x48, 0x85, 0xc0, //0x00002836 testq %rax, %rax - 0x0f, 0x85, 0xe9, 0xdc, 0xff, 0xff, //0x00002839 jne LBB0_28 - 0xe9, 0x1e, 0xdd, 0xff, 0xff, //0x0000283f jmp LBB0_33 - //0x00002844 LBB0_489 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002844 vmovdqa %ymm13, %ymm0 - 0x89, 0xd0, //0x00002848 movl %edx, %eax - //0x0000284a LBB0_490 - 0x48, 0x8b, 0x5c, 0x24, 0x20, //0x0000284a movq $32(%rsp), %rbx - 0x49, 0x01, 0xde, //0x0000284f addq %rbx, %r14 - 0x4d, 0x29, 0xee, //0x00002852 subq %r13, %r14 - 0x49, 0x29, 0xc6, //0x00002855 subq %rax, %r14 - 0x4d, 0x29, 0xfe, //0x00002858 subq %r15, %r14 - 0x49, 0x83, 0xc6, 0xfe, //0x0000285b addq $-2, %r14 - 0x4d, 0x89, 0xf5, //0x0000285f movq %r14, %r13 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002862 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002867 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000286c movq $8(%rsp), %r15 - 0xe9, 0xb0, 0xee, 0xff, 0xff, //0x00002871 jmp LBB0_291 - //0x00002876 LBB0_139 - 0x4c, 0x01, 0xf3, //0x00002876 addq %r14, %rbx - 0x48, 0x83, 0xf9, 0x20, //0x00002879 cmpq $32, %rcx - 0x0f, 0x82, 0xda, 0x02, 0x00, 0x00, //0x0000287d jb LBB0_512 - //0x00002883 LBB0_140 - 0xc5, 0xfe, 0x6f, 0x03, //0x00002883 vmovdqu (%rbx), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00002887 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x0000288b vpmovmskb %ymm1, %esi - 0xc5, 0xfd, 0x74, 0xc7, //0x0000288f vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x00002893 vpmovmskb %ymm0, %edx - 0x85, 0xd2, //0x00002897 testl %edx, %edx - 0x4d, 0x89, 0xdf, //0x00002899 movq %r11, %r15 - 0x0f, 0x85, 0xc0, 0x08, 0x00, 0x00, //0x0000289c jne LBB0_575 - 0x4d, 0x85, 0xd2, //0x000028a2 testq %r10, %r10 - 0x0f, 0x85, 0xe5, 0x08, 0x00, 0x00, //0x000028a5 jne LBB0_577 - 0x45, 0x31, 0xd2, //0x000028ab xorl %r10d, %r10d - 0x48, 0x85, 0xf6, //0x000028ae testq %rsi, %rsi - 0x0f, 0x84, 0x4e, 0x09, 0x00, 0x00, //0x000028b1 je LBB0_579 - //0x000028b7 LBB0_143 - 0x48, 0x0f, 0xbc, 0xc6, //0x000028b7 bsfq %rsi, %rax - 0x49, 0x89, 0xda, //0x000028bb movq %rbx, %r10 - 0x4d, 0x29, 0xf2, //0x000028be subq %r14, %r10 - 0x49, 0x01, 0xc2, //0x000028c1 addq %rax, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x000028c4 addq $1, %r10 - 0xe9, 0xbf, 0xee, 0xff, 0xff, //0x000028c8 jmp LBB0_298 - //0x000028cd LBB0_220 - 0x4d, 0x01, 0xf2, //0x000028cd addq %r14, %r10 - 0x48, 0x83, 0xf9, 0x20, //0x000028d0 cmpq $32, %rcx - 0x0f, 0x82, 0x3c, 0x0b, 0x00, 0x00, //0x000028d4 jb LBB0_603 - //0x000028da LBB0_221 - 0x4c, 0x89, 0xd3, //0x000028da movq %r10, %rbx - 0xc4, 0xc1, 0x7e, 0x6f, 0x02, //0x000028dd vmovdqu (%r10), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x000028e2 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd1, //0x000028e6 vpmovmskb %ymm1, %r10d - 0xc5, 0xfd, 0x74, 0xcf, //0x000028ea vpcmpeqb %ymm7, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x000028ee vpmovmskb %ymm1, %edx - 0x85, 0xd2, //0x000028f2 testl %edx, %edx - 0x0f, 0x85, 0x12, 0x0a, 0x00, 0x00, //0x000028f4 jne LBB0_593 - 0x4d, 0x85, 0xdb, //0x000028fa testq %r11, %r11 - 0x0f, 0x85, 0x3f, 0x0a, 0x00, 0x00, //0x000028fd jne LBB0_595 - 0x45, 0x31, 0xdb, //0x00002903 xorl %r11d, %r11d - 0x4d, 0x85, 0xd2, //0x00002906 testq %r10, %r10 - 0x0f, 0x84, 0xad, 0x0a, 0x00, 0x00, //0x00002909 je LBB0_597 - //0x0000290f LBB0_224 - 0x49, 0x0f, 0xbc, 0xd2, //0x0000290f bsfq %r10, %rdx - 0xe9, 0xa9, 0x0a, 0x00, 0x00, //0x00002913 jmp LBB0_598 - //0x00002918 LBB0_491 - 0x49, 0x89, 0xf1, //0x00002918 movq %rsi, %r9 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000291b movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x28, //0x00002922 movq $40(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00002927 testq %rdx, %rdx - 0x0f, 0x85, 0x6f, 0xfc, 0xff, 0xff, //0x0000292a jne LBB0_469 - 0xe9, 0xdb, 0x13, 0x00, 0x00, //0x00002930 jmp LBB0_709 - //0x00002935 LBB0_492 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002935 vmovdqa %ymm13, %ymm0 - 0x0f, 0xbc, 0xc3, //0x00002939 bsfl %ebx, %eax - 0xe9, 0x22, 0x00, 0x00, 0x00, //0x0000293c jmp LBB0_494 - //0x00002941 LBB0_697 - 0x66, 0x0f, 0xbc, 0xc0, //0x00002941 bsfw %ax, %ax - 0x0f, 0xb7, 0xc8, //0x00002945 movzwl %ax, %ecx - 0x48, 0x29, 0xd1, //0x00002948 subq %rdx, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x0000294b movq %rcx, (%r13) - 0x48, 0x85, 0xdb, //0x0000294f testq %rbx, %rbx - 0x0f, 0x8f, 0x48, 0xda, 0xff, 0xff, //0x00002952 jg LBB0_3 - 0xe9, 0x74, 0x13, 0x00, 0x00, //0x00002958 jmp LBB0_698 - //0x0000295d LBB0_493 - 0xc5, 0x7d, 0x7f, 0xe8, //0x0000295d vmovdqa %ymm13, %ymm0 - 0x89, 0xd0, //0x00002961 movl %edx, %eax - //0x00002963 LBB0_494 - 0x49, 0xf7, 0xd1, //0x00002963 notq %r9 - 0x49, 0x29, 0xc1, //0x00002966 subq %rax, %r9 - //0x00002969 LBB0_495 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002969 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x0000296e movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002973 movq $8(%rsp), %r15 - //0x00002978 LBB0_496 - 0x4d, 0x85, 0xc9, //0x00002978 testq %r9, %r9 - 0x0f, 0x88, 0x8c, 0x13, 0x00, 0x00, //0x0000297b js LBB0_708 - 0x49, 0x8b, 0x4d, 0x00, //0x00002981 movq (%r13), %rcx - 0xc5, 0x7d, 0x6f, 0xe8, //0x00002985 vmovdqa %ymm0, %ymm13 - //0x00002989 LBB0_498 - 0x4c, 0x01, 0xc9, //0x00002989 addq %r9, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x0000298c movq %rcx, (%r13) - 0x48, 0x83, 0x3c, 0x24, 0x00, //0x00002990 cmpq $0, (%rsp) - 0x0f, 0x8f, 0x05, 0xda, 0xff, 0xff, //0x00002995 jg LBB0_3 - 0xe9, 0x31, 0x13, 0x00, 0x00, //0x0000299b jmp LBB0_698 - //0x000029a0 LBB0_243 - 0x4c, 0x01, 0xf7, //0x000029a0 addq %r14, %rdi - 0x49, 0x83, 0xf8, 0x20, //0x000029a3 cmpq $32, %r8 - 0x0f, 0x82, 0x2f, 0x02, 0x00, 0x00, //0x000029a7 jb LBB0_517 - //0x000029ad LBB0_244 - 0xc5, 0xfe, 0x6f, 0x07, //0x000029ad vmovdqu (%rdi), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x000029b1 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x000029b5 vpmovmskb %ymm1, %esi - 0xc5, 0xfd, 0x74, 0xc7, //0x000029b9 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x000029bd vpmovmskb %ymm0, %edx - 0x85, 0xd2, //0x000029c1 testl %edx, %edx - 0x0f, 0x85, 0x68, 0x0d, 0x00, 0x00, //0x000029c3 jne LBB0_630 - 0x4d, 0x85, 0xd2, //0x000029c9 testq %r10, %r10 - 0x0f, 0x85, 0x95, 0x0d, 0x00, 0x00, //0x000029cc jne LBB0_632 - 0x45, 0x31, 0xd2, //0x000029d2 xorl %r10d, %r10d - 0xc5, 0x7d, 0x7f, 0xea, //0x000029d5 vmovdqa %ymm13, %ymm2 - 0x48, 0x85, 0xf6, //0x000029d9 testq %rsi, %rsi - 0x0f, 0x84, 0x02, 0x0e, 0x00, 0x00, //0x000029dc je LBB0_634 - //0x000029e2 LBB0_247 - 0x48, 0x0f, 0xbc, 0xc6, //0x000029e2 bsfq %rsi, %rax - 0x48, 0x89, 0xf9, //0x000029e6 movq %rdi, %rcx - 0x4c, 0x29, 0xf1, //0x000029e9 subq %r14, %rcx - 0x48, 0x01, 0xc1, //0x000029ec addq %rax, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x000029ef addq $1, %rcx - 0xe9, 0xf6, 0xfa, 0xff, 0xff, //0x000029f3 jmp LBB0_461 - //0x000029f8 LBB0_394 - 0x4c, 0x01, 0xf1, //0x000029f8 addq %r14, %rcx - 0x49, 0x83, 0xf8, 0x20, //0x000029fb cmpq $32, %r8 - 0x0f, 0x82, 0x01, 0x02, 0x00, 0x00, //0x000029ff jb LBB0_519 - //0x00002a05 LBB0_395 - 0x48, 0x89, 0xcb, //0x00002a05 movq %rcx, %rbx - 0xc5, 0xfe, 0x6f, 0x01, //0x00002a08 vmovdqu (%rcx), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00002a0c vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xc9, //0x00002a10 vpmovmskb %ymm1, %ecx - 0xc5, 0xfd, 0x74, 0xcf, //0x00002a14 vpcmpeqb %ymm7, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x00002a18 vpmovmskb %ymm1, %edx - 0x85, 0xd2, //0x00002a1c testl %edx, %edx - 0x0f, 0x85, 0x86, 0x0e, 0x00, 0x00, //0x00002a1e jne LBB0_647 - 0x4d, 0x85, 0xdb, //0x00002a24 testq %r11, %r11 - 0x0f, 0x85, 0xab, 0x0e, 0x00, 0x00, //0x00002a27 jne LBB0_649 - 0x45, 0x31, 0xdb, //0x00002a2d xorl %r11d, %r11d - 0x48, 0x85, 0xc9, //0x00002a30 testq %rcx, %rcx - 0x0f, 0x84, 0x10, 0x0f, 0x00, 0x00, //0x00002a33 je LBB0_651 - //0x00002a39 LBB0_398 - 0x48, 0x0f, 0xbc, 0xd1, //0x00002a39 bsfq %rcx, %rdx - 0xe9, 0x0c, 0x0f, 0x00, 0x00, //0x00002a3d jmp LBB0_652 - //0x00002a42 LBB0_499 - 0x0f, 0xbc, 0xc6, //0x00002a42 bsfl %esi, %eax - 0xe9, 0xde, 0x00, 0x00, 0x00, //0x00002a45 jmp LBB0_510 - //0x00002a4a LBB0_500 - 0x4c, 0x03, 0x34, 0x24, //0x00002a4a addq (%rsp), %r14 - 0x4d, 0x29, 0xce, //0x00002a4e subq %r9, %r14 - 0x48, 0xf7, 0xd1, //0x00002a51 notq %rcx - 0x4c, 0x01, 0xf1, //0x00002a54 addq %r14, %rcx - 0x49, 0x89, 0xc9, //0x00002a57 movq %rcx, %r9 - 0xe9, 0xfc, 0xfb, 0xff, 0xff, //0x00002a5a jmp LBB0_478 - //0x00002a5f LBB0_501 - 0x49, 0x8d, 0x0c, 0x1e, //0x00002a5f leaq (%r14,%rbx), %rcx - 0x48, 0x83, 0xfe, 0x10, //0x00002a63 cmpq $16, %rsi - 0x0f, 0x83, 0x49, 0xe4, 0xff, 0xff, //0x00002a67 jae LBB0_164 - 0xe9, 0x8c, 0xe4, 0xff, 0xff, //0x00002a6d jmp LBB0_167 - //0x00002a72 LBB0_502 - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002a72 movq $-1, %r9 - 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x00002a79 movq $-1, $40(%rsp) - 0x4c, 0x8b, 0x6c, 0x24, 0x38, //0x00002a82 movq $56(%rsp), %r13 - 0x49, 0x83, 0xf8, 0x10, //0x00002a87 cmpq $16, %r8 - 0x0f, 0x83, 0x5a, 0xdf, 0xff, 0xff, //0x00002a8b jae LBB0_95 - 0xe9, 0xac, 0xe0, 0xff, 0xff, //0x00002a91 jmp LBB0_113 - //0x00002a96 LBB0_503 - 0x89, 0xd0, //0x00002a96 movl %edx, %eax - 0xe9, 0x8b, 0x00, 0x00, 0x00, //0x00002a98 jmp LBB0_510 - //0x00002a9d LBB0_504 - 0x4b, 0x8d, 0x0c, 0x0e, //0x00002a9d leaq (%r14,%r9), %rcx - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00002aa1 movq $-1, %r11 - 0x45, 0x31, 0xd2, //0x00002aa8 xorl %r10d, %r10d - 0x48, 0x83, 0xfb, 0x20, //0x00002aab cmpq $32, %rbx - 0x0f, 0x83, 0xa1, 0xfc, 0xff, 0xff, //0x00002aaf jae LBB0_55 - //0x00002ab5 LBB0_505 - 0x4d, 0x89, 0xdf, //0x00002ab5 movq %r11, %r15 - 0xe9, 0x09, 0x03, 0x00, 0x00, //0x00002ab8 jmp LBB0_534 - //0x00002abd LBB0_506 - 0x4f, 0x8d, 0x14, 0x0e, //0x00002abd leaq (%r14,%r9), %r10 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002ac1 movq $-1, %r15 - 0x45, 0x31, 0xdb, //0x00002ac8 xorl %r11d, %r11d - 0x48, 0x83, 0xfb, 0x20, //0x00002acb cmpq $32, %rbx - 0x0f, 0x83, 0xd8, 0xfc, 0xff, 0xff, //0x00002acf jae LBB0_200 - 0xe9, 0xc2, 0x05, 0x00, 0x00, //0x00002ad5 jmp LBB0_564 - //0x00002ada LBB0_507 - 0x4c, 0x29, 0xf1, //0x00002ada subq %r14, %rcx - 0x48, 0x01, 0xd1, //0x00002add addq %rdx, %rcx - //0x00002ae0 LBB0_508 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002ae0 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002ae5 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002aea movq $8(%rsp), %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002aef vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00002af4 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x9f, 0xd7, 0xff, 0xff, //0x00002af9 vmovdqu $-10337(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xb7, 0xd6, 0xff, 0xff, //0x00002b01 vmovdqu $-10569(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002b09 vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00002b0d vmovdqa %ymm1, %ymm12 - 0x48, 0x89, 0xc3, //0x00002b11 movq %rax, %rbx - 0x49, 0x89, 0x4d, 0x00, //0x00002b14 movq %rcx, (%r13) - 0x48, 0x85, 0xdb, //0x00002b18 testq %rbx, %rbx - 0x0f, 0x8f, 0x7f, 0xd8, 0xff, 0xff, //0x00002b1b jg LBB0_3 - 0xe9, 0x45, 0x10, 0x00, 0x00, //0x00002b21 jmp LBB0_178 - //0x00002b26 LBB0_509 - 0x89, 0xf0, //0x00002b26 movl %esi, %eax - //0x00002b28 LBB0_510 - 0x4c, 0x03, 0x34, 0x24, //0x00002b28 addq (%rsp), %r14 - 0x4d, 0x29, 0xce, //0x00002b2c subq %r9, %r14 - 0x49, 0x29, 0xc6, //0x00002b2f subq %rax, %r14 - 0x49, 0xf7, 0xd5, //0x00002b32 notq %r13 - 0x4d, 0x01, 0xf5, //0x00002b35 addq %r14, %r13 - 0x4d, 0x89, 0xe9, //0x00002b38 movq %r13, %r9 - 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x00002b3b movq $48(%rsp), %r13 - 0xe9, 0x16, 0xfb, 0xff, 0xff, //0x00002b40 jmp LBB0_478 - //0x00002b45 LBB0_511 - 0x4b, 0x8d, 0x1c, 0x0e, //0x00002b45 leaq (%r14,%r9), %rbx - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00002b49 movq $-1, %r11 - 0x45, 0x31, 0xd2, //0x00002b50 xorl %r10d, %r10d - 0x48, 0x83, 0xf9, 0x20, //0x00002b53 cmpq $32, %rcx - 0x0f, 0x83, 0x26, 0xfd, 0xff, 0xff, //0x00002b57 jae LBB0_140 - //0x00002b5d LBB0_512 - 0x4d, 0x89, 0xdf, //0x00002b5d movq %r11, %r15 - 0xe9, 0xa8, 0x06, 0x00, 0x00, //0x00002b60 jmp LBB0_580 - //0x00002b65 LBB0_513 - 0x4f, 0x8d, 0x14, 0x0e, //0x00002b65 leaq (%r14,%r9), %r10 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002b69 movq $-1, %r15 - 0x45, 0x31, 0xdb, //0x00002b70 xorl %r11d, %r11d - 0x48, 0x83, 0xf9, 0x20, //0x00002b73 cmpq $32, %rcx - 0x0f, 0x83, 0x5d, 0xfd, 0xff, 0xff, //0x00002b77 jae LBB0_221 - 0xe9, 0x94, 0x08, 0x00, 0x00, //0x00002b7d jmp LBB0_603 - //0x00002b82 LBB0_514 - 0x4c, 0x01, 0xf1, //0x00002b82 addq %r14, %rcx - 0x48, 0x83, 0xfe, 0x10, //0x00002b85 cmpq $16, %rsi - 0x48, 0x8b, 0x1c, 0x24, //0x00002b89 movq (%rsp), %rbx - 0x0f, 0x83, 0x97, 0xed, 0xff, 0xff, //0x00002b8d jae LBB0_318 - 0xe9, 0xda, 0xed, 0xff, 0xff, //0x00002b93 jmp LBB0_321 - //0x00002b98 LBB0_515 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002b98 movq $-1, %r15 - 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x00002b9f movq $-1, $40(%rsp) - 0x4c, 0x8b, 0x5c, 0x24, 0x38, //0x00002ba8 movq $56(%rsp), %r11 - 0x4d, 0x89, 0xd9, //0x00002bad movq %r11, %r9 - 0x4c, 0x89, 0x6c, 0x24, 0x30, //0x00002bb0 movq %r13, $48(%rsp) - 0x49, 0x83, 0xfa, 0x10, //0x00002bb5 cmpq $16, %r10 - 0x0f, 0x83, 0xff, 0xf6, 0xff, 0xff, //0x00002bb9 jae LBB0_425 - 0xe9, 0x2f, 0xf8, 0xff, 0xff, //0x00002bbf jmp LBB0_443 - //0x00002bc4 LBB0_516 - 0x4b, 0x8d, 0x3c, 0x0e, //0x00002bc4 leaq (%r14,%r9), %rdi - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00002bc8 movq $-1, %r11 - 0x45, 0x31, 0xd2, //0x00002bcf xorl %r10d, %r10d - 0x49, 0x83, 0xf8, 0x20, //0x00002bd2 cmpq $32, %r8 - 0x0f, 0x83, 0xd1, 0xfd, 0xff, 0xff, //0x00002bd6 jae LBB0_244 - //0x00002bdc LBB0_517 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002bdc vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002be0 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002be4 vmovdqa %ymm13, %ymm11 - 0xe9, 0x0a, 0x0c, 0x00, 0x00, //0x00002be9 jmp LBB0_635 - //0x00002bee LBB0_518 - 0x4b, 0x8d, 0x0c, 0x0e, //0x00002bee leaq (%r14,%r9), %rcx - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002bf2 movq $-1, %r10 - 0x45, 0x31, 0xdb, //0x00002bf9 xorl %r11d, %r11d - 0x49, 0x83, 0xf8, 0x20, //0x00002bfc cmpq $32, %r8 - 0x0f, 0x83, 0xff, 0xfd, 0xff, 0xff, //0x00002c00 jae LBB0_395 - //0x00002c06 LBB0_519 - 0x48, 0x89, 0xcb, //0x00002c06 movq %rcx, %rbx - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002c09 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002c0d vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002c11 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002c16 vmovdqa %ymm15, %ymm12 - 0xe9, 0x99, 0x0d, 0x00, 0x00, //0x00002c1b jmp LBB0_657 - //0x00002c20 LBB0_520 - 0x4c, 0x29, 0xf1, //0x00002c20 subq %r14, %rcx - 0x48, 0x01, 0xd1, //0x00002c23 addq %rdx, %rcx - //0x00002c26 LBB0_521 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002c26 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002c2b movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002c30 movq $8(%rsp), %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002c35 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00002c3a vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x59, 0xd6, 0xff, 0xff, //0x00002c3f vmovdqu $-10663(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x71, 0xd5, 0xff, 0xff, //0x00002c47 vmovdqu $-10895(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002c4f vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00002c53 vmovdqa %ymm1, %ymm12 - 0xe9, 0x75, 0xf3, 0xff, 0xff, //0x00002c57 jmp LBB0_383 - //0x00002c5c LBB0_522 - 0x49, 0x39, 0xf2, //0x00002c5c cmpq %rsi, %r10 - 0x0f, 0x84, 0x30, 0x0f, 0x00, 0x00, //0x00002c5f je LBB0_711 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002c65 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002c69 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002c6d vmovdqa %ymm13, %ymm11 - 0x49, 0x01, 0xf1, //0x00002c72 addq %rsi, %r9 - 0x49, 0x83, 0xc1, 0x01, //0x00002c75 addq $1, %r9 - 0x48, 0xf7, 0xd6, //0x00002c79 notq %rsi - 0x49, 0x01, 0xf2, //0x00002c7c addq %rsi, %r10 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002c7f movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002c84 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002c89 movq $8(%rsp), %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002c8e vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x05, 0xd6, 0xff, 0xff, //0x00002c93 vmovdqu $-10747(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x1d, 0xd5, 0xff, 0xff, //0x00002c9b vmovdqu $-10979(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002ca3 vmovdqa %ymm0, %ymm11 - 0x4d, 0x85, 0xd2, //0x00002ca7 testq %r10, %r10 - 0x0f, 0x8f, 0x30, 0x00, 0x00, 0x00, //0x00002caa jg LBB0_526 - 0xe9, 0xe0, 0x0e, 0x00, 0x00, //0x00002cb0 jmp LBB0_711 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002cb5 .p2align 4, 0x90 - //0x00002cc0 LBB0_524 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002cc0 movq $-2, %rcx - 0xba, 0x02, 0x00, 0x00, 0x00, //0x00002cc7 movl $2, %edx - 0x49, 0x01, 0xd1, //0x00002ccc addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002ccf movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x00002cd7 addq %rcx, %r10 - 0x0f, 0x8e, 0xb5, 0x0e, 0x00, 0x00, //0x00002cda jle LBB0_711 - //0x00002ce0 LBB0_526 - 0x41, 0x0f, 0xb6, 0x09, //0x00002ce0 movzbl (%r9), %ecx - 0x80, 0xf9, 0x5c, //0x00002ce4 cmpb $92, %cl - 0x0f, 0x84, 0xd3, 0xff, 0xff, 0xff, //0x00002ce7 je LBB0_524 - 0x80, 0xf9, 0x22, //0x00002ced cmpb $34, %cl - 0x0f, 0x84, 0x22, 0x0a, 0x00, 0x00, //0x00002cf0 je LBB0_629 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002cf6 movq $-1, %rcx - 0xba, 0x01, 0x00, 0x00, 0x00, //0x00002cfd movl $1, %edx - 0x49, 0x01, 0xd1, //0x00002d02 addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002d05 movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x00002d0d addq %rcx, %r10 - 0x0f, 0x8f, 0xca, 0xff, 0xff, 0xff, //0x00002d10 jg LBB0_526 - 0xe9, 0x7a, 0x0e, 0x00, 0x00, //0x00002d16 jmp LBB0_711 - //0x00002d1b LBB0_529 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002d1b vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002d1f vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002d23 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002d28 vmovdqa %ymm15, %ymm12 - 0x49, 0x83, 0xff, 0xff, //0x00002d2d cmpq $-1, %r15 - 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00002d31 jne LBB0_532 - 0x48, 0x89, 0xc8, //0x00002d37 movq %rcx, %rax - 0x4c, 0x29, 0xf0, //0x00002d3a subq %r14, %rax - 0x4c, 0x0f, 0xbc, 0xda, //0x00002d3d bsfq %rdx, %r11 - 0x49, 0x01, 0xc3, //0x00002d41 addq %rax, %r11 - 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00002d44 jmp LBB0_532 - //0x00002d49 LBB0_531 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002d49 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002d4d vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002d51 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002d56 vmovdqa %ymm15, %ymm12 - //0x00002d5b LBB0_532 - 0x44, 0x89, 0xd0, //0x00002d5b movl %r10d, %eax - 0xf7, 0xd0, //0x00002d5e notl %eax - 0x21, 0xd0, //0x00002d60 andl %edx, %eax - 0x8d, 0x3c, 0x00, //0x00002d62 leal (%rax,%rax), %edi - 0x45, 0x8d, 0x3c, 0x42, //0x00002d65 leal (%r10,%rax,2), %r15d - 0xf7, 0xd7, //0x00002d69 notl %edi - 0x21, 0xd7, //0x00002d6b andl %edx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002d6d andl $-1431655766, %edi - 0x45, 0x31, 0xd2, //0x00002d73 xorl %r10d, %r10d - 0x01, 0xc7, //0x00002d76 addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc2, //0x00002d78 setb %r10b - 0x01, 0xff, //0x00002d7c addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00002d7e xorl $1431655765, %edi - 0x44, 0x21, 0xff, //0x00002d84 andl %r15d, %edi - 0xf7, 0xd7, //0x00002d87 notl %edi - 0x21, 0xfe, //0x00002d89 andl %edi, %esi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002d8b vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00002d90 vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00002d95 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0xfe, 0xd4, 0xff, 0xff, //0x00002d9a vmovdqu $-11010(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x16, 0xd4, 0xff, 0xff, //0x00002da2 vmovdqu $-11242(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002daa vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00002dae vmovdqa %ymm1, %ymm12 - 0x4d, 0x89, 0xdf, //0x00002db2 movq %r11, %r15 - 0x48, 0x85, 0xf6, //0x00002db5 testq %rsi, %rsi - 0x0f, 0x85, 0xcc, 0xf9, 0xff, 0xff, //0x00002db8 jne LBB0_58 - //0x00002dbe LBB0_533 - 0x48, 0x83, 0xc1, 0x20, //0x00002dbe addq $32, %rcx - 0x48, 0x83, 0xc3, 0xe0, //0x00002dc2 addq $-32, %rbx - //0x00002dc6 LBB0_534 - 0x4d, 0x85, 0xd2, //0x00002dc6 testq %r10, %r10 - 0x0f, 0x85, 0x0d, 0x07, 0x00, 0x00, //0x00002dc9 jne LBB0_614 - 0x4c, 0x89, 0xf7, //0x00002dcf movq %r14, %rdi - 0x48, 0xf7, 0xd7, //0x00002dd2 notq %rdi - 0x4c, 0x89, 0xfe, //0x00002dd5 movq %r15, %rsi - 0x49, 0x89, 0xca, //0x00002dd8 movq %rcx, %r10 - 0x48, 0x85, 0xdb, //0x00002ddb testq %rbx, %rbx - 0x0f, 0x84, 0xa2, 0x00, 0x00, 0x00, //0x00002dde je LBB0_546 - //0x00002de4 LBB0_536 - 0x48, 0x83, 0xc7, 0x01, //0x00002de4 addq $1, %rdi - //0x00002de8 LBB0_537 - 0x31, 0xd2, //0x00002de8 xorl %edx, %edx - //0x00002dea LBB0_538 - 0x41, 0x0f, 0xb6, 0x0c, 0x12, //0x00002dea movzbl (%r10,%rdx), %ecx - 0x80, 0xf9, 0x22, //0x00002def cmpb $34, %cl - 0x0f, 0x84, 0x87, 0x00, 0x00, 0x00, //0x00002df2 je LBB0_545 - 0x80, 0xf9, 0x5c, //0x00002df8 cmpb $92, %cl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002dfb je LBB0_543 - 0x48, 0x83, 0xc2, 0x01, //0x00002e01 addq $1, %rdx - 0x48, 0x39, 0xd3, //0x00002e05 cmpq %rdx, %rbx - 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x00002e08 jne LBB0_538 - 0xe9, 0x7b, 0x00, 0x00, 0x00, //0x00002e0e jmp LBB0_541 - //0x00002e13 LBB0_543 - 0x48, 0x8d, 0x43, 0xff, //0x00002e13 leaq $-1(%rbx), %rax - 0x48, 0x39, 0xd0, //0x00002e17 cmpq %rdx, %rax - 0x0f, 0x84, 0x30, 0x0d, 0x00, 0x00, //0x00002e1a je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002e20 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002e24 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002e28 vmovdqa %ymm13, %ymm11 - 0x4a, 0x8d, 0x04, 0x17, //0x00002e2d leaq (%rdi,%r10), %rax - 0x48, 0x01, 0xd0, //0x00002e31 addq %rdx, %rax - 0x48, 0x83, 0xfe, 0xff, //0x00002e34 cmpq $-1, %rsi - 0x4c, 0x0f, 0x44, 0xf8, //0x00002e38 cmoveq %rax, %r15 - 0x48, 0x0f, 0x44, 0xf0, //0x00002e3c cmoveq %rax, %rsi - 0x49, 0x01, 0xd2, //0x00002e40 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x02, //0x00002e43 addq $2, %r10 - 0x48, 0x89, 0xd8, //0x00002e47 movq %rbx, %rax - 0x48, 0x29, 0xd0, //0x00002e4a subq %rdx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00002e4d addq $-2, %rax - 0x48, 0x83, 0xc3, 0xfe, //0x00002e51 addq $-2, %rbx - 0x48, 0x39, 0xd3, //0x00002e55 cmpq %rdx, %rbx - 0x48, 0x89, 0xc3, //0x00002e58 movq %rax, %rbx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002e5b vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x38, 0xd4, 0xff, 0xff, //0x00002e60 vmovdqu $-11208(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x50, 0xd3, 0xff, 0xff, //0x00002e68 vmovdqu $-11440(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002e70 vmovdqa %ymm0, %ymm11 - 0x0f, 0x85, 0x6e, 0xff, 0xff, 0xff, //0x00002e74 jne LBB0_537 - 0xe9, 0xd1, 0x0c, 0x00, 0x00, //0x00002e7a jmp LBB0_681 - //0x00002e7f LBB0_545 - 0x49, 0x01, 0xd2, //0x00002e7f addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00002e82 addq $1, %r10 - //0x00002e86 LBB0_546 - 0x4d, 0x29, 0xf2, //0x00002e86 subq %r14, %r10 - 0xe9, 0x92, 0xe4, 0xff, 0xff, //0x00002e89 jmp LBB0_232 - //0x00002e8e LBB0_541 - 0x80, 0xf9, 0x22, //0x00002e8e cmpb $34, %cl - 0x0f, 0x85, 0xb9, 0x0c, 0x00, 0x00, //0x00002e91 jne LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002e97 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002e9b vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002e9f vmovdqa %ymm13, %ymm11 - 0x49, 0x01, 0xda, //0x00002ea4 addq %rbx, %r10 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002ea7 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xec, 0xd3, 0xff, 0xff, //0x00002eac vmovdqu $-11284(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x04, 0xd3, 0xff, 0xff, //0x00002eb4 vmovdqu $-11516(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002ebc vmovdqa %ymm0, %ymm11 - 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00002ec0 jmp LBB0_546 - //0x00002ec5 LBB0_547 - 0x49, 0x39, 0xf2, //0x00002ec5 cmpq %rsi, %r10 - 0x0f, 0x84, 0xc7, 0x0c, 0x00, 0x00, //0x00002ec8 je LBB0_711 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002ece vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002ed2 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002ed6 vmovdqa %ymm13, %ymm11 - 0x49, 0x01, 0xf1, //0x00002edb addq %rsi, %r9 - 0x49, 0x83, 0xc1, 0x01, //0x00002ede addq $1, %r9 - 0x48, 0xf7, 0xd6, //0x00002ee2 notq %rsi - 0x49, 0x01, 0xf2, //0x00002ee5 addq %rsi, %r10 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002ee8 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002eed movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002ef2 movq $8(%rsp), %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002ef7 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x9c, 0xd3, 0xff, 0xff, //0x00002efc vmovdqu $-11364(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xb4, 0xd2, 0xff, 0xff, //0x00002f04 vmovdqu $-11596(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002f0c vmovdqa %ymm0, %ymm11 - 0x4d, 0x85, 0xd2, //0x00002f10 testq %r10, %r10 - 0x0f, 0x8f, 0x25, 0x00, 0x00, 0x00, //0x00002f13 jg LBB0_551 - 0xe9, 0x77, 0x0c, 0x00, 0x00, //0x00002f19 jmp LBB0_711 - //0x00002f1e LBB0_549 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002f1e movq $-2, %rcx - 0xba, 0x02, 0x00, 0x00, 0x00, //0x00002f25 movl $2, %edx - 0x49, 0x01, 0xd1, //0x00002f2a addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002f2d movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x00002f35 addq %rcx, %r10 - 0x0f, 0x8e, 0x57, 0x0c, 0x00, 0x00, //0x00002f38 jle LBB0_711 - //0x00002f3e LBB0_551 - 0x41, 0x0f, 0xb6, 0x09, //0x00002f3e movzbl (%r9), %ecx - 0x80, 0xf9, 0x5c, //0x00002f42 cmpb $92, %cl - 0x0f, 0x84, 0xd3, 0xff, 0xff, 0xff, //0x00002f45 je LBB0_549 - 0x80, 0xf9, 0x22, //0x00002f4b cmpb $34, %cl - 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00002f4e je LBB0_678 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002f54 movq $-1, %rcx - 0xba, 0x01, 0x00, 0x00, 0x00, //0x00002f5b movl $1, %edx - 0x49, 0x01, 0xd1, //0x00002f60 addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002f63 movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x00002f6b addq %rcx, %r10 - 0x0f, 0x8f, 0xca, 0xff, 0xff, 0xff, //0x00002f6e jg LBB0_551 - 0xe9, 0x1c, 0x0c, 0x00, 0x00, //0x00002f74 jmp LBB0_711 - //0x00002f79 LBB0_678 - 0x4d, 0x29, 0xf1, //0x00002f79 subq %r14, %r9 - 0x49, 0x83, 0xc1, 0x01, //0x00002f7c addq $1, %r9 - 0x4d, 0x89, 0x4d, 0x00, //0x00002f80 movq %r9, (%r13) - 0x4d, 0x85, 0xc0, //0x00002f84 testq %r8, %r8 - 0x0f, 0x8f, 0x24, 0xe8, 0xff, 0xff, //0x00002f87 jg LBB0_300 - 0xe9, 0x9a, 0x0b, 0x00, 0x00, //0x00002f8d jmp LBB0_679 - //0x00002f92 LBB0_554 - 0xc5, 0x7d, 0x7f, 0xe2, //0x00002f92 vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x00002f96 vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002f9a vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002f9f vmovdqa %ymm15, %ymm12 - 0x4c, 0x89, 0x3c, 0x24, //0x00002fa4 movq %r15, (%rsp) - 0x49, 0x83, 0xff, 0xff, //0x00002fa8 cmpq $-1, %r15 - 0x0f, 0x85, 0x2c, 0x00, 0x00, 0x00, //0x00002fac jne LBB0_557 - 0x48, 0x89, 0xc8, //0x00002fb2 movq %rcx, %rax - 0x4c, 0x29, 0xf0, //0x00002fb5 subq %r14, %rax - 0x48, 0x0f, 0xbc, 0xf2, //0x00002fb8 bsfq %rdx, %rsi - 0x48, 0x01, 0xc6, //0x00002fbc addq %rax, %rsi - 0x48, 0x89, 0x34, 0x24, //0x00002fbf movq %rsi, (%rsp) - 0xe9, 0x16, 0x00, 0x00, 0x00, //0x00002fc3 jmp LBB0_557 - //0x00002fc8 LBB0_556 - 0x4c, 0x89, 0x3c, 0x24, //0x00002fc8 movq %r15, (%rsp) - 0xc5, 0x7d, 0x7f, 0xe2, //0x00002fcc vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x00002fd0 vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002fd4 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002fd9 vmovdqa %ymm15, %ymm12 - //0x00002fde LBB0_557 - 0x44, 0x89, 0xd8, //0x00002fde movl %r11d, %eax - 0xf7, 0xd0, //0x00002fe1 notl %eax - 0x21, 0xd0, //0x00002fe3 andl %edx, %eax - 0x8d, 0x3c, 0x00, //0x00002fe5 leal (%rax,%rax), %edi - 0x41, 0x8d, 0x34, 0x43, //0x00002fe8 leal (%r11,%rax,2), %esi - 0xf7, 0xd7, //0x00002fec notl %edi - 0x21, 0xd7, //0x00002fee andl %edx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002ff0 andl $-1431655766, %edi - 0x45, 0x31, 0xdb, //0x00002ff6 xorl %r11d, %r11d - 0x01, 0xc7, //0x00002ff9 addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc3, //0x00002ffb setb %r11b - 0x01, 0xff, //0x00002fff addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00003001 xorl $1431655765, %edi - 0x21, 0xf7, //0x00003007 andl %esi, %edi - 0xf7, 0xd7, //0x00003009 notl %edi - 0x41, 0x21, 0xfa, //0x0000300b andl %edi, %r10d - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000300e vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003013 vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003018 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x7b, 0xd2, 0xff, 0xff, //0x0000301d vmovdqu $-11653(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x93, 0xd1, 0xff, 0xff, //0x00003025 vmovdqu $-11885(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x0000302d vmovdqa %ymm1, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe2, //0x00003031 vmovdqa %ymm2, %ymm12 - 0x4c, 0x8b, 0x3c, 0x24, //0x00003035 movq (%rsp), %r15 - 0x4d, 0x85, 0xd2, //0x00003039 testq %r10, %r10 - 0x0f, 0x85, 0xa0, 0xf7, 0xff, 0xff, //0x0000303c jne LBB0_203 - //0x00003042 LBB0_558 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00003042 movl $64, %edx - //0x00003047 LBB0_559 - 0xc5, 0xbd, 0x64, 0xc8, //0x00003047 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x0000304b vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x00003050 vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x00003054 vpmovmskb %ymm0, %esi - 0x0f, 0xbc, 0xfe, //0x00003058 bsfl %esi, %edi - 0x4d, 0x85, 0xd2, //0x0000305b testq %r10, %r10 - 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x0000305e je LBB0_562 - 0x85, 0xf6, //0x00003064 testl %esi, %esi - 0xb8, 0x40, 0x00, 0x00, 0x00, //0x00003066 movl $64, %eax - 0x0f, 0x44, 0xf8, //0x0000306b cmovel %eax, %edi - 0x48, 0x39, 0xfa, //0x0000306e cmpq %rdi, %rdx - 0x49, 0x89, 0xca, //0x00003071 movq %rcx, %r10 - 0x0f, 0x87, 0x15, 0x0d, 0x00, 0x00, //0x00003074 ja LBB0_721 - 0x4d, 0x29, 0xf2, //0x0000307a subq %r14, %r10 - 0x49, 0x01, 0xd2, //0x0000307d addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003080 addq $1, %r10 - 0xe9, 0x97, 0xe2, 0xff, 0xff, //0x00003084 jmp LBB0_232 - //0x00003089 LBB0_562 - 0x85, 0xf6, //0x00003089 testl %esi, %esi - 0x49, 0x89, 0xca, //0x0000308b movq %rcx, %r10 - 0x0f, 0x85, 0x08, 0x0d, 0x00, 0x00, //0x0000308e jne LBB0_722 - 0x49, 0x83, 0xc2, 0x20, //0x00003094 addq $32, %r10 - 0x48, 0x83, 0xc3, 0xe0, //0x00003098 addq $-32, %rbx - //0x0000309c LBB0_564 - 0x4d, 0x85, 0xdb, //0x0000309c testq %r11, %r11 - 0x0f, 0x85, 0x98, 0x04, 0x00, 0x00, //0x0000309f jne LBB0_616 - 0x4c, 0x89, 0xf9, //0x000030a5 movq %r15, %rcx - 0x48, 0x85, 0xdb, //0x000030a8 testq %rbx, %rbx - 0x0f, 0x84, 0x9f, 0x0a, 0x00, 0x00, //0x000030ab je LBB0_681 - //0x000030b1 LBB0_566 - 0x41, 0x0f, 0xb6, 0x12, //0x000030b1 movzbl (%r10), %edx - 0x80, 0xfa, 0x22, //0x000030b5 cmpb $34, %dl - 0x0f, 0x84, 0x98, 0x00, 0x00, 0x00, //0x000030b8 je LBB0_574 - 0x80, 0xfa, 0x5c, //0x000030be cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x000030c1 je LBB0_570 - 0x80, 0xfa, 0x1f, //0x000030c7 cmpb $31, %dl - 0x0f, 0x86, 0xd7, 0x0c, 0x00, 0x00, //0x000030ca jbe LBB0_723 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000030d0 movq $-1, %rdx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x000030d7 movl $1, %esi - 0x49, 0x01, 0xf2, //0x000030dc addq %rsi, %r10 - 0x48, 0x01, 0xd3, //0x000030df addq %rdx, %rbx - 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x000030e2 jne LBB0_566 - 0xe9, 0x63, 0x0a, 0x00, 0x00, //0x000030e8 jmp LBB0_681 - //0x000030ed LBB0_570 - 0x48, 0x83, 0xfb, 0x01, //0x000030ed cmpq $1, %rbx - 0x0f, 0x84, 0x59, 0x0a, 0x00, 0x00, //0x000030f1 je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x000030f7 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000030fb vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000030ff vmovdqa %ymm13, %ymm11 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00003104 movq $-2, %rdx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x0000310b movl $2, %esi - 0x48, 0x83, 0xf9, 0xff, //0x00003110 cmpq $-1, %rcx - 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00003114 jne LBB0_573 - 0x4d, 0x89, 0xd7, //0x0000311a movq %r10, %r15 - 0x4d, 0x29, 0xf7, //0x0000311d subq %r14, %r15 - 0x4c, 0x89, 0xf9, //0x00003120 movq %r15, %rcx - //0x00003123 LBB0_573 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003123 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003128 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x6b, 0xd1, 0xff, 0xff, //0x0000312d vmovdqu $-11925(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x83, 0xd0, 0xff, 0xff, //0x00003135 vmovdqu $-12157(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x0000313d vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00003141 vmovdqa %ymm1, %ymm12 - 0x49, 0x01, 0xf2, //0x00003145 addq %rsi, %r10 - 0x48, 0x01, 0xd3, //0x00003148 addq %rdx, %rbx - 0x0f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x0000314b jne LBB0_566 - 0xe9, 0xfa, 0x09, 0x00, 0x00, //0x00003151 jmp LBB0_681 - //0x00003156 LBB0_574 - 0x4d, 0x29, 0xf2, //0x00003156 subq %r14, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003159 addq $1, %r10 - 0xe9, 0xbe, 0xe1, 0xff, 0xff, //0x0000315d jmp LBB0_232 - //0x00003162 LBB0_575 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003162 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00003166 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000316a vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000316f vmovdqa %ymm15, %ymm12 - 0x49, 0x83, 0xff, 0xff, //0x00003174 cmpq $-1, %r15 - 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003178 jne LBB0_578 - 0x48, 0x89, 0xd8, //0x0000317e movq %rbx, %rax - 0x4c, 0x29, 0xf0, //0x00003181 subq %r14, %rax - 0x4c, 0x0f, 0xbc, 0xda, //0x00003184 bsfq %rdx, %r11 - 0x49, 0x01, 0xc3, //0x00003188 addq %rax, %r11 - 0xe9, 0x12, 0x00, 0x00, 0x00, //0x0000318b jmp LBB0_578 - //0x00003190 LBB0_577 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003190 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00003194 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003198 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000319d vmovdqa %ymm15, %ymm12 - //0x000031a2 LBB0_578 - 0x44, 0x89, 0xd0, //0x000031a2 movl %r10d, %eax - 0xf7, 0xd0, //0x000031a5 notl %eax - 0x21, 0xd0, //0x000031a7 andl %edx, %eax - 0x8d, 0x3c, 0x00, //0x000031a9 leal (%rax,%rax), %edi - 0x45, 0x8d, 0x3c, 0x42, //0x000031ac leal (%r10,%rax,2), %r15d - 0xf7, 0xd7, //0x000031b0 notl %edi - 0x21, 0xd7, //0x000031b2 andl %edx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x000031b4 andl $-1431655766, %edi - 0x45, 0x31, 0xd2, //0x000031ba xorl %r10d, %r10d - 0x01, 0xc7, //0x000031bd addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc2, //0x000031bf setb %r10b - 0x01, 0xff, //0x000031c3 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x000031c5 xorl $1431655765, %edi - 0x44, 0x21, 0xff, //0x000031cb andl %r15d, %edi - 0xf7, 0xd7, //0x000031ce notl %edi - 0x21, 0xfe, //0x000031d0 andl %edi, %esi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000031d2 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x000031d7 vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000031dc vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0xb7, 0xd0, 0xff, 0xff, //0x000031e1 vmovdqu $-12105(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xcf, 0xcf, 0xff, 0xff, //0x000031e9 vmovdqu $-12337(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000031f1 vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x000031f5 vmovdqa %ymm1, %ymm12 - 0x4d, 0x89, 0xdf, //0x000031f9 movq %r11, %r15 - 0x48, 0x85, 0xf6, //0x000031fc testq %rsi, %rsi - 0x0f, 0x85, 0xb2, 0xf6, 0xff, 0xff, //0x000031ff jne LBB0_143 - //0x00003205 LBB0_579 - 0x48, 0x83, 0xc3, 0x20, //0x00003205 addq $32, %rbx - 0x48, 0x83, 0xc1, 0xe0, //0x00003209 addq $-32, %rcx - //0x0000320d LBB0_580 - 0x4d, 0x85, 0xd2, //0x0000320d testq %r10, %r10 - 0x0f, 0x85, 0x8a, 0x03, 0x00, 0x00, //0x00003210 jne LBB0_618 - 0x4c, 0x89, 0xf6, //0x00003216 movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x00003219 notq %rsi - 0x4c, 0x89, 0xff, //0x0000321c movq %r15, %rdi - 0x49, 0x89, 0xda, //0x0000321f movq %rbx, %r10 - 0x48, 0x85, 0xc9, //0x00003222 testq %rcx, %rcx - 0x0f, 0x84, 0xa2, 0x00, 0x00, 0x00, //0x00003225 je LBB0_592 - //0x0000322b LBB0_582 - 0x48, 0x83, 0xc6, 0x01, //0x0000322b addq $1, %rsi - //0x0000322f LBB0_583 - 0x31, 0xd2, //0x0000322f xorl %edx, %edx - //0x00003231 LBB0_584 - 0x41, 0x0f, 0xb6, 0x1c, 0x12, //0x00003231 movzbl (%r10,%rdx), %ebx - 0x80, 0xfb, 0x22, //0x00003236 cmpb $34, %bl - 0x0f, 0x84, 0x87, 0x00, 0x00, 0x00, //0x00003239 je LBB0_591 - 0x80, 0xfb, 0x5c, //0x0000323f cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003242 je LBB0_589 - 0x48, 0x83, 0xc2, 0x01, //0x00003248 addq $1, %rdx - 0x48, 0x39, 0xd1, //0x0000324c cmpq %rdx, %rcx - 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x0000324f jne LBB0_584 - 0xe9, 0x7b, 0x00, 0x00, 0x00, //0x00003255 jmp LBB0_587 - //0x0000325a LBB0_589 - 0x48, 0x8d, 0x41, 0xff, //0x0000325a leaq $-1(%rcx), %rax - 0x48, 0x39, 0xd0, //0x0000325e cmpq %rdx, %rax - 0x0f, 0x84, 0xe9, 0x08, 0x00, 0x00, //0x00003261 je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003267 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x0000326b vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000326f vmovdqa %ymm13, %ymm11 - 0x4a, 0x8d, 0x04, 0x16, //0x00003274 leaq (%rsi,%r10), %rax - 0x48, 0x01, 0xd0, //0x00003278 addq %rdx, %rax - 0x48, 0x83, 0xff, 0xff, //0x0000327b cmpq $-1, %rdi - 0x4c, 0x0f, 0x44, 0xf8, //0x0000327f cmoveq %rax, %r15 - 0x48, 0x0f, 0x44, 0xf8, //0x00003283 cmoveq %rax, %rdi - 0x49, 0x01, 0xd2, //0x00003287 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x02, //0x0000328a addq $2, %r10 - 0x48, 0x89, 0xc8, //0x0000328e movq %rcx, %rax - 0x48, 0x29, 0xd0, //0x00003291 subq %rdx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00003294 addq $-2, %rax - 0x48, 0x83, 0xc1, 0xfe, //0x00003298 addq $-2, %rcx - 0x48, 0x39, 0xd1, //0x0000329c cmpq %rdx, %rcx - 0x48, 0x89, 0xc1, //0x0000329f movq %rax, %rcx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000032a2 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xf1, 0xcf, 0xff, 0xff, //0x000032a7 vmovdqu $-12303(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x09, 0xcf, 0xff, 0xff, //0x000032af vmovdqu $-12535(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000032b7 vmovdqa %ymm0, %ymm11 - 0x0f, 0x85, 0x6e, 0xff, 0xff, 0xff, //0x000032bb jne LBB0_583 - 0xe9, 0x8a, 0x08, 0x00, 0x00, //0x000032c1 jmp LBB0_681 - //0x000032c6 LBB0_591 - 0x49, 0x01, 0xd2, //0x000032c6 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x000032c9 addq $1, %r10 - //0x000032cd LBB0_592 - 0x4d, 0x29, 0xf2, //0x000032cd subq %r14, %r10 - 0xe9, 0xb7, 0xe4, 0xff, 0xff, //0x000032d0 jmp LBB0_298 - //0x000032d5 LBB0_587 - 0x80, 0xfb, 0x22, //0x000032d5 cmpb $34, %bl - 0x0f, 0x85, 0x72, 0x08, 0x00, 0x00, //0x000032d8 jne LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x000032de vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000032e2 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000032e6 vmovdqa %ymm13, %ymm11 - 0x49, 0x01, 0xca, //0x000032eb addq %rcx, %r10 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000032ee vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xa5, 0xcf, 0xff, 0xff, //0x000032f3 vmovdqu $-12379(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xbd, 0xce, 0xff, 0xff, //0x000032fb vmovdqu $-12611(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00003303 vmovdqa %ymm0, %ymm11 - 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003307 jmp LBB0_592 - //0x0000330c LBB0_593 - 0xc5, 0x7d, 0x7f, 0xe2, //0x0000330c vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x00003310 vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003314 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003319 vmovdqa %ymm15, %ymm12 - 0x4c, 0x89, 0x3c, 0x24, //0x0000331e movq %r15, (%rsp) - 0x49, 0x83, 0xff, 0xff, //0x00003322 cmpq $-1, %r15 - 0x0f, 0x85, 0x2c, 0x00, 0x00, 0x00, //0x00003326 jne LBB0_596 - 0x48, 0x89, 0xd8, //0x0000332c movq %rbx, %rax - 0x4c, 0x29, 0xf0, //0x0000332f subq %r14, %rax - 0x48, 0x0f, 0xbc, 0xf2, //0x00003332 bsfq %rdx, %rsi - 0x48, 0x01, 0xc6, //0x00003336 addq %rax, %rsi - 0x48, 0x89, 0x34, 0x24, //0x00003339 movq %rsi, (%rsp) - 0xe9, 0x16, 0x00, 0x00, 0x00, //0x0000333d jmp LBB0_596 - //0x00003342 LBB0_595 - 0x4c, 0x89, 0x3c, 0x24, //0x00003342 movq %r15, (%rsp) - 0xc5, 0x7d, 0x7f, 0xe2, //0x00003346 vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x0000334a vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000334e vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003353 vmovdqa %ymm15, %ymm12 - //0x00003358 LBB0_596 - 0x44, 0x89, 0xd8, //0x00003358 movl %r11d, %eax - 0xf7, 0xd0, //0x0000335b notl %eax - 0x21, 0xd0, //0x0000335d andl %edx, %eax - 0x8d, 0x34, 0x00, //0x0000335f leal (%rax,%rax), %esi - 0x41, 0x8d, 0x3c, 0x43, //0x00003362 leal (%r11,%rax,2), %edi - 0xf7, 0xd6, //0x00003366 notl %esi - 0x21, 0xd6, //0x00003368 andl %edx, %esi - 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000336a andl $-1431655766, %esi - 0x45, 0x31, 0xdb, //0x00003370 xorl %r11d, %r11d - 0x01, 0xc6, //0x00003373 addl %eax, %esi - 0x41, 0x0f, 0x92, 0xc3, //0x00003375 setb %r11b - 0x01, 0xf6, //0x00003379 addl %esi, %esi - 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x0000337b xorl $1431655765, %esi - 0x21, 0xfe, //0x00003381 andl %edi, %esi - 0xf7, 0xd6, //0x00003383 notl %esi - 0x41, 0x21, 0xf2, //0x00003385 andl %esi, %r10d - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003388 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x0000338d vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003392 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x01, 0xcf, 0xff, 0xff, //0x00003397 vmovdqu $-12543(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x19, 0xce, 0xff, 0xff, //0x0000339f vmovdqu $-12775(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x000033a7 vmovdqa %ymm1, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe2, //0x000033ab vmovdqa %ymm2, %ymm12 - 0x4c, 0x8b, 0x3c, 0x24, //0x000033af movq (%rsp), %r15 - 0x4d, 0x85, 0xd2, //0x000033b3 testq %r10, %r10 - 0x0f, 0x85, 0x53, 0xf5, 0xff, 0xff, //0x000033b6 jne LBB0_224 - //0x000033bc LBB0_597 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x000033bc movl $64, %edx - //0x000033c1 LBB0_598 - 0xc5, 0xbd, 0x64, 0xc8, //0x000033c1 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x000033c5 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x000033ca vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x000033ce vpmovmskb %ymm0, %esi - 0x0f, 0xbc, 0xfe, //0x000033d2 bsfl %esi, %edi - 0x4d, 0x85, 0xd2, //0x000033d5 testq %r10, %r10 - 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x000033d8 je LBB0_601 - 0x85, 0xf6, //0x000033de testl %esi, %esi - 0xb8, 0x40, 0x00, 0x00, 0x00, //0x000033e0 movl $64, %eax - 0x0f, 0x44, 0xf8, //0x000033e5 cmovel %eax, %edi - 0x48, 0x39, 0xfa, //0x000033e8 cmpq %rdi, %rdx - 0x49, 0x89, 0xda, //0x000033eb movq %rbx, %r10 - 0x0f, 0x87, 0x9b, 0x09, 0x00, 0x00, //0x000033ee ja LBB0_721 - 0x4d, 0x29, 0xf2, //0x000033f4 subq %r14, %r10 - 0x49, 0x01, 0xd2, //0x000033f7 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x000033fa addq $1, %r10 - 0xe9, 0x89, 0xe3, 0xff, 0xff, //0x000033fe jmp LBB0_298 - //0x00003403 LBB0_601 - 0x85, 0xf6, //0x00003403 testl %esi, %esi - 0x49, 0x89, 0xda, //0x00003405 movq %rbx, %r10 - 0x0f, 0x85, 0x8e, 0x09, 0x00, 0x00, //0x00003408 jne LBB0_722 - 0x49, 0x83, 0xc2, 0x20, //0x0000340e addq $32, %r10 - 0x48, 0x83, 0xc1, 0xe0, //0x00003412 addq $-32, %rcx - //0x00003416 LBB0_603 - 0x4d, 0x85, 0xdb, //0x00003416 testq %r11, %r11 - 0x0f, 0x85, 0xe2, 0x01, 0x00, 0x00, //0x00003419 jne LBB0_620 - 0x4c, 0x89, 0xfe, //0x0000341f movq %r15, %rsi - 0x48, 0x85, 0xc9, //0x00003422 testq %rcx, %rcx - 0x0f, 0x84, 0x25, 0x07, 0x00, 0x00, //0x00003425 je LBB0_681 - //0x0000342b LBB0_605 - 0x41, 0x0f, 0xb6, 0x12, //0x0000342b movzbl (%r10), %edx - 0x80, 0xfa, 0x22, //0x0000342f cmpb $34, %dl - 0x0f, 0x84, 0x98, 0x00, 0x00, 0x00, //0x00003432 je LBB0_613 - 0x80, 0xfa, 0x5c, //0x00003438 cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x0000343b je LBB0_609 - 0x80, 0xfa, 0x1f, //0x00003441 cmpb $31, %dl - 0x0f, 0x86, 0x5d, 0x09, 0x00, 0x00, //0x00003444 jbe LBB0_723 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000344a movq $-1, %rdx - 0xbf, 0x01, 0x00, 0x00, 0x00, //0x00003451 movl $1, %edi - 0x49, 0x01, 0xfa, //0x00003456 addq %rdi, %r10 - 0x48, 0x01, 0xd1, //0x00003459 addq %rdx, %rcx - 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x0000345c jne LBB0_605 - 0xe9, 0xe9, 0x06, 0x00, 0x00, //0x00003462 jmp LBB0_681 - //0x00003467 LBB0_609 - 0x48, 0x83, 0xf9, 0x01, //0x00003467 cmpq $1, %rcx - 0x0f, 0x84, 0xdf, 0x06, 0x00, 0x00, //0x0000346b je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003471 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00003475 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003479 vmovdqa %ymm13, %ymm11 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x0000347e movq $-2, %rdx - 0xbf, 0x02, 0x00, 0x00, 0x00, //0x00003485 movl $2, %edi - 0x48, 0x83, 0xfe, 0xff, //0x0000348a cmpq $-1, %rsi - 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x0000348e jne LBB0_612 - 0x4d, 0x89, 0xd7, //0x00003494 movq %r10, %r15 - 0x4d, 0x29, 0xf7, //0x00003497 subq %r14, %r15 - 0x4c, 0x89, 0xfe, //0x0000349a movq %r15, %rsi - //0x0000349d LBB0_612 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000349d vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000034a2 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0xf1, 0xcd, 0xff, 0xff, //0x000034a7 vmovdqu $-12815(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x09, 0xcd, 0xff, 0xff, //0x000034af vmovdqu $-13047(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000034b7 vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x000034bb vmovdqa %ymm1, %ymm12 - 0x49, 0x01, 0xfa, //0x000034bf addq %rdi, %r10 - 0x48, 0x01, 0xd1, //0x000034c2 addq %rdx, %rcx - 0x0f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x000034c5 jne LBB0_605 - 0xe9, 0x80, 0x06, 0x00, 0x00, //0x000034cb jmp LBB0_681 - //0x000034d0 LBB0_613 - 0x4d, 0x29, 0xf2, //0x000034d0 subq %r14, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x000034d3 addq $1, %r10 - 0xe9, 0xb0, 0xe2, 0xff, 0xff, //0x000034d7 jmp LBB0_298 - //0x000034dc LBB0_614 - 0x48, 0x85, 0xdb, //0x000034dc testq %rbx, %rbx - 0x0f, 0x84, 0x6b, 0x06, 0x00, 0x00, //0x000034df je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x000034e5 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000034e9 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000034ed vmovdqa %ymm13, %ymm11 - 0x4c, 0x89, 0xf7, //0x000034f2 movq %r14, %rdi - 0x48, 0xf7, 0xd7, //0x000034f5 notq %rdi - 0x49, 0x89, 0xca, //0x000034f8 movq %rcx, %r10 - 0x48, 0x8d, 0x04, 0x39, //0x000034fb leaq (%rcx,%rdi), %rax - 0x49, 0x83, 0xff, 0xff, //0x000034ff cmpq $-1, %r15 - 0x4c, 0x89, 0xfe, //0x00003503 movq %r15, %rsi - 0x4c, 0x0f, 0x44, 0xf8, //0x00003506 cmoveq %rax, %r15 - 0x48, 0x0f, 0x44, 0xf0, //0x0000350a cmoveq %rax, %rsi - 0x49, 0x83, 0xc2, 0x01, //0x0000350e addq $1, %r10 - 0x48, 0x83, 0xc3, 0xff, //0x00003512 addq $-1, %rbx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003516 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x7d, 0xcd, 0xff, 0xff, //0x0000351b vmovdqu $-12931(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x95, 0xcc, 0xff, 0xff, //0x00003523 vmovdqu $-13163(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x0000352b vmovdqa %ymm0, %ymm11 - 0x48, 0x85, 0xdb, //0x0000352f testq %rbx, %rbx - 0x0f, 0x85, 0xac, 0xf8, 0xff, 0xff, //0x00003532 jne LBB0_536 - 0xe9, 0x49, 0xf9, 0xff, 0xff, //0x00003538 jmp LBB0_546 - //0x0000353d LBB0_616 - 0x48, 0x85, 0xdb, //0x0000353d testq %rbx, %rbx - 0x0f, 0x84, 0x0a, 0x06, 0x00, 0x00, //0x00003540 je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003546 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x0000354a vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000354e vmovdqa %ymm13, %ymm11 - 0x4c, 0x89, 0xf1, //0x00003553 movq %r14, %rcx - 0x48, 0xf7, 0xd1, //0x00003556 notq %rcx - 0x4c, 0x01, 0xd1, //0x00003559 addq %r10, %rcx - 0x4c, 0x89, 0xfa, //0x0000355c movq %r15, %rdx - 0x49, 0x83, 0xff, 0xff, //0x0000355f cmpq $-1, %r15 - 0x4c, 0x89, 0xf8, //0x00003563 movq %r15, %rax - 0x48, 0x0f, 0x44, 0xc1, //0x00003566 cmoveq %rcx, %rax - 0x49, 0x0f, 0x45, 0xcf, //0x0000356a cmovneq %r15, %rcx - 0x49, 0x83, 0xc2, 0x01, //0x0000356e addq $1, %r10 - 0x48, 0x83, 0xc3, 0xff, //0x00003572 addq $-1, %rbx - 0x49, 0x89, 0xc7, //0x00003576 movq %rax, %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003579 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x1a, 0xcd, 0xff, 0xff, //0x0000357e vmovdqu $-13030(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x32, 0xcc, 0xff, 0xff, //0x00003586 vmovdqu $-13262(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x0000358e vmovdqa %ymm0, %ymm11 - 0x48, 0x85, 0xdb, //0x00003592 testq %rbx, %rbx - 0x0f, 0x85, 0x16, 0xfb, 0xff, 0xff, //0x00003595 jne LBB0_566 - 0xe9, 0xb0, 0x05, 0x00, 0x00, //0x0000359b jmp LBB0_681 - //0x000035a0 LBB0_618 - 0x48, 0x85, 0xc9, //0x000035a0 testq %rcx, %rcx - 0x0f, 0x84, 0xa7, 0x05, 0x00, 0x00, //0x000035a3 je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x000035a9 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000035ad vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000035b1 vmovdqa %ymm13, %ymm11 - 0x4c, 0x89, 0xf6, //0x000035b6 movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x000035b9 notq %rsi - 0x49, 0x89, 0xda, //0x000035bc movq %rbx, %r10 - 0x48, 0x8d, 0x04, 0x33, //0x000035bf leaq (%rbx,%rsi), %rax - 0x49, 0x83, 0xff, 0xff, //0x000035c3 cmpq $-1, %r15 - 0x4c, 0x89, 0xff, //0x000035c7 movq %r15, %rdi - 0x4c, 0x0f, 0x44, 0xf8, //0x000035ca cmoveq %rax, %r15 - 0x48, 0x0f, 0x44, 0xf8, //0x000035ce cmoveq %rax, %rdi - 0x49, 0x83, 0xc2, 0x01, //0x000035d2 addq $1, %r10 - 0x48, 0x83, 0xc1, 0xff, //0x000035d6 addq $-1, %rcx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000035da vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xb9, 0xcc, 0xff, 0xff, //0x000035df vmovdqu $-13127(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xd1, 0xcb, 0xff, 0xff, //0x000035e7 vmovdqu $-13359(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000035ef vmovdqa %ymm0, %ymm11 - 0x48, 0x85, 0xc9, //0x000035f3 testq %rcx, %rcx - 0x0f, 0x85, 0x2f, 0xfc, 0xff, 0xff, //0x000035f6 jne LBB0_582 - 0xe9, 0xcc, 0xfc, 0xff, 0xff, //0x000035fc jmp LBB0_592 - //0x00003601 LBB0_620 - 0x48, 0x85, 0xc9, //0x00003601 testq %rcx, %rcx - 0x0f, 0x84, 0x46, 0x05, 0x00, 0x00, //0x00003604 je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x0000360a vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x0000360e vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003612 vmovdqa %ymm13, %ymm11 - 0x4c, 0x89, 0xf6, //0x00003617 movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x0000361a notq %rsi - 0x4c, 0x01, 0xd6, //0x0000361d addq %r10, %rsi - 0x4c, 0x89, 0xfa, //0x00003620 movq %r15, %rdx - 0x49, 0x83, 0xff, 0xff, //0x00003623 cmpq $-1, %r15 - 0x4c, 0x89, 0xf8, //0x00003627 movq %r15, %rax - 0x48, 0x0f, 0x44, 0xc6, //0x0000362a cmoveq %rsi, %rax - 0x49, 0x0f, 0x45, 0xf7, //0x0000362e cmovneq %r15, %rsi - 0x49, 0x83, 0xc2, 0x01, //0x00003632 addq $1, %r10 - 0x48, 0x83, 0xc1, 0xff, //0x00003636 addq $-1, %rcx - 0x49, 0x89, 0xc7, //0x0000363a movq %rax, %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000363d vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x56, 0xcc, 0xff, 0xff, //0x00003642 vmovdqu $-13226(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x6e, 0xcb, 0xff, 0xff, //0x0000364a vmovdqu $-13458(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00003652 vmovdqa %ymm0, %ymm11 - 0x48, 0x85, 0xc9, //0x00003656 testq %rcx, %rcx - 0x0f, 0x85, 0xcc, 0xfd, 0xff, 0xff, //0x00003659 jne LBB0_605 - 0xe9, 0xec, 0x04, 0x00, 0x00, //0x0000365f jmp LBB0_681 - //0x00003664 LBB0_622 - 0x49, 0x39, 0xf2, //0x00003664 cmpq %rsi, %r10 - 0x0f, 0x84, 0x28, 0x05, 0x00, 0x00, //0x00003667 je LBB0_711 - 0xc5, 0x7d, 0x7f, 0xe1, //0x0000366d vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00003671 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003675 vmovdqa %ymm13, %ymm11 - 0x49, 0x01, 0xf1, //0x0000367a addq %rsi, %r9 - 0x49, 0x83, 0xc1, 0x01, //0x0000367d addq $1, %r9 - 0x48, 0xf7, 0xd6, //0x00003681 notq %rsi - 0x49, 0x01, 0xf2, //0x00003684 addq %rsi, %r10 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00003687 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x0000368c movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00003691 movq $8(%rsp), %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003696 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xfd, 0xcb, 0xff, 0xff, //0x0000369b vmovdqu $-13315(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x15, 0xcb, 0xff, 0xff, //0x000036a3 vmovdqu $-13547(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000036ab vmovdqa %ymm0, %ymm11 - 0x4d, 0x85, 0xd2, //0x000036af testq %r10, %r10 - 0x0f, 0x8f, 0x25, 0x00, 0x00, 0x00, //0x000036b2 jg LBB0_626 - 0xe9, 0xd8, 0x04, 0x00, 0x00, //0x000036b8 jmp LBB0_711 - //0x000036bd LBB0_624 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000036bd movq $-2, %rcx - 0xba, 0x02, 0x00, 0x00, 0x00, //0x000036c4 movl $2, %edx - 0x49, 0x01, 0xd1, //0x000036c9 addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x000036cc movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x000036d4 addq %rcx, %r10 - 0x0f, 0x8e, 0xb8, 0x04, 0x00, 0x00, //0x000036d7 jle LBB0_711 - //0x000036dd LBB0_626 - 0x41, 0x0f, 0xb6, 0x09, //0x000036dd movzbl (%r9), %ecx - 0x80, 0xf9, 0x5c, //0x000036e1 cmpb $92, %cl - 0x0f, 0x84, 0xd3, 0xff, 0xff, 0xff, //0x000036e4 je LBB0_624 - 0x80, 0xf9, 0x22, //0x000036ea cmpb $34, %cl - 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x000036ed je LBB0_629 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000036f3 movq $-1, %rcx - 0xba, 0x01, 0x00, 0x00, 0x00, //0x000036fa movl $1, %edx - 0x49, 0x01, 0xd1, //0x000036ff addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00003702 movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x0000370a addq %rcx, %r10 - 0x0f, 0x8f, 0xca, 0xff, 0xff, 0xff, //0x0000370d jg LBB0_626 - 0xe9, 0x7d, 0x04, 0x00, 0x00, //0x00003713 jmp LBB0_711 - //0x00003718 LBB0_629 - 0x4d, 0x29, 0xf1, //0x00003718 subq %r14, %r9 - 0x49, 0x83, 0xc1, 0x01, //0x0000371b addq $1, %r9 - 0x4d, 0x89, 0x4d, 0x00, //0x0000371f movq %r9, (%r13) - 0x4d, 0x85, 0xc0, //0x00003723 testq %r8, %r8 - 0x0f, 0x8f, 0x74, 0xcc, 0xff, 0xff, //0x00003726 jg LBB0_3 - 0xe9, 0xfb, 0x03, 0x00, 0x00, //0x0000372c jmp LBB0_679 - //0x00003731 LBB0_630 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003731 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00003735 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003739 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000373e vmovdqa %ymm15, %ymm12 - 0x4c, 0x89, 0x1c, 0x24, //0x00003743 movq %r11, (%rsp) - 0x49, 0x83, 0xfb, 0xff, //0x00003747 cmpq $-1, %r11 - 0x0f, 0x85, 0x2c, 0x00, 0x00, 0x00, //0x0000374b jne LBB0_633 - 0x48, 0x89, 0xf8, //0x00003751 movq %rdi, %rax - 0x4c, 0x29, 0xf0, //0x00003754 subq %r14, %rax - 0x48, 0x0f, 0xbc, 0xca, //0x00003757 bsfq %rdx, %rcx - 0x48, 0x01, 0xc1, //0x0000375b addq %rax, %rcx - 0x48, 0x89, 0x0c, 0x24, //0x0000375e movq %rcx, (%rsp) - 0xe9, 0x16, 0x00, 0x00, 0x00, //0x00003762 jmp LBB0_633 - //0x00003767 LBB0_632 - 0x4c, 0x89, 0x1c, 0x24, //0x00003767 movq %r11, (%rsp) - 0xc5, 0x7d, 0x7f, 0xe1, //0x0000376b vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x0000376f vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003773 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003778 vmovdqa %ymm15, %ymm12 - //0x0000377d LBB0_633 - 0x44, 0x89, 0xd0, //0x0000377d movl %r10d, %eax - 0xf7, 0xd0, //0x00003780 notl %eax - 0x21, 0xd0, //0x00003782 andl %edx, %eax - 0x8d, 0x0c, 0x00, //0x00003784 leal (%rax,%rax), %ecx - 0x41, 0x8d, 0x1c, 0x42, //0x00003787 leal (%r10,%rax,2), %ebx - 0xf7, 0xd1, //0x0000378b notl %ecx - 0x21, 0xd1, //0x0000378d andl %edx, %ecx - 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000378f andl $-1431655766, %ecx - 0x45, 0x31, 0xd2, //0x00003795 xorl %r10d, %r10d - 0x01, 0xc1, //0x00003798 addl %eax, %ecx - 0x41, 0x0f, 0x92, 0xc2, //0x0000379a setb %r10b - 0x01, 0xc9, //0x0000379e addl %ecx, %ecx - 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x000037a0 xorl $1431655765, %ecx - 0x21, 0xd9, //0x000037a6 andl %ebx, %ecx - 0xf7, 0xd1, //0x000037a8 notl %ecx - 0x21, 0xce, //0x000037aa andl %ecx, %esi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000037ac vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x000037b1 vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000037b6 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0xdd, 0xca, 0xff, 0xff, //0x000037bb vmovdqu $-13603(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xf5, 0xc9, 0xff, 0xff, //0x000037c3 vmovdqu $-13835(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000037cb vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x000037cf vmovdqa %ymm1, %ymm12 - 0x4c, 0x8b, 0x1c, 0x24, //0x000037d3 movq (%rsp), %r11 - 0xc5, 0x7d, 0x7f, 0xea, //0x000037d7 vmovdqa %ymm13, %ymm2 - 0x48, 0x85, 0xf6, //0x000037db testq %rsi, %rsi - 0x0f, 0x85, 0xfe, 0xf1, 0xff, 0xff, //0x000037de jne LBB0_247 - //0x000037e4 LBB0_634 - 0xc5, 0x7d, 0x7f, 0xe1, //0x000037e4 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000037e8 vmovdqa %ymm11, %ymm0 - 0xc5, 0x7d, 0x6f, 0xda, //0x000037ec vmovdqa %ymm2, %ymm11 - 0x48, 0x83, 0xc7, 0x20, //0x000037f0 addq $32, %rdi - 0x49, 0x83, 0xc0, 0xe0, //0x000037f4 addq $-32, %r8 - //0x000037f8 LBB0_635 - 0x4d, 0x85, 0xd2, //0x000037f8 testq %r10, %r10 - 0x0f, 0x85, 0x6e, 0x02, 0x00, 0x00, //0x000037fb jne LBB0_669 - 0x4c, 0x89, 0xf6, //0x00003801 movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x00003804 notq %rsi - 0x4d, 0x89, 0xda, //0x00003807 movq %r11, %r10 - 0x4d, 0x85, 0xc0, //0x0000380a testq %r8, %r8 - 0x0f, 0x84, 0x95, 0x02, 0x00, 0x00, //0x0000380d je LBB0_671 - //0x00003813 LBB0_637 - 0x48, 0x83, 0xc6, 0x01, //0x00003813 addq $1, %rsi - //0x00003817 LBB0_638 - 0x31, 0xd2, //0x00003817 xorl %edx, %edx - 0x48, 0x89, 0xf9, //0x00003819 movq %rdi, %rcx - //0x0000381c LBB0_639 - 0x0f, 0xb6, 0x1c, 0x11, //0x0000381c movzbl (%rcx,%rdx), %ebx - 0x80, 0xfb, 0x22, //0x00003820 cmpb $34, %bl - 0x0f, 0x84, 0x61, 0x00, 0x00, 0x00, //0x00003823 je LBB0_646 - 0x80, 0xfb, 0x5c, //0x00003829 cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x0000382c je LBB0_644 - 0x48, 0x83, 0xc2, 0x01, //0x00003832 addq $1, %rdx - 0x49, 0x39, 0xd0, //0x00003836 cmpq %rdx, %r8 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003839 jne LBB0_639 - 0xe9, 0x52, 0x00, 0x00, 0x00, //0x0000383f jmp LBB0_642 - //0x00003844 LBB0_644 - 0x49, 0x8d, 0x40, 0xff, //0x00003844 leaq $-1(%r8), %rax - 0x48, 0x39, 0xd0, //0x00003848 cmpq %rdx, %rax - 0x0f, 0x84, 0xad, 0x04, 0x00, 0x00, //0x0000384b je LBB0_707 - 0x48, 0x8d, 0x04, 0x3e, //0x00003851 leaq (%rsi,%rdi), %rax - 0x48, 0x01, 0xd0, //0x00003855 addq %rdx, %rax - 0x49, 0x83, 0xfa, 0xff, //0x00003858 cmpq $-1, %r10 - 0x4c, 0x0f, 0x44, 0xd8, //0x0000385c cmoveq %rax, %r11 - 0x4c, 0x0f, 0x44, 0xd0, //0x00003860 cmoveq %rax, %r10 - 0x48, 0x01, 0xd7, //0x00003864 addq %rdx, %rdi - 0x48, 0x83, 0xc7, 0x02, //0x00003867 addq $2, %rdi - 0x4c, 0x89, 0xc0, //0x0000386b movq %r8, %rax - 0x48, 0x29, 0xd0, //0x0000386e subq %rdx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00003871 addq $-2, %rax - 0x49, 0x83, 0xc0, 0xfe, //0x00003875 addq $-2, %r8 - 0x49, 0x39, 0xd0, //0x00003879 cmpq %rdx, %r8 - 0x49, 0x89, 0xc0, //0x0000387c movq %rax, %r8 - 0x0f, 0x85, 0x92, 0xff, 0xff, 0xff, //0x0000387f jne LBB0_638 - 0xe9, 0x74, 0x04, 0x00, 0x00, //0x00003885 jmp LBB0_707 - //0x0000388a LBB0_646 - 0x48, 0x01, 0xd1, //0x0000388a addq %rdx, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x0000388d addq $1, %rcx - 0xe9, 0x15, 0x02, 0x00, 0x00, //0x00003891 jmp LBB0_672 - //0x00003896 LBB0_642 - 0x80, 0xfb, 0x22, //0x00003896 cmpb $34, %bl - 0x0f, 0x85, 0x5f, 0x04, 0x00, 0x00, //0x00003899 jne LBB0_707 - 0x48, 0x89, 0xf9, //0x0000389f movq %rdi, %rcx - 0x4c, 0x01, 0xc1, //0x000038a2 addq %r8, %rcx - 0xe9, 0x01, 0x02, 0x00, 0x00, //0x000038a5 jmp LBB0_672 - //0x000038aa LBB0_647 - 0xc5, 0x7d, 0x7f, 0xe2, //0x000038aa vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x000038ae vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000038b2 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x000038b7 vmovdqa %ymm15, %ymm12 - 0x49, 0x83, 0xfa, 0xff, //0x000038bc cmpq $-1, %r10 - 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x000038c0 jne LBB0_650 - 0x48, 0x89, 0xd8, //0x000038c6 movq %rbx, %rax - 0x4c, 0x29, 0xf0, //0x000038c9 subq %r14, %rax - 0x4c, 0x0f, 0xbc, 0xd2, //0x000038cc bsfq %rdx, %r10 - 0x49, 0x01, 0xc2, //0x000038d0 addq %rax, %r10 - 0xe9, 0x12, 0x00, 0x00, 0x00, //0x000038d3 jmp LBB0_650 - //0x000038d8 LBB0_649 - 0xc5, 0x7d, 0x7f, 0xe2, //0x000038d8 vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x000038dc vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000038e0 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x000038e5 vmovdqa %ymm15, %ymm12 - //0x000038ea LBB0_650 - 0x44, 0x89, 0xd8, //0x000038ea movl %r11d, %eax - 0xf7, 0xd0, //0x000038ed notl %eax - 0x21, 0xd0, //0x000038ef andl %edx, %eax - 0x8d, 0x34, 0x00, //0x000038f1 leal (%rax,%rax), %esi - 0x41, 0x8d, 0x3c, 0x43, //0x000038f4 leal (%r11,%rax,2), %edi - 0xf7, 0xd6, //0x000038f8 notl %esi - 0x21, 0xd6, //0x000038fa andl %edx, %esi - 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x000038fc andl $-1431655766, %esi - 0x45, 0x31, 0xdb, //0x00003902 xorl %r11d, %r11d - 0x01, 0xc6, //0x00003905 addl %eax, %esi - 0x41, 0x0f, 0x92, 0xc3, //0x00003907 setb %r11b - 0x01, 0xf6, //0x0000390b addl %esi, %esi - 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x0000390d xorl $1431655765, %esi - 0x21, 0xfe, //0x00003913 andl %edi, %esi - 0xf7, 0xd6, //0x00003915 notl %esi - 0x21, 0xf1, //0x00003917 andl %esi, %ecx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003919 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x0000391e vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003923 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x70, 0xc9, 0xff, 0xff, //0x00003928 vmovdqu $-13968(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x88, 0xc8, 0xff, 0xff, //0x00003930 vmovdqu $-14200(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x00003938 vmovdqa %ymm1, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe2, //0x0000393c vmovdqa %ymm2, %ymm12 - 0x48, 0x85, 0xc9, //0x00003940 testq %rcx, %rcx - 0x0f, 0x85, 0xf0, 0xf0, 0xff, 0xff, //0x00003943 jne LBB0_398 - //0x00003949 LBB0_651 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00003949 movl $64, %edx - //0x0000394e LBB0_652 - 0xc5, 0xbd, 0x64, 0xc8, //0x0000394e vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00003952 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x00003957 vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x0000395b vpmovmskb %ymm0, %esi - 0x0f, 0xbc, 0xfe, //0x0000395f bsfl %esi, %edi - 0x48, 0x85, 0xc9, //0x00003962 testq %rcx, %rcx - 0x0f, 0x84, 0x2c, 0x00, 0x00, 0x00, //0x00003965 je LBB0_655 - 0x85, 0xf6, //0x0000396b testl %esi, %esi - 0xb8, 0x40, 0x00, 0x00, 0x00, //0x0000396d movl $64, %eax - 0x0f, 0x44, 0xf8, //0x00003972 cmovel %eax, %edi - 0x48, 0x39, 0xfa, //0x00003975 cmpq %rdi, %rdx - 0x48, 0x89, 0xd9, //0x00003978 movq %rbx, %rcx - 0x0f, 0x87, 0x31, 0x04, 0x00, 0x00, //0x0000397b ja LBB0_725 - 0xc5, 0x7d, 0x7f, 0xea, //0x00003981 vmovdqa %ymm13, %ymm2 - 0x4c, 0x29, 0xf1, //0x00003985 subq %r14, %rcx - 0x48, 0x01, 0xd1, //0x00003988 addq %rdx, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x0000398b addq $1, %rcx - 0x4d, 0x89, 0xd3, //0x0000398f movq %r10, %r11 - 0xe9, 0x57, 0xeb, 0xff, 0xff, //0x00003992 jmp LBB0_461 - //0x00003997 LBB0_655 - 0x85, 0xf6, //0x00003997 testl %esi, %esi - 0x0f, 0x85, 0x23, 0x04, 0x00, 0x00, //0x00003999 jne LBB0_726 - 0xc5, 0x7d, 0x7f, 0xe1, //0x0000399f vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000039a3 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000039a7 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x000039ac vmovdqa %ymm15, %ymm12 - 0x48, 0x83, 0xc3, 0x20, //0x000039b1 addq $32, %rbx - 0x49, 0x83, 0xc0, 0xe0, //0x000039b5 addq $-32, %r8 - //0x000039b9 LBB0_657 - 0x4d, 0x85, 0xdb, //0x000039b9 testq %r11, %r11 - 0x0f, 0x85, 0x12, 0x01, 0x00, 0x00, //0x000039bc jne LBB0_673 - 0x4c, 0x89, 0xd6, //0x000039c2 movq %r10, %rsi - 0x4d, 0x85, 0xc0, //0x000039c5 testq %r8, %r8 - 0x0f, 0x84, 0x30, 0x03, 0x00, 0x00, //0x000039c8 je LBB0_707 - //0x000039ce LBB0_659 - 0x48, 0x89, 0xd9, //0x000039ce movq %rbx, %rcx - //0x000039d1 LBB0_660 - 0x0f, 0xb6, 0x11, //0x000039d1 movzbl (%rcx), %edx - 0x80, 0xfa, 0x22, //0x000039d4 cmpb $34, %dl - 0x0f, 0x84, 0x5d, 0x00, 0x00, 0x00, //0x000039d7 je LBB0_668 - 0x80, 0xfa, 0x5c, //0x000039dd cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x000039e0 je LBB0_665 - 0x80, 0xfa, 0x1f, //0x000039e6 cmpb $31, %dl - 0x0f, 0x86, 0xe1, 0x03, 0x00, 0x00, //0x000039e9 jbe LBB0_727 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000039ef movq $-1, %rdx - 0xbf, 0x01, 0x00, 0x00, 0x00, //0x000039f6 movl $1, %edi - //0x000039fb LBB0_664 - 0x48, 0x01, 0xf9, //0x000039fb addq %rdi, %rcx - 0x49, 0x01, 0xd0, //0x000039fe addq %rdx, %r8 - 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00003a01 jne LBB0_660 - 0xe9, 0xf2, 0x02, 0x00, 0x00, //0x00003a07 jmp LBB0_707 - //0x00003a0c LBB0_665 - 0x49, 0x83, 0xf8, 0x01, //0x00003a0c cmpq $1, %r8 - 0x0f, 0x84, 0xe8, 0x02, 0x00, 0x00, //0x00003a10 je LBB0_707 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00003a16 movq $-2, %rdx - 0xbf, 0x02, 0x00, 0x00, 0x00, //0x00003a1d movl $2, %edi - 0x48, 0x83, 0xfe, 0xff, //0x00003a22 cmpq $-1, %rsi - 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00003a26 jne LBB0_664 - 0x48, 0x89, 0xce, //0x00003a2c movq %rcx, %rsi - 0x4c, 0x29, 0xf6, //0x00003a2f subq %r14, %rsi - 0x49, 0x89, 0xf2, //0x00003a32 movq %rsi, %r10 - 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003a35 jmp LBB0_664 - //0x00003a3a LBB0_668 - 0x4c, 0x29, 0xf1, //0x00003a3a subq %r14, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x00003a3d addq $1, %rcx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003a41 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7d, 0x7f, 0xda, //0x00003a46 vmovdqa %ymm11, %ymm2 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003a4a vmovdqa %ymm12, %ymm15 - 0xc5, 0xfe, 0x6f, 0x25, 0x49, 0xc8, 0xff, 0xff, //0x00003a4f vmovdqu $-14263(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x61, 0xc7, 0xff, 0xff, //0x00003a57 vmovdqu $-14495(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00003a5f vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00003a63 vmovdqa %ymm1, %ymm12 - 0x4d, 0x89, 0xd3, //0x00003a67 movq %r10, %r11 - 0xe9, 0x7f, 0xea, 0xff, 0xff, //0x00003a6a jmp LBB0_461 - //0x00003a6f LBB0_669 - 0x4d, 0x85, 0xc0, //0x00003a6f testq %r8, %r8 - 0x0f, 0x84, 0x86, 0x02, 0x00, 0x00, //0x00003a72 je LBB0_707 - 0x4c, 0x89, 0xf6, //0x00003a78 movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x00003a7b notq %rsi - 0x48, 0x8d, 0x04, 0x37, //0x00003a7e leaq (%rdi,%rsi), %rax - 0x4c, 0x89, 0xd9, //0x00003a82 movq %r11, %rcx - 0x49, 0x83, 0xfb, 0xff, //0x00003a85 cmpq $-1, %r11 - 0x4d, 0x89, 0xda, //0x00003a89 movq %r11, %r10 - 0x48, 0x0f, 0x44, 0xc8, //0x00003a8c cmoveq %rax, %rcx - 0x4c, 0x0f, 0x44, 0xd0, //0x00003a90 cmoveq %rax, %r10 - 0x48, 0x83, 0xc7, 0x01, //0x00003a94 addq $1, %rdi - 0x49, 0x83, 0xc0, 0xff, //0x00003a98 addq $-1, %r8 - 0x49, 0x89, 0xcb, //0x00003a9c movq %rcx, %r11 - 0x4d, 0x85, 0xc0, //0x00003a9f testq %r8, %r8 - 0x0f, 0x85, 0x6b, 0xfd, 0xff, 0xff, //0x00003aa2 jne LBB0_637 - //0x00003aa8 LBB0_671 - 0x48, 0x89, 0xf9, //0x00003aa8 movq %rdi, %rcx - //0x00003aab LBB0_672 - 0x4c, 0x29, 0xf1, //0x00003aab subq %r14, %rcx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003aae vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7d, 0x7f, 0xda, //0x00003ab3 vmovdqa %ymm11, %ymm2 - 0xc5, 0xfe, 0x6f, 0x25, 0xe1, 0xc7, 0xff, 0xff, //0x00003ab7 vmovdqu $-14367(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xf9, 0xc6, 0xff, 0xff, //0x00003abf vmovdqu $-14599(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00003ac7 vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00003acb vmovdqa %ymm1, %ymm12 - 0xe9, 0x1a, 0xea, 0xff, 0xff, //0x00003acf jmp LBB0_461 - //0x00003ad4 LBB0_673 - 0x4d, 0x85, 0xc0, //0x00003ad4 testq %r8, %r8 - 0x0f, 0x84, 0x21, 0x02, 0x00, 0x00, //0x00003ad7 je LBB0_707 - 0x4c, 0x89, 0xf6, //0x00003add movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x00003ae0 notq %rsi - 0x48, 0x01, 0xde, //0x00003ae3 addq %rbx, %rsi - 0x49, 0x83, 0xfa, 0xff, //0x00003ae6 cmpq $-1, %r10 - 0x4c, 0x89, 0xd0, //0x00003aea movq %r10, %rax - 0x48, 0x0f, 0x44, 0xc6, //0x00003aed cmoveq %rsi, %rax - 0x49, 0x0f, 0x45, 0xf2, //0x00003af1 cmovneq %r10, %rsi - 0x48, 0x83, 0xc3, 0x01, //0x00003af5 addq $1, %rbx - 0x49, 0x83, 0xc0, 0xff, //0x00003af9 addq $-1, %r8 - 0x49, 0x89, 0xc2, //0x00003afd movq %rax, %r10 - 0x4d, 0x85, 0xc0, //0x00003b00 testq %r8, %r8 - 0x0f, 0x85, 0xc5, 0xfe, 0xff, 0xff, //0x00003b03 jne LBB0_659 - 0xe9, 0xf0, 0x01, 0x00, 0x00, //0x00003b09 jmp LBB0_707 - //0x00003b0e LBB0_675 - 0x4d, 0x89, 0x65, 0x00, //0x00003b0e movq %r12, (%r13) - //0x00003b12 LBB0_677 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00003b12 movq $-1, (%rsp) - 0xe9, 0x76, 0x00, 0x00, 0x00, //0x00003b1a jmp LBB0_711 - //0x00003b1f LBB0_705 - 0x48, 0xc7, 0x04, 0x24, 0xf9, 0xff, 0xff, 0xff, //0x00003b1f movq $-7, (%rsp) - 0xe9, 0x69, 0x00, 0x00, 0x00, //0x00003b27 jmp LBB0_711 - //0x00003b2c LBB0_679 - 0x49, 0x83, 0xc0, 0xff, //0x00003b2c addq $-1, %r8 - 0x4c, 0x89, 0x04, 0x24, //0x00003b30 movq %r8, (%rsp) - 0xe9, 0x5c, 0x00, 0x00, 0x00, //0x00003b34 jmp LBB0_711 - //0x00003b39 LBB0_463 - 0x49, 0x83, 0xc1, 0xff, //0x00003b39 addq $-1, %r9 - 0x4c, 0x89, 0x0c, 0x24, //0x00003b3d movq %r9, (%rsp) - 0xe9, 0x4f, 0x00, 0x00, 0x00, //0x00003b41 jmp LBB0_711 - //0x00003b46 LBB0_680 - 0x49, 0x83, 0xfa, 0xff, //0x00003b46 cmpq $-1, %r10 - 0x0f, 0x85, 0x7c, 0x00, 0x00, 0x00, //0x00003b4a jne LBB0_703 - //0x00003b50 LBB0_681 - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00003b50 movq $-1, %r10 - 0x4d, 0x89, 0xc7, //0x00003b57 movq %r8, %r15 - 0xe9, 0x6d, 0x00, 0x00, 0x00, //0x00003b5a jmp LBB0_703 - //0x00003b5f LBB0_682 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003b5f movq $-1, %rcx - 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00003b66 jmp LBB0_684 - //0x00003b6b LBB0_178 - 0x48, 0x83, 0xc3, 0xff, //0x00003b6b addq $-1, %rbx - 0x48, 0x89, 0x1c, 0x24, //0x00003b6f movq %rbx, (%rsp) - 0xe9, 0x1d, 0x00, 0x00, 0x00, //0x00003b73 jmp LBB0_711 - //0x00003b78 LBB0_683 - 0x4c, 0x89, 0xe9, //0x00003b78 movq %r13, %rcx - //0x00003b7b LBB0_684 - 0x48, 0x8b, 0x54, 0x24, 0x30, //0x00003b7b movq $48(%rsp), %rdx - 0x48, 0x8b, 0x02, //0x00003b80 movq (%rdx), %rax - 0x48, 0x29, 0xc8, //0x00003b83 subq %rcx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00003b86 addq $-2, %rax - 0x48, 0x89, 0x02, //0x00003b8a movq %rax, (%rdx) - //0x00003b8d LBB0_710 - 0x48, 0xc7, 0x04, 0x24, 0xfe, 0xff, 0xff, 0xff, //0x00003b8d movq $-2, (%rsp) - //0x00003b95 LBB0_711 - 0x48, 0x8b, 0x04, 0x24, //0x00003b95 movq (%rsp), %rax - 0x48, 0x8d, 0x65, 0xd8, //0x00003b99 leaq $-40(%rbp), %rsp - 0x5b, //0x00003b9d popq %rbx - 0x41, 0x5c, //0x00003b9e popq %r12 - 0x41, 0x5d, //0x00003ba0 popq %r13 - 0x41, 0x5e, //0x00003ba2 popq %r14 - 0x41, 0x5f, //0x00003ba4 popq %r15 - 0x5d, //0x00003ba6 popq %rbp - 0xc5, 0xf8, 0x77, //0x00003ba7 vzeroupper - 0xc3, //0x00003baa retq - //0x00003bab LBB0_686 - 0x49, 0x89, 0x55, 0x00, //0x00003bab movq %rdx, (%r13) - 0xe9, 0xe1, 0xff, 0xff, 0xff, //0x00003baf jmp LBB0_711 - //0x00003bb4 LBB0_699 - 0x49, 0x83, 0xff, 0xff, //0x00003bb4 cmpq $-1, %r15 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00003bb8 jne LBB0_702 - 0x4c, 0x0f, 0xbc, 0xfe, //0x00003bbe bsfq %rsi, %r15 - //0x00003bc2 LBB0_701 - 0x4d, 0x01, 0xd7, //0x00003bc2 addq %r10, %r15 - //0x00003bc5 LBB0_702 - 0x49, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00003bc5 movq $-2, %r10 - //0x00003bcc LBB0_703 - 0x4c, 0x89, 0x14, 0x24, //0x00003bcc movq %r10, (%rsp) - 0x4d, 0x89, 0x7d, 0x00, //0x00003bd0 movq %r15, (%r13) - 0xe9, 0xbc, 0xff, 0xff, 0xff, //0x00003bd4 jmp LBB0_711 - //0x00003bd9 LBB0_687 - 0x80, 0xfa, 0x61, //0x00003bd9 cmpb $97, %dl - 0x0f, 0x85, 0xab, 0xff, 0xff, 0xff, //0x00003bdc jne LBB0_710 - 0x48, 0x8d, 0x41, 0x01, //0x00003be2 leaq $1(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003be6 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x6c, //0x00003bea cmpb $108, $1(%r14,%rcx) - 0x0f, 0x85, 0x97, 0xff, 0xff, 0xff, //0x00003bf0 jne LBB0_710 - 0x48, 0x8d, 0x41, 0x02, //0x00003bf6 leaq $2(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003bfa movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x73, //0x00003bfe cmpb $115, $2(%r14,%rcx) - 0x0f, 0x85, 0x83, 0xff, 0xff, 0xff, //0x00003c04 jne LBB0_710 - 0x48, 0xc7, 0x04, 0x24, 0xfe, 0xff, 0xff, 0xff, //0x00003c0a movq $-2, (%rsp) - 0x48, 0x8d, 0x41, 0x03, //0x00003c12 leaq $3(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003c16 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x03, 0x65, //0x00003c1a cmpb $101, $3(%r14,%rcx) - 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x00003c20 jne LBB0_711 - 0x48, 0x83, 0xc1, 0x04, //0x00003c26 addq $4, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x00003c2a movq %rcx, (%r13) - 0xe9, 0x62, 0xff, 0xff, 0xff, //0x00003c2e jmp LBB0_711 - //0x00003c33 LBB0_267 - 0x49, 0x89, 0x45, 0x00, //0x00003c33 movq %rax, (%r13) - 0x41, 0x80, 0x3c, 0x06, 0x6e, //0x00003c37 cmpb $110, (%r14,%rax) - 0x0f, 0x85, 0x4b, 0xff, 0xff, 0xff, //0x00003c3c jne LBB0_710 - 0x49, 0x89, 0x4d, 0x00, //0x00003c42 movq %rcx, (%r13) - 0x41, 0x80, 0x3c, 0x0e, 0x75, //0x00003c46 cmpb $117, (%r14,%rcx) - 0x0f, 0x85, 0x3c, 0xff, 0xff, 0xff, //0x00003c4b jne LBB0_710 - 0x48, 0x8d, 0x41, 0x01, //0x00003c51 leaq $1(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003c55 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x6c, //0x00003c59 cmpb $108, $1(%r14,%rcx) - 0x0f, 0x85, 0x28, 0xff, 0xff, 0xff, //0x00003c5f jne LBB0_710 - 0x48, 0x8d, 0x41, 0x02, //0x00003c65 leaq $2(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003c69 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x6c, //0x00003c6d cmpb $108, $2(%r14,%rcx) - 0x0f, 0x84, 0x4b, 0x00, 0x00, 0x00, //0x00003c73 je LBB0_696 - 0xe9, 0x0f, 0xff, 0xff, 0xff, //0x00003c79 jmp LBB0_710 - //0x00003c7e LBB0_692 - 0x49, 0x89, 0x45, 0x00, //0x00003c7e movq %rax, (%r13) - 0x41, 0x80, 0x3c, 0x06, 0x74, //0x00003c82 cmpb $116, (%r14,%rax) - 0x0f, 0x85, 0x00, 0xff, 0xff, 0xff, //0x00003c87 jne LBB0_710 - 0x49, 0x89, 0x4d, 0x00, //0x00003c8d movq %rcx, (%r13) - 0x41, 0x80, 0x3c, 0x0e, 0x72, //0x00003c91 cmpb $114, (%r14,%rcx) - 0x0f, 0x85, 0xf1, 0xfe, 0xff, 0xff, //0x00003c96 jne LBB0_710 - 0x48, 0x8d, 0x41, 0x01, //0x00003c9c leaq $1(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003ca0 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x75, //0x00003ca4 cmpb $117, $1(%r14,%rcx) - 0x0f, 0x85, 0xdd, 0xfe, 0xff, 0xff, //0x00003caa jne LBB0_710 - 0x48, 0x8d, 0x41, 0x02, //0x00003cb0 leaq $2(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003cb4 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x65, //0x00003cb8 cmpb $101, $2(%r14,%rcx) - 0x0f, 0x85, 0xc9, 0xfe, 0xff, 0xff, //0x00003cbe jne LBB0_710 - //0x00003cc4 LBB0_696 - 0x48, 0x83, 0xc1, 0x03, //0x00003cc4 addq $3, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x00003cc8 movq %rcx, (%r13) - 0xe9, 0xbc, 0xfe, 0xff, 0xff, //0x00003ccc jmp LBB0_710 - //0x00003cd1 LBB0_698 - 0x48, 0x83, 0x04, 0x24, 0xff, //0x00003cd1 addq $-1, (%rsp) - 0xe9, 0xba, 0xfe, 0xff, 0xff, //0x00003cd6 jmp LBB0_711 - //0x00003cdb LBB0_264 - 0x48, 0x83, 0xc1, 0xff, //0x00003cdb addq $-1, %rcx - 0x48, 0x89, 0x0c, 0x24, //0x00003cdf movq %rcx, (%rsp) - 0xe9, 0xad, 0xfe, 0xff, 0xff, //0x00003ce3 jmp LBB0_711 - //0x00003ce8 LBB0_704 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003ce8 movq $-1, %rcx - 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x00003cef jmp LBB0_709 - //0x00003cf4 LBB0_706 - 0x48, 0x83, 0xf9, 0xff, //0x00003cf4 cmpq $-1, %rcx - 0x0f, 0x85, 0x58, 0x00, 0x00, 0x00, //0x00003cf8 jne LBB0_716 + 0x48, 0x21, 0xcf, //0x00001e0f andq %rcx, %rdi + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00001e12 jne LBB0_340 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00001e18 jmp LBB0_343 + //0x00001e1d LBB0_342 + 0xc4, 0x41, 0x7d, 0x6f, 0xd5, //0x00001e1d vmovdqa %ymm13, %ymm10 + 0xc4, 0x41, 0x7d, 0x6f, 0xef, //0x00001e22 vmovdqa %ymm15, %ymm13 + //0x00001e27 LBB0_343 + 0x49, 0xc1, 0xfd, 0x3f, //0x00001e27 sarq $63, %r13 + 0xf3, 0x48, 0x0f, 0xb8, 0xce, //0x00001e2b popcntq %rsi, %rcx + 0x49, 0x01, 0xcf, //0x00001e30 addq %rcx, %r15 + 0x49, 0x83, 0xc6, 0x40, //0x00001e33 addq $64, %r14 + 0x49, 0x83, 0xc1, 0xc0, //0x00001e37 addq $-64, %r9 + 0x4d, 0x89, 0xeb, //0x00001e3b movq %r13, %r11 + 0x49, 0x83, 0xf9, 0x40, //0x00001e3e cmpq $64, %r9 + 0x0f, 0x8d, 0x7a, 0xfe, 0xff, 0xff, //0x00001e42 jge LBB0_335 + 0xe9, 0x1e, 0xfd, 0xff, 0xff, //0x00001e48 jmp LBB0_344 + //0x00001e4d LBB0_360 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00001e4d movq $32(%rsp), %rcx + 0x4c, 0x8b, 0x49, 0x08, //0x00001e52 movq $8(%rcx), %r9 + 0x4d, 0x8b, 0x07, //0x00001e56 movq (%r15), %r8 + 0x4d, 0x29, 0xc1, //0x00001e59 subq %r8, %r9 + 0x4d, 0x01, 0xc6, //0x00001e5c addq %r8, %r14 + 0x45, 0x31, 0xdb, //0x00001e5f xorl %r11d, %r11d + 0x45, 0x31, 0xd2, //0x00001e62 xorl %r10d, %r10d + 0x45, 0x31, 0xff, //0x00001e65 xorl %r15d, %r15d + 0x31, 0xdb, //0x00001e68 xorl %ebx, %ebx + 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00001e6a jmp LBB0_362 + //0x00001e6f LBB0_361 + 0x49, 0xc1, 0xfd, 0x3f, //0x00001e6f sarq $63, %r13 + 0xf3, 0x48, 0x0f, 0xb8, 0xce, //0x00001e73 popcntq %rsi, %rcx + 0x49, 0x01, 0xcf, //0x00001e78 addq %rcx, %r15 + 0x49, 0x83, 0xc6, 0x40, //0x00001e7b addq $64, %r14 + 0x49, 0x83, 0xc1, 0xc0, //0x00001e7f addq $-64, %r9 + 0x4d, 0x89, 0xeb, //0x00001e83 movq %r13, %r11 + //0x00001e86 LBB0_362 + 0x49, 0x83, 0xf9, 0x40, //0x00001e86 cmpq $64, %r9 + 0x0f, 0x8c, 0x2d, 0x01, 0x00, 0x00, //0x00001e8a jl LBB0_370 + //0x00001e90 LBB0_363 + 0xc4, 0xc1, 0x7e, 0x6f, 0x0e, //0x00001e90 vmovdqu (%r14), %ymm1 + 0xc4, 0xc1, 0x7e, 0x6f, 0x46, 0x20, //0x00001e95 vmovdqu $32(%r14), %ymm0 + 0xc5, 0xf5, 0x74, 0xd7, //0x00001e9b vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00001e9f vpmovmskb %ymm2, %edx + 0xc5, 0xfd, 0x74, 0xd7, //0x00001ea3 vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001ea7 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001eab shlq $32, %rcx + 0x48, 0x09, 0xca, //0x00001eaf orq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x00001eb2 movq %rdx, %rcx + 0x4c, 0x09, 0xd1, //0x00001eb5 orq %r10, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001eb8 jne LBB0_365 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001ebe movq $-1, %rdx + 0x45, 0x31, 0xd2, //0x00001ec5 xorl %r10d, %r10d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001ec8 jmp LBB0_366 + //0x00001ecd LBB0_365 + 0x4c, 0x89, 0xd1, //0x00001ecd movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00001ed0 notq %rcx + 0x48, 0x21, 0xd1, //0x00001ed3 andq %rdx, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x00001ed6 leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xd5, //0x00001eda orq %r10, %r13 + 0x4c, 0x89, 0xef, //0x00001edd movq %r13, %rdi + 0x48, 0xf7, 0xd7, //0x00001ee0 notq %rdi + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001ee3 movabsq $-6148914691236517206, %rsi + 0x48, 0x21, 0xf2, //0x00001eed andq %rsi, %rdx + 0x48, 0x21, 0xfa, //0x00001ef0 andq %rdi, %rdx + 0x45, 0x31, 0xd2, //0x00001ef3 xorl %r10d, %r10d + 0x48, 0x01, 0xca, //0x00001ef6 addq %rcx, %rdx + 0x41, 0x0f, 0x92, 0xc2, //0x00001ef9 setb %r10b + 0x48, 0x01, 0xd2, //0x00001efd addq %rdx, %rdx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001f00 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xca, //0x00001f0a xorq %rcx, %rdx + 0x4c, 0x21, 0xea, //0x00001f0d andq %r13, %rdx + 0x48, 0xf7, 0xd2, //0x00001f10 notq %rdx + //0x00001f13 LBB0_366 + 0xc5, 0xfd, 0x74, 0xd6, //0x00001f13 vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001f17 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001f1b shlq $32, %rcx + 0xc5, 0xf5, 0x74, 0xd6, //0x00001f1f vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xf2, //0x00001f23 vpmovmskb %ymm2, %esi + 0x48, 0x09, 0xce, //0x00001f27 orq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00001f2a andq %rdx, %rsi + 0xc4, 0xe1, 0xf9, 0x6e, 0xd6, //0x00001f2d vmovq %rsi, %xmm2 + 0xc4, 0xe3, 0x69, 0x44, 0x15, 0x64, 0xe1, 0xff, 0xff, 0x00, //0x00001f32 vpclmulqdq $0, $-7836(%rip), %xmm2, %xmm2 /* LCPI0_26+0(%rip) */ + 0xc4, 0xc1, 0xf9, 0x7e, 0xd5, //0x00001f3c vmovq %xmm2, %r13 + 0x4d, 0x31, 0xdd, //0x00001f41 xorq %r11, %r13 + 0xc5, 0xa5, 0x74, 0xd1, //0x00001f44 vpcmpeqb %ymm1, %ymm11, %ymm2 + 0xc5, 0xfd, 0xd7, 0xf2, //0x00001f48 vpmovmskb %ymm2, %esi + 0xc5, 0xa5, 0x74, 0xd0, //0x00001f4c vpcmpeqb %ymm0, %ymm11, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001f50 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001f54 shlq $32, %rcx + 0x48, 0x09, 0xce, //0x00001f58 orq %rcx, %rsi + 0x4c, 0x89, 0xe9, //0x00001f5b movq %r13, %rcx + 0x48, 0xf7, 0xd1, //0x00001f5e notq %rcx + 0x48, 0x21, 0xce, //0x00001f61 andq %rcx, %rsi + 0xc5, 0x9d, 0x74, 0xc9, //0x00001f64 vpcmpeqb %ymm1, %ymm12, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf9, //0x00001f68 vpmovmskb %ymm1, %edi + 0xc5, 0x9d, 0x74, 0xc0, //0x00001f6c vpcmpeqb %ymm0, %ymm12, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x00001f70 vpmovmskb %ymm0, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x00001f74 shlq $32, %rdx + 0x48, 0x09, 0xd7, //0x00001f78 orq %rdx, %rdi + 0x48, 0x21, 0xcf, //0x00001f7b andq %rcx, %rdi + 0x0f, 0x84, 0xeb, 0xfe, 0xff, 0xff, //0x00001f7e je LBB0_361 + 0x4c, 0x8b, 0x1c, 0x24, //0x00001f84 movq (%rsp), %r11 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001f88 .p2align 4, 0x90 + //0x00001f90 LBB0_368 + 0x48, 0x8d, 0x4f, 0xff, //0x00001f90 leaq $-1(%rdi), %rcx + 0x48, 0x89, 0xca, //0x00001f94 movq %rcx, %rdx + 0x48, 0x21, 0xf2, //0x00001f97 andq %rsi, %rdx + 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x00001f9a popcntq %rdx, %rdx + 0x4c, 0x01, 0xfa, //0x00001f9f addq %r15, %rdx + 0x48, 0x39, 0xda, //0x00001fa2 cmpq %rbx, %rdx + 0x0f, 0x86, 0x7a, 0x01, 0x00, 0x00, //0x00001fa5 jbe LBB0_386 + 0x48, 0x83, 0xc3, 0x01, //0x00001fab addq $1, %rbx + 0x48, 0x21, 0xcf, //0x00001faf andq %rcx, %rdi + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00001fb2 jne LBB0_368 + 0xe9, 0xb2, 0xfe, 0xff, 0xff, //0x00001fb8 jmp LBB0_361 + //0x00001fbd LBB0_370 + 0x4d, 0x85, 0xc9, //0x00001fbd testq %r9, %r9 + 0x0f, 0x8e, 0xd2, 0x1e, 0x00, 0x00, //0x00001fc0 jle LBB0_733 + 0xc5, 0x7d, 0x7f, 0xe2, //0x00001fc6 vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00001fca vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00001fce vmovdqa %ymm13, %ymm11 + 0xc5, 0xf9, 0xef, 0xc0, //0x00001fd3 vpxor %xmm0, %xmm0, %xmm0 + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x60, //0x00001fd7 vmovdqu %ymm0, $96(%rsp) + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001fdd vmovdqu %ymm0, $64(%rsp) + 0x44, 0x89, 0xf1, //0x00001fe3 movl %r14d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00001fe6 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00001fec cmpl $4033, %ecx + 0x0f, 0x82, 0x27, 0x00, 0x00, 0x00, //0x00001ff2 jb LBB0_374 + 0x49, 0x83, 0xf9, 0x20, //0x00001ff8 cmpq $32, %r9 + 0x0f, 0x82, 0x44, 0x00, 0x00, 0x00, //0x00001ffc jb LBB0_375 + 0xc4, 0xc1, 0x7e, 0x6f, 0x06, //0x00002002 vmovdqu (%r14), %ymm0 + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00002007 vmovdqu %ymm0, $64(%rsp) + 0x49, 0x83, 0xc6, 0x20, //0x0000200d addq $32, %r14 + 0x49, 0x8d, 0x79, 0xe0, //0x00002011 leaq $-32(%r9), %rdi + 0x48, 0x8d, 0x74, 0x24, 0x60, //0x00002015 leaq $96(%rsp), %rsi + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x0000201a jmp LBB0_376 + //0x0000201f LBB0_374 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000201f vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00002024 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x6f, 0xe2, 0xff, 0xff, //0x00002029 vmovdqu $-7569(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x87, 0xe1, 0xff, 0xff, //0x00002031 vmovdqu $-7801(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x00002039 vmovdqa %ymm1, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe2, //0x0000203d vmovdqa %ymm2, %ymm12 + 0xe9, 0x4a, 0xfe, 0xff, 0xff, //0x00002041 jmp LBB0_363 + //0x00002046 LBB0_375 + 0x48, 0x8d, 0x74, 0x24, 0x40, //0x00002046 leaq $64(%rsp), %rsi + 0x4c, 0x89, 0xcf, //0x0000204b movq %r9, %rdi + //0x0000204e LBB0_376 + 0x48, 0x83, 0xff, 0x10, //0x0000204e cmpq $16, %rdi + 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00002052 jb LBB0_377 + 0xc4, 0xc1, 0x7a, 0x6f, 0x06, //0x00002058 vmovdqu (%r14), %xmm0 + 0xc5, 0xfa, 0x7f, 0x06, //0x0000205d vmovdqu %xmm0, (%rsi) + 0x49, 0x83, 0xc6, 0x10, //0x00002061 addq $16, %r14 + 0x48, 0x83, 0xc6, 0x10, //0x00002065 addq $16, %rsi + 0x48, 0x83, 0xc7, 0xf0, //0x00002069 addq $-16, %rdi + 0x48, 0x83, 0xff, 0x08, //0x0000206d cmpq $8, %rdi + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00002071 jae LBB0_384 + //0x00002077 LBB0_378 + 0x48, 0x83, 0xff, 0x04, //0x00002077 cmpq $4, %rdi + 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x0000207b jl LBB0_379 + //0x00002081 LBB0_385 + 0x41, 0x8b, 0x0e, //0x00002081 movl (%r14), %ecx + 0x89, 0x0e, //0x00002084 movl %ecx, (%rsi) + 0x49, 0x83, 0xc6, 0x04, //0x00002086 addq $4, %r14 + 0x48, 0x83, 0xc6, 0x04, //0x0000208a addq $4, %rsi + 0x48, 0x83, 0xc7, 0xfc, //0x0000208e addq $-4, %rdi + 0x48, 0x83, 0xff, 0x02, //0x00002092 cmpq $2, %rdi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00002096 jae LBB0_380 + 0xe9, 0x43, 0x00, 0x00, 0x00, //0x0000209c jmp LBB0_381 + //0x000020a1 LBB0_377 + 0x48, 0x83, 0xff, 0x08, //0x000020a1 cmpq $8, %rdi + 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x000020a5 jb LBB0_378 + //0x000020ab LBB0_384 + 0x49, 0x8b, 0x0e, //0x000020ab movq (%r14), %rcx + 0x48, 0x89, 0x0e, //0x000020ae movq %rcx, (%rsi) + 0x49, 0x83, 0xc6, 0x08, //0x000020b1 addq $8, %r14 + 0x48, 0x83, 0xc6, 0x08, //0x000020b5 addq $8, %rsi + 0x48, 0x83, 0xc7, 0xf8, //0x000020b9 addq $-8, %rdi + 0x48, 0x83, 0xff, 0x04, //0x000020bd cmpq $4, %rdi + 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x000020c1 jge LBB0_385 + //0x000020c7 LBB0_379 + 0x48, 0x83, 0xff, 0x02, //0x000020c7 cmpq $2, %rdi + 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x000020cb jb LBB0_381 + //0x000020d1 LBB0_380 + 0x41, 0x0f, 0xb7, 0x0e, //0x000020d1 movzwl (%r14), %ecx + 0x66, 0x89, 0x0e, //0x000020d5 movw %cx, (%rsi) + 0x49, 0x83, 0xc6, 0x02, //0x000020d8 addq $2, %r14 + 0x48, 0x83, 0xc6, 0x02, //0x000020dc addq $2, %rsi + 0x48, 0x83, 0xc7, 0xfe, //0x000020e0 addq $-2, %rdi + //0x000020e4 LBB0_381 + 0x4c, 0x89, 0xf2, //0x000020e4 movq %r14, %rdx + 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x000020e7 leaq $64(%rsp), %r14 + 0x48, 0x85, 0xff, //0x000020ec testq %rdi, %rdi + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000020ef vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000020f4 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x9f, 0xe1, 0xff, 0xff, //0x000020f9 vmovdqu $-7777(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xb7, 0xe0, 0xff, 0xff, //0x00002101 vmovdqu $-8009(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x00002109 vmovdqa %ymm1, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe2, //0x0000210d vmovdqa %ymm2, %ymm12 + 0x0f, 0x84, 0x79, 0xfd, 0xff, 0xff, //0x00002111 je LBB0_363 + 0x8a, 0x0a, //0x00002117 movb (%rdx), %cl + 0x88, 0x0e, //0x00002119 movb %cl, (%rsi) + 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x0000211b leaq $64(%rsp), %r14 + 0xe9, 0x6b, 0xfd, 0xff, 0xff, //0x00002120 jmp LBB0_363 + //0x00002125 LBB0_386 + 0x48, 0x8b, 0x74, 0x24, 0x20, //0x00002125 movq $32(%rsp), %rsi + 0x48, 0x8b, 0x4e, 0x08, //0x0000212a movq $8(%rsi), %rcx + 0x48, 0x0f, 0xbc, 0xd7, //0x0000212e bsfq %rdi, %rdx + 0x4c, 0x29, 0xca, //0x00002132 subq %r9, %rdx + 0x48, 0x01, 0xd1, //0x00002135 addq %rdx, %rcx + 0x48, 0x83, 0xc1, 0x01, //0x00002138 addq $1, %rcx + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000213c movq $8(%rsp), %r15 + 0x49, 0x89, 0x0f, //0x00002141 movq %rcx, (%r15) + 0x48, 0x8b, 0x56, 0x08, //0x00002144 movq $8(%rsi), %rdx + 0x48, 0x39, 0xd1, //0x00002148 cmpq %rdx, %rcx + 0x48, 0x0f, 0x47, 0xca, //0x0000214b cmovaq %rdx, %rcx + 0x49, 0x89, 0x0f, //0x0000214f movq %rcx, (%r15) + 0x0f, 0x86, 0x5d, 0xe9, 0xff, 0xff, //0x00002152 jbe LBB0_387 + 0xe9, 0xb8, 0x1b, 0x00, 0x00, //0x00002158 jmp LBB0_728 + //0x0000215d LBB0_388 + 0x0f, 0xbc, 0xd9, //0x0000215d bsfl %ecx, %ebx + 0x48, 0x89, 0xd9, //0x00002160 movq %rbx, %rcx + 0x48, 0x29, 0xf9, //0x00002163 subq %rdi, %rcx + 0x49, 0x89, 0x0f, //0x00002166 movq %rcx, (%r15) + 0x48, 0x85, 0xc9, //0x00002169 testq %rcx, %rcx + 0x4c, 0x8b, 0x1c, 0x24, //0x0000216c movq (%rsp), %r11 + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002170 movabsq $4294977024, %rdi + 0x0f, 0x8e, 0x40, 0x00, 0x00, 0x00, //0x0000217a jle LBB0_393 + 0x49, 0x01, 0xd8, //0x00002180 addq %rbx, %r8 + 0x48, 0x01, 0xda, //0x00002183 addq %rbx, %rdx + 0x48, 0x01, 0xde, //0x00002186 addq %rbx, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002189 .p2align 4, 0x90 + //0x00002190 LBB0_390 + 0x0f, 0xb6, 0x0e, //0x00002190 movzbl (%rsi), %ecx + 0x48, 0x83, 0xf9, 0x20, //0x00002193 cmpq $32, %rcx + 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00002197 ja LBB0_393 + 0x48, 0x0f, 0xa3, 0xcf, //0x0000219d btq %rcx, %rdi + 0x0f, 0x83, 0x19, 0x00, 0x00, 0x00, //0x000021a1 jae LBB0_393 + 0x49, 0x89, 0x17, //0x000021a7 movq %rdx, (%r15) + 0x49, 0x83, 0xc0, 0xff, //0x000021aa addq $-1, %r8 + 0x48, 0x83, 0xc2, 0xff, //0x000021ae addq $-1, %rdx + 0x48, 0x83, 0xc6, 0xff, //0x000021b2 addq $-1, %rsi + 0x49, 0x83, 0xf8, 0x01, //0x000021b6 cmpq $1, %r8 + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x000021ba jg LBB0_390 + //0x000021c0 LBB0_393 + 0x48, 0x85, 0xc0, //0x000021c0 testq %rax, %rax + 0x0f, 0x8f, 0xd7, 0xe1, 0xff, 0xff, //0x000021c3 jg LBB0_3 + 0xe9, 0x61, 0x1c, 0x00, 0x00, //0x000021c9 jmp LBB0_394 + //0x000021ce LBB0_395 + 0x49, 0x8d, 0x55, 0xff, //0x000021ce leaq $-1(%r13), %rdx + 0x48, 0x39, 0xd6, //0x000021d2 cmpq %rdx, %rsi + 0x49, 0xf7, 0xd5, //0x000021d5 notq %r13 + 0x4d, 0x0f, 0x45, 0xea, //0x000021d8 cmovneq %r10, %r13 + 0x84, 0xc9, //0x000021dc testb %cl, %cl + 0x4d, 0x0f, 0x45, 0xd5, //0x000021de cmovneq %r13, %r10 + 0xe9, 0x2e, 0xf6, 0xff, 0xff, //0x000021e2 jmp LBB0_293 + //0x000021e7 LBB0_396 + 0x4d, 0x89, 0xc5, //0x000021e7 movq %r8, %r13 + 0x4d, 0x29, 0xcd, //0x000021ea subq %r9, %r13 + 0x0f, 0x84, 0x8b, 0x1c, 0x00, 0x00, //0x000021ed je LBB0_732 + 0x49, 0x83, 0xfd, 0x40, //0x000021f3 cmpq $64, %r13 + 0x0f, 0x82, 0x13, 0x0c, 0x00, 0x00, //0x000021f7 jb LBB0_543 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000021fd movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x00002204 movq %r9, %rax + 0x45, 0x31, 0xdb, //0x00002207 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000220a .p2align 4, 0x90 + //0x00002210 LBB0_399 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x00002210 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x00002216 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x0000221d vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x00002221 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0x74, 0xd6, //0x00002225 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x00002229 vpmovmskb %ymm2, %ebx + 0xc5, 0xfd, 0x74, 0xd7, //0x0000222d vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00002231 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd7, //0x00002235 vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00002239 vpmovmskb %ymm2, %ecx + 0xc5, 0xbd, 0x64, 0xd1, //0x0000223d vpcmpgtb %ymm1, %ymm8, %ymm2 + 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00002241 vpcmpgtb %ymm9, %ymm1, %ymm1 + 0xc5, 0xed, 0xdb, 0xc9, //0x00002246 vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf1, //0x0000224a vpmovmskb %ymm1, %esi + 0x48, 0xc1, 0xe3, 0x20, //0x0000224e shlq $32, %rbx + 0x48, 0x09, 0xdf, //0x00002252 orq %rbx, %rdi + 0x48, 0xc1, 0xe1, 0x20, //0x00002255 shlq $32, %rcx + 0x48, 0xc1, 0xe6, 0x20, //0x00002259 shlq $32, %rsi + 0x48, 0x09, 0xca, //0x0000225d orq %rcx, %rdx + 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00002260 jne LBB0_410 + 0x4d, 0x85, 0xdb, //0x00002266 testq %r11, %r11 + 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00002269 jne LBB0_412 + 0x45, 0x31, 0xdb, //0x0000226f xorl %r11d, %r11d + //0x00002272 LBB0_402 + 0xc5, 0xbd, 0x64, 0xc8, //0x00002272 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00002276 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x0000227b vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x0000227f vpmovmskb %ymm0, %ecx + 0x48, 0x09, 0xce, //0x00002283 orq %rcx, %rsi + 0x48, 0x85, 0xff, //0x00002286 testq %rdi, %rdi + 0x0f, 0x85, 0x7f, 0x00, 0x00, 0x00, //0x00002289 jne LBB0_413 + 0x48, 0x85, 0xf6, //0x0000228f testq %rsi, %rsi + 0x0f, 0x85, 0x97, 0x1a, 0x00, 0x00, //0x00002292 jne LBB0_709 + 0x49, 0x83, 0xc5, 0xc0, //0x00002298 addq $-64, %r13 + 0x48, 0x83, 0xc0, 0x40, //0x0000229c addq $64, %rax + 0x49, 0x83, 0xfd, 0x3f, //0x000022a0 cmpq $63, %r13 + 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x000022a4 ja LBB0_399 + 0xe9, 0x93, 0x09, 0x00, 0x00, //0x000022aa jmp LBB0_405 + //0x000022af LBB0_410 + 0x49, 0x83, 0xff, 0xff, //0x000022af cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x000022b3 jne LBB0_412 + 0x4c, 0x0f, 0xbc, 0xfa, //0x000022b9 bsfq %rdx, %r15 + 0x49, 0x01, 0xc7, //0x000022bd addq %rax, %r15 + //0x000022c0 LBB0_412 + 0x4c, 0x89, 0xd9, //0x000022c0 movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x000022c3 notq %rcx + 0x48, 0x21, 0xd1, //0x000022c6 andq %rdx, %rcx + 0x4c, 0x8d, 0x14, 0x09, //0x000022c9 leaq (%rcx,%rcx), %r10 + 0x4d, 0x09, 0xda, //0x000022cd orq %r11, %r10 + 0x4c, 0x89, 0xd3, //0x000022d0 movq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x000022d3 notq %rbx + 0x48, 0x21, 0xd3, //0x000022d6 andq %rdx, %rbx + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000022d9 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd3, //0x000022e3 andq %rdx, %rbx + 0x45, 0x31, 0xdb, //0x000022e6 xorl %r11d, %r11d + 0x48, 0x01, 0xcb, //0x000022e9 addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc3, //0x000022ec setb %r11b + 0x48, 0x01, 0xdb, //0x000022f0 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000022f3 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x000022fd xorq %rcx, %rbx + 0x4c, 0x21, 0xd3, //0x00002300 andq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00002303 notq %rbx + 0x48, 0x21, 0xdf, //0x00002306 andq %rbx, %rdi + 0xe9, 0x64, 0xff, 0xff, 0xff, //0x00002309 jmp LBB0_402 + //0x0000230e LBB0_413 + 0x48, 0x0f, 0xbc, 0xcf, //0x0000230e bsfq %rdi, %rcx + 0x48, 0x85, 0xf6, //0x00002312 testq %rsi, %rsi + 0x0f, 0x84, 0xa4, 0x03, 0x00, 0x00, //0x00002315 je LBB0_470 + 0x48, 0x0f, 0xbc, 0xd6, //0x0000231b bsfq %rsi, %rdx + 0xe9, 0xa0, 0x03, 0x00, 0x00, //0x0000231f jmp LBB0_471 + //0x00002324 LBB0_415 + 0x41, 0x8a, 0x4d, 0x01, //0x00002324 movb $1(%r13), %cl + 0x80, 0xc1, 0xd2, //0x00002328 addb $-46, %cl + 0x80, 0xf9, 0x37, //0x0000232b cmpb $55, %cl + 0x0f, 0x87, 0x84, 0xf2, 0xff, 0xff, //0x0000232e ja LBB0_260 + 0x0f, 0xb6, 0xc9, //0x00002334 movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00002337 movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x00002341 btq %rcx, %rdx + 0x48, 0x89, 0xc1, //0x00002345 movq %rax, %rcx + 0x0f, 0x83, 0x00, 0x08, 0x00, 0x00, //0x00002348 jae LBB0_514 + //0x0000234e LBB0_417 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000234e movq $-1, %r15 + 0x49, 0x83, 0xfb, 0x20, //0x00002355 cmpq $32, %r11 + 0x0f, 0x82, 0x5d, 0x0a, 0x00, 0x00, //0x00002359 jb LBB0_540 + 0x45, 0x31, 0xc0, //0x0000235f xorl %r8d, %r8d + 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002362 movq $-1, %r10 + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002369 movq $-1, %r9 + //0x00002370 .p2align 4, 0x90 + //0x00002370 LBB0_419 + 0xc4, 0x81, 0x7e, 0x6f, 0x44, 0x05, 0x00, //0x00002370 vmovdqu (%r13,%r8), %ymm0 + 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x00002377 vpcmpgtb %ymm10, %ymm0, %ymm1 + 0xc5, 0x95, 0x64, 0xd0, //0x0000237c vpcmpgtb %ymm0, %ymm13, %ymm2 + 0xc5, 0xed, 0xdb, 0xc9, //0x00002380 vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0x85, 0x74, 0xd0, //0x00002384 vpcmpeqb %ymm0, %ymm15, %ymm2 + 0xc5, 0xfd, 0x74, 0x1d, 0xd0, 0xde, 0xff, 0xff, //0x00002388 vpcmpeqb $-8496(%rip), %ymm0, %ymm3 /* LCPI0_17+0(%rip) */ + 0xc5, 0xe5, 0xeb, 0xd2, //0x00002390 vpor %ymm2, %ymm3, %ymm2 + 0xc5, 0x8d, 0xdb, 0xd8, //0x00002394 vpand %ymm0, %ymm14, %ymm3 + 0xc5, 0xfd, 0x74, 0x05, 0xe0, 0xde, 0xff, 0xff, //0x00002398 vpcmpeqb $-8480(%rip), %ymm0, %ymm0 /* LCPI0_18+0(%rip) */ + 0xc5, 0xfd, 0xd7, 0xf8, //0x000023a0 vpmovmskb %ymm0, %edi + 0xc5, 0xe5, 0x74, 0xdc, //0x000023a4 vpcmpeqb %ymm4, %ymm3, %ymm3 + 0xc5, 0xfd, 0xd7, 0xf3, //0x000023a8 vpmovmskb %ymm3, %esi + 0xc5, 0xfd, 0xd7, 0xd2, //0x000023ac vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0xeb, 0xc0, //0x000023b0 vpor %ymm0, %ymm1, %ymm0 + 0xc5, 0xe5, 0xeb, 0xca, //0x000023b4 vpor %ymm2, %ymm3, %ymm1 + 0xc5, 0xfd, 0xeb, 0xc1, //0x000023b8 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x000023bc vpmovmskb %ymm0, %ecx + 0x48, 0xf7, 0xd1, //0x000023c0 notq %rcx + 0x48, 0x0f, 0xbc, 0xc9, //0x000023c3 bsfq %rcx, %rcx + 0x83, 0xf9, 0x20, //0x000023c7 cmpl $32, %ecx + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x000023ca je LBB0_421 + 0xbb, 0xff, 0xff, 0xff, 0xff, //0x000023d0 movl $-1, %ebx + 0xd3, 0xe3, //0x000023d5 shll %cl, %ebx + 0xf7, 0xd3, //0x000023d7 notl %ebx + 0x21, 0xdf, //0x000023d9 andl %ebx, %edi + 0x21, 0xde, //0x000023db andl %ebx, %esi + 0x21, 0xd3, //0x000023dd andl %edx, %ebx + 0x89, 0xda, //0x000023df movl %ebx, %edx + //0x000023e1 LBB0_421 + 0x8d, 0x5f, 0xff, //0x000023e1 leal $-1(%rdi), %ebx + 0x21, 0xfb, //0x000023e4 andl %edi, %ebx + 0xc5, 0xfe, 0x6f, 0x1d, 0xd2, 0xdd, 0xff, 0xff, //0x000023e6 vmovdqu $-8750(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0x0f, 0x85, 0x38, 0x07, 0x00, 0x00, //0x000023ee jne LBB0_509 + 0x8d, 0x5e, 0xff, //0x000023f4 leal $-1(%rsi), %ebx + 0x21, 0xf3, //0x000023f7 andl %esi, %ebx + 0x0f, 0x85, 0x2d, 0x07, 0x00, 0x00, //0x000023f9 jne LBB0_509 + 0x8d, 0x5a, 0xff, //0x000023ff leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x00002402 andl %edx, %ebx + 0x0f, 0x85, 0x22, 0x07, 0x00, 0x00, //0x00002404 jne LBB0_509 + 0x85, 0xff, //0x0000240a testl %edi, %edi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000240c je LBB0_427 + 0x0f, 0xbc, 0xff, //0x00002412 bsfl %edi, %edi + 0x49, 0x83, 0xf9, 0xff, //0x00002415 cmpq $-1, %r9 + 0x0f, 0x85, 0xd6, 0x08, 0x00, 0x00, //0x00002419 jne LBB0_528 + 0x4c, 0x01, 0xc7, //0x0000241f addq %r8, %rdi + 0x49, 0x89, 0xf9, //0x00002422 movq %rdi, %r9 + //0x00002425 LBB0_427 + 0x85, 0xf6, //0x00002425 testl %esi, %esi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00002427 je LBB0_430 + 0x0f, 0xbc, 0xf6, //0x0000242d bsfl %esi, %esi + 0x49, 0x83, 0xfa, 0xff, //0x00002430 cmpq $-1, %r10 + 0x0f, 0x85, 0xc6, 0x08, 0x00, 0x00, //0x00002434 jne LBB0_529 + 0x4c, 0x01, 0xc6, //0x0000243a addq %r8, %rsi + 0x49, 0x89, 0xf2, //0x0000243d movq %rsi, %r10 + //0x00002440 LBB0_430 + 0x85, 0xd2, //0x00002440 testl %edx, %edx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00002442 je LBB0_433 + 0x0f, 0xbc, 0xd2, //0x00002448 bsfl %edx, %edx + 0x49, 0x83, 0xff, 0xff, //0x0000244b cmpq $-1, %r15 + 0x0f, 0x85, 0xb6, 0x08, 0x00, 0x00, //0x0000244f jne LBB0_530 + 0x4c, 0x01, 0xc2, //0x00002455 addq %r8, %rdx + 0x49, 0x89, 0xd7, //0x00002458 movq %rdx, %r15 + //0x0000245b LBB0_433 + 0x83, 0xf9, 0x20, //0x0000245b cmpl $32, %ecx + 0x0f, 0x85, 0x1c, 0x02, 0x00, 0x00, //0x0000245e jne LBB0_467 + 0x49, 0x83, 0xc3, 0xe0, //0x00002464 addq $-32, %r11 + 0x49, 0x83, 0xc0, 0x20, //0x00002468 addq $32, %r8 + 0x49, 0x83, 0xfb, 0x1f, //0x0000246c cmpq $31, %r11 + 0x0f, 0x87, 0xfa, 0xfe, 0xff, 0xff, //0x00002470 ja LBB0_419 + 0xc5, 0xf8, 0x77, //0x00002476 vzeroupper + 0x4d, 0x01, 0xe8, //0x00002479 addq %r13, %r8 + 0x4c, 0x89, 0x54, 0x24, 0x28, //0x0000247c movq %r10, $40(%rsp) + 0x49, 0x83, 0xfb, 0x10, //0x00002481 cmpq $16, %r11 + 0x4c, 0x89, 0x6c, 0x24, 0x30, //0x00002485 movq %r13, $48(%rsp) + 0x0f, 0x82, 0x48, 0x01, 0x00, 0x00, //0x0000248a jb LBB0_454 + //0x00002490 LBB0_436 + 0x4d, 0x89, 0xc2, //0x00002490 movq %r8, %r10 + 0x4d, 0x29, 0xea, //0x00002493 subq %r13, %r10 + 0x45, 0x31, 0xed, //0x00002496 xorl %r13d, %r13d + //0x00002499 LBB0_437 + 0x4c, 0x89, 0xce, //0x00002499 movq %r9, %rsi + 0xc4, 0x81, 0x7a, 0x6f, 0x04, 0x28, //0x0000249c vmovdqu (%r8,%r13), %xmm0 + 0xc5, 0xf9, 0x64, 0x0d, 0x96, 0xdb, 0xff, 0xff, //0x000024a2 vpcmpgtb $-9322(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ + 0xc5, 0xfa, 0x6f, 0x15, 0x9e, 0xdb, 0xff, 0xff, //0x000024aa vmovdqu $-9314(%rip), %xmm2 /* LCPI0_21+0(%rip) */ + 0xc5, 0xe9, 0x64, 0xd0, //0x000024b2 vpcmpgtb %xmm0, %xmm2, %xmm2 + 0xc5, 0xf1, 0xdb, 0xca, //0x000024b6 vpand %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0x74, 0x15, 0x9e, 0xdb, 0xff, 0xff, //0x000024ba vpcmpeqb $-9314(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x1d, 0xa6, 0xdb, 0xff, 0xff, //0x000024c2 vpcmpeqb $-9306(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xd2, //0x000024ca vpor %xmm2, %xmm3, %xmm2 + 0xc5, 0xf9, 0xdb, 0x1d, 0x4a, 0xdb, 0xff, 0xff, //0x000024ce vpand $-9398(%rip), %xmm0, %xmm3 /* LCPI0_12+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0xa2, 0xdb, 0xff, 0xff, //0x000024d6 vpcmpeqb $-9310(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ + 0xc5, 0xe1, 0x74, 0x1d, 0xaa, 0xdb, 0xff, 0xff, //0x000024de vpcmpeqb $-9302(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xe0, //0x000024e6 vpor %xmm0, %xmm3, %xmm4 + 0xc5, 0xe9, 0xeb, 0xc9, //0x000024ea vpor %xmm1, %xmm2, %xmm1 + 0xc5, 0xd9, 0xeb, 0xc9, //0x000024ee vpor %xmm1, %xmm4, %xmm1 + 0xc5, 0x79, 0xd7, 0xc8, //0x000024f2 vpmovmskb %xmm0, %r9d + 0xc5, 0xf9, 0xd7, 0xfb, //0x000024f6 vpmovmskb %xmm3, %edi + 0xc5, 0xf9, 0xd7, 0xd2, //0x000024fa vpmovmskb %xmm2, %edx + 0xc5, 0xf9, 0xd7, 0xc9, //0x000024fe vpmovmskb %xmm1, %ecx + 0xf7, 0xd1, //0x00002502 notl %ecx + 0x0f, 0xbc, 0xc9, //0x00002504 bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x00002507 cmpl $16, %ecx + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x0000250a je LBB0_439 + 0xbb, 0xff, 0xff, 0xff, 0xff, //0x00002510 movl $-1, %ebx + 0xd3, 0xe3, //0x00002515 shll %cl, %ebx + 0xf7, 0xd3, //0x00002517 notl %ebx + 0x41, 0x21, 0xd9, //0x00002519 andl %ebx, %r9d + 0x21, 0xdf, //0x0000251c andl %ebx, %edi + 0x21, 0xd3, //0x0000251e andl %edx, %ebx + 0x89, 0xda, //0x00002520 movl %ebx, %edx + //0x00002522 LBB0_439 + 0x41, 0x8d, 0x59, 0xff, //0x00002522 leal $-1(%r9), %ebx + 0x44, 0x21, 0xcb, //0x00002526 andl %r9d, %ebx + 0x0f, 0x85, 0x5a, 0x07, 0x00, 0x00, //0x00002529 jne LBB0_523 + 0x8d, 0x5f, 0xff, //0x0000252f leal $-1(%rdi), %ebx + 0x21, 0xfb, //0x00002532 andl %edi, %ebx + 0x0f, 0x85, 0x4f, 0x07, 0x00, 0x00, //0x00002534 jne LBB0_523 + 0x8d, 0x5a, 0xff, //0x0000253a leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x0000253d andl %edx, %ebx + 0x0f, 0x85, 0x44, 0x07, 0x00, 0x00, //0x0000253f jne LBB0_523 + 0x45, 0x85, 0xc9, //0x00002545 testl %r9d, %r9d + 0x0f, 0x84, 0x43, 0x00, 0x00, 0x00, //0x00002548 je LBB0_446 + 0x45, 0x0f, 0xbc, 0xc9, //0x0000254e bsfl %r9d, %r9d + 0x48, 0x83, 0xfe, 0xff, //0x00002552 cmpq $-1, %rsi + 0x0f, 0x85, 0xf4, 0x07, 0x00, 0x00, //0x00002556 jne LBB0_533 + 0x4d, 0x01, 0xd1, //0x0000255c addq %r10, %r9 + 0x4d, 0x01, 0xe9, //0x0000255f addq %r13, %r9 + 0x85, 0xff, //0x00002562 testl %edi, %edi + 0x0f, 0x84, 0x32, 0x00, 0x00, 0x00, //0x00002564 je LBB0_445 + //0x0000256a LBB0_447 + 0x0f, 0xbc, 0xff, //0x0000256a bsfl %edi, %edi + 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000256d cmpq $-1, $40(%rsp) + 0x0f, 0x85, 0xdf, 0x07, 0x00, 0x00, //0x00002573 jne LBB0_534 + 0x4c, 0x01, 0xd7, //0x00002579 addq %r10, %rdi + 0x4c, 0x01, 0xef, //0x0000257c addq %r13, %rdi + 0x48, 0x89, 0x7c, 0x24, 0x28, //0x0000257f movq %rdi, $40(%rsp) + 0x85, 0xd2, //0x00002584 testl %edx, %edx + 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x00002586 jne LBB0_449 + 0xe9, 0x29, 0x00, 0x00, 0x00, //0x0000258c jmp LBB0_451 + //0x00002591 LBB0_446 + 0x49, 0x89, 0xf1, //0x00002591 movq %rsi, %r9 + 0x85, 0xff, //0x00002594 testl %edi, %edi + 0x0f, 0x85, 0xce, 0xff, 0xff, 0xff, //0x00002596 jne LBB0_447 + //0x0000259c LBB0_445 + 0x85, 0xd2, //0x0000259c testl %edx, %edx + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x0000259e je LBB0_451 + //0x000025a4 LBB0_449 + 0x0f, 0xbc, 0xd2, //0x000025a4 bsfl %edx, %edx + 0x49, 0x83, 0xff, 0xff, //0x000025a7 cmpq $-1, %r15 + 0x0f, 0x85, 0xae, 0x07, 0x00, 0x00, //0x000025ab jne LBB0_535 + 0x4c, 0x01, 0xd2, //0x000025b1 addq %r10, %rdx + 0x4c, 0x01, 0xea, //0x000025b4 addq %r13, %rdx + 0x49, 0x89, 0xd7, //0x000025b7 movq %rdx, %r15 + //0x000025ba LBB0_451 + 0x83, 0xf9, 0x10, //0x000025ba cmpl $16, %ecx + 0x0f, 0x85, 0xd5, 0x01, 0x00, 0x00, //0x000025bd jne LBB0_483 + 0x49, 0x83, 0xc3, 0xf0, //0x000025c3 addq $-16, %r11 + 0x49, 0x83, 0xc5, 0x10, //0x000025c7 addq $16, %r13 + 0x49, 0x83, 0xfb, 0x0f, //0x000025cb cmpq $15, %r11 + 0x0f, 0x87, 0xc4, 0xfe, 0xff, 0xff, //0x000025cf ja LBB0_437 + 0x4d, 0x01, 0xe8, //0x000025d5 addq %r13, %r8 + //0x000025d8 LBB0_454 + 0x4d, 0x85, 0xdb, //0x000025d8 testq %r11, %r11 + 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x000025db movq $48(%rsp), %r13 + 0x4c, 0x8b, 0x54, 0x24, 0x28, //0x000025e0 movq $40(%rsp), %r10 + 0x0f, 0x84, 0xd7, 0x01, 0x00, 0x00, //0x000025e5 je LBB0_485 + 0x4b, 0x8d, 0x0c, 0x18, //0x000025eb leaq (%r8,%r11), %rcx + 0x48, 0x89, 0x4c, 0x24, 0x38, //0x000025ef movq %rcx, $56(%rsp) + 0x4c, 0x89, 0xc6, //0x000025f4 movq %r8, %rsi + 0x4c, 0x29, 0xee, //0x000025f7 subq %r13, %rsi + 0x31, 0xc9, //0x000025fa xorl %ecx, %ecx + 0xe9, 0x2c, 0x00, 0x00, 0x00, //0x000025fc jmp LBB0_460 + //0x00002601 LBB0_456 + 0x83, 0xff, 0x65, //0x00002601 cmpl $101, %edi + 0x0f, 0x85, 0xb5, 0x01, 0x00, 0x00, //0x00002604 jne LBB0_484 + //0x0000260a LBB0_457 + 0x49, 0x83, 0xfa, 0xff, //0x0000260a cmpq $-1, %r10 + 0x0f, 0x85, 0x8f, 0x06, 0x00, 0x00, //0x0000260e jne LBB0_525 + 0x4c, 0x8d, 0x14, 0x0e, //0x00002614 leaq (%rsi,%rcx), %r10 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002618 .p2align 4, 0x90 + //0x00002620 LBB0_459 + 0x48, 0x83, 0xc1, 0x01, //0x00002620 addq $1, %rcx + 0x49, 0x39, 0xcb, //0x00002624 cmpq %rcx, %r11 + 0x0f, 0x84, 0xe5, 0x04, 0x00, 0x00, //0x00002627 je LBB0_508 + //0x0000262d LBB0_460 + 0x41, 0x0f, 0xbe, 0x3c, 0x08, //0x0000262d movsbl (%r8,%rcx), %edi + 0x8d, 0x5f, 0xd0, //0x00002632 leal $-48(%rdi), %ebx + 0x83, 0xfb, 0x0a, //0x00002635 cmpl $10, %ebx + 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x00002638 jb LBB0_459 + 0x8d, 0x5f, 0xd5, //0x0000263e leal $-43(%rdi), %ebx + 0x83, 0xfb, 0x1a, //0x00002641 cmpl $26, %ebx + 0x0f, 0x87, 0xb7, 0xff, 0xff, 0xff, //0x00002644 ja LBB0_456 + 0x48, 0x8d, 0x15, 0x8f, 0x1a, 0x00, 0x00, //0x0000264a leaq $6799(%rip), %rdx /* LJTI0_2+0(%rip) */ + 0x48, 0x63, 0x3c, 0x9a, //0x00002651 movslq (%rdx,%rbx,4), %rdi + 0x48, 0x01, 0xd7, //0x00002655 addq %rdx, %rdi + 0xff, 0xe7, //0x00002658 jmpq *%rdi + //0x0000265a LBB0_463 + 0x49, 0x83, 0xff, 0xff, //0x0000265a cmpq $-1, %r15 + 0x0f, 0x85, 0x3f, 0x06, 0x00, 0x00, //0x0000265e jne LBB0_525 + 0x4c, 0x8d, 0x3c, 0x0e, //0x00002664 leaq (%rsi,%rcx), %r15 + 0xe9, 0xb3, 0xff, 0xff, 0xff, //0x00002668 jmp LBB0_459 + //0x0000266d LBB0_465 + 0x49, 0x83, 0xf9, 0xff, //0x0000266d cmpq $-1, %r9 + 0x0f, 0x85, 0x2c, 0x06, 0x00, 0x00, //0x00002671 jne LBB0_525 + 0x4c, 0x8d, 0x0c, 0x0e, //0x00002677 leaq (%rsi,%rcx), %r9 + 0xe9, 0xa0, 0xff, 0xff, 0xff, //0x0000267b jmp LBB0_459 + //0x00002680 LBB0_467 + 0x4c, 0x01, 0xc1, //0x00002680 addq %r8, %rcx + 0x4c, 0x01, 0xe9, //0x00002683 addq %r13, %rcx + 0xc5, 0xf8, 0x77, //0x00002686 vzeroupper + 0x49, 0x89, 0xc8, //0x00002689 movq %rcx, %r8 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000268c movq $-1, %rcx + 0x4d, 0x85, 0xc9, //0x00002693 testq %r9, %r9 + 0x0f, 0x85, 0x36, 0x01, 0x00, 0x00, //0x00002696 jne LBB0_486 + 0xe9, 0xcd, 0x17, 0x00, 0x00, //0x0000269c jmp LBB0_726 + //0x000026a1 LBB0_468 + 0x4d, 0x29, 0xf4, //0x000026a1 subq %r14, %r12 + 0x49, 0x01, 0xd4, //0x000026a4 addq %rdx, %r12 + 0x49, 0x39, 0xfc, //0x000026a7 cmpq %rdi, %r12 + 0x0f, 0x82, 0x22, 0xdf, 0xff, 0xff, //0x000026aa jb LBB0_35 + 0xe9, 0xe8, 0x15, 0x00, 0x00, //0x000026b0 jmp LBB0_698 + //0x000026b5 LBB0_469 + 0x4c, 0x8b, 0x54, 0x24, 0x38, //0x000026b5 movq $56(%rsp), %r10 + 0xe9, 0x32, 0xf0, 0xff, 0xff, //0x000026ba jmp LBB0_282 + //0x000026bf LBB0_470 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x000026bf movl $64, %edx + //0x000026c4 LBB0_471 + 0x4c, 0x8b, 0x1c, 0x24, //0x000026c4 movq (%rsp), %r11 + 0x48, 0x39, 0xca, //0x000026c8 cmpq %rcx, %rdx + 0x0f, 0x82, 0xb5, 0x17, 0x00, 0x00, //0x000026cb jb LBB0_162 + 0xc5, 0x7d, 0x7f, 0xea, //0x000026d1 vmovdqa %ymm13, %ymm2 + 0x48, 0x01, 0xc8, //0x000026d5 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000026d8 addq $1, %rax + //0x000026dc LBB0_473 + 0x48, 0x85, 0xc0, //0x000026dc testq %rax, %rax + 0x0f, 0x88, 0xdc, 0x15, 0x00, 0x00, //0x000026df js LBB0_702 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x000026e5 movq $8(%rsp), %r15 + 0x49, 0x89, 0x07, //0x000026ea movq %rax, (%r15) + 0x4d, 0x85, 0xc9, //0x000026ed testq %r9, %r9 + 0xc5, 0x7d, 0x6f, 0xea, //0x000026f0 vmovdqa %ymm2, %ymm13 + 0x0f, 0x8f, 0xa6, 0xdc, 0xff, 0xff, //0x000026f4 jg LBB0_3 + 0xe9, 0xdb, 0x15, 0x00, 0x00, //0x000026fa jmp LBB0_475 + //0x000026ff LBB0_108 + 0x4d, 0x85, 0xff, //0x000026ff testq %r15, %r15 + 0x0f, 0x85, 0x37, 0x07, 0x00, 0x00, //0x00002702 jne LBB0_545 + 0x49, 0x01, 0xf1, //0x00002708 addq %rsi, %r9 + 0x49, 0x29, 0xf2, //0x0000270b subq %rsi, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000270e movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00002713 movq (%rsp), %r11 + //0x00002717 LBB0_110 + 0x4d, 0x85, 0xd2, //0x00002717 testq %r10, %r10 + 0x0f, 0x8f, 0x9f, 0x07, 0x00, 0x00, //0x0000271a jg LBB0_549 + 0xe9, 0xf0, 0x15, 0x00, 0x00, //0x00002720 jmp LBB0_728 + //0x00002725 LBB0_476 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002725 vmovdqa %ymm13, %ymm0 + 0x0f, 0xbc, 0xcb, //0x00002729 bsfl %ebx, %ecx + //0x0000272c LBB0_477 + 0x49, 0xf7, 0xd2, //0x0000272c notq %r10 + 0x49, 0x29, 0xca, //0x0000272f subq %rcx, %r10 + 0xe9, 0xde, 0xf0, 0xff, 0xff, //0x00002732 jmp LBB0_293 + //0x00002737 LBB0_478 + 0x66, 0x0f, 0xbc, 0xc3, //0x00002737 bsfw %bx, %ax + 0x0f, 0xb7, 0xf8, //0x0000273b movzwl %ax, %edi + 0x48, 0x89, 0xf8, //0x0000273e movq %rdi, %rax + 0x4c, 0x29, 0xc8, //0x00002741 subq %r9, %rax + 0x49, 0x89, 0x07, //0x00002744 movq %rax, (%r15) + 0x48, 0x85, 0xc0, //0x00002747 testq %rax, %rax + 0x48, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000274a movabsq $4294977024, %rbx + 0x0f, 0x8e, 0x90, 0xdc, 0xff, 0xff, //0x00002754 jle LBB0_2 + 0x48, 0x01, 0xf9, //0x0000275a addq %rdi, %rcx + 0x48, 0x01, 0xfe, //0x0000275d addq %rdi, %rsi + 0x48, 0x01, 0xfa, //0x00002760 addq %rdi, %rdx + //0x00002763 LBB0_480 + 0x0f, 0xb6, 0x02, //0x00002763 movzbl (%rdx), %eax + 0x48, 0x83, 0xf8, 0x20, //0x00002766 cmpq $32, %rax + 0x0f, 0x87, 0x7a, 0xdc, 0xff, 0xff, //0x0000276a ja LBB0_2 + 0x48, 0x0f, 0xa3, 0xc3, //0x00002770 btq %rax, %rbx + 0x0f, 0x83, 0x70, 0xdc, 0xff, 0xff, //0x00002774 jae LBB0_2 + 0x49, 0x89, 0x37, //0x0000277a movq %rsi, (%r15) + 0x48, 0x83, 0xc1, 0xff, //0x0000277d addq $-1, %rcx + 0x48, 0x83, 0xc6, 0xff, //0x00002781 addq $-1, %rsi + 0x48, 0x83, 0xc2, 0xff, //0x00002785 addq $-1, %rdx + 0x48, 0x83, 0xf9, 0x01, //0x00002789 cmpq $1, %rcx + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x0000278d jg LBB0_480 + 0xe9, 0x52, 0xdc, 0xff, 0xff, //0x00002793 jmp LBB0_2 + //0x00002798 LBB0_483 + 0x89, 0xc9, //0x00002798 movl %ecx, %ecx + 0x49, 0x01, 0xc8, //0x0000279a addq %rcx, %r8 + 0x4d, 0x01, 0xe8, //0x0000279d addq %r13, %r8 + 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x000027a0 movq $48(%rsp), %r13 + 0x4c, 0x8b, 0x54, 0x24, 0x28, //0x000027a5 movq $40(%rsp), %r10 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000027aa movq $-1, %rcx + 0x4d, 0x85, 0xc9, //0x000027b1 testq %r9, %r9 + 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x000027b4 jne LBB0_486 + 0xe9, 0xaf, 0x16, 0x00, 0x00, //0x000027ba jmp LBB0_726 + //0x000027bf LBB0_484 + 0x49, 0x01, 0xc8, //0x000027bf addq %rcx, %r8 + //0x000027c2 LBB0_485 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000027c2 movq $-1, %rcx + 0x4d, 0x85, 0xc9, //0x000027c9 testq %r9, %r9 + 0x0f, 0x84, 0x9c, 0x16, 0x00, 0x00, //0x000027cc je LBB0_726 + //0x000027d2 LBB0_486 + 0x4d, 0x85, 0xff, //0x000027d2 testq %r15, %r15 + 0x0f, 0x84, 0x93, 0x16, 0x00, 0x00, //0x000027d5 je LBB0_726 + 0x4d, 0x85, 0xd2, //0x000027db testq %r10, %r10 + 0x0f, 0x84, 0x8a, 0x16, 0x00, 0x00, //0x000027de je LBB0_726 + 0x4d, 0x29, 0xe8, //0x000027e4 subq %r13, %r8 + 0x49, 0x8d, 0x48, 0xff, //0x000027e7 leaq $-1(%r8), %rcx + 0x49, 0x39, 0xc9, //0x000027eb cmpq %rcx, %r9 + 0x0f, 0x84, 0x8d, 0x00, 0x00, 0x00, //0x000027ee je LBB0_494 + 0x49, 0x39, 0xcf, //0x000027f4 cmpq %rcx, %r15 + 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x000027f7 je LBB0_494 + 0x49, 0x39, 0xca, //0x000027fd cmpq %rcx, %r10 + 0x0f, 0x84, 0x7b, 0x00, 0x00, 0x00, //0x00002800 je LBB0_494 + 0x4d, 0x85, 0xff, //0x00002806 testq %r15, %r15 + 0xc5, 0xfe, 0x6f, 0x2d, 0xaf, 0xd8, 0xff, 0xff, //0x00002809 vmovdqu $-10065(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0xc7, 0xd8, 0xff, 0xff, //0x00002811 vmovdqu $-10041(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0xdf, 0xd8, 0xff, 0xff, //0x00002819 vmovdqu $-10017(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0xf7, 0xd8, 0xff, 0xff, //0x00002821 vmovdqu $-9993(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002829 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0xca, 0xd9, 0xff, 0xff, //0x0000282e vmovdqu $-9782(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x05, 0xe2, 0xd9, 0xff, 0xff, //0x00002836 vmovdqu $-9758(%rip), %ymm0 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0xfa, 0xd9, 0xff, 0xff, //0x0000283e vmovdqu $-9734(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x92, 0xd9, 0xff, 0xff, //0x00002846 vmovdqu $-9838(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x4a, 0xda, 0xff, 0xff, //0x0000284e vmovdqu $-9654(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x62, 0xd9, 0xff, 0xff, //0x00002856 vmovdqu $-9886(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0x0f, 0x8e, 0x8f, 0x00, 0x00, 0x00, //0x0000285e jle LBB0_497 + 0x49, 0x8d, 0x4f, 0xff, //0x00002864 leaq $-1(%r15), %rcx + 0x49, 0x39, 0xca, //0x00002868 cmpq %rcx, %r10 + 0x0f, 0x84, 0x82, 0x00, 0x00, 0x00, //0x0000286b je LBB0_497 + 0x49, 0xf7, 0xd7, //0x00002871 notq %r15 + 0x4d, 0x89, 0xf8, //0x00002874 movq %r15, %r8 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002877 movq $8(%rsp), %r15 + 0xe9, 0x5d, 0x00, 0x00, 0x00, //0x0000287c jmp LBB0_496 + //0x00002881 LBB0_494 + 0x49, 0xf7, 0xd8, //0x00002881 negq %r8 + //0x00002884 LBB0_495 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002884 movq $8(%rsp), %r15 + 0xc5, 0xfe, 0x6f, 0x2d, 0x2f, 0xd8, 0xff, 0xff, //0x00002889 vmovdqu $-10193(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x47, 0xd8, 0xff, 0xff, //0x00002891 vmovdqu $-10169(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x5f, 0xd8, 0xff, 0xff, //0x00002899 vmovdqu $-10145(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x77, 0xd8, 0xff, 0xff, //0x000028a1 vmovdqu $-10121(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000028a9 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0x4a, 0xd9, 0xff, 0xff, //0x000028ae vmovdqu $-9910(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x05, 0x62, 0xd9, 0xff, 0xff, //0x000028b6 vmovdqu $-9886(%rip), %ymm0 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0x7a, 0xd9, 0xff, 0xff, //0x000028be vmovdqu $-9862(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x12, 0xd9, 0xff, 0xff, //0x000028c6 vmovdqu $-9966(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0xca, 0xd9, 0xff, 0xff, //0x000028ce vmovdqu $-9782(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xe2, 0xd8, 0xff, 0xff, //0x000028d6 vmovdqu $-10014(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + //0x000028de LBB0_496 + 0xc5, 0x7e, 0x6f, 0x1d, 0x5a, 0xd8, 0xff, 0xff, //0x000028de vmovdqu $-10150(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x72, 0xd8, 0xff, 0xff, //0x000028e6 vmovdqu $-10126(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + 0xe9, 0x4b, 0x02, 0x00, 0x00, //0x000028ee jmp LBB0_512 + //0x000028f3 LBB0_497 + 0x4c, 0x89, 0xc9, //0x000028f3 movq %r9, %rcx + 0x4c, 0x09, 0xd1, //0x000028f6 orq %r10, %rcx + 0x0f, 0x99, 0xc1, //0x000028f9 setns %cl + 0xc5, 0x7e, 0x6f, 0x1d, 0x3c, 0xd8, 0xff, 0xff, //0x000028fc vmovdqu $-10180(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x54, 0xd8, 0xff, 0xff, //0x00002904 vmovdqu $-10156(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + 0x0f, 0x88, 0xd2, 0x00, 0x00, 0x00, //0x0000290c js LBB0_500 + 0x4d, 0x39, 0xd1, //0x00002912 cmpq %r10, %r9 + 0x0f, 0x8c, 0xc9, 0x00, 0x00, 0x00, //0x00002915 jl LBB0_500 + 0x49, 0xf7, 0xd1, //0x0000291b notq %r9 + 0x4d, 0x89, 0xc8, //0x0000291e movq %r9, %r8 + 0xe9, 0x13, 0x02, 0x00, 0x00, //0x00002921 jmp LBB0_511 + //0x00002926 LBB0_140 + 0x4d, 0x85, 0xff, //0x00002926 testq %r15, %r15 + 0x0f, 0x85, 0x6a, 0x07, 0x00, 0x00, //0x00002929 jne LBB0_570 + 0x49, 0x01, 0xf1, //0x0000292f addq %rsi, %r9 + 0x49, 0x29, 0xf2, //0x00002932 subq %rsi, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002935 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x0000293a movq (%rsp), %r11 + //0x0000293e LBB0_142 + 0x4d, 0x85, 0xd2, //0x0000293e testq %r10, %r10 + 0x0f, 0x8f, 0xc4, 0x07, 0x00, 0x00, //0x00002941 jg LBB0_574 + 0xe9, 0xc9, 0x13, 0x00, 0x00, //0x00002947 jmp LBB0_728 + //0x0000294c LBB0_54 + 0x4c, 0x01, 0xf0, //0x0000294c addq %r14, %rax + 0x49, 0x83, 0xfb, 0x20, //0x0000294f cmpq $32, %r11 + 0x0f, 0x82, 0x45, 0x06, 0x00, 0x00, //0x00002953 jb LBB0_557 + //0x00002959 LBB0_55 + 0xc5, 0xfe, 0x6f, 0x00, //0x00002959 vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x0000295d vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00002961 vpmovmskb %ymm1, %edx + 0xc5, 0xfd, 0x74, 0xc7, //0x00002965 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00002969 vpmovmskb %ymm0, %esi + 0x85, 0xf6, //0x0000296d testl %esi, %esi + 0x0f, 0x85, 0x82, 0x05, 0x00, 0x00, //0x0000296f jne LBB0_552 + 0x4d, 0x85, 0xd2, //0x00002975 testq %r10, %r10 + 0x0f, 0x85, 0xa7, 0x05, 0x00, 0x00, //0x00002978 jne LBB0_554 + 0x45, 0x31, 0xd2, //0x0000297e xorl %r10d, %r10d + 0x48, 0x85, 0xd2, //0x00002981 testq %rdx, %rdx + 0x0f, 0x84, 0x0c, 0x06, 0x00, 0x00, //0x00002984 je LBB0_556 + //0x0000298a LBB0_58 + 0x48, 0x0f, 0xbc, 0xca, //0x0000298a bsfq %rdx, %rcx + 0x4c, 0x29, 0xf0, //0x0000298e subq %r14, %rax + 0x48, 0x01, 0xc8, //0x00002991 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002994 addq $1, %rax + 0xe9, 0x0e, 0xde, 0xff, 0xff, //0x00002998 jmp LBB0_63 + //0x0000299d LBB0_152 + 0x4c, 0x01, 0xf0, //0x0000299d addq %r14, %rax + 0x49, 0x83, 0xfd, 0x20, //0x000029a0 cmpq $32, %r13 + 0x0f, 0x82, 0xaa, 0x08, 0x00, 0x00, //0x000029a4 jb LBB0_587 + //0x000029aa LBB0_153 + 0xc5, 0xfe, 0x6f, 0x00, //0x000029aa vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x000029ae vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd1, //0x000029b2 vpmovmskb %ymm1, %r10d + 0xc5, 0xfd, 0x74, 0xcf, //0x000029b6 vpcmpeqb %ymm7, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x000029ba vpmovmskb %ymm1, %edx + 0x85, 0xd2, //0x000029be testl %edx, %edx + 0x0f, 0x85, 0x9a, 0x07, 0x00, 0x00, //0x000029c0 jne LBB0_577 + 0x4d, 0x85, 0xdb, //0x000029c6 testq %r11, %r11 + 0x0f, 0x85, 0xbf, 0x07, 0x00, 0x00, //0x000029c9 jne LBB0_579 + 0x45, 0x31, 0xdb, //0x000029cf xorl %r11d, %r11d + 0x4d, 0x85, 0xd2, //0x000029d2 testq %r10, %r10 + 0x0f, 0x84, 0x25, 0x08, 0x00, 0x00, //0x000029d5 je LBB0_581 + //0x000029db LBB0_156 + 0x49, 0x0f, 0xbc, 0xd2, //0x000029db bsfq %r10, %rdx + 0xe9, 0x21, 0x08, 0x00, 0x00, //0x000029df jmp LBB0_582 + //0x000029e4 LBB0_500 + 0x49, 0x8d, 0x52, 0xff, //0x000029e4 leaq $-1(%r10), %rdx + 0x49, 0x39, 0xd1, //0x000029e8 cmpq %rdx, %r9 + 0x49, 0xf7, 0xd2, //0x000029eb notq %r10 + 0x4d, 0x0f, 0x45, 0xd0, //0x000029ee cmovneq %r8, %r10 + 0x84, 0xc9, //0x000029f2 testb %cl, %cl + 0x4d, 0x0f, 0x45, 0xc2, //0x000029f4 cmovneq %r10, %r8 + 0xe9, 0x3c, 0x01, 0x00, 0x00, //0x000029f8 jmp LBB0_511 + //0x000029fd LBB0_501 + 0xc5, 0x7d, 0x7f, 0xe8, //0x000029fd vmovdqa %ymm13, %ymm0 + 0x0f, 0xbc, 0xcf, //0x00002a01 bsfl %edi, %ecx + //0x00002a04 LBB0_502 + 0x4c, 0x8b, 0x6c, 0x24, 0x10, //0x00002a04 movq $16(%rsp), %r13 + 0x4d, 0x01, 0xee, //0x00002a09 addq %r13, %r14 + 0x4d, 0x29, 0xd6, //0x00002a0c subq %r10, %r14 + 0x49, 0x29, 0xce, //0x00002a0f subq %rcx, %r14 + 0x4d, 0x29, 0xfe, //0x00002a12 subq %r15, %r14 + 0x49, 0x83, 0xc6, 0xfe, //0x00002a15 addq $-2, %r14 + 0x4d, 0x89, 0xf2, //0x00002a19 movq %r14, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002a1c movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00002a21 movq (%rsp), %r11 + 0xe9, 0xf0, 0xed, 0xff, 0xff, //0x00002a25 jmp LBB0_294 + //0x00002a2a LBB0_503 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002a2a vmovdqa %ymm13, %ymm0 + 0x4c, 0x8b, 0x6c, 0x24, 0x10, //0x00002a2e movq $16(%rsp), %r13 + 0x4d, 0x01, 0xee, //0x00002a33 addq %r13, %r14 + 0x4d, 0x29, 0xd6, //0x00002a36 subq %r10, %r14 + 0x49, 0x29, 0xce, //0x00002a39 subq %rcx, %r14 + 0x49, 0x83, 0xc6, 0xfe, //0x00002a3c addq $-2, %r14 + 0x4d, 0x89, 0xf2, //0x00002a40 movq %r14, %r10 + 0xe9, 0xd2, 0xed, 0xff, 0xff, //0x00002a43 jmp LBB0_294 + //0x00002a48 LBB0_504 + 0x4d, 0x01, 0xf4, //0x00002a48 addq %r14, %r12 + 0x48, 0x85, 0xf6, //0x00002a4b testq %rsi, %rsi + 0x0f, 0x85, 0x14, 0xdb, 0xff, 0xff, //0x00002a4e jne LBB0_28 + 0xe9, 0x49, 0xdb, 0xff, 0xff, //0x00002a54 jmp LBB0_33 + //0x00002a59 LBB0_89 + 0x4c, 0x01, 0xf0, //0x00002a59 addq %r14, %rax + 0x49, 0x83, 0xfb, 0x20, //0x00002a5c cmpq $32, %r11 + 0x0f, 0x82, 0x6b, 0x09, 0x00, 0x00, //0x00002a60 jb LBB0_602 + //0x00002a66 LBB0_90 + 0xc5, 0xfe, 0x6f, 0x00, //0x00002a66 vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00002a6a vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00002a6e vpmovmskb %ymm1, %edx + 0xc5, 0xfd, 0x74, 0xc7, //0x00002a72 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00002a76 vpmovmskb %ymm0, %esi + 0x85, 0xf6, //0x00002a7a testl %esi, %esi + 0x0f, 0x85, 0xa8, 0x08, 0x00, 0x00, //0x00002a7c jne LBB0_597 + 0x4d, 0x85, 0xd2, //0x00002a82 testq %r10, %r10 + 0x0f, 0x85, 0xcd, 0x08, 0x00, 0x00, //0x00002a85 jne LBB0_599 + 0x45, 0x31, 0xd2, //0x00002a8b xorl %r10d, %r10d + 0x48, 0x85, 0xd2, //0x00002a8e testq %rdx, %rdx + 0x0f, 0x84, 0x32, 0x09, 0x00, 0x00, //0x00002a91 je LBB0_601 + //0x00002a97 LBB0_93 + 0x48, 0x0f, 0xbc, 0xca, //0x00002a97 bsfq %rdx, %rcx + 0x4c, 0x29, 0xf0, //0x00002a9b subq %r14, %rax + 0x48, 0x01, 0xc8, //0x00002a9e addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002aa1 addq $1, %rax + 0xe9, 0x21, 0xdf, 0xff, 0xff, //0x00002aa5 jmp LBB0_98 + //0x00002aaa LBB0_172 + 0x4c, 0x01, 0xf0, //0x00002aaa addq %r14, %rax + 0x49, 0x83, 0xfd, 0x20, //0x00002aad cmpq $32, %r13 + 0x0f, 0x82, 0xe4, 0x02, 0x00, 0x00, //0x00002ab1 jb LBB0_538 + //0x00002ab7 LBB0_173 + 0xc5, 0xfe, 0x6f, 0x00, //0x00002ab7 vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00002abb vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd1, //0x00002abf vpmovmskb %ymm1, %r10d + 0xc5, 0xfd, 0x74, 0xcf, //0x00002ac3 vpcmpeqb %ymm7, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00002ac7 vpmovmskb %ymm1, %edx + 0x85, 0xd2, //0x00002acb testl %edx, %edx + 0x0f, 0x85, 0x08, 0x0a, 0x00, 0x00, //0x00002acd jne LBB0_615 + 0x4d, 0x85, 0xdb, //0x00002ad3 testq %r11, %r11 + 0x0f, 0x85, 0x2d, 0x0a, 0x00, 0x00, //0x00002ad6 jne LBB0_617 + 0x45, 0x31, 0xdb, //0x00002adc xorl %r11d, %r11d + 0x4d, 0x85, 0xd2, //0x00002adf testq %r10, %r10 + 0x0f, 0x84, 0x93, 0x0a, 0x00, 0x00, //0x00002ae2 je LBB0_619 + //0x00002ae8 LBB0_176 + 0x49, 0x0f, 0xbc, 0xd2, //0x00002ae8 bsfq %r10, %rdx + 0xe9, 0x8f, 0x0a, 0x00, 0x00, //0x00002aec jmp LBB0_620 + //0x00002af1 LBB0_505 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002af1 vmovdqa %ymm13, %ymm0 + 0x89, 0xf9, //0x00002af5 movl %edi, %ecx + 0xe9, 0x30, 0xfc, 0xff, 0xff, //0x00002af7 jmp LBB0_477 + //0x00002afc LBB0_506 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002afc vmovdqa %ymm13, %ymm0 + 0x89, 0xf1, //0x00002b00 movl %esi, %ecx + 0xe9, 0x25, 0xfc, 0xff, 0xff, //0x00002b02 jmp LBB0_477 + //0x00002b07 LBB0_507 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002b07 vmovdqa %ymm13, %ymm0 + 0x89, 0xd1, //0x00002b0b movl %edx, %ecx + 0xe9, 0x1a, 0xfc, 0xff, 0xff, //0x00002b0d jmp LBB0_477 + //0x00002b12 LBB0_508 + 0x4c, 0x8b, 0x44, 0x24, 0x38, //0x00002b12 movq $56(%rsp), %r8 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002b17 movq $-1, %rcx + 0x4d, 0x85, 0xc9, //0x00002b1e testq %r9, %r9 + 0x0f, 0x85, 0xab, 0xfc, 0xff, 0xff, //0x00002b21 jne LBB0_486 + 0xe9, 0x42, 0x13, 0x00, 0x00, //0x00002b27 jmp LBB0_726 + //0x00002b2c LBB0_509 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002b2c vmovdqa %ymm13, %ymm0 + 0x0f, 0xbc, 0xcb, //0x00002b30 bsfl %ebx, %ecx + //0x00002b33 LBB0_510 + 0x49, 0xf7, 0xd0, //0x00002b33 notq %r8 + 0x49, 0x29, 0xc8, //0x00002b36 subq %rcx, %r8 + //0x00002b39 LBB0_511 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002b39 movq $8(%rsp), %r15 + //0x00002b3e LBB0_512 + 0x4d, 0x85, 0xc0, //0x00002b3e testq %r8, %r8 + 0x0f, 0x88, 0x24, 0x13, 0x00, 0x00, //0x00002b41 js LBB0_725 + 0x49, 0x8b, 0x0f, //0x00002b47 movq (%r15), %rcx + 0xc5, 0x7d, 0x6f, 0xe8, //0x00002b4a vmovdqa %ymm0, %ymm13 + //0x00002b4e LBB0_514 + 0x4c, 0x01, 0xc1, //0x00002b4e addq %r8, %rcx + 0x49, 0x89, 0x0f, //0x00002b51 movq %rcx, (%r15) + 0x48, 0x85, 0xc0, //0x00002b54 testq %rax, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x00002b57 movq (%rsp), %r11 + 0x0f, 0x8f, 0x3f, 0xd8, 0xff, 0xff, //0x00002b5b jg LBB0_3 + 0xe9, 0xc9, 0x12, 0x00, 0x00, //0x00002b61 jmp LBB0_394 + //0x00002b66 LBB0_515 + 0x66, 0x0f, 0xbc, 0xc9, //0x00002b66 bsfw %cx, %cx + 0x44, 0x0f, 0xb7, 0xc1, //0x00002b6a movzwl %cx, %r8d + 0x4c, 0x89, 0xc1, //0x00002b6e movq %r8, %rcx + 0x4c, 0x29, 0xc9, //0x00002b71 subq %r9, %rcx + 0x49, 0x89, 0x0f, //0x00002b74 movq %rcx, (%r15) + 0x48, 0x85, 0xc9, //0x00002b77 testq %rcx, %rcx + 0x48, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002b7a movabsq $4294977024, %rsi + 0x0f, 0x8e, 0x36, 0xf6, 0xff, 0xff, //0x00002b84 jle LBB0_393 + 0x4c, 0x01, 0xc7, //0x00002b8a addq %r8, %rdi + 0x4c, 0x01, 0xc2, //0x00002b8d addq %r8, %rdx + 0x4c, 0x01, 0xc3, //0x00002b90 addq %r8, %rbx + //0x00002b93 LBB0_517 + 0x0f, 0xb6, 0x0b, //0x00002b93 movzbl (%rbx), %ecx + 0x48, 0x83, 0xf9, 0x20, //0x00002b96 cmpq $32, %rcx + 0x0f, 0x87, 0x20, 0xf6, 0xff, 0xff, //0x00002b9a ja LBB0_393 + 0x48, 0x0f, 0xa3, 0xce, //0x00002ba0 btq %rcx, %rsi + 0x0f, 0x83, 0x16, 0xf6, 0xff, 0xff, //0x00002ba4 jae LBB0_393 + 0x49, 0x89, 0x17, //0x00002baa movq %rdx, (%r15) + 0x48, 0x83, 0xc7, 0xff, //0x00002bad addq $-1, %rdi + 0x48, 0x83, 0xc2, 0xff, //0x00002bb1 addq $-1, %rdx + 0x48, 0x83, 0xc3, 0xff, //0x00002bb5 addq $-1, %rbx + 0x48, 0x83, 0xff, 0x01, //0x00002bb9 cmpq $1, %rdi + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x00002bbd jg LBB0_517 + 0xe9, 0xf8, 0xf5, 0xff, 0xff, //0x00002bc3 jmp LBB0_393 + //0x00002bc8 LBB0_520 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002bc8 vmovdqa %ymm13, %ymm0 + 0x89, 0xf9, //0x00002bcc movl %edi, %ecx + 0xe9, 0x31, 0xfe, 0xff, 0xff, //0x00002bce jmp LBB0_502 + //0x00002bd3 LBB0_521 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002bd3 vmovdqa %ymm13, %ymm0 + 0x89, 0xf1, //0x00002bd7 movl %esi, %ecx + 0xe9, 0x26, 0xfe, 0xff, 0xff, //0x00002bd9 jmp LBB0_502 + //0x00002bde LBB0_522 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002bde vmovdqa %ymm13, %ymm0 + 0x89, 0xd1, //0x00002be2 movl %edx, %ecx + 0xe9, 0x1b, 0xfe, 0xff, 0xff, //0x00002be4 jmp LBB0_502 + //0x00002be9 LBB0_247 + 0x4c, 0x01, 0xf0, //0x00002be9 addq %r14, %rax + 0x49, 0x83, 0xfb, 0x20, //0x00002bec cmpq $32, %r11 + 0x0f, 0x82, 0x08, 0x02, 0x00, 0x00, //0x00002bf0 jb LBB0_542 + //0x00002bf6 LBB0_248 + 0xc5, 0xfe, 0x6f, 0x00, //0x00002bf6 vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00002bfa vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00002bfe vpmovmskb %ymm1, %edx + 0xc5, 0xfd, 0x74, 0xc7, //0x00002c02 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00002c06 vpmovmskb %ymm0, %esi + 0x85, 0xf6, //0x00002c0a testl %esi, %esi + 0x0f, 0x85, 0xe1, 0x0c, 0x00, 0x00, //0x00002c0c jne LBB0_653 + 0x4d, 0x85, 0xd2, //0x00002c12 testq %r10, %r10 + 0x0f, 0x85, 0x06, 0x0d, 0x00, 0x00, //0x00002c15 jne LBB0_655 + 0x45, 0x31, 0xd2, //0x00002c1b xorl %r10d, %r10d + 0xc5, 0x7d, 0x7f, 0xea, //0x00002c1e vmovdqa %ymm13, %ymm2 + 0x48, 0x85, 0xd2, //0x00002c22 testq %rdx, %rdx + 0x0f, 0x84, 0x6b, 0x0d, 0x00, 0x00, //0x00002c25 je LBB0_657 + //0x00002c2b LBB0_251 + 0x48, 0x0f, 0xbc, 0xca, //0x00002c2b bsfq %rdx, %rcx + 0x4c, 0x29, 0xf0, //0x00002c2f subq %r14, %rax + 0x48, 0x01, 0xc8, //0x00002c32 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002c35 addq $1, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x00002c39 movq (%rsp), %r11 + 0xe9, 0x9a, 0xfa, 0xff, 0xff, //0x00002c3d jmp LBB0_473 + //0x00002c42 LBB0_405 + 0x4c, 0x01, 0xf0, //0x00002c42 addq %r14, %rax + 0x49, 0x83, 0xfd, 0x20, //0x00002c45 cmpq $32, %r13 + 0x0f, 0x82, 0xd9, 0x01, 0x00, 0x00, //0x00002c49 jb LBB0_544 + //0x00002c4f LBB0_406 + 0xc5, 0xfe, 0x6f, 0x00, //0x00002c4f vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00002c53 vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd1, //0x00002c57 vpmovmskb %ymm1, %r10d + 0xc5, 0xfd, 0x74, 0xcf, //0x00002c5b vpcmpeqb %ymm7, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00002c5f vpmovmskb %ymm1, %edx + 0x85, 0xd2, //0x00002c63 testl %edx, %edx + 0x0f, 0x85, 0xfb, 0x0d, 0x00, 0x00, //0x00002c65 jne LBB0_671 + 0x4d, 0x85, 0xdb, //0x00002c6b testq %r11, %r11 + 0x0f, 0x85, 0x20, 0x0e, 0x00, 0x00, //0x00002c6e jne LBB0_673 + 0x45, 0x31, 0xdb, //0x00002c74 xorl %r11d, %r11d + 0x4d, 0x85, 0xd2, //0x00002c77 testq %r10, %r10 + 0x0f, 0x84, 0x86, 0x0e, 0x00, 0x00, //0x00002c7a je LBB0_675 + //0x00002c80 LBB0_409 + 0x49, 0x0f, 0xbc, 0xd2, //0x00002c80 bsfq %r10, %rdx + 0xe9, 0x82, 0x0e, 0x00, 0x00, //0x00002c84 jmp LBB0_676 + //0x00002c89 LBB0_523 + 0x0f, 0xbc, 0xcb, //0x00002c89 bsfl %ebx, %ecx + //0x00002c8c LBB0_524 + 0x49, 0x01, 0xc6, //0x00002c8c addq %rax, %r14 + 0x4d, 0x29, 0xc6, //0x00002c8f subq %r8, %r14 + 0x49, 0x29, 0xce, //0x00002c92 subq %rcx, %r14 + 0x49, 0xf7, 0xd5, //0x00002c95 notq %r13 + 0x4d, 0x01, 0xf5, //0x00002c98 addq %r14, %r13 + 0x4d, 0x89, 0xe8, //0x00002c9b movq %r13, %r8 + 0xe9, 0xe1, 0xfb, 0xff, 0xff, //0x00002c9e jmp LBB0_495 + //0x00002ca3 LBB0_525 + 0x49, 0x01, 0xc6, //0x00002ca3 addq %rax, %r14 + 0x4d, 0x29, 0xc6, //0x00002ca6 subq %r8, %r14 + 0x48, 0xf7, 0xd1, //0x00002ca9 notq %rcx + 0x4c, 0x01, 0xf1, //0x00002cac addq %r14, %rcx + 0x49, 0x89, 0xc8, //0x00002caf movq %rcx, %r8 + 0xe9, 0xcd, 0xfb, 0xff, 0xff, //0x00002cb2 jmp LBB0_495 + //0x00002cb7 LBB0_526 + 0x4f, 0x8d, 0x04, 0x2e, //0x00002cb7 leaq (%r14,%r13), %r8 + 0x48, 0x83, 0xff, 0x10, //0x00002cbb cmpq $16, %rdi + 0x0f, 0x83, 0x8d, 0xde, 0xff, 0xff, //0x00002cbf jae LBB0_116 + 0xe9, 0xf1, 0xde, 0xff, 0xff, //0x00002cc5 jmp LBB0_119 + //0x00002cca LBB0_527 + 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x00002cca movq $-1, $40(%rsp) + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00002cd3 movq $-1, %r13 + 0x48, 0xc7, 0x44, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff, //0x00002cda movq $-1, $48(%rsp) + 0x4d, 0x89, 0xc2, //0x00002ce3 movq %r8, %r10 + 0x49, 0x83, 0xf9, 0x10, //0x00002ce6 cmpq $16, %r9 + 0x0f, 0x83, 0xf2, 0xe4, 0xff, 0xff, //0x00002cea jae LBB0_203 + 0xe9, 0x7c, 0xe6, 0xff, 0xff, //0x00002cf0 jmp LBB0_221 + //0x00002cf5 LBB0_528 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002cf5 vmovdqa %ymm13, %ymm0 + 0x89, 0xf9, //0x00002cf9 movl %edi, %ecx + 0xe9, 0x33, 0xfe, 0xff, 0xff, //0x00002cfb jmp LBB0_510 + //0x00002d00 LBB0_529 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002d00 vmovdqa %ymm13, %ymm0 + 0x89, 0xf1, //0x00002d04 movl %esi, %ecx + 0xe9, 0x28, 0xfe, 0xff, 0xff, //0x00002d06 jmp LBB0_510 + //0x00002d0b LBB0_530 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002d0b vmovdqa %ymm13, %ymm0 + 0x89, 0xd1, //0x00002d0f movl %edx, %ecx + 0xe9, 0x1d, 0xfe, 0xff, 0xff, //0x00002d11 jmp LBB0_510 + //0x00002d16 LBB0_531 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002d16 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002d1a movq $-1, %r15 + 0x45, 0x31, 0xd2, //0x00002d21 xorl %r10d, %r10d + 0x49, 0x83, 0xfb, 0x20, //0x00002d24 cmpq $32, %r11 + 0x0f, 0x83, 0x2b, 0xfc, 0xff, 0xff, //0x00002d28 jae LBB0_55 + 0xe9, 0x6b, 0x02, 0x00, 0x00, //0x00002d2e jmp LBB0_557 + //0x00002d33 LBB0_532 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002d33 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002d37 movq $-1, %r15 + 0x45, 0x31, 0xdb, //0x00002d3e xorl %r11d, %r11d + 0x49, 0x83, 0xfd, 0x20, //0x00002d41 cmpq $32, %r13 + 0x0f, 0x83, 0x5f, 0xfc, 0xff, 0xff, //0x00002d45 jae LBB0_153 + 0xe9, 0x04, 0x05, 0x00, 0x00, //0x00002d4b jmp LBB0_587 + //0x00002d50 LBB0_533 + 0x44, 0x89, 0xc9, //0x00002d50 movl %r9d, %ecx + 0xe9, 0x34, 0xff, 0xff, 0xff, //0x00002d53 jmp LBB0_524 + //0x00002d58 LBB0_534 + 0x89, 0xf9, //0x00002d58 movl %edi, %ecx + 0xe9, 0x2d, 0xff, 0xff, 0xff, //0x00002d5a jmp LBB0_524 + //0x00002d5f LBB0_535 + 0x89, 0xd1, //0x00002d5f movl %edx, %ecx + 0xe9, 0x26, 0xff, 0xff, 0xff, //0x00002d61 jmp LBB0_524 + //0x00002d66 LBB0_536 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002d66 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002d6a movq $-1, %r15 + 0x45, 0x31, 0xd2, //0x00002d71 xorl %r10d, %r10d + 0x49, 0x83, 0xfb, 0x20, //0x00002d74 cmpq $32, %r11 + 0x0f, 0x83, 0xe8, 0xfc, 0xff, 0xff, //0x00002d78 jae LBB0_90 + 0xe9, 0x4e, 0x06, 0x00, 0x00, //0x00002d7e jmp LBB0_602 + //0x00002d83 LBB0_537 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002d83 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002d87 movq $-1, %r15 + 0x45, 0x31, 0xdb, //0x00002d8e xorl %r11d, %r11d + 0x49, 0x83, 0xfd, 0x20, //0x00002d91 cmpq $32, %r13 + 0x0f, 0x83, 0x1c, 0xfd, 0xff, 0xff, //0x00002d95 jae LBB0_173 + //0x00002d9b LBB0_538 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002d9b movq $24(%rsp), %r10 + 0xe9, 0x38, 0x08, 0x00, 0x00, //0x00002da0 jmp LBB0_626 + //0x00002da5 LBB0_539 + 0x4d, 0x8d, 0x04, 0x06, //0x00002da5 leaq (%r14,%rax), %r8 + 0x48, 0x83, 0xfe, 0x10, //0x00002da9 cmpq $16, %rsi + 0x4c, 0x8b, 0x1c, 0x24, //0x00002dad movq (%rsp), %r11 + 0x0f, 0x83, 0x8f, 0xec, 0xff, 0xff, //0x00002db1 jae LBB0_322 + 0xe9, 0xf3, 0xec, 0xff, 0xff, //0x00002db7 jmp LBB0_325 + //0x00002dbc LBB0_540 + 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002dbc movq $-1, %r10 + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002dc3 movq $-1, %r9 + 0x4d, 0x89, 0xe8, //0x00002dca movq %r13, %r8 + 0x4c, 0x89, 0x54, 0x24, 0x28, //0x00002dcd movq %r10, $40(%rsp) + 0x49, 0x83, 0xfb, 0x10, //0x00002dd2 cmpq $16, %r11 + 0x4c, 0x89, 0x6c, 0x24, 0x30, //0x00002dd6 movq %r13, $48(%rsp) + 0x0f, 0x83, 0xaf, 0xf6, 0xff, 0xff, //0x00002ddb jae LBB0_436 + 0xe9, 0xf2, 0xf7, 0xff, 0xff, //0x00002de1 jmp LBB0_454 + //0x00002de6 LBB0_541 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002de6 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002dea movq $-1, %r15 + 0x45, 0x31, 0xd2, //0x00002df1 xorl %r10d, %r10d + 0x49, 0x83, 0xfb, 0x20, //0x00002df4 cmpq $32, %r11 + 0x0f, 0x83, 0xf8, 0xfd, 0xff, 0xff, //0x00002df8 jae LBB0_248 + //0x00002dfe LBB0_542 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002dfe vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002e02 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002e06 vmovdqa %ymm13, %ymm11 + 0xe9, 0x9a, 0x0b, 0x00, 0x00, //0x00002e0b jmp LBB0_658 + //0x00002e10 LBB0_543 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002e10 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002e14 movq $-1, %r15 + 0x45, 0x31, 0xdb, //0x00002e1b xorl %r11d, %r11d + 0x49, 0x83, 0xfd, 0x20, //0x00002e1e cmpq $32, %r13 + 0x0f, 0x83, 0x27, 0xfe, 0xff, 0xff, //0x00002e22 jae LBB0_406 + //0x00002e28 LBB0_544 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002e28 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002e2c vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002e30 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002e35 vmovdqa %ymm15, %ymm12 + 0xe9, 0x35, 0x0d, 0x00, 0x00, //0x00002e3a jmp LBB0_681 + //0x00002e3f LBB0_545 + 0x49, 0x39, 0xf2, //0x00002e3f cmpq %rsi, %r10 + 0x0f, 0x84, 0xcd, 0x0e, 0x00, 0x00, //0x00002e42 je LBB0_728 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002e48 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002e4c vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002e50 vmovdqa %ymm13, %ymm11 + 0x49, 0x01, 0xf1, //0x00002e55 addq %rsi, %r9 + 0x49, 0x83, 0xc1, 0x01, //0x00002e58 addq $1, %r9 + 0x48, 0xf7, 0xd6, //0x00002e5c notq %rsi + 0x49, 0x01, 0xf2, //0x00002e5f addq %rsi, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002e62 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00002e67 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002e6b vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x28, 0xd4, 0xff, 0xff, //0x00002e70 vmovdqu $-11224(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x40, 0xd3, 0xff, 0xff, //0x00002e78 vmovdqu $-11456(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00002e80 vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xd2, //0x00002e84 testq %r10, %r10 + 0x0f, 0x8f, 0x32, 0x00, 0x00, 0x00, //0x00002e87 jg LBB0_549 + 0xe9, 0x83, 0x0e, 0x00, 0x00, //0x00002e8d jmp LBB0_728 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002e92 .p2align 4, 0x90 + //0x00002ea0 LBB0_547 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002ea0 movq $-2, %rcx + 0xba, 0x02, 0x00, 0x00, 0x00, //0x00002ea7 movl $2, %edx + 0x49, 0x01, 0xd1, //0x00002eac addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002eaf movq $-1, %rax + 0x49, 0x01, 0xca, //0x00002eb6 addq %rcx, %r10 + 0x0f, 0x8e, 0x56, 0x0e, 0x00, 0x00, //0x00002eb9 jle LBB0_728 + //0x00002ebf LBB0_549 + 0x41, 0x0f, 0xb6, 0x01, //0x00002ebf movzbl (%r9), %eax + 0x3c, 0x5c, //0x00002ec3 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00002ec5 je LBB0_547 + 0x3c, 0x22, //0x00002ecb cmpb $34, %al + 0x0f, 0x84, 0x14, 0x0a, 0x00, 0x00, //0x00002ecd je LBB0_652 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002ed3 movq $-1, %rcx + 0xba, 0x01, 0x00, 0x00, 0x00, //0x00002eda movl $1, %edx + 0x49, 0x01, 0xd1, //0x00002edf addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002ee2 movq $-1, %rax + 0x49, 0x01, 0xca, //0x00002ee9 addq %rcx, %r10 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x00002eec jg LBB0_549 + 0xe9, 0x1e, 0x0e, 0x00, 0x00, //0x00002ef2 jmp LBB0_728 + //0x00002ef7 LBB0_552 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002ef7 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002efb vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002eff vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002f04 vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x00002f09 cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00002f0d jne LBB0_555 + 0x48, 0x89, 0xc1, //0x00002f13 movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x00002f16 subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfe, //0x00002f19 bsfq %rsi, %r15 + 0x49, 0x01, 0xcf, //0x00002f1d addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00002f20 jmp LBB0_555 + //0x00002f25 LBB0_554 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002f25 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002f29 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002f2d vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002f32 vmovdqa %ymm15, %ymm12 + //0x00002f37 LBB0_555 + 0x44, 0x89, 0xd1, //0x00002f37 movl %r10d, %ecx + 0xf7, 0xd1, //0x00002f3a notl %ecx + 0x21, 0xf1, //0x00002f3c andl %esi, %ecx + 0x8d, 0x3c, 0x09, //0x00002f3e leal (%rcx,%rcx), %edi + 0x41, 0x8d, 0x1c, 0x4a, //0x00002f41 leal (%r10,%rcx,2), %ebx + 0xf7, 0xd7, //0x00002f45 notl %edi + 0x21, 0xf7, //0x00002f47 andl %esi, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002f49 andl $-1431655766, %edi + 0x45, 0x31, 0xd2, //0x00002f4f xorl %r10d, %r10d + 0x01, 0xcf, //0x00002f52 addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc2, //0x00002f54 setb %r10b + 0x01, 0xff, //0x00002f58 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00002f5a xorl $1431655765, %edi + 0x21, 0xdf, //0x00002f60 andl %ebx, %edi + 0xf7, 0xd7, //0x00002f62 notl %edi + 0x21, 0xfa, //0x00002f64 andl %edi, %edx + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002f66 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00002f6b vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00002f70 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x23, 0xd3, 0xff, 0xff, //0x00002f75 vmovdqu $-11485(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x3b, 0xd2, 0xff, 0xff, //0x00002f7d vmovdqu $-11717(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00002f85 vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x00002f89 vmovdqa %ymm1, %ymm12 + 0x48, 0x85, 0xd2, //0x00002f8d testq %rdx, %rdx + 0x0f, 0x85, 0xf4, 0xf9, 0xff, 0xff, //0x00002f90 jne LBB0_58 + //0x00002f96 LBB0_556 + 0x48, 0x83, 0xc0, 0x20, //0x00002f96 addq $32, %rax + 0x49, 0x83, 0xc3, 0xe0, //0x00002f9a addq $-32, %r11 + //0x00002f9e LBB0_557 + 0x4d, 0x85, 0xd2, //0x00002f9e testq %r10, %r10 + 0x0f, 0x85, 0x08, 0x07, 0x00, 0x00, //0x00002fa1 jne LBB0_637 + 0x4c, 0x89, 0xf1, //0x00002fa7 movq %r14, %rcx + 0x48, 0xf7, 0xd1, //0x00002faa notq %rcx + 0x4c, 0x89, 0xff, //0x00002fad movq %r15, %rdi + 0x4d, 0x85, 0xdb, //0x00002fb0 testq %r11, %r11 + 0x0f, 0x84, 0xa1, 0x00, 0x00, 0x00, //0x00002fb3 je LBB0_569 + //0x00002fb9 LBB0_559 + 0x48, 0x83, 0xc1, 0x01, //0x00002fb9 addq $1, %rcx + //0x00002fbd LBB0_560 + 0x31, 0xf6, //0x00002fbd xorl %esi, %esi + //0x00002fbf LBB0_561 + 0x0f, 0xb6, 0x14, 0x30, //0x00002fbf movzbl (%rax,%rsi), %edx + 0x80, 0xfa, 0x22, //0x00002fc3 cmpb $34, %dl + 0x0f, 0x84, 0x87, 0x00, 0x00, 0x00, //0x00002fc6 je LBB0_568 + 0x80, 0xfa, 0x5c, //0x00002fcc cmpb $92, %dl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002fcf je LBB0_566 + 0x48, 0x83, 0xc6, 0x01, //0x00002fd5 addq $1, %rsi + 0x49, 0x39, 0xf3, //0x00002fd9 cmpq %rsi, %r11 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00002fdc jne LBB0_561 + 0xe9, 0x7b, 0x00, 0x00, 0x00, //0x00002fe2 jmp LBB0_564 + //0x00002fe7 LBB0_566 + 0x49, 0x8d, 0x53, 0xff, //0x00002fe7 leaq $-1(%r11), %rdx + 0x48, 0x39, 0xf2, //0x00002feb cmpq %rsi, %rdx + 0x0f, 0x84, 0xd7, 0x0c, 0x00, 0x00, //0x00002fee je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002ff4 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002ff8 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002ffc vmovdqa %ymm13, %ymm11 + 0x48, 0x8d, 0x14, 0x01, //0x00003001 leaq (%rcx,%rax), %rdx + 0x48, 0x01, 0xf2, //0x00003005 addq %rsi, %rdx + 0x48, 0x83, 0xff, 0xff, //0x00003008 cmpq $-1, %rdi + 0x4c, 0x0f, 0x44, 0xfa, //0x0000300c cmoveq %rdx, %r15 + 0x48, 0x0f, 0x44, 0xfa, //0x00003010 cmoveq %rdx, %rdi + 0x48, 0x01, 0xf0, //0x00003014 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00003017 addq $2, %rax + 0x4c, 0x89, 0xda, //0x0000301b movq %r11, %rdx + 0x48, 0x29, 0xf2, //0x0000301e subq %rsi, %rdx + 0x48, 0x83, 0xc2, 0xfe, //0x00003021 addq $-2, %rdx + 0x49, 0x83, 0xc3, 0xfe, //0x00003025 addq $-2, %r11 + 0x49, 0x39, 0xf3, //0x00003029 cmpq %rsi, %r11 + 0x49, 0x89, 0xd3, //0x0000302c movq %rdx, %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000302f vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x64, 0xd2, 0xff, 0xff, //0x00003034 vmovdqu $-11676(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x7c, 0xd1, 0xff, 0xff, //0x0000303c vmovdqu $-11908(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00003044 vmovdqa %ymm0, %ymm11 + 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x00003048 jne LBB0_560 + 0xe9, 0x78, 0x0c, 0x00, 0x00, //0x0000304e jmp LBB0_703 + //0x00003053 LBB0_568 + 0x48, 0x01, 0xf0, //0x00003053 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003056 addq $1, %rax + //0x0000305a LBB0_569 + 0x4c, 0x29, 0xf0, //0x0000305a subq %r14, %rax + 0xe9, 0x49, 0xd7, 0xff, 0xff, //0x0000305d jmp LBB0_63 + //0x00003062 LBB0_564 + 0x80, 0xfa, 0x22, //0x00003062 cmpb $34, %dl + 0x0f, 0x85, 0x60, 0x0c, 0x00, 0x00, //0x00003065 jne LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x0000306b vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000306f vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003073 vmovdqa %ymm13, %ymm11 + 0x4c, 0x01, 0xd8, //0x00003078 addq %r11, %rax + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000307b vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x18, 0xd2, 0xff, 0xff, //0x00003080 vmovdqu $-11752(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x30, 0xd1, 0xff, 0xff, //0x00003088 vmovdqu $-11984(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00003090 vmovdqa %ymm0, %ymm11 + 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003094 jmp LBB0_569 + //0x00003099 LBB0_570 + 0x49, 0x39, 0xf2, //0x00003099 cmpq %rsi, %r10 + 0x0f, 0x84, 0x73, 0x0c, 0x00, 0x00, //0x0000309c je LBB0_728 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000030a2 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000030a6 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000030aa vmovdqa %ymm13, %ymm11 + 0x49, 0x01, 0xf1, //0x000030af addq %rsi, %r9 + 0x49, 0x83, 0xc1, 0x01, //0x000030b2 addq $1, %r9 + 0x48, 0xf7, 0xd6, //0x000030b6 notq %rsi + 0x49, 0x01, 0xf2, //0x000030b9 addq %rsi, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x000030bc movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x000030c1 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000030c5 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xce, 0xd1, 0xff, 0xff, //0x000030ca vmovdqu $-11826(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xe6, 0xd0, 0xff, 0xff, //0x000030d2 vmovdqu $-12058(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000030da vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xd2, //0x000030de testq %r10, %r10 + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x000030e1 jg LBB0_574 + 0xe9, 0x29, 0x0c, 0x00, 0x00, //0x000030e7 jmp LBB0_728 + //0x000030ec LBB0_572 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000030ec movq $-2, %rcx + 0xba, 0x02, 0x00, 0x00, 0x00, //0x000030f3 movl $2, %edx + 0x49, 0x01, 0xd1, //0x000030f8 addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000030fb movq $-1, %rax + 0x49, 0x01, 0xca, //0x00003102 addq %rcx, %r10 + 0x0f, 0x8e, 0x0a, 0x0c, 0x00, 0x00, //0x00003105 jle LBB0_728 + //0x0000310b LBB0_574 + 0x41, 0x0f, 0xb6, 0x01, //0x0000310b movzbl (%r9), %eax + 0x3c, 0x5c, //0x0000310f cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00003111 je LBB0_572 + 0x3c, 0x22, //0x00003117 cmpb $34, %al + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x00003119 je LBB0_699 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000311f movq $-1, %rcx + 0xba, 0x01, 0x00, 0x00, 0x00, //0x00003126 movl $1, %edx + 0x49, 0x01, 0xd1, //0x0000312b addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000312e movq $-1, %rax + 0x49, 0x01, 0xca, //0x00003135 addq %rcx, %r10 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x00003138 jg LBB0_574 + 0xe9, 0xd2, 0x0b, 0x00, 0x00, //0x0000313e jmp LBB0_728 + //0x00003143 LBB0_699 + 0x4d, 0x29, 0xf1, //0x00003143 subq %r14, %r9 + 0x49, 0x83, 0xc1, 0x01, //0x00003146 addq $1, %r9 + 0x4d, 0x89, 0x0f, //0x0000314a movq %r9, (%r15) + 0x4d, 0x85, 0xc0, //0x0000314d testq %r8, %r8 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00003150 movq $24(%rsp), %r10 + 0x0f, 0x8f, 0x4d, 0xe7, 0xff, 0xff, //0x00003155 jg LBB0_304 + 0xe9, 0x55, 0x0b, 0x00, 0x00, //0x0000315b jmp LBB0_700 + //0x00003160 LBB0_577 + 0xc5, 0x7d, 0x7f, 0xe2, //0x00003160 vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00003164 vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003168 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000316d vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x00003172 cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003176 jne LBB0_580 + 0x48, 0x89, 0xc1, //0x0000317c movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x0000317f subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfa, //0x00003182 bsfq %rdx, %r15 + 0x49, 0x01, 0xcf, //0x00003186 addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00003189 jmp LBB0_580 + //0x0000318e LBB0_579 + 0xc5, 0x7d, 0x7f, 0xe2, //0x0000318e vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00003192 vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003196 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000319b vmovdqa %ymm15, %ymm12 + //0x000031a0 LBB0_580 + 0x44, 0x89, 0xd9, //0x000031a0 movl %r11d, %ecx + 0xf7, 0xd1, //0x000031a3 notl %ecx + 0x21, 0xd1, //0x000031a5 andl %edx, %ecx + 0x8d, 0x34, 0x09, //0x000031a7 leal (%rcx,%rcx), %esi + 0x41, 0x8d, 0x3c, 0x4b, //0x000031aa leal (%r11,%rcx,2), %edi + 0xf7, 0xd6, //0x000031ae notl %esi + 0x21, 0xd6, //0x000031b0 andl %edx, %esi + 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x000031b2 andl $-1431655766, %esi + 0x45, 0x31, 0xdb, //0x000031b8 xorl %r11d, %r11d + 0x01, 0xce, //0x000031bb addl %ecx, %esi + 0x41, 0x0f, 0x92, 0xc3, //0x000031bd setb %r11b + 0x01, 0xf6, //0x000031c1 addl %esi, %esi + 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x000031c3 xorl $1431655765, %esi + 0x21, 0xfe, //0x000031c9 andl %edi, %esi + 0xf7, 0xd6, //0x000031cb notl %esi + 0x41, 0x21, 0xf2, //0x000031cd andl %esi, %r10d + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000031d0 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x000031d5 vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000031da vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xb9, 0xd0, 0xff, 0xff, //0x000031df vmovdqu $-12103(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xd1, 0xcf, 0xff, 0xff, //0x000031e7 vmovdqu $-12335(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x000031ef vmovdqa %ymm1, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe2, //0x000031f3 vmovdqa %ymm2, %ymm12 + 0x4d, 0x85, 0xd2, //0x000031f7 testq %r10, %r10 + 0x0f, 0x85, 0xdb, 0xf7, 0xff, 0xff, //0x000031fa jne LBB0_156 + //0x00003200 LBB0_581 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00003200 movl $64, %edx + //0x00003205 LBB0_582 + 0xc5, 0xbd, 0x64, 0xc8, //0x00003205 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00003209 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x0000320e vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00003212 vpmovmskb %ymm0, %esi + 0x0f, 0xbc, 0xfe, //0x00003216 bsfl %esi, %edi + 0x4d, 0x85, 0xd2, //0x00003219 testq %r10, %r10 + 0x0f, 0x84, 0x22, 0x00, 0x00, 0x00, //0x0000321c je LBB0_585 + 0x85, 0xf6, //0x00003222 testl %esi, %esi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00003224 movl $64, %ecx + 0x0f, 0x44, 0xf9, //0x00003229 cmovel %ecx, %edi + 0x48, 0x39, 0xfa, //0x0000322c cmpq %rdi, %rdx + 0x0f, 0x87, 0x79, 0x0c, 0x00, 0x00, //0x0000322f ja LBB0_734 + 0x4c, 0x29, 0xf0, //0x00003235 subq %r14, %rax + 0x48, 0x01, 0xd0, //0x00003238 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000323b addq $1, %rax + 0xe9, 0x67, 0xd5, 0xff, 0xff, //0x0000323f jmp LBB0_63 + //0x00003244 LBB0_585 + 0x85, 0xf6, //0x00003244 testl %esi, %esi + 0x0f, 0x85, 0x6f, 0x0c, 0x00, 0x00, //0x00003246 jne LBB0_735 + 0x48, 0x83, 0xc0, 0x20, //0x0000324c addq $32, %rax + 0x49, 0x83, 0xc5, 0xe0, //0x00003250 addq $-32, %r13 + //0x00003254 LBB0_587 + 0x4d, 0x85, 0xdb, //0x00003254 testq %r11, %r11 + 0x0f, 0x85, 0xb0, 0x04, 0x00, 0x00, //0x00003257 jne LBB0_639 + 0x4c, 0x89, 0xf9, //0x0000325d movq %r15, %rcx + 0x4c, 0x8b, 0x1c, 0x24, //0x00003260 movq (%rsp), %r11 + 0x4d, 0x85, 0xed, //0x00003264 testq %r13, %r13 + 0x0f, 0x84, 0x5e, 0x0a, 0x00, 0x00, //0x00003267 je LBB0_703 + //0x0000326d LBB0_589 + 0x0f, 0xb6, 0x10, //0x0000326d movzbl (%rax), %edx + 0x80, 0xfa, 0x22, //0x00003270 cmpb $34, %dl + 0x0f, 0x84, 0x9c, 0x00, 0x00, 0x00, //0x00003273 je LBB0_701 + 0x80, 0xfa, 0x5c, //0x00003279 cmpb $92, %dl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x0000327c je LBB0_593 + 0x80, 0xfa, 0x1f, //0x00003282 cmpb $31, %dl + 0x0f, 0x86, 0x3b, 0x0c, 0x00, 0x00, //0x00003285 jbe LBB0_736 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000328b movq $-1, %rdx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00003292 movl $1, %esi + 0x48, 0x01, 0xf0, //0x00003297 addq %rsi, %rax + 0x49, 0x01, 0xd5, //0x0000329a addq %rdx, %r13 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x0000329d jne LBB0_589 + 0xe9, 0x23, 0x0a, 0x00, 0x00, //0x000032a3 jmp LBB0_703 + //0x000032a8 LBB0_593 + 0x49, 0x83, 0xfd, 0x01, //0x000032a8 cmpq $1, %r13 + 0x0f, 0x84, 0x19, 0x0a, 0x00, 0x00, //0x000032ac je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000032b2 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000032b6 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000032ba vmovdqa %ymm13, %ymm11 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x000032bf movq $-2, %rdx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x000032c6 movl $2, %esi + 0x48, 0x83, 0xf9, 0xff, //0x000032cb cmpq $-1, %rcx + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x000032cf jne LBB0_596 + 0x49, 0x89, 0xc7, //0x000032d5 movq %rax, %r15 + 0x4d, 0x29, 0xf7, //0x000032d8 subq %r14, %r15 + 0x4c, 0x89, 0xf9, //0x000032db movq %r15, %rcx + //0x000032de LBB0_596 + 0x4c, 0x8b, 0x1c, 0x24, //0x000032de movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000032e2 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000032e7 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xac, 0xcf, 0xff, 0xff, //0x000032ec vmovdqu $-12372(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xc4, 0xce, 0xff, 0xff, //0x000032f4 vmovdqu $-12604(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000032fc vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x00003300 vmovdqa %ymm1, %ymm12 + 0x48, 0x01, 0xf0, //0x00003304 addq %rsi, %rax + 0x49, 0x01, 0xd5, //0x00003307 addq %rdx, %r13 + 0x0f, 0x85, 0x5d, 0xff, 0xff, 0xff, //0x0000330a jne LBB0_589 + 0xe9, 0xb6, 0x09, 0x00, 0x00, //0x00003310 jmp LBB0_703 + //0x00003315 LBB0_701 + 0x4c, 0x29, 0xf0, //0x00003315 subq %r14, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003318 addq $1, %rax + 0x48, 0x85, 0xc0, //0x0000331c testq %rax, %rax + 0x0f, 0x89, 0x67, 0xd0, 0xff, 0xff, //0x0000331f jns LBB0_237 + 0xe9, 0x97, 0x09, 0x00, 0x00, //0x00003325 jmp LBB0_702 + //0x0000332a LBB0_597 + 0xc5, 0x7d, 0x7f, 0xe1, //0x0000332a vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000332e vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003332 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003337 vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x0000333c cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003340 jne LBB0_600 + 0x48, 0x89, 0xc1, //0x00003346 movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x00003349 subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfe, //0x0000334c bsfq %rsi, %r15 + 0x49, 0x01, 0xcf, //0x00003350 addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00003353 jmp LBB0_600 + //0x00003358 LBB0_599 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003358 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000335c vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003360 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003365 vmovdqa %ymm15, %ymm12 + //0x0000336a LBB0_600 + 0x44, 0x89, 0xd1, //0x0000336a movl %r10d, %ecx + 0xf7, 0xd1, //0x0000336d notl %ecx + 0x21, 0xf1, //0x0000336f andl %esi, %ecx + 0x8d, 0x3c, 0x09, //0x00003371 leal (%rcx,%rcx), %edi + 0x41, 0x8d, 0x1c, 0x4a, //0x00003374 leal (%r10,%rcx,2), %ebx + 0xf7, 0xd7, //0x00003378 notl %edi + 0x21, 0xf7, //0x0000337a andl %esi, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000337c andl $-1431655766, %edi + 0x45, 0x31, 0xd2, //0x00003382 xorl %r10d, %r10d + 0x01, 0xcf, //0x00003385 addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc2, //0x00003387 setb %r10b + 0x01, 0xff, //0x0000338b addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x0000338d xorl $1431655765, %edi + 0x21, 0xdf, //0x00003393 andl %ebx, %edi + 0xf7, 0xd7, //0x00003395 notl %edi + 0x21, 0xfa, //0x00003397 andl %edi, %edx + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003399 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x0000339e vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000033a3 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xf0, 0xce, 0xff, 0xff, //0x000033a8 vmovdqu $-12560(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x08, 0xce, 0xff, 0xff, //0x000033b0 vmovdqu $-12792(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000033b8 vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x000033bc vmovdqa %ymm1, %ymm12 + 0x48, 0x85, 0xd2, //0x000033c0 testq %rdx, %rdx + 0x0f, 0x85, 0xce, 0xf6, 0xff, 0xff, //0x000033c3 jne LBB0_93 + //0x000033c9 LBB0_601 + 0x48, 0x83, 0xc0, 0x20, //0x000033c9 addq $32, %rax + 0x49, 0x83, 0xc3, 0xe0, //0x000033cd addq $-32, %r11 + //0x000033d1 LBB0_602 + 0x4d, 0x85, 0xd2, //0x000033d1 testq %r10, %r10 + 0x0f, 0x85, 0x97, 0x03, 0x00, 0x00, //0x000033d4 jne LBB0_641 + 0x4c, 0x89, 0xf2, //0x000033da movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x000033dd notq %rdx + 0x4c, 0x89, 0xfe, //0x000033e0 movq %r15, %rsi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000033e3 movq $24(%rsp), %r10 + 0x4d, 0x85, 0xdb, //0x000033e8 testq %r11, %r11 + 0x0f, 0x84, 0xa6, 0x00, 0x00, 0x00, //0x000033eb je LBB0_614 + //0x000033f1 LBB0_604 + 0x48, 0x83, 0xc2, 0x01, //0x000033f1 addq $1, %rdx + //0x000033f5 LBB0_605 + 0x31, 0xff, //0x000033f5 xorl %edi, %edi + //0x000033f7 LBB0_606 + 0x0f, 0xb6, 0x1c, 0x38, //0x000033f7 movzbl (%rax,%rdi), %ebx + 0x80, 0xfb, 0x22, //0x000033fb cmpb $34, %bl + 0x0f, 0x84, 0x8c, 0x00, 0x00, 0x00, //0x000033fe je LBB0_613 + 0x80, 0xfb, 0x5c, //0x00003404 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003407 je LBB0_611 + 0x48, 0x83, 0xc7, 0x01, //0x0000340d addq $1, %rdi + 0x49, 0x39, 0xfb, //0x00003411 cmpq %rdi, %r11 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003414 jne LBB0_606 + 0xe9, 0x80, 0x00, 0x00, 0x00, //0x0000341a jmp LBB0_609 + //0x0000341f LBB0_611 + 0x49, 0x8d, 0x4b, 0xff, //0x0000341f leaq $-1(%r11), %rcx + 0x48, 0x39, 0xf9, //0x00003423 cmpq %rdi, %rcx + 0x0f, 0x84, 0x9f, 0x08, 0x00, 0x00, //0x00003426 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x0000342c vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00003430 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003434 vmovdqa %ymm13, %ymm11 + 0x48, 0x8d, 0x0c, 0x02, //0x00003439 leaq (%rdx,%rax), %rcx + 0x48, 0x01, 0xf9, //0x0000343d addq %rdi, %rcx + 0x48, 0x83, 0xfe, 0xff, //0x00003440 cmpq $-1, %rsi + 0x4c, 0x0f, 0x44, 0xf9, //0x00003444 cmoveq %rcx, %r15 + 0x48, 0x0f, 0x44, 0xf1, //0x00003448 cmoveq %rcx, %rsi + 0x48, 0x01, 0xf8, //0x0000344c addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x0000344f addq $2, %rax + 0x4c, 0x89, 0xd9, //0x00003453 movq %r11, %rcx + 0x48, 0x29, 0xf9, //0x00003456 subq %rdi, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x00003459 addq $-2, %rcx + 0x49, 0x83, 0xc3, 0xfe, //0x0000345d addq $-2, %r11 + 0x49, 0x39, 0xfb, //0x00003461 cmpq %rdi, %r11 + 0x49, 0x89, 0xcb, //0x00003464 movq %rcx, %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00003467 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000346c vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x27, 0xce, 0xff, 0xff, //0x00003471 vmovdqu $-12761(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x3f, 0xcd, 0xff, 0xff, //0x00003479 vmovdqu $-12993(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00003481 vmovdqa %ymm0, %ymm11 + 0x0f, 0x85, 0x6a, 0xff, 0xff, 0xff, //0x00003485 jne LBB0_605 + 0xe9, 0x3b, 0x08, 0x00, 0x00, //0x0000348b jmp LBB0_703 + //0x00003490 LBB0_613 + 0x48, 0x01, 0xf8, //0x00003490 addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003493 addq $1, %rax + //0x00003497 LBB0_614 + 0x4c, 0x29, 0xf0, //0x00003497 subq %r14, %rax + 0xe9, 0x20, 0x01, 0x00, 0x00, //0x0000349a jmp LBB0_623 + //0x0000349f LBB0_609 + 0x80, 0xfb, 0x22, //0x0000349f cmpb $34, %bl + 0x0f, 0x85, 0x23, 0x08, 0x00, 0x00, //0x000034a2 jne LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000034a8 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000034ac vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000034b0 vmovdqa %ymm13, %ymm11 + 0x4c, 0x01, 0xd8, //0x000034b5 addq %r11, %rax + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000034b8 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000034bd vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xd6, 0xcd, 0xff, 0xff, //0x000034c2 vmovdqu $-12842(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xee, 0xcc, 0xff, 0xff, //0x000034ca vmovdqu $-13074(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000034d2 vmovdqa %ymm0, %ymm11 + 0xe9, 0xbc, 0xff, 0xff, 0xff, //0x000034d6 jmp LBB0_614 + //0x000034db LBB0_615 + 0xc5, 0x7d, 0x7f, 0xe2, //0x000034db vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x000034df vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000034e3 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x000034e8 vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x000034ed cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x000034f1 jne LBB0_618 + 0x48, 0x89, 0xc1, //0x000034f7 movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x000034fa subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfa, //0x000034fd bsfq %rdx, %r15 + 0x49, 0x01, 0xcf, //0x00003501 addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00003504 jmp LBB0_618 + //0x00003509 LBB0_617 + 0xc5, 0x7d, 0x7f, 0xe2, //0x00003509 vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x0000350d vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003511 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003516 vmovdqa %ymm15, %ymm12 + //0x0000351b LBB0_618 + 0x44, 0x89, 0xd9, //0x0000351b movl %r11d, %ecx + 0xf7, 0xd1, //0x0000351e notl %ecx + 0x21, 0xd1, //0x00003520 andl %edx, %ecx + 0x8d, 0x34, 0x09, //0x00003522 leal (%rcx,%rcx), %esi + 0x41, 0x8d, 0x3c, 0x4b, //0x00003525 leal (%r11,%rcx,2), %edi + 0xf7, 0xd6, //0x00003529 notl %esi + 0x21, 0xd6, //0x0000352b andl %edx, %esi + 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000352d andl $-1431655766, %esi + 0x45, 0x31, 0xdb, //0x00003533 xorl %r11d, %r11d + 0x01, 0xce, //0x00003536 addl %ecx, %esi + 0x41, 0x0f, 0x92, 0xc3, //0x00003538 setb %r11b + 0x01, 0xf6, //0x0000353c addl %esi, %esi + 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x0000353e xorl $1431655765, %esi + 0x21, 0xfe, //0x00003544 andl %edi, %esi + 0xf7, 0xd6, //0x00003546 notl %esi + 0x41, 0x21, 0xf2, //0x00003548 andl %esi, %r10d + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000354b vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003550 vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003555 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x3e, 0xcd, 0xff, 0xff, //0x0000355a vmovdqu $-12994(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x56, 0xcc, 0xff, 0xff, //0x00003562 vmovdqu $-13226(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x0000356a vmovdqa %ymm1, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe2, //0x0000356e vmovdqa %ymm2, %ymm12 + 0x4d, 0x85, 0xd2, //0x00003572 testq %r10, %r10 + 0x0f, 0x85, 0x6d, 0xf5, 0xff, 0xff, //0x00003575 jne LBB0_176 + //0x0000357b LBB0_619 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000357b movl $64, %edx + //0x00003580 LBB0_620 + 0xc5, 0xbd, 0x64, 0xc8, //0x00003580 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00003584 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00003589 vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x0000358d vpmovmskb %ymm0, %esi + 0x0f, 0xbc, 0xfe, //0x00003591 bsfl %esi, %edi + 0x4d, 0x85, 0xd2, //0x00003594 testq %r10, %r10 + 0x0f, 0x84, 0x2b, 0x00, 0x00, 0x00, //0x00003597 je LBB0_624 + 0x85, 0xf6, //0x0000359d testl %esi, %esi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x0000359f movl $64, %ecx + 0x0f, 0x44, 0xf9, //0x000035a4 cmovel %ecx, %edi + 0x48, 0x39, 0xfa, //0x000035a7 cmpq %rdi, %rdx + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000035aa movq $24(%rsp), %r10 + 0x0f, 0x87, 0xf9, 0x08, 0x00, 0x00, //0x000035af ja LBB0_734 + 0x4c, 0x29, 0xf0, //0x000035b5 subq %r14, %rax + 0x48, 0x01, 0xd0, //0x000035b8 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000035bb addq $1, %rax + //0x000035bf LBB0_623 + 0x4c, 0x8b, 0x1c, 0x24, //0x000035bf movq (%rsp), %r11 + 0xe9, 0xc6, 0xe2, 0xff, 0xff, //0x000035c3 jmp LBB0_302 + //0x000035c8 LBB0_624 + 0x85, 0xf6, //0x000035c8 testl %esi, %esi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000035ca movq $24(%rsp), %r10 + 0x0f, 0x85, 0xe6, 0x08, 0x00, 0x00, //0x000035cf jne LBB0_735 + 0x48, 0x83, 0xc0, 0x20, //0x000035d5 addq $32, %rax + 0x49, 0x83, 0xc5, 0xe0, //0x000035d9 addq $-32, %r13 + //0x000035dd LBB0_626 + 0x4d, 0x85, 0xdb, //0x000035dd testq %r11, %r11 + 0x0f, 0x85, 0xee, 0x01, 0x00, 0x00, //0x000035e0 jne LBB0_643 + 0x4c, 0x89, 0xfa, //0x000035e6 movq %r15, %rdx + 0x4c, 0x8b, 0x1c, 0x24, //0x000035e9 movq (%rsp), %r11 + 0x4d, 0x85, 0xed, //0x000035ed testq %r13, %r13 + 0x0f, 0x84, 0xd5, 0x06, 0x00, 0x00, //0x000035f0 je LBB0_703 + //0x000035f6 LBB0_628 + 0x0f, 0xb6, 0x18, //0x000035f6 movzbl (%rax), %ebx + 0x80, 0xfb, 0x22, //0x000035f9 cmpb $34, %bl + 0x0f, 0x84, 0xa1, 0x00, 0x00, 0x00, //0x000035fc je LBB0_636 + 0x80, 0xfb, 0x5c, //0x00003602 cmpb $92, %bl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00003605 je LBB0_632 + 0x80, 0xfb, 0x1f, //0x0000360b cmpb $31, %bl + 0x0f, 0x86, 0xb2, 0x08, 0x00, 0x00, //0x0000360e jbe LBB0_736 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003614 movq $-1, %rsi + 0xbf, 0x01, 0x00, 0x00, 0x00, //0x0000361b movl $1, %edi + 0x48, 0x01, 0xf8, //0x00003620 addq %rdi, %rax + 0x49, 0x01, 0xf5, //0x00003623 addq %rsi, %r13 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00003626 jne LBB0_628 + 0xe9, 0x9a, 0x06, 0x00, 0x00, //0x0000362c jmp LBB0_703 + //0x00003631 LBB0_632 + 0x49, 0x83, 0xfd, 0x01, //0x00003631 cmpq $1, %r13 + 0x0f, 0x84, 0x90, 0x06, 0x00, 0x00, //0x00003635 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x0000363b vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000363f vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003643 vmovdqa %ymm13, %ymm11 + 0x48, 0xc7, 0xc6, 0xfe, 0xff, 0xff, 0xff, //0x00003648 movq $-2, %rsi + 0xbf, 0x02, 0x00, 0x00, 0x00, //0x0000364f movl $2, %edi + 0x48, 0x83, 0xfa, 0xff, //0x00003654 cmpq $-1, %rdx + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00003658 jne LBB0_635 + 0x49, 0x89, 0xc7, //0x0000365e movq %rax, %r15 + 0x4d, 0x29, 0xf7, //0x00003661 subq %r14, %r15 + 0x4c, 0x89, 0xfa, //0x00003664 movq %r15, %rdx + //0x00003667 LBB0_635 + 0x4c, 0x8b, 0x1c, 0x24, //0x00003667 movq (%rsp), %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x0000366b movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003670 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003675 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x1e, 0xcc, 0xff, 0xff, //0x0000367a vmovdqu $-13282(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x36, 0xcb, 0xff, 0xff, //0x00003682 vmovdqu $-13514(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x0000368a vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x0000368e vmovdqa %ymm1, %ymm12 + 0x48, 0x01, 0xf8, //0x00003692 addq %rdi, %rax + 0x49, 0x01, 0xf5, //0x00003695 addq %rsi, %r13 + 0x0f, 0x85, 0x58, 0xff, 0xff, 0xff, //0x00003698 jne LBB0_628 + 0xe9, 0x28, 0x06, 0x00, 0x00, //0x0000369e jmp LBB0_703 + //0x000036a3 LBB0_636 + 0x4c, 0x29, 0xf0, //0x000036a3 subq %r14, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000036a6 addq $1, %rax + 0xe9, 0xdf, 0xe1, 0xff, 0xff, //0x000036aa jmp LBB0_302 + //0x000036af LBB0_637 + 0x4d, 0x85, 0xdb, //0x000036af testq %r11, %r11 + 0x0f, 0x84, 0x13, 0x06, 0x00, 0x00, //0x000036b2 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000036b8 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000036bc vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000036c0 vmovdqa %ymm13, %ymm11 + 0x4c, 0x89, 0xf1, //0x000036c5 movq %r14, %rcx + 0x48, 0xf7, 0xd1, //0x000036c8 notq %rcx + 0x48, 0x8d, 0x14, 0x08, //0x000036cb leaq (%rax,%rcx), %rdx + 0x49, 0x83, 0xff, 0xff, //0x000036cf cmpq $-1, %r15 + 0x4c, 0x89, 0xff, //0x000036d3 movq %r15, %rdi + 0x4c, 0x0f, 0x44, 0xfa, //0x000036d6 cmoveq %rdx, %r15 + 0x48, 0x0f, 0x44, 0xfa, //0x000036da cmoveq %rdx, %rdi + 0x48, 0x83, 0xc0, 0x01, //0x000036de addq $1, %rax + 0x49, 0x83, 0xc3, 0xff, //0x000036e2 addq $-1, %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000036e6 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xad, 0xcb, 0xff, 0xff, //0x000036eb vmovdqu $-13395(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xc5, 0xca, 0xff, 0xff, //0x000036f3 vmovdqu $-13627(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000036fb vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xdb, //0x000036ff testq %r11, %r11 + 0x0f, 0x85, 0xb1, 0xf8, 0xff, 0xff, //0x00003702 jne LBB0_559 + 0xe9, 0x4d, 0xf9, 0xff, 0xff, //0x00003708 jmp LBB0_569 + //0x0000370d LBB0_639 + 0x4d, 0x85, 0xed, //0x0000370d testq %r13, %r13 + 0x0f, 0x84, 0xb5, 0x05, 0x00, 0x00, //0x00003710 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003716 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000371a vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000371e vmovdqa %ymm13, %ymm11 + 0x4c, 0x89, 0xf1, //0x00003723 movq %r14, %rcx + 0x48, 0xf7, 0xd1, //0x00003726 notq %rcx + 0x48, 0x01, 0xc1, //0x00003729 addq %rax, %rcx + 0x49, 0x83, 0xff, 0xff, //0x0000372c cmpq $-1, %r15 + 0x4c, 0x89, 0xfa, //0x00003730 movq %r15, %rdx + 0x48, 0x0f, 0x44, 0xd1, //0x00003733 cmoveq %rcx, %rdx + 0x49, 0x0f, 0x45, 0xcf, //0x00003737 cmovneq %r15, %rcx + 0x48, 0x83, 0xc0, 0x01, //0x0000373b addq $1, %rax + 0x49, 0x83, 0xc5, 0xff, //0x0000373f addq $-1, %r13 + 0x49, 0x89, 0xd7, //0x00003743 movq %rdx, %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00003746 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000374a vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x49, 0xcb, 0xff, 0xff, //0x0000374f vmovdqu $-13495(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x61, 0xca, 0xff, 0xff, //0x00003757 vmovdqu $-13727(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x0000375f vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xed, //0x00003763 testq %r13, %r13 + 0x0f, 0x85, 0x01, 0xfb, 0xff, 0xff, //0x00003766 jne LBB0_589 + 0xe9, 0x5a, 0x05, 0x00, 0x00, //0x0000376c jmp LBB0_703 + //0x00003771 LBB0_641 + 0x4d, 0x85, 0xdb, //0x00003771 testq %r11, %r11 + 0x0f, 0x84, 0x51, 0x05, 0x00, 0x00, //0x00003774 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x0000377a vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000377e vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003782 vmovdqa %ymm13, %ymm11 + 0x4c, 0x89, 0xf2, //0x00003787 movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x0000378a notq %rdx + 0x48, 0x8d, 0x0c, 0x10, //0x0000378d leaq (%rax,%rdx), %rcx + 0x49, 0x83, 0xff, 0xff, //0x00003791 cmpq $-1, %r15 + 0x4c, 0x89, 0xfe, //0x00003795 movq %r15, %rsi + 0x4c, 0x0f, 0x44, 0xf9, //0x00003798 cmoveq %rcx, %r15 + 0x48, 0x0f, 0x44, 0xf1, //0x0000379c cmoveq %rcx, %rsi + 0x48, 0x83, 0xc0, 0x01, //0x000037a0 addq $1, %rax + 0x49, 0x83, 0xc3, 0xff, //0x000037a4 addq $-1, %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000037a8 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000037ad vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xe6, 0xca, 0xff, 0xff, //0x000037b2 vmovdqu $-13594(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xfe, 0xc9, 0xff, 0xff, //0x000037ba vmovdqu $-13826(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000037c2 vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xdb, //0x000037c6 testq %r11, %r11 + 0x0f, 0x85, 0x22, 0xfc, 0xff, 0xff, //0x000037c9 jne LBB0_604 + 0xe9, 0xc3, 0xfc, 0xff, 0xff, //0x000037cf jmp LBB0_614 + //0x000037d4 LBB0_643 + 0x4d, 0x85, 0xed, //0x000037d4 testq %r13, %r13 + 0x0f, 0x84, 0xee, 0x04, 0x00, 0x00, //0x000037d7 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000037dd vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000037e1 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000037e5 vmovdqa %ymm13, %ymm11 + 0x4c, 0x89, 0xf2, //0x000037ea movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x000037ed notq %rdx + 0x48, 0x01, 0xc2, //0x000037f0 addq %rax, %rdx + 0x49, 0x83, 0xff, 0xff, //0x000037f3 cmpq $-1, %r15 + 0x4c, 0x89, 0xf9, //0x000037f7 movq %r15, %rcx + 0x48, 0x0f, 0x44, 0xca, //0x000037fa cmoveq %rdx, %rcx + 0x49, 0x0f, 0x45, 0xd7, //0x000037fe cmovneq %r15, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x00003802 addq $1, %rax + 0x49, 0x83, 0xc5, 0xff, //0x00003806 addq $-1, %r13 + 0x49, 0x89, 0xcf, //0x0000380a movq %rcx, %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x0000380d movq (%rsp), %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00003811 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003816 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x7d, 0xca, 0xff, 0xff, //0x0000381b vmovdqu $-13699(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x95, 0xc9, 0xff, 0xff, //0x00003823 vmovdqu $-13931(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x0000382b vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xed, //0x0000382f testq %r13, %r13 + 0x0f, 0x85, 0xbe, 0xfd, 0xff, 0xff, //0x00003832 jne LBB0_628 + 0xe9, 0x8e, 0x04, 0x00, 0x00, //0x00003838 jmp LBB0_703 + //0x0000383d LBB0_645 + 0x49, 0x39, 0xf2, //0x0000383d cmpq %rsi, %r10 + 0x0f, 0x84, 0xcf, 0x04, 0x00, 0x00, //0x00003840 je LBB0_728 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003846 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000384a vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000384e vmovdqa %ymm13, %ymm11 + 0x49, 0x01, 0xf1, //0x00003853 addq %rsi, %r9 + 0x49, 0x83, 0xc1, 0x01, //0x00003856 addq $1, %r9 + 0x48, 0xf7, 0xd6, //0x0000385a notq %rsi + 0x49, 0x01, 0xf2, //0x0000385d addq %rsi, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00003860 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00003865 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003869 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x2a, 0xca, 0xff, 0xff, //0x0000386e vmovdqu $-13782(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x42, 0xc9, 0xff, 0xff, //0x00003876 vmovdqu $-14014(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x0000387e vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xd2, //0x00003882 testq %r10, %r10 + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00003885 jg LBB0_649 + 0xe9, 0x85, 0x04, 0x00, 0x00, //0x0000388b jmp LBB0_728 + //0x00003890 LBB0_647 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003890 movq $-2, %rcx + 0xba, 0x02, 0x00, 0x00, 0x00, //0x00003897 movl $2, %edx + 0x49, 0x01, 0xd1, //0x0000389c addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000389f movq $-1, %rax + 0x49, 0x01, 0xca, //0x000038a6 addq %rcx, %r10 + 0x0f, 0x8e, 0x66, 0x04, 0x00, 0x00, //0x000038a9 jle LBB0_728 + //0x000038af LBB0_649 + 0x41, 0x0f, 0xb6, 0x01, //0x000038af movzbl (%r9), %eax + 0x3c, 0x5c, //0x000038b3 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x000038b5 je LBB0_647 + 0x3c, 0x22, //0x000038bb cmpb $34, %al + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x000038bd je LBB0_652 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000038c3 movq $-1, %rcx + 0xba, 0x01, 0x00, 0x00, 0x00, //0x000038ca movl $1, %edx + 0x49, 0x01, 0xd1, //0x000038cf addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000038d2 movq $-1, %rax + 0x49, 0x01, 0xca, //0x000038d9 addq %rcx, %r10 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x000038dc jg LBB0_649 + 0xe9, 0x2e, 0x04, 0x00, 0x00, //0x000038e2 jmp LBB0_728 + //0x000038e7 LBB0_652 + 0x4d, 0x29, 0xf1, //0x000038e7 subq %r14, %r9 + 0x49, 0x83, 0xc1, 0x01, //0x000038ea addq $1, %r9 + 0xe9, 0xbf, 0xd1, 0xff, 0xff, //0x000038ee jmp LBB0_105 + //0x000038f3 LBB0_653 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000038f3 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000038f7 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000038fb vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003900 vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x00003905 cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003909 jne LBB0_656 + 0x48, 0x89, 0xc1, //0x0000390f movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x00003912 subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfe, //0x00003915 bsfq %rsi, %r15 + 0x49, 0x01, 0xcf, //0x00003919 addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x0000391c jmp LBB0_656 + //0x00003921 LBB0_655 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003921 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00003925 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003929 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000392e vmovdqa %ymm15, %ymm12 + //0x00003933 LBB0_656 + 0x44, 0x89, 0xd1, //0x00003933 movl %r10d, %ecx + 0xf7, 0xd1, //0x00003936 notl %ecx + 0x21, 0xf1, //0x00003938 andl %esi, %ecx + 0x8d, 0x3c, 0x09, //0x0000393a leal (%rcx,%rcx), %edi + 0x41, 0x8d, 0x1c, 0x4a, //0x0000393d leal (%r10,%rcx,2), %ebx + 0xf7, 0xd7, //0x00003941 notl %edi + 0x21, 0xf7, //0x00003943 andl %esi, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003945 andl $-1431655766, %edi + 0x45, 0x31, 0xd2, //0x0000394b xorl %r10d, %r10d + 0x01, 0xcf, //0x0000394e addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc2, //0x00003950 setb %r10b + 0x01, 0xff, //0x00003954 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00003956 xorl $1431655765, %edi + 0x21, 0xdf, //0x0000395c andl %ebx, %edi + 0xf7, 0xd7, //0x0000395e notl %edi + 0x21, 0xfa, //0x00003960 andl %edi, %edx + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003962 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003967 vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x0000396c vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x27, 0xc9, 0xff, 0xff, //0x00003971 vmovdqu $-14041(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x3f, 0xc8, 0xff, 0xff, //0x00003979 vmovdqu $-14273(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00003981 vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x00003985 vmovdqa %ymm1, %ymm12 + 0xc5, 0x7d, 0x7f, 0xea, //0x00003989 vmovdqa %ymm13, %ymm2 + 0x48, 0x85, 0xd2, //0x0000398d testq %rdx, %rdx + 0x0f, 0x85, 0x95, 0xf2, 0xff, 0xff, //0x00003990 jne LBB0_251 + //0x00003996 LBB0_657 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003996 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000399a vmovdqa %ymm11, %ymm0 + 0xc5, 0x7d, 0x6f, 0xda, //0x0000399e vmovdqa %ymm2, %ymm11 + 0x48, 0x83, 0xc0, 0x20, //0x000039a2 addq $32, %rax + 0x49, 0x83, 0xc3, 0xe0, //0x000039a6 addq $-32, %r11 + //0x000039aa LBB0_658 + 0x4d, 0x85, 0xd2, //0x000039aa testq %r10, %r10 + 0x0f, 0x85, 0x75, 0x02, 0x00, 0x00, //0x000039ad jne LBB0_693 + 0x4c, 0x89, 0xf2, //0x000039b3 movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x000039b6 notq %rdx + 0x4c, 0x89, 0xfe, //0x000039b9 movq %r15, %rsi + 0x4d, 0x85, 0xdb, //0x000039bc testq %r11, %r11 + 0x0f, 0x84, 0x7b, 0x00, 0x00, 0x00, //0x000039bf je LBB0_670 + //0x000039c5 LBB0_660 + 0x48, 0x83, 0xc2, 0x01, //0x000039c5 addq $1, %rdx + //0x000039c9 LBB0_661 + 0x31, 0xff, //0x000039c9 xorl %edi, %edi + //0x000039cb LBB0_662 + 0x0f, 0xb6, 0x1c, 0x38, //0x000039cb movzbl (%rax,%rdi), %ebx + 0x80, 0xfb, 0x22, //0x000039cf cmpb $34, %bl + 0x0f, 0x84, 0x61, 0x00, 0x00, 0x00, //0x000039d2 je LBB0_669 + 0x80, 0xfb, 0x5c, //0x000039d8 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000039db je LBB0_667 + 0x48, 0x83, 0xc7, 0x01, //0x000039e1 addq $1, %rdi + 0x49, 0x39, 0xfb, //0x000039e5 cmpq %rdi, %r11 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000039e8 jne LBB0_662 + 0xe9, 0x62, 0x00, 0x00, 0x00, //0x000039ee jmp LBB0_665 + //0x000039f3 LBB0_667 + 0x49, 0x8d, 0x4b, 0xff, //0x000039f3 leaq $-1(%r11), %rcx + 0x48, 0x39, 0xf9, //0x000039f7 cmpq %rdi, %rcx + 0x0f, 0x84, 0xcb, 0x02, 0x00, 0x00, //0x000039fa je LBB0_703 + 0x48, 0x8d, 0x0c, 0x02, //0x00003a00 leaq (%rdx,%rax), %rcx + 0x48, 0x01, 0xf9, //0x00003a04 addq %rdi, %rcx + 0x48, 0x83, 0xfe, 0xff, //0x00003a07 cmpq $-1, %rsi + 0x4c, 0x0f, 0x44, 0xf9, //0x00003a0b cmoveq %rcx, %r15 + 0x48, 0x0f, 0x44, 0xf1, //0x00003a0f cmoveq %rcx, %rsi + 0x48, 0x01, 0xf8, //0x00003a13 addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00003a16 addq $2, %rax + 0x4c, 0x89, 0xd9, //0x00003a1a movq %r11, %rcx + 0x48, 0x29, 0xf9, //0x00003a1d subq %rdi, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x00003a20 addq $-2, %rcx + 0x49, 0x83, 0xc3, 0xfe, //0x00003a24 addq $-2, %r11 + 0x49, 0x39, 0xfb, //0x00003a28 cmpq %rdi, %r11 + 0x49, 0x89, 0xcb, //0x00003a2b movq %rcx, %r11 + 0x0f, 0x85, 0x95, 0xff, 0xff, 0xff, //0x00003a2e jne LBB0_661 + 0xe9, 0x92, 0x02, 0x00, 0x00, //0x00003a34 jmp LBB0_703 + //0x00003a39 LBB0_669 + 0x48, 0x01, 0xf8, //0x00003a39 addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003a3c addq $1, %rax + //0x00003a40 LBB0_670 + 0x4c, 0x29, 0xf0, //0x00003a40 subq %r14, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x00003a43 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003a47 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7d, 0x7f, 0xda, //0x00003a4c vmovdqa %ymm11, %ymm2 + 0xe9, 0xb6, 0x01, 0x00, 0x00, //0x00003a50 jmp LBB0_692 + //0x00003a55 LBB0_665 + 0x80, 0xfb, 0x22, //0x00003a55 cmpb $34, %bl + 0x0f, 0x85, 0x6d, 0x02, 0x00, 0x00, //0x00003a58 jne LBB0_703 + 0x4c, 0x01, 0xd8, //0x00003a5e addq %r11, %rax + 0xe9, 0xda, 0xff, 0xff, 0xff, //0x00003a61 jmp LBB0_670 + //0x00003a66 LBB0_671 + 0xc5, 0x7d, 0x7f, 0xe2, //0x00003a66 vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00003a6a vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003a6e vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003a73 vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x00003a78 cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003a7c jne LBB0_674 + 0x48, 0x89, 0xc1, //0x00003a82 movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x00003a85 subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfa, //0x00003a88 bsfq %rdx, %r15 + 0x49, 0x01, 0xcf, //0x00003a8c addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00003a8f jmp LBB0_674 + //0x00003a94 LBB0_673 + 0xc5, 0x7d, 0x7f, 0xe2, //0x00003a94 vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00003a98 vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003a9c vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003aa1 vmovdqa %ymm15, %ymm12 + //0x00003aa6 LBB0_674 + 0x44, 0x89, 0xd9, //0x00003aa6 movl %r11d, %ecx + 0xf7, 0xd1, //0x00003aa9 notl %ecx + 0x21, 0xd1, //0x00003aab andl %edx, %ecx + 0x8d, 0x34, 0x09, //0x00003aad leal (%rcx,%rcx), %esi + 0x41, 0x8d, 0x3c, 0x4b, //0x00003ab0 leal (%r11,%rcx,2), %edi + 0xf7, 0xd6, //0x00003ab4 notl %esi + 0x21, 0xd6, //0x00003ab6 andl %edx, %esi + 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003ab8 andl $-1431655766, %esi + 0x45, 0x31, 0xdb, //0x00003abe xorl %r11d, %r11d + 0x01, 0xce, //0x00003ac1 addl %ecx, %esi + 0x41, 0x0f, 0x92, 0xc3, //0x00003ac3 setb %r11b + 0x01, 0xf6, //0x00003ac7 addl %esi, %esi + 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x00003ac9 xorl $1431655765, %esi + 0x21, 0xfe, //0x00003acf andl %edi, %esi + 0xf7, 0xd6, //0x00003ad1 notl %esi + 0x41, 0x21, 0xf2, //0x00003ad3 andl %esi, %r10d + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003ad6 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003adb vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003ae0 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xb3, 0xc7, 0xff, 0xff, //0x00003ae5 vmovdqu $-14413(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xcb, 0xc6, 0xff, 0xff, //0x00003aed vmovdqu $-14645(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x00003af5 vmovdqa %ymm1, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe2, //0x00003af9 vmovdqa %ymm2, %ymm12 + 0x4d, 0x85, 0xd2, //0x00003afd testq %r10, %r10 + 0x0f, 0x85, 0x7a, 0xf1, 0xff, 0xff, //0x00003b00 jne LBB0_409 + //0x00003b06 LBB0_675 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00003b06 movl $64, %edx + //0x00003b0b LBB0_676 + 0xc5, 0xbd, 0x64, 0xc8, //0x00003b0b vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00003b0f vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00003b14 vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00003b18 vpmovmskb %ymm0, %esi + 0x0f, 0xbc, 0xfe, //0x00003b1c bsfl %esi, %edi + 0x4d, 0x85, 0xd2, //0x00003b1f testq %r10, %r10 + 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x00003b22 je LBB0_679 + 0x85, 0xf6, //0x00003b28 testl %esi, %esi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00003b2a movl $64, %ecx + 0x0f, 0x44, 0xf9, //0x00003b2f cmovel %ecx, %edi + 0x48, 0x39, 0xfa, //0x00003b32 cmpq %rdi, %rdx + 0x0f, 0x87, 0x73, 0x03, 0x00, 0x00, //0x00003b35 ja LBB0_734 + 0xc5, 0x7d, 0x7f, 0xea, //0x00003b3b vmovdqa %ymm13, %ymm2 + 0x4c, 0x29, 0xf0, //0x00003b3f subq %r14, %rax + 0x48, 0x01, 0xd0, //0x00003b42 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003b45 addq $1, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x00003b49 movq (%rsp), %r11 + 0xe9, 0x8a, 0xeb, 0xff, 0xff, //0x00003b4d jmp LBB0_473 + //0x00003b52 LBB0_679 + 0x85, 0xf6, //0x00003b52 testl %esi, %esi + 0x0f, 0x85, 0x61, 0x03, 0x00, 0x00, //0x00003b54 jne LBB0_735 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003b5a vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00003b5e vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003b62 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003b67 vmovdqa %ymm15, %ymm12 + 0x48, 0x83, 0xc0, 0x20, //0x00003b6c addq $32, %rax + 0x49, 0x83, 0xc5, 0xe0, //0x00003b70 addq $-32, %r13 + //0x00003b74 LBB0_681 + 0x4d, 0x85, 0xdb, //0x00003b74 testq %r11, %r11 + 0x0f, 0x85, 0xe3, 0x00, 0x00, 0x00, //0x00003b77 jne LBB0_695 + 0x4c, 0x89, 0xfa, //0x00003b7d movq %r15, %rdx + 0x4d, 0x85, 0xed, //0x00003b80 testq %r13, %r13 + 0x0f, 0x84, 0x42, 0x01, 0x00, 0x00, //0x00003b83 je LBB0_703 + //0x00003b89 LBB0_683 + 0x0f, 0xb6, 0x18, //0x00003b89 movzbl (%rax), %ebx + 0x80, 0xfb, 0x22, //0x00003b8c cmpb $34, %bl + 0x0f, 0x84, 0x5d, 0x00, 0x00, 0x00, //0x00003b8f je LBB0_691 + 0x80, 0xfb, 0x5c, //0x00003b95 cmpb $92, %bl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00003b98 je LBB0_688 + 0x80, 0xfb, 0x1f, //0x00003b9e cmpb $31, %bl + 0x0f, 0x86, 0x1f, 0x03, 0x00, 0x00, //0x00003ba1 jbe LBB0_736 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003ba7 movq $-1, %rsi + 0xbf, 0x01, 0x00, 0x00, 0x00, //0x00003bae movl $1, %edi + //0x00003bb3 LBB0_687 + 0x48, 0x01, 0xf8, //0x00003bb3 addq %rdi, %rax + 0x49, 0x01, 0xf5, //0x00003bb6 addq %rsi, %r13 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00003bb9 jne LBB0_683 + 0xe9, 0x07, 0x01, 0x00, 0x00, //0x00003bbf jmp LBB0_703 + //0x00003bc4 LBB0_688 + 0x49, 0x83, 0xfd, 0x01, //0x00003bc4 cmpq $1, %r13 + 0x0f, 0x84, 0xfd, 0x00, 0x00, 0x00, //0x00003bc8 je LBB0_703 + 0x48, 0xc7, 0xc6, 0xfe, 0xff, 0xff, 0xff, //0x00003bce movq $-2, %rsi + 0xbf, 0x02, 0x00, 0x00, 0x00, //0x00003bd5 movl $2, %edi + 0x48, 0x83, 0xfa, 0xff, //0x00003bda cmpq $-1, %rdx + 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00003bde jne LBB0_687 + 0x49, 0x89, 0xc7, //0x00003be4 movq %rax, %r15 + 0x4d, 0x29, 0xf7, //0x00003be7 subq %r14, %r15 + 0x4c, 0x89, 0xfa, //0x00003bea movq %r15, %rdx + 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003bed jmp LBB0_687 + //0x00003bf2 LBB0_691 + 0x4c, 0x29, 0xf0, //0x00003bf2 subq %r14, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003bf5 addq $1, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x00003bf9 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003bfd vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7d, 0x7f, 0xda, //0x00003c02 vmovdqa %ymm11, %ymm2 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003c06 vmovdqa %ymm12, %ymm15 + //0x00003c0b LBB0_692 + 0xc5, 0xfe, 0x6f, 0x25, 0x8d, 0xc6, 0xff, 0xff, //0x00003c0b vmovdqu $-14707(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xa5, 0xc5, 0xff, 0xff, //0x00003c13 vmovdqu $-14939(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00003c1b vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x00003c1f vmovdqa %ymm1, %ymm12 + 0xe9, 0xb4, 0xea, 0xff, 0xff, //0x00003c23 jmp LBB0_473 + //0x00003c28 LBB0_693 + 0x4d, 0x85, 0xdb, //0x00003c28 testq %r11, %r11 + 0x0f, 0x84, 0x9a, 0x00, 0x00, 0x00, //0x00003c2b je LBB0_703 + 0x4c, 0x89, 0xf2, //0x00003c31 movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x00003c34 notq %rdx + 0x48, 0x8d, 0x0c, 0x10, //0x00003c37 leaq (%rax,%rdx), %rcx + 0x49, 0x83, 0xff, 0xff, //0x00003c3b cmpq $-1, %r15 + 0x4c, 0x89, 0xfe, //0x00003c3f movq %r15, %rsi + 0x4c, 0x0f, 0x44, 0xf9, //0x00003c42 cmoveq %rcx, %r15 + 0x48, 0x0f, 0x44, 0xf1, //0x00003c46 cmoveq %rcx, %rsi + 0x48, 0x83, 0xc0, 0x01, //0x00003c4a addq $1, %rax + 0x49, 0x83, 0xc3, 0xff, //0x00003c4e addq $-1, %r11 + 0x4d, 0x85, 0xdb, //0x00003c52 testq %r11, %r11 + 0x0f, 0x85, 0x6a, 0xfd, 0xff, 0xff, //0x00003c55 jne LBB0_660 + 0xe9, 0xe0, 0xfd, 0xff, 0xff, //0x00003c5b jmp LBB0_670 + //0x00003c60 LBB0_695 + 0x4d, 0x85, 0xed, //0x00003c60 testq %r13, %r13 + 0x0f, 0x84, 0x62, 0x00, 0x00, 0x00, //0x00003c63 je LBB0_703 + 0x4c, 0x89, 0xf2, //0x00003c69 movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x00003c6c notq %rdx + 0x48, 0x01, 0xc2, //0x00003c6f addq %rax, %rdx + 0x49, 0x83, 0xff, 0xff, //0x00003c72 cmpq $-1, %r15 + 0x4c, 0x89, 0xf9, //0x00003c76 movq %r15, %rcx + 0x48, 0x0f, 0x44, 0xca, //0x00003c79 cmoveq %rdx, %rcx + 0x49, 0x0f, 0x45, 0xd7, //0x00003c7d cmovneq %r15, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x00003c81 addq $1, %rax + 0x49, 0x83, 0xc5, 0xff, //0x00003c85 addq $-1, %r13 + 0x49, 0x89, 0xcf, //0x00003c89 movq %rcx, %r15 + 0x4d, 0x85, 0xed, //0x00003c8c testq %r13, %r13 + 0x0f, 0x85, 0xf4, 0xfe, 0xff, 0xff, //0x00003c8f jne LBB0_683 + 0xe9, 0x31, 0x00, 0x00, 0x00, //0x00003c95 jmp LBB0_703 + //0x00003c9a LBB0_697 + 0x4d, 0x89, 0x27, //0x00003c9a movq %r12, (%r15) + //0x00003c9d LBB0_698 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003c9d movq $-1, %rax + 0xe9, 0x6c, 0x00, 0x00, 0x00, //0x00003ca4 jmp LBB0_728 + //0x00003ca9 LBB0_724 + 0x48, 0xc7, 0xc0, 0xf9, 0xff, 0xff, 0xff, //0x00003ca9 movq $-7, %rax + 0xe9, 0x60, 0x00, 0x00, 0x00, //0x00003cb0 jmp LBB0_728 + //0x00003cb5 LBB0_700 + 0x49, 0x83, 0xc0, 0xff, //0x00003cb5 addq $-1, %r8 + 0x4c, 0x89, 0xc0, //0x00003cb9 movq %r8, %rax + 0xe9, 0x54, 0x00, 0x00, 0x00, //0x00003cbc jmp LBB0_728 + //0x00003cc1 LBB0_702 + 0x48, 0x83, 0xf8, 0xff, //0x00003cc1 cmpq $-1, %rax + 0x0f, 0x85, 0x87, 0x01, 0x00, 0x00, //0x00003cc5 jne LBB0_704 + //0x00003ccb LBB0_703 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003ccb movq $-1, %rax + 0x4d, 0x89, 0xc7, //0x00003cd2 movq %r8, %r15 + 0xe9, 0x78, 0x01, 0x00, 0x00, //0x00003cd5 jmp LBB0_704 + //0x00003cda LBB0_475 + 0x49, 0x83, 0xc1, 0xff, //0x00003cda addq $-1, %r9 + 0x4c, 0x89, 0xc8, //0x00003cde movq %r9, %rax + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00003ce1 jmp LBB0_728 + //0x00003ce6 LBB0_705 + 0x49, 0x83, 0xc5, 0xff, //0x00003ce6 addq $-1, %r13 + 0x4c, 0x89, 0xe8, //0x00003cea movq %r13, %rax + 0xe9, 0x23, 0x00, 0x00, 0x00, //0x00003ced jmp LBB0_728 + //0x00003cf2 LBB0_706 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003cf2 movq $-1, %rcx + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00003cf9 jmp LBB0_708 //0x00003cfe LBB0_707 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003cfe movq $-1, %rcx - 0x4d, 0x89, 0xfb, //0x00003d05 movq %r15, %r11 - 0xe9, 0x49, 0x00, 0x00, 0x00, //0x00003d08 jmp LBB0_716 - //0x00003d0d LBB0_708 - 0x4c, 0x89, 0xc9, //0x00003d0d movq %r9, %rcx - //0x00003d10 LBB0_709 - 0x48, 0xf7, 0xd1, //0x00003d10 notq %rcx - 0x49, 0x01, 0x4d, 0x00, //0x00003d13 addq %rcx, (%r13) - 0xe9, 0x71, 0xfe, 0xff, 0xff, //0x00003d17 jmp LBB0_710 - //0x00003d1c LBB0_717 - 0x4d, 0x89, 0xc8, //0x00003d1c movq %r9, %r8 - 0xe9, 0x2c, 0xfe, 0xff, 0xff, //0x00003d1f jmp LBB0_681 - //0x00003d24 LBB0_712 - 0x49, 0x83, 0xfa, 0xff, //0x00003d24 cmpq $-1, %r10 - 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00003d28 je LBB0_714 - 0x4d, 0x89, 0xd3, //0x00003d2e movq %r10, %r11 - 0xe9, 0x19, 0x00, 0x00, 0x00, //0x00003d31 jmp LBB0_715 - //0x00003d36 LBB0_209 - 0x4c, 0x01, 0xd2, //0x00003d36 addq %r10, %rdx - 0x49, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00003d39 movq $-2, %r10 - 0x49, 0x89, 0xd7, //0x00003d40 movq %rdx, %r15 - 0xe9, 0x84, 0xfe, 0xff, 0xff, //0x00003d43 jmp LBB0_703 - //0x00003d48 LBB0_714 - 0x4c, 0x0f, 0xbc, 0xde, //0x00003d48 bsfq %rsi, %r11 - 0x49, 0x01, 0xcb, //0x00003d4c addq %rcx, %r11 - //0x00003d4f LBB0_715 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003d4f movq $-2, %rcx - //0x00003d56 LBB0_716 - 0x48, 0x89, 0x0c, 0x24, //0x00003d56 movq %rcx, (%rsp) - 0x4d, 0x89, 0x5d, 0x00, //0x00003d5a movq %r11, (%r13) - 0xe9, 0x32, 0xfe, 0xff, 0xff, //0x00003d5e jmp LBB0_711 - //0x00003d63 LBB0_718 - 0x4d, 0x89, 0xcf, //0x00003d63 movq %r9, %r15 - 0xe9, 0x93, 0xff, 0xff, 0xff, //0x00003d66 jmp LBB0_707 - //0x00003d6b LBB0_719 - 0x48, 0x01, 0xca, //0x00003d6b addq %rcx, %rdx - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003d6e movq $-2, %rcx - 0x49, 0x89, 0xd3, //0x00003d75 movq %rdx, %r11 - 0xe9, 0xd9, 0xff, 0xff, 0xff, //0x00003d78 jmp LBB0_716 - //0x00003d7d LBB0_720 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00003d7d movq $16(%rsp), %rax - 0x48, 0x8b, 0x40, 0x08, //0x00003d82 movq $8(%rax), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003d86 movq %rax, (%r13) - 0xe9, 0x06, 0xfe, 0xff, 0xff, //0x00003d8a jmp LBB0_711 - //0x00003d8f LBB0_721 - 0x89, 0xf8, //0x00003d8f movl %edi, %eax - 0x4d, 0x29, 0xf2, //0x00003d91 subq %r14, %r10 - 0x49, 0x01, 0xc2, //0x00003d94 addq %rax, %r10 - 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00003d97 jmp LBB0_724 - //0x00003d9c LBB0_722 - 0x4d, 0x29, 0xf2, //0x00003d9c subq %r14, %r10 - 0x41, 0x89, 0xff, //0x00003d9f movl %edi, %r15d - 0xe9, 0x1b, 0xfe, 0xff, 0xff, //0x00003da2 jmp LBB0_701 - //0x00003da7 LBB0_723 - 0x4d, 0x29, 0xf2, //0x00003da7 subq %r14, %r10 - //0x00003daa LBB0_724 - 0x4d, 0x89, 0xd7, //0x00003daa movq %r10, %r15 - 0xe9, 0x13, 0xfe, 0xff, 0xff, //0x00003dad jmp LBB0_702 - //0x00003db2 LBB0_725 - 0x89, 0xf8, //0x00003db2 movl %edi, %eax - 0x4c, 0x29, 0xf1, //0x00003db4 subq %r14, %rcx - 0x48, 0x01, 0xc1, //0x00003db7 addq %rax, %rcx - 0x49, 0x89, 0xcb, //0x00003dba movq %rcx, %r11 - 0xe9, 0x8d, 0xff, 0xff, 0xff, //0x00003dbd jmp LBB0_715 - //0x00003dc2 LBB0_726 - 0x4c, 0x29, 0xf3, //0x00003dc2 subq %r14, %rbx - 0x41, 0x89, 0xfb, //0x00003dc5 movl %edi, %r11d - 0x49, 0x01, 0xdb, //0x00003dc8 addq %rbx, %r11 - 0xe9, 0x7f, 0xff, 0xff, 0xff, //0x00003dcb jmp LBB0_715 - //0x00003dd0 LBB0_727 - 0x48, 0x89, 0xc8, //0x00003dd0 movq %rcx, %rax - 0x4c, 0x29, 0xf0, //0x00003dd3 subq %r14, %rax - 0x49, 0x89, 0xc3, //0x00003dd6 movq %rax, %r11 - 0xe9, 0x71, 0xff, 0xff, 0xff, //0x00003dd9 jmp LBB0_715 - 0x90, 0x90, //0x00003dde .p2align 2, 0x90 + 0x4c, 0x89, 0xd1, //0x00003cfe movq %r10, %rcx + //0x00003d01 LBB0_708 + 0x49, 0x8b, 0x07, //0x00003d01 movq (%r15), %rax + 0x48, 0x29, 0xc8, //0x00003d04 subq %rcx, %rax + 0x48, 0x83, 0xc0, 0xfe, //0x00003d07 addq $-2, %rax + 0x49, 0x89, 0x07, //0x00003d0b movq %rax, (%r15) + //0x00003d0e LBB0_727 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d0e movq $-2, %rax + //0x00003d15 LBB0_728 + 0x48, 0x8d, 0x65, 0xd8, //0x00003d15 leaq $-40(%rbp), %rsp + 0x5b, //0x00003d19 popq %rbx + 0x41, 0x5c, //0x00003d1a popq %r12 + 0x41, 0x5d, //0x00003d1c popq %r13 + 0x41, 0x5e, //0x00003d1e popq %r14 + 0x41, 0x5f, //0x00003d20 popq %r15 + 0x5d, //0x00003d22 popq %rbp + 0xc5, 0xf8, 0x77, //0x00003d23 vzeroupper + 0xc3, //0x00003d26 retq + //0x00003d27 LBB0_711 + 0x49, 0x89, 0x17, //0x00003d27 movq %rdx, (%r15) + 0xe9, 0xe6, 0xff, 0xff, 0xff, //0x00003d2a jmp LBB0_728 + //0x00003d2f LBB0_709 + 0x49, 0x83, 0xff, 0xff, //0x00003d2f cmpq $-1, %r15 + 0x0f, 0x84, 0x0b, 0x01, 0x00, 0x00, //0x00003d33 je LBB0_730 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d39 movq $-2, %rax + 0xe9, 0x0d, 0x01, 0x00, 0x00, //0x00003d40 jmp LBB0_704 + //0x00003d45 LBB0_712 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d45 movq $-2, %rax + 0x80, 0xfa, 0x61, //0x00003d4c cmpb $97, %dl + 0x0f, 0x85, 0xc0, 0xff, 0xff, 0xff, //0x00003d4f jne LBB0_728 + 0x48, 0x8d, 0x51, 0x01, //0x00003d55 leaq $1(%rcx), %rdx + 0x49, 0x89, 0x17, //0x00003d59 movq %rdx, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x6c, //0x00003d5c cmpb $108, $1(%r14,%rcx) + 0x0f, 0x85, 0xad, 0xff, 0xff, 0xff, //0x00003d62 jne LBB0_728 + 0x48, 0x8d, 0x51, 0x02, //0x00003d68 leaq $2(%rcx), %rdx + 0x49, 0x89, 0x17, //0x00003d6c movq %rdx, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x73, //0x00003d6f cmpb $115, $2(%r14,%rcx) + 0x0f, 0x85, 0x9a, 0xff, 0xff, 0xff, //0x00003d75 jne LBB0_728 + 0x48, 0x8d, 0x51, 0x03, //0x00003d7b leaq $3(%rcx), %rdx + 0x49, 0x89, 0x17, //0x00003d7f movq %rdx, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x03, 0x65, //0x00003d82 cmpb $101, $3(%r14,%rcx) + 0x0f, 0x85, 0x87, 0xff, 0xff, 0xff, //0x00003d88 jne LBB0_728 + 0x48, 0x83, 0xc1, 0x04, //0x00003d8e addq $4, %rcx + 0x49, 0x89, 0x0f, //0x00003d92 movq %rcx, (%r15) + 0xe9, 0x7b, 0xff, 0xff, 0xff, //0x00003d95 jmp LBB0_728 + //0x00003d9a LBB0_270 + 0x49, 0x89, 0x07, //0x00003d9a movq %rax, (%r15) + 0x41, 0x80, 0x3c, 0x06, 0x6e, //0x00003d9d cmpb $110, (%r14,%rax) + 0x0f, 0x85, 0x66, 0xff, 0xff, 0xff, //0x00003da2 jne LBB0_727 + 0x49, 0x89, 0x0f, //0x00003da8 movq %rcx, (%r15) + 0x41, 0x80, 0x3c, 0x0e, 0x75, //0x00003dab cmpb $117, (%r14,%rcx) + 0x0f, 0x85, 0x58, 0xff, 0xff, 0xff, //0x00003db0 jne LBB0_727 + 0x48, 0x8d, 0x41, 0x01, //0x00003db6 leaq $1(%rcx), %rax + 0x49, 0x89, 0x07, //0x00003dba movq %rax, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x6c, //0x00003dbd cmpb $108, $1(%r14,%rcx) + 0x0f, 0x85, 0x45, 0xff, 0xff, 0xff, //0x00003dc3 jne LBB0_727 + 0x48, 0x8d, 0x41, 0x02, //0x00003dc9 leaq $2(%rcx), %rax + 0x49, 0x89, 0x07, //0x00003dcd movq %rax, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x6c, //0x00003dd0 cmpb $108, $2(%r14,%rcx) + 0x0f, 0x84, 0x47, 0x00, 0x00, 0x00, //0x00003dd6 je LBB0_721 + 0xe9, 0x2d, 0xff, 0xff, 0xff, //0x00003ddc jmp LBB0_727 + //0x00003de1 LBB0_717 + 0x49, 0x89, 0x07, //0x00003de1 movq %rax, (%r15) + 0x41, 0x80, 0x3c, 0x06, 0x74, //0x00003de4 cmpb $116, (%r14,%rax) + 0x0f, 0x85, 0x1f, 0xff, 0xff, 0xff, //0x00003de9 jne LBB0_727 + 0x49, 0x89, 0x0f, //0x00003def movq %rcx, (%r15) + 0x41, 0x80, 0x3c, 0x0e, 0x72, //0x00003df2 cmpb $114, (%r14,%rcx) + 0x0f, 0x85, 0x11, 0xff, 0xff, 0xff, //0x00003df7 jne LBB0_727 + 0x48, 0x8d, 0x41, 0x01, //0x00003dfd leaq $1(%rcx), %rax + 0x49, 0x89, 0x07, //0x00003e01 movq %rax, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x75, //0x00003e04 cmpb $117, $1(%r14,%rcx) + 0x0f, 0x85, 0xfe, 0xfe, 0xff, 0xff, //0x00003e0a jne LBB0_727 + 0x48, 0x8d, 0x41, 0x02, //0x00003e10 leaq $2(%rcx), %rax + 0x49, 0x89, 0x07, //0x00003e14 movq %rax, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x65, //0x00003e17 cmpb $101, $2(%r14,%rcx) + 0x0f, 0x85, 0xeb, 0xfe, 0xff, 0xff, //0x00003e1d jne LBB0_727 + //0x00003e23 LBB0_721 + 0x48, 0x83, 0xc1, 0x03, //0x00003e23 addq $3, %rcx + 0x49, 0x89, 0x0f, //0x00003e27 movq %rcx, (%r15) + 0xe9, 0xdf, 0xfe, 0xff, 0xff, //0x00003e2a jmp LBB0_727 + //0x00003e2f LBB0_394 + 0x48, 0x83, 0xc0, 0xff, //0x00003e2f addq $-1, %rax + 0xe9, 0xdd, 0xfe, 0xff, 0xff, //0x00003e33 jmp LBB0_728 + //0x00003e38 LBB0_267 + 0x48, 0x83, 0xc1, 0xff, //0x00003e38 addq $-1, %rcx + 0x48, 0x89, 0xc8, //0x00003e3c movq %rcx, %rax + 0xe9, 0xd1, 0xfe, 0xff, 0xff, //0x00003e3f jmp LBB0_728 + //0x00003e44 LBB0_730 + 0x4c, 0x0f, 0xbc, 0xfe, //0x00003e44 bsfq %rsi, %r15 + //0x00003e48 LBB0_731 + 0x49, 0x01, 0xc7, //0x00003e48 addq %rax, %r15 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003e4b movq $-2, %rax + //0x00003e52 LBB0_704 + 0x48, 0x8b, 0x4c, 0x24, 0x08, //0x00003e52 movq $8(%rsp), %rcx + 0x4c, 0x89, 0x39, //0x00003e57 movq %r15, (%rcx) + 0xe9, 0xb6, 0xfe, 0xff, 0xff, //0x00003e5a jmp LBB0_728 + //0x00003e5f LBB0_723 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003e5f movq $-1, %rcx + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00003e66 jmp LBB0_726 + //0x00003e6b LBB0_725 + 0x4c, 0x89, 0xc1, //0x00003e6b movq %r8, %rcx + //0x00003e6e LBB0_726 + 0x48, 0xf7, 0xd1, //0x00003e6e notq %rcx + 0x48, 0x8b, 0x44, 0x24, 0x08, //0x00003e71 movq $8(%rsp), %rax + 0x48, 0x01, 0x08, //0x00003e76 addq %rcx, (%rax) + 0xe9, 0x90, 0xfe, 0xff, 0xff, //0x00003e79 jmp LBB0_727 + //0x00003e7e LBB0_732 + 0x4d, 0x89, 0xc8, //0x00003e7e movq %r9, %r8 + 0xe9, 0x45, 0xfe, 0xff, 0xff, //0x00003e81 jmp LBB0_703 + //0x00003e86 LBB0_162 + 0x48, 0x01, 0xc2, //0x00003e86 addq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003e89 movq $-2, %rax + 0x49, 0x89, 0xd7, //0x00003e90 movq %rdx, %r15 + 0xe9, 0xba, 0xff, 0xff, 0xff, //0x00003e93 jmp LBB0_704 + //0x00003e98 LBB0_733 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00003e98 movq $32(%rsp), %rcx + 0x48, 0x8b, 0x49, 0x08, //0x00003e9d movq $8(%rcx), %rcx + 0x48, 0x8b, 0x54, 0x24, 0x08, //0x00003ea1 movq $8(%rsp), %rdx + 0x48, 0x89, 0x0a, //0x00003ea6 movq %rcx, (%rdx) + 0xe9, 0x67, 0xfe, 0xff, 0xff, //0x00003ea9 jmp LBB0_728 + //0x00003eae LBB0_734 + 0x89, 0xf9, //0x00003eae movl %edi, %ecx + 0x4c, 0x29, 0xf0, //0x00003eb0 subq %r14, %rax + 0x48, 0x01, 0xc8, //0x00003eb3 addq %rcx, %rax + 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00003eb6 jmp LBB0_737 + //0x00003ebb LBB0_735 + 0x4c, 0x29, 0xf0, //0x00003ebb subq %r14, %rax + 0x41, 0x89, 0xff, //0x00003ebe movl %edi, %r15d + 0xe9, 0x82, 0xff, 0xff, 0xff, //0x00003ec1 jmp LBB0_731 + //0x00003ec6 LBB0_736 + 0x4c, 0x29, 0xf0, //0x00003ec6 subq %r14, %rax + //0x00003ec9 LBB0_737 + 0x49, 0x89, 0xc7, //0x00003ec9 movq %rax, %r15 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003ecc movq $-2, %rax + 0xe9, 0x7a, 0xff, 0xff, 0xff, //0x00003ed3 jmp LBB0_704 + //0x00003ed8 .p2align 2, 0x90 // // .set L0_0_set_38, LBB0_38-LJTI0_0 // // .set L0_0_set_42, LBB0_42-LJTI0_0 // // .set L0_0_set_44, LBB0_44-LJTI0_0 - // // .set L0_0_set_63, LBB0_63-LJTI0_0 - // // .set L0_0_set_65, LBB0_65-LJTI0_0 - // // .set L0_0_set_68, LBB0_68-LJTI0_0 - //0x00003de0 LJTI0_0 - 0xf7, 0xc7, 0xff, 0xff, //0x00003de0 .long L0_0_set_38 - 0x27, 0xc8, 0xff, 0xff, //0x00003de4 .long L0_0_set_42 - 0x52, 0xc8, 0xff, 0xff, //0x00003de8 .long L0_0_set_44 - 0x9b, 0xc9, 0xff, 0xff, //0x00003dec .long L0_0_set_63 - 0xb0, 0xc9, 0xff, 0xff, //0x00003df0 .long L0_0_set_65 - 0x1a, 0xce, 0xff, 0xff, //0x00003df4 .long L0_0_set_68 - // // .set L0_1_set_711, LBB0_711-LJTI0_1 - // // .set L0_1_set_710, LBB0_710-LJTI0_1 - // // .set L0_1_set_234, LBB0_234-LJTI0_1 - // // .set L0_1_set_253, LBB0_253-LJTI0_1 - // // .set L0_1_set_70, LBB0_70-LJTI0_1 - // // .set L0_1_set_258, LBB0_258-LJTI0_1 + // // .set L0_0_set_64, LBB0_64-LJTI0_0 + // // .set L0_0_set_66, LBB0_66-LJTI0_0 + // // .set L0_0_set_69, LBB0_69-LJTI0_0 + //0x00003ed8 LJTI0_0 + 0x45, 0xc7, 0xff, 0xff, //0x00003ed8 .long L0_0_set_38 + 0x6d, 0xc7, 0xff, 0xff, //0x00003edc .long L0_0_set_42 + 0x98, 0xc7, 0xff, 0xff, //0x00003ee0 .long L0_0_set_44 + 0xe5, 0xc8, 0xff, 0xff, //0x00003ee4 .long L0_0_set_64 + 0xfc, 0xc8, 0xff, 0xff, //0x00003ee8 .long L0_0_set_66 + 0x76, 0xc9, 0xff, 0xff, //0x00003eec .long L0_0_set_69 + // // .set L0_1_set_728, LBB0_728-LJTI0_1 + // // .set L0_1_set_727, LBB0_727-LJTI0_1 + // // .set L0_1_set_238, LBB0_238-LJTI0_1 + // // .set L0_1_set_256, LBB0_256-LJTI0_1 + // // .set L0_1_set_71, LBB0_71-LJTI0_1 // // .set L0_1_set_261, LBB0_261-LJTI0_1 - // // .set L0_1_set_265, LBB0_265-LJTI0_1 - // // .set L0_1_set_271, LBB0_271-LJTI0_1 + // // .set L0_1_set_264, LBB0_264-LJTI0_1 + // // .set L0_1_set_268, LBB0_268-LJTI0_1 // // .set L0_1_set_274, LBB0_274-LJTI0_1 - //0x00003df8 LJTI0_1 - 0x9d, 0xfd, 0xff, 0xff, //0x00003df8 .long L0_1_set_711 - 0x95, 0xfd, 0xff, 0xff, //0x00003dfc .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e00 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e04 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e08 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e0c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e10 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e14 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e18 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e1c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e20 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e24 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e28 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e2c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e30 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e34 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e38 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e3c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e40 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e44 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e48 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e4c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e50 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e54 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e58 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e5c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e60 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e64 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e68 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e6c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e70 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e74 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e78 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e7c .long L0_1_set_710 - 0x52, 0xd5, 0xff, 0xff, //0x00003e80 .long L0_1_set_234 - 0x95, 0xfd, 0xff, 0xff, //0x00003e84 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e88 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e8c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e90 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e94 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e98 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e9c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ea0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ea4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ea8 .long L0_1_set_710 - 0x97, 0xd6, 0xff, 0xff, //0x00003eac .long L0_1_set_253 - 0x95, 0xfd, 0xff, 0xff, //0x00003eb0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003eb4 .long L0_1_set_710 - 0xcb, 0xc9, 0xff, 0xff, //0x00003eb8 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ebc .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ec0 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ec4 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ec8 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ecc .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ed0 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ed4 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ed8 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003edc .long L0_1_set_70 - 0x95, 0xfd, 0xff, 0xff, //0x00003ee0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ee4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ee8 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003eec .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ef0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ef4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ef8 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003efc .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f00 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f04 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f08 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f0c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f10 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f14 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f18 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f1c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f20 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f24 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f28 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f2c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f30 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f34 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f38 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f3c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f40 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f44 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f48 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f4c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f50 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f54 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f58 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f5c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f60 .long L0_1_set_710 - 0xe1, 0xd6, 0xff, 0xff, //0x00003f64 .long L0_1_set_258 - 0x95, 0xfd, 0xff, 0xff, //0x00003f68 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f6c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f70 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f74 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f78 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f7c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f80 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f84 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f88 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f8c .long L0_1_set_710 - 0x10, 0xd7, 0xff, 0xff, //0x00003f90 .long L0_1_set_261 - 0x95, 0xfd, 0xff, 0xff, //0x00003f94 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f98 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f9c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fa0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fa4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fa8 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fac .long L0_1_set_710 - 0x4b, 0xd7, 0xff, 0xff, //0x00003fb0 .long L0_1_set_265 - 0x95, 0xfd, 0xff, 0xff, //0x00003fb4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fb8 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fbc .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fc0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fc4 .long L0_1_set_710 - 0x78, 0xd7, 0xff, 0xff, //0x00003fc8 .long L0_1_set_271 - 0x95, 0xfd, 0xff, 0xff, //0x00003fcc .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fd0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fd4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fd8 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fdc .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fe0 .long L0_1_set_710 - 0xba, 0xd7, 0xff, 0xff, //0x00003fe4 .long L0_1_set_274 - // // .set L0_2_set_445, LBB0_445-LJTI0_2 - // // .set L0_2_set_467, LBB0_467-LJTI0_2 - // // .set L0_2_set_451, LBB0_451-LJTI0_2 - // // .set L0_2_set_454, LBB0_454-LJTI0_2 - //0x00003fe8 LJTI0_2 - 0x2a, 0xe4, 0xff, 0xff, //0x00003fe8 .long L0_2_set_445 - 0x9f, 0xe5, 0xff, 0xff, //0x00003fec .long L0_2_set_467 - 0x2a, 0xe4, 0xff, 0xff, //0x00003ff0 .long L0_2_set_445 - 0x72, 0xe4, 0xff, 0xff, //0x00003ff4 .long L0_2_set_451 - 0x9f, 0xe5, 0xff, 0xff, //0x00003ff8 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00003ffc .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004000 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004004 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004008 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x0000400c .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004010 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004014 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004018 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x0000401c .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004020 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004024 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004028 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x0000402c .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004030 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004034 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004038 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x0000403c .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004040 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004044 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004048 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x0000404c .long L0_2_set_467 - 0x95, 0xe4, 0xff, 0xff, //0x00004050 .long L0_2_set_454 - // // .set L0_3_set_121, LBB0_121-LJTI0_3 - // // .set L0_3_set_278, LBB0_278-LJTI0_3 - // // .set L0_3_set_115, LBB0_115-LJTI0_3 - // // .set L0_3_set_124, LBB0_124-LJTI0_3 - //0x00004054 LJTI0_3 - 0x77, 0xcb, 0xff, 0xff, //0x00004054 .long L0_3_set_121 - 0xa4, 0xd5, 0xff, 0xff, //0x00004058 .long L0_3_set_278 - 0x77, 0xcb, 0xff, 0xff, //0x0000405c .long L0_3_set_121 - 0x21, 0xcb, 0xff, 0xff, //0x00004060 .long L0_3_set_115 - 0xa4, 0xd5, 0xff, 0xff, //0x00004064 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004068 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x0000406c .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004070 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004074 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004078 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x0000407c .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004080 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004084 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004088 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x0000408c .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004090 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004094 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004098 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x0000409c .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040a0 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040a4 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040a8 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040ac .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040b0 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040b4 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040b8 .long L0_3_set_278 - 0x93, 0xcb, 0xff, 0xff, //0x000040bc .long L0_3_set_124 - //0x000040c0 .p2align 2, 0x00 - //0x000040c0 _MASK_USE_NUMBER - 0x02, 0x00, 0x00, 0x00, //0x000040c0 .long 2 + // // .set L0_1_set_277, LBB0_277-LJTI0_1 + //0x00003ef0 LJTI0_1 + 0x25, 0xfe, 0xff, 0xff, //0x00003ef0 .long L0_1_set_728 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ef4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ef8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003efc .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f00 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f04 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f08 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f0c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f10 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f14 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f18 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f1c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f20 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f24 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f28 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f2c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f30 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f34 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f38 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f3c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f40 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f44 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f48 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f4c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f50 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f54 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f58 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f5c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f60 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f64 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f68 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f6c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f70 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f74 .long L0_1_set_727 + 0x4f, 0xd5, 0xff, 0xff, //0x00003f78 .long L0_1_set_238 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f7c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f80 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f84 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f88 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f8c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f90 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f94 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f98 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f9c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fa0 .long L0_1_set_727 + 0x88, 0xd6, 0xff, 0xff, //0x00003fa4 .long L0_1_set_256 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fa8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fac .long L0_1_set_727 + 0x11, 0xc9, 0xff, 0xff, //0x00003fb0 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fb4 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fb8 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fbc .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fc0 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fc4 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fc8 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fcc .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fd0 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fd4 .long L0_1_set_71 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fd8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fdc .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fe0 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fe4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fe8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fec .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ff0 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ff4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ff8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ffc .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004000 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004004 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004008 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000400c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004010 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004014 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004018 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000401c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004020 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004024 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004028 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000402c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004030 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004034 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004038 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000403c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004040 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004044 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004048 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000404c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004050 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004054 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004058 .long L0_1_set_727 + 0xd0, 0xd6, 0xff, 0xff, //0x0000405c .long L0_1_set_261 + 0x1e, 0xfe, 0xff, 0xff, //0x00004060 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004064 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004068 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000406c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004070 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004074 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004078 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000407c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004080 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004084 .long L0_1_set_727 + 0x04, 0xd7, 0xff, 0xff, //0x00004088 .long L0_1_set_264 + 0x1e, 0xfe, 0xff, 0xff, //0x0000408c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004090 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004094 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004098 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000409c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040a0 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040a4 .long L0_1_set_727 + 0x42, 0xd7, 0xff, 0xff, //0x000040a8 .long L0_1_set_268 + 0x1e, 0xfe, 0xff, 0xff, //0x000040ac .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040b0 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040b4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040b8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040bc .long L0_1_set_727 + 0x73, 0xd7, 0xff, 0xff, //0x000040c0 .long L0_1_set_274 + 0x1e, 0xfe, 0xff, 0xff, //0x000040c4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040c8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040cc .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040d0 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040d4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040d8 .long L0_1_set_727 + 0xb4, 0xd7, 0xff, 0xff, //0x000040dc .long L0_1_set_277 + // // .set L0_2_set_463, LBB0_463-LJTI0_2 + // // .set L0_2_set_484, LBB0_484-LJTI0_2 + // // .set L0_2_set_465, LBB0_465-LJTI0_2 + // // .set L0_2_set_457, LBB0_457-LJTI0_2 + //0x000040e0 LJTI0_2 + 0x7a, 0xe5, 0xff, 0xff, //0x000040e0 .long L0_2_set_463 + 0xdf, 0xe6, 0xff, 0xff, //0x000040e4 .long L0_2_set_484 + 0x7a, 0xe5, 0xff, 0xff, //0x000040e8 .long L0_2_set_463 + 0x8d, 0xe5, 0xff, 0xff, //0x000040ec .long L0_2_set_465 + 0xdf, 0xe6, 0xff, 0xff, //0x000040f0 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x000040f4 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x000040f8 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x000040fc .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004100 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004104 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004108 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x0000410c .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004110 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004114 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004118 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x0000411c .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004120 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004124 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004128 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x0000412c .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004130 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004134 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004138 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x0000413c .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004140 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004144 .long L0_2_set_484 + 0x2a, 0xe5, 0xff, 0xff, //0x00004148 .long L0_2_set_457 + // // .set L0_3_set_230, LBB0_230-LJTI0_3 + // // .set L0_3_set_281, LBB0_281-LJTI0_3 + // // .set L0_3_set_232, LBB0_232-LJTI0_3 + // // .set L0_3_set_224, LBB0_224-LJTI0_3 + //0x0000414c LJTI0_3 + 0xae, 0xd2, 0xff, 0xff, //0x0000414c .long L0_3_set_230 + 0xa2, 0xd5, 0xff, 0xff, //0x00004150 .long L0_3_set_281 + 0xae, 0xd2, 0xff, 0xff, //0x00004154 .long L0_3_set_230 + 0xc8, 0xd2, 0xff, 0xff, //0x00004158 .long L0_3_set_232 + 0xa2, 0xd5, 0xff, 0xff, //0x0000415c .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004160 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004164 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004168 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x0000416c .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004170 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004174 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004178 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x0000417c .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004180 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004184 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004188 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x0000418c .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004190 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004194 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004198 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x0000419c .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x000041a0 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x000041a4 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x000041a8 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x000041ac .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x000041b0 .long L0_3_set_281 + 0x66, 0xd2, 0xff, 0xff, //0x000041b4 .long L0_3_set_224 + //0x000041b8 .p2align 2, 0x00 + //0x000041b8 _MASK_USE_NUMBER + 0x02, 0x00, 0x00, 0x00, //0x000041b8 .long 2 } diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_object_subr.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_object_subr.go index 388203d..b8a16c1 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_object_subr.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_object_subr.go @@ -16,7 +16,7 @@ const ( ) const ( - _size__skip_object = 15136 + _size__skip_object = 15384 ) var ( @@ -28,15 +28,15 @@ var ( {0xc, 32}, {0xd, 40}, {0x14, 48}, - {0x38dd, 208}, - {0x38de, 48}, - {0x38e0, 40}, - {0x38e2, 32}, - {0x38e4, 24}, - {0x38e6, 16}, - {0x38e7, 8}, - {0x38eb, 0}, - {0x3b20, 208}, + {0x3a59, 208}, + {0x3a5a, 48}, + {0x3a5c, 40}, + {0x3a5e, 32}, + {0x3a60, 24}, + {0x3a62, 16}, + {0x3a63, 8}, + {0x3a67, 0}, + {0x3c18, 208}, } ) diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_object_text_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_object_text_amd64.go index 4346e8f..37a983c 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_object_text_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_object_text_amd64.go @@ -118,4081 +118,4142 @@ var _text_skip_object = []byte{ 0x53, //0x000002cc pushq %rbx 0x48, 0x81, 0xec, 0xa0, 0x00, 0x00, 0x00, //0x000002cd subq $160, %rsp 0x49, 0x89, 0xcb, //0x000002d4 movq %rcx, %r11 - 0x49, 0x89, 0xd7, //0x000002d7 movq %rdx, %r15 - 0x49, 0x89, 0xf5, //0x000002da movq %rsi, %r13 - 0xc5, 0xfa, 0x6f, 0x05, 0x1b, 0xfd, 0xff, 0xff, //0x000002dd vmovdqu $-741(%rip), %xmm0 /* LCPI0_0+0(%rip) */ - 0xc5, 0xfa, 0x7f, 0x02, //0x000002e5 vmovdqu %xmm0, (%rdx) - 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x000002e9 movq $-1, %r12 - 0xc5, 0xfe, 0x6f, 0x2d, 0xc8, 0xfd, 0xff, 0xff, //0x000002f0 vmovdqu $-568(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0xe0, 0xfd, 0xff, 0xff, //0x000002f8 vmovdqu $-544(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0xf8, 0xfd, 0xff, 0xff, //0x00000300 vmovdqu $-520(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x10, 0xfe, 0xff, 0xff, //0x00000308 vmovdqu $-496(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00000310 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0xe3, 0xfe, 0xff, 0xff, //0x00000315 vmovdqu $-285(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0xfb, 0xfe, 0xff, 0xff, //0x0000031d vmovdqu $-261(%rip), %ymm13 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0x13, 0xff, 0xff, 0xff, //0x00000325 vmovdqu $-237(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0xab, 0xfe, 0xff, 0xff, //0x0000032d vmovdqu $-341(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x63, 0xff, 0xff, 0xff, //0x00000335 vmovdqu $-157(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x7b, 0xfe, 0xff, 0xff, //0x0000033d vmovdqu $-389(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0xf3, 0xfd, 0xff, 0xff, //0x00000345 vmovdqu $-525(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x0b, 0xfe, 0xff, 0xff, //0x0000034d vmovdqu $-501(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - 0x48, 0x89, 0x4c, 0x24, 0x18, //0x00000355 movq %rcx, $24(%rsp) - 0x48, 0x89, 0x7c, 0x24, 0x10, //0x0000035a movq %rdi, $16(%rsp) - 0x48, 0x89, 0x54, 0x24, 0x08, //0x0000035f movq %rdx, $8(%rsp) - 0xe9, 0x77, 0x00, 0x00, 0x00, //0x00000364 jmp LBB0_5 - //0x00000369 LBB0_153 - 0x41, 0x0f, 0xbc, 0xc3, //0x00000369 bsfl %r11d, %eax - 0x4c, 0x01, 0xc0, //0x0000036d addq %r8, %rax - 0x4c, 0x8d, 0x0c, 0x06, //0x00000370 leaq (%rsi,%rax), %r9 - 0x49, 0x83, 0xc1, 0x01, //0x00000374 addq $1, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00000378 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x0000037d movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00000382 movq $8(%rsp), %r15 - 0x4d, 0x89, 0x4d, 0x00, //0x00000387 movq %r9, (%r13) - 0x4d, 0x85, 0xc0, //0x0000038b testq %r8, %r8 - 0x0f, 0x8e, 0x98, 0x37, 0x00, 0x00, //0x0000038e jle LBB0_679 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000394 .p2align 4, 0x90 + 0x49, 0x89, 0xf7, //0x000002d7 movq %rsi, %r15 + 0x48, 0x89, 0x7c, 0x24, 0x20, //0x000002da movq %rdi, $32(%rsp) + 0xc5, 0xfa, 0x6f, 0x05, 0x19, 0xfd, 0xff, 0xff, //0x000002df vmovdqu $-743(%rip), %xmm0 /* LCPI0_0+0(%rip) */ + 0x48, 0x89, 0x54, 0x24, 0x18, //0x000002e7 movq %rdx, $24(%rsp) + 0xc5, 0xfa, 0x7f, 0x02, //0x000002ec vmovdqu %xmm0, (%rdx) + 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x000002f0 movq $-1, %r12 + 0xc5, 0xfe, 0x6f, 0x2d, 0xc1, 0xfd, 0xff, 0xff, //0x000002f7 vmovdqu $-575(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0xd9, 0xfd, 0xff, 0xff, //0x000002ff vmovdqu $-551(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0xf1, 0xfd, 0xff, 0xff, //0x00000307 vmovdqu $-527(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x09, 0xfe, 0xff, 0xff, //0x0000030f vmovdqu $-503(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00000317 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0xdc, 0xfe, 0xff, 0xff, //0x0000031c vmovdqu $-292(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0xf4, 0xfe, 0xff, 0xff, //0x00000324 vmovdqu $-268(%rip), %ymm13 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0x0c, 0xff, 0xff, 0xff, //0x0000032c vmovdqu $-244(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0xa4, 0xfe, 0xff, 0xff, //0x00000334 vmovdqu $-348(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x5c, 0xff, 0xff, 0xff, //0x0000033c vmovdqu $-164(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x74, 0xfe, 0xff, 0xff, //0x00000344 vmovdqu $-396(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0xec, 0xfd, 0xff, 0xff, //0x0000034c vmovdqu $-532(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x04, 0xfe, 0xff, 0xff, //0x00000354 vmovdqu $-508(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + 0x48, 0x89, 0x74, 0x24, 0x08, //0x0000035c movq %rsi, $8(%rsp) + 0x48, 0x89, 0x0c, 0x24, //0x00000361 movq %rcx, (%rsp) + 0xe9, 0x96, 0x00, 0x00, 0x00, //0x00000365 jmp LBB0_5 + //0x0000036a LBB0_235 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000036a movl $64, %edx + 0x4c, 0x8b, 0x1c, 0x24, //0x0000036f movq (%rsp), %r11 + 0x48, 0x39, 0xca, //0x00000373 cmpq %rcx, %rdx + 0x0f, 0x82, 0x0a, 0x3b, 0x00, 0x00, //0x00000376 jb LBB0_162 + //0x0000037c LBB0_236 + 0x48, 0x01, 0xc8, //0x0000037c addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000037f addq $1, %rax + 0x48, 0x85, 0xc0, //0x00000383 testq %rax, %rax + 0x0f, 0x88, 0x35, 0x39, 0x00, 0x00, //0x00000386 js LBB0_702 + //0x0000038c LBB0_237 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000038c movq $8(%rsp), %r15 + 0x49, 0x89, 0x07, //0x00000391 movq %rax, (%r15) + 0x4d, 0x85, 0xc9, //0x00000394 testq %r9, %r9 + 0x0f, 0x8e, 0x3d, 0x39, 0x00, 0x00, //0x00000397 jle LBB0_475 + 0x90, 0x90, 0x90, //0x0000039d .p2align 4, 0x90 //0x000003a0 LBB0_3 - 0x4d, 0x8b, 0x07, //0x000003a0 movq (%r15), %r8 - 0x4c, 0x89, 0x24, 0x24, //0x000003a3 movq %r12, (%rsp) - 0x4d, 0x85, 0xc0, //0x000003a7 testq %r8, %r8 - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000003aa jne LBB0_5 - 0xe9, 0xe0, 0x37, 0x00, 0x00, //0x000003b0 jmp LBB0_711 - //0x000003b5 LBB0_1 - 0x48, 0x89, 0xd1, //0x000003b5 movq %rdx, %rcx - //0x000003b8 LBB0_2 - 0x4c, 0x01, 0xe9, //0x000003b8 addq %r13, %rcx - 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x000003bb movq $48(%rsp), %r13 - 0x49, 0x89, 0x4d, 0x00, //0x000003c0 movq %rcx, (%r13) - 0x48, 0x85, 0xdb, //0x000003c4 testq %rbx, %rbx - 0x0f, 0x8f, 0xd3, 0xff, 0xff, 0xff, //0x000003c7 jg LBB0_3 - 0xe9, 0xc3, 0x37, 0x00, 0x00, //0x000003cd jmp LBB0_711 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000003d2 .p2align 4, 0x90 - //0x000003e0 LBB0_5 - 0x4d, 0x89, 0xe1, //0x000003e0 movq %r12, %r9 - 0x4c, 0x8b, 0x37, //0x000003e3 movq (%rdi), %r14 - 0x48, 0x8b, 0x5f, 0x08, //0x000003e6 movq $8(%rdi), %rbx - 0x49, 0x8b, 0x75, 0x00, //0x000003ea movq (%r13), %rsi - 0x48, 0x39, 0xde, //0x000003ee cmpq %rbx, %rsi - 0x0f, 0x83, 0x29, 0x00, 0x00, 0x00, //0x000003f1 jae LBB0_10 - 0x41, 0x8a, 0x04, 0x36, //0x000003f7 movb (%r14,%rsi), %al - 0x3c, 0x0d, //0x000003fb cmpb $13, %al - 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x000003fd je LBB0_10 - 0x3c, 0x20, //0x00000403 cmpb $32, %al - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000405 je LBB0_10 - 0x04, 0xf7, //0x0000040b addb $-9, %al - 0x3c, 0x01, //0x0000040d cmpb $1, %al - 0x0f, 0x86, 0x0b, 0x00, 0x00, 0x00, //0x0000040f jbe LBB0_10 - 0x49, 0x89, 0xf4, //0x00000415 movq %rsi, %r12 - 0xe9, 0x75, 0x01, 0x00, 0x00, //0x00000418 jmp LBB0_35 - 0x90, 0x90, 0x90, //0x0000041d .p2align 4, 0x90 - //0x00000420 LBB0_10 - 0x4c, 0x8d, 0x66, 0x01, //0x00000420 leaq $1(%rsi), %r12 - 0x49, 0x39, 0xdc, //0x00000424 cmpq %rbx, %r12 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000427 jae LBB0_14 - 0x43, 0x8a, 0x14, 0x26, //0x0000042d movb (%r14,%r12), %dl - 0x80, 0xfa, 0x0d, //0x00000431 cmpb $13, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000434 je LBB0_14 - 0x80, 0xfa, 0x20, //0x0000043a cmpb $32, %dl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000043d je LBB0_14 - 0x80, 0xc2, 0xf7, //0x00000443 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x00000446 cmpb $1, %dl - 0x0f, 0x87, 0x43, 0x01, 0x00, 0x00, //0x00000449 ja LBB0_35 - 0x90, //0x0000044f .p2align 4, 0x90 - //0x00000450 LBB0_14 - 0x4c, 0x8d, 0x66, 0x02, //0x00000450 leaq $2(%rsi), %r12 - 0x49, 0x39, 0xdc, //0x00000454 cmpq %rbx, %r12 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000457 jae LBB0_18 - 0x43, 0x8a, 0x14, 0x26, //0x0000045d movb (%r14,%r12), %dl - 0x80, 0xfa, 0x0d, //0x00000461 cmpb $13, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000464 je LBB0_18 - 0x80, 0xfa, 0x20, //0x0000046a cmpb $32, %dl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000046d je LBB0_18 - 0x80, 0xc2, 0xf7, //0x00000473 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x00000476 cmpb $1, %dl - 0x0f, 0x87, 0x13, 0x01, 0x00, 0x00, //0x00000479 ja LBB0_35 - 0x90, //0x0000047f .p2align 4, 0x90 - //0x00000480 LBB0_18 - 0x4c, 0x8d, 0x66, 0x03, //0x00000480 leaq $3(%rsi), %r12 - 0x49, 0x39, 0xdc, //0x00000484 cmpq %rbx, %r12 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000487 jae LBB0_22 - 0x43, 0x8a, 0x14, 0x26, //0x0000048d movb (%r14,%r12), %dl - 0x80, 0xfa, 0x0d, //0x00000491 cmpb $13, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000494 je LBB0_22 - 0x80, 0xfa, 0x20, //0x0000049a cmpb $32, %dl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000049d je LBB0_22 - 0x80, 0xc2, 0xf7, //0x000004a3 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x000004a6 cmpb $1, %dl - 0x0f, 0x87, 0xe3, 0x00, 0x00, 0x00, //0x000004a9 ja LBB0_35 - 0x90, //0x000004af .p2align 4, 0x90 - //0x000004b0 LBB0_22 - 0x4c, 0x8d, 0x66, 0x04, //0x000004b0 leaq $4(%rsi), %r12 - 0x48, 0x89, 0xd8, //0x000004b4 movq %rbx, %rax - 0x4c, 0x29, 0xe0, //0x000004b7 subq %r12, %rax - 0x0f, 0x86, 0x4e, 0x36, 0x00, 0x00, //0x000004ba jbe LBB0_675 - 0x48, 0x83, 0xf8, 0x20, //0x000004c0 cmpq $32, %rax - 0x0f, 0x82, 0x69, 0x23, 0x00, 0x00, //0x000004c4 jb LBB0_488 - 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x000004ca movq $-4, %rax - 0x48, 0x29, 0xf0, //0x000004d1 subq %rsi, %rax - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000004d4 .p2align 4, 0x90 - //0x000004e0 LBB0_25 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x26, //0x000004e0 vmovdqu (%r14,%r12), %ymm0 - 0xc4, 0xe2, 0x55, 0x00, 0xc8, //0x000004e6 vpshufb %ymm0, %ymm5, %ymm1 - 0xc5, 0xfd, 0x74, 0xc1, //0x000004eb vpcmpeqb %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x000004ef vpmovmskb %ymm0, %edx - 0x83, 0xfa, 0xff, //0x000004f3 cmpl $-1, %edx - 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x000004f6 jne LBB0_34 - 0x49, 0x83, 0xc4, 0x20, //0x000004fc addq $32, %r12 - 0x48, 0x8d, 0x14, 0x03, //0x00000500 leaq (%rbx,%rax), %rdx - 0x48, 0x83, 0xc2, 0xe0, //0x00000504 addq $-32, %rdx - 0x48, 0x83, 0xc0, 0xe0, //0x00000508 addq $-32, %rax - 0x48, 0x83, 0xfa, 0x1f, //0x0000050c cmpq $31, %rdx - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00000510 ja LBB0_25 - 0x4d, 0x89, 0xf4, //0x00000516 movq %r14, %r12 - 0x49, 0x29, 0xc4, //0x00000519 subq %rax, %r12 - 0x48, 0x01, 0xd8, //0x0000051c addq %rbx, %rax - 0x48, 0x85, 0xc0, //0x0000051f testq %rax, %rax - 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00000522 je LBB0_33 - //0x00000528 LBB0_28 - 0x4d, 0x8d, 0x04, 0x04, //0x00000528 leaq (%r12,%rax), %r8 - 0x31, 0xd2, //0x0000052c xorl %edx, %edx - 0x90, 0x90, //0x0000052e .p2align 4, 0x90 - //0x00000530 LBB0_29 - 0x41, 0x0f, 0xbe, 0x34, 0x14, //0x00000530 movsbl (%r12,%rdx), %esi - 0x83, 0xfe, 0x20, //0x00000535 cmpl $32, %esi - 0x0f, 0x87, 0x78, 0x1f, 0x00, 0x00, //0x00000538 ja LBB0_676 - 0x48, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000053e movabsq $4294977024, %rcx - 0x48, 0x0f, 0xa3, 0xf1, //0x00000548 btq %rsi, %rcx - 0x0f, 0x83, 0x64, 0x1f, 0x00, 0x00, //0x0000054c jae LBB0_676 - 0x48, 0x83, 0xc2, 0x01, //0x00000552 addq $1, %rdx - 0x48, 0x39, 0xd0, //0x00000556 cmpq %rdx, %rax - 0x0f, 0x85, 0xd1, 0xff, 0xff, 0xff, //0x00000559 jne LBB0_29 - 0x4d, 0x89, 0xc4, //0x0000055f movq %r8, %r12 - //0x00000562 LBB0_33 - 0x4d, 0x29, 0xf4, //0x00000562 subq %r14, %r12 - 0x49, 0x39, 0xdc, //0x00000565 cmpq %rbx, %r12 - 0x0f, 0x82, 0x24, 0x00, 0x00, 0x00, //0x00000568 jb LBB0_35 - 0xe9, 0x9f, 0x35, 0x00, 0x00, //0x0000056e jmp LBB0_677 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000573 .p2align 4, 0x90 - //0x00000580 LBB0_34 - 0xf7, 0xd2, //0x00000580 notl %edx - 0x44, 0x0f, 0xbc, 0xe2, //0x00000582 bsfl %edx, %r12d - 0x49, 0x29, 0xc4, //0x00000586 subq %rax, %r12 - 0x49, 0x39, 0xdc, //0x00000589 cmpq %rbx, %r12 - 0x0f, 0x83, 0x80, 0x35, 0x00, 0x00, //0x0000058c jae LBB0_677 - //0x00000592 LBB0_35 - 0x49, 0x8d, 0x54, 0x24, 0x01, //0x00000592 leaq $1(%r12), %rdx - 0x49, 0x89, 0x55, 0x00, //0x00000597 movq %rdx, (%r13) - 0x43, 0x0f, 0xbe, 0x04, 0x26, //0x0000059b movsbl (%r14,%r12), %eax - 0x85, 0xc0, //0x000005a0 testl %eax, %eax - 0x0f, 0x84, 0x6a, 0x35, 0x00, 0x00, //0x000005a2 je LBB0_677 - 0x49, 0x8b, 0x37, //0x000005a8 movq (%r15), %rsi - 0x4c, 0x8d, 0x46, 0xff, //0x000005ab leaq $-1(%rsi), %r8 - 0x41, 0x8b, 0x1c, 0xf7, //0x000005af movl (%r15,%rsi,8), %ebx - 0x49, 0x83, 0xf9, 0xff, //0x000005b3 cmpq $-1, %r9 - 0x4d, 0x0f, 0x45, 0xe1, //0x000005b7 cmovneq %r9, %r12 - 0x83, 0xc3, 0xff, //0x000005bb addl $-1, %ebx - 0x83, 0xfb, 0x05, //0x000005be cmpl $5, %ebx - 0x0f, 0x87, 0x27, 0x00, 0x00, 0x00, //0x000005c1 ja LBB0_41 - 0x48, 0x8d, 0x15, 0x12, 0x38, 0x00, 0x00, //0x000005c7 leaq $14354(%rip), %rdx /* LJTI0_0+0(%rip) */ - 0x48, 0x63, 0x0c, 0x9a, //0x000005ce movslq (%rdx,%rbx,4), %rcx - 0x48, 0x01, 0xd1, //0x000005d2 addq %rdx, %rcx - 0xff, 0xe1, //0x000005d5 jmpq *%rcx - //0x000005d7 LBB0_38 - 0x83, 0xf8, 0x2c, //0x000005d7 cmpl $44, %eax - 0x0f, 0x84, 0x41, 0x06, 0x00, 0x00, //0x000005da je LBB0_126 - 0x83, 0xf8, 0x5d, //0x000005e0 cmpl $93, %eax - 0x0f, 0x84, 0x23, 0x06, 0x00, 0x00, //0x000005e3 je LBB0_40 - 0xe9, 0x9f, 0x35, 0x00, 0x00, //0x000005e9 jmp LBB0_710 - //0x000005ee LBB0_41 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x000005ee movq $-1, (%rsp) - 0x4d, 0x89, 0x07, //0x000005f6 movq %r8, (%r15) - 0x83, 0xf8, 0x7b, //0x000005f9 cmpl $123, %eax - 0x0f, 0x86, 0xaf, 0x01, 0x00, 0x00, //0x000005fc jbe LBB0_67 - 0xe9, 0x86, 0x35, 0x00, 0x00, //0x00000602 jmp LBB0_710 - //0x00000607 LBB0_42 - 0x83, 0xf8, 0x2c, //0x00000607 cmpl $44, %eax - 0x0f, 0x85, 0xf3, 0x05, 0x00, 0x00, //0x0000060a jne LBB0_43 - 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00000610 cmpq $4095, %rsi - 0x0f, 0x8f, 0x02, 0x35, 0x00, 0x00, //0x00000617 jg LBB0_705 - 0x48, 0x8d, 0x4e, 0x01, //0x0000061d leaq $1(%rsi), %rcx - 0x49, 0x89, 0x0f, //0x00000621 movq %rcx, (%r15) - 0x49, 0xc7, 0x44, 0xf7, 0x08, 0x03, 0x00, 0x00, 0x00, //0x00000624 movq $3, $8(%r15,%rsi,8) - 0xe9, 0x6e, 0xfd, 0xff, 0xff, //0x0000062d jmp LBB0_3 - //0x00000632 LBB0_44 - 0x3c, 0x22, //0x00000632 cmpb $34, %al - 0x0f, 0x85, 0x53, 0x35, 0x00, 0x00, //0x00000634 jne LBB0_710 - 0x49, 0xc7, 0x04, 0xf7, 0x04, 0x00, 0x00, 0x00, //0x0000063a movq $4, (%r15,%rsi,8) - 0x41, 0xf6, 0xc3, 0x40, //0x00000642 testb $64, %r11b - 0x0f, 0x85, 0x2f, 0x07, 0x00, 0x00, //0x00000646 jne LBB0_148 - 0x4d, 0x8b, 0x4d, 0x00, //0x0000064c movq (%r13), %r9 - 0x4c, 0x8b, 0x47, 0x08, //0x00000650 movq $8(%rdi), %r8 - 0x4c, 0x89, 0xc3, //0x00000654 movq %r8, %rbx - 0x41, 0xf6, 0xc3, 0x20, //0x00000657 testb $32, %r11b - 0x0f, 0x85, 0xf6, 0x09, 0x00, 0x00, //0x0000065b jne LBB0_190 - 0x4c, 0x29, 0xcb, //0x00000661 subq %r9, %rbx - 0x0f, 0x84, 0xb2, 0x36, 0x00, 0x00, //0x00000664 je LBB0_717 - 0x48, 0x83, 0xfb, 0x40, //0x0000066a cmpq $64, %rbx - 0x0f, 0x82, 0x29, 0x24, 0x00, 0x00, //0x0000066e jb LBB0_504 - 0x4c, 0x89, 0xce, //0x00000674 movq %r9, %rsi - 0x48, 0xf7, 0xd6, //0x00000677 notq %rsi - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x0000067a movq $-1, %r11 - 0x4c, 0x89, 0xc9, //0x00000681 movq %r9, %rcx - 0x45, 0x31, 0xd2, //0x00000684 xorl %r10d, %r10d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000687 .p2align 4, 0x90 - //0x00000690 LBB0_50 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x0e, //0x00000690 vmovdqu (%r14,%rcx), %ymm0 - 0x49, 0x89, 0xcf, //0x00000696 movq %rcx, %r15 - 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x0e, 0x20, //0x00000699 vmovdqu $32(%r14,%rcx), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x000006a0 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x000006a4 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x000006a8 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x000006ac vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xc7, //0x000006b0 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x000006b4 vpmovmskb %ymm0, %edx - 0xc5, 0xf5, 0x74, 0xc7, //0x000006b8 vpcmpeqb %ymm7, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc8, //0x000006bc vpmovmskb %ymm0, %ecx - 0x48, 0xc1, 0xe0, 0x20, //0x000006c0 shlq $32, %rax - 0x48, 0x09, 0xc7, //0x000006c4 orq %rax, %rdi - 0x48, 0xc1, 0xe1, 0x20, //0x000006c7 shlq $32, %rcx - 0x48, 0x09, 0xca, //0x000006cb orq %rcx, %rdx - 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x000006ce jne LBB0_59 - 0x4d, 0x85, 0xd2, //0x000006d4 testq %r10, %r10 - 0x0f, 0x85, 0x3b, 0x00, 0x00, 0x00, //0x000006d7 jne LBB0_61 - 0x45, 0x31, 0xd2, //0x000006dd xorl %r10d, %r10d - 0x48, 0x85, 0xff, //0x000006e0 testq %rdi, %rdi - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x000006e3 jne LBB0_62 - //0x000006e9 LBB0_53 - 0x48, 0x83, 0xc3, 0xc0, //0x000006e9 addq $-64, %rbx - 0x48, 0x83, 0xc6, 0xc0, //0x000006ed addq $-64, %rsi - 0x4c, 0x89, 0xf9, //0x000006f1 movq %r15, %rcx - 0x48, 0x83, 0xc1, 0x40, //0x000006f4 addq $64, %rcx - 0x48, 0x83, 0xfb, 0x3f, //0x000006f8 cmpq $63, %rbx - 0x0f, 0x87, 0x8e, 0xff, 0xff, 0xff, //0x000006fc ja LBB0_50 - 0xe9, 0x42, 0x20, 0x00, 0x00, //0x00000702 jmp LBB0_54 - //0x00000707 LBB0_59 - 0x49, 0x83, 0xfb, 0xff, //0x00000707 cmpq $-1, %r11 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x0000070b jne LBB0_61 - 0x4c, 0x0f, 0xbc, 0xda, //0x00000711 bsfq %rdx, %r11 - 0x4d, 0x01, 0xfb, //0x00000715 addq %r15, %r11 - //0x00000718 LBB0_61 - 0x4c, 0x89, 0xd0, //0x00000718 movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x0000071b notq %rax - 0x48, 0x21, 0xd0, //0x0000071e andq %rdx, %rax - 0x48, 0x8d, 0x0c, 0x00, //0x00000721 leaq (%rax,%rax), %rcx - 0x4c, 0x09, 0xd1, //0x00000725 orq %r10, %rcx - 0x48, 0x89, 0x0c, 0x24, //0x00000728 movq %rcx, (%rsp) - 0x48, 0xf7, 0xd1, //0x0000072c notq %rcx - 0x48, 0x21, 0xd1, //0x0000072f andq %rdx, %rcx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000732 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd1, //0x0000073c andq %rdx, %rcx - 0x45, 0x31, 0xd2, //0x0000073f xorl %r10d, %r10d - 0x48, 0x01, 0xc1, //0x00000742 addq %rax, %rcx - 0x41, 0x0f, 0x92, 0xc2, //0x00000745 setb %r10b - 0x48, 0x01, 0xc9, //0x00000749 addq %rcx, %rcx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000074c movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc1, //0x00000756 xorq %rax, %rcx - 0x48, 0x23, 0x0c, 0x24, //0x00000759 andq (%rsp), %rcx - 0x48, 0xf7, 0xd1, //0x0000075d notq %rcx - 0x48, 0x21, 0xcf, //0x00000760 andq %rcx, %rdi - 0x48, 0x85, 0xff, //0x00000763 testq %rdi, %rdi - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000766 je LBB0_53 - //0x0000076c LBB0_62 - 0x4c, 0x0f, 0xbc, 0xd7, //0x0000076c bsfq %rdi, %r10 - 0x49, 0x29, 0xf2, //0x00000770 subq %rsi, %r10 - 0x4d, 0x89, 0xdf, //0x00000773 movq %r11, %r15 - 0xe9, 0xa5, 0x0b, 0x00, 0x00, //0x00000776 jmp LBB0_232 - //0x0000077b LBB0_63 - 0x3c, 0x3a, //0x0000077b cmpb $58, %al - 0x0f, 0x85, 0x0a, 0x34, 0x00, 0x00, //0x0000077d jne LBB0_710 - 0x49, 0xc7, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x00, //0x00000783 movq $0, (%r15,%rsi,8) - 0xe9, 0x10, 0xfc, 0xff, 0xff, //0x0000078b jmp LBB0_3 - //0x00000790 LBB0_65 - 0x3c, 0x5d, //0x00000790 cmpb $93, %al - 0x0f, 0x84, 0x74, 0x04, 0x00, 0x00, //0x00000792 je LBB0_40 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00000798 movq $-1, (%rsp) - 0x49, 0xc7, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x00, //0x000007a0 movq $1, (%r15,%rsi,8) - 0x83, 0xf8, 0x7b, //0x000007a8 cmpl $123, %eax - 0x0f, 0x87, 0xdc, 0x33, 0x00, 0x00, //0x000007ab ja LBB0_710 - //0x000007b1 LBB0_67 - 0x89, 0xc0, //0x000007b1 movl %eax, %eax - 0x48, 0x8d, 0x0d, 0x3e, 0x36, 0x00, 0x00, //0x000007b3 leaq $13886(%rip), %rcx /* LJTI0_1+0(%rip) */ - 0x48, 0x63, 0x04, 0x81, //0x000007ba movslq (%rcx,%rax,4), %rax - 0x48, 0x01, 0xc8, //0x000007be addq %rcx, %rax - 0xff, 0xe0, //0x000007c1 jmpq *%rax - //0x000007c3 LBB0_70 - 0x4c, 0x8b, 0x47, 0x08, //0x000007c3 movq $8(%rdi), %r8 - 0x49, 0x8b, 0x5d, 0x00, //0x000007c7 movq (%r13), %rbx - 0x41, 0xf6, 0xc3, 0x40, //0x000007cb testb $64, %r11b - 0x0f, 0x85, 0x67, 0x06, 0x00, 0x00, //0x000007cf jne LBB0_159 - 0x4c, 0x89, 0x6c, 0x24, 0x30, //0x000007d5 movq %r13, $48(%rsp) - 0x48, 0x8d, 0x53, 0xff, //0x000007da leaq $-1(%rbx), %rdx - 0x49, 0x29, 0xd0, //0x000007de subq %rdx, %r8 - 0x0f, 0x84, 0x78, 0x33, 0x00, 0x00, //0x000007e1 je LBB0_682 - 0x49, 0x8d, 0x04, 0x1e, //0x000007e7 leaq (%r14,%rbx), %rax - 0x48, 0x83, 0xc0, 0xff, //0x000007eb addq $-1, %rax - 0x48, 0x89, 0x44, 0x24, 0x38, //0x000007ef movq %rax, $56(%rsp) - 0x80, 0x38, 0x30, //0x000007f4 cmpb $48, (%rax) - 0x48, 0x89, 0x14, 0x24, //0x000007f7 movq %rdx, (%rsp) - 0x0f, 0x85, 0x3a, 0x00, 0x00, 0x00, //0x000007fb jne LBB0_76 - 0x41, 0xbd, 0x01, 0x00, 0x00, 0x00, //0x00000801 movl $1, %r13d - 0x49, 0x83, 0xf8, 0x01, //0x00000807 cmpq $1, %r8 - 0x0f, 0x84, 0xa4, 0xfb, 0xff, 0xff, //0x0000080b je LBB0_1 - 0x41, 0x8a, 0x0c, 0x1e, //0x00000811 movb (%r14,%rbx), %cl - 0x80, 0xc1, 0xd2, //0x00000815 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x00000818 cmpb $55, %cl - 0x0f, 0x87, 0x94, 0xfb, 0xff, 0xff, //0x0000081b ja LBB0_1 - 0x0f, 0xb6, 0xc1, //0x00000821 movzbl %cl, %eax - 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00000824 movabsq $36028797027352577, %rcx - 0x48, 0x0f, 0xa3, 0xc1, //0x0000082e btq %rax, %rcx - 0x48, 0x89, 0xd1, //0x00000832 movq %rdx, %rcx - 0x0f, 0x83, 0x7d, 0xfb, 0xff, 0xff, //0x00000835 jae LBB0_2 - //0x0000083b LBB0_76 - 0x48, 0x89, 0x5c, 0x24, 0x20, //0x0000083b movq %rbx, $32(%rsp) - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00000840 movq $-1, %r10 - 0x49, 0x83, 0xf8, 0x20, //0x00000847 cmpq $32, %r8 - 0x0f, 0x82, 0x21, 0x22, 0x00, 0x00, //0x0000084b jb LBB0_502 - 0x45, 0x31, 0xed, //0x00000851 xorl %r13d, %r13d - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00000854 movq $-1, %r9 - 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x0000085b movq $-1, $40(%rsp) - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000864 .p2align 4, 0x90 - //0x00000870 LBB0_78 - 0x48, 0x8b, 0x44, 0x24, 0x38, //0x00000870 movq $56(%rsp), %rax - 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x28, //0x00000875 vmovdqu (%rax,%r13), %ymm0 - 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x0000087b vpcmpgtb %ymm10, %ymm0, %ymm1 - 0xc5, 0x95, 0x64, 0xd0, //0x00000880 vpcmpgtb %ymm0, %ymm13, %ymm2 - 0xc5, 0xed, 0xdb, 0xc9, //0x00000884 vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0x85, 0x74, 0xd0, //0x00000888 vpcmpeqb %ymm0, %ymm15, %ymm2 - 0xc5, 0xfd, 0x74, 0x1d, 0xcc, 0xf9, 0xff, 0xff, //0x0000088c vpcmpeqb $-1588(%rip), %ymm0, %ymm3 /* LCPI0_17+0(%rip) */ - 0xc5, 0xe5, 0xeb, 0xd2, //0x00000894 vpor %ymm2, %ymm3, %ymm2 - 0xc5, 0x8d, 0xdb, 0xd8, //0x00000898 vpand %ymm0, %ymm14, %ymm3 - 0xc5, 0xfd, 0x74, 0x05, 0xdc, 0xf9, 0xff, 0xff, //0x0000089c vpcmpeqb $-1572(%rip), %ymm0, %ymm0 /* LCPI0_18+0(%rip) */ - 0xc5, 0xfd, 0xd7, 0xd0, //0x000008a4 vpmovmskb %ymm0, %edx - 0xc5, 0xe5, 0x74, 0xdc, //0x000008a8 vpcmpeqb %ymm4, %ymm3, %ymm3 - 0xc5, 0xfd, 0xd7, 0xf3, //0x000008ac vpmovmskb %ymm3, %esi - 0xc5, 0x7d, 0xd7, 0xfa, //0x000008b0 vpmovmskb %ymm2, %r15d - 0xc5, 0xf5, 0xeb, 0xc0, //0x000008b4 vpor %ymm0, %ymm1, %ymm0 - 0xc5, 0xe5, 0xeb, 0xca, //0x000008b8 vpor %ymm2, %ymm3, %ymm1 - 0xc5, 0xfd, 0xeb, 0xc1, //0x000008bc vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x000008c0 vpmovmskb %ymm0, %eax - 0x48, 0xf7, 0xd0, //0x000008c4 notq %rax - 0x48, 0x0f, 0xbc, 0xc8, //0x000008c7 bsfq %rax, %rcx - 0x83, 0xf9, 0x20, //0x000008cb cmpl $32, %ecx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000008ce je LBB0_80 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x000008d4 movl $-1, %eax - 0xd3, 0xe0, //0x000008d9 shll %cl, %eax - 0xf7, 0xd0, //0x000008db notl %eax - 0x21, 0xc2, //0x000008dd andl %eax, %edx - 0x21, 0xc6, //0x000008df andl %eax, %esi - 0x44, 0x21, 0xf8, //0x000008e1 andl %r15d, %eax - 0x41, 0x89, 0xc7, //0x000008e4 movl %eax, %r15d - //0x000008e7 LBB0_80 - 0x8d, 0x5a, 0xff, //0x000008e7 leal $-1(%rdx), %ebx - 0x21, 0xd3, //0x000008ea andl %edx, %ebx - 0xc5, 0xfe, 0x6f, 0x1d, 0xcc, 0xf8, 0xff, 0xff, //0x000008ec vmovdqu $-1844(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0x0f, 0x85, 0x4e, 0x1c, 0x00, 0x00, //0x000008f4 jne LBB0_464 - 0x8d, 0x5e, 0xff, //0x000008fa leal $-1(%rsi), %ebx - 0x21, 0xf3, //0x000008fd andl %esi, %ebx - 0x0f, 0x85, 0x43, 0x1c, 0x00, 0x00, //0x000008ff jne LBB0_464 - 0x41, 0x8d, 0x5f, 0xff, //0x00000905 leal $-1(%r15), %ebx - 0x44, 0x21, 0xfb, //0x00000909 andl %r15d, %ebx - 0x0f, 0x85, 0x36, 0x1c, 0x00, 0x00, //0x0000090c jne LBB0_464 - 0x85, 0xd2, //0x00000912 testl %edx, %edx - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00000914 je LBB0_86 - 0x0f, 0xbc, 0xd2, //0x0000091a bsfl %edx, %edx - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000091d cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0xde, 0x1d, 0x00, 0x00, //0x00000923 jne LBB0_483 - 0x4c, 0x01, 0xea, //0x00000929 addq %r13, %rdx - 0x48, 0x89, 0x54, 0x24, 0x28, //0x0000092c movq %rdx, $40(%rsp) - //0x00000931 LBB0_86 - 0x85, 0xf6, //0x00000931 testl %esi, %esi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000933 je LBB0_89 - 0x0f, 0xbc, 0xd6, //0x00000939 bsfl %esi, %edx - 0x49, 0x83, 0xf9, 0xff, //0x0000093c cmpq $-1, %r9 - 0x0f, 0x85, 0xc1, 0x1d, 0x00, 0x00, //0x00000940 jne LBB0_483 - 0x4c, 0x01, 0xea, //0x00000946 addq %r13, %rdx - 0x49, 0x89, 0xd1, //0x00000949 movq %rdx, %r9 - //0x0000094c LBB0_89 - 0x45, 0x85, 0xff, //0x0000094c testl %r15d, %r15d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x0000094f je LBB0_92 - 0x41, 0x0f, 0xbc, 0xd7, //0x00000955 bsfl %r15d, %edx - 0x49, 0x83, 0xfa, 0xff, //0x00000959 cmpq $-1, %r10 - 0x0f, 0x85, 0xa4, 0x1d, 0x00, 0x00, //0x0000095d jne LBB0_483 - 0x4c, 0x01, 0xea, //0x00000963 addq %r13, %rdx - 0x49, 0x89, 0xd2, //0x00000966 movq %rdx, %r10 - //0x00000969 LBB0_92 - 0x83, 0xf9, 0x20, //0x00000969 cmpl $32, %ecx - 0x0f, 0x85, 0x39, 0x08, 0x00, 0x00, //0x0000096c jne LBB0_210 - 0x49, 0x83, 0xc0, 0xe0, //0x00000972 addq $-32, %r8 - 0x49, 0x83, 0xc5, 0x20, //0x00000976 addq $32, %r13 - 0x49, 0x83, 0xf8, 0x1f, //0x0000097a cmpq $31, %r8 - 0x0f, 0x87, 0xec, 0xfe, 0xff, 0xff, //0x0000097e ja LBB0_78 - 0xc5, 0xf8, 0x77, //0x00000984 vzeroupper - 0xc5, 0x7e, 0x6f, 0x35, 0x51, 0xf8, 0xff, 0xff, //0x00000987 vmovdqu $-1967(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0xa9, 0xf8, 0xff, 0xff, //0x0000098f vmovdqu $-1879(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0x81, 0xf8, 0xff, 0xff, //0x00000997 vmovdqu $-1919(%rip), %ymm13 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x15, 0x59, 0xf8, 0xff, 0xff, //0x0000099f vmovdqu $-1959(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0xb1, 0xf7, 0xff, 0xff, //0x000009a7 vmovdqu $-2127(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0x89, 0xf7, 0xff, 0xff, //0x000009af vmovdqu $-2167(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000009b7 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x05, 0x5c, 0xf7, 0xff, 0xff, //0x000009bc vmovdqu $-2212(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x34, 0xf7, 0xff, 0xff, //0x000009c4 vmovdqu $-2252(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x0c, 0xf7, 0xff, 0xff, //0x000009cc vmovdqu $-2292(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x2d, 0xe4, 0xf6, 0xff, 0xff, //0x000009d4 vmovdqu $-2332(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0x4c, 0x03, 0x6c, 0x24, 0x38, //0x000009dc addq $56(%rsp), %r13 - 0x49, 0x83, 0xf8, 0x10, //0x000009e1 cmpq $16, %r8 - 0x0f, 0x82, 0x57, 0x01, 0x00, 0x00, //0x000009e5 jb LBB0_113 - //0x000009eb LBB0_95 - 0x4c, 0x89, 0xef, //0x000009eb movq %r13, %rdi - 0x48, 0x2b, 0x7c, 0x24, 0x20, //0x000009ee subq $32(%rsp), %rdi - 0x4c, 0x29, 0xf7, //0x000009f3 subq %r14, %rdi - 0x48, 0x83, 0xc7, 0x01, //0x000009f6 addq $1, %rdi - 0x45, 0x31, 0xff, //0x000009fa xorl %r15d, %r15d - 0x90, 0x90, 0x90, //0x000009fd .p2align 4, 0x90 - //0x00000a00 LBB0_96 - 0xc4, 0x81, 0x7a, 0x6f, 0x44, 0x3d, 0x00, //0x00000a00 vmovdqu (%r13,%r15), %xmm0 - 0xc5, 0xf9, 0x64, 0x0d, 0x31, 0xf6, 0xff, 0xff, //0x00000a07 vpcmpgtb $-2511(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ - 0xc5, 0xfa, 0x6f, 0x15, 0x39, 0xf6, 0xff, 0xff, //0x00000a0f vmovdqu $-2503(%rip), %xmm2 /* LCPI0_21+0(%rip) */ - 0xc5, 0xe9, 0x64, 0xd0, //0x00000a17 vpcmpgtb %xmm0, %xmm2, %xmm2 - 0xc5, 0xf1, 0xdb, 0xca, //0x00000a1b vpand %xmm2, %xmm1, %xmm1 - 0xc5, 0xf9, 0x74, 0x15, 0x39, 0xf6, 0xff, 0xff, //0x00000a1f vpcmpeqb $-2503(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x1d, 0x41, 0xf6, 0xff, 0xff, //0x00000a27 vpcmpeqb $-2495(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xd2, //0x00000a2f vpor %xmm2, %xmm3, %xmm2 - 0xc5, 0xf9, 0xdb, 0x1d, 0xe5, 0xf5, 0xff, 0xff, //0x00000a33 vpand $-2587(%rip), %xmm0, %xmm3 /* LCPI0_12+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0x3d, 0xf6, 0xff, 0xff, //0x00000a3b vpcmpeqb $-2499(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ - 0xc5, 0xe1, 0x74, 0x1d, 0x45, 0xf6, 0xff, 0xff, //0x00000a43 vpcmpeqb $-2491(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xe0, //0x00000a4b vpor %xmm0, %xmm3, %xmm4 - 0xc5, 0xe9, 0xeb, 0xc9, //0x00000a4f vpor %xmm1, %xmm2, %xmm1 - 0xc5, 0xd9, 0xeb, 0xc9, //0x00000a53 vpor %xmm1, %xmm4, %xmm1 - 0xc5, 0xf9, 0xd7, 0xd0, //0x00000a57 vpmovmskb %xmm0, %edx - 0xc5, 0x79, 0xd7, 0xdb, //0x00000a5b vpmovmskb %xmm3, %r11d - 0xc5, 0xf9, 0xd7, 0xf2, //0x00000a5f vpmovmskb %xmm2, %esi - 0xc5, 0xf9, 0xd7, 0xc1, //0x00000a63 vpmovmskb %xmm1, %eax - 0xf7, 0xd0, //0x00000a67 notl %eax - 0x0f, 0xbc, 0xc8, //0x00000a69 bsfl %eax, %ecx - 0x83, 0xf9, 0x10, //0x00000a6c cmpl $16, %ecx - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00000a6f je LBB0_98 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00000a75 movl $-1, %eax - 0xd3, 0xe0, //0x00000a7a shll %cl, %eax - 0xf7, 0xd0, //0x00000a7c notl %eax - 0x21, 0xc2, //0x00000a7e andl %eax, %edx - 0x41, 0x21, 0xc3, //0x00000a80 andl %eax, %r11d - 0x21, 0xf0, //0x00000a83 andl %esi, %eax - 0x89, 0xc6, //0x00000a85 movl %eax, %esi - //0x00000a87 LBB0_98 - 0xc5, 0xfe, 0x6f, 0x25, 0x11, 0xf8, 0xff, 0xff, //0x00000a87 vmovdqu $-2031(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x29, 0xf7, 0xff, 0xff, //0x00000a8f vmovdqu $-2263(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0x8d, 0x5a, 0xff, //0x00000a97 leal $-1(%rdx), %ebx - 0x21, 0xd3, //0x00000a9a andl %edx, %ebx - 0x0f, 0x85, 0x62, 0x1d, 0x00, 0x00, //0x00000a9c jne LBB0_486 - 0x41, 0x8d, 0x5b, 0xff, //0x00000aa2 leal $-1(%r11), %ebx - 0x44, 0x21, 0xdb, //0x00000aa6 andl %r11d, %ebx - 0x0f, 0x85, 0x55, 0x1d, 0x00, 0x00, //0x00000aa9 jne LBB0_486 - 0x8d, 0x5e, 0xff, //0x00000aaf leal $-1(%rsi), %ebx - 0x21, 0xf3, //0x00000ab2 andl %esi, %ebx - 0x0f, 0x85, 0x4a, 0x1d, 0x00, 0x00, //0x00000ab4 jne LBB0_486 - 0x85, 0xd2, //0x00000aba testl %edx, %edx - 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00000abc je LBB0_104 - 0x0f, 0xbc, 0xd2, //0x00000ac2 bsfl %edx, %edx - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x00000ac5 cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0x73, 0x1d, 0x00, 0x00, //0x00000acb jne LBB0_489 - 0x48, 0x01, 0xfa, //0x00000ad1 addq %rdi, %rdx - 0x4c, 0x01, 0xfa, //0x00000ad4 addq %r15, %rdx - 0x48, 0x89, 0x54, 0x24, 0x28, //0x00000ad7 movq %rdx, $40(%rsp) - //0x00000adc LBB0_104 - 0x45, 0x85, 0xdb, //0x00000adc testl %r11d, %r11d - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00000adf je LBB0_107 - 0x41, 0x0f, 0xbc, 0xd3, //0x00000ae5 bsfl %r11d, %edx - 0x49, 0x83, 0xf9, 0xff, //0x00000ae9 cmpq $-1, %r9 - 0x0f, 0x85, 0x51, 0x1d, 0x00, 0x00, //0x00000aed jne LBB0_489 - 0x48, 0x01, 0xfa, //0x00000af3 addq %rdi, %rdx - 0x4c, 0x01, 0xfa, //0x00000af6 addq %r15, %rdx - 0x49, 0x89, 0xd1, //0x00000af9 movq %rdx, %r9 - //0x00000afc LBB0_107 - 0x85, 0xf6, //0x00000afc testl %esi, %esi - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000afe je LBB0_110 - 0x0f, 0xbc, 0xd6, //0x00000b04 bsfl %esi, %edx - 0x49, 0x83, 0xfa, 0xff, //0x00000b07 cmpq $-1, %r10 - 0x0f, 0x85, 0x33, 0x1d, 0x00, 0x00, //0x00000b0b jne LBB0_489 - 0x48, 0x01, 0xfa, //0x00000b11 addq %rdi, %rdx - 0x4c, 0x01, 0xfa, //0x00000b14 addq %r15, %rdx - 0x49, 0x89, 0xd2, //0x00000b17 movq %rdx, %r10 - //0x00000b1a LBB0_110 - 0x83, 0xf9, 0x10, //0x00000b1a cmpl $16, %ecx - 0x0f, 0x85, 0xbe, 0x0a, 0x00, 0x00, //0x00000b1d jne LBB0_277 - 0x49, 0x83, 0xc0, 0xf0, //0x00000b23 addq $-16, %r8 - 0x49, 0x83, 0xc7, 0x10, //0x00000b27 addq $16, %r15 - 0x49, 0x83, 0xf8, 0x0f, //0x00000b2b cmpq $15, %r8 - 0x0f, 0x87, 0xcb, 0xfe, 0xff, 0xff, //0x00000b2f ja LBB0_96 - 0x4d, 0x01, 0xfd, //0x00000b35 addq %r15, %r13 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00000b38 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00000b3d movq $16(%rsp), %rdi - //0x00000b42 LBB0_113 - 0x4d, 0x85, 0xc0, //0x00000b42 testq %r8, %r8 - 0xc5, 0xfe, 0x6f, 0x25, 0x53, 0xf7, 0xff, 0xff, //0x00000b45 vmovdqu $-2221(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x0f, 0x84, 0xa8, 0x0a, 0x00, 0x00, //0x00000b4d je LBB0_279 - 0x4f, 0x8d, 0x3c, 0x28, //0x00000b53 leaq (%r8,%r13), %r15 - 0x4c, 0x89, 0xee, //0x00000b57 movq %r13, %rsi - 0x48, 0x2b, 0x74, 0x24, 0x20, //0x00000b5a subq $32(%rsp), %rsi - 0x4c, 0x29, 0xf6, //0x00000b5f subq %r14, %rsi - 0x48, 0x83, 0xc6, 0x01, //0x00000b62 addq $1, %rsi - 0x31, 0xc9, //0x00000b66 xorl %ecx, %ecx - 0xc5, 0xfe, 0x6f, 0x1d, 0x50, 0xf6, 0xff, 0xff, //0x00000b68 vmovdqu $-2480(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xe9, 0x28, 0x00, 0x00, 0x00, //0x00000b70 jmp LBB0_118 - //0x00000b75 LBB0_115 - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x00000b75 cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0x8f, 0x1c, 0x00, 0x00, //0x00000b7b jne LBB0_487 - 0x48, 0x8d, 0x04, 0x0e, //0x00000b81 leaq (%rsi,%rcx), %rax - 0x48, 0x89, 0x44, 0x24, 0x28, //0x00000b85 movq %rax, $40(%rsp) - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000b8a .p2align 4, 0x90 - //0x00000b90 LBB0_117 - 0x48, 0x83, 0xc1, 0x01, //0x00000b90 addq $1, %rcx - 0x49, 0x39, 0xc8, //0x00000b94 cmpq %rcx, %r8 - 0x0f, 0x84, 0x2d, 0x19, 0x00, 0x00, //0x00000b97 je LBB0_457 - //0x00000b9d LBB0_118 - 0x41, 0x0f, 0xbe, 0x54, 0x0d, 0x00, //0x00000b9d movsbl (%r13,%rcx), %edx - 0x8d, 0x42, 0xd0, //0x00000ba3 leal $-48(%rdx), %eax - 0x83, 0xf8, 0x0a, //0x00000ba6 cmpl $10, %eax - 0x0f, 0x82, 0xe1, 0xff, 0xff, 0xff, //0x00000ba9 jb LBB0_117 - 0x8d, 0x5a, 0xd5, //0x00000baf leal $-43(%rdx), %ebx - 0x83, 0xfb, 0x1a, //0x00000bb2 cmpl $26, %ebx - 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00000bb5 ja LBB0_123 - 0x48, 0x8d, 0x15, 0x92, 0x34, 0x00, 0x00, //0x00000bbb leaq $13458(%rip), %rdx /* LJTI0_3+0(%rip) */ - 0x48, 0x63, 0x04, 0x9a, //0x00000bc2 movslq (%rdx,%rbx,4), %rax - 0x48, 0x01, 0xd0, //0x00000bc6 addq %rdx, %rax - 0xff, 0xe0, //0x00000bc9 jmpq *%rax - //0x00000bcb LBB0_121 - 0x49, 0x83, 0xfa, 0xff, //0x00000bcb cmpq $-1, %r10 - 0x0f, 0x85, 0x3b, 0x1c, 0x00, 0x00, //0x00000bcf jne LBB0_487 - 0x4c, 0x8d, 0x14, 0x0e, //0x00000bd5 leaq (%rsi,%rcx), %r10 - 0xe9, 0xb2, 0xff, 0xff, 0xff, //0x00000bd9 jmp LBB0_117 - //0x00000bde LBB0_123 - 0x83, 0xfa, 0x65, //0x00000bde cmpl $101, %edx - 0x0f, 0x85, 0x11, 0x0a, 0x00, 0x00, //0x00000be1 jne LBB0_278 - //0x00000be7 LBB0_124 - 0x49, 0x83, 0xf9, 0xff, //0x00000be7 cmpq $-1, %r9 - 0x0f, 0x85, 0x1f, 0x1c, 0x00, 0x00, //0x00000beb jne LBB0_487 - 0x4c, 0x8d, 0x0c, 0x0e, //0x00000bf1 leaq (%rsi,%rcx), %r9 - 0xe9, 0x96, 0xff, 0xff, 0xff, //0x00000bf5 jmp LBB0_117 - //0x00000bfa LBB0_68 - 0x83, 0xf8, 0x22, //0x00000bfa cmpl $34, %eax - 0x0f, 0x84, 0x40, 0x00, 0x00, 0x00, //0x00000bfd je LBB0_130 - //0x00000c03 LBB0_43 - 0x83, 0xf8, 0x7d, //0x00000c03 cmpl $125, %eax - 0x0f, 0x85, 0x81, 0x2f, 0x00, 0x00, //0x00000c06 jne LBB0_710 - //0x00000c0c LBB0_40 - 0x4d, 0x89, 0x07, //0x00000c0c movq %r8, (%r15) - 0x4c, 0x89, 0x24, 0x24, //0x00000c0f movq %r12, (%rsp) - 0x4d, 0x85, 0xc0, //0x00000c13 testq %r8, %r8 - 0x0f, 0x85, 0xc4, 0xf7, 0xff, 0xff, //0x00000c16 jne LBB0_5 - 0xe9, 0x74, 0x2f, 0x00, 0x00, //0x00000c1c jmp LBB0_711 - //0x00000c21 LBB0_126 - 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00000c21 cmpq $4095, %rsi - 0x0f, 0x8f, 0xf1, 0x2e, 0x00, 0x00, //0x00000c28 jg LBB0_705 - 0x48, 0x8d, 0x4e, 0x01, //0x00000c2e leaq $1(%rsi), %rcx - 0x49, 0x89, 0x0f, //0x00000c32 movq %rcx, (%r15) - 0x49, 0xc7, 0x44, 0xf7, 0x08, 0x00, 0x00, 0x00, 0x00, //0x00000c35 movq $0, $8(%r15,%rsi,8) - 0xe9, 0x5d, 0xf7, 0xff, 0xff, //0x00000c3e jmp LBB0_3 - //0x00000c43 LBB0_130 - 0x49, 0xc7, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x00, //0x00000c43 movq $2, (%r15,%rsi,8) - 0x41, 0xf6, 0xc3, 0x40, //0x00000c4b testb $64, %r11b - 0x0f, 0x85, 0x17, 0x03, 0x00, 0x00, //0x00000c4f jne LBB0_179 - 0x4d, 0x8b, 0x4d, 0x00, //0x00000c55 movq (%r13), %r9 - 0x4c, 0x8b, 0x47, 0x08, //0x00000c59 movq $8(%rdi), %r8 - 0x4c, 0x89, 0xc1, //0x00000c5d movq %r8, %rcx - 0x41, 0xf6, 0xc3, 0x20, //0x00000c60 testb $32, %r11b - 0x0f, 0x85, 0x54, 0x05, 0x00, 0x00, //0x00000c64 jne LBB0_211 - 0x4c, 0x29, 0xc9, //0x00000c6a subq %r9, %rcx - 0x0f, 0x84, 0xa9, 0x30, 0x00, 0x00, //0x00000c6d je LBB0_717 - 0x48, 0x83, 0xf9, 0x40, //0x00000c73 cmpq $64, %rcx - 0x0f, 0x82, 0xc8, 0x1e, 0x00, 0x00, //0x00000c77 jb LBB0_511 - 0x4c, 0x89, 0xce, //0x00000c7d movq %r9, %rsi - 0x48, 0xf7, 0xd6, //0x00000c80 notq %rsi - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00000c83 movq $-1, %r11 - 0x4c, 0x89, 0xcb, //0x00000c8a movq %r9, %rbx - 0x45, 0x31, 0xd2, //0x00000c8d xorl %r10d, %r10d - //0x00000c90 .p2align 4, 0x90 - //0x00000c90 LBB0_135 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x1e, //0x00000c90 vmovdqu (%r14,%rbx), %ymm0 - 0x49, 0x89, 0xdf, //0x00000c96 movq %rbx, %r15 - 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x1e, 0x20, //0x00000c99 vmovdqu $32(%r14,%rbx), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x00000ca0 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x00000ca4 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x00000ca8 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00000cac vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xc7, //0x00000cb0 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x00000cb4 vpmovmskb %ymm0, %edx - 0xc5, 0xf5, 0x74, 0xc7, //0x00000cb8 vpcmpeqb %ymm7, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x00000cbc vpmovmskb %ymm0, %ebx - 0x48, 0xc1, 0xe0, 0x20, //0x00000cc0 shlq $32, %rax - 0x48, 0x09, 0xc7, //0x00000cc4 orq %rax, %rdi - 0x48, 0xc1, 0xe3, 0x20, //0x00000cc7 shlq $32, %rbx - 0x48, 0x09, 0xda, //0x00000ccb orq %rbx, %rdx - 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x00000cce jne LBB0_144 - 0x4d, 0x85, 0xd2, //0x00000cd4 testq %r10, %r10 - 0x0f, 0x85, 0x3b, 0x00, 0x00, 0x00, //0x00000cd7 jne LBB0_146 - 0x45, 0x31, 0xd2, //0x00000cdd xorl %r10d, %r10d - 0x48, 0x85, 0xff, //0x00000ce0 testq %rdi, %rdi - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x00000ce3 jne LBB0_147 - //0x00000ce9 LBB0_138 - 0x48, 0x83, 0xc1, 0xc0, //0x00000ce9 addq $-64, %rcx - 0x48, 0x83, 0xc6, 0xc0, //0x00000ced addq $-64, %rsi - 0x4c, 0x89, 0xfb, //0x00000cf1 movq %r15, %rbx - 0x48, 0x83, 0xc3, 0x40, //0x00000cf4 addq $64, %rbx - 0x48, 0x83, 0xf9, 0x3f, //0x00000cf8 cmpq $63, %rcx - 0x0f, 0x87, 0x8e, 0xff, 0xff, 0xff, //0x00000cfc ja LBB0_135 - 0xe9, 0x6f, 0x1b, 0x00, 0x00, //0x00000d02 jmp LBB0_139 - //0x00000d07 LBB0_144 - 0x49, 0x83, 0xfb, 0xff, //0x00000d07 cmpq $-1, %r11 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00000d0b jne LBB0_146 - 0x4c, 0x0f, 0xbc, 0xda, //0x00000d11 bsfq %rdx, %r11 - 0x4d, 0x01, 0xfb, //0x00000d15 addq %r15, %r11 - //0x00000d18 LBB0_146 - 0x4c, 0x89, 0xd0, //0x00000d18 movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x00000d1b notq %rax - 0x48, 0x21, 0xd0, //0x00000d1e andq %rdx, %rax - 0x48, 0x8d, 0x1c, 0x00, //0x00000d21 leaq (%rax,%rax), %rbx - 0x4c, 0x09, 0xd3, //0x00000d25 orq %r10, %rbx - 0x48, 0x89, 0x1c, 0x24, //0x00000d28 movq %rbx, (%rsp) - 0x48, 0xf7, 0xd3, //0x00000d2c notq %rbx - 0x48, 0x21, 0xd3, //0x00000d2f andq %rdx, %rbx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000d32 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd3, //0x00000d3c andq %rdx, %rbx - 0x45, 0x31, 0xd2, //0x00000d3f xorl %r10d, %r10d - 0x48, 0x01, 0xc3, //0x00000d42 addq %rax, %rbx - 0x41, 0x0f, 0x92, 0xc2, //0x00000d45 setb %r10b - 0x48, 0x01, 0xdb, //0x00000d49 addq %rbx, %rbx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000d4c movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc3, //0x00000d56 xorq %rax, %rbx - 0x48, 0x23, 0x1c, 0x24, //0x00000d59 andq (%rsp), %rbx - 0x48, 0xf7, 0xd3, //0x00000d5d notq %rbx - 0x48, 0x21, 0xdf, //0x00000d60 andq %rbx, %rdi - 0x48, 0x85, 0xff, //0x00000d63 testq %rdi, %rdi - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000d66 je LBB0_138 - //0x00000d6c LBB0_147 - 0x4c, 0x0f, 0xbc, 0xd7, //0x00000d6c bsfq %rdi, %r10 - 0x49, 0x29, 0xf2, //0x00000d70 subq %rsi, %r10 - 0x4d, 0x89, 0xdf, //0x00000d73 movq %r11, %r15 - 0xe9, 0x11, 0x0a, 0x00, 0x00, //0x00000d76 jmp LBB0_298 - //0x00000d7b LBB0_148 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00000d7b movq $-1, (%rsp) - 0x4c, 0x8b, 0x57, 0x08, //0x00000d83 movq $8(%rdi), %r10 - 0x4d, 0x8b, 0x45, 0x00, //0x00000d87 movq (%r13), %r8 - 0x4f, 0x8d, 0x0c, 0x06, //0x00000d8b leaq (%r14,%r8), %r9 - 0x4d, 0x29, 0xc2, //0x00000d8f subq %r8, %r10 - 0x49, 0x83, 0xfa, 0x20, //0x00000d92 cmpq $32, %r10 - 0x0f, 0x8c, 0x9e, 0x17, 0x00, 0x00, //0x00000d96 jl LBB0_158 - 0xb9, 0x20, 0x00, 0x00, 0x00, //0x00000d9c movl $32, %ecx - 0x31, 0xf6, //0x00000da1 xorl %esi, %esi - 0x45, 0x31, 0xff, //0x00000da3 xorl %r15d, %r15d - 0xe9, 0x59, 0x00, 0x00, 0x00, //0x00000da6 jmp LBB0_150 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000dab .p2align 4, 0x90 - //0x00000db0 LBB0_154 - 0x44, 0x89, 0xfa, //0x00000db0 movl %r15d, %edx - 0xf7, 0xd2, //0x00000db3 notl %edx - 0x21, 0xda, //0x00000db5 andl %ebx, %edx - 0x8d, 0x04, 0x12, //0x00000db7 leal (%rdx,%rdx), %eax - 0x44, 0x09, 0xf8, //0x00000dba orl %r15d, %eax - 0x89, 0xc7, //0x00000dbd movl %eax, %edi - 0xf7, 0xd7, //0x00000dbf notl %edi - 0x21, 0xdf, //0x00000dc1 andl %ebx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000dc3 andl $-1431655766, %edi - 0x45, 0x31, 0xff, //0x00000dc9 xorl %r15d, %r15d - 0x01, 0xd7, //0x00000dcc addl %edx, %edi - 0x41, 0x0f, 0x92, 0xc7, //0x00000dce setb %r15b - 0x01, 0xff, //0x00000dd2 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00000dd4 xorl $1431655765, %edi - 0x21, 0xc7, //0x00000dda andl %eax, %edi - 0xf7, 0xd7, //0x00000ddc notl %edi - 0x41, 0x21, 0xfb, //0x00000dde andl %edi, %r11d - 0x4d, 0x85, 0xdb, //0x00000de1 testq %r11, %r11 - 0x0f, 0x85, 0x7f, 0xf5, 0xff, 0xff, //0x00000de4 jne LBB0_153 - //0x00000dea LBB0_155 - 0x48, 0x83, 0xc6, 0x20, //0x00000dea addq $32, %rsi - 0x49, 0x8d, 0x04, 0x0a, //0x00000dee leaq (%r10,%rcx), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x00000df2 addq $-32, %rax - 0x48, 0x83, 0xc1, 0xe0, //0x00000df6 addq $-32, %rcx - 0x48, 0x83, 0xf8, 0x3f, //0x00000dfa cmpq $63, %rax - 0x0f, 0x8e, 0x18, 0x17, 0x00, 0x00, //0x00000dfe jle LBB0_156 - //0x00000e04 LBB0_150 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00000e04 vmovdqu (%r9,%rsi), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00000e0a vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd9, //0x00000e0e vpmovmskb %ymm1, %r11d - 0xc5, 0xfd, 0x74, 0xc7, //0x00000e12 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x00000e16 vpmovmskb %ymm0, %ebx - 0x85, 0xdb, //0x00000e1a testl %ebx, %ebx - 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x00000e1c jne LBB0_154 - 0x4d, 0x85, 0xff, //0x00000e22 testq %r15, %r15 - 0x0f, 0x85, 0x85, 0xff, 0xff, 0xff, //0x00000e25 jne LBB0_154 - 0x45, 0x31, 0xff, //0x00000e2b xorl %r15d, %r15d - 0x4d, 0x85, 0xdb, //0x00000e2e testq %r11, %r11 - 0x0f, 0x84, 0xb3, 0xff, 0xff, 0xff, //0x00000e31 je LBB0_155 - 0xe9, 0x2d, 0xf5, 0xff, 0xff, //0x00000e37 jmp LBB0_153 - //0x00000e3c LBB0_159 - 0x4c, 0x89, 0xc6, //0x00000e3c movq %r8, %rsi - 0x48, 0x29, 0xde, //0x00000e3f subq %rbx, %rsi - 0x48, 0x83, 0xfe, 0x20, //0x00000e42 cmpq $32, %rsi - 0x0f, 0x82, 0x13, 0x1c, 0x00, 0x00, //0x00000e46 jb LBB0_501 - 0x48, 0x89, 0xda, //0x00000e4c movq %rbx, %rdx - 0x48, 0xf7, 0xda, //0x00000e4f negq %rdx - 0x48, 0x89, 0xd9, //0x00000e52 movq %rbx, %rcx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000e55 .p2align 4, 0x90 - //0x00000e60 LBB0_161 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x0e, //0x00000e60 vmovdqu (%r14,%rcx), %ymm0 - 0xc5, 0xfd, 0x74, 0xcb, //0x00000e66 vpcmpeqb %ymm3, %ymm0, %ymm1 - 0xc5, 0x8d, 0xdb, 0xc0, //0x00000e6a vpand %ymm0, %ymm14, %ymm0 - 0xc5, 0xfd, 0x74, 0x05, 0x2a, 0xf3, 0xff, 0xff, //0x00000e6e vpcmpeqb $-3286(%rip), %ymm0, %ymm0 /* LCPI0_8+0(%rip) */ - 0xc5, 0xfd, 0xeb, 0xc1, //0x00000e76 vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x00000e7a vpmovmskb %ymm0, %esi - 0x85, 0xf6, //0x00000e7e testl %esi, %esi - 0x0f, 0x85, 0xce, 0x00, 0x00, 0x00, //0x00000e80 jne LBB0_175 - 0x48, 0x83, 0xc1, 0x20, //0x00000e86 addq $32, %rcx - 0x49, 0x8d, 0x04, 0x10, //0x00000e8a leaq (%r8,%rdx), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x00000e8e addq $-32, %rax - 0x48, 0x83, 0xc2, 0xe0, //0x00000e92 addq $-32, %rdx - 0x48, 0x83, 0xf8, 0x1f, //0x00000e96 cmpq $31, %rax - 0x0f, 0x87, 0xc0, 0xff, 0xff, 0xff, //0x00000e9a ja LBB0_161 - 0x4c, 0x89, 0xf1, //0x00000ea0 movq %r14, %rcx - 0x48, 0x29, 0xd1, //0x00000ea3 subq %rdx, %rcx - 0x49, 0x01, 0xd0, //0x00000ea6 addq %rdx, %r8 - 0x4c, 0x89, 0xc6, //0x00000ea9 movq %r8, %rsi - 0x48, 0x83, 0xfe, 0x10, //0x00000eac cmpq $16, %rsi - 0x0f, 0x82, 0x48, 0x00, 0x00, 0x00, //0x00000eb0 jb LBB0_167 - //0x00000eb6 LBB0_164 - 0x4c, 0x89, 0xf2, //0x00000eb6 movq %r14, %rdx - 0x48, 0x29, 0xca, //0x00000eb9 subq %rcx, %rdx - //0x00000ebc LBB0_165 - 0xc5, 0xfa, 0x6f, 0x01, //0x00000ebc vmovdqu (%rcx), %xmm0 - 0xc5, 0xf9, 0x74, 0x0d, 0x48, 0xf1, 0xff, 0xff, //0x00000ec0 vpcmpeqb $-3768(%rip), %xmm0, %xmm1 /* LCPI0_11+0(%rip) */ - 0xc5, 0xf9, 0xdb, 0x05, 0x50, 0xf1, 0xff, 0xff, //0x00000ec8 vpand $-3760(%rip), %xmm0, %xmm0 /* LCPI0_12+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0x58, 0xf1, 0xff, 0xff, //0x00000ed0 vpcmpeqb $-3752(%rip), %xmm0, %xmm0 /* LCPI0_13+0(%rip) */ - 0xc5, 0xf9, 0xeb, 0xc1, //0x00000ed8 vpor %xmm1, %xmm0, %xmm0 - 0xc5, 0xf9, 0xd7, 0xc0, //0x00000edc vpmovmskb %xmm0, %eax - 0x85, 0xc0, //0x00000ee0 testl %eax, %eax - 0x0f, 0x85, 0x6c, 0x16, 0x00, 0x00, //0x00000ee2 jne LBB0_465 - 0x48, 0x83, 0xc1, 0x10, //0x00000ee8 addq $16, %rcx - 0x48, 0x83, 0xc6, 0xf0, //0x00000eec addq $-16, %rsi - 0x48, 0x83, 0xc2, 0xf0, //0x00000ef0 addq $-16, %rdx - 0x48, 0x83, 0xfe, 0x0f, //0x00000ef4 cmpq $15, %rsi - 0x0f, 0x87, 0xbe, 0xff, 0xff, 0xff, //0x00000ef8 ja LBB0_165 - //0x00000efe LBB0_167 - 0x48, 0x89, 0xd8, //0x00000efe movq %rbx, %rax - 0xc5, 0x7d, 0x7f, 0xe1, //0x00000f01 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00000f05 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00000f09 vmovdqa %ymm13, %ymm11 - 0x48, 0x85, 0xf6, //0x00000f0e testq %rsi, %rsi - 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00000f11 je LBB0_174 - 0x48, 0x8d, 0x3c, 0x31, //0x00000f17 leaq (%rcx,%rsi), %rdi - 0x31, 0xd2, //0x00000f1b xorl %edx, %edx - //0x00000f1d LBB0_169 - 0x0f, 0xb6, 0x1c, 0x11, //0x00000f1d movzbl (%rcx,%rdx), %ebx - 0x80, 0xfb, 0x2c, //0x00000f21 cmpb $44, %bl - 0x0f, 0x84, 0xb0, 0x1b, 0x00, 0x00, //0x00000f24 je LBB0_507 - 0x80, 0xfb, 0x7d, //0x00000f2a cmpb $125, %bl - 0x0f, 0x84, 0xa7, 0x1b, 0x00, 0x00, //0x00000f2d je LBB0_507 - 0x80, 0xfb, 0x5d, //0x00000f33 cmpb $93, %bl - 0x0f, 0x84, 0x9e, 0x1b, 0x00, 0x00, //0x00000f36 je LBB0_507 - 0x48, 0x83, 0xc2, 0x01, //0x00000f3c addq $1, %rdx - 0x48, 0x39, 0xd6, //0x00000f40 cmpq %rdx, %rsi - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x00000f43 jne LBB0_169 - 0x48, 0x89, 0xf9, //0x00000f49 movq %rdi, %rcx - //0x00000f4c LBB0_174 - 0x4c, 0x29, 0xf1, //0x00000f4c subq %r14, %rcx - 0xe9, 0x8c, 0x1b, 0x00, 0x00, //0x00000f4f jmp LBB0_508 - //0x00000f54 LBB0_175 - 0x0f, 0xbc, 0xce, //0x00000f54 bsfl %esi, %ecx - //0x00000f57 LBB0_176 - 0x48, 0x29, 0xd1, //0x00000f57 subq %rdx, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x00000f5a movq %rcx, (%r13) - 0x48, 0x85, 0xdb, //0x00000f5e testq %rbx, %rbx - 0x0f, 0x8f, 0x39, 0xf4, 0xff, 0xff, //0x00000f61 jg LBB0_3 - 0xe9, 0xff, 0x2b, 0x00, 0x00, //0x00000f67 jmp LBB0_178 - //0x00000f6c LBB0_179 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00000f6c movq $-1, (%rsp) - 0x4c, 0x8b, 0x57, 0x08, //0x00000f74 movq $8(%rdi), %r10 - 0x4d, 0x8b, 0x45, 0x00, //0x00000f78 movq (%r13), %r8 - 0x4f, 0x8d, 0x0c, 0x06, //0x00000f7c leaq (%r14,%r8), %r9 - 0x4d, 0x29, 0xc2, //0x00000f80 subq %r8, %r10 - 0x49, 0x83, 0xfa, 0x20, //0x00000f83 cmpq $32, %r10 - 0x0f, 0x8c, 0xae, 0x17, 0x00, 0x00, //0x00000f87 jl LBB0_189 - 0xb9, 0x20, 0x00, 0x00, 0x00, //0x00000f8d movl $32, %ecx - 0x31, 0xf6, //0x00000f92 xorl %esi, %esi - 0x45, 0x31, 0xff, //0x00000f94 xorl %r15d, %r15d - 0xe9, 0x58, 0x00, 0x00, 0x00, //0x00000f97 jmp LBB0_181 - 0x90, 0x90, 0x90, 0x90, //0x00000f9c .p2align 4, 0x90 - //0x00000fa0 LBB0_185 - 0x44, 0x89, 0xf8, //0x00000fa0 movl %r15d, %eax - 0xf7, 0xd0, //0x00000fa3 notl %eax - 0x21, 0xd8, //0x00000fa5 andl %ebx, %eax - 0x8d, 0x14, 0x00, //0x00000fa7 leal (%rax,%rax), %edx - 0x44, 0x09, 0xfa, //0x00000faa orl %r15d, %edx - 0x89, 0xd7, //0x00000fad movl %edx, %edi - 0xf7, 0xd7, //0x00000faf notl %edi - 0x21, 0xdf, //0x00000fb1 andl %ebx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000fb3 andl $-1431655766, %edi - 0x45, 0x31, 0xff, //0x00000fb9 xorl %r15d, %r15d - 0x01, 0xc7, //0x00000fbc addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc7, //0x00000fbe setb %r15b - 0x01, 0xff, //0x00000fc2 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00000fc4 xorl $1431655765, %edi - 0x21, 0xd7, //0x00000fca andl %edx, %edi - 0xf7, 0xd7, //0x00000fcc notl %edi - 0x41, 0x21, 0xfb, //0x00000fce andl %edi, %r11d - 0x4d, 0x85, 0xdb, //0x00000fd1 testq %r11, %r11 - 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x00000fd4 jne LBB0_184 - //0x00000fda LBB0_186 - 0x48, 0x83, 0xc6, 0x20, //0x00000fda addq $32, %rsi - 0x49, 0x8d, 0x04, 0x0a, //0x00000fde leaq (%r10,%rcx), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x00000fe2 addq $-32, %rax - 0x48, 0x83, 0xc1, 0xe0, //0x00000fe6 addq $-32, %rcx - 0x48, 0x83, 0xf8, 0x3f, //0x00000fea cmpq $63, %rax - 0x0f, 0x8e, 0x29, 0x17, 0x00, 0x00, //0x00000fee jle LBB0_187 - //0x00000ff4 LBB0_181 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00000ff4 vmovdqu (%r9,%rsi), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00000ffa vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd9, //0x00000ffe vpmovmskb %ymm1, %r11d - 0xc5, 0xfd, 0x74, 0xc7, //0x00001002 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x00001006 vpmovmskb %ymm0, %ebx - 0x85, 0xdb, //0x0000100a testl %ebx, %ebx - 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x0000100c jne LBB0_185 - 0x4d, 0x85, 0xff, //0x00001012 testq %r15, %r15 - 0x0f, 0x85, 0x85, 0xff, 0xff, 0xff, //0x00001015 jne LBB0_185 - 0x45, 0x31, 0xff, //0x0000101b xorl %r15d, %r15d - 0x4d, 0x85, 0xdb, //0x0000101e testq %r11, %r11 - 0x0f, 0x84, 0xb3, 0xff, 0xff, 0xff, //0x00001021 je LBB0_186 - //0x00001027 LBB0_184 - 0x41, 0x0f, 0xbc, 0xc3, //0x00001027 bsfl %r11d, %eax - 0x4c, 0x01, 0xc0, //0x0000102b addq %r8, %rax - 0x4c, 0x8d, 0x0c, 0x06, //0x0000102e leaq (%rsi,%rax), %r9 - 0x49, 0x83, 0xc1, 0x01, //0x00001032 addq $1, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00001036 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x0000103b movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001040 movq $8(%rsp), %r15 - 0x4d, 0x89, 0x4d, 0x00, //0x00001045 movq %r9, (%r13) - 0x4d, 0x85, 0xc0, //0x00001049 testq %r8, %r8 - 0x0f, 0x8f, 0x5f, 0x07, 0x00, 0x00, //0x0000104c jg LBB0_300 - 0xe9, 0xd5, 0x2a, 0x00, 0x00, //0x00001052 jmp LBB0_679 - //0x00001057 LBB0_190 - 0x4c, 0x29, 0xcb, //0x00001057 subq %r9, %rbx - 0x0f, 0x84, 0xbc, 0x2c, 0x00, 0x00, //0x0000105a je LBB0_717 - 0x48, 0x83, 0xfb, 0x40, //0x00001060 cmpq $64, %rbx - 0x0f, 0x82, 0x53, 0x1a, 0x00, 0x00, //0x00001064 jb LBB0_506 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000106a movq $-1, %r15 - 0x4d, 0x89, 0xca, //0x00001071 movq %r9, %r10 - 0x45, 0x31, 0xdb, //0x00001074 xorl %r11d, %r11d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001077 .p2align 4, 0x90 - //0x00001080 LBB0_193 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x16, //0x00001080 vmovdqu (%r14,%r10), %ymm0 - 0xc4, 0x81, 0x7e, 0x6f, 0x4c, 0x16, 0x20, //0x00001086 vmovdqu $32(%r14,%r10), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x0000108d vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x00001091 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x00001095 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001099 vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xd7, //0x0000109d vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x000010a1 vpmovmskb %ymm2, %edx - 0xc5, 0xf5, 0x74, 0xd7, //0x000010a5 vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xca, //0x000010a9 vpmovmskb %ymm2, %ecx - 0xc5, 0xbd, 0x64, 0xd1, //0x000010ad vpcmpgtb %ymm1, %ymm8, %ymm2 - 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x000010b1 vpcmpgtb %ymm9, %ymm1, %ymm1 - 0xc5, 0xed, 0xdb, 0xc9, //0x000010b6 vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x000010ba vpmovmskb %ymm1, %esi - 0x48, 0xc1, 0xe0, 0x20, //0x000010be shlq $32, %rax - 0x48, 0x09, 0xc7, //0x000010c2 orq %rax, %rdi - 0x48, 0xc1, 0xe1, 0x20, //0x000010c5 shlq $32, %rcx - 0x48, 0xc1, 0xe6, 0x20, //0x000010c9 shlq $32, %rsi - 0x48, 0x09, 0xca, //0x000010cd orq %rcx, %rdx - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x000010d0 jne LBB0_204 - 0x4d, 0x85, 0xdb, //0x000010d6 testq %r11, %r11 - 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x000010d9 jne LBB0_206 - 0x45, 0x31, 0xdb, //0x000010df xorl %r11d, %r11d - //0x000010e2 LBB0_196 - 0xc5, 0xbd, 0x64, 0xc8, //0x000010e2 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x000010e6 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x000010eb vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x000010ef vpmovmskb %ymm0, %eax - 0x48, 0x09, 0xc6, //0x000010f3 orq %rax, %rsi - 0x48, 0x85, 0xff, //0x000010f6 testq %rdi, %rdi - 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, //0x000010f9 jne LBB0_207 - 0x48, 0x85, 0xf6, //0x000010ff testq %rsi, %rsi - 0x0f, 0x85, 0xac, 0x2a, 0x00, 0x00, //0x00001102 jne LBB0_699 - 0x48, 0x83, 0xc3, 0xc0, //0x00001108 addq $-64, %rbx - 0x49, 0x83, 0xc2, 0x40, //0x0000110c addq $64, %r10 - 0x48, 0x83, 0xfb, 0x3f, //0x00001110 cmpq $63, %rbx - 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x00001114 ja LBB0_193 - 0xe9, 0x81, 0x16, 0x00, 0x00, //0x0000111a jmp LBB0_199 - //0x0000111f LBB0_204 - 0x49, 0x83, 0xff, 0xff, //0x0000111f cmpq $-1, %r15 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00001123 jne LBB0_206 - 0x4c, 0x0f, 0xbc, 0xfa, //0x00001129 bsfq %rdx, %r15 - 0x4d, 0x01, 0xd7, //0x0000112d addq %r10, %r15 - //0x00001130 LBB0_206 - 0x4c, 0x89, 0x3c, 0x24, //0x00001130 movq %r15, (%rsp) - 0x4c, 0x89, 0xd8, //0x00001134 movq %r11, %rax - 0x48, 0xf7, 0xd0, //0x00001137 notq %rax - 0x48, 0x21, 0xd0, //0x0000113a andq %rdx, %rax - 0x4d, 0x89, 0xd7, //0x0000113d movq %r10, %r15 - 0x4c, 0x8d, 0x14, 0x00, //0x00001140 leaq (%rax,%rax), %r10 - 0x4d, 0x09, 0xda, //0x00001144 orq %r11, %r10 - 0x4c, 0x89, 0xd1, //0x00001147 movq %r10, %rcx - 0x48, 0xf7, 0xd1, //0x0000114a notq %rcx - 0x48, 0x21, 0xd1, //0x0000114d andq %rdx, %rcx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001150 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd1, //0x0000115a andq %rdx, %rcx - 0x45, 0x31, 0xdb, //0x0000115d xorl %r11d, %r11d - 0x48, 0x01, 0xc1, //0x00001160 addq %rax, %rcx - 0x41, 0x0f, 0x92, 0xc3, //0x00001163 setb %r11b - 0x48, 0x01, 0xc9, //0x00001167 addq %rcx, %rcx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000116a movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc1, //0x00001174 xorq %rax, %rcx - 0x4c, 0x21, 0xd1, //0x00001177 andq %r10, %rcx - 0x4d, 0x89, 0xfa, //0x0000117a movq %r15, %r10 - 0x4c, 0x8b, 0x3c, 0x24, //0x0000117d movq (%rsp), %r15 - 0x48, 0xf7, 0xd1, //0x00001181 notq %rcx - 0x48, 0x21, 0xcf, //0x00001184 andq %rcx, %rdi - 0xe9, 0x56, 0xff, 0xff, 0xff, //0x00001187 jmp LBB0_196 - //0x0000118c LBB0_207 - 0x48, 0x0f, 0xbc, 0xcf, //0x0000118c bsfq %rdi, %rcx - 0x48, 0x85, 0xf6, //0x00001190 testq %rsi, %rsi - 0x0f, 0x84, 0x72, 0x01, 0x00, 0x00, //0x00001193 je LBB0_230 - 0x48, 0x0f, 0xbc, 0xd6, //0x00001199 bsfq %rsi, %rdx - 0x48, 0x39, 0xca, //0x0000119d cmpq %rcx, %rdx - 0x0f, 0x83, 0x73, 0x01, 0x00, 0x00, //0x000011a0 jae LBB0_231 - 0xe9, 0x8b, 0x2b, 0x00, 0x00, //0x000011a6 jmp LBB0_209 - //0x000011ab LBB0_210 - 0x4c, 0x01, 0xe9, //0x000011ab addq %r13, %rcx - 0x48, 0x03, 0x4c, 0x24, 0x38, //0x000011ae addq $56(%rsp), %rcx - 0xc5, 0xf8, 0x77, //0x000011b3 vzeroupper - 0x49, 0x89, 0xcd, //0x000011b6 movq %rcx, %r13 - 0xe9, 0x3d, 0x04, 0x00, 0x00, //0x000011b9 jmp LBB0_279 - //0x000011be LBB0_211 - 0x4c, 0x29, 0xc9, //0x000011be subq %r9, %rcx - 0x0f, 0x84, 0x55, 0x2b, 0x00, 0x00, //0x000011c1 je LBB0_717 - 0x48, 0x83, 0xf9, 0x40, //0x000011c7 cmpq $64, %rcx - 0x0f, 0x82, 0x94, 0x19, 0x00, 0x00, //0x000011cb jb LBB0_513 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000011d1 movq $-1, %r15 - 0x4d, 0x89, 0xca, //0x000011d8 movq %r9, %r10 - 0x45, 0x31, 0xdb, //0x000011db xorl %r11d, %r11d - 0x90, 0x90, //0x000011de .p2align 4, 0x90 - //0x000011e0 LBB0_214 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x16, //0x000011e0 vmovdqu (%r14,%r10), %ymm0 - 0xc4, 0x81, 0x7e, 0x6f, 0x4c, 0x16, 0x20, //0x000011e6 vmovdqu $32(%r14,%r10), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x000011ed vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x000011f1 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x000011f5 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x000011f9 vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xd7, //0x000011fd vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00001201 vpmovmskb %ymm2, %edx - 0xc5, 0xf5, 0x74, 0xd7, //0x00001205 vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xda, //0x00001209 vpmovmskb %ymm2, %ebx - 0xc5, 0xbd, 0x64, 0xd1, //0x0000120d vpcmpgtb %ymm1, %ymm8, %ymm2 - 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00001211 vpcmpgtb %ymm9, %ymm1, %ymm1 - 0xc5, 0xed, 0xdb, 0xc9, //0x00001216 vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x0000121a vpmovmskb %ymm1, %esi - 0x48, 0xc1, 0xe0, 0x20, //0x0000121e shlq $32, %rax - 0x48, 0x09, 0xc7, //0x00001222 orq %rax, %rdi - 0x48, 0xc1, 0xe3, 0x20, //0x00001225 shlq $32, %rbx - 0x48, 0xc1, 0xe6, 0x20, //0x00001229 shlq $32, %rsi - 0x48, 0x09, 0xda, //0x0000122d orq %rbx, %rdx - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00001230 jne LBB0_225 - 0x4d, 0x85, 0xdb, //0x00001236 testq %r11, %r11 - 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00001239 jne LBB0_227 - 0x45, 0x31, 0xdb, //0x0000123f xorl %r11d, %r11d - //0x00001242 LBB0_217 - 0xc5, 0xbd, 0x64, 0xc8, //0x00001242 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00001246 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x0000124b vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x0000124f vpmovmskb %ymm0, %eax - 0x48, 0x09, 0xc6, //0x00001253 orq %rax, %rsi - 0x48, 0x85, 0xff, //0x00001256 testq %rdi, %rdi - 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, //0x00001259 jne LBB0_228 - 0x48, 0x85, 0xf6, //0x0000125f testq %rsi, %rsi - 0x0f, 0x85, 0x4c, 0x29, 0x00, 0x00, //0x00001262 jne LBB0_699 - 0x48, 0x83, 0xc1, 0xc0, //0x00001268 addq $-64, %rcx - 0x49, 0x83, 0xc2, 0x40, //0x0000126c addq $64, %r10 - 0x48, 0x83, 0xf9, 0x3f, //0x00001270 cmpq $63, %rcx - 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x00001274 ja LBB0_214 - 0xe9, 0x4e, 0x16, 0x00, 0x00, //0x0000127a jmp LBB0_220 - //0x0000127f LBB0_225 - 0x49, 0x83, 0xff, 0xff, //0x0000127f cmpq $-1, %r15 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00001283 jne LBB0_227 - 0x4c, 0x0f, 0xbc, 0xfa, //0x00001289 bsfq %rdx, %r15 - 0x4d, 0x01, 0xd7, //0x0000128d addq %r10, %r15 - //0x00001290 LBB0_227 - 0x4c, 0x89, 0x3c, 0x24, //0x00001290 movq %r15, (%rsp) - 0x4c, 0x89, 0xd8, //0x00001294 movq %r11, %rax - 0x48, 0xf7, 0xd0, //0x00001297 notq %rax - 0x48, 0x21, 0xd0, //0x0000129a andq %rdx, %rax - 0x4d, 0x89, 0xd7, //0x0000129d movq %r10, %r15 - 0x4c, 0x8d, 0x14, 0x00, //0x000012a0 leaq (%rax,%rax), %r10 - 0x4d, 0x09, 0xda, //0x000012a4 orq %r11, %r10 - 0x4c, 0x89, 0xd3, //0x000012a7 movq %r10, %rbx - 0x48, 0xf7, 0xd3, //0x000012aa notq %rbx - 0x48, 0x21, 0xd3, //0x000012ad andq %rdx, %rbx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000012b0 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd3, //0x000012ba andq %rdx, %rbx - 0x45, 0x31, 0xdb, //0x000012bd xorl %r11d, %r11d - 0x48, 0x01, 0xc3, //0x000012c0 addq %rax, %rbx - 0x41, 0x0f, 0x92, 0xc3, //0x000012c3 setb %r11b - 0x48, 0x01, 0xdb, //0x000012c7 addq %rbx, %rbx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000012ca movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc3, //0x000012d4 xorq %rax, %rbx - 0x4c, 0x21, 0xd3, //0x000012d7 andq %r10, %rbx - 0x4d, 0x89, 0xfa, //0x000012da movq %r15, %r10 - 0x4c, 0x8b, 0x3c, 0x24, //0x000012dd movq (%rsp), %r15 - 0x48, 0xf7, 0xd3, //0x000012e1 notq %rbx - 0x48, 0x21, 0xdf, //0x000012e4 andq %rbx, %rdi - 0xe9, 0x56, 0xff, 0xff, 0xff, //0x000012e7 jmp LBB0_217 - //0x000012ec LBB0_228 - 0x48, 0x0f, 0xbc, 0xcf, //0x000012ec bsfq %rdi, %rcx - 0x48, 0x85, 0xf6, //0x000012f0 testq %rsi, %rsi - 0x0f, 0x84, 0x7e, 0x04, 0x00, 0x00, //0x000012f3 je LBB0_296 - 0x48, 0x0f, 0xbc, 0xd6, //0x000012f9 bsfq %rsi, %rdx - 0x48, 0x39, 0xca, //0x000012fd cmpq %rcx, %rdx - 0x0f, 0x83, 0x7f, 0x04, 0x00, 0x00, //0x00001300 jae LBB0_297 - 0xe9, 0x2b, 0x2a, 0x00, 0x00, //0x00001306 jmp LBB0_209 - //0x0000130b LBB0_230 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000130b movl $64, %edx - 0x48, 0x39, 0xca, //0x00001310 cmpq %rcx, %rdx - 0x0f, 0x82, 0x1d, 0x2a, 0x00, 0x00, //0x00001313 jb LBB0_209 - //0x00001319 LBB0_231 - 0x49, 0x01, 0xca, //0x00001319 addq %rcx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x0000131c addq $1, %r10 - //0x00001320 LBB0_232 - 0x4d, 0x85, 0xd2, //0x00001320 testq %r10, %r10 - 0x0f, 0x88, 0x1d, 0x28, 0x00, 0x00, //0x00001323 js LBB0_680 - 0x4d, 0x89, 0x55, 0x00, //0x00001329 movq %r10, (%r13) - 0x4d, 0x85, 0xc9, //0x0000132d testq %r9, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00001330 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00001335 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000133a movq $8(%rsp), %r15 - 0x0f, 0x8f, 0x5b, 0xf0, 0xff, 0xff, //0x0000133f jg LBB0_3 - 0xe9, 0xef, 0x27, 0x00, 0x00, //0x00001345 jmp LBB0_463 - //0x0000134a LBB0_234 - 0x41, 0xf6, 0xc3, 0x40, //0x0000134a testb $64, %r11b - 0x0f, 0x85, 0x82, 0x04, 0x00, 0x00, //0x0000134e jne LBB0_302 - 0x4d, 0x8b, 0x4d, 0x00, //0x00001354 movq (%r13), %r9 - 0x4c, 0x8b, 0x7f, 0x08, //0x00001358 movq $8(%rdi), %r15 - 0x4d, 0x89, 0xf8, //0x0000135c movq %r15, %r8 - 0x41, 0xf6, 0xc3, 0x20, //0x0000135f testb $32, %r11b - 0x0f, 0x85, 0x97, 0x0c, 0x00, 0x00, //0x00001363 jne LBB0_385 - 0x4d, 0x29, 0xc8, //0x00001369 subq %r9, %r8 - 0x0f, 0x84, 0xf1, 0x29, 0x00, 0x00, //0x0000136c je LBB0_718 - 0x49, 0x83, 0xf8, 0x40, //0x00001372 cmpq $64, %r8 - 0x0f, 0x82, 0x48, 0x18, 0x00, 0x00, //0x00001376 jb LBB0_516 - 0x4c, 0x89, 0xce, //0x0000137c movq %r9, %rsi - 0x48, 0xf7, 0xd6, //0x0000137f notq %rsi - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00001382 movq $-1, %r11 - 0x4c, 0x89, 0xcf, //0x00001389 movq %r9, %rdi - 0x45, 0x31, 0xd2, //0x0000138c xorl %r10d, %r10d - 0x90, //0x0000138f .p2align 4, 0x90 - //0x00001390 LBB0_239 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x3e, //0x00001390 vmovdqu (%r14,%rdi), %ymm0 - 0x48, 0x89, 0xf9, //0x00001396 movq %rdi, %rcx - 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x3e, 0x20, //0x00001399 vmovdqu $32(%r14,%rdi), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x000013a0 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x000013a4 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x000013a8 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x000013ac vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xc7, //0x000013b0 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x000013b4 vpmovmskb %ymm0, %edx - 0xc5, 0xf5, 0x74, 0xc7, //0x000013b8 vpcmpeqb %ymm7, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x000013bc vpmovmskb %ymm0, %ebx - 0x48, 0xc1, 0xe0, 0x20, //0x000013c0 shlq $32, %rax - 0x48, 0x09, 0xc7, //0x000013c4 orq %rax, %rdi - 0x48, 0xc1, 0xe3, 0x20, //0x000013c7 shlq $32, %rbx - 0x48, 0x09, 0xda, //0x000013cb orq %rbx, %rdx - 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x000013ce jne LBB0_248 - 0x4d, 0x85, 0xd2, //0x000013d4 testq %r10, %r10 - 0x0f, 0x85, 0x48, 0x00, 0x00, 0x00, //0x000013d7 jne LBB0_250 - 0x45, 0x31, 0xd2, //0x000013dd xorl %r10d, %r10d - 0x48, 0x85, 0xff, //0x000013e0 testq %rdi, %rdi - 0x0f, 0x85, 0x96, 0x00, 0x00, 0x00, //0x000013e3 jne LBB0_252 - //0x000013e9 LBB0_242 - 0x49, 0x83, 0xc0, 0xc0, //0x000013e9 addq $-64, %r8 - 0x48, 0x83, 0xc6, 0xc0, //0x000013ed addq $-64, %rsi - 0x48, 0x89, 0xcf, //0x000013f1 movq %rcx, %rdi - 0x48, 0x83, 0xc7, 0x40, //0x000013f4 addq $64, %rdi - 0x49, 0x83, 0xf8, 0x3f, //0x000013f8 cmpq $63, %r8 - 0x0f, 0x87, 0x8e, 0xff, 0xff, 0xff, //0x000013fc ja LBB0_239 - 0xe9, 0x99, 0x15, 0x00, 0x00, //0x00001402 jmp LBB0_243 - //0x00001407 LBB0_248 - 0x4c, 0x89, 0x1c, 0x24, //0x00001407 movq %r11, (%rsp) - 0x49, 0x83, 0xfb, 0xff, //0x0000140b cmpq $-1, %r11 - 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x0000140f jne LBB0_251 - 0x48, 0x0f, 0xbc, 0xc2, //0x00001415 bsfq %rdx, %rax - 0x48, 0x01, 0xc8, //0x00001419 addq %rcx, %rax - 0x48, 0x89, 0x04, 0x24, //0x0000141c movq %rax, (%rsp) - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00001420 jmp LBB0_251 - //0x00001425 LBB0_250 - 0x4c, 0x89, 0x1c, 0x24, //0x00001425 movq %r11, (%rsp) - //0x00001429 LBB0_251 - 0x4c, 0x89, 0xd0, //0x00001429 movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x0000142c notq %rax - 0x48, 0x21, 0xd0, //0x0000142f andq %rdx, %rax - 0x4c, 0x8d, 0x1c, 0x00, //0x00001432 leaq (%rax,%rax), %r11 - 0x4d, 0x09, 0xd3, //0x00001436 orq %r10, %r11 - 0x4c, 0x89, 0xdb, //0x00001439 movq %r11, %rbx - 0x48, 0xf7, 0xd3, //0x0000143c notq %rbx - 0x48, 0x21, 0xd3, //0x0000143f andq %rdx, %rbx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001442 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd3, //0x0000144c andq %rdx, %rbx - 0x45, 0x31, 0xd2, //0x0000144f xorl %r10d, %r10d - 0x48, 0x01, 0xc3, //0x00001452 addq %rax, %rbx - 0x41, 0x0f, 0x92, 0xc2, //0x00001455 setb %r10b - 0x48, 0x01, 0xdb, //0x00001459 addq %rbx, %rbx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000145c movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc3, //0x00001466 xorq %rax, %rbx - 0x4c, 0x21, 0xdb, //0x00001469 andq %r11, %rbx - 0x48, 0xf7, 0xd3, //0x0000146c notq %rbx - 0x48, 0x21, 0xdf, //0x0000146f andq %rbx, %rdi - 0x4c, 0x8b, 0x1c, 0x24, //0x00001472 movq (%rsp), %r11 - 0x48, 0x85, 0xff, //0x00001476 testq %rdi, %rdi - 0x0f, 0x84, 0x6a, 0xff, 0xff, 0xff, //0x00001479 je LBB0_242 - //0x0000147f LBB0_252 - 0xc5, 0x7d, 0x7f, 0xea, //0x0000147f vmovdqa %ymm13, %ymm2 - 0x48, 0x0f, 0xbc, 0xcf, //0x00001483 bsfq %rdi, %rcx - 0x48, 0x29, 0xf1, //0x00001487 subq %rsi, %rcx - 0xe9, 0x5f, 0x10, 0x00, 0x00, //0x0000148a jmp LBB0_461 - //0x0000148f LBB0_253 - 0x4c, 0x8b, 0x57, 0x08, //0x0000148f movq $8(%rdi), %r10 - 0x49, 0x8b, 0x4d, 0x00, //0x00001493 movq (%r13), %rcx - 0x41, 0xf6, 0xc3, 0x40, //0x00001497 testb $64, %r11b - 0x48, 0x89, 0x0c, 0x24, //0x0000149b movq %rcx, (%rsp) - 0x0f, 0x85, 0x0b, 0x04, 0x00, 0x00, //0x0000149f jne LBB0_313 - 0x49, 0x29, 0xca, //0x000014a5 subq %rcx, %r10 - 0x0f, 0x84, 0x3a, 0x28, 0x00, 0x00, //0x000014a8 je LBB0_704 - 0x49, 0x8d, 0x04, 0x0e, //0x000014ae leaq (%r14,%rcx), %rax - 0x48, 0x89, 0x44, 0x24, 0x38, //0x000014b2 movq %rax, $56(%rsp) - 0x80, 0x38, 0x30, //0x000014b7 cmpb $48, (%rax) - 0x0f, 0x85, 0xab, 0x0c, 0x00, 0x00, //0x000014ba jne LBB0_406 - 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, //0x000014c0 movl $1, %r9d - 0x49, 0x83, 0xfa, 0x01, //0x000014c6 cmpq $1, %r10 - 0x0f, 0x85, 0x6c, 0x0c, 0x00, 0x00, //0x000014ca jne LBB0_404 - //0x000014d0 LBB0_257 - 0x48, 0x8b, 0x0c, 0x24, //0x000014d0 movq (%rsp), %rcx - 0xe9, 0xb0, 0x14, 0x00, 0x00, //0x000014d4 jmp LBB0_498 - //0x000014d9 LBB0_258 - 0x41, 0xf6, 0xc3, 0x40, //0x000014d9 testb $64, %r11b - 0x0f, 0x85, 0xe2, 0x04, 0x00, 0x00, //0x000014dd jne LBB0_329 - 0x49, 0x8b, 0x0f, //0x000014e3 movq (%r15), %rcx - 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000014e6 cmpq $4095, %rcx - 0x0f, 0x8f, 0x2c, 0x26, 0x00, 0x00, //0x000014ed jg LBB0_705 - 0x48, 0x8d, 0x41, 0x01, //0x000014f3 leaq $1(%rcx), %rax - 0x49, 0x89, 0x07, //0x000014f7 movq %rax, (%r15) - 0x49, 0xc7, 0x44, 0xcf, 0x08, 0x05, 0x00, 0x00, 0x00, //0x000014fa movq $5, $8(%r15,%rcx,8) - 0xe9, 0x98, 0xee, 0xff, 0xff, //0x00001503 jmp LBB0_3 - //0x00001508 LBB0_261 - 0x49, 0x8b, 0x4d, 0x00, //0x00001508 movq (%r13), %rcx - 0x48, 0x8b, 0x57, 0x08, //0x0000150c movq $8(%rdi), %rdx - 0x48, 0x8d, 0x42, 0xfc, //0x00001510 leaq $-4(%rdx), %rax - 0x48, 0x39, 0xc1, //0x00001514 cmpq %rax, %rcx - 0x0f, 0x87, 0x8e, 0x26, 0x00, 0x00, //0x00001517 ja LBB0_686 - 0x41, 0x8b, 0x14, 0x0e, //0x0000151d movl (%r14,%rcx), %edx - 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x00001521 cmpl $1702063201, %edx - 0x0f, 0x85, 0xac, 0x26, 0x00, 0x00, //0x00001527 jne LBB0_687 - 0x48, 0x8d, 0x41, 0x04, //0x0000152d leaq $4(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00001531 movq %rax, (%r13) - 0x48, 0x85, 0xc9, //0x00001535 testq %rcx, %rcx - 0x0f, 0x8f, 0x62, 0xee, 0xff, 0xff, //0x00001538 jg LBB0_3 - 0xe9, 0x98, 0x27, 0x00, 0x00, //0x0000153e jmp LBB0_264 - //0x00001543 LBB0_265 - 0x49, 0x8b, 0x4d, 0x00, //0x00001543 movq (%r13), %rcx - 0x48, 0x8b, 0x57, 0x08, //0x00001547 movq $8(%rdi), %rdx - 0x48, 0x8d, 0x42, 0xfd, //0x0000154b leaq $-3(%rdx), %rax - 0x48, 0x39, 0xc1, //0x0000154f cmpq %rax, %rcx - 0x0f, 0x87, 0x53, 0x26, 0x00, 0x00, //0x00001552 ja LBB0_686 - 0x48, 0x8d, 0x41, 0xff, //0x00001558 leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0e, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x0000155c cmpl $1819047278, $-1(%r14,%rcx) - 0x0f, 0x84, 0x2d, 0x00, 0x00, 0x00, //0x00001565 je LBB0_273 - 0xe9, 0xc3, 0x26, 0x00, 0x00, //0x0000156b jmp LBB0_267 - //0x00001570 LBB0_271 - 0x49, 0x8b, 0x4d, 0x00, //0x00001570 movq (%r13), %rcx - 0x48, 0x8b, 0x57, 0x08, //0x00001574 movq $8(%rdi), %rdx - 0x48, 0x8d, 0x42, 0xfd, //0x00001578 leaq $-3(%rdx), %rax - 0x48, 0x39, 0xc1, //0x0000157c cmpq %rax, %rcx - 0x0f, 0x87, 0x26, 0x26, 0x00, 0x00, //0x0000157f ja LBB0_686 - 0x48, 0x8d, 0x41, 0xff, //0x00001585 leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0e, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00001589 cmpl $1702195828, $-1(%r14,%rcx) - 0x0f, 0x85, 0xe6, 0x26, 0x00, 0x00, //0x00001592 jne LBB0_692 - //0x00001598 LBB0_273 - 0x48, 0x89, 0x04, 0x24, //0x00001598 movq %rax, (%rsp) - 0x48, 0x8d, 0x41, 0x03, //0x0000159c leaq $3(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x000015a0 movq %rax, (%r13) - 0x48, 0x85, 0xc9, //0x000015a4 testq %rcx, %rcx - 0x0f, 0x8f, 0xf3, 0xed, 0xff, 0xff, //0x000015a7 jg LBB0_3 - 0xe9, 0xe3, 0x25, 0x00, 0x00, //0x000015ad jmp LBB0_711 - //0x000015b2 LBB0_274 - 0x41, 0xf6, 0xc3, 0x40, //0x000015b2 testb $64, %r11b - 0x0f, 0x85, 0xfb, 0x06, 0x00, 0x00, //0x000015b6 jne LBB0_355 - 0x49, 0x8b, 0x0f, //0x000015bc movq (%r15), %rcx - 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000015bf cmpq $4095, %rcx - 0x0f, 0x8f, 0x53, 0x25, 0x00, 0x00, //0x000015c6 jg LBB0_705 - 0x48, 0x8d, 0x41, 0x01, //0x000015cc leaq $1(%rcx), %rax - 0x49, 0x89, 0x07, //0x000015d0 movq %rax, (%r15) - 0x49, 0xc7, 0x44, 0xcf, 0x08, 0x06, 0x00, 0x00, 0x00, //0x000015d3 movq $6, $8(%r15,%rcx,8) - 0xe9, 0xbf, 0xed, 0xff, 0xff, //0x000015dc jmp LBB0_3 - //0x000015e1 LBB0_277 - 0x89, 0xc8, //0x000015e1 movl %ecx, %eax - 0x49, 0x01, 0xc5, //0x000015e3 addq %rax, %r13 - 0x4d, 0x01, 0xfd, //0x000015e6 addq %r15, %r13 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x000015e9 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x000015ee movq $16(%rsp), %rdi - 0xe9, 0x03, 0x00, 0x00, 0x00, //0x000015f3 jmp LBB0_279 - //0x000015f8 LBB0_278 - 0x49, 0x01, 0xcd, //0x000015f8 addq %rcx, %r13 - //0x000015fb LBB0_279 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000015fb movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x28, //0x00001602 movq $40(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00001607 testq %rdx, %rdx - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000160a movq $8(%rsp), %r15 - 0x0f, 0x84, 0x66, 0x25, 0x00, 0x00, //0x0000160f je LBB0_684 - 0x4d, 0x85, 0xd2, //0x00001615 testq %r10, %r10 - 0xc5, 0xfe, 0x6f, 0x1d, 0xa0, 0xeb, 0xff, 0xff, //0x00001618 vmovdqu $-5216(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0x0f, 0x84, 0x55, 0x25, 0x00, 0x00, //0x00001620 je LBB0_684 - 0x4d, 0x85, 0xc9, //0x00001626 testq %r9, %r9 - 0x0f, 0x84, 0x4c, 0x25, 0x00, 0x00, //0x00001629 je LBB0_684 - 0x4c, 0x2b, 0x6c, 0x24, 0x38, //0x0000162f subq $56(%rsp), %r13 - 0x49, 0x8d, 0x4d, 0xff, //0x00001634 leaq $-1(%r13), %rcx - 0x48, 0x39, 0xca, //0x00001638 cmpq %rcx, %rdx - 0x0f, 0x84, 0x80, 0x00, 0x00, 0x00, //0x0000163b je LBB0_288 - 0x49, 0x39, 0xca, //0x00001641 cmpq %rcx, %r10 - 0x0f, 0x84, 0x77, 0x00, 0x00, 0x00, //0x00001644 je LBB0_288 - 0x49, 0x39, 0xc9, //0x0000164a cmpq %rcx, %r9 - 0x0f, 0x84, 0x6e, 0x00, 0x00, 0x00, //0x0000164d je LBB0_288 - 0x4d, 0x85, 0xd2, //0x00001653 testq %r10, %r10 - 0xc5, 0xfe, 0x6f, 0x2d, 0x62, 0xea, 0xff, 0xff, //0x00001656 vmovdqu $-5534(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x7a, 0xea, 0xff, 0xff, //0x0000165e vmovdqu $-5510(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x92, 0xea, 0xff, 0xff, //0x00001666 vmovdqu $-5486(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0xaa, 0xea, 0xff, 0xff, //0x0000166e vmovdqu $-5462(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001676 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0x7d, 0xeb, 0xff, 0xff, //0x0000167b vmovdqu $-5251(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x05, 0x95, 0xeb, 0xff, 0xff, //0x00001683 vmovdqu $-5227(%rip), %ymm0 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0xad, 0xeb, 0xff, 0xff, //0x0000168b vmovdqu $-5203(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0x45, 0xeb, 0xff, 0xff, //0x00001693 vmovdqu $-5307(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0xfd, 0xeb, 0xff, 0xff, //0x0000169b vmovdqu $-5123(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x0f, 0x8e, 0x9b, 0x00, 0x00, 0x00, //0x000016a3 jle LBB0_293 - 0x49, 0x8d, 0x42, 0xff, //0x000016a9 leaq $-1(%r10), %rax - 0x49, 0x39, 0xc1, //0x000016ad cmpq %rax, %r9 - 0x0f, 0x84, 0x8e, 0x00, 0x00, 0x00, //0x000016b0 je LBB0_293 - 0x49, 0xf7, 0xd2, //0x000016b6 notq %r10 - 0x4d, 0x89, 0xd5, //0x000016b9 movq %r10, %r13 - 0xe9, 0x50, 0x00, 0x00, 0x00, //0x000016bc jmp LBB0_289 - //0x000016c1 LBB0_288 - 0x49, 0xf7, 0xdd, //0x000016c1 negq %r13 - 0xc5, 0xfe, 0x6f, 0x2d, 0xf4, 0xe9, 0xff, 0xff, //0x000016c4 vmovdqu $-5644(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x0c, 0xea, 0xff, 0xff, //0x000016cc vmovdqu $-5620(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x24, 0xea, 0xff, 0xff, //0x000016d4 vmovdqu $-5596(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x3c, 0xea, 0xff, 0xff, //0x000016dc vmovdqu $-5572(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000016e4 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0x0f, 0xeb, 0xff, 0xff, //0x000016e9 vmovdqu $-5361(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x05, 0x27, 0xeb, 0xff, 0xff, //0x000016f1 vmovdqu $-5337(%rip), %ymm0 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0x3f, 0xeb, 0xff, 0xff, //0x000016f9 vmovdqu $-5313(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0xd7, 0xea, 0xff, 0xff, //0x00001701 vmovdqu $-5417(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x8f, 0xeb, 0xff, 0xff, //0x00001709 vmovdqu $-5233(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - //0x00001711 LBB0_289 - 0xc5, 0x7e, 0x6f, 0x1d, 0x27, 0xea, 0xff, 0xff, //0x00001711 vmovdqu $-5593(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x3f, 0xea, 0xff, 0xff, //0x00001719 vmovdqu $-5569(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - //0x00001721 LBB0_290 - 0x48, 0x8b, 0x5c, 0x24, 0x20, //0x00001721 movq $32(%rsp), %rbx - //0x00001726 LBB0_291 - 0x4d, 0x85, 0xed, //0x00001726 testq %r13, %r13 - 0x0f, 0x88, 0x49, 0x24, 0x00, 0x00, //0x00001729 js LBB0_683 - 0x48, 0x8b, 0x44, 0x24, 0x30, //0x0000172f movq $48(%rsp), %rax - 0x48, 0x8b, 0x08, //0x00001734 movq (%rax), %rcx - 0x48, 0x83, 0xc1, 0xff, //0x00001737 addq $-1, %rcx - 0xc5, 0x7d, 0x6f, 0xe8, //0x0000173b vmovdqa %ymm0, %ymm13 - 0xe9, 0x74, 0xec, 0xff, 0xff, //0x0000173f jmp LBB0_2 - //0x00001744 LBB0_293 - 0x48, 0x89, 0xd0, //0x00001744 movq %rdx, %rax - 0x4c, 0x09, 0xc8, //0x00001747 orq %r9, %rax - 0x0f, 0x99, 0xc1, //0x0000174a setns %cl - 0xc5, 0x7e, 0x6f, 0x1d, 0xeb, 0xe9, 0xff, 0xff, //0x0000174d vmovdqu $-5653(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x03, 0xea, 0xff, 0xff, //0x00001755 vmovdqu $-5629(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - 0x0f, 0x88, 0x84, 0x08, 0x00, 0x00, //0x0000175d js LBB0_384 - 0x4c, 0x39, 0xca, //0x00001763 cmpq %r9, %rdx - 0x0f, 0x8c, 0x7b, 0x08, 0x00, 0x00, //0x00001766 jl LBB0_384 - 0x48, 0xf7, 0xd2, //0x0000176c notq %rdx - 0x49, 0x89, 0xd5, //0x0000176f movq %rdx, %r13 - 0xe9, 0xaa, 0xff, 0xff, 0xff, //0x00001772 jmp LBB0_290 - //0x00001777 LBB0_296 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001777 movl $64, %edx - 0x48, 0x39, 0xca, //0x0000177c cmpq %rcx, %rdx - 0x0f, 0x82, 0xb1, 0x25, 0x00, 0x00, //0x0000177f jb LBB0_209 - //0x00001785 LBB0_297 - 0x49, 0x01, 0xca, //0x00001785 addq %rcx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00001788 addq $1, %r10 - //0x0000178c LBB0_298 - 0x4d, 0x85, 0xd2, //0x0000178c testq %r10, %r10 - 0x0f, 0x88, 0xb1, 0x23, 0x00, 0x00, //0x0000178f js LBB0_680 - 0x4d, 0x89, 0x55, 0x00, //0x00001795 movq %r10, (%r13) - 0x4d, 0x85, 0xc9, //0x00001799 testq %r9, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x0000179c movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x000017a1 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x000017a6 movq $8(%rsp), %r15 - 0x0f, 0x8e, 0x88, 0x23, 0x00, 0x00, //0x000017ab jle LBB0_463 - //0x000017b1 LBB0_300 - 0x49, 0x8b, 0x0f, //0x000017b1 movq (%r15), %rcx - 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000017b4 cmpq $4095, %rcx - 0x0f, 0x8f, 0x5e, 0x23, 0x00, 0x00, //0x000017bb jg LBB0_705 - 0x48, 0x8d, 0x41, 0x01, //0x000017c1 leaq $1(%rcx), %rax - 0x49, 0x89, 0x07, //0x000017c5 movq %rax, (%r15) - 0x49, 0xc7, 0x44, 0xcf, 0x08, 0x04, 0x00, 0x00, 0x00, //0x000017c8 movq $4, $8(%r15,%rcx,8) - 0xe9, 0xca, 0xeb, 0xff, 0xff, //0x000017d1 jmp LBB0_3 - //0x000017d6 LBB0_302 - 0x4c, 0x8b, 0x57, 0x08, //0x000017d6 movq $8(%rdi), %r10 - 0x4d, 0x8b, 0x45, 0x00, //0x000017da movq (%r13), %r8 - 0x4f, 0x8d, 0x0c, 0x06, //0x000017de leaq (%r14,%r8), %r9 - 0x4d, 0x29, 0xc2, //0x000017e2 subq %r8, %r10 - 0x49, 0x83, 0xfa, 0x20, //0x000017e5 cmpq $32, %r10 - 0x0f, 0x8c, 0xa4, 0x00, 0x00, 0x00, //0x000017e9 jl LBB0_312 - 0xb9, 0x20, 0x00, 0x00, 0x00, //0x000017ef movl $32, %ecx - 0x31, 0xf6, //0x000017f4 xorl %esi, %esi - 0x45, 0x31, 0xff, //0x000017f6 xorl %r15d, %r15d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000017f9 .p2align 4, 0x90 - //0x00001800 LBB0_304 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00001800 vmovdqu (%r9,%rsi), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00001806 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd9, //0x0000180a vpmovmskb %ymm1, %r11d - 0xc5, 0xfd, 0x74, 0xc7, //0x0000180e vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x00001812 vpmovmskb %ymm0, %ebx - 0x85, 0xdb, //0x00001816 testl %ebx, %ebx - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00001818 jne LBB0_307 - 0x4d, 0x85, 0xff, //0x0000181e testq %r15, %r15 - 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00001821 jne LBB0_307 - 0x45, 0x31, 0xff, //0x00001827 xorl %r15d, %r15d - 0xe9, 0x32, 0x00, 0x00, 0x00, //0x0000182a jmp LBB0_308 - 0x90, //0x0000182f .p2align 4, 0x90 - //0x00001830 LBB0_307 - 0x44, 0x89, 0xf8, //0x00001830 movl %r15d, %eax - 0xf7, 0xd0, //0x00001833 notl %eax - 0x21, 0xd8, //0x00001835 andl %ebx, %eax - 0x8d, 0x14, 0x00, //0x00001837 leal (%rax,%rax), %edx - 0x44, 0x09, 0xfa, //0x0000183a orl %r15d, %edx - 0x89, 0xd7, //0x0000183d movl %edx, %edi - 0xf7, 0xd7, //0x0000183f notl %edi - 0x21, 0xdf, //0x00001841 andl %ebx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001843 andl $-1431655766, %edi - 0x45, 0x31, 0xff, //0x00001849 xorl %r15d, %r15d - 0x01, 0xc7, //0x0000184c addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc7, //0x0000184e setb %r15b - 0x01, 0xff, //0x00001852 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00001854 xorl $1431655765, %edi - 0x21, 0xd7, //0x0000185a andl %edx, %edi - 0xf7, 0xd7, //0x0000185c notl %edi - 0x41, 0x21, 0xfb, //0x0000185e andl %edi, %r11d - //0x00001861 LBB0_308 - 0x4d, 0x85, 0xdb, //0x00001861 testq %r11, %r11 - 0x0f, 0x85, 0xff, 0xea, 0xff, 0xff, //0x00001864 jne LBB0_153 - 0x48, 0x83, 0xc6, 0x20, //0x0000186a addq $32, %rsi - 0x49, 0x8d, 0x04, 0x0a, //0x0000186e leaq (%r10,%rcx), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x00001872 addq $-32, %rax - 0x48, 0x83, 0xc1, 0xe0, //0x00001876 addq $-32, %rcx - 0x48, 0x83, 0xf8, 0x3f, //0x0000187a cmpq $63, %rax - 0x0f, 0x8f, 0x7c, 0xff, 0xff, 0xff, //0x0000187e jg LBB0_304 - 0x4d, 0x85, 0xff, //0x00001884 testq %r15, %r15 - 0x0f, 0x85, 0xd7, 0x1d, 0x00, 0x00, //0x00001887 jne LBB0_622 - 0x49, 0x01, 0xf1, //0x0000188d addq %rsi, %r9 - 0x49, 0x29, 0xf2, //0x00001890 subq %rsi, %r10 - //0x00001893 LBB0_312 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00001893 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00001898 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000189d movq $8(%rsp), %r15 - 0x4d, 0x85, 0xd2, //0x000018a2 testq %r10, %r10 - 0x0f, 0x8f, 0x32, 0x1e, 0x00, 0x00, //0x000018a5 jg LBB0_626 - 0xe9, 0xe5, 0x22, 0x00, 0x00, //0x000018ab jmp LBB0_711 - //0x000018b0 LBB0_313 - 0x4c, 0x89, 0xd6, //0x000018b0 movq %r10, %rsi - 0x48, 0x29, 0xce, //0x000018b3 subq %rcx, %rsi - 0x48, 0x83, 0xfe, 0x20, //0x000018b6 cmpq $32, %rsi - 0x0f, 0x82, 0xc2, 0x12, 0x00, 0x00, //0x000018ba jb LBB0_514 - 0x48, 0x89, 0xca, //0x000018c0 movq %rcx, %rdx - 0x48, 0xf7, 0xda, //0x000018c3 negq %rdx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000018c6 .p2align 4, 0x90 - //0x000018d0 LBB0_315 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x0e, //0x000018d0 vmovdqu (%r14,%rcx), %ymm0 - 0xc5, 0xfd, 0x74, 0xcb, //0x000018d6 vpcmpeqb %ymm3, %ymm0, %ymm1 - 0xc5, 0x8d, 0xdb, 0xc0, //0x000018da vpand %ymm0, %ymm14, %ymm0 - 0xc5, 0xfd, 0x74, 0x05, 0xba, 0xe8, 0xff, 0xff, //0x000018de vpcmpeqb $-5958(%rip), %ymm0, %ymm0 /* LCPI0_8+0(%rip) */ - 0xc5, 0xfd, 0xeb, 0xc1, //0x000018e6 vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x000018ea vpmovmskb %ymm0, %esi - 0x85, 0xf6, //0x000018ee testl %esi, %esi - 0x0f, 0x85, 0xd5, 0x06, 0x00, 0x00, //0x000018f0 jne LBB0_382 - 0x48, 0x83, 0xc1, 0x20, //0x000018f6 addq $32, %rcx - 0x49, 0x8d, 0x04, 0x12, //0x000018fa leaq (%r10,%rdx), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x000018fe addq $-32, %rax - 0x48, 0x83, 0xc2, 0xe0, //0x00001902 addq $-32, %rdx - 0x48, 0x83, 0xf8, 0x1f, //0x00001906 cmpq $31, %rax - 0x0f, 0x87, 0xc0, 0xff, 0xff, 0xff, //0x0000190a ja LBB0_315 - 0x4c, 0x89, 0xf1, //0x00001910 movq %r14, %rcx - 0x48, 0x29, 0xd1, //0x00001913 subq %rdx, %rcx - 0x49, 0x01, 0xd2, //0x00001916 addq %rdx, %r10 - 0x4c, 0x89, 0xd6, //0x00001919 movq %r10, %rsi - 0x48, 0x83, 0xfe, 0x10, //0x0000191c cmpq $16, %rsi - 0x48, 0x8b, 0x1c, 0x24, //0x00001920 movq (%rsp), %rbx - 0x0f, 0x82, 0x48, 0x00, 0x00, 0x00, //0x00001924 jb LBB0_321 - //0x0000192a LBB0_318 - 0x4c, 0x89, 0xf2, //0x0000192a movq %r14, %rdx - 0x48, 0x29, 0xca, //0x0000192d subq %rcx, %rdx - //0x00001930 LBB0_319 - 0xc5, 0xfa, 0x6f, 0x01, //0x00001930 vmovdqu (%rcx), %xmm0 - 0xc5, 0xf9, 0x74, 0x0d, 0xd4, 0xe6, 0xff, 0xff, //0x00001934 vpcmpeqb $-6444(%rip), %xmm0, %xmm1 /* LCPI0_11+0(%rip) */ - 0xc5, 0xf9, 0xdb, 0x05, 0xdc, 0xe6, 0xff, 0xff, //0x0000193c vpand $-6436(%rip), %xmm0, %xmm0 /* LCPI0_12+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0xe4, 0xe6, 0xff, 0xff, //0x00001944 vpcmpeqb $-6428(%rip), %xmm0, %xmm0 /* LCPI0_13+0(%rip) */ - 0xc5, 0xf9, 0xeb, 0xc1, //0x0000194c vpor %xmm1, %xmm0, %xmm0 - 0xc5, 0xf9, 0xd7, 0xc0, //0x00001950 vpmovmskb %xmm0, %eax - 0x85, 0xc0, //0x00001954 testl %eax, %eax - 0x0f, 0x85, 0xe5, 0x0f, 0x00, 0x00, //0x00001956 jne LBB0_697 - 0x48, 0x83, 0xc1, 0x10, //0x0000195c addq $16, %rcx - 0x48, 0x83, 0xc6, 0xf0, //0x00001960 addq $-16, %rsi - 0x48, 0x83, 0xc2, 0xf0, //0x00001964 addq $-16, %rdx - 0x48, 0x83, 0xfe, 0x0f, //0x00001968 cmpq $15, %rsi - 0x0f, 0x87, 0xbe, 0xff, 0xff, 0xff, //0x0000196c ja LBB0_319 - //0x00001972 LBB0_321 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00001972 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00001976 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000197a vmovdqa %ymm13, %ymm11 - 0x48, 0x85, 0xf6, //0x0000197f testq %rsi, %rsi - 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00001982 je LBB0_328 - 0x48, 0x8d, 0x3c, 0x31, //0x00001988 leaq (%rcx,%rsi), %rdi - 0x31, 0xd2, //0x0000198c xorl %edx, %edx - //0x0000198e LBB0_323 - 0x0f, 0xb6, 0x1c, 0x11, //0x0000198e movzbl (%rcx,%rdx), %ebx - 0x80, 0xfb, 0x2c, //0x00001992 cmpb $44, %bl - 0x0f, 0x84, 0x85, 0x12, 0x00, 0x00, //0x00001995 je LBB0_520 - 0x80, 0xfb, 0x7d, //0x0000199b cmpb $125, %bl - 0x0f, 0x84, 0x7c, 0x12, 0x00, 0x00, //0x0000199e je LBB0_520 - 0x80, 0xfb, 0x5d, //0x000019a4 cmpb $93, %bl - 0x0f, 0x84, 0x73, 0x12, 0x00, 0x00, //0x000019a7 je LBB0_520 - 0x48, 0x83, 0xc2, 0x01, //0x000019ad addq $1, %rdx - 0x48, 0x39, 0xd6, //0x000019b1 cmpq %rdx, %rsi - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x000019b4 jne LBB0_323 - 0x48, 0x89, 0xf9, //0x000019ba movq %rdi, %rcx - //0x000019bd LBB0_328 - 0x4c, 0x29, 0xf1, //0x000019bd subq %r14, %rcx - 0xe9, 0x61, 0x12, 0x00, 0x00, //0x000019c0 jmp LBB0_521 - //0x000019c5 LBB0_329 - 0x4c, 0x8b, 0x4f, 0x08, //0x000019c5 movq $8(%rdi), %r9 - 0x4d, 0x8b, 0x45, 0x00, //0x000019c9 movq (%r13), %r8 - 0x4d, 0x29, 0xc1, //0x000019cd subq %r8, %r9 - 0x4d, 0x01, 0xc6, //0x000019d0 addq %r8, %r14 - 0x45, 0x31, 0xdb, //0x000019d3 xorl %r11d, %r11d - 0x45, 0x31, 0xd2, //0x000019d6 xorl %r10d, %r10d - 0x45, 0x31, 0xff, //0x000019d9 xorl %r15d, %r15d - 0x31, 0xdb, //0x000019dc xorl %ebx, %ebx - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x000019de jmp LBB0_331 - //0x000019e3 LBB0_330 - 0x48, 0xc1, 0xff, 0x3f, //0x000019e3 sarq $63, %rdi - 0xf3, 0x48, 0x0f, 0xb8, 0xc6, //0x000019e7 popcntq %rsi, %rax - 0x49, 0x01, 0xc7, //0x000019ec addq %rax, %r15 - 0x49, 0x83, 0xc6, 0x40, //0x000019ef addq $64, %r14 - 0x49, 0x83, 0xc1, 0xc0, //0x000019f3 addq $-64, %r9 - 0x49, 0x89, 0xfb, //0x000019f7 movq %rdi, %r11 - //0x000019fa LBB0_331 - 0x49, 0x83, 0xf9, 0x40, //0x000019fa cmpq $64, %r9 - 0x0f, 0x8c, 0x59, 0x01, 0x00, 0x00, //0x000019fe jl LBB0_339 - //0x00001a04 LBB0_332 - 0xc4, 0x41, 0x7d, 0x6f, 0xfd, //0x00001a04 vmovdqa %ymm13, %ymm15 - 0xc4, 0xc1, 0x7e, 0x6f, 0x0e, //0x00001a09 vmovdqu (%r14), %ymm1 - 0xc4, 0xc1, 0x7e, 0x6f, 0x46, 0x20, //0x00001a0e vmovdqu $32(%r14), %ymm0 - 0xc5, 0xf5, 0x74, 0xd7, //0x00001a14 vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00001a18 vpmovmskb %ymm2, %edx - 0xc5, 0xfd, 0x74, 0xd7, //0x00001a1c vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001a20 vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001a24 shlq $32, %rax - 0x48, 0x09, 0xc2, //0x00001a28 orq %rax, %rdx - 0x48, 0x89, 0xd0, //0x00001a2b movq %rdx, %rax - 0xc4, 0x41, 0x7d, 0x6f, 0xea, //0x00001a2e vmovdqa %ymm10, %ymm13 - 0x4c, 0x09, 0xd0, //0x00001a33 orq %r10, %rax - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001a36 jne LBB0_334 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001a3c movq $-1, %rdx - 0x45, 0x31, 0xd2, //0x00001a43 xorl %r10d, %r10d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001a46 jmp LBB0_335 - //0x00001a4b LBB0_334 - 0x4c, 0x89, 0xd0, //0x00001a4b movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x00001a4e notq %rax - 0x48, 0x21, 0xd0, //0x00001a51 andq %rdx, %rax - 0x48, 0x8d, 0x0c, 0x00, //0x00001a54 leaq (%rax,%rax), %rcx - 0x4c, 0x09, 0xd1, //0x00001a58 orq %r10, %rcx - 0x48, 0x89, 0xce, //0x00001a5b movq %rcx, %rsi - 0x48, 0xf7, 0xd6, //0x00001a5e notq %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001a61 movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfa, //0x00001a6b andq %rdi, %rdx - 0x48, 0x21, 0xf2, //0x00001a6e andq %rsi, %rdx - 0x45, 0x31, 0xd2, //0x00001a71 xorl %r10d, %r10d - 0x48, 0x01, 0xc2, //0x00001a74 addq %rax, %rdx - 0x41, 0x0f, 0x92, 0xc2, //0x00001a77 setb %r10b - 0x48, 0x01, 0xd2, //0x00001a7b addq %rdx, %rdx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001a7e movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc2, //0x00001a88 xorq %rax, %rdx - 0x48, 0x21, 0xca, //0x00001a8b andq %rcx, %rdx - 0x48, 0xf7, 0xd2, //0x00001a8e notq %rdx - //0x00001a91 LBB0_335 - 0xc5, 0xfd, 0x74, 0xd6, //0x00001a91 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001a95 vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001a99 shlq $32, %rax - 0xc5, 0xf5, 0x74, 0xd6, //0x00001a9d vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xca, //0x00001aa1 vpmovmskb %ymm2, %ecx - 0x48, 0x09, 0xc1, //0x00001aa5 orq %rax, %rcx - 0x48, 0x21, 0xd1, //0x00001aa8 andq %rdx, %rcx - 0xc4, 0xe1, 0xf9, 0x6e, 0xd1, //0x00001aab vmovq %rcx, %xmm2 - 0xc4, 0xe3, 0x69, 0x44, 0x15, 0xe6, 0xe5, 0xff, 0xff, 0x00, //0x00001ab0 vpclmulqdq $0, $-6682(%rip), %xmm2, %xmm2 /* LCPI0_26+0(%rip) */ - 0xc4, 0xe1, 0xf9, 0x7e, 0xd7, //0x00001aba vmovq %xmm2, %rdi - 0x4c, 0x31, 0xdf, //0x00001abf xorq %r11, %rdi - 0xc5, 0x7e, 0x6f, 0x15, 0xb6, 0xe6, 0xff, 0xff, //0x00001ac2 vmovdqu $-6474(%rip), %ymm10 /* LCPI0_7+0(%rip) */ - 0xc5, 0xad, 0x74, 0xd1, //0x00001aca vpcmpeqb %ymm1, %ymm10, %ymm2 - 0xc5, 0xfd, 0xd7, 0xf2, //0x00001ace vpmovmskb %ymm2, %esi - 0xc5, 0xad, 0x74, 0xd0, //0x00001ad2 vpcmpeqb %ymm0, %ymm10, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001ad6 vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001ada shlq $32, %rax - 0x48, 0x09, 0xc6, //0x00001ade orq %rax, %rsi - 0x48, 0x89, 0xf8, //0x00001ae1 movq %rdi, %rax - 0x48, 0xf7, 0xd0, //0x00001ae4 notq %rax - 0x48, 0x21, 0xc6, //0x00001ae7 andq %rax, %rsi - 0xc5, 0xfe, 0x6f, 0x15, 0xae, 0xe6, 0xff, 0xff, //0x00001aea vmovdqu $-6482(%rip), %ymm2 /* LCPI0_8+0(%rip) */ - 0xc5, 0xf5, 0x74, 0xca, //0x00001af2 vpcmpeqb %ymm2, %ymm1, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x00001af6 vpmovmskb %ymm1, %edx - 0xc5, 0xfd, 0x74, 0xc2, //0x00001afa vpcmpeqb %ymm2, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc8, //0x00001afe vpmovmskb %ymm0, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00001b02 shlq $32, %rcx - 0x48, 0x09, 0xca, //0x00001b06 orq %rcx, %rdx - 0xc4, 0x41, 0x7d, 0x6f, 0xd5, //0x00001b09 vmovdqa %ymm13, %ymm10 - 0xc4, 0x41, 0x7d, 0x6f, 0xef, //0x00001b0e vmovdqa %ymm15, %ymm13 - 0x48, 0x21, 0xc2, //0x00001b13 andq %rax, %rdx - 0x0f, 0x84, 0xc7, 0xfe, 0xff, 0xff, //0x00001b16 je LBB0_330 - 0xc5, 0x7e, 0x6f, 0x3d, 0x1c, 0xe7, 0xff, 0xff, //0x00001b1c vmovdqu $-6372(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001b24 .p2align 4, 0x90 - //0x00001b30 LBB0_337 - 0x48, 0x8d, 0x4a, 0xff, //0x00001b30 leaq $-1(%rdx), %rcx - 0x48, 0x89, 0xc8, //0x00001b34 movq %rcx, %rax - 0x48, 0x21, 0xf0, //0x00001b37 andq %rsi, %rax - 0xf3, 0x48, 0x0f, 0xb8, 0xc0, //0x00001b3a popcntq %rax, %rax - 0x4c, 0x01, 0xf8, //0x00001b3f addq %r15, %rax - 0x48, 0x39, 0xd8, //0x00001b42 cmpq %rbx, %rax - 0x0f, 0x86, 0x38, 0x04, 0x00, 0x00, //0x00001b45 jbe LBB0_380 - 0x48, 0x83, 0xc3, 0x01, //0x00001b4b addq $1, %rbx - 0x48, 0x21, 0xca, //0x00001b4f andq %rcx, %rdx - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00001b52 jne LBB0_337 - 0xe9, 0x86, 0xfe, 0xff, 0xff, //0x00001b58 jmp LBB0_330 - //0x00001b5d LBB0_339 - 0x4d, 0x85, 0xc9, //0x00001b5d testq %r9, %r9 - 0x0f, 0x8e, 0x17, 0x22, 0x00, 0x00, //0x00001b60 jle LBB0_720 - 0xc5, 0x7d, 0x7f, 0xd9, //0x00001b66 vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00001b6a vmovdqa %ymm13, %ymm11 - 0xc5, 0xf9, 0xef, 0xc0, //0x00001b6f vpxor %xmm0, %xmm0, %xmm0 - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x60, //0x00001b73 vmovdqu %ymm0, $96(%rsp) - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001b79 vmovdqu %ymm0, $64(%rsp) - 0x44, 0x89, 0xf0, //0x00001b7f movl %r14d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00001b82 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00001b87 cmpl $4033, %eax - 0x0f, 0x82, 0x27, 0x00, 0x00, 0x00, //0x00001b8c jb LBB0_343 - 0x49, 0x83, 0xf9, 0x20, //0x00001b92 cmpq $32, %r9 - 0x0f, 0x82, 0x40, 0x00, 0x00, 0x00, //0x00001b96 jb LBB0_344 - 0xc4, 0xc1, 0x7e, 0x6f, 0x06, //0x00001b9c vmovdqu (%r14), %ymm0 - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001ba1 vmovdqu %ymm0, $64(%rsp) - 0x49, 0x83, 0xc6, 0x20, //0x00001ba7 addq $32, %r14 - 0x49, 0x8d, 0x79, 0xe0, //0x00001bab leaq $-32(%r9), %rdi - 0x48, 0x8d, 0x74, 0x24, 0x60, //0x00001baf leaq $96(%rsp), %rsi - 0xe9, 0x2b, 0x00, 0x00, 0x00, //0x00001bb4 jmp LBB0_345 - //0x00001bb9 LBB0_343 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001bb9 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001bbe vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0xd5, 0xe6, 0xff, 0xff, //0x00001bc3 vmovdqu $-6443(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xed, 0xe5, 0xff, 0xff, //0x00001bcb vmovdqu $-6675(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x00001bd3 vmovdqa %ymm1, %ymm11 - 0xe9, 0x28, 0xfe, 0xff, 0xff, //0x00001bd7 jmp LBB0_332 - //0x00001bdc LBB0_344 - 0x48, 0x8d, 0x74, 0x24, 0x40, //0x00001bdc leaq $64(%rsp), %rsi - 0x4c, 0x89, 0xcf, //0x00001be1 movq %r9, %rdi - //0x00001be4 LBB0_345 - 0x48, 0x83, 0xff, 0x10, //0x00001be4 cmpq $16, %rdi - 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00001be8 jb LBB0_346 - 0xc4, 0xc1, 0x7a, 0x6f, 0x06, //0x00001bee vmovdqu (%r14), %xmm0 - 0xc5, 0xfa, 0x7f, 0x06, //0x00001bf3 vmovdqu %xmm0, (%rsi) - 0x49, 0x83, 0xc6, 0x10, //0x00001bf7 addq $16, %r14 - 0x48, 0x83, 0xc6, 0x10, //0x00001bfb addq $16, %rsi - 0x48, 0x83, 0xc7, 0xf0, //0x00001bff addq $-16, %rdi - 0x48, 0x83, 0xff, 0x08, //0x00001c03 cmpq $8, %rdi - 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00001c07 jae LBB0_353 - //0x00001c0d LBB0_347 - 0x48, 0x83, 0xff, 0x04, //0x00001c0d cmpq $4, %rdi - 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x00001c11 jl LBB0_348 - //0x00001c17 LBB0_354 - 0x41, 0x8b, 0x06, //0x00001c17 movl (%r14), %eax - 0x89, 0x06, //0x00001c1a movl %eax, (%rsi) - 0x49, 0x83, 0xc6, 0x04, //0x00001c1c addq $4, %r14 - 0x48, 0x83, 0xc6, 0x04, //0x00001c20 addq $4, %rsi - 0x48, 0x83, 0xc7, 0xfc, //0x00001c24 addq $-4, %rdi - 0x48, 0x83, 0xff, 0x02, //0x00001c28 cmpq $2, %rdi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001c2c jae LBB0_349 - 0xe9, 0x43, 0x00, 0x00, 0x00, //0x00001c32 jmp LBB0_350 - //0x00001c37 LBB0_346 - 0x48, 0x83, 0xff, 0x08, //0x00001c37 cmpq $8, %rdi - 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x00001c3b jb LBB0_347 - //0x00001c41 LBB0_353 - 0x49, 0x8b, 0x06, //0x00001c41 movq (%r14), %rax - 0x48, 0x89, 0x06, //0x00001c44 movq %rax, (%rsi) - 0x49, 0x83, 0xc6, 0x08, //0x00001c47 addq $8, %r14 - 0x48, 0x83, 0xc6, 0x08, //0x00001c4b addq $8, %rsi - 0x48, 0x83, 0xc7, 0xf8, //0x00001c4f addq $-8, %rdi - 0x48, 0x83, 0xff, 0x04, //0x00001c53 cmpq $4, %rdi - 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x00001c57 jge LBB0_354 - //0x00001c5d LBB0_348 - 0x48, 0x83, 0xff, 0x02, //0x00001c5d cmpq $2, %rdi - 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x00001c61 jb LBB0_350 - //0x00001c67 LBB0_349 - 0x41, 0x0f, 0xb7, 0x06, //0x00001c67 movzwl (%r14), %eax - 0x66, 0x89, 0x06, //0x00001c6b movw %ax, (%rsi) - 0x49, 0x83, 0xc6, 0x02, //0x00001c6e addq $2, %r14 - 0x48, 0x83, 0xc6, 0x02, //0x00001c72 addq $2, %rsi - 0x48, 0x83, 0xc7, 0xfe, //0x00001c76 addq $-2, %rdi - //0x00001c7a LBB0_350 - 0x4c, 0x89, 0xf2, //0x00001c7a movq %r14, %rdx - 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001c7d leaq $64(%rsp), %r14 - 0x48, 0x85, 0xff, //0x00001c82 testq %rdi, %rdi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001c85 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001c8a vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x09, 0xe6, 0xff, 0xff, //0x00001c8f vmovdqu $-6647(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x21, 0xe5, 0xff, 0xff, //0x00001c97 vmovdqu $-6879(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x00001c9f vmovdqa %ymm1, %ymm11 - 0x0f, 0x84, 0x5b, 0xfd, 0xff, 0xff, //0x00001ca3 je LBB0_332 - 0x8a, 0x02, //0x00001ca9 movb (%rdx), %al - 0x88, 0x06, //0x00001cab movb %al, (%rsi) - 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001cad leaq $64(%rsp), %r14 - 0xe9, 0x4d, 0xfd, 0xff, 0xff, //0x00001cb2 jmp LBB0_332 - //0x00001cb7 LBB0_355 - 0x4c, 0x8b, 0x4f, 0x08, //0x00001cb7 movq $8(%rdi), %r9 - 0x4d, 0x8b, 0x45, 0x00, //0x00001cbb movq (%r13), %r8 - 0x4d, 0x29, 0xc1, //0x00001cbf subq %r8, %r9 - 0x4d, 0x01, 0xc6, //0x00001cc2 addq %r8, %r14 - 0x45, 0x31, 0xdb, //0x00001cc5 xorl %r11d, %r11d - 0x45, 0x31, 0xd2, //0x00001cc8 xorl %r10d, %r10d - 0x45, 0x31, 0xff, //0x00001ccb xorl %r15d, %r15d - 0x31, 0xdb, //0x00001cce xorl %ebx, %ebx - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00001cd0 jmp LBB0_357 - //0x00001cd5 LBB0_356 - 0x48, 0xc1, 0xff, 0x3f, //0x00001cd5 sarq $63, %rdi - 0xf3, 0x48, 0x0f, 0xb8, 0xc6, //0x00001cd9 popcntq %rsi, %rax - 0x49, 0x01, 0xc7, //0x00001cde addq %rax, %r15 - 0x49, 0x83, 0xc6, 0x40, //0x00001ce1 addq $64, %r14 - 0x49, 0x83, 0xc1, 0xc0, //0x00001ce5 addq $-64, %r9 - 0x49, 0x89, 0xfb, //0x00001ce9 movq %rdi, %r11 - //0x00001cec LBB0_357 - 0x49, 0x83, 0xf9, 0x40, //0x00001cec cmpq $64, %r9 - 0x0f, 0x8c, 0x27, 0x01, 0x00, 0x00, //0x00001cf0 jl LBB0_364 - //0x00001cf6 LBB0_358 - 0xc4, 0xc1, 0x7e, 0x6f, 0x0e, //0x00001cf6 vmovdqu (%r14), %ymm1 - 0xc4, 0xc1, 0x7e, 0x6f, 0x46, 0x20, //0x00001cfb vmovdqu $32(%r14), %ymm0 - 0xc5, 0xf5, 0x74, 0xd7, //0x00001d01 vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00001d05 vpmovmskb %ymm2, %edx - 0xc5, 0xfd, 0x74, 0xd7, //0x00001d09 vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001d0d vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001d11 shlq $32, %rax - 0x48, 0x09, 0xc2, //0x00001d15 orq %rax, %rdx - 0x48, 0x89, 0xd0, //0x00001d18 movq %rdx, %rax - 0x4c, 0x09, 0xd0, //0x00001d1b orq %r10, %rax - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001d1e jne LBB0_360 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001d24 movq $-1, %rdx - 0x45, 0x31, 0xd2, //0x00001d2b xorl %r10d, %r10d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001d2e jmp LBB0_361 - //0x00001d33 LBB0_360 - 0x4c, 0x89, 0xd0, //0x00001d33 movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x00001d36 notq %rax - 0x48, 0x21, 0xd0, //0x00001d39 andq %rdx, %rax - 0x48, 0x8d, 0x0c, 0x00, //0x00001d3c leaq (%rax,%rax), %rcx - 0x4c, 0x09, 0xd1, //0x00001d40 orq %r10, %rcx - 0x48, 0x89, 0xce, //0x00001d43 movq %rcx, %rsi - 0x48, 0xf7, 0xd6, //0x00001d46 notq %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001d49 movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfa, //0x00001d53 andq %rdi, %rdx - 0x48, 0x21, 0xf2, //0x00001d56 andq %rsi, %rdx - 0x45, 0x31, 0xd2, //0x00001d59 xorl %r10d, %r10d - 0x48, 0x01, 0xc2, //0x00001d5c addq %rax, %rdx - 0x41, 0x0f, 0x92, 0xc2, //0x00001d5f setb %r10b - 0x48, 0x01, 0xd2, //0x00001d63 addq %rdx, %rdx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001d66 movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc2, //0x00001d70 xorq %rax, %rdx - 0x48, 0x21, 0xca, //0x00001d73 andq %rcx, %rdx - 0x48, 0xf7, 0xd2, //0x00001d76 notq %rdx - //0x00001d79 LBB0_361 - 0xc5, 0xfd, 0x74, 0xd6, //0x00001d79 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001d7d vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001d81 shlq $32, %rax - 0xc5, 0xf5, 0x74, 0xd6, //0x00001d85 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xca, //0x00001d89 vpmovmskb %ymm2, %ecx - 0x48, 0x09, 0xc1, //0x00001d8d orq %rax, %rcx - 0x48, 0x21, 0xd1, //0x00001d90 andq %rdx, %rcx - 0xc4, 0xe1, 0xf9, 0x6e, 0xd1, //0x00001d93 vmovq %rcx, %xmm2 - 0xc4, 0xe3, 0x69, 0x44, 0x15, 0xfe, 0xe2, 0xff, 0xff, 0x00, //0x00001d98 vpclmulqdq $0, $-7426(%rip), %xmm2, %xmm2 /* LCPI0_26+0(%rip) */ - 0xc4, 0xe1, 0xf9, 0x7e, 0xd7, //0x00001da2 vmovq %xmm2, %rdi - 0x4c, 0x31, 0xdf, //0x00001da7 xorq %r11, %rdi - 0xc5, 0xa5, 0x74, 0xd1, //0x00001daa vpcmpeqb %ymm1, %ymm11, %ymm2 - 0xc5, 0xfd, 0xd7, 0xf2, //0x00001dae vpmovmskb %ymm2, %esi - 0xc5, 0xa5, 0x74, 0xd0, //0x00001db2 vpcmpeqb %ymm0, %ymm11, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001db6 vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001dba shlq $32, %rax - 0x48, 0x09, 0xc6, //0x00001dbe orq %rax, %rsi - 0x48, 0x89, 0xf8, //0x00001dc1 movq %rdi, %rax - 0x48, 0xf7, 0xd0, //0x00001dc4 notq %rax - 0x48, 0x21, 0xc6, //0x00001dc7 andq %rax, %rsi - 0xc5, 0x9d, 0x74, 0xc9, //0x00001dca vpcmpeqb %ymm1, %ymm12, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x00001dce vpmovmskb %ymm1, %edx - 0xc5, 0x9d, 0x74, 0xc0, //0x00001dd2 vpcmpeqb %ymm0, %ymm12, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc8, //0x00001dd6 vpmovmskb %ymm0, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00001dda shlq $32, %rcx - 0x48, 0x09, 0xca, //0x00001dde orq %rcx, %rdx - 0x48, 0x21, 0xc2, //0x00001de1 andq %rax, %rdx - 0x0f, 0x84, 0xeb, 0xfe, 0xff, 0xff, //0x00001de4 je LBB0_356 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001dea .p2align 4, 0x90 - //0x00001df0 LBB0_362 - 0x48, 0x8d, 0x4a, 0xff, //0x00001df0 leaq $-1(%rdx), %rcx - 0x48, 0x89, 0xc8, //0x00001df4 movq %rcx, %rax - 0x48, 0x21, 0xf0, //0x00001df7 andq %rsi, %rax - 0xf3, 0x48, 0x0f, 0xb8, 0xc0, //0x00001dfa popcntq %rax, %rax - 0x4c, 0x01, 0xf8, //0x00001dff addq %r15, %rax - 0x48, 0x39, 0xd8, //0x00001e02 cmpq %rbx, %rax - 0x0f, 0x86, 0x78, 0x01, 0x00, 0x00, //0x00001e05 jbe LBB0_380 + 0x48, 0x8b, 0x44, 0x24, 0x18, //0x000003a0 movq $24(%rsp), %rax + 0x4c, 0x8b, 0x00, //0x000003a5 movq (%rax), %r8 + 0x4c, 0x89, 0xe0, //0x000003a8 movq %r12, %rax + 0x4d, 0x85, 0xc0, //0x000003ab testq %r8, %r8 + 0x0f, 0x85, 0x4c, 0x00, 0x00, 0x00, //0x000003ae jne LBB0_5 + 0xe9, 0x5c, 0x39, 0x00, 0x00, //0x000003b4 jmp LBB0_728 + //0x000003b9 LBB0_1 + 0x4d, 0x29, 0xf0, //0x000003b9 subq %r14, %r8 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x000003bc movq $8(%rsp), %r15 + 0x4d, 0x89, 0x07, //0x000003c1 movq %r8, (%r15) + 0x4c, 0x8b, 0x1c, 0x24, //0x000003c4 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000003c8 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000003cd vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xc6, 0xfe, 0xff, 0xff, //0x000003d2 vmovdqu $-314(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xde, 0xfd, 0xff, 0xff, //0x000003da vmovdqu $-546(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000003e2 vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x000003e6 vmovdqa %ymm1, %ymm12 + //0x000003ea LBB0_2 + 0x4d, 0x85, 0xed, //0x000003ea testq %r13, %r13 + 0x0f, 0x8f, 0xad, 0xff, 0xff, 0xff, //0x000003ed jg LBB0_3 + 0xe9, 0xee, 0x38, 0x00, 0x00, //0x000003f3 jmp LBB0_705 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000003f8 .p2align 4, 0x90 + //0x00000400 LBB0_5 + 0x4c, 0x89, 0xe1, //0x00000400 movq %r12, %rcx + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x00000403 movq $32(%rsp), %rax + 0x4c, 0x8b, 0x30, //0x00000408 movq (%rax), %r14 + 0x48, 0x8b, 0x78, 0x08, //0x0000040b movq $8(%rax), %rdi + 0x49, 0x8b, 0x17, //0x0000040f movq (%r15), %rdx + 0x48, 0x39, 0xfa, //0x00000412 cmpq %rdi, %rdx + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00000415 jae LBB0_10 + 0x41, 0x8a, 0x04, 0x16, //0x0000041b movb (%r14,%rdx), %al + 0x3c, 0x0d, //0x0000041f cmpb $13, %al + 0x0f, 0x84, 0x29, 0x00, 0x00, 0x00, //0x00000421 je LBB0_10 + 0x3c, 0x20, //0x00000427 cmpb $32, %al + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00000429 je LBB0_10 + 0x04, 0xf7, //0x0000042f addb $-9, %al + 0x3c, 0x01, //0x00000431 cmpb $1, %al + 0x0f, 0x86, 0x17, 0x00, 0x00, 0x00, //0x00000433 jbe LBB0_10 + 0x49, 0x89, 0xd4, //0x00000439 movq %rdx, %r12 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x0000043c movq $24(%rsp), %r10 + 0xe9, 0x8c, 0x01, 0x00, 0x00, //0x00000441 jmp LBB0_35 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000446 .p2align 4, 0x90 + //0x00000450 LBB0_10 + 0x4c, 0x8d, 0x62, 0x01, //0x00000450 leaq $1(%rdx), %r12 + 0x49, 0x39, 0xfc, //0x00000454 cmpq %rdi, %r12 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00000457 movq $24(%rsp), %r10 + 0x0f, 0x83, 0x2e, 0x00, 0x00, 0x00, //0x0000045c jae LBB0_14 + 0x43, 0x8a, 0x1c, 0x26, //0x00000462 movb (%r14,%r12), %bl + 0x80, 0xfb, 0x0d, //0x00000466 cmpb $13, %bl + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00000469 je LBB0_14 + 0x80, 0xfb, 0x20, //0x0000046f cmpb $32, %bl + 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x00000472 je LBB0_14 + 0x80, 0xc3, 0xf7, //0x00000478 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x0000047b cmpb $1, %bl + 0x0f, 0x87, 0x4e, 0x01, 0x00, 0x00, //0x0000047e ja LBB0_35 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000484 .p2align 4, 0x90 + //0x00000490 LBB0_14 + 0x4c, 0x8d, 0x62, 0x02, //0x00000490 leaq $2(%rdx), %r12 + 0x49, 0x39, 0xfc, //0x00000494 cmpq %rdi, %r12 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000497 jae LBB0_18 + 0x43, 0x8a, 0x1c, 0x26, //0x0000049d movb (%r14,%r12), %bl + 0x80, 0xfb, 0x0d, //0x000004a1 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000004a4 je LBB0_18 + 0x80, 0xfb, 0x20, //0x000004aa cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000004ad je LBB0_18 + 0x80, 0xc3, 0xf7, //0x000004b3 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000004b6 cmpb $1, %bl + 0x0f, 0x87, 0x13, 0x01, 0x00, 0x00, //0x000004b9 ja LBB0_35 + 0x90, //0x000004bf .p2align 4, 0x90 + //0x000004c0 LBB0_18 + 0x4c, 0x8d, 0x62, 0x03, //0x000004c0 leaq $3(%rdx), %r12 + 0x49, 0x39, 0xfc, //0x000004c4 cmpq %rdi, %r12 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000004c7 jae LBB0_22 + 0x43, 0x8a, 0x1c, 0x26, //0x000004cd movb (%r14,%r12), %bl + 0x80, 0xfb, 0x0d, //0x000004d1 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000004d4 je LBB0_22 + 0x80, 0xfb, 0x20, //0x000004da cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000004dd je LBB0_22 + 0x80, 0xc3, 0xf7, //0x000004e3 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000004e6 cmpb $1, %bl + 0x0f, 0x87, 0xe3, 0x00, 0x00, 0x00, //0x000004e9 ja LBB0_35 + 0x90, //0x000004ef .p2align 4, 0x90 + //0x000004f0 LBB0_22 + 0x4c, 0x8d, 0x62, 0x04, //0x000004f0 leaq $4(%rdx), %r12 + 0x48, 0x89, 0xfe, //0x000004f4 movq %rdi, %rsi + 0x4c, 0x29, 0xe6, //0x000004f7 subq %r12, %rsi + 0x0f, 0x86, 0x9a, 0x37, 0x00, 0x00, //0x000004fa jbe LBB0_697 + 0x48, 0x83, 0xfe, 0x20, //0x00000500 cmpq $32, %rsi + 0x0f, 0x82, 0x3e, 0x25, 0x00, 0x00, //0x00000504 jb LBB0_504 + 0x48, 0xc7, 0xc6, 0xfc, 0xff, 0xff, 0xff, //0x0000050a movq $-4, %rsi + 0x48, 0x29, 0xd6, //0x00000511 subq %rdx, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000514 .p2align 4, 0x90 + //0x00000520 LBB0_25 + 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x26, //0x00000520 vmovdqu (%r14,%r12), %ymm0 + 0xc4, 0xe2, 0x55, 0x00, 0xc8, //0x00000526 vpshufb %ymm0, %ymm5, %ymm1 + 0xc5, 0xfd, 0x74, 0xc1, //0x0000052b vpcmpeqb %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x0000052f vpmovmskb %ymm0, %edx + 0x83, 0xfa, 0xff, //0x00000533 cmpl $-1, %edx + 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x00000536 jne LBB0_34 + 0x49, 0x83, 0xc4, 0x20, //0x0000053c addq $32, %r12 + 0x48, 0x8d, 0x04, 0x37, //0x00000540 leaq (%rdi,%rsi), %rax + 0x48, 0x83, 0xc0, 0xe0, //0x00000544 addq $-32, %rax + 0x48, 0x83, 0xc6, 0xe0, //0x00000548 addq $-32, %rsi + 0x48, 0x83, 0xf8, 0x1f, //0x0000054c cmpq $31, %rax + 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00000550 ja LBB0_25 + 0x4d, 0x89, 0xf4, //0x00000556 movq %r14, %r12 + 0x49, 0x29, 0xf4, //0x00000559 subq %rsi, %r12 + 0x48, 0x01, 0xfe, //0x0000055c addq %rdi, %rsi + 0x48, 0x85, 0xf6, //0x0000055f testq %rsi, %rsi + 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00000562 je LBB0_33 + //0x00000568 LBB0_28 + 0x4d, 0x8d, 0x04, 0x34, //0x00000568 leaq (%r12,%rsi), %r8 + 0x31, 0xd2, //0x0000056c xorl %edx, %edx + 0x90, 0x90, //0x0000056e .p2align 4, 0x90 + //0x00000570 LBB0_29 + 0x41, 0x0f, 0xbe, 0x04, 0x14, //0x00000570 movsbl (%r12,%rdx), %eax + 0x83, 0xf8, 0x20, //0x00000575 cmpl $32, %eax + 0x0f, 0x87, 0x23, 0x21, 0x00, 0x00, //0x00000578 ja LBB0_468 + 0x48, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000057e movabsq $4294977024, %rbx + 0x48, 0x0f, 0xa3, 0xc3, //0x00000588 btq %rax, %rbx + 0x0f, 0x83, 0x0f, 0x21, 0x00, 0x00, //0x0000058c jae LBB0_468 + 0x48, 0x83, 0xc2, 0x01, //0x00000592 addq $1, %rdx + 0x48, 0x39, 0xd6, //0x00000596 cmpq %rdx, %rsi + 0x0f, 0x85, 0xd1, 0xff, 0xff, 0xff, //0x00000599 jne LBB0_29 + 0x4d, 0x89, 0xc4, //0x0000059f movq %r8, %r12 + //0x000005a2 LBB0_33 + 0x4d, 0x29, 0xf4, //0x000005a2 subq %r14, %r12 + 0x49, 0x39, 0xfc, //0x000005a5 cmpq %rdi, %r12 + 0x0f, 0x82, 0x24, 0x00, 0x00, 0x00, //0x000005a8 jb LBB0_35 + 0xe9, 0xea, 0x36, 0x00, 0x00, //0x000005ae jmp LBB0_698 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000005b3 .p2align 4, 0x90 + //0x000005c0 LBB0_34 + 0xf7, 0xd2, //0x000005c0 notl %edx + 0x44, 0x0f, 0xbc, 0xe2, //0x000005c2 bsfl %edx, %r12d + 0x49, 0x29, 0xf4, //0x000005c6 subq %rsi, %r12 + 0x49, 0x39, 0xfc, //0x000005c9 cmpq %rdi, %r12 + 0x0f, 0x83, 0xcb, 0x36, 0x00, 0x00, //0x000005cc jae LBB0_698 + //0x000005d2 LBB0_35 + 0x49, 0x8d, 0x44, 0x24, 0x01, //0x000005d2 leaq $1(%r12), %rax + 0x49, 0x89, 0x07, //0x000005d7 movq %rax, (%r15) + 0x43, 0x0f, 0xbe, 0x3c, 0x26, //0x000005da movsbl (%r14,%r12), %edi + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000005df movq $-1, %rax + 0x85, 0xff, //0x000005e6 testl %edi, %edi + 0x0f, 0x84, 0x27, 0x37, 0x00, 0x00, //0x000005e8 je LBB0_728 + 0x49, 0x8b, 0x32, //0x000005ee movq (%r10), %rsi + 0x4c, 0x8d, 0x46, 0xff, //0x000005f1 leaq $-1(%rsi), %r8 + 0x41, 0x8b, 0x1c, 0xf2, //0x000005f5 movl (%r10,%rsi,8), %ebx + 0x48, 0x83, 0xf9, 0xff, //0x000005f9 cmpq $-1, %rcx + 0x4c, 0x0f, 0x45, 0xe1, //0x000005fd cmovneq %rcx, %r12 + 0x83, 0xc3, 0xff, //0x00000601 addl $-1, %ebx + 0x83, 0xfb, 0x05, //0x00000604 cmpl $5, %ebx + 0x0f, 0x87, 0x27, 0x00, 0x00, 0x00, //0x00000607 ja LBB0_41 + 0x48, 0x8d, 0x15, 0xc4, 0x38, 0x00, 0x00, //0x0000060d leaq $14532(%rip), %rdx /* LJTI0_0+0(%rip) */ + 0x48, 0x63, 0x0c, 0x9a, //0x00000614 movslq (%rdx,%rbx,4), %rcx + 0x48, 0x01, 0xd1, //0x00000618 addq %rdx, %rcx + 0xff, 0xe1, //0x0000061b jmpq *%rcx + //0x0000061d LBB0_38 + 0x83, 0xff, 0x2c, //0x0000061d cmpl $44, %edi + 0x0f, 0x84, 0x4e, 0x02, 0x00, 0x00, //0x00000620 je LBB0_76 + 0x83, 0xff, 0x5d, //0x00000626 cmpl $93, %edi + 0x0f, 0x84, 0x31, 0x02, 0x00, 0x00, //0x00000629 je LBB0_40 + 0xe9, 0xda, 0x36, 0x00, 0x00, //0x0000062f jmp LBB0_727 + //0x00000634 LBB0_41 + 0x4d, 0x89, 0x02, //0x00000634 movq %r8, (%r10) + 0x83, 0xff, 0x7b, //0x00000637 cmpl $123, %edi + 0x0f, 0x86, 0xaf, 0x01, 0x00, 0x00, //0x0000063a jbe LBB0_68 + 0xe9, 0xc9, 0x36, 0x00, 0x00, //0x00000640 jmp LBB0_727 + //0x00000645 LBB0_42 + 0x83, 0xff, 0x2c, //0x00000645 cmpl $44, %edi + 0x0f, 0x85, 0x09, 0x02, 0x00, 0x00, //0x00000648 jne LBB0_43 + 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x0000064e cmpq $4095, %rsi + 0x0f, 0x8f, 0x4e, 0x36, 0x00, 0x00, //0x00000655 jg LBB0_724 + 0x48, 0x8d, 0x46, 0x01, //0x0000065b leaq $1(%rsi), %rax + 0x49, 0x89, 0x02, //0x0000065f movq %rax, (%r10) + 0x49, 0xc7, 0x44, 0xf2, 0x08, 0x03, 0x00, 0x00, 0x00, //0x00000662 movq $3, $8(%r10,%rsi,8) + 0xe9, 0x30, 0xfd, 0xff, 0xff, //0x0000066b jmp LBB0_3 + //0x00000670 LBB0_44 + 0x40, 0x80, 0xff, 0x22, //0x00000670 cmpb $34, %dil + 0x0f, 0x85, 0x94, 0x36, 0x00, 0x00, //0x00000674 jne LBB0_727 + 0x49, 0xc7, 0x04, 0xf2, 0x04, 0x00, 0x00, 0x00, //0x0000067a movq $4, (%r10,%rsi,8) + 0x41, 0xf6, 0xc3, 0x40, //0x00000682 testb $64, %r11b + 0x0f, 0x85, 0x4d, 0x03, 0x00, 0x00, //0x00000686 jne LBB0_99 + 0x4d, 0x8b, 0x0f, //0x0000068c movq (%r15), %r9 + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x0000068f movq $32(%rsp), %rax + 0x4c, 0x8b, 0x40, 0x08, //0x00000694 movq $8(%rax), %r8 + 0x41, 0xf6, 0xc3, 0x20, //0x00000698 testb $32, %r11b + 0x0f, 0x85, 0xd6, 0x06, 0x00, 0x00, //0x0000069c jne LBB0_143 + 0x4d, 0x89, 0xc3, //0x000006a2 movq %r8, %r11 + 0x4d, 0x29, 0xcb, //0x000006a5 subq %r9, %r11 + 0x0f, 0x84, 0xd0, 0x37, 0x00, 0x00, //0x000006a8 je LBB0_732 + 0x49, 0x83, 0xfb, 0x40, //0x000006ae cmpq $64, %r11 + 0x0f, 0x82, 0x5e, 0x26, 0x00, 0x00, //0x000006b2 jb LBB0_531 + 0x4c, 0x89, 0xce, //0x000006b8 movq %r9, %rsi + 0x48, 0xf7, 0xd6, //0x000006bb notq %rsi + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000006be movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x000006c5 movq %r9, %rax + 0x45, 0x31, 0xd2, //0x000006c8 xorl %r10d, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000006cb .p2align 4, 0x90 + //0x000006d0 LBB0_50 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x000006d0 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x000006d6 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x000006dd vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x000006e1 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd6, //0x000006e5 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x000006e9 vpmovmskb %ymm2, %ecx + 0xc5, 0xfd, 0x74, 0xc7, //0x000006ed vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf8, //0x000006f1 vpmovmskb %ymm0, %edi + 0xc5, 0xf5, 0x74, 0xc7, //0x000006f5 vpcmpeqb %ymm7, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd8, //0x000006f9 vpmovmskb %ymm0, %ebx + 0x48, 0xc1, 0xe1, 0x20, //0x000006fd shlq $32, %rcx + 0x48, 0x09, 0xca, //0x00000701 orq %rcx, %rdx + 0x48, 0xc1, 0xe3, 0x20, //0x00000704 shlq $32, %rbx + 0x48, 0x09, 0xdf, //0x00000708 orq %rbx, %rdi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000070b jne LBB0_59 + 0x4d, 0x85, 0xd2, //0x00000711 testq %r10, %r10 + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x00000714 jne LBB0_61 + 0x45, 0x31, 0xd2, //0x0000071a xorl %r10d, %r10d + 0x48, 0x85, 0xd2, //0x0000071d testq %rdx, %rdx + 0x0f, 0x85, 0x7e, 0x00, 0x00, 0x00, //0x00000720 jne LBB0_62 + //0x00000726 LBB0_53 + 0x49, 0x83, 0xc3, 0xc0, //0x00000726 addq $-64, %r11 + 0x48, 0x83, 0xc6, 0xc0, //0x0000072a addq $-64, %rsi + 0x48, 0x83, 0xc0, 0x40, //0x0000072e addq $64, %rax + 0x49, 0x83, 0xfb, 0x3f, //0x00000732 cmpq $63, %r11 + 0x0f, 0x87, 0x94, 0xff, 0xff, 0xff, //0x00000736 ja LBB0_50 + 0xe9, 0x0b, 0x22, 0x00, 0x00, //0x0000073c jmp LBB0_54 + //0x00000741 LBB0_59 + 0x49, 0x83, 0xff, 0xff, //0x00000741 cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00000745 jne LBB0_61 + 0x4c, 0x0f, 0xbc, 0xff, //0x0000074b bsfq %rdi, %r15 + 0x49, 0x01, 0xc7, //0x0000074f addq %rax, %r15 + //0x00000752 LBB0_61 + 0x4c, 0x89, 0xd1, //0x00000752 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00000755 notq %rcx + 0x48, 0x21, 0xf9, //0x00000758 andq %rdi, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x0000075b leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xd5, //0x0000075f orq %r10, %r13 + 0x4c, 0x89, 0xeb, //0x00000762 movq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00000765 notq %rbx + 0x48, 0x21, 0xfb, //0x00000768 andq %rdi, %rbx + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000076b movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfb, //0x00000775 andq %rdi, %rbx + 0x45, 0x31, 0xd2, //0x00000778 xorl %r10d, %r10d + 0x48, 0x01, 0xcb, //0x0000077b addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc2, //0x0000077e setb %r10b + 0x48, 0x01, 0xdb, //0x00000782 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000785 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x0000078f xorq %rcx, %rbx + 0x4c, 0x21, 0xeb, //0x00000792 andq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00000795 notq %rbx + 0x48, 0x21, 0xda, //0x00000798 andq %rbx, %rdx + 0x48, 0x85, 0xd2, //0x0000079b testq %rdx, %rdx + 0x0f, 0x84, 0x82, 0xff, 0xff, 0xff, //0x0000079e je LBB0_53 + //0x000007a4 LBB0_62 + 0x48, 0x0f, 0xbc, 0xc2, //0x000007a4 bsfq %rdx, %rax + 0x48, 0x29, 0xf0, //0x000007a8 subq %rsi, %rax + //0x000007ab LBB0_63 + 0x4c, 0x8b, 0x1c, 0x24, //0x000007ab movq (%rsp), %r11 + 0x48, 0x85, 0xc0, //0x000007af testq %rax, %rax + 0x0f, 0x89, 0xd4, 0xfb, 0xff, 0xff, //0x000007b2 jns LBB0_237 + 0xe9, 0x04, 0x35, 0x00, 0x00, //0x000007b8 jmp LBB0_702 + //0x000007bd LBB0_64 + 0x40, 0x80, 0xff, 0x3a, //0x000007bd cmpb $58, %dil + 0x0f, 0x85, 0x47, 0x35, 0x00, 0x00, //0x000007c1 jne LBB0_727 + 0x49, 0xc7, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x00, //0x000007c7 movq $0, (%r10,%rsi,8) + 0xe9, 0xcc, 0xfb, 0xff, 0xff, //0x000007cf jmp LBB0_3 + //0x000007d4 LBB0_66 + 0x40, 0x80, 0xff, 0x5d, //0x000007d4 cmpb $93, %dil + 0x0f, 0x84, 0x82, 0x00, 0x00, 0x00, //0x000007d8 je LBB0_40 + 0x49, 0xc7, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x00, //0x000007de movq $1, (%r10,%rsi,8) + 0x83, 0xff, 0x7b, //0x000007e6 cmpl $123, %edi + 0x0f, 0x87, 0x1f, 0x35, 0x00, 0x00, //0x000007e9 ja LBB0_727 + //0x000007ef LBB0_68 + 0x89, 0xf9, //0x000007ef movl %edi, %ecx + 0x48, 0x8d, 0x15, 0xf8, 0x36, 0x00, 0x00, //0x000007f1 leaq $14072(%rip), %rdx /* LJTI0_1+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8a, //0x000007f8 movslq (%rdx,%rcx,4), %rcx + 0x48, 0x01, 0xd1, //0x000007fc addq %rdx, %rcx + 0xff, 0xe1, //0x000007ff jmpq *%rcx + //0x00000801 LBB0_71 + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x00000801 movq $32(%rsp), %rax + 0x4c, 0x8b, 0x48, 0x08, //0x00000806 movq $8(%rax), %r9 + 0x4d, 0x8b, 0x2f, //0x0000080a movq (%r15), %r13 + 0x41, 0xf6, 0xc3, 0x40, //0x0000080d testb $64, %r11b + 0x0f, 0x85, 0xac, 0x02, 0x00, 0x00, //0x00000811 jne LBB0_111 + 0x49, 0x8d, 0x45, 0xff, //0x00000817 leaq $-1(%r13), %rax + 0x49, 0x29, 0xc1, //0x0000081b subq %rax, %r9 + 0x0f, 0x84, 0xce, 0x34, 0x00, 0x00, //0x0000081e je LBB0_706 + 0x4f, 0x8d, 0x04, 0x2e, //0x00000824 leaq (%r14,%r13), %r8 + 0x49, 0x83, 0xc0, 0xff, //0x00000828 addq $-1, %r8 + 0x41, 0x80, 0x38, 0x30, //0x0000082c cmpb $48, (%r8) + 0x0f, 0x85, 0x0a, 0x08, 0x00, 0x00, //0x00000830 jne LBB0_184 + 0x41, 0xba, 0x01, 0x00, 0x00, 0x00, //0x00000836 movl $1, %r10d + 0x49, 0x83, 0xf9, 0x01, //0x0000083c cmpq $1, %r9 + 0x0f, 0x85, 0xd0, 0x07, 0x00, 0x00, //0x00000840 jne LBB0_182 + //0x00000846 LBB0_75 + 0x48, 0x89, 0xc1, //0x00000846 movq %rax, %rcx + 0xe9, 0xe0, 0x0f, 0x00, 0x00, //0x00000849 jmp LBB0_296 + //0x0000084e LBB0_69 + 0x83, 0xff, 0x22, //0x0000084e cmpl $34, %edi + 0x0f, 0x84, 0x3f, 0x00, 0x00, 0x00, //0x00000851 je LBB0_80 + //0x00000857 LBB0_43 + 0x83, 0xff, 0x7d, //0x00000857 cmpl $125, %edi + 0x0f, 0x85, 0xae, 0x34, 0x00, 0x00, //0x0000085a jne LBB0_727 + //0x00000860 LBB0_40 + 0x4d, 0x89, 0x02, //0x00000860 movq %r8, (%r10) + 0x4c, 0x89, 0xe0, //0x00000863 movq %r12, %rax + 0x4d, 0x85, 0xc0, //0x00000866 testq %r8, %r8 + 0x0f, 0x85, 0x91, 0xfb, 0xff, 0xff, //0x00000869 jne LBB0_5 + 0xe9, 0xa1, 0x34, 0x00, 0x00, //0x0000086f jmp LBB0_728 + //0x00000874 LBB0_76 + 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00000874 cmpq $4095, %rsi + 0x0f, 0x8f, 0x28, 0x34, 0x00, 0x00, //0x0000087b jg LBB0_724 + 0x48, 0x8d, 0x46, 0x01, //0x00000881 leaq $1(%rsi), %rax + 0x49, 0x89, 0x02, //0x00000885 movq %rax, (%r10) + 0x49, 0xc7, 0x44, 0xf2, 0x08, 0x00, 0x00, 0x00, 0x00, //0x00000888 movq $0, $8(%r10,%rsi,8) + 0xe9, 0x0a, 0xfb, 0xff, 0xff, //0x00000891 jmp LBB0_3 + //0x00000896 LBB0_80 + 0x49, 0xc7, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x00, //0x00000896 movq $2, (%r10,%rsi,8) + 0x41, 0xf6, 0xc3, 0x40, //0x0000089e testb $64, %r11b + 0x0f, 0x85, 0xdd, 0x03, 0x00, 0x00, //0x000008a2 jne LBB0_132 + 0x4d, 0x8b, 0x0f, //0x000008a8 movq (%r15), %r9 + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x000008ab movq $32(%rsp), %rax + 0x4c, 0x8b, 0x40, 0x08, //0x000008b0 movq $8(%rax), %r8 + 0x41, 0xf6, 0xc3, 0x20, //0x000008b4 testb $32, %r11b + 0x0f, 0x85, 0x03, 0x06, 0x00, 0x00, //0x000008b8 jne LBB0_163 + 0x4d, 0x89, 0xc3, //0x000008be movq %r8, %r11 + 0x4d, 0x29, 0xcb, //0x000008c1 subq %r9, %r11 + 0x0f, 0x84, 0xb4, 0x35, 0x00, 0x00, //0x000008c4 je LBB0_732 + 0x49, 0x83, 0xfb, 0x40, //0x000008ca cmpq $64, %r11 + 0x0f, 0x82, 0x92, 0x24, 0x00, 0x00, //0x000008ce jb LBB0_536 + 0x4c, 0x89, 0xce, //0x000008d4 movq %r9, %rsi + 0x48, 0xf7, 0xd6, //0x000008d7 notq %rsi + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000008da movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x000008e1 movq %r9, %rax + 0x45, 0x31, 0xd2, //0x000008e4 xorl %r10d, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000008e7 .p2align 4, 0x90 + //0x000008f0 LBB0_85 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x000008f0 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x000008f6 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x000008fd vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00000901 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd6, //0x00000905 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x00000909 vpmovmskb %ymm2, %ebx + 0xc5, 0xfd, 0x74, 0xc7, //0x0000090d vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf8, //0x00000911 vpmovmskb %ymm0, %edi + 0xc5, 0xf5, 0x74, 0xc7, //0x00000915 vpcmpeqb %ymm7, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x00000919 vpmovmskb %ymm0, %ecx + 0x48, 0xc1, 0xe3, 0x20, //0x0000091d shlq $32, %rbx + 0x48, 0x09, 0xda, //0x00000921 orq %rbx, %rdx + 0x48, 0xc1, 0xe1, 0x20, //0x00000924 shlq $32, %rcx + 0x48, 0x09, 0xcf, //0x00000928 orq %rcx, %rdi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000092b jne LBB0_94 + 0x4d, 0x85, 0xd2, //0x00000931 testq %r10, %r10 + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x00000934 jne LBB0_96 + 0x45, 0x31, 0xd2, //0x0000093a xorl %r10d, %r10d + 0x48, 0x85, 0xd2, //0x0000093d testq %rdx, %rdx + 0x0f, 0x85, 0x7e, 0x00, 0x00, 0x00, //0x00000940 jne LBB0_97 + //0x00000946 LBB0_88 + 0x49, 0x83, 0xc3, 0xc0, //0x00000946 addq $-64, %r11 + 0x48, 0x83, 0xc6, 0xc0, //0x0000094a addq $-64, %rsi + 0x48, 0x83, 0xc0, 0x40, //0x0000094e addq $64, %rax + 0x49, 0x83, 0xfb, 0x3f, //0x00000952 cmpq $63, %r11 + 0x0f, 0x87, 0x94, 0xff, 0xff, 0xff, //0x00000956 ja LBB0_85 + 0xe9, 0xf8, 0x20, 0x00, 0x00, //0x0000095c jmp LBB0_89 + //0x00000961 LBB0_94 + 0x49, 0x83, 0xff, 0xff, //0x00000961 cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00000965 jne LBB0_96 + 0x4c, 0x0f, 0xbc, 0xff, //0x0000096b bsfq %rdi, %r15 + 0x49, 0x01, 0xc7, //0x0000096f addq %rax, %r15 + //0x00000972 LBB0_96 + 0x4c, 0x89, 0xd1, //0x00000972 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00000975 notq %rcx + 0x48, 0x21, 0xf9, //0x00000978 andq %rdi, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x0000097b leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xd5, //0x0000097f orq %r10, %r13 + 0x4c, 0x89, 0xeb, //0x00000982 movq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00000985 notq %rbx + 0x48, 0x21, 0xfb, //0x00000988 andq %rdi, %rbx + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000098b movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfb, //0x00000995 andq %rdi, %rbx + 0x45, 0x31, 0xd2, //0x00000998 xorl %r10d, %r10d + 0x48, 0x01, 0xcb, //0x0000099b addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc2, //0x0000099e setb %r10b + 0x48, 0x01, 0xdb, //0x000009a2 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000009a5 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x000009af xorq %rcx, %rbx + 0x4c, 0x21, 0xeb, //0x000009b2 andq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x000009b5 notq %rbx + 0x48, 0x21, 0xda, //0x000009b8 andq %rbx, %rdx + 0x48, 0x85, 0xd2, //0x000009bb testq %rdx, %rdx + 0x0f, 0x84, 0x82, 0xff, 0xff, 0xff, //0x000009be je LBB0_88 + //0x000009c4 LBB0_97 + 0x48, 0x0f, 0xbc, 0xc2, //0x000009c4 bsfq %rdx, %rax + 0x48, 0x29, 0xf0, //0x000009c8 subq %rsi, %rax + //0x000009cb LBB0_98 + 0x4c, 0x8b, 0x1c, 0x24, //0x000009cb movq (%rsp), %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000009cf movq $24(%rsp), %r10 + 0xe9, 0xb5, 0x0e, 0x00, 0x00, //0x000009d4 jmp LBB0_302 + //0x000009d9 LBB0_99 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x000009d9 movq $32(%rsp), %rcx + 0x4c, 0x8b, 0x51, 0x08, //0x000009de movq $8(%rcx), %r10 + 0x4d, 0x8b, 0x07, //0x000009e2 movq (%r15), %r8 + 0x4f, 0x8d, 0x0c, 0x06, //0x000009e5 leaq (%r14,%r8), %r9 + 0x4d, 0x29, 0xc2, //0x000009e9 subq %r8, %r10 + 0x49, 0x83, 0xfa, 0x20, //0x000009ec cmpq $32, %r10 + 0x0f, 0x8c, 0x21, 0x1d, 0x00, 0x00, //0x000009f0 jl LBB0_110 + 0xba, 0x20, 0x00, 0x00, 0x00, //0x000009f6 movl $32, %edx + 0x31, 0xf6, //0x000009fb xorl %esi, %esi + 0x45, 0x31, 0xff, //0x000009fd xorl %r15d, %r15d + 0xe9, 0x62, 0x00, 0x00, 0x00, //0x00000a00 jmp LBB0_101 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000a05 .p2align 4, 0x90 + //0x00000a10 LBB0_106 + 0x44, 0x89, 0xf9, //0x00000a10 movl %r15d, %ecx + 0xf7, 0xd1, //0x00000a13 notl %ecx + 0x21, 0xd9, //0x00000a15 andl %ebx, %ecx + 0x44, 0x8d, 0x2c, 0x09, //0x00000a17 leal (%rcx,%rcx), %r13d + 0x45, 0x09, 0xfd, //0x00000a1b orl %r15d, %r13d + 0x44, 0x89, 0xef, //0x00000a1e movl %r13d, %edi + 0xf7, 0xd7, //0x00000a21 notl %edi + 0x21, 0xdf, //0x00000a23 andl %ebx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000a25 andl $-1431655766, %edi + 0x45, 0x31, 0xff, //0x00000a2b xorl %r15d, %r15d + 0x01, 0xcf, //0x00000a2e addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc7, //0x00000a30 setb %r15b + 0x01, 0xff, //0x00000a34 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00000a36 xorl $1431655765, %edi + 0x44, 0x21, 0xef, //0x00000a3c andl %r13d, %edi + 0xf7, 0xd7, //0x00000a3f notl %edi + 0x41, 0x21, 0xfb, //0x00000a41 andl %edi, %r11d + 0x4d, 0x85, 0xdb, //0x00000a44 testq %r11, %r11 + 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x00000a47 jne LBB0_104 + //0x00000a4d LBB0_107 + 0x48, 0x83, 0xc6, 0x20, //0x00000a4d addq $32, %rsi + 0x49, 0x8d, 0x0c, 0x12, //0x00000a51 leaq (%r10,%rdx), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00000a55 addq $-32, %rcx + 0x48, 0x83, 0xc2, 0xe0, //0x00000a59 addq $-32, %rdx + 0x48, 0x83, 0xf9, 0x3f, //0x00000a5d cmpq $63, %rcx + 0x0f, 0x8e, 0x98, 0x1c, 0x00, 0x00, //0x00000a61 jle LBB0_108 + //0x00000a67 LBB0_101 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00000a67 vmovdqu (%r9,%rsi), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00000a6d vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd9, //0x00000a71 vpmovmskb %ymm1, %r11d + 0xc5, 0xfd, 0x74, 0xc7, //0x00000a75 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd8, //0x00000a79 vpmovmskb %ymm0, %ebx + 0x85, 0xdb, //0x00000a7d testl %ebx, %ebx + 0x0f, 0x85, 0x8b, 0xff, 0xff, 0xff, //0x00000a7f jne LBB0_106 + 0x4d, 0x85, 0xff, //0x00000a85 testq %r15, %r15 + 0x0f, 0x85, 0x82, 0xff, 0xff, 0xff, //0x00000a88 jne LBB0_106 + 0x45, 0x31, 0xff, //0x00000a8e xorl %r15d, %r15d + 0x4d, 0x85, 0xdb, //0x00000a91 testq %r11, %r11 + 0x0f, 0x84, 0xb3, 0xff, 0xff, 0xff, //0x00000a94 je LBB0_107 + //0x00000a9a LBB0_104 + 0x41, 0x0f, 0xbc, 0xc3, //0x00000a9a bsfl %r11d, %eax + 0x4c, 0x01, 0xc0, //0x00000a9e addq %r8, %rax + 0x4c, 0x8d, 0x0c, 0x06, //0x00000aa1 leaq (%rsi,%rax), %r9 + 0x49, 0x83, 0xc1, 0x01, //0x00000aa5 addq $1, %r9 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00000aa9 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00000aae movq (%rsp), %r11 + //0x00000ab2 LBB0_105 + 0x4d, 0x89, 0x0f, //0x00000ab2 movq %r9, (%r15) + //0x00000ab5 LBB0_387 + 0x4d, 0x85, 0xc0, //0x00000ab5 testq %r8, %r8 + 0x0f, 0x8f, 0xe2, 0xf8, 0xff, 0xff, //0x00000ab8 jg LBB0_3 + 0xe9, 0xf2, 0x31, 0x00, 0x00, //0x00000abe jmp LBB0_700 + //0x00000ac3 LBB0_111 + 0x4c, 0x89, 0xcf, //0x00000ac3 movq %r9, %rdi + 0x4c, 0x29, 0xef, //0x00000ac6 subq %r13, %rdi + 0x48, 0x83, 0xff, 0x20, //0x00000ac9 cmpq $32, %rdi + 0x0f, 0x82, 0xe4, 0x21, 0x00, 0x00, //0x00000acd jb LBB0_526 + 0x4c, 0x89, 0xef, //0x00000ad3 movq %r13, %rdi + 0x48, 0xf7, 0xdf, //0x00000ad6 negq %rdi + 0x49, 0x8d, 0x4d, 0x01, //0x00000ad9 leaq $1(%r13), %rcx + 0x49, 0x8d, 0x55, 0xff, //0x00000add leaq $-1(%r13), %rdx + 0x4b, 0x8d, 0x34, 0x2e, //0x00000ae1 leaq (%r14,%r13), %rsi + 0x48, 0x83, 0xc6, 0xff, //0x00000ae5 addq $-1, %rsi + 0x4c, 0x89, 0xeb, //0x00000ae9 movq %r13, %rbx + 0x90, 0x90, 0x90, 0x90, //0x00000aec .p2align 4, 0x90 + //0x00000af0 LBB0_113 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x1e, //0x00000af0 vmovdqu (%r14,%rbx), %ymm0 + 0xc5, 0xfd, 0x74, 0xcb, //0x00000af6 vpcmpeqb %ymm3, %ymm0, %ymm1 + 0xc5, 0x8d, 0xdb, 0xc0, //0x00000afa vpand %ymm0, %ymm14, %ymm0 + 0xc5, 0xfd, 0x74, 0x05, 0x9a, 0xf6, 0xff, 0xff, //0x00000afe vpcmpeqb $-2406(%rip), %ymm0, %ymm0 /* LCPI0_8+0(%rip) */ + 0xc5, 0xfd, 0xeb, 0xc1, //0x00000b06 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc0, //0x00000b0a vpmovmskb %ymm0, %eax + 0x85, 0xc0, //0x00000b0e testl %eax, %eax + 0x0f, 0x85, 0x09, 0x01, 0x00, 0x00, //0x00000b10 jne LBB0_127 + 0x48, 0x83, 0xc3, 0x20, //0x00000b16 addq $32, %rbx + 0x49, 0x8d, 0x04, 0x39, //0x00000b1a leaq (%r9,%rdi), %rax + 0x48, 0x83, 0xc0, 0xe0, //0x00000b1e addq $-32, %rax + 0x48, 0x83, 0xc7, 0xe0, //0x00000b22 addq $-32, %rdi + 0x48, 0x83, 0xc1, 0x20, //0x00000b26 addq $32, %rcx + 0x48, 0x83, 0xc2, 0x20, //0x00000b2a addq $32, %rdx + 0x48, 0x83, 0xc6, 0x20, //0x00000b2e addq $32, %rsi + 0x48, 0x83, 0xf8, 0x1f, //0x00000b32 cmpq $31, %rax + 0x0f, 0x87, 0xb4, 0xff, 0xff, 0xff, //0x00000b36 ja LBB0_113 + 0x4d, 0x89, 0xf0, //0x00000b3c movq %r14, %r8 + 0x49, 0x29, 0xf8, //0x00000b3f subq %rdi, %r8 + 0x49, 0x01, 0xf9, //0x00000b42 addq %rdi, %r9 + 0x4c, 0x89, 0xcf, //0x00000b45 movq %r9, %rdi + 0x48, 0x83, 0xff, 0x10, //0x00000b48 cmpq $16, %rdi + 0x0f, 0x82, 0x69, 0x00, 0x00, 0x00, //0x00000b4c jb LBB0_119 + //0x00000b52 LBB0_116 + 0x4d, 0x89, 0xf1, //0x00000b52 movq %r14, %r9 + 0x4d, 0x29, 0xc1, //0x00000b55 subq %r8, %r9 + 0x4c, 0x89, 0xc1, //0x00000b58 movq %r8, %rcx + 0x4c, 0x29, 0xf1, //0x00000b5b subq %r14, %rcx + 0x48, 0x83, 0xc1, 0x01, //0x00000b5e addq $1, %rcx + 0x49, 0x8d, 0x50, 0xff, //0x00000b62 leaq $-1(%r8), %rdx + 0x48, 0x89, 0xd6, //0x00000b66 movq %rdx, %rsi + 0x4c, 0x29, 0xf6, //0x00000b69 subq %r14, %rsi + //0x00000b6c LBB0_117 + 0xc4, 0xc1, 0x7a, 0x6f, 0x00, //0x00000b6c vmovdqu (%r8), %xmm0 + 0xc5, 0xf9, 0x74, 0x0d, 0x97, 0xf4, 0xff, 0xff, //0x00000b71 vpcmpeqb $-2921(%rip), %xmm0, %xmm1 /* LCPI0_11+0(%rip) */ + 0xc5, 0xf9, 0xdb, 0x05, 0x9f, 0xf4, 0xff, 0xff, //0x00000b79 vpand $-2913(%rip), %xmm0, %xmm0 /* LCPI0_12+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0xa7, 0xf4, 0xff, 0xff, //0x00000b81 vpcmpeqb $-2905(%rip), %xmm0, %xmm0 /* LCPI0_13+0(%rip) */ + 0xc5, 0xf9, 0xeb, 0xc1, //0x00000b89 vpor %xmm1, %xmm0, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd8, //0x00000b8d vpmovmskb %xmm0, %ebx + 0x85, 0xdb, //0x00000b91 testl %ebx, %ebx + 0x0f, 0x85, 0x9e, 0x1b, 0x00, 0x00, //0x00000b93 jne LBB0_478 + 0x49, 0x83, 0xc0, 0x10, //0x00000b99 addq $16, %r8 + 0x48, 0x83, 0xc7, 0xf0, //0x00000b9d addq $-16, %rdi + 0x49, 0x83, 0xc1, 0xf0, //0x00000ba1 addq $-16, %r9 + 0x48, 0x83, 0xc1, 0x10, //0x00000ba5 addq $16, %rcx + 0x48, 0x83, 0xc6, 0x10, //0x00000ba9 addq $16, %rsi + 0x48, 0x83, 0xc2, 0x10, //0x00000bad addq $16, %rdx + 0x48, 0x83, 0xff, 0x0f, //0x00000bb1 cmpq $15, %rdi + 0x0f, 0x87, 0xb1, 0xff, 0xff, 0xff, //0x00000bb5 ja LBB0_117 + //0x00000bbb LBB0_119 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00000bbb vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00000bbf vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00000bc3 vmovdqa %ymm13, %ymm11 + 0x48, 0x85, 0xff, //0x00000bc8 testq %rdi, %rdi + 0x0f, 0x84, 0xe8, 0xf7, 0xff, 0xff, //0x00000bcb je LBB0_1 + 0x49, 0x8d, 0x0c, 0x38, //0x00000bd1 leaq (%r8,%rdi), %rcx + 0x48, 0xb8, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00000bd5 movabsq $17596481021440, %rax + //0x00000bdf LBB0_121 + 0x41, 0x0f, 0xb6, 0x10, //0x00000bdf movzbl (%r8), %edx + 0x48, 0x83, 0xfa, 0x2c, //0x00000be3 cmpq $44, %rdx + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x00000be7 ja LBB0_123 + 0x48, 0x0f, 0xa3, 0xd0, //0x00000bed btq %rdx, %rax + 0x0f, 0x82, 0xc2, 0xf7, 0xff, 0xff, //0x00000bf1 jb LBB0_1 + //0x00000bf7 LBB0_123 + 0x80, 0xfa, 0x5d, //0x00000bf7 cmpb $93, %dl + 0x0f, 0x84, 0xb9, 0xf7, 0xff, 0xff, //0x00000bfa je LBB0_1 + 0x80, 0xfa, 0x7d, //0x00000c00 cmpb $125, %dl + 0x0f, 0x84, 0xb0, 0xf7, 0xff, 0xff, //0x00000c03 je LBB0_1 + 0x49, 0x83, 0xc0, 0x01, //0x00000c09 addq $1, %r8 + 0x48, 0x83, 0xc7, 0xff, //0x00000c0d addq $-1, %rdi + 0x0f, 0x85, 0xc8, 0xff, 0xff, 0xff, //0x00000c11 jne LBB0_121 + 0x49, 0x89, 0xc8, //0x00000c17 movq %rcx, %r8 + 0xe9, 0x9a, 0xf7, 0xff, 0xff, //0x00000c1a jmp LBB0_1 + //0x00000c1f LBB0_127 + 0x0f, 0xbc, 0xd8, //0x00000c1f bsfl %eax, %ebx + 0x48, 0x89, 0xd8, //0x00000c22 movq %rbx, %rax + 0x48, 0x29, 0xf8, //0x00000c25 subq %rdi, %rax + 0x49, 0x89, 0x07, //0x00000c28 movq %rax, (%r15) + 0x48, 0x85, 0xc0, //0x00000c2b testq %rax, %rax + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000c2e movabsq $4294977024, %rdi + 0x0f, 0x8e, 0xac, 0xf7, 0xff, 0xff, //0x00000c38 jle LBB0_2 + 0x48, 0x01, 0xd9, //0x00000c3e addq %rbx, %rcx + 0x48, 0x01, 0xda, //0x00000c41 addq %rbx, %rdx + 0x48, 0x01, 0xde, //0x00000c44 addq %rbx, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000c47 .p2align 4, 0x90 + //0x00000c50 LBB0_129 + 0x0f, 0xb6, 0x06, //0x00000c50 movzbl (%rsi), %eax + 0x48, 0x83, 0xf8, 0x20, //0x00000c53 cmpq $32, %rax + 0x0f, 0x87, 0x8d, 0xf7, 0xff, 0xff, //0x00000c57 ja LBB0_2 + 0x48, 0x0f, 0xa3, 0xc7, //0x00000c5d btq %rax, %rdi + 0x0f, 0x83, 0x83, 0xf7, 0xff, 0xff, //0x00000c61 jae LBB0_2 + 0x49, 0x89, 0x17, //0x00000c67 movq %rdx, (%r15) + 0x48, 0x83, 0xc1, 0xff, //0x00000c6a addq $-1, %rcx + 0x48, 0x83, 0xc2, 0xff, //0x00000c6e addq $-1, %rdx + 0x48, 0x83, 0xc6, 0xff, //0x00000c72 addq $-1, %rsi + 0x48, 0x83, 0xf9, 0x01, //0x00000c76 cmpq $1, %rcx + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x00000c7a jg LBB0_129 + 0xe9, 0x65, 0xf7, 0xff, 0xff, //0x00000c80 jmp LBB0_2 + //0x00000c85 LBB0_132 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00000c85 movq $32(%rsp), %rcx + 0x4c, 0x8b, 0x51, 0x08, //0x00000c8a movq $8(%rcx), %r10 + 0x4d, 0x8b, 0x07, //0x00000c8e movq (%r15), %r8 + 0x4f, 0x8d, 0x0c, 0x06, //0x00000c91 leaq (%r14,%r8), %r9 + 0x4d, 0x29, 0xc2, //0x00000c95 subq %r8, %r10 + 0x49, 0x83, 0xfa, 0x20, //0x00000c98 cmpq $32, %r10 + 0x0f, 0x8c, 0x9c, 0x1c, 0x00, 0x00, //0x00000c9c jl LBB0_142 + 0xba, 0x20, 0x00, 0x00, 0x00, //0x00000ca2 movl $32, %edx + 0x31, 0xf6, //0x00000ca7 xorl %esi, %esi + 0x45, 0x31, 0xff, //0x00000ca9 xorl %r15d, %r15d + 0xe9, 0x66, 0x00, 0x00, 0x00, //0x00000cac jmp LBB0_134 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000cb1 .p2align 4, 0x90 + //0x00000cc0 LBB0_138 + 0x44, 0x89, 0xf9, //0x00000cc0 movl %r15d, %ecx + 0xf7, 0xd1, //0x00000cc3 notl %ecx + 0x21, 0xd9, //0x00000cc5 andl %ebx, %ecx + 0x44, 0x8d, 0x2c, 0x09, //0x00000cc7 leal (%rcx,%rcx), %r13d + 0x45, 0x09, 0xfd, //0x00000ccb orl %r15d, %r13d + 0x44, 0x89, 0xef, //0x00000cce movl %r13d, %edi + 0xf7, 0xd7, //0x00000cd1 notl %edi + 0x21, 0xdf, //0x00000cd3 andl %ebx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000cd5 andl $-1431655766, %edi + 0x45, 0x31, 0xff, //0x00000cdb xorl %r15d, %r15d + 0x01, 0xcf, //0x00000cde addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc7, //0x00000ce0 setb %r15b + 0x01, 0xff, //0x00000ce4 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00000ce6 xorl $1431655765, %edi + 0x44, 0x21, 0xef, //0x00000cec andl %r13d, %edi + 0xf7, 0xd7, //0x00000cef notl %edi + 0x41, 0x21, 0xfb, //0x00000cf1 andl %edi, %r11d + 0x4d, 0x85, 0xdb, //0x00000cf4 testq %r11, %r11 + 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x00000cf7 jne LBB0_137 + //0x00000cfd LBB0_139 + 0x48, 0x83, 0xc6, 0x20, //0x00000cfd addq $32, %rsi + 0x49, 0x8d, 0x0c, 0x12, //0x00000d01 leaq (%r10,%rdx), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00000d05 addq $-32, %rcx + 0x48, 0x83, 0xc2, 0xe0, //0x00000d09 addq $-32, %rdx + 0x48, 0x83, 0xf9, 0x3f, //0x00000d0d cmpq $63, %rcx + 0x0f, 0x8e, 0x0f, 0x1c, 0x00, 0x00, //0x00000d11 jle LBB0_140 + //0x00000d17 LBB0_134 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00000d17 vmovdqu (%r9,%rsi), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00000d1d vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd9, //0x00000d21 vpmovmskb %ymm1, %r11d + 0xc5, 0xfd, 0x74, 0xc7, //0x00000d25 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd8, //0x00000d29 vpmovmskb %ymm0, %ebx + 0x85, 0xdb, //0x00000d2d testl %ebx, %ebx + 0x0f, 0x85, 0x8b, 0xff, 0xff, 0xff, //0x00000d2f jne LBB0_138 + 0x4d, 0x85, 0xff, //0x00000d35 testq %r15, %r15 + 0x0f, 0x85, 0x82, 0xff, 0xff, 0xff, //0x00000d38 jne LBB0_138 + 0x45, 0x31, 0xff, //0x00000d3e xorl %r15d, %r15d + 0x4d, 0x85, 0xdb, //0x00000d41 testq %r11, %r11 + 0x0f, 0x84, 0xb3, 0xff, 0xff, 0xff, //0x00000d44 je LBB0_139 + //0x00000d4a LBB0_137 + 0x41, 0x0f, 0xbc, 0xc3, //0x00000d4a bsfl %r11d, %eax + 0x4c, 0x01, 0xc0, //0x00000d4e addq %r8, %rax + 0x4c, 0x8d, 0x0c, 0x06, //0x00000d51 leaq (%rsi,%rax), %r9 + 0x49, 0x83, 0xc1, 0x01, //0x00000d55 addq $1, %r9 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00000d59 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00000d5e movq (%rsp), %r11 + 0x4d, 0x89, 0x0f, //0x00000d62 movq %r9, (%r15) + 0x4d, 0x85, 0xc0, //0x00000d65 testq %r8, %r8 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00000d68 movq $24(%rsp), %r10 + 0x0f, 0x8f, 0x35, 0x0b, 0x00, 0x00, //0x00000d6d jg LBB0_304 + 0xe9, 0x3d, 0x2f, 0x00, 0x00, //0x00000d73 jmp LBB0_700 + //0x00000d78 LBB0_143 + 0x4d, 0x89, 0xc5, //0x00000d78 movq %r8, %r13 + 0x4d, 0x29, 0xcd, //0x00000d7b subq %r9, %r13 + 0x0f, 0x84, 0xfa, 0x30, 0x00, 0x00, //0x00000d7e je LBB0_732 + 0x49, 0x83, 0xfd, 0x40, //0x00000d84 cmpq $64, %r13 + 0x0f, 0x82, 0xa5, 0x1f, 0x00, 0x00, //0x00000d88 jb LBB0_532 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00000d8e movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x00000d95 movq %r9, %rax + 0x45, 0x31, 0xdb, //0x00000d98 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000d9b .p2align 4, 0x90 + //0x00000da0 LBB0_146 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x00000da0 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x00000da6 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x00000dad vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x00000db1 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0x74, 0xd6, //0x00000db5 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00000db9 vpmovmskb %ymm2, %ecx + 0xc5, 0xfd, 0x74, 0xd7, //0x00000dbd vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00000dc1 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd7, //0x00000dc5 vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x00000dc9 vpmovmskb %ymm2, %ebx + 0xc5, 0xbd, 0x64, 0xd1, //0x00000dcd vpcmpgtb %ymm1, %ymm8, %ymm2 + 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00000dd1 vpcmpgtb %ymm9, %ymm1, %ymm1 + 0xc5, 0xed, 0xdb, 0xc9, //0x00000dd6 vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf1, //0x00000dda vpmovmskb %ymm1, %esi + 0x48, 0xc1, 0xe1, 0x20, //0x00000dde shlq $32, %rcx + 0x48, 0x09, 0xcf, //0x00000de2 orq %rcx, %rdi + 0x48, 0xc1, 0xe3, 0x20, //0x00000de5 shlq $32, %rbx + 0x48, 0xc1, 0xe6, 0x20, //0x00000de9 shlq $32, %rsi + 0x48, 0x09, 0xda, //0x00000ded orq %rbx, %rdx + 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00000df0 jne LBB0_157 + 0x4d, 0x85, 0xdb, //0x00000df6 testq %r11, %r11 + 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00000df9 jne LBB0_159 + 0x45, 0x31, 0xdb, //0x00000dff xorl %r11d, %r11d + //0x00000e02 LBB0_149 + 0xc5, 0xbd, 0x64, 0xc8, //0x00000e02 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00000e06 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00000e0b vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x00000e0f vpmovmskb %ymm0, %ecx + 0x48, 0x09, 0xce, //0x00000e13 orq %rcx, %rsi + 0x48, 0x85, 0xff, //0x00000e16 testq %rdi, %rdi + 0x0f, 0x85, 0x7f, 0x00, 0x00, 0x00, //0x00000e19 jne LBB0_160 + 0x48, 0x85, 0xf6, //0x00000e1f testq %rsi, %rsi + 0x0f, 0x85, 0x07, 0x2f, 0x00, 0x00, //0x00000e22 jne LBB0_709 + 0x49, 0x83, 0xc5, 0xc0, //0x00000e28 addq $-64, %r13 + 0x48, 0x83, 0xc0, 0x40, //0x00000e2c addq $64, %rax + 0x49, 0x83, 0xfd, 0x3f, //0x00000e30 cmpq $63, %r13 + 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x00000e34 ja LBB0_146 + 0xe9, 0x5e, 0x1b, 0x00, 0x00, //0x00000e3a jmp LBB0_152 + //0x00000e3f LBB0_157 + 0x49, 0x83, 0xff, 0xff, //0x00000e3f cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00000e43 jne LBB0_159 + 0x4c, 0x0f, 0xbc, 0xfa, //0x00000e49 bsfq %rdx, %r15 + 0x49, 0x01, 0xc7, //0x00000e4d addq %rax, %r15 + //0x00000e50 LBB0_159 + 0x4c, 0x89, 0xd9, //0x00000e50 movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x00000e53 notq %rcx + 0x48, 0x21, 0xd1, //0x00000e56 andq %rdx, %rcx + 0x4c, 0x8d, 0x14, 0x09, //0x00000e59 leaq (%rcx,%rcx), %r10 + 0x4d, 0x09, 0xda, //0x00000e5d orq %r11, %r10 + 0x4c, 0x89, 0xd3, //0x00000e60 movq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00000e63 notq %rbx + 0x48, 0x21, 0xd3, //0x00000e66 andq %rdx, %rbx + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000e69 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd3, //0x00000e73 andq %rdx, %rbx + 0x45, 0x31, 0xdb, //0x00000e76 xorl %r11d, %r11d + 0x48, 0x01, 0xcb, //0x00000e79 addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc3, //0x00000e7c setb %r11b + 0x48, 0x01, 0xdb, //0x00000e80 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000e83 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x00000e8d xorq %rcx, %rbx + 0x4c, 0x21, 0xd3, //0x00000e90 andq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00000e93 notq %rbx + 0x48, 0x21, 0xdf, //0x00000e96 andq %rbx, %rdi + 0xe9, 0x64, 0xff, 0xff, 0xff, //0x00000e99 jmp LBB0_149 + //0x00000e9e LBB0_160 + 0x48, 0x0f, 0xbc, 0xcf, //0x00000e9e bsfq %rdi, %rcx + 0x48, 0x85, 0xf6, //0x00000ea2 testq %rsi, %rsi + 0x0f, 0x84, 0xbf, 0xf4, 0xff, 0xff, //0x00000ea5 je LBB0_235 + 0x48, 0x0f, 0xbc, 0xd6, //0x00000eab bsfq %rsi, %rdx + 0x4c, 0x8b, 0x1c, 0x24, //0x00000eaf movq (%rsp), %r11 + 0x48, 0x39, 0xca, //0x00000eb3 cmpq %rcx, %rdx + 0x0f, 0x83, 0xc0, 0xf4, 0xff, 0xff, //0x00000eb6 jae LBB0_236 + 0xe9, 0xc5, 0x2f, 0x00, 0x00, //0x00000ebc jmp LBB0_162 + //0x00000ec1 LBB0_163 + 0x4d, 0x89, 0xc5, //0x00000ec1 movq %r8, %r13 + 0x4d, 0x29, 0xcd, //0x00000ec4 subq %r9, %r13 + 0x0f, 0x84, 0xb1, 0x2f, 0x00, 0x00, //0x00000ec7 je LBB0_732 + 0x49, 0x83, 0xfd, 0x40, //0x00000ecd cmpq $64, %r13 + 0x0f, 0x82, 0xac, 0x1e, 0x00, 0x00, //0x00000ed1 jb LBB0_537 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00000ed7 movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x00000ede movq %r9, %rax + 0x45, 0x31, 0xdb, //0x00000ee1 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000ee4 .p2align 4, 0x90 + //0x00000ef0 LBB0_166 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x00000ef0 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x00000ef6 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x00000efd vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x00000f01 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0x74, 0xd6, //0x00000f05 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x00000f09 vpmovmskb %ymm2, %ebx + 0xc5, 0xfd, 0x74, 0xd7, //0x00000f0d vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00000f11 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd7, //0x00000f15 vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00000f19 vpmovmskb %ymm2, %ecx + 0xc5, 0xbd, 0x64, 0xd1, //0x00000f1d vpcmpgtb %ymm1, %ymm8, %ymm2 + 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00000f21 vpcmpgtb %ymm9, %ymm1, %ymm1 + 0xc5, 0xed, 0xdb, 0xc9, //0x00000f26 vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf1, //0x00000f2a vpmovmskb %ymm1, %esi + 0x48, 0xc1, 0xe3, 0x20, //0x00000f2e shlq $32, %rbx + 0x48, 0x09, 0xdf, //0x00000f32 orq %rbx, %rdi + 0x48, 0xc1, 0xe1, 0x20, //0x00000f35 shlq $32, %rcx + 0x48, 0xc1, 0xe6, 0x20, //0x00000f39 shlq $32, %rsi + 0x48, 0x09, 0xca, //0x00000f3d orq %rcx, %rdx + 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00000f40 jne LBB0_177 + 0x4d, 0x85, 0xdb, //0x00000f46 testq %r11, %r11 + 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00000f49 jne LBB0_179 + 0x45, 0x31, 0xdb, //0x00000f4f xorl %r11d, %r11d + //0x00000f52 LBB0_169 + 0xc5, 0xbd, 0x64, 0xc8, //0x00000f52 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00000f56 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00000f5b vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x00000f5f vpmovmskb %ymm0, %ecx + 0x48, 0x09, 0xce, //0x00000f63 orq %rcx, %rsi + 0x48, 0x85, 0xff, //0x00000f66 testq %rdi, %rdi + 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x00000f69 jne LBB0_180 + 0x48, 0x85, 0xf6, //0x00000f6f testq %rsi, %rsi + 0x0f, 0x85, 0xb7, 0x2d, 0x00, 0x00, //0x00000f72 jne LBB0_709 + 0x49, 0x83, 0xc5, 0xc0, //0x00000f78 addq $-64, %r13 + 0x48, 0x83, 0xc0, 0x40, //0x00000f7c addq $64, %rax + 0x49, 0x83, 0xfd, 0x3f, //0x00000f80 cmpq $63, %r13 + 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x00000f84 ja LBB0_166 + 0xe9, 0x1b, 0x1b, 0x00, 0x00, //0x00000f8a jmp LBB0_172 + //0x00000f8f LBB0_177 + 0x49, 0x83, 0xff, 0xff, //0x00000f8f cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00000f93 jne LBB0_179 + 0x4c, 0x0f, 0xbc, 0xfa, //0x00000f99 bsfq %rdx, %r15 + 0x49, 0x01, 0xc7, //0x00000f9d addq %rax, %r15 + //0x00000fa0 LBB0_179 + 0x4c, 0x89, 0xd9, //0x00000fa0 movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x00000fa3 notq %rcx + 0x48, 0x21, 0xd1, //0x00000fa6 andq %rdx, %rcx + 0x4c, 0x8d, 0x14, 0x09, //0x00000fa9 leaq (%rcx,%rcx), %r10 + 0x4d, 0x09, 0xda, //0x00000fad orq %r11, %r10 + 0x4c, 0x89, 0xd3, //0x00000fb0 movq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00000fb3 notq %rbx + 0x48, 0x21, 0xd3, //0x00000fb6 andq %rdx, %rbx + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000fb9 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd3, //0x00000fc3 andq %rdx, %rbx + 0x45, 0x31, 0xdb, //0x00000fc6 xorl %r11d, %r11d + 0x48, 0x01, 0xcb, //0x00000fc9 addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc3, //0x00000fcc setb %r11b + 0x48, 0x01, 0xdb, //0x00000fd0 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000fd3 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x00000fdd xorq %rcx, %rbx + 0x4c, 0x21, 0xd3, //0x00000fe0 andq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00000fe3 notq %rbx + 0x48, 0x21, 0xdf, //0x00000fe6 andq %rbx, %rdi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00000fe9 movq $24(%rsp), %r10 + 0xe9, 0x5f, 0xff, 0xff, 0xff, //0x00000fee jmp LBB0_169 + //0x00000ff3 LBB0_180 + 0x48, 0x0f, 0xbc, 0xcf, //0x00000ff3 bsfq %rdi, %rcx + 0x48, 0x85, 0xf6, //0x00000ff7 testq %rsi, %rsi + 0x0f, 0x84, 0x75, 0x08, 0x00, 0x00, //0x00000ffa je LBB0_300 + 0x48, 0x0f, 0xbc, 0xd6, //0x00001000 bsfq %rsi, %rdx + 0x4c, 0x8b, 0x1c, 0x24, //0x00001004 movq (%rsp), %r11 + 0x48, 0x39, 0xca, //0x00001008 cmpq %rcx, %rdx + 0x0f, 0x83, 0x76, 0x08, 0x00, 0x00, //0x0000100b jae LBB0_301 + 0xe9, 0x70, 0x2e, 0x00, 0x00, //0x00001011 jmp LBB0_162 + //0x00001016 LBB0_182 + 0x43, 0x8a, 0x0c, 0x2e, //0x00001016 movb (%r14,%r13), %cl + 0x80, 0xc1, 0xd2, //0x0000101a addb $-46, %cl + 0x80, 0xf9, 0x37, //0x0000101d cmpb $55, %cl + 0x0f, 0x87, 0x20, 0xf8, 0xff, 0xff, //0x00001020 ja LBB0_75 + 0x0f, 0xb6, 0xc9, //0x00001026 movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00001029 movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x00001033 btq %rcx, %rdx + 0x48, 0x89, 0xc1, //0x00001037 movq %rax, %rcx + 0x0f, 0x83, 0xee, 0x07, 0x00, 0x00, //0x0000103a jae LBB0_296 + //0x00001040 LBB0_184 + 0x4c, 0x89, 0x6c, 0x24, 0x10, //0x00001040 movq %r13, $16(%rsp) + 0x49, 0x83, 0xf9, 0x20, //0x00001045 cmpq $32, %r9 + 0x0f, 0x82, 0x7b, 0x1c, 0x00, 0x00, //0x00001049 jb LBB0_527 + 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x0000104f movq $-1, $40(%rsp) + 0x45, 0x31, 0xd2, //0x00001058 xorl %r10d, %r10d + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x0000105b movq $-1, %r13 + 0x48, 0xc7, 0x44, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff, //0x00001062 movq $-1, $48(%rsp) + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000106b .p2align 4, 0x90 + //0x00001070 LBB0_186 + 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x10, //0x00001070 vmovdqu (%r8,%r10), %ymm0 + 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x00001076 vpcmpgtb %ymm10, %ymm0, %ymm1 + 0xc5, 0x95, 0x64, 0xd0, //0x0000107b vpcmpgtb %ymm0, %ymm13, %ymm2 + 0xc5, 0xed, 0xdb, 0xc9, //0x0000107f vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0x85, 0x74, 0xd0, //0x00001083 vpcmpeqb %ymm0, %ymm15, %ymm2 + 0xc5, 0xfd, 0x74, 0x1d, 0xd1, 0xf1, 0xff, 0xff, //0x00001087 vpcmpeqb $-3631(%rip), %ymm0, %ymm3 /* LCPI0_17+0(%rip) */ + 0xc5, 0xe5, 0xeb, 0xd2, //0x0000108f vpor %ymm2, %ymm3, %ymm2 + 0xc5, 0x8d, 0xdb, 0xd8, //0x00001093 vpand %ymm0, %ymm14, %ymm3 + 0xc5, 0xfd, 0x74, 0x05, 0xe1, 0xf1, 0xff, 0xff, //0x00001097 vpcmpeqb $-3615(%rip), %ymm0, %ymm0 /* LCPI0_18+0(%rip) */ + 0xc5, 0xfd, 0xd7, 0xf8, //0x0000109f vpmovmskb %ymm0, %edi + 0xc5, 0xe5, 0x74, 0xdc, //0x000010a3 vpcmpeqb %ymm4, %ymm3, %ymm3 + 0xc5, 0xfd, 0xd7, 0xf3, //0x000010a7 vpmovmskb %ymm3, %esi + 0xc5, 0xfd, 0xd7, 0xd2, //0x000010ab vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0xeb, 0xc0, //0x000010af vpor %ymm0, %ymm1, %ymm0 + 0xc5, 0xe5, 0xeb, 0xca, //0x000010b3 vpor %ymm2, %ymm3, %ymm1 + 0xc5, 0xfd, 0xeb, 0xc1, //0x000010b7 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x000010bb vpmovmskb %ymm0, %ecx + 0x48, 0xf7, 0xd1, //0x000010bf notq %rcx + 0x48, 0x0f, 0xbc, 0xc9, //0x000010c2 bsfq %rcx, %rcx + 0x83, 0xf9, 0x20, //0x000010c6 cmpl $32, %ecx + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x000010c9 je LBB0_188 + 0xbb, 0xff, 0xff, 0xff, 0xff, //0x000010cf movl $-1, %ebx + 0xd3, 0xe3, //0x000010d4 shll %cl, %ebx + 0xf7, 0xd3, //0x000010d6 notl %ebx + 0x21, 0xdf, //0x000010d8 andl %ebx, %edi + 0x21, 0xde, //0x000010da andl %ebx, %esi + 0x21, 0xd3, //0x000010dc andl %edx, %ebx + 0x89, 0xda, //0x000010de movl %ebx, %edx + //0x000010e0 LBB0_188 + 0x8d, 0x5f, 0xff, //0x000010e0 leal $-1(%rdi), %ebx + 0x21, 0xfb, //0x000010e3 andl %edi, %ebx + 0xc5, 0xfe, 0x6f, 0x1d, 0xd3, 0xf0, 0xff, 0xff, //0x000010e5 vmovdqu $-3885(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0x0f, 0x85, 0x32, 0x16, 0x00, 0x00, //0x000010ed jne LBB0_476 + 0x8d, 0x5e, 0xff, //0x000010f3 leal $-1(%rsi), %ebx + 0x21, 0xf3, //0x000010f6 andl %esi, %ebx + 0x0f, 0x85, 0x27, 0x16, 0x00, 0x00, //0x000010f8 jne LBB0_476 + 0x8d, 0x5a, 0xff, //0x000010fe leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x00001101 andl %edx, %ebx + 0x0f, 0x85, 0x1c, 0x16, 0x00, 0x00, //0x00001103 jne LBB0_476 + 0x85, 0xff, //0x00001109 testl %edi, %edi + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x0000110b je LBB0_194 + 0x0f, 0xbc, 0xff, //0x00001111 bsfl %edi, %edi + 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x00001114 cmpq $-1, $48(%rsp) + 0x0f, 0x85, 0xd1, 0x19, 0x00, 0x00, //0x0000111a jne LBB0_505 + 0x4c, 0x01, 0xd7, //0x00001120 addq %r10, %rdi + 0x48, 0x89, 0x7c, 0x24, 0x30, //0x00001123 movq %rdi, $48(%rsp) + //0x00001128 LBB0_194 + 0x85, 0xf6, //0x00001128 testl %esi, %esi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000112a je LBB0_197 + 0x0f, 0xbc, 0xf6, //0x00001130 bsfl %esi, %esi + 0x49, 0x83, 0xfd, 0xff, //0x00001133 cmpq $-1, %r13 + 0x0f, 0x85, 0xbf, 0x19, 0x00, 0x00, //0x00001137 jne LBB0_506 + 0x4c, 0x01, 0xd6, //0x0000113d addq %r10, %rsi + 0x49, 0x89, 0xf5, //0x00001140 movq %rsi, %r13 + //0x00001143 LBB0_197 + 0x85, 0xd2, //0x00001143 testl %edx, %edx + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00001145 je LBB0_200 + 0x0f, 0xbc, 0xd2, //0x0000114b bsfl %edx, %edx + 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000114e cmpq $-1, $40(%rsp) + 0x0f, 0x85, 0xad, 0x19, 0x00, 0x00, //0x00001154 jne LBB0_507 + 0x4c, 0x01, 0xd2, //0x0000115a addq %r10, %rdx + 0x48, 0x89, 0x54, 0x24, 0x28, //0x0000115d movq %rdx, $40(%rsp) + //0x00001162 LBB0_200 + 0x83, 0xf9, 0x20, //0x00001162 cmpl $32, %ecx + 0x0f, 0x85, 0xc3, 0x02, 0x00, 0x00, //0x00001165 jne LBB0_234 + 0x49, 0x83, 0xc1, 0xe0, //0x0000116b addq $-32, %r9 + 0x49, 0x83, 0xc2, 0x20, //0x0000116f addq $32, %r10 + 0x49, 0x83, 0xf9, 0x1f, //0x00001173 cmpq $31, %r9 + 0x0f, 0x87, 0xf3, 0xfe, 0xff, 0xff, //0x00001177 ja LBB0_186 + 0xc5, 0xf8, 0x77, //0x0000117d vzeroupper + 0xc5, 0x7e, 0x6f, 0x35, 0x58, 0xf0, 0xff, 0xff, //0x00001180 vmovdqu $-4008(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0xb0, 0xf0, 0xff, 0xff, //0x00001188 vmovdqu $-3920(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0x88, 0xf0, 0xff, 0xff, //0x00001190 vmovdqu $-3960(%rip), %ymm13 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x15, 0x60, 0xf0, 0xff, 0xff, //0x00001198 vmovdqu $-4000(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0xb8, 0xef, 0xff, 0xff, //0x000011a0 vmovdqu $-4168(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0x90, 0xef, 0xff, 0xff, //0x000011a8 vmovdqu $-4208(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000011b0 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x05, 0x63, 0xef, 0xff, 0xff, //0x000011b5 vmovdqu $-4253(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x3b, 0xef, 0xff, 0xff, //0x000011bd vmovdqu $-4293(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x13, 0xef, 0xff, 0xff, //0x000011c5 vmovdqu $-4333(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x2d, 0xeb, 0xee, 0xff, 0xff, //0x000011cd vmovdqu $-4373(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0x4d, 0x01, 0xc2, //0x000011d5 addq %r8, %r10 + 0x49, 0x83, 0xf9, 0x10, //0x000011d8 cmpq $16, %r9 + 0x0f, 0x82, 0x8f, 0x01, 0x00, 0x00, //0x000011dc jb LBB0_221 + //0x000011e2 LBB0_203 + 0x4c, 0x89, 0xd1, //0x000011e2 movq %r10, %rcx + 0x48, 0x2b, 0x4c, 0x24, 0x10, //0x000011e5 subq $16(%rsp), %rcx + 0x4c, 0x29, 0xf1, //0x000011ea subq %r14, %rcx + 0x48, 0x83, 0xc1, 0x01, //0x000011ed addq $1, %rcx + 0x48, 0x89, 0x4c, 0x24, 0x38, //0x000011f1 movq %rcx, $56(%rsp) + 0x45, 0x31, 0xff, //0x000011f6 xorl %r15d, %r15d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000011f9 .p2align 4, 0x90 + //0x00001200 LBB0_204 + 0x4d, 0x89, 0xeb, //0x00001200 movq %r13, %r11 + 0x4d, 0x89, 0xc5, //0x00001203 movq %r8, %r13 + 0xc4, 0x81, 0x7a, 0x6f, 0x04, 0x3a, //0x00001206 vmovdqu (%r10,%r15), %xmm0 + 0xc5, 0xf9, 0x64, 0x0d, 0x2c, 0xee, 0xff, 0xff, //0x0000120c vpcmpgtb $-4564(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ + 0xc5, 0xfa, 0x6f, 0x15, 0x34, 0xee, 0xff, 0xff, //0x00001214 vmovdqu $-4556(%rip), %xmm2 /* LCPI0_21+0(%rip) */ + 0xc5, 0xe9, 0x64, 0xd0, //0x0000121c vpcmpgtb %xmm0, %xmm2, %xmm2 + 0xc5, 0xf1, 0xdb, 0xca, //0x00001220 vpand %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0x74, 0x15, 0x34, 0xee, 0xff, 0xff, //0x00001224 vpcmpeqb $-4556(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x1d, 0x3c, 0xee, 0xff, 0xff, //0x0000122c vpcmpeqb $-4548(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xd2, //0x00001234 vpor %xmm2, %xmm3, %xmm2 + 0xc5, 0xf9, 0xdb, 0x1d, 0xe0, 0xed, 0xff, 0xff, //0x00001238 vpand $-4640(%rip), %xmm0, %xmm3 /* LCPI0_12+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0x38, 0xee, 0xff, 0xff, //0x00001240 vpcmpeqb $-4552(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ + 0xc5, 0xe1, 0x74, 0x1d, 0x40, 0xee, 0xff, 0xff, //0x00001248 vpcmpeqb $-4544(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xe0, //0x00001250 vpor %xmm0, %xmm3, %xmm4 + 0xc5, 0xe9, 0xeb, 0xc9, //0x00001254 vpor %xmm1, %xmm2, %xmm1 + 0xc5, 0xd9, 0xeb, 0xc9, //0x00001258 vpor %xmm1, %xmm4, %xmm1 + 0xc5, 0x79, 0xd7, 0xc0, //0x0000125c vpmovmskb %xmm0, %r8d + 0xc5, 0xf9, 0xd7, 0xf3, //0x00001260 vpmovmskb %xmm3, %esi + 0xc5, 0xf9, 0xd7, 0xd2, //0x00001264 vpmovmskb %xmm2, %edx + 0xc5, 0xf9, 0xd7, 0xc9, //0x00001268 vpmovmskb %xmm1, %ecx + 0xf7, 0xd1, //0x0000126c notl %ecx + 0x0f, 0xbc, 0xc9, //0x0000126e bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x00001271 cmpl $16, %ecx + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00001274 je LBB0_206 + 0xbf, 0xff, 0xff, 0xff, 0xff, //0x0000127a movl $-1, %edi + 0xd3, 0xe7, //0x0000127f shll %cl, %edi + 0xf7, 0xd7, //0x00001281 notl %edi + 0x41, 0x21, 0xf8, //0x00001283 andl %edi, %r8d + 0x21, 0xfe, //0x00001286 andl %edi, %esi + 0x21, 0xd7, //0x00001288 andl %edx, %edi + 0x89, 0xfa, //0x0000128a movl %edi, %edx + //0x0000128c LBB0_206 + 0xc5, 0xfe, 0x6f, 0x25, 0x0c, 0xf0, 0xff, 0xff, //0x0000128c vmovdqu $-4084(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x24, 0xef, 0xff, 0xff, //0x00001294 vmovdqu $-4316(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0x41, 0x8d, 0x78, 0xff, //0x0000129c leal $-1(%r8), %edi + 0x44, 0x21, 0xc7, //0x000012a0 andl %r8d, %edi + 0x0f, 0x85, 0x54, 0x17, 0x00, 0x00, //0x000012a3 jne LBB0_501 + 0x8d, 0x7e, 0xff, //0x000012a9 leal $-1(%rsi), %edi + 0x21, 0xf7, //0x000012ac andl %esi, %edi + 0x0f, 0x85, 0x49, 0x17, 0x00, 0x00, //0x000012ae jne LBB0_501 + 0x8d, 0x7a, 0xff, //0x000012b4 leal $-1(%rdx), %edi + 0x21, 0xd7, //0x000012b7 andl %edx, %edi + 0x0f, 0x85, 0x3e, 0x17, 0x00, 0x00, //0x000012b9 jne LBB0_501 + 0x45, 0x85, 0xc0, //0x000012bf testl %r8d, %r8d + 0x0f, 0x84, 0x20, 0x00, 0x00, 0x00, //0x000012c2 je LBB0_212 + 0x41, 0x0f, 0xbc, 0xf8, //0x000012c8 bsfl %r8d, %edi + 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x000012cc cmpq $-1, $48(%rsp) + 0x0f, 0x85, 0xf0, 0x18, 0x00, 0x00, //0x000012d2 jne LBB0_520 + 0x48, 0x8b, 0x5c, 0x24, 0x38, //0x000012d8 movq $56(%rsp), %rbx + 0x4c, 0x01, 0xfb, //0x000012dd addq %r15, %rbx + 0x48, 0x01, 0xdf, //0x000012e0 addq %rbx, %rdi + 0x48, 0x89, 0x7c, 0x24, 0x30, //0x000012e3 movq %rdi, $48(%rsp) + //0x000012e8 LBB0_212 + 0x85, 0xf6, //0x000012e8 testl %esi, %esi + 0x4d, 0x89, 0xe8, //0x000012ea movq %r13, %r8 + 0x0f, 0x84, 0x2d, 0x00, 0x00, 0x00, //0x000012ed je LBB0_215 + 0x0f, 0xbc, 0xf6, //0x000012f3 bsfl %esi, %esi + 0x49, 0x83, 0xfb, 0xff, //0x000012f6 cmpq $-1, %r11 + 0x0f, 0x85, 0xd3, 0x18, 0x00, 0x00, //0x000012fa jne LBB0_521 + 0x48, 0x8b, 0x7c, 0x24, 0x38, //0x00001300 movq $56(%rsp), %rdi + 0x4c, 0x01, 0xff, //0x00001305 addq %r15, %rdi + 0x48, 0x01, 0xfe, //0x00001308 addq %rdi, %rsi + 0x49, 0x89, 0xf5, //0x0000130b movq %rsi, %r13 + 0x85, 0xd2, //0x0000130e testl %edx, %edx + 0x0f, 0x85, 0x15, 0x00, 0x00, 0x00, //0x00001310 jne LBB0_216 + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00001316 jmp LBB0_218 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000131b .p2align 4, 0x90 + //0x00001320 LBB0_215 + 0x4d, 0x89, 0xdd, //0x00001320 movq %r11, %r13 + 0x85, 0xd2, //0x00001323 testl %edx, %edx + 0x0f, 0x84, 0x1f, 0x00, 0x00, 0x00, //0x00001325 je LBB0_218 + //0x0000132b LBB0_216 + 0x0f, 0xbc, 0xd2, //0x0000132b bsfl %edx, %edx + 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000132e cmpq $-1, $40(%rsp) + 0x0f, 0x85, 0xa4, 0x18, 0x00, 0x00, //0x00001334 jne LBB0_522 + 0x48, 0x8b, 0x74, 0x24, 0x38, //0x0000133a movq $56(%rsp), %rsi + 0x4c, 0x01, 0xfe, //0x0000133f addq %r15, %rsi + 0x48, 0x01, 0xf2, //0x00001342 addq %rsi, %rdx + 0x48, 0x89, 0x54, 0x24, 0x28, //0x00001345 movq %rdx, $40(%rsp) + //0x0000134a LBB0_218 + 0x83, 0xf9, 0x10, //0x0000134a cmpl $16, %ecx + 0x0f, 0x85, 0x85, 0x03, 0x00, 0x00, //0x0000134d jne LBB0_280 + 0x49, 0x83, 0xc1, 0xf0, //0x00001353 addq $-16, %r9 + 0x49, 0x83, 0xc7, 0x10, //0x00001357 addq $16, %r15 + 0x49, 0x83, 0xf9, 0x0f, //0x0000135b cmpq $15, %r9 + 0x0f, 0x87, 0x9b, 0xfe, 0xff, 0xff, //0x0000135f ja LBB0_204 + 0x4d, 0x01, 0xfa, //0x00001365 addq %r15, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001368 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x0000136d movq (%rsp), %r11 + //0x00001371 LBB0_221 + 0x4d, 0x85, 0xc9, //0x00001371 testq %r9, %r9 + 0xc5, 0xfe, 0x6f, 0x25, 0x24, 0xef, 0xff, 0xff, //0x00001374 vmovdqu $-4316(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x0f, 0x84, 0x6f, 0x03, 0x00, 0x00, //0x0000137c je LBB0_282 + 0x4b, 0x8d, 0x0c, 0x0a, //0x00001382 leaq (%r10,%r9), %rcx + 0x48, 0x89, 0x4c, 0x24, 0x38, //0x00001386 movq %rcx, $56(%rsp) + 0x4c, 0x89, 0xd6, //0x0000138b movq %r10, %rsi + 0x48, 0x2b, 0x74, 0x24, 0x10, //0x0000138e subq $16(%rsp), %rsi + 0x4c, 0x29, 0xf6, //0x00001393 subq %r14, %rsi + 0x48, 0x83, 0xc6, 0x01, //0x00001396 addq $1, %rsi + 0x31, 0xc9, //0x0000139a xorl %ecx, %ecx + 0xc5, 0xfe, 0x6f, 0x1d, 0x1c, 0xee, 0xff, 0xff, //0x0000139c vmovdqu $-4580(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xe9, 0x24, 0x00, 0x00, 0x00, //0x000013a4 jmp LBB0_227 + //0x000013a9 LBB0_223 + 0x83, 0xff, 0x65, //0x000013a9 cmpl $101, %edi + 0x0f, 0x85, 0x3c, 0x03, 0x00, 0x00, //0x000013ac jne LBB0_281 + //0x000013b2 LBB0_224 + 0x49, 0x83, 0xfd, 0xff, //0x000013b2 cmpq $-1, %r13 + 0x0f, 0x85, 0x6e, 0x16, 0x00, 0x00, //0x000013b6 jne LBB0_503 + 0x4c, 0x8d, 0x2c, 0x0e, //0x000013bc leaq (%rsi,%rcx), %r13 + //0x000013c0 .p2align 4, 0x90 + //0x000013c0 LBB0_226 + 0x48, 0x83, 0xc1, 0x01, //0x000013c0 addq $1, %rcx + 0x49, 0x39, 0xc9, //0x000013c4 cmpq %rcx, %r9 + 0x0f, 0x84, 0xe8, 0x12, 0x00, 0x00, //0x000013c7 je LBB0_469 + //0x000013cd LBB0_227 + 0x41, 0x0f, 0xbe, 0x3c, 0x0a, //0x000013cd movsbl (%r10,%rcx), %edi + 0x8d, 0x5f, 0xd0, //0x000013d2 leal $-48(%rdi), %ebx + 0x83, 0xfb, 0x0a, //0x000013d5 cmpl $10, %ebx + 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x000013d8 jb LBB0_226 + 0x8d, 0x5f, 0xd5, //0x000013de leal $-43(%rdi), %ebx + 0x83, 0xfb, 0x1a, //0x000013e1 cmpl $26, %ebx + 0x0f, 0x87, 0xbf, 0xff, 0xff, 0xff, //0x000013e4 ja LBB0_223 + 0x48, 0x8d, 0x15, 0x5b, 0x2d, 0x00, 0x00, //0x000013ea leaq $11611(%rip), %rdx /* LJTI0_3+0(%rip) */ + 0x48, 0x63, 0x3c, 0x9a, //0x000013f1 movslq (%rdx,%rbx,4), %rdi + 0x48, 0x01, 0xd7, //0x000013f5 addq %rdx, %rdi + 0xff, 0xe7, //0x000013f8 jmpq *%rdi + //0x000013fa LBB0_230 + 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x000013fa cmpq $-1, $40(%rsp) + 0x0f, 0x85, 0x24, 0x16, 0x00, 0x00, //0x00001400 jne LBB0_503 + 0x48, 0x8d, 0x14, 0x0e, //0x00001406 leaq (%rsi,%rcx), %rdx + 0x48, 0x89, 0x54, 0x24, 0x28, //0x0000140a movq %rdx, $40(%rsp) + 0xe9, 0xac, 0xff, 0xff, 0xff, //0x0000140f jmp LBB0_226 + //0x00001414 LBB0_232 + 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x00001414 cmpq $-1, $48(%rsp) + 0x0f, 0x85, 0x0a, 0x16, 0x00, 0x00, //0x0000141a jne LBB0_503 + 0x48, 0x8d, 0x14, 0x0e, //0x00001420 leaq (%rsi,%rcx), %rdx + 0x48, 0x89, 0x54, 0x24, 0x30, //0x00001424 movq %rdx, $48(%rsp) + 0xe9, 0x92, 0xff, 0xff, 0xff, //0x00001429 jmp LBB0_226 + //0x0000142e LBB0_234 + 0x4c, 0x01, 0xd1, //0x0000142e addq %r10, %rcx + 0x4c, 0x01, 0xc1, //0x00001431 addq %r8, %rcx + 0xc5, 0xf8, 0x77, //0x00001434 vzeroupper + 0x49, 0x89, 0xca, //0x00001437 movq %rcx, %r10 + 0xe9, 0xb2, 0x02, 0x00, 0x00, //0x0000143a jmp LBB0_282 + //0x0000143f LBB0_238 + 0x41, 0xf6, 0xc3, 0x40, //0x0000143f testb $64, %r11b + 0x0f, 0x85, 0x84, 0x04, 0x00, 0x00, //0x00001443 jne LBB0_306 + 0x4d, 0x8b, 0x0f, //0x00001449 movq (%r15), %r9 + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x0000144c movq $32(%rsp), %rax + 0x4c, 0x8b, 0x40, 0x08, //0x00001451 movq $8(%rax), %r8 + 0x41, 0xf6, 0xc3, 0x20, //0x00001455 testb $32, %r11b + 0x0f, 0x85, 0x88, 0x0d, 0x00, 0x00, //0x00001459 jne LBB0_396 + 0x4d, 0x89, 0xc3, //0x0000145f movq %r8, %r11 + 0x4d, 0x29, 0xcb, //0x00001462 subq %r9, %r11 + 0x0f, 0x84, 0x13, 0x2a, 0x00, 0x00, //0x00001465 je LBB0_732 + 0x49, 0x83, 0xfb, 0x40, //0x0000146b cmpq $64, %r11 + 0x0f, 0x82, 0x71, 0x19, 0x00, 0x00, //0x0000146f jb LBB0_541 + 0x4c, 0x89, 0xce, //0x00001475 movq %r9, %rsi + 0x48, 0xf7, 0xd6, //0x00001478 notq %rsi + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000147b movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x00001482 movq %r9, %rax + 0x45, 0x31, 0xd2, //0x00001485 xorl %r10d, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001488 .p2align 4, 0x90 + //0x00001490 LBB0_243 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x00001490 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x00001496 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x0000149d vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x000014a1 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd6, //0x000014a5 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x000014a9 vpmovmskb %ymm2, %ebx + 0xc5, 0xfd, 0x74, 0xc7, //0x000014ad vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf8, //0x000014b1 vpmovmskb %ymm0, %edi + 0xc5, 0xf5, 0x74, 0xc7, //0x000014b5 vpcmpeqb %ymm7, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x000014b9 vpmovmskb %ymm0, %ecx + 0x48, 0xc1, 0xe3, 0x20, //0x000014bd shlq $32, %rbx + 0x48, 0x09, 0xda, //0x000014c1 orq %rbx, %rdx + 0x48, 0xc1, 0xe1, 0x20, //0x000014c4 shlq $32, %rcx + 0x48, 0x09, 0xcf, //0x000014c8 orq %rcx, %rdi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000014cb jne LBB0_252 + 0x4d, 0x85, 0xd2, //0x000014d1 testq %r10, %r10 + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x000014d4 jne LBB0_254 + 0x45, 0x31, 0xd2, //0x000014da xorl %r10d, %r10d + 0x48, 0x85, 0xd2, //0x000014dd testq %rdx, %rdx + 0x0f, 0x85, 0x7e, 0x00, 0x00, 0x00, //0x000014e0 jne LBB0_255 + //0x000014e6 LBB0_246 + 0x49, 0x83, 0xc3, 0xc0, //0x000014e6 addq $-64, %r11 + 0x48, 0x83, 0xc6, 0xc0, //0x000014ea addq $-64, %rsi + 0x48, 0x83, 0xc0, 0x40, //0x000014ee addq $64, %rax + 0x49, 0x83, 0xfb, 0x3f, //0x000014f2 cmpq $63, %r11 + 0x0f, 0x87, 0x94, 0xff, 0xff, 0xff, //0x000014f6 ja LBB0_243 + 0xe9, 0xe8, 0x16, 0x00, 0x00, //0x000014fc jmp LBB0_247 + //0x00001501 LBB0_252 + 0x49, 0x83, 0xff, 0xff, //0x00001501 cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00001505 jne LBB0_254 + 0x4c, 0x0f, 0xbc, 0xff, //0x0000150b bsfq %rdi, %r15 + 0x49, 0x01, 0xc7, //0x0000150f addq %rax, %r15 + //0x00001512 LBB0_254 + 0x4c, 0x89, 0xd1, //0x00001512 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00001515 notq %rcx + 0x48, 0x21, 0xf9, //0x00001518 andq %rdi, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x0000151b leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xd5, //0x0000151f orq %r10, %r13 + 0x4c, 0x89, 0xeb, //0x00001522 movq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00001525 notq %rbx + 0x48, 0x21, 0xfb, //0x00001528 andq %rdi, %rbx + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000152b movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfb, //0x00001535 andq %rdi, %rbx + 0x45, 0x31, 0xd2, //0x00001538 xorl %r10d, %r10d + 0x48, 0x01, 0xcb, //0x0000153b addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc2, //0x0000153e setb %r10b + 0x48, 0x01, 0xdb, //0x00001542 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001545 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x0000154f xorq %rcx, %rbx + 0x4c, 0x21, 0xeb, //0x00001552 andq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00001555 notq %rbx + 0x48, 0x21, 0xda, //0x00001558 andq %rbx, %rdx + 0x48, 0x85, 0xd2, //0x0000155b testq %rdx, %rdx + 0x0f, 0x84, 0x82, 0xff, 0xff, 0xff, //0x0000155e je LBB0_246 + //0x00001564 LBB0_255 + 0xc5, 0x7d, 0x7f, 0xea, //0x00001564 vmovdqa %ymm13, %ymm2 + 0x48, 0x0f, 0xbc, 0xc2, //0x00001568 bsfq %rdx, %rax + 0x48, 0x29, 0xf0, //0x0000156c subq %rsi, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x0000156f movq (%rsp), %r11 + 0xe9, 0x64, 0x11, 0x00, 0x00, //0x00001573 jmp LBB0_473 + //0x00001578 LBB0_256 + 0x4c, 0x89, 0xd9, //0x00001578 movq %r11, %rcx + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x0000157b movq $32(%rsp), %rax + 0x4c, 0x8b, 0x58, 0x08, //0x00001580 movq $8(%rax), %r11 + 0x49, 0x8b, 0x07, //0x00001584 movq (%r15), %rax + 0xf6, 0xc1, 0x40, //0x00001587 testb $64, %cl + 0x0f, 0x85, 0x1d, 0x04, 0x00, 0x00, //0x0000158a jne LBB0_317 + 0x49, 0x29, 0xc3, //0x00001590 subq %rax, %r11 + 0x0f, 0x84, 0xc6, 0x28, 0x00, 0x00, //0x00001593 je LBB0_723 + 0x4d, 0x8d, 0x2c, 0x06, //0x00001599 leaq (%r14,%rax), %r13 + 0x41, 0x80, 0x7d, 0x00, 0x30, //0x0000159d cmpb $48, (%r13) + 0x0f, 0x85, 0xa6, 0x0d, 0x00, 0x00, //0x000015a2 jne LBB0_417 + 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000015a8 movl $1, %r8d + 0x49, 0x83, 0xfb, 0x01, //0x000015ae cmpq $1, %r11 + 0x0f, 0x85, 0x6c, 0x0d, 0x00, 0x00, //0x000015b2 jne LBB0_415 + //0x000015b8 LBB0_260 + 0x48, 0x89, 0xc1, //0x000015b8 movq %rax, %rcx + 0xe9, 0x8e, 0x15, 0x00, 0x00, //0x000015bb jmp LBB0_514 + //0x000015c0 LBB0_261 + 0x41, 0xf6, 0xc3, 0x40, //0x000015c0 testb $64, %r11b + 0x0f, 0x85, 0x7a, 0x05, 0x00, 0x00, //0x000015c4 jne LBB0_334 + 0x48, 0x8b, 0x54, 0x24, 0x18, //0x000015ca movq $24(%rsp), %rdx + 0x48, 0x8b, 0x0a, //0x000015cf movq (%rdx), %rcx + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000015d2 cmpq $4095, %rcx + 0x0f, 0x8f, 0xca, 0x26, 0x00, 0x00, //0x000015d9 jg LBB0_724 + 0x48, 0x8d, 0x41, 0x01, //0x000015df leaq $1(%rcx), %rax + 0x48, 0x89, 0x02, //0x000015e3 movq %rax, (%rdx) + 0x48, 0xc7, 0x44, 0xca, 0x08, 0x05, 0x00, 0x00, 0x00, //0x000015e6 movq $5, $8(%rdx,%rcx,8) + 0xe9, 0xac, 0xed, 0xff, 0xff, //0x000015ef jmp LBB0_3 + //0x000015f4 LBB0_264 + 0x49, 0x8b, 0x0f, //0x000015f4 movq (%r15), %rcx + 0x48, 0x8b, 0x54, 0x24, 0x20, //0x000015f7 movq $32(%rsp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x000015fc movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfc, //0x00001600 leaq $-4(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001604 cmpq %rsi, %rcx + 0x0f, 0x87, 0x1a, 0x27, 0x00, 0x00, //0x00001607 ja LBB0_711 + 0x41, 0x8b, 0x14, 0x0e, //0x0000160d movl (%r14,%rcx), %edx + 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x00001611 cmpl $1702063201, %edx + 0x0f, 0x85, 0x28, 0x27, 0x00, 0x00, //0x00001617 jne LBB0_712 + 0x48, 0x8d, 0x41, 0x04, //0x0000161d leaq $4(%rcx), %rax + 0x49, 0x89, 0x07, //0x00001621 movq %rax, (%r15) + 0x48, 0x85, 0xc9, //0x00001624 testq %rcx, %rcx + 0x0f, 0x8f, 0x73, 0xed, 0xff, 0xff, //0x00001627 jg LBB0_3 + 0xe9, 0x06, 0x28, 0x00, 0x00, //0x0000162d jmp LBB0_267 + //0x00001632 LBB0_268 + 0x49, 0x8b, 0x0f, //0x00001632 movq (%r15), %rcx + 0x48, 0x8b, 0x54, 0x24, 0x20, //0x00001635 movq $32(%rsp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x0000163a movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x0000163e leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001642 cmpq %rsi, %rcx + 0x0f, 0x87, 0xdc, 0x26, 0x00, 0x00, //0x00001645 ja LBB0_711 + 0x48, 0x8d, 0x41, 0xff, //0x0000164b leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0e, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x0000164f cmpl $1819047278, $-1(%r14,%rcx) + 0x0f, 0x84, 0x31, 0x00, 0x00, 0x00, //0x00001658 je LBB0_276 + 0xe9, 0x37, 0x27, 0x00, 0x00, //0x0000165e jmp LBB0_270 + //0x00001663 LBB0_274 + 0x49, 0x8b, 0x0f, //0x00001663 movq (%r15), %rcx + 0x48, 0x8b, 0x54, 0x24, 0x20, //0x00001666 movq $32(%rsp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x0000166b movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x0000166f leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001673 cmpq %rsi, %rcx + 0x0f, 0x87, 0xab, 0x26, 0x00, 0x00, //0x00001676 ja LBB0_711 + 0x48, 0x8d, 0x41, 0xff, //0x0000167c leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0e, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00001680 cmpl $1702195828, $-1(%r14,%rcx) + 0x0f, 0x85, 0x52, 0x27, 0x00, 0x00, //0x00001689 jne LBB0_717 + //0x0000168f LBB0_276 + 0x48, 0x8d, 0x51, 0x03, //0x0000168f leaq $3(%rcx), %rdx + 0x49, 0x89, 0x17, //0x00001693 movq %rdx, (%r15) + 0x48, 0x85, 0xc9, //0x00001696 testq %rcx, %rcx + 0x0f, 0x8f, 0x01, 0xed, 0xff, 0xff, //0x00001699 jg LBB0_3 + 0xe9, 0x71, 0x26, 0x00, 0x00, //0x0000169f jmp LBB0_728 + //0x000016a4 LBB0_277 + 0x41, 0xf6, 0xc3, 0x40, //0x000016a4 testb $64, %r11b + 0x0f, 0x85, 0x9f, 0x07, 0x00, 0x00, //0x000016a8 jne LBB0_360 + 0x48, 0x8b, 0x54, 0x24, 0x18, //0x000016ae movq $24(%rsp), %rdx + 0x48, 0x8b, 0x0a, //0x000016b3 movq (%rdx), %rcx + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000016b6 cmpq $4095, %rcx + 0x0f, 0x8f, 0xe6, 0x25, 0x00, 0x00, //0x000016bd jg LBB0_724 + 0x48, 0x8d, 0x41, 0x01, //0x000016c3 leaq $1(%rcx), %rax + 0x48, 0x89, 0x02, //0x000016c7 movq %rax, (%rdx) + 0x48, 0xc7, 0x44, 0xca, 0x08, 0x06, 0x00, 0x00, 0x00, //0x000016ca movq $6, $8(%rdx,%rcx,8) + 0xe9, 0xc8, 0xec, 0xff, 0xff, //0x000016d3 jmp LBB0_3 + //0x000016d8 LBB0_280 + 0x89, 0xc9, //0x000016d8 movl %ecx, %ecx + 0x49, 0x01, 0xca, //0x000016da addq %rcx, %r10 + 0x4d, 0x01, 0xfa, //0x000016dd addq %r15, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x000016e0 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x000016e5 movq (%rsp), %r11 + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x000016e9 jmp LBB0_282 + //0x000016ee LBB0_281 + 0x49, 0x01, 0xca, //0x000016ee addq %rcx, %r10 + //0x000016f1 LBB0_282 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000016f1 movq $-1, %rcx + 0x48, 0x8b, 0x74, 0x24, 0x30, //0x000016f8 movq $48(%rsp), %rsi + 0x48, 0x85, 0xf6, //0x000016fd testq %rsi, %rsi + 0x48, 0x8b, 0x54, 0x24, 0x28, //0x00001700 movq $40(%rsp), %rdx + 0x0f, 0x84, 0xf6, 0x25, 0x00, 0x00, //0x00001705 je LBB0_708 + 0x48, 0x85, 0xd2, //0x0000170b testq %rdx, %rdx + 0xc5, 0xfe, 0x6f, 0x1d, 0xaa, 0xea, 0xff, 0xff, //0x0000170e vmovdqu $-5462(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0x0f, 0x84, 0xe5, 0x25, 0x00, 0x00, //0x00001716 je LBB0_708 + 0x4d, 0x85, 0xed, //0x0000171c testq %r13, %r13 + 0x0f, 0x84, 0xdc, 0x25, 0x00, 0x00, //0x0000171f je LBB0_708 + 0x4d, 0x29, 0xc2, //0x00001725 subq %r8, %r10 + 0x49, 0x8d, 0x4a, 0xff, //0x00001728 leaq $-1(%r10), %rcx + 0x48, 0x39, 0xce, //0x0000172c cmpq %rcx, %rsi + 0x0f, 0x84, 0x80, 0x00, 0x00, 0x00, //0x0000172f je LBB0_291 + 0x48, 0x39, 0xca, //0x00001735 cmpq %rcx, %rdx + 0x0f, 0x84, 0x77, 0x00, 0x00, 0x00, //0x00001738 je LBB0_291 + 0x49, 0x39, 0xcd, //0x0000173e cmpq %rcx, %r13 + 0x0f, 0x84, 0x6e, 0x00, 0x00, 0x00, //0x00001741 je LBB0_291 + 0x48, 0x85, 0xd2, //0x00001747 testq %rdx, %rdx + 0xc5, 0xfe, 0x6f, 0x2d, 0x6e, 0xe9, 0xff, 0xff, //0x0000174a vmovdqu $-5778(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x86, 0xe9, 0xff, 0xff, //0x00001752 vmovdqu $-5754(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x9e, 0xe9, 0xff, 0xff, //0x0000175a vmovdqu $-5730(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0xb6, 0xe9, 0xff, 0xff, //0x00001762 vmovdqu $-5706(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000176a vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0x89, 0xea, 0xff, 0xff, //0x0000176f vmovdqu $-5495(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x05, 0xa1, 0xea, 0xff, 0xff, //0x00001777 vmovdqu $-5471(%rip), %ymm0 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0xb9, 0xea, 0xff, 0xff, //0x0000177f vmovdqu $-5447(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x51, 0xea, 0xff, 0xff, //0x00001787 vmovdqu $-5551(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x09, 0xeb, 0xff, 0xff, //0x0000178f vmovdqu $-5367(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x0f, 0x8e, 0xa5, 0x00, 0x00, 0x00, //0x00001797 jle LBB0_297 + 0x48, 0x8d, 0x4a, 0xff, //0x0000179d leaq $-1(%rdx), %rcx + 0x49, 0x39, 0xcd, //0x000017a1 cmpq %rcx, %r13 + 0x0f, 0x84, 0x98, 0x00, 0x00, 0x00, //0x000017a4 je LBB0_297 + 0x48, 0xf7, 0xd2, //0x000017aa notq %rdx + 0x49, 0x89, 0xd2, //0x000017ad movq %rdx, %r10 + 0xe9, 0x50, 0x00, 0x00, 0x00, //0x000017b0 jmp LBB0_292 + //0x000017b5 LBB0_291 + 0x49, 0xf7, 0xda, //0x000017b5 negq %r10 + 0xc5, 0xfe, 0x6f, 0x2d, 0x00, 0xe9, 0xff, 0xff, //0x000017b8 vmovdqu $-5888(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x18, 0xe9, 0xff, 0xff, //0x000017c0 vmovdqu $-5864(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x30, 0xe9, 0xff, 0xff, //0x000017c8 vmovdqu $-5840(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x48, 0xe9, 0xff, 0xff, //0x000017d0 vmovdqu $-5816(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000017d8 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0x1b, 0xea, 0xff, 0xff, //0x000017dd vmovdqu $-5605(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x05, 0x33, 0xea, 0xff, 0xff, //0x000017e5 vmovdqu $-5581(%rip), %ymm0 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0x4b, 0xea, 0xff, 0xff, //0x000017ed vmovdqu $-5557(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0xe3, 0xe9, 0xff, 0xff, //0x000017f5 vmovdqu $-5661(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x9b, 0xea, 0xff, 0xff, //0x000017fd vmovdqu $-5477(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + //0x00001805 LBB0_292 + 0xc5, 0x7e, 0x6f, 0x1d, 0x33, 0xe9, 0xff, 0xff, //0x00001805 vmovdqu $-5837(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x4b, 0xe9, 0xff, 0xff, //0x0000180d vmovdqu $-5813(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + //0x00001815 LBB0_293 + 0x4c, 0x8b, 0x6c, 0x24, 0x10, //0x00001815 movq $16(%rsp), %r13 + //0x0000181a LBB0_294 + 0x4d, 0x85, 0xd2, //0x0000181a testq %r10, %r10 + 0x0f, 0x88, 0xdb, 0x24, 0x00, 0x00, //0x0000181d js LBB0_707 + 0x49, 0x8b, 0x0f, //0x00001823 movq (%r15), %rcx + 0x48, 0x83, 0xc1, 0xff, //0x00001826 addq $-1, %rcx + 0xc5, 0x7d, 0x6f, 0xe8, //0x0000182a vmovdqa %ymm0, %ymm13 + //0x0000182e LBB0_296 + 0x4c, 0x01, 0xd1, //0x0000182e addq %r10, %rcx + 0x49, 0x89, 0x0f, //0x00001831 movq %rcx, (%r15) + 0x4d, 0x85, 0xed, //0x00001834 testq %r13, %r13 + 0x0f, 0x8f, 0x63, 0xeb, 0xff, 0xff, //0x00001837 jg LBB0_3 + 0xe9, 0xd3, 0x24, 0x00, 0x00, //0x0000183d jmp LBB0_728 + //0x00001842 LBB0_297 + 0x48, 0x89, 0xf1, //0x00001842 movq %rsi, %rcx + 0x4c, 0x09, 0xe9, //0x00001845 orq %r13, %rcx + 0x0f, 0x99, 0xc1, //0x00001848 setns %cl + 0xc5, 0x7e, 0x6f, 0x1d, 0xed, 0xe8, 0xff, 0xff, //0x0000184b vmovdqu $-5907(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x05, 0xe9, 0xff, 0xff, //0x00001853 vmovdqu $-5883(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + 0x0f, 0x88, 0x6d, 0x09, 0x00, 0x00, //0x0000185b js LBB0_395 + 0x4c, 0x39, 0xee, //0x00001861 cmpq %r13, %rsi + 0x0f, 0x8c, 0x64, 0x09, 0x00, 0x00, //0x00001864 jl LBB0_395 + 0x48, 0xf7, 0xd6, //0x0000186a notq %rsi + 0x49, 0x89, 0xf2, //0x0000186d movq %rsi, %r10 + 0xe9, 0xa0, 0xff, 0xff, 0xff, //0x00001870 jmp LBB0_293 + //0x00001875 LBB0_300 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001875 movl $64, %edx + 0x4c, 0x8b, 0x1c, 0x24, //0x0000187a movq (%rsp), %r11 + 0x48, 0x39, 0xca, //0x0000187e cmpq %rcx, %rdx + 0x0f, 0x82, 0xff, 0x25, 0x00, 0x00, //0x00001881 jb LBB0_162 + //0x00001887 LBB0_301 + 0x48, 0x01, 0xc8, //0x00001887 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000188a addq $1, %rax + //0x0000188e LBB0_302 + 0x48, 0x85, 0xc0, //0x0000188e testq %rax, %rax + 0x0f, 0x88, 0x2a, 0x24, 0x00, 0x00, //0x00001891 js LBB0_702 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001897 movq $8(%rsp), %r15 + 0x49, 0x89, 0x07, //0x0000189c movq %rax, (%r15) + 0x4d, 0x85, 0xc9, //0x0000189f testq %r9, %r9 + 0x0f, 0x8e, 0x32, 0x24, 0x00, 0x00, //0x000018a2 jle LBB0_475 + //0x000018a8 LBB0_304 + 0x49, 0x8b, 0x0a, //0x000018a8 movq (%r10), %rcx + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000018ab cmpq $4095, %rcx + 0x0f, 0x8f, 0xf1, 0x23, 0x00, 0x00, //0x000018b2 jg LBB0_724 + 0x48, 0x8d, 0x41, 0x01, //0x000018b8 leaq $1(%rcx), %rax + 0x49, 0x89, 0x02, //0x000018bc movq %rax, (%r10) + 0x49, 0xc7, 0x44, 0xca, 0x08, 0x04, 0x00, 0x00, 0x00, //0x000018bf movq $4, $8(%r10,%rcx,8) + 0xe9, 0xd3, 0xea, 0xff, 0xff, //0x000018c8 jmp LBB0_3 + //0x000018cd LBB0_306 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x000018cd movq $32(%rsp), %rcx + 0x4c, 0x8b, 0x51, 0x08, //0x000018d2 movq $8(%rcx), %r10 + 0x4d, 0x8b, 0x07, //0x000018d6 movq (%r15), %r8 + 0x4f, 0x8d, 0x0c, 0x06, //0x000018d9 leaq (%r14,%r8), %r9 + 0x4d, 0x29, 0xc2, //0x000018dd subq %r8, %r10 + 0x49, 0x83, 0xfa, 0x20, //0x000018e0 cmpq $32, %r10 + 0x0f, 0x8c, 0xac, 0x00, 0x00, 0x00, //0x000018e4 jl LBB0_316 + 0xba, 0x20, 0x00, 0x00, 0x00, //0x000018ea movl $32, %edx + 0x31, 0xf6, //0x000018ef xorl %esi, %esi + 0x45, 0x31, 0xff, //0x000018f1 xorl %r15d, %r15d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000018f4 .p2align 4, 0x90 + //0x00001900 LBB0_308 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00001900 vmovdqu (%r9,%rsi), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00001906 vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd9, //0x0000190a vpmovmskb %ymm1, %r11d + 0xc5, 0xfd, 0x74, 0xc7, //0x0000190e vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd8, //0x00001912 vpmovmskb %ymm0, %ebx + 0x85, 0xdb, //0x00001916 testl %ebx, %ebx + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00001918 jne LBB0_311 + 0x4d, 0x85, 0xff, //0x0000191e testq %r15, %r15 + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00001921 jne LBB0_311 + 0x45, 0x31, 0xff, //0x00001927 xorl %r15d, %r15d + 0xe9, 0x35, 0x00, 0x00, 0x00, //0x0000192a jmp LBB0_312 + 0x90, //0x0000192f .p2align 4, 0x90 + //0x00001930 LBB0_311 + 0x44, 0x89, 0xf9, //0x00001930 movl %r15d, %ecx + 0xf7, 0xd1, //0x00001933 notl %ecx + 0x21, 0xd9, //0x00001935 andl %ebx, %ecx + 0x44, 0x8d, 0x2c, 0x09, //0x00001937 leal (%rcx,%rcx), %r13d + 0x45, 0x09, 0xfd, //0x0000193b orl %r15d, %r13d + 0x44, 0x89, 0xef, //0x0000193e movl %r13d, %edi + 0xf7, 0xd7, //0x00001941 notl %edi + 0x21, 0xdf, //0x00001943 andl %ebx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001945 andl $-1431655766, %edi + 0x45, 0x31, 0xff, //0x0000194b xorl %r15d, %r15d + 0x01, 0xcf, //0x0000194e addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc7, //0x00001950 setb %r15b + 0x01, 0xff, //0x00001954 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00001956 xorl $1431655765, %edi + 0x44, 0x21, 0xef, //0x0000195c andl %r13d, %edi + 0xf7, 0xd7, //0x0000195f notl %edi + 0x41, 0x21, 0xfb, //0x00001961 andl %edi, %r11d + //0x00001964 LBB0_312 + 0x4d, 0x85, 0xdb, //0x00001964 testq %r11, %r11 + 0x0f, 0x85, 0x2d, 0xf1, 0xff, 0xff, //0x00001967 jne LBB0_104 + 0x48, 0x83, 0xc6, 0x20, //0x0000196d addq $32, %rsi + 0x49, 0x8d, 0x0c, 0x12, //0x00001971 leaq (%r10,%rdx), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00001975 addq $-32, %rcx + 0x48, 0x83, 0xc2, 0xe0, //0x00001979 addq $-32, %rdx + 0x48, 0x83, 0xf9, 0x3f, //0x0000197d cmpq $63, %rcx + 0x0f, 0x8f, 0x79, 0xff, 0xff, 0xff, //0x00001981 jg LBB0_308 + 0x4d, 0x85, 0xff, //0x00001987 testq %r15, %r15 + 0x0f, 0x85, 0xad, 0x1e, 0x00, 0x00, //0x0000198a jne LBB0_645 + 0x49, 0x01, 0xf1, //0x00001990 addq %rsi, %r9 + 0x49, 0x29, 0xf2, //0x00001993 subq %rsi, %r10 + //0x00001996 LBB0_316 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001996 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x0000199b movq (%rsp), %r11 + 0x4d, 0x85, 0xd2, //0x0000199f testq %r10, %r10 + 0x0f, 0x8f, 0x07, 0x1f, 0x00, 0x00, //0x000019a2 jg LBB0_649 + 0xe9, 0x68, 0x23, 0x00, 0x00, //0x000019a8 jmp LBB0_728 + //0x000019ad LBB0_317 + 0x4c, 0x89, 0xde, //0x000019ad movq %r11, %rsi + 0x48, 0x29, 0xc6, //0x000019b0 subq %rax, %rsi + 0x48, 0x83, 0xfe, 0x20, //0x000019b3 cmpq $32, %rsi + 0x0f, 0x82, 0xe8, 0x13, 0x00, 0x00, //0x000019b7 jb LBB0_539 + 0x48, 0x89, 0xc7, //0x000019bd movq %rax, %rdi + 0x48, 0xf7, 0xdf, //0x000019c0 negq %rdi + 0x4c, 0x8d, 0x40, 0x01, //0x000019c3 leaq $1(%rax), %r8 + 0x48, 0x8d, 0x50, 0xff, //0x000019c7 leaq $-1(%rax), %rdx + 0x49, 0x8d, 0x34, 0x06, //0x000019cb leaq (%r14,%rax), %rsi + 0x48, 0x83, 0xc6, 0xff, //0x000019cf addq $-1, %rsi + 0x48, 0x89, 0xc3, //0x000019d3 movq %rax, %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000019d6 .p2align 4, 0x90 + //0x000019e0 LBB0_319 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x1e, //0x000019e0 vmovdqu (%r14,%rbx), %ymm0 + 0xc5, 0xfd, 0x74, 0xcb, //0x000019e6 vpcmpeqb %ymm3, %ymm0, %ymm1 + 0xc5, 0x8d, 0xdb, 0xc0, //0x000019ea vpand %ymm0, %ymm14, %ymm0 + 0xc5, 0xfd, 0x74, 0x05, 0xaa, 0xe7, 0xff, 0xff, //0x000019ee vpcmpeqb $-6230(%rip), %ymm0, %ymm0 /* LCPI0_8+0(%rip) */ + 0xc5, 0xfd, 0xeb, 0xc1, //0x000019f6 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x000019fa vpmovmskb %ymm0, %ecx + 0x85, 0xc9, //0x000019fe testl %ecx, %ecx + 0x0f, 0x85, 0x57, 0x07, 0x00, 0x00, //0x00001a00 jne LBB0_388 + 0x48, 0x83, 0xc3, 0x20, //0x00001a06 addq $32, %rbx + 0x49, 0x8d, 0x0c, 0x3b, //0x00001a0a leaq (%r11,%rdi), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00001a0e addq $-32, %rcx + 0x48, 0x83, 0xc7, 0xe0, //0x00001a12 addq $-32, %rdi + 0x49, 0x83, 0xc0, 0x20, //0x00001a16 addq $32, %r8 + 0x48, 0x83, 0xc2, 0x20, //0x00001a1a addq $32, %rdx + 0x48, 0x83, 0xc6, 0x20, //0x00001a1e addq $32, %rsi + 0x48, 0x83, 0xf9, 0x1f, //0x00001a22 cmpq $31, %rcx + 0x0f, 0x87, 0xb4, 0xff, 0xff, 0xff, //0x00001a26 ja LBB0_319 + 0x4d, 0x89, 0xf0, //0x00001a2c movq %r14, %r8 + 0x49, 0x29, 0xf8, //0x00001a2f subq %rdi, %r8 + 0x49, 0x01, 0xfb, //0x00001a32 addq %rdi, %r11 + 0x4c, 0x89, 0xde, //0x00001a35 movq %r11, %rsi + 0x48, 0x83, 0xfe, 0x10, //0x00001a38 cmpq $16, %rsi + 0x4c, 0x8b, 0x1c, 0x24, //0x00001a3c movq (%rsp), %r11 + 0x0f, 0x82, 0x69, 0x00, 0x00, 0x00, //0x00001a40 jb LBB0_325 + //0x00001a46 LBB0_322 + 0x4d, 0x89, 0xf1, //0x00001a46 movq %r14, %r9 + 0x4d, 0x29, 0xc1, //0x00001a49 subq %r8, %r9 + 0x4c, 0x89, 0xc7, //0x00001a4c movq %r8, %rdi + 0x4c, 0x29, 0xf7, //0x00001a4f subq %r14, %rdi + 0x48, 0x83, 0xc7, 0x01, //0x00001a52 addq $1, %rdi + 0x49, 0x8d, 0x58, 0xff, //0x00001a56 leaq $-1(%r8), %rbx + 0x48, 0x89, 0xda, //0x00001a5a movq %rbx, %rdx + 0x4c, 0x29, 0xf2, //0x00001a5d subq %r14, %rdx + //0x00001a60 LBB0_323 + 0xc4, 0xc1, 0x7a, 0x6f, 0x00, //0x00001a60 vmovdqu (%r8), %xmm0 + 0xc5, 0xf9, 0x74, 0x0d, 0xa3, 0xe5, 0xff, 0xff, //0x00001a65 vpcmpeqb $-6749(%rip), %xmm0, %xmm1 /* LCPI0_11+0(%rip) */ + 0xc5, 0xf9, 0xdb, 0x05, 0xab, 0xe5, 0xff, 0xff, //0x00001a6d vpand $-6741(%rip), %xmm0, %xmm0 /* LCPI0_12+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0xb3, 0xe5, 0xff, 0xff, //0x00001a75 vpcmpeqb $-6733(%rip), %xmm0, %xmm0 /* LCPI0_13+0(%rip) */ + 0xc5, 0xf9, 0xeb, 0xc1, //0x00001a7d vpor %xmm1, %xmm0, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x00001a81 vpmovmskb %xmm0, %ecx + 0x85, 0xc9, //0x00001a85 testl %ecx, %ecx + 0x0f, 0x85, 0xd9, 0x10, 0x00, 0x00, //0x00001a87 jne LBB0_515 + 0x49, 0x83, 0xc0, 0x10, //0x00001a8d addq $16, %r8 + 0x48, 0x83, 0xc6, 0xf0, //0x00001a91 addq $-16, %rsi + 0x49, 0x83, 0xc1, 0xf0, //0x00001a95 addq $-16, %r9 + 0x48, 0x83, 0xc7, 0x10, //0x00001a99 addq $16, %rdi + 0x48, 0x83, 0xc2, 0x10, //0x00001a9d addq $16, %rdx + 0x48, 0x83, 0xc3, 0x10, //0x00001aa1 addq $16, %rbx + 0x48, 0x83, 0xfe, 0x0f, //0x00001aa5 cmpq $15, %rsi + 0x0f, 0x87, 0xb1, 0xff, 0xff, 0xff, //0x00001aa9 ja LBB0_323 + //0x00001aaf LBB0_325 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00001aaf vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00001ab3 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00001ab7 vmovdqa %ymm13, %ymm11 + 0x48, 0x85, 0xf6, //0x00001abc testq %rsi, %rsi + 0x0f, 0x84, 0x49, 0x00, 0x00, 0x00, //0x00001abf je LBB0_333 + 0x49, 0x8d, 0x0c, 0x30, //0x00001ac5 leaq (%r8,%rsi), %rcx + //0x00001ac9 LBB0_327 + 0x41, 0x0f, 0xb6, 0x10, //0x00001ac9 movzbl (%r8), %edx + 0x48, 0x83, 0xfa, 0x2c, //0x00001acd cmpq $44, %rdx + 0x0f, 0x87, 0x14, 0x00, 0x00, 0x00, //0x00001ad1 ja LBB0_329 + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00001ad7 movabsq $17596481021440, %rdi + 0x48, 0x0f, 0xa3, 0xd7, //0x00001ae1 btq %rdx, %rdi + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x00001ae5 jb LBB0_333 + //0x00001aeb LBB0_329 + 0x80, 0xfa, 0x5d, //0x00001aeb cmpb $93, %dl + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00001aee je LBB0_333 + 0x80, 0xfa, 0x7d, //0x00001af4 cmpb $125, %dl + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00001af7 je LBB0_333 + 0x49, 0x83, 0xc0, 0x01, //0x00001afd addq $1, %r8 + 0x48, 0x83, 0xc6, 0xff, //0x00001b01 addq $-1, %rsi + 0x0f, 0x85, 0xbe, 0xff, 0xff, 0xff, //0x00001b05 jne LBB0_327 + 0x49, 0x89, 0xc8, //0x00001b0b movq %rcx, %r8 + //0x00001b0e LBB0_333 + 0x4d, 0x29, 0xf0, //0x00001b0e subq %r14, %r8 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001b11 movq $8(%rsp), %r15 + 0x4d, 0x89, 0x07, //0x00001b16 movq %r8, (%r15) + 0x4c, 0x8b, 0x1c, 0x24, //0x00001b19 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001b1d vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001b22 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x71, 0xe7, 0xff, 0xff, //0x00001b27 vmovdqu $-6287(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x89, 0xe6, 0xff, 0xff, //0x00001b2f vmovdqu $-6519(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00001b37 vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x00001b3b vmovdqa %ymm1, %ymm12 + 0xe9, 0x7c, 0x06, 0x00, 0x00, //0x00001b3f jmp LBB0_393 + //0x00001b44 LBB0_334 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00001b44 movq $32(%rsp), %rcx + 0x4c, 0x8b, 0x49, 0x08, //0x00001b49 movq $8(%rcx), %r9 + 0x4d, 0x8b, 0x07, //0x00001b4d movq (%r15), %r8 + 0x4d, 0x29, 0xc1, //0x00001b50 subq %r8, %r9 + 0x4d, 0x01, 0xc6, //0x00001b53 addq %r8, %r14 + 0x45, 0x31, 0xdb, //0x00001b56 xorl %r11d, %r11d + 0x45, 0x31, 0xd2, //0x00001b59 xorl %r10d, %r10d + 0x45, 0x31, 0xff, //0x00001b5c xorl %r15d, %r15d + 0x31, 0xdb, //0x00001b5f xorl %ebx, %ebx + 0x49, 0x83, 0xf9, 0x40, //0x00001b61 cmpq $64, %r9 + 0x0f, 0x8d, 0x57, 0x01, 0x00, 0x00, //0x00001b65 jge LBB0_335 + //0x00001b6b LBB0_344 + 0x4d, 0x85, 0xc9, //0x00001b6b testq %r9, %r9 + 0x0f, 0x8e, 0x24, 0x23, 0x00, 0x00, //0x00001b6e jle LBB0_733 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00001b74 vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00001b78 vmovdqa %ymm13, %ymm11 + 0xc5, 0xf9, 0xef, 0xc0, //0x00001b7d vpxor %xmm0, %xmm0, %xmm0 + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x60, //0x00001b81 vmovdqu %ymm0, $96(%rsp) + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001b87 vmovdqu %ymm0, $64(%rsp) + 0x44, 0x89, 0xf1, //0x00001b8d movl %r14d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00001b90 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00001b96 cmpl $4033, %ecx + 0x0f, 0x82, 0x27, 0x00, 0x00, 0x00, //0x00001b9c jb LBB0_348 + 0x49, 0x83, 0xf9, 0x20, //0x00001ba2 cmpq $32, %r9 + 0x0f, 0x82, 0x40, 0x00, 0x00, 0x00, //0x00001ba6 jb LBB0_349 + 0xc4, 0xc1, 0x7e, 0x6f, 0x06, //0x00001bac vmovdqu (%r14), %ymm0 + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001bb1 vmovdqu %ymm0, $64(%rsp) + 0x49, 0x83, 0xc6, 0x20, //0x00001bb7 addq $32, %r14 + 0x49, 0x8d, 0x79, 0xe0, //0x00001bbb leaq $-32(%r9), %rdi + 0x48, 0x8d, 0x74, 0x24, 0x60, //0x00001bbf leaq $96(%rsp), %rsi + 0xe9, 0x2b, 0x00, 0x00, 0x00, //0x00001bc4 jmp LBB0_350 + //0x00001bc9 LBB0_348 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001bc9 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001bce vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xc5, 0xe6, 0xff, 0xff, //0x00001bd3 vmovdqu $-6459(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xdd, 0xe5, 0xff, 0xff, //0x00001bdb vmovdqu $-6691(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x00001be3 vmovdqa %ymm1, %ymm11 + 0xe9, 0xd6, 0x00, 0x00, 0x00, //0x00001be7 jmp LBB0_335 + //0x00001bec LBB0_349 + 0x48, 0x8d, 0x74, 0x24, 0x40, //0x00001bec leaq $64(%rsp), %rsi + 0x4c, 0x89, 0xcf, //0x00001bf1 movq %r9, %rdi + //0x00001bf4 LBB0_350 + 0x48, 0x83, 0xff, 0x10, //0x00001bf4 cmpq $16, %rdi + 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00001bf8 jb LBB0_351 + 0xc4, 0xc1, 0x7a, 0x6f, 0x06, //0x00001bfe vmovdqu (%r14), %xmm0 + 0xc5, 0xfa, 0x7f, 0x06, //0x00001c03 vmovdqu %xmm0, (%rsi) + 0x49, 0x83, 0xc6, 0x10, //0x00001c07 addq $16, %r14 + 0x48, 0x83, 0xc6, 0x10, //0x00001c0b addq $16, %rsi + 0x48, 0x83, 0xc7, 0xf0, //0x00001c0f addq $-16, %rdi + 0x48, 0x83, 0xff, 0x08, //0x00001c13 cmpq $8, %rdi + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00001c17 jae LBB0_358 + //0x00001c1d LBB0_352 + 0x48, 0x83, 0xff, 0x04, //0x00001c1d cmpq $4, %rdi + 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x00001c21 jl LBB0_353 + //0x00001c27 LBB0_359 + 0x41, 0x8b, 0x0e, //0x00001c27 movl (%r14), %ecx + 0x89, 0x0e, //0x00001c2a movl %ecx, (%rsi) + 0x49, 0x83, 0xc6, 0x04, //0x00001c2c addq $4, %r14 + 0x48, 0x83, 0xc6, 0x04, //0x00001c30 addq $4, %rsi + 0x48, 0x83, 0xc7, 0xfc, //0x00001c34 addq $-4, %rdi + 0x48, 0x83, 0xff, 0x02, //0x00001c38 cmpq $2, %rdi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001c3c jae LBB0_354 + 0xe9, 0x43, 0x00, 0x00, 0x00, //0x00001c42 jmp LBB0_355 + //0x00001c47 LBB0_351 + 0x48, 0x83, 0xff, 0x08, //0x00001c47 cmpq $8, %rdi + 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x00001c4b jb LBB0_352 + //0x00001c51 LBB0_358 + 0x49, 0x8b, 0x0e, //0x00001c51 movq (%r14), %rcx + 0x48, 0x89, 0x0e, //0x00001c54 movq %rcx, (%rsi) + 0x49, 0x83, 0xc6, 0x08, //0x00001c57 addq $8, %r14 + 0x48, 0x83, 0xc6, 0x08, //0x00001c5b addq $8, %rsi + 0x48, 0x83, 0xc7, 0xf8, //0x00001c5f addq $-8, %rdi + 0x48, 0x83, 0xff, 0x04, //0x00001c63 cmpq $4, %rdi + 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x00001c67 jge LBB0_359 + //0x00001c6d LBB0_353 + 0x48, 0x83, 0xff, 0x02, //0x00001c6d cmpq $2, %rdi + 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x00001c71 jb LBB0_355 + //0x00001c77 LBB0_354 + 0x41, 0x0f, 0xb7, 0x0e, //0x00001c77 movzwl (%r14), %ecx + 0x66, 0x89, 0x0e, //0x00001c7b movw %cx, (%rsi) + 0x49, 0x83, 0xc6, 0x02, //0x00001c7e addq $2, %r14 + 0x48, 0x83, 0xc6, 0x02, //0x00001c82 addq $2, %rsi + 0x48, 0x83, 0xc7, 0xfe, //0x00001c86 addq $-2, %rdi + //0x00001c8a LBB0_355 + 0x4c, 0x89, 0xf2, //0x00001c8a movq %r14, %rdx + 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001c8d leaq $64(%rsp), %r14 + 0x48, 0x85, 0xff, //0x00001c92 testq %rdi, %rdi + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001c95 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001c9a vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xf9, 0xe5, 0xff, 0xff, //0x00001c9f vmovdqu $-6663(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x11, 0xe5, 0xff, 0xff, //0x00001ca7 vmovdqu $-6895(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x00001caf vmovdqa %ymm1, %ymm11 + 0x0f, 0x84, 0x09, 0x00, 0x00, 0x00, //0x00001cb3 je LBB0_335 + 0x8a, 0x0a, //0x00001cb9 movb (%rdx), %cl + 0x88, 0x0e, //0x00001cbb movb %cl, (%rsi) + 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001cbd leaq $64(%rsp), %r14 + //0x00001cc2 LBB0_335 + 0xc4, 0x41, 0x7d, 0x6f, 0xfd, //0x00001cc2 vmovdqa %ymm13, %ymm15 + 0xc4, 0xc1, 0x7e, 0x6f, 0x0e, //0x00001cc7 vmovdqu (%r14), %ymm1 + 0xc4, 0xc1, 0x7e, 0x6f, 0x46, 0x20, //0x00001ccc vmovdqu $32(%r14), %ymm0 + 0xc5, 0xf5, 0x74, 0xd7, //0x00001cd2 vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00001cd6 vpmovmskb %ymm2, %edx + 0xc5, 0xfd, 0x74, 0xd7, //0x00001cda vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001cde vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001ce2 shlq $32, %rcx + 0x48, 0x09, 0xca, //0x00001ce6 orq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x00001ce9 movq %rdx, %rcx + 0xc4, 0x41, 0x7d, 0x6f, 0xea, //0x00001cec vmovdqa %ymm10, %ymm13 + 0x4c, 0x09, 0xd1, //0x00001cf1 orq %r10, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001cf4 jne LBB0_337 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001cfa movq $-1, %rdx + 0x45, 0x31, 0xd2, //0x00001d01 xorl %r10d, %r10d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001d04 jmp LBB0_338 + //0x00001d09 LBB0_337 + 0x4c, 0x89, 0xd1, //0x00001d09 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00001d0c notq %rcx + 0x48, 0x21, 0xd1, //0x00001d0f andq %rdx, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x00001d12 leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xd5, //0x00001d16 orq %r10, %r13 + 0x4c, 0x89, 0xef, //0x00001d19 movq %r13, %rdi + 0x48, 0xf7, 0xd7, //0x00001d1c notq %rdi + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001d1f movabsq $-6148914691236517206, %rsi + 0x48, 0x21, 0xf2, //0x00001d29 andq %rsi, %rdx + 0x48, 0x21, 0xfa, //0x00001d2c andq %rdi, %rdx + 0x45, 0x31, 0xd2, //0x00001d2f xorl %r10d, %r10d + 0x48, 0x01, 0xca, //0x00001d32 addq %rcx, %rdx + 0x41, 0x0f, 0x92, 0xc2, //0x00001d35 setb %r10b + 0x48, 0x01, 0xd2, //0x00001d39 addq %rdx, %rdx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001d3c movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xca, //0x00001d46 xorq %rcx, %rdx + 0x4c, 0x21, 0xea, //0x00001d49 andq %r13, %rdx + 0x48, 0xf7, 0xd2, //0x00001d4c notq %rdx + //0x00001d4f LBB0_338 + 0xc5, 0xfd, 0x74, 0xd6, //0x00001d4f vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001d53 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001d57 shlq $32, %rcx + 0xc5, 0xf5, 0x74, 0xd6, //0x00001d5b vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xf2, //0x00001d5f vpmovmskb %ymm2, %esi + 0x48, 0x09, 0xce, //0x00001d63 orq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00001d66 andq %rdx, %rsi + 0xc4, 0xe1, 0xf9, 0x6e, 0xd6, //0x00001d69 vmovq %rsi, %xmm2 + 0xc4, 0xe3, 0x69, 0x44, 0x15, 0x28, 0xe3, 0xff, 0xff, 0x00, //0x00001d6e vpclmulqdq $0, $-7384(%rip), %xmm2, %xmm2 /* LCPI0_26+0(%rip) */ + 0xc4, 0xc1, 0xf9, 0x7e, 0xd5, //0x00001d78 vmovq %xmm2, %r13 + 0x4d, 0x31, 0xdd, //0x00001d7d xorq %r11, %r13 + 0xc5, 0x7e, 0x6f, 0x15, 0xf8, 0xe3, 0xff, 0xff, //0x00001d80 vmovdqu $-7176(%rip), %ymm10 /* LCPI0_7+0(%rip) */ + 0xc5, 0xad, 0x74, 0xd1, //0x00001d88 vpcmpeqb %ymm1, %ymm10, %ymm2 + 0xc5, 0xfd, 0xd7, 0xf2, //0x00001d8c vpmovmskb %ymm2, %esi + 0xc5, 0xad, 0x74, 0xd0, //0x00001d90 vpcmpeqb %ymm0, %ymm10, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001d94 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001d98 shlq $32, %rcx + 0x48, 0x09, 0xce, //0x00001d9c orq %rcx, %rsi + 0x4c, 0x89, 0xe9, //0x00001d9f movq %r13, %rcx + 0x48, 0xf7, 0xd1, //0x00001da2 notq %rcx + 0x48, 0x21, 0xce, //0x00001da5 andq %rcx, %rsi + 0xc5, 0xfe, 0x6f, 0x15, 0xf0, 0xe3, 0xff, 0xff, //0x00001da8 vmovdqu $-7184(%rip), %ymm2 /* LCPI0_8+0(%rip) */ + 0xc5, 0xf5, 0x74, 0xca, //0x00001db0 vpcmpeqb %ymm2, %ymm1, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf9, //0x00001db4 vpmovmskb %ymm1, %edi + 0xc5, 0xfd, 0x74, 0xc2, //0x00001db8 vpcmpeqb %ymm2, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x00001dbc vpmovmskb %ymm0, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x00001dc0 shlq $32, %rdx + 0x48, 0x09, 0xd7, //0x00001dc4 orq %rdx, %rdi + 0x48, 0x21, 0xcf, //0x00001dc7 andq %rcx, %rdi + 0x0f, 0x84, 0x4d, 0x00, 0x00, 0x00, //0x00001dca je LBB0_342 + 0x4c, 0x8b, 0x1c, 0x24, //0x00001dd0 movq (%rsp), %r11 + 0xc4, 0x41, 0x7d, 0x6f, 0xd5, //0x00001dd4 vmovdqa %ymm13, %ymm10 + 0xc4, 0x41, 0x7d, 0x6f, 0xef, //0x00001dd9 vmovdqa %ymm15, %ymm13 + 0xc5, 0x7e, 0x6f, 0x3d, 0x5a, 0xe4, 0xff, 0xff, //0x00001dde vmovdqu $-7078(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001de6 .p2align 4, 0x90 + //0x00001df0 LBB0_340 + 0x48, 0x8d, 0x4f, 0xff, //0x00001df0 leaq $-1(%rdi), %rcx + 0x48, 0x89, 0xca, //0x00001df4 movq %rcx, %rdx + 0x48, 0x21, 0xf2, //0x00001df7 andq %rsi, %rdx + 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x00001dfa popcntq %rdx, %rdx + 0x4c, 0x01, 0xfa, //0x00001dff addq %r15, %rdx + 0x48, 0x39, 0xda, //0x00001e02 cmpq %rbx, %rdx + 0x0f, 0x86, 0x1a, 0x03, 0x00, 0x00, //0x00001e05 jbe LBB0_386 0x48, 0x83, 0xc3, 0x01, //0x00001e0b addq $1, %rbx - 0x48, 0x21, 0xca, //0x00001e0f andq %rcx, %rdx - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00001e12 jne LBB0_362 - 0xe9, 0xb8, 0xfe, 0xff, 0xff, //0x00001e18 jmp LBB0_356 - //0x00001e1d LBB0_364 - 0x4d, 0x85, 0xc9, //0x00001e1d testq %r9, %r9 - 0x0f, 0x8e, 0x57, 0x1f, 0x00, 0x00, //0x00001e20 jle LBB0_720 - 0xc5, 0x7d, 0x7f, 0xe2, //0x00001e26 vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x00001e2a vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00001e2e vmovdqa %ymm13, %ymm11 - 0xc5, 0xf9, 0xef, 0xc0, //0x00001e33 vpxor %xmm0, %xmm0, %xmm0 - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x60, //0x00001e37 vmovdqu %ymm0, $96(%rsp) - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001e3d vmovdqu %ymm0, $64(%rsp) - 0x44, 0x89, 0xf0, //0x00001e43 movl %r14d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00001e46 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00001e4b cmpl $4033, %eax - 0x0f, 0x82, 0x27, 0x00, 0x00, 0x00, //0x00001e50 jb LBB0_368 - 0x49, 0x83, 0xf9, 0x20, //0x00001e56 cmpq $32, %r9 - 0x0f, 0x82, 0x44, 0x00, 0x00, 0x00, //0x00001e5a jb LBB0_369 - 0xc4, 0xc1, 0x7e, 0x6f, 0x06, //0x00001e60 vmovdqu (%r14), %ymm0 - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001e65 vmovdqu %ymm0, $64(%rsp) - 0x49, 0x83, 0xc6, 0x20, //0x00001e6b addq $32, %r14 - 0x49, 0x8d, 0x79, 0xe0, //0x00001e6f leaq $-32(%r9), %rdi - 0x48, 0x8d, 0x74, 0x24, 0x60, //0x00001e73 leaq $96(%rsp), %rsi - 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00001e78 jmp LBB0_370 - //0x00001e7d LBB0_368 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001e7d vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001e82 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x11, 0xe4, 0xff, 0xff, //0x00001e87 vmovdqu $-7151(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x29, 0xe3, 0xff, 0xff, //0x00001e8f vmovdqu $-7383(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x00001e97 vmovdqa %ymm1, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe2, //0x00001e9b vmovdqa %ymm2, %ymm12 - 0xe9, 0x52, 0xfe, 0xff, 0xff, //0x00001e9f jmp LBB0_358 - //0x00001ea4 LBB0_369 - 0x48, 0x8d, 0x74, 0x24, 0x40, //0x00001ea4 leaq $64(%rsp), %rsi - 0x4c, 0x89, 0xcf, //0x00001ea9 movq %r9, %rdi - //0x00001eac LBB0_370 - 0x48, 0x83, 0xff, 0x10, //0x00001eac cmpq $16, %rdi - 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00001eb0 jb LBB0_371 - 0xc4, 0xc1, 0x7a, 0x6f, 0x06, //0x00001eb6 vmovdqu (%r14), %xmm0 - 0xc5, 0xfa, 0x7f, 0x06, //0x00001ebb vmovdqu %xmm0, (%rsi) - 0x49, 0x83, 0xc6, 0x10, //0x00001ebf addq $16, %r14 - 0x48, 0x83, 0xc6, 0x10, //0x00001ec3 addq $16, %rsi - 0x48, 0x83, 0xc7, 0xf0, //0x00001ec7 addq $-16, %rdi - 0x48, 0x83, 0xff, 0x08, //0x00001ecb cmpq $8, %rdi - 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00001ecf jae LBB0_378 - //0x00001ed5 LBB0_372 - 0x48, 0x83, 0xff, 0x04, //0x00001ed5 cmpq $4, %rdi - 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x00001ed9 jl LBB0_373 - //0x00001edf LBB0_379 - 0x41, 0x8b, 0x06, //0x00001edf movl (%r14), %eax - 0x89, 0x06, //0x00001ee2 movl %eax, (%rsi) - 0x49, 0x83, 0xc6, 0x04, //0x00001ee4 addq $4, %r14 - 0x48, 0x83, 0xc6, 0x04, //0x00001ee8 addq $4, %rsi - 0x48, 0x83, 0xc7, 0xfc, //0x00001eec addq $-4, %rdi - 0x48, 0x83, 0xff, 0x02, //0x00001ef0 cmpq $2, %rdi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001ef4 jae LBB0_374 - 0xe9, 0x43, 0x00, 0x00, 0x00, //0x00001efa jmp LBB0_375 - //0x00001eff LBB0_371 - 0x48, 0x83, 0xff, 0x08, //0x00001eff cmpq $8, %rdi - 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x00001f03 jb LBB0_372 - //0x00001f09 LBB0_378 - 0x49, 0x8b, 0x06, //0x00001f09 movq (%r14), %rax - 0x48, 0x89, 0x06, //0x00001f0c movq %rax, (%rsi) - 0x49, 0x83, 0xc6, 0x08, //0x00001f0f addq $8, %r14 - 0x48, 0x83, 0xc6, 0x08, //0x00001f13 addq $8, %rsi - 0x48, 0x83, 0xc7, 0xf8, //0x00001f17 addq $-8, %rdi - 0x48, 0x83, 0xff, 0x04, //0x00001f1b cmpq $4, %rdi - 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x00001f1f jge LBB0_379 - //0x00001f25 LBB0_373 - 0x48, 0x83, 0xff, 0x02, //0x00001f25 cmpq $2, %rdi - 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x00001f29 jb LBB0_375 - //0x00001f2f LBB0_374 - 0x41, 0x0f, 0xb7, 0x06, //0x00001f2f movzwl (%r14), %eax - 0x66, 0x89, 0x06, //0x00001f33 movw %ax, (%rsi) - 0x49, 0x83, 0xc6, 0x02, //0x00001f36 addq $2, %r14 - 0x48, 0x83, 0xc6, 0x02, //0x00001f3a addq $2, %rsi - 0x48, 0x83, 0xc7, 0xfe, //0x00001f3e addq $-2, %rdi - //0x00001f42 LBB0_375 - 0x4c, 0x89, 0xf2, //0x00001f42 movq %r14, %rdx - 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001f45 leaq $64(%rsp), %r14 - 0x48, 0x85, 0xff, //0x00001f4a testq %rdi, %rdi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001f4d vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001f52 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x41, 0xe3, 0xff, 0xff, //0x00001f57 vmovdqu $-7359(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x59, 0xe2, 0xff, 0xff, //0x00001f5f vmovdqu $-7591(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x00001f67 vmovdqa %ymm1, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe2, //0x00001f6b vmovdqa %ymm2, %ymm12 - 0x0f, 0x84, 0x81, 0xfd, 0xff, 0xff, //0x00001f6f je LBB0_358 - 0x8a, 0x02, //0x00001f75 movb (%rdx), %al - 0x88, 0x06, //0x00001f77 movb %al, (%rsi) - 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001f79 leaq $64(%rsp), %r14 - 0xe9, 0x73, 0xfd, 0xff, 0xff, //0x00001f7e jmp LBB0_358 - //0x00001f83 LBB0_380 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00001f83 movq $16(%rsp), %rdi - 0x48, 0x8b, 0x47, 0x08, //0x00001f88 movq $8(%rdi), %rax - 0x48, 0x0f, 0xbc, 0xca, //0x00001f8c bsfq %rdx, %rcx - 0x4c, 0x29, 0xc9, //0x00001f90 subq %r9, %rcx - 0x48, 0x01, 0xc8, //0x00001f93 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00001f96 addq $1, %rax - 0x49, 0x89, 0x45, 0x00, //0x00001f9a movq %rax, (%r13) - 0x48, 0x8b, 0x4f, 0x08, //0x00001f9e movq $8(%rdi), %rcx - 0x48, 0x39, 0xc8, //0x00001fa2 cmpq %rcx, %rax - 0x48, 0x0f, 0x47, 0xc1, //0x00001fa5 cmovaq %rcx, %rax - 0x49, 0x89, 0x45, 0x00, //0x00001fa9 movq %rax, (%r13) - 0x0f, 0x87, 0xe2, 0x1b, 0x00, 0x00, //0x00001fad ja LBB0_711 - 0x4d, 0x85, 0xc0, //0x00001fb3 testq %r8, %r8 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00001fb6 movq $24(%rsp), %r11 - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001fbb movq $8(%rsp), %r15 - 0x0f, 0x8f, 0xda, 0xe3, 0xff, 0xff, //0x00001fc0 jg LBB0_3 - 0xe9, 0x61, 0x1b, 0x00, 0x00, //0x00001fc6 jmp LBB0_679 - //0x00001fcb LBB0_382 - 0x0f, 0xbc, 0xce, //0x00001fcb bsfl %esi, %ecx - 0x48, 0x29, 0xd1, //0x00001fce subq %rdx, %rcx - //0x00001fd1 LBB0_383 - 0x48, 0x8b, 0x1c, 0x24, //0x00001fd1 movq (%rsp), %rbx - 0x49, 0x89, 0x4d, 0x00, //0x00001fd5 movq %rcx, (%r13) - 0x48, 0x85, 0xdb, //0x00001fd9 testq %rbx, %rbx - 0x0f, 0x8f, 0xbe, 0xe3, 0xff, 0xff, //0x00001fdc jg LBB0_3 - 0xe9, 0xea, 0x1c, 0x00, 0x00, //0x00001fe2 jmp LBB0_698 - //0x00001fe7 LBB0_384 - 0x49, 0x8d, 0x41, 0xff, //0x00001fe7 leaq $-1(%r9), %rax - 0x48, 0x39, 0xc2, //0x00001feb cmpq %rax, %rdx - 0x49, 0xf7, 0xd1, //0x00001fee notq %r9 - 0x4d, 0x0f, 0x45, 0xcd, //0x00001ff1 cmovneq %r13, %r9 - 0x84, 0xc9, //0x00001ff5 testb %cl, %cl - 0x4d, 0x0f, 0x45, 0xe9, //0x00001ff7 cmovneq %r9, %r13 - 0xe9, 0x21, 0xf7, 0xff, 0xff, //0x00001ffb jmp LBB0_290 - //0x00002000 LBB0_385 - 0x4d, 0x29, 0xc8, //0x00002000 subq %r9, %r8 - 0x0f, 0x84, 0x5a, 0x1d, 0x00, 0x00, //0x00002003 je LBB0_718 - 0x49, 0x83, 0xf8, 0x40, //0x00002009 cmpq $64, %r8 - 0x0f, 0x82, 0xdb, 0x0b, 0x00, 0x00, //0x0000200d jb LBB0_518 - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002013 movq $-1, %r10 - 0x4c, 0x89, 0xc9, //0x0000201a movq %r9, %rcx - 0x45, 0x31, 0xdb, //0x0000201d xorl %r11d, %r11d - //0x00002020 .p2align 4, 0x90 - //0x00002020 LBB0_388 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x0e, //0x00002020 vmovdqu (%r14,%rcx), %ymm0 - 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x0e, 0x20, //0x00002026 vmovdqu $32(%r14,%rcx), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x0000202d vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x00002031 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x00002035 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00002039 vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xd7, //0x0000203d vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00002041 vpmovmskb %ymm2, %edx - 0xc5, 0xf5, 0x74, 0xd7, //0x00002045 vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xda, //0x00002049 vpmovmskb %ymm2, %ebx - 0xc5, 0xbd, 0x64, 0xd1, //0x0000204d vpcmpgtb %ymm1, %ymm8, %ymm2 - 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00002051 vpcmpgtb %ymm9, %ymm1, %ymm1 - 0xc5, 0xed, 0xdb, 0xc9, //0x00002056 vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x0000205a vpmovmskb %ymm1, %esi - 0x48, 0xc1, 0xe0, 0x20, //0x0000205e shlq $32, %rax - 0x48, 0x09, 0xc7, //0x00002062 orq %rax, %rdi - 0x48, 0xc1, 0xe3, 0x20, //0x00002065 shlq $32, %rbx - 0x48, 0xc1, 0xe6, 0x20, //0x00002069 shlq $32, %rsi - 0x48, 0x09, 0xda, //0x0000206d orq %rbx, %rdx - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00002070 jne LBB0_399 - 0x4d, 0x85, 0xdb, //0x00002076 testq %r11, %r11 - 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00002079 jne LBB0_401 - 0x45, 0x31, 0xdb, //0x0000207f xorl %r11d, %r11d - //0x00002082 LBB0_391 - 0xc5, 0xbd, 0x64, 0xc8, //0x00002082 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00002086 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x0000208b vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x0000208f vpmovmskb %ymm0, %eax - 0x48, 0x09, 0xc6, //0x00002093 orq %rax, %rsi - 0x48, 0x85, 0xff, //0x00002096 testq %rdi, %rdi - 0x0f, 0x85, 0x87, 0x00, 0x00, 0x00, //0x00002099 jne LBB0_402 - 0x48, 0x85, 0xf6, //0x0000209f testq %rsi, %rsi - 0x0f, 0x85, 0x7c, 0x1c, 0x00, 0x00, //0x000020a2 jne LBB0_712 - 0x49, 0x83, 0xc0, 0xc0, //0x000020a8 addq $-64, %r8 - 0x48, 0x83, 0xc1, 0x40, //0x000020ac addq $64, %rcx - 0x49, 0x83, 0xf8, 0x3f, //0x000020b0 cmpq $63, %r8 - 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x000020b4 ja LBB0_388 - 0xe9, 0x39, 0x09, 0x00, 0x00, //0x000020ba jmp LBB0_394 - //0x000020bf LBB0_399 - 0x49, 0x83, 0xfa, 0xff, //0x000020bf cmpq $-1, %r10 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x000020c3 jne LBB0_401 - 0x4c, 0x0f, 0xbc, 0xd2, //0x000020c9 bsfq %rdx, %r10 - 0x49, 0x01, 0xca, //0x000020cd addq %rcx, %r10 - //0x000020d0 LBB0_401 - 0x4c, 0x89, 0xd8, //0x000020d0 movq %r11, %rax - 0x48, 0xf7, 0xd0, //0x000020d3 notq %rax - 0x48, 0x21, 0xd0, //0x000020d6 andq %rdx, %rax - 0x48, 0x89, 0x0c, 0x24, //0x000020d9 movq %rcx, (%rsp) - 0x48, 0x8d, 0x0c, 0x00, //0x000020dd leaq (%rax,%rax), %rcx - 0x4c, 0x09, 0xd9, //0x000020e1 orq %r11, %rcx - 0x48, 0x89, 0xcb, //0x000020e4 movq %rcx, %rbx - 0x48, 0xf7, 0xd3, //0x000020e7 notq %rbx - 0x48, 0x21, 0xd3, //0x000020ea andq %rdx, %rbx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000020ed movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd3, //0x000020f7 andq %rdx, %rbx - 0x45, 0x31, 0xdb, //0x000020fa xorl %r11d, %r11d - 0x48, 0x01, 0xc3, //0x000020fd addq %rax, %rbx - 0x41, 0x0f, 0x92, 0xc3, //0x00002100 setb %r11b - 0x48, 0x01, 0xdb, //0x00002104 addq %rbx, %rbx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002107 movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc3, //0x00002111 xorq %rax, %rbx - 0x48, 0x21, 0xcb, //0x00002114 andq %rcx, %rbx - 0x48, 0x8b, 0x0c, 0x24, //0x00002117 movq (%rsp), %rcx - 0x48, 0xf7, 0xd3, //0x0000211b notq %rbx - 0x48, 0x21, 0xdf, //0x0000211e andq %rbx, %rdi - 0xe9, 0x5c, 0xff, 0xff, 0xff, //0x00002121 jmp LBB0_391 - //0x00002126 LBB0_402 - 0x48, 0x0f, 0xbc, 0xc7, //0x00002126 bsfq %rdi, %rax - 0x48, 0x85, 0xf6, //0x0000212a testq %rsi, %rsi - 0x0f, 0x84, 0x9f, 0x03, 0x00, 0x00, //0x0000212d je LBB0_458 - 0x48, 0x0f, 0xbc, 0xd6, //0x00002133 bsfq %rsi, %rdx - 0xe9, 0x9b, 0x03, 0x00, 0x00, //0x00002137 jmp LBB0_459 - //0x0000213c LBB0_404 - 0x48, 0x8b, 0x44, 0x24, 0x38, //0x0000213c movq $56(%rsp), %rax - 0x8a, 0x48, 0x01, //0x00002141 movb $1(%rax), %cl - 0x80, 0xc1, 0xd2, //0x00002144 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x00002147 cmpb $55, %cl - 0x0f, 0x87, 0x80, 0xf3, 0xff, 0xff, //0x0000214a ja LBB0_257 - 0x0f, 0xb6, 0xc1, //0x00002150 movzbl %cl, %eax - 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00002153 movabsq $36028797027352577, %rcx - 0x48, 0x0f, 0xa3, 0xc1, //0x0000215d btq %rax, %rcx - 0x48, 0x8b, 0x0c, 0x24, //0x00002161 movq (%rsp), %rcx - 0x0f, 0x83, 0x1e, 0x08, 0x00, 0x00, //0x00002165 jae LBB0_498 - //0x0000216b LBB0_406 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000216b movq $-1, %r8 - 0x49, 0x83, 0xfa, 0x20, //0x00002172 cmpq $32, %r10 - 0x0f, 0x82, 0x1c, 0x0a, 0x00, 0x00, //0x00002176 jb LBB0_515 - 0x45, 0x31, 0xc9, //0x0000217c xorl %r9d, %r9d - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000217f movq $-1, %r15 - 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x00002186 movq $-1, $40(%rsp) - 0x4c, 0x8b, 0x5c, 0x24, 0x38, //0x0000218f movq $56(%rsp), %r11 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002194 .p2align 4, 0x90 - //0x000021a0 LBB0_408 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x0b, //0x000021a0 vmovdqu (%r11,%r9), %ymm0 - 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x000021a6 vpcmpgtb %ymm10, %ymm0, %ymm1 - 0xc5, 0x95, 0x64, 0xd0, //0x000021ab vpcmpgtb %ymm0, %ymm13, %ymm2 - 0xc5, 0xed, 0xdb, 0xc9, //0x000021af vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0x85, 0x74, 0xd0, //0x000021b3 vpcmpeqb %ymm0, %ymm15, %ymm2 - 0xc5, 0xfd, 0x74, 0x1d, 0xa1, 0xe0, 0xff, 0xff, //0x000021b7 vpcmpeqb $-8031(%rip), %ymm0, %ymm3 /* LCPI0_17+0(%rip) */ - 0xc5, 0xe5, 0xeb, 0xd2, //0x000021bf vpor %ymm2, %ymm3, %ymm2 - 0xc5, 0x8d, 0xdb, 0xd8, //0x000021c3 vpand %ymm0, %ymm14, %ymm3 - 0xc5, 0xfd, 0x74, 0x05, 0xb1, 0xe0, 0xff, 0xff, //0x000021c7 vpcmpeqb $-8015(%rip), %ymm0, %ymm0 /* LCPI0_18+0(%rip) */ - 0xc5, 0xfd, 0xd7, 0xd0, //0x000021cf vpmovmskb %ymm0, %edx - 0xc5, 0xe5, 0x74, 0xdc, //0x000021d3 vpcmpeqb %ymm4, %ymm3, %ymm3 - 0xc5, 0xfd, 0xd7, 0xfb, //0x000021d7 vpmovmskb %ymm3, %edi - 0xc5, 0xfd, 0xd7, 0xf2, //0x000021db vpmovmskb %ymm2, %esi - 0xc5, 0xf5, 0xeb, 0xc0, //0x000021df vpor %ymm0, %ymm1, %ymm0 - 0xc5, 0xe5, 0xeb, 0xca, //0x000021e3 vpor %ymm2, %ymm3, %ymm1 - 0xc5, 0xfd, 0xeb, 0xc1, //0x000021e7 vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x000021eb vpmovmskb %ymm0, %eax - 0x48, 0xf7, 0xd0, //0x000021ef notq %rax - 0x48, 0x0f, 0xbc, 0xc8, //0x000021f2 bsfq %rax, %rcx - 0x83, 0xf9, 0x20, //0x000021f6 cmpl $32, %ecx - 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x000021f9 je LBB0_410 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x000021ff movl $-1, %eax - 0xd3, 0xe0, //0x00002204 shll %cl, %eax - 0xf7, 0xd0, //0x00002206 notl %eax - 0x21, 0xc2, //0x00002208 andl %eax, %edx - 0x21, 0xc7, //0x0000220a andl %eax, %edi - 0x21, 0xf0, //0x0000220c andl %esi, %eax - 0x89, 0xc6, //0x0000220e movl %eax, %esi - //0x00002210 LBB0_410 - 0x8d, 0x5a, 0xff, //0x00002210 leal $-1(%rdx), %ebx - 0x21, 0xd3, //0x00002213 andl %edx, %ebx - 0xc5, 0xfe, 0x6f, 0x1d, 0xa3, 0xdf, 0xff, 0xff, //0x00002215 vmovdqu $-8285(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0x0f, 0x85, 0x12, 0x07, 0x00, 0x00, //0x0000221d jne LBB0_492 - 0x8d, 0x5f, 0xff, //0x00002223 leal $-1(%rdi), %ebx - 0x21, 0xfb, //0x00002226 andl %edi, %ebx - 0x0f, 0x85, 0x07, 0x07, 0x00, 0x00, //0x00002228 jne LBB0_492 - 0x8d, 0x5e, 0xff, //0x0000222e leal $-1(%rsi), %ebx - 0x21, 0xf3, //0x00002231 andl %esi, %ebx - 0x0f, 0x85, 0xfc, 0x06, 0x00, 0x00, //0x00002233 jne LBB0_492 - 0x85, 0xd2, //0x00002239 testl %edx, %edx - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x0000223b je LBB0_416 - 0x0f, 0xbc, 0xd2, //0x00002241 bsfl %edx, %edx - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x00002244 cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0x0d, 0x07, 0x00, 0x00, //0x0000224a jne LBB0_493 - 0x4c, 0x01, 0xca, //0x00002250 addq %r9, %rdx - 0x48, 0x89, 0x54, 0x24, 0x28, //0x00002253 movq %rdx, $40(%rsp) - //0x00002258 LBB0_416 - 0x85, 0xff, //0x00002258 testl %edi, %edi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000225a je LBB0_419 - 0x0f, 0xbc, 0xd7, //0x00002260 bsfl %edi, %edx - 0x49, 0x83, 0xff, 0xff, //0x00002263 cmpq $-1, %r15 - 0x0f, 0x85, 0xf0, 0x06, 0x00, 0x00, //0x00002267 jne LBB0_493 - 0x4c, 0x01, 0xca, //0x0000226d addq %r9, %rdx - 0x49, 0x89, 0xd7, //0x00002270 movq %rdx, %r15 - //0x00002273 LBB0_419 - 0x85, 0xf6, //0x00002273 testl %esi, %esi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00002275 je LBB0_422 - 0x0f, 0xbc, 0xd6, //0x0000227b bsfl %esi, %edx - 0x49, 0x83, 0xf8, 0xff, //0x0000227e cmpq $-1, %r8 - 0x0f, 0x85, 0xd5, 0x06, 0x00, 0x00, //0x00002282 jne LBB0_493 - 0x4c, 0x01, 0xca, //0x00002288 addq %r9, %rdx - 0x49, 0x89, 0xd0, //0x0000228b movq %rdx, %r8 - //0x0000228e LBB0_422 - 0x83, 0xf9, 0x20, //0x0000228e cmpl $32, %ecx - 0x0f, 0x85, 0xf9, 0x01, 0x00, 0x00, //0x00002291 jne LBB0_456 - 0x49, 0x83, 0xc2, 0xe0, //0x00002297 addq $-32, %r10 - 0x49, 0x83, 0xc1, 0x20, //0x0000229b addq $32, %r9 - 0x49, 0x83, 0xfa, 0x1f, //0x0000229f cmpq $31, %r10 - 0x0f, 0x87, 0xf7, 0xfe, 0xff, 0xff, //0x000022a3 ja LBB0_408 - 0xc5, 0xf8, 0x77, //0x000022a9 vzeroupper - 0x4d, 0x01, 0xd9, //0x000022ac addq %r11, %r9 - 0x4c, 0x89, 0x6c, 0x24, 0x30, //0x000022af movq %r13, $48(%rsp) - 0x49, 0x83, 0xfa, 0x10, //0x000022b4 cmpq $16, %r10 - 0x0f, 0x82, 0x35, 0x01, 0x00, 0x00, //0x000022b8 jb LBB0_443 - //0x000022be LBB0_425 - 0x4c, 0x89, 0xcb, //0x000022be movq %r9, %rbx - 0x4c, 0x29, 0xdb, //0x000022c1 subq %r11, %rbx - 0x45, 0x31, 0xed, //0x000022c4 xorl %r13d, %r13d - //0x000022c7 LBB0_426 - 0xc4, 0x81, 0x7a, 0x6f, 0x04, 0x29, //0x000022c7 vmovdqu (%r9,%r13), %xmm0 - 0xc5, 0xf9, 0x64, 0x0d, 0x6b, 0xdd, 0xff, 0xff, //0x000022cd vpcmpgtb $-8853(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ - 0xc5, 0xfa, 0x6f, 0x15, 0x73, 0xdd, 0xff, 0xff, //0x000022d5 vmovdqu $-8845(%rip), %xmm2 /* LCPI0_21+0(%rip) */ - 0xc5, 0xe9, 0x64, 0xd0, //0x000022dd vpcmpgtb %xmm0, %xmm2, %xmm2 - 0xc5, 0xf1, 0xdb, 0xca, //0x000022e1 vpand %xmm2, %xmm1, %xmm1 - 0xc5, 0xf9, 0x74, 0x15, 0x73, 0xdd, 0xff, 0xff, //0x000022e5 vpcmpeqb $-8845(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x1d, 0x7b, 0xdd, 0xff, 0xff, //0x000022ed vpcmpeqb $-8837(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xd2, //0x000022f5 vpor %xmm2, %xmm3, %xmm2 - 0xc5, 0xf9, 0xdb, 0x1d, 0x1f, 0xdd, 0xff, 0xff, //0x000022f9 vpand $-8929(%rip), %xmm0, %xmm3 /* LCPI0_12+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0x77, 0xdd, 0xff, 0xff, //0x00002301 vpcmpeqb $-8841(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ - 0xc5, 0xe1, 0x74, 0x1d, 0x7f, 0xdd, 0xff, 0xff, //0x00002309 vpcmpeqb $-8833(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xe0, //0x00002311 vpor %xmm0, %xmm3, %xmm4 - 0xc5, 0xe9, 0xeb, 0xc9, //0x00002315 vpor %xmm1, %xmm2, %xmm1 - 0xc5, 0xd9, 0xeb, 0xc9, //0x00002319 vpor %xmm1, %xmm4, %xmm1 - 0xc5, 0x79, 0xd7, 0xd8, //0x0000231d vpmovmskb %xmm0, %r11d - 0xc5, 0xf9, 0xd7, 0xd3, //0x00002321 vpmovmskb %xmm3, %edx - 0xc5, 0xf9, 0xd7, 0xfa, //0x00002325 vpmovmskb %xmm2, %edi - 0xc5, 0xf9, 0xd7, 0xc1, //0x00002329 vpmovmskb %xmm1, %eax - 0xf7, 0xd0, //0x0000232d notl %eax - 0x0f, 0xbc, 0xc8, //0x0000232f bsfl %eax, %ecx - 0x83, 0xf9, 0x10, //0x00002332 cmpl $16, %ecx - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002335 je LBB0_428 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x0000233b movl $-1, %eax - 0xd3, 0xe0, //0x00002340 shll %cl, %eax - 0xf7, 0xd0, //0x00002342 notl %eax - 0x41, 0x21, 0xc3, //0x00002344 andl %eax, %r11d - 0x21, 0xc2, //0x00002347 andl %eax, %edx - 0x21, 0xf8, //0x00002349 andl %edi, %eax - 0x89, 0xc7, //0x0000234b movl %eax, %edi - //0x0000234d LBB0_428 - 0x41, 0x8d, 0x73, 0xff, //0x0000234d leal $-1(%r11), %esi - 0x44, 0x21, 0xde, //0x00002351 andl %r11d, %esi - 0x0f, 0x85, 0xe8, 0x06, 0x00, 0x00, //0x00002354 jne LBB0_499 - 0x8d, 0x72, 0xff, //0x0000235a leal $-1(%rdx), %esi - 0x21, 0xd6, //0x0000235d andl %edx, %esi - 0x0f, 0x85, 0xdd, 0x06, 0x00, 0x00, //0x0000235f jne LBB0_499 - 0x8d, 0x77, 0xff, //0x00002365 leal $-1(%rdi), %esi - 0x21, 0xfe, //0x00002368 andl %edi, %esi - 0x0f, 0x85, 0xd2, 0x06, 0x00, 0x00, //0x0000236a jne LBB0_499 - 0x45, 0x85, 0xdb, //0x00002370 testl %r11d, %r11d - 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x00002373 je LBB0_434 - 0x41, 0x0f, 0xbc, 0xf3, //0x00002379 bsfl %r11d, %esi - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000237d cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0x9d, 0x07, 0x00, 0x00, //0x00002383 jne LBB0_509 - 0x48, 0x01, 0xde, //0x00002389 addq %rbx, %rsi - 0x4c, 0x01, 0xee, //0x0000238c addq %r13, %rsi - 0x48, 0x89, 0x74, 0x24, 0x28, //0x0000238f movq %rsi, $40(%rsp) - //0x00002394 LBB0_434 - 0x4c, 0x8b, 0x5c, 0x24, 0x38, //0x00002394 movq $56(%rsp), %r11 - 0x85, 0xd2, //0x00002399 testl %edx, %edx - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x0000239b je LBB0_437 - 0x0f, 0xbc, 0xd2, //0x000023a1 bsfl %edx, %edx - 0x49, 0x83, 0xff, 0xff, //0x000023a4 cmpq $-1, %r15 - 0x0f, 0x85, 0xe8, 0x06, 0x00, 0x00, //0x000023a8 jne LBB0_503 - 0x48, 0x01, 0xda, //0x000023ae addq %rbx, %rdx - 0x4c, 0x01, 0xea, //0x000023b1 addq %r13, %rdx - 0x49, 0x89, 0xd7, //0x000023b4 movq %rdx, %r15 - //0x000023b7 LBB0_437 - 0x85, 0xff, //0x000023b7 testl %edi, %edi - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000023b9 je LBB0_440 - 0x0f, 0xbc, 0xd7, //0x000023bf bsfl %edi, %edx - 0x49, 0x83, 0xf8, 0xff, //0x000023c2 cmpq $-1, %r8 - 0x0f, 0x85, 0xca, 0x06, 0x00, 0x00, //0x000023c6 jne LBB0_503 - 0x48, 0x01, 0xda, //0x000023cc addq %rbx, %rdx - 0x4c, 0x01, 0xea, //0x000023cf addq %r13, %rdx - 0x49, 0x89, 0xd0, //0x000023d2 movq %rdx, %r8 - //0x000023d5 LBB0_440 - 0x83, 0xf9, 0x10, //0x000023d5 cmpl $16, %ecx - 0x0f, 0x85, 0x82, 0x01, 0x00, 0x00, //0x000023d8 jne LBB0_466 - 0x49, 0x83, 0xc2, 0xf0, //0x000023de addq $-16, %r10 - 0x49, 0x83, 0xc5, 0x10, //0x000023e2 addq $16, %r13 - 0x49, 0x83, 0xfa, 0x0f, //0x000023e6 cmpq $15, %r10 - 0x0f, 0x87, 0xd7, 0xfe, 0xff, 0xff, //0x000023ea ja LBB0_426 - 0x4d, 0x01, 0xe9, //0x000023f0 addq %r13, %r9 - //0x000023f3 LBB0_443 - 0x4d, 0x85, 0xd2, //0x000023f3 testq %r10, %r10 - 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x000023f6 movq $48(%rsp), %r13 - 0x0f, 0x84, 0x89, 0x01, 0x00, 0x00, //0x000023fb je LBB0_468 - 0x4b, 0x8d, 0x34, 0x11, //0x00002401 leaq (%r9,%r10), %rsi - 0x4c, 0x89, 0xcf, //0x00002405 movq %r9, %rdi - 0x4c, 0x29, 0xdf, //0x00002408 subq %r11, %rdi - 0x31, 0xc9, //0x0000240b xorl %ecx, %ecx - 0xe9, 0x1b, 0x00, 0x00, 0x00, //0x0000240d jmp LBB0_448 - //0x00002412 LBB0_445 - 0x49, 0x83, 0xf8, 0xff, //0x00002412 cmpq $-1, %r8 - 0x0f, 0x85, 0x2e, 0x06, 0x00, 0x00, //0x00002416 jne LBB0_500 - 0x4c, 0x8d, 0x04, 0x0f, //0x0000241c leaq (%rdi,%rcx), %r8 - //0x00002420 .p2align 4, 0x90 - //0x00002420 LBB0_447 - 0x48, 0x83, 0xc1, 0x01, //0x00002420 addq $1, %rcx - 0x49, 0x39, 0xca, //0x00002424 cmpq %rcx, %r10 - 0x0f, 0x84, 0xeb, 0x04, 0x00, 0x00, //0x00002427 je LBB0_491 - //0x0000242d LBB0_448 - 0x41, 0x0f, 0xbe, 0x14, 0x09, //0x0000242d movsbl (%r9,%rcx), %edx - 0x8d, 0x42, 0xd0, //0x00002432 leal $-48(%rdx), %eax - 0x83, 0xf8, 0x0a, //0x00002435 cmpl $10, %eax - 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x00002438 jb LBB0_447 - 0x8d, 0x5a, 0xd5, //0x0000243e leal $-43(%rdx), %ebx - 0x83, 0xfb, 0x1a, //0x00002441 cmpl $26, %ebx - 0x0f, 0x87, 0x2a, 0x00, 0x00, 0x00, //0x00002444 ja LBB0_453 - 0x48, 0x8d, 0x15, 0x97, 0x1b, 0x00, 0x00, //0x0000244a leaq $7063(%rip), %rdx /* LJTI0_2+0(%rip) */ - 0x48, 0x63, 0x04, 0x9a, //0x00002451 movslq (%rdx,%rbx,4), %rax - 0x48, 0x01, 0xd0, //0x00002455 addq %rdx, %rax - 0xff, 0xe0, //0x00002458 jmpq *%rax - //0x0000245a LBB0_451 - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000245a cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0xe4, 0x05, 0x00, 0x00, //0x00002460 jne LBB0_500 - 0x48, 0x8d, 0x04, 0x0f, //0x00002466 leaq (%rdi,%rcx), %rax - 0x48, 0x89, 0x44, 0x24, 0x28, //0x0000246a movq %rax, $40(%rsp) - 0xe9, 0xac, 0xff, 0xff, 0xff, //0x0000246f jmp LBB0_447 - //0x00002474 LBB0_453 - 0x83, 0xfa, 0x65, //0x00002474 cmpl $101, %edx - 0x0f, 0x85, 0x0a, 0x01, 0x00, 0x00, //0x00002477 jne LBB0_467 - //0x0000247d LBB0_454 - 0x49, 0x83, 0xff, 0xff, //0x0000247d cmpq $-1, %r15 - 0x0f, 0x85, 0xc3, 0x05, 0x00, 0x00, //0x00002481 jne LBB0_500 - 0x4c, 0x8d, 0x3c, 0x0f, //0x00002487 leaq (%rdi,%rcx), %r15 - 0xe9, 0x90, 0xff, 0xff, 0xff, //0x0000248b jmp LBB0_447 - //0x00002490 LBB0_456 - 0x4c, 0x01, 0xc9, //0x00002490 addq %r9, %rcx - 0x4c, 0x01, 0xd9, //0x00002493 addq %r11, %rcx - 0xc5, 0xf8, 0x77, //0x00002496 vzeroupper - 0x49, 0x89, 0xc9, //0x00002499 movq %rcx, %r9 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000249c movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x28, //0x000024a3 movq $40(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x000024a8 testq %rdx, %rdx - 0x0f, 0x85, 0xee, 0x00, 0x00, 0x00, //0x000024ab jne LBB0_469 - 0xe9, 0x5a, 0x18, 0x00, 0x00, //0x000024b1 jmp LBB0_709 - //0x000024b6 LBB0_676 - 0x4d, 0x29, 0xf4, //0x000024b6 subq %r14, %r12 - 0x49, 0x01, 0xd4, //0x000024b9 addq %rdx, %r12 - 0x49, 0x39, 0xdc, //0x000024bc cmpq %rbx, %r12 - 0x0f, 0x82, 0xcd, 0xe0, 0xff, 0xff, //0x000024bf jb LBB0_35 - 0xe9, 0x48, 0x16, 0x00, 0x00, //0x000024c5 jmp LBB0_677 - //0x000024ca LBB0_457 - 0x4d, 0x89, 0xfd, //0x000024ca movq %r15, %r13 - 0xe9, 0x29, 0xf1, 0xff, 0xff, //0x000024cd jmp LBB0_279 - //0x000024d2 LBB0_458 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x000024d2 movl $64, %edx - //0x000024d7 LBB0_459 - 0x4d, 0x89, 0xd3, //0x000024d7 movq %r10, %r11 - 0x48, 0x39, 0xc2, //0x000024da cmpq %rax, %rdx - 0x0f, 0x82, 0x88, 0x18, 0x00, 0x00, //0x000024dd jb LBB0_719 - 0xc5, 0x7d, 0x7f, 0xea, //0x000024e3 vmovdqa %ymm13, %ymm2 - 0x48, 0x01, 0xc1, //0x000024e7 addq %rax, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x000024ea addq $1, %rcx - //0x000024ee LBB0_461 - 0x48, 0x85, 0xc9, //0x000024ee testq %rcx, %rcx - 0x0f, 0x88, 0xfd, 0x17, 0x00, 0x00, //0x000024f1 js LBB0_706 - 0x49, 0x89, 0x4d, 0x00, //0x000024f7 movq %rcx, (%r13) - 0x4d, 0x85, 0xc9, //0x000024fb testq %r9, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x000024fe movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002503 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002508 movq $8(%rsp), %r15 - 0xc5, 0x7d, 0x6f, 0xea, //0x0000250d vmovdqa %ymm2, %ymm13 - 0x0f, 0x8f, 0x89, 0xde, 0xff, 0xff, //0x00002511 jg LBB0_3 - 0xe9, 0x1d, 0x16, 0x00, 0x00, //0x00002517 jmp LBB0_463 - //0x0000251c LBB0_156 - 0x4d, 0x85, 0xff, //0x0000251c testq %r15, %r15 - 0x0f, 0x85, 0x37, 0x07, 0x00, 0x00, //0x0000251f jne LBB0_522 - 0x49, 0x01, 0xf1, //0x00002525 addq %rsi, %r9 - 0x49, 0x29, 0xf2, //0x00002528 subq %rsi, %r10 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x0000252b movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002530 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002535 movq $8(%rsp), %r15 - //0x0000253a LBB0_158 - 0x4d, 0x85, 0xd2, //0x0000253a testq %r10, %r10 - 0x0f, 0x8f, 0x9d, 0x07, 0x00, 0x00, //0x0000253d jg LBB0_526 - 0xe9, 0x4d, 0x16, 0x00, 0x00, //0x00002543 jmp LBB0_711 - //0x00002548 LBB0_464 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002548 vmovdqa %ymm13, %ymm0 - 0x0f, 0xbc, 0xc3, //0x0000254c bsfl %ebx, %eax - 0xe9, 0xb9, 0x01, 0x00, 0x00, //0x0000254f jmp LBB0_484 - //0x00002554 LBB0_465 - 0x66, 0x0f, 0xbc, 0xc0, //0x00002554 bsfw %ax, %ax - 0x0f, 0xb7, 0xc8, //0x00002558 movzwl %ax, %ecx - 0xe9, 0xf7, 0xe9, 0xff, 0xff, //0x0000255b jmp LBB0_176 - //0x00002560 LBB0_466 - 0x89, 0xc8, //0x00002560 movl %ecx, %eax - 0x49, 0x01, 0xc1, //0x00002562 addq %rax, %r9 - 0x4d, 0x01, 0xe9, //0x00002565 addq %r13, %r9 - 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x00002568 movq $48(%rsp), %r13 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000256d movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x28, //0x00002574 movq $40(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00002579 testq %rdx, %rdx - 0x0f, 0x85, 0x1d, 0x00, 0x00, 0x00, //0x0000257c jne LBB0_469 - 0xe9, 0x89, 0x17, 0x00, 0x00, //0x00002582 jmp LBB0_709 - //0x00002587 LBB0_467 - 0x49, 0x01, 0xc9, //0x00002587 addq %rcx, %r9 - //0x0000258a LBB0_468 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000258a movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x28, //0x00002591 movq $40(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00002596 testq %rdx, %rdx - 0x0f, 0x84, 0x71, 0x17, 0x00, 0x00, //0x00002599 je LBB0_709 - //0x0000259f LBB0_469 - 0x4d, 0x85, 0xc0, //0x0000259f testq %r8, %r8 - 0x0f, 0x84, 0x68, 0x17, 0x00, 0x00, //0x000025a2 je LBB0_709 - 0x4d, 0x85, 0xff, //0x000025a8 testq %r15, %r15 - 0x0f, 0x84, 0x5f, 0x17, 0x00, 0x00, //0x000025ab je LBB0_709 - 0x4d, 0x29, 0xd9, //0x000025b1 subq %r11, %r9 - 0x49, 0x8d, 0x49, 0xff, //0x000025b4 leaq $-1(%r9), %rcx - 0x48, 0x39, 0xca, //0x000025b8 cmpq %rcx, %rdx - 0x0f, 0x84, 0x97, 0x00, 0x00, 0x00, //0x000025bb je LBB0_477 - 0x49, 0x39, 0xc8, //0x000025c1 cmpq %rcx, %r8 - 0x0f, 0x84, 0x8e, 0x00, 0x00, 0x00, //0x000025c4 je LBB0_477 - 0x49, 0x39, 0xcf, //0x000025ca cmpq %rcx, %r15 - 0x0f, 0x84, 0x85, 0x00, 0x00, 0x00, //0x000025cd je LBB0_477 - 0x4d, 0x85, 0xc0, //0x000025d3 testq %r8, %r8 - 0xc5, 0xfe, 0x6f, 0x2d, 0xe2, 0xda, 0xff, 0xff, //0x000025d6 vmovdqu $-9502(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0xfa, 0xda, 0xff, 0xff, //0x000025de vmovdqu $-9478(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x12, 0xdb, 0xff, 0xff, //0x000025e6 vmovdqu $-9454(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x2a, 0xdb, 0xff, 0xff, //0x000025ee vmovdqu $-9430(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000025f6 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0xfd, 0xdb, 0xff, 0xff, //0x000025fb vmovdqu $-9219(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x05, 0x15, 0xdc, 0xff, 0xff, //0x00002603 vmovdqu $-9195(%rip), %ymm0 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0x2d, 0xdc, 0xff, 0xff, //0x0000260b vmovdqu $-9171(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0xc5, 0xdb, 0xff, 0xff, //0x00002613 vmovdqu $-9275(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x7d, 0xdc, 0xff, 0xff, //0x0000261b vmovdqu $-9091(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x95, 0xdb, 0xff, 0xff, //0x00002623 vmovdqu $-9323(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0x0f, 0x8e, 0xa3, 0x00, 0x00, 0x00, //0x0000262b jle LBB0_480 - 0x49, 0x8d, 0x40, 0xff, //0x00002631 leaq $-1(%r8), %rax - 0x49, 0x39, 0xc7, //0x00002635 cmpq %rax, %r15 - 0x0f, 0x84, 0x96, 0x00, 0x00, 0x00, //0x00002638 je LBB0_480 - 0x49, 0xf7, 0xd0, //0x0000263e notq %r8 - 0x4d, 0x89, 0xc1, //0x00002641 movq %r8, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002644 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002649 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000264e movq $8(%rsp), %r15 - 0xe9, 0x67, 0x00, 0x00, 0x00, //0x00002653 jmp LBB0_479 - //0x00002658 LBB0_477 - 0x49, 0xf7, 0xd9, //0x00002658 negq %r9 - //0x0000265b LBB0_478 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x0000265b movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002660 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002665 movq $8(%rsp), %r15 - 0xc5, 0xfe, 0x6f, 0x2d, 0x4e, 0xda, 0xff, 0xff, //0x0000266a vmovdqu $-9650(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x66, 0xda, 0xff, 0xff, //0x00002672 vmovdqu $-9626(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x7e, 0xda, 0xff, 0xff, //0x0000267a vmovdqu $-9602(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x96, 0xda, 0xff, 0xff, //0x00002682 vmovdqu $-9578(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000268a vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0x69, 0xdb, 0xff, 0xff, //0x0000268f vmovdqu $-9367(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x05, 0x81, 0xdb, 0xff, 0xff, //0x00002697 vmovdqu $-9343(%rip), %ymm0 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0x99, 0xdb, 0xff, 0xff, //0x0000269f vmovdqu $-9319(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0x31, 0xdb, 0xff, 0xff, //0x000026a7 vmovdqu $-9423(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0xe9, 0xdb, 0xff, 0xff, //0x000026af vmovdqu $-9239(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x01, 0xdb, 0xff, 0xff, //0x000026b7 vmovdqu $-9471(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - //0x000026bf LBB0_479 - 0xc5, 0x7e, 0x6f, 0x1d, 0x79, 0xda, 0xff, 0xff, //0x000026bf vmovdqu $-9607(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x91, 0xda, 0xff, 0xff, //0x000026c7 vmovdqu $-9583(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - 0xe9, 0xa4, 0x02, 0x00, 0x00, //0x000026cf jmp LBB0_496 - //0x000026d4 LBB0_480 - 0x48, 0x89, 0xd0, //0x000026d4 movq %rdx, %rax - 0x4c, 0x09, 0xf8, //0x000026d7 orq %r15, %rax - 0x0f, 0x99, 0xc1, //0x000026da setns %cl - 0xc5, 0x7e, 0x6f, 0x1d, 0x5b, 0xda, 0xff, 0xff, //0x000026dd vmovdqu $-9637(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x73, 0xda, 0xff, 0xff, //0x000026e5 vmovdqu $-9613(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - 0x0f, 0x88, 0xf8, 0x00, 0x00, 0x00, //0x000026ed js LBB0_485 - 0x4c, 0x39, 0xfa, //0x000026f3 cmpq %r15, %rdx - 0x0f, 0x8c, 0xef, 0x00, 0x00, 0x00, //0x000026f6 jl LBB0_485 - 0x48, 0xf7, 0xd2, //0x000026fc notq %rdx - 0x49, 0x89, 0xd1, //0x000026ff movq %rdx, %r9 - 0xe9, 0x62, 0x02, 0x00, 0x00, //0x00002702 jmp LBB0_495 - //0x00002707 LBB0_483 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002707 vmovdqa %ymm13, %ymm0 - 0x89, 0xd0, //0x0000270b movl %edx, %eax - //0x0000270d LBB0_484 - 0x49, 0xf7, 0xd5, //0x0000270d notq %r13 - 0x49, 0x29, 0xc5, //0x00002710 subq %rax, %r13 - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002713 movq $8(%rsp), %r15 - 0xe9, 0x04, 0xf0, 0xff, 0xff, //0x00002718 jmp LBB0_290 - //0x0000271d LBB0_187 - 0x4d, 0x85, 0xff, //0x0000271d testq %r15, %r15 - 0x0f, 0x85, 0x9f, 0x07, 0x00, 0x00, //0x00002720 jne LBB0_547 - 0x49, 0x01, 0xf1, //0x00002726 addq %rsi, %r9 - 0x49, 0x29, 0xf2, //0x00002729 subq %rsi, %r10 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x0000272c movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002731 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002736 movq $8(%rsp), %r15 - //0x0000273b LBB0_189 - 0x4d, 0x85, 0xd2, //0x0000273b testq %r10, %r10 - 0x0f, 0x8f, 0xfa, 0x07, 0x00, 0x00, //0x0000273e jg LBB0_551 - 0xe9, 0x4c, 0x14, 0x00, 0x00, //0x00002744 jmp LBB0_711 - //0x00002749 LBB0_54 - 0x4c, 0x01, 0xf1, //0x00002749 addq %r14, %rcx - 0x48, 0x83, 0xfb, 0x20, //0x0000274c cmpq $32, %rbx - 0x0f, 0x82, 0x5f, 0x03, 0x00, 0x00, //0x00002750 jb LBB0_505 - //0x00002756 LBB0_55 - 0xc5, 0xfe, 0x6f, 0x01, //0x00002756 vmovdqu (%rcx), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x0000275a vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x0000275e vpmovmskb %ymm1, %esi - 0xc5, 0xfd, 0x74, 0xc7, //0x00002762 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x00002766 vpmovmskb %ymm0, %edx - 0x85, 0xd2, //0x0000276a testl %edx, %edx - 0x4d, 0x89, 0xdf, //0x0000276c movq %r11, %r15 - 0x0f, 0x85, 0xa6, 0x05, 0x00, 0x00, //0x0000276f jne LBB0_529 - 0x4d, 0x85, 0xd2, //0x00002775 testq %r10, %r10 - 0x0f, 0x85, 0xcb, 0x05, 0x00, 0x00, //0x00002778 jne LBB0_531 - 0x45, 0x31, 0xd2, //0x0000277e xorl %r10d, %r10d - 0x48, 0x85, 0xf6, //0x00002781 testq %rsi, %rsi - 0x0f, 0x84, 0x34, 0x06, 0x00, 0x00, //0x00002784 je LBB0_533 - //0x0000278a LBB0_58 - 0x48, 0x0f, 0xbc, 0xc6, //0x0000278a bsfq %rsi, %rax - 0x49, 0x89, 0xca, //0x0000278e movq %rcx, %r10 - 0x4d, 0x29, 0xf2, //0x00002791 subq %r14, %r10 - 0x49, 0x01, 0xc2, //0x00002794 addq %rax, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00002797 addq $1, %r10 - 0xe9, 0x80, 0xeb, 0xff, 0xff, //0x0000279b jmp LBB0_232 - //0x000027a0 LBB0_199 - 0x4d, 0x01, 0xf2, //0x000027a0 addq %r14, %r10 - 0x48, 0x83, 0xfb, 0x20, //0x000027a3 cmpq $32, %rbx - 0x0f, 0x82, 0xef, 0x08, 0x00, 0x00, //0x000027a7 jb LBB0_564 - //0x000027ad LBB0_200 - 0x4c, 0x89, 0xd1, //0x000027ad movq %r10, %rcx - 0xc4, 0xc1, 0x7e, 0x6f, 0x02, //0x000027b0 vmovdqu (%r10), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x000027b5 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd1, //0x000027b9 vpmovmskb %ymm1, %r10d - 0xc5, 0xfd, 0x74, 0xcf, //0x000027bd vpcmpeqb %ymm7, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x000027c1 vpmovmskb %ymm1, %edx - 0x85, 0xd2, //0x000027c5 testl %edx, %edx - 0x0f, 0x85, 0xc5, 0x07, 0x00, 0x00, //0x000027c7 jne LBB0_554 - 0x4d, 0x85, 0xdb, //0x000027cd testq %r11, %r11 - 0x0f, 0x85, 0xf2, 0x07, 0x00, 0x00, //0x000027d0 jne LBB0_556 - 0x45, 0x31, 0xdb, //0x000027d6 xorl %r11d, %r11d - 0x4d, 0x85, 0xd2, //0x000027d9 testq %r10, %r10 - 0x0f, 0x84, 0x60, 0x08, 0x00, 0x00, //0x000027dc je LBB0_558 - //0x000027e2 LBB0_203 - 0x49, 0x0f, 0xbc, 0xd2, //0x000027e2 bsfq %r10, %rdx - 0xe9, 0x5c, 0x08, 0x00, 0x00, //0x000027e6 jmp LBB0_559 - //0x000027eb LBB0_485 - 0x49, 0x8d, 0x47, 0xff, //0x000027eb leaq $-1(%r15), %rax - 0x48, 0x39, 0xc2, //0x000027ef cmpq %rax, %rdx - 0x49, 0xf7, 0xd7, //0x000027f2 notq %r15 - 0x4d, 0x0f, 0x45, 0xf9, //0x000027f5 cmovneq %r9, %r15 - 0x84, 0xc9, //0x000027f9 testb %cl, %cl - 0x4d, 0x0f, 0x45, 0xcf, //0x000027fb cmovneq %r15, %r9 - 0xe9, 0x65, 0x01, 0x00, 0x00, //0x000027ff jmp LBB0_495 - //0x00002804 LBB0_486 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002804 vmovdqa %ymm13, %ymm0 - 0x0f, 0xbc, 0xc3, //0x00002808 bsfl %ebx, %eax - 0xe9, 0x3a, 0x00, 0x00, 0x00, //0x0000280b jmp LBB0_490 - //0x00002810 LBB0_487 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002810 vmovdqa %ymm13, %ymm0 - 0x48, 0x8b, 0x5c, 0x24, 0x20, //0x00002814 movq $32(%rsp), %rbx - 0x49, 0x01, 0xde, //0x00002819 addq %rbx, %r14 - 0x4d, 0x29, 0xee, //0x0000281c subq %r13, %r14 - 0x49, 0x29, 0xce, //0x0000281f subq %rcx, %r14 - 0x49, 0x83, 0xc6, 0xfe, //0x00002822 addq $-2, %r14 - 0x4d, 0x89, 0xf5, //0x00002826 movq %r14, %r13 - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002829 movq $8(%rsp), %r15 - 0xe9, 0xf3, 0xee, 0xff, 0xff, //0x0000282e jmp LBB0_291 - //0x00002833 LBB0_488 - 0x4d, 0x01, 0xf4, //0x00002833 addq %r14, %r12 - 0x48, 0x85, 0xc0, //0x00002836 testq %rax, %rax - 0x0f, 0x85, 0xe9, 0xdc, 0xff, 0xff, //0x00002839 jne LBB0_28 - 0xe9, 0x1e, 0xdd, 0xff, 0xff, //0x0000283f jmp LBB0_33 - //0x00002844 LBB0_489 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002844 vmovdqa %ymm13, %ymm0 - 0x89, 0xd0, //0x00002848 movl %edx, %eax - //0x0000284a LBB0_490 - 0x48, 0x8b, 0x5c, 0x24, 0x20, //0x0000284a movq $32(%rsp), %rbx - 0x49, 0x01, 0xde, //0x0000284f addq %rbx, %r14 - 0x4d, 0x29, 0xee, //0x00002852 subq %r13, %r14 - 0x49, 0x29, 0xc6, //0x00002855 subq %rax, %r14 - 0x4d, 0x29, 0xfe, //0x00002858 subq %r15, %r14 - 0x49, 0x83, 0xc6, 0xfe, //0x0000285b addq $-2, %r14 - 0x4d, 0x89, 0xf5, //0x0000285f movq %r14, %r13 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002862 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002867 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000286c movq $8(%rsp), %r15 - 0xe9, 0xb0, 0xee, 0xff, 0xff, //0x00002871 jmp LBB0_291 - //0x00002876 LBB0_139 - 0x4c, 0x01, 0xf3, //0x00002876 addq %r14, %rbx - 0x48, 0x83, 0xf9, 0x20, //0x00002879 cmpq $32, %rcx - 0x0f, 0x82, 0xda, 0x02, 0x00, 0x00, //0x0000287d jb LBB0_512 - //0x00002883 LBB0_140 - 0xc5, 0xfe, 0x6f, 0x03, //0x00002883 vmovdqu (%rbx), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00002887 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x0000288b vpmovmskb %ymm1, %esi - 0xc5, 0xfd, 0x74, 0xc7, //0x0000288f vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x00002893 vpmovmskb %ymm0, %edx - 0x85, 0xd2, //0x00002897 testl %edx, %edx - 0x4d, 0x89, 0xdf, //0x00002899 movq %r11, %r15 - 0x0f, 0x85, 0xc0, 0x08, 0x00, 0x00, //0x0000289c jne LBB0_575 - 0x4d, 0x85, 0xd2, //0x000028a2 testq %r10, %r10 - 0x0f, 0x85, 0xe5, 0x08, 0x00, 0x00, //0x000028a5 jne LBB0_577 - 0x45, 0x31, 0xd2, //0x000028ab xorl %r10d, %r10d - 0x48, 0x85, 0xf6, //0x000028ae testq %rsi, %rsi - 0x0f, 0x84, 0x4e, 0x09, 0x00, 0x00, //0x000028b1 je LBB0_579 - //0x000028b7 LBB0_143 - 0x48, 0x0f, 0xbc, 0xc6, //0x000028b7 bsfq %rsi, %rax - 0x49, 0x89, 0xda, //0x000028bb movq %rbx, %r10 - 0x4d, 0x29, 0xf2, //0x000028be subq %r14, %r10 - 0x49, 0x01, 0xc2, //0x000028c1 addq %rax, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x000028c4 addq $1, %r10 - 0xe9, 0xbf, 0xee, 0xff, 0xff, //0x000028c8 jmp LBB0_298 - //0x000028cd LBB0_220 - 0x4d, 0x01, 0xf2, //0x000028cd addq %r14, %r10 - 0x48, 0x83, 0xf9, 0x20, //0x000028d0 cmpq $32, %rcx - 0x0f, 0x82, 0x3c, 0x0b, 0x00, 0x00, //0x000028d4 jb LBB0_603 - //0x000028da LBB0_221 - 0x4c, 0x89, 0xd3, //0x000028da movq %r10, %rbx - 0xc4, 0xc1, 0x7e, 0x6f, 0x02, //0x000028dd vmovdqu (%r10), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x000028e2 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd1, //0x000028e6 vpmovmskb %ymm1, %r10d - 0xc5, 0xfd, 0x74, 0xcf, //0x000028ea vpcmpeqb %ymm7, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x000028ee vpmovmskb %ymm1, %edx - 0x85, 0xd2, //0x000028f2 testl %edx, %edx - 0x0f, 0x85, 0x12, 0x0a, 0x00, 0x00, //0x000028f4 jne LBB0_593 - 0x4d, 0x85, 0xdb, //0x000028fa testq %r11, %r11 - 0x0f, 0x85, 0x3f, 0x0a, 0x00, 0x00, //0x000028fd jne LBB0_595 - 0x45, 0x31, 0xdb, //0x00002903 xorl %r11d, %r11d - 0x4d, 0x85, 0xd2, //0x00002906 testq %r10, %r10 - 0x0f, 0x84, 0xad, 0x0a, 0x00, 0x00, //0x00002909 je LBB0_597 - //0x0000290f LBB0_224 - 0x49, 0x0f, 0xbc, 0xd2, //0x0000290f bsfq %r10, %rdx - 0xe9, 0xa9, 0x0a, 0x00, 0x00, //0x00002913 jmp LBB0_598 - //0x00002918 LBB0_491 - 0x49, 0x89, 0xf1, //0x00002918 movq %rsi, %r9 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000291b movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x28, //0x00002922 movq $40(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00002927 testq %rdx, %rdx - 0x0f, 0x85, 0x6f, 0xfc, 0xff, 0xff, //0x0000292a jne LBB0_469 - 0xe9, 0xdb, 0x13, 0x00, 0x00, //0x00002930 jmp LBB0_709 - //0x00002935 LBB0_492 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002935 vmovdqa %ymm13, %ymm0 - 0x0f, 0xbc, 0xc3, //0x00002939 bsfl %ebx, %eax - 0xe9, 0x22, 0x00, 0x00, 0x00, //0x0000293c jmp LBB0_494 - //0x00002941 LBB0_697 - 0x66, 0x0f, 0xbc, 0xc0, //0x00002941 bsfw %ax, %ax - 0x0f, 0xb7, 0xc8, //0x00002945 movzwl %ax, %ecx - 0x48, 0x29, 0xd1, //0x00002948 subq %rdx, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x0000294b movq %rcx, (%r13) - 0x48, 0x85, 0xdb, //0x0000294f testq %rbx, %rbx - 0x0f, 0x8f, 0x48, 0xda, 0xff, 0xff, //0x00002952 jg LBB0_3 - 0xe9, 0x74, 0x13, 0x00, 0x00, //0x00002958 jmp LBB0_698 - //0x0000295d LBB0_493 - 0xc5, 0x7d, 0x7f, 0xe8, //0x0000295d vmovdqa %ymm13, %ymm0 - 0x89, 0xd0, //0x00002961 movl %edx, %eax - //0x00002963 LBB0_494 - 0x49, 0xf7, 0xd1, //0x00002963 notq %r9 - 0x49, 0x29, 0xc1, //0x00002966 subq %rax, %r9 - //0x00002969 LBB0_495 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002969 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x0000296e movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002973 movq $8(%rsp), %r15 - //0x00002978 LBB0_496 - 0x4d, 0x85, 0xc9, //0x00002978 testq %r9, %r9 - 0x0f, 0x88, 0x8c, 0x13, 0x00, 0x00, //0x0000297b js LBB0_708 - 0x49, 0x8b, 0x4d, 0x00, //0x00002981 movq (%r13), %rcx - 0xc5, 0x7d, 0x6f, 0xe8, //0x00002985 vmovdqa %ymm0, %ymm13 - //0x00002989 LBB0_498 - 0x4c, 0x01, 0xc9, //0x00002989 addq %r9, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x0000298c movq %rcx, (%r13) - 0x48, 0x83, 0x3c, 0x24, 0x00, //0x00002990 cmpq $0, (%rsp) - 0x0f, 0x8f, 0x05, 0xda, 0xff, 0xff, //0x00002995 jg LBB0_3 - 0xe9, 0x31, 0x13, 0x00, 0x00, //0x0000299b jmp LBB0_698 - //0x000029a0 LBB0_243 - 0x4c, 0x01, 0xf7, //0x000029a0 addq %r14, %rdi - 0x49, 0x83, 0xf8, 0x20, //0x000029a3 cmpq $32, %r8 - 0x0f, 0x82, 0x2f, 0x02, 0x00, 0x00, //0x000029a7 jb LBB0_517 - //0x000029ad LBB0_244 - 0xc5, 0xfe, 0x6f, 0x07, //0x000029ad vmovdqu (%rdi), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x000029b1 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x000029b5 vpmovmskb %ymm1, %esi - 0xc5, 0xfd, 0x74, 0xc7, //0x000029b9 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x000029bd vpmovmskb %ymm0, %edx - 0x85, 0xd2, //0x000029c1 testl %edx, %edx - 0x0f, 0x85, 0x68, 0x0d, 0x00, 0x00, //0x000029c3 jne LBB0_630 - 0x4d, 0x85, 0xd2, //0x000029c9 testq %r10, %r10 - 0x0f, 0x85, 0x95, 0x0d, 0x00, 0x00, //0x000029cc jne LBB0_632 - 0x45, 0x31, 0xd2, //0x000029d2 xorl %r10d, %r10d - 0xc5, 0x7d, 0x7f, 0xea, //0x000029d5 vmovdqa %ymm13, %ymm2 - 0x48, 0x85, 0xf6, //0x000029d9 testq %rsi, %rsi - 0x0f, 0x84, 0x02, 0x0e, 0x00, 0x00, //0x000029dc je LBB0_634 - //0x000029e2 LBB0_247 - 0x48, 0x0f, 0xbc, 0xc6, //0x000029e2 bsfq %rsi, %rax - 0x48, 0x89, 0xf9, //0x000029e6 movq %rdi, %rcx - 0x4c, 0x29, 0xf1, //0x000029e9 subq %r14, %rcx - 0x48, 0x01, 0xc1, //0x000029ec addq %rax, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x000029ef addq $1, %rcx - 0xe9, 0xf6, 0xfa, 0xff, 0xff, //0x000029f3 jmp LBB0_461 - //0x000029f8 LBB0_394 - 0x4c, 0x01, 0xf1, //0x000029f8 addq %r14, %rcx - 0x49, 0x83, 0xf8, 0x20, //0x000029fb cmpq $32, %r8 - 0x0f, 0x82, 0x01, 0x02, 0x00, 0x00, //0x000029ff jb LBB0_519 - //0x00002a05 LBB0_395 - 0x48, 0x89, 0xcb, //0x00002a05 movq %rcx, %rbx - 0xc5, 0xfe, 0x6f, 0x01, //0x00002a08 vmovdqu (%rcx), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00002a0c vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xc9, //0x00002a10 vpmovmskb %ymm1, %ecx - 0xc5, 0xfd, 0x74, 0xcf, //0x00002a14 vpcmpeqb %ymm7, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x00002a18 vpmovmskb %ymm1, %edx - 0x85, 0xd2, //0x00002a1c testl %edx, %edx - 0x0f, 0x85, 0x86, 0x0e, 0x00, 0x00, //0x00002a1e jne LBB0_647 - 0x4d, 0x85, 0xdb, //0x00002a24 testq %r11, %r11 - 0x0f, 0x85, 0xab, 0x0e, 0x00, 0x00, //0x00002a27 jne LBB0_649 - 0x45, 0x31, 0xdb, //0x00002a2d xorl %r11d, %r11d - 0x48, 0x85, 0xc9, //0x00002a30 testq %rcx, %rcx - 0x0f, 0x84, 0x10, 0x0f, 0x00, 0x00, //0x00002a33 je LBB0_651 - //0x00002a39 LBB0_398 - 0x48, 0x0f, 0xbc, 0xd1, //0x00002a39 bsfq %rcx, %rdx - 0xe9, 0x0c, 0x0f, 0x00, 0x00, //0x00002a3d jmp LBB0_652 - //0x00002a42 LBB0_499 - 0x0f, 0xbc, 0xc6, //0x00002a42 bsfl %esi, %eax - 0xe9, 0xde, 0x00, 0x00, 0x00, //0x00002a45 jmp LBB0_510 - //0x00002a4a LBB0_500 - 0x4c, 0x03, 0x34, 0x24, //0x00002a4a addq (%rsp), %r14 - 0x4d, 0x29, 0xce, //0x00002a4e subq %r9, %r14 - 0x48, 0xf7, 0xd1, //0x00002a51 notq %rcx - 0x4c, 0x01, 0xf1, //0x00002a54 addq %r14, %rcx - 0x49, 0x89, 0xc9, //0x00002a57 movq %rcx, %r9 - 0xe9, 0xfc, 0xfb, 0xff, 0xff, //0x00002a5a jmp LBB0_478 - //0x00002a5f LBB0_501 - 0x49, 0x8d, 0x0c, 0x1e, //0x00002a5f leaq (%r14,%rbx), %rcx - 0x48, 0x83, 0xfe, 0x10, //0x00002a63 cmpq $16, %rsi - 0x0f, 0x83, 0x49, 0xe4, 0xff, 0xff, //0x00002a67 jae LBB0_164 - 0xe9, 0x8c, 0xe4, 0xff, 0xff, //0x00002a6d jmp LBB0_167 - //0x00002a72 LBB0_502 - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002a72 movq $-1, %r9 - 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x00002a79 movq $-1, $40(%rsp) - 0x4c, 0x8b, 0x6c, 0x24, 0x38, //0x00002a82 movq $56(%rsp), %r13 - 0x49, 0x83, 0xf8, 0x10, //0x00002a87 cmpq $16, %r8 - 0x0f, 0x83, 0x5a, 0xdf, 0xff, 0xff, //0x00002a8b jae LBB0_95 - 0xe9, 0xac, 0xe0, 0xff, 0xff, //0x00002a91 jmp LBB0_113 - //0x00002a96 LBB0_503 - 0x89, 0xd0, //0x00002a96 movl %edx, %eax - 0xe9, 0x8b, 0x00, 0x00, 0x00, //0x00002a98 jmp LBB0_510 - //0x00002a9d LBB0_504 - 0x4b, 0x8d, 0x0c, 0x0e, //0x00002a9d leaq (%r14,%r9), %rcx - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00002aa1 movq $-1, %r11 - 0x45, 0x31, 0xd2, //0x00002aa8 xorl %r10d, %r10d - 0x48, 0x83, 0xfb, 0x20, //0x00002aab cmpq $32, %rbx - 0x0f, 0x83, 0xa1, 0xfc, 0xff, 0xff, //0x00002aaf jae LBB0_55 - //0x00002ab5 LBB0_505 - 0x4d, 0x89, 0xdf, //0x00002ab5 movq %r11, %r15 - 0xe9, 0x09, 0x03, 0x00, 0x00, //0x00002ab8 jmp LBB0_534 - //0x00002abd LBB0_506 - 0x4f, 0x8d, 0x14, 0x0e, //0x00002abd leaq (%r14,%r9), %r10 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002ac1 movq $-1, %r15 - 0x45, 0x31, 0xdb, //0x00002ac8 xorl %r11d, %r11d - 0x48, 0x83, 0xfb, 0x20, //0x00002acb cmpq $32, %rbx - 0x0f, 0x83, 0xd8, 0xfc, 0xff, 0xff, //0x00002acf jae LBB0_200 - 0xe9, 0xc2, 0x05, 0x00, 0x00, //0x00002ad5 jmp LBB0_564 - //0x00002ada LBB0_507 - 0x4c, 0x29, 0xf1, //0x00002ada subq %r14, %rcx - 0x48, 0x01, 0xd1, //0x00002add addq %rdx, %rcx - //0x00002ae0 LBB0_508 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002ae0 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002ae5 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002aea movq $8(%rsp), %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002aef vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00002af4 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x9f, 0xd7, 0xff, 0xff, //0x00002af9 vmovdqu $-10337(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xb7, 0xd6, 0xff, 0xff, //0x00002b01 vmovdqu $-10569(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002b09 vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00002b0d vmovdqa %ymm1, %ymm12 - 0x48, 0x89, 0xc3, //0x00002b11 movq %rax, %rbx - 0x49, 0x89, 0x4d, 0x00, //0x00002b14 movq %rcx, (%r13) - 0x48, 0x85, 0xdb, //0x00002b18 testq %rbx, %rbx - 0x0f, 0x8f, 0x7f, 0xd8, 0xff, 0xff, //0x00002b1b jg LBB0_3 - 0xe9, 0x45, 0x10, 0x00, 0x00, //0x00002b21 jmp LBB0_178 - //0x00002b26 LBB0_509 - 0x89, 0xf0, //0x00002b26 movl %esi, %eax - //0x00002b28 LBB0_510 - 0x4c, 0x03, 0x34, 0x24, //0x00002b28 addq (%rsp), %r14 - 0x4d, 0x29, 0xce, //0x00002b2c subq %r9, %r14 - 0x49, 0x29, 0xc6, //0x00002b2f subq %rax, %r14 - 0x49, 0xf7, 0xd5, //0x00002b32 notq %r13 - 0x4d, 0x01, 0xf5, //0x00002b35 addq %r14, %r13 - 0x4d, 0x89, 0xe9, //0x00002b38 movq %r13, %r9 - 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x00002b3b movq $48(%rsp), %r13 - 0xe9, 0x16, 0xfb, 0xff, 0xff, //0x00002b40 jmp LBB0_478 - //0x00002b45 LBB0_511 - 0x4b, 0x8d, 0x1c, 0x0e, //0x00002b45 leaq (%r14,%r9), %rbx - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00002b49 movq $-1, %r11 - 0x45, 0x31, 0xd2, //0x00002b50 xorl %r10d, %r10d - 0x48, 0x83, 0xf9, 0x20, //0x00002b53 cmpq $32, %rcx - 0x0f, 0x83, 0x26, 0xfd, 0xff, 0xff, //0x00002b57 jae LBB0_140 - //0x00002b5d LBB0_512 - 0x4d, 0x89, 0xdf, //0x00002b5d movq %r11, %r15 - 0xe9, 0xa8, 0x06, 0x00, 0x00, //0x00002b60 jmp LBB0_580 - //0x00002b65 LBB0_513 - 0x4f, 0x8d, 0x14, 0x0e, //0x00002b65 leaq (%r14,%r9), %r10 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002b69 movq $-1, %r15 - 0x45, 0x31, 0xdb, //0x00002b70 xorl %r11d, %r11d - 0x48, 0x83, 0xf9, 0x20, //0x00002b73 cmpq $32, %rcx - 0x0f, 0x83, 0x5d, 0xfd, 0xff, 0xff, //0x00002b77 jae LBB0_221 - 0xe9, 0x94, 0x08, 0x00, 0x00, //0x00002b7d jmp LBB0_603 - //0x00002b82 LBB0_514 - 0x4c, 0x01, 0xf1, //0x00002b82 addq %r14, %rcx - 0x48, 0x83, 0xfe, 0x10, //0x00002b85 cmpq $16, %rsi - 0x48, 0x8b, 0x1c, 0x24, //0x00002b89 movq (%rsp), %rbx - 0x0f, 0x83, 0x97, 0xed, 0xff, 0xff, //0x00002b8d jae LBB0_318 - 0xe9, 0xda, 0xed, 0xff, 0xff, //0x00002b93 jmp LBB0_321 - //0x00002b98 LBB0_515 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002b98 movq $-1, %r15 - 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x00002b9f movq $-1, $40(%rsp) - 0x4c, 0x8b, 0x5c, 0x24, 0x38, //0x00002ba8 movq $56(%rsp), %r11 - 0x4d, 0x89, 0xd9, //0x00002bad movq %r11, %r9 - 0x4c, 0x89, 0x6c, 0x24, 0x30, //0x00002bb0 movq %r13, $48(%rsp) - 0x49, 0x83, 0xfa, 0x10, //0x00002bb5 cmpq $16, %r10 - 0x0f, 0x83, 0xff, 0xf6, 0xff, 0xff, //0x00002bb9 jae LBB0_425 - 0xe9, 0x2f, 0xf8, 0xff, 0xff, //0x00002bbf jmp LBB0_443 - //0x00002bc4 LBB0_516 - 0x4b, 0x8d, 0x3c, 0x0e, //0x00002bc4 leaq (%r14,%r9), %rdi - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00002bc8 movq $-1, %r11 - 0x45, 0x31, 0xd2, //0x00002bcf xorl %r10d, %r10d - 0x49, 0x83, 0xf8, 0x20, //0x00002bd2 cmpq $32, %r8 - 0x0f, 0x83, 0xd1, 0xfd, 0xff, 0xff, //0x00002bd6 jae LBB0_244 - //0x00002bdc LBB0_517 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002bdc vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002be0 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002be4 vmovdqa %ymm13, %ymm11 - 0xe9, 0x0a, 0x0c, 0x00, 0x00, //0x00002be9 jmp LBB0_635 - //0x00002bee LBB0_518 - 0x4b, 0x8d, 0x0c, 0x0e, //0x00002bee leaq (%r14,%r9), %rcx - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002bf2 movq $-1, %r10 - 0x45, 0x31, 0xdb, //0x00002bf9 xorl %r11d, %r11d - 0x49, 0x83, 0xf8, 0x20, //0x00002bfc cmpq $32, %r8 - 0x0f, 0x83, 0xff, 0xfd, 0xff, 0xff, //0x00002c00 jae LBB0_395 - //0x00002c06 LBB0_519 - 0x48, 0x89, 0xcb, //0x00002c06 movq %rcx, %rbx - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002c09 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002c0d vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002c11 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002c16 vmovdqa %ymm15, %ymm12 - 0xe9, 0x99, 0x0d, 0x00, 0x00, //0x00002c1b jmp LBB0_657 - //0x00002c20 LBB0_520 - 0x4c, 0x29, 0xf1, //0x00002c20 subq %r14, %rcx - 0x48, 0x01, 0xd1, //0x00002c23 addq %rdx, %rcx - //0x00002c26 LBB0_521 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002c26 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002c2b movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002c30 movq $8(%rsp), %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002c35 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00002c3a vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x59, 0xd6, 0xff, 0xff, //0x00002c3f vmovdqu $-10663(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x71, 0xd5, 0xff, 0xff, //0x00002c47 vmovdqu $-10895(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002c4f vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00002c53 vmovdqa %ymm1, %ymm12 - 0xe9, 0x75, 0xf3, 0xff, 0xff, //0x00002c57 jmp LBB0_383 - //0x00002c5c LBB0_522 - 0x49, 0x39, 0xf2, //0x00002c5c cmpq %rsi, %r10 - 0x0f, 0x84, 0x30, 0x0f, 0x00, 0x00, //0x00002c5f je LBB0_711 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002c65 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002c69 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002c6d vmovdqa %ymm13, %ymm11 - 0x49, 0x01, 0xf1, //0x00002c72 addq %rsi, %r9 - 0x49, 0x83, 0xc1, 0x01, //0x00002c75 addq $1, %r9 - 0x48, 0xf7, 0xd6, //0x00002c79 notq %rsi - 0x49, 0x01, 0xf2, //0x00002c7c addq %rsi, %r10 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002c7f movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002c84 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002c89 movq $8(%rsp), %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002c8e vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x05, 0xd6, 0xff, 0xff, //0x00002c93 vmovdqu $-10747(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x1d, 0xd5, 0xff, 0xff, //0x00002c9b vmovdqu $-10979(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002ca3 vmovdqa %ymm0, %ymm11 - 0x4d, 0x85, 0xd2, //0x00002ca7 testq %r10, %r10 - 0x0f, 0x8f, 0x30, 0x00, 0x00, 0x00, //0x00002caa jg LBB0_526 - 0xe9, 0xe0, 0x0e, 0x00, 0x00, //0x00002cb0 jmp LBB0_711 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002cb5 .p2align 4, 0x90 - //0x00002cc0 LBB0_524 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002cc0 movq $-2, %rcx - 0xba, 0x02, 0x00, 0x00, 0x00, //0x00002cc7 movl $2, %edx - 0x49, 0x01, 0xd1, //0x00002ccc addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002ccf movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x00002cd7 addq %rcx, %r10 - 0x0f, 0x8e, 0xb5, 0x0e, 0x00, 0x00, //0x00002cda jle LBB0_711 - //0x00002ce0 LBB0_526 - 0x41, 0x0f, 0xb6, 0x09, //0x00002ce0 movzbl (%r9), %ecx - 0x80, 0xf9, 0x5c, //0x00002ce4 cmpb $92, %cl - 0x0f, 0x84, 0xd3, 0xff, 0xff, 0xff, //0x00002ce7 je LBB0_524 - 0x80, 0xf9, 0x22, //0x00002ced cmpb $34, %cl - 0x0f, 0x84, 0x22, 0x0a, 0x00, 0x00, //0x00002cf0 je LBB0_629 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002cf6 movq $-1, %rcx - 0xba, 0x01, 0x00, 0x00, 0x00, //0x00002cfd movl $1, %edx - 0x49, 0x01, 0xd1, //0x00002d02 addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002d05 movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x00002d0d addq %rcx, %r10 - 0x0f, 0x8f, 0xca, 0xff, 0xff, 0xff, //0x00002d10 jg LBB0_526 - 0xe9, 0x7a, 0x0e, 0x00, 0x00, //0x00002d16 jmp LBB0_711 - //0x00002d1b LBB0_529 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002d1b vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002d1f vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002d23 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002d28 vmovdqa %ymm15, %ymm12 - 0x49, 0x83, 0xff, 0xff, //0x00002d2d cmpq $-1, %r15 - 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00002d31 jne LBB0_532 - 0x48, 0x89, 0xc8, //0x00002d37 movq %rcx, %rax - 0x4c, 0x29, 0xf0, //0x00002d3a subq %r14, %rax - 0x4c, 0x0f, 0xbc, 0xda, //0x00002d3d bsfq %rdx, %r11 - 0x49, 0x01, 0xc3, //0x00002d41 addq %rax, %r11 - 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00002d44 jmp LBB0_532 - //0x00002d49 LBB0_531 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002d49 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002d4d vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002d51 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002d56 vmovdqa %ymm15, %ymm12 - //0x00002d5b LBB0_532 - 0x44, 0x89, 0xd0, //0x00002d5b movl %r10d, %eax - 0xf7, 0xd0, //0x00002d5e notl %eax - 0x21, 0xd0, //0x00002d60 andl %edx, %eax - 0x8d, 0x3c, 0x00, //0x00002d62 leal (%rax,%rax), %edi - 0x45, 0x8d, 0x3c, 0x42, //0x00002d65 leal (%r10,%rax,2), %r15d - 0xf7, 0xd7, //0x00002d69 notl %edi - 0x21, 0xd7, //0x00002d6b andl %edx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002d6d andl $-1431655766, %edi - 0x45, 0x31, 0xd2, //0x00002d73 xorl %r10d, %r10d - 0x01, 0xc7, //0x00002d76 addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc2, //0x00002d78 setb %r10b - 0x01, 0xff, //0x00002d7c addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00002d7e xorl $1431655765, %edi - 0x44, 0x21, 0xff, //0x00002d84 andl %r15d, %edi - 0xf7, 0xd7, //0x00002d87 notl %edi - 0x21, 0xfe, //0x00002d89 andl %edi, %esi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002d8b vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00002d90 vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00002d95 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0xfe, 0xd4, 0xff, 0xff, //0x00002d9a vmovdqu $-11010(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x16, 0xd4, 0xff, 0xff, //0x00002da2 vmovdqu $-11242(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002daa vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00002dae vmovdqa %ymm1, %ymm12 - 0x4d, 0x89, 0xdf, //0x00002db2 movq %r11, %r15 - 0x48, 0x85, 0xf6, //0x00002db5 testq %rsi, %rsi - 0x0f, 0x85, 0xcc, 0xf9, 0xff, 0xff, //0x00002db8 jne LBB0_58 - //0x00002dbe LBB0_533 - 0x48, 0x83, 0xc1, 0x20, //0x00002dbe addq $32, %rcx - 0x48, 0x83, 0xc3, 0xe0, //0x00002dc2 addq $-32, %rbx - //0x00002dc6 LBB0_534 - 0x4d, 0x85, 0xd2, //0x00002dc6 testq %r10, %r10 - 0x0f, 0x85, 0x0d, 0x07, 0x00, 0x00, //0x00002dc9 jne LBB0_614 - 0x4c, 0x89, 0xf7, //0x00002dcf movq %r14, %rdi - 0x48, 0xf7, 0xd7, //0x00002dd2 notq %rdi - 0x4c, 0x89, 0xfe, //0x00002dd5 movq %r15, %rsi - 0x49, 0x89, 0xca, //0x00002dd8 movq %rcx, %r10 - 0x48, 0x85, 0xdb, //0x00002ddb testq %rbx, %rbx - 0x0f, 0x84, 0xa2, 0x00, 0x00, 0x00, //0x00002dde je LBB0_546 - //0x00002de4 LBB0_536 - 0x48, 0x83, 0xc7, 0x01, //0x00002de4 addq $1, %rdi - //0x00002de8 LBB0_537 - 0x31, 0xd2, //0x00002de8 xorl %edx, %edx - //0x00002dea LBB0_538 - 0x41, 0x0f, 0xb6, 0x0c, 0x12, //0x00002dea movzbl (%r10,%rdx), %ecx - 0x80, 0xf9, 0x22, //0x00002def cmpb $34, %cl - 0x0f, 0x84, 0x87, 0x00, 0x00, 0x00, //0x00002df2 je LBB0_545 - 0x80, 0xf9, 0x5c, //0x00002df8 cmpb $92, %cl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002dfb je LBB0_543 - 0x48, 0x83, 0xc2, 0x01, //0x00002e01 addq $1, %rdx - 0x48, 0x39, 0xd3, //0x00002e05 cmpq %rdx, %rbx - 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x00002e08 jne LBB0_538 - 0xe9, 0x7b, 0x00, 0x00, 0x00, //0x00002e0e jmp LBB0_541 - //0x00002e13 LBB0_543 - 0x48, 0x8d, 0x43, 0xff, //0x00002e13 leaq $-1(%rbx), %rax - 0x48, 0x39, 0xd0, //0x00002e17 cmpq %rdx, %rax - 0x0f, 0x84, 0x30, 0x0d, 0x00, 0x00, //0x00002e1a je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002e20 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002e24 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002e28 vmovdqa %ymm13, %ymm11 - 0x4a, 0x8d, 0x04, 0x17, //0x00002e2d leaq (%rdi,%r10), %rax - 0x48, 0x01, 0xd0, //0x00002e31 addq %rdx, %rax - 0x48, 0x83, 0xfe, 0xff, //0x00002e34 cmpq $-1, %rsi - 0x4c, 0x0f, 0x44, 0xf8, //0x00002e38 cmoveq %rax, %r15 - 0x48, 0x0f, 0x44, 0xf0, //0x00002e3c cmoveq %rax, %rsi - 0x49, 0x01, 0xd2, //0x00002e40 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x02, //0x00002e43 addq $2, %r10 - 0x48, 0x89, 0xd8, //0x00002e47 movq %rbx, %rax - 0x48, 0x29, 0xd0, //0x00002e4a subq %rdx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00002e4d addq $-2, %rax - 0x48, 0x83, 0xc3, 0xfe, //0x00002e51 addq $-2, %rbx - 0x48, 0x39, 0xd3, //0x00002e55 cmpq %rdx, %rbx - 0x48, 0x89, 0xc3, //0x00002e58 movq %rax, %rbx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002e5b vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x38, 0xd4, 0xff, 0xff, //0x00002e60 vmovdqu $-11208(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x50, 0xd3, 0xff, 0xff, //0x00002e68 vmovdqu $-11440(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002e70 vmovdqa %ymm0, %ymm11 - 0x0f, 0x85, 0x6e, 0xff, 0xff, 0xff, //0x00002e74 jne LBB0_537 - 0xe9, 0xd1, 0x0c, 0x00, 0x00, //0x00002e7a jmp LBB0_681 - //0x00002e7f LBB0_545 - 0x49, 0x01, 0xd2, //0x00002e7f addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00002e82 addq $1, %r10 - //0x00002e86 LBB0_546 - 0x4d, 0x29, 0xf2, //0x00002e86 subq %r14, %r10 - 0xe9, 0x92, 0xe4, 0xff, 0xff, //0x00002e89 jmp LBB0_232 - //0x00002e8e LBB0_541 - 0x80, 0xf9, 0x22, //0x00002e8e cmpb $34, %cl - 0x0f, 0x85, 0xb9, 0x0c, 0x00, 0x00, //0x00002e91 jne LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002e97 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002e9b vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002e9f vmovdqa %ymm13, %ymm11 - 0x49, 0x01, 0xda, //0x00002ea4 addq %rbx, %r10 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002ea7 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xec, 0xd3, 0xff, 0xff, //0x00002eac vmovdqu $-11284(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x04, 0xd3, 0xff, 0xff, //0x00002eb4 vmovdqu $-11516(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002ebc vmovdqa %ymm0, %ymm11 - 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00002ec0 jmp LBB0_546 - //0x00002ec5 LBB0_547 - 0x49, 0x39, 0xf2, //0x00002ec5 cmpq %rsi, %r10 - 0x0f, 0x84, 0xc7, 0x0c, 0x00, 0x00, //0x00002ec8 je LBB0_711 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002ece vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002ed2 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002ed6 vmovdqa %ymm13, %ymm11 - 0x49, 0x01, 0xf1, //0x00002edb addq %rsi, %r9 - 0x49, 0x83, 0xc1, 0x01, //0x00002ede addq $1, %r9 - 0x48, 0xf7, 0xd6, //0x00002ee2 notq %rsi - 0x49, 0x01, 0xf2, //0x00002ee5 addq %rsi, %r10 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002ee8 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002eed movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002ef2 movq $8(%rsp), %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002ef7 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x9c, 0xd3, 0xff, 0xff, //0x00002efc vmovdqu $-11364(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xb4, 0xd2, 0xff, 0xff, //0x00002f04 vmovdqu $-11596(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002f0c vmovdqa %ymm0, %ymm11 - 0x4d, 0x85, 0xd2, //0x00002f10 testq %r10, %r10 - 0x0f, 0x8f, 0x25, 0x00, 0x00, 0x00, //0x00002f13 jg LBB0_551 - 0xe9, 0x77, 0x0c, 0x00, 0x00, //0x00002f19 jmp LBB0_711 - //0x00002f1e LBB0_549 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002f1e movq $-2, %rcx - 0xba, 0x02, 0x00, 0x00, 0x00, //0x00002f25 movl $2, %edx - 0x49, 0x01, 0xd1, //0x00002f2a addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002f2d movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x00002f35 addq %rcx, %r10 - 0x0f, 0x8e, 0x57, 0x0c, 0x00, 0x00, //0x00002f38 jle LBB0_711 - //0x00002f3e LBB0_551 - 0x41, 0x0f, 0xb6, 0x09, //0x00002f3e movzbl (%r9), %ecx - 0x80, 0xf9, 0x5c, //0x00002f42 cmpb $92, %cl - 0x0f, 0x84, 0xd3, 0xff, 0xff, 0xff, //0x00002f45 je LBB0_549 - 0x80, 0xf9, 0x22, //0x00002f4b cmpb $34, %cl - 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00002f4e je LBB0_678 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002f54 movq $-1, %rcx - 0xba, 0x01, 0x00, 0x00, 0x00, //0x00002f5b movl $1, %edx - 0x49, 0x01, 0xd1, //0x00002f60 addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002f63 movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x00002f6b addq %rcx, %r10 - 0x0f, 0x8f, 0xca, 0xff, 0xff, 0xff, //0x00002f6e jg LBB0_551 - 0xe9, 0x1c, 0x0c, 0x00, 0x00, //0x00002f74 jmp LBB0_711 - //0x00002f79 LBB0_678 - 0x4d, 0x29, 0xf1, //0x00002f79 subq %r14, %r9 - 0x49, 0x83, 0xc1, 0x01, //0x00002f7c addq $1, %r9 - 0x4d, 0x89, 0x4d, 0x00, //0x00002f80 movq %r9, (%r13) - 0x4d, 0x85, 0xc0, //0x00002f84 testq %r8, %r8 - 0x0f, 0x8f, 0x24, 0xe8, 0xff, 0xff, //0x00002f87 jg LBB0_300 - 0xe9, 0x9a, 0x0b, 0x00, 0x00, //0x00002f8d jmp LBB0_679 - //0x00002f92 LBB0_554 - 0xc5, 0x7d, 0x7f, 0xe2, //0x00002f92 vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x00002f96 vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002f9a vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002f9f vmovdqa %ymm15, %ymm12 - 0x4c, 0x89, 0x3c, 0x24, //0x00002fa4 movq %r15, (%rsp) - 0x49, 0x83, 0xff, 0xff, //0x00002fa8 cmpq $-1, %r15 - 0x0f, 0x85, 0x2c, 0x00, 0x00, 0x00, //0x00002fac jne LBB0_557 - 0x48, 0x89, 0xc8, //0x00002fb2 movq %rcx, %rax - 0x4c, 0x29, 0xf0, //0x00002fb5 subq %r14, %rax - 0x48, 0x0f, 0xbc, 0xf2, //0x00002fb8 bsfq %rdx, %rsi - 0x48, 0x01, 0xc6, //0x00002fbc addq %rax, %rsi - 0x48, 0x89, 0x34, 0x24, //0x00002fbf movq %rsi, (%rsp) - 0xe9, 0x16, 0x00, 0x00, 0x00, //0x00002fc3 jmp LBB0_557 - //0x00002fc8 LBB0_556 - 0x4c, 0x89, 0x3c, 0x24, //0x00002fc8 movq %r15, (%rsp) - 0xc5, 0x7d, 0x7f, 0xe2, //0x00002fcc vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x00002fd0 vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002fd4 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002fd9 vmovdqa %ymm15, %ymm12 - //0x00002fde LBB0_557 - 0x44, 0x89, 0xd8, //0x00002fde movl %r11d, %eax - 0xf7, 0xd0, //0x00002fe1 notl %eax - 0x21, 0xd0, //0x00002fe3 andl %edx, %eax - 0x8d, 0x3c, 0x00, //0x00002fe5 leal (%rax,%rax), %edi - 0x41, 0x8d, 0x34, 0x43, //0x00002fe8 leal (%r11,%rax,2), %esi - 0xf7, 0xd7, //0x00002fec notl %edi - 0x21, 0xd7, //0x00002fee andl %edx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002ff0 andl $-1431655766, %edi - 0x45, 0x31, 0xdb, //0x00002ff6 xorl %r11d, %r11d - 0x01, 0xc7, //0x00002ff9 addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc3, //0x00002ffb setb %r11b - 0x01, 0xff, //0x00002fff addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00003001 xorl $1431655765, %edi - 0x21, 0xf7, //0x00003007 andl %esi, %edi - 0xf7, 0xd7, //0x00003009 notl %edi - 0x41, 0x21, 0xfa, //0x0000300b andl %edi, %r10d - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000300e vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003013 vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003018 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x7b, 0xd2, 0xff, 0xff, //0x0000301d vmovdqu $-11653(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x93, 0xd1, 0xff, 0xff, //0x00003025 vmovdqu $-11885(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x0000302d vmovdqa %ymm1, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe2, //0x00003031 vmovdqa %ymm2, %ymm12 - 0x4c, 0x8b, 0x3c, 0x24, //0x00003035 movq (%rsp), %r15 - 0x4d, 0x85, 0xd2, //0x00003039 testq %r10, %r10 - 0x0f, 0x85, 0xa0, 0xf7, 0xff, 0xff, //0x0000303c jne LBB0_203 - //0x00003042 LBB0_558 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00003042 movl $64, %edx - //0x00003047 LBB0_559 - 0xc5, 0xbd, 0x64, 0xc8, //0x00003047 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x0000304b vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x00003050 vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x00003054 vpmovmskb %ymm0, %esi - 0x0f, 0xbc, 0xfe, //0x00003058 bsfl %esi, %edi - 0x4d, 0x85, 0xd2, //0x0000305b testq %r10, %r10 - 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x0000305e je LBB0_562 - 0x85, 0xf6, //0x00003064 testl %esi, %esi - 0xb8, 0x40, 0x00, 0x00, 0x00, //0x00003066 movl $64, %eax - 0x0f, 0x44, 0xf8, //0x0000306b cmovel %eax, %edi - 0x48, 0x39, 0xfa, //0x0000306e cmpq %rdi, %rdx - 0x49, 0x89, 0xca, //0x00003071 movq %rcx, %r10 - 0x0f, 0x87, 0x15, 0x0d, 0x00, 0x00, //0x00003074 ja LBB0_721 - 0x4d, 0x29, 0xf2, //0x0000307a subq %r14, %r10 - 0x49, 0x01, 0xd2, //0x0000307d addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003080 addq $1, %r10 - 0xe9, 0x97, 0xe2, 0xff, 0xff, //0x00003084 jmp LBB0_232 - //0x00003089 LBB0_562 - 0x85, 0xf6, //0x00003089 testl %esi, %esi - 0x49, 0x89, 0xca, //0x0000308b movq %rcx, %r10 - 0x0f, 0x85, 0x08, 0x0d, 0x00, 0x00, //0x0000308e jne LBB0_722 - 0x49, 0x83, 0xc2, 0x20, //0x00003094 addq $32, %r10 - 0x48, 0x83, 0xc3, 0xe0, //0x00003098 addq $-32, %rbx - //0x0000309c LBB0_564 - 0x4d, 0x85, 0xdb, //0x0000309c testq %r11, %r11 - 0x0f, 0x85, 0x98, 0x04, 0x00, 0x00, //0x0000309f jne LBB0_616 - 0x4c, 0x89, 0xf9, //0x000030a5 movq %r15, %rcx - 0x48, 0x85, 0xdb, //0x000030a8 testq %rbx, %rbx - 0x0f, 0x84, 0x9f, 0x0a, 0x00, 0x00, //0x000030ab je LBB0_681 - //0x000030b1 LBB0_566 - 0x41, 0x0f, 0xb6, 0x12, //0x000030b1 movzbl (%r10), %edx - 0x80, 0xfa, 0x22, //0x000030b5 cmpb $34, %dl - 0x0f, 0x84, 0x98, 0x00, 0x00, 0x00, //0x000030b8 je LBB0_574 - 0x80, 0xfa, 0x5c, //0x000030be cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x000030c1 je LBB0_570 - 0x80, 0xfa, 0x1f, //0x000030c7 cmpb $31, %dl - 0x0f, 0x86, 0xd7, 0x0c, 0x00, 0x00, //0x000030ca jbe LBB0_723 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000030d0 movq $-1, %rdx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x000030d7 movl $1, %esi - 0x49, 0x01, 0xf2, //0x000030dc addq %rsi, %r10 - 0x48, 0x01, 0xd3, //0x000030df addq %rdx, %rbx - 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x000030e2 jne LBB0_566 - 0xe9, 0x63, 0x0a, 0x00, 0x00, //0x000030e8 jmp LBB0_681 - //0x000030ed LBB0_570 - 0x48, 0x83, 0xfb, 0x01, //0x000030ed cmpq $1, %rbx - 0x0f, 0x84, 0x59, 0x0a, 0x00, 0x00, //0x000030f1 je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x000030f7 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000030fb vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000030ff vmovdqa %ymm13, %ymm11 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00003104 movq $-2, %rdx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x0000310b movl $2, %esi - 0x48, 0x83, 0xf9, 0xff, //0x00003110 cmpq $-1, %rcx - 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00003114 jne LBB0_573 - 0x4d, 0x89, 0xd7, //0x0000311a movq %r10, %r15 - 0x4d, 0x29, 0xf7, //0x0000311d subq %r14, %r15 - 0x4c, 0x89, 0xf9, //0x00003120 movq %r15, %rcx - //0x00003123 LBB0_573 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003123 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003128 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x6b, 0xd1, 0xff, 0xff, //0x0000312d vmovdqu $-11925(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x83, 0xd0, 0xff, 0xff, //0x00003135 vmovdqu $-12157(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x0000313d vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00003141 vmovdqa %ymm1, %ymm12 - 0x49, 0x01, 0xf2, //0x00003145 addq %rsi, %r10 - 0x48, 0x01, 0xd3, //0x00003148 addq %rdx, %rbx - 0x0f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x0000314b jne LBB0_566 - 0xe9, 0xfa, 0x09, 0x00, 0x00, //0x00003151 jmp LBB0_681 - //0x00003156 LBB0_574 - 0x4d, 0x29, 0xf2, //0x00003156 subq %r14, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003159 addq $1, %r10 - 0xe9, 0xbe, 0xe1, 0xff, 0xff, //0x0000315d jmp LBB0_232 - //0x00003162 LBB0_575 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003162 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00003166 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000316a vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000316f vmovdqa %ymm15, %ymm12 - 0x49, 0x83, 0xff, 0xff, //0x00003174 cmpq $-1, %r15 - 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003178 jne LBB0_578 - 0x48, 0x89, 0xd8, //0x0000317e movq %rbx, %rax - 0x4c, 0x29, 0xf0, //0x00003181 subq %r14, %rax - 0x4c, 0x0f, 0xbc, 0xda, //0x00003184 bsfq %rdx, %r11 - 0x49, 0x01, 0xc3, //0x00003188 addq %rax, %r11 - 0xe9, 0x12, 0x00, 0x00, 0x00, //0x0000318b jmp LBB0_578 - //0x00003190 LBB0_577 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003190 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00003194 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003198 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000319d vmovdqa %ymm15, %ymm12 - //0x000031a2 LBB0_578 - 0x44, 0x89, 0xd0, //0x000031a2 movl %r10d, %eax - 0xf7, 0xd0, //0x000031a5 notl %eax - 0x21, 0xd0, //0x000031a7 andl %edx, %eax - 0x8d, 0x3c, 0x00, //0x000031a9 leal (%rax,%rax), %edi - 0x45, 0x8d, 0x3c, 0x42, //0x000031ac leal (%r10,%rax,2), %r15d - 0xf7, 0xd7, //0x000031b0 notl %edi - 0x21, 0xd7, //0x000031b2 andl %edx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x000031b4 andl $-1431655766, %edi - 0x45, 0x31, 0xd2, //0x000031ba xorl %r10d, %r10d - 0x01, 0xc7, //0x000031bd addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc2, //0x000031bf setb %r10b - 0x01, 0xff, //0x000031c3 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x000031c5 xorl $1431655765, %edi - 0x44, 0x21, 0xff, //0x000031cb andl %r15d, %edi - 0xf7, 0xd7, //0x000031ce notl %edi - 0x21, 0xfe, //0x000031d0 andl %edi, %esi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000031d2 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x000031d7 vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000031dc vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0xb7, 0xd0, 0xff, 0xff, //0x000031e1 vmovdqu $-12105(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xcf, 0xcf, 0xff, 0xff, //0x000031e9 vmovdqu $-12337(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000031f1 vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x000031f5 vmovdqa %ymm1, %ymm12 - 0x4d, 0x89, 0xdf, //0x000031f9 movq %r11, %r15 - 0x48, 0x85, 0xf6, //0x000031fc testq %rsi, %rsi - 0x0f, 0x85, 0xb2, 0xf6, 0xff, 0xff, //0x000031ff jne LBB0_143 - //0x00003205 LBB0_579 - 0x48, 0x83, 0xc3, 0x20, //0x00003205 addq $32, %rbx - 0x48, 0x83, 0xc1, 0xe0, //0x00003209 addq $-32, %rcx - //0x0000320d LBB0_580 - 0x4d, 0x85, 0xd2, //0x0000320d testq %r10, %r10 - 0x0f, 0x85, 0x8a, 0x03, 0x00, 0x00, //0x00003210 jne LBB0_618 - 0x4c, 0x89, 0xf6, //0x00003216 movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x00003219 notq %rsi - 0x4c, 0x89, 0xff, //0x0000321c movq %r15, %rdi - 0x49, 0x89, 0xda, //0x0000321f movq %rbx, %r10 - 0x48, 0x85, 0xc9, //0x00003222 testq %rcx, %rcx - 0x0f, 0x84, 0xa2, 0x00, 0x00, 0x00, //0x00003225 je LBB0_592 - //0x0000322b LBB0_582 - 0x48, 0x83, 0xc6, 0x01, //0x0000322b addq $1, %rsi - //0x0000322f LBB0_583 - 0x31, 0xd2, //0x0000322f xorl %edx, %edx - //0x00003231 LBB0_584 - 0x41, 0x0f, 0xb6, 0x1c, 0x12, //0x00003231 movzbl (%r10,%rdx), %ebx - 0x80, 0xfb, 0x22, //0x00003236 cmpb $34, %bl - 0x0f, 0x84, 0x87, 0x00, 0x00, 0x00, //0x00003239 je LBB0_591 - 0x80, 0xfb, 0x5c, //0x0000323f cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003242 je LBB0_589 - 0x48, 0x83, 0xc2, 0x01, //0x00003248 addq $1, %rdx - 0x48, 0x39, 0xd1, //0x0000324c cmpq %rdx, %rcx - 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x0000324f jne LBB0_584 - 0xe9, 0x7b, 0x00, 0x00, 0x00, //0x00003255 jmp LBB0_587 - //0x0000325a LBB0_589 - 0x48, 0x8d, 0x41, 0xff, //0x0000325a leaq $-1(%rcx), %rax - 0x48, 0x39, 0xd0, //0x0000325e cmpq %rdx, %rax - 0x0f, 0x84, 0xe9, 0x08, 0x00, 0x00, //0x00003261 je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003267 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x0000326b vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000326f vmovdqa %ymm13, %ymm11 - 0x4a, 0x8d, 0x04, 0x16, //0x00003274 leaq (%rsi,%r10), %rax - 0x48, 0x01, 0xd0, //0x00003278 addq %rdx, %rax - 0x48, 0x83, 0xff, 0xff, //0x0000327b cmpq $-1, %rdi - 0x4c, 0x0f, 0x44, 0xf8, //0x0000327f cmoveq %rax, %r15 - 0x48, 0x0f, 0x44, 0xf8, //0x00003283 cmoveq %rax, %rdi - 0x49, 0x01, 0xd2, //0x00003287 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x02, //0x0000328a addq $2, %r10 - 0x48, 0x89, 0xc8, //0x0000328e movq %rcx, %rax - 0x48, 0x29, 0xd0, //0x00003291 subq %rdx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00003294 addq $-2, %rax - 0x48, 0x83, 0xc1, 0xfe, //0x00003298 addq $-2, %rcx - 0x48, 0x39, 0xd1, //0x0000329c cmpq %rdx, %rcx - 0x48, 0x89, 0xc1, //0x0000329f movq %rax, %rcx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000032a2 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xf1, 0xcf, 0xff, 0xff, //0x000032a7 vmovdqu $-12303(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x09, 0xcf, 0xff, 0xff, //0x000032af vmovdqu $-12535(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000032b7 vmovdqa %ymm0, %ymm11 - 0x0f, 0x85, 0x6e, 0xff, 0xff, 0xff, //0x000032bb jne LBB0_583 - 0xe9, 0x8a, 0x08, 0x00, 0x00, //0x000032c1 jmp LBB0_681 - //0x000032c6 LBB0_591 - 0x49, 0x01, 0xd2, //0x000032c6 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x000032c9 addq $1, %r10 - //0x000032cd LBB0_592 - 0x4d, 0x29, 0xf2, //0x000032cd subq %r14, %r10 - 0xe9, 0xb7, 0xe4, 0xff, 0xff, //0x000032d0 jmp LBB0_298 - //0x000032d5 LBB0_587 - 0x80, 0xfb, 0x22, //0x000032d5 cmpb $34, %bl - 0x0f, 0x85, 0x72, 0x08, 0x00, 0x00, //0x000032d8 jne LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x000032de vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000032e2 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000032e6 vmovdqa %ymm13, %ymm11 - 0x49, 0x01, 0xca, //0x000032eb addq %rcx, %r10 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000032ee vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xa5, 0xcf, 0xff, 0xff, //0x000032f3 vmovdqu $-12379(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xbd, 0xce, 0xff, 0xff, //0x000032fb vmovdqu $-12611(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00003303 vmovdqa %ymm0, %ymm11 - 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003307 jmp LBB0_592 - //0x0000330c LBB0_593 - 0xc5, 0x7d, 0x7f, 0xe2, //0x0000330c vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x00003310 vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003314 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003319 vmovdqa %ymm15, %ymm12 - 0x4c, 0x89, 0x3c, 0x24, //0x0000331e movq %r15, (%rsp) - 0x49, 0x83, 0xff, 0xff, //0x00003322 cmpq $-1, %r15 - 0x0f, 0x85, 0x2c, 0x00, 0x00, 0x00, //0x00003326 jne LBB0_596 - 0x48, 0x89, 0xd8, //0x0000332c movq %rbx, %rax - 0x4c, 0x29, 0xf0, //0x0000332f subq %r14, %rax - 0x48, 0x0f, 0xbc, 0xf2, //0x00003332 bsfq %rdx, %rsi - 0x48, 0x01, 0xc6, //0x00003336 addq %rax, %rsi - 0x48, 0x89, 0x34, 0x24, //0x00003339 movq %rsi, (%rsp) - 0xe9, 0x16, 0x00, 0x00, 0x00, //0x0000333d jmp LBB0_596 - //0x00003342 LBB0_595 - 0x4c, 0x89, 0x3c, 0x24, //0x00003342 movq %r15, (%rsp) - 0xc5, 0x7d, 0x7f, 0xe2, //0x00003346 vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x0000334a vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000334e vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003353 vmovdqa %ymm15, %ymm12 - //0x00003358 LBB0_596 - 0x44, 0x89, 0xd8, //0x00003358 movl %r11d, %eax - 0xf7, 0xd0, //0x0000335b notl %eax - 0x21, 0xd0, //0x0000335d andl %edx, %eax - 0x8d, 0x34, 0x00, //0x0000335f leal (%rax,%rax), %esi - 0x41, 0x8d, 0x3c, 0x43, //0x00003362 leal (%r11,%rax,2), %edi - 0xf7, 0xd6, //0x00003366 notl %esi - 0x21, 0xd6, //0x00003368 andl %edx, %esi - 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000336a andl $-1431655766, %esi - 0x45, 0x31, 0xdb, //0x00003370 xorl %r11d, %r11d - 0x01, 0xc6, //0x00003373 addl %eax, %esi - 0x41, 0x0f, 0x92, 0xc3, //0x00003375 setb %r11b - 0x01, 0xf6, //0x00003379 addl %esi, %esi - 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x0000337b xorl $1431655765, %esi - 0x21, 0xfe, //0x00003381 andl %edi, %esi - 0xf7, 0xd6, //0x00003383 notl %esi - 0x41, 0x21, 0xf2, //0x00003385 andl %esi, %r10d - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003388 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x0000338d vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003392 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x01, 0xcf, 0xff, 0xff, //0x00003397 vmovdqu $-12543(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x19, 0xce, 0xff, 0xff, //0x0000339f vmovdqu $-12775(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x000033a7 vmovdqa %ymm1, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe2, //0x000033ab vmovdqa %ymm2, %ymm12 - 0x4c, 0x8b, 0x3c, 0x24, //0x000033af movq (%rsp), %r15 - 0x4d, 0x85, 0xd2, //0x000033b3 testq %r10, %r10 - 0x0f, 0x85, 0x53, 0xf5, 0xff, 0xff, //0x000033b6 jne LBB0_224 - //0x000033bc LBB0_597 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x000033bc movl $64, %edx - //0x000033c1 LBB0_598 - 0xc5, 0xbd, 0x64, 0xc8, //0x000033c1 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x000033c5 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x000033ca vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x000033ce vpmovmskb %ymm0, %esi - 0x0f, 0xbc, 0xfe, //0x000033d2 bsfl %esi, %edi - 0x4d, 0x85, 0xd2, //0x000033d5 testq %r10, %r10 - 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x000033d8 je LBB0_601 - 0x85, 0xf6, //0x000033de testl %esi, %esi - 0xb8, 0x40, 0x00, 0x00, 0x00, //0x000033e0 movl $64, %eax - 0x0f, 0x44, 0xf8, //0x000033e5 cmovel %eax, %edi - 0x48, 0x39, 0xfa, //0x000033e8 cmpq %rdi, %rdx - 0x49, 0x89, 0xda, //0x000033eb movq %rbx, %r10 - 0x0f, 0x87, 0x9b, 0x09, 0x00, 0x00, //0x000033ee ja LBB0_721 - 0x4d, 0x29, 0xf2, //0x000033f4 subq %r14, %r10 - 0x49, 0x01, 0xd2, //0x000033f7 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x000033fa addq $1, %r10 - 0xe9, 0x89, 0xe3, 0xff, 0xff, //0x000033fe jmp LBB0_298 - //0x00003403 LBB0_601 - 0x85, 0xf6, //0x00003403 testl %esi, %esi - 0x49, 0x89, 0xda, //0x00003405 movq %rbx, %r10 - 0x0f, 0x85, 0x8e, 0x09, 0x00, 0x00, //0x00003408 jne LBB0_722 - 0x49, 0x83, 0xc2, 0x20, //0x0000340e addq $32, %r10 - 0x48, 0x83, 0xc1, 0xe0, //0x00003412 addq $-32, %rcx - //0x00003416 LBB0_603 - 0x4d, 0x85, 0xdb, //0x00003416 testq %r11, %r11 - 0x0f, 0x85, 0xe2, 0x01, 0x00, 0x00, //0x00003419 jne LBB0_620 - 0x4c, 0x89, 0xfe, //0x0000341f movq %r15, %rsi - 0x48, 0x85, 0xc9, //0x00003422 testq %rcx, %rcx - 0x0f, 0x84, 0x25, 0x07, 0x00, 0x00, //0x00003425 je LBB0_681 - //0x0000342b LBB0_605 - 0x41, 0x0f, 0xb6, 0x12, //0x0000342b movzbl (%r10), %edx - 0x80, 0xfa, 0x22, //0x0000342f cmpb $34, %dl - 0x0f, 0x84, 0x98, 0x00, 0x00, 0x00, //0x00003432 je LBB0_613 - 0x80, 0xfa, 0x5c, //0x00003438 cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x0000343b je LBB0_609 - 0x80, 0xfa, 0x1f, //0x00003441 cmpb $31, %dl - 0x0f, 0x86, 0x5d, 0x09, 0x00, 0x00, //0x00003444 jbe LBB0_723 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000344a movq $-1, %rdx - 0xbf, 0x01, 0x00, 0x00, 0x00, //0x00003451 movl $1, %edi - 0x49, 0x01, 0xfa, //0x00003456 addq %rdi, %r10 - 0x48, 0x01, 0xd1, //0x00003459 addq %rdx, %rcx - 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x0000345c jne LBB0_605 - 0xe9, 0xe9, 0x06, 0x00, 0x00, //0x00003462 jmp LBB0_681 - //0x00003467 LBB0_609 - 0x48, 0x83, 0xf9, 0x01, //0x00003467 cmpq $1, %rcx - 0x0f, 0x84, 0xdf, 0x06, 0x00, 0x00, //0x0000346b je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003471 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00003475 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003479 vmovdqa %ymm13, %ymm11 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x0000347e movq $-2, %rdx - 0xbf, 0x02, 0x00, 0x00, 0x00, //0x00003485 movl $2, %edi - 0x48, 0x83, 0xfe, 0xff, //0x0000348a cmpq $-1, %rsi - 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x0000348e jne LBB0_612 - 0x4d, 0x89, 0xd7, //0x00003494 movq %r10, %r15 - 0x4d, 0x29, 0xf7, //0x00003497 subq %r14, %r15 - 0x4c, 0x89, 0xfe, //0x0000349a movq %r15, %rsi - //0x0000349d LBB0_612 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000349d vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000034a2 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0xf1, 0xcd, 0xff, 0xff, //0x000034a7 vmovdqu $-12815(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x09, 0xcd, 0xff, 0xff, //0x000034af vmovdqu $-13047(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000034b7 vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x000034bb vmovdqa %ymm1, %ymm12 - 0x49, 0x01, 0xfa, //0x000034bf addq %rdi, %r10 - 0x48, 0x01, 0xd1, //0x000034c2 addq %rdx, %rcx - 0x0f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x000034c5 jne LBB0_605 - 0xe9, 0x80, 0x06, 0x00, 0x00, //0x000034cb jmp LBB0_681 - //0x000034d0 LBB0_613 - 0x4d, 0x29, 0xf2, //0x000034d0 subq %r14, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x000034d3 addq $1, %r10 - 0xe9, 0xb0, 0xe2, 0xff, 0xff, //0x000034d7 jmp LBB0_298 - //0x000034dc LBB0_614 - 0x48, 0x85, 0xdb, //0x000034dc testq %rbx, %rbx - 0x0f, 0x84, 0x6b, 0x06, 0x00, 0x00, //0x000034df je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x000034e5 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000034e9 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000034ed vmovdqa %ymm13, %ymm11 - 0x4c, 0x89, 0xf7, //0x000034f2 movq %r14, %rdi - 0x48, 0xf7, 0xd7, //0x000034f5 notq %rdi - 0x49, 0x89, 0xca, //0x000034f8 movq %rcx, %r10 - 0x48, 0x8d, 0x04, 0x39, //0x000034fb leaq (%rcx,%rdi), %rax - 0x49, 0x83, 0xff, 0xff, //0x000034ff cmpq $-1, %r15 - 0x4c, 0x89, 0xfe, //0x00003503 movq %r15, %rsi - 0x4c, 0x0f, 0x44, 0xf8, //0x00003506 cmoveq %rax, %r15 - 0x48, 0x0f, 0x44, 0xf0, //0x0000350a cmoveq %rax, %rsi - 0x49, 0x83, 0xc2, 0x01, //0x0000350e addq $1, %r10 - 0x48, 0x83, 0xc3, 0xff, //0x00003512 addq $-1, %rbx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003516 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x7d, 0xcd, 0xff, 0xff, //0x0000351b vmovdqu $-12931(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x95, 0xcc, 0xff, 0xff, //0x00003523 vmovdqu $-13163(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x0000352b vmovdqa %ymm0, %ymm11 - 0x48, 0x85, 0xdb, //0x0000352f testq %rbx, %rbx - 0x0f, 0x85, 0xac, 0xf8, 0xff, 0xff, //0x00003532 jne LBB0_536 - 0xe9, 0x49, 0xf9, 0xff, 0xff, //0x00003538 jmp LBB0_546 - //0x0000353d LBB0_616 - 0x48, 0x85, 0xdb, //0x0000353d testq %rbx, %rbx - 0x0f, 0x84, 0x0a, 0x06, 0x00, 0x00, //0x00003540 je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003546 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x0000354a vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000354e vmovdqa %ymm13, %ymm11 - 0x4c, 0x89, 0xf1, //0x00003553 movq %r14, %rcx - 0x48, 0xf7, 0xd1, //0x00003556 notq %rcx - 0x4c, 0x01, 0xd1, //0x00003559 addq %r10, %rcx - 0x4c, 0x89, 0xfa, //0x0000355c movq %r15, %rdx - 0x49, 0x83, 0xff, 0xff, //0x0000355f cmpq $-1, %r15 - 0x4c, 0x89, 0xf8, //0x00003563 movq %r15, %rax - 0x48, 0x0f, 0x44, 0xc1, //0x00003566 cmoveq %rcx, %rax - 0x49, 0x0f, 0x45, 0xcf, //0x0000356a cmovneq %r15, %rcx - 0x49, 0x83, 0xc2, 0x01, //0x0000356e addq $1, %r10 - 0x48, 0x83, 0xc3, 0xff, //0x00003572 addq $-1, %rbx - 0x49, 0x89, 0xc7, //0x00003576 movq %rax, %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003579 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x1a, 0xcd, 0xff, 0xff, //0x0000357e vmovdqu $-13030(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x32, 0xcc, 0xff, 0xff, //0x00003586 vmovdqu $-13262(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x0000358e vmovdqa %ymm0, %ymm11 - 0x48, 0x85, 0xdb, //0x00003592 testq %rbx, %rbx - 0x0f, 0x85, 0x16, 0xfb, 0xff, 0xff, //0x00003595 jne LBB0_566 - 0xe9, 0xb0, 0x05, 0x00, 0x00, //0x0000359b jmp LBB0_681 - //0x000035a0 LBB0_618 - 0x48, 0x85, 0xc9, //0x000035a0 testq %rcx, %rcx - 0x0f, 0x84, 0xa7, 0x05, 0x00, 0x00, //0x000035a3 je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x000035a9 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000035ad vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000035b1 vmovdqa %ymm13, %ymm11 - 0x4c, 0x89, 0xf6, //0x000035b6 movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x000035b9 notq %rsi - 0x49, 0x89, 0xda, //0x000035bc movq %rbx, %r10 - 0x48, 0x8d, 0x04, 0x33, //0x000035bf leaq (%rbx,%rsi), %rax - 0x49, 0x83, 0xff, 0xff, //0x000035c3 cmpq $-1, %r15 - 0x4c, 0x89, 0xff, //0x000035c7 movq %r15, %rdi - 0x4c, 0x0f, 0x44, 0xf8, //0x000035ca cmoveq %rax, %r15 - 0x48, 0x0f, 0x44, 0xf8, //0x000035ce cmoveq %rax, %rdi - 0x49, 0x83, 0xc2, 0x01, //0x000035d2 addq $1, %r10 - 0x48, 0x83, 0xc1, 0xff, //0x000035d6 addq $-1, %rcx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000035da vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xb9, 0xcc, 0xff, 0xff, //0x000035df vmovdqu $-13127(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xd1, 0xcb, 0xff, 0xff, //0x000035e7 vmovdqu $-13359(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000035ef vmovdqa %ymm0, %ymm11 - 0x48, 0x85, 0xc9, //0x000035f3 testq %rcx, %rcx - 0x0f, 0x85, 0x2f, 0xfc, 0xff, 0xff, //0x000035f6 jne LBB0_582 - 0xe9, 0xcc, 0xfc, 0xff, 0xff, //0x000035fc jmp LBB0_592 - //0x00003601 LBB0_620 - 0x48, 0x85, 0xc9, //0x00003601 testq %rcx, %rcx - 0x0f, 0x84, 0x46, 0x05, 0x00, 0x00, //0x00003604 je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x0000360a vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x0000360e vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003612 vmovdqa %ymm13, %ymm11 - 0x4c, 0x89, 0xf6, //0x00003617 movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x0000361a notq %rsi - 0x4c, 0x01, 0xd6, //0x0000361d addq %r10, %rsi - 0x4c, 0x89, 0xfa, //0x00003620 movq %r15, %rdx - 0x49, 0x83, 0xff, 0xff, //0x00003623 cmpq $-1, %r15 - 0x4c, 0x89, 0xf8, //0x00003627 movq %r15, %rax - 0x48, 0x0f, 0x44, 0xc6, //0x0000362a cmoveq %rsi, %rax - 0x49, 0x0f, 0x45, 0xf7, //0x0000362e cmovneq %r15, %rsi - 0x49, 0x83, 0xc2, 0x01, //0x00003632 addq $1, %r10 - 0x48, 0x83, 0xc1, 0xff, //0x00003636 addq $-1, %rcx - 0x49, 0x89, 0xc7, //0x0000363a movq %rax, %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000363d vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x56, 0xcc, 0xff, 0xff, //0x00003642 vmovdqu $-13226(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x6e, 0xcb, 0xff, 0xff, //0x0000364a vmovdqu $-13458(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00003652 vmovdqa %ymm0, %ymm11 - 0x48, 0x85, 0xc9, //0x00003656 testq %rcx, %rcx - 0x0f, 0x85, 0xcc, 0xfd, 0xff, 0xff, //0x00003659 jne LBB0_605 - 0xe9, 0xec, 0x04, 0x00, 0x00, //0x0000365f jmp LBB0_681 - //0x00003664 LBB0_622 - 0x49, 0x39, 0xf2, //0x00003664 cmpq %rsi, %r10 - 0x0f, 0x84, 0x28, 0x05, 0x00, 0x00, //0x00003667 je LBB0_711 - 0xc5, 0x7d, 0x7f, 0xe1, //0x0000366d vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00003671 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003675 vmovdqa %ymm13, %ymm11 - 0x49, 0x01, 0xf1, //0x0000367a addq %rsi, %r9 - 0x49, 0x83, 0xc1, 0x01, //0x0000367d addq $1, %r9 - 0x48, 0xf7, 0xd6, //0x00003681 notq %rsi - 0x49, 0x01, 0xf2, //0x00003684 addq %rsi, %r10 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00003687 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x0000368c movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00003691 movq $8(%rsp), %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003696 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xfd, 0xcb, 0xff, 0xff, //0x0000369b vmovdqu $-13315(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x15, 0xcb, 0xff, 0xff, //0x000036a3 vmovdqu $-13547(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000036ab vmovdqa %ymm0, %ymm11 - 0x4d, 0x85, 0xd2, //0x000036af testq %r10, %r10 - 0x0f, 0x8f, 0x25, 0x00, 0x00, 0x00, //0x000036b2 jg LBB0_626 - 0xe9, 0xd8, 0x04, 0x00, 0x00, //0x000036b8 jmp LBB0_711 - //0x000036bd LBB0_624 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000036bd movq $-2, %rcx - 0xba, 0x02, 0x00, 0x00, 0x00, //0x000036c4 movl $2, %edx - 0x49, 0x01, 0xd1, //0x000036c9 addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x000036cc movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x000036d4 addq %rcx, %r10 - 0x0f, 0x8e, 0xb8, 0x04, 0x00, 0x00, //0x000036d7 jle LBB0_711 - //0x000036dd LBB0_626 - 0x41, 0x0f, 0xb6, 0x09, //0x000036dd movzbl (%r9), %ecx - 0x80, 0xf9, 0x5c, //0x000036e1 cmpb $92, %cl - 0x0f, 0x84, 0xd3, 0xff, 0xff, 0xff, //0x000036e4 je LBB0_624 - 0x80, 0xf9, 0x22, //0x000036ea cmpb $34, %cl - 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x000036ed je LBB0_629 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000036f3 movq $-1, %rcx - 0xba, 0x01, 0x00, 0x00, 0x00, //0x000036fa movl $1, %edx - 0x49, 0x01, 0xd1, //0x000036ff addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00003702 movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x0000370a addq %rcx, %r10 - 0x0f, 0x8f, 0xca, 0xff, 0xff, 0xff, //0x0000370d jg LBB0_626 - 0xe9, 0x7d, 0x04, 0x00, 0x00, //0x00003713 jmp LBB0_711 - //0x00003718 LBB0_629 - 0x4d, 0x29, 0xf1, //0x00003718 subq %r14, %r9 - 0x49, 0x83, 0xc1, 0x01, //0x0000371b addq $1, %r9 - 0x4d, 0x89, 0x4d, 0x00, //0x0000371f movq %r9, (%r13) - 0x4d, 0x85, 0xc0, //0x00003723 testq %r8, %r8 - 0x0f, 0x8f, 0x74, 0xcc, 0xff, 0xff, //0x00003726 jg LBB0_3 - 0xe9, 0xfb, 0x03, 0x00, 0x00, //0x0000372c jmp LBB0_679 - //0x00003731 LBB0_630 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003731 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00003735 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003739 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000373e vmovdqa %ymm15, %ymm12 - 0x4c, 0x89, 0x1c, 0x24, //0x00003743 movq %r11, (%rsp) - 0x49, 0x83, 0xfb, 0xff, //0x00003747 cmpq $-1, %r11 - 0x0f, 0x85, 0x2c, 0x00, 0x00, 0x00, //0x0000374b jne LBB0_633 - 0x48, 0x89, 0xf8, //0x00003751 movq %rdi, %rax - 0x4c, 0x29, 0xf0, //0x00003754 subq %r14, %rax - 0x48, 0x0f, 0xbc, 0xca, //0x00003757 bsfq %rdx, %rcx - 0x48, 0x01, 0xc1, //0x0000375b addq %rax, %rcx - 0x48, 0x89, 0x0c, 0x24, //0x0000375e movq %rcx, (%rsp) - 0xe9, 0x16, 0x00, 0x00, 0x00, //0x00003762 jmp LBB0_633 - //0x00003767 LBB0_632 - 0x4c, 0x89, 0x1c, 0x24, //0x00003767 movq %r11, (%rsp) - 0xc5, 0x7d, 0x7f, 0xe1, //0x0000376b vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x0000376f vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003773 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003778 vmovdqa %ymm15, %ymm12 - //0x0000377d LBB0_633 - 0x44, 0x89, 0xd0, //0x0000377d movl %r10d, %eax - 0xf7, 0xd0, //0x00003780 notl %eax - 0x21, 0xd0, //0x00003782 andl %edx, %eax - 0x8d, 0x0c, 0x00, //0x00003784 leal (%rax,%rax), %ecx - 0x41, 0x8d, 0x1c, 0x42, //0x00003787 leal (%r10,%rax,2), %ebx - 0xf7, 0xd1, //0x0000378b notl %ecx - 0x21, 0xd1, //0x0000378d andl %edx, %ecx - 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000378f andl $-1431655766, %ecx - 0x45, 0x31, 0xd2, //0x00003795 xorl %r10d, %r10d - 0x01, 0xc1, //0x00003798 addl %eax, %ecx - 0x41, 0x0f, 0x92, 0xc2, //0x0000379a setb %r10b - 0x01, 0xc9, //0x0000379e addl %ecx, %ecx - 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x000037a0 xorl $1431655765, %ecx - 0x21, 0xd9, //0x000037a6 andl %ebx, %ecx - 0xf7, 0xd1, //0x000037a8 notl %ecx - 0x21, 0xce, //0x000037aa andl %ecx, %esi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000037ac vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x000037b1 vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000037b6 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0xdd, 0xca, 0xff, 0xff, //0x000037bb vmovdqu $-13603(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xf5, 0xc9, 0xff, 0xff, //0x000037c3 vmovdqu $-13835(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000037cb vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x000037cf vmovdqa %ymm1, %ymm12 - 0x4c, 0x8b, 0x1c, 0x24, //0x000037d3 movq (%rsp), %r11 - 0xc5, 0x7d, 0x7f, 0xea, //0x000037d7 vmovdqa %ymm13, %ymm2 - 0x48, 0x85, 0xf6, //0x000037db testq %rsi, %rsi - 0x0f, 0x85, 0xfe, 0xf1, 0xff, 0xff, //0x000037de jne LBB0_247 - //0x000037e4 LBB0_634 - 0xc5, 0x7d, 0x7f, 0xe1, //0x000037e4 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000037e8 vmovdqa %ymm11, %ymm0 - 0xc5, 0x7d, 0x6f, 0xda, //0x000037ec vmovdqa %ymm2, %ymm11 - 0x48, 0x83, 0xc7, 0x20, //0x000037f0 addq $32, %rdi - 0x49, 0x83, 0xc0, 0xe0, //0x000037f4 addq $-32, %r8 - //0x000037f8 LBB0_635 - 0x4d, 0x85, 0xd2, //0x000037f8 testq %r10, %r10 - 0x0f, 0x85, 0x6e, 0x02, 0x00, 0x00, //0x000037fb jne LBB0_669 - 0x4c, 0x89, 0xf6, //0x00003801 movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x00003804 notq %rsi - 0x4d, 0x89, 0xda, //0x00003807 movq %r11, %r10 - 0x4d, 0x85, 0xc0, //0x0000380a testq %r8, %r8 - 0x0f, 0x84, 0x95, 0x02, 0x00, 0x00, //0x0000380d je LBB0_671 - //0x00003813 LBB0_637 - 0x48, 0x83, 0xc6, 0x01, //0x00003813 addq $1, %rsi - //0x00003817 LBB0_638 - 0x31, 0xd2, //0x00003817 xorl %edx, %edx - 0x48, 0x89, 0xf9, //0x00003819 movq %rdi, %rcx - //0x0000381c LBB0_639 - 0x0f, 0xb6, 0x1c, 0x11, //0x0000381c movzbl (%rcx,%rdx), %ebx - 0x80, 0xfb, 0x22, //0x00003820 cmpb $34, %bl - 0x0f, 0x84, 0x61, 0x00, 0x00, 0x00, //0x00003823 je LBB0_646 - 0x80, 0xfb, 0x5c, //0x00003829 cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x0000382c je LBB0_644 - 0x48, 0x83, 0xc2, 0x01, //0x00003832 addq $1, %rdx - 0x49, 0x39, 0xd0, //0x00003836 cmpq %rdx, %r8 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003839 jne LBB0_639 - 0xe9, 0x52, 0x00, 0x00, 0x00, //0x0000383f jmp LBB0_642 - //0x00003844 LBB0_644 - 0x49, 0x8d, 0x40, 0xff, //0x00003844 leaq $-1(%r8), %rax - 0x48, 0x39, 0xd0, //0x00003848 cmpq %rdx, %rax - 0x0f, 0x84, 0xad, 0x04, 0x00, 0x00, //0x0000384b je LBB0_707 - 0x48, 0x8d, 0x04, 0x3e, //0x00003851 leaq (%rsi,%rdi), %rax - 0x48, 0x01, 0xd0, //0x00003855 addq %rdx, %rax - 0x49, 0x83, 0xfa, 0xff, //0x00003858 cmpq $-1, %r10 - 0x4c, 0x0f, 0x44, 0xd8, //0x0000385c cmoveq %rax, %r11 - 0x4c, 0x0f, 0x44, 0xd0, //0x00003860 cmoveq %rax, %r10 - 0x48, 0x01, 0xd7, //0x00003864 addq %rdx, %rdi - 0x48, 0x83, 0xc7, 0x02, //0x00003867 addq $2, %rdi - 0x4c, 0x89, 0xc0, //0x0000386b movq %r8, %rax - 0x48, 0x29, 0xd0, //0x0000386e subq %rdx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00003871 addq $-2, %rax - 0x49, 0x83, 0xc0, 0xfe, //0x00003875 addq $-2, %r8 - 0x49, 0x39, 0xd0, //0x00003879 cmpq %rdx, %r8 - 0x49, 0x89, 0xc0, //0x0000387c movq %rax, %r8 - 0x0f, 0x85, 0x92, 0xff, 0xff, 0xff, //0x0000387f jne LBB0_638 - 0xe9, 0x74, 0x04, 0x00, 0x00, //0x00003885 jmp LBB0_707 - //0x0000388a LBB0_646 - 0x48, 0x01, 0xd1, //0x0000388a addq %rdx, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x0000388d addq $1, %rcx - 0xe9, 0x15, 0x02, 0x00, 0x00, //0x00003891 jmp LBB0_672 - //0x00003896 LBB0_642 - 0x80, 0xfb, 0x22, //0x00003896 cmpb $34, %bl - 0x0f, 0x85, 0x5f, 0x04, 0x00, 0x00, //0x00003899 jne LBB0_707 - 0x48, 0x89, 0xf9, //0x0000389f movq %rdi, %rcx - 0x4c, 0x01, 0xc1, //0x000038a2 addq %r8, %rcx - 0xe9, 0x01, 0x02, 0x00, 0x00, //0x000038a5 jmp LBB0_672 - //0x000038aa LBB0_647 - 0xc5, 0x7d, 0x7f, 0xe2, //0x000038aa vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x000038ae vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000038b2 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x000038b7 vmovdqa %ymm15, %ymm12 - 0x49, 0x83, 0xfa, 0xff, //0x000038bc cmpq $-1, %r10 - 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x000038c0 jne LBB0_650 - 0x48, 0x89, 0xd8, //0x000038c6 movq %rbx, %rax - 0x4c, 0x29, 0xf0, //0x000038c9 subq %r14, %rax - 0x4c, 0x0f, 0xbc, 0xd2, //0x000038cc bsfq %rdx, %r10 - 0x49, 0x01, 0xc2, //0x000038d0 addq %rax, %r10 - 0xe9, 0x12, 0x00, 0x00, 0x00, //0x000038d3 jmp LBB0_650 - //0x000038d8 LBB0_649 - 0xc5, 0x7d, 0x7f, 0xe2, //0x000038d8 vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x000038dc vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000038e0 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x000038e5 vmovdqa %ymm15, %ymm12 - //0x000038ea LBB0_650 - 0x44, 0x89, 0xd8, //0x000038ea movl %r11d, %eax - 0xf7, 0xd0, //0x000038ed notl %eax - 0x21, 0xd0, //0x000038ef andl %edx, %eax - 0x8d, 0x34, 0x00, //0x000038f1 leal (%rax,%rax), %esi - 0x41, 0x8d, 0x3c, 0x43, //0x000038f4 leal (%r11,%rax,2), %edi - 0xf7, 0xd6, //0x000038f8 notl %esi - 0x21, 0xd6, //0x000038fa andl %edx, %esi - 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x000038fc andl $-1431655766, %esi - 0x45, 0x31, 0xdb, //0x00003902 xorl %r11d, %r11d - 0x01, 0xc6, //0x00003905 addl %eax, %esi - 0x41, 0x0f, 0x92, 0xc3, //0x00003907 setb %r11b - 0x01, 0xf6, //0x0000390b addl %esi, %esi - 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x0000390d xorl $1431655765, %esi - 0x21, 0xfe, //0x00003913 andl %edi, %esi - 0xf7, 0xd6, //0x00003915 notl %esi - 0x21, 0xf1, //0x00003917 andl %esi, %ecx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003919 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x0000391e vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003923 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x70, 0xc9, 0xff, 0xff, //0x00003928 vmovdqu $-13968(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x88, 0xc8, 0xff, 0xff, //0x00003930 vmovdqu $-14200(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x00003938 vmovdqa %ymm1, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe2, //0x0000393c vmovdqa %ymm2, %ymm12 - 0x48, 0x85, 0xc9, //0x00003940 testq %rcx, %rcx - 0x0f, 0x85, 0xf0, 0xf0, 0xff, 0xff, //0x00003943 jne LBB0_398 - //0x00003949 LBB0_651 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00003949 movl $64, %edx - //0x0000394e LBB0_652 - 0xc5, 0xbd, 0x64, 0xc8, //0x0000394e vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00003952 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x00003957 vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x0000395b vpmovmskb %ymm0, %esi - 0x0f, 0xbc, 0xfe, //0x0000395f bsfl %esi, %edi - 0x48, 0x85, 0xc9, //0x00003962 testq %rcx, %rcx - 0x0f, 0x84, 0x2c, 0x00, 0x00, 0x00, //0x00003965 je LBB0_655 - 0x85, 0xf6, //0x0000396b testl %esi, %esi - 0xb8, 0x40, 0x00, 0x00, 0x00, //0x0000396d movl $64, %eax - 0x0f, 0x44, 0xf8, //0x00003972 cmovel %eax, %edi - 0x48, 0x39, 0xfa, //0x00003975 cmpq %rdi, %rdx - 0x48, 0x89, 0xd9, //0x00003978 movq %rbx, %rcx - 0x0f, 0x87, 0x31, 0x04, 0x00, 0x00, //0x0000397b ja LBB0_725 - 0xc5, 0x7d, 0x7f, 0xea, //0x00003981 vmovdqa %ymm13, %ymm2 - 0x4c, 0x29, 0xf1, //0x00003985 subq %r14, %rcx - 0x48, 0x01, 0xd1, //0x00003988 addq %rdx, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x0000398b addq $1, %rcx - 0x4d, 0x89, 0xd3, //0x0000398f movq %r10, %r11 - 0xe9, 0x57, 0xeb, 0xff, 0xff, //0x00003992 jmp LBB0_461 - //0x00003997 LBB0_655 - 0x85, 0xf6, //0x00003997 testl %esi, %esi - 0x0f, 0x85, 0x23, 0x04, 0x00, 0x00, //0x00003999 jne LBB0_726 - 0xc5, 0x7d, 0x7f, 0xe1, //0x0000399f vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000039a3 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000039a7 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x000039ac vmovdqa %ymm15, %ymm12 - 0x48, 0x83, 0xc3, 0x20, //0x000039b1 addq $32, %rbx - 0x49, 0x83, 0xc0, 0xe0, //0x000039b5 addq $-32, %r8 - //0x000039b9 LBB0_657 - 0x4d, 0x85, 0xdb, //0x000039b9 testq %r11, %r11 - 0x0f, 0x85, 0x12, 0x01, 0x00, 0x00, //0x000039bc jne LBB0_673 - 0x4c, 0x89, 0xd6, //0x000039c2 movq %r10, %rsi - 0x4d, 0x85, 0xc0, //0x000039c5 testq %r8, %r8 - 0x0f, 0x84, 0x30, 0x03, 0x00, 0x00, //0x000039c8 je LBB0_707 - //0x000039ce LBB0_659 - 0x48, 0x89, 0xd9, //0x000039ce movq %rbx, %rcx - //0x000039d1 LBB0_660 - 0x0f, 0xb6, 0x11, //0x000039d1 movzbl (%rcx), %edx - 0x80, 0xfa, 0x22, //0x000039d4 cmpb $34, %dl - 0x0f, 0x84, 0x5d, 0x00, 0x00, 0x00, //0x000039d7 je LBB0_668 - 0x80, 0xfa, 0x5c, //0x000039dd cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x000039e0 je LBB0_665 - 0x80, 0xfa, 0x1f, //0x000039e6 cmpb $31, %dl - 0x0f, 0x86, 0xe1, 0x03, 0x00, 0x00, //0x000039e9 jbe LBB0_727 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000039ef movq $-1, %rdx - 0xbf, 0x01, 0x00, 0x00, 0x00, //0x000039f6 movl $1, %edi - //0x000039fb LBB0_664 - 0x48, 0x01, 0xf9, //0x000039fb addq %rdi, %rcx - 0x49, 0x01, 0xd0, //0x000039fe addq %rdx, %r8 - 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00003a01 jne LBB0_660 - 0xe9, 0xf2, 0x02, 0x00, 0x00, //0x00003a07 jmp LBB0_707 - //0x00003a0c LBB0_665 - 0x49, 0x83, 0xf8, 0x01, //0x00003a0c cmpq $1, %r8 - 0x0f, 0x84, 0xe8, 0x02, 0x00, 0x00, //0x00003a10 je LBB0_707 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00003a16 movq $-2, %rdx - 0xbf, 0x02, 0x00, 0x00, 0x00, //0x00003a1d movl $2, %edi - 0x48, 0x83, 0xfe, 0xff, //0x00003a22 cmpq $-1, %rsi - 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00003a26 jne LBB0_664 - 0x48, 0x89, 0xce, //0x00003a2c movq %rcx, %rsi - 0x4c, 0x29, 0xf6, //0x00003a2f subq %r14, %rsi - 0x49, 0x89, 0xf2, //0x00003a32 movq %rsi, %r10 - 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003a35 jmp LBB0_664 - //0x00003a3a LBB0_668 - 0x4c, 0x29, 0xf1, //0x00003a3a subq %r14, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x00003a3d addq $1, %rcx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003a41 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7d, 0x7f, 0xda, //0x00003a46 vmovdqa %ymm11, %ymm2 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003a4a vmovdqa %ymm12, %ymm15 - 0xc5, 0xfe, 0x6f, 0x25, 0x49, 0xc8, 0xff, 0xff, //0x00003a4f vmovdqu $-14263(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x61, 0xc7, 0xff, 0xff, //0x00003a57 vmovdqu $-14495(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00003a5f vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00003a63 vmovdqa %ymm1, %ymm12 - 0x4d, 0x89, 0xd3, //0x00003a67 movq %r10, %r11 - 0xe9, 0x7f, 0xea, 0xff, 0xff, //0x00003a6a jmp LBB0_461 - //0x00003a6f LBB0_669 - 0x4d, 0x85, 0xc0, //0x00003a6f testq %r8, %r8 - 0x0f, 0x84, 0x86, 0x02, 0x00, 0x00, //0x00003a72 je LBB0_707 - 0x4c, 0x89, 0xf6, //0x00003a78 movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x00003a7b notq %rsi - 0x48, 0x8d, 0x04, 0x37, //0x00003a7e leaq (%rdi,%rsi), %rax - 0x4c, 0x89, 0xd9, //0x00003a82 movq %r11, %rcx - 0x49, 0x83, 0xfb, 0xff, //0x00003a85 cmpq $-1, %r11 - 0x4d, 0x89, 0xda, //0x00003a89 movq %r11, %r10 - 0x48, 0x0f, 0x44, 0xc8, //0x00003a8c cmoveq %rax, %rcx - 0x4c, 0x0f, 0x44, 0xd0, //0x00003a90 cmoveq %rax, %r10 - 0x48, 0x83, 0xc7, 0x01, //0x00003a94 addq $1, %rdi - 0x49, 0x83, 0xc0, 0xff, //0x00003a98 addq $-1, %r8 - 0x49, 0x89, 0xcb, //0x00003a9c movq %rcx, %r11 - 0x4d, 0x85, 0xc0, //0x00003a9f testq %r8, %r8 - 0x0f, 0x85, 0x6b, 0xfd, 0xff, 0xff, //0x00003aa2 jne LBB0_637 - //0x00003aa8 LBB0_671 - 0x48, 0x89, 0xf9, //0x00003aa8 movq %rdi, %rcx - //0x00003aab LBB0_672 - 0x4c, 0x29, 0xf1, //0x00003aab subq %r14, %rcx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003aae vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7d, 0x7f, 0xda, //0x00003ab3 vmovdqa %ymm11, %ymm2 - 0xc5, 0xfe, 0x6f, 0x25, 0xe1, 0xc7, 0xff, 0xff, //0x00003ab7 vmovdqu $-14367(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xf9, 0xc6, 0xff, 0xff, //0x00003abf vmovdqu $-14599(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00003ac7 vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00003acb vmovdqa %ymm1, %ymm12 - 0xe9, 0x1a, 0xea, 0xff, 0xff, //0x00003acf jmp LBB0_461 - //0x00003ad4 LBB0_673 - 0x4d, 0x85, 0xc0, //0x00003ad4 testq %r8, %r8 - 0x0f, 0x84, 0x21, 0x02, 0x00, 0x00, //0x00003ad7 je LBB0_707 - 0x4c, 0x89, 0xf6, //0x00003add movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x00003ae0 notq %rsi - 0x48, 0x01, 0xde, //0x00003ae3 addq %rbx, %rsi - 0x49, 0x83, 0xfa, 0xff, //0x00003ae6 cmpq $-1, %r10 - 0x4c, 0x89, 0xd0, //0x00003aea movq %r10, %rax - 0x48, 0x0f, 0x44, 0xc6, //0x00003aed cmoveq %rsi, %rax - 0x49, 0x0f, 0x45, 0xf2, //0x00003af1 cmovneq %r10, %rsi - 0x48, 0x83, 0xc3, 0x01, //0x00003af5 addq $1, %rbx - 0x49, 0x83, 0xc0, 0xff, //0x00003af9 addq $-1, %r8 - 0x49, 0x89, 0xc2, //0x00003afd movq %rax, %r10 - 0x4d, 0x85, 0xc0, //0x00003b00 testq %r8, %r8 - 0x0f, 0x85, 0xc5, 0xfe, 0xff, 0xff, //0x00003b03 jne LBB0_659 - 0xe9, 0xf0, 0x01, 0x00, 0x00, //0x00003b09 jmp LBB0_707 - //0x00003b0e LBB0_675 - 0x4d, 0x89, 0x65, 0x00, //0x00003b0e movq %r12, (%r13) - //0x00003b12 LBB0_677 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00003b12 movq $-1, (%rsp) - 0xe9, 0x76, 0x00, 0x00, 0x00, //0x00003b1a jmp LBB0_711 - //0x00003b1f LBB0_705 - 0x48, 0xc7, 0x04, 0x24, 0xf9, 0xff, 0xff, 0xff, //0x00003b1f movq $-7, (%rsp) - 0xe9, 0x69, 0x00, 0x00, 0x00, //0x00003b27 jmp LBB0_711 - //0x00003b2c LBB0_679 - 0x49, 0x83, 0xc0, 0xff, //0x00003b2c addq $-1, %r8 - 0x4c, 0x89, 0x04, 0x24, //0x00003b30 movq %r8, (%rsp) - 0xe9, 0x5c, 0x00, 0x00, 0x00, //0x00003b34 jmp LBB0_711 - //0x00003b39 LBB0_463 - 0x49, 0x83, 0xc1, 0xff, //0x00003b39 addq $-1, %r9 - 0x4c, 0x89, 0x0c, 0x24, //0x00003b3d movq %r9, (%rsp) - 0xe9, 0x4f, 0x00, 0x00, 0x00, //0x00003b41 jmp LBB0_711 - //0x00003b46 LBB0_680 - 0x49, 0x83, 0xfa, 0xff, //0x00003b46 cmpq $-1, %r10 - 0x0f, 0x85, 0x7c, 0x00, 0x00, 0x00, //0x00003b4a jne LBB0_703 - //0x00003b50 LBB0_681 - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00003b50 movq $-1, %r10 - 0x4d, 0x89, 0xc7, //0x00003b57 movq %r8, %r15 - 0xe9, 0x6d, 0x00, 0x00, 0x00, //0x00003b5a jmp LBB0_703 - //0x00003b5f LBB0_682 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003b5f movq $-1, %rcx - 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00003b66 jmp LBB0_684 - //0x00003b6b LBB0_178 - 0x48, 0x83, 0xc3, 0xff, //0x00003b6b addq $-1, %rbx - 0x48, 0x89, 0x1c, 0x24, //0x00003b6f movq %rbx, (%rsp) - 0xe9, 0x1d, 0x00, 0x00, 0x00, //0x00003b73 jmp LBB0_711 - //0x00003b78 LBB0_683 - 0x4c, 0x89, 0xe9, //0x00003b78 movq %r13, %rcx - //0x00003b7b LBB0_684 - 0x48, 0x8b, 0x54, 0x24, 0x30, //0x00003b7b movq $48(%rsp), %rdx - 0x48, 0x8b, 0x02, //0x00003b80 movq (%rdx), %rax - 0x48, 0x29, 0xc8, //0x00003b83 subq %rcx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00003b86 addq $-2, %rax - 0x48, 0x89, 0x02, //0x00003b8a movq %rax, (%rdx) - //0x00003b8d LBB0_710 - 0x48, 0xc7, 0x04, 0x24, 0xfe, 0xff, 0xff, 0xff, //0x00003b8d movq $-2, (%rsp) - //0x00003b95 LBB0_711 - 0x48, 0x8b, 0x04, 0x24, //0x00003b95 movq (%rsp), %rax - 0x48, 0x8d, 0x65, 0xd8, //0x00003b99 leaq $-40(%rbp), %rsp - 0x5b, //0x00003b9d popq %rbx - 0x41, 0x5c, //0x00003b9e popq %r12 - 0x41, 0x5d, //0x00003ba0 popq %r13 - 0x41, 0x5e, //0x00003ba2 popq %r14 - 0x41, 0x5f, //0x00003ba4 popq %r15 - 0x5d, //0x00003ba6 popq %rbp - 0xc5, 0xf8, 0x77, //0x00003ba7 vzeroupper - 0xc3, //0x00003baa retq - //0x00003bab LBB0_686 - 0x49, 0x89, 0x55, 0x00, //0x00003bab movq %rdx, (%r13) - 0xe9, 0xe1, 0xff, 0xff, 0xff, //0x00003baf jmp LBB0_711 - //0x00003bb4 LBB0_699 - 0x49, 0x83, 0xff, 0xff, //0x00003bb4 cmpq $-1, %r15 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00003bb8 jne LBB0_702 - 0x4c, 0x0f, 0xbc, 0xfe, //0x00003bbe bsfq %rsi, %r15 - //0x00003bc2 LBB0_701 - 0x4d, 0x01, 0xd7, //0x00003bc2 addq %r10, %r15 - //0x00003bc5 LBB0_702 - 0x49, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00003bc5 movq $-2, %r10 - //0x00003bcc LBB0_703 - 0x4c, 0x89, 0x14, 0x24, //0x00003bcc movq %r10, (%rsp) - 0x4d, 0x89, 0x7d, 0x00, //0x00003bd0 movq %r15, (%r13) - 0xe9, 0xbc, 0xff, 0xff, 0xff, //0x00003bd4 jmp LBB0_711 - //0x00003bd9 LBB0_687 - 0x80, 0xfa, 0x61, //0x00003bd9 cmpb $97, %dl - 0x0f, 0x85, 0xab, 0xff, 0xff, 0xff, //0x00003bdc jne LBB0_710 - 0x48, 0x8d, 0x41, 0x01, //0x00003be2 leaq $1(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003be6 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x6c, //0x00003bea cmpb $108, $1(%r14,%rcx) - 0x0f, 0x85, 0x97, 0xff, 0xff, 0xff, //0x00003bf0 jne LBB0_710 - 0x48, 0x8d, 0x41, 0x02, //0x00003bf6 leaq $2(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003bfa movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x73, //0x00003bfe cmpb $115, $2(%r14,%rcx) - 0x0f, 0x85, 0x83, 0xff, 0xff, 0xff, //0x00003c04 jne LBB0_710 - 0x48, 0xc7, 0x04, 0x24, 0xfe, 0xff, 0xff, 0xff, //0x00003c0a movq $-2, (%rsp) - 0x48, 0x8d, 0x41, 0x03, //0x00003c12 leaq $3(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003c16 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x03, 0x65, //0x00003c1a cmpb $101, $3(%r14,%rcx) - 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x00003c20 jne LBB0_711 - 0x48, 0x83, 0xc1, 0x04, //0x00003c26 addq $4, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x00003c2a movq %rcx, (%r13) - 0xe9, 0x62, 0xff, 0xff, 0xff, //0x00003c2e jmp LBB0_711 - //0x00003c33 LBB0_267 - 0x49, 0x89, 0x45, 0x00, //0x00003c33 movq %rax, (%r13) - 0x41, 0x80, 0x3c, 0x06, 0x6e, //0x00003c37 cmpb $110, (%r14,%rax) - 0x0f, 0x85, 0x4b, 0xff, 0xff, 0xff, //0x00003c3c jne LBB0_710 - 0x49, 0x89, 0x4d, 0x00, //0x00003c42 movq %rcx, (%r13) - 0x41, 0x80, 0x3c, 0x0e, 0x75, //0x00003c46 cmpb $117, (%r14,%rcx) - 0x0f, 0x85, 0x3c, 0xff, 0xff, 0xff, //0x00003c4b jne LBB0_710 - 0x48, 0x8d, 0x41, 0x01, //0x00003c51 leaq $1(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003c55 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x6c, //0x00003c59 cmpb $108, $1(%r14,%rcx) - 0x0f, 0x85, 0x28, 0xff, 0xff, 0xff, //0x00003c5f jne LBB0_710 - 0x48, 0x8d, 0x41, 0x02, //0x00003c65 leaq $2(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003c69 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x6c, //0x00003c6d cmpb $108, $2(%r14,%rcx) - 0x0f, 0x84, 0x4b, 0x00, 0x00, 0x00, //0x00003c73 je LBB0_696 - 0xe9, 0x0f, 0xff, 0xff, 0xff, //0x00003c79 jmp LBB0_710 - //0x00003c7e LBB0_692 - 0x49, 0x89, 0x45, 0x00, //0x00003c7e movq %rax, (%r13) - 0x41, 0x80, 0x3c, 0x06, 0x74, //0x00003c82 cmpb $116, (%r14,%rax) - 0x0f, 0x85, 0x00, 0xff, 0xff, 0xff, //0x00003c87 jne LBB0_710 - 0x49, 0x89, 0x4d, 0x00, //0x00003c8d movq %rcx, (%r13) - 0x41, 0x80, 0x3c, 0x0e, 0x72, //0x00003c91 cmpb $114, (%r14,%rcx) - 0x0f, 0x85, 0xf1, 0xfe, 0xff, 0xff, //0x00003c96 jne LBB0_710 - 0x48, 0x8d, 0x41, 0x01, //0x00003c9c leaq $1(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003ca0 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x75, //0x00003ca4 cmpb $117, $1(%r14,%rcx) - 0x0f, 0x85, 0xdd, 0xfe, 0xff, 0xff, //0x00003caa jne LBB0_710 - 0x48, 0x8d, 0x41, 0x02, //0x00003cb0 leaq $2(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003cb4 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x65, //0x00003cb8 cmpb $101, $2(%r14,%rcx) - 0x0f, 0x85, 0xc9, 0xfe, 0xff, 0xff, //0x00003cbe jne LBB0_710 - //0x00003cc4 LBB0_696 - 0x48, 0x83, 0xc1, 0x03, //0x00003cc4 addq $3, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x00003cc8 movq %rcx, (%r13) - 0xe9, 0xbc, 0xfe, 0xff, 0xff, //0x00003ccc jmp LBB0_710 - //0x00003cd1 LBB0_698 - 0x48, 0x83, 0x04, 0x24, 0xff, //0x00003cd1 addq $-1, (%rsp) - 0xe9, 0xba, 0xfe, 0xff, 0xff, //0x00003cd6 jmp LBB0_711 - //0x00003cdb LBB0_264 - 0x48, 0x83, 0xc1, 0xff, //0x00003cdb addq $-1, %rcx - 0x48, 0x89, 0x0c, 0x24, //0x00003cdf movq %rcx, (%rsp) - 0xe9, 0xad, 0xfe, 0xff, 0xff, //0x00003ce3 jmp LBB0_711 - //0x00003ce8 LBB0_704 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003ce8 movq $-1, %rcx - 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x00003cef jmp LBB0_709 - //0x00003cf4 LBB0_706 - 0x48, 0x83, 0xf9, 0xff, //0x00003cf4 cmpq $-1, %rcx - 0x0f, 0x85, 0x58, 0x00, 0x00, 0x00, //0x00003cf8 jne LBB0_716 + 0x48, 0x21, 0xcf, //0x00001e0f andq %rcx, %rdi + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00001e12 jne LBB0_340 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00001e18 jmp LBB0_343 + //0x00001e1d LBB0_342 + 0xc4, 0x41, 0x7d, 0x6f, 0xd5, //0x00001e1d vmovdqa %ymm13, %ymm10 + 0xc4, 0x41, 0x7d, 0x6f, 0xef, //0x00001e22 vmovdqa %ymm15, %ymm13 + //0x00001e27 LBB0_343 + 0x49, 0xc1, 0xfd, 0x3f, //0x00001e27 sarq $63, %r13 + 0xf3, 0x48, 0x0f, 0xb8, 0xce, //0x00001e2b popcntq %rsi, %rcx + 0x49, 0x01, 0xcf, //0x00001e30 addq %rcx, %r15 + 0x49, 0x83, 0xc6, 0x40, //0x00001e33 addq $64, %r14 + 0x49, 0x83, 0xc1, 0xc0, //0x00001e37 addq $-64, %r9 + 0x4d, 0x89, 0xeb, //0x00001e3b movq %r13, %r11 + 0x49, 0x83, 0xf9, 0x40, //0x00001e3e cmpq $64, %r9 + 0x0f, 0x8d, 0x7a, 0xfe, 0xff, 0xff, //0x00001e42 jge LBB0_335 + 0xe9, 0x1e, 0xfd, 0xff, 0xff, //0x00001e48 jmp LBB0_344 + //0x00001e4d LBB0_360 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00001e4d movq $32(%rsp), %rcx + 0x4c, 0x8b, 0x49, 0x08, //0x00001e52 movq $8(%rcx), %r9 + 0x4d, 0x8b, 0x07, //0x00001e56 movq (%r15), %r8 + 0x4d, 0x29, 0xc1, //0x00001e59 subq %r8, %r9 + 0x4d, 0x01, 0xc6, //0x00001e5c addq %r8, %r14 + 0x45, 0x31, 0xdb, //0x00001e5f xorl %r11d, %r11d + 0x45, 0x31, 0xd2, //0x00001e62 xorl %r10d, %r10d + 0x45, 0x31, 0xff, //0x00001e65 xorl %r15d, %r15d + 0x31, 0xdb, //0x00001e68 xorl %ebx, %ebx + 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00001e6a jmp LBB0_362 + //0x00001e6f LBB0_361 + 0x49, 0xc1, 0xfd, 0x3f, //0x00001e6f sarq $63, %r13 + 0xf3, 0x48, 0x0f, 0xb8, 0xce, //0x00001e73 popcntq %rsi, %rcx + 0x49, 0x01, 0xcf, //0x00001e78 addq %rcx, %r15 + 0x49, 0x83, 0xc6, 0x40, //0x00001e7b addq $64, %r14 + 0x49, 0x83, 0xc1, 0xc0, //0x00001e7f addq $-64, %r9 + 0x4d, 0x89, 0xeb, //0x00001e83 movq %r13, %r11 + //0x00001e86 LBB0_362 + 0x49, 0x83, 0xf9, 0x40, //0x00001e86 cmpq $64, %r9 + 0x0f, 0x8c, 0x2d, 0x01, 0x00, 0x00, //0x00001e8a jl LBB0_370 + //0x00001e90 LBB0_363 + 0xc4, 0xc1, 0x7e, 0x6f, 0x0e, //0x00001e90 vmovdqu (%r14), %ymm1 + 0xc4, 0xc1, 0x7e, 0x6f, 0x46, 0x20, //0x00001e95 vmovdqu $32(%r14), %ymm0 + 0xc5, 0xf5, 0x74, 0xd7, //0x00001e9b vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00001e9f vpmovmskb %ymm2, %edx + 0xc5, 0xfd, 0x74, 0xd7, //0x00001ea3 vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001ea7 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001eab shlq $32, %rcx + 0x48, 0x09, 0xca, //0x00001eaf orq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x00001eb2 movq %rdx, %rcx + 0x4c, 0x09, 0xd1, //0x00001eb5 orq %r10, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001eb8 jne LBB0_365 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001ebe movq $-1, %rdx + 0x45, 0x31, 0xd2, //0x00001ec5 xorl %r10d, %r10d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001ec8 jmp LBB0_366 + //0x00001ecd LBB0_365 + 0x4c, 0x89, 0xd1, //0x00001ecd movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00001ed0 notq %rcx + 0x48, 0x21, 0xd1, //0x00001ed3 andq %rdx, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x00001ed6 leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xd5, //0x00001eda orq %r10, %r13 + 0x4c, 0x89, 0xef, //0x00001edd movq %r13, %rdi + 0x48, 0xf7, 0xd7, //0x00001ee0 notq %rdi + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001ee3 movabsq $-6148914691236517206, %rsi + 0x48, 0x21, 0xf2, //0x00001eed andq %rsi, %rdx + 0x48, 0x21, 0xfa, //0x00001ef0 andq %rdi, %rdx + 0x45, 0x31, 0xd2, //0x00001ef3 xorl %r10d, %r10d + 0x48, 0x01, 0xca, //0x00001ef6 addq %rcx, %rdx + 0x41, 0x0f, 0x92, 0xc2, //0x00001ef9 setb %r10b + 0x48, 0x01, 0xd2, //0x00001efd addq %rdx, %rdx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001f00 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xca, //0x00001f0a xorq %rcx, %rdx + 0x4c, 0x21, 0xea, //0x00001f0d andq %r13, %rdx + 0x48, 0xf7, 0xd2, //0x00001f10 notq %rdx + //0x00001f13 LBB0_366 + 0xc5, 0xfd, 0x74, 0xd6, //0x00001f13 vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001f17 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001f1b shlq $32, %rcx + 0xc5, 0xf5, 0x74, 0xd6, //0x00001f1f vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xf2, //0x00001f23 vpmovmskb %ymm2, %esi + 0x48, 0x09, 0xce, //0x00001f27 orq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00001f2a andq %rdx, %rsi + 0xc4, 0xe1, 0xf9, 0x6e, 0xd6, //0x00001f2d vmovq %rsi, %xmm2 + 0xc4, 0xe3, 0x69, 0x44, 0x15, 0x64, 0xe1, 0xff, 0xff, 0x00, //0x00001f32 vpclmulqdq $0, $-7836(%rip), %xmm2, %xmm2 /* LCPI0_26+0(%rip) */ + 0xc4, 0xc1, 0xf9, 0x7e, 0xd5, //0x00001f3c vmovq %xmm2, %r13 + 0x4d, 0x31, 0xdd, //0x00001f41 xorq %r11, %r13 + 0xc5, 0xa5, 0x74, 0xd1, //0x00001f44 vpcmpeqb %ymm1, %ymm11, %ymm2 + 0xc5, 0xfd, 0xd7, 0xf2, //0x00001f48 vpmovmskb %ymm2, %esi + 0xc5, 0xa5, 0x74, 0xd0, //0x00001f4c vpcmpeqb %ymm0, %ymm11, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001f50 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001f54 shlq $32, %rcx + 0x48, 0x09, 0xce, //0x00001f58 orq %rcx, %rsi + 0x4c, 0x89, 0xe9, //0x00001f5b movq %r13, %rcx + 0x48, 0xf7, 0xd1, //0x00001f5e notq %rcx + 0x48, 0x21, 0xce, //0x00001f61 andq %rcx, %rsi + 0xc5, 0x9d, 0x74, 0xc9, //0x00001f64 vpcmpeqb %ymm1, %ymm12, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf9, //0x00001f68 vpmovmskb %ymm1, %edi + 0xc5, 0x9d, 0x74, 0xc0, //0x00001f6c vpcmpeqb %ymm0, %ymm12, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x00001f70 vpmovmskb %ymm0, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x00001f74 shlq $32, %rdx + 0x48, 0x09, 0xd7, //0x00001f78 orq %rdx, %rdi + 0x48, 0x21, 0xcf, //0x00001f7b andq %rcx, %rdi + 0x0f, 0x84, 0xeb, 0xfe, 0xff, 0xff, //0x00001f7e je LBB0_361 + 0x4c, 0x8b, 0x1c, 0x24, //0x00001f84 movq (%rsp), %r11 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001f88 .p2align 4, 0x90 + //0x00001f90 LBB0_368 + 0x48, 0x8d, 0x4f, 0xff, //0x00001f90 leaq $-1(%rdi), %rcx + 0x48, 0x89, 0xca, //0x00001f94 movq %rcx, %rdx + 0x48, 0x21, 0xf2, //0x00001f97 andq %rsi, %rdx + 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x00001f9a popcntq %rdx, %rdx + 0x4c, 0x01, 0xfa, //0x00001f9f addq %r15, %rdx + 0x48, 0x39, 0xda, //0x00001fa2 cmpq %rbx, %rdx + 0x0f, 0x86, 0x7a, 0x01, 0x00, 0x00, //0x00001fa5 jbe LBB0_386 + 0x48, 0x83, 0xc3, 0x01, //0x00001fab addq $1, %rbx + 0x48, 0x21, 0xcf, //0x00001faf andq %rcx, %rdi + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00001fb2 jne LBB0_368 + 0xe9, 0xb2, 0xfe, 0xff, 0xff, //0x00001fb8 jmp LBB0_361 + //0x00001fbd LBB0_370 + 0x4d, 0x85, 0xc9, //0x00001fbd testq %r9, %r9 + 0x0f, 0x8e, 0xd2, 0x1e, 0x00, 0x00, //0x00001fc0 jle LBB0_733 + 0xc5, 0x7d, 0x7f, 0xe2, //0x00001fc6 vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00001fca vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00001fce vmovdqa %ymm13, %ymm11 + 0xc5, 0xf9, 0xef, 0xc0, //0x00001fd3 vpxor %xmm0, %xmm0, %xmm0 + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x60, //0x00001fd7 vmovdqu %ymm0, $96(%rsp) + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001fdd vmovdqu %ymm0, $64(%rsp) + 0x44, 0x89, 0xf1, //0x00001fe3 movl %r14d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00001fe6 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00001fec cmpl $4033, %ecx + 0x0f, 0x82, 0x27, 0x00, 0x00, 0x00, //0x00001ff2 jb LBB0_374 + 0x49, 0x83, 0xf9, 0x20, //0x00001ff8 cmpq $32, %r9 + 0x0f, 0x82, 0x44, 0x00, 0x00, 0x00, //0x00001ffc jb LBB0_375 + 0xc4, 0xc1, 0x7e, 0x6f, 0x06, //0x00002002 vmovdqu (%r14), %ymm0 + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00002007 vmovdqu %ymm0, $64(%rsp) + 0x49, 0x83, 0xc6, 0x20, //0x0000200d addq $32, %r14 + 0x49, 0x8d, 0x79, 0xe0, //0x00002011 leaq $-32(%r9), %rdi + 0x48, 0x8d, 0x74, 0x24, 0x60, //0x00002015 leaq $96(%rsp), %rsi + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x0000201a jmp LBB0_376 + //0x0000201f LBB0_374 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000201f vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00002024 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x6f, 0xe2, 0xff, 0xff, //0x00002029 vmovdqu $-7569(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x87, 0xe1, 0xff, 0xff, //0x00002031 vmovdqu $-7801(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x00002039 vmovdqa %ymm1, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe2, //0x0000203d vmovdqa %ymm2, %ymm12 + 0xe9, 0x4a, 0xfe, 0xff, 0xff, //0x00002041 jmp LBB0_363 + //0x00002046 LBB0_375 + 0x48, 0x8d, 0x74, 0x24, 0x40, //0x00002046 leaq $64(%rsp), %rsi + 0x4c, 0x89, 0xcf, //0x0000204b movq %r9, %rdi + //0x0000204e LBB0_376 + 0x48, 0x83, 0xff, 0x10, //0x0000204e cmpq $16, %rdi + 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00002052 jb LBB0_377 + 0xc4, 0xc1, 0x7a, 0x6f, 0x06, //0x00002058 vmovdqu (%r14), %xmm0 + 0xc5, 0xfa, 0x7f, 0x06, //0x0000205d vmovdqu %xmm0, (%rsi) + 0x49, 0x83, 0xc6, 0x10, //0x00002061 addq $16, %r14 + 0x48, 0x83, 0xc6, 0x10, //0x00002065 addq $16, %rsi + 0x48, 0x83, 0xc7, 0xf0, //0x00002069 addq $-16, %rdi + 0x48, 0x83, 0xff, 0x08, //0x0000206d cmpq $8, %rdi + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00002071 jae LBB0_384 + //0x00002077 LBB0_378 + 0x48, 0x83, 0xff, 0x04, //0x00002077 cmpq $4, %rdi + 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x0000207b jl LBB0_379 + //0x00002081 LBB0_385 + 0x41, 0x8b, 0x0e, //0x00002081 movl (%r14), %ecx + 0x89, 0x0e, //0x00002084 movl %ecx, (%rsi) + 0x49, 0x83, 0xc6, 0x04, //0x00002086 addq $4, %r14 + 0x48, 0x83, 0xc6, 0x04, //0x0000208a addq $4, %rsi + 0x48, 0x83, 0xc7, 0xfc, //0x0000208e addq $-4, %rdi + 0x48, 0x83, 0xff, 0x02, //0x00002092 cmpq $2, %rdi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00002096 jae LBB0_380 + 0xe9, 0x43, 0x00, 0x00, 0x00, //0x0000209c jmp LBB0_381 + //0x000020a1 LBB0_377 + 0x48, 0x83, 0xff, 0x08, //0x000020a1 cmpq $8, %rdi + 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x000020a5 jb LBB0_378 + //0x000020ab LBB0_384 + 0x49, 0x8b, 0x0e, //0x000020ab movq (%r14), %rcx + 0x48, 0x89, 0x0e, //0x000020ae movq %rcx, (%rsi) + 0x49, 0x83, 0xc6, 0x08, //0x000020b1 addq $8, %r14 + 0x48, 0x83, 0xc6, 0x08, //0x000020b5 addq $8, %rsi + 0x48, 0x83, 0xc7, 0xf8, //0x000020b9 addq $-8, %rdi + 0x48, 0x83, 0xff, 0x04, //0x000020bd cmpq $4, %rdi + 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x000020c1 jge LBB0_385 + //0x000020c7 LBB0_379 + 0x48, 0x83, 0xff, 0x02, //0x000020c7 cmpq $2, %rdi + 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x000020cb jb LBB0_381 + //0x000020d1 LBB0_380 + 0x41, 0x0f, 0xb7, 0x0e, //0x000020d1 movzwl (%r14), %ecx + 0x66, 0x89, 0x0e, //0x000020d5 movw %cx, (%rsi) + 0x49, 0x83, 0xc6, 0x02, //0x000020d8 addq $2, %r14 + 0x48, 0x83, 0xc6, 0x02, //0x000020dc addq $2, %rsi + 0x48, 0x83, 0xc7, 0xfe, //0x000020e0 addq $-2, %rdi + //0x000020e4 LBB0_381 + 0x4c, 0x89, 0xf2, //0x000020e4 movq %r14, %rdx + 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x000020e7 leaq $64(%rsp), %r14 + 0x48, 0x85, 0xff, //0x000020ec testq %rdi, %rdi + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000020ef vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000020f4 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x9f, 0xe1, 0xff, 0xff, //0x000020f9 vmovdqu $-7777(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xb7, 0xe0, 0xff, 0xff, //0x00002101 vmovdqu $-8009(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x00002109 vmovdqa %ymm1, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe2, //0x0000210d vmovdqa %ymm2, %ymm12 + 0x0f, 0x84, 0x79, 0xfd, 0xff, 0xff, //0x00002111 je LBB0_363 + 0x8a, 0x0a, //0x00002117 movb (%rdx), %cl + 0x88, 0x0e, //0x00002119 movb %cl, (%rsi) + 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x0000211b leaq $64(%rsp), %r14 + 0xe9, 0x6b, 0xfd, 0xff, 0xff, //0x00002120 jmp LBB0_363 + //0x00002125 LBB0_386 + 0x48, 0x8b, 0x74, 0x24, 0x20, //0x00002125 movq $32(%rsp), %rsi + 0x48, 0x8b, 0x4e, 0x08, //0x0000212a movq $8(%rsi), %rcx + 0x48, 0x0f, 0xbc, 0xd7, //0x0000212e bsfq %rdi, %rdx + 0x4c, 0x29, 0xca, //0x00002132 subq %r9, %rdx + 0x48, 0x01, 0xd1, //0x00002135 addq %rdx, %rcx + 0x48, 0x83, 0xc1, 0x01, //0x00002138 addq $1, %rcx + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000213c movq $8(%rsp), %r15 + 0x49, 0x89, 0x0f, //0x00002141 movq %rcx, (%r15) + 0x48, 0x8b, 0x56, 0x08, //0x00002144 movq $8(%rsi), %rdx + 0x48, 0x39, 0xd1, //0x00002148 cmpq %rdx, %rcx + 0x48, 0x0f, 0x47, 0xca, //0x0000214b cmovaq %rdx, %rcx + 0x49, 0x89, 0x0f, //0x0000214f movq %rcx, (%r15) + 0x0f, 0x86, 0x5d, 0xe9, 0xff, 0xff, //0x00002152 jbe LBB0_387 + 0xe9, 0xb8, 0x1b, 0x00, 0x00, //0x00002158 jmp LBB0_728 + //0x0000215d LBB0_388 + 0x0f, 0xbc, 0xd9, //0x0000215d bsfl %ecx, %ebx + 0x48, 0x89, 0xd9, //0x00002160 movq %rbx, %rcx + 0x48, 0x29, 0xf9, //0x00002163 subq %rdi, %rcx + 0x49, 0x89, 0x0f, //0x00002166 movq %rcx, (%r15) + 0x48, 0x85, 0xc9, //0x00002169 testq %rcx, %rcx + 0x4c, 0x8b, 0x1c, 0x24, //0x0000216c movq (%rsp), %r11 + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002170 movabsq $4294977024, %rdi + 0x0f, 0x8e, 0x40, 0x00, 0x00, 0x00, //0x0000217a jle LBB0_393 + 0x49, 0x01, 0xd8, //0x00002180 addq %rbx, %r8 + 0x48, 0x01, 0xda, //0x00002183 addq %rbx, %rdx + 0x48, 0x01, 0xde, //0x00002186 addq %rbx, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002189 .p2align 4, 0x90 + //0x00002190 LBB0_390 + 0x0f, 0xb6, 0x0e, //0x00002190 movzbl (%rsi), %ecx + 0x48, 0x83, 0xf9, 0x20, //0x00002193 cmpq $32, %rcx + 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00002197 ja LBB0_393 + 0x48, 0x0f, 0xa3, 0xcf, //0x0000219d btq %rcx, %rdi + 0x0f, 0x83, 0x19, 0x00, 0x00, 0x00, //0x000021a1 jae LBB0_393 + 0x49, 0x89, 0x17, //0x000021a7 movq %rdx, (%r15) + 0x49, 0x83, 0xc0, 0xff, //0x000021aa addq $-1, %r8 + 0x48, 0x83, 0xc2, 0xff, //0x000021ae addq $-1, %rdx + 0x48, 0x83, 0xc6, 0xff, //0x000021b2 addq $-1, %rsi + 0x49, 0x83, 0xf8, 0x01, //0x000021b6 cmpq $1, %r8 + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x000021ba jg LBB0_390 + //0x000021c0 LBB0_393 + 0x48, 0x85, 0xc0, //0x000021c0 testq %rax, %rax + 0x0f, 0x8f, 0xd7, 0xe1, 0xff, 0xff, //0x000021c3 jg LBB0_3 + 0xe9, 0x61, 0x1c, 0x00, 0x00, //0x000021c9 jmp LBB0_394 + //0x000021ce LBB0_395 + 0x49, 0x8d, 0x55, 0xff, //0x000021ce leaq $-1(%r13), %rdx + 0x48, 0x39, 0xd6, //0x000021d2 cmpq %rdx, %rsi + 0x49, 0xf7, 0xd5, //0x000021d5 notq %r13 + 0x4d, 0x0f, 0x45, 0xea, //0x000021d8 cmovneq %r10, %r13 + 0x84, 0xc9, //0x000021dc testb %cl, %cl + 0x4d, 0x0f, 0x45, 0xd5, //0x000021de cmovneq %r13, %r10 + 0xe9, 0x2e, 0xf6, 0xff, 0xff, //0x000021e2 jmp LBB0_293 + //0x000021e7 LBB0_396 + 0x4d, 0x89, 0xc5, //0x000021e7 movq %r8, %r13 + 0x4d, 0x29, 0xcd, //0x000021ea subq %r9, %r13 + 0x0f, 0x84, 0x8b, 0x1c, 0x00, 0x00, //0x000021ed je LBB0_732 + 0x49, 0x83, 0xfd, 0x40, //0x000021f3 cmpq $64, %r13 + 0x0f, 0x82, 0x13, 0x0c, 0x00, 0x00, //0x000021f7 jb LBB0_543 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000021fd movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x00002204 movq %r9, %rax + 0x45, 0x31, 0xdb, //0x00002207 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000220a .p2align 4, 0x90 + //0x00002210 LBB0_399 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x00002210 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x00002216 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x0000221d vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x00002221 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0x74, 0xd6, //0x00002225 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x00002229 vpmovmskb %ymm2, %ebx + 0xc5, 0xfd, 0x74, 0xd7, //0x0000222d vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00002231 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd7, //0x00002235 vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00002239 vpmovmskb %ymm2, %ecx + 0xc5, 0xbd, 0x64, 0xd1, //0x0000223d vpcmpgtb %ymm1, %ymm8, %ymm2 + 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00002241 vpcmpgtb %ymm9, %ymm1, %ymm1 + 0xc5, 0xed, 0xdb, 0xc9, //0x00002246 vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf1, //0x0000224a vpmovmskb %ymm1, %esi + 0x48, 0xc1, 0xe3, 0x20, //0x0000224e shlq $32, %rbx + 0x48, 0x09, 0xdf, //0x00002252 orq %rbx, %rdi + 0x48, 0xc1, 0xe1, 0x20, //0x00002255 shlq $32, %rcx + 0x48, 0xc1, 0xe6, 0x20, //0x00002259 shlq $32, %rsi + 0x48, 0x09, 0xca, //0x0000225d orq %rcx, %rdx + 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00002260 jne LBB0_410 + 0x4d, 0x85, 0xdb, //0x00002266 testq %r11, %r11 + 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00002269 jne LBB0_412 + 0x45, 0x31, 0xdb, //0x0000226f xorl %r11d, %r11d + //0x00002272 LBB0_402 + 0xc5, 0xbd, 0x64, 0xc8, //0x00002272 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00002276 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x0000227b vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x0000227f vpmovmskb %ymm0, %ecx + 0x48, 0x09, 0xce, //0x00002283 orq %rcx, %rsi + 0x48, 0x85, 0xff, //0x00002286 testq %rdi, %rdi + 0x0f, 0x85, 0x7f, 0x00, 0x00, 0x00, //0x00002289 jne LBB0_413 + 0x48, 0x85, 0xf6, //0x0000228f testq %rsi, %rsi + 0x0f, 0x85, 0x97, 0x1a, 0x00, 0x00, //0x00002292 jne LBB0_709 + 0x49, 0x83, 0xc5, 0xc0, //0x00002298 addq $-64, %r13 + 0x48, 0x83, 0xc0, 0x40, //0x0000229c addq $64, %rax + 0x49, 0x83, 0xfd, 0x3f, //0x000022a0 cmpq $63, %r13 + 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x000022a4 ja LBB0_399 + 0xe9, 0x93, 0x09, 0x00, 0x00, //0x000022aa jmp LBB0_405 + //0x000022af LBB0_410 + 0x49, 0x83, 0xff, 0xff, //0x000022af cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x000022b3 jne LBB0_412 + 0x4c, 0x0f, 0xbc, 0xfa, //0x000022b9 bsfq %rdx, %r15 + 0x49, 0x01, 0xc7, //0x000022bd addq %rax, %r15 + //0x000022c0 LBB0_412 + 0x4c, 0x89, 0xd9, //0x000022c0 movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x000022c3 notq %rcx + 0x48, 0x21, 0xd1, //0x000022c6 andq %rdx, %rcx + 0x4c, 0x8d, 0x14, 0x09, //0x000022c9 leaq (%rcx,%rcx), %r10 + 0x4d, 0x09, 0xda, //0x000022cd orq %r11, %r10 + 0x4c, 0x89, 0xd3, //0x000022d0 movq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x000022d3 notq %rbx + 0x48, 0x21, 0xd3, //0x000022d6 andq %rdx, %rbx + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000022d9 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd3, //0x000022e3 andq %rdx, %rbx + 0x45, 0x31, 0xdb, //0x000022e6 xorl %r11d, %r11d + 0x48, 0x01, 0xcb, //0x000022e9 addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc3, //0x000022ec setb %r11b + 0x48, 0x01, 0xdb, //0x000022f0 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000022f3 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x000022fd xorq %rcx, %rbx + 0x4c, 0x21, 0xd3, //0x00002300 andq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00002303 notq %rbx + 0x48, 0x21, 0xdf, //0x00002306 andq %rbx, %rdi + 0xe9, 0x64, 0xff, 0xff, 0xff, //0x00002309 jmp LBB0_402 + //0x0000230e LBB0_413 + 0x48, 0x0f, 0xbc, 0xcf, //0x0000230e bsfq %rdi, %rcx + 0x48, 0x85, 0xf6, //0x00002312 testq %rsi, %rsi + 0x0f, 0x84, 0xa4, 0x03, 0x00, 0x00, //0x00002315 je LBB0_470 + 0x48, 0x0f, 0xbc, 0xd6, //0x0000231b bsfq %rsi, %rdx + 0xe9, 0xa0, 0x03, 0x00, 0x00, //0x0000231f jmp LBB0_471 + //0x00002324 LBB0_415 + 0x41, 0x8a, 0x4d, 0x01, //0x00002324 movb $1(%r13), %cl + 0x80, 0xc1, 0xd2, //0x00002328 addb $-46, %cl + 0x80, 0xf9, 0x37, //0x0000232b cmpb $55, %cl + 0x0f, 0x87, 0x84, 0xf2, 0xff, 0xff, //0x0000232e ja LBB0_260 + 0x0f, 0xb6, 0xc9, //0x00002334 movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00002337 movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x00002341 btq %rcx, %rdx + 0x48, 0x89, 0xc1, //0x00002345 movq %rax, %rcx + 0x0f, 0x83, 0x00, 0x08, 0x00, 0x00, //0x00002348 jae LBB0_514 + //0x0000234e LBB0_417 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000234e movq $-1, %r15 + 0x49, 0x83, 0xfb, 0x20, //0x00002355 cmpq $32, %r11 + 0x0f, 0x82, 0x5d, 0x0a, 0x00, 0x00, //0x00002359 jb LBB0_540 + 0x45, 0x31, 0xc0, //0x0000235f xorl %r8d, %r8d + 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002362 movq $-1, %r10 + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002369 movq $-1, %r9 + //0x00002370 .p2align 4, 0x90 + //0x00002370 LBB0_419 + 0xc4, 0x81, 0x7e, 0x6f, 0x44, 0x05, 0x00, //0x00002370 vmovdqu (%r13,%r8), %ymm0 + 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x00002377 vpcmpgtb %ymm10, %ymm0, %ymm1 + 0xc5, 0x95, 0x64, 0xd0, //0x0000237c vpcmpgtb %ymm0, %ymm13, %ymm2 + 0xc5, 0xed, 0xdb, 0xc9, //0x00002380 vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0x85, 0x74, 0xd0, //0x00002384 vpcmpeqb %ymm0, %ymm15, %ymm2 + 0xc5, 0xfd, 0x74, 0x1d, 0xd0, 0xde, 0xff, 0xff, //0x00002388 vpcmpeqb $-8496(%rip), %ymm0, %ymm3 /* LCPI0_17+0(%rip) */ + 0xc5, 0xe5, 0xeb, 0xd2, //0x00002390 vpor %ymm2, %ymm3, %ymm2 + 0xc5, 0x8d, 0xdb, 0xd8, //0x00002394 vpand %ymm0, %ymm14, %ymm3 + 0xc5, 0xfd, 0x74, 0x05, 0xe0, 0xde, 0xff, 0xff, //0x00002398 vpcmpeqb $-8480(%rip), %ymm0, %ymm0 /* LCPI0_18+0(%rip) */ + 0xc5, 0xfd, 0xd7, 0xf8, //0x000023a0 vpmovmskb %ymm0, %edi + 0xc5, 0xe5, 0x74, 0xdc, //0x000023a4 vpcmpeqb %ymm4, %ymm3, %ymm3 + 0xc5, 0xfd, 0xd7, 0xf3, //0x000023a8 vpmovmskb %ymm3, %esi + 0xc5, 0xfd, 0xd7, 0xd2, //0x000023ac vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0xeb, 0xc0, //0x000023b0 vpor %ymm0, %ymm1, %ymm0 + 0xc5, 0xe5, 0xeb, 0xca, //0x000023b4 vpor %ymm2, %ymm3, %ymm1 + 0xc5, 0xfd, 0xeb, 0xc1, //0x000023b8 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x000023bc vpmovmskb %ymm0, %ecx + 0x48, 0xf7, 0xd1, //0x000023c0 notq %rcx + 0x48, 0x0f, 0xbc, 0xc9, //0x000023c3 bsfq %rcx, %rcx + 0x83, 0xf9, 0x20, //0x000023c7 cmpl $32, %ecx + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x000023ca je LBB0_421 + 0xbb, 0xff, 0xff, 0xff, 0xff, //0x000023d0 movl $-1, %ebx + 0xd3, 0xe3, //0x000023d5 shll %cl, %ebx + 0xf7, 0xd3, //0x000023d7 notl %ebx + 0x21, 0xdf, //0x000023d9 andl %ebx, %edi + 0x21, 0xde, //0x000023db andl %ebx, %esi + 0x21, 0xd3, //0x000023dd andl %edx, %ebx + 0x89, 0xda, //0x000023df movl %ebx, %edx + //0x000023e1 LBB0_421 + 0x8d, 0x5f, 0xff, //0x000023e1 leal $-1(%rdi), %ebx + 0x21, 0xfb, //0x000023e4 andl %edi, %ebx + 0xc5, 0xfe, 0x6f, 0x1d, 0xd2, 0xdd, 0xff, 0xff, //0x000023e6 vmovdqu $-8750(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0x0f, 0x85, 0x38, 0x07, 0x00, 0x00, //0x000023ee jne LBB0_509 + 0x8d, 0x5e, 0xff, //0x000023f4 leal $-1(%rsi), %ebx + 0x21, 0xf3, //0x000023f7 andl %esi, %ebx + 0x0f, 0x85, 0x2d, 0x07, 0x00, 0x00, //0x000023f9 jne LBB0_509 + 0x8d, 0x5a, 0xff, //0x000023ff leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x00002402 andl %edx, %ebx + 0x0f, 0x85, 0x22, 0x07, 0x00, 0x00, //0x00002404 jne LBB0_509 + 0x85, 0xff, //0x0000240a testl %edi, %edi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000240c je LBB0_427 + 0x0f, 0xbc, 0xff, //0x00002412 bsfl %edi, %edi + 0x49, 0x83, 0xf9, 0xff, //0x00002415 cmpq $-1, %r9 + 0x0f, 0x85, 0xd6, 0x08, 0x00, 0x00, //0x00002419 jne LBB0_528 + 0x4c, 0x01, 0xc7, //0x0000241f addq %r8, %rdi + 0x49, 0x89, 0xf9, //0x00002422 movq %rdi, %r9 + //0x00002425 LBB0_427 + 0x85, 0xf6, //0x00002425 testl %esi, %esi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00002427 je LBB0_430 + 0x0f, 0xbc, 0xf6, //0x0000242d bsfl %esi, %esi + 0x49, 0x83, 0xfa, 0xff, //0x00002430 cmpq $-1, %r10 + 0x0f, 0x85, 0xc6, 0x08, 0x00, 0x00, //0x00002434 jne LBB0_529 + 0x4c, 0x01, 0xc6, //0x0000243a addq %r8, %rsi + 0x49, 0x89, 0xf2, //0x0000243d movq %rsi, %r10 + //0x00002440 LBB0_430 + 0x85, 0xd2, //0x00002440 testl %edx, %edx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00002442 je LBB0_433 + 0x0f, 0xbc, 0xd2, //0x00002448 bsfl %edx, %edx + 0x49, 0x83, 0xff, 0xff, //0x0000244b cmpq $-1, %r15 + 0x0f, 0x85, 0xb6, 0x08, 0x00, 0x00, //0x0000244f jne LBB0_530 + 0x4c, 0x01, 0xc2, //0x00002455 addq %r8, %rdx + 0x49, 0x89, 0xd7, //0x00002458 movq %rdx, %r15 + //0x0000245b LBB0_433 + 0x83, 0xf9, 0x20, //0x0000245b cmpl $32, %ecx + 0x0f, 0x85, 0x1c, 0x02, 0x00, 0x00, //0x0000245e jne LBB0_467 + 0x49, 0x83, 0xc3, 0xe0, //0x00002464 addq $-32, %r11 + 0x49, 0x83, 0xc0, 0x20, //0x00002468 addq $32, %r8 + 0x49, 0x83, 0xfb, 0x1f, //0x0000246c cmpq $31, %r11 + 0x0f, 0x87, 0xfa, 0xfe, 0xff, 0xff, //0x00002470 ja LBB0_419 + 0xc5, 0xf8, 0x77, //0x00002476 vzeroupper + 0x4d, 0x01, 0xe8, //0x00002479 addq %r13, %r8 + 0x4c, 0x89, 0x54, 0x24, 0x28, //0x0000247c movq %r10, $40(%rsp) + 0x49, 0x83, 0xfb, 0x10, //0x00002481 cmpq $16, %r11 + 0x4c, 0x89, 0x6c, 0x24, 0x30, //0x00002485 movq %r13, $48(%rsp) + 0x0f, 0x82, 0x48, 0x01, 0x00, 0x00, //0x0000248a jb LBB0_454 + //0x00002490 LBB0_436 + 0x4d, 0x89, 0xc2, //0x00002490 movq %r8, %r10 + 0x4d, 0x29, 0xea, //0x00002493 subq %r13, %r10 + 0x45, 0x31, 0xed, //0x00002496 xorl %r13d, %r13d + //0x00002499 LBB0_437 + 0x4c, 0x89, 0xce, //0x00002499 movq %r9, %rsi + 0xc4, 0x81, 0x7a, 0x6f, 0x04, 0x28, //0x0000249c vmovdqu (%r8,%r13), %xmm0 + 0xc5, 0xf9, 0x64, 0x0d, 0x96, 0xdb, 0xff, 0xff, //0x000024a2 vpcmpgtb $-9322(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ + 0xc5, 0xfa, 0x6f, 0x15, 0x9e, 0xdb, 0xff, 0xff, //0x000024aa vmovdqu $-9314(%rip), %xmm2 /* LCPI0_21+0(%rip) */ + 0xc5, 0xe9, 0x64, 0xd0, //0x000024b2 vpcmpgtb %xmm0, %xmm2, %xmm2 + 0xc5, 0xf1, 0xdb, 0xca, //0x000024b6 vpand %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0x74, 0x15, 0x9e, 0xdb, 0xff, 0xff, //0x000024ba vpcmpeqb $-9314(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x1d, 0xa6, 0xdb, 0xff, 0xff, //0x000024c2 vpcmpeqb $-9306(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xd2, //0x000024ca vpor %xmm2, %xmm3, %xmm2 + 0xc5, 0xf9, 0xdb, 0x1d, 0x4a, 0xdb, 0xff, 0xff, //0x000024ce vpand $-9398(%rip), %xmm0, %xmm3 /* LCPI0_12+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0xa2, 0xdb, 0xff, 0xff, //0x000024d6 vpcmpeqb $-9310(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ + 0xc5, 0xe1, 0x74, 0x1d, 0xaa, 0xdb, 0xff, 0xff, //0x000024de vpcmpeqb $-9302(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xe0, //0x000024e6 vpor %xmm0, %xmm3, %xmm4 + 0xc5, 0xe9, 0xeb, 0xc9, //0x000024ea vpor %xmm1, %xmm2, %xmm1 + 0xc5, 0xd9, 0xeb, 0xc9, //0x000024ee vpor %xmm1, %xmm4, %xmm1 + 0xc5, 0x79, 0xd7, 0xc8, //0x000024f2 vpmovmskb %xmm0, %r9d + 0xc5, 0xf9, 0xd7, 0xfb, //0x000024f6 vpmovmskb %xmm3, %edi + 0xc5, 0xf9, 0xd7, 0xd2, //0x000024fa vpmovmskb %xmm2, %edx + 0xc5, 0xf9, 0xd7, 0xc9, //0x000024fe vpmovmskb %xmm1, %ecx + 0xf7, 0xd1, //0x00002502 notl %ecx + 0x0f, 0xbc, 0xc9, //0x00002504 bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x00002507 cmpl $16, %ecx + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x0000250a je LBB0_439 + 0xbb, 0xff, 0xff, 0xff, 0xff, //0x00002510 movl $-1, %ebx + 0xd3, 0xe3, //0x00002515 shll %cl, %ebx + 0xf7, 0xd3, //0x00002517 notl %ebx + 0x41, 0x21, 0xd9, //0x00002519 andl %ebx, %r9d + 0x21, 0xdf, //0x0000251c andl %ebx, %edi + 0x21, 0xd3, //0x0000251e andl %edx, %ebx + 0x89, 0xda, //0x00002520 movl %ebx, %edx + //0x00002522 LBB0_439 + 0x41, 0x8d, 0x59, 0xff, //0x00002522 leal $-1(%r9), %ebx + 0x44, 0x21, 0xcb, //0x00002526 andl %r9d, %ebx + 0x0f, 0x85, 0x5a, 0x07, 0x00, 0x00, //0x00002529 jne LBB0_523 + 0x8d, 0x5f, 0xff, //0x0000252f leal $-1(%rdi), %ebx + 0x21, 0xfb, //0x00002532 andl %edi, %ebx + 0x0f, 0x85, 0x4f, 0x07, 0x00, 0x00, //0x00002534 jne LBB0_523 + 0x8d, 0x5a, 0xff, //0x0000253a leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x0000253d andl %edx, %ebx + 0x0f, 0x85, 0x44, 0x07, 0x00, 0x00, //0x0000253f jne LBB0_523 + 0x45, 0x85, 0xc9, //0x00002545 testl %r9d, %r9d + 0x0f, 0x84, 0x43, 0x00, 0x00, 0x00, //0x00002548 je LBB0_446 + 0x45, 0x0f, 0xbc, 0xc9, //0x0000254e bsfl %r9d, %r9d + 0x48, 0x83, 0xfe, 0xff, //0x00002552 cmpq $-1, %rsi + 0x0f, 0x85, 0xf4, 0x07, 0x00, 0x00, //0x00002556 jne LBB0_533 + 0x4d, 0x01, 0xd1, //0x0000255c addq %r10, %r9 + 0x4d, 0x01, 0xe9, //0x0000255f addq %r13, %r9 + 0x85, 0xff, //0x00002562 testl %edi, %edi + 0x0f, 0x84, 0x32, 0x00, 0x00, 0x00, //0x00002564 je LBB0_445 + //0x0000256a LBB0_447 + 0x0f, 0xbc, 0xff, //0x0000256a bsfl %edi, %edi + 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000256d cmpq $-1, $40(%rsp) + 0x0f, 0x85, 0xdf, 0x07, 0x00, 0x00, //0x00002573 jne LBB0_534 + 0x4c, 0x01, 0xd7, //0x00002579 addq %r10, %rdi + 0x4c, 0x01, 0xef, //0x0000257c addq %r13, %rdi + 0x48, 0x89, 0x7c, 0x24, 0x28, //0x0000257f movq %rdi, $40(%rsp) + 0x85, 0xd2, //0x00002584 testl %edx, %edx + 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x00002586 jne LBB0_449 + 0xe9, 0x29, 0x00, 0x00, 0x00, //0x0000258c jmp LBB0_451 + //0x00002591 LBB0_446 + 0x49, 0x89, 0xf1, //0x00002591 movq %rsi, %r9 + 0x85, 0xff, //0x00002594 testl %edi, %edi + 0x0f, 0x85, 0xce, 0xff, 0xff, 0xff, //0x00002596 jne LBB0_447 + //0x0000259c LBB0_445 + 0x85, 0xd2, //0x0000259c testl %edx, %edx + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x0000259e je LBB0_451 + //0x000025a4 LBB0_449 + 0x0f, 0xbc, 0xd2, //0x000025a4 bsfl %edx, %edx + 0x49, 0x83, 0xff, 0xff, //0x000025a7 cmpq $-1, %r15 + 0x0f, 0x85, 0xae, 0x07, 0x00, 0x00, //0x000025ab jne LBB0_535 + 0x4c, 0x01, 0xd2, //0x000025b1 addq %r10, %rdx + 0x4c, 0x01, 0xea, //0x000025b4 addq %r13, %rdx + 0x49, 0x89, 0xd7, //0x000025b7 movq %rdx, %r15 + //0x000025ba LBB0_451 + 0x83, 0xf9, 0x10, //0x000025ba cmpl $16, %ecx + 0x0f, 0x85, 0xd5, 0x01, 0x00, 0x00, //0x000025bd jne LBB0_483 + 0x49, 0x83, 0xc3, 0xf0, //0x000025c3 addq $-16, %r11 + 0x49, 0x83, 0xc5, 0x10, //0x000025c7 addq $16, %r13 + 0x49, 0x83, 0xfb, 0x0f, //0x000025cb cmpq $15, %r11 + 0x0f, 0x87, 0xc4, 0xfe, 0xff, 0xff, //0x000025cf ja LBB0_437 + 0x4d, 0x01, 0xe8, //0x000025d5 addq %r13, %r8 + //0x000025d8 LBB0_454 + 0x4d, 0x85, 0xdb, //0x000025d8 testq %r11, %r11 + 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x000025db movq $48(%rsp), %r13 + 0x4c, 0x8b, 0x54, 0x24, 0x28, //0x000025e0 movq $40(%rsp), %r10 + 0x0f, 0x84, 0xd7, 0x01, 0x00, 0x00, //0x000025e5 je LBB0_485 + 0x4b, 0x8d, 0x0c, 0x18, //0x000025eb leaq (%r8,%r11), %rcx + 0x48, 0x89, 0x4c, 0x24, 0x38, //0x000025ef movq %rcx, $56(%rsp) + 0x4c, 0x89, 0xc6, //0x000025f4 movq %r8, %rsi + 0x4c, 0x29, 0xee, //0x000025f7 subq %r13, %rsi + 0x31, 0xc9, //0x000025fa xorl %ecx, %ecx + 0xe9, 0x2c, 0x00, 0x00, 0x00, //0x000025fc jmp LBB0_460 + //0x00002601 LBB0_456 + 0x83, 0xff, 0x65, //0x00002601 cmpl $101, %edi + 0x0f, 0x85, 0xb5, 0x01, 0x00, 0x00, //0x00002604 jne LBB0_484 + //0x0000260a LBB0_457 + 0x49, 0x83, 0xfa, 0xff, //0x0000260a cmpq $-1, %r10 + 0x0f, 0x85, 0x8f, 0x06, 0x00, 0x00, //0x0000260e jne LBB0_525 + 0x4c, 0x8d, 0x14, 0x0e, //0x00002614 leaq (%rsi,%rcx), %r10 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002618 .p2align 4, 0x90 + //0x00002620 LBB0_459 + 0x48, 0x83, 0xc1, 0x01, //0x00002620 addq $1, %rcx + 0x49, 0x39, 0xcb, //0x00002624 cmpq %rcx, %r11 + 0x0f, 0x84, 0xe5, 0x04, 0x00, 0x00, //0x00002627 je LBB0_508 + //0x0000262d LBB0_460 + 0x41, 0x0f, 0xbe, 0x3c, 0x08, //0x0000262d movsbl (%r8,%rcx), %edi + 0x8d, 0x5f, 0xd0, //0x00002632 leal $-48(%rdi), %ebx + 0x83, 0xfb, 0x0a, //0x00002635 cmpl $10, %ebx + 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x00002638 jb LBB0_459 + 0x8d, 0x5f, 0xd5, //0x0000263e leal $-43(%rdi), %ebx + 0x83, 0xfb, 0x1a, //0x00002641 cmpl $26, %ebx + 0x0f, 0x87, 0xb7, 0xff, 0xff, 0xff, //0x00002644 ja LBB0_456 + 0x48, 0x8d, 0x15, 0x8f, 0x1a, 0x00, 0x00, //0x0000264a leaq $6799(%rip), %rdx /* LJTI0_2+0(%rip) */ + 0x48, 0x63, 0x3c, 0x9a, //0x00002651 movslq (%rdx,%rbx,4), %rdi + 0x48, 0x01, 0xd7, //0x00002655 addq %rdx, %rdi + 0xff, 0xe7, //0x00002658 jmpq *%rdi + //0x0000265a LBB0_463 + 0x49, 0x83, 0xff, 0xff, //0x0000265a cmpq $-1, %r15 + 0x0f, 0x85, 0x3f, 0x06, 0x00, 0x00, //0x0000265e jne LBB0_525 + 0x4c, 0x8d, 0x3c, 0x0e, //0x00002664 leaq (%rsi,%rcx), %r15 + 0xe9, 0xb3, 0xff, 0xff, 0xff, //0x00002668 jmp LBB0_459 + //0x0000266d LBB0_465 + 0x49, 0x83, 0xf9, 0xff, //0x0000266d cmpq $-1, %r9 + 0x0f, 0x85, 0x2c, 0x06, 0x00, 0x00, //0x00002671 jne LBB0_525 + 0x4c, 0x8d, 0x0c, 0x0e, //0x00002677 leaq (%rsi,%rcx), %r9 + 0xe9, 0xa0, 0xff, 0xff, 0xff, //0x0000267b jmp LBB0_459 + //0x00002680 LBB0_467 + 0x4c, 0x01, 0xc1, //0x00002680 addq %r8, %rcx + 0x4c, 0x01, 0xe9, //0x00002683 addq %r13, %rcx + 0xc5, 0xf8, 0x77, //0x00002686 vzeroupper + 0x49, 0x89, 0xc8, //0x00002689 movq %rcx, %r8 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000268c movq $-1, %rcx + 0x4d, 0x85, 0xc9, //0x00002693 testq %r9, %r9 + 0x0f, 0x85, 0x36, 0x01, 0x00, 0x00, //0x00002696 jne LBB0_486 + 0xe9, 0xcd, 0x17, 0x00, 0x00, //0x0000269c jmp LBB0_726 + //0x000026a1 LBB0_468 + 0x4d, 0x29, 0xf4, //0x000026a1 subq %r14, %r12 + 0x49, 0x01, 0xd4, //0x000026a4 addq %rdx, %r12 + 0x49, 0x39, 0xfc, //0x000026a7 cmpq %rdi, %r12 + 0x0f, 0x82, 0x22, 0xdf, 0xff, 0xff, //0x000026aa jb LBB0_35 + 0xe9, 0xe8, 0x15, 0x00, 0x00, //0x000026b0 jmp LBB0_698 + //0x000026b5 LBB0_469 + 0x4c, 0x8b, 0x54, 0x24, 0x38, //0x000026b5 movq $56(%rsp), %r10 + 0xe9, 0x32, 0xf0, 0xff, 0xff, //0x000026ba jmp LBB0_282 + //0x000026bf LBB0_470 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x000026bf movl $64, %edx + //0x000026c4 LBB0_471 + 0x4c, 0x8b, 0x1c, 0x24, //0x000026c4 movq (%rsp), %r11 + 0x48, 0x39, 0xca, //0x000026c8 cmpq %rcx, %rdx + 0x0f, 0x82, 0xb5, 0x17, 0x00, 0x00, //0x000026cb jb LBB0_162 + 0xc5, 0x7d, 0x7f, 0xea, //0x000026d1 vmovdqa %ymm13, %ymm2 + 0x48, 0x01, 0xc8, //0x000026d5 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000026d8 addq $1, %rax + //0x000026dc LBB0_473 + 0x48, 0x85, 0xc0, //0x000026dc testq %rax, %rax + 0x0f, 0x88, 0xdc, 0x15, 0x00, 0x00, //0x000026df js LBB0_702 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x000026e5 movq $8(%rsp), %r15 + 0x49, 0x89, 0x07, //0x000026ea movq %rax, (%r15) + 0x4d, 0x85, 0xc9, //0x000026ed testq %r9, %r9 + 0xc5, 0x7d, 0x6f, 0xea, //0x000026f0 vmovdqa %ymm2, %ymm13 + 0x0f, 0x8f, 0xa6, 0xdc, 0xff, 0xff, //0x000026f4 jg LBB0_3 + 0xe9, 0xdb, 0x15, 0x00, 0x00, //0x000026fa jmp LBB0_475 + //0x000026ff LBB0_108 + 0x4d, 0x85, 0xff, //0x000026ff testq %r15, %r15 + 0x0f, 0x85, 0x37, 0x07, 0x00, 0x00, //0x00002702 jne LBB0_545 + 0x49, 0x01, 0xf1, //0x00002708 addq %rsi, %r9 + 0x49, 0x29, 0xf2, //0x0000270b subq %rsi, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000270e movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00002713 movq (%rsp), %r11 + //0x00002717 LBB0_110 + 0x4d, 0x85, 0xd2, //0x00002717 testq %r10, %r10 + 0x0f, 0x8f, 0x9f, 0x07, 0x00, 0x00, //0x0000271a jg LBB0_549 + 0xe9, 0xf0, 0x15, 0x00, 0x00, //0x00002720 jmp LBB0_728 + //0x00002725 LBB0_476 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002725 vmovdqa %ymm13, %ymm0 + 0x0f, 0xbc, 0xcb, //0x00002729 bsfl %ebx, %ecx + //0x0000272c LBB0_477 + 0x49, 0xf7, 0xd2, //0x0000272c notq %r10 + 0x49, 0x29, 0xca, //0x0000272f subq %rcx, %r10 + 0xe9, 0xde, 0xf0, 0xff, 0xff, //0x00002732 jmp LBB0_293 + //0x00002737 LBB0_478 + 0x66, 0x0f, 0xbc, 0xc3, //0x00002737 bsfw %bx, %ax + 0x0f, 0xb7, 0xf8, //0x0000273b movzwl %ax, %edi + 0x48, 0x89, 0xf8, //0x0000273e movq %rdi, %rax + 0x4c, 0x29, 0xc8, //0x00002741 subq %r9, %rax + 0x49, 0x89, 0x07, //0x00002744 movq %rax, (%r15) + 0x48, 0x85, 0xc0, //0x00002747 testq %rax, %rax + 0x48, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000274a movabsq $4294977024, %rbx + 0x0f, 0x8e, 0x90, 0xdc, 0xff, 0xff, //0x00002754 jle LBB0_2 + 0x48, 0x01, 0xf9, //0x0000275a addq %rdi, %rcx + 0x48, 0x01, 0xfe, //0x0000275d addq %rdi, %rsi + 0x48, 0x01, 0xfa, //0x00002760 addq %rdi, %rdx + //0x00002763 LBB0_480 + 0x0f, 0xb6, 0x02, //0x00002763 movzbl (%rdx), %eax + 0x48, 0x83, 0xf8, 0x20, //0x00002766 cmpq $32, %rax + 0x0f, 0x87, 0x7a, 0xdc, 0xff, 0xff, //0x0000276a ja LBB0_2 + 0x48, 0x0f, 0xa3, 0xc3, //0x00002770 btq %rax, %rbx + 0x0f, 0x83, 0x70, 0xdc, 0xff, 0xff, //0x00002774 jae LBB0_2 + 0x49, 0x89, 0x37, //0x0000277a movq %rsi, (%r15) + 0x48, 0x83, 0xc1, 0xff, //0x0000277d addq $-1, %rcx + 0x48, 0x83, 0xc6, 0xff, //0x00002781 addq $-1, %rsi + 0x48, 0x83, 0xc2, 0xff, //0x00002785 addq $-1, %rdx + 0x48, 0x83, 0xf9, 0x01, //0x00002789 cmpq $1, %rcx + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x0000278d jg LBB0_480 + 0xe9, 0x52, 0xdc, 0xff, 0xff, //0x00002793 jmp LBB0_2 + //0x00002798 LBB0_483 + 0x89, 0xc9, //0x00002798 movl %ecx, %ecx + 0x49, 0x01, 0xc8, //0x0000279a addq %rcx, %r8 + 0x4d, 0x01, 0xe8, //0x0000279d addq %r13, %r8 + 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x000027a0 movq $48(%rsp), %r13 + 0x4c, 0x8b, 0x54, 0x24, 0x28, //0x000027a5 movq $40(%rsp), %r10 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000027aa movq $-1, %rcx + 0x4d, 0x85, 0xc9, //0x000027b1 testq %r9, %r9 + 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x000027b4 jne LBB0_486 + 0xe9, 0xaf, 0x16, 0x00, 0x00, //0x000027ba jmp LBB0_726 + //0x000027bf LBB0_484 + 0x49, 0x01, 0xc8, //0x000027bf addq %rcx, %r8 + //0x000027c2 LBB0_485 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000027c2 movq $-1, %rcx + 0x4d, 0x85, 0xc9, //0x000027c9 testq %r9, %r9 + 0x0f, 0x84, 0x9c, 0x16, 0x00, 0x00, //0x000027cc je LBB0_726 + //0x000027d2 LBB0_486 + 0x4d, 0x85, 0xff, //0x000027d2 testq %r15, %r15 + 0x0f, 0x84, 0x93, 0x16, 0x00, 0x00, //0x000027d5 je LBB0_726 + 0x4d, 0x85, 0xd2, //0x000027db testq %r10, %r10 + 0x0f, 0x84, 0x8a, 0x16, 0x00, 0x00, //0x000027de je LBB0_726 + 0x4d, 0x29, 0xe8, //0x000027e4 subq %r13, %r8 + 0x49, 0x8d, 0x48, 0xff, //0x000027e7 leaq $-1(%r8), %rcx + 0x49, 0x39, 0xc9, //0x000027eb cmpq %rcx, %r9 + 0x0f, 0x84, 0x8d, 0x00, 0x00, 0x00, //0x000027ee je LBB0_494 + 0x49, 0x39, 0xcf, //0x000027f4 cmpq %rcx, %r15 + 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x000027f7 je LBB0_494 + 0x49, 0x39, 0xca, //0x000027fd cmpq %rcx, %r10 + 0x0f, 0x84, 0x7b, 0x00, 0x00, 0x00, //0x00002800 je LBB0_494 + 0x4d, 0x85, 0xff, //0x00002806 testq %r15, %r15 + 0xc5, 0xfe, 0x6f, 0x2d, 0xaf, 0xd8, 0xff, 0xff, //0x00002809 vmovdqu $-10065(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0xc7, 0xd8, 0xff, 0xff, //0x00002811 vmovdqu $-10041(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0xdf, 0xd8, 0xff, 0xff, //0x00002819 vmovdqu $-10017(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0xf7, 0xd8, 0xff, 0xff, //0x00002821 vmovdqu $-9993(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002829 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0xca, 0xd9, 0xff, 0xff, //0x0000282e vmovdqu $-9782(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x05, 0xe2, 0xd9, 0xff, 0xff, //0x00002836 vmovdqu $-9758(%rip), %ymm0 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0xfa, 0xd9, 0xff, 0xff, //0x0000283e vmovdqu $-9734(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x92, 0xd9, 0xff, 0xff, //0x00002846 vmovdqu $-9838(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x4a, 0xda, 0xff, 0xff, //0x0000284e vmovdqu $-9654(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x62, 0xd9, 0xff, 0xff, //0x00002856 vmovdqu $-9886(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0x0f, 0x8e, 0x8f, 0x00, 0x00, 0x00, //0x0000285e jle LBB0_497 + 0x49, 0x8d, 0x4f, 0xff, //0x00002864 leaq $-1(%r15), %rcx + 0x49, 0x39, 0xca, //0x00002868 cmpq %rcx, %r10 + 0x0f, 0x84, 0x82, 0x00, 0x00, 0x00, //0x0000286b je LBB0_497 + 0x49, 0xf7, 0xd7, //0x00002871 notq %r15 + 0x4d, 0x89, 0xf8, //0x00002874 movq %r15, %r8 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002877 movq $8(%rsp), %r15 + 0xe9, 0x5d, 0x00, 0x00, 0x00, //0x0000287c jmp LBB0_496 + //0x00002881 LBB0_494 + 0x49, 0xf7, 0xd8, //0x00002881 negq %r8 + //0x00002884 LBB0_495 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002884 movq $8(%rsp), %r15 + 0xc5, 0xfe, 0x6f, 0x2d, 0x2f, 0xd8, 0xff, 0xff, //0x00002889 vmovdqu $-10193(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x47, 0xd8, 0xff, 0xff, //0x00002891 vmovdqu $-10169(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x5f, 0xd8, 0xff, 0xff, //0x00002899 vmovdqu $-10145(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x77, 0xd8, 0xff, 0xff, //0x000028a1 vmovdqu $-10121(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000028a9 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0x4a, 0xd9, 0xff, 0xff, //0x000028ae vmovdqu $-9910(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x05, 0x62, 0xd9, 0xff, 0xff, //0x000028b6 vmovdqu $-9886(%rip), %ymm0 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0x7a, 0xd9, 0xff, 0xff, //0x000028be vmovdqu $-9862(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x12, 0xd9, 0xff, 0xff, //0x000028c6 vmovdqu $-9966(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0xca, 0xd9, 0xff, 0xff, //0x000028ce vmovdqu $-9782(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xe2, 0xd8, 0xff, 0xff, //0x000028d6 vmovdqu $-10014(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + //0x000028de LBB0_496 + 0xc5, 0x7e, 0x6f, 0x1d, 0x5a, 0xd8, 0xff, 0xff, //0x000028de vmovdqu $-10150(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x72, 0xd8, 0xff, 0xff, //0x000028e6 vmovdqu $-10126(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + 0xe9, 0x4b, 0x02, 0x00, 0x00, //0x000028ee jmp LBB0_512 + //0x000028f3 LBB0_497 + 0x4c, 0x89, 0xc9, //0x000028f3 movq %r9, %rcx + 0x4c, 0x09, 0xd1, //0x000028f6 orq %r10, %rcx + 0x0f, 0x99, 0xc1, //0x000028f9 setns %cl + 0xc5, 0x7e, 0x6f, 0x1d, 0x3c, 0xd8, 0xff, 0xff, //0x000028fc vmovdqu $-10180(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x54, 0xd8, 0xff, 0xff, //0x00002904 vmovdqu $-10156(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + 0x0f, 0x88, 0xd2, 0x00, 0x00, 0x00, //0x0000290c js LBB0_500 + 0x4d, 0x39, 0xd1, //0x00002912 cmpq %r10, %r9 + 0x0f, 0x8c, 0xc9, 0x00, 0x00, 0x00, //0x00002915 jl LBB0_500 + 0x49, 0xf7, 0xd1, //0x0000291b notq %r9 + 0x4d, 0x89, 0xc8, //0x0000291e movq %r9, %r8 + 0xe9, 0x13, 0x02, 0x00, 0x00, //0x00002921 jmp LBB0_511 + //0x00002926 LBB0_140 + 0x4d, 0x85, 0xff, //0x00002926 testq %r15, %r15 + 0x0f, 0x85, 0x6a, 0x07, 0x00, 0x00, //0x00002929 jne LBB0_570 + 0x49, 0x01, 0xf1, //0x0000292f addq %rsi, %r9 + 0x49, 0x29, 0xf2, //0x00002932 subq %rsi, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002935 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x0000293a movq (%rsp), %r11 + //0x0000293e LBB0_142 + 0x4d, 0x85, 0xd2, //0x0000293e testq %r10, %r10 + 0x0f, 0x8f, 0xc4, 0x07, 0x00, 0x00, //0x00002941 jg LBB0_574 + 0xe9, 0xc9, 0x13, 0x00, 0x00, //0x00002947 jmp LBB0_728 + //0x0000294c LBB0_54 + 0x4c, 0x01, 0xf0, //0x0000294c addq %r14, %rax + 0x49, 0x83, 0xfb, 0x20, //0x0000294f cmpq $32, %r11 + 0x0f, 0x82, 0x45, 0x06, 0x00, 0x00, //0x00002953 jb LBB0_557 + //0x00002959 LBB0_55 + 0xc5, 0xfe, 0x6f, 0x00, //0x00002959 vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x0000295d vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00002961 vpmovmskb %ymm1, %edx + 0xc5, 0xfd, 0x74, 0xc7, //0x00002965 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00002969 vpmovmskb %ymm0, %esi + 0x85, 0xf6, //0x0000296d testl %esi, %esi + 0x0f, 0x85, 0x82, 0x05, 0x00, 0x00, //0x0000296f jne LBB0_552 + 0x4d, 0x85, 0xd2, //0x00002975 testq %r10, %r10 + 0x0f, 0x85, 0xa7, 0x05, 0x00, 0x00, //0x00002978 jne LBB0_554 + 0x45, 0x31, 0xd2, //0x0000297e xorl %r10d, %r10d + 0x48, 0x85, 0xd2, //0x00002981 testq %rdx, %rdx + 0x0f, 0x84, 0x0c, 0x06, 0x00, 0x00, //0x00002984 je LBB0_556 + //0x0000298a LBB0_58 + 0x48, 0x0f, 0xbc, 0xca, //0x0000298a bsfq %rdx, %rcx + 0x4c, 0x29, 0xf0, //0x0000298e subq %r14, %rax + 0x48, 0x01, 0xc8, //0x00002991 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002994 addq $1, %rax + 0xe9, 0x0e, 0xde, 0xff, 0xff, //0x00002998 jmp LBB0_63 + //0x0000299d LBB0_152 + 0x4c, 0x01, 0xf0, //0x0000299d addq %r14, %rax + 0x49, 0x83, 0xfd, 0x20, //0x000029a0 cmpq $32, %r13 + 0x0f, 0x82, 0xaa, 0x08, 0x00, 0x00, //0x000029a4 jb LBB0_587 + //0x000029aa LBB0_153 + 0xc5, 0xfe, 0x6f, 0x00, //0x000029aa vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x000029ae vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd1, //0x000029b2 vpmovmskb %ymm1, %r10d + 0xc5, 0xfd, 0x74, 0xcf, //0x000029b6 vpcmpeqb %ymm7, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x000029ba vpmovmskb %ymm1, %edx + 0x85, 0xd2, //0x000029be testl %edx, %edx + 0x0f, 0x85, 0x9a, 0x07, 0x00, 0x00, //0x000029c0 jne LBB0_577 + 0x4d, 0x85, 0xdb, //0x000029c6 testq %r11, %r11 + 0x0f, 0x85, 0xbf, 0x07, 0x00, 0x00, //0x000029c9 jne LBB0_579 + 0x45, 0x31, 0xdb, //0x000029cf xorl %r11d, %r11d + 0x4d, 0x85, 0xd2, //0x000029d2 testq %r10, %r10 + 0x0f, 0x84, 0x25, 0x08, 0x00, 0x00, //0x000029d5 je LBB0_581 + //0x000029db LBB0_156 + 0x49, 0x0f, 0xbc, 0xd2, //0x000029db bsfq %r10, %rdx + 0xe9, 0x21, 0x08, 0x00, 0x00, //0x000029df jmp LBB0_582 + //0x000029e4 LBB0_500 + 0x49, 0x8d, 0x52, 0xff, //0x000029e4 leaq $-1(%r10), %rdx + 0x49, 0x39, 0xd1, //0x000029e8 cmpq %rdx, %r9 + 0x49, 0xf7, 0xd2, //0x000029eb notq %r10 + 0x4d, 0x0f, 0x45, 0xd0, //0x000029ee cmovneq %r8, %r10 + 0x84, 0xc9, //0x000029f2 testb %cl, %cl + 0x4d, 0x0f, 0x45, 0xc2, //0x000029f4 cmovneq %r10, %r8 + 0xe9, 0x3c, 0x01, 0x00, 0x00, //0x000029f8 jmp LBB0_511 + //0x000029fd LBB0_501 + 0xc5, 0x7d, 0x7f, 0xe8, //0x000029fd vmovdqa %ymm13, %ymm0 + 0x0f, 0xbc, 0xcf, //0x00002a01 bsfl %edi, %ecx + //0x00002a04 LBB0_502 + 0x4c, 0x8b, 0x6c, 0x24, 0x10, //0x00002a04 movq $16(%rsp), %r13 + 0x4d, 0x01, 0xee, //0x00002a09 addq %r13, %r14 + 0x4d, 0x29, 0xd6, //0x00002a0c subq %r10, %r14 + 0x49, 0x29, 0xce, //0x00002a0f subq %rcx, %r14 + 0x4d, 0x29, 0xfe, //0x00002a12 subq %r15, %r14 + 0x49, 0x83, 0xc6, 0xfe, //0x00002a15 addq $-2, %r14 + 0x4d, 0x89, 0xf2, //0x00002a19 movq %r14, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002a1c movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00002a21 movq (%rsp), %r11 + 0xe9, 0xf0, 0xed, 0xff, 0xff, //0x00002a25 jmp LBB0_294 + //0x00002a2a LBB0_503 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002a2a vmovdqa %ymm13, %ymm0 + 0x4c, 0x8b, 0x6c, 0x24, 0x10, //0x00002a2e movq $16(%rsp), %r13 + 0x4d, 0x01, 0xee, //0x00002a33 addq %r13, %r14 + 0x4d, 0x29, 0xd6, //0x00002a36 subq %r10, %r14 + 0x49, 0x29, 0xce, //0x00002a39 subq %rcx, %r14 + 0x49, 0x83, 0xc6, 0xfe, //0x00002a3c addq $-2, %r14 + 0x4d, 0x89, 0xf2, //0x00002a40 movq %r14, %r10 + 0xe9, 0xd2, 0xed, 0xff, 0xff, //0x00002a43 jmp LBB0_294 + //0x00002a48 LBB0_504 + 0x4d, 0x01, 0xf4, //0x00002a48 addq %r14, %r12 + 0x48, 0x85, 0xf6, //0x00002a4b testq %rsi, %rsi + 0x0f, 0x85, 0x14, 0xdb, 0xff, 0xff, //0x00002a4e jne LBB0_28 + 0xe9, 0x49, 0xdb, 0xff, 0xff, //0x00002a54 jmp LBB0_33 + //0x00002a59 LBB0_89 + 0x4c, 0x01, 0xf0, //0x00002a59 addq %r14, %rax + 0x49, 0x83, 0xfb, 0x20, //0x00002a5c cmpq $32, %r11 + 0x0f, 0x82, 0x6b, 0x09, 0x00, 0x00, //0x00002a60 jb LBB0_602 + //0x00002a66 LBB0_90 + 0xc5, 0xfe, 0x6f, 0x00, //0x00002a66 vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00002a6a vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00002a6e vpmovmskb %ymm1, %edx + 0xc5, 0xfd, 0x74, 0xc7, //0x00002a72 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00002a76 vpmovmskb %ymm0, %esi + 0x85, 0xf6, //0x00002a7a testl %esi, %esi + 0x0f, 0x85, 0xa8, 0x08, 0x00, 0x00, //0x00002a7c jne LBB0_597 + 0x4d, 0x85, 0xd2, //0x00002a82 testq %r10, %r10 + 0x0f, 0x85, 0xcd, 0x08, 0x00, 0x00, //0x00002a85 jne LBB0_599 + 0x45, 0x31, 0xd2, //0x00002a8b xorl %r10d, %r10d + 0x48, 0x85, 0xd2, //0x00002a8e testq %rdx, %rdx + 0x0f, 0x84, 0x32, 0x09, 0x00, 0x00, //0x00002a91 je LBB0_601 + //0x00002a97 LBB0_93 + 0x48, 0x0f, 0xbc, 0xca, //0x00002a97 bsfq %rdx, %rcx + 0x4c, 0x29, 0xf0, //0x00002a9b subq %r14, %rax + 0x48, 0x01, 0xc8, //0x00002a9e addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002aa1 addq $1, %rax + 0xe9, 0x21, 0xdf, 0xff, 0xff, //0x00002aa5 jmp LBB0_98 + //0x00002aaa LBB0_172 + 0x4c, 0x01, 0xf0, //0x00002aaa addq %r14, %rax + 0x49, 0x83, 0xfd, 0x20, //0x00002aad cmpq $32, %r13 + 0x0f, 0x82, 0xe4, 0x02, 0x00, 0x00, //0x00002ab1 jb LBB0_538 + //0x00002ab7 LBB0_173 + 0xc5, 0xfe, 0x6f, 0x00, //0x00002ab7 vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00002abb vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd1, //0x00002abf vpmovmskb %ymm1, %r10d + 0xc5, 0xfd, 0x74, 0xcf, //0x00002ac3 vpcmpeqb %ymm7, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00002ac7 vpmovmskb %ymm1, %edx + 0x85, 0xd2, //0x00002acb testl %edx, %edx + 0x0f, 0x85, 0x08, 0x0a, 0x00, 0x00, //0x00002acd jne LBB0_615 + 0x4d, 0x85, 0xdb, //0x00002ad3 testq %r11, %r11 + 0x0f, 0x85, 0x2d, 0x0a, 0x00, 0x00, //0x00002ad6 jne LBB0_617 + 0x45, 0x31, 0xdb, //0x00002adc xorl %r11d, %r11d + 0x4d, 0x85, 0xd2, //0x00002adf testq %r10, %r10 + 0x0f, 0x84, 0x93, 0x0a, 0x00, 0x00, //0x00002ae2 je LBB0_619 + //0x00002ae8 LBB0_176 + 0x49, 0x0f, 0xbc, 0xd2, //0x00002ae8 bsfq %r10, %rdx + 0xe9, 0x8f, 0x0a, 0x00, 0x00, //0x00002aec jmp LBB0_620 + //0x00002af1 LBB0_505 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002af1 vmovdqa %ymm13, %ymm0 + 0x89, 0xf9, //0x00002af5 movl %edi, %ecx + 0xe9, 0x30, 0xfc, 0xff, 0xff, //0x00002af7 jmp LBB0_477 + //0x00002afc LBB0_506 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002afc vmovdqa %ymm13, %ymm0 + 0x89, 0xf1, //0x00002b00 movl %esi, %ecx + 0xe9, 0x25, 0xfc, 0xff, 0xff, //0x00002b02 jmp LBB0_477 + //0x00002b07 LBB0_507 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002b07 vmovdqa %ymm13, %ymm0 + 0x89, 0xd1, //0x00002b0b movl %edx, %ecx + 0xe9, 0x1a, 0xfc, 0xff, 0xff, //0x00002b0d jmp LBB0_477 + //0x00002b12 LBB0_508 + 0x4c, 0x8b, 0x44, 0x24, 0x38, //0x00002b12 movq $56(%rsp), %r8 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002b17 movq $-1, %rcx + 0x4d, 0x85, 0xc9, //0x00002b1e testq %r9, %r9 + 0x0f, 0x85, 0xab, 0xfc, 0xff, 0xff, //0x00002b21 jne LBB0_486 + 0xe9, 0x42, 0x13, 0x00, 0x00, //0x00002b27 jmp LBB0_726 + //0x00002b2c LBB0_509 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002b2c vmovdqa %ymm13, %ymm0 + 0x0f, 0xbc, 0xcb, //0x00002b30 bsfl %ebx, %ecx + //0x00002b33 LBB0_510 + 0x49, 0xf7, 0xd0, //0x00002b33 notq %r8 + 0x49, 0x29, 0xc8, //0x00002b36 subq %rcx, %r8 + //0x00002b39 LBB0_511 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002b39 movq $8(%rsp), %r15 + //0x00002b3e LBB0_512 + 0x4d, 0x85, 0xc0, //0x00002b3e testq %r8, %r8 + 0x0f, 0x88, 0x24, 0x13, 0x00, 0x00, //0x00002b41 js LBB0_725 + 0x49, 0x8b, 0x0f, //0x00002b47 movq (%r15), %rcx + 0xc5, 0x7d, 0x6f, 0xe8, //0x00002b4a vmovdqa %ymm0, %ymm13 + //0x00002b4e LBB0_514 + 0x4c, 0x01, 0xc1, //0x00002b4e addq %r8, %rcx + 0x49, 0x89, 0x0f, //0x00002b51 movq %rcx, (%r15) + 0x48, 0x85, 0xc0, //0x00002b54 testq %rax, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x00002b57 movq (%rsp), %r11 + 0x0f, 0x8f, 0x3f, 0xd8, 0xff, 0xff, //0x00002b5b jg LBB0_3 + 0xe9, 0xc9, 0x12, 0x00, 0x00, //0x00002b61 jmp LBB0_394 + //0x00002b66 LBB0_515 + 0x66, 0x0f, 0xbc, 0xc9, //0x00002b66 bsfw %cx, %cx + 0x44, 0x0f, 0xb7, 0xc1, //0x00002b6a movzwl %cx, %r8d + 0x4c, 0x89, 0xc1, //0x00002b6e movq %r8, %rcx + 0x4c, 0x29, 0xc9, //0x00002b71 subq %r9, %rcx + 0x49, 0x89, 0x0f, //0x00002b74 movq %rcx, (%r15) + 0x48, 0x85, 0xc9, //0x00002b77 testq %rcx, %rcx + 0x48, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002b7a movabsq $4294977024, %rsi + 0x0f, 0x8e, 0x36, 0xf6, 0xff, 0xff, //0x00002b84 jle LBB0_393 + 0x4c, 0x01, 0xc7, //0x00002b8a addq %r8, %rdi + 0x4c, 0x01, 0xc2, //0x00002b8d addq %r8, %rdx + 0x4c, 0x01, 0xc3, //0x00002b90 addq %r8, %rbx + //0x00002b93 LBB0_517 + 0x0f, 0xb6, 0x0b, //0x00002b93 movzbl (%rbx), %ecx + 0x48, 0x83, 0xf9, 0x20, //0x00002b96 cmpq $32, %rcx + 0x0f, 0x87, 0x20, 0xf6, 0xff, 0xff, //0x00002b9a ja LBB0_393 + 0x48, 0x0f, 0xa3, 0xce, //0x00002ba0 btq %rcx, %rsi + 0x0f, 0x83, 0x16, 0xf6, 0xff, 0xff, //0x00002ba4 jae LBB0_393 + 0x49, 0x89, 0x17, //0x00002baa movq %rdx, (%r15) + 0x48, 0x83, 0xc7, 0xff, //0x00002bad addq $-1, %rdi + 0x48, 0x83, 0xc2, 0xff, //0x00002bb1 addq $-1, %rdx + 0x48, 0x83, 0xc3, 0xff, //0x00002bb5 addq $-1, %rbx + 0x48, 0x83, 0xff, 0x01, //0x00002bb9 cmpq $1, %rdi + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x00002bbd jg LBB0_517 + 0xe9, 0xf8, 0xf5, 0xff, 0xff, //0x00002bc3 jmp LBB0_393 + //0x00002bc8 LBB0_520 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002bc8 vmovdqa %ymm13, %ymm0 + 0x89, 0xf9, //0x00002bcc movl %edi, %ecx + 0xe9, 0x31, 0xfe, 0xff, 0xff, //0x00002bce jmp LBB0_502 + //0x00002bd3 LBB0_521 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002bd3 vmovdqa %ymm13, %ymm0 + 0x89, 0xf1, //0x00002bd7 movl %esi, %ecx + 0xe9, 0x26, 0xfe, 0xff, 0xff, //0x00002bd9 jmp LBB0_502 + //0x00002bde LBB0_522 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002bde vmovdqa %ymm13, %ymm0 + 0x89, 0xd1, //0x00002be2 movl %edx, %ecx + 0xe9, 0x1b, 0xfe, 0xff, 0xff, //0x00002be4 jmp LBB0_502 + //0x00002be9 LBB0_247 + 0x4c, 0x01, 0xf0, //0x00002be9 addq %r14, %rax + 0x49, 0x83, 0xfb, 0x20, //0x00002bec cmpq $32, %r11 + 0x0f, 0x82, 0x08, 0x02, 0x00, 0x00, //0x00002bf0 jb LBB0_542 + //0x00002bf6 LBB0_248 + 0xc5, 0xfe, 0x6f, 0x00, //0x00002bf6 vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00002bfa vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00002bfe vpmovmskb %ymm1, %edx + 0xc5, 0xfd, 0x74, 0xc7, //0x00002c02 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00002c06 vpmovmskb %ymm0, %esi + 0x85, 0xf6, //0x00002c0a testl %esi, %esi + 0x0f, 0x85, 0xe1, 0x0c, 0x00, 0x00, //0x00002c0c jne LBB0_653 + 0x4d, 0x85, 0xd2, //0x00002c12 testq %r10, %r10 + 0x0f, 0x85, 0x06, 0x0d, 0x00, 0x00, //0x00002c15 jne LBB0_655 + 0x45, 0x31, 0xd2, //0x00002c1b xorl %r10d, %r10d + 0xc5, 0x7d, 0x7f, 0xea, //0x00002c1e vmovdqa %ymm13, %ymm2 + 0x48, 0x85, 0xd2, //0x00002c22 testq %rdx, %rdx + 0x0f, 0x84, 0x6b, 0x0d, 0x00, 0x00, //0x00002c25 je LBB0_657 + //0x00002c2b LBB0_251 + 0x48, 0x0f, 0xbc, 0xca, //0x00002c2b bsfq %rdx, %rcx + 0x4c, 0x29, 0xf0, //0x00002c2f subq %r14, %rax + 0x48, 0x01, 0xc8, //0x00002c32 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002c35 addq $1, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x00002c39 movq (%rsp), %r11 + 0xe9, 0x9a, 0xfa, 0xff, 0xff, //0x00002c3d jmp LBB0_473 + //0x00002c42 LBB0_405 + 0x4c, 0x01, 0xf0, //0x00002c42 addq %r14, %rax + 0x49, 0x83, 0xfd, 0x20, //0x00002c45 cmpq $32, %r13 + 0x0f, 0x82, 0xd9, 0x01, 0x00, 0x00, //0x00002c49 jb LBB0_544 + //0x00002c4f LBB0_406 + 0xc5, 0xfe, 0x6f, 0x00, //0x00002c4f vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00002c53 vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd1, //0x00002c57 vpmovmskb %ymm1, %r10d + 0xc5, 0xfd, 0x74, 0xcf, //0x00002c5b vpcmpeqb %ymm7, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00002c5f vpmovmskb %ymm1, %edx + 0x85, 0xd2, //0x00002c63 testl %edx, %edx + 0x0f, 0x85, 0xfb, 0x0d, 0x00, 0x00, //0x00002c65 jne LBB0_671 + 0x4d, 0x85, 0xdb, //0x00002c6b testq %r11, %r11 + 0x0f, 0x85, 0x20, 0x0e, 0x00, 0x00, //0x00002c6e jne LBB0_673 + 0x45, 0x31, 0xdb, //0x00002c74 xorl %r11d, %r11d + 0x4d, 0x85, 0xd2, //0x00002c77 testq %r10, %r10 + 0x0f, 0x84, 0x86, 0x0e, 0x00, 0x00, //0x00002c7a je LBB0_675 + //0x00002c80 LBB0_409 + 0x49, 0x0f, 0xbc, 0xd2, //0x00002c80 bsfq %r10, %rdx + 0xe9, 0x82, 0x0e, 0x00, 0x00, //0x00002c84 jmp LBB0_676 + //0x00002c89 LBB0_523 + 0x0f, 0xbc, 0xcb, //0x00002c89 bsfl %ebx, %ecx + //0x00002c8c LBB0_524 + 0x49, 0x01, 0xc6, //0x00002c8c addq %rax, %r14 + 0x4d, 0x29, 0xc6, //0x00002c8f subq %r8, %r14 + 0x49, 0x29, 0xce, //0x00002c92 subq %rcx, %r14 + 0x49, 0xf7, 0xd5, //0x00002c95 notq %r13 + 0x4d, 0x01, 0xf5, //0x00002c98 addq %r14, %r13 + 0x4d, 0x89, 0xe8, //0x00002c9b movq %r13, %r8 + 0xe9, 0xe1, 0xfb, 0xff, 0xff, //0x00002c9e jmp LBB0_495 + //0x00002ca3 LBB0_525 + 0x49, 0x01, 0xc6, //0x00002ca3 addq %rax, %r14 + 0x4d, 0x29, 0xc6, //0x00002ca6 subq %r8, %r14 + 0x48, 0xf7, 0xd1, //0x00002ca9 notq %rcx + 0x4c, 0x01, 0xf1, //0x00002cac addq %r14, %rcx + 0x49, 0x89, 0xc8, //0x00002caf movq %rcx, %r8 + 0xe9, 0xcd, 0xfb, 0xff, 0xff, //0x00002cb2 jmp LBB0_495 + //0x00002cb7 LBB0_526 + 0x4f, 0x8d, 0x04, 0x2e, //0x00002cb7 leaq (%r14,%r13), %r8 + 0x48, 0x83, 0xff, 0x10, //0x00002cbb cmpq $16, %rdi + 0x0f, 0x83, 0x8d, 0xde, 0xff, 0xff, //0x00002cbf jae LBB0_116 + 0xe9, 0xf1, 0xde, 0xff, 0xff, //0x00002cc5 jmp LBB0_119 + //0x00002cca LBB0_527 + 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x00002cca movq $-1, $40(%rsp) + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00002cd3 movq $-1, %r13 + 0x48, 0xc7, 0x44, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff, //0x00002cda movq $-1, $48(%rsp) + 0x4d, 0x89, 0xc2, //0x00002ce3 movq %r8, %r10 + 0x49, 0x83, 0xf9, 0x10, //0x00002ce6 cmpq $16, %r9 + 0x0f, 0x83, 0xf2, 0xe4, 0xff, 0xff, //0x00002cea jae LBB0_203 + 0xe9, 0x7c, 0xe6, 0xff, 0xff, //0x00002cf0 jmp LBB0_221 + //0x00002cf5 LBB0_528 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002cf5 vmovdqa %ymm13, %ymm0 + 0x89, 0xf9, //0x00002cf9 movl %edi, %ecx + 0xe9, 0x33, 0xfe, 0xff, 0xff, //0x00002cfb jmp LBB0_510 + //0x00002d00 LBB0_529 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002d00 vmovdqa %ymm13, %ymm0 + 0x89, 0xf1, //0x00002d04 movl %esi, %ecx + 0xe9, 0x28, 0xfe, 0xff, 0xff, //0x00002d06 jmp LBB0_510 + //0x00002d0b LBB0_530 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002d0b vmovdqa %ymm13, %ymm0 + 0x89, 0xd1, //0x00002d0f movl %edx, %ecx + 0xe9, 0x1d, 0xfe, 0xff, 0xff, //0x00002d11 jmp LBB0_510 + //0x00002d16 LBB0_531 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002d16 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002d1a movq $-1, %r15 + 0x45, 0x31, 0xd2, //0x00002d21 xorl %r10d, %r10d + 0x49, 0x83, 0xfb, 0x20, //0x00002d24 cmpq $32, %r11 + 0x0f, 0x83, 0x2b, 0xfc, 0xff, 0xff, //0x00002d28 jae LBB0_55 + 0xe9, 0x6b, 0x02, 0x00, 0x00, //0x00002d2e jmp LBB0_557 + //0x00002d33 LBB0_532 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002d33 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002d37 movq $-1, %r15 + 0x45, 0x31, 0xdb, //0x00002d3e xorl %r11d, %r11d + 0x49, 0x83, 0xfd, 0x20, //0x00002d41 cmpq $32, %r13 + 0x0f, 0x83, 0x5f, 0xfc, 0xff, 0xff, //0x00002d45 jae LBB0_153 + 0xe9, 0x04, 0x05, 0x00, 0x00, //0x00002d4b jmp LBB0_587 + //0x00002d50 LBB0_533 + 0x44, 0x89, 0xc9, //0x00002d50 movl %r9d, %ecx + 0xe9, 0x34, 0xff, 0xff, 0xff, //0x00002d53 jmp LBB0_524 + //0x00002d58 LBB0_534 + 0x89, 0xf9, //0x00002d58 movl %edi, %ecx + 0xe9, 0x2d, 0xff, 0xff, 0xff, //0x00002d5a jmp LBB0_524 + //0x00002d5f LBB0_535 + 0x89, 0xd1, //0x00002d5f movl %edx, %ecx + 0xe9, 0x26, 0xff, 0xff, 0xff, //0x00002d61 jmp LBB0_524 + //0x00002d66 LBB0_536 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002d66 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002d6a movq $-1, %r15 + 0x45, 0x31, 0xd2, //0x00002d71 xorl %r10d, %r10d + 0x49, 0x83, 0xfb, 0x20, //0x00002d74 cmpq $32, %r11 + 0x0f, 0x83, 0xe8, 0xfc, 0xff, 0xff, //0x00002d78 jae LBB0_90 + 0xe9, 0x4e, 0x06, 0x00, 0x00, //0x00002d7e jmp LBB0_602 + //0x00002d83 LBB0_537 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002d83 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002d87 movq $-1, %r15 + 0x45, 0x31, 0xdb, //0x00002d8e xorl %r11d, %r11d + 0x49, 0x83, 0xfd, 0x20, //0x00002d91 cmpq $32, %r13 + 0x0f, 0x83, 0x1c, 0xfd, 0xff, 0xff, //0x00002d95 jae LBB0_173 + //0x00002d9b LBB0_538 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002d9b movq $24(%rsp), %r10 + 0xe9, 0x38, 0x08, 0x00, 0x00, //0x00002da0 jmp LBB0_626 + //0x00002da5 LBB0_539 + 0x4d, 0x8d, 0x04, 0x06, //0x00002da5 leaq (%r14,%rax), %r8 + 0x48, 0x83, 0xfe, 0x10, //0x00002da9 cmpq $16, %rsi + 0x4c, 0x8b, 0x1c, 0x24, //0x00002dad movq (%rsp), %r11 + 0x0f, 0x83, 0x8f, 0xec, 0xff, 0xff, //0x00002db1 jae LBB0_322 + 0xe9, 0xf3, 0xec, 0xff, 0xff, //0x00002db7 jmp LBB0_325 + //0x00002dbc LBB0_540 + 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002dbc movq $-1, %r10 + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002dc3 movq $-1, %r9 + 0x4d, 0x89, 0xe8, //0x00002dca movq %r13, %r8 + 0x4c, 0x89, 0x54, 0x24, 0x28, //0x00002dcd movq %r10, $40(%rsp) + 0x49, 0x83, 0xfb, 0x10, //0x00002dd2 cmpq $16, %r11 + 0x4c, 0x89, 0x6c, 0x24, 0x30, //0x00002dd6 movq %r13, $48(%rsp) + 0x0f, 0x83, 0xaf, 0xf6, 0xff, 0xff, //0x00002ddb jae LBB0_436 + 0xe9, 0xf2, 0xf7, 0xff, 0xff, //0x00002de1 jmp LBB0_454 + //0x00002de6 LBB0_541 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002de6 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002dea movq $-1, %r15 + 0x45, 0x31, 0xd2, //0x00002df1 xorl %r10d, %r10d + 0x49, 0x83, 0xfb, 0x20, //0x00002df4 cmpq $32, %r11 + 0x0f, 0x83, 0xf8, 0xfd, 0xff, 0xff, //0x00002df8 jae LBB0_248 + //0x00002dfe LBB0_542 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002dfe vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002e02 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002e06 vmovdqa %ymm13, %ymm11 + 0xe9, 0x9a, 0x0b, 0x00, 0x00, //0x00002e0b jmp LBB0_658 + //0x00002e10 LBB0_543 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002e10 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002e14 movq $-1, %r15 + 0x45, 0x31, 0xdb, //0x00002e1b xorl %r11d, %r11d + 0x49, 0x83, 0xfd, 0x20, //0x00002e1e cmpq $32, %r13 + 0x0f, 0x83, 0x27, 0xfe, 0xff, 0xff, //0x00002e22 jae LBB0_406 + //0x00002e28 LBB0_544 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002e28 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002e2c vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002e30 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002e35 vmovdqa %ymm15, %ymm12 + 0xe9, 0x35, 0x0d, 0x00, 0x00, //0x00002e3a jmp LBB0_681 + //0x00002e3f LBB0_545 + 0x49, 0x39, 0xf2, //0x00002e3f cmpq %rsi, %r10 + 0x0f, 0x84, 0xcd, 0x0e, 0x00, 0x00, //0x00002e42 je LBB0_728 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002e48 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002e4c vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002e50 vmovdqa %ymm13, %ymm11 + 0x49, 0x01, 0xf1, //0x00002e55 addq %rsi, %r9 + 0x49, 0x83, 0xc1, 0x01, //0x00002e58 addq $1, %r9 + 0x48, 0xf7, 0xd6, //0x00002e5c notq %rsi + 0x49, 0x01, 0xf2, //0x00002e5f addq %rsi, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002e62 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00002e67 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002e6b vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x28, 0xd4, 0xff, 0xff, //0x00002e70 vmovdqu $-11224(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x40, 0xd3, 0xff, 0xff, //0x00002e78 vmovdqu $-11456(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00002e80 vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xd2, //0x00002e84 testq %r10, %r10 + 0x0f, 0x8f, 0x32, 0x00, 0x00, 0x00, //0x00002e87 jg LBB0_549 + 0xe9, 0x83, 0x0e, 0x00, 0x00, //0x00002e8d jmp LBB0_728 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002e92 .p2align 4, 0x90 + //0x00002ea0 LBB0_547 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002ea0 movq $-2, %rcx + 0xba, 0x02, 0x00, 0x00, 0x00, //0x00002ea7 movl $2, %edx + 0x49, 0x01, 0xd1, //0x00002eac addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002eaf movq $-1, %rax + 0x49, 0x01, 0xca, //0x00002eb6 addq %rcx, %r10 + 0x0f, 0x8e, 0x56, 0x0e, 0x00, 0x00, //0x00002eb9 jle LBB0_728 + //0x00002ebf LBB0_549 + 0x41, 0x0f, 0xb6, 0x01, //0x00002ebf movzbl (%r9), %eax + 0x3c, 0x5c, //0x00002ec3 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00002ec5 je LBB0_547 + 0x3c, 0x22, //0x00002ecb cmpb $34, %al + 0x0f, 0x84, 0x14, 0x0a, 0x00, 0x00, //0x00002ecd je LBB0_652 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002ed3 movq $-1, %rcx + 0xba, 0x01, 0x00, 0x00, 0x00, //0x00002eda movl $1, %edx + 0x49, 0x01, 0xd1, //0x00002edf addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002ee2 movq $-1, %rax + 0x49, 0x01, 0xca, //0x00002ee9 addq %rcx, %r10 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x00002eec jg LBB0_549 + 0xe9, 0x1e, 0x0e, 0x00, 0x00, //0x00002ef2 jmp LBB0_728 + //0x00002ef7 LBB0_552 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002ef7 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002efb vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002eff vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002f04 vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x00002f09 cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00002f0d jne LBB0_555 + 0x48, 0x89, 0xc1, //0x00002f13 movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x00002f16 subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfe, //0x00002f19 bsfq %rsi, %r15 + 0x49, 0x01, 0xcf, //0x00002f1d addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00002f20 jmp LBB0_555 + //0x00002f25 LBB0_554 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002f25 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002f29 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002f2d vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002f32 vmovdqa %ymm15, %ymm12 + //0x00002f37 LBB0_555 + 0x44, 0x89, 0xd1, //0x00002f37 movl %r10d, %ecx + 0xf7, 0xd1, //0x00002f3a notl %ecx + 0x21, 0xf1, //0x00002f3c andl %esi, %ecx + 0x8d, 0x3c, 0x09, //0x00002f3e leal (%rcx,%rcx), %edi + 0x41, 0x8d, 0x1c, 0x4a, //0x00002f41 leal (%r10,%rcx,2), %ebx + 0xf7, 0xd7, //0x00002f45 notl %edi + 0x21, 0xf7, //0x00002f47 andl %esi, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002f49 andl $-1431655766, %edi + 0x45, 0x31, 0xd2, //0x00002f4f xorl %r10d, %r10d + 0x01, 0xcf, //0x00002f52 addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc2, //0x00002f54 setb %r10b + 0x01, 0xff, //0x00002f58 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00002f5a xorl $1431655765, %edi + 0x21, 0xdf, //0x00002f60 andl %ebx, %edi + 0xf7, 0xd7, //0x00002f62 notl %edi + 0x21, 0xfa, //0x00002f64 andl %edi, %edx + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002f66 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00002f6b vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00002f70 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x23, 0xd3, 0xff, 0xff, //0x00002f75 vmovdqu $-11485(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x3b, 0xd2, 0xff, 0xff, //0x00002f7d vmovdqu $-11717(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00002f85 vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x00002f89 vmovdqa %ymm1, %ymm12 + 0x48, 0x85, 0xd2, //0x00002f8d testq %rdx, %rdx + 0x0f, 0x85, 0xf4, 0xf9, 0xff, 0xff, //0x00002f90 jne LBB0_58 + //0x00002f96 LBB0_556 + 0x48, 0x83, 0xc0, 0x20, //0x00002f96 addq $32, %rax + 0x49, 0x83, 0xc3, 0xe0, //0x00002f9a addq $-32, %r11 + //0x00002f9e LBB0_557 + 0x4d, 0x85, 0xd2, //0x00002f9e testq %r10, %r10 + 0x0f, 0x85, 0x08, 0x07, 0x00, 0x00, //0x00002fa1 jne LBB0_637 + 0x4c, 0x89, 0xf1, //0x00002fa7 movq %r14, %rcx + 0x48, 0xf7, 0xd1, //0x00002faa notq %rcx + 0x4c, 0x89, 0xff, //0x00002fad movq %r15, %rdi + 0x4d, 0x85, 0xdb, //0x00002fb0 testq %r11, %r11 + 0x0f, 0x84, 0xa1, 0x00, 0x00, 0x00, //0x00002fb3 je LBB0_569 + //0x00002fb9 LBB0_559 + 0x48, 0x83, 0xc1, 0x01, //0x00002fb9 addq $1, %rcx + //0x00002fbd LBB0_560 + 0x31, 0xf6, //0x00002fbd xorl %esi, %esi + //0x00002fbf LBB0_561 + 0x0f, 0xb6, 0x14, 0x30, //0x00002fbf movzbl (%rax,%rsi), %edx + 0x80, 0xfa, 0x22, //0x00002fc3 cmpb $34, %dl + 0x0f, 0x84, 0x87, 0x00, 0x00, 0x00, //0x00002fc6 je LBB0_568 + 0x80, 0xfa, 0x5c, //0x00002fcc cmpb $92, %dl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002fcf je LBB0_566 + 0x48, 0x83, 0xc6, 0x01, //0x00002fd5 addq $1, %rsi + 0x49, 0x39, 0xf3, //0x00002fd9 cmpq %rsi, %r11 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00002fdc jne LBB0_561 + 0xe9, 0x7b, 0x00, 0x00, 0x00, //0x00002fe2 jmp LBB0_564 + //0x00002fe7 LBB0_566 + 0x49, 0x8d, 0x53, 0xff, //0x00002fe7 leaq $-1(%r11), %rdx + 0x48, 0x39, 0xf2, //0x00002feb cmpq %rsi, %rdx + 0x0f, 0x84, 0xd7, 0x0c, 0x00, 0x00, //0x00002fee je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002ff4 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002ff8 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002ffc vmovdqa %ymm13, %ymm11 + 0x48, 0x8d, 0x14, 0x01, //0x00003001 leaq (%rcx,%rax), %rdx + 0x48, 0x01, 0xf2, //0x00003005 addq %rsi, %rdx + 0x48, 0x83, 0xff, 0xff, //0x00003008 cmpq $-1, %rdi + 0x4c, 0x0f, 0x44, 0xfa, //0x0000300c cmoveq %rdx, %r15 + 0x48, 0x0f, 0x44, 0xfa, //0x00003010 cmoveq %rdx, %rdi + 0x48, 0x01, 0xf0, //0x00003014 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00003017 addq $2, %rax + 0x4c, 0x89, 0xda, //0x0000301b movq %r11, %rdx + 0x48, 0x29, 0xf2, //0x0000301e subq %rsi, %rdx + 0x48, 0x83, 0xc2, 0xfe, //0x00003021 addq $-2, %rdx + 0x49, 0x83, 0xc3, 0xfe, //0x00003025 addq $-2, %r11 + 0x49, 0x39, 0xf3, //0x00003029 cmpq %rsi, %r11 + 0x49, 0x89, 0xd3, //0x0000302c movq %rdx, %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000302f vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x64, 0xd2, 0xff, 0xff, //0x00003034 vmovdqu $-11676(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x7c, 0xd1, 0xff, 0xff, //0x0000303c vmovdqu $-11908(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00003044 vmovdqa %ymm0, %ymm11 + 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x00003048 jne LBB0_560 + 0xe9, 0x78, 0x0c, 0x00, 0x00, //0x0000304e jmp LBB0_703 + //0x00003053 LBB0_568 + 0x48, 0x01, 0xf0, //0x00003053 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003056 addq $1, %rax + //0x0000305a LBB0_569 + 0x4c, 0x29, 0xf0, //0x0000305a subq %r14, %rax + 0xe9, 0x49, 0xd7, 0xff, 0xff, //0x0000305d jmp LBB0_63 + //0x00003062 LBB0_564 + 0x80, 0xfa, 0x22, //0x00003062 cmpb $34, %dl + 0x0f, 0x85, 0x60, 0x0c, 0x00, 0x00, //0x00003065 jne LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x0000306b vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000306f vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003073 vmovdqa %ymm13, %ymm11 + 0x4c, 0x01, 0xd8, //0x00003078 addq %r11, %rax + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000307b vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x18, 0xd2, 0xff, 0xff, //0x00003080 vmovdqu $-11752(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x30, 0xd1, 0xff, 0xff, //0x00003088 vmovdqu $-11984(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00003090 vmovdqa %ymm0, %ymm11 + 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003094 jmp LBB0_569 + //0x00003099 LBB0_570 + 0x49, 0x39, 0xf2, //0x00003099 cmpq %rsi, %r10 + 0x0f, 0x84, 0x73, 0x0c, 0x00, 0x00, //0x0000309c je LBB0_728 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000030a2 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000030a6 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000030aa vmovdqa %ymm13, %ymm11 + 0x49, 0x01, 0xf1, //0x000030af addq %rsi, %r9 + 0x49, 0x83, 0xc1, 0x01, //0x000030b2 addq $1, %r9 + 0x48, 0xf7, 0xd6, //0x000030b6 notq %rsi + 0x49, 0x01, 0xf2, //0x000030b9 addq %rsi, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x000030bc movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x000030c1 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000030c5 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xce, 0xd1, 0xff, 0xff, //0x000030ca vmovdqu $-11826(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xe6, 0xd0, 0xff, 0xff, //0x000030d2 vmovdqu $-12058(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000030da vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xd2, //0x000030de testq %r10, %r10 + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x000030e1 jg LBB0_574 + 0xe9, 0x29, 0x0c, 0x00, 0x00, //0x000030e7 jmp LBB0_728 + //0x000030ec LBB0_572 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000030ec movq $-2, %rcx + 0xba, 0x02, 0x00, 0x00, 0x00, //0x000030f3 movl $2, %edx + 0x49, 0x01, 0xd1, //0x000030f8 addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000030fb movq $-1, %rax + 0x49, 0x01, 0xca, //0x00003102 addq %rcx, %r10 + 0x0f, 0x8e, 0x0a, 0x0c, 0x00, 0x00, //0x00003105 jle LBB0_728 + //0x0000310b LBB0_574 + 0x41, 0x0f, 0xb6, 0x01, //0x0000310b movzbl (%r9), %eax + 0x3c, 0x5c, //0x0000310f cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00003111 je LBB0_572 + 0x3c, 0x22, //0x00003117 cmpb $34, %al + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x00003119 je LBB0_699 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000311f movq $-1, %rcx + 0xba, 0x01, 0x00, 0x00, 0x00, //0x00003126 movl $1, %edx + 0x49, 0x01, 0xd1, //0x0000312b addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000312e movq $-1, %rax + 0x49, 0x01, 0xca, //0x00003135 addq %rcx, %r10 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x00003138 jg LBB0_574 + 0xe9, 0xd2, 0x0b, 0x00, 0x00, //0x0000313e jmp LBB0_728 + //0x00003143 LBB0_699 + 0x4d, 0x29, 0xf1, //0x00003143 subq %r14, %r9 + 0x49, 0x83, 0xc1, 0x01, //0x00003146 addq $1, %r9 + 0x4d, 0x89, 0x0f, //0x0000314a movq %r9, (%r15) + 0x4d, 0x85, 0xc0, //0x0000314d testq %r8, %r8 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00003150 movq $24(%rsp), %r10 + 0x0f, 0x8f, 0x4d, 0xe7, 0xff, 0xff, //0x00003155 jg LBB0_304 + 0xe9, 0x55, 0x0b, 0x00, 0x00, //0x0000315b jmp LBB0_700 + //0x00003160 LBB0_577 + 0xc5, 0x7d, 0x7f, 0xe2, //0x00003160 vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00003164 vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003168 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000316d vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x00003172 cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003176 jne LBB0_580 + 0x48, 0x89, 0xc1, //0x0000317c movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x0000317f subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfa, //0x00003182 bsfq %rdx, %r15 + 0x49, 0x01, 0xcf, //0x00003186 addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00003189 jmp LBB0_580 + //0x0000318e LBB0_579 + 0xc5, 0x7d, 0x7f, 0xe2, //0x0000318e vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00003192 vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003196 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000319b vmovdqa %ymm15, %ymm12 + //0x000031a0 LBB0_580 + 0x44, 0x89, 0xd9, //0x000031a0 movl %r11d, %ecx + 0xf7, 0xd1, //0x000031a3 notl %ecx + 0x21, 0xd1, //0x000031a5 andl %edx, %ecx + 0x8d, 0x34, 0x09, //0x000031a7 leal (%rcx,%rcx), %esi + 0x41, 0x8d, 0x3c, 0x4b, //0x000031aa leal (%r11,%rcx,2), %edi + 0xf7, 0xd6, //0x000031ae notl %esi + 0x21, 0xd6, //0x000031b0 andl %edx, %esi + 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x000031b2 andl $-1431655766, %esi + 0x45, 0x31, 0xdb, //0x000031b8 xorl %r11d, %r11d + 0x01, 0xce, //0x000031bb addl %ecx, %esi + 0x41, 0x0f, 0x92, 0xc3, //0x000031bd setb %r11b + 0x01, 0xf6, //0x000031c1 addl %esi, %esi + 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x000031c3 xorl $1431655765, %esi + 0x21, 0xfe, //0x000031c9 andl %edi, %esi + 0xf7, 0xd6, //0x000031cb notl %esi + 0x41, 0x21, 0xf2, //0x000031cd andl %esi, %r10d + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000031d0 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x000031d5 vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000031da vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xb9, 0xd0, 0xff, 0xff, //0x000031df vmovdqu $-12103(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xd1, 0xcf, 0xff, 0xff, //0x000031e7 vmovdqu $-12335(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x000031ef vmovdqa %ymm1, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe2, //0x000031f3 vmovdqa %ymm2, %ymm12 + 0x4d, 0x85, 0xd2, //0x000031f7 testq %r10, %r10 + 0x0f, 0x85, 0xdb, 0xf7, 0xff, 0xff, //0x000031fa jne LBB0_156 + //0x00003200 LBB0_581 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00003200 movl $64, %edx + //0x00003205 LBB0_582 + 0xc5, 0xbd, 0x64, 0xc8, //0x00003205 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00003209 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x0000320e vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00003212 vpmovmskb %ymm0, %esi + 0x0f, 0xbc, 0xfe, //0x00003216 bsfl %esi, %edi + 0x4d, 0x85, 0xd2, //0x00003219 testq %r10, %r10 + 0x0f, 0x84, 0x22, 0x00, 0x00, 0x00, //0x0000321c je LBB0_585 + 0x85, 0xf6, //0x00003222 testl %esi, %esi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00003224 movl $64, %ecx + 0x0f, 0x44, 0xf9, //0x00003229 cmovel %ecx, %edi + 0x48, 0x39, 0xfa, //0x0000322c cmpq %rdi, %rdx + 0x0f, 0x87, 0x79, 0x0c, 0x00, 0x00, //0x0000322f ja LBB0_734 + 0x4c, 0x29, 0xf0, //0x00003235 subq %r14, %rax + 0x48, 0x01, 0xd0, //0x00003238 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000323b addq $1, %rax + 0xe9, 0x67, 0xd5, 0xff, 0xff, //0x0000323f jmp LBB0_63 + //0x00003244 LBB0_585 + 0x85, 0xf6, //0x00003244 testl %esi, %esi + 0x0f, 0x85, 0x6f, 0x0c, 0x00, 0x00, //0x00003246 jne LBB0_735 + 0x48, 0x83, 0xc0, 0x20, //0x0000324c addq $32, %rax + 0x49, 0x83, 0xc5, 0xe0, //0x00003250 addq $-32, %r13 + //0x00003254 LBB0_587 + 0x4d, 0x85, 0xdb, //0x00003254 testq %r11, %r11 + 0x0f, 0x85, 0xb0, 0x04, 0x00, 0x00, //0x00003257 jne LBB0_639 + 0x4c, 0x89, 0xf9, //0x0000325d movq %r15, %rcx + 0x4c, 0x8b, 0x1c, 0x24, //0x00003260 movq (%rsp), %r11 + 0x4d, 0x85, 0xed, //0x00003264 testq %r13, %r13 + 0x0f, 0x84, 0x5e, 0x0a, 0x00, 0x00, //0x00003267 je LBB0_703 + //0x0000326d LBB0_589 + 0x0f, 0xb6, 0x10, //0x0000326d movzbl (%rax), %edx + 0x80, 0xfa, 0x22, //0x00003270 cmpb $34, %dl + 0x0f, 0x84, 0x9c, 0x00, 0x00, 0x00, //0x00003273 je LBB0_701 + 0x80, 0xfa, 0x5c, //0x00003279 cmpb $92, %dl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x0000327c je LBB0_593 + 0x80, 0xfa, 0x1f, //0x00003282 cmpb $31, %dl + 0x0f, 0x86, 0x3b, 0x0c, 0x00, 0x00, //0x00003285 jbe LBB0_736 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000328b movq $-1, %rdx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00003292 movl $1, %esi + 0x48, 0x01, 0xf0, //0x00003297 addq %rsi, %rax + 0x49, 0x01, 0xd5, //0x0000329a addq %rdx, %r13 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x0000329d jne LBB0_589 + 0xe9, 0x23, 0x0a, 0x00, 0x00, //0x000032a3 jmp LBB0_703 + //0x000032a8 LBB0_593 + 0x49, 0x83, 0xfd, 0x01, //0x000032a8 cmpq $1, %r13 + 0x0f, 0x84, 0x19, 0x0a, 0x00, 0x00, //0x000032ac je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000032b2 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000032b6 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000032ba vmovdqa %ymm13, %ymm11 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x000032bf movq $-2, %rdx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x000032c6 movl $2, %esi + 0x48, 0x83, 0xf9, 0xff, //0x000032cb cmpq $-1, %rcx + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x000032cf jne LBB0_596 + 0x49, 0x89, 0xc7, //0x000032d5 movq %rax, %r15 + 0x4d, 0x29, 0xf7, //0x000032d8 subq %r14, %r15 + 0x4c, 0x89, 0xf9, //0x000032db movq %r15, %rcx + //0x000032de LBB0_596 + 0x4c, 0x8b, 0x1c, 0x24, //0x000032de movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000032e2 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000032e7 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xac, 0xcf, 0xff, 0xff, //0x000032ec vmovdqu $-12372(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xc4, 0xce, 0xff, 0xff, //0x000032f4 vmovdqu $-12604(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000032fc vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x00003300 vmovdqa %ymm1, %ymm12 + 0x48, 0x01, 0xf0, //0x00003304 addq %rsi, %rax + 0x49, 0x01, 0xd5, //0x00003307 addq %rdx, %r13 + 0x0f, 0x85, 0x5d, 0xff, 0xff, 0xff, //0x0000330a jne LBB0_589 + 0xe9, 0xb6, 0x09, 0x00, 0x00, //0x00003310 jmp LBB0_703 + //0x00003315 LBB0_701 + 0x4c, 0x29, 0xf0, //0x00003315 subq %r14, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003318 addq $1, %rax + 0x48, 0x85, 0xc0, //0x0000331c testq %rax, %rax + 0x0f, 0x89, 0x67, 0xd0, 0xff, 0xff, //0x0000331f jns LBB0_237 + 0xe9, 0x97, 0x09, 0x00, 0x00, //0x00003325 jmp LBB0_702 + //0x0000332a LBB0_597 + 0xc5, 0x7d, 0x7f, 0xe1, //0x0000332a vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000332e vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003332 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003337 vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x0000333c cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003340 jne LBB0_600 + 0x48, 0x89, 0xc1, //0x00003346 movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x00003349 subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfe, //0x0000334c bsfq %rsi, %r15 + 0x49, 0x01, 0xcf, //0x00003350 addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00003353 jmp LBB0_600 + //0x00003358 LBB0_599 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003358 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000335c vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003360 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003365 vmovdqa %ymm15, %ymm12 + //0x0000336a LBB0_600 + 0x44, 0x89, 0xd1, //0x0000336a movl %r10d, %ecx + 0xf7, 0xd1, //0x0000336d notl %ecx + 0x21, 0xf1, //0x0000336f andl %esi, %ecx + 0x8d, 0x3c, 0x09, //0x00003371 leal (%rcx,%rcx), %edi + 0x41, 0x8d, 0x1c, 0x4a, //0x00003374 leal (%r10,%rcx,2), %ebx + 0xf7, 0xd7, //0x00003378 notl %edi + 0x21, 0xf7, //0x0000337a andl %esi, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000337c andl $-1431655766, %edi + 0x45, 0x31, 0xd2, //0x00003382 xorl %r10d, %r10d + 0x01, 0xcf, //0x00003385 addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc2, //0x00003387 setb %r10b + 0x01, 0xff, //0x0000338b addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x0000338d xorl $1431655765, %edi + 0x21, 0xdf, //0x00003393 andl %ebx, %edi + 0xf7, 0xd7, //0x00003395 notl %edi + 0x21, 0xfa, //0x00003397 andl %edi, %edx + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003399 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x0000339e vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000033a3 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xf0, 0xce, 0xff, 0xff, //0x000033a8 vmovdqu $-12560(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x08, 0xce, 0xff, 0xff, //0x000033b0 vmovdqu $-12792(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000033b8 vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x000033bc vmovdqa %ymm1, %ymm12 + 0x48, 0x85, 0xd2, //0x000033c0 testq %rdx, %rdx + 0x0f, 0x85, 0xce, 0xf6, 0xff, 0xff, //0x000033c3 jne LBB0_93 + //0x000033c9 LBB0_601 + 0x48, 0x83, 0xc0, 0x20, //0x000033c9 addq $32, %rax + 0x49, 0x83, 0xc3, 0xe0, //0x000033cd addq $-32, %r11 + //0x000033d1 LBB0_602 + 0x4d, 0x85, 0xd2, //0x000033d1 testq %r10, %r10 + 0x0f, 0x85, 0x97, 0x03, 0x00, 0x00, //0x000033d4 jne LBB0_641 + 0x4c, 0x89, 0xf2, //0x000033da movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x000033dd notq %rdx + 0x4c, 0x89, 0xfe, //0x000033e0 movq %r15, %rsi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000033e3 movq $24(%rsp), %r10 + 0x4d, 0x85, 0xdb, //0x000033e8 testq %r11, %r11 + 0x0f, 0x84, 0xa6, 0x00, 0x00, 0x00, //0x000033eb je LBB0_614 + //0x000033f1 LBB0_604 + 0x48, 0x83, 0xc2, 0x01, //0x000033f1 addq $1, %rdx + //0x000033f5 LBB0_605 + 0x31, 0xff, //0x000033f5 xorl %edi, %edi + //0x000033f7 LBB0_606 + 0x0f, 0xb6, 0x1c, 0x38, //0x000033f7 movzbl (%rax,%rdi), %ebx + 0x80, 0xfb, 0x22, //0x000033fb cmpb $34, %bl + 0x0f, 0x84, 0x8c, 0x00, 0x00, 0x00, //0x000033fe je LBB0_613 + 0x80, 0xfb, 0x5c, //0x00003404 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003407 je LBB0_611 + 0x48, 0x83, 0xc7, 0x01, //0x0000340d addq $1, %rdi + 0x49, 0x39, 0xfb, //0x00003411 cmpq %rdi, %r11 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003414 jne LBB0_606 + 0xe9, 0x80, 0x00, 0x00, 0x00, //0x0000341a jmp LBB0_609 + //0x0000341f LBB0_611 + 0x49, 0x8d, 0x4b, 0xff, //0x0000341f leaq $-1(%r11), %rcx + 0x48, 0x39, 0xf9, //0x00003423 cmpq %rdi, %rcx + 0x0f, 0x84, 0x9f, 0x08, 0x00, 0x00, //0x00003426 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x0000342c vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00003430 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003434 vmovdqa %ymm13, %ymm11 + 0x48, 0x8d, 0x0c, 0x02, //0x00003439 leaq (%rdx,%rax), %rcx + 0x48, 0x01, 0xf9, //0x0000343d addq %rdi, %rcx + 0x48, 0x83, 0xfe, 0xff, //0x00003440 cmpq $-1, %rsi + 0x4c, 0x0f, 0x44, 0xf9, //0x00003444 cmoveq %rcx, %r15 + 0x48, 0x0f, 0x44, 0xf1, //0x00003448 cmoveq %rcx, %rsi + 0x48, 0x01, 0xf8, //0x0000344c addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x0000344f addq $2, %rax + 0x4c, 0x89, 0xd9, //0x00003453 movq %r11, %rcx + 0x48, 0x29, 0xf9, //0x00003456 subq %rdi, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x00003459 addq $-2, %rcx + 0x49, 0x83, 0xc3, 0xfe, //0x0000345d addq $-2, %r11 + 0x49, 0x39, 0xfb, //0x00003461 cmpq %rdi, %r11 + 0x49, 0x89, 0xcb, //0x00003464 movq %rcx, %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00003467 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000346c vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x27, 0xce, 0xff, 0xff, //0x00003471 vmovdqu $-12761(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x3f, 0xcd, 0xff, 0xff, //0x00003479 vmovdqu $-12993(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00003481 vmovdqa %ymm0, %ymm11 + 0x0f, 0x85, 0x6a, 0xff, 0xff, 0xff, //0x00003485 jne LBB0_605 + 0xe9, 0x3b, 0x08, 0x00, 0x00, //0x0000348b jmp LBB0_703 + //0x00003490 LBB0_613 + 0x48, 0x01, 0xf8, //0x00003490 addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003493 addq $1, %rax + //0x00003497 LBB0_614 + 0x4c, 0x29, 0xf0, //0x00003497 subq %r14, %rax + 0xe9, 0x20, 0x01, 0x00, 0x00, //0x0000349a jmp LBB0_623 + //0x0000349f LBB0_609 + 0x80, 0xfb, 0x22, //0x0000349f cmpb $34, %bl + 0x0f, 0x85, 0x23, 0x08, 0x00, 0x00, //0x000034a2 jne LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000034a8 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000034ac vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000034b0 vmovdqa %ymm13, %ymm11 + 0x4c, 0x01, 0xd8, //0x000034b5 addq %r11, %rax + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000034b8 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000034bd vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xd6, 0xcd, 0xff, 0xff, //0x000034c2 vmovdqu $-12842(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xee, 0xcc, 0xff, 0xff, //0x000034ca vmovdqu $-13074(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000034d2 vmovdqa %ymm0, %ymm11 + 0xe9, 0xbc, 0xff, 0xff, 0xff, //0x000034d6 jmp LBB0_614 + //0x000034db LBB0_615 + 0xc5, 0x7d, 0x7f, 0xe2, //0x000034db vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x000034df vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000034e3 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x000034e8 vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x000034ed cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x000034f1 jne LBB0_618 + 0x48, 0x89, 0xc1, //0x000034f7 movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x000034fa subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfa, //0x000034fd bsfq %rdx, %r15 + 0x49, 0x01, 0xcf, //0x00003501 addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00003504 jmp LBB0_618 + //0x00003509 LBB0_617 + 0xc5, 0x7d, 0x7f, 0xe2, //0x00003509 vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x0000350d vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003511 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003516 vmovdqa %ymm15, %ymm12 + //0x0000351b LBB0_618 + 0x44, 0x89, 0xd9, //0x0000351b movl %r11d, %ecx + 0xf7, 0xd1, //0x0000351e notl %ecx + 0x21, 0xd1, //0x00003520 andl %edx, %ecx + 0x8d, 0x34, 0x09, //0x00003522 leal (%rcx,%rcx), %esi + 0x41, 0x8d, 0x3c, 0x4b, //0x00003525 leal (%r11,%rcx,2), %edi + 0xf7, 0xd6, //0x00003529 notl %esi + 0x21, 0xd6, //0x0000352b andl %edx, %esi + 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000352d andl $-1431655766, %esi + 0x45, 0x31, 0xdb, //0x00003533 xorl %r11d, %r11d + 0x01, 0xce, //0x00003536 addl %ecx, %esi + 0x41, 0x0f, 0x92, 0xc3, //0x00003538 setb %r11b + 0x01, 0xf6, //0x0000353c addl %esi, %esi + 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x0000353e xorl $1431655765, %esi + 0x21, 0xfe, //0x00003544 andl %edi, %esi + 0xf7, 0xd6, //0x00003546 notl %esi + 0x41, 0x21, 0xf2, //0x00003548 andl %esi, %r10d + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000354b vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003550 vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003555 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x3e, 0xcd, 0xff, 0xff, //0x0000355a vmovdqu $-12994(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x56, 0xcc, 0xff, 0xff, //0x00003562 vmovdqu $-13226(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x0000356a vmovdqa %ymm1, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe2, //0x0000356e vmovdqa %ymm2, %ymm12 + 0x4d, 0x85, 0xd2, //0x00003572 testq %r10, %r10 + 0x0f, 0x85, 0x6d, 0xf5, 0xff, 0xff, //0x00003575 jne LBB0_176 + //0x0000357b LBB0_619 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000357b movl $64, %edx + //0x00003580 LBB0_620 + 0xc5, 0xbd, 0x64, 0xc8, //0x00003580 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00003584 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00003589 vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x0000358d vpmovmskb %ymm0, %esi + 0x0f, 0xbc, 0xfe, //0x00003591 bsfl %esi, %edi + 0x4d, 0x85, 0xd2, //0x00003594 testq %r10, %r10 + 0x0f, 0x84, 0x2b, 0x00, 0x00, 0x00, //0x00003597 je LBB0_624 + 0x85, 0xf6, //0x0000359d testl %esi, %esi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x0000359f movl $64, %ecx + 0x0f, 0x44, 0xf9, //0x000035a4 cmovel %ecx, %edi + 0x48, 0x39, 0xfa, //0x000035a7 cmpq %rdi, %rdx + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000035aa movq $24(%rsp), %r10 + 0x0f, 0x87, 0xf9, 0x08, 0x00, 0x00, //0x000035af ja LBB0_734 + 0x4c, 0x29, 0xf0, //0x000035b5 subq %r14, %rax + 0x48, 0x01, 0xd0, //0x000035b8 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000035bb addq $1, %rax + //0x000035bf LBB0_623 + 0x4c, 0x8b, 0x1c, 0x24, //0x000035bf movq (%rsp), %r11 + 0xe9, 0xc6, 0xe2, 0xff, 0xff, //0x000035c3 jmp LBB0_302 + //0x000035c8 LBB0_624 + 0x85, 0xf6, //0x000035c8 testl %esi, %esi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000035ca movq $24(%rsp), %r10 + 0x0f, 0x85, 0xe6, 0x08, 0x00, 0x00, //0x000035cf jne LBB0_735 + 0x48, 0x83, 0xc0, 0x20, //0x000035d5 addq $32, %rax + 0x49, 0x83, 0xc5, 0xe0, //0x000035d9 addq $-32, %r13 + //0x000035dd LBB0_626 + 0x4d, 0x85, 0xdb, //0x000035dd testq %r11, %r11 + 0x0f, 0x85, 0xee, 0x01, 0x00, 0x00, //0x000035e0 jne LBB0_643 + 0x4c, 0x89, 0xfa, //0x000035e6 movq %r15, %rdx + 0x4c, 0x8b, 0x1c, 0x24, //0x000035e9 movq (%rsp), %r11 + 0x4d, 0x85, 0xed, //0x000035ed testq %r13, %r13 + 0x0f, 0x84, 0xd5, 0x06, 0x00, 0x00, //0x000035f0 je LBB0_703 + //0x000035f6 LBB0_628 + 0x0f, 0xb6, 0x18, //0x000035f6 movzbl (%rax), %ebx + 0x80, 0xfb, 0x22, //0x000035f9 cmpb $34, %bl + 0x0f, 0x84, 0xa1, 0x00, 0x00, 0x00, //0x000035fc je LBB0_636 + 0x80, 0xfb, 0x5c, //0x00003602 cmpb $92, %bl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00003605 je LBB0_632 + 0x80, 0xfb, 0x1f, //0x0000360b cmpb $31, %bl + 0x0f, 0x86, 0xb2, 0x08, 0x00, 0x00, //0x0000360e jbe LBB0_736 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003614 movq $-1, %rsi + 0xbf, 0x01, 0x00, 0x00, 0x00, //0x0000361b movl $1, %edi + 0x48, 0x01, 0xf8, //0x00003620 addq %rdi, %rax + 0x49, 0x01, 0xf5, //0x00003623 addq %rsi, %r13 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00003626 jne LBB0_628 + 0xe9, 0x9a, 0x06, 0x00, 0x00, //0x0000362c jmp LBB0_703 + //0x00003631 LBB0_632 + 0x49, 0x83, 0xfd, 0x01, //0x00003631 cmpq $1, %r13 + 0x0f, 0x84, 0x90, 0x06, 0x00, 0x00, //0x00003635 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x0000363b vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000363f vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003643 vmovdqa %ymm13, %ymm11 + 0x48, 0xc7, 0xc6, 0xfe, 0xff, 0xff, 0xff, //0x00003648 movq $-2, %rsi + 0xbf, 0x02, 0x00, 0x00, 0x00, //0x0000364f movl $2, %edi + 0x48, 0x83, 0xfa, 0xff, //0x00003654 cmpq $-1, %rdx + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00003658 jne LBB0_635 + 0x49, 0x89, 0xc7, //0x0000365e movq %rax, %r15 + 0x4d, 0x29, 0xf7, //0x00003661 subq %r14, %r15 + 0x4c, 0x89, 0xfa, //0x00003664 movq %r15, %rdx + //0x00003667 LBB0_635 + 0x4c, 0x8b, 0x1c, 0x24, //0x00003667 movq (%rsp), %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x0000366b movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003670 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003675 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x1e, 0xcc, 0xff, 0xff, //0x0000367a vmovdqu $-13282(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x36, 0xcb, 0xff, 0xff, //0x00003682 vmovdqu $-13514(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x0000368a vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x0000368e vmovdqa %ymm1, %ymm12 + 0x48, 0x01, 0xf8, //0x00003692 addq %rdi, %rax + 0x49, 0x01, 0xf5, //0x00003695 addq %rsi, %r13 + 0x0f, 0x85, 0x58, 0xff, 0xff, 0xff, //0x00003698 jne LBB0_628 + 0xe9, 0x28, 0x06, 0x00, 0x00, //0x0000369e jmp LBB0_703 + //0x000036a3 LBB0_636 + 0x4c, 0x29, 0xf0, //0x000036a3 subq %r14, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000036a6 addq $1, %rax + 0xe9, 0xdf, 0xe1, 0xff, 0xff, //0x000036aa jmp LBB0_302 + //0x000036af LBB0_637 + 0x4d, 0x85, 0xdb, //0x000036af testq %r11, %r11 + 0x0f, 0x84, 0x13, 0x06, 0x00, 0x00, //0x000036b2 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000036b8 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000036bc vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000036c0 vmovdqa %ymm13, %ymm11 + 0x4c, 0x89, 0xf1, //0x000036c5 movq %r14, %rcx + 0x48, 0xf7, 0xd1, //0x000036c8 notq %rcx + 0x48, 0x8d, 0x14, 0x08, //0x000036cb leaq (%rax,%rcx), %rdx + 0x49, 0x83, 0xff, 0xff, //0x000036cf cmpq $-1, %r15 + 0x4c, 0x89, 0xff, //0x000036d3 movq %r15, %rdi + 0x4c, 0x0f, 0x44, 0xfa, //0x000036d6 cmoveq %rdx, %r15 + 0x48, 0x0f, 0x44, 0xfa, //0x000036da cmoveq %rdx, %rdi + 0x48, 0x83, 0xc0, 0x01, //0x000036de addq $1, %rax + 0x49, 0x83, 0xc3, 0xff, //0x000036e2 addq $-1, %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000036e6 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xad, 0xcb, 0xff, 0xff, //0x000036eb vmovdqu $-13395(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xc5, 0xca, 0xff, 0xff, //0x000036f3 vmovdqu $-13627(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000036fb vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xdb, //0x000036ff testq %r11, %r11 + 0x0f, 0x85, 0xb1, 0xf8, 0xff, 0xff, //0x00003702 jne LBB0_559 + 0xe9, 0x4d, 0xf9, 0xff, 0xff, //0x00003708 jmp LBB0_569 + //0x0000370d LBB0_639 + 0x4d, 0x85, 0xed, //0x0000370d testq %r13, %r13 + 0x0f, 0x84, 0xb5, 0x05, 0x00, 0x00, //0x00003710 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003716 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000371a vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000371e vmovdqa %ymm13, %ymm11 + 0x4c, 0x89, 0xf1, //0x00003723 movq %r14, %rcx + 0x48, 0xf7, 0xd1, //0x00003726 notq %rcx + 0x48, 0x01, 0xc1, //0x00003729 addq %rax, %rcx + 0x49, 0x83, 0xff, 0xff, //0x0000372c cmpq $-1, %r15 + 0x4c, 0x89, 0xfa, //0x00003730 movq %r15, %rdx + 0x48, 0x0f, 0x44, 0xd1, //0x00003733 cmoveq %rcx, %rdx + 0x49, 0x0f, 0x45, 0xcf, //0x00003737 cmovneq %r15, %rcx + 0x48, 0x83, 0xc0, 0x01, //0x0000373b addq $1, %rax + 0x49, 0x83, 0xc5, 0xff, //0x0000373f addq $-1, %r13 + 0x49, 0x89, 0xd7, //0x00003743 movq %rdx, %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00003746 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000374a vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x49, 0xcb, 0xff, 0xff, //0x0000374f vmovdqu $-13495(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x61, 0xca, 0xff, 0xff, //0x00003757 vmovdqu $-13727(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x0000375f vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xed, //0x00003763 testq %r13, %r13 + 0x0f, 0x85, 0x01, 0xfb, 0xff, 0xff, //0x00003766 jne LBB0_589 + 0xe9, 0x5a, 0x05, 0x00, 0x00, //0x0000376c jmp LBB0_703 + //0x00003771 LBB0_641 + 0x4d, 0x85, 0xdb, //0x00003771 testq %r11, %r11 + 0x0f, 0x84, 0x51, 0x05, 0x00, 0x00, //0x00003774 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x0000377a vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000377e vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003782 vmovdqa %ymm13, %ymm11 + 0x4c, 0x89, 0xf2, //0x00003787 movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x0000378a notq %rdx + 0x48, 0x8d, 0x0c, 0x10, //0x0000378d leaq (%rax,%rdx), %rcx + 0x49, 0x83, 0xff, 0xff, //0x00003791 cmpq $-1, %r15 + 0x4c, 0x89, 0xfe, //0x00003795 movq %r15, %rsi + 0x4c, 0x0f, 0x44, 0xf9, //0x00003798 cmoveq %rcx, %r15 + 0x48, 0x0f, 0x44, 0xf1, //0x0000379c cmoveq %rcx, %rsi + 0x48, 0x83, 0xc0, 0x01, //0x000037a0 addq $1, %rax + 0x49, 0x83, 0xc3, 0xff, //0x000037a4 addq $-1, %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000037a8 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000037ad vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xe6, 0xca, 0xff, 0xff, //0x000037b2 vmovdqu $-13594(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xfe, 0xc9, 0xff, 0xff, //0x000037ba vmovdqu $-13826(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000037c2 vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xdb, //0x000037c6 testq %r11, %r11 + 0x0f, 0x85, 0x22, 0xfc, 0xff, 0xff, //0x000037c9 jne LBB0_604 + 0xe9, 0xc3, 0xfc, 0xff, 0xff, //0x000037cf jmp LBB0_614 + //0x000037d4 LBB0_643 + 0x4d, 0x85, 0xed, //0x000037d4 testq %r13, %r13 + 0x0f, 0x84, 0xee, 0x04, 0x00, 0x00, //0x000037d7 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000037dd vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000037e1 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000037e5 vmovdqa %ymm13, %ymm11 + 0x4c, 0x89, 0xf2, //0x000037ea movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x000037ed notq %rdx + 0x48, 0x01, 0xc2, //0x000037f0 addq %rax, %rdx + 0x49, 0x83, 0xff, 0xff, //0x000037f3 cmpq $-1, %r15 + 0x4c, 0x89, 0xf9, //0x000037f7 movq %r15, %rcx + 0x48, 0x0f, 0x44, 0xca, //0x000037fa cmoveq %rdx, %rcx + 0x49, 0x0f, 0x45, 0xd7, //0x000037fe cmovneq %r15, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x00003802 addq $1, %rax + 0x49, 0x83, 0xc5, 0xff, //0x00003806 addq $-1, %r13 + 0x49, 0x89, 0xcf, //0x0000380a movq %rcx, %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x0000380d movq (%rsp), %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00003811 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003816 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x7d, 0xca, 0xff, 0xff, //0x0000381b vmovdqu $-13699(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x95, 0xc9, 0xff, 0xff, //0x00003823 vmovdqu $-13931(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x0000382b vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xed, //0x0000382f testq %r13, %r13 + 0x0f, 0x85, 0xbe, 0xfd, 0xff, 0xff, //0x00003832 jne LBB0_628 + 0xe9, 0x8e, 0x04, 0x00, 0x00, //0x00003838 jmp LBB0_703 + //0x0000383d LBB0_645 + 0x49, 0x39, 0xf2, //0x0000383d cmpq %rsi, %r10 + 0x0f, 0x84, 0xcf, 0x04, 0x00, 0x00, //0x00003840 je LBB0_728 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003846 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000384a vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000384e vmovdqa %ymm13, %ymm11 + 0x49, 0x01, 0xf1, //0x00003853 addq %rsi, %r9 + 0x49, 0x83, 0xc1, 0x01, //0x00003856 addq $1, %r9 + 0x48, 0xf7, 0xd6, //0x0000385a notq %rsi + 0x49, 0x01, 0xf2, //0x0000385d addq %rsi, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00003860 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00003865 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003869 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x2a, 0xca, 0xff, 0xff, //0x0000386e vmovdqu $-13782(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x42, 0xc9, 0xff, 0xff, //0x00003876 vmovdqu $-14014(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x0000387e vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xd2, //0x00003882 testq %r10, %r10 + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00003885 jg LBB0_649 + 0xe9, 0x85, 0x04, 0x00, 0x00, //0x0000388b jmp LBB0_728 + //0x00003890 LBB0_647 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003890 movq $-2, %rcx + 0xba, 0x02, 0x00, 0x00, 0x00, //0x00003897 movl $2, %edx + 0x49, 0x01, 0xd1, //0x0000389c addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000389f movq $-1, %rax + 0x49, 0x01, 0xca, //0x000038a6 addq %rcx, %r10 + 0x0f, 0x8e, 0x66, 0x04, 0x00, 0x00, //0x000038a9 jle LBB0_728 + //0x000038af LBB0_649 + 0x41, 0x0f, 0xb6, 0x01, //0x000038af movzbl (%r9), %eax + 0x3c, 0x5c, //0x000038b3 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x000038b5 je LBB0_647 + 0x3c, 0x22, //0x000038bb cmpb $34, %al + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x000038bd je LBB0_652 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000038c3 movq $-1, %rcx + 0xba, 0x01, 0x00, 0x00, 0x00, //0x000038ca movl $1, %edx + 0x49, 0x01, 0xd1, //0x000038cf addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000038d2 movq $-1, %rax + 0x49, 0x01, 0xca, //0x000038d9 addq %rcx, %r10 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x000038dc jg LBB0_649 + 0xe9, 0x2e, 0x04, 0x00, 0x00, //0x000038e2 jmp LBB0_728 + //0x000038e7 LBB0_652 + 0x4d, 0x29, 0xf1, //0x000038e7 subq %r14, %r9 + 0x49, 0x83, 0xc1, 0x01, //0x000038ea addq $1, %r9 + 0xe9, 0xbf, 0xd1, 0xff, 0xff, //0x000038ee jmp LBB0_105 + //0x000038f3 LBB0_653 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000038f3 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000038f7 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000038fb vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003900 vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x00003905 cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003909 jne LBB0_656 + 0x48, 0x89, 0xc1, //0x0000390f movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x00003912 subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfe, //0x00003915 bsfq %rsi, %r15 + 0x49, 0x01, 0xcf, //0x00003919 addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x0000391c jmp LBB0_656 + //0x00003921 LBB0_655 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003921 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00003925 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003929 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000392e vmovdqa %ymm15, %ymm12 + //0x00003933 LBB0_656 + 0x44, 0x89, 0xd1, //0x00003933 movl %r10d, %ecx + 0xf7, 0xd1, //0x00003936 notl %ecx + 0x21, 0xf1, //0x00003938 andl %esi, %ecx + 0x8d, 0x3c, 0x09, //0x0000393a leal (%rcx,%rcx), %edi + 0x41, 0x8d, 0x1c, 0x4a, //0x0000393d leal (%r10,%rcx,2), %ebx + 0xf7, 0xd7, //0x00003941 notl %edi + 0x21, 0xf7, //0x00003943 andl %esi, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003945 andl $-1431655766, %edi + 0x45, 0x31, 0xd2, //0x0000394b xorl %r10d, %r10d + 0x01, 0xcf, //0x0000394e addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc2, //0x00003950 setb %r10b + 0x01, 0xff, //0x00003954 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00003956 xorl $1431655765, %edi + 0x21, 0xdf, //0x0000395c andl %ebx, %edi + 0xf7, 0xd7, //0x0000395e notl %edi + 0x21, 0xfa, //0x00003960 andl %edi, %edx + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003962 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003967 vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x0000396c vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x27, 0xc9, 0xff, 0xff, //0x00003971 vmovdqu $-14041(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x3f, 0xc8, 0xff, 0xff, //0x00003979 vmovdqu $-14273(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00003981 vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x00003985 vmovdqa %ymm1, %ymm12 + 0xc5, 0x7d, 0x7f, 0xea, //0x00003989 vmovdqa %ymm13, %ymm2 + 0x48, 0x85, 0xd2, //0x0000398d testq %rdx, %rdx + 0x0f, 0x85, 0x95, 0xf2, 0xff, 0xff, //0x00003990 jne LBB0_251 + //0x00003996 LBB0_657 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003996 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000399a vmovdqa %ymm11, %ymm0 + 0xc5, 0x7d, 0x6f, 0xda, //0x0000399e vmovdqa %ymm2, %ymm11 + 0x48, 0x83, 0xc0, 0x20, //0x000039a2 addq $32, %rax + 0x49, 0x83, 0xc3, 0xe0, //0x000039a6 addq $-32, %r11 + //0x000039aa LBB0_658 + 0x4d, 0x85, 0xd2, //0x000039aa testq %r10, %r10 + 0x0f, 0x85, 0x75, 0x02, 0x00, 0x00, //0x000039ad jne LBB0_693 + 0x4c, 0x89, 0xf2, //0x000039b3 movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x000039b6 notq %rdx + 0x4c, 0x89, 0xfe, //0x000039b9 movq %r15, %rsi + 0x4d, 0x85, 0xdb, //0x000039bc testq %r11, %r11 + 0x0f, 0x84, 0x7b, 0x00, 0x00, 0x00, //0x000039bf je LBB0_670 + //0x000039c5 LBB0_660 + 0x48, 0x83, 0xc2, 0x01, //0x000039c5 addq $1, %rdx + //0x000039c9 LBB0_661 + 0x31, 0xff, //0x000039c9 xorl %edi, %edi + //0x000039cb LBB0_662 + 0x0f, 0xb6, 0x1c, 0x38, //0x000039cb movzbl (%rax,%rdi), %ebx + 0x80, 0xfb, 0x22, //0x000039cf cmpb $34, %bl + 0x0f, 0x84, 0x61, 0x00, 0x00, 0x00, //0x000039d2 je LBB0_669 + 0x80, 0xfb, 0x5c, //0x000039d8 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000039db je LBB0_667 + 0x48, 0x83, 0xc7, 0x01, //0x000039e1 addq $1, %rdi + 0x49, 0x39, 0xfb, //0x000039e5 cmpq %rdi, %r11 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000039e8 jne LBB0_662 + 0xe9, 0x62, 0x00, 0x00, 0x00, //0x000039ee jmp LBB0_665 + //0x000039f3 LBB0_667 + 0x49, 0x8d, 0x4b, 0xff, //0x000039f3 leaq $-1(%r11), %rcx + 0x48, 0x39, 0xf9, //0x000039f7 cmpq %rdi, %rcx + 0x0f, 0x84, 0xcb, 0x02, 0x00, 0x00, //0x000039fa je LBB0_703 + 0x48, 0x8d, 0x0c, 0x02, //0x00003a00 leaq (%rdx,%rax), %rcx + 0x48, 0x01, 0xf9, //0x00003a04 addq %rdi, %rcx + 0x48, 0x83, 0xfe, 0xff, //0x00003a07 cmpq $-1, %rsi + 0x4c, 0x0f, 0x44, 0xf9, //0x00003a0b cmoveq %rcx, %r15 + 0x48, 0x0f, 0x44, 0xf1, //0x00003a0f cmoveq %rcx, %rsi + 0x48, 0x01, 0xf8, //0x00003a13 addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00003a16 addq $2, %rax + 0x4c, 0x89, 0xd9, //0x00003a1a movq %r11, %rcx + 0x48, 0x29, 0xf9, //0x00003a1d subq %rdi, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x00003a20 addq $-2, %rcx + 0x49, 0x83, 0xc3, 0xfe, //0x00003a24 addq $-2, %r11 + 0x49, 0x39, 0xfb, //0x00003a28 cmpq %rdi, %r11 + 0x49, 0x89, 0xcb, //0x00003a2b movq %rcx, %r11 + 0x0f, 0x85, 0x95, 0xff, 0xff, 0xff, //0x00003a2e jne LBB0_661 + 0xe9, 0x92, 0x02, 0x00, 0x00, //0x00003a34 jmp LBB0_703 + //0x00003a39 LBB0_669 + 0x48, 0x01, 0xf8, //0x00003a39 addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003a3c addq $1, %rax + //0x00003a40 LBB0_670 + 0x4c, 0x29, 0xf0, //0x00003a40 subq %r14, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x00003a43 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003a47 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7d, 0x7f, 0xda, //0x00003a4c vmovdqa %ymm11, %ymm2 + 0xe9, 0xb6, 0x01, 0x00, 0x00, //0x00003a50 jmp LBB0_692 + //0x00003a55 LBB0_665 + 0x80, 0xfb, 0x22, //0x00003a55 cmpb $34, %bl + 0x0f, 0x85, 0x6d, 0x02, 0x00, 0x00, //0x00003a58 jne LBB0_703 + 0x4c, 0x01, 0xd8, //0x00003a5e addq %r11, %rax + 0xe9, 0xda, 0xff, 0xff, 0xff, //0x00003a61 jmp LBB0_670 + //0x00003a66 LBB0_671 + 0xc5, 0x7d, 0x7f, 0xe2, //0x00003a66 vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00003a6a vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003a6e vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003a73 vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x00003a78 cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003a7c jne LBB0_674 + 0x48, 0x89, 0xc1, //0x00003a82 movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x00003a85 subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfa, //0x00003a88 bsfq %rdx, %r15 + 0x49, 0x01, 0xcf, //0x00003a8c addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00003a8f jmp LBB0_674 + //0x00003a94 LBB0_673 + 0xc5, 0x7d, 0x7f, 0xe2, //0x00003a94 vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00003a98 vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003a9c vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003aa1 vmovdqa %ymm15, %ymm12 + //0x00003aa6 LBB0_674 + 0x44, 0x89, 0xd9, //0x00003aa6 movl %r11d, %ecx + 0xf7, 0xd1, //0x00003aa9 notl %ecx + 0x21, 0xd1, //0x00003aab andl %edx, %ecx + 0x8d, 0x34, 0x09, //0x00003aad leal (%rcx,%rcx), %esi + 0x41, 0x8d, 0x3c, 0x4b, //0x00003ab0 leal (%r11,%rcx,2), %edi + 0xf7, 0xd6, //0x00003ab4 notl %esi + 0x21, 0xd6, //0x00003ab6 andl %edx, %esi + 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003ab8 andl $-1431655766, %esi + 0x45, 0x31, 0xdb, //0x00003abe xorl %r11d, %r11d + 0x01, 0xce, //0x00003ac1 addl %ecx, %esi + 0x41, 0x0f, 0x92, 0xc3, //0x00003ac3 setb %r11b + 0x01, 0xf6, //0x00003ac7 addl %esi, %esi + 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x00003ac9 xorl $1431655765, %esi + 0x21, 0xfe, //0x00003acf andl %edi, %esi + 0xf7, 0xd6, //0x00003ad1 notl %esi + 0x41, 0x21, 0xf2, //0x00003ad3 andl %esi, %r10d + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003ad6 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003adb vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003ae0 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xb3, 0xc7, 0xff, 0xff, //0x00003ae5 vmovdqu $-14413(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xcb, 0xc6, 0xff, 0xff, //0x00003aed vmovdqu $-14645(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x00003af5 vmovdqa %ymm1, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe2, //0x00003af9 vmovdqa %ymm2, %ymm12 + 0x4d, 0x85, 0xd2, //0x00003afd testq %r10, %r10 + 0x0f, 0x85, 0x7a, 0xf1, 0xff, 0xff, //0x00003b00 jne LBB0_409 + //0x00003b06 LBB0_675 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00003b06 movl $64, %edx + //0x00003b0b LBB0_676 + 0xc5, 0xbd, 0x64, 0xc8, //0x00003b0b vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00003b0f vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00003b14 vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00003b18 vpmovmskb %ymm0, %esi + 0x0f, 0xbc, 0xfe, //0x00003b1c bsfl %esi, %edi + 0x4d, 0x85, 0xd2, //0x00003b1f testq %r10, %r10 + 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x00003b22 je LBB0_679 + 0x85, 0xf6, //0x00003b28 testl %esi, %esi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00003b2a movl $64, %ecx + 0x0f, 0x44, 0xf9, //0x00003b2f cmovel %ecx, %edi + 0x48, 0x39, 0xfa, //0x00003b32 cmpq %rdi, %rdx + 0x0f, 0x87, 0x73, 0x03, 0x00, 0x00, //0x00003b35 ja LBB0_734 + 0xc5, 0x7d, 0x7f, 0xea, //0x00003b3b vmovdqa %ymm13, %ymm2 + 0x4c, 0x29, 0xf0, //0x00003b3f subq %r14, %rax + 0x48, 0x01, 0xd0, //0x00003b42 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003b45 addq $1, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x00003b49 movq (%rsp), %r11 + 0xe9, 0x8a, 0xeb, 0xff, 0xff, //0x00003b4d jmp LBB0_473 + //0x00003b52 LBB0_679 + 0x85, 0xf6, //0x00003b52 testl %esi, %esi + 0x0f, 0x85, 0x61, 0x03, 0x00, 0x00, //0x00003b54 jne LBB0_735 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003b5a vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00003b5e vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003b62 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003b67 vmovdqa %ymm15, %ymm12 + 0x48, 0x83, 0xc0, 0x20, //0x00003b6c addq $32, %rax + 0x49, 0x83, 0xc5, 0xe0, //0x00003b70 addq $-32, %r13 + //0x00003b74 LBB0_681 + 0x4d, 0x85, 0xdb, //0x00003b74 testq %r11, %r11 + 0x0f, 0x85, 0xe3, 0x00, 0x00, 0x00, //0x00003b77 jne LBB0_695 + 0x4c, 0x89, 0xfa, //0x00003b7d movq %r15, %rdx + 0x4d, 0x85, 0xed, //0x00003b80 testq %r13, %r13 + 0x0f, 0x84, 0x42, 0x01, 0x00, 0x00, //0x00003b83 je LBB0_703 + //0x00003b89 LBB0_683 + 0x0f, 0xb6, 0x18, //0x00003b89 movzbl (%rax), %ebx + 0x80, 0xfb, 0x22, //0x00003b8c cmpb $34, %bl + 0x0f, 0x84, 0x5d, 0x00, 0x00, 0x00, //0x00003b8f je LBB0_691 + 0x80, 0xfb, 0x5c, //0x00003b95 cmpb $92, %bl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00003b98 je LBB0_688 + 0x80, 0xfb, 0x1f, //0x00003b9e cmpb $31, %bl + 0x0f, 0x86, 0x1f, 0x03, 0x00, 0x00, //0x00003ba1 jbe LBB0_736 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003ba7 movq $-1, %rsi + 0xbf, 0x01, 0x00, 0x00, 0x00, //0x00003bae movl $1, %edi + //0x00003bb3 LBB0_687 + 0x48, 0x01, 0xf8, //0x00003bb3 addq %rdi, %rax + 0x49, 0x01, 0xf5, //0x00003bb6 addq %rsi, %r13 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00003bb9 jne LBB0_683 + 0xe9, 0x07, 0x01, 0x00, 0x00, //0x00003bbf jmp LBB0_703 + //0x00003bc4 LBB0_688 + 0x49, 0x83, 0xfd, 0x01, //0x00003bc4 cmpq $1, %r13 + 0x0f, 0x84, 0xfd, 0x00, 0x00, 0x00, //0x00003bc8 je LBB0_703 + 0x48, 0xc7, 0xc6, 0xfe, 0xff, 0xff, 0xff, //0x00003bce movq $-2, %rsi + 0xbf, 0x02, 0x00, 0x00, 0x00, //0x00003bd5 movl $2, %edi + 0x48, 0x83, 0xfa, 0xff, //0x00003bda cmpq $-1, %rdx + 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00003bde jne LBB0_687 + 0x49, 0x89, 0xc7, //0x00003be4 movq %rax, %r15 + 0x4d, 0x29, 0xf7, //0x00003be7 subq %r14, %r15 + 0x4c, 0x89, 0xfa, //0x00003bea movq %r15, %rdx + 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003bed jmp LBB0_687 + //0x00003bf2 LBB0_691 + 0x4c, 0x29, 0xf0, //0x00003bf2 subq %r14, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003bf5 addq $1, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x00003bf9 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003bfd vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7d, 0x7f, 0xda, //0x00003c02 vmovdqa %ymm11, %ymm2 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003c06 vmovdqa %ymm12, %ymm15 + //0x00003c0b LBB0_692 + 0xc5, 0xfe, 0x6f, 0x25, 0x8d, 0xc6, 0xff, 0xff, //0x00003c0b vmovdqu $-14707(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xa5, 0xc5, 0xff, 0xff, //0x00003c13 vmovdqu $-14939(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00003c1b vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x00003c1f vmovdqa %ymm1, %ymm12 + 0xe9, 0xb4, 0xea, 0xff, 0xff, //0x00003c23 jmp LBB0_473 + //0x00003c28 LBB0_693 + 0x4d, 0x85, 0xdb, //0x00003c28 testq %r11, %r11 + 0x0f, 0x84, 0x9a, 0x00, 0x00, 0x00, //0x00003c2b je LBB0_703 + 0x4c, 0x89, 0xf2, //0x00003c31 movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x00003c34 notq %rdx + 0x48, 0x8d, 0x0c, 0x10, //0x00003c37 leaq (%rax,%rdx), %rcx + 0x49, 0x83, 0xff, 0xff, //0x00003c3b cmpq $-1, %r15 + 0x4c, 0x89, 0xfe, //0x00003c3f movq %r15, %rsi + 0x4c, 0x0f, 0x44, 0xf9, //0x00003c42 cmoveq %rcx, %r15 + 0x48, 0x0f, 0x44, 0xf1, //0x00003c46 cmoveq %rcx, %rsi + 0x48, 0x83, 0xc0, 0x01, //0x00003c4a addq $1, %rax + 0x49, 0x83, 0xc3, 0xff, //0x00003c4e addq $-1, %r11 + 0x4d, 0x85, 0xdb, //0x00003c52 testq %r11, %r11 + 0x0f, 0x85, 0x6a, 0xfd, 0xff, 0xff, //0x00003c55 jne LBB0_660 + 0xe9, 0xe0, 0xfd, 0xff, 0xff, //0x00003c5b jmp LBB0_670 + //0x00003c60 LBB0_695 + 0x4d, 0x85, 0xed, //0x00003c60 testq %r13, %r13 + 0x0f, 0x84, 0x62, 0x00, 0x00, 0x00, //0x00003c63 je LBB0_703 + 0x4c, 0x89, 0xf2, //0x00003c69 movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x00003c6c notq %rdx + 0x48, 0x01, 0xc2, //0x00003c6f addq %rax, %rdx + 0x49, 0x83, 0xff, 0xff, //0x00003c72 cmpq $-1, %r15 + 0x4c, 0x89, 0xf9, //0x00003c76 movq %r15, %rcx + 0x48, 0x0f, 0x44, 0xca, //0x00003c79 cmoveq %rdx, %rcx + 0x49, 0x0f, 0x45, 0xd7, //0x00003c7d cmovneq %r15, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x00003c81 addq $1, %rax + 0x49, 0x83, 0xc5, 0xff, //0x00003c85 addq $-1, %r13 + 0x49, 0x89, 0xcf, //0x00003c89 movq %rcx, %r15 + 0x4d, 0x85, 0xed, //0x00003c8c testq %r13, %r13 + 0x0f, 0x85, 0xf4, 0xfe, 0xff, 0xff, //0x00003c8f jne LBB0_683 + 0xe9, 0x31, 0x00, 0x00, 0x00, //0x00003c95 jmp LBB0_703 + //0x00003c9a LBB0_697 + 0x4d, 0x89, 0x27, //0x00003c9a movq %r12, (%r15) + //0x00003c9d LBB0_698 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003c9d movq $-1, %rax + 0xe9, 0x6c, 0x00, 0x00, 0x00, //0x00003ca4 jmp LBB0_728 + //0x00003ca9 LBB0_724 + 0x48, 0xc7, 0xc0, 0xf9, 0xff, 0xff, 0xff, //0x00003ca9 movq $-7, %rax + 0xe9, 0x60, 0x00, 0x00, 0x00, //0x00003cb0 jmp LBB0_728 + //0x00003cb5 LBB0_700 + 0x49, 0x83, 0xc0, 0xff, //0x00003cb5 addq $-1, %r8 + 0x4c, 0x89, 0xc0, //0x00003cb9 movq %r8, %rax + 0xe9, 0x54, 0x00, 0x00, 0x00, //0x00003cbc jmp LBB0_728 + //0x00003cc1 LBB0_702 + 0x48, 0x83, 0xf8, 0xff, //0x00003cc1 cmpq $-1, %rax + 0x0f, 0x85, 0x87, 0x01, 0x00, 0x00, //0x00003cc5 jne LBB0_704 + //0x00003ccb LBB0_703 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003ccb movq $-1, %rax + 0x4d, 0x89, 0xc7, //0x00003cd2 movq %r8, %r15 + 0xe9, 0x78, 0x01, 0x00, 0x00, //0x00003cd5 jmp LBB0_704 + //0x00003cda LBB0_475 + 0x49, 0x83, 0xc1, 0xff, //0x00003cda addq $-1, %r9 + 0x4c, 0x89, 0xc8, //0x00003cde movq %r9, %rax + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00003ce1 jmp LBB0_728 + //0x00003ce6 LBB0_705 + 0x49, 0x83, 0xc5, 0xff, //0x00003ce6 addq $-1, %r13 + 0x4c, 0x89, 0xe8, //0x00003cea movq %r13, %rax + 0xe9, 0x23, 0x00, 0x00, 0x00, //0x00003ced jmp LBB0_728 + //0x00003cf2 LBB0_706 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003cf2 movq $-1, %rcx + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00003cf9 jmp LBB0_708 //0x00003cfe LBB0_707 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003cfe movq $-1, %rcx - 0x4d, 0x89, 0xfb, //0x00003d05 movq %r15, %r11 - 0xe9, 0x49, 0x00, 0x00, 0x00, //0x00003d08 jmp LBB0_716 - //0x00003d0d LBB0_708 - 0x4c, 0x89, 0xc9, //0x00003d0d movq %r9, %rcx - //0x00003d10 LBB0_709 - 0x48, 0xf7, 0xd1, //0x00003d10 notq %rcx - 0x49, 0x01, 0x4d, 0x00, //0x00003d13 addq %rcx, (%r13) - 0xe9, 0x71, 0xfe, 0xff, 0xff, //0x00003d17 jmp LBB0_710 - //0x00003d1c LBB0_717 - 0x4d, 0x89, 0xc8, //0x00003d1c movq %r9, %r8 - 0xe9, 0x2c, 0xfe, 0xff, 0xff, //0x00003d1f jmp LBB0_681 - //0x00003d24 LBB0_712 - 0x49, 0x83, 0xfa, 0xff, //0x00003d24 cmpq $-1, %r10 - 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00003d28 je LBB0_714 - 0x4d, 0x89, 0xd3, //0x00003d2e movq %r10, %r11 - 0xe9, 0x19, 0x00, 0x00, 0x00, //0x00003d31 jmp LBB0_715 - //0x00003d36 LBB0_209 - 0x4c, 0x01, 0xd2, //0x00003d36 addq %r10, %rdx - 0x49, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00003d39 movq $-2, %r10 - 0x49, 0x89, 0xd7, //0x00003d40 movq %rdx, %r15 - 0xe9, 0x84, 0xfe, 0xff, 0xff, //0x00003d43 jmp LBB0_703 - //0x00003d48 LBB0_714 - 0x4c, 0x0f, 0xbc, 0xde, //0x00003d48 bsfq %rsi, %r11 - 0x49, 0x01, 0xcb, //0x00003d4c addq %rcx, %r11 - //0x00003d4f LBB0_715 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003d4f movq $-2, %rcx - //0x00003d56 LBB0_716 - 0x48, 0x89, 0x0c, 0x24, //0x00003d56 movq %rcx, (%rsp) - 0x4d, 0x89, 0x5d, 0x00, //0x00003d5a movq %r11, (%r13) - 0xe9, 0x32, 0xfe, 0xff, 0xff, //0x00003d5e jmp LBB0_711 - //0x00003d63 LBB0_718 - 0x4d, 0x89, 0xcf, //0x00003d63 movq %r9, %r15 - 0xe9, 0x93, 0xff, 0xff, 0xff, //0x00003d66 jmp LBB0_707 - //0x00003d6b LBB0_719 - 0x48, 0x01, 0xca, //0x00003d6b addq %rcx, %rdx - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003d6e movq $-2, %rcx - 0x49, 0x89, 0xd3, //0x00003d75 movq %rdx, %r11 - 0xe9, 0xd9, 0xff, 0xff, 0xff, //0x00003d78 jmp LBB0_716 - //0x00003d7d LBB0_720 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00003d7d movq $16(%rsp), %rax - 0x48, 0x8b, 0x40, 0x08, //0x00003d82 movq $8(%rax), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003d86 movq %rax, (%r13) - 0xe9, 0x06, 0xfe, 0xff, 0xff, //0x00003d8a jmp LBB0_711 - //0x00003d8f LBB0_721 - 0x89, 0xf8, //0x00003d8f movl %edi, %eax - 0x4d, 0x29, 0xf2, //0x00003d91 subq %r14, %r10 - 0x49, 0x01, 0xc2, //0x00003d94 addq %rax, %r10 - 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00003d97 jmp LBB0_724 - //0x00003d9c LBB0_722 - 0x4d, 0x29, 0xf2, //0x00003d9c subq %r14, %r10 - 0x41, 0x89, 0xff, //0x00003d9f movl %edi, %r15d - 0xe9, 0x1b, 0xfe, 0xff, 0xff, //0x00003da2 jmp LBB0_701 - //0x00003da7 LBB0_723 - 0x4d, 0x29, 0xf2, //0x00003da7 subq %r14, %r10 - //0x00003daa LBB0_724 - 0x4d, 0x89, 0xd7, //0x00003daa movq %r10, %r15 - 0xe9, 0x13, 0xfe, 0xff, 0xff, //0x00003dad jmp LBB0_702 - //0x00003db2 LBB0_725 - 0x89, 0xf8, //0x00003db2 movl %edi, %eax - 0x4c, 0x29, 0xf1, //0x00003db4 subq %r14, %rcx - 0x48, 0x01, 0xc1, //0x00003db7 addq %rax, %rcx - 0x49, 0x89, 0xcb, //0x00003dba movq %rcx, %r11 - 0xe9, 0x8d, 0xff, 0xff, 0xff, //0x00003dbd jmp LBB0_715 - //0x00003dc2 LBB0_726 - 0x4c, 0x29, 0xf3, //0x00003dc2 subq %r14, %rbx - 0x41, 0x89, 0xfb, //0x00003dc5 movl %edi, %r11d - 0x49, 0x01, 0xdb, //0x00003dc8 addq %rbx, %r11 - 0xe9, 0x7f, 0xff, 0xff, 0xff, //0x00003dcb jmp LBB0_715 - //0x00003dd0 LBB0_727 - 0x48, 0x89, 0xc8, //0x00003dd0 movq %rcx, %rax - 0x4c, 0x29, 0xf0, //0x00003dd3 subq %r14, %rax - 0x49, 0x89, 0xc3, //0x00003dd6 movq %rax, %r11 - 0xe9, 0x71, 0xff, 0xff, 0xff, //0x00003dd9 jmp LBB0_715 - 0x90, 0x90, //0x00003dde .p2align 2, 0x90 + 0x4c, 0x89, 0xd1, //0x00003cfe movq %r10, %rcx + //0x00003d01 LBB0_708 + 0x49, 0x8b, 0x07, //0x00003d01 movq (%r15), %rax + 0x48, 0x29, 0xc8, //0x00003d04 subq %rcx, %rax + 0x48, 0x83, 0xc0, 0xfe, //0x00003d07 addq $-2, %rax + 0x49, 0x89, 0x07, //0x00003d0b movq %rax, (%r15) + //0x00003d0e LBB0_727 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d0e movq $-2, %rax + //0x00003d15 LBB0_728 + 0x48, 0x8d, 0x65, 0xd8, //0x00003d15 leaq $-40(%rbp), %rsp + 0x5b, //0x00003d19 popq %rbx + 0x41, 0x5c, //0x00003d1a popq %r12 + 0x41, 0x5d, //0x00003d1c popq %r13 + 0x41, 0x5e, //0x00003d1e popq %r14 + 0x41, 0x5f, //0x00003d20 popq %r15 + 0x5d, //0x00003d22 popq %rbp + 0xc5, 0xf8, 0x77, //0x00003d23 vzeroupper + 0xc3, //0x00003d26 retq + //0x00003d27 LBB0_711 + 0x49, 0x89, 0x17, //0x00003d27 movq %rdx, (%r15) + 0xe9, 0xe6, 0xff, 0xff, 0xff, //0x00003d2a jmp LBB0_728 + //0x00003d2f LBB0_709 + 0x49, 0x83, 0xff, 0xff, //0x00003d2f cmpq $-1, %r15 + 0x0f, 0x84, 0x0b, 0x01, 0x00, 0x00, //0x00003d33 je LBB0_730 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d39 movq $-2, %rax + 0xe9, 0x0d, 0x01, 0x00, 0x00, //0x00003d40 jmp LBB0_704 + //0x00003d45 LBB0_712 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d45 movq $-2, %rax + 0x80, 0xfa, 0x61, //0x00003d4c cmpb $97, %dl + 0x0f, 0x85, 0xc0, 0xff, 0xff, 0xff, //0x00003d4f jne LBB0_728 + 0x48, 0x8d, 0x51, 0x01, //0x00003d55 leaq $1(%rcx), %rdx + 0x49, 0x89, 0x17, //0x00003d59 movq %rdx, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x6c, //0x00003d5c cmpb $108, $1(%r14,%rcx) + 0x0f, 0x85, 0xad, 0xff, 0xff, 0xff, //0x00003d62 jne LBB0_728 + 0x48, 0x8d, 0x51, 0x02, //0x00003d68 leaq $2(%rcx), %rdx + 0x49, 0x89, 0x17, //0x00003d6c movq %rdx, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x73, //0x00003d6f cmpb $115, $2(%r14,%rcx) + 0x0f, 0x85, 0x9a, 0xff, 0xff, 0xff, //0x00003d75 jne LBB0_728 + 0x48, 0x8d, 0x51, 0x03, //0x00003d7b leaq $3(%rcx), %rdx + 0x49, 0x89, 0x17, //0x00003d7f movq %rdx, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x03, 0x65, //0x00003d82 cmpb $101, $3(%r14,%rcx) + 0x0f, 0x85, 0x87, 0xff, 0xff, 0xff, //0x00003d88 jne LBB0_728 + 0x48, 0x83, 0xc1, 0x04, //0x00003d8e addq $4, %rcx + 0x49, 0x89, 0x0f, //0x00003d92 movq %rcx, (%r15) + 0xe9, 0x7b, 0xff, 0xff, 0xff, //0x00003d95 jmp LBB0_728 + //0x00003d9a LBB0_270 + 0x49, 0x89, 0x07, //0x00003d9a movq %rax, (%r15) + 0x41, 0x80, 0x3c, 0x06, 0x6e, //0x00003d9d cmpb $110, (%r14,%rax) + 0x0f, 0x85, 0x66, 0xff, 0xff, 0xff, //0x00003da2 jne LBB0_727 + 0x49, 0x89, 0x0f, //0x00003da8 movq %rcx, (%r15) + 0x41, 0x80, 0x3c, 0x0e, 0x75, //0x00003dab cmpb $117, (%r14,%rcx) + 0x0f, 0x85, 0x58, 0xff, 0xff, 0xff, //0x00003db0 jne LBB0_727 + 0x48, 0x8d, 0x41, 0x01, //0x00003db6 leaq $1(%rcx), %rax + 0x49, 0x89, 0x07, //0x00003dba movq %rax, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x6c, //0x00003dbd cmpb $108, $1(%r14,%rcx) + 0x0f, 0x85, 0x45, 0xff, 0xff, 0xff, //0x00003dc3 jne LBB0_727 + 0x48, 0x8d, 0x41, 0x02, //0x00003dc9 leaq $2(%rcx), %rax + 0x49, 0x89, 0x07, //0x00003dcd movq %rax, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x6c, //0x00003dd0 cmpb $108, $2(%r14,%rcx) + 0x0f, 0x84, 0x47, 0x00, 0x00, 0x00, //0x00003dd6 je LBB0_721 + 0xe9, 0x2d, 0xff, 0xff, 0xff, //0x00003ddc jmp LBB0_727 + //0x00003de1 LBB0_717 + 0x49, 0x89, 0x07, //0x00003de1 movq %rax, (%r15) + 0x41, 0x80, 0x3c, 0x06, 0x74, //0x00003de4 cmpb $116, (%r14,%rax) + 0x0f, 0x85, 0x1f, 0xff, 0xff, 0xff, //0x00003de9 jne LBB0_727 + 0x49, 0x89, 0x0f, //0x00003def movq %rcx, (%r15) + 0x41, 0x80, 0x3c, 0x0e, 0x72, //0x00003df2 cmpb $114, (%r14,%rcx) + 0x0f, 0x85, 0x11, 0xff, 0xff, 0xff, //0x00003df7 jne LBB0_727 + 0x48, 0x8d, 0x41, 0x01, //0x00003dfd leaq $1(%rcx), %rax + 0x49, 0x89, 0x07, //0x00003e01 movq %rax, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x75, //0x00003e04 cmpb $117, $1(%r14,%rcx) + 0x0f, 0x85, 0xfe, 0xfe, 0xff, 0xff, //0x00003e0a jne LBB0_727 + 0x48, 0x8d, 0x41, 0x02, //0x00003e10 leaq $2(%rcx), %rax + 0x49, 0x89, 0x07, //0x00003e14 movq %rax, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x65, //0x00003e17 cmpb $101, $2(%r14,%rcx) + 0x0f, 0x85, 0xeb, 0xfe, 0xff, 0xff, //0x00003e1d jne LBB0_727 + //0x00003e23 LBB0_721 + 0x48, 0x83, 0xc1, 0x03, //0x00003e23 addq $3, %rcx + 0x49, 0x89, 0x0f, //0x00003e27 movq %rcx, (%r15) + 0xe9, 0xdf, 0xfe, 0xff, 0xff, //0x00003e2a jmp LBB0_727 + //0x00003e2f LBB0_394 + 0x48, 0x83, 0xc0, 0xff, //0x00003e2f addq $-1, %rax + 0xe9, 0xdd, 0xfe, 0xff, 0xff, //0x00003e33 jmp LBB0_728 + //0x00003e38 LBB0_267 + 0x48, 0x83, 0xc1, 0xff, //0x00003e38 addq $-1, %rcx + 0x48, 0x89, 0xc8, //0x00003e3c movq %rcx, %rax + 0xe9, 0xd1, 0xfe, 0xff, 0xff, //0x00003e3f jmp LBB0_728 + //0x00003e44 LBB0_730 + 0x4c, 0x0f, 0xbc, 0xfe, //0x00003e44 bsfq %rsi, %r15 + //0x00003e48 LBB0_731 + 0x49, 0x01, 0xc7, //0x00003e48 addq %rax, %r15 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003e4b movq $-2, %rax + //0x00003e52 LBB0_704 + 0x48, 0x8b, 0x4c, 0x24, 0x08, //0x00003e52 movq $8(%rsp), %rcx + 0x4c, 0x89, 0x39, //0x00003e57 movq %r15, (%rcx) + 0xe9, 0xb6, 0xfe, 0xff, 0xff, //0x00003e5a jmp LBB0_728 + //0x00003e5f LBB0_723 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003e5f movq $-1, %rcx + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00003e66 jmp LBB0_726 + //0x00003e6b LBB0_725 + 0x4c, 0x89, 0xc1, //0x00003e6b movq %r8, %rcx + //0x00003e6e LBB0_726 + 0x48, 0xf7, 0xd1, //0x00003e6e notq %rcx + 0x48, 0x8b, 0x44, 0x24, 0x08, //0x00003e71 movq $8(%rsp), %rax + 0x48, 0x01, 0x08, //0x00003e76 addq %rcx, (%rax) + 0xe9, 0x90, 0xfe, 0xff, 0xff, //0x00003e79 jmp LBB0_727 + //0x00003e7e LBB0_732 + 0x4d, 0x89, 0xc8, //0x00003e7e movq %r9, %r8 + 0xe9, 0x45, 0xfe, 0xff, 0xff, //0x00003e81 jmp LBB0_703 + //0x00003e86 LBB0_162 + 0x48, 0x01, 0xc2, //0x00003e86 addq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003e89 movq $-2, %rax + 0x49, 0x89, 0xd7, //0x00003e90 movq %rdx, %r15 + 0xe9, 0xba, 0xff, 0xff, 0xff, //0x00003e93 jmp LBB0_704 + //0x00003e98 LBB0_733 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00003e98 movq $32(%rsp), %rcx + 0x48, 0x8b, 0x49, 0x08, //0x00003e9d movq $8(%rcx), %rcx + 0x48, 0x8b, 0x54, 0x24, 0x08, //0x00003ea1 movq $8(%rsp), %rdx + 0x48, 0x89, 0x0a, //0x00003ea6 movq %rcx, (%rdx) + 0xe9, 0x67, 0xfe, 0xff, 0xff, //0x00003ea9 jmp LBB0_728 + //0x00003eae LBB0_734 + 0x89, 0xf9, //0x00003eae movl %edi, %ecx + 0x4c, 0x29, 0xf0, //0x00003eb0 subq %r14, %rax + 0x48, 0x01, 0xc8, //0x00003eb3 addq %rcx, %rax + 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00003eb6 jmp LBB0_737 + //0x00003ebb LBB0_735 + 0x4c, 0x29, 0xf0, //0x00003ebb subq %r14, %rax + 0x41, 0x89, 0xff, //0x00003ebe movl %edi, %r15d + 0xe9, 0x82, 0xff, 0xff, 0xff, //0x00003ec1 jmp LBB0_731 + //0x00003ec6 LBB0_736 + 0x4c, 0x29, 0xf0, //0x00003ec6 subq %r14, %rax + //0x00003ec9 LBB0_737 + 0x49, 0x89, 0xc7, //0x00003ec9 movq %rax, %r15 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003ecc movq $-2, %rax + 0xe9, 0x7a, 0xff, 0xff, 0xff, //0x00003ed3 jmp LBB0_704 + //0x00003ed8 .p2align 2, 0x90 // // .set L0_0_set_38, LBB0_38-LJTI0_0 // // .set L0_0_set_42, LBB0_42-LJTI0_0 // // .set L0_0_set_44, LBB0_44-LJTI0_0 - // // .set L0_0_set_63, LBB0_63-LJTI0_0 - // // .set L0_0_set_65, LBB0_65-LJTI0_0 - // // .set L0_0_set_68, LBB0_68-LJTI0_0 - //0x00003de0 LJTI0_0 - 0xf7, 0xc7, 0xff, 0xff, //0x00003de0 .long L0_0_set_38 - 0x27, 0xc8, 0xff, 0xff, //0x00003de4 .long L0_0_set_42 - 0x52, 0xc8, 0xff, 0xff, //0x00003de8 .long L0_0_set_44 - 0x9b, 0xc9, 0xff, 0xff, //0x00003dec .long L0_0_set_63 - 0xb0, 0xc9, 0xff, 0xff, //0x00003df0 .long L0_0_set_65 - 0x1a, 0xce, 0xff, 0xff, //0x00003df4 .long L0_0_set_68 - // // .set L0_1_set_711, LBB0_711-LJTI0_1 - // // .set L0_1_set_710, LBB0_710-LJTI0_1 - // // .set L0_1_set_234, LBB0_234-LJTI0_1 - // // .set L0_1_set_253, LBB0_253-LJTI0_1 - // // .set L0_1_set_70, LBB0_70-LJTI0_1 - // // .set L0_1_set_258, LBB0_258-LJTI0_1 + // // .set L0_0_set_64, LBB0_64-LJTI0_0 + // // .set L0_0_set_66, LBB0_66-LJTI0_0 + // // .set L0_0_set_69, LBB0_69-LJTI0_0 + //0x00003ed8 LJTI0_0 + 0x45, 0xc7, 0xff, 0xff, //0x00003ed8 .long L0_0_set_38 + 0x6d, 0xc7, 0xff, 0xff, //0x00003edc .long L0_0_set_42 + 0x98, 0xc7, 0xff, 0xff, //0x00003ee0 .long L0_0_set_44 + 0xe5, 0xc8, 0xff, 0xff, //0x00003ee4 .long L0_0_set_64 + 0xfc, 0xc8, 0xff, 0xff, //0x00003ee8 .long L0_0_set_66 + 0x76, 0xc9, 0xff, 0xff, //0x00003eec .long L0_0_set_69 + // // .set L0_1_set_728, LBB0_728-LJTI0_1 + // // .set L0_1_set_727, LBB0_727-LJTI0_1 + // // .set L0_1_set_238, LBB0_238-LJTI0_1 + // // .set L0_1_set_256, LBB0_256-LJTI0_1 + // // .set L0_1_set_71, LBB0_71-LJTI0_1 // // .set L0_1_set_261, LBB0_261-LJTI0_1 - // // .set L0_1_set_265, LBB0_265-LJTI0_1 - // // .set L0_1_set_271, LBB0_271-LJTI0_1 + // // .set L0_1_set_264, LBB0_264-LJTI0_1 + // // .set L0_1_set_268, LBB0_268-LJTI0_1 // // .set L0_1_set_274, LBB0_274-LJTI0_1 - //0x00003df8 LJTI0_1 - 0x9d, 0xfd, 0xff, 0xff, //0x00003df8 .long L0_1_set_711 - 0x95, 0xfd, 0xff, 0xff, //0x00003dfc .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e00 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e04 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e08 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e0c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e10 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e14 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e18 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e1c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e20 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e24 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e28 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e2c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e30 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e34 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e38 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e3c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e40 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e44 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e48 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e4c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e50 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e54 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e58 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e5c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e60 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e64 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e68 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e6c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e70 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e74 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e78 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e7c .long L0_1_set_710 - 0x52, 0xd5, 0xff, 0xff, //0x00003e80 .long L0_1_set_234 - 0x95, 0xfd, 0xff, 0xff, //0x00003e84 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e88 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e8c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e90 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e94 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e98 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e9c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ea0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ea4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ea8 .long L0_1_set_710 - 0x97, 0xd6, 0xff, 0xff, //0x00003eac .long L0_1_set_253 - 0x95, 0xfd, 0xff, 0xff, //0x00003eb0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003eb4 .long L0_1_set_710 - 0xcb, 0xc9, 0xff, 0xff, //0x00003eb8 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ebc .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ec0 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ec4 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ec8 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ecc .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ed0 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ed4 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ed8 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003edc .long L0_1_set_70 - 0x95, 0xfd, 0xff, 0xff, //0x00003ee0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ee4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ee8 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003eec .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ef0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ef4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ef8 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003efc .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f00 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f04 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f08 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f0c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f10 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f14 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f18 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f1c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f20 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f24 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f28 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f2c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f30 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f34 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f38 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f3c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f40 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f44 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f48 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f4c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f50 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f54 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f58 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f5c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f60 .long L0_1_set_710 - 0xe1, 0xd6, 0xff, 0xff, //0x00003f64 .long L0_1_set_258 - 0x95, 0xfd, 0xff, 0xff, //0x00003f68 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f6c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f70 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f74 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f78 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f7c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f80 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f84 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f88 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f8c .long L0_1_set_710 - 0x10, 0xd7, 0xff, 0xff, //0x00003f90 .long L0_1_set_261 - 0x95, 0xfd, 0xff, 0xff, //0x00003f94 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f98 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f9c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fa0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fa4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fa8 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fac .long L0_1_set_710 - 0x4b, 0xd7, 0xff, 0xff, //0x00003fb0 .long L0_1_set_265 - 0x95, 0xfd, 0xff, 0xff, //0x00003fb4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fb8 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fbc .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fc0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fc4 .long L0_1_set_710 - 0x78, 0xd7, 0xff, 0xff, //0x00003fc8 .long L0_1_set_271 - 0x95, 0xfd, 0xff, 0xff, //0x00003fcc .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fd0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fd4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fd8 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fdc .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fe0 .long L0_1_set_710 - 0xba, 0xd7, 0xff, 0xff, //0x00003fe4 .long L0_1_set_274 - // // .set L0_2_set_445, LBB0_445-LJTI0_2 - // // .set L0_2_set_467, LBB0_467-LJTI0_2 - // // .set L0_2_set_451, LBB0_451-LJTI0_2 - // // .set L0_2_set_454, LBB0_454-LJTI0_2 - //0x00003fe8 LJTI0_2 - 0x2a, 0xe4, 0xff, 0xff, //0x00003fe8 .long L0_2_set_445 - 0x9f, 0xe5, 0xff, 0xff, //0x00003fec .long L0_2_set_467 - 0x2a, 0xe4, 0xff, 0xff, //0x00003ff0 .long L0_2_set_445 - 0x72, 0xe4, 0xff, 0xff, //0x00003ff4 .long L0_2_set_451 - 0x9f, 0xe5, 0xff, 0xff, //0x00003ff8 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00003ffc .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004000 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004004 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004008 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x0000400c .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004010 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004014 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004018 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x0000401c .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004020 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004024 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004028 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x0000402c .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004030 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004034 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004038 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x0000403c .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004040 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004044 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004048 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x0000404c .long L0_2_set_467 - 0x95, 0xe4, 0xff, 0xff, //0x00004050 .long L0_2_set_454 - // // .set L0_3_set_121, LBB0_121-LJTI0_3 - // // .set L0_3_set_278, LBB0_278-LJTI0_3 - // // .set L0_3_set_115, LBB0_115-LJTI0_3 - // // .set L0_3_set_124, LBB0_124-LJTI0_3 - //0x00004054 LJTI0_3 - 0x77, 0xcb, 0xff, 0xff, //0x00004054 .long L0_3_set_121 - 0xa4, 0xd5, 0xff, 0xff, //0x00004058 .long L0_3_set_278 - 0x77, 0xcb, 0xff, 0xff, //0x0000405c .long L0_3_set_121 - 0x21, 0xcb, 0xff, 0xff, //0x00004060 .long L0_3_set_115 - 0xa4, 0xd5, 0xff, 0xff, //0x00004064 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004068 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x0000406c .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004070 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004074 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004078 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x0000407c .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004080 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004084 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004088 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x0000408c .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004090 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004094 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004098 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x0000409c .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040a0 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040a4 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040a8 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040ac .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040b0 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040b4 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040b8 .long L0_3_set_278 - 0x93, 0xcb, 0xff, 0xff, //0x000040bc .long L0_3_set_124 - //0x000040c0 .p2align 2, 0x00 - //0x000040c0 _MASK_USE_NUMBER - 0x02, 0x00, 0x00, 0x00, //0x000040c0 .long 2 + // // .set L0_1_set_277, LBB0_277-LJTI0_1 + //0x00003ef0 LJTI0_1 + 0x25, 0xfe, 0xff, 0xff, //0x00003ef0 .long L0_1_set_728 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ef4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ef8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003efc .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f00 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f04 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f08 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f0c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f10 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f14 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f18 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f1c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f20 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f24 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f28 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f2c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f30 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f34 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f38 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f3c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f40 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f44 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f48 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f4c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f50 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f54 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f58 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f5c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f60 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f64 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f68 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f6c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f70 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f74 .long L0_1_set_727 + 0x4f, 0xd5, 0xff, 0xff, //0x00003f78 .long L0_1_set_238 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f7c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f80 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f84 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f88 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f8c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f90 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f94 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f98 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f9c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fa0 .long L0_1_set_727 + 0x88, 0xd6, 0xff, 0xff, //0x00003fa4 .long L0_1_set_256 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fa8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fac .long L0_1_set_727 + 0x11, 0xc9, 0xff, 0xff, //0x00003fb0 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fb4 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fb8 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fbc .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fc0 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fc4 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fc8 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fcc .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fd0 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fd4 .long L0_1_set_71 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fd8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fdc .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fe0 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fe4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fe8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fec .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ff0 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ff4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ff8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ffc .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004000 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004004 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004008 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000400c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004010 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004014 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004018 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000401c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004020 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004024 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004028 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000402c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004030 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004034 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004038 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000403c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004040 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004044 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004048 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000404c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004050 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004054 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004058 .long L0_1_set_727 + 0xd0, 0xd6, 0xff, 0xff, //0x0000405c .long L0_1_set_261 + 0x1e, 0xfe, 0xff, 0xff, //0x00004060 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004064 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004068 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000406c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004070 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004074 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004078 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000407c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004080 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004084 .long L0_1_set_727 + 0x04, 0xd7, 0xff, 0xff, //0x00004088 .long L0_1_set_264 + 0x1e, 0xfe, 0xff, 0xff, //0x0000408c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004090 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004094 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004098 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000409c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040a0 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040a4 .long L0_1_set_727 + 0x42, 0xd7, 0xff, 0xff, //0x000040a8 .long L0_1_set_268 + 0x1e, 0xfe, 0xff, 0xff, //0x000040ac .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040b0 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040b4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040b8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040bc .long L0_1_set_727 + 0x73, 0xd7, 0xff, 0xff, //0x000040c0 .long L0_1_set_274 + 0x1e, 0xfe, 0xff, 0xff, //0x000040c4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040c8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040cc .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040d0 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040d4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040d8 .long L0_1_set_727 + 0xb4, 0xd7, 0xff, 0xff, //0x000040dc .long L0_1_set_277 + // // .set L0_2_set_463, LBB0_463-LJTI0_2 + // // .set L0_2_set_484, LBB0_484-LJTI0_2 + // // .set L0_2_set_465, LBB0_465-LJTI0_2 + // // .set L0_2_set_457, LBB0_457-LJTI0_2 + //0x000040e0 LJTI0_2 + 0x7a, 0xe5, 0xff, 0xff, //0x000040e0 .long L0_2_set_463 + 0xdf, 0xe6, 0xff, 0xff, //0x000040e4 .long L0_2_set_484 + 0x7a, 0xe5, 0xff, 0xff, //0x000040e8 .long L0_2_set_463 + 0x8d, 0xe5, 0xff, 0xff, //0x000040ec .long L0_2_set_465 + 0xdf, 0xe6, 0xff, 0xff, //0x000040f0 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x000040f4 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x000040f8 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x000040fc .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004100 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004104 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004108 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x0000410c .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004110 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004114 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004118 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x0000411c .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004120 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004124 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004128 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x0000412c .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004130 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004134 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004138 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x0000413c .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004140 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004144 .long L0_2_set_484 + 0x2a, 0xe5, 0xff, 0xff, //0x00004148 .long L0_2_set_457 + // // .set L0_3_set_230, LBB0_230-LJTI0_3 + // // .set L0_3_set_281, LBB0_281-LJTI0_3 + // // .set L0_3_set_232, LBB0_232-LJTI0_3 + // // .set L0_3_set_224, LBB0_224-LJTI0_3 + //0x0000414c LJTI0_3 + 0xae, 0xd2, 0xff, 0xff, //0x0000414c .long L0_3_set_230 + 0xa2, 0xd5, 0xff, 0xff, //0x00004150 .long L0_3_set_281 + 0xae, 0xd2, 0xff, 0xff, //0x00004154 .long L0_3_set_230 + 0xc8, 0xd2, 0xff, 0xff, //0x00004158 .long L0_3_set_232 + 0xa2, 0xd5, 0xff, 0xff, //0x0000415c .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004160 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004164 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004168 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x0000416c .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004170 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004174 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004178 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x0000417c .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004180 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004184 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004188 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x0000418c .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004190 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004194 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004198 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x0000419c .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x000041a0 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x000041a4 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x000041a8 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x000041ac .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x000041b0 .long L0_3_set_281 + 0x66, 0xd2, 0xff, 0xff, //0x000041b4 .long L0_3_set_224 + //0x000041b8 .p2align 2, 0x00 + //0x000041b8 _MASK_USE_NUMBER + 0x02, 0x00, 0x00, 0x00, //0x000041b8 .long 2 } diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_fast_subr.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_fast_subr.go index 8ac7e1a..8f26262 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_fast_subr.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_fast_subr.go @@ -16,7 +16,7 @@ const ( ) const ( - _size__skip_one_fast = 2824 + _size__skip_one_fast = 3052 ) var ( @@ -28,15 +28,15 @@ var ( {0xc, 32}, {0xd, 40}, {0x14, 48}, - {0x32c, 176}, - {0x32d, 48}, - {0x32f, 40}, - {0x331, 32}, - {0x333, 24}, - {0x335, 16}, - {0x336, 8}, - {0x33a, 0}, - {0xb08, 176}, + {0xa8c, 176}, + {0xa8d, 48}, + {0xa8f, 40}, + {0xa91, 32}, + {0xa93, 24}, + {0xa95, 16}, + {0xa96, 8}, + {0xa9a, 0}, + {0xbec, 176}, } ) diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_fast_text_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_fast_text_amd64.go index afc5618..94b81ac 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_fast_text_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_fast_text_amd64.go @@ -80,9 +80,9 @@ var _text_skip_one_fast = []byte{ 0x53, //0x0000015c pushq %rbx 0x48, 0x81, 0xec, 0x80, 0x00, 0x00, 0x00, //0x0000015d subq $128, %rsp 0x4c, 0x8b, 0x37, //0x00000164 movq (%rdi), %r14 - 0x48, 0x8b, 0x5f, 0x08, //0x00000167 movq $8(%rdi), %rbx + 0x48, 0x8b, 0x57, 0x08, //0x00000167 movq $8(%rdi), %rdx 0x48, 0x8b, 0x06, //0x0000016b movq (%rsi), %rax - 0x48, 0x39, 0xd8, //0x0000016e cmpq %rbx, %rax + 0x48, 0x39, 0xd0, //0x0000016e cmpq %rdx, %rax 0x0f, 0x83, 0x2a, 0x00, 0x00, 0x00, //0x00000171 jae LBB0_5 0x41, 0x8a, 0x0c, 0x06, //0x00000177 movb (%r14,%rax), %cl 0x80, 0xf9, 0x0d, //0x0000017b cmpb $13, %cl @@ -93,55 +93,55 @@ var _text_skip_one_fast = []byte{ 0x80, 0xf9, 0x01, //0x00000190 cmpb $1, %cl 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x00000193 jbe LBB0_5 0x48, 0x89, 0xc1, //0x00000199 movq %rax, %rcx - 0xe9, 0x7f, 0x01, 0x00, 0x00, //0x0000019c jmp LBB0_35 + 0xe9, 0x7f, 0x01, 0x00, 0x00, //0x0000019c jmp LBB0_31 //0x000001a1 LBB0_5 0x48, 0x8d, 0x48, 0x01, //0x000001a1 leaq $1(%rax), %rcx - 0x48, 0x39, 0xd9, //0x000001a5 cmpq %rbx, %rcx + 0x48, 0x39, 0xd1, //0x000001a5 cmpq %rdx, %rcx 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x000001a8 jae LBB0_9 - 0x41, 0x8a, 0x14, 0x0e, //0x000001ae movb (%r14,%rcx), %dl - 0x80, 0xfa, 0x0d, //0x000001b2 cmpb $13, %dl + 0x41, 0x8a, 0x1c, 0x0e, //0x000001ae movb (%r14,%rcx), %bl + 0x80, 0xfb, 0x0d, //0x000001b2 cmpb $13, %bl 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000001b5 je LBB0_9 - 0x80, 0xfa, 0x20, //0x000001bb cmpb $32, %dl + 0x80, 0xfb, 0x20, //0x000001bb cmpb $32, %bl 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000001be je LBB0_9 - 0x80, 0xc2, 0xf7, //0x000001c4 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x000001c7 cmpb $1, %dl - 0x0f, 0x87, 0x50, 0x01, 0x00, 0x00, //0x000001ca ja LBB0_35 + 0x80, 0xc3, 0xf7, //0x000001c4 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000001c7 cmpb $1, %bl + 0x0f, 0x87, 0x50, 0x01, 0x00, 0x00, //0x000001ca ja LBB0_31 //0x000001d0 LBB0_9 0x48, 0x8d, 0x48, 0x02, //0x000001d0 leaq $2(%rax), %rcx - 0x48, 0x39, 0xd9, //0x000001d4 cmpq %rbx, %rcx + 0x48, 0x39, 0xd1, //0x000001d4 cmpq %rdx, %rcx 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x000001d7 jae LBB0_13 - 0x41, 0x8a, 0x14, 0x0e, //0x000001dd movb (%r14,%rcx), %dl - 0x80, 0xfa, 0x0d, //0x000001e1 cmpb $13, %dl + 0x41, 0x8a, 0x1c, 0x0e, //0x000001dd movb (%r14,%rcx), %bl + 0x80, 0xfb, 0x0d, //0x000001e1 cmpb $13, %bl 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000001e4 je LBB0_13 - 0x80, 0xfa, 0x20, //0x000001ea cmpb $32, %dl + 0x80, 0xfb, 0x20, //0x000001ea cmpb $32, %bl 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000001ed je LBB0_13 - 0x80, 0xc2, 0xf7, //0x000001f3 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x000001f6 cmpb $1, %dl - 0x0f, 0x87, 0x21, 0x01, 0x00, 0x00, //0x000001f9 ja LBB0_35 + 0x80, 0xc3, 0xf7, //0x000001f3 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000001f6 cmpb $1, %bl + 0x0f, 0x87, 0x21, 0x01, 0x00, 0x00, //0x000001f9 ja LBB0_31 //0x000001ff LBB0_13 0x48, 0x8d, 0x48, 0x03, //0x000001ff leaq $3(%rax), %rcx - 0x48, 0x39, 0xd9, //0x00000203 cmpq %rbx, %rcx + 0x48, 0x39, 0xd1, //0x00000203 cmpq %rdx, %rcx 0x0f, 0x83, 0x22, 0x00, 0x00, 0x00, //0x00000206 jae LBB0_17 - 0x41, 0x8a, 0x14, 0x0e, //0x0000020c movb (%r14,%rcx), %dl - 0x80, 0xfa, 0x0d, //0x00000210 cmpb $13, %dl + 0x41, 0x8a, 0x1c, 0x0e, //0x0000020c movb (%r14,%rcx), %bl + 0x80, 0xfb, 0x0d, //0x00000210 cmpb $13, %bl 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000213 je LBB0_17 - 0x80, 0xfa, 0x20, //0x00000219 cmpb $32, %dl + 0x80, 0xfb, 0x20, //0x00000219 cmpb $32, %bl 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000021c je LBB0_17 - 0x80, 0xc2, 0xf7, //0x00000222 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x00000225 cmpb $1, %dl - 0x0f, 0x87, 0xf2, 0x00, 0x00, 0x00, //0x00000228 ja LBB0_35 + 0x80, 0xc3, 0xf7, //0x00000222 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000225 cmpb $1, %bl + 0x0f, 0x87, 0xf2, 0x00, 0x00, 0x00, //0x00000228 ja LBB0_31 //0x0000022e LBB0_17 0x48, 0x8d, 0x48, 0x04, //0x0000022e leaq $4(%rax), %rcx - 0x48, 0x89, 0xda, //0x00000232 movq %rbx, %rdx - 0x48, 0x29, 0xca, //0x00000235 subq %rcx, %rdx - 0x0f, 0x86, 0xbb, 0x00, 0x00, 0x00, //0x00000238 jbe LBB0_18 - 0x48, 0x83, 0xfa, 0x20, //0x0000023e cmpq $32, %rdx - 0x0f, 0x82, 0xa8, 0x09, 0x00, 0x00, //0x00000242 jb LBB0_20 - 0x48, 0xc7, 0xc2, 0xfc, 0xff, 0xff, 0xff, //0x00000248 movq $-4, %rdx - 0x48, 0x29, 0xc2, //0x0000024f subq %rax, %rdx + 0x48, 0x89, 0xd3, //0x00000232 movq %rdx, %rbx + 0x48, 0x29, 0xcb, //0x00000235 subq %rcx, %rbx + 0x0f, 0x86, 0xbb, 0x00, 0x00, 0x00, //0x00000238 jbe LBB0_29 + 0x48, 0x83, 0xfb, 0x20, //0x0000023e cmpq $32, %rbx + 0x0f, 0x82, 0x97, 0x0a, 0x00, 0x00, //0x00000242 jb LBB0_135 + 0x48, 0xc7, 0xc3, 0xfc, 0xff, 0xff, 0xff, //0x00000248 movq $-4, %rbx + 0x48, 0x29, 0xc3, //0x0000024f subq %rax, %rbx 0xc5, 0xfe, 0x6f, 0x05, 0xa6, 0xfd, 0xff, 0xff, //0x00000252 vmovdqu $-602(%rip), %ymm0 /* LCPI0_0+0(%rip) */ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000025a .p2align 4, 0x90 - //0x00000260 LBB0_29 + //0x00000260 LBB0_20 0xc4, 0xc1, 0x7e, 0x6f, 0x0c, 0x0e, //0x00000260 vmovdqu (%r14,%rcx), %ymm1 0xc4, 0xe2, 0x7d, 0x00, 0xd1, //0x00000266 vpshufb %ymm1, %ymm0, %ymm2 0xc5, 0xf5, 0x74, 0xca, //0x0000026b vpcmpeqb %ymm2, %ymm1, %ymm1 @@ -149,808 +149,855 @@ var _text_skip_one_fast = []byte{ 0x83, 0xf8, 0xff, //0x00000273 cmpl $-1, %eax 0x0f, 0x85, 0x8c, 0x00, 0x00, 0x00, //0x00000276 jne LBB0_30 0x48, 0x83, 0xc1, 0x20, //0x0000027c addq $32, %rcx - 0x48, 0x8d, 0x04, 0x13, //0x00000280 leaq (%rbx,%rdx), %rax + 0x48, 0x8d, 0x04, 0x1a, //0x00000280 leaq (%rdx,%rbx), %rax 0x48, 0x83, 0xc0, 0xe0, //0x00000284 addq $-32, %rax - 0x48, 0x83, 0xc2, 0xe0, //0x00000288 addq $-32, %rdx + 0x48, 0x83, 0xc3, 0xe0, //0x00000288 addq $-32, %rbx 0x48, 0x83, 0xf8, 0x1f, //0x0000028c cmpq $31, %rax - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00000290 ja LBB0_29 + 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00000290 ja LBB0_20 0x4c, 0x89, 0xf1, //0x00000296 movq %r14, %rcx - 0x48, 0x29, 0xd1, //0x00000299 subq %rdx, %rcx - 0x48, 0x01, 0xda, //0x0000029c addq %rbx, %rdx - 0x48, 0x85, 0xd2, //0x0000029f testq %rdx, %rdx - 0x0f, 0x84, 0x39, 0x00, 0x00, 0x00, //0x000002a2 je LBB0_33 - //0x000002a8 LBB0_24 - 0x4c, 0x8d, 0x04, 0x11, //0x000002a8 leaq (%rcx,%rdx), %r8 + 0x48, 0x29, 0xd9, //0x00000299 subq %rbx, %rcx + 0x48, 0x01, 0xd3, //0x0000029c addq %rdx, %rbx + 0x48, 0x85, 0xdb, //0x0000029f testq %rbx, %rbx + 0x0f, 0x84, 0x39, 0x00, 0x00, 0x00, //0x000002a2 je LBB0_28 + //0x000002a8 LBB0_23 + 0x4c, 0x8d, 0x04, 0x19, //0x000002a8 leaq (%rcx,%rbx), %r8 0x45, 0x31, 0xd2, //0x000002ac xorl %r10d, %r10d 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000002af movabsq $4294977024, %r9 - //0x000002b9 LBB0_25 + //0x000002b9 LBB0_24 0x42, 0x0f, 0xbe, 0x04, 0x11, //0x000002b9 movsbl (%rcx,%r10), %eax 0x83, 0xf8, 0x20, //0x000002be cmpl $32, %eax - 0x0f, 0x87, 0x02, 0x09, 0x00, 0x00, //0x000002c1 ja LBB0_27 + 0x0f, 0x87, 0xee, 0x09, 0x00, 0x00, //0x000002c1 ja LBB0_133 0x49, 0x0f, 0xa3, 0xc1, //0x000002c7 btq %rax, %r9 - 0x0f, 0x83, 0xf8, 0x08, 0x00, 0x00, //0x000002cb jae LBB0_27 + 0x0f, 0x83, 0xe4, 0x09, 0x00, 0x00, //0x000002cb jae LBB0_133 0x49, 0x83, 0xc2, 0x01, //0x000002d1 addq $1, %r10 - 0x4c, 0x39, 0xd2, //0x000002d5 cmpq %r10, %rdx - 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x000002d8 jne LBB0_25 + 0x4c, 0x39, 0xd3, //0x000002d5 cmpq %r10, %rbx + 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x000002d8 jne LBB0_24 0x4c, 0x89, 0xc1, //0x000002de movq %r8, %rcx - //0x000002e1 LBB0_33 + //0x000002e1 LBB0_28 0x4c, 0x29, 0xf1, //0x000002e1 subq %r14, %rcx 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000002e4 movq $-1, %rax - 0x48, 0x39, 0xd9, //0x000002eb cmpq %rbx, %rcx - 0x0f, 0x82, 0x2c, 0x00, 0x00, 0x00, //0x000002ee jb LBB0_35 - 0xe9, 0x7f, 0x01, 0x00, 0x00, //0x000002f4 jmp LBB0_138 - //0x000002f9 LBB0_18 + 0x48, 0x39, 0xd1, //0x000002eb cmpq %rdx, %rcx + 0x0f, 0x82, 0x2c, 0x00, 0x00, 0x00, //0x000002ee jb LBB0_31 + 0xe9, 0xdf, 0x08, 0x00, 0x00, //0x000002f4 jmp LBB0_96 + //0x000002f9 LBB0_29 0x48, 0x89, 0x0e, //0x000002f9 movq %rcx, (%rsi) 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000002fc movq $-1, %rax - 0xe9, 0x70, 0x01, 0x00, 0x00, //0x00000303 jmp LBB0_138 + 0xe9, 0xd0, 0x08, 0x00, 0x00, //0x00000303 jmp LBB0_96 //0x00000308 LBB0_30 0xf7, 0xd0, //0x00000308 notl %eax 0x0f, 0xbc, 0xc8, //0x0000030a bsfl %eax, %ecx - 0x48, 0x29, 0xd1, //0x0000030d subq %rdx, %rcx + 0x48, 0x29, 0xd9, //0x0000030d subq %rbx, %rcx 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000310 movq $-1, %rax - 0x48, 0x39, 0xd9, //0x00000317 cmpq %rbx, %rcx - 0x0f, 0x83, 0x58, 0x01, 0x00, 0x00, //0x0000031a jae LBB0_138 - //0x00000320 LBB0_35 - 0x48, 0x8d, 0x51, 0x01, //0x00000320 leaq $1(%rcx), %rdx - 0x48, 0x89, 0x16, //0x00000324 movq %rdx, (%rsi) - 0x41, 0x0f, 0xbe, 0x1c, 0x0e, //0x00000327 movsbl (%r14,%rcx), %ebx - 0x83, 0xfb, 0x7b, //0x0000032c cmpl $123, %ebx - 0x0f, 0x87, 0x68, 0x01, 0x00, 0x00, //0x0000032f ja LBB0_134 + 0x48, 0x39, 0xd1, //0x00000317 cmpq %rdx, %rcx + 0x0f, 0x83, 0xb8, 0x08, 0x00, 0x00, //0x0000031a jae LBB0_96 + //0x00000320 LBB0_31 + 0x4c, 0x8d, 0x79, 0x01, //0x00000320 leaq $1(%rcx), %r15 + 0x4c, 0x89, 0x3e, //0x00000324 movq %r15, (%rsi) + 0x41, 0x0f, 0xbe, 0x14, 0x0e, //0x00000327 movsbl (%r14,%rcx), %edx + 0x83, 0xfa, 0x7b, //0x0000032c cmpl $123, %edx + 0x0f, 0x87, 0xc3, 0x01, 0x00, 0x00, //0x0000032f ja LBB0_57 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000335 movq $-1, %rax - 0x4c, 0x8d, 0x05, 0x15, 0x09, 0x00, 0x00, //0x0000033c leaq $2325(%rip), %r8 /* LJTI0_0+0(%rip) */ - 0x49, 0x63, 0x1c, 0x98, //0x00000343 movslq (%r8,%rbx,4), %rbx - 0x4c, 0x01, 0xc3, //0x00000347 addq %r8, %rbx - 0xff, 0xe3, //0x0000034a jmpq *%rbx - //0x0000034c LBB0_110 - 0x48, 0x8b, 0x7f, 0x08, //0x0000034c movq $8(%rdi), %rdi - 0x48, 0x89, 0xf8, //0x00000350 movq %rdi, %rax - 0x48, 0x29, 0xd0, //0x00000353 subq %rdx, %rax - 0x48, 0x83, 0xf8, 0x20, //0x00000356 cmpq $32, %rax - 0x0f, 0x82, 0xa1, 0x08, 0x00, 0x00, //0x0000035a jb LBB0_111 - 0x48, 0x89, 0xc8, //0x00000360 movq %rcx, %rax - 0x48, 0xf7, 0xd0, //0x00000363 notq %rax - 0xc5, 0xfe, 0x6f, 0x05, 0xb2, 0xfc, 0xff, 0xff, //0x00000366 vmovdqu $-846(%rip), %ymm0 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x0d, 0xca, 0xfc, 0xff, 0xff, //0x0000036e vmovdqu $-822(%rip), %ymm1 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x15, 0xe2, 0xfc, 0xff, 0xff, //0x00000376 vmovdqu $-798(%rip), %ymm2 /* LCPI0_3+0(%rip) */ - 0x90, 0x90, //0x0000037e .p2align 4, 0x90 - //0x00000380 LBB0_119 - 0xc4, 0xc1, 0x7e, 0x6f, 0x1c, 0x16, //0x00000380 vmovdqu (%r14,%rdx), %ymm3 + 0x48, 0x8d, 0x1d, 0xf9, 0x09, 0x00, 0x00, //0x0000033c leaq $2553(%rip), %rbx /* LJTI0_0+0(%rip) */ + 0x48, 0x63, 0x14, 0x93, //0x00000343 movslq (%rbx,%rdx,4), %rdx + 0x48, 0x01, 0xda, //0x00000347 addq %rbx, %rdx + 0xff, 0xe2, //0x0000034a jmpq *%rdx + //0x0000034c LBB0_33 + 0x48, 0x8b, 0x47, 0x08, //0x0000034c movq $8(%rdi), %rax + 0x4c, 0x29, 0xf8, //0x00000350 subq %r15, %rax + 0x48, 0x83, 0xf8, 0x20, //0x00000353 cmpq $32, %rax + 0x0f, 0x82, 0x93, 0x09, 0x00, 0x00, //0x00000357 jb LBB0_136 + 0x31, 0xff, //0x0000035d xorl %edi, %edi + 0xc5, 0xfe, 0x6f, 0x05, 0xb9, 0xfc, 0xff, 0xff, //0x0000035f vmovdqu $-839(%rip), %ymm0 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x0d, 0xd1, 0xfc, 0xff, 0xff, //0x00000367 vmovdqu $-815(%rip), %ymm1 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x15, 0xe9, 0xfc, 0xff, 0xff, //0x0000036f vmovdqu $-791(%rip), %ymm2 /* LCPI0_3+0(%rip) */ + 0x4c, 0x89, 0xf2, //0x00000377 movq %r14, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000037a .p2align 4, 0x90 + //0x00000380 LBB0_35 + 0xc5, 0xfe, 0x6f, 0x5c, 0x0a, 0x01, //0x00000380 vmovdqu $1(%rdx,%rcx), %ymm3 0xc5, 0xe5, 0x74, 0xe0, //0x00000386 vpcmpeqb %ymm0, %ymm3, %ymm4 0xc5, 0xe5, 0xdb, 0xd9, //0x0000038a vpand %ymm1, %ymm3, %ymm3 0xc5, 0xe5, 0x74, 0xda, //0x0000038e vpcmpeqb %ymm2, %ymm3, %ymm3 0xc5, 0xe5, 0xeb, 0xdc, //0x00000392 vpor %ymm4, %ymm3, %ymm3 0xc5, 0xfd, 0xd7, 0xdb, //0x00000396 vpmovmskb %ymm3, %ebx 0x85, 0xdb, //0x0000039a testl %ebx, %ebx - 0x0f, 0x85, 0xca, 0x00, 0x00, 0x00, //0x0000039c jne LBB0_120 + 0x0f, 0x85, 0xe1, 0x00, 0x00, 0x00, //0x0000039c jne LBB0_51 0x48, 0x83, 0xc2, 0x20, //0x000003a2 addq $32, %rdx - 0x48, 0x8d, 0x1c, 0x07, //0x000003a6 leaq (%rdi,%rax), %rbx + 0x48, 0x8d, 0x1c, 0x38, //0x000003a6 leaq (%rax,%rdi), %rbx 0x48, 0x83, 0xc3, 0xe0, //0x000003aa addq $-32, %rbx - 0x48, 0x83, 0xc0, 0xe0, //0x000003ae addq $-32, %rax + 0x48, 0x83, 0xc7, 0xe0, //0x000003ae addq $-32, %rdi 0x48, 0x83, 0xfb, 0x1f, //0x000003b2 cmpq $31, %rbx - 0x0f, 0x87, 0xc4, 0xff, 0xff, 0xff, //0x000003b6 ja LBB0_119 - 0x4c, 0x89, 0xf2, //0x000003bc movq %r14, %rdx - 0x48, 0x29, 0xc2, //0x000003bf subq %rax, %rdx - 0x48, 0x01, 0xc7, //0x000003c2 addq %rax, %rdi - 0x48, 0x89, 0xf8, //0x000003c5 movq %rdi, %rax - 0x48, 0x83, 0xf8, 0x10, //0x000003c8 cmpq $16, %rax - 0x0f, 0x82, 0x54, 0x00, 0x00, 0x00, //0x000003cc jb LBB0_122 - //0x000003d2 LBB0_115 - 0x4c, 0x89, 0xf7, //0x000003d2 movq %r14, %rdi - 0x48, 0x29, 0xd7, //0x000003d5 subq %rdx, %rdi - 0xc5, 0xfa, 0x6f, 0x05, 0x40, 0xfd, 0xff, 0xff, //0x000003d8 vmovdqu $-704(%rip), %xmm0 /* LCPI0_4+0(%rip) */ - 0xc5, 0xfa, 0x6f, 0x0d, 0x48, 0xfd, 0xff, 0xff, //0x000003e0 vmovdqu $-696(%rip), %xmm1 /* LCPI0_5+0(%rip) */ - 0xc5, 0xfa, 0x6f, 0x15, 0x50, 0xfd, 0xff, 0xff, //0x000003e8 vmovdqu $-688(%rip), %xmm2 /* LCPI0_6+0(%rip) */ - //0x000003f0 LBB0_116 - 0xc5, 0xfa, 0x6f, 0x1a, //0x000003f0 vmovdqu (%rdx), %xmm3 - 0xc5, 0xe1, 0x74, 0xe0, //0x000003f4 vpcmpeqb %xmm0, %xmm3, %xmm4 - 0xc5, 0xe1, 0xdb, 0xd9, //0x000003f8 vpand %xmm1, %xmm3, %xmm3 - 0xc5, 0xe1, 0x74, 0xda, //0x000003fc vpcmpeqb %xmm2, %xmm3, %xmm3 - 0xc5, 0xe1, 0xeb, 0xdc, //0x00000400 vpor %xmm4, %xmm3, %xmm3 - 0xc5, 0xf9, 0xd7, 0xdb, //0x00000404 vpmovmskb %xmm3, %ebx - 0x85, 0xdb, //0x00000408 testl %ebx, %ebx - 0x0f, 0x85, 0xa7, 0x07, 0x00, 0x00, //0x0000040a jne LBB0_117 - 0x48, 0x83, 0xc2, 0x10, //0x00000410 addq $16, %rdx - 0x48, 0x83, 0xc0, 0xf0, //0x00000414 addq $-16, %rax - 0x48, 0x83, 0xc7, 0xf0, //0x00000418 addq $-16, %rdi - 0x48, 0x83, 0xf8, 0x0f, //0x0000041c cmpq $15, %rax - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00000420 ja LBB0_116 - //0x00000426 LBB0_122 + 0x0f, 0x87, 0xc4, 0xff, 0xff, 0xff, //0x000003b6 ja LBB0_35 + 0x4c, 0x8d, 0x3c, 0x0a, //0x000003bc leaq (%rdx,%rcx), %r15 + 0x49, 0x83, 0xc7, 0x01, //0x000003c0 addq $1, %r15 + 0x48, 0x01, 0xf8, //0x000003c4 addq %rdi, %rax + 0x48, 0x83, 0xf8, 0x10, //0x000003c7 cmpq $16, %rax + 0x0f, 0x82, 0x55, 0x00, 0x00, 0x00, //0x000003cb jb LBB0_42 + //0x000003d1 LBB0_38 + 0x4d, 0x8d, 0x4f, 0xff, //0x000003d1 leaq $-1(%r15), %r9 + 0x31, 0xff, //0x000003d5 xorl %edi, %edi + 0xc5, 0xfa, 0x6f, 0x05, 0x41, 0xfd, 0xff, 0xff, //0x000003d7 vmovdqu $-703(%rip), %xmm0 /* LCPI0_4+0(%rip) */ + 0xc5, 0xfa, 0x6f, 0x0d, 0x49, 0xfd, 0xff, 0xff, //0x000003df vmovdqu $-695(%rip), %xmm1 /* LCPI0_5+0(%rip) */ + 0xc5, 0xfa, 0x6f, 0x15, 0x51, 0xfd, 0xff, 0xff, //0x000003e7 vmovdqu $-687(%rip), %xmm2 /* LCPI0_6+0(%rip) */ + //0x000003ef LBB0_39 + 0xc4, 0xc1, 0x7a, 0x6f, 0x1c, 0x3f, //0x000003ef vmovdqu (%r15,%rdi), %xmm3 + 0xc5, 0xe1, 0x74, 0xe0, //0x000003f5 vpcmpeqb %xmm0, %xmm3, %xmm4 + 0xc5, 0xe1, 0xdb, 0xd9, //0x000003f9 vpand %xmm1, %xmm3, %xmm3 + 0xc5, 0xe1, 0x74, 0xda, //0x000003fd vpcmpeqb %xmm2, %xmm3, %xmm3 + 0xc5, 0xe1, 0xeb, 0xdc, //0x00000401 vpor %xmm4, %xmm3, %xmm3 + 0xc5, 0xf9, 0xd7, 0xd3, //0x00000405 vpmovmskb %xmm3, %edx + 0x85, 0xd2, //0x00000409 testl %edx, %edx + 0x0f, 0x85, 0x30, 0x08, 0x00, 0x00, //0x0000040b jne LBB0_128 + 0x48, 0x83, 0xc0, 0xf0, //0x00000411 addq $-16, %rax + 0x48, 0x83, 0xc7, 0x10, //0x00000415 addq $16, %rdi + 0x48, 0x83, 0xf8, 0x0f, //0x00000419 cmpq $15, %rax + 0x0f, 0x87, 0xcc, 0xff, 0xff, 0xff, //0x0000041d ja LBB0_39 + 0x49, 0x01, 0xff, //0x00000423 addq %rdi, %r15 + //0x00000426 LBB0_42 0x48, 0x85, 0xc0, //0x00000426 testq %rax, %rax - 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00000429 je LBB0_130 - 0x4c, 0x8d, 0x04, 0x02, //0x0000042f leaq (%rdx,%rax), %r8 - 0x31, 0xff, //0x00000433 xorl %edi, %edi - //0x00000435 LBB0_124 - 0x0f, 0xb6, 0x1c, 0x3a, //0x00000435 movzbl (%rdx,%rdi), %ebx - 0x80, 0xfb, 0x2c, //0x00000439 cmpb $44, %bl - 0x0f, 0x84, 0xd1, 0x07, 0x00, 0x00, //0x0000043c je LBB0_127 - 0x80, 0xfb, 0x7d, //0x00000442 cmpb $125, %bl - 0x0f, 0x84, 0xc8, 0x07, 0x00, 0x00, //0x00000445 je LBB0_127 - 0x80, 0xfb, 0x5d, //0x0000044b cmpb $93, %bl - 0x0f, 0x84, 0xbf, 0x07, 0x00, 0x00, //0x0000044e je LBB0_127 - 0x48, 0x83, 0xc7, 0x01, //0x00000454 addq $1, %rdi - 0x48, 0x39, 0xf8, //0x00000458 cmpq %rdi, %rax - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x0000045b jne LBB0_124 - 0x4c, 0x89, 0xc2, //0x00000461 movq %r8, %rdx - //0x00000464 LBB0_130 - 0x4c, 0x29, 0xf2, //0x00000464 subq %r14, %rdx - 0xe9, 0x06, 0x00, 0x00, 0x00, //0x00000467 jmp LBB0_136 - //0x0000046c LBB0_120 - 0x0f, 0xbc, 0xd3, //0x0000046c bsfl %ebx, %edx - 0x48, 0x29, 0xc2, //0x0000046f subq %rax, %rdx - //0x00000472 LBB0_136 - 0x48, 0x89, 0x16, //0x00000472 movq %rdx, (%rsi) - //0x00000475 LBB0_137 - 0x48, 0x89, 0xc8, //0x00000475 movq %rcx, %rax - //0x00000478 LBB0_138 - 0x48, 0x8d, 0x65, 0xd8, //0x00000478 leaq $-40(%rbp), %rsp - 0x5b, //0x0000047c popq %rbx - 0x41, 0x5c, //0x0000047d popq %r12 - 0x41, 0x5d, //0x0000047f popq %r13 - 0x41, 0x5e, //0x00000481 popq %r14 - 0x41, 0x5f, //0x00000483 popq %r15 - 0x5d, //0x00000485 popq %rbp - 0xc5, 0xf8, 0x77, //0x00000486 vzeroupper - 0xc3, //0x00000489 retq - //0x0000048a LBB0_131 - 0x48, 0x8d, 0x51, 0x04, //0x0000048a leaq $4(%rcx), %rdx - 0x48, 0x3b, 0x57, 0x08, //0x0000048e cmpq $8(%rdi), %rdx - 0x0f, 0x86, 0xda, 0xff, 0xff, 0xff, //0x00000492 jbe LBB0_136 - 0xe9, 0xdb, 0xff, 0xff, 0xff, //0x00000498 jmp LBB0_138 - //0x0000049d LBB0_134 - 0x48, 0x89, 0x0e, //0x0000049d movq %rcx, (%rsi) - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x000004a0 movq $-2, %rax - 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x000004a7 jmp LBB0_138 - //0x000004ac LBB0_89 - 0x4c, 0x8b, 0x47, 0x08, //0x000004ac movq $8(%rdi), %r8 - 0x4d, 0x89, 0xc3, //0x000004b0 movq %r8, %r11 - 0x49, 0x29, 0xd3, //0x000004b3 subq %rdx, %r11 - 0x49, 0x83, 0xfb, 0x20, //0x000004b6 cmpq $32, %r11 - 0x0f, 0x8c, 0x5e, 0x07, 0x00, 0x00, //0x000004ba jl LBB0_90 - 0x4d, 0x8d, 0x0c, 0x0e, //0x000004c0 leaq (%r14,%rcx), %r9 - 0x49, 0x29, 0xc8, //0x000004c4 subq %rcx, %r8 - 0x41, 0xbd, 0x1f, 0x00, 0x00, 0x00, //0x000004c7 movl $31, %r13d - 0x45, 0x31, 0xdb, //0x000004cd xorl %r11d, %r11d - 0xc5, 0xfe, 0x6f, 0x05, 0xa8, 0xfb, 0xff, 0xff, //0x000004d0 vmovdqu $-1112(%rip), %ymm0 /* LCPI0_7+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x0d, 0xc0, 0xfb, 0xff, 0xff, //0x000004d8 vmovdqu $-1088(%rip), %ymm1 /* LCPI0_8+0(%rip) */ - 0x45, 0x31, 0xff, //0x000004e0 xorl %r15d, %r15d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000004e3 .p2align 4, 0x90 - //0x000004f0 LBB0_92 - 0xc4, 0x81, 0x7e, 0x6f, 0x54, 0x19, 0x01, //0x000004f0 vmovdqu $1(%r9,%r11), %ymm2 - 0xc5, 0xed, 0x74, 0xd8, //0x000004f7 vpcmpeqb %ymm0, %ymm2, %ymm3 - 0xc5, 0x7d, 0xd7, 0xd3, //0x000004fb vpmovmskb %ymm3, %r10d - 0xc5, 0xed, 0x74, 0xd1, //0x000004ff vpcmpeqb %ymm1, %ymm2, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x00000503 vpmovmskb %ymm2, %edi - 0x85, 0xff, //0x00000507 testl %edi, %edi - 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x00000509 jne LBB0_95 - 0x4d, 0x85, 0xff, //0x0000050f testq %r15, %r15 - 0x0f, 0x85, 0x08, 0x00, 0x00, 0x00, //0x00000512 jne LBB0_95 - 0x45, 0x31, 0xff, //0x00000518 xorl %r15d, %r15d - 0xe9, 0x34, 0x00, 0x00, 0x00, //0x0000051b jmp LBB0_96 - //0x00000520 .p2align 4, 0x90 - //0x00000520 LBB0_95 - 0x44, 0x89, 0xfb, //0x00000520 movl %r15d, %ebx - 0xf7, 0xd3, //0x00000523 notl %ebx - 0x21, 0xfb, //0x00000525 andl %edi, %ebx - 0x44, 0x8d, 0x24, 0x1b, //0x00000527 leal (%rbx,%rbx), %r12d - 0x45, 0x09, 0xfc, //0x0000052b orl %r15d, %r12d - 0x44, 0x89, 0xe2, //0x0000052e movl %r12d, %edx - 0xf7, 0xd2, //0x00000531 notl %edx - 0x21, 0xfa, //0x00000533 andl %edi, %edx - 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000535 andl $-1431655766, %edx + 0x0f, 0x84, 0x49, 0x00, 0x00, 0x00, //0x00000429 je LBB0_50 + 0x4d, 0x8d, 0x04, 0x07, //0x0000042f leaq (%r15,%rax), %r8 + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00000433 movabsq $17596481021440, %rdi + //0x0000043d LBB0_44 + 0x41, 0x0f, 0xb6, 0x17, //0x0000043d movzbl (%r15), %edx + 0x48, 0x83, 0xfa, 0x2c, //0x00000441 cmpq $44, %rdx + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x00000445 ja LBB0_46 + 0x48, 0x0f, 0xa3, 0xd7, //0x0000044b btq %rdx, %rdi + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x0000044f jb LBB0_50 + //0x00000455 LBB0_46 + 0x80, 0xfa, 0x5d, //0x00000455 cmpb $93, %dl + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00000458 je LBB0_50 + 0x80, 0xfa, 0x7d, //0x0000045e cmpb $125, %dl + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00000461 je LBB0_50 + 0x49, 0x83, 0xc7, 0x01, //0x00000467 addq $1, %r15 + 0x48, 0x83, 0xc0, 0xff, //0x0000046b addq $-1, %rax + 0x0f, 0x85, 0xc8, 0xff, 0xff, 0xff, //0x0000046f jne LBB0_44 + 0x4d, 0x89, 0xc7, //0x00000475 movq %r8, %r15 + //0x00000478 LBB0_50 + 0x4d, 0x29, 0xf7, //0x00000478 subq %r14, %r15 + 0x4c, 0x89, 0x3e, //0x0000047b movq %r15, (%rsi) + 0xe9, 0x52, 0x07, 0x00, 0x00, //0x0000047e jmp LBB0_95 + //0x00000483 LBB0_51 + 0x0f, 0xbc, 0xdb, //0x00000483 bsfl %ebx, %ebx + 0x48, 0x01, 0xcb, //0x00000486 addq %rcx, %rbx + 0x48, 0x89, 0xd8, //0x00000489 movq %rbx, %rax + 0x48, 0x29, 0xf8, //0x0000048c subq %rdi, %rax + 0x48, 0x8d, 0x78, 0x01, //0x0000048f leaq $1(%rax), %rdi + 0x48, 0x89, 0x3e, //0x00000493 movq %rdi, (%rsi) + 0x48, 0x85, 0xff, //0x00000496 testq %rdi, %rdi + 0x0f, 0x8e, 0x36, 0x07, 0x00, 0x00, //0x00000499 jle LBB0_95 + 0x48, 0x8d, 0x78, 0x02, //0x0000049f leaq $2(%rax), %rdi + 0x48, 0x01, 0xda, //0x000004a3 addq %rbx, %rdx + 0x49, 0xb8, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000004a6 movabsq $4294977024, %r8 + //0x000004b0 .p2align 4, 0x90 + //0x000004b0 LBB0_53 + 0x0f, 0xb6, 0x1a, //0x000004b0 movzbl (%rdx), %ebx + 0x48, 0x83, 0xfb, 0x20, //0x000004b3 cmpq $32, %rbx + 0x0f, 0x87, 0x18, 0x07, 0x00, 0x00, //0x000004b7 ja LBB0_95 + 0x49, 0x0f, 0xa3, 0xd8, //0x000004bd btq %rbx, %r8 + 0x0f, 0x83, 0x0e, 0x07, 0x00, 0x00, //0x000004c1 jae LBB0_95 + 0x48, 0x89, 0x06, //0x000004c7 movq %rax, (%rsi) + 0x48, 0x83, 0xc7, 0xff, //0x000004ca addq $-1, %rdi + 0x48, 0x83, 0xc0, 0xff, //0x000004ce addq $-1, %rax + 0x48, 0x83, 0xc2, 0xff, //0x000004d2 addq $-1, %rdx + 0x48, 0x83, 0xff, 0x01, //0x000004d6 cmpq $1, %rdi + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x000004da jg LBB0_53 + 0xe9, 0xf0, 0x06, 0x00, 0x00, //0x000004e0 jmp LBB0_95 + //0x000004e5 LBB0_56 + 0x48, 0x8d, 0x51, 0x04, //0x000004e5 leaq $4(%rcx), %rdx + 0x48, 0x3b, 0x57, 0x08, //0x000004e9 cmpq $8(%rdi), %rdx + 0x0f, 0x86, 0xca, 0x03, 0x00, 0x00, //0x000004ed jbe LBB0_94 + 0xe9, 0xe0, 0x06, 0x00, 0x00, //0x000004f3 jmp LBB0_96 + //0x000004f8 LBB0_57 + 0x48, 0x89, 0x0e, //0x000004f8 movq %rcx, (%rsi) + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x000004fb movq $-2, %rax + 0xe9, 0xd1, 0x06, 0x00, 0x00, //0x00000502 jmp LBB0_96 + //0x00000507 LBB0_58 + 0x4c, 0x8b, 0x47, 0x08, //0x00000507 movq $8(%rdi), %r8 + 0x4d, 0x89, 0xc3, //0x0000050b movq %r8, %r11 + 0x4d, 0x29, 0xfb, //0x0000050e subq %r15, %r11 + 0x49, 0x83, 0xfb, 0x20, //0x00000511 cmpq $32, %r11 + 0x0f, 0x8c, 0xe7, 0x07, 0x00, 0x00, //0x00000515 jl LBB0_137 + 0x4d, 0x8d, 0x0c, 0x0e, //0x0000051b leaq (%r14,%rcx), %r9 + 0x49, 0x29, 0xc8, //0x0000051f subq %rcx, %r8 + 0x41, 0xbd, 0x1f, 0x00, 0x00, 0x00, //0x00000522 movl $31, %r13d + 0x45, 0x31, 0xdb, //0x00000528 xorl %r11d, %r11d + 0xc5, 0xfe, 0x6f, 0x05, 0x4d, 0xfb, 0xff, 0xff, //0x0000052b vmovdqu $-1203(%rip), %ymm0 /* LCPI0_7+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x0d, 0x65, 0xfb, 0xff, 0xff, //0x00000533 vmovdqu $-1179(%rip), %ymm1 /* LCPI0_8+0(%rip) */ 0x45, 0x31, 0xff, //0x0000053b xorl %r15d, %r15d - 0x01, 0xda, //0x0000053e addl %ebx, %edx - 0x41, 0x0f, 0x92, 0xc7, //0x00000540 setb %r15b - 0x01, 0xd2, //0x00000544 addl %edx, %edx - 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x00000546 xorl $1431655765, %edx - 0x44, 0x21, 0xe2, //0x0000054c andl %r12d, %edx - 0xf7, 0xd2, //0x0000054f notl %edx - 0x41, 0x21, 0xd2, //0x00000551 andl %edx, %r10d - //0x00000554 LBB0_96 - 0x4d, 0x85, 0xd2, //0x00000554 testq %r10, %r10 - 0x0f, 0x85, 0x01, 0x06, 0x00, 0x00, //0x00000557 jne LBB0_97 - 0x49, 0x83, 0xc3, 0x20, //0x0000055d addq $32, %r11 - 0x4b, 0x8d, 0x14, 0x28, //0x00000561 leaq (%r8,%r13), %rdx - 0x48, 0x83, 0xc2, 0xe0, //0x00000565 addq $-32, %rdx - 0x49, 0x83, 0xc5, 0xe0, //0x00000569 addq $-32, %r13 - 0x48, 0x83, 0xfa, 0x3f, //0x0000056d cmpq $63, %rdx - 0x0f, 0x8f, 0x79, 0xff, 0xff, 0xff, //0x00000571 jg LBB0_92 - 0x4d, 0x85, 0xff, //0x00000577 testq %r15, %r15 - 0x0f, 0x85, 0xb2, 0x06, 0x00, 0x00, //0x0000057a jne LBB0_102 - 0x4b, 0x8d, 0x14, 0x0b, //0x00000580 leaq (%r11,%r9), %rdx - 0x48, 0x83, 0xc2, 0x01, //0x00000584 addq $1, %rdx - 0x49, 0xf7, 0xd3, //0x00000588 notq %r11 - 0x4d, 0x01, 0xc3, //0x0000058b addq %r8, %r11 - //0x0000058e LBB0_104 - 0x4d, 0x85, 0xdb, //0x0000058e testq %r11, %r11 - 0x0f, 0x8f, 0xfc, 0x05, 0x00, 0x00, //0x00000591 jg LBB0_105 - 0xe9, 0xdc, 0xfe, 0xff, 0xff, //0x00000597 jmp LBB0_138 - //0x0000059c LBB0_37 - 0x48, 0x8b, 0x5f, 0x08, //0x0000059c movq $8(%rdi), %rbx - 0x48, 0x29, 0xd3, //0x000005a0 subq %rdx, %rbx - 0x49, 0x01, 0xd6, //0x000005a3 addq %rdx, %r14 - 0x45, 0x31, 0xdb, //0x000005a6 xorl %r11d, %r11d - 0xc5, 0xfe, 0x6f, 0x05, 0xef, 0xfa, 0xff, 0xff, //0x000005a9 vmovdqu $-1297(%rip), %ymm0 /* LCPI0_8+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x0d, 0xc7, 0xfa, 0xff, 0xff, //0x000005b1 vmovdqu $-1337(%rip), %ymm1 /* LCPI0_7+0(%rip) */ - 0xc5, 0xe9, 0x76, 0xd2, //0x000005b9 vpcmpeqd %xmm2, %xmm2, %xmm2 - 0xc5, 0xfe, 0x6f, 0x1d, 0x3b, 0xfb, 0xff, 0xff, //0x000005bd vmovdqu $-1221(%rip), %ymm3 /* LCPI0_11+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x93, 0xfa, 0xff, 0xff, //0x000005c5 vmovdqu $-1389(%rip), %ymm4 /* LCPI0_3+0(%rip) */ - 0xc4, 0x41, 0x30, 0x57, 0xc9, //0x000005cd vxorps %xmm9, %xmm9, %xmm9 - 0x45, 0x31, 0xe4, //0x000005d2 xorl %r12d, %r12d - 0x45, 0x31, 0xff, //0x000005d5 xorl %r15d, %r15d - 0x45, 0x31, 0xc0, //0x000005d8 xorl %r8d, %r8d - 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x000005db jmp LBB0_38 - //0x000005e0 LBB0_47 - 0x49, 0xc1, 0xfd, 0x3f, //0x000005e0 sarq $63, %r13 - 0xf3, 0x49, 0x0f, 0xb8, 0xd3, //0x000005e4 popcntq %r11, %rdx - 0x49, 0x01, 0xd7, //0x000005e9 addq %rdx, %r15 - 0x49, 0x83, 0xc6, 0x40, //0x000005ec addq $64, %r14 - 0x48, 0x8b, 0x5c, 0x24, 0x18, //0x000005f0 movq $24(%rsp), %rbx - 0x48, 0x83, 0xc3, 0xc0, //0x000005f5 addq $-64, %rbx - 0x4d, 0x89, 0xeb, //0x000005f9 movq %r13, %r11 - //0x000005fc LBB0_38 - 0x48, 0x83, 0xfb, 0x40, //0x000005fc cmpq $64, %rbx - 0x48, 0x89, 0x5c, 0x24, 0x18, //0x00000600 movq %rbx, $24(%rsp) - 0x0f, 0x8c, 0x22, 0x01, 0x00, 0x00, //0x00000605 jl LBB0_48 - //0x0000060b LBB0_39 - 0xc4, 0xc1, 0x7e, 0x6f, 0x3e, //0x0000060b vmovdqu (%r14), %ymm7 - 0xc4, 0xc1, 0x7e, 0x6f, 0x76, 0x20, //0x00000610 vmovdqu $32(%r14), %ymm6 - 0xc5, 0x45, 0x74, 0xc0, //0x00000616 vpcmpeqb %ymm0, %ymm7, %ymm8 - 0xc4, 0x41, 0x7d, 0xd7, 0xc8, //0x0000061a vpmovmskb %ymm8, %r9d - 0xc5, 0x4d, 0x74, 0xc0, //0x0000061f vpcmpeqb %ymm0, %ymm6, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xd8, //0x00000623 vpmovmskb %ymm8, %ebx - 0x48, 0xc1, 0xe3, 0x20, //0x00000628 shlq $32, %rbx - 0x49, 0x09, 0xd9, //0x0000062c orq %rbx, %r9 - 0x4c, 0x89, 0xcb, //0x0000062f movq %r9, %rbx - 0x4c, 0x09, 0xe3, //0x00000632 orq %r12, %rbx - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00000635 jne LBB0_41 - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000063b movq $-1, %r9 - 0x45, 0x31, 0xe4, //0x00000642 xorl %r12d, %r12d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00000645 jmp LBB0_42 - //0x0000064a LBB0_41 - 0x4c, 0x89, 0xe3, //0x0000064a movq %r12, %rbx - 0x48, 0xf7, 0xd3, //0x0000064d notq %rbx - 0x4c, 0x21, 0xcb, //0x00000650 andq %r9, %rbx - 0x4c, 0x8d, 0x2c, 0x1b, //0x00000653 leaq (%rbx,%rbx), %r13 - 0x4d, 0x09, 0xe5, //0x00000657 orq %r12, %r13 - 0x4d, 0x89, 0xec, //0x0000065a movq %r13, %r12 - 0x49, 0xf7, 0xd4, //0x0000065d notq %r12 - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000660 movabsq $-6148914691236517206, %rdx - 0x49, 0x21, 0xd1, //0x0000066a andq %rdx, %r9 - 0x4d, 0x21, 0xe1, //0x0000066d andq %r12, %r9 - 0x45, 0x31, 0xe4, //0x00000670 xorl %r12d, %r12d - 0x49, 0x01, 0xd9, //0x00000673 addq %rbx, %r9 - 0x41, 0x0f, 0x92, 0xc4, //0x00000676 setb %r12b - 0x4d, 0x01, 0xc9, //0x0000067a addq %r9, %r9 - 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000067d movabsq $6148914691236517205, %rdx - 0x49, 0x31, 0xd1, //0x00000687 xorq %rdx, %r9 - 0x4d, 0x21, 0xe9, //0x0000068a andq %r13, %r9 - 0x49, 0xf7, 0xd1, //0x0000068d notq %r9 - //0x00000690 LBB0_42 - 0xc5, 0x4d, 0x74, 0xc1, //0x00000690 vpcmpeqb %ymm1, %ymm6, %ymm8 - 0xc4, 0x41, 0x7d, 0xd7, 0xe8, //0x00000694 vpmovmskb %ymm8, %r13d - 0x49, 0xc1, 0xe5, 0x20, //0x00000699 shlq $32, %r13 - 0xc5, 0x45, 0x74, 0xc1, //0x0000069d vpcmpeqb %ymm1, %ymm7, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xd8, //0x000006a1 vpmovmskb %ymm8, %ebx - 0x4c, 0x09, 0xeb, //0x000006a6 orq %r13, %rbx - 0x4c, 0x21, 0xcb, //0x000006a9 andq %r9, %rbx - 0xc4, 0xe1, 0xf9, 0x6e, 0xeb, //0x000006ac vmovq %rbx, %xmm5 - 0xc4, 0xe3, 0x51, 0x44, 0xea, 0x00, //0x000006b1 vpclmulqdq $0, %xmm2, %xmm5, %xmm5 - 0xc4, 0xc1, 0xf9, 0x7e, 0xed, //0x000006b7 vmovq %xmm5, %r13 - 0x4d, 0x31, 0xdd, //0x000006bc xorq %r11, %r13 - 0xc5, 0xc5, 0x74, 0xeb, //0x000006bf vpcmpeqb %ymm3, %ymm7, %ymm5 - 0xc5, 0x7d, 0xd7, 0xdd, //0x000006c3 vpmovmskb %ymm5, %r11d - 0xc5, 0xcd, 0x74, 0xeb, //0x000006c7 vpcmpeqb %ymm3, %ymm6, %ymm5 - 0xc5, 0xfd, 0xd7, 0xdd, //0x000006cb vpmovmskb %ymm5, %ebx - 0x48, 0xc1, 0xe3, 0x20, //0x000006cf shlq $32, %rbx - 0x49, 0x09, 0xdb, //0x000006d3 orq %rbx, %r11 - 0x4d, 0x89, 0xe9, //0x000006d6 movq %r13, %r9 - 0x49, 0xf7, 0xd1, //0x000006d9 notq %r9 - 0x4d, 0x21, 0xcb, //0x000006dc andq %r9, %r11 - 0xc5, 0xc5, 0x74, 0xec, //0x000006df vpcmpeqb %ymm4, %ymm7, %ymm5 - 0xc5, 0xfd, 0xd7, 0xdd, //0x000006e3 vpmovmskb %ymm5, %ebx - 0xc5, 0xcd, 0x74, 0xec, //0x000006e7 vpcmpeqb %ymm4, %ymm6, %ymm5 - 0xc5, 0x7d, 0xd7, 0xd5, //0x000006eb vpmovmskb %ymm5, %r10d - 0x49, 0xc1, 0xe2, 0x20, //0x000006ef shlq $32, %r10 - 0x4c, 0x09, 0xd3, //0x000006f3 orq %r10, %rbx - 0x4c, 0x21, 0xcb, //0x000006f6 andq %r9, %rbx - 0x0f, 0x84, 0xe1, 0xfe, 0xff, 0xff, //0x000006f9 je LBB0_47 - 0x90, //0x000006ff .p2align 4, 0x90 - //0x00000700 LBB0_44 - 0x4c, 0x8d, 0x4b, 0xff, //0x00000700 leaq $-1(%rbx), %r9 - 0x4c, 0x89, 0xca, //0x00000704 movq %r9, %rdx - 0x4c, 0x21, 0xda, //0x00000707 andq %r11, %rdx - 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x0000070a popcntq %rdx, %rdx - 0x4c, 0x01, 0xfa, //0x0000070f addq %r15, %rdx - 0x4c, 0x39, 0xc2, //0x00000712 cmpq %r8, %rdx - 0x0f, 0x86, 0x0e, 0x04, 0x00, 0x00, //0x00000715 jbe LBB0_45 - 0x49, 0x83, 0xc0, 0x01, //0x0000071b addq $1, %r8 - 0x4c, 0x21, 0xcb, //0x0000071f andq %r9, %rbx - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00000722 jne LBB0_44 - 0xe9, 0xb3, 0xfe, 0xff, 0xff, //0x00000728 jmp LBB0_47 - //0x0000072d LBB0_48 - 0x48, 0x85, 0xdb, //0x0000072d testq %rbx, %rbx - 0x0f, 0x8e, 0xf0, 0x04, 0x00, 0x00, //0x00000730 jle LBB0_49 - 0xc5, 0x7c, 0x11, 0x4c, 0x24, 0x40, //0x00000736 vmovups %ymm9, $64(%rsp) - 0xc5, 0x7c, 0x11, 0x4c, 0x24, 0x20, //0x0000073c vmovups %ymm9, $32(%rsp) - 0x44, 0x89, 0xf2, //0x00000742 movl %r14d, %edx - 0x81, 0xe2, 0xff, 0x0f, 0x00, 0x00, //0x00000745 andl $4095, %edx - 0x81, 0xfa, 0xc1, 0x0f, 0x00, 0x00, //0x0000074b cmpl $4033, %edx - 0x0f, 0x82, 0xb4, 0xfe, 0xff, 0xff, //0x00000751 jb LBB0_39 - 0x48, 0x83, 0x7c, 0x24, 0x18, 0x20, //0x00000757 cmpq $32, $24(%rsp) - 0x0f, 0x82, 0x22, 0x00, 0x00, 0x00, //0x0000075d jb LBB0_52 - 0xc4, 0xc1, 0x7c, 0x10, 0x2e, //0x00000763 vmovups (%r14), %ymm5 - 0xc5, 0xfc, 0x11, 0x6c, 0x24, 0x20, //0x00000768 vmovups %ymm5, $32(%rsp) - 0x49, 0x83, 0xc6, 0x20, //0x0000076e addq $32, %r14 - 0x48, 0x8b, 0x54, 0x24, 0x18, //0x00000772 movq $24(%rsp), %rdx - 0x48, 0x8d, 0x5a, 0xe0, //0x00000777 leaq $-32(%rdx), %rbx - 0x4c, 0x8d, 0x4c, 0x24, 0x40, //0x0000077b leaq $64(%rsp), %r9 - 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00000780 jmp LBB0_54 - //0x00000785 LBB0_52 - 0x4c, 0x8d, 0x4c, 0x24, 0x20, //0x00000785 leaq $32(%rsp), %r9 - 0x48, 0x8b, 0x5c, 0x24, 0x18, //0x0000078a movq $24(%rsp), %rbx - //0x0000078f LBB0_54 - 0x48, 0x83, 0xfb, 0x10, //0x0000078f cmpq $16, %rbx - 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00000793 jae LBB0_55 - 0x48, 0x83, 0xfb, 0x08, //0x00000799 cmpq $8, %rbx - 0x0f, 0x83, 0x4a, 0x00, 0x00, 0x00, //0x0000079d jae LBB0_57 - //0x000007a3 LBB0_58 - 0x48, 0x83, 0xfb, 0x04, //0x000007a3 cmpq $4, %rbx - 0x0f, 0x8d, 0x5c, 0x00, 0x00, 0x00, //0x000007a7 jge LBB0_59 - //0x000007ad LBB0_60 - 0x48, 0x83, 0xfb, 0x02, //0x000007ad cmpq $2, %rbx - 0x0f, 0x83, 0x6e, 0x00, 0x00, 0x00, //0x000007b1 jae LBB0_61 - //0x000007b7 LBB0_62 - 0x4c, 0x89, 0xf2, //0x000007b7 movq %r14, %rdx - 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x000007ba leaq $32(%rsp), %r14 - 0x48, 0x85, 0xdb, //0x000007bf testq %rbx, %rbx - 0x0f, 0x85, 0x82, 0x00, 0x00, 0x00, //0x000007c2 jne LBB0_63 - 0xe9, 0x3e, 0xfe, 0xff, 0xff, //0x000007c8 jmp LBB0_39 - //0x000007cd LBB0_55 - 0xc4, 0xc1, 0x78, 0x10, 0x2e, //0x000007cd vmovups (%r14), %xmm5 - 0xc4, 0xc1, 0x78, 0x11, 0x29, //0x000007d2 vmovups %xmm5, (%r9) - 0x49, 0x83, 0xc6, 0x10, //0x000007d7 addq $16, %r14 - 0x49, 0x83, 0xc1, 0x10, //0x000007db addq $16, %r9 - 0x48, 0x83, 0xc3, 0xf0, //0x000007df addq $-16, %rbx - 0x48, 0x83, 0xfb, 0x08, //0x000007e3 cmpq $8, %rbx - 0x0f, 0x82, 0xb6, 0xff, 0xff, 0xff, //0x000007e7 jb LBB0_58 - //0x000007ed LBB0_57 - 0x49, 0x8b, 0x16, //0x000007ed movq (%r14), %rdx - 0x49, 0x89, 0x11, //0x000007f0 movq %rdx, (%r9) - 0x49, 0x83, 0xc6, 0x08, //0x000007f3 addq $8, %r14 - 0x49, 0x83, 0xc1, 0x08, //0x000007f7 addq $8, %r9 - 0x48, 0x83, 0xc3, 0xf8, //0x000007fb addq $-8, %rbx - 0x48, 0x83, 0xfb, 0x04, //0x000007ff cmpq $4, %rbx - 0x0f, 0x8c, 0xa4, 0xff, 0xff, 0xff, //0x00000803 jl LBB0_60 - //0x00000809 LBB0_59 - 0x41, 0x8b, 0x16, //0x00000809 movl (%r14), %edx - 0x41, 0x89, 0x11, //0x0000080c movl %edx, (%r9) - 0x49, 0x83, 0xc6, 0x04, //0x0000080f addq $4, %r14 - 0x49, 0x83, 0xc1, 0x04, //0x00000813 addq $4, %r9 - 0x48, 0x83, 0xc3, 0xfc, //0x00000817 addq $-4, %rbx - 0x48, 0x83, 0xfb, 0x02, //0x0000081b cmpq $2, %rbx - 0x0f, 0x82, 0x92, 0xff, 0xff, 0xff, //0x0000081f jb LBB0_62 - //0x00000825 LBB0_61 - 0x41, 0x0f, 0xb7, 0x16, //0x00000825 movzwl (%r14), %edx - 0x66, 0x41, 0x89, 0x11, //0x00000829 movw %dx, (%r9) - 0x49, 0x83, 0xc6, 0x02, //0x0000082d addq $2, %r14 - 0x49, 0x83, 0xc1, 0x02, //0x00000831 addq $2, %r9 - 0x48, 0x83, 0xc3, 0xfe, //0x00000835 addq $-2, %rbx - 0x4c, 0x89, 0xf2, //0x00000839 movq %r14, %rdx - 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x0000083c leaq $32(%rsp), %r14 - 0x48, 0x85, 0xdb, //0x00000841 testq %rbx, %rbx - 0x0f, 0x84, 0xc1, 0xfd, 0xff, 0xff, //0x00000844 je LBB0_39 - //0x0000084a LBB0_63 - 0x8a, 0x12, //0x0000084a movb (%rdx), %dl - 0x41, 0x88, 0x11, //0x0000084c movb %dl, (%r9) - 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x0000084f leaq $32(%rsp), %r14 - 0xe9, 0xb2, 0xfd, 0xff, 0xff, //0x00000854 jmp LBB0_39 - //0x00000859 LBB0_133 - 0x48, 0x8d, 0x51, 0x05, //0x00000859 leaq $5(%rcx), %rdx - 0x48, 0x3b, 0x57, 0x08, //0x0000085d cmpq $8(%rdi), %rdx - 0x0f, 0x86, 0x0b, 0xfc, 0xff, 0xff, //0x00000861 jbe LBB0_136 - 0xe9, 0x0c, 0xfc, 0xff, 0xff, //0x00000867 jmp LBB0_138 - //0x0000086c LBB0_64 - 0x48, 0x8b, 0x5f, 0x08, //0x0000086c movq $8(%rdi), %rbx - 0x48, 0x29, 0xd3, //0x00000870 subq %rdx, %rbx - 0x49, 0x01, 0xd6, //0x00000873 addq %rdx, %r14 - 0x45, 0x31, 0xdb, //0x00000876 xorl %r11d, %r11d - 0xc5, 0xfe, 0x6f, 0x05, 0x1f, 0xf8, 0xff, 0xff, //0x00000879 vmovdqu $-2017(%rip), %ymm0 /* LCPI0_8+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x0d, 0xf7, 0xf7, 0xff, 0xff, //0x00000881 vmovdqu $-2057(%rip), %ymm1 /* LCPI0_7+0(%rip) */ - 0xc5, 0xe9, 0x76, 0xd2, //0x00000889 vpcmpeqd %xmm2, %xmm2, %xmm2 - 0xc5, 0xfe, 0x6f, 0x1d, 0x2b, 0xf8, 0xff, 0xff, //0x0000088d vmovdqu $-2005(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x43, 0xf8, 0xff, 0xff, //0x00000895 vmovdqu $-1981(%rip), %ymm4 /* LCPI0_10+0(%rip) */ - 0xc4, 0x41, 0x30, 0x57, 0xc9, //0x0000089d vxorps %xmm9, %xmm9, %xmm9 - 0x45, 0x31, 0xe4, //0x000008a2 xorl %r12d, %r12d - 0x45, 0x31, 0xff, //0x000008a5 xorl %r15d, %r15d - 0x45, 0x31, 0xc0, //0x000008a8 xorl %r8d, %r8d - 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x000008ab jmp LBB0_65 - //0x000008b0 LBB0_73 - 0x49, 0xc1, 0xfd, 0x3f, //0x000008b0 sarq $63, %r13 - 0xf3, 0x49, 0x0f, 0xb8, 0xd3, //0x000008b4 popcntq %r11, %rdx - 0x49, 0x01, 0xd7, //0x000008b9 addq %rdx, %r15 - 0x49, 0x83, 0xc6, 0x40, //0x000008bc addq $64, %r14 - 0x48, 0x8b, 0x5c, 0x24, 0x18, //0x000008c0 movq $24(%rsp), %rbx - 0x48, 0x83, 0xc3, 0xc0, //0x000008c5 addq $-64, %rbx - 0x4d, 0x89, 0xeb, //0x000008c9 movq %r13, %r11 - //0x000008cc LBB0_65 - 0x48, 0x83, 0xfb, 0x40, //0x000008cc cmpq $64, %rbx - 0x48, 0x89, 0x5c, 0x24, 0x18, //0x000008d0 movq %rbx, $24(%rsp) - 0x0f, 0x8c, 0x22, 0x01, 0x00, 0x00, //0x000008d5 jl LBB0_74 - //0x000008db LBB0_66 - 0xc4, 0xc1, 0x7e, 0x6f, 0x3e, //0x000008db vmovdqu (%r14), %ymm7 - 0xc4, 0xc1, 0x7e, 0x6f, 0x76, 0x20, //0x000008e0 vmovdqu $32(%r14), %ymm6 - 0xc5, 0x45, 0x74, 0xc0, //0x000008e6 vpcmpeqb %ymm0, %ymm7, %ymm8 - 0xc4, 0x41, 0x7d, 0xd7, 0xc8, //0x000008ea vpmovmskb %ymm8, %r9d - 0xc5, 0x4d, 0x74, 0xc0, //0x000008ef vpcmpeqb %ymm0, %ymm6, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xd8, //0x000008f3 vpmovmskb %ymm8, %ebx - 0x48, 0xc1, 0xe3, 0x20, //0x000008f8 shlq $32, %rbx - 0x49, 0x09, 0xd9, //0x000008fc orq %rbx, %r9 - 0x4c, 0x89, 0xcb, //0x000008ff movq %r9, %rbx - 0x4c, 0x09, 0xe3, //0x00000902 orq %r12, %rbx - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00000905 jne LBB0_68 - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000090b movq $-1, %r9 - 0x45, 0x31, 0xe4, //0x00000912 xorl %r12d, %r12d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00000915 jmp LBB0_69 - //0x0000091a LBB0_68 - 0x4c, 0x89, 0xe3, //0x0000091a movq %r12, %rbx - 0x48, 0xf7, 0xd3, //0x0000091d notq %rbx - 0x4c, 0x21, 0xcb, //0x00000920 andq %r9, %rbx - 0x4c, 0x8d, 0x2c, 0x1b, //0x00000923 leaq (%rbx,%rbx), %r13 - 0x4d, 0x09, 0xe5, //0x00000927 orq %r12, %r13 - 0x4d, 0x89, 0xec, //0x0000092a movq %r13, %r12 - 0x49, 0xf7, 0xd4, //0x0000092d notq %r12 - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000930 movabsq $-6148914691236517206, %rdx - 0x49, 0x21, 0xd1, //0x0000093a andq %rdx, %r9 - 0x4d, 0x21, 0xe1, //0x0000093d andq %r12, %r9 - 0x45, 0x31, 0xe4, //0x00000940 xorl %r12d, %r12d - 0x49, 0x01, 0xd9, //0x00000943 addq %rbx, %r9 - 0x41, 0x0f, 0x92, 0xc4, //0x00000946 setb %r12b - 0x4d, 0x01, 0xc9, //0x0000094a addq %r9, %r9 - 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000094d movabsq $6148914691236517205, %rdx - 0x49, 0x31, 0xd1, //0x00000957 xorq %rdx, %r9 - 0x4d, 0x21, 0xe9, //0x0000095a andq %r13, %r9 - 0x49, 0xf7, 0xd1, //0x0000095d notq %r9 - //0x00000960 LBB0_69 - 0xc5, 0x4d, 0x74, 0xc1, //0x00000960 vpcmpeqb %ymm1, %ymm6, %ymm8 - 0xc4, 0x41, 0x7d, 0xd7, 0xe8, //0x00000964 vpmovmskb %ymm8, %r13d - 0x49, 0xc1, 0xe5, 0x20, //0x00000969 shlq $32, %r13 - 0xc5, 0x45, 0x74, 0xc1, //0x0000096d vpcmpeqb %ymm1, %ymm7, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xd8, //0x00000971 vpmovmskb %ymm8, %ebx - 0x4c, 0x09, 0xeb, //0x00000976 orq %r13, %rbx - 0x4c, 0x21, 0xcb, //0x00000979 andq %r9, %rbx - 0xc4, 0xe1, 0xf9, 0x6e, 0xeb, //0x0000097c vmovq %rbx, %xmm5 - 0xc4, 0xe3, 0x51, 0x44, 0xea, 0x00, //0x00000981 vpclmulqdq $0, %xmm2, %xmm5, %xmm5 - 0xc4, 0xc1, 0xf9, 0x7e, 0xed, //0x00000987 vmovq %xmm5, %r13 - 0x4d, 0x31, 0xdd, //0x0000098c xorq %r11, %r13 - 0xc5, 0xc5, 0x74, 0xeb, //0x0000098f vpcmpeqb %ymm3, %ymm7, %ymm5 - 0xc5, 0x7d, 0xd7, 0xdd, //0x00000993 vpmovmskb %ymm5, %r11d - 0xc5, 0xcd, 0x74, 0xeb, //0x00000997 vpcmpeqb %ymm3, %ymm6, %ymm5 - 0xc5, 0xfd, 0xd7, 0xdd, //0x0000099b vpmovmskb %ymm5, %ebx - 0x48, 0xc1, 0xe3, 0x20, //0x0000099f shlq $32, %rbx - 0x49, 0x09, 0xdb, //0x000009a3 orq %rbx, %r11 - 0x4d, 0x89, 0xe9, //0x000009a6 movq %r13, %r9 - 0x49, 0xf7, 0xd1, //0x000009a9 notq %r9 - 0x4d, 0x21, 0xcb, //0x000009ac andq %r9, %r11 - 0xc5, 0xc5, 0x74, 0xec, //0x000009af vpcmpeqb %ymm4, %ymm7, %ymm5 - 0xc5, 0xfd, 0xd7, 0xdd, //0x000009b3 vpmovmskb %ymm5, %ebx - 0xc5, 0xcd, 0x74, 0xec, //0x000009b7 vpcmpeqb %ymm4, %ymm6, %ymm5 - 0xc5, 0x7d, 0xd7, 0xd5, //0x000009bb vpmovmskb %ymm5, %r10d - 0x49, 0xc1, 0xe2, 0x20, //0x000009bf shlq $32, %r10 - 0x4c, 0x09, 0xd3, //0x000009c3 orq %r10, %rbx - 0x4c, 0x21, 0xcb, //0x000009c6 andq %r9, %rbx - 0x0f, 0x84, 0xe1, 0xfe, 0xff, 0xff, //0x000009c9 je LBB0_73 - 0x90, //0x000009cf .p2align 4, 0x90 - //0x000009d0 LBB0_71 - 0x4c, 0x8d, 0x4b, 0xff, //0x000009d0 leaq $-1(%rbx), %r9 - 0x4c, 0x89, 0xca, //0x000009d4 movq %r9, %rdx - 0x4c, 0x21, 0xda, //0x000009d7 andq %r11, %rdx - 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x000009da popcntq %rdx, %rdx - 0x4c, 0x01, 0xfa, //0x000009df addq %r15, %rdx - 0x4c, 0x39, 0xc2, //0x000009e2 cmpq %r8, %rdx - 0x0f, 0x86, 0x3e, 0x01, 0x00, 0x00, //0x000009e5 jbe LBB0_45 - 0x49, 0x83, 0xc0, 0x01, //0x000009eb addq $1, %r8 - 0x4c, 0x21, 0xcb, //0x000009ef andq %r9, %rbx - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x000009f2 jne LBB0_71 - 0xe9, 0xb3, 0xfe, 0xff, 0xff, //0x000009f8 jmp LBB0_73 - //0x000009fd LBB0_74 - 0x48, 0x85, 0xdb, //0x000009fd testq %rbx, %rbx - 0x0f, 0x8e, 0x20, 0x02, 0x00, 0x00, //0x00000a00 jle LBB0_49 - 0xc5, 0x7c, 0x11, 0x4c, 0x24, 0x40, //0x00000a06 vmovups %ymm9, $64(%rsp) - 0xc5, 0x7c, 0x11, 0x4c, 0x24, 0x20, //0x00000a0c vmovups %ymm9, $32(%rsp) - 0x44, 0x89, 0xf2, //0x00000a12 movl %r14d, %edx - 0x81, 0xe2, 0xff, 0x0f, 0x00, 0x00, //0x00000a15 andl $4095, %edx - 0x81, 0xfa, 0xc1, 0x0f, 0x00, 0x00, //0x00000a1b cmpl $4033, %edx - 0x0f, 0x82, 0xb4, 0xfe, 0xff, 0xff, //0x00000a21 jb LBB0_66 - 0x48, 0x83, 0x7c, 0x24, 0x18, 0x20, //0x00000a27 cmpq $32, $24(%rsp) - 0x0f, 0x82, 0x22, 0x00, 0x00, 0x00, //0x00000a2d jb LBB0_77 - 0xc4, 0xc1, 0x7c, 0x10, 0x2e, //0x00000a33 vmovups (%r14), %ymm5 - 0xc5, 0xfc, 0x11, 0x6c, 0x24, 0x20, //0x00000a38 vmovups %ymm5, $32(%rsp) - 0x49, 0x83, 0xc6, 0x20, //0x00000a3e addq $32, %r14 - 0x48, 0x8b, 0x54, 0x24, 0x18, //0x00000a42 movq $24(%rsp), %rdx - 0x48, 0x8d, 0x5a, 0xe0, //0x00000a47 leaq $-32(%rdx), %rbx - 0x4c, 0x8d, 0x4c, 0x24, 0x40, //0x00000a4b leaq $64(%rsp), %r9 - 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00000a50 jmp LBB0_79 - //0x00000a55 LBB0_77 - 0x4c, 0x8d, 0x4c, 0x24, 0x20, //0x00000a55 leaq $32(%rsp), %r9 - 0x48, 0x8b, 0x5c, 0x24, 0x18, //0x00000a5a movq $24(%rsp), %rbx - //0x00000a5f LBB0_79 - 0x48, 0x83, 0xfb, 0x10, //0x00000a5f cmpq $16, %rbx - 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00000a63 jae LBB0_80 - 0x48, 0x83, 0xfb, 0x08, //0x00000a69 cmpq $8, %rbx - 0x0f, 0x83, 0x4a, 0x00, 0x00, 0x00, //0x00000a6d jae LBB0_82 - //0x00000a73 LBB0_83 - 0x48, 0x83, 0xfb, 0x04, //0x00000a73 cmpq $4, %rbx - 0x0f, 0x8d, 0x5c, 0x00, 0x00, 0x00, //0x00000a77 jge LBB0_84 - //0x00000a7d LBB0_85 - 0x48, 0x83, 0xfb, 0x02, //0x00000a7d cmpq $2, %rbx - 0x0f, 0x83, 0x6e, 0x00, 0x00, 0x00, //0x00000a81 jae LBB0_86 - //0x00000a87 LBB0_87 - 0x4c, 0x89, 0xf2, //0x00000a87 movq %r14, %rdx - 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x00000a8a leaq $32(%rsp), %r14 - 0x48, 0x85, 0xdb, //0x00000a8f testq %rbx, %rbx - 0x0f, 0x85, 0x82, 0x00, 0x00, 0x00, //0x00000a92 jne LBB0_88 - 0xe9, 0x3e, 0xfe, 0xff, 0xff, //0x00000a98 jmp LBB0_66 - //0x00000a9d LBB0_80 - 0xc4, 0xc1, 0x78, 0x10, 0x2e, //0x00000a9d vmovups (%r14), %xmm5 - 0xc4, 0xc1, 0x78, 0x11, 0x29, //0x00000aa2 vmovups %xmm5, (%r9) - 0x49, 0x83, 0xc6, 0x10, //0x00000aa7 addq $16, %r14 - 0x49, 0x83, 0xc1, 0x10, //0x00000aab addq $16, %r9 - 0x48, 0x83, 0xc3, 0xf0, //0x00000aaf addq $-16, %rbx - 0x48, 0x83, 0xfb, 0x08, //0x00000ab3 cmpq $8, %rbx - 0x0f, 0x82, 0xb6, 0xff, 0xff, 0xff, //0x00000ab7 jb LBB0_83 - //0x00000abd LBB0_82 - 0x49, 0x8b, 0x16, //0x00000abd movq (%r14), %rdx - 0x49, 0x89, 0x11, //0x00000ac0 movq %rdx, (%r9) - 0x49, 0x83, 0xc6, 0x08, //0x00000ac3 addq $8, %r14 - 0x49, 0x83, 0xc1, 0x08, //0x00000ac7 addq $8, %r9 - 0x48, 0x83, 0xc3, 0xf8, //0x00000acb addq $-8, %rbx - 0x48, 0x83, 0xfb, 0x04, //0x00000acf cmpq $4, %rbx - 0x0f, 0x8c, 0xa4, 0xff, 0xff, 0xff, //0x00000ad3 jl LBB0_85 - //0x00000ad9 LBB0_84 - 0x41, 0x8b, 0x16, //0x00000ad9 movl (%r14), %edx - 0x41, 0x89, 0x11, //0x00000adc movl %edx, (%r9) - 0x49, 0x83, 0xc6, 0x04, //0x00000adf addq $4, %r14 - 0x49, 0x83, 0xc1, 0x04, //0x00000ae3 addq $4, %r9 - 0x48, 0x83, 0xc3, 0xfc, //0x00000ae7 addq $-4, %rbx - 0x48, 0x83, 0xfb, 0x02, //0x00000aeb cmpq $2, %rbx - 0x0f, 0x82, 0x92, 0xff, 0xff, 0xff, //0x00000aef jb LBB0_87 - //0x00000af5 LBB0_86 - 0x41, 0x0f, 0xb7, 0x16, //0x00000af5 movzwl (%r14), %edx - 0x66, 0x41, 0x89, 0x11, //0x00000af9 movw %dx, (%r9) - 0x49, 0x83, 0xc6, 0x02, //0x00000afd addq $2, %r14 - 0x49, 0x83, 0xc1, 0x02, //0x00000b01 addq $2, %r9 - 0x48, 0x83, 0xc3, 0xfe, //0x00000b05 addq $-2, %rbx - 0x4c, 0x89, 0xf2, //0x00000b09 movq %r14, %rdx - 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x00000b0c leaq $32(%rsp), %r14 - 0x48, 0x85, 0xdb, //0x00000b11 testq %rbx, %rbx - 0x0f, 0x84, 0xc1, 0xfd, 0xff, 0xff, //0x00000b14 je LBB0_66 - //0x00000b1a LBB0_88 - 0x8a, 0x12, //0x00000b1a movb (%rdx), %dl - 0x41, 0x88, 0x11, //0x00000b1c movb %dl, (%r9) - 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x00000b1f leaq $32(%rsp), %r14 - 0xe9, 0xb2, 0xfd, 0xff, 0xff, //0x00000b24 jmp LBB0_66 - //0x00000b29 LBB0_45 - 0x48, 0x8b, 0x47, 0x08, //0x00000b29 movq $8(%rdi), %rax - 0x48, 0x0f, 0xbc, 0xd3, //0x00000b2d bsfq %rbx, %rdx - 0x48, 0x2b, 0x54, 0x24, 0x18, //0x00000b31 subq $24(%rsp), %rdx - 0x48, 0x01, 0xd0, //0x00000b36 addq %rdx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00000b39 addq $1, %rax - 0x48, 0x89, 0x06, //0x00000b3d movq %rax, (%rsi) - 0x48, 0x8b, 0x57, 0x08, //0x00000b40 movq $8(%rdi), %rdx - 0x48, 0x39, 0xd0, //0x00000b44 cmpq %rdx, %rax - 0x48, 0x0f, 0x47, 0xc2, //0x00000b47 cmovaq %rdx, %rax - 0x48, 0x89, 0x06, //0x00000b4b movq %rax, (%rsi) - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000b4e movq $-1, %rax - 0x48, 0x0f, 0x47, 0xc8, //0x00000b55 cmovaq %rax, %rcx - 0xe9, 0x17, 0xf9, 0xff, 0xff, //0x00000b59 jmp LBB0_137 - //0x00000b5e LBB0_97 - 0x41, 0x0f, 0xbc, 0xc2, //0x00000b5e bsfl %r10d, %eax - 0x48, 0x01, 0xc8, //0x00000b62 addq %rcx, %rax - 0x4c, 0x01, 0xd8, //0x00000b65 addq %r11, %rax - 0x48, 0x83, 0xc0, 0x02, //0x00000b68 addq $2, %rax - 0x48, 0x89, 0x06, //0x00000b6c movq %rax, (%rsi) - 0xe9, 0x01, 0xf9, 0xff, 0xff, //0x00000b6f jmp LBB0_137 - //0x00000b74 LBB0_108 - 0x48, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x00000b74 movq $-2, %rdi - 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00000b7b movl $2, %eax - //0x00000b80 LBB0_109 - 0x48, 0x01, 0xc2, //0x00000b80 addq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000b83 movq $-1, %rax - 0x49, 0x01, 0xfb, //0x00000b8a addq %rdi, %r11 - 0x0f, 0x8e, 0xe5, 0xf8, 0xff, 0xff, //0x00000b8d jle LBB0_138 - //0x00000b93 LBB0_105 - 0x0f, 0xb6, 0x02, //0x00000b93 movzbl (%rdx), %eax - 0x3c, 0x5c, //0x00000b96 cmpb $92, %al - 0x0f, 0x84, 0xd6, 0xff, 0xff, 0xff, //0x00000b98 je LBB0_108 - 0x3c, 0x22, //0x00000b9e cmpb $34, %al - 0x0f, 0x84, 0x3e, 0x00, 0x00, 0x00, //0x00000ba0 je LBB0_135 - 0x48, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00000ba6 movq $-1, %rdi - 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00000bad movl $1, %eax - 0xe9, 0xc9, 0xff, 0xff, 0xff, //0x00000bb2 jmp LBB0_109 - //0x00000bb7 LBB0_117 - 0x66, 0x0f, 0xbc, 0xc3, //0x00000bb7 bsfw %bx, %ax - 0x0f, 0xb7, 0xc0, //0x00000bbb movzwl %ax, %eax - 0x48, 0x29, 0xf8, //0x00000bbe subq %rdi, %rax - 0x48, 0x89, 0x06, //0x00000bc1 movq %rax, (%rsi) - 0xe9, 0xac, 0xf8, 0xff, 0xff, //0x00000bc4 jmp LBB0_137 - //0x00000bc9 LBB0_27 - 0x4c, 0x29, 0xf1, //0x00000bc9 subq %r14, %rcx - 0x4c, 0x01, 0xd1, //0x00000bcc addq %r10, %rcx - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000bcf movq $-1, %rax - 0x48, 0x39, 0xd9, //0x00000bd6 cmpq %rbx, %rcx - 0x0f, 0x82, 0x41, 0xf7, 0xff, 0xff, //0x00000bd9 jb LBB0_35 - 0xe9, 0x94, 0xf8, 0xff, 0xff, //0x00000bdf jmp LBB0_138 - //0x00000be4 LBB0_135 - 0x4c, 0x29, 0xf2, //0x00000be4 subq %r14, %rdx - 0x48, 0x83, 0xc2, 0x01, //0x00000be7 addq $1, %rdx - 0xe9, 0x82, 0xf8, 0xff, 0xff, //0x00000beb jmp LBB0_136 - //0x00000bf0 LBB0_20 - 0x4c, 0x01, 0xf1, //0x00000bf0 addq %r14, %rcx - 0x48, 0x85, 0xd2, //0x00000bf3 testq %rdx, %rdx - 0x0f, 0x85, 0xac, 0xf6, 0xff, 0xff, //0x00000bf6 jne LBB0_24 - 0xe9, 0xe0, 0xf6, 0xff, 0xff, //0x00000bfc jmp LBB0_33 - //0x00000c01 LBB0_111 - 0x4c, 0x01, 0xf2, //0x00000c01 addq %r14, %rdx - 0x48, 0x83, 0xf8, 0x10, //0x00000c04 cmpq $16, %rax - 0x0f, 0x83, 0xc4, 0xf7, 0xff, 0xff, //0x00000c08 jae LBB0_115 - 0xe9, 0x13, 0xf8, 0xff, 0xff, //0x00000c0e jmp LBB0_122 - //0x00000c13 LBB0_127 - 0x4c, 0x29, 0xf2, //0x00000c13 subq %r14, %rdx - 0x48, 0x01, 0xfa, //0x00000c16 addq %rdi, %rdx - 0xe9, 0x54, 0xf8, 0xff, 0xff, //0x00000c19 jmp LBB0_136 - //0x00000c1e LBB0_90 - 0x4c, 0x01, 0xf2, //0x00000c1e addq %r14, %rdx - 0xe9, 0x68, 0xf9, 0xff, 0xff, //0x00000c21 jmp LBB0_104 - //0x00000c26 LBB0_49 - 0x48, 0x8b, 0x4f, 0x08, //0x00000c26 movq $8(%rdi), %rcx - 0x48, 0x89, 0x0e, //0x00000c2a movq %rcx, (%rsi) - 0xe9, 0x46, 0xf8, 0xff, 0xff, //0x00000c2d jmp LBB0_138 - //0x00000c32 LBB0_102 - 0x49, 0x8d, 0x50, 0xff, //0x00000c32 leaq $-1(%r8), %rdx - 0x4c, 0x39, 0xda, //0x00000c36 cmpq %r11, %rdx - 0x0f, 0x84, 0x39, 0xf8, 0xff, 0xff, //0x00000c39 je LBB0_138 - 0x4b, 0x8d, 0x14, 0x0b, //0x00000c3f leaq (%r11,%r9), %rdx - 0x48, 0x83, 0xc2, 0x02, //0x00000c43 addq $2, %rdx - 0x4d, 0x29, 0xd8, //0x00000c47 subq %r11, %r8 - 0x49, 0x83, 0xc0, 0xfe, //0x00000c4a addq $-2, %r8 - 0x4d, 0x89, 0xc3, //0x00000c4e movq %r8, %r11 - 0xe9, 0x38, 0xf9, 0xff, 0xff, //0x00000c51 jmp LBB0_104 - 0x90, 0x90, //0x00000c56 .p2align 2, 0x90 - // // .set L0_0_set_138, LBB0_138-LJTI0_0 - // // .set L0_0_set_134, LBB0_134-LJTI0_0 - // // .set L0_0_set_89, LBB0_89-LJTI0_0 - // // .set L0_0_set_110, LBB0_110-LJTI0_0 - // // .set L0_0_set_37, LBB0_37-LJTI0_0 - // // .set L0_0_set_133, LBB0_133-LJTI0_0 - // // .set L0_0_set_131, LBB0_131-LJTI0_0 - // // .set L0_0_set_64, LBB0_64-LJTI0_0 - //0x00000c58 LJTI0_0 - 0x20, 0xf8, 0xff, 0xff, //0x00000c58 .long L0_0_set_138 - 0x45, 0xf8, 0xff, 0xff, //0x00000c5c .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c60 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c64 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c68 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c6c .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c70 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c74 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c78 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c7c .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c80 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c84 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c88 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c8c .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c90 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c94 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c98 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000c9c .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000ca0 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000ca4 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000ca8 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cac .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cb0 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cb4 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cb8 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cbc .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cc0 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cc4 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cc8 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000ccc .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cd0 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cd4 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cd8 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cdc .long L0_0_set_134 - 0x54, 0xf8, 0xff, 0xff, //0x00000ce0 .long L0_0_set_89 - 0x45, 0xf8, 0xff, 0xff, //0x00000ce4 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000ce8 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cec .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cf0 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cf4 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cf8 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000cfc .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d00 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d04 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d08 .long L0_0_set_134 - 0xf4, 0xf6, 0xff, 0xff, //0x00000d0c .long L0_0_set_110 - 0x45, 0xf8, 0xff, 0xff, //0x00000d10 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d14 .long L0_0_set_134 - 0xf4, 0xf6, 0xff, 0xff, //0x00000d18 .long L0_0_set_110 - 0xf4, 0xf6, 0xff, 0xff, //0x00000d1c .long L0_0_set_110 - 0xf4, 0xf6, 0xff, 0xff, //0x00000d20 .long L0_0_set_110 - 0xf4, 0xf6, 0xff, 0xff, //0x00000d24 .long L0_0_set_110 - 0xf4, 0xf6, 0xff, 0xff, //0x00000d28 .long L0_0_set_110 - 0xf4, 0xf6, 0xff, 0xff, //0x00000d2c .long L0_0_set_110 - 0xf4, 0xf6, 0xff, 0xff, //0x00000d30 .long L0_0_set_110 - 0xf4, 0xf6, 0xff, 0xff, //0x00000d34 .long L0_0_set_110 - 0xf4, 0xf6, 0xff, 0xff, //0x00000d38 .long L0_0_set_110 - 0xf4, 0xf6, 0xff, 0xff, //0x00000d3c .long L0_0_set_110 - 0x45, 0xf8, 0xff, 0xff, //0x00000d40 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d44 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d48 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d4c .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d50 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d54 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d58 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d5c .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d60 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d64 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d68 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d6c .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d70 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d74 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d78 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d7c .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d80 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d84 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d88 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d8c .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d90 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d94 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d98 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000d9c .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000da0 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000da4 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000da8 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000dac .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000db0 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000db4 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000db8 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000dbc .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000dc0 .long L0_0_set_134 - 0x44, 0xf9, 0xff, 0xff, //0x00000dc4 .long L0_0_set_37 - 0x45, 0xf8, 0xff, 0xff, //0x00000dc8 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000dcc .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000dd0 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000dd4 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000dd8 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000ddc .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000de0 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000de4 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000de8 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000dec .long L0_0_set_134 - 0x01, 0xfc, 0xff, 0xff, //0x00000df0 .long L0_0_set_133 - 0x45, 0xf8, 0xff, 0xff, //0x00000df4 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000df8 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000dfc .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000e00 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000e04 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000e08 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000e0c .long L0_0_set_134 - 0x32, 0xf8, 0xff, 0xff, //0x00000e10 .long L0_0_set_131 - 0x45, 0xf8, 0xff, 0xff, //0x00000e14 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000e18 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000e1c .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000e20 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000e24 .long L0_0_set_134 - 0x32, 0xf8, 0xff, 0xff, //0x00000e28 .long L0_0_set_131 - 0x45, 0xf8, 0xff, 0xff, //0x00000e2c .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000e30 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000e34 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000e38 .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000e3c .long L0_0_set_134 - 0x45, 0xf8, 0xff, 0xff, //0x00000e40 .long L0_0_set_134 - 0x14, 0xfc, 0xff, 0xff, //0x00000e44 .long L0_0_set_64 - //0x00000e48 .p2align 2, 0x00 - //0x00000e48 _MASK_USE_NUMBER - 0x02, 0x00, 0x00, 0x00, //0x00000e48 .long 2 + 0x90, 0x90, //0x0000053e .p2align 4, 0x90 + //0x00000540 LBB0_60 + 0xc4, 0x81, 0x7e, 0x6f, 0x54, 0x19, 0x01, //0x00000540 vmovdqu $1(%r9,%r11), %ymm2 + 0xc5, 0xed, 0x74, 0xd8, //0x00000547 vpcmpeqb %ymm0, %ymm2, %ymm3 + 0xc5, 0x7d, 0xd7, 0xd3, //0x0000054b vpmovmskb %ymm3, %r10d + 0xc5, 0xed, 0x74, 0xd1, //0x0000054f vpcmpeqb %ymm1, %ymm2, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x00000553 vpmovmskb %ymm2, %edi + 0x85, 0xff, //0x00000557 testl %edi, %edi + 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x00000559 jne LBB0_63 + 0x4d, 0x85, 0xff, //0x0000055f testq %r15, %r15 + 0x0f, 0x85, 0x08, 0x00, 0x00, 0x00, //0x00000562 jne LBB0_63 + 0x45, 0x31, 0xff, //0x00000568 xorl %r15d, %r15d + 0xe9, 0x34, 0x00, 0x00, 0x00, //0x0000056b jmp LBB0_64 + //0x00000570 .p2align 4, 0x90 + //0x00000570 LBB0_63 + 0x44, 0x89, 0xfa, //0x00000570 movl %r15d, %edx + 0xf7, 0xd2, //0x00000573 notl %edx + 0x21, 0xfa, //0x00000575 andl %edi, %edx + 0x44, 0x8d, 0x24, 0x12, //0x00000577 leal (%rdx,%rdx), %r12d + 0x45, 0x09, 0xfc, //0x0000057b orl %r15d, %r12d + 0x44, 0x89, 0xe3, //0x0000057e movl %r12d, %ebx + 0xf7, 0xd3, //0x00000581 notl %ebx + 0x21, 0xfb, //0x00000583 andl %edi, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000585 andl $-1431655766, %ebx + 0x45, 0x31, 0xff, //0x0000058b xorl %r15d, %r15d + 0x01, 0xd3, //0x0000058e addl %edx, %ebx + 0x41, 0x0f, 0x92, 0xc7, //0x00000590 setb %r15b + 0x01, 0xdb, //0x00000594 addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00000596 xorl $1431655765, %ebx + 0x44, 0x21, 0xe3, //0x0000059c andl %r12d, %ebx + 0xf7, 0xd3, //0x0000059f notl %ebx + 0x41, 0x21, 0xda, //0x000005a1 andl %ebx, %r10d + //0x000005a4 LBB0_64 + 0x4d, 0x85, 0xd2, //0x000005a4 testq %r10, %r10 + 0x0f, 0x85, 0x17, 0x06, 0x00, 0x00, //0x000005a7 jne LBB0_122 + 0x49, 0x83, 0xc3, 0x20, //0x000005ad addq $32, %r11 + 0x4b, 0x8d, 0x14, 0x28, //0x000005b1 leaq (%r8,%r13), %rdx + 0x48, 0x83, 0xc2, 0xe0, //0x000005b5 addq $-32, %rdx + 0x49, 0x83, 0xc5, 0xe0, //0x000005b9 addq $-32, %r13 + 0x48, 0x83, 0xfa, 0x3f, //0x000005bd cmpq $63, %rdx + 0x0f, 0x8f, 0x79, 0xff, 0xff, 0xff, //0x000005c1 jg LBB0_60 + 0x4d, 0x85, 0xff, //0x000005c7 testq %r15, %r15 + 0x0f, 0x85, 0x46, 0x07, 0x00, 0x00, //0x000005ca jne LBB0_139 + 0x4f, 0x8d, 0x3c, 0x0b, //0x000005d0 leaq (%r11,%r9), %r15 + 0x49, 0x83, 0xc7, 0x01, //0x000005d4 addq $1, %r15 + 0x49, 0xf7, 0xd3, //0x000005d8 notq %r11 + 0x4d, 0x01, 0xc3, //0x000005db addq %r8, %r11 + //0x000005de LBB0_68 + 0x4d, 0x85, 0xdb, //0x000005de testq %r11, %r11 + 0x0f, 0x8f, 0x22, 0x06, 0x00, 0x00, //0x000005e1 jg LBB0_125 + 0xe9, 0xec, 0x05, 0x00, 0x00, //0x000005e7 jmp LBB0_96 + //0x000005ec LBB0_69 + 0x48, 0x8b, 0x57, 0x08, //0x000005ec movq $8(%rdi), %rdx + 0x4c, 0x29, 0xfa, //0x000005f0 subq %r15, %rdx + 0x4d, 0x01, 0xfe, //0x000005f3 addq %r15, %r14 + 0x45, 0x31, 0xdb, //0x000005f6 xorl %r11d, %r11d + 0xc5, 0xfe, 0x6f, 0x05, 0x9f, 0xfa, 0xff, 0xff, //0x000005f9 vmovdqu $-1377(%rip), %ymm0 /* LCPI0_8+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x0d, 0x77, 0xfa, 0xff, 0xff, //0x00000601 vmovdqu $-1417(%rip), %ymm1 /* LCPI0_7+0(%rip) */ + 0xc5, 0xe9, 0x76, 0xd2, //0x00000609 vpcmpeqd %xmm2, %xmm2, %xmm2 + 0xc5, 0xfe, 0x6f, 0x1d, 0xeb, 0xfa, 0xff, 0xff, //0x0000060d vmovdqu $-1301(%rip), %ymm3 /* LCPI0_11+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x43, 0xfa, 0xff, 0xff, //0x00000615 vmovdqu $-1469(%rip), %ymm4 /* LCPI0_3+0(%rip) */ + 0xc4, 0x41, 0x30, 0x57, 0xc9, //0x0000061d vxorps %xmm9, %xmm9, %xmm9 + 0x45, 0x31, 0xe4, //0x00000622 xorl %r12d, %r12d + 0x45, 0x31, 0xff, //0x00000625 xorl %r15d, %r15d + 0x45, 0x31, 0xc0, //0x00000628 xorl %r8d, %r8d + 0x48, 0x83, 0xfa, 0x40, //0x0000062b cmpq $64, %rdx + 0x48, 0x89, 0x54, 0x24, 0x18, //0x0000062f movq %rdx, $24(%rsp) + 0x0f, 0x8c, 0x49, 0x01, 0x00, 0x00, //0x00000634 jl LBB0_78 + //0x0000063a LBB0_72 + 0xc4, 0xc1, 0x7e, 0x6f, 0x3e, //0x0000063a vmovdqu (%r14), %ymm7 + 0xc4, 0xc1, 0x7e, 0x6f, 0x76, 0x20, //0x0000063f vmovdqu $32(%r14), %ymm6 + 0xc5, 0x45, 0x74, 0xc0, //0x00000645 vpcmpeqb %ymm0, %ymm7, %ymm8 + 0xc4, 0x41, 0x7d, 0xd7, 0xc8, //0x00000649 vpmovmskb %ymm8, %r9d + 0xc5, 0x4d, 0x74, 0xc0, //0x0000064e vpcmpeqb %ymm0, %ymm6, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xd0, //0x00000652 vpmovmskb %ymm8, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x00000657 shlq $32, %rdx + 0x49, 0x09, 0xd1, //0x0000065b orq %rdx, %r9 + 0x4c, 0x89, 0xca, //0x0000065e movq %r9, %rdx + 0x4c, 0x09, 0xe2, //0x00000661 orq %r12, %rdx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00000664 jne LBB0_74 + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000066a movq $-1, %r9 + 0x45, 0x31, 0xe4, //0x00000671 xorl %r12d, %r12d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00000674 jmp LBB0_75 + //0x00000679 LBB0_74 + 0x4c, 0x89, 0xe2, //0x00000679 movq %r12, %rdx + 0x48, 0xf7, 0xd2, //0x0000067c notq %rdx + 0x4c, 0x21, 0xca, //0x0000067f andq %r9, %rdx + 0x4c, 0x8d, 0x2c, 0x12, //0x00000682 leaq (%rdx,%rdx), %r13 + 0x4d, 0x09, 0xe5, //0x00000686 orq %r12, %r13 + 0x4d, 0x89, 0xec, //0x00000689 movq %r13, %r12 + 0x49, 0xf7, 0xd4, //0x0000068c notq %r12 + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000068f movabsq $-6148914691236517206, %rbx + 0x49, 0x21, 0xd9, //0x00000699 andq %rbx, %r9 + 0x4d, 0x21, 0xe1, //0x0000069c andq %r12, %r9 + 0x45, 0x31, 0xe4, //0x0000069f xorl %r12d, %r12d + 0x49, 0x01, 0xd1, //0x000006a2 addq %rdx, %r9 + 0x41, 0x0f, 0x92, 0xc4, //0x000006a5 setb %r12b + 0x4d, 0x01, 0xc9, //0x000006a9 addq %r9, %r9 + 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000006ac movabsq $6148914691236517205, %rdx + 0x49, 0x31, 0xd1, //0x000006b6 xorq %rdx, %r9 + 0x4d, 0x21, 0xe9, //0x000006b9 andq %r13, %r9 + 0x49, 0xf7, 0xd1, //0x000006bc notq %r9 + //0x000006bf LBB0_75 + 0xc5, 0x4d, 0x74, 0xc1, //0x000006bf vpcmpeqb %ymm1, %ymm6, %ymm8 + 0xc4, 0x41, 0x7d, 0xd7, 0xe8, //0x000006c3 vpmovmskb %ymm8, %r13d + 0x49, 0xc1, 0xe5, 0x20, //0x000006c8 shlq $32, %r13 + 0xc5, 0x45, 0x74, 0xc1, //0x000006cc vpcmpeqb %ymm1, %ymm7, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xd0, //0x000006d0 vpmovmskb %ymm8, %edx + 0x4c, 0x09, 0xea, //0x000006d5 orq %r13, %rdx + 0x4c, 0x21, 0xca, //0x000006d8 andq %r9, %rdx + 0xc4, 0xe1, 0xf9, 0x6e, 0xea, //0x000006db vmovq %rdx, %xmm5 + 0xc4, 0xe3, 0x51, 0x44, 0xea, 0x00, //0x000006e0 vpclmulqdq $0, %xmm2, %xmm5, %xmm5 + 0xc4, 0xc1, 0xf9, 0x7e, 0xed, //0x000006e6 vmovq %xmm5, %r13 + 0x4d, 0x31, 0xdd, //0x000006eb xorq %r11, %r13 + 0xc5, 0xc5, 0x74, 0xeb, //0x000006ee vpcmpeqb %ymm3, %ymm7, %ymm5 + 0xc5, 0x7d, 0xd7, 0xdd, //0x000006f2 vpmovmskb %ymm5, %r11d + 0xc5, 0xcd, 0x74, 0xeb, //0x000006f6 vpcmpeqb %ymm3, %ymm6, %ymm5 + 0xc5, 0xfd, 0xd7, 0xd5, //0x000006fa vpmovmskb %ymm5, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x000006fe shlq $32, %rdx + 0x49, 0x09, 0xd3, //0x00000702 orq %rdx, %r11 + 0x4d, 0x89, 0xe9, //0x00000705 movq %r13, %r9 + 0x49, 0xf7, 0xd1, //0x00000708 notq %r9 + 0x4d, 0x21, 0xcb, //0x0000070b andq %r9, %r11 + 0xc5, 0xc5, 0x74, 0xec, //0x0000070e vpcmpeqb %ymm4, %ymm7, %ymm5 + 0xc5, 0xfd, 0xd7, 0xd5, //0x00000712 vpmovmskb %ymm5, %edx + 0xc5, 0xcd, 0x74, 0xec, //0x00000716 vpcmpeqb %ymm4, %ymm6, %ymm5 + 0xc5, 0x7d, 0xd7, 0xd5, //0x0000071a vpmovmskb %ymm5, %r10d + 0x49, 0xc1, 0xe2, 0x20, //0x0000071e shlq $32, %r10 + 0x4c, 0x09, 0xd2, //0x00000722 orq %r10, %rdx + 0x4c, 0x21, 0xca, //0x00000725 andq %r9, %rdx + 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x00000728 je LBB0_70 + 0x90, 0x90, //0x0000072e .p2align 4, 0x90 + //0x00000730 LBB0_76 + 0x4c, 0x8d, 0x4a, 0xff, //0x00000730 leaq $-1(%rdx), %r9 + 0x4c, 0x89, 0xcb, //0x00000734 movq %r9, %rbx + 0x4c, 0x21, 0xdb, //0x00000737 andq %r11, %rbx + 0xf3, 0x48, 0x0f, 0xb8, 0xdb, //0x0000073a popcntq %rbx, %rbx + 0x4c, 0x01, 0xfb, //0x0000073f addq %r15, %rbx + 0x4c, 0x39, 0xc3, //0x00000742 cmpq %r8, %rbx + 0x0f, 0x86, 0x44, 0x04, 0x00, 0x00, //0x00000745 jbe LBB0_121 + 0x49, 0x83, 0xc0, 0x01, //0x0000074b addq $1, %r8 + 0x4c, 0x21, 0xca, //0x0000074f andq %r9, %rdx + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00000752 jne LBB0_76 + //0x00000758 LBB0_70 + 0x49, 0xc1, 0xfd, 0x3f, //0x00000758 sarq $63, %r13 + 0xf3, 0x49, 0x0f, 0xb8, 0xd3, //0x0000075c popcntq %r11, %rdx + 0x49, 0x01, 0xd7, //0x00000761 addq %rdx, %r15 + 0x49, 0x83, 0xc6, 0x40, //0x00000764 addq $64, %r14 + 0x48, 0x8b, 0x54, 0x24, 0x18, //0x00000768 movq $24(%rsp), %rdx + 0x48, 0x83, 0xc2, 0xc0, //0x0000076d addq $-64, %rdx + 0x4d, 0x89, 0xeb, //0x00000771 movq %r13, %r11 + 0x48, 0x83, 0xfa, 0x40, //0x00000774 cmpq $64, %rdx + 0x48, 0x89, 0x54, 0x24, 0x18, //0x00000778 movq %rdx, $24(%rsp) + 0x0f, 0x8d, 0xb7, 0xfe, 0xff, 0xff, //0x0000077d jge LBB0_72 + //0x00000783 LBB0_78 + 0x48, 0x85, 0xd2, //0x00000783 testq %rdx, %rdx + 0x0f, 0x8e, 0x7e, 0x05, 0x00, 0x00, //0x00000786 jle LBB0_138 + 0xc5, 0x7c, 0x11, 0x4c, 0x24, 0x40, //0x0000078c vmovups %ymm9, $64(%rsp) + 0xc5, 0x7c, 0x11, 0x4c, 0x24, 0x20, //0x00000792 vmovups %ymm9, $32(%rsp) + 0x44, 0x89, 0xf2, //0x00000798 movl %r14d, %edx + 0x81, 0xe2, 0xff, 0x0f, 0x00, 0x00, //0x0000079b andl $4095, %edx + 0x81, 0xfa, 0xc1, 0x0f, 0x00, 0x00, //0x000007a1 cmpl $4033, %edx + 0x0f, 0x82, 0x8d, 0xfe, 0xff, 0xff, //0x000007a7 jb LBB0_72 + 0x48, 0x83, 0x7c, 0x24, 0x18, 0x20, //0x000007ad cmpq $32, $24(%rsp) + 0x0f, 0x82, 0x22, 0x00, 0x00, 0x00, //0x000007b3 jb LBB0_82 + 0xc4, 0xc1, 0x7e, 0x6f, 0x2e, //0x000007b9 vmovdqu (%r14), %ymm5 + 0xc5, 0xfe, 0x7f, 0x6c, 0x24, 0x20, //0x000007be vmovdqu %ymm5, $32(%rsp) + 0x49, 0x83, 0xc6, 0x20, //0x000007c4 addq $32, %r14 + 0x48, 0x8b, 0x54, 0x24, 0x18, //0x000007c8 movq $24(%rsp), %rdx + 0x48, 0x8d, 0x5a, 0xe0, //0x000007cd leaq $-32(%rdx), %rbx + 0x4c, 0x8d, 0x4c, 0x24, 0x40, //0x000007d1 leaq $64(%rsp), %r9 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x000007d6 jmp LBB0_83 + //0x000007db LBB0_82 + 0x4c, 0x8d, 0x4c, 0x24, 0x20, //0x000007db leaq $32(%rsp), %r9 + 0x48, 0x8b, 0x5c, 0x24, 0x18, //0x000007e0 movq $24(%rsp), %rbx + //0x000007e5 LBB0_83 + 0x48, 0x83, 0xfb, 0x10, //0x000007e5 cmpq $16, %rbx + 0x0f, 0x82, 0x5c, 0x00, 0x00, 0x00, //0x000007e9 jb LBB0_84 + 0xc4, 0xc1, 0x7a, 0x6f, 0x2e, //0x000007ef vmovdqu (%r14), %xmm5 + 0xc4, 0xc1, 0x7a, 0x7f, 0x29, //0x000007f4 vmovdqu %xmm5, (%r9) + 0x49, 0x83, 0xc6, 0x10, //0x000007f9 addq $16, %r14 + 0x49, 0x83, 0xc1, 0x10, //0x000007fd addq $16, %r9 + 0x48, 0x83, 0xc3, 0xf0, //0x00000801 addq $-16, %rbx + 0x48, 0x83, 0xfb, 0x08, //0x00000805 cmpq $8, %rbx + 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x00000809 jae LBB0_89 + //0x0000080f LBB0_85 + 0x48, 0x83, 0xfb, 0x04, //0x0000080f cmpq $4, %rbx + 0x0f, 0x8c, 0x58, 0x00, 0x00, 0x00, //0x00000813 jl LBB0_86 + //0x00000819 LBB0_90 + 0x41, 0x8b, 0x16, //0x00000819 movl (%r14), %edx + 0x41, 0x89, 0x11, //0x0000081c movl %edx, (%r9) + 0x49, 0x83, 0xc6, 0x04, //0x0000081f addq $4, %r14 + 0x49, 0x83, 0xc1, 0x04, //0x00000823 addq $4, %r9 + 0x48, 0x83, 0xc3, 0xfc, //0x00000827 addq $-4, %rbx + 0x48, 0x83, 0xfb, 0x02, //0x0000082b cmpq $2, %rbx + 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x0000082f jae LBB0_91 + //0x00000835 LBB0_87 + 0x4c, 0x89, 0xf2, //0x00000835 movq %r14, %rdx + 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x00000838 leaq $32(%rsp), %r14 + 0x48, 0x85, 0xdb, //0x0000083d testq %rbx, %rbx + 0x0f, 0x85, 0x5a, 0x00, 0x00, 0x00, //0x00000840 jne LBB0_92 + 0xe9, 0xef, 0xfd, 0xff, 0xff, //0x00000846 jmp LBB0_72 + //0x0000084b LBB0_84 + 0x48, 0x83, 0xfb, 0x08, //0x0000084b cmpq $8, %rbx + 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x0000084f jb LBB0_85 + //0x00000855 LBB0_89 + 0x49, 0x8b, 0x16, //0x00000855 movq (%r14), %rdx + 0x49, 0x89, 0x11, //0x00000858 movq %rdx, (%r9) + 0x49, 0x83, 0xc6, 0x08, //0x0000085b addq $8, %r14 + 0x49, 0x83, 0xc1, 0x08, //0x0000085f addq $8, %r9 + 0x48, 0x83, 0xc3, 0xf8, //0x00000863 addq $-8, %rbx + 0x48, 0x83, 0xfb, 0x04, //0x00000867 cmpq $4, %rbx + 0x0f, 0x8d, 0xa8, 0xff, 0xff, 0xff, //0x0000086b jge LBB0_90 + //0x00000871 LBB0_86 + 0x48, 0x83, 0xfb, 0x02, //0x00000871 cmpq $2, %rbx + 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x00000875 jb LBB0_87 + //0x0000087b LBB0_91 + 0x41, 0x0f, 0xb7, 0x16, //0x0000087b movzwl (%r14), %edx + 0x66, 0x41, 0x89, 0x11, //0x0000087f movw %dx, (%r9) + 0x49, 0x83, 0xc6, 0x02, //0x00000883 addq $2, %r14 + 0x49, 0x83, 0xc1, 0x02, //0x00000887 addq $2, %r9 + 0x48, 0x83, 0xc3, 0xfe, //0x0000088b addq $-2, %rbx + 0x4c, 0x89, 0xf2, //0x0000088f movq %r14, %rdx + 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x00000892 leaq $32(%rsp), %r14 + 0x48, 0x85, 0xdb, //0x00000897 testq %rbx, %rbx + 0x0f, 0x84, 0x9a, 0xfd, 0xff, 0xff, //0x0000089a je LBB0_72 + //0x000008a0 LBB0_92 + 0x8a, 0x12, //0x000008a0 movb (%rdx), %dl + 0x41, 0x88, 0x11, //0x000008a2 movb %dl, (%r9) + 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x000008a5 leaq $32(%rsp), %r14 + 0xe9, 0x8b, 0xfd, 0xff, 0xff, //0x000008aa jmp LBB0_72 + //0x000008af LBB0_93 + 0x48, 0x8d, 0x51, 0x05, //0x000008af leaq $5(%rcx), %rdx + 0x48, 0x3b, 0x57, 0x08, //0x000008b3 cmpq $8(%rdi), %rdx + 0x0f, 0x87, 0x1b, 0x03, 0x00, 0x00, //0x000008b7 ja LBB0_96 + //0x000008bd LBB0_94 + 0x48, 0x89, 0x16, //0x000008bd movq %rdx, (%rsi) + 0xe9, 0x10, 0x03, 0x00, 0x00, //0x000008c0 jmp LBB0_95 + //0x000008c5 LBB0_97 + 0x48, 0x8b, 0x57, 0x08, //0x000008c5 movq $8(%rdi), %rdx + 0x4c, 0x29, 0xfa, //0x000008c9 subq %r15, %rdx + 0x4d, 0x01, 0xfe, //0x000008cc addq %r15, %r14 + 0x45, 0x31, 0xdb, //0x000008cf xorl %r11d, %r11d + 0xc5, 0xfe, 0x6f, 0x05, 0xc6, 0xf7, 0xff, 0xff, //0x000008d2 vmovdqu $-2106(%rip), %ymm0 /* LCPI0_8+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x0d, 0x9e, 0xf7, 0xff, 0xff, //0x000008da vmovdqu $-2146(%rip), %ymm1 /* LCPI0_7+0(%rip) */ + 0xc5, 0xe9, 0x76, 0xd2, //0x000008e2 vpcmpeqd %xmm2, %xmm2, %xmm2 + 0xc5, 0xfe, 0x6f, 0x1d, 0xd2, 0xf7, 0xff, 0xff, //0x000008e6 vmovdqu $-2094(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0xea, 0xf7, 0xff, 0xff, //0x000008ee vmovdqu $-2070(%rip), %ymm4 /* LCPI0_10+0(%rip) */ + 0xc4, 0x41, 0x30, 0x57, 0xc9, //0x000008f6 vxorps %xmm9, %xmm9, %xmm9 + 0x45, 0x31, 0xe4, //0x000008fb xorl %r12d, %r12d + 0x45, 0x31, 0xff, //0x000008fe xorl %r15d, %r15d + 0x45, 0x31, 0xc0, //0x00000901 xorl %r8d, %r8d + 0x48, 0x83, 0xfa, 0x40, //0x00000904 cmpq $64, %rdx + 0x48, 0x89, 0x54, 0x24, 0x18, //0x00000908 movq %rdx, $24(%rsp) + 0x0f, 0x8c, 0x50, 0x01, 0x00, 0x00, //0x0000090d jl LBB0_106 + //0x00000913 LBB0_100 + 0xc4, 0xc1, 0x7e, 0x6f, 0x3e, //0x00000913 vmovdqu (%r14), %ymm7 + 0xc4, 0xc1, 0x7e, 0x6f, 0x76, 0x20, //0x00000918 vmovdqu $32(%r14), %ymm6 + 0xc5, 0x45, 0x74, 0xc0, //0x0000091e vpcmpeqb %ymm0, %ymm7, %ymm8 + 0xc4, 0x41, 0x7d, 0xd7, 0xc8, //0x00000922 vpmovmskb %ymm8, %r9d + 0xc5, 0x4d, 0x74, 0xc0, //0x00000927 vpcmpeqb %ymm0, %ymm6, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xd0, //0x0000092b vpmovmskb %ymm8, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x00000930 shlq $32, %rdx + 0x49, 0x09, 0xd1, //0x00000934 orq %rdx, %r9 + 0x4c, 0x89, 0xca, //0x00000937 movq %r9, %rdx + 0x4c, 0x09, 0xe2, //0x0000093a orq %r12, %rdx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x0000093d jne LBB0_102 + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00000943 movq $-1, %r9 + 0x45, 0x31, 0xe4, //0x0000094a xorl %r12d, %r12d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x0000094d jmp LBB0_103 + //0x00000952 LBB0_102 + 0x4c, 0x89, 0xe2, //0x00000952 movq %r12, %rdx + 0x48, 0xf7, 0xd2, //0x00000955 notq %rdx + 0x4c, 0x21, 0xca, //0x00000958 andq %r9, %rdx + 0x4c, 0x8d, 0x2c, 0x12, //0x0000095b leaq (%rdx,%rdx), %r13 + 0x4d, 0x09, 0xe5, //0x0000095f orq %r12, %r13 + 0x4d, 0x89, 0xec, //0x00000962 movq %r13, %r12 + 0x49, 0xf7, 0xd4, //0x00000965 notq %r12 + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000968 movabsq $-6148914691236517206, %rbx + 0x49, 0x21, 0xd9, //0x00000972 andq %rbx, %r9 + 0x4d, 0x21, 0xe1, //0x00000975 andq %r12, %r9 + 0x45, 0x31, 0xe4, //0x00000978 xorl %r12d, %r12d + 0x49, 0x01, 0xd1, //0x0000097b addq %rdx, %r9 + 0x41, 0x0f, 0x92, 0xc4, //0x0000097e setb %r12b + 0x4d, 0x01, 0xc9, //0x00000982 addq %r9, %r9 + 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000985 movabsq $6148914691236517205, %rdx + 0x49, 0x31, 0xd1, //0x0000098f xorq %rdx, %r9 + 0x4d, 0x21, 0xe9, //0x00000992 andq %r13, %r9 + 0x49, 0xf7, 0xd1, //0x00000995 notq %r9 + //0x00000998 LBB0_103 + 0xc5, 0x4d, 0x74, 0xc1, //0x00000998 vpcmpeqb %ymm1, %ymm6, %ymm8 + 0xc4, 0x41, 0x7d, 0xd7, 0xe8, //0x0000099c vpmovmskb %ymm8, %r13d + 0x49, 0xc1, 0xe5, 0x20, //0x000009a1 shlq $32, %r13 + 0xc5, 0x45, 0x74, 0xc1, //0x000009a5 vpcmpeqb %ymm1, %ymm7, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xd0, //0x000009a9 vpmovmskb %ymm8, %edx + 0x4c, 0x09, 0xea, //0x000009ae orq %r13, %rdx + 0x4c, 0x21, 0xca, //0x000009b1 andq %r9, %rdx + 0xc4, 0xe1, 0xf9, 0x6e, 0xea, //0x000009b4 vmovq %rdx, %xmm5 + 0xc4, 0xe3, 0x51, 0x44, 0xea, 0x00, //0x000009b9 vpclmulqdq $0, %xmm2, %xmm5, %xmm5 + 0xc4, 0xc1, 0xf9, 0x7e, 0xed, //0x000009bf vmovq %xmm5, %r13 + 0x4d, 0x31, 0xdd, //0x000009c4 xorq %r11, %r13 + 0xc5, 0xc5, 0x74, 0xeb, //0x000009c7 vpcmpeqb %ymm3, %ymm7, %ymm5 + 0xc5, 0x7d, 0xd7, 0xdd, //0x000009cb vpmovmskb %ymm5, %r11d + 0xc5, 0xcd, 0x74, 0xeb, //0x000009cf vpcmpeqb %ymm3, %ymm6, %ymm5 + 0xc5, 0xfd, 0xd7, 0xd5, //0x000009d3 vpmovmskb %ymm5, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x000009d7 shlq $32, %rdx + 0x49, 0x09, 0xd3, //0x000009db orq %rdx, %r11 + 0x4d, 0x89, 0xe9, //0x000009de movq %r13, %r9 + 0x49, 0xf7, 0xd1, //0x000009e1 notq %r9 + 0x4d, 0x21, 0xcb, //0x000009e4 andq %r9, %r11 + 0xc5, 0xc5, 0x74, 0xec, //0x000009e7 vpcmpeqb %ymm4, %ymm7, %ymm5 + 0xc5, 0xfd, 0xd7, 0xd5, //0x000009eb vpmovmskb %ymm5, %edx + 0xc5, 0xcd, 0x74, 0xec, //0x000009ef vpcmpeqb %ymm4, %ymm6, %ymm5 + 0xc5, 0x7d, 0xd7, 0xd5, //0x000009f3 vpmovmskb %ymm5, %r10d + 0x49, 0xc1, 0xe2, 0x20, //0x000009f7 shlq $32, %r10 + 0x4c, 0x09, 0xd2, //0x000009fb orq %r10, %rdx + 0x4c, 0x21, 0xca, //0x000009fe andq %r9, %rdx + 0x0f, 0x84, 0x31, 0x00, 0x00, 0x00, //0x00000a01 je LBB0_98 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000a07 .p2align 4, 0x90 + //0x00000a10 LBB0_104 + 0x4c, 0x8d, 0x4a, 0xff, //0x00000a10 leaq $-1(%rdx), %r9 + 0x4c, 0x89, 0xcb, //0x00000a14 movq %r9, %rbx + 0x4c, 0x21, 0xdb, //0x00000a17 andq %r11, %rbx + 0xf3, 0x48, 0x0f, 0xb8, 0xdb, //0x00000a1a popcntq %rbx, %rbx + 0x4c, 0x01, 0xfb, //0x00000a1f addq %r15, %rbx + 0x4c, 0x39, 0xc3, //0x00000a22 cmpq %r8, %rbx + 0x0f, 0x86, 0x64, 0x01, 0x00, 0x00, //0x00000a25 jbe LBB0_121 + 0x49, 0x83, 0xc0, 0x01, //0x00000a2b addq $1, %r8 + 0x4c, 0x21, 0xca, //0x00000a2f andq %r9, %rdx + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00000a32 jne LBB0_104 + //0x00000a38 LBB0_98 + 0x49, 0xc1, 0xfd, 0x3f, //0x00000a38 sarq $63, %r13 + 0xf3, 0x49, 0x0f, 0xb8, 0xd3, //0x00000a3c popcntq %r11, %rdx + 0x49, 0x01, 0xd7, //0x00000a41 addq %rdx, %r15 + 0x49, 0x83, 0xc6, 0x40, //0x00000a44 addq $64, %r14 + 0x48, 0x8b, 0x54, 0x24, 0x18, //0x00000a48 movq $24(%rsp), %rdx + 0x48, 0x83, 0xc2, 0xc0, //0x00000a4d addq $-64, %rdx + 0x4d, 0x89, 0xeb, //0x00000a51 movq %r13, %r11 + 0x48, 0x83, 0xfa, 0x40, //0x00000a54 cmpq $64, %rdx + 0x48, 0x89, 0x54, 0x24, 0x18, //0x00000a58 movq %rdx, $24(%rsp) + 0x0f, 0x8d, 0xb0, 0xfe, 0xff, 0xff, //0x00000a5d jge LBB0_100 + //0x00000a63 LBB0_106 + 0x48, 0x85, 0xd2, //0x00000a63 testq %rdx, %rdx + 0x0f, 0x8e, 0x9e, 0x02, 0x00, 0x00, //0x00000a66 jle LBB0_138 + 0xc5, 0x7c, 0x11, 0x4c, 0x24, 0x40, //0x00000a6c vmovups %ymm9, $64(%rsp) + 0xc5, 0x7c, 0x11, 0x4c, 0x24, 0x20, //0x00000a72 vmovups %ymm9, $32(%rsp) + 0x44, 0x89, 0xf2, //0x00000a78 movl %r14d, %edx + 0x81, 0xe2, 0xff, 0x0f, 0x00, 0x00, //0x00000a7b andl $4095, %edx + 0x81, 0xfa, 0xc1, 0x0f, 0x00, 0x00, //0x00000a81 cmpl $4033, %edx + 0x0f, 0x82, 0x86, 0xfe, 0xff, 0xff, //0x00000a87 jb LBB0_100 + 0x48, 0x83, 0x7c, 0x24, 0x18, 0x20, //0x00000a8d cmpq $32, $24(%rsp) + 0x0f, 0x82, 0x22, 0x00, 0x00, 0x00, //0x00000a93 jb LBB0_110 + 0xc4, 0xc1, 0x7e, 0x6f, 0x2e, //0x00000a99 vmovdqu (%r14), %ymm5 + 0xc5, 0xfe, 0x7f, 0x6c, 0x24, 0x20, //0x00000a9e vmovdqu %ymm5, $32(%rsp) + 0x49, 0x83, 0xc6, 0x20, //0x00000aa4 addq $32, %r14 + 0x48, 0x8b, 0x54, 0x24, 0x18, //0x00000aa8 movq $24(%rsp), %rdx + 0x48, 0x8d, 0x5a, 0xe0, //0x00000aad leaq $-32(%rdx), %rbx + 0x4c, 0x8d, 0x4c, 0x24, 0x40, //0x00000ab1 leaq $64(%rsp), %r9 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00000ab6 jmp LBB0_111 + //0x00000abb LBB0_110 + 0x4c, 0x8d, 0x4c, 0x24, 0x20, //0x00000abb leaq $32(%rsp), %r9 + 0x48, 0x8b, 0x5c, 0x24, 0x18, //0x00000ac0 movq $24(%rsp), %rbx + //0x00000ac5 LBB0_111 + 0x48, 0x83, 0xfb, 0x10, //0x00000ac5 cmpq $16, %rbx + 0x0f, 0x82, 0x5c, 0x00, 0x00, 0x00, //0x00000ac9 jb LBB0_112 + 0xc4, 0xc1, 0x7a, 0x6f, 0x2e, //0x00000acf vmovdqu (%r14), %xmm5 + 0xc4, 0xc1, 0x7a, 0x7f, 0x29, //0x00000ad4 vmovdqu %xmm5, (%r9) + 0x49, 0x83, 0xc6, 0x10, //0x00000ad9 addq $16, %r14 + 0x49, 0x83, 0xc1, 0x10, //0x00000add addq $16, %r9 + 0x48, 0x83, 0xc3, 0xf0, //0x00000ae1 addq $-16, %rbx + 0x48, 0x83, 0xfb, 0x08, //0x00000ae5 cmpq $8, %rbx + 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x00000ae9 jae LBB0_117 + //0x00000aef LBB0_113 + 0x48, 0x83, 0xfb, 0x04, //0x00000aef cmpq $4, %rbx + 0x0f, 0x8c, 0x58, 0x00, 0x00, 0x00, //0x00000af3 jl LBB0_114 + //0x00000af9 LBB0_118 + 0x41, 0x8b, 0x16, //0x00000af9 movl (%r14), %edx + 0x41, 0x89, 0x11, //0x00000afc movl %edx, (%r9) + 0x49, 0x83, 0xc6, 0x04, //0x00000aff addq $4, %r14 + 0x49, 0x83, 0xc1, 0x04, //0x00000b03 addq $4, %r9 + 0x48, 0x83, 0xc3, 0xfc, //0x00000b07 addq $-4, %rbx + 0x48, 0x83, 0xfb, 0x02, //0x00000b0b cmpq $2, %rbx + 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x00000b0f jae LBB0_119 + //0x00000b15 LBB0_115 + 0x4c, 0x89, 0xf2, //0x00000b15 movq %r14, %rdx + 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x00000b18 leaq $32(%rsp), %r14 + 0x48, 0x85, 0xdb, //0x00000b1d testq %rbx, %rbx + 0x0f, 0x85, 0x5a, 0x00, 0x00, 0x00, //0x00000b20 jne LBB0_120 + 0xe9, 0xe8, 0xfd, 0xff, 0xff, //0x00000b26 jmp LBB0_100 + //0x00000b2b LBB0_112 + 0x48, 0x83, 0xfb, 0x08, //0x00000b2b cmpq $8, %rbx + 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x00000b2f jb LBB0_113 + //0x00000b35 LBB0_117 + 0x49, 0x8b, 0x16, //0x00000b35 movq (%r14), %rdx + 0x49, 0x89, 0x11, //0x00000b38 movq %rdx, (%r9) + 0x49, 0x83, 0xc6, 0x08, //0x00000b3b addq $8, %r14 + 0x49, 0x83, 0xc1, 0x08, //0x00000b3f addq $8, %r9 + 0x48, 0x83, 0xc3, 0xf8, //0x00000b43 addq $-8, %rbx + 0x48, 0x83, 0xfb, 0x04, //0x00000b47 cmpq $4, %rbx + 0x0f, 0x8d, 0xa8, 0xff, 0xff, 0xff, //0x00000b4b jge LBB0_118 + //0x00000b51 LBB0_114 + 0x48, 0x83, 0xfb, 0x02, //0x00000b51 cmpq $2, %rbx + 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x00000b55 jb LBB0_115 + //0x00000b5b LBB0_119 + 0x41, 0x0f, 0xb7, 0x16, //0x00000b5b movzwl (%r14), %edx + 0x66, 0x41, 0x89, 0x11, //0x00000b5f movw %dx, (%r9) + 0x49, 0x83, 0xc6, 0x02, //0x00000b63 addq $2, %r14 + 0x49, 0x83, 0xc1, 0x02, //0x00000b67 addq $2, %r9 + 0x48, 0x83, 0xc3, 0xfe, //0x00000b6b addq $-2, %rbx + 0x4c, 0x89, 0xf2, //0x00000b6f movq %r14, %rdx + 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x00000b72 leaq $32(%rsp), %r14 + 0x48, 0x85, 0xdb, //0x00000b77 testq %rbx, %rbx + 0x0f, 0x84, 0x93, 0xfd, 0xff, 0xff, //0x00000b7a je LBB0_100 + //0x00000b80 LBB0_120 + 0x8a, 0x12, //0x00000b80 movb (%rdx), %dl + 0x41, 0x88, 0x11, //0x00000b82 movb %dl, (%r9) + 0x4c, 0x8d, 0x74, 0x24, 0x20, //0x00000b85 leaq $32(%rsp), %r14 + 0xe9, 0x84, 0xfd, 0xff, 0xff, //0x00000b8a jmp LBB0_100 + //0x00000b8f LBB0_121 + 0x48, 0x8b, 0x47, 0x08, //0x00000b8f movq $8(%rdi), %rax + 0x48, 0x0f, 0xbc, 0xd2, //0x00000b93 bsfq %rdx, %rdx + 0x48, 0x2b, 0x54, 0x24, 0x18, //0x00000b97 subq $24(%rsp), %rdx + 0x48, 0x01, 0xd0, //0x00000b9c addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00000b9f addq $1, %rax + 0x48, 0x89, 0x06, //0x00000ba3 movq %rax, (%rsi) + 0x48, 0x8b, 0x57, 0x08, //0x00000ba6 movq $8(%rdi), %rdx + 0x48, 0x39, 0xd0, //0x00000baa cmpq %rdx, %rax + 0x48, 0x0f, 0x47, 0xc2, //0x00000bad cmovaq %rdx, %rax + 0x48, 0x89, 0x06, //0x00000bb1 movq %rax, (%rsi) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000bb4 movq $-1, %rax + 0x48, 0x0f, 0x47, 0xc8, //0x00000bbb cmovaq %rax, %rcx + 0xe9, 0x11, 0x00, 0x00, 0x00, //0x00000bbf jmp LBB0_95 + //0x00000bc4 LBB0_122 + 0x41, 0x0f, 0xbc, 0xc2, //0x00000bc4 bsfl %r10d, %eax + 0x48, 0x01, 0xc8, //0x00000bc8 addq %rcx, %rax + 0x4c, 0x01, 0xd8, //0x00000bcb addq %r11, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00000bce addq $2, %rax + 0x48, 0x89, 0x06, //0x00000bd2 movq %rax, (%rsi) + //0x00000bd5 LBB0_95 + 0x48, 0x89, 0xc8, //0x00000bd5 movq %rcx, %rax + //0x00000bd8 LBB0_96 + 0x48, 0x8d, 0x65, 0xd8, //0x00000bd8 leaq $-40(%rbp), %rsp + 0x5b, //0x00000bdc popq %rbx + 0x41, 0x5c, //0x00000bdd popq %r12 + 0x41, 0x5d, //0x00000bdf popq %r13 + 0x41, 0x5e, //0x00000be1 popq %r14 + 0x41, 0x5f, //0x00000be3 popq %r15 + 0x5d, //0x00000be5 popq %rbp + 0xc5, 0xf8, 0x77, //0x00000be6 vzeroupper + 0xc3, //0x00000be9 retq + //0x00000bea LBB0_123 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00000bea movq $-2, %rdx + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00000bf1 movl $2, %eax + 0x49, 0x01, 0xc7, //0x00000bf6 addq %rax, %r15 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000bf9 movq $-1, %rax + 0x49, 0x01, 0xd3, //0x00000c00 addq %rdx, %r11 + 0x0f, 0x8e, 0xcf, 0xff, 0xff, 0xff, //0x00000c03 jle LBB0_96 + //0x00000c09 LBB0_125 + 0x41, 0x0f, 0xb6, 0x07, //0x00000c09 movzbl (%r15), %eax + 0x3c, 0x5c, //0x00000c0d cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00000c0f je LBB0_123 + 0x3c, 0x22, //0x00000c15 cmpb $34, %al + 0x0f, 0x84, 0xb3, 0x00, 0x00, 0x00, //0x00000c17 je LBB0_134 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00000c1d movq $-1, %rdx + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00000c24 movl $1, %eax + 0x49, 0x01, 0xc7, //0x00000c29 addq %rax, %r15 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000c2c movq $-1, %rax + 0x49, 0x01, 0xd3, //0x00000c33 addq %rdx, %r11 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x00000c36 jg LBB0_125 + 0xe9, 0x97, 0xff, 0xff, 0xff, //0x00000c3c jmp LBB0_96 + //0x00000c41 LBB0_128 + 0x66, 0x0f, 0xbc, 0xc2, //0x00000c41 bsfw %dx, %ax + 0x44, 0x0f, 0xb7, 0xc0, //0x00000c45 movzwl %ax, %r8d + 0x4d, 0x29, 0xf7, //0x00000c49 subq %r14, %r15 + 0x4d, 0x01, 0xc7, //0x00000c4c addq %r8, %r15 + 0x49, 0x8d, 0x04, 0x3f, //0x00000c4f leaq (%r15,%rdi), %rax + 0x48, 0x89, 0x06, //0x00000c53 movq %rax, (%rsi) + 0x48, 0x85, 0xc0, //0x00000c56 testq %rax, %rax + 0x0f, 0x8e, 0x76, 0xff, 0xff, 0xff, //0x00000c59 jle LBB0_95 + 0x4a, 0x8d, 0x04, 0x3f, //0x00000c5f leaq (%rdi,%r15), %rax + 0x48, 0x83, 0xc0, 0x01, //0x00000c63 addq $1, %rax + 0x4a, 0x8d, 0x1c, 0x3f, //0x00000c67 leaq (%rdi,%r15), %rbx + 0x48, 0x83, 0xc3, 0xff, //0x00000c6b addq $-1, %rbx + 0x4d, 0x01, 0xc1, //0x00000c6f addq %r8, %r9 + 0x49, 0x01, 0xf9, //0x00000c72 addq %rdi, %r9 + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000c75 movabsq $4294977024, %rdi + //0x00000c7f LBB0_130 + 0x41, 0x0f, 0xb6, 0x11, //0x00000c7f movzbl (%r9), %edx + 0x48, 0x83, 0xfa, 0x20, //0x00000c83 cmpq $32, %rdx + 0x0f, 0x87, 0x48, 0xff, 0xff, 0xff, //0x00000c87 ja LBB0_95 + 0x48, 0x0f, 0xa3, 0xd7, //0x00000c8d btq %rdx, %rdi + 0x0f, 0x83, 0x3e, 0xff, 0xff, 0xff, //0x00000c91 jae LBB0_95 + 0x48, 0x89, 0x1e, //0x00000c97 movq %rbx, (%rsi) + 0x48, 0x83, 0xc0, 0xff, //0x00000c9a addq $-1, %rax + 0x48, 0x83, 0xc3, 0xff, //0x00000c9e addq $-1, %rbx + 0x49, 0x83, 0xc1, 0xff, //0x00000ca2 addq $-1, %r9 + 0x48, 0x83, 0xf8, 0x01, //0x00000ca6 cmpq $1, %rax + 0x0f, 0x8f, 0xcf, 0xff, 0xff, 0xff, //0x00000caa jg LBB0_130 + 0xe9, 0x20, 0xff, 0xff, 0xff, //0x00000cb0 jmp LBB0_95 + //0x00000cb5 LBB0_133 + 0x4c, 0x29, 0xf1, //0x00000cb5 subq %r14, %rcx + 0x4c, 0x01, 0xd1, //0x00000cb8 addq %r10, %rcx + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000cbb movq $-1, %rax + 0x48, 0x39, 0xd1, //0x00000cc2 cmpq %rdx, %rcx + 0x0f, 0x82, 0x55, 0xf6, 0xff, 0xff, //0x00000cc5 jb LBB0_31 + 0xe9, 0x08, 0xff, 0xff, 0xff, //0x00000ccb jmp LBB0_96 + //0x00000cd0 LBB0_134 + 0x4d, 0x29, 0xf7, //0x00000cd0 subq %r14, %r15 + 0x49, 0x83, 0xc7, 0x01, //0x00000cd3 addq $1, %r15 + 0x4c, 0x89, 0x3e, //0x00000cd7 movq %r15, (%rsi) + 0xe9, 0xf6, 0xfe, 0xff, 0xff, //0x00000cda jmp LBB0_95 + //0x00000cdf LBB0_135 + 0x4c, 0x01, 0xf1, //0x00000cdf addq %r14, %rcx + 0x48, 0x85, 0xdb, //0x00000ce2 testq %rbx, %rbx + 0x0f, 0x85, 0xbd, 0xf5, 0xff, 0xff, //0x00000ce5 jne LBB0_23 + 0xe9, 0xf1, 0xf5, 0xff, 0xff, //0x00000ceb jmp LBB0_28 + //0x00000cf0 LBB0_136 + 0x4d, 0x01, 0xf7, //0x00000cf0 addq %r14, %r15 + 0x48, 0x83, 0xf8, 0x10, //0x00000cf3 cmpq $16, %rax + 0x0f, 0x83, 0xd4, 0xf6, 0xff, 0xff, //0x00000cf7 jae LBB0_38 + 0xe9, 0x24, 0xf7, 0xff, 0xff, //0x00000cfd jmp LBB0_42 + //0x00000d02 LBB0_137 + 0x4d, 0x01, 0xf7, //0x00000d02 addq %r14, %r15 + 0xe9, 0xd4, 0xf8, 0xff, 0xff, //0x00000d05 jmp LBB0_68 + //0x00000d0a LBB0_138 + 0x48, 0x8b, 0x4f, 0x08, //0x00000d0a movq $8(%rdi), %rcx + 0x48, 0x89, 0x0e, //0x00000d0e movq %rcx, (%rsi) + 0xe9, 0xc2, 0xfe, 0xff, 0xff, //0x00000d11 jmp LBB0_96 + //0x00000d16 LBB0_139 + 0x49, 0x8d, 0x50, 0xff, //0x00000d16 leaq $-1(%r8), %rdx + 0x4c, 0x39, 0xda, //0x00000d1a cmpq %r11, %rdx + 0x0f, 0x84, 0xb5, 0xfe, 0xff, 0xff, //0x00000d1d je LBB0_96 + 0x4f, 0x8d, 0x3c, 0x0b, //0x00000d23 leaq (%r11,%r9), %r15 + 0x49, 0x83, 0xc7, 0x02, //0x00000d27 addq $2, %r15 + 0x4d, 0x29, 0xd8, //0x00000d2b subq %r11, %r8 + 0x49, 0x83, 0xc0, 0xfe, //0x00000d2e addq $-2, %r8 + 0x4d, 0x89, 0xc3, //0x00000d32 movq %r8, %r11 + 0xe9, 0xa4, 0xf8, 0xff, 0xff, //0x00000d35 jmp LBB0_68 + 0x90, 0x90, //0x00000d3a .p2align 2, 0x90 + // // .set L0_0_set_96, LBB0_96-LJTI0_0 + // // .set L0_0_set_57, LBB0_57-LJTI0_0 + // // .set L0_0_set_58, LBB0_58-LJTI0_0 + // // .set L0_0_set_33, LBB0_33-LJTI0_0 + // // .set L0_0_set_69, LBB0_69-LJTI0_0 + // // .set L0_0_set_93, LBB0_93-LJTI0_0 + // // .set L0_0_set_56, LBB0_56-LJTI0_0 + // // .set L0_0_set_97, LBB0_97-LJTI0_0 + //0x00000d3c LJTI0_0 + 0x9c, 0xfe, 0xff, 0xff, //0x00000d3c .long L0_0_set_96 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d40 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d44 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d48 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d4c .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d50 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d54 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d58 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d5c .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d60 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d64 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d68 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d6c .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d70 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d74 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d78 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d7c .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d80 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d84 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d88 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d8c .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d90 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d94 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d98 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000d9c .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000da0 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000da4 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000da8 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000dac .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000db0 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000db4 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000db8 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000dbc .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000dc0 .long L0_0_set_57 + 0xcb, 0xf7, 0xff, 0xff, //0x00000dc4 .long L0_0_set_58 + 0xbc, 0xf7, 0xff, 0xff, //0x00000dc8 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000dcc .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000dd0 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000dd4 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000dd8 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000ddc .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000de0 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000de4 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000de8 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000dec .long L0_0_set_57 + 0x10, 0xf6, 0xff, 0xff, //0x00000df0 .long L0_0_set_33 + 0xbc, 0xf7, 0xff, 0xff, //0x00000df4 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000df8 .long L0_0_set_57 + 0x10, 0xf6, 0xff, 0xff, //0x00000dfc .long L0_0_set_33 + 0x10, 0xf6, 0xff, 0xff, //0x00000e00 .long L0_0_set_33 + 0x10, 0xf6, 0xff, 0xff, //0x00000e04 .long L0_0_set_33 + 0x10, 0xf6, 0xff, 0xff, //0x00000e08 .long L0_0_set_33 + 0x10, 0xf6, 0xff, 0xff, //0x00000e0c .long L0_0_set_33 + 0x10, 0xf6, 0xff, 0xff, //0x00000e10 .long L0_0_set_33 + 0x10, 0xf6, 0xff, 0xff, //0x00000e14 .long L0_0_set_33 + 0x10, 0xf6, 0xff, 0xff, //0x00000e18 .long L0_0_set_33 + 0x10, 0xf6, 0xff, 0xff, //0x00000e1c .long L0_0_set_33 + 0x10, 0xf6, 0xff, 0xff, //0x00000e20 .long L0_0_set_33 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e24 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e28 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e2c .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e30 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e34 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e38 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e3c .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e40 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e44 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e48 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e4c .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e50 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e54 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e58 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e5c .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e60 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e64 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e68 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e6c .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e70 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e74 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e78 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e7c .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e80 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e84 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e88 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e8c .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e90 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e94 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e98 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000e9c .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000ea0 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000ea4 .long L0_0_set_57 + 0xb0, 0xf8, 0xff, 0xff, //0x00000ea8 .long L0_0_set_69 + 0xbc, 0xf7, 0xff, 0xff, //0x00000eac .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000eb0 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000eb4 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000eb8 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000ebc .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000ec0 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000ec4 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000ec8 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000ecc .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000ed0 .long L0_0_set_57 + 0x73, 0xfb, 0xff, 0xff, //0x00000ed4 .long L0_0_set_93 + 0xbc, 0xf7, 0xff, 0xff, //0x00000ed8 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000edc .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000ee0 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000ee4 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000ee8 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000eec .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000ef0 .long L0_0_set_57 + 0xa9, 0xf7, 0xff, 0xff, //0x00000ef4 .long L0_0_set_56 + 0xbc, 0xf7, 0xff, 0xff, //0x00000ef8 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000efc .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000f00 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000f04 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000f08 .long L0_0_set_57 + 0xa9, 0xf7, 0xff, 0xff, //0x00000f0c .long L0_0_set_56 + 0xbc, 0xf7, 0xff, 0xff, //0x00000f10 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000f14 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000f18 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000f1c .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000f20 .long L0_0_set_57 + 0xbc, 0xf7, 0xff, 0xff, //0x00000f24 .long L0_0_set_57 + 0x89, 0xfb, 0xff, 0xff, //0x00000f28 .long L0_0_set_97 + //0x00000f2c .p2align 2, 0x00 + //0x00000f2c _MASK_USE_NUMBER + 0x02, 0x00, 0x00, 0x00, //0x00000f2c .long 2 } diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_subr.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_subr.go index a942e12..9272404 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_subr.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_subr.go @@ -16,7 +16,7 @@ const ( ) const ( - _size__skip_one = 13564 + _size__skip_one = 13740 ) var ( @@ -28,15 +28,15 @@ var ( {0xc, 32}, {0xd, 40}, {0x14, 48}, - {0x323f, 208}, - {0x3240, 48}, - {0x3242, 40}, - {0x3244, 32}, - {0x3246, 24}, - {0x3248, 16}, - {0x3249, 8}, - {0x324d, 0}, - {0x34fc, 208}, + {0x329f, 208}, + {0x32a0, 48}, + {0x32a2, 40}, + {0x32a4, 32}, + {0x32a6, 24}, + {0x32a8, 16}, + {0x32a9, 8}, + {0x32ad, 0}, + {0x35ac, 208}, } ) diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_text_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_text_amd64.go index 8fd13de..72e798f 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_text_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx2/skip_one_text_amd64.go @@ -140,7 +140,7 @@ var _text_skip_one = []byte{ 0xc5, 0xfe, 0x6f, 0x25, 0xa6, 0xfe, 0xff, 0xff, //0x00000332 vmovdqu $-346(%rip), %ymm4 /* LCPI0_19+0(%rip) */ 0x4c, 0x89, 0x54, 0x24, 0x18, //0x0000033a movq %r10, $24(%rsp) 0x4c, 0x89, 0x5c, 0x24, 0x08, //0x0000033f movq %r11, $8(%rsp) - 0xe9, 0xc7, 0x03, 0x00, 0x00, //0x00000344 jmp LBB0_57 + 0xe9, 0x37, 0x04, 0x00, 0x00, //0x00000344 jmp LBB0_63 //0x00000349 LBB0_2 0x4d, 0x8b, 0x55, 0x00, //0x00000349 movq (%r13), %r10 0x49, 0x8b, 0x55, 0x08, //0x0000034d movq $8(%r13), %rdx @@ -199,7 +199,7 @@ var _text_skip_one = []byte{ 0x48, 0x29, 0xc7, //0x00000417 subq %rax, %rdi 0x0f, 0x86, 0xb7, 0x00, 0x00, 0x00, //0x0000041a jbe LBB0_31 0x48, 0x83, 0xff, 0x20, //0x00000420 cmpq $32, %rdi - 0x0f, 0x82, 0xab, 0x32, 0x00, 0x00, //0x00000424 jb LBB0_666 + 0x0f, 0x82, 0x6d, 0x33, 0x00, 0x00, //0x00000424 jb LBB0_678 0x48, 0xc7, 0xc7, 0xfc, 0xff, 0xff, 0xff, //0x0000042a movq $-4, %rdi 0x48, 0x29, 0xf7, //0x00000431 subq %rsi, %rdi 0xc5, 0xfe, 0x6f, 0x05, 0xc4, 0xfb, 0xff, 0xff, //0x00000434 vmovdqu $-1084(%rip), %ymm0 /* LCPI0_0+0(%rip) */ @@ -229,9 +229,9 @@ var _text_skip_one = []byte{ //0x00000498 LBB0_26 0x0f, 0xbe, 0x1c, 0x30, //0x00000498 movsbl (%rax,%rsi), %ebx 0x83, 0xfb, 0x20, //0x0000049c cmpl $32, %ebx - 0x0f, 0x87, 0xe8, 0x31, 0x00, 0x00, //0x0000049f ja LBB0_663 + 0x0f, 0x87, 0xaa, 0x32, 0x00, 0x00, //0x0000049f ja LBB0_675 0x48, 0x0f, 0xa3, 0xd9, //0x000004a5 btq %rbx, %rcx - 0x0f, 0x83, 0xde, 0x31, 0x00, 0x00, //0x000004a9 jae LBB0_663 + 0x0f, 0x83, 0xa0, 0x32, 0x00, 0x00, //0x000004a9 jae LBB0_675 0x48, 0x83, 0xc6, 0x01, //0x000004af addq $1, %rsi 0x48, 0x39, 0xf7, //0x000004b3 cmpq %rsi, %rdi 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x000004b6 jne LBB0_26 @@ -241,3717 +241,3759 @@ var _text_skip_one = []byte{ 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000004c2 movq $-1, %r15 0x48, 0x39, 0xd0, //0x000004c9 cmpq %rdx, %rax 0x0f, 0x82, 0x2c, 0x00, 0x00, 0x00, //0x000004cc jb LBB0_33 - 0xe9, 0x01, 0x30, 0x00, 0x00, //0x000004d2 jmp LBB0_638 + 0xe9, 0x61, 0x30, 0x00, 0x00, //0x000004d2 jmp LBB0_646 //0x000004d7 LBB0_31 0x49, 0x89, 0x03, //0x000004d7 movq %rax, (%r11) 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000004da movq $-1, %r15 - 0xe9, 0xf2, 0x2f, 0x00, 0x00, //0x000004e1 jmp LBB0_638 + 0xe9, 0x52, 0x30, 0x00, 0x00, //0x000004e1 jmp LBB0_646 //0x000004e6 LBB0_32 0xf7, 0xd1, //0x000004e6 notl %ecx 0x0f, 0xbc, 0xc1, //0x000004e8 bsfl %ecx, %eax 0x48, 0x29, 0xf8, //0x000004eb subq %rdi, %rax 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000004ee movq $-1, %r15 0x48, 0x39, 0xd0, //0x000004f5 cmpq %rdx, %rax - 0x0f, 0x83, 0xda, 0x2f, 0x00, 0x00, //0x000004f8 jae LBB0_638 + 0x0f, 0x83, 0x3a, 0x30, 0x00, 0x00, //0x000004f8 jae LBB0_646 //0x000004fe LBB0_33 0x48, 0x8d, 0x50, 0x01, //0x000004fe leaq $1(%rax), %rdx 0x49, 0x89, 0x13, //0x00000502 movq %rdx, (%r11) 0x41, 0x0f, 0xbe, 0x0c, 0x02, //0x00000505 movsbl (%r10,%rax), %ecx 0x83, 0xf9, 0x7b, //0x0000050a cmpl $123, %ecx - 0x0f, 0x87, 0xcd, 0x28, 0x00, 0x00, //0x0000050d ja LBB0_569 + 0x0f, 0x87, 0x33, 0x29, 0x00, 0x00, //0x0000050d ja LBB0_575 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00000513 movq $-1, %r15 - 0x48, 0x8d, 0x35, 0x7b, 0x32, 0x00, 0x00, //0x0000051a leaq $12923(%rip), %rsi /* LJTI0_0+0(%rip) */ + 0x48, 0x8d, 0x35, 0x2b, 0x33, 0x00, 0x00, //0x0000051a leaq $13099(%rip), %rsi /* LJTI0_0+0(%rip) */ 0x48, 0x63, 0x0c, 0x8e, //0x00000521 movslq (%rsi,%rcx,4), %rcx 0x48, 0x01, 0xf1, //0x00000525 addq %rsi, %rcx 0xff, 0xe1, //0x00000528 jmpq *%rcx //0x0000052a LBB0_35 - 0x49, 0x8b, 0x7d, 0x08, //0x0000052a movq $8(%r13), %rdi - 0x48, 0x89, 0xfe, //0x0000052e movq %rdi, %rsi - 0x48, 0x29, 0xd6, //0x00000531 subq %rdx, %rsi - 0x48, 0x83, 0xfe, 0x20, //0x00000534 cmpq $32, %rsi - 0x0f, 0x82, 0xa8, 0x31, 0x00, 0x00, //0x00000538 jb LBB0_667 - 0x48, 0x89, 0xc6, //0x0000053e movq %rax, %rsi - 0x48, 0xf7, 0xd6, //0x00000541 notq %rsi - 0xc5, 0xfe, 0x6f, 0x05, 0xd4, 0xfa, 0xff, 0xff, //0x00000544 vmovdqu $-1324(%rip), %ymm0 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x0d, 0xec, 0xfa, 0xff, 0xff, //0x0000054c vmovdqu $-1300(%rip), %ymm1 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x15, 0x04, 0xfb, 0xff, 0xff, //0x00000554 vmovdqu $-1276(%rip), %ymm2 /* LCPI0_3+0(%rip) */ - 0x90, 0x90, 0x90, 0x90, //0x0000055c .p2align 4, 0x90 + 0x49, 0x8b, 0x75, 0x08, //0x0000052a movq $8(%r13), %rsi + 0x48, 0x29, 0xd6, //0x0000052e subq %rdx, %rsi + 0x48, 0x83, 0xfe, 0x20, //0x00000531 cmpq $32, %rsi + 0x0f, 0x82, 0x6d, 0x32, 0x00, 0x00, //0x00000535 jb LBB0_679 + 0x31, 0xff, //0x0000053b xorl %edi, %edi + 0xc5, 0xfe, 0x6f, 0x05, 0xdb, 0xfa, 0xff, 0xff, //0x0000053d vmovdqu $-1317(%rip), %ymm0 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x0d, 0xf3, 0xfa, 0xff, 0xff, //0x00000545 vmovdqu $-1293(%rip), %ymm1 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x15, 0x0b, 0xfb, 0xff, 0xff, //0x0000054d vmovdqu $-1269(%rip), %ymm2 /* LCPI0_3+0(%rip) */ + 0x4c, 0x89, 0xd2, //0x00000555 movq %r10, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000558 .p2align 4, 0x90 //0x00000560 LBB0_37 - 0xc4, 0xc1, 0x7e, 0x6f, 0x1c, 0x12, //0x00000560 vmovdqu (%r10,%rdx), %ymm3 + 0xc5, 0xfe, 0x6f, 0x5c, 0x02, 0x01, //0x00000560 vmovdqu $1(%rdx,%rax), %ymm3 0xc5, 0xe5, 0x74, 0xe0, //0x00000566 vpcmpeqb %ymm0, %ymm3, %ymm4 0xc5, 0xe5, 0xdb, 0xd9, //0x0000056a vpand %ymm1, %ymm3, %ymm3 0xc5, 0xe5, 0x74, 0xda, //0x0000056e vpcmpeqb %ymm2, %ymm3, %ymm3 0xc5, 0xe5, 0xeb, 0xdc, //0x00000572 vpor %ymm4, %ymm3, %ymm3 0xc5, 0xfd, 0xd7, 0xcb, //0x00000576 vpmovmskb %ymm3, %ecx 0x85, 0xc9, //0x0000057a testl %ecx, %ecx - 0x0f, 0x85, 0xca, 0x00, 0x00, 0x00, //0x0000057c jne LBB0_51 + 0x0f, 0x85, 0xe1, 0x00, 0x00, 0x00, //0x0000057c jne LBB0_53 0x48, 0x83, 0xc2, 0x20, //0x00000582 addq $32, %rdx - 0x48, 0x8d, 0x0c, 0x37, //0x00000586 leaq (%rdi,%rsi), %rcx + 0x48, 0x8d, 0x0c, 0x3e, //0x00000586 leaq (%rsi,%rdi), %rcx 0x48, 0x83, 0xc1, 0xe0, //0x0000058a addq $-32, %rcx - 0x48, 0x83, 0xc6, 0xe0, //0x0000058e addq $-32, %rsi + 0x48, 0x83, 0xc7, 0xe0, //0x0000058e addq $-32, %rdi 0x48, 0x83, 0xf9, 0x1f, //0x00000592 cmpq $31, %rcx 0x0f, 0x87, 0xc4, 0xff, 0xff, 0xff, //0x00000596 ja LBB0_37 - 0x4c, 0x89, 0xd2, //0x0000059c movq %r10, %rdx - 0x48, 0x29, 0xf2, //0x0000059f subq %rsi, %rdx - 0x48, 0x01, 0xf7, //0x000005a2 addq %rsi, %rdi - 0x48, 0x89, 0xfe, //0x000005a5 movq %rdi, %rsi - 0x48, 0x83, 0xfe, 0x10, //0x000005a8 cmpq $16, %rsi - 0x0f, 0x82, 0x54, 0x00, 0x00, 0x00, //0x000005ac jb LBB0_43 - //0x000005b2 LBB0_40 - 0x4c, 0x89, 0xd7, //0x000005b2 movq %r10, %rdi - 0x48, 0x29, 0xd7, //0x000005b5 subq %rdx, %rdi - 0xc5, 0xfa, 0x6f, 0x05, 0x40, 0xfc, 0xff, 0xff, //0x000005b8 vmovdqu $-960(%rip), %xmm0 /* LCPI0_4+0(%rip) */ - 0xc5, 0xfa, 0x6f, 0x0d, 0x48, 0xfc, 0xff, 0xff, //0x000005c0 vmovdqu $-952(%rip), %xmm1 /* LCPI0_5+0(%rip) */ - 0xc5, 0xfa, 0x6f, 0x15, 0x50, 0xfc, 0xff, 0xff, //0x000005c8 vmovdqu $-944(%rip), %xmm2 /* LCPI0_6+0(%rip) */ - //0x000005d0 LBB0_41 - 0xc5, 0xfa, 0x6f, 0x1a, //0x000005d0 vmovdqu (%rdx), %xmm3 - 0xc5, 0xe1, 0x74, 0xe0, //0x000005d4 vpcmpeqb %xmm0, %xmm3, %xmm4 - 0xc5, 0xe1, 0xdb, 0xd9, //0x000005d8 vpand %xmm1, %xmm3, %xmm3 - 0xc5, 0xe1, 0x74, 0xda, //0x000005dc vpcmpeqb %xmm2, %xmm3, %xmm3 - 0xc5, 0xe1, 0xeb, 0xdc, //0x000005e0 vpor %xmm4, %xmm3, %xmm3 - 0xc5, 0xf9, 0xd7, 0xcb, //0x000005e4 vpmovmskb %xmm3, %ecx - 0x85, 0xc9, //0x000005e8 testl %ecx, %ecx - 0x0f, 0x85, 0x70, 0x2f, 0x00, 0x00, //0x000005ea jne LBB0_647 - 0x48, 0x83, 0xc2, 0x10, //0x000005f0 addq $16, %rdx - 0x48, 0x83, 0xc6, 0xf0, //0x000005f4 addq $-16, %rsi - 0x48, 0x83, 0xc7, 0xf0, //0x000005f8 addq $-16, %rdi - 0x48, 0x83, 0xfe, 0x0f, //0x000005fc cmpq $15, %rsi - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00000600 ja LBB0_41 - //0x00000606 LBB0_43 - 0x48, 0x85, 0xf6, //0x00000606 testq %rsi, %rsi - 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00000609 je LBB0_50 - 0x48, 0x8d, 0x1c, 0x32, //0x0000060f leaq (%rdx,%rsi), %rbx - 0x31, 0xff, //0x00000613 xorl %edi, %edi - //0x00000615 LBB0_45 - 0x0f, 0xb6, 0x0c, 0x3a, //0x00000615 movzbl (%rdx,%rdi), %ecx - 0x80, 0xf9, 0x2c, //0x00000619 cmpb $44, %cl - 0x0f, 0x84, 0xd6, 0x30, 0x00, 0x00, //0x0000061c je LBB0_668 - 0x80, 0xf9, 0x7d, //0x00000622 cmpb $125, %cl - 0x0f, 0x84, 0xcd, 0x30, 0x00, 0x00, //0x00000625 je LBB0_668 - 0x80, 0xf9, 0x5d, //0x0000062b cmpb $93, %cl - 0x0f, 0x84, 0xc4, 0x30, 0x00, 0x00, //0x0000062e je LBB0_668 - 0x48, 0x83, 0xc7, 0x01, //0x00000634 addq $1, %rdi - 0x48, 0x39, 0xfe, //0x00000638 cmpq %rdi, %rsi - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x0000063b jne LBB0_45 - 0x48, 0x89, 0xda, //0x00000641 movq %rbx, %rdx - //0x00000644 LBB0_50 - 0x4c, 0x29, 0xd2, //0x00000644 subq %r10, %rdx - 0xe9, 0xb2, 0x30, 0x00, 0x00, //0x00000647 jmp LBB0_669 - //0x0000064c LBB0_51 - 0x0f, 0xbc, 0xc9, //0x0000064c bsfl %ecx, %ecx - 0x48, 0x29, 0xf1, //0x0000064f subq %rsi, %rcx - //0x00000652 LBB0_52 - 0x49, 0x89, 0x0b, //0x00000652 movq %rcx, (%r11) - 0x49, 0x89, 0xc7, //0x00000655 movq %rax, %r15 - 0xe9, 0x7b, 0x2e, 0x00, 0x00, //0x00000658 jmp LBB0_638 - //0x0000065d LBB0_634 - 0x49, 0xf7, 0xd8, //0x0000065d negq %r8 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00000660 movq $8(%rsp), %r11 - 0xc5, 0xfe, 0x6f, 0x2d, 0x93, 0xf9, 0xff, 0xff, //0x00000665 vmovdqu $-1645(%rip), %ymm5 /* LCPI0_0+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x0b, 0xfa, 0xff, 0xff, //0x0000066d vmovdqu $-1525(%rip), %ymm6 /* LCPI0_7+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x23, 0xfa, 0xff, 0xff, //0x00000675 vmovdqu $-1501(%rip), %ymm7 /* LCPI0_8+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x9b, 0xfa, 0xff, 0xff, //0x0000067d vmovdqu $-1381(%rip), %ymm8 /* LCPI0_13+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00000685 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0xae, 0xfa, 0xff, 0xff, //0x0000068a vmovdqu $-1362(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0xc6, 0xfa, 0xff, 0xff, //0x00000692 vmovdqu $-1338(%rip), %ymm11 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0xde, 0xfa, 0xff, 0xff, //0x0000069a vmovdqu $-1314(%rip), %ymm12 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0xf6, 0xfa, 0xff, 0xff, //0x000006a2 vmovdqu $-1290(%rip), %ymm13 /* LCPI0_17+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0x8e, 0xf9, 0xff, 0xff, //0x000006aa vmovdqu $-1650(%rip), %ymm14 /* LCPI0_2+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0x06, 0xfb, 0xff, 0xff, //0x000006b2 vmovdqu $-1274(%rip), %ymm15 /* LCPI0_18+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x1e, 0xfb, 0xff, 0xff, //0x000006ba vmovdqu $-1250(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x4d, 0x85, 0xc0, //0x000006c2 testq %r8, %r8 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000006c5 movq $24(%rsp), %r10 - 0x0f, 0x88, 0xec, 0x2d, 0x00, 0x00, //0x000006ca js LBB0_635 - //0x000006d0 LBB0_408 - 0x49, 0x8b, 0x0b, //0x000006d0 movq (%r11), %rcx - 0x48, 0x83, 0xc1, 0xff, //0x000006d3 addq $-1, %rcx - //0x000006d7 LBB0_54 - 0x4c, 0x01, 0xc1, //0x000006d7 addq %r8, %rcx - 0x49, 0x89, 0x0b, //0x000006da movq %rcx, (%r11) - 0x48, 0x83, 0x7c, 0x24, 0x28, 0x00, //0x000006dd cmpq $0, $40(%rsp) - 0x4c, 0x8b, 0x6c, 0x24, 0x38, //0x000006e3 movq $56(%rsp), %r13 - 0x0f, 0x8e, 0xea, 0x2d, 0x00, 0x00, //0x000006e8 jle LBB0_638 - 0x90, 0x90, //0x000006ee .p2align 4, 0x90 - //0x000006f0 LBB0_55 - 0x49, 0x8b, 0x11, //0x000006f0 movq (%r9), %rdx - 0x4d, 0x89, 0xf7, //0x000006f3 movq %r14, %r15 - 0x48, 0x85, 0xd2, //0x000006f6 testq %rdx, %rdx - 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x000006f9 jne LBB0_57 - 0xe9, 0xd4, 0x2d, 0x00, 0x00, //0x000006ff jmp LBB0_638 - //0x00000704 LBB0_53 - 0x4c, 0x89, 0xf9, //0x00000704 movq %r15, %rcx - 0xe9, 0xcb, 0xff, 0xff, 0xff, //0x00000707 jmp LBB0_54 - 0x90, 0x90, 0x90, 0x90, //0x0000070c .p2align 4, 0x90 - //0x00000710 LBB0_57 - 0x4c, 0x89, 0xf1, //0x00000710 movq %r14, %rcx - 0x4d, 0x8b, 0x45, 0x00, //0x00000713 movq (%r13), %r8 - 0x49, 0x8b, 0x75, 0x08, //0x00000717 movq $8(%r13), %rsi - 0x49, 0x8b, 0x3b, //0x0000071b movq (%r11), %rdi - 0x48, 0x39, 0xf7, //0x0000071e cmpq %rsi, %rdi - 0x4c, 0x89, 0x44, 0x24, 0x10, //0x00000721 movq %r8, $16(%rsp) - 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00000726 jae LBB0_62 - 0x41, 0x8a, 0x04, 0x38, //0x0000072c movb (%r8,%rdi), %al - 0x3c, 0x0d, //0x00000730 cmpb $13, %al - 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x00000732 je LBB0_62 - 0x3c, 0x20, //0x00000738 cmpb $32, %al - 0x0f, 0x84, 0x20, 0x00, 0x00, 0x00, //0x0000073a je LBB0_62 - 0x04, 0xf7, //0x00000740 addb $-9, %al - 0x3c, 0x01, //0x00000742 cmpb $1, %al - 0x0f, 0x86, 0x16, 0x00, 0x00, 0x00, //0x00000744 jbe LBB0_62 - 0x49, 0x89, 0xfe, //0x0000074a movq %rdi, %r14 - 0xe9, 0x80, 0x01, 0x00, 0x00, //0x0000074d jmp LBB0_87 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000752 .p2align 4, 0x90 - //0x00000760 LBB0_62 - 0x4c, 0x8d, 0x77, 0x01, //0x00000760 leaq $1(%rdi), %r14 - 0x49, 0x39, 0xf6, //0x00000764 cmpq %rsi, %r14 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000767 jae LBB0_66 - 0x43, 0x8a, 0x14, 0x30, //0x0000076d movb (%r8,%r14), %dl - 0x80, 0xfa, 0x0d, //0x00000771 cmpb $13, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000774 je LBB0_66 - 0x80, 0xfa, 0x20, //0x0000077a cmpb $32, %dl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000077d je LBB0_66 - 0x80, 0xc2, 0xf7, //0x00000783 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x00000786 cmpb $1, %dl - 0x0f, 0x87, 0x43, 0x01, 0x00, 0x00, //0x00000789 ja LBB0_87 - 0x90, //0x0000078f .p2align 4, 0x90 - //0x00000790 LBB0_66 - 0x4c, 0x8d, 0x77, 0x02, //0x00000790 leaq $2(%rdi), %r14 - 0x49, 0x39, 0xf6, //0x00000794 cmpq %rsi, %r14 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000797 jae LBB0_70 - 0x43, 0x8a, 0x14, 0x30, //0x0000079d movb (%r8,%r14), %dl - 0x80, 0xfa, 0x0d, //0x000007a1 cmpb $13, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000007a4 je LBB0_70 - 0x80, 0xfa, 0x20, //0x000007aa cmpb $32, %dl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000007ad je LBB0_70 - 0x80, 0xc2, 0xf7, //0x000007b3 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x000007b6 cmpb $1, %dl - 0x0f, 0x87, 0x13, 0x01, 0x00, 0x00, //0x000007b9 ja LBB0_87 - 0x90, //0x000007bf .p2align 4, 0x90 - //0x000007c0 LBB0_70 - 0x4c, 0x8d, 0x77, 0x03, //0x000007c0 leaq $3(%rdi), %r14 - 0x49, 0x39, 0xf6, //0x000007c4 cmpq %rsi, %r14 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000007c7 jae LBB0_74 - 0x43, 0x8a, 0x14, 0x30, //0x000007cd movb (%r8,%r14), %dl - 0x80, 0xfa, 0x0d, //0x000007d1 cmpb $13, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000007d4 je LBB0_74 - 0x80, 0xfa, 0x20, //0x000007da cmpb $32, %dl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000007dd je LBB0_74 - 0x80, 0xc2, 0xf7, //0x000007e3 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x000007e6 cmpb $1, %dl - 0x0f, 0x87, 0xe3, 0x00, 0x00, 0x00, //0x000007e9 ja LBB0_87 - 0x90, //0x000007ef .p2align 4, 0x90 - //0x000007f0 LBB0_74 - 0x4c, 0x8d, 0x77, 0x04, //0x000007f0 leaq $4(%rdi), %r14 - 0x48, 0x89, 0xf2, //0x000007f4 movq %rsi, %rdx - 0x4c, 0x29, 0xf2, //0x000007f7 subq %r14, %rdx - 0x0f, 0x86, 0x86, 0x25, 0x00, 0x00, //0x000007fa jbe LBB0_566 - 0x48, 0x83, 0xfa, 0x20, //0x00000800 cmpq $32, %rdx - 0x0f, 0x82, 0x58, 0x18, 0x00, 0x00, //0x00000804 jb LBB0_410 - 0x48, 0xc7, 0xc2, 0xfc, 0xff, 0xff, 0xff, //0x0000080a movq $-4, %rdx - 0x48, 0x29, 0xfa, //0x00000811 subq %rdi, %rdx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000814 .p2align 4, 0x90 - //0x00000820 LBB0_77 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x30, //0x00000820 vmovdqu (%r8,%r14), %ymm0 - 0xc4, 0xe2, 0x55, 0x00, 0xc8, //0x00000826 vpshufb %ymm0, %ymm5, %ymm1 - 0xc5, 0xfd, 0x74, 0xc1, //0x0000082b vpcmpeqb %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf8, //0x0000082f vpmovmskb %ymm0, %edi - 0x83, 0xff, 0xff, //0x00000833 cmpl $-1, %edi - 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x00000836 jne LBB0_86 - 0x49, 0x83, 0xc6, 0x20, //0x0000083c addq $32, %r14 - 0x48, 0x8d, 0x3c, 0x16, //0x00000840 leaq (%rsi,%rdx), %rdi - 0x48, 0x83, 0xc7, 0xe0, //0x00000844 addq $-32, %rdi - 0x48, 0x83, 0xc2, 0xe0, //0x00000848 addq $-32, %rdx - 0x48, 0x83, 0xff, 0x1f, //0x0000084c cmpq $31, %rdi - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00000850 ja LBB0_77 - 0x4d, 0x89, 0xc6, //0x00000856 movq %r8, %r14 - 0x49, 0x29, 0xd6, //0x00000859 subq %rdx, %r14 - 0x48, 0x01, 0xf2, //0x0000085c addq %rsi, %rdx - 0x48, 0x85, 0xd2, //0x0000085f testq %rdx, %rdx - 0x0f, 0x84, 0x3f, 0x00, 0x00, 0x00, //0x00000862 je LBB0_85 - //0x00000868 LBB0_80 - 0x4d, 0x8d, 0x04, 0x16, //0x00000868 leaq (%r14,%rdx), %r8 - 0x31, 0xff, //0x0000086c xorl %edi, %edi - 0x90, 0x90, //0x0000086e .p2align 4, 0x90 - //0x00000870 LBB0_81 - 0x41, 0x0f, 0xbe, 0x1c, 0x3e, //0x00000870 movsbl (%r14,%rdi), %ebx - 0x83, 0xfb, 0x20, //0x00000875 cmpl $32, %ebx - 0x0f, 0x87, 0x1d, 0x16, 0x00, 0x00, //0x00000878 ja LBB0_401 - 0x48, 0xb8, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000087e movabsq $4294977024, %rax - 0x48, 0x0f, 0xa3, 0xd8, //0x00000888 btq %rbx, %rax - 0x0f, 0x83, 0x09, 0x16, 0x00, 0x00, //0x0000088c jae LBB0_401 - 0x48, 0x83, 0xc7, 0x01, //0x00000892 addq $1, %rdi - 0x48, 0x39, 0xfa, //0x00000896 cmpq %rdi, %rdx - 0x0f, 0x85, 0xd1, 0xff, 0xff, 0xff, //0x00000899 jne LBB0_81 - 0x4d, 0x89, 0xc6, //0x0000089f movq %r8, %r14 - 0x4c, 0x8b, 0x44, 0x24, 0x10, //0x000008a2 movq $16(%rsp), %r8 - //0x000008a7 LBB0_85 - 0x4d, 0x29, 0xc6, //0x000008a7 subq %r8, %r14 - 0x49, 0x39, 0xf6, //0x000008aa cmpq %rsi, %r14 - 0x0f, 0x82, 0x1f, 0x00, 0x00, 0x00, //0x000008ad jb LBB0_87 - 0xe9, 0xd1, 0x24, 0x00, 0x00, //0x000008b3 jmp LBB0_567 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000008b8 .p2align 4, 0x90 - //0x000008c0 LBB0_86 - 0xf7, 0xd7, //0x000008c0 notl %edi - 0x44, 0x0f, 0xbc, 0xf7, //0x000008c2 bsfl %edi, %r14d - 0x49, 0x29, 0xd6, //0x000008c6 subq %rdx, %r14 - 0x49, 0x39, 0xf6, //0x000008c9 cmpq %rsi, %r14 - 0x0f, 0x83, 0xb7, 0x24, 0x00, 0x00, //0x000008cc jae LBB0_567 - //0x000008d2 LBB0_87 - 0x49, 0x8d, 0x56, 0x01, //0x000008d2 leaq $1(%r14), %rdx - 0x49, 0x89, 0x13, //0x000008d6 movq %rdx, (%r11) - 0x43, 0x0f, 0xbe, 0x3c, 0x30, //0x000008d9 movsbl (%r8,%r14), %edi - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000008de movq $-1, %r15 - 0x85, 0xff, //0x000008e5 testl %edi, %edi - 0x0f, 0x84, 0xeb, 0x2b, 0x00, 0x00, //0x000008e7 je LBB0_638 - 0x49, 0x8b, 0x31, //0x000008ed movq (%r9), %rsi - 0x48, 0x8d, 0x56, 0xff, //0x000008f0 leaq $-1(%rsi), %rdx - 0x41, 0x8b, 0x1c, 0xf1, //0x000008f4 movl (%r9,%rsi,8), %ebx - 0x48, 0x83, 0xf9, 0xff, //0x000008f8 cmpq $-1, %rcx - 0x4c, 0x0f, 0x45, 0xf1, //0x000008fc cmovneq %rcx, %r14 - 0x83, 0xc3, 0xff, //0x00000900 addl $-1, %ebx - 0x83, 0xfb, 0x05, //0x00000903 cmpl $5, %ebx - 0x0f, 0x87, 0xeb, 0x01, 0x00, 0x00, //0x00000906 ja LBB0_119 - 0x48, 0x8d, 0x05, 0x79, 0x30, 0x00, 0x00, //0x0000090c leaq $12409(%rip), %rax /* LJTI0_1+0(%rip) */ - 0x48, 0x63, 0x0c, 0x98, //0x00000913 movslq (%rax,%rbx,4), %rcx - 0x48, 0x01, 0xc1, //0x00000917 addq %rax, %rcx - 0xff, 0xe1, //0x0000091a jmpq *%rcx - //0x0000091c LBB0_90 - 0x83, 0xff, 0x2c, //0x0000091c cmpl $44, %edi - 0x0f, 0x84, 0x4f, 0x06, 0x00, 0x00, //0x0000091f je LBB0_189 - 0x83, 0xff, 0x5d, //0x00000925 cmpl $93, %edi - 0x0f, 0x84, 0x32, 0x06, 0x00, 0x00, //0x00000928 je LBB0_92 - 0xe9, 0x9e, 0x2b, 0x00, 0x00, //0x0000092e jmp LBB0_637 - //0x00000933 LBB0_93 - 0x40, 0x80, 0xff, 0x5d, //0x00000933 cmpb $93, %dil - 0x0f, 0x84, 0x23, 0x06, 0x00, 0x00, //0x00000937 je LBB0_92 - 0x49, 0xc7, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x00, //0x0000093d movq $1, (%r9,%rsi,8) - 0x83, 0xff, 0x7b, //0x00000945 cmpl $123, %edi - 0x0f, 0x86, 0xb5, 0x01, 0x00, 0x00, //0x00000948 jbe LBB0_95 - 0xe9, 0x7e, 0x2b, 0x00, 0x00, //0x0000094e jmp LBB0_637 - //0x00000953 LBB0_96 - 0x40, 0x80, 0xff, 0x22, //0x00000953 cmpb $34, %dil - 0x0f, 0x85, 0x74, 0x2b, 0x00, 0x00, //0x00000957 jne LBB0_637 - 0x49, 0xc7, 0x04, 0xf1, 0x04, 0x00, 0x00, 0x00, //0x0000095d movq $4, (%r9,%rsi,8) - 0x4d, 0x8b, 0x03, //0x00000965 movq (%r11), %r8 - 0x4d, 0x8b, 0x65, 0x08, //0x00000968 movq $8(%r13), %r12 - 0x41, 0xf6, 0xc2, 0x20, //0x0000096c testb $32, %r10b - 0x0f, 0x85, 0x7f, 0x07, 0x00, 0x00, //0x00000970 jne LBB0_198 - 0x4c, 0x89, 0xe3, //0x00000976 movq %r12, %rbx - 0x4c, 0x29, 0xc3, //0x00000979 subq %r8, %rbx - 0x0f, 0x84, 0x26, 0x2d, 0x00, 0x00, //0x0000097c je LBB0_670 - 0x48, 0x83, 0xfb, 0x40, //0x00000982 cmpq $64, %rbx - 0x0f, 0x82, 0x94, 0x18, 0x00, 0x00, //0x00000986 jb LBB0_427 - 0x4c, 0x89, 0xc6, //0x0000098c movq %r8, %rsi - 0x48, 0xf7, 0xd6, //0x0000098f notq %rsi - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00000992 movq $-1, (%rsp) - 0x4d, 0x89, 0xc7, //0x0000099a movq %r8, %r15 - 0x45, 0x31, 0xd2, //0x0000099d xorl %r10d, %r10d - //0x000009a0 .p2align 4, 0x90 - //0x000009a0 LBB0_101 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x000009a0 movq $16(%rsp), %rax - 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x38, //0x000009a5 vmovdqu (%rax,%r15), %ymm0 - 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x38, 0x20, //0x000009ab vmovdqu $32(%rax,%r15), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x000009b2 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x000009b6 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x000009ba vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xca, //0x000009be vpmovmskb %ymm2, %ecx - 0xc5, 0xfd, 0x74, 0xc7, //0x000009c2 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x000009c6 vpmovmskb %ymm0, %edx - 0xc5, 0xf5, 0x74, 0xc7, //0x000009ca vpcmpeqb %ymm7, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x000009ce vpmovmskb %ymm0, %eax - 0x48, 0xc1, 0xe1, 0x20, //0x000009d2 shlq $32, %rcx - 0x48, 0x09, 0xcf, //0x000009d6 orq %rcx, %rdi - 0x48, 0xc1, 0xe0, 0x20, //0x000009d9 shlq $32, %rax - 0x48, 0x09, 0xc2, //0x000009dd orq %rax, %rdx - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000009e0 jne LBB0_110 - 0x4d, 0x85, 0xd2, //0x000009e6 testq %r10, %r10 - 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x000009e9 jne LBB0_112 - 0x45, 0x31, 0xd2, //0x000009ef xorl %r10d, %r10d - 0x48, 0x85, 0xff, //0x000009f2 testq %rdi, %rdi - 0x0f, 0x85, 0xa9, 0x00, 0x00, 0x00, //0x000009f5 jne LBB0_114 - //0x000009fb LBB0_104 - 0x48, 0x83, 0xc3, 0xc0, //0x000009fb addq $-64, %rbx - 0x48, 0x83, 0xc6, 0xc0, //0x000009ff addq $-64, %rsi - 0x49, 0x83, 0xc7, 0x40, //0x00000a03 addq $64, %r15 - 0x48, 0x83, 0xfb, 0x3f, //0x00000a07 cmpq $63, %rbx - 0x0f, 0x87, 0x8f, 0xff, 0xff, 0xff, //0x00000a0b ja LBB0_101 - 0xe9, 0xab, 0x14, 0x00, 0x00, //0x00000a11 jmp LBB0_105 - //0x00000a16 LBB0_110 - 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x00000a16 movq %r9, $32(%rsp) - 0x4d, 0x89, 0xe9, //0x00000a1b movq %r13, %r9 - 0x4d, 0x89, 0xdd, //0x00000a1e movq %r11, %r13 - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00000a21 cmpq $-1, (%rsp) - 0x0f, 0x85, 0x1b, 0x00, 0x00, 0x00, //0x00000a26 jne LBB0_113 - 0x48, 0x0f, 0xbc, 0xc2, //0x00000a2c bsfq %rdx, %rax - 0x4c, 0x01, 0xf8, //0x00000a30 addq %r15, %rax - 0x48, 0x89, 0x04, 0x24, //0x00000a33 movq %rax, (%rsp) - 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00000a37 jmp LBB0_113 - //0x00000a3c LBB0_112 - 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x00000a3c movq %r9, $32(%rsp) - 0x4d, 0x89, 0xe9, //0x00000a41 movq %r13, %r9 - 0x4d, 0x89, 0xdd, //0x00000a44 movq %r11, %r13 - //0x00000a47 LBB0_113 - 0x4c, 0x89, 0xd0, //0x00000a47 movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x00000a4a notq %rax - 0x48, 0x21, 0xd0, //0x00000a4d andq %rdx, %rax - 0x4c, 0x8d, 0x1c, 0x00, //0x00000a50 leaq (%rax,%rax), %r11 - 0x4d, 0x09, 0xd3, //0x00000a54 orq %r10, %r11 - 0x4c, 0x89, 0xd9, //0x00000a57 movq %r11, %rcx - 0x48, 0xf7, 0xd1, //0x00000a5a notq %rcx - 0x48, 0x21, 0xd1, //0x00000a5d andq %rdx, %rcx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000a60 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd1, //0x00000a6a andq %rdx, %rcx - 0x45, 0x31, 0xd2, //0x00000a6d xorl %r10d, %r10d - 0x48, 0x01, 0xc1, //0x00000a70 addq %rax, %rcx - 0x41, 0x0f, 0x92, 0xc2, //0x00000a73 setb %r10b - 0x48, 0x01, 0xc9, //0x00000a77 addq %rcx, %rcx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000a7a movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc1, //0x00000a84 xorq %rax, %rcx - 0x4c, 0x21, 0xd9, //0x00000a87 andq %r11, %rcx - 0x48, 0xf7, 0xd1, //0x00000a8a notq %rcx - 0x48, 0x21, 0xcf, //0x00000a8d andq %rcx, %rdi - 0x4d, 0x89, 0xeb, //0x00000a90 movq %r13, %r11 - 0x4d, 0x89, 0xcd, //0x00000a93 movq %r9, %r13 - 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x00000a96 movq $32(%rsp), %r9 - 0x48, 0x85, 0xff, //0x00000a9b testq %rdi, %rdi - 0x0f, 0x84, 0x57, 0xff, 0xff, 0xff, //0x00000a9e je LBB0_104 - //0x00000aa4 LBB0_114 - 0x4c, 0x0f, 0xbc, 0xff, //0x00000aa4 bsfq %rdi, %r15 - 0x49, 0x29, 0xf7, //0x00000aa8 subq %rsi, %r15 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00000aab movq $24(%rsp), %r10 - 0xe9, 0x3c, 0x09, 0x00, 0x00, //0x00000ab0 jmp LBB0_240 - //0x00000ab5 LBB0_115 - 0x40, 0x80, 0xff, 0x3a, //0x00000ab5 cmpb $58, %dil - 0x0f, 0x85, 0x12, 0x2a, 0x00, 0x00, //0x00000ab9 jne LBB0_637 - 0x49, 0xc7, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x00, //0x00000abf movq $0, (%r9,%rsi,8) - 0xe9, 0x24, 0xfc, 0xff, 0xff, //0x00000ac7 jmp LBB0_55 - //0x00000acc LBB0_117 - 0x83, 0xff, 0x2c, //0x00000acc cmpl $44, %edi - 0x0f, 0x85, 0x82, 0x04, 0x00, 0x00, //0x00000acf jne LBB0_118 - 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00000ad5 cmpq $4095, %rsi - 0x0f, 0x8f, 0xc6, 0x22, 0x00, 0x00, //0x00000adc jg LBB0_650 - 0x48, 0x8d, 0x4e, 0x01, //0x00000ae2 leaq $1(%rsi), %rcx - 0x49, 0x89, 0x09, //0x00000ae6 movq %rcx, (%r9) - 0x49, 0xc7, 0x44, 0xf1, 0x08, 0x03, 0x00, 0x00, 0x00, //0x00000ae9 movq $3, $8(%r9,%rsi,8) - 0xe9, 0xf9, 0xfb, 0xff, 0xff, //0x00000af2 jmp LBB0_55 - //0x00000af7 LBB0_119 - 0x49, 0x89, 0x11, //0x00000af7 movq %rdx, (%r9) - 0x83, 0xff, 0x7b, //0x00000afa cmpl $123, %edi - 0x0f, 0x87, 0xce, 0x29, 0x00, 0x00, //0x00000afd ja LBB0_637 - //0x00000b03 LBB0_95 - 0x89, 0xf8, //0x00000b03 movl %edi, %eax - 0x48, 0x8d, 0x0d, 0x98, 0x2e, 0x00, 0x00, //0x00000b05 leaq $11928(%rip), %rcx /* LJTI0_2+0(%rip) */ - 0x48, 0x63, 0x04, 0x81, //0x00000b0c movslq (%rcx,%rax,4), %rax - 0x48, 0x01, 0xc8, //0x00000b10 addq %rcx, %rax - 0xff, 0xe0, //0x00000b13 jmpq *%rax - //0x00000b15 LBB0_134 - 0x4c, 0x89, 0x6c, 0x24, 0x38, //0x00000b15 movq %r13, $56(%rsp) - 0x4d, 0x8b, 0x6d, 0x08, //0x00000b1a movq $8(%r13), %r13 - 0x49, 0x8b, 0x03, //0x00000b1e movq (%r11), %rax - 0x4c, 0x8d, 0x78, 0xff, //0x00000b21 leaq $-1(%rax), %r15 - 0x4d, 0x29, 0xfd, //0x00000b25 subq %r15, %r13 - 0x0f, 0x84, 0x82, 0x29, 0x00, 0x00, //0x00000b28 je LBB0_633 - 0x48, 0x89, 0x44, 0x24, 0x28, //0x00000b2e movq %rax, $40(%rsp) - 0x4d, 0x8d, 0x24, 0x00, //0x00000b33 leaq (%r8,%rax), %r12 - 0x49, 0x83, 0xc4, 0xff, //0x00000b37 addq $-1, %r12 - 0x41, 0x80, 0x3c, 0x24, 0x30, //0x00000b3b cmpb $48, (%r12) - 0x0f, 0x85, 0x43, 0x00, 0x00, 0x00, //0x00000b40 jne LBB0_139 - 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00000b46 movl $1, %r8d - 0x49, 0x83, 0xfd, 0x01, //0x00000b4c cmpq $1, %r13 - 0x0f, 0x84, 0xae, 0xfb, 0xff, 0xff, //0x00000b50 je LBB0_53 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00000b56 movq $16(%rsp), %rax - 0x48, 0x8b, 0x4c, 0x24, 0x28, //0x00000b5b movq $40(%rsp), %rcx - 0x8a, 0x0c, 0x08, //0x00000b60 movb (%rax,%rcx), %cl - 0x80, 0xc1, 0xd2, //0x00000b63 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x00000b66 cmpb $55, %cl - 0x0f, 0x87, 0x95, 0xfb, 0xff, 0xff, //0x00000b69 ja LBB0_53 - 0x0f, 0xb6, 0xc1, //0x00000b6f movzbl %cl, %eax - 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00000b72 movabsq $36028797027352577, %rcx - 0x48, 0x0f, 0xa3, 0xc1, //0x00000b7c btq %rax, %rcx - 0x4c, 0x89, 0xf9, //0x00000b80 movq %r15, %rcx - 0x0f, 0x83, 0x4e, 0xfb, 0xff, 0xff, //0x00000b83 jae LBB0_54 - //0x00000b89 LBB0_139 - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00000b89 movq $-1, %r11 - 0x49, 0x83, 0xfd, 0x20, //0x00000b90 cmpq $32, %r13 - 0x0f, 0x82, 0x29, 0x16, 0x00, 0x00, //0x00000b94 jb LBB0_419 - 0x45, 0x31, 0xc0, //0x00000b9a xorl %r8d, %r8d - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00000b9d movq $-1, %r10 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00000ba4 movq $-1, (%rsp) - 0x90, 0x90, 0x90, 0x90, //0x00000bac .p2align 4, 0x90 - //0x00000bb0 LBB0_141 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x04, //0x00000bb0 vmovdqu (%r12,%r8), %ymm0 - 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x00000bb6 vpcmpgtb %ymm10, %ymm0, %ymm1 - 0xc5, 0xa5, 0x64, 0xd0, //0x00000bbb vpcmpgtb %ymm0, %ymm11, %ymm2 - 0xc5, 0xed, 0xdb, 0xc9, //0x00000bbf vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0x9d, 0x74, 0xd0, //0x00000bc3 vpcmpeqb %ymm0, %ymm12, %ymm2 - 0xc5, 0x95, 0x74, 0xd8, //0x00000bc7 vpcmpeqb %ymm0, %ymm13, %ymm3 - 0xc5, 0xe5, 0xeb, 0xd2, //0x00000bcb vpor %ymm2, %ymm3, %ymm2 - 0xc5, 0x8d, 0xdb, 0xd8, //0x00000bcf vpand %ymm0, %ymm14, %ymm3 - 0xc5, 0x85, 0x74, 0xc0, //0x00000bd3 vpcmpeqb %ymm0, %ymm15, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x00000bd7 vpmovmskb %ymm0, %edx - 0xc5, 0xe5, 0x74, 0xdc, //0x00000bdb vpcmpeqb %ymm4, %ymm3, %ymm3 - 0xc5, 0xfd, 0xd7, 0xfb, //0x00000bdf vpmovmskb %ymm3, %edi - 0xc5, 0xfd, 0xd7, 0xf2, //0x00000be3 vpmovmskb %ymm2, %esi - 0xc5, 0xf5, 0xeb, 0xc0, //0x00000be7 vpor %ymm0, %ymm1, %ymm0 - 0xc5, 0xe5, 0xeb, 0xca, //0x00000beb vpor %ymm2, %ymm3, %ymm1 - 0xc5, 0xfd, 0xeb, 0xc1, //0x00000bef vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x00000bf3 vpmovmskb %ymm0, %eax - 0x48, 0xf7, 0xd0, //0x00000bf7 notq %rax - 0x48, 0x0f, 0xbc, 0xc8, //0x00000bfa bsfq %rax, %rcx - 0x83, 0xf9, 0x20, //0x00000bfe cmpl $32, %ecx - 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00000c01 je LBB0_143 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00000c07 movl $-1, %eax - 0xd3, 0xe0, //0x00000c0c shll %cl, %eax - 0xf7, 0xd0, //0x00000c0e notl %eax - 0x21, 0xc2, //0x00000c10 andl %eax, %edx - 0x21, 0xc7, //0x00000c12 andl %eax, %edi - 0x21, 0xf0, //0x00000c14 andl %esi, %eax - 0x89, 0xc6, //0x00000c16 movl %eax, %esi - //0x00000c18 LBB0_143 - 0x8d, 0x5a, 0xff, //0x00000c18 leal $-1(%rdx), %ebx - 0x21, 0xd3, //0x00000c1b andl %edx, %ebx - 0x0f, 0x85, 0xf1, 0x10, 0x00, 0x00, //0x00000c1d jne LBB0_383 - 0x8d, 0x5f, 0xff, //0x00000c23 leal $-1(%rdi), %ebx - 0x21, 0xfb, //0x00000c26 andl %edi, %ebx - 0x0f, 0x85, 0xe6, 0x10, 0x00, 0x00, //0x00000c28 jne LBB0_383 - 0x8d, 0x5e, 0xff, //0x00000c2e leal $-1(%rsi), %ebx - 0x21, 0xf3, //0x00000c31 andl %esi, %ebx - 0x0f, 0x85, 0xdb, 0x10, 0x00, 0x00, //0x00000c33 jne LBB0_383 - 0x85, 0xd2, //0x00000c39 testl %edx, %edx - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000c3b je LBB0_149 - 0x0f, 0xbc, 0xd2, //0x00000c41 bsfl %edx, %edx - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00000c44 cmpq $-1, (%rsp) - 0x0f, 0x85, 0x65, 0x12, 0x00, 0x00, //0x00000c49 jne LBB0_402 - 0x4c, 0x01, 0xc2, //0x00000c4f addq %r8, %rdx - 0x48, 0x89, 0x14, 0x24, //0x00000c52 movq %rdx, (%rsp) - //0x00000c56 LBB0_149 - 0x85, 0xff, //0x00000c56 testl %edi, %edi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000c58 je LBB0_152 - 0x0f, 0xbc, 0xd7, //0x00000c5e bsfl %edi, %edx - 0x49, 0x83, 0xfa, 0xff, //0x00000c61 cmpq $-1, %r10 - 0x0f, 0x85, 0x49, 0x12, 0x00, 0x00, //0x00000c65 jne LBB0_402 - 0x4c, 0x01, 0xc2, //0x00000c6b addq %r8, %rdx - 0x49, 0x89, 0xd2, //0x00000c6e movq %rdx, %r10 - //0x00000c71 LBB0_152 - 0x85, 0xf6, //0x00000c71 testl %esi, %esi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000c73 je LBB0_155 - 0x0f, 0xbc, 0xd6, //0x00000c79 bsfl %esi, %edx - 0x49, 0x83, 0xfb, 0xff, //0x00000c7c cmpq $-1, %r11 - 0x0f, 0x85, 0x2e, 0x12, 0x00, 0x00, //0x00000c80 jne LBB0_402 - 0x4c, 0x01, 0xc2, //0x00000c86 addq %r8, %rdx - 0x49, 0x89, 0xd3, //0x00000c89 movq %rdx, %r11 - //0x00000c8c LBB0_155 - 0x83, 0xf9, 0x20, //0x00000c8c cmpl $32, %ecx - 0x0f, 0x85, 0xbf, 0x05, 0x00, 0x00, //0x00000c8f jne LBB0_218 - 0x49, 0x83, 0xc5, 0xe0, //0x00000c95 addq $-32, %r13 - 0x49, 0x83, 0xc0, 0x20, //0x00000c99 addq $32, %r8 - 0x49, 0x83, 0xfd, 0x1f, //0x00000c9d cmpq $31, %r13 - 0x0f, 0x87, 0x09, 0xff, 0xff, 0xff, //0x00000ca1 ja LBB0_141 - 0xc5, 0xf8, 0x77, //0x00000ca7 vzeroupper - 0xc5, 0x7e, 0x6f, 0x3d, 0x0e, 0xf5, 0xff, 0xff, //0x00000caa vmovdqu $-2802(%rip), %ymm15 /* LCPI0_18+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0x86, 0xf3, 0xff, 0xff, //0x00000cb2 vmovdqu $-3194(%rip), %ymm14 /* LCPI0_2+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0xde, 0xf4, 0xff, 0xff, //0x00000cba vmovdqu $-2850(%rip), %ymm13 /* LCPI0_17+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0xb6, 0xf4, 0xff, 0xff, //0x00000cc2 vmovdqu $-2890(%rip), %ymm12 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0x8e, 0xf4, 0xff, 0xff, //0x00000cca vmovdqu $-2930(%rip), %ymm11 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x15, 0x66, 0xf4, 0xff, 0xff, //0x00000cd2 vmovdqu $-2970(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00000cda vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x05, 0x39, 0xf4, 0xff, 0xff, //0x00000cdf vmovdqu $-3015(%rip), %ymm8 /* LCPI0_13+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0xb1, 0xf3, 0xff, 0xff, //0x00000ce7 vmovdqu $-3151(%rip), %ymm7 /* LCPI0_8+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x89, 0xf3, 0xff, 0xff, //0x00000cef vmovdqu $-3191(%rip), %ymm6 /* LCPI0_7+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x2d, 0x01, 0xf3, 0xff, 0xff, //0x00000cf7 vmovdqu $-3327(%rip), %ymm5 /* LCPI0_0+0(%rip) */ - 0x4d, 0x01, 0xe0, //0x00000cff addq %r12, %r8 - 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x00000d02 movq %r9, $32(%rsp) - 0x49, 0x83, 0xfd, 0x10, //0x00000d07 cmpq $16, %r13 - 0x48, 0x8b, 0x44, 0x24, 0x28, //0x00000d0b movq $40(%rsp), %rax - 0x0f, 0x82, 0x81, 0x01, 0x00, 0x00, //0x00000d10 jb LBB0_176 - //0x00000d16 LBB0_158 - 0x4c, 0x89, 0xc1, //0x00000d16 movq %r8, %rcx - 0x48, 0x29, 0xc1, //0x00000d19 subq %rax, %rcx - 0x48, 0x2b, 0x4c, 0x24, 0x10, //0x00000d1c subq $16(%rsp), %rcx - 0x48, 0x83, 0xc1, 0x01, //0x00000d21 addq $1, %rcx - 0x48, 0x89, 0x4c, 0x24, 0x30, //0x00000d25 movq %rcx, $48(%rsp) - 0x45, 0x31, 0xc9, //0x00000d2a xorl %r9d, %r9d - 0x90, 0x90, 0x90, //0x00000d2d .p2align 4, 0x90 - //0x00000d30 LBB0_159 - 0x4c, 0x89, 0xdb, //0x00000d30 movq %r11, %rbx - 0x4d, 0x89, 0xd3, //0x00000d33 movq %r10, %r11 - 0x4d, 0x89, 0xe2, //0x00000d36 movq %r12, %r10 - 0xc4, 0x81, 0x7a, 0x6f, 0x04, 0x08, //0x00000d39 vmovdqu (%r8,%r9), %xmm0 - 0xc5, 0xf9, 0x64, 0x0d, 0xf9, 0xf4, 0xff, 0xff, //0x00000d3f vpcmpgtb $-2823(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ - 0xc5, 0xfa, 0x6f, 0x15, 0x01, 0xf5, 0xff, 0xff, //0x00000d47 vmovdqu $-2815(%rip), %xmm2 /* LCPI0_21+0(%rip) */ - 0xc5, 0xe9, 0x64, 0xd0, //0x00000d4f vpcmpgtb %xmm0, %xmm2, %xmm2 - 0xc5, 0xf1, 0xdb, 0xca, //0x00000d53 vpand %xmm2, %xmm1, %xmm1 - 0xc5, 0xf9, 0x74, 0x15, 0x01, 0xf5, 0xff, 0xff, //0x00000d57 vpcmpeqb $-2815(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x1d, 0x09, 0xf5, 0xff, 0xff, //0x00000d5f vpcmpeqb $-2807(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xd2, //0x00000d67 vpor %xmm2, %xmm3, %xmm2 - 0xc5, 0xf9, 0xdb, 0x1d, 0x9d, 0xf4, 0xff, 0xff, //0x00000d6b vpand $-2915(%rip), %xmm0, %xmm3 /* LCPI0_5+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0x05, 0xf5, 0xff, 0xff, //0x00000d73 vpcmpeqb $-2811(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ - 0xc5, 0xe1, 0x74, 0x1d, 0x0d, 0xf5, 0xff, 0xff, //0x00000d7b vpcmpeqb $-2803(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xe0, //0x00000d83 vpor %xmm0, %xmm3, %xmm4 - 0xc5, 0xe9, 0xeb, 0xc9, //0x00000d87 vpor %xmm1, %xmm2, %xmm1 - 0xc5, 0xd9, 0xeb, 0xc9, //0x00000d8b vpor %xmm1, %xmm4, %xmm1 - 0xc5, 0x79, 0xd7, 0xe0, //0x00000d8f vpmovmskb %xmm0, %r12d - 0xc5, 0xf9, 0xd7, 0xd3, //0x00000d93 vpmovmskb %xmm3, %edx - 0xc5, 0xf9, 0xd7, 0xfa, //0x00000d97 vpmovmskb %xmm2, %edi - 0xc5, 0xf9, 0xd7, 0xc1, //0x00000d9b vpmovmskb %xmm1, %eax - 0xf7, 0xd0, //0x00000d9f notl %eax - 0x0f, 0xbc, 0xc8, //0x00000da1 bsfl %eax, %ecx - 0x83, 0xf9, 0x10, //0x00000da4 cmpl $16, %ecx - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00000da7 je LBB0_161 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00000dad movl $-1, %eax - 0xd3, 0xe0, //0x00000db2 shll %cl, %eax - 0xf7, 0xd0, //0x00000db4 notl %eax - 0x41, 0x21, 0xc4, //0x00000db6 andl %eax, %r12d - 0x21, 0xc2, //0x00000db9 andl %eax, %edx - 0x21, 0xf8, //0x00000dbb andl %edi, %eax - 0x89, 0xc7, //0x00000dbd movl %eax, %edi - //0x00000dbf LBB0_161 - 0xc5, 0xfe, 0x6f, 0x25, 0x19, 0xf4, 0xff, 0xff, //0x00000dbf vmovdqu $-3047(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x41, 0x8d, 0x74, 0x24, 0xff, //0x00000dc7 leal $-1(%r12), %esi - 0x44, 0x21, 0xe6, //0x00000dcc andl %r12d, %esi - 0x0f, 0x85, 0xaa, 0x11, 0x00, 0x00, //0x00000dcf jne LBB0_405 - 0x8d, 0x72, 0xff, //0x00000dd5 leal $-1(%rdx), %esi - 0x21, 0xd6, //0x00000dd8 andl %edx, %esi - 0x0f, 0x85, 0x9f, 0x11, 0x00, 0x00, //0x00000dda jne LBB0_405 - 0x8d, 0x77, 0xff, //0x00000de0 leal $-1(%rdi), %esi - 0x21, 0xfe, //0x00000de3 andl %edi, %esi - 0x0f, 0x85, 0x94, 0x11, 0x00, 0x00, //0x00000de5 jne LBB0_405 - 0x45, 0x85, 0xe4, //0x00000deb testl %r12d, %r12d - 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x00000dee je LBB0_167 - 0x41, 0x0f, 0xbc, 0xf4, //0x00000df4 bsfl %r12d, %esi - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00000df8 cmpq $-1, (%rsp) - 0x0f, 0x85, 0x94, 0x12, 0x00, 0x00, //0x00000dfd jne LBB0_413 - 0x48, 0x8b, 0x44, 0x24, 0x30, //0x00000e03 movq $48(%rsp), %rax - 0x4c, 0x01, 0xc8, //0x00000e08 addq %r9, %rax - 0x48, 0x01, 0xc6, //0x00000e0b addq %rax, %rsi - 0x48, 0x89, 0x34, 0x24, //0x00000e0e movq %rsi, (%rsp) - //0x00000e12 LBB0_167 - 0x85, 0xd2, //0x00000e12 testl %edx, %edx - 0x4d, 0x89, 0xd4, //0x00000e14 movq %r10, %r12 - 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00000e17 je LBB0_170 - 0x0f, 0xbc, 0xd2, //0x00000e1d bsfl %edx, %edx - 0x49, 0x83, 0xfb, 0xff, //0x00000e20 cmpq $-1, %r11 - 0x0f, 0x85, 0x31, 0x12, 0x00, 0x00, //0x00000e24 jne LBB0_409 - 0x48, 0x8b, 0x44, 0x24, 0x30, //0x00000e2a movq $48(%rsp), %rax - 0x4c, 0x01, 0xc8, //0x00000e2f addq %r9, %rax - 0x48, 0x01, 0xc2, //0x00000e32 addq %rax, %rdx - 0x49, 0x89, 0xd2, //0x00000e35 movq %rdx, %r10 - 0x85, 0xff, //0x00000e38 testl %edi, %edi - 0x49, 0x89, 0xdb, //0x00000e3a movq %rbx, %r11 - 0x0f, 0x85, 0x1b, 0x00, 0x00, 0x00, //0x00000e3d jne LBB0_171 - 0xe9, 0x31, 0x00, 0x00, 0x00, //0x00000e43 jmp LBB0_173 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000e48 .p2align 4, 0x90 - //0x00000e50 LBB0_170 - 0x4d, 0x89, 0xda, //0x00000e50 movq %r11, %r10 - 0x85, 0xff, //0x00000e53 testl %edi, %edi - 0x49, 0x89, 0xdb, //0x00000e55 movq %rbx, %r11 - 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x00000e58 je LBB0_173 - //0x00000e5e LBB0_171 - 0x0f, 0xbc, 0xd7, //0x00000e5e bsfl %edi, %edx - 0x49, 0x83, 0xfb, 0xff, //0x00000e61 cmpq $-1, %r11 - 0x0f, 0x85, 0xf0, 0x11, 0x00, 0x00, //0x00000e65 jne LBB0_409 - 0x48, 0x8b, 0x44, 0x24, 0x30, //0x00000e6b movq $48(%rsp), %rax - 0x4c, 0x01, 0xc8, //0x00000e70 addq %r9, %rax - 0x48, 0x01, 0xc2, //0x00000e73 addq %rax, %rdx - 0x49, 0x89, 0xd3, //0x00000e76 movq %rdx, %r11 - //0x00000e79 LBB0_173 - 0x83, 0xf9, 0x10, //0x00000e79 cmpl $16, %ecx - 0x0f, 0x85, 0x89, 0x05, 0x00, 0x00, //0x00000e7c jne LBB0_243 - 0x49, 0x83, 0xc5, 0xf0, //0x00000e82 addq $-16, %r13 - 0x49, 0x83, 0xc1, 0x10, //0x00000e86 addq $16, %r9 - 0x49, 0x83, 0xfd, 0x0f, //0x00000e8a cmpq $15, %r13 - 0x0f, 0x87, 0x9c, 0xfe, 0xff, 0xff, //0x00000e8e ja LBB0_159 - 0x4d, 0x01, 0xc8, //0x00000e94 addq %r9, %r8 - //0x00000e97 LBB0_176 - 0x4d, 0x85, 0xed, //0x00000e97 testq %r13, %r13 - 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x00000e9a movq $32(%rsp), %r9 - 0xc5, 0xfe, 0x6f, 0x25, 0x39, 0xf3, 0xff, 0xff, //0x00000e9f vmovdqu $-3271(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x48, 0x8b, 0x44, 0x24, 0x28, //0x00000ea7 movq $40(%rsp), %rax - 0x0f, 0x84, 0x82, 0x05, 0x00, 0x00, //0x00000eac je LBB0_245 - 0x4b, 0x8d, 0x34, 0x28, //0x00000eb2 leaq (%r8,%r13), %rsi - 0x4c, 0x89, 0xc7, //0x00000eb6 movq %r8, %rdi - 0x48, 0x29, 0xc7, //0x00000eb9 subq %rax, %rdi - 0x48, 0x2b, 0x7c, 0x24, 0x10, //0x00000ebc subq $16(%rsp), %rdi - 0x48, 0x83, 0xc7, 0x01, //0x00000ec1 addq $1, %rdi - 0x31, 0xc9, //0x00000ec5 xorl %ecx, %ecx - 0xe9, 0x21, 0x00, 0x00, 0x00, //0x00000ec7 jmp LBB0_181 - //0x00000ecc LBB0_178 - 0x49, 0x83, 0xfb, 0xff, //0x00000ecc cmpq $-1, %r11 - 0x0f, 0x85, 0xb1, 0x10, 0x00, 0x00, //0x00000ed0 jne LBB0_406 - 0x4c, 0x8d, 0x1c, 0x0f, //0x00000ed6 leaq (%rdi,%rcx), %r11 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000eda .p2align 4, 0x90 - //0x00000ee0 LBB0_180 - 0x48, 0x83, 0xc1, 0x01, //0x00000ee0 addq $1, %rcx - 0x49, 0x39, 0xcd, //0x00000ee4 cmpq %rcx, %r13 - 0x0f, 0x84, 0xe3, 0x0d, 0x00, 0x00, //0x00000ee7 je LBB0_375 - //0x00000eed LBB0_181 - 0x41, 0x0f, 0xbe, 0x14, 0x08, //0x00000eed movsbl (%r8,%rcx), %edx - 0x8d, 0x42, 0xd0, //0x00000ef2 leal $-48(%rdx), %eax - 0x83, 0xf8, 0x0a, //0x00000ef5 cmpl $10, %eax - 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x00000ef8 jb LBB0_180 - 0x8d, 0x5a, 0xd5, //0x00000efe leal $-43(%rdx), %ebx - 0x83, 0xfb, 0x1a, //0x00000f01 cmpl $26, %ebx - 0x0f, 0x87, 0x28, 0x00, 0x00, 0x00, //0x00000f04 ja LBB0_186 - 0x48, 0x8d, 0x15, 0xef, 0x2c, 0x00, 0x00, //0x00000f0a leaq $11503(%rip), %rdx /* LJTI0_4+0(%rip) */ - 0x48, 0x63, 0x04, 0x9a, //0x00000f11 movslq (%rdx,%rbx,4), %rax - 0x48, 0x01, 0xd0, //0x00000f15 addq %rdx, %rax - 0xff, 0xe0, //0x00000f18 jmpq *%rax - //0x00000f1a LBB0_184 - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00000f1a cmpq $-1, (%rsp) - 0x0f, 0x85, 0x62, 0x10, 0x00, 0x00, //0x00000f1f jne LBB0_406 - 0x48, 0x8d, 0x04, 0x0f, //0x00000f25 leaq (%rdi,%rcx), %rax - 0x48, 0x89, 0x04, 0x24, //0x00000f29 movq %rax, (%rsp) - 0xe9, 0xae, 0xff, 0xff, 0xff, //0x00000f2d jmp LBB0_180 - //0x00000f32 LBB0_186 - 0x83, 0xfa, 0x65, //0x00000f32 cmpl $101, %edx - 0x0f, 0x85, 0xf6, 0x04, 0x00, 0x00, //0x00000f35 jne LBB0_244 - //0x00000f3b LBB0_187 - 0x49, 0x83, 0xfa, 0xff, //0x00000f3b cmpq $-1, %r10 - 0x0f, 0x85, 0x42, 0x10, 0x00, 0x00, //0x00000f3f jne LBB0_406 - 0x4c, 0x8d, 0x14, 0x0f, //0x00000f45 leaq (%rdi,%rcx), %r10 - 0xe9, 0x92, 0xff, 0xff, 0xff, //0x00000f49 jmp LBB0_180 - //0x00000f4e LBB0_120 - 0x83, 0xff, 0x22, //0x00000f4e cmpl $34, %edi - 0x0f, 0x84, 0x3f, 0x00, 0x00, 0x00, //0x00000f51 je LBB0_121 - //0x00000f57 LBB0_118 - 0x83, 0xff, 0x7d, //0x00000f57 cmpl $125, %edi - 0x0f, 0x85, 0x71, 0x25, 0x00, 0x00, //0x00000f5a jne LBB0_637 - //0x00000f60 LBB0_92 - 0x49, 0x89, 0x11, //0x00000f60 movq %rdx, (%r9) - 0x4d, 0x89, 0xf7, //0x00000f63 movq %r14, %r15 - 0x48, 0x85, 0xd2, //0x00000f66 testq %rdx, %rdx - 0x0f, 0x85, 0xa1, 0xf7, 0xff, 0xff, //0x00000f69 jne LBB0_57 - 0xe9, 0x64, 0x25, 0x00, 0x00, //0x00000f6f jmp LBB0_638 - //0x00000f74 LBB0_189 - 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00000f74 cmpq $4095, %rsi - 0x0f, 0x8f, 0x27, 0x1e, 0x00, 0x00, //0x00000f7b jg LBB0_650 - 0x48, 0x8d, 0x4e, 0x01, //0x00000f81 leaq $1(%rsi), %rcx - 0x49, 0x89, 0x09, //0x00000f85 movq %rcx, (%r9) - 0x49, 0xc7, 0x44, 0xf1, 0x08, 0x00, 0x00, 0x00, 0x00, //0x00000f88 movq $0, $8(%r9,%rsi,8) - 0xe9, 0x5a, 0xf7, 0xff, 0xff, //0x00000f91 jmp LBB0_55 - //0x00000f96 LBB0_121 - 0x49, 0xc7, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x00, //0x00000f96 movq $2, (%r9,%rsi,8) - 0x4d, 0x8b, 0x03, //0x00000f9e movq (%r11), %r8 - 0x4d, 0x8b, 0x65, 0x08, //0x00000fa1 movq $8(%r13), %r12 - 0x4c, 0x89, 0xe3, //0x00000fa5 movq %r12, %rbx - 0x41, 0xf6, 0xc2, 0x20, //0x00000fa8 testb $32, %r10b - 0x0f, 0x85, 0xc7, 0x02, 0x00, 0x00, //0x00000fac jne LBB0_219 - 0x4c, 0x29, 0xc3, //0x00000fb2 subq %r8, %rbx - 0x0f, 0x84, 0xed, 0x26, 0x00, 0x00, //0x00000fb5 je LBB0_670 - 0x48, 0x83, 0xfb, 0x40, //0x00000fbb cmpq $64, %rbx - 0x0f, 0x82, 0xdc, 0x12, 0x00, 0x00, //0x00000fbf jb LBB0_434 - 0x4c, 0x89, 0xc6, //0x00000fc5 movq %r8, %rsi - 0x48, 0xf7, 0xd6, //0x00000fc8 notq %rsi - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00000fcb movq $-1, (%rsp) - 0x4d, 0x89, 0xc7, //0x00000fd3 movq %r8, %r15 - 0x45, 0x31, 0xd2, //0x00000fd6 xorl %r10d, %r10d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000fd9 .p2align 4, 0x90 - //0x00000fe0 LBB0_125 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00000fe0 movq $16(%rsp), %rax - 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x38, //0x00000fe5 vmovdqu (%rax,%r15), %ymm0 - 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x38, 0x20, //0x00000feb vmovdqu $32(%rax,%r15), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x00000ff2 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x00000ff6 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x00000ffa vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00000ffe vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xc7, //0x00001002 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x00001006 vpmovmskb %ymm0, %edx - 0xc5, 0xf5, 0x74, 0xc7, //0x0000100a vpcmpeqb %ymm7, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc8, //0x0000100e vpmovmskb %ymm0, %ecx - 0x48, 0xc1, 0xe0, 0x20, //0x00001012 shlq $32, %rax - 0x48, 0x09, 0xc7, //0x00001016 orq %rax, %rdi - 0x48, 0xc1, 0xe1, 0x20, //0x00001019 shlq $32, %rcx - 0x48, 0x09, 0xca, //0x0000101d orq %rcx, %rdx - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x00001020 jne LBB0_193 - 0x4d, 0x85, 0xd2, //0x00001026 testq %r10, %r10 - 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x00001029 jne LBB0_195 - 0x45, 0x31, 0xd2, //0x0000102f xorl %r10d, %r10d - 0x48, 0x85, 0xff, //0x00001032 testq %rdi, %rdi - 0x0f, 0x85, 0xa9, 0x00, 0x00, 0x00, //0x00001035 jne LBB0_197 - //0x0000103b LBB0_128 - 0x48, 0x83, 0xc3, 0xc0, //0x0000103b addq $-64, %rbx - 0x48, 0x83, 0xc6, 0xc0, //0x0000103f addq $-64, %rsi - 0x49, 0x83, 0xc7, 0x40, //0x00001043 addq $64, %r15 - 0x48, 0x83, 0xfb, 0x3f, //0x00001047 cmpq $63, %rbx - 0x0f, 0x87, 0x8f, 0xff, 0xff, 0xff, //0x0000104b ja LBB0_125 - 0xe9, 0x60, 0x0f, 0x00, 0x00, //0x00001051 jmp LBB0_129 - //0x00001056 LBB0_193 - 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x00001056 movq %r9, $32(%rsp) - 0x4d, 0x89, 0xe9, //0x0000105b movq %r13, %r9 - 0x4d, 0x89, 0xdd, //0x0000105e movq %r11, %r13 - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00001061 cmpq $-1, (%rsp) - 0x0f, 0x85, 0x1b, 0x00, 0x00, 0x00, //0x00001066 jne LBB0_196 - 0x48, 0x0f, 0xbc, 0xc2, //0x0000106c bsfq %rdx, %rax - 0x4c, 0x01, 0xf8, //0x00001070 addq %r15, %rax - 0x48, 0x89, 0x04, 0x24, //0x00001073 movq %rax, (%rsp) - 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00001077 jmp LBB0_196 - //0x0000107c LBB0_195 - 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x0000107c movq %r9, $32(%rsp) - 0x4d, 0x89, 0xe9, //0x00001081 movq %r13, %r9 - 0x4d, 0x89, 0xdd, //0x00001084 movq %r11, %r13 - //0x00001087 LBB0_196 - 0x4c, 0x89, 0xd0, //0x00001087 movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x0000108a notq %rax - 0x48, 0x21, 0xd0, //0x0000108d andq %rdx, %rax - 0x4c, 0x8d, 0x1c, 0x00, //0x00001090 leaq (%rax,%rax), %r11 - 0x4d, 0x09, 0xd3, //0x00001094 orq %r10, %r11 - 0x4c, 0x89, 0xd9, //0x00001097 movq %r11, %rcx - 0x48, 0xf7, 0xd1, //0x0000109a notq %rcx - 0x48, 0x21, 0xd1, //0x0000109d andq %rdx, %rcx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000010a0 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd1, //0x000010aa andq %rdx, %rcx - 0x45, 0x31, 0xd2, //0x000010ad xorl %r10d, %r10d - 0x48, 0x01, 0xc1, //0x000010b0 addq %rax, %rcx - 0x41, 0x0f, 0x92, 0xc2, //0x000010b3 setb %r10b - 0x48, 0x01, 0xc9, //0x000010b7 addq %rcx, %rcx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000010ba movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc1, //0x000010c4 xorq %rax, %rcx - 0x4c, 0x21, 0xd9, //0x000010c7 andq %r11, %rcx - 0x48, 0xf7, 0xd1, //0x000010ca notq %rcx - 0x48, 0x21, 0xcf, //0x000010cd andq %rcx, %rdi - 0x4d, 0x89, 0xeb, //0x000010d0 movq %r13, %r11 - 0x4d, 0x89, 0xcd, //0x000010d3 movq %r9, %r13 - 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x000010d6 movq $32(%rsp), %r9 - 0x48, 0x85, 0xff, //0x000010db testq %rdi, %rdi - 0x0f, 0x84, 0x57, 0xff, 0xff, 0xff, //0x000010de je LBB0_128 - //0x000010e4 LBB0_197 - 0x4c, 0x0f, 0xbc, 0xff, //0x000010e4 bsfq %rdi, %r15 - 0x49, 0x29, 0xf7, //0x000010e8 subq %rsi, %r15 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000010eb movq $24(%rsp), %r10 - 0xe9, 0x42, 0x04, 0x00, 0x00, //0x000010f0 jmp LBB0_259 - //0x000010f5 LBB0_198 - 0x4c, 0x89, 0xc8, //0x000010f5 movq %r9, %rax - 0x4d, 0x89, 0xe9, //0x000010f8 movq %r13, %r9 - 0x4d, 0x89, 0xe5, //0x000010fb movq %r12, %r13 - 0x4d, 0x29, 0xc5, //0x000010fe subq %r8, %r13 - 0x0f, 0x84, 0xa1, 0x25, 0x00, 0x00, //0x00001101 je LBB0_670 - 0x49, 0x83, 0xfd, 0x40, //0x00001107 cmpq $64, %r13 - 0x0f, 0x82, 0x32, 0x11, 0x00, 0x00, //0x0000110b jb LBB0_428 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00001111 movq $-1, (%rsp) - 0x4d, 0x89, 0xc7, //0x00001119 movq %r8, %r15 - 0x45, 0x31, 0xdb, //0x0000111c xorl %r11d, %r11d - 0x90, //0x0000111f .p2align 4, 0x90 - //0x00001120 LBB0_201 - 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00001120 movq $16(%rsp), %rcx - 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x39, //0x00001125 vmovdqu (%rcx,%r15), %ymm0 - 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x39, 0x20, //0x0000112b vmovdqu $32(%rcx,%r15), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x00001132 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x00001136 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x0000113a vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xca, //0x0000113e vpmovmskb %ymm2, %ecx - 0xc5, 0xfd, 0x74, 0xd7, //0x00001142 vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00001146 vpmovmskb %ymm2, %edx - 0xc5, 0xf5, 0x74, 0xd7, //0x0000114a vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xda, //0x0000114e vpmovmskb %ymm2, %ebx - 0xc5, 0xbd, 0x64, 0xd1, //0x00001152 vpcmpgtb %ymm1, %ymm8, %ymm2 - 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00001156 vpcmpgtb %ymm9, %ymm1, %ymm1 - 0xc5, 0xed, 0xdb, 0xc9, //0x0000115b vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x0000115f vpmovmskb %ymm1, %esi - 0x48, 0xc1, 0xe1, 0x20, //0x00001163 shlq $32, %rcx - 0x48, 0x09, 0xcf, //0x00001167 orq %rcx, %rdi - 0x48, 0xc1, 0xe3, 0x20, //0x0000116a shlq $32, %rbx - 0x48, 0xc1, 0xe6, 0x20, //0x0000116e shlq $32, %rsi - 0x48, 0x09, 0xda, //0x00001172 orq %rbx, %rdx - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00001175 jne LBB0_212 - 0x4d, 0x85, 0xdb, //0x0000117b testq %r11, %r11 - 0x0f, 0x85, 0x56, 0x00, 0x00, 0x00, //0x0000117e jne LBB0_214 - 0x45, 0x31, 0xdb, //0x00001184 xorl %r11d, %r11d - //0x00001187 LBB0_204 - 0xc5, 0xbd, 0x64, 0xc8, //0x00001187 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x0000118b vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x00001190 vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc8, //0x00001194 vpmovmskb %ymm0, %ecx - 0x48, 0x09, 0xce, //0x00001198 orq %rcx, %rsi - 0x48, 0x85, 0xff, //0x0000119b testq %rdi, %rdi - 0x0f, 0x85, 0x89, 0x00, 0x00, 0x00, //0x0000119e jne LBB0_215 - 0x48, 0x85, 0xf6, //0x000011a4 testq %rsi, %rsi - 0x0f, 0x85, 0x8a, 0x23, 0x00, 0x00, //0x000011a7 jne LBB0_643 - 0x49, 0x83, 0xc5, 0xc0, //0x000011ad addq $-64, %r13 - 0x49, 0x83, 0xc7, 0x40, //0x000011b1 addq $64, %r15 - 0x49, 0x83, 0xfd, 0x3f, //0x000011b5 cmpq $63, %r13 - 0x0f, 0x87, 0x61, 0xff, 0xff, 0xff, //0x000011b9 ja LBB0_201 - 0xe9, 0x58, 0x0d, 0x00, 0x00, //0x000011bf jmp LBB0_207 - //0x000011c4 LBB0_212 - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x000011c4 cmpq $-1, (%rsp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000011c9 jne LBB0_214 - 0x48, 0x0f, 0xbc, 0xca, //0x000011cf bsfq %rdx, %rcx - 0x4c, 0x01, 0xf9, //0x000011d3 addq %r15, %rcx - 0x48, 0x89, 0x0c, 0x24, //0x000011d6 movq %rcx, (%rsp) - //0x000011da LBB0_214 - 0x4c, 0x89, 0xd9, //0x000011da movq %r11, %rcx - 0x48, 0xf7, 0xd1, //0x000011dd notq %rcx - 0x48, 0x21, 0xd1, //0x000011e0 andq %rdx, %rcx - 0x4c, 0x8d, 0x14, 0x09, //0x000011e3 leaq (%rcx,%rcx), %r10 - 0x4d, 0x09, 0xda, //0x000011e7 orq %r11, %r10 - 0x4c, 0x89, 0xd3, //0x000011ea movq %r10, %rbx - 0x48, 0xf7, 0xd3, //0x000011ed notq %rbx - 0x48, 0x21, 0xd3, //0x000011f0 andq %rdx, %rbx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000011f3 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd3, //0x000011fd andq %rdx, %rbx - 0x45, 0x31, 0xdb, //0x00001200 xorl %r11d, %r11d - 0x48, 0x01, 0xcb, //0x00001203 addq %rcx, %rbx - 0x41, 0x0f, 0x92, 0xc3, //0x00001206 setb %r11b - 0x48, 0x01, 0xdb, //0x0000120a addq %rbx, %rbx - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000120d movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xcb, //0x00001217 xorq %rcx, %rbx - 0x4c, 0x21, 0xd3, //0x0000121a andq %r10, %rbx - 0x48, 0xf7, 0xd3, //0x0000121d notq %rbx - 0x48, 0x21, 0xdf, //0x00001220 andq %rbx, %rdi - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00001223 movq $24(%rsp), %r10 - 0xe9, 0x5a, 0xff, 0xff, 0xff, //0x00001228 jmp LBB0_204 - //0x0000122d LBB0_215 - 0x48, 0x0f, 0xbc, 0xcf, //0x0000122d bsfq %rdi, %rcx - 0x48, 0x85, 0xf6, //0x00001231 testq %rsi, %rsi - 0x0f, 0x84, 0x97, 0x01, 0x00, 0x00, //0x00001234 je LBB0_238 - 0x48, 0x0f, 0xbc, 0xd6, //0x0000123a bsfq %rsi, %rdx - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x0000123e movq $8(%rsp), %r11 - 0x4d, 0x89, 0xcd, //0x00001243 movq %r9, %r13 - 0x48, 0x39, 0xca, //0x00001246 cmpq %rcx, %rdx - 0x0f, 0x83, 0x98, 0x01, 0x00, 0x00, //0x00001249 jae LBB0_239 - 0xe9, 0x6f, 0x24, 0x00, 0x00, //0x0000124f jmp LBB0_217 - //0x00001254 LBB0_218 - 0x4c, 0x01, 0xc1, //0x00001254 addq %r8, %rcx - 0x4c, 0x01, 0xe1, //0x00001257 addq %r12, %rcx - 0xc5, 0xf8, 0x77, //0x0000125a vzeroupper - 0x49, 0x89, 0xc8, //0x0000125d movq %rcx, %r8 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00001260 movq $-1, %rcx - 0x48, 0x8b, 0x14, 0x24, //0x00001267 movq (%rsp), %rdx - 0x48, 0x85, 0xd2, //0x0000126b testq %rdx, %rdx - 0x0f, 0x85, 0xd4, 0x01, 0x00, 0x00, //0x0000126e jne LBB0_246 - 0xe9, 0x46, 0x22, 0x00, 0x00, //0x00001274 jmp LBB0_636 - //0x00001279 LBB0_219 - 0x4c, 0x29, 0xc3, //0x00001279 subq %r8, %rbx - 0x0f, 0x84, 0x26, 0x24, 0x00, 0x00, //0x0000127c je LBB0_670 - 0x48, 0x83, 0xfb, 0x40, //0x00001282 cmpq $64, %rbx - 0x0f, 0x82, 0x38, 0x10, 0x00, 0x00, //0x00001286 jb LBB0_435 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x0000128c movq $-1, (%rsp) - 0x4d, 0x89, 0xc7, //0x00001294 movq %r8, %r15 - 0x45, 0x31, 0xdb, //0x00001297 xorl %r11d, %r11d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000129a .p2align 4, 0x90 - //0x000012a0 LBB0_222 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x000012a0 movq $16(%rsp), %rax - 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x38, //0x000012a5 vmovdqu (%rax,%r15), %ymm0 - 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x38, 0x20, //0x000012ab vmovdqu $32(%rax,%r15), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x000012b2 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x000012b6 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x000012ba vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x000012be vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xd7, //0x000012c2 vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x000012c6 vpmovmskb %ymm2, %edx - 0xc5, 0xf5, 0x74, 0xd7, //0x000012ca vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xca, //0x000012ce vpmovmskb %ymm2, %ecx - 0xc5, 0xbd, 0x64, 0xd1, //0x000012d2 vpcmpgtb %ymm1, %ymm8, %ymm2 - 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x000012d6 vpcmpgtb %ymm9, %ymm1, %ymm1 - 0xc5, 0xed, 0xdb, 0xc9, //0x000012db vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x000012df vpmovmskb %ymm1, %esi - 0x48, 0xc1, 0xe0, 0x20, //0x000012e3 shlq $32, %rax - 0x48, 0x09, 0xc7, //0x000012e7 orq %rax, %rdi - 0x48, 0xc1, 0xe1, 0x20, //0x000012ea shlq $32, %rcx - 0x48, 0xc1, 0xe6, 0x20, //0x000012ee shlq $32, %rsi - 0x48, 0x09, 0xca, //0x000012f2 orq %rcx, %rdx - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x000012f5 jne LBB0_233 - 0x4d, 0x85, 0xdb, //0x000012fb testq %r11, %r11 - 0x0f, 0x85, 0x56, 0x00, 0x00, 0x00, //0x000012fe jne LBB0_235 - 0x45, 0x31, 0xdb, //0x00001304 xorl %r11d, %r11d - //0x00001307 LBB0_225 - 0xc5, 0xbd, 0x64, 0xc8, //0x00001307 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x0000130b vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x00001310 vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x00001314 vpmovmskb %ymm0, %eax - 0x48, 0x09, 0xc6, //0x00001318 orq %rax, %rsi - 0x48, 0x85, 0xff, //0x0000131b testq %rdi, %rdi - 0x0f, 0x85, 0x89, 0x00, 0x00, 0x00, //0x0000131e jne LBB0_236 - 0x48, 0x85, 0xf6, //0x00001324 testq %rsi, %rsi - 0x0f, 0x85, 0x0a, 0x22, 0x00, 0x00, //0x00001327 jne LBB0_643 - 0x48, 0x83, 0xc3, 0xc0, //0x0000132d addq $-64, %rbx - 0x49, 0x83, 0xc7, 0x40, //0x00001331 addq $64, %r15 - 0x48, 0x83, 0xfb, 0x3f, //0x00001335 cmpq $63, %rbx - 0x0f, 0x87, 0x61, 0xff, 0xff, 0xff, //0x00001339 ja LBB0_222 - 0xe9, 0xcd, 0x0c, 0x00, 0x00, //0x0000133f jmp LBB0_228 - //0x00001344 LBB0_233 - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00001344 cmpq $-1, (%rsp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00001349 jne LBB0_235 - 0x48, 0x0f, 0xbc, 0xc2, //0x0000134f bsfq %rdx, %rax - 0x4c, 0x01, 0xf8, //0x00001353 addq %r15, %rax - 0x48, 0x89, 0x04, 0x24, //0x00001356 movq %rax, (%rsp) - //0x0000135a LBB0_235 - 0x4c, 0x89, 0xd8, //0x0000135a movq %r11, %rax - 0x48, 0xf7, 0xd0, //0x0000135d notq %rax - 0x48, 0x21, 0xd0, //0x00001360 andq %rdx, %rax - 0x4c, 0x8d, 0x14, 0x00, //0x00001363 leaq (%rax,%rax), %r10 - 0x4d, 0x09, 0xda, //0x00001367 orq %r11, %r10 - 0x4c, 0x89, 0xd1, //0x0000136a movq %r10, %rcx - 0x48, 0xf7, 0xd1, //0x0000136d notq %rcx - 0x48, 0x21, 0xd1, //0x00001370 andq %rdx, %rcx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001373 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd1, //0x0000137d andq %rdx, %rcx - 0x45, 0x31, 0xdb, //0x00001380 xorl %r11d, %r11d - 0x48, 0x01, 0xc1, //0x00001383 addq %rax, %rcx - 0x41, 0x0f, 0x92, 0xc3, //0x00001386 setb %r11b - 0x48, 0x01, 0xc9, //0x0000138a addq %rcx, %rcx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000138d movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc1, //0x00001397 xorq %rax, %rcx - 0x4c, 0x21, 0xd1, //0x0000139a andq %r10, %rcx - 0x48, 0xf7, 0xd1, //0x0000139d notq %rcx - 0x48, 0x21, 0xcf, //0x000013a0 andq %rcx, %rdi - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000013a3 movq $24(%rsp), %r10 - 0xe9, 0x5a, 0xff, 0xff, 0xff, //0x000013a8 jmp LBB0_225 - //0x000013ad LBB0_236 - 0x48, 0x0f, 0xbc, 0xcf, //0x000013ad bsfq %rdi, %rcx - 0x48, 0x85, 0xf6, //0x000013b1 testq %rsi, %rsi - 0x0f, 0x84, 0x63, 0x01, 0x00, 0x00, //0x000013b4 je LBB0_257 - 0x48, 0x0f, 0xbc, 0xd6, //0x000013ba bsfq %rsi, %rdx - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x000013be movq $8(%rsp), %r11 - 0x48, 0x39, 0xca, //0x000013c3 cmpq %rcx, %rdx - 0x0f, 0x83, 0x64, 0x01, 0x00, 0x00, //0x000013c6 jae LBB0_258 - 0xe9, 0xf2, 0x22, 0x00, 0x00, //0x000013cc jmp LBB0_217 - //0x000013d1 LBB0_238 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x000013d1 movl $64, %edx - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x000013d6 movq $8(%rsp), %r11 - 0x4d, 0x89, 0xcd, //0x000013db movq %r9, %r13 - 0x48, 0x39, 0xca, //0x000013de cmpq %rcx, %rdx - 0x0f, 0x82, 0xdc, 0x22, 0x00, 0x00, //0x000013e1 jb LBB0_217 - //0x000013e7 LBB0_239 - 0x49, 0x89, 0xc1, //0x000013e7 movq %rax, %r9 - 0x49, 0x01, 0xcf, //0x000013ea addq %rcx, %r15 - 0x49, 0x83, 0xc7, 0x01, //0x000013ed addq $1, %r15 - //0x000013f1 LBB0_240 - 0x4d, 0x85, 0xff, //0x000013f1 testq %r15, %r15 - 0x0f, 0x88, 0xba, 0x19, 0x00, 0x00, //0x000013f4 js LBB0_380 - //0x000013fa LBB0_241 - 0x4d, 0x89, 0x3b, //0x000013fa movq %r15, (%r11) - 0x4d, 0x85, 0xc0, //0x000013fd testq %r8, %r8 - 0x0f, 0x8f, 0xea, 0xf2, 0xff, 0xff, //0x00001400 jg LBB0_55 - 0xe9, 0xc9, 0x19, 0x00, 0x00, //0x00001406 jmp LBB0_242 - //0x0000140b LBB0_243 - 0x89, 0xc8, //0x0000140b movl %ecx, %eax - 0x49, 0x01, 0xc0, //0x0000140d addq %rax, %r8 - 0x4d, 0x01, 0xc8, //0x00001410 addq %r9, %r8 - 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x00001413 movq $32(%rsp), %r9 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00001418 movq $-1, %rcx - 0x48, 0x8b, 0x14, 0x24, //0x0000141f movq (%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00001423 testq %rdx, %rdx - 0x0f, 0x85, 0x1c, 0x00, 0x00, 0x00, //0x00001426 jne LBB0_246 - 0xe9, 0x8e, 0x20, 0x00, 0x00, //0x0000142c jmp LBB0_636 - //0x00001431 LBB0_244 - 0x49, 0x01, 0xc8, //0x00001431 addq %rcx, %r8 - //0x00001434 LBB0_245 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00001434 movq $-1, %rcx - 0x48, 0x8b, 0x14, 0x24, //0x0000143b movq (%rsp), %rdx - 0x48, 0x85, 0xd2, //0x0000143f testq %rdx, %rdx - 0x0f, 0x84, 0x77, 0x20, 0x00, 0x00, //0x00001442 je LBB0_636 - //0x00001448 LBB0_246 - 0x4d, 0x85, 0xdb, //0x00001448 testq %r11, %r11 - 0x0f, 0x84, 0x6e, 0x20, 0x00, 0x00, //0x0000144b je LBB0_636 - 0x4d, 0x85, 0xd2, //0x00001451 testq %r10, %r10 - 0x0f, 0x84, 0x65, 0x20, 0x00, 0x00, //0x00001454 je LBB0_636 - 0x4d, 0x29, 0xe0, //0x0000145a subq %r12, %r8 - 0x49, 0x8d, 0x48, 0xff, //0x0000145d leaq $-1(%r8), %rcx - 0x48, 0x39, 0xca, //0x00001461 cmpq %rcx, %rdx - 0x0f, 0x84, 0xf3, 0xf1, 0xff, 0xff, //0x00001464 je LBB0_634 - 0x49, 0x39, 0xcb, //0x0000146a cmpq %rcx, %r11 - 0x0f, 0x84, 0xea, 0xf1, 0xff, 0xff, //0x0000146d je LBB0_634 - 0x49, 0x39, 0xca, //0x00001473 cmpq %rcx, %r10 - 0x0f, 0x84, 0xe1, 0xf1, 0xff, 0xff, //0x00001476 je LBB0_634 - 0x4d, 0x85, 0xdb, //0x0000147c testq %r11, %r11 - 0xc5, 0xfe, 0x6f, 0x2d, 0x79, 0xeb, 0xff, 0xff, //0x0000147f vmovdqu $-5255(%rip), %ymm5 /* LCPI0_0+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0xf1, 0xeb, 0xff, 0xff, //0x00001487 vmovdqu $-5135(%rip), %ymm6 /* LCPI0_7+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x09, 0xec, 0xff, 0xff, //0x0000148f vmovdqu $-5111(%rip), %ymm7 /* LCPI0_8+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x81, 0xec, 0xff, 0xff, //0x00001497 vmovdqu $-4991(%rip), %ymm8 /* LCPI0_13+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000149f vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0x94, 0xec, 0xff, 0xff, //0x000014a4 vmovdqu $-4972(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0xac, 0xec, 0xff, 0xff, //0x000014ac vmovdqu $-4948(%rip), %ymm11 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0xc4, 0xec, 0xff, 0xff, //0x000014b4 vmovdqu $-4924(%rip), %ymm12 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0xdc, 0xec, 0xff, 0xff, //0x000014bc vmovdqu $-4900(%rip), %ymm13 /* LCPI0_17+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0x74, 0xeb, 0xff, 0xff, //0x000014c4 vmovdqu $-5260(%rip), %ymm14 /* LCPI0_2+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0xec, 0xec, 0xff, 0xff, //0x000014cc vmovdqu $-4884(%rip), %ymm15 /* LCPI0_18+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x04, 0xed, 0xff, 0xff, //0x000014d4 vmovdqu $-4860(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x0f, 0x8e, 0x18, 0x00, 0x00, 0x00, //0x000014dc jle LBB0_254 - 0x49, 0x8d, 0x43, 0xff, //0x000014e2 leaq $-1(%r11), %rax - 0x49, 0x39, 0xc2, //0x000014e6 cmpq %rax, %r10 - 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x000014e9 je LBB0_254 - 0x49, 0xf7, 0xd3, //0x000014ef notq %r11 - 0x4d, 0x89, 0xd8, //0x000014f2 movq %r11, %r8 - 0xe9, 0xa4, 0x0a, 0x00, 0x00, //0x000014f5 jmp LBB0_407 - //0x000014fa LBB0_254 - 0x48, 0x89, 0xd0, //0x000014fa movq %rdx, %rax - 0x4c, 0x09, 0xd0, //0x000014fd orq %r10, %rax - 0x0f, 0x99, 0xc1, //0x00001500 setns %cl - 0x0f, 0x88, 0xe1, 0x02, 0x00, 0x00, //0x00001503 js LBB0_302 - 0x4c, 0x39, 0xd2, //0x00001509 cmpq %r10, %rdx - 0x0f, 0x8c, 0xd8, 0x02, 0x00, 0x00, //0x0000150c jl LBB0_302 - 0x48, 0xf7, 0xd2, //0x00001512 notq %rdx - 0x49, 0x89, 0xd0, //0x00001515 movq %rdx, %r8 - 0xe9, 0x81, 0x0a, 0x00, 0x00, //0x00001518 jmp LBB0_407 - //0x0000151d LBB0_257 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000151d movl $64, %edx - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00001522 movq $8(%rsp), %r11 - 0x48, 0x39, 0xca, //0x00001527 cmpq %rcx, %rdx - 0x0f, 0x82, 0x93, 0x21, 0x00, 0x00, //0x0000152a jb LBB0_217 - //0x00001530 LBB0_258 - 0x49, 0x01, 0xcf, //0x00001530 addq %rcx, %r15 - 0x49, 0x83, 0xc7, 0x01, //0x00001533 addq $1, %r15 - //0x00001537 LBB0_259 - 0x4d, 0x85, 0xff, //0x00001537 testq %r15, %r15 - 0x0f, 0x88, 0x74, 0x18, 0x00, 0x00, //0x0000153a js LBB0_380 - 0x4d, 0x89, 0x3b, //0x00001540 movq %r15, (%r11) - 0x4d, 0x85, 0xc0, //0x00001543 testq %r8, %r8 - 0x0f, 0x8e, 0x88, 0x18, 0x00, 0x00, //0x00001546 jle LBB0_242 - 0x49, 0x8b, 0x09, //0x0000154c movq (%r9), %rcx - 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x0000154f cmpq $4095, %rcx - 0x0f, 0x8f, 0x4c, 0x18, 0x00, 0x00, //0x00001556 jg LBB0_650 - 0x48, 0x8d, 0x41, 0x01, //0x0000155c leaq $1(%rcx), %rax - 0x49, 0x89, 0x01, //0x00001560 movq %rax, (%r9) - 0x49, 0xc7, 0x44, 0xc9, 0x08, 0x04, 0x00, 0x00, 0x00, //0x00001563 movq $4, $8(%r9,%rcx,8) - 0xe9, 0x7f, 0xf1, 0xff, 0xff, //0x0000156c jmp LBB0_55 - //0x00001571 LBB0_263 - 0x4d, 0x8b, 0x03, //0x00001571 movq (%r11), %r8 - 0x4d, 0x8b, 0x65, 0x08, //0x00001574 movq $8(%r13), %r12 - 0x4c, 0x89, 0xe3, //0x00001578 movq %r12, %rbx - 0x41, 0xf6, 0xc2, 0x20, //0x0000157b testb $32, %r10b - 0x0f, 0x85, 0x7e, 0x02, 0x00, 0x00, //0x0000157f jne LBB0_303 - 0x4c, 0x29, 0xc3, //0x00001585 subq %r8, %rbx - 0x0f, 0x84, 0x1a, 0x21, 0x00, 0x00, //0x00001588 je LBB0_670 - 0x48, 0x83, 0xfb, 0x40, //0x0000158e cmpq $64, %rbx - 0x0f, 0x82, 0x7c, 0x0d, 0x00, 0x00, //0x00001592 jb LBB0_438 - 0x4c, 0x89, 0xc6, //0x00001598 movq %r8, %rsi - 0x48, 0xf7, 0xd6, //0x0000159b notq %rsi - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x0000159e movq $-1, (%rsp) - 0x4d, 0x89, 0xc7, //0x000015a6 movq %r8, %r15 - 0x45, 0x31, 0xd2, //0x000015a9 xorl %r10d, %r10d - 0x90, 0x90, 0x90, 0x90, //0x000015ac .p2align 4, 0x90 - //0x000015b0 LBB0_267 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x000015b0 movq $16(%rsp), %rax - 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x38, //0x000015b5 vmovdqu (%rax,%r15), %ymm0 - 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x38, 0x20, //0x000015bb vmovdqu $32(%rax,%r15), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x000015c2 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x000015c6 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x000015ca vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x000015ce vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xc7, //0x000015d2 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x000015d6 vpmovmskb %ymm0, %edx - 0xc5, 0xf5, 0x74, 0xc7, //0x000015da vpcmpeqb %ymm7, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc8, //0x000015de vpmovmskb %ymm0, %ecx - 0x48, 0xc1, 0xe0, 0x20, //0x000015e2 shlq $32, %rax - 0x48, 0x09, 0xc7, //0x000015e6 orq %rax, %rdi - 0x48, 0xc1, 0xe1, 0x20, //0x000015e9 shlq $32, %rcx - 0x48, 0x09, 0xca, //0x000015ed orq %rcx, %rdx - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000015f0 jne LBB0_276 - 0x4d, 0x85, 0xd2, //0x000015f6 testq %r10, %r10 - 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x000015f9 jne LBB0_278 - 0x45, 0x31, 0xd2, //0x000015ff xorl %r10d, %r10d - 0x48, 0x85, 0xff, //0x00001602 testq %rdi, %rdi - 0x0f, 0x85, 0xa9, 0x00, 0x00, 0x00, //0x00001605 jne LBB0_280 - //0x0000160b LBB0_270 - 0x48, 0x83, 0xc3, 0xc0, //0x0000160b addq $-64, %rbx - 0x48, 0x83, 0xc6, 0xc0, //0x0000160f addq $-64, %rsi - 0x49, 0x83, 0xc7, 0x40, //0x00001613 addq $64, %r15 - 0x48, 0x83, 0xfb, 0x3f, //0x00001617 cmpq $63, %rbx - 0x0f, 0x87, 0x8f, 0xff, 0xff, 0xff, //0x0000161b ja LBB0_267 - 0xe9, 0xaa, 0x0a, 0x00, 0x00, //0x00001621 jmp LBB0_271 - //0x00001626 LBB0_276 - 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x00001626 movq %r9, $32(%rsp) - 0x4d, 0x89, 0xe9, //0x0000162b movq %r13, %r9 - 0x4d, 0x89, 0xdd, //0x0000162e movq %r11, %r13 - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00001631 cmpq $-1, (%rsp) - 0x0f, 0x85, 0x1b, 0x00, 0x00, 0x00, //0x00001636 jne LBB0_279 - 0x48, 0x0f, 0xbc, 0xc2, //0x0000163c bsfq %rdx, %rax - 0x4c, 0x01, 0xf8, //0x00001640 addq %r15, %rax - 0x48, 0x89, 0x04, 0x24, //0x00001643 movq %rax, (%rsp) - 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00001647 jmp LBB0_279 - //0x0000164c LBB0_278 - 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x0000164c movq %r9, $32(%rsp) - 0x4d, 0x89, 0xe9, //0x00001651 movq %r13, %r9 - 0x4d, 0x89, 0xdd, //0x00001654 movq %r11, %r13 - //0x00001657 LBB0_279 - 0x4c, 0x89, 0xd0, //0x00001657 movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x0000165a notq %rax - 0x48, 0x21, 0xd0, //0x0000165d andq %rdx, %rax - 0x4c, 0x8d, 0x1c, 0x00, //0x00001660 leaq (%rax,%rax), %r11 - 0x4d, 0x09, 0xd3, //0x00001664 orq %r10, %r11 - 0x4c, 0x89, 0xd9, //0x00001667 movq %r11, %rcx - 0x48, 0xf7, 0xd1, //0x0000166a notq %rcx - 0x48, 0x21, 0xd1, //0x0000166d andq %rdx, %rcx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001670 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd1, //0x0000167a andq %rdx, %rcx - 0x45, 0x31, 0xd2, //0x0000167d xorl %r10d, %r10d - 0x48, 0x01, 0xc1, //0x00001680 addq %rax, %rcx - 0x41, 0x0f, 0x92, 0xc2, //0x00001683 setb %r10b - 0x48, 0x01, 0xc9, //0x00001687 addq %rcx, %rcx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000168a movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc1, //0x00001694 xorq %rax, %rcx - 0x4c, 0x21, 0xd9, //0x00001697 andq %r11, %rcx - 0x48, 0xf7, 0xd1, //0x0000169a notq %rcx - 0x48, 0x21, 0xcf, //0x0000169d andq %rcx, %rdi - 0x4d, 0x89, 0xeb, //0x000016a0 movq %r13, %r11 - 0x4d, 0x89, 0xcd, //0x000016a3 movq %r9, %r13 - 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x000016a6 movq $32(%rsp), %r9 - 0x48, 0x85, 0xff, //0x000016ab testq %rdi, %rdi - 0x0f, 0x84, 0x57, 0xff, 0xff, 0xff, //0x000016ae je LBB0_270 - //0x000016b4 LBB0_280 - 0x4c, 0x0f, 0xbc, 0xff, //0x000016b4 bsfq %rdi, %r15 - 0x49, 0x29, 0xf7, //0x000016b8 subq %rsi, %r15 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000016bb movq $24(%rsp), %r10 - 0xe9, 0x41, 0x06, 0x00, 0x00, //0x000016c0 jmp LBB0_379 - //0x000016c5 LBB0_281 - 0x4d, 0x8b, 0x55, 0x08, //0x000016c5 movq $8(%r13), %r10 - 0x4d, 0x8b, 0x3b, //0x000016c9 movq (%r11), %r15 - 0x4d, 0x29, 0xfa, //0x000016cc subq %r15, %r10 - 0x0f, 0x84, 0x9a, 0x1e, 0x00, 0x00, //0x000016cf je LBB0_649 - 0x4b, 0x8d, 0x04, 0x38, //0x000016d5 leaq (%r8,%r15), %rax - 0x48, 0x89, 0x44, 0x24, 0x30, //0x000016d9 movq %rax, $48(%rsp) - 0x80, 0x38, 0x30, //0x000016de cmpb $48, (%rax) - 0x0f, 0x85, 0x9a, 0x02, 0x00, 0x00, //0x000016e1 jne LBB0_324 - 0x41, 0xbc, 0x01, 0x00, 0x00, 0x00, //0x000016e7 movl $1, %r12d - 0x49, 0x83, 0xfa, 0x01, //0x000016ed cmpq $1, %r10 - 0x0f, 0x85, 0x5c, 0x02, 0x00, 0x00, //0x000016f1 jne LBB0_322 - //0x000016f7 LBB0_284 - 0x4c, 0x89, 0xf9, //0x000016f7 movq %r15, %rcx - 0xe9, 0x08, 0x0b, 0x00, 0x00, //0x000016fa jmp LBB0_425 - //0x000016ff LBB0_285 - 0x49, 0x8b, 0x09, //0x000016ff movq (%r9), %rcx - 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00001702 cmpq $4095, %rcx - 0x0f, 0x8f, 0x99, 0x16, 0x00, 0x00, //0x00001709 jg LBB0_650 - 0x48, 0x8d, 0x41, 0x01, //0x0000170f leaq $1(%rcx), %rax - 0x49, 0x89, 0x01, //0x00001713 movq %rax, (%r9) - 0x49, 0xc7, 0x44, 0xc9, 0x08, 0x05, 0x00, 0x00, 0x00, //0x00001716 movq $5, $8(%r9,%rcx,8) - 0xe9, 0xcc, 0xef, 0xff, 0xff, //0x0000171f jmp LBB0_55 - //0x00001724 LBB0_287 - 0x49, 0x8b, 0x0b, //0x00001724 movq (%r11), %rcx - 0x49, 0x8b, 0x55, 0x08, //0x00001727 movq $8(%r13), %rdx - 0x48, 0x8d, 0x42, 0xfc, //0x0000172b leaq $-4(%rdx), %rax - 0x48, 0x39, 0xc1, //0x0000172f cmpq %rax, %rcx - 0x0f, 0x87, 0x94, 0x16, 0x00, 0x00, //0x00001732 ja LBB0_382 - 0x41, 0x8b, 0x14, 0x08, //0x00001738 movl (%r8,%rcx), %edx - 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x0000173c cmpl $1702063201, %edx - 0x0f, 0x85, 0x33, 0x1e, 0x00, 0x00, //0x00001742 jne LBB0_651 - 0x48, 0x8d, 0x41, 0x04, //0x00001748 leaq $4(%rcx), %rax - 0x49, 0x89, 0x03, //0x0000174c movq %rax, (%r11) - 0x48, 0x85, 0xc9, //0x0000174f testq %rcx, %rcx - 0x0f, 0x8f, 0x98, 0xef, 0xff, 0xff, //0x00001752 jg LBB0_55 - 0xe9, 0x08, 0x1f, 0x00, 0x00, //0x00001758 jmp LBB0_290 - //0x0000175d LBB0_291 - 0x49, 0x8b, 0x0b, //0x0000175d movq (%r11), %rcx - 0x49, 0x8b, 0x55, 0x08, //0x00001760 movq $8(%r13), %rdx - 0x48, 0x8d, 0x42, 0xfd, //0x00001764 leaq $-3(%rdx), %rax - 0x48, 0x39, 0xc1, //0x00001768 cmpq %rax, %rcx - 0x0f, 0x87, 0x5b, 0x16, 0x00, 0x00, //0x0000176b ja LBB0_382 - 0x4c, 0x8d, 0x79, 0xff, //0x00001771 leaq $-1(%rcx), %r15 - 0x41, 0x81, 0x7c, 0x08, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x00001775 cmpl $1819047278, $-1(%r8,%rcx) - 0x0f, 0x84, 0x51, 0x00, 0x00, 0x00, //0x0000177e je LBB0_301 - 0xe9, 0x47, 0x1e, 0x00, 0x00, //0x00001784 jmp LBB0_293 - //0x00001789 LBB0_297 - 0x49, 0x8b, 0x09, //0x00001789 movq (%r9), %rcx - 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x0000178c cmpq $4095, %rcx - 0x0f, 0x8f, 0x0f, 0x16, 0x00, 0x00, //0x00001793 jg LBB0_650 - 0x48, 0x8d, 0x41, 0x01, //0x00001799 leaq $1(%rcx), %rax - 0x49, 0x89, 0x01, //0x0000179d movq %rax, (%r9) - 0x49, 0xc7, 0x44, 0xc9, 0x08, 0x06, 0x00, 0x00, 0x00, //0x000017a0 movq $6, $8(%r9,%rcx,8) - 0xe9, 0x42, 0xef, 0xff, 0xff, //0x000017a9 jmp LBB0_55 - //0x000017ae LBB0_299 - 0x49, 0x8b, 0x0b, //0x000017ae movq (%r11), %rcx - 0x49, 0x8b, 0x55, 0x08, //0x000017b1 movq $8(%r13), %rdx - 0x48, 0x8d, 0x42, 0xfd, //0x000017b5 leaq $-3(%rdx), %rax - 0x48, 0x39, 0xc1, //0x000017b9 cmpq %rax, %rcx - 0x0f, 0x87, 0x0a, 0x16, 0x00, 0x00, //0x000017bc ja LBB0_382 - 0x4c, 0x8d, 0x79, 0xff, //0x000017c2 leaq $-1(%rcx), %r15 - 0x41, 0x81, 0x7c, 0x08, 0xff, 0x74, 0x72, 0x75, 0x65, //0x000017c6 cmpl $1702195828, $-1(%r8,%rcx) - 0x0f, 0x85, 0x42, 0x1e, 0x00, 0x00, //0x000017cf jne LBB0_656 - //0x000017d5 LBB0_301 - 0x48, 0x8d, 0x41, 0x03, //0x000017d5 leaq $3(%rcx), %rax - 0x49, 0x89, 0x03, //0x000017d9 movq %rax, (%r11) - 0x48, 0x85, 0xc9, //0x000017dc testq %rcx, %rcx - 0x0f, 0x8f, 0x0b, 0xef, 0xff, 0xff, //0x000017df jg LBB0_55 - 0xe9, 0xee, 0x1c, 0x00, 0x00, //0x000017e5 jmp LBB0_638 - //0x000017ea LBB0_302 - 0x49, 0x8d, 0x42, 0xff, //0x000017ea leaq $-1(%r10), %rax - 0x48, 0x39, 0xc2, //0x000017ee cmpq %rax, %rdx - 0x49, 0xf7, 0xd2, //0x000017f1 notq %r10 - 0x4d, 0x0f, 0x45, 0xd0, //0x000017f4 cmovneq %r8, %r10 - 0x84, 0xc9, //0x000017f8 testb %cl, %cl - 0x4d, 0x0f, 0x45, 0xc2, //0x000017fa cmovneq %r10, %r8 - 0xe9, 0x9b, 0x07, 0x00, 0x00, //0x000017fe jmp LBB0_407 - //0x00001803 LBB0_303 - 0x4c, 0x29, 0xc3, //0x00001803 subq %r8, %rbx - 0x0f, 0x84, 0x9c, 0x1e, 0x00, 0x00, //0x00001806 je LBB0_670 - 0x48, 0x83, 0xfb, 0x40, //0x0000180c cmpq $64, %rbx - 0x0f, 0x82, 0x21, 0x0b, 0x00, 0x00, //0x00001810 jb LBB0_439 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00001816 movq $-1, (%rsp) - 0x4d, 0x89, 0xc7, //0x0000181e movq %r8, %r15 - 0x45, 0x31, 0xdb, //0x00001821 xorl %r11d, %r11d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001824 .p2align 4, 0x90 - //0x00001830 LBB0_306 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00001830 movq $16(%rsp), %rax - 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x38, //0x00001835 vmovdqu (%rax,%r15), %ymm0 - 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x38, 0x20, //0x0000183b vmovdqu $32(%rax,%r15), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x00001842 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x00001846 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x0000184a vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x0000184e vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xd7, //0x00001852 vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00001856 vpmovmskb %ymm2, %edx - 0xc5, 0xf5, 0x74, 0xd7, //0x0000185a vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xca, //0x0000185e vpmovmskb %ymm2, %ecx - 0xc5, 0xbd, 0x64, 0xd1, //0x00001862 vpcmpgtb %ymm1, %ymm8, %ymm2 - 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00001866 vpcmpgtb %ymm9, %ymm1, %ymm1 - 0xc5, 0xed, 0xdb, 0xc9, //0x0000186b vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x0000186f vpmovmskb %ymm1, %esi - 0x48, 0xc1, 0xe0, 0x20, //0x00001873 shlq $32, %rax - 0x48, 0x09, 0xc7, //0x00001877 orq %rax, %rdi - 0x48, 0xc1, 0xe1, 0x20, //0x0000187a shlq $32, %rcx - 0x48, 0xc1, 0xe6, 0x20, //0x0000187e shlq $32, %rsi - 0x48, 0x09, 0xca, //0x00001882 orq %rcx, %rdx - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00001885 jne LBB0_317 - 0x4d, 0x85, 0xdb, //0x0000188b testq %r11, %r11 - 0x0f, 0x85, 0x56, 0x00, 0x00, 0x00, //0x0000188e jne LBB0_319 - 0x45, 0x31, 0xdb, //0x00001894 xorl %r11d, %r11d - //0x00001897 LBB0_309 - 0xc5, 0xbd, 0x64, 0xc8, //0x00001897 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x0000189b vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x000018a0 vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x000018a4 vpmovmskb %ymm0, %eax - 0x48, 0x09, 0xc6, //0x000018a8 orq %rax, %rsi - 0x48, 0x85, 0xff, //0x000018ab testq %rdi, %rdi - 0x0f, 0x85, 0x89, 0x00, 0x00, 0x00, //0x000018ae jne LBB0_320 - 0x48, 0x85, 0xf6, //0x000018b4 testq %rsi, %rsi - 0x0f, 0x85, 0x7a, 0x1c, 0x00, 0x00, //0x000018b7 jne LBB0_643 - 0x48, 0x83, 0xc3, 0xc0, //0x000018bd addq $-64, %rbx - 0x49, 0x83, 0xc7, 0x40, //0x000018c1 addq $64, %r15 - 0x48, 0x83, 0xfb, 0x3f, //0x000018c5 cmpq $63, %rbx - 0x0f, 0x87, 0x61, 0xff, 0xff, 0xff, //0x000018c9 ja LBB0_306 - 0xe9, 0x57, 0x08, 0x00, 0x00, //0x000018cf jmp LBB0_312 - //0x000018d4 LBB0_317 - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x000018d4 cmpq $-1, (%rsp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000018d9 jne LBB0_319 - 0x48, 0x0f, 0xbc, 0xc2, //0x000018df bsfq %rdx, %rax - 0x4c, 0x01, 0xf8, //0x000018e3 addq %r15, %rax - 0x48, 0x89, 0x04, 0x24, //0x000018e6 movq %rax, (%rsp) - //0x000018ea LBB0_319 - 0x4c, 0x89, 0xd8, //0x000018ea movq %r11, %rax - 0x48, 0xf7, 0xd0, //0x000018ed notq %rax - 0x48, 0x21, 0xd0, //0x000018f0 andq %rdx, %rax - 0x4c, 0x8d, 0x14, 0x00, //0x000018f3 leaq (%rax,%rax), %r10 - 0x4d, 0x09, 0xda, //0x000018f7 orq %r11, %r10 - 0x4c, 0x89, 0xd1, //0x000018fa movq %r10, %rcx - 0x48, 0xf7, 0xd1, //0x000018fd notq %rcx - 0x48, 0x21, 0xd1, //0x00001900 andq %rdx, %rcx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001903 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd1, //0x0000190d andq %rdx, %rcx - 0x45, 0x31, 0xdb, //0x00001910 xorl %r11d, %r11d - 0x48, 0x01, 0xc1, //0x00001913 addq %rax, %rcx - 0x41, 0x0f, 0x92, 0xc3, //0x00001916 setb %r11b - 0x48, 0x01, 0xc9, //0x0000191a addq %rcx, %rcx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000191d movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc1, //0x00001927 xorq %rax, %rcx - 0x4c, 0x21, 0xd1, //0x0000192a andq %r10, %rcx - 0x48, 0xf7, 0xd1, //0x0000192d notq %rcx - 0x48, 0x21, 0xcf, //0x00001930 andq %rcx, %rdi - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00001933 movq $24(%rsp), %r10 - 0xe9, 0x5a, 0xff, 0xff, 0xff, //0x00001938 jmp LBB0_309 - //0x0000193d LBB0_320 - 0x48, 0x0f, 0xbc, 0xcf, //0x0000193d bsfq %rdi, %rcx - 0x48, 0x85, 0xf6, //0x00001941 testq %rsi, %rsi - 0x0f, 0x84, 0xa2, 0x03, 0x00, 0x00, //0x00001944 je LBB0_376 - 0x48, 0x0f, 0xbc, 0xd6, //0x0000194a bsfq %rsi, %rdx - 0xe9, 0x9e, 0x03, 0x00, 0x00, //0x0000194e jmp LBB0_377 - //0x00001953 LBB0_322 - 0x48, 0x8b, 0x44, 0x24, 0x30, //0x00001953 movq $48(%rsp), %rax - 0x8a, 0x48, 0x01, //0x00001958 movb $1(%rax), %cl - 0x80, 0xc1, 0xd2, //0x0000195b addb $-46, %cl - 0x80, 0xf9, 0x37, //0x0000195e cmpb $55, %cl - 0x0f, 0x87, 0x90, 0xfd, 0xff, 0xff, //0x00001961 ja LBB0_284 - 0x0f, 0xb6, 0xc1, //0x00001967 movzbl %cl, %eax - 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x0000196a movabsq $36028797027352577, %rcx - 0x48, 0x0f, 0xa3, 0xc1, //0x00001974 btq %rax, %rcx - 0x4c, 0x89, 0xf9, //0x00001978 movq %r15, %rcx - 0x0f, 0x83, 0x86, 0x08, 0x00, 0x00, //0x0000197b jae LBB0_425 - //0x00001981 LBB0_324 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00001981 movq $-1, %r8 - 0x49, 0x83, 0xfa, 0x20, //0x00001988 cmpq $32, %r10 - 0x0f, 0x82, 0x5a, 0x09, 0x00, 0x00, //0x0000198c jb LBB0_437 - 0x45, 0x31, 0xe4, //0x00001992 xorl %r12d, %r12d - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00001995 movq $-1, %r11 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x0000199c movq $-1, (%rsp) - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000019a4 .p2align 4, 0x90 - //0x000019b0 LBB0_326 - 0x48, 0x8b, 0x44, 0x24, 0x30, //0x000019b0 movq $48(%rsp), %rax - 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x20, //0x000019b5 vmovdqu (%rax,%r12), %ymm0 - 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x000019bb vpcmpgtb %ymm10, %ymm0, %ymm1 - 0xc5, 0xa5, 0x64, 0xd0, //0x000019c0 vpcmpgtb %ymm0, %ymm11, %ymm2 - 0xc5, 0xed, 0xdb, 0xc9, //0x000019c4 vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0x9d, 0x74, 0xd0, //0x000019c8 vpcmpeqb %ymm0, %ymm12, %ymm2 - 0xc5, 0x95, 0x74, 0xd8, //0x000019cc vpcmpeqb %ymm0, %ymm13, %ymm3 - 0xc5, 0xe5, 0xeb, 0xd2, //0x000019d0 vpor %ymm2, %ymm3, %ymm2 - 0xc5, 0x8d, 0xdb, 0xd8, //0x000019d4 vpand %ymm0, %ymm14, %ymm3 - 0xc5, 0x85, 0x74, 0xc0, //0x000019d8 vpcmpeqb %ymm0, %ymm15, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf8, //0x000019dc vpmovmskb %ymm0, %edi - 0xc5, 0xe5, 0x74, 0xdc, //0x000019e0 vpcmpeqb %ymm4, %ymm3, %ymm3 - 0xc5, 0xfd, 0xd7, 0xd3, //0x000019e4 vpmovmskb %ymm3, %edx - 0xc5, 0xfd, 0xd7, 0xf2, //0x000019e8 vpmovmskb %ymm2, %esi - 0xc5, 0xf5, 0xeb, 0xc0, //0x000019ec vpor %ymm0, %ymm1, %ymm0 - 0xc5, 0xe5, 0xeb, 0xca, //0x000019f0 vpor %ymm2, %ymm3, %ymm1 - 0xc5, 0xfd, 0xeb, 0xc1, //0x000019f4 vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x000019f8 vpmovmskb %ymm0, %eax - 0x48, 0xf7, 0xd0, //0x000019fc notq %rax - 0x48, 0x0f, 0xbc, 0xc8, //0x000019ff bsfq %rax, %rcx - 0x83, 0xf9, 0x20, //0x00001a03 cmpl $32, %ecx - 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00001a06 je LBB0_328 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00001a0c movl $-1, %eax - 0xd3, 0xe0, //0x00001a11 shll %cl, %eax - 0xf7, 0xd0, //0x00001a13 notl %eax - 0x21, 0xc7, //0x00001a15 andl %eax, %edi - 0x21, 0xc2, //0x00001a17 andl %eax, %edx - 0x21, 0xf0, //0x00001a19 andl %esi, %eax - 0x89, 0xc6, //0x00001a1b movl %eax, %esi - //0x00001a1d LBB0_328 - 0x8d, 0x5f, 0xff, //0x00001a1d leal $-1(%rdi), %ebx - 0x21, 0xfb, //0x00001a20 andl %edi, %ebx - 0x0f, 0x85, 0x67, 0x06, 0x00, 0x00, //0x00001a22 jne LBB0_412 - 0x8d, 0x5a, 0xff, //0x00001a28 leal $-1(%rdx), %ebx - 0x21, 0xd3, //0x00001a2b andl %edx, %ebx - 0x0f, 0x85, 0x5c, 0x06, 0x00, 0x00, //0x00001a2d jne LBB0_412 - 0x8d, 0x5e, 0xff, //0x00001a33 leal $-1(%rsi), %ebx - 0x21, 0xf3, //0x00001a36 andl %esi, %ebx - 0x0f, 0x85, 0x51, 0x06, 0x00, 0x00, //0x00001a38 jne LBB0_412 - 0x85, 0xff, //0x00001a3e testl %edi, %edi - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00001a40 je LBB0_334 - 0x0f, 0xbc, 0xff, //0x00001a46 bsfl %edi, %edi - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00001a49 cmpq $-1, (%rsp) - 0x0f, 0x85, 0x9a, 0x07, 0x00, 0x00, //0x00001a4e jne LBB0_420 - 0x4c, 0x01, 0xe7, //0x00001a54 addq %r12, %rdi - 0x48, 0x89, 0x3c, 0x24, //0x00001a57 movq %rdi, (%rsp) - //0x00001a5b LBB0_334 - 0x85, 0xd2, //0x00001a5b testl %edx, %edx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00001a5d je LBB0_337 - 0x0f, 0xbc, 0xd2, //0x00001a63 bsfl %edx, %edx - 0x49, 0x83, 0xfb, 0xff, //0x00001a66 cmpq $-1, %r11 - 0x0f, 0x85, 0x4c, 0x07, 0x00, 0x00, //0x00001a6a jne LBB0_418 - 0x4c, 0x01, 0xe2, //0x00001a70 addq %r12, %rdx - 0x49, 0x89, 0xd3, //0x00001a73 movq %rdx, %r11 - //0x00001a76 LBB0_337 - 0x85, 0xf6, //0x00001a76 testl %esi, %esi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00001a78 je LBB0_340 - 0x0f, 0xbc, 0xd6, //0x00001a7e bsfl %esi, %edx - 0x49, 0x83, 0xf8, 0xff, //0x00001a81 cmpq $-1, %r8 - 0x0f, 0x85, 0x31, 0x07, 0x00, 0x00, //0x00001a85 jne LBB0_418 - 0x4c, 0x01, 0xe2, //0x00001a8b addq %r12, %rdx - 0x49, 0x89, 0xd0, //0x00001a8e movq %rdx, %r8 - //0x00001a91 LBB0_340 - 0x83, 0xf9, 0x20, //0x00001a91 cmpl $32, %ecx - 0x0f, 0x85, 0x0f, 0x02, 0x00, 0x00, //0x00001a94 jne LBB0_374 - 0x49, 0x83, 0xc2, 0xe0, //0x00001a9a addq $-32, %r10 - 0x49, 0x83, 0xc4, 0x20, //0x00001a9e addq $32, %r12 - 0x49, 0x83, 0xfa, 0x1f, //0x00001aa2 cmpq $31, %r10 - 0x0f, 0x87, 0x04, 0xff, 0xff, 0xff, //0x00001aa6 ja LBB0_326 - 0xc5, 0xf8, 0x77, //0x00001aac vzeroupper - 0x4c, 0x03, 0x64, 0x24, 0x30, //0x00001aaf addq $48(%rsp), %r12 - 0x4c, 0x89, 0x6c, 0x24, 0x38, //0x00001ab4 movq %r13, $56(%rsp) - 0x49, 0x83, 0xfa, 0x10, //0x00001ab9 cmpq $16, %r10 - 0x0f, 0x82, 0x3a, 0x01, 0x00, 0x00, //0x00001abd jb LBB0_361 - //0x00001ac3 LBB0_343 - 0x4c, 0x89, 0xe3, //0x00001ac3 movq %r12, %rbx - 0x48, 0x2b, 0x5c, 0x24, 0x30, //0x00001ac6 subq $48(%rsp), %rbx - 0x45, 0x31, 0xed, //0x00001acb xorl %r13d, %r13d - 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x00001ace movq %r9, $32(%rsp) - //0x00001ad3 LBB0_344 - 0xc4, 0x81, 0x7a, 0x6f, 0x04, 0x2c, //0x00001ad3 vmovdqu (%r12,%r13), %xmm0 - 0xc5, 0xf9, 0x64, 0x0d, 0x5f, 0xe7, 0xff, 0xff, //0x00001ad9 vpcmpgtb $-6305(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ - 0xc5, 0xfa, 0x6f, 0x15, 0x67, 0xe7, 0xff, 0xff, //0x00001ae1 vmovdqu $-6297(%rip), %xmm2 /* LCPI0_21+0(%rip) */ - 0xc5, 0xe9, 0x64, 0xd0, //0x00001ae9 vpcmpgtb %xmm0, %xmm2, %xmm2 - 0xc5, 0xf1, 0xdb, 0xca, //0x00001aed vpand %xmm2, %xmm1, %xmm1 - 0xc5, 0xf9, 0x74, 0x15, 0x67, 0xe7, 0xff, 0xff, //0x00001af1 vpcmpeqb $-6297(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x1d, 0x6f, 0xe7, 0xff, 0xff, //0x00001af9 vpcmpeqb $-6289(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xd2, //0x00001b01 vpor %xmm2, %xmm3, %xmm2 - 0xc5, 0xf9, 0xdb, 0x1d, 0x03, 0xe7, 0xff, 0xff, //0x00001b05 vpand $-6397(%rip), %xmm0, %xmm3 /* LCPI0_5+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0x6b, 0xe7, 0xff, 0xff, //0x00001b0d vpcmpeqb $-6293(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ - 0xc5, 0xe1, 0x74, 0x1d, 0x73, 0xe7, 0xff, 0xff, //0x00001b15 vpcmpeqb $-6285(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xe0, //0x00001b1d vpor %xmm0, %xmm3, %xmm4 - 0xc5, 0xe9, 0xeb, 0xc9, //0x00001b21 vpor %xmm1, %xmm2, %xmm1 - 0xc5, 0xd9, 0xeb, 0xc9, //0x00001b25 vpor %xmm1, %xmm4, %xmm1 - 0xc5, 0x79, 0xd7, 0xc8, //0x00001b29 vpmovmskb %xmm0, %r9d - 0xc5, 0xf9, 0xd7, 0xfb, //0x00001b2d vpmovmskb %xmm3, %edi - 0xc5, 0xf9, 0xd7, 0xd2, //0x00001b31 vpmovmskb %xmm2, %edx - 0xc5, 0xf9, 0xd7, 0xc1, //0x00001b35 vpmovmskb %xmm1, %eax - 0xf7, 0xd0, //0x00001b39 notl %eax - 0x0f, 0xbc, 0xc8, //0x00001b3b bsfl %eax, %ecx - 0x83, 0xf9, 0x10, //0x00001b3e cmpl $16, %ecx - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00001b41 je LBB0_346 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00001b47 movl $-1, %eax - 0xd3, 0xe0, //0x00001b4c shll %cl, %eax - 0xf7, 0xd0, //0x00001b4e notl %eax - 0x41, 0x21, 0xc1, //0x00001b50 andl %eax, %r9d - 0x21, 0xc7, //0x00001b53 andl %eax, %edi - 0x21, 0xd0, //0x00001b55 andl %edx, %eax - 0x89, 0xc2, //0x00001b57 movl %eax, %edx - //0x00001b59 LBB0_346 - 0x41, 0x8d, 0x71, 0xff, //0x00001b59 leal $-1(%r9), %esi - 0x44, 0x21, 0xce, //0x00001b5d andl %r9d, %esi - 0x0f, 0x85, 0x0f, 0x06, 0x00, 0x00, //0x00001b60 jne LBB0_415 - 0x8d, 0x77, 0xff, //0x00001b66 leal $-1(%rdi), %esi - 0x21, 0xfe, //0x00001b69 andl %edi, %esi - 0x0f, 0x85, 0x04, 0x06, 0x00, 0x00, //0x00001b6b jne LBB0_415 - 0x8d, 0x72, 0xff, //0x00001b71 leal $-1(%rdx), %esi - 0x21, 0xd6, //0x00001b74 andl %edx, %esi - 0x0f, 0x85, 0xf9, 0x05, 0x00, 0x00, //0x00001b76 jne LBB0_415 - 0x45, 0x85, 0xc9, //0x00001b7c testl %r9d, %r9d - 0x0f, 0x84, 0x19, 0x00, 0x00, 0x00, //0x00001b7f je LBB0_352 - 0x41, 0x0f, 0xbc, 0xf1, //0x00001b85 bsfl %r9d, %esi - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00001b89 cmpq $-1, (%rsp) - 0x0f, 0x85, 0xd7, 0x06, 0x00, 0x00, //0x00001b8e jne LBB0_430 - 0x48, 0x01, 0xde, //0x00001b94 addq %rbx, %rsi - 0x4c, 0x01, 0xee, //0x00001b97 addq %r13, %rsi - 0x48, 0x89, 0x34, 0x24, //0x00001b9a movq %rsi, (%rsp) - //0x00001b9e LBB0_352 - 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x00001b9e movq $32(%rsp), %r9 - 0x85, 0xff, //0x00001ba3 testl %edi, %edi - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001ba5 je LBB0_355 - 0x0f, 0xbc, 0xf7, //0x00001bab bsfl %edi, %esi - 0x49, 0x83, 0xfb, 0xff, //0x00001bae cmpq $-1, %r11 - 0x0f, 0x85, 0xba, 0x06, 0x00, 0x00, //0x00001bb2 jne LBB0_431 - 0x48, 0x01, 0xde, //0x00001bb8 addq %rbx, %rsi - 0x4c, 0x01, 0xee, //0x00001bbb addq %r13, %rsi - 0x49, 0x89, 0xf3, //0x00001bbe movq %rsi, %r11 - //0x00001bc1 LBB0_355 - 0x85, 0xd2, //0x00001bc1 testl %edx, %edx - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001bc3 je LBB0_358 - 0x0f, 0xbc, 0xd2, //0x00001bc9 bsfl %edx, %edx - 0x49, 0x83, 0xf8, 0xff, //0x00001bcc cmpq $-1, %r8 - 0x0f, 0x85, 0xa3, 0x06, 0x00, 0x00, //0x00001bd0 jne LBB0_432 - 0x48, 0x01, 0xda, //0x00001bd6 addq %rbx, %rdx - 0x4c, 0x01, 0xea, //0x00001bd9 addq %r13, %rdx - 0x49, 0x89, 0xd0, //0x00001bdc movq %rdx, %r8 - //0x00001bdf LBB0_358 - 0x83, 0xf9, 0x10, //0x00001bdf cmpl $16, %ecx - 0x0f, 0x85, 0x34, 0x01, 0x00, 0x00, //0x00001be2 jne LBB0_384 - 0x49, 0x83, 0xc2, 0xf0, //0x00001be8 addq $-16, %r10 - 0x49, 0x83, 0xc5, 0x10, //0x00001bec addq $16, %r13 - 0x49, 0x83, 0xfa, 0x0f, //0x00001bf0 cmpq $15, %r10 - 0x0f, 0x87, 0xd9, 0xfe, 0xff, 0xff, //0x00001bf4 ja LBB0_344 - 0x4d, 0x01, 0xec, //0x00001bfa addq %r13, %r12 - //0x00001bfd LBB0_361 - 0x4d, 0x85, 0xd2, //0x00001bfd testq %r10, %r10 - 0x4c, 0x8b, 0x6c, 0x24, 0x38, //0x00001c00 movq $56(%rsp), %r13 - 0x0f, 0x84, 0x3a, 0x01, 0x00, 0x00, //0x00001c05 je LBB0_386 - 0x4b, 0x8d, 0x14, 0x14, //0x00001c0b leaq (%r12,%r10), %rdx - 0x4c, 0x89, 0xe6, //0x00001c0f movq %r12, %rsi - 0x48, 0x2b, 0x74, 0x24, 0x30, //0x00001c12 subq $48(%rsp), %rsi - 0x31, 0xc9, //0x00001c17 xorl %ecx, %ecx - 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00001c19 jmp LBB0_366 - //0x00001c1e LBB0_363 - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00001c1e cmpq $-1, (%rsp) - 0x0f, 0x85, 0x7a, 0x05, 0x00, 0x00, //0x00001c23 jne LBB0_417 - 0x48, 0x8d, 0x04, 0x0e, //0x00001c29 leaq (%rsi,%rcx), %rax - 0x48, 0x89, 0x04, 0x24, //0x00001c2d movq %rax, (%rsp) - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001c31 .p2align 4, 0x90 - //0x00001c40 LBB0_365 - 0x48, 0x83, 0xc1, 0x01, //0x00001c40 addq $1, %rcx - 0x49, 0x39, 0xca, //0x00001c44 cmpq %rcx, %r10 - 0x0f, 0x84, 0x26, 0x04, 0x00, 0x00, //0x00001c47 je LBB0_411 - //0x00001c4d LBB0_366 - 0x41, 0x0f, 0xbe, 0x3c, 0x0c, //0x00001c4d movsbl (%r12,%rcx), %edi - 0x8d, 0x47, 0xd0, //0x00001c52 leal $-48(%rdi), %eax - 0x83, 0xf8, 0x0a, //0x00001c55 cmpl $10, %eax - 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x00001c58 jb LBB0_365 - 0x8d, 0x5f, 0xd5, //0x00001c5e leal $-43(%rdi), %ebx - 0x83, 0xfb, 0x1a, //0x00001c61 cmpl $26, %ebx - 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00001c64 ja LBB0_371 - 0x48, 0x8d, 0x3d, 0x23, 0x1f, 0x00, 0x00, //0x00001c6a leaq $7971(%rip), %rdi /* LJTI0_3+0(%rip) */ - 0x48, 0x63, 0x04, 0x9f, //0x00001c71 movslq (%rdi,%rbx,4), %rax - 0x48, 0x01, 0xf8, //0x00001c75 addq %rdi, %rax - 0xff, 0xe0, //0x00001c78 jmpq *%rax - //0x00001c7a LBB0_369 - 0x49, 0x83, 0xf8, 0xff, //0x00001c7a cmpq $-1, %r8 - 0x0f, 0x85, 0x1f, 0x05, 0x00, 0x00, //0x00001c7e jne LBB0_417 - 0x4c, 0x8d, 0x04, 0x0e, //0x00001c84 leaq (%rsi,%rcx), %r8 - 0xe9, 0xb3, 0xff, 0xff, 0xff, //0x00001c88 jmp LBB0_365 - //0x00001c8d LBB0_371 - 0x83, 0xff, 0x65, //0x00001c8d cmpl $101, %edi - 0x0f, 0x85, 0xac, 0x00, 0x00, 0x00, //0x00001c90 jne LBB0_385 - //0x00001c96 LBB0_372 - 0x49, 0x83, 0xfb, 0xff, //0x00001c96 cmpq $-1, %r11 - 0x0f, 0x85, 0x03, 0x05, 0x00, 0x00, //0x00001c9a jne LBB0_417 - 0x4c, 0x8d, 0x1c, 0x0e, //0x00001ca0 leaq (%rsi,%rcx), %r11 - 0xe9, 0x97, 0xff, 0xff, 0xff, //0x00001ca4 jmp LBB0_365 - //0x00001ca9 LBB0_374 - 0x4c, 0x01, 0xe1, //0x00001ca9 addq %r12, %rcx - 0x48, 0x03, 0x4c, 0x24, 0x30, //0x00001cac addq $48(%rsp), %rcx - 0xc5, 0xf8, 0x77, //0x00001cb1 vzeroupper - 0x49, 0x89, 0xcc, //0x00001cb4 movq %rcx, %r12 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00001cb7 movq $-1, %rcx - 0x48, 0x8b, 0x14, 0x24, //0x00001cbe movq (%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00001cc2 testq %rdx, %rdx - 0x0f, 0x85, 0x8e, 0x00, 0x00, 0x00, //0x00001cc5 jne LBB0_387 - 0xe9, 0xad, 0x19, 0x00, 0x00, //0x00001ccb jmp LBB0_662 - //0x00001cd0 LBB0_375 - 0x49, 0x89, 0xf0, //0x00001cd0 movq %rsi, %r8 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00001cd3 movq $-1, %rcx - 0x48, 0x8b, 0x14, 0x24, //0x00001cda movq (%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00001cde testq %rdx, %rdx - 0x0f, 0x85, 0x61, 0xf7, 0xff, 0xff, //0x00001ce1 jne LBB0_246 - 0xe9, 0xd3, 0x17, 0x00, 0x00, //0x00001ce7 jmp LBB0_636 - //0x00001cec LBB0_376 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001cec movl $64, %edx - //0x00001cf1 LBB0_377 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00001cf1 movq $8(%rsp), %r11 - 0x48, 0x39, 0xca, //0x00001cf6 cmpq %rcx, %rdx - 0x0f, 0x82, 0xc4, 0x19, 0x00, 0x00, //0x00001cf9 jb LBB0_217 - 0x49, 0x01, 0xcf, //0x00001cff addq %rcx, %r15 - 0x49, 0x83, 0xc7, 0x01, //0x00001d02 addq $1, %r15 - //0x00001d06 LBB0_379 - 0x4d, 0x85, 0xff, //0x00001d06 testq %r15, %r15 - 0x0f, 0x89, 0xeb, 0xf6, 0xff, 0xff, //0x00001d09 jns LBB0_241 - 0xe9, 0xa0, 0x10, 0x00, 0x00, //0x00001d0f jmp LBB0_380 - //0x00001d14 LBB0_383 - 0x0f, 0xbc, 0xc3, //0x00001d14 bsfl %ebx, %eax - 0xe9, 0x9a, 0x01, 0x00, 0x00, //0x00001d17 jmp LBB0_403 - //0x00001d1c LBB0_384 - 0x89, 0xc8, //0x00001d1c movl %ecx, %eax - 0x49, 0x01, 0xc4, //0x00001d1e addq %rax, %r12 - 0x4d, 0x01, 0xec, //0x00001d21 addq %r13, %r12 - 0x4c, 0x8b, 0x6c, 0x24, 0x38, //0x00001d24 movq $56(%rsp), %r13 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00001d29 movq $-1, %rcx - 0x48, 0x8b, 0x14, 0x24, //0x00001d30 movq (%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00001d34 testq %rdx, %rdx - 0x0f, 0x85, 0x1c, 0x00, 0x00, 0x00, //0x00001d37 jne LBB0_387 - 0xe9, 0x3b, 0x19, 0x00, 0x00, //0x00001d3d jmp LBB0_662 - //0x00001d42 LBB0_385 - 0x49, 0x01, 0xcc, //0x00001d42 addq %rcx, %r12 - //0x00001d45 LBB0_386 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00001d45 movq $-1, %rcx - 0x48, 0x8b, 0x14, 0x24, //0x00001d4c movq (%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00001d50 testq %rdx, %rdx - 0x0f, 0x84, 0x24, 0x19, 0x00, 0x00, //0x00001d53 je LBB0_662 - //0x00001d59 LBB0_387 - 0x4d, 0x85, 0xc0, //0x00001d59 testq %r8, %r8 - 0x0f, 0x84, 0x1b, 0x19, 0x00, 0x00, //0x00001d5c je LBB0_662 - 0x4d, 0x85, 0xdb, //0x00001d62 testq %r11, %r11 - 0x0f, 0x84, 0x12, 0x19, 0x00, 0x00, //0x00001d65 je LBB0_662 - 0x4c, 0x2b, 0x64, 0x24, 0x30, //0x00001d6b subq $48(%rsp), %r12 - 0x49, 0x8d, 0x4c, 0x24, 0xff, //0x00001d70 leaq $-1(%r12), %rcx - 0x48, 0x39, 0xca, //0x00001d75 cmpq %rcx, %rdx - 0x0f, 0x84, 0x90, 0x00, 0x00, 0x00, //0x00001d78 je LBB0_395 - 0x49, 0x39, 0xc8, //0x00001d7e cmpq %rcx, %r8 - 0x0f, 0x84, 0x87, 0x00, 0x00, 0x00, //0x00001d81 je LBB0_395 - 0x49, 0x39, 0xcb, //0x00001d87 cmpq %rcx, %r11 - 0x0f, 0x84, 0x7e, 0x00, 0x00, 0x00, //0x00001d8a je LBB0_395 - 0x4d, 0x85, 0xc0, //0x00001d90 testq %r8, %r8 - 0xc5, 0xfe, 0x6f, 0x2d, 0x65, 0xe2, 0xff, 0xff, //0x00001d93 vmovdqu $-7579(%rip), %ymm5 /* LCPI0_0+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0xdd, 0xe2, 0xff, 0xff, //0x00001d9b vmovdqu $-7459(%rip), %ymm6 /* LCPI0_7+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0xf5, 0xe2, 0xff, 0xff, //0x00001da3 vmovdqu $-7435(%rip), %ymm7 /* LCPI0_8+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x6d, 0xe3, 0xff, 0xff, //0x00001dab vmovdqu $-7315(%rip), %ymm8 /* LCPI0_13+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001db3 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0x80, 0xe3, 0xff, 0xff, //0x00001db8 vmovdqu $-7296(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0x98, 0xe3, 0xff, 0xff, //0x00001dc0 vmovdqu $-7272(%rip), %ymm11 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0xb0, 0xe3, 0xff, 0xff, //0x00001dc8 vmovdqu $-7248(%rip), %ymm12 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0xc8, 0xe3, 0xff, 0xff, //0x00001dd0 vmovdqu $-7224(%rip), %ymm13 /* LCPI0_17+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0x60, 0xe2, 0xff, 0xff, //0x00001dd8 vmovdqu $-7584(%rip), %ymm14 /* LCPI0_2+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0xd8, 0xe3, 0xff, 0xff, //0x00001de0 vmovdqu $-7208(%rip), %ymm15 /* LCPI0_18+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0xf0, 0xe3, 0xff, 0xff, //0x00001de8 vmovdqu $-7184(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x0f, 0x8e, 0x82, 0x00, 0x00, 0x00, //0x00001df0 jle LBB0_398 - 0x49, 0x8d, 0x40, 0xff, //0x00001df6 leaq $-1(%r8), %rax - 0x49, 0x39, 0xc3, //0x00001dfa cmpq %rax, %r11 - 0x0f, 0x84, 0x75, 0x00, 0x00, 0x00, //0x00001dfd je LBB0_398 - 0x49, 0xf7, 0xd0, //0x00001e03 notq %r8 - 0x4d, 0x89, 0xc4, //0x00001e06 movq %r8, %r12 - 0xe9, 0xe8, 0x03, 0x00, 0x00, //0x00001e09 jmp LBB0_422 - //0x00001e0e LBB0_395 - 0x49, 0xf7, 0xdc, //0x00001e0e negq %r12 - //0x00001e11 LBB0_396 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00001e11 movq $8(%rsp), %r11 - //0x00001e16 LBB0_397 - 0xc5, 0xfe, 0x6f, 0x2d, 0xe2, 0xe1, 0xff, 0xff, //0x00001e16 vmovdqu $-7710(%rip), %ymm5 /* LCPI0_0+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x5a, 0xe2, 0xff, 0xff, //0x00001e1e vmovdqu $-7590(%rip), %ymm6 /* LCPI0_7+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x72, 0xe2, 0xff, 0xff, //0x00001e26 vmovdqu $-7566(%rip), %ymm7 /* LCPI0_8+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0xea, 0xe2, 0xff, 0xff, //0x00001e2e vmovdqu $-7446(%rip), %ymm8 /* LCPI0_13+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001e36 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0xfd, 0xe2, 0xff, 0xff, //0x00001e3b vmovdqu $-7427(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0x15, 0xe3, 0xff, 0xff, //0x00001e43 vmovdqu $-7403(%rip), %ymm11 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x2d, 0xe3, 0xff, 0xff, //0x00001e4b vmovdqu $-7379(%rip), %ymm12 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0x45, 0xe3, 0xff, 0xff, //0x00001e53 vmovdqu $-7355(%rip), %ymm13 /* LCPI0_17+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0xdd, 0xe1, 0xff, 0xff, //0x00001e5b vmovdqu $-7715(%rip), %ymm14 /* LCPI0_2+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0x55, 0xe3, 0xff, 0xff, //0x00001e63 vmovdqu $-7339(%rip), %ymm15 /* LCPI0_18+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x6d, 0xe3, 0xff, 0xff, //0x00001e6b vmovdqu $-7315(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xe9, 0x83, 0x03, 0x00, 0x00, //0x00001e73 jmp LBB0_423 - //0x00001e78 LBB0_398 - 0x48, 0x89, 0xd0, //0x00001e78 movq %rdx, %rax - 0x4c, 0x09, 0xd8, //0x00001e7b orq %r11, %rax - 0x0f, 0x99, 0xc1, //0x00001e7e setns %cl - 0x0f, 0x88, 0xdf, 0x00, 0x00, 0x00, //0x00001e81 js LBB0_404 - 0x4c, 0x39, 0xda, //0x00001e87 cmpq %r11, %rdx - 0x0f, 0x8c, 0xd6, 0x00, 0x00, 0x00, //0x00001e8a jl LBB0_404 - 0x48, 0xf7, 0xd2, //0x00001e90 notq %rdx - 0x49, 0x89, 0xd4, //0x00001e93 movq %rdx, %r12 - 0xe9, 0x5b, 0x03, 0x00, 0x00, //0x00001e96 jmp LBB0_422 - //0x00001e9b LBB0_401 - 0x4c, 0x8b, 0x44, 0x24, 0x10, //0x00001e9b movq $16(%rsp), %r8 - 0x4d, 0x29, 0xc6, //0x00001ea0 subq %r8, %r14 - 0x49, 0x01, 0xfe, //0x00001ea3 addq %rdi, %r14 - 0x49, 0x39, 0xf6, //0x00001ea6 cmpq %rsi, %r14 - 0x0f, 0x82, 0x23, 0xea, 0xff, 0xff, //0x00001ea9 jb LBB0_87 - 0xe9, 0xd5, 0x0e, 0x00, 0x00, //0x00001eaf jmp LBB0_567 - //0x00001eb4 LBB0_402 - 0x89, 0xd0, //0x00001eb4 movl %edx, %eax - //0x00001eb6 LBB0_403 - 0x49, 0xf7, 0xd0, //0x00001eb6 notq %r8 - 0x49, 0x29, 0xc0, //0x00001eb9 subq %rax, %r8 - 0xe9, 0xdd, 0x00, 0x00, 0x00, //0x00001ebc jmp LBB0_407 - //0x00001ec1 LBB0_105 - 0x4c, 0x03, 0x7c, 0x24, 0x10, //0x00001ec1 addq $16(%rsp), %r15 - 0x48, 0x83, 0xfb, 0x20, //0x00001ec6 cmpq $32, %rbx - 0x0f, 0x82, 0xf5, 0x04, 0x00, 0x00, //0x00001eca jb LBB0_444 - //0x00001ed0 LBB0_106 - 0xc4, 0xc1, 0x7e, 0x6f, 0x07, //0x00001ed0 vmovdqu (%r15), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00001ed5 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x00001ed9 vpmovmskb %ymm1, %esi - 0xc5, 0xfd, 0x74, 0xc7, //0x00001edd vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x00001ee1 vpmovmskb %ymm0, %edx - 0x85, 0xd2, //0x00001ee5 testl %edx, %edx - 0x0f, 0x85, 0x6d, 0x04, 0x00, 0x00, //0x00001ee7 jne LBB0_440 - 0x4d, 0x85, 0xd2, //0x00001eed testq %r10, %r10 - 0x0f, 0x85, 0x82, 0x04, 0x00, 0x00, //0x00001ef0 jne LBB0_442 - 0x45, 0x31, 0xd2, //0x00001ef6 xorl %r10d, %r10d - 0x48, 0x85, 0xf6, //0x00001ef9 testq %rsi, %rsi - 0x0f, 0x84, 0xbb, 0x04, 0x00, 0x00, //0x00001efc je LBB0_443 - //0x00001f02 LBB0_109 - 0x48, 0x0f, 0xbc, 0xc6, //0x00001f02 bsfq %rsi, %rax - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00001f06 subq $16(%rsp), %r15 - 0x49, 0x01, 0xc7, //0x00001f0b addq %rax, %r15 - 0x49, 0x83, 0xc7, 0x01, //0x00001f0e addq $1, %r15 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00001f12 movq $24(%rsp), %r10 - 0xe9, 0xd5, 0xf4, 0xff, 0xff, //0x00001f17 jmp LBB0_240 - //0x00001f1c LBB0_207 - 0x4c, 0x03, 0x7c, 0x24, 0x10, //0x00001f1c addq $16(%rsp), %r15 - 0x49, 0x83, 0xfd, 0x20, //0x00001f21 cmpq $32, %r13 - 0x0f, 0x82, 0x36, 0x03, 0x00, 0x00, //0x00001f25 jb LBB0_429 - //0x00001f2b LBB0_208 - 0xc4, 0xc1, 0x7e, 0x6f, 0x07, //0x00001f2b vmovdqu (%r15), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00001f30 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd1, //0x00001f34 vpmovmskb %ymm1, %r10d - 0xc5, 0xfd, 0x74, 0xcf, //0x00001f38 vpcmpeqb %ymm7, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x00001f3c vpmovmskb %ymm1, %edx - 0x85, 0xd2, //0x00001f40 testl %edx, %edx - 0x0f, 0x85, 0x63, 0x05, 0x00, 0x00, //0x00001f42 jne LBB0_457 - 0x4d, 0x85, 0xdb, //0x00001f48 testq %r11, %r11 - 0x0f, 0x85, 0x78, 0x05, 0x00, 0x00, //0x00001f4b jne LBB0_459 - 0x45, 0x31, 0xdb, //0x00001f51 xorl %r11d, %r11d - 0x4d, 0x85, 0xd2, //0x00001f54 testq %r10, %r10 - 0x0f, 0x84, 0xb2, 0x05, 0x00, 0x00, //0x00001f57 je LBB0_460 - //0x00001f5d LBB0_211 - 0x49, 0x0f, 0xbc, 0xd2, //0x00001f5d bsfq %r10, %rdx - 0xe9, 0xae, 0x05, 0x00, 0x00, //0x00001f61 jmp LBB0_461 - //0x00001f66 LBB0_404 - 0x49, 0x8d, 0x43, 0xff, //0x00001f66 leaq $-1(%r11), %rax - 0x48, 0x39, 0xc2, //0x00001f6a cmpq %rax, %rdx - 0x49, 0xf7, 0xd3, //0x00001f6d notq %r11 - 0x4d, 0x0f, 0x45, 0xdc, //0x00001f70 cmovneq %r12, %r11 - 0x84, 0xc9, //0x00001f74 testb %cl, %cl - 0x4d, 0x0f, 0x45, 0xe3, //0x00001f76 cmovneq %r11, %r12 - 0xe9, 0x77, 0x02, 0x00, 0x00, //0x00001f7a jmp LBB0_422 - //0x00001f7f LBB0_405 - 0x0f, 0xbc, 0xc6, //0x00001f7f bsfl %esi, %eax - 0xe9, 0x12, 0x01, 0x00, 0x00, //0x00001f82 jmp LBB0_414 - //0x00001f87 LBB0_406 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00001f87 movq $16(%rsp), %rax - 0x48, 0x03, 0x44, 0x24, 0x28, //0x00001f8c addq $40(%rsp), %rax - 0x4c, 0x29, 0xc0, //0x00001f91 subq %r8, %rax - 0x48, 0x29, 0xc8, //0x00001f94 subq %rcx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00001f97 addq $-2, %rax - 0x49, 0x89, 0xc0, //0x00001f9b movq %rax, %r8 - //0x00001f9e LBB0_407 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00001f9e movq $8(%rsp), %r11 - 0x4d, 0x85, 0xc0, //0x00001fa3 testq %r8, %r8 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00001fa6 movq $24(%rsp), %r10 - 0x0f, 0x89, 0x1f, 0xe7, 0xff, 0xff, //0x00001fab jns LBB0_408 - 0xe9, 0x06, 0x15, 0x00, 0x00, //0x00001fb1 jmp LBB0_635 - //0x00001fb6 LBB0_129 - 0x4c, 0x03, 0x7c, 0x24, 0x10, //0x00001fb6 addq $16(%rsp), %r15 - 0x48, 0x83, 0xfb, 0x20, //0x00001fbb cmpq $32, %rbx - 0x0f, 0x82, 0xd9, 0x06, 0x00, 0x00, //0x00001fbf jb LBB0_482 - //0x00001fc5 LBB0_130 - 0xc4, 0xc1, 0x7e, 0x6f, 0x07, //0x00001fc5 vmovdqu (%r15), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00001fca vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x00001fce vpmovmskb %ymm1, %esi - 0xc5, 0xfd, 0x74, 0xc7, //0x00001fd2 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x00001fd6 vpmovmskb %ymm0, %edx - 0x85, 0xd2, //0x00001fda testl %edx, %edx - 0x0f, 0x85, 0x51, 0x06, 0x00, 0x00, //0x00001fdc jne LBB0_478 - 0x4d, 0x85, 0xd2, //0x00001fe2 testq %r10, %r10 - 0x0f, 0x85, 0x66, 0x06, 0x00, 0x00, //0x00001fe5 jne LBB0_480 - 0x45, 0x31, 0xd2, //0x00001feb xorl %r10d, %r10d - 0x48, 0x85, 0xf6, //0x00001fee testq %rsi, %rsi - 0x0f, 0x84, 0x9f, 0x06, 0x00, 0x00, //0x00001ff1 je LBB0_481 - //0x00001ff7 LBB0_133 - 0x48, 0x0f, 0xbc, 0xc6, //0x00001ff7 bsfq %rsi, %rax - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00001ffb subq $16(%rsp), %r15 - 0x49, 0x01, 0xc7, //0x00002000 addq %rax, %r15 - 0x49, 0x83, 0xc7, 0x01, //0x00002003 addq $1, %r15 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002007 movq $24(%rsp), %r10 - 0xe9, 0x26, 0xf5, 0xff, 0xff, //0x0000200c jmp LBB0_259 - //0x00002011 LBB0_228 - 0x4c, 0x03, 0x7c, 0x24, 0x10, //0x00002011 addq $16(%rsp), %r15 - 0x48, 0x83, 0xfb, 0x20, //0x00002016 cmpq $32, %rbx - 0x0f, 0x82, 0xc2, 0x02, 0x00, 0x00, //0x0000201a jb LBB0_436 - //0x00002020 LBB0_229 - 0xc4, 0xc1, 0x7e, 0x6f, 0x07, //0x00002020 vmovdqu (%r15), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00002025 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd1, //0x00002029 vpmovmskb %ymm1, %r10d - 0xc5, 0xfd, 0x74, 0xcf, //0x0000202d vpcmpeqb %ymm7, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x00002031 vpmovmskb %ymm1, %edx - 0x85, 0xd2, //0x00002035 testl %edx, %edx - 0x0f, 0x85, 0x47, 0x07, 0x00, 0x00, //0x00002037 jne LBB0_495 - 0x4d, 0x85, 0xdb, //0x0000203d testq %r11, %r11 - 0x0f, 0x85, 0x5c, 0x07, 0x00, 0x00, //0x00002040 jne LBB0_497 - 0x45, 0x31, 0xdb, //0x00002046 xorl %r11d, %r11d - 0x4d, 0x85, 0xd2, //0x00002049 testq %r10, %r10 - 0x0f, 0x84, 0x96, 0x07, 0x00, 0x00, //0x0000204c je LBB0_498 - //0x00002052 LBB0_232 - 0x49, 0x0f, 0xbc, 0xd2, //0x00002052 bsfq %r10, %rdx - 0xe9, 0x92, 0x07, 0x00, 0x00, //0x00002056 jmp LBB0_499 - //0x0000205b LBB0_409 - 0x89, 0xd0, //0x0000205b movl %edx, %eax - 0xe9, 0x37, 0x00, 0x00, 0x00, //0x0000205d jmp LBB0_414 - //0x00002062 LBB0_410 - 0x4d, 0x01, 0xc6, //0x00002062 addq %r8, %r14 - 0x48, 0x85, 0xd2, //0x00002065 testq %rdx, %rdx - 0x0f, 0x85, 0xfa, 0xe7, 0xff, 0xff, //0x00002068 jne LBB0_80 - 0xe9, 0x34, 0xe8, 0xff, 0xff, //0x0000206e jmp LBB0_85 - //0x00002073 LBB0_411 - 0x49, 0x89, 0xd4, //0x00002073 movq %rdx, %r12 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002076 movq $-1, %rcx - 0x48, 0x8b, 0x14, 0x24, //0x0000207d movq (%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00002081 testq %rdx, %rdx - 0x0f, 0x85, 0xcf, 0xfc, 0xff, 0xff, //0x00002084 jne LBB0_387 - 0xe9, 0xee, 0x15, 0x00, 0x00, //0x0000208a jmp LBB0_662 - //0x0000208f LBB0_412 - 0x0f, 0xbc, 0xc3, //0x0000208f bsfl %ebx, %eax - 0xe9, 0x59, 0x01, 0x00, 0x00, //0x00002092 jmp LBB0_421 - //0x00002097 LBB0_413 - 0x89, 0xf0, //0x00002097 movl %esi, %eax - //0x00002099 LBB0_414 - 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002099 movq $16(%rsp), %rcx - 0x48, 0x03, 0x4c, 0x24, 0x28, //0x0000209e addq $40(%rsp), %rcx - 0x4c, 0x29, 0xc1, //0x000020a3 subq %r8, %rcx - 0x48, 0x29, 0xc1, //0x000020a6 subq %rax, %rcx - 0x4c, 0x29, 0xc9, //0x000020a9 subq %r9, %rcx - 0x48, 0x83, 0xc1, 0xfe, //0x000020ac addq $-2, %rcx - 0x49, 0x89, 0xc8, //0x000020b0 movq %rcx, %r8 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x000020b3 movq $8(%rsp), %r11 - 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x000020b8 movq $32(%rsp), %r9 - 0x4d, 0x85, 0xc0, //0x000020bd testq %r8, %r8 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000020c0 movq $24(%rsp), %r10 - 0x0f, 0x89, 0x05, 0xe6, 0xff, 0xff, //0x000020c5 jns LBB0_408 - 0xe9, 0xec, 0x13, 0x00, 0x00, //0x000020cb jmp LBB0_635 - //0x000020d0 LBB0_271 - 0x4c, 0x03, 0x7c, 0x24, 0x10, //0x000020d0 addq $16(%rsp), %r15 - 0x48, 0x83, 0xfb, 0x20, //0x000020d5 cmpq $32, %rbx - 0x0f, 0x82, 0xf6, 0x09, 0x00, 0x00, //0x000020d9 jb LBB0_527 - //0x000020df LBB0_272 - 0xc4, 0xc1, 0x7e, 0x6f, 0x07, //0x000020df vmovdqu (%r15), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x000020e4 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x000020e8 vpmovmskb %ymm1, %esi - 0xc5, 0xfd, 0x74, 0xc7, //0x000020ec vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x000020f0 vpmovmskb %ymm0, %edx - 0x85, 0xd2, //0x000020f4 testl %edx, %edx - 0x0f, 0x85, 0x6e, 0x09, 0x00, 0x00, //0x000020f6 jne LBB0_523 - 0x4d, 0x85, 0xd2, //0x000020fc testq %r10, %r10 - 0x0f, 0x85, 0x83, 0x09, 0x00, 0x00, //0x000020ff jne LBB0_525 - 0x45, 0x31, 0xd2, //0x00002105 xorl %r10d, %r10d - 0x48, 0x85, 0xf6, //0x00002108 testq %rsi, %rsi - 0x0f, 0x84, 0xbc, 0x09, 0x00, 0x00, //0x0000210b je LBB0_526 - //0x00002111 LBB0_275 - 0x48, 0x0f, 0xbc, 0xc6, //0x00002111 bsfq %rsi, %rax - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00002115 subq $16(%rsp), %r15 - 0x49, 0x01, 0xc7, //0x0000211a addq %rax, %r15 - 0x49, 0x83, 0xc7, 0x01, //0x0000211d addq $1, %r15 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002121 movq $24(%rsp), %r10 - 0xe9, 0xdb, 0xfb, 0xff, 0xff, //0x00002126 jmp LBB0_379 - //0x0000212b LBB0_312 - 0x4c, 0x03, 0x7c, 0x24, 0x10, //0x0000212b addq $16(%rsp), %r15 - 0x48, 0x83, 0xfb, 0x20, //0x00002130 cmpq $32, %rbx - 0x0f, 0x82, 0x1c, 0x0b, 0x00, 0x00, //0x00002134 jb LBB0_549 - //0x0000213a LBB0_313 - 0xc4, 0xc1, 0x7e, 0x6f, 0x07, //0x0000213a vmovdqu (%r15), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x0000213f vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd1, //0x00002143 vpmovmskb %ymm1, %r10d - 0xc5, 0xfd, 0x74, 0xcf, //0x00002147 vpcmpeqb %ymm7, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x0000214b vpmovmskb %ymm1, %edx - 0x85, 0xd2, //0x0000214f testl %edx, %edx - 0x0f, 0x85, 0x3b, 0x0a, 0x00, 0x00, //0x00002151 jne LBB0_540 - 0x4d, 0x85, 0xdb, //0x00002157 testq %r11, %r11 - 0x0f, 0x85, 0x50, 0x0a, 0x00, 0x00, //0x0000215a jne LBB0_542 - 0x45, 0x31, 0xdb, //0x00002160 xorl %r11d, %r11d - 0x4d, 0x85, 0xd2, //0x00002163 testq %r10, %r10 - 0x0f, 0x84, 0x8a, 0x0a, 0x00, 0x00, //0x00002166 je LBB0_543 - //0x0000216c LBB0_316 - 0x49, 0x0f, 0xbc, 0xd2, //0x0000216c bsfq %r10, %rdx - 0xe9, 0x86, 0x0a, 0x00, 0x00, //0x00002170 jmp LBB0_544 - //0x00002175 LBB0_415 - 0x0f, 0xbc, 0xc6, //0x00002175 bsfl %esi, %eax - //0x00002178 LBB0_416 - 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002178 movq $16(%rsp), %rcx - 0x4c, 0x01, 0xf9, //0x0000217d addq %r15, %rcx - 0x4c, 0x29, 0xe1, //0x00002180 subq %r12, %rcx - 0x48, 0x29, 0xc1, //0x00002183 subq %rax, %rcx - 0x49, 0xf7, 0xd5, //0x00002186 notq %r13 - 0x49, 0x01, 0xcd, //0x00002189 addq %rcx, %r13 - 0x4d, 0x89, 0xec, //0x0000218c movq %r13, %r12 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x0000218f movq $8(%rsp), %r11 - 0x4c, 0x8b, 0x6c, 0x24, 0x38, //0x00002194 movq $56(%rsp), %r13 - 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x00002199 movq $32(%rsp), %r9 - 0xe9, 0x73, 0xfc, 0xff, 0xff, //0x0000219e jmp LBB0_397 - //0x000021a3 LBB0_417 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x000021a3 movq $16(%rsp), %rax - 0x4c, 0x01, 0xf8, //0x000021a8 addq %r15, %rax - 0x4c, 0x29, 0xe0, //0x000021ab subq %r12, %rax - 0x48, 0xf7, 0xd1, //0x000021ae notq %rcx - 0x48, 0x01, 0xc1, //0x000021b1 addq %rax, %rcx - 0x49, 0x89, 0xcc, //0x000021b4 movq %rcx, %r12 - 0xe9, 0x55, 0xfc, 0xff, 0xff, //0x000021b7 jmp LBB0_396 - //0x000021bc LBB0_418 - 0x89, 0xd0, //0x000021bc movl %edx, %eax - 0xe9, 0x2d, 0x00, 0x00, 0x00, //0x000021be jmp LBB0_421 - //0x000021c3 LBB0_419 - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000021c3 movq $-1, %r10 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x000021ca movq $-1, (%rsp) - 0x4d, 0x89, 0xe0, //0x000021d2 movq %r12, %r8 - 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x000021d5 movq %r9, $32(%rsp) - 0x49, 0x83, 0xfd, 0x10, //0x000021da cmpq $16, %r13 - 0x48, 0x8b, 0x44, 0x24, 0x28, //0x000021de movq $40(%rsp), %rax - 0x0f, 0x83, 0x2d, 0xeb, 0xff, 0xff, //0x000021e3 jae LBB0_158 - 0xe9, 0xa9, 0xec, 0xff, 0xff, //0x000021e9 jmp LBB0_176 - //0x000021ee LBB0_420 - 0x89, 0xf8, //0x000021ee movl %edi, %eax - //0x000021f0 LBB0_421 - 0x49, 0xf7, 0xd4, //0x000021f0 notq %r12 - 0x49, 0x29, 0xc4, //0x000021f3 subq %rax, %r12 - //0x000021f6 LBB0_422 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x000021f6 movq $8(%rsp), %r11 - //0x000021fb LBB0_423 - 0x4d, 0x85, 0xe4, //0x000021fb testq %r12, %r12 - 0x0f, 0x88, 0x76, 0x14, 0x00, 0x00, //0x000021fe js LBB0_661 - 0x49, 0x8b, 0x0b, //0x00002204 movq (%r11), %rcx - //0x00002207 LBB0_425 - 0x4c, 0x01, 0xe1, //0x00002207 addq %r12, %rcx - 0x49, 0x89, 0x0b, //0x0000220a movq %rcx, (%r11) - 0x4d, 0x85, 0xff, //0x0000220d testq %r15, %r15 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002210 movq $24(%rsp), %r10 - 0x0f, 0x8f, 0xd5, 0xe4, 0xff, 0xff, //0x00002215 jg LBB0_55 - 0xe9, 0x51, 0x14, 0x00, 0x00, //0x0000221b jmp LBB0_426 - //0x00002220 LBB0_427 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00002220 movq $16(%rsp), %rax - 0x4e, 0x8d, 0x3c, 0x00, //0x00002225 leaq (%rax,%r8), %r15 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002229 movq $-1, (%rsp) - 0x45, 0x31, 0xd2, //0x00002231 xorl %r10d, %r10d - 0x48, 0x83, 0xfb, 0x20, //0x00002234 cmpq $32, %rbx - 0x0f, 0x83, 0x92, 0xfc, 0xff, 0xff, //0x00002238 jae LBB0_106 - 0xe9, 0x82, 0x01, 0x00, 0x00, //0x0000223e jmp LBB0_444 - //0x00002243 LBB0_428 - 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002243 movq $16(%rsp), %rcx - 0x4e, 0x8d, 0x3c, 0x01, //0x00002248 leaq (%rcx,%r8), %r15 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x0000224c movq $-1, (%rsp) - 0x45, 0x31, 0xdb, //0x00002254 xorl %r11d, %r11d - 0x49, 0x83, 0xfd, 0x20, //0x00002257 cmpq $32, %r13 - 0x0f, 0x83, 0xca, 0xfc, 0xff, 0xff, //0x0000225b jae LBB0_208 - //0x00002261 LBB0_429 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002261 movq $24(%rsp), %r10 - 0xe9, 0x09, 0x03, 0x00, 0x00, //0x00002266 jmp LBB0_466 - //0x0000226b LBB0_430 - 0x89, 0xf0, //0x0000226b movl %esi, %eax - 0xe9, 0x06, 0xff, 0xff, 0xff, //0x0000226d jmp LBB0_416 - //0x00002272 LBB0_431 - 0x89, 0xf0, //0x00002272 movl %esi, %eax - 0xe9, 0x02, 0x00, 0x00, 0x00, //0x00002274 jmp LBB0_433 - //0x00002279 LBB0_432 - 0x89, 0xd0, //0x00002279 movl %edx, %eax - //0x0000227b LBB0_433 - 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x0000227b movq $16(%rsp), %rcx - 0x4c, 0x01, 0xf9, //0x00002280 addq %r15, %rcx - 0x4c, 0x29, 0xe1, //0x00002283 subq %r12, %rcx - 0x48, 0x29, 0xc1, //0x00002286 subq %rax, %rcx - 0x49, 0xf7, 0xd5, //0x00002289 notq %r13 - 0x49, 0x01, 0xcd, //0x0000228c addq %rcx, %r13 - 0x4d, 0x89, 0xec, //0x0000228f movq %r13, %r12 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002292 movq $8(%rsp), %r11 - 0x4c, 0x8b, 0x6c, 0x24, 0x38, //0x00002297 movq $56(%rsp), %r13 - 0xe9, 0x75, 0xfb, 0xff, 0xff, //0x0000229c jmp LBB0_397 - //0x000022a1 LBB0_434 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x000022a1 movq $16(%rsp), %rax - 0x4e, 0x8d, 0x3c, 0x00, //0x000022a6 leaq (%rax,%r8), %r15 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x000022aa movq $-1, (%rsp) - 0x45, 0x31, 0xd2, //0x000022b2 xorl %r10d, %r10d - 0x48, 0x83, 0xfb, 0x20, //0x000022b5 cmpq $32, %rbx - 0x0f, 0x83, 0x06, 0xfd, 0xff, 0xff, //0x000022b9 jae LBB0_130 - 0xe9, 0xda, 0x03, 0x00, 0x00, //0x000022bf jmp LBB0_482 - //0x000022c4 LBB0_435 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x000022c4 movq $16(%rsp), %rax - 0x4e, 0x8d, 0x3c, 0x00, //0x000022c9 leaq (%rax,%r8), %r15 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x000022cd movq $-1, (%rsp) - 0x45, 0x31, 0xdb, //0x000022d5 xorl %r11d, %r11d - 0x48, 0x83, 0xfb, 0x20, //0x000022d8 cmpq $32, %rbx - 0x0f, 0x83, 0x3e, 0xfd, 0xff, 0xff, //0x000022dc jae LBB0_229 - //0x000022e2 LBB0_436 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000022e2 movq $24(%rsp), %r10 - 0xe9, 0x61, 0x05, 0x00, 0x00, //0x000022e7 jmp LBB0_504 - //0x000022ec LBB0_437 - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x000022ec movq $-1, %r11 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x000022f3 movq $-1, (%rsp) - 0x4c, 0x8b, 0x64, 0x24, 0x30, //0x000022fb movq $48(%rsp), %r12 - 0x4c, 0x89, 0x6c, 0x24, 0x38, //0x00002300 movq %r13, $56(%rsp) - 0x49, 0x83, 0xfa, 0x10, //0x00002305 cmpq $16, %r10 - 0x0f, 0x83, 0xb4, 0xf7, 0xff, 0xff, //0x00002309 jae LBB0_343 - 0xe9, 0xe9, 0xf8, 0xff, 0xff, //0x0000230f jmp LBB0_361 - //0x00002314 LBB0_438 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00002314 movq $16(%rsp), %rax - 0x4e, 0x8d, 0x3c, 0x00, //0x00002319 leaq (%rax,%r8), %r15 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x0000231d movq $-1, (%rsp) - 0x45, 0x31, 0xd2, //0x00002325 xorl %r10d, %r10d - 0x48, 0x83, 0xfb, 0x20, //0x00002328 cmpq $32, %rbx - 0x0f, 0x83, 0xad, 0xfd, 0xff, 0xff, //0x0000232c jae LBB0_272 - 0xe9, 0x9e, 0x07, 0x00, 0x00, //0x00002332 jmp LBB0_527 - //0x00002337 LBB0_439 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00002337 movq $16(%rsp), %rax - 0x4e, 0x8d, 0x3c, 0x00, //0x0000233c leaq (%rax,%r8), %r15 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002340 movq $-1, (%rsp) - 0x45, 0x31, 0xdb, //0x00002348 xorl %r11d, %r11d - 0x48, 0x83, 0xfb, 0x20, //0x0000234b cmpq $32, %rbx - 0x0f, 0x83, 0xe5, 0xfd, 0xff, 0xff, //0x0000234f jae LBB0_313 - 0xe9, 0xfc, 0x08, 0x00, 0x00, //0x00002355 jmp LBB0_549 - //0x0000235a LBB0_440 - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x0000235a cmpq $-1, (%rsp) - 0x0f, 0x85, 0x13, 0x00, 0x00, 0x00, //0x0000235f jne LBB0_442 - 0x4c, 0x89, 0xf8, //0x00002365 movq %r15, %rax - 0x48, 0x2b, 0x44, 0x24, 0x10, //0x00002368 subq $16(%rsp), %rax - 0x48, 0x0f, 0xbc, 0xca, //0x0000236d bsfq %rdx, %rcx - 0x48, 0x01, 0xc1, //0x00002371 addq %rax, %rcx - 0x48, 0x89, 0x0c, 0x24, //0x00002374 movq %rcx, (%rsp) - //0x00002378 LBB0_442 - 0x44, 0x89, 0xd0, //0x00002378 movl %r10d, %eax - 0xf7, 0xd0, //0x0000237b notl %eax - 0x21, 0xd0, //0x0000237d andl %edx, %eax - 0x8d, 0x0c, 0x00, //0x0000237f leal (%rax,%rax), %ecx - 0x41, 0x8d, 0x3c, 0x42, //0x00002382 leal (%r10,%rax,2), %edi - 0xf7, 0xd1, //0x00002386 notl %ecx - 0x21, 0xd1, //0x00002388 andl %edx, %ecx - 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000238a andl $-1431655766, %ecx - 0x45, 0x31, 0xd2, //0x00002390 xorl %r10d, %r10d - 0x01, 0xc1, //0x00002393 addl %eax, %ecx - 0x41, 0x0f, 0x92, 0xc2, //0x00002395 setb %r10b - 0x01, 0xc9, //0x00002399 addl %ecx, %ecx - 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x0000239b xorl $1431655765, %ecx - 0x21, 0xf9, //0x000023a1 andl %edi, %ecx - 0xf7, 0xd1, //0x000023a3 notl %ecx - 0x21, 0xce, //0x000023a5 andl %ecx, %esi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000023a7 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x2c, 0xde, 0xff, 0xff, //0x000023ac vmovdqu $-8660(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x48, 0x85, 0xf6, //0x000023b4 testq %rsi, %rsi - 0x0f, 0x85, 0x45, 0xfb, 0xff, 0xff, //0x000023b7 jne LBB0_109 - //0x000023bd LBB0_443 - 0x49, 0x83, 0xc7, 0x20, //0x000023bd addq $32, %r15 - 0x48, 0x83, 0xc3, 0xe0, //0x000023c1 addq $-32, %rbx - //0x000023c5 LBB0_444 - 0x4d, 0x85, 0xd2, //0x000023c5 testq %r10, %r10 - 0x0f, 0x85, 0x38, 0x05, 0x00, 0x00, //0x000023c8 jne LBB0_515 - 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x000023ce movq $16(%rsp), %rcx - 0x48, 0xf7, 0xd1, //0x000023d3 notq %rcx - 0x48, 0x8b, 0x3c, 0x24, //0x000023d6 movq (%rsp), %rdi - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000023da movq $24(%rsp), %r10 - 0x48, 0x85, 0xdb, //0x000023df testq %rbx, %rbx - 0x0f, 0x84, 0x96, 0x00, 0x00, 0x00, //0x000023e2 je LBB0_456 - //0x000023e8 LBB0_446 - 0x48, 0x83, 0xc1, 0x01, //0x000023e8 addq $1, %rcx - //0x000023ec LBB0_447 - 0x31, 0xf6, //0x000023ec xorl %esi, %esi - //0x000023ee LBB0_448 - 0x41, 0x0f, 0xb6, 0x14, 0x37, //0x000023ee movzbl (%r15,%rsi), %edx - 0x80, 0xfa, 0x22, //0x000023f3 cmpb $34, %dl - 0x0f, 0x84, 0x7b, 0x00, 0x00, 0x00, //0x000023f6 je LBB0_455 - 0x80, 0xfa, 0x5c, //0x000023fc cmpb $92, %dl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000023ff je LBB0_453 - 0x48, 0x83, 0xc6, 0x01, //0x00002405 addq $1, %rsi - 0x48, 0x39, 0xf3, //0x00002409 cmpq %rsi, %rbx - 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x0000240c jne LBB0_448 - 0xe9, 0x71, 0x00, 0x00, 0x00, //0x00002412 jmp LBB0_451 - //0x00002417 LBB0_453 - 0x48, 0x8d, 0x43, 0xff, //0x00002417 leaq $-1(%rbx), %rax - 0x48, 0x39, 0xf0, //0x0000241b cmpq %rsi, %rax - 0x0f, 0x84, 0x9e, 0x09, 0x00, 0x00, //0x0000241e je LBB0_381 - 0x4a, 0x8d, 0x04, 0x39, //0x00002424 leaq (%rcx,%r15), %rax - 0x48, 0x01, 0xf0, //0x00002428 addq %rsi, %rax - 0x48, 0x83, 0xff, 0xff, //0x0000242b cmpq $-1, %rdi - 0x48, 0x8b, 0x14, 0x24, //0x0000242f movq (%rsp), %rdx - 0x48, 0x0f, 0x44, 0xd0, //0x00002433 cmoveq %rax, %rdx - 0x48, 0x89, 0x14, 0x24, //0x00002437 movq %rdx, (%rsp) - 0x48, 0x0f, 0x44, 0xf8, //0x0000243b cmoveq %rax, %rdi - 0x49, 0x01, 0xf7, //0x0000243f addq %rsi, %r15 - 0x49, 0x83, 0xc7, 0x02, //0x00002442 addq $2, %r15 - 0x48, 0x89, 0xd8, //0x00002446 movq %rbx, %rax - 0x48, 0x29, 0xf0, //0x00002449 subq %rsi, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x0000244c addq $-2, %rax - 0x48, 0x83, 0xc3, 0xfe, //0x00002450 addq $-2, %rbx - 0x48, 0x39, 0xf3, //0x00002454 cmpq %rsi, %rbx - 0x48, 0x89, 0xc3, //0x00002457 movq %rax, %rbx - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x0000245a movq $24(%rsp), %r10 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000245f vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x74, 0xdd, 0xff, 0xff, //0x00002464 vmovdqu $-8844(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x0f, 0x85, 0x7a, 0xff, 0xff, 0xff, //0x0000246c jne LBB0_447 - 0xe9, 0x4b, 0x09, 0x00, 0x00, //0x00002472 jmp LBB0_381 - //0x00002477 LBB0_455 - 0x49, 0x01, 0xf7, //0x00002477 addq %rsi, %r15 - 0x49, 0x83, 0xc7, 0x01, //0x0000247a addq $1, %r15 - //0x0000247e LBB0_456 - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x0000247e subq $16(%rsp), %r15 - 0xe9, 0x69, 0xef, 0xff, 0xff, //0x00002483 jmp LBB0_240 - //0x00002488 LBB0_451 - 0x80, 0xfa, 0x22, //0x00002488 cmpb $34, %dl - 0x0f, 0x85, 0x31, 0x09, 0x00, 0x00, //0x0000248b jne LBB0_381 - 0x49, 0x01, 0xdf, //0x00002491 addq %rbx, %r15 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002494 movq $24(%rsp), %r10 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002499 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x3a, 0xdd, 0xff, 0xff, //0x0000249e vmovdqu $-8902(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xe9, 0xd3, 0xff, 0xff, 0xff, //0x000024a6 jmp LBB0_456 - //0x000024ab LBB0_457 - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x000024ab cmpq $-1, (%rsp) - 0x0f, 0x85, 0x13, 0x00, 0x00, 0x00, //0x000024b0 jne LBB0_459 - 0x4c, 0x89, 0xf9, //0x000024b6 movq %r15, %rcx - 0x48, 0x2b, 0x4c, 0x24, 0x10, //0x000024b9 subq $16(%rsp), %rcx - 0x48, 0x0f, 0xbc, 0xf2, //0x000024be bsfq %rdx, %rsi - 0x48, 0x01, 0xce, //0x000024c2 addq %rcx, %rsi - 0x48, 0x89, 0x34, 0x24, //0x000024c5 movq %rsi, (%rsp) - //0x000024c9 LBB0_459 - 0x44, 0x89, 0xd9, //0x000024c9 movl %r11d, %ecx - 0xf7, 0xd1, //0x000024cc notl %ecx - 0x21, 0xd1, //0x000024ce andl %edx, %ecx - 0x8d, 0x34, 0x09, //0x000024d0 leal (%rcx,%rcx), %esi - 0x41, 0x8d, 0x3c, 0x4b, //0x000024d3 leal (%r11,%rcx,2), %edi - 0xf7, 0xd6, //0x000024d7 notl %esi - 0x21, 0xd6, //0x000024d9 andl %edx, %esi - 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x000024db andl $-1431655766, %esi - 0x45, 0x31, 0xdb, //0x000024e1 xorl %r11d, %r11d - 0x01, 0xce, //0x000024e4 addl %ecx, %esi - 0x41, 0x0f, 0x92, 0xc3, //0x000024e6 setb %r11b - 0x01, 0xf6, //0x000024ea addl %esi, %esi - 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x000024ec xorl $1431655765, %esi - 0x21, 0xfe, //0x000024f2 andl %edi, %esi - 0xf7, 0xd6, //0x000024f4 notl %esi - 0x41, 0x21, 0xf2, //0x000024f6 andl %esi, %r10d - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000024f9 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xda, 0xdc, 0xff, 0xff, //0x000024fe vmovdqu $-8998(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x4d, 0x85, 0xd2, //0x00002506 testq %r10, %r10 - 0x0f, 0x85, 0x4e, 0xfa, 0xff, 0xff, //0x00002509 jne LBB0_211 - //0x0000250f LBB0_460 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000250f movl $64, %edx - //0x00002514 LBB0_461 - 0xc5, 0xbd, 0x64, 0xc8, //0x00002514 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00002518 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x0000251d vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x00002521 vpmovmskb %ymm0, %esi - 0x0f, 0xbc, 0xfe, //0x00002525 bsfl %esi, %edi - 0x4d, 0x85, 0xd2, //0x00002528 testq %r10, %r10 - 0x0f, 0x84, 0x2e, 0x00, 0x00, 0x00, //0x0000252b je LBB0_464 - 0x85, 0xf6, //0x00002531 testl %esi, %esi - 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00002533 movl $64, %ecx - 0x0f, 0x44, 0xf9, //0x00002538 cmovel %ecx, %edi - 0x48, 0x39, 0xfa, //0x0000253b cmpq %rdi, %rdx - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x0000253e movq $24(%rsp), %r10 - 0x0f, 0x87, 0xd9, 0x11, 0x00, 0x00, //0x00002543 ja LBB0_673 - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00002549 subq $16(%rsp), %r15 - 0x49, 0x01, 0xd7, //0x0000254e addq %rdx, %r15 - 0x49, 0x83, 0xc7, 0x01, //0x00002551 addq $1, %r15 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002555 movq $8(%rsp), %r11 - 0xe9, 0xc9, 0x00, 0x00, 0x00, //0x0000255a jmp LBB0_477 - //0x0000255f LBB0_464 - 0x85, 0xf6, //0x0000255f testl %esi, %esi - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002561 movq $24(%rsp), %r10 - 0x0f, 0x85, 0xc8, 0x11, 0x00, 0x00, //0x00002566 jne LBB0_678 - 0x49, 0x83, 0xc7, 0x20, //0x0000256c addq $32, %r15 - 0x49, 0x83, 0xc5, 0xe0, //0x00002570 addq $-32, %r13 - //0x00002574 LBB0_466 - 0x4d, 0x85, 0xdb, //0x00002574 testq %r11, %r11 - 0x0f, 0x85, 0xe3, 0x03, 0x00, 0x00, //0x00002577 jne LBB0_517 - 0x48, 0x8b, 0x0c, 0x24, //0x0000257d movq (%rsp), %rcx - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002581 movq $8(%rsp), %r11 - 0x4d, 0x85, 0xed, //0x00002586 testq %r13, %r13 - 0x0f, 0x84, 0x33, 0x08, 0x00, 0x00, //0x00002589 je LBB0_381 - //0x0000258f LBB0_468 - 0x41, 0x0f, 0xb6, 0x17, //0x0000258f movzbl (%r15), %edx - 0x80, 0xfa, 0x22, //0x00002593 cmpb $34, %dl - 0x0f, 0x84, 0x83, 0x00, 0x00, 0x00, //0x00002596 je LBB0_476 - 0x80, 0xfa, 0x5c, //0x0000259c cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x0000259f je LBB0_472 - 0x80, 0xfa, 0x1f, //0x000025a5 cmpb $31, %dl - 0x0f, 0x86, 0x92, 0x11, 0x00, 0x00, //0x000025a8 jbe LBB0_674 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000025ae movq $-1, %rdx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x000025b5 movl $1, %esi - 0x49, 0x01, 0xf7, //0x000025ba addq %rsi, %r15 - 0x49, 0x01, 0xd5, //0x000025bd addq %rdx, %r13 - 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x000025c0 jne LBB0_468 - 0xe9, 0xf7, 0x07, 0x00, 0x00, //0x000025c6 jmp LBB0_381 - //0x000025cb LBB0_472 - 0x49, 0x83, 0xfd, 0x01, //0x000025cb cmpq $1, %r13 - 0x0f, 0x84, 0xa7, 0x07, 0x00, 0x00, //0x000025cf je LBB0_565 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x000025d5 movq $-2, %rdx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x000025dc movl $2, %esi - 0x48, 0x83, 0xf9, 0xff, //0x000025e1 cmpq $-1, %rcx - 0x0f, 0x85, 0x0c, 0x00, 0x00, 0x00, //0x000025e5 jne LBB0_475 - 0x4c, 0x89, 0xf9, //0x000025eb movq %r15, %rcx - 0x48, 0x2b, 0x4c, 0x24, 0x10, //0x000025ee subq $16(%rsp), %rcx - 0x48, 0x89, 0x0c, 0x24, //0x000025f3 movq %rcx, (%rsp) - //0x000025f7 LBB0_475 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x000025f7 movq $8(%rsp), %r11 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000025fc movq $24(%rsp), %r10 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002601 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xd2, 0xdb, 0xff, 0xff, //0x00002606 vmovdqu $-9262(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x49, 0x01, 0xf7, //0x0000260e addq %rsi, %r15 - 0x49, 0x01, 0xd5, //0x00002611 addq %rdx, %r13 - 0x0f, 0x85, 0x75, 0xff, 0xff, 0xff, //0x00002614 jne LBB0_468 - 0xe9, 0xa3, 0x07, 0x00, 0x00, //0x0000261a jmp LBB0_381 - //0x0000261f LBB0_476 - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x0000261f subq $16(%rsp), %r15 - 0x49, 0x83, 0xc7, 0x01, //0x00002624 addq $1, %r15 - //0x00002628 LBB0_477 - 0x4d, 0x89, 0xcd, //0x00002628 movq %r9, %r13 - 0x49, 0x89, 0xc1, //0x0000262b movq %rax, %r9 - 0xe9, 0xbe, 0xed, 0xff, 0xff, //0x0000262e jmp LBB0_240 - //0x00002633 LBB0_478 - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00002633 cmpq $-1, (%rsp) - 0x0f, 0x85, 0x13, 0x00, 0x00, 0x00, //0x00002638 jne LBB0_480 - 0x4c, 0x89, 0xf8, //0x0000263e movq %r15, %rax - 0x48, 0x2b, 0x44, 0x24, 0x10, //0x00002641 subq $16(%rsp), %rax - 0x48, 0x0f, 0xbc, 0xca, //0x00002646 bsfq %rdx, %rcx - 0x48, 0x01, 0xc1, //0x0000264a addq %rax, %rcx - 0x48, 0x89, 0x0c, 0x24, //0x0000264d movq %rcx, (%rsp) - //0x00002651 LBB0_480 - 0x44, 0x89, 0xd0, //0x00002651 movl %r10d, %eax - 0xf7, 0xd0, //0x00002654 notl %eax - 0x21, 0xd0, //0x00002656 andl %edx, %eax - 0x8d, 0x0c, 0x00, //0x00002658 leal (%rax,%rax), %ecx - 0x41, 0x8d, 0x3c, 0x42, //0x0000265b leal (%r10,%rax,2), %edi - 0xf7, 0xd1, //0x0000265f notl %ecx - 0x21, 0xd1, //0x00002661 andl %edx, %ecx - 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002663 andl $-1431655766, %ecx - 0x45, 0x31, 0xd2, //0x00002669 xorl %r10d, %r10d - 0x01, 0xc1, //0x0000266c addl %eax, %ecx - 0x41, 0x0f, 0x92, 0xc2, //0x0000266e setb %r10b - 0x01, 0xc9, //0x00002672 addl %ecx, %ecx - 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00002674 xorl $1431655765, %ecx - 0x21, 0xf9, //0x0000267a andl %edi, %ecx - 0xf7, 0xd1, //0x0000267c notl %ecx - 0x21, 0xce, //0x0000267e andl %ecx, %esi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002680 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x53, 0xdb, 0xff, 0xff, //0x00002685 vmovdqu $-9389(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x48, 0x85, 0xf6, //0x0000268d testq %rsi, %rsi - 0x0f, 0x85, 0x61, 0xf9, 0xff, 0xff, //0x00002690 jne LBB0_133 - //0x00002696 LBB0_481 - 0x49, 0x83, 0xc7, 0x20, //0x00002696 addq $32, %r15 - 0x48, 0x83, 0xc3, 0xe0, //0x0000269a addq $-32, %rbx - //0x0000269e LBB0_482 - 0x4d, 0x85, 0xd2, //0x0000269e testq %r10, %r10 - 0x0f, 0x85, 0x11, 0x03, 0x00, 0x00, //0x000026a1 jne LBB0_519 - 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x000026a7 movq $16(%rsp), %rcx - 0x48, 0xf7, 0xd1, //0x000026ac notq %rcx - 0x48, 0x8b, 0x3c, 0x24, //0x000026af movq (%rsp), %rdi - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000026b3 movq $24(%rsp), %r10 - 0x48, 0x85, 0xdb, //0x000026b8 testq %rbx, %rbx - 0x0f, 0x84, 0x96, 0x00, 0x00, 0x00, //0x000026bb je LBB0_494 - //0x000026c1 LBB0_484 - 0x48, 0x83, 0xc1, 0x01, //0x000026c1 addq $1, %rcx - //0x000026c5 LBB0_485 - 0x31, 0xf6, //0x000026c5 xorl %esi, %esi - //0x000026c7 LBB0_486 - 0x41, 0x0f, 0xb6, 0x14, 0x37, //0x000026c7 movzbl (%r15,%rsi), %edx - 0x80, 0xfa, 0x22, //0x000026cc cmpb $34, %dl - 0x0f, 0x84, 0x7b, 0x00, 0x00, 0x00, //0x000026cf je LBB0_493 - 0x80, 0xfa, 0x5c, //0x000026d5 cmpb $92, %dl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000026d8 je LBB0_491 - 0x48, 0x83, 0xc6, 0x01, //0x000026de addq $1, %rsi - 0x48, 0x39, 0xf3, //0x000026e2 cmpq %rsi, %rbx - 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x000026e5 jne LBB0_486 - 0xe9, 0x71, 0x00, 0x00, 0x00, //0x000026eb jmp LBB0_489 - //0x000026f0 LBB0_491 - 0x48, 0x8d, 0x43, 0xff, //0x000026f0 leaq $-1(%rbx), %rax - 0x48, 0x39, 0xf0, //0x000026f4 cmpq %rsi, %rax - 0x0f, 0x84, 0xc5, 0x06, 0x00, 0x00, //0x000026f7 je LBB0_381 - 0x4a, 0x8d, 0x04, 0x39, //0x000026fd leaq (%rcx,%r15), %rax - 0x48, 0x01, 0xf0, //0x00002701 addq %rsi, %rax - 0x48, 0x83, 0xff, 0xff, //0x00002704 cmpq $-1, %rdi - 0x48, 0x8b, 0x14, 0x24, //0x00002708 movq (%rsp), %rdx - 0x48, 0x0f, 0x44, 0xd0, //0x0000270c cmoveq %rax, %rdx - 0x48, 0x89, 0x14, 0x24, //0x00002710 movq %rdx, (%rsp) - 0x48, 0x0f, 0x44, 0xf8, //0x00002714 cmoveq %rax, %rdi - 0x49, 0x01, 0xf7, //0x00002718 addq %rsi, %r15 - 0x49, 0x83, 0xc7, 0x02, //0x0000271b addq $2, %r15 - 0x48, 0x89, 0xd8, //0x0000271f movq %rbx, %rax - 0x48, 0x29, 0xf0, //0x00002722 subq %rsi, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00002725 addq $-2, %rax - 0x48, 0x83, 0xc3, 0xfe, //0x00002729 addq $-2, %rbx - 0x48, 0x39, 0xf3, //0x0000272d cmpq %rsi, %rbx - 0x48, 0x89, 0xc3, //0x00002730 movq %rax, %rbx - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002733 movq $24(%rsp), %r10 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002738 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x9b, 0xda, 0xff, 0xff, //0x0000273d vmovdqu $-9573(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x0f, 0x85, 0x7a, 0xff, 0xff, 0xff, //0x00002745 jne LBB0_485 - 0xe9, 0x72, 0x06, 0x00, 0x00, //0x0000274b jmp LBB0_381 - //0x00002750 LBB0_493 - 0x49, 0x01, 0xf7, //0x00002750 addq %rsi, %r15 - 0x49, 0x83, 0xc7, 0x01, //0x00002753 addq $1, %r15 - //0x00002757 LBB0_494 - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00002757 subq $16(%rsp), %r15 - 0xe9, 0xd6, 0xed, 0xff, 0xff, //0x0000275c jmp LBB0_259 - //0x00002761 LBB0_489 - 0x80, 0xfa, 0x22, //0x00002761 cmpb $34, %dl - 0x0f, 0x85, 0x58, 0x06, 0x00, 0x00, //0x00002764 jne LBB0_381 - 0x49, 0x01, 0xdf, //0x0000276a addq %rbx, %r15 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x0000276d movq $24(%rsp), %r10 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002772 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x61, 0xda, 0xff, 0xff, //0x00002777 vmovdqu $-9631(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xe9, 0xd3, 0xff, 0xff, 0xff, //0x0000277f jmp LBB0_494 - //0x00002784 LBB0_495 - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00002784 cmpq $-1, (%rsp) - 0x0f, 0x85, 0x13, 0x00, 0x00, 0x00, //0x00002789 jne LBB0_497 - 0x4c, 0x89, 0xf8, //0x0000278f movq %r15, %rax - 0x48, 0x2b, 0x44, 0x24, 0x10, //0x00002792 subq $16(%rsp), %rax - 0x48, 0x0f, 0xbc, 0xca, //0x00002797 bsfq %rdx, %rcx - 0x48, 0x01, 0xc1, //0x0000279b addq %rax, %rcx - 0x48, 0x89, 0x0c, 0x24, //0x0000279e movq %rcx, (%rsp) - //0x000027a2 LBB0_497 - 0x44, 0x89, 0xd8, //0x000027a2 movl %r11d, %eax - 0xf7, 0xd0, //0x000027a5 notl %eax - 0x21, 0xd0, //0x000027a7 andl %edx, %eax - 0x8d, 0x0c, 0x00, //0x000027a9 leal (%rax,%rax), %ecx - 0x41, 0x8d, 0x34, 0x43, //0x000027ac leal (%r11,%rax,2), %esi - 0xf7, 0xd1, //0x000027b0 notl %ecx - 0x21, 0xd1, //0x000027b2 andl %edx, %ecx - 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x000027b4 andl $-1431655766, %ecx - 0x45, 0x31, 0xdb, //0x000027ba xorl %r11d, %r11d - 0x01, 0xc1, //0x000027bd addl %eax, %ecx - 0x41, 0x0f, 0x92, 0xc3, //0x000027bf setb %r11b - 0x01, 0xc9, //0x000027c3 addl %ecx, %ecx - 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x000027c5 xorl $1431655765, %ecx - 0x21, 0xf1, //0x000027cb andl %esi, %ecx - 0xf7, 0xd1, //0x000027cd notl %ecx - 0x41, 0x21, 0xca, //0x000027cf andl %ecx, %r10d - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000027d2 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x01, 0xda, 0xff, 0xff, //0x000027d7 vmovdqu $-9727(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x4d, 0x85, 0xd2, //0x000027df testq %r10, %r10 - 0x0f, 0x85, 0x6a, 0xf8, 0xff, 0xff, //0x000027e2 jne LBB0_232 - //0x000027e8 LBB0_498 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x000027e8 movl $64, %edx - //0x000027ed LBB0_499 - 0xc5, 0xbd, 0x64, 0xc8, //0x000027ed vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x000027f1 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x000027f6 vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x000027fa vpmovmskb %ymm0, %esi - 0x0f, 0xbc, 0xfe, //0x000027fe bsfl %esi, %edi - 0x4d, 0x85, 0xd2, //0x00002801 testq %r10, %r10 - 0x0f, 0x84, 0x2e, 0x00, 0x00, 0x00, //0x00002804 je LBB0_502 - 0x85, 0xf6, //0x0000280a testl %esi, %esi - 0xb8, 0x40, 0x00, 0x00, 0x00, //0x0000280c movl $64, %eax - 0x0f, 0x44, 0xf8, //0x00002811 cmovel %eax, %edi - 0x48, 0x39, 0xfa, //0x00002814 cmpq %rdi, %rdx - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002817 movq $24(%rsp), %r10 - 0x0f, 0x87, 0x35, 0x0f, 0x00, 0x00, //0x0000281c ja LBB0_677 - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00002822 subq $16(%rsp), %r15 - 0x49, 0x01, 0xd7, //0x00002827 addq %rdx, %r15 - 0x49, 0x83, 0xc7, 0x01, //0x0000282a addq $1, %r15 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x0000282e movq $8(%rsp), %r11 - 0xe9, 0xff, 0xec, 0xff, 0xff, //0x00002833 jmp LBB0_259 - //0x00002838 LBB0_502 - 0x85, 0xf6, //0x00002838 testl %esi, %esi - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x0000283a movq $24(%rsp), %r10 - 0x0f, 0x85, 0xef, 0x0e, 0x00, 0x00, //0x0000283f jne LBB0_678 - 0x49, 0x83, 0xc7, 0x20, //0x00002845 addq $32, %r15 - 0x48, 0x83, 0xc3, 0xe0, //0x00002849 addq $-32, %rbx - //0x0000284d LBB0_504 - 0x4d, 0x85, 0xdb, //0x0000284d testq %r11, %r11 - 0x0f, 0x85, 0xbc, 0x01, 0x00, 0x00, //0x00002850 jne LBB0_521 - 0x48, 0x8b, 0x0c, 0x24, //0x00002856 movq (%rsp), %rcx - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x0000285a movq $8(%rsp), %r11 - 0x48, 0x85, 0xdb, //0x0000285f testq %rbx, %rbx - 0x0f, 0x84, 0x5a, 0x05, 0x00, 0x00, //0x00002862 je LBB0_381 - //0x00002868 LBB0_506 - 0x41, 0x0f, 0xb6, 0x17, //0x00002868 movzbl (%r15), %edx - 0x80, 0xfa, 0x22, //0x0000286c cmpb $34, %dl - 0x0f, 0x84, 0x83, 0x00, 0x00, 0x00, //0x0000286f je LBB0_514 - 0x80, 0xfa, 0x5c, //0x00002875 cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002878 je LBB0_510 - 0x80, 0xfa, 0x1f, //0x0000287e cmpb $31, %dl - 0x0f, 0x86, 0xb9, 0x0e, 0x00, 0x00, //0x00002881 jbe LBB0_674 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002887 movq $-1, %rdx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x0000288e movl $1, %esi - 0x49, 0x01, 0xf7, //0x00002893 addq %rsi, %r15 - 0x48, 0x01, 0xd3, //0x00002896 addq %rdx, %rbx - 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x00002899 jne LBB0_506 - 0xe9, 0x1e, 0x05, 0x00, 0x00, //0x0000289f jmp LBB0_381 - //0x000028a4 LBB0_510 - 0x48, 0x83, 0xfb, 0x01, //0x000028a4 cmpq $1, %rbx - 0x0f, 0x84, 0xce, 0x04, 0x00, 0x00, //0x000028a8 je LBB0_565 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x000028ae movq $-2, %rdx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x000028b5 movl $2, %esi - 0x48, 0x83, 0xf9, 0xff, //0x000028ba cmpq $-1, %rcx - 0x0f, 0x85, 0x0c, 0x00, 0x00, 0x00, //0x000028be jne LBB0_513 - 0x4c, 0x89, 0xf9, //0x000028c4 movq %r15, %rcx - 0x48, 0x2b, 0x4c, 0x24, 0x10, //0x000028c7 subq $16(%rsp), %rcx - 0x48, 0x89, 0x0c, 0x24, //0x000028cc movq %rcx, (%rsp) - //0x000028d0 LBB0_513 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x000028d0 movq $8(%rsp), %r11 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000028d5 movq $24(%rsp), %r10 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000028da vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xf9, 0xd8, 0xff, 0xff, //0x000028df vmovdqu $-9991(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x49, 0x01, 0xf7, //0x000028e7 addq %rsi, %r15 - 0x48, 0x01, 0xd3, //0x000028ea addq %rdx, %rbx - 0x0f, 0x85, 0x75, 0xff, 0xff, 0xff, //0x000028ed jne LBB0_506 - 0xe9, 0xca, 0x04, 0x00, 0x00, //0x000028f3 jmp LBB0_381 - //0x000028f8 LBB0_514 - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x000028f8 subq $16(%rsp), %r15 - 0x49, 0x83, 0xc7, 0x01, //0x000028fd addq $1, %r15 - 0xe9, 0x31, 0xec, 0xff, 0xff, //0x00002901 jmp LBB0_259 - //0x00002906 LBB0_515 - 0x48, 0x85, 0xdb, //0x00002906 testq %rbx, %rbx - 0x0f, 0x84, 0xb3, 0x04, 0x00, 0x00, //0x00002909 je LBB0_381 - 0x4c, 0x89, 0xca, //0x0000290f movq %r9, %rdx - 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002912 movq $16(%rsp), %rcx - 0x48, 0xf7, 0xd1, //0x00002917 notq %rcx - 0x49, 0x8d, 0x04, 0x0f, //0x0000291a leaq (%r15,%rcx), %rax - 0x4c, 0x8b, 0x0c, 0x24, //0x0000291e movq (%rsp), %r9 - 0x49, 0x83, 0xf9, 0xff, //0x00002922 cmpq $-1, %r9 - 0x4c, 0x89, 0xcf, //0x00002926 movq %r9, %rdi - 0x4c, 0x0f, 0x44, 0xc8, //0x00002929 cmoveq %rax, %r9 - 0x48, 0x0f, 0x44, 0xf8, //0x0000292d cmoveq %rax, %rdi - 0x49, 0x83, 0xc7, 0x01, //0x00002931 addq $1, %r15 - 0x48, 0x83, 0xc3, 0xff, //0x00002935 addq $-1, %rbx - 0x4c, 0x89, 0x0c, 0x24, //0x00002939 movq %r9, (%rsp) - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x0000293d movq $24(%rsp), %r10 - 0x49, 0x89, 0xd1, //0x00002942 movq %rdx, %r9 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002945 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x8e, 0xd8, 0xff, 0xff, //0x0000294a vmovdqu $-10098(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x48, 0x85, 0xdb, //0x00002952 testq %rbx, %rbx - 0x0f, 0x85, 0x8d, 0xfa, 0xff, 0xff, //0x00002955 jne LBB0_446 - 0xe9, 0x1e, 0xfb, 0xff, 0xff, //0x0000295b jmp LBB0_456 - //0x00002960 LBB0_517 - 0x4d, 0x85, 0xed, //0x00002960 testq %r13, %r13 - 0x0f, 0x84, 0x13, 0x04, 0x00, 0x00, //0x00002963 je LBB0_565 - 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002969 movq $16(%rsp), %rcx - 0x48, 0xf7, 0xd1, //0x0000296e notq %rcx - 0x4c, 0x01, 0xf9, //0x00002971 addq %r15, %rcx - 0x48, 0x8b, 0x34, 0x24, //0x00002974 movq (%rsp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x00002978 cmpq $-1, %rsi - 0x48, 0x89, 0xf2, //0x0000297c movq %rsi, %rdx - 0x48, 0x0f, 0x44, 0xd1, //0x0000297f cmoveq %rcx, %rdx - 0x48, 0x0f, 0x45, 0xce, //0x00002983 cmovneq %rsi, %rcx - 0x49, 0x83, 0xc7, 0x01, //0x00002987 addq $1, %r15 - 0x49, 0x83, 0xc5, 0xff, //0x0000298b addq $-1, %r13 - 0x48, 0x89, 0x14, 0x24, //0x0000298f movq %rdx, (%rsp) - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002993 movq $8(%rsp), %r11 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002998 movq $24(%rsp), %r10 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000299d vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x36, 0xd8, 0xff, 0xff, //0x000029a2 vmovdqu $-10186(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x4d, 0x85, 0xed, //0x000029aa testq %r13, %r13 - 0x0f, 0x85, 0xdc, 0xfb, 0xff, 0xff, //0x000029ad jne LBB0_468 - 0xe9, 0x0a, 0x04, 0x00, 0x00, //0x000029b3 jmp LBB0_381 - //0x000029b8 LBB0_519 - 0x48, 0x85, 0xdb, //0x000029b8 testq %rbx, %rbx - 0x0f, 0x84, 0x01, 0x04, 0x00, 0x00, //0x000029bb je LBB0_381 - 0x4c, 0x89, 0xca, //0x000029c1 movq %r9, %rdx - 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x000029c4 movq $16(%rsp), %rcx - 0x48, 0xf7, 0xd1, //0x000029c9 notq %rcx - 0x49, 0x8d, 0x04, 0x0f, //0x000029cc leaq (%r15,%rcx), %rax - 0x4c, 0x8b, 0x0c, 0x24, //0x000029d0 movq (%rsp), %r9 - 0x49, 0x83, 0xf9, 0xff, //0x000029d4 cmpq $-1, %r9 - 0x4c, 0x89, 0xcf, //0x000029d8 movq %r9, %rdi - 0x4c, 0x0f, 0x44, 0xc8, //0x000029db cmoveq %rax, %r9 - 0x48, 0x0f, 0x44, 0xf8, //0x000029df cmoveq %rax, %rdi - 0x49, 0x83, 0xc7, 0x01, //0x000029e3 addq $1, %r15 - 0x48, 0x83, 0xc3, 0xff, //0x000029e7 addq $-1, %rbx - 0x4c, 0x89, 0x0c, 0x24, //0x000029eb movq %r9, (%rsp) - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000029ef movq $24(%rsp), %r10 - 0x49, 0x89, 0xd1, //0x000029f4 movq %rdx, %r9 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000029f7 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xdc, 0xd7, 0xff, 0xff, //0x000029fc vmovdqu $-10276(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x48, 0x85, 0xdb, //0x00002a04 testq %rbx, %rbx - 0x0f, 0x85, 0xb4, 0xfc, 0xff, 0xff, //0x00002a07 jne LBB0_484 - 0xe9, 0x45, 0xfd, 0xff, 0xff, //0x00002a0d jmp LBB0_494 - //0x00002a12 LBB0_521 - 0x48, 0x85, 0xdb, //0x00002a12 testq %rbx, %rbx - 0x0f, 0x84, 0x61, 0x03, 0x00, 0x00, //0x00002a15 je LBB0_565 - 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002a1b movq $16(%rsp), %rcx - 0x48, 0xf7, 0xd1, //0x00002a20 notq %rcx - 0x4c, 0x01, 0xf9, //0x00002a23 addq %r15, %rcx - 0x48, 0x8b, 0x14, 0x24, //0x00002a26 movq (%rsp), %rdx - 0x48, 0x83, 0xfa, 0xff, //0x00002a2a cmpq $-1, %rdx - 0x48, 0x89, 0xd0, //0x00002a2e movq %rdx, %rax - 0x48, 0x0f, 0x44, 0xc1, //0x00002a31 cmoveq %rcx, %rax - 0x48, 0x0f, 0x45, 0xca, //0x00002a35 cmovneq %rdx, %rcx - 0x49, 0x83, 0xc7, 0x01, //0x00002a39 addq $1, %r15 - 0x48, 0x83, 0xc3, 0xff, //0x00002a3d addq $-1, %rbx - 0x48, 0x89, 0x04, 0x24, //0x00002a41 movq %rax, (%rsp) - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002a45 movq $8(%rsp), %r11 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002a4a movq $24(%rsp), %r10 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002a4f vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x84, 0xd7, 0xff, 0xff, //0x00002a54 vmovdqu $-10364(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x48, 0x85, 0xdb, //0x00002a5c testq %rbx, %rbx - 0x0f, 0x85, 0x03, 0xfe, 0xff, 0xff, //0x00002a5f jne LBB0_506 - 0xe9, 0x58, 0x03, 0x00, 0x00, //0x00002a65 jmp LBB0_381 - //0x00002a6a LBB0_523 - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00002a6a cmpq $-1, (%rsp) - 0x0f, 0x85, 0x13, 0x00, 0x00, 0x00, //0x00002a6f jne LBB0_525 - 0x4c, 0x89, 0xf8, //0x00002a75 movq %r15, %rax - 0x48, 0x2b, 0x44, 0x24, 0x10, //0x00002a78 subq $16(%rsp), %rax - 0x48, 0x0f, 0xbc, 0xca, //0x00002a7d bsfq %rdx, %rcx - 0x48, 0x01, 0xc1, //0x00002a81 addq %rax, %rcx - 0x48, 0x89, 0x0c, 0x24, //0x00002a84 movq %rcx, (%rsp) - //0x00002a88 LBB0_525 - 0x44, 0x89, 0xd0, //0x00002a88 movl %r10d, %eax - 0xf7, 0xd0, //0x00002a8b notl %eax - 0x21, 0xd0, //0x00002a8d andl %edx, %eax - 0x8d, 0x0c, 0x00, //0x00002a8f leal (%rax,%rax), %ecx - 0x41, 0x8d, 0x3c, 0x42, //0x00002a92 leal (%r10,%rax,2), %edi - 0xf7, 0xd1, //0x00002a96 notl %ecx - 0x21, 0xd1, //0x00002a98 andl %edx, %ecx - 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002a9a andl $-1431655766, %ecx - 0x45, 0x31, 0xd2, //0x00002aa0 xorl %r10d, %r10d - 0x01, 0xc1, //0x00002aa3 addl %eax, %ecx - 0x41, 0x0f, 0x92, 0xc2, //0x00002aa5 setb %r10b - 0x01, 0xc9, //0x00002aa9 addl %ecx, %ecx - 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00002aab xorl $1431655765, %ecx - 0x21, 0xf9, //0x00002ab1 andl %edi, %ecx - 0xf7, 0xd1, //0x00002ab3 notl %ecx - 0x21, 0xce, //0x00002ab5 andl %ecx, %esi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002ab7 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x1c, 0xd7, 0xff, 0xff, //0x00002abc vmovdqu $-10468(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x48, 0x85, 0xf6, //0x00002ac4 testq %rsi, %rsi - 0x0f, 0x85, 0x44, 0xf6, 0xff, 0xff, //0x00002ac7 jne LBB0_275 - //0x00002acd LBB0_526 - 0x49, 0x83, 0xc7, 0x20, //0x00002acd addq $32, %r15 - 0x48, 0x83, 0xc3, 0xe0, //0x00002ad1 addq $-32, %rbx - //0x00002ad5 LBB0_527 - 0x4d, 0x85, 0xd2, //0x00002ad5 testq %r10, %r10 - 0x0f, 0x85, 0x20, 0x02, 0x00, 0x00, //0x00002ad8 jne LBB0_561 - 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002ade movq $16(%rsp), %rcx - 0x48, 0xf7, 0xd1, //0x00002ae3 notq %rcx - 0x48, 0x8b, 0x3c, 0x24, //0x00002ae6 movq (%rsp), %rdi - 0x48, 0x85, 0xdb, //0x00002aea testq %rbx, %rbx - 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x00002aed je LBB0_539 - //0x00002af3 LBB0_529 - 0x48, 0x83, 0xc1, 0x01, //0x00002af3 addq $1, %rcx - //0x00002af7 LBB0_530 - 0x31, 0xf6, //0x00002af7 xorl %esi, %esi - //0x00002af9 LBB0_531 - 0x41, 0x0f, 0xb6, 0x14, 0x37, //0x00002af9 movzbl (%r15,%rsi), %edx - 0x80, 0xfa, 0x22, //0x00002afe cmpb $34, %dl - 0x0f, 0x84, 0x69, 0x00, 0x00, 0x00, //0x00002b01 je LBB0_538 - 0x80, 0xfa, 0x5c, //0x00002b07 cmpb $92, %dl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002b0a je LBB0_536 - 0x48, 0x83, 0xc6, 0x01, //0x00002b10 addq $1, %rsi - 0x48, 0x39, 0xf3, //0x00002b14 cmpq %rsi, %rbx - 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x00002b17 jne LBB0_531 - 0xe9, 0x5f, 0x00, 0x00, 0x00, //0x00002b1d jmp LBB0_534 - //0x00002b22 LBB0_536 - 0x48, 0x8d, 0x43, 0xff, //0x00002b22 leaq $-1(%rbx), %rax - 0x48, 0x39, 0xf0, //0x00002b26 cmpq %rsi, %rax - 0x0f, 0x84, 0x93, 0x02, 0x00, 0x00, //0x00002b29 je LBB0_381 - 0x4a, 0x8d, 0x04, 0x39, //0x00002b2f leaq (%rcx,%r15), %rax - 0x48, 0x01, 0xf0, //0x00002b33 addq %rsi, %rax - 0x48, 0x83, 0xff, 0xff, //0x00002b36 cmpq $-1, %rdi - 0x48, 0x8b, 0x14, 0x24, //0x00002b3a movq (%rsp), %rdx - 0x48, 0x0f, 0x44, 0xd0, //0x00002b3e cmoveq %rax, %rdx - 0x48, 0x89, 0x14, 0x24, //0x00002b42 movq %rdx, (%rsp) - 0x48, 0x0f, 0x44, 0xf8, //0x00002b46 cmoveq %rax, %rdi - 0x49, 0x01, 0xf7, //0x00002b4a addq %rsi, %r15 - 0x49, 0x83, 0xc7, 0x02, //0x00002b4d addq $2, %r15 - 0x48, 0x89, 0xd8, //0x00002b51 movq %rbx, %rax - 0x48, 0x29, 0xf0, //0x00002b54 subq %rsi, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00002b57 addq $-2, %rax - 0x48, 0x83, 0xc3, 0xfe, //0x00002b5b addq $-2, %rbx - 0x48, 0x39, 0xf3, //0x00002b5f cmpq %rsi, %rbx - 0x48, 0x89, 0xc3, //0x00002b62 movq %rax, %rbx - 0x0f, 0x85, 0x8c, 0xff, 0xff, 0xff, //0x00002b65 jne LBB0_530 - 0xe9, 0x52, 0x02, 0x00, 0x00, //0x00002b6b jmp LBB0_381 - //0x00002b70 LBB0_538 - 0x49, 0x01, 0xf7, //0x00002b70 addq %rsi, %r15 - 0x49, 0x83, 0xc7, 0x01, //0x00002b73 addq $1, %r15 - //0x00002b77 LBB0_539 - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00002b77 subq $16(%rsp), %r15 - 0xe9, 0x66, 0x01, 0x00, 0x00, //0x00002b7c jmp LBB0_560 - //0x00002b81 LBB0_534 - 0x80, 0xfa, 0x22, //0x00002b81 cmpb $34, %dl - 0x0f, 0x85, 0x38, 0x02, 0x00, 0x00, //0x00002b84 jne LBB0_381 - 0x49, 0x01, 0xdf, //0x00002b8a addq %rbx, %r15 - 0xe9, 0xe5, 0xff, 0xff, 0xff, //0x00002b8d jmp LBB0_539 - //0x00002b92 LBB0_540 - 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00002b92 cmpq $-1, (%rsp) - 0x0f, 0x85, 0x13, 0x00, 0x00, 0x00, //0x00002b97 jne LBB0_542 - 0x4c, 0x89, 0xf8, //0x00002b9d movq %r15, %rax - 0x48, 0x2b, 0x44, 0x24, 0x10, //0x00002ba0 subq $16(%rsp), %rax - 0x48, 0x0f, 0xbc, 0xca, //0x00002ba5 bsfq %rdx, %rcx - 0x48, 0x01, 0xc1, //0x00002ba9 addq %rax, %rcx - 0x48, 0x89, 0x0c, 0x24, //0x00002bac movq %rcx, (%rsp) - //0x00002bb0 LBB0_542 - 0x44, 0x89, 0xd8, //0x00002bb0 movl %r11d, %eax - 0xf7, 0xd0, //0x00002bb3 notl %eax - 0x21, 0xd0, //0x00002bb5 andl %edx, %eax - 0x8d, 0x0c, 0x00, //0x00002bb7 leal (%rax,%rax), %ecx - 0x41, 0x8d, 0x34, 0x43, //0x00002bba leal (%r11,%rax,2), %esi - 0xf7, 0xd1, //0x00002bbe notl %ecx - 0x21, 0xd1, //0x00002bc0 andl %edx, %ecx - 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002bc2 andl $-1431655766, %ecx - 0x45, 0x31, 0xdb, //0x00002bc8 xorl %r11d, %r11d - 0x01, 0xc1, //0x00002bcb addl %eax, %ecx - 0x41, 0x0f, 0x92, 0xc3, //0x00002bcd setb %r11b - 0x01, 0xc9, //0x00002bd1 addl %ecx, %ecx - 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00002bd3 xorl $1431655765, %ecx - 0x21, 0xf1, //0x00002bd9 andl %esi, %ecx - 0xf7, 0xd1, //0x00002bdb notl %ecx - 0x41, 0x21, 0xca, //0x00002bdd andl %ecx, %r10d - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002be0 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xf3, 0xd5, 0xff, 0xff, //0x00002be5 vmovdqu $-10765(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x4d, 0x85, 0xd2, //0x00002bed testq %r10, %r10 - 0x0f, 0x85, 0x76, 0xf5, 0xff, 0xff, //0x00002bf0 jne LBB0_316 - //0x00002bf6 LBB0_543 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002bf6 movl $64, %edx - //0x00002bfb LBB0_544 - 0xc5, 0xbd, 0x64, 0xc8, //0x00002bfb vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00002bff vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x00002c04 vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x00002c08 vpmovmskb %ymm0, %esi - 0x0f, 0xbc, 0xfe, //0x00002c0c bsfl %esi, %edi - 0x4d, 0x85, 0xd2, //0x00002c0f testq %r10, %r10 - 0x0f, 0x84, 0x2e, 0x00, 0x00, 0x00, //0x00002c12 je LBB0_547 - 0x85, 0xf6, //0x00002c18 testl %esi, %esi - 0xb8, 0x40, 0x00, 0x00, 0x00, //0x00002c1a movl $64, %eax - 0x0f, 0x44, 0xf8, //0x00002c1f cmovel %eax, %edi - 0x48, 0x39, 0xfa, //0x00002c22 cmpq %rdi, %rdx - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002c25 movq $24(%rsp), %r10 - 0x0f, 0x87, 0x27, 0x0b, 0x00, 0x00, //0x00002c2a ja LBB0_677 - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00002c30 subq $16(%rsp), %r15 - 0x49, 0x01, 0xd7, //0x00002c35 addq %rdx, %r15 - 0x49, 0x83, 0xc7, 0x01, //0x00002c38 addq $1, %r15 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002c3c movq $8(%rsp), %r11 - 0xe9, 0xc0, 0xf0, 0xff, 0xff, //0x00002c41 jmp LBB0_379 - //0x00002c46 LBB0_547 - 0x85, 0xf6, //0x00002c46 testl %esi, %esi - 0x0f, 0x85, 0xe6, 0x0a, 0x00, 0x00, //0x00002c48 jne LBB0_678 - 0x49, 0x83, 0xc7, 0x20, //0x00002c4e addq $32, %r15 - 0x48, 0x83, 0xc3, 0xe0, //0x00002c52 addq $-32, %rbx - //0x00002c56 LBB0_549 - 0x4d, 0x85, 0xdb, //0x00002c56 testq %r11, %r11 - 0x0f, 0x85, 0xe1, 0x00, 0x00, 0x00, //0x00002c59 jne LBB0_563 - 0x48, 0x8b, 0x0c, 0x24, //0x00002c5f movq (%rsp), %rcx - 0x48, 0x85, 0xdb, //0x00002c63 testq %rbx, %rbx - 0x0f, 0x84, 0x10, 0x01, 0x00, 0x00, //0x00002c66 je LBB0_565 - //0x00002c6c LBB0_551 - 0x41, 0x0f, 0xb6, 0x17, //0x00002c6c movzbl (%r15), %edx - 0x80, 0xfa, 0x22, //0x00002c70 cmpb $34, %dl - 0x0f, 0x84, 0x60, 0x00, 0x00, 0x00, //0x00002c73 je LBB0_559 - 0x80, 0xfa, 0x5c, //0x00002c79 cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002c7c je LBB0_556 - 0x80, 0xfa, 0x1f, //0x00002c82 cmpb $31, %dl - 0x0f, 0x86, 0x02, 0x0b, 0x00, 0x00, //0x00002c85 jbe LBB0_679 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002c8b movq $-1, %rdx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002c92 movl $1, %esi - //0x00002c97 LBB0_555 - 0x49, 0x01, 0xf7, //0x00002c97 addq %rsi, %r15 - 0x48, 0x01, 0xd3, //0x00002c9a addq %rdx, %rbx - 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x00002c9d jne LBB0_551 - 0xe9, 0xd4, 0x00, 0x00, 0x00, //0x00002ca3 jmp LBB0_565 - //0x00002ca8 LBB0_556 - 0x48, 0x83, 0xfb, 0x01, //0x00002ca8 cmpq $1, %rbx - 0x0f, 0x84, 0xca, 0x00, 0x00, 0x00, //0x00002cac je LBB0_565 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00002cb2 movq $-2, %rdx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002cb9 movl $2, %esi - 0x48, 0x83, 0xf9, 0xff, //0x00002cbe cmpq $-1, %rcx - 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00002cc2 jne LBB0_555 - 0x4c, 0x89, 0xf9, //0x00002cc8 movq %r15, %rcx - 0x48, 0x2b, 0x4c, 0x24, 0x10, //0x00002ccb subq $16(%rsp), %rcx - 0x48, 0x89, 0x0c, 0x24, //0x00002cd0 movq %rcx, (%rsp) - 0xe9, 0xbe, 0xff, 0xff, 0xff, //0x00002cd4 jmp LBB0_555 - //0x00002cd9 LBB0_559 - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00002cd9 subq $16(%rsp), %r15 - 0x49, 0x83, 0xc7, 0x01, //0x00002cde addq $1, %r15 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002ce2 movq $8(%rsp), %r11 - //0x00002ce7 LBB0_560 - 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002ce7 movq $24(%rsp), %r10 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002cec vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xe7, 0xd4, 0xff, 0xff, //0x00002cf1 vmovdqu $-11033(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xe9, 0x08, 0xf0, 0xff, 0xff, //0x00002cf9 jmp LBB0_379 - //0x00002cfe LBB0_561 - 0x48, 0x85, 0xdb, //0x00002cfe testq %rbx, %rbx - 0x0f, 0x84, 0xbb, 0x00, 0x00, 0x00, //0x00002d01 je LBB0_381 - 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002d07 movq $16(%rsp), %rcx - 0x48, 0xf7, 0xd1, //0x00002d0c notq %rcx - 0x49, 0x8d, 0x04, 0x0f, //0x00002d0f leaq (%r15,%rcx), %rax - 0x48, 0x8b, 0x14, 0x24, //0x00002d13 movq (%rsp), %rdx - 0x48, 0x83, 0xfa, 0xff, //0x00002d17 cmpq $-1, %rdx - 0x48, 0x89, 0xd7, //0x00002d1b movq %rdx, %rdi - 0x48, 0x0f, 0x44, 0xd0, //0x00002d1e cmoveq %rax, %rdx - 0x48, 0x0f, 0x44, 0xf8, //0x00002d22 cmoveq %rax, %rdi - 0x49, 0x83, 0xc7, 0x01, //0x00002d26 addq $1, %r15 - 0x48, 0x83, 0xc3, 0xff, //0x00002d2a addq $-1, %rbx - 0x48, 0x89, 0x14, 0x24, //0x00002d2e movq %rdx, (%rsp) - 0x48, 0x85, 0xdb, //0x00002d32 testq %rbx, %rbx - 0x0f, 0x85, 0xb8, 0xfd, 0xff, 0xff, //0x00002d35 jne LBB0_529 - 0xe9, 0x37, 0xfe, 0xff, 0xff, //0x00002d3b jmp LBB0_539 - //0x00002d40 LBB0_563 - 0x48, 0x85, 0xdb, //0x00002d40 testq %rbx, %rbx - 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00002d43 je LBB0_565 - 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002d49 movq $16(%rsp), %rcx - 0x48, 0xf7, 0xd1, //0x00002d4e notq %rcx - 0x4c, 0x01, 0xf9, //0x00002d51 addq %r15, %rcx - 0x48, 0x8b, 0x14, 0x24, //0x00002d54 movq (%rsp), %rdx - 0x48, 0x83, 0xfa, 0xff, //0x00002d58 cmpq $-1, %rdx - 0x48, 0x89, 0xd0, //0x00002d5c movq %rdx, %rax - 0x48, 0x0f, 0x44, 0xc1, //0x00002d5f cmoveq %rcx, %rax - 0x48, 0x0f, 0x45, 0xca, //0x00002d63 cmovneq %rdx, %rcx - 0x49, 0x83, 0xc7, 0x01, //0x00002d67 addq $1, %r15 - 0x48, 0x83, 0xc3, 0xff, //0x00002d6b addq $-1, %rbx - 0x48, 0x89, 0x04, 0x24, //0x00002d6f movq %rax, (%rsp) - 0x48, 0x85, 0xdb, //0x00002d73 testq %rbx, %rbx - 0x0f, 0x85, 0xf0, 0xfe, 0xff, 0xff, //0x00002d76 jne LBB0_551 - //0x00002d7c LBB0_565 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002d7c movq $8(%rsp), %r11 - 0xe9, 0x3c, 0x00, 0x00, 0x00, //0x00002d81 jmp LBB0_381 - //0x00002d86 LBB0_566 - 0x4d, 0x89, 0x33, //0x00002d86 movq %r14, (%r11) - //0x00002d89 LBB0_567 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002d89 movq $-1, %r15 - 0xe9, 0x43, 0x07, 0x00, 0x00, //0x00002d90 jmp LBB0_638 - //0x00002d95 LBB0_568 - 0x48, 0x8d, 0x48, 0x04, //0x00002d95 leaq $4(%rax), %rcx - 0x49, 0x3b, 0x4d, 0x08, //0x00002d99 cmpq $8(%r13), %rcx - 0x0f, 0x86, 0xaf, 0xd8, 0xff, 0xff, //0x00002d9d jbe LBB0_52 - 0xe9, 0x30, 0x07, 0x00, 0x00, //0x00002da3 jmp LBB0_638 - //0x00002da8 LBB0_650 - 0x49, 0xc7, 0xc7, 0xf9, 0xff, 0xff, 0xff, //0x00002da8 movq $-7, %r15 - 0xe9, 0x24, 0x07, 0x00, 0x00, //0x00002daf jmp LBB0_638 - //0x00002db4 LBB0_380 - 0x49, 0x83, 0xff, 0xff, //0x00002db4 cmpq $-1, %r15 - 0x48, 0x8b, 0x14, 0x24, //0x00002db8 movq (%rsp), %rdx - 0x0f, 0x85, 0x0a, 0x00, 0x00, 0x00, //0x00002dbc jne LBB0_382 - //0x00002dc2 LBB0_381 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002dc2 movq $-1, %r15 - 0x4c, 0x89, 0xe2, //0x00002dc9 movq %r12, %rdx - //0x00002dcc LBB0_382 - 0x49, 0x89, 0x13, //0x00002dcc movq %rdx, (%r11) - 0xe9, 0x04, 0x07, 0x00, 0x00, //0x00002dcf jmp LBB0_638 - //0x00002dd4 LBB0_242 - 0x49, 0x83, 0xc0, 0xff, //0x00002dd4 addq $-1, %r8 - 0x4d, 0x89, 0xc7, //0x00002dd8 movq %r8, %r15 - 0xe9, 0xf8, 0x06, 0x00, 0x00, //0x00002ddb jmp LBB0_638 - //0x00002de0 LBB0_569 - 0x49, 0x89, 0x03, //0x00002de0 movq %rax, (%r11) - 0xe9, 0xe9, 0x06, 0x00, 0x00, //0x00002de3 jmp LBB0_637 - //0x00002de8 LBB0_570 - 0x4c, 0x89, 0xe9, //0x00002de8 movq %r13, %rcx - 0x4d, 0x89, 0xdd, //0x00002deb movq %r11, %r13 - 0x4c, 0x8b, 0x41, 0x08, //0x00002dee movq $8(%rcx), %r8 - 0x4d, 0x89, 0xc6, //0x00002df2 movq %r8, %r14 - 0x49, 0x29, 0xd6, //0x00002df5 subq %rdx, %r14 - 0x49, 0x83, 0xfe, 0x20, //0x00002df8 cmpq $32, %r14 - 0x0f, 0x8c, 0x07, 0x09, 0x00, 0x00, //0x00002dfc jl LBB0_671 - 0x4d, 0x8d, 0x0c, 0x02, //0x00002e02 leaq (%r10,%rax), %r9 - 0x49, 0x29, 0xc0, //0x00002e06 subq %rax, %r8 - 0xbb, 0x1f, 0x00, 0x00, 0x00, //0x00002e09 movl $31, %ebx - 0x45, 0x31, 0xf6, //0x00002e0e xorl %r14d, %r14d - 0xc5, 0xfe, 0x6f, 0x05, 0x67, 0xd2, 0xff, 0xff, //0x00002e11 vmovdqu $-11673(%rip), %ymm0 /* LCPI0_7+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x0d, 0x7f, 0xd2, 0xff, 0xff, //0x00002e19 vmovdqu $-11649(%rip), %ymm1 /* LCPI0_8+0(%rip) */ - 0x45, 0x31, 0xe4, //0x00002e21 xorl %r12d, %r12d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002e24 .p2align 4, 0x90 - //0x00002e30 LBB0_572 - 0xc4, 0x81, 0x7e, 0x6f, 0x54, 0x31, 0x01, //0x00002e30 vmovdqu $1(%r9,%r14), %ymm2 - 0xc5, 0xed, 0x74, 0xd8, //0x00002e37 vpcmpeqb %ymm0, %ymm2, %ymm3 - 0xc5, 0x7d, 0xd7, 0xdb, //0x00002e3b vpmovmskb %ymm3, %r11d - 0xc5, 0xed, 0x74, 0xd1, //0x00002e3f vpcmpeqb %ymm1, %ymm2, %ymm2 - 0xc5, 0xfd, 0xd7, 0xca, //0x00002e43 vpmovmskb %ymm2, %ecx - 0x85, 0xc9, //0x00002e47 testl %ecx, %ecx - 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x00002e49 jne LBB0_575 - 0x4d, 0x85, 0xe4, //0x00002e4f testq %r12, %r12 - 0x0f, 0x85, 0x08, 0x00, 0x00, 0x00, //0x00002e52 jne LBB0_575 - 0x45, 0x31, 0xe4, //0x00002e58 xorl %r12d, %r12d - 0xe9, 0x31, 0x00, 0x00, 0x00, //0x00002e5b jmp LBB0_576 - //0x00002e60 LBB0_575 - 0x44, 0x89, 0xe7, //0x00002e60 movl %r12d, %edi - 0xf7, 0xd7, //0x00002e63 notl %edi - 0x21, 0xcf, //0x00002e65 andl %ecx, %edi - 0x8d, 0x14, 0x3f, //0x00002e67 leal (%rdi,%rdi), %edx - 0x44, 0x09, 0xe2, //0x00002e6a orl %r12d, %edx - 0x89, 0xd6, //0x00002e6d movl %edx, %esi - 0xf7, 0xd6, //0x00002e6f notl %esi - 0x21, 0xce, //0x00002e71 andl %ecx, %esi - 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002e73 andl $-1431655766, %esi - 0x45, 0x31, 0xe4, //0x00002e79 xorl %r12d, %r12d - 0x01, 0xfe, //0x00002e7c addl %edi, %esi - 0x41, 0x0f, 0x92, 0xc4, //0x00002e7e setb %r12b - 0x01, 0xf6, //0x00002e82 addl %esi, %esi - 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x00002e84 xorl $1431655765, %esi - 0x21, 0xd6, //0x00002e8a andl %edx, %esi - 0xf7, 0xd6, //0x00002e8c notl %esi - 0x41, 0x21, 0xf3, //0x00002e8e andl %esi, %r11d - //0x00002e91 LBB0_576 - 0x4d, 0x85, 0xdb, //0x00002e91 testq %r11, %r11 - 0x0f, 0x85, 0xfc, 0x05, 0x00, 0x00, //0x00002e94 jne LBB0_632 - 0x49, 0x83, 0xc6, 0x20, //0x00002e9a addq $32, %r14 - 0x49, 0x8d, 0x0c, 0x18, //0x00002e9e leaq (%r8,%rbx), %rcx - 0x48, 0x83, 0xc1, 0xe0, //0x00002ea2 addq $-32, %rcx - 0x48, 0x83, 0xc3, 0xe0, //0x00002ea6 addq $-32, %rbx - 0x48, 0x83, 0xf9, 0x3f, //0x00002eaa cmpq $63, %rcx - 0x0f, 0x8f, 0x7c, 0xff, 0xff, 0xff, //0x00002eae jg LBB0_572 - 0x4d, 0x85, 0xe4, //0x00002eb4 testq %r12, %r12 - 0x0f, 0x85, 0xac, 0x08, 0x00, 0x00, //0x00002eb7 jne LBB0_675 - 0x4b, 0x8d, 0x14, 0x0e, //0x00002ebd leaq (%r14,%r9), %rdx - 0x48, 0x83, 0xc2, 0x01, //0x00002ec1 addq $1, %rdx - 0x49, 0xf7, 0xd6, //0x00002ec5 notq %r14 - 0x4d, 0x01, 0xc6, //0x00002ec8 addq %r8, %r14 - //0x00002ecb LBB0_580 - 0x4d, 0x85, 0xf6, //0x00002ecb testq %r14, %r14 - 0x0f, 0x8e, 0x04, 0x06, 0x00, 0x00, //0x00002ece jle LBB0_638 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002ed4 movq $-1, %r15 - 0xe9, 0x25, 0x06, 0x00, 0x00, //0x00002edb jmp LBB0_640 - //0x00002ee0 LBB0_582 - 0x48, 0x8d, 0x48, 0x05, //0x00002ee0 leaq $5(%rax), %rcx - 0x49, 0x3b, 0x4d, 0x08, //0x00002ee4 cmpq $8(%r13), %rcx - 0x0f, 0x86, 0x64, 0xd7, 0xff, 0xff, //0x00002ee8 jbe LBB0_52 - 0xe9, 0xe5, 0x05, 0x00, 0x00, //0x00002eee jmp LBB0_638 - //0x00002ef3 LBB0_583 - 0x4c, 0x89, 0x5c, 0x24, 0x08, //0x00002ef3 movq %r11, $8(%rsp) - 0x4d, 0x8b, 0x75, 0x08, //0x00002ef8 movq $8(%r13), %r14 - 0x49, 0x29, 0xd6, //0x00002efc subq %rdx, %r14 - 0x49, 0x01, 0xd2, //0x00002eff addq %rdx, %r10 - 0x45, 0x31, 0xdb, //0x00002f02 xorl %r11d, %r11d - 0xc5, 0xfe, 0x6f, 0x05, 0x93, 0xd1, 0xff, 0xff, //0x00002f05 vmovdqu $-11885(%rip), %ymm0 /* LCPI0_8+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x0d, 0x6b, 0xd1, 0xff, 0xff, //0x00002f0d vmovdqu $-11925(%rip), %ymm1 /* LCPI0_7+0(%rip) */ - 0xc5, 0xe9, 0x76, 0xd2, //0x00002f15 vpcmpeqd %xmm2, %xmm2, %xmm2 - 0xc5, 0xfe, 0x6f, 0x1d, 0x9f, 0xd1, 0xff, 0xff, //0x00002f19 vmovdqu $-11873(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0xb7, 0xd1, 0xff, 0xff, //0x00002f21 vmovdqu $-11849(%rip), %ymm4 /* LCPI0_10+0(%rip) */ - 0xc4, 0x41, 0x31, 0xef, 0xc9, //0x00002f29 vpxor %xmm9, %xmm9, %xmm9 - 0x45, 0x31, 0xe4, //0x00002f2e xorl %r12d, %r12d - 0x45, 0x31, 0xc9, //0x00002f31 xorl %r9d, %r9d - 0x31, 0xd2, //0x00002f34 xorl %edx, %edx - 0x49, 0x83, 0xfe, 0x40, //0x00002f36 cmpq $64, %r14 - 0x0f, 0x8c, 0x4c, 0x01, 0x00, 0x00, //0x00002f3a jl LBB0_592 - //0x00002f40 LBB0_586 - 0xc4, 0xc1, 0x7e, 0x6f, 0x3a, //0x00002f40 vmovdqu (%r10), %ymm7 - 0xc4, 0xc1, 0x7e, 0x6f, 0x72, 0x20, //0x00002f45 vmovdqu $32(%r10), %ymm6 - 0xc5, 0x45, 0x74, 0xc0, //0x00002f4b vpcmpeqb %ymm0, %ymm7, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xf0, //0x00002f4f vpmovmskb %ymm8, %esi - 0xc5, 0x4d, 0x74, 0xc0, //0x00002f54 vpcmpeqb %ymm0, %ymm6, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x00002f58 vpmovmskb %ymm8, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00002f5d shlq $32, %rcx - 0x48, 0x09, 0xce, //0x00002f61 orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00002f64 movq %rsi, %rcx - 0x4d, 0x89, 0xe8, //0x00002f67 movq %r13, %r8 - 0x4c, 0x09, 0xe1, //0x00002f6a orq %r12, %rcx - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00002f6d jne LBB0_588 - 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00002f73 movq $-1, %rsi - 0x45, 0x31, 0xe4, //0x00002f7a xorl %r12d, %r12d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00002f7d jmp LBB0_589 - //0x00002f82 LBB0_588 - 0x4c, 0x89, 0xe1, //0x00002f82 movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x00002f85 notq %rcx - 0x48, 0x21, 0xf1, //0x00002f88 andq %rsi, %rcx - 0x4c, 0x8d, 0x2c, 0x09, //0x00002f8b leaq (%rcx,%rcx), %r13 - 0x4d, 0x09, 0xe5, //0x00002f8f orq %r12, %r13 - 0x4c, 0x89, 0xeb, //0x00002f92 movq %r13, %rbx - 0x48, 0xf7, 0xd3, //0x00002f95 notq %rbx - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002f98 movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfe, //0x00002fa2 andq %rdi, %rsi - 0x48, 0x21, 0xde, //0x00002fa5 andq %rbx, %rsi - 0x45, 0x31, 0xe4, //0x00002fa8 xorl %r12d, %r12d - 0x48, 0x01, 0xce, //0x00002fab addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc4, //0x00002fae setb %r12b - 0x48, 0x01, 0xf6, //0x00002fb2 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002fb5 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00002fbf xorq %rcx, %rsi - 0x4c, 0x21, 0xee, //0x00002fc2 andq %r13, %rsi - 0x48, 0xf7, 0xd6, //0x00002fc5 notq %rsi - //0x00002fc8 LBB0_589 - 0xc5, 0x4d, 0x74, 0xc1, //0x00002fc8 vpcmpeqb %ymm1, %ymm6, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x00002fcc vpmovmskb %ymm8, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00002fd1 shlq $32, %rcx - 0xc5, 0x45, 0x74, 0xc1, //0x00002fd5 vpcmpeqb %ymm1, %ymm7, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xf8, //0x00002fd9 vpmovmskb %ymm8, %edi - 0x48, 0x09, 0xcf, //0x00002fde orq %rcx, %rdi - 0x48, 0x21, 0xf7, //0x00002fe1 andq %rsi, %rdi - 0xc4, 0xe1, 0xf9, 0x6e, 0xef, //0x00002fe4 vmovq %rdi, %xmm5 - 0xc4, 0xe3, 0x51, 0x44, 0xea, 0x00, //0x00002fe9 vpclmulqdq $0, %xmm2, %xmm5, %xmm5 - 0xc4, 0xc1, 0xf9, 0x7e, 0xed, //0x00002fef vmovq %xmm5, %r13 - 0x4d, 0x31, 0xdd, //0x00002ff4 xorq %r11, %r13 - 0xc5, 0xc5, 0x74, 0xeb, //0x00002ff7 vpcmpeqb %ymm3, %ymm7, %ymm5 - 0xc5, 0xfd, 0xd7, 0xfd, //0x00002ffb vpmovmskb %ymm5, %edi - 0xc5, 0xcd, 0x74, 0xeb, //0x00002fff vpcmpeqb %ymm3, %ymm6, %ymm5 - 0xc5, 0xfd, 0xd7, 0xcd, //0x00003003 vpmovmskb %ymm5, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00003007 shlq $32, %rcx - 0x48, 0x09, 0xcf, //0x0000300b orq %rcx, %rdi - 0x4c, 0x89, 0xe9, //0x0000300e movq %r13, %rcx - 0x48, 0xf7, 0xd1, //0x00003011 notq %rcx - 0x48, 0x21, 0xcf, //0x00003014 andq %rcx, %rdi - 0xc5, 0xc5, 0x74, 0xec, //0x00003017 vpcmpeqb %ymm4, %ymm7, %ymm5 - 0xc5, 0xfd, 0xd7, 0xdd, //0x0000301b vpmovmskb %ymm5, %ebx - 0xc5, 0xcd, 0x74, 0xec, //0x0000301f vpcmpeqb %ymm4, %ymm6, %ymm5 - 0xc5, 0xfd, 0xd7, 0xf5, //0x00003023 vpmovmskb %ymm5, %esi - 0x48, 0xc1, 0xe6, 0x20, //0x00003027 shlq $32, %rsi - 0x48, 0x09, 0xf3, //0x0000302b orq %rsi, %rbx - 0x48, 0x21, 0xcb, //0x0000302e andq %rcx, %rbx - 0x0f, 0x84, 0x31, 0x00, 0x00, 0x00, //0x00003031 je LBB0_584 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003037 .p2align 4, 0x90 - //0x00003040 LBB0_590 - 0x48, 0x8d, 0x4b, 0xff, //0x00003040 leaq $-1(%rbx), %rcx - 0x48, 0x89, 0xce, //0x00003044 movq %rcx, %rsi - 0x48, 0x21, 0xfe, //0x00003047 andq %rdi, %rsi - 0xf3, 0x48, 0x0f, 0xb8, 0xf6, //0x0000304a popcntq %rsi, %rsi - 0x4c, 0x01, 0xce, //0x0000304f addq %r9, %rsi - 0x48, 0x39, 0xd6, //0x00003052 cmpq %rdx, %rsi - 0x0f, 0x86, 0x00, 0x04, 0x00, 0x00, //0x00003055 jbe LBB0_631 - 0x48, 0x83, 0xc2, 0x01, //0x0000305b addq $1, %rdx - 0x48, 0x21, 0xcb, //0x0000305f andq %rcx, %rbx - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00003062 jne LBB0_590 - //0x00003068 LBB0_584 - 0x49, 0xc1, 0xfd, 0x3f, //0x00003068 sarq $63, %r13 - 0xf3, 0x48, 0x0f, 0xb8, 0xcf, //0x0000306c popcntq %rdi, %rcx - 0x49, 0x01, 0xc9, //0x00003071 addq %rcx, %r9 - 0x49, 0x83, 0xc2, 0x40, //0x00003074 addq $64, %r10 - 0x49, 0x83, 0xc6, 0xc0, //0x00003078 addq $-64, %r14 - 0x4d, 0x89, 0xeb, //0x0000307c movq %r13, %r11 - 0x4d, 0x89, 0xc5, //0x0000307f movq %r8, %r13 - 0x49, 0x83, 0xfe, 0x40, //0x00003082 cmpq $64, %r14 - 0x0f, 0x8d, 0xb4, 0xfe, 0xff, 0xff, //0x00003086 jge LBB0_586 - //0x0000308c LBB0_592 - 0x4d, 0x85, 0xf6, //0x0000308c testq %r14, %r14 - 0x0f, 0x8e, 0x7c, 0x06, 0x00, 0x00, //0x0000308f jle LBB0_672 - 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x60, //0x00003095 vmovdqu %ymm9, $96(%rsp) - 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x40, //0x0000309b vmovdqu %ymm9, $64(%rsp) - 0x44, 0x89, 0xd1, //0x000030a1 movl %r10d, %ecx - 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x000030a4 andl $4095, %ecx - 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x000030aa cmpl $4033, %ecx - 0x0f, 0x82, 0x8a, 0xfe, 0xff, 0xff, //0x000030b0 jb LBB0_586 - 0x49, 0x83, 0xfe, 0x20, //0x000030b6 cmpq $32, %r14 - 0x0f, 0x82, 0x1d, 0x00, 0x00, 0x00, //0x000030ba jb LBB0_596 - 0xc4, 0xc1, 0x7e, 0x6f, 0x2a, //0x000030c0 vmovdqu (%r10), %ymm5 - 0xc5, 0xfe, 0x7f, 0x6c, 0x24, 0x40, //0x000030c5 vmovdqu %ymm5, $64(%rsp) - 0x49, 0x83, 0xc2, 0x20, //0x000030cb addq $32, %r10 - 0x49, 0x8d, 0x7e, 0xe0, //0x000030cf leaq $-32(%r14), %rdi - 0x48, 0x8d, 0x74, 0x24, 0x60, //0x000030d3 leaq $96(%rsp), %rsi - 0xe9, 0x08, 0x00, 0x00, 0x00, //0x000030d8 jmp LBB0_597 - //0x000030dd LBB0_596 - 0x48, 0x8d, 0x74, 0x24, 0x40, //0x000030dd leaq $64(%rsp), %rsi - 0x4c, 0x89, 0xf7, //0x000030e2 movq %r14, %rdi - //0x000030e5 LBB0_597 - 0x48, 0x83, 0xff, 0x10, //0x000030e5 cmpq $16, %rdi - 0x0f, 0x82, 0x5a, 0x00, 0x00, 0x00, //0x000030e9 jb LBB0_598 - 0xc4, 0xc1, 0x7a, 0x6f, 0x2a, //0x000030ef vmovdqu (%r10), %xmm5 - 0xc5, 0xfa, 0x7f, 0x2e, //0x000030f4 vmovdqu %xmm5, (%rsi) - 0x49, 0x83, 0xc2, 0x10, //0x000030f8 addq $16, %r10 - 0x48, 0x83, 0xc6, 0x10, //0x000030fc addq $16, %rsi - 0x48, 0x83, 0xc7, 0xf0, //0x00003100 addq $-16, %rdi - 0x48, 0x83, 0xff, 0x08, //0x00003104 cmpq $8, %rdi - 0x0f, 0x83, 0x45, 0x00, 0x00, 0x00, //0x00003108 jae LBB0_603 - //0x0000310e LBB0_599 - 0x48, 0x83, 0xff, 0x04, //0x0000310e cmpq $4, %rdi - 0x0f, 0x8c, 0x57, 0x00, 0x00, 0x00, //0x00003112 jl LBB0_600 - //0x00003118 LBB0_604 - 0x41, 0x8b, 0x0a, //0x00003118 movl (%r10), %ecx - 0x89, 0x0e, //0x0000311b movl %ecx, (%rsi) - 0x49, 0x83, 0xc2, 0x04, //0x0000311d addq $4, %r10 - 0x48, 0x83, 0xc6, 0x04, //0x00003121 addq $4, %rsi - 0x48, 0x83, 0xc7, 0xfc, //0x00003125 addq $-4, %rdi - 0x48, 0x83, 0xff, 0x02, //0x00003129 cmpq $2, %rdi - 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x0000312d jae LBB0_605 - //0x00003133 LBB0_601 - 0x4c, 0x89, 0xd3, //0x00003133 movq %r10, %rbx - 0x4c, 0x8d, 0x54, 0x24, 0x40, //0x00003136 leaq $64(%rsp), %r10 - 0x48, 0x85, 0xff, //0x0000313b testq %rdi, %rdi - 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x0000313e jne LBB0_606 - 0xe9, 0xf7, 0xfd, 0xff, 0xff, //0x00003144 jmp LBB0_586 - //0x00003149 LBB0_598 - 0x48, 0x83, 0xff, 0x08, //0x00003149 cmpq $8, %rdi - 0x0f, 0x82, 0xbb, 0xff, 0xff, 0xff, //0x0000314d jb LBB0_599 - //0x00003153 LBB0_603 - 0x49, 0x8b, 0x0a, //0x00003153 movq (%r10), %rcx - 0x48, 0x89, 0x0e, //0x00003156 movq %rcx, (%rsi) - 0x49, 0x83, 0xc2, 0x08, //0x00003159 addq $8, %r10 - 0x48, 0x83, 0xc6, 0x08, //0x0000315d addq $8, %rsi - 0x48, 0x83, 0xc7, 0xf8, //0x00003161 addq $-8, %rdi - 0x48, 0x83, 0xff, 0x04, //0x00003165 cmpq $4, %rdi - 0x0f, 0x8d, 0xa9, 0xff, 0xff, 0xff, //0x00003169 jge LBB0_604 - //0x0000316f LBB0_600 - 0x48, 0x83, 0xff, 0x02, //0x0000316f cmpq $2, %rdi - 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x00003173 jb LBB0_601 - //0x00003179 LBB0_605 - 0x41, 0x0f, 0xb7, 0x0a, //0x00003179 movzwl (%r10), %ecx - 0x66, 0x89, 0x0e, //0x0000317d movw %cx, (%rsi) - 0x49, 0x83, 0xc2, 0x02, //0x00003180 addq $2, %r10 - 0x48, 0x83, 0xc6, 0x02, //0x00003184 addq $2, %rsi - 0x48, 0x83, 0xc7, 0xfe, //0x00003188 addq $-2, %rdi - 0x4c, 0x89, 0xd3, //0x0000318c movq %r10, %rbx - 0x4c, 0x8d, 0x54, 0x24, 0x40, //0x0000318f leaq $64(%rsp), %r10 - 0x48, 0x85, 0xff, //0x00003194 testq %rdi, %rdi - 0x0f, 0x84, 0xa3, 0xfd, 0xff, 0xff, //0x00003197 je LBB0_586 - //0x0000319d LBB0_606 - 0x8a, 0x0b, //0x0000319d movb (%rbx), %cl - 0x88, 0x0e, //0x0000319f movb %cl, (%rsi) - 0x4c, 0x8d, 0x54, 0x24, 0x40, //0x000031a1 leaq $64(%rsp), %r10 - 0xe9, 0x95, 0xfd, 0xff, 0xff, //0x000031a6 jmp LBB0_586 - //0x000031ab LBB0_607 - 0x4c, 0x89, 0x5c, 0x24, 0x08, //0x000031ab movq %r11, $8(%rsp) - 0x4d, 0x8b, 0x75, 0x08, //0x000031b0 movq $8(%r13), %r14 - 0x49, 0x29, 0xd6, //0x000031b4 subq %rdx, %r14 - 0x49, 0x01, 0xd2, //0x000031b7 addq %rdx, %r10 - 0x45, 0x31, 0xdb, //0x000031ba xorl %r11d, %r11d - 0xc5, 0xfe, 0x6f, 0x05, 0xdb, 0xce, 0xff, 0xff, //0x000031bd vmovdqu $-12581(%rip), %ymm0 /* LCPI0_8+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x0d, 0xb3, 0xce, 0xff, 0xff, //0x000031c5 vmovdqu $-12621(%rip), %ymm1 /* LCPI0_7+0(%rip) */ - 0xc5, 0xe9, 0x76, 0xd2, //0x000031cd vpcmpeqd %xmm2, %xmm2, %xmm2 - 0xc5, 0xfe, 0x6f, 0x1d, 0x27, 0xcf, 0xff, 0xff, //0x000031d1 vmovdqu $-12505(%rip), %ymm3 /* LCPI0_11+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x7f, 0xce, 0xff, 0xff, //0x000031d9 vmovdqu $-12673(%rip), %ymm4 /* LCPI0_3+0(%rip) */ - 0xc4, 0x41, 0x31, 0xef, 0xc9, //0x000031e1 vpxor %xmm9, %xmm9, %xmm9 - 0x45, 0x31, 0xe4, //0x000031e6 xorl %r12d, %r12d - 0x45, 0x31, 0xc9, //0x000031e9 xorl %r9d, %r9d - 0x31, 0xd2, //0x000031ec xorl %edx, %edx - 0x49, 0x83, 0xfe, 0x40, //0x000031ee cmpq $64, %r14 - 0x0f, 0x8c, 0x44, 0x01, 0x00, 0x00, //0x000031f2 jl LBB0_616 - //0x000031f8 LBB0_610 - 0xc4, 0xc1, 0x7e, 0x6f, 0x3a, //0x000031f8 vmovdqu (%r10), %ymm7 - 0xc4, 0xc1, 0x7e, 0x6f, 0x72, 0x20, //0x000031fd vmovdqu $32(%r10), %ymm6 - 0xc5, 0x45, 0x74, 0xc0, //0x00003203 vpcmpeqb %ymm0, %ymm7, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xf0, //0x00003207 vpmovmskb %ymm8, %esi - 0xc5, 0x4d, 0x74, 0xc0, //0x0000320c vpcmpeqb %ymm0, %ymm6, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x00003210 vpmovmskb %ymm8, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00003215 shlq $32, %rcx - 0x48, 0x09, 0xce, //0x00003219 orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x0000321c movq %rsi, %rcx - 0x4d, 0x89, 0xe8, //0x0000321f movq %r13, %r8 - 0x4c, 0x09, 0xe1, //0x00003222 orq %r12, %rcx - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00003225 jne LBB0_612 - 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x0000322b movq $-1, %rsi - 0x45, 0x31, 0xe4, //0x00003232 xorl %r12d, %r12d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00003235 jmp LBB0_613 - //0x0000323a LBB0_612 - 0x4c, 0x89, 0xe1, //0x0000323a movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x0000323d notq %rcx - 0x48, 0x21, 0xf1, //0x00003240 andq %rsi, %rcx - 0x4c, 0x8d, 0x2c, 0x09, //0x00003243 leaq (%rcx,%rcx), %r13 - 0x4d, 0x09, 0xe5, //0x00003247 orq %r12, %r13 - 0x4c, 0x89, 0xeb, //0x0000324a movq %r13, %rbx - 0x48, 0xf7, 0xd3, //0x0000324d notq %rbx - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003250 movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfe, //0x0000325a andq %rdi, %rsi - 0x48, 0x21, 0xde, //0x0000325d andq %rbx, %rsi - 0x45, 0x31, 0xe4, //0x00003260 xorl %r12d, %r12d - 0x48, 0x01, 0xce, //0x00003263 addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc4, //0x00003266 setb %r12b - 0x48, 0x01, 0xf6, //0x0000326a addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000326d movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00003277 xorq %rcx, %rsi - 0x4c, 0x21, 0xee, //0x0000327a andq %r13, %rsi - 0x48, 0xf7, 0xd6, //0x0000327d notq %rsi - //0x00003280 LBB0_613 - 0xc5, 0x4d, 0x74, 0xc1, //0x00003280 vpcmpeqb %ymm1, %ymm6, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x00003284 vpmovmskb %ymm8, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00003289 shlq $32, %rcx - 0xc5, 0x45, 0x74, 0xc1, //0x0000328d vpcmpeqb %ymm1, %ymm7, %ymm8 - 0xc4, 0xc1, 0x7d, 0xd7, 0xf8, //0x00003291 vpmovmskb %ymm8, %edi - 0x48, 0x09, 0xcf, //0x00003296 orq %rcx, %rdi - 0x48, 0x21, 0xf7, //0x00003299 andq %rsi, %rdi - 0xc4, 0xe1, 0xf9, 0x6e, 0xef, //0x0000329c vmovq %rdi, %xmm5 - 0xc4, 0xe3, 0x51, 0x44, 0xea, 0x00, //0x000032a1 vpclmulqdq $0, %xmm2, %xmm5, %xmm5 - 0xc4, 0xc1, 0xf9, 0x7e, 0xed, //0x000032a7 vmovq %xmm5, %r13 - 0x4d, 0x31, 0xdd, //0x000032ac xorq %r11, %r13 - 0xc5, 0xc5, 0x74, 0xeb, //0x000032af vpcmpeqb %ymm3, %ymm7, %ymm5 - 0xc5, 0xfd, 0xd7, 0xfd, //0x000032b3 vpmovmskb %ymm5, %edi - 0xc5, 0xcd, 0x74, 0xeb, //0x000032b7 vpcmpeqb %ymm3, %ymm6, %ymm5 - 0xc5, 0xfd, 0xd7, 0xcd, //0x000032bb vpmovmskb %ymm5, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x000032bf shlq $32, %rcx - 0x48, 0x09, 0xcf, //0x000032c3 orq %rcx, %rdi - 0x4c, 0x89, 0xe9, //0x000032c6 movq %r13, %rcx - 0x48, 0xf7, 0xd1, //0x000032c9 notq %rcx - 0x48, 0x21, 0xcf, //0x000032cc andq %rcx, %rdi - 0xc5, 0xc5, 0x74, 0xec, //0x000032cf vpcmpeqb %ymm4, %ymm7, %ymm5 - 0xc5, 0xfd, 0xd7, 0xdd, //0x000032d3 vpmovmskb %ymm5, %ebx - 0xc5, 0xcd, 0x74, 0xec, //0x000032d7 vpcmpeqb %ymm4, %ymm6, %ymm5 - 0xc5, 0xfd, 0xd7, 0xf5, //0x000032db vpmovmskb %ymm5, %esi - 0x48, 0xc1, 0xe6, 0x20, //0x000032df shlq $32, %rsi - 0x48, 0x09, 0xf3, //0x000032e3 orq %rsi, %rbx - 0x48, 0x21, 0xcb, //0x000032e6 andq %rcx, %rbx - 0x0f, 0x84, 0x29, 0x00, 0x00, 0x00, //0x000032e9 je LBB0_608 - 0x90, //0x000032ef .p2align 4, 0x90 - //0x000032f0 LBB0_614 - 0x48, 0x8d, 0x4b, 0xff, //0x000032f0 leaq $-1(%rbx), %rcx - 0x48, 0x89, 0xce, //0x000032f4 movq %rcx, %rsi - 0x48, 0x21, 0xfe, //0x000032f7 andq %rdi, %rsi - 0xf3, 0x48, 0x0f, 0xb8, 0xf6, //0x000032fa popcntq %rsi, %rsi - 0x4c, 0x01, 0xce, //0x000032ff addq %r9, %rsi - 0x48, 0x39, 0xd6, //0x00003302 cmpq %rdx, %rsi - 0x0f, 0x86, 0x50, 0x01, 0x00, 0x00, //0x00003305 jbe LBB0_631 - 0x48, 0x83, 0xc2, 0x01, //0x0000330b addq $1, %rdx - 0x48, 0x21, 0xcb, //0x0000330f andq %rcx, %rbx - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00003312 jne LBB0_614 - //0x00003318 LBB0_608 - 0x49, 0xc1, 0xfd, 0x3f, //0x00003318 sarq $63, %r13 - 0xf3, 0x48, 0x0f, 0xb8, 0xcf, //0x0000331c popcntq %rdi, %rcx - 0x49, 0x01, 0xc9, //0x00003321 addq %rcx, %r9 - 0x49, 0x83, 0xc2, 0x40, //0x00003324 addq $64, %r10 - 0x49, 0x83, 0xc6, 0xc0, //0x00003328 addq $-64, %r14 - 0x4d, 0x89, 0xeb, //0x0000332c movq %r13, %r11 - 0x4d, 0x89, 0xc5, //0x0000332f movq %r8, %r13 - 0x49, 0x83, 0xfe, 0x40, //0x00003332 cmpq $64, %r14 - 0x0f, 0x8d, 0xbc, 0xfe, 0xff, 0xff, //0x00003336 jge LBB0_610 - //0x0000333c LBB0_616 - 0x4d, 0x85, 0xf6, //0x0000333c testq %r14, %r14 - 0x0f, 0x8e, 0xcc, 0x03, 0x00, 0x00, //0x0000333f jle LBB0_672 - 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x60, //0x00003345 vmovdqu %ymm9, $96(%rsp) - 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x40, //0x0000334b vmovdqu %ymm9, $64(%rsp) - 0x44, 0x89, 0xd1, //0x00003351 movl %r10d, %ecx - 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00003354 andl $4095, %ecx - 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x0000335a cmpl $4033, %ecx - 0x0f, 0x82, 0x92, 0xfe, 0xff, 0xff, //0x00003360 jb LBB0_610 - 0x49, 0x83, 0xfe, 0x20, //0x00003366 cmpq $32, %r14 - 0x0f, 0x82, 0x1d, 0x00, 0x00, 0x00, //0x0000336a jb LBB0_620 - 0xc4, 0xc1, 0x7e, 0x6f, 0x2a, //0x00003370 vmovdqu (%r10), %ymm5 - 0xc5, 0xfe, 0x7f, 0x6c, 0x24, 0x40, //0x00003375 vmovdqu %ymm5, $64(%rsp) - 0x49, 0x83, 0xc2, 0x20, //0x0000337b addq $32, %r10 - 0x49, 0x8d, 0x7e, 0xe0, //0x0000337f leaq $-32(%r14), %rdi - 0x48, 0x8d, 0x74, 0x24, 0x60, //0x00003383 leaq $96(%rsp), %rsi - 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00003388 jmp LBB0_621 - //0x0000338d LBB0_620 - 0x48, 0x8d, 0x74, 0x24, 0x40, //0x0000338d leaq $64(%rsp), %rsi - 0x4c, 0x89, 0xf7, //0x00003392 movq %r14, %rdi - //0x00003395 LBB0_621 - 0x48, 0x83, 0xff, 0x10, //0x00003395 cmpq $16, %rdi - 0x0f, 0x82, 0x5a, 0x00, 0x00, 0x00, //0x00003399 jb LBB0_622 - 0xc4, 0xc1, 0x7a, 0x6f, 0x2a, //0x0000339f vmovdqu (%r10), %xmm5 - 0xc5, 0xfa, 0x7f, 0x2e, //0x000033a4 vmovdqu %xmm5, (%rsi) - 0x49, 0x83, 0xc2, 0x10, //0x000033a8 addq $16, %r10 - 0x48, 0x83, 0xc6, 0x10, //0x000033ac addq $16, %rsi - 0x48, 0x83, 0xc7, 0xf0, //0x000033b0 addq $-16, %rdi - 0x48, 0x83, 0xff, 0x08, //0x000033b4 cmpq $8, %rdi - 0x0f, 0x83, 0x45, 0x00, 0x00, 0x00, //0x000033b8 jae LBB0_627 - //0x000033be LBB0_623 - 0x48, 0x83, 0xff, 0x04, //0x000033be cmpq $4, %rdi - 0x0f, 0x8c, 0x57, 0x00, 0x00, 0x00, //0x000033c2 jl LBB0_624 - //0x000033c8 LBB0_628 - 0x41, 0x8b, 0x0a, //0x000033c8 movl (%r10), %ecx - 0x89, 0x0e, //0x000033cb movl %ecx, (%rsi) - 0x49, 0x83, 0xc2, 0x04, //0x000033cd addq $4, %r10 - 0x48, 0x83, 0xc6, 0x04, //0x000033d1 addq $4, %rsi - 0x48, 0x83, 0xc7, 0xfc, //0x000033d5 addq $-4, %rdi - 0x48, 0x83, 0xff, 0x02, //0x000033d9 cmpq $2, %rdi - 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x000033dd jae LBB0_629 - //0x000033e3 LBB0_625 - 0x4c, 0x89, 0xd3, //0x000033e3 movq %r10, %rbx - 0x4c, 0x8d, 0x54, 0x24, 0x40, //0x000033e6 leaq $64(%rsp), %r10 - 0x48, 0x85, 0xff, //0x000033eb testq %rdi, %rdi - 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x000033ee jne LBB0_630 - 0xe9, 0xff, 0xfd, 0xff, 0xff, //0x000033f4 jmp LBB0_610 - //0x000033f9 LBB0_622 - 0x48, 0x83, 0xff, 0x08, //0x000033f9 cmpq $8, %rdi - 0x0f, 0x82, 0xbb, 0xff, 0xff, 0xff, //0x000033fd jb LBB0_623 - //0x00003403 LBB0_627 - 0x49, 0x8b, 0x0a, //0x00003403 movq (%r10), %rcx - 0x48, 0x89, 0x0e, //0x00003406 movq %rcx, (%rsi) - 0x49, 0x83, 0xc2, 0x08, //0x00003409 addq $8, %r10 - 0x48, 0x83, 0xc6, 0x08, //0x0000340d addq $8, %rsi - 0x48, 0x83, 0xc7, 0xf8, //0x00003411 addq $-8, %rdi - 0x48, 0x83, 0xff, 0x04, //0x00003415 cmpq $4, %rdi - 0x0f, 0x8d, 0xa9, 0xff, 0xff, 0xff, //0x00003419 jge LBB0_628 - //0x0000341f LBB0_624 - 0x48, 0x83, 0xff, 0x02, //0x0000341f cmpq $2, %rdi - 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x00003423 jb LBB0_625 - //0x00003429 LBB0_629 - 0x41, 0x0f, 0xb7, 0x0a, //0x00003429 movzwl (%r10), %ecx - 0x66, 0x89, 0x0e, //0x0000342d movw %cx, (%rsi) - 0x49, 0x83, 0xc2, 0x02, //0x00003430 addq $2, %r10 - 0x48, 0x83, 0xc6, 0x02, //0x00003434 addq $2, %rsi - 0x48, 0x83, 0xc7, 0xfe, //0x00003438 addq $-2, %rdi - 0x4c, 0x89, 0xd3, //0x0000343c movq %r10, %rbx - 0x4c, 0x8d, 0x54, 0x24, 0x40, //0x0000343f leaq $64(%rsp), %r10 - 0x48, 0x85, 0xff, //0x00003444 testq %rdi, %rdi - 0x0f, 0x84, 0xab, 0xfd, 0xff, 0xff, //0x00003447 je LBB0_610 - //0x0000344d LBB0_630 - 0x8a, 0x0b, //0x0000344d movb (%rbx), %cl - 0x88, 0x0e, //0x0000344f movb %cl, (%rsi) - 0x4c, 0x8d, 0x54, 0x24, 0x40, //0x00003451 leaq $64(%rsp), %r10 - 0xe9, 0x9d, 0xfd, 0xff, 0xff, //0x00003456 jmp LBB0_610 - //0x0000345b LBB0_631 - 0x49, 0x8b, 0x48, 0x08, //0x0000345b movq $8(%r8), %rcx - 0x48, 0x0f, 0xbc, 0xd3, //0x0000345f bsfq %rbx, %rdx - 0x4c, 0x29, 0xf2, //0x00003463 subq %r14, %rdx - 0x48, 0x01, 0xd1, //0x00003466 addq %rdx, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x00003469 addq $1, %rcx - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x0000346d movq $8(%rsp), %r11 - 0x49, 0x89, 0x0b, //0x00003472 movq %rcx, (%r11) - 0x49, 0x8b, 0x50, 0x08, //0x00003475 movq $8(%r8), %rdx - 0x48, 0x39, 0xd1, //0x00003479 cmpq %rdx, %rcx - 0x48, 0x0f, 0x47, 0xca, //0x0000347c cmovaq %rdx, %rcx - 0x49, 0x89, 0x0b, //0x00003480 movq %rcx, (%r11) - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003483 movq $-1, %rcx - 0x48, 0x0f, 0x47, 0xc1, //0x0000348a cmovaq %rcx, %rax - 0x49, 0x89, 0xc7, //0x0000348e movq %rax, %r15 - 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00003491 jmp LBB0_638 - //0x00003496 LBB0_632 - 0x41, 0x0f, 0xbc, 0xcb, //0x00003496 bsfl %r11d, %ecx - 0x48, 0x01, 0xc1, //0x0000349a addq %rax, %rcx - 0x4c, 0x01, 0xf1, //0x0000349d addq %r14, %rcx - 0x48, 0x83, 0xc1, 0x02, //0x000034a0 addq $2, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x000034a4 movq %rcx, (%r13) - 0x49, 0x89, 0xc7, //0x000034a8 movq %rax, %r15 - 0xe9, 0x28, 0x00, 0x00, 0x00, //0x000034ab jmp LBB0_638 - //0x000034b0 LBB0_633 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000034b0 movq $-1, %rcx - 0xe9, 0x03, 0x00, 0x00, 0x00, //0x000034b7 jmp LBB0_636 - //0x000034bc LBB0_635 - 0x4c, 0x89, 0xc1, //0x000034bc movq %r8, %rcx - //0x000034bf LBB0_636 - 0x48, 0x8b, 0x54, 0x24, 0x08, //0x000034bf movq $8(%rsp), %rdx - 0x48, 0x8b, 0x02, //0x000034c4 movq (%rdx), %rax - 0x48, 0x29, 0xc8, //0x000034c7 subq %rcx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x000034ca addq $-2, %rax - 0x48, 0x89, 0x02, //0x000034ce movq %rax, (%rdx) - //0x000034d1 LBB0_637 - 0x49, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x000034d1 movq $-2, %r15 - //0x000034d8 LBB0_638 - 0x4c, 0x89, 0xf8, //0x000034d8 movq %r15, %rax - 0x48, 0x8d, 0x65, 0xd8, //0x000034db leaq $-40(%rbp), %rsp - 0x5b, //0x000034df popq %rbx - 0x41, 0x5c, //0x000034e0 popq %r12 - 0x41, 0x5d, //0x000034e2 popq %r13 - 0x41, 0x5e, //0x000034e4 popq %r14 - 0x41, 0x5f, //0x000034e6 popq %r15 - 0x5d, //0x000034e8 popq %rbp - 0xc5, 0xf8, 0x77, //0x000034e9 vzeroupper - 0xc3, //0x000034ec retq - //0x000034ed LBB0_639 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000034ed movq $-2, %rcx - 0xbf, 0x02, 0x00, 0x00, 0x00, //0x000034f4 movl $2, %edi - 0x48, 0x01, 0xfa, //0x000034f9 addq %rdi, %rdx - 0x49, 0x01, 0xce, //0x000034fc addq %rcx, %r14 - 0x0f, 0x8e, 0xd3, 0xff, 0xff, 0xff, //0x000034ff jle LBB0_638 - //0x00003505 LBB0_640 - 0x0f, 0xb6, 0x0a, //0x00003505 movzbl (%rdx), %ecx - 0x80, 0xf9, 0x5c, //0x00003508 cmpb $92, %cl - 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x0000350b je LBB0_639 - 0x80, 0xf9, 0x22, //0x00003511 cmpb $34, %cl - 0x0f, 0x84, 0x96, 0x01, 0x00, 0x00, //0x00003514 je LBB0_665 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000351a movq $-1, %rcx - 0xbf, 0x01, 0x00, 0x00, 0x00, //0x00003521 movl $1, %edi - 0x48, 0x01, 0xfa, //0x00003526 addq %rdi, %rdx - 0x49, 0x01, 0xce, //0x00003529 addq %rcx, %r14 - 0x0f, 0x8f, 0xd3, 0xff, 0xff, 0xff, //0x0000352c jg LBB0_640 - 0xe9, 0xa1, 0xff, 0xff, 0xff, //0x00003532 jmp LBB0_638 - //0x00003537 LBB0_643 - 0x48, 0x8b, 0x14, 0x24, //0x00003537 movq (%rsp), %rdx - 0x48, 0x83, 0xfa, 0xff, //0x0000353b cmpq $-1, %rdx - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x0000353f jne LBB0_646 - 0x48, 0x0f, 0xbc, 0xd6, //0x00003545 bsfq %rsi, %rdx - //0x00003549 LBB0_645 - 0x4c, 0x01, 0xfa, //0x00003549 addq %r15, %rdx - //0x0000354c LBB0_646 - 0x49, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x0000354c movq $-2, %r15 - 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00003553 movq $8(%rsp), %r11 - 0x49, 0x89, 0x13, //0x00003558 movq %rdx, (%r11) - 0xe9, 0x78, 0xff, 0xff, 0xff, //0x0000355b jmp LBB0_638 - //0x00003560 LBB0_647 - 0x66, 0x0f, 0xbc, 0xc9, //0x00003560 bsfw %cx, %cx - 0x0f, 0xb7, 0xc9, //0x00003564 movzwl %cx, %ecx - 0x48, 0x29, 0xf9, //0x00003567 subq %rdi, %rcx - 0xe9, 0xe3, 0xd0, 0xff, 0xff, //0x0000356a jmp LBB0_52 - //0x0000356f LBB0_649 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000356f movq $-1, %rcx - 0xe9, 0x02, 0x01, 0x00, 0x00, //0x00003576 jmp LBB0_662 - //0x0000357b LBB0_651 - 0x49, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x0000357b movq $-2, %r15 - 0x80, 0xfa, 0x61, //0x00003582 cmpb $97, %dl - 0x0f, 0x85, 0x4d, 0xff, 0xff, 0xff, //0x00003585 jne LBB0_638 - 0x48, 0x8d, 0x41, 0x01, //0x0000358b leaq $1(%rcx), %rax - 0x49, 0x89, 0x03, //0x0000358f movq %rax, (%r11) - 0x41, 0x80, 0x7c, 0x08, 0x01, 0x6c, //0x00003592 cmpb $108, $1(%r8,%rcx) - 0x0f, 0x85, 0x3a, 0xff, 0xff, 0xff, //0x00003598 jne LBB0_638 - 0x48, 0x8d, 0x41, 0x02, //0x0000359e leaq $2(%rcx), %rax - 0x49, 0x89, 0x03, //0x000035a2 movq %rax, (%r11) - 0x41, 0x80, 0x7c, 0x08, 0x02, 0x73, //0x000035a5 cmpb $115, $2(%r8,%rcx) - 0x0f, 0x85, 0x27, 0xff, 0xff, 0xff, //0x000035ab jne LBB0_638 - 0x48, 0x8d, 0x41, 0x03, //0x000035b1 leaq $3(%rcx), %rax - 0x49, 0x89, 0x03, //0x000035b5 movq %rax, (%r11) - 0x41, 0x80, 0x7c, 0x08, 0x03, 0x65, //0x000035b8 cmpb $101, $3(%r8,%rcx) - 0x0f, 0x85, 0x14, 0xff, 0xff, 0xff, //0x000035be jne LBB0_638 - 0x48, 0x83, 0xc1, 0x04, //0x000035c4 addq $4, %rcx - 0x49, 0x89, 0x0b, //0x000035c8 movq %rcx, (%r11) - 0xe9, 0x08, 0xff, 0xff, 0xff, //0x000035cb jmp LBB0_638 - //0x000035d0 LBB0_293 - 0x4d, 0x89, 0x3b, //0x000035d0 movq %r15, (%r11) - 0x43, 0x80, 0x3c, 0x38, 0x6e, //0x000035d3 cmpb $110, (%r8,%r15) - 0x0f, 0x85, 0xf3, 0xfe, 0xff, 0xff, //0x000035d8 jne LBB0_637 - 0x49, 0x89, 0x0b, //0x000035de movq %rcx, (%r11) - 0x41, 0x80, 0x3c, 0x08, 0x75, //0x000035e1 cmpb $117, (%r8,%rcx) - 0x0f, 0x85, 0xe5, 0xfe, 0xff, 0xff, //0x000035e6 jne LBB0_637 - 0x48, 0x8d, 0x41, 0x01, //0x000035ec leaq $1(%rcx), %rax - 0x49, 0x89, 0x03, //0x000035f0 movq %rax, (%r11) - 0x41, 0x80, 0x7c, 0x08, 0x01, 0x6c, //0x000035f3 cmpb $108, $1(%r8,%rcx) - 0x0f, 0x85, 0xd2, 0xfe, 0xff, 0xff, //0x000035f9 jne LBB0_637 - 0x48, 0x8d, 0x41, 0x02, //0x000035ff leaq $2(%rcx), %rax - 0x49, 0x89, 0x03, //0x00003603 movq %rax, (%r11) - 0x41, 0x80, 0x7c, 0x08, 0x02, 0x6c, //0x00003606 cmpb $108, $2(%r8,%rcx) - 0x0f, 0x85, 0xbf, 0xfe, 0xff, 0xff, //0x0000360c jne LBB0_637 - 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00003612 jmp LBB0_660 - //0x00003617 LBB0_656 - 0x4d, 0x89, 0x3b, //0x00003617 movq %r15, (%r11) - 0x43, 0x80, 0x3c, 0x38, 0x74, //0x0000361a cmpb $116, (%r8,%r15) - 0x0f, 0x85, 0xac, 0xfe, 0xff, 0xff, //0x0000361f jne LBB0_637 - 0x49, 0x89, 0x0b, //0x00003625 movq %rcx, (%r11) - 0x41, 0x80, 0x3c, 0x08, 0x72, //0x00003628 cmpb $114, (%r8,%rcx) - 0x0f, 0x85, 0x9e, 0xfe, 0xff, 0xff, //0x0000362d jne LBB0_637 - 0x48, 0x8d, 0x41, 0x01, //0x00003633 leaq $1(%rcx), %rax - 0x49, 0x89, 0x03, //0x00003637 movq %rax, (%r11) - 0x41, 0x80, 0x7c, 0x08, 0x01, 0x75, //0x0000363a cmpb $117, $1(%r8,%rcx) - 0x0f, 0x85, 0x8b, 0xfe, 0xff, 0xff, //0x00003640 jne LBB0_637 - 0x48, 0x8d, 0x41, 0x02, //0x00003646 leaq $2(%rcx), %rax - 0x49, 0x89, 0x03, //0x0000364a movq %rax, (%r11) - 0x41, 0x80, 0x7c, 0x08, 0x02, 0x65, //0x0000364d cmpb $101, $2(%r8,%rcx) - 0x0f, 0x85, 0x78, 0xfe, 0xff, 0xff, //0x00003653 jne LBB0_637 - //0x00003659 LBB0_660 - 0x48, 0x83, 0xc1, 0x03, //0x00003659 addq $3, %rcx - 0x49, 0x89, 0x0b, //0x0000365d movq %rcx, (%r11) - 0xe9, 0x6c, 0xfe, 0xff, 0xff, //0x00003660 jmp LBB0_637 - //0x00003665 LBB0_290 - 0x48, 0x83, 0xc1, 0xff, //0x00003665 addq $-1, %rcx - 0x49, 0x89, 0xcf, //0x00003669 movq %rcx, %r15 - 0xe9, 0x67, 0xfe, 0xff, 0xff, //0x0000366c jmp LBB0_638 - //0x00003671 LBB0_426 - 0x49, 0x83, 0xc7, 0xff, //0x00003671 addq $-1, %r15 - 0xe9, 0x5e, 0xfe, 0xff, 0xff, //0x00003675 jmp LBB0_638 - //0x0000367a LBB0_661 - 0x4c, 0x89, 0xe1, //0x0000367a movq %r12, %rcx - //0x0000367d LBB0_662 - 0x48, 0xf7, 0xd1, //0x0000367d notq %rcx - 0x48, 0x8b, 0x44, 0x24, 0x08, //0x00003680 movq $8(%rsp), %rax - 0x48, 0x01, 0x08, //0x00003685 addq %rcx, (%rax) - 0xe9, 0x44, 0xfe, 0xff, 0xff, //0x00003688 jmp LBB0_637 - //0x0000368d LBB0_663 - 0x4c, 0x29, 0xd0, //0x0000368d subq %r10, %rax - 0x48, 0x01, 0xf0, //0x00003690 addq %rsi, %rax - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00003693 movq $-1, %r15 - 0x48, 0x39, 0xd0, //0x0000369a cmpq %rdx, %rax - 0x0f, 0x82, 0x5b, 0xce, 0xff, 0xff, //0x0000369d jb LBB0_33 - 0xe9, 0x30, 0xfe, 0xff, 0xff, //0x000036a3 jmp LBB0_638 - //0x000036a8 LBB0_670 - 0x4d, 0x89, 0xc4, //0x000036a8 movq %r8, %r12 - 0xe9, 0x12, 0xf7, 0xff, 0xff, //0x000036ab jmp LBB0_381 - //0x000036b0 LBB0_665 - 0x4c, 0x29, 0xd2, //0x000036b0 subq %r10, %rdx - 0x48, 0x83, 0xc2, 0x01, //0x000036b3 addq $1, %rdx - 0x49, 0x89, 0x55, 0x00, //0x000036b7 movq %rdx, (%r13) - 0x49, 0x89, 0xc7, //0x000036bb movq %rax, %r15 - 0xe9, 0x15, 0xfe, 0xff, 0xff, //0x000036be jmp LBB0_638 - //0x000036c3 LBB0_217 - 0x4c, 0x01, 0xfa, //0x000036c3 addq %r15, %rdx - 0x49, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x000036c6 movq $-2, %r15 - 0x49, 0x89, 0x13, //0x000036cd movq %rdx, (%r11) - 0xe9, 0x03, 0xfe, 0xff, 0xff, //0x000036d0 jmp LBB0_638 - //0x000036d5 LBB0_666 - 0x4c, 0x01, 0xd0, //0x000036d5 addq %r10, %rax - 0x48, 0x85, 0xff, //0x000036d8 testq %rdi, %rdi - 0x0f, 0x85, 0xa7, 0xcd, 0xff, 0xff, //0x000036db jne LBB0_25 - 0xe9, 0xd9, 0xcd, 0xff, 0xff, //0x000036e1 jmp LBB0_30 - //0x000036e6 LBB0_667 - 0x4c, 0x01, 0xd2, //0x000036e6 addq %r10, %rdx - 0x48, 0x83, 0xfe, 0x10, //0x000036e9 cmpq $16, %rsi - 0x0f, 0x83, 0xbf, 0xce, 0xff, 0xff, //0x000036ed jae LBB0_40 - 0xe9, 0x0e, 0xcf, 0xff, 0xff, //0x000036f3 jmp LBB0_43 - //0x000036f8 LBB0_668 - 0x4c, 0x29, 0xd2, //0x000036f8 subq %r10, %rdx - 0x48, 0x01, 0xfa, //0x000036fb addq %rdi, %rdx - //0x000036fe LBB0_669 - 0x49, 0x89, 0x13, //0x000036fe movq %rdx, (%r11) - 0x49, 0x89, 0xc7, //0x00003701 movq %rax, %r15 - 0xe9, 0xcf, 0xfd, 0xff, 0xff, //0x00003704 jmp LBB0_638 - //0x00003709 LBB0_671 - 0x4c, 0x01, 0xd2, //0x00003709 addq %r10, %rdx - 0xe9, 0xba, 0xf7, 0xff, 0xff, //0x0000370c jmp LBB0_580 - //0x00003711 LBB0_672 - 0x49, 0x8b, 0x45, 0x08, //0x00003711 movq $8(%r13), %rax - 0x48, 0x8b, 0x4c, 0x24, 0x08, //0x00003715 movq $8(%rsp), %rcx - 0x48, 0x89, 0x01, //0x0000371a movq %rax, (%rcx) - 0xe9, 0xb6, 0xfd, 0xff, 0xff, //0x0000371d jmp LBB0_638 - //0x00003722 LBB0_673 - 0x89, 0xf9, //0x00003722 movl %edi, %ecx - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00003724 subq $16(%rsp), %r15 - 0x49, 0x01, 0xcf, //0x00003729 addq %rcx, %r15 - 0x4c, 0x89, 0xfa, //0x0000372c movq %r15, %rdx - 0xe9, 0x18, 0xfe, 0xff, 0xff, //0x0000372f jmp LBB0_646 - //0x00003734 LBB0_678 - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00003734 subq $16(%rsp), %r15 - 0x89, 0xfa, //0x00003739 movl %edi, %edx - 0xe9, 0x09, 0xfe, 0xff, 0xff, //0x0000373b jmp LBB0_645 - //0x00003740 LBB0_674 - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00003740 subq $16(%rsp), %r15 - 0x4c, 0x89, 0xfa, //0x00003745 movq %r15, %rdx - 0x49, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x00003748 movq $-2, %r15 - 0x49, 0x89, 0x13, //0x0000374f movq %rdx, (%r11) - 0xe9, 0x81, 0xfd, 0xff, 0xff, //0x00003752 jmp LBB0_638 - //0x00003757 LBB0_677 - 0x89, 0xf8, //0x00003757 movl %edi, %eax - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00003759 subq $16(%rsp), %r15 - 0x49, 0x01, 0xc7, //0x0000375e addq %rax, %r15 - 0x4c, 0x89, 0xfa, //0x00003761 movq %r15, %rdx - 0xe9, 0xe3, 0xfd, 0xff, 0xff, //0x00003764 jmp LBB0_646 - //0x00003769 LBB0_675 - 0x49, 0x8d, 0x48, 0xff, //0x00003769 leaq $-1(%r8), %rcx - 0x4c, 0x39, 0xf1, //0x0000376d cmpq %r14, %rcx - 0x0f, 0x84, 0x62, 0xfd, 0xff, 0xff, //0x00003770 je LBB0_638 - 0x4b, 0x8d, 0x14, 0x0e, //0x00003776 leaq (%r14,%r9), %rdx - 0x48, 0x83, 0xc2, 0x02, //0x0000377a addq $2, %rdx - 0x4d, 0x29, 0xf0, //0x0000377e subq %r14, %r8 - 0x49, 0x83, 0xc0, 0xfe, //0x00003781 addq $-2, %r8 - 0x4d, 0x89, 0xc6, //0x00003785 movq %r8, %r14 - 0xe9, 0x3e, 0xf7, 0xff, 0xff, //0x00003788 jmp LBB0_580 - //0x0000378d LBB0_679 - 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x0000378d subq $16(%rsp), %r15 - 0x4c, 0x89, 0xfa, //0x00003792 movq %r15, %rdx - 0xe9, 0xb2, 0xfd, 0xff, 0xff, //0x00003795 jmp LBB0_646 - 0x90, 0x90, //0x0000379a .p2align 2, 0x90 - // // .set L0_0_set_638, LBB0_638-LJTI0_0 - // // .set L0_0_set_569, LBB0_569-LJTI0_0 - // // .set L0_0_set_570, LBB0_570-LJTI0_0 + 0x48, 0x01, 0xc2, //0x0000059c addq %rax, %rdx + 0x48, 0x83, 0xc2, 0x01, //0x0000059f addq $1, %rdx + 0x48, 0x01, 0xfe, //0x000005a3 addq %rdi, %rsi + 0x48, 0x83, 0xfe, 0x10, //0x000005a6 cmpq $16, %rsi + 0x0f, 0x82, 0x54, 0x00, 0x00, 0x00, //0x000005aa jb LBB0_44 + //0x000005b0 LBB0_40 + 0x48, 0x8d, 0x7a, 0xff, //0x000005b0 leaq $-1(%rdx), %rdi + 0x31, 0xdb, //0x000005b4 xorl %ebx, %ebx + 0xc5, 0xfa, 0x6f, 0x05, 0x42, 0xfc, 0xff, 0xff, //0x000005b6 vmovdqu $-958(%rip), %xmm0 /* LCPI0_4+0(%rip) */ + 0xc5, 0xfa, 0x6f, 0x0d, 0x4a, 0xfc, 0xff, 0xff, //0x000005be vmovdqu $-950(%rip), %xmm1 /* LCPI0_5+0(%rip) */ + 0xc5, 0xfa, 0x6f, 0x15, 0x52, 0xfc, 0xff, 0xff, //0x000005c6 vmovdqu $-942(%rip), %xmm2 /* LCPI0_6+0(%rip) */ + //0x000005ce LBB0_41 + 0xc5, 0xfa, 0x6f, 0x1c, 0x1a, //0x000005ce vmovdqu (%rdx,%rbx), %xmm3 + 0xc5, 0xe1, 0x74, 0xe0, //0x000005d3 vpcmpeqb %xmm0, %xmm3, %xmm4 + 0xc5, 0xe1, 0xdb, 0xd9, //0x000005d7 vpand %xmm1, %xmm3, %xmm3 + 0xc5, 0xe1, 0x74, 0xda, //0x000005db vpcmpeqb %xmm2, %xmm3, %xmm3 + 0xc5, 0xe1, 0xeb, 0xdc, //0x000005df vpor %xmm4, %xmm3, %xmm3 + 0xc5, 0xf9, 0xd7, 0xcb, //0x000005e3 vpmovmskb %xmm3, %ecx + 0x85, 0xc9, //0x000005e7 testl %ecx, %ecx + 0x0f, 0x85, 0xd1, 0x2f, 0x00, 0x00, //0x000005e9 jne LBB0_655 + 0x48, 0x83, 0xc6, 0xf0, //0x000005ef addq $-16, %rsi + 0x48, 0x83, 0xc3, 0x10, //0x000005f3 addq $16, %rbx + 0x48, 0x83, 0xfe, 0x0f, //0x000005f7 cmpq $15, %rsi + 0x0f, 0x87, 0xcd, 0xff, 0xff, 0xff, //0x000005fb ja LBB0_41 + 0x48, 0x01, 0xda, //0x00000601 addq %rbx, %rdx + //0x00000604 LBB0_44 + 0x48, 0x85, 0xf6, //0x00000604 testq %rsi, %rsi + 0x0f, 0x84, 0x48, 0x00, 0x00, 0x00, //0x00000607 je LBB0_52 + 0x48, 0x8d, 0x3c, 0x32, //0x0000060d leaq (%rdx,%rsi), %rdi + 0x48, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00000611 movabsq $17596481021440, %rbx + //0x0000061b LBB0_46 + 0x0f, 0xb6, 0x0a, //0x0000061b movzbl (%rdx), %ecx + 0x48, 0x83, 0xf9, 0x2c, //0x0000061e cmpq $44, %rcx + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x00000622 ja LBB0_48 + 0x48, 0x0f, 0xa3, 0xcb, //0x00000628 btq %rcx, %rbx + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x0000062c jb LBB0_52 + //0x00000632 LBB0_48 + 0x80, 0xf9, 0x5d, //0x00000632 cmpb $93, %cl + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00000635 je LBB0_52 + 0x80, 0xf9, 0x7d, //0x0000063b cmpb $125, %cl + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x0000063e je LBB0_52 + 0x48, 0x83, 0xc2, 0x01, //0x00000644 addq $1, %rdx + 0x48, 0x83, 0xc6, 0xff, //0x00000648 addq $-1, %rsi + 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x0000064c jne LBB0_46 + 0x48, 0x89, 0xfa, //0x00000652 movq %rdi, %rdx + //0x00000655 LBB0_52 + 0x4c, 0x29, 0xd2, //0x00000655 subq %r10, %rdx + 0x49, 0x89, 0x13, //0x00000658 movq %rdx, (%r11) + 0x49, 0x89, 0xc7, //0x0000065b movq %rax, %r15 + 0xe9, 0xd5, 0x2e, 0x00, 0x00, //0x0000065e jmp LBB0_646 + //0x00000663 LBB0_53 + 0x0f, 0xbc, 0xd9, //0x00000663 bsfl %ecx, %ebx + 0x48, 0x01, 0xc3, //0x00000666 addq %rax, %rbx + 0x48, 0x89, 0xd9, //0x00000669 movq %rbx, %rcx + 0x48, 0x29, 0xf9, //0x0000066c subq %rdi, %rcx + 0x48, 0x8d, 0x71, 0x01, //0x0000066f leaq $1(%rcx), %rsi + 0x49, 0x89, 0x33, //0x00000673 movq %rsi, (%r11) + 0x48, 0x85, 0xf6, //0x00000676 testq %rsi, %rsi + 0x0f, 0x8e, 0x41, 0x00, 0x00, 0x00, //0x00000679 jle LBB0_58 + 0x48, 0x8d, 0x71, 0x02, //0x0000067f leaq $2(%rcx), %rsi + 0x48, 0x01, 0xda, //0x00000683 addq %rbx, %rdx + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000686 movabsq $4294977024, %rdi + //0x00000690 .p2align 4, 0x90 + //0x00000690 LBB0_55 + 0x0f, 0xb6, 0x1a, //0x00000690 movzbl (%rdx), %ebx + 0x48, 0x83, 0xfb, 0x20, //0x00000693 cmpq $32, %rbx + 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00000697 ja LBB0_58 + 0x48, 0x0f, 0xa3, 0xdf, //0x0000069d btq %rbx, %rdi + 0x0f, 0x83, 0x19, 0x00, 0x00, 0x00, //0x000006a1 jae LBB0_58 + 0x49, 0x89, 0x0b, //0x000006a7 movq %rcx, (%r11) + 0x48, 0x83, 0xc6, 0xff, //0x000006aa addq $-1, %rsi + 0x48, 0x83, 0xc1, 0xff, //0x000006ae addq $-1, %rcx + 0x48, 0x83, 0xc2, 0xff, //0x000006b2 addq $-1, %rdx + 0x48, 0x83, 0xfe, 0x01, //0x000006b6 cmpq $1, %rsi + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x000006ba jg LBB0_55 + //0x000006c0 LBB0_58 + 0x49, 0x89, 0xc7, //0x000006c0 movq %rax, %r15 + 0xe9, 0x70, 0x2e, 0x00, 0x00, //0x000006c3 jmp LBB0_646 + //0x000006c8 LBB0_642 + 0x49, 0xf7, 0xd8, //0x000006c8 negq %r8 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x000006cb movq $8(%rsp), %r11 + 0xc5, 0xfe, 0x6f, 0x2d, 0x28, 0xf9, 0xff, 0xff, //0x000006d0 vmovdqu $-1752(%rip), %ymm5 /* LCPI0_0+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0xa0, 0xf9, 0xff, 0xff, //0x000006d8 vmovdqu $-1632(%rip), %ymm6 /* LCPI0_7+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0xb8, 0xf9, 0xff, 0xff, //0x000006e0 vmovdqu $-1608(%rip), %ymm7 /* LCPI0_8+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x30, 0xfa, 0xff, 0xff, //0x000006e8 vmovdqu $-1488(%rip), %ymm8 /* LCPI0_13+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000006f0 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0x43, 0xfa, 0xff, 0xff, //0x000006f5 vmovdqu $-1469(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0x5b, 0xfa, 0xff, 0xff, //0x000006fd vmovdqu $-1445(%rip), %ymm11 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x73, 0xfa, 0xff, 0xff, //0x00000705 vmovdqu $-1421(%rip), %ymm12 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0x8b, 0xfa, 0xff, 0xff, //0x0000070d vmovdqu $-1397(%rip), %ymm13 /* LCPI0_17+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x23, 0xf9, 0xff, 0xff, //0x00000715 vmovdqu $-1757(%rip), %ymm14 /* LCPI0_2+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0x9b, 0xfa, 0xff, 0xff, //0x0000071d vmovdqu $-1381(%rip), %ymm15 /* LCPI0_18+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0xb3, 0xfa, 0xff, 0xff, //0x00000725 vmovdqu $-1357(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x4d, 0x85, 0xc0, //0x0000072d testq %r8, %r8 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00000730 movq $24(%rsp), %r10 + 0x0f, 0x88, 0xe1, 0x2d, 0x00, 0x00, //0x00000735 js LBB0_643 + //0x0000073b LBB0_414 + 0x49, 0x8b, 0x0b, //0x0000073b movq (%r11), %rcx + 0x48, 0x83, 0xc1, 0xff, //0x0000073e addq $-1, %rcx + //0x00000742 LBB0_60 + 0x4c, 0x01, 0xc1, //0x00000742 addq %r8, %rcx + 0x49, 0x89, 0x0b, //0x00000745 movq %rcx, (%r11) + 0x48, 0x83, 0x7c, 0x24, 0x28, 0x00, //0x00000748 cmpq $0, $40(%rsp) + 0x4c, 0x8b, 0x6c, 0x24, 0x38, //0x0000074e movq $56(%rsp), %r13 + 0x0f, 0x8e, 0xdf, 0x2d, 0x00, 0x00, //0x00000753 jle LBB0_646 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000759 .p2align 4, 0x90 + //0x00000760 LBB0_61 + 0x49, 0x8b, 0x11, //0x00000760 movq (%r9), %rdx + 0x4d, 0x89, 0xf7, //0x00000763 movq %r14, %r15 + 0x48, 0x85, 0xd2, //0x00000766 testq %rdx, %rdx + 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x00000769 jne LBB0_63 + 0xe9, 0xc4, 0x2d, 0x00, 0x00, //0x0000076f jmp LBB0_646 + //0x00000774 LBB0_59 + 0x4c, 0x89, 0xf9, //0x00000774 movq %r15, %rcx + 0xe9, 0xc6, 0xff, 0xff, 0xff, //0x00000777 jmp LBB0_60 + 0x90, 0x90, 0x90, 0x90, //0x0000077c .p2align 4, 0x90 + //0x00000780 LBB0_63 + 0x4c, 0x89, 0xf1, //0x00000780 movq %r14, %rcx + 0x4d, 0x8b, 0x45, 0x00, //0x00000783 movq (%r13), %r8 + 0x49, 0x8b, 0x7d, 0x08, //0x00000787 movq $8(%r13), %rdi + 0x49, 0x8b, 0x33, //0x0000078b movq (%r11), %rsi + 0x48, 0x39, 0xfe, //0x0000078e cmpq %rdi, %rsi + 0x4c, 0x89, 0x44, 0x24, 0x10, //0x00000791 movq %r8, $16(%rsp) + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00000796 jae LBB0_68 + 0x41, 0x8a, 0x04, 0x30, //0x0000079c movb (%r8,%rsi), %al + 0x3c, 0x0d, //0x000007a0 cmpb $13, %al + 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x000007a2 je LBB0_68 + 0x3c, 0x20, //0x000007a8 cmpb $32, %al + 0x0f, 0x84, 0x20, 0x00, 0x00, 0x00, //0x000007aa je LBB0_68 + 0x04, 0xf7, //0x000007b0 addb $-9, %al + 0x3c, 0x01, //0x000007b2 cmpb $1, %al + 0x0f, 0x86, 0x16, 0x00, 0x00, 0x00, //0x000007b4 jbe LBB0_68 + 0x49, 0x89, 0xf6, //0x000007ba movq %rsi, %r14 + 0xe9, 0x80, 0x01, 0x00, 0x00, //0x000007bd jmp LBB0_93 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000007c2 .p2align 4, 0x90 + //0x000007d0 LBB0_68 + 0x4c, 0x8d, 0x76, 0x01, //0x000007d0 leaq $1(%rsi), %r14 + 0x49, 0x39, 0xfe, //0x000007d4 cmpq %rdi, %r14 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000007d7 jae LBB0_72 + 0x43, 0x8a, 0x14, 0x30, //0x000007dd movb (%r8,%r14), %dl + 0x80, 0xfa, 0x0d, //0x000007e1 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000007e4 je LBB0_72 + 0x80, 0xfa, 0x20, //0x000007ea cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000007ed je LBB0_72 + 0x80, 0xc2, 0xf7, //0x000007f3 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000007f6 cmpb $1, %dl + 0x0f, 0x87, 0x43, 0x01, 0x00, 0x00, //0x000007f9 ja LBB0_93 + 0x90, //0x000007ff .p2align 4, 0x90 + //0x00000800 LBB0_72 + 0x4c, 0x8d, 0x76, 0x02, //0x00000800 leaq $2(%rsi), %r14 + 0x49, 0x39, 0xfe, //0x00000804 cmpq %rdi, %r14 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000807 jae LBB0_76 + 0x43, 0x8a, 0x14, 0x30, //0x0000080d movb (%r8,%r14), %dl + 0x80, 0xfa, 0x0d, //0x00000811 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000814 je LBB0_76 + 0x80, 0xfa, 0x20, //0x0000081a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000081d je LBB0_76 + 0x80, 0xc2, 0xf7, //0x00000823 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00000826 cmpb $1, %dl + 0x0f, 0x87, 0x13, 0x01, 0x00, 0x00, //0x00000829 ja LBB0_93 + 0x90, //0x0000082f .p2align 4, 0x90 + //0x00000830 LBB0_76 + 0x4c, 0x8d, 0x76, 0x03, //0x00000830 leaq $3(%rsi), %r14 + 0x49, 0x39, 0xfe, //0x00000834 cmpq %rdi, %r14 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000837 jae LBB0_80 + 0x43, 0x8a, 0x14, 0x30, //0x0000083d movb (%r8,%r14), %dl + 0x80, 0xfa, 0x0d, //0x00000841 cmpb $13, %dl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000844 je LBB0_80 + 0x80, 0xfa, 0x20, //0x0000084a cmpb $32, %dl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000084d je LBB0_80 + 0x80, 0xc2, 0xf7, //0x00000853 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00000856 cmpb $1, %dl + 0x0f, 0x87, 0xe3, 0x00, 0x00, 0x00, //0x00000859 ja LBB0_93 + 0x90, //0x0000085f .p2align 4, 0x90 + //0x00000860 LBB0_80 + 0x4c, 0x8d, 0x76, 0x04, //0x00000860 leaq $4(%rsi), %r14 + 0x48, 0x89, 0xfa, //0x00000864 movq %rdi, %rdx + 0x4c, 0x29, 0xf2, //0x00000867 subq %r14, %rdx + 0x0f, 0x86, 0x86, 0x25, 0x00, 0x00, //0x0000086a jbe LBB0_572 + 0x48, 0x83, 0xfa, 0x20, //0x00000870 cmpq $32, %rdx + 0x0f, 0x82, 0x58, 0x18, 0x00, 0x00, //0x00000874 jb LBB0_416 + 0x48, 0xc7, 0xc2, 0xfc, 0xff, 0xff, 0xff, //0x0000087a movq $-4, %rdx + 0x48, 0x29, 0xf2, //0x00000881 subq %rsi, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000884 .p2align 4, 0x90 + //0x00000890 LBB0_83 + 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x30, //0x00000890 vmovdqu (%r8,%r14), %ymm0 + 0xc4, 0xe2, 0x55, 0x00, 0xc8, //0x00000896 vpshufb %ymm0, %ymm5, %ymm1 + 0xc5, 0xfd, 0x74, 0xc1, //0x0000089b vpcmpeqb %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x0000089f vpmovmskb %ymm0, %esi + 0x83, 0xfe, 0xff, //0x000008a3 cmpl $-1, %esi + 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x000008a6 jne LBB0_92 + 0x49, 0x83, 0xc6, 0x20, //0x000008ac addq $32, %r14 + 0x48, 0x8d, 0x34, 0x17, //0x000008b0 leaq (%rdi,%rdx), %rsi + 0x48, 0x83, 0xc6, 0xe0, //0x000008b4 addq $-32, %rsi + 0x48, 0x83, 0xc2, 0xe0, //0x000008b8 addq $-32, %rdx + 0x48, 0x83, 0xfe, 0x1f, //0x000008bc cmpq $31, %rsi + 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x000008c0 ja LBB0_83 + 0x4d, 0x89, 0xc6, //0x000008c6 movq %r8, %r14 + 0x49, 0x29, 0xd6, //0x000008c9 subq %rdx, %r14 + 0x48, 0x01, 0xfa, //0x000008cc addq %rdi, %rdx + 0x48, 0x85, 0xd2, //0x000008cf testq %rdx, %rdx + 0x0f, 0x84, 0x3f, 0x00, 0x00, 0x00, //0x000008d2 je LBB0_91 + //0x000008d8 LBB0_86 + 0x4d, 0x8d, 0x04, 0x16, //0x000008d8 leaq (%r14,%rdx), %r8 + 0x31, 0xf6, //0x000008dc xorl %esi, %esi + 0x90, 0x90, //0x000008de .p2align 4, 0x90 + //0x000008e0 LBB0_87 + 0x41, 0x0f, 0xbe, 0x1c, 0x36, //0x000008e0 movsbl (%r14,%rsi), %ebx + 0x83, 0xfb, 0x20, //0x000008e5 cmpl $32, %ebx + 0x0f, 0x87, 0x1d, 0x16, 0x00, 0x00, //0x000008e8 ja LBB0_407 + 0x48, 0xb8, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000008ee movabsq $4294977024, %rax + 0x48, 0x0f, 0xa3, 0xd8, //0x000008f8 btq %rbx, %rax + 0x0f, 0x83, 0x09, 0x16, 0x00, 0x00, //0x000008fc jae LBB0_407 + 0x48, 0x83, 0xc6, 0x01, //0x00000902 addq $1, %rsi + 0x48, 0x39, 0xf2, //0x00000906 cmpq %rsi, %rdx + 0x0f, 0x85, 0xd1, 0xff, 0xff, 0xff, //0x00000909 jne LBB0_87 + 0x4d, 0x89, 0xc6, //0x0000090f movq %r8, %r14 + 0x4c, 0x8b, 0x44, 0x24, 0x10, //0x00000912 movq $16(%rsp), %r8 + //0x00000917 LBB0_91 + 0x4d, 0x29, 0xc6, //0x00000917 subq %r8, %r14 + 0x49, 0x39, 0xfe, //0x0000091a cmpq %rdi, %r14 + 0x0f, 0x82, 0x1f, 0x00, 0x00, 0x00, //0x0000091d jb LBB0_93 + 0xe9, 0xd1, 0x24, 0x00, 0x00, //0x00000923 jmp LBB0_573 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000928 .p2align 4, 0x90 + //0x00000930 LBB0_92 + 0xf7, 0xd6, //0x00000930 notl %esi + 0x44, 0x0f, 0xbc, 0xf6, //0x00000932 bsfl %esi, %r14d + 0x49, 0x29, 0xd6, //0x00000936 subq %rdx, %r14 + 0x49, 0x39, 0xfe, //0x00000939 cmpq %rdi, %r14 + 0x0f, 0x83, 0xb7, 0x24, 0x00, 0x00, //0x0000093c jae LBB0_573 + //0x00000942 LBB0_93 + 0x49, 0x8d, 0x56, 0x01, //0x00000942 leaq $1(%r14), %rdx + 0x49, 0x89, 0x13, //0x00000946 movq %rdx, (%r11) + 0x43, 0x0f, 0xbe, 0x3c, 0x30, //0x00000949 movsbl (%r8,%r14), %edi + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000094e movq $-1, %r15 + 0x85, 0xff, //0x00000955 testl %edi, %edi + 0x0f, 0x84, 0xdb, 0x2b, 0x00, 0x00, //0x00000957 je LBB0_646 + 0x49, 0x8b, 0x31, //0x0000095d movq (%r9), %rsi + 0x48, 0x8d, 0x56, 0xff, //0x00000960 leaq $-1(%rsi), %rdx + 0x41, 0x8b, 0x1c, 0xf1, //0x00000964 movl (%r9,%rsi,8), %ebx + 0x48, 0x83, 0xf9, 0xff, //0x00000968 cmpq $-1, %rcx + 0x4c, 0x0f, 0x45, 0xf1, //0x0000096c cmovneq %rcx, %r14 + 0x83, 0xc3, 0xff, //0x00000970 addl $-1, %ebx + 0x83, 0xfb, 0x05, //0x00000973 cmpl $5, %ebx + 0x0f, 0x87, 0xeb, 0x01, 0x00, 0x00, //0x00000976 ja LBB0_125 + 0x48, 0x8d, 0x05, 0xb9, 0x30, 0x00, 0x00, //0x0000097c leaq $12473(%rip), %rax /* LJTI0_1+0(%rip) */ + 0x48, 0x63, 0x0c, 0x98, //0x00000983 movslq (%rax,%rbx,4), %rcx + 0x48, 0x01, 0xc1, //0x00000987 addq %rax, %rcx + 0xff, 0xe1, //0x0000098a jmpq *%rcx + //0x0000098c LBB0_96 + 0x83, 0xff, 0x2c, //0x0000098c cmpl $44, %edi + 0x0f, 0x84, 0x4f, 0x06, 0x00, 0x00, //0x0000098f je LBB0_195 + 0x83, 0xff, 0x5d, //0x00000995 cmpl $93, %edi + 0x0f, 0x84, 0x32, 0x06, 0x00, 0x00, //0x00000998 je LBB0_98 + 0xe9, 0x8e, 0x2b, 0x00, 0x00, //0x0000099e jmp LBB0_645 + //0x000009a3 LBB0_99 + 0x40, 0x80, 0xff, 0x5d, //0x000009a3 cmpb $93, %dil + 0x0f, 0x84, 0x23, 0x06, 0x00, 0x00, //0x000009a7 je LBB0_98 + 0x49, 0xc7, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x00, //0x000009ad movq $1, (%r9,%rsi,8) + 0x83, 0xff, 0x7b, //0x000009b5 cmpl $123, %edi + 0x0f, 0x86, 0xb5, 0x01, 0x00, 0x00, //0x000009b8 jbe LBB0_101 + 0xe9, 0x6e, 0x2b, 0x00, 0x00, //0x000009be jmp LBB0_645 + //0x000009c3 LBB0_102 + 0x40, 0x80, 0xff, 0x22, //0x000009c3 cmpb $34, %dil + 0x0f, 0x85, 0x64, 0x2b, 0x00, 0x00, //0x000009c7 jne LBB0_645 + 0x49, 0xc7, 0x04, 0xf1, 0x04, 0x00, 0x00, 0x00, //0x000009cd movq $4, (%r9,%rsi,8) + 0x4d, 0x8b, 0x03, //0x000009d5 movq (%r11), %r8 + 0x4d, 0x8b, 0x65, 0x08, //0x000009d8 movq $8(%r13), %r12 + 0x41, 0xf6, 0xc2, 0x20, //0x000009dc testb $32, %r10b + 0x0f, 0x85, 0x7f, 0x07, 0x00, 0x00, //0x000009e0 jne LBB0_204 + 0x4c, 0x89, 0xe3, //0x000009e6 movq %r12, %rbx + 0x4c, 0x29, 0xc3, //0x000009e9 subq %r8, %rbx + 0x0f, 0x84, 0x78, 0x2d, 0x00, 0x00, //0x000009ec je LBB0_680 + 0x48, 0x83, 0xfb, 0x40, //0x000009f2 cmpq $64, %rbx + 0x0f, 0x82, 0x94, 0x18, 0x00, 0x00, //0x000009f6 jb LBB0_433 + 0x4c, 0x89, 0xc6, //0x000009fc movq %r8, %rsi + 0x48, 0xf7, 0xd6, //0x000009ff notq %rsi + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00000a02 movq $-1, (%rsp) + 0x4d, 0x89, 0xc7, //0x00000a0a movq %r8, %r15 + 0x45, 0x31, 0xd2, //0x00000a0d xorl %r10d, %r10d + //0x00000a10 .p2align 4, 0x90 + //0x00000a10 LBB0_107 + 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00000a10 movq $16(%rsp), %rax + 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x38, //0x00000a15 vmovdqu (%rax,%r15), %ymm0 + 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x38, 0x20, //0x00000a1b vmovdqu $32(%rax,%r15), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x00000a22 vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x00000a26 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0x74, 0xd6, //0x00000a2a vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00000a2e vpmovmskb %ymm2, %ecx + 0xc5, 0xfd, 0x74, 0xc7, //0x00000a32 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x00000a36 vpmovmskb %ymm0, %edx + 0xc5, 0xf5, 0x74, 0xc7, //0x00000a3a vpcmpeqb %ymm7, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc0, //0x00000a3e vpmovmskb %ymm0, %eax + 0x48, 0xc1, 0xe1, 0x20, //0x00000a42 shlq $32, %rcx + 0x48, 0x09, 0xcf, //0x00000a46 orq %rcx, %rdi + 0x48, 0xc1, 0xe0, 0x20, //0x00000a49 shlq $32, %rax + 0x48, 0x09, 0xc2, //0x00000a4d orq %rax, %rdx + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x00000a50 jne LBB0_116 + 0x4d, 0x85, 0xd2, //0x00000a56 testq %r10, %r10 + 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x00000a59 jne LBB0_118 + 0x45, 0x31, 0xd2, //0x00000a5f xorl %r10d, %r10d + 0x48, 0x85, 0xff, //0x00000a62 testq %rdi, %rdi + 0x0f, 0x85, 0xa9, 0x00, 0x00, 0x00, //0x00000a65 jne LBB0_120 + //0x00000a6b LBB0_110 + 0x48, 0x83, 0xc3, 0xc0, //0x00000a6b addq $-64, %rbx + 0x48, 0x83, 0xc6, 0xc0, //0x00000a6f addq $-64, %rsi + 0x49, 0x83, 0xc7, 0x40, //0x00000a73 addq $64, %r15 + 0x48, 0x83, 0xfb, 0x3f, //0x00000a77 cmpq $63, %rbx + 0x0f, 0x87, 0x8f, 0xff, 0xff, 0xff, //0x00000a7b ja LBB0_107 + 0xe9, 0xab, 0x14, 0x00, 0x00, //0x00000a81 jmp LBB0_111 + //0x00000a86 LBB0_116 + 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x00000a86 movq %r9, $32(%rsp) + 0x4d, 0x89, 0xe9, //0x00000a8b movq %r13, %r9 + 0x4d, 0x89, 0xdd, //0x00000a8e movq %r11, %r13 + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00000a91 cmpq $-1, (%rsp) + 0x0f, 0x85, 0x1b, 0x00, 0x00, 0x00, //0x00000a96 jne LBB0_119 + 0x48, 0x0f, 0xbc, 0xc2, //0x00000a9c bsfq %rdx, %rax + 0x4c, 0x01, 0xf8, //0x00000aa0 addq %r15, %rax + 0x48, 0x89, 0x04, 0x24, //0x00000aa3 movq %rax, (%rsp) + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00000aa7 jmp LBB0_119 + //0x00000aac LBB0_118 + 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x00000aac movq %r9, $32(%rsp) + 0x4d, 0x89, 0xe9, //0x00000ab1 movq %r13, %r9 + 0x4d, 0x89, 0xdd, //0x00000ab4 movq %r11, %r13 + //0x00000ab7 LBB0_119 + 0x4c, 0x89, 0xd0, //0x00000ab7 movq %r10, %rax + 0x48, 0xf7, 0xd0, //0x00000aba notq %rax + 0x48, 0x21, 0xd0, //0x00000abd andq %rdx, %rax + 0x4c, 0x8d, 0x1c, 0x00, //0x00000ac0 leaq (%rax,%rax), %r11 + 0x4d, 0x09, 0xd3, //0x00000ac4 orq %r10, %r11 + 0x4c, 0x89, 0xd9, //0x00000ac7 movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x00000aca notq %rcx + 0x48, 0x21, 0xd1, //0x00000acd andq %rdx, %rcx + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000ad0 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd1, //0x00000ada andq %rdx, %rcx + 0x45, 0x31, 0xd2, //0x00000add xorl %r10d, %r10d + 0x48, 0x01, 0xc1, //0x00000ae0 addq %rax, %rcx + 0x41, 0x0f, 0x92, 0xc2, //0x00000ae3 setb %r10b + 0x48, 0x01, 0xc9, //0x00000ae7 addq %rcx, %rcx + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000aea movabsq $6148914691236517205, %rax + 0x48, 0x31, 0xc1, //0x00000af4 xorq %rax, %rcx + 0x4c, 0x21, 0xd9, //0x00000af7 andq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x00000afa notq %rcx + 0x48, 0x21, 0xcf, //0x00000afd andq %rcx, %rdi + 0x4d, 0x89, 0xeb, //0x00000b00 movq %r13, %r11 + 0x4d, 0x89, 0xcd, //0x00000b03 movq %r9, %r13 + 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x00000b06 movq $32(%rsp), %r9 + 0x48, 0x85, 0xff, //0x00000b0b testq %rdi, %rdi + 0x0f, 0x84, 0x57, 0xff, 0xff, 0xff, //0x00000b0e je LBB0_110 + //0x00000b14 LBB0_120 + 0x4c, 0x0f, 0xbc, 0xff, //0x00000b14 bsfq %rdi, %r15 + 0x49, 0x29, 0xf7, //0x00000b18 subq %rsi, %r15 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00000b1b movq $24(%rsp), %r10 + 0xe9, 0x3c, 0x09, 0x00, 0x00, //0x00000b20 jmp LBB0_246 + //0x00000b25 LBB0_121 + 0x40, 0x80, 0xff, 0x3a, //0x00000b25 cmpb $58, %dil + 0x0f, 0x85, 0x02, 0x2a, 0x00, 0x00, //0x00000b29 jne LBB0_645 + 0x49, 0xc7, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x00, //0x00000b2f movq $0, (%r9,%rsi,8) + 0xe9, 0x24, 0xfc, 0xff, 0xff, //0x00000b37 jmp LBB0_61 + //0x00000b3c LBB0_123 + 0x83, 0xff, 0x2c, //0x00000b3c cmpl $44, %edi + 0x0f, 0x85, 0x82, 0x04, 0x00, 0x00, //0x00000b3f jne LBB0_124 + 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00000b45 cmpq $4095, %rsi + 0x0f, 0x8f, 0xbc, 0x22, 0x00, 0x00, //0x00000b4c jg LBB0_662 + 0x48, 0x8d, 0x4e, 0x01, //0x00000b52 leaq $1(%rsi), %rcx + 0x49, 0x89, 0x09, //0x00000b56 movq %rcx, (%r9) + 0x49, 0xc7, 0x44, 0xf1, 0x08, 0x03, 0x00, 0x00, 0x00, //0x00000b59 movq $3, $8(%r9,%rsi,8) + 0xe9, 0xf9, 0xfb, 0xff, 0xff, //0x00000b62 jmp LBB0_61 + //0x00000b67 LBB0_125 + 0x49, 0x89, 0x11, //0x00000b67 movq %rdx, (%r9) + 0x83, 0xff, 0x7b, //0x00000b6a cmpl $123, %edi + 0x0f, 0x87, 0xbe, 0x29, 0x00, 0x00, //0x00000b6d ja LBB0_645 + //0x00000b73 LBB0_101 + 0x89, 0xf8, //0x00000b73 movl %edi, %eax + 0x48, 0x8d, 0x0d, 0xd8, 0x2e, 0x00, 0x00, //0x00000b75 leaq $11992(%rip), %rcx /* LJTI0_2+0(%rip) */ + 0x48, 0x63, 0x04, 0x81, //0x00000b7c movslq (%rcx,%rax,4), %rax + 0x48, 0x01, 0xc8, //0x00000b80 addq %rcx, %rax + 0xff, 0xe0, //0x00000b83 jmpq *%rax + //0x00000b85 LBB0_140 + 0x4c, 0x89, 0x6c, 0x24, 0x38, //0x00000b85 movq %r13, $56(%rsp) + 0x4d, 0x8b, 0x6d, 0x08, //0x00000b8a movq $8(%r13), %r13 + 0x49, 0x8b, 0x03, //0x00000b8e movq (%r11), %rax + 0x4c, 0x8d, 0x78, 0xff, //0x00000b91 leaq $-1(%rax), %r15 + 0x4d, 0x29, 0xfd, //0x00000b95 subq %r15, %r13 + 0x0f, 0x84, 0x72, 0x29, 0x00, 0x00, //0x00000b98 je LBB0_641 + 0x48, 0x89, 0x44, 0x24, 0x28, //0x00000b9e movq %rax, $40(%rsp) + 0x4d, 0x8d, 0x24, 0x00, //0x00000ba3 leaq (%r8,%rax), %r12 + 0x49, 0x83, 0xc4, 0xff, //0x00000ba7 addq $-1, %r12 + 0x41, 0x80, 0x3c, 0x24, 0x30, //0x00000bab cmpb $48, (%r12) + 0x0f, 0x85, 0x43, 0x00, 0x00, 0x00, //0x00000bb0 jne LBB0_145 + 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00000bb6 movl $1, %r8d + 0x49, 0x83, 0xfd, 0x01, //0x00000bbc cmpq $1, %r13 + 0x0f, 0x84, 0xae, 0xfb, 0xff, 0xff, //0x00000bc0 je LBB0_59 + 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00000bc6 movq $16(%rsp), %rax + 0x48, 0x8b, 0x4c, 0x24, 0x28, //0x00000bcb movq $40(%rsp), %rcx + 0x8a, 0x0c, 0x08, //0x00000bd0 movb (%rax,%rcx), %cl + 0x80, 0xc1, 0xd2, //0x00000bd3 addb $-46, %cl + 0x80, 0xf9, 0x37, //0x00000bd6 cmpb $55, %cl + 0x0f, 0x87, 0x95, 0xfb, 0xff, 0xff, //0x00000bd9 ja LBB0_59 + 0x0f, 0xb6, 0xc1, //0x00000bdf movzbl %cl, %eax + 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00000be2 movabsq $36028797027352577, %rcx + 0x48, 0x0f, 0xa3, 0xc1, //0x00000bec btq %rax, %rcx + 0x4c, 0x89, 0xf9, //0x00000bf0 movq %r15, %rcx + 0x0f, 0x83, 0x49, 0xfb, 0xff, 0xff, //0x00000bf3 jae LBB0_60 + //0x00000bf9 LBB0_145 + 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00000bf9 movq $-1, %r11 + 0x49, 0x83, 0xfd, 0x20, //0x00000c00 cmpq $32, %r13 + 0x0f, 0x82, 0x29, 0x16, 0x00, 0x00, //0x00000c04 jb LBB0_425 + 0x45, 0x31, 0xc0, //0x00000c0a xorl %r8d, %r8d + 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00000c0d movq $-1, %r10 + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00000c14 movq $-1, (%rsp) + 0x90, 0x90, 0x90, 0x90, //0x00000c1c .p2align 4, 0x90 + //0x00000c20 LBB0_147 + 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x04, //0x00000c20 vmovdqu (%r12,%r8), %ymm0 + 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x00000c26 vpcmpgtb %ymm10, %ymm0, %ymm1 + 0xc5, 0xa5, 0x64, 0xd0, //0x00000c2b vpcmpgtb %ymm0, %ymm11, %ymm2 + 0xc5, 0xed, 0xdb, 0xc9, //0x00000c2f vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0x9d, 0x74, 0xd0, //0x00000c33 vpcmpeqb %ymm0, %ymm12, %ymm2 + 0xc5, 0x95, 0x74, 0xd8, //0x00000c37 vpcmpeqb %ymm0, %ymm13, %ymm3 + 0xc5, 0xe5, 0xeb, 0xd2, //0x00000c3b vpor %ymm2, %ymm3, %ymm2 + 0xc5, 0x8d, 0xdb, 0xd8, //0x00000c3f vpand %ymm0, %ymm14, %ymm3 + 0xc5, 0x85, 0x74, 0xc0, //0x00000c43 vpcmpeqb %ymm0, %ymm15, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x00000c47 vpmovmskb %ymm0, %edx + 0xc5, 0xe5, 0x74, 0xdc, //0x00000c4b vpcmpeqb %ymm4, %ymm3, %ymm3 + 0xc5, 0xfd, 0xd7, 0xf3, //0x00000c4f vpmovmskb %ymm3, %esi + 0xc5, 0xfd, 0xd7, 0xfa, //0x00000c53 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0xeb, 0xc0, //0x00000c57 vpor %ymm0, %ymm1, %ymm0 + 0xc5, 0xe5, 0xeb, 0xca, //0x00000c5b vpor %ymm2, %ymm3, %ymm1 + 0xc5, 0xfd, 0xeb, 0xc1, //0x00000c5f vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc0, //0x00000c63 vpmovmskb %ymm0, %eax + 0x48, 0xf7, 0xd0, //0x00000c67 notq %rax + 0x48, 0x0f, 0xbc, 0xc8, //0x00000c6a bsfq %rax, %rcx + 0x83, 0xf9, 0x20, //0x00000c6e cmpl $32, %ecx + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00000c71 je LBB0_149 + 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00000c77 movl $-1, %eax + 0xd3, 0xe0, //0x00000c7c shll %cl, %eax + 0xf7, 0xd0, //0x00000c7e notl %eax + 0x21, 0xc2, //0x00000c80 andl %eax, %edx + 0x21, 0xc6, //0x00000c82 andl %eax, %esi + 0x21, 0xf8, //0x00000c84 andl %edi, %eax + 0x89, 0xc7, //0x00000c86 movl %eax, %edi + //0x00000c88 LBB0_149 + 0x8d, 0x5a, 0xff, //0x00000c88 leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x00000c8b andl %edx, %ebx + 0x0f, 0x85, 0xf1, 0x10, 0x00, 0x00, //0x00000c8d jne LBB0_389 + 0x8d, 0x5e, 0xff, //0x00000c93 leal $-1(%rsi), %ebx + 0x21, 0xf3, //0x00000c96 andl %esi, %ebx + 0x0f, 0x85, 0xe6, 0x10, 0x00, 0x00, //0x00000c98 jne LBB0_389 + 0x8d, 0x5f, 0xff, //0x00000c9e leal $-1(%rdi), %ebx + 0x21, 0xfb, //0x00000ca1 andl %edi, %ebx + 0x0f, 0x85, 0xdb, 0x10, 0x00, 0x00, //0x00000ca3 jne LBB0_389 + 0x85, 0xd2, //0x00000ca9 testl %edx, %edx + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000cab je LBB0_155 + 0x0f, 0xbc, 0xd2, //0x00000cb1 bsfl %edx, %edx + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00000cb4 cmpq $-1, (%rsp) + 0x0f, 0x85, 0x65, 0x12, 0x00, 0x00, //0x00000cb9 jne LBB0_408 + 0x4c, 0x01, 0xc2, //0x00000cbf addq %r8, %rdx + 0x48, 0x89, 0x14, 0x24, //0x00000cc2 movq %rdx, (%rsp) + //0x00000cc6 LBB0_155 + 0x85, 0xf6, //0x00000cc6 testl %esi, %esi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000cc8 je LBB0_158 + 0x0f, 0xbc, 0xd6, //0x00000cce bsfl %esi, %edx + 0x49, 0x83, 0xfa, 0xff, //0x00000cd1 cmpq $-1, %r10 + 0x0f, 0x85, 0x49, 0x12, 0x00, 0x00, //0x00000cd5 jne LBB0_408 + 0x4c, 0x01, 0xc2, //0x00000cdb addq %r8, %rdx + 0x49, 0x89, 0xd2, //0x00000cde movq %rdx, %r10 + //0x00000ce1 LBB0_158 + 0x85, 0xff, //0x00000ce1 testl %edi, %edi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000ce3 je LBB0_161 + 0x0f, 0xbc, 0xd7, //0x00000ce9 bsfl %edi, %edx + 0x49, 0x83, 0xfb, 0xff, //0x00000cec cmpq $-1, %r11 + 0x0f, 0x85, 0x2e, 0x12, 0x00, 0x00, //0x00000cf0 jne LBB0_408 + 0x4c, 0x01, 0xc2, //0x00000cf6 addq %r8, %rdx + 0x49, 0x89, 0xd3, //0x00000cf9 movq %rdx, %r11 + //0x00000cfc LBB0_161 + 0x83, 0xf9, 0x20, //0x00000cfc cmpl $32, %ecx + 0x0f, 0x85, 0xbf, 0x05, 0x00, 0x00, //0x00000cff jne LBB0_224 + 0x49, 0x83, 0xc5, 0xe0, //0x00000d05 addq $-32, %r13 + 0x49, 0x83, 0xc0, 0x20, //0x00000d09 addq $32, %r8 + 0x49, 0x83, 0xfd, 0x1f, //0x00000d0d cmpq $31, %r13 + 0x0f, 0x87, 0x09, 0xff, 0xff, 0xff, //0x00000d11 ja LBB0_147 + 0xc5, 0xf8, 0x77, //0x00000d17 vzeroupper + 0xc5, 0x7e, 0x6f, 0x3d, 0x9e, 0xf4, 0xff, 0xff, //0x00000d1a vmovdqu $-2914(%rip), %ymm15 /* LCPI0_18+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x16, 0xf3, 0xff, 0xff, //0x00000d22 vmovdqu $-3306(%rip), %ymm14 /* LCPI0_2+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0x6e, 0xf4, 0xff, 0xff, //0x00000d2a vmovdqu $-2962(%rip), %ymm13 /* LCPI0_17+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x46, 0xf4, 0xff, 0xff, //0x00000d32 vmovdqu $-3002(%rip), %ymm12 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0x1e, 0xf4, 0xff, 0xff, //0x00000d3a vmovdqu $-3042(%rip), %ymm11 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x15, 0xf6, 0xf3, 0xff, 0xff, //0x00000d42 vmovdqu $-3082(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00000d4a vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x05, 0xc9, 0xf3, 0xff, 0xff, //0x00000d4f vmovdqu $-3127(%rip), %ymm8 /* LCPI0_13+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x41, 0xf3, 0xff, 0xff, //0x00000d57 vmovdqu $-3263(%rip), %ymm7 /* LCPI0_8+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x19, 0xf3, 0xff, 0xff, //0x00000d5f vmovdqu $-3303(%rip), %ymm6 /* LCPI0_7+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x2d, 0x91, 0xf2, 0xff, 0xff, //0x00000d67 vmovdqu $-3439(%rip), %ymm5 /* LCPI0_0+0(%rip) */ + 0x4d, 0x01, 0xe0, //0x00000d6f addq %r12, %r8 + 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x00000d72 movq %r9, $32(%rsp) + 0x49, 0x83, 0xfd, 0x10, //0x00000d77 cmpq $16, %r13 + 0x48, 0x8b, 0x44, 0x24, 0x28, //0x00000d7b movq $40(%rsp), %rax + 0x0f, 0x82, 0x81, 0x01, 0x00, 0x00, //0x00000d80 jb LBB0_182 + //0x00000d86 LBB0_164 + 0x4c, 0x89, 0xc1, //0x00000d86 movq %r8, %rcx + 0x48, 0x29, 0xc1, //0x00000d89 subq %rax, %rcx + 0x48, 0x2b, 0x4c, 0x24, 0x10, //0x00000d8c subq $16(%rsp), %rcx + 0x48, 0x83, 0xc1, 0x01, //0x00000d91 addq $1, %rcx + 0x48, 0x89, 0x4c, 0x24, 0x30, //0x00000d95 movq %rcx, $48(%rsp) + 0x45, 0x31, 0xc9, //0x00000d9a xorl %r9d, %r9d + 0x90, 0x90, 0x90, //0x00000d9d .p2align 4, 0x90 + //0x00000da0 LBB0_165 + 0x4c, 0x89, 0xdb, //0x00000da0 movq %r11, %rbx + 0x4d, 0x89, 0xd3, //0x00000da3 movq %r10, %r11 + 0x4d, 0x89, 0xe2, //0x00000da6 movq %r12, %r10 + 0xc4, 0x81, 0x7a, 0x6f, 0x04, 0x08, //0x00000da9 vmovdqu (%r8,%r9), %xmm0 + 0xc5, 0xf9, 0x64, 0x0d, 0x89, 0xf4, 0xff, 0xff, //0x00000daf vpcmpgtb $-2935(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ + 0xc5, 0xfa, 0x6f, 0x15, 0x91, 0xf4, 0xff, 0xff, //0x00000db7 vmovdqu $-2927(%rip), %xmm2 /* LCPI0_21+0(%rip) */ + 0xc5, 0xe9, 0x64, 0xd0, //0x00000dbf vpcmpgtb %xmm0, %xmm2, %xmm2 + 0xc5, 0xf1, 0xdb, 0xca, //0x00000dc3 vpand %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0x74, 0x15, 0x91, 0xf4, 0xff, 0xff, //0x00000dc7 vpcmpeqb $-2927(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x1d, 0x99, 0xf4, 0xff, 0xff, //0x00000dcf vpcmpeqb $-2919(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xd2, //0x00000dd7 vpor %xmm2, %xmm3, %xmm2 + 0xc5, 0xf9, 0xdb, 0x1d, 0x2d, 0xf4, 0xff, 0xff, //0x00000ddb vpand $-3027(%rip), %xmm0, %xmm3 /* LCPI0_5+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0x95, 0xf4, 0xff, 0xff, //0x00000de3 vpcmpeqb $-2923(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ + 0xc5, 0xe1, 0x74, 0x1d, 0x9d, 0xf4, 0xff, 0xff, //0x00000deb vpcmpeqb $-2915(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xe0, //0x00000df3 vpor %xmm0, %xmm3, %xmm4 + 0xc5, 0xe9, 0xeb, 0xc9, //0x00000df7 vpor %xmm1, %xmm2, %xmm1 + 0xc5, 0xd9, 0xeb, 0xc9, //0x00000dfb vpor %xmm1, %xmm4, %xmm1 + 0xc5, 0x79, 0xd7, 0xe0, //0x00000dff vpmovmskb %xmm0, %r12d + 0xc5, 0xf9, 0xd7, 0xd3, //0x00000e03 vpmovmskb %xmm3, %edx + 0xc5, 0xf9, 0xd7, 0xf2, //0x00000e07 vpmovmskb %xmm2, %esi + 0xc5, 0xf9, 0xd7, 0xc1, //0x00000e0b vpmovmskb %xmm1, %eax + 0xf7, 0xd0, //0x00000e0f notl %eax + 0x0f, 0xbc, 0xc8, //0x00000e11 bsfl %eax, %ecx + 0x83, 0xf9, 0x10, //0x00000e14 cmpl $16, %ecx + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00000e17 je LBB0_167 + 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00000e1d movl $-1, %eax + 0xd3, 0xe0, //0x00000e22 shll %cl, %eax + 0xf7, 0xd0, //0x00000e24 notl %eax + 0x41, 0x21, 0xc4, //0x00000e26 andl %eax, %r12d + 0x21, 0xc2, //0x00000e29 andl %eax, %edx + 0x21, 0xf0, //0x00000e2b andl %esi, %eax + 0x89, 0xc6, //0x00000e2d movl %eax, %esi + //0x00000e2f LBB0_167 + 0xc5, 0xfe, 0x6f, 0x25, 0xa9, 0xf3, 0xff, 0xff, //0x00000e2f vmovdqu $-3159(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x41, 0x8d, 0x7c, 0x24, 0xff, //0x00000e37 leal $-1(%r12), %edi + 0x44, 0x21, 0xe7, //0x00000e3c andl %r12d, %edi + 0x0f, 0x85, 0xaa, 0x11, 0x00, 0x00, //0x00000e3f jne LBB0_411 + 0x8d, 0x7a, 0xff, //0x00000e45 leal $-1(%rdx), %edi + 0x21, 0xd7, //0x00000e48 andl %edx, %edi + 0x0f, 0x85, 0x9f, 0x11, 0x00, 0x00, //0x00000e4a jne LBB0_411 + 0x8d, 0x7e, 0xff, //0x00000e50 leal $-1(%rsi), %edi + 0x21, 0xf7, //0x00000e53 andl %esi, %edi + 0x0f, 0x85, 0x94, 0x11, 0x00, 0x00, //0x00000e55 jne LBB0_411 + 0x45, 0x85, 0xe4, //0x00000e5b testl %r12d, %r12d + 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x00000e5e je LBB0_173 + 0x41, 0x0f, 0xbc, 0xfc, //0x00000e64 bsfl %r12d, %edi + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00000e68 cmpq $-1, (%rsp) + 0x0f, 0x85, 0x94, 0x12, 0x00, 0x00, //0x00000e6d jne LBB0_419 + 0x48, 0x8b, 0x44, 0x24, 0x30, //0x00000e73 movq $48(%rsp), %rax + 0x4c, 0x01, 0xc8, //0x00000e78 addq %r9, %rax + 0x48, 0x01, 0xc7, //0x00000e7b addq %rax, %rdi + 0x48, 0x89, 0x3c, 0x24, //0x00000e7e movq %rdi, (%rsp) + //0x00000e82 LBB0_173 + 0x85, 0xd2, //0x00000e82 testl %edx, %edx + 0x4d, 0x89, 0xd4, //0x00000e84 movq %r10, %r12 + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00000e87 je LBB0_176 + 0x0f, 0xbc, 0xd2, //0x00000e8d bsfl %edx, %edx + 0x49, 0x83, 0xfb, 0xff, //0x00000e90 cmpq $-1, %r11 + 0x0f, 0x85, 0x31, 0x12, 0x00, 0x00, //0x00000e94 jne LBB0_415 + 0x48, 0x8b, 0x44, 0x24, 0x30, //0x00000e9a movq $48(%rsp), %rax + 0x4c, 0x01, 0xc8, //0x00000e9f addq %r9, %rax + 0x48, 0x01, 0xc2, //0x00000ea2 addq %rax, %rdx + 0x49, 0x89, 0xd2, //0x00000ea5 movq %rdx, %r10 + 0x85, 0xf6, //0x00000ea8 testl %esi, %esi + 0x49, 0x89, 0xdb, //0x00000eaa movq %rbx, %r11 + 0x0f, 0x85, 0x1b, 0x00, 0x00, 0x00, //0x00000ead jne LBB0_177 + 0xe9, 0x31, 0x00, 0x00, 0x00, //0x00000eb3 jmp LBB0_179 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000eb8 .p2align 4, 0x90 + //0x00000ec0 LBB0_176 + 0x4d, 0x89, 0xda, //0x00000ec0 movq %r11, %r10 + 0x85, 0xf6, //0x00000ec3 testl %esi, %esi + 0x49, 0x89, 0xdb, //0x00000ec5 movq %rbx, %r11 + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x00000ec8 je LBB0_179 + //0x00000ece LBB0_177 + 0x0f, 0xbc, 0xd6, //0x00000ece bsfl %esi, %edx + 0x49, 0x83, 0xfb, 0xff, //0x00000ed1 cmpq $-1, %r11 + 0x0f, 0x85, 0xf0, 0x11, 0x00, 0x00, //0x00000ed5 jne LBB0_415 + 0x48, 0x8b, 0x44, 0x24, 0x30, //0x00000edb movq $48(%rsp), %rax + 0x4c, 0x01, 0xc8, //0x00000ee0 addq %r9, %rax + 0x48, 0x01, 0xc2, //0x00000ee3 addq %rax, %rdx + 0x49, 0x89, 0xd3, //0x00000ee6 movq %rdx, %r11 + //0x00000ee9 LBB0_179 + 0x83, 0xf9, 0x10, //0x00000ee9 cmpl $16, %ecx + 0x0f, 0x85, 0x89, 0x05, 0x00, 0x00, //0x00000eec jne LBB0_249 + 0x49, 0x83, 0xc5, 0xf0, //0x00000ef2 addq $-16, %r13 + 0x49, 0x83, 0xc1, 0x10, //0x00000ef6 addq $16, %r9 + 0x49, 0x83, 0xfd, 0x0f, //0x00000efa cmpq $15, %r13 + 0x0f, 0x87, 0x9c, 0xfe, 0xff, 0xff, //0x00000efe ja LBB0_165 + 0x4d, 0x01, 0xc8, //0x00000f04 addq %r9, %r8 + //0x00000f07 LBB0_182 + 0x4d, 0x85, 0xed, //0x00000f07 testq %r13, %r13 + 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x00000f0a movq $32(%rsp), %r9 + 0xc5, 0xfe, 0x6f, 0x25, 0xc9, 0xf2, 0xff, 0xff, //0x00000f0f vmovdqu $-3383(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x48, 0x8b, 0x44, 0x24, 0x28, //0x00000f17 movq $40(%rsp), %rax + 0x0f, 0x84, 0x82, 0x05, 0x00, 0x00, //0x00000f1c je LBB0_251 + 0x4b, 0x8d, 0x3c, 0x28, //0x00000f22 leaq (%r8,%r13), %rdi + 0x4c, 0x89, 0xc6, //0x00000f26 movq %r8, %rsi + 0x48, 0x29, 0xc6, //0x00000f29 subq %rax, %rsi + 0x48, 0x2b, 0x74, 0x24, 0x10, //0x00000f2c subq $16(%rsp), %rsi + 0x48, 0x83, 0xc6, 0x01, //0x00000f31 addq $1, %rsi + 0x31, 0xc9, //0x00000f35 xorl %ecx, %ecx + 0xe9, 0x21, 0x00, 0x00, 0x00, //0x00000f37 jmp LBB0_187 + //0x00000f3c LBB0_184 + 0x49, 0x83, 0xfb, 0xff, //0x00000f3c cmpq $-1, %r11 + 0x0f, 0x85, 0xb1, 0x10, 0x00, 0x00, //0x00000f40 jne LBB0_412 + 0x4c, 0x8d, 0x1c, 0x0e, //0x00000f46 leaq (%rsi,%rcx), %r11 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000f4a .p2align 4, 0x90 + //0x00000f50 LBB0_186 + 0x48, 0x83, 0xc1, 0x01, //0x00000f50 addq $1, %rcx + 0x49, 0x39, 0xcd, //0x00000f54 cmpq %rcx, %r13 + 0x0f, 0x84, 0xe3, 0x0d, 0x00, 0x00, //0x00000f57 je LBB0_381 + //0x00000f5d LBB0_187 + 0x41, 0x0f, 0xbe, 0x14, 0x08, //0x00000f5d movsbl (%r8,%rcx), %edx + 0x8d, 0x42, 0xd0, //0x00000f62 leal $-48(%rdx), %eax + 0x83, 0xf8, 0x0a, //0x00000f65 cmpl $10, %eax + 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x00000f68 jb LBB0_186 + 0x8d, 0x5a, 0xd5, //0x00000f6e leal $-43(%rdx), %ebx + 0x83, 0xfb, 0x1a, //0x00000f71 cmpl $26, %ebx + 0x0f, 0x87, 0x28, 0x00, 0x00, 0x00, //0x00000f74 ja LBB0_192 + 0x48, 0x8d, 0x15, 0x2f, 0x2d, 0x00, 0x00, //0x00000f7a leaq $11567(%rip), %rdx /* LJTI0_4+0(%rip) */ + 0x48, 0x63, 0x04, 0x9a, //0x00000f81 movslq (%rdx,%rbx,4), %rax + 0x48, 0x01, 0xd0, //0x00000f85 addq %rdx, %rax + 0xff, 0xe0, //0x00000f88 jmpq *%rax + //0x00000f8a LBB0_190 + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00000f8a cmpq $-1, (%rsp) + 0x0f, 0x85, 0x62, 0x10, 0x00, 0x00, //0x00000f8f jne LBB0_412 + 0x48, 0x8d, 0x04, 0x0e, //0x00000f95 leaq (%rsi,%rcx), %rax + 0x48, 0x89, 0x04, 0x24, //0x00000f99 movq %rax, (%rsp) + 0xe9, 0xae, 0xff, 0xff, 0xff, //0x00000f9d jmp LBB0_186 + //0x00000fa2 LBB0_192 + 0x83, 0xfa, 0x65, //0x00000fa2 cmpl $101, %edx + 0x0f, 0x85, 0xf6, 0x04, 0x00, 0x00, //0x00000fa5 jne LBB0_250 + //0x00000fab LBB0_193 + 0x49, 0x83, 0xfa, 0xff, //0x00000fab cmpq $-1, %r10 + 0x0f, 0x85, 0x42, 0x10, 0x00, 0x00, //0x00000faf jne LBB0_412 + 0x4c, 0x8d, 0x14, 0x0e, //0x00000fb5 leaq (%rsi,%rcx), %r10 + 0xe9, 0x92, 0xff, 0xff, 0xff, //0x00000fb9 jmp LBB0_186 + //0x00000fbe LBB0_126 + 0x83, 0xff, 0x22, //0x00000fbe cmpl $34, %edi + 0x0f, 0x84, 0x3f, 0x00, 0x00, 0x00, //0x00000fc1 je LBB0_127 + //0x00000fc7 LBB0_124 + 0x83, 0xff, 0x7d, //0x00000fc7 cmpl $125, %edi + 0x0f, 0x85, 0x61, 0x25, 0x00, 0x00, //0x00000fca jne LBB0_645 + //0x00000fd0 LBB0_98 + 0x49, 0x89, 0x11, //0x00000fd0 movq %rdx, (%r9) + 0x4d, 0x89, 0xf7, //0x00000fd3 movq %r14, %r15 + 0x48, 0x85, 0xd2, //0x00000fd6 testq %rdx, %rdx + 0x0f, 0x85, 0xa1, 0xf7, 0xff, 0xff, //0x00000fd9 jne LBB0_63 + 0xe9, 0x54, 0x25, 0x00, 0x00, //0x00000fdf jmp LBB0_646 + //0x00000fe4 LBB0_195 + 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00000fe4 cmpq $4095, %rsi + 0x0f, 0x8f, 0x1d, 0x1e, 0x00, 0x00, //0x00000feb jg LBB0_662 + 0x48, 0x8d, 0x4e, 0x01, //0x00000ff1 leaq $1(%rsi), %rcx + 0x49, 0x89, 0x09, //0x00000ff5 movq %rcx, (%r9) + 0x49, 0xc7, 0x44, 0xf1, 0x08, 0x00, 0x00, 0x00, 0x00, //0x00000ff8 movq $0, $8(%r9,%rsi,8) + 0xe9, 0x5a, 0xf7, 0xff, 0xff, //0x00001001 jmp LBB0_61 + //0x00001006 LBB0_127 + 0x49, 0xc7, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x00, //0x00001006 movq $2, (%r9,%rsi,8) + 0x4d, 0x8b, 0x03, //0x0000100e movq (%r11), %r8 + 0x4d, 0x8b, 0x65, 0x08, //0x00001011 movq $8(%r13), %r12 + 0x4c, 0x89, 0xe3, //0x00001015 movq %r12, %rbx + 0x41, 0xf6, 0xc2, 0x20, //0x00001018 testb $32, %r10b + 0x0f, 0x85, 0xc7, 0x02, 0x00, 0x00, //0x0000101c jne LBB0_225 + 0x4c, 0x29, 0xc3, //0x00001022 subq %r8, %rbx + 0x0f, 0x84, 0x3f, 0x27, 0x00, 0x00, //0x00001025 je LBB0_680 + 0x48, 0x83, 0xfb, 0x40, //0x0000102b cmpq $64, %rbx + 0x0f, 0x82, 0xdc, 0x12, 0x00, 0x00, //0x0000102f jb LBB0_440 + 0x4c, 0x89, 0xc6, //0x00001035 movq %r8, %rsi + 0x48, 0xf7, 0xd6, //0x00001038 notq %rsi + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x0000103b movq $-1, (%rsp) + 0x4d, 0x89, 0xc7, //0x00001043 movq %r8, %r15 + 0x45, 0x31, 0xd2, //0x00001046 xorl %r10d, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001049 .p2align 4, 0x90 + //0x00001050 LBB0_131 + 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00001050 movq $16(%rsp), %rax + 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x38, //0x00001055 vmovdqu (%rax,%r15), %ymm0 + 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x38, 0x20, //0x0000105b vmovdqu $32(%rax,%r15), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x00001062 vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x00001066 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0x74, 0xd6, //0x0000106a vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xc2, //0x0000106e vpmovmskb %ymm2, %eax + 0xc5, 0xfd, 0x74, 0xc7, //0x00001072 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x00001076 vpmovmskb %ymm0, %edx + 0xc5, 0xf5, 0x74, 0xc7, //0x0000107a vpcmpeqb %ymm7, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x0000107e vpmovmskb %ymm0, %ecx + 0x48, 0xc1, 0xe0, 0x20, //0x00001082 shlq $32, %rax + 0x48, 0x09, 0xc7, //0x00001086 orq %rax, %rdi + 0x48, 0xc1, 0xe1, 0x20, //0x00001089 shlq $32, %rcx + 0x48, 0x09, 0xca, //0x0000108d orq %rcx, %rdx + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x00001090 jne LBB0_199 + 0x4d, 0x85, 0xd2, //0x00001096 testq %r10, %r10 + 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x00001099 jne LBB0_201 + 0x45, 0x31, 0xd2, //0x0000109f xorl %r10d, %r10d + 0x48, 0x85, 0xff, //0x000010a2 testq %rdi, %rdi + 0x0f, 0x85, 0xa9, 0x00, 0x00, 0x00, //0x000010a5 jne LBB0_203 + //0x000010ab LBB0_134 + 0x48, 0x83, 0xc3, 0xc0, //0x000010ab addq $-64, %rbx + 0x48, 0x83, 0xc6, 0xc0, //0x000010af addq $-64, %rsi + 0x49, 0x83, 0xc7, 0x40, //0x000010b3 addq $64, %r15 + 0x48, 0x83, 0xfb, 0x3f, //0x000010b7 cmpq $63, %rbx + 0x0f, 0x87, 0x8f, 0xff, 0xff, 0xff, //0x000010bb ja LBB0_131 + 0xe9, 0x60, 0x0f, 0x00, 0x00, //0x000010c1 jmp LBB0_135 + //0x000010c6 LBB0_199 + 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x000010c6 movq %r9, $32(%rsp) + 0x4d, 0x89, 0xe9, //0x000010cb movq %r13, %r9 + 0x4d, 0x89, 0xdd, //0x000010ce movq %r11, %r13 + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x000010d1 cmpq $-1, (%rsp) + 0x0f, 0x85, 0x1b, 0x00, 0x00, 0x00, //0x000010d6 jne LBB0_202 + 0x48, 0x0f, 0xbc, 0xc2, //0x000010dc bsfq %rdx, %rax + 0x4c, 0x01, 0xf8, //0x000010e0 addq %r15, %rax + 0x48, 0x89, 0x04, 0x24, //0x000010e3 movq %rax, (%rsp) + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x000010e7 jmp LBB0_202 + //0x000010ec LBB0_201 + 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x000010ec movq %r9, $32(%rsp) + 0x4d, 0x89, 0xe9, //0x000010f1 movq %r13, %r9 + 0x4d, 0x89, 0xdd, //0x000010f4 movq %r11, %r13 + //0x000010f7 LBB0_202 + 0x4c, 0x89, 0xd0, //0x000010f7 movq %r10, %rax + 0x48, 0xf7, 0xd0, //0x000010fa notq %rax + 0x48, 0x21, 0xd0, //0x000010fd andq %rdx, %rax + 0x4c, 0x8d, 0x1c, 0x00, //0x00001100 leaq (%rax,%rax), %r11 + 0x4d, 0x09, 0xd3, //0x00001104 orq %r10, %r11 + 0x4c, 0x89, 0xd9, //0x00001107 movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x0000110a notq %rcx + 0x48, 0x21, 0xd1, //0x0000110d andq %rdx, %rcx + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001110 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd1, //0x0000111a andq %rdx, %rcx + 0x45, 0x31, 0xd2, //0x0000111d xorl %r10d, %r10d + 0x48, 0x01, 0xc1, //0x00001120 addq %rax, %rcx + 0x41, 0x0f, 0x92, 0xc2, //0x00001123 setb %r10b + 0x48, 0x01, 0xc9, //0x00001127 addq %rcx, %rcx + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000112a movabsq $6148914691236517205, %rax + 0x48, 0x31, 0xc1, //0x00001134 xorq %rax, %rcx + 0x4c, 0x21, 0xd9, //0x00001137 andq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x0000113a notq %rcx + 0x48, 0x21, 0xcf, //0x0000113d andq %rcx, %rdi + 0x4d, 0x89, 0xeb, //0x00001140 movq %r13, %r11 + 0x4d, 0x89, 0xcd, //0x00001143 movq %r9, %r13 + 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x00001146 movq $32(%rsp), %r9 + 0x48, 0x85, 0xff, //0x0000114b testq %rdi, %rdi + 0x0f, 0x84, 0x57, 0xff, 0xff, 0xff, //0x0000114e je LBB0_134 + //0x00001154 LBB0_203 + 0x4c, 0x0f, 0xbc, 0xff, //0x00001154 bsfq %rdi, %r15 + 0x49, 0x29, 0xf7, //0x00001158 subq %rsi, %r15 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x0000115b movq $24(%rsp), %r10 + 0xe9, 0x42, 0x04, 0x00, 0x00, //0x00001160 jmp LBB0_265 + //0x00001165 LBB0_204 + 0x4c, 0x89, 0xc8, //0x00001165 movq %r9, %rax + 0x4d, 0x89, 0xe9, //0x00001168 movq %r13, %r9 + 0x4d, 0x89, 0xe5, //0x0000116b movq %r12, %r13 + 0x4d, 0x29, 0xc5, //0x0000116e subq %r8, %r13 + 0x0f, 0x84, 0xf3, 0x25, 0x00, 0x00, //0x00001171 je LBB0_680 + 0x49, 0x83, 0xfd, 0x40, //0x00001177 cmpq $64, %r13 + 0x0f, 0x82, 0x32, 0x11, 0x00, 0x00, //0x0000117b jb LBB0_434 + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00001181 movq $-1, (%rsp) + 0x4d, 0x89, 0xc7, //0x00001189 movq %r8, %r15 + 0x45, 0x31, 0xdb, //0x0000118c xorl %r11d, %r11d + 0x90, //0x0000118f .p2align 4, 0x90 + //0x00001190 LBB0_207 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00001190 movq $16(%rsp), %rcx + 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x39, //0x00001195 vmovdqu (%rcx,%r15), %ymm0 + 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x39, 0x20, //0x0000119b vmovdqu $32(%rcx,%r15), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x000011a2 vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x000011a6 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0x74, 0xd6, //0x000011aa vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x000011ae vpmovmskb %ymm2, %ecx + 0xc5, 0xfd, 0x74, 0xd7, //0x000011b2 vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x000011b6 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd7, //0x000011ba vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x000011be vpmovmskb %ymm2, %ebx + 0xc5, 0xbd, 0x64, 0xd1, //0x000011c2 vpcmpgtb %ymm1, %ymm8, %ymm2 + 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x000011c6 vpcmpgtb %ymm9, %ymm1, %ymm1 + 0xc5, 0xed, 0xdb, 0xc9, //0x000011cb vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf1, //0x000011cf vpmovmskb %ymm1, %esi + 0x48, 0xc1, 0xe1, 0x20, //0x000011d3 shlq $32, %rcx + 0x48, 0x09, 0xcf, //0x000011d7 orq %rcx, %rdi + 0x48, 0xc1, 0xe3, 0x20, //0x000011da shlq $32, %rbx + 0x48, 0xc1, 0xe6, 0x20, //0x000011de shlq $32, %rsi + 0x48, 0x09, 0xda, //0x000011e2 orq %rbx, %rdx + 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x000011e5 jne LBB0_218 + 0x4d, 0x85, 0xdb, //0x000011eb testq %r11, %r11 + 0x0f, 0x85, 0x56, 0x00, 0x00, 0x00, //0x000011ee jne LBB0_220 + 0x45, 0x31, 0xdb, //0x000011f4 xorl %r11d, %r11d + //0x000011f7 LBB0_210 + 0xc5, 0xbd, 0x64, 0xc8, //0x000011f7 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x000011fb vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00001200 vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x00001204 vpmovmskb %ymm0, %ecx + 0x48, 0x09, 0xce, //0x00001208 orq %rcx, %rsi + 0x48, 0x85, 0xff, //0x0000120b testq %rdi, %rdi + 0x0f, 0x85, 0x89, 0x00, 0x00, 0x00, //0x0000120e jne LBB0_221 + 0x48, 0x85, 0xf6, //0x00001214 testq %rsi, %rsi + 0x0f, 0x85, 0x7a, 0x23, 0x00, 0x00, //0x00001217 jne LBB0_651 + 0x49, 0x83, 0xc5, 0xc0, //0x0000121d addq $-64, %r13 + 0x49, 0x83, 0xc7, 0x40, //0x00001221 addq $64, %r15 + 0x49, 0x83, 0xfd, 0x3f, //0x00001225 cmpq $63, %r13 + 0x0f, 0x87, 0x61, 0xff, 0xff, 0xff, //0x00001229 ja LBB0_207 + 0xe9, 0x58, 0x0d, 0x00, 0x00, //0x0000122f jmp LBB0_213 + //0x00001234 LBB0_218 + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00001234 cmpq $-1, (%rsp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00001239 jne LBB0_220 + 0x48, 0x0f, 0xbc, 0xca, //0x0000123f bsfq %rdx, %rcx + 0x4c, 0x01, 0xf9, //0x00001243 addq %r15, %rcx + 0x48, 0x89, 0x0c, 0x24, //0x00001246 movq %rcx, (%rsp) + //0x0000124a LBB0_220 + 0x4c, 0x89, 0xd9, //0x0000124a movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x0000124d notq %rcx + 0x48, 0x21, 0xd1, //0x00001250 andq %rdx, %rcx + 0x4c, 0x8d, 0x14, 0x09, //0x00001253 leaq (%rcx,%rcx), %r10 + 0x4d, 0x09, 0xda, //0x00001257 orq %r11, %r10 + 0x4c, 0x89, 0xd3, //0x0000125a movq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x0000125d notq %rbx + 0x48, 0x21, 0xd3, //0x00001260 andq %rdx, %rbx + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001263 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd3, //0x0000126d andq %rdx, %rbx + 0x45, 0x31, 0xdb, //0x00001270 xorl %r11d, %r11d + 0x48, 0x01, 0xcb, //0x00001273 addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc3, //0x00001276 setb %r11b + 0x48, 0x01, 0xdb, //0x0000127a addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000127d movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x00001287 xorq %rcx, %rbx + 0x4c, 0x21, 0xd3, //0x0000128a andq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x0000128d notq %rbx + 0x48, 0x21, 0xdf, //0x00001290 andq %rbx, %rdi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00001293 movq $24(%rsp), %r10 + 0xe9, 0x5a, 0xff, 0xff, 0xff, //0x00001298 jmp LBB0_210 + //0x0000129d LBB0_221 + 0x48, 0x0f, 0xbc, 0xcf, //0x0000129d bsfq %rdi, %rcx + 0x48, 0x85, 0xf6, //0x000012a1 testq %rsi, %rsi + 0x0f, 0x84, 0x97, 0x01, 0x00, 0x00, //0x000012a4 je LBB0_244 + 0x48, 0x0f, 0xbc, 0xd6, //0x000012aa bsfq %rsi, %rdx + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x000012ae movq $8(%rsp), %r11 + 0x4d, 0x89, 0xcd, //0x000012b3 movq %r9, %r13 + 0x48, 0x39, 0xca, //0x000012b6 cmpq %rcx, %rdx + 0x0f, 0x83, 0x98, 0x01, 0x00, 0x00, //0x000012b9 jae LBB0_245 + 0xe9, 0xc1, 0x24, 0x00, 0x00, //0x000012bf jmp LBB0_223 + //0x000012c4 LBB0_224 + 0x4c, 0x01, 0xc1, //0x000012c4 addq %r8, %rcx + 0x4c, 0x01, 0xe1, //0x000012c7 addq %r12, %rcx + 0xc5, 0xf8, 0x77, //0x000012ca vzeroupper + 0x49, 0x89, 0xc8, //0x000012cd movq %rcx, %r8 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000012d0 movq $-1, %rcx + 0x48, 0x8b, 0x14, 0x24, //0x000012d7 movq (%rsp), %rdx + 0x48, 0x85, 0xd2, //0x000012db testq %rdx, %rdx + 0x0f, 0x85, 0xd4, 0x01, 0x00, 0x00, //0x000012de jne LBB0_252 + 0xe9, 0x36, 0x22, 0x00, 0x00, //0x000012e4 jmp LBB0_644 + //0x000012e9 LBB0_225 + 0x4c, 0x29, 0xc3, //0x000012e9 subq %r8, %rbx + 0x0f, 0x84, 0x78, 0x24, 0x00, 0x00, //0x000012ec je LBB0_680 + 0x48, 0x83, 0xfb, 0x40, //0x000012f2 cmpq $64, %rbx + 0x0f, 0x82, 0x38, 0x10, 0x00, 0x00, //0x000012f6 jb LBB0_441 + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x000012fc movq $-1, (%rsp) + 0x4d, 0x89, 0xc7, //0x00001304 movq %r8, %r15 + 0x45, 0x31, 0xdb, //0x00001307 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000130a .p2align 4, 0x90 + //0x00001310 LBB0_228 + 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00001310 movq $16(%rsp), %rax + 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x38, //0x00001315 vmovdqu (%rax,%r15), %ymm0 + 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x38, 0x20, //0x0000131b vmovdqu $32(%rax,%r15), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x00001322 vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x00001326 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0x74, 0xd6, //0x0000132a vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xc2, //0x0000132e vpmovmskb %ymm2, %eax + 0xc5, 0xfd, 0x74, 0xd7, //0x00001332 vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00001336 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd7, //0x0000133a vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x0000133e vpmovmskb %ymm2, %ecx + 0xc5, 0xbd, 0x64, 0xd1, //0x00001342 vpcmpgtb %ymm1, %ymm8, %ymm2 + 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00001346 vpcmpgtb %ymm9, %ymm1, %ymm1 + 0xc5, 0xed, 0xdb, 0xc9, //0x0000134b vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf1, //0x0000134f vpmovmskb %ymm1, %esi + 0x48, 0xc1, 0xe0, 0x20, //0x00001353 shlq $32, %rax + 0x48, 0x09, 0xc7, //0x00001357 orq %rax, %rdi + 0x48, 0xc1, 0xe1, 0x20, //0x0000135a shlq $32, %rcx + 0x48, 0xc1, 0xe6, 0x20, //0x0000135e shlq $32, %rsi + 0x48, 0x09, 0xca, //0x00001362 orq %rcx, %rdx + 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00001365 jne LBB0_239 + 0x4d, 0x85, 0xdb, //0x0000136b testq %r11, %r11 + 0x0f, 0x85, 0x56, 0x00, 0x00, 0x00, //0x0000136e jne LBB0_241 + 0x45, 0x31, 0xdb, //0x00001374 xorl %r11d, %r11d + //0x00001377 LBB0_231 + 0xc5, 0xbd, 0x64, 0xc8, //0x00001377 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x0000137b vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00001380 vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc0, //0x00001384 vpmovmskb %ymm0, %eax + 0x48, 0x09, 0xc6, //0x00001388 orq %rax, %rsi + 0x48, 0x85, 0xff, //0x0000138b testq %rdi, %rdi + 0x0f, 0x85, 0x89, 0x00, 0x00, 0x00, //0x0000138e jne LBB0_242 + 0x48, 0x85, 0xf6, //0x00001394 testq %rsi, %rsi + 0x0f, 0x85, 0xfa, 0x21, 0x00, 0x00, //0x00001397 jne LBB0_651 + 0x48, 0x83, 0xc3, 0xc0, //0x0000139d addq $-64, %rbx + 0x49, 0x83, 0xc7, 0x40, //0x000013a1 addq $64, %r15 + 0x48, 0x83, 0xfb, 0x3f, //0x000013a5 cmpq $63, %rbx + 0x0f, 0x87, 0x61, 0xff, 0xff, 0xff, //0x000013a9 ja LBB0_228 + 0xe9, 0xcd, 0x0c, 0x00, 0x00, //0x000013af jmp LBB0_234 + //0x000013b4 LBB0_239 + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x000013b4 cmpq $-1, (%rsp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000013b9 jne LBB0_241 + 0x48, 0x0f, 0xbc, 0xc2, //0x000013bf bsfq %rdx, %rax + 0x4c, 0x01, 0xf8, //0x000013c3 addq %r15, %rax + 0x48, 0x89, 0x04, 0x24, //0x000013c6 movq %rax, (%rsp) + //0x000013ca LBB0_241 + 0x4c, 0x89, 0xd8, //0x000013ca movq %r11, %rax + 0x48, 0xf7, 0xd0, //0x000013cd notq %rax + 0x48, 0x21, 0xd0, //0x000013d0 andq %rdx, %rax + 0x4c, 0x8d, 0x14, 0x00, //0x000013d3 leaq (%rax,%rax), %r10 + 0x4d, 0x09, 0xda, //0x000013d7 orq %r11, %r10 + 0x4c, 0x89, 0xd1, //0x000013da movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x000013dd notq %rcx + 0x48, 0x21, 0xd1, //0x000013e0 andq %rdx, %rcx + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000013e3 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd1, //0x000013ed andq %rdx, %rcx + 0x45, 0x31, 0xdb, //0x000013f0 xorl %r11d, %r11d + 0x48, 0x01, 0xc1, //0x000013f3 addq %rax, %rcx + 0x41, 0x0f, 0x92, 0xc3, //0x000013f6 setb %r11b + 0x48, 0x01, 0xc9, //0x000013fa addq %rcx, %rcx + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000013fd movabsq $6148914691236517205, %rax + 0x48, 0x31, 0xc1, //0x00001407 xorq %rax, %rcx + 0x4c, 0x21, 0xd1, //0x0000140a andq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x0000140d notq %rcx + 0x48, 0x21, 0xcf, //0x00001410 andq %rcx, %rdi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00001413 movq $24(%rsp), %r10 + 0xe9, 0x5a, 0xff, 0xff, 0xff, //0x00001418 jmp LBB0_231 + //0x0000141d LBB0_242 + 0x48, 0x0f, 0xbc, 0xcf, //0x0000141d bsfq %rdi, %rcx + 0x48, 0x85, 0xf6, //0x00001421 testq %rsi, %rsi + 0x0f, 0x84, 0x63, 0x01, 0x00, 0x00, //0x00001424 je LBB0_263 + 0x48, 0x0f, 0xbc, 0xd6, //0x0000142a bsfq %rsi, %rdx + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x0000142e movq $8(%rsp), %r11 + 0x48, 0x39, 0xca, //0x00001433 cmpq %rcx, %rdx + 0x0f, 0x83, 0x64, 0x01, 0x00, 0x00, //0x00001436 jae LBB0_264 + 0xe9, 0x44, 0x23, 0x00, 0x00, //0x0000143c jmp LBB0_223 + //0x00001441 LBB0_244 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001441 movl $64, %edx + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00001446 movq $8(%rsp), %r11 + 0x4d, 0x89, 0xcd, //0x0000144b movq %r9, %r13 + 0x48, 0x39, 0xca, //0x0000144e cmpq %rcx, %rdx + 0x0f, 0x82, 0x2e, 0x23, 0x00, 0x00, //0x00001451 jb LBB0_223 + //0x00001457 LBB0_245 + 0x49, 0x89, 0xc1, //0x00001457 movq %rax, %r9 + 0x49, 0x01, 0xcf, //0x0000145a addq %rcx, %r15 + 0x49, 0x83, 0xc7, 0x01, //0x0000145d addq $1, %r15 + //0x00001461 LBB0_246 + 0x4d, 0x85, 0xff, //0x00001461 testq %r15, %r15 + 0x0f, 0x88, 0xb0, 0x19, 0x00, 0x00, //0x00001464 js LBB0_386 + //0x0000146a LBB0_247 + 0x4d, 0x89, 0x3b, //0x0000146a movq %r15, (%r11) + 0x4d, 0x85, 0xc0, //0x0000146d testq %r8, %r8 + 0x0f, 0x8f, 0xea, 0xf2, 0xff, 0xff, //0x00001470 jg LBB0_61 + 0xe9, 0xbf, 0x19, 0x00, 0x00, //0x00001476 jmp LBB0_248 + //0x0000147b LBB0_249 + 0x89, 0xc8, //0x0000147b movl %ecx, %eax + 0x49, 0x01, 0xc0, //0x0000147d addq %rax, %r8 + 0x4d, 0x01, 0xc8, //0x00001480 addq %r9, %r8 + 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x00001483 movq $32(%rsp), %r9 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00001488 movq $-1, %rcx + 0x48, 0x8b, 0x14, 0x24, //0x0000148f movq (%rsp), %rdx + 0x48, 0x85, 0xd2, //0x00001493 testq %rdx, %rdx + 0x0f, 0x85, 0x1c, 0x00, 0x00, 0x00, //0x00001496 jne LBB0_252 + 0xe9, 0x7e, 0x20, 0x00, 0x00, //0x0000149c jmp LBB0_644 + //0x000014a1 LBB0_250 + 0x49, 0x01, 0xc8, //0x000014a1 addq %rcx, %r8 + //0x000014a4 LBB0_251 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000014a4 movq $-1, %rcx + 0x48, 0x8b, 0x14, 0x24, //0x000014ab movq (%rsp), %rdx + 0x48, 0x85, 0xd2, //0x000014af testq %rdx, %rdx + 0x0f, 0x84, 0x67, 0x20, 0x00, 0x00, //0x000014b2 je LBB0_644 + //0x000014b8 LBB0_252 + 0x4d, 0x85, 0xdb, //0x000014b8 testq %r11, %r11 + 0x0f, 0x84, 0x5e, 0x20, 0x00, 0x00, //0x000014bb je LBB0_644 + 0x4d, 0x85, 0xd2, //0x000014c1 testq %r10, %r10 + 0x0f, 0x84, 0x55, 0x20, 0x00, 0x00, //0x000014c4 je LBB0_644 + 0x4d, 0x29, 0xe0, //0x000014ca subq %r12, %r8 + 0x49, 0x8d, 0x48, 0xff, //0x000014cd leaq $-1(%r8), %rcx + 0x48, 0x39, 0xca, //0x000014d1 cmpq %rcx, %rdx + 0x0f, 0x84, 0xee, 0xf1, 0xff, 0xff, //0x000014d4 je LBB0_642 + 0x49, 0x39, 0xcb, //0x000014da cmpq %rcx, %r11 + 0x0f, 0x84, 0xe5, 0xf1, 0xff, 0xff, //0x000014dd je LBB0_642 + 0x49, 0x39, 0xca, //0x000014e3 cmpq %rcx, %r10 + 0x0f, 0x84, 0xdc, 0xf1, 0xff, 0xff, //0x000014e6 je LBB0_642 + 0x4d, 0x85, 0xdb, //0x000014ec testq %r11, %r11 + 0xc5, 0xfe, 0x6f, 0x2d, 0x09, 0xeb, 0xff, 0xff, //0x000014ef vmovdqu $-5367(%rip), %ymm5 /* LCPI0_0+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x81, 0xeb, 0xff, 0xff, //0x000014f7 vmovdqu $-5247(%rip), %ymm6 /* LCPI0_7+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x99, 0xeb, 0xff, 0xff, //0x000014ff vmovdqu $-5223(%rip), %ymm7 /* LCPI0_8+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x11, 0xec, 0xff, 0xff, //0x00001507 vmovdqu $-5103(%rip), %ymm8 /* LCPI0_13+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000150f vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0x24, 0xec, 0xff, 0xff, //0x00001514 vmovdqu $-5084(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0x3c, 0xec, 0xff, 0xff, //0x0000151c vmovdqu $-5060(%rip), %ymm11 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x54, 0xec, 0xff, 0xff, //0x00001524 vmovdqu $-5036(%rip), %ymm12 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0x6c, 0xec, 0xff, 0xff, //0x0000152c vmovdqu $-5012(%rip), %ymm13 /* LCPI0_17+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x04, 0xeb, 0xff, 0xff, //0x00001534 vmovdqu $-5372(%rip), %ymm14 /* LCPI0_2+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0x7c, 0xec, 0xff, 0xff, //0x0000153c vmovdqu $-4996(%rip), %ymm15 /* LCPI0_18+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x94, 0xec, 0xff, 0xff, //0x00001544 vmovdqu $-4972(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x0f, 0x8e, 0x18, 0x00, 0x00, 0x00, //0x0000154c jle LBB0_260 + 0x49, 0x8d, 0x43, 0xff, //0x00001552 leaq $-1(%r11), %rax + 0x49, 0x39, 0xc2, //0x00001556 cmpq %rax, %r10 + 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x00001559 je LBB0_260 + 0x49, 0xf7, 0xd3, //0x0000155f notq %r11 + 0x4d, 0x89, 0xd8, //0x00001562 movq %r11, %r8 + 0xe9, 0xa4, 0x0a, 0x00, 0x00, //0x00001565 jmp LBB0_413 + //0x0000156a LBB0_260 + 0x48, 0x89, 0xd0, //0x0000156a movq %rdx, %rax + 0x4c, 0x09, 0xd0, //0x0000156d orq %r10, %rax + 0x0f, 0x99, 0xc1, //0x00001570 setns %cl + 0x0f, 0x88, 0xe1, 0x02, 0x00, 0x00, //0x00001573 js LBB0_308 + 0x4c, 0x39, 0xd2, //0x00001579 cmpq %r10, %rdx + 0x0f, 0x8c, 0xd8, 0x02, 0x00, 0x00, //0x0000157c jl LBB0_308 + 0x48, 0xf7, 0xd2, //0x00001582 notq %rdx + 0x49, 0x89, 0xd0, //0x00001585 movq %rdx, %r8 + 0xe9, 0x81, 0x0a, 0x00, 0x00, //0x00001588 jmp LBB0_413 + //0x0000158d LBB0_263 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000158d movl $64, %edx + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00001592 movq $8(%rsp), %r11 + 0x48, 0x39, 0xca, //0x00001597 cmpq %rcx, %rdx + 0x0f, 0x82, 0xe5, 0x21, 0x00, 0x00, //0x0000159a jb LBB0_223 + //0x000015a0 LBB0_264 + 0x49, 0x01, 0xcf, //0x000015a0 addq %rcx, %r15 + 0x49, 0x83, 0xc7, 0x01, //0x000015a3 addq $1, %r15 + //0x000015a7 LBB0_265 + 0x4d, 0x85, 0xff, //0x000015a7 testq %r15, %r15 + 0x0f, 0x88, 0x6a, 0x18, 0x00, 0x00, //0x000015aa js LBB0_386 + 0x4d, 0x89, 0x3b, //0x000015b0 movq %r15, (%r11) + 0x4d, 0x85, 0xc0, //0x000015b3 testq %r8, %r8 + 0x0f, 0x8e, 0x7e, 0x18, 0x00, 0x00, //0x000015b6 jle LBB0_248 + 0x49, 0x8b, 0x09, //0x000015bc movq (%r9), %rcx + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000015bf cmpq $4095, %rcx + 0x0f, 0x8f, 0x42, 0x18, 0x00, 0x00, //0x000015c6 jg LBB0_662 + 0x48, 0x8d, 0x41, 0x01, //0x000015cc leaq $1(%rcx), %rax + 0x49, 0x89, 0x01, //0x000015d0 movq %rax, (%r9) + 0x49, 0xc7, 0x44, 0xc9, 0x08, 0x04, 0x00, 0x00, 0x00, //0x000015d3 movq $4, $8(%r9,%rcx,8) + 0xe9, 0x7f, 0xf1, 0xff, 0xff, //0x000015dc jmp LBB0_61 + //0x000015e1 LBB0_269 + 0x4d, 0x8b, 0x03, //0x000015e1 movq (%r11), %r8 + 0x4d, 0x8b, 0x65, 0x08, //0x000015e4 movq $8(%r13), %r12 + 0x4c, 0x89, 0xe3, //0x000015e8 movq %r12, %rbx + 0x41, 0xf6, 0xc2, 0x20, //0x000015eb testb $32, %r10b + 0x0f, 0x85, 0x7e, 0x02, 0x00, 0x00, //0x000015ef jne LBB0_309 + 0x4c, 0x29, 0xc3, //0x000015f5 subq %r8, %rbx + 0x0f, 0x84, 0x6c, 0x21, 0x00, 0x00, //0x000015f8 je LBB0_680 + 0x48, 0x83, 0xfb, 0x40, //0x000015fe cmpq $64, %rbx + 0x0f, 0x82, 0x7c, 0x0d, 0x00, 0x00, //0x00001602 jb LBB0_444 + 0x4c, 0x89, 0xc6, //0x00001608 movq %r8, %rsi + 0x48, 0xf7, 0xd6, //0x0000160b notq %rsi + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x0000160e movq $-1, (%rsp) + 0x4d, 0x89, 0xc7, //0x00001616 movq %r8, %r15 + 0x45, 0x31, 0xd2, //0x00001619 xorl %r10d, %r10d + 0x90, 0x90, 0x90, 0x90, //0x0000161c .p2align 4, 0x90 + //0x00001620 LBB0_273 + 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00001620 movq $16(%rsp), %rax + 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x38, //0x00001625 vmovdqu (%rax,%r15), %ymm0 + 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x38, 0x20, //0x0000162b vmovdqu $32(%rax,%r15), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x00001632 vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x00001636 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0x74, 0xd6, //0x0000163a vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xc2, //0x0000163e vpmovmskb %ymm2, %eax + 0xc5, 0xfd, 0x74, 0xc7, //0x00001642 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x00001646 vpmovmskb %ymm0, %edx + 0xc5, 0xf5, 0x74, 0xc7, //0x0000164a vpcmpeqb %ymm7, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x0000164e vpmovmskb %ymm0, %ecx + 0x48, 0xc1, 0xe0, 0x20, //0x00001652 shlq $32, %rax + 0x48, 0x09, 0xc7, //0x00001656 orq %rax, %rdi + 0x48, 0xc1, 0xe1, 0x20, //0x00001659 shlq $32, %rcx + 0x48, 0x09, 0xca, //0x0000165d orq %rcx, %rdx + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x00001660 jne LBB0_282 + 0x4d, 0x85, 0xd2, //0x00001666 testq %r10, %r10 + 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x00001669 jne LBB0_284 + 0x45, 0x31, 0xd2, //0x0000166f xorl %r10d, %r10d + 0x48, 0x85, 0xff, //0x00001672 testq %rdi, %rdi + 0x0f, 0x85, 0xa9, 0x00, 0x00, 0x00, //0x00001675 jne LBB0_286 + //0x0000167b LBB0_276 + 0x48, 0x83, 0xc3, 0xc0, //0x0000167b addq $-64, %rbx + 0x48, 0x83, 0xc6, 0xc0, //0x0000167f addq $-64, %rsi + 0x49, 0x83, 0xc7, 0x40, //0x00001683 addq $64, %r15 + 0x48, 0x83, 0xfb, 0x3f, //0x00001687 cmpq $63, %rbx + 0x0f, 0x87, 0x8f, 0xff, 0xff, 0xff, //0x0000168b ja LBB0_273 + 0xe9, 0xaa, 0x0a, 0x00, 0x00, //0x00001691 jmp LBB0_277 + //0x00001696 LBB0_282 + 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x00001696 movq %r9, $32(%rsp) + 0x4d, 0x89, 0xe9, //0x0000169b movq %r13, %r9 + 0x4d, 0x89, 0xdd, //0x0000169e movq %r11, %r13 + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x000016a1 cmpq $-1, (%rsp) + 0x0f, 0x85, 0x1b, 0x00, 0x00, 0x00, //0x000016a6 jne LBB0_285 + 0x48, 0x0f, 0xbc, 0xc2, //0x000016ac bsfq %rdx, %rax + 0x4c, 0x01, 0xf8, //0x000016b0 addq %r15, %rax + 0x48, 0x89, 0x04, 0x24, //0x000016b3 movq %rax, (%rsp) + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x000016b7 jmp LBB0_285 + //0x000016bc LBB0_284 + 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x000016bc movq %r9, $32(%rsp) + 0x4d, 0x89, 0xe9, //0x000016c1 movq %r13, %r9 + 0x4d, 0x89, 0xdd, //0x000016c4 movq %r11, %r13 + //0x000016c7 LBB0_285 + 0x4c, 0x89, 0xd0, //0x000016c7 movq %r10, %rax + 0x48, 0xf7, 0xd0, //0x000016ca notq %rax + 0x48, 0x21, 0xd0, //0x000016cd andq %rdx, %rax + 0x4c, 0x8d, 0x1c, 0x00, //0x000016d0 leaq (%rax,%rax), %r11 + 0x4d, 0x09, 0xd3, //0x000016d4 orq %r10, %r11 + 0x4c, 0x89, 0xd9, //0x000016d7 movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x000016da notq %rcx + 0x48, 0x21, 0xd1, //0x000016dd andq %rdx, %rcx + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000016e0 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd1, //0x000016ea andq %rdx, %rcx + 0x45, 0x31, 0xd2, //0x000016ed xorl %r10d, %r10d + 0x48, 0x01, 0xc1, //0x000016f0 addq %rax, %rcx + 0x41, 0x0f, 0x92, 0xc2, //0x000016f3 setb %r10b + 0x48, 0x01, 0xc9, //0x000016f7 addq %rcx, %rcx + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000016fa movabsq $6148914691236517205, %rax + 0x48, 0x31, 0xc1, //0x00001704 xorq %rax, %rcx + 0x4c, 0x21, 0xd9, //0x00001707 andq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x0000170a notq %rcx + 0x48, 0x21, 0xcf, //0x0000170d andq %rcx, %rdi + 0x4d, 0x89, 0xeb, //0x00001710 movq %r13, %r11 + 0x4d, 0x89, 0xcd, //0x00001713 movq %r9, %r13 + 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x00001716 movq $32(%rsp), %r9 + 0x48, 0x85, 0xff, //0x0000171b testq %rdi, %rdi + 0x0f, 0x84, 0x57, 0xff, 0xff, 0xff, //0x0000171e je LBB0_276 + //0x00001724 LBB0_286 + 0x4c, 0x0f, 0xbc, 0xff, //0x00001724 bsfq %rdi, %r15 + 0x49, 0x29, 0xf7, //0x00001728 subq %rsi, %r15 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x0000172b movq $24(%rsp), %r10 + 0xe9, 0x41, 0x06, 0x00, 0x00, //0x00001730 jmp LBB0_385 + //0x00001735 LBB0_287 + 0x4d, 0x8b, 0x55, 0x08, //0x00001735 movq $8(%r13), %r10 + 0x4d, 0x8b, 0x3b, //0x00001739 movq (%r11), %r15 + 0x4d, 0x29, 0xfa, //0x0000173c subq %r15, %r10 + 0x0f, 0x84, 0xec, 0x1e, 0x00, 0x00, //0x0000173f je LBB0_661 + 0x4b, 0x8d, 0x04, 0x38, //0x00001745 leaq (%r8,%r15), %rax + 0x48, 0x89, 0x44, 0x24, 0x30, //0x00001749 movq %rax, $48(%rsp) + 0x80, 0x38, 0x30, //0x0000174e cmpb $48, (%rax) + 0x0f, 0x85, 0x9a, 0x02, 0x00, 0x00, //0x00001751 jne LBB0_330 + 0x41, 0xbc, 0x01, 0x00, 0x00, 0x00, //0x00001757 movl $1, %r12d + 0x49, 0x83, 0xfa, 0x01, //0x0000175d cmpq $1, %r10 + 0x0f, 0x85, 0x5c, 0x02, 0x00, 0x00, //0x00001761 jne LBB0_328 + //0x00001767 LBB0_290 + 0x4c, 0x89, 0xf9, //0x00001767 movq %r15, %rcx + 0xe9, 0x08, 0x0b, 0x00, 0x00, //0x0000176a jmp LBB0_431 + //0x0000176f LBB0_291 + 0x49, 0x8b, 0x09, //0x0000176f movq (%r9), %rcx + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00001772 cmpq $4095, %rcx + 0x0f, 0x8f, 0x8f, 0x16, 0x00, 0x00, //0x00001779 jg LBB0_662 + 0x48, 0x8d, 0x41, 0x01, //0x0000177f leaq $1(%rcx), %rax + 0x49, 0x89, 0x01, //0x00001783 movq %rax, (%r9) + 0x49, 0xc7, 0x44, 0xc9, 0x08, 0x05, 0x00, 0x00, 0x00, //0x00001786 movq $5, $8(%r9,%rcx,8) + 0xe9, 0xcc, 0xef, 0xff, 0xff, //0x0000178f jmp LBB0_61 + //0x00001794 LBB0_293 + 0x49, 0x8b, 0x0b, //0x00001794 movq (%r11), %rcx + 0x49, 0x8b, 0x55, 0x08, //0x00001797 movq $8(%r13), %rdx + 0x48, 0x8d, 0x42, 0xfc, //0x0000179b leaq $-4(%rdx), %rax + 0x48, 0x39, 0xc1, //0x0000179f cmpq %rax, %rcx + 0x0f, 0x87, 0x8a, 0x16, 0x00, 0x00, //0x000017a2 ja LBB0_388 + 0x41, 0x8b, 0x14, 0x08, //0x000017a8 movl (%r8,%rcx), %edx + 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x000017ac cmpl $1702063201, %edx + 0x0f, 0x85, 0x85, 0x1e, 0x00, 0x00, //0x000017b2 jne LBB0_663 + 0x48, 0x8d, 0x41, 0x04, //0x000017b8 leaq $4(%rcx), %rax + 0x49, 0x89, 0x03, //0x000017bc movq %rax, (%r11) + 0x48, 0x85, 0xc9, //0x000017bf testq %rcx, %rcx + 0x0f, 0x8f, 0x98, 0xef, 0xff, 0xff, //0x000017c2 jg LBB0_61 + 0xe9, 0x5a, 0x1f, 0x00, 0x00, //0x000017c8 jmp LBB0_296 + //0x000017cd LBB0_297 + 0x49, 0x8b, 0x0b, //0x000017cd movq (%r11), %rcx + 0x49, 0x8b, 0x55, 0x08, //0x000017d0 movq $8(%r13), %rdx + 0x48, 0x8d, 0x42, 0xfd, //0x000017d4 leaq $-3(%rdx), %rax + 0x48, 0x39, 0xc1, //0x000017d8 cmpq %rax, %rcx + 0x0f, 0x87, 0x51, 0x16, 0x00, 0x00, //0x000017db ja LBB0_388 + 0x4c, 0x8d, 0x79, 0xff, //0x000017e1 leaq $-1(%rcx), %r15 + 0x41, 0x81, 0x7c, 0x08, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x000017e5 cmpl $1819047278, $-1(%r8,%rcx) + 0x0f, 0x84, 0x51, 0x00, 0x00, 0x00, //0x000017ee je LBB0_307 + 0xe9, 0x99, 0x1e, 0x00, 0x00, //0x000017f4 jmp LBB0_299 + //0x000017f9 LBB0_303 + 0x49, 0x8b, 0x09, //0x000017f9 movq (%r9), %rcx + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000017fc cmpq $4095, %rcx + 0x0f, 0x8f, 0x05, 0x16, 0x00, 0x00, //0x00001803 jg LBB0_662 + 0x48, 0x8d, 0x41, 0x01, //0x00001809 leaq $1(%rcx), %rax + 0x49, 0x89, 0x01, //0x0000180d movq %rax, (%r9) + 0x49, 0xc7, 0x44, 0xc9, 0x08, 0x06, 0x00, 0x00, 0x00, //0x00001810 movq $6, $8(%r9,%rcx,8) + 0xe9, 0x42, 0xef, 0xff, 0xff, //0x00001819 jmp LBB0_61 + //0x0000181e LBB0_305 + 0x49, 0x8b, 0x0b, //0x0000181e movq (%r11), %rcx + 0x49, 0x8b, 0x55, 0x08, //0x00001821 movq $8(%r13), %rdx + 0x48, 0x8d, 0x42, 0xfd, //0x00001825 leaq $-3(%rdx), %rax + 0x48, 0x39, 0xc1, //0x00001829 cmpq %rax, %rcx + 0x0f, 0x87, 0x00, 0x16, 0x00, 0x00, //0x0000182c ja LBB0_388 + 0x4c, 0x8d, 0x79, 0xff, //0x00001832 leaq $-1(%rcx), %r15 + 0x41, 0x81, 0x7c, 0x08, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00001836 cmpl $1702195828, $-1(%r8,%rcx) + 0x0f, 0x85, 0x94, 0x1e, 0x00, 0x00, //0x0000183f jne LBB0_668 + //0x00001845 LBB0_307 + 0x48, 0x8d, 0x41, 0x03, //0x00001845 leaq $3(%rcx), %rax + 0x49, 0x89, 0x03, //0x00001849 movq %rax, (%r11) + 0x48, 0x85, 0xc9, //0x0000184c testq %rcx, %rcx + 0x0f, 0x8f, 0x0b, 0xef, 0xff, 0xff, //0x0000184f jg LBB0_61 + 0xe9, 0xde, 0x1c, 0x00, 0x00, //0x00001855 jmp LBB0_646 + //0x0000185a LBB0_308 + 0x49, 0x8d, 0x42, 0xff, //0x0000185a leaq $-1(%r10), %rax + 0x48, 0x39, 0xc2, //0x0000185e cmpq %rax, %rdx + 0x49, 0xf7, 0xd2, //0x00001861 notq %r10 + 0x4d, 0x0f, 0x45, 0xd0, //0x00001864 cmovneq %r8, %r10 + 0x84, 0xc9, //0x00001868 testb %cl, %cl + 0x4d, 0x0f, 0x45, 0xc2, //0x0000186a cmovneq %r10, %r8 + 0xe9, 0x9b, 0x07, 0x00, 0x00, //0x0000186e jmp LBB0_413 + //0x00001873 LBB0_309 + 0x4c, 0x29, 0xc3, //0x00001873 subq %r8, %rbx + 0x0f, 0x84, 0xee, 0x1e, 0x00, 0x00, //0x00001876 je LBB0_680 + 0x48, 0x83, 0xfb, 0x40, //0x0000187c cmpq $64, %rbx + 0x0f, 0x82, 0x21, 0x0b, 0x00, 0x00, //0x00001880 jb LBB0_445 + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00001886 movq $-1, (%rsp) + 0x4d, 0x89, 0xc7, //0x0000188e movq %r8, %r15 + 0x45, 0x31, 0xdb, //0x00001891 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001894 .p2align 4, 0x90 + //0x000018a0 LBB0_312 + 0x48, 0x8b, 0x44, 0x24, 0x10, //0x000018a0 movq $16(%rsp), %rax + 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x38, //0x000018a5 vmovdqu (%rax,%r15), %ymm0 + 0xc4, 0xa1, 0x7e, 0x6f, 0x4c, 0x38, 0x20, //0x000018ab vmovdqu $32(%rax,%r15), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x000018b2 vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x000018b6 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0x74, 0xd6, //0x000018ba vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xc2, //0x000018be vpmovmskb %ymm2, %eax + 0xc5, 0xfd, 0x74, 0xd7, //0x000018c2 vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x000018c6 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd7, //0x000018ca vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x000018ce vpmovmskb %ymm2, %ecx + 0xc5, 0xbd, 0x64, 0xd1, //0x000018d2 vpcmpgtb %ymm1, %ymm8, %ymm2 + 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x000018d6 vpcmpgtb %ymm9, %ymm1, %ymm1 + 0xc5, 0xed, 0xdb, 0xc9, //0x000018db vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf1, //0x000018df vpmovmskb %ymm1, %esi + 0x48, 0xc1, 0xe0, 0x20, //0x000018e3 shlq $32, %rax + 0x48, 0x09, 0xc7, //0x000018e7 orq %rax, %rdi + 0x48, 0xc1, 0xe1, 0x20, //0x000018ea shlq $32, %rcx + 0x48, 0xc1, 0xe6, 0x20, //0x000018ee shlq $32, %rsi + 0x48, 0x09, 0xca, //0x000018f2 orq %rcx, %rdx + 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x000018f5 jne LBB0_323 + 0x4d, 0x85, 0xdb, //0x000018fb testq %r11, %r11 + 0x0f, 0x85, 0x56, 0x00, 0x00, 0x00, //0x000018fe jne LBB0_325 + 0x45, 0x31, 0xdb, //0x00001904 xorl %r11d, %r11d + //0x00001907 LBB0_315 + 0xc5, 0xbd, 0x64, 0xc8, //0x00001907 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x0000190b vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00001910 vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc0, //0x00001914 vpmovmskb %ymm0, %eax + 0x48, 0x09, 0xc6, //0x00001918 orq %rax, %rsi + 0x48, 0x85, 0xff, //0x0000191b testq %rdi, %rdi + 0x0f, 0x85, 0x89, 0x00, 0x00, 0x00, //0x0000191e jne LBB0_326 + 0x48, 0x85, 0xf6, //0x00001924 testq %rsi, %rsi + 0x0f, 0x85, 0x6a, 0x1c, 0x00, 0x00, //0x00001927 jne LBB0_651 + 0x48, 0x83, 0xc3, 0xc0, //0x0000192d addq $-64, %rbx + 0x49, 0x83, 0xc7, 0x40, //0x00001931 addq $64, %r15 + 0x48, 0x83, 0xfb, 0x3f, //0x00001935 cmpq $63, %rbx + 0x0f, 0x87, 0x61, 0xff, 0xff, 0xff, //0x00001939 ja LBB0_312 + 0xe9, 0x57, 0x08, 0x00, 0x00, //0x0000193f jmp LBB0_318 + //0x00001944 LBB0_323 + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00001944 cmpq $-1, (%rsp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00001949 jne LBB0_325 + 0x48, 0x0f, 0xbc, 0xc2, //0x0000194f bsfq %rdx, %rax + 0x4c, 0x01, 0xf8, //0x00001953 addq %r15, %rax + 0x48, 0x89, 0x04, 0x24, //0x00001956 movq %rax, (%rsp) + //0x0000195a LBB0_325 + 0x4c, 0x89, 0xd8, //0x0000195a movq %r11, %rax + 0x48, 0xf7, 0xd0, //0x0000195d notq %rax + 0x48, 0x21, 0xd0, //0x00001960 andq %rdx, %rax + 0x4c, 0x8d, 0x14, 0x00, //0x00001963 leaq (%rax,%rax), %r10 + 0x4d, 0x09, 0xda, //0x00001967 orq %r11, %r10 + 0x4c, 0x89, 0xd1, //0x0000196a movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x0000196d notq %rcx + 0x48, 0x21, 0xd1, //0x00001970 andq %rdx, %rcx + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001973 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd1, //0x0000197d andq %rdx, %rcx + 0x45, 0x31, 0xdb, //0x00001980 xorl %r11d, %r11d + 0x48, 0x01, 0xc1, //0x00001983 addq %rax, %rcx + 0x41, 0x0f, 0x92, 0xc3, //0x00001986 setb %r11b + 0x48, 0x01, 0xc9, //0x0000198a addq %rcx, %rcx + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000198d movabsq $6148914691236517205, %rax + 0x48, 0x31, 0xc1, //0x00001997 xorq %rax, %rcx + 0x4c, 0x21, 0xd1, //0x0000199a andq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x0000199d notq %rcx + 0x48, 0x21, 0xcf, //0x000019a0 andq %rcx, %rdi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000019a3 movq $24(%rsp), %r10 + 0xe9, 0x5a, 0xff, 0xff, 0xff, //0x000019a8 jmp LBB0_315 + //0x000019ad LBB0_326 + 0x48, 0x0f, 0xbc, 0xcf, //0x000019ad bsfq %rdi, %rcx + 0x48, 0x85, 0xf6, //0x000019b1 testq %rsi, %rsi + 0x0f, 0x84, 0xa2, 0x03, 0x00, 0x00, //0x000019b4 je LBB0_382 + 0x48, 0x0f, 0xbc, 0xd6, //0x000019ba bsfq %rsi, %rdx + 0xe9, 0x9e, 0x03, 0x00, 0x00, //0x000019be jmp LBB0_383 + //0x000019c3 LBB0_328 + 0x48, 0x8b, 0x44, 0x24, 0x30, //0x000019c3 movq $48(%rsp), %rax + 0x8a, 0x48, 0x01, //0x000019c8 movb $1(%rax), %cl + 0x80, 0xc1, 0xd2, //0x000019cb addb $-46, %cl + 0x80, 0xf9, 0x37, //0x000019ce cmpb $55, %cl + 0x0f, 0x87, 0x90, 0xfd, 0xff, 0xff, //0x000019d1 ja LBB0_290 + 0x0f, 0xb6, 0xc1, //0x000019d7 movzbl %cl, %eax + 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x000019da movabsq $36028797027352577, %rcx + 0x48, 0x0f, 0xa3, 0xc1, //0x000019e4 btq %rax, %rcx + 0x4c, 0x89, 0xf9, //0x000019e8 movq %r15, %rcx + 0x0f, 0x83, 0x86, 0x08, 0x00, 0x00, //0x000019eb jae LBB0_431 + //0x000019f1 LBB0_330 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000019f1 movq $-1, %r8 + 0x49, 0x83, 0xfa, 0x20, //0x000019f8 cmpq $32, %r10 + 0x0f, 0x82, 0x5a, 0x09, 0x00, 0x00, //0x000019fc jb LBB0_443 + 0x45, 0x31, 0xe4, //0x00001a02 xorl %r12d, %r12d + 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00001a05 movq $-1, %r11 + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00001a0c movq $-1, (%rsp) + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001a14 .p2align 4, 0x90 + //0x00001a20 LBB0_332 + 0x48, 0x8b, 0x44, 0x24, 0x30, //0x00001a20 movq $48(%rsp), %rax + 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x20, //0x00001a25 vmovdqu (%rax,%r12), %ymm0 + 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x00001a2b vpcmpgtb %ymm10, %ymm0, %ymm1 + 0xc5, 0xa5, 0x64, 0xd0, //0x00001a30 vpcmpgtb %ymm0, %ymm11, %ymm2 + 0xc5, 0xed, 0xdb, 0xc9, //0x00001a34 vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0x9d, 0x74, 0xd0, //0x00001a38 vpcmpeqb %ymm0, %ymm12, %ymm2 + 0xc5, 0x95, 0x74, 0xd8, //0x00001a3c vpcmpeqb %ymm0, %ymm13, %ymm3 + 0xc5, 0xe5, 0xeb, 0xd2, //0x00001a40 vpor %ymm2, %ymm3, %ymm2 + 0xc5, 0x8d, 0xdb, 0xd8, //0x00001a44 vpand %ymm0, %ymm14, %ymm3 + 0xc5, 0x85, 0x74, 0xc0, //0x00001a48 vpcmpeqb %ymm0, %ymm15, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf8, //0x00001a4c vpmovmskb %ymm0, %edi + 0xc5, 0xe5, 0x74, 0xdc, //0x00001a50 vpcmpeqb %ymm4, %ymm3, %ymm3 + 0xc5, 0xfd, 0xd7, 0xd3, //0x00001a54 vpmovmskb %ymm3, %edx + 0xc5, 0xfd, 0xd7, 0xf2, //0x00001a58 vpmovmskb %ymm2, %esi + 0xc5, 0xf5, 0xeb, 0xc0, //0x00001a5c vpor %ymm0, %ymm1, %ymm0 + 0xc5, 0xe5, 0xeb, 0xca, //0x00001a60 vpor %ymm2, %ymm3, %ymm1 + 0xc5, 0xfd, 0xeb, 0xc1, //0x00001a64 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc0, //0x00001a68 vpmovmskb %ymm0, %eax + 0x48, 0xf7, 0xd0, //0x00001a6c notq %rax + 0x48, 0x0f, 0xbc, 0xc8, //0x00001a6f bsfq %rax, %rcx + 0x83, 0xf9, 0x20, //0x00001a73 cmpl $32, %ecx + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00001a76 je LBB0_334 + 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00001a7c movl $-1, %eax + 0xd3, 0xe0, //0x00001a81 shll %cl, %eax + 0xf7, 0xd0, //0x00001a83 notl %eax + 0x21, 0xc7, //0x00001a85 andl %eax, %edi + 0x21, 0xc2, //0x00001a87 andl %eax, %edx + 0x21, 0xf0, //0x00001a89 andl %esi, %eax + 0x89, 0xc6, //0x00001a8b movl %eax, %esi + //0x00001a8d LBB0_334 + 0x8d, 0x5f, 0xff, //0x00001a8d leal $-1(%rdi), %ebx + 0x21, 0xfb, //0x00001a90 andl %edi, %ebx + 0x0f, 0x85, 0x67, 0x06, 0x00, 0x00, //0x00001a92 jne LBB0_418 + 0x8d, 0x5a, 0xff, //0x00001a98 leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x00001a9b andl %edx, %ebx + 0x0f, 0x85, 0x5c, 0x06, 0x00, 0x00, //0x00001a9d jne LBB0_418 + 0x8d, 0x5e, 0xff, //0x00001aa3 leal $-1(%rsi), %ebx + 0x21, 0xf3, //0x00001aa6 andl %esi, %ebx + 0x0f, 0x85, 0x51, 0x06, 0x00, 0x00, //0x00001aa8 jne LBB0_418 + 0x85, 0xff, //0x00001aae testl %edi, %edi + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00001ab0 je LBB0_340 + 0x0f, 0xbc, 0xff, //0x00001ab6 bsfl %edi, %edi + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00001ab9 cmpq $-1, (%rsp) + 0x0f, 0x85, 0x9a, 0x07, 0x00, 0x00, //0x00001abe jne LBB0_426 + 0x4c, 0x01, 0xe7, //0x00001ac4 addq %r12, %rdi + 0x48, 0x89, 0x3c, 0x24, //0x00001ac7 movq %rdi, (%rsp) + //0x00001acb LBB0_340 + 0x85, 0xd2, //0x00001acb testl %edx, %edx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00001acd je LBB0_343 + 0x0f, 0xbc, 0xd2, //0x00001ad3 bsfl %edx, %edx + 0x49, 0x83, 0xfb, 0xff, //0x00001ad6 cmpq $-1, %r11 + 0x0f, 0x85, 0x4c, 0x07, 0x00, 0x00, //0x00001ada jne LBB0_424 + 0x4c, 0x01, 0xe2, //0x00001ae0 addq %r12, %rdx + 0x49, 0x89, 0xd3, //0x00001ae3 movq %rdx, %r11 + //0x00001ae6 LBB0_343 + 0x85, 0xf6, //0x00001ae6 testl %esi, %esi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00001ae8 je LBB0_346 + 0x0f, 0xbc, 0xd6, //0x00001aee bsfl %esi, %edx + 0x49, 0x83, 0xf8, 0xff, //0x00001af1 cmpq $-1, %r8 + 0x0f, 0x85, 0x31, 0x07, 0x00, 0x00, //0x00001af5 jne LBB0_424 + 0x4c, 0x01, 0xe2, //0x00001afb addq %r12, %rdx + 0x49, 0x89, 0xd0, //0x00001afe movq %rdx, %r8 + //0x00001b01 LBB0_346 + 0x83, 0xf9, 0x20, //0x00001b01 cmpl $32, %ecx + 0x0f, 0x85, 0x0f, 0x02, 0x00, 0x00, //0x00001b04 jne LBB0_380 + 0x49, 0x83, 0xc2, 0xe0, //0x00001b0a addq $-32, %r10 + 0x49, 0x83, 0xc4, 0x20, //0x00001b0e addq $32, %r12 + 0x49, 0x83, 0xfa, 0x1f, //0x00001b12 cmpq $31, %r10 + 0x0f, 0x87, 0x04, 0xff, 0xff, 0xff, //0x00001b16 ja LBB0_332 + 0xc5, 0xf8, 0x77, //0x00001b1c vzeroupper + 0x4c, 0x03, 0x64, 0x24, 0x30, //0x00001b1f addq $48(%rsp), %r12 + 0x4c, 0x89, 0x6c, 0x24, 0x38, //0x00001b24 movq %r13, $56(%rsp) + 0x49, 0x83, 0xfa, 0x10, //0x00001b29 cmpq $16, %r10 + 0x0f, 0x82, 0x3a, 0x01, 0x00, 0x00, //0x00001b2d jb LBB0_367 + //0x00001b33 LBB0_349 + 0x4c, 0x89, 0xe3, //0x00001b33 movq %r12, %rbx + 0x48, 0x2b, 0x5c, 0x24, 0x30, //0x00001b36 subq $48(%rsp), %rbx + 0x45, 0x31, 0xed, //0x00001b3b xorl %r13d, %r13d + 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x00001b3e movq %r9, $32(%rsp) + //0x00001b43 LBB0_350 + 0xc4, 0x81, 0x7a, 0x6f, 0x04, 0x2c, //0x00001b43 vmovdqu (%r12,%r13), %xmm0 + 0xc5, 0xf9, 0x64, 0x0d, 0xef, 0xe6, 0xff, 0xff, //0x00001b49 vpcmpgtb $-6417(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ + 0xc5, 0xfa, 0x6f, 0x15, 0xf7, 0xe6, 0xff, 0xff, //0x00001b51 vmovdqu $-6409(%rip), %xmm2 /* LCPI0_21+0(%rip) */ + 0xc5, 0xe9, 0x64, 0xd0, //0x00001b59 vpcmpgtb %xmm0, %xmm2, %xmm2 + 0xc5, 0xf1, 0xdb, 0xca, //0x00001b5d vpand %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0x74, 0x15, 0xf7, 0xe6, 0xff, 0xff, //0x00001b61 vpcmpeqb $-6409(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x1d, 0xff, 0xe6, 0xff, 0xff, //0x00001b69 vpcmpeqb $-6401(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xd2, //0x00001b71 vpor %xmm2, %xmm3, %xmm2 + 0xc5, 0xf9, 0xdb, 0x1d, 0x93, 0xe6, 0xff, 0xff, //0x00001b75 vpand $-6509(%rip), %xmm0, %xmm3 /* LCPI0_5+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0xfb, 0xe6, 0xff, 0xff, //0x00001b7d vpcmpeqb $-6405(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ + 0xc5, 0xe1, 0x74, 0x1d, 0x03, 0xe7, 0xff, 0xff, //0x00001b85 vpcmpeqb $-6397(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xe0, //0x00001b8d vpor %xmm0, %xmm3, %xmm4 + 0xc5, 0xe9, 0xeb, 0xc9, //0x00001b91 vpor %xmm1, %xmm2, %xmm1 + 0xc5, 0xd9, 0xeb, 0xc9, //0x00001b95 vpor %xmm1, %xmm4, %xmm1 + 0xc5, 0x79, 0xd7, 0xc8, //0x00001b99 vpmovmskb %xmm0, %r9d + 0xc5, 0xf9, 0xd7, 0xfb, //0x00001b9d vpmovmskb %xmm3, %edi + 0xc5, 0xf9, 0xd7, 0xd2, //0x00001ba1 vpmovmskb %xmm2, %edx + 0xc5, 0xf9, 0xd7, 0xc1, //0x00001ba5 vpmovmskb %xmm1, %eax + 0xf7, 0xd0, //0x00001ba9 notl %eax + 0x0f, 0xbc, 0xc8, //0x00001bab bsfl %eax, %ecx + 0x83, 0xf9, 0x10, //0x00001bae cmpl $16, %ecx + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00001bb1 je LBB0_352 + 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00001bb7 movl $-1, %eax + 0xd3, 0xe0, //0x00001bbc shll %cl, %eax + 0xf7, 0xd0, //0x00001bbe notl %eax + 0x41, 0x21, 0xc1, //0x00001bc0 andl %eax, %r9d + 0x21, 0xc7, //0x00001bc3 andl %eax, %edi + 0x21, 0xd0, //0x00001bc5 andl %edx, %eax + 0x89, 0xc2, //0x00001bc7 movl %eax, %edx + //0x00001bc9 LBB0_352 + 0x41, 0x8d, 0x71, 0xff, //0x00001bc9 leal $-1(%r9), %esi + 0x44, 0x21, 0xce, //0x00001bcd andl %r9d, %esi + 0x0f, 0x85, 0x0f, 0x06, 0x00, 0x00, //0x00001bd0 jne LBB0_421 + 0x8d, 0x77, 0xff, //0x00001bd6 leal $-1(%rdi), %esi + 0x21, 0xfe, //0x00001bd9 andl %edi, %esi + 0x0f, 0x85, 0x04, 0x06, 0x00, 0x00, //0x00001bdb jne LBB0_421 + 0x8d, 0x72, 0xff, //0x00001be1 leal $-1(%rdx), %esi + 0x21, 0xd6, //0x00001be4 andl %edx, %esi + 0x0f, 0x85, 0xf9, 0x05, 0x00, 0x00, //0x00001be6 jne LBB0_421 + 0x45, 0x85, 0xc9, //0x00001bec testl %r9d, %r9d + 0x0f, 0x84, 0x19, 0x00, 0x00, 0x00, //0x00001bef je LBB0_358 + 0x41, 0x0f, 0xbc, 0xf1, //0x00001bf5 bsfl %r9d, %esi + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00001bf9 cmpq $-1, (%rsp) + 0x0f, 0x85, 0xd7, 0x06, 0x00, 0x00, //0x00001bfe jne LBB0_436 + 0x48, 0x01, 0xde, //0x00001c04 addq %rbx, %rsi + 0x4c, 0x01, 0xee, //0x00001c07 addq %r13, %rsi + 0x48, 0x89, 0x34, 0x24, //0x00001c0a movq %rsi, (%rsp) + //0x00001c0e LBB0_358 + 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x00001c0e movq $32(%rsp), %r9 + 0x85, 0xff, //0x00001c13 testl %edi, %edi + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001c15 je LBB0_361 + 0x0f, 0xbc, 0xf7, //0x00001c1b bsfl %edi, %esi + 0x49, 0x83, 0xfb, 0xff, //0x00001c1e cmpq $-1, %r11 + 0x0f, 0x85, 0xba, 0x06, 0x00, 0x00, //0x00001c22 jne LBB0_437 + 0x48, 0x01, 0xde, //0x00001c28 addq %rbx, %rsi + 0x4c, 0x01, 0xee, //0x00001c2b addq %r13, %rsi + 0x49, 0x89, 0xf3, //0x00001c2e movq %rsi, %r11 + //0x00001c31 LBB0_361 + 0x85, 0xd2, //0x00001c31 testl %edx, %edx + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001c33 je LBB0_364 + 0x0f, 0xbc, 0xd2, //0x00001c39 bsfl %edx, %edx + 0x49, 0x83, 0xf8, 0xff, //0x00001c3c cmpq $-1, %r8 + 0x0f, 0x85, 0xa3, 0x06, 0x00, 0x00, //0x00001c40 jne LBB0_438 + 0x48, 0x01, 0xda, //0x00001c46 addq %rbx, %rdx + 0x4c, 0x01, 0xea, //0x00001c49 addq %r13, %rdx + 0x49, 0x89, 0xd0, //0x00001c4c movq %rdx, %r8 + //0x00001c4f LBB0_364 + 0x83, 0xf9, 0x10, //0x00001c4f cmpl $16, %ecx + 0x0f, 0x85, 0x34, 0x01, 0x00, 0x00, //0x00001c52 jne LBB0_390 + 0x49, 0x83, 0xc2, 0xf0, //0x00001c58 addq $-16, %r10 + 0x49, 0x83, 0xc5, 0x10, //0x00001c5c addq $16, %r13 + 0x49, 0x83, 0xfa, 0x0f, //0x00001c60 cmpq $15, %r10 + 0x0f, 0x87, 0xd9, 0xfe, 0xff, 0xff, //0x00001c64 ja LBB0_350 + 0x4d, 0x01, 0xec, //0x00001c6a addq %r13, %r12 + //0x00001c6d LBB0_367 + 0x4d, 0x85, 0xd2, //0x00001c6d testq %r10, %r10 + 0x4c, 0x8b, 0x6c, 0x24, 0x38, //0x00001c70 movq $56(%rsp), %r13 + 0x0f, 0x84, 0x3a, 0x01, 0x00, 0x00, //0x00001c75 je LBB0_392 + 0x4b, 0x8d, 0x14, 0x14, //0x00001c7b leaq (%r12,%r10), %rdx + 0x4c, 0x89, 0xe6, //0x00001c7f movq %r12, %rsi + 0x48, 0x2b, 0x74, 0x24, 0x30, //0x00001c82 subq $48(%rsp), %rsi + 0x31, 0xc9, //0x00001c87 xorl %ecx, %ecx + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00001c89 jmp LBB0_372 + //0x00001c8e LBB0_369 + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00001c8e cmpq $-1, (%rsp) + 0x0f, 0x85, 0x7a, 0x05, 0x00, 0x00, //0x00001c93 jne LBB0_423 + 0x48, 0x8d, 0x04, 0x0e, //0x00001c99 leaq (%rsi,%rcx), %rax + 0x48, 0x89, 0x04, 0x24, //0x00001c9d movq %rax, (%rsp) + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001ca1 .p2align 4, 0x90 + //0x00001cb0 LBB0_371 + 0x48, 0x83, 0xc1, 0x01, //0x00001cb0 addq $1, %rcx + 0x49, 0x39, 0xca, //0x00001cb4 cmpq %rcx, %r10 + 0x0f, 0x84, 0x26, 0x04, 0x00, 0x00, //0x00001cb7 je LBB0_417 + //0x00001cbd LBB0_372 + 0x41, 0x0f, 0xbe, 0x3c, 0x0c, //0x00001cbd movsbl (%r12,%rcx), %edi + 0x8d, 0x47, 0xd0, //0x00001cc2 leal $-48(%rdi), %eax + 0x83, 0xf8, 0x0a, //0x00001cc5 cmpl $10, %eax + 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x00001cc8 jb LBB0_371 + 0x8d, 0x5f, 0xd5, //0x00001cce leal $-43(%rdi), %ebx + 0x83, 0xfb, 0x1a, //0x00001cd1 cmpl $26, %ebx + 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00001cd4 ja LBB0_377 + 0x48, 0x8d, 0x3d, 0x63, 0x1f, 0x00, 0x00, //0x00001cda leaq $8035(%rip), %rdi /* LJTI0_3+0(%rip) */ + 0x48, 0x63, 0x04, 0x9f, //0x00001ce1 movslq (%rdi,%rbx,4), %rax + 0x48, 0x01, 0xf8, //0x00001ce5 addq %rdi, %rax + 0xff, 0xe0, //0x00001ce8 jmpq *%rax + //0x00001cea LBB0_375 + 0x49, 0x83, 0xf8, 0xff, //0x00001cea cmpq $-1, %r8 + 0x0f, 0x85, 0x1f, 0x05, 0x00, 0x00, //0x00001cee jne LBB0_423 + 0x4c, 0x8d, 0x04, 0x0e, //0x00001cf4 leaq (%rsi,%rcx), %r8 + 0xe9, 0xb3, 0xff, 0xff, 0xff, //0x00001cf8 jmp LBB0_371 + //0x00001cfd LBB0_377 + 0x83, 0xff, 0x65, //0x00001cfd cmpl $101, %edi + 0x0f, 0x85, 0xac, 0x00, 0x00, 0x00, //0x00001d00 jne LBB0_391 + //0x00001d06 LBB0_378 + 0x49, 0x83, 0xfb, 0xff, //0x00001d06 cmpq $-1, %r11 + 0x0f, 0x85, 0x03, 0x05, 0x00, 0x00, //0x00001d0a jne LBB0_423 + 0x4c, 0x8d, 0x1c, 0x0e, //0x00001d10 leaq (%rsi,%rcx), %r11 + 0xe9, 0x97, 0xff, 0xff, 0xff, //0x00001d14 jmp LBB0_371 + //0x00001d19 LBB0_380 + 0x4c, 0x01, 0xe1, //0x00001d19 addq %r12, %rcx + 0x48, 0x03, 0x4c, 0x24, 0x30, //0x00001d1c addq $48(%rsp), %rcx + 0xc5, 0xf8, 0x77, //0x00001d21 vzeroupper + 0x49, 0x89, 0xcc, //0x00001d24 movq %rcx, %r12 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00001d27 movq $-1, %rcx + 0x48, 0x8b, 0x14, 0x24, //0x00001d2e movq (%rsp), %rdx + 0x48, 0x85, 0xd2, //0x00001d32 testq %rdx, %rdx + 0x0f, 0x85, 0x8e, 0x00, 0x00, 0x00, //0x00001d35 jne LBB0_393 + 0xe9, 0xff, 0x19, 0x00, 0x00, //0x00001d3b jmp LBB0_674 + //0x00001d40 LBB0_381 + 0x49, 0x89, 0xf8, //0x00001d40 movq %rdi, %r8 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00001d43 movq $-1, %rcx + 0x48, 0x8b, 0x14, 0x24, //0x00001d4a movq (%rsp), %rdx + 0x48, 0x85, 0xd2, //0x00001d4e testq %rdx, %rdx + 0x0f, 0x85, 0x61, 0xf7, 0xff, 0xff, //0x00001d51 jne LBB0_252 + 0xe9, 0xc3, 0x17, 0x00, 0x00, //0x00001d57 jmp LBB0_644 + //0x00001d5c LBB0_382 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001d5c movl $64, %edx + //0x00001d61 LBB0_383 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00001d61 movq $8(%rsp), %r11 + 0x48, 0x39, 0xca, //0x00001d66 cmpq %rcx, %rdx + 0x0f, 0x82, 0x16, 0x1a, 0x00, 0x00, //0x00001d69 jb LBB0_223 + 0x49, 0x01, 0xcf, //0x00001d6f addq %rcx, %r15 + 0x49, 0x83, 0xc7, 0x01, //0x00001d72 addq $1, %r15 + //0x00001d76 LBB0_385 + 0x4d, 0x85, 0xff, //0x00001d76 testq %r15, %r15 + 0x0f, 0x89, 0xeb, 0xf6, 0xff, 0xff, //0x00001d79 jns LBB0_247 + 0xe9, 0x96, 0x10, 0x00, 0x00, //0x00001d7f jmp LBB0_386 + //0x00001d84 LBB0_389 + 0x0f, 0xbc, 0xc3, //0x00001d84 bsfl %ebx, %eax + 0xe9, 0x9a, 0x01, 0x00, 0x00, //0x00001d87 jmp LBB0_409 + //0x00001d8c LBB0_390 + 0x89, 0xc8, //0x00001d8c movl %ecx, %eax + 0x49, 0x01, 0xc4, //0x00001d8e addq %rax, %r12 + 0x4d, 0x01, 0xec, //0x00001d91 addq %r13, %r12 + 0x4c, 0x8b, 0x6c, 0x24, 0x38, //0x00001d94 movq $56(%rsp), %r13 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00001d99 movq $-1, %rcx + 0x48, 0x8b, 0x14, 0x24, //0x00001da0 movq (%rsp), %rdx + 0x48, 0x85, 0xd2, //0x00001da4 testq %rdx, %rdx + 0x0f, 0x85, 0x1c, 0x00, 0x00, 0x00, //0x00001da7 jne LBB0_393 + 0xe9, 0x8d, 0x19, 0x00, 0x00, //0x00001dad jmp LBB0_674 + //0x00001db2 LBB0_391 + 0x49, 0x01, 0xcc, //0x00001db2 addq %rcx, %r12 + //0x00001db5 LBB0_392 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00001db5 movq $-1, %rcx + 0x48, 0x8b, 0x14, 0x24, //0x00001dbc movq (%rsp), %rdx + 0x48, 0x85, 0xd2, //0x00001dc0 testq %rdx, %rdx + 0x0f, 0x84, 0x76, 0x19, 0x00, 0x00, //0x00001dc3 je LBB0_674 + //0x00001dc9 LBB0_393 + 0x4d, 0x85, 0xc0, //0x00001dc9 testq %r8, %r8 + 0x0f, 0x84, 0x6d, 0x19, 0x00, 0x00, //0x00001dcc je LBB0_674 + 0x4d, 0x85, 0xdb, //0x00001dd2 testq %r11, %r11 + 0x0f, 0x84, 0x64, 0x19, 0x00, 0x00, //0x00001dd5 je LBB0_674 + 0x4c, 0x2b, 0x64, 0x24, 0x30, //0x00001ddb subq $48(%rsp), %r12 + 0x49, 0x8d, 0x4c, 0x24, 0xff, //0x00001de0 leaq $-1(%r12), %rcx + 0x48, 0x39, 0xca, //0x00001de5 cmpq %rcx, %rdx + 0x0f, 0x84, 0x90, 0x00, 0x00, 0x00, //0x00001de8 je LBB0_401 + 0x49, 0x39, 0xc8, //0x00001dee cmpq %rcx, %r8 + 0x0f, 0x84, 0x87, 0x00, 0x00, 0x00, //0x00001df1 je LBB0_401 + 0x49, 0x39, 0xcb, //0x00001df7 cmpq %rcx, %r11 + 0x0f, 0x84, 0x7e, 0x00, 0x00, 0x00, //0x00001dfa je LBB0_401 + 0x4d, 0x85, 0xc0, //0x00001e00 testq %r8, %r8 + 0xc5, 0xfe, 0x6f, 0x2d, 0xf5, 0xe1, 0xff, 0xff, //0x00001e03 vmovdqu $-7691(%rip), %ymm5 /* LCPI0_0+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x6d, 0xe2, 0xff, 0xff, //0x00001e0b vmovdqu $-7571(%rip), %ymm6 /* LCPI0_7+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x85, 0xe2, 0xff, 0xff, //0x00001e13 vmovdqu $-7547(%rip), %ymm7 /* LCPI0_8+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0xfd, 0xe2, 0xff, 0xff, //0x00001e1b vmovdqu $-7427(%rip), %ymm8 /* LCPI0_13+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001e23 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0x10, 0xe3, 0xff, 0xff, //0x00001e28 vmovdqu $-7408(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0x28, 0xe3, 0xff, 0xff, //0x00001e30 vmovdqu $-7384(%rip), %ymm11 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x40, 0xe3, 0xff, 0xff, //0x00001e38 vmovdqu $-7360(%rip), %ymm12 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0x58, 0xe3, 0xff, 0xff, //0x00001e40 vmovdqu $-7336(%rip), %ymm13 /* LCPI0_17+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0xf0, 0xe1, 0xff, 0xff, //0x00001e48 vmovdqu $-7696(%rip), %ymm14 /* LCPI0_2+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0x68, 0xe3, 0xff, 0xff, //0x00001e50 vmovdqu $-7320(%rip), %ymm15 /* LCPI0_18+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x80, 0xe3, 0xff, 0xff, //0x00001e58 vmovdqu $-7296(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x0f, 0x8e, 0x82, 0x00, 0x00, 0x00, //0x00001e60 jle LBB0_404 + 0x49, 0x8d, 0x40, 0xff, //0x00001e66 leaq $-1(%r8), %rax + 0x49, 0x39, 0xc3, //0x00001e6a cmpq %rax, %r11 + 0x0f, 0x84, 0x75, 0x00, 0x00, 0x00, //0x00001e6d je LBB0_404 + 0x49, 0xf7, 0xd0, //0x00001e73 notq %r8 + 0x4d, 0x89, 0xc4, //0x00001e76 movq %r8, %r12 + 0xe9, 0xe8, 0x03, 0x00, 0x00, //0x00001e79 jmp LBB0_428 + //0x00001e7e LBB0_401 + 0x49, 0xf7, 0xdc, //0x00001e7e negq %r12 + //0x00001e81 LBB0_402 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00001e81 movq $8(%rsp), %r11 + //0x00001e86 LBB0_403 + 0xc5, 0xfe, 0x6f, 0x2d, 0x72, 0xe1, 0xff, 0xff, //0x00001e86 vmovdqu $-7822(%rip), %ymm5 /* LCPI0_0+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0xea, 0xe1, 0xff, 0xff, //0x00001e8e vmovdqu $-7702(%rip), %ymm6 /* LCPI0_7+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x02, 0xe2, 0xff, 0xff, //0x00001e96 vmovdqu $-7678(%rip), %ymm7 /* LCPI0_8+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x7a, 0xe2, 0xff, 0xff, //0x00001e9e vmovdqu $-7558(%rip), %ymm8 /* LCPI0_13+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001ea6 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0x8d, 0xe2, 0xff, 0xff, //0x00001eab vmovdqu $-7539(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0xa5, 0xe2, 0xff, 0xff, //0x00001eb3 vmovdqu $-7515(%rip), %ymm11 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0xbd, 0xe2, 0xff, 0xff, //0x00001ebb vmovdqu $-7491(%rip), %ymm12 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0xd5, 0xe2, 0xff, 0xff, //0x00001ec3 vmovdqu $-7467(%rip), %ymm13 /* LCPI0_17+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x6d, 0xe1, 0xff, 0xff, //0x00001ecb vmovdqu $-7827(%rip), %ymm14 /* LCPI0_2+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0xe5, 0xe2, 0xff, 0xff, //0x00001ed3 vmovdqu $-7451(%rip), %ymm15 /* LCPI0_18+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0xfd, 0xe2, 0xff, 0xff, //0x00001edb vmovdqu $-7427(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xe9, 0x83, 0x03, 0x00, 0x00, //0x00001ee3 jmp LBB0_429 + //0x00001ee8 LBB0_404 + 0x48, 0x89, 0xd0, //0x00001ee8 movq %rdx, %rax + 0x4c, 0x09, 0xd8, //0x00001eeb orq %r11, %rax + 0x0f, 0x99, 0xc1, //0x00001eee setns %cl + 0x0f, 0x88, 0xdf, 0x00, 0x00, 0x00, //0x00001ef1 js LBB0_410 + 0x4c, 0x39, 0xda, //0x00001ef7 cmpq %r11, %rdx + 0x0f, 0x8c, 0xd6, 0x00, 0x00, 0x00, //0x00001efa jl LBB0_410 + 0x48, 0xf7, 0xd2, //0x00001f00 notq %rdx + 0x49, 0x89, 0xd4, //0x00001f03 movq %rdx, %r12 + 0xe9, 0x5b, 0x03, 0x00, 0x00, //0x00001f06 jmp LBB0_428 + //0x00001f0b LBB0_407 + 0x4c, 0x8b, 0x44, 0x24, 0x10, //0x00001f0b movq $16(%rsp), %r8 + 0x4d, 0x29, 0xc6, //0x00001f10 subq %r8, %r14 + 0x49, 0x01, 0xf6, //0x00001f13 addq %rsi, %r14 + 0x49, 0x39, 0xfe, //0x00001f16 cmpq %rdi, %r14 + 0x0f, 0x82, 0x23, 0xea, 0xff, 0xff, //0x00001f19 jb LBB0_93 + 0xe9, 0xd5, 0x0e, 0x00, 0x00, //0x00001f1f jmp LBB0_573 + //0x00001f24 LBB0_408 + 0x89, 0xd0, //0x00001f24 movl %edx, %eax + //0x00001f26 LBB0_409 + 0x49, 0xf7, 0xd0, //0x00001f26 notq %r8 + 0x49, 0x29, 0xc0, //0x00001f29 subq %rax, %r8 + 0xe9, 0xdd, 0x00, 0x00, 0x00, //0x00001f2c jmp LBB0_413 + //0x00001f31 LBB0_111 + 0x4c, 0x03, 0x7c, 0x24, 0x10, //0x00001f31 addq $16(%rsp), %r15 + 0x48, 0x83, 0xfb, 0x20, //0x00001f36 cmpq $32, %rbx + 0x0f, 0x82, 0xf5, 0x04, 0x00, 0x00, //0x00001f3a jb LBB0_450 + //0x00001f40 LBB0_112 + 0xc4, 0xc1, 0x7e, 0x6f, 0x07, //0x00001f40 vmovdqu (%r15), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00001f45 vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf1, //0x00001f49 vpmovmskb %ymm1, %esi + 0xc5, 0xfd, 0x74, 0xc7, //0x00001f4d vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x00001f51 vpmovmskb %ymm0, %edx + 0x85, 0xd2, //0x00001f55 testl %edx, %edx + 0x0f, 0x85, 0x6d, 0x04, 0x00, 0x00, //0x00001f57 jne LBB0_446 + 0x4d, 0x85, 0xd2, //0x00001f5d testq %r10, %r10 + 0x0f, 0x85, 0x82, 0x04, 0x00, 0x00, //0x00001f60 jne LBB0_448 + 0x45, 0x31, 0xd2, //0x00001f66 xorl %r10d, %r10d + 0x48, 0x85, 0xf6, //0x00001f69 testq %rsi, %rsi + 0x0f, 0x84, 0xbb, 0x04, 0x00, 0x00, //0x00001f6c je LBB0_449 + //0x00001f72 LBB0_115 + 0x48, 0x0f, 0xbc, 0xc6, //0x00001f72 bsfq %rsi, %rax + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00001f76 subq $16(%rsp), %r15 + 0x49, 0x01, 0xc7, //0x00001f7b addq %rax, %r15 + 0x49, 0x83, 0xc7, 0x01, //0x00001f7e addq $1, %r15 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00001f82 movq $24(%rsp), %r10 + 0xe9, 0xd5, 0xf4, 0xff, 0xff, //0x00001f87 jmp LBB0_246 + //0x00001f8c LBB0_213 + 0x4c, 0x03, 0x7c, 0x24, 0x10, //0x00001f8c addq $16(%rsp), %r15 + 0x49, 0x83, 0xfd, 0x20, //0x00001f91 cmpq $32, %r13 + 0x0f, 0x82, 0x36, 0x03, 0x00, 0x00, //0x00001f95 jb LBB0_435 + //0x00001f9b LBB0_214 + 0xc4, 0xc1, 0x7e, 0x6f, 0x07, //0x00001f9b vmovdqu (%r15), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00001fa0 vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd1, //0x00001fa4 vpmovmskb %ymm1, %r10d + 0xc5, 0xfd, 0x74, 0xcf, //0x00001fa8 vpcmpeqb %ymm7, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00001fac vpmovmskb %ymm1, %edx + 0x85, 0xd2, //0x00001fb0 testl %edx, %edx + 0x0f, 0x85, 0x63, 0x05, 0x00, 0x00, //0x00001fb2 jne LBB0_463 + 0x4d, 0x85, 0xdb, //0x00001fb8 testq %r11, %r11 + 0x0f, 0x85, 0x78, 0x05, 0x00, 0x00, //0x00001fbb jne LBB0_465 + 0x45, 0x31, 0xdb, //0x00001fc1 xorl %r11d, %r11d + 0x4d, 0x85, 0xd2, //0x00001fc4 testq %r10, %r10 + 0x0f, 0x84, 0xb2, 0x05, 0x00, 0x00, //0x00001fc7 je LBB0_466 + //0x00001fcd LBB0_217 + 0x49, 0x0f, 0xbc, 0xd2, //0x00001fcd bsfq %r10, %rdx + 0xe9, 0xae, 0x05, 0x00, 0x00, //0x00001fd1 jmp LBB0_467 + //0x00001fd6 LBB0_410 + 0x49, 0x8d, 0x43, 0xff, //0x00001fd6 leaq $-1(%r11), %rax + 0x48, 0x39, 0xc2, //0x00001fda cmpq %rax, %rdx + 0x49, 0xf7, 0xd3, //0x00001fdd notq %r11 + 0x4d, 0x0f, 0x45, 0xdc, //0x00001fe0 cmovneq %r12, %r11 + 0x84, 0xc9, //0x00001fe4 testb %cl, %cl + 0x4d, 0x0f, 0x45, 0xe3, //0x00001fe6 cmovneq %r11, %r12 + 0xe9, 0x77, 0x02, 0x00, 0x00, //0x00001fea jmp LBB0_428 + //0x00001fef LBB0_411 + 0x0f, 0xbc, 0xc7, //0x00001fef bsfl %edi, %eax + 0xe9, 0x12, 0x01, 0x00, 0x00, //0x00001ff2 jmp LBB0_420 + //0x00001ff7 LBB0_412 + 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00001ff7 movq $16(%rsp), %rax + 0x48, 0x03, 0x44, 0x24, 0x28, //0x00001ffc addq $40(%rsp), %rax + 0x4c, 0x29, 0xc0, //0x00002001 subq %r8, %rax + 0x48, 0x29, 0xc8, //0x00002004 subq %rcx, %rax + 0x48, 0x83, 0xc0, 0xfe, //0x00002007 addq $-2, %rax + 0x49, 0x89, 0xc0, //0x0000200b movq %rax, %r8 + //0x0000200e LBB0_413 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x0000200e movq $8(%rsp), %r11 + 0x4d, 0x85, 0xc0, //0x00002013 testq %r8, %r8 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002016 movq $24(%rsp), %r10 + 0x0f, 0x89, 0x1a, 0xe7, 0xff, 0xff, //0x0000201b jns LBB0_414 + 0xe9, 0xf6, 0x14, 0x00, 0x00, //0x00002021 jmp LBB0_643 + //0x00002026 LBB0_135 + 0x4c, 0x03, 0x7c, 0x24, 0x10, //0x00002026 addq $16(%rsp), %r15 + 0x48, 0x83, 0xfb, 0x20, //0x0000202b cmpq $32, %rbx + 0x0f, 0x82, 0xd9, 0x06, 0x00, 0x00, //0x0000202f jb LBB0_488 + //0x00002035 LBB0_136 + 0xc4, 0xc1, 0x7e, 0x6f, 0x07, //0x00002035 vmovdqu (%r15), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x0000203a vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf1, //0x0000203e vpmovmskb %ymm1, %esi + 0xc5, 0xfd, 0x74, 0xc7, //0x00002042 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x00002046 vpmovmskb %ymm0, %edx + 0x85, 0xd2, //0x0000204a testl %edx, %edx + 0x0f, 0x85, 0x51, 0x06, 0x00, 0x00, //0x0000204c jne LBB0_484 + 0x4d, 0x85, 0xd2, //0x00002052 testq %r10, %r10 + 0x0f, 0x85, 0x66, 0x06, 0x00, 0x00, //0x00002055 jne LBB0_486 + 0x45, 0x31, 0xd2, //0x0000205b xorl %r10d, %r10d + 0x48, 0x85, 0xf6, //0x0000205e testq %rsi, %rsi + 0x0f, 0x84, 0x9f, 0x06, 0x00, 0x00, //0x00002061 je LBB0_487 + //0x00002067 LBB0_139 + 0x48, 0x0f, 0xbc, 0xc6, //0x00002067 bsfq %rsi, %rax + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x0000206b subq $16(%rsp), %r15 + 0x49, 0x01, 0xc7, //0x00002070 addq %rax, %r15 + 0x49, 0x83, 0xc7, 0x01, //0x00002073 addq $1, %r15 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002077 movq $24(%rsp), %r10 + 0xe9, 0x26, 0xf5, 0xff, 0xff, //0x0000207c jmp LBB0_265 + //0x00002081 LBB0_234 + 0x4c, 0x03, 0x7c, 0x24, 0x10, //0x00002081 addq $16(%rsp), %r15 + 0x48, 0x83, 0xfb, 0x20, //0x00002086 cmpq $32, %rbx + 0x0f, 0x82, 0xc2, 0x02, 0x00, 0x00, //0x0000208a jb LBB0_442 + //0x00002090 LBB0_235 + 0xc4, 0xc1, 0x7e, 0x6f, 0x07, //0x00002090 vmovdqu (%r15), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00002095 vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd1, //0x00002099 vpmovmskb %ymm1, %r10d + 0xc5, 0xfd, 0x74, 0xcf, //0x0000209d vpcmpeqb %ymm7, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x000020a1 vpmovmskb %ymm1, %edx + 0x85, 0xd2, //0x000020a5 testl %edx, %edx + 0x0f, 0x85, 0x47, 0x07, 0x00, 0x00, //0x000020a7 jne LBB0_501 + 0x4d, 0x85, 0xdb, //0x000020ad testq %r11, %r11 + 0x0f, 0x85, 0x5c, 0x07, 0x00, 0x00, //0x000020b0 jne LBB0_503 + 0x45, 0x31, 0xdb, //0x000020b6 xorl %r11d, %r11d + 0x4d, 0x85, 0xd2, //0x000020b9 testq %r10, %r10 + 0x0f, 0x84, 0x96, 0x07, 0x00, 0x00, //0x000020bc je LBB0_504 + //0x000020c2 LBB0_238 + 0x49, 0x0f, 0xbc, 0xd2, //0x000020c2 bsfq %r10, %rdx + 0xe9, 0x92, 0x07, 0x00, 0x00, //0x000020c6 jmp LBB0_505 + //0x000020cb LBB0_415 + 0x89, 0xd0, //0x000020cb movl %edx, %eax + 0xe9, 0x37, 0x00, 0x00, 0x00, //0x000020cd jmp LBB0_420 + //0x000020d2 LBB0_416 + 0x4d, 0x01, 0xc6, //0x000020d2 addq %r8, %r14 + 0x48, 0x85, 0xd2, //0x000020d5 testq %rdx, %rdx + 0x0f, 0x85, 0xfa, 0xe7, 0xff, 0xff, //0x000020d8 jne LBB0_86 + 0xe9, 0x34, 0xe8, 0xff, 0xff, //0x000020de jmp LBB0_91 + //0x000020e3 LBB0_417 + 0x49, 0x89, 0xd4, //0x000020e3 movq %rdx, %r12 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000020e6 movq $-1, %rcx + 0x48, 0x8b, 0x14, 0x24, //0x000020ed movq (%rsp), %rdx + 0x48, 0x85, 0xd2, //0x000020f1 testq %rdx, %rdx + 0x0f, 0x85, 0xcf, 0xfc, 0xff, 0xff, //0x000020f4 jne LBB0_393 + 0xe9, 0x40, 0x16, 0x00, 0x00, //0x000020fa jmp LBB0_674 + //0x000020ff LBB0_418 + 0x0f, 0xbc, 0xc3, //0x000020ff bsfl %ebx, %eax + 0xe9, 0x59, 0x01, 0x00, 0x00, //0x00002102 jmp LBB0_427 + //0x00002107 LBB0_419 + 0x89, 0xf8, //0x00002107 movl %edi, %eax + //0x00002109 LBB0_420 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002109 movq $16(%rsp), %rcx + 0x48, 0x03, 0x4c, 0x24, 0x28, //0x0000210e addq $40(%rsp), %rcx + 0x4c, 0x29, 0xc1, //0x00002113 subq %r8, %rcx + 0x48, 0x29, 0xc1, //0x00002116 subq %rax, %rcx + 0x4c, 0x29, 0xc9, //0x00002119 subq %r9, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x0000211c addq $-2, %rcx + 0x49, 0x89, 0xc8, //0x00002120 movq %rcx, %r8 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002123 movq $8(%rsp), %r11 + 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x00002128 movq $32(%rsp), %r9 + 0x4d, 0x85, 0xc0, //0x0000212d testq %r8, %r8 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002130 movq $24(%rsp), %r10 + 0x0f, 0x89, 0x00, 0xe6, 0xff, 0xff, //0x00002135 jns LBB0_414 + 0xe9, 0xdc, 0x13, 0x00, 0x00, //0x0000213b jmp LBB0_643 + //0x00002140 LBB0_277 + 0x4c, 0x03, 0x7c, 0x24, 0x10, //0x00002140 addq $16(%rsp), %r15 + 0x48, 0x83, 0xfb, 0x20, //0x00002145 cmpq $32, %rbx + 0x0f, 0x82, 0xf6, 0x09, 0x00, 0x00, //0x00002149 jb LBB0_533 + //0x0000214f LBB0_278 + 0xc4, 0xc1, 0x7e, 0x6f, 0x07, //0x0000214f vmovdqu (%r15), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00002154 vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf1, //0x00002158 vpmovmskb %ymm1, %esi + 0xc5, 0xfd, 0x74, 0xc7, //0x0000215c vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x00002160 vpmovmskb %ymm0, %edx + 0x85, 0xd2, //0x00002164 testl %edx, %edx + 0x0f, 0x85, 0x6e, 0x09, 0x00, 0x00, //0x00002166 jne LBB0_529 + 0x4d, 0x85, 0xd2, //0x0000216c testq %r10, %r10 + 0x0f, 0x85, 0x83, 0x09, 0x00, 0x00, //0x0000216f jne LBB0_531 + 0x45, 0x31, 0xd2, //0x00002175 xorl %r10d, %r10d + 0x48, 0x85, 0xf6, //0x00002178 testq %rsi, %rsi + 0x0f, 0x84, 0xbc, 0x09, 0x00, 0x00, //0x0000217b je LBB0_532 + //0x00002181 LBB0_281 + 0x48, 0x0f, 0xbc, 0xc6, //0x00002181 bsfq %rsi, %rax + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00002185 subq $16(%rsp), %r15 + 0x49, 0x01, 0xc7, //0x0000218a addq %rax, %r15 + 0x49, 0x83, 0xc7, 0x01, //0x0000218d addq $1, %r15 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002191 movq $24(%rsp), %r10 + 0xe9, 0xdb, 0xfb, 0xff, 0xff, //0x00002196 jmp LBB0_385 + //0x0000219b LBB0_318 + 0x4c, 0x03, 0x7c, 0x24, 0x10, //0x0000219b addq $16(%rsp), %r15 + 0x48, 0x83, 0xfb, 0x20, //0x000021a0 cmpq $32, %rbx + 0x0f, 0x82, 0x1c, 0x0b, 0x00, 0x00, //0x000021a4 jb LBB0_555 + //0x000021aa LBB0_319 + 0xc4, 0xc1, 0x7e, 0x6f, 0x07, //0x000021aa vmovdqu (%r15), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x000021af vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd1, //0x000021b3 vpmovmskb %ymm1, %r10d + 0xc5, 0xfd, 0x74, 0xcf, //0x000021b7 vpcmpeqb %ymm7, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x000021bb vpmovmskb %ymm1, %edx + 0x85, 0xd2, //0x000021bf testl %edx, %edx + 0x0f, 0x85, 0x3b, 0x0a, 0x00, 0x00, //0x000021c1 jne LBB0_546 + 0x4d, 0x85, 0xdb, //0x000021c7 testq %r11, %r11 + 0x0f, 0x85, 0x50, 0x0a, 0x00, 0x00, //0x000021ca jne LBB0_548 + 0x45, 0x31, 0xdb, //0x000021d0 xorl %r11d, %r11d + 0x4d, 0x85, 0xd2, //0x000021d3 testq %r10, %r10 + 0x0f, 0x84, 0x8a, 0x0a, 0x00, 0x00, //0x000021d6 je LBB0_549 + //0x000021dc LBB0_322 + 0x49, 0x0f, 0xbc, 0xd2, //0x000021dc bsfq %r10, %rdx + 0xe9, 0x86, 0x0a, 0x00, 0x00, //0x000021e0 jmp LBB0_550 + //0x000021e5 LBB0_421 + 0x0f, 0xbc, 0xc6, //0x000021e5 bsfl %esi, %eax + //0x000021e8 LBB0_422 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x000021e8 movq $16(%rsp), %rcx + 0x4c, 0x01, 0xf9, //0x000021ed addq %r15, %rcx + 0x4c, 0x29, 0xe1, //0x000021f0 subq %r12, %rcx + 0x48, 0x29, 0xc1, //0x000021f3 subq %rax, %rcx + 0x49, 0xf7, 0xd5, //0x000021f6 notq %r13 + 0x49, 0x01, 0xcd, //0x000021f9 addq %rcx, %r13 + 0x4d, 0x89, 0xec, //0x000021fc movq %r13, %r12 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x000021ff movq $8(%rsp), %r11 + 0x4c, 0x8b, 0x6c, 0x24, 0x38, //0x00002204 movq $56(%rsp), %r13 + 0x4c, 0x8b, 0x4c, 0x24, 0x20, //0x00002209 movq $32(%rsp), %r9 + 0xe9, 0x73, 0xfc, 0xff, 0xff, //0x0000220e jmp LBB0_403 + //0x00002213 LBB0_423 + 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00002213 movq $16(%rsp), %rax + 0x4c, 0x01, 0xf8, //0x00002218 addq %r15, %rax + 0x4c, 0x29, 0xe0, //0x0000221b subq %r12, %rax + 0x48, 0xf7, 0xd1, //0x0000221e notq %rcx + 0x48, 0x01, 0xc1, //0x00002221 addq %rax, %rcx + 0x49, 0x89, 0xcc, //0x00002224 movq %rcx, %r12 + 0xe9, 0x55, 0xfc, 0xff, 0xff, //0x00002227 jmp LBB0_402 + //0x0000222c LBB0_424 + 0x89, 0xd0, //0x0000222c movl %edx, %eax + 0xe9, 0x2d, 0x00, 0x00, 0x00, //0x0000222e jmp LBB0_427 + //0x00002233 LBB0_425 + 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002233 movq $-1, %r10 + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x0000223a movq $-1, (%rsp) + 0x4d, 0x89, 0xe0, //0x00002242 movq %r12, %r8 + 0x4c, 0x89, 0x4c, 0x24, 0x20, //0x00002245 movq %r9, $32(%rsp) + 0x49, 0x83, 0xfd, 0x10, //0x0000224a cmpq $16, %r13 + 0x48, 0x8b, 0x44, 0x24, 0x28, //0x0000224e movq $40(%rsp), %rax + 0x0f, 0x83, 0x2d, 0xeb, 0xff, 0xff, //0x00002253 jae LBB0_164 + 0xe9, 0xa9, 0xec, 0xff, 0xff, //0x00002259 jmp LBB0_182 + //0x0000225e LBB0_426 + 0x89, 0xf8, //0x0000225e movl %edi, %eax + //0x00002260 LBB0_427 + 0x49, 0xf7, 0xd4, //0x00002260 notq %r12 + 0x49, 0x29, 0xc4, //0x00002263 subq %rax, %r12 + //0x00002266 LBB0_428 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002266 movq $8(%rsp), %r11 + //0x0000226b LBB0_429 + 0x4d, 0x85, 0xe4, //0x0000226b testq %r12, %r12 + 0x0f, 0x88, 0xc8, 0x14, 0x00, 0x00, //0x0000226e js LBB0_673 + 0x49, 0x8b, 0x0b, //0x00002274 movq (%r11), %rcx + //0x00002277 LBB0_431 + 0x4c, 0x01, 0xe1, //0x00002277 addq %r12, %rcx + 0x49, 0x89, 0x0b, //0x0000227a movq %rcx, (%r11) + 0x4d, 0x85, 0xff, //0x0000227d testq %r15, %r15 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002280 movq $24(%rsp), %r10 + 0x0f, 0x8f, 0xd5, 0xe4, 0xff, 0xff, //0x00002285 jg LBB0_61 + 0xe9, 0xa3, 0x14, 0x00, 0x00, //0x0000228b jmp LBB0_432 + //0x00002290 LBB0_433 + 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00002290 movq $16(%rsp), %rax + 0x4e, 0x8d, 0x3c, 0x00, //0x00002295 leaq (%rax,%r8), %r15 + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002299 movq $-1, (%rsp) + 0x45, 0x31, 0xd2, //0x000022a1 xorl %r10d, %r10d + 0x48, 0x83, 0xfb, 0x20, //0x000022a4 cmpq $32, %rbx + 0x0f, 0x83, 0x92, 0xfc, 0xff, 0xff, //0x000022a8 jae LBB0_112 + 0xe9, 0x82, 0x01, 0x00, 0x00, //0x000022ae jmp LBB0_450 + //0x000022b3 LBB0_434 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x000022b3 movq $16(%rsp), %rcx + 0x4e, 0x8d, 0x3c, 0x01, //0x000022b8 leaq (%rcx,%r8), %r15 + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x000022bc movq $-1, (%rsp) + 0x45, 0x31, 0xdb, //0x000022c4 xorl %r11d, %r11d + 0x49, 0x83, 0xfd, 0x20, //0x000022c7 cmpq $32, %r13 + 0x0f, 0x83, 0xca, 0xfc, 0xff, 0xff, //0x000022cb jae LBB0_214 + //0x000022d1 LBB0_435 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000022d1 movq $24(%rsp), %r10 + 0xe9, 0x09, 0x03, 0x00, 0x00, //0x000022d6 jmp LBB0_472 + //0x000022db LBB0_436 + 0x89, 0xf0, //0x000022db movl %esi, %eax + 0xe9, 0x06, 0xff, 0xff, 0xff, //0x000022dd jmp LBB0_422 + //0x000022e2 LBB0_437 + 0x89, 0xf0, //0x000022e2 movl %esi, %eax + 0xe9, 0x02, 0x00, 0x00, 0x00, //0x000022e4 jmp LBB0_439 + //0x000022e9 LBB0_438 + 0x89, 0xd0, //0x000022e9 movl %edx, %eax + //0x000022eb LBB0_439 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x000022eb movq $16(%rsp), %rcx + 0x4c, 0x01, 0xf9, //0x000022f0 addq %r15, %rcx + 0x4c, 0x29, 0xe1, //0x000022f3 subq %r12, %rcx + 0x48, 0x29, 0xc1, //0x000022f6 subq %rax, %rcx + 0x49, 0xf7, 0xd5, //0x000022f9 notq %r13 + 0x49, 0x01, 0xcd, //0x000022fc addq %rcx, %r13 + 0x4d, 0x89, 0xec, //0x000022ff movq %r13, %r12 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002302 movq $8(%rsp), %r11 + 0x4c, 0x8b, 0x6c, 0x24, 0x38, //0x00002307 movq $56(%rsp), %r13 + 0xe9, 0x75, 0xfb, 0xff, 0xff, //0x0000230c jmp LBB0_403 + //0x00002311 LBB0_440 + 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00002311 movq $16(%rsp), %rax + 0x4e, 0x8d, 0x3c, 0x00, //0x00002316 leaq (%rax,%r8), %r15 + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x0000231a movq $-1, (%rsp) + 0x45, 0x31, 0xd2, //0x00002322 xorl %r10d, %r10d + 0x48, 0x83, 0xfb, 0x20, //0x00002325 cmpq $32, %rbx + 0x0f, 0x83, 0x06, 0xfd, 0xff, 0xff, //0x00002329 jae LBB0_136 + 0xe9, 0xda, 0x03, 0x00, 0x00, //0x0000232f jmp LBB0_488 + //0x00002334 LBB0_441 + 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00002334 movq $16(%rsp), %rax + 0x4e, 0x8d, 0x3c, 0x00, //0x00002339 leaq (%rax,%r8), %r15 + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x0000233d movq $-1, (%rsp) + 0x45, 0x31, 0xdb, //0x00002345 xorl %r11d, %r11d + 0x48, 0x83, 0xfb, 0x20, //0x00002348 cmpq $32, %rbx + 0x0f, 0x83, 0x3e, 0xfd, 0xff, 0xff, //0x0000234c jae LBB0_235 + //0x00002352 LBB0_442 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002352 movq $24(%rsp), %r10 + 0xe9, 0x61, 0x05, 0x00, 0x00, //0x00002357 jmp LBB0_510 + //0x0000235c LBB0_443 + 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x0000235c movq $-1, %r11 + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002363 movq $-1, (%rsp) + 0x4c, 0x8b, 0x64, 0x24, 0x30, //0x0000236b movq $48(%rsp), %r12 + 0x4c, 0x89, 0x6c, 0x24, 0x38, //0x00002370 movq %r13, $56(%rsp) + 0x49, 0x83, 0xfa, 0x10, //0x00002375 cmpq $16, %r10 + 0x0f, 0x83, 0xb4, 0xf7, 0xff, 0xff, //0x00002379 jae LBB0_349 + 0xe9, 0xe9, 0xf8, 0xff, 0xff, //0x0000237f jmp LBB0_367 + //0x00002384 LBB0_444 + 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00002384 movq $16(%rsp), %rax + 0x4e, 0x8d, 0x3c, 0x00, //0x00002389 leaq (%rax,%r8), %r15 + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x0000238d movq $-1, (%rsp) + 0x45, 0x31, 0xd2, //0x00002395 xorl %r10d, %r10d + 0x48, 0x83, 0xfb, 0x20, //0x00002398 cmpq $32, %rbx + 0x0f, 0x83, 0xad, 0xfd, 0xff, 0xff, //0x0000239c jae LBB0_278 + 0xe9, 0x9e, 0x07, 0x00, 0x00, //0x000023a2 jmp LBB0_533 + //0x000023a7 LBB0_445 + 0x48, 0x8b, 0x44, 0x24, 0x10, //0x000023a7 movq $16(%rsp), %rax + 0x4e, 0x8d, 0x3c, 0x00, //0x000023ac leaq (%rax,%r8), %r15 + 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x000023b0 movq $-1, (%rsp) + 0x45, 0x31, 0xdb, //0x000023b8 xorl %r11d, %r11d + 0x48, 0x83, 0xfb, 0x20, //0x000023bb cmpq $32, %rbx + 0x0f, 0x83, 0xe5, 0xfd, 0xff, 0xff, //0x000023bf jae LBB0_319 + 0xe9, 0xfc, 0x08, 0x00, 0x00, //0x000023c5 jmp LBB0_555 + //0x000023ca LBB0_446 + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x000023ca cmpq $-1, (%rsp) + 0x0f, 0x85, 0x13, 0x00, 0x00, 0x00, //0x000023cf jne LBB0_448 + 0x4c, 0x89, 0xf8, //0x000023d5 movq %r15, %rax + 0x48, 0x2b, 0x44, 0x24, 0x10, //0x000023d8 subq $16(%rsp), %rax + 0x48, 0x0f, 0xbc, 0xca, //0x000023dd bsfq %rdx, %rcx + 0x48, 0x01, 0xc1, //0x000023e1 addq %rax, %rcx + 0x48, 0x89, 0x0c, 0x24, //0x000023e4 movq %rcx, (%rsp) + //0x000023e8 LBB0_448 + 0x44, 0x89, 0xd0, //0x000023e8 movl %r10d, %eax + 0xf7, 0xd0, //0x000023eb notl %eax + 0x21, 0xd0, //0x000023ed andl %edx, %eax + 0x8d, 0x0c, 0x00, //0x000023ef leal (%rax,%rax), %ecx + 0x41, 0x8d, 0x3c, 0x42, //0x000023f2 leal (%r10,%rax,2), %edi + 0xf7, 0xd1, //0x000023f6 notl %ecx + 0x21, 0xd1, //0x000023f8 andl %edx, %ecx + 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x000023fa andl $-1431655766, %ecx + 0x45, 0x31, 0xd2, //0x00002400 xorl %r10d, %r10d + 0x01, 0xc1, //0x00002403 addl %eax, %ecx + 0x41, 0x0f, 0x92, 0xc2, //0x00002405 setb %r10b + 0x01, 0xc9, //0x00002409 addl %ecx, %ecx + 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x0000240b xorl $1431655765, %ecx + 0x21, 0xf9, //0x00002411 andl %edi, %ecx + 0xf7, 0xd1, //0x00002413 notl %ecx + 0x21, 0xce, //0x00002415 andl %ecx, %esi + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002417 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xbc, 0xdd, 0xff, 0xff, //0x0000241c vmovdqu $-8772(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x48, 0x85, 0xf6, //0x00002424 testq %rsi, %rsi + 0x0f, 0x85, 0x45, 0xfb, 0xff, 0xff, //0x00002427 jne LBB0_115 + //0x0000242d LBB0_449 + 0x49, 0x83, 0xc7, 0x20, //0x0000242d addq $32, %r15 + 0x48, 0x83, 0xc3, 0xe0, //0x00002431 addq $-32, %rbx + //0x00002435 LBB0_450 + 0x4d, 0x85, 0xd2, //0x00002435 testq %r10, %r10 + 0x0f, 0x85, 0x38, 0x05, 0x00, 0x00, //0x00002438 jne LBB0_521 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x0000243e movq $16(%rsp), %rcx + 0x48, 0xf7, 0xd1, //0x00002443 notq %rcx + 0x48, 0x8b, 0x3c, 0x24, //0x00002446 movq (%rsp), %rdi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x0000244a movq $24(%rsp), %r10 + 0x48, 0x85, 0xdb, //0x0000244f testq %rbx, %rbx + 0x0f, 0x84, 0x96, 0x00, 0x00, 0x00, //0x00002452 je LBB0_462 + //0x00002458 LBB0_452 + 0x48, 0x83, 0xc1, 0x01, //0x00002458 addq $1, %rcx + //0x0000245c LBB0_453 + 0x31, 0xf6, //0x0000245c xorl %esi, %esi + //0x0000245e LBB0_454 + 0x41, 0x0f, 0xb6, 0x14, 0x37, //0x0000245e movzbl (%r15,%rsi), %edx + 0x80, 0xfa, 0x22, //0x00002463 cmpb $34, %dl + 0x0f, 0x84, 0x7b, 0x00, 0x00, 0x00, //0x00002466 je LBB0_461 + 0x80, 0xfa, 0x5c, //0x0000246c cmpb $92, %dl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x0000246f je LBB0_459 + 0x48, 0x83, 0xc6, 0x01, //0x00002475 addq $1, %rsi + 0x48, 0x39, 0xf3, //0x00002479 cmpq %rsi, %rbx + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x0000247c jne LBB0_454 + 0xe9, 0x71, 0x00, 0x00, 0x00, //0x00002482 jmp LBB0_457 + //0x00002487 LBB0_459 + 0x48, 0x8d, 0x43, 0xff, //0x00002487 leaq $-1(%rbx), %rax + 0x48, 0x39, 0xf0, //0x0000248b cmpq %rsi, %rax + 0x0f, 0x84, 0x94, 0x09, 0x00, 0x00, //0x0000248e je LBB0_387 + 0x4a, 0x8d, 0x04, 0x39, //0x00002494 leaq (%rcx,%r15), %rax + 0x48, 0x01, 0xf0, //0x00002498 addq %rsi, %rax + 0x48, 0x83, 0xff, 0xff, //0x0000249b cmpq $-1, %rdi + 0x48, 0x8b, 0x14, 0x24, //0x0000249f movq (%rsp), %rdx + 0x48, 0x0f, 0x44, 0xd0, //0x000024a3 cmoveq %rax, %rdx + 0x48, 0x89, 0x14, 0x24, //0x000024a7 movq %rdx, (%rsp) + 0x48, 0x0f, 0x44, 0xf8, //0x000024ab cmoveq %rax, %rdi + 0x49, 0x01, 0xf7, //0x000024af addq %rsi, %r15 + 0x49, 0x83, 0xc7, 0x02, //0x000024b2 addq $2, %r15 + 0x48, 0x89, 0xd8, //0x000024b6 movq %rbx, %rax + 0x48, 0x29, 0xf0, //0x000024b9 subq %rsi, %rax + 0x48, 0x83, 0xc0, 0xfe, //0x000024bc addq $-2, %rax + 0x48, 0x83, 0xc3, 0xfe, //0x000024c0 addq $-2, %rbx + 0x48, 0x39, 0xf3, //0x000024c4 cmpq %rsi, %rbx + 0x48, 0x89, 0xc3, //0x000024c7 movq %rax, %rbx + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000024ca movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000024cf vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x04, 0xdd, 0xff, 0xff, //0x000024d4 vmovdqu $-8956(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x0f, 0x85, 0x7a, 0xff, 0xff, 0xff, //0x000024dc jne LBB0_453 + 0xe9, 0x41, 0x09, 0x00, 0x00, //0x000024e2 jmp LBB0_387 + //0x000024e7 LBB0_461 + 0x49, 0x01, 0xf7, //0x000024e7 addq %rsi, %r15 + 0x49, 0x83, 0xc7, 0x01, //0x000024ea addq $1, %r15 + //0x000024ee LBB0_462 + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x000024ee subq $16(%rsp), %r15 + 0xe9, 0x69, 0xef, 0xff, 0xff, //0x000024f3 jmp LBB0_246 + //0x000024f8 LBB0_457 + 0x80, 0xfa, 0x22, //0x000024f8 cmpb $34, %dl + 0x0f, 0x85, 0x27, 0x09, 0x00, 0x00, //0x000024fb jne LBB0_387 + 0x49, 0x01, 0xdf, //0x00002501 addq %rbx, %r15 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002504 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002509 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xca, 0xdc, 0xff, 0xff, //0x0000250e vmovdqu $-9014(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xe9, 0xd3, 0xff, 0xff, 0xff, //0x00002516 jmp LBB0_462 + //0x0000251b LBB0_463 + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x0000251b cmpq $-1, (%rsp) + 0x0f, 0x85, 0x13, 0x00, 0x00, 0x00, //0x00002520 jne LBB0_465 + 0x4c, 0x89, 0xf9, //0x00002526 movq %r15, %rcx + 0x48, 0x2b, 0x4c, 0x24, 0x10, //0x00002529 subq $16(%rsp), %rcx + 0x48, 0x0f, 0xbc, 0xf2, //0x0000252e bsfq %rdx, %rsi + 0x48, 0x01, 0xce, //0x00002532 addq %rcx, %rsi + 0x48, 0x89, 0x34, 0x24, //0x00002535 movq %rsi, (%rsp) + //0x00002539 LBB0_465 + 0x44, 0x89, 0xd9, //0x00002539 movl %r11d, %ecx + 0xf7, 0xd1, //0x0000253c notl %ecx + 0x21, 0xd1, //0x0000253e andl %edx, %ecx + 0x8d, 0x34, 0x09, //0x00002540 leal (%rcx,%rcx), %esi + 0x41, 0x8d, 0x3c, 0x4b, //0x00002543 leal (%r11,%rcx,2), %edi + 0xf7, 0xd6, //0x00002547 notl %esi + 0x21, 0xd6, //0x00002549 andl %edx, %esi + 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000254b andl $-1431655766, %esi + 0x45, 0x31, 0xdb, //0x00002551 xorl %r11d, %r11d + 0x01, 0xce, //0x00002554 addl %ecx, %esi + 0x41, 0x0f, 0x92, 0xc3, //0x00002556 setb %r11b + 0x01, 0xf6, //0x0000255a addl %esi, %esi + 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x0000255c xorl $1431655765, %esi + 0x21, 0xfe, //0x00002562 andl %edi, %esi + 0xf7, 0xd6, //0x00002564 notl %esi + 0x41, 0x21, 0xf2, //0x00002566 andl %esi, %r10d + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002569 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x6a, 0xdc, 0xff, 0xff, //0x0000256e vmovdqu $-9110(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x4d, 0x85, 0xd2, //0x00002576 testq %r10, %r10 + 0x0f, 0x85, 0x4e, 0xfa, 0xff, 0xff, //0x00002579 jne LBB0_217 + //0x0000257f LBB0_466 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000257f movl $64, %edx + //0x00002584 LBB0_467 + 0xc5, 0xbd, 0x64, 0xc8, //0x00002584 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00002588 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x0000258d vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00002591 vpmovmskb %ymm0, %esi + 0x0f, 0xbc, 0xfe, //0x00002595 bsfl %esi, %edi + 0x4d, 0x85, 0xd2, //0x00002598 testq %r10, %r10 + 0x0f, 0x84, 0x2e, 0x00, 0x00, 0x00, //0x0000259b je LBB0_470 + 0x85, 0xf6, //0x000025a1 testl %esi, %esi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x000025a3 movl $64, %ecx + 0x0f, 0x44, 0xf9, //0x000025a8 cmovel %ecx, %edi + 0x48, 0x39, 0xfa, //0x000025ab cmpq %rdi, %rdx + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000025ae movq $24(%rsp), %r10 + 0x0f, 0x87, 0x1a, 0x12, 0x00, 0x00, //0x000025b3 ja LBB0_683 + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x000025b9 subq $16(%rsp), %r15 + 0x49, 0x01, 0xd7, //0x000025be addq %rdx, %r15 + 0x49, 0x83, 0xc7, 0x01, //0x000025c1 addq $1, %r15 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x000025c5 movq $8(%rsp), %r11 + 0xe9, 0xc9, 0x00, 0x00, 0x00, //0x000025ca jmp LBB0_483 + //0x000025cf LBB0_470 + 0x85, 0xf6, //0x000025cf testl %esi, %esi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000025d1 movq $24(%rsp), %r10 + 0x0f, 0x85, 0x09, 0x12, 0x00, 0x00, //0x000025d6 jne LBB0_688 + 0x49, 0x83, 0xc7, 0x20, //0x000025dc addq $32, %r15 + 0x49, 0x83, 0xc5, 0xe0, //0x000025e0 addq $-32, %r13 + //0x000025e4 LBB0_472 + 0x4d, 0x85, 0xdb, //0x000025e4 testq %r11, %r11 + 0x0f, 0x85, 0xe3, 0x03, 0x00, 0x00, //0x000025e7 jne LBB0_523 + 0x48, 0x8b, 0x0c, 0x24, //0x000025ed movq (%rsp), %rcx + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x000025f1 movq $8(%rsp), %r11 + 0x4d, 0x85, 0xed, //0x000025f6 testq %r13, %r13 + 0x0f, 0x84, 0x29, 0x08, 0x00, 0x00, //0x000025f9 je LBB0_387 + //0x000025ff LBB0_474 + 0x41, 0x0f, 0xb6, 0x17, //0x000025ff movzbl (%r15), %edx + 0x80, 0xfa, 0x22, //0x00002603 cmpb $34, %dl + 0x0f, 0x84, 0x83, 0x00, 0x00, 0x00, //0x00002606 je LBB0_482 + 0x80, 0xfa, 0x5c, //0x0000260c cmpb $92, %dl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x0000260f je LBB0_478 + 0x80, 0xfa, 0x1f, //0x00002615 cmpb $31, %dl + 0x0f, 0x86, 0xd3, 0x11, 0x00, 0x00, //0x00002618 jbe LBB0_684 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000261e movq $-1, %rdx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002625 movl $1, %esi + 0x49, 0x01, 0xf7, //0x0000262a addq %rsi, %r15 + 0x49, 0x01, 0xd5, //0x0000262d addq %rdx, %r13 + 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x00002630 jne LBB0_474 + 0xe9, 0xed, 0x07, 0x00, 0x00, //0x00002636 jmp LBB0_387 + //0x0000263b LBB0_478 + 0x49, 0x83, 0xfd, 0x01, //0x0000263b cmpq $1, %r13 + 0x0f, 0x84, 0xa7, 0x07, 0x00, 0x00, //0x0000263f je LBB0_571 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00002645 movq $-2, %rdx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x0000264c movl $2, %esi + 0x48, 0x83, 0xf9, 0xff, //0x00002651 cmpq $-1, %rcx + 0x0f, 0x85, 0x0c, 0x00, 0x00, 0x00, //0x00002655 jne LBB0_481 + 0x4c, 0x89, 0xf9, //0x0000265b movq %r15, %rcx + 0x48, 0x2b, 0x4c, 0x24, 0x10, //0x0000265e subq $16(%rsp), %rcx + 0x48, 0x89, 0x0c, 0x24, //0x00002663 movq %rcx, (%rsp) + //0x00002667 LBB0_481 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002667 movq $8(%rsp), %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x0000266c movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002671 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x62, 0xdb, 0xff, 0xff, //0x00002676 vmovdqu $-9374(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x49, 0x01, 0xf7, //0x0000267e addq %rsi, %r15 + 0x49, 0x01, 0xd5, //0x00002681 addq %rdx, %r13 + 0x0f, 0x85, 0x75, 0xff, 0xff, 0xff, //0x00002684 jne LBB0_474 + 0xe9, 0x99, 0x07, 0x00, 0x00, //0x0000268a jmp LBB0_387 + //0x0000268f LBB0_482 + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x0000268f subq $16(%rsp), %r15 + 0x49, 0x83, 0xc7, 0x01, //0x00002694 addq $1, %r15 + //0x00002698 LBB0_483 + 0x4d, 0x89, 0xcd, //0x00002698 movq %r9, %r13 + 0x49, 0x89, 0xc1, //0x0000269b movq %rax, %r9 + 0xe9, 0xbe, 0xed, 0xff, 0xff, //0x0000269e jmp LBB0_246 + //0x000026a3 LBB0_484 + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x000026a3 cmpq $-1, (%rsp) + 0x0f, 0x85, 0x13, 0x00, 0x00, 0x00, //0x000026a8 jne LBB0_486 + 0x4c, 0x89, 0xf8, //0x000026ae movq %r15, %rax + 0x48, 0x2b, 0x44, 0x24, 0x10, //0x000026b1 subq $16(%rsp), %rax + 0x48, 0x0f, 0xbc, 0xca, //0x000026b6 bsfq %rdx, %rcx + 0x48, 0x01, 0xc1, //0x000026ba addq %rax, %rcx + 0x48, 0x89, 0x0c, 0x24, //0x000026bd movq %rcx, (%rsp) + //0x000026c1 LBB0_486 + 0x44, 0x89, 0xd0, //0x000026c1 movl %r10d, %eax + 0xf7, 0xd0, //0x000026c4 notl %eax + 0x21, 0xd0, //0x000026c6 andl %edx, %eax + 0x8d, 0x0c, 0x00, //0x000026c8 leal (%rax,%rax), %ecx + 0x41, 0x8d, 0x3c, 0x42, //0x000026cb leal (%r10,%rax,2), %edi + 0xf7, 0xd1, //0x000026cf notl %ecx + 0x21, 0xd1, //0x000026d1 andl %edx, %ecx + 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x000026d3 andl $-1431655766, %ecx + 0x45, 0x31, 0xd2, //0x000026d9 xorl %r10d, %r10d + 0x01, 0xc1, //0x000026dc addl %eax, %ecx + 0x41, 0x0f, 0x92, 0xc2, //0x000026de setb %r10b + 0x01, 0xc9, //0x000026e2 addl %ecx, %ecx + 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x000026e4 xorl $1431655765, %ecx + 0x21, 0xf9, //0x000026ea andl %edi, %ecx + 0xf7, 0xd1, //0x000026ec notl %ecx + 0x21, 0xce, //0x000026ee andl %ecx, %esi + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000026f0 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xe3, 0xda, 0xff, 0xff, //0x000026f5 vmovdqu $-9501(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x48, 0x85, 0xf6, //0x000026fd testq %rsi, %rsi + 0x0f, 0x85, 0x61, 0xf9, 0xff, 0xff, //0x00002700 jne LBB0_139 + //0x00002706 LBB0_487 + 0x49, 0x83, 0xc7, 0x20, //0x00002706 addq $32, %r15 + 0x48, 0x83, 0xc3, 0xe0, //0x0000270a addq $-32, %rbx + //0x0000270e LBB0_488 + 0x4d, 0x85, 0xd2, //0x0000270e testq %r10, %r10 + 0x0f, 0x85, 0x11, 0x03, 0x00, 0x00, //0x00002711 jne LBB0_525 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002717 movq $16(%rsp), %rcx + 0x48, 0xf7, 0xd1, //0x0000271c notq %rcx + 0x48, 0x8b, 0x3c, 0x24, //0x0000271f movq (%rsp), %rdi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002723 movq $24(%rsp), %r10 + 0x48, 0x85, 0xdb, //0x00002728 testq %rbx, %rbx + 0x0f, 0x84, 0x96, 0x00, 0x00, 0x00, //0x0000272b je LBB0_500 + //0x00002731 LBB0_490 + 0x48, 0x83, 0xc1, 0x01, //0x00002731 addq $1, %rcx + //0x00002735 LBB0_491 + 0x31, 0xf6, //0x00002735 xorl %esi, %esi + //0x00002737 LBB0_492 + 0x41, 0x0f, 0xb6, 0x14, 0x37, //0x00002737 movzbl (%r15,%rsi), %edx + 0x80, 0xfa, 0x22, //0x0000273c cmpb $34, %dl + 0x0f, 0x84, 0x7b, 0x00, 0x00, 0x00, //0x0000273f je LBB0_499 + 0x80, 0xfa, 0x5c, //0x00002745 cmpb $92, %dl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002748 je LBB0_497 + 0x48, 0x83, 0xc6, 0x01, //0x0000274e addq $1, %rsi + 0x48, 0x39, 0xf3, //0x00002752 cmpq %rsi, %rbx + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x00002755 jne LBB0_492 + 0xe9, 0x71, 0x00, 0x00, 0x00, //0x0000275b jmp LBB0_495 + //0x00002760 LBB0_497 + 0x48, 0x8d, 0x43, 0xff, //0x00002760 leaq $-1(%rbx), %rax + 0x48, 0x39, 0xf0, //0x00002764 cmpq %rsi, %rax + 0x0f, 0x84, 0xbb, 0x06, 0x00, 0x00, //0x00002767 je LBB0_387 + 0x4a, 0x8d, 0x04, 0x39, //0x0000276d leaq (%rcx,%r15), %rax + 0x48, 0x01, 0xf0, //0x00002771 addq %rsi, %rax + 0x48, 0x83, 0xff, 0xff, //0x00002774 cmpq $-1, %rdi + 0x48, 0x8b, 0x14, 0x24, //0x00002778 movq (%rsp), %rdx + 0x48, 0x0f, 0x44, 0xd0, //0x0000277c cmoveq %rax, %rdx + 0x48, 0x89, 0x14, 0x24, //0x00002780 movq %rdx, (%rsp) + 0x48, 0x0f, 0x44, 0xf8, //0x00002784 cmoveq %rax, %rdi + 0x49, 0x01, 0xf7, //0x00002788 addq %rsi, %r15 + 0x49, 0x83, 0xc7, 0x02, //0x0000278b addq $2, %r15 + 0x48, 0x89, 0xd8, //0x0000278f movq %rbx, %rax + 0x48, 0x29, 0xf0, //0x00002792 subq %rsi, %rax + 0x48, 0x83, 0xc0, 0xfe, //0x00002795 addq $-2, %rax + 0x48, 0x83, 0xc3, 0xfe, //0x00002799 addq $-2, %rbx + 0x48, 0x39, 0xf3, //0x0000279d cmpq %rsi, %rbx + 0x48, 0x89, 0xc3, //0x000027a0 movq %rax, %rbx + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000027a3 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000027a8 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x2b, 0xda, 0xff, 0xff, //0x000027ad vmovdqu $-9685(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x0f, 0x85, 0x7a, 0xff, 0xff, 0xff, //0x000027b5 jne LBB0_491 + 0xe9, 0x68, 0x06, 0x00, 0x00, //0x000027bb jmp LBB0_387 + //0x000027c0 LBB0_499 + 0x49, 0x01, 0xf7, //0x000027c0 addq %rsi, %r15 + 0x49, 0x83, 0xc7, 0x01, //0x000027c3 addq $1, %r15 + //0x000027c7 LBB0_500 + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x000027c7 subq $16(%rsp), %r15 + 0xe9, 0xd6, 0xed, 0xff, 0xff, //0x000027cc jmp LBB0_265 + //0x000027d1 LBB0_495 + 0x80, 0xfa, 0x22, //0x000027d1 cmpb $34, %dl + 0x0f, 0x85, 0x4e, 0x06, 0x00, 0x00, //0x000027d4 jne LBB0_387 + 0x49, 0x01, 0xdf, //0x000027da addq %rbx, %r15 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000027dd movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000027e2 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xf1, 0xd9, 0xff, 0xff, //0x000027e7 vmovdqu $-9743(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xe9, 0xd3, 0xff, 0xff, 0xff, //0x000027ef jmp LBB0_500 + //0x000027f4 LBB0_501 + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x000027f4 cmpq $-1, (%rsp) + 0x0f, 0x85, 0x13, 0x00, 0x00, 0x00, //0x000027f9 jne LBB0_503 + 0x4c, 0x89, 0xf8, //0x000027ff movq %r15, %rax + 0x48, 0x2b, 0x44, 0x24, 0x10, //0x00002802 subq $16(%rsp), %rax + 0x48, 0x0f, 0xbc, 0xca, //0x00002807 bsfq %rdx, %rcx + 0x48, 0x01, 0xc1, //0x0000280b addq %rax, %rcx + 0x48, 0x89, 0x0c, 0x24, //0x0000280e movq %rcx, (%rsp) + //0x00002812 LBB0_503 + 0x44, 0x89, 0xd8, //0x00002812 movl %r11d, %eax + 0xf7, 0xd0, //0x00002815 notl %eax + 0x21, 0xd0, //0x00002817 andl %edx, %eax + 0x8d, 0x0c, 0x00, //0x00002819 leal (%rax,%rax), %ecx + 0x41, 0x8d, 0x34, 0x43, //0x0000281c leal (%r11,%rax,2), %esi + 0xf7, 0xd1, //0x00002820 notl %ecx + 0x21, 0xd1, //0x00002822 andl %edx, %ecx + 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002824 andl $-1431655766, %ecx + 0x45, 0x31, 0xdb, //0x0000282a xorl %r11d, %r11d + 0x01, 0xc1, //0x0000282d addl %eax, %ecx + 0x41, 0x0f, 0x92, 0xc3, //0x0000282f setb %r11b + 0x01, 0xc9, //0x00002833 addl %ecx, %ecx + 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00002835 xorl $1431655765, %ecx + 0x21, 0xf1, //0x0000283b andl %esi, %ecx + 0xf7, 0xd1, //0x0000283d notl %ecx + 0x41, 0x21, 0xca, //0x0000283f andl %ecx, %r10d + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002842 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x91, 0xd9, 0xff, 0xff, //0x00002847 vmovdqu $-9839(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x4d, 0x85, 0xd2, //0x0000284f testq %r10, %r10 + 0x0f, 0x85, 0x6a, 0xf8, 0xff, 0xff, //0x00002852 jne LBB0_238 + //0x00002858 LBB0_504 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002858 movl $64, %edx + //0x0000285d LBB0_505 + 0xc5, 0xbd, 0x64, 0xc8, //0x0000285d vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00002861 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00002866 vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x0000286a vpmovmskb %ymm0, %esi + 0x0f, 0xbc, 0xfe, //0x0000286e bsfl %esi, %edi + 0x4d, 0x85, 0xd2, //0x00002871 testq %r10, %r10 + 0x0f, 0x84, 0x2e, 0x00, 0x00, 0x00, //0x00002874 je LBB0_508 + 0x85, 0xf6, //0x0000287a testl %esi, %esi + 0xb8, 0x40, 0x00, 0x00, 0x00, //0x0000287c movl $64, %eax + 0x0f, 0x44, 0xf8, //0x00002881 cmovel %eax, %edi + 0x48, 0x39, 0xfa, //0x00002884 cmpq %rdi, %rdx + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002887 movq $24(%rsp), %r10 + 0x0f, 0x87, 0x76, 0x0f, 0x00, 0x00, //0x0000288c ja LBB0_687 + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00002892 subq $16(%rsp), %r15 + 0x49, 0x01, 0xd7, //0x00002897 addq %rdx, %r15 + 0x49, 0x83, 0xc7, 0x01, //0x0000289a addq $1, %r15 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x0000289e movq $8(%rsp), %r11 + 0xe9, 0xff, 0xec, 0xff, 0xff, //0x000028a3 jmp LBB0_265 + //0x000028a8 LBB0_508 + 0x85, 0xf6, //0x000028a8 testl %esi, %esi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000028aa movq $24(%rsp), %r10 + 0x0f, 0x85, 0x30, 0x0f, 0x00, 0x00, //0x000028af jne LBB0_688 + 0x49, 0x83, 0xc7, 0x20, //0x000028b5 addq $32, %r15 + 0x48, 0x83, 0xc3, 0xe0, //0x000028b9 addq $-32, %rbx + //0x000028bd LBB0_510 + 0x4d, 0x85, 0xdb, //0x000028bd testq %r11, %r11 + 0x0f, 0x85, 0xbc, 0x01, 0x00, 0x00, //0x000028c0 jne LBB0_527 + 0x48, 0x8b, 0x0c, 0x24, //0x000028c6 movq (%rsp), %rcx + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x000028ca movq $8(%rsp), %r11 + 0x48, 0x85, 0xdb, //0x000028cf testq %rbx, %rbx + 0x0f, 0x84, 0x50, 0x05, 0x00, 0x00, //0x000028d2 je LBB0_387 + //0x000028d8 LBB0_512 + 0x41, 0x0f, 0xb6, 0x17, //0x000028d8 movzbl (%r15), %edx + 0x80, 0xfa, 0x22, //0x000028dc cmpb $34, %dl + 0x0f, 0x84, 0x83, 0x00, 0x00, 0x00, //0x000028df je LBB0_520 + 0x80, 0xfa, 0x5c, //0x000028e5 cmpb $92, %dl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x000028e8 je LBB0_516 + 0x80, 0xfa, 0x1f, //0x000028ee cmpb $31, %dl + 0x0f, 0x86, 0xfa, 0x0e, 0x00, 0x00, //0x000028f1 jbe LBB0_684 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000028f7 movq $-1, %rdx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x000028fe movl $1, %esi + 0x49, 0x01, 0xf7, //0x00002903 addq %rsi, %r15 + 0x48, 0x01, 0xd3, //0x00002906 addq %rdx, %rbx + 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x00002909 jne LBB0_512 + 0xe9, 0x14, 0x05, 0x00, 0x00, //0x0000290f jmp LBB0_387 + //0x00002914 LBB0_516 + 0x48, 0x83, 0xfb, 0x01, //0x00002914 cmpq $1, %rbx + 0x0f, 0x84, 0xce, 0x04, 0x00, 0x00, //0x00002918 je LBB0_571 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x0000291e movq $-2, %rdx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002925 movl $2, %esi + 0x48, 0x83, 0xf9, 0xff, //0x0000292a cmpq $-1, %rcx + 0x0f, 0x85, 0x0c, 0x00, 0x00, 0x00, //0x0000292e jne LBB0_519 + 0x4c, 0x89, 0xf9, //0x00002934 movq %r15, %rcx + 0x48, 0x2b, 0x4c, 0x24, 0x10, //0x00002937 subq $16(%rsp), %rcx + 0x48, 0x89, 0x0c, 0x24, //0x0000293c movq %rcx, (%rsp) + //0x00002940 LBB0_519 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002940 movq $8(%rsp), %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002945 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000294a vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x89, 0xd8, 0xff, 0xff, //0x0000294f vmovdqu $-10103(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x49, 0x01, 0xf7, //0x00002957 addq %rsi, %r15 + 0x48, 0x01, 0xd3, //0x0000295a addq %rdx, %rbx + 0x0f, 0x85, 0x75, 0xff, 0xff, 0xff, //0x0000295d jne LBB0_512 + 0xe9, 0xc0, 0x04, 0x00, 0x00, //0x00002963 jmp LBB0_387 + //0x00002968 LBB0_520 + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00002968 subq $16(%rsp), %r15 + 0x49, 0x83, 0xc7, 0x01, //0x0000296d addq $1, %r15 + 0xe9, 0x31, 0xec, 0xff, 0xff, //0x00002971 jmp LBB0_265 + //0x00002976 LBB0_521 + 0x48, 0x85, 0xdb, //0x00002976 testq %rbx, %rbx + 0x0f, 0x84, 0xa9, 0x04, 0x00, 0x00, //0x00002979 je LBB0_387 + 0x4c, 0x89, 0xca, //0x0000297f movq %r9, %rdx + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002982 movq $16(%rsp), %rcx + 0x48, 0xf7, 0xd1, //0x00002987 notq %rcx + 0x49, 0x8d, 0x04, 0x0f, //0x0000298a leaq (%r15,%rcx), %rax + 0x4c, 0x8b, 0x0c, 0x24, //0x0000298e movq (%rsp), %r9 + 0x49, 0x83, 0xf9, 0xff, //0x00002992 cmpq $-1, %r9 + 0x4c, 0x89, 0xcf, //0x00002996 movq %r9, %rdi + 0x4c, 0x0f, 0x44, 0xc8, //0x00002999 cmoveq %rax, %r9 + 0x48, 0x0f, 0x44, 0xf8, //0x0000299d cmoveq %rax, %rdi + 0x49, 0x83, 0xc7, 0x01, //0x000029a1 addq $1, %r15 + 0x48, 0x83, 0xc3, 0xff, //0x000029a5 addq $-1, %rbx + 0x4c, 0x89, 0x0c, 0x24, //0x000029a9 movq %r9, (%rsp) + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000029ad movq $24(%rsp), %r10 + 0x49, 0x89, 0xd1, //0x000029b2 movq %rdx, %r9 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000029b5 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x1e, 0xd8, 0xff, 0xff, //0x000029ba vmovdqu $-10210(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x48, 0x85, 0xdb, //0x000029c2 testq %rbx, %rbx + 0x0f, 0x85, 0x8d, 0xfa, 0xff, 0xff, //0x000029c5 jne LBB0_452 + 0xe9, 0x1e, 0xfb, 0xff, 0xff, //0x000029cb jmp LBB0_462 + //0x000029d0 LBB0_523 + 0x4d, 0x85, 0xed, //0x000029d0 testq %r13, %r13 + 0x0f, 0x84, 0x13, 0x04, 0x00, 0x00, //0x000029d3 je LBB0_571 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x000029d9 movq $16(%rsp), %rcx + 0x48, 0xf7, 0xd1, //0x000029de notq %rcx + 0x4c, 0x01, 0xf9, //0x000029e1 addq %r15, %rcx + 0x48, 0x8b, 0x34, 0x24, //0x000029e4 movq (%rsp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x000029e8 cmpq $-1, %rsi + 0x48, 0x89, 0xf2, //0x000029ec movq %rsi, %rdx + 0x48, 0x0f, 0x44, 0xd1, //0x000029ef cmoveq %rcx, %rdx + 0x48, 0x0f, 0x45, 0xce, //0x000029f3 cmovneq %rsi, %rcx + 0x49, 0x83, 0xc7, 0x01, //0x000029f7 addq $1, %r15 + 0x49, 0x83, 0xc5, 0xff, //0x000029fb addq $-1, %r13 + 0x48, 0x89, 0x14, 0x24, //0x000029ff movq %rdx, (%rsp) + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002a03 movq $8(%rsp), %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002a08 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002a0d vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xc6, 0xd7, 0xff, 0xff, //0x00002a12 vmovdqu $-10298(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x4d, 0x85, 0xed, //0x00002a1a testq %r13, %r13 + 0x0f, 0x85, 0xdc, 0xfb, 0xff, 0xff, //0x00002a1d jne LBB0_474 + 0xe9, 0x00, 0x04, 0x00, 0x00, //0x00002a23 jmp LBB0_387 + //0x00002a28 LBB0_525 + 0x48, 0x85, 0xdb, //0x00002a28 testq %rbx, %rbx + 0x0f, 0x84, 0xf7, 0x03, 0x00, 0x00, //0x00002a2b je LBB0_387 + 0x4c, 0x89, 0xca, //0x00002a31 movq %r9, %rdx + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002a34 movq $16(%rsp), %rcx + 0x48, 0xf7, 0xd1, //0x00002a39 notq %rcx + 0x49, 0x8d, 0x04, 0x0f, //0x00002a3c leaq (%r15,%rcx), %rax + 0x4c, 0x8b, 0x0c, 0x24, //0x00002a40 movq (%rsp), %r9 + 0x49, 0x83, 0xf9, 0xff, //0x00002a44 cmpq $-1, %r9 + 0x4c, 0x89, 0xcf, //0x00002a48 movq %r9, %rdi + 0x4c, 0x0f, 0x44, 0xc8, //0x00002a4b cmoveq %rax, %r9 + 0x48, 0x0f, 0x44, 0xf8, //0x00002a4f cmoveq %rax, %rdi + 0x49, 0x83, 0xc7, 0x01, //0x00002a53 addq $1, %r15 + 0x48, 0x83, 0xc3, 0xff, //0x00002a57 addq $-1, %rbx + 0x4c, 0x89, 0x0c, 0x24, //0x00002a5b movq %r9, (%rsp) + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002a5f movq $24(%rsp), %r10 + 0x49, 0x89, 0xd1, //0x00002a64 movq %rdx, %r9 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002a67 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x6c, 0xd7, 0xff, 0xff, //0x00002a6c vmovdqu $-10388(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x48, 0x85, 0xdb, //0x00002a74 testq %rbx, %rbx + 0x0f, 0x85, 0xb4, 0xfc, 0xff, 0xff, //0x00002a77 jne LBB0_490 + 0xe9, 0x45, 0xfd, 0xff, 0xff, //0x00002a7d jmp LBB0_500 + //0x00002a82 LBB0_527 + 0x48, 0x85, 0xdb, //0x00002a82 testq %rbx, %rbx + 0x0f, 0x84, 0x61, 0x03, 0x00, 0x00, //0x00002a85 je LBB0_571 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002a8b movq $16(%rsp), %rcx + 0x48, 0xf7, 0xd1, //0x00002a90 notq %rcx + 0x4c, 0x01, 0xf9, //0x00002a93 addq %r15, %rcx + 0x48, 0x8b, 0x14, 0x24, //0x00002a96 movq (%rsp), %rdx + 0x48, 0x83, 0xfa, 0xff, //0x00002a9a cmpq $-1, %rdx + 0x48, 0x89, 0xd0, //0x00002a9e movq %rdx, %rax + 0x48, 0x0f, 0x44, 0xc1, //0x00002aa1 cmoveq %rcx, %rax + 0x48, 0x0f, 0x45, 0xca, //0x00002aa5 cmovneq %rdx, %rcx + 0x49, 0x83, 0xc7, 0x01, //0x00002aa9 addq $1, %r15 + 0x48, 0x83, 0xc3, 0xff, //0x00002aad addq $-1, %rbx + 0x48, 0x89, 0x04, 0x24, //0x00002ab1 movq %rax, (%rsp) + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002ab5 movq $8(%rsp), %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002aba movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002abf vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x14, 0xd7, 0xff, 0xff, //0x00002ac4 vmovdqu $-10476(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x48, 0x85, 0xdb, //0x00002acc testq %rbx, %rbx + 0x0f, 0x85, 0x03, 0xfe, 0xff, 0xff, //0x00002acf jne LBB0_512 + 0xe9, 0x4e, 0x03, 0x00, 0x00, //0x00002ad5 jmp LBB0_387 + //0x00002ada LBB0_529 + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00002ada cmpq $-1, (%rsp) + 0x0f, 0x85, 0x13, 0x00, 0x00, 0x00, //0x00002adf jne LBB0_531 + 0x4c, 0x89, 0xf8, //0x00002ae5 movq %r15, %rax + 0x48, 0x2b, 0x44, 0x24, 0x10, //0x00002ae8 subq $16(%rsp), %rax + 0x48, 0x0f, 0xbc, 0xca, //0x00002aed bsfq %rdx, %rcx + 0x48, 0x01, 0xc1, //0x00002af1 addq %rax, %rcx + 0x48, 0x89, 0x0c, 0x24, //0x00002af4 movq %rcx, (%rsp) + //0x00002af8 LBB0_531 + 0x44, 0x89, 0xd0, //0x00002af8 movl %r10d, %eax + 0xf7, 0xd0, //0x00002afb notl %eax + 0x21, 0xd0, //0x00002afd andl %edx, %eax + 0x8d, 0x0c, 0x00, //0x00002aff leal (%rax,%rax), %ecx + 0x41, 0x8d, 0x3c, 0x42, //0x00002b02 leal (%r10,%rax,2), %edi + 0xf7, 0xd1, //0x00002b06 notl %ecx + 0x21, 0xd1, //0x00002b08 andl %edx, %ecx + 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002b0a andl $-1431655766, %ecx + 0x45, 0x31, 0xd2, //0x00002b10 xorl %r10d, %r10d + 0x01, 0xc1, //0x00002b13 addl %eax, %ecx + 0x41, 0x0f, 0x92, 0xc2, //0x00002b15 setb %r10b + 0x01, 0xc9, //0x00002b19 addl %ecx, %ecx + 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00002b1b xorl $1431655765, %ecx + 0x21, 0xf9, //0x00002b21 andl %edi, %ecx + 0xf7, 0xd1, //0x00002b23 notl %ecx + 0x21, 0xce, //0x00002b25 andl %ecx, %esi + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002b27 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xac, 0xd6, 0xff, 0xff, //0x00002b2c vmovdqu $-10580(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x48, 0x85, 0xf6, //0x00002b34 testq %rsi, %rsi + 0x0f, 0x85, 0x44, 0xf6, 0xff, 0xff, //0x00002b37 jne LBB0_281 + //0x00002b3d LBB0_532 + 0x49, 0x83, 0xc7, 0x20, //0x00002b3d addq $32, %r15 + 0x48, 0x83, 0xc3, 0xe0, //0x00002b41 addq $-32, %rbx + //0x00002b45 LBB0_533 + 0x4d, 0x85, 0xd2, //0x00002b45 testq %r10, %r10 + 0x0f, 0x85, 0x20, 0x02, 0x00, 0x00, //0x00002b48 jne LBB0_567 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002b4e movq $16(%rsp), %rcx + 0x48, 0xf7, 0xd1, //0x00002b53 notq %rcx + 0x48, 0x8b, 0x3c, 0x24, //0x00002b56 movq (%rsp), %rdi + 0x48, 0x85, 0xdb, //0x00002b5a testq %rbx, %rbx + 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x00002b5d je LBB0_545 + //0x00002b63 LBB0_535 + 0x48, 0x83, 0xc1, 0x01, //0x00002b63 addq $1, %rcx + //0x00002b67 LBB0_536 + 0x31, 0xf6, //0x00002b67 xorl %esi, %esi + //0x00002b69 LBB0_537 + 0x41, 0x0f, 0xb6, 0x14, 0x37, //0x00002b69 movzbl (%r15,%rsi), %edx + 0x80, 0xfa, 0x22, //0x00002b6e cmpb $34, %dl + 0x0f, 0x84, 0x69, 0x00, 0x00, 0x00, //0x00002b71 je LBB0_544 + 0x80, 0xfa, 0x5c, //0x00002b77 cmpb $92, %dl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002b7a je LBB0_542 + 0x48, 0x83, 0xc6, 0x01, //0x00002b80 addq $1, %rsi + 0x48, 0x39, 0xf3, //0x00002b84 cmpq %rsi, %rbx + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x00002b87 jne LBB0_537 + 0xe9, 0x5f, 0x00, 0x00, 0x00, //0x00002b8d jmp LBB0_540 + //0x00002b92 LBB0_542 + 0x48, 0x8d, 0x43, 0xff, //0x00002b92 leaq $-1(%rbx), %rax + 0x48, 0x39, 0xf0, //0x00002b96 cmpq %rsi, %rax + 0x0f, 0x84, 0x89, 0x02, 0x00, 0x00, //0x00002b99 je LBB0_387 + 0x4a, 0x8d, 0x04, 0x39, //0x00002b9f leaq (%rcx,%r15), %rax + 0x48, 0x01, 0xf0, //0x00002ba3 addq %rsi, %rax + 0x48, 0x83, 0xff, 0xff, //0x00002ba6 cmpq $-1, %rdi + 0x48, 0x8b, 0x14, 0x24, //0x00002baa movq (%rsp), %rdx + 0x48, 0x0f, 0x44, 0xd0, //0x00002bae cmoveq %rax, %rdx + 0x48, 0x89, 0x14, 0x24, //0x00002bb2 movq %rdx, (%rsp) + 0x48, 0x0f, 0x44, 0xf8, //0x00002bb6 cmoveq %rax, %rdi + 0x49, 0x01, 0xf7, //0x00002bba addq %rsi, %r15 + 0x49, 0x83, 0xc7, 0x02, //0x00002bbd addq $2, %r15 + 0x48, 0x89, 0xd8, //0x00002bc1 movq %rbx, %rax + 0x48, 0x29, 0xf0, //0x00002bc4 subq %rsi, %rax + 0x48, 0x83, 0xc0, 0xfe, //0x00002bc7 addq $-2, %rax + 0x48, 0x83, 0xc3, 0xfe, //0x00002bcb addq $-2, %rbx + 0x48, 0x39, 0xf3, //0x00002bcf cmpq %rsi, %rbx + 0x48, 0x89, 0xc3, //0x00002bd2 movq %rax, %rbx + 0x0f, 0x85, 0x8c, 0xff, 0xff, 0xff, //0x00002bd5 jne LBB0_536 + 0xe9, 0x48, 0x02, 0x00, 0x00, //0x00002bdb jmp LBB0_387 + //0x00002be0 LBB0_544 + 0x49, 0x01, 0xf7, //0x00002be0 addq %rsi, %r15 + 0x49, 0x83, 0xc7, 0x01, //0x00002be3 addq $1, %r15 + //0x00002be7 LBB0_545 + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00002be7 subq $16(%rsp), %r15 + 0xe9, 0x66, 0x01, 0x00, 0x00, //0x00002bec jmp LBB0_566 + //0x00002bf1 LBB0_540 + 0x80, 0xfa, 0x22, //0x00002bf1 cmpb $34, %dl + 0x0f, 0x85, 0x2e, 0x02, 0x00, 0x00, //0x00002bf4 jne LBB0_387 + 0x49, 0x01, 0xdf, //0x00002bfa addq %rbx, %r15 + 0xe9, 0xe5, 0xff, 0xff, 0xff, //0x00002bfd jmp LBB0_545 + //0x00002c02 LBB0_546 + 0x48, 0x83, 0x3c, 0x24, 0xff, //0x00002c02 cmpq $-1, (%rsp) + 0x0f, 0x85, 0x13, 0x00, 0x00, 0x00, //0x00002c07 jne LBB0_548 + 0x4c, 0x89, 0xf8, //0x00002c0d movq %r15, %rax + 0x48, 0x2b, 0x44, 0x24, 0x10, //0x00002c10 subq $16(%rsp), %rax + 0x48, 0x0f, 0xbc, 0xca, //0x00002c15 bsfq %rdx, %rcx + 0x48, 0x01, 0xc1, //0x00002c19 addq %rax, %rcx + 0x48, 0x89, 0x0c, 0x24, //0x00002c1c movq %rcx, (%rsp) + //0x00002c20 LBB0_548 + 0x44, 0x89, 0xd8, //0x00002c20 movl %r11d, %eax + 0xf7, 0xd0, //0x00002c23 notl %eax + 0x21, 0xd0, //0x00002c25 andl %edx, %eax + 0x8d, 0x0c, 0x00, //0x00002c27 leal (%rax,%rax), %ecx + 0x41, 0x8d, 0x34, 0x43, //0x00002c2a leal (%r11,%rax,2), %esi + 0xf7, 0xd1, //0x00002c2e notl %ecx + 0x21, 0xd1, //0x00002c30 andl %edx, %ecx + 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002c32 andl $-1431655766, %ecx + 0x45, 0x31, 0xdb, //0x00002c38 xorl %r11d, %r11d + 0x01, 0xc1, //0x00002c3b addl %eax, %ecx + 0x41, 0x0f, 0x92, 0xc3, //0x00002c3d setb %r11b + 0x01, 0xc9, //0x00002c41 addl %ecx, %ecx + 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00002c43 xorl $1431655765, %ecx + 0x21, 0xf1, //0x00002c49 andl %esi, %ecx + 0xf7, 0xd1, //0x00002c4b notl %ecx + 0x41, 0x21, 0xca, //0x00002c4d andl %ecx, %r10d + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002c50 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x83, 0xd5, 0xff, 0xff, //0x00002c55 vmovdqu $-10877(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x4d, 0x85, 0xd2, //0x00002c5d testq %r10, %r10 + 0x0f, 0x85, 0x76, 0xf5, 0xff, 0xff, //0x00002c60 jne LBB0_322 + //0x00002c66 LBB0_549 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002c66 movl $64, %edx + //0x00002c6b LBB0_550 + 0xc5, 0xbd, 0x64, 0xc8, //0x00002c6b vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00002c6f vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00002c74 vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00002c78 vpmovmskb %ymm0, %esi + 0x0f, 0xbc, 0xfe, //0x00002c7c bsfl %esi, %edi + 0x4d, 0x85, 0xd2, //0x00002c7f testq %r10, %r10 + 0x0f, 0x84, 0x2e, 0x00, 0x00, 0x00, //0x00002c82 je LBB0_553 + 0x85, 0xf6, //0x00002c88 testl %esi, %esi + 0xb8, 0x40, 0x00, 0x00, 0x00, //0x00002c8a movl $64, %eax + 0x0f, 0x44, 0xf8, //0x00002c8f cmovel %eax, %edi + 0x48, 0x39, 0xfa, //0x00002c92 cmpq %rdi, %rdx + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002c95 movq $24(%rsp), %r10 + 0x0f, 0x87, 0x68, 0x0b, 0x00, 0x00, //0x00002c9a ja LBB0_687 + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00002ca0 subq $16(%rsp), %r15 + 0x49, 0x01, 0xd7, //0x00002ca5 addq %rdx, %r15 + 0x49, 0x83, 0xc7, 0x01, //0x00002ca8 addq $1, %r15 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002cac movq $8(%rsp), %r11 + 0xe9, 0xc0, 0xf0, 0xff, 0xff, //0x00002cb1 jmp LBB0_385 + //0x00002cb6 LBB0_553 + 0x85, 0xf6, //0x00002cb6 testl %esi, %esi + 0x0f, 0x85, 0x27, 0x0b, 0x00, 0x00, //0x00002cb8 jne LBB0_688 + 0x49, 0x83, 0xc7, 0x20, //0x00002cbe addq $32, %r15 + 0x48, 0x83, 0xc3, 0xe0, //0x00002cc2 addq $-32, %rbx + //0x00002cc6 LBB0_555 + 0x4d, 0x85, 0xdb, //0x00002cc6 testq %r11, %r11 + 0x0f, 0x85, 0xe1, 0x00, 0x00, 0x00, //0x00002cc9 jne LBB0_569 + 0x48, 0x8b, 0x0c, 0x24, //0x00002ccf movq (%rsp), %rcx + 0x48, 0x85, 0xdb, //0x00002cd3 testq %rbx, %rbx + 0x0f, 0x84, 0x10, 0x01, 0x00, 0x00, //0x00002cd6 je LBB0_571 + //0x00002cdc LBB0_557 + 0x41, 0x0f, 0xb6, 0x17, //0x00002cdc movzbl (%r15), %edx + 0x80, 0xfa, 0x22, //0x00002ce0 cmpb $34, %dl + 0x0f, 0x84, 0x60, 0x00, 0x00, 0x00, //0x00002ce3 je LBB0_565 + 0x80, 0xfa, 0x5c, //0x00002ce9 cmpb $92, %dl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002cec je LBB0_562 + 0x80, 0xfa, 0x1f, //0x00002cf2 cmpb $31, %dl + 0x0f, 0x86, 0x43, 0x0b, 0x00, 0x00, //0x00002cf5 jbe LBB0_689 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002cfb movq $-1, %rdx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002d02 movl $1, %esi + //0x00002d07 LBB0_561 + 0x49, 0x01, 0xf7, //0x00002d07 addq %rsi, %r15 + 0x48, 0x01, 0xd3, //0x00002d0a addq %rdx, %rbx + 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x00002d0d jne LBB0_557 + 0xe9, 0xd4, 0x00, 0x00, 0x00, //0x00002d13 jmp LBB0_571 + //0x00002d18 LBB0_562 + 0x48, 0x83, 0xfb, 0x01, //0x00002d18 cmpq $1, %rbx + 0x0f, 0x84, 0xca, 0x00, 0x00, 0x00, //0x00002d1c je LBB0_571 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00002d22 movq $-2, %rdx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002d29 movl $2, %esi + 0x48, 0x83, 0xf9, 0xff, //0x00002d2e cmpq $-1, %rcx + 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00002d32 jne LBB0_561 + 0x4c, 0x89, 0xf9, //0x00002d38 movq %r15, %rcx + 0x48, 0x2b, 0x4c, 0x24, 0x10, //0x00002d3b subq $16(%rsp), %rcx + 0x48, 0x89, 0x0c, 0x24, //0x00002d40 movq %rcx, (%rsp) + 0xe9, 0xbe, 0xff, 0xff, 0xff, //0x00002d44 jmp LBB0_561 + //0x00002d49 LBB0_565 + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x00002d49 subq $16(%rsp), %r15 + 0x49, 0x83, 0xc7, 0x01, //0x00002d4e addq $1, %r15 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002d52 movq $8(%rsp), %r11 + //0x00002d57 LBB0_566 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002d57 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002d5c vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x77, 0xd4, 0xff, 0xff, //0x00002d61 vmovdqu $-11145(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xe9, 0x08, 0xf0, 0xff, 0xff, //0x00002d69 jmp LBB0_385 + //0x00002d6e LBB0_567 + 0x48, 0x85, 0xdb, //0x00002d6e testq %rbx, %rbx + 0x0f, 0x84, 0xb1, 0x00, 0x00, 0x00, //0x00002d71 je LBB0_387 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002d77 movq $16(%rsp), %rcx + 0x48, 0xf7, 0xd1, //0x00002d7c notq %rcx + 0x49, 0x8d, 0x04, 0x0f, //0x00002d7f leaq (%r15,%rcx), %rax + 0x48, 0x8b, 0x14, 0x24, //0x00002d83 movq (%rsp), %rdx + 0x48, 0x83, 0xfa, 0xff, //0x00002d87 cmpq $-1, %rdx + 0x48, 0x89, 0xd7, //0x00002d8b movq %rdx, %rdi + 0x48, 0x0f, 0x44, 0xd0, //0x00002d8e cmoveq %rax, %rdx + 0x48, 0x0f, 0x44, 0xf8, //0x00002d92 cmoveq %rax, %rdi + 0x49, 0x83, 0xc7, 0x01, //0x00002d96 addq $1, %r15 + 0x48, 0x83, 0xc3, 0xff, //0x00002d9a addq $-1, %rbx + 0x48, 0x89, 0x14, 0x24, //0x00002d9e movq %rdx, (%rsp) + 0x48, 0x85, 0xdb, //0x00002da2 testq %rbx, %rbx + 0x0f, 0x85, 0xb8, 0xfd, 0xff, 0xff, //0x00002da5 jne LBB0_535 + 0xe9, 0x37, 0xfe, 0xff, 0xff, //0x00002dab jmp LBB0_545 + //0x00002db0 LBB0_569 + 0x48, 0x85, 0xdb, //0x00002db0 testq %rbx, %rbx + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00002db3 je LBB0_571 + 0x48, 0x8b, 0x4c, 0x24, 0x10, //0x00002db9 movq $16(%rsp), %rcx + 0x48, 0xf7, 0xd1, //0x00002dbe notq %rcx + 0x4c, 0x01, 0xf9, //0x00002dc1 addq %r15, %rcx + 0x48, 0x8b, 0x14, 0x24, //0x00002dc4 movq (%rsp), %rdx + 0x48, 0x83, 0xfa, 0xff, //0x00002dc8 cmpq $-1, %rdx + 0x48, 0x89, 0xd0, //0x00002dcc movq %rdx, %rax + 0x48, 0x0f, 0x44, 0xc1, //0x00002dcf cmoveq %rcx, %rax + 0x48, 0x0f, 0x45, 0xca, //0x00002dd3 cmovneq %rdx, %rcx + 0x49, 0x83, 0xc7, 0x01, //0x00002dd7 addq $1, %r15 + 0x48, 0x83, 0xc3, 0xff, //0x00002ddb addq $-1, %rbx + 0x48, 0x89, 0x04, 0x24, //0x00002ddf movq %rax, (%rsp) + 0x48, 0x85, 0xdb, //0x00002de3 testq %rbx, %rbx + 0x0f, 0x85, 0xf0, 0xfe, 0xff, 0xff, //0x00002de6 jne LBB0_557 + //0x00002dec LBB0_571 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x00002dec movq $8(%rsp), %r11 + 0xe9, 0x32, 0x00, 0x00, 0x00, //0x00002df1 jmp LBB0_387 + //0x00002df6 LBB0_572 + 0x4d, 0x89, 0x33, //0x00002df6 movq %r14, (%r11) + //0x00002df9 LBB0_573 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002df9 movq $-1, %r15 + 0xe9, 0x33, 0x07, 0x00, 0x00, //0x00002e00 jmp LBB0_646 + //0x00002e05 LBB0_574 + 0x48, 0x8d, 0x48, 0x04, //0x00002e05 leaq $4(%rax), %rcx + 0xe9, 0x36, 0x01, 0x00, 0x00, //0x00002e09 jmp LBB0_589 + //0x00002e0e LBB0_662 + 0x49, 0xc7, 0xc7, 0xf9, 0xff, 0xff, 0xff, //0x00002e0e movq $-7, %r15 + 0xe9, 0x1e, 0x07, 0x00, 0x00, //0x00002e15 jmp LBB0_646 + //0x00002e1a LBB0_386 + 0x49, 0x83, 0xff, 0xff, //0x00002e1a cmpq $-1, %r15 + 0x48, 0x8b, 0x14, 0x24, //0x00002e1e movq (%rsp), %rdx + 0x0f, 0x85, 0x0a, 0x00, 0x00, 0x00, //0x00002e22 jne LBB0_388 + //0x00002e28 LBB0_387 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002e28 movq $-1, %r15 + 0x4c, 0x89, 0xe2, //0x00002e2f movq %r12, %rdx + //0x00002e32 LBB0_388 + 0x49, 0x89, 0x13, //0x00002e32 movq %rdx, (%r11) + 0xe9, 0xfe, 0x06, 0x00, 0x00, //0x00002e35 jmp LBB0_646 + //0x00002e3a LBB0_248 + 0x49, 0x83, 0xc0, 0xff, //0x00002e3a addq $-1, %r8 + 0x4d, 0x89, 0xc7, //0x00002e3e movq %r8, %r15 + 0xe9, 0xf2, 0x06, 0x00, 0x00, //0x00002e41 jmp LBB0_646 + //0x00002e46 LBB0_575 + 0x49, 0x89, 0x03, //0x00002e46 movq %rax, (%r11) + 0xe9, 0xe3, 0x06, 0x00, 0x00, //0x00002e49 jmp LBB0_645 + //0x00002e4e LBB0_576 + 0x4c, 0x89, 0xe9, //0x00002e4e movq %r13, %rcx + 0x4d, 0x89, 0xdd, //0x00002e51 movq %r11, %r13 + 0x4c, 0x8b, 0x41, 0x08, //0x00002e54 movq $8(%rcx), %r8 + 0x4d, 0x89, 0xc6, //0x00002e58 movq %r8, %r14 + 0x49, 0x29, 0xd6, //0x00002e5b subq %rdx, %r14 + 0x49, 0x83, 0xfe, 0x20, //0x00002e5e cmpq $32, %r14 + 0x0f, 0x8c, 0x52, 0x09, 0x00, 0x00, //0x00002e62 jl LBB0_681 + 0x4d, 0x8d, 0x0c, 0x02, //0x00002e68 leaq (%r10,%rax), %r9 + 0x49, 0x29, 0xc0, //0x00002e6c subq %rax, %r8 + 0xbb, 0x1f, 0x00, 0x00, 0x00, //0x00002e6f movl $31, %ebx + 0x45, 0x31, 0xf6, //0x00002e74 xorl %r14d, %r14d + 0xc5, 0xfe, 0x6f, 0x05, 0x01, 0xd2, 0xff, 0xff, //0x00002e77 vmovdqu $-11775(%rip), %ymm0 /* LCPI0_7+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x0d, 0x19, 0xd2, 0xff, 0xff, //0x00002e7f vmovdqu $-11751(%rip), %ymm1 /* LCPI0_8+0(%rip) */ + 0x45, 0x31, 0xe4, //0x00002e87 xorl %r12d, %r12d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002e8a .p2align 4, 0x90 + //0x00002e90 LBB0_578 + 0xc4, 0x81, 0x7e, 0x6f, 0x54, 0x31, 0x01, //0x00002e90 vmovdqu $1(%r9,%r14), %ymm2 + 0xc5, 0xed, 0x74, 0xd8, //0x00002e97 vpcmpeqb %ymm0, %ymm2, %ymm3 + 0xc5, 0x7d, 0xd7, 0xdb, //0x00002e9b vpmovmskb %ymm3, %r11d + 0xc5, 0xed, 0x74, 0xd1, //0x00002e9f vpcmpeqb %ymm1, %ymm2, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00002ea3 vpmovmskb %ymm2, %ecx + 0x85, 0xc9, //0x00002ea7 testl %ecx, %ecx + 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x00002ea9 jne LBB0_581 + 0x4d, 0x85, 0xe4, //0x00002eaf testq %r12, %r12 + 0x0f, 0x85, 0x08, 0x00, 0x00, 0x00, //0x00002eb2 jne LBB0_581 + 0x45, 0x31, 0xe4, //0x00002eb8 xorl %r12d, %r12d + 0xe9, 0x31, 0x00, 0x00, 0x00, //0x00002ebb jmp LBB0_582 + //0x00002ec0 LBB0_581 + 0x44, 0x89, 0xe6, //0x00002ec0 movl %r12d, %esi + 0xf7, 0xd6, //0x00002ec3 notl %esi + 0x21, 0xce, //0x00002ec5 andl %ecx, %esi + 0x8d, 0x14, 0x36, //0x00002ec7 leal (%rsi,%rsi), %edx + 0x44, 0x09, 0xe2, //0x00002eca orl %r12d, %edx + 0x89, 0xd7, //0x00002ecd movl %edx, %edi + 0xf7, 0xd7, //0x00002ecf notl %edi + 0x21, 0xcf, //0x00002ed1 andl %ecx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002ed3 andl $-1431655766, %edi + 0x45, 0x31, 0xe4, //0x00002ed9 xorl %r12d, %r12d + 0x01, 0xf7, //0x00002edc addl %esi, %edi + 0x41, 0x0f, 0x92, 0xc4, //0x00002ede setb %r12b + 0x01, 0xff, //0x00002ee2 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00002ee4 xorl $1431655765, %edi + 0x21, 0xd7, //0x00002eea andl %edx, %edi + 0xf7, 0xd7, //0x00002eec notl %edi + 0x41, 0x21, 0xfb, //0x00002eee andl %edi, %r11d + //0x00002ef1 LBB0_582 + 0x4d, 0x85, 0xdb, //0x00002ef1 testq %r11, %r11 + 0x0f, 0x85, 0xfc, 0x05, 0x00, 0x00, //0x00002ef4 jne LBB0_640 + 0x49, 0x83, 0xc6, 0x20, //0x00002efa addq $32, %r14 + 0x49, 0x8d, 0x0c, 0x18, //0x00002efe leaq (%r8,%rbx), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00002f02 addq $-32, %rcx + 0x48, 0x83, 0xc3, 0xe0, //0x00002f06 addq $-32, %rbx + 0x48, 0x83, 0xf9, 0x3f, //0x00002f0a cmpq $63, %rcx + 0x0f, 0x8f, 0x7c, 0xff, 0xff, 0xff, //0x00002f0e jg LBB0_578 + 0x4d, 0x85, 0xe4, //0x00002f14 testq %r12, %r12 + 0x0f, 0x85, 0xfd, 0x08, 0x00, 0x00, //0x00002f17 jne LBB0_685 + 0x4b, 0x8d, 0x14, 0x0e, //0x00002f1d leaq (%r14,%r9), %rdx + 0x48, 0x83, 0xc2, 0x01, //0x00002f21 addq $1, %rdx + 0x49, 0xf7, 0xd6, //0x00002f25 notq %r14 + 0x4d, 0x01, 0xc6, //0x00002f28 addq %r8, %r14 + //0x00002f2b LBB0_586 + 0x4d, 0x85, 0xf6, //0x00002f2b testq %r14, %r14 + 0x0f, 0x8e, 0x04, 0x06, 0x00, 0x00, //0x00002f2e jle LBB0_646 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002f34 movq $-1, %r15 + 0xe9, 0x25, 0x06, 0x00, 0x00, //0x00002f3b jmp LBB0_648 + //0x00002f40 LBB0_588 + 0x48, 0x8d, 0x48, 0x05, //0x00002f40 leaq $5(%rax), %rcx + //0x00002f44 LBB0_589 + 0x49, 0x3b, 0x4d, 0x08, //0x00002f44 cmpq $8(%r13), %rcx + 0x0f, 0x87, 0xea, 0x05, 0x00, 0x00, //0x00002f48 ja LBB0_646 + 0x49, 0x89, 0x0b, //0x00002f4e movq %rcx, (%r11) + 0x49, 0x89, 0xc7, //0x00002f51 movq %rax, %r15 + 0xe9, 0xdf, 0x05, 0x00, 0x00, //0x00002f54 jmp LBB0_646 + //0x00002f59 LBB0_591 + 0x4c, 0x89, 0x5c, 0x24, 0x08, //0x00002f59 movq %r11, $8(%rsp) + 0x4d, 0x8b, 0x75, 0x08, //0x00002f5e movq $8(%r13), %r14 + 0x49, 0x29, 0xd6, //0x00002f62 subq %rdx, %r14 + 0x49, 0x01, 0xd2, //0x00002f65 addq %rdx, %r10 + 0x45, 0x31, 0xdb, //0x00002f68 xorl %r11d, %r11d + 0xc5, 0xfe, 0x6f, 0x05, 0x2d, 0xd1, 0xff, 0xff, //0x00002f6b vmovdqu $-11987(%rip), %ymm0 /* LCPI0_8+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x0d, 0x05, 0xd1, 0xff, 0xff, //0x00002f73 vmovdqu $-12027(%rip), %ymm1 /* LCPI0_7+0(%rip) */ + 0xc5, 0xe9, 0x76, 0xd2, //0x00002f7b vpcmpeqd %xmm2, %xmm2, %xmm2 + 0xc5, 0xfe, 0x6f, 0x1d, 0x39, 0xd1, 0xff, 0xff, //0x00002f7f vmovdqu $-11975(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x51, 0xd1, 0xff, 0xff, //0x00002f87 vmovdqu $-11951(%rip), %ymm4 /* LCPI0_10+0(%rip) */ + 0xc4, 0x41, 0x31, 0xef, 0xc9, //0x00002f8f vpxor %xmm9, %xmm9, %xmm9 + 0x45, 0x31, 0xe4, //0x00002f94 xorl %r12d, %r12d + 0x45, 0x31, 0xc9, //0x00002f97 xorl %r9d, %r9d + 0x31, 0xd2, //0x00002f9a xorl %edx, %edx + 0x49, 0x83, 0xfe, 0x40, //0x00002f9c cmpq $64, %r14 + 0x0f, 0x8c, 0x46, 0x01, 0x00, 0x00, //0x00002fa0 jl LBB0_600 + //0x00002fa6 LBB0_594 + 0xc4, 0xc1, 0x7e, 0x6f, 0x3a, //0x00002fa6 vmovdqu (%r10), %ymm7 + 0xc4, 0xc1, 0x7e, 0x6f, 0x72, 0x20, //0x00002fab vmovdqu $32(%r10), %ymm6 + 0xc5, 0x45, 0x74, 0xc0, //0x00002fb1 vpcmpeqb %ymm0, %ymm7, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xf0, //0x00002fb5 vpmovmskb %ymm8, %esi + 0xc5, 0x4d, 0x74, 0xc0, //0x00002fba vpcmpeqb %ymm0, %ymm6, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x00002fbe vpmovmskb %ymm8, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00002fc3 shlq $32, %rcx + 0x48, 0x09, 0xce, //0x00002fc7 orq %rcx, %rsi + 0x48, 0x89, 0xf1, //0x00002fca movq %rsi, %rcx + 0x4d, 0x89, 0xe8, //0x00002fcd movq %r13, %r8 + 0x4c, 0x09, 0xe1, //0x00002fd0 orq %r12, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00002fd3 jne LBB0_596 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00002fd9 movq $-1, %rsi + 0x45, 0x31, 0xe4, //0x00002fe0 xorl %r12d, %r12d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00002fe3 jmp LBB0_597 + //0x00002fe8 LBB0_596 + 0x4c, 0x89, 0xe1, //0x00002fe8 movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x00002feb notq %rcx + 0x48, 0x21, 0xf1, //0x00002fee andq %rsi, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x00002ff1 leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xe5, //0x00002ff5 orq %r12, %r13 + 0x4c, 0x89, 0xeb, //0x00002ff8 movq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00002ffb notq %rbx + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002ffe movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfe, //0x00003008 andq %rdi, %rsi + 0x48, 0x21, 0xde, //0x0000300b andq %rbx, %rsi + 0x45, 0x31, 0xe4, //0x0000300e xorl %r12d, %r12d + 0x48, 0x01, 0xce, //0x00003011 addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc4, //0x00003014 setb %r12b + 0x48, 0x01, 0xf6, //0x00003018 addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000301b movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x00003025 xorq %rcx, %rsi + 0x4c, 0x21, 0xee, //0x00003028 andq %r13, %rsi + 0x48, 0xf7, 0xd6, //0x0000302b notq %rsi + //0x0000302e LBB0_597 + 0xc5, 0x4d, 0x74, 0xc1, //0x0000302e vpcmpeqb %ymm1, %ymm6, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x00003032 vpmovmskb %ymm8, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00003037 shlq $32, %rcx + 0xc5, 0x45, 0x74, 0xc1, //0x0000303b vpcmpeqb %ymm1, %ymm7, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xf8, //0x0000303f vpmovmskb %ymm8, %edi + 0x48, 0x09, 0xcf, //0x00003044 orq %rcx, %rdi + 0x48, 0x21, 0xf7, //0x00003047 andq %rsi, %rdi + 0xc4, 0xe1, 0xf9, 0x6e, 0xef, //0x0000304a vmovq %rdi, %xmm5 + 0xc4, 0xe3, 0x51, 0x44, 0xea, 0x00, //0x0000304f vpclmulqdq $0, %xmm2, %xmm5, %xmm5 + 0xc4, 0xc1, 0xf9, 0x7e, 0xed, //0x00003055 vmovq %xmm5, %r13 + 0x4d, 0x31, 0xdd, //0x0000305a xorq %r11, %r13 + 0xc5, 0xc5, 0x74, 0xeb, //0x0000305d vpcmpeqb %ymm3, %ymm7, %ymm5 + 0xc5, 0xfd, 0xd7, 0xfd, //0x00003061 vpmovmskb %ymm5, %edi + 0xc5, 0xcd, 0x74, 0xeb, //0x00003065 vpcmpeqb %ymm3, %ymm6, %ymm5 + 0xc5, 0xfd, 0xd7, 0xcd, //0x00003069 vpmovmskb %ymm5, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x0000306d shlq $32, %rcx + 0x48, 0x09, 0xcf, //0x00003071 orq %rcx, %rdi + 0x4c, 0x89, 0xe9, //0x00003074 movq %r13, %rcx + 0x48, 0xf7, 0xd1, //0x00003077 notq %rcx + 0x48, 0x21, 0xcf, //0x0000307a andq %rcx, %rdi + 0xc5, 0xc5, 0x74, 0xec, //0x0000307d vpcmpeqb %ymm4, %ymm7, %ymm5 + 0xc5, 0xfd, 0xd7, 0xdd, //0x00003081 vpmovmskb %ymm5, %ebx + 0xc5, 0xcd, 0x74, 0xec, //0x00003085 vpcmpeqb %ymm4, %ymm6, %ymm5 + 0xc5, 0xfd, 0xd7, 0xf5, //0x00003089 vpmovmskb %ymm5, %esi + 0x48, 0xc1, 0xe6, 0x20, //0x0000308d shlq $32, %rsi + 0x48, 0x09, 0xf3, //0x00003091 orq %rsi, %rbx + 0x48, 0x21, 0xcb, //0x00003094 andq %rcx, %rbx + 0x0f, 0x84, 0x2b, 0x00, 0x00, 0x00, //0x00003097 je LBB0_592 + 0x90, 0x90, 0x90, //0x0000309d .p2align 4, 0x90 + //0x000030a0 LBB0_598 + 0x48, 0x8d, 0x4b, 0xff, //0x000030a0 leaq $-1(%rbx), %rcx + 0x48, 0x89, 0xce, //0x000030a4 movq %rcx, %rsi + 0x48, 0x21, 0xfe, //0x000030a7 andq %rdi, %rsi + 0xf3, 0x48, 0x0f, 0xb8, 0xf6, //0x000030aa popcntq %rsi, %rsi + 0x4c, 0x01, 0xce, //0x000030af addq %r9, %rsi + 0x48, 0x39, 0xd6, //0x000030b2 cmpq %rdx, %rsi + 0x0f, 0x86, 0x00, 0x04, 0x00, 0x00, //0x000030b5 jbe LBB0_639 + 0x48, 0x83, 0xc2, 0x01, //0x000030bb addq $1, %rdx + 0x48, 0x21, 0xcb, //0x000030bf andq %rcx, %rbx + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x000030c2 jne LBB0_598 + //0x000030c8 LBB0_592 + 0x49, 0xc1, 0xfd, 0x3f, //0x000030c8 sarq $63, %r13 + 0xf3, 0x48, 0x0f, 0xb8, 0xcf, //0x000030cc popcntq %rdi, %rcx + 0x49, 0x01, 0xc9, //0x000030d1 addq %rcx, %r9 + 0x49, 0x83, 0xc2, 0x40, //0x000030d4 addq $64, %r10 + 0x49, 0x83, 0xc6, 0xc0, //0x000030d8 addq $-64, %r14 + 0x4d, 0x89, 0xeb, //0x000030dc movq %r13, %r11 + 0x4d, 0x89, 0xc5, //0x000030df movq %r8, %r13 + 0x49, 0x83, 0xfe, 0x40, //0x000030e2 cmpq $64, %r14 + 0x0f, 0x8d, 0xba, 0xfe, 0xff, 0xff, //0x000030e6 jge LBB0_594 + //0x000030ec LBB0_600 + 0x4d, 0x85, 0xf6, //0x000030ec testq %r14, %r14 + 0x0f, 0x8e, 0xcd, 0x06, 0x00, 0x00, //0x000030ef jle LBB0_682 + 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x60, //0x000030f5 vmovdqu %ymm9, $96(%rsp) + 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x40, //0x000030fb vmovdqu %ymm9, $64(%rsp) + 0x44, 0x89, 0xd1, //0x00003101 movl %r10d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00003104 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x0000310a cmpl $4033, %ecx + 0x0f, 0x82, 0x90, 0xfe, 0xff, 0xff, //0x00003110 jb LBB0_594 + 0x49, 0x83, 0xfe, 0x20, //0x00003116 cmpq $32, %r14 + 0x0f, 0x82, 0x1d, 0x00, 0x00, 0x00, //0x0000311a jb LBB0_604 + 0xc4, 0xc1, 0x7e, 0x6f, 0x2a, //0x00003120 vmovdqu (%r10), %ymm5 + 0xc5, 0xfe, 0x7f, 0x6c, 0x24, 0x40, //0x00003125 vmovdqu %ymm5, $64(%rsp) + 0x49, 0x83, 0xc2, 0x20, //0x0000312b addq $32, %r10 + 0x49, 0x8d, 0x7e, 0xe0, //0x0000312f leaq $-32(%r14), %rdi + 0x48, 0x8d, 0x74, 0x24, 0x60, //0x00003133 leaq $96(%rsp), %rsi + 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00003138 jmp LBB0_605 + //0x0000313d LBB0_604 + 0x48, 0x8d, 0x74, 0x24, 0x40, //0x0000313d leaq $64(%rsp), %rsi + 0x4c, 0x89, 0xf7, //0x00003142 movq %r14, %rdi + //0x00003145 LBB0_605 + 0x48, 0x83, 0xff, 0x10, //0x00003145 cmpq $16, %rdi + 0x0f, 0x82, 0x5a, 0x00, 0x00, 0x00, //0x00003149 jb LBB0_606 + 0xc4, 0xc1, 0x7a, 0x6f, 0x2a, //0x0000314f vmovdqu (%r10), %xmm5 + 0xc5, 0xfa, 0x7f, 0x2e, //0x00003154 vmovdqu %xmm5, (%rsi) + 0x49, 0x83, 0xc2, 0x10, //0x00003158 addq $16, %r10 + 0x48, 0x83, 0xc6, 0x10, //0x0000315c addq $16, %rsi + 0x48, 0x83, 0xc7, 0xf0, //0x00003160 addq $-16, %rdi + 0x48, 0x83, 0xff, 0x08, //0x00003164 cmpq $8, %rdi + 0x0f, 0x83, 0x45, 0x00, 0x00, 0x00, //0x00003168 jae LBB0_611 + //0x0000316e LBB0_607 + 0x48, 0x83, 0xff, 0x04, //0x0000316e cmpq $4, %rdi + 0x0f, 0x8c, 0x57, 0x00, 0x00, 0x00, //0x00003172 jl LBB0_608 + //0x00003178 LBB0_612 + 0x41, 0x8b, 0x0a, //0x00003178 movl (%r10), %ecx + 0x89, 0x0e, //0x0000317b movl %ecx, (%rsi) + 0x49, 0x83, 0xc2, 0x04, //0x0000317d addq $4, %r10 + 0x48, 0x83, 0xc6, 0x04, //0x00003181 addq $4, %rsi + 0x48, 0x83, 0xc7, 0xfc, //0x00003185 addq $-4, %rdi + 0x48, 0x83, 0xff, 0x02, //0x00003189 cmpq $2, %rdi + 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x0000318d jae LBB0_613 + //0x00003193 LBB0_609 + 0x4c, 0x89, 0xd3, //0x00003193 movq %r10, %rbx + 0x4c, 0x8d, 0x54, 0x24, 0x40, //0x00003196 leaq $64(%rsp), %r10 + 0x48, 0x85, 0xff, //0x0000319b testq %rdi, %rdi + 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x0000319e jne LBB0_614 + 0xe9, 0xfd, 0xfd, 0xff, 0xff, //0x000031a4 jmp LBB0_594 + //0x000031a9 LBB0_606 + 0x48, 0x83, 0xff, 0x08, //0x000031a9 cmpq $8, %rdi + 0x0f, 0x82, 0xbb, 0xff, 0xff, 0xff, //0x000031ad jb LBB0_607 + //0x000031b3 LBB0_611 + 0x49, 0x8b, 0x0a, //0x000031b3 movq (%r10), %rcx + 0x48, 0x89, 0x0e, //0x000031b6 movq %rcx, (%rsi) + 0x49, 0x83, 0xc2, 0x08, //0x000031b9 addq $8, %r10 + 0x48, 0x83, 0xc6, 0x08, //0x000031bd addq $8, %rsi + 0x48, 0x83, 0xc7, 0xf8, //0x000031c1 addq $-8, %rdi + 0x48, 0x83, 0xff, 0x04, //0x000031c5 cmpq $4, %rdi + 0x0f, 0x8d, 0xa9, 0xff, 0xff, 0xff, //0x000031c9 jge LBB0_612 + //0x000031cf LBB0_608 + 0x48, 0x83, 0xff, 0x02, //0x000031cf cmpq $2, %rdi + 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x000031d3 jb LBB0_609 + //0x000031d9 LBB0_613 + 0x41, 0x0f, 0xb7, 0x0a, //0x000031d9 movzwl (%r10), %ecx + 0x66, 0x89, 0x0e, //0x000031dd movw %cx, (%rsi) + 0x49, 0x83, 0xc2, 0x02, //0x000031e0 addq $2, %r10 + 0x48, 0x83, 0xc6, 0x02, //0x000031e4 addq $2, %rsi + 0x48, 0x83, 0xc7, 0xfe, //0x000031e8 addq $-2, %rdi + 0x4c, 0x89, 0xd3, //0x000031ec movq %r10, %rbx + 0x4c, 0x8d, 0x54, 0x24, 0x40, //0x000031ef leaq $64(%rsp), %r10 + 0x48, 0x85, 0xff, //0x000031f4 testq %rdi, %rdi + 0x0f, 0x84, 0xa9, 0xfd, 0xff, 0xff, //0x000031f7 je LBB0_594 + //0x000031fd LBB0_614 + 0x8a, 0x0b, //0x000031fd movb (%rbx), %cl + 0x88, 0x0e, //0x000031ff movb %cl, (%rsi) + 0x4c, 0x8d, 0x54, 0x24, 0x40, //0x00003201 leaq $64(%rsp), %r10 + 0xe9, 0x9b, 0xfd, 0xff, 0xff, //0x00003206 jmp LBB0_594 + //0x0000320b LBB0_615 + 0x4c, 0x89, 0x5c, 0x24, 0x08, //0x0000320b movq %r11, $8(%rsp) + 0x4d, 0x8b, 0x75, 0x08, //0x00003210 movq $8(%r13), %r14 + 0x49, 0x29, 0xd6, //0x00003214 subq %rdx, %r14 + 0x49, 0x01, 0xd2, //0x00003217 addq %rdx, %r10 + 0x45, 0x31, 0xdb, //0x0000321a xorl %r11d, %r11d + 0xc5, 0xfe, 0x6f, 0x05, 0x7b, 0xce, 0xff, 0xff, //0x0000321d vmovdqu $-12677(%rip), %ymm0 /* LCPI0_8+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x0d, 0x53, 0xce, 0xff, 0xff, //0x00003225 vmovdqu $-12717(%rip), %ymm1 /* LCPI0_7+0(%rip) */ + 0xc5, 0xe9, 0x76, 0xd2, //0x0000322d vpcmpeqd %xmm2, %xmm2, %xmm2 + 0xc5, 0xfe, 0x6f, 0x1d, 0xc7, 0xce, 0xff, 0xff, //0x00003231 vmovdqu $-12601(%rip), %ymm3 /* LCPI0_11+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x1f, 0xce, 0xff, 0xff, //0x00003239 vmovdqu $-12769(%rip), %ymm4 /* LCPI0_3+0(%rip) */ + 0xc4, 0x41, 0x31, 0xef, 0xc9, //0x00003241 vpxor %xmm9, %xmm9, %xmm9 + 0x45, 0x31, 0xe4, //0x00003246 xorl %r12d, %r12d + 0x45, 0x31, 0xc9, //0x00003249 xorl %r9d, %r9d + 0x31, 0xd2, //0x0000324c xorl %edx, %edx + 0x49, 0x83, 0xfe, 0x40, //0x0000324e cmpq $64, %r14 + 0x0f, 0x8c, 0x44, 0x01, 0x00, 0x00, //0x00003252 jl LBB0_624 + //0x00003258 LBB0_618 + 0xc4, 0xc1, 0x7e, 0x6f, 0x3a, //0x00003258 vmovdqu (%r10), %ymm7 + 0xc4, 0xc1, 0x7e, 0x6f, 0x72, 0x20, //0x0000325d vmovdqu $32(%r10), %ymm6 + 0xc5, 0x45, 0x74, 0xc0, //0x00003263 vpcmpeqb %ymm0, %ymm7, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xf0, //0x00003267 vpmovmskb %ymm8, %esi + 0xc5, 0x4d, 0x74, 0xc0, //0x0000326c vpcmpeqb %ymm0, %ymm6, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x00003270 vpmovmskb %ymm8, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00003275 shlq $32, %rcx + 0x48, 0x09, 0xce, //0x00003279 orq %rcx, %rsi + 0x48, 0x89, 0xf1, //0x0000327c movq %rsi, %rcx + 0x4d, 0x89, 0xe8, //0x0000327f movq %r13, %r8 + 0x4c, 0x09, 0xe1, //0x00003282 orq %r12, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00003285 jne LBB0_620 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x0000328b movq $-1, %rsi + 0x45, 0x31, 0xe4, //0x00003292 xorl %r12d, %r12d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00003295 jmp LBB0_621 + //0x0000329a LBB0_620 + 0x4c, 0x89, 0xe1, //0x0000329a movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x0000329d notq %rcx + 0x48, 0x21, 0xf1, //0x000032a0 andq %rsi, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x000032a3 leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xe5, //0x000032a7 orq %r12, %r13 + 0x4c, 0x89, 0xeb, //0x000032aa movq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x000032ad notq %rbx + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000032b0 movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfe, //0x000032ba andq %rdi, %rsi + 0x48, 0x21, 0xde, //0x000032bd andq %rbx, %rsi + 0x45, 0x31, 0xe4, //0x000032c0 xorl %r12d, %r12d + 0x48, 0x01, 0xce, //0x000032c3 addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc4, //0x000032c6 setb %r12b + 0x48, 0x01, 0xf6, //0x000032ca addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000032cd movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x000032d7 xorq %rcx, %rsi + 0x4c, 0x21, 0xee, //0x000032da andq %r13, %rsi + 0x48, 0xf7, 0xd6, //0x000032dd notq %rsi + //0x000032e0 LBB0_621 + 0xc5, 0x4d, 0x74, 0xc1, //0x000032e0 vpcmpeqb %ymm1, %ymm6, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xc8, //0x000032e4 vpmovmskb %ymm8, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x000032e9 shlq $32, %rcx + 0xc5, 0x45, 0x74, 0xc1, //0x000032ed vpcmpeqb %ymm1, %ymm7, %ymm8 + 0xc4, 0xc1, 0x7d, 0xd7, 0xf8, //0x000032f1 vpmovmskb %ymm8, %edi + 0x48, 0x09, 0xcf, //0x000032f6 orq %rcx, %rdi + 0x48, 0x21, 0xf7, //0x000032f9 andq %rsi, %rdi + 0xc4, 0xe1, 0xf9, 0x6e, 0xef, //0x000032fc vmovq %rdi, %xmm5 + 0xc4, 0xe3, 0x51, 0x44, 0xea, 0x00, //0x00003301 vpclmulqdq $0, %xmm2, %xmm5, %xmm5 + 0xc4, 0xc1, 0xf9, 0x7e, 0xed, //0x00003307 vmovq %xmm5, %r13 + 0x4d, 0x31, 0xdd, //0x0000330c xorq %r11, %r13 + 0xc5, 0xc5, 0x74, 0xeb, //0x0000330f vpcmpeqb %ymm3, %ymm7, %ymm5 + 0xc5, 0xfd, 0xd7, 0xfd, //0x00003313 vpmovmskb %ymm5, %edi + 0xc5, 0xcd, 0x74, 0xeb, //0x00003317 vpcmpeqb %ymm3, %ymm6, %ymm5 + 0xc5, 0xfd, 0xd7, 0xcd, //0x0000331b vpmovmskb %ymm5, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x0000331f shlq $32, %rcx + 0x48, 0x09, 0xcf, //0x00003323 orq %rcx, %rdi + 0x4c, 0x89, 0xe9, //0x00003326 movq %r13, %rcx + 0x48, 0xf7, 0xd1, //0x00003329 notq %rcx + 0x48, 0x21, 0xcf, //0x0000332c andq %rcx, %rdi + 0xc5, 0xc5, 0x74, 0xec, //0x0000332f vpcmpeqb %ymm4, %ymm7, %ymm5 + 0xc5, 0xfd, 0xd7, 0xdd, //0x00003333 vpmovmskb %ymm5, %ebx + 0xc5, 0xcd, 0x74, 0xec, //0x00003337 vpcmpeqb %ymm4, %ymm6, %ymm5 + 0xc5, 0xfd, 0xd7, 0xf5, //0x0000333b vpmovmskb %ymm5, %esi + 0x48, 0xc1, 0xe6, 0x20, //0x0000333f shlq $32, %rsi + 0x48, 0x09, 0xf3, //0x00003343 orq %rsi, %rbx + 0x48, 0x21, 0xcb, //0x00003346 andq %rcx, %rbx + 0x0f, 0x84, 0x29, 0x00, 0x00, 0x00, //0x00003349 je LBB0_616 + 0x90, //0x0000334f .p2align 4, 0x90 + //0x00003350 LBB0_622 + 0x48, 0x8d, 0x4b, 0xff, //0x00003350 leaq $-1(%rbx), %rcx + 0x48, 0x89, 0xce, //0x00003354 movq %rcx, %rsi + 0x48, 0x21, 0xfe, //0x00003357 andq %rdi, %rsi + 0xf3, 0x48, 0x0f, 0xb8, 0xf6, //0x0000335a popcntq %rsi, %rsi + 0x4c, 0x01, 0xce, //0x0000335f addq %r9, %rsi + 0x48, 0x39, 0xd6, //0x00003362 cmpq %rdx, %rsi + 0x0f, 0x86, 0x50, 0x01, 0x00, 0x00, //0x00003365 jbe LBB0_639 + 0x48, 0x83, 0xc2, 0x01, //0x0000336b addq $1, %rdx + 0x48, 0x21, 0xcb, //0x0000336f andq %rcx, %rbx + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00003372 jne LBB0_622 + //0x00003378 LBB0_616 + 0x49, 0xc1, 0xfd, 0x3f, //0x00003378 sarq $63, %r13 + 0xf3, 0x48, 0x0f, 0xb8, 0xcf, //0x0000337c popcntq %rdi, %rcx + 0x49, 0x01, 0xc9, //0x00003381 addq %rcx, %r9 + 0x49, 0x83, 0xc2, 0x40, //0x00003384 addq $64, %r10 + 0x49, 0x83, 0xc6, 0xc0, //0x00003388 addq $-64, %r14 + 0x4d, 0x89, 0xeb, //0x0000338c movq %r13, %r11 + 0x4d, 0x89, 0xc5, //0x0000338f movq %r8, %r13 + 0x49, 0x83, 0xfe, 0x40, //0x00003392 cmpq $64, %r14 + 0x0f, 0x8d, 0xbc, 0xfe, 0xff, 0xff, //0x00003396 jge LBB0_618 + //0x0000339c LBB0_624 + 0x4d, 0x85, 0xf6, //0x0000339c testq %r14, %r14 + 0x0f, 0x8e, 0x1d, 0x04, 0x00, 0x00, //0x0000339f jle LBB0_682 + 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x60, //0x000033a5 vmovdqu %ymm9, $96(%rsp) + 0xc5, 0x7e, 0x7f, 0x4c, 0x24, 0x40, //0x000033ab vmovdqu %ymm9, $64(%rsp) + 0x44, 0x89, 0xd1, //0x000033b1 movl %r10d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x000033b4 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x000033ba cmpl $4033, %ecx + 0x0f, 0x82, 0x92, 0xfe, 0xff, 0xff, //0x000033c0 jb LBB0_618 + 0x49, 0x83, 0xfe, 0x20, //0x000033c6 cmpq $32, %r14 + 0x0f, 0x82, 0x1d, 0x00, 0x00, 0x00, //0x000033ca jb LBB0_628 + 0xc4, 0xc1, 0x7e, 0x6f, 0x2a, //0x000033d0 vmovdqu (%r10), %ymm5 + 0xc5, 0xfe, 0x7f, 0x6c, 0x24, 0x40, //0x000033d5 vmovdqu %ymm5, $64(%rsp) + 0x49, 0x83, 0xc2, 0x20, //0x000033db addq $32, %r10 + 0x49, 0x8d, 0x7e, 0xe0, //0x000033df leaq $-32(%r14), %rdi + 0x48, 0x8d, 0x74, 0x24, 0x60, //0x000033e3 leaq $96(%rsp), %rsi + 0xe9, 0x08, 0x00, 0x00, 0x00, //0x000033e8 jmp LBB0_629 + //0x000033ed LBB0_628 + 0x48, 0x8d, 0x74, 0x24, 0x40, //0x000033ed leaq $64(%rsp), %rsi + 0x4c, 0x89, 0xf7, //0x000033f2 movq %r14, %rdi + //0x000033f5 LBB0_629 + 0x48, 0x83, 0xff, 0x10, //0x000033f5 cmpq $16, %rdi + 0x0f, 0x82, 0x5a, 0x00, 0x00, 0x00, //0x000033f9 jb LBB0_630 + 0xc4, 0xc1, 0x7a, 0x6f, 0x2a, //0x000033ff vmovdqu (%r10), %xmm5 + 0xc5, 0xfa, 0x7f, 0x2e, //0x00003404 vmovdqu %xmm5, (%rsi) + 0x49, 0x83, 0xc2, 0x10, //0x00003408 addq $16, %r10 + 0x48, 0x83, 0xc6, 0x10, //0x0000340c addq $16, %rsi + 0x48, 0x83, 0xc7, 0xf0, //0x00003410 addq $-16, %rdi + 0x48, 0x83, 0xff, 0x08, //0x00003414 cmpq $8, %rdi + 0x0f, 0x83, 0x45, 0x00, 0x00, 0x00, //0x00003418 jae LBB0_635 + //0x0000341e LBB0_631 + 0x48, 0x83, 0xff, 0x04, //0x0000341e cmpq $4, %rdi + 0x0f, 0x8c, 0x57, 0x00, 0x00, 0x00, //0x00003422 jl LBB0_632 + //0x00003428 LBB0_636 + 0x41, 0x8b, 0x0a, //0x00003428 movl (%r10), %ecx + 0x89, 0x0e, //0x0000342b movl %ecx, (%rsi) + 0x49, 0x83, 0xc2, 0x04, //0x0000342d addq $4, %r10 + 0x48, 0x83, 0xc6, 0x04, //0x00003431 addq $4, %rsi + 0x48, 0x83, 0xc7, 0xfc, //0x00003435 addq $-4, %rdi + 0x48, 0x83, 0xff, 0x02, //0x00003439 cmpq $2, %rdi + 0x0f, 0x83, 0x46, 0x00, 0x00, 0x00, //0x0000343d jae LBB0_637 + //0x00003443 LBB0_633 + 0x4c, 0x89, 0xd3, //0x00003443 movq %r10, %rbx + 0x4c, 0x8d, 0x54, 0x24, 0x40, //0x00003446 leaq $64(%rsp), %r10 + 0x48, 0x85, 0xff, //0x0000344b testq %rdi, %rdi + 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x0000344e jne LBB0_638 + 0xe9, 0xff, 0xfd, 0xff, 0xff, //0x00003454 jmp LBB0_618 + //0x00003459 LBB0_630 + 0x48, 0x83, 0xff, 0x08, //0x00003459 cmpq $8, %rdi + 0x0f, 0x82, 0xbb, 0xff, 0xff, 0xff, //0x0000345d jb LBB0_631 + //0x00003463 LBB0_635 + 0x49, 0x8b, 0x0a, //0x00003463 movq (%r10), %rcx + 0x48, 0x89, 0x0e, //0x00003466 movq %rcx, (%rsi) + 0x49, 0x83, 0xc2, 0x08, //0x00003469 addq $8, %r10 + 0x48, 0x83, 0xc6, 0x08, //0x0000346d addq $8, %rsi + 0x48, 0x83, 0xc7, 0xf8, //0x00003471 addq $-8, %rdi + 0x48, 0x83, 0xff, 0x04, //0x00003475 cmpq $4, %rdi + 0x0f, 0x8d, 0xa9, 0xff, 0xff, 0xff, //0x00003479 jge LBB0_636 + //0x0000347f LBB0_632 + 0x48, 0x83, 0xff, 0x02, //0x0000347f cmpq $2, %rdi + 0x0f, 0x82, 0xba, 0xff, 0xff, 0xff, //0x00003483 jb LBB0_633 + //0x00003489 LBB0_637 + 0x41, 0x0f, 0xb7, 0x0a, //0x00003489 movzwl (%r10), %ecx + 0x66, 0x89, 0x0e, //0x0000348d movw %cx, (%rsi) + 0x49, 0x83, 0xc2, 0x02, //0x00003490 addq $2, %r10 + 0x48, 0x83, 0xc6, 0x02, //0x00003494 addq $2, %rsi + 0x48, 0x83, 0xc7, 0xfe, //0x00003498 addq $-2, %rdi + 0x4c, 0x89, 0xd3, //0x0000349c movq %r10, %rbx + 0x4c, 0x8d, 0x54, 0x24, 0x40, //0x0000349f leaq $64(%rsp), %r10 + 0x48, 0x85, 0xff, //0x000034a4 testq %rdi, %rdi + 0x0f, 0x84, 0xab, 0xfd, 0xff, 0xff, //0x000034a7 je LBB0_618 + //0x000034ad LBB0_638 + 0x8a, 0x0b, //0x000034ad movb (%rbx), %cl + 0x88, 0x0e, //0x000034af movb %cl, (%rsi) + 0x4c, 0x8d, 0x54, 0x24, 0x40, //0x000034b1 leaq $64(%rsp), %r10 + 0xe9, 0x9d, 0xfd, 0xff, 0xff, //0x000034b6 jmp LBB0_618 + //0x000034bb LBB0_639 + 0x49, 0x8b, 0x48, 0x08, //0x000034bb movq $8(%r8), %rcx + 0x48, 0x0f, 0xbc, 0xd3, //0x000034bf bsfq %rbx, %rdx + 0x4c, 0x29, 0xf2, //0x000034c3 subq %r14, %rdx + 0x48, 0x01, 0xd1, //0x000034c6 addq %rdx, %rcx + 0x48, 0x83, 0xc1, 0x01, //0x000034c9 addq $1, %rcx + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x000034cd movq $8(%rsp), %r11 + 0x49, 0x89, 0x0b, //0x000034d2 movq %rcx, (%r11) + 0x49, 0x8b, 0x50, 0x08, //0x000034d5 movq $8(%r8), %rdx + 0x48, 0x39, 0xd1, //0x000034d9 cmpq %rdx, %rcx + 0x48, 0x0f, 0x47, 0xca, //0x000034dc cmovaq %rdx, %rcx + 0x49, 0x89, 0x0b, //0x000034e0 movq %rcx, (%r11) + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000034e3 movq $-1, %rcx + 0x48, 0x0f, 0x47, 0xc1, //0x000034ea cmovaq %rcx, %rax + 0x49, 0x89, 0xc7, //0x000034ee movq %rax, %r15 + 0xe9, 0x42, 0x00, 0x00, 0x00, //0x000034f1 jmp LBB0_646 + //0x000034f6 LBB0_640 + 0x41, 0x0f, 0xbc, 0xcb, //0x000034f6 bsfl %r11d, %ecx + 0x48, 0x01, 0xc1, //0x000034fa addq %rax, %rcx + 0x4c, 0x01, 0xf1, //0x000034fd addq %r14, %rcx + 0x48, 0x83, 0xc1, 0x02, //0x00003500 addq $2, %rcx + 0x49, 0x89, 0x4d, 0x00, //0x00003504 movq %rcx, (%r13) + 0x49, 0x89, 0xc7, //0x00003508 movq %rax, %r15 + 0xe9, 0x28, 0x00, 0x00, 0x00, //0x0000350b jmp LBB0_646 + //0x00003510 LBB0_641 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003510 movq $-1, %rcx + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00003517 jmp LBB0_644 + //0x0000351c LBB0_643 + 0x4c, 0x89, 0xc1, //0x0000351c movq %r8, %rcx + //0x0000351f LBB0_644 + 0x48, 0x8b, 0x54, 0x24, 0x08, //0x0000351f movq $8(%rsp), %rdx + 0x48, 0x8b, 0x02, //0x00003524 movq (%rdx), %rax + 0x48, 0x29, 0xc8, //0x00003527 subq %rcx, %rax + 0x48, 0x83, 0xc0, 0xfe, //0x0000352a addq $-2, %rax + 0x48, 0x89, 0x02, //0x0000352e movq %rax, (%rdx) + //0x00003531 LBB0_645 + 0x49, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x00003531 movq $-2, %r15 + //0x00003538 LBB0_646 + 0x4c, 0x89, 0xf8, //0x00003538 movq %r15, %rax + 0x48, 0x8d, 0x65, 0xd8, //0x0000353b leaq $-40(%rbp), %rsp + 0x5b, //0x0000353f popq %rbx + 0x41, 0x5c, //0x00003540 popq %r12 + 0x41, 0x5d, //0x00003542 popq %r13 + 0x41, 0x5e, //0x00003544 popq %r14 + 0x41, 0x5f, //0x00003546 popq %r15 + 0x5d, //0x00003548 popq %rbp + 0xc5, 0xf8, 0x77, //0x00003549 vzeroupper + 0xc3, //0x0000354c retq + //0x0000354d LBB0_647 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x0000354d movq $-2, %rcx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00003554 movl $2, %esi + 0x48, 0x01, 0xf2, //0x00003559 addq %rsi, %rdx + 0x49, 0x01, 0xce, //0x0000355c addq %rcx, %r14 + 0x0f, 0x8e, 0xd3, 0xff, 0xff, 0xff, //0x0000355f jle LBB0_646 + //0x00003565 LBB0_648 + 0x0f, 0xb6, 0x0a, //0x00003565 movzbl (%rdx), %ecx + 0x80, 0xf9, 0x5c, //0x00003568 cmpb $92, %cl + 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x0000356b je LBB0_647 + 0x80, 0xf9, 0x22, //0x00003571 cmpb $34, %cl + 0x0f, 0x84, 0xf8, 0x01, 0x00, 0x00, //0x00003574 je LBB0_677 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000357a movq $-1, %rcx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00003581 movl $1, %esi + 0x48, 0x01, 0xf2, //0x00003586 addq %rsi, %rdx + 0x49, 0x01, 0xce, //0x00003589 addq %rcx, %r14 + 0x0f, 0x8f, 0xd3, 0xff, 0xff, 0xff, //0x0000358c jg LBB0_648 + 0xe9, 0xa1, 0xff, 0xff, 0xff, //0x00003592 jmp LBB0_646 + //0x00003597 LBB0_651 + 0x48, 0x8b, 0x14, 0x24, //0x00003597 movq (%rsp), %rdx + 0x48, 0x83, 0xfa, 0xff, //0x0000359b cmpq $-1, %rdx + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x0000359f jne LBB0_654 + 0x48, 0x0f, 0xbc, 0xd6, //0x000035a5 bsfq %rsi, %rdx + //0x000035a9 LBB0_653 + 0x4c, 0x01, 0xfa, //0x000035a9 addq %r15, %rdx + //0x000035ac LBB0_654 + 0x49, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x000035ac movq $-2, %r15 + 0x4c, 0x8b, 0x5c, 0x24, 0x08, //0x000035b3 movq $8(%rsp), %r11 + 0x49, 0x89, 0x13, //0x000035b8 movq %rdx, (%r11) + 0xe9, 0x78, 0xff, 0xff, 0xff, //0x000035bb jmp LBB0_646 + //0x000035c0 LBB0_655 + 0x66, 0x0f, 0xbc, 0xc9, //0x000035c0 bsfw %cx, %cx + 0x0f, 0xb7, 0xf1, //0x000035c4 movzwl %cx, %esi + 0x4c, 0x29, 0xd2, //0x000035c7 subq %r10, %rdx + 0x48, 0x01, 0xf2, //0x000035ca addq %rsi, %rdx + 0x48, 0x8d, 0x0c, 0x1a, //0x000035cd leaq (%rdx,%rbx), %rcx + 0x49, 0x89, 0x0b, //0x000035d1 movq %rcx, (%r11) + 0x48, 0x85, 0xc9, //0x000035d4 testq %rcx, %rcx + 0x0f, 0x8e, 0xe3, 0xd0, 0xff, 0xff, //0x000035d7 jle LBB0_58 + 0x48, 0x8d, 0x0c, 0x13, //0x000035dd leaq (%rbx,%rdx), %rcx + 0x48, 0x83, 0xc1, 0x01, //0x000035e1 addq $1, %rcx + 0x48, 0x01, 0xda, //0x000035e5 addq %rbx, %rdx + 0x48, 0x83, 0xc2, 0xff, //0x000035e8 addq $-1, %rdx + 0x48, 0x01, 0xf7, //0x000035ec addq %rsi, %rdi + 0x48, 0x01, 0xdf, //0x000035ef addq %rbx, %rdi + 0x48, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000035f2 movabsq $4294977024, %rsi + //0x000035fc LBB0_657 + 0x0f, 0xb6, 0x1f, //0x000035fc movzbl (%rdi), %ebx + 0x48, 0x83, 0xfb, 0x20, //0x000035ff cmpq $32, %rbx + 0x0f, 0x87, 0xb7, 0xd0, 0xff, 0xff, //0x00003603 ja LBB0_58 + 0x48, 0x0f, 0xa3, 0xde, //0x00003609 btq %rbx, %rsi + 0x0f, 0x83, 0xad, 0xd0, 0xff, 0xff, //0x0000360d jae LBB0_58 + 0x49, 0x89, 0x13, //0x00003613 movq %rdx, (%r11) + 0x48, 0x83, 0xc1, 0xff, //0x00003616 addq $-1, %rcx + 0x48, 0x83, 0xc2, 0xff, //0x0000361a addq $-1, %rdx + 0x48, 0x83, 0xc7, 0xff, //0x0000361e addq $-1, %rdi + 0x48, 0x83, 0xf9, 0x01, //0x00003622 cmpq $1, %rcx + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x00003626 jg LBB0_657 + 0xe9, 0x8f, 0xd0, 0xff, 0xff, //0x0000362c jmp LBB0_58 + //0x00003631 LBB0_661 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003631 movq $-1, %rcx + 0xe9, 0x02, 0x01, 0x00, 0x00, //0x00003638 jmp LBB0_674 + //0x0000363d LBB0_663 + 0x49, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x0000363d movq $-2, %r15 + 0x80, 0xfa, 0x61, //0x00003644 cmpb $97, %dl + 0x0f, 0x85, 0xeb, 0xfe, 0xff, 0xff, //0x00003647 jne LBB0_646 + 0x48, 0x8d, 0x41, 0x01, //0x0000364d leaq $1(%rcx), %rax + 0x49, 0x89, 0x03, //0x00003651 movq %rax, (%r11) + 0x41, 0x80, 0x7c, 0x08, 0x01, 0x6c, //0x00003654 cmpb $108, $1(%r8,%rcx) + 0x0f, 0x85, 0xd8, 0xfe, 0xff, 0xff, //0x0000365a jne LBB0_646 + 0x48, 0x8d, 0x41, 0x02, //0x00003660 leaq $2(%rcx), %rax + 0x49, 0x89, 0x03, //0x00003664 movq %rax, (%r11) + 0x41, 0x80, 0x7c, 0x08, 0x02, 0x73, //0x00003667 cmpb $115, $2(%r8,%rcx) + 0x0f, 0x85, 0xc5, 0xfe, 0xff, 0xff, //0x0000366d jne LBB0_646 + 0x48, 0x8d, 0x41, 0x03, //0x00003673 leaq $3(%rcx), %rax + 0x49, 0x89, 0x03, //0x00003677 movq %rax, (%r11) + 0x41, 0x80, 0x7c, 0x08, 0x03, 0x65, //0x0000367a cmpb $101, $3(%r8,%rcx) + 0x0f, 0x85, 0xb2, 0xfe, 0xff, 0xff, //0x00003680 jne LBB0_646 + 0x48, 0x83, 0xc1, 0x04, //0x00003686 addq $4, %rcx + 0x49, 0x89, 0x0b, //0x0000368a movq %rcx, (%r11) + 0xe9, 0xa6, 0xfe, 0xff, 0xff, //0x0000368d jmp LBB0_646 + //0x00003692 LBB0_299 + 0x4d, 0x89, 0x3b, //0x00003692 movq %r15, (%r11) + 0x43, 0x80, 0x3c, 0x38, 0x6e, //0x00003695 cmpb $110, (%r8,%r15) + 0x0f, 0x85, 0x91, 0xfe, 0xff, 0xff, //0x0000369a jne LBB0_645 + 0x49, 0x89, 0x0b, //0x000036a0 movq %rcx, (%r11) + 0x41, 0x80, 0x3c, 0x08, 0x75, //0x000036a3 cmpb $117, (%r8,%rcx) + 0x0f, 0x85, 0x83, 0xfe, 0xff, 0xff, //0x000036a8 jne LBB0_645 + 0x48, 0x8d, 0x41, 0x01, //0x000036ae leaq $1(%rcx), %rax + 0x49, 0x89, 0x03, //0x000036b2 movq %rax, (%r11) + 0x41, 0x80, 0x7c, 0x08, 0x01, 0x6c, //0x000036b5 cmpb $108, $1(%r8,%rcx) + 0x0f, 0x85, 0x70, 0xfe, 0xff, 0xff, //0x000036bb jne LBB0_645 + 0x48, 0x8d, 0x41, 0x02, //0x000036c1 leaq $2(%rcx), %rax + 0x49, 0x89, 0x03, //0x000036c5 movq %rax, (%r11) + 0x41, 0x80, 0x7c, 0x08, 0x02, 0x6c, //0x000036c8 cmpb $108, $2(%r8,%rcx) + 0x0f, 0x85, 0x5d, 0xfe, 0xff, 0xff, //0x000036ce jne LBB0_645 + 0xe9, 0x42, 0x00, 0x00, 0x00, //0x000036d4 jmp LBB0_672 + //0x000036d9 LBB0_668 + 0x4d, 0x89, 0x3b, //0x000036d9 movq %r15, (%r11) + 0x43, 0x80, 0x3c, 0x38, 0x74, //0x000036dc cmpb $116, (%r8,%r15) + 0x0f, 0x85, 0x4a, 0xfe, 0xff, 0xff, //0x000036e1 jne LBB0_645 + 0x49, 0x89, 0x0b, //0x000036e7 movq %rcx, (%r11) + 0x41, 0x80, 0x3c, 0x08, 0x72, //0x000036ea cmpb $114, (%r8,%rcx) + 0x0f, 0x85, 0x3c, 0xfe, 0xff, 0xff, //0x000036ef jne LBB0_645 + 0x48, 0x8d, 0x41, 0x01, //0x000036f5 leaq $1(%rcx), %rax + 0x49, 0x89, 0x03, //0x000036f9 movq %rax, (%r11) + 0x41, 0x80, 0x7c, 0x08, 0x01, 0x75, //0x000036fc cmpb $117, $1(%r8,%rcx) + 0x0f, 0x85, 0x29, 0xfe, 0xff, 0xff, //0x00003702 jne LBB0_645 + 0x48, 0x8d, 0x41, 0x02, //0x00003708 leaq $2(%rcx), %rax + 0x49, 0x89, 0x03, //0x0000370c movq %rax, (%r11) + 0x41, 0x80, 0x7c, 0x08, 0x02, 0x65, //0x0000370f cmpb $101, $2(%r8,%rcx) + 0x0f, 0x85, 0x16, 0xfe, 0xff, 0xff, //0x00003715 jne LBB0_645 + //0x0000371b LBB0_672 + 0x48, 0x83, 0xc1, 0x03, //0x0000371b addq $3, %rcx + 0x49, 0x89, 0x0b, //0x0000371f movq %rcx, (%r11) + 0xe9, 0x0a, 0xfe, 0xff, 0xff, //0x00003722 jmp LBB0_645 + //0x00003727 LBB0_296 + 0x48, 0x83, 0xc1, 0xff, //0x00003727 addq $-1, %rcx + 0x49, 0x89, 0xcf, //0x0000372b movq %rcx, %r15 + 0xe9, 0x05, 0xfe, 0xff, 0xff, //0x0000372e jmp LBB0_646 + //0x00003733 LBB0_432 + 0x49, 0x83, 0xc7, 0xff, //0x00003733 addq $-1, %r15 + 0xe9, 0xfc, 0xfd, 0xff, 0xff, //0x00003737 jmp LBB0_646 + //0x0000373c LBB0_673 + 0x4c, 0x89, 0xe1, //0x0000373c movq %r12, %rcx + //0x0000373f LBB0_674 + 0x48, 0xf7, 0xd1, //0x0000373f notq %rcx + 0x48, 0x8b, 0x44, 0x24, 0x08, //0x00003742 movq $8(%rsp), %rax + 0x48, 0x01, 0x08, //0x00003747 addq %rcx, (%rax) + 0xe9, 0xe2, 0xfd, 0xff, 0xff, //0x0000374a jmp LBB0_645 + //0x0000374f LBB0_675 + 0x4c, 0x29, 0xd0, //0x0000374f subq %r10, %rax + 0x48, 0x01, 0xf0, //0x00003752 addq %rsi, %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00003755 movq $-1, %r15 + 0x48, 0x39, 0xd0, //0x0000375c cmpq %rdx, %rax + 0x0f, 0x82, 0x99, 0xcd, 0xff, 0xff, //0x0000375f jb LBB0_33 + 0xe9, 0xce, 0xfd, 0xff, 0xff, //0x00003765 jmp LBB0_646 + //0x0000376a LBB0_680 + 0x4d, 0x89, 0xc4, //0x0000376a movq %r8, %r12 + 0xe9, 0xb6, 0xf6, 0xff, 0xff, //0x0000376d jmp LBB0_387 + //0x00003772 LBB0_677 + 0x4c, 0x29, 0xd2, //0x00003772 subq %r10, %rdx + 0x48, 0x83, 0xc2, 0x01, //0x00003775 addq $1, %rdx + 0x49, 0x89, 0x55, 0x00, //0x00003779 movq %rdx, (%r13) + 0x49, 0x89, 0xc7, //0x0000377d movq %rax, %r15 + 0xe9, 0xb3, 0xfd, 0xff, 0xff, //0x00003780 jmp LBB0_646 + //0x00003785 LBB0_223 + 0x4c, 0x01, 0xfa, //0x00003785 addq %r15, %rdx + 0x49, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x00003788 movq $-2, %r15 + 0x49, 0x89, 0x13, //0x0000378f movq %rdx, (%r11) + 0xe9, 0xa1, 0xfd, 0xff, 0xff, //0x00003792 jmp LBB0_646 + //0x00003797 LBB0_678 + 0x4c, 0x01, 0xd0, //0x00003797 addq %r10, %rax + 0x48, 0x85, 0xff, //0x0000379a testq %rdi, %rdi + 0x0f, 0x85, 0xe5, 0xcc, 0xff, 0xff, //0x0000379d jne LBB0_25 + 0xe9, 0x17, 0xcd, 0xff, 0xff, //0x000037a3 jmp LBB0_30 + //0x000037a8 LBB0_679 + 0x4c, 0x01, 0xd2, //0x000037a8 addq %r10, %rdx + 0x48, 0x83, 0xfe, 0x10, //0x000037ab cmpq $16, %rsi + 0x0f, 0x83, 0xfb, 0xcd, 0xff, 0xff, //0x000037af jae LBB0_40 + 0xe9, 0x4a, 0xce, 0xff, 0xff, //0x000037b5 jmp LBB0_44 + //0x000037ba LBB0_681 + 0x4c, 0x01, 0xd2, //0x000037ba addq %r10, %rdx + 0xe9, 0x69, 0xf7, 0xff, 0xff, //0x000037bd jmp LBB0_586 + //0x000037c2 LBB0_682 + 0x49, 0x8b, 0x45, 0x08, //0x000037c2 movq $8(%r13), %rax + 0x48, 0x8b, 0x4c, 0x24, 0x08, //0x000037c6 movq $8(%rsp), %rcx + 0x48, 0x89, 0x01, //0x000037cb movq %rax, (%rcx) + 0xe9, 0x65, 0xfd, 0xff, 0xff, //0x000037ce jmp LBB0_646 + //0x000037d3 LBB0_683 + 0x89, 0xf9, //0x000037d3 movl %edi, %ecx + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x000037d5 subq $16(%rsp), %r15 + 0x49, 0x01, 0xcf, //0x000037da addq %rcx, %r15 + 0x4c, 0x89, 0xfa, //0x000037dd movq %r15, %rdx + 0xe9, 0xc7, 0xfd, 0xff, 0xff, //0x000037e0 jmp LBB0_654 + //0x000037e5 LBB0_688 + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x000037e5 subq $16(%rsp), %r15 + 0x89, 0xfa, //0x000037ea movl %edi, %edx + 0xe9, 0xb8, 0xfd, 0xff, 0xff, //0x000037ec jmp LBB0_653 + //0x000037f1 LBB0_684 + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x000037f1 subq $16(%rsp), %r15 + 0x4c, 0x89, 0xfa, //0x000037f6 movq %r15, %rdx + 0x49, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x000037f9 movq $-2, %r15 + 0x49, 0x89, 0x13, //0x00003800 movq %rdx, (%r11) + 0xe9, 0x30, 0xfd, 0xff, 0xff, //0x00003803 jmp LBB0_646 + //0x00003808 LBB0_687 + 0x89, 0xf8, //0x00003808 movl %edi, %eax + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x0000380a subq $16(%rsp), %r15 + 0x49, 0x01, 0xc7, //0x0000380f addq %rax, %r15 + 0x4c, 0x89, 0xfa, //0x00003812 movq %r15, %rdx + 0xe9, 0x92, 0xfd, 0xff, 0xff, //0x00003815 jmp LBB0_654 + //0x0000381a LBB0_685 + 0x49, 0x8d, 0x48, 0xff, //0x0000381a leaq $-1(%r8), %rcx + 0x4c, 0x39, 0xf1, //0x0000381e cmpq %r14, %rcx + 0x0f, 0x84, 0x11, 0xfd, 0xff, 0xff, //0x00003821 je LBB0_646 + 0x4b, 0x8d, 0x14, 0x0e, //0x00003827 leaq (%r14,%r9), %rdx + 0x48, 0x83, 0xc2, 0x02, //0x0000382b addq $2, %rdx + 0x4d, 0x29, 0xf0, //0x0000382f subq %r14, %r8 + 0x49, 0x83, 0xc0, 0xfe, //0x00003832 addq $-2, %r8 + 0x4d, 0x89, 0xc6, //0x00003836 movq %r8, %r14 + 0xe9, 0xed, 0xf6, 0xff, 0xff, //0x00003839 jmp LBB0_586 + //0x0000383e LBB0_689 + 0x4c, 0x2b, 0x7c, 0x24, 0x10, //0x0000383e subq $16(%rsp), %r15 + 0x4c, 0x89, 0xfa, //0x00003843 movq %r15, %rdx + 0xe9, 0x61, 0xfd, 0xff, 0xff, //0x00003846 jmp LBB0_654 + 0x90, //0x0000384b .p2align 2, 0x90 + // // .set L0_0_set_646, LBB0_646-LJTI0_0 + // // .set L0_0_set_575, LBB0_575-LJTI0_0 + // // .set L0_0_set_576, LBB0_576-LJTI0_0 // // .set L0_0_set_35, LBB0_35-LJTI0_0 - // // .set L0_0_set_607, LBB0_607-LJTI0_0 - // // .set L0_0_set_582, LBB0_582-LJTI0_0 - // // .set L0_0_set_568, LBB0_568-LJTI0_0 - // // .set L0_0_set_583, LBB0_583-LJTI0_0 - //0x0000379c LJTI0_0 - 0x3c, 0xfd, 0xff, 0xff, //0x0000379c .long L0_0_set_638 - 0x44, 0xf6, 0xff, 0xff, //0x000037a0 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037a4 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037a8 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037ac .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037b0 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037b4 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037b8 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037bc .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037c0 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037c4 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037c8 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037cc .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037d0 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037d4 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037d8 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037dc .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037e0 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037e4 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037e8 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037ec .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037f0 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037f4 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037f8 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000037fc .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003800 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003804 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003808 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x0000380c .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003810 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003814 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003818 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x0000381c .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003820 .long L0_0_set_569 - 0x4c, 0xf6, 0xff, 0xff, //0x00003824 .long L0_0_set_570 - 0x44, 0xf6, 0xff, 0xff, //0x00003828 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x0000382c .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003830 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003834 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003838 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x0000383c .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003840 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003844 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003848 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x0000384c .long L0_0_set_569 - 0x8e, 0xcd, 0xff, 0xff, //0x00003850 .long L0_0_set_35 - 0x44, 0xf6, 0xff, 0xff, //0x00003854 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003858 .long L0_0_set_569 - 0x8e, 0xcd, 0xff, 0xff, //0x0000385c .long L0_0_set_35 - 0x8e, 0xcd, 0xff, 0xff, //0x00003860 .long L0_0_set_35 - 0x8e, 0xcd, 0xff, 0xff, //0x00003864 .long L0_0_set_35 - 0x8e, 0xcd, 0xff, 0xff, //0x00003868 .long L0_0_set_35 - 0x8e, 0xcd, 0xff, 0xff, //0x0000386c .long L0_0_set_35 - 0x8e, 0xcd, 0xff, 0xff, //0x00003870 .long L0_0_set_35 - 0x8e, 0xcd, 0xff, 0xff, //0x00003874 .long L0_0_set_35 - 0x8e, 0xcd, 0xff, 0xff, //0x00003878 .long L0_0_set_35 - 0x8e, 0xcd, 0xff, 0xff, //0x0000387c .long L0_0_set_35 - 0x8e, 0xcd, 0xff, 0xff, //0x00003880 .long L0_0_set_35 - 0x44, 0xf6, 0xff, 0xff, //0x00003884 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003888 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x0000388c .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003890 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003894 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003898 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x0000389c .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038a0 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038a4 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038a8 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038ac .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038b0 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038b4 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038b8 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038bc .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038c0 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038c4 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038c8 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038cc .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038d0 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038d4 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038d8 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038dc .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038e0 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038e4 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038e8 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038ec .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038f0 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038f4 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038f8 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x000038fc .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003900 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003904 .long L0_0_set_569 - 0x0f, 0xfa, 0xff, 0xff, //0x00003908 .long L0_0_set_607 - 0x44, 0xf6, 0xff, 0xff, //0x0000390c .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003910 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003914 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003918 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x0000391c .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003920 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003924 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003928 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x0000392c .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003930 .long L0_0_set_569 - 0x44, 0xf7, 0xff, 0xff, //0x00003934 .long L0_0_set_582 - 0x44, 0xf6, 0xff, 0xff, //0x00003938 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x0000393c .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003940 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003944 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003948 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x0000394c .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003950 .long L0_0_set_569 - 0xf9, 0xf5, 0xff, 0xff, //0x00003954 .long L0_0_set_568 - 0x44, 0xf6, 0xff, 0xff, //0x00003958 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x0000395c .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003960 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003964 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003968 .long L0_0_set_569 - 0xf9, 0xf5, 0xff, 0xff, //0x0000396c .long L0_0_set_568 - 0x44, 0xf6, 0xff, 0xff, //0x00003970 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003974 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003978 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x0000397c .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003980 .long L0_0_set_569 - 0x44, 0xf6, 0xff, 0xff, //0x00003984 .long L0_0_set_569 - 0x57, 0xf7, 0xff, 0xff, //0x00003988 .long L0_0_set_583 - // // .set L0_1_set_90, LBB0_90-LJTI0_1 - // // .set L0_1_set_117, LBB0_117-LJTI0_1 + // // .set L0_0_set_615, LBB0_615-LJTI0_0 + // // .set L0_0_set_588, LBB0_588-LJTI0_0 + // // .set L0_0_set_574, LBB0_574-LJTI0_0 + // // .set L0_0_set_591, LBB0_591-LJTI0_0 + //0x0000384c LJTI0_0 + 0xec, 0xfc, 0xff, 0xff, //0x0000384c .long L0_0_set_646 + 0xfa, 0xf5, 0xff, 0xff, //0x00003850 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003854 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003858 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x0000385c .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003860 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003864 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003868 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x0000386c .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003870 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003874 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003878 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x0000387c .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003880 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003884 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003888 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x0000388c .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003890 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003894 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003898 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x0000389c .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038a0 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038a4 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038a8 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038ac .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038b0 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038b4 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038b8 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038bc .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038c0 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038c4 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038c8 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038cc .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038d0 .long L0_0_set_575 + 0x02, 0xf6, 0xff, 0xff, //0x000038d4 .long L0_0_set_576 + 0xfa, 0xf5, 0xff, 0xff, //0x000038d8 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038dc .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038e0 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038e4 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038e8 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038ec .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038f0 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038f4 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038f8 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000038fc .long L0_0_set_575 + 0xde, 0xcc, 0xff, 0xff, //0x00003900 .long L0_0_set_35 + 0xfa, 0xf5, 0xff, 0xff, //0x00003904 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003908 .long L0_0_set_575 + 0xde, 0xcc, 0xff, 0xff, //0x0000390c .long L0_0_set_35 + 0xde, 0xcc, 0xff, 0xff, //0x00003910 .long L0_0_set_35 + 0xde, 0xcc, 0xff, 0xff, //0x00003914 .long L0_0_set_35 + 0xde, 0xcc, 0xff, 0xff, //0x00003918 .long L0_0_set_35 + 0xde, 0xcc, 0xff, 0xff, //0x0000391c .long L0_0_set_35 + 0xde, 0xcc, 0xff, 0xff, //0x00003920 .long L0_0_set_35 + 0xde, 0xcc, 0xff, 0xff, //0x00003924 .long L0_0_set_35 + 0xde, 0xcc, 0xff, 0xff, //0x00003928 .long L0_0_set_35 + 0xde, 0xcc, 0xff, 0xff, //0x0000392c .long L0_0_set_35 + 0xde, 0xcc, 0xff, 0xff, //0x00003930 .long L0_0_set_35 + 0xfa, 0xf5, 0xff, 0xff, //0x00003934 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003938 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x0000393c .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003940 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003944 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003948 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x0000394c .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003950 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003954 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003958 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x0000395c .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003960 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003964 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003968 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x0000396c .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003970 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003974 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003978 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x0000397c .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003980 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003984 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003988 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x0000398c .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003990 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003994 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003998 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x0000399c .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039a0 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039a4 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039a8 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039ac .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039b0 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039b4 .long L0_0_set_575 + 0xbf, 0xf9, 0xff, 0xff, //0x000039b8 .long L0_0_set_615 + 0xfa, 0xf5, 0xff, 0xff, //0x000039bc .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039c0 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039c4 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039c8 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039cc .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039d0 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039d4 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039d8 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039dc .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039e0 .long L0_0_set_575 + 0xf4, 0xf6, 0xff, 0xff, //0x000039e4 .long L0_0_set_588 + 0xfa, 0xf5, 0xff, 0xff, //0x000039e8 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039ec .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039f0 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039f4 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039f8 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x000039fc .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003a00 .long L0_0_set_575 + 0xb9, 0xf5, 0xff, 0xff, //0x00003a04 .long L0_0_set_574 + 0xfa, 0xf5, 0xff, 0xff, //0x00003a08 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003a0c .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003a10 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003a14 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003a18 .long L0_0_set_575 + 0xb9, 0xf5, 0xff, 0xff, //0x00003a1c .long L0_0_set_574 + 0xfa, 0xf5, 0xff, 0xff, //0x00003a20 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003a24 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003a28 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003a2c .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003a30 .long L0_0_set_575 + 0xfa, 0xf5, 0xff, 0xff, //0x00003a34 .long L0_0_set_575 + 0x0d, 0xf7, 0xff, 0xff, //0x00003a38 .long L0_0_set_591 // // .set L0_1_set_96, LBB0_96-LJTI0_1 - // // .set L0_1_set_115, LBB0_115-LJTI0_1 - // // .set L0_1_set_93, LBB0_93-LJTI0_1 - // // .set L0_1_set_120, LBB0_120-LJTI0_1 - //0x0000398c LJTI0_1 - 0x90, 0xcf, 0xff, 0xff, //0x0000398c .long L0_1_set_90 - 0x40, 0xd1, 0xff, 0xff, //0x00003990 .long L0_1_set_117 - 0xc7, 0xcf, 0xff, 0xff, //0x00003994 .long L0_1_set_96 - 0x29, 0xd1, 0xff, 0xff, //0x00003998 .long L0_1_set_115 - 0xa7, 0xcf, 0xff, 0xff, //0x0000399c .long L0_1_set_93 - 0xc2, 0xd5, 0xff, 0xff, //0x000039a0 .long L0_1_set_120 - // // .set L0_2_set_638, LBB0_638-LJTI0_2 - // // .set L0_2_set_637, LBB0_637-LJTI0_2 - // // .set L0_2_set_263, LBB0_263-LJTI0_2 - // // .set L0_2_set_281, LBB0_281-LJTI0_2 - // // .set L0_2_set_134, LBB0_134-LJTI0_2 - // // .set L0_2_set_285, LBB0_285-LJTI0_2 + // // .set L0_1_set_123, LBB0_123-LJTI0_1 + // // .set L0_1_set_102, LBB0_102-LJTI0_1 + // // .set L0_1_set_121, LBB0_121-LJTI0_1 + // // .set L0_1_set_99, LBB0_99-LJTI0_1 + // // .set L0_1_set_126, LBB0_126-LJTI0_1 + //0x00003a3c LJTI0_1 + 0x50, 0xcf, 0xff, 0xff, //0x00003a3c .long L0_1_set_96 + 0x00, 0xd1, 0xff, 0xff, //0x00003a40 .long L0_1_set_123 + 0x87, 0xcf, 0xff, 0xff, //0x00003a44 .long L0_1_set_102 + 0xe9, 0xd0, 0xff, 0xff, //0x00003a48 .long L0_1_set_121 + 0x67, 0xcf, 0xff, 0xff, //0x00003a4c .long L0_1_set_99 + 0x82, 0xd5, 0xff, 0xff, //0x00003a50 .long L0_1_set_126 + // // .set L0_2_set_646, LBB0_646-LJTI0_2 + // // .set L0_2_set_645, LBB0_645-LJTI0_2 + // // .set L0_2_set_269, LBB0_269-LJTI0_2 // // .set L0_2_set_287, LBB0_287-LJTI0_2 + // // .set L0_2_set_140, LBB0_140-LJTI0_2 // // .set L0_2_set_291, LBB0_291-LJTI0_2 - // // .set L0_2_set_299, LBB0_299-LJTI0_2 + // // .set L0_2_set_293, LBB0_293-LJTI0_2 // // .set L0_2_set_297, LBB0_297-LJTI0_2 - //0x000039a4 LJTI0_2 - 0x34, 0xfb, 0xff, 0xff, //0x000039a4 .long L0_2_set_638 - 0x2d, 0xfb, 0xff, 0xff, //0x000039a8 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039ac .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039b0 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039b4 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039b8 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039bc .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039c0 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039c4 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039c8 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039cc .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039d0 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039d4 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039d8 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039dc .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039e0 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039e4 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039e8 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039ec .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039f0 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039f4 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039f8 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x000039fc .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a00 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a04 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a08 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a0c .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a10 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a14 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a18 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a1c .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a20 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a24 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a28 .long L0_2_set_637 - 0xcd, 0xdb, 0xff, 0xff, //0x00003a2c .long L0_2_set_263 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a30 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a34 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a38 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a3c .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a40 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a44 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a48 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a4c .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a50 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a54 .long L0_2_set_637 - 0x21, 0xdd, 0xff, 0xff, //0x00003a58 .long L0_2_set_281 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a5c .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a60 .long L0_2_set_637 - 0x71, 0xd1, 0xff, 0xff, //0x00003a64 .long L0_2_set_134 - 0x71, 0xd1, 0xff, 0xff, //0x00003a68 .long L0_2_set_134 - 0x71, 0xd1, 0xff, 0xff, //0x00003a6c .long L0_2_set_134 - 0x71, 0xd1, 0xff, 0xff, //0x00003a70 .long L0_2_set_134 - 0x71, 0xd1, 0xff, 0xff, //0x00003a74 .long L0_2_set_134 - 0x71, 0xd1, 0xff, 0xff, //0x00003a78 .long L0_2_set_134 - 0x71, 0xd1, 0xff, 0xff, //0x00003a7c .long L0_2_set_134 - 0x71, 0xd1, 0xff, 0xff, //0x00003a80 .long L0_2_set_134 - 0x71, 0xd1, 0xff, 0xff, //0x00003a84 .long L0_2_set_134 - 0x71, 0xd1, 0xff, 0xff, //0x00003a88 .long L0_2_set_134 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a8c .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a90 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a94 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a98 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003a9c .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003aa0 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003aa4 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003aa8 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003aac .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003ab0 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003ab4 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003ab8 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003abc .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003ac0 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003ac4 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003ac8 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003acc .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003ad0 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003ad4 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003ad8 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003adc .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003ae0 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003ae4 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003ae8 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003aec .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003af0 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003af4 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003af8 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003afc .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b00 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b04 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b08 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b0c .long L0_2_set_637 - 0x5b, 0xdd, 0xff, 0xff, //0x00003b10 .long L0_2_set_285 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b14 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b18 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b1c .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b20 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b24 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b28 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b2c .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b30 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b34 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b38 .long L0_2_set_637 - 0x80, 0xdd, 0xff, 0xff, //0x00003b3c .long L0_2_set_287 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b40 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b44 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b48 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b4c .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b50 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b54 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b58 .long L0_2_set_637 - 0xb9, 0xdd, 0xff, 0xff, //0x00003b5c .long L0_2_set_291 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b60 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b64 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b68 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b6c .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b70 .long L0_2_set_637 - 0x0a, 0xde, 0xff, 0xff, //0x00003b74 .long L0_2_set_299 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b78 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b7c .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b80 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b84 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b88 .long L0_2_set_637 - 0x2d, 0xfb, 0xff, 0xff, //0x00003b8c .long L0_2_set_637 - 0xe5, 0xdd, 0xff, 0xff, //0x00003b90 .long L0_2_set_297 + // // .set L0_2_set_305, LBB0_305-LJTI0_2 + // // .set L0_2_set_303, LBB0_303-LJTI0_2 + //0x00003a54 LJTI0_2 + 0xe4, 0xfa, 0xff, 0xff, //0x00003a54 .long L0_2_set_646 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a58 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a5c .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a60 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a64 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a68 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a6c .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a70 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a74 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a78 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a7c .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a80 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a84 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a88 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a8c .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a90 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a94 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a98 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003a9c .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003aa0 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003aa4 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003aa8 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003aac .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003ab0 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003ab4 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003ab8 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003abc .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003ac0 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003ac4 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003ac8 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003acc .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003ad0 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003ad4 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003ad8 .long L0_2_set_645 + 0x8d, 0xdb, 0xff, 0xff, //0x00003adc .long L0_2_set_269 + 0xdd, 0xfa, 0xff, 0xff, //0x00003ae0 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003ae4 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003ae8 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003aec .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003af0 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003af4 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003af8 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003afc .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b00 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b04 .long L0_2_set_645 + 0xe1, 0xdc, 0xff, 0xff, //0x00003b08 .long L0_2_set_287 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b0c .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b10 .long L0_2_set_645 + 0x31, 0xd1, 0xff, 0xff, //0x00003b14 .long L0_2_set_140 + 0x31, 0xd1, 0xff, 0xff, //0x00003b18 .long L0_2_set_140 + 0x31, 0xd1, 0xff, 0xff, //0x00003b1c .long L0_2_set_140 + 0x31, 0xd1, 0xff, 0xff, //0x00003b20 .long L0_2_set_140 + 0x31, 0xd1, 0xff, 0xff, //0x00003b24 .long L0_2_set_140 + 0x31, 0xd1, 0xff, 0xff, //0x00003b28 .long L0_2_set_140 + 0x31, 0xd1, 0xff, 0xff, //0x00003b2c .long L0_2_set_140 + 0x31, 0xd1, 0xff, 0xff, //0x00003b30 .long L0_2_set_140 + 0x31, 0xd1, 0xff, 0xff, //0x00003b34 .long L0_2_set_140 + 0x31, 0xd1, 0xff, 0xff, //0x00003b38 .long L0_2_set_140 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b3c .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b40 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b44 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b48 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b4c .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b50 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b54 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b58 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b5c .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b60 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b64 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b68 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b6c .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b70 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b74 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b78 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b7c .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b80 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b84 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b88 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b8c .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b90 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b94 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b98 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003b9c .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003ba0 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003ba4 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003ba8 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bac .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bb0 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bb4 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bb8 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bbc .long L0_2_set_645 + 0x1b, 0xdd, 0xff, 0xff, //0x00003bc0 .long L0_2_set_291 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bc4 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bc8 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bcc .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bd0 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bd4 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bd8 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bdc .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003be0 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003be4 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003be8 .long L0_2_set_645 + 0x40, 0xdd, 0xff, 0xff, //0x00003bec .long L0_2_set_293 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bf0 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bf4 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bf8 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003bfc .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003c00 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003c04 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003c08 .long L0_2_set_645 + 0x79, 0xdd, 0xff, 0xff, //0x00003c0c .long L0_2_set_297 + 0xdd, 0xfa, 0xff, 0xff, //0x00003c10 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003c14 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003c18 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003c1c .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003c20 .long L0_2_set_645 + 0xca, 0xdd, 0xff, 0xff, //0x00003c24 .long L0_2_set_305 + 0xdd, 0xfa, 0xff, 0xff, //0x00003c28 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003c2c .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003c30 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003c34 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003c38 .long L0_2_set_645 + 0xdd, 0xfa, 0xff, 0xff, //0x00003c3c .long L0_2_set_645 + 0xa5, 0xdd, 0xff, 0xff, //0x00003c40 .long L0_2_set_303 + // // .set L0_3_set_375, LBB0_375-LJTI0_3 + // // .set L0_3_set_391, LBB0_391-LJTI0_3 // // .set L0_3_set_369, LBB0_369-LJTI0_3 - // // .set L0_3_set_385, LBB0_385-LJTI0_3 - // // .set L0_3_set_363, LBB0_363-LJTI0_3 - // // .set L0_3_set_372, LBB0_372-LJTI0_3 - //0x00003b94 LJTI0_3 - 0xe6, 0xe0, 0xff, 0xff, //0x00003b94 .long L0_3_set_369 - 0xae, 0xe1, 0xff, 0xff, //0x00003b98 .long L0_3_set_385 - 0xe6, 0xe0, 0xff, 0xff, //0x00003b9c .long L0_3_set_369 - 0x8a, 0xe0, 0xff, 0xff, //0x00003ba0 .long L0_3_set_363 - 0xae, 0xe1, 0xff, 0xff, //0x00003ba4 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003ba8 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bac .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bb0 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bb4 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bb8 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bbc .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bc0 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bc4 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bc8 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bcc .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bd0 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bd4 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bd8 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bdc .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003be0 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003be4 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003be8 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bec .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bf0 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bf4 .long L0_3_set_385 - 0xae, 0xe1, 0xff, 0xff, //0x00003bf8 .long L0_3_set_385 - 0x02, 0xe1, 0xff, 0xff, //0x00003bfc .long L0_3_set_372 - // // .set L0_4_set_178, LBB0_178-LJTI0_4 - // // .set L0_4_set_244, LBB0_244-LJTI0_4 + // // .set L0_3_set_378, LBB0_378-LJTI0_3 + //0x00003c44 LJTI0_3 + 0xa6, 0xe0, 0xff, 0xff, //0x00003c44 .long L0_3_set_375 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c48 .long L0_3_set_391 + 0xa6, 0xe0, 0xff, 0xff, //0x00003c4c .long L0_3_set_375 + 0x4a, 0xe0, 0xff, 0xff, //0x00003c50 .long L0_3_set_369 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c54 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c58 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c5c .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c60 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c64 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c68 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c6c .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c70 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c74 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c78 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c7c .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c80 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c84 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c88 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c8c .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c90 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c94 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c98 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003c9c .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003ca0 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003ca4 .long L0_3_set_391 + 0x6e, 0xe1, 0xff, 0xff, //0x00003ca8 .long L0_3_set_391 + 0xc2, 0xe0, 0xff, 0xff, //0x00003cac .long L0_3_set_378 // // .set L0_4_set_184, LBB0_184-LJTI0_4 - // // .set L0_4_set_187, LBB0_187-LJTI0_4 - //0x00003c00 LJTI0_4 - 0xcc, 0xd2, 0xff, 0xff, //0x00003c00 .long L0_4_set_178 - 0x31, 0xd8, 0xff, 0xff, //0x00003c04 .long L0_4_set_244 - 0xcc, 0xd2, 0xff, 0xff, //0x00003c08 .long L0_4_set_178 - 0x1a, 0xd3, 0xff, 0xff, //0x00003c0c .long L0_4_set_184 - 0x31, 0xd8, 0xff, 0xff, //0x00003c10 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c14 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c18 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c1c .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c20 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c24 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c28 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c2c .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c30 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c34 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c38 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c3c .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c40 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c44 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c48 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c4c .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c50 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c54 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c58 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c5c .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c60 .long L0_4_set_244 - 0x31, 0xd8, 0xff, 0xff, //0x00003c64 .long L0_4_set_244 - 0x3b, 0xd3, 0xff, 0xff, //0x00003c68 .long L0_4_set_187 - //0x00003c6c .p2align 2, 0x00 - //0x00003c6c _MASK_USE_NUMBER - 0x02, 0x00, 0x00, 0x00, //0x00003c6c .long 2 + // // .set L0_4_set_250, LBB0_250-LJTI0_4 + // // .set L0_4_set_190, LBB0_190-LJTI0_4 + // // .set L0_4_set_193, LBB0_193-LJTI0_4 + //0x00003cb0 LJTI0_4 + 0x8c, 0xd2, 0xff, 0xff, //0x00003cb0 .long L0_4_set_184 + 0xf1, 0xd7, 0xff, 0xff, //0x00003cb4 .long L0_4_set_250 + 0x8c, 0xd2, 0xff, 0xff, //0x00003cb8 .long L0_4_set_184 + 0xda, 0xd2, 0xff, 0xff, //0x00003cbc .long L0_4_set_190 + 0xf1, 0xd7, 0xff, 0xff, //0x00003cc0 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003cc4 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003cc8 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003ccc .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003cd0 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003cd4 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003cd8 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003cdc .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003ce0 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003ce4 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003ce8 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003cec .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003cf0 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003cf4 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003cf8 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003cfc .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003d00 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003d04 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003d08 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003d0c .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003d10 .long L0_4_set_250 + 0xf1, 0xd7, 0xff, 0xff, //0x00003d14 .long L0_4_set_250 + 0xfb, 0xd2, 0xff, 0xff, //0x00003d18 .long L0_4_set_193 + //0x00003d1c .p2align 2, 0x00 + //0x00003d1c _MASK_USE_NUMBER + 0x02, 0x00, 0x00, 0x00, //0x00003d1c .long 2 } diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/validate_one_subr.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/validate_one_subr.go index f590757..844ab1b 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/validate_one_subr.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx2/validate_one_subr.go @@ -16,7 +16,7 @@ const ( ) const ( - _size__validate_one = 15136 + _size__validate_one = 15384 ) var ( @@ -28,15 +28,15 @@ var ( {0xc, 32}, {0xd, 40}, {0x14, 48}, - {0x38dd, 208}, - {0x38de, 48}, - {0x38e0, 40}, - {0x38e2, 32}, - {0x38e4, 24}, - {0x38e6, 16}, - {0x38e7, 8}, - {0x38eb, 0}, - {0x3b20, 208}, + {0x3a59, 208}, + {0x3a5a, 48}, + {0x3a5c, 40}, + {0x3a5e, 32}, + {0x3a60, 24}, + {0x3a62, 16}, + {0x3a63, 8}, + {0x3a67, 0}, + {0x3c18, 208}, } ) diff --git a/vendor/github.com/bytedance/sonic/internal/native/avx2/validate_one_text_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/avx2/validate_one_text_amd64.go index 035d8cd..e3bae5c 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/avx2/validate_one_text_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/avx2/validate_one_text_amd64.go @@ -120,4081 +120,4142 @@ var _text_validate_one = []byte{ 0x53, //0x000002cc pushq %rbx 0x48, 0x81, 0xec, 0xa0, 0x00, 0x00, 0x00, //0x000002cd subq $160, %rsp 0x49, 0x89, 0xcb, //0x000002d4 movq %rcx, %r11 - 0x49, 0x89, 0xd7, //0x000002d7 movq %rdx, %r15 - 0x49, 0x89, 0xf5, //0x000002da movq %rsi, %r13 - 0xc5, 0xfa, 0x6f, 0x05, 0x1b, 0xfd, 0xff, 0xff, //0x000002dd vmovdqu $-741(%rip), %xmm0 /* LCPI0_0+0(%rip) */ - 0xc5, 0xfa, 0x7f, 0x02, //0x000002e5 vmovdqu %xmm0, (%rdx) - 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x000002e9 movq $-1, %r12 - 0xc5, 0xfe, 0x6f, 0x2d, 0xc8, 0xfd, 0xff, 0xff, //0x000002f0 vmovdqu $-568(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0xe0, 0xfd, 0xff, 0xff, //0x000002f8 vmovdqu $-544(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0xf8, 0xfd, 0xff, 0xff, //0x00000300 vmovdqu $-520(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x10, 0xfe, 0xff, 0xff, //0x00000308 vmovdqu $-496(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00000310 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0xe3, 0xfe, 0xff, 0xff, //0x00000315 vmovdqu $-285(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0xfb, 0xfe, 0xff, 0xff, //0x0000031d vmovdqu $-261(%rip), %ymm13 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0x13, 0xff, 0xff, 0xff, //0x00000325 vmovdqu $-237(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0xab, 0xfe, 0xff, 0xff, //0x0000032d vmovdqu $-341(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x63, 0xff, 0xff, 0xff, //0x00000335 vmovdqu $-157(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x7b, 0xfe, 0xff, 0xff, //0x0000033d vmovdqu $-389(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0xf3, 0xfd, 0xff, 0xff, //0x00000345 vmovdqu $-525(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x0b, 0xfe, 0xff, 0xff, //0x0000034d vmovdqu $-501(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - 0x48, 0x89, 0x4c, 0x24, 0x18, //0x00000355 movq %rcx, $24(%rsp) - 0x48, 0x89, 0x7c, 0x24, 0x10, //0x0000035a movq %rdi, $16(%rsp) - 0x48, 0x89, 0x54, 0x24, 0x08, //0x0000035f movq %rdx, $8(%rsp) - 0xe9, 0x77, 0x00, 0x00, 0x00, //0x00000364 jmp LBB0_5 - //0x00000369 LBB0_153 - 0x41, 0x0f, 0xbc, 0xc3, //0x00000369 bsfl %r11d, %eax - 0x4c, 0x01, 0xc0, //0x0000036d addq %r8, %rax - 0x4c, 0x8d, 0x0c, 0x06, //0x00000370 leaq (%rsi,%rax), %r9 - 0x49, 0x83, 0xc1, 0x01, //0x00000374 addq $1, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00000378 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x0000037d movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00000382 movq $8(%rsp), %r15 - 0x4d, 0x89, 0x4d, 0x00, //0x00000387 movq %r9, (%r13) - 0x4d, 0x85, 0xc0, //0x0000038b testq %r8, %r8 - 0x0f, 0x8e, 0x98, 0x37, 0x00, 0x00, //0x0000038e jle LBB0_679 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000394 .p2align 4, 0x90 + 0x49, 0x89, 0xf7, //0x000002d7 movq %rsi, %r15 + 0x48, 0x89, 0x7c, 0x24, 0x20, //0x000002da movq %rdi, $32(%rsp) + 0xc5, 0xfa, 0x6f, 0x05, 0x19, 0xfd, 0xff, 0xff, //0x000002df vmovdqu $-743(%rip), %xmm0 /* LCPI0_0+0(%rip) */ + 0x48, 0x89, 0x54, 0x24, 0x18, //0x000002e7 movq %rdx, $24(%rsp) + 0xc5, 0xfa, 0x7f, 0x02, //0x000002ec vmovdqu %xmm0, (%rdx) + 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x000002f0 movq $-1, %r12 + 0xc5, 0xfe, 0x6f, 0x2d, 0xc1, 0xfd, 0xff, 0xff, //0x000002f7 vmovdqu $-575(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0xd9, 0xfd, 0xff, 0xff, //0x000002ff vmovdqu $-551(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0xf1, 0xfd, 0xff, 0xff, //0x00000307 vmovdqu $-527(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x09, 0xfe, 0xff, 0xff, //0x0000030f vmovdqu $-503(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00000317 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0xdc, 0xfe, 0xff, 0xff, //0x0000031c vmovdqu $-292(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0xf4, 0xfe, 0xff, 0xff, //0x00000324 vmovdqu $-268(%rip), %ymm13 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0x0c, 0xff, 0xff, 0xff, //0x0000032c vmovdqu $-244(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0xa4, 0xfe, 0xff, 0xff, //0x00000334 vmovdqu $-348(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x5c, 0xff, 0xff, 0xff, //0x0000033c vmovdqu $-164(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x74, 0xfe, 0xff, 0xff, //0x00000344 vmovdqu $-396(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0xec, 0xfd, 0xff, 0xff, //0x0000034c vmovdqu $-532(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x04, 0xfe, 0xff, 0xff, //0x00000354 vmovdqu $-508(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + 0x48, 0x89, 0x74, 0x24, 0x08, //0x0000035c movq %rsi, $8(%rsp) + 0x48, 0x89, 0x0c, 0x24, //0x00000361 movq %rcx, (%rsp) + 0xe9, 0x96, 0x00, 0x00, 0x00, //0x00000365 jmp LBB0_5 + //0x0000036a LBB0_235 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000036a movl $64, %edx + 0x4c, 0x8b, 0x1c, 0x24, //0x0000036f movq (%rsp), %r11 + 0x48, 0x39, 0xca, //0x00000373 cmpq %rcx, %rdx + 0x0f, 0x82, 0x0a, 0x3b, 0x00, 0x00, //0x00000376 jb LBB0_162 + //0x0000037c LBB0_236 + 0x48, 0x01, 0xc8, //0x0000037c addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000037f addq $1, %rax + 0x48, 0x85, 0xc0, //0x00000383 testq %rax, %rax + 0x0f, 0x88, 0x35, 0x39, 0x00, 0x00, //0x00000386 js LBB0_702 + //0x0000038c LBB0_237 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000038c movq $8(%rsp), %r15 + 0x49, 0x89, 0x07, //0x00000391 movq %rax, (%r15) + 0x4d, 0x85, 0xc9, //0x00000394 testq %r9, %r9 + 0x0f, 0x8e, 0x3d, 0x39, 0x00, 0x00, //0x00000397 jle LBB0_475 + 0x90, 0x90, 0x90, //0x0000039d .p2align 4, 0x90 //0x000003a0 LBB0_3 - 0x4d, 0x8b, 0x07, //0x000003a0 movq (%r15), %r8 - 0x4c, 0x89, 0x24, 0x24, //0x000003a3 movq %r12, (%rsp) - 0x4d, 0x85, 0xc0, //0x000003a7 testq %r8, %r8 - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000003aa jne LBB0_5 - 0xe9, 0xe0, 0x37, 0x00, 0x00, //0x000003b0 jmp LBB0_711 - //0x000003b5 LBB0_1 - 0x48, 0x89, 0xd1, //0x000003b5 movq %rdx, %rcx - //0x000003b8 LBB0_2 - 0x4c, 0x01, 0xe9, //0x000003b8 addq %r13, %rcx - 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x000003bb movq $48(%rsp), %r13 - 0x49, 0x89, 0x4d, 0x00, //0x000003c0 movq %rcx, (%r13) - 0x48, 0x85, 0xdb, //0x000003c4 testq %rbx, %rbx - 0x0f, 0x8f, 0xd3, 0xff, 0xff, 0xff, //0x000003c7 jg LBB0_3 - 0xe9, 0xc3, 0x37, 0x00, 0x00, //0x000003cd jmp LBB0_711 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000003d2 .p2align 4, 0x90 - //0x000003e0 LBB0_5 - 0x4d, 0x89, 0xe1, //0x000003e0 movq %r12, %r9 - 0x4c, 0x8b, 0x37, //0x000003e3 movq (%rdi), %r14 - 0x48, 0x8b, 0x5f, 0x08, //0x000003e6 movq $8(%rdi), %rbx - 0x49, 0x8b, 0x75, 0x00, //0x000003ea movq (%r13), %rsi - 0x48, 0x39, 0xde, //0x000003ee cmpq %rbx, %rsi - 0x0f, 0x83, 0x29, 0x00, 0x00, 0x00, //0x000003f1 jae LBB0_10 - 0x41, 0x8a, 0x04, 0x36, //0x000003f7 movb (%r14,%rsi), %al - 0x3c, 0x0d, //0x000003fb cmpb $13, %al - 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x000003fd je LBB0_10 - 0x3c, 0x20, //0x00000403 cmpb $32, %al - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000405 je LBB0_10 - 0x04, 0xf7, //0x0000040b addb $-9, %al - 0x3c, 0x01, //0x0000040d cmpb $1, %al - 0x0f, 0x86, 0x0b, 0x00, 0x00, 0x00, //0x0000040f jbe LBB0_10 - 0x49, 0x89, 0xf4, //0x00000415 movq %rsi, %r12 - 0xe9, 0x75, 0x01, 0x00, 0x00, //0x00000418 jmp LBB0_35 - 0x90, 0x90, 0x90, //0x0000041d .p2align 4, 0x90 - //0x00000420 LBB0_10 - 0x4c, 0x8d, 0x66, 0x01, //0x00000420 leaq $1(%rsi), %r12 - 0x49, 0x39, 0xdc, //0x00000424 cmpq %rbx, %r12 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000427 jae LBB0_14 - 0x43, 0x8a, 0x14, 0x26, //0x0000042d movb (%r14,%r12), %dl - 0x80, 0xfa, 0x0d, //0x00000431 cmpb $13, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000434 je LBB0_14 - 0x80, 0xfa, 0x20, //0x0000043a cmpb $32, %dl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000043d je LBB0_14 - 0x80, 0xc2, 0xf7, //0x00000443 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x00000446 cmpb $1, %dl - 0x0f, 0x87, 0x43, 0x01, 0x00, 0x00, //0x00000449 ja LBB0_35 - 0x90, //0x0000044f .p2align 4, 0x90 - //0x00000450 LBB0_14 - 0x4c, 0x8d, 0x66, 0x02, //0x00000450 leaq $2(%rsi), %r12 - 0x49, 0x39, 0xdc, //0x00000454 cmpq %rbx, %r12 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000457 jae LBB0_18 - 0x43, 0x8a, 0x14, 0x26, //0x0000045d movb (%r14,%r12), %dl - 0x80, 0xfa, 0x0d, //0x00000461 cmpb $13, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000464 je LBB0_18 - 0x80, 0xfa, 0x20, //0x0000046a cmpb $32, %dl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000046d je LBB0_18 - 0x80, 0xc2, 0xf7, //0x00000473 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x00000476 cmpb $1, %dl - 0x0f, 0x87, 0x13, 0x01, 0x00, 0x00, //0x00000479 ja LBB0_35 - 0x90, //0x0000047f .p2align 4, 0x90 - //0x00000480 LBB0_18 - 0x4c, 0x8d, 0x66, 0x03, //0x00000480 leaq $3(%rsi), %r12 - 0x49, 0x39, 0xdc, //0x00000484 cmpq %rbx, %r12 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000487 jae LBB0_22 - 0x43, 0x8a, 0x14, 0x26, //0x0000048d movb (%r14,%r12), %dl - 0x80, 0xfa, 0x0d, //0x00000491 cmpb $13, %dl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000494 je LBB0_22 - 0x80, 0xfa, 0x20, //0x0000049a cmpb $32, %dl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000049d je LBB0_22 - 0x80, 0xc2, 0xf7, //0x000004a3 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x000004a6 cmpb $1, %dl - 0x0f, 0x87, 0xe3, 0x00, 0x00, 0x00, //0x000004a9 ja LBB0_35 - 0x90, //0x000004af .p2align 4, 0x90 - //0x000004b0 LBB0_22 - 0x4c, 0x8d, 0x66, 0x04, //0x000004b0 leaq $4(%rsi), %r12 - 0x48, 0x89, 0xd8, //0x000004b4 movq %rbx, %rax - 0x4c, 0x29, 0xe0, //0x000004b7 subq %r12, %rax - 0x0f, 0x86, 0x4e, 0x36, 0x00, 0x00, //0x000004ba jbe LBB0_675 - 0x48, 0x83, 0xf8, 0x20, //0x000004c0 cmpq $32, %rax - 0x0f, 0x82, 0x69, 0x23, 0x00, 0x00, //0x000004c4 jb LBB0_488 - 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x000004ca movq $-4, %rax - 0x48, 0x29, 0xf0, //0x000004d1 subq %rsi, %rax - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000004d4 .p2align 4, 0x90 - //0x000004e0 LBB0_25 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x26, //0x000004e0 vmovdqu (%r14,%r12), %ymm0 - 0xc4, 0xe2, 0x55, 0x00, 0xc8, //0x000004e6 vpshufb %ymm0, %ymm5, %ymm1 - 0xc5, 0xfd, 0x74, 0xc1, //0x000004eb vpcmpeqb %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x000004ef vpmovmskb %ymm0, %edx - 0x83, 0xfa, 0xff, //0x000004f3 cmpl $-1, %edx - 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x000004f6 jne LBB0_34 - 0x49, 0x83, 0xc4, 0x20, //0x000004fc addq $32, %r12 - 0x48, 0x8d, 0x14, 0x03, //0x00000500 leaq (%rbx,%rax), %rdx - 0x48, 0x83, 0xc2, 0xe0, //0x00000504 addq $-32, %rdx - 0x48, 0x83, 0xc0, 0xe0, //0x00000508 addq $-32, %rax - 0x48, 0x83, 0xfa, 0x1f, //0x0000050c cmpq $31, %rdx - 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00000510 ja LBB0_25 - 0x4d, 0x89, 0xf4, //0x00000516 movq %r14, %r12 - 0x49, 0x29, 0xc4, //0x00000519 subq %rax, %r12 - 0x48, 0x01, 0xd8, //0x0000051c addq %rbx, %rax - 0x48, 0x85, 0xc0, //0x0000051f testq %rax, %rax - 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00000522 je LBB0_33 - //0x00000528 LBB0_28 - 0x4d, 0x8d, 0x04, 0x04, //0x00000528 leaq (%r12,%rax), %r8 - 0x31, 0xd2, //0x0000052c xorl %edx, %edx - 0x90, 0x90, //0x0000052e .p2align 4, 0x90 - //0x00000530 LBB0_29 - 0x41, 0x0f, 0xbe, 0x34, 0x14, //0x00000530 movsbl (%r12,%rdx), %esi - 0x83, 0xfe, 0x20, //0x00000535 cmpl $32, %esi - 0x0f, 0x87, 0x78, 0x1f, 0x00, 0x00, //0x00000538 ja LBB0_676 - 0x48, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000053e movabsq $4294977024, %rcx - 0x48, 0x0f, 0xa3, 0xf1, //0x00000548 btq %rsi, %rcx - 0x0f, 0x83, 0x64, 0x1f, 0x00, 0x00, //0x0000054c jae LBB0_676 - 0x48, 0x83, 0xc2, 0x01, //0x00000552 addq $1, %rdx - 0x48, 0x39, 0xd0, //0x00000556 cmpq %rdx, %rax - 0x0f, 0x85, 0xd1, 0xff, 0xff, 0xff, //0x00000559 jne LBB0_29 - 0x4d, 0x89, 0xc4, //0x0000055f movq %r8, %r12 - //0x00000562 LBB0_33 - 0x4d, 0x29, 0xf4, //0x00000562 subq %r14, %r12 - 0x49, 0x39, 0xdc, //0x00000565 cmpq %rbx, %r12 - 0x0f, 0x82, 0x24, 0x00, 0x00, 0x00, //0x00000568 jb LBB0_35 - 0xe9, 0x9f, 0x35, 0x00, 0x00, //0x0000056e jmp LBB0_677 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000573 .p2align 4, 0x90 - //0x00000580 LBB0_34 - 0xf7, 0xd2, //0x00000580 notl %edx - 0x44, 0x0f, 0xbc, 0xe2, //0x00000582 bsfl %edx, %r12d - 0x49, 0x29, 0xc4, //0x00000586 subq %rax, %r12 - 0x49, 0x39, 0xdc, //0x00000589 cmpq %rbx, %r12 - 0x0f, 0x83, 0x80, 0x35, 0x00, 0x00, //0x0000058c jae LBB0_677 - //0x00000592 LBB0_35 - 0x49, 0x8d, 0x54, 0x24, 0x01, //0x00000592 leaq $1(%r12), %rdx - 0x49, 0x89, 0x55, 0x00, //0x00000597 movq %rdx, (%r13) - 0x43, 0x0f, 0xbe, 0x04, 0x26, //0x0000059b movsbl (%r14,%r12), %eax - 0x85, 0xc0, //0x000005a0 testl %eax, %eax - 0x0f, 0x84, 0x6a, 0x35, 0x00, 0x00, //0x000005a2 je LBB0_677 - 0x49, 0x8b, 0x37, //0x000005a8 movq (%r15), %rsi - 0x4c, 0x8d, 0x46, 0xff, //0x000005ab leaq $-1(%rsi), %r8 - 0x41, 0x8b, 0x1c, 0xf7, //0x000005af movl (%r15,%rsi,8), %ebx - 0x49, 0x83, 0xf9, 0xff, //0x000005b3 cmpq $-1, %r9 - 0x4d, 0x0f, 0x45, 0xe1, //0x000005b7 cmovneq %r9, %r12 - 0x83, 0xc3, 0xff, //0x000005bb addl $-1, %ebx - 0x83, 0xfb, 0x05, //0x000005be cmpl $5, %ebx - 0x0f, 0x87, 0x27, 0x00, 0x00, 0x00, //0x000005c1 ja LBB0_41 - 0x48, 0x8d, 0x15, 0x12, 0x38, 0x00, 0x00, //0x000005c7 leaq $14354(%rip), %rdx /* LJTI0_0+0(%rip) */ - 0x48, 0x63, 0x0c, 0x9a, //0x000005ce movslq (%rdx,%rbx,4), %rcx - 0x48, 0x01, 0xd1, //0x000005d2 addq %rdx, %rcx - 0xff, 0xe1, //0x000005d5 jmpq *%rcx - //0x000005d7 LBB0_38 - 0x83, 0xf8, 0x2c, //0x000005d7 cmpl $44, %eax - 0x0f, 0x84, 0x41, 0x06, 0x00, 0x00, //0x000005da je LBB0_126 - 0x83, 0xf8, 0x5d, //0x000005e0 cmpl $93, %eax - 0x0f, 0x84, 0x23, 0x06, 0x00, 0x00, //0x000005e3 je LBB0_40 - 0xe9, 0x9f, 0x35, 0x00, 0x00, //0x000005e9 jmp LBB0_710 - //0x000005ee LBB0_41 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x000005ee movq $-1, (%rsp) - 0x4d, 0x89, 0x07, //0x000005f6 movq %r8, (%r15) - 0x83, 0xf8, 0x7b, //0x000005f9 cmpl $123, %eax - 0x0f, 0x86, 0xaf, 0x01, 0x00, 0x00, //0x000005fc jbe LBB0_67 - 0xe9, 0x86, 0x35, 0x00, 0x00, //0x00000602 jmp LBB0_710 - //0x00000607 LBB0_42 - 0x83, 0xf8, 0x2c, //0x00000607 cmpl $44, %eax - 0x0f, 0x85, 0xf3, 0x05, 0x00, 0x00, //0x0000060a jne LBB0_43 - 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00000610 cmpq $4095, %rsi - 0x0f, 0x8f, 0x02, 0x35, 0x00, 0x00, //0x00000617 jg LBB0_705 - 0x48, 0x8d, 0x4e, 0x01, //0x0000061d leaq $1(%rsi), %rcx - 0x49, 0x89, 0x0f, //0x00000621 movq %rcx, (%r15) - 0x49, 0xc7, 0x44, 0xf7, 0x08, 0x03, 0x00, 0x00, 0x00, //0x00000624 movq $3, $8(%r15,%rsi,8) - 0xe9, 0x6e, 0xfd, 0xff, 0xff, //0x0000062d jmp LBB0_3 - //0x00000632 LBB0_44 - 0x3c, 0x22, //0x00000632 cmpb $34, %al - 0x0f, 0x85, 0x53, 0x35, 0x00, 0x00, //0x00000634 jne LBB0_710 - 0x49, 0xc7, 0x04, 0xf7, 0x04, 0x00, 0x00, 0x00, //0x0000063a movq $4, (%r15,%rsi,8) - 0x41, 0xf6, 0xc3, 0x40, //0x00000642 testb $64, %r11b - 0x0f, 0x85, 0x2f, 0x07, 0x00, 0x00, //0x00000646 jne LBB0_148 - 0x4d, 0x8b, 0x4d, 0x00, //0x0000064c movq (%r13), %r9 - 0x4c, 0x8b, 0x47, 0x08, //0x00000650 movq $8(%rdi), %r8 - 0x4c, 0x89, 0xc3, //0x00000654 movq %r8, %rbx - 0x41, 0xf6, 0xc3, 0x20, //0x00000657 testb $32, %r11b - 0x0f, 0x85, 0xf6, 0x09, 0x00, 0x00, //0x0000065b jne LBB0_190 - 0x4c, 0x29, 0xcb, //0x00000661 subq %r9, %rbx - 0x0f, 0x84, 0xb2, 0x36, 0x00, 0x00, //0x00000664 je LBB0_717 - 0x48, 0x83, 0xfb, 0x40, //0x0000066a cmpq $64, %rbx - 0x0f, 0x82, 0x29, 0x24, 0x00, 0x00, //0x0000066e jb LBB0_504 - 0x4c, 0x89, 0xce, //0x00000674 movq %r9, %rsi - 0x48, 0xf7, 0xd6, //0x00000677 notq %rsi - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x0000067a movq $-1, %r11 - 0x4c, 0x89, 0xc9, //0x00000681 movq %r9, %rcx - 0x45, 0x31, 0xd2, //0x00000684 xorl %r10d, %r10d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000687 .p2align 4, 0x90 - //0x00000690 LBB0_50 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x0e, //0x00000690 vmovdqu (%r14,%rcx), %ymm0 - 0x49, 0x89, 0xcf, //0x00000696 movq %rcx, %r15 - 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x0e, 0x20, //0x00000699 vmovdqu $32(%r14,%rcx), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x000006a0 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x000006a4 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x000006a8 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x000006ac vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xc7, //0x000006b0 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x000006b4 vpmovmskb %ymm0, %edx - 0xc5, 0xf5, 0x74, 0xc7, //0x000006b8 vpcmpeqb %ymm7, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc8, //0x000006bc vpmovmskb %ymm0, %ecx - 0x48, 0xc1, 0xe0, 0x20, //0x000006c0 shlq $32, %rax - 0x48, 0x09, 0xc7, //0x000006c4 orq %rax, %rdi - 0x48, 0xc1, 0xe1, 0x20, //0x000006c7 shlq $32, %rcx - 0x48, 0x09, 0xca, //0x000006cb orq %rcx, %rdx - 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x000006ce jne LBB0_59 - 0x4d, 0x85, 0xd2, //0x000006d4 testq %r10, %r10 - 0x0f, 0x85, 0x3b, 0x00, 0x00, 0x00, //0x000006d7 jne LBB0_61 - 0x45, 0x31, 0xd2, //0x000006dd xorl %r10d, %r10d - 0x48, 0x85, 0xff, //0x000006e0 testq %rdi, %rdi - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x000006e3 jne LBB0_62 - //0x000006e9 LBB0_53 - 0x48, 0x83, 0xc3, 0xc0, //0x000006e9 addq $-64, %rbx - 0x48, 0x83, 0xc6, 0xc0, //0x000006ed addq $-64, %rsi - 0x4c, 0x89, 0xf9, //0x000006f1 movq %r15, %rcx - 0x48, 0x83, 0xc1, 0x40, //0x000006f4 addq $64, %rcx - 0x48, 0x83, 0xfb, 0x3f, //0x000006f8 cmpq $63, %rbx - 0x0f, 0x87, 0x8e, 0xff, 0xff, 0xff, //0x000006fc ja LBB0_50 - 0xe9, 0x42, 0x20, 0x00, 0x00, //0x00000702 jmp LBB0_54 - //0x00000707 LBB0_59 - 0x49, 0x83, 0xfb, 0xff, //0x00000707 cmpq $-1, %r11 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x0000070b jne LBB0_61 - 0x4c, 0x0f, 0xbc, 0xda, //0x00000711 bsfq %rdx, %r11 - 0x4d, 0x01, 0xfb, //0x00000715 addq %r15, %r11 - //0x00000718 LBB0_61 - 0x4c, 0x89, 0xd0, //0x00000718 movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x0000071b notq %rax - 0x48, 0x21, 0xd0, //0x0000071e andq %rdx, %rax - 0x48, 0x8d, 0x0c, 0x00, //0x00000721 leaq (%rax,%rax), %rcx - 0x4c, 0x09, 0xd1, //0x00000725 orq %r10, %rcx - 0x48, 0x89, 0x0c, 0x24, //0x00000728 movq %rcx, (%rsp) - 0x48, 0xf7, 0xd1, //0x0000072c notq %rcx - 0x48, 0x21, 0xd1, //0x0000072f andq %rdx, %rcx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000732 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd1, //0x0000073c andq %rdx, %rcx - 0x45, 0x31, 0xd2, //0x0000073f xorl %r10d, %r10d - 0x48, 0x01, 0xc1, //0x00000742 addq %rax, %rcx - 0x41, 0x0f, 0x92, 0xc2, //0x00000745 setb %r10b - 0x48, 0x01, 0xc9, //0x00000749 addq %rcx, %rcx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000074c movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc1, //0x00000756 xorq %rax, %rcx - 0x48, 0x23, 0x0c, 0x24, //0x00000759 andq (%rsp), %rcx - 0x48, 0xf7, 0xd1, //0x0000075d notq %rcx - 0x48, 0x21, 0xcf, //0x00000760 andq %rcx, %rdi - 0x48, 0x85, 0xff, //0x00000763 testq %rdi, %rdi - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000766 je LBB0_53 - //0x0000076c LBB0_62 - 0x4c, 0x0f, 0xbc, 0xd7, //0x0000076c bsfq %rdi, %r10 - 0x49, 0x29, 0xf2, //0x00000770 subq %rsi, %r10 - 0x4d, 0x89, 0xdf, //0x00000773 movq %r11, %r15 - 0xe9, 0xa5, 0x0b, 0x00, 0x00, //0x00000776 jmp LBB0_232 - //0x0000077b LBB0_63 - 0x3c, 0x3a, //0x0000077b cmpb $58, %al - 0x0f, 0x85, 0x0a, 0x34, 0x00, 0x00, //0x0000077d jne LBB0_710 - 0x49, 0xc7, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x00, //0x00000783 movq $0, (%r15,%rsi,8) - 0xe9, 0x10, 0xfc, 0xff, 0xff, //0x0000078b jmp LBB0_3 - //0x00000790 LBB0_65 - 0x3c, 0x5d, //0x00000790 cmpb $93, %al - 0x0f, 0x84, 0x74, 0x04, 0x00, 0x00, //0x00000792 je LBB0_40 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00000798 movq $-1, (%rsp) - 0x49, 0xc7, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x00, //0x000007a0 movq $1, (%r15,%rsi,8) - 0x83, 0xf8, 0x7b, //0x000007a8 cmpl $123, %eax - 0x0f, 0x87, 0xdc, 0x33, 0x00, 0x00, //0x000007ab ja LBB0_710 - //0x000007b1 LBB0_67 - 0x89, 0xc0, //0x000007b1 movl %eax, %eax - 0x48, 0x8d, 0x0d, 0x3e, 0x36, 0x00, 0x00, //0x000007b3 leaq $13886(%rip), %rcx /* LJTI0_1+0(%rip) */ - 0x48, 0x63, 0x04, 0x81, //0x000007ba movslq (%rcx,%rax,4), %rax - 0x48, 0x01, 0xc8, //0x000007be addq %rcx, %rax - 0xff, 0xe0, //0x000007c1 jmpq *%rax - //0x000007c3 LBB0_70 - 0x4c, 0x8b, 0x47, 0x08, //0x000007c3 movq $8(%rdi), %r8 - 0x49, 0x8b, 0x5d, 0x00, //0x000007c7 movq (%r13), %rbx - 0x41, 0xf6, 0xc3, 0x40, //0x000007cb testb $64, %r11b - 0x0f, 0x85, 0x67, 0x06, 0x00, 0x00, //0x000007cf jne LBB0_159 - 0x4c, 0x89, 0x6c, 0x24, 0x30, //0x000007d5 movq %r13, $48(%rsp) - 0x48, 0x8d, 0x53, 0xff, //0x000007da leaq $-1(%rbx), %rdx - 0x49, 0x29, 0xd0, //0x000007de subq %rdx, %r8 - 0x0f, 0x84, 0x78, 0x33, 0x00, 0x00, //0x000007e1 je LBB0_682 - 0x49, 0x8d, 0x04, 0x1e, //0x000007e7 leaq (%r14,%rbx), %rax - 0x48, 0x83, 0xc0, 0xff, //0x000007eb addq $-1, %rax - 0x48, 0x89, 0x44, 0x24, 0x38, //0x000007ef movq %rax, $56(%rsp) - 0x80, 0x38, 0x30, //0x000007f4 cmpb $48, (%rax) - 0x48, 0x89, 0x14, 0x24, //0x000007f7 movq %rdx, (%rsp) - 0x0f, 0x85, 0x3a, 0x00, 0x00, 0x00, //0x000007fb jne LBB0_76 - 0x41, 0xbd, 0x01, 0x00, 0x00, 0x00, //0x00000801 movl $1, %r13d - 0x49, 0x83, 0xf8, 0x01, //0x00000807 cmpq $1, %r8 - 0x0f, 0x84, 0xa4, 0xfb, 0xff, 0xff, //0x0000080b je LBB0_1 - 0x41, 0x8a, 0x0c, 0x1e, //0x00000811 movb (%r14,%rbx), %cl - 0x80, 0xc1, 0xd2, //0x00000815 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x00000818 cmpb $55, %cl - 0x0f, 0x87, 0x94, 0xfb, 0xff, 0xff, //0x0000081b ja LBB0_1 - 0x0f, 0xb6, 0xc1, //0x00000821 movzbl %cl, %eax - 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00000824 movabsq $36028797027352577, %rcx - 0x48, 0x0f, 0xa3, 0xc1, //0x0000082e btq %rax, %rcx - 0x48, 0x89, 0xd1, //0x00000832 movq %rdx, %rcx - 0x0f, 0x83, 0x7d, 0xfb, 0xff, 0xff, //0x00000835 jae LBB0_2 - //0x0000083b LBB0_76 - 0x48, 0x89, 0x5c, 0x24, 0x20, //0x0000083b movq %rbx, $32(%rsp) - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00000840 movq $-1, %r10 - 0x49, 0x83, 0xf8, 0x20, //0x00000847 cmpq $32, %r8 - 0x0f, 0x82, 0x21, 0x22, 0x00, 0x00, //0x0000084b jb LBB0_502 - 0x45, 0x31, 0xed, //0x00000851 xorl %r13d, %r13d - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00000854 movq $-1, %r9 - 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x0000085b movq $-1, $40(%rsp) - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000864 .p2align 4, 0x90 - //0x00000870 LBB0_78 - 0x48, 0x8b, 0x44, 0x24, 0x38, //0x00000870 movq $56(%rsp), %rax - 0xc4, 0xa1, 0x7e, 0x6f, 0x04, 0x28, //0x00000875 vmovdqu (%rax,%r13), %ymm0 - 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x0000087b vpcmpgtb %ymm10, %ymm0, %ymm1 - 0xc5, 0x95, 0x64, 0xd0, //0x00000880 vpcmpgtb %ymm0, %ymm13, %ymm2 - 0xc5, 0xed, 0xdb, 0xc9, //0x00000884 vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0x85, 0x74, 0xd0, //0x00000888 vpcmpeqb %ymm0, %ymm15, %ymm2 - 0xc5, 0xfd, 0x74, 0x1d, 0xcc, 0xf9, 0xff, 0xff, //0x0000088c vpcmpeqb $-1588(%rip), %ymm0, %ymm3 /* LCPI0_17+0(%rip) */ - 0xc5, 0xe5, 0xeb, 0xd2, //0x00000894 vpor %ymm2, %ymm3, %ymm2 - 0xc5, 0x8d, 0xdb, 0xd8, //0x00000898 vpand %ymm0, %ymm14, %ymm3 - 0xc5, 0xfd, 0x74, 0x05, 0xdc, 0xf9, 0xff, 0xff, //0x0000089c vpcmpeqb $-1572(%rip), %ymm0, %ymm0 /* LCPI0_18+0(%rip) */ - 0xc5, 0xfd, 0xd7, 0xd0, //0x000008a4 vpmovmskb %ymm0, %edx - 0xc5, 0xe5, 0x74, 0xdc, //0x000008a8 vpcmpeqb %ymm4, %ymm3, %ymm3 - 0xc5, 0xfd, 0xd7, 0xf3, //0x000008ac vpmovmskb %ymm3, %esi - 0xc5, 0x7d, 0xd7, 0xfa, //0x000008b0 vpmovmskb %ymm2, %r15d - 0xc5, 0xf5, 0xeb, 0xc0, //0x000008b4 vpor %ymm0, %ymm1, %ymm0 - 0xc5, 0xe5, 0xeb, 0xca, //0x000008b8 vpor %ymm2, %ymm3, %ymm1 - 0xc5, 0xfd, 0xeb, 0xc1, //0x000008bc vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x000008c0 vpmovmskb %ymm0, %eax - 0x48, 0xf7, 0xd0, //0x000008c4 notq %rax - 0x48, 0x0f, 0xbc, 0xc8, //0x000008c7 bsfq %rax, %rcx - 0x83, 0xf9, 0x20, //0x000008cb cmpl $32, %ecx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000008ce je LBB0_80 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x000008d4 movl $-1, %eax - 0xd3, 0xe0, //0x000008d9 shll %cl, %eax - 0xf7, 0xd0, //0x000008db notl %eax - 0x21, 0xc2, //0x000008dd andl %eax, %edx - 0x21, 0xc6, //0x000008df andl %eax, %esi - 0x44, 0x21, 0xf8, //0x000008e1 andl %r15d, %eax - 0x41, 0x89, 0xc7, //0x000008e4 movl %eax, %r15d - //0x000008e7 LBB0_80 - 0x8d, 0x5a, 0xff, //0x000008e7 leal $-1(%rdx), %ebx - 0x21, 0xd3, //0x000008ea andl %edx, %ebx - 0xc5, 0xfe, 0x6f, 0x1d, 0xcc, 0xf8, 0xff, 0xff, //0x000008ec vmovdqu $-1844(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0x0f, 0x85, 0x4e, 0x1c, 0x00, 0x00, //0x000008f4 jne LBB0_464 - 0x8d, 0x5e, 0xff, //0x000008fa leal $-1(%rsi), %ebx - 0x21, 0xf3, //0x000008fd andl %esi, %ebx - 0x0f, 0x85, 0x43, 0x1c, 0x00, 0x00, //0x000008ff jne LBB0_464 - 0x41, 0x8d, 0x5f, 0xff, //0x00000905 leal $-1(%r15), %ebx - 0x44, 0x21, 0xfb, //0x00000909 andl %r15d, %ebx - 0x0f, 0x85, 0x36, 0x1c, 0x00, 0x00, //0x0000090c jne LBB0_464 - 0x85, 0xd2, //0x00000912 testl %edx, %edx - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00000914 je LBB0_86 - 0x0f, 0xbc, 0xd2, //0x0000091a bsfl %edx, %edx - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000091d cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0xde, 0x1d, 0x00, 0x00, //0x00000923 jne LBB0_483 - 0x4c, 0x01, 0xea, //0x00000929 addq %r13, %rdx - 0x48, 0x89, 0x54, 0x24, 0x28, //0x0000092c movq %rdx, $40(%rsp) - //0x00000931 LBB0_86 - 0x85, 0xf6, //0x00000931 testl %esi, %esi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000933 je LBB0_89 - 0x0f, 0xbc, 0xd6, //0x00000939 bsfl %esi, %edx - 0x49, 0x83, 0xf9, 0xff, //0x0000093c cmpq $-1, %r9 - 0x0f, 0x85, 0xc1, 0x1d, 0x00, 0x00, //0x00000940 jne LBB0_483 - 0x4c, 0x01, 0xea, //0x00000946 addq %r13, %rdx - 0x49, 0x89, 0xd1, //0x00000949 movq %rdx, %r9 - //0x0000094c LBB0_89 - 0x45, 0x85, 0xff, //0x0000094c testl %r15d, %r15d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x0000094f je LBB0_92 - 0x41, 0x0f, 0xbc, 0xd7, //0x00000955 bsfl %r15d, %edx - 0x49, 0x83, 0xfa, 0xff, //0x00000959 cmpq $-1, %r10 - 0x0f, 0x85, 0xa4, 0x1d, 0x00, 0x00, //0x0000095d jne LBB0_483 - 0x4c, 0x01, 0xea, //0x00000963 addq %r13, %rdx - 0x49, 0x89, 0xd2, //0x00000966 movq %rdx, %r10 - //0x00000969 LBB0_92 - 0x83, 0xf9, 0x20, //0x00000969 cmpl $32, %ecx - 0x0f, 0x85, 0x39, 0x08, 0x00, 0x00, //0x0000096c jne LBB0_210 - 0x49, 0x83, 0xc0, 0xe0, //0x00000972 addq $-32, %r8 - 0x49, 0x83, 0xc5, 0x20, //0x00000976 addq $32, %r13 - 0x49, 0x83, 0xf8, 0x1f, //0x0000097a cmpq $31, %r8 - 0x0f, 0x87, 0xec, 0xfe, 0xff, 0xff, //0x0000097e ja LBB0_78 - 0xc5, 0xf8, 0x77, //0x00000984 vzeroupper - 0xc5, 0x7e, 0x6f, 0x35, 0x51, 0xf8, 0xff, 0xff, //0x00000987 vmovdqu $-1967(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0xa9, 0xf8, 0xff, 0xff, //0x0000098f vmovdqu $-1879(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x2d, 0x81, 0xf8, 0xff, 0xff, //0x00000997 vmovdqu $-1919(%rip), %ymm13 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x15, 0x59, 0xf8, 0xff, 0xff, //0x0000099f vmovdqu $-1959(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0xb1, 0xf7, 0xff, 0xff, //0x000009a7 vmovdqu $-2127(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x1d, 0x89, 0xf7, 0xff, 0xff, //0x000009af vmovdqu $-2167(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000009b7 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x05, 0x5c, 0xf7, 0xff, 0xff, //0x000009bc vmovdqu $-2212(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x34, 0xf7, 0xff, 0xff, //0x000009c4 vmovdqu $-2252(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x0c, 0xf7, 0xff, 0xff, //0x000009cc vmovdqu $-2292(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x2d, 0xe4, 0xf6, 0xff, 0xff, //0x000009d4 vmovdqu $-2332(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0x4c, 0x03, 0x6c, 0x24, 0x38, //0x000009dc addq $56(%rsp), %r13 - 0x49, 0x83, 0xf8, 0x10, //0x000009e1 cmpq $16, %r8 - 0x0f, 0x82, 0x57, 0x01, 0x00, 0x00, //0x000009e5 jb LBB0_113 - //0x000009eb LBB0_95 - 0x4c, 0x89, 0xef, //0x000009eb movq %r13, %rdi - 0x48, 0x2b, 0x7c, 0x24, 0x20, //0x000009ee subq $32(%rsp), %rdi - 0x4c, 0x29, 0xf7, //0x000009f3 subq %r14, %rdi - 0x48, 0x83, 0xc7, 0x01, //0x000009f6 addq $1, %rdi - 0x45, 0x31, 0xff, //0x000009fa xorl %r15d, %r15d - 0x90, 0x90, 0x90, //0x000009fd .p2align 4, 0x90 - //0x00000a00 LBB0_96 - 0xc4, 0x81, 0x7a, 0x6f, 0x44, 0x3d, 0x00, //0x00000a00 vmovdqu (%r13,%r15), %xmm0 - 0xc5, 0xf9, 0x64, 0x0d, 0x31, 0xf6, 0xff, 0xff, //0x00000a07 vpcmpgtb $-2511(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ - 0xc5, 0xfa, 0x6f, 0x15, 0x39, 0xf6, 0xff, 0xff, //0x00000a0f vmovdqu $-2503(%rip), %xmm2 /* LCPI0_21+0(%rip) */ - 0xc5, 0xe9, 0x64, 0xd0, //0x00000a17 vpcmpgtb %xmm0, %xmm2, %xmm2 - 0xc5, 0xf1, 0xdb, 0xca, //0x00000a1b vpand %xmm2, %xmm1, %xmm1 - 0xc5, 0xf9, 0x74, 0x15, 0x39, 0xf6, 0xff, 0xff, //0x00000a1f vpcmpeqb $-2503(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x1d, 0x41, 0xf6, 0xff, 0xff, //0x00000a27 vpcmpeqb $-2495(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xd2, //0x00000a2f vpor %xmm2, %xmm3, %xmm2 - 0xc5, 0xf9, 0xdb, 0x1d, 0xe5, 0xf5, 0xff, 0xff, //0x00000a33 vpand $-2587(%rip), %xmm0, %xmm3 /* LCPI0_12+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0x3d, 0xf6, 0xff, 0xff, //0x00000a3b vpcmpeqb $-2499(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ - 0xc5, 0xe1, 0x74, 0x1d, 0x45, 0xf6, 0xff, 0xff, //0x00000a43 vpcmpeqb $-2491(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xe0, //0x00000a4b vpor %xmm0, %xmm3, %xmm4 - 0xc5, 0xe9, 0xeb, 0xc9, //0x00000a4f vpor %xmm1, %xmm2, %xmm1 - 0xc5, 0xd9, 0xeb, 0xc9, //0x00000a53 vpor %xmm1, %xmm4, %xmm1 - 0xc5, 0xf9, 0xd7, 0xd0, //0x00000a57 vpmovmskb %xmm0, %edx - 0xc5, 0x79, 0xd7, 0xdb, //0x00000a5b vpmovmskb %xmm3, %r11d - 0xc5, 0xf9, 0xd7, 0xf2, //0x00000a5f vpmovmskb %xmm2, %esi - 0xc5, 0xf9, 0xd7, 0xc1, //0x00000a63 vpmovmskb %xmm1, %eax - 0xf7, 0xd0, //0x00000a67 notl %eax - 0x0f, 0xbc, 0xc8, //0x00000a69 bsfl %eax, %ecx - 0x83, 0xf9, 0x10, //0x00000a6c cmpl $16, %ecx - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00000a6f je LBB0_98 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x00000a75 movl $-1, %eax - 0xd3, 0xe0, //0x00000a7a shll %cl, %eax - 0xf7, 0xd0, //0x00000a7c notl %eax - 0x21, 0xc2, //0x00000a7e andl %eax, %edx - 0x41, 0x21, 0xc3, //0x00000a80 andl %eax, %r11d - 0x21, 0xf0, //0x00000a83 andl %esi, %eax - 0x89, 0xc6, //0x00000a85 movl %eax, %esi - //0x00000a87 LBB0_98 - 0xc5, 0xfe, 0x6f, 0x25, 0x11, 0xf8, 0xff, 0xff, //0x00000a87 vmovdqu $-2031(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x29, 0xf7, 0xff, 0xff, //0x00000a8f vmovdqu $-2263(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0x8d, 0x5a, 0xff, //0x00000a97 leal $-1(%rdx), %ebx - 0x21, 0xd3, //0x00000a9a andl %edx, %ebx - 0x0f, 0x85, 0x62, 0x1d, 0x00, 0x00, //0x00000a9c jne LBB0_486 - 0x41, 0x8d, 0x5b, 0xff, //0x00000aa2 leal $-1(%r11), %ebx - 0x44, 0x21, 0xdb, //0x00000aa6 andl %r11d, %ebx - 0x0f, 0x85, 0x55, 0x1d, 0x00, 0x00, //0x00000aa9 jne LBB0_486 - 0x8d, 0x5e, 0xff, //0x00000aaf leal $-1(%rsi), %ebx - 0x21, 0xf3, //0x00000ab2 andl %esi, %ebx - 0x0f, 0x85, 0x4a, 0x1d, 0x00, 0x00, //0x00000ab4 jne LBB0_486 - 0x85, 0xd2, //0x00000aba testl %edx, %edx - 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00000abc je LBB0_104 - 0x0f, 0xbc, 0xd2, //0x00000ac2 bsfl %edx, %edx - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x00000ac5 cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0x73, 0x1d, 0x00, 0x00, //0x00000acb jne LBB0_489 - 0x48, 0x01, 0xfa, //0x00000ad1 addq %rdi, %rdx - 0x4c, 0x01, 0xfa, //0x00000ad4 addq %r15, %rdx - 0x48, 0x89, 0x54, 0x24, 0x28, //0x00000ad7 movq %rdx, $40(%rsp) - //0x00000adc LBB0_104 - 0x45, 0x85, 0xdb, //0x00000adc testl %r11d, %r11d - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00000adf je LBB0_107 - 0x41, 0x0f, 0xbc, 0xd3, //0x00000ae5 bsfl %r11d, %edx - 0x49, 0x83, 0xf9, 0xff, //0x00000ae9 cmpq $-1, %r9 - 0x0f, 0x85, 0x51, 0x1d, 0x00, 0x00, //0x00000aed jne LBB0_489 - 0x48, 0x01, 0xfa, //0x00000af3 addq %rdi, %rdx - 0x4c, 0x01, 0xfa, //0x00000af6 addq %r15, %rdx - 0x49, 0x89, 0xd1, //0x00000af9 movq %rdx, %r9 - //0x00000afc LBB0_107 - 0x85, 0xf6, //0x00000afc testl %esi, %esi - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000afe je LBB0_110 - 0x0f, 0xbc, 0xd6, //0x00000b04 bsfl %esi, %edx - 0x49, 0x83, 0xfa, 0xff, //0x00000b07 cmpq $-1, %r10 - 0x0f, 0x85, 0x33, 0x1d, 0x00, 0x00, //0x00000b0b jne LBB0_489 - 0x48, 0x01, 0xfa, //0x00000b11 addq %rdi, %rdx - 0x4c, 0x01, 0xfa, //0x00000b14 addq %r15, %rdx - 0x49, 0x89, 0xd2, //0x00000b17 movq %rdx, %r10 - //0x00000b1a LBB0_110 - 0x83, 0xf9, 0x10, //0x00000b1a cmpl $16, %ecx - 0x0f, 0x85, 0xbe, 0x0a, 0x00, 0x00, //0x00000b1d jne LBB0_277 - 0x49, 0x83, 0xc0, 0xf0, //0x00000b23 addq $-16, %r8 - 0x49, 0x83, 0xc7, 0x10, //0x00000b27 addq $16, %r15 - 0x49, 0x83, 0xf8, 0x0f, //0x00000b2b cmpq $15, %r8 - 0x0f, 0x87, 0xcb, 0xfe, 0xff, 0xff, //0x00000b2f ja LBB0_96 - 0x4d, 0x01, 0xfd, //0x00000b35 addq %r15, %r13 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00000b38 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00000b3d movq $16(%rsp), %rdi - //0x00000b42 LBB0_113 - 0x4d, 0x85, 0xc0, //0x00000b42 testq %r8, %r8 - 0xc5, 0xfe, 0x6f, 0x25, 0x53, 0xf7, 0xff, 0xff, //0x00000b45 vmovdqu $-2221(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x0f, 0x84, 0xa8, 0x0a, 0x00, 0x00, //0x00000b4d je LBB0_279 - 0x4f, 0x8d, 0x3c, 0x28, //0x00000b53 leaq (%r8,%r13), %r15 - 0x4c, 0x89, 0xee, //0x00000b57 movq %r13, %rsi - 0x48, 0x2b, 0x74, 0x24, 0x20, //0x00000b5a subq $32(%rsp), %rsi - 0x4c, 0x29, 0xf6, //0x00000b5f subq %r14, %rsi - 0x48, 0x83, 0xc6, 0x01, //0x00000b62 addq $1, %rsi - 0x31, 0xc9, //0x00000b66 xorl %ecx, %ecx - 0xc5, 0xfe, 0x6f, 0x1d, 0x50, 0xf6, 0xff, 0xff, //0x00000b68 vmovdqu $-2480(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xe9, 0x28, 0x00, 0x00, 0x00, //0x00000b70 jmp LBB0_118 - //0x00000b75 LBB0_115 - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x00000b75 cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0x8f, 0x1c, 0x00, 0x00, //0x00000b7b jne LBB0_487 - 0x48, 0x8d, 0x04, 0x0e, //0x00000b81 leaq (%rsi,%rcx), %rax - 0x48, 0x89, 0x44, 0x24, 0x28, //0x00000b85 movq %rax, $40(%rsp) - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000b8a .p2align 4, 0x90 - //0x00000b90 LBB0_117 - 0x48, 0x83, 0xc1, 0x01, //0x00000b90 addq $1, %rcx - 0x49, 0x39, 0xc8, //0x00000b94 cmpq %rcx, %r8 - 0x0f, 0x84, 0x2d, 0x19, 0x00, 0x00, //0x00000b97 je LBB0_457 - //0x00000b9d LBB0_118 - 0x41, 0x0f, 0xbe, 0x54, 0x0d, 0x00, //0x00000b9d movsbl (%r13,%rcx), %edx - 0x8d, 0x42, 0xd0, //0x00000ba3 leal $-48(%rdx), %eax - 0x83, 0xf8, 0x0a, //0x00000ba6 cmpl $10, %eax - 0x0f, 0x82, 0xe1, 0xff, 0xff, 0xff, //0x00000ba9 jb LBB0_117 - 0x8d, 0x5a, 0xd5, //0x00000baf leal $-43(%rdx), %ebx - 0x83, 0xfb, 0x1a, //0x00000bb2 cmpl $26, %ebx - 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00000bb5 ja LBB0_123 - 0x48, 0x8d, 0x15, 0x92, 0x34, 0x00, 0x00, //0x00000bbb leaq $13458(%rip), %rdx /* LJTI0_3+0(%rip) */ - 0x48, 0x63, 0x04, 0x9a, //0x00000bc2 movslq (%rdx,%rbx,4), %rax - 0x48, 0x01, 0xd0, //0x00000bc6 addq %rdx, %rax - 0xff, 0xe0, //0x00000bc9 jmpq *%rax - //0x00000bcb LBB0_121 - 0x49, 0x83, 0xfa, 0xff, //0x00000bcb cmpq $-1, %r10 - 0x0f, 0x85, 0x3b, 0x1c, 0x00, 0x00, //0x00000bcf jne LBB0_487 - 0x4c, 0x8d, 0x14, 0x0e, //0x00000bd5 leaq (%rsi,%rcx), %r10 - 0xe9, 0xb2, 0xff, 0xff, 0xff, //0x00000bd9 jmp LBB0_117 - //0x00000bde LBB0_123 - 0x83, 0xfa, 0x65, //0x00000bde cmpl $101, %edx - 0x0f, 0x85, 0x11, 0x0a, 0x00, 0x00, //0x00000be1 jne LBB0_278 - //0x00000be7 LBB0_124 - 0x49, 0x83, 0xf9, 0xff, //0x00000be7 cmpq $-1, %r9 - 0x0f, 0x85, 0x1f, 0x1c, 0x00, 0x00, //0x00000beb jne LBB0_487 - 0x4c, 0x8d, 0x0c, 0x0e, //0x00000bf1 leaq (%rsi,%rcx), %r9 - 0xe9, 0x96, 0xff, 0xff, 0xff, //0x00000bf5 jmp LBB0_117 - //0x00000bfa LBB0_68 - 0x83, 0xf8, 0x22, //0x00000bfa cmpl $34, %eax - 0x0f, 0x84, 0x40, 0x00, 0x00, 0x00, //0x00000bfd je LBB0_130 - //0x00000c03 LBB0_43 - 0x83, 0xf8, 0x7d, //0x00000c03 cmpl $125, %eax - 0x0f, 0x85, 0x81, 0x2f, 0x00, 0x00, //0x00000c06 jne LBB0_710 - //0x00000c0c LBB0_40 - 0x4d, 0x89, 0x07, //0x00000c0c movq %r8, (%r15) - 0x4c, 0x89, 0x24, 0x24, //0x00000c0f movq %r12, (%rsp) - 0x4d, 0x85, 0xc0, //0x00000c13 testq %r8, %r8 - 0x0f, 0x85, 0xc4, 0xf7, 0xff, 0xff, //0x00000c16 jne LBB0_5 - 0xe9, 0x74, 0x2f, 0x00, 0x00, //0x00000c1c jmp LBB0_711 - //0x00000c21 LBB0_126 - 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00000c21 cmpq $4095, %rsi - 0x0f, 0x8f, 0xf1, 0x2e, 0x00, 0x00, //0x00000c28 jg LBB0_705 - 0x48, 0x8d, 0x4e, 0x01, //0x00000c2e leaq $1(%rsi), %rcx - 0x49, 0x89, 0x0f, //0x00000c32 movq %rcx, (%r15) - 0x49, 0xc7, 0x44, 0xf7, 0x08, 0x00, 0x00, 0x00, 0x00, //0x00000c35 movq $0, $8(%r15,%rsi,8) - 0xe9, 0x5d, 0xf7, 0xff, 0xff, //0x00000c3e jmp LBB0_3 - //0x00000c43 LBB0_130 - 0x49, 0xc7, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x00, //0x00000c43 movq $2, (%r15,%rsi,8) - 0x41, 0xf6, 0xc3, 0x40, //0x00000c4b testb $64, %r11b - 0x0f, 0x85, 0x17, 0x03, 0x00, 0x00, //0x00000c4f jne LBB0_179 - 0x4d, 0x8b, 0x4d, 0x00, //0x00000c55 movq (%r13), %r9 - 0x4c, 0x8b, 0x47, 0x08, //0x00000c59 movq $8(%rdi), %r8 - 0x4c, 0x89, 0xc1, //0x00000c5d movq %r8, %rcx - 0x41, 0xf6, 0xc3, 0x20, //0x00000c60 testb $32, %r11b - 0x0f, 0x85, 0x54, 0x05, 0x00, 0x00, //0x00000c64 jne LBB0_211 - 0x4c, 0x29, 0xc9, //0x00000c6a subq %r9, %rcx - 0x0f, 0x84, 0xa9, 0x30, 0x00, 0x00, //0x00000c6d je LBB0_717 - 0x48, 0x83, 0xf9, 0x40, //0x00000c73 cmpq $64, %rcx - 0x0f, 0x82, 0xc8, 0x1e, 0x00, 0x00, //0x00000c77 jb LBB0_511 - 0x4c, 0x89, 0xce, //0x00000c7d movq %r9, %rsi - 0x48, 0xf7, 0xd6, //0x00000c80 notq %rsi - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00000c83 movq $-1, %r11 - 0x4c, 0x89, 0xcb, //0x00000c8a movq %r9, %rbx - 0x45, 0x31, 0xd2, //0x00000c8d xorl %r10d, %r10d - //0x00000c90 .p2align 4, 0x90 - //0x00000c90 LBB0_135 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x1e, //0x00000c90 vmovdqu (%r14,%rbx), %ymm0 - 0x49, 0x89, 0xdf, //0x00000c96 movq %rbx, %r15 - 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x1e, 0x20, //0x00000c99 vmovdqu $32(%r14,%rbx), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x00000ca0 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x00000ca4 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x00000ca8 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00000cac vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xc7, //0x00000cb0 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x00000cb4 vpmovmskb %ymm0, %edx - 0xc5, 0xf5, 0x74, 0xc7, //0x00000cb8 vpcmpeqb %ymm7, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x00000cbc vpmovmskb %ymm0, %ebx - 0x48, 0xc1, 0xe0, 0x20, //0x00000cc0 shlq $32, %rax - 0x48, 0x09, 0xc7, //0x00000cc4 orq %rax, %rdi - 0x48, 0xc1, 0xe3, 0x20, //0x00000cc7 shlq $32, %rbx - 0x48, 0x09, 0xda, //0x00000ccb orq %rbx, %rdx - 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x00000cce jne LBB0_144 - 0x4d, 0x85, 0xd2, //0x00000cd4 testq %r10, %r10 - 0x0f, 0x85, 0x3b, 0x00, 0x00, 0x00, //0x00000cd7 jne LBB0_146 - 0x45, 0x31, 0xd2, //0x00000cdd xorl %r10d, %r10d - 0x48, 0x85, 0xff, //0x00000ce0 testq %rdi, %rdi - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x00000ce3 jne LBB0_147 - //0x00000ce9 LBB0_138 - 0x48, 0x83, 0xc1, 0xc0, //0x00000ce9 addq $-64, %rcx - 0x48, 0x83, 0xc6, 0xc0, //0x00000ced addq $-64, %rsi - 0x4c, 0x89, 0xfb, //0x00000cf1 movq %r15, %rbx - 0x48, 0x83, 0xc3, 0x40, //0x00000cf4 addq $64, %rbx - 0x48, 0x83, 0xf9, 0x3f, //0x00000cf8 cmpq $63, %rcx - 0x0f, 0x87, 0x8e, 0xff, 0xff, 0xff, //0x00000cfc ja LBB0_135 - 0xe9, 0x6f, 0x1b, 0x00, 0x00, //0x00000d02 jmp LBB0_139 - //0x00000d07 LBB0_144 - 0x49, 0x83, 0xfb, 0xff, //0x00000d07 cmpq $-1, %r11 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00000d0b jne LBB0_146 - 0x4c, 0x0f, 0xbc, 0xda, //0x00000d11 bsfq %rdx, %r11 - 0x4d, 0x01, 0xfb, //0x00000d15 addq %r15, %r11 - //0x00000d18 LBB0_146 - 0x4c, 0x89, 0xd0, //0x00000d18 movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x00000d1b notq %rax - 0x48, 0x21, 0xd0, //0x00000d1e andq %rdx, %rax - 0x48, 0x8d, 0x1c, 0x00, //0x00000d21 leaq (%rax,%rax), %rbx - 0x4c, 0x09, 0xd3, //0x00000d25 orq %r10, %rbx - 0x48, 0x89, 0x1c, 0x24, //0x00000d28 movq %rbx, (%rsp) - 0x48, 0xf7, 0xd3, //0x00000d2c notq %rbx - 0x48, 0x21, 0xd3, //0x00000d2f andq %rdx, %rbx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000d32 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd3, //0x00000d3c andq %rdx, %rbx - 0x45, 0x31, 0xd2, //0x00000d3f xorl %r10d, %r10d - 0x48, 0x01, 0xc3, //0x00000d42 addq %rax, %rbx - 0x41, 0x0f, 0x92, 0xc2, //0x00000d45 setb %r10b - 0x48, 0x01, 0xdb, //0x00000d49 addq %rbx, %rbx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000d4c movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc3, //0x00000d56 xorq %rax, %rbx - 0x48, 0x23, 0x1c, 0x24, //0x00000d59 andq (%rsp), %rbx - 0x48, 0xf7, 0xd3, //0x00000d5d notq %rbx - 0x48, 0x21, 0xdf, //0x00000d60 andq %rbx, %rdi - 0x48, 0x85, 0xff, //0x00000d63 testq %rdi, %rdi - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000d66 je LBB0_138 - //0x00000d6c LBB0_147 - 0x4c, 0x0f, 0xbc, 0xd7, //0x00000d6c bsfq %rdi, %r10 - 0x49, 0x29, 0xf2, //0x00000d70 subq %rsi, %r10 - 0x4d, 0x89, 0xdf, //0x00000d73 movq %r11, %r15 - 0xe9, 0x11, 0x0a, 0x00, 0x00, //0x00000d76 jmp LBB0_298 - //0x00000d7b LBB0_148 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00000d7b movq $-1, (%rsp) - 0x4c, 0x8b, 0x57, 0x08, //0x00000d83 movq $8(%rdi), %r10 - 0x4d, 0x8b, 0x45, 0x00, //0x00000d87 movq (%r13), %r8 - 0x4f, 0x8d, 0x0c, 0x06, //0x00000d8b leaq (%r14,%r8), %r9 - 0x4d, 0x29, 0xc2, //0x00000d8f subq %r8, %r10 - 0x49, 0x83, 0xfa, 0x20, //0x00000d92 cmpq $32, %r10 - 0x0f, 0x8c, 0x9e, 0x17, 0x00, 0x00, //0x00000d96 jl LBB0_158 - 0xb9, 0x20, 0x00, 0x00, 0x00, //0x00000d9c movl $32, %ecx - 0x31, 0xf6, //0x00000da1 xorl %esi, %esi - 0x45, 0x31, 0xff, //0x00000da3 xorl %r15d, %r15d - 0xe9, 0x59, 0x00, 0x00, 0x00, //0x00000da6 jmp LBB0_150 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000dab .p2align 4, 0x90 - //0x00000db0 LBB0_154 - 0x44, 0x89, 0xfa, //0x00000db0 movl %r15d, %edx - 0xf7, 0xd2, //0x00000db3 notl %edx - 0x21, 0xda, //0x00000db5 andl %ebx, %edx - 0x8d, 0x04, 0x12, //0x00000db7 leal (%rdx,%rdx), %eax - 0x44, 0x09, 0xf8, //0x00000dba orl %r15d, %eax - 0x89, 0xc7, //0x00000dbd movl %eax, %edi - 0xf7, 0xd7, //0x00000dbf notl %edi - 0x21, 0xdf, //0x00000dc1 andl %ebx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000dc3 andl $-1431655766, %edi - 0x45, 0x31, 0xff, //0x00000dc9 xorl %r15d, %r15d - 0x01, 0xd7, //0x00000dcc addl %edx, %edi - 0x41, 0x0f, 0x92, 0xc7, //0x00000dce setb %r15b - 0x01, 0xff, //0x00000dd2 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00000dd4 xorl $1431655765, %edi - 0x21, 0xc7, //0x00000dda andl %eax, %edi - 0xf7, 0xd7, //0x00000ddc notl %edi - 0x41, 0x21, 0xfb, //0x00000dde andl %edi, %r11d - 0x4d, 0x85, 0xdb, //0x00000de1 testq %r11, %r11 - 0x0f, 0x85, 0x7f, 0xf5, 0xff, 0xff, //0x00000de4 jne LBB0_153 - //0x00000dea LBB0_155 - 0x48, 0x83, 0xc6, 0x20, //0x00000dea addq $32, %rsi - 0x49, 0x8d, 0x04, 0x0a, //0x00000dee leaq (%r10,%rcx), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x00000df2 addq $-32, %rax - 0x48, 0x83, 0xc1, 0xe0, //0x00000df6 addq $-32, %rcx - 0x48, 0x83, 0xf8, 0x3f, //0x00000dfa cmpq $63, %rax - 0x0f, 0x8e, 0x18, 0x17, 0x00, 0x00, //0x00000dfe jle LBB0_156 - //0x00000e04 LBB0_150 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00000e04 vmovdqu (%r9,%rsi), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00000e0a vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd9, //0x00000e0e vpmovmskb %ymm1, %r11d - 0xc5, 0xfd, 0x74, 0xc7, //0x00000e12 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x00000e16 vpmovmskb %ymm0, %ebx - 0x85, 0xdb, //0x00000e1a testl %ebx, %ebx - 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x00000e1c jne LBB0_154 - 0x4d, 0x85, 0xff, //0x00000e22 testq %r15, %r15 - 0x0f, 0x85, 0x85, 0xff, 0xff, 0xff, //0x00000e25 jne LBB0_154 - 0x45, 0x31, 0xff, //0x00000e2b xorl %r15d, %r15d - 0x4d, 0x85, 0xdb, //0x00000e2e testq %r11, %r11 - 0x0f, 0x84, 0xb3, 0xff, 0xff, 0xff, //0x00000e31 je LBB0_155 - 0xe9, 0x2d, 0xf5, 0xff, 0xff, //0x00000e37 jmp LBB0_153 - //0x00000e3c LBB0_159 - 0x4c, 0x89, 0xc6, //0x00000e3c movq %r8, %rsi - 0x48, 0x29, 0xde, //0x00000e3f subq %rbx, %rsi - 0x48, 0x83, 0xfe, 0x20, //0x00000e42 cmpq $32, %rsi - 0x0f, 0x82, 0x13, 0x1c, 0x00, 0x00, //0x00000e46 jb LBB0_501 - 0x48, 0x89, 0xda, //0x00000e4c movq %rbx, %rdx - 0x48, 0xf7, 0xda, //0x00000e4f negq %rdx - 0x48, 0x89, 0xd9, //0x00000e52 movq %rbx, %rcx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000e55 .p2align 4, 0x90 - //0x00000e60 LBB0_161 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x0e, //0x00000e60 vmovdqu (%r14,%rcx), %ymm0 - 0xc5, 0xfd, 0x74, 0xcb, //0x00000e66 vpcmpeqb %ymm3, %ymm0, %ymm1 - 0xc5, 0x8d, 0xdb, 0xc0, //0x00000e6a vpand %ymm0, %ymm14, %ymm0 - 0xc5, 0xfd, 0x74, 0x05, 0x2a, 0xf3, 0xff, 0xff, //0x00000e6e vpcmpeqb $-3286(%rip), %ymm0, %ymm0 /* LCPI0_8+0(%rip) */ - 0xc5, 0xfd, 0xeb, 0xc1, //0x00000e76 vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x00000e7a vpmovmskb %ymm0, %esi - 0x85, 0xf6, //0x00000e7e testl %esi, %esi - 0x0f, 0x85, 0xce, 0x00, 0x00, 0x00, //0x00000e80 jne LBB0_175 - 0x48, 0x83, 0xc1, 0x20, //0x00000e86 addq $32, %rcx - 0x49, 0x8d, 0x04, 0x10, //0x00000e8a leaq (%r8,%rdx), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x00000e8e addq $-32, %rax - 0x48, 0x83, 0xc2, 0xe0, //0x00000e92 addq $-32, %rdx - 0x48, 0x83, 0xf8, 0x1f, //0x00000e96 cmpq $31, %rax - 0x0f, 0x87, 0xc0, 0xff, 0xff, 0xff, //0x00000e9a ja LBB0_161 - 0x4c, 0x89, 0xf1, //0x00000ea0 movq %r14, %rcx - 0x48, 0x29, 0xd1, //0x00000ea3 subq %rdx, %rcx - 0x49, 0x01, 0xd0, //0x00000ea6 addq %rdx, %r8 - 0x4c, 0x89, 0xc6, //0x00000ea9 movq %r8, %rsi - 0x48, 0x83, 0xfe, 0x10, //0x00000eac cmpq $16, %rsi - 0x0f, 0x82, 0x48, 0x00, 0x00, 0x00, //0x00000eb0 jb LBB0_167 - //0x00000eb6 LBB0_164 - 0x4c, 0x89, 0xf2, //0x00000eb6 movq %r14, %rdx - 0x48, 0x29, 0xca, //0x00000eb9 subq %rcx, %rdx - //0x00000ebc LBB0_165 - 0xc5, 0xfa, 0x6f, 0x01, //0x00000ebc vmovdqu (%rcx), %xmm0 - 0xc5, 0xf9, 0x74, 0x0d, 0x48, 0xf1, 0xff, 0xff, //0x00000ec0 vpcmpeqb $-3768(%rip), %xmm0, %xmm1 /* LCPI0_11+0(%rip) */ - 0xc5, 0xf9, 0xdb, 0x05, 0x50, 0xf1, 0xff, 0xff, //0x00000ec8 vpand $-3760(%rip), %xmm0, %xmm0 /* LCPI0_12+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0x58, 0xf1, 0xff, 0xff, //0x00000ed0 vpcmpeqb $-3752(%rip), %xmm0, %xmm0 /* LCPI0_13+0(%rip) */ - 0xc5, 0xf9, 0xeb, 0xc1, //0x00000ed8 vpor %xmm1, %xmm0, %xmm0 - 0xc5, 0xf9, 0xd7, 0xc0, //0x00000edc vpmovmskb %xmm0, %eax - 0x85, 0xc0, //0x00000ee0 testl %eax, %eax - 0x0f, 0x85, 0x6c, 0x16, 0x00, 0x00, //0x00000ee2 jne LBB0_465 - 0x48, 0x83, 0xc1, 0x10, //0x00000ee8 addq $16, %rcx - 0x48, 0x83, 0xc6, 0xf0, //0x00000eec addq $-16, %rsi - 0x48, 0x83, 0xc2, 0xf0, //0x00000ef0 addq $-16, %rdx - 0x48, 0x83, 0xfe, 0x0f, //0x00000ef4 cmpq $15, %rsi - 0x0f, 0x87, 0xbe, 0xff, 0xff, 0xff, //0x00000ef8 ja LBB0_165 - //0x00000efe LBB0_167 - 0x48, 0x89, 0xd8, //0x00000efe movq %rbx, %rax - 0xc5, 0x7d, 0x7f, 0xe1, //0x00000f01 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00000f05 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00000f09 vmovdqa %ymm13, %ymm11 - 0x48, 0x85, 0xf6, //0x00000f0e testq %rsi, %rsi - 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00000f11 je LBB0_174 - 0x48, 0x8d, 0x3c, 0x31, //0x00000f17 leaq (%rcx,%rsi), %rdi - 0x31, 0xd2, //0x00000f1b xorl %edx, %edx - //0x00000f1d LBB0_169 - 0x0f, 0xb6, 0x1c, 0x11, //0x00000f1d movzbl (%rcx,%rdx), %ebx - 0x80, 0xfb, 0x2c, //0x00000f21 cmpb $44, %bl - 0x0f, 0x84, 0xb0, 0x1b, 0x00, 0x00, //0x00000f24 je LBB0_507 - 0x80, 0xfb, 0x7d, //0x00000f2a cmpb $125, %bl - 0x0f, 0x84, 0xa7, 0x1b, 0x00, 0x00, //0x00000f2d je LBB0_507 - 0x80, 0xfb, 0x5d, //0x00000f33 cmpb $93, %bl - 0x0f, 0x84, 0x9e, 0x1b, 0x00, 0x00, //0x00000f36 je LBB0_507 - 0x48, 0x83, 0xc2, 0x01, //0x00000f3c addq $1, %rdx - 0x48, 0x39, 0xd6, //0x00000f40 cmpq %rdx, %rsi - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x00000f43 jne LBB0_169 - 0x48, 0x89, 0xf9, //0x00000f49 movq %rdi, %rcx - //0x00000f4c LBB0_174 - 0x4c, 0x29, 0xf1, //0x00000f4c subq %r14, %rcx - 0xe9, 0x8c, 0x1b, 0x00, 0x00, //0x00000f4f jmp LBB0_508 - //0x00000f54 LBB0_175 - 0x0f, 0xbc, 0xce, //0x00000f54 bsfl %esi, %ecx - //0x00000f57 LBB0_176 - 0x48, 0x29, 0xd1, //0x00000f57 subq %rdx, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x00000f5a movq %rcx, (%r13) - 0x48, 0x85, 0xdb, //0x00000f5e testq %rbx, %rbx - 0x0f, 0x8f, 0x39, 0xf4, 0xff, 0xff, //0x00000f61 jg LBB0_3 - 0xe9, 0xff, 0x2b, 0x00, 0x00, //0x00000f67 jmp LBB0_178 - //0x00000f6c LBB0_179 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00000f6c movq $-1, (%rsp) - 0x4c, 0x8b, 0x57, 0x08, //0x00000f74 movq $8(%rdi), %r10 - 0x4d, 0x8b, 0x45, 0x00, //0x00000f78 movq (%r13), %r8 - 0x4f, 0x8d, 0x0c, 0x06, //0x00000f7c leaq (%r14,%r8), %r9 - 0x4d, 0x29, 0xc2, //0x00000f80 subq %r8, %r10 - 0x49, 0x83, 0xfa, 0x20, //0x00000f83 cmpq $32, %r10 - 0x0f, 0x8c, 0xae, 0x17, 0x00, 0x00, //0x00000f87 jl LBB0_189 - 0xb9, 0x20, 0x00, 0x00, 0x00, //0x00000f8d movl $32, %ecx - 0x31, 0xf6, //0x00000f92 xorl %esi, %esi - 0x45, 0x31, 0xff, //0x00000f94 xorl %r15d, %r15d - 0xe9, 0x58, 0x00, 0x00, 0x00, //0x00000f97 jmp LBB0_181 - 0x90, 0x90, 0x90, 0x90, //0x00000f9c .p2align 4, 0x90 - //0x00000fa0 LBB0_185 - 0x44, 0x89, 0xf8, //0x00000fa0 movl %r15d, %eax - 0xf7, 0xd0, //0x00000fa3 notl %eax - 0x21, 0xd8, //0x00000fa5 andl %ebx, %eax - 0x8d, 0x14, 0x00, //0x00000fa7 leal (%rax,%rax), %edx - 0x44, 0x09, 0xfa, //0x00000faa orl %r15d, %edx - 0x89, 0xd7, //0x00000fad movl %edx, %edi - 0xf7, 0xd7, //0x00000faf notl %edi - 0x21, 0xdf, //0x00000fb1 andl %ebx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000fb3 andl $-1431655766, %edi - 0x45, 0x31, 0xff, //0x00000fb9 xorl %r15d, %r15d - 0x01, 0xc7, //0x00000fbc addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc7, //0x00000fbe setb %r15b - 0x01, 0xff, //0x00000fc2 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00000fc4 xorl $1431655765, %edi - 0x21, 0xd7, //0x00000fca andl %edx, %edi - 0xf7, 0xd7, //0x00000fcc notl %edi - 0x41, 0x21, 0xfb, //0x00000fce andl %edi, %r11d - 0x4d, 0x85, 0xdb, //0x00000fd1 testq %r11, %r11 - 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x00000fd4 jne LBB0_184 - //0x00000fda LBB0_186 - 0x48, 0x83, 0xc6, 0x20, //0x00000fda addq $32, %rsi - 0x49, 0x8d, 0x04, 0x0a, //0x00000fde leaq (%r10,%rcx), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x00000fe2 addq $-32, %rax - 0x48, 0x83, 0xc1, 0xe0, //0x00000fe6 addq $-32, %rcx - 0x48, 0x83, 0xf8, 0x3f, //0x00000fea cmpq $63, %rax - 0x0f, 0x8e, 0x29, 0x17, 0x00, 0x00, //0x00000fee jle LBB0_187 - //0x00000ff4 LBB0_181 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00000ff4 vmovdqu (%r9,%rsi), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00000ffa vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd9, //0x00000ffe vpmovmskb %ymm1, %r11d - 0xc5, 0xfd, 0x74, 0xc7, //0x00001002 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x00001006 vpmovmskb %ymm0, %ebx - 0x85, 0xdb, //0x0000100a testl %ebx, %ebx - 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x0000100c jne LBB0_185 - 0x4d, 0x85, 0xff, //0x00001012 testq %r15, %r15 - 0x0f, 0x85, 0x85, 0xff, 0xff, 0xff, //0x00001015 jne LBB0_185 - 0x45, 0x31, 0xff, //0x0000101b xorl %r15d, %r15d - 0x4d, 0x85, 0xdb, //0x0000101e testq %r11, %r11 - 0x0f, 0x84, 0xb3, 0xff, 0xff, 0xff, //0x00001021 je LBB0_186 - //0x00001027 LBB0_184 - 0x41, 0x0f, 0xbc, 0xc3, //0x00001027 bsfl %r11d, %eax - 0x4c, 0x01, 0xc0, //0x0000102b addq %r8, %rax - 0x4c, 0x8d, 0x0c, 0x06, //0x0000102e leaq (%rsi,%rax), %r9 - 0x49, 0x83, 0xc1, 0x01, //0x00001032 addq $1, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00001036 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x0000103b movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001040 movq $8(%rsp), %r15 - 0x4d, 0x89, 0x4d, 0x00, //0x00001045 movq %r9, (%r13) - 0x4d, 0x85, 0xc0, //0x00001049 testq %r8, %r8 - 0x0f, 0x8f, 0x5f, 0x07, 0x00, 0x00, //0x0000104c jg LBB0_300 - 0xe9, 0xd5, 0x2a, 0x00, 0x00, //0x00001052 jmp LBB0_679 - //0x00001057 LBB0_190 - 0x4c, 0x29, 0xcb, //0x00001057 subq %r9, %rbx - 0x0f, 0x84, 0xbc, 0x2c, 0x00, 0x00, //0x0000105a je LBB0_717 - 0x48, 0x83, 0xfb, 0x40, //0x00001060 cmpq $64, %rbx - 0x0f, 0x82, 0x53, 0x1a, 0x00, 0x00, //0x00001064 jb LBB0_506 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000106a movq $-1, %r15 - 0x4d, 0x89, 0xca, //0x00001071 movq %r9, %r10 - 0x45, 0x31, 0xdb, //0x00001074 xorl %r11d, %r11d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001077 .p2align 4, 0x90 - //0x00001080 LBB0_193 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x16, //0x00001080 vmovdqu (%r14,%r10), %ymm0 - 0xc4, 0x81, 0x7e, 0x6f, 0x4c, 0x16, 0x20, //0x00001086 vmovdqu $32(%r14,%r10), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x0000108d vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x00001091 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x00001095 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001099 vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xd7, //0x0000109d vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x000010a1 vpmovmskb %ymm2, %edx - 0xc5, 0xf5, 0x74, 0xd7, //0x000010a5 vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xca, //0x000010a9 vpmovmskb %ymm2, %ecx - 0xc5, 0xbd, 0x64, 0xd1, //0x000010ad vpcmpgtb %ymm1, %ymm8, %ymm2 - 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x000010b1 vpcmpgtb %ymm9, %ymm1, %ymm1 - 0xc5, 0xed, 0xdb, 0xc9, //0x000010b6 vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x000010ba vpmovmskb %ymm1, %esi - 0x48, 0xc1, 0xe0, 0x20, //0x000010be shlq $32, %rax - 0x48, 0x09, 0xc7, //0x000010c2 orq %rax, %rdi - 0x48, 0xc1, 0xe1, 0x20, //0x000010c5 shlq $32, %rcx - 0x48, 0xc1, 0xe6, 0x20, //0x000010c9 shlq $32, %rsi - 0x48, 0x09, 0xca, //0x000010cd orq %rcx, %rdx - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x000010d0 jne LBB0_204 - 0x4d, 0x85, 0xdb, //0x000010d6 testq %r11, %r11 - 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x000010d9 jne LBB0_206 - 0x45, 0x31, 0xdb, //0x000010df xorl %r11d, %r11d - //0x000010e2 LBB0_196 - 0xc5, 0xbd, 0x64, 0xc8, //0x000010e2 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x000010e6 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x000010eb vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x000010ef vpmovmskb %ymm0, %eax - 0x48, 0x09, 0xc6, //0x000010f3 orq %rax, %rsi - 0x48, 0x85, 0xff, //0x000010f6 testq %rdi, %rdi - 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, //0x000010f9 jne LBB0_207 - 0x48, 0x85, 0xf6, //0x000010ff testq %rsi, %rsi - 0x0f, 0x85, 0xac, 0x2a, 0x00, 0x00, //0x00001102 jne LBB0_699 - 0x48, 0x83, 0xc3, 0xc0, //0x00001108 addq $-64, %rbx - 0x49, 0x83, 0xc2, 0x40, //0x0000110c addq $64, %r10 - 0x48, 0x83, 0xfb, 0x3f, //0x00001110 cmpq $63, %rbx - 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x00001114 ja LBB0_193 - 0xe9, 0x81, 0x16, 0x00, 0x00, //0x0000111a jmp LBB0_199 - //0x0000111f LBB0_204 - 0x49, 0x83, 0xff, 0xff, //0x0000111f cmpq $-1, %r15 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00001123 jne LBB0_206 - 0x4c, 0x0f, 0xbc, 0xfa, //0x00001129 bsfq %rdx, %r15 - 0x4d, 0x01, 0xd7, //0x0000112d addq %r10, %r15 - //0x00001130 LBB0_206 - 0x4c, 0x89, 0x3c, 0x24, //0x00001130 movq %r15, (%rsp) - 0x4c, 0x89, 0xd8, //0x00001134 movq %r11, %rax - 0x48, 0xf7, 0xd0, //0x00001137 notq %rax - 0x48, 0x21, 0xd0, //0x0000113a andq %rdx, %rax - 0x4d, 0x89, 0xd7, //0x0000113d movq %r10, %r15 - 0x4c, 0x8d, 0x14, 0x00, //0x00001140 leaq (%rax,%rax), %r10 - 0x4d, 0x09, 0xda, //0x00001144 orq %r11, %r10 - 0x4c, 0x89, 0xd1, //0x00001147 movq %r10, %rcx - 0x48, 0xf7, 0xd1, //0x0000114a notq %rcx - 0x48, 0x21, 0xd1, //0x0000114d andq %rdx, %rcx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001150 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd1, //0x0000115a andq %rdx, %rcx - 0x45, 0x31, 0xdb, //0x0000115d xorl %r11d, %r11d - 0x48, 0x01, 0xc1, //0x00001160 addq %rax, %rcx - 0x41, 0x0f, 0x92, 0xc3, //0x00001163 setb %r11b - 0x48, 0x01, 0xc9, //0x00001167 addq %rcx, %rcx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000116a movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc1, //0x00001174 xorq %rax, %rcx - 0x4c, 0x21, 0xd1, //0x00001177 andq %r10, %rcx - 0x4d, 0x89, 0xfa, //0x0000117a movq %r15, %r10 - 0x4c, 0x8b, 0x3c, 0x24, //0x0000117d movq (%rsp), %r15 - 0x48, 0xf7, 0xd1, //0x00001181 notq %rcx - 0x48, 0x21, 0xcf, //0x00001184 andq %rcx, %rdi - 0xe9, 0x56, 0xff, 0xff, 0xff, //0x00001187 jmp LBB0_196 - //0x0000118c LBB0_207 - 0x48, 0x0f, 0xbc, 0xcf, //0x0000118c bsfq %rdi, %rcx - 0x48, 0x85, 0xf6, //0x00001190 testq %rsi, %rsi - 0x0f, 0x84, 0x72, 0x01, 0x00, 0x00, //0x00001193 je LBB0_230 - 0x48, 0x0f, 0xbc, 0xd6, //0x00001199 bsfq %rsi, %rdx - 0x48, 0x39, 0xca, //0x0000119d cmpq %rcx, %rdx - 0x0f, 0x83, 0x73, 0x01, 0x00, 0x00, //0x000011a0 jae LBB0_231 - 0xe9, 0x8b, 0x2b, 0x00, 0x00, //0x000011a6 jmp LBB0_209 - //0x000011ab LBB0_210 - 0x4c, 0x01, 0xe9, //0x000011ab addq %r13, %rcx - 0x48, 0x03, 0x4c, 0x24, 0x38, //0x000011ae addq $56(%rsp), %rcx - 0xc5, 0xf8, 0x77, //0x000011b3 vzeroupper - 0x49, 0x89, 0xcd, //0x000011b6 movq %rcx, %r13 - 0xe9, 0x3d, 0x04, 0x00, 0x00, //0x000011b9 jmp LBB0_279 - //0x000011be LBB0_211 - 0x4c, 0x29, 0xc9, //0x000011be subq %r9, %rcx - 0x0f, 0x84, 0x55, 0x2b, 0x00, 0x00, //0x000011c1 je LBB0_717 - 0x48, 0x83, 0xf9, 0x40, //0x000011c7 cmpq $64, %rcx - 0x0f, 0x82, 0x94, 0x19, 0x00, 0x00, //0x000011cb jb LBB0_513 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000011d1 movq $-1, %r15 - 0x4d, 0x89, 0xca, //0x000011d8 movq %r9, %r10 - 0x45, 0x31, 0xdb, //0x000011db xorl %r11d, %r11d - 0x90, 0x90, //0x000011de .p2align 4, 0x90 - //0x000011e0 LBB0_214 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x16, //0x000011e0 vmovdqu (%r14,%r10), %ymm0 - 0xc4, 0x81, 0x7e, 0x6f, 0x4c, 0x16, 0x20, //0x000011e6 vmovdqu $32(%r14,%r10), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x000011ed vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x000011f1 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x000011f5 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x000011f9 vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xd7, //0x000011fd vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00001201 vpmovmskb %ymm2, %edx - 0xc5, 0xf5, 0x74, 0xd7, //0x00001205 vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xda, //0x00001209 vpmovmskb %ymm2, %ebx - 0xc5, 0xbd, 0x64, 0xd1, //0x0000120d vpcmpgtb %ymm1, %ymm8, %ymm2 - 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00001211 vpcmpgtb %ymm9, %ymm1, %ymm1 - 0xc5, 0xed, 0xdb, 0xc9, //0x00001216 vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x0000121a vpmovmskb %ymm1, %esi - 0x48, 0xc1, 0xe0, 0x20, //0x0000121e shlq $32, %rax - 0x48, 0x09, 0xc7, //0x00001222 orq %rax, %rdi - 0x48, 0xc1, 0xe3, 0x20, //0x00001225 shlq $32, %rbx - 0x48, 0xc1, 0xe6, 0x20, //0x00001229 shlq $32, %rsi - 0x48, 0x09, 0xda, //0x0000122d orq %rbx, %rdx - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00001230 jne LBB0_225 - 0x4d, 0x85, 0xdb, //0x00001236 testq %r11, %r11 - 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00001239 jne LBB0_227 - 0x45, 0x31, 0xdb, //0x0000123f xorl %r11d, %r11d - //0x00001242 LBB0_217 - 0xc5, 0xbd, 0x64, 0xc8, //0x00001242 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00001246 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x0000124b vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x0000124f vpmovmskb %ymm0, %eax - 0x48, 0x09, 0xc6, //0x00001253 orq %rax, %rsi - 0x48, 0x85, 0xff, //0x00001256 testq %rdi, %rdi - 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, //0x00001259 jne LBB0_228 - 0x48, 0x85, 0xf6, //0x0000125f testq %rsi, %rsi - 0x0f, 0x85, 0x4c, 0x29, 0x00, 0x00, //0x00001262 jne LBB0_699 - 0x48, 0x83, 0xc1, 0xc0, //0x00001268 addq $-64, %rcx - 0x49, 0x83, 0xc2, 0x40, //0x0000126c addq $64, %r10 - 0x48, 0x83, 0xf9, 0x3f, //0x00001270 cmpq $63, %rcx - 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x00001274 ja LBB0_214 - 0xe9, 0x4e, 0x16, 0x00, 0x00, //0x0000127a jmp LBB0_220 - //0x0000127f LBB0_225 - 0x49, 0x83, 0xff, 0xff, //0x0000127f cmpq $-1, %r15 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00001283 jne LBB0_227 - 0x4c, 0x0f, 0xbc, 0xfa, //0x00001289 bsfq %rdx, %r15 - 0x4d, 0x01, 0xd7, //0x0000128d addq %r10, %r15 - //0x00001290 LBB0_227 - 0x4c, 0x89, 0x3c, 0x24, //0x00001290 movq %r15, (%rsp) - 0x4c, 0x89, 0xd8, //0x00001294 movq %r11, %rax - 0x48, 0xf7, 0xd0, //0x00001297 notq %rax - 0x48, 0x21, 0xd0, //0x0000129a andq %rdx, %rax - 0x4d, 0x89, 0xd7, //0x0000129d movq %r10, %r15 - 0x4c, 0x8d, 0x14, 0x00, //0x000012a0 leaq (%rax,%rax), %r10 - 0x4d, 0x09, 0xda, //0x000012a4 orq %r11, %r10 - 0x4c, 0x89, 0xd3, //0x000012a7 movq %r10, %rbx - 0x48, 0xf7, 0xd3, //0x000012aa notq %rbx - 0x48, 0x21, 0xd3, //0x000012ad andq %rdx, %rbx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000012b0 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd3, //0x000012ba andq %rdx, %rbx - 0x45, 0x31, 0xdb, //0x000012bd xorl %r11d, %r11d - 0x48, 0x01, 0xc3, //0x000012c0 addq %rax, %rbx - 0x41, 0x0f, 0x92, 0xc3, //0x000012c3 setb %r11b - 0x48, 0x01, 0xdb, //0x000012c7 addq %rbx, %rbx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000012ca movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc3, //0x000012d4 xorq %rax, %rbx - 0x4c, 0x21, 0xd3, //0x000012d7 andq %r10, %rbx - 0x4d, 0x89, 0xfa, //0x000012da movq %r15, %r10 - 0x4c, 0x8b, 0x3c, 0x24, //0x000012dd movq (%rsp), %r15 - 0x48, 0xf7, 0xd3, //0x000012e1 notq %rbx - 0x48, 0x21, 0xdf, //0x000012e4 andq %rbx, %rdi - 0xe9, 0x56, 0xff, 0xff, 0xff, //0x000012e7 jmp LBB0_217 - //0x000012ec LBB0_228 - 0x48, 0x0f, 0xbc, 0xcf, //0x000012ec bsfq %rdi, %rcx - 0x48, 0x85, 0xf6, //0x000012f0 testq %rsi, %rsi - 0x0f, 0x84, 0x7e, 0x04, 0x00, 0x00, //0x000012f3 je LBB0_296 - 0x48, 0x0f, 0xbc, 0xd6, //0x000012f9 bsfq %rsi, %rdx - 0x48, 0x39, 0xca, //0x000012fd cmpq %rcx, %rdx - 0x0f, 0x83, 0x7f, 0x04, 0x00, 0x00, //0x00001300 jae LBB0_297 - 0xe9, 0x2b, 0x2a, 0x00, 0x00, //0x00001306 jmp LBB0_209 - //0x0000130b LBB0_230 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000130b movl $64, %edx - 0x48, 0x39, 0xca, //0x00001310 cmpq %rcx, %rdx - 0x0f, 0x82, 0x1d, 0x2a, 0x00, 0x00, //0x00001313 jb LBB0_209 - //0x00001319 LBB0_231 - 0x49, 0x01, 0xca, //0x00001319 addq %rcx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x0000131c addq $1, %r10 - //0x00001320 LBB0_232 - 0x4d, 0x85, 0xd2, //0x00001320 testq %r10, %r10 - 0x0f, 0x88, 0x1d, 0x28, 0x00, 0x00, //0x00001323 js LBB0_680 - 0x4d, 0x89, 0x55, 0x00, //0x00001329 movq %r10, (%r13) - 0x4d, 0x85, 0xc9, //0x0000132d testq %r9, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00001330 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00001335 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000133a movq $8(%rsp), %r15 - 0x0f, 0x8f, 0x5b, 0xf0, 0xff, 0xff, //0x0000133f jg LBB0_3 - 0xe9, 0xef, 0x27, 0x00, 0x00, //0x00001345 jmp LBB0_463 - //0x0000134a LBB0_234 - 0x41, 0xf6, 0xc3, 0x40, //0x0000134a testb $64, %r11b - 0x0f, 0x85, 0x82, 0x04, 0x00, 0x00, //0x0000134e jne LBB0_302 - 0x4d, 0x8b, 0x4d, 0x00, //0x00001354 movq (%r13), %r9 - 0x4c, 0x8b, 0x7f, 0x08, //0x00001358 movq $8(%rdi), %r15 - 0x4d, 0x89, 0xf8, //0x0000135c movq %r15, %r8 - 0x41, 0xf6, 0xc3, 0x20, //0x0000135f testb $32, %r11b - 0x0f, 0x85, 0x97, 0x0c, 0x00, 0x00, //0x00001363 jne LBB0_385 - 0x4d, 0x29, 0xc8, //0x00001369 subq %r9, %r8 - 0x0f, 0x84, 0xf1, 0x29, 0x00, 0x00, //0x0000136c je LBB0_718 - 0x49, 0x83, 0xf8, 0x40, //0x00001372 cmpq $64, %r8 - 0x0f, 0x82, 0x48, 0x18, 0x00, 0x00, //0x00001376 jb LBB0_516 - 0x4c, 0x89, 0xce, //0x0000137c movq %r9, %rsi - 0x48, 0xf7, 0xd6, //0x0000137f notq %rsi - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00001382 movq $-1, %r11 - 0x4c, 0x89, 0xcf, //0x00001389 movq %r9, %rdi - 0x45, 0x31, 0xd2, //0x0000138c xorl %r10d, %r10d - 0x90, //0x0000138f .p2align 4, 0x90 - //0x00001390 LBB0_239 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x3e, //0x00001390 vmovdqu (%r14,%rdi), %ymm0 - 0x48, 0x89, 0xf9, //0x00001396 movq %rdi, %rcx - 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x3e, 0x20, //0x00001399 vmovdqu $32(%r14,%rdi), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x000013a0 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x000013a4 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x000013a8 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x000013ac vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xc7, //0x000013b0 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x000013b4 vpmovmskb %ymm0, %edx - 0xc5, 0xf5, 0x74, 0xc7, //0x000013b8 vpcmpeqb %ymm7, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x000013bc vpmovmskb %ymm0, %ebx - 0x48, 0xc1, 0xe0, 0x20, //0x000013c0 shlq $32, %rax - 0x48, 0x09, 0xc7, //0x000013c4 orq %rax, %rdi - 0x48, 0xc1, 0xe3, 0x20, //0x000013c7 shlq $32, %rbx - 0x48, 0x09, 0xda, //0x000013cb orq %rbx, %rdx - 0x0f, 0x85, 0x33, 0x00, 0x00, 0x00, //0x000013ce jne LBB0_248 - 0x4d, 0x85, 0xd2, //0x000013d4 testq %r10, %r10 - 0x0f, 0x85, 0x48, 0x00, 0x00, 0x00, //0x000013d7 jne LBB0_250 - 0x45, 0x31, 0xd2, //0x000013dd xorl %r10d, %r10d - 0x48, 0x85, 0xff, //0x000013e0 testq %rdi, %rdi - 0x0f, 0x85, 0x96, 0x00, 0x00, 0x00, //0x000013e3 jne LBB0_252 - //0x000013e9 LBB0_242 - 0x49, 0x83, 0xc0, 0xc0, //0x000013e9 addq $-64, %r8 - 0x48, 0x83, 0xc6, 0xc0, //0x000013ed addq $-64, %rsi - 0x48, 0x89, 0xcf, //0x000013f1 movq %rcx, %rdi - 0x48, 0x83, 0xc7, 0x40, //0x000013f4 addq $64, %rdi - 0x49, 0x83, 0xf8, 0x3f, //0x000013f8 cmpq $63, %r8 - 0x0f, 0x87, 0x8e, 0xff, 0xff, 0xff, //0x000013fc ja LBB0_239 - 0xe9, 0x99, 0x15, 0x00, 0x00, //0x00001402 jmp LBB0_243 - //0x00001407 LBB0_248 - 0x4c, 0x89, 0x1c, 0x24, //0x00001407 movq %r11, (%rsp) - 0x49, 0x83, 0xfb, 0xff, //0x0000140b cmpq $-1, %r11 - 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x0000140f jne LBB0_251 - 0x48, 0x0f, 0xbc, 0xc2, //0x00001415 bsfq %rdx, %rax - 0x48, 0x01, 0xc8, //0x00001419 addq %rcx, %rax - 0x48, 0x89, 0x04, 0x24, //0x0000141c movq %rax, (%rsp) - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00001420 jmp LBB0_251 - //0x00001425 LBB0_250 - 0x4c, 0x89, 0x1c, 0x24, //0x00001425 movq %r11, (%rsp) - //0x00001429 LBB0_251 - 0x4c, 0x89, 0xd0, //0x00001429 movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x0000142c notq %rax - 0x48, 0x21, 0xd0, //0x0000142f andq %rdx, %rax - 0x4c, 0x8d, 0x1c, 0x00, //0x00001432 leaq (%rax,%rax), %r11 - 0x4d, 0x09, 0xd3, //0x00001436 orq %r10, %r11 - 0x4c, 0x89, 0xdb, //0x00001439 movq %r11, %rbx - 0x48, 0xf7, 0xd3, //0x0000143c notq %rbx - 0x48, 0x21, 0xd3, //0x0000143f andq %rdx, %rbx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001442 movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd3, //0x0000144c andq %rdx, %rbx - 0x45, 0x31, 0xd2, //0x0000144f xorl %r10d, %r10d - 0x48, 0x01, 0xc3, //0x00001452 addq %rax, %rbx - 0x41, 0x0f, 0x92, 0xc2, //0x00001455 setb %r10b - 0x48, 0x01, 0xdb, //0x00001459 addq %rbx, %rbx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000145c movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc3, //0x00001466 xorq %rax, %rbx - 0x4c, 0x21, 0xdb, //0x00001469 andq %r11, %rbx - 0x48, 0xf7, 0xd3, //0x0000146c notq %rbx - 0x48, 0x21, 0xdf, //0x0000146f andq %rbx, %rdi - 0x4c, 0x8b, 0x1c, 0x24, //0x00001472 movq (%rsp), %r11 - 0x48, 0x85, 0xff, //0x00001476 testq %rdi, %rdi - 0x0f, 0x84, 0x6a, 0xff, 0xff, 0xff, //0x00001479 je LBB0_242 - //0x0000147f LBB0_252 - 0xc5, 0x7d, 0x7f, 0xea, //0x0000147f vmovdqa %ymm13, %ymm2 - 0x48, 0x0f, 0xbc, 0xcf, //0x00001483 bsfq %rdi, %rcx - 0x48, 0x29, 0xf1, //0x00001487 subq %rsi, %rcx - 0xe9, 0x5f, 0x10, 0x00, 0x00, //0x0000148a jmp LBB0_461 - //0x0000148f LBB0_253 - 0x4c, 0x8b, 0x57, 0x08, //0x0000148f movq $8(%rdi), %r10 - 0x49, 0x8b, 0x4d, 0x00, //0x00001493 movq (%r13), %rcx - 0x41, 0xf6, 0xc3, 0x40, //0x00001497 testb $64, %r11b - 0x48, 0x89, 0x0c, 0x24, //0x0000149b movq %rcx, (%rsp) - 0x0f, 0x85, 0x0b, 0x04, 0x00, 0x00, //0x0000149f jne LBB0_313 - 0x49, 0x29, 0xca, //0x000014a5 subq %rcx, %r10 - 0x0f, 0x84, 0x3a, 0x28, 0x00, 0x00, //0x000014a8 je LBB0_704 - 0x49, 0x8d, 0x04, 0x0e, //0x000014ae leaq (%r14,%rcx), %rax - 0x48, 0x89, 0x44, 0x24, 0x38, //0x000014b2 movq %rax, $56(%rsp) - 0x80, 0x38, 0x30, //0x000014b7 cmpb $48, (%rax) - 0x0f, 0x85, 0xab, 0x0c, 0x00, 0x00, //0x000014ba jne LBB0_406 - 0x41, 0xb9, 0x01, 0x00, 0x00, 0x00, //0x000014c0 movl $1, %r9d - 0x49, 0x83, 0xfa, 0x01, //0x000014c6 cmpq $1, %r10 - 0x0f, 0x85, 0x6c, 0x0c, 0x00, 0x00, //0x000014ca jne LBB0_404 - //0x000014d0 LBB0_257 - 0x48, 0x8b, 0x0c, 0x24, //0x000014d0 movq (%rsp), %rcx - 0xe9, 0xb0, 0x14, 0x00, 0x00, //0x000014d4 jmp LBB0_498 - //0x000014d9 LBB0_258 - 0x41, 0xf6, 0xc3, 0x40, //0x000014d9 testb $64, %r11b - 0x0f, 0x85, 0xe2, 0x04, 0x00, 0x00, //0x000014dd jne LBB0_329 - 0x49, 0x8b, 0x0f, //0x000014e3 movq (%r15), %rcx - 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000014e6 cmpq $4095, %rcx - 0x0f, 0x8f, 0x2c, 0x26, 0x00, 0x00, //0x000014ed jg LBB0_705 - 0x48, 0x8d, 0x41, 0x01, //0x000014f3 leaq $1(%rcx), %rax - 0x49, 0x89, 0x07, //0x000014f7 movq %rax, (%r15) - 0x49, 0xc7, 0x44, 0xcf, 0x08, 0x05, 0x00, 0x00, 0x00, //0x000014fa movq $5, $8(%r15,%rcx,8) - 0xe9, 0x98, 0xee, 0xff, 0xff, //0x00001503 jmp LBB0_3 - //0x00001508 LBB0_261 - 0x49, 0x8b, 0x4d, 0x00, //0x00001508 movq (%r13), %rcx - 0x48, 0x8b, 0x57, 0x08, //0x0000150c movq $8(%rdi), %rdx - 0x48, 0x8d, 0x42, 0xfc, //0x00001510 leaq $-4(%rdx), %rax - 0x48, 0x39, 0xc1, //0x00001514 cmpq %rax, %rcx - 0x0f, 0x87, 0x8e, 0x26, 0x00, 0x00, //0x00001517 ja LBB0_686 - 0x41, 0x8b, 0x14, 0x0e, //0x0000151d movl (%r14,%rcx), %edx - 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x00001521 cmpl $1702063201, %edx - 0x0f, 0x85, 0xac, 0x26, 0x00, 0x00, //0x00001527 jne LBB0_687 - 0x48, 0x8d, 0x41, 0x04, //0x0000152d leaq $4(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00001531 movq %rax, (%r13) - 0x48, 0x85, 0xc9, //0x00001535 testq %rcx, %rcx - 0x0f, 0x8f, 0x62, 0xee, 0xff, 0xff, //0x00001538 jg LBB0_3 - 0xe9, 0x98, 0x27, 0x00, 0x00, //0x0000153e jmp LBB0_264 - //0x00001543 LBB0_265 - 0x49, 0x8b, 0x4d, 0x00, //0x00001543 movq (%r13), %rcx - 0x48, 0x8b, 0x57, 0x08, //0x00001547 movq $8(%rdi), %rdx - 0x48, 0x8d, 0x42, 0xfd, //0x0000154b leaq $-3(%rdx), %rax - 0x48, 0x39, 0xc1, //0x0000154f cmpq %rax, %rcx - 0x0f, 0x87, 0x53, 0x26, 0x00, 0x00, //0x00001552 ja LBB0_686 - 0x48, 0x8d, 0x41, 0xff, //0x00001558 leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0e, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x0000155c cmpl $1819047278, $-1(%r14,%rcx) - 0x0f, 0x84, 0x2d, 0x00, 0x00, 0x00, //0x00001565 je LBB0_273 - 0xe9, 0xc3, 0x26, 0x00, 0x00, //0x0000156b jmp LBB0_267 - //0x00001570 LBB0_271 - 0x49, 0x8b, 0x4d, 0x00, //0x00001570 movq (%r13), %rcx - 0x48, 0x8b, 0x57, 0x08, //0x00001574 movq $8(%rdi), %rdx - 0x48, 0x8d, 0x42, 0xfd, //0x00001578 leaq $-3(%rdx), %rax - 0x48, 0x39, 0xc1, //0x0000157c cmpq %rax, %rcx - 0x0f, 0x87, 0x26, 0x26, 0x00, 0x00, //0x0000157f ja LBB0_686 - 0x48, 0x8d, 0x41, 0xff, //0x00001585 leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0e, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00001589 cmpl $1702195828, $-1(%r14,%rcx) - 0x0f, 0x85, 0xe6, 0x26, 0x00, 0x00, //0x00001592 jne LBB0_692 - //0x00001598 LBB0_273 - 0x48, 0x89, 0x04, 0x24, //0x00001598 movq %rax, (%rsp) - 0x48, 0x8d, 0x41, 0x03, //0x0000159c leaq $3(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x000015a0 movq %rax, (%r13) - 0x48, 0x85, 0xc9, //0x000015a4 testq %rcx, %rcx - 0x0f, 0x8f, 0xf3, 0xed, 0xff, 0xff, //0x000015a7 jg LBB0_3 - 0xe9, 0xe3, 0x25, 0x00, 0x00, //0x000015ad jmp LBB0_711 - //0x000015b2 LBB0_274 - 0x41, 0xf6, 0xc3, 0x40, //0x000015b2 testb $64, %r11b - 0x0f, 0x85, 0xfb, 0x06, 0x00, 0x00, //0x000015b6 jne LBB0_355 - 0x49, 0x8b, 0x0f, //0x000015bc movq (%r15), %rcx - 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000015bf cmpq $4095, %rcx - 0x0f, 0x8f, 0x53, 0x25, 0x00, 0x00, //0x000015c6 jg LBB0_705 - 0x48, 0x8d, 0x41, 0x01, //0x000015cc leaq $1(%rcx), %rax - 0x49, 0x89, 0x07, //0x000015d0 movq %rax, (%r15) - 0x49, 0xc7, 0x44, 0xcf, 0x08, 0x06, 0x00, 0x00, 0x00, //0x000015d3 movq $6, $8(%r15,%rcx,8) - 0xe9, 0xbf, 0xed, 0xff, 0xff, //0x000015dc jmp LBB0_3 - //0x000015e1 LBB0_277 - 0x89, 0xc8, //0x000015e1 movl %ecx, %eax - 0x49, 0x01, 0xc5, //0x000015e3 addq %rax, %r13 - 0x4d, 0x01, 0xfd, //0x000015e6 addq %r15, %r13 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x000015e9 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x000015ee movq $16(%rsp), %rdi - 0xe9, 0x03, 0x00, 0x00, 0x00, //0x000015f3 jmp LBB0_279 - //0x000015f8 LBB0_278 - 0x49, 0x01, 0xcd, //0x000015f8 addq %rcx, %r13 - //0x000015fb LBB0_279 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000015fb movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x28, //0x00001602 movq $40(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00001607 testq %rdx, %rdx - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000160a movq $8(%rsp), %r15 - 0x0f, 0x84, 0x66, 0x25, 0x00, 0x00, //0x0000160f je LBB0_684 - 0x4d, 0x85, 0xd2, //0x00001615 testq %r10, %r10 - 0xc5, 0xfe, 0x6f, 0x1d, 0xa0, 0xeb, 0xff, 0xff, //0x00001618 vmovdqu $-5216(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0x0f, 0x84, 0x55, 0x25, 0x00, 0x00, //0x00001620 je LBB0_684 - 0x4d, 0x85, 0xc9, //0x00001626 testq %r9, %r9 - 0x0f, 0x84, 0x4c, 0x25, 0x00, 0x00, //0x00001629 je LBB0_684 - 0x4c, 0x2b, 0x6c, 0x24, 0x38, //0x0000162f subq $56(%rsp), %r13 - 0x49, 0x8d, 0x4d, 0xff, //0x00001634 leaq $-1(%r13), %rcx - 0x48, 0x39, 0xca, //0x00001638 cmpq %rcx, %rdx - 0x0f, 0x84, 0x80, 0x00, 0x00, 0x00, //0x0000163b je LBB0_288 - 0x49, 0x39, 0xca, //0x00001641 cmpq %rcx, %r10 - 0x0f, 0x84, 0x77, 0x00, 0x00, 0x00, //0x00001644 je LBB0_288 - 0x49, 0x39, 0xc9, //0x0000164a cmpq %rcx, %r9 - 0x0f, 0x84, 0x6e, 0x00, 0x00, 0x00, //0x0000164d je LBB0_288 - 0x4d, 0x85, 0xd2, //0x00001653 testq %r10, %r10 - 0xc5, 0xfe, 0x6f, 0x2d, 0x62, 0xea, 0xff, 0xff, //0x00001656 vmovdqu $-5534(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x7a, 0xea, 0xff, 0xff, //0x0000165e vmovdqu $-5510(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x92, 0xea, 0xff, 0xff, //0x00001666 vmovdqu $-5486(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0xaa, 0xea, 0xff, 0xff, //0x0000166e vmovdqu $-5462(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001676 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0x7d, 0xeb, 0xff, 0xff, //0x0000167b vmovdqu $-5251(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x05, 0x95, 0xeb, 0xff, 0xff, //0x00001683 vmovdqu $-5227(%rip), %ymm0 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0xad, 0xeb, 0xff, 0xff, //0x0000168b vmovdqu $-5203(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0x45, 0xeb, 0xff, 0xff, //0x00001693 vmovdqu $-5307(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0xfd, 0xeb, 0xff, 0xff, //0x0000169b vmovdqu $-5123(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0x0f, 0x8e, 0x9b, 0x00, 0x00, 0x00, //0x000016a3 jle LBB0_293 - 0x49, 0x8d, 0x42, 0xff, //0x000016a9 leaq $-1(%r10), %rax - 0x49, 0x39, 0xc1, //0x000016ad cmpq %rax, %r9 - 0x0f, 0x84, 0x8e, 0x00, 0x00, 0x00, //0x000016b0 je LBB0_293 - 0x49, 0xf7, 0xd2, //0x000016b6 notq %r10 - 0x4d, 0x89, 0xd5, //0x000016b9 movq %r10, %r13 - 0xe9, 0x50, 0x00, 0x00, 0x00, //0x000016bc jmp LBB0_289 - //0x000016c1 LBB0_288 - 0x49, 0xf7, 0xdd, //0x000016c1 negq %r13 - 0xc5, 0xfe, 0x6f, 0x2d, 0xf4, 0xe9, 0xff, 0xff, //0x000016c4 vmovdqu $-5644(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x0c, 0xea, 0xff, 0xff, //0x000016cc vmovdqu $-5620(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x24, 0xea, 0xff, 0xff, //0x000016d4 vmovdqu $-5596(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x3c, 0xea, 0xff, 0xff, //0x000016dc vmovdqu $-5572(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000016e4 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0x0f, 0xeb, 0xff, 0xff, //0x000016e9 vmovdqu $-5361(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x05, 0x27, 0xeb, 0xff, 0xff, //0x000016f1 vmovdqu $-5337(%rip), %ymm0 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0x3f, 0xeb, 0xff, 0xff, //0x000016f9 vmovdqu $-5313(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0xd7, 0xea, 0xff, 0xff, //0x00001701 vmovdqu $-5417(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x8f, 0xeb, 0xff, 0xff, //0x00001709 vmovdqu $-5233(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - //0x00001711 LBB0_289 - 0xc5, 0x7e, 0x6f, 0x1d, 0x27, 0xea, 0xff, 0xff, //0x00001711 vmovdqu $-5593(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x3f, 0xea, 0xff, 0xff, //0x00001719 vmovdqu $-5569(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - //0x00001721 LBB0_290 - 0x48, 0x8b, 0x5c, 0x24, 0x20, //0x00001721 movq $32(%rsp), %rbx - //0x00001726 LBB0_291 - 0x4d, 0x85, 0xed, //0x00001726 testq %r13, %r13 - 0x0f, 0x88, 0x49, 0x24, 0x00, 0x00, //0x00001729 js LBB0_683 - 0x48, 0x8b, 0x44, 0x24, 0x30, //0x0000172f movq $48(%rsp), %rax - 0x48, 0x8b, 0x08, //0x00001734 movq (%rax), %rcx - 0x48, 0x83, 0xc1, 0xff, //0x00001737 addq $-1, %rcx - 0xc5, 0x7d, 0x6f, 0xe8, //0x0000173b vmovdqa %ymm0, %ymm13 - 0xe9, 0x74, 0xec, 0xff, 0xff, //0x0000173f jmp LBB0_2 - //0x00001744 LBB0_293 - 0x48, 0x89, 0xd0, //0x00001744 movq %rdx, %rax - 0x4c, 0x09, 0xc8, //0x00001747 orq %r9, %rax - 0x0f, 0x99, 0xc1, //0x0000174a setns %cl - 0xc5, 0x7e, 0x6f, 0x1d, 0xeb, 0xe9, 0xff, 0xff, //0x0000174d vmovdqu $-5653(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x03, 0xea, 0xff, 0xff, //0x00001755 vmovdqu $-5629(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - 0x0f, 0x88, 0x84, 0x08, 0x00, 0x00, //0x0000175d js LBB0_384 - 0x4c, 0x39, 0xca, //0x00001763 cmpq %r9, %rdx - 0x0f, 0x8c, 0x7b, 0x08, 0x00, 0x00, //0x00001766 jl LBB0_384 - 0x48, 0xf7, 0xd2, //0x0000176c notq %rdx - 0x49, 0x89, 0xd5, //0x0000176f movq %rdx, %r13 - 0xe9, 0xaa, 0xff, 0xff, 0xff, //0x00001772 jmp LBB0_290 - //0x00001777 LBB0_296 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001777 movl $64, %edx - 0x48, 0x39, 0xca, //0x0000177c cmpq %rcx, %rdx - 0x0f, 0x82, 0xb1, 0x25, 0x00, 0x00, //0x0000177f jb LBB0_209 - //0x00001785 LBB0_297 - 0x49, 0x01, 0xca, //0x00001785 addq %rcx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00001788 addq $1, %r10 - //0x0000178c LBB0_298 - 0x4d, 0x85, 0xd2, //0x0000178c testq %r10, %r10 - 0x0f, 0x88, 0xb1, 0x23, 0x00, 0x00, //0x0000178f js LBB0_680 - 0x4d, 0x89, 0x55, 0x00, //0x00001795 movq %r10, (%r13) - 0x4d, 0x85, 0xc9, //0x00001799 testq %r9, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x0000179c movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x000017a1 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x000017a6 movq $8(%rsp), %r15 - 0x0f, 0x8e, 0x88, 0x23, 0x00, 0x00, //0x000017ab jle LBB0_463 - //0x000017b1 LBB0_300 - 0x49, 0x8b, 0x0f, //0x000017b1 movq (%r15), %rcx - 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000017b4 cmpq $4095, %rcx - 0x0f, 0x8f, 0x5e, 0x23, 0x00, 0x00, //0x000017bb jg LBB0_705 - 0x48, 0x8d, 0x41, 0x01, //0x000017c1 leaq $1(%rcx), %rax - 0x49, 0x89, 0x07, //0x000017c5 movq %rax, (%r15) - 0x49, 0xc7, 0x44, 0xcf, 0x08, 0x04, 0x00, 0x00, 0x00, //0x000017c8 movq $4, $8(%r15,%rcx,8) - 0xe9, 0xca, 0xeb, 0xff, 0xff, //0x000017d1 jmp LBB0_3 - //0x000017d6 LBB0_302 - 0x4c, 0x8b, 0x57, 0x08, //0x000017d6 movq $8(%rdi), %r10 - 0x4d, 0x8b, 0x45, 0x00, //0x000017da movq (%r13), %r8 - 0x4f, 0x8d, 0x0c, 0x06, //0x000017de leaq (%r14,%r8), %r9 - 0x4d, 0x29, 0xc2, //0x000017e2 subq %r8, %r10 - 0x49, 0x83, 0xfa, 0x20, //0x000017e5 cmpq $32, %r10 - 0x0f, 0x8c, 0xa4, 0x00, 0x00, 0x00, //0x000017e9 jl LBB0_312 - 0xb9, 0x20, 0x00, 0x00, 0x00, //0x000017ef movl $32, %ecx - 0x31, 0xf6, //0x000017f4 xorl %esi, %esi - 0x45, 0x31, 0xff, //0x000017f6 xorl %r15d, %r15d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000017f9 .p2align 4, 0x90 - //0x00001800 LBB0_304 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00001800 vmovdqu (%r9,%rsi), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00001806 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd9, //0x0000180a vpmovmskb %ymm1, %r11d - 0xc5, 0xfd, 0x74, 0xc7, //0x0000180e vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd8, //0x00001812 vpmovmskb %ymm0, %ebx - 0x85, 0xdb, //0x00001816 testl %ebx, %ebx - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00001818 jne LBB0_307 - 0x4d, 0x85, 0xff, //0x0000181e testq %r15, %r15 - 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00001821 jne LBB0_307 - 0x45, 0x31, 0xff, //0x00001827 xorl %r15d, %r15d - 0xe9, 0x32, 0x00, 0x00, 0x00, //0x0000182a jmp LBB0_308 - 0x90, //0x0000182f .p2align 4, 0x90 - //0x00001830 LBB0_307 - 0x44, 0x89, 0xf8, //0x00001830 movl %r15d, %eax - 0xf7, 0xd0, //0x00001833 notl %eax - 0x21, 0xd8, //0x00001835 andl %ebx, %eax - 0x8d, 0x14, 0x00, //0x00001837 leal (%rax,%rax), %edx - 0x44, 0x09, 0xfa, //0x0000183a orl %r15d, %edx - 0x89, 0xd7, //0x0000183d movl %edx, %edi - 0xf7, 0xd7, //0x0000183f notl %edi - 0x21, 0xdf, //0x00001841 andl %ebx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001843 andl $-1431655766, %edi - 0x45, 0x31, 0xff, //0x00001849 xorl %r15d, %r15d - 0x01, 0xc7, //0x0000184c addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc7, //0x0000184e setb %r15b - 0x01, 0xff, //0x00001852 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00001854 xorl $1431655765, %edi - 0x21, 0xd7, //0x0000185a andl %edx, %edi - 0xf7, 0xd7, //0x0000185c notl %edi - 0x41, 0x21, 0xfb, //0x0000185e andl %edi, %r11d - //0x00001861 LBB0_308 - 0x4d, 0x85, 0xdb, //0x00001861 testq %r11, %r11 - 0x0f, 0x85, 0xff, 0xea, 0xff, 0xff, //0x00001864 jne LBB0_153 - 0x48, 0x83, 0xc6, 0x20, //0x0000186a addq $32, %rsi - 0x49, 0x8d, 0x04, 0x0a, //0x0000186e leaq (%r10,%rcx), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x00001872 addq $-32, %rax - 0x48, 0x83, 0xc1, 0xe0, //0x00001876 addq $-32, %rcx - 0x48, 0x83, 0xf8, 0x3f, //0x0000187a cmpq $63, %rax - 0x0f, 0x8f, 0x7c, 0xff, 0xff, 0xff, //0x0000187e jg LBB0_304 - 0x4d, 0x85, 0xff, //0x00001884 testq %r15, %r15 - 0x0f, 0x85, 0xd7, 0x1d, 0x00, 0x00, //0x00001887 jne LBB0_622 - 0x49, 0x01, 0xf1, //0x0000188d addq %rsi, %r9 - 0x49, 0x29, 0xf2, //0x00001890 subq %rsi, %r10 - //0x00001893 LBB0_312 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00001893 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00001898 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000189d movq $8(%rsp), %r15 - 0x4d, 0x85, 0xd2, //0x000018a2 testq %r10, %r10 - 0x0f, 0x8f, 0x32, 0x1e, 0x00, 0x00, //0x000018a5 jg LBB0_626 - 0xe9, 0xe5, 0x22, 0x00, 0x00, //0x000018ab jmp LBB0_711 - //0x000018b0 LBB0_313 - 0x4c, 0x89, 0xd6, //0x000018b0 movq %r10, %rsi - 0x48, 0x29, 0xce, //0x000018b3 subq %rcx, %rsi - 0x48, 0x83, 0xfe, 0x20, //0x000018b6 cmpq $32, %rsi - 0x0f, 0x82, 0xc2, 0x12, 0x00, 0x00, //0x000018ba jb LBB0_514 - 0x48, 0x89, 0xca, //0x000018c0 movq %rcx, %rdx - 0x48, 0xf7, 0xda, //0x000018c3 negq %rdx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000018c6 .p2align 4, 0x90 - //0x000018d0 LBB0_315 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x0e, //0x000018d0 vmovdqu (%r14,%rcx), %ymm0 - 0xc5, 0xfd, 0x74, 0xcb, //0x000018d6 vpcmpeqb %ymm3, %ymm0, %ymm1 - 0xc5, 0x8d, 0xdb, 0xc0, //0x000018da vpand %ymm0, %ymm14, %ymm0 - 0xc5, 0xfd, 0x74, 0x05, 0xba, 0xe8, 0xff, 0xff, //0x000018de vpcmpeqb $-5958(%rip), %ymm0, %ymm0 /* LCPI0_8+0(%rip) */ - 0xc5, 0xfd, 0xeb, 0xc1, //0x000018e6 vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x000018ea vpmovmskb %ymm0, %esi - 0x85, 0xf6, //0x000018ee testl %esi, %esi - 0x0f, 0x85, 0xd5, 0x06, 0x00, 0x00, //0x000018f0 jne LBB0_382 - 0x48, 0x83, 0xc1, 0x20, //0x000018f6 addq $32, %rcx - 0x49, 0x8d, 0x04, 0x12, //0x000018fa leaq (%r10,%rdx), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x000018fe addq $-32, %rax - 0x48, 0x83, 0xc2, 0xe0, //0x00001902 addq $-32, %rdx - 0x48, 0x83, 0xf8, 0x1f, //0x00001906 cmpq $31, %rax - 0x0f, 0x87, 0xc0, 0xff, 0xff, 0xff, //0x0000190a ja LBB0_315 - 0x4c, 0x89, 0xf1, //0x00001910 movq %r14, %rcx - 0x48, 0x29, 0xd1, //0x00001913 subq %rdx, %rcx - 0x49, 0x01, 0xd2, //0x00001916 addq %rdx, %r10 - 0x4c, 0x89, 0xd6, //0x00001919 movq %r10, %rsi - 0x48, 0x83, 0xfe, 0x10, //0x0000191c cmpq $16, %rsi - 0x48, 0x8b, 0x1c, 0x24, //0x00001920 movq (%rsp), %rbx - 0x0f, 0x82, 0x48, 0x00, 0x00, 0x00, //0x00001924 jb LBB0_321 - //0x0000192a LBB0_318 - 0x4c, 0x89, 0xf2, //0x0000192a movq %r14, %rdx - 0x48, 0x29, 0xca, //0x0000192d subq %rcx, %rdx - //0x00001930 LBB0_319 - 0xc5, 0xfa, 0x6f, 0x01, //0x00001930 vmovdqu (%rcx), %xmm0 - 0xc5, 0xf9, 0x74, 0x0d, 0xd4, 0xe6, 0xff, 0xff, //0x00001934 vpcmpeqb $-6444(%rip), %xmm0, %xmm1 /* LCPI0_11+0(%rip) */ - 0xc5, 0xf9, 0xdb, 0x05, 0xdc, 0xe6, 0xff, 0xff, //0x0000193c vpand $-6436(%rip), %xmm0, %xmm0 /* LCPI0_12+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0xe4, 0xe6, 0xff, 0xff, //0x00001944 vpcmpeqb $-6428(%rip), %xmm0, %xmm0 /* LCPI0_13+0(%rip) */ - 0xc5, 0xf9, 0xeb, 0xc1, //0x0000194c vpor %xmm1, %xmm0, %xmm0 - 0xc5, 0xf9, 0xd7, 0xc0, //0x00001950 vpmovmskb %xmm0, %eax - 0x85, 0xc0, //0x00001954 testl %eax, %eax - 0x0f, 0x85, 0xe5, 0x0f, 0x00, 0x00, //0x00001956 jne LBB0_697 - 0x48, 0x83, 0xc1, 0x10, //0x0000195c addq $16, %rcx - 0x48, 0x83, 0xc6, 0xf0, //0x00001960 addq $-16, %rsi - 0x48, 0x83, 0xc2, 0xf0, //0x00001964 addq $-16, %rdx - 0x48, 0x83, 0xfe, 0x0f, //0x00001968 cmpq $15, %rsi - 0x0f, 0x87, 0xbe, 0xff, 0xff, 0xff, //0x0000196c ja LBB0_319 - //0x00001972 LBB0_321 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00001972 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00001976 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000197a vmovdqa %ymm13, %ymm11 - 0x48, 0x85, 0xf6, //0x0000197f testq %rsi, %rsi - 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00001982 je LBB0_328 - 0x48, 0x8d, 0x3c, 0x31, //0x00001988 leaq (%rcx,%rsi), %rdi - 0x31, 0xd2, //0x0000198c xorl %edx, %edx - //0x0000198e LBB0_323 - 0x0f, 0xb6, 0x1c, 0x11, //0x0000198e movzbl (%rcx,%rdx), %ebx - 0x80, 0xfb, 0x2c, //0x00001992 cmpb $44, %bl - 0x0f, 0x84, 0x85, 0x12, 0x00, 0x00, //0x00001995 je LBB0_520 - 0x80, 0xfb, 0x7d, //0x0000199b cmpb $125, %bl - 0x0f, 0x84, 0x7c, 0x12, 0x00, 0x00, //0x0000199e je LBB0_520 - 0x80, 0xfb, 0x5d, //0x000019a4 cmpb $93, %bl - 0x0f, 0x84, 0x73, 0x12, 0x00, 0x00, //0x000019a7 je LBB0_520 - 0x48, 0x83, 0xc2, 0x01, //0x000019ad addq $1, %rdx - 0x48, 0x39, 0xd6, //0x000019b1 cmpq %rdx, %rsi - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x000019b4 jne LBB0_323 - 0x48, 0x89, 0xf9, //0x000019ba movq %rdi, %rcx - //0x000019bd LBB0_328 - 0x4c, 0x29, 0xf1, //0x000019bd subq %r14, %rcx - 0xe9, 0x61, 0x12, 0x00, 0x00, //0x000019c0 jmp LBB0_521 - //0x000019c5 LBB0_329 - 0x4c, 0x8b, 0x4f, 0x08, //0x000019c5 movq $8(%rdi), %r9 - 0x4d, 0x8b, 0x45, 0x00, //0x000019c9 movq (%r13), %r8 - 0x4d, 0x29, 0xc1, //0x000019cd subq %r8, %r9 - 0x4d, 0x01, 0xc6, //0x000019d0 addq %r8, %r14 - 0x45, 0x31, 0xdb, //0x000019d3 xorl %r11d, %r11d - 0x45, 0x31, 0xd2, //0x000019d6 xorl %r10d, %r10d - 0x45, 0x31, 0xff, //0x000019d9 xorl %r15d, %r15d - 0x31, 0xdb, //0x000019dc xorl %ebx, %ebx - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x000019de jmp LBB0_331 - //0x000019e3 LBB0_330 - 0x48, 0xc1, 0xff, 0x3f, //0x000019e3 sarq $63, %rdi - 0xf3, 0x48, 0x0f, 0xb8, 0xc6, //0x000019e7 popcntq %rsi, %rax - 0x49, 0x01, 0xc7, //0x000019ec addq %rax, %r15 - 0x49, 0x83, 0xc6, 0x40, //0x000019ef addq $64, %r14 - 0x49, 0x83, 0xc1, 0xc0, //0x000019f3 addq $-64, %r9 - 0x49, 0x89, 0xfb, //0x000019f7 movq %rdi, %r11 - //0x000019fa LBB0_331 - 0x49, 0x83, 0xf9, 0x40, //0x000019fa cmpq $64, %r9 - 0x0f, 0x8c, 0x59, 0x01, 0x00, 0x00, //0x000019fe jl LBB0_339 - //0x00001a04 LBB0_332 - 0xc4, 0x41, 0x7d, 0x6f, 0xfd, //0x00001a04 vmovdqa %ymm13, %ymm15 - 0xc4, 0xc1, 0x7e, 0x6f, 0x0e, //0x00001a09 vmovdqu (%r14), %ymm1 - 0xc4, 0xc1, 0x7e, 0x6f, 0x46, 0x20, //0x00001a0e vmovdqu $32(%r14), %ymm0 - 0xc5, 0xf5, 0x74, 0xd7, //0x00001a14 vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00001a18 vpmovmskb %ymm2, %edx - 0xc5, 0xfd, 0x74, 0xd7, //0x00001a1c vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001a20 vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001a24 shlq $32, %rax - 0x48, 0x09, 0xc2, //0x00001a28 orq %rax, %rdx - 0x48, 0x89, 0xd0, //0x00001a2b movq %rdx, %rax - 0xc4, 0x41, 0x7d, 0x6f, 0xea, //0x00001a2e vmovdqa %ymm10, %ymm13 - 0x4c, 0x09, 0xd0, //0x00001a33 orq %r10, %rax - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001a36 jne LBB0_334 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001a3c movq $-1, %rdx - 0x45, 0x31, 0xd2, //0x00001a43 xorl %r10d, %r10d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001a46 jmp LBB0_335 - //0x00001a4b LBB0_334 - 0x4c, 0x89, 0xd0, //0x00001a4b movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x00001a4e notq %rax - 0x48, 0x21, 0xd0, //0x00001a51 andq %rdx, %rax - 0x48, 0x8d, 0x0c, 0x00, //0x00001a54 leaq (%rax,%rax), %rcx - 0x4c, 0x09, 0xd1, //0x00001a58 orq %r10, %rcx - 0x48, 0x89, 0xce, //0x00001a5b movq %rcx, %rsi - 0x48, 0xf7, 0xd6, //0x00001a5e notq %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001a61 movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfa, //0x00001a6b andq %rdi, %rdx - 0x48, 0x21, 0xf2, //0x00001a6e andq %rsi, %rdx - 0x45, 0x31, 0xd2, //0x00001a71 xorl %r10d, %r10d - 0x48, 0x01, 0xc2, //0x00001a74 addq %rax, %rdx - 0x41, 0x0f, 0x92, 0xc2, //0x00001a77 setb %r10b - 0x48, 0x01, 0xd2, //0x00001a7b addq %rdx, %rdx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001a7e movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc2, //0x00001a88 xorq %rax, %rdx - 0x48, 0x21, 0xca, //0x00001a8b andq %rcx, %rdx - 0x48, 0xf7, 0xd2, //0x00001a8e notq %rdx - //0x00001a91 LBB0_335 - 0xc5, 0xfd, 0x74, 0xd6, //0x00001a91 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001a95 vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001a99 shlq $32, %rax - 0xc5, 0xf5, 0x74, 0xd6, //0x00001a9d vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xca, //0x00001aa1 vpmovmskb %ymm2, %ecx - 0x48, 0x09, 0xc1, //0x00001aa5 orq %rax, %rcx - 0x48, 0x21, 0xd1, //0x00001aa8 andq %rdx, %rcx - 0xc4, 0xe1, 0xf9, 0x6e, 0xd1, //0x00001aab vmovq %rcx, %xmm2 - 0xc4, 0xe3, 0x69, 0x44, 0x15, 0xe6, 0xe5, 0xff, 0xff, 0x00, //0x00001ab0 vpclmulqdq $0, $-6682(%rip), %xmm2, %xmm2 /* LCPI0_26+0(%rip) */ - 0xc4, 0xe1, 0xf9, 0x7e, 0xd7, //0x00001aba vmovq %xmm2, %rdi - 0x4c, 0x31, 0xdf, //0x00001abf xorq %r11, %rdi - 0xc5, 0x7e, 0x6f, 0x15, 0xb6, 0xe6, 0xff, 0xff, //0x00001ac2 vmovdqu $-6474(%rip), %ymm10 /* LCPI0_7+0(%rip) */ - 0xc5, 0xad, 0x74, 0xd1, //0x00001aca vpcmpeqb %ymm1, %ymm10, %ymm2 - 0xc5, 0xfd, 0xd7, 0xf2, //0x00001ace vpmovmskb %ymm2, %esi - 0xc5, 0xad, 0x74, 0xd0, //0x00001ad2 vpcmpeqb %ymm0, %ymm10, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001ad6 vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001ada shlq $32, %rax - 0x48, 0x09, 0xc6, //0x00001ade orq %rax, %rsi - 0x48, 0x89, 0xf8, //0x00001ae1 movq %rdi, %rax - 0x48, 0xf7, 0xd0, //0x00001ae4 notq %rax - 0x48, 0x21, 0xc6, //0x00001ae7 andq %rax, %rsi - 0xc5, 0xfe, 0x6f, 0x15, 0xae, 0xe6, 0xff, 0xff, //0x00001aea vmovdqu $-6482(%rip), %ymm2 /* LCPI0_8+0(%rip) */ - 0xc5, 0xf5, 0x74, 0xca, //0x00001af2 vpcmpeqb %ymm2, %ymm1, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x00001af6 vpmovmskb %ymm1, %edx - 0xc5, 0xfd, 0x74, 0xc2, //0x00001afa vpcmpeqb %ymm2, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc8, //0x00001afe vpmovmskb %ymm0, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00001b02 shlq $32, %rcx - 0x48, 0x09, 0xca, //0x00001b06 orq %rcx, %rdx - 0xc4, 0x41, 0x7d, 0x6f, 0xd5, //0x00001b09 vmovdqa %ymm13, %ymm10 - 0xc4, 0x41, 0x7d, 0x6f, 0xef, //0x00001b0e vmovdqa %ymm15, %ymm13 - 0x48, 0x21, 0xc2, //0x00001b13 andq %rax, %rdx - 0x0f, 0x84, 0xc7, 0xfe, 0xff, 0xff, //0x00001b16 je LBB0_330 - 0xc5, 0x7e, 0x6f, 0x3d, 0x1c, 0xe7, 0xff, 0xff, //0x00001b1c vmovdqu $-6372(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001b24 .p2align 4, 0x90 - //0x00001b30 LBB0_337 - 0x48, 0x8d, 0x4a, 0xff, //0x00001b30 leaq $-1(%rdx), %rcx - 0x48, 0x89, 0xc8, //0x00001b34 movq %rcx, %rax - 0x48, 0x21, 0xf0, //0x00001b37 andq %rsi, %rax - 0xf3, 0x48, 0x0f, 0xb8, 0xc0, //0x00001b3a popcntq %rax, %rax - 0x4c, 0x01, 0xf8, //0x00001b3f addq %r15, %rax - 0x48, 0x39, 0xd8, //0x00001b42 cmpq %rbx, %rax - 0x0f, 0x86, 0x38, 0x04, 0x00, 0x00, //0x00001b45 jbe LBB0_380 - 0x48, 0x83, 0xc3, 0x01, //0x00001b4b addq $1, %rbx - 0x48, 0x21, 0xca, //0x00001b4f andq %rcx, %rdx - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00001b52 jne LBB0_337 - 0xe9, 0x86, 0xfe, 0xff, 0xff, //0x00001b58 jmp LBB0_330 - //0x00001b5d LBB0_339 - 0x4d, 0x85, 0xc9, //0x00001b5d testq %r9, %r9 - 0x0f, 0x8e, 0x17, 0x22, 0x00, 0x00, //0x00001b60 jle LBB0_720 - 0xc5, 0x7d, 0x7f, 0xd9, //0x00001b66 vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00001b6a vmovdqa %ymm13, %ymm11 - 0xc5, 0xf9, 0xef, 0xc0, //0x00001b6f vpxor %xmm0, %xmm0, %xmm0 - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x60, //0x00001b73 vmovdqu %ymm0, $96(%rsp) - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001b79 vmovdqu %ymm0, $64(%rsp) - 0x44, 0x89, 0xf0, //0x00001b7f movl %r14d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00001b82 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00001b87 cmpl $4033, %eax - 0x0f, 0x82, 0x27, 0x00, 0x00, 0x00, //0x00001b8c jb LBB0_343 - 0x49, 0x83, 0xf9, 0x20, //0x00001b92 cmpq $32, %r9 - 0x0f, 0x82, 0x40, 0x00, 0x00, 0x00, //0x00001b96 jb LBB0_344 - 0xc4, 0xc1, 0x7e, 0x6f, 0x06, //0x00001b9c vmovdqu (%r14), %ymm0 - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001ba1 vmovdqu %ymm0, $64(%rsp) - 0x49, 0x83, 0xc6, 0x20, //0x00001ba7 addq $32, %r14 - 0x49, 0x8d, 0x79, 0xe0, //0x00001bab leaq $-32(%r9), %rdi - 0x48, 0x8d, 0x74, 0x24, 0x60, //0x00001baf leaq $96(%rsp), %rsi - 0xe9, 0x2b, 0x00, 0x00, 0x00, //0x00001bb4 jmp LBB0_345 - //0x00001bb9 LBB0_343 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001bb9 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001bbe vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0xd5, 0xe6, 0xff, 0xff, //0x00001bc3 vmovdqu $-6443(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xed, 0xe5, 0xff, 0xff, //0x00001bcb vmovdqu $-6675(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x00001bd3 vmovdqa %ymm1, %ymm11 - 0xe9, 0x28, 0xfe, 0xff, 0xff, //0x00001bd7 jmp LBB0_332 - //0x00001bdc LBB0_344 - 0x48, 0x8d, 0x74, 0x24, 0x40, //0x00001bdc leaq $64(%rsp), %rsi - 0x4c, 0x89, 0xcf, //0x00001be1 movq %r9, %rdi - //0x00001be4 LBB0_345 - 0x48, 0x83, 0xff, 0x10, //0x00001be4 cmpq $16, %rdi - 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00001be8 jb LBB0_346 - 0xc4, 0xc1, 0x7a, 0x6f, 0x06, //0x00001bee vmovdqu (%r14), %xmm0 - 0xc5, 0xfa, 0x7f, 0x06, //0x00001bf3 vmovdqu %xmm0, (%rsi) - 0x49, 0x83, 0xc6, 0x10, //0x00001bf7 addq $16, %r14 - 0x48, 0x83, 0xc6, 0x10, //0x00001bfb addq $16, %rsi - 0x48, 0x83, 0xc7, 0xf0, //0x00001bff addq $-16, %rdi - 0x48, 0x83, 0xff, 0x08, //0x00001c03 cmpq $8, %rdi - 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00001c07 jae LBB0_353 - //0x00001c0d LBB0_347 - 0x48, 0x83, 0xff, 0x04, //0x00001c0d cmpq $4, %rdi - 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x00001c11 jl LBB0_348 - //0x00001c17 LBB0_354 - 0x41, 0x8b, 0x06, //0x00001c17 movl (%r14), %eax - 0x89, 0x06, //0x00001c1a movl %eax, (%rsi) - 0x49, 0x83, 0xc6, 0x04, //0x00001c1c addq $4, %r14 - 0x48, 0x83, 0xc6, 0x04, //0x00001c20 addq $4, %rsi - 0x48, 0x83, 0xc7, 0xfc, //0x00001c24 addq $-4, %rdi - 0x48, 0x83, 0xff, 0x02, //0x00001c28 cmpq $2, %rdi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001c2c jae LBB0_349 - 0xe9, 0x43, 0x00, 0x00, 0x00, //0x00001c32 jmp LBB0_350 - //0x00001c37 LBB0_346 - 0x48, 0x83, 0xff, 0x08, //0x00001c37 cmpq $8, %rdi - 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x00001c3b jb LBB0_347 - //0x00001c41 LBB0_353 - 0x49, 0x8b, 0x06, //0x00001c41 movq (%r14), %rax - 0x48, 0x89, 0x06, //0x00001c44 movq %rax, (%rsi) - 0x49, 0x83, 0xc6, 0x08, //0x00001c47 addq $8, %r14 - 0x48, 0x83, 0xc6, 0x08, //0x00001c4b addq $8, %rsi - 0x48, 0x83, 0xc7, 0xf8, //0x00001c4f addq $-8, %rdi - 0x48, 0x83, 0xff, 0x04, //0x00001c53 cmpq $4, %rdi - 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x00001c57 jge LBB0_354 - //0x00001c5d LBB0_348 - 0x48, 0x83, 0xff, 0x02, //0x00001c5d cmpq $2, %rdi - 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x00001c61 jb LBB0_350 - //0x00001c67 LBB0_349 - 0x41, 0x0f, 0xb7, 0x06, //0x00001c67 movzwl (%r14), %eax - 0x66, 0x89, 0x06, //0x00001c6b movw %ax, (%rsi) - 0x49, 0x83, 0xc6, 0x02, //0x00001c6e addq $2, %r14 - 0x48, 0x83, 0xc6, 0x02, //0x00001c72 addq $2, %rsi - 0x48, 0x83, 0xc7, 0xfe, //0x00001c76 addq $-2, %rdi - //0x00001c7a LBB0_350 - 0x4c, 0x89, 0xf2, //0x00001c7a movq %r14, %rdx - 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001c7d leaq $64(%rsp), %r14 - 0x48, 0x85, 0xff, //0x00001c82 testq %rdi, %rdi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001c85 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001c8a vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x09, 0xe6, 0xff, 0xff, //0x00001c8f vmovdqu $-6647(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x21, 0xe5, 0xff, 0xff, //0x00001c97 vmovdqu $-6879(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x00001c9f vmovdqa %ymm1, %ymm11 - 0x0f, 0x84, 0x5b, 0xfd, 0xff, 0xff, //0x00001ca3 je LBB0_332 - 0x8a, 0x02, //0x00001ca9 movb (%rdx), %al - 0x88, 0x06, //0x00001cab movb %al, (%rsi) - 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001cad leaq $64(%rsp), %r14 - 0xe9, 0x4d, 0xfd, 0xff, 0xff, //0x00001cb2 jmp LBB0_332 - //0x00001cb7 LBB0_355 - 0x4c, 0x8b, 0x4f, 0x08, //0x00001cb7 movq $8(%rdi), %r9 - 0x4d, 0x8b, 0x45, 0x00, //0x00001cbb movq (%r13), %r8 - 0x4d, 0x29, 0xc1, //0x00001cbf subq %r8, %r9 - 0x4d, 0x01, 0xc6, //0x00001cc2 addq %r8, %r14 - 0x45, 0x31, 0xdb, //0x00001cc5 xorl %r11d, %r11d - 0x45, 0x31, 0xd2, //0x00001cc8 xorl %r10d, %r10d - 0x45, 0x31, 0xff, //0x00001ccb xorl %r15d, %r15d - 0x31, 0xdb, //0x00001cce xorl %ebx, %ebx - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00001cd0 jmp LBB0_357 - //0x00001cd5 LBB0_356 - 0x48, 0xc1, 0xff, 0x3f, //0x00001cd5 sarq $63, %rdi - 0xf3, 0x48, 0x0f, 0xb8, 0xc6, //0x00001cd9 popcntq %rsi, %rax - 0x49, 0x01, 0xc7, //0x00001cde addq %rax, %r15 - 0x49, 0x83, 0xc6, 0x40, //0x00001ce1 addq $64, %r14 - 0x49, 0x83, 0xc1, 0xc0, //0x00001ce5 addq $-64, %r9 - 0x49, 0x89, 0xfb, //0x00001ce9 movq %rdi, %r11 - //0x00001cec LBB0_357 - 0x49, 0x83, 0xf9, 0x40, //0x00001cec cmpq $64, %r9 - 0x0f, 0x8c, 0x27, 0x01, 0x00, 0x00, //0x00001cf0 jl LBB0_364 - //0x00001cf6 LBB0_358 - 0xc4, 0xc1, 0x7e, 0x6f, 0x0e, //0x00001cf6 vmovdqu (%r14), %ymm1 - 0xc4, 0xc1, 0x7e, 0x6f, 0x46, 0x20, //0x00001cfb vmovdqu $32(%r14), %ymm0 - 0xc5, 0xf5, 0x74, 0xd7, //0x00001d01 vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00001d05 vpmovmskb %ymm2, %edx - 0xc5, 0xfd, 0x74, 0xd7, //0x00001d09 vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001d0d vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001d11 shlq $32, %rax - 0x48, 0x09, 0xc2, //0x00001d15 orq %rax, %rdx - 0x48, 0x89, 0xd0, //0x00001d18 movq %rdx, %rax - 0x4c, 0x09, 0xd0, //0x00001d1b orq %r10, %rax - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001d1e jne LBB0_360 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001d24 movq $-1, %rdx - 0x45, 0x31, 0xd2, //0x00001d2b xorl %r10d, %r10d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001d2e jmp LBB0_361 - //0x00001d33 LBB0_360 - 0x4c, 0x89, 0xd0, //0x00001d33 movq %r10, %rax - 0x48, 0xf7, 0xd0, //0x00001d36 notq %rax - 0x48, 0x21, 0xd0, //0x00001d39 andq %rdx, %rax - 0x48, 0x8d, 0x0c, 0x00, //0x00001d3c leaq (%rax,%rax), %rcx - 0x4c, 0x09, 0xd1, //0x00001d40 orq %r10, %rcx - 0x48, 0x89, 0xce, //0x00001d43 movq %rcx, %rsi - 0x48, 0xf7, 0xd6, //0x00001d46 notq %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001d49 movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfa, //0x00001d53 andq %rdi, %rdx - 0x48, 0x21, 0xf2, //0x00001d56 andq %rsi, %rdx - 0x45, 0x31, 0xd2, //0x00001d59 xorl %r10d, %r10d - 0x48, 0x01, 0xc2, //0x00001d5c addq %rax, %rdx - 0x41, 0x0f, 0x92, 0xc2, //0x00001d5f setb %r10b - 0x48, 0x01, 0xd2, //0x00001d63 addq %rdx, %rdx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001d66 movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc2, //0x00001d70 xorq %rax, %rdx - 0x48, 0x21, 0xca, //0x00001d73 andq %rcx, %rdx - 0x48, 0xf7, 0xd2, //0x00001d76 notq %rdx - //0x00001d79 LBB0_361 - 0xc5, 0xfd, 0x74, 0xd6, //0x00001d79 vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001d7d vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001d81 shlq $32, %rax - 0xc5, 0xf5, 0x74, 0xd6, //0x00001d85 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xca, //0x00001d89 vpmovmskb %ymm2, %ecx - 0x48, 0x09, 0xc1, //0x00001d8d orq %rax, %rcx - 0x48, 0x21, 0xd1, //0x00001d90 andq %rdx, %rcx - 0xc4, 0xe1, 0xf9, 0x6e, 0xd1, //0x00001d93 vmovq %rcx, %xmm2 - 0xc4, 0xe3, 0x69, 0x44, 0x15, 0xfe, 0xe2, 0xff, 0xff, 0x00, //0x00001d98 vpclmulqdq $0, $-7426(%rip), %xmm2, %xmm2 /* LCPI0_26+0(%rip) */ - 0xc4, 0xe1, 0xf9, 0x7e, 0xd7, //0x00001da2 vmovq %xmm2, %rdi - 0x4c, 0x31, 0xdf, //0x00001da7 xorq %r11, %rdi - 0xc5, 0xa5, 0x74, 0xd1, //0x00001daa vpcmpeqb %ymm1, %ymm11, %ymm2 - 0xc5, 0xfd, 0xd7, 0xf2, //0x00001dae vpmovmskb %ymm2, %esi - 0xc5, 0xa5, 0x74, 0xd0, //0x00001db2 vpcmpeqb %ymm0, %ymm11, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00001db6 vpmovmskb %ymm2, %eax - 0x48, 0xc1, 0xe0, 0x20, //0x00001dba shlq $32, %rax - 0x48, 0x09, 0xc6, //0x00001dbe orq %rax, %rsi - 0x48, 0x89, 0xf8, //0x00001dc1 movq %rdi, %rax - 0x48, 0xf7, 0xd0, //0x00001dc4 notq %rax - 0x48, 0x21, 0xc6, //0x00001dc7 andq %rax, %rsi - 0xc5, 0x9d, 0x74, 0xc9, //0x00001dca vpcmpeqb %ymm1, %ymm12, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x00001dce vpmovmskb %ymm1, %edx - 0xc5, 0x9d, 0x74, 0xc0, //0x00001dd2 vpcmpeqb %ymm0, %ymm12, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc8, //0x00001dd6 vpmovmskb %ymm0, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00001dda shlq $32, %rcx - 0x48, 0x09, 0xca, //0x00001dde orq %rcx, %rdx - 0x48, 0x21, 0xc2, //0x00001de1 andq %rax, %rdx - 0x0f, 0x84, 0xeb, 0xfe, 0xff, 0xff, //0x00001de4 je LBB0_356 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001dea .p2align 4, 0x90 - //0x00001df0 LBB0_362 - 0x48, 0x8d, 0x4a, 0xff, //0x00001df0 leaq $-1(%rdx), %rcx - 0x48, 0x89, 0xc8, //0x00001df4 movq %rcx, %rax - 0x48, 0x21, 0xf0, //0x00001df7 andq %rsi, %rax - 0xf3, 0x48, 0x0f, 0xb8, 0xc0, //0x00001dfa popcntq %rax, %rax - 0x4c, 0x01, 0xf8, //0x00001dff addq %r15, %rax - 0x48, 0x39, 0xd8, //0x00001e02 cmpq %rbx, %rax - 0x0f, 0x86, 0x78, 0x01, 0x00, 0x00, //0x00001e05 jbe LBB0_380 + 0x48, 0x8b, 0x44, 0x24, 0x18, //0x000003a0 movq $24(%rsp), %rax + 0x4c, 0x8b, 0x00, //0x000003a5 movq (%rax), %r8 + 0x4c, 0x89, 0xe0, //0x000003a8 movq %r12, %rax + 0x4d, 0x85, 0xc0, //0x000003ab testq %r8, %r8 + 0x0f, 0x85, 0x4c, 0x00, 0x00, 0x00, //0x000003ae jne LBB0_5 + 0xe9, 0x5c, 0x39, 0x00, 0x00, //0x000003b4 jmp LBB0_728 + //0x000003b9 LBB0_1 + 0x4d, 0x29, 0xf0, //0x000003b9 subq %r14, %r8 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x000003bc movq $8(%rsp), %r15 + 0x4d, 0x89, 0x07, //0x000003c1 movq %r8, (%r15) + 0x4c, 0x8b, 0x1c, 0x24, //0x000003c4 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000003c8 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000003cd vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xc6, 0xfe, 0xff, 0xff, //0x000003d2 vmovdqu $-314(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xde, 0xfd, 0xff, 0xff, //0x000003da vmovdqu $-546(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000003e2 vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x000003e6 vmovdqa %ymm1, %ymm12 + //0x000003ea LBB0_2 + 0x4d, 0x85, 0xed, //0x000003ea testq %r13, %r13 + 0x0f, 0x8f, 0xad, 0xff, 0xff, 0xff, //0x000003ed jg LBB0_3 + 0xe9, 0xee, 0x38, 0x00, 0x00, //0x000003f3 jmp LBB0_705 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000003f8 .p2align 4, 0x90 + //0x00000400 LBB0_5 + 0x4c, 0x89, 0xe1, //0x00000400 movq %r12, %rcx + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x00000403 movq $32(%rsp), %rax + 0x4c, 0x8b, 0x30, //0x00000408 movq (%rax), %r14 + 0x48, 0x8b, 0x78, 0x08, //0x0000040b movq $8(%rax), %rdi + 0x49, 0x8b, 0x17, //0x0000040f movq (%r15), %rdx + 0x48, 0x39, 0xfa, //0x00000412 cmpq %rdi, %rdx + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00000415 jae LBB0_10 + 0x41, 0x8a, 0x04, 0x16, //0x0000041b movb (%r14,%rdx), %al + 0x3c, 0x0d, //0x0000041f cmpb $13, %al + 0x0f, 0x84, 0x29, 0x00, 0x00, 0x00, //0x00000421 je LBB0_10 + 0x3c, 0x20, //0x00000427 cmpb $32, %al + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00000429 je LBB0_10 + 0x04, 0xf7, //0x0000042f addb $-9, %al + 0x3c, 0x01, //0x00000431 cmpb $1, %al + 0x0f, 0x86, 0x17, 0x00, 0x00, 0x00, //0x00000433 jbe LBB0_10 + 0x49, 0x89, 0xd4, //0x00000439 movq %rdx, %r12 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x0000043c movq $24(%rsp), %r10 + 0xe9, 0x8c, 0x01, 0x00, 0x00, //0x00000441 jmp LBB0_35 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000446 .p2align 4, 0x90 + //0x00000450 LBB0_10 + 0x4c, 0x8d, 0x62, 0x01, //0x00000450 leaq $1(%rdx), %r12 + 0x49, 0x39, 0xfc, //0x00000454 cmpq %rdi, %r12 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00000457 movq $24(%rsp), %r10 + 0x0f, 0x83, 0x2e, 0x00, 0x00, 0x00, //0x0000045c jae LBB0_14 + 0x43, 0x8a, 0x1c, 0x26, //0x00000462 movb (%r14,%r12), %bl + 0x80, 0xfb, 0x0d, //0x00000466 cmpb $13, %bl + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00000469 je LBB0_14 + 0x80, 0xfb, 0x20, //0x0000046f cmpb $32, %bl + 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x00000472 je LBB0_14 + 0x80, 0xc3, 0xf7, //0x00000478 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x0000047b cmpb $1, %bl + 0x0f, 0x87, 0x4e, 0x01, 0x00, 0x00, //0x0000047e ja LBB0_35 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000484 .p2align 4, 0x90 + //0x00000490 LBB0_14 + 0x4c, 0x8d, 0x62, 0x02, //0x00000490 leaq $2(%rdx), %r12 + 0x49, 0x39, 0xfc, //0x00000494 cmpq %rdi, %r12 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000497 jae LBB0_18 + 0x43, 0x8a, 0x1c, 0x26, //0x0000049d movb (%r14,%r12), %bl + 0x80, 0xfb, 0x0d, //0x000004a1 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000004a4 je LBB0_18 + 0x80, 0xfb, 0x20, //0x000004aa cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000004ad je LBB0_18 + 0x80, 0xc3, 0xf7, //0x000004b3 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000004b6 cmpb $1, %bl + 0x0f, 0x87, 0x13, 0x01, 0x00, 0x00, //0x000004b9 ja LBB0_35 + 0x90, //0x000004bf .p2align 4, 0x90 + //0x000004c0 LBB0_18 + 0x4c, 0x8d, 0x62, 0x03, //0x000004c0 leaq $3(%rdx), %r12 + 0x49, 0x39, 0xfc, //0x000004c4 cmpq %rdi, %r12 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000004c7 jae LBB0_22 + 0x43, 0x8a, 0x1c, 0x26, //0x000004cd movb (%r14,%r12), %bl + 0x80, 0xfb, 0x0d, //0x000004d1 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000004d4 je LBB0_22 + 0x80, 0xfb, 0x20, //0x000004da cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000004dd je LBB0_22 + 0x80, 0xc3, 0xf7, //0x000004e3 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000004e6 cmpb $1, %bl + 0x0f, 0x87, 0xe3, 0x00, 0x00, 0x00, //0x000004e9 ja LBB0_35 + 0x90, //0x000004ef .p2align 4, 0x90 + //0x000004f0 LBB0_22 + 0x4c, 0x8d, 0x62, 0x04, //0x000004f0 leaq $4(%rdx), %r12 + 0x48, 0x89, 0xfe, //0x000004f4 movq %rdi, %rsi + 0x4c, 0x29, 0xe6, //0x000004f7 subq %r12, %rsi + 0x0f, 0x86, 0x9a, 0x37, 0x00, 0x00, //0x000004fa jbe LBB0_697 + 0x48, 0x83, 0xfe, 0x20, //0x00000500 cmpq $32, %rsi + 0x0f, 0x82, 0x3e, 0x25, 0x00, 0x00, //0x00000504 jb LBB0_504 + 0x48, 0xc7, 0xc6, 0xfc, 0xff, 0xff, 0xff, //0x0000050a movq $-4, %rsi + 0x48, 0x29, 0xd6, //0x00000511 subq %rdx, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000514 .p2align 4, 0x90 + //0x00000520 LBB0_25 + 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x26, //0x00000520 vmovdqu (%r14,%r12), %ymm0 + 0xc4, 0xe2, 0x55, 0x00, 0xc8, //0x00000526 vpshufb %ymm0, %ymm5, %ymm1 + 0xc5, 0xfd, 0x74, 0xc1, //0x0000052b vpcmpeqb %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x0000052f vpmovmskb %ymm0, %edx + 0x83, 0xfa, 0xff, //0x00000533 cmpl $-1, %edx + 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x00000536 jne LBB0_34 + 0x49, 0x83, 0xc4, 0x20, //0x0000053c addq $32, %r12 + 0x48, 0x8d, 0x04, 0x37, //0x00000540 leaq (%rdi,%rsi), %rax + 0x48, 0x83, 0xc0, 0xe0, //0x00000544 addq $-32, %rax + 0x48, 0x83, 0xc6, 0xe0, //0x00000548 addq $-32, %rsi + 0x48, 0x83, 0xf8, 0x1f, //0x0000054c cmpq $31, %rax + 0x0f, 0x87, 0xca, 0xff, 0xff, 0xff, //0x00000550 ja LBB0_25 + 0x4d, 0x89, 0xf4, //0x00000556 movq %r14, %r12 + 0x49, 0x29, 0xf4, //0x00000559 subq %rsi, %r12 + 0x48, 0x01, 0xfe, //0x0000055c addq %rdi, %rsi + 0x48, 0x85, 0xf6, //0x0000055f testq %rsi, %rsi + 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00000562 je LBB0_33 + //0x00000568 LBB0_28 + 0x4d, 0x8d, 0x04, 0x34, //0x00000568 leaq (%r12,%rsi), %r8 + 0x31, 0xd2, //0x0000056c xorl %edx, %edx + 0x90, 0x90, //0x0000056e .p2align 4, 0x90 + //0x00000570 LBB0_29 + 0x41, 0x0f, 0xbe, 0x04, 0x14, //0x00000570 movsbl (%r12,%rdx), %eax + 0x83, 0xf8, 0x20, //0x00000575 cmpl $32, %eax + 0x0f, 0x87, 0x23, 0x21, 0x00, 0x00, //0x00000578 ja LBB0_468 + 0x48, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000057e movabsq $4294977024, %rbx + 0x48, 0x0f, 0xa3, 0xc3, //0x00000588 btq %rax, %rbx + 0x0f, 0x83, 0x0f, 0x21, 0x00, 0x00, //0x0000058c jae LBB0_468 + 0x48, 0x83, 0xc2, 0x01, //0x00000592 addq $1, %rdx + 0x48, 0x39, 0xd6, //0x00000596 cmpq %rdx, %rsi + 0x0f, 0x85, 0xd1, 0xff, 0xff, 0xff, //0x00000599 jne LBB0_29 + 0x4d, 0x89, 0xc4, //0x0000059f movq %r8, %r12 + //0x000005a2 LBB0_33 + 0x4d, 0x29, 0xf4, //0x000005a2 subq %r14, %r12 + 0x49, 0x39, 0xfc, //0x000005a5 cmpq %rdi, %r12 + 0x0f, 0x82, 0x24, 0x00, 0x00, 0x00, //0x000005a8 jb LBB0_35 + 0xe9, 0xea, 0x36, 0x00, 0x00, //0x000005ae jmp LBB0_698 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000005b3 .p2align 4, 0x90 + //0x000005c0 LBB0_34 + 0xf7, 0xd2, //0x000005c0 notl %edx + 0x44, 0x0f, 0xbc, 0xe2, //0x000005c2 bsfl %edx, %r12d + 0x49, 0x29, 0xf4, //0x000005c6 subq %rsi, %r12 + 0x49, 0x39, 0xfc, //0x000005c9 cmpq %rdi, %r12 + 0x0f, 0x83, 0xcb, 0x36, 0x00, 0x00, //0x000005cc jae LBB0_698 + //0x000005d2 LBB0_35 + 0x49, 0x8d, 0x44, 0x24, 0x01, //0x000005d2 leaq $1(%r12), %rax + 0x49, 0x89, 0x07, //0x000005d7 movq %rax, (%r15) + 0x43, 0x0f, 0xbe, 0x3c, 0x26, //0x000005da movsbl (%r14,%r12), %edi + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000005df movq $-1, %rax + 0x85, 0xff, //0x000005e6 testl %edi, %edi + 0x0f, 0x84, 0x27, 0x37, 0x00, 0x00, //0x000005e8 je LBB0_728 + 0x49, 0x8b, 0x32, //0x000005ee movq (%r10), %rsi + 0x4c, 0x8d, 0x46, 0xff, //0x000005f1 leaq $-1(%rsi), %r8 + 0x41, 0x8b, 0x1c, 0xf2, //0x000005f5 movl (%r10,%rsi,8), %ebx + 0x48, 0x83, 0xf9, 0xff, //0x000005f9 cmpq $-1, %rcx + 0x4c, 0x0f, 0x45, 0xe1, //0x000005fd cmovneq %rcx, %r12 + 0x83, 0xc3, 0xff, //0x00000601 addl $-1, %ebx + 0x83, 0xfb, 0x05, //0x00000604 cmpl $5, %ebx + 0x0f, 0x87, 0x27, 0x00, 0x00, 0x00, //0x00000607 ja LBB0_41 + 0x48, 0x8d, 0x15, 0xc4, 0x38, 0x00, 0x00, //0x0000060d leaq $14532(%rip), %rdx /* LJTI0_0+0(%rip) */ + 0x48, 0x63, 0x0c, 0x9a, //0x00000614 movslq (%rdx,%rbx,4), %rcx + 0x48, 0x01, 0xd1, //0x00000618 addq %rdx, %rcx + 0xff, 0xe1, //0x0000061b jmpq *%rcx + //0x0000061d LBB0_38 + 0x83, 0xff, 0x2c, //0x0000061d cmpl $44, %edi + 0x0f, 0x84, 0x4e, 0x02, 0x00, 0x00, //0x00000620 je LBB0_76 + 0x83, 0xff, 0x5d, //0x00000626 cmpl $93, %edi + 0x0f, 0x84, 0x31, 0x02, 0x00, 0x00, //0x00000629 je LBB0_40 + 0xe9, 0xda, 0x36, 0x00, 0x00, //0x0000062f jmp LBB0_727 + //0x00000634 LBB0_41 + 0x4d, 0x89, 0x02, //0x00000634 movq %r8, (%r10) + 0x83, 0xff, 0x7b, //0x00000637 cmpl $123, %edi + 0x0f, 0x86, 0xaf, 0x01, 0x00, 0x00, //0x0000063a jbe LBB0_68 + 0xe9, 0xc9, 0x36, 0x00, 0x00, //0x00000640 jmp LBB0_727 + //0x00000645 LBB0_42 + 0x83, 0xff, 0x2c, //0x00000645 cmpl $44, %edi + 0x0f, 0x85, 0x09, 0x02, 0x00, 0x00, //0x00000648 jne LBB0_43 + 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x0000064e cmpq $4095, %rsi + 0x0f, 0x8f, 0x4e, 0x36, 0x00, 0x00, //0x00000655 jg LBB0_724 + 0x48, 0x8d, 0x46, 0x01, //0x0000065b leaq $1(%rsi), %rax + 0x49, 0x89, 0x02, //0x0000065f movq %rax, (%r10) + 0x49, 0xc7, 0x44, 0xf2, 0x08, 0x03, 0x00, 0x00, 0x00, //0x00000662 movq $3, $8(%r10,%rsi,8) + 0xe9, 0x30, 0xfd, 0xff, 0xff, //0x0000066b jmp LBB0_3 + //0x00000670 LBB0_44 + 0x40, 0x80, 0xff, 0x22, //0x00000670 cmpb $34, %dil + 0x0f, 0x85, 0x94, 0x36, 0x00, 0x00, //0x00000674 jne LBB0_727 + 0x49, 0xc7, 0x04, 0xf2, 0x04, 0x00, 0x00, 0x00, //0x0000067a movq $4, (%r10,%rsi,8) + 0x41, 0xf6, 0xc3, 0x40, //0x00000682 testb $64, %r11b + 0x0f, 0x85, 0x4d, 0x03, 0x00, 0x00, //0x00000686 jne LBB0_99 + 0x4d, 0x8b, 0x0f, //0x0000068c movq (%r15), %r9 + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x0000068f movq $32(%rsp), %rax + 0x4c, 0x8b, 0x40, 0x08, //0x00000694 movq $8(%rax), %r8 + 0x41, 0xf6, 0xc3, 0x20, //0x00000698 testb $32, %r11b + 0x0f, 0x85, 0xd6, 0x06, 0x00, 0x00, //0x0000069c jne LBB0_143 + 0x4d, 0x89, 0xc3, //0x000006a2 movq %r8, %r11 + 0x4d, 0x29, 0xcb, //0x000006a5 subq %r9, %r11 + 0x0f, 0x84, 0xd0, 0x37, 0x00, 0x00, //0x000006a8 je LBB0_732 + 0x49, 0x83, 0xfb, 0x40, //0x000006ae cmpq $64, %r11 + 0x0f, 0x82, 0x5e, 0x26, 0x00, 0x00, //0x000006b2 jb LBB0_531 + 0x4c, 0x89, 0xce, //0x000006b8 movq %r9, %rsi + 0x48, 0xf7, 0xd6, //0x000006bb notq %rsi + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000006be movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x000006c5 movq %r9, %rax + 0x45, 0x31, 0xd2, //0x000006c8 xorl %r10d, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000006cb .p2align 4, 0x90 + //0x000006d0 LBB0_50 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x000006d0 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x000006d6 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x000006dd vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x000006e1 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd6, //0x000006e5 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x000006e9 vpmovmskb %ymm2, %ecx + 0xc5, 0xfd, 0x74, 0xc7, //0x000006ed vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf8, //0x000006f1 vpmovmskb %ymm0, %edi + 0xc5, 0xf5, 0x74, 0xc7, //0x000006f5 vpcmpeqb %ymm7, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd8, //0x000006f9 vpmovmskb %ymm0, %ebx + 0x48, 0xc1, 0xe1, 0x20, //0x000006fd shlq $32, %rcx + 0x48, 0x09, 0xca, //0x00000701 orq %rcx, %rdx + 0x48, 0xc1, 0xe3, 0x20, //0x00000704 shlq $32, %rbx + 0x48, 0x09, 0xdf, //0x00000708 orq %rbx, %rdi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000070b jne LBB0_59 + 0x4d, 0x85, 0xd2, //0x00000711 testq %r10, %r10 + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x00000714 jne LBB0_61 + 0x45, 0x31, 0xd2, //0x0000071a xorl %r10d, %r10d + 0x48, 0x85, 0xd2, //0x0000071d testq %rdx, %rdx + 0x0f, 0x85, 0x7e, 0x00, 0x00, 0x00, //0x00000720 jne LBB0_62 + //0x00000726 LBB0_53 + 0x49, 0x83, 0xc3, 0xc0, //0x00000726 addq $-64, %r11 + 0x48, 0x83, 0xc6, 0xc0, //0x0000072a addq $-64, %rsi + 0x48, 0x83, 0xc0, 0x40, //0x0000072e addq $64, %rax + 0x49, 0x83, 0xfb, 0x3f, //0x00000732 cmpq $63, %r11 + 0x0f, 0x87, 0x94, 0xff, 0xff, 0xff, //0x00000736 ja LBB0_50 + 0xe9, 0x0b, 0x22, 0x00, 0x00, //0x0000073c jmp LBB0_54 + //0x00000741 LBB0_59 + 0x49, 0x83, 0xff, 0xff, //0x00000741 cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00000745 jne LBB0_61 + 0x4c, 0x0f, 0xbc, 0xff, //0x0000074b bsfq %rdi, %r15 + 0x49, 0x01, 0xc7, //0x0000074f addq %rax, %r15 + //0x00000752 LBB0_61 + 0x4c, 0x89, 0xd1, //0x00000752 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00000755 notq %rcx + 0x48, 0x21, 0xf9, //0x00000758 andq %rdi, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x0000075b leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xd5, //0x0000075f orq %r10, %r13 + 0x4c, 0x89, 0xeb, //0x00000762 movq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00000765 notq %rbx + 0x48, 0x21, 0xfb, //0x00000768 andq %rdi, %rbx + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000076b movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfb, //0x00000775 andq %rdi, %rbx + 0x45, 0x31, 0xd2, //0x00000778 xorl %r10d, %r10d + 0x48, 0x01, 0xcb, //0x0000077b addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc2, //0x0000077e setb %r10b + 0x48, 0x01, 0xdb, //0x00000782 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000785 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x0000078f xorq %rcx, %rbx + 0x4c, 0x21, 0xeb, //0x00000792 andq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00000795 notq %rbx + 0x48, 0x21, 0xda, //0x00000798 andq %rbx, %rdx + 0x48, 0x85, 0xd2, //0x0000079b testq %rdx, %rdx + 0x0f, 0x84, 0x82, 0xff, 0xff, 0xff, //0x0000079e je LBB0_53 + //0x000007a4 LBB0_62 + 0x48, 0x0f, 0xbc, 0xc2, //0x000007a4 bsfq %rdx, %rax + 0x48, 0x29, 0xf0, //0x000007a8 subq %rsi, %rax + //0x000007ab LBB0_63 + 0x4c, 0x8b, 0x1c, 0x24, //0x000007ab movq (%rsp), %r11 + 0x48, 0x85, 0xc0, //0x000007af testq %rax, %rax + 0x0f, 0x89, 0xd4, 0xfb, 0xff, 0xff, //0x000007b2 jns LBB0_237 + 0xe9, 0x04, 0x35, 0x00, 0x00, //0x000007b8 jmp LBB0_702 + //0x000007bd LBB0_64 + 0x40, 0x80, 0xff, 0x3a, //0x000007bd cmpb $58, %dil + 0x0f, 0x85, 0x47, 0x35, 0x00, 0x00, //0x000007c1 jne LBB0_727 + 0x49, 0xc7, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x00, //0x000007c7 movq $0, (%r10,%rsi,8) + 0xe9, 0xcc, 0xfb, 0xff, 0xff, //0x000007cf jmp LBB0_3 + //0x000007d4 LBB0_66 + 0x40, 0x80, 0xff, 0x5d, //0x000007d4 cmpb $93, %dil + 0x0f, 0x84, 0x82, 0x00, 0x00, 0x00, //0x000007d8 je LBB0_40 + 0x49, 0xc7, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x00, //0x000007de movq $1, (%r10,%rsi,8) + 0x83, 0xff, 0x7b, //0x000007e6 cmpl $123, %edi + 0x0f, 0x87, 0x1f, 0x35, 0x00, 0x00, //0x000007e9 ja LBB0_727 + //0x000007ef LBB0_68 + 0x89, 0xf9, //0x000007ef movl %edi, %ecx + 0x48, 0x8d, 0x15, 0xf8, 0x36, 0x00, 0x00, //0x000007f1 leaq $14072(%rip), %rdx /* LJTI0_1+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8a, //0x000007f8 movslq (%rdx,%rcx,4), %rcx + 0x48, 0x01, 0xd1, //0x000007fc addq %rdx, %rcx + 0xff, 0xe1, //0x000007ff jmpq *%rcx + //0x00000801 LBB0_71 + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x00000801 movq $32(%rsp), %rax + 0x4c, 0x8b, 0x48, 0x08, //0x00000806 movq $8(%rax), %r9 + 0x4d, 0x8b, 0x2f, //0x0000080a movq (%r15), %r13 + 0x41, 0xf6, 0xc3, 0x40, //0x0000080d testb $64, %r11b + 0x0f, 0x85, 0xac, 0x02, 0x00, 0x00, //0x00000811 jne LBB0_111 + 0x49, 0x8d, 0x45, 0xff, //0x00000817 leaq $-1(%r13), %rax + 0x49, 0x29, 0xc1, //0x0000081b subq %rax, %r9 + 0x0f, 0x84, 0xce, 0x34, 0x00, 0x00, //0x0000081e je LBB0_706 + 0x4f, 0x8d, 0x04, 0x2e, //0x00000824 leaq (%r14,%r13), %r8 + 0x49, 0x83, 0xc0, 0xff, //0x00000828 addq $-1, %r8 + 0x41, 0x80, 0x38, 0x30, //0x0000082c cmpb $48, (%r8) + 0x0f, 0x85, 0x0a, 0x08, 0x00, 0x00, //0x00000830 jne LBB0_184 + 0x41, 0xba, 0x01, 0x00, 0x00, 0x00, //0x00000836 movl $1, %r10d + 0x49, 0x83, 0xf9, 0x01, //0x0000083c cmpq $1, %r9 + 0x0f, 0x85, 0xd0, 0x07, 0x00, 0x00, //0x00000840 jne LBB0_182 + //0x00000846 LBB0_75 + 0x48, 0x89, 0xc1, //0x00000846 movq %rax, %rcx + 0xe9, 0xe0, 0x0f, 0x00, 0x00, //0x00000849 jmp LBB0_296 + //0x0000084e LBB0_69 + 0x83, 0xff, 0x22, //0x0000084e cmpl $34, %edi + 0x0f, 0x84, 0x3f, 0x00, 0x00, 0x00, //0x00000851 je LBB0_80 + //0x00000857 LBB0_43 + 0x83, 0xff, 0x7d, //0x00000857 cmpl $125, %edi + 0x0f, 0x85, 0xae, 0x34, 0x00, 0x00, //0x0000085a jne LBB0_727 + //0x00000860 LBB0_40 + 0x4d, 0x89, 0x02, //0x00000860 movq %r8, (%r10) + 0x4c, 0x89, 0xe0, //0x00000863 movq %r12, %rax + 0x4d, 0x85, 0xc0, //0x00000866 testq %r8, %r8 + 0x0f, 0x85, 0x91, 0xfb, 0xff, 0xff, //0x00000869 jne LBB0_5 + 0xe9, 0xa1, 0x34, 0x00, 0x00, //0x0000086f jmp LBB0_728 + //0x00000874 LBB0_76 + 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00000874 cmpq $4095, %rsi + 0x0f, 0x8f, 0x28, 0x34, 0x00, 0x00, //0x0000087b jg LBB0_724 + 0x48, 0x8d, 0x46, 0x01, //0x00000881 leaq $1(%rsi), %rax + 0x49, 0x89, 0x02, //0x00000885 movq %rax, (%r10) + 0x49, 0xc7, 0x44, 0xf2, 0x08, 0x00, 0x00, 0x00, 0x00, //0x00000888 movq $0, $8(%r10,%rsi,8) + 0xe9, 0x0a, 0xfb, 0xff, 0xff, //0x00000891 jmp LBB0_3 + //0x00000896 LBB0_80 + 0x49, 0xc7, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x00, //0x00000896 movq $2, (%r10,%rsi,8) + 0x41, 0xf6, 0xc3, 0x40, //0x0000089e testb $64, %r11b + 0x0f, 0x85, 0xdd, 0x03, 0x00, 0x00, //0x000008a2 jne LBB0_132 + 0x4d, 0x8b, 0x0f, //0x000008a8 movq (%r15), %r9 + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x000008ab movq $32(%rsp), %rax + 0x4c, 0x8b, 0x40, 0x08, //0x000008b0 movq $8(%rax), %r8 + 0x41, 0xf6, 0xc3, 0x20, //0x000008b4 testb $32, %r11b + 0x0f, 0x85, 0x03, 0x06, 0x00, 0x00, //0x000008b8 jne LBB0_163 + 0x4d, 0x89, 0xc3, //0x000008be movq %r8, %r11 + 0x4d, 0x29, 0xcb, //0x000008c1 subq %r9, %r11 + 0x0f, 0x84, 0xb4, 0x35, 0x00, 0x00, //0x000008c4 je LBB0_732 + 0x49, 0x83, 0xfb, 0x40, //0x000008ca cmpq $64, %r11 + 0x0f, 0x82, 0x92, 0x24, 0x00, 0x00, //0x000008ce jb LBB0_536 + 0x4c, 0x89, 0xce, //0x000008d4 movq %r9, %rsi + 0x48, 0xf7, 0xd6, //0x000008d7 notq %rsi + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000008da movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x000008e1 movq %r9, %rax + 0x45, 0x31, 0xd2, //0x000008e4 xorl %r10d, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000008e7 .p2align 4, 0x90 + //0x000008f0 LBB0_85 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x000008f0 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x000008f6 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x000008fd vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00000901 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd6, //0x00000905 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x00000909 vpmovmskb %ymm2, %ebx + 0xc5, 0xfd, 0x74, 0xc7, //0x0000090d vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf8, //0x00000911 vpmovmskb %ymm0, %edi + 0xc5, 0xf5, 0x74, 0xc7, //0x00000915 vpcmpeqb %ymm7, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x00000919 vpmovmskb %ymm0, %ecx + 0x48, 0xc1, 0xe3, 0x20, //0x0000091d shlq $32, %rbx + 0x48, 0x09, 0xda, //0x00000921 orq %rbx, %rdx + 0x48, 0xc1, 0xe1, 0x20, //0x00000924 shlq $32, %rcx + 0x48, 0x09, 0xcf, //0x00000928 orq %rcx, %rdi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000092b jne LBB0_94 + 0x4d, 0x85, 0xd2, //0x00000931 testq %r10, %r10 + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x00000934 jne LBB0_96 + 0x45, 0x31, 0xd2, //0x0000093a xorl %r10d, %r10d + 0x48, 0x85, 0xd2, //0x0000093d testq %rdx, %rdx + 0x0f, 0x85, 0x7e, 0x00, 0x00, 0x00, //0x00000940 jne LBB0_97 + //0x00000946 LBB0_88 + 0x49, 0x83, 0xc3, 0xc0, //0x00000946 addq $-64, %r11 + 0x48, 0x83, 0xc6, 0xc0, //0x0000094a addq $-64, %rsi + 0x48, 0x83, 0xc0, 0x40, //0x0000094e addq $64, %rax + 0x49, 0x83, 0xfb, 0x3f, //0x00000952 cmpq $63, %r11 + 0x0f, 0x87, 0x94, 0xff, 0xff, 0xff, //0x00000956 ja LBB0_85 + 0xe9, 0xf8, 0x20, 0x00, 0x00, //0x0000095c jmp LBB0_89 + //0x00000961 LBB0_94 + 0x49, 0x83, 0xff, 0xff, //0x00000961 cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00000965 jne LBB0_96 + 0x4c, 0x0f, 0xbc, 0xff, //0x0000096b bsfq %rdi, %r15 + 0x49, 0x01, 0xc7, //0x0000096f addq %rax, %r15 + //0x00000972 LBB0_96 + 0x4c, 0x89, 0xd1, //0x00000972 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00000975 notq %rcx + 0x48, 0x21, 0xf9, //0x00000978 andq %rdi, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x0000097b leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xd5, //0x0000097f orq %r10, %r13 + 0x4c, 0x89, 0xeb, //0x00000982 movq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00000985 notq %rbx + 0x48, 0x21, 0xfb, //0x00000988 andq %rdi, %rbx + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000098b movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfb, //0x00000995 andq %rdi, %rbx + 0x45, 0x31, 0xd2, //0x00000998 xorl %r10d, %r10d + 0x48, 0x01, 0xcb, //0x0000099b addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc2, //0x0000099e setb %r10b + 0x48, 0x01, 0xdb, //0x000009a2 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000009a5 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x000009af xorq %rcx, %rbx + 0x4c, 0x21, 0xeb, //0x000009b2 andq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x000009b5 notq %rbx + 0x48, 0x21, 0xda, //0x000009b8 andq %rbx, %rdx + 0x48, 0x85, 0xd2, //0x000009bb testq %rdx, %rdx + 0x0f, 0x84, 0x82, 0xff, 0xff, 0xff, //0x000009be je LBB0_88 + //0x000009c4 LBB0_97 + 0x48, 0x0f, 0xbc, 0xc2, //0x000009c4 bsfq %rdx, %rax + 0x48, 0x29, 0xf0, //0x000009c8 subq %rsi, %rax + //0x000009cb LBB0_98 + 0x4c, 0x8b, 0x1c, 0x24, //0x000009cb movq (%rsp), %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000009cf movq $24(%rsp), %r10 + 0xe9, 0xb5, 0x0e, 0x00, 0x00, //0x000009d4 jmp LBB0_302 + //0x000009d9 LBB0_99 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x000009d9 movq $32(%rsp), %rcx + 0x4c, 0x8b, 0x51, 0x08, //0x000009de movq $8(%rcx), %r10 + 0x4d, 0x8b, 0x07, //0x000009e2 movq (%r15), %r8 + 0x4f, 0x8d, 0x0c, 0x06, //0x000009e5 leaq (%r14,%r8), %r9 + 0x4d, 0x29, 0xc2, //0x000009e9 subq %r8, %r10 + 0x49, 0x83, 0xfa, 0x20, //0x000009ec cmpq $32, %r10 + 0x0f, 0x8c, 0x21, 0x1d, 0x00, 0x00, //0x000009f0 jl LBB0_110 + 0xba, 0x20, 0x00, 0x00, 0x00, //0x000009f6 movl $32, %edx + 0x31, 0xf6, //0x000009fb xorl %esi, %esi + 0x45, 0x31, 0xff, //0x000009fd xorl %r15d, %r15d + 0xe9, 0x62, 0x00, 0x00, 0x00, //0x00000a00 jmp LBB0_101 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000a05 .p2align 4, 0x90 + //0x00000a10 LBB0_106 + 0x44, 0x89, 0xf9, //0x00000a10 movl %r15d, %ecx + 0xf7, 0xd1, //0x00000a13 notl %ecx + 0x21, 0xd9, //0x00000a15 andl %ebx, %ecx + 0x44, 0x8d, 0x2c, 0x09, //0x00000a17 leal (%rcx,%rcx), %r13d + 0x45, 0x09, 0xfd, //0x00000a1b orl %r15d, %r13d + 0x44, 0x89, 0xef, //0x00000a1e movl %r13d, %edi + 0xf7, 0xd7, //0x00000a21 notl %edi + 0x21, 0xdf, //0x00000a23 andl %ebx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000a25 andl $-1431655766, %edi + 0x45, 0x31, 0xff, //0x00000a2b xorl %r15d, %r15d + 0x01, 0xcf, //0x00000a2e addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc7, //0x00000a30 setb %r15b + 0x01, 0xff, //0x00000a34 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00000a36 xorl $1431655765, %edi + 0x44, 0x21, 0xef, //0x00000a3c andl %r13d, %edi + 0xf7, 0xd7, //0x00000a3f notl %edi + 0x41, 0x21, 0xfb, //0x00000a41 andl %edi, %r11d + 0x4d, 0x85, 0xdb, //0x00000a44 testq %r11, %r11 + 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x00000a47 jne LBB0_104 + //0x00000a4d LBB0_107 + 0x48, 0x83, 0xc6, 0x20, //0x00000a4d addq $32, %rsi + 0x49, 0x8d, 0x0c, 0x12, //0x00000a51 leaq (%r10,%rdx), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00000a55 addq $-32, %rcx + 0x48, 0x83, 0xc2, 0xe0, //0x00000a59 addq $-32, %rdx + 0x48, 0x83, 0xf9, 0x3f, //0x00000a5d cmpq $63, %rcx + 0x0f, 0x8e, 0x98, 0x1c, 0x00, 0x00, //0x00000a61 jle LBB0_108 + //0x00000a67 LBB0_101 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00000a67 vmovdqu (%r9,%rsi), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00000a6d vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd9, //0x00000a71 vpmovmskb %ymm1, %r11d + 0xc5, 0xfd, 0x74, 0xc7, //0x00000a75 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd8, //0x00000a79 vpmovmskb %ymm0, %ebx + 0x85, 0xdb, //0x00000a7d testl %ebx, %ebx + 0x0f, 0x85, 0x8b, 0xff, 0xff, 0xff, //0x00000a7f jne LBB0_106 + 0x4d, 0x85, 0xff, //0x00000a85 testq %r15, %r15 + 0x0f, 0x85, 0x82, 0xff, 0xff, 0xff, //0x00000a88 jne LBB0_106 + 0x45, 0x31, 0xff, //0x00000a8e xorl %r15d, %r15d + 0x4d, 0x85, 0xdb, //0x00000a91 testq %r11, %r11 + 0x0f, 0x84, 0xb3, 0xff, 0xff, 0xff, //0x00000a94 je LBB0_107 + //0x00000a9a LBB0_104 + 0x41, 0x0f, 0xbc, 0xc3, //0x00000a9a bsfl %r11d, %eax + 0x4c, 0x01, 0xc0, //0x00000a9e addq %r8, %rax + 0x4c, 0x8d, 0x0c, 0x06, //0x00000aa1 leaq (%rsi,%rax), %r9 + 0x49, 0x83, 0xc1, 0x01, //0x00000aa5 addq $1, %r9 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00000aa9 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00000aae movq (%rsp), %r11 + //0x00000ab2 LBB0_105 + 0x4d, 0x89, 0x0f, //0x00000ab2 movq %r9, (%r15) + //0x00000ab5 LBB0_387 + 0x4d, 0x85, 0xc0, //0x00000ab5 testq %r8, %r8 + 0x0f, 0x8f, 0xe2, 0xf8, 0xff, 0xff, //0x00000ab8 jg LBB0_3 + 0xe9, 0xf2, 0x31, 0x00, 0x00, //0x00000abe jmp LBB0_700 + //0x00000ac3 LBB0_111 + 0x4c, 0x89, 0xcf, //0x00000ac3 movq %r9, %rdi + 0x4c, 0x29, 0xef, //0x00000ac6 subq %r13, %rdi + 0x48, 0x83, 0xff, 0x20, //0x00000ac9 cmpq $32, %rdi + 0x0f, 0x82, 0xe4, 0x21, 0x00, 0x00, //0x00000acd jb LBB0_526 + 0x4c, 0x89, 0xef, //0x00000ad3 movq %r13, %rdi + 0x48, 0xf7, 0xdf, //0x00000ad6 negq %rdi + 0x49, 0x8d, 0x4d, 0x01, //0x00000ad9 leaq $1(%r13), %rcx + 0x49, 0x8d, 0x55, 0xff, //0x00000add leaq $-1(%r13), %rdx + 0x4b, 0x8d, 0x34, 0x2e, //0x00000ae1 leaq (%r14,%r13), %rsi + 0x48, 0x83, 0xc6, 0xff, //0x00000ae5 addq $-1, %rsi + 0x4c, 0x89, 0xeb, //0x00000ae9 movq %r13, %rbx + 0x90, 0x90, 0x90, 0x90, //0x00000aec .p2align 4, 0x90 + //0x00000af0 LBB0_113 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x1e, //0x00000af0 vmovdqu (%r14,%rbx), %ymm0 + 0xc5, 0xfd, 0x74, 0xcb, //0x00000af6 vpcmpeqb %ymm3, %ymm0, %ymm1 + 0xc5, 0x8d, 0xdb, 0xc0, //0x00000afa vpand %ymm0, %ymm14, %ymm0 + 0xc5, 0xfd, 0x74, 0x05, 0x9a, 0xf6, 0xff, 0xff, //0x00000afe vpcmpeqb $-2406(%rip), %ymm0, %ymm0 /* LCPI0_8+0(%rip) */ + 0xc5, 0xfd, 0xeb, 0xc1, //0x00000b06 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc0, //0x00000b0a vpmovmskb %ymm0, %eax + 0x85, 0xc0, //0x00000b0e testl %eax, %eax + 0x0f, 0x85, 0x09, 0x01, 0x00, 0x00, //0x00000b10 jne LBB0_127 + 0x48, 0x83, 0xc3, 0x20, //0x00000b16 addq $32, %rbx + 0x49, 0x8d, 0x04, 0x39, //0x00000b1a leaq (%r9,%rdi), %rax + 0x48, 0x83, 0xc0, 0xe0, //0x00000b1e addq $-32, %rax + 0x48, 0x83, 0xc7, 0xe0, //0x00000b22 addq $-32, %rdi + 0x48, 0x83, 0xc1, 0x20, //0x00000b26 addq $32, %rcx + 0x48, 0x83, 0xc2, 0x20, //0x00000b2a addq $32, %rdx + 0x48, 0x83, 0xc6, 0x20, //0x00000b2e addq $32, %rsi + 0x48, 0x83, 0xf8, 0x1f, //0x00000b32 cmpq $31, %rax + 0x0f, 0x87, 0xb4, 0xff, 0xff, 0xff, //0x00000b36 ja LBB0_113 + 0x4d, 0x89, 0xf0, //0x00000b3c movq %r14, %r8 + 0x49, 0x29, 0xf8, //0x00000b3f subq %rdi, %r8 + 0x49, 0x01, 0xf9, //0x00000b42 addq %rdi, %r9 + 0x4c, 0x89, 0xcf, //0x00000b45 movq %r9, %rdi + 0x48, 0x83, 0xff, 0x10, //0x00000b48 cmpq $16, %rdi + 0x0f, 0x82, 0x69, 0x00, 0x00, 0x00, //0x00000b4c jb LBB0_119 + //0x00000b52 LBB0_116 + 0x4d, 0x89, 0xf1, //0x00000b52 movq %r14, %r9 + 0x4d, 0x29, 0xc1, //0x00000b55 subq %r8, %r9 + 0x4c, 0x89, 0xc1, //0x00000b58 movq %r8, %rcx + 0x4c, 0x29, 0xf1, //0x00000b5b subq %r14, %rcx + 0x48, 0x83, 0xc1, 0x01, //0x00000b5e addq $1, %rcx + 0x49, 0x8d, 0x50, 0xff, //0x00000b62 leaq $-1(%r8), %rdx + 0x48, 0x89, 0xd6, //0x00000b66 movq %rdx, %rsi + 0x4c, 0x29, 0xf6, //0x00000b69 subq %r14, %rsi + //0x00000b6c LBB0_117 + 0xc4, 0xc1, 0x7a, 0x6f, 0x00, //0x00000b6c vmovdqu (%r8), %xmm0 + 0xc5, 0xf9, 0x74, 0x0d, 0x97, 0xf4, 0xff, 0xff, //0x00000b71 vpcmpeqb $-2921(%rip), %xmm0, %xmm1 /* LCPI0_11+0(%rip) */ + 0xc5, 0xf9, 0xdb, 0x05, 0x9f, 0xf4, 0xff, 0xff, //0x00000b79 vpand $-2913(%rip), %xmm0, %xmm0 /* LCPI0_12+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0xa7, 0xf4, 0xff, 0xff, //0x00000b81 vpcmpeqb $-2905(%rip), %xmm0, %xmm0 /* LCPI0_13+0(%rip) */ + 0xc5, 0xf9, 0xeb, 0xc1, //0x00000b89 vpor %xmm1, %xmm0, %xmm0 + 0xc5, 0xf9, 0xd7, 0xd8, //0x00000b8d vpmovmskb %xmm0, %ebx + 0x85, 0xdb, //0x00000b91 testl %ebx, %ebx + 0x0f, 0x85, 0x9e, 0x1b, 0x00, 0x00, //0x00000b93 jne LBB0_478 + 0x49, 0x83, 0xc0, 0x10, //0x00000b99 addq $16, %r8 + 0x48, 0x83, 0xc7, 0xf0, //0x00000b9d addq $-16, %rdi + 0x49, 0x83, 0xc1, 0xf0, //0x00000ba1 addq $-16, %r9 + 0x48, 0x83, 0xc1, 0x10, //0x00000ba5 addq $16, %rcx + 0x48, 0x83, 0xc6, 0x10, //0x00000ba9 addq $16, %rsi + 0x48, 0x83, 0xc2, 0x10, //0x00000bad addq $16, %rdx + 0x48, 0x83, 0xff, 0x0f, //0x00000bb1 cmpq $15, %rdi + 0x0f, 0x87, 0xb1, 0xff, 0xff, 0xff, //0x00000bb5 ja LBB0_117 + //0x00000bbb LBB0_119 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00000bbb vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00000bbf vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00000bc3 vmovdqa %ymm13, %ymm11 + 0x48, 0x85, 0xff, //0x00000bc8 testq %rdi, %rdi + 0x0f, 0x84, 0xe8, 0xf7, 0xff, 0xff, //0x00000bcb je LBB0_1 + 0x49, 0x8d, 0x0c, 0x38, //0x00000bd1 leaq (%r8,%rdi), %rcx + 0x48, 0xb8, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00000bd5 movabsq $17596481021440, %rax + //0x00000bdf LBB0_121 + 0x41, 0x0f, 0xb6, 0x10, //0x00000bdf movzbl (%r8), %edx + 0x48, 0x83, 0xfa, 0x2c, //0x00000be3 cmpq $44, %rdx + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x00000be7 ja LBB0_123 + 0x48, 0x0f, 0xa3, 0xd0, //0x00000bed btq %rdx, %rax + 0x0f, 0x82, 0xc2, 0xf7, 0xff, 0xff, //0x00000bf1 jb LBB0_1 + //0x00000bf7 LBB0_123 + 0x80, 0xfa, 0x5d, //0x00000bf7 cmpb $93, %dl + 0x0f, 0x84, 0xb9, 0xf7, 0xff, 0xff, //0x00000bfa je LBB0_1 + 0x80, 0xfa, 0x7d, //0x00000c00 cmpb $125, %dl + 0x0f, 0x84, 0xb0, 0xf7, 0xff, 0xff, //0x00000c03 je LBB0_1 + 0x49, 0x83, 0xc0, 0x01, //0x00000c09 addq $1, %r8 + 0x48, 0x83, 0xc7, 0xff, //0x00000c0d addq $-1, %rdi + 0x0f, 0x85, 0xc8, 0xff, 0xff, 0xff, //0x00000c11 jne LBB0_121 + 0x49, 0x89, 0xc8, //0x00000c17 movq %rcx, %r8 + 0xe9, 0x9a, 0xf7, 0xff, 0xff, //0x00000c1a jmp LBB0_1 + //0x00000c1f LBB0_127 + 0x0f, 0xbc, 0xd8, //0x00000c1f bsfl %eax, %ebx + 0x48, 0x89, 0xd8, //0x00000c22 movq %rbx, %rax + 0x48, 0x29, 0xf8, //0x00000c25 subq %rdi, %rax + 0x49, 0x89, 0x07, //0x00000c28 movq %rax, (%r15) + 0x48, 0x85, 0xc0, //0x00000c2b testq %rax, %rax + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000c2e movabsq $4294977024, %rdi + 0x0f, 0x8e, 0xac, 0xf7, 0xff, 0xff, //0x00000c38 jle LBB0_2 + 0x48, 0x01, 0xd9, //0x00000c3e addq %rbx, %rcx + 0x48, 0x01, 0xda, //0x00000c41 addq %rbx, %rdx + 0x48, 0x01, 0xde, //0x00000c44 addq %rbx, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000c47 .p2align 4, 0x90 + //0x00000c50 LBB0_129 + 0x0f, 0xb6, 0x06, //0x00000c50 movzbl (%rsi), %eax + 0x48, 0x83, 0xf8, 0x20, //0x00000c53 cmpq $32, %rax + 0x0f, 0x87, 0x8d, 0xf7, 0xff, 0xff, //0x00000c57 ja LBB0_2 + 0x48, 0x0f, 0xa3, 0xc7, //0x00000c5d btq %rax, %rdi + 0x0f, 0x83, 0x83, 0xf7, 0xff, 0xff, //0x00000c61 jae LBB0_2 + 0x49, 0x89, 0x17, //0x00000c67 movq %rdx, (%r15) + 0x48, 0x83, 0xc1, 0xff, //0x00000c6a addq $-1, %rcx + 0x48, 0x83, 0xc2, 0xff, //0x00000c6e addq $-1, %rdx + 0x48, 0x83, 0xc6, 0xff, //0x00000c72 addq $-1, %rsi + 0x48, 0x83, 0xf9, 0x01, //0x00000c76 cmpq $1, %rcx + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x00000c7a jg LBB0_129 + 0xe9, 0x65, 0xf7, 0xff, 0xff, //0x00000c80 jmp LBB0_2 + //0x00000c85 LBB0_132 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00000c85 movq $32(%rsp), %rcx + 0x4c, 0x8b, 0x51, 0x08, //0x00000c8a movq $8(%rcx), %r10 + 0x4d, 0x8b, 0x07, //0x00000c8e movq (%r15), %r8 + 0x4f, 0x8d, 0x0c, 0x06, //0x00000c91 leaq (%r14,%r8), %r9 + 0x4d, 0x29, 0xc2, //0x00000c95 subq %r8, %r10 + 0x49, 0x83, 0xfa, 0x20, //0x00000c98 cmpq $32, %r10 + 0x0f, 0x8c, 0x9c, 0x1c, 0x00, 0x00, //0x00000c9c jl LBB0_142 + 0xba, 0x20, 0x00, 0x00, 0x00, //0x00000ca2 movl $32, %edx + 0x31, 0xf6, //0x00000ca7 xorl %esi, %esi + 0x45, 0x31, 0xff, //0x00000ca9 xorl %r15d, %r15d + 0xe9, 0x66, 0x00, 0x00, 0x00, //0x00000cac jmp LBB0_134 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000cb1 .p2align 4, 0x90 + //0x00000cc0 LBB0_138 + 0x44, 0x89, 0xf9, //0x00000cc0 movl %r15d, %ecx + 0xf7, 0xd1, //0x00000cc3 notl %ecx + 0x21, 0xd9, //0x00000cc5 andl %ebx, %ecx + 0x44, 0x8d, 0x2c, 0x09, //0x00000cc7 leal (%rcx,%rcx), %r13d + 0x45, 0x09, 0xfd, //0x00000ccb orl %r15d, %r13d + 0x44, 0x89, 0xef, //0x00000cce movl %r13d, %edi + 0xf7, 0xd7, //0x00000cd1 notl %edi + 0x21, 0xdf, //0x00000cd3 andl %ebx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000cd5 andl $-1431655766, %edi + 0x45, 0x31, 0xff, //0x00000cdb xorl %r15d, %r15d + 0x01, 0xcf, //0x00000cde addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc7, //0x00000ce0 setb %r15b + 0x01, 0xff, //0x00000ce4 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00000ce6 xorl $1431655765, %edi + 0x44, 0x21, 0xef, //0x00000cec andl %r13d, %edi + 0xf7, 0xd7, //0x00000cef notl %edi + 0x41, 0x21, 0xfb, //0x00000cf1 andl %edi, %r11d + 0x4d, 0x85, 0xdb, //0x00000cf4 testq %r11, %r11 + 0x0f, 0x85, 0x4d, 0x00, 0x00, 0x00, //0x00000cf7 jne LBB0_137 + //0x00000cfd LBB0_139 + 0x48, 0x83, 0xc6, 0x20, //0x00000cfd addq $32, %rsi + 0x49, 0x8d, 0x0c, 0x12, //0x00000d01 leaq (%r10,%rdx), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00000d05 addq $-32, %rcx + 0x48, 0x83, 0xc2, 0xe0, //0x00000d09 addq $-32, %rdx + 0x48, 0x83, 0xf9, 0x3f, //0x00000d0d cmpq $63, %rcx + 0x0f, 0x8e, 0x0f, 0x1c, 0x00, 0x00, //0x00000d11 jle LBB0_140 + //0x00000d17 LBB0_134 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00000d17 vmovdqu (%r9,%rsi), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00000d1d vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd9, //0x00000d21 vpmovmskb %ymm1, %r11d + 0xc5, 0xfd, 0x74, 0xc7, //0x00000d25 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd8, //0x00000d29 vpmovmskb %ymm0, %ebx + 0x85, 0xdb, //0x00000d2d testl %ebx, %ebx + 0x0f, 0x85, 0x8b, 0xff, 0xff, 0xff, //0x00000d2f jne LBB0_138 + 0x4d, 0x85, 0xff, //0x00000d35 testq %r15, %r15 + 0x0f, 0x85, 0x82, 0xff, 0xff, 0xff, //0x00000d38 jne LBB0_138 + 0x45, 0x31, 0xff, //0x00000d3e xorl %r15d, %r15d + 0x4d, 0x85, 0xdb, //0x00000d41 testq %r11, %r11 + 0x0f, 0x84, 0xb3, 0xff, 0xff, 0xff, //0x00000d44 je LBB0_139 + //0x00000d4a LBB0_137 + 0x41, 0x0f, 0xbc, 0xc3, //0x00000d4a bsfl %r11d, %eax + 0x4c, 0x01, 0xc0, //0x00000d4e addq %r8, %rax + 0x4c, 0x8d, 0x0c, 0x06, //0x00000d51 leaq (%rsi,%rax), %r9 + 0x49, 0x83, 0xc1, 0x01, //0x00000d55 addq $1, %r9 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00000d59 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00000d5e movq (%rsp), %r11 + 0x4d, 0x89, 0x0f, //0x00000d62 movq %r9, (%r15) + 0x4d, 0x85, 0xc0, //0x00000d65 testq %r8, %r8 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00000d68 movq $24(%rsp), %r10 + 0x0f, 0x8f, 0x35, 0x0b, 0x00, 0x00, //0x00000d6d jg LBB0_304 + 0xe9, 0x3d, 0x2f, 0x00, 0x00, //0x00000d73 jmp LBB0_700 + //0x00000d78 LBB0_143 + 0x4d, 0x89, 0xc5, //0x00000d78 movq %r8, %r13 + 0x4d, 0x29, 0xcd, //0x00000d7b subq %r9, %r13 + 0x0f, 0x84, 0xfa, 0x30, 0x00, 0x00, //0x00000d7e je LBB0_732 + 0x49, 0x83, 0xfd, 0x40, //0x00000d84 cmpq $64, %r13 + 0x0f, 0x82, 0xa5, 0x1f, 0x00, 0x00, //0x00000d88 jb LBB0_532 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00000d8e movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x00000d95 movq %r9, %rax + 0x45, 0x31, 0xdb, //0x00000d98 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000d9b .p2align 4, 0x90 + //0x00000da0 LBB0_146 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x00000da0 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x00000da6 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x00000dad vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x00000db1 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0x74, 0xd6, //0x00000db5 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00000db9 vpmovmskb %ymm2, %ecx + 0xc5, 0xfd, 0x74, 0xd7, //0x00000dbd vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00000dc1 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd7, //0x00000dc5 vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x00000dc9 vpmovmskb %ymm2, %ebx + 0xc5, 0xbd, 0x64, 0xd1, //0x00000dcd vpcmpgtb %ymm1, %ymm8, %ymm2 + 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00000dd1 vpcmpgtb %ymm9, %ymm1, %ymm1 + 0xc5, 0xed, 0xdb, 0xc9, //0x00000dd6 vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf1, //0x00000dda vpmovmskb %ymm1, %esi + 0x48, 0xc1, 0xe1, 0x20, //0x00000dde shlq $32, %rcx + 0x48, 0x09, 0xcf, //0x00000de2 orq %rcx, %rdi + 0x48, 0xc1, 0xe3, 0x20, //0x00000de5 shlq $32, %rbx + 0x48, 0xc1, 0xe6, 0x20, //0x00000de9 shlq $32, %rsi + 0x48, 0x09, 0xda, //0x00000ded orq %rbx, %rdx + 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00000df0 jne LBB0_157 + 0x4d, 0x85, 0xdb, //0x00000df6 testq %r11, %r11 + 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00000df9 jne LBB0_159 + 0x45, 0x31, 0xdb, //0x00000dff xorl %r11d, %r11d + //0x00000e02 LBB0_149 + 0xc5, 0xbd, 0x64, 0xc8, //0x00000e02 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00000e06 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00000e0b vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x00000e0f vpmovmskb %ymm0, %ecx + 0x48, 0x09, 0xce, //0x00000e13 orq %rcx, %rsi + 0x48, 0x85, 0xff, //0x00000e16 testq %rdi, %rdi + 0x0f, 0x85, 0x7f, 0x00, 0x00, 0x00, //0x00000e19 jne LBB0_160 + 0x48, 0x85, 0xf6, //0x00000e1f testq %rsi, %rsi + 0x0f, 0x85, 0x07, 0x2f, 0x00, 0x00, //0x00000e22 jne LBB0_709 + 0x49, 0x83, 0xc5, 0xc0, //0x00000e28 addq $-64, %r13 + 0x48, 0x83, 0xc0, 0x40, //0x00000e2c addq $64, %rax + 0x49, 0x83, 0xfd, 0x3f, //0x00000e30 cmpq $63, %r13 + 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x00000e34 ja LBB0_146 + 0xe9, 0x5e, 0x1b, 0x00, 0x00, //0x00000e3a jmp LBB0_152 + //0x00000e3f LBB0_157 + 0x49, 0x83, 0xff, 0xff, //0x00000e3f cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00000e43 jne LBB0_159 + 0x4c, 0x0f, 0xbc, 0xfa, //0x00000e49 bsfq %rdx, %r15 + 0x49, 0x01, 0xc7, //0x00000e4d addq %rax, %r15 + //0x00000e50 LBB0_159 + 0x4c, 0x89, 0xd9, //0x00000e50 movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x00000e53 notq %rcx + 0x48, 0x21, 0xd1, //0x00000e56 andq %rdx, %rcx + 0x4c, 0x8d, 0x14, 0x09, //0x00000e59 leaq (%rcx,%rcx), %r10 + 0x4d, 0x09, 0xda, //0x00000e5d orq %r11, %r10 + 0x4c, 0x89, 0xd3, //0x00000e60 movq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00000e63 notq %rbx + 0x48, 0x21, 0xd3, //0x00000e66 andq %rdx, %rbx + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000e69 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd3, //0x00000e73 andq %rdx, %rbx + 0x45, 0x31, 0xdb, //0x00000e76 xorl %r11d, %r11d + 0x48, 0x01, 0xcb, //0x00000e79 addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc3, //0x00000e7c setb %r11b + 0x48, 0x01, 0xdb, //0x00000e80 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000e83 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x00000e8d xorq %rcx, %rbx + 0x4c, 0x21, 0xd3, //0x00000e90 andq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00000e93 notq %rbx + 0x48, 0x21, 0xdf, //0x00000e96 andq %rbx, %rdi + 0xe9, 0x64, 0xff, 0xff, 0xff, //0x00000e99 jmp LBB0_149 + //0x00000e9e LBB0_160 + 0x48, 0x0f, 0xbc, 0xcf, //0x00000e9e bsfq %rdi, %rcx + 0x48, 0x85, 0xf6, //0x00000ea2 testq %rsi, %rsi + 0x0f, 0x84, 0xbf, 0xf4, 0xff, 0xff, //0x00000ea5 je LBB0_235 + 0x48, 0x0f, 0xbc, 0xd6, //0x00000eab bsfq %rsi, %rdx + 0x4c, 0x8b, 0x1c, 0x24, //0x00000eaf movq (%rsp), %r11 + 0x48, 0x39, 0xca, //0x00000eb3 cmpq %rcx, %rdx + 0x0f, 0x83, 0xc0, 0xf4, 0xff, 0xff, //0x00000eb6 jae LBB0_236 + 0xe9, 0xc5, 0x2f, 0x00, 0x00, //0x00000ebc jmp LBB0_162 + //0x00000ec1 LBB0_163 + 0x4d, 0x89, 0xc5, //0x00000ec1 movq %r8, %r13 + 0x4d, 0x29, 0xcd, //0x00000ec4 subq %r9, %r13 + 0x0f, 0x84, 0xb1, 0x2f, 0x00, 0x00, //0x00000ec7 je LBB0_732 + 0x49, 0x83, 0xfd, 0x40, //0x00000ecd cmpq $64, %r13 + 0x0f, 0x82, 0xac, 0x1e, 0x00, 0x00, //0x00000ed1 jb LBB0_537 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00000ed7 movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x00000ede movq %r9, %rax + 0x45, 0x31, 0xdb, //0x00000ee1 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000ee4 .p2align 4, 0x90 + //0x00000ef0 LBB0_166 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x00000ef0 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x00000ef6 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x00000efd vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x00000f01 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0x74, 0xd6, //0x00000f05 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x00000f09 vpmovmskb %ymm2, %ebx + 0xc5, 0xfd, 0x74, 0xd7, //0x00000f0d vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00000f11 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd7, //0x00000f15 vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00000f19 vpmovmskb %ymm2, %ecx + 0xc5, 0xbd, 0x64, 0xd1, //0x00000f1d vpcmpgtb %ymm1, %ymm8, %ymm2 + 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00000f21 vpcmpgtb %ymm9, %ymm1, %ymm1 + 0xc5, 0xed, 0xdb, 0xc9, //0x00000f26 vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf1, //0x00000f2a vpmovmskb %ymm1, %esi + 0x48, 0xc1, 0xe3, 0x20, //0x00000f2e shlq $32, %rbx + 0x48, 0x09, 0xdf, //0x00000f32 orq %rbx, %rdi + 0x48, 0xc1, 0xe1, 0x20, //0x00000f35 shlq $32, %rcx + 0x48, 0xc1, 0xe6, 0x20, //0x00000f39 shlq $32, %rsi + 0x48, 0x09, 0xca, //0x00000f3d orq %rcx, %rdx + 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00000f40 jne LBB0_177 + 0x4d, 0x85, 0xdb, //0x00000f46 testq %r11, %r11 + 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00000f49 jne LBB0_179 + 0x45, 0x31, 0xdb, //0x00000f4f xorl %r11d, %r11d + //0x00000f52 LBB0_169 + 0xc5, 0xbd, 0x64, 0xc8, //0x00000f52 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00000f56 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00000f5b vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x00000f5f vpmovmskb %ymm0, %ecx + 0x48, 0x09, 0xce, //0x00000f63 orq %rcx, %rsi + 0x48, 0x85, 0xff, //0x00000f66 testq %rdi, %rdi + 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x00000f69 jne LBB0_180 + 0x48, 0x85, 0xf6, //0x00000f6f testq %rsi, %rsi + 0x0f, 0x85, 0xb7, 0x2d, 0x00, 0x00, //0x00000f72 jne LBB0_709 + 0x49, 0x83, 0xc5, 0xc0, //0x00000f78 addq $-64, %r13 + 0x48, 0x83, 0xc0, 0x40, //0x00000f7c addq $64, %rax + 0x49, 0x83, 0xfd, 0x3f, //0x00000f80 cmpq $63, %r13 + 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x00000f84 ja LBB0_166 + 0xe9, 0x1b, 0x1b, 0x00, 0x00, //0x00000f8a jmp LBB0_172 + //0x00000f8f LBB0_177 + 0x49, 0x83, 0xff, 0xff, //0x00000f8f cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00000f93 jne LBB0_179 + 0x4c, 0x0f, 0xbc, 0xfa, //0x00000f99 bsfq %rdx, %r15 + 0x49, 0x01, 0xc7, //0x00000f9d addq %rax, %r15 + //0x00000fa0 LBB0_179 + 0x4c, 0x89, 0xd9, //0x00000fa0 movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x00000fa3 notq %rcx + 0x48, 0x21, 0xd1, //0x00000fa6 andq %rdx, %rcx + 0x4c, 0x8d, 0x14, 0x09, //0x00000fa9 leaq (%rcx,%rcx), %r10 + 0x4d, 0x09, 0xda, //0x00000fad orq %r11, %r10 + 0x4c, 0x89, 0xd3, //0x00000fb0 movq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00000fb3 notq %rbx + 0x48, 0x21, 0xd3, //0x00000fb6 andq %rdx, %rbx + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000fb9 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd3, //0x00000fc3 andq %rdx, %rbx + 0x45, 0x31, 0xdb, //0x00000fc6 xorl %r11d, %r11d + 0x48, 0x01, 0xcb, //0x00000fc9 addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc3, //0x00000fcc setb %r11b + 0x48, 0x01, 0xdb, //0x00000fd0 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000fd3 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x00000fdd xorq %rcx, %rbx + 0x4c, 0x21, 0xd3, //0x00000fe0 andq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00000fe3 notq %rbx + 0x48, 0x21, 0xdf, //0x00000fe6 andq %rbx, %rdi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00000fe9 movq $24(%rsp), %r10 + 0xe9, 0x5f, 0xff, 0xff, 0xff, //0x00000fee jmp LBB0_169 + //0x00000ff3 LBB0_180 + 0x48, 0x0f, 0xbc, 0xcf, //0x00000ff3 bsfq %rdi, %rcx + 0x48, 0x85, 0xf6, //0x00000ff7 testq %rsi, %rsi + 0x0f, 0x84, 0x75, 0x08, 0x00, 0x00, //0x00000ffa je LBB0_300 + 0x48, 0x0f, 0xbc, 0xd6, //0x00001000 bsfq %rsi, %rdx + 0x4c, 0x8b, 0x1c, 0x24, //0x00001004 movq (%rsp), %r11 + 0x48, 0x39, 0xca, //0x00001008 cmpq %rcx, %rdx + 0x0f, 0x83, 0x76, 0x08, 0x00, 0x00, //0x0000100b jae LBB0_301 + 0xe9, 0x70, 0x2e, 0x00, 0x00, //0x00001011 jmp LBB0_162 + //0x00001016 LBB0_182 + 0x43, 0x8a, 0x0c, 0x2e, //0x00001016 movb (%r14,%r13), %cl + 0x80, 0xc1, 0xd2, //0x0000101a addb $-46, %cl + 0x80, 0xf9, 0x37, //0x0000101d cmpb $55, %cl + 0x0f, 0x87, 0x20, 0xf8, 0xff, 0xff, //0x00001020 ja LBB0_75 + 0x0f, 0xb6, 0xc9, //0x00001026 movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00001029 movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x00001033 btq %rcx, %rdx + 0x48, 0x89, 0xc1, //0x00001037 movq %rax, %rcx + 0x0f, 0x83, 0xee, 0x07, 0x00, 0x00, //0x0000103a jae LBB0_296 + //0x00001040 LBB0_184 + 0x4c, 0x89, 0x6c, 0x24, 0x10, //0x00001040 movq %r13, $16(%rsp) + 0x49, 0x83, 0xf9, 0x20, //0x00001045 cmpq $32, %r9 + 0x0f, 0x82, 0x7b, 0x1c, 0x00, 0x00, //0x00001049 jb LBB0_527 + 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x0000104f movq $-1, $40(%rsp) + 0x45, 0x31, 0xd2, //0x00001058 xorl %r10d, %r10d + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x0000105b movq $-1, %r13 + 0x48, 0xc7, 0x44, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff, //0x00001062 movq $-1, $48(%rsp) + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000106b .p2align 4, 0x90 + //0x00001070 LBB0_186 + 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x10, //0x00001070 vmovdqu (%r8,%r10), %ymm0 + 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x00001076 vpcmpgtb %ymm10, %ymm0, %ymm1 + 0xc5, 0x95, 0x64, 0xd0, //0x0000107b vpcmpgtb %ymm0, %ymm13, %ymm2 + 0xc5, 0xed, 0xdb, 0xc9, //0x0000107f vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0x85, 0x74, 0xd0, //0x00001083 vpcmpeqb %ymm0, %ymm15, %ymm2 + 0xc5, 0xfd, 0x74, 0x1d, 0xd1, 0xf1, 0xff, 0xff, //0x00001087 vpcmpeqb $-3631(%rip), %ymm0, %ymm3 /* LCPI0_17+0(%rip) */ + 0xc5, 0xe5, 0xeb, 0xd2, //0x0000108f vpor %ymm2, %ymm3, %ymm2 + 0xc5, 0x8d, 0xdb, 0xd8, //0x00001093 vpand %ymm0, %ymm14, %ymm3 + 0xc5, 0xfd, 0x74, 0x05, 0xe1, 0xf1, 0xff, 0xff, //0x00001097 vpcmpeqb $-3615(%rip), %ymm0, %ymm0 /* LCPI0_18+0(%rip) */ + 0xc5, 0xfd, 0xd7, 0xf8, //0x0000109f vpmovmskb %ymm0, %edi + 0xc5, 0xe5, 0x74, 0xdc, //0x000010a3 vpcmpeqb %ymm4, %ymm3, %ymm3 + 0xc5, 0xfd, 0xd7, 0xf3, //0x000010a7 vpmovmskb %ymm3, %esi + 0xc5, 0xfd, 0xd7, 0xd2, //0x000010ab vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0xeb, 0xc0, //0x000010af vpor %ymm0, %ymm1, %ymm0 + 0xc5, 0xe5, 0xeb, 0xca, //0x000010b3 vpor %ymm2, %ymm3, %ymm1 + 0xc5, 0xfd, 0xeb, 0xc1, //0x000010b7 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x000010bb vpmovmskb %ymm0, %ecx + 0x48, 0xf7, 0xd1, //0x000010bf notq %rcx + 0x48, 0x0f, 0xbc, 0xc9, //0x000010c2 bsfq %rcx, %rcx + 0x83, 0xf9, 0x20, //0x000010c6 cmpl $32, %ecx + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x000010c9 je LBB0_188 + 0xbb, 0xff, 0xff, 0xff, 0xff, //0x000010cf movl $-1, %ebx + 0xd3, 0xe3, //0x000010d4 shll %cl, %ebx + 0xf7, 0xd3, //0x000010d6 notl %ebx + 0x21, 0xdf, //0x000010d8 andl %ebx, %edi + 0x21, 0xde, //0x000010da andl %ebx, %esi + 0x21, 0xd3, //0x000010dc andl %edx, %ebx + 0x89, 0xda, //0x000010de movl %ebx, %edx + //0x000010e0 LBB0_188 + 0x8d, 0x5f, 0xff, //0x000010e0 leal $-1(%rdi), %ebx + 0x21, 0xfb, //0x000010e3 andl %edi, %ebx + 0xc5, 0xfe, 0x6f, 0x1d, 0xd3, 0xf0, 0xff, 0xff, //0x000010e5 vmovdqu $-3885(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0x0f, 0x85, 0x32, 0x16, 0x00, 0x00, //0x000010ed jne LBB0_476 + 0x8d, 0x5e, 0xff, //0x000010f3 leal $-1(%rsi), %ebx + 0x21, 0xf3, //0x000010f6 andl %esi, %ebx + 0x0f, 0x85, 0x27, 0x16, 0x00, 0x00, //0x000010f8 jne LBB0_476 + 0x8d, 0x5a, 0xff, //0x000010fe leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x00001101 andl %edx, %ebx + 0x0f, 0x85, 0x1c, 0x16, 0x00, 0x00, //0x00001103 jne LBB0_476 + 0x85, 0xff, //0x00001109 testl %edi, %edi + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x0000110b je LBB0_194 + 0x0f, 0xbc, 0xff, //0x00001111 bsfl %edi, %edi + 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x00001114 cmpq $-1, $48(%rsp) + 0x0f, 0x85, 0xd1, 0x19, 0x00, 0x00, //0x0000111a jne LBB0_505 + 0x4c, 0x01, 0xd7, //0x00001120 addq %r10, %rdi + 0x48, 0x89, 0x7c, 0x24, 0x30, //0x00001123 movq %rdi, $48(%rsp) + //0x00001128 LBB0_194 + 0x85, 0xf6, //0x00001128 testl %esi, %esi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000112a je LBB0_197 + 0x0f, 0xbc, 0xf6, //0x00001130 bsfl %esi, %esi + 0x49, 0x83, 0xfd, 0xff, //0x00001133 cmpq $-1, %r13 + 0x0f, 0x85, 0xbf, 0x19, 0x00, 0x00, //0x00001137 jne LBB0_506 + 0x4c, 0x01, 0xd6, //0x0000113d addq %r10, %rsi + 0x49, 0x89, 0xf5, //0x00001140 movq %rsi, %r13 + //0x00001143 LBB0_197 + 0x85, 0xd2, //0x00001143 testl %edx, %edx + 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x00001145 je LBB0_200 + 0x0f, 0xbc, 0xd2, //0x0000114b bsfl %edx, %edx + 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000114e cmpq $-1, $40(%rsp) + 0x0f, 0x85, 0xad, 0x19, 0x00, 0x00, //0x00001154 jne LBB0_507 + 0x4c, 0x01, 0xd2, //0x0000115a addq %r10, %rdx + 0x48, 0x89, 0x54, 0x24, 0x28, //0x0000115d movq %rdx, $40(%rsp) + //0x00001162 LBB0_200 + 0x83, 0xf9, 0x20, //0x00001162 cmpl $32, %ecx + 0x0f, 0x85, 0xc3, 0x02, 0x00, 0x00, //0x00001165 jne LBB0_234 + 0x49, 0x83, 0xc1, 0xe0, //0x0000116b addq $-32, %r9 + 0x49, 0x83, 0xc2, 0x20, //0x0000116f addq $32, %r10 + 0x49, 0x83, 0xf9, 0x1f, //0x00001173 cmpq $31, %r9 + 0x0f, 0x87, 0xf3, 0xfe, 0xff, 0xff, //0x00001177 ja LBB0_186 + 0xc5, 0xf8, 0x77, //0x0000117d vzeroupper + 0xc5, 0x7e, 0x6f, 0x35, 0x58, 0xf0, 0xff, 0xff, //0x00001180 vmovdqu $-4008(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0xb0, 0xf0, 0xff, 0xff, //0x00001188 vmovdqu $-3920(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x2d, 0x88, 0xf0, 0xff, 0xff, //0x00001190 vmovdqu $-3960(%rip), %ymm13 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x15, 0x60, 0xf0, 0xff, 0xff, //0x00001198 vmovdqu $-4000(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0xb8, 0xef, 0xff, 0xff, //0x000011a0 vmovdqu $-4168(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x1d, 0x90, 0xef, 0xff, 0xff, //0x000011a8 vmovdqu $-4208(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000011b0 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x05, 0x63, 0xef, 0xff, 0xff, //0x000011b5 vmovdqu $-4253(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x3b, 0xef, 0xff, 0xff, //0x000011bd vmovdqu $-4293(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x13, 0xef, 0xff, 0xff, //0x000011c5 vmovdqu $-4333(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x2d, 0xeb, 0xee, 0xff, 0xff, //0x000011cd vmovdqu $-4373(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0x4d, 0x01, 0xc2, //0x000011d5 addq %r8, %r10 + 0x49, 0x83, 0xf9, 0x10, //0x000011d8 cmpq $16, %r9 + 0x0f, 0x82, 0x8f, 0x01, 0x00, 0x00, //0x000011dc jb LBB0_221 + //0x000011e2 LBB0_203 + 0x4c, 0x89, 0xd1, //0x000011e2 movq %r10, %rcx + 0x48, 0x2b, 0x4c, 0x24, 0x10, //0x000011e5 subq $16(%rsp), %rcx + 0x4c, 0x29, 0xf1, //0x000011ea subq %r14, %rcx + 0x48, 0x83, 0xc1, 0x01, //0x000011ed addq $1, %rcx + 0x48, 0x89, 0x4c, 0x24, 0x38, //0x000011f1 movq %rcx, $56(%rsp) + 0x45, 0x31, 0xff, //0x000011f6 xorl %r15d, %r15d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000011f9 .p2align 4, 0x90 + //0x00001200 LBB0_204 + 0x4d, 0x89, 0xeb, //0x00001200 movq %r13, %r11 + 0x4d, 0x89, 0xc5, //0x00001203 movq %r8, %r13 + 0xc4, 0x81, 0x7a, 0x6f, 0x04, 0x3a, //0x00001206 vmovdqu (%r10,%r15), %xmm0 + 0xc5, 0xf9, 0x64, 0x0d, 0x2c, 0xee, 0xff, 0xff, //0x0000120c vpcmpgtb $-4564(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ + 0xc5, 0xfa, 0x6f, 0x15, 0x34, 0xee, 0xff, 0xff, //0x00001214 vmovdqu $-4556(%rip), %xmm2 /* LCPI0_21+0(%rip) */ + 0xc5, 0xe9, 0x64, 0xd0, //0x0000121c vpcmpgtb %xmm0, %xmm2, %xmm2 + 0xc5, 0xf1, 0xdb, 0xca, //0x00001220 vpand %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0x74, 0x15, 0x34, 0xee, 0xff, 0xff, //0x00001224 vpcmpeqb $-4556(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x1d, 0x3c, 0xee, 0xff, 0xff, //0x0000122c vpcmpeqb $-4548(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xd2, //0x00001234 vpor %xmm2, %xmm3, %xmm2 + 0xc5, 0xf9, 0xdb, 0x1d, 0xe0, 0xed, 0xff, 0xff, //0x00001238 vpand $-4640(%rip), %xmm0, %xmm3 /* LCPI0_12+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0x38, 0xee, 0xff, 0xff, //0x00001240 vpcmpeqb $-4552(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ + 0xc5, 0xe1, 0x74, 0x1d, 0x40, 0xee, 0xff, 0xff, //0x00001248 vpcmpeqb $-4544(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xe0, //0x00001250 vpor %xmm0, %xmm3, %xmm4 + 0xc5, 0xe9, 0xeb, 0xc9, //0x00001254 vpor %xmm1, %xmm2, %xmm1 + 0xc5, 0xd9, 0xeb, 0xc9, //0x00001258 vpor %xmm1, %xmm4, %xmm1 + 0xc5, 0x79, 0xd7, 0xc0, //0x0000125c vpmovmskb %xmm0, %r8d + 0xc5, 0xf9, 0xd7, 0xf3, //0x00001260 vpmovmskb %xmm3, %esi + 0xc5, 0xf9, 0xd7, 0xd2, //0x00001264 vpmovmskb %xmm2, %edx + 0xc5, 0xf9, 0xd7, 0xc9, //0x00001268 vpmovmskb %xmm1, %ecx + 0xf7, 0xd1, //0x0000126c notl %ecx + 0x0f, 0xbc, 0xc9, //0x0000126e bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x00001271 cmpl $16, %ecx + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00001274 je LBB0_206 + 0xbf, 0xff, 0xff, 0xff, 0xff, //0x0000127a movl $-1, %edi + 0xd3, 0xe7, //0x0000127f shll %cl, %edi + 0xf7, 0xd7, //0x00001281 notl %edi + 0x41, 0x21, 0xf8, //0x00001283 andl %edi, %r8d + 0x21, 0xfe, //0x00001286 andl %edi, %esi + 0x21, 0xd7, //0x00001288 andl %edx, %edi + 0x89, 0xfa, //0x0000128a movl %edi, %edx + //0x0000128c LBB0_206 + 0xc5, 0xfe, 0x6f, 0x25, 0x0c, 0xf0, 0xff, 0xff, //0x0000128c vmovdqu $-4084(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x24, 0xef, 0xff, 0xff, //0x00001294 vmovdqu $-4316(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0x41, 0x8d, 0x78, 0xff, //0x0000129c leal $-1(%r8), %edi + 0x44, 0x21, 0xc7, //0x000012a0 andl %r8d, %edi + 0x0f, 0x85, 0x54, 0x17, 0x00, 0x00, //0x000012a3 jne LBB0_501 + 0x8d, 0x7e, 0xff, //0x000012a9 leal $-1(%rsi), %edi + 0x21, 0xf7, //0x000012ac andl %esi, %edi + 0x0f, 0x85, 0x49, 0x17, 0x00, 0x00, //0x000012ae jne LBB0_501 + 0x8d, 0x7a, 0xff, //0x000012b4 leal $-1(%rdx), %edi + 0x21, 0xd7, //0x000012b7 andl %edx, %edi + 0x0f, 0x85, 0x3e, 0x17, 0x00, 0x00, //0x000012b9 jne LBB0_501 + 0x45, 0x85, 0xc0, //0x000012bf testl %r8d, %r8d + 0x0f, 0x84, 0x20, 0x00, 0x00, 0x00, //0x000012c2 je LBB0_212 + 0x41, 0x0f, 0xbc, 0xf8, //0x000012c8 bsfl %r8d, %edi + 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x000012cc cmpq $-1, $48(%rsp) + 0x0f, 0x85, 0xf0, 0x18, 0x00, 0x00, //0x000012d2 jne LBB0_520 + 0x48, 0x8b, 0x5c, 0x24, 0x38, //0x000012d8 movq $56(%rsp), %rbx + 0x4c, 0x01, 0xfb, //0x000012dd addq %r15, %rbx + 0x48, 0x01, 0xdf, //0x000012e0 addq %rbx, %rdi + 0x48, 0x89, 0x7c, 0x24, 0x30, //0x000012e3 movq %rdi, $48(%rsp) + //0x000012e8 LBB0_212 + 0x85, 0xf6, //0x000012e8 testl %esi, %esi + 0x4d, 0x89, 0xe8, //0x000012ea movq %r13, %r8 + 0x0f, 0x84, 0x2d, 0x00, 0x00, 0x00, //0x000012ed je LBB0_215 + 0x0f, 0xbc, 0xf6, //0x000012f3 bsfl %esi, %esi + 0x49, 0x83, 0xfb, 0xff, //0x000012f6 cmpq $-1, %r11 + 0x0f, 0x85, 0xd3, 0x18, 0x00, 0x00, //0x000012fa jne LBB0_521 + 0x48, 0x8b, 0x7c, 0x24, 0x38, //0x00001300 movq $56(%rsp), %rdi + 0x4c, 0x01, 0xff, //0x00001305 addq %r15, %rdi + 0x48, 0x01, 0xfe, //0x00001308 addq %rdi, %rsi + 0x49, 0x89, 0xf5, //0x0000130b movq %rsi, %r13 + 0x85, 0xd2, //0x0000130e testl %edx, %edx + 0x0f, 0x85, 0x15, 0x00, 0x00, 0x00, //0x00001310 jne LBB0_216 + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00001316 jmp LBB0_218 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000131b .p2align 4, 0x90 + //0x00001320 LBB0_215 + 0x4d, 0x89, 0xdd, //0x00001320 movq %r11, %r13 + 0x85, 0xd2, //0x00001323 testl %edx, %edx + 0x0f, 0x84, 0x1f, 0x00, 0x00, 0x00, //0x00001325 je LBB0_218 + //0x0000132b LBB0_216 + 0x0f, 0xbc, 0xd2, //0x0000132b bsfl %edx, %edx + 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000132e cmpq $-1, $40(%rsp) + 0x0f, 0x85, 0xa4, 0x18, 0x00, 0x00, //0x00001334 jne LBB0_522 + 0x48, 0x8b, 0x74, 0x24, 0x38, //0x0000133a movq $56(%rsp), %rsi + 0x4c, 0x01, 0xfe, //0x0000133f addq %r15, %rsi + 0x48, 0x01, 0xf2, //0x00001342 addq %rsi, %rdx + 0x48, 0x89, 0x54, 0x24, 0x28, //0x00001345 movq %rdx, $40(%rsp) + //0x0000134a LBB0_218 + 0x83, 0xf9, 0x10, //0x0000134a cmpl $16, %ecx + 0x0f, 0x85, 0x85, 0x03, 0x00, 0x00, //0x0000134d jne LBB0_280 + 0x49, 0x83, 0xc1, 0xf0, //0x00001353 addq $-16, %r9 + 0x49, 0x83, 0xc7, 0x10, //0x00001357 addq $16, %r15 + 0x49, 0x83, 0xf9, 0x0f, //0x0000135b cmpq $15, %r9 + 0x0f, 0x87, 0x9b, 0xfe, 0xff, 0xff, //0x0000135f ja LBB0_204 + 0x4d, 0x01, 0xfa, //0x00001365 addq %r15, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001368 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x0000136d movq (%rsp), %r11 + //0x00001371 LBB0_221 + 0x4d, 0x85, 0xc9, //0x00001371 testq %r9, %r9 + 0xc5, 0xfe, 0x6f, 0x25, 0x24, 0xef, 0xff, 0xff, //0x00001374 vmovdqu $-4316(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x0f, 0x84, 0x6f, 0x03, 0x00, 0x00, //0x0000137c je LBB0_282 + 0x4b, 0x8d, 0x0c, 0x0a, //0x00001382 leaq (%r10,%r9), %rcx + 0x48, 0x89, 0x4c, 0x24, 0x38, //0x00001386 movq %rcx, $56(%rsp) + 0x4c, 0x89, 0xd6, //0x0000138b movq %r10, %rsi + 0x48, 0x2b, 0x74, 0x24, 0x10, //0x0000138e subq $16(%rsp), %rsi + 0x4c, 0x29, 0xf6, //0x00001393 subq %r14, %rsi + 0x48, 0x83, 0xc6, 0x01, //0x00001396 addq $1, %rsi + 0x31, 0xc9, //0x0000139a xorl %ecx, %ecx + 0xc5, 0xfe, 0x6f, 0x1d, 0x1c, 0xee, 0xff, 0xff, //0x0000139c vmovdqu $-4580(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xe9, 0x24, 0x00, 0x00, 0x00, //0x000013a4 jmp LBB0_227 + //0x000013a9 LBB0_223 + 0x83, 0xff, 0x65, //0x000013a9 cmpl $101, %edi + 0x0f, 0x85, 0x3c, 0x03, 0x00, 0x00, //0x000013ac jne LBB0_281 + //0x000013b2 LBB0_224 + 0x49, 0x83, 0xfd, 0xff, //0x000013b2 cmpq $-1, %r13 + 0x0f, 0x85, 0x6e, 0x16, 0x00, 0x00, //0x000013b6 jne LBB0_503 + 0x4c, 0x8d, 0x2c, 0x0e, //0x000013bc leaq (%rsi,%rcx), %r13 + //0x000013c0 .p2align 4, 0x90 + //0x000013c0 LBB0_226 + 0x48, 0x83, 0xc1, 0x01, //0x000013c0 addq $1, %rcx + 0x49, 0x39, 0xc9, //0x000013c4 cmpq %rcx, %r9 + 0x0f, 0x84, 0xe8, 0x12, 0x00, 0x00, //0x000013c7 je LBB0_469 + //0x000013cd LBB0_227 + 0x41, 0x0f, 0xbe, 0x3c, 0x0a, //0x000013cd movsbl (%r10,%rcx), %edi + 0x8d, 0x5f, 0xd0, //0x000013d2 leal $-48(%rdi), %ebx + 0x83, 0xfb, 0x0a, //0x000013d5 cmpl $10, %ebx + 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x000013d8 jb LBB0_226 + 0x8d, 0x5f, 0xd5, //0x000013de leal $-43(%rdi), %ebx + 0x83, 0xfb, 0x1a, //0x000013e1 cmpl $26, %ebx + 0x0f, 0x87, 0xbf, 0xff, 0xff, 0xff, //0x000013e4 ja LBB0_223 + 0x48, 0x8d, 0x15, 0x5b, 0x2d, 0x00, 0x00, //0x000013ea leaq $11611(%rip), %rdx /* LJTI0_3+0(%rip) */ + 0x48, 0x63, 0x3c, 0x9a, //0x000013f1 movslq (%rdx,%rbx,4), %rdi + 0x48, 0x01, 0xd7, //0x000013f5 addq %rdx, %rdi + 0xff, 0xe7, //0x000013f8 jmpq *%rdi + //0x000013fa LBB0_230 + 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x000013fa cmpq $-1, $40(%rsp) + 0x0f, 0x85, 0x24, 0x16, 0x00, 0x00, //0x00001400 jne LBB0_503 + 0x48, 0x8d, 0x14, 0x0e, //0x00001406 leaq (%rsi,%rcx), %rdx + 0x48, 0x89, 0x54, 0x24, 0x28, //0x0000140a movq %rdx, $40(%rsp) + 0xe9, 0xac, 0xff, 0xff, 0xff, //0x0000140f jmp LBB0_226 + //0x00001414 LBB0_232 + 0x48, 0x83, 0x7c, 0x24, 0x30, 0xff, //0x00001414 cmpq $-1, $48(%rsp) + 0x0f, 0x85, 0x0a, 0x16, 0x00, 0x00, //0x0000141a jne LBB0_503 + 0x48, 0x8d, 0x14, 0x0e, //0x00001420 leaq (%rsi,%rcx), %rdx + 0x48, 0x89, 0x54, 0x24, 0x30, //0x00001424 movq %rdx, $48(%rsp) + 0xe9, 0x92, 0xff, 0xff, 0xff, //0x00001429 jmp LBB0_226 + //0x0000142e LBB0_234 + 0x4c, 0x01, 0xd1, //0x0000142e addq %r10, %rcx + 0x4c, 0x01, 0xc1, //0x00001431 addq %r8, %rcx + 0xc5, 0xf8, 0x77, //0x00001434 vzeroupper + 0x49, 0x89, 0xca, //0x00001437 movq %rcx, %r10 + 0xe9, 0xb2, 0x02, 0x00, 0x00, //0x0000143a jmp LBB0_282 + //0x0000143f LBB0_238 + 0x41, 0xf6, 0xc3, 0x40, //0x0000143f testb $64, %r11b + 0x0f, 0x85, 0x84, 0x04, 0x00, 0x00, //0x00001443 jne LBB0_306 + 0x4d, 0x8b, 0x0f, //0x00001449 movq (%r15), %r9 + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x0000144c movq $32(%rsp), %rax + 0x4c, 0x8b, 0x40, 0x08, //0x00001451 movq $8(%rax), %r8 + 0x41, 0xf6, 0xc3, 0x20, //0x00001455 testb $32, %r11b + 0x0f, 0x85, 0x88, 0x0d, 0x00, 0x00, //0x00001459 jne LBB0_396 + 0x4d, 0x89, 0xc3, //0x0000145f movq %r8, %r11 + 0x4d, 0x29, 0xcb, //0x00001462 subq %r9, %r11 + 0x0f, 0x84, 0x13, 0x2a, 0x00, 0x00, //0x00001465 je LBB0_732 + 0x49, 0x83, 0xfb, 0x40, //0x0000146b cmpq $64, %r11 + 0x0f, 0x82, 0x71, 0x19, 0x00, 0x00, //0x0000146f jb LBB0_541 + 0x4c, 0x89, 0xce, //0x00001475 movq %r9, %rsi + 0x48, 0xf7, 0xd6, //0x00001478 notq %rsi + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000147b movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x00001482 movq %r9, %rax + 0x45, 0x31, 0xd2, //0x00001485 xorl %r10d, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001488 .p2align 4, 0x90 + //0x00001490 LBB0_243 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x00001490 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x00001496 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x0000149d vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x000014a1 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd6, //0x000014a5 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x000014a9 vpmovmskb %ymm2, %ebx + 0xc5, 0xfd, 0x74, 0xc7, //0x000014ad vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf8, //0x000014b1 vpmovmskb %ymm0, %edi + 0xc5, 0xf5, 0x74, 0xc7, //0x000014b5 vpcmpeqb %ymm7, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x000014b9 vpmovmskb %ymm0, %ecx + 0x48, 0xc1, 0xe3, 0x20, //0x000014bd shlq $32, %rbx + 0x48, 0x09, 0xda, //0x000014c1 orq %rbx, %rdx + 0x48, 0xc1, 0xe1, 0x20, //0x000014c4 shlq $32, %rcx + 0x48, 0x09, 0xcf, //0x000014c8 orq %rcx, %rdi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000014cb jne LBB0_252 + 0x4d, 0x85, 0xd2, //0x000014d1 testq %r10, %r10 + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x000014d4 jne LBB0_254 + 0x45, 0x31, 0xd2, //0x000014da xorl %r10d, %r10d + 0x48, 0x85, 0xd2, //0x000014dd testq %rdx, %rdx + 0x0f, 0x85, 0x7e, 0x00, 0x00, 0x00, //0x000014e0 jne LBB0_255 + //0x000014e6 LBB0_246 + 0x49, 0x83, 0xc3, 0xc0, //0x000014e6 addq $-64, %r11 + 0x48, 0x83, 0xc6, 0xc0, //0x000014ea addq $-64, %rsi + 0x48, 0x83, 0xc0, 0x40, //0x000014ee addq $64, %rax + 0x49, 0x83, 0xfb, 0x3f, //0x000014f2 cmpq $63, %r11 + 0x0f, 0x87, 0x94, 0xff, 0xff, 0xff, //0x000014f6 ja LBB0_243 + 0xe9, 0xe8, 0x16, 0x00, 0x00, //0x000014fc jmp LBB0_247 + //0x00001501 LBB0_252 + 0x49, 0x83, 0xff, 0xff, //0x00001501 cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00001505 jne LBB0_254 + 0x4c, 0x0f, 0xbc, 0xff, //0x0000150b bsfq %rdi, %r15 + 0x49, 0x01, 0xc7, //0x0000150f addq %rax, %r15 + //0x00001512 LBB0_254 + 0x4c, 0x89, 0xd1, //0x00001512 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00001515 notq %rcx + 0x48, 0x21, 0xf9, //0x00001518 andq %rdi, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x0000151b leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xd5, //0x0000151f orq %r10, %r13 + 0x4c, 0x89, 0xeb, //0x00001522 movq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00001525 notq %rbx + 0x48, 0x21, 0xfb, //0x00001528 andq %rdi, %rbx + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000152b movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfb, //0x00001535 andq %rdi, %rbx + 0x45, 0x31, 0xd2, //0x00001538 xorl %r10d, %r10d + 0x48, 0x01, 0xcb, //0x0000153b addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc2, //0x0000153e setb %r10b + 0x48, 0x01, 0xdb, //0x00001542 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001545 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x0000154f xorq %rcx, %rbx + 0x4c, 0x21, 0xeb, //0x00001552 andq %r13, %rbx + 0x48, 0xf7, 0xd3, //0x00001555 notq %rbx + 0x48, 0x21, 0xda, //0x00001558 andq %rbx, %rdx + 0x48, 0x85, 0xd2, //0x0000155b testq %rdx, %rdx + 0x0f, 0x84, 0x82, 0xff, 0xff, 0xff, //0x0000155e je LBB0_246 + //0x00001564 LBB0_255 + 0xc5, 0x7d, 0x7f, 0xea, //0x00001564 vmovdqa %ymm13, %ymm2 + 0x48, 0x0f, 0xbc, 0xc2, //0x00001568 bsfq %rdx, %rax + 0x48, 0x29, 0xf0, //0x0000156c subq %rsi, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x0000156f movq (%rsp), %r11 + 0xe9, 0x64, 0x11, 0x00, 0x00, //0x00001573 jmp LBB0_473 + //0x00001578 LBB0_256 + 0x4c, 0x89, 0xd9, //0x00001578 movq %r11, %rcx + 0x48, 0x8b, 0x44, 0x24, 0x20, //0x0000157b movq $32(%rsp), %rax + 0x4c, 0x8b, 0x58, 0x08, //0x00001580 movq $8(%rax), %r11 + 0x49, 0x8b, 0x07, //0x00001584 movq (%r15), %rax + 0xf6, 0xc1, 0x40, //0x00001587 testb $64, %cl + 0x0f, 0x85, 0x1d, 0x04, 0x00, 0x00, //0x0000158a jne LBB0_317 + 0x49, 0x29, 0xc3, //0x00001590 subq %rax, %r11 + 0x0f, 0x84, 0xc6, 0x28, 0x00, 0x00, //0x00001593 je LBB0_723 + 0x4d, 0x8d, 0x2c, 0x06, //0x00001599 leaq (%r14,%rax), %r13 + 0x41, 0x80, 0x7d, 0x00, 0x30, //0x0000159d cmpb $48, (%r13) + 0x0f, 0x85, 0xa6, 0x0d, 0x00, 0x00, //0x000015a2 jne LBB0_417 + 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000015a8 movl $1, %r8d + 0x49, 0x83, 0xfb, 0x01, //0x000015ae cmpq $1, %r11 + 0x0f, 0x85, 0x6c, 0x0d, 0x00, 0x00, //0x000015b2 jne LBB0_415 + //0x000015b8 LBB0_260 + 0x48, 0x89, 0xc1, //0x000015b8 movq %rax, %rcx + 0xe9, 0x8e, 0x15, 0x00, 0x00, //0x000015bb jmp LBB0_514 + //0x000015c0 LBB0_261 + 0x41, 0xf6, 0xc3, 0x40, //0x000015c0 testb $64, %r11b + 0x0f, 0x85, 0x7a, 0x05, 0x00, 0x00, //0x000015c4 jne LBB0_334 + 0x48, 0x8b, 0x54, 0x24, 0x18, //0x000015ca movq $24(%rsp), %rdx + 0x48, 0x8b, 0x0a, //0x000015cf movq (%rdx), %rcx + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000015d2 cmpq $4095, %rcx + 0x0f, 0x8f, 0xca, 0x26, 0x00, 0x00, //0x000015d9 jg LBB0_724 + 0x48, 0x8d, 0x41, 0x01, //0x000015df leaq $1(%rcx), %rax + 0x48, 0x89, 0x02, //0x000015e3 movq %rax, (%rdx) + 0x48, 0xc7, 0x44, 0xca, 0x08, 0x05, 0x00, 0x00, 0x00, //0x000015e6 movq $5, $8(%rdx,%rcx,8) + 0xe9, 0xac, 0xed, 0xff, 0xff, //0x000015ef jmp LBB0_3 + //0x000015f4 LBB0_264 + 0x49, 0x8b, 0x0f, //0x000015f4 movq (%r15), %rcx + 0x48, 0x8b, 0x54, 0x24, 0x20, //0x000015f7 movq $32(%rsp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x000015fc movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfc, //0x00001600 leaq $-4(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001604 cmpq %rsi, %rcx + 0x0f, 0x87, 0x1a, 0x27, 0x00, 0x00, //0x00001607 ja LBB0_711 + 0x41, 0x8b, 0x14, 0x0e, //0x0000160d movl (%r14,%rcx), %edx + 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x00001611 cmpl $1702063201, %edx + 0x0f, 0x85, 0x28, 0x27, 0x00, 0x00, //0x00001617 jne LBB0_712 + 0x48, 0x8d, 0x41, 0x04, //0x0000161d leaq $4(%rcx), %rax + 0x49, 0x89, 0x07, //0x00001621 movq %rax, (%r15) + 0x48, 0x85, 0xc9, //0x00001624 testq %rcx, %rcx + 0x0f, 0x8f, 0x73, 0xed, 0xff, 0xff, //0x00001627 jg LBB0_3 + 0xe9, 0x06, 0x28, 0x00, 0x00, //0x0000162d jmp LBB0_267 + //0x00001632 LBB0_268 + 0x49, 0x8b, 0x0f, //0x00001632 movq (%r15), %rcx + 0x48, 0x8b, 0x54, 0x24, 0x20, //0x00001635 movq $32(%rsp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x0000163a movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x0000163e leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001642 cmpq %rsi, %rcx + 0x0f, 0x87, 0xdc, 0x26, 0x00, 0x00, //0x00001645 ja LBB0_711 + 0x48, 0x8d, 0x41, 0xff, //0x0000164b leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0e, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x0000164f cmpl $1819047278, $-1(%r14,%rcx) + 0x0f, 0x84, 0x31, 0x00, 0x00, 0x00, //0x00001658 je LBB0_276 + 0xe9, 0x37, 0x27, 0x00, 0x00, //0x0000165e jmp LBB0_270 + //0x00001663 LBB0_274 + 0x49, 0x8b, 0x0f, //0x00001663 movq (%r15), %rcx + 0x48, 0x8b, 0x54, 0x24, 0x20, //0x00001666 movq $32(%rsp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x0000166b movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x0000166f leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001673 cmpq %rsi, %rcx + 0x0f, 0x87, 0xab, 0x26, 0x00, 0x00, //0x00001676 ja LBB0_711 + 0x48, 0x8d, 0x41, 0xff, //0x0000167c leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0e, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00001680 cmpl $1702195828, $-1(%r14,%rcx) + 0x0f, 0x85, 0x52, 0x27, 0x00, 0x00, //0x00001689 jne LBB0_717 + //0x0000168f LBB0_276 + 0x48, 0x8d, 0x51, 0x03, //0x0000168f leaq $3(%rcx), %rdx + 0x49, 0x89, 0x17, //0x00001693 movq %rdx, (%r15) + 0x48, 0x85, 0xc9, //0x00001696 testq %rcx, %rcx + 0x0f, 0x8f, 0x01, 0xed, 0xff, 0xff, //0x00001699 jg LBB0_3 + 0xe9, 0x71, 0x26, 0x00, 0x00, //0x0000169f jmp LBB0_728 + //0x000016a4 LBB0_277 + 0x41, 0xf6, 0xc3, 0x40, //0x000016a4 testb $64, %r11b + 0x0f, 0x85, 0x9f, 0x07, 0x00, 0x00, //0x000016a8 jne LBB0_360 + 0x48, 0x8b, 0x54, 0x24, 0x18, //0x000016ae movq $24(%rsp), %rdx + 0x48, 0x8b, 0x0a, //0x000016b3 movq (%rdx), %rcx + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000016b6 cmpq $4095, %rcx + 0x0f, 0x8f, 0xe6, 0x25, 0x00, 0x00, //0x000016bd jg LBB0_724 + 0x48, 0x8d, 0x41, 0x01, //0x000016c3 leaq $1(%rcx), %rax + 0x48, 0x89, 0x02, //0x000016c7 movq %rax, (%rdx) + 0x48, 0xc7, 0x44, 0xca, 0x08, 0x06, 0x00, 0x00, 0x00, //0x000016ca movq $6, $8(%rdx,%rcx,8) + 0xe9, 0xc8, 0xec, 0xff, 0xff, //0x000016d3 jmp LBB0_3 + //0x000016d8 LBB0_280 + 0x89, 0xc9, //0x000016d8 movl %ecx, %ecx + 0x49, 0x01, 0xca, //0x000016da addq %rcx, %r10 + 0x4d, 0x01, 0xfa, //0x000016dd addq %r15, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x000016e0 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x000016e5 movq (%rsp), %r11 + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x000016e9 jmp LBB0_282 + //0x000016ee LBB0_281 + 0x49, 0x01, 0xca, //0x000016ee addq %rcx, %r10 + //0x000016f1 LBB0_282 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000016f1 movq $-1, %rcx + 0x48, 0x8b, 0x74, 0x24, 0x30, //0x000016f8 movq $48(%rsp), %rsi + 0x48, 0x85, 0xf6, //0x000016fd testq %rsi, %rsi + 0x48, 0x8b, 0x54, 0x24, 0x28, //0x00001700 movq $40(%rsp), %rdx + 0x0f, 0x84, 0xf6, 0x25, 0x00, 0x00, //0x00001705 je LBB0_708 + 0x48, 0x85, 0xd2, //0x0000170b testq %rdx, %rdx + 0xc5, 0xfe, 0x6f, 0x1d, 0xaa, 0xea, 0xff, 0xff, //0x0000170e vmovdqu $-5462(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0x0f, 0x84, 0xe5, 0x25, 0x00, 0x00, //0x00001716 je LBB0_708 + 0x4d, 0x85, 0xed, //0x0000171c testq %r13, %r13 + 0x0f, 0x84, 0xdc, 0x25, 0x00, 0x00, //0x0000171f je LBB0_708 + 0x4d, 0x29, 0xc2, //0x00001725 subq %r8, %r10 + 0x49, 0x8d, 0x4a, 0xff, //0x00001728 leaq $-1(%r10), %rcx + 0x48, 0x39, 0xce, //0x0000172c cmpq %rcx, %rsi + 0x0f, 0x84, 0x80, 0x00, 0x00, 0x00, //0x0000172f je LBB0_291 + 0x48, 0x39, 0xca, //0x00001735 cmpq %rcx, %rdx + 0x0f, 0x84, 0x77, 0x00, 0x00, 0x00, //0x00001738 je LBB0_291 + 0x49, 0x39, 0xcd, //0x0000173e cmpq %rcx, %r13 + 0x0f, 0x84, 0x6e, 0x00, 0x00, 0x00, //0x00001741 je LBB0_291 + 0x48, 0x85, 0xd2, //0x00001747 testq %rdx, %rdx + 0xc5, 0xfe, 0x6f, 0x2d, 0x6e, 0xe9, 0xff, 0xff, //0x0000174a vmovdqu $-5778(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x86, 0xe9, 0xff, 0xff, //0x00001752 vmovdqu $-5754(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x9e, 0xe9, 0xff, 0xff, //0x0000175a vmovdqu $-5730(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0xb6, 0xe9, 0xff, 0xff, //0x00001762 vmovdqu $-5706(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000176a vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0x89, 0xea, 0xff, 0xff, //0x0000176f vmovdqu $-5495(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x05, 0xa1, 0xea, 0xff, 0xff, //0x00001777 vmovdqu $-5471(%rip), %ymm0 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0xb9, 0xea, 0xff, 0xff, //0x0000177f vmovdqu $-5447(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x51, 0xea, 0xff, 0xff, //0x00001787 vmovdqu $-5551(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x09, 0xeb, 0xff, 0xff, //0x0000178f vmovdqu $-5367(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0x0f, 0x8e, 0xa5, 0x00, 0x00, 0x00, //0x00001797 jle LBB0_297 + 0x48, 0x8d, 0x4a, 0xff, //0x0000179d leaq $-1(%rdx), %rcx + 0x49, 0x39, 0xcd, //0x000017a1 cmpq %rcx, %r13 + 0x0f, 0x84, 0x98, 0x00, 0x00, 0x00, //0x000017a4 je LBB0_297 + 0x48, 0xf7, 0xd2, //0x000017aa notq %rdx + 0x49, 0x89, 0xd2, //0x000017ad movq %rdx, %r10 + 0xe9, 0x50, 0x00, 0x00, 0x00, //0x000017b0 jmp LBB0_292 + //0x000017b5 LBB0_291 + 0x49, 0xf7, 0xda, //0x000017b5 negq %r10 + 0xc5, 0xfe, 0x6f, 0x2d, 0x00, 0xe9, 0xff, 0xff, //0x000017b8 vmovdqu $-5888(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x18, 0xe9, 0xff, 0xff, //0x000017c0 vmovdqu $-5864(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x30, 0xe9, 0xff, 0xff, //0x000017c8 vmovdqu $-5840(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x48, 0xe9, 0xff, 0xff, //0x000017d0 vmovdqu $-5816(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000017d8 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0x1b, 0xea, 0xff, 0xff, //0x000017dd vmovdqu $-5605(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x05, 0x33, 0xea, 0xff, 0xff, //0x000017e5 vmovdqu $-5581(%rip), %ymm0 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0x4b, 0xea, 0xff, 0xff, //0x000017ed vmovdqu $-5557(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0xe3, 0xe9, 0xff, 0xff, //0x000017f5 vmovdqu $-5661(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x9b, 0xea, 0xff, 0xff, //0x000017fd vmovdqu $-5477(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + //0x00001805 LBB0_292 + 0xc5, 0x7e, 0x6f, 0x1d, 0x33, 0xe9, 0xff, 0xff, //0x00001805 vmovdqu $-5837(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x4b, 0xe9, 0xff, 0xff, //0x0000180d vmovdqu $-5813(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + //0x00001815 LBB0_293 + 0x4c, 0x8b, 0x6c, 0x24, 0x10, //0x00001815 movq $16(%rsp), %r13 + //0x0000181a LBB0_294 + 0x4d, 0x85, 0xd2, //0x0000181a testq %r10, %r10 + 0x0f, 0x88, 0xdb, 0x24, 0x00, 0x00, //0x0000181d js LBB0_707 + 0x49, 0x8b, 0x0f, //0x00001823 movq (%r15), %rcx + 0x48, 0x83, 0xc1, 0xff, //0x00001826 addq $-1, %rcx + 0xc5, 0x7d, 0x6f, 0xe8, //0x0000182a vmovdqa %ymm0, %ymm13 + //0x0000182e LBB0_296 + 0x4c, 0x01, 0xd1, //0x0000182e addq %r10, %rcx + 0x49, 0x89, 0x0f, //0x00001831 movq %rcx, (%r15) + 0x4d, 0x85, 0xed, //0x00001834 testq %r13, %r13 + 0x0f, 0x8f, 0x63, 0xeb, 0xff, 0xff, //0x00001837 jg LBB0_3 + 0xe9, 0xd3, 0x24, 0x00, 0x00, //0x0000183d jmp LBB0_728 + //0x00001842 LBB0_297 + 0x48, 0x89, 0xf1, //0x00001842 movq %rsi, %rcx + 0x4c, 0x09, 0xe9, //0x00001845 orq %r13, %rcx + 0x0f, 0x99, 0xc1, //0x00001848 setns %cl + 0xc5, 0x7e, 0x6f, 0x1d, 0xed, 0xe8, 0xff, 0xff, //0x0000184b vmovdqu $-5907(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x05, 0xe9, 0xff, 0xff, //0x00001853 vmovdqu $-5883(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + 0x0f, 0x88, 0x6d, 0x09, 0x00, 0x00, //0x0000185b js LBB0_395 + 0x4c, 0x39, 0xee, //0x00001861 cmpq %r13, %rsi + 0x0f, 0x8c, 0x64, 0x09, 0x00, 0x00, //0x00001864 jl LBB0_395 + 0x48, 0xf7, 0xd6, //0x0000186a notq %rsi + 0x49, 0x89, 0xf2, //0x0000186d movq %rsi, %r10 + 0xe9, 0xa0, 0xff, 0xff, 0xff, //0x00001870 jmp LBB0_293 + //0x00001875 LBB0_300 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001875 movl $64, %edx + 0x4c, 0x8b, 0x1c, 0x24, //0x0000187a movq (%rsp), %r11 + 0x48, 0x39, 0xca, //0x0000187e cmpq %rcx, %rdx + 0x0f, 0x82, 0xff, 0x25, 0x00, 0x00, //0x00001881 jb LBB0_162 + //0x00001887 LBB0_301 + 0x48, 0x01, 0xc8, //0x00001887 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000188a addq $1, %rax + //0x0000188e LBB0_302 + 0x48, 0x85, 0xc0, //0x0000188e testq %rax, %rax + 0x0f, 0x88, 0x2a, 0x24, 0x00, 0x00, //0x00001891 js LBB0_702 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001897 movq $8(%rsp), %r15 + 0x49, 0x89, 0x07, //0x0000189c movq %rax, (%r15) + 0x4d, 0x85, 0xc9, //0x0000189f testq %r9, %r9 + 0x0f, 0x8e, 0x32, 0x24, 0x00, 0x00, //0x000018a2 jle LBB0_475 + //0x000018a8 LBB0_304 + 0x49, 0x8b, 0x0a, //0x000018a8 movq (%r10), %rcx + 0x48, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000018ab cmpq $4095, %rcx + 0x0f, 0x8f, 0xf1, 0x23, 0x00, 0x00, //0x000018b2 jg LBB0_724 + 0x48, 0x8d, 0x41, 0x01, //0x000018b8 leaq $1(%rcx), %rax + 0x49, 0x89, 0x02, //0x000018bc movq %rax, (%r10) + 0x49, 0xc7, 0x44, 0xca, 0x08, 0x04, 0x00, 0x00, 0x00, //0x000018bf movq $4, $8(%r10,%rcx,8) + 0xe9, 0xd3, 0xea, 0xff, 0xff, //0x000018c8 jmp LBB0_3 + //0x000018cd LBB0_306 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x000018cd movq $32(%rsp), %rcx + 0x4c, 0x8b, 0x51, 0x08, //0x000018d2 movq $8(%rcx), %r10 + 0x4d, 0x8b, 0x07, //0x000018d6 movq (%r15), %r8 + 0x4f, 0x8d, 0x0c, 0x06, //0x000018d9 leaq (%r14,%r8), %r9 + 0x4d, 0x29, 0xc2, //0x000018dd subq %r8, %r10 + 0x49, 0x83, 0xfa, 0x20, //0x000018e0 cmpq $32, %r10 + 0x0f, 0x8c, 0xac, 0x00, 0x00, 0x00, //0x000018e4 jl LBB0_316 + 0xba, 0x20, 0x00, 0x00, 0x00, //0x000018ea movl $32, %edx + 0x31, 0xf6, //0x000018ef xorl %esi, %esi + 0x45, 0x31, 0xff, //0x000018f1 xorl %r15d, %r15d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000018f4 .p2align 4, 0x90 + //0x00001900 LBB0_308 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x31, //0x00001900 vmovdqu (%r9,%rsi), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00001906 vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd9, //0x0000190a vpmovmskb %ymm1, %r11d + 0xc5, 0xfd, 0x74, 0xc7, //0x0000190e vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd8, //0x00001912 vpmovmskb %ymm0, %ebx + 0x85, 0xdb, //0x00001916 testl %ebx, %ebx + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00001918 jne LBB0_311 + 0x4d, 0x85, 0xff, //0x0000191e testq %r15, %r15 + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00001921 jne LBB0_311 + 0x45, 0x31, 0xff, //0x00001927 xorl %r15d, %r15d + 0xe9, 0x35, 0x00, 0x00, 0x00, //0x0000192a jmp LBB0_312 + 0x90, //0x0000192f .p2align 4, 0x90 + //0x00001930 LBB0_311 + 0x44, 0x89, 0xf9, //0x00001930 movl %r15d, %ecx + 0xf7, 0xd1, //0x00001933 notl %ecx + 0x21, 0xd9, //0x00001935 andl %ebx, %ecx + 0x44, 0x8d, 0x2c, 0x09, //0x00001937 leal (%rcx,%rcx), %r13d + 0x45, 0x09, 0xfd, //0x0000193b orl %r15d, %r13d + 0x44, 0x89, 0xef, //0x0000193e movl %r13d, %edi + 0xf7, 0xd7, //0x00001941 notl %edi + 0x21, 0xdf, //0x00001943 andl %ebx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001945 andl $-1431655766, %edi + 0x45, 0x31, 0xff, //0x0000194b xorl %r15d, %r15d + 0x01, 0xcf, //0x0000194e addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc7, //0x00001950 setb %r15b + 0x01, 0xff, //0x00001954 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00001956 xorl $1431655765, %edi + 0x44, 0x21, 0xef, //0x0000195c andl %r13d, %edi + 0xf7, 0xd7, //0x0000195f notl %edi + 0x41, 0x21, 0xfb, //0x00001961 andl %edi, %r11d + //0x00001964 LBB0_312 + 0x4d, 0x85, 0xdb, //0x00001964 testq %r11, %r11 + 0x0f, 0x85, 0x2d, 0xf1, 0xff, 0xff, //0x00001967 jne LBB0_104 + 0x48, 0x83, 0xc6, 0x20, //0x0000196d addq $32, %rsi + 0x49, 0x8d, 0x0c, 0x12, //0x00001971 leaq (%r10,%rdx), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00001975 addq $-32, %rcx + 0x48, 0x83, 0xc2, 0xe0, //0x00001979 addq $-32, %rdx + 0x48, 0x83, 0xf9, 0x3f, //0x0000197d cmpq $63, %rcx + 0x0f, 0x8f, 0x79, 0xff, 0xff, 0xff, //0x00001981 jg LBB0_308 + 0x4d, 0x85, 0xff, //0x00001987 testq %r15, %r15 + 0x0f, 0x85, 0xad, 0x1e, 0x00, 0x00, //0x0000198a jne LBB0_645 + 0x49, 0x01, 0xf1, //0x00001990 addq %rsi, %r9 + 0x49, 0x29, 0xf2, //0x00001993 subq %rsi, %r10 + //0x00001996 LBB0_316 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001996 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x0000199b movq (%rsp), %r11 + 0x4d, 0x85, 0xd2, //0x0000199f testq %r10, %r10 + 0x0f, 0x8f, 0x07, 0x1f, 0x00, 0x00, //0x000019a2 jg LBB0_649 + 0xe9, 0x68, 0x23, 0x00, 0x00, //0x000019a8 jmp LBB0_728 + //0x000019ad LBB0_317 + 0x4c, 0x89, 0xde, //0x000019ad movq %r11, %rsi + 0x48, 0x29, 0xc6, //0x000019b0 subq %rax, %rsi + 0x48, 0x83, 0xfe, 0x20, //0x000019b3 cmpq $32, %rsi + 0x0f, 0x82, 0xe8, 0x13, 0x00, 0x00, //0x000019b7 jb LBB0_539 + 0x48, 0x89, 0xc7, //0x000019bd movq %rax, %rdi + 0x48, 0xf7, 0xdf, //0x000019c0 negq %rdi + 0x4c, 0x8d, 0x40, 0x01, //0x000019c3 leaq $1(%rax), %r8 + 0x48, 0x8d, 0x50, 0xff, //0x000019c7 leaq $-1(%rax), %rdx + 0x49, 0x8d, 0x34, 0x06, //0x000019cb leaq (%r14,%rax), %rsi + 0x48, 0x83, 0xc6, 0xff, //0x000019cf addq $-1, %rsi + 0x48, 0x89, 0xc3, //0x000019d3 movq %rax, %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000019d6 .p2align 4, 0x90 + //0x000019e0 LBB0_319 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x1e, //0x000019e0 vmovdqu (%r14,%rbx), %ymm0 + 0xc5, 0xfd, 0x74, 0xcb, //0x000019e6 vpcmpeqb %ymm3, %ymm0, %ymm1 + 0xc5, 0x8d, 0xdb, 0xc0, //0x000019ea vpand %ymm0, %ymm14, %ymm0 + 0xc5, 0xfd, 0x74, 0x05, 0xaa, 0xe7, 0xff, 0xff, //0x000019ee vpcmpeqb $-6230(%rip), %ymm0, %ymm0 /* LCPI0_8+0(%rip) */ + 0xc5, 0xfd, 0xeb, 0xc1, //0x000019f6 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x000019fa vpmovmskb %ymm0, %ecx + 0x85, 0xc9, //0x000019fe testl %ecx, %ecx + 0x0f, 0x85, 0x57, 0x07, 0x00, 0x00, //0x00001a00 jne LBB0_388 + 0x48, 0x83, 0xc3, 0x20, //0x00001a06 addq $32, %rbx + 0x49, 0x8d, 0x0c, 0x3b, //0x00001a0a leaq (%r11,%rdi), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00001a0e addq $-32, %rcx + 0x48, 0x83, 0xc7, 0xe0, //0x00001a12 addq $-32, %rdi + 0x49, 0x83, 0xc0, 0x20, //0x00001a16 addq $32, %r8 + 0x48, 0x83, 0xc2, 0x20, //0x00001a1a addq $32, %rdx + 0x48, 0x83, 0xc6, 0x20, //0x00001a1e addq $32, %rsi + 0x48, 0x83, 0xf9, 0x1f, //0x00001a22 cmpq $31, %rcx + 0x0f, 0x87, 0xb4, 0xff, 0xff, 0xff, //0x00001a26 ja LBB0_319 + 0x4d, 0x89, 0xf0, //0x00001a2c movq %r14, %r8 + 0x49, 0x29, 0xf8, //0x00001a2f subq %rdi, %r8 + 0x49, 0x01, 0xfb, //0x00001a32 addq %rdi, %r11 + 0x4c, 0x89, 0xde, //0x00001a35 movq %r11, %rsi + 0x48, 0x83, 0xfe, 0x10, //0x00001a38 cmpq $16, %rsi + 0x4c, 0x8b, 0x1c, 0x24, //0x00001a3c movq (%rsp), %r11 + 0x0f, 0x82, 0x69, 0x00, 0x00, 0x00, //0x00001a40 jb LBB0_325 + //0x00001a46 LBB0_322 + 0x4d, 0x89, 0xf1, //0x00001a46 movq %r14, %r9 + 0x4d, 0x29, 0xc1, //0x00001a49 subq %r8, %r9 + 0x4c, 0x89, 0xc7, //0x00001a4c movq %r8, %rdi + 0x4c, 0x29, 0xf7, //0x00001a4f subq %r14, %rdi + 0x48, 0x83, 0xc7, 0x01, //0x00001a52 addq $1, %rdi + 0x49, 0x8d, 0x58, 0xff, //0x00001a56 leaq $-1(%r8), %rbx + 0x48, 0x89, 0xda, //0x00001a5a movq %rbx, %rdx + 0x4c, 0x29, 0xf2, //0x00001a5d subq %r14, %rdx + //0x00001a60 LBB0_323 + 0xc4, 0xc1, 0x7a, 0x6f, 0x00, //0x00001a60 vmovdqu (%r8), %xmm0 + 0xc5, 0xf9, 0x74, 0x0d, 0xa3, 0xe5, 0xff, 0xff, //0x00001a65 vpcmpeqb $-6749(%rip), %xmm0, %xmm1 /* LCPI0_11+0(%rip) */ + 0xc5, 0xf9, 0xdb, 0x05, 0xab, 0xe5, 0xff, 0xff, //0x00001a6d vpand $-6741(%rip), %xmm0, %xmm0 /* LCPI0_12+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0xb3, 0xe5, 0xff, 0xff, //0x00001a75 vpcmpeqb $-6733(%rip), %xmm0, %xmm0 /* LCPI0_13+0(%rip) */ + 0xc5, 0xf9, 0xeb, 0xc1, //0x00001a7d vpor %xmm1, %xmm0, %xmm0 + 0xc5, 0xf9, 0xd7, 0xc8, //0x00001a81 vpmovmskb %xmm0, %ecx + 0x85, 0xc9, //0x00001a85 testl %ecx, %ecx + 0x0f, 0x85, 0xd9, 0x10, 0x00, 0x00, //0x00001a87 jne LBB0_515 + 0x49, 0x83, 0xc0, 0x10, //0x00001a8d addq $16, %r8 + 0x48, 0x83, 0xc6, 0xf0, //0x00001a91 addq $-16, %rsi + 0x49, 0x83, 0xc1, 0xf0, //0x00001a95 addq $-16, %r9 + 0x48, 0x83, 0xc7, 0x10, //0x00001a99 addq $16, %rdi + 0x48, 0x83, 0xc2, 0x10, //0x00001a9d addq $16, %rdx + 0x48, 0x83, 0xc3, 0x10, //0x00001aa1 addq $16, %rbx + 0x48, 0x83, 0xfe, 0x0f, //0x00001aa5 cmpq $15, %rsi + 0x0f, 0x87, 0xb1, 0xff, 0xff, 0xff, //0x00001aa9 ja LBB0_323 + //0x00001aaf LBB0_325 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00001aaf vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00001ab3 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00001ab7 vmovdqa %ymm13, %ymm11 + 0x48, 0x85, 0xf6, //0x00001abc testq %rsi, %rsi + 0x0f, 0x84, 0x49, 0x00, 0x00, 0x00, //0x00001abf je LBB0_333 + 0x49, 0x8d, 0x0c, 0x30, //0x00001ac5 leaq (%r8,%rsi), %rcx + //0x00001ac9 LBB0_327 + 0x41, 0x0f, 0xb6, 0x10, //0x00001ac9 movzbl (%r8), %edx + 0x48, 0x83, 0xfa, 0x2c, //0x00001acd cmpq $44, %rdx + 0x0f, 0x87, 0x14, 0x00, 0x00, 0x00, //0x00001ad1 ja LBB0_329 + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00001ad7 movabsq $17596481021440, %rdi + 0x48, 0x0f, 0xa3, 0xd7, //0x00001ae1 btq %rdx, %rdi + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x00001ae5 jb LBB0_333 + //0x00001aeb LBB0_329 + 0x80, 0xfa, 0x5d, //0x00001aeb cmpb $93, %dl + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00001aee je LBB0_333 + 0x80, 0xfa, 0x7d, //0x00001af4 cmpb $125, %dl + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00001af7 je LBB0_333 + 0x49, 0x83, 0xc0, 0x01, //0x00001afd addq $1, %r8 + 0x48, 0x83, 0xc6, 0xff, //0x00001b01 addq $-1, %rsi + 0x0f, 0x85, 0xbe, 0xff, 0xff, 0xff, //0x00001b05 jne LBB0_327 + 0x49, 0x89, 0xc8, //0x00001b0b movq %rcx, %r8 + //0x00001b0e LBB0_333 + 0x4d, 0x29, 0xf0, //0x00001b0e subq %r14, %r8 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001b11 movq $8(%rsp), %r15 + 0x4d, 0x89, 0x07, //0x00001b16 movq %r8, (%r15) + 0x4c, 0x8b, 0x1c, 0x24, //0x00001b19 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001b1d vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001b22 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x71, 0xe7, 0xff, 0xff, //0x00001b27 vmovdqu $-6287(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x89, 0xe6, 0xff, 0xff, //0x00001b2f vmovdqu $-6519(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00001b37 vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x00001b3b vmovdqa %ymm1, %ymm12 + 0xe9, 0x7c, 0x06, 0x00, 0x00, //0x00001b3f jmp LBB0_393 + //0x00001b44 LBB0_334 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00001b44 movq $32(%rsp), %rcx + 0x4c, 0x8b, 0x49, 0x08, //0x00001b49 movq $8(%rcx), %r9 + 0x4d, 0x8b, 0x07, //0x00001b4d movq (%r15), %r8 + 0x4d, 0x29, 0xc1, //0x00001b50 subq %r8, %r9 + 0x4d, 0x01, 0xc6, //0x00001b53 addq %r8, %r14 + 0x45, 0x31, 0xdb, //0x00001b56 xorl %r11d, %r11d + 0x45, 0x31, 0xd2, //0x00001b59 xorl %r10d, %r10d + 0x45, 0x31, 0xff, //0x00001b5c xorl %r15d, %r15d + 0x31, 0xdb, //0x00001b5f xorl %ebx, %ebx + 0x49, 0x83, 0xf9, 0x40, //0x00001b61 cmpq $64, %r9 + 0x0f, 0x8d, 0x57, 0x01, 0x00, 0x00, //0x00001b65 jge LBB0_335 + //0x00001b6b LBB0_344 + 0x4d, 0x85, 0xc9, //0x00001b6b testq %r9, %r9 + 0x0f, 0x8e, 0x24, 0x23, 0x00, 0x00, //0x00001b6e jle LBB0_733 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00001b74 vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00001b78 vmovdqa %ymm13, %ymm11 + 0xc5, 0xf9, 0xef, 0xc0, //0x00001b7d vpxor %xmm0, %xmm0, %xmm0 + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x60, //0x00001b81 vmovdqu %ymm0, $96(%rsp) + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001b87 vmovdqu %ymm0, $64(%rsp) + 0x44, 0x89, 0xf1, //0x00001b8d movl %r14d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00001b90 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00001b96 cmpl $4033, %ecx + 0x0f, 0x82, 0x27, 0x00, 0x00, 0x00, //0x00001b9c jb LBB0_348 + 0x49, 0x83, 0xf9, 0x20, //0x00001ba2 cmpq $32, %r9 + 0x0f, 0x82, 0x40, 0x00, 0x00, 0x00, //0x00001ba6 jb LBB0_349 + 0xc4, 0xc1, 0x7e, 0x6f, 0x06, //0x00001bac vmovdqu (%r14), %ymm0 + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001bb1 vmovdqu %ymm0, $64(%rsp) + 0x49, 0x83, 0xc6, 0x20, //0x00001bb7 addq $32, %r14 + 0x49, 0x8d, 0x79, 0xe0, //0x00001bbb leaq $-32(%r9), %rdi + 0x48, 0x8d, 0x74, 0x24, 0x60, //0x00001bbf leaq $96(%rsp), %rsi + 0xe9, 0x2b, 0x00, 0x00, 0x00, //0x00001bc4 jmp LBB0_350 + //0x00001bc9 LBB0_348 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001bc9 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001bce vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xc5, 0xe6, 0xff, 0xff, //0x00001bd3 vmovdqu $-6459(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xdd, 0xe5, 0xff, 0xff, //0x00001bdb vmovdqu $-6691(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x00001be3 vmovdqa %ymm1, %ymm11 + 0xe9, 0xd6, 0x00, 0x00, 0x00, //0x00001be7 jmp LBB0_335 + //0x00001bec LBB0_349 + 0x48, 0x8d, 0x74, 0x24, 0x40, //0x00001bec leaq $64(%rsp), %rsi + 0x4c, 0x89, 0xcf, //0x00001bf1 movq %r9, %rdi + //0x00001bf4 LBB0_350 + 0x48, 0x83, 0xff, 0x10, //0x00001bf4 cmpq $16, %rdi + 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00001bf8 jb LBB0_351 + 0xc4, 0xc1, 0x7a, 0x6f, 0x06, //0x00001bfe vmovdqu (%r14), %xmm0 + 0xc5, 0xfa, 0x7f, 0x06, //0x00001c03 vmovdqu %xmm0, (%rsi) + 0x49, 0x83, 0xc6, 0x10, //0x00001c07 addq $16, %r14 + 0x48, 0x83, 0xc6, 0x10, //0x00001c0b addq $16, %rsi + 0x48, 0x83, 0xc7, 0xf0, //0x00001c0f addq $-16, %rdi + 0x48, 0x83, 0xff, 0x08, //0x00001c13 cmpq $8, %rdi + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00001c17 jae LBB0_358 + //0x00001c1d LBB0_352 + 0x48, 0x83, 0xff, 0x04, //0x00001c1d cmpq $4, %rdi + 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x00001c21 jl LBB0_353 + //0x00001c27 LBB0_359 + 0x41, 0x8b, 0x0e, //0x00001c27 movl (%r14), %ecx + 0x89, 0x0e, //0x00001c2a movl %ecx, (%rsi) + 0x49, 0x83, 0xc6, 0x04, //0x00001c2c addq $4, %r14 + 0x48, 0x83, 0xc6, 0x04, //0x00001c30 addq $4, %rsi + 0x48, 0x83, 0xc7, 0xfc, //0x00001c34 addq $-4, %rdi + 0x48, 0x83, 0xff, 0x02, //0x00001c38 cmpq $2, %rdi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001c3c jae LBB0_354 + 0xe9, 0x43, 0x00, 0x00, 0x00, //0x00001c42 jmp LBB0_355 + //0x00001c47 LBB0_351 + 0x48, 0x83, 0xff, 0x08, //0x00001c47 cmpq $8, %rdi + 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x00001c4b jb LBB0_352 + //0x00001c51 LBB0_358 + 0x49, 0x8b, 0x0e, //0x00001c51 movq (%r14), %rcx + 0x48, 0x89, 0x0e, //0x00001c54 movq %rcx, (%rsi) + 0x49, 0x83, 0xc6, 0x08, //0x00001c57 addq $8, %r14 + 0x48, 0x83, 0xc6, 0x08, //0x00001c5b addq $8, %rsi + 0x48, 0x83, 0xc7, 0xf8, //0x00001c5f addq $-8, %rdi + 0x48, 0x83, 0xff, 0x04, //0x00001c63 cmpq $4, %rdi + 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x00001c67 jge LBB0_359 + //0x00001c6d LBB0_353 + 0x48, 0x83, 0xff, 0x02, //0x00001c6d cmpq $2, %rdi + 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x00001c71 jb LBB0_355 + //0x00001c77 LBB0_354 + 0x41, 0x0f, 0xb7, 0x0e, //0x00001c77 movzwl (%r14), %ecx + 0x66, 0x89, 0x0e, //0x00001c7b movw %cx, (%rsi) + 0x49, 0x83, 0xc6, 0x02, //0x00001c7e addq $2, %r14 + 0x48, 0x83, 0xc6, 0x02, //0x00001c82 addq $2, %rsi + 0x48, 0x83, 0xc7, 0xfe, //0x00001c86 addq $-2, %rdi + //0x00001c8a LBB0_355 + 0x4c, 0x89, 0xf2, //0x00001c8a movq %r14, %rdx + 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001c8d leaq $64(%rsp), %r14 + 0x48, 0x85, 0xff, //0x00001c92 testq %rdi, %rdi + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001c95 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001c9a vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xf9, 0xe5, 0xff, 0xff, //0x00001c9f vmovdqu $-6663(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x11, 0xe5, 0xff, 0xff, //0x00001ca7 vmovdqu $-6895(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x00001caf vmovdqa %ymm1, %ymm11 + 0x0f, 0x84, 0x09, 0x00, 0x00, 0x00, //0x00001cb3 je LBB0_335 + 0x8a, 0x0a, //0x00001cb9 movb (%rdx), %cl + 0x88, 0x0e, //0x00001cbb movb %cl, (%rsi) + 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001cbd leaq $64(%rsp), %r14 + //0x00001cc2 LBB0_335 + 0xc4, 0x41, 0x7d, 0x6f, 0xfd, //0x00001cc2 vmovdqa %ymm13, %ymm15 + 0xc4, 0xc1, 0x7e, 0x6f, 0x0e, //0x00001cc7 vmovdqu (%r14), %ymm1 + 0xc4, 0xc1, 0x7e, 0x6f, 0x46, 0x20, //0x00001ccc vmovdqu $32(%r14), %ymm0 + 0xc5, 0xf5, 0x74, 0xd7, //0x00001cd2 vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00001cd6 vpmovmskb %ymm2, %edx + 0xc5, 0xfd, 0x74, 0xd7, //0x00001cda vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001cde vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001ce2 shlq $32, %rcx + 0x48, 0x09, 0xca, //0x00001ce6 orq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x00001ce9 movq %rdx, %rcx + 0xc4, 0x41, 0x7d, 0x6f, 0xea, //0x00001cec vmovdqa %ymm10, %ymm13 + 0x4c, 0x09, 0xd1, //0x00001cf1 orq %r10, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001cf4 jne LBB0_337 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001cfa movq $-1, %rdx + 0x45, 0x31, 0xd2, //0x00001d01 xorl %r10d, %r10d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001d04 jmp LBB0_338 + //0x00001d09 LBB0_337 + 0x4c, 0x89, 0xd1, //0x00001d09 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00001d0c notq %rcx + 0x48, 0x21, 0xd1, //0x00001d0f andq %rdx, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x00001d12 leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xd5, //0x00001d16 orq %r10, %r13 + 0x4c, 0x89, 0xef, //0x00001d19 movq %r13, %rdi + 0x48, 0xf7, 0xd7, //0x00001d1c notq %rdi + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001d1f movabsq $-6148914691236517206, %rsi + 0x48, 0x21, 0xf2, //0x00001d29 andq %rsi, %rdx + 0x48, 0x21, 0xfa, //0x00001d2c andq %rdi, %rdx + 0x45, 0x31, 0xd2, //0x00001d2f xorl %r10d, %r10d + 0x48, 0x01, 0xca, //0x00001d32 addq %rcx, %rdx + 0x41, 0x0f, 0x92, 0xc2, //0x00001d35 setb %r10b + 0x48, 0x01, 0xd2, //0x00001d39 addq %rdx, %rdx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001d3c movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xca, //0x00001d46 xorq %rcx, %rdx + 0x4c, 0x21, 0xea, //0x00001d49 andq %r13, %rdx + 0x48, 0xf7, 0xd2, //0x00001d4c notq %rdx + //0x00001d4f LBB0_338 + 0xc5, 0xfd, 0x74, 0xd6, //0x00001d4f vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001d53 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001d57 shlq $32, %rcx + 0xc5, 0xf5, 0x74, 0xd6, //0x00001d5b vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xf2, //0x00001d5f vpmovmskb %ymm2, %esi + 0x48, 0x09, 0xce, //0x00001d63 orq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00001d66 andq %rdx, %rsi + 0xc4, 0xe1, 0xf9, 0x6e, 0xd6, //0x00001d69 vmovq %rsi, %xmm2 + 0xc4, 0xe3, 0x69, 0x44, 0x15, 0x28, 0xe3, 0xff, 0xff, 0x00, //0x00001d6e vpclmulqdq $0, $-7384(%rip), %xmm2, %xmm2 /* LCPI0_26+0(%rip) */ + 0xc4, 0xc1, 0xf9, 0x7e, 0xd5, //0x00001d78 vmovq %xmm2, %r13 + 0x4d, 0x31, 0xdd, //0x00001d7d xorq %r11, %r13 + 0xc5, 0x7e, 0x6f, 0x15, 0xf8, 0xe3, 0xff, 0xff, //0x00001d80 vmovdqu $-7176(%rip), %ymm10 /* LCPI0_7+0(%rip) */ + 0xc5, 0xad, 0x74, 0xd1, //0x00001d88 vpcmpeqb %ymm1, %ymm10, %ymm2 + 0xc5, 0xfd, 0xd7, 0xf2, //0x00001d8c vpmovmskb %ymm2, %esi + 0xc5, 0xad, 0x74, 0xd0, //0x00001d90 vpcmpeqb %ymm0, %ymm10, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001d94 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001d98 shlq $32, %rcx + 0x48, 0x09, 0xce, //0x00001d9c orq %rcx, %rsi + 0x4c, 0x89, 0xe9, //0x00001d9f movq %r13, %rcx + 0x48, 0xf7, 0xd1, //0x00001da2 notq %rcx + 0x48, 0x21, 0xce, //0x00001da5 andq %rcx, %rsi + 0xc5, 0xfe, 0x6f, 0x15, 0xf0, 0xe3, 0xff, 0xff, //0x00001da8 vmovdqu $-7184(%rip), %ymm2 /* LCPI0_8+0(%rip) */ + 0xc5, 0xf5, 0x74, 0xca, //0x00001db0 vpcmpeqb %ymm2, %ymm1, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf9, //0x00001db4 vpmovmskb %ymm1, %edi + 0xc5, 0xfd, 0x74, 0xc2, //0x00001db8 vpcmpeqb %ymm2, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x00001dbc vpmovmskb %ymm0, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x00001dc0 shlq $32, %rdx + 0x48, 0x09, 0xd7, //0x00001dc4 orq %rdx, %rdi + 0x48, 0x21, 0xcf, //0x00001dc7 andq %rcx, %rdi + 0x0f, 0x84, 0x4d, 0x00, 0x00, 0x00, //0x00001dca je LBB0_342 + 0x4c, 0x8b, 0x1c, 0x24, //0x00001dd0 movq (%rsp), %r11 + 0xc4, 0x41, 0x7d, 0x6f, 0xd5, //0x00001dd4 vmovdqa %ymm13, %ymm10 + 0xc4, 0x41, 0x7d, 0x6f, 0xef, //0x00001dd9 vmovdqa %ymm15, %ymm13 + 0xc5, 0x7e, 0x6f, 0x3d, 0x5a, 0xe4, 0xff, 0xff, //0x00001dde vmovdqu $-7078(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001de6 .p2align 4, 0x90 + //0x00001df0 LBB0_340 + 0x48, 0x8d, 0x4f, 0xff, //0x00001df0 leaq $-1(%rdi), %rcx + 0x48, 0x89, 0xca, //0x00001df4 movq %rcx, %rdx + 0x48, 0x21, 0xf2, //0x00001df7 andq %rsi, %rdx + 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x00001dfa popcntq %rdx, %rdx + 0x4c, 0x01, 0xfa, //0x00001dff addq %r15, %rdx + 0x48, 0x39, 0xda, //0x00001e02 cmpq %rbx, %rdx + 0x0f, 0x86, 0x1a, 0x03, 0x00, 0x00, //0x00001e05 jbe LBB0_386 0x48, 0x83, 0xc3, 0x01, //0x00001e0b addq $1, %rbx - 0x48, 0x21, 0xca, //0x00001e0f andq %rcx, %rdx - 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00001e12 jne LBB0_362 - 0xe9, 0xb8, 0xfe, 0xff, 0xff, //0x00001e18 jmp LBB0_356 - //0x00001e1d LBB0_364 - 0x4d, 0x85, 0xc9, //0x00001e1d testq %r9, %r9 - 0x0f, 0x8e, 0x57, 0x1f, 0x00, 0x00, //0x00001e20 jle LBB0_720 - 0xc5, 0x7d, 0x7f, 0xe2, //0x00001e26 vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x00001e2a vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00001e2e vmovdqa %ymm13, %ymm11 - 0xc5, 0xf9, 0xef, 0xc0, //0x00001e33 vpxor %xmm0, %xmm0, %xmm0 - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x60, //0x00001e37 vmovdqu %ymm0, $96(%rsp) - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001e3d vmovdqu %ymm0, $64(%rsp) - 0x44, 0x89, 0xf0, //0x00001e43 movl %r14d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00001e46 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00001e4b cmpl $4033, %eax - 0x0f, 0x82, 0x27, 0x00, 0x00, 0x00, //0x00001e50 jb LBB0_368 - 0x49, 0x83, 0xf9, 0x20, //0x00001e56 cmpq $32, %r9 - 0x0f, 0x82, 0x44, 0x00, 0x00, 0x00, //0x00001e5a jb LBB0_369 - 0xc4, 0xc1, 0x7e, 0x6f, 0x06, //0x00001e60 vmovdqu (%r14), %ymm0 - 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001e65 vmovdqu %ymm0, $64(%rsp) - 0x49, 0x83, 0xc6, 0x20, //0x00001e6b addq $32, %r14 - 0x49, 0x8d, 0x79, 0xe0, //0x00001e6f leaq $-32(%r9), %rdi - 0x48, 0x8d, 0x74, 0x24, 0x60, //0x00001e73 leaq $96(%rsp), %rsi - 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00001e78 jmp LBB0_370 - //0x00001e7d LBB0_368 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001e7d vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001e82 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x11, 0xe4, 0xff, 0xff, //0x00001e87 vmovdqu $-7151(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x29, 0xe3, 0xff, 0xff, //0x00001e8f vmovdqu $-7383(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x00001e97 vmovdqa %ymm1, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe2, //0x00001e9b vmovdqa %ymm2, %ymm12 - 0xe9, 0x52, 0xfe, 0xff, 0xff, //0x00001e9f jmp LBB0_358 - //0x00001ea4 LBB0_369 - 0x48, 0x8d, 0x74, 0x24, 0x40, //0x00001ea4 leaq $64(%rsp), %rsi - 0x4c, 0x89, 0xcf, //0x00001ea9 movq %r9, %rdi - //0x00001eac LBB0_370 - 0x48, 0x83, 0xff, 0x10, //0x00001eac cmpq $16, %rdi - 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00001eb0 jb LBB0_371 - 0xc4, 0xc1, 0x7a, 0x6f, 0x06, //0x00001eb6 vmovdqu (%r14), %xmm0 - 0xc5, 0xfa, 0x7f, 0x06, //0x00001ebb vmovdqu %xmm0, (%rsi) - 0x49, 0x83, 0xc6, 0x10, //0x00001ebf addq $16, %r14 - 0x48, 0x83, 0xc6, 0x10, //0x00001ec3 addq $16, %rsi - 0x48, 0x83, 0xc7, 0xf0, //0x00001ec7 addq $-16, %rdi - 0x48, 0x83, 0xff, 0x08, //0x00001ecb cmpq $8, %rdi - 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00001ecf jae LBB0_378 - //0x00001ed5 LBB0_372 - 0x48, 0x83, 0xff, 0x04, //0x00001ed5 cmpq $4, %rdi - 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x00001ed9 jl LBB0_373 - //0x00001edf LBB0_379 - 0x41, 0x8b, 0x06, //0x00001edf movl (%r14), %eax - 0x89, 0x06, //0x00001ee2 movl %eax, (%rsi) - 0x49, 0x83, 0xc6, 0x04, //0x00001ee4 addq $4, %r14 - 0x48, 0x83, 0xc6, 0x04, //0x00001ee8 addq $4, %rsi - 0x48, 0x83, 0xc7, 0xfc, //0x00001eec addq $-4, %rdi - 0x48, 0x83, 0xff, 0x02, //0x00001ef0 cmpq $2, %rdi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001ef4 jae LBB0_374 - 0xe9, 0x43, 0x00, 0x00, 0x00, //0x00001efa jmp LBB0_375 - //0x00001eff LBB0_371 - 0x48, 0x83, 0xff, 0x08, //0x00001eff cmpq $8, %rdi - 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x00001f03 jb LBB0_372 - //0x00001f09 LBB0_378 - 0x49, 0x8b, 0x06, //0x00001f09 movq (%r14), %rax - 0x48, 0x89, 0x06, //0x00001f0c movq %rax, (%rsi) - 0x49, 0x83, 0xc6, 0x08, //0x00001f0f addq $8, %r14 - 0x48, 0x83, 0xc6, 0x08, //0x00001f13 addq $8, %rsi - 0x48, 0x83, 0xc7, 0xf8, //0x00001f17 addq $-8, %rdi - 0x48, 0x83, 0xff, 0x04, //0x00001f1b cmpq $4, %rdi - 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x00001f1f jge LBB0_379 - //0x00001f25 LBB0_373 - 0x48, 0x83, 0xff, 0x02, //0x00001f25 cmpq $2, %rdi - 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x00001f29 jb LBB0_375 - //0x00001f2f LBB0_374 - 0x41, 0x0f, 0xb7, 0x06, //0x00001f2f movzwl (%r14), %eax - 0x66, 0x89, 0x06, //0x00001f33 movw %ax, (%rsi) - 0x49, 0x83, 0xc6, 0x02, //0x00001f36 addq $2, %r14 - 0x48, 0x83, 0xc6, 0x02, //0x00001f3a addq $2, %rsi - 0x48, 0x83, 0xc7, 0xfe, //0x00001f3e addq $-2, %rdi - //0x00001f42 LBB0_375 - 0x4c, 0x89, 0xf2, //0x00001f42 movq %r14, %rdx - 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001f45 leaq $64(%rsp), %r14 - 0x48, 0x85, 0xff, //0x00001f4a testq %rdi, %rdi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00001f4d vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00001f52 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x41, 0xe3, 0xff, 0xff, //0x00001f57 vmovdqu $-7359(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x59, 0xe2, 0xff, 0xff, //0x00001f5f vmovdqu $-7591(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x00001f67 vmovdqa %ymm1, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe2, //0x00001f6b vmovdqa %ymm2, %ymm12 - 0x0f, 0x84, 0x81, 0xfd, 0xff, 0xff, //0x00001f6f je LBB0_358 - 0x8a, 0x02, //0x00001f75 movb (%rdx), %al - 0x88, 0x06, //0x00001f77 movb %al, (%rsi) - 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x00001f79 leaq $64(%rsp), %r14 - 0xe9, 0x73, 0xfd, 0xff, 0xff, //0x00001f7e jmp LBB0_358 - //0x00001f83 LBB0_380 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00001f83 movq $16(%rsp), %rdi - 0x48, 0x8b, 0x47, 0x08, //0x00001f88 movq $8(%rdi), %rax - 0x48, 0x0f, 0xbc, 0xca, //0x00001f8c bsfq %rdx, %rcx - 0x4c, 0x29, 0xc9, //0x00001f90 subq %r9, %rcx - 0x48, 0x01, 0xc8, //0x00001f93 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00001f96 addq $1, %rax - 0x49, 0x89, 0x45, 0x00, //0x00001f9a movq %rax, (%r13) - 0x48, 0x8b, 0x4f, 0x08, //0x00001f9e movq $8(%rdi), %rcx - 0x48, 0x39, 0xc8, //0x00001fa2 cmpq %rcx, %rax - 0x48, 0x0f, 0x47, 0xc1, //0x00001fa5 cmovaq %rcx, %rax - 0x49, 0x89, 0x45, 0x00, //0x00001fa9 movq %rax, (%r13) - 0x0f, 0x87, 0xe2, 0x1b, 0x00, 0x00, //0x00001fad ja LBB0_711 - 0x4d, 0x85, 0xc0, //0x00001fb3 testq %r8, %r8 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00001fb6 movq $24(%rsp), %r11 - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00001fbb movq $8(%rsp), %r15 - 0x0f, 0x8f, 0xda, 0xe3, 0xff, 0xff, //0x00001fc0 jg LBB0_3 - 0xe9, 0x61, 0x1b, 0x00, 0x00, //0x00001fc6 jmp LBB0_679 - //0x00001fcb LBB0_382 - 0x0f, 0xbc, 0xce, //0x00001fcb bsfl %esi, %ecx - 0x48, 0x29, 0xd1, //0x00001fce subq %rdx, %rcx - //0x00001fd1 LBB0_383 - 0x48, 0x8b, 0x1c, 0x24, //0x00001fd1 movq (%rsp), %rbx - 0x49, 0x89, 0x4d, 0x00, //0x00001fd5 movq %rcx, (%r13) - 0x48, 0x85, 0xdb, //0x00001fd9 testq %rbx, %rbx - 0x0f, 0x8f, 0xbe, 0xe3, 0xff, 0xff, //0x00001fdc jg LBB0_3 - 0xe9, 0xea, 0x1c, 0x00, 0x00, //0x00001fe2 jmp LBB0_698 - //0x00001fe7 LBB0_384 - 0x49, 0x8d, 0x41, 0xff, //0x00001fe7 leaq $-1(%r9), %rax - 0x48, 0x39, 0xc2, //0x00001feb cmpq %rax, %rdx - 0x49, 0xf7, 0xd1, //0x00001fee notq %r9 - 0x4d, 0x0f, 0x45, 0xcd, //0x00001ff1 cmovneq %r13, %r9 - 0x84, 0xc9, //0x00001ff5 testb %cl, %cl - 0x4d, 0x0f, 0x45, 0xe9, //0x00001ff7 cmovneq %r9, %r13 - 0xe9, 0x21, 0xf7, 0xff, 0xff, //0x00001ffb jmp LBB0_290 - //0x00002000 LBB0_385 - 0x4d, 0x29, 0xc8, //0x00002000 subq %r9, %r8 - 0x0f, 0x84, 0x5a, 0x1d, 0x00, 0x00, //0x00002003 je LBB0_718 - 0x49, 0x83, 0xf8, 0x40, //0x00002009 cmpq $64, %r8 - 0x0f, 0x82, 0xdb, 0x0b, 0x00, 0x00, //0x0000200d jb LBB0_518 - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002013 movq $-1, %r10 - 0x4c, 0x89, 0xc9, //0x0000201a movq %r9, %rcx - 0x45, 0x31, 0xdb, //0x0000201d xorl %r11d, %r11d - //0x00002020 .p2align 4, 0x90 - //0x00002020 LBB0_388 - 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x0e, //0x00002020 vmovdqu (%r14,%rcx), %ymm0 - 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x0e, 0x20, //0x00002026 vmovdqu $32(%r14,%rcx), %ymm1 - 0xc5, 0xfd, 0x74, 0xd6, //0x0000202d vpcmpeqb %ymm6, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xfa, //0x00002031 vpmovmskb %ymm2, %edi - 0xc5, 0xf5, 0x74, 0xd6, //0x00002035 vpcmpeqb %ymm6, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xc2, //0x00002039 vpmovmskb %ymm2, %eax - 0xc5, 0xfd, 0x74, 0xd7, //0x0000203d vpcmpeqb %ymm7, %ymm0, %ymm2 - 0xc5, 0xfd, 0xd7, 0xd2, //0x00002041 vpmovmskb %ymm2, %edx - 0xc5, 0xf5, 0x74, 0xd7, //0x00002045 vpcmpeqb %ymm7, %ymm1, %ymm2 - 0xc5, 0xfd, 0xd7, 0xda, //0x00002049 vpmovmskb %ymm2, %ebx - 0xc5, 0xbd, 0x64, 0xd1, //0x0000204d vpcmpgtb %ymm1, %ymm8, %ymm2 - 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00002051 vpcmpgtb %ymm9, %ymm1, %ymm1 - 0xc5, 0xed, 0xdb, 0xc9, //0x00002056 vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x0000205a vpmovmskb %ymm1, %esi - 0x48, 0xc1, 0xe0, 0x20, //0x0000205e shlq $32, %rax - 0x48, 0x09, 0xc7, //0x00002062 orq %rax, %rdi - 0x48, 0xc1, 0xe3, 0x20, //0x00002065 shlq $32, %rbx - 0x48, 0xc1, 0xe6, 0x20, //0x00002069 shlq $32, %rsi - 0x48, 0x09, 0xda, //0x0000206d orq %rbx, %rdx - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00002070 jne LBB0_399 - 0x4d, 0x85, 0xdb, //0x00002076 testq %r11, %r11 - 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00002079 jne LBB0_401 - 0x45, 0x31, 0xdb, //0x0000207f xorl %r11d, %r11d - //0x00002082 LBB0_391 - 0xc5, 0xbd, 0x64, 0xc8, //0x00002082 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00002086 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x0000208b vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x0000208f vpmovmskb %ymm0, %eax - 0x48, 0x09, 0xc6, //0x00002093 orq %rax, %rsi - 0x48, 0x85, 0xff, //0x00002096 testq %rdi, %rdi - 0x0f, 0x85, 0x87, 0x00, 0x00, 0x00, //0x00002099 jne LBB0_402 - 0x48, 0x85, 0xf6, //0x0000209f testq %rsi, %rsi - 0x0f, 0x85, 0x7c, 0x1c, 0x00, 0x00, //0x000020a2 jne LBB0_712 - 0x49, 0x83, 0xc0, 0xc0, //0x000020a8 addq $-64, %r8 - 0x48, 0x83, 0xc1, 0x40, //0x000020ac addq $64, %rcx - 0x49, 0x83, 0xf8, 0x3f, //0x000020b0 cmpq $63, %r8 - 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x000020b4 ja LBB0_388 - 0xe9, 0x39, 0x09, 0x00, 0x00, //0x000020ba jmp LBB0_394 - //0x000020bf LBB0_399 - 0x49, 0x83, 0xfa, 0xff, //0x000020bf cmpq $-1, %r10 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x000020c3 jne LBB0_401 - 0x4c, 0x0f, 0xbc, 0xd2, //0x000020c9 bsfq %rdx, %r10 - 0x49, 0x01, 0xca, //0x000020cd addq %rcx, %r10 - //0x000020d0 LBB0_401 - 0x4c, 0x89, 0xd8, //0x000020d0 movq %r11, %rax - 0x48, 0xf7, 0xd0, //0x000020d3 notq %rax - 0x48, 0x21, 0xd0, //0x000020d6 andq %rdx, %rax - 0x48, 0x89, 0x0c, 0x24, //0x000020d9 movq %rcx, (%rsp) - 0x48, 0x8d, 0x0c, 0x00, //0x000020dd leaq (%rax,%rax), %rcx - 0x4c, 0x09, 0xd9, //0x000020e1 orq %r11, %rcx - 0x48, 0x89, 0xcb, //0x000020e4 movq %rcx, %rbx - 0x48, 0xf7, 0xd3, //0x000020e7 notq %rbx - 0x48, 0x21, 0xd3, //0x000020ea andq %rdx, %rbx - 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000020ed movabsq $-6148914691236517206, %rdx - 0x48, 0x21, 0xd3, //0x000020f7 andq %rdx, %rbx - 0x45, 0x31, 0xdb, //0x000020fa xorl %r11d, %r11d - 0x48, 0x01, 0xc3, //0x000020fd addq %rax, %rbx - 0x41, 0x0f, 0x92, 0xc3, //0x00002100 setb %r11b - 0x48, 0x01, 0xdb, //0x00002104 addq %rbx, %rbx - 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002107 movabsq $6148914691236517205, %rax - 0x48, 0x31, 0xc3, //0x00002111 xorq %rax, %rbx - 0x48, 0x21, 0xcb, //0x00002114 andq %rcx, %rbx - 0x48, 0x8b, 0x0c, 0x24, //0x00002117 movq (%rsp), %rcx - 0x48, 0xf7, 0xd3, //0x0000211b notq %rbx - 0x48, 0x21, 0xdf, //0x0000211e andq %rbx, %rdi - 0xe9, 0x5c, 0xff, 0xff, 0xff, //0x00002121 jmp LBB0_391 - //0x00002126 LBB0_402 - 0x48, 0x0f, 0xbc, 0xc7, //0x00002126 bsfq %rdi, %rax - 0x48, 0x85, 0xf6, //0x0000212a testq %rsi, %rsi - 0x0f, 0x84, 0x9f, 0x03, 0x00, 0x00, //0x0000212d je LBB0_458 - 0x48, 0x0f, 0xbc, 0xd6, //0x00002133 bsfq %rsi, %rdx - 0xe9, 0x9b, 0x03, 0x00, 0x00, //0x00002137 jmp LBB0_459 - //0x0000213c LBB0_404 - 0x48, 0x8b, 0x44, 0x24, 0x38, //0x0000213c movq $56(%rsp), %rax - 0x8a, 0x48, 0x01, //0x00002141 movb $1(%rax), %cl - 0x80, 0xc1, 0xd2, //0x00002144 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x00002147 cmpb $55, %cl - 0x0f, 0x87, 0x80, 0xf3, 0xff, 0xff, //0x0000214a ja LBB0_257 - 0x0f, 0xb6, 0xc1, //0x00002150 movzbl %cl, %eax - 0x48, 0xb9, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00002153 movabsq $36028797027352577, %rcx - 0x48, 0x0f, 0xa3, 0xc1, //0x0000215d btq %rax, %rcx - 0x48, 0x8b, 0x0c, 0x24, //0x00002161 movq (%rsp), %rcx - 0x0f, 0x83, 0x1e, 0x08, 0x00, 0x00, //0x00002165 jae LBB0_498 - //0x0000216b LBB0_406 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000216b movq $-1, %r8 - 0x49, 0x83, 0xfa, 0x20, //0x00002172 cmpq $32, %r10 - 0x0f, 0x82, 0x1c, 0x0a, 0x00, 0x00, //0x00002176 jb LBB0_515 - 0x45, 0x31, 0xc9, //0x0000217c xorl %r9d, %r9d - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000217f movq $-1, %r15 - 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x00002186 movq $-1, $40(%rsp) - 0x4c, 0x8b, 0x5c, 0x24, 0x38, //0x0000218f movq $56(%rsp), %r11 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002194 .p2align 4, 0x90 - //0x000021a0 LBB0_408 - 0xc4, 0x81, 0x7e, 0x6f, 0x04, 0x0b, //0x000021a0 vmovdqu (%r11,%r9), %ymm0 - 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x000021a6 vpcmpgtb %ymm10, %ymm0, %ymm1 - 0xc5, 0x95, 0x64, 0xd0, //0x000021ab vpcmpgtb %ymm0, %ymm13, %ymm2 - 0xc5, 0xed, 0xdb, 0xc9, //0x000021af vpand %ymm1, %ymm2, %ymm1 - 0xc5, 0x85, 0x74, 0xd0, //0x000021b3 vpcmpeqb %ymm0, %ymm15, %ymm2 - 0xc5, 0xfd, 0x74, 0x1d, 0xa1, 0xe0, 0xff, 0xff, //0x000021b7 vpcmpeqb $-8031(%rip), %ymm0, %ymm3 /* LCPI0_17+0(%rip) */ - 0xc5, 0xe5, 0xeb, 0xd2, //0x000021bf vpor %ymm2, %ymm3, %ymm2 - 0xc5, 0x8d, 0xdb, 0xd8, //0x000021c3 vpand %ymm0, %ymm14, %ymm3 - 0xc5, 0xfd, 0x74, 0x05, 0xb1, 0xe0, 0xff, 0xff, //0x000021c7 vpcmpeqb $-8015(%rip), %ymm0, %ymm0 /* LCPI0_18+0(%rip) */ - 0xc5, 0xfd, 0xd7, 0xd0, //0x000021cf vpmovmskb %ymm0, %edx - 0xc5, 0xe5, 0x74, 0xdc, //0x000021d3 vpcmpeqb %ymm4, %ymm3, %ymm3 - 0xc5, 0xfd, 0xd7, 0xfb, //0x000021d7 vpmovmskb %ymm3, %edi - 0xc5, 0xfd, 0xd7, 0xf2, //0x000021db vpmovmskb %ymm2, %esi - 0xc5, 0xf5, 0xeb, 0xc0, //0x000021df vpor %ymm0, %ymm1, %ymm0 - 0xc5, 0xe5, 0xeb, 0xca, //0x000021e3 vpor %ymm2, %ymm3, %ymm1 - 0xc5, 0xfd, 0xeb, 0xc1, //0x000021e7 vpor %ymm1, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xc0, //0x000021eb vpmovmskb %ymm0, %eax - 0x48, 0xf7, 0xd0, //0x000021ef notq %rax - 0x48, 0x0f, 0xbc, 0xc8, //0x000021f2 bsfq %rax, %rcx - 0x83, 0xf9, 0x20, //0x000021f6 cmpl $32, %ecx - 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x000021f9 je LBB0_410 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x000021ff movl $-1, %eax - 0xd3, 0xe0, //0x00002204 shll %cl, %eax - 0xf7, 0xd0, //0x00002206 notl %eax - 0x21, 0xc2, //0x00002208 andl %eax, %edx - 0x21, 0xc7, //0x0000220a andl %eax, %edi - 0x21, 0xf0, //0x0000220c andl %esi, %eax - 0x89, 0xc6, //0x0000220e movl %eax, %esi - //0x00002210 LBB0_410 - 0x8d, 0x5a, 0xff, //0x00002210 leal $-1(%rdx), %ebx - 0x21, 0xd3, //0x00002213 andl %edx, %ebx - 0xc5, 0xfe, 0x6f, 0x1d, 0xa3, 0xdf, 0xff, 0xff, //0x00002215 vmovdqu $-8285(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0x0f, 0x85, 0x12, 0x07, 0x00, 0x00, //0x0000221d jne LBB0_492 - 0x8d, 0x5f, 0xff, //0x00002223 leal $-1(%rdi), %ebx - 0x21, 0xfb, //0x00002226 andl %edi, %ebx - 0x0f, 0x85, 0x07, 0x07, 0x00, 0x00, //0x00002228 jne LBB0_492 - 0x8d, 0x5e, 0xff, //0x0000222e leal $-1(%rsi), %ebx - 0x21, 0xf3, //0x00002231 andl %esi, %ebx - 0x0f, 0x85, 0xfc, 0x06, 0x00, 0x00, //0x00002233 jne LBB0_492 - 0x85, 0xd2, //0x00002239 testl %edx, %edx - 0x0f, 0x84, 0x17, 0x00, 0x00, 0x00, //0x0000223b je LBB0_416 - 0x0f, 0xbc, 0xd2, //0x00002241 bsfl %edx, %edx - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x00002244 cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0x0d, 0x07, 0x00, 0x00, //0x0000224a jne LBB0_493 - 0x4c, 0x01, 0xca, //0x00002250 addq %r9, %rdx - 0x48, 0x89, 0x54, 0x24, 0x28, //0x00002253 movq %rdx, $40(%rsp) - //0x00002258 LBB0_416 - 0x85, 0xff, //0x00002258 testl %edi, %edi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000225a je LBB0_419 - 0x0f, 0xbc, 0xd7, //0x00002260 bsfl %edi, %edx - 0x49, 0x83, 0xff, 0xff, //0x00002263 cmpq $-1, %r15 - 0x0f, 0x85, 0xf0, 0x06, 0x00, 0x00, //0x00002267 jne LBB0_493 - 0x4c, 0x01, 0xca, //0x0000226d addq %r9, %rdx - 0x49, 0x89, 0xd7, //0x00002270 movq %rdx, %r15 - //0x00002273 LBB0_419 - 0x85, 0xf6, //0x00002273 testl %esi, %esi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00002275 je LBB0_422 - 0x0f, 0xbc, 0xd6, //0x0000227b bsfl %esi, %edx - 0x49, 0x83, 0xf8, 0xff, //0x0000227e cmpq $-1, %r8 - 0x0f, 0x85, 0xd5, 0x06, 0x00, 0x00, //0x00002282 jne LBB0_493 - 0x4c, 0x01, 0xca, //0x00002288 addq %r9, %rdx - 0x49, 0x89, 0xd0, //0x0000228b movq %rdx, %r8 - //0x0000228e LBB0_422 - 0x83, 0xf9, 0x20, //0x0000228e cmpl $32, %ecx - 0x0f, 0x85, 0xf9, 0x01, 0x00, 0x00, //0x00002291 jne LBB0_456 - 0x49, 0x83, 0xc2, 0xe0, //0x00002297 addq $-32, %r10 - 0x49, 0x83, 0xc1, 0x20, //0x0000229b addq $32, %r9 - 0x49, 0x83, 0xfa, 0x1f, //0x0000229f cmpq $31, %r10 - 0x0f, 0x87, 0xf7, 0xfe, 0xff, 0xff, //0x000022a3 ja LBB0_408 - 0xc5, 0xf8, 0x77, //0x000022a9 vzeroupper - 0x4d, 0x01, 0xd9, //0x000022ac addq %r11, %r9 - 0x4c, 0x89, 0x6c, 0x24, 0x30, //0x000022af movq %r13, $48(%rsp) - 0x49, 0x83, 0xfa, 0x10, //0x000022b4 cmpq $16, %r10 - 0x0f, 0x82, 0x35, 0x01, 0x00, 0x00, //0x000022b8 jb LBB0_443 - //0x000022be LBB0_425 - 0x4c, 0x89, 0xcb, //0x000022be movq %r9, %rbx - 0x4c, 0x29, 0xdb, //0x000022c1 subq %r11, %rbx - 0x45, 0x31, 0xed, //0x000022c4 xorl %r13d, %r13d - //0x000022c7 LBB0_426 - 0xc4, 0x81, 0x7a, 0x6f, 0x04, 0x29, //0x000022c7 vmovdqu (%r9,%r13), %xmm0 - 0xc5, 0xf9, 0x64, 0x0d, 0x6b, 0xdd, 0xff, 0xff, //0x000022cd vpcmpgtb $-8853(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ - 0xc5, 0xfa, 0x6f, 0x15, 0x73, 0xdd, 0xff, 0xff, //0x000022d5 vmovdqu $-8845(%rip), %xmm2 /* LCPI0_21+0(%rip) */ - 0xc5, 0xe9, 0x64, 0xd0, //0x000022dd vpcmpgtb %xmm0, %xmm2, %xmm2 - 0xc5, 0xf1, 0xdb, 0xca, //0x000022e1 vpand %xmm2, %xmm1, %xmm1 - 0xc5, 0xf9, 0x74, 0x15, 0x73, 0xdd, 0xff, 0xff, //0x000022e5 vpcmpeqb $-8845(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x1d, 0x7b, 0xdd, 0xff, 0xff, //0x000022ed vpcmpeqb $-8837(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xd2, //0x000022f5 vpor %xmm2, %xmm3, %xmm2 - 0xc5, 0xf9, 0xdb, 0x1d, 0x1f, 0xdd, 0xff, 0xff, //0x000022f9 vpand $-8929(%rip), %xmm0, %xmm3 /* LCPI0_12+0(%rip) */ - 0xc5, 0xf9, 0x74, 0x05, 0x77, 0xdd, 0xff, 0xff, //0x00002301 vpcmpeqb $-8841(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ - 0xc5, 0xe1, 0x74, 0x1d, 0x7f, 0xdd, 0xff, 0xff, //0x00002309 vpcmpeqb $-8833(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ - 0xc5, 0xe1, 0xeb, 0xe0, //0x00002311 vpor %xmm0, %xmm3, %xmm4 - 0xc5, 0xe9, 0xeb, 0xc9, //0x00002315 vpor %xmm1, %xmm2, %xmm1 - 0xc5, 0xd9, 0xeb, 0xc9, //0x00002319 vpor %xmm1, %xmm4, %xmm1 - 0xc5, 0x79, 0xd7, 0xd8, //0x0000231d vpmovmskb %xmm0, %r11d - 0xc5, 0xf9, 0xd7, 0xd3, //0x00002321 vpmovmskb %xmm3, %edx - 0xc5, 0xf9, 0xd7, 0xfa, //0x00002325 vpmovmskb %xmm2, %edi - 0xc5, 0xf9, 0xd7, 0xc1, //0x00002329 vpmovmskb %xmm1, %eax - 0xf7, 0xd0, //0x0000232d notl %eax - 0x0f, 0xbc, 0xc8, //0x0000232f bsfl %eax, %ecx - 0x83, 0xf9, 0x10, //0x00002332 cmpl $16, %ecx - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002335 je LBB0_428 - 0xb8, 0xff, 0xff, 0xff, 0xff, //0x0000233b movl $-1, %eax - 0xd3, 0xe0, //0x00002340 shll %cl, %eax - 0xf7, 0xd0, //0x00002342 notl %eax - 0x41, 0x21, 0xc3, //0x00002344 andl %eax, %r11d - 0x21, 0xc2, //0x00002347 andl %eax, %edx - 0x21, 0xf8, //0x00002349 andl %edi, %eax - 0x89, 0xc7, //0x0000234b movl %eax, %edi - //0x0000234d LBB0_428 - 0x41, 0x8d, 0x73, 0xff, //0x0000234d leal $-1(%r11), %esi - 0x44, 0x21, 0xde, //0x00002351 andl %r11d, %esi - 0x0f, 0x85, 0xe8, 0x06, 0x00, 0x00, //0x00002354 jne LBB0_499 - 0x8d, 0x72, 0xff, //0x0000235a leal $-1(%rdx), %esi - 0x21, 0xd6, //0x0000235d andl %edx, %esi - 0x0f, 0x85, 0xdd, 0x06, 0x00, 0x00, //0x0000235f jne LBB0_499 - 0x8d, 0x77, 0xff, //0x00002365 leal $-1(%rdi), %esi - 0x21, 0xfe, //0x00002368 andl %edi, %esi - 0x0f, 0x85, 0xd2, 0x06, 0x00, 0x00, //0x0000236a jne LBB0_499 - 0x45, 0x85, 0xdb, //0x00002370 testl %r11d, %r11d - 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x00002373 je LBB0_434 - 0x41, 0x0f, 0xbc, 0xf3, //0x00002379 bsfl %r11d, %esi - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000237d cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0x9d, 0x07, 0x00, 0x00, //0x00002383 jne LBB0_509 - 0x48, 0x01, 0xde, //0x00002389 addq %rbx, %rsi - 0x4c, 0x01, 0xee, //0x0000238c addq %r13, %rsi - 0x48, 0x89, 0x74, 0x24, 0x28, //0x0000238f movq %rsi, $40(%rsp) - //0x00002394 LBB0_434 - 0x4c, 0x8b, 0x5c, 0x24, 0x38, //0x00002394 movq $56(%rsp), %r11 - 0x85, 0xd2, //0x00002399 testl %edx, %edx - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x0000239b je LBB0_437 - 0x0f, 0xbc, 0xd2, //0x000023a1 bsfl %edx, %edx - 0x49, 0x83, 0xff, 0xff, //0x000023a4 cmpq $-1, %r15 - 0x0f, 0x85, 0xe8, 0x06, 0x00, 0x00, //0x000023a8 jne LBB0_503 - 0x48, 0x01, 0xda, //0x000023ae addq %rbx, %rdx - 0x4c, 0x01, 0xea, //0x000023b1 addq %r13, %rdx - 0x49, 0x89, 0xd7, //0x000023b4 movq %rdx, %r15 - //0x000023b7 LBB0_437 - 0x85, 0xff, //0x000023b7 testl %edi, %edi - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000023b9 je LBB0_440 - 0x0f, 0xbc, 0xd7, //0x000023bf bsfl %edi, %edx - 0x49, 0x83, 0xf8, 0xff, //0x000023c2 cmpq $-1, %r8 - 0x0f, 0x85, 0xca, 0x06, 0x00, 0x00, //0x000023c6 jne LBB0_503 - 0x48, 0x01, 0xda, //0x000023cc addq %rbx, %rdx - 0x4c, 0x01, 0xea, //0x000023cf addq %r13, %rdx - 0x49, 0x89, 0xd0, //0x000023d2 movq %rdx, %r8 - //0x000023d5 LBB0_440 - 0x83, 0xf9, 0x10, //0x000023d5 cmpl $16, %ecx - 0x0f, 0x85, 0x82, 0x01, 0x00, 0x00, //0x000023d8 jne LBB0_466 - 0x49, 0x83, 0xc2, 0xf0, //0x000023de addq $-16, %r10 - 0x49, 0x83, 0xc5, 0x10, //0x000023e2 addq $16, %r13 - 0x49, 0x83, 0xfa, 0x0f, //0x000023e6 cmpq $15, %r10 - 0x0f, 0x87, 0xd7, 0xfe, 0xff, 0xff, //0x000023ea ja LBB0_426 - 0x4d, 0x01, 0xe9, //0x000023f0 addq %r13, %r9 - //0x000023f3 LBB0_443 - 0x4d, 0x85, 0xd2, //0x000023f3 testq %r10, %r10 - 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x000023f6 movq $48(%rsp), %r13 - 0x0f, 0x84, 0x89, 0x01, 0x00, 0x00, //0x000023fb je LBB0_468 - 0x4b, 0x8d, 0x34, 0x11, //0x00002401 leaq (%r9,%r10), %rsi - 0x4c, 0x89, 0xcf, //0x00002405 movq %r9, %rdi - 0x4c, 0x29, 0xdf, //0x00002408 subq %r11, %rdi - 0x31, 0xc9, //0x0000240b xorl %ecx, %ecx - 0xe9, 0x1b, 0x00, 0x00, 0x00, //0x0000240d jmp LBB0_448 - //0x00002412 LBB0_445 - 0x49, 0x83, 0xf8, 0xff, //0x00002412 cmpq $-1, %r8 - 0x0f, 0x85, 0x2e, 0x06, 0x00, 0x00, //0x00002416 jne LBB0_500 - 0x4c, 0x8d, 0x04, 0x0f, //0x0000241c leaq (%rdi,%rcx), %r8 - //0x00002420 .p2align 4, 0x90 - //0x00002420 LBB0_447 - 0x48, 0x83, 0xc1, 0x01, //0x00002420 addq $1, %rcx - 0x49, 0x39, 0xca, //0x00002424 cmpq %rcx, %r10 - 0x0f, 0x84, 0xeb, 0x04, 0x00, 0x00, //0x00002427 je LBB0_491 - //0x0000242d LBB0_448 - 0x41, 0x0f, 0xbe, 0x14, 0x09, //0x0000242d movsbl (%r9,%rcx), %edx - 0x8d, 0x42, 0xd0, //0x00002432 leal $-48(%rdx), %eax - 0x83, 0xf8, 0x0a, //0x00002435 cmpl $10, %eax - 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x00002438 jb LBB0_447 - 0x8d, 0x5a, 0xd5, //0x0000243e leal $-43(%rdx), %ebx - 0x83, 0xfb, 0x1a, //0x00002441 cmpl $26, %ebx - 0x0f, 0x87, 0x2a, 0x00, 0x00, 0x00, //0x00002444 ja LBB0_453 - 0x48, 0x8d, 0x15, 0x97, 0x1b, 0x00, 0x00, //0x0000244a leaq $7063(%rip), %rdx /* LJTI0_2+0(%rip) */ - 0x48, 0x63, 0x04, 0x9a, //0x00002451 movslq (%rdx,%rbx,4), %rax - 0x48, 0x01, 0xd0, //0x00002455 addq %rdx, %rax - 0xff, 0xe0, //0x00002458 jmpq *%rax - //0x0000245a LBB0_451 - 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000245a cmpq $-1, $40(%rsp) - 0x0f, 0x85, 0xe4, 0x05, 0x00, 0x00, //0x00002460 jne LBB0_500 - 0x48, 0x8d, 0x04, 0x0f, //0x00002466 leaq (%rdi,%rcx), %rax - 0x48, 0x89, 0x44, 0x24, 0x28, //0x0000246a movq %rax, $40(%rsp) - 0xe9, 0xac, 0xff, 0xff, 0xff, //0x0000246f jmp LBB0_447 - //0x00002474 LBB0_453 - 0x83, 0xfa, 0x65, //0x00002474 cmpl $101, %edx - 0x0f, 0x85, 0x0a, 0x01, 0x00, 0x00, //0x00002477 jne LBB0_467 - //0x0000247d LBB0_454 - 0x49, 0x83, 0xff, 0xff, //0x0000247d cmpq $-1, %r15 - 0x0f, 0x85, 0xc3, 0x05, 0x00, 0x00, //0x00002481 jne LBB0_500 - 0x4c, 0x8d, 0x3c, 0x0f, //0x00002487 leaq (%rdi,%rcx), %r15 - 0xe9, 0x90, 0xff, 0xff, 0xff, //0x0000248b jmp LBB0_447 - //0x00002490 LBB0_456 - 0x4c, 0x01, 0xc9, //0x00002490 addq %r9, %rcx - 0x4c, 0x01, 0xd9, //0x00002493 addq %r11, %rcx - 0xc5, 0xf8, 0x77, //0x00002496 vzeroupper - 0x49, 0x89, 0xc9, //0x00002499 movq %rcx, %r9 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000249c movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x28, //0x000024a3 movq $40(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x000024a8 testq %rdx, %rdx - 0x0f, 0x85, 0xee, 0x00, 0x00, 0x00, //0x000024ab jne LBB0_469 - 0xe9, 0x5a, 0x18, 0x00, 0x00, //0x000024b1 jmp LBB0_709 - //0x000024b6 LBB0_676 - 0x4d, 0x29, 0xf4, //0x000024b6 subq %r14, %r12 - 0x49, 0x01, 0xd4, //0x000024b9 addq %rdx, %r12 - 0x49, 0x39, 0xdc, //0x000024bc cmpq %rbx, %r12 - 0x0f, 0x82, 0xcd, 0xe0, 0xff, 0xff, //0x000024bf jb LBB0_35 - 0xe9, 0x48, 0x16, 0x00, 0x00, //0x000024c5 jmp LBB0_677 - //0x000024ca LBB0_457 - 0x4d, 0x89, 0xfd, //0x000024ca movq %r15, %r13 - 0xe9, 0x29, 0xf1, 0xff, 0xff, //0x000024cd jmp LBB0_279 - //0x000024d2 LBB0_458 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x000024d2 movl $64, %edx - //0x000024d7 LBB0_459 - 0x4d, 0x89, 0xd3, //0x000024d7 movq %r10, %r11 - 0x48, 0x39, 0xc2, //0x000024da cmpq %rax, %rdx - 0x0f, 0x82, 0x88, 0x18, 0x00, 0x00, //0x000024dd jb LBB0_719 - 0xc5, 0x7d, 0x7f, 0xea, //0x000024e3 vmovdqa %ymm13, %ymm2 - 0x48, 0x01, 0xc1, //0x000024e7 addq %rax, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x000024ea addq $1, %rcx - //0x000024ee LBB0_461 - 0x48, 0x85, 0xc9, //0x000024ee testq %rcx, %rcx - 0x0f, 0x88, 0xfd, 0x17, 0x00, 0x00, //0x000024f1 js LBB0_706 - 0x49, 0x89, 0x4d, 0x00, //0x000024f7 movq %rcx, (%r13) - 0x4d, 0x85, 0xc9, //0x000024fb testq %r9, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x000024fe movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002503 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002508 movq $8(%rsp), %r15 - 0xc5, 0x7d, 0x6f, 0xea, //0x0000250d vmovdqa %ymm2, %ymm13 - 0x0f, 0x8f, 0x89, 0xde, 0xff, 0xff, //0x00002511 jg LBB0_3 - 0xe9, 0x1d, 0x16, 0x00, 0x00, //0x00002517 jmp LBB0_463 - //0x0000251c LBB0_156 - 0x4d, 0x85, 0xff, //0x0000251c testq %r15, %r15 - 0x0f, 0x85, 0x37, 0x07, 0x00, 0x00, //0x0000251f jne LBB0_522 - 0x49, 0x01, 0xf1, //0x00002525 addq %rsi, %r9 - 0x49, 0x29, 0xf2, //0x00002528 subq %rsi, %r10 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x0000252b movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002530 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002535 movq $8(%rsp), %r15 - //0x0000253a LBB0_158 - 0x4d, 0x85, 0xd2, //0x0000253a testq %r10, %r10 - 0x0f, 0x8f, 0x9d, 0x07, 0x00, 0x00, //0x0000253d jg LBB0_526 - 0xe9, 0x4d, 0x16, 0x00, 0x00, //0x00002543 jmp LBB0_711 - //0x00002548 LBB0_464 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002548 vmovdqa %ymm13, %ymm0 - 0x0f, 0xbc, 0xc3, //0x0000254c bsfl %ebx, %eax - 0xe9, 0xb9, 0x01, 0x00, 0x00, //0x0000254f jmp LBB0_484 - //0x00002554 LBB0_465 - 0x66, 0x0f, 0xbc, 0xc0, //0x00002554 bsfw %ax, %ax - 0x0f, 0xb7, 0xc8, //0x00002558 movzwl %ax, %ecx - 0xe9, 0xf7, 0xe9, 0xff, 0xff, //0x0000255b jmp LBB0_176 - //0x00002560 LBB0_466 - 0x89, 0xc8, //0x00002560 movl %ecx, %eax - 0x49, 0x01, 0xc1, //0x00002562 addq %rax, %r9 - 0x4d, 0x01, 0xe9, //0x00002565 addq %r13, %r9 - 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x00002568 movq $48(%rsp), %r13 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000256d movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x28, //0x00002574 movq $40(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00002579 testq %rdx, %rdx - 0x0f, 0x85, 0x1d, 0x00, 0x00, 0x00, //0x0000257c jne LBB0_469 - 0xe9, 0x89, 0x17, 0x00, 0x00, //0x00002582 jmp LBB0_709 - //0x00002587 LBB0_467 - 0x49, 0x01, 0xc9, //0x00002587 addq %rcx, %r9 - //0x0000258a LBB0_468 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000258a movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x28, //0x00002591 movq $40(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00002596 testq %rdx, %rdx - 0x0f, 0x84, 0x71, 0x17, 0x00, 0x00, //0x00002599 je LBB0_709 - //0x0000259f LBB0_469 - 0x4d, 0x85, 0xc0, //0x0000259f testq %r8, %r8 - 0x0f, 0x84, 0x68, 0x17, 0x00, 0x00, //0x000025a2 je LBB0_709 - 0x4d, 0x85, 0xff, //0x000025a8 testq %r15, %r15 - 0x0f, 0x84, 0x5f, 0x17, 0x00, 0x00, //0x000025ab je LBB0_709 - 0x4d, 0x29, 0xd9, //0x000025b1 subq %r11, %r9 - 0x49, 0x8d, 0x49, 0xff, //0x000025b4 leaq $-1(%r9), %rcx - 0x48, 0x39, 0xca, //0x000025b8 cmpq %rcx, %rdx - 0x0f, 0x84, 0x97, 0x00, 0x00, 0x00, //0x000025bb je LBB0_477 - 0x49, 0x39, 0xc8, //0x000025c1 cmpq %rcx, %r8 - 0x0f, 0x84, 0x8e, 0x00, 0x00, 0x00, //0x000025c4 je LBB0_477 - 0x49, 0x39, 0xcf, //0x000025ca cmpq %rcx, %r15 - 0x0f, 0x84, 0x85, 0x00, 0x00, 0x00, //0x000025cd je LBB0_477 - 0x4d, 0x85, 0xc0, //0x000025d3 testq %r8, %r8 - 0xc5, 0xfe, 0x6f, 0x2d, 0xe2, 0xda, 0xff, 0xff, //0x000025d6 vmovdqu $-9502(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0xfa, 0xda, 0xff, 0xff, //0x000025de vmovdqu $-9478(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x12, 0xdb, 0xff, 0xff, //0x000025e6 vmovdqu $-9454(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x2a, 0xdb, 0xff, 0xff, //0x000025ee vmovdqu $-9430(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000025f6 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0xfd, 0xdb, 0xff, 0xff, //0x000025fb vmovdqu $-9219(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x05, 0x15, 0xdc, 0xff, 0xff, //0x00002603 vmovdqu $-9195(%rip), %ymm0 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0x2d, 0xdc, 0xff, 0xff, //0x0000260b vmovdqu $-9171(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0xc5, 0xdb, 0xff, 0xff, //0x00002613 vmovdqu $-9275(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0x7d, 0xdc, 0xff, 0xff, //0x0000261b vmovdqu $-9091(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x95, 0xdb, 0xff, 0xff, //0x00002623 vmovdqu $-9323(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0x0f, 0x8e, 0xa3, 0x00, 0x00, 0x00, //0x0000262b jle LBB0_480 - 0x49, 0x8d, 0x40, 0xff, //0x00002631 leaq $-1(%r8), %rax - 0x49, 0x39, 0xc7, //0x00002635 cmpq %rax, %r15 - 0x0f, 0x84, 0x96, 0x00, 0x00, 0x00, //0x00002638 je LBB0_480 - 0x49, 0xf7, 0xd0, //0x0000263e notq %r8 - 0x4d, 0x89, 0xc1, //0x00002641 movq %r8, %r9 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002644 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002649 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000264e movq $8(%rsp), %r15 - 0xe9, 0x67, 0x00, 0x00, 0x00, //0x00002653 jmp LBB0_479 - //0x00002658 LBB0_477 - 0x49, 0xf7, 0xd9, //0x00002658 negq %r9 - //0x0000265b LBB0_478 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x0000265b movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002660 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002665 movq $8(%rsp), %r15 - 0xc5, 0xfe, 0x6f, 0x2d, 0x4e, 0xda, 0xff, 0xff, //0x0000266a vmovdqu $-9650(%rip), %ymm5 /* LCPI0_1+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x35, 0x66, 0xda, 0xff, 0xff, //0x00002672 vmovdqu $-9626(%rip), %ymm6 /* LCPI0_2+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x3d, 0x7e, 0xda, 0xff, 0xff, //0x0000267a vmovdqu $-9602(%rip), %ymm7 /* LCPI0_3+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x05, 0x96, 0xda, 0xff, 0xff, //0x00002682 vmovdqu $-9578(%rip), %ymm8 /* LCPI0_4+0(%rip) */ - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000268a vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7e, 0x6f, 0x15, 0x69, 0xdb, 0xff, 0xff, //0x0000268f vmovdqu $-9367(%rip), %ymm10 /* LCPI0_14+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x05, 0x81, 0xdb, 0xff, 0xff, //0x00002697 vmovdqu $-9343(%rip), %ymm0 /* LCPI0_15+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x3d, 0x99, 0xdb, 0xff, 0xff, //0x0000269f vmovdqu $-9319(%rip), %ymm15 /* LCPI0_16+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x35, 0x31, 0xdb, 0xff, 0xff, //0x000026a7 vmovdqu $-9423(%rip), %ymm14 /* LCPI0_10+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x25, 0xe9, 0xdb, 0xff, 0xff, //0x000026af vmovdqu $-9239(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x01, 0xdb, 0xff, 0xff, //0x000026b7 vmovdqu $-9471(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - //0x000026bf LBB0_479 - 0xc5, 0x7e, 0x6f, 0x1d, 0x79, 0xda, 0xff, 0xff, //0x000026bf vmovdqu $-9607(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x91, 0xda, 0xff, 0xff, //0x000026c7 vmovdqu $-9583(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - 0xe9, 0xa4, 0x02, 0x00, 0x00, //0x000026cf jmp LBB0_496 - //0x000026d4 LBB0_480 - 0x48, 0x89, 0xd0, //0x000026d4 movq %rdx, %rax - 0x4c, 0x09, 0xf8, //0x000026d7 orq %r15, %rax - 0x0f, 0x99, 0xc1, //0x000026da setns %cl - 0xc5, 0x7e, 0x6f, 0x1d, 0x5b, 0xda, 0xff, 0xff, //0x000026dd vmovdqu $-9637(%rip), %ymm11 /* LCPI0_5+0(%rip) */ - 0xc5, 0x7e, 0x6f, 0x25, 0x73, 0xda, 0xff, 0xff, //0x000026e5 vmovdqu $-9613(%rip), %ymm12 /* LCPI0_6+0(%rip) */ - 0x0f, 0x88, 0xf8, 0x00, 0x00, 0x00, //0x000026ed js LBB0_485 - 0x4c, 0x39, 0xfa, //0x000026f3 cmpq %r15, %rdx - 0x0f, 0x8c, 0xef, 0x00, 0x00, 0x00, //0x000026f6 jl LBB0_485 - 0x48, 0xf7, 0xd2, //0x000026fc notq %rdx - 0x49, 0x89, 0xd1, //0x000026ff movq %rdx, %r9 - 0xe9, 0x62, 0x02, 0x00, 0x00, //0x00002702 jmp LBB0_495 - //0x00002707 LBB0_483 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002707 vmovdqa %ymm13, %ymm0 - 0x89, 0xd0, //0x0000270b movl %edx, %eax - //0x0000270d LBB0_484 - 0x49, 0xf7, 0xd5, //0x0000270d notq %r13 - 0x49, 0x29, 0xc5, //0x00002710 subq %rax, %r13 - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002713 movq $8(%rsp), %r15 - 0xe9, 0x04, 0xf0, 0xff, 0xff, //0x00002718 jmp LBB0_290 - //0x0000271d LBB0_187 - 0x4d, 0x85, 0xff, //0x0000271d testq %r15, %r15 - 0x0f, 0x85, 0x9f, 0x07, 0x00, 0x00, //0x00002720 jne LBB0_547 - 0x49, 0x01, 0xf1, //0x00002726 addq %rsi, %r9 - 0x49, 0x29, 0xf2, //0x00002729 subq %rsi, %r10 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x0000272c movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002731 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002736 movq $8(%rsp), %r15 - //0x0000273b LBB0_189 - 0x4d, 0x85, 0xd2, //0x0000273b testq %r10, %r10 - 0x0f, 0x8f, 0xfa, 0x07, 0x00, 0x00, //0x0000273e jg LBB0_551 - 0xe9, 0x4c, 0x14, 0x00, 0x00, //0x00002744 jmp LBB0_711 - //0x00002749 LBB0_54 - 0x4c, 0x01, 0xf1, //0x00002749 addq %r14, %rcx - 0x48, 0x83, 0xfb, 0x20, //0x0000274c cmpq $32, %rbx - 0x0f, 0x82, 0x5f, 0x03, 0x00, 0x00, //0x00002750 jb LBB0_505 - //0x00002756 LBB0_55 - 0xc5, 0xfe, 0x6f, 0x01, //0x00002756 vmovdqu (%rcx), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x0000275a vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x0000275e vpmovmskb %ymm1, %esi - 0xc5, 0xfd, 0x74, 0xc7, //0x00002762 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x00002766 vpmovmskb %ymm0, %edx - 0x85, 0xd2, //0x0000276a testl %edx, %edx - 0x4d, 0x89, 0xdf, //0x0000276c movq %r11, %r15 - 0x0f, 0x85, 0xa6, 0x05, 0x00, 0x00, //0x0000276f jne LBB0_529 - 0x4d, 0x85, 0xd2, //0x00002775 testq %r10, %r10 - 0x0f, 0x85, 0xcb, 0x05, 0x00, 0x00, //0x00002778 jne LBB0_531 - 0x45, 0x31, 0xd2, //0x0000277e xorl %r10d, %r10d - 0x48, 0x85, 0xf6, //0x00002781 testq %rsi, %rsi - 0x0f, 0x84, 0x34, 0x06, 0x00, 0x00, //0x00002784 je LBB0_533 - //0x0000278a LBB0_58 - 0x48, 0x0f, 0xbc, 0xc6, //0x0000278a bsfq %rsi, %rax - 0x49, 0x89, 0xca, //0x0000278e movq %rcx, %r10 - 0x4d, 0x29, 0xf2, //0x00002791 subq %r14, %r10 - 0x49, 0x01, 0xc2, //0x00002794 addq %rax, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00002797 addq $1, %r10 - 0xe9, 0x80, 0xeb, 0xff, 0xff, //0x0000279b jmp LBB0_232 - //0x000027a0 LBB0_199 - 0x4d, 0x01, 0xf2, //0x000027a0 addq %r14, %r10 - 0x48, 0x83, 0xfb, 0x20, //0x000027a3 cmpq $32, %rbx - 0x0f, 0x82, 0xef, 0x08, 0x00, 0x00, //0x000027a7 jb LBB0_564 - //0x000027ad LBB0_200 - 0x4c, 0x89, 0xd1, //0x000027ad movq %r10, %rcx - 0xc4, 0xc1, 0x7e, 0x6f, 0x02, //0x000027b0 vmovdqu (%r10), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x000027b5 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd1, //0x000027b9 vpmovmskb %ymm1, %r10d - 0xc5, 0xfd, 0x74, 0xcf, //0x000027bd vpcmpeqb %ymm7, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x000027c1 vpmovmskb %ymm1, %edx - 0x85, 0xd2, //0x000027c5 testl %edx, %edx - 0x0f, 0x85, 0xc5, 0x07, 0x00, 0x00, //0x000027c7 jne LBB0_554 - 0x4d, 0x85, 0xdb, //0x000027cd testq %r11, %r11 - 0x0f, 0x85, 0xf2, 0x07, 0x00, 0x00, //0x000027d0 jne LBB0_556 - 0x45, 0x31, 0xdb, //0x000027d6 xorl %r11d, %r11d - 0x4d, 0x85, 0xd2, //0x000027d9 testq %r10, %r10 - 0x0f, 0x84, 0x60, 0x08, 0x00, 0x00, //0x000027dc je LBB0_558 - //0x000027e2 LBB0_203 - 0x49, 0x0f, 0xbc, 0xd2, //0x000027e2 bsfq %r10, %rdx - 0xe9, 0x5c, 0x08, 0x00, 0x00, //0x000027e6 jmp LBB0_559 - //0x000027eb LBB0_485 - 0x49, 0x8d, 0x47, 0xff, //0x000027eb leaq $-1(%r15), %rax - 0x48, 0x39, 0xc2, //0x000027ef cmpq %rax, %rdx - 0x49, 0xf7, 0xd7, //0x000027f2 notq %r15 - 0x4d, 0x0f, 0x45, 0xf9, //0x000027f5 cmovneq %r9, %r15 - 0x84, 0xc9, //0x000027f9 testb %cl, %cl - 0x4d, 0x0f, 0x45, 0xcf, //0x000027fb cmovneq %r15, %r9 - 0xe9, 0x65, 0x01, 0x00, 0x00, //0x000027ff jmp LBB0_495 - //0x00002804 LBB0_486 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002804 vmovdqa %ymm13, %ymm0 - 0x0f, 0xbc, 0xc3, //0x00002808 bsfl %ebx, %eax - 0xe9, 0x3a, 0x00, 0x00, 0x00, //0x0000280b jmp LBB0_490 - //0x00002810 LBB0_487 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002810 vmovdqa %ymm13, %ymm0 - 0x48, 0x8b, 0x5c, 0x24, 0x20, //0x00002814 movq $32(%rsp), %rbx - 0x49, 0x01, 0xde, //0x00002819 addq %rbx, %r14 - 0x4d, 0x29, 0xee, //0x0000281c subq %r13, %r14 - 0x49, 0x29, 0xce, //0x0000281f subq %rcx, %r14 - 0x49, 0x83, 0xc6, 0xfe, //0x00002822 addq $-2, %r14 - 0x4d, 0x89, 0xf5, //0x00002826 movq %r14, %r13 - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002829 movq $8(%rsp), %r15 - 0xe9, 0xf3, 0xee, 0xff, 0xff, //0x0000282e jmp LBB0_291 - //0x00002833 LBB0_488 - 0x4d, 0x01, 0xf4, //0x00002833 addq %r14, %r12 - 0x48, 0x85, 0xc0, //0x00002836 testq %rax, %rax - 0x0f, 0x85, 0xe9, 0xdc, 0xff, 0xff, //0x00002839 jne LBB0_28 - 0xe9, 0x1e, 0xdd, 0xff, 0xff, //0x0000283f jmp LBB0_33 - //0x00002844 LBB0_489 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002844 vmovdqa %ymm13, %ymm0 - 0x89, 0xd0, //0x00002848 movl %edx, %eax - //0x0000284a LBB0_490 - 0x48, 0x8b, 0x5c, 0x24, 0x20, //0x0000284a movq $32(%rsp), %rbx - 0x49, 0x01, 0xde, //0x0000284f addq %rbx, %r14 - 0x4d, 0x29, 0xee, //0x00002852 subq %r13, %r14 - 0x49, 0x29, 0xc6, //0x00002855 subq %rax, %r14 - 0x4d, 0x29, 0xfe, //0x00002858 subq %r15, %r14 - 0x49, 0x83, 0xc6, 0xfe, //0x0000285b addq $-2, %r14 - 0x4d, 0x89, 0xf5, //0x0000285f movq %r14, %r13 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002862 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002867 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000286c movq $8(%rsp), %r15 - 0xe9, 0xb0, 0xee, 0xff, 0xff, //0x00002871 jmp LBB0_291 - //0x00002876 LBB0_139 - 0x4c, 0x01, 0xf3, //0x00002876 addq %r14, %rbx - 0x48, 0x83, 0xf9, 0x20, //0x00002879 cmpq $32, %rcx - 0x0f, 0x82, 0xda, 0x02, 0x00, 0x00, //0x0000287d jb LBB0_512 - //0x00002883 LBB0_140 - 0xc5, 0xfe, 0x6f, 0x03, //0x00002883 vmovdqu (%rbx), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00002887 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x0000288b vpmovmskb %ymm1, %esi - 0xc5, 0xfd, 0x74, 0xc7, //0x0000288f vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x00002893 vpmovmskb %ymm0, %edx - 0x85, 0xd2, //0x00002897 testl %edx, %edx - 0x4d, 0x89, 0xdf, //0x00002899 movq %r11, %r15 - 0x0f, 0x85, 0xc0, 0x08, 0x00, 0x00, //0x0000289c jne LBB0_575 - 0x4d, 0x85, 0xd2, //0x000028a2 testq %r10, %r10 - 0x0f, 0x85, 0xe5, 0x08, 0x00, 0x00, //0x000028a5 jne LBB0_577 - 0x45, 0x31, 0xd2, //0x000028ab xorl %r10d, %r10d - 0x48, 0x85, 0xf6, //0x000028ae testq %rsi, %rsi - 0x0f, 0x84, 0x4e, 0x09, 0x00, 0x00, //0x000028b1 je LBB0_579 - //0x000028b7 LBB0_143 - 0x48, 0x0f, 0xbc, 0xc6, //0x000028b7 bsfq %rsi, %rax - 0x49, 0x89, 0xda, //0x000028bb movq %rbx, %r10 - 0x4d, 0x29, 0xf2, //0x000028be subq %r14, %r10 - 0x49, 0x01, 0xc2, //0x000028c1 addq %rax, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x000028c4 addq $1, %r10 - 0xe9, 0xbf, 0xee, 0xff, 0xff, //0x000028c8 jmp LBB0_298 - //0x000028cd LBB0_220 - 0x4d, 0x01, 0xf2, //0x000028cd addq %r14, %r10 - 0x48, 0x83, 0xf9, 0x20, //0x000028d0 cmpq $32, %rcx - 0x0f, 0x82, 0x3c, 0x0b, 0x00, 0x00, //0x000028d4 jb LBB0_603 - //0x000028da LBB0_221 - 0x4c, 0x89, 0xd3, //0x000028da movq %r10, %rbx - 0xc4, 0xc1, 0x7e, 0x6f, 0x02, //0x000028dd vmovdqu (%r10), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x000028e2 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0x7d, 0xd7, 0xd1, //0x000028e6 vpmovmskb %ymm1, %r10d - 0xc5, 0xfd, 0x74, 0xcf, //0x000028ea vpcmpeqb %ymm7, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x000028ee vpmovmskb %ymm1, %edx - 0x85, 0xd2, //0x000028f2 testl %edx, %edx - 0x0f, 0x85, 0x12, 0x0a, 0x00, 0x00, //0x000028f4 jne LBB0_593 - 0x4d, 0x85, 0xdb, //0x000028fa testq %r11, %r11 - 0x0f, 0x85, 0x3f, 0x0a, 0x00, 0x00, //0x000028fd jne LBB0_595 - 0x45, 0x31, 0xdb, //0x00002903 xorl %r11d, %r11d - 0x4d, 0x85, 0xd2, //0x00002906 testq %r10, %r10 - 0x0f, 0x84, 0xad, 0x0a, 0x00, 0x00, //0x00002909 je LBB0_597 - //0x0000290f LBB0_224 - 0x49, 0x0f, 0xbc, 0xd2, //0x0000290f bsfq %r10, %rdx - 0xe9, 0xa9, 0x0a, 0x00, 0x00, //0x00002913 jmp LBB0_598 - //0x00002918 LBB0_491 - 0x49, 0x89, 0xf1, //0x00002918 movq %rsi, %r9 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000291b movq $-1, %rcx - 0x48, 0x8b, 0x54, 0x24, 0x28, //0x00002922 movq $40(%rsp), %rdx - 0x48, 0x85, 0xd2, //0x00002927 testq %rdx, %rdx - 0x0f, 0x85, 0x6f, 0xfc, 0xff, 0xff, //0x0000292a jne LBB0_469 - 0xe9, 0xdb, 0x13, 0x00, 0x00, //0x00002930 jmp LBB0_709 - //0x00002935 LBB0_492 - 0xc5, 0x7d, 0x7f, 0xe8, //0x00002935 vmovdqa %ymm13, %ymm0 - 0x0f, 0xbc, 0xc3, //0x00002939 bsfl %ebx, %eax - 0xe9, 0x22, 0x00, 0x00, 0x00, //0x0000293c jmp LBB0_494 - //0x00002941 LBB0_697 - 0x66, 0x0f, 0xbc, 0xc0, //0x00002941 bsfw %ax, %ax - 0x0f, 0xb7, 0xc8, //0x00002945 movzwl %ax, %ecx - 0x48, 0x29, 0xd1, //0x00002948 subq %rdx, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x0000294b movq %rcx, (%r13) - 0x48, 0x85, 0xdb, //0x0000294f testq %rbx, %rbx - 0x0f, 0x8f, 0x48, 0xda, 0xff, 0xff, //0x00002952 jg LBB0_3 - 0xe9, 0x74, 0x13, 0x00, 0x00, //0x00002958 jmp LBB0_698 - //0x0000295d LBB0_493 - 0xc5, 0x7d, 0x7f, 0xe8, //0x0000295d vmovdqa %ymm13, %ymm0 - 0x89, 0xd0, //0x00002961 movl %edx, %eax - //0x00002963 LBB0_494 - 0x49, 0xf7, 0xd1, //0x00002963 notq %r9 - 0x49, 0x29, 0xc1, //0x00002966 subq %rax, %r9 - //0x00002969 LBB0_495 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002969 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x0000296e movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002973 movq $8(%rsp), %r15 - //0x00002978 LBB0_496 - 0x4d, 0x85, 0xc9, //0x00002978 testq %r9, %r9 - 0x0f, 0x88, 0x8c, 0x13, 0x00, 0x00, //0x0000297b js LBB0_708 - 0x49, 0x8b, 0x4d, 0x00, //0x00002981 movq (%r13), %rcx - 0xc5, 0x7d, 0x6f, 0xe8, //0x00002985 vmovdqa %ymm0, %ymm13 - //0x00002989 LBB0_498 - 0x4c, 0x01, 0xc9, //0x00002989 addq %r9, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x0000298c movq %rcx, (%r13) - 0x48, 0x83, 0x3c, 0x24, 0x00, //0x00002990 cmpq $0, (%rsp) - 0x0f, 0x8f, 0x05, 0xda, 0xff, 0xff, //0x00002995 jg LBB0_3 - 0xe9, 0x31, 0x13, 0x00, 0x00, //0x0000299b jmp LBB0_698 - //0x000029a0 LBB0_243 - 0x4c, 0x01, 0xf7, //0x000029a0 addq %r14, %rdi - 0x49, 0x83, 0xf8, 0x20, //0x000029a3 cmpq $32, %r8 - 0x0f, 0x82, 0x2f, 0x02, 0x00, 0x00, //0x000029a7 jb LBB0_517 - //0x000029ad LBB0_244 - 0xc5, 0xfe, 0x6f, 0x07, //0x000029ad vmovdqu (%rdi), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x000029b1 vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xf1, //0x000029b5 vpmovmskb %ymm1, %esi - 0xc5, 0xfd, 0x74, 0xc7, //0x000029b9 vpcmpeqb %ymm7, %ymm0, %ymm0 - 0xc5, 0xfd, 0xd7, 0xd0, //0x000029bd vpmovmskb %ymm0, %edx - 0x85, 0xd2, //0x000029c1 testl %edx, %edx - 0x0f, 0x85, 0x68, 0x0d, 0x00, 0x00, //0x000029c3 jne LBB0_630 - 0x4d, 0x85, 0xd2, //0x000029c9 testq %r10, %r10 - 0x0f, 0x85, 0x95, 0x0d, 0x00, 0x00, //0x000029cc jne LBB0_632 - 0x45, 0x31, 0xd2, //0x000029d2 xorl %r10d, %r10d - 0xc5, 0x7d, 0x7f, 0xea, //0x000029d5 vmovdqa %ymm13, %ymm2 - 0x48, 0x85, 0xf6, //0x000029d9 testq %rsi, %rsi - 0x0f, 0x84, 0x02, 0x0e, 0x00, 0x00, //0x000029dc je LBB0_634 - //0x000029e2 LBB0_247 - 0x48, 0x0f, 0xbc, 0xc6, //0x000029e2 bsfq %rsi, %rax - 0x48, 0x89, 0xf9, //0x000029e6 movq %rdi, %rcx - 0x4c, 0x29, 0xf1, //0x000029e9 subq %r14, %rcx - 0x48, 0x01, 0xc1, //0x000029ec addq %rax, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x000029ef addq $1, %rcx - 0xe9, 0xf6, 0xfa, 0xff, 0xff, //0x000029f3 jmp LBB0_461 - //0x000029f8 LBB0_394 - 0x4c, 0x01, 0xf1, //0x000029f8 addq %r14, %rcx - 0x49, 0x83, 0xf8, 0x20, //0x000029fb cmpq $32, %r8 - 0x0f, 0x82, 0x01, 0x02, 0x00, 0x00, //0x000029ff jb LBB0_519 - //0x00002a05 LBB0_395 - 0x48, 0x89, 0xcb, //0x00002a05 movq %rcx, %rbx - 0xc5, 0xfe, 0x6f, 0x01, //0x00002a08 vmovdqu (%rcx), %ymm0 - 0xc5, 0xfd, 0x74, 0xce, //0x00002a0c vpcmpeqb %ymm6, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xc9, //0x00002a10 vpmovmskb %ymm1, %ecx - 0xc5, 0xfd, 0x74, 0xcf, //0x00002a14 vpcmpeqb %ymm7, %ymm0, %ymm1 - 0xc5, 0xfd, 0xd7, 0xd1, //0x00002a18 vpmovmskb %ymm1, %edx - 0x85, 0xd2, //0x00002a1c testl %edx, %edx - 0x0f, 0x85, 0x86, 0x0e, 0x00, 0x00, //0x00002a1e jne LBB0_647 - 0x4d, 0x85, 0xdb, //0x00002a24 testq %r11, %r11 - 0x0f, 0x85, 0xab, 0x0e, 0x00, 0x00, //0x00002a27 jne LBB0_649 - 0x45, 0x31, 0xdb, //0x00002a2d xorl %r11d, %r11d - 0x48, 0x85, 0xc9, //0x00002a30 testq %rcx, %rcx - 0x0f, 0x84, 0x10, 0x0f, 0x00, 0x00, //0x00002a33 je LBB0_651 - //0x00002a39 LBB0_398 - 0x48, 0x0f, 0xbc, 0xd1, //0x00002a39 bsfq %rcx, %rdx - 0xe9, 0x0c, 0x0f, 0x00, 0x00, //0x00002a3d jmp LBB0_652 - //0x00002a42 LBB0_499 - 0x0f, 0xbc, 0xc6, //0x00002a42 bsfl %esi, %eax - 0xe9, 0xde, 0x00, 0x00, 0x00, //0x00002a45 jmp LBB0_510 - //0x00002a4a LBB0_500 - 0x4c, 0x03, 0x34, 0x24, //0x00002a4a addq (%rsp), %r14 - 0x4d, 0x29, 0xce, //0x00002a4e subq %r9, %r14 - 0x48, 0xf7, 0xd1, //0x00002a51 notq %rcx - 0x4c, 0x01, 0xf1, //0x00002a54 addq %r14, %rcx - 0x49, 0x89, 0xc9, //0x00002a57 movq %rcx, %r9 - 0xe9, 0xfc, 0xfb, 0xff, 0xff, //0x00002a5a jmp LBB0_478 - //0x00002a5f LBB0_501 - 0x49, 0x8d, 0x0c, 0x1e, //0x00002a5f leaq (%r14,%rbx), %rcx - 0x48, 0x83, 0xfe, 0x10, //0x00002a63 cmpq $16, %rsi - 0x0f, 0x83, 0x49, 0xe4, 0xff, 0xff, //0x00002a67 jae LBB0_164 - 0xe9, 0x8c, 0xe4, 0xff, 0xff, //0x00002a6d jmp LBB0_167 - //0x00002a72 LBB0_502 - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002a72 movq $-1, %r9 - 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x00002a79 movq $-1, $40(%rsp) - 0x4c, 0x8b, 0x6c, 0x24, 0x38, //0x00002a82 movq $56(%rsp), %r13 - 0x49, 0x83, 0xf8, 0x10, //0x00002a87 cmpq $16, %r8 - 0x0f, 0x83, 0x5a, 0xdf, 0xff, 0xff, //0x00002a8b jae LBB0_95 - 0xe9, 0xac, 0xe0, 0xff, 0xff, //0x00002a91 jmp LBB0_113 - //0x00002a96 LBB0_503 - 0x89, 0xd0, //0x00002a96 movl %edx, %eax - 0xe9, 0x8b, 0x00, 0x00, 0x00, //0x00002a98 jmp LBB0_510 - //0x00002a9d LBB0_504 - 0x4b, 0x8d, 0x0c, 0x0e, //0x00002a9d leaq (%r14,%r9), %rcx - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00002aa1 movq $-1, %r11 - 0x45, 0x31, 0xd2, //0x00002aa8 xorl %r10d, %r10d - 0x48, 0x83, 0xfb, 0x20, //0x00002aab cmpq $32, %rbx - 0x0f, 0x83, 0xa1, 0xfc, 0xff, 0xff, //0x00002aaf jae LBB0_55 - //0x00002ab5 LBB0_505 - 0x4d, 0x89, 0xdf, //0x00002ab5 movq %r11, %r15 - 0xe9, 0x09, 0x03, 0x00, 0x00, //0x00002ab8 jmp LBB0_534 - //0x00002abd LBB0_506 - 0x4f, 0x8d, 0x14, 0x0e, //0x00002abd leaq (%r14,%r9), %r10 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002ac1 movq $-1, %r15 - 0x45, 0x31, 0xdb, //0x00002ac8 xorl %r11d, %r11d - 0x48, 0x83, 0xfb, 0x20, //0x00002acb cmpq $32, %rbx - 0x0f, 0x83, 0xd8, 0xfc, 0xff, 0xff, //0x00002acf jae LBB0_200 - 0xe9, 0xc2, 0x05, 0x00, 0x00, //0x00002ad5 jmp LBB0_564 - //0x00002ada LBB0_507 - 0x4c, 0x29, 0xf1, //0x00002ada subq %r14, %rcx - 0x48, 0x01, 0xd1, //0x00002add addq %rdx, %rcx - //0x00002ae0 LBB0_508 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002ae0 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002ae5 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002aea movq $8(%rsp), %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002aef vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00002af4 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x9f, 0xd7, 0xff, 0xff, //0x00002af9 vmovdqu $-10337(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xb7, 0xd6, 0xff, 0xff, //0x00002b01 vmovdqu $-10569(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002b09 vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00002b0d vmovdqa %ymm1, %ymm12 - 0x48, 0x89, 0xc3, //0x00002b11 movq %rax, %rbx - 0x49, 0x89, 0x4d, 0x00, //0x00002b14 movq %rcx, (%r13) - 0x48, 0x85, 0xdb, //0x00002b18 testq %rbx, %rbx - 0x0f, 0x8f, 0x7f, 0xd8, 0xff, 0xff, //0x00002b1b jg LBB0_3 - 0xe9, 0x45, 0x10, 0x00, 0x00, //0x00002b21 jmp LBB0_178 - //0x00002b26 LBB0_509 - 0x89, 0xf0, //0x00002b26 movl %esi, %eax - //0x00002b28 LBB0_510 - 0x4c, 0x03, 0x34, 0x24, //0x00002b28 addq (%rsp), %r14 - 0x4d, 0x29, 0xce, //0x00002b2c subq %r9, %r14 - 0x49, 0x29, 0xc6, //0x00002b2f subq %rax, %r14 - 0x49, 0xf7, 0xd5, //0x00002b32 notq %r13 - 0x4d, 0x01, 0xf5, //0x00002b35 addq %r14, %r13 - 0x4d, 0x89, 0xe9, //0x00002b38 movq %r13, %r9 - 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x00002b3b movq $48(%rsp), %r13 - 0xe9, 0x16, 0xfb, 0xff, 0xff, //0x00002b40 jmp LBB0_478 - //0x00002b45 LBB0_511 - 0x4b, 0x8d, 0x1c, 0x0e, //0x00002b45 leaq (%r14,%r9), %rbx - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00002b49 movq $-1, %r11 - 0x45, 0x31, 0xd2, //0x00002b50 xorl %r10d, %r10d - 0x48, 0x83, 0xf9, 0x20, //0x00002b53 cmpq $32, %rcx - 0x0f, 0x83, 0x26, 0xfd, 0xff, 0xff, //0x00002b57 jae LBB0_140 - //0x00002b5d LBB0_512 - 0x4d, 0x89, 0xdf, //0x00002b5d movq %r11, %r15 - 0xe9, 0xa8, 0x06, 0x00, 0x00, //0x00002b60 jmp LBB0_580 - //0x00002b65 LBB0_513 - 0x4f, 0x8d, 0x14, 0x0e, //0x00002b65 leaq (%r14,%r9), %r10 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002b69 movq $-1, %r15 - 0x45, 0x31, 0xdb, //0x00002b70 xorl %r11d, %r11d - 0x48, 0x83, 0xf9, 0x20, //0x00002b73 cmpq $32, %rcx - 0x0f, 0x83, 0x5d, 0xfd, 0xff, 0xff, //0x00002b77 jae LBB0_221 - 0xe9, 0x94, 0x08, 0x00, 0x00, //0x00002b7d jmp LBB0_603 - //0x00002b82 LBB0_514 - 0x4c, 0x01, 0xf1, //0x00002b82 addq %r14, %rcx - 0x48, 0x83, 0xfe, 0x10, //0x00002b85 cmpq $16, %rsi - 0x48, 0x8b, 0x1c, 0x24, //0x00002b89 movq (%rsp), %rbx - 0x0f, 0x83, 0x97, 0xed, 0xff, 0xff, //0x00002b8d jae LBB0_318 - 0xe9, 0xda, 0xed, 0xff, 0xff, //0x00002b93 jmp LBB0_321 - //0x00002b98 LBB0_515 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002b98 movq $-1, %r15 - 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x00002b9f movq $-1, $40(%rsp) - 0x4c, 0x8b, 0x5c, 0x24, 0x38, //0x00002ba8 movq $56(%rsp), %r11 - 0x4d, 0x89, 0xd9, //0x00002bad movq %r11, %r9 - 0x4c, 0x89, 0x6c, 0x24, 0x30, //0x00002bb0 movq %r13, $48(%rsp) - 0x49, 0x83, 0xfa, 0x10, //0x00002bb5 cmpq $16, %r10 - 0x0f, 0x83, 0xff, 0xf6, 0xff, 0xff, //0x00002bb9 jae LBB0_425 - 0xe9, 0x2f, 0xf8, 0xff, 0xff, //0x00002bbf jmp LBB0_443 - //0x00002bc4 LBB0_516 - 0x4b, 0x8d, 0x3c, 0x0e, //0x00002bc4 leaq (%r14,%r9), %rdi - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00002bc8 movq $-1, %r11 - 0x45, 0x31, 0xd2, //0x00002bcf xorl %r10d, %r10d - 0x49, 0x83, 0xf8, 0x20, //0x00002bd2 cmpq $32, %r8 - 0x0f, 0x83, 0xd1, 0xfd, 0xff, 0xff, //0x00002bd6 jae LBB0_244 - //0x00002bdc LBB0_517 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002bdc vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002be0 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002be4 vmovdqa %ymm13, %ymm11 - 0xe9, 0x0a, 0x0c, 0x00, 0x00, //0x00002be9 jmp LBB0_635 - //0x00002bee LBB0_518 - 0x4b, 0x8d, 0x0c, 0x0e, //0x00002bee leaq (%r14,%r9), %rcx - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002bf2 movq $-1, %r10 - 0x45, 0x31, 0xdb, //0x00002bf9 xorl %r11d, %r11d - 0x49, 0x83, 0xf8, 0x20, //0x00002bfc cmpq $32, %r8 - 0x0f, 0x83, 0xff, 0xfd, 0xff, 0xff, //0x00002c00 jae LBB0_395 - //0x00002c06 LBB0_519 - 0x48, 0x89, 0xcb, //0x00002c06 movq %rcx, %rbx - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002c09 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002c0d vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002c11 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002c16 vmovdqa %ymm15, %ymm12 - 0xe9, 0x99, 0x0d, 0x00, 0x00, //0x00002c1b jmp LBB0_657 - //0x00002c20 LBB0_520 - 0x4c, 0x29, 0xf1, //0x00002c20 subq %r14, %rcx - 0x48, 0x01, 0xd1, //0x00002c23 addq %rdx, %rcx - //0x00002c26 LBB0_521 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002c26 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002c2b movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002c30 movq $8(%rsp), %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002c35 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00002c3a vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x59, 0xd6, 0xff, 0xff, //0x00002c3f vmovdqu $-10663(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x71, 0xd5, 0xff, 0xff, //0x00002c47 vmovdqu $-10895(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002c4f vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00002c53 vmovdqa %ymm1, %ymm12 - 0xe9, 0x75, 0xf3, 0xff, 0xff, //0x00002c57 jmp LBB0_383 - //0x00002c5c LBB0_522 - 0x49, 0x39, 0xf2, //0x00002c5c cmpq %rsi, %r10 - 0x0f, 0x84, 0x30, 0x0f, 0x00, 0x00, //0x00002c5f je LBB0_711 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002c65 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002c69 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002c6d vmovdqa %ymm13, %ymm11 - 0x49, 0x01, 0xf1, //0x00002c72 addq %rsi, %r9 - 0x49, 0x83, 0xc1, 0x01, //0x00002c75 addq $1, %r9 - 0x48, 0xf7, 0xd6, //0x00002c79 notq %rsi - 0x49, 0x01, 0xf2, //0x00002c7c addq %rsi, %r10 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002c7f movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002c84 movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002c89 movq $8(%rsp), %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002c8e vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x05, 0xd6, 0xff, 0xff, //0x00002c93 vmovdqu $-10747(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x1d, 0xd5, 0xff, 0xff, //0x00002c9b vmovdqu $-10979(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002ca3 vmovdqa %ymm0, %ymm11 - 0x4d, 0x85, 0xd2, //0x00002ca7 testq %r10, %r10 - 0x0f, 0x8f, 0x30, 0x00, 0x00, 0x00, //0x00002caa jg LBB0_526 - 0xe9, 0xe0, 0x0e, 0x00, 0x00, //0x00002cb0 jmp LBB0_711 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002cb5 .p2align 4, 0x90 - //0x00002cc0 LBB0_524 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002cc0 movq $-2, %rcx - 0xba, 0x02, 0x00, 0x00, 0x00, //0x00002cc7 movl $2, %edx - 0x49, 0x01, 0xd1, //0x00002ccc addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002ccf movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x00002cd7 addq %rcx, %r10 - 0x0f, 0x8e, 0xb5, 0x0e, 0x00, 0x00, //0x00002cda jle LBB0_711 - //0x00002ce0 LBB0_526 - 0x41, 0x0f, 0xb6, 0x09, //0x00002ce0 movzbl (%r9), %ecx - 0x80, 0xf9, 0x5c, //0x00002ce4 cmpb $92, %cl - 0x0f, 0x84, 0xd3, 0xff, 0xff, 0xff, //0x00002ce7 je LBB0_524 - 0x80, 0xf9, 0x22, //0x00002ced cmpb $34, %cl - 0x0f, 0x84, 0x22, 0x0a, 0x00, 0x00, //0x00002cf0 je LBB0_629 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002cf6 movq $-1, %rcx - 0xba, 0x01, 0x00, 0x00, 0x00, //0x00002cfd movl $1, %edx - 0x49, 0x01, 0xd1, //0x00002d02 addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002d05 movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x00002d0d addq %rcx, %r10 - 0x0f, 0x8f, 0xca, 0xff, 0xff, 0xff, //0x00002d10 jg LBB0_526 - 0xe9, 0x7a, 0x0e, 0x00, 0x00, //0x00002d16 jmp LBB0_711 - //0x00002d1b LBB0_529 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002d1b vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002d1f vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002d23 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002d28 vmovdqa %ymm15, %ymm12 - 0x49, 0x83, 0xff, 0xff, //0x00002d2d cmpq $-1, %r15 - 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00002d31 jne LBB0_532 - 0x48, 0x89, 0xc8, //0x00002d37 movq %rcx, %rax - 0x4c, 0x29, 0xf0, //0x00002d3a subq %r14, %rax - 0x4c, 0x0f, 0xbc, 0xda, //0x00002d3d bsfq %rdx, %r11 - 0x49, 0x01, 0xc3, //0x00002d41 addq %rax, %r11 - 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00002d44 jmp LBB0_532 - //0x00002d49 LBB0_531 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002d49 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002d4d vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002d51 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002d56 vmovdqa %ymm15, %ymm12 - //0x00002d5b LBB0_532 - 0x44, 0x89, 0xd0, //0x00002d5b movl %r10d, %eax - 0xf7, 0xd0, //0x00002d5e notl %eax - 0x21, 0xd0, //0x00002d60 andl %edx, %eax - 0x8d, 0x3c, 0x00, //0x00002d62 leal (%rax,%rax), %edi - 0x45, 0x8d, 0x3c, 0x42, //0x00002d65 leal (%r10,%rax,2), %r15d - 0xf7, 0xd7, //0x00002d69 notl %edi - 0x21, 0xd7, //0x00002d6b andl %edx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002d6d andl $-1431655766, %edi - 0x45, 0x31, 0xd2, //0x00002d73 xorl %r10d, %r10d - 0x01, 0xc7, //0x00002d76 addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc2, //0x00002d78 setb %r10b - 0x01, 0xff, //0x00002d7c addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00002d7e xorl $1431655765, %edi - 0x44, 0x21, 0xff, //0x00002d84 andl %r15d, %edi - 0xf7, 0xd7, //0x00002d87 notl %edi - 0x21, 0xfe, //0x00002d89 andl %edi, %esi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002d8b vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00002d90 vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00002d95 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0xfe, 0xd4, 0xff, 0xff, //0x00002d9a vmovdqu $-11010(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x16, 0xd4, 0xff, 0xff, //0x00002da2 vmovdqu $-11242(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002daa vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00002dae vmovdqa %ymm1, %ymm12 - 0x4d, 0x89, 0xdf, //0x00002db2 movq %r11, %r15 - 0x48, 0x85, 0xf6, //0x00002db5 testq %rsi, %rsi - 0x0f, 0x85, 0xcc, 0xf9, 0xff, 0xff, //0x00002db8 jne LBB0_58 - //0x00002dbe LBB0_533 - 0x48, 0x83, 0xc1, 0x20, //0x00002dbe addq $32, %rcx - 0x48, 0x83, 0xc3, 0xe0, //0x00002dc2 addq $-32, %rbx - //0x00002dc6 LBB0_534 - 0x4d, 0x85, 0xd2, //0x00002dc6 testq %r10, %r10 - 0x0f, 0x85, 0x0d, 0x07, 0x00, 0x00, //0x00002dc9 jne LBB0_614 - 0x4c, 0x89, 0xf7, //0x00002dcf movq %r14, %rdi - 0x48, 0xf7, 0xd7, //0x00002dd2 notq %rdi - 0x4c, 0x89, 0xfe, //0x00002dd5 movq %r15, %rsi - 0x49, 0x89, 0xca, //0x00002dd8 movq %rcx, %r10 - 0x48, 0x85, 0xdb, //0x00002ddb testq %rbx, %rbx - 0x0f, 0x84, 0xa2, 0x00, 0x00, 0x00, //0x00002dde je LBB0_546 - //0x00002de4 LBB0_536 - 0x48, 0x83, 0xc7, 0x01, //0x00002de4 addq $1, %rdi - //0x00002de8 LBB0_537 - 0x31, 0xd2, //0x00002de8 xorl %edx, %edx - //0x00002dea LBB0_538 - 0x41, 0x0f, 0xb6, 0x0c, 0x12, //0x00002dea movzbl (%r10,%rdx), %ecx - 0x80, 0xf9, 0x22, //0x00002def cmpb $34, %cl - 0x0f, 0x84, 0x87, 0x00, 0x00, 0x00, //0x00002df2 je LBB0_545 - 0x80, 0xf9, 0x5c, //0x00002df8 cmpb $92, %cl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002dfb je LBB0_543 - 0x48, 0x83, 0xc2, 0x01, //0x00002e01 addq $1, %rdx - 0x48, 0x39, 0xd3, //0x00002e05 cmpq %rdx, %rbx - 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x00002e08 jne LBB0_538 - 0xe9, 0x7b, 0x00, 0x00, 0x00, //0x00002e0e jmp LBB0_541 - //0x00002e13 LBB0_543 - 0x48, 0x8d, 0x43, 0xff, //0x00002e13 leaq $-1(%rbx), %rax - 0x48, 0x39, 0xd0, //0x00002e17 cmpq %rdx, %rax - 0x0f, 0x84, 0x30, 0x0d, 0x00, 0x00, //0x00002e1a je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002e20 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002e24 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002e28 vmovdqa %ymm13, %ymm11 - 0x4a, 0x8d, 0x04, 0x17, //0x00002e2d leaq (%rdi,%r10), %rax - 0x48, 0x01, 0xd0, //0x00002e31 addq %rdx, %rax - 0x48, 0x83, 0xfe, 0xff, //0x00002e34 cmpq $-1, %rsi - 0x4c, 0x0f, 0x44, 0xf8, //0x00002e38 cmoveq %rax, %r15 - 0x48, 0x0f, 0x44, 0xf0, //0x00002e3c cmoveq %rax, %rsi - 0x49, 0x01, 0xd2, //0x00002e40 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x02, //0x00002e43 addq $2, %r10 - 0x48, 0x89, 0xd8, //0x00002e47 movq %rbx, %rax - 0x48, 0x29, 0xd0, //0x00002e4a subq %rdx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00002e4d addq $-2, %rax - 0x48, 0x83, 0xc3, 0xfe, //0x00002e51 addq $-2, %rbx - 0x48, 0x39, 0xd3, //0x00002e55 cmpq %rdx, %rbx - 0x48, 0x89, 0xc3, //0x00002e58 movq %rax, %rbx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002e5b vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x38, 0xd4, 0xff, 0xff, //0x00002e60 vmovdqu $-11208(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x50, 0xd3, 0xff, 0xff, //0x00002e68 vmovdqu $-11440(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002e70 vmovdqa %ymm0, %ymm11 - 0x0f, 0x85, 0x6e, 0xff, 0xff, 0xff, //0x00002e74 jne LBB0_537 - 0xe9, 0xd1, 0x0c, 0x00, 0x00, //0x00002e7a jmp LBB0_681 - //0x00002e7f LBB0_545 - 0x49, 0x01, 0xd2, //0x00002e7f addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00002e82 addq $1, %r10 - //0x00002e86 LBB0_546 - 0x4d, 0x29, 0xf2, //0x00002e86 subq %r14, %r10 - 0xe9, 0x92, 0xe4, 0xff, 0xff, //0x00002e89 jmp LBB0_232 - //0x00002e8e LBB0_541 - 0x80, 0xf9, 0x22, //0x00002e8e cmpb $34, %cl - 0x0f, 0x85, 0xb9, 0x0c, 0x00, 0x00, //0x00002e91 jne LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002e97 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002e9b vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002e9f vmovdqa %ymm13, %ymm11 - 0x49, 0x01, 0xda, //0x00002ea4 addq %rbx, %r10 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002ea7 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xec, 0xd3, 0xff, 0xff, //0x00002eac vmovdqu $-11284(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x04, 0xd3, 0xff, 0xff, //0x00002eb4 vmovdqu $-11516(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002ebc vmovdqa %ymm0, %ymm11 - 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00002ec0 jmp LBB0_546 - //0x00002ec5 LBB0_547 - 0x49, 0x39, 0xf2, //0x00002ec5 cmpq %rsi, %r10 - 0x0f, 0x84, 0xc7, 0x0c, 0x00, 0x00, //0x00002ec8 je LBB0_711 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00002ece vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00002ed2 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002ed6 vmovdqa %ymm13, %ymm11 - 0x49, 0x01, 0xf1, //0x00002edb addq %rsi, %r9 - 0x49, 0x83, 0xc1, 0x01, //0x00002ede addq $1, %r9 - 0x48, 0xf7, 0xd6, //0x00002ee2 notq %rsi - 0x49, 0x01, 0xf2, //0x00002ee5 addq %rsi, %r10 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00002ee8 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x00002eed movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002ef2 movq $8(%rsp), %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002ef7 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x9c, 0xd3, 0xff, 0xff, //0x00002efc vmovdqu $-11364(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xb4, 0xd2, 0xff, 0xff, //0x00002f04 vmovdqu $-11596(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00002f0c vmovdqa %ymm0, %ymm11 - 0x4d, 0x85, 0xd2, //0x00002f10 testq %r10, %r10 - 0x0f, 0x8f, 0x25, 0x00, 0x00, 0x00, //0x00002f13 jg LBB0_551 - 0xe9, 0x77, 0x0c, 0x00, 0x00, //0x00002f19 jmp LBB0_711 - //0x00002f1e LBB0_549 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002f1e movq $-2, %rcx - 0xba, 0x02, 0x00, 0x00, 0x00, //0x00002f25 movl $2, %edx - 0x49, 0x01, 0xd1, //0x00002f2a addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002f2d movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x00002f35 addq %rcx, %r10 - 0x0f, 0x8e, 0x57, 0x0c, 0x00, 0x00, //0x00002f38 jle LBB0_711 - //0x00002f3e LBB0_551 - 0x41, 0x0f, 0xb6, 0x09, //0x00002f3e movzbl (%r9), %ecx - 0x80, 0xf9, 0x5c, //0x00002f42 cmpb $92, %cl - 0x0f, 0x84, 0xd3, 0xff, 0xff, 0xff, //0x00002f45 je LBB0_549 - 0x80, 0xf9, 0x22, //0x00002f4b cmpb $34, %cl - 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00002f4e je LBB0_678 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002f54 movq $-1, %rcx - 0xba, 0x01, 0x00, 0x00, 0x00, //0x00002f5b movl $1, %edx - 0x49, 0x01, 0xd1, //0x00002f60 addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00002f63 movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x00002f6b addq %rcx, %r10 - 0x0f, 0x8f, 0xca, 0xff, 0xff, 0xff, //0x00002f6e jg LBB0_551 - 0xe9, 0x1c, 0x0c, 0x00, 0x00, //0x00002f74 jmp LBB0_711 - //0x00002f79 LBB0_678 - 0x4d, 0x29, 0xf1, //0x00002f79 subq %r14, %r9 - 0x49, 0x83, 0xc1, 0x01, //0x00002f7c addq $1, %r9 - 0x4d, 0x89, 0x4d, 0x00, //0x00002f80 movq %r9, (%r13) - 0x4d, 0x85, 0xc0, //0x00002f84 testq %r8, %r8 - 0x0f, 0x8f, 0x24, 0xe8, 0xff, 0xff, //0x00002f87 jg LBB0_300 - 0xe9, 0x9a, 0x0b, 0x00, 0x00, //0x00002f8d jmp LBB0_679 - //0x00002f92 LBB0_554 - 0xc5, 0x7d, 0x7f, 0xe2, //0x00002f92 vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x00002f96 vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002f9a vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002f9f vmovdqa %ymm15, %ymm12 - 0x4c, 0x89, 0x3c, 0x24, //0x00002fa4 movq %r15, (%rsp) - 0x49, 0x83, 0xff, 0xff, //0x00002fa8 cmpq $-1, %r15 - 0x0f, 0x85, 0x2c, 0x00, 0x00, 0x00, //0x00002fac jne LBB0_557 - 0x48, 0x89, 0xc8, //0x00002fb2 movq %rcx, %rax - 0x4c, 0x29, 0xf0, //0x00002fb5 subq %r14, %rax - 0x48, 0x0f, 0xbc, 0xf2, //0x00002fb8 bsfq %rdx, %rsi - 0x48, 0x01, 0xc6, //0x00002fbc addq %rax, %rsi - 0x48, 0x89, 0x34, 0x24, //0x00002fbf movq %rsi, (%rsp) - 0xe9, 0x16, 0x00, 0x00, 0x00, //0x00002fc3 jmp LBB0_557 - //0x00002fc8 LBB0_556 - 0x4c, 0x89, 0x3c, 0x24, //0x00002fc8 movq %r15, (%rsp) - 0xc5, 0x7d, 0x7f, 0xe2, //0x00002fcc vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x00002fd0 vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002fd4 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002fd9 vmovdqa %ymm15, %ymm12 - //0x00002fde LBB0_557 - 0x44, 0x89, 0xd8, //0x00002fde movl %r11d, %eax - 0xf7, 0xd0, //0x00002fe1 notl %eax - 0x21, 0xd0, //0x00002fe3 andl %edx, %eax - 0x8d, 0x3c, 0x00, //0x00002fe5 leal (%rax,%rax), %edi - 0x41, 0x8d, 0x34, 0x43, //0x00002fe8 leal (%r11,%rax,2), %esi - 0xf7, 0xd7, //0x00002fec notl %edi - 0x21, 0xd7, //0x00002fee andl %edx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002ff0 andl $-1431655766, %edi - 0x45, 0x31, 0xdb, //0x00002ff6 xorl %r11d, %r11d - 0x01, 0xc7, //0x00002ff9 addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc3, //0x00002ffb setb %r11b - 0x01, 0xff, //0x00002fff addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00003001 xorl $1431655765, %edi - 0x21, 0xf7, //0x00003007 andl %esi, %edi - 0xf7, 0xd7, //0x00003009 notl %edi - 0x41, 0x21, 0xfa, //0x0000300b andl %edi, %r10d - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000300e vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003013 vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003018 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x7b, 0xd2, 0xff, 0xff, //0x0000301d vmovdqu $-11653(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x93, 0xd1, 0xff, 0xff, //0x00003025 vmovdqu $-11885(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x0000302d vmovdqa %ymm1, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe2, //0x00003031 vmovdqa %ymm2, %ymm12 - 0x4c, 0x8b, 0x3c, 0x24, //0x00003035 movq (%rsp), %r15 - 0x4d, 0x85, 0xd2, //0x00003039 testq %r10, %r10 - 0x0f, 0x85, 0xa0, 0xf7, 0xff, 0xff, //0x0000303c jne LBB0_203 - //0x00003042 LBB0_558 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00003042 movl $64, %edx - //0x00003047 LBB0_559 - 0xc5, 0xbd, 0x64, 0xc8, //0x00003047 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x0000304b vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x00003050 vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x00003054 vpmovmskb %ymm0, %esi - 0x0f, 0xbc, 0xfe, //0x00003058 bsfl %esi, %edi - 0x4d, 0x85, 0xd2, //0x0000305b testq %r10, %r10 - 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x0000305e je LBB0_562 - 0x85, 0xf6, //0x00003064 testl %esi, %esi - 0xb8, 0x40, 0x00, 0x00, 0x00, //0x00003066 movl $64, %eax - 0x0f, 0x44, 0xf8, //0x0000306b cmovel %eax, %edi - 0x48, 0x39, 0xfa, //0x0000306e cmpq %rdi, %rdx - 0x49, 0x89, 0xca, //0x00003071 movq %rcx, %r10 - 0x0f, 0x87, 0x15, 0x0d, 0x00, 0x00, //0x00003074 ja LBB0_721 - 0x4d, 0x29, 0xf2, //0x0000307a subq %r14, %r10 - 0x49, 0x01, 0xd2, //0x0000307d addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003080 addq $1, %r10 - 0xe9, 0x97, 0xe2, 0xff, 0xff, //0x00003084 jmp LBB0_232 - //0x00003089 LBB0_562 - 0x85, 0xf6, //0x00003089 testl %esi, %esi - 0x49, 0x89, 0xca, //0x0000308b movq %rcx, %r10 - 0x0f, 0x85, 0x08, 0x0d, 0x00, 0x00, //0x0000308e jne LBB0_722 - 0x49, 0x83, 0xc2, 0x20, //0x00003094 addq $32, %r10 - 0x48, 0x83, 0xc3, 0xe0, //0x00003098 addq $-32, %rbx - //0x0000309c LBB0_564 - 0x4d, 0x85, 0xdb, //0x0000309c testq %r11, %r11 - 0x0f, 0x85, 0x98, 0x04, 0x00, 0x00, //0x0000309f jne LBB0_616 - 0x4c, 0x89, 0xf9, //0x000030a5 movq %r15, %rcx - 0x48, 0x85, 0xdb, //0x000030a8 testq %rbx, %rbx - 0x0f, 0x84, 0x9f, 0x0a, 0x00, 0x00, //0x000030ab je LBB0_681 - //0x000030b1 LBB0_566 - 0x41, 0x0f, 0xb6, 0x12, //0x000030b1 movzbl (%r10), %edx - 0x80, 0xfa, 0x22, //0x000030b5 cmpb $34, %dl - 0x0f, 0x84, 0x98, 0x00, 0x00, 0x00, //0x000030b8 je LBB0_574 - 0x80, 0xfa, 0x5c, //0x000030be cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x000030c1 je LBB0_570 - 0x80, 0xfa, 0x1f, //0x000030c7 cmpb $31, %dl - 0x0f, 0x86, 0xd7, 0x0c, 0x00, 0x00, //0x000030ca jbe LBB0_723 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000030d0 movq $-1, %rdx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x000030d7 movl $1, %esi - 0x49, 0x01, 0xf2, //0x000030dc addq %rsi, %r10 - 0x48, 0x01, 0xd3, //0x000030df addq %rdx, %rbx - 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x000030e2 jne LBB0_566 - 0xe9, 0x63, 0x0a, 0x00, 0x00, //0x000030e8 jmp LBB0_681 - //0x000030ed LBB0_570 - 0x48, 0x83, 0xfb, 0x01, //0x000030ed cmpq $1, %rbx - 0x0f, 0x84, 0x59, 0x0a, 0x00, 0x00, //0x000030f1 je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x000030f7 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000030fb vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000030ff vmovdqa %ymm13, %ymm11 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00003104 movq $-2, %rdx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x0000310b movl $2, %esi - 0x48, 0x83, 0xf9, 0xff, //0x00003110 cmpq $-1, %rcx - 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00003114 jne LBB0_573 - 0x4d, 0x89, 0xd7, //0x0000311a movq %r10, %r15 - 0x4d, 0x29, 0xf7, //0x0000311d subq %r14, %r15 - 0x4c, 0x89, 0xf9, //0x00003120 movq %r15, %rcx - //0x00003123 LBB0_573 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003123 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003128 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x6b, 0xd1, 0xff, 0xff, //0x0000312d vmovdqu $-11925(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x83, 0xd0, 0xff, 0xff, //0x00003135 vmovdqu $-12157(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x0000313d vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00003141 vmovdqa %ymm1, %ymm12 - 0x49, 0x01, 0xf2, //0x00003145 addq %rsi, %r10 - 0x48, 0x01, 0xd3, //0x00003148 addq %rdx, %rbx - 0x0f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x0000314b jne LBB0_566 - 0xe9, 0xfa, 0x09, 0x00, 0x00, //0x00003151 jmp LBB0_681 - //0x00003156 LBB0_574 - 0x4d, 0x29, 0xf2, //0x00003156 subq %r14, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003159 addq $1, %r10 - 0xe9, 0xbe, 0xe1, 0xff, 0xff, //0x0000315d jmp LBB0_232 - //0x00003162 LBB0_575 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003162 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00003166 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000316a vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000316f vmovdqa %ymm15, %ymm12 - 0x49, 0x83, 0xff, 0xff, //0x00003174 cmpq $-1, %r15 - 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003178 jne LBB0_578 - 0x48, 0x89, 0xd8, //0x0000317e movq %rbx, %rax - 0x4c, 0x29, 0xf0, //0x00003181 subq %r14, %rax - 0x4c, 0x0f, 0xbc, 0xda, //0x00003184 bsfq %rdx, %r11 - 0x49, 0x01, 0xc3, //0x00003188 addq %rax, %r11 - 0xe9, 0x12, 0x00, 0x00, 0x00, //0x0000318b jmp LBB0_578 - //0x00003190 LBB0_577 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003190 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00003194 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003198 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000319d vmovdqa %ymm15, %ymm12 - //0x000031a2 LBB0_578 - 0x44, 0x89, 0xd0, //0x000031a2 movl %r10d, %eax - 0xf7, 0xd0, //0x000031a5 notl %eax - 0x21, 0xd0, //0x000031a7 andl %edx, %eax - 0x8d, 0x3c, 0x00, //0x000031a9 leal (%rax,%rax), %edi - 0x45, 0x8d, 0x3c, 0x42, //0x000031ac leal (%r10,%rax,2), %r15d - 0xf7, 0xd7, //0x000031b0 notl %edi - 0x21, 0xd7, //0x000031b2 andl %edx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x000031b4 andl $-1431655766, %edi - 0x45, 0x31, 0xd2, //0x000031ba xorl %r10d, %r10d - 0x01, 0xc7, //0x000031bd addl %eax, %edi - 0x41, 0x0f, 0x92, 0xc2, //0x000031bf setb %r10b - 0x01, 0xff, //0x000031c3 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x000031c5 xorl $1431655765, %edi - 0x44, 0x21, 0xff, //0x000031cb andl %r15d, %edi - 0xf7, 0xd7, //0x000031ce notl %edi - 0x21, 0xfe, //0x000031d0 andl %edi, %esi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000031d2 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x000031d7 vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000031dc vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0xb7, 0xd0, 0xff, 0xff, //0x000031e1 vmovdqu $-12105(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xcf, 0xcf, 0xff, 0xff, //0x000031e9 vmovdqu $-12337(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000031f1 vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x000031f5 vmovdqa %ymm1, %ymm12 - 0x4d, 0x89, 0xdf, //0x000031f9 movq %r11, %r15 - 0x48, 0x85, 0xf6, //0x000031fc testq %rsi, %rsi - 0x0f, 0x85, 0xb2, 0xf6, 0xff, 0xff, //0x000031ff jne LBB0_143 - //0x00003205 LBB0_579 - 0x48, 0x83, 0xc3, 0x20, //0x00003205 addq $32, %rbx - 0x48, 0x83, 0xc1, 0xe0, //0x00003209 addq $-32, %rcx - //0x0000320d LBB0_580 - 0x4d, 0x85, 0xd2, //0x0000320d testq %r10, %r10 - 0x0f, 0x85, 0x8a, 0x03, 0x00, 0x00, //0x00003210 jne LBB0_618 - 0x4c, 0x89, 0xf6, //0x00003216 movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x00003219 notq %rsi - 0x4c, 0x89, 0xff, //0x0000321c movq %r15, %rdi - 0x49, 0x89, 0xda, //0x0000321f movq %rbx, %r10 - 0x48, 0x85, 0xc9, //0x00003222 testq %rcx, %rcx - 0x0f, 0x84, 0xa2, 0x00, 0x00, 0x00, //0x00003225 je LBB0_592 - //0x0000322b LBB0_582 - 0x48, 0x83, 0xc6, 0x01, //0x0000322b addq $1, %rsi - //0x0000322f LBB0_583 - 0x31, 0xd2, //0x0000322f xorl %edx, %edx - //0x00003231 LBB0_584 - 0x41, 0x0f, 0xb6, 0x1c, 0x12, //0x00003231 movzbl (%r10,%rdx), %ebx - 0x80, 0xfb, 0x22, //0x00003236 cmpb $34, %bl - 0x0f, 0x84, 0x87, 0x00, 0x00, 0x00, //0x00003239 je LBB0_591 - 0x80, 0xfb, 0x5c, //0x0000323f cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003242 je LBB0_589 - 0x48, 0x83, 0xc2, 0x01, //0x00003248 addq $1, %rdx - 0x48, 0x39, 0xd1, //0x0000324c cmpq %rdx, %rcx - 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x0000324f jne LBB0_584 - 0xe9, 0x7b, 0x00, 0x00, 0x00, //0x00003255 jmp LBB0_587 - //0x0000325a LBB0_589 - 0x48, 0x8d, 0x41, 0xff, //0x0000325a leaq $-1(%rcx), %rax - 0x48, 0x39, 0xd0, //0x0000325e cmpq %rdx, %rax - 0x0f, 0x84, 0xe9, 0x08, 0x00, 0x00, //0x00003261 je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003267 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x0000326b vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000326f vmovdqa %ymm13, %ymm11 - 0x4a, 0x8d, 0x04, 0x16, //0x00003274 leaq (%rsi,%r10), %rax - 0x48, 0x01, 0xd0, //0x00003278 addq %rdx, %rax - 0x48, 0x83, 0xff, 0xff, //0x0000327b cmpq $-1, %rdi - 0x4c, 0x0f, 0x44, 0xf8, //0x0000327f cmoveq %rax, %r15 - 0x48, 0x0f, 0x44, 0xf8, //0x00003283 cmoveq %rax, %rdi - 0x49, 0x01, 0xd2, //0x00003287 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x02, //0x0000328a addq $2, %r10 - 0x48, 0x89, 0xc8, //0x0000328e movq %rcx, %rax - 0x48, 0x29, 0xd0, //0x00003291 subq %rdx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00003294 addq $-2, %rax - 0x48, 0x83, 0xc1, 0xfe, //0x00003298 addq $-2, %rcx - 0x48, 0x39, 0xd1, //0x0000329c cmpq %rdx, %rcx - 0x48, 0x89, 0xc1, //0x0000329f movq %rax, %rcx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000032a2 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xf1, 0xcf, 0xff, 0xff, //0x000032a7 vmovdqu $-12303(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x09, 0xcf, 0xff, 0xff, //0x000032af vmovdqu $-12535(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000032b7 vmovdqa %ymm0, %ymm11 - 0x0f, 0x85, 0x6e, 0xff, 0xff, 0xff, //0x000032bb jne LBB0_583 - 0xe9, 0x8a, 0x08, 0x00, 0x00, //0x000032c1 jmp LBB0_681 - //0x000032c6 LBB0_591 - 0x49, 0x01, 0xd2, //0x000032c6 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x000032c9 addq $1, %r10 - //0x000032cd LBB0_592 - 0x4d, 0x29, 0xf2, //0x000032cd subq %r14, %r10 - 0xe9, 0xb7, 0xe4, 0xff, 0xff, //0x000032d0 jmp LBB0_298 - //0x000032d5 LBB0_587 - 0x80, 0xfb, 0x22, //0x000032d5 cmpb $34, %bl - 0x0f, 0x85, 0x72, 0x08, 0x00, 0x00, //0x000032d8 jne LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x000032de vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000032e2 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000032e6 vmovdqa %ymm13, %ymm11 - 0x49, 0x01, 0xca, //0x000032eb addq %rcx, %r10 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000032ee vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xa5, 0xcf, 0xff, 0xff, //0x000032f3 vmovdqu $-12379(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xbd, 0xce, 0xff, 0xff, //0x000032fb vmovdqu $-12611(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00003303 vmovdqa %ymm0, %ymm11 - 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003307 jmp LBB0_592 - //0x0000330c LBB0_593 - 0xc5, 0x7d, 0x7f, 0xe2, //0x0000330c vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x00003310 vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003314 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003319 vmovdqa %ymm15, %ymm12 - 0x4c, 0x89, 0x3c, 0x24, //0x0000331e movq %r15, (%rsp) - 0x49, 0x83, 0xff, 0xff, //0x00003322 cmpq $-1, %r15 - 0x0f, 0x85, 0x2c, 0x00, 0x00, 0x00, //0x00003326 jne LBB0_596 - 0x48, 0x89, 0xd8, //0x0000332c movq %rbx, %rax - 0x4c, 0x29, 0xf0, //0x0000332f subq %r14, %rax - 0x48, 0x0f, 0xbc, 0xf2, //0x00003332 bsfq %rdx, %rsi - 0x48, 0x01, 0xc6, //0x00003336 addq %rax, %rsi - 0x48, 0x89, 0x34, 0x24, //0x00003339 movq %rsi, (%rsp) - 0xe9, 0x16, 0x00, 0x00, 0x00, //0x0000333d jmp LBB0_596 - //0x00003342 LBB0_595 - 0x4c, 0x89, 0x3c, 0x24, //0x00003342 movq %r15, (%rsp) - 0xc5, 0x7d, 0x7f, 0xe2, //0x00003346 vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x0000334a vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000334e vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003353 vmovdqa %ymm15, %ymm12 - //0x00003358 LBB0_596 - 0x44, 0x89, 0xd8, //0x00003358 movl %r11d, %eax - 0xf7, 0xd0, //0x0000335b notl %eax - 0x21, 0xd0, //0x0000335d andl %edx, %eax - 0x8d, 0x34, 0x00, //0x0000335f leal (%rax,%rax), %esi - 0x41, 0x8d, 0x3c, 0x43, //0x00003362 leal (%r11,%rax,2), %edi - 0xf7, 0xd6, //0x00003366 notl %esi - 0x21, 0xd6, //0x00003368 andl %edx, %esi - 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000336a andl $-1431655766, %esi - 0x45, 0x31, 0xdb, //0x00003370 xorl %r11d, %r11d - 0x01, 0xc6, //0x00003373 addl %eax, %esi - 0x41, 0x0f, 0x92, 0xc3, //0x00003375 setb %r11b - 0x01, 0xf6, //0x00003379 addl %esi, %esi - 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x0000337b xorl $1431655765, %esi - 0x21, 0xfe, //0x00003381 andl %edi, %esi - 0xf7, 0xd6, //0x00003383 notl %esi - 0x41, 0x21, 0xf2, //0x00003385 andl %esi, %r10d - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003388 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x0000338d vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003392 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x01, 0xcf, 0xff, 0xff, //0x00003397 vmovdqu $-12543(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x19, 0xce, 0xff, 0xff, //0x0000339f vmovdqu $-12775(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x000033a7 vmovdqa %ymm1, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe2, //0x000033ab vmovdqa %ymm2, %ymm12 - 0x4c, 0x8b, 0x3c, 0x24, //0x000033af movq (%rsp), %r15 - 0x4d, 0x85, 0xd2, //0x000033b3 testq %r10, %r10 - 0x0f, 0x85, 0x53, 0xf5, 0xff, 0xff, //0x000033b6 jne LBB0_224 - //0x000033bc LBB0_597 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x000033bc movl $64, %edx - //0x000033c1 LBB0_598 - 0xc5, 0xbd, 0x64, 0xc8, //0x000033c1 vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x000033c5 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x000033ca vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x000033ce vpmovmskb %ymm0, %esi - 0x0f, 0xbc, 0xfe, //0x000033d2 bsfl %esi, %edi - 0x4d, 0x85, 0xd2, //0x000033d5 testq %r10, %r10 - 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x000033d8 je LBB0_601 - 0x85, 0xf6, //0x000033de testl %esi, %esi - 0xb8, 0x40, 0x00, 0x00, 0x00, //0x000033e0 movl $64, %eax - 0x0f, 0x44, 0xf8, //0x000033e5 cmovel %eax, %edi - 0x48, 0x39, 0xfa, //0x000033e8 cmpq %rdi, %rdx - 0x49, 0x89, 0xda, //0x000033eb movq %rbx, %r10 - 0x0f, 0x87, 0x9b, 0x09, 0x00, 0x00, //0x000033ee ja LBB0_721 - 0x4d, 0x29, 0xf2, //0x000033f4 subq %r14, %r10 - 0x49, 0x01, 0xd2, //0x000033f7 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x000033fa addq $1, %r10 - 0xe9, 0x89, 0xe3, 0xff, 0xff, //0x000033fe jmp LBB0_298 - //0x00003403 LBB0_601 - 0x85, 0xf6, //0x00003403 testl %esi, %esi - 0x49, 0x89, 0xda, //0x00003405 movq %rbx, %r10 - 0x0f, 0x85, 0x8e, 0x09, 0x00, 0x00, //0x00003408 jne LBB0_722 - 0x49, 0x83, 0xc2, 0x20, //0x0000340e addq $32, %r10 - 0x48, 0x83, 0xc1, 0xe0, //0x00003412 addq $-32, %rcx - //0x00003416 LBB0_603 - 0x4d, 0x85, 0xdb, //0x00003416 testq %r11, %r11 - 0x0f, 0x85, 0xe2, 0x01, 0x00, 0x00, //0x00003419 jne LBB0_620 - 0x4c, 0x89, 0xfe, //0x0000341f movq %r15, %rsi - 0x48, 0x85, 0xc9, //0x00003422 testq %rcx, %rcx - 0x0f, 0x84, 0x25, 0x07, 0x00, 0x00, //0x00003425 je LBB0_681 - //0x0000342b LBB0_605 - 0x41, 0x0f, 0xb6, 0x12, //0x0000342b movzbl (%r10), %edx - 0x80, 0xfa, 0x22, //0x0000342f cmpb $34, %dl - 0x0f, 0x84, 0x98, 0x00, 0x00, 0x00, //0x00003432 je LBB0_613 - 0x80, 0xfa, 0x5c, //0x00003438 cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x0000343b je LBB0_609 - 0x80, 0xfa, 0x1f, //0x00003441 cmpb $31, %dl - 0x0f, 0x86, 0x5d, 0x09, 0x00, 0x00, //0x00003444 jbe LBB0_723 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000344a movq $-1, %rdx - 0xbf, 0x01, 0x00, 0x00, 0x00, //0x00003451 movl $1, %edi - 0x49, 0x01, 0xfa, //0x00003456 addq %rdi, %r10 - 0x48, 0x01, 0xd1, //0x00003459 addq %rdx, %rcx - 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x0000345c jne LBB0_605 - 0xe9, 0xe9, 0x06, 0x00, 0x00, //0x00003462 jmp LBB0_681 - //0x00003467 LBB0_609 - 0x48, 0x83, 0xf9, 0x01, //0x00003467 cmpq $1, %rcx - 0x0f, 0x84, 0xdf, 0x06, 0x00, 0x00, //0x0000346b je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003471 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00003475 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003479 vmovdqa %ymm13, %ymm11 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x0000347e movq $-2, %rdx - 0xbf, 0x02, 0x00, 0x00, 0x00, //0x00003485 movl $2, %edi - 0x48, 0x83, 0xfe, 0xff, //0x0000348a cmpq $-1, %rsi - 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x0000348e jne LBB0_612 - 0x4d, 0x89, 0xd7, //0x00003494 movq %r10, %r15 - 0x4d, 0x29, 0xf7, //0x00003497 subq %r14, %r15 - 0x4c, 0x89, 0xfe, //0x0000349a movq %r15, %rsi - //0x0000349d LBB0_612 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000349d vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000034a2 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0xf1, 0xcd, 0xff, 0xff, //0x000034a7 vmovdqu $-12815(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x09, 0xcd, 0xff, 0xff, //0x000034af vmovdqu $-13047(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000034b7 vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x000034bb vmovdqa %ymm1, %ymm12 - 0x49, 0x01, 0xfa, //0x000034bf addq %rdi, %r10 - 0x48, 0x01, 0xd1, //0x000034c2 addq %rdx, %rcx - 0x0f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x000034c5 jne LBB0_605 - 0xe9, 0x80, 0x06, 0x00, 0x00, //0x000034cb jmp LBB0_681 - //0x000034d0 LBB0_613 - 0x4d, 0x29, 0xf2, //0x000034d0 subq %r14, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x000034d3 addq $1, %r10 - 0xe9, 0xb0, 0xe2, 0xff, 0xff, //0x000034d7 jmp LBB0_298 - //0x000034dc LBB0_614 - 0x48, 0x85, 0xdb, //0x000034dc testq %rbx, %rbx - 0x0f, 0x84, 0x6b, 0x06, 0x00, 0x00, //0x000034df je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x000034e5 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000034e9 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000034ed vmovdqa %ymm13, %ymm11 - 0x4c, 0x89, 0xf7, //0x000034f2 movq %r14, %rdi - 0x48, 0xf7, 0xd7, //0x000034f5 notq %rdi - 0x49, 0x89, 0xca, //0x000034f8 movq %rcx, %r10 - 0x48, 0x8d, 0x04, 0x39, //0x000034fb leaq (%rcx,%rdi), %rax - 0x49, 0x83, 0xff, 0xff, //0x000034ff cmpq $-1, %r15 - 0x4c, 0x89, 0xfe, //0x00003503 movq %r15, %rsi - 0x4c, 0x0f, 0x44, 0xf8, //0x00003506 cmoveq %rax, %r15 - 0x48, 0x0f, 0x44, 0xf0, //0x0000350a cmoveq %rax, %rsi - 0x49, 0x83, 0xc2, 0x01, //0x0000350e addq $1, %r10 - 0x48, 0x83, 0xc3, 0xff, //0x00003512 addq $-1, %rbx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003516 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x7d, 0xcd, 0xff, 0xff, //0x0000351b vmovdqu $-12931(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x95, 0xcc, 0xff, 0xff, //0x00003523 vmovdqu $-13163(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x0000352b vmovdqa %ymm0, %ymm11 - 0x48, 0x85, 0xdb, //0x0000352f testq %rbx, %rbx - 0x0f, 0x85, 0xac, 0xf8, 0xff, 0xff, //0x00003532 jne LBB0_536 - 0xe9, 0x49, 0xf9, 0xff, 0xff, //0x00003538 jmp LBB0_546 - //0x0000353d LBB0_616 - 0x48, 0x85, 0xdb, //0x0000353d testq %rbx, %rbx - 0x0f, 0x84, 0x0a, 0x06, 0x00, 0x00, //0x00003540 je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003546 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x0000354a vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000354e vmovdqa %ymm13, %ymm11 - 0x4c, 0x89, 0xf1, //0x00003553 movq %r14, %rcx - 0x48, 0xf7, 0xd1, //0x00003556 notq %rcx - 0x4c, 0x01, 0xd1, //0x00003559 addq %r10, %rcx - 0x4c, 0x89, 0xfa, //0x0000355c movq %r15, %rdx - 0x49, 0x83, 0xff, 0xff, //0x0000355f cmpq $-1, %r15 - 0x4c, 0x89, 0xf8, //0x00003563 movq %r15, %rax - 0x48, 0x0f, 0x44, 0xc1, //0x00003566 cmoveq %rcx, %rax - 0x49, 0x0f, 0x45, 0xcf, //0x0000356a cmovneq %r15, %rcx - 0x49, 0x83, 0xc2, 0x01, //0x0000356e addq $1, %r10 - 0x48, 0x83, 0xc3, 0xff, //0x00003572 addq $-1, %rbx - 0x49, 0x89, 0xc7, //0x00003576 movq %rax, %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003579 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x1a, 0xcd, 0xff, 0xff, //0x0000357e vmovdqu $-13030(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x32, 0xcc, 0xff, 0xff, //0x00003586 vmovdqu $-13262(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x0000358e vmovdqa %ymm0, %ymm11 - 0x48, 0x85, 0xdb, //0x00003592 testq %rbx, %rbx - 0x0f, 0x85, 0x16, 0xfb, 0xff, 0xff, //0x00003595 jne LBB0_566 - 0xe9, 0xb0, 0x05, 0x00, 0x00, //0x0000359b jmp LBB0_681 - //0x000035a0 LBB0_618 - 0x48, 0x85, 0xc9, //0x000035a0 testq %rcx, %rcx - 0x0f, 0x84, 0xa7, 0x05, 0x00, 0x00, //0x000035a3 je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x000035a9 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000035ad vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000035b1 vmovdqa %ymm13, %ymm11 - 0x4c, 0x89, 0xf6, //0x000035b6 movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x000035b9 notq %rsi - 0x49, 0x89, 0xda, //0x000035bc movq %rbx, %r10 - 0x48, 0x8d, 0x04, 0x33, //0x000035bf leaq (%rbx,%rsi), %rax - 0x49, 0x83, 0xff, 0xff, //0x000035c3 cmpq $-1, %r15 - 0x4c, 0x89, 0xff, //0x000035c7 movq %r15, %rdi - 0x4c, 0x0f, 0x44, 0xf8, //0x000035ca cmoveq %rax, %r15 - 0x48, 0x0f, 0x44, 0xf8, //0x000035ce cmoveq %rax, %rdi - 0x49, 0x83, 0xc2, 0x01, //0x000035d2 addq $1, %r10 - 0x48, 0x83, 0xc1, 0xff, //0x000035d6 addq $-1, %rcx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000035da vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xb9, 0xcc, 0xff, 0xff, //0x000035df vmovdqu $-13127(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xd1, 0xcb, 0xff, 0xff, //0x000035e7 vmovdqu $-13359(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000035ef vmovdqa %ymm0, %ymm11 - 0x48, 0x85, 0xc9, //0x000035f3 testq %rcx, %rcx - 0x0f, 0x85, 0x2f, 0xfc, 0xff, 0xff, //0x000035f6 jne LBB0_582 - 0xe9, 0xcc, 0xfc, 0xff, 0xff, //0x000035fc jmp LBB0_592 - //0x00003601 LBB0_620 - 0x48, 0x85, 0xc9, //0x00003601 testq %rcx, %rcx - 0x0f, 0x84, 0x46, 0x05, 0x00, 0x00, //0x00003604 je LBB0_681 - 0xc5, 0x7d, 0x7f, 0xe1, //0x0000360a vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x0000360e vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003612 vmovdqa %ymm13, %ymm11 - 0x4c, 0x89, 0xf6, //0x00003617 movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x0000361a notq %rsi - 0x4c, 0x01, 0xd6, //0x0000361d addq %r10, %rsi - 0x4c, 0x89, 0xfa, //0x00003620 movq %r15, %rdx - 0x49, 0x83, 0xff, 0xff, //0x00003623 cmpq $-1, %r15 - 0x4c, 0x89, 0xf8, //0x00003627 movq %r15, %rax - 0x48, 0x0f, 0x44, 0xc6, //0x0000362a cmoveq %rsi, %rax - 0x49, 0x0f, 0x45, 0xf7, //0x0000362e cmovneq %r15, %rsi - 0x49, 0x83, 0xc2, 0x01, //0x00003632 addq $1, %r10 - 0x48, 0x83, 0xc1, 0xff, //0x00003636 addq $-1, %rcx - 0x49, 0x89, 0xc7, //0x0000363a movq %rax, %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000363d vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0x56, 0xcc, 0xff, 0xff, //0x00003642 vmovdqu $-13226(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x6e, 0xcb, 0xff, 0xff, //0x0000364a vmovdqu $-13458(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00003652 vmovdqa %ymm0, %ymm11 - 0x48, 0x85, 0xc9, //0x00003656 testq %rcx, %rcx - 0x0f, 0x85, 0xcc, 0xfd, 0xff, 0xff, //0x00003659 jne LBB0_605 - 0xe9, 0xec, 0x04, 0x00, 0x00, //0x0000365f jmp LBB0_681 - //0x00003664 LBB0_622 - 0x49, 0x39, 0xf2, //0x00003664 cmpq %rsi, %r10 - 0x0f, 0x84, 0x28, 0x05, 0x00, 0x00, //0x00003667 je LBB0_711 - 0xc5, 0x7d, 0x7f, 0xe1, //0x0000366d vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00003671 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003675 vmovdqa %ymm13, %ymm11 - 0x49, 0x01, 0xf1, //0x0000367a addq %rsi, %r9 - 0x49, 0x83, 0xc1, 0x01, //0x0000367d addq $1, %r9 - 0x48, 0xf7, 0xd6, //0x00003681 notq %rsi - 0x49, 0x01, 0xf2, //0x00003684 addq %rsi, %r10 - 0x4c, 0x8b, 0x5c, 0x24, 0x18, //0x00003687 movq $24(%rsp), %r11 - 0x48, 0x8b, 0x7c, 0x24, 0x10, //0x0000368c movq $16(%rsp), %rdi - 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00003691 movq $8(%rsp), %r15 - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003696 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0xfe, 0x6f, 0x25, 0xfd, 0xcb, 0xff, 0xff, //0x0000369b vmovdqu $-13315(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x15, 0xcb, 0xff, 0xff, //0x000036a3 vmovdqu $-13547(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000036ab vmovdqa %ymm0, %ymm11 - 0x4d, 0x85, 0xd2, //0x000036af testq %r10, %r10 - 0x0f, 0x8f, 0x25, 0x00, 0x00, 0x00, //0x000036b2 jg LBB0_626 - 0xe9, 0xd8, 0x04, 0x00, 0x00, //0x000036b8 jmp LBB0_711 - //0x000036bd LBB0_624 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000036bd movq $-2, %rcx - 0xba, 0x02, 0x00, 0x00, 0x00, //0x000036c4 movl $2, %edx - 0x49, 0x01, 0xd1, //0x000036c9 addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x000036cc movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x000036d4 addq %rcx, %r10 - 0x0f, 0x8e, 0xb8, 0x04, 0x00, 0x00, //0x000036d7 jle LBB0_711 - //0x000036dd LBB0_626 - 0x41, 0x0f, 0xb6, 0x09, //0x000036dd movzbl (%r9), %ecx - 0x80, 0xf9, 0x5c, //0x000036e1 cmpb $92, %cl - 0x0f, 0x84, 0xd3, 0xff, 0xff, 0xff, //0x000036e4 je LBB0_624 - 0x80, 0xf9, 0x22, //0x000036ea cmpb $34, %cl - 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x000036ed je LBB0_629 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000036f3 movq $-1, %rcx - 0xba, 0x01, 0x00, 0x00, 0x00, //0x000036fa movl $1, %edx - 0x49, 0x01, 0xd1, //0x000036ff addq %rdx, %r9 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00003702 movq $-1, (%rsp) - 0x49, 0x01, 0xca, //0x0000370a addq %rcx, %r10 - 0x0f, 0x8f, 0xca, 0xff, 0xff, 0xff, //0x0000370d jg LBB0_626 - 0xe9, 0x7d, 0x04, 0x00, 0x00, //0x00003713 jmp LBB0_711 - //0x00003718 LBB0_629 - 0x4d, 0x29, 0xf1, //0x00003718 subq %r14, %r9 - 0x49, 0x83, 0xc1, 0x01, //0x0000371b addq $1, %r9 - 0x4d, 0x89, 0x4d, 0x00, //0x0000371f movq %r9, (%r13) - 0x4d, 0x85, 0xc0, //0x00003723 testq %r8, %r8 - 0x0f, 0x8f, 0x74, 0xcc, 0xff, 0xff, //0x00003726 jg LBB0_3 - 0xe9, 0xfb, 0x03, 0x00, 0x00, //0x0000372c jmp LBB0_679 - //0x00003731 LBB0_630 - 0xc5, 0x7d, 0x7f, 0xe1, //0x00003731 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x00003735 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003739 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000373e vmovdqa %ymm15, %ymm12 - 0x4c, 0x89, 0x1c, 0x24, //0x00003743 movq %r11, (%rsp) - 0x49, 0x83, 0xfb, 0xff, //0x00003747 cmpq $-1, %r11 - 0x0f, 0x85, 0x2c, 0x00, 0x00, 0x00, //0x0000374b jne LBB0_633 - 0x48, 0x89, 0xf8, //0x00003751 movq %rdi, %rax - 0x4c, 0x29, 0xf0, //0x00003754 subq %r14, %rax - 0x48, 0x0f, 0xbc, 0xca, //0x00003757 bsfq %rdx, %rcx - 0x48, 0x01, 0xc1, //0x0000375b addq %rax, %rcx - 0x48, 0x89, 0x0c, 0x24, //0x0000375e movq %rcx, (%rsp) - 0xe9, 0x16, 0x00, 0x00, 0x00, //0x00003762 jmp LBB0_633 - //0x00003767 LBB0_632 - 0x4c, 0x89, 0x1c, 0x24, //0x00003767 movq %r11, (%rsp) - 0xc5, 0x7d, 0x7f, 0xe1, //0x0000376b vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x0000376f vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003773 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003778 vmovdqa %ymm15, %ymm12 - //0x0000377d LBB0_633 - 0x44, 0x89, 0xd0, //0x0000377d movl %r10d, %eax - 0xf7, 0xd0, //0x00003780 notl %eax - 0x21, 0xd0, //0x00003782 andl %edx, %eax - 0x8d, 0x0c, 0x00, //0x00003784 leal (%rax,%rax), %ecx - 0x41, 0x8d, 0x1c, 0x42, //0x00003787 leal (%r10,%rax,2), %ebx - 0xf7, 0xd1, //0x0000378b notl %ecx - 0x21, 0xd1, //0x0000378d andl %edx, %ecx - 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000378f andl $-1431655766, %ecx - 0x45, 0x31, 0xd2, //0x00003795 xorl %r10d, %r10d - 0x01, 0xc1, //0x00003798 addl %eax, %ecx - 0x41, 0x0f, 0x92, 0xc2, //0x0000379a setb %r10b - 0x01, 0xc9, //0x0000379e addl %ecx, %ecx - 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x000037a0 xorl $1431655765, %ecx - 0x21, 0xd9, //0x000037a6 andl %ebx, %ecx - 0xf7, 0xd1, //0x000037a8 notl %ecx - 0x21, 0xce, //0x000037aa andl %ecx, %esi - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000037ac vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x000037b1 vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000037b6 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0xdd, 0xca, 0xff, 0xff, //0x000037bb vmovdqu $-13603(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xf5, 0xc9, 0xff, 0xff, //0x000037c3 vmovdqu $-13835(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x000037cb vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x000037cf vmovdqa %ymm1, %ymm12 - 0x4c, 0x8b, 0x1c, 0x24, //0x000037d3 movq (%rsp), %r11 - 0xc5, 0x7d, 0x7f, 0xea, //0x000037d7 vmovdqa %ymm13, %ymm2 - 0x48, 0x85, 0xf6, //0x000037db testq %rsi, %rsi - 0x0f, 0x85, 0xfe, 0xf1, 0xff, 0xff, //0x000037de jne LBB0_247 - //0x000037e4 LBB0_634 - 0xc5, 0x7d, 0x7f, 0xe1, //0x000037e4 vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000037e8 vmovdqa %ymm11, %ymm0 - 0xc5, 0x7d, 0x6f, 0xda, //0x000037ec vmovdqa %ymm2, %ymm11 - 0x48, 0x83, 0xc7, 0x20, //0x000037f0 addq $32, %rdi - 0x49, 0x83, 0xc0, 0xe0, //0x000037f4 addq $-32, %r8 - //0x000037f8 LBB0_635 - 0x4d, 0x85, 0xd2, //0x000037f8 testq %r10, %r10 - 0x0f, 0x85, 0x6e, 0x02, 0x00, 0x00, //0x000037fb jne LBB0_669 - 0x4c, 0x89, 0xf6, //0x00003801 movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x00003804 notq %rsi - 0x4d, 0x89, 0xda, //0x00003807 movq %r11, %r10 - 0x4d, 0x85, 0xc0, //0x0000380a testq %r8, %r8 - 0x0f, 0x84, 0x95, 0x02, 0x00, 0x00, //0x0000380d je LBB0_671 - //0x00003813 LBB0_637 - 0x48, 0x83, 0xc6, 0x01, //0x00003813 addq $1, %rsi - //0x00003817 LBB0_638 - 0x31, 0xd2, //0x00003817 xorl %edx, %edx - 0x48, 0x89, 0xf9, //0x00003819 movq %rdi, %rcx - //0x0000381c LBB0_639 - 0x0f, 0xb6, 0x1c, 0x11, //0x0000381c movzbl (%rcx,%rdx), %ebx - 0x80, 0xfb, 0x22, //0x00003820 cmpb $34, %bl - 0x0f, 0x84, 0x61, 0x00, 0x00, 0x00, //0x00003823 je LBB0_646 - 0x80, 0xfb, 0x5c, //0x00003829 cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x0000382c je LBB0_644 - 0x48, 0x83, 0xc2, 0x01, //0x00003832 addq $1, %rdx - 0x49, 0x39, 0xd0, //0x00003836 cmpq %rdx, %r8 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003839 jne LBB0_639 - 0xe9, 0x52, 0x00, 0x00, 0x00, //0x0000383f jmp LBB0_642 - //0x00003844 LBB0_644 - 0x49, 0x8d, 0x40, 0xff, //0x00003844 leaq $-1(%r8), %rax - 0x48, 0x39, 0xd0, //0x00003848 cmpq %rdx, %rax - 0x0f, 0x84, 0xad, 0x04, 0x00, 0x00, //0x0000384b je LBB0_707 - 0x48, 0x8d, 0x04, 0x3e, //0x00003851 leaq (%rsi,%rdi), %rax - 0x48, 0x01, 0xd0, //0x00003855 addq %rdx, %rax - 0x49, 0x83, 0xfa, 0xff, //0x00003858 cmpq $-1, %r10 - 0x4c, 0x0f, 0x44, 0xd8, //0x0000385c cmoveq %rax, %r11 - 0x4c, 0x0f, 0x44, 0xd0, //0x00003860 cmoveq %rax, %r10 - 0x48, 0x01, 0xd7, //0x00003864 addq %rdx, %rdi - 0x48, 0x83, 0xc7, 0x02, //0x00003867 addq $2, %rdi - 0x4c, 0x89, 0xc0, //0x0000386b movq %r8, %rax - 0x48, 0x29, 0xd0, //0x0000386e subq %rdx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00003871 addq $-2, %rax - 0x49, 0x83, 0xc0, 0xfe, //0x00003875 addq $-2, %r8 - 0x49, 0x39, 0xd0, //0x00003879 cmpq %rdx, %r8 - 0x49, 0x89, 0xc0, //0x0000387c movq %rax, %r8 - 0x0f, 0x85, 0x92, 0xff, 0xff, 0xff, //0x0000387f jne LBB0_638 - 0xe9, 0x74, 0x04, 0x00, 0x00, //0x00003885 jmp LBB0_707 - //0x0000388a LBB0_646 - 0x48, 0x01, 0xd1, //0x0000388a addq %rdx, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x0000388d addq $1, %rcx - 0xe9, 0x15, 0x02, 0x00, 0x00, //0x00003891 jmp LBB0_672 - //0x00003896 LBB0_642 - 0x80, 0xfb, 0x22, //0x00003896 cmpb $34, %bl - 0x0f, 0x85, 0x5f, 0x04, 0x00, 0x00, //0x00003899 jne LBB0_707 - 0x48, 0x89, 0xf9, //0x0000389f movq %rdi, %rcx - 0x4c, 0x01, 0xc1, //0x000038a2 addq %r8, %rcx - 0xe9, 0x01, 0x02, 0x00, 0x00, //0x000038a5 jmp LBB0_672 - //0x000038aa LBB0_647 - 0xc5, 0x7d, 0x7f, 0xe2, //0x000038aa vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x000038ae vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000038b2 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x000038b7 vmovdqa %ymm15, %ymm12 - 0x49, 0x83, 0xfa, 0xff, //0x000038bc cmpq $-1, %r10 - 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x000038c0 jne LBB0_650 - 0x48, 0x89, 0xd8, //0x000038c6 movq %rbx, %rax - 0x4c, 0x29, 0xf0, //0x000038c9 subq %r14, %rax - 0x4c, 0x0f, 0xbc, 0xd2, //0x000038cc bsfq %rdx, %r10 - 0x49, 0x01, 0xc2, //0x000038d0 addq %rax, %r10 - 0xe9, 0x12, 0x00, 0x00, 0x00, //0x000038d3 jmp LBB0_650 - //0x000038d8 LBB0_649 - 0xc5, 0x7d, 0x7f, 0xe2, //0x000038d8 vmovdqa %ymm12, %ymm2 - 0xc5, 0x7d, 0x7f, 0xd9, //0x000038dc vmovdqa %ymm11, %ymm1 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000038e0 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x000038e5 vmovdqa %ymm15, %ymm12 - //0x000038ea LBB0_650 - 0x44, 0x89, 0xd8, //0x000038ea movl %r11d, %eax - 0xf7, 0xd0, //0x000038ed notl %eax - 0x21, 0xd0, //0x000038ef andl %edx, %eax - 0x8d, 0x34, 0x00, //0x000038f1 leal (%rax,%rax), %esi - 0x41, 0x8d, 0x3c, 0x43, //0x000038f4 leal (%r11,%rax,2), %edi - 0xf7, 0xd6, //0x000038f8 notl %esi - 0x21, 0xd6, //0x000038fa andl %edx, %esi - 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x000038fc andl $-1431655766, %esi - 0x45, 0x31, 0xdb, //0x00003902 xorl %r11d, %r11d - 0x01, 0xc6, //0x00003905 addl %eax, %esi - 0x41, 0x0f, 0x92, 0xc3, //0x00003907 setb %r11b - 0x01, 0xf6, //0x0000390b addl %esi, %esi - 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x0000390d xorl $1431655765, %esi - 0x21, 0xfe, //0x00003913 andl %edi, %esi - 0xf7, 0xd6, //0x00003915 notl %esi - 0x21, 0xf1, //0x00003917 andl %esi, %ecx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003919 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x0000391e vmovdqa %ymm12, %ymm15 - 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003923 vmovdqa %ymm11, %ymm13 - 0xc5, 0xfe, 0x6f, 0x25, 0x70, 0xc9, 0xff, 0xff, //0x00003928 vmovdqu $-13968(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x88, 0xc8, 0xff, 0xff, //0x00003930 vmovdqu $-14200(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd9, //0x00003938 vmovdqa %ymm1, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe2, //0x0000393c vmovdqa %ymm2, %ymm12 - 0x48, 0x85, 0xc9, //0x00003940 testq %rcx, %rcx - 0x0f, 0x85, 0xf0, 0xf0, 0xff, 0xff, //0x00003943 jne LBB0_398 - //0x00003949 LBB0_651 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00003949 movl $64, %edx - //0x0000394e LBB0_652 - 0xc5, 0xbd, 0x64, 0xc8, //0x0000394e vpcmpgtb %ymm0, %ymm8, %ymm1 - 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00003952 vpcmpgtb %ymm9, %ymm0, %ymm0 - 0xc5, 0xf5, 0xdb, 0xc0, //0x00003957 vpand %ymm0, %ymm1, %ymm0 - 0xc5, 0xfd, 0xd7, 0xf0, //0x0000395b vpmovmskb %ymm0, %esi - 0x0f, 0xbc, 0xfe, //0x0000395f bsfl %esi, %edi - 0x48, 0x85, 0xc9, //0x00003962 testq %rcx, %rcx - 0x0f, 0x84, 0x2c, 0x00, 0x00, 0x00, //0x00003965 je LBB0_655 - 0x85, 0xf6, //0x0000396b testl %esi, %esi - 0xb8, 0x40, 0x00, 0x00, 0x00, //0x0000396d movl $64, %eax - 0x0f, 0x44, 0xf8, //0x00003972 cmovel %eax, %edi - 0x48, 0x39, 0xfa, //0x00003975 cmpq %rdi, %rdx - 0x48, 0x89, 0xd9, //0x00003978 movq %rbx, %rcx - 0x0f, 0x87, 0x31, 0x04, 0x00, 0x00, //0x0000397b ja LBB0_725 - 0xc5, 0x7d, 0x7f, 0xea, //0x00003981 vmovdqa %ymm13, %ymm2 - 0x4c, 0x29, 0xf1, //0x00003985 subq %r14, %rcx - 0x48, 0x01, 0xd1, //0x00003988 addq %rdx, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x0000398b addq $1, %rcx - 0x4d, 0x89, 0xd3, //0x0000398f movq %r10, %r11 - 0xe9, 0x57, 0xeb, 0xff, 0xff, //0x00003992 jmp LBB0_461 - //0x00003997 LBB0_655 - 0x85, 0xf6, //0x00003997 testl %esi, %esi - 0x0f, 0x85, 0x23, 0x04, 0x00, 0x00, //0x00003999 jne LBB0_726 - 0xc5, 0x7d, 0x7f, 0xe1, //0x0000399f vmovdqa %ymm12, %ymm1 - 0xc5, 0x7d, 0x7f, 0xd8, //0x000039a3 vmovdqa %ymm11, %ymm0 - 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000039a7 vmovdqa %ymm13, %ymm11 - 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x000039ac vmovdqa %ymm15, %ymm12 - 0x48, 0x83, 0xc3, 0x20, //0x000039b1 addq $32, %rbx - 0x49, 0x83, 0xc0, 0xe0, //0x000039b5 addq $-32, %r8 - //0x000039b9 LBB0_657 - 0x4d, 0x85, 0xdb, //0x000039b9 testq %r11, %r11 - 0x0f, 0x85, 0x12, 0x01, 0x00, 0x00, //0x000039bc jne LBB0_673 - 0x4c, 0x89, 0xd6, //0x000039c2 movq %r10, %rsi - 0x4d, 0x85, 0xc0, //0x000039c5 testq %r8, %r8 - 0x0f, 0x84, 0x30, 0x03, 0x00, 0x00, //0x000039c8 je LBB0_707 - //0x000039ce LBB0_659 - 0x48, 0x89, 0xd9, //0x000039ce movq %rbx, %rcx - //0x000039d1 LBB0_660 - 0x0f, 0xb6, 0x11, //0x000039d1 movzbl (%rcx), %edx - 0x80, 0xfa, 0x22, //0x000039d4 cmpb $34, %dl - 0x0f, 0x84, 0x5d, 0x00, 0x00, 0x00, //0x000039d7 je LBB0_668 - 0x80, 0xfa, 0x5c, //0x000039dd cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x000039e0 je LBB0_665 - 0x80, 0xfa, 0x1f, //0x000039e6 cmpb $31, %dl - 0x0f, 0x86, 0xe1, 0x03, 0x00, 0x00, //0x000039e9 jbe LBB0_727 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000039ef movq $-1, %rdx - 0xbf, 0x01, 0x00, 0x00, 0x00, //0x000039f6 movl $1, %edi - //0x000039fb LBB0_664 - 0x48, 0x01, 0xf9, //0x000039fb addq %rdi, %rcx - 0x49, 0x01, 0xd0, //0x000039fe addq %rdx, %r8 - 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00003a01 jne LBB0_660 - 0xe9, 0xf2, 0x02, 0x00, 0x00, //0x00003a07 jmp LBB0_707 - //0x00003a0c LBB0_665 - 0x49, 0x83, 0xf8, 0x01, //0x00003a0c cmpq $1, %r8 - 0x0f, 0x84, 0xe8, 0x02, 0x00, 0x00, //0x00003a10 je LBB0_707 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00003a16 movq $-2, %rdx - 0xbf, 0x02, 0x00, 0x00, 0x00, //0x00003a1d movl $2, %edi - 0x48, 0x83, 0xfe, 0xff, //0x00003a22 cmpq $-1, %rsi - 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00003a26 jne LBB0_664 - 0x48, 0x89, 0xce, //0x00003a2c movq %rcx, %rsi - 0x4c, 0x29, 0xf6, //0x00003a2f subq %r14, %rsi - 0x49, 0x89, 0xf2, //0x00003a32 movq %rsi, %r10 - 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003a35 jmp LBB0_664 - //0x00003a3a LBB0_668 - 0x4c, 0x29, 0xf1, //0x00003a3a subq %r14, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x00003a3d addq $1, %rcx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003a41 vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7d, 0x7f, 0xda, //0x00003a46 vmovdqa %ymm11, %ymm2 - 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003a4a vmovdqa %ymm12, %ymm15 - 0xc5, 0xfe, 0x6f, 0x25, 0x49, 0xc8, 0xff, 0xff, //0x00003a4f vmovdqu $-14263(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0x61, 0xc7, 0xff, 0xff, //0x00003a57 vmovdqu $-14495(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00003a5f vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00003a63 vmovdqa %ymm1, %ymm12 - 0x4d, 0x89, 0xd3, //0x00003a67 movq %r10, %r11 - 0xe9, 0x7f, 0xea, 0xff, 0xff, //0x00003a6a jmp LBB0_461 - //0x00003a6f LBB0_669 - 0x4d, 0x85, 0xc0, //0x00003a6f testq %r8, %r8 - 0x0f, 0x84, 0x86, 0x02, 0x00, 0x00, //0x00003a72 je LBB0_707 - 0x4c, 0x89, 0xf6, //0x00003a78 movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x00003a7b notq %rsi - 0x48, 0x8d, 0x04, 0x37, //0x00003a7e leaq (%rdi,%rsi), %rax - 0x4c, 0x89, 0xd9, //0x00003a82 movq %r11, %rcx - 0x49, 0x83, 0xfb, 0xff, //0x00003a85 cmpq $-1, %r11 - 0x4d, 0x89, 0xda, //0x00003a89 movq %r11, %r10 - 0x48, 0x0f, 0x44, 0xc8, //0x00003a8c cmoveq %rax, %rcx - 0x4c, 0x0f, 0x44, 0xd0, //0x00003a90 cmoveq %rax, %r10 - 0x48, 0x83, 0xc7, 0x01, //0x00003a94 addq $1, %rdi - 0x49, 0x83, 0xc0, 0xff, //0x00003a98 addq $-1, %r8 - 0x49, 0x89, 0xcb, //0x00003a9c movq %rcx, %r11 - 0x4d, 0x85, 0xc0, //0x00003a9f testq %r8, %r8 - 0x0f, 0x85, 0x6b, 0xfd, 0xff, 0xff, //0x00003aa2 jne LBB0_637 - //0x00003aa8 LBB0_671 - 0x48, 0x89, 0xf9, //0x00003aa8 movq %rdi, %rcx - //0x00003aab LBB0_672 - 0x4c, 0x29, 0xf1, //0x00003aab subq %r14, %rcx - 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003aae vpcmpeqd %ymm9, %ymm9, %ymm9 - 0xc5, 0x7d, 0x7f, 0xda, //0x00003ab3 vmovdqa %ymm11, %ymm2 - 0xc5, 0xfe, 0x6f, 0x25, 0xe1, 0xc7, 0xff, 0xff, //0x00003ab7 vmovdqu $-14367(%rip), %ymm4 /* LCPI0_19+0(%rip) */ - 0xc5, 0xfe, 0x6f, 0x1d, 0xf9, 0xc6, 0xff, 0xff, //0x00003abf vmovdqu $-14599(%rip), %ymm3 /* LCPI0_9+0(%rip) */ - 0xc5, 0x7d, 0x6f, 0xd8, //0x00003ac7 vmovdqa %ymm0, %ymm11 - 0xc5, 0x7d, 0x6f, 0xe1, //0x00003acb vmovdqa %ymm1, %ymm12 - 0xe9, 0x1a, 0xea, 0xff, 0xff, //0x00003acf jmp LBB0_461 - //0x00003ad4 LBB0_673 - 0x4d, 0x85, 0xc0, //0x00003ad4 testq %r8, %r8 - 0x0f, 0x84, 0x21, 0x02, 0x00, 0x00, //0x00003ad7 je LBB0_707 - 0x4c, 0x89, 0xf6, //0x00003add movq %r14, %rsi - 0x48, 0xf7, 0xd6, //0x00003ae0 notq %rsi - 0x48, 0x01, 0xde, //0x00003ae3 addq %rbx, %rsi - 0x49, 0x83, 0xfa, 0xff, //0x00003ae6 cmpq $-1, %r10 - 0x4c, 0x89, 0xd0, //0x00003aea movq %r10, %rax - 0x48, 0x0f, 0x44, 0xc6, //0x00003aed cmoveq %rsi, %rax - 0x49, 0x0f, 0x45, 0xf2, //0x00003af1 cmovneq %r10, %rsi - 0x48, 0x83, 0xc3, 0x01, //0x00003af5 addq $1, %rbx - 0x49, 0x83, 0xc0, 0xff, //0x00003af9 addq $-1, %r8 - 0x49, 0x89, 0xc2, //0x00003afd movq %rax, %r10 - 0x4d, 0x85, 0xc0, //0x00003b00 testq %r8, %r8 - 0x0f, 0x85, 0xc5, 0xfe, 0xff, 0xff, //0x00003b03 jne LBB0_659 - 0xe9, 0xf0, 0x01, 0x00, 0x00, //0x00003b09 jmp LBB0_707 - //0x00003b0e LBB0_675 - 0x4d, 0x89, 0x65, 0x00, //0x00003b0e movq %r12, (%r13) - //0x00003b12 LBB0_677 - 0x48, 0xc7, 0x04, 0x24, 0xff, 0xff, 0xff, 0xff, //0x00003b12 movq $-1, (%rsp) - 0xe9, 0x76, 0x00, 0x00, 0x00, //0x00003b1a jmp LBB0_711 - //0x00003b1f LBB0_705 - 0x48, 0xc7, 0x04, 0x24, 0xf9, 0xff, 0xff, 0xff, //0x00003b1f movq $-7, (%rsp) - 0xe9, 0x69, 0x00, 0x00, 0x00, //0x00003b27 jmp LBB0_711 - //0x00003b2c LBB0_679 - 0x49, 0x83, 0xc0, 0xff, //0x00003b2c addq $-1, %r8 - 0x4c, 0x89, 0x04, 0x24, //0x00003b30 movq %r8, (%rsp) - 0xe9, 0x5c, 0x00, 0x00, 0x00, //0x00003b34 jmp LBB0_711 - //0x00003b39 LBB0_463 - 0x49, 0x83, 0xc1, 0xff, //0x00003b39 addq $-1, %r9 - 0x4c, 0x89, 0x0c, 0x24, //0x00003b3d movq %r9, (%rsp) - 0xe9, 0x4f, 0x00, 0x00, 0x00, //0x00003b41 jmp LBB0_711 - //0x00003b46 LBB0_680 - 0x49, 0x83, 0xfa, 0xff, //0x00003b46 cmpq $-1, %r10 - 0x0f, 0x85, 0x7c, 0x00, 0x00, 0x00, //0x00003b4a jne LBB0_703 - //0x00003b50 LBB0_681 - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00003b50 movq $-1, %r10 - 0x4d, 0x89, 0xc7, //0x00003b57 movq %r8, %r15 - 0xe9, 0x6d, 0x00, 0x00, 0x00, //0x00003b5a jmp LBB0_703 - //0x00003b5f LBB0_682 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003b5f movq $-1, %rcx - 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00003b66 jmp LBB0_684 - //0x00003b6b LBB0_178 - 0x48, 0x83, 0xc3, 0xff, //0x00003b6b addq $-1, %rbx - 0x48, 0x89, 0x1c, 0x24, //0x00003b6f movq %rbx, (%rsp) - 0xe9, 0x1d, 0x00, 0x00, 0x00, //0x00003b73 jmp LBB0_711 - //0x00003b78 LBB0_683 - 0x4c, 0x89, 0xe9, //0x00003b78 movq %r13, %rcx - //0x00003b7b LBB0_684 - 0x48, 0x8b, 0x54, 0x24, 0x30, //0x00003b7b movq $48(%rsp), %rdx - 0x48, 0x8b, 0x02, //0x00003b80 movq (%rdx), %rax - 0x48, 0x29, 0xc8, //0x00003b83 subq %rcx, %rax - 0x48, 0x83, 0xc0, 0xfe, //0x00003b86 addq $-2, %rax - 0x48, 0x89, 0x02, //0x00003b8a movq %rax, (%rdx) - //0x00003b8d LBB0_710 - 0x48, 0xc7, 0x04, 0x24, 0xfe, 0xff, 0xff, 0xff, //0x00003b8d movq $-2, (%rsp) - //0x00003b95 LBB0_711 - 0x48, 0x8b, 0x04, 0x24, //0x00003b95 movq (%rsp), %rax - 0x48, 0x8d, 0x65, 0xd8, //0x00003b99 leaq $-40(%rbp), %rsp - 0x5b, //0x00003b9d popq %rbx - 0x41, 0x5c, //0x00003b9e popq %r12 - 0x41, 0x5d, //0x00003ba0 popq %r13 - 0x41, 0x5e, //0x00003ba2 popq %r14 - 0x41, 0x5f, //0x00003ba4 popq %r15 - 0x5d, //0x00003ba6 popq %rbp - 0xc5, 0xf8, 0x77, //0x00003ba7 vzeroupper - 0xc3, //0x00003baa retq - //0x00003bab LBB0_686 - 0x49, 0x89, 0x55, 0x00, //0x00003bab movq %rdx, (%r13) - 0xe9, 0xe1, 0xff, 0xff, 0xff, //0x00003baf jmp LBB0_711 - //0x00003bb4 LBB0_699 - 0x49, 0x83, 0xff, 0xff, //0x00003bb4 cmpq $-1, %r15 - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00003bb8 jne LBB0_702 - 0x4c, 0x0f, 0xbc, 0xfe, //0x00003bbe bsfq %rsi, %r15 - //0x00003bc2 LBB0_701 - 0x4d, 0x01, 0xd7, //0x00003bc2 addq %r10, %r15 - //0x00003bc5 LBB0_702 - 0x49, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00003bc5 movq $-2, %r10 - //0x00003bcc LBB0_703 - 0x4c, 0x89, 0x14, 0x24, //0x00003bcc movq %r10, (%rsp) - 0x4d, 0x89, 0x7d, 0x00, //0x00003bd0 movq %r15, (%r13) - 0xe9, 0xbc, 0xff, 0xff, 0xff, //0x00003bd4 jmp LBB0_711 - //0x00003bd9 LBB0_687 - 0x80, 0xfa, 0x61, //0x00003bd9 cmpb $97, %dl - 0x0f, 0x85, 0xab, 0xff, 0xff, 0xff, //0x00003bdc jne LBB0_710 - 0x48, 0x8d, 0x41, 0x01, //0x00003be2 leaq $1(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003be6 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x6c, //0x00003bea cmpb $108, $1(%r14,%rcx) - 0x0f, 0x85, 0x97, 0xff, 0xff, 0xff, //0x00003bf0 jne LBB0_710 - 0x48, 0x8d, 0x41, 0x02, //0x00003bf6 leaq $2(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003bfa movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x73, //0x00003bfe cmpb $115, $2(%r14,%rcx) - 0x0f, 0x85, 0x83, 0xff, 0xff, 0xff, //0x00003c04 jne LBB0_710 - 0x48, 0xc7, 0x04, 0x24, 0xfe, 0xff, 0xff, 0xff, //0x00003c0a movq $-2, (%rsp) - 0x48, 0x8d, 0x41, 0x03, //0x00003c12 leaq $3(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003c16 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x03, 0x65, //0x00003c1a cmpb $101, $3(%r14,%rcx) - 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x00003c20 jne LBB0_711 - 0x48, 0x83, 0xc1, 0x04, //0x00003c26 addq $4, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x00003c2a movq %rcx, (%r13) - 0xe9, 0x62, 0xff, 0xff, 0xff, //0x00003c2e jmp LBB0_711 - //0x00003c33 LBB0_267 - 0x49, 0x89, 0x45, 0x00, //0x00003c33 movq %rax, (%r13) - 0x41, 0x80, 0x3c, 0x06, 0x6e, //0x00003c37 cmpb $110, (%r14,%rax) - 0x0f, 0x85, 0x4b, 0xff, 0xff, 0xff, //0x00003c3c jne LBB0_710 - 0x49, 0x89, 0x4d, 0x00, //0x00003c42 movq %rcx, (%r13) - 0x41, 0x80, 0x3c, 0x0e, 0x75, //0x00003c46 cmpb $117, (%r14,%rcx) - 0x0f, 0x85, 0x3c, 0xff, 0xff, 0xff, //0x00003c4b jne LBB0_710 - 0x48, 0x8d, 0x41, 0x01, //0x00003c51 leaq $1(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003c55 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x6c, //0x00003c59 cmpb $108, $1(%r14,%rcx) - 0x0f, 0x85, 0x28, 0xff, 0xff, 0xff, //0x00003c5f jne LBB0_710 - 0x48, 0x8d, 0x41, 0x02, //0x00003c65 leaq $2(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003c69 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x6c, //0x00003c6d cmpb $108, $2(%r14,%rcx) - 0x0f, 0x84, 0x4b, 0x00, 0x00, 0x00, //0x00003c73 je LBB0_696 - 0xe9, 0x0f, 0xff, 0xff, 0xff, //0x00003c79 jmp LBB0_710 - //0x00003c7e LBB0_692 - 0x49, 0x89, 0x45, 0x00, //0x00003c7e movq %rax, (%r13) - 0x41, 0x80, 0x3c, 0x06, 0x74, //0x00003c82 cmpb $116, (%r14,%rax) - 0x0f, 0x85, 0x00, 0xff, 0xff, 0xff, //0x00003c87 jne LBB0_710 - 0x49, 0x89, 0x4d, 0x00, //0x00003c8d movq %rcx, (%r13) - 0x41, 0x80, 0x3c, 0x0e, 0x72, //0x00003c91 cmpb $114, (%r14,%rcx) - 0x0f, 0x85, 0xf1, 0xfe, 0xff, 0xff, //0x00003c96 jne LBB0_710 - 0x48, 0x8d, 0x41, 0x01, //0x00003c9c leaq $1(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003ca0 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x75, //0x00003ca4 cmpb $117, $1(%r14,%rcx) - 0x0f, 0x85, 0xdd, 0xfe, 0xff, 0xff, //0x00003caa jne LBB0_710 - 0x48, 0x8d, 0x41, 0x02, //0x00003cb0 leaq $2(%rcx), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003cb4 movq %rax, (%r13) - 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x65, //0x00003cb8 cmpb $101, $2(%r14,%rcx) - 0x0f, 0x85, 0xc9, 0xfe, 0xff, 0xff, //0x00003cbe jne LBB0_710 - //0x00003cc4 LBB0_696 - 0x48, 0x83, 0xc1, 0x03, //0x00003cc4 addq $3, %rcx - 0x49, 0x89, 0x4d, 0x00, //0x00003cc8 movq %rcx, (%r13) - 0xe9, 0xbc, 0xfe, 0xff, 0xff, //0x00003ccc jmp LBB0_710 - //0x00003cd1 LBB0_698 - 0x48, 0x83, 0x04, 0x24, 0xff, //0x00003cd1 addq $-1, (%rsp) - 0xe9, 0xba, 0xfe, 0xff, 0xff, //0x00003cd6 jmp LBB0_711 - //0x00003cdb LBB0_264 - 0x48, 0x83, 0xc1, 0xff, //0x00003cdb addq $-1, %rcx - 0x48, 0x89, 0x0c, 0x24, //0x00003cdf movq %rcx, (%rsp) - 0xe9, 0xad, 0xfe, 0xff, 0xff, //0x00003ce3 jmp LBB0_711 - //0x00003ce8 LBB0_704 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003ce8 movq $-1, %rcx - 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x00003cef jmp LBB0_709 - //0x00003cf4 LBB0_706 - 0x48, 0x83, 0xf9, 0xff, //0x00003cf4 cmpq $-1, %rcx - 0x0f, 0x85, 0x58, 0x00, 0x00, 0x00, //0x00003cf8 jne LBB0_716 + 0x48, 0x21, 0xcf, //0x00001e0f andq %rcx, %rdi + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00001e12 jne LBB0_340 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00001e18 jmp LBB0_343 + //0x00001e1d LBB0_342 + 0xc4, 0x41, 0x7d, 0x6f, 0xd5, //0x00001e1d vmovdqa %ymm13, %ymm10 + 0xc4, 0x41, 0x7d, 0x6f, 0xef, //0x00001e22 vmovdqa %ymm15, %ymm13 + //0x00001e27 LBB0_343 + 0x49, 0xc1, 0xfd, 0x3f, //0x00001e27 sarq $63, %r13 + 0xf3, 0x48, 0x0f, 0xb8, 0xce, //0x00001e2b popcntq %rsi, %rcx + 0x49, 0x01, 0xcf, //0x00001e30 addq %rcx, %r15 + 0x49, 0x83, 0xc6, 0x40, //0x00001e33 addq $64, %r14 + 0x49, 0x83, 0xc1, 0xc0, //0x00001e37 addq $-64, %r9 + 0x4d, 0x89, 0xeb, //0x00001e3b movq %r13, %r11 + 0x49, 0x83, 0xf9, 0x40, //0x00001e3e cmpq $64, %r9 + 0x0f, 0x8d, 0x7a, 0xfe, 0xff, 0xff, //0x00001e42 jge LBB0_335 + 0xe9, 0x1e, 0xfd, 0xff, 0xff, //0x00001e48 jmp LBB0_344 + //0x00001e4d LBB0_360 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00001e4d movq $32(%rsp), %rcx + 0x4c, 0x8b, 0x49, 0x08, //0x00001e52 movq $8(%rcx), %r9 + 0x4d, 0x8b, 0x07, //0x00001e56 movq (%r15), %r8 + 0x4d, 0x29, 0xc1, //0x00001e59 subq %r8, %r9 + 0x4d, 0x01, 0xc6, //0x00001e5c addq %r8, %r14 + 0x45, 0x31, 0xdb, //0x00001e5f xorl %r11d, %r11d + 0x45, 0x31, 0xd2, //0x00001e62 xorl %r10d, %r10d + 0x45, 0x31, 0xff, //0x00001e65 xorl %r15d, %r15d + 0x31, 0xdb, //0x00001e68 xorl %ebx, %ebx + 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00001e6a jmp LBB0_362 + //0x00001e6f LBB0_361 + 0x49, 0xc1, 0xfd, 0x3f, //0x00001e6f sarq $63, %r13 + 0xf3, 0x48, 0x0f, 0xb8, 0xce, //0x00001e73 popcntq %rsi, %rcx + 0x49, 0x01, 0xcf, //0x00001e78 addq %rcx, %r15 + 0x49, 0x83, 0xc6, 0x40, //0x00001e7b addq $64, %r14 + 0x49, 0x83, 0xc1, 0xc0, //0x00001e7f addq $-64, %r9 + 0x4d, 0x89, 0xeb, //0x00001e83 movq %r13, %r11 + //0x00001e86 LBB0_362 + 0x49, 0x83, 0xf9, 0x40, //0x00001e86 cmpq $64, %r9 + 0x0f, 0x8c, 0x2d, 0x01, 0x00, 0x00, //0x00001e8a jl LBB0_370 + //0x00001e90 LBB0_363 + 0xc4, 0xc1, 0x7e, 0x6f, 0x0e, //0x00001e90 vmovdqu (%r14), %ymm1 + 0xc4, 0xc1, 0x7e, 0x6f, 0x46, 0x20, //0x00001e95 vmovdqu $32(%r14), %ymm0 + 0xc5, 0xf5, 0x74, 0xd7, //0x00001e9b vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00001e9f vpmovmskb %ymm2, %edx + 0xc5, 0xfd, 0x74, 0xd7, //0x00001ea3 vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001ea7 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001eab shlq $32, %rcx + 0x48, 0x09, 0xca, //0x00001eaf orq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x00001eb2 movq %rdx, %rcx + 0x4c, 0x09, 0xd1, //0x00001eb5 orq %r10, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001eb8 jne LBB0_365 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001ebe movq $-1, %rdx + 0x45, 0x31, 0xd2, //0x00001ec5 xorl %r10d, %r10d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001ec8 jmp LBB0_366 + //0x00001ecd LBB0_365 + 0x4c, 0x89, 0xd1, //0x00001ecd movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x00001ed0 notq %rcx + 0x48, 0x21, 0xd1, //0x00001ed3 andq %rdx, %rcx + 0x4c, 0x8d, 0x2c, 0x09, //0x00001ed6 leaq (%rcx,%rcx), %r13 + 0x4d, 0x09, 0xd5, //0x00001eda orq %r10, %r13 + 0x4c, 0x89, 0xef, //0x00001edd movq %r13, %rdi + 0x48, 0xf7, 0xd7, //0x00001ee0 notq %rdi + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001ee3 movabsq $-6148914691236517206, %rsi + 0x48, 0x21, 0xf2, //0x00001eed andq %rsi, %rdx + 0x48, 0x21, 0xfa, //0x00001ef0 andq %rdi, %rdx + 0x45, 0x31, 0xd2, //0x00001ef3 xorl %r10d, %r10d + 0x48, 0x01, 0xca, //0x00001ef6 addq %rcx, %rdx + 0x41, 0x0f, 0x92, 0xc2, //0x00001ef9 setb %r10b + 0x48, 0x01, 0xd2, //0x00001efd addq %rdx, %rdx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001f00 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xca, //0x00001f0a xorq %rcx, %rdx + 0x4c, 0x21, 0xea, //0x00001f0d andq %r13, %rdx + 0x48, 0xf7, 0xd2, //0x00001f10 notq %rdx + //0x00001f13 LBB0_366 + 0xc5, 0xfd, 0x74, 0xd6, //0x00001f13 vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001f17 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001f1b shlq $32, %rcx + 0xc5, 0xf5, 0x74, 0xd6, //0x00001f1f vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xf2, //0x00001f23 vpmovmskb %ymm2, %esi + 0x48, 0x09, 0xce, //0x00001f27 orq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00001f2a andq %rdx, %rsi + 0xc4, 0xe1, 0xf9, 0x6e, 0xd6, //0x00001f2d vmovq %rsi, %xmm2 + 0xc4, 0xe3, 0x69, 0x44, 0x15, 0x64, 0xe1, 0xff, 0xff, 0x00, //0x00001f32 vpclmulqdq $0, $-7836(%rip), %xmm2, %xmm2 /* LCPI0_26+0(%rip) */ + 0xc4, 0xc1, 0xf9, 0x7e, 0xd5, //0x00001f3c vmovq %xmm2, %r13 + 0x4d, 0x31, 0xdd, //0x00001f41 xorq %r11, %r13 + 0xc5, 0xa5, 0x74, 0xd1, //0x00001f44 vpcmpeqb %ymm1, %ymm11, %ymm2 + 0xc5, 0xfd, 0xd7, 0xf2, //0x00001f48 vpmovmskb %ymm2, %esi + 0xc5, 0xa5, 0x74, 0xd0, //0x00001f4c vpcmpeqb %ymm0, %ymm11, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00001f50 vpmovmskb %ymm2, %ecx + 0x48, 0xc1, 0xe1, 0x20, //0x00001f54 shlq $32, %rcx + 0x48, 0x09, 0xce, //0x00001f58 orq %rcx, %rsi + 0x4c, 0x89, 0xe9, //0x00001f5b movq %r13, %rcx + 0x48, 0xf7, 0xd1, //0x00001f5e notq %rcx + 0x48, 0x21, 0xce, //0x00001f61 andq %rcx, %rsi + 0xc5, 0x9d, 0x74, 0xc9, //0x00001f64 vpcmpeqb %ymm1, %ymm12, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf9, //0x00001f68 vpmovmskb %ymm1, %edi + 0xc5, 0x9d, 0x74, 0xc0, //0x00001f6c vpcmpeqb %ymm0, %ymm12, %ymm0 + 0xc5, 0xfd, 0xd7, 0xd0, //0x00001f70 vpmovmskb %ymm0, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x00001f74 shlq $32, %rdx + 0x48, 0x09, 0xd7, //0x00001f78 orq %rdx, %rdi + 0x48, 0x21, 0xcf, //0x00001f7b andq %rcx, %rdi + 0x0f, 0x84, 0xeb, 0xfe, 0xff, 0xff, //0x00001f7e je LBB0_361 + 0x4c, 0x8b, 0x1c, 0x24, //0x00001f84 movq (%rsp), %r11 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001f88 .p2align 4, 0x90 + //0x00001f90 LBB0_368 + 0x48, 0x8d, 0x4f, 0xff, //0x00001f90 leaq $-1(%rdi), %rcx + 0x48, 0x89, 0xca, //0x00001f94 movq %rcx, %rdx + 0x48, 0x21, 0xf2, //0x00001f97 andq %rsi, %rdx + 0xf3, 0x48, 0x0f, 0xb8, 0xd2, //0x00001f9a popcntq %rdx, %rdx + 0x4c, 0x01, 0xfa, //0x00001f9f addq %r15, %rdx + 0x48, 0x39, 0xda, //0x00001fa2 cmpq %rbx, %rdx + 0x0f, 0x86, 0x7a, 0x01, 0x00, 0x00, //0x00001fa5 jbe LBB0_386 + 0x48, 0x83, 0xc3, 0x01, //0x00001fab addq $1, %rbx + 0x48, 0x21, 0xcf, //0x00001faf andq %rcx, %rdi + 0x0f, 0x85, 0xd8, 0xff, 0xff, 0xff, //0x00001fb2 jne LBB0_368 + 0xe9, 0xb2, 0xfe, 0xff, 0xff, //0x00001fb8 jmp LBB0_361 + //0x00001fbd LBB0_370 + 0x4d, 0x85, 0xc9, //0x00001fbd testq %r9, %r9 + 0x0f, 0x8e, 0xd2, 0x1e, 0x00, 0x00, //0x00001fc0 jle LBB0_733 + 0xc5, 0x7d, 0x7f, 0xe2, //0x00001fc6 vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00001fca vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00001fce vmovdqa %ymm13, %ymm11 + 0xc5, 0xf9, 0xef, 0xc0, //0x00001fd3 vpxor %xmm0, %xmm0, %xmm0 + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x60, //0x00001fd7 vmovdqu %ymm0, $96(%rsp) + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00001fdd vmovdqu %ymm0, $64(%rsp) + 0x44, 0x89, 0xf1, //0x00001fe3 movl %r14d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00001fe6 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00001fec cmpl $4033, %ecx + 0x0f, 0x82, 0x27, 0x00, 0x00, 0x00, //0x00001ff2 jb LBB0_374 + 0x49, 0x83, 0xf9, 0x20, //0x00001ff8 cmpq $32, %r9 + 0x0f, 0x82, 0x44, 0x00, 0x00, 0x00, //0x00001ffc jb LBB0_375 + 0xc4, 0xc1, 0x7e, 0x6f, 0x06, //0x00002002 vmovdqu (%r14), %ymm0 + 0xc5, 0xfe, 0x7f, 0x44, 0x24, 0x40, //0x00002007 vmovdqu %ymm0, $64(%rsp) + 0x49, 0x83, 0xc6, 0x20, //0x0000200d addq $32, %r14 + 0x49, 0x8d, 0x79, 0xe0, //0x00002011 leaq $-32(%r9), %rdi + 0x48, 0x8d, 0x74, 0x24, 0x60, //0x00002015 leaq $96(%rsp), %rsi + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x0000201a jmp LBB0_376 + //0x0000201f LBB0_374 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000201f vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00002024 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x6f, 0xe2, 0xff, 0xff, //0x00002029 vmovdqu $-7569(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x87, 0xe1, 0xff, 0xff, //0x00002031 vmovdqu $-7801(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x00002039 vmovdqa %ymm1, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe2, //0x0000203d vmovdqa %ymm2, %ymm12 + 0xe9, 0x4a, 0xfe, 0xff, 0xff, //0x00002041 jmp LBB0_363 + //0x00002046 LBB0_375 + 0x48, 0x8d, 0x74, 0x24, 0x40, //0x00002046 leaq $64(%rsp), %rsi + 0x4c, 0x89, 0xcf, //0x0000204b movq %r9, %rdi + //0x0000204e LBB0_376 + 0x48, 0x83, 0xff, 0x10, //0x0000204e cmpq $16, %rdi + 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00002052 jb LBB0_377 + 0xc4, 0xc1, 0x7a, 0x6f, 0x06, //0x00002058 vmovdqu (%r14), %xmm0 + 0xc5, 0xfa, 0x7f, 0x06, //0x0000205d vmovdqu %xmm0, (%rsi) + 0x49, 0x83, 0xc6, 0x10, //0x00002061 addq $16, %r14 + 0x48, 0x83, 0xc6, 0x10, //0x00002065 addq $16, %rsi + 0x48, 0x83, 0xc7, 0xf0, //0x00002069 addq $-16, %rdi + 0x48, 0x83, 0xff, 0x08, //0x0000206d cmpq $8, %rdi + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00002071 jae LBB0_384 + //0x00002077 LBB0_378 + 0x48, 0x83, 0xff, 0x04, //0x00002077 cmpq $4, %rdi + 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x0000207b jl LBB0_379 + //0x00002081 LBB0_385 + 0x41, 0x8b, 0x0e, //0x00002081 movl (%r14), %ecx + 0x89, 0x0e, //0x00002084 movl %ecx, (%rsi) + 0x49, 0x83, 0xc6, 0x04, //0x00002086 addq $4, %r14 + 0x48, 0x83, 0xc6, 0x04, //0x0000208a addq $4, %rsi + 0x48, 0x83, 0xc7, 0xfc, //0x0000208e addq $-4, %rdi + 0x48, 0x83, 0xff, 0x02, //0x00002092 cmpq $2, %rdi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00002096 jae LBB0_380 + 0xe9, 0x43, 0x00, 0x00, 0x00, //0x0000209c jmp LBB0_381 + //0x000020a1 LBB0_377 + 0x48, 0x83, 0xff, 0x08, //0x000020a1 cmpq $8, %rdi + 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x000020a5 jb LBB0_378 + //0x000020ab LBB0_384 + 0x49, 0x8b, 0x0e, //0x000020ab movq (%r14), %rcx + 0x48, 0x89, 0x0e, //0x000020ae movq %rcx, (%rsi) + 0x49, 0x83, 0xc6, 0x08, //0x000020b1 addq $8, %r14 + 0x48, 0x83, 0xc6, 0x08, //0x000020b5 addq $8, %rsi + 0x48, 0x83, 0xc7, 0xf8, //0x000020b9 addq $-8, %rdi + 0x48, 0x83, 0xff, 0x04, //0x000020bd cmpq $4, %rdi + 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x000020c1 jge LBB0_385 + //0x000020c7 LBB0_379 + 0x48, 0x83, 0xff, 0x02, //0x000020c7 cmpq $2, %rdi + 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x000020cb jb LBB0_381 + //0x000020d1 LBB0_380 + 0x41, 0x0f, 0xb7, 0x0e, //0x000020d1 movzwl (%r14), %ecx + 0x66, 0x89, 0x0e, //0x000020d5 movw %cx, (%rsi) + 0x49, 0x83, 0xc6, 0x02, //0x000020d8 addq $2, %r14 + 0x48, 0x83, 0xc6, 0x02, //0x000020dc addq $2, %rsi + 0x48, 0x83, 0xc7, 0xfe, //0x000020e0 addq $-2, %rdi + //0x000020e4 LBB0_381 + 0x4c, 0x89, 0xf2, //0x000020e4 movq %r14, %rdx + 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x000020e7 leaq $64(%rsp), %r14 + 0x48, 0x85, 0xff, //0x000020ec testq %rdi, %rdi + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000020ef vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000020f4 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x9f, 0xe1, 0xff, 0xff, //0x000020f9 vmovdqu $-7777(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xb7, 0xe0, 0xff, 0xff, //0x00002101 vmovdqu $-8009(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x00002109 vmovdqa %ymm1, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe2, //0x0000210d vmovdqa %ymm2, %ymm12 + 0x0f, 0x84, 0x79, 0xfd, 0xff, 0xff, //0x00002111 je LBB0_363 + 0x8a, 0x0a, //0x00002117 movb (%rdx), %cl + 0x88, 0x0e, //0x00002119 movb %cl, (%rsi) + 0x4c, 0x8d, 0x74, 0x24, 0x40, //0x0000211b leaq $64(%rsp), %r14 + 0xe9, 0x6b, 0xfd, 0xff, 0xff, //0x00002120 jmp LBB0_363 + //0x00002125 LBB0_386 + 0x48, 0x8b, 0x74, 0x24, 0x20, //0x00002125 movq $32(%rsp), %rsi + 0x48, 0x8b, 0x4e, 0x08, //0x0000212a movq $8(%rsi), %rcx + 0x48, 0x0f, 0xbc, 0xd7, //0x0000212e bsfq %rdi, %rdx + 0x4c, 0x29, 0xca, //0x00002132 subq %r9, %rdx + 0x48, 0x01, 0xd1, //0x00002135 addq %rdx, %rcx + 0x48, 0x83, 0xc1, 0x01, //0x00002138 addq $1, %rcx + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000213c movq $8(%rsp), %r15 + 0x49, 0x89, 0x0f, //0x00002141 movq %rcx, (%r15) + 0x48, 0x8b, 0x56, 0x08, //0x00002144 movq $8(%rsi), %rdx + 0x48, 0x39, 0xd1, //0x00002148 cmpq %rdx, %rcx + 0x48, 0x0f, 0x47, 0xca, //0x0000214b cmovaq %rdx, %rcx + 0x49, 0x89, 0x0f, //0x0000214f movq %rcx, (%r15) + 0x0f, 0x86, 0x5d, 0xe9, 0xff, 0xff, //0x00002152 jbe LBB0_387 + 0xe9, 0xb8, 0x1b, 0x00, 0x00, //0x00002158 jmp LBB0_728 + //0x0000215d LBB0_388 + 0x0f, 0xbc, 0xd9, //0x0000215d bsfl %ecx, %ebx + 0x48, 0x89, 0xd9, //0x00002160 movq %rbx, %rcx + 0x48, 0x29, 0xf9, //0x00002163 subq %rdi, %rcx + 0x49, 0x89, 0x0f, //0x00002166 movq %rcx, (%r15) + 0x48, 0x85, 0xc9, //0x00002169 testq %rcx, %rcx + 0x4c, 0x8b, 0x1c, 0x24, //0x0000216c movq (%rsp), %r11 + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002170 movabsq $4294977024, %rdi + 0x0f, 0x8e, 0x40, 0x00, 0x00, 0x00, //0x0000217a jle LBB0_393 + 0x49, 0x01, 0xd8, //0x00002180 addq %rbx, %r8 + 0x48, 0x01, 0xda, //0x00002183 addq %rbx, %rdx + 0x48, 0x01, 0xde, //0x00002186 addq %rbx, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002189 .p2align 4, 0x90 + //0x00002190 LBB0_390 + 0x0f, 0xb6, 0x0e, //0x00002190 movzbl (%rsi), %ecx + 0x48, 0x83, 0xf9, 0x20, //0x00002193 cmpq $32, %rcx + 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00002197 ja LBB0_393 + 0x48, 0x0f, 0xa3, 0xcf, //0x0000219d btq %rcx, %rdi + 0x0f, 0x83, 0x19, 0x00, 0x00, 0x00, //0x000021a1 jae LBB0_393 + 0x49, 0x89, 0x17, //0x000021a7 movq %rdx, (%r15) + 0x49, 0x83, 0xc0, 0xff, //0x000021aa addq $-1, %r8 + 0x48, 0x83, 0xc2, 0xff, //0x000021ae addq $-1, %rdx + 0x48, 0x83, 0xc6, 0xff, //0x000021b2 addq $-1, %rsi + 0x49, 0x83, 0xf8, 0x01, //0x000021b6 cmpq $1, %r8 + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x000021ba jg LBB0_390 + //0x000021c0 LBB0_393 + 0x48, 0x85, 0xc0, //0x000021c0 testq %rax, %rax + 0x0f, 0x8f, 0xd7, 0xe1, 0xff, 0xff, //0x000021c3 jg LBB0_3 + 0xe9, 0x61, 0x1c, 0x00, 0x00, //0x000021c9 jmp LBB0_394 + //0x000021ce LBB0_395 + 0x49, 0x8d, 0x55, 0xff, //0x000021ce leaq $-1(%r13), %rdx + 0x48, 0x39, 0xd6, //0x000021d2 cmpq %rdx, %rsi + 0x49, 0xf7, 0xd5, //0x000021d5 notq %r13 + 0x4d, 0x0f, 0x45, 0xea, //0x000021d8 cmovneq %r10, %r13 + 0x84, 0xc9, //0x000021dc testb %cl, %cl + 0x4d, 0x0f, 0x45, 0xd5, //0x000021de cmovneq %r13, %r10 + 0xe9, 0x2e, 0xf6, 0xff, 0xff, //0x000021e2 jmp LBB0_293 + //0x000021e7 LBB0_396 + 0x4d, 0x89, 0xc5, //0x000021e7 movq %r8, %r13 + 0x4d, 0x29, 0xcd, //0x000021ea subq %r9, %r13 + 0x0f, 0x84, 0x8b, 0x1c, 0x00, 0x00, //0x000021ed je LBB0_732 + 0x49, 0x83, 0xfd, 0x40, //0x000021f3 cmpq $64, %r13 + 0x0f, 0x82, 0x13, 0x0c, 0x00, 0x00, //0x000021f7 jb LBB0_543 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000021fd movq $-1, %r15 + 0x4c, 0x89, 0xc8, //0x00002204 movq %r9, %rax + 0x45, 0x31, 0xdb, //0x00002207 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000220a .p2align 4, 0x90 + //0x00002210 LBB0_399 + 0xc4, 0xc1, 0x7e, 0x6f, 0x04, 0x06, //0x00002210 vmovdqu (%r14,%rax), %ymm0 + 0xc4, 0xc1, 0x7e, 0x6f, 0x4c, 0x06, 0x20, //0x00002216 vmovdqu $32(%r14,%rax), %ymm1 + 0xc5, 0xfd, 0x74, 0xd6, //0x0000221d vpcmpeqb %ymm6, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xfa, //0x00002221 vpmovmskb %ymm2, %edi + 0xc5, 0xf5, 0x74, 0xd6, //0x00002225 vpcmpeqb %ymm6, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xda, //0x00002229 vpmovmskb %ymm2, %ebx + 0xc5, 0xfd, 0x74, 0xd7, //0x0000222d vpcmpeqb %ymm7, %ymm0, %ymm2 + 0xc5, 0xfd, 0xd7, 0xd2, //0x00002231 vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0x74, 0xd7, //0x00002235 vpcmpeqb %ymm7, %ymm1, %ymm2 + 0xc5, 0xfd, 0xd7, 0xca, //0x00002239 vpmovmskb %ymm2, %ecx + 0xc5, 0xbd, 0x64, 0xd1, //0x0000223d vpcmpgtb %ymm1, %ymm8, %ymm2 + 0xc4, 0xc1, 0x75, 0x64, 0xc9, //0x00002241 vpcmpgtb %ymm9, %ymm1, %ymm1 + 0xc5, 0xed, 0xdb, 0xc9, //0x00002246 vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0xfd, 0xd7, 0xf1, //0x0000224a vpmovmskb %ymm1, %esi + 0x48, 0xc1, 0xe3, 0x20, //0x0000224e shlq $32, %rbx + 0x48, 0x09, 0xdf, //0x00002252 orq %rbx, %rdi + 0x48, 0xc1, 0xe1, 0x20, //0x00002255 shlq $32, %rcx + 0x48, 0xc1, 0xe6, 0x20, //0x00002259 shlq $32, %rsi + 0x48, 0x09, 0xca, //0x0000225d orq %rcx, %rdx + 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x00002260 jne LBB0_410 + 0x4d, 0x85, 0xdb, //0x00002266 testq %r11, %r11 + 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00002269 jne LBB0_412 + 0x45, 0x31, 0xdb, //0x0000226f xorl %r11d, %r11d + //0x00002272 LBB0_402 + 0xc5, 0xbd, 0x64, 0xc8, //0x00002272 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00002276 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x0000227b vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x0000227f vpmovmskb %ymm0, %ecx + 0x48, 0x09, 0xce, //0x00002283 orq %rcx, %rsi + 0x48, 0x85, 0xff, //0x00002286 testq %rdi, %rdi + 0x0f, 0x85, 0x7f, 0x00, 0x00, 0x00, //0x00002289 jne LBB0_413 + 0x48, 0x85, 0xf6, //0x0000228f testq %rsi, %rsi + 0x0f, 0x85, 0x97, 0x1a, 0x00, 0x00, //0x00002292 jne LBB0_709 + 0x49, 0x83, 0xc5, 0xc0, //0x00002298 addq $-64, %r13 + 0x48, 0x83, 0xc0, 0x40, //0x0000229c addq $64, %rax + 0x49, 0x83, 0xfd, 0x3f, //0x000022a0 cmpq $63, %r13 + 0x0f, 0x87, 0x66, 0xff, 0xff, 0xff, //0x000022a4 ja LBB0_399 + 0xe9, 0x93, 0x09, 0x00, 0x00, //0x000022aa jmp LBB0_405 + //0x000022af LBB0_410 + 0x49, 0x83, 0xff, 0xff, //0x000022af cmpq $-1, %r15 + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x000022b3 jne LBB0_412 + 0x4c, 0x0f, 0xbc, 0xfa, //0x000022b9 bsfq %rdx, %r15 + 0x49, 0x01, 0xc7, //0x000022bd addq %rax, %r15 + //0x000022c0 LBB0_412 + 0x4c, 0x89, 0xd9, //0x000022c0 movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x000022c3 notq %rcx + 0x48, 0x21, 0xd1, //0x000022c6 andq %rdx, %rcx + 0x4c, 0x8d, 0x14, 0x09, //0x000022c9 leaq (%rcx,%rcx), %r10 + 0x4d, 0x09, 0xda, //0x000022cd orq %r11, %r10 + 0x4c, 0x89, 0xd3, //0x000022d0 movq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x000022d3 notq %rbx + 0x48, 0x21, 0xd3, //0x000022d6 andq %rdx, %rbx + 0x48, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000022d9 movabsq $-6148914691236517206, %rdx + 0x48, 0x21, 0xd3, //0x000022e3 andq %rdx, %rbx + 0x45, 0x31, 0xdb, //0x000022e6 xorl %r11d, %r11d + 0x48, 0x01, 0xcb, //0x000022e9 addq %rcx, %rbx + 0x41, 0x0f, 0x92, 0xc3, //0x000022ec setb %r11b + 0x48, 0x01, 0xdb, //0x000022f0 addq %rbx, %rbx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000022f3 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcb, //0x000022fd xorq %rcx, %rbx + 0x4c, 0x21, 0xd3, //0x00002300 andq %r10, %rbx + 0x48, 0xf7, 0xd3, //0x00002303 notq %rbx + 0x48, 0x21, 0xdf, //0x00002306 andq %rbx, %rdi + 0xe9, 0x64, 0xff, 0xff, 0xff, //0x00002309 jmp LBB0_402 + //0x0000230e LBB0_413 + 0x48, 0x0f, 0xbc, 0xcf, //0x0000230e bsfq %rdi, %rcx + 0x48, 0x85, 0xf6, //0x00002312 testq %rsi, %rsi + 0x0f, 0x84, 0xa4, 0x03, 0x00, 0x00, //0x00002315 je LBB0_470 + 0x48, 0x0f, 0xbc, 0xd6, //0x0000231b bsfq %rsi, %rdx + 0xe9, 0xa0, 0x03, 0x00, 0x00, //0x0000231f jmp LBB0_471 + //0x00002324 LBB0_415 + 0x41, 0x8a, 0x4d, 0x01, //0x00002324 movb $1(%r13), %cl + 0x80, 0xc1, 0xd2, //0x00002328 addb $-46, %cl + 0x80, 0xf9, 0x37, //0x0000232b cmpb $55, %cl + 0x0f, 0x87, 0x84, 0xf2, 0xff, 0xff, //0x0000232e ja LBB0_260 + 0x0f, 0xb6, 0xc9, //0x00002334 movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00002337 movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x00002341 btq %rcx, %rdx + 0x48, 0x89, 0xc1, //0x00002345 movq %rax, %rcx + 0x0f, 0x83, 0x00, 0x08, 0x00, 0x00, //0x00002348 jae LBB0_514 + //0x0000234e LBB0_417 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000234e movq $-1, %r15 + 0x49, 0x83, 0xfb, 0x20, //0x00002355 cmpq $32, %r11 + 0x0f, 0x82, 0x5d, 0x0a, 0x00, 0x00, //0x00002359 jb LBB0_540 + 0x45, 0x31, 0xc0, //0x0000235f xorl %r8d, %r8d + 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002362 movq $-1, %r10 + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002369 movq $-1, %r9 + //0x00002370 .p2align 4, 0x90 + //0x00002370 LBB0_419 + 0xc4, 0x81, 0x7e, 0x6f, 0x44, 0x05, 0x00, //0x00002370 vmovdqu (%r13,%r8), %ymm0 + 0xc4, 0xc1, 0x7d, 0x64, 0xca, //0x00002377 vpcmpgtb %ymm10, %ymm0, %ymm1 + 0xc5, 0x95, 0x64, 0xd0, //0x0000237c vpcmpgtb %ymm0, %ymm13, %ymm2 + 0xc5, 0xed, 0xdb, 0xc9, //0x00002380 vpand %ymm1, %ymm2, %ymm1 + 0xc5, 0x85, 0x74, 0xd0, //0x00002384 vpcmpeqb %ymm0, %ymm15, %ymm2 + 0xc5, 0xfd, 0x74, 0x1d, 0xd0, 0xde, 0xff, 0xff, //0x00002388 vpcmpeqb $-8496(%rip), %ymm0, %ymm3 /* LCPI0_17+0(%rip) */ + 0xc5, 0xe5, 0xeb, 0xd2, //0x00002390 vpor %ymm2, %ymm3, %ymm2 + 0xc5, 0x8d, 0xdb, 0xd8, //0x00002394 vpand %ymm0, %ymm14, %ymm3 + 0xc5, 0xfd, 0x74, 0x05, 0xe0, 0xde, 0xff, 0xff, //0x00002398 vpcmpeqb $-8480(%rip), %ymm0, %ymm0 /* LCPI0_18+0(%rip) */ + 0xc5, 0xfd, 0xd7, 0xf8, //0x000023a0 vpmovmskb %ymm0, %edi + 0xc5, 0xe5, 0x74, 0xdc, //0x000023a4 vpcmpeqb %ymm4, %ymm3, %ymm3 + 0xc5, 0xfd, 0xd7, 0xf3, //0x000023a8 vpmovmskb %ymm3, %esi + 0xc5, 0xfd, 0xd7, 0xd2, //0x000023ac vpmovmskb %ymm2, %edx + 0xc5, 0xf5, 0xeb, 0xc0, //0x000023b0 vpor %ymm0, %ymm1, %ymm0 + 0xc5, 0xe5, 0xeb, 0xca, //0x000023b4 vpor %ymm2, %ymm3, %ymm1 + 0xc5, 0xfd, 0xeb, 0xc1, //0x000023b8 vpor %ymm1, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xc8, //0x000023bc vpmovmskb %ymm0, %ecx + 0x48, 0xf7, 0xd1, //0x000023c0 notq %rcx + 0x48, 0x0f, 0xbc, 0xc9, //0x000023c3 bsfq %rcx, %rcx + 0x83, 0xf9, 0x20, //0x000023c7 cmpl $32, %ecx + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x000023ca je LBB0_421 + 0xbb, 0xff, 0xff, 0xff, 0xff, //0x000023d0 movl $-1, %ebx + 0xd3, 0xe3, //0x000023d5 shll %cl, %ebx + 0xf7, 0xd3, //0x000023d7 notl %ebx + 0x21, 0xdf, //0x000023d9 andl %ebx, %edi + 0x21, 0xde, //0x000023db andl %ebx, %esi + 0x21, 0xd3, //0x000023dd andl %edx, %ebx + 0x89, 0xda, //0x000023df movl %ebx, %edx + //0x000023e1 LBB0_421 + 0x8d, 0x5f, 0xff, //0x000023e1 leal $-1(%rdi), %ebx + 0x21, 0xfb, //0x000023e4 andl %edi, %ebx + 0xc5, 0xfe, 0x6f, 0x1d, 0xd2, 0xdd, 0xff, 0xff, //0x000023e6 vmovdqu $-8750(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0x0f, 0x85, 0x38, 0x07, 0x00, 0x00, //0x000023ee jne LBB0_509 + 0x8d, 0x5e, 0xff, //0x000023f4 leal $-1(%rsi), %ebx + 0x21, 0xf3, //0x000023f7 andl %esi, %ebx + 0x0f, 0x85, 0x2d, 0x07, 0x00, 0x00, //0x000023f9 jne LBB0_509 + 0x8d, 0x5a, 0xff, //0x000023ff leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x00002402 andl %edx, %ebx + 0x0f, 0x85, 0x22, 0x07, 0x00, 0x00, //0x00002404 jne LBB0_509 + 0x85, 0xff, //0x0000240a testl %edi, %edi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000240c je LBB0_427 + 0x0f, 0xbc, 0xff, //0x00002412 bsfl %edi, %edi + 0x49, 0x83, 0xf9, 0xff, //0x00002415 cmpq $-1, %r9 + 0x0f, 0x85, 0xd6, 0x08, 0x00, 0x00, //0x00002419 jne LBB0_528 + 0x4c, 0x01, 0xc7, //0x0000241f addq %r8, %rdi + 0x49, 0x89, 0xf9, //0x00002422 movq %rdi, %r9 + //0x00002425 LBB0_427 + 0x85, 0xf6, //0x00002425 testl %esi, %esi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00002427 je LBB0_430 + 0x0f, 0xbc, 0xf6, //0x0000242d bsfl %esi, %esi + 0x49, 0x83, 0xfa, 0xff, //0x00002430 cmpq $-1, %r10 + 0x0f, 0x85, 0xc6, 0x08, 0x00, 0x00, //0x00002434 jne LBB0_529 + 0x4c, 0x01, 0xc6, //0x0000243a addq %r8, %rsi + 0x49, 0x89, 0xf2, //0x0000243d movq %rsi, %r10 + //0x00002440 LBB0_430 + 0x85, 0xd2, //0x00002440 testl %edx, %edx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00002442 je LBB0_433 + 0x0f, 0xbc, 0xd2, //0x00002448 bsfl %edx, %edx + 0x49, 0x83, 0xff, 0xff, //0x0000244b cmpq $-1, %r15 + 0x0f, 0x85, 0xb6, 0x08, 0x00, 0x00, //0x0000244f jne LBB0_530 + 0x4c, 0x01, 0xc2, //0x00002455 addq %r8, %rdx + 0x49, 0x89, 0xd7, //0x00002458 movq %rdx, %r15 + //0x0000245b LBB0_433 + 0x83, 0xf9, 0x20, //0x0000245b cmpl $32, %ecx + 0x0f, 0x85, 0x1c, 0x02, 0x00, 0x00, //0x0000245e jne LBB0_467 + 0x49, 0x83, 0xc3, 0xe0, //0x00002464 addq $-32, %r11 + 0x49, 0x83, 0xc0, 0x20, //0x00002468 addq $32, %r8 + 0x49, 0x83, 0xfb, 0x1f, //0x0000246c cmpq $31, %r11 + 0x0f, 0x87, 0xfa, 0xfe, 0xff, 0xff, //0x00002470 ja LBB0_419 + 0xc5, 0xf8, 0x77, //0x00002476 vzeroupper + 0x4d, 0x01, 0xe8, //0x00002479 addq %r13, %r8 + 0x4c, 0x89, 0x54, 0x24, 0x28, //0x0000247c movq %r10, $40(%rsp) + 0x49, 0x83, 0xfb, 0x10, //0x00002481 cmpq $16, %r11 + 0x4c, 0x89, 0x6c, 0x24, 0x30, //0x00002485 movq %r13, $48(%rsp) + 0x0f, 0x82, 0x48, 0x01, 0x00, 0x00, //0x0000248a jb LBB0_454 + //0x00002490 LBB0_436 + 0x4d, 0x89, 0xc2, //0x00002490 movq %r8, %r10 + 0x4d, 0x29, 0xea, //0x00002493 subq %r13, %r10 + 0x45, 0x31, 0xed, //0x00002496 xorl %r13d, %r13d + //0x00002499 LBB0_437 + 0x4c, 0x89, 0xce, //0x00002499 movq %r9, %rsi + 0xc4, 0x81, 0x7a, 0x6f, 0x04, 0x28, //0x0000249c vmovdqu (%r8,%r13), %xmm0 + 0xc5, 0xf9, 0x64, 0x0d, 0x96, 0xdb, 0xff, 0xff, //0x000024a2 vpcmpgtb $-9322(%rip), %xmm0, %xmm1 /* LCPI0_20+0(%rip) */ + 0xc5, 0xfa, 0x6f, 0x15, 0x9e, 0xdb, 0xff, 0xff, //0x000024aa vmovdqu $-9314(%rip), %xmm2 /* LCPI0_21+0(%rip) */ + 0xc5, 0xe9, 0x64, 0xd0, //0x000024b2 vpcmpgtb %xmm0, %xmm2, %xmm2 + 0xc5, 0xf1, 0xdb, 0xca, //0x000024b6 vpand %xmm2, %xmm1, %xmm1 + 0xc5, 0xf9, 0x74, 0x15, 0x9e, 0xdb, 0xff, 0xff, //0x000024ba vpcmpeqb $-9314(%rip), %xmm0, %xmm2 /* LCPI0_22+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x1d, 0xa6, 0xdb, 0xff, 0xff, //0x000024c2 vpcmpeqb $-9306(%rip), %xmm0, %xmm3 /* LCPI0_23+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xd2, //0x000024ca vpor %xmm2, %xmm3, %xmm2 + 0xc5, 0xf9, 0xdb, 0x1d, 0x4a, 0xdb, 0xff, 0xff, //0x000024ce vpand $-9398(%rip), %xmm0, %xmm3 /* LCPI0_12+0(%rip) */ + 0xc5, 0xf9, 0x74, 0x05, 0xa2, 0xdb, 0xff, 0xff, //0x000024d6 vpcmpeqb $-9310(%rip), %xmm0, %xmm0 /* LCPI0_24+0(%rip) */ + 0xc5, 0xe1, 0x74, 0x1d, 0xaa, 0xdb, 0xff, 0xff, //0x000024de vpcmpeqb $-9302(%rip), %xmm3, %xmm3 /* LCPI0_25+0(%rip) */ + 0xc5, 0xe1, 0xeb, 0xe0, //0x000024e6 vpor %xmm0, %xmm3, %xmm4 + 0xc5, 0xe9, 0xeb, 0xc9, //0x000024ea vpor %xmm1, %xmm2, %xmm1 + 0xc5, 0xd9, 0xeb, 0xc9, //0x000024ee vpor %xmm1, %xmm4, %xmm1 + 0xc5, 0x79, 0xd7, 0xc8, //0x000024f2 vpmovmskb %xmm0, %r9d + 0xc5, 0xf9, 0xd7, 0xfb, //0x000024f6 vpmovmskb %xmm3, %edi + 0xc5, 0xf9, 0xd7, 0xd2, //0x000024fa vpmovmskb %xmm2, %edx + 0xc5, 0xf9, 0xd7, 0xc9, //0x000024fe vpmovmskb %xmm1, %ecx + 0xf7, 0xd1, //0x00002502 notl %ecx + 0x0f, 0xbc, 0xc9, //0x00002504 bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x00002507 cmpl $16, %ecx + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x0000250a je LBB0_439 + 0xbb, 0xff, 0xff, 0xff, 0xff, //0x00002510 movl $-1, %ebx + 0xd3, 0xe3, //0x00002515 shll %cl, %ebx + 0xf7, 0xd3, //0x00002517 notl %ebx + 0x41, 0x21, 0xd9, //0x00002519 andl %ebx, %r9d + 0x21, 0xdf, //0x0000251c andl %ebx, %edi + 0x21, 0xd3, //0x0000251e andl %edx, %ebx + 0x89, 0xda, //0x00002520 movl %ebx, %edx + //0x00002522 LBB0_439 + 0x41, 0x8d, 0x59, 0xff, //0x00002522 leal $-1(%r9), %ebx + 0x44, 0x21, 0xcb, //0x00002526 andl %r9d, %ebx + 0x0f, 0x85, 0x5a, 0x07, 0x00, 0x00, //0x00002529 jne LBB0_523 + 0x8d, 0x5f, 0xff, //0x0000252f leal $-1(%rdi), %ebx + 0x21, 0xfb, //0x00002532 andl %edi, %ebx + 0x0f, 0x85, 0x4f, 0x07, 0x00, 0x00, //0x00002534 jne LBB0_523 + 0x8d, 0x5a, 0xff, //0x0000253a leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x0000253d andl %edx, %ebx + 0x0f, 0x85, 0x44, 0x07, 0x00, 0x00, //0x0000253f jne LBB0_523 + 0x45, 0x85, 0xc9, //0x00002545 testl %r9d, %r9d + 0x0f, 0x84, 0x43, 0x00, 0x00, 0x00, //0x00002548 je LBB0_446 + 0x45, 0x0f, 0xbc, 0xc9, //0x0000254e bsfl %r9d, %r9d + 0x48, 0x83, 0xfe, 0xff, //0x00002552 cmpq $-1, %rsi + 0x0f, 0x85, 0xf4, 0x07, 0x00, 0x00, //0x00002556 jne LBB0_533 + 0x4d, 0x01, 0xd1, //0x0000255c addq %r10, %r9 + 0x4d, 0x01, 0xe9, //0x0000255f addq %r13, %r9 + 0x85, 0xff, //0x00002562 testl %edi, %edi + 0x0f, 0x84, 0x32, 0x00, 0x00, 0x00, //0x00002564 je LBB0_445 + //0x0000256a LBB0_447 + 0x0f, 0xbc, 0xff, //0x0000256a bsfl %edi, %edi + 0x48, 0x83, 0x7c, 0x24, 0x28, 0xff, //0x0000256d cmpq $-1, $40(%rsp) + 0x0f, 0x85, 0xdf, 0x07, 0x00, 0x00, //0x00002573 jne LBB0_534 + 0x4c, 0x01, 0xd7, //0x00002579 addq %r10, %rdi + 0x4c, 0x01, 0xef, //0x0000257c addq %r13, %rdi + 0x48, 0x89, 0x7c, 0x24, 0x28, //0x0000257f movq %rdi, $40(%rsp) + 0x85, 0xd2, //0x00002584 testl %edx, %edx + 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x00002586 jne LBB0_449 + 0xe9, 0x29, 0x00, 0x00, 0x00, //0x0000258c jmp LBB0_451 + //0x00002591 LBB0_446 + 0x49, 0x89, 0xf1, //0x00002591 movq %rsi, %r9 + 0x85, 0xff, //0x00002594 testl %edi, %edi + 0x0f, 0x85, 0xce, 0xff, 0xff, 0xff, //0x00002596 jne LBB0_447 + //0x0000259c LBB0_445 + 0x85, 0xd2, //0x0000259c testl %edx, %edx + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x0000259e je LBB0_451 + //0x000025a4 LBB0_449 + 0x0f, 0xbc, 0xd2, //0x000025a4 bsfl %edx, %edx + 0x49, 0x83, 0xff, 0xff, //0x000025a7 cmpq $-1, %r15 + 0x0f, 0x85, 0xae, 0x07, 0x00, 0x00, //0x000025ab jne LBB0_535 + 0x4c, 0x01, 0xd2, //0x000025b1 addq %r10, %rdx + 0x4c, 0x01, 0xea, //0x000025b4 addq %r13, %rdx + 0x49, 0x89, 0xd7, //0x000025b7 movq %rdx, %r15 + //0x000025ba LBB0_451 + 0x83, 0xf9, 0x10, //0x000025ba cmpl $16, %ecx + 0x0f, 0x85, 0xd5, 0x01, 0x00, 0x00, //0x000025bd jne LBB0_483 + 0x49, 0x83, 0xc3, 0xf0, //0x000025c3 addq $-16, %r11 + 0x49, 0x83, 0xc5, 0x10, //0x000025c7 addq $16, %r13 + 0x49, 0x83, 0xfb, 0x0f, //0x000025cb cmpq $15, %r11 + 0x0f, 0x87, 0xc4, 0xfe, 0xff, 0xff, //0x000025cf ja LBB0_437 + 0x4d, 0x01, 0xe8, //0x000025d5 addq %r13, %r8 + //0x000025d8 LBB0_454 + 0x4d, 0x85, 0xdb, //0x000025d8 testq %r11, %r11 + 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x000025db movq $48(%rsp), %r13 + 0x4c, 0x8b, 0x54, 0x24, 0x28, //0x000025e0 movq $40(%rsp), %r10 + 0x0f, 0x84, 0xd7, 0x01, 0x00, 0x00, //0x000025e5 je LBB0_485 + 0x4b, 0x8d, 0x0c, 0x18, //0x000025eb leaq (%r8,%r11), %rcx + 0x48, 0x89, 0x4c, 0x24, 0x38, //0x000025ef movq %rcx, $56(%rsp) + 0x4c, 0x89, 0xc6, //0x000025f4 movq %r8, %rsi + 0x4c, 0x29, 0xee, //0x000025f7 subq %r13, %rsi + 0x31, 0xc9, //0x000025fa xorl %ecx, %ecx + 0xe9, 0x2c, 0x00, 0x00, 0x00, //0x000025fc jmp LBB0_460 + //0x00002601 LBB0_456 + 0x83, 0xff, 0x65, //0x00002601 cmpl $101, %edi + 0x0f, 0x85, 0xb5, 0x01, 0x00, 0x00, //0x00002604 jne LBB0_484 + //0x0000260a LBB0_457 + 0x49, 0x83, 0xfa, 0xff, //0x0000260a cmpq $-1, %r10 + 0x0f, 0x85, 0x8f, 0x06, 0x00, 0x00, //0x0000260e jne LBB0_525 + 0x4c, 0x8d, 0x14, 0x0e, //0x00002614 leaq (%rsi,%rcx), %r10 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002618 .p2align 4, 0x90 + //0x00002620 LBB0_459 + 0x48, 0x83, 0xc1, 0x01, //0x00002620 addq $1, %rcx + 0x49, 0x39, 0xcb, //0x00002624 cmpq %rcx, %r11 + 0x0f, 0x84, 0xe5, 0x04, 0x00, 0x00, //0x00002627 je LBB0_508 + //0x0000262d LBB0_460 + 0x41, 0x0f, 0xbe, 0x3c, 0x08, //0x0000262d movsbl (%r8,%rcx), %edi + 0x8d, 0x5f, 0xd0, //0x00002632 leal $-48(%rdi), %ebx + 0x83, 0xfb, 0x0a, //0x00002635 cmpl $10, %ebx + 0x0f, 0x82, 0xe2, 0xff, 0xff, 0xff, //0x00002638 jb LBB0_459 + 0x8d, 0x5f, 0xd5, //0x0000263e leal $-43(%rdi), %ebx + 0x83, 0xfb, 0x1a, //0x00002641 cmpl $26, %ebx + 0x0f, 0x87, 0xb7, 0xff, 0xff, 0xff, //0x00002644 ja LBB0_456 + 0x48, 0x8d, 0x15, 0x8f, 0x1a, 0x00, 0x00, //0x0000264a leaq $6799(%rip), %rdx /* LJTI0_2+0(%rip) */ + 0x48, 0x63, 0x3c, 0x9a, //0x00002651 movslq (%rdx,%rbx,4), %rdi + 0x48, 0x01, 0xd7, //0x00002655 addq %rdx, %rdi + 0xff, 0xe7, //0x00002658 jmpq *%rdi + //0x0000265a LBB0_463 + 0x49, 0x83, 0xff, 0xff, //0x0000265a cmpq $-1, %r15 + 0x0f, 0x85, 0x3f, 0x06, 0x00, 0x00, //0x0000265e jne LBB0_525 + 0x4c, 0x8d, 0x3c, 0x0e, //0x00002664 leaq (%rsi,%rcx), %r15 + 0xe9, 0xb3, 0xff, 0xff, 0xff, //0x00002668 jmp LBB0_459 + //0x0000266d LBB0_465 + 0x49, 0x83, 0xf9, 0xff, //0x0000266d cmpq $-1, %r9 + 0x0f, 0x85, 0x2c, 0x06, 0x00, 0x00, //0x00002671 jne LBB0_525 + 0x4c, 0x8d, 0x0c, 0x0e, //0x00002677 leaq (%rsi,%rcx), %r9 + 0xe9, 0xa0, 0xff, 0xff, 0xff, //0x0000267b jmp LBB0_459 + //0x00002680 LBB0_467 + 0x4c, 0x01, 0xc1, //0x00002680 addq %r8, %rcx + 0x4c, 0x01, 0xe9, //0x00002683 addq %r13, %rcx + 0xc5, 0xf8, 0x77, //0x00002686 vzeroupper + 0x49, 0x89, 0xc8, //0x00002689 movq %rcx, %r8 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000268c movq $-1, %rcx + 0x4d, 0x85, 0xc9, //0x00002693 testq %r9, %r9 + 0x0f, 0x85, 0x36, 0x01, 0x00, 0x00, //0x00002696 jne LBB0_486 + 0xe9, 0xcd, 0x17, 0x00, 0x00, //0x0000269c jmp LBB0_726 + //0x000026a1 LBB0_468 + 0x4d, 0x29, 0xf4, //0x000026a1 subq %r14, %r12 + 0x49, 0x01, 0xd4, //0x000026a4 addq %rdx, %r12 + 0x49, 0x39, 0xfc, //0x000026a7 cmpq %rdi, %r12 + 0x0f, 0x82, 0x22, 0xdf, 0xff, 0xff, //0x000026aa jb LBB0_35 + 0xe9, 0xe8, 0x15, 0x00, 0x00, //0x000026b0 jmp LBB0_698 + //0x000026b5 LBB0_469 + 0x4c, 0x8b, 0x54, 0x24, 0x38, //0x000026b5 movq $56(%rsp), %r10 + 0xe9, 0x32, 0xf0, 0xff, 0xff, //0x000026ba jmp LBB0_282 + //0x000026bf LBB0_470 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x000026bf movl $64, %edx + //0x000026c4 LBB0_471 + 0x4c, 0x8b, 0x1c, 0x24, //0x000026c4 movq (%rsp), %r11 + 0x48, 0x39, 0xca, //0x000026c8 cmpq %rcx, %rdx + 0x0f, 0x82, 0xb5, 0x17, 0x00, 0x00, //0x000026cb jb LBB0_162 + 0xc5, 0x7d, 0x7f, 0xea, //0x000026d1 vmovdqa %ymm13, %ymm2 + 0x48, 0x01, 0xc8, //0x000026d5 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000026d8 addq $1, %rax + //0x000026dc LBB0_473 + 0x48, 0x85, 0xc0, //0x000026dc testq %rax, %rax + 0x0f, 0x88, 0xdc, 0x15, 0x00, 0x00, //0x000026df js LBB0_702 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x000026e5 movq $8(%rsp), %r15 + 0x49, 0x89, 0x07, //0x000026ea movq %rax, (%r15) + 0x4d, 0x85, 0xc9, //0x000026ed testq %r9, %r9 + 0xc5, 0x7d, 0x6f, 0xea, //0x000026f0 vmovdqa %ymm2, %ymm13 + 0x0f, 0x8f, 0xa6, 0xdc, 0xff, 0xff, //0x000026f4 jg LBB0_3 + 0xe9, 0xdb, 0x15, 0x00, 0x00, //0x000026fa jmp LBB0_475 + //0x000026ff LBB0_108 + 0x4d, 0x85, 0xff, //0x000026ff testq %r15, %r15 + 0x0f, 0x85, 0x37, 0x07, 0x00, 0x00, //0x00002702 jne LBB0_545 + 0x49, 0x01, 0xf1, //0x00002708 addq %rsi, %r9 + 0x49, 0x29, 0xf2, //0x0000270b subq %rsi, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x0000270e movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00002713 movq (%rsp), %r11 + //0x00002717 LBB0_110 + 0x4d, 0x85, 0xd2, //0x00002717 testq %r10, %r10 + 0x0f, 0x8f, 0x9f, 0x07, 0x00, 0x00, //0x0000271a jg LBB0_549 + 0xe9, 0xf0, 0x15, 0x00, 0x00, //0x00002720 jmp LBB0_728 + //0x00002725 LBB0_476 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002725 vmovdqa %ymm13, %ymm0 + 0x0f, 0xbc, 0xcb, //0x00002729 bsfl %ebx, %ecx + //0x0000272c LBB0_477 + 0x49, 0xf7, 0xd2, //0x0000272c notq %r10 + 0x49, 0x29, 0xca, //0x0000272f subq %rcx, %r10 + 0xe9, 0xde, 0xf0, 0xff, 0xff, //0x00002732 jmp LBB0_293 + //0x00002737 LBB0_478 + 0x66, 0x0f, 0xbc, 0xc3, //0x00002737 bsfw %bx, %ax + 0x0f, 0xb7, 0xf8, //0x0000273b movzwl %ax, %edi + 0x48, 0x89, 0xf8, //0x0000273e movq %rdi, %rax + 0x4c, 0x29, 0xc8, //0x00002741 subq %r9, %rax + 0x49, 0x89, 0x07, //0x00002744 movq %rax, (%r15) + 0x48, 0x85, 0xc0, //0x00002747 testq %rax, %rax + 0x48, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000274a movabsq $4294977024, %rbx + 0x0f, 0x8e, 0x90, 0xdc, 0xff, 0xff, //0x00002754 jle LBB0_2 + 0x48, 0x01, 0xf9, //0x0000275a addq %rdi, %rcx + 0x48, 0x01, 0xfe, //0x0000275d addq %rdi, %rsi + 0x48, 0x01, 0xfa, //0x00002760 addq %rdi, %rdx + //0x00002763 LBB0_480 + 0x0f, 0xb6, 0x02, //0x00002763 movzbl (%rdx), %eax + 0x48, 0x83, 0xf8, 0x20, //0x00002766 cmpq $32, %rax + 0x0f, 0x87, 0x7a, 0xdc, 0xff, 0xff, //0x0000276a ja LBB0_2 + 0x48, 0x0f, 0xa3, 0xc3, //0x00002770 btq %rax, %rbx + 0x0f, 0x83, 0x70, 0xdc, 0xff, 0xff, //0x00002774 jae LBB0_2 + 0x49, 0x89, 0x37, //0x0000277a movq %rsi, (%r15) + 0x48, 0x83, 0xc1, 0xff, //0x0000277d addq $-1, %rcx + 0x48, 0x83, 0xc6, 0xff, //0x00002781 addq $-1, %rsi + 0x48, 0x83, 0xc2, 0xff, //0x00002785 addq $-1, %rdx + 0x48, 0x83, 0xf9, 0x01, //0x00002789 cmpq $1, %rcx + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x0000278d jg LBB0_480 + 0xe9, 0x52, 0xdc, 0xff, 0xff, //0x00002793 jmp LBB0_2 + //0x00002798 LBB0_483 + 0x89, 0xc9, //0x00002798 movl %ecx, %ecx + 0x49, 0x01, 0xc8, //0x0000279a addq %rcx, %r8 + 0x4d, 0x01, 0xe8, //0x0000279d addq %r13, %r8 + 0x4c, 0x8b, 0x6c, 0x24, 0x30, //0x000027a0 movq $48(%rsp), %r13 + 0x4c, 0x8b, 0x54, 0x24, 0x28, //0x000027a5 movq $40(%rsp), %r10 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000027aa movq $-1, %rcx + 0x4d, 0x85, 0xc9, //0x000027b1 testq %r9, %r9 + 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x000027b4 jne LBB0_486 + 0xe9, 0xaf, 0x16, 0x00, 0x00, //0x000027ba jmp LBB0_726 + //0x000027bf LBB0_484 + 0x49, 0x01, 0xc8, //0x000027bf addq %rcx, %r8 + //0x000027c2 LBB0_485 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000027c2 movq $-1, %rcx + 0x4d, 0x85, 0xc9, //0x000027c9 testq %r9, %r9 + 0x0f, 0x84, 0x9c, 0x16, 0x00, 0x00, //0x000027cc je LBB0_726 + //0x000027d2 LBB0_486 + 0x4d, 0x85, 0xff, //0x000027d2 testq %r15, %r15 + 0x0f, 0x84, 0x93, 0x16, 0x00, 0x00, //0x000027d5 je LBB0_726 + 0x4d, 0x85, 0xd2, //0x000027db testq %r10, %r10 + 0x0f, 0x84, 0x8a, 0x16, 0x00, 0x00, //0x000027de je LBB0_726 + 0x4d, 0x29, 0xe8, //0x000027e4 subq %r13, %r8 + 0x49, 0x8d, 0x48, 0xff, //0x000027e7 leaq $-1(%r8), %rcx + 0x49, 0x39, 0xc9, //0x000027eb cmpq %rcx, %r9 + 0x0f, 0x84, 0x8d, 0x00, 0x00, 0x00, //0x000027ee je LBB0_494 + 0x49, 0x39, 0xcf, //0x000027f4 cmpq %rcx, %r15 + 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x000027f7 je LBB0_494 + 0x49, 0x39, 0xca, //0x000027fd cmpq %rcx, %r10 + 0x0f, 0x84, 0x7b, 0x00, 0x00, 0x00, //0x00002800 je LBB0_494 + 0x4d, 0x85, 0xff, //0x00002806 testq %r15, %r15 + 0xc5, 0xfe, 0x6f, 0x2d, 0xaf, 0xd8, 0xff, 0xff, //0x00002809 vmovdqu $-10065(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0xc7, 0xd8, 0xff, 0xff, //0x00002811 vmovdqu $-10041(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0xdf, 0xd8, 0xff, 0xff, //0x00002819 vmovdqu $-10017(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0xf7, 0xd8, 0xff, 0xff, //0x00002821 vmovdqu $-9993(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002829 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0xca, 0xd9, 0xff, 0xff, //0x0000282e vmovdqu $-9782(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x05, 0xe2, 0xd9, 0xff, 0xff, //0x00002836 vmovdqu $-9758(%rip), %ymm0 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0xfa, 0xd9, 0xff, 0xff, //0x0000283e vmovdqu $-9734(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x92, 0xd9, 0xff, 0xff, //0x00002846 vmovdqu $-9838(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0x4a, 0xda, 0xff, 0xff, //0x0000284e vmovdqu $-9654(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x62, 0xd9, 0xff, 0xff, //0x00002856 vmovdqu $-9886(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0x0f, 0x8e, 0x8f, 0x00, 0x00, 0x00, //0x0000285e jle LBB0_497 + 0x49, 0x8d, 0x4f, 0xff, //0x00002864 leaq $-1(%r15), %rcx + 0x49, 0x39, 0xca, //0x00002868 cmpq %rcx, %r10 + 0x0f, 0x84, 0x82, 0x00, 0x00, 0x00, //0x0000286b je LBB0_497 + 0x49, 0xf7, 0xd7, //0x00002871 notq %r15 + 0x4d, 0x89, 0xf8, //0x00002874 movq %r15, %r8 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002877 movq $8(%rsp), %r15 + 0xe9, 0x5d, 0x00, 0x00, 0x00, //0x0000287c jmp LBB0_496 + //0x00002881 LBB0_494 + 0x49, 0xf7, 0xd8, //0x00002881 negq %r8 + //0x00002884 LBB0_495 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002884 movq $8(%rsp), %r15 + 0xc5, 0xfe, 0x6f, 0x2d, 0x2f, 0xd8, 0xff, 0xff, //0x00002889 vmovdqu $-10193(%rip), %ymm5 /* LCPI0_1+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x35, 0x47, 0xd8, 0xff, 0xff, //0x00002891 vmovdqu $-10169(%rip), %ymm6 /* LCPI0_2+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x3d, 0x5f, 0xd8, 0xff, 0xff, //0x00002899 vmovdqu $-10145(%rip), %ymm7 /* LCPI0_3+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x05, 0x77, 0xd8, 0xff, 0xff, //0x000028a1 vmovdqu $-10121(%rip), %ymm8 /* LCPI0_4+0(%rip) */ + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000028a9 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7e, 0x6f, 0x15, 0x4a, 0xd9, 0xff, 0xff, //0x000028ae vmovdqu $-9910(%rip), %ymm10 /* LCPI0_14+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x05, 0x62, 0xd9, 0xff, 0xff, //0x000028b6 vmovdqu $-9886(%rip), %ymm0 /* LCPI0_15+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x3d, 0x7a, 0xd9, 0xff, 0xff, //0x000028be vmovdqu $-9862(%rip), %ymm15 /* LCPI0_16+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x35, 0x12, 0xd9, 0xff, 0xff, //0x000028c6 vmovdqu $-9966(%rip), %ymm14 /* LCPI0_10+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x25, 0xca, 0xd9, 0xff, 0xff, //0x000028ce vmovdqu $-9782(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xe2, 0xd8, 0xff, 0xff, //0x000028d6 vmovdqu $-10014(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + //0x000028de LBB0_496 + 0xc5, 0x7e, 0x6f, 0x1d, 0x5a, 0xd8, 0xff, 0xff, //0x000028de vmovdqu $-10150(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x72, 0xd8, 0xff, 0xff, //0x000028e6 vmovdqu $-10126(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + 0xe9, 0x4b, 0x02, 0x00, 0x00, //0x000028ee jmp LBB0_512 + //0x000028f3 LBB0_497 + 0x4c, 0x89, 0xc9, //0x000028f3 movq %r9, %rcx + 0x4c, 0x09, 0xd1, //0x000028f6 orq %r10, %rcx + 0x0f, 0x99, 0xc1, //0x000028f9 setns %cl + 0xc5, 0x7e, 0x6f, 0x1d, 0x3c, 0xd8, 0xff, 0xff, //0x000028fc vmovdqu $-10180(%rip), %ymm11 /* LCPI0_5+0(%rip) */ + 0xc5, 0x7e, 0x6f, 0x25, 0x54, 0xd8, 0xff, 0xff, //0x00002904 vmovdqu $-10156(%rip), %ymm12 /* LCPI0_6+0(%rip) */ + 0x0f, 0x88, 0xd2, 0x00, 0x00, 0x00, //0x0000290c js LBB0_500 + 0x4d, 0x39, 0xd1, //0x00002912 cmpq %r10, %r9 + 0x0f, 0x8c, 0xc9, 0x00, 0x00, 0x00, //0x00002915 jl LBB0_500 + 0x49, 0xf7, 0xd1, //0x0000291b notq %r9 + 0x4d, 0x89, 0xc8, //0x0000291e movq %r9, %r8 + 0xe9, 0x13, 0x02, 0x00, 0x00, //0x00002921 jmp LBB0_511 + //0x00002926 LBB0_140 + 0x4d, 0x85, 0xff, //0x00002926 testq %r15, %r15 + 0x0f, 0x85, 0x6a, 0x07, 0x00, 0x00, //0x00002929 jne LBB0_570 + 0x49, 0x01, 0xf1, //0x0000292f addq %rsi, %r9 + 0x49, 0x29, 0xf2, //0x00002932 subq %rsi, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002935 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x0000293a movq (%rsp), %r11 + //0x0000293e LBB0_142 + 0x4d, 0x85, 0xd2, //0x0000293e testq %r10, %r10 + 0x0f, 0x8f, 0xc4, 0x07, 0x00, 0x00, //0x00002941 jg LBB0_574 + 0xe9, 0xc9, 0x13, 0x00, 0x00, //0x00002947 jmp LBB0_728 + //0x0000294c LBB0_54 + 0x4c, 0x01, 0xf0, //0x0000294c addq %r14, %rax + 0x49, 0x83, 0xfb, 0x20, //0x0000294f cmpq $32, %r11 + 0x0f, 0x82, 0x45, 0x06, 0x00, 0x00, //0x00002953 jb LBB0_557 + //0x00002959 LBB0_55 + 0xc5, 0xfe, 0x6f, 0x00, //0x00002959 vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x0000295d vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00002961 vpmovmskb %ymm1, %edx + 0xc5, 0xfd, 0x74, 0xc7, //0x00002965 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00002969 vpmovmskb %ymm0, %esi + 0x85, 0xf6, //0x0000296d testl %esi, %esi + 0x0f, 0x85, 0x82, 0x05, 0x00, 0x00, //0x0000296f jne LBB0_552 + 0x4d, 0x85, 0xd2, //0x00002975 testq %r10, %r10 + 0x0f, 0x85, 0xa7, 0x05, 0x00, 0x00, //0x00002978 jne LBB0_554 + 0x45, 0x31, 0xd2, //0x0000297e xorl %r10d, %r10d + 0x48, 0x85, 0xd2, //0x00002981 testq %rdx, %rdx + 0x0f, 0x84, 0x0c, 0x06, 0x00, 0x00, //0x00002984 je LBB0_556 + //0x0000298a LBB0_58 + 0x48, 0x0f, 0xbc, 0xca, //0x0000298a bsfq %rdx, %rcx + 0x4c, 0x29, 0xf0, //0x0000298e subq %r14, %rax + 0x48, 0x01, 0xc8, //0x00002991 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002994 addq $1, %rax + 0xe9, 0x0e, 0xde, 0xff, 0xff, //0x00002998 jmp LBB0_63 + //0x0000299d LBB0_152 + 0x4c, 0x01, 0xf0, //0x0000299d addq %r14, %rax + 0x49, 0x83, 0xfd, 0x20, //0x000029a0 cmpq $32, %r13 + 0x0f, 0x82, 0xaa, 0x08, 0x00, 0x00, //0x000029a4 jb LBB0_587 + //0x000029aa LBB0_153 + 0xc5, 0xfe, 0x6f, 0x00, //0x000029aa vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x000029ae vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd1, //0x000029b2 vpmovmskb %ymm1, %r10d + 0xc5, 0xfd, 0x74, 0xcf, //0x000029b6 vpcmpeqb %ymm7, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x000029ba vpmovmskb %ymm1, %edx + 0x85, 0xd2, //0x000029be testl %edx, %edx + 0x0f, 0x85, 0x9a, 0x07, 0x00, 0x00, //0x000029c0 jne LBB0_577 + 0x4d, 0x85, 0xdb, //0x000029c6 testq %r11, %r11 + 0x0f, 0x85, 0xbf, 0x07, 0x00, 0x00, //0x000029c9 jne LBB0_579 + 0x45, 0x31, 0xdb, //0x000029cf xorl %r11d, %r11d + 0x4d, 0x85, 0xd2, //0x000029d2 testq %r10, %r10 + 0x0f, 0x84, 0x25, 0x08, 0x00, 0x00, //0x000029d5 je LBB0_581 + //0x000029db LBB0_156 + 0x49, 0x0f, 0xbc, 0xd2, //0x000029db bsfq %r10, %rdx + 0xe9, 0x21, 0x08, 0x00, 0x00, //0x000029df jmp LBB0_582 + //0x000029e4 LBB0_500 + 0x49, 0x8d, 0x52, 0xff, //0x000029e4 leaq $-1(%r10), %rdx + 0x49, 0x39, 0xd1, //0x000029e8 cmpq %rdx, %r9 + 0x49, 0xf7, 0xd2, //0x000029eb notq %r10 + 0x4d, 0x0f, 0x45, 0xd0, //0x000029ee cmovneq %r8, %r10 + 0x84, 0xc9, //0x000029f2 testb %cl, %cl + 0x4d, 0x0f, 0x45, 0xc2, //0x000029f4 cmovneq %r10, %r8 + 0xe9, 0x3c, 0x01, 0x00, 0x00, //0x000029f8 jmp LBB0_511 + //0x000029fd LBB0_501 + 0xc5, 0x7d, 0x7f, 0xe8, //0x000029fd vmovdqa %ymm13, %ymm0 + 0x0f, 0xbc, 0xcf, //0x00002a01 bsfl %edi, %ecx + //0x00002a04 LBB0_502 + 0x4c, 0x8b, 0x6c, 0x24, 0x10, //0x00002a04 movq $16(%rsp), %r13 + 0x4d, 0x01, 0xee, //0x00002a09 addq %r13, %r14 + 0x4d, 0x29, 0xd6, //0x00002a0c subq %r10, %r14 + 0x49, 0x29, 0xce, //0x00002a0f subq %rcx, %r14 + 0x4d, 0x29, 0xfe, //0x00002a12 subq %r15, %r14 + 0x49, 0x83, 0xc6, 0xfe, //0x00002a15 addq $-2, %r14 + 0x4d, 0x89, 0xf2, //0x00002a19 movq %r14, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002a1c movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00002a21 movq (%rsp), %r11 + 0xe9, 0xf0, 0xed, 0xff, 0xff, //0x00002a25 jmp LBB0_294 + //0x00002a2a LBB0_503 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002a2a vmovdqa %ymm13, %ymm0 + 0x4c, 0x8b, 0x6c, 0x24, 0x10, //0x00002a2e movq $16(%rsp), %r13 + 0x4d, 0x01, 0xee, //0x00002a33 addq %r13, %r14 + 0x4d, 0x29, 0xd6, //0x00002a36 subq %r10, %r14 + 0x49, 0x29, 0xce, //0x00002a39 subq %rcx, %r14 + 0x49, 0x83, 0xc6, 0xfe, //0x00002a3c addq $-2, %r14 + 0x4d, 0x89, 0xf2, //0x00002a40 movq %r14, %r10 + 0xe9, 0xd2, 0xed, 0xff, 0xff, //0x00002a43 jmp LBB0_294 + //0x00002a48 LBB0_504 + 0x4d, 0x01, 0xf4, //0x00002a48 addq %r14, %r12 + 0x48, 0x85, 0xf6, //0x00002a4b testq %rsi, %rsi + 0x0f, 0x85, 0x14, 0xdb, 0xff, 0xff, //0x00002a4e jne LBB0_28 + 0xe9, 0x49, 0xdb, 0xff, 0xff, //0x00002a54 jmp LBB0_33 + //0x00002a59 LBB0_89 + 0x4c, 0x01, 0xf0, //0x00002a59 addq %r14, %rax + 0x49, 0x83, 0xfb, 0x20, //0x00002a5c cmpq $32, %r11 + 0x0f, 0x82, 0x6b, 0x09, 0x00, 0x00, //0x00002a60 jb LBB0_602 + //0x00002a66 LBB0_90 + 0xc5, 0xfe, 0x6f, 0x00, //0x00002a66 vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00002a6a vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00002a6e vpmovmskb %ymm1, %edx + 0xc5, 0xfd, 0x74, 0xc7, //0x00002a72 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00002a76 vpmovmskb %ymm0, %esi + 0x85, 0xf6, //0x00002a7a testl %esi, %esi + 0x0f, 0x85, 0xa8, 0x08, 0x00, 0x00, //0x00002a7c jne LBB0_597 + 0x4d, 0x85, 0xd2, //0x00002a82 testq %r10, %r10 + 0x0f, 0x85, 0xcd, 0x08, 0x00, 0x00, //0x00002a85 jne LBB0_599 + 0x45, 0x31, 0xd2, //0x00002a8b xorl %r10d, %r10d + 0x48, 0x85, 0xd2, //0x00002a8e testq %rdx, %rdx + 0x0f, 0x84, 0x32, 0x09, 0x00, 0x00, //0x00002a91 je LBB0_601 + //0x00002a97 LBB0_93 + 0x48, 0x0f, 0xbc, 0xca, //0x00002a97 bsfq %rdx, %rcx + 0x4c, 0x29, 0xf0, //0x00002a9b subq %r14, %rax + 0x48, 0x01, 0xc8, //0x00002a9e addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002aa1 addq $1, %rax + 0xe9, 0x21, 0xdf, 0xff, 0xff, //0x00002aa5 jmp LBB0_98 + //0x00002aaa LBB0_172 + 0x4c, 0x01, 0xf0, //0x00002aaa addq %r14, %rax + 0x49, 0x83, 0xfd, 0x20, //0x00002aad cmpq $32, %r13 + 0x0f, 0x82, 0xe4, 0x02, 0x00, 0x00, //0x00002ab1 jb LBB0_538 + //0x00002ab7 LBB0_173 + 0xc5, 0xfe, 0x6f, 0x00, //0x00002ab7 vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00002abb vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd1, //0x00002abf vpmovmskb %ymm1, %r10d + 0xc5, 0xfd, 0x74, 0xcf, //0x00002ac3 vpcmpeqb %ymm7, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00002ac7 vpmovmskb %ymm1, %edx + 0x85, 0xd2, //0x00002acb testl %edx, %edx + 0x0f, 0x85, 0x08, 0x0a, 0x00, 0x00, //0x00002acd jne LBB0_615 + 0x4d, 0x85, 0xdb, //0x00002ad3 testq %r11, %r11 + 0x0f, 0x85, 0x2d, 0x0a, 0x00, 0x00, //0x00002ad6 jne LBB0_617 + 0x45, 0x31, 0xdb, //0x00002adc xorl %r11d, %r11d + 0x4d, 0x85, 0xd2, //0x00002adf testq %r10, %r10 + 0x0f, 0x84, 0x93, 0x0a, 0x00, 0x00, //0x00002ae2 je LBB0_619 + //0x00002ae8 LBB0_176 + 0x49, 0x0f, 0xbc, 0xd2, //0x00002ae8 bsfq %r10, %rdx + 0xe9, 0x8f, 0x0a, 0x00, 0x00, //0x00002aec jmp LBB0_620 + //0x00002af1 LBB0_505 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002af1 vmovdqa %ymm13, %ymm0 + 0x89, 0xf9, //0x00002af5 movl %edi, %ecx + 0xe9, 0x30, 0xfc, 0xff, 0xff, //0x00002af7 jmp LBB0_477 + //0x00002afc LBB0_506 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002afc vmovdqa %ymm13, %ymm0 + 0x89, 0xf1, //0x00002b00 movl %esi, %ecx + 0xe9, 0x25, 0xfc, 0xff, 0xff, //0x00002b02 jmp LBB0_477 + //0x00002b07 LBB0_507 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002b07 vmovdqa %ymm13, %ymm0 + 0x89, 0xd1, //0x00002b0b movl %edx, %ecx + 0xe9, 0x1a, 0xfc, 0xff, 0xff, //0x00002b0d jmp LBB0_477 + //0x00002b12 LBB0_508 + 0x4c, 0x8b, 0x44, 0x24, 0x38, //0x00002b12 movq $56(%rsp), %r8 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002b17 movq $-1, %rcx + 0x4d, 0x85, 0xc9, //0x00002b1e testq %r9, %r9 + 0x0f, 0x85, 0xab, 0xfc, 0xff, 0xff, //0x00002b21 jne LBB0_486 + 0xe9, 0x42, 0x13, 0x00, 0x00, //0x00002b27 jmp LBB0_726 + //0x00002b2c LBB0_509 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002b2c vmovdqa %ymm13, %ymm0 + 0x0f, 0xbc, 0xcb, //0x00002b30 bsfl %ebx, %ecx + //0x00002b33 LBB0_510 + 0x49, 0xf7, 0xd0, //0x00002b33 notq %r8 + 0x49, 0x29, 0xc8, //0x00002b36 subq %rcx, %r8 + //0x00002b39 LBB0_511 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002b39 movq $8(%rsp), %r15 + //0x00002b3e LBB0_512 + 0x4d, 0x85, 0xc0, //0x00002b3e testq %r8, %r8 + 0x0f, 0x88, 0x24, 0x13, 0x00, 0x00, //0x00002b41 js LBB0_725 + 0x49, 0x8b, 0x0f, //0x00002b47 movq (%r15), %rcx + 0xc5, 0x7d, 0x6f, 0xe8, //0x00002b4a vmovdqa %ymm0, %ymm13 + //0x00002b4e LBB0_514 + 0x4c, 0x01, 0xc1, //0x00002b4e addq %r8, %rcx + 0x49, 0x89, 0x0f, //0x00002b51 movq %rcx, (%r15) + 0x48, 0x85, 0xc0, //0x00002b54 testq %rax, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x00002b57 movq (%rsp), %r11 + 0x0f, 0x8f, 0x3f, 0xd8, 0xff, 0xff, //0x00002b5b jg LBB0_3 + 0xe9, 0xc9, 0x12, 0x00, 0x00, //0x00002b61 jmp LBB0_394 + //0x00002b66 LBB0_515 + 0x66, 0x0f, 0xbc, 0xc9, //0x00002b66 bsfw %cx, %cx + 0x44, 0x0f, 0xb7, 0xc1, //0x00002b6a movzwl %cx, %r8d + 0x4c, 0x89, 0xc1, //0x00002b6e movq %r8, %rcx + 0x4c, 0x29, 0xc9, //0x00002b71 subq %r9, %rcx + 0x49, 0x89, 0x0f, //0x00002b74 movq %rcx, (%r15) + 0x48, 0x85, 0xc9, //0x00002b77 testq %rcx, %rcx + 0x48, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002b7a movabsq $4294977024, %rsi + 0x0f, 0x8e, 0x36, 0xf6, 0xff, 0xff, //0x00002b84 jle LBB0_393 + 0x4c, 0x01, 0xc7, //0x00002b8a addq %r8, %rdi + 0x4c, 0x01, 0xc2, //0x00002b8d addq %r8, %rdx + 0x4c, 0x01, 0xc3, //0x00002b90 addq %r8, %rbx + //0x00002b93 LBB0_517 + 0x0f, 0xb6, 0x0b, //0x00002b93 movzbl (%rbx), %ecx + 0x48, 0x83, 0xf9, 0x20, //0x00002b96 cmpq $32, %rcx + 0x0f, 0x87, 0x20, 0xf6, 0xff, 0xff, //0x00002b9a ja LBB0_393 + 0x48, 0x0f, 0xa3, 0xce, //0x00002ba0 btq %rcx, %rsi + 0x0f, 0x83, 0x16, 0xf6, 0xff, 0xff, //0x00002ba4 jae LBB0_393 + 0x49, 0x89, 0x17, //0x00002baa movq %rdx, (%r15) + 0x48, 0x83, 0xc7, 0xff, //0x00002bad addq $-1, %rdi + 0x48, 0x83, 0xc2, 0xff, //0x00002bb1 addq $-1, %rdx + 0x48, 0x83, 0xc3, 0xff, //0x00002bb5 addq $-1, %rbx + 0x48, 0x83, 0xff, 0x01, //0x00002bb9 cmpq $1, %rdi + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x00002bbd jg LBB0_517 + 0xe9, 0xf8, 0xf5, 0xff, 0xff, //0x00002bc3 jmp LBB0_393 + //0x00002bc8 LBB0_520 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002bc8 vmovdqa %ymm13, %ymm0 + 0x89, 0xf9, //0x00002bcc movl %edi, %ecx + 0xe9, 0x31, 0xfe, 0xff, 0xff, //0x00002bce jmp LBB0_502 + //0x00002bd3 LBB0_521 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002bd3 vmovdqa %ymm13, %ymm0 + 0x89, 0xf1, //0x00002bd7 movl %esi, %ecx + 0xe9, 0x26, 0xfe, 0xff, 0xff, //0x00002bd9 jmp LBB0_502 + //0x00002bde LBB0_522 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002bde vmovdqa %ymm13, %ymm0 + 0x89, 0xd1, //0x00002be2 movl %edx, %ecx + 0xe9, 0x1b, 0xfe, 0xff, 0xff, //0x00002be4 jmp LBB0_502 + //0x00002be9 LBB0_247 + 0x4c, 0x01, 0xf0, //0x00002be9 addq %r14, %rax + 0x49, 0x83, 0xfb, 0x20, //0x00002bec cmpq $32, %r11 + 0x0f, 0x82, 0x08, 0x02, 0x00, 0x00, //0x00002bf0 jb LBB0_542 + //0x00002bf6 LBB0_248 + 0xc5, 0xfe, 0x6f, 0x00, //0x00002bf6 vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00002bfa vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00002bfe vpmovmskb %ymm1, %edx + 0xc5, 0xfd, 0x74, 0xc7, //0x00002c02 vpcmpeqb %ymm7, %ymm0, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00002c06 vpmovmskb %ymm0, %esi + 0x85, 0xf6, //0x00002c0a testl %esi, %esi + 0x0f, 0x85, 0xe1, 0x0c, 0x00, 0x00, //0x00002c0c jne LBB0_653 + 0x4d, 0x85, 0xd2, //0x00002c12 testq %r10, %r10 + 0x0f, 0x85, 0x06, 0x0d, 0x00, 0x00, //0x00002c15 jne LBB0_655 + 0x45, 0x31, 0xd2, //0x00002c1b xorl %r10d, %r10d + 0xc5, 0x7d, 0x7f, 0xea, //0x00002c1e vmovdqa %ymm13, %ymm2 + 0x48, 0x85, 0xd2, //0x00002c22 testq %rdx, %rdx + 0x0f, 0x84, 0x6b, 0x0d, 0x00, 0x00, //0x00002c25 je LBB0_657 + //0x00002c2b LBB0_251 + 0x48, 0x0f, 0xbc, 0xca, //0x00002c2b bsfq %rdx, %rcx + 0x4c, 0x29, 0xf0, //0x00002c2f subq %r14, %rax + 0x48, 0x01, 0xc8, //0x00002c32 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002c35 addq $1, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x00002c39 movq (%rsp), %r11 + 0xe9, 0x9a, 0xfa, 0xff, 0xff, //0x00002c3d jmp LBB0_473 + //0x00002c42 LBB0_405 + 0x4c, 0x01, 0xf0, //0x00002c42 addq %r14, %rax + 0x49, 0x83, 0xfd, 0x20, //0x00002c45 cmpq $32, %r13 + 0x0f, 0x82, 0xd9, 0x01, 0x00, 0x00, //0x00002c49 jb LBB0_544 + //0x00002c4f LBB0_406 + 0xc5, 0xfe, 0x6f, 0x00, //0x00002c4f vmovdqu (%rax), %ymm0 + 0xc5, 0xfd, 0x74, 0xce, //0x00002c53 vpcmpeqb %ymm6, %ymm0, %ymm1 + 0xc5, 0x7d, 0xd7, 0xd1, //0x00002c57 vpmovmskb %ymm1, %r10d + 0xc5, 0xfd, 0x74, 0xcf, //0x00002c5b vpcmpeqb %ymm7, %ymm0, %ymm1 + 0xc5, 0xfd, 0xd7, 0xd1, //0x00002c5f vpmovmskb %ymm1, %edx + 0x85, 0xd2, //0x00002c63 testl %edx, %edx + 0x0f, 0x85, 0xfb, 0x0d, 0x00, 0x00, //0x00002c65 jne LBB0_671 + 0x4d, 0x85, 0xdb, //0x00002c6b testq %r11, %r11 + 0x0f, 0x85, 0x20, 0x0e, 0x00, 0x00, //0x00002c6e jne LBB0_673 + 0x45, 0x31, 0xdb, //0x00002c74 xorl %r11d, %r11d + 0x4d, 0x85, 0xd2, //0x00002c77 testq %r10, %r10 + 0x0f, 0x84, 0x86, 0x0e, 0x00, 0x00, //0x00002c7a je LBB0_675 + //0x00002c80 LBB0_409 + 0x49, 0x0f, 0xbc, 0xd2, //0x00002c80 bsfq %r10, %rdx + 0xe9, 0x82, 0x0e, 0x00, 0x00, //0x00002c84 jmp LBB0_676 + //0x00002c89 LBB0_523 + 0x0f, 0xbc, 0xcb, //0x00002c89 bsfl %ebx, %ecx + //0x00002c8c LBB0_524 + 0x49, 0x01, 0xc6, //0x00002c8c addq %rax, %r14 + 0x4d, 0x29, 0xc6, //0x00002c8f subq %r8, %r14 + 0x49, 0x29, 0xce, //0x00002c92 subq %rcx, %r14 + 0x49, 0xf7, 0xd5, //0x00002c95 notq %r13 + 0x4d, 0x01, 0xf5, //0x00002c98 addq %r14, %r13 + 0x4d, 0x89, 0xe8, //0x00002c9b movq %r13, %r8 + 0xe9, 0xe1, 0xfb, 0xff, 0xff, //0x00002c9e jmp LBB0_495 + //0x00002ca3 LBB0_525 + 0x49, 0x01, 0xc6, //0x00002ca3 addq %rax, %r14 + 0x4d, 0x29, 0xc6, //0x00002ca6 subq %r8, %r14 + 0x48, 0xf7, 0xd1, //0x00002ca9 notq %rcx + 0x4c, 0x01, 0xf1, //0x00002cac addq %r14, %rcx + 0x49, 0x89, 0xc8, //0x00002caf movq %rcx, %r8 + 0xe9, 0xcd, 0xfb, 0xff, 0xff, //0x00002cb2 jmp LBB0_495 + //0x00002cb7 LBB0_526 + 0x4f, 0x8d, 0x04, 0x2e, //0x00002cb7 leaq (%r14,%r13), %r8 + 0x48, 0x83, 0xff, 0x10, //0x00002cbb cmpq $16, %rdi + 0x0f, 0x83, 0x8d, 0xde, 0xff, 0xff, //0x00002cbf jae LBB0_116 + 0xe9, 0xf1, 0xde, 0xff, 0xff, //0x00002cc5 jmp LBB0_119 + //0x00002cca LBB0_527 + 0x48, 0xc7, 0x44, 0x24, 0x28, 0xff, 0xff, 0xff, 0xff, //0x00002cca movq $-1, $40(%rsp) + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00002cd3 movq $-1, %r13 + 0x48, 0xc7, 0x44, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff, //0x00002cda movq $-1, $48(%rsp) + 0x4d, 0x89, 0xc2, //0x00002ce3 movq %r8, %r10 + 0x49, 0x83, 0xf9, 0x10, //0x00002ce6 cmpq $16, %r9 + 0x0f, 0x83, 0xf2, 0xe4, 0xff, 0xff, //0x00002cea jae LBB0_203 + 0xe9, 0x7c, 0xe6, 0xff, 0xff, //0x00002cf0 jmp LBB0_221 + //0x00002cf5 LBB0_528 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002cf5 vmovdqa %ymm13, %ymm0 + 0x89, 0xf9, //0x00002cf9 movl %edi, %ecx + 0xe9, 0x33, 0xfe, 0xff, 0xff, //0x00002cfb jmp LBB0_510 + //0x00002d00 LBB0_529 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002d00 vmovdqa %ymm13, %ymm0 + 0x89, 0xf1, //0x00002d04 movl %esi, %ecx + 0xe9, 0x28, 0xfe, 0xff, 0xff, //0x00002d06 jmp LBB0_510 + //0x00002d0b LBB0_530 + 0xc5, 0x7d, 0x7f, 0xe8, //0x00002d0b vmovdqa %ymm13, %ymm0 + 0x89, 0xd1, //0x00002d0f movl %edx, %ecx + 0xe9, 0x1d, 0xfe, 0xff, 0xff, //0x00002d11 jmp LBB0_510 + //0x00002d16 LBB0_531 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002d16 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002d1a movq $-1, %r15 + 0x45, 0x31, 0xd2, //0x00002d21 xorl %r10d, %r10d + 0x49, 0x83, 0xfb, 0x20, //0x00002d24 cmpq $32, %r11 + 0x0f, 0x83, 0x2b, 0xfc, 0xff, 0xff, //0x00002d28 jae LBB0_55 + 0xe9, 0x6b, 0x02, 0x00, 0x00, //0x00002d2e jmp LBB0_557 + //0x00002d33 LBB0_532 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002d33 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002d37 movq $-1, %r15 + 0x45, 0x31, 0xdb, //0x00002d3e xorl %r11d, %r11d + 0x49, 0x83, 0xfd, 0x20, //0x00002d41 cmpq $32, %r13 + 0x0f, 0x83, 0x5f, 0xfc, 0xff, 0xff, //0x00002d45 jae LBB0_153 + 0xe9, 0x04, 0x05, 0x00, 0x00, //0x00002d4b jmp LBB0_587 + //0x00002d50 LBB0_533 + 0x44, 0x89, 0xc9, //0x00002d50 movl %r9d, %ecx + 0xe9, 0x34, 0xff, 0xff, 0xff, //0x00002d53 jmp LBB0_524 + //0x00002d58 LBB0_534 + 0x89, 0xf9, //0x00002d58 movl %edi, %ecx + 0xe9, 0x2d, 0xff, 0xff, 0xff, //0x00002d5a jmp LBB0_524 + //0x00002d5f LBB0_535 + 0x89, 0xd1, //0x00002d5f movl %edx, %ecx + 0xe9, 0x26, 0xff, 0xff, 0xff, //0x00002d61 jmp LBB0_524 + //0x00002d66 LBB0_536 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002d66 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002d6a movq $-1, %r15 + 0x45, 0x31, 0xd2, //0x00002d71 xorl %r10d, %r10d + 0x49, 0x83, 0xfb, 0x20, //0x00002d74 cmpq $32, %r11 + 0x0f, 0x83, 0xe8, 0xfc, 0xff, 0xff, //0x00002d78 jae LBB0_90 + 0xe9, 0x4e, 0x06, 0x00, 0x00, //0x00002d7e jmp LBB0_602 + //0x00002d83 LBB0_537 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002d83 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002d87 movq $-1, %r15 + 0x45, 0x31, 0xdb, //0x00002d8e xorl %r11d, %r11d + 0x49, 0x83, 0xfd, 0x20, //0x00002d91 cmpq $32, %r13 + 0x0f, 0x83, 0x1c, 0xfd, 0xff, 0xff, //0x00002d95 jae LBB0_173 + //0x00002d9b LBB0_538 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00002d9b movq $24(%rsp), %r10 + 0xe9, 0x38, 0x08, 0x00, 0x00, //0x00002da0 jmp LBB0_626 + //0x00002da5 LBB0_539 + 0x4d, 0x8d, 0x04, 0x06, //0x00002da5 leaq (%r14,%rax), %r8 + 0x48, 0x83, 0xfe, 0x10, //0x00002da9 cmpq $16, %rsi + 0x4c, 0x8b, 0x1c, 0x24, //0x00002dad movq (%rsp), %r11 + 0x0f, 0x83, 0x8f, 0xec, 0xff, 0xff, //0x00002db1 jae LBB0_322 + 0xe9, 0xf3, 0xec, 0xff, 0xff, //0x00002db7 jmp LBB0_325 + //0x00002dbc LBB0_540 + 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002dbc movq $-1, %r10 + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002dc3 movq $-1, %r9 + 0x4d, 0x89, 0xe8, //0x00002dca movq %r13, %r8 + 0x4c, 0x89, 0x54, 0x24, 0x28, //0x00002dcd movq %r10, $40(%rsp) + 0x49, 0x83, 0xfb, 0x10, //0x00002dd2 cmpq $16, %r11 + 0x4c, 0x89, 0x6c, 0x24, 0x30, //0x00002dd6 movq %r13, $48(%rsp) + 0x0f, 0x83, 0xaf, 0xf6, 0xff, 0xff, //0x00002ddb jae LBB0_436 + 0xe9, 0xf2, 0xf7, 0xff, 0xff, //0x00002de1 jmp LBB0_454 + //0x00002de6 LBB0_541 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002de6 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002dea movq $-1, %r15 + 0x45, 0x31, 0xd2, //0x00002df1 xorl %r10d, %r10d + 0x49, 0x83, 0xfb, 0x20, //0x00002df4 cmpq $32, %r11 + 0x0f, 0x83, 0xf8, 0xfd, 0xff, 0xff, //0x00002df8 jae LBB0_248 + //0x00002dfe LBB0_542 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002dfe vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002e02 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002e06 vmovdqa %ymm13, %ymm11 + 0xe9, 0x9a, 0x0b, 0x00, 0x00, //0x00002e0b jmp LBB0_658 + //0x00002e10 LBB0_543 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002e10 leaq (%r14,%r9), %rax + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002e14 movq $-1, %r15 + 0x45, 0x31, 0xdb, //0x00002e1b xorl %r11d, %r11d + 0x49, 0x83, 0xfd, 0x20, //0x00002e1e cmpq $32, %r13 + 0x0f, 0x83, 0x27, 0xfe, 0xff, 0xff, //0x00002e22 jae LBB0_406 + //0x00002e28 LBB0_544 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002e28 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002e2c vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002e30 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002e35 vmovdqa %ymm15, %ymm12 + 0xe9, 0x35, 0x0d, 0x00, 0x00, //0x00002e3a jmp LBB0_681 + //0x00002e3f LBB0_545 + 0x49, 0x39, 0xf2, //0x00002e3f cmpq %rsi, %r10 + 0x0f, 0x84, 0xcd, 0x0e, 0x00, 0x00, //0x00002e42 je LBB0_728 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002e48 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002e4c vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002e50 vmovdqa %ymm13, %ymm11 + 0x49, 0x01, 0xf1, //0x00002e55 addq %rsi, %r9 + 0x49, 0x83, 0xc1, 0x01, //0x00002e58 addq $1, %r9 + 0x48, 0xf7, 0xd6, //0x00002e5c notq %rsi + 0x49, 0x01, 0xf2, //0x00002e5f addq %rsi, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00002e62 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00002e67 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002e6b vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x28, 0xd4, 0xff, 0xff, //0x00002e70 vmovdqu $-11224(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x40, 0xd3, 0xff, 0xff, //0x00002e78 vmovdqu $-11456(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00002e80 vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xd2, //0x00002e84 testq %r10, %r10 + 0x0f, 0x8f, 0x32, 0x00, 0x00, 0x00, //0x00002e87 jg LBB0_549 + 0xe9, 0x83, 0x0e, 0x00, 0x00, //0x00002e8d jmp LBB0_728 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002e92 .p2align 4, 0x90 + //0x00002ea0 LBB0_547 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002ea0 movq $-2, %rcx + 0xba, 0x02, 0x00, 0x00, 0x00, //0x00002ea7 movl $2, %edx + 0x49, 0x01, 0xd1, //0x00002eac addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002eaf movq $-1, %rax + 0x49, 0x01, 0xca, //0x00002eb6 addq %rcx, %r10 + 0x0f, 0x8e, 0x56, 0x0e, 0x00, 0x00, //0x00002eb9 jle LBB0_728 + //0x00002ebf LBB0_549 + 0x41, 0x0f, 0xb6, 0x01, //0x00002ebf movzbl (%r9), %eax + 0x3c, 0x5c, //0x00002ec3 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00002ec5 je LBB0_547 + 0x3c, 0x22, //0x00002ecb cmpb $34, %al + 0x0f, 0x84, 0x14, 0x0a, 0x00, 0x00, //0x00002ecd je LBB0_652 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002ed3 movq $-1, %rcx + 0xba, 0x01, 0x00, 0x00, 0x00, //0x00002eda movl $1, %edx + 0x49, 0x01, 0xd1, //0x00002edf addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002ee2 movq $-1, %rax + 0x49, 0x01, 0xca, //0x00002ee9 addq %rcx, %r10 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x00002eec jg LBB0_549 + 0xe9, 0x1e, 0x0e, 0x00, 0x00, //0x00002ef2 jmp LBB0_728 + //0x00002ef7 LBB0_552 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002ef7 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002efb vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002eff vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002f04 vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x00002f09 cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00002f0d jne LBB0_555 + 0x48, 0x89, 0xc1, //0x00002f13 movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x00002f16 subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfe, //0x00002f19 bsfq %rsi, %r15 + 0x49, 0x01, 0xcf, //0x00002f1d addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00002f20 jmp LBB0_555 + //0x00002f25 LBB0_554 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002f25 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002f29 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002f2d vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00002f32 vmovdqa %ymm15, %ymm12 + //0x00002f37 LBB0_555 + 0x44, 0x89, 0xd1, //0x00002f37 movl %r10d, %ecx + 0xf7, 0xd1, //0x00002f3a notl %ecx + 0x21, 0xf1, //0x00002f3c andl %esi, %ecx + 0x8d, 0x3c, 0x09, //0x00002f3e leal (%rcx,%rcx), %edi + 0x41, 0x8d, 0x1c, 0x4a, //0x00002f41 leal (%r10,%rcx,2), %ebx + 0xf7, 0xd7, //0x00002f45 notl %edi + 0x21, 0xf7, //0x00002f47 andl %esi, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002f49 andl $-1431655766, %edi + 0x45, 0x31, 0xd2, //0x00002f4f xorl %r10d, %r10d + 0x01, 0xcf, //0x00002f52 addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc2, //0x00002f54 setb %r10b + 0x01, 0xff, //0x00002f58 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00002f5a xorl $1431655765, %edi + 0x21, 0xdf, //0x00002f60 andl %ebx, %edi + 0xf7, 0xd7, //0x00002f62 notl %edi + 0x21, 0xfa, //0x00002f64 andl %edi, %edx + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00002f66 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00002f6b vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00002f70 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x23, 0xd3, 0xff, 0xff, //0x00002f75 vmovdqu $-11485(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x3b, 0xd2, 0xff, 0xff, //0x00002f7d vmovdqu $-11717(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00002f85 vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x00002f89 vmovdqa %ymm1, %ymm12 + 0x48, 0x85, 0xd2, //0x00002f8d testq %rdx, %rdx + 0x0f, 0x85, 0xf4, 0xf9, 0xff, 0xff, //0x00002f90 jne LBB0_58 + //0x00002f96 LBB0_556 + 0x48, 0x83, 0xc0, 0x20, //0x00002f96 addq $32, %rax + 0x49, 0x83, 0xc3, 0xe0, //0x00002f9a addq $-32, %r11 + //0x00002f9e LBB0_557 + 0x4d, 0x85, 0xd2, //0x00002f9e testq %r10, %r10 + 0x0f, 0x85, 0x08, 0x07, 0x00, 0x00, //0x00002fa1 jne LBB0_637 + 0x4c, 0x89, 0xf1, //0x00002fa7 movq %r14, %rcx + 0x48, 0xf7, 0xd1, //0x00002faa notq %rcx + 0x4c, 0x89, 0xff, //0x00002fad movq %r15, %rdi + 0x4d, 0x85, 0xdb, //0x00002fb0 testq %r11, %r11 + 0x0f, 0x84, 0xa1, 0x00, 0x00, 0x00, //0x00002fb3 je LBB0_569 + //0x00002fb9 LBB0_559 + 0x48, 0x83, 0xc1, 0x01, //0x00002fb9 addq $1, %rcx + //0x00002fbd LBB0_560 + 0x31, 0xf6, //0x00002fbd xorl %esi, %esi + //0x00002fbf LBB0_561 + 0x0f, 0xb6, 0x14, 0x30, //0x00002fbf movzbl (%rax,%rsi), %edx + 0x80, 0xfa, 0x22, //0x00002fc3 cmpb $34, %dl + 0x0f, 0x84, 0x87, 0x00, 0x00, 0x00, //0x00002fc6 je LBB0_568 + 0x80, 0xfa, 0x5c, //0x00002fcc cmpb $92, %dl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002fcf je LBB0_566 + 0x48, 0x83, 0xc6, 0x01, //0x00002fd5 addq $1, %rsi + 0x49, 0x39, 0xf3, //0x00002fd9 cmpq %rsi, %r11 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00002fdc jne LBB0_561 + 0xe9, 0x7b, 0x00, 0x00, 0x00, //0x00002fe2 jmp LBB0_564 + //0x00002fe7 LBB0_566 + 0x49, 0x8d, 0x53, 0xff, //0x00002fe7 leaq $-1(%r11), %rdx + 0x48, 0x39, 0xf2, //0x00002feb cmpq %rsi, %rdx + 0x0f, 0x84, 0xd7, 0x0c, 0x00, 0x00, //0x00002fee je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00002ff4 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00002ff8 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00002ffc vmovdqa %ymm13, %ymm11 + 0x48, 0x8d, 0x14, 0x01, //0x00003001 leaq (%rcx,%rax), %rdx + 0x48, 0x01, 0xf2, //0x00003005 addq %rsi, %rdx + 0x48, 0x83, 0xff, 0xff, //0x00003008 cmpq $-1, %rdi + 0x4c, 0x0f, 0x44, 0xfa, //0x0000300c cmoveq %rdx, %r15 + 0x48, 0x0f, 0x44, 0xfa, //0x00003010 cmoveq %rdx, %rdi + 0x48, 0x01, 0xf0, //0x00003014 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00003017 addq $2, %rax + 0x4c, 0x89, 0xda, //0x0000301b movq %r11, %rdx + 0x48, 0x29, 0xf2, //0x0000301e subq %rsi, %rdx + 0x48, 0x83, 0xc2, 0xfe, //0x00003021 addq $-2, %rdx + 0x49, 0x83, 0xc3, 0xfe, //0x00003025 addq $-2, %r11 + 0x49, 0x39, 0xf3, //0x00003029 cmpq %rsi, %r11 + 0x49, 0x89, 0xd3, //0x0000302c movq %rdx, %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000302f vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x64, 0xd2, 0xff, 0xff, //0x00003034 vmovdqu $-11676(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x7c, 0xd1, 0xff, 0xff, //0x0000303c vmovdqu $-11908(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00003044 vmovdqa %ymm0, %ymm11 + 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x00003048 jne LBB0_560 + 0xe9, 0x78, 0x0c, 0x00, 0x00, //0x0000304e jmp LBB0_703 + //0x00003053 LBB0_568 + 0x48, 0x01, 0xf0, //0x00003053 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003056 addq $1, %rax + //0x0000305a LBB0_569 + 0x4c, 0x29, 0xf0, //0x0000305a subq %r14, %rax + 0xe9, 0x49, 0xd7, 0xff, 0xff, //0x0000305d jmp LBB0_63 + //0x00003062 LBB0_564 + 0x80, 0xfa, 0x22, //0x00003062 cmpb $34, %dl + 0x0f, 0x85, 0x60, 0x0c, 0x00, 0x00, //0x00003065 jne LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x0000306b vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000306f vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003073 vmovdqa %ymm13, %ymm11 + 0x4c, 0x01, 0xd8, //0x00003078 addq %r11, %rax + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000307b vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x18, 0xd2, 0xff, 0xff, //0x00003080 vmovdqu $-11752(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x30, 0xd1, 0xff, 0xff, //0x00003088 vmovdqu $-11984(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00003090 vmovdqa %ymm0, %ymm11 + 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003094 jmp LBB0_569 + //0x00003099 LBB0_570 + 0x49, 0x39, 0xf2, //0x00003099 cmpq %rsi, %r10 + 0x0f, 0x84, 0x73, 0x0c, 0x00, 0x00, //0x0000309c je LBB0_728 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000030a2 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000030a6 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000030aa vmovdqa %ymm13, %ymm11 + 0x49, 0x01, 0xf1, //0x000030af addq %rsi, %r9 + 0x49, 0x83, 0xc1, 0x01, //0x000030b2 addq $1, %r9 + 0x48, 0xf7, 0xd6, //0x000030b6 notq %rsi + 0x49, 0x01, 0xf2, //0x000030b9 addq %rsi, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x000030bc movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x000030c1 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000030c5 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xce, 0xd1, 0xff, 0xff, //0x000030ca vmovdqu $-11826(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xe6, 0xd0, 0xff, 0xff, //0x000030d2 vmovdqu $-12058(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000030da vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xd2, //0x000030de testq %r10, %r10 + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x000030e1 jg LBB0_574 + 0xe9, 0x29, 0x0c, 0x00, 0x00, //0x000030e7 jmp LBB0_728 + //0x000030ec LBB0_572 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000030ec movq $-2, %rcx + 0xba, 0x02, 0x00, 0x00, 0x00, //0x000030f3 movl $2, %edx + 0x49, 0x01, 0xd1, //0x000030f8 addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000030fb movq $-1, %rax + 0x49, 0x01, 0xca, //0x00003102 addq %rcx, %r10 + 0x0f, 0x8e, 0x0a, 0x0c, 0x00, 0x00, //0x00003105 jle LBB0_728 + //0x0000310b LBB0_574 + 0x41, 0x0f, 0xb6, 0x01, //0x0000310b movzbl (%r9), %eax + 0x3c, 0x5c, //0x0000310f cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00003111 je LBB0_572 + 0x3c, 0x22, //0x00003117 cmpb $34, %al + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x00003119 je LBB0_699 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000311f movq $-1, %rcx + 0xba, 0x01, 0x00, 0x00, 0x00, //0x00003126 movl $1, %edx + 0x49, 0x01, 0xd1, //0x0000312b addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000312e movq $-1, %rax + 0x49, 0x01, 0xca, //0x00003135 addq %rcx, %r10 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x00003138 jg LBB0_574 + 0xe9, 0xd2, 0x0b, 0x00, 0x00, //0x0000313e jmp LBB0_728 + //0x00003143 LBB0_699 + 0x4d, 0x29, 0xf1, //0x00003143 subq %r14, %r9 + 0x49, 0x83, 0xc1, 0x01, //0x00003146 addq $1, %r9 + 0x4d, 0x89, 0x0f, //0x0000314a movq %r9, (%r15) + 0x4d, 0x85, 0xc0, //0x0000314d testq %r8, %r8 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00003150 movq $24(%rsp), %r10 + 0x0f, 0x8f, 0x4d, 0xe7, 0xff, 0xff, //0x00003155 jg LBB0_304 + 0xe9, 0x55, 0x0b, 0x00, 0x00, //0x0000315b jmp LBB0_700 + //0x00003160 LBB0_577 + 0xc5, 0x7d, 0x7f, 0xe2, //0x00003160 vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00003164 vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003168 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000316d vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x00003172 cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003176 jne LBB0_580 + 0x48, 0x89, 0xc1, //0x0000317c movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x0000317f subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfa, //0x00003182 bsfq %rdx, %r15 + 0x49, 0x01, 0xcf, //0x00003186 addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00003189 jmp LBB0_580 + //0x0000318e LBB0_579 + 0xc5, 0x7d, 0x7f, 0xe2, //0x0000318e vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00003192 vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003196 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000319b vmovdqa %ymm15, %ymm12 + //0x000031a0 LBB0_580 + 0x44, 0x89, 0xd9, //0x000031a0 movl %r11d, %ecx + 0xf7, 0xd1, //0x000031a3 notl %ecx + 0x21, 0xd1, //0x000031a5 andl %edx, %ecx + 0x8d, 0x34, 0x09, //0x000031a7 leal (%rcx,%rcx), %esi + 0x41, 0x8d, 0x3c, 0x4b, //0x000031aa leal (%r11,%rcx,2), %edi + 0xf7, 0xd6, //0x000031ae notl %esi + 0x21, 0xd6, //0x000031b0 andl %edx, %esi + 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x000031b2 andl $-1431655766, %esi + 0x45, 0x31, 0xdb, //0x000031b8 xorl %r11d, %r11d + 0x01, 0xce, //0x000031bb addl %ecx, %esi + 0x41, 0x0f, 0x92, 0xc3, //0x000031bd setb %r11b + 0x01, 0xf6, //0x000031c1 addl %esi, %esi + 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x000031c3 xorl $1431655765, %esi + 0x21, 0xfe, //0x000031c9 andl %edi, %esi + 0xf7, 0xd6, //0x000031cb notl %esi + 0x41, 0x21, 0xf2, //0x000031cd andl %esi, %r10d + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000031d0 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x000031d5 vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000031da vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xb9, 0xd0, 0xff, 0xff, //0x000031df vmovdqu $-12103(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xd1, 0xcf, 0xff, 0xff, //0x000031e7 vmovdqu $-12335(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x000031ef vmovdqa %ymm1, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe2, //0x000031f3 vmovdqa %ymm2, %ymm12 + 0x4d, 0x85, 0xd2, //0x000031f7 testq %r10, %r10 + 0x0f, 0x85, 0xdb, 0xf7, 0xff, 0xff, //0x000031fa jne LBB0_156 + //0x00003200 LBB0_581 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00003200 movl $64, %edx + //0x00003205 LBB0_582 + 0xc5, 0xbd, 0x64, 0xc8, //0x00003205 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00003209 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x0000320e vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00003212 vpmovmskb %ymm0, %esi + 0x0f, 0xbc, 0xfe, //0x00003216 bsfl %esi, %edi + 0x4d, 0x85, 0xd2, //0x00003219 testq %r10, %r10 + 0x0f, 0x84, 0x22, 0x00, 0x00, 0x00, //0x0000321c je LBB0_585 + 0x85, 0xf6, //0x00003222 testl %esi, %esi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00003224 movl $64, %ecx + 0x0f, 0x44, 0xf9, //0x00003229 cmovel %ecx, %edi + 0x48, 0x39, 0xfa, //0x0000322c cmpq %rdi, %rdx + 0x0f, 0x87, 0x79, 0x0c, 0x00, 0x00, //0x0000322f ja LBB0_734 + 0x4c, 0x29, 0xf0, //0x00003235 subq %r14, %rax + 0x48, 0x01, 0xd0, //0x00003238 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000323b addq $1, %rax + 0xe9, 0x67, 0xd5, 0xff, 0xff, //0x0000323f jmp LBB0_63 + //0x00003244 LBB0_585 + 0x85, 0xf6, //0x00003244 testl %esi, %esi + 0x0f, 0x85, 0x6f, 0x0c, 0x00, 0x00, //0x00003246 jne LBB0_735 + 0x48, 0x83, 0xc0, 0x20, //0x0000324c addq $32, %rax + 0x49, 0x83, 0xc5, 0xe0, //0x00003250 addq $-32, %r13 + //0x00003254 LBB0_587 + 0x4d, 0x85, 0xdb, //0x00003254 testq %r11, %r11 + 0x0f, 0x85, 0xb0, 0x04, 0x00, 0x00, //0x00003257 jne LBB0_639 + 0x4c, 0x89, 0xf9, //0x0000325d movq %r15, %rcx + 0x4c, 0x8b, 0x1c, 0x24, //0x00003260 movq (%rsp), %r11 + 0x4d, 0x85, 0xed, //0x00003264 testq %r13, %r13 + 0x0f, 0x84, 0x5e, 0x0a, 0x00, 0x00, //0x00003267 je LBB0_703 + //0x0000326d LBB0_589 + 0x0f, 0xb6, 0x10, //0x0000326d movzbl (%rax), %edx + 0x80, 0xfa, 0x22, //0x00003270 cmpb $34, %dl + 0x0f, 0x84, 0x9c, 0x00, 0x00, 0x00, //0x00003273 je LBB0_701 + 0x80, 0xfa, 0x5c, //0x00003279 cmpb $92, %dl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x0000327c je LBB0_593 + 0x80, 0xfa, 0x1f, //0x00003282 cmpb $31, %dl + 0x0f, 0x86, 0x3b, 0x0c, 0x00, 0x00, //0x00003285 jbe LBB0_736 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000328b movq $-1, %rdx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00003292 movl $1, %esi + 0x48, 0x01, 0xf0, //0x00003297 addq %rsi, %rax + 0x49, 0x01, 0xd5, //0x0000329a addq %rdx, %r13 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x0000329d jne LBB0_589 + 0xe9, 0x23, 0x0a, 0x00, 0x00, //0x000032a3 jmp LBB0_703 + //0x000032a8 LBB0_593 + 0x49, 0x83, 0xfd, 0x01, //0x000032a8 cmpq $1, %r13 + 0x0f, 0x84, 0x19, 0x0a, 0x00, 0x00, //0x000032ac je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000032b2 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000032b6 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000032ba vmovdqa %ymm13, %ymm11 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x000032bf movq $-2, %rdx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x000032c6 movl $2, %esi + 0x48, 0x83, 0xf9, 0xff, //0x000032cb cmpq $-1, %rcx + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x000032cf jne LBB0_596 + 0x49, 0x89, 0xc7, //0x000032d5 movq %rax, %r15 + 0x4d, 0x29, 0xf7, //0x000032d8 subq %r14, %r15 + 0x4c, 0x89, 0xf9, //0x000032db movq %r15, %rcx + //0x000032de LBB0_596 + 0x4c, 0x8b, 0x1c, 0x24, //0x000032de movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000032e2 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000032e7 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xac, 0xcf, 0xff, 0xff, //0x000032ec vmovdqu $-12372(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xc4, 0xce, 0xff, 0xff, //0x000032f4 vmovdqu $-12604(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000032fc vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x00003300 vmovdqa %ymm1, %ymm12 + 0x48, 0x01, 0xf0, //0x00003304 addq %rsi, %rax + 0x49, 0x01, 0xd5, //0x00003307 addq %rdx, %r13 + 0x0f, 0x85, 0x5d, 0xff, 0xff, 0xff, //0x0000330a jne LBB0_589 + 0xe9, 0xb6, 0x09, 0x00, 0x00, //0x00003310 jmp LBB0_703 + //0x00003315 LBB0_701 + 0x4c, 0x29, 0xf0, //0x00003315 subq %r14, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003318 addq $1, %rax + 0x48, 0x85, 0xc0, //0x0000331c testq %rax, %rax + 0x0f, 0x89, 0x67, 0xd0, 0xff, 0xff, //0x0000331f jns LBB0_237 + 0xe9, 0x97, 0x09, 0x00, 0x00, //0x00003325 jmp LBB0_702 + //0x0000332a LBB0_597 + 0xc5, 0x7d, 0x7f, 0xe1, //0x0000332a vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000332e vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003332 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003337 vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x0000333c cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003340 jne LBB0_600 + 0x48, 0x89, 0xc1, //0x00003346 movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x00003349 subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfe, //0x0000334c bsfq %rsi, %r15 + 0x49, 0x01, 0xcf, //0x00003350 addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00003353 jmp LBB0_600 + //0x00003358 LBB0_599 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003358 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000335c vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003360 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003365 vmovdqa %ymm15, %ymm12 + //0x0000336a LBB0_600 + 0x44, 0x89, 0xd1, //0x0000336a movl %r10d, %ecx + 0xf7, 0xd1, //0x0000336d notl %ecx + 0x21, 0xf1, //0x0000336f andl %esi, %ecx + 0x8d, 0x3c, 0x09, //0x00003371 leal (%rcx,%rcx), %edi + 0x41, 0x8d, 0x1c, 0x4a, //0x00003374 leal (%r10,%rcx,2), %ebx + 0xf7, 0xd7, //0x00003378 notl %edi + 0x21, 0xf7, //0x0000337a andl %esi, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000337c andl $-1431655766, %edi + 0x45, 0x31, 0xd2, //0x00003382 xorl %r10d, %r10d + 0x01, 0xcf, //0x00003385 addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc2, //0x00003387 setb %r10b + 0x01, 0xff, //0x0000338b addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x0000338d xorl $1431655765, %edi + 0x21, 0xdf, //0x00003393 andl %ebx, %edi + 0xf7, 0xd7, //0x00003395 notl %edi + 0x21, 0xfa, //0x00003397 andl %edi, %edx + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003399 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x0000339e vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x000033a3 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xf0, 0xce, 0xff, 0xff, //0x000033a8 vmovdqu $-12560(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x08, 0xce, 0xff, 0xff, //0x000033b0 vmovdqu $-12792(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000033b8 vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x000033bc vmovdqa %ymm1, %ymm12 + 0x48, 0x85, 0xd2, //0x000033c0 testq %rdx, %rdx + 0x0f, 0x85, 0xce, 0xf6, 0xff, 0xff, //0x000033c3 jne LBB0_93 + //0x000033c9 LBB0_601 + 0x48, 0x83, 0xc0, 0x20, //0x000033c9 addq $32, %rax + 0x49, 0x83, 0xc3, 0xe0, //0x000033cd addq $-32, %r11 + //0x000033d1 LBB0_602 + 0x4d, 0x85, 0xd2, //0x000033d1 testq %r10, %r10 + 0x0f, 0x85, 0x97, 0x03, 0x00, 0x00, //0x000033d4 jne LBB0_641 + 0x4c, 0x89, 0xf2, //0x000033da movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x000033dd notq %rdx + 0x4c, 0x89, 0xfe, //0x000033e0 movq %r15, %rsi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000033e3 movq $24(%rsp), %r10 + 0x4d, 0x85, 0xdb, //0x000033e8 testq %r11, %r11 + 0x0f, 0x84, 0xa6, 0x00, 0x00, 0x00, //0x000033eb je LBB0_614 + //0x000033f1 LBB0_604 + 0x48, 0x83, 0xc2, 0x01, //0x000033f1 addq $1, %rdx + //0x000033f5 LBB0_605 + 0x31, 0xff, //0x000033f5 xorl %edi, %edi + //0x000033f7 LBB0_606 + 0x0f, 0xb6, 0x1c, 0x38, //0x000033f7 movzbl (%rax,%rdi), %ebx + 0x80, 0xfb, 0x22, //0x000033fb cmpb $34, %bl + 0x0f, 0x84, 0x8c, 0x00, 0x00, 0x00, //0x000033fe je LBB0_613 + 0x80, 0xfb, 0x5c, //0x00003404 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003407 je LBB0_611 + 0x48, 0x83, 0xc7, 0x01, //0x0000340d addq $1, %rdi + 0x49, 0x39, 0xfb, //0x00003411 cmpq %rdi, %r11 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003414 jne LBB0_606 + 0xe9, 0x80, 0x00, 0x00, 0x00, //0x0000341a jmp LBB0_609 + //0x0000341f LBB0_611 + 0x49, 0x8d, 0x4b, 0xff, //0x0000341f leaq $-1(%r11), %rcx + 0x48, 0x39, 0xf9, //0x00003423 cmpq %rdi, %rcx + 0x0f, 0x84, 0x9f, 0x08, 0x00, 0x00, //0x00003426 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x0000342c vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00003430 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003434 vmovdqa %ymm13, %ymm11 + 0x48, 0x8d, 0x0c, 0x02, //0x00003439 leaq (%rdx,%rax), %rcx + 0x48, 0x01, 0xf9, //0x0000343d addq %rdi, %rcx + 0x48, 0x83, 0xfe, 0xff, //0x00003440 cmpq $-1, %rsi + 0x4c, 0x0f, 0x44, 0xf9, //0x00003444 cmoveq %rcx, %r15 + 0x48, 0x0f, 0x44, 0xf1, //0x00003448 cmoveq %rcx, %rsi + 0x48, 0x01, 0xf8, //0x0000344c addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x0000344f addq $2, %rax + 0x4c, 0x89, 0xd9, //0x00003453 movq %r11, %rcx + 0x48, 0x29, 0xf9, //0x00003456 subq %rdi, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x00003459 addq $-2, %rcx + 0x49, 0x83, 0xc3, 0xfe, //0x0000345d addq $-2, %r11 + 0x49, 0x39, 0xfb, //0x00003461 cmpq %rdi, %r11 + 0x49, 0x89, 0xcb, //0x00003464 movq %rcx, %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00003467 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000346c vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x27, 0xce, 0xff, 0xff, //0x00003471 vmovdqu $-12761(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x3f, 0xcd, 0xff, 0xff, //0x00003479 vmovdqu $-12993(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00003481 vmovdqa %ymm0, %ymm11 + 0x0f, 0x85, 0x6a, 0xff, 0xff, 0xff, //0x00003485 jne LBB0_605 + 0xe9, 0x3b, 0x08, 0x00, 0x00, //0x0000348b jmp LBB0_703 + //0x00003490 LBB0_613 + 0x48, 0x01, 0xf8, //0x00003490 addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003493 addq $1, %rax + //0x00003497 LBB0_614 + 0x4c, 0x29, 0xf0, //0x00003497 subq %r14, %rax + 0xe9, 0x20, 0x01, 0x00, 0x00, //0x0000349a jmp LBB0_623 + //0x0000349f LBB0_609 + 0x80, 0xfb, 0x22, //0x0000349f cmpb $34, %bl + 0x0f, 0x85, 0x23, 0x08, 0x00, 0x00, //0x000034a2 jne LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000034a8 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000034ac vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000034b0 vmovdqa %ymm13, %ymm11 + 0x4c, 0x01, 0xd8, //0x000034b5 addq %r11, %rax + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000034b8 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000034bd vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xd6, 0xcd, 0xff, 0xff, //0x000034c2 vmovdqu $-12842(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xee, 0xcc, 0xff, 0xff, //0x000034ca vmovdqu $-13074(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000034d2 vmovdqa %ymm0, %ymm11 + 0xe9, 0xbc, 0xff, 0xff, 0xff, //0x000034d6 jmp LBB0_614 + //0x000034db LBB0_615 + 0xc5, 0x7d, 0x7f, 0xe2, //0x000034db vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x000034df vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000034e3 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x000034e8 vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x000034ed cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x000034f1 jne LBB0_618 + 0x48, 0x89, 0xc1, //0x000034f7 movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x000034fa subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfa, //0x000034fd bsfq %rdx, %r15 + 0x49, 0x01, 0xcf, //0x00003501 addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00003504 jmp LBB0_618 + //0x00003509 LBB0_617 + 0xc5, 0x7d, 0x7f, 0xe2, //0x00003509 vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x0000350d vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003511 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003516 vmovdqa %ymm15, %ymm12 + //0x0000351b LBB0_618 + 0x44, 0x89, 0xd9, //0x0000351b movl %r11d, %ecx + 0xf7, 0xd1, //0x0000351e notl %ecx + 0x21, 0xd1, //0x00003520 andl %edx, %ecx + 0x8d, 0x34, 0x09, //0x00003522 leal (%rcx,%rcx), %esi + 0x41, 0x8d, 0x3c, 0x4b, //0x00003525 leal (%r11,%rcx,2), %edi + 0xf7, 0xd6, //0x00003529 notl %esi + 0x21, 0xd6, //0x0000352b andl %edx, %esi + 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000352d andl $-1431655766, %esi + 0x45, 0x31, 0xdb, //0x00003533 xorl %r11d, %r11d + 0x01, 0xce, //0x00003536 addl %ecx, %esi + 0x41, 0x0f, 0x92, 0xc3, //0x00003538 setb %r11b + 0x01, 0xf6, //0x0000353c addl %esi, %esi + 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x0000353e xorl $1431655765, %esi + 0x21, 0xfe, //0x00003544 andl %edi, %esi + 0xf7, 0xd6, //0x00003546 notl %esi + 0x41, 0x21, 0xf2, //0x00003548 andl %esi, %r10d + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000354b vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003550 vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003555 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x3e, 0xcd, 0xff, 0xff, //0x0000355a vmovdqu $-12994(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x56, 0xcc, 0xff, 0xff, //0x00003562 vmovdqu $-13226(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x0000356a vmovdqa %ymm1, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe2, //0x0000356e vmovdqa %ymm2, %ymm12 + 0x4d, 0x85, 0xd2, //0x00003572 testq %r10, %r10 + 0x0f, 0x85, 0x6d, 0xf5, 0xff, 0xff, //0x00003575 jne LBB0_176 + //0x0000357b LBB0_619 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000357b movl $64, %edx + //0x00003580 LBB0_620 + 0xc5, 0xbd, 0x64, 0xc8, //0x00003580 vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00003584 vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00003589 vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x0000358d vpmovmskb %ymm0, %esi + 0x0f, 0xbc, 0xfe, //0x00003591 bsfl %esi, %edi + 0x4d, 0x85, 0xd2, //0x00003594 testq %r10, %r10 + 0x0f, 0x84, 0x2b, 0x00, 0x00, 0x00, //0x00003597 je LBB0_624 + 0x85, 0xf6, //0x0000359d testl %esi, %esi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x0000359f movl $64, %ecx + 0x0f, 0x44, 0xf9, //0x000035a4 cmovel %ecx, %edi + 0x48, 0x39, 0xfa, //0x000035a7 cmpq %rdi, %rdx + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000035aa movq $24(%rsp), %r10 + 0x0f, 0x87, 0xf9, 0x08, 0x00, 0x00, //0x000035af ja LBB0_734 + 0x4c, 0x29, 0xf0, //0x000035b5 subq %r14, %rax + 0x48, 0x01, 0xd0, //0x000035b8 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000035bb addq $1, %rax + //0x000035bf LBB0_623 + 0x4c, 0x8b, 0x1c, 0x24, //0x000035bf movq (%rsp), %r11 + 0xe9, 0xc6, 0xe2, 0xff, 0xff, //0x000035c3 jmp LBB0_302 + //0x000035c8 LBB0_624 + 0x85, 0xf6, //0x000035c8 testl %esi, %esi + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000035ca movq $24(%rsp), %r10 + 0x0f, 0x85, 0xe6, 0x08, 0x00, 0x00, //0x000035cf jne LBB0_735 + 0x48, 0x83, 0xc0, 0x20, //0x000035d5 addq $32, %rax + 0x49, 0x83, 0xc5, 0xe0, //0x000035d9 addq $-32, %r13 + //0x000035dd LBB0_626 + 0x4d, 0x85, 0xdb, //0x000035dd testq %r11, %r11 + 0x0f, 0x85, 0xee, 0x01, 0x00, 0x00, //0x000035e0 jne LBB0_643 + 0x4c, 0x89, 0xfa, //0x000035e6 movq %r15, %rdx + 0x4c, 0x8b, 0x1c, 0x24, //0x000035e9 movq (%rsp), %r11 + 0x4d, 0x85, 0xed, //0x000035ed testq %r13, %r13 + 0x0f, 0x84, 0xd5, 0x06, 0x00, 0x00, //0x000035f0 je LBB0_703 + //0x000035f6 LBB0_628 + 0x0f, 0xb6, 0x18, //0x000035f6 movzbl (%rax), %ebx + 0x80, 0xfb, 0x22, //0x000035f9 cmpb $34, %bl + 0x0f, 0x84, 0xa1, 0x00, 0x00, 0x00, //0x000035fc je LBB0_636 + 0x80, 0xfb, 0x5c, //0x00003602 cmpb $92, %bl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00003605 je LBB0_632 + 0x80, 0xfb, 0x1f, //0x0000360b cmpb $31, %bl + 0x0f, 0x86, 0xb2, 0x08, 0x00, 0x00, //0x0000360e jbe LBB0_736 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003614 movq $-1, %rsi + 0xbf, 0x01, 0x00, 0x00, 0x00, //0x0000361b movl $1, %edi + 0x48, 0x01, 0xf8, //0x00003620 addq %rdi, %rax + 0x49, 0x01, 0xf5, //0x00003623 addq %rsi, %r13 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00003626 jne LBB0_628 + 0xe9, 0x9a, 0x06, 0x00, 0x00, //0x0000362c jmp LBB0_703 + //0x00003631 LBB0_632 + 0x49, 0x83, 0xfd, 0x01, //0x00003631 cmpq $1, %r13 + 0x0f, 0x84, 0x90, 0x06, 0x00, 0x00, //0x00003635 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x0000363b vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000363f vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003643 vmovdqa %ymm13, %ymm11 + 0x48, 0xc7, 0xc6, 0xfe, 0xff, 0xff, 0xff, //0x00003648 movq $-2, %rsi + 0xbf, 0x02, 0x00, 0x00, 0x00, //0x0000364f movl $2, %edi + 0x48, 0x83, 0xfa, 0xff, //0x00003654 cmpq $-1, %rdx + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00003658 jne LBB0_635 + 0x49, 0x89, 0xc7, //0x0000365e movq %rax, %r15 + 0x4d, 0x29, 0xf7, //0x00003661 subq %r14, %r15 + 0x4c, 0x89, 0xfa, //0x00003664 movq %r15, %rdx + //0x00003667 LBB0_635 + 0x4c, 0x8b, 0x1c, 0x24, //0x00003667 movq (%rsp), %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x0000366b movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003670 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003675 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x1e, 0xcc, 0xff, 0xff, //0x0000367a vmovdqu $-13282(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x36, 0xcb, 0xff, 0xff, //0x00003682 vmovdqu $-13514(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x0000368a vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x0000368e vmovdqa %ymm1, %ymm12 + 0x48, 0x01, 0xf8, //0x00003692 addq %rdi, %rax + 0x49, 0x01, 0xf5, //0x00003695 addq %rsi, %r13 + 0x0f, 0x85, 0x58, 0xff, 0xff, 0xff, //0x00003698 jne LBB0_628 + 0xe9, 0x28, 0x06, 0x00, 0x00, //0x0000369e jmp LBB0_703 + //0x000036a3 LBB0_636 + 0x4c, 0x29, 0xf0, //0x000036a3 subq %r14, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000036a6 addq $1, %rax + 0xe9, 0xdf, 0xe1, 0xff, 0xff, //0x000036aa jmp LBB0_302 + //0x000036af LBB0_637 + 0x4d, 0x85, 0xdb, //0x000036af testq %r11, %r11 + 0x0f, 0x84, 0x13, 0x06, 0x00, 0x00, //0x000036b2 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000036b8 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000036bc vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000036c0 vmovdqa %ymm13, %ymm11 + 0x4c, 0x89, 0xf1, //0x000036c5 movq %r14, %rcx + 0x48, 0xf7, 0xd1, //0x000036c8 notq %rcx + 0x48, 0x8d, 0x14, 0x08, //0x000036cb leaq (%rax,%rcx), %rdx + 0x49, 0x83, 0xff, 0xff, //0x000036cf cmpq $-1, %r15 + 0x4c, 0x89, 0xff, //0x000036d3 movq %r15, %rdi + 0x4c, 0x0f, 0x44, 0xfa, //0x000036d6 cmoveq %rdx, %r15 + 0x48, 0x0f, 0x44, 0xfa, //0x000036da cmoveq %rdx, %rdi + 0x48, 0x83, 0xc0, 0x01, //0x000036de addq $1, %rax + 0x49, 0x83, 0xc3, 0xff, //0x000036e2 addq $-1, %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000036e6 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xad, 0xcb, 0xff, 0xff, //0x000036eb vmovdqu $-13395(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xc5, 0xca, 0xff, 0xff, //0x000036f3 vmovdqu $-13627(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000036fb vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xdb, //0x000036ff testq %r11, %r11 + 0x0f, 0x85, 0xb1, 0xf8, 0xff, 0xff, //0x00003702 jne LBB0_559 + 0xe9, 0x4d, 0xf9, 0xff, 0xff, //0x00003708 jmp LBB0_569 + //0x0000370d LBB0_639 + 0x4d, 0x85, 0xed, //0x0000370d testq %r13, %r13 + 0x0f, 0x84, 0xb5, 0x05, 0x00, 0x00, //0x00003710 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003716 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000371a vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000371e vmovdqa %ymm13, %ymm11 + 0x4c, 0x89, 0xf1, //0x00003723 movq %r14, %rcx + 0x48, 0xf7, 0xd1, //0x00003726 notq %rcx + 0x48, 0x01, 0xc1, //0x00003729 addq %rax, %rcx + 0x49, 0x83, 0xff, 0xff, //0x0000372c cmpq $-1, %r15 + 0x4c, 0x89, 0xfa, //0x00003730 movq %r15, %rdx + 0x48, 0x0f, 0x44, 0xd1, //0x00003733 cmoveq %rcx, %rdx + 0x49, 0x0f, 0x45, 0xcf, //0x00003737 cmovneq %r15, %rcx + 0x48, 0x83, 0xc0, 0x01, //0x0000373b addq $1, %rax + 0x49, 0x83, 0xc5, 0xff, //0x0000373f addq $-1, %r13 + 0x49, 0x89, 0xd7, //0x00003743 movq %rdx, %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00003746 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x0000374a vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x49, 0xcb, 0xff, 0xff, //0x0000374f vmovdqu $-13495(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x61, 0xca, 0xff, 0xff, //0x00003757 vmovdqu $-13727(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x0000375f vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xed, //0x00003763 testq %r13, %r13 + 0x0f, 0x85, 0x01, 0xfb, 0xff, 0xff, //0x00003766 jne LBB0_589 + 0xe9, 0x5a, 0x05, 0x00, 0x00, //0x0000376c jmp LBB0_703 + //0x00003771 LBB0_641 + 0x4d, 0x85, 0xdb, //0x00003771 testq %r11, %r11 + 0x0f, 0x84, 0x51, 0x05, 0x00, 0x00, //0x00003774 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x0000377a vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000377e vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003782 vmovdqa %ymm13, %ymm11 + 0x4c, 0x89, 0xf2, //0x00003787 movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x0000378a notq %rdx + 0x48, 0x8d, 0x0c, 0x10, //0x0000378d leaq (%rax,%rdx), %rcx + 0x49, 0x83, 0xff, 0xff, //0x00003791 cmpq $-1, %r15 + 0x4c, 0x89, 0xfe, //0x00003795 movq %r15, %rsi + 0x4c, 0x0f, 0x44, 0xf9, //0x00003798 cmoveq %rcx, %r15 + 0x48, 0x0f, 0x44, 0xf1, //0x0000379c cmoveq %rcx, %rsi + 0x48, 0x83, 0xc0, 0x01, //0x000037a0 addq $1, %rax + 0x49, 0x83, 0xc3, 0xff, //0x000037a4 addq $-1, %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x000037a8 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x000037ad vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0xe6, 0xca, 0xff, 0xff, //0x000037b2 vmovdqu $-13594(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xfe, 0xc9, 0xff, 0xff, //0x000037ba vmovdqu $-13826(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x000037c2 vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xdb, //0x000037c6 testq %r11, %r11 + 0x0f, 0x85, 0x22, 0xfc, 0xff, 0xff, //0x000037c9 jne LBB0_604 + 0xe9, 0xc3, 0xfc, 0xff, 0xff, //0x000037cf jmp LBB0_614 + //0x000037d4 LBB0_643 + 0x4d, 0x85, 0xed, //0x000037d4 testq %r13, %r13 + 0x0f, 0x84, 0xee, 0x04, 0x00, 0x00, //0x000037d7 je LBB0_703 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000037dd vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000037e1 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000037e5 vmovdqa %ymm13, %ymm11 + 0x4c, 0x89, 0xf2, //0x000037ea movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x000037ed notq %rdx + 0x48, 0x01, 0xc2, //0x000037f0 addq %rax, %rdx + 0x49, 0x83, 0xff, 0xff, //0x000037f3 cmpq $-1, %r15 + 0x4c, 0x89, 0xf9, //0x000037f7 movq %r15, %rcx + 0x48, 0x0f, 0x44, 0xca, //0x000037fa cmoveq %rdx, %rcx + 0x49, 0x0f, 0x45, 0xd7, //0x000037fe cmovneq %r15, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x00003802 addq $1, %rax + 0x49, 0x83, 0xc5, 0xff, //0x00003806 addq $-1, %r13 + 0x49, 0x89, 0xcf, //0x0000380a movq %rcx, %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x0000380d movq (%rsp), %r11 + 0x4c, 0x8b, 0x54, 0x24, 0x18, //0x00003811 movq $24(%rsp), %r10 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003816 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x7d, 0xca, 0xff, 0xff, //0x0000381b vmovdqu $-13699(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x95, 0xc9, 0xff, 0xff, //0x00003823 vmovdqu $-13931(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x0000382b vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xed, //0x0000382f testq %r13, %r13 + 0x0f, 0x85, 0xbe, 0xfd, 0xff, 0xff, //0x00003832 jne LBB0_628 + 0xe9, 0x8e, 0x04, 0x00, 0x00, //0x00003838 jmp LBB0_703 + //0x0000383d LBB0_645 + 0x49, 0x39, 0xf2, //0x0000383d cmpq %rsi, %r10 + 0x0f, 0x84, 0xcf, 0x04, 0x00, 0x00, //0x00003840 je LBB0_728 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003846 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000384a vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x0000384e vmovdqa %ymm13, %ymm11 + 0x49, 0x01, 0xf1, //0x00003853 addq %rsi, %r9 + 0x49, 0x83, 0xc1, 0x01, //0x00003856 addq $1, %r9 + 0x48, 0xf7, 0xd6, //0x0000385a notq %rsi + 0x49, 0x01, 0xf2, //0x0000385d addq %rsi, %r10 + 0x4c, 0x8b, 0x7c, 0x24, 0x08, //0x00003860 movq $8(%rsp), %r15 + 0x4c, 0x8b, 0x1c, 0x24, //0x00003865 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003869 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0xfe, 0x6f, 0x25, 0x2a, 0xca, 0xff, 0xff, //0x0000386e vmovdqu $-13782(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x42, 0xc9, 0xff, 0xff, //0x00003876 vmovdqu $-14014(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x0000387e vmovdqa %ymm0, %ymm11 + 0x4d, 0x85, 0xd2, //0x00003882 testq %r10, %r10 + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00003885 jg LBB0_649 + 0xe9, 0x85, 0x04, 0x00, 0x00, //0x0000388b jmp LBB0_728 + //0x00003890 LBB0_647 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003890 movq $-2, %rcx + 0xba, 0x02, 0x00, 0x00, 0x00, //0x00003897 movl $2, %edx + 0x49, 0x01, 0xd1, //0x0000389c addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000389f movq $-1, %rax + 0x49, 0x01, 0xca, //0x000038a6 addq %rcx, %r10 + 0x0f, 0x8e, 0x66, 0x04, 0x00, 0x00, //0x000038a9 jle LBB0_728 + //0x000038af LBB0_649 + 0x41, 0x0f, 0xb6, 0x01, //0x000038af movzbl (%r9), %eax + 0x3c, 0x5c, //0x000038b3 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x000038b5 je LBB0_647 + 0x3c, 0x22, //0x000038bb cmpb $34, %al + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x000038bd je LBB0_652 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000038c3 movq $-1, %rcx + 0xba, 0x01, 0x00, 0x00, 0x00, //0x000038ca movl $1, %edx + 0x49, 0x01, 0xd1, //0x000038cf addq %rdx, %r9 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000038d2 movq $-1, %rax + 0x49, 0x01, 0xca, //0x000038d9 addq %rcx, %r10 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x000038dc jg LBB0_649 + 0xe9, 0x2e, 0x04, 0x00, 0x00, //0x000038e2 jmp LBB0_728 + //0x000038e7 LBB0_652 + 0x4d, 0x29, 0xf1, //0x000038e7 subq %r14, %r9 + 0x49, 0x83, 0xc1, 0x01, //0x000038ea addq $1, %r9 + 0xe9, 0xbf, 0xd1, 0xff, 0xff, //0x000038ee jmp LBB0_105 + //0x000038f3 LBB0_653 + 0xc5, 0x7d, 0x7f, 0xe1, //0x000038f3 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x000038f7 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x000038fb vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003900 vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x00003905 cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003909 jne LBB0_656 + 0x48, 0x89, 0xc1, //0x0000390f movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x00003912 subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfe, //0x00003915 bsfq %rsi, %r15 + 0x49, 0x01, 0xcf, //0x00003919 addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x0000391c jmp LBB0_656 + //0x00003921 LBB0_655 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003921 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00003925 vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003929 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x0000392e vmovdqa %ymm15, %ymm12 + //0x00003933 LBB0_656 + 0x44, 0x89, 0xd1, //0x00003933 movl %r10d, %ecx + 0xf7, 0xd1, //0x00003936 notl %ecx + 0x21, 0xf1, //0x00003938 andl %esi, %ecx + 0x8d, 0x3c, 0x09, //0x0000393a leal (%rcx,%rcx), %edi + 0x41, 0x8d, 0x1c, 0x4a, //0x0000393d leal (%r10,%rcx,2), %ebx + 0xf7, 0xd7, //0x00003941 notl %edi + 0x21, 0xf7, //0x00003943 andl %esi, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003945 andl $-1431655766, %edi + 0x45, 0x31, 0xd2, //0x0000394b xorl %r10d, %r10d + 0x01, 0xcf, //0x0000394e addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc2, //0x00003950 setb %r10b + 0x01, 0xff, //0x00003954 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00003956 xorl $1431655765, %edi + 0x21, 0xdf, //0x0000395c andl %ebx, %edi + 0xf7, 0xd7, //0x0000395e notl %edi + 0x21, 0xfa, //0x00003960 andl %edi, %edx + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003962 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003967 vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x0000396c vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0x27, 0xc9, 0xff, 0xff, //0x00003971 vmovdqu $-14041(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0x3f, 0xc8, 0xff, 0xff, //0x00003979 vmovdqu $-14273(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00003981 vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x00003985 vmovdqa %ymm1, %ymm12 + 0xc5, 0x7d, 0x7f, 0xea, //0x00003989 vmovdqa %ymm13, %ymm2 + 0x48, 0x85, 0xd2, //0x0000398d testq %rdx, %rdx + 0x0f, 0x85, 0x95, 0xf2, 0xff, 0xff, //0x00003990 jne LBB0_251 + //0x00003996 LBB0_657 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003996 vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x0000399a vmovdqa %ymm11, %ymm0 + 0xc5, 0x7d, 0x6f, 0xda, //0x0000399e vmovdqa %ymm2, %ymm11 + 0x48, 0x83, 0xc0, 0x20, //0x000039a2 addq $32, %rax + 0x49, 0x83, 0xc3, 0xe0, //0x000039a6 addq $-32, %r11 + //0x000039aa LBB0_658 + 0x4d, 0x85, 0xd2, //0x000039aa testq %r10, %r10 + 0x0f, 0x85, 0x75, 0x02, 0x00, 0x00, //0x000039ad jne LBB0_693 + 0x4c, 0x89, 0xf2, //0x000039b3 movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x000039b6 notq %rdx + 0x4c, 0x89, 0xfe, //0x000039b9 movq %r15, %rsi + 0x4d, 0x85, 0xdb, //0x000039bc testq %r11, %r11 + 0x0f, 0x84, 0x7b, 0x00, 0x00, 0x00, //0x000039bf je LBB0_670 + //0x000039c5 LBB0_660 + 0x48, 0x83, 0xc2, 0x01, //0x000039c5 addq $1, %rdx + //0x000039c9 LBB0_661 + 0x31, 0xff, //0x000039c9 xorl %edi, %edi + //0x000039cb LBB0_662 + 0x0f, 0xb6, 0x1c, 0x38, //0x000039cb movzbl (%rax,%rdi), %ebx + 0x80, 0xfb, 0x22, //0x000039cf cmpb $34, %bl + 0x0f, 0x84, 0x61, 0x00, 0x00, 0x00, //0x000039d2 je LBB0_669 + 0x80, 0xfb, 0x5c, //0x000039d8 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000039db je LBB0_667 + 0x48, 0x83, 0xc7, 0x01, //0x000039e1 addq $1, %rdi + 0x49, 0x39, 0xfb, //0x000039e5 cmpq %rdi, %r11 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000039e8 jne LBB0_662 + 0xe9, 0x62, 0x00, 0x00, 0x00, //0x000039ee jmp LBB0_665 + //0x000039f3 LBB0_667 + 0x49, 0x8d, 0x4b, 0xff, //0x000039f3 leaq $-1(%r11), %rcx + 0x48, 0x39, 0xf9, //0x000039f7 cmpq %rdi, %rcx + 0x0f, 0x84, 0xcb, 0x02, 0x00, 0x00, //0x000039fa je LBB0_703 + 0x48, 0x8d, 0x0c, 0x02, //0x00003a00 leaq (%rdx,%rax), %rcx + 0x48, 0x01, 0xf9, //0x00003a04 addq %rdi, %rcx + 0x48, 0x83, 0xfe, 0xff, //0x00003a07 cmpq $-1, %rsi + 0x4c, 0x0f, 0x44, 0xf9, //0x00003a0b cmoveq %rcx, %r15 + 0x48, 0x0f, 0x44, 0xf1, //0x00003a0f cmoveq %rcx, %rsi + 0x48, 0x01, 0xf8, //0x00003a13 addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00003a16 addq $2, %rax + 0x4c, 0x89, 0xd9, //0x00003a1a movq %r11, %rcx + 0x48, 0x29, 0xf9, //0x00003a1d subq %rdi, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x00003a20 addq $-2, %rcx + 0x49, 0x83, 0xc3, 0xfe, //0x00003a24 addq $-2, %r11 + 0x49, 0x39, 0xfb, //0x00003a28 cmpq %rdi, %r11 + 0x49, 0x89, 0xcb, //0x00003a2b movq %rcx, %r11 + 0x0f, 0x85, 0x95, 0xff, 0xff, 0xff, //0x00003a2e jne LBB0_661 + 0xe9, 0x92, 0x02, 0x00, 0x00, //0x00003a34 jmp LBB0_703 + //0x00003a39 LBB0_669 + 0x48, 0x01, 0xf8, //0x00003a39 addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003a3c addq $1, %rax + //0x00003a40 LBB0_670 + 0x4c, 0x29, 0xf0, //0x00003a40 subq %r14, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x00003a43 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003a47 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7d, 0x7f, 0xda, //0x00003a4c vmovdqa %ymm11, %ymm2 + 0xe9, 0xb6, 0x01, 0x00, 0x00, //0x00003a50 jmp LBB0_692 + //0x00003a55 LBB0_665 + 0x80, 0xfb, 0x22, //0x00003a55 cmpb $34, %bl + 0x0f, 0x85, 0x6d, 0x02, 0x00, 0x00, //0x00003a58 jne LBB0_703 + 0x4c, 0x01, 0xd8, //0x00003a5e addq %r11, %rax + 0xe9, 0xda, 0xff, 0xff, 0xff, //0x00003a61 jmp LBB0_670 + //0x00003a66 LBB0_671 + 0xc5, 0x7d, 0x7f, 0xe2, //0x00003a66 vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00003a6a vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003a6e vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003a73 vmovdqa %ymm15, %ymm12 + 0x49, 0x83, 0xff, 0xff, //0x00003a78 cmpq $-1, %r15 + 0x0f, 0x85, 0x24, 0x00, 0x00, 0x00, //0x00003a7c jne LBB0_674 + 0x48, 0x89, 0xc1, //0x00003a82 movq %rax, %rcx + 0x4c, 0x29, 0xf1, //0x00003a85 subq %r14, %rcx + 0x4c, 0x0f, 0xbc, 0xfa, //0x00003a88 bsfq %rdx, %r15 + 0x49, 0x01, 0xcf, //0x00003a8c addq %rcx, %r15 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00003a8f jmp LBB0_674 + //0x00003a94 LBB0_673 + 0xc5, 0x7d, 0x7f, 0xe2, //0x00003a94 vmovdqa %ymm12, %ymm2 + 0xc5, 0x7d, 0x7f, 0xd9, //0x00003a98 vmovdqa %ymm11, %ymm1 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003a9c vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003aa1 vmovdqa %ymm15, %ymm12 + //0x00003aa6 LBB0_674 + 0x44, 0x89, 0xd9, //0x00003aa6 movl %r11d, %ecx + 0xf7, 0xd1, //0x00003aa9 notl %ecx + 0x21, 0xd1, //0x00003aab andl %edx, %ecx + 0x8d, 0x34, 0x09, //0x00003aad leal (%rcx,%rcx), %esi + 0x41, 0x8d, 0x3c, 0x4b, //0x00003ab0 leal (%r11,%rcx,2), %edi + 0xf7, 0xd6, //0x00003ab4 notl %esi + 0x21, 0xd6, //0x00003ab6 andl %edx, %esi + 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003ab8 andl $-1431655766, %esi + 0x45, 0x31, 0xdb, //0x00003abe xorl %r11d, %r11d + 0x01, 0xce, //0x00003ac1 addl %ecx, %esi + 0x41, 0x0f, 0x92, 0xc3, //0x00003ac3 setb %r11b + 0x01, 0xf6, //0x00003ac7 addl %esi, %esi + 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x00003ac9 xorl $1431655765, %esi + 0x21, 0xfe, //0x00003acf andl %edi, %esi + 0xf7, 0xd6, //0x00003ad1 notl %esi + 0x41, 0x21, 0xf2, //0x00003ad3 andl %esi, %r10d + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003ad6 vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003adb vmovdqa %ymm12, %ymm15 + 0xc4, 0x41, 0x7d, 0x6f, 0xeb, //0x00003ae0 vmovdqa %ymm11, %ymm13 + 0xc5, 0xfe, 0x6f, 0x25, 0xb3, 0xc7, 0xff, 0xff, //0x00003ae5 vmovdqu $-14413(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xcb, 0xc6, 0xff, 0xff, //0x00003aed vmovdqu $-14645(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd9, //0x00003af5 vmovdqa %ymm1, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe2, //0x00003af9 vmovdqa %ymm2, %ymm12 + 0x4d, 0x85, 0xd2, //0x00003afd testq %r10, %r10 + 0x0f, 0x85, 0x7a, 0xf1, 0xff, 0xff, //0x00003b00 jne LBB0_409 + //0x00003b06 LBB0_675 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00003b06 movl $64, %edx + //0x00003b0b LBB0_676 + 0xc5, 0xbd, 0x64, 0xc8, //0x00003b0b vpcmpgtb %ymm0, %ymm8, %ymm1 + 0xc4, 0xc1, 0x7d, 0x64, 0xc1, //0x00003b0f vpcmpgtb %ymm9, %ymm0, %ymm0 + 0xc5, 0xf5, 0xdb, 0xc0, //0x00003b14 vpand %ymm0, %ymm1, %ymm0 + 0xc5, 0xfd, 0xd7, 0xf0, //0x00003b18 vpmovmskb %ymm0, %esi + 0x0f, 0xbc, 0xfe, //0x00003b1c bsfl %esi, %edi + 0x4d, 0x85, 0xd2, //0x00003b1f testq %r10, %r10 + 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x00003b22 je LBB0_679 + 0x85, 0xf6, //0x00003b28 testl %esi, %esi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00003b2a movl $64, %ecx + 0x0f, 0x44, 0xf9, //0x00003b2f cmovel %ecx, %edi + 0x48, 0x39, 0xfa, //0x00003b32 cmpq %rdi, %rdx + 0x0f, 0x87, 0x73, 0x03, 0x00, 0x00, //0x00003b35 ja LBB0_734 + 0xc5, 0x7d, 0x7f, 0xea, //0x00003b3b vmovdqa %ymm13, %ymm2 + 0x4c, 0x29, 0xf0, //0x00003b3f subq %r14, %rax + 0x48, 0x01, 0xd0, //0x00003b42 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003b45 addq $1, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x00003b49 movq (%rsp), %r11 + 0xe9, 0x8a, 0xeb, 0xff, 0xff, //0x00003b4d jmp LBB0_473 + //0x00003b52 LBB0_679 + 0x85, 0xf6, //0x00003b52 testl %esi, %esi + 0x0f, 0x85, 0x61, 0x03, 0x00, 0x00, //0x00003b54 jne LBB0_735 + 0xc5, 0x7d, 0x7f, 0xe1, //0x00003b5a vmovdqa %ymm12, %ymm1 + 0xc5, 0x7d, 0x7f, 0xd8, //0x00003b5e vmovdqa %ymm11, %ymm0 + 0xc4, 0x41, 0x7d, 0x6f, 0xdd, //0x00003b62 vmovdqa %ymm13, %ymm11 + 0xc4, 0x41, 0x7d, 0x6f, 0xe7, //0x00003b67 vmovdqa %ymm15, %ymm12 + 0x48, 0x83, 0xc0, 0x20, //0x00003b6c addq $32, %rax + 0x49, 0x83, 0xc5, 0xe0, //0x00003b70 addq $-32, %r13 + //0x00003b74 LBB0_681 + 0x4d, 0x85, 0xdb, //0x00003b74 testq %r11, %r11 + 0x0f, 0x85, 0xe3, 0x00, 0x00, 0x00, //0x00003b77 jne LBB0_695 + 0x4c, 0x89, 0xfa, //0x00003b7d movq %r15, %rdx + 0x4d, 0x85, 0xed, //0x00003b80 testq %r13, %r13 + 0x0f, 0x84, 0x42, 0x01, 0x00, 0x00, //0x00003b83 je LBB0_703 + //0x00003b89 LBB0_683 + 0x0f, 0xb6, 0x18, //0x00003b89 movzbl (%rax), %ebx + 0x80, 0xfb, 0x22, //0x00003b8c cmpb $34, %bl + 0x0f, 0x84, 0x5d, 0x00, 0x00, 0x00, //0x00003b8f je LBB0_691 + 0x80, 0xfb, 0x5c, //0x00003b95 cmpb $92, %bl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00003b98 je LBB0_688 + 0x80, 0xfb, 0x1f, //0x00003b9e cmpb $31, %bl + 0x0f, 0x86, 0x1f, 0x03, 0x00, 0x00, //0x00003ba1 jbe LBB0_736 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003ba7 movq $-1, %rsi + 0xbf, 0x01, 0x00, 0x00, 0x00, //0x00003bae movl $1, %edi + //0x00003bb3 LBB0_687 + 0x48, 0x01, 0xf8, //0x00003bb3 addq %rdi, %rax + 0x49, 0x01, 0xf5, //0x00003bb6 addq %rsi, %r13 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00003bb9 jne LBB0_683 + 0xe9, 0x07, 0x01, 0x00, 0x00, //0x00003bbf jmp LBB0_703 + //0x00003bc4 LBB0_688 + 0x49, 0x83, 0xfd, 0x01, //0x00003bc4 cmpq $1, %r13 + 0x0f, 0x84, 0xfd, 0x00, 0x00, 0x00, //0x00003bc8 je LBB0_703 + 0x48, 0xc7, 0xc6, 0xfe, 0xff, 0xff, 0xff, //0x00003bce movq $-2, %rsi + 0xbf, 0x02, 0x00, 0x00, 0x00, //0x00003bd5 movl $2, %edi + 0x48, 0x83, 0xfa, 0xff, //0x00003bda cmpq $-1, %rdx + 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00003bde jne LBB0_687 + 0x49, 0x89, 0xc7, //0x00003be4 movq %rax, %r15 + 0x4d, 0x29, 0xf7, //0x00003be7 subq %r14, %r15 + 0x4c, 0x89, 0xfa, //0x00003bea movq %r15, %rdx + 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003bed jmp LBB0_687 + //0x00003bf2 LBB0_691 + 0x4c, 0x29, 0xf0, //0x00003bf2 subq %r14, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003bf5 addq $1, %rax + 0x4c, 0x8b, 0x1c, 0x24, //0x00003bf9 movq (%rsp), %r11 + 0xc4, 0x41, 0x35, 0x76, 0xc9, //0x00003bfd vpcmpeqd %ymm9, %ymm9, %ymm9 + 0xc5, 0x7d, 0x7f, 0xda, //0x00003c02 vmovdqa %ymm11, %ymm2 + 0xc4, 0x41, 0x7d, 0x6f, 0xfc, //0x00003c06 vmovdqa %ymm12, %ymm15 + //0x00003c0b LBB0_692 + 0xc5, 0xfe, 0x6f, 0x25, 0x8d, 0xc6, 0xff, 0xff, //0x00003c0b vmovdqu $-14707(%rip), %ymm4 /* LCPI0_19+0(%rip) */ + 0xc5, 0xfe, 0x6f, 0x1d, 0xa5, 0xc5, 0xff, 0xff, //0x00003c13 vmovdqu $-14939(%rip), %ymm3 /* LCPI0_9+0(%rip) */ + 0xc5, 0x7d, 0x6f, 0xd8, //0x00003c1b vmovdqa %ymm0, %ymm11 + 0xc5, 0x7d, 0x6f, 0xe1, //0x00003c1f vmovdqa %ymm1, %ymm12 + 0xe9, 0xb4, 0xea, 0xff, 0xff, //0x00003c23 jmp LBB0_473 + //0x00003c28 LBB0_693 + 0x4d, 0x85, 0xdb, //0x00003c28 testq %r11, %r11 + 0x0f, 0x84, 0x9a, 0x00, 0x00, 0x00, //0x00003c2b je LBB0_703 + 0x4c, 0x89, 0xf2, //0x00003c31 movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x00003c34 notq %rdx + 0x48, 0x8d, 0x0c, 0x10, //0x00003c37 leaq (%rax,%rdx), %rcx + 0x49, 0x83, 0xff, 0xff, //0x00003c3b cmpq $-1, %r15 + 0x4c, 0x89, 0xfe, //0x00003c3f movq %r15, %rsi + 0x4c, 0x0f, 0x44, 0xf9, //0x00003c42 cmoveq %rcx, %r15 + 0x48, 0x0f, 0x44, 0xf1, //0x00003c46 cmoveq %rcx, %rsi + 0x48, 0x83, 0xc0, 0x01, //0x00003c4a addq $1, %rax + 0x49, 0x83, 0xc3, 0xff, //0x00003c4e addq $-1, %r11 + 0x4d, 0x85, 0xdb, //0x00003c52 testq %r11, %r11 + 0x0f, 0x85, 0x6a, 0xfd, 0xff, 0xff, //0x00003c55 jne LBB0_660 + 0xe9, 0xe0, 0xfd, 0xff, 0xff, //0x00003c5b jmp LBB0_670 + //0x00003c60 LBB0_695 + 0x4d, 0x85, 0xed, //0x00003c60 testq %r13, %r13 + 0x0f, 0x84, 0x62, 0x00, 0x00, 0x00, //0x00003c63 je LBB0_703 + 0x4c, 0x89, 0xf2, //0x00003c69 movq %r14, %rdx + 0x48, 0xf7, 0xd2, //0x00003c6c notq %rdx + 0x48, 0x01, 0xc2, //0x00003c6f addq %rax, %rdx + 0x49, 0x83, 0xff, 0xff, //0x00003c72 cmpq $-1, %r15 + 0x4c, 0x89, 0xf9, //0x00003c76 movq %r15, %rcx + 0x48, 0x0f, 0x44, 0xca, //0x00003c79 cmoveq %rdx, %rcx + 0x49, 0x0f, 0x45, 0xd7, //0x00003c7d cmovneq %r15, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x00003c81 addq $1, %rax + 0x49, 0x83, 0xc5, 0xff, //0x00003c85 addq $-1, %r13 + 0x49, 0x89, 0xcf, //0x00003c89 movq %rcx, %r15 + 0x4d, 0x85, 0xed, //0x00003c8c testq %r13, %r13 + 0x0f, 0x85, 0xf4, 0xfe, 0xff, 0xff, //0x00003c8f jne LBB0_683 + 0xe9, 0x31, 0x00, 0x00, 0x00, //0x00003c95 jmp LBB0_703 + //0x00003c9a LBB0_697 + 0x4d, 0x89, 0x27, //0x00003c9a movq %r12, (%r15) + //0x00003c9d LBB0_698 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003c9d movq $-1, %rax + 0xe9, 0x6c, 0x00, 0x00, 0x00, //0x00003ca4 jmp LBB0_728 + //0x00003ca9 LBB0_724 + 0x48, 0xc7, 0xc0, 0xf9, 0xff, 0xff, 0xff, //0x00003ca9 movq $-7, %rax + 0xe9, 0x60, 0x00, 0x00, 0x00, //0x00003cb0 jmp LBB0_728 + //0x00003cb5 LBB0_700 + 0x49, 0x83, 0xc0, 0xff, //0x00003cb5 addq $-1, %r8 + 0x4c, 0x89, 0xc0, //0x00003cb9 movq %r8, %rax + 0xe9, 0x54, 0x00, 0x00, 0x00, //0x00003cbc jmp LBB0_728 + //0x00003cc1 LBB0_702 + 0x48, 0x83, 0xf8, 0xff, //0x00003cc1 cmpq $-1, %rax + 0x0f, 0x85, 0x87, 0x01, 0x00, 0x00, //0x00003cc5 jne LBB0_704 + //0x00003ccb LBB0_703 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003ccb movq $-1, %rax + 0x4d, 0x89, 0xc7, //0x00003cd2 movq %r8, %r15 + 0xe9, 0x78, 0x01, 0x00, 0x00, //0x00003cd5 jmp LBB0_704 + //0x00003cda LBB0_475 + 0x49, 0x83, 0xc1, 0xff, //0x00003cda addq $-1, %r9 + 0x4c, 0x89, 0xc8, //0x00003cde movq %r9, %rax + 0xe9, 0x2f, 0x00, 0x00, 0x00, //0x00003ce1 jmp LBB0_728 + //0x00003ce6 LBB0_705 + 0x49, 0x83, 0xc5, 0xff, //0x00003ce6 addq $-1, %r13 + 0x4c, 0x89, 0xe8, //0x00003cea movq %r13, %rax + 0xe9, 0x23, 0x00, 0x00, 0x00, //0x00003ced jmp LBB0_728 + //0x00003cf2 LBB0_706 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003cf2 movq $-1, %rcx + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00003cf9 jmp LBB0_708 //0x00003cfe LBB0_707 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003cfe movq $-1, %rcx - 0x4d, 0x89, 0xfb, //0x00003d05 movq %r15, %r11 - 0xe9, 0x49, 0x00, 0x00, 0x00, //0x00003d08 jmp LBB0_716 - //0x00003d0d LBB0_708 - 0x4c, 0x89, 0xc9, //0x00003d0d movq %r9, %rcx - //0x00003d10 LBB0_709 - 0x48, 0xf7, 0xd1, //0x00003d10 notq %rcx - 0x49, 0x01, 0x4d, 0x00, //0x00003d13 addq %rcx, (%r13) - 0xe9, 0x71, 0xfe, 0xff, 0xff, //0x00003d17 jmp LBB0_710 - //0x00003d1c LBB0_717 - 0x4d, 0x89, 0xc8, //0x00003d1c movq %r9, %r8 - 0xe9, 0x2c, 0xfe, 0xff, 0xff, //0x00003d1f jmp LBB0_681 - //0x00003d24 LBB0_712 - 0x49, 0x83, 0xfa, 0xff, //0x00003d24 cmpq $-1, %r10 - 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00003d28 je LBB0_714 - 0x4d, 0x89, 0xd3, //0x00003d2e movq %r10, %r11 - 0xe9, 0x19, 0x00, 0x00, 0x00, //0x00003d31 jmp LBB0_715 - //0x00003d36 LBB0_209 - 0x4c, 0x01, 0xd2, //0x00003d36 addq %r10, %rdx - 0x49, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00003d39 movq $-2, %r10 - 0x49, 0x89, 0xd7, //0x00003d40 movq %rdx, %r15 - 0xe9, 0x84, 0xfe, 0xff, 0xff, //0x00003d43 jmp LBB0_703 - //0x00003d48 LBB0_714 - 0x4c, 0x0f, 0xbc, 0xde, //0x00003d48 bsfq %rsi, %r11 - 0x49, 0x01, 0xcb, //0x00003d4c addq %rcx, %r11 - //0x00003d4f LBB0_715 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003d4f movq $-2, %rcx - //0x00003d56 LBB0_716 - 0x48, 0x89, 0x0c, 0x24, //0x00003d56 movq %rcx, (%rsp) - 0x4d, 0x89, 0x5d, 0x00, //0x00003d5a movq %r11, (%r13) - 0xe9, 0x32, 0xfe, 0xff, 0xff, //0x00003d5e jmp LBB0_711 - //0x00003d63 LBB0_718 - 0x4d, 0x89, 0xcf, //0x00003d63 movq %r9, %r15 - 0xe9, 0x93, 0xff, 0xff, 0xff, //0x00003d66 jmp LBB0_707 - //0x00003d6b LBB0_719 - 0x48, 0x01, 0xca, //0x00003d6b addq %rcx, %rdx - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003d6e movq $-2, %rcx - 0x49, 0x89, 0xd3, //0x00003d75 movq %rdx, %r11 - 0xe9, 0xd9, 0xff, 0xff, 0xff, //0x00003d78 jmp LBB0_716 - //0x00003d7d LBB0_720 - 0x48, 0x8b, 0x44, 0x24, 0x10, //0x00003d7d movq $16(%rsp), %rax - 0x48, 0x8b, 0x40, 0x08, //0x00003d82 movq $8(%rax), %rax - 0x49, 0x89, 0x45, 0x00, //0x00003d86 movq %rax, (%r13) - 0xe9, 0x06, 0xfe, 0xff, 0xff, //0x00003d8a jmp LBB0_711 - //0x00003d8f LBB0_721 - 0x89, 0xf8, //0x00003d8f movl %edi, %eax - 0x4d, 0x29, 0xf2, //0x00003d91 subq %r14, %r10 - 0x49, 0x01, 0xc2, //0x00003d94 addq %rax, %r10 - 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00003d97 jmp LBB0_724 - //0x00003d9c LBB0_722 - 0x4d, 0x29, 0xf2, //0x00003d9c subq %r14, %r10 - 0x41, 0x89, 0xff, //0x00003d9f movl %edi, %r15d - 0xe9, 0x1b, 0xfe, 0xff, 0xff, //0x00003da2 jmp LBB0_701 - //0x00003da7 LBB0_723 - 0x4d, 0x29, 0xf2, //0x00003da7 subq %r14, %r10 - //0x00003daa LBB0_724 - 0x4d, 0x89, 0xd7, //0x00003daa movq %r10, %r15 - 0xe9, 0x13, 0xfe, 0xff, 0xff, //0x00003dad jmp LBB0_702 - //0x00003db2 LBB0_725 - 0x89, 0xf8, //0x00003db2 movl %edi, %eax - 0x4c, 0x29, 0xf1, //0x00003db4 subq %r14, %rcx - 0x48, 0x01, 0xc1, //0x00003db7 addq %rax, %rcx - 0x49, 0x89, 0xcb, //0x00003dba movq %rcx, %r11 - 0xe9, 0x8d, 0xff, 0xff, 0xff, //0x00003dbd jmp LBB0_715 - //0x00003dc2 LBB0_726 - 0x4c, 0x29, 0xf3, //0x00003dc2 subq %r14, %rbx - 0x41, 0x89, 0xfb, //0x00003dc5 movl %edi, %r11d - 0x49, 0x01, 0xdb, //0x00003dc8 addq %rbx, %r11 - 0xe9, 0x7f, 0xff, 0xff, 0xff, //0x00003dcb jmp LBB0_715 - //0x00003dd0 LBB0_727 - 0x48, 0x89, 0xc8, //0x00003dd0 movq %rcx, %rax - 0x4c, 0x29, 0xf0, //0x00003dd3 subq %r14, %rax - 0x49, 0x89, 0xc3, //0x00003dd6 movq %rax, %r11 - 0xe9, 0x71, 0xff, 0xff, 0xff, //0x00003dd9 jmp LBB0_715 - 0x90, 0x90, //0x00003dde .p2align 2, 0x90 + 0x4c, 0x89, 0xd1, //0x00003cfe movq %r10, %rcx + //0x00003d01 LBB0_708 + 0x49, 0x8b, 0x07, //0x00003d01 movq (%r15), %rax + 0x48, 0x29, 0xc8, //0x00003d04 subq %rcx, %rax + 0x48, 0x83, 0xc0, 0xfe, //0x00003d07 addq $-2, %rax + 0x49, 0x89, 0x07, //0x00003d0b movq %rax, (%r15) + //0x00003d0e LBB0_727 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d0e movq $-2, %rax + //0x00003d15 LBB0_728 + 0x48, 0x8d, 0x65, 0xd8, //0x00003d15 leaq $-40(%rbp), %rsp + 0x5b, //0x00003d19 popq %rbx + 0x41, 0x5c, //0x00003d1a popq %r12 + 0x41, 0x5d, //0x00003d1c popq %r13 + 0x41, 0x5e, //0x00003d1e popq %r14 + 0x41, 0x5f, //0x00003d20 popq %r15 + 0x5d, //0x00003d22 popq %rbp + 0xc5, 0xf8, 0x77, //0x00003d23 vzeroupper + 0xc3, //0x00003d26 retq + //0x00003d27 LBB0_711 + 0x49, 0x89, 0x17, //0x00003d27 movq %rdx, (%r15) + 0xe9, 0xe6, 0xff, 0xff, 0xff, //0x00003d2a jmp LBB0_728 + //0x00003d2f LBB0_709 + 0x49, 0x83, 0xff, 0xff, //0x00003d2f cmpq $-1, %r15 + 0x0f, 0x84, 0x0b, 0x01, 0x00, 0x00, //0x00003d33 je LBB0_730 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d39 movq $-2, %rax + 0xe9, 0x0d, 0x01, 0x00, 0x00, //0x00003d40 jmp LBB0_704 + //0x00003d45 LBB0_712 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d45 movq $-2, %rax + 0x80, 0xfa, 0x61, //0x00003d4c cmpb $97, %dl + 0x0f, 0x85, 0xc0, 0xff, 0xff, 0xff, //0x00003d4f jne LBB0_728 + 0x48, 0x8d, 0x51, 0x01, //0x00003d55 leaq $1(%rcx), %rdx + 0x49, 0x89, 0x17, //0x00003d59 movq %rdx, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x6c, //0x00003d5c cmpb $108, $1(%r14,%rcx) + 0x0f, 0x85, 0xad, 0xff, 0xff, 0xff, //0x00003d62 jne LBB0_728 + 0x48, 0x8d, 0x51, 0x02, //0x00003d68 leaq $2(%rcx), %rdx + 0x49, 0x89, 0x17, //0x00003d6c movq %rdx, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x73, //0x00003d6f cmpb $115, $2(%r14,%rcx) + 0x0f, 0x85, 0x9a, 0xff, 0xff, 0xff, //0x00003d75 jne LBB0_728 + 0x48, 0x8d, 0x51, 0x03, //0x00003d7b leaq $3(%rcx), %rdx + 0x49, 0x89, 0x17, //0x00003d7f movq %rdx, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x03, 0x65, //0x00003d82 cmpb $101, $3(%r14,%rcx) + 0x0f, 0x85, 0x87, 0xff, 0xff, 0xff, //0x00003d88 jne LBB0_728 + 0x48, 0x83, 0xc1, 0x04, //0x00003d8e addq $4, %rcx + 0x49, 0x89, 0x0f, //0x00003d92 movq %rcx, (%r15) + 0xe9, 0x7b, 0xff, 0xff, 0xff, //0x00003d95 jmp LBB0_728 + //0x00003d9a LBB0_270 + 0x49, 0x89, 0x07, //0x00003d9a movq %rax, (%r15) + 0x41, 0x80, 0x3c, 0x06, 0x6e, //0x00003d9d cmpb $110, (%r14,%rax) + 0x0f, 0x85, 0x66, 0xff, 0xff, 0xff, //0x00003da2 jne LBB0_727 + 0x49, 0x89, 0x0f, //0x00003da8 movq %rcx, (%r15) + 0x41, 0x80, 0x3c, 0x0e, 0x75, //0x00003dab cmpb $117, (%r14,%rcx) + 0x0f, 0x85, 0x58, 0xff, 0xff, 0xff, //0x00003db0 jne LBB0_727 + 0x48, 0x8d, 0x41, 0x01, //0x00003db6 leaq $1(%rcx), %rax + 0x49, 0x89, 0x07, //0x00003dba movq %rax, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x6c, //0x00003dbd cmpb $108, $1(%r14,%rcx) + 0x0f, 0x85, 0x45, 0xff, 0xff, 0xff, //0x00003dc3 jne LBB0_727 + 0x48, 0x8d, 0x41, 0x02, //0x00003dc9 leaq $2(%rcx), %rax + 0x49, 0x89, 0x07, //0x00003dcd movq %rax, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x6c, //0x00003dd0 cmpb $108, $2(%r14,%rcx) + 0x0f, 0x84, 0x47, 0x00, 0x00, 0x00, //0x00003dd6 je LBB0_721 + 0xe9, 0x2d, 0xff, 0xff, 0xff, //0x00003ddc jmp LBB0_727 + //0x00003de1 LBB0_717 + 0x49, 0x89, 0x07, //0x00003de1 movq %rax, (%r15) + 0x41, 0x80, 0x3c, 0x06, 0x74, //0x00003de4 cmpb $116, (%r14,%rax) + 0x0f, 0x85, 0x1f, 0xff, 0xff, 0xff, //0x00003de9 jne LBB0_727 + 0x49, 0x89, 0x0f, //0x00003def movq %rcx, (%r15) + 0x41, 0x80, 0x3c, 0x0e, 0x72, //0x00003df2 cmpb $114, (%r14,%rcx) + 0x0f, 0x85, 0x11, 0xff, 0xff, 0xff, //0x00003df7 jne LBB0_727 + 0x48, 0x8d, 0x41, 0x01, //0x00003dfd leaq $1(%rcx), %rax + 0x49, 0x89, 0x07, //0x00003e01 movq %rax, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x01, 0x75, //0x00003e04 cmpb $117, $1(%r14,%rcx) + 0x0f, 0x85, 0xfe, 0xfe, 0xff, 0xff, //0x00003e0a jne LBB0_727 + 0x48, 0x8d, 0x41, 0x02, //0x00003e10 leaq $2(%rcx), %rax + 0x49, 0x89, 0x07, //0x00003e14 movq %rax, (%r15) + 0x41, 0x80, 0x7c, 0x0e, 0x02, 0x65, //0x00003e17 cmpb $101, $2(%r14,%rcx) + 0x0f, 0x85, 0xeb, 0xfe, 0xff, 0xff, //0x00003e1d jne LBB0_727 + //0x00003e23 LBB0_721 + 0x48, 0x83, 0xc1, 0x03, //0x00003e23 addq $3, %rcx + 0x49, 0x89, 0x0f, //0x00003e27 movq %rcx, (%r15) + 0xe9, 0xdf, 0xfe, 0xff, 0xff, //0x00003e2a jmp LBB0_727 + //0x00003e2f LBB0_394 + 0x48, 0x83, 0xc0, 0xff, //0x00003e2f addq $-1, %rax + 0xe9, 0xdd, 0xfe, 0xff, 0xff, //0x00003e33 jmp LBB0_728 + //0x00003e38 LBB0_267 + 0x48, 0x83, 0xc1, 0xff, //0x00003e38 addq $-1, %rcx + 0x48, 0x89, 0xc8, //0x00003e3c movq %rcx, %rax + 0xe9, 0xd1, 0xfe, 0xff, 0xff, //0x00003e3f jmp LBB0_728 + //0x00003e44 LBB0_730 + 0x4c, 0x0f, 0xbc, 0xfe, //0x00003e44 bsfq %rsi, %r15 + //0x00003e48 LBB0_731 + 0x49, 0x01, 0xc7, //0x00003e48 addq %rax, %r15 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003e4b movq $-2, %rax + //0x00003e52 LBB0_704 + 0x48, 0x8b, 0x4c, 0x24, 0x08, //0x00003e52 movq $8(%rsp), %rcx + 0x4c, 0x89, 0x39, //0x00003e57 movq %r15, (%rcx) + 0xe9, 0xb6, 0xfe, 0xff, 0xff, //0x00003e5a jmp LBB0_728 + //0x00003e5f LBB0_723 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003e5f movq $-1, %rcx + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00003e66 jmp LBB0_726 + //0x00003e6b LBB0_725 + 0x4c, 0x89, 0xc1, //0x00003e6b movq %r8, %rcx + //0x00003e6e LBB0_726 + 0x48, 0xf7, 0xd1, //0x00003e6e notq %rcx + 0x48, 0x8b, 0x44, 0x24, 0x08, //0x00003e71 movq $8(%rsp), %rax + 0x48, 0x01, 0x08, //0x00003e76 addq %rcx, (%rax) + 0xe9, 0x90, 0xfe, 0xff, 0xff, //0x00003e79 jmp LBB0_727 + //0x00003e7e LBB0_732 + 0x4d, 0x89, 0xc8, //0x00003e7e movq %r9, %r8 + 0xe9, 0x45, 0xfe, 0xff, 0xff, //0x00003e81 jmp LBB0_703 + //0x00003e86 LBB0_162 + 0x48, 0x01, 0xc2, //0x00003e86 addq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003e89 movq $-2, %rax + 0x49, 0x89, 0xd7, //0x00003e90 movq %rdx, %r15 + 0xe9, 0xba, 0xff, 0xff, 0xff, //0x00003e93 jmp LBB0_704 + //0x00003e98 LBB0_733 + 0x48, 0x8b, 0x4c, 0x24, 0x20, //0x00003e98 movq $32(%rsp), %rcx + 0x48, 0x8b, 0x49, 0x08, //0x00003e9d movq $8(%rcx), %rcx + 0x48, 0x8b, 0x54, 0x24, 0x08, //0x00003ea1 movq $8(%rsp), %rdx + 0x48, 0x89, 0x0a, //0x00003ea6 movq %rcx, (%rdx) + 0xe9, 0x67, 0xfe, 0xff, 0xff, //0x00003ea9 jmp LBB0_728 + //0x00003eae LBB0_734 + 0x89, 0xf9, //0x00003eae movl %edi, %ecx + 0x4c, 0x29, 0xf0, //0x00003eb0 subq %r14, %rax + 0x48, 0x01, 0xc8, //0x00003eb3 addq %rcx, %rax + 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00003eb6 jmp LBB0_737 + //0x00003ebb LBB0_735 + 0x4c, 0x29, 0xf0, //0x00003ebb subq %r14, %rax + 0x41, 0x89, 0xff, //0x00003ebe movl %edi, %r15d + 0xe9, 0x82, 0xff, 0xff, 0xff, //0x00003ec1 jmp LBB0_731 + //0x00003ec6 LBB0_736 + 0x4c, 0x29, 0xf0, //0x00003ec6 subq %r14, %rax + //0x00003ec9 LBB0_737 + 0x49, 0x89, 0xc7, //0x00003ec9 movq %rax, %r15 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003ecc movq $-2, %rax + 0xe9, 0x7a, 0xff, 0xff, 0xff, //0x00003ed3 jmp LBB0_704 + //0x00003ed8 .p2align 2, 0x90 // // .set L0_0_set_38, LBB0_38-LJTI0_0 // // .set L0_0_set_42, LBB0_42-LJTI0_0 // // .set L0_0_set_44, LBB0_44-LJTI0_0 - // // .set L0_0_set_63, LBB0_63-LJTI0_0 - // // .set L0_0_set_65, LBB0_65-LJTI0_0 - // // .set L0_0_set_68, LBB0_68-LJTI0_0 - //0x00003de0 LJTI0_0 - 0xf7, 0xc7, 0xff, 0xff, //0x00003de0 .long L0_0_set_38 - 0x27, 0xc8, 0xff, 0xff, //0x00003de4 .long L0_0_set_42 - 0x52, 0xc8, 0xff, 0xff, //0x00003de8 .long L0_0_set_44 - 0x9b, 0xc9, 0xff, 0xff, //0x00003dec .long L0_0_set_63 - 0xb0, 0xc9, 0xff, 0xff, //0x00003df0 .long L0_0_set_65 - 0x1a, 0xce, 0xff, 0xff, //0x00003df4 .long L0_0_set_68 - // // .set L0_1_set_711, LBB0_711-LJTI0_1 - // // .set L0_1_set_710, LBB0_710-LJTI0_1 - // // .set L0_1_set_234, LBB0_234-LJTI0_1 - // // .set L0_1_set_253, LBB0_253-LJTI0_1 - // // .set L0_1_set_70, LBB0_70-LJTI0_1 - // // .set L0_1_set_258, LBB0_258-LJTI0_1 + // // .set L0_0_set_64, LBB0_64-LJTI0_0 + // // .set L0_0_set_66, LBB0_66-LJTI0_0 + // // .set L0_0_set_69, LBB0_69-LJTI0_0 + //0x00003ed8 LJTI0_0 + 0x45, 0xc7, 0xff, 0xff, //0x00003ed8 .long L0_0_set_38 + 0x6d, 0xc7, 0xff, 0xff, //0x00003edc .long L0_0_set_42 + 0x98, 0xc7, 0xff, 0xff, //0x00003ee0 .long L0_0_set_44 + 0xe5, 0xc8, 0xff, 0xff, //0x00003ee4 .long L0_0_set_64 + 0xfc, 0xc8, 0xff, 0xff, //0x00003ee8 .long L0_0_set_66 + 0x76, 0xc9, 0xff, 0xff, //0x00003eec .long L0_0_set_69 + // // .set L0_1_set_728, LBB0_728-LJTI0_1 + // // .set L0_1_set_727, LBB0_727-LJTI0_1 + // // .set L0_1_set_238, LBB0_238-LJTI0_1 + // // .set L0_1_set_256, LBB0_256-LJTI0_1 + // // .set L0_1_set_71, LBB0_71-LJTI0_1 // // .set L0_1_set_261, LBB0_261-LJTI0_1 - // // .set L0_1_set_265, LBB0_265-LJTI0_1 - // // .set L0_1_set_271, LBB0_271-LJTI0_1 + // // .set L0_1_set_264, LBB0_264-LJTI0_1 + // // .set L0_1_set_268, LBB0_268-LJTI0_1 // // .set L0_1_set_274, LBB0_274-LJTI0_1 - //0x00003df8 LJTI0_1 - 0x9d, 0xfd, 0xff, 0xff, //0x00003df8 .long L0_1_set_711 - 0x95, 0xfd, 0xff, 0xff, //0x00003dfc .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e00 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e04 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e08 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e0c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e10 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e14 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e18 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e1c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e20 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e24 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e28 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e2c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e30 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e34 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e38 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e3c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e40 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e44 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e48 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e4c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e50 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e54 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e58 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e5c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e60 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e64 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e68 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e6c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e70 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e74 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e78 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e7c .long L0_1_set_710 - 0x52, 0xd5, 0xff, 0xff, //0x00003e80 .long L0_1_set_234 - 0x95, 0xfd, 0xff, 0xff, //0x00003e84 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e88 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e8c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e90 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e94 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e98 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003e9c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ea0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ea4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ea8 .long L0_1_set_710 - 0x97, 0xd6, 0xff, 0xff, //0x00003eac .long L0_1_set_253 - 0x95, 0xfd, 0xff, 0xff, //0x00003eb0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003eb4 .long L0_1_set_710 - 0xcb, 0xc9, 0xff, 0xff, //0x00003eb8 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ebc .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ec0 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ec4 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ec8 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ecc .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ed0 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ed4 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003ed8 .long L0_1_set_70 - 0xcb, 0xc9, 0xff, 0xff, //0x00003edc .long L0_1_set_70 - 0x95, 0xfd, 0xff, 0xff, //0x00003ee0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ee4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ee8 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003eec .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ef0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ef4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003ef8 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003efc .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f00 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f04 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f08 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f0c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f10 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f14 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f18 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f1c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f20 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f24 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f28 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f2c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f30 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f34 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f38 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f3c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f40 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f44 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f48 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f4c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f50 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f54 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f58 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f5c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f60 .long L0_1_set_710 - 0xe1, 0xd6, 0xff, 0xff, //0x00003f64 .long L0_1_set_258 - 0x95, 0xfd, 0xff, 0xff, //0x00003f68 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f6c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f70 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f74 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f78 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f7c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f80 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f84 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f88 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f8c .long L0_1_set_710 - 0x10, 0xd7, 0xff, 0xff, //0x00003f90 .long L0_1_set_261 - 0x95, 0xfd, 0xff, 0xff, //0x00003f94 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f98 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003f9c .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fa0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fa4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fa8 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fac .long L0_1_set_710 - 0x4b, 0xd7, 0xff, 0xff, //0x00003fb0 .long L0_1_set_265 - 0x95, 0xfd, 0xff, 0xff, //0x00003fb4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fb8 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fbc .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fc0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fc4 .long L0_1_set_710 - 0x78, 0xd7, 0xff, 0xff, //0x00003fc8 .long L0_1_set_271 - 0x95, 0xfd, 0xff, 0xff, //0x00003fcc .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fd0 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fd4 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fd8 .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fdc .long L0_1_set_710 - 0x95, 0xfd, 0xff, 0xff, //0x00003fe0 .long L0_1_set_710 - 0xba, 0xd7, 0xff, 0xff, //0x00003fe4 .long L0_1_set_274 - // // .set L0_2_set_445, LBB0_445-LJTI0_2 - // // .set L0_2_set_467, LBB0_467-LJTI0_2 - // // .set L0_2_set_451, LBB0_451-LJTI0_2 - // // .set L0_2_set_454, LBB0_454-LJTI0_2 - //0x00003fe8 LJTI0_2 - 0x2a, 0xe4, 0xff, 0xff, //0x00003fe8 .long L0_2_set_445 - 0x9f, 0xe5, 0xff, 0xff, //0x00003fec .long L0_2_set_467 - 0x2a, 0xe4, 0xff, 0xff, //0x00003ff0 .long L0_2_set_445 - 0x72, 0xe4, 0xff, 0xff, //0x00003ff4 .long L0_2_set_451 - 0x9f, 0xe5, 0xff, 0xff, //0x00003ff8 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00003ffc .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004000 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004004 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004008 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x0000400c .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004010 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004014 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004018 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x0000401c .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004020 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004024 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004028 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x0000402c .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004030 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004034 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004038 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x0000403c .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004040 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004044 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x00004048 .long L0_2_set_467 - 0x9f, 0xe5, 0xff, 0xff, //0x0000404c .long L0_2_set_467 - 0x95, 0xe4, 0xff, 0xff, //0x00004050 .long L0_2_set_454 - // // .set L0_3_set_121, LBB0_121-LJTI0_3 - // // .set L0_3_set_278, LBB0_278-LJTI0_3 - // // .set L0_3_set_115, LBB0_115-LJTI0_3 - // // .set L0_3_set_124, LBB0_124-LJTI0_3 - //0x00004054 LJTI0_3 - 0x77, 0xcb, 0xff, 0xff, //0x00004054 .long L0_3_set_121 - 0xa4, 0xd5, 0xff, 0xff, //0x00004058 .long L0_3_set_278 - 0x77, 0xcb, 0xff, 0xff, //0x0000405c .long L0_3_set_121 - 0x21, 0xcb, 0xff, 0xff, //0x00004060 .long L0_3_set_115 - 0xa4, 0xd5, 0xff, 0xff, //0x00004064 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004068 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x0000406c .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004070 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004074 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004078 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x0000407c .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004080 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004084 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004088 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x0000408c .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004090 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004094 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x00004098 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x0000409c .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040a0 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040a4 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040a8 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040ac .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040b0 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040b4 .long L0_3_set_278 - 0xa4, 0xd5, 0xff, 0xff, //0x000040b8 .long L0_3_set_278 - 0x93, 0xcb, 0xff, 0xff, //0x000040bc .long L0_3_set_124 - //0x000040c0 .p2align 2, 0x00 - //0x000040c0 _MASK_USE_NUMBER - 0x02, 0x00, 0x00, 0x00, //0x000040c0 .long 2 + // // .set L0_1_set_277, LBB0_277-LJTI0_1 + //0x00003ef0 LJTI0_1 + 0x25, 0xfe, 0xff, 0xff, //0x00003ef0 .long L0_1_set_728 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ef4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ef8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003efc .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f00 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f04 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f08 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f0c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f10 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f14 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f18 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f1c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f20 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f24 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f28 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f2c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f30 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f34 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f38 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f3c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f40 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f44 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f48 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f4c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f50 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f54 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f58 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f5c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f60 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f64 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f68 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f6c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f70 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f74 .long L0_1_set_727 + 0x4f, 0xd5, 0xff, 0xff, //0x00003f78 .long L0_1_set_238 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f7c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f80 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f84 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f88 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f8c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f90 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f94 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f98 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003f9c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fa0 .long L0_1_set_727 + 0x88, 0xd6, 0xff, 0xff, //0x00003fa4 .long L0_1_set_256 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fa8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fac .long L0_1_set_727 + 0x11, 0xc9, 0xff, 0xff, //0x00003fb0 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fb4 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fb8 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fbc .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fc0 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fc4 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fc8 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fcc .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fd0 .long L0_1_set_71 + 0x11, 0xc9, 0xff, 0xff, //0x00003fd4 .long L0_1_set_71 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fd8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fdc .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fe0 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fe4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fe8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003fec .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ff0 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ff4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ff8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00003ffc .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004000 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004004 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004008 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000400c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004010 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004014 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004018 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000401c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004020 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004024 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004028 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000402c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004030 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004034 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004038 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000403c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004040 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004044 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004048 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000404c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004050 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004054 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004058 .long L0_1_set_727 + 0xd0, 0xd6, 0xff, 0xff, //0x0000405c .long L0_1_set_261 + 0x1e, 0xfe, 0xff, 0xff, //0x00004060 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004064 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004068 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000406c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004070 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004074 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004078 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000407c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004080 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004084 .long L0_1_set_727 + 0x04, 0xd7, 0xff, 0xff, //0x00004088 .long L0_1_set_264 + 0x1e, 0xfe, 0xff, 0xff, //0x0000408c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004090 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004094 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x00004098 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x0000409c .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040a0 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040a4 .long L0_1_set_727 + 0x42, 0xd7, 0xff, 0xff, //0x000040a8 .long L0_1_set_268 + 0x1e, 0xfe, 0xff, 0xff, //0x000040ac .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040b0 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040b4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040b8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040bc .long L0_1_set_727 + 0x73, 0xd7, 0xff, 0xff, //0x000040c0 .long L0_1_set_274 + 0x1e, 0xfe, 0xff, 0xff, //0x000040c4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040c8 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040cc .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040d0 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040d4 .long L0_1_set_727 + 0x1e, 0xfe, 0xff, 0xff, //0x000040d8 .long L0_1_set_727 + 0xb4, 0xd7, 0xff, 0xff, //0x000040dc .long L0_1_set_277 + // // .set L0_2_set_463, LBB0_463-LJTI0_2 + // // .set L0_2_set_484, LBB0_484-LJTI0_2 + // // .set L0_2_set_465, LBB0_465-LJTI0_2 + // // .set L0_2_set_457, LBB0_457-LJTI0_2 + //0x000040e0 LJTI0_2 + 0x7a, 0xe5, 0xff, 0xff, //0x000040e0 .long L0_2_set_463 + 0xdf, 0xe6, 0xff, 0xff, //0x000040e4 .long L0_2_set_484 + 0x7a, 0xe5, 0xff, 0xff, //0x000040e8 .long L0_2_set_463 + 0x8d, 0xe5, 0xff, 0xff, //0x000040ec .long L0_2_set_465 + 0xdf, 0xe6, 0xff, 0xff, //0x000040f0 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x000040f4 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x000040f8 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x000040fc .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004100 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004104 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004108 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x0000410c .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004110 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004114 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004118 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x0000411c .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004120 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004124 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004128 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x0000412c .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004130 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004134 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004138 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x0000413c .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004140 .long L0_2_set_484 + 0xdf, 0xe6, 0xff, 0xff, //0x00004144 .long L0_2_set_484 + 0x2a, 0xe5, 0xff, 0xff, //0x00004148 .long L0_2_set_457 + // // .set L0_3_set_230, LBB0_230-LJTI0_3 + // // .set L0_3_set_281, LBB0_281-LJTI0_3 + // // .set L0_3_set_232, LBB0_232-LJTI0_3 + // // .set L0_3_set_224, LBB0_224-LJTI0_3 + //0x0000414c LJTI0_3 + 0xae, 0xd2, 0xff, 0xff, //0x0000414c .long L0_3_set_230 + 0xa2, 0xd5, 0xff, 0xff, //0x00004150 .long L0_3_set_281 + 0xae, 0xd2, 0xff, 0xff, //0x00004154 .long L0_3_set_230 + 0xc8, 0xd2, 0xff, 0xff, //0x00004158 .long L0_3_set_232 + 0xa2, 0xd5, 0xff, 0xff, //0x0000415c .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004160 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004164 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004168 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x0000416c .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004170 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004174 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004178 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x0000417c .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004180 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004184 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004188 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x0000418c .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004190 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004194 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x00004198 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x0000419c .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x000041a0 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x000041a4 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x000041a8 .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x000041ac .long L0_3_set_281 + 0xa2, 0xd5, 0xff, 0xff, //0x000041b0 .long L0_3_set_281 + 0x66, 0xd2, 0xff, 0xff, //0x000041b4 .long L0_3_set_224 + //0x000041b8 .p2align 2, 0x00 + //0x000041b8 _MASK_USE_NUMBER + 0x02, 0x00, 0x00, 0x00, //0x000041b8 .long 2 } diff --git a/vendor/github.com/bytedance/sonic/internal/native/dispatch_arm64.go b/vendor/github.com/bytedance/sonic/internal/native/dispatch_arm64.go index f1d12cb..b22e3f3 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/dispatch_arm64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/dispatch_arm64.go @@ -12,15 +12,15 @@ * 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 native import ( - `unsafe` + "unsafe" - neon `github.com/bytedance/sonic/internal/native/neon` - `github.com/bytedance/sonic/internal/native/types` + neon "github.com/bytedance/sonic/internal/native/neon" + "github.com/bytedance/sonic/internal/native/types" ) const ( diff --git a/vendor/github.com/bytedance/sonic/internal/native/neon/f32toa_arm64.s b/vendor/github.com/bytedance/sonic/internal/native/neon/f32toa_arm64.s index a9af5b0..fae37ca 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/neon/f32toa_arm64.s +++ b/vendor/github.com/bytedance/sonic/internal/native/neon/f32toa_arm64.s @@ -916,7 +916,7 @@ _Digits: WORD $0x37393639 // .ascii 4, '96979899' WORD $0x39393839 // .ascii 4, '9899' WORD $0x00000000 // .p2align 3, 0x00 -_LB_1382e0fe: // _pow10_ceil_sig_f32.g +_LB_0bc031a2: // _pow10_ceil_sig_f32.g WORD $0x4b43fcf5; WORD $0x81ceb32c // .quad -9093133594791772939 WORD $0x5e14fc32; WORD $0xa2425ff7 // .quad -6754730975062328270 WORD $0x359a3b3f; WORD $0xcad2f7f5 // .quad -3831727700400522433 diff --git a/vendor/github.com/bytedance/sonic/internal/native/neon/f64toa_arm64.s b/vendor/github.com/bytedance/sonic/internal/native/neon/f64toa_arm64.s index abd9529..5b8a234 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/neon/f64toa_arm64.s +++ b/vendor/github.com/bytedance/sonic/internal/native/neon/f64toa_arm64.s @@ -1232,7 +1232,7 @@ _Digits: WORD $0x37393639 // .ascii 4, '96979899' WORD $0x39393839 // .ascii 4, '9899' // .p2align 3, 0x00 -_LB_f1eb3d41: // _pow10_ceil_sig.g +_LB_826f2865: // _pow10_ceil_sig.g WORD $0xbebcdc4f; WORD $0xff77b1fc // .quad -38366372719436721 WORD $0x13bb0f7b; WORD $0x25e8e89c // .quad 2731688931043774331 WORD $0xf73609b1; WORD $0x9faacf3d // .quad -6941508010590729807 diff --git a/vendor/github.com/bytedance/sonic/internal/native/neon/get_by_path_arm64.s b/vendor/github.com/bytedance/sonic/internal/native/neon/get_by_path_arm64.s index 011d531..4d9aee7 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/neon/get_by_path_arm64.s +++ b/vendor/github.com/bytedance/sonic/internal/native/neon/get_by_path_arm64.s @@ -5,7 +5,7 @@ #include "funcdata.h" #include "textflag.h" -TEXT ·__get_by_path_entry__(SB), NOSPLIT, $192 +TEXT ·__get_by_path_entry__(SB), NOSPLIT, $208 NO_LOCAL_POINTERS WORD $0x100000a0 // adr x0, .+20 MOVD R0, ret(FP) @@ -60,27 +60,27 @@ lCPI0_2: WORD $0x00000000; WORD $0x00000000 // .quad 0 // .p2align 2, 0x00 _get_by_path: - WORD $0xd10343ff // sub sp, sp, #208 - WORD $0xa906effc // stp x28, x27, [sp, #104] - WORD $0xa907e7fa // stp x26, x25, [sp, #120] - WORD $0xa908dff8 // stp x24, x23, [sp, #136] - WORD $0xa909d7f6 // stp x22, x21, [sp, #152] - WORD $0xa90acff4 // stp x20, x19, [sp, #168] - WORD $0xa90bfbfd // stp fp, lr, [sp, #184] + WORD $0xd10383ff // sub sp, sp, #224 + WORD $0xa907effc // stp x28, x27, [sp, #120] + WORD $0xa908e7fa // stp x26, x25, [sp, #136] + WORD $0xa909dff8 // stp x24, x23, [sp, #152] + WORD $0xa90ad7f6 // stp x22, x21, [sp, #168] + WORD $0xa90bcff4 // stp x20, x19, [sp, #184] + WORD $0xa90cfbfd // stp fp, lr, [sp, #200] WORD $0xa93ffbfd // stp fp, lr, [sp, #-8] WORD $0xd10023fd // sub fp, sp, #8 WORD $0xf9400448 // ldr x8, [x2, #8] - WORD $0xb4013c88 // cbz x8, LBB0_499 $10128(%rip) + WORD $0xb4015708 // cbz x8, LBB0_511 $10976(%rip) WORD $0xf9400049 // ldr x9, [x2] - WORD $0x8b081130 // add x16, x9, x8, lsl #4 - WORD $0x910083e8 // add x8, sp, #32 + WORD $0x8b08113e // add lr, x9, x8, lsl #4 + WORD $0x9100c3e8 // add x8, sp, #48 WORD $0x9100810b // add x11, x8, #32 - WORD $0xf9400038 // ldr x24, [x1] + WORD $0xf9400039 // ldr x25, [x1] WORD $0x5280002c // mov w12, #1 WORD $0xd284c00d // mov x13, #9728 WORD $0xf2c0002d // movk x13, #1, lsl #32 - WORD $0x3200f3f1 // mov w17, #1431655765 - WORD $0x3201f3e4 // mov w4, #-1431655766 + WORD $0x3200f3e5 // mov w5, #1431655765 + WORD $0x3201f3e6 // mov w6, #-1431655766 WORD $0x4f01e440 // movi.16b v0, #34 Lloh0: WORD $0x10fffbc8 // adr x8, lCPI0_0 $-136(%rip) @@ -91,23 +91,30 @@ Lloh2: Lloh3: WORD $0x3dc00102 // ldr q2, [x8, lCPI0_1@PAGEOFF] $0(%rip) WORD $0x4f02e783 // movi.16b v3, #92 + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 WORD $0x4f01e584 // movi.16b v4, #44 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 WORD $0x4f06e7e5 // movi.16b v5, #223 WORD $0x4f02e7a6 // movi.16b v6, #93 - WORD $0x529fffe8 // mov w8, #65535 + WORD $0xb201e3e8 // mov x8, #-8608480567731124088 WORD $0x4f02e767 // movi.16b v7, #91 + WORD $0x529ffff5 // mov w21, #65535 WORD $0x6f00e410 // movi.2d v16, #0000000000000000 WORD $0x4f03e771 // movi.16b v17, #123 WORD $0x4f03e7b2 // movi.16b v18, #125 Lloh4: - WORD $0x10024bca // adr x10, __UnquoteTab $18808(%rip) + WORD $0x1002695b // adr x27, __UnquoteTab $19752(%rip) Lloh5: - WORD $0x9100014a // add x10, x10, __UnquoteTab@PAGEOFF $0(%rip) + WORD $0x9100037b // add x27, x27, __UnquoteTab@PAGEOFF $0(%rip) LBB0_2: - WORD $0xa9404c15 // ldp x21, x19, [x0] - WORD $0xeb13031f // cmp x24, x19 + WORD $0xa9404016 // ldp x22, x16, [x0] + WORD $0xeb10033f // cmp x25, x16 WORD $0x54000162 // b.hs LBB0_7 $44(%rip) - WORD $0x38786aa2 // ldrb w2, [x21, x24] + WORD $0x38796ac2 // ldrb w2, [x22, x25] WORD $0x7100345f // cmp w2, #13 WORD $0x54000100 // b.eq LBB0_7 $32(%rip) WORD $0x7100805f // cmp w2, #32 @@ -115,13 +122,13 @@ LBB0_2: WORD $0x51002c42 // sub w2, w2, #11 WORD $0x3100085f // cmn w2, #2 WORD $0x54000062 // b.hs LBB0_7 $12(%rip) - WORD $0xaa1803f9 // mov x25, x24 + WORD $0xaa1903f3 // mov x19, x25 WORD $0x1400003a // b LBB0_25 $232(%rip) LBB0_7: - WORD $0x91000719 // add x25, x24, #1 - WORD $0xeb13033f // cmp x25, x19 + WORD $0x91000733 // add x19, x25, #1 + WORD $0xeb10027f // cmp x19, x16 WORD $0x54000122 // b.hs LBB0_11 $36(%rip) - WORD $0x38796aa2 // ldrb w2, [x21, x25] + WORD $0x38736ac2 // ldrb w2, [x22, x19] WORD $0x7100345f // cmp w2, #13 WORD $0x540000c0 // b.eq LBB0_11 $24(%rip) WORD $0x7100805f // cmp w2, #32 @@ -130,10 +137,10 @@ LBB0_7: WORD $0x3100085f // cmn w2, #2 WORD $0x540005e3 // b.lo LBB0_25 $188(%rip) LBB0_11: - WORD $0x91000b19 // add x25, x24, #2 - WORD $0xeb13033f // cmp x25, x19 + WORD $0x91000b33 // add x19, x25, #2 + WORD $0xeb10027f // cmp x19, x16 WORD $0x54000122 // b.hs LBB0_15 $36(%rip) - WORD $0x38796aa2 // ldrb w2, [x21, x25] + WORD $0x38736ac2 // ldrb w2, [x22, x19] WORD $0x7100345f // cmp w2, #13 WORD $0x540000c0 // b.eq LBB0_15 $24(%rip) WORD $0x7100805f // cmp w2, #32 @@ -142,10 +149,10 @@ LBB0_11: WORD $0x3100085f // cmn w2, #2 WORD $0x54000483 // b.lo LBB0_25 $144(%rip) LBB0_15: - WORD $0x91000f19 // add x25, x24, #3 - WORD $0xeb13033f // cmp x25, x19 + WORD $0x91000f33 // add x19, x25, #3 + WORD $0xeb10027f // cmp x19, x16 WORD $0x54000122 // b.hs LBB0_19 $36(%rip) - WORD $0x38796aa2 // ldrb w2, [x21, x25] + WORD $0x38736ac2 // ldrb w2, [x22, x19] WORD $0x7100345f // cmp w2, #13 WORD $0x540000c0 // b.eq LBB0_19 $24(%rip) WORD $0x7100805f // cmp w2, #32 @@ -154,55 +161,55 @@ LBB0_15: WORD $0x3100085f // cmn w2, #2 WORD $0x54000323 // b.lo LBB0_25 $100(%rip) LBB0_19: - WORD $0x91001319 // add x25, x24, #4 - WORD $0xeb13033f // cmp x25, x19 + WORD $0x91001333 // add x19, x25, #4 + WORD $0xeb10027f // cmp x19, x16 WORD $0x540001e2 // b.hs LBB0_23 $60(%rip) LBB0_20: - WORD $0x38796aa2 // ldrb w2, [x21, x25] + WORD $0x38736ac2 // ldrb w2, [x22, x19] WORD $0x7100805f // cmp w2, #32 WORD $0x9ac22182 // lsl x2, x12, x2 WORD $0x8a0d0042 // and x2, x2, x13 WORD $0xfa409844 // ccmp x2, #0, #4, ls WORD $0x540001c0 // b.eq LBB0_24 $56(%rip) - WORD $0x91000739 // add x25, x25, #1 - WORD $0xeb19027f // cmp x19, x25 + WORD $0x91000673 // add x19, x19, #1 + WORD $0xeb13021f // cmp x16, x19 WORD $0x54ffff01 // b.ne LBB0_20 $-32(%rip) LBB0_22: - WORD $0x52800002 // mov w2, #0 - WORD $0xaa1803f9 // mov x25, x24 - WORD $0xf9400127 // ldr x7, [x9] - WORD $0xb50001e7 // cbnz x7, LBB0_26 $60(%rip) - WORD $0x14000ea6 // b LBB0_799 $15000(%rip) + WORD $0x52800010 // mov w16, #0 + WORD $0xaa1903f3 // mov x19, x25 + WORD $0xf9400122 // ldr x2, [x9] + WORD $0xb50001e2 // cbnz x2, LBB0_26 $60(%rip) + WORD $0x14000f73 // b LBB0_811 $15820(%rip) LBB0_23: - WORD $0x52800002 // mov w2, #0 - WORD $0xf9000039 // str x25, [x1] - WORD $0xf9400127 // ldr x7, [x9] - WORD $0xb5000147 // cbnz x7, LBB0_26 $40(%rip) - WORD $0x14000ea1 // b LBB0_799 $14980(%rip) + WORD $0x52800010 // mov w16, #0 + WORD $0xf9000033 // str x19, [x1] + WORD $0xf9400122 // ldr x2, [x9] + WORD $0xb5000142 // cbnz x2, LBB0_26 $40(%rip) + WORD $0x14000f6e // b LBB0_811 $15800(%rip) LBB0_24: - WORD $0xeb13033f // cmp x25, x19 + WORD $0xeb10027f // cmp x19, x16 WORD $0x54fffea2 // b.hs LBB0_22 $-44(%rip) LBB0_25: - WORD $0x91000727 // add x7, x25, #1 - WORD $0xf9000027 // str x7, [x1] - WORD $0x38796aa2 // ldrb w2, [x21, x25] - WORD $0xaa0703f9 // mov x25, x7 - WORD $0xf9400127 // ldr x7, [x9] - WORD $0xb401d327 // cbz x7, LBB0_799 $14948(%rip) + WORD $0x91000662 // add x2, x19, #1 + WORD $0xf9000022 // str x2, [x1] + WORD $0x38736ad0 // ldrb w16, [x22, x19] + WORD $0xaa0203f3 // mov x19, x2 + WORD $0xf9400122 // ldr x2, [x9] + WORD $0xb401ecc2 // cbz x2, LBB0_811 $15768(%rip) LBB0_26: - WORD $0x39405ce7 // ldrb w7, [x7, #23] - WORD $0x120010e7 // and w7, w7, #0x1f - WORD $0x710008ff // cmp w7, #2 - WORD $0x5400b900 // b.eq LBB0_316 $5920(%rip) - WORD $0x710060ff // cmp w7, #24 - WORD $0x5401d261 // b.ne LBB0_799 $14924(%rip) - WORD $0x7101ec5f // cmp w2, #123 - WORD $0x5401e021 // b.ne LBB0_827 $15364(%rip) + WORD $0x39405c42 // ldrb w2, [x2, #23] + WORD $0x12001042 // and w2, w2, #0x1f + WORD $0x7100085f // cmp w2, #2 + WORD $0x5400c9c0 // b.eq LBB0_325 $6456(%rip) + WORD $0x7100605f // cmp w2, #24 + WORD $0x5401ec01 // b.ne LBB0_811 $15744(%rip) + WORD $0x7101ee1f // cmp w16, #123 + WORD $0x5401fd61 // b.ne LBB0_842 $16300(%rip) LBB0_29: - WORD $0xf9400413 // ldr x19, [x0, #8] - WORD $0xeb13033f // cmp x25, x19 + WORD $0xf9400410 // ldr x16, [x0, #8] + WORD $0xeb10027f // cmp x19, x16 WORD $0x54000162 // b.hs LBB0_34 $44(%rip) - WORD $0x38796aa2 // ldrb w2, [x21, x25] + WORD $0x38736ac2 // ldrb w2, [x22, x19] WORD $0x7100345f // cmp w2, #13 WORD $0x54000100 // b.eq LBB0_34 $32(%rip) WORD $0x7100805f // cmp w2, #32 @@ -210,13 +217,13 @@ LBB0_29: WORD $0x51002c42 // sub w2, w2, #11 WORD $0x3100085f // cmn w2, #2 WORD $0x54000062 // b.hs LBB0_34 $12(%rip) - WORD $0xaa1903f7 // mov x23, x25 + WORD $0xaa1303f8 // mov x24, x19 WORD $0x14000031 // b LBB0_50 $196(%rip) LBB0_34: - WORD $0x91000737 // add x23, x25, #1 - WORD $0xeb1302ff // cmp x23, x19 + WORD $0x91000678 // add x24, x19, #1 + WORD $0xeb10031f // cmp x24, x16 WORD $0x54000122 // b.hs LBB0_38 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] + WORD $0x38786ac2 // ldrb w2, [x22, x24] WORD $0x7100345f // cmp w2, #13 WORD $0x540000c0 // b.eq LBB0_38 $24(%rip) WORD $0x7100805f // cmp w2, #32 @@ -225,10 +232,10 @@ LBB0_34: WORD $0x3100085f // cmn w2, #2 WORD $0x540004c3 // b.lo LBB0_50 $152(%rip) LBB0_38: - WORD $0x91000b37 // add x23, x25, #2 - WORD $0xeb1302ff // cmp x23, x19 + WORD $0x91000a78 // add x24, x19, #2 + WORD $0xeb10031f // cmp x24, x16 WORD $0x54000122 // b.hs LBB0_42 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] + WORD $0x38786ac2 // ldrb w2, [x22, x24] WORD $0x7100345f // cmp w2, #13 WORD $0x540000c0 // b.eq LBB0_42 $24(%rip) WORD $0x7100805f // cmp w2, #32 @@ -237,10 +244,10 @@ LBB0_38: WORD $0x3100085f // cmn w2, #2 WORD $0x54000363 // b.lo LBB0_50 $108(%rip) LBB0_42: - WORD $0x91000f37 // add x23, x25, #3 - WORD $0xeb1302ff // cmp x23, x19 + WORD $0x91000e78 // add x24, x19, #3 + WORD $0xeb10031f // cmp x24, x16 WORD $0x54000122 // b.hs LBB0_46 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] + WORD $0x38786ac2 // ldrb w2, [x22, x24] WORD $0x7100345f // cmp w2, #13 WORD $0x540000c0 // b.eq LBB0_46 $24(%rip) WORD $0x7100805f // cmp w2, #32 @@ -249,48 +256,47 @@ LBB0_42: WORD $0x3100085f // cmn w2, #2 WORD $0x54000203 // b.lo LBB0_50 $64(%rip) LBB0_46: - WORD $0x91001337 // add x23, x25, #4 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x5401cca2 // b.hs LBB0_800 $14740(%rip) + WORD $0x91001278 // add x24, x19, #4 + WORD $0xeb10031f // cmp x24, x16 + WORD $0x5401e642 // b.hs LBB0_812 $15560(%rip) LBB0_47: - WORD $0x38776aa2 // ldrb w2, [x21, x23] + WORD $0x38786ac2 // ldrb w2, [x22, x24] WORD $0x7100805f // cmp w2, #32 WORD $0x9ac22182 // lsl x2, x12, x2 WORD $0x8a0d0042 // and x2, x2, x13 WORD $0xfa409844 // ccmp x2, #0, #4, ls WORD $0x540000a0 // b.eq LBB0_49 $20(%rip) - WORD $0x910006f7 // add x23, x23, #1 - WORD $0xeb17027f // cmp x19, x23 + WORD $0x91000718 // add x24, x24, #1 + WORD $0xeb18021f // cmp x16, x24 WORD $0x54ffff01 // b.ne LBB0_47 $-32(%rip) - WORD $0x14000ec6 // b LBB0_827 $15128(%rip) + WORD $0x14000fb0 // b LBB0_842 $16064(%rip) LBB0_49: - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x5401d882 // b.hs LBB0_827 $15120(%rip) + WORD $0xeb10031f // cmp x24, x16 + WORD $0x5401f5c2 // b.hs LBB0_842 $16056(%rip) LBB0_50: - WORD $0x910006fb // add x27, x23, #1 - WORD $0xf900003b // str x27, [x1] - WORD $0x38776aa2 // ldrb w2, [x21, x23] - WORD $0x7100885f // cmp w2, #34 - WORD $0x5401d7a1 // b.ne LBB0_826 $15092(%rip) - WORD $0xa900afe3 // stp x3, x11, [sp, #8] - WORD $0x3202c7e3 // mov w3, #-1061109568 - WORD $0x5299fa0a // mov w10, #53200 - WORD $0x72b9f9ea // movk w10, #53199, lsl #16 - WORD $0xf9000ff0 // str x16, [sp, #24] - WORD $0x3203cbeb // mov w11, #-522133280 - WORD $0xf9400414 // ldr x20, [x0, #8] - WORD $0xeb1b0293 // subs x19, x20, x27 - WORD $0x54022680 // b.eq LBB0_908 $17616(%rip) - WORD $0x3200f3e4 // mov w4, #1431655765 + WORD $0xa9027beb // stp x11, lr, [sp, #32] + WORD $0x3200f3eb // mov w11, #1431655765 + WORD $0x9100071e // add lr, x24, #1 + WORD $0xf900003e // str lr, [x1] + WORD $0x38786ad0 // ldrb w16, [x22, x24] + WORD $0x71008a1f // cmp w16, #34 + WORD $0x5401f4a1 // b.ne LBB0_841 $16020(%rip) + WORD $0xf9000fe3 // str x3, [sp, #24] + WORD $0x5299fa03 // mov w3, #53200 + WORD $0x72b9f9e3 // movk w3, #53199, lsl #16 + WORD $0x3203cbea // mov w10, #-522133280 + WORD $0xf9400410 // ldr x16, [x0, #8] + WORD $0xeb1e0214 // subs x20, x16, lr + WORD $0x54024400 // b.eq LBB0_924 $18560(%rip) WORD $0xf9400522 // ldr x2, [x9, #8] - WORD $0xa9406858 // ldp x24, x26, [x2] - WORD $0x8b1b02b6 // add x22, x21, x27 - WORD $0xf101027f // cmp x19, #64 - WORD $0x54005883 // b.lo LBB0_202 $2832(%rip) - WORD $0xd2800019 // mov x25, #0 - WORD $0x9280001e // mov lr, #-1 + WORD $0xa9406c59 // ldp x25, x27, [x2] + WORD $0x8b1e02d7 // add x23, x22, lr + WORD $0xf101029f // cmp x20, #64 + WORD $0x54001b83 // b.lo LBB0_86 $880(%rip) + WORD $0xd280001a // mov x26, #0 + WORD $0x92800013 // mov x19, #-1 LBB0_54: - WORD $0x8b1b02a2 // add x2, x21, x27 + WORD $0x8b1e02c2 // add x2, x22, lr WORD $0xad405053 // ldp q19, q20, [x2] WORD $0xad415855 // ldp q21, q22, [x2, #32] WORD $0x6e208e77 // cmeq.16b v23, v19, v0 @@ -308,344 +314,682 @@ LBB0_54: WORD $0x4e211f17 // and.16b v23, v24, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602e7 // fmov w7, s23 + WORD $0x1e2602e4 // fmov w4, s23 WORD $0x4e211f37 // and.16b v23, v25, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f1 // fmov w17, s23 + WORD $0x1e2602e7 // fmov w7, s23 WORD $0x4e211f57 // and.16b v23, v26, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602e6 // fmov w6, s23 + WORD $0x1e2602ee // fmov w14, s23 WORD $0x4e211e73 // and.16b v19, v19, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 - WORD $0x1e26026e // fmov w14, s19 + WORD $0x1e26026f // fmov w15, s19 WORD $0x4e211e93 // and.16b v19, v20, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 - WORD $0x1e26026f // fmov w15, s19 + WORD $0x1e260271 // fmov w17, s19 WORD $0x4e211eb3 // and.16b v19, v21, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 - WORD $0x1e260270 // fmov w16, s19 + WORD $0x1e260266 // fmov w6, s19 WORD $0x4e211ed3 // and.16b v19, v22, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 WORD $0x1e260265 // fmov w5, s19 - WORD $0xd3607e31 // lsl x17, x17, #32 - WORD $0xaa06c231 // orr x17, x17, x6, lsl #48 - WORD $0x53103ce6 // lsl w6, w7, #16 - WORD $0xaa060231 // orr x17, x17, x6 - WORD $0xaa020222 // orr x2, x17, x2 - WORD $0xd3607e10 // lsl x16, x16, #32 - WORD $0xaa05c210 // orr x16, x16, x5, lsl #48 - WORD $0x53103def // lsl w15, w15, #16 - WORD $0xaa0f020f // orr x15, x16, x15 - WORD $0xaa0e01e7 // orr x7, x15, x14 - WORD $0xb5000107 // cbnz x7, LBB0_58 $32(%rip) - WORD $0xb5000199 // cbnz x25, LBB0_59 $48(%rip) - WORD $0xb50002c2 // cbnz x2, LBB0_60 $88(%rip) + WORD $0xd3607ce7 // lsl x7, x7, #32 + WORD $0xaa0ec0ee // orr x14, x7, x14, lsl #48 + WORD $0x53103c84 // lsl w4, w4, #16 + WORD $0xaa0401ce // orr x14, x14, x4 + WORD $0xaa0201c4 // orr x4, x14, x2 + WORD $0xd3607cce // lsl x14, x6, #32 + WORD $0xaa05c1ce // orr x14, x14, x5, lsl #48 + WORD $0x53103e31 // lsl w17, w17, #16 + WORD $0xaa1101ce // orr x14, x14, x17 + WORD $0xaa0f01c2 // orr x2, x14, x15 + WORD $0xb5000102 // cbnz x2, LBB0_58 $32(%rip) + WORD $0xb500019a // cbnz x26, LBB0_59 $48(%rip) + WORD $0xb50002c4 // cbnz x4, LBB0_60 $88(%rip) LBB0_57: - WORD $0xd1010273 // sub x19, x19, #64 - WORD $0x9101037b // add x27, x27, #64 - WORD $0xf100fe7f // cmp x19, #63 + WORD $0xd1010294 // sub x20, x20, #64 + WORD $0x910103de // add lr, lr, #64 + WORD $0xf100fe9f // cmp x20, #63 WORD $0x54fff8a8 // b.hi LBB0_54 $-236(%rip) - WORD $0x1400027c // b LBB0_198 $2544(%rip) + WORD $0x14000098 // b LBB0_85 $608(%rip) LBB0_58: - WORD $0xb10007df // cmn lr, #1 - WORD $0xdac000ee // rbit x14, x7 + WORD $0xb100067f // cmn x19, #1 + WORD $0xdac0004e // rbit x14, x2 WORD $0xdac011ce // clz x14, x14 - WORD $0x8b1b01ce // add x14, x14, x27 - WORD $0x9a8e13de // csel lr, lr, x14, ne + WORD $0x8b1e01ce // add x14, x14, lr + WORD $0x9a8e1273 // csel x19, x19, x14, ne LBB0_59: - WORD $0x8a3900ee // bic x14, x7, x25 - WORD $0xaa0e072f // orr x15, x25, x14, lsl #1 - WORD $0x8a2f00f0 // bic x16, x7, x15 - WORD $0x9201f210 // and x16, x16, #0xaaaaaaaaaaaaaaaa - WORD $0xab0e020e // adds x14, x16, x14 - WORD $0x1a9f37f9 // cset w25, hs + WORD $0x8a3a004e // bic x14, x2, x26 + WORD $0xaa0e074f // orr x15, x26, x14, lsl #1 + WORD $0x8a2f0051 // bic x17, x2, x15 + WORD $0x9201f231 // and x17, x17, #0xaaaaaaaaaaaaaaaa + WORD $0xab0e022e // adds x14, x17, x14 + WORD $0x1a9f37fa // cset w26, hs WORD $0xd37ff9ce // lsl x14, x14, #1 WORD $0xd200f1ce // eor x14, x14, #0x5555555555555555 WORD $0x8a0f01ce // and x14, x14, x15 - WORD $0x8a2e0042 // bic x2, x2, x14 - WORD $0xb4fffd82 // cbz x2, LBB0_57 $-80(%rip) + WORD $0x8a2e0084 // bic x4, x4, x14 + WORD $0xb4fffd84 // cbz x4, LBB0_57 $-80(%rip) LBB0_60: - WORD $0xdac0004e // rbit x14, x2 + WORD $0xdac0008e // rbit x14, x4 WORD $0xdac011ce // clz x14, x14 - WORD $0x8b1b01ce // add x14, x14, x27 - WORD $0x910005d9 // add x25, x14, #1 - WORD $0x3201f3e4 // mov w4, #-1431655766 + WORD $0x8b1e01ce // add x14, x14, lr + WORD $0x910005da // add x26, x14, #1 + WORD $0xa9427beb // ldp x11, lr, [sp, #32] + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0x3200f3e5 // mov w5, #1431655765 + WORD $0xb7fa383a // tbnz x26, #63, LBB0_925 $18180(%rip) LBB0_61: - WORD $0xb7fa1b59 // tbnz x25, #63, LBB0_909 $17256(%rip) - WORD $0xf9000039 // str x25, [x1] - WORD $0xb10007df // cmn lr, #1 - WORD $0x54000060 // b.eq LBB0_64 $12(%rip) - WORD $0xeb1903df // cmp lr, x25 - WORD $0x54007c0d // b.le LBB0_247 $3968(%rip) -LBB0_64: - WORD $0xcb17032e // sub x14, x25, x23 - WORD $0xd10009c2 // sub x2, x14, #2 - WORD $0xaa1a004e // orr x14, x2, x26 - WORD $0xb40003ae // cbz x14, LBB0_70 $116(%rip) - WORD $0xeb1a005f // cmp x2, x26 - WORD $0x3200f3f1 // mov w17, #1431655765 - WORD $0xa940afe3 // ldp x3, x11, [sp, #8] -Lloh6: - WORD $0x10022aca // adr x10, __UnquoteTab $17752(%rip) -Lloh7: - WORD $0x9100014a // add x10, x10, __UnquoteTab@PAGEOFF $0(%rip) - WORD $0x54000421 // b.ne LBB0_72 $132(%rip) - WORD $0xd2800002 // mov x2, #0 - WORD $0xaa1a03f3 // mov x19, x26 -LBB0_67: - WORD $0xf1004267 // subs x7, x19, #16 - WORD $0x54000463 // b.lo LBB0_73 $140(%rip) - WORD $0x3ce26ad3 // ldr q19, [x22, x2] - WORD $0x3ce26b14 // ldr q20, [x24, x2] + WORD $0xf900003a // str x26, [x1] + WORD $0xb100067f // cmn x19, #1 + WORD $0x54000060 // b.eq LBB0_63 $12(%rip) + WORD $0xeb1a027f // cmp x19, x26 + WORD $0x540014ed // b.le LBB0_92 $668(%rip) +LBB0_63: + WORD $0xcb18034e // sub x14, x26, x24 + WORD $0xd10009d0 // sub x16, x14, #2 + WORD $0xaa1b020e // orr x14, x16, x27 + WORD $0xb40003ae // cbz x14, LBB0_69 $116(%rip) + WORD $0xeb1b021f // cmp x16, x27 + WORD $0xf9400fe3 // ldr x3, [sp, #24] + WORD $0x54000481 // b.ne LBB0_71 $144(%rip) + WORD $0xd2800004 // mov x4, #0 + WORD $0xaa1b03f0 // mov x16, x27 +LBB0_66: + WORD $0xf1004202 // subs x2, x16, #16 + WORD $0x54000523 // b.lo LBB0_72 $164(%rip) + WORD $0x3ce46af3 // ldr q19, [x23, x4] + WORD $0x3ce46b34 // ldr q20, [x25, x4] WORD $0x6e338e93 // cmeq.16b v19, v20, v19 WORD $0x4e211e73 // and.16b v19, v19, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 WORD $0x1e26026e // fmov w14, s19 - WORD $0x0a2e010e // bic w14, w8, w14 - WORD $0x91004042 // add x2, x2, #16 - WORD $0xaa0703f3 // mov x19, x7 - WORD $0x34fffe8e // cbz w14, LBB0_67 $-48(%rip) - WORD $0x52800002 // mov w2, #0 - WORD $0xf9400ff0 // ldr x16, [sp, #24] - WORD $0x2a1f03f3 // mov w19, wzr - WORD $0xf9400414 // ldr x20, [x0, #8] - WORD $0xeb14033f // cmp x25, x20 - WORD $0x54000902 // b.hs LBB0_85 $288(%rip) - WORD $0x1400003d // b LBB0_81 $244(%rip) + WORD $0x0a2e02ae // bic w14, w21, w14 + WORD $0x91004084 // add x4, x4, #16 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0x34fffe8e // cbz w14, LBB0_66 $-48(%rip) + WORD $0x52800004 // mov w4, #0 + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 +Lloh6: + WORD $0x1002457b // adr x27, __UnquoteTab $18604(%rip) +Lloh7: + WORD $0x9100037b // add x27, x27, __UnquoteTab@PAGEOFF $0(%rip) + WORD $0x2a1f03f0 // mov w16, wzr + WORD $0xf9400413 // ldr x19, [x0, #8] + WORD $0xeb13035f // cmp x26, x19 + WORD $0x540009c3 // b.lo LBB0_81 $312(%rip) + WORD $0x14000175 // b LBB0_135 $1492(%rip) +LBB0_69: + WORD $0x52800030 // mov w16, #1 + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 LBB0_70: - WORD $0x52800033 // mov w19, #1 - WORD $0x3200f3f1 // mov w17, #1431655765 -LBB0_71: - WORD $0xa94143eb // ldp x11, x16, [sp, #16] - WORD $0xf94007e3 // ldr x3, [sp, #8] + WORD $0xf9400fe3 // ldr x3, [sp, #24] Lloh8: - WORD $0x1002272a // adr x10, __UnquoteTab $17636(%rip) + WORD $0x1002441b // adr x27, __UnquoteTab $18560(%rip) Lloh9: - WORD $0x9100014a // add x10, x10, __UnquoteTab@PAGEOFF $0(%rip) - WORD $0xf9400414 // ldr x20, [x0, #8] - WORD $0xeb14033f // cmp x25, x20 - WORD $0x540007c2 // b.hs LBB0_85 $248(%rip) - WORD $0x14000033 // b LBB0_81 $204(%rip) + WORD $0x9100037b // add x27, x27, __UnquoteTab@PAGEOFF $0(%rip) + WORD $0xf9400413 // ldr x19, [x0, #8] + WORD $0xeb13035f // cmp x26, x19 + WORD $0x54000883 // b.lo LBB0_81 $272(%rip) + WORD $0x1400016b // b LBB0_135 $1452(%rip) +LBB0_71: + WORD $0xd2800010 // mov x16, #0 + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 +Lloh10: + WORD $0x100242fb // adr x27, __UnquoteTab $18524(%rip) +Lloh11: + WORD $0x9100037b // add x27, x27, __UnquoteTab@PAGEOFF $0(%rip) + WORD $0xf9400413 // ldr x19, [x0, #8] + WORD $0xeb13035f // cmp x26, x19 + WORD $0x54000763 // b.lo LBB0_81 $236(%rip) + WORD $0x14000162 // b LBB0_135 $1416(%rip) LBB0_72: - WORD $0xd2800013 // mov x19, #0 - WORD $0xf9400ff0 // ldr x16, [sp, #24] - WORD $0xf9400414 // ldr x20, [x0, #8] - WORD $0xeb14033f // cmp x25, x20 - WORD $0x54000702 // b.hs LBB0_85 $224(%rip) - WORD $0x1400002d // b LBB0_81 $180(%rip) -LBB0_73: - WORD $0x0b1502ee // add w14, w23, w21 - WORD $0x0b0201ce // add w14, w14, w2 + WORD $0x0b16030e // add w14, w24, w22 + WORD $0x0b0401ce // add w14, w14, w4 WORD $0x110005ce // add w14, w14, #1 WORD $0x92402dce // and x14, x14, #0xfff - WORD $0x8b020314 // add x20, x24, x2 - WORD $0x8b0202d6 // add x22, x22, x2 + WORD $0x8b040333 // add x19, x25, x4 + WORD $0x8b0402f4 // add x20, x23, x4 WORD $0xf13fc1df // cmp x14, #4080 - WORD $0x54000268 // b.hi LBB0_76 $76(%rip) - WORD $0x92402e8e // and x14, x20, #0xfff + WORD $0x54000248 // b.hi LBB0_75 $72(%rip) + WORD $0x92402e6e // and x14, x19, #0xfff WORD $0xf13fc5df // cmp x14, #4081 - WORD $0x54000202 // b.hs LBB0_76 $64(%rip) - WORD $0x3dc002d3 // ldr q19, [x22] - WORD $0x3dc00294 // ldr q20, [x20] + WORD $0x540001e2 // b.hs LBB0_75 $60(%rip) + WORD $0x3dc00293 // ldr q19, [x20] + WORD $0x3dc00274 // ldr q20, [x19] WORD $0x6e338e93 // cmeq.16b v19, v20, v19 WORD $0x4e211e73 // and.16b v19, v19, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 WORD $0x1e26026e // fmov w14, s19 - WORD $0x6a2e010e // bics w14, w8, w14 + WORD $0x6a2e02ae // bics w14, w21, w14 WORD $0x1a9f17ef // cset w15, eq WORD $0xdac001ce // rbit x14, x14 WORD $0xdac011ce // clz x14, x14 - WORD $0xeb1301df // cmp x14, x19 - WORD $0x1a9f35e2 // csinc w2, w15, wzr, lo - WORD $0xf9400ff0 // ldr x16, [sp, #24] - WORD $0x1400000f // b LBB0_80 $60(%rip) -LBB0_76: - WORD $0xeb02035f // cmp x26, x2 - WORD $0x54000081 // b.ne LBB0_78 $16(%rip) - WORD $0x52800022 // mov w2, #1 - WORD $0xf9400ff0 // ldr x16, [sp, #24] - WORD $0x1400000a // b LBB0_80 $40(%rip) + WORD $0xeb1001df // cmp x14, x16 + WORD $0x1a9f35e4 // csinc w4, w15, wzr, lo + WORD $0x14000004 // b LBB0_77 $16(%rip) +LBB0_75: + WORD $0xeb04037f // cmp x27, x4 + WORD $0x540001a1 // b.ne LBB0_78 $52(%rip) + WORD $0x52800024 // mov w4, #1 +LBB0_77: + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 +Lloh12: + WORD $0x10023e3b // adr x27, __UnquoteTab $18372(%rip) +Lloh13: + WORD $0x9100037b // add x27, x27, __UnquoteTab@PAGEOFF $0(%rip) + WORD $0x2a0403f0 // mov w16, w4 + WORD $0xf9400413 // ldr x19, [x0, #8] + WORD $0xeb13035f // cmp x26, x19 + WORD $0x54000283 // b.lo LBB0_81 $80(%rip) + WORD $0x1400013b // b LBB0_135 $1260(%rip) LBB0_78: WORD $0x52800037 // mov w23, #1 - WORD $0xf9400ff0 // ldr x16, [sp, #24] + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 +Lloh14: + WORD $0x10023cfb // adr x27, __UnquoteTab $18332(%rip) +Lloh15: + WORD $0x9100037b // add x27, x27, __UnquoteTab@PAGEOFF $0(%rip) LBB0_79: - WORD $0x384016ce // ldrb w14, [x22], #1 - WORD $0x3840168f // ldrb w15, [x20], #1 + WORD $0x3840168e // ldrb w14, [x20], #1 + WORD $0x3840166f // ldrb w15, [x19], #1 WORD $0x6b0f01df // cmp w14, w15 - WORD $0x1a9f17e2 // cset w2, eq - WORD $0xfa570264 // ccmp x19, x23, #4, eq + WORD $0x1a9f17e4 // cset w4, eq + WORD $0xfa570204 // ccmp x16, x23, #4, eq WORD $0x910006f7 // add x23, x23, #1 WORD $0x54ffff41 // b.ne LBB0_79 $-24(%rip) -LBB0_80: - WORD $0x2a0203f3 // mov w19, w2 - WORD $0xf9400414 // ldr x20, [x0, #8] - WORD $0xeb14033f // cmp x25, x20 - WORD $0x54000162 // b.hs LBB0_85 $44(%rip) + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0x2a0403f0 // mov w16, w4 + WORD $0xf9400413 // ldr x19, [x0, #8] + WORD $0xeb13035f // cmp x26, x19 + WORD $0x54002522 // b.hs LBB0_135 $1188(%rip) LBB0_81: - WORD $0x38796aa2 // ldrb w2, [x21, x25] + WORD $0x387a6ac2 // ldrb w2, [x22, x26] WORD $0x7100345f // cmp w2, #13 - WORD $0x54000100 // b.eq LBB0_85 $32(%rip) + WORD $0x540024c0 // b.eq LBB0_135 $1176(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x540000c0 // b.eq LBB0_85 $24(%rip) + WORD $0x54002480 // b.eq LBB0_135 $1168(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x54000062 // b.hs LBB0_85 $12(%rip) - WORD $0xaa1903f7 // mov x23, x25 - WORD $0x14000031 // b LBB0_101 $196(%rip) + WORD $0x54002422 // b.hs LBB0_135 $1156(%rip) + WORD $0xaa1a03f8 // mov x24, x26 + WORD $0x1400014f // b LBB0_151 $1340(%rip) LBB0_85: - WORD $0x91000737 // add x23, x25, #1 - WORD $0xeb1402ff // cmp x23, x20 - WORD $0x54000122 // b.hs LBB0_89 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] + WORD $0x8b1e02d1 // add x17, x22, lr + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0x14000004 // b LBB0_87 $16(%rip) +LBB0_86: + WORD $0xd280001a // mov x26, #0 + WORD $0x92800013 // mov x19, #-1 + WORD $0xaa1703f1 // mov x17, x23 +LBB0_87: + WORD $0xf100829e // subs lr, x20, #32 + WORD $0x54009423 // b.lo LBB0_298 $4740(%rip) + WORD $0xad405233 // ldp q19, q20, [x17] + WORD $0x6e208e75 // cmeq.16b v21, v19, v0 + WORD $0x6e208e96 // cmeq.16b v22, v20, v0 + WORD $0x6e238e73 // cmeq.16b v19, v19, v3 + WORD $0x6e238e94 // cmeq.16b v20, v20, v3 + WORD $0x4e211eb5 // and.16b v21, v21, v1 + WORD $0x4e0202b5 // tbl.16b v21, { v21 }, v2 + WORD $0x4e71bab5 // addv.8h h21, v21 + WORD $0x1e2602b4 // fmov w20, s21 + WORD $0x4e211ed5 // and.16b v21, v22, v1 + WORD $0x4e0202b5 // tbl.16b v21, { v21 }, v2 + WORD $0x4e71bab5 // addv.8h h21, v21 + WORD $0x1e2602ae // fmov w14, s21 + WORD $0x4e211e73 // and.16b v19, v19, v1 + WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 + WORD $0x4e71ba73 // addv.8h h19, v19 + WORD $0x1e260264 // fmov w4, s19 + WORD $0x4e211e93 // and.16b v19, v20, v1 + WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 + WORD $0x4e71ba73 // addv.8h h19, v19 + WORD $0x1e26026f // fmov w15, s19 + WORD $0x33103dd4 // bfi w20, w14, #16, #16 + WORD $0x33103de4 // bfi w4, w15, #16, #16 + WORD $0x35009164 // cbnz w4, LBB0_299 $4652(%rip) + WORD $0xb500921a // cbnz x26, LBB0_300 $4672(%rip) + WORD $0xf94013eb // ldr x11, [sp, #32] + WORD $0xb4009414 // cbz x20, LBB0_301 $4736(%rip) +LBB0_91: + WORD $0xdac0028e // rbit x14, x20 + WORD $0xdac011ce // clz x14, x14 + WORD $0xcb16022f // sub x15, x17, x22 + WORD $0x8b0e01ee // add x14, x15, x14 + WORD $0x910005da // add x26, x14, #1 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0x3200f3e5 // mov w5, #1431655765 + WORD $0xf94017fe // ldr lr, [sp, #40] + WORD $0xb6ffeafa // tbz x26, #63, LBB0_61 $-676(%rip) + WORD $0x14001116 // b LBB0_925 $17496(%rip) +LBB0_92: + WORD $0xf9001bff // str xzr, [sp, #48] + WORD $0x8b1a02c8 // add x8, x22, x26 + WORD $0xd1000513 // sub x19, x8, #1 + WORD $0x8b1b0335 // add x21, x25, x27 + WORD $0xeb1302ff // cmp x23, x19 + WORD $0x54001902 // b.hs LBB0_131 $800(%rip) + WORD $0xf100077f // cmp x27, #1 + WORD $0x540018cb // b.lt LBB0_131 $792(%rip) +Lloh16: + WORD $0x100232db // adr x27, __UnquoteTab $18008(%rip) +Lloh17: + WORD $0x9100037b // add x27, x27, __UnquoteTab@PAGEOFF $0(%rip) +LBB0_95: + WORD $0x394002e8 // ldrb w8, [x23] + WORD $0x7101711f // cmp w8, #92 + WORD $0x540001a1 // b.ne LBB0_100 $52(%rip) + WORD $0xcb170274 // sub x20, x19, x23 + WORD $0xf100069f // cmp x20, #1 + WORD $0x54022b8b // b.lt LBB0_951 $17776(%rip) + WORD $0x394006e8 // ldrb w8, [x23, #1] + WORD $0x38686b68 // ldrb w8, [x27, x8] + WORD $0x7103fd1f // cmp w8, #255 + WORD $0x54000180 // b.eq LBB0_102 $48(%rip) + WORD $0x34022a68 // cbz w8, LBB0_949 $17740(%rip) + WORD $0x3900c3e8 // strb w8, [sp, #48] + WORD $0x91000af7 // add x23, x23, #2 + WORD $0x52800028 // mov w8, #1 + WORD $0x14000046 // b LBB0_111 $280(%rip) +LBB0_100: + WORD $0x3940032e // ldrb w14, [x25] + WORD $0x6b0e011f // cmp w8, w14 + WORD $0x54001821 // b.ne LBB0_133 $772(%rip) + WORD $0x910006f7 // add x23, x23, #1 + WORD $0x91000739 // add x25, x25, #1 + WORD $0x14000053 // b LBB0_117 $332(%rip) +LBB0_102: + WORD $0xf100129f // cmp x20, #4 + WORD $0x54022943 // b.lo LBB0_950 $17704(%rip) + WORD $0xb84022e8 // ldur w8, [x23, #2] + WORD $0x0b03010e // add w14, w8, w3 + WORD $0x3201c3eb // mov w11, #-2139062144 + WORD $0x0a280170 // bic w16, w11, w8 + WORD $0x6a0e021f // tst w16, w14 + WORD $0x540227c1 // b.ne LBB0_947 $17656(%rip) + WORD $0x5283232e // mov w14, #6425 + WORD $0x72a3232e // movk w14, #6425, lsl #16 + WORD $0x0b0e010e // add w14, w8, w14 + WORD $0x2a0801ce // orr w14, w14, w8 + WORD $0x3201c3f1 // mov w17, #-2139062144 + WORD $0x6a0b01df // tst w14, w11 + WORD $0x540226e1 // b.ne LBB0_947 $17628(%rip) + WORD $0x3200dbeb // mov w11, #2139062143 + WORD $0x0a0b0102 // and w2, w8, w11 + WORD $0x3202c7eb // mov w11, #-1061109568 + WORD $0x4b02016e // sub w14, w11, w2 + WORD $0x5288c8cb // mov w11, #17990 + WORD $0x72a8c8cb // movk w11, #17990, lsl #16 + WORD $0x0b0b004f // add w15, w2, w11 + WORD $0x0a0e01ee // and w14, w15, w14 + WORD $0x6a1001df // tst w14, w16 + WORD $0x540225a1 // b.ne LBB0_947 $17588(%rip) + WORD $0x4b02014e // sub w14, w10, w2 + WORD $0x5287272b // mov w11, #14649 + WORD $0x72a7272b // movk w11, #14649, lsl #16 + WORD $0x0b0b004f // add w15, w2, w11 + WORD $0x0a0e01ee // and w14, w15, w14 + WORD $0x6a1001df // tst w14, w16 + WORD $0x540224c1 // b.ne LBB0_947 $17560(%rip) + WORD $0x5ac00908 // rev w8, w8 + WORD $0x3200c3eb // mov w11, #16843009 + WORD $0x0a68116e // bic w14, w11, w8, lsr #4 + WORD $0x0b0e0dce // add w14, w14, w14, lsl #3 + WORD $0x3200cfeb // mov w11, #252645135 + WORD $0x0a0b0108 // and w8, w8, w11 + WORD $0x0b0801c8 // add w8, w14, w8 + WORD $0x2a481108 // orr w8, w8, w8, lsr #4 + WORD $0x53087d0e // lsr w14, w8, #8 + WORD $0x12181dc2 // and w2, w14, #0xff00 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0x33001d10 // bfxil w16, w8, #0, #8 + WORD $0x91001af8 // add x24, x23, #6 + WORD $0x7101fe1f // cmp w16, #127 + WORD $0x54000529 // b.ls LBB0_119 $164(%rip) + WORD $0x711ffe1f // cmp w16, #2047 + WORD $0x54000569 // b.ls LBB0_120 $172(%rip) + WORD $0x5140384e // sub w14, w2, #14, lsl #12 + WORD $0x312005df // cmn w14, #2049 + WORD $0x54000628 // b.hi LBB0_121 $196(%rip) + WORD $0x530c7c4e // lsr w14, w2, #12 + WORD $0x321b09ce // orr w14, w14, #0xe0 + WORD $0x3900c3ee // strb w14, [sp, #48] + WORD $0x5280100e // mov w14, #128 + WORD $0x33062e0e // bfxil w14, w16, #6, #6 + WORD $0x3900c7ee // strb w14, [sp, #49] + WORD $0x5280100e // mov w14, #128 + WORD $0x3300150e // bfxil w14, w8, #0, #6 + WORD $0x3900cbee // strb w14, [sp, #50] + WORD $0xaa1803f7 // mov x23, x24 + WORD $0x52800068 // mov w8, #3 +LBB0_111: + WORD $0x9100c3f0 // add x16, sp, #48 + WORD $0xaa080208 // orr x8, x16, x8 + WORD $0xeb15033f // cmp x25, x21 + WORD $0x54000182 // b.hs LBB0_116 $48(%rip) + WORD $0x9100c3f0 // add x16, sp, #48 +LBB0_113: + WORD $0x3940032e // ldrb w14, [x25] + WORD $0x3940020f // ldrb w15, [x16] + WORD $0x6b0f01df // cmp w14, w15 + WORD $0x540000e1 // b.ne LBB0_116 $28(%rip) + WORD $0x91000739 // add x25, x25, #1 + WORD $0x91000610 // add x16, x16, #1 + WORD $0xeb15033f // cmp x25, x21 + WORD $0x54000062 // b.hs LBB0_116 $12(%rip) + WORD $0xeb08021f // cmp x16, x8 + WORD $0x54fffee3 // b.lo LBB0_113 $-36(%rip) +LBB0_116: + WORD $0xeb08021f // cmp x16, x8 +Lloh18: + WORD $0x1002261b // adr x27, __UnquoteTab $17600(%rip) +Lloh19: + WORD $0x9100037b // add x27, x27, __UnquoteTab@PAGEOFF $0(%rip) + WORD $0x54000dc1 // b.ne LBB0_134 $440(%rip) +LBB0_117: + WORD $0xeb1302ff // cmp x23, x19 + WORD $0x54000b62 // b.hs LBB0_131 $364(%rip) + WORD $0xeb15033f // cmp x25, x21 + WORD $0x54fff2c3 // b.lo LBB0_95 $-424(%rip) + WORD $0x14000058 // b LBB0_131 $352(%rip) +LBB0_119: + WORD $0x3900c3e8 // strb w8, [sp, #48] + WORD $0xaa1803f7 // mov x23, x24 + WORD $0x52800028 // mov w8, #1 + WORD $0x17ffffe5 // b LBB0_111 $-108(%rip) +LBB0_120: + WORD $0x53067e0e // lsr w14, w16, #6 + WORD $0x321a05ce // orr w14, w14, #0xc0 + WORD $0x3900c3ee // strb w14, [sp, #48] + WORD $0x5280100e // mov w14, #128 + WORD $0x3300150e // bfxil w14, w8, #0, #6 + WORD $0x3900c7ee // strb w14, [sp, #49] + WORD $0xaa1803f7 // mov x23, x24 + WORD $0x52800048 // mov w8, #2 + WORD $0x17ffffdc // b LBB0_111 $-144(%rip) +LBB0_121: + WORD $0x92800068 // mov x8, #-4 + WORD $0xf1001a9f // cmp x20, #6 + WORD $0x54022263 // b.lo LBB0_964 $17484(%rip) + WORD $0x530a7e0e // lsr w14, w16, #10 + WORD $0x7100d9df // cmp w14, #54 + WORD $0x54022208 // b.hi LBB0_964 $17472(%rip) + WORD $0x39400308 // ldrb w8, [x24] + WORD $0x7101711f // cmp w8, #92 + WORD $0x54022141 // b.ne LBB0_963 $17448(%rip) + WORD $0x39401ee8 // ldrb w8, [x23, #7] + WORD $0x7101d51f // cmp w8, #117 + WORD $0x540220e1 // b.ne LBB0_963 $17436(%rip) + WORD $0xb9400ae8 // ldr w8, [x23, #8] + WORD $0x0b03010e // add w14, w8, w3 + WORD $0x0a280224 // bic w4, w17, w8 + WORD $0x6a0e009f // tst w4, w14 + WORD $0x54022001 // b.ne LBB0_962 $17408(%rip) + WORD $0x5283232b // mov w11, #6425 + WORD $0x72a3232b // movk w11, #6425, lsl #16 + WORD $0x0b0b010e // add w14, w8, w11 + WORD $0x2a0801ce // orr w14, w14, w8 + WORD $0x6a1101df // tst w14, w17 + WORD $0x54021f41 // b.ne LBB0_962 $17384(%rip) + WORD $0x3200dbeb // mov w11, #2139062143 + WORD $0x0a0b0102 // and w2, w8, w11 + WORD $0x3202c7eb // mov w11, #-1061109568 + WORD $0x4b02016e // sub w14, w11, w2 + WORD $0x5288c8cb // mov w11, #17990 + WORD $0x72a8c8cb // movk w11, #17990, lsl #16 + WORD $0x0b0b004f // add w15, w2, w11 + WORD $0x0a0e01ee // and w14, w15, w14 + WORD $0x6a0401df // tst w14, w4 + WORD $0x54021e01 // b.ne LBB0_962 $17344(%rip) + WORD $0x4b02014e // sub w14, w10, w2 + WORD $0x5287272b // mov w11, #14649 + WORD $0x72a7272b // movk w11, #14649, lsl #16 + WORD $0x0b0b004f // add w15, w2, w11 + WORD $0x0a0e01ee // and w14, w15, w14 + WORD $0x6a0401df // tst w14, w4 + WORD $0x54021d21 // b.ne LBB0_962 $17316(%rip) + WORD $0x5ac00908 // rev w8, w8 + WORD $0x3200c3eb // mov w11, #16843009 + WORD $0x0a68116e // bic w14, w11, w8, lsr #4 + WORD $0x0b0e0dce // add w14, w14, w14, lsl #3 + WORD $0x3200cfeb // mov w11, #252645135 + WORD $0x0a0b0108 // and w8, w8, w11 + WORD $0x0b0801c8 // add w8, w14, w8 + WORD $0x2a481108 // orr w8, w8, w8, lsr #4 + WORD $0x53087d0e // lsr w14, w8, #8 + WORD $0x12181dc2 // and w2, w14, #0xff00 + WORD $0x5140384e // sub w14, w2, #14, lsl #12 + WORD $0x311001df // cmn w14, #1024 + WORD $0x54021c63 // b.lo LBB0_965 $17292(%rip) + WORD $0x12001d0e // and w14, w8, #0xff + WORD $0x2a1029ce // orr w14, w14, w16, lsl #10 + WORD $0x5284800b // mov w11, #9216 + WORD $0x72bf940b // movk w11, #64672, lsl #16 + WORD $0x0b0b004f // add w15, w2, w11 + WORD $0x0b0f01ce // add w14, w14, w15 + WORD $0x53127dcf // lsr w15, w14, #18 + WORD $0x321c0def // orr w15, w15, #0xf0 + WORD $0x3900c3ef // strb w15, [sp, #48] + WORD $0x5280100f // mov w15, #128 + WORD $0x330c45cf // bfxil w15, w14, #12, #6 + WORD $0x3900c7ef // strb w15, [sp, #49] + WORD $0x5280100f // mov w15, #128 + WORD $0x33062dcf // bfxil w15, w14, #6, #6 + WORD $0x3900cbef // strb w15, [sp, #50] + WORD $0x5280100e // mov w14, #128 + WORD $0x3300150e // bfxil w14, w8, #0, #6 + WORD $0x3900cfee // strb w14, [sp, #51] + WORD $0x910032f7 // add x23, x23, #12 + WORD $0x52800088 // mov w8, #4 + WORD $0x17ffff92 // b LBB0_111 $-440(%rip) +LBB0_131: + WORD $0xeb1302ff // cmp x23, x19 + WORD $0xfa550320 // ccmp x25, x21, #0, eq + WORD $0x1a9f17f0 // cset w16, eq +LBB0_132: + WORD $0xb201e3e8 // mov x8, #-8608480567731124088 + WORD $0x529ffff5 // mov w21, #65535 + WORD $0x3200f3e5 // mov w5, #1431655765 + WORD $0xa9427beb // ldp x11, lr, [sp, #32] + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0x17fffea2 // b LBB0_70 $-1400(%rip) +LBB0_133: + WORD $0xd2800010 // mov x16, #0 + WORD $0x17fffff3 // b LBB0_132 $-52(%rip) +LBB0_134: + WORD $0xd2800010 // mov x16, #0 + WORD $0xb201e3e8 // mov x8, #-8608480567731124088 + WORD $0x529ffff5 // mov w21, #65535 + WORD $0x3200f3e5 // mov w5, #1431655765 + WORD $0xa9427beb // ldp x11, lr, [sp, #32] + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0xf9400fe3 // ldr x3, [sp, #24] + WORD $0xf9400413 // ldr x19, [x0, #8] + WORD $0xeb13035f // cmp x26, x19 + WORD $0x54ffdb23 // b.lo LBB0_81 $-1180(%rip) +LBB0_135: + WORD $0x91000758 // add x24, x26, #1 + WORD $0xeb13031f // cmp x24, x19 + WORD $0x54000122 // b.hs LBB0_139 $36(%rip) + WORD $0x38786ac2 // ldrb w2, [x22, x24] WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_89 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_139 $24(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_89 $16(%rip) + WORD $0x54000080 // b.eq LBB0_139 $16(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x540004c3 // b.lo LBB0_101 $152(%rip) -LBB0_89: - WORD $0x91000b37 // add x23, x25, #2 - WORD $0xeb1402ff // cmp x23, x20 - WORD $0x54000122 // b.hs LBB0_93 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] + WORD $0x540004c3 // b.lo LBB0_151 $152(%rip) +LBB0_139: + WORD $0x91000b58 // add x24, x26, #2 + WORD $0xeb13031f // cmp x24, x19 + WORD $0x54000122 // b.hs LBB0_143 $36(%rip) + WORD $0x38786ac2 // ldrb w2, [x22, x24] WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_93 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_143 $24(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_93 $16(%rip) + WORD $0x54000080 // b.eq LBB0_143 $16(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x54000363 // b.lo LBB0_101 $108(%rip) -LBB0_93: - WORD $0x91000f37 // add x23, x25, #3 - WORD $0xeb1402ff // cmp x23, x20 - WORD $0x54000122 // b.hs LBB0_97 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] + WORD $0x54000363 // b.lo LBB0_151 $108(%rip) +LBB0_143: + WORD $0x91000f58 // add x24, x26, #3 + WORD $0xeb13031f // cmp x24, x19 + WORD $0x54000122 // b.hs LBB0_147 $36(%rip) + WORD $0x38786ac2 // ldrb w2, [x22, x24] WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_97 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_147 $24(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_97 $16(%rip) + WORD $0x54000080 // b.eq LBB0_147 $16(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x54000203 // b.lo LBB0_101 $64(%rip) -LBB0_97: - WORD $0x91001337 // add x23, x25, #4 - WORD $0xeb1402ff // cmp x23, x20 - WORD $0x5401ac22 // b.hs LBB0_800 $13700(%rip) -LBB0_98: - WORD $0x38776aae // ldrb w14, [x21, x23] + WORD $0x54000203 // b.lo LBB0_151 $64(%rip) +LBB0_147: + WORD $0x91001358 // add x24, x26, #4 + WORD $0xeb13031f // cmp x24, x19 + WORD $0x54019f62 // b.hs LBB0_812 $13292(%rip) +LBB0_148: + WORD $0x38786ace // ldrb w14, [x22, x24] WORD $0x710081df // cmp w14, #32 WORD $0x9ace218e // lsl x14, x12, x14 WORD $0x8a0d01ce // and x14, x14, x13 WORD $0xfa4099c4 // ccmp x14, #0, #4, ls - WORD $0x540000a0 // b.eq LBB0_100 $20(%rip) - WORD $0x910006f7 // add x23, x23, #1 - WORD $0xeb17029f // cmp x20, x23 - WORD $0x54ffff01 // b.ne LBB0_98 $-32(%rip) - WORD $0x14000dc2 // b LBB0_827 $14088(%rip) -LBB0_100: - WORD $0xeb1402ff // cmp x23, x20 - WORD $0x5401b802 // b.hs LBB0_827 $14080(%rip) -LBB0_101: - WORD $0x910006f8 // add x24, x23, #1 - WORD $0xf9000038 // str x24, [x1] - WORD $0x38776aae // ldrb w14, [x21, x23] - WORD $0x7100e9df // cmp w14, #58 - WORD $0x5401b761 // b.ne LBB0_827 $14060(%rip) - WORD $0xb5010593 // cbnz x19, LBB0_498 $8368(%rip) - WORD $0xf9400413 // ldr x19, [x0, #8] + WORD $0x540000a0 // b.eq LBB0_150 $20(%rip) + WORD $0x91000718 // add x24, x24, #1 + WORD $0xeb18027f // cmp x19, x24 + WORD $0x54ffff01 // b.ne LBB0_148 $-32(%rip) + WORD $0x14000d79 // b LBB0_842 $13796(%rip) +LBB0_150: WORD $0xeb13031f // cmp x24, x19 - WORD $0x54000162 // b.hs LBB0_108 $44(%rip) - WORD $0x38786aa2 // ldrb w2, [x21, x24] + WORD $0x5401aee2 // b.hs LBB0_842 $13788(%rip) +LBB0_151: + WORD $0x91000719 // add x25, x24, #1 + WORD $0xf9000039 // str x25, [x1] + WORD $0x38786ace // ldrb w14, [x22, x24] + WORD $0x7100e9df // cmp w14, #58 + WORD $0x5401ae41 // b.ne LBB0_842 $13768(%rip) + WORD $0xb500f8d0 // cbnz x16, LBB0_510 $7960(%rip) + WORD $0xf9400410 // ldr x16, [x0, #8] + WORD $0xeb10033f // cmp x25, x16 + WORD $0x54000162 // b.hs LBB0_158 $44(%rip) + WORD $0x38796ac2 // ldrb w2, [x22, x25] WORD $0x7100345f // cmp w2, #13 - WORD $0x54000100 // b.eq LBB0_108 $32(%rip) + WORD $0x54000100 // b.eq LBB0_158 $32(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x540000c0 // b.eq LBB0_108 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_158 $24(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x54000062 // b.hs LBB0_108 $12(%rip) - WORD $0xaa1803f6 // mov x22, x24 - WORD $0x14000031 // b LBB0_124 $196(%rip) -LBB0_108: - WORD $0x91000af6 // add x22, x23, #2 - WORD $0xeb1302df // cmp x22, x19 - WORD $0x54000122 // b.hs LBB0_112 $36(%rip) - WORD $0x38766aa2 // ldrb w2, [x21, x22] + WORD $0x54000062 // b.hs LBB0_158 $12(%rip) + WORD $0xaa1903f3 // mov x19, x25 + WORD $0x14000031 // b LBB0_174 $196(%rip) +LBB0_158: + WORD $0x91000b13 // add x19, x24, #2 + WORD $0xeb10027f // cmp x19, x16 + WORD $0x54000122 // b.hs LBB0_162 $36(%rip) + WORD $0x38736ac2 // ldrb w2, [x22, x19] WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_112 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_162 $24(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_112 $16(%rip) + WORD $0x54000080 // b.eq LBB0_162 $16(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x540004c3 // b.lo LBB0_124 $152(%rip) -LBB0_112: - WORD $0x91000ef6 // add x22, x23, #3 - WORD $0xeb1302df // cmp x22, x19 - WORD $0x54000122 // b.hs LBB0_116 $36(%rip) - WORD $0x38766aa2 // ldrb w2, [x21, x22] + WORD $0x540004c3 // b.lo LBB0_174 $152(%rip) +LBB0_162: + WORD $0x91000f13 // add x19, x24, #3 + WORD $0xeb10027f // cmp x19, x16 + WORD $0x54000122 // b.hs LBB0_166 $36(%rip) + WORD $0x38736ac2 // ldrb w2, [x22, x19] WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_116 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_166 $24(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_116 $16(%rip) + WORD $0x54000080 // b.eq LBB0_166 $16(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x54000363 // b.lo LBB0_124 $108(%rip) -LBB0_116: - WORD $0x910012f6 // add x22, x23, #4 - WORD $0xeb1302df // cmp x22, x19 - WORD $0x54000122 // b.hs LBB0_120 $36(%rip) - WORD $0x38766aa2 // ldrb w2, [x21, x22] + WORD $0x54000363 // b.lo LBB0_174 $108(%rip) +LBB0_166: + WORD $0x91001313 // add x19, x24, #4 + WORD $0xeb10027f // cmp x19, x16 + WORD $0x54000122 // b.hs LBB0_170 $36(%rip) + WORD $0x38736ac2 // ldrb w2, [x22, x19] WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_120 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_170 $24(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_120 $16(%rip) + WORD $0x54000080 // b.eq LBB0_170 $16(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x54000203 // b.lo LBB0_124 $64(%rip) -LBB0_120: - WORD $0x910016f6 // add x22, x23, #5 - WORD $0xeb1302df // cmp x22, x19 - WORD $0x54000b82 // b.hs LBB0_150 $368(%rip) -LBB0_121: - WORD $0x38766aae // ldrb w14, [x21, x22] + WORD $0x54000203 // b.lo LBB0_174 $64(%rip) +LBB0_170: + WORD $0x91001713 // add x19, x24, #5 + WORD $0xeb10027f // cmp x19, x16 + WORD $0x54002ea2 // b.hs LBB0_231 $1492(%rip) +LBB0_171: + WORD $0x38736ace // ldrb w14, [x22, x19] WORD $0x710081df // cmp w14, #32 WORD $0x9ace218e // lsl x14, x12, x14 WORD $0x8a0d01ce // and x14, x14, x13 WORD $0xfa4099c4 // ccmp x14, #0, #4, ls - WORD $0x540000a0 // b.eq LBB0_123 $20(%rip) - WORD $0x910006d6 // add x22, x22, #1 - WORD $0xeb16027f // cmp x19, x22 - WORD $0x54ffff01 // b.ne LBB0_121 $-32(%rip) - WORD $0x14000054 // b LBB0_151 $336(%rip) -LBB0_123: - WORD $0xeb1302df // cmp x22, x19 - WORD $0x54000a42 // b.hs LBB0_151 $328(%rip) -LBB0_124: - WORD $0x910006d8 // add x24, x22, #1 - WORD $0xf9000038 // str x24, [x1] - WORD $0x38766aa2 // ldrb w2, [x21, x22] - WORD $0x7101685f // cmp w2, #90 - WORD $0x540005ec // b.gt LBB0_139 $188(%rip) - WORD $0x7100bc5f // cmp w2, #47 - WORD $0x540007ad // b.le LBB0_144 $244(%rip) - WORD $0x5100c04e // sub w14, w2, #48 + WORD $0x540000a0 // b.eq LBB0_173 $20(%rip) + WORD $0x91000673 // add x19, x19, #1 + WORD $0xeb13021f // cmp x16, x19 + WORD $0x54ffff01 // b.ne LBB0_171 $-32(%rip) + WORD $0x1400016d // b LBB0_232 $1460(%rip) +LBB0_173: + WORD $0xeb10027f // cmp x19, x16 + WORD $0x54002d62 // b.hs LBB0_232 $1452(%rip) +LBB0_174: + WORD $0x91000679 // add x25, x19, #1 + WORD $0xf9000039 // str x25, [x1] + WORD $0x38736ad0 // ldrb w16, [x22, x19] + WORD $0x71016a1f // cmp w16, #90 + WORD $0x540008cc // b.gt LBB0_194 $280(%rip) + WORD $0x7100be1f // cmp w16, #47 + WORD $0x54002acd // b.le LBB0_225 $1368(%rip) + WORD $0x5100c20e // sub w14, w16, #48 WORD $0x710029df // cmp w14, #10 - WORD $0x540008c2 // b.hs LBB0_150 $280(%rip) -LBB0_127: + WORD $0x54002be2 // b.hs LBB0_231 $1404(%rip) +LBB0_177: WORD $0xf940040e // ldr x14, [x0, #8] - WORD $0xcb1801d3 // sub x19, x14, x24 - WORD $0xf100427f // cmp x19, #16 - WORD $0x540001e3 // b.lo LBB0_130 $60(%rip) -LBB0_128: - WORD $0x3cf86ab3 // ldr q19, [x21, x24] + WORD $0xcb1901d0 // sub x16, x14, x25 + WORD $0xf100421f // cmp x16, #16 + WORD $0x54000223 // b.lo LBB0_181 $68(%rip) + WORD $0xd2800004 // mov x4, #0 +LBB0_179: + WORD $0x3cf96ad3 // ldr q19, [x22, x25] WORD $0x6e248e74 // cmeq.16b v20, v19, v4 WORD $0x4e251e73 // and.16b v19, v19, v5 WORD $0x6e268e73 // cmeq.16b v19, v19, v6 @@ -654,162 +998,153 @@ LBB0_128: WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 WORD $0x1e260262 // fmov w2, s19 - WORD $0x350002e2 // cbnz w2, LBB0_138 $92(%rip) - WORD $0xd1004273 // sub x19, x19, #16 - WORD $0x91004318 // add x24, x24, #16 - WORD $0xf1003e7f // cmp x19, #15 - WORD $0x54fffe68 // b.hi LBB0_128 $-52(%rip) -LBB0_130: - WORD $0x8b1802a2 // add x2, x21, x24 - WORD $0xb40001f3 // cbz x19, LBB0_137 $60(%rip) - WORD $0x8b130054 // add x20, x2, x19 - WORD $0xcb150058 // sub x24, x2, x21 -LBB0_132: - WORD $0x39400047 // ldrb w7, [x2] - WORD $0x7100b0ff // cmp w7, #44 - WORD $0x54005c40 // b.eq LBB0_246 $2952(%rip) - WORD $0x7101f4ff // cmp w7, #125 - WORD $0x54005c00 // b.eq LBB0_246 $2944(%rip) - WORD $0x710174ff // cmp w7, #93 - WORD $0x54005bc0 // b.eq LBB0_246 $2936(%rip) - WORD $0x91000442 // add x2, x2, #1 - WORD $0x91000718 // add x24, x24, #1 - WORD $0xf1000673 // subs x19, x19, #1 - WORD $0x54fffec1 // b.ne LBB0_132 $-40(%rip) - WORD $0xaa1403e2 // mov x2, x20 -LBB0_137: - WORD $0xcb150058 // sub x24, x2, x21 - WORD $0x1400040d // b LBB0_314 $4148(%rip) -LBB0_138: + WORD $0x35000362 // cbnz w2, LBB0_189 $108(%rip) + WORD $0xd1004210 // sub x16, x16, #16 + WORD $0x91004339 // add x25, x25, #16 + WORD $0x91004084 // add x4, x4, #16 + WORD $0xf1003e1f // cmp x16, #15 + WORD $0x54fffe48 // b.hi LBB0_179 $-56(%rip) +LBB0_181: + WORD $0x8b1902d3 // add x19, x22, x25 + WORD $0xb4000250 // cbz x16, LBB0_188 $72(%rip) + WORD $0x8b100264 // add x4, x19, x16 + WORD $0xcb160279 // sub x25, x19, x22 +LBB0_183: + WORD $0x39400262 // ldrb w2, [x19] + WORD $0x7100b05f // cmp w2, #44 + WORD $0x9ac2218e // lsl x14, x12, x2 + WORD $0x8a1101ce // and x14, x14, x17 + WORD $0xfa4099c4 // ccmp x14, #0, #4, ls + WORD $0x54005d81 // b.ne LBB0_296 $2992(%rip) + WORD $0x7101f45f // cmp w2, #125 + WORD $0x54005d40 // b.eq LBB0_296 $2984(%rip) + WORD $0x7101745f // cmp w2, #93 + WORD $0x54005d00 // b.eq LBB0_296 $2976(%rip) + WORD $0x91000673 // add x19, x19, #1 + WORD $0x91000739 // add x25, x25, #1 + WORD $0xf1000610 // subs x16, x16, #1 + WORD $0x54fffe61 // b.ne LBB0_183 $-52(%rip) + WORD $0xaa0403f3 // mov x19, x4 +LBB0_188: + WORD $0xcb160279 // sub x25, x19, x22 + WORD $0x14000357 // b LBB0_323 $3420(%rip) +LBB0_189: WORD $0x5ac0004e // rbit w14, w2 - WORD $0x5ac011ce // clz w14, w14 - WORD $0x8b1801d8 // add x24, x14, x24 - WORD $0xf9000038 // str x24, [x1] - WORD $0x1400001f // b LBB0_151 $124(%rip) -LBB0_139: - WORD $0x7101b45f // cmp w2, #109 - WORD $0x540002ad // b.le LBB0_147 $84(%rip) - WORD $0x7101b85f // cmp w2, #110 - WORD $0x54002a60 // b.eq LBB0_199 $1356(%rip) - WORD $0x7101d05f // cmp w2, #116 - WORD $0x54002a20 // b.eq LBB0_199 $1348(%rip) - WORD $0x7101ec5f // cmp w2, #123 - WORD $0x540002a1 // b.ne LBB0_150 $84(%rip) - WORD $0xd280001b // mov x27, #0 - WORD $0xd2800019 // mov x25, #0 - WORD $0xd2800016 // mov x22, #0 + WORD $0x5ac011d0 // clz w16, w14 + WORD $0x8b190219 // add x25, x16, x25 + WORD $0xf9000039 // str x25, [x1] + WORD $0xf100073f // cmp x25, #1 + WORD $0x5400264b // b.lt LBB0_232 $1224(%rip) + WORD $0x8b040210 // add x16, x16, x4 + WORD $0x8b1302c4 // add x4, x22, x19 +LBB0_191: + WORD $0x3870688e // ldrb w14, [x4, x16] + WORD $0x710081df // cmp w14, #32 + WORD $0x9ace218e // lsl x14, x12, x14 + WORD $0x8a0d01ce // and x14, x14, x13 + WORD $0xfa4099c4 // ccmp x14, #0, #4, ls + WORD $0x54002e80 // b.eq LBB0_257 $1488(%rip) + WORD $0x8b10026e // add x14, x19, x16 + WORD $0xf900002e // str x14, [x1] + WORD $0xd1000610 // sub x16, x16, #1 + WORD $0x8b100262 // add x2, x19, x16 + WORD $0x9100084e // add x14, x2, #2 + WORD $0xf10005df // cmp x14, #1 + WORD $0x54fffe8c // b.gt LBB0_191 $-48(%rip) + WORD $0x91000459 // add x25, x2, #1 + WORD $0x14000121 // b LBB0_232 $1156(%rip) +LBB0_194: + WORD $0x7101b61f // cmp w16, #109 + WORD $0x540022ed // b.le LBB0_228 $1116(%rip) + WORD $0x7101ba1f // cmp w16, #110 + WORD $0x54002c00 // b.eq LBB0_254 $1408(%rip) + WORD $0x7101d21f // cmp w16, #116 + WORD $0x54002bc0 // b.eq LBB0_254 $1400(%rip) + WORD $0x7101ee1f // cmp w16, #123 + WORD $0x540022e1 // b.ne LBB0_231 $1116(%rip) + WORD $0xd2800013 // mov x19, #0 + WORD $0xd280001a // mov x26, #0 WORD $0xd2800017 // mov x23, #0 + WORD $0xd2800018 // mov x24, #0 WORD $0xf940040e // ldr x14, [x0, #8] - WORD $0xcb1801da // sub x26, x14, x24 - WORD $0x8b1802b5 // add x21, x21, x24 - WORD $0x1400005a // b LBB0_174 $360(%rip) -LBB0_144: - WORD $0x340001c2 // cbz w2, LBB0_151 $56(%rip) - WORD $0x7100885f // cmp w2, #34 - WORD $0x54002e20 // b.eq LBB0_208 $1476(%rip) - WORD $0x7100b45f // cmp w2, #45 - WORD $0x54fff860 // b.eq LBB0_127 $-244(%rip) - WORD $0x14000007 // b LBB0_150 $28(%rip) -LBB0_147: - WORD $0x71016c5f // cmp w2, #91 - WORD $0x54003580 // b.eq LBB0_217 $1712(%rip) - WORD $0x7101985f // cmp w2, #102 - WORD $0x54000061 // b.ne LBB0_150 $12(%rip) - WORD $0x910016c2 // add x2, x22, #5 - WORD $0x1400013c // b LBB0_200 $1264(%rip) -LBB0_150: - WORD $0xf9000036 // str x22, [x1] - WORD $0xaa1603f8 // mov x24, x22 -LBB0_151: - WORD $0xa9404c15 // ldp x21, x19, [x0] - WORD $0xeb13031f // cmp x24, x19 - WORD $0x54000162 // b.hs LBB0_156 $44(%rip) - WORD $0x38786aa2 // ldrb w2, [x21, x24] - WORD $0x7100345f // cmp w2, #13 - WORD $0x54000100 // b.eq LBB0_156 $32(%rip) - WORD $0x7100805f // cmp w2, #32 - WORD $0x540000c0 // b.eq LBB0_156 $24(%rip) - WORD $0x51002c4e // sub w14, w2, #11 - WORD $0x310009df // cmn w14, #2 - WORD $0x54000062 // b.hs LBB0_156 $12(%rip) - WORD $0xaa1803f7 // mov x23, x24 - WORD $0x14000031 // b LBB0_172 $196(%rip) -LBB0_156: - WORD $0x91000717 // add x23, x24, #1 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54000122 // b.hs LBB0_160 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] - WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_160 $24(%rip) - WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_160 $16(%rip) - WORD $0x51002c4e // sub w14, w2, #11 - WORD $0x310009df // cmn w14, #2 - WORD $0x540004c3 // b.lo LBB0_172 $152(%rip) -LBB0_160: - WORD $0x91000b17 // add x23, x24, #2 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54000122 // b.hs LBB0_164 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] - WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_164 $24(%rip) - WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_164 $16(%rip) - WORD $0x51002c4e // sub w14, w2, #11 - WORD $0x310009df // cmn w14, #2 - WORD $0x54000363 // b.lo LBB0_172 $108(%rip) -LBB0_164: - WORD $0x91000f17 // add x23, x24, #3 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54000122 // b.hs LBB0_168 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] - WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_168 $24(%rip) - WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_168 $16(%rip) - WORD $0x51002c4e // sub w14, w2, #11 - WORD $0x310009df // cmn w14, #2 - WORD $0x54000203 // b.lo LBB0_172 $64(%rip) -LBB0_168: - WORD $0x91001317 // add x23, x24, #4 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54019202 // b.hs LBB0_800 $12864(%rip) -LBB0_169: - WORD $0x38776aae // ldrb w14, [x21, x23] - WORD $0x710081df // cmp w14, #32 - WORD $0x9ace218e // lsl x14, x12, x14 - WORD $0x8a0d01ce // and x14, x14, x13 - WORD $0xfa4099c4 // ccmp x14, #0, #4, ls - WORD $0x540000a0 // b.eq LBB0_171 $20(%rip) - WORD $0x910006f7 // add x23, x23, #1 - WORD $0xeb17027f // cmp x19, x23 - WORD $0x54ffff01 // b.ne LBB0_169 $-32(%rip) - WORD $0x14000cf1 // b LBB0_827 $13252(%rip) -LBB0_171: - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54019de2 // b.hs LBB0_827 $13244(%rip) -LBB0_172: - WORD $0x910006f9 // add x25, x23, #1 - WORD $0xf9000039 // str x25, [x1] - WORD $0x38776aa2 // ldrb w2, [x21, x23] - WORD $0x7100b05f // cmp w2, #44 - WORD $0x54ffbd40 // b.eq LBB0_29 $-2136(%rip) - WORD $0x14000ce7 // b LBB0_826 $13212(%rip) -LBB0_173: - WORD $0x937ffe7b // asr x27, x19, #63 - WORD $0x9e670293 // fmov d19, x20 - WORD $0x0e205a73 // cnt.8b v19, v19 - WORD $0x2e303a73 // uaddlv.8b h19, v19 - WORD $0x1e26026e // fmov w14, s19 - WORD $0x8b1601d6 // add x22, x14, x22 - WORD $0x910102b5 // add x21, x21, #64 - WORD $0xaa0a03fa // mov x26, x10 -LBB0_174: - WORD $0xf101034a // subs x10, x26, #64 - WORD $0x5400170b // b.lt LBB0_181 $736(%rip) -LBB0_175: - WORD $0xad4056b6 // ldp q22, q21, [x21] - WORD $0xad414eb4 // ldp q20, q19, [x21, #32] + WORD $0xcb1901ce // sub x14, x14, x25 + WORD $0x8b1902d6 // add x22, x22, x25 + WORD $0xf10101ca // subs x10, x14, #64 + WORD $0xf9000bee // str x14, [sp, #16] + WORD $0x5400074a // b.ge LBB0_216 $232(%rip) +LBB0_199: + WORD $0xf10001df // cmp x14, #0 + WORD $0x540061ad // b.le LBB0_315 $3124(%rip) + WORD $0xad02c3f0 // stp q16, q16, [sp, #80] + WORD $0xad01c3f0 // stp q16, q16, [sp, #48] + WORD $0x92402ec8 // and x8, x22, #0xfff + WORD $0xf13f051f // cmp x8, #4033 + WORD $0x54000383 // b.lo LBB0_211 $112(%rip) + WORD $0xf9400be8 // ldr x8, [sp, #16] + WORD $0xf1008110 // subs x16, x8, #32 + WORD $0x540000a3 // b.lo LBB0_203 $20(%rip) + WORD $0xacc152d3 // ldp q19, q20, [x22], #32 + WORD $0xad01d3f3 // stp q19, q20, [sp, #48] + WORD $0xf94013e8 // ldr x8, [sp, #32] + WORD $0x14000003 // b LBB0_204 $12(%rip) +LBB0_203: + WORD $0x9100c3e8 // add x8, sp, #48 + WORD $0xf9400bf0 // ldr x16, [sp, #16] +LBB0_204: + WORD $0xf1004202 // subs x2, x16, #16 + WORD $0x54000343 // b.lo LBB0_212 $104(%rip) + WORD $0x3cc106d3 // ldr q19, [x22], #16 + WORD $0x3c810513 // str q19, [x8], #16 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xf1002042 // subs x2, x2, #8 + WORD $0x540002e2 // b.hs LBB0_213 $92(%rip) +LBB0_206: + WORD $0xf1001202 // subs x2, x16, #4 + WORD $0x54000343 // b.lo LBB0_214 $104(%rip) +LBB0_207: + WORD $0xb84046ce // ldr w14, [x22], #4 + WORD $0xb800450e // str w14, [x8], #4 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xf1000842 // subs x2, x2, #2 + WORD $0x540002e2 // b.hs LBB0_215 $92(%rip) +LBB0_208: + WORD $0xb4000070 // cbz x16, LBB0_210 $12(%rip) +LBB0_209: + WORD $0x394002ce // ldrb w14, [x22] + WORD $0x3900010e // strb w14, [x8] +LBB0_210: + WORD $0x9100c3f6 // add x22, sp, #48 +LBB0_211: + WORD $0xb201e3e8 // mov x8, #-8608480567731124088 + WORD $0x529ffff5 // mov w21, #65535 + WORD $0xa9427beb // ldp x11, lr, [sp, #32] + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0xf9400fe3 // ldr x3, [sp, #24] + WORD $0x1400000f // b LBB0_216 $60(%rip) +LBB0_212: + WORD $0xf1002202 // subs x2, x16, #8 + WORD $0x54fffd63 // b.lo LBB0_206 $-84(%rip) +LBB0_213: + WORD $0xf84086ce // ldr x14, [x22], #8 + WORD $0xf800850e // str x14, [x8], #8 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xf1001042 // subs x2, x2, #4 + WORD $0x54fffd02 // b.hs LBB0_207 $-96(%rip) +LBB0_214: + WORD $0xf1000a02 // subs x2, x16, #2 + WORD $0x54fffd63 // b.lo LBB0_208 $-84(%rip) +LBB0_215: + WORD $0x784026ce // ldrh w14, [x22], #2 + WORD $0x7800250e // strh w14, [x8], #2 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xb5fffd02 // cbnz x2, LBB0_209 $-96(%rip) + WORD $0x17ffffe9 // b LBB0_210 $-92(%rip) +LBB0_216: + WORD $0xad4056d6 // ldp q22, q21, [x22] + WORD $0xad414ed4 // ldp q20, q19, [x22, #32] WORD $0x6e238ed7 // cmeq.16b v23, v22, v3 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 @@ -834,23 +1169,23 @@ LBB0_175: WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f020f // orr x15, x16, x15 - WORD $0xaa0e01e2 // orr x2, x15, x14 - WORD $0xaa19004e // orr x14, x2, x25 - WORD $0xb500008e // cbnz x14, LBB0_177 $16(%rip) - WORD $0xd2800019 // mov x25, #0 - WORD $0xd2800002 // mov x2, #0 - WORD $0x1400000a // b LBB0_178 $40(%rip) -LBB0_177: - WORD $0x8a39004e // bic x14, x2, x25 - WORD $0xaa0e072f // orr x15, x25, x14, lsl #1 - WORD $0x8a2f0050 // bic x16, x2, x15 + WORD $0xaa0e01f0 // orr x16, x15, x14 + WORD $0xaa1a020e // orr x14, x16, x26 + WORD $0xb500008e // cbnz x14, LBB0_218 $16(%rip) + WORD $0xd280001a // mov x26, #0 + WORD $0xd2800010 // mov x16, #0 + WORD $0x1400000a // b LBB0_219 $40(%rip) +LBB0_218: + WORD $0x8a3a020e // bic x14, x16, x26 + WORD $0xaa0e074f // orr x15, x26, x14, lsl #1 + WORD $0x8a2f0210 // bic x16, x16, x15 WORD $0x9201f210 // and x16, x16, #0xaaaaaaaaaaaaaaaa WORD $0xab0e020e // adds x14, x16, x14 - WORD $0x1a9f37f9 // cset w25, hs + WORD $0x1a9f37fa // cset w26, hs WORD $0xd37ff9ce // lsl x14, x14, #1 WORD $0xd200f1ce // eor x14, x14, #0x5555555555555555 - WORD $0x8a0f01c2 // and x2, x14, x15 -LBB0_178: + WORD $0x8a0f01d0 // and x16, x14, x15 +LBB0_219: WORD $0x6e208ed7 // cmeq.16b v23, v22, v0 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 @@ -865,68 +1200,65 @@ LBB0_178: WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f0 // fmov w16, s23 + WORD $0x1e2602f1 // fmov w17, s23 WORD $0x6e208e77 // cmeq.16b v23, v19, v0 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f1 // fmov w17, s23 - WORD $0xd3607e10 // lsl x16, x16, #32 - WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 + WORD $0x1e2602e2 // fmov w2, s23 + WORD $0xd3607e31 // lsl x17, x17, #32 + WORD $0xaa02c231 // orr x17, x17, x2, lsl #48 WORD $0x53103def // lsl w15, w15, #16 - WORD $0xaa0f020f // orr x15, x16, x15 + WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0x8a2201ce // bic x14, x14, x2 + WORD $0x8a3001ce // bic x14, x14, x16 WORD $0x9200e1cf // and x15, x14, #0x1111111111111111 WORD $0x9203e1d0 // and x16, x14, #0x2222222222222222 WORD $0x9202e1d1 // and x17, x14, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 - WORD $0xb200e3f4 // mov x20, #1229782938247303441 - WORD $0x9b147de2 // mul x2, x15, x20 - WORD $0xb201e3e4 // mov x4, #-8608480567731124088 - WORD $0xf2e11104 // movk x4, #2184, lsl #48 - WORD $0x9b047e05 // mul x5, x16, x4 - WORD $0xca050042 // eor x2, x2, x5 - WORD $0xb202e3e7 // mov x7, #4919131752989213764 - WORD $0xf2e08887 // movk x7, #1092, lsl #48 + WORD $0xb200e3f9 // mov x25, #1229782938247303441 + WORD $0x9b197de2 // mul x2, x15, x25 + WORD $0x9b077e04 // mul x4, x16, x7 + WORD $0xca040042 // eor x2, x2, x4 + WORD $0x9b147e24 // mul x4, x17, x20 + WORD $0xb203e3e5 // mov x5, #2459565876494606882 + WORD $0xf2e04445 // movk x5, #546, lsl #48 + WORD $0x9b057dc5 // mul x5, x14, x5 + WORD $0xca050084 // eor x4, x4, x5 + WORD $0xca040042 // eor x2, x2, x4 + WORD $0xb203e3fb // mov x27, #2459565876494606882 + WORD $0x9b1b7de4 // mul x4, x15, x27 + WORD $0x9b197e05 // mul x5, x16, x25 + WORD $0xca050084 // eor x4, x4, x5 WORD $0x9b077e25 // mul x5, x17, x7 - WORD $0xb203e3e6 // mov x6, #2459565876494606882 - WORD $0xf2e04446 // movk x6, #546, lsl #48 - WORD $0x9b067dc6 // mul x6, x14, x6 + WORD $0x9b147dc6 // mul x6, x14, x20 WORD $0xca0600a5 // eor x5, x5, x6 - WORD $0xca050042 // eor x2, x2, x5 - WORD $0xb203e3fe // mov lr, #2459565876494606882 - WORD $0x9b1e7de5 // mul x5, x15, lr - WORD $0x9b147e06 // mul x6, x16, x20 + WORD $0xca050084 // eor x4, x4, x5 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0x9b147de5 // mul x5, x15, x20 + WORD $0x9b1b7e06 // mul x6, x16, x27 WORD $0xca0600a5 // eor x5, x5, x6 - WORD $0x9b047e26 // mul x6, x17, x4 + WORD $0x9b197e26 // mul x6, x17, x25 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 WORD $0x9b077dc7 // mul x7, x14, x7 WORD $0xca0700c6 // eor x6, x6, x7 WORD $0xca0600a5 // eor x5, x5, x6 - WORD $0xb202e3f8 // mov x24, #4919131752989213764 - WORD $0x9b187de6 // mul x6, x15, x24 - WORD $0x9b1e7e07 // mul x7, x16, lr - WORD $0xca0700c6 // eor x6, x6, x7 - WORD $0x9b147e27 // mul x7, x17, x20 - WORD $0x9b047dd3 // mul x19, x14, x4 - WORD $0xca1300e7 // eor x7, x7, x19 - WORD $0xca0700c6 // eor x6, x6, x7 - WORD $0xb201e3e4 // mov x4, #-8608480567731124088 - WORD $0x9b047def // mul x15, x15, x4 - WORD $0x9b187e10 // mul x16, x16, x24 + WORD $0x9b087def // mul x15, x15, x8 + WORD $0x9b147e10 // mul x16, x16, x20 WORD $0xca1001ef // eor x15, x15, x16 - WORD $0x9b1e7e30 // mul x16, x17, lr - WORD $0x9b147dce // mul x14, x14, x20 + WORD $0x9b1b7e30 // mul x16, x17, x27 + WORD $0x9b197dce // mul x14, x14, x25 WORD $0xca0e020e // eor x14, x16, x14 WORD $0xca0e01ee // eor x14, x15, x14 WORD $0x9200e04f // and x15, x2, #0x1111111111111111 - WORD $0x9203e0b0 // and x16, x5, #0x2222222222222222 - WORD $0x9202e0d1 // and x17, x6, #0x4444444444444444 + WORD $0x9203e090 // and x16, x4, #0x2222222222222222 + WORD $0x9202e0b1 // and x17, x5, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 WORD $0xaa1001ef // orr x15, x15, x16 WORD $0xaa0e022e // orr x14, x17, x14 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xca1b01d3 // eor x19, x14, x27 + WORD $0xca1301d0 // eor x16, x14, x19 WORD $0x6e318ed7 // cmeq.16b v23, v22, v17 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 @@ -941,18 +1273,18 @@ LBB0_178: WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f0 // fmov w16, s23 + WORD $0x1e2602f1 // fmov w17, s23 WORD $0x6e318e77 // cmeq.16b v23, v19, v17 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f1 // fmov w17, s23 - WORD $0xd3607e10 // lsl x16, x16, #32 - WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 + WORD $0x1e2602e2 // fmov w2, s23 + WORD $0xd3607e31 // lsl x17, x17, #32 + WORD $0xaa02c231 // orr x17, x17, x2, lsl #48 WORD $0x53103def // lsl w15, w15, #16 - WORD $0xaa0f020f // orr x15, x16, x15 + WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0x8a3301d4 // bic x20, x14, x19 + WORD $0x8a3001d4 // bic x20, x14, x16 WORD $0x6e328ed6 // cmeq.16b v22, v22, v18 WORD $0x4e211ed6 // and.16b v22, v22, v1 WORD $0x4e0202d6 // tbl.16b v22, { v22 }, v2 @@ -967,241 +1299,311 @@ LBB0_178: WORD $0x4e211e94 // and.16b v20, v20, v1 WORD $0x4e020294 // tbl.16b v20, { v20 }, v2 WORD $0x4e71ba94 // addv.8h h20, v20 - WORD $0x1e260290 // fmov w16, s20 + WORD $0x1e260291 // fmov w17, s20 WORD $0x6e328e73 // cmeq.16b v19, v19, v18 WORD $0x4e211e73 // and.16b v19, v19, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 - WORD $0x1e260271 // fmov w17, s19 - WORD $0xd3607e10 // lsl x16, x16, #32 - WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 + WORD $0x1e260262 // fmov w2, s19 + WORD $0xd3607e31 // lsl x17, x17, #32 + WORD $0xaa02c231 // orr x17, x17, x2, lsl #48 WORD $0x53103def // lsl w15, w15, #16 - WORD $0xaa0f020f // orr x15, x16, x15 + WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xea3301c2 // bics x2, x14, x19 - WORD $0x54ffe9a0 // b.eq LBB0_173 $-716(%rip) -LBB0_179: - WORD $0xd1000447 // sub x7, x2, #1 - WORD $0x8a1400ee // and x14, x7, x20 + WORD $0xea3001c4 // bics x4, x14, x16 + WORD $0x54000220 // b.eq LBB0_223 $68(%rip) + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 +LBB0_221: + WORD $0xd1000482 // sub x2, x4, #1 + WORD $0x8a14004e // and x14, x2, x20 WORD $0x9e6701d3 // fmov d19, x14 WORD $0x0e205a73 // cnt.8b v19, v19 WORD $0x2e303a73 // uaddlv.8b h19, v19 WORD $0x1e26026e // fmov w14, s19 - WORD $0x8b1601ce // add x14, x14, x22 - WORD $0xeb1701df // cmp x14, x23 - WORD $0x54003429 // b.ls LBB0_243 $1668(%rip) - WORD $0x910006f7 // add x23, x23, #1 - WORD $0xea0200e2 // ands x2, x7, x2 - WORD $0x54fffea1 // b.ne LBB0_179 $-44(%rip) - WORD $0x17ffff40 // b LBB0_173 $-768(%rip) -LBB0_181: - WORD $0xf100035f // cmp x26, #0 - WORD $0x540058ad // b.le LBB0_306 $2836(%rip) - WORD $0xad0243f0 // stp q16, q16, [sp, #64] - WORD $0xad0143f0 // stp q16, q16, [sp, #32] - WORD $0x92402ea8 // and x8, x21, #0xfff - WORD $0xf13f051f // cmp x8, #4033 - WORD $0x54000363 // b.lo LBB0_193 $108(%rip) - WORD $0xf1008353 // subs x19, x26, #32 - WORD $0x540000a3 // b.lo LBB0_185 $20(%rip) - WORD $0xacc152b3 // ldp q19, q20, [x21], #32 - WORD $0xad0153f3 // stp q19, q20, [sp, #32] - WORD $0xf9400be8 // ldr x8, [sp, #16] - WORD $0x14000003 // b LBB0_186 $12(%rip) -LBB0_185: - WORD $0x910083e8 // add x8, sp, #32 - WORD $0xaa1a03f3 // mov x19, x26 -LBB0_186: - WORD $0xf1004262 // subs x2, x19, #16 - WORD $0x54000283 // b.lo LBB0_194 $80(%rip) - WORD $0x3cc106b3 // ldr q19, [x21], #16 - WORD $0x3c810513 // str q19, [x8], #16 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xf1002042 // subs x2, x2, #8 - WORD $0x54000222 // b.hs LBB0_195 $68(%rip) -LBB0_188: - WORD $0xf1001262 // subs x2, x19, #4 - WORD $0x54000283 // b.lo LBB0_196 $80(%rip) -LBB0_189: - WORD $0xb84046ae // ldr w14, [x21], #4 - WORD $0xb800450e // str w14, [x8], #4 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xf1000842 // subs x2, x2, #2 - WORD $0x54000222 // b.hs LBB0_197 $68(%rip) -LBB0_190: - WORD $0xb4000073 // cbz x19, LBB0_192 $12(%rip) -LBB0_191: - WORD $0x394002ae // ldrb w14, [x21] - WORD $0x3900010e // strb w14, [x8] -LBB0_192: - WORD $0x910083f5 // add x21, sp, #32 -LBB0_193: - WORD $0x529fffe8 // mov w8, #65535 - WORD $0xa940afe3 // ldp x3, x11, [sp, #8] - WORD $0x17ffff26 // b LBB0_175 $-872(%rip) -LBB0_194: - WORD $0xf1002262 // subs x2, x19, #8 - WORD $0x54fffe23 // b.lo LBB0_188 $-60(%rip) -LBB0_195: - WORD $0xf84086ae // ldr x14, [x21], #8 - WORD $0xf800850e // str x14, [x8], #8 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xf1001042 // subs x2, x2, #4 - WORD $0x54fffdc2 // b.hs LBB0_189 $-72(%rip) -LBB0_196: - WORD $0xf1000a62 // subs x2, x19, #2 - WORD $0x54fffe23 // b.lo LBB0_190 $-60(%rip) -LBB0_197: - WORD $0x784026ae // ldrh w14, [x21], #2 - WORD $0x7800250e // strh w14, [x8], #2 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xb5fffdc2 // cbnz x2, LBB0_191 $-72(%rip) - WORD $0x17ffffef // b LBB0_192 $-68(%rip) -LBB0_198: - WORD $0x8b1b02b0 // add x16, x21, x27 - WORD $0x1400000b // b LBB0_203 $44(%rip) -LBB0_199: - WORD $0x910012c2 // add x2, x22, #4 -LBB0_200: + WORD $0x8b1701ce // add x14, x14, x23 + WORD $0xeb1801df // cmp x14, x24 + WORD $0x54003749 // b.ls LBB0_294 $1768(%rip) + WORD $0x91000718 // add x24, x24, #1 + WORD $0xea040044 // ands x4, x2, x4 + WORD $0x54fffea1 // b.ne LBB0_221 $-44(%rip) + WORD $0x14000003 // b LBB0_224 $12(%rip) +LBB0_223: + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 +LBB0_224: + WORD $0x937ffe13 // asr x19, x16, #63 + WORD $0x9e670293 // fmov d19, x20 + WORD $0x0e205a73 // cnt.8b v19, v19 + WORD $0x2e303a73 // uaddlv.8b h19, v19 + WORD $0x1e26026e // fmov w14, s19 + WORD $0x8b1701d7 // add x23, x14, x23 + WORD $0x910102d6 // add x22, x22, #64 + WORD $0xaa0a03ee // mov x14, x10 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0xf101014a // subs x10, x10, #64 + WORD $0xf9000bee // str x14, [sp, #16] + WORD $0x54ffe76a // b.ge LBB0_216 $-788(%rip) + WORD $0x17ffff01 // b LBB0_199 $-1020(%rip) +LBB0_225: + WORD $0x340001d0 // cbz w16, LBB0_232 $56(%rip) + WORD $0x71008a1f // cmp w16, #34 + WORD $0x54000b20 // b.eq LBB0_258 $356(%rip) + WORD $0x7100b61f // cmp w16, #45 + WORD $0x54ffd540 // b.eq LBB0_177 $-1368(%rip) + WORD $0x14000007 // b LBB0_231 $28(%rip) +LBB0_228: + WORD $0x71016e1f // cmp w16, #91 + WORD $0x54001280 // b.eq LBB0_267 $592(%rip) + WORD $0x71019a1f // cmp w16, #102 + WORD $0x54000061 // b.ne LBB0_231 $12(%rip) + WORD $0x91001670 // add x16, x19, #5 + WORD $0x14000047 // b LBB0_255 $284(%rip) +LBB0_231: + WORD $0xf9000033 // str x19, [x1] + WORD $0xaa1303f9 // mov x25, x19 +LBB0_232: + WORD $0xa9404016 // ldp x22, x16, [x0] + WORD $0xeb10033f // cmp x25, x16 + WORD $0x54000162 // b.hs LBB0_237 $44(%rip) + WORD $0x38796ac2 // ldrb w2, [x22, x25] + WORD $0x7100345f // cmp w2, #13 + WORD $0x54000100 // b.eq LBB0_237 $32(%rip) + WORD $0x7100805f // cmp w2, #32 + WORD $0x540000c0 // b.eq LBB0_237 $24(%rip) + WORD $0x51002c4e // sub w14, w2, #11 + WORD $0x310009df // cmn w14, #2 + WORD $0x54000062 // b.hs LBB0_237 $12(%rip) + WORD $0xaa1903f8 // mov x24, x25 + WORD $0x14000031 // b LBB0_253 $196(%rip) +LBB0_237: + WORD $0x91000738 // add x24, x25, #1 + WORD $0xeb10031f // cmp x24, x16 + WORD $0x54000122 // b.hs LBB0_241 $36(%rip) + WORD $0x38786ac2 // ldrb w2, [x22, x24] + WORD $0x7100345f // cmp w2, #13 + WORD $0x540000c0 // b.eq LBB0_241 $24(%rip) + WORD $0x7100805f // cmp w2, #32 + WORD $0x54000080 // b.eq LBB0_241 $16(%rip) + WORD $0x51002c4e // sub w14, w2, #11 + WORD $0x310009df // cmn w14, #2 + WORD $0x540004c3 // b.lo LBB0_253 $152(%rip) +LBB0_241: + WORD $0x91000b38 // add x24, x25, #2 + WORD $0xeb10031f // cmp x24, x16 + WORD $0x54000122 // b.hs LBB0_245 $36(%rip) + WORD $0x38786ac2 // ldrb w2, [x22, x24] + WORD $0x7100345f // cmp w2, #13 + WORD $0x540000c0 // b.eq LBB0_245 $24(%rip) + WORD $0x7100805f // cmp w2, #32 + WORD $0x54000080 // b.eq LBB0_245 $16(%rip) + WORD $0x51002c4e // sub w14, w2, #11 + WORD $0x310009df // cmn w14, #2 + WORD $0x54000363 // b.lo LBB0_253 $108(%rip) +LBB0_245: + WORD $0x91000f38 // add x24, x25, #3 + WORD $0xeb10031f // cmp x24, x16 + WORD $0x54000122 // b.hs LBB0_249 $36(%rip) + WORD $0x38786ac2 // ldrb w2, [x22, x24] + WORD $0x7100345f // cmp w2, #13 + WORD $0x540000c0 // b.eq LBB0_249 $24(%rip) + WORD $0x7100805f // cmp w2, #32 + WORD $0x54000080 // b.eq LBB0_249 $16(%rip) + WORD $0x51002c4e // sub w14, w2, #11 + WORD $0x310009df // cmn w14, #2 + WORD $0x54000203 // b.lo LBB0_253 $64(%rip) +LBB0_249: + WORD $0x91001338 // add x24, x25, #4 + WORD $0xeb10031f // cmp x24, x16 + WORD $0x54016222 // b.hs LBB0_812 $11332(%rip) +LBB0_250: + WORD $0x38786ace // ldrb w14, [x22, x24] + WORD $0x710081df // cmp w14, #32 + WORD $0x9ace218e // lsl x14, x12, x14 + WORD $0x8a0d01ce // and x14, x14, x13 + WORD $0xfa4099c4 // ccmp x14, #0, #4, ls + WORD $0x540000a0 // b.eq LBB0_252 $20(%rip) + WORD $0x91000718 // add x24, x24, #1 + WORD $0xeb18021f // cmp x16, x24 + WORD $0x54ffff01 // b.ne LBB0_250 $-32(%rip) + WORD $0x14000b8f // b LBB0_842 $11836(%rip) +LBB0_252: + WORD $0xeb10031f // cmp x24, x16 + WORD $0x540171a2 // b.hs LBB0_842 $11828(%rip) +LBB0_253: + WORD $0x91000713 // add x19, x24, #1 + WORD $0xf9000033 // str x19, [x1] + WORD $0x38786ad0 // ldrb w16, [x22, x24] + WORD $0x7100b21f // cmp w16, #44 + WORD $0x54ff73c0 // b.eq LBB0_29 $-4488(%rip) + WORD $0x14000b85 // b LBB0_841 $11796(%rip) +LBB0_254: + WORD $0x91001270 // add x16, x19, #4 +LBB0_255: WORD $0xf940040e // ldr x14, [x0, #8] - WORD $0xeb0e005f // cmp x2, x14 - WORD $0x54ffd8a8 // b.hi LBB0_151 $-1260(%rip) - WORD $0xf9000022 // str x2, [x1] - WORD $0xaa0203f8 // mov x24, x2 - WORD $0x17fffec2 // b LBB0_151 $-1272(%rip) -LBB0_202: - WORD $0xd2800019 // mov x25, #0 - WORD $0x9280001e // mov lr, #-1 - WORD $0xaa1603f0 // mov x16, x22 -LBB0_203: - WORD $0xf100827b // subs x27, x19, #32 - WORD $0x54004903 // b.lo LBB0_289 $2336(%rip) - WORD $0xad405213 // ldp q19, q20, [x16] - WORD $0x6e208e75 // cmeq.16b v21, v19, v0 - WORD $0x6e208e96 // cmeq.16b v22, v20, v0 - WORD $0x6e238e73 // cmeq.16b v19, v19, v3 - WORD $0x6e238e94 // cmeq.16b v20, v20, v3 - WORD $0x4e211eb5 // and.16b v21, v21, v1 - WORD $0x4e0202b5 // tbl.16b v21, { v21 }, v2 - WORD $0x4e71bab5 // addv.8h h21, v21 - WORD $0x1e2602b3 // fmov w19, s21 - WORD $0x4e211ed5 // and.16b v21, v22, v1 - WORD $0x4e0202b5 // tbl.16b v21, { v21 }, v2 - WORD $0x4e71bab5 // addv.8h h21, v21 - WORD $0x1e2602ae // fmov w14, s21 - WORD $0x4e211e73 // and.16b v19, v19, v1 - WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 - WORD $0x4e71ba73 // addv.8h h19, v19 - WORD $0x1e260262 // fmov w2, s19 - WORD $0x4e211e93 // and.16b v19, v20, v1 - WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 - WORD $0x4e71ba73 // addv.8h h19, v19 - WORD $0x1e26026f // fmov w15, s19 - WORD $0x33103dd3 // bfi w19, w14, #16, #16 - WORD $0x33103de2 // bfi w2, w15, #16, #16 - WORD $0x35004642 // cbnz w2, LBB0_290 $2248(%rip) - WORD $0xb50046f9 // cbnz x25, LBB0_291 $2268(%rip) - WORD $0x3201f3e4 // mov w4, #-1431655766 - WORD $0xb4004873 // cbz x19, LBB0_292 $2316(%rip) -LBB0_207: - WORD $0xdac0026e // rbit x14, x19 - WORD $0xdac011ce // clz x14, x14 - WORD $0xcb15020f // sub x15, x16, x21 - WORD $0x8b0e01ee // add x14, x15, x14 + WORD $0xeb0e021f // cmp x16, x14 + WORD $0x54fff748 // b.hi LBB0_232 $-280(%rip) + WORD $0xf9000030 // str x16, [x1] + WORD $0xaa1003f9 // mov x25, x16 + WORD $0x17ffffb7 // b LBB0_232 $-292(%rip) +LBB0_257: + WORD $0x8b10026e // add x14, x19, x16 WORD $0x910005d9 // add x25, x14, #1 - WORD $0x17fffd6c // b LBB0_61 $-2640(%rip) -LBB0_208: + WORD $0x17ffffb4 // b LBB0_232 $-304(%rip) +LBB0_258: WORD $0xf9400402 // ldr x2, [x0, #8] - WORD $0xcb180053 // sub x19, x2, x24 - WORD $0xf100827f // cmp x19, #32 - WORD $0x540043eb // b.lt LBB0_288 $2172(%rip) - WORD $0xd2800013 // mov x19, #0 - WORD $0xd2800019 // mov x25, #0 - WORD $0x8b1602b7 // add x23, x21, x22 - WORD $0xcb160054 // sub x20, x2, x22 + WORD $0xcb190050 // sub x16, x2, x25 + WORD $0xf100821f // cmp x16, #32 + WORD $0x54002b6b // b.lt LBB0_297 $1388(%rip) + WORD $0xd2800010 // mov x16, #0 + WORD $0xd2800018 // mov x24, #0 + WORD $0x8b1302d7 // add x23, x22, x19 + WORD $0xcb130054 // sub x20, x2, x19 WORD $0x528003fa // mov w26, #31 -LBB0_210: - WORD $0x8b1302ee // add x14, x23, x19 +LBB0_260: + WORD $0x8b1002ee // add x14, x23, x16 WORD $0x3cc011d3 // ldur q19, [x14, #1] WORD $0x3cc111d4 // ldur q20, [x14, #17] WORD $0x6e208e75 // cmeq.16b v21, v19, v0 WORD $0x4e211eb5 // and.16b v21, v21, v1 WORD $0x4e0202b5 // tbl.16b v21, { v21 }, v2 WORD $0x4e71bab5 // addv.8h h21, v21 - WORD $0x1e2602a2 // fmov w2, s21 + WORD $0x1e2602a4 // fmov w4, s21 WORD $0x6e208e95 // cmeq.16b v21, v20, v0 WORD $0x4e211eb5 // and.16b v21, v21, v1 WORD $0x4e0202b5 // tbl.16b v21, { v21 }, v2 WORD $0x4e71bab5 // addv.8h h21, v21 WORD $0x1e2602ae // fmov w14, s21 - WORD $0x33103dc2 // bfi w2, w14, #16, #16 + WORD $0x33103dc4 // bfi w4, w14, #16, #16 WORD $0x6e238e73 // cmeq.16b v19, v19, v3 WORD $0x4e211e73 // and.16b v19, v19, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 - WORD $0x1e260267 // fmov w7, s19 + WORD $0x1e260262 // fmov w2, s19 WORD $0x6e238e93 // cmeq.16b v19, v20, v3 WORD $0x4e211e73 // and.16b v19, v19, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 WORD $0x1e26026e // fmov w14, s19 - WORD $0x33103dc7 // bfi w7, w14, #16, #16 - WORD $0x710000ff // cmp w7, #0 - WORD $0xfa400b20 // ccmp x25, #0, #0, eq - WORD $0x54000180 // b.eq LBB0_212 $48(%rip) - WORD $0x0a3900ee // bic w14, w7, w25 - WORD $0x2a0e072f // orr w15, w25, w14, lsl #1 - WORD $0x0a0400f0 // and w16, w7, w4 - WORD $0x0a2f0210 // bic w16, w16, w15 - WORD $0x2b0e020e // adds w14, w16, w14 - WORD $0x1a9f37f9 // cset w25, hs - WORD $0x4a0e062e // eor w14, w17, w14, lsl #1 + WORD $0x33103dc2 // bfi w2, w14, #16, #16 + WORD $0x7100005f // cmp w2, #0 + WORD $0xfa400b00 // ccmp x24, #0, #0, eq + WORD $0x54000180 // b.eq LBB0_262 $48(%rip) + WORD $0x0a38004e // bic w14, w2, w24 + WORD $0x2a0e070f // orr w15, w24, w14, lsl #1 + WORD $0x0a060051 // and w17, w2, w6 + WORD $0x0a2f0231 // bic w17, w17, w15 + WORD $0x2b0e022e // adds w14, w17, w14 + WORD $0x1a9f37f8 // cset w24, hs + WORD $0x4a0e04ae // eor w14, w5, w14, lsl #1 WORD $0x0a0f01ce // and w14, w14, w15 WORD $0x2a2e03ee // mvn w14, w14 - WORD $0x8a0201c2 // and x2, x14, x2 - WORD $0x14000002 // b LBB0_213 $8(%rip) -LBB0_212: - WORD $0xd2800019 // mov x25, #0 -LBB0_213: - WORD $0xb50022a2 // cbnz x2, LBB0_244 $1108(%rip) - WORD $0x91008273 // add x19, x19, #32 + WORD $0x8a0401c4 // and x4, x14, x4 + WORD $0x14000002 // b LBB0_263 $8(%rip) +LBB0_262: + WORD $0xd2800018 // mov x24, #0 +LBB0_263: + WORD $0xb50024c4 // cbnz x4, LBB0_295 $1176(%rip) + WORD $0x91008210 // add x16, x16, #32 WORD $0xd100835a // sub x26, x26, #32 WORD $0x8b1a028e // add x14, x20, x26 WORD $0xf100fddf // cmp x14, #63 - WORD $0x54fffa6c // b.gt LBB0_210 $-180(%rip) - WORD $0xb5004619 // cbnz x25, LBB0_307 $2240(%rip) - WORD $0x8b1602a8 // add x8, x21, x22 - WORD $0x8b130108 // add x8, x8, x19 + WORD $0x54fffa6c // b.gt LBB0_260 $-180(%rip) + WORD $0xb5002fd8 // cbnz x24, LBB0_316 $1528(%rip) + WORD $0x8b1302c8 // add x8, x22, x19 + WORD $0x8b100108 // add x8, x8, x16 WORD $0x91000508 // add x8, x8, #1 - WORD $0xaa3303ee // mvn x14, x19 - WORD $0x8b1401d3 // add x19, x14, x20 - WORD $0xf100067f // cmp x19, #1 - WORD $0x5400472a // b.ge LBB0_310 $2276(%rip) - WORD $0x14000246 // b LBB0_315 $2328(%rip) -LBB0_217: - WORD $0xd280001b // mov x27, #0 - WORD $0xd2800019 // mov x25, #0 - WORD $0xd2800016 // mov x22, #0 + WORD $0xaa3003ee // mvn x14, x16 + WORD $0x8b1401d0 // add x16, x14, x20 + WORD $0xf100061f // cmp x16, #1 + WORD $0x540030ea // b.ge LBB0_319 $1564(%rip) + WORD $0x14000194 // b LBB0_324 $1616(%rip) +LBB0_267: + WORD $0xd2800013 // mov x19, #0 + WORD $0xd280001a // mov x26, #0 WORD $0xd2800017 // mov x23, #0 + WORD $0xd2800018 // mov x24, #0 WORD $0xf940040e // ldr x14, [x0, #8] - WORD $0xcb1801da // sub x26, x14, x24 - WORD $0x8b1802b5 // add x21, x21, x24 - WORD $0x14000009 // b LBB0_219 $36(%rip) -LBB0_218: - WORD $0x937ffe7b // asr x27, x19, #63 - WORD $0x9e670293 // fmov d19, x20 - WORD $0x0e205a73 // cnt.8b v19, v19 - WORD $0x2e303a73 // uaddlv.8b h19, v19 - WORD $0x1e26026e // fmov w14, s19 - WORD $0x8b1601d6 // add x22, x14, x22 - WORD $0x910102b5 // add x21, x21, #64 - WORD $0xaa0a03fa // mov x26, x10 -LBB0_219: - WORD $0xf101034a // subs x10, x26, #64 - WORD $0x5400170b // b.lt LBB0_226 $736(%rip) -LBB0_220: - WORD $0xad4056b6 // ldp q22, q21, [x21] - WORD $0xad414eb4 // ldp q20, q19, [x21, #32] + WORD $0xcb1901ce // sub x14, x14, x25 + WORD $0x8b1902d6 // add x22, x22, x25 + WORD $0xf10101ca // subs x10, x14, #64 + WORD $0xf9000bee // str x14, [sp, #16] + WORD $0x5400074a // b.ge LBB0_285 $232(%rip) +LBB0_268: + WORD $0xf10001df // cmp x14, #0 + WORD $0x54002d0d // b.le LBB0_315 $1440(%rip) + WORD $0xad02c3f0 // stp q16, q16, [sp, #80] + WORD $0xad01c3f0 // stp q16, q16, [sp, #48] + WORD $0x92402ec8 // and x8, x22, #0xfff + WORD $0xf13f051f // cmp x8, #4033 + WORD $0x54000383 // b.lo LBB0_280 $112(%rip) + WORD $0xf9400be8 // ldr x8, [sp, #16] + WORD $0xf1008110 // subs x16, x8, #32 + WORD $0x540000a3 // b.lo LBB0_272 $20(%rip) + WORD $0xacc152d3 // ldp q19, q20, [x22], #32 + WORD $0xad01d3f3 // stp q19, q20, [sp, #48] + WORD $0xf94013e8 // ldr x8, [sp, #32] + WORD $0x14000003 // b LBB0_273 $12(%rip) +LBB0_272: + WORD $0x9100c3e8 // add x8, sp, #48 + WORD $0xf9400bf0 // ldr x16, [sp, #16] +LBB0_273: + WORD $0xf1004202 // subs x2, x16, #16 + WORD $0x54000343 // b.lo LBB0_281 $104(%rip) + WORD $0x3cc106d3 // ldr q19, [x22], #16 + WORD $0x3c810513 // str q19, [x8], #16 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xf1002042 // subs x2, x2, #8 + WORD $0x540002e2 // b.hs LBB0_282 $92(%rip) +LBB0_275: + WORD $0xf1001202 // subs x2, x16, #4 + WORD $0x54000343 // b.lo LBB0_283 $104(%rip) +LBB0_276: + WORD $0xb84046ce // ldr w14, [x22], #4 + WORD $0xb800450e // str w14, [x8], #4 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xf1000842 // subs x2, x2, #2 + WORD $0x540002e2 // b.hs LBB0_284 $92(%rip) +LBB0_277: + WORD $0xb4000070 // cbz x16, LBB0_279 $12(%rip) +LBB0_278: + WORD $0x394002ce // ldrb w14, [x22] + WORD $0x3900010e // strb w14, [x8] +LBB0_279: + WORD $0x9100c3f6 // add x22, sp, #48 +LBB0_280: + WORD $0xb201e3e8 // mov x8, #-8608480567731124088 + WORD $0x529ffff5 // mov w21, #65535 + WORD $0xa9427beb // ldp x11, lr, [sp, #32] + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0xf9400fe3 // ldr x3, [sp, #24] + WORD $0x1400000f // b LBB0_285 $60(%rip) +LBB0_281: + WORD $0xf1002202 // subs x2, x16, #8 + WORD $0x54fffd63 // b.lo LBB0_275 $-84(%rip) +LBB0_282: + WORD $0xf84086ce // ldr x14, [x22], #8 + WORD $0xf800850e // str x14, [x8], #8 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xf1001042 // subs x2, x2, #4 + WORD $0x54fffd02 // b.hs LBB0_276 $-96(%rip) +LBB0_283: + WORD $0xf1000a02 // subs x2, x16, #2 + WORD $0x54fffd63 // b.lo LBB0_277 $-84(%rip) +LBB0_284: + WORD $0x784026ce // ldrh w14, [x22], #2 + WORD $0x7800250e // strh w14, [x8], #2 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xb5fffd02 // cbnz x2, LBB0_278 $-96(%rip) + WORD $0x17ffffe9 // b LBB0_279 $-92(%rip) +LBB0_285: + WORD $0xad4056d6 // ldp q22, q21, [x22] + WORD $0xad414ed4 // ldp q20, q19, [x22, #32] WORD $0x6e238ed7 // cmeq.16b v23, v22, v3 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 @@ -1226,23 +1628,23 @@ LBB0_220: WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f020f // orr x15, x16, x15 - WORD $0xaa0e01e2 // orr x2, x15, x14 - WORD $0xaa19004e // orr x14, x2, x25 - WORD $0xb500008e // cbnz x14, LBB0_222 $16(%rip) - WORD $0xd2800019 // mov x25, #0 - WORD $0xd2800002 // mov x2, #0 - WORD $0x1400000a // b LBB0_223 $40(%rip) -LBB0_222: - WORD $0x8a39004e // bic x14, x2, x25 - WORD $0xaa0e072f // orr x15, x25, x14, lsl #1 - WORD $0x8a2f0050 // bic x16, x2, x15 + WORD $0xaa0e01f0 // orr x16, x15, x14 + WORD $0xaa1a020e // orr x14, x16, x26 + WORD $0xb500008e // cbnz x14, LBB0_287 $16(%rip) + WORD $0xd280001a // mov x26, #0 + WORD $0xd2800010 // mov x16, #0 + WORD $0x1400000a // b LBB0_288 $40(%rip) +LBB0_287: + WORD $0x8a3a020e // bic x14, x16, x26 + WORD $0xaa0e074f // orr x15, x26, x14, lsl #1 + WORD $0x8a2f0210 // bic x16, x16, x15 WORD $0x9201f210 // and x16, x16, #0xaaaaaaaaaaaaaaaa WORD $0xab0e020e // adds x14, x16, x14 - WORD $0x1a9f37f9 // cset w25, hs + WORD $0x1a9f37fa // cset w26, hs WORD $0xd37ff9ce // lsl x14, x14, #1 WORD $0xd200f1ce // eor x14, x14, #0x5555555555555555 - WORD $0x8a0f01c2 // and x2, x14, x15 -LBB0_223: + WORD $0x8a0f01d0 // and x16, x14, x15 +LBB0_288: WORD $0x6e208ed7 // cmeq.16b v23, v22, v0 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 @@ -1257,68 +1659,65 @@ LBB0_223: WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f0 // fmov w16, s23 + WORD $0x1e2602f1 // fmov w17, s23 WORD $0x6e208e77 // cmeq.16b v23, v19, v0 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f1 // fmov w17, s23 - WORD $0xd3607e10 // lsl x16, x16, #32 - WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 + WORD $0x1e2602e2 // fmov w2, s23 + WORD $0xd3607e31 // lsl x17, x17, #32 + WORD $0xaa02c231 // orr x17, x17, x2, lsl #48 WORD $0x53103def // lsl w15, w15, #16 - WORD $0xaa0f020f // orr x15, x16, x15 + WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0x8a2201ce // bic x14, x14, x2 + WORD $0x8a3001ce // bic x14, x14, x16 WORD $0x9200e1cf // and x15, x14, #0x1111111111111111 WORD $0x9203e1d0 // and x16, x14, #0x2222222222222222 WORD $0x9202e1d1 // and x17, x14, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 - WORD $0xb200e3f4 // mov x20, #1229782938247303441 - WORD $0x9b147de2 // mul x2, x15, x20 - WORD $0xb201e3e4 // mov x4, #-8608480567731124088 - WORD $0xf2e11104 // movk x4, #2184, lsl #48 - WORD $0x9b047e05 // mul x5, x16, x4 - WORD $0xca050042 // eor x2, x2, x5 - WORD $0xb202e3e7 // mov x7, #4919131752989213764 - WORD $0xf2e08887 // movk x7, #1092, lsl #48 + WORD $0xb200e3f9 // mov x25, #1229782938247303441 + WORD $0x9b197de2 // mul x2, x15, x25 + WORD $0x9b077e04 // mul x4, x16, x7 + WORD $0xca040042 // eor x2, x2, x4 + WORD $0x9b147e24 // mul x4, x17, x20 + WORD $0xb203e3e5 // mov x5, #2459565876494606882 + WORD $0xf2e04445 // movk x5, #546, lsl #48 + WORD $0x9b057dc5 // mul x5, x14, x5 + WORD $0xca050084 // eor x4, x4, x5 + WORD $0xca040042 // eor x2, x2, x4 + WORD $0xb203e3fb // mov x27, #2459565876494606882 + WORD $0x9b1b7de4 // mul x4, x15, x27 + WORD $0x9b197e05 // mul x5, x16, x25 + WORD $0xca050084 // eor x4, x4, x5 WORD $0x9b077e25 // mul x5, x17, x7 - WORD $0xb203e3e6 // mov x6, #2459565876494606882 - WORD $0xf2e04446 // movk x6, #546, lsl #48 - WORD $0x9b067dc6 // mul x6, x14, x6 + WORD $0x9b147dc6 // mul x6, x14, x20 WORD $0xca0600a5 // eor x5, x5, x6 - WORD $0xca050042 // eor x2, x2, x5 - WORD $0xb203e3fe // mov lr, #2459565876494606882 - WORD $0x9b1e7de5 // mul x5, x15, lr - WORD $0x9b147e06 // mul x6, x16, x20 + WORD $0xca050084 // eor x4, x4, x5 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0x9b147de5 // mul x5, x15, x20 + WORD $0x9b1b7e06 // mul x6, x16, x27 WORD $0xca0600a5 // eor x5, x5, x6 - WORD $0x9b047e26 // mul x6, x17, x4 + WORD $0x9b197e26 // mul x6, x17, x25 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 WORD $0x9b077dc7 // mul x7, x14, x7 WORD $0xca0700c6 // eor x6, x6, x7 WORD $0xca0600a5 // eor x5, x5, x6 - WORD $0xb202e3f8 // mov x24, #4919131752989213764 - WORD $0x9b187de6 // mul x6, x15, x24 - WORD $0x9b1e7e07 // mul x7, x16, lr - WORD $0xca0700c6 // eor x6, x6, x7 - WORD $0x9b147e27 // mul x7, x17, x20 - WORD $0x9b047dd3 // mul x19, x14, x4 - WORD $0xca1300e7 // eor x7, x7, x19 - WORD $0xca0700c6 // eor x6, x6, x7 - WORD $0xb201e3e4 // mov x4, #-8608480567731124088 - WORD $0x9b047def // mul x15, x15, x4 - WORD $0x9b187e10 // mul x16, x16, x24 + WORD $0x9b087def // mul x15, x15, x8 + WORD $0x9b147e10 // mul x16, x16, x20 WORD $0xca1001ef // eor x15, x15, x16 - WORD $0x9b1e7e30 // mul x16, x17, lr - WORD $0x9b147dce // mul x14, x14, x20 + WORD $0x9b1b7e30 // mul x16, x17, x27 + WORD $0x9b197dce // mul x14, x14, x25 WORD $0xca0e020e // eor x14, x16, x14 WORD $0xca0e01ee // eor x14, x15, x14 WORD $0x9200e04f // and x15, x2, #0x1111111111111111 - WORD $0x9203e0b0 // and x16, x5, #0x2222222222222222 - WORD $0x9202e0d1 // and x17, x6, #0x4444444444444444 + WORD $0x9203e090 // and x16, x4, #0x2222222222222222 + WORD $0x9202e0b1 // and x17, x5, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 WORD $0xaa1001ef // orr x15, x15, x16 WORD $0xaa0e022e // orr x14, x17, x14 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xca1b01d3 // eor x19, x14, x27 + WORD $0xca1301d0 // eor x16, x14, x19 WORD $0x6e278ed7 // cmeq.16b v23, v22, v7 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 @@ -1333,18 +1732,18 @@ LBB0_223: WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f0 // fmov w16, s23 + WORD $0x1e2602f1 // fmov w17, s23 WORD $0x6e278e77 // cmeq.16b v23, v19, v7 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f1 // fmov w17, s23 - WORD $0xd3607e10 // lsl x16, x16, #32 - WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 + WORD $0x1e2602e2 // fmov w2, s23 + WORD $0xd3607e31 // lsl x17, x17, #32 + WORD $0xaa02c231 // orr x17, x17, x2, lsl #48 WORD $0x53103def // lsl w15, w15, #16 - WORD $0xaa0f020f // orr x15, x16, x15 + WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0x8a3301d4 // bic x20, x14, x19 + WORD $0x8a3001d4 // bic x20, x14, x16 WORD $0x6e268ed6 // cmeq.16b v22, v22, v6 WORD $0x4e211ed6 // and.16b v22, v22, v1 WORD $0x4e0202d6 // tbl.16b v22, { v22 }, v2 @@ -1359,643 +1758,396 @@ LBB0_223: WORD $0x4e211e94 // and.16b v20, v20, v1 WORD $0x4e020294 // tbl.16b v20, { v20 }, v2 WORD $0x4e71ba94 // addv.8h h20, v20 - WORD $0x1e260290 // fmov w16, s20 + WORD $0x1e260291 // fmov w17, s20 WORD $0x6e268e73 // cmeq.16b v19, v19, v6 WORD $0x4e211e73 // and.16b v19, v19, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 - WORD $0x1e260271 // fmov w17, s19 - WORD $0xd3607e10 // lsl x16, x16, #32 - WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 + WORD $0x1e260262 // fmov w2, s19 + WORD $0xd3607e31 // lsl x17, x17, #32 + WORD $0xaa02c231 // orr x17, x17, x2, lsl #48 WORD $0x53103def // lsl w15, w15, #16 - WORD $0xaa0f020f // orr x15, x16, x15 + WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xea3301c2 // bics x2, x14, x19 - WORD $0x54ffe9a0 // b.eq LBB0_218 $-716(%rip) -LBB0_224: - WORD $0xd1000447 // sub x7, x2, #1 - WORD $0x8a1400ee // and x14, x7, x20 + WORD $0xea3001c4 // bics x4, x14, x16 + WORD $0x54000220 // b.eq LBB0_292 $68(%rip) + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 +LBB0_290: + WORD $0xd1000482 // sub x2, x4, #1 + WORD $0x8a14004e // and x14, x2, x20 WORD $0x9e6701d3 // fmov d19, x14 WORD $0x0e205a73 // cnt.8b v19, v19 WORD $0x2e303a73 // uaddlv.8b h19, v19 WORD $0x1e26026e // fmov w14, s19 - WORD $0x8b1601ce // add x14, x14, x22 - WORD $0xeb1701df // cmp x14, x23 - WORD $0x540006e9 // b.ls LBB0_243 $220(%rip) - WORD $0x910006f7 // add x23, x23, #1 - WORD $0xea0200e2 // ands x2, x7, x2 - WORD $0x54fffea1 // b.ne LBB0_224 $-44(%rip) - WORD $0x17ffff40 // b LBB0_218 $-768(%rip) -LBB0_226: - WORD $0xf100035f // cmp x26, #0 - WORD $0x54002b6d // b.le LBB0_306 $1388(%rip) - WORD $0xad0243f0 // stp q16, q16, [sp, #64] - WORD $0xad0143f0 // stp q16, q16, [sp, #32] - WORD $0x92402ea8 // and x8, x21, #0xfff - WORD $0xf13f051f // cmp x8, #4033 - WORD $0x54000363 // b.lo LBB0_238 $108(%rip) - WORD $0xf1008353 // subs x19, x26, #32 - WORD $0x540000a3 // b.lo LBB0_230 $20(%rip) - WORD $0xacc152b3 // ldp q19, q20, [x21], #32 - WORD $0xad0153f3 // stp q19, q20, [sp, #32] - WORD $0xf9400be8 // ldr x8, [sp, #16] - WORD $0x14000003 // b LBB0_231 $12(%rip) -LBB0_230: - WORD $0x910083e8 // add x8, sp, #32 - WORD $0xaa1a03f3 // mov x19, x26 -LBB0_231: - WORD $0xf1004262 // subs x2, x19, #16 - WORD $0x54000283 // b.lo LBB0_239 $80(%rip) - WORD $0x3cc106b3 // ldr q19, [x21], #16 - WORD $0x3c810513 // str q19, [x8], #16 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xf1002042 // subs x2, x2, #8 - WORD $0x54000222 // b.hs LBB0_240 $68(%rip) -LBB0_233: - WORD $0xf1001262 // subs x2, x19, #4 - WORD $0x54000283 // b.lo LBB0_241 $80(%rip) -LBB0_234: - WORD $0xb84046ae // ldr w14, [x21], #4 - WORD $0xb800450e // str w14, [x8], #4 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xf1000842 // subs x2, x2, #2 - WORD $0x54000222 // b.hs LBB0_242 $68(%rip) -LBB0_235: - WORD $0xb4000073 // cbz x19, LBB0_237 $12(%rip) -LBB0_236: - WORD $0x394002ae // ldrb w14, [x21] - WORD $0x3900010e // strb w14, [x8] -LBB0_237: - WORD $0x910083f5 // add x21, sp, #32 -LBB0_238: - WORD $0x529fffe8 // mov w8, #65535 - WORD $0xa940afe3 // ldp x3, x11, [sp, #8] - WORD $0x17ffff26 // b LBB0_220 $-872(%rip) -LBB0_239: - WORD $0xf1002262 // subs x2, x19, #8 - WORD $0x54fffe23 // b.lo LBB0_233 $-60(%rip) -LBB0_240: - WORD $0xf84086ae // ldr x14, [x21], #8 - WORD $0xf800850e // str x14, [x8], #8 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xf1001042 // subs x2, x2, #4 - WORD $0x54fffdc2 // b.hs LBB0_234 $-72(%rip) -LBB0_241: - WORD $0xf1000a62 // subs x2, x19, #2 - WORD $0x54fffe23 // b.lo LBB0_235 $-60(%rip) -LBB0_242: - WORD $0x784026ae // ldrh w14, [x21], #2 - WORD $0x7800250e // strh w14, [x8], #2 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xb5fffdc2 // cbnz x2, LBB0_236 $-72(%rip) - WORD $0x17ffffef // b LBB0_237 $-68(%rip) -LBB0_243: + WORD $0x8b1701ce // add x14, x14, x23 + WORD $0xeb1801df // cmp x14, x24 + WORD $0x540002a9 // b.ls LBB0_294 $84(%rip) + WORD $0x91000718 // add x24, x24, #1 + WORD $0xea040044 // ands x4, x2, x4 + WORD $0x54fffea1 // b.ne LBB0_290 $-44(%rip) + WORD $0x14000003 // b LBB0_293 $12(%rip) +LBB0_292: + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 +LBB0_293: + WORD $0x937ffe13 // asr x19, x16, #63 + WORD $0x9e670293 // fmov d19, x20 + WORD $0x0e205a73 // cnt.8b v19, v19 + WORD $0x2e303a73 // uaddlv.8b h19, v19 + WORD $0x1e26026e // fmov w14, s19 + WORD $0x8b1701d7 // add x23, x14, x23 + WORD $0x910102d6 // add x22, x22, #64 + WORD $0xaa0a03ee // mov x14, x10 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0xf101014a // subs x10, x10, #64 + WORD $0xf9000bee // str x14, [sp, #16] + WORD $0x54ffe76a // b.ge LBB0_285 $-788(%rip) + WORD $0x17ffff01 // b LBB0_268 $-1020(%rip) +LBB0_294: WORD $0xf940040e // ldr x14, [x0, #8] - WORD $0xdac0004f // rbit x15, x2 + WORD $0xdac0008f // rbit x15, x4 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1a01ef // sub x15, x15, x26 + WORD $0xf9400bea // ldr x10, [sp, #16] + WORD $0xcb0a01ef // sub x15, x15, x10 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910005cf // add x15, x14, #1 WORD $0xf900002f // str x15, [x1] WORD $0xf9400410 // ldr x16, [x0, #8] WORD $0xeb1001ff // cmp x15, x16 - WORD $0x9a8e2618 // csinc x24, x16, x14, hs - WORD $0x14000006 // b LBB0_245 $24(%rip) -LBB0_244: - WORD $0xdac0004e // rbit x14, x2 + WORD $0x9a8e2619 // csinc x25, x16, x14, hs + WORD $0xf9000039 // str x25, [x1] + WORD $0x17fffe5d // b LBB0_232 $-1676(%rip) +LBB0_295: + WORD $0xdac0008e // rbit x14, x4 WORD $0xdac011ce // clz x14, x14 - WORD $0x8b1302cf // add x15, x22, x19 + WORD $0x8b10026f // add x15, x19, x16 WORD $0x8b0f01ce // add x14, x14, x15 - WORD $0x910009d8 // add x24, x14, #2 -LBB0_245: - WORD $0xf9000038 // str x24, [x1] - WORD $0xf9400ff0 // ldr x16, [sp, #24] - WORD $0x17fffd4e // b LBB0_151 $-2760(%rip) -LBB0_246: - WORD $0xf9000038 // str x24, [x1] - WORD $0x17fffd4c // b LBB0_151 $-2768(%rip) -LBB0_247: - WORD $0xf90013ff // str xzr, [sp, #32] - WORD $0x8b1902a8 // add x8, x21, x25 - WORD $0xd1000517 // sub x23, x8, #1 - WORD $0x8b1a031b // add x27, x24, x26 - WORD $0xeb1702df // cmp x22, x23 - WORD $0x54001882 // b.hs LBB0_285 $784(%rip) - WORD $0xf100075f // cmp x26, #1 - WORD $0x5400184b // b.lt LBB0_285 $776(%rip) -LBB0_249: - WORD $0x394002c8 // ldrb w8, [x22] - WORD $0x7101711f // cmp w8, #92 - WORD $0x540001e1 // b.ne LBB0_254 $60(%rip) - WORD $0xcb1602f4 // sub x20, x23, x22 - WORD $0xf100069f // cmp x20, #1 - WORD $0x5401a7cb // b.lt LBB0_935 $13560(%rip) - WORD $0x394006c8 // ldrb w8, [x22, #1] -Lloh10: - WORD $0x1001adee // adr x14, __UnquoteTab $13756(%rip) -Lloh11: - WORD $0x910001ce // add x14, x14, __UnquoteTab@PAGEOFF $0(%rip) - WORD $0x386869c8 // ldrb w8, [x14, x8] - WORD $0x7103fd1f // cmp w8, #255 - WORD $0x54000180 // b.eq LBB0_256 $48(%rip) - WORD $0x3401a668 // cbz w8, LBB0_933 $13516(%rip) - WORD $0x390083e8 // strb w8, [sp, #32] - WORD $0x91000ad6 // add x22, x22, #2 - WORD $0x52800028 // mov w8, #1 - WORD $0x14000045 // b LBB0_265 $276(%rip) -LBB0_254: - WORD $0x3940030e // ldrb w14, [x24] - WORD $0x6b0e011f // cmp w8, w14 - WORD $0x540016a1 // b.ne LBB0_287 $724(%rip) - WORD $0x910006d6 // add x22, x22, #1 - WORD $0x91000718 // add x24, x24, #1 - WORD $0x14000050 // b LBB0_271 $320(%rip) -LBB0_256: - WORD $0xf100129f // cmp x20, #4 - WORD $0x5401a543 // b.lo LBB0_934 $13480(%rip) - WORD $0xb84022c8 // ldur w8, [x22, #2] - WORD $0x0b0a010e // add w14, w8, w10 - WORD $0x3201c3ef // mov w15, #-2139062144 - WORD $0x0a2801e2 // bic w2, w15, w8 - WORD $0x6a0e005f // tst w2, w14 - WORD $0x5401a3c1 // b.ne LBB0_931 $13432(%rip) - WORD $0x5283232e // mov w14, #6425 - WORD $0x72a3232e // movk w14, #6425, lsl #16 - WORD $0x0b0e010e // add w14, w8, w14 - WORD $0x2a0801ce // orr w14, w14, w8 - WORD $0x3201c3f0 // mov w16, #-2139062144 - WORD $0x6a0f01df // tst w14, w15 - WORD $0x5401a2e1 // b.ne LBB0_931 $13404(%rip) - WORD $0x3200dbee // mov w14, #2139062143 - WORD $0x0a0e0107 // and w7, w8, w14 - WORD $0x4b07006e // sub w14, w3, w7 - WORD $0x5288c8cf // mov w15, #17990 - WORD $0x72a8c8cf // movk w15, #17990, lsl #16 - WORD $0x0b0f00ef // add w15, w7, w15 - WORD $0x0a0e01ee // and w14, w15, w14 - WORD $0x6a0201df // tst w14, w2 - WORD $0x5401a1c1 // b.ne LBB0_931 $13368(%rip) - WORD $0x4b07016e // sub w14, w11, w7 - WORD $0x5287272f // mov w15, #14649 - WORD $0x72a7272f // movk w15, #14649, lsl #16 - WORD $0x0b0f00ef // add w15, w7, w15 - WORD $0x0a0e01ee // and w14, w15, w14 - WORD $0x6a0201df // tst w14, w2 - WORD $0x5401a0e1 // b.ne LBB0_931 $13340(%rip) - WORD $0x5ac00908 // rev w8, w8 - WORD $0x3200c3ee // mov w14, #16843009 - WORD $0x0a6811ce // bic w14, w14, w8, lsr #4 - WORD $0x0b0e0dce // add w14, w14, w14, lsl #3 - WORD $0x3200cfef // mov w15, #252645135 - WORD $0x0a0f0108 // and w8, w8, w15 - WORD $0x0b0801c8 // add w8, w14, w8 - WORD $0x2a481108 // orr w8, w8, w8, lsr #4 - WORD $0x53087d0e // lsr w14, w8, #8 - WORD $0x12181dc2 // and w2, w14, #0xff00 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0x33001d13 // bfxil w19, w8, #0, #8 - WORD $0x91001ada // add x26, x22, #6 - WORD $0x7101fe7f // cmp w19, #127 - WORD $0x540004e9 // b.ls LBB0_273 $156(%rip) - WORD $0x711ffe7f // cmp w19, #2047 - WORD $0x54000529 // b.ls LBB0_274 $164(%rip) - WORD $0x5140384e // sub w14, w2, #14, lsl #12 - WORD $0x312005df // cmn w14, #2049 - WORD $0x540005e8 // b.hi LBB0_275 $188(%rip) - WORD $0x530c7c4e // lsr w14, w2, #12 - WORD $0x321b09ce // orr w14, w14, #0xe0 - WORD $0x390083ee // strb w14, [sp, #32] - WORD $0x5280100e // mov w14, #128 - WORD $0x33062e6e // bfxil w14, w19, #6, #6 - WORD $0x390087ee // strb w14, [sp, #33] - WORD $0x5280100e // mov w14, #128 - WORD $0x3300150e // bfxil w14, w8, #0, #6 - WORD $0x39008bee // strb w14, [sp, #34] - WORD $0xaa1a03f6 // mov x22, x26 - WORD $0x52800068 // mov w8, #3 -LBB0_265: - WORD $0x910083e2 // add x2, sp, #32 - WORD $0xaa080048 // orr x8, x2, x8 - WORD $0xeb1b031f // cmp x24, x27 - WORD $0x54000182 // b.hs LBB0_270 $48(%rip) - WORD $0x910083e2 // add x2, sp, #32 -LBB0_267: - WORD $0x3940030e // ldrb w14, [x24] - WORD $0x3940004f // ldrb w15, [x2] - WORD $0x6b0f01df // cmp w14, w15 - WORD $0x540000e1 // b.ne LBB0_270 $28(%rip) - WORD $0x91000718 // add x24, x24, #1 - WORD $0x91000442 // add x2, x2, #1 - WORD $0xeb1b031f // cmp x24, x27 - WORD $0x54000062 // b.hs LBB0_270 $12(%rip) - WORD $0xeb08005f // cmp x2, x8 - WORD $0x54fffee3 // b.lo LBB0_267 $-36(%rip) -LBB0_270: - WORD $0xeb08005f // cmp x2, x8 - WORD $0x54000c61 // b.ne LBB0_287 $396(%rip) -LBB0_271: - WORD $0xeb1702df // cmp x22, x23 - WORD $0x54000b42 // b.hs LBB0_285 $360(%rip) - WORD $0xeb1b031f // cmp x24, x27 - WORD $0x54fff2e3 // b.lo LBB0_249 $-420(%rip) - WORD $0x14000057 // b LBB0_285 $348(%rip) -LBB0_273: - WORD $0x390083e8 // strb w8, [sp, #32] - WORD $0xaa1a03f6 // mov x22, x26 - WORD $0x52800028 // mov w8, #1 - WORD $0x17ffffe7 // b LBB0_265 $-100(%rip) -LBB0_274: - WORD $0x53067e6e // lsr w14, w19, #6 - WORD $0x321a05ce // orr w14, w14, #0xc0 - WORD $0x390083ee // strb w14, [sp, #32] - WORD $0x5280100e // mov w14, #128 - WORD $0x3300150e // bfxil w14, w8, #0, #6 - WORD $0x390087ee // strb w14, [sp, #33] - WORD $0xaa1a03f6 // mov x22, x26 - WORD $0x52800048 // mov w8, #2 - WORD $0x17ffffde // b LBB0_265 $-136(%rip) -LBB0_275: - WORD $0x92800068 // mov x8, #-4 - WORD $0xf1001a9f // cmp x20, #6 - WORD $0x54019ec3 // b.lo LBB0_948 $13272(%rip) - WORD $0x530a7e6e // lsr w14, w19, #10 - WORD $0x7100d9df // cmp w14, #54 - WORD $0x54019e68 // b.hi LBB0_948 $13260(%rip) - WORD $0x39400348 // ldrb w8, [x26] - WORD $0x7101711f // cmp w8, #92 - WORD $0x54019da1 // b.ne LBB0_947 $13236(%rip) - WORD $0x39401ec8 // ldrb w8, [x22, #7] - WORD $0x7101d51f // cmp w8, #117 - WORD $0x54019d41 // b.ne LBB0_947 $13224(%rip) - WORD $0xb9400ac8 // ldr w8, [x22, #8] - WORD $0x0b0a010e // add w14, w8, w10 - WORD $0x0a280202 // bic w2, w16, w8 - WORD $0x6a0e005f // tst w2, w14 - WORD $0x54019c61 // b.ne LBB0_946 $13196(%rip) - WORD $0x5283232e // mov w14, #6425 - WORD $0x72a3232e // movk w14, #6425, lsl #16 - WORD $0x0b0e010e // add w14, w8, w14 - WORD $0x2a0801ce // orr w14, w14, w8 - WORD $0x6a1001df // tst w14, w16 - WORD $0x54019ba1 // b.ne LBB0_946 $13172(%rip) - WORD $0x3200dbee // mov w14, #2139062143 - WORD $0x0a0e0107 // and w7, w8, w14 - WORD $0x4b07006e // sub w14, w3, w7 - WORD $0x5288c8cf // mov w15, #17990 - WORD $0x72a8c8cf // movk w15, #17990, lsl #16 - WORD $0x0b0f00ef // add w15, w7, w15 - WORD $0x0a0e01ee // and w14, w15, w14 - WORD $0x6a0201df // tst w14, w2 - WORD $0x54019a81 // b.ne LBB0_946 $13136(%rip) - WORD $0x4b07016e // sub w14, w11, w7 - WORD $0x5287272f // mov w15, #14649 - WORD $0x72a7272f // movk w15, #14649, lsl #16 - WORD $0x0b0f00ef // add w15, w7, w15 - WORD $0x0a0e01ee // and w14, w15, w14 - WORD $0x6a0201df // tst w14, w2 - WORD $0x540199a1 // b.ne LBB0_946 $13108(%rip) - WORD $0x5ac00908 // rev w8, w8 - WORD $0x3200c3ee // mov w14, #16843009 - WORD $0x0a6811ce // bic w14, w14, w8, lsr #4 - WORD $0x0b0e0dce // add w14, w14, w14, lsl #3 - WORD $0x3200cfef // mov w15, #252645135 - WORD $0x0a0f0108 // and w8, w8, w15 - WORD $0x0b0801c8 // add w8, w14, w8 - WORD $0x2a481108 // orr w8, w8, w8, lsr #4 - WORD $0x53087d0e // lsr w14, w8, #8 - WORD $0x12181dc2 // and w2, w14, #0xff00 - WORD $0x5140384e // sub w14, w2, #14, lsl #12 - WORD $0x311001df // cmn w14, #1024 - WORD $0x540198e3 // b.lo LBB0_949 $13084(%rip) - WORD $0x12001d0e // and w14, w8, #0xff - WORD $0x2a1329ce // orr w14, w14, w19, lsl #10 - WORD $0x5284800f // mov w15, #9216 - WORD $0x72bf940f // movk w15, #64672, lsl #16 - WORD $0x0b0f004f // add w15, w2, w15 - WORD $0x0b0f01ce // add w14, w14, w15 - WORD $0x53127dcf // lsr w15, w14, #18 - WORD $0x321c0def // orr w15, w15, #0xf0 - WORD $0x390083ef // strb w15, [sp, #32] - WORD $0x5280100f // mov w15, #128 - WORD $0x330c45cf // bfxil w15, w14, #12, #6 - WORD $0x390087ef // strb w15, [sp, #33] - WORD $0x5280100f // mov w15, #128 - WORD $0x33062dcf // bfxil w15, w14, #6, #6 - WORD $0x39008bef // strb w15, [sp, #34] - WORD $0x5280100e // mov w14, #128 - WORD $0x3300150e // bfxil w14, w8, #0, #6 - WORD $0x39008fee // strb w14, [sp, #35] - WORD $0x910032d6 // add x22, x22, #12 - WORD $0x52800088 // mov w8, #4 - WORD $0x17ffff95 // b LBB0_265 $-428(%rip) -LBB0_285: - WORD $0xeb1702df // cmp x22, x23 - WORD $0xfa5b0300 // ccmp x24, x27, #0, eq - WORD $0x1a9f17f3 // cset w19, eq -LBB0_286: - WORD $0x529fffe8 // mov w8, #65535 - WORD $0x3200f3f1 // mov w17, #1431655765 - WORD $0x3201f3e4 // mov w4, #-1431655766 - WORD $0x17fffb74 // b LBB0_71 $-4656(%rip) -LBB0_287: - WORD $0xd2800013 // mov x19, #0 - WORD $0x17fffffb // b LBB0_286 $-20(%rip) -LBB0_288: - WORD $0x8b1802a8 // add x8, x21, x24 - WORD $0xf100067f // cmp x19, #1 - WORD $0x54000a6a // b.ge LBB0_310 $332(%rip) - WORD $0x14000060 // b LBB0_315 $384(%rip) -LBB0_289: - WORD $0x3201f3e4 // mov w4, #-1431655766 - WORD $0x14000017 // b LBB0_293 $92(%rip) -LBB0_290: - WORD $0xdac00048 // rbit x8, x2 + WORD $0x910009d9 // add x25, x14, #2 +LBB0_296: + WORD $0xf9000039 // str x25, [x1] + WORD $0x17fffe56 // b LBB0_232 $-1704(%rip) +LBB0_297: + WORD $0x8b1902c8 // add x8, x22, x25 + WORD $0xf100061f // cmp x16, #1 + WORD $0x54000caa // b.ge LBB0_319 $404(%rip) + WORD $0x14000072 // b LBB0_324 $456(%rip) +LBB0_298: + WORD $0xf94013eb // ldr x11, [sp, #32] + WORD $0x1400001b // b LBB0_302 $108(%rip) +LBB0_299: + WORD $0xdac00088 // rbit x8, x4 WORD $0xdac01108 // clz x8, x8 - WORD $0xcb15020e // sub x14, x16, x21 + WORD $0xcb16022e // sub x14, x17, x22 WORD $0x8b0801c8 // add x8, x14, x8 - WORD $0xb10007df // cmn lr, #1 - WORD $0x9a8813de // csel lr, lr, x8, ne -LBB0_291: - WORD $0x0a390048 // bic w8, w2, w25 + WORD $0xb100067f // cmn x19, #1 + WORD $0x9a881273 // csel x19, x19, x8, ne +LBB0_300: + WORD $0x0a3a0088 // bic w8, w4, w26 WORD $0x531f790e // lsl w14, w8, #1 - WORD $0x331f7919 // bfi w25, w8, #1, #31 - WORD $0x0a2e004e // bic w14, w2, w14 + WORD $0x331f791a // bfi w26, w8, #1, #31 + WORD $0x0a2e008e // bic w14, w4, w14 WORD $0x1201f1ce // and w14, w14, #0xaaaaaaaa WORD $0x2b0801c8 // adds w8, w14, w8 - WORD $0x4a080488 // eor w8, w4, w8, lsl #1 - WORD $0x0a190108 // and w8, w8, w25 - WORD $0x1a9f37f9 // cset w25, hs + WORD $0x4a080568 // eor w8, w11, w8, lsl #1 + WORD $0x0a1a0108 // and w8, w8, w26 + WORD $0x1a9f37fa // cset w26, hs WORD $0x2a2803e8 // mvn w8, w8 - WORD $0x8a130113 // and x19, x8, x19 - WORD $0x529fffe8 // mov w8, #65535 - WORD $0x3201f3e4 // mov w4, #-1431655766 - WORD $0xb5ffb7f3 // cbnz x19, LBB0_207 $-2308(%rip) -LBB0_292: - WORD $0x91008210 // add x16, x16, #32 - WORD $0xaa1b03f3 // mov x19, x27 -LBB0_293: - WORD $0xb50003b9 // cbnz x25, LBB0_304 $116(%rip) - WORD $0xb4000333 // cbz x19, LBB0_302 $100(%rip) -LBB0_295: - WORD $0xaa3503ee // mvn x14, x21 -LBB0_296: - WORD $0xaa1003fb // mov x27, x16 - WORD $0x38401779 // ldrb w25, [x27], #1 - WORD $0x71008b3f // cmp w25, #34 - WORD $0x540002a0 // b.eq LBB0_303 $84(%rip) - WORD $0xd1000662 // sub x2, x19, #1 - WORD $0x7101733f // cmp w25, #92 - WORD $0x540000a0 // b.eq LBB0_299 $20(%rip) - WORD $0xaa1b03f0 // mov x16, x27 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xb5fffee2 // cbnz x2, LBB0_296 $-36(%rip) - WORD $0x1400000b // b LBB0_301 $44(%rip) -LBB0_299: - WORD $0xb4017f22 // cbz x2, LBB0_909 $12260(%rip) - WORD $0x8b0e0368 // add x8, x27, x14 - WORD $0xb10007df // cmn lr, #1 - WORD $0x9a9e011e // csel lr, x8, lr, eq - WORD $0x91000a10 // add x16, x16, #2 - WORD $0xd1000a62 // sub x2, x19, #2 - WORD $0x529fffe8 // mov w8, #65535 - WORD $0x3201f3e4 // mov w4, #-1431655766 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xb5fffd82 // cbnz x2, LBB0_296 $-80(%rip) + WORD $0x8a140114 // and x20, x8, x20 + WORD $0xb201e3e8 // mov x8, #-8608480567731124088 + WORD $0x529ffff5 // mov w21, #65535 + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0xf94013eb // ldr x11, [sp, #32] + WORD $0xb5ff6c54 // cbnz x20, LBB0_91 $-4728(%rip) LBB0_301: - WORD $0x71008b3f // cmp w25, #34 - WORD $0x54017dc1 // b.ne LBB0_909 $12216(%rip) + WORD $0x91008231 // add x17, x17, #32 + WORD $0xaa1e03f4 // mov x20, lr LBB0_302: - WORD $0xaa1003fb // mov x27, x16 -LBB0_303: - WORD $0xcb150379 // sub x25, x27, x21 - WORD $0x17fffb11 // b LBB0_61 $-5052(%rip) + WORD $0xb50004da // cbnz x26, LBB0_313 $152(%rip) + WORD $0xb40003b4 // cbz x20, LBB0_311 $116(%rip) LBB0_304: - WORD $0xb4017d53 // cbz x19, LBB0_909 $12200(%rip) - WORD $0xaa3503e8 // mvn x8, x21 - WORD $0x8b080208 // add x8, x16, x8 - WORD $0xb10007df // cmn lr, #1 - WORD $0x9a9e011e // csel lr, x8, lr, eq - WORD $0x91000610 // add x16, x16, #1 - WORD $0xd1000673 // sub x19, x19, #1 - WORD $0x529fffe8 // mov w8, #65535 - WORD $0xb5fffbb3 // cbnz x19, LBB0_295 $-140(%rip) - WORD $0x17fffff4 // b LBB0_302 $-48(%rip) -LBB0_306: - WORD $0xf9400418 // ldr x24, [x0, #8] - WORD $0x1400001e // b LBB0_314 $120(%rip) -LBB0_307: + WORD $0xaa3603ee // mvn x14, x22 +LBB0_305: + WORD $0xaa1103fe // mov lr, x17 + WORD $0x384017da // ldrb w26, [lr], #1 + WORD $0x71008b5f // cmp w26, #34 + WORD $0x54000320 // b.eq LBB0_312 $100(%rip) + WORD $0xd1000684 // sub x4, x20, #1 + WORD $0x7101735f // cmp w26, #92 + WORD $0x540000a0 // b.eq LBB0_308 $20(%rip) + WORD $0xaa1e03f1 // mov x17, lr + WORD $0xaa0403f4 // mov x20, x4 + WORD $0xb5fffee4 // cbnz x4, LBB0_305 $-36(%rip) + WORD $0x1400000f // b LBB0_310 $60(%rip) +LBB0_308: + WORD $0xb4018e24 // cbz x4, LBB0_925 $12740(%rip) + WORD $0x8b0e03c8 // add x8, lr, x14 + WORD $0xb100067f // cmn x19, #1 + WORD $0x9a930113 // csel x19, x8, x19, eq + WORD $0x91000a31 // add x17, x17, #2 + WORD $0xd1000a84 // sub x4, x20, #2 + WORD $0xb201e3e8 // mov x8, #-8608480567731124088 + WORD $0x529ffff5 // mov w21, #65535 + WORD $0xf94013eb // ldr x11, [sp, #32] + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0xaa0403f4 // mov x20, x4 + WORD $0xb5fffd04 // cbnz x4, LBB0_305 $-96(%rip) +LBB0_310: + WORD $0x71008b5f // cmp w26, #34 + WORD $0x54018c41 // b.ne LBB0_925 $12680(%rip) +LBB0_311: + WORD $0xaa1103fe // mov lr, x17 +LBB0_312: + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0xcb1603da // sub x26, lr, x22 + WORD $0x3200f3e5 // mov w5, #1431655765 + WORD $0xf94017fe // ldr lr, [sp, #40] + WORD $0xb6ff537a // tbz x26, #63, LBB0_61 $-5524(%rip) + WORD $0x14000c5a // b LBB0_925 $12648(%rip) +LBB0_313: + WORD $0xb4018b34 // cbz x20, LBB0_925 $12644(%rip) + WORD $0xaa3603e8 // mvn x8, x22 + WORD $0x8b080228 // add x8, x17, x8 + WORD $0xb100067f // cmn x19, #1 + WORD $0x9a930113 // csel x19, x8, x19, eq + WORD $0x91000631 // add x17, x17, #1 + WORD $0xd1000694 // sub x20, x20, #1 + WORD $0xb201e3e8 // mov x8, #-8608480567731124088 + WORD $0x529ffff5 // mov w21, #65535 + WORD $0xf94013eb // ldr x11, [sp, #32] + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0xb5fff9f4 // cbnz x20, LBB0_304 $-196(%rip) + WORD $0x17ffffea // b LBB0_311 $-88(%rip) +LBB0_315: + WORD $0xf9400419 // ldr x25, [x0, #8] + WORD $0x1400001e // b LBB0_323 $120(%rip) +LBB0_316: WORD $0xd1000688 // sub x8, x20, #1 - WORD $0xeb13011f // cmp x8, x19 - WORD $0x54000380 // b.eq LBB0_315 $112(%rip) - WORD $0x8b1602a8 // add x8, x21, x22 - WORD $0x8b130108 // add x8, x8, x19 + WORD $0xeb10011f // cmp x8, x16 + WORD $0x54000380 // b.eq LBB0_324 $112(%rip) + WORD $0x8b1302c8 // add x8, x22, x19 + WORD $0x8b100108 // add x8, x8, x16 WORD $0x91000908 // add x8, x8, #2 - WORD $0xcb13028e // sub x14, x20, x19 - WORD $0xd10009d3 // sub x19, x14, #2 - WORD $0xf100067f // cmp x19, #1 - WORD $0x540000ea // b.ge LBB0_310 $28(%rip) - WORD $0x14000014 // b LBB0_315 $80(%rip) -LBB0_309: + WORD $0xcb10028e // sub x14, x20, x16 + WORD $0xd10009d0 // sub x16, x14, #2 + WORD $0xf100061f // cmp x16, #1 + WORD $0x540000ea // b.ge LBB0_319 $28(%rip) + WORD $0x14000014 // b LBB0_324 $80(%rip) +LBB0_318: WORD $0x92800022 // mov x2, #-2 - WORD $0x52800047 // mov w7, #2 - WORD $0x8b070108 // add x8, x8, x7 - WORD $0xab020273 // adds x19, x19, x2 - WORD $0x540001ed // b.le LBB0_315 $60(%rip) -LBB0_310: + WORD $0x52800044 // mov w4, #2 + WORD $0x8b040108 // add x8, x8, x4 + WORD $0xab020210 // adds x16, x16, x2 + WORD $0x540001ed // b.le LBB0_324 $60(%rip) +LBB0_319: WORD $0x39400102 // ldrb w2, [x8] WORD $0x7101705f // cmp w2, #92 - WORD $0x54ffff20 // b.eq LBB0_309 $-28(%rip) + WORD $0x54ffff20 // b.eq LBB0_318 $-28(%rip) WORD $0x7100885f // cmp w2, #34 - WORD $0x540000e0 // b.eq LBB0_313 $28(%rip) + WORD $0x540000e0 // b.eq LBB0_322 $28(%rip) WORD $0x92800002 // mov x2, #-1 - WORD $0x52800027 // mov w7, #1 - WORD $0x8b070108 // add x8, x8, x7 - WORD $0xab020273 // adds x19, x19, x2 - WORD $0x54fffeec // b.gt LBB0_310 $-36(%rip) - WORD $0x14000004 // b LBB0_315 $16(%rip) -LBB0_313: - WORD $0xcb150108 // sub x8, x8, x21 - WORD $0x91000518 // add x24, x8, #1 -LBB0_314: - WORD $0xf9000038 // str x24, [x1] -LBB0_315: - WORD $0x529fffe8 // mov w8, #65535 - WORD $0xa94143eb // ldp x11, x16, [sp, #16] - WORD $0xf94007e3 // ldr x3, [sp, #8] - WORD $0x17fffc13 // b LBB0_151 $-4020(%rip) -LBB0_316: - WORD $0x71016c5f // cmp w2, #91 - WORD $0x54012781 // b.ne LBB0_827 $9456(%rip) - WORD $0xf9400522 // ldr x2, [x9, #8] - WORD $0xf9400056 // ldr x22, [x2] - WORD $0xb7f91936 // tbnz x22, #63, LBB0_799 $8996(%rip) - WORD $0xf9400413 // ldr x19, [x0, #8] - WORD $0xeb13033f // cmp x25, x19 - WORD $0x54000162 // b.hs LBB0_323 $44(%rip) - WORD $0x38796aa2 // ldrb w2, [x21, x25] + WORD $0x52800024 // mov w4, #1 + WORD $0x8b040108 // add x8, x8, x4 + WORD $0xab020210 // adds x16, x16, x2 + WORD $0x54fffeec // b.gt LBB0_319 $-36(%rip) + WORD $0x14000004 // b LBB0_324 $16(%rip) +LBB0_322: + WORD $0xcb160108 // sub x8, x8, x22 + WORD $0x91000519 // add x25, x8, #1 +LBB0_323: + WORD $0xf9000039 // str x25, [x1] +LBB0_324: + WORD $0xb201e3e8 // mov x8, #-8608480567731124088 + WORD $0x529ffff5 // mov w21, #65535 + WORD $0xa9427beb // ldp x11, lr, [sp, #32] + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0xf9400fe3 // ldr x3, [sp, #24] + WORD $0x17fffdd9 // b LBB0_232 $-2204(%rip) +LBB0_325: + WORD $0x71016e1f // cmp w16, #91 + WORD $0x54013401 // b.ne LBB0_842 $9856(%rip) + WORD $0xf9400530 // ldr x16, [x9, #8] + WORD $0xf9400217 // ldr x23, [x16] + WORD $0xb7f92217 // tbnz x23, #63, LBB0_811 $9280(%rip) + WORD $0xf9400410 // ldr x16, [x0, #8] + WORD $0xeb10027f // cmp x19, x16 + WORD $0x54000162 // b.hs LBB0_332 $44(%rip) + WORD $0x38736ac2 // ldrb w2, [x22, x19] WORD $0x7100345f // cmp w2, #13 - WORD $0x54000100 // b.eq LBB0_323 $32(%rip) + WORD $0x54000100 // b.eq LBB0_332 $32(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x540000c0 // b.eq LBB0_323 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_332 $24(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x54000062 // b.hs LBB0_323 $12(%rip) - WORD $0xaa1903f7 // mov x23, x25 - WORD $0x14000033 // b LBB0_340 $204(%rip) -LBB0_323: - WORD $0x91000737 // add x23, x25, #1 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54000122 // b.hs LBB0_327 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] + WORD $0x54000062 // b.hs LBB0_332 $12(%rip) + WORD $0xaa1303f8 // mov x24, x19 + WORD $0x14000033 // b LBB0_349 $204(%rip) +LBB0_332: + WORD $0x91000678 // add x24, x19, #1 + WORD $0xeb10031f // cmp x24, x16 + WORD $0x54000122 // b.hs LBB0_336 $36(%rip) + WORD $0x38786ac2 // ldrb w2, [x22, x24] WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_327 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_336 $24(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_327 $16(%rip) + WORD $0x54000080 // b.eq LBB0_336 $16(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x54000503 // b.lo LBB0_340 $160(%rip) -LBB0_327: - WORD $0x91000b37 // add x23, x25, #2 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54000122 // b.hs LBB0_331 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] + WORD $0x54000503 // b.lo LBB0_349 $160(%rip) +LBB0_336: + WORD $0x91000a78 // add x24, x19, #2 + WORD $0xeb10031f // cmp x24, x16 + WORD $0x54000122 // b.hs LBB0_340 $36(%rip) + WORD $0x38786ac2 // ldrb w2, [x22, x24] WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_331 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_340 $24(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_331 $16(%rip) + WORD $0x54000080 // b.eq LBB0_340 $16(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x540003a3 // b.lo LBB0_340 $116(%rip) -LBB0_331: - WORD $0x91000f37 // add x23, x25, #3 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54000122 // b.hs LBB0_335 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] + WORD $0x540003a3 // b.lo LBB0_349 $116(%rip) +LBB0_340: + WORD $0x91000e78 // add x24, x19, #3 + WORD $0xeb10031f // cmp x24, x16 + WORD $0x54000122 // b.hs LBB0_344 $36(%rip) + WORD $0x38786ac2 // ldrb w2, [x22, x24] WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_335 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_344 $24(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_335 $16(%rip) + WORD $0x54000080 // b.eq LBB0_344 $16(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x54000243 // b.lo LBB0_340 $72(%rip) -LBB0_335: - WORD $0x91001337 // add x23, x25, #4 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54000162 // b.hs LBB0_338 $44(%rip) -LBB0_336: - WORD $0x38776aae // ldrb w14, [x21, x23] + WORD $0x54000243 // b.lo LBB0_349 $72(%rip) +LBB0_344: + WORD $0x91001278 // add x24, x19, #4 + WORD $0xeb10031f // cmp x24, x16 + WORD $0x54000162 // b.hs LBB0_347 $44(%rip) +LBB0_345: + WORD $0x38786ace // ldrb w14, [x22, x24] WORD $0x710081df // cmp w14, #32 WORD $0x9ace218e // lsl x14, x12, x14 WORD $0x8a0d01ce // and x14, x14, x13 WORD $0xfa4099c4 // ccmp x14, #0, #4, ls - WORD $0x540000e0 // b.eq LBB0_339 $28(%rip) - WORD $0x910006f7 // add x23, x23, #1 - WORD $0xeb17027f // cmp x19, x23 - WORD $0x54ffff01 // b.ne LBB0_336 $-32(%rip) - WORD $0x1400000a // b LBB0_341 $40(%rip) -LBB0_338: - WORD $0xaa1703f9 // mov x25, x23 - WORD $0x14000008 // b LBB0_341 $32(%rip) -LBB0_339: - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x540000c2 // b.hs LBB0_341 $24(%rip) -LBB0_340: - WORD $0x910006f9 // add x25, x23, #1 - WORD $0xf9000039 // str x25, [x1] - WORD $0x38776aae // ldrb w14, [x21, x23] + WORD $0x540000e0 // b.eq LBB0_348 $28(%rip) + WORD $0x91000718 // add x24, x24, #1 + WORD $0xeb18021f // cmp x16, x24 + WORD $0x54ffff01 // b.ne LBB0_345 $-32(%rip) + WORD $0x1400000a // b LBB0_350 $40(%rip) +LBB0_347: + WORD $0xaa1803f3 // mov x19, x24 + WORD $0x14000008 // b LBB0_350 $32(%rip) +LBB0_348: + WORD $0xeb10031f // cmp x24, x16 + WORD $0x540000c2 // b.hs LBB0_350 $24(%rip) +LBB0_349: + WORD $0x91000713 // add x19, x24, #1 + WORD $0xf9000033 // str x19, [x1] + WORD $0x38786ace // ldrb w14, [x22, x24] WORD $0x710175df // cmp w14, #93 - WORD $0x540111c0 // b.eq LBB0_802 $8760(%rip) -LBB0_341: - WORD $0xd1000738 // sub x24, x25, #1 - WORD $0xf9000038 // str x24, [x1] -LBB0_342: - WORD $0xf10006d6 // subs x22, x22, #1 - WORD $0x54006c6b // b.lt LBB0_498 $3468(%rip) - WORD $0xf9400413 // ldr x19, [x0, #8] - WORD $0xeb13031f // cmp x24, x19 - WORD $0x54000162 // b.hs LBB0_348 $44(%rip) - WORD $0x38786aa2 // ldrb w2, [x21, x24] + WORD $0x54011aa0 // b.eq LBB0_814 $9044(%rip) +LBB0_350: + WORD $0xd1000679 // sub x25, x19, #1 + WORD $0xf9000039 // str x25, [x1] +LBB0_351: + WORD $0xf10006f7 // subs x23, x23, #1 + WORD $0x5400754b // b.lt LBB0_510 $3752(%rip) + WORD $0xf9400410 // ldr x16, [x0, #8] + WORD $0xeb10033f // cmp x25, x16 + WORD $0x54000162 // b.hs LBB0_357 $44(%rip) + WORD $0x38796ac2 // ldrb w2, [x22, x25] WORD $0x7100345f // cmp w2, #13 - WORD $0x54000100 // b.eq LBB0_348 $32(%rip) + WORD $0x54000100 // b.eq LBB0_357 $32(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x540000c0 // b.eq LBB0_348 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_357 $24(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x54000062 // b.hs LBB0_348 $12(%rip) - WORD $0xaa1803f7 // mov x23, x24 - WORD $0x14000031 // b LBB0_364 $196(%rip) -LBB0_348: - WORD $0x91000717 // add x23, x24, #1 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54000122 // b.hs LBB0_352 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] + WORD $0x54000062 // b.hs LBB0_357 $12(%rip) + WORD $0xaa1903f3 // mov x19, x25 + WORD $0x14000031 // b LBB0_373 $196(%rip) +LBB0_357: + WORD $0x91000733 // add x19, x25, #1 + WORD $0xeb10027f // cmp x19, x16 + WORD $0x54000122 // b.hs LBB0_361 $36(%rip) + WORD $0x38736ac2 // ldrb w2, [x22, x19] WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_352 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_361 $24(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_352 $16(%rip) + WORD $0x54000080 // b.eq LBB0_361 $16(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x540004c3 // b.lo LBB0_364 $152(%rip) -LBB0_352: - WORD $0x91000b17 // add x23, x24, #2 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54000122 // b.hs LBB0_356 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] + WORD $0x540004c3 // b.lo LBB0_373 $152(%rip) +LBB0_361: + WORD $0x91000b33 // add x19, x25, #2 + WORD $0xeb10027f // cmp x19, x16 + WORD $0x54000122 // b.hs LBB0_365 $36(%rip) + WORD $0x38736ac2 // ldrb w2, [x22, x19] WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_356 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_365 $24(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_356 $16(%rip) + WORD $0x54000080 // b.eq LBB0_365 $16(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x54000363 // b.lo LBB0_364 $108(%rip) -LBB0_356: - WORD $0x91000f17 // add x23, x24, #3 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54000122 // b.hs LBB0_360 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] + WORD $0x54000363 // b.lo LBB0_373 $108(%rip) +LBB0_365: + WORD $0x91000f33 // add x19, x25, #3 + WORD $0xeb10027f // cmp x19, x16 + WORD $0x54000122 // b.hs LBB0_369 $36(%rip) + WORD $0x38736ac2 // ldrb w2, [x22, x19] WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_360 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_369 $24(%rip) WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_360 $16(%rip) + WORD $0x54000080 // b.eq LBB0_369 $16(%rip) WORD $0x51002c4e // sub w14, w2, #11 WORD $0x310009df // cmn w14, #2 - WORD $0x54000203 // b.lo LBB0_364 $64(%rip) -LBB0_360: - WORD $0x91001317 // add x23, x24, #4 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54000c22 // b.hs LBB0_390 $388(%rip) -LBB0_361: - WORD $0x38776aae // ldrb w14, [x21, x23] + WORD $0x54000203 // b.lo LBB0_373 $64(%rip) +LBB0_369: + WORD $0x91001333 // add x19, x25, #4 + WORD $0xeb10027f // cmp x19, x16 + WORD $0x54002fc2 // b.hs LBB0_430 $1528(%rip) +LBB0_370: + WORD $0x38736ace // ldrb w14, [x22, x19] WORD $0x710081df // cmp w14, #32 WORD $0x9ace218e // lsl x14, x12, x14 WORD $0x8a0d01ce // and x14, x14, x13 WORD $0xfa4099c4 // ccmp x14, #0, #4, ls - WORD $0x540000a0 // b.eq LBB0_363 $20(%rip) - WORD $0x910006f7 // add x23, x23, #1 - WORD $0xeb17027f // cmp x19, x23 - WORD $0x54ffff01 // b.ne LBB0_361 $-32(%rip) - WORD $0x14000059 // b LBB0_391 $356(%rip) -LBB0_363: - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54000ae2 // b.hs LBB0_391 $348(%rip) -LBB0_364: - WORD $0x910006f8 // add x24, x23, #1 - WORD $0xf9000038 // str x24, [x1] - WORD $0x38776aa2 // ldrb w2, [x21, x23] - WORD $0x7101685f // cmp w2, #90 - WORD $0x5400066c // b.gt LBB0_379 $204(%rip) - WORD $0x7100bc5f // cmp w2, #47 - WORD $0x5400084d // b.le LBB0_384 $264(%rip) - WORD $0x5100c04e // sub w14, w2, #48 + WORD $0x540000a0 // b.eq LBB0_372 $20(%rip) + WORD $0x91000673 // add x19, x19, #1 + WORD $0xeb13021f // cmp x16, x19 + WORD $0x54ffff01 // b.ne LBB0_370 $-32(%rip) + WORD $0x14000176 // b LBB0_431 $1496(%rip) +LBB0_372: + WORD $0xeb10027f // cmp x19, x16 + WORD $0x54002e82 // b.hs LBB0_431 $1488(%rip) +LBB0_373: + WORD $0x91000679 // add x25, x19, #1 + WORD $0xf9000039 // str x25, [x1] + WORD $0x38736ad0 // ldrb w16, [x22, x19] + WORD $0x71016a1f // cmp w16, #90 + WORD $0x54000a2c // b.gt LBB0_393 $324(%rip) + WORD $0x7100be1f // cmp w16, #47 + WORD $0x54002bed // b.le LBB0_424 $1404(%rip) + WORD $0x5100c20e // sub w14, w16, #48 WORD $0x710029df // cmp w14, #10 - WORD $0x54000962 // b.hs LBB0_390 $300(%rip) -LBB0_367: + WORD $0x54002d02 // b.hs LBB0_430 $1440(%rip) +LBB0_376: WORD $0xf940040e // ldr x14, [x0, #8] - WORD $0xcb1801d3 // sub x19, x14, x24 - WORD $0xf100427f // cmp x19, #16 - WORD $0x540001e3 // b.lo LBB0_370 $60(%rip) -LBB0_368: - WORD $0x3cf86ab3 // ldr q19, [x21, x24] + WORD $0xcb1901d0 // sub x16, x14, x25 + WORD $0xf100421f // cmp x16, #16 + WORD $0x54000223 // b.lo LBB0_380 $68(%rip) + WORD $0xd2800004 // mov x4, #0 +LBB0_378: + WORD $0x3cf96ad3 // ldr q19, [x22, x25] WORD $0x6e248e74 // cmeq.16b v20, v19, v4 WORD $0x4e251e73 // and.16b v19, v19, v5 WORD $0x6e268e73 // cmeq.16b v19, v19, v6 @@ -2004,168 +2156,162 @@ LBB0_368: WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 WORD $0x1e260262 // fmov w2, s19 - WORD $0x35000362 // cbnz w2, LBB0_378 $108(%rip) - WORD $0xd1004273 // sub x19, x19, #16 - WORD $0x91004318 // add x24, x24, #16 - WORD $0xf1003e7f // cmp x19, #15 - WORD $0x54fffe68 // b.hi LBB0_368 $-52(%rip) -LBB0_370: - WORD $0x8b1802a2 // add x2, x21, x24 - WORD $0xb40001f3 // cbz x19, LBB0_377 $60(%rip) - WORD $0x8b130054 // add x20, x2, x19 - WORD $0xcb150058 // sub x24, x2, x21 -LBB0_372: - WORD $0x39400047 // ldrb w7, [x2] - WORD $0x7100b0ff // cmp w7, #44 - WORD $0x54005a60 // b.eq LBB0_486 $2892(%rip) - WORD $0x7101f4ff // cmp w7, #125 - WORD $0x54005a20 // b.eq LBB0_486 $2884(%rip) - WORD $0x710174ff // cmp w7, #93 - WORD $0x540059e0 // b.eq LBB0_486 $2876(%rip) - WORD $0x91000442 // add x2, x2, #1 - WORD $0x91000718 // add x24, x24, #1 - WORD $0xf1000673 // subs x19, x19, #1 - WORD $0x54fffec1 // b.ne LBB0_372 $-40(%rip) - WORD $0xaa1403e2 // mov x2, x20 -LBB0_377: - WORD $0xcb150058 // sub x24, x2, x21 - WORD $0xf9000038 // str x24, [x1] - WORD $0x529fffe8 // mov w8, #65535 - WORD $0x3200f3f1 // mov w17, #1431655765 - WORD $0x3201f3e4 // mov w4, #-1431655766 - WORD $0x14000025 // b LBB0_391 $148(%rip) -LBB0_378: - WORD $0x5ac0004e // rbit w14, w2 - WORD $0x5ac011ce // clz w14, w14 - WORD $0x8b1801d8 // add x24, x14, x24 - WORD $0xf9000038 // str x24, [x1] - WORD $0x14000020 // b LBB0_391 $128(%rip) -LBB0_379: - WORD $0x7101b45f // cmp w2, #109 - WORD $0x540002cd // b.le LBB0_387 $88(%rip) - WORD $0x7101b85f // cmp w2, #110 - WORD $0x54002aa0 // b.eq LBB0_439 $1364(%rip) - WORD $0x7101d05f // cmp w2, #116 - WORD $0x54002a60 // b.eq LBB0_439 $1356(%rip) - WORD $0x7101ec5f // cmp w2, #123 - WORD $0x540002c1 // b.ne LBB0_390 $88(%rip) - WORD $0xf9000ff0 // str x16, [sp, #24] - WORD $0xd280001e // mov lr, #0 - WORD $0xd280001a // mov x26, #0 - WORD $0xd2800017 // mov x23, #0 - WORD $0xd2800019 // mov x25, #0 - WORD $0xf940040e // ldr x14, [x0, #8] - WORD $0xcb1801ce // sub x14, x14, x24 - WORD $0x8b1802b5 // add x21, x21, x24 - WORD $0x1400005a // b LBB0_414 $360(%rip) -LBB0_384: - WORD $0x340001c2 // cbz w2, LBB0_391 $56(%rip) - WORD $0x7100885f // cmp w2, #34 - WORD $0x54002980 // b.eq LBB0_442 $1328(%rip) - WORD $0x7100b45f // cmp w2, #45 - WORD $0x54fff7c0 // b.eq LBB0_367 $-264(%rip) - WORD $0x14000007 // b LBB0_390 $28(%rip) + WORD $0x350004c2 // cbnz w2, LBB0_388 $152(%rip) + WORD $0xd1004210 // sub x16, x16, #16 + WORD $0x91004339 // add x25, x25, #16 + WORD $0x91004084 // add x4, x4, #16 + WORD $0xf1003e1f // cmp x16, #15 + WORD $0x54fffe48 // b.hi LBB0_378 $-56(%rip) +LBB0_380: + WORD $0x8b1902d3 // add x19, x22, x25 + WORD $0xb4000250 // cbz x16, LBB0_387 $72(%rip) + WORD $0x8b100264 // add x4, x19, x16 + WORD $0xcb160279 // sub x25, x19, x22 +LBB0_382: + WORD $0x39400262 // ldrb w2, [x19] + WORD $0x7100b05f // cmp w2, #44 + WORD $0x9ac2218e // lsl x14, x12, x2 + WORD $0x8a1101ce // and x14, x14, x17 + WORD $0xfa4099c4 // ccmp x14, #0, #4, ls + WORD $0x540060a1 // b.ne LBB0_498 $3092(%rip) + WORD $0x7101f45f // cmp w2, #125 + WORD $0x54006060 // b.eq LBB0_498 $3084(%rip) + WORD $0x7101745f // cmp w2, #93 + WORD $0x54006020 // b.eq LBB0_498 $3076(%rip) + WORD $0x91000673 // add x19, x19, #1 + WORD $0x91000739 // add x25, x25, #1 + WORD $0xf1000610 // subs x16, x16, #1 + WORD $0x54fffe61 // b.ne LBB0_382 $-52(%rip) + WORD $0xaa0403f3 // mov x19, x4 LBB0_387: - WORD $0x71016c5f // cmp w2, #91 - WORD $0x54003120 // b.eq LBB0_452 $1572(%rip) - WORD $0x7101985f // cmp w2, #102 - WORD $0x54000061 // b.ne LBB0_390 $12(%rip) - WORD $0x910016e2 // add x2, x23, #5 - WORD $0x1400013d // b LBB0_440 $1268(%rip) + WORD $0xcb160279 // sub x25, x19, x22 + WORD $0xf9000039 // str x25, [x1] + WORD $0xb201e3e8 // mov x8, #-8608480567731124088 + WORD $0x529ffff5 // mov w21, #65535 + WORD $0x3200f3e5 // mov w5, #1431655765 + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0x14000136 // b LBB0_431 $1240(%rip) +LBB0_388: + WORD $0x5ac0004e // rbit w14, w2 + WORD $0x5ac011d0 // clz w16, w14 + WORD $0x8b190219 // add x25, x16, x25 + WORD $0xf9000039 // str x25, [x1] + WORD $0xf100073f // cmp x25, #1 + WORD $0x5400260b // b.lt LBB0_431 $1216(%rip) + WORD $0x8b040210 // add x16, x16, x4 + WORD $0x8b1302c4 // add x4, x22, x19 LBB0_390: - WORD $0xf9000037 // str x23, [x1] - WORD $0xaa1703f8 // mov x24, x23 -LBB0_391: - WORD $0xa9404c15 // ldp x21, x19, [x0] - WORD $0xeb13031f // cmp x24, x19 - WORD $0x54000162 // b.hs LBB0_396 $44(%rip) - WORD $0x38786aa2 // ldrb w2, [x21, x24] - WORD $0x7100345f // cmp w2, #13 - WORD $0x54000100 // b.eq LBB0_396 $32(%rip) - WORD $0x7100805f // cmp w2, #32 - WORD $0x540000c0 // b.eq LBB0_396 $24(%rip) - WORD $0x51002c4e // sub w14, w2, #11 - WORD $0x310009df // cmn w14, #2 - WORD $0x54000062 // b.hs LBB0_396 $12(%rip) - WORD $0xaa1803f7 // mov x23, x24 - WORD $0x14000031 // b LBB0_412 $196(%rip) -LBB0_396: - WORD $0x91000717 // add x23, x24, #1 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54000122 // b.hs LBB0_400 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] - WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_400 $24(%rip) - WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_400 $16(%rip) - WORD $0x51002c4e // sub w14, w2, #11 - WORD $0x310009df // cmn w14, #2 - WORD $0x540004c3 // b.lo LBB0_412 $152(%rip) -LBB0_400: - WORD $0x91000b17 // add x23, x24, #2 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54000122 // b.hs LBB0_404 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] - WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_404 $24(%rip) - WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_404 $16(%rip) - WORD $0x51002c4e // sub w14, w2, #11 - WORD $0x310009df // cmn w14, #2 - WORD $0x54000363 // b.lo LBB0_412 $108(%rip) -LBB0_404: - WORD $0x91000f17 // add x23, x24, #3 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54000122 // b.hs LBB0_408 $36(%rip) - WORD $0x38776aa2 // ldrb w2, [x21, x23] - WORD $0x7100345f // cmp w2, #13 - WORD $0x540000c0 // b.eq LBB0_408 $24(%rip) - WORD $0x7100805f // cmp w2, #32 - WORD $0x54000080 // b.eq LBB0_408 $16(%rip) - WORD $0x51002c4e // sub w14, w2, #11 - WORD $0x310009df // cmn w14, #2 - WORD $0x54000203 // b.lo LBB0_412 $64(%rip) -LBB0_408: - WORD $0x91001317 // add x23, x24, #4 - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x5400f842 // b.hs LBB0_800 $7944(%rip) -LBB0_409: - WORD $0x38776aae // ldrb w14, [x21, x23] + WORD $0x3870688e // ldrb w14, [x4, x16] WORD $0x710081df // cmp w14, #32 WORD $0x9ace218e // lsl x14, x12, x14 WORD $0x8a0d01ce // and x14, x14, x13 WORD $0xfa4099c4 // ccmp x14, #0, #4, ls - WORD $0x540000a0 // b.eq LBB0_411 $20(%rip) - WORD $0x910006f7 // add x23, x23, #1 - WORD $0xeb17027f // cmp x19, x23 - WORD $0x54ffff01 // b.ne LBB0_409 $-32(%rip) - WORD $0x14000823 // b LBB0_827 $8332(%rip) + WORD $0x54002e40 // b.eq LBB0_456 $1480(%rip) + WORD $0x8b10026e // add x14, x19, x16 + WORD $0xf900002e // str x14, [x1] + WORD $0xd1000610 // sub x16, x16, #1 + WORD $0x8b100262 // add x2, x19, x16 + WORD $0x9100084e // add x14, x2, #2 + WORD $0xf10005df // cmp x14, #1 + WORD $0x54fffe8c // b.gt LBB0_390 $-48(%rip) + WORD $0x91000459 // add x25, x2, #1 + WORD $0x1400011f // b LBB0_431 $1148(%rip) +LBB0_393: + WORD $0x7101b61f // cmp w16, #109 + WORD $0x540022ad // b.le LBB0_427 $1108(%rip) + WORD $0x7101ba1f // cmp w16, #110 + WORD $0x54002bc0 // b.eq LBB0_453 $1400(%rip) + WORD $0x7101d21f // cmp w16, #116 + WORD $0x54002b80 // b.eq LBB0_453 $1392(%rip) + WORD $0x7101ee1f // cmp w16, #123 + WORD $0x540022a1 // b.ne LBB0_430 $1108(%rip) + WORD $0xf90017fe // str lr, [sp, #40] + WORD $0xd2800013 // mov x19, #0 + WORD $0xd280001b // mov x27, #0 + WORD $0xd2800018 // mov x24, #0 + WORD $0xd280001a // mov x26, #0 + WORD $0xf940040e // ldr x14, [x0, #8] + WORD $0xcb1901de // sub lr, x14, x25 + WORD $0x8b1902d6 // add x22, x22, x25 + WORD $0xf10103ca // subs x10, lr, #64 + WORD $0xf90013ea // str x10, [sp, #32] + WORD $0x540006ea // b.ge LBB0_415 $220(%rip) +LBB0_398: + WORD $0xf10003df // cmp lr, #0 + WORD $0x54005bad // b.le LBB0_506 $2932(%rip) + WORD $0xad02c3f0 // stp q16, q16, [sp, #80] + WORD $0xad01c3f0 // stp q16, q16, [sp, #48] + WORD $0x92402ec8 // and x8, x22, #0xfff + WORD $0xf13f051f // cmp x8, #4033 + WORD $0x54000363 // b.lo LBB0_410 $108(%rip) + WORD $0xf10083d0 // subs x16, lr, #32 + WORD $0x540000a3 // b.lo LBB0_402 $20(%rip) + WORD $0xacc152d3 // ldp q19, q20, [x22], #32 + WORD $0xad01d3f3 // stp q19, q20, [sp, #48] + WORD $0xaa0b03e8 // mov x8, x11 + WORD $0x14000003 // b LBB0_403 $12(%rip) +LBB0_402: + WORD $0x9100c3e8 // add x8, sp, #48 + WORD $0xaa1e03f0 // mov x16, lr +LBB0_403: + WORD $0xf1004202 // subs x2, x16, #16 + WORD $0x54000303 // b.lo LBB0_411 $96(%rip) + WORD $0x3cc106d3 // ldr q19, [x22], #16 + WORD $0x3c810513 // str q19, [x8], #16 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xf1002042 // subs x2, x2, #8 + WORD $0x540002a2 // b.hs LBB0_412 $84(%rip) +LBB0_405: + WORD $0xf1001202 // subs x2, x16, #4 + WORD $0x54000303 // b.lo LBB0_413 $96(%rip) +LBB0_406: + WORD $0xb84046ce // ldr w14, [x22], #4 + WORD $0xb800450e // str w14, [x8], #4 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xf1000842 // subs x2, x2, #2 + WORD $0x540002a2 // b.hs LBB0_414 $84(%rip) +LBB0_407: + WORD $0xb4000070 // cbz x16, LBB0_409 $12(%rip) +LBB0_408: + WORD $0x394002ce // ldrb w14, [x22] + WORD $0x3900010e // strb w14, [x8] +LBB0_409: + WORD $0x9100c3f6 // add x22, sp, #48 +LBB0_410: + WORD $0xb201e3e8 // mov x8, #-8608480567731124088 + WORD $0x529ffff5 // mov w21, #65535 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0x1400000f // b LBB0_415 $60(%rip) LBB0_411: - WORD $0xeb1302ff // cmp x23, x19 - WORD $0x54010422 // b.hs LBB0_827 $8324(%rip) + WORD $0xf1002202 // subs x2, x16, #8 + WORD $0x54fffda3 // b.lo LBB0_405 $-76(%rip) LBB0_412: - WORD $0x910006f8 // add x24, x23, #1 - WORD $0xf9000038 // str x24, [x1] - WORD $0x38776aa2 // ldrb w2, [x21, x23] - WORD $0x7100b05f // cmp w2, #44 - WORD $0x54ffe540 // b.eq LBB0_342 $-856(%rip) - WORD $0x140007b2 // b LBB0_801 $7880(%rip) + WORD $0xf84086ce // ldr x14, [x22], #8 + WORD $0xf800850e // str x14, [x8], #8 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xf1001042 // subs x2, x2, #4 + WORD $0x54fffd42 // b.hs LBB0_406 $-88(%rip) LBB0_413: - WORD $0x937ffe7e // asr lr, x19, #63 - WORD $0x9e670293 // fmov d19, x20 - WORD $0x0e205a73 // cnt.8b v19, v19 - WORD $0x2e303a73 // uaddlv.8b h19, v19 - WORD $0x1e26026e // fmov w14, s19 - WORD $0x8b1701d7 // add x23, x14, x23 - WORD $0x910102b5 // add x21, x21, #64 - WORD $0xaa0a03ee // mov x14, x10 + WORD $0xf1000a02 // subs x2, x16, #2 + WORD $0x54fffda3 // b.lo LBB0_407 $-76(%rip) LBB0_414: - WORD $0xf10101ca // subs x10, x14, #64 - WORD $0xf9000bee // str x14, [sp, #16] - WORD $0x5400172b // b.lt LBB0_422 $740(%rip) + WORD $0x784026ce // ldrh w14, [x22], #2 + WORD $0x7800250e // strh w14, [x8], #2 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xb5fffd42 // cbnz x2, LBB0_408 $-88(%rip) + WORD $0x17ffffeb // b LBB0_409 $-84(%rip) LBB0_415: - WORD $0xad4056b6 // ldp q22, q21, [x21] - WORD $0xad414eb4 // ldp q20, q19, [x21, #32] + WORD $0xad4056d6 // ldp q22, q21, [x22] + WORD $0xad414ed4 // ldp q20, q19, [x22, #32] WORD $0x6e238ed7 // cmeq.16b v23, v22, v3 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 @@ -2190,22 +2336,22 @@ LBB0_415: WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f020f // orr x15, x16, x15 - WORD $0xaa0e01e2 // orr x2, x15, x14 - WORD $0xaa1a004e // orr x14, x2, x26 + WORD $0xaa0e01f0 // orr x16, x15, x14 + WORD $0xaa1b020e // orr x14, x16, x27 WORD $0xb500008e // cbnz x14, LBB0_417 $16(%rip) - WORD $0xd280001a // mov x26, #0 - WORD $0xd2800002 // mov x2, #0 + WORD $0xd280001b // mov x27, #0 + WORD $0xd2800010 // mov x16, #0 WORD $0x1400000a // b LBB0_418 $40(%rip) LBB0_417: - WORD $0x8a3a004e // bic x14, x2, x26 - WORD $0xaa0e074f // orr x15, x26, x14, lsl #1 - WORD $0x8a2f0050 // bic x16, x2, x15 + WORD $0x8a3b020e // bic x14, x16, x27 + WORD $0xaa0e076f // orr x15, x27, x14, lsl #1 + WORD $0x8a2f0210 // bic x16, x16, x15 WORD $0x9201f210 // and x16, x16, #0xaaaaaaaaaaaaaaaa WORD $0xab0e020e // adds x14, x16, x14 - WORD $0x1a9f37fa // cset w26, hs + WORD $0x1a9f37fb // cset w27, hs WORD $0xd37ff9ce // lsl x14, x14, #1 WORD $0xd200f1ce // eor x14, x14, #0x5555555555555555 - WORD $0x8a0f01c2 // and x2, x14, x15 + WORD $0x8a0f01d0 // and x16, x14, x15 LBB0_418: WORD $0x6e208ed7 // cmeq.16b v23, v22, v0 WORD $0x4e211ef7 // and.16b v23, v23, v1 @@ -2221,68 +2367,65 @@ LBB0_418: WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f0 // fmov w16, s23 + WORD $0x1e2602f1 // fmov w17, s23 WORD $0x6e208e77 // cmeq.16b v23, v19, v0 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f1 // fmov w17, s23 - WORD $0xd3607e10 // lsl x16, x16, #32 - WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 + WORD $0x1e2602e2 // fmov w2, s23 + WORD $0xd3607e31 // lsl x17, x17, #32 + WORD $0xaa02c231 // orr x17, x17, x2, lsl #48 WORD $0x53103def // lsl w15, w15, #16 - WORD $0xaa0f020f // orr x15, x16, x15 + WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0x8a2201ce // bic x14, x14, x2 + WORD $0x8a3001ce // bic x14, x14, x16 WORD $0x9200e1cf // and x15, x14, #0x1111111111111111 WORD $0x9203e1d0 // and x16, x14, #0x2222222222222222 WORD $0x9202e1d1 // and x17, x14, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 - WORD $0xb200e3f4 // mov x20, #1229782938247303441 - WORD $0x9b147de2 // mul x2, x15, x20 - WORD $0xb201e3f3 // mov x19, #-8608480567731124088 - WORD $0xf2e11113 // movk x19, #2184, lsl #48 - WORD $0x9b137e05 // mul x5, x16, x19 - WORD $0xca050042 // eor x2, x2, x5 - WORD $0xb202e3e7 // mov x7, #4919131752989213764 - WORD $0xf2e08887 // movk x7, #1092, lsl #48 + WORD $0xb200e3ea // mov x10, #1229782938247303441 + WORD $0x9b0a7de2 // mul x2, x15, x10 + WORD $0x9b077e04 // mul x4, x16, x7 + WORD $0xca040042 // eor x2, x2, x4 + WORD $0x9b147e24 // mul x4, x17, x20 + WORD $0xb203e3e5 // mov x5, #2459565876494606882 + WORD $0xf2e04445 // movk x5, #546, lsl #48 + WORD $0x9b057dc5 // mul x5, x14, x5 + WORD $0xca050084 // eor x4, x4, x5 + WORD $0xca040042 // eor x2, x2, x4 + WORD $0xb203e3f9 // mov x25, #2459565876494606882 + WORD $0x9b197de4 // mul x4, x15, x25 + WORD $0x9b0a7e05 // mul x5, x16, x10 + WORD $0xca050084 // eor x4, x4, x5 WORD $0x9b077e25 // mul x5, x17, x7 - WORD $0xb203e3e6 // mov x6, #2459565876494606882 - WORD $0xf2e04446 // movk x6, #546, lsl #48 - WORD $0x9b067dc6 // mul x6, x14, x6 + WORD $0x9b147dc6 // mul x6, x14, x20 WORD $0xca0600a5 // eor x5, x5, x6 - WORD $0xca050042 // eor x2, x2, x5 - WORD $0xb203e3f8 // mov x24, #2459565876494606882 - WORD $0x9b187de5 // mul x5, x15, x24 - WORD $0x9b147e06 // mul x6, x16, x20 + WORD $0xca050084 // eor x4, x4, x5 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0x9b147de5 // mul x5, x15, x20 + WORD $0x9b197e06 // mul x6, x16, x25 WORD $0xca0600a5 // eor x5, x5, x6 - WORD $0x9b137e26 // mul x6, x17, x19 + WORD $0x9b0a7e26 // mul x6, x17, x10 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 WORD $0x9b077dc7 // mul x7, x14, x7 WORD $0xca0700c6 // eor x6, x6, x7 WORD $0xca0600a5 // eor x5, x5, x6 - WORD $0xb202e3fb // mov x27, #4919131752989213764 - WORD $0x9b1b7de6 // mul x6, x15, x27 - WORD $0x9b187e07 // mul x7, x16, x24 - WORD $0xca0700c6 // eor x6, x6, x7 - WORD $0x9b147e27 // mul x7, x17, x20 - WORD $0x9b137dd3 // mul x19, x14, x19 - WORD $0xca1300e7 // eor x7, x7, x19 - WORD $0xca0700c6 // eor x6, x6, x7 - WORD $0xb201e3e7 // mov x7, #-8608480567731124088 - WORD $0x9b077def // mul x15, x15, x7 - WORD $0x9b1b7e10 // mul x16, x16, x27 + WORD $0x9b087def // mul x15, x15, x8 + WORD $0x9b147e10 // mul x16, x16, x20 WORD $0xca1001ef // eor x15, x15, x16 - WORD $0x9b187e30 // mul x16, x17, x24 - WORD $0x9b147dce // mul x14, x14, x20 + WORD $0x9b197e30 // mul x16, x17, x25 + WORD $0x9b0a7dce // mul x14, x14, x10 WORD $0xca0e020e // eor x14, x16, x14 WORD $0xca0e01ee // eor x14, x15, x14 WORD $0x9200e04f // and x15, x2, #0x1111111111111111 - WORD $0x9203e0b0 // and x16, x5, #0x2222222222222222 - WORD $0x9202e0d1 // and x17, x6, #0x4444444444444444 + WORD $0x9203e090 // and x16, x4, #0x2222222222222222 + WORD $0x9202e0b1 // and x17, x5, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 WORD $0xaa1001ef // orr x15, x15, x16 WORD $0xaa0e022e // orr x14, x17, x14 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xca1e01d3 // eor x19, x14, lr + WORD $0xca1301d0 // eor x16, x14, x19 WORD $0x6e318ed7 // cmeq.16b v23, v22, v17 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 @@ -2297,18 +2440,18 @@ LBB0_418: WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f0 // fmov w16, s23 + WORD $0x1e2602f1 // fmov w17, s23 WORD $0x6e318e77 // cmeq.16b v23, v19, v17 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f1 // fmov w17, s23 - WORD $0xd3607e10 // lsl x16, x16, #32 - WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 + WORD $0x1e2602e2 // fmov w2, s23 + WORD $0xd3607e31 // lsl x17, x17, #32 + WORD $0xaa02c231 // orr x17, x17, x2, lsl #48 WORD $0x53103def // lsl w15, w15, #16 - WORD $0xaa0f020f // orr x15, x16, x15 + WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0x8a3301d4 // bic x20, x14, x19 + WORD $0x8a3001d4 // bic x20, x14, x16 WORD $0x6e328ed6 // cmeq.16b v22, v22, v18 WORD $0x4e211ed6 // and.16b v22, v22, v1 WORD $0x4e0202d6 // tbl.16b v22, { v22 }, v2 @@ -2323,205 +2466,314 @@ LBB0_418: WORD $0x4e211e94 // and.16b v20, v20, v1 WORD $0x4e020294 // tbl.16b v20, { v20 }, v2 WORD $0x4e71ba94 // addv.8h h20, v20 - WORD $0x1e260290 // fmov w16, s20 + WORD $0x1e260291 // fmov w17, s20 WORD $0x6e328e73 // cmeq.16b v19, v19, v18 WORD $0x4e211e73 // and.16b v19, v19, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 - WORD $0x1e260271 // fmov w17, s19 - WORD $0xd3607e10 // lsl x16, x16, #32 - WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 + WORD $0x1e260262 // fmov w2, s19 + WORD $0xd3607e31 // lsl x17, x17, #32 + WORD $0xaa02c231 // orr x17, x17, x2, lsl #48 WORD $0x53103def // lsl w15, w15, #16 - WORD $0xaa0f020f // orr x15, x16, x15 + WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xea3301c2 // bics x2, x14, x19 - WORD $0x54ffe980 // b.eq LBB0_413 $-720(%rip) - WORD $0x3200f3f1 // mov w17, #1431655765 + WORD $0xea3001c4 // bics x4, x14, x16 + WORD $0x54000220 // b.eq LBB0_422 $68(%rip) + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 LBB0_420: - WORD $0xd1000447 // sub x7, x2, #1 - WORD $0x8a1400ee // and x14, x7, x20 + WORD $0xd1000482 // sub x2, x4, #1 + WORD $0x8a14004e // and x14, x2, x20 WORD $0x9e6701d3 // fmov d19, x14 WORD $0x0e205a73 // cnt.8b v19, v19 WORD $0x2e303a73 // uaddlv.8b h19, v19 WORD $0x1e26026e // fmov w14, s19 - WORD $0x8b1701ce // add x14, x14, x23 - WORD $0xeb1901df // cmp x14, x25 - WORD $0x54003029 // b.ls LBB0_480 $1540(%rip) - WORD $0x91000739 // add x25, x25, #1 - WORD $0xea0200e2 // ands x2, x7, x2 + WORD $0x8b1801ce // add x14, x14, x24 + WORD $0xeb1a01df // cmp x14, x26 + WORD $0x54003789 // b.ls LBB0_494 $1776(%rip) + WORD $0x9100075a // add x26, x26, #1 + WORD $0xea040044 // ands x4, x2, x4 WORD $0x54fffea1 // b.ne LBB0_420 $-44(%rip) - WORD $0x17ffff3e // b LBB0_413 $-776(%rip) + WORD $0x14000003 // b LBB0_423 $12(%rip) LBB0_422: - WORD $0xf10001df // cmp x14, #0 - WORD $0x5400364d // b.le LBB0_494 $1736(%rip) - WORD $0xad0243f0 // stp q16, q16, [sp, #64] - WORD $0xad0143f0 // stp q16, q16, [sp, #32] - WORD $0x92402ea8 // and x8, x21, #0xfff - WORD $0xf13f051f // cmp x8, #4033 - WORD $0x54000383 // b.lo LBB0_434 $112(%rip) - WORD $0xf9400be8 // ldr x8, [sp, #16] - WORD $0xf1008113 // subs x19, x8, #32 - WORD $0x540000a3 // b.lo LBB0_426 $20(%rip) - WORD $0xacc152b3 // ldp q19, q20, [x21], #32 - WORD $0xad0153f3 // stp q19, q20, [sp, #32] - WORD $0xaa0b03e8 // mov x8, x11 - WORD $0x14000003 // b LBB0_427 $12(%rip) -LBB0_426: - WORD $0x910083e8 // add x8, sp, #32 - WORD $0xf9400bf3 // ldr x19, [sp, #16] + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 +LBB0_423: + WORD $0x937ffe13 // asr x19, x16, #63 + WORD $0x9e670293 // fmov d19, x20 + WORD $0x0e205a73 // cnt.8b v19, v19 + WORD $0x2e303a73 // uaddlv.8b h19, v19 + WORD $0x1e26026e // fmov w14, s19 + WORD $0x8b1801d8 // add x24, x14, x24 + WORD $0x910102d6 // add x22, x22, #64 + WORD $0xf94013fe // ldr lr, [sp, #32] + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0xf10103ca // subs x10, lr, #64 + WORD $0xf90013ea // str x10, [sp, #32] + WORD $0x54ffe76a // b.ge LBB0_415 $-788(%rip) + WORD $0x17ffff04 // b LBB0_398 $-1008(%rip) +LBB0_424: + WORD $0x340001d0 // cbz w16, LBB0_431 $56(%rip) + WORD $0x71008a1f // cmp w16, #34 + WORD $0x54000b20 // b.eq LBB0_457 $356(%rip) + WORD $0x7100b61f // cmp w16, #45 + WORD $0x54ffd420 // b.eq LBB0_376 $-1404(%rip) + WORD $0x14000007 // b LBB0_430 $28(%rip) LBB0_427: - WORD $0xf1004262 // subs x2, x19, #16 - WORD $0x54000283 // b.lo LBB0_435 $80(%rip) - WORD $0x3cc106b3 // ldr q19, [x21], #16 - WORD $0x3c810513 // str q19, [x8], #16 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xf1002042 // subs x2, x2, #8 - WORD $0x54000222 // b.hs LBB0_436 $68(%rip) -LBB0_429: - WORD $0xf1001262 // subs x2, x19, #4 - WORD $0x54000283 // b.lo LBB0_437 $80(%rip) + WORD $0x71016e1f // cmp w16, #91 + WORD $0x54001300 // b.eq LBB0_467 $608(%rip) + WORD $0x71019a1f // cmp w16, #102 + WORD $0x54000061 // b.ne LBB0_430 $12(%rip) + WORD $0x91001670 // add x16, x19, #5 + WORD $0x14000047 // b LBB0_454 $284(%rip) LBB0_430: - WORD $0xb84046ae // ldr w14, [x21], #4 - WORD $0xb800450e // str w14, [x8], #4 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xf1000842 // subs x2, x2, #2 - WORD $0x54000222 // b.hs LBB0_438 $68(%rip) + WORD $0xf9000033 // str x19, [x1] + WORD $0xaa1303f9 // mov x25, x19 LBB0_431: - WORD $0xb4000073 // cbz x19, LBB0_433 $12(%rip) -LBB0_432: - WORD $0x394002ae // ldrb w14, [x21] - WORD $0x3900010e // strb w14, [x8] -LBB0_433: - WORD $0x910083f5 // add x21, sp, #32 -LBB0_434: - WORD $0x529fffe8 // mov w8, #65535 - WORD $0x3201f3e4 // mov w4, #-1431655766 - WORD $0x17ffff24 // b LBB0_415 $-880(%rip) -LBB0_435: - WORD $0xf1002262 // subs x2, x19, #8 - WORD $0x54fffe23 // b.lo LBB0_429 $-60(%rip) + WORD $0xa9404016 // ldp x22, x16, [x0] + WORD $0xeb10033f // cmp x25, x16 + WORD $0x54000162 // b.hs LBB0_436 $44(%rip) + WORD $0x38796ac2 // ldrb w2, [x22, x25] + WORD $0x7100345f // cmp w2, #13 + WORD $0x54000100 // b.eq LBB0_436 $32(%rip) + WORD $0x7100805f // cmp w2, #32 + WORD $0x540000c0 // b.eq LBB0_436 $24(%rip) + WORD $0x51002c4e // sub w14, w2, #11 + WORD $0x310009df // cmn w14, #2 + WORD $0x54000062 // b.hs LBB0_436 $12(%rip) + WORD $0xaa1903f8 // mov x24, x25 + WORD $0x14000031 // b LBB0_452 $196(%rip) LBB0_436: - WORD $0xf84086ae // ldr x14, [x21], #8 - WORD $0xf800850e // str x14, [x8], #8 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xf1001042 // subs x2, x2, #4 - WORD $0x54fffdc2 // b.hs LBB0_430 $-72(%rip) -LBB0_437: - WORD $0xf1000a62 // subs x2, x19, #2 - WORD $0x54fffe23 // b.lo LBB0_431 $-60(%rip) -LBB0_438: - WORD $0x784026ae // ldrh w14, [x21], #2 - WORD $0x7800250e // strh w14, [x8], #2 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xb5fffdc2 // cbnz x2, LBB0_432 $-72(%rip) - WORD $0x17ffffef // b LBB0_433 $-68(%rip) -LBB0_439: - WORD $0x910012e2 // add x2, x23, #4 + WORD $0x91000738 // add x24, x25, #1 + WORD $0xeb10031f // cmp x24, x16 + WORD $0x54000122 // b.hs LBB0_440 $36(%rip) + WORD $0x38786ac2 // ldrb w2, [x22, x24] + WORD $0x7100345f // cmp w2, #13 + WORD $0x540000c0 // b.eq LBB0_440 $24(%rip) + WORD $0x7100805f // cmp w2, #32 + WORD $0x54000080 // b.eq LBB0_440 $16(%rip) + WORD $0x51002c4e // sub w14, w2, #11 + WORD $0x310009df // cmn w14, #2 + WORD $0x540004c3 // b.lo LBB0_452 $152(%rip) LBB0_440: + WORD $0x91000b38 // add x24, x25, #2 + WORD $0xeb10031f // cmp x24, x16 + WORD $0x54000122 // b.hs LBB0_444 $36(%rip) + WORD $0x38786ac2 // ldrb w2, [x22, x24] + WORD $0x7100345f // cmp w2, #13 + WORD $0x540000c0 // b.eq LBB0_444 $24(%rip) + WORD $0x7100805f // cmp w2, #32 + WORD $0x54000080 // b.eq LBB0_444 $16(%rip) + WORD $0x51002c4e // sub w14, w2, #11 + WORD $0x310009df // cmn w14, #2 + WORD $0x54000363 // b.lo LBB0_452 $108(%rip) +LBB0_444: + WORD $0x91000f38 // add x24, x25, #3 + WORD $0xeb10031f // cmp x24, x16 + WORD $0x54000122 // b.hs LBB0_448 $36(%rip) + WORD $0x38786ac2 // ldrb w2, [x22, x24] + WORD $0x7100345f // cmp w2, #13 + WORD $0x540000c0 // b.eq LBB0_448 $24(%rip) + WORD $0x7100805f // cmp w2, #32 + WORD $0x54000080 // b.eq LBB0_448 $16(%rip) + WORD $0x51002c4e // sub w14, w2, #11 + WORD $0x310009df // cmn w14, #2 + WORD $0x54000203 // b.lo LBB0_452 $64(%rip) +LBB0_448: + WORD $0x91001338 // add x24, x25, #4 + WORD $0xeb10031f // cmp x24, x16 + WORD $0x5400dd82 // b.hs LBB0_812 $7088(%rip) +LBB0_449: + WORD $0x38786ace // ldrb w14, [x22, x24] + WORD $0x710081df // cmp w14, #32 + WORD $0x9ace218e // lsl x14, x12, x14 + WORD $0x8a0d01ce // and x14, x14, x13 + WORD $0xfa4099c4 // ccmp x14, #0, #4, ls + WORD $0x540000a0 // b.eq LBB0_451 $20(%rip) + WORD $0x91000718 // add x24, x24, #1 + WORD $0xeb18021f // cmp x16, x24 + WORD $0x54ffff01 // b.ne LBB0_449 $-32(%rip) + WORD $0x1400076a // b LBB0_842 $7592(%rip) +LBB0_451: + WORD $0xeb10031f // cmp x24, x16 + WORD $0x5400ed02 // b.hs LBB0_842 $7584(%rip) +LBB0_452: + WORD $0x91000719 // add x25, x24, #1 + WORD $0xf9000039 // str x25, [x1] + WORD $0x38786ad0 // ldrb w16, [x22, x24] + WORD $0x7100b21f // cmp w16, #44 + WORD $0x54ffc1a0 // b.eq LBB0_351 $-1996(%rip) + WORD $0x140006dc // b LBB0_813 $7024(%rip) +LBB0_453: + WORD $0x91001270 // add x16, x19, #4 +LBB0_454: WORD $0xf940040e // ldr x14, [x0, #8] - WORD $0xeb0e005f // cmp x2, x14 - WORD $0x54ffd888 // b.hi LBB0_391 $-1264(%rip) - WORD $0xf9000022 // str x2, [x1] - WORD $0xaa0203f8 // mov x24, x2 - WORD $0x17fffec1 // b LBB0_391 $-1276(%rip) -LBB0_442: + WORD $0xeb0e021f // cmp x16, x14 + WORD $0x54fff748 // b.hi LBB0_431 $-280(%rip) + WORD $0xf9000030 // str x16, [x1] + WORD $0xaa1003f9 // mov x25, x16 + WORD $0x17ffffb7 // b LBB0_431 $-292(%rip) +LBB0_456: + WORD $0x8b10026e // add x14, x19, x16 + WORD $0x910005d9 // add x25, x14, #1 + WORD $0x17ffffb4 // b LBB0_431 $-304(%rip) +LBB0_457: WORD $0xf9400402 // ldr x2, [x0, #8] - WORD $0xcb180053 // sub x19, x2, x24 - WORD $0xf100827f // cmp x19, #32 - WORD $0x54002bcb // b.lt LBB0_487 $1400(%rip) - WORD $0xaa0a03e5 // mov x5, x10 - WORD $0xaa1003ea // mov x10, x16 - WORD $0xd2800013 // mov x19, #0 + WORD $0xcb190050 // sub x16, x2, x25 + WORD $0xf100821f // cmp x16, #32 + WORD $0x54002d6b // b.lt LBB0_499 $1452(%rip) + WORD $0xaa1b03ea // mov x10, x27 + WORD $0xd2800010 // mov x16, #0 WORD $0xd280001b // mov x27, #0 - WORD $0x8b1702b9 // add x25, x21, x23 - WORD $0xcb170054 // sub x20, x2, x23 + WORD $0x8b1302d8 // add x24, x22, x19 + WORD $0xcb130054 // sub x20, x2, x19 WORD $0x528003fa // mov w26, #31 -LBB0_444: - WORD $0x8b13032e // add x14, x25, x19 +LBB0_459: + WORD $0x8b10030e // add x14, x24, x16 WORD $0x3cc011d3 // ldur q19, [x14, #1] WORD $0x3cc111d4 // ldur q20, [x14, #17] WORD $0x6e208e75 // cmeq.16b v21, v19, v0 WORD $0x4e211eb5 // and.16b v21, v21, v1 WORD $0x4e0202b5 // tbl.16b v21, { v21 }, v2 WORD $0x4e71bab5 // addv.8h h21, v21 - WORD $0x1e2602a2 // fmov w2, s21 + WORD $0x1e2602a4 // fmov w4, s21 WORD $0x6e208e95 // cmeq.16b v21, v20, v0 WORD $0x4e211eb5 // and.16b v21, v21, v1 WORD $0x4e0202b5 // tbl.16b v21, { v21 }, v2 WORD $0x4e71bab5 // addv.8h h21, v21 WORD $0x1e2602ae // fmov w14, s21 - WORD $0x33103dc2 // bfi w2, w14, #16, #16 + WORD $0x33103dc4 // bfi w4, w14, #16, #16 WORD $0x6e238e73 // cmeq.16b v19, v19, v3 WORD $0x4e211e73 // and.16b v19, v19, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 - WORD $0x1e260267 // fmov w7, s19 + WORD $0x1e260262 // fmov w2, s19 WORD $0x6e238e93 // cmeq.16b v19, v20, v3 WORD $0x4e211e73 // and.16b v19, v19, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 WORD $0x1e26026e // fmov w14, s19 - WORD $0x33103dc7 // bfi w7, w14, #16, #16 - WORD $0x710000ff // cmp w7, #0 + WORD $0x33103dc2 // bfi w2, w14, #16, #16 + WORD $0x7100005f // cmp w2, #0 WORD $0xfa400b60 // ccmp x27, #0, #0, eq - WORD $0x54000180 // b.eq LBB0_446 $48(%rip) - WORD $0x0a3b00ee // bic w14, w7, w27 + WORD $0x54000180 // b.eq LBB0_461 $48(%rip) + WORD $0x0a3b004e // bic w14, w2, w27 WORD $0x2a0e076f // orr w15, w27, w14, lsl #1 - WORD $0x0a0400f0 // and w16, w7, w4 - WORD $0x0a2f0210 // bic w16, w16, w15 - WORD $0x2b0e020e // adds w14, w16, w14 + WORD $0x0a060051 // and w17, w2, w6 + WORD $0x0a2f0231 // bic w17, w17, w15 + WORD $0x2b0e022e // adds w14, w17, w14 WORD $0x1a9f37fb // cset w27, hs - WORD $0x4a0e062e // eor w14, w17, w14, lsl #1 + WORD $0x4a0e04ae // eor w14, w5, w14, lsl #1 WORD $0x0a0f01ce // and w14, w14, w15 WORD $0x2a2e03ee // mvn w14, w14 - WORD $0x8a0201c2 // and x2, x14, x2 - WORD $0x14000002 // b LBB0_447 $8(%rip) -LBB0_446: + WORD $0x8a0401c4 // and x4, x14, x4 + WORD $0x14000002 // b LBB0_462 $8(%rip) +LBB0_461: WORD $0xd280001b // mov x27, #0 -LBB0_447: - WORD $0xb5002462 // cbnz x2, LBB0_484 $1164(%rip) - WORD $0x91008273 // add x19, x19, #32 +LBB0_462: + WORD $0xb50025c4 // cbnz x4, LBB0_496 $1208(%rip) + WORD $0x91008210 // add x16, x16, #32 WORD $0xd100835a // sub x26, x26, #32 WORD $0x8b1a028e // add x14, x20, x26 WORD $0xf100fddf // cmp x14, #63 - WORD $0x54fffa6c // b.gt LBB0_444 $-180(%rip) - WORD $0xb50028db // cbnz x27, LBB0_495 $1304(%rip) - WORD $0x8b1702ae // add x14, x21, x23 - WORD $0x8b1301ce // add x14, x14, x19 - WORD $0x910005d7 // add x23, x14, #1 - WORD $0xaa3303ee // mvn x14, x19 - WORD $0x8b1401d3 // add x19, x14, x20 -LBB0_451: - WORD $0xaa0a03f0 // mov x16, x10 - WORD $0xaa0503ea // mov x10, x5 - WORD $0x14000121 // b LBB0_488 $1156(%rip) -LBB0_452: - WORD $0xf9000ff0 // str x16, [sp, #24] - WORD $0xd280001e // mov lr, #0 + WORD $0x54fffa6c // b.gt LBB0_459 $-180(%rip) + WORD $0xb5002b5b // cbnz x27, LBB0_507 $1384(%rip) + WORD $0x8b1302ce // add x14, x22, x19 + WORD $0x8b1001ce // add x14, x14, x16 + WORD $0x910005d3 // add x19, x14, #1 + WORD $0xaa3003ee // mvn x14, x16 + WORD $0x8b1401d0 // add x16, x14, x20 + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 +LBB0_466: + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0xaa0a03fb // mov x27, x10 + WORD $0x1400012c // b LBB0_500 $1200(%rip) +LBB0_467: + WORD $0xf90017fe // str lr, [sp, #40] + WORD $0xd2800013 // mov x19, #0 + WORD $0xd280001b // mov x27, #0 + WORD $0xd2800018 // mov x24, #0 WORD $0xd280001a // mov x26, #0 - WORD $0xd2800017 // mov x23, #0 - WORD $0xd2800019 // mov x25, #0 WORD $0xf940040e // ldr x14, [x0, #8] - WORD $0xcb1801cf // sub x15, x14, x24 - WORD $0x8b1802b5 // add x21, x21, x24 - WORD $0x14000009 // b LBB0_454 $36(%rip) -LBB0_453: - WORD $0x937ffe7e // asr lr, x19, #63 - WORD $0x9e670293 // fmov d19, x20 - WORD $0x0e205a73 // cnt.8b v19, v19 - WORD $0x2e303a73 // uaddlv.8b h19, v19 - WORD $0x1e26026e // fmov w14, s19 - WORD $0x8b1701d7 // add x23, x14, x23 - WORD $0x910102b5 // add x21, x21, #64 - WORD $0xf9400bef // ldr x15, [sp, #16] -LBB0_454: - WORD $0xf10101ee // subs x14, x15, #64 - WORD $0xf9000bee // str x14, [sp, #16] - WORD $0x5400174b // b.lt LBB0_463 $744(%rip) - WORD $0xaa0f03ea // mov x10, x15 -LBB0_456: - WORD $0xad4056b6 // ldp q22, q21, [x21] - WORD $0xad414eb4 // ldp q20, q19, [x21, #32] + WORD $0xcb1901de // sub lr, x14, x25 + WORD $0x8b1902d6 // add x22, x22, x25 + WORD $0xf10103ca // subs x10, lr, #64 + WORD $0xf90013ea // str x10, [sp, #32] + WORD $0x540006ea // b.ge LBB0_485 $220(%rip) +LBB0_468: + WORD $0xf10003df // cmp lr, #0 + WORD $0x540026cd // b.le LBB0_506 $1240(%rip) + WORD $0xad02c3f0 // stp q16, q16, [sp, #80] + WORD $0xad01c3f0 // stp q16, q16, [sp, #48] + WORD $0x92402ec8 // and x8, x22, #0xfff + WORD $0xf13f051f // cmp x8, #4033 + WORD $0x54000363 // b.lo LBB0_480 $108(%rip) + WORD $0xf10083d0 // subs x16, lr, #32 + WORD $0x540000a3 // b.lo LBB0_472 $20(%rip) + WORD $0xacc152d3 // ldp q19, q20, [x22], #32 + WORD $0xad01d3f3 // stp q19, q20, [sp, #48] + WORD $0xaa0b03e8 // mov x8, x11 + WORD $0x14000003 // b LBB0_473 $12(%rip) +LBB0_472: + WORD $0x9100c3e8 // add x8, sp, #48 + WORD $0xaa1e03f0 // mov x16, lr +LBB0_473: + WORD $0xf1004202 // subs x2, x16, #16 + WORD $0x54000303 // b.lo LBB0_481 $96(%rip) + WORD $0x3cc106d3 // ldr q19, [x22], #16 + WORD $0x3c810513 // str q19, [x8], #16 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xf1002042 // subs x2, x2, #8 + WORD $0x540002a2 // b.hs LBB0_482 $84(%rip) +LBB0_475: + WORD $0xf1001202 // subs x2, x16, #4 + WORD $0x54000303 // b.lo LBB0_483 $96(%rip) +LBB0_476: + WORD $0xb84046ce // ldr w14, [x22], #4 + WORD $0xb800450e // str w14, [x8], #4 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xf1000842 // subs x2, x2, #2 + WORD $0x540002a2 // b.hs LBB0_484 $84(%rip) +LBB0_477: + WORD $0xb4000070 // cbz x16, LBB0_479 $12(%rip) +LBB0_478: + WORD $0x394002ce // ldrb w14, [x22] + WORD $0x3900010e // strb w14, [x8] +LBB0_479: + WORD $0x9100c3f6 // add x22, sp, #48 +LBB0_480: + WORD $0xb201e3e8 // mov x8, #-8608480567731124088 + WORD $0x529ffff5 // mov w21, #65535 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0x1400000f // b LBB0_485 $60(%rip) +LBB0_481: + WORD $0xf1002202 // subs x2, x16, #8 + WORD $0x54fffda3 // b.lo LBB0_475 $-76(%rip) +LBB0_482: + WORD $0xf84086ce // ldr x14, [x22], #8 + WORD $0xf800850e // str x14, [x8], #8 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xf1001042 // subs x2, x2, #4 + WORD $0x54fffd42 // b.hs LBB0_476 $-88(%rip) +LBB0_483: + WORD $0xf1000a02 // subs x2, x16, #2 + WORD $0x54fffda3 // b.lo LBB0_477 $-76(%rip) +LBB0_484: + WORD $0x784026ce // ldrh w14, [x22], #2 + WORD $0x7800250e // strh w14, [x8], #2 + WORD $0xaa0203f0 // mov x16, x2 + WORD $0xb5fffd42 // cbnz x2, LBB0_478 $-88(%rip) + WORD $0x17ffffeb // b LBB0_479 $-84(%rip) +LBB0_485: + WORD $0xad4056d6 // ldp q22, q21, [x22] + WORD $0xad414ed4 // ldp q20, q19, [x22, #32] WORD $0x6e238ed7 // cmeq.16b v23, v22, v3 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 @@ -2546,23 +2798,23 @@ LBB0_456: WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f020f // orr x15, x16, x15 - WORD $0xaa0e01e2 // orr x2, x15, x14 - WORD $0xaa1a004e // orr x14, x2, x26 - WORD $0xb500008e // cbnz x14, LBB0_458 $16(%rip) - WORD $0xd280001a // mov x26, #0 - WORD $0xd2800002 // mov x2, #0 - WORD $0x1400000a // b LBB0_459 $40(%rip) -LBB0_458: - WORD $0x8a3a004e // bic x14, x2, x26 - WORD $0xaa0e074f // orr x15, x26, x14, lsl #1 - WORD $0x8a2f0050 // bic x16, x2, x15 + WORD $0xaa0e01f0 // orr x16, x15, x14 + WORD $0xaa1b020e // orr x14, x16, x27 + WORD $0xb500008e // cbnz x14, LBB0_487 $16(%rip) + WORD $0xd280001b // mov x27, #0 + WORD $0xd2800010 // mov x16, #0 + WORD $0x1400000a // b LBB0_488 $40(%rip) +LBB0_487: + WORD $0x8a3b020e // bic x14, x16, x27 + WORD $0xaa0e076f // orr x15, x27, x14, lsl #1 + WORD $0x8a2f0210 // bic x16, x16, x15 WORD $0x9201f210 // and x16, x16, #0xaaaaaaaaaaaaaaaa WORD $0xab0e020e // adds x14, x16, x14 - WORD $0x1a9f37fa // cset w26, hs + WORD $0x1a9f37fb // cset w27, hs WORD $0xd37ff9ce // lsl x14, x14, #1 WORD $0xd200f1ce // eor x14, x14, #0x5555555555555555 - WORD $0x8a0f01c2 // and x2, x14, x15 -LBB0_459: + WORD $0x8a0f01d0 // and x16, x14, x15 +LBB0_488: WORD $0x6e208ed7 // cmeq.16b v23, v22, v0 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 @@ -2577,68 +2829,65 @@ LBB0_459: WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f0 // fmov w16, s23 + WORD $0x1e2602f1 // fmov w17, s23 WORD $0x6e208e77 // cmeq.16b v23, v19, v0 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f1 // fmov w17, s23 - WORD $0xd3607e10 // lsl x16, x16, #32 - WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 + WORD $0x1e2602e2 // fmov w2, s23 + WORD $0xd3607e31 // lsl x17, x17, #32 + WORD $0xaa02c231 // orr x17, x17, x2, lsl #48 WORD $0x53103def // lsl w15, w15, #16 - WORD $0xaa0f020f // orr x15, x16, x15 + WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0x8a2201ce // bic x14, x14, x2 + WORD $0x8a3001ce // bic x14, x14, x16 WORD $0x9200e1cf // and x15, x14, #0x1111111111111111 WORD $0x9203e1d0 // and x16, x14, #0x2222222222222222 WORD $0x9202e1d1 // and x17, x14, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 - WORD $0xb200e3f4 // mov x20, #1229782938247303441 - WORD $0x9b147de2 // mul x2, x15, x20 - WORD $0xb201e3f3 // mov x19, #-8608480567731124088 - WORD $0xf2e11113 // movk x19, #2184, lsl #48 - WORD $0x9b137e05 // mul x5, x16, x19 - WORD $0xca050042 // eor x2, x2, x5 - WORD $0xb202e3e7 // mov x7, #4919131752989213764 - WORD $0xf2e08887 // movk x7, #1092, lsl #48 + WORD $0xb200e3ea // mov x10, #1229782938247303441 + WORD $0x9b0a7de2 // mul x2, x15, x10 + WORD $0x9b077e04 // mul x4, x16, x7 + WORD $0xca040042 // eor x2, x2, x4 + WORD $0x9b147e24 // mul x4, x17, x20 + WORD $0xb203e3e5 // mov x5, #2459565876494606882 + WORD $0xf2e04445 // movk x5, #546, lsl #48 + WORD $0x9b057dc5 // mul x5, x14, x5 + WORD $0xca050084 // eor x4, x4, x5 + WORD $0xca040042 // eor x2, x2, x4 + WORD $0xb203e3f9 // mov x25, #2459565876494606882 + WORD $0x9b197de4 // mul x4, x15, x25 + WORD $0x9b0a7e05 // mul x5, x16, x10 + WORD $0xca050084 // eor x4, x4, x5 WORD $0x9b077e25 // mul x5, x17, x7 - WORD $0xb203e3e6 // mov x6, #2459565876494606882 - WORD $0xf2e04446 // movk x6, #546, lsl #48 - WORD $0x9b067dc6 // mul x6, x14, x6 + WORD $0x9b147dc6 // mul x6, x14, x20 WORD $0xca0600a5 // eor x5, x5, x6 - WORD $0xca050042 // eor x2, x2, x5 - WORD $0xb203e3f8 // mov x24, #2459565876494606882 - WORD $0x9b187de5 // mul x5, x15, x24 - WORD $0x9b147e06 // mul x6, x16, x20 + WORD $0xca050084 // eor x4, x4, x5 + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0x9b147de5 // mul x5, x15, x20 + WORD $0x9b197e06 // mul x6, x16, x25 WORD $0xca0600a5 // eor x5, x5, x6 - WORD $0x9b137e26 // mul x6, x17, x19 + WORD $0x9b0a7e26 // mul x6, x17, x10 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 WORD $0x9b077dc7 // mul x7, x14, x7 WORD $0xca0700c6 // eor x6, x6, x7 WORD $0xca0600a5 // eor x5, x5, x6 - WORD $0xb202e3fb // mov x27, #4919131752989213764 - WORD $0x9b1b7de6 // mul x6, x15, x27 - WORD $0x9b187e07 // mul x7, x16, x24 - WORD $0xca0700c6 // eor x6, x6, x7 - WORD $0x9b147e27 // mul x7, x17, x20 - WORD $0x9b137dd3 // mul x19, x14, x19 - WORD $0xca1300e7 // eor x7, x7, x19 - WORD $0xca0700c6 // eor x6, x6, x7 - WORD $0xb201e3e7 // mov x7, #-8608480567731124088 - WORD $0x9b077def // mul x15, x15, x7 - WORD $0x9b1b7e10 // mul x16, x16, x27 + WORD $0x9b087def // mul x15, x15, x8 + WORD $0x9b147e10 // mul x16, x16, x20 WORD $0xca1001ef // eor x15, x15, x16 - WORD $0x9b187e30 // mul x16, x17, x24 - WORD $0x9b147dce // mul x14, x14, x20 + WORD $0x9b197e30 // mul x16, x17, x25 + WORD $0x9b0a7dce // mul x14, x14, x10 WORD $0xca0e020e // eor x14, x16, x14 WORD $0xca0e01ee // eor x14, x15, x14 WORD $0x9200e04f // and x15, x2, #0x1111111111111111 - WORD $0x9203e0b0 // and x16, x5, #0x2222222222222222 - WORD $0x9202e0d1 // and x17, x6, #0x4444444444444444 + WORD $0x9203e090 // and x16, x4, #0x2222222222222222 + WORD $0x9202e0b1 // and x17, x5, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 WORD $0xaa1001ef // orr x15, x15, x16 WORD $0xaa0e022e // orr x14, x17, x14 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xca1e01d3 // eor x19, x14, lr + WORD $0xca1301d0 // eor x16, x14, x19 WORD $0x6e278ed7 // cmeq.16b v23, v22, v7 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 @@ -2653,18 +2902,18 @@ LBB0_459: WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f0 // fmov w16, s23 + WORD $0x1e2602f1 // fmov w17, s23 WORD $0x6e278e77 // cmeq.16b v23, v19, v7 WORD $0x4e211ef7 // and.16b v23, v23, v1 WORD $0x4e0202f7 // tbl.16b v23, { v23 }, v2 WORD $0x4e71baf7 // addv.8h h23, v23 - WORD $0x1e2602f1 // fmov w17, s23 - WORD $0xd3607e10 // lsl x16, x16, #32 - WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 + WORD $0x1e2602e2 // fmov w2, s23 + WORD $0xd3607e31 // lsl x17, x17, #32 + WORD $0xaa02c231 // orr x17, x17, x2, lsl #48 WORD $0x53103def // lsl w15, w15, #16 - WORD $0xaa0f020f // orr x15, x16, x15 + WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0x8a3301d4 // bic x20, x14, x19 + WORD $0x8a3001d4 // bic x20, x14, x16 WORD $0x6e268ed6 // cmeq.16b v22, v22, v6 WORD $0x4e211ed6 // and.16b v22, v22, v1 WORD $0x4e0202d6 // tbl.16b v22, { v22 }, v2 @@ -2679,201 +2928,174 @@ LBB0_459: WORD $0x4e211e94 // and.16b v20, v20, v1 WORD $0x4e020294 // tbl.16b v20, { v20 }, v2 WORD $0x4e71ba94 // addv.8h h20, v20 - WORD $0x1e260290 // fmov w16, s20 + WORD $0x1e260291 // fmov w17, s20 WORD $0x6e268e73 // cmeq.16b v19, v19, v6 WORD $0x4e211e73 // and.16b v19, v19, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 WORD $0x4e71ba73 // addv.8h h19, v19 - WORD $0x1e260271 // fmov w17, s19 - WORD $0xd3607e10 // lsl x16, x16, #32 - WORD $0xaa11c210 // orr x16, x16, x17, lsl #48 + WORD $0x1e260262 // fmov w2, s19 + WORD $0xd3607e31 // lsl x17, x17, #32 + WORD $0xaa02c231 // orr x17, x17, x2, lsl #48 WORD $0x53103def // lsl w15, w15, #16 - WORD $0xaa0f020f // orr x15, x16, x15 + WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xea3301c2 // bics x2, x14, x19 - WORD $0x54ffe960 // b.eq LBB0_453 $-724(%rip) - WORD $0x3200f3f1 // mov w17, #1431655765 -LBB0_461: - WORD $0xd1000447 // sub x7, x2, #1 - WORD $0x8a1400ee // and x14, x7, x20 + WORD $0xea3001c4 // bics x4, x14, x16 + WORD $0x54000220 // b.eq LBB0_492 $68(%rip) + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 +LBB0_490: + WORD $0xd1000482 // sub x2, x4, #1 + WORD $0x8a14004e // and x14, x2, x20 WORD $0x9e6701d3 // fmov d19, x14 WORD $0x0e205a73 // cnt.8b v19, v19 WORD $0x2e303a73 // uaddlv.8b h19, v19 WORD $0x1e26026e // fmov w14, s19 - WORD $0x8b1701ce // add x14, x14, x23 - WORD $0xeb1901df // cmp x14, x25 - WORD $0x540007a9 // b.ls LBB0_481 $244(%rip) - WORD $0x91000739 // add x25, x25, #1 - WORD $0xea0200e2 // ands x2, x7, x2 - WORD $0x54fffea1 // b.ne LBB0_461 $-44(%rip) - WORD $0x17ffff3d // b LBB0_453 $-780(%rip) -LBB0_463: - WORD $0xf10001ff // cmp x15, #0 - WORD $0x54000d2d // b.le LBB0_494 $420(%rip) - WORD $0xaa0f03ea // mov x10, x15 - WORD $0xad0243f0 // stp q16, q16, [sp, #64] - WORD $0xad0143f0 // stp q16, q16, [sp, #32] - WORD $0x92402ea8 // and x8, x21, #0xfff - WORD $0xf13f051f // cmp x8, #4033 - WORD $0x54000363 // b.lo LBB0_475 $108(%rip) - WORD $0xf1008153 // subs x19, x10, #32 - WORD $0x540000a3 // b.lo LBB0_467 $20(%rip) - WORD $0xacc152b3 // ldp q19, q20, [x21], #32 - WORD $0xad0153f3 // stp q19, q20, [sp, #32] - WORD $0xaa0b03e8 // mov x8, x11 - WORD $0x14000003 // b LBB0_468 $12(%rip) -LBB0_467: - WORD $0x910083e8 // add x8, sp, #32 - WORD $0xaa0a03f3 // mov x19, x10 -LBB0_468: - WORD $0xf1004262 // subs x2, x19, #16 - WORD $0x54000283 // b.lo LBB0_476 $80(%rip) - WORD $0x3cc106b3 // ldr q19, [x21], #16 - WORD $0x3c810513 // str q19, [x8], #16 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xf1002042 // subs x2, x2, #8 - WORD $0x54000222 // b.hs LBB0_477 $68(%rip) -LBB0_470: - WORD $0xf1001262 // subs x2, x19, #4 - WORD $0x54000283 // b.lo LBB0_478 $80(%rip) -LBB0_471: - WORD $0xb84046ae // ldr w14, [x21], #4 - WORD $0xb800450e // str w14, [x8], #4 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xf1000842 // subs x2, x2, #2 - WORD $0x54000222 // b.hs LBB0_479 $68(%rip) -LBB0_472: - WORD $0xb4000073 // cbz x19, LBB0_474 $12(%rip) -LBB0_473: - WORD $0x394002ae // ldrb w14, [x21] - WORD $0x3900010e // strb w14, [x8] -LBB0_474: - WORD $0x910083f5 // add x21, sp, #32 -LBB0_475: - WORD $0x529fffe8 // mov w8, #65535 - WORD $0x3201f3e4 // mov w4, #-1431655766 - WORD $0x17ffff24 // b LBB0_456 $-880(%rip) -LBB0_476: - WORD $0xf1002262 // subs x2, x19, #8 - WORD $0x54fffe23 // b.lo LBB0_470 $-60(%rip) -LBB0_477: - WORD $0xf84086ae // ldr x14, [x21], #8 - WORD $0xf800850e // str x14, [x8], #8 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xf1001042 // subs x2, x2, #4 - WORD $0x54fffdc2 // b.hs LBB0_471 $-72(%rip) -LBB0_478: - WORD $0xf1000a62 // subs x2, x19, #2 - WORD $0x54fffe23 // b.lo LBB0_472 $-60(%rip) -LBB0_479: - WORD $0x784026ae // ldrh w14, [x21], #2 - WORD $0x7800250e // strh w14, [x8], #2 - WORD $0xaa0203f3 // mov x19, x2 - WORD $0xb5fffdc2 // cbnz x2, LBB0_473 $-72(%rip) - WORD $0x17ffffef // b LBB0_474 $-68(%rip) -LBB0_480: - WORD $0xf940040e // ldr x14, [x0, #8] - WORD $0xdac0004f // rbit x15, x2 - WORD $0xdac011ef // clz x15, x15 - WORD $0xf9400bea // ldr x10, [sp, #16] - WORD $0x14000004 // b LBB0_482 $16(%rip) -LBB0_481: + WORD $0x8b1801ce // add x14, x14, x24 + WORD $0xeb1a01df // cmp x14, x26 + WORD $0x540002a9 // b.ls LBB0_494 $84(%rip) + WORD $0x9100075a // add x26, x26, #1 + WORD $0xea040044 // ands x4, x2, x4 + WORD $0x54fffea1 // b.ne LBB0_490 $-44(%rip) + WORD $0x14000003 // b LBB0_493 $12(%rip) +LBB0_492: + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 +LBB0_493: + WORD $0x937ffe13 // asr x19, x16, #63 + WORD $0x9e670293 // fmov d19, x20 + WORD $0x0e205a73 // cnt.8b v19, v19 + WORD $0x2e303a73 // uaddlv.8b h19, v19 + WORD $0x1e26026e // fmov w14, s19 + WORD $0x8b1801d8 // add x24, x14, x24 + WORD $0x910102d6 // add x22, x22, #64 + WORD $0xf94013fe // ldr lr, [sp, #32] + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0xf10103ca // subs x10, lr, #64 + WORD $0xf90013ea // str x10, [sp, #32] + WORD $0x54ffe76a // b.ge LBB0_485 $-788(%rip) + WORD $0x17ffff04 // b LBB0_468 $-1008(%rip) +LBB0_494: WORD $0xf940040e // ldr x14, [x0, #8] - WORD $0xdac0004f // rbit x15, x2 + WORD $0xdac0008f // rbit x15, x4 WORD $0xdac011ef // clz x15, x15 -LBB0_482: - WORD $0xcb0a01ef // sub x15, x15, x10 + WORD $0xcb1e01ef // sub x15, x15, lr WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910005cf // add x15, x14, #1 WORD $0xf900002f // str x15, [x1] WORD $0xf9400410 // ldr x16, [x0, #8] WORD $0xeb1001ff // cmp x15, x16 - WORD $0x9a8e2618 // csinc x24, x16, x14, hs - WORD $0xf9000038 // str x24, [x1] -LBB0_483: - WORD $0xf9400ff0 // ldr x16, [sp, #24] -Lloh12: - WORD $0x10011a4a // adr x10, __UnquoteTab $9032(%rip) -Lloh13: - WORD $0x9100014a // add x10, x10, __UnquoteTab@PAGEOFF $0(%rip) - WORD $0x17fffd6b // b LBB0_391 $-2644(%rip) -LBB0_484: - WORD $0xdac0004e // rbit x14, x2 + WORD $0x9a8e2619 // csinc x25, x16, x14, hs + WORD $0xf9000039 // str x25, [x1] + WORD $0x3200f3e5 // mov w5, #1431655765 + WORD $0xf94017fe // ldr lr, [sp, #40] + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 +LBB0_495: + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 +Lloh20: + WORD $0x1001209b // adr x27, __UnquoteTab $9232(%rip) +Lloh21: + WORD $0x9100037b // add x27, x27, __UnquoteTab@PAGEOFF $0(%rip) + WORD $0x17fffe54 // b LBB0_431 $-1712(%rip) +LBB0_496: + WORD $0xdac0008e // rbit x14, x4 WORD $0xdac011ce // clz x14, x14 - WORD $0x8b1302ef // add x15, x23, x19 + WORD $0x8b10026f // add x15, x19, x16 WORD $0x8b0f01ce // add x14, x14, x15 - WORD $0x910009d8 // add x24, x14, #2 - WORD $0xf9000038 // str x24, [x1] -LBB0_485: - WORD $0xaa0a03f0 // mov x16, x10 - WORD $0xaa0503ea // mov x10, x5 - WORD $0x17fffd62 // b LBB0_391 $-2680(%rip) -LBB0_486: - WORD $0xf9000038 // str x24, [x1] - WORD $0x17fffd60 // b LBB0_391 $-2688(%rip) -LBB0_487: - WORD $0x8b1802b7 // add x23, x21, x24 -LBB0_488: - WORD $0xf100067f // cmp x19, #1 - WORD $0x540000ea // b.ge LBB0_490 $28(%rip) - WORD $0x17fffd5c // b LBB0_391 $-2704(%rip) -LBB0_489: + WORD $0x910009d9 // add x25, x14, #2 + WORD $0xf9000039 // str x25, [x1] + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 +LBB0_497: + WORD $0xb202e3f4 // mov x20, #4919131752989213764 + WORD $0xf2e08894 // movk x20, #1092, lsl #48 + WORD $0xaa0a03fb // mov x27, x10 + WORD $0x17fffe48 // b LBB0_431 $-1760(%rip) +LBB0_498: + WORD $0xf9000039 // str x25, [x1] + WORD $0x17fffe46 // b LBB0_431 $-1768(%rip) +LBB0_499: + WORD $0x8b1902d3 // add x19, x22, x25 +LBB0_500: + WORD $0xf100061f // cmp x16, #1 + WORD $0x540000ea // b.ge LBB0_502 $28(%rip) + WORD $0x17fffe42 // b LBB0_431 $-1784(%rip) +LBB0_501: WORD $0x92800022 // mov x2, #-2 - WORD $0x52800047 // mov w7, #2 - WORD $0x8b0702f7 // add x23, x23, x7 - WORD $0xab020273 // adds x19, x19, x2 - WORD $0x54ffaaed // b.le LBB0_391 $-2724(%rip) -LBB0_490: - WORD $0x394002e2 // ldrb w2, [x23] + WORD $0x52800044 // mov w4, #2 + WORD $0x8b040273 // add x19, x19, x4 + WORD $0xab020210 // adds x16, x16, x2 + WORD $0x54ffc7ad // b.le LBB0_431 $-1804(%rip) +LBB0_502: + WORD $0x39400262 // ldrb w2, [x19] WORD $0x7101705f // cmp w2, #92 - WORD $0x54ffff20 // b.eq LBB0_489 $-28(%rip) + WORD $0x54ffff20 // b.eq LBB0_501 $-28(%rip) WORD $0x7100885f // cmp w2, #34 - WORD $0x540000e0 // b.eq LBB0_493 $28(%rip) + WORD $0x540000e0 // b.eq LBB0_505 $28(%rip) WORD $0x92800002 // mov x2, #-1 - WORD $0x52800027 // mov w7, #1 - WORD $0x8b0702f7 // add x23, x23, x7 - WORD $0xab020273 // adds x19, x19, x2 - WORD $0x54fffeec // b.gt LBB0_490 $-36(%rip) - WORD $0x17fffd4c // b LBB0_391 $-2768(%rip) -LBB0_493: - WORD $0xcb1502ee // sub x14, x23, x21 - WORD $0x910005d8 // add x24, x14, #1 - WORD $0xf9000038 // str x24, [x1] - WORD $0x17fffd48 // b LBB0_391 $-2784(%rip) -LBB0_494: - WORD $0xf9400418 // ldr x24, [x0, #8] - WORD $0xf9000038 // str x24, [x1] - WORD $0x529fffe8 // mov w8, #65535 - WORD $0x3200f3f1 // mov w17, #1431655765 - WORD $0x3201f3e4 // mov w4, #-1431655766 - WORD $0x17ffffd4 // b LBB0_483 $-176(%rip) -LBB0_495: + WORD $0x52800024 // mov w4, #1 + WORD $0x8b040273 // add x19, x19, x4 + WORD $0xab020210 // adds x16, x16, x2 + WORD $0x54fffeec // b.gt LBB0_502 $-36(%rip) + WORD $0x17fffe32 // b LBB0_431 $-1848(%rip) +LBB0_505: + WORD $0xcb16026e // sub x14, x19, x22 + WORD $0x910005d9 // add x25, x14, #1 + WORD $0xf9000039 // str x25, [x1] + WORD $0x17fffe2e // b LBB0_431 $-1864(%rip) +LBB0_506: + WORD $0xf9400419 // ldr x25, [x0, #8] + WORD $0xf9000039 // str x25, [x1] + WORD $0xb201e3e8 // mov x8, #-8608480567731124088 + WORD $0x529ffff5 // mov w21, #65535 + WORD $0x3200f3e5 // mov w5, #1431655765 + WORD $0xf94017fe // ldr lr, [sp, #40] + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0x17ffffca // b LBB0_495 $-216(%rip) +LBB0_507: WORD $0xd1000688 // sub x8, x20, #1 - WORD $0xeb13011f // cmp x8, x19 - WORD $0x540000a1 // b.ne LBB0_497 $20(%rip) - WORD $0x529fffe8 // mov w8, #65535 - WORD $0x3200f3f1 // mov w17, #1431655765 - WORD $0x3201f3e4 // mov w4, #-1431655766 - WORD $0x17ffffd7 // b LBB0_485 $-164(%rip) -LBB0_497: - WORD $0x8b1702a8 // add x8, x21, x23 - WORD $0x8b130108 // add x8, x8, x19 - WORD $0x91000917 // add x23, x8, #2 - WORD $0xcb130288 // sub x8, x20, x19 - WORD $0xd1000913 // sub x19, x8, #2 - WORD $0x529fffe8 // mov w8, #65535 - WORD $0x3200f3f1 // mov w17, #1431655765 - WORD $0x3201f3e4 // mov w4, #-1431655766 - WORD $0x17fffeb1 // b LBB0_451 $-1340(%rip) -LBB0_498: + WORD $0xeb10011f // cmp x8, x16 + WORD $0x54000141 // b.ne LBB0_509 $40(%rip) + WORD $0xb201e3e8 // mov x8, #-8608480567731124088 + WORD $0x529ffff5 // mov w21, #65535 + WORD $0x3200f3e5 // mov w5, #1431655765 + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0x17ffffcb // b LBB0_497 $-212(%rip) +LBB0_509: + WORD $0x8b1302c8 // add x8, x22, x19 + WORD $0x8b100108 // add x8, x8, x16 + WORD $0x91000913 // add x19, x8, #2 + WORD $0xcb100288 // sub x8, x20, x16 + WORD $0xd1000910 // sub x16, x8, #2 + WORD $0xb201e3e8 // mov x8, #-8608480567731124088 + WORD $0x529ffff5 // mov w21, #65535 + WORD $0x3200f3e5 // mov w5, #1431655765 + WORD $0x3201f3e6 // mov w6, #-1431655766 + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 + WORD $0xb201e3e7 // mov x7, #-8608480567731124088 + WORD $0xf2e11107 // movk x7, #2184, lsl #48 + WORD $0x17fffe95 // b LBB0_466 $-1452(%rip) +LBB0_510: WORD $0x91004129 // add x9, x9, #16 - WORD $0xeb10013f // cmp x9, x16 - WORD $0x54fec701 // b.ne LBB0_2 $-10016(%rip) -LBB0_499: - WORD $0xb4009b23 // cbz x3, LBB0_777 $4964(%rip) -Lloh14: - WORD $0x10fec1a8 // adr x8, lCPI0_2 $-10188(%rip) -Lloh15: + WORD $0xeb1e013f // cmp x9, lr + WORD $0x54fead61 // b.ne LBB0_2 $-10836(%rip) +LBB0_511: + WORD $0xb4009b23 // cbz x3, LBB0_789 $4964(%rip) +Lloh22: + WORD $0x10fea728 // adr x8, lCPI0_2 $-11036(%rip) +Lloh23: WORD $0x3dc00100 // ldr q0, [x8, lCPI0_2@PAGEOFF] $0(%rip) WORD $0xaa0303ea // mov x10, x3 WORD $0x3c808540 // str q0, [x10], #8 @@ -2890,13 +3112,13 @@ Lloh15: WORD $0x52800085 // mov w5, #4 WORD $0x4f01e440 // movi.16b v0, #34 WORD $0x4f02e781 // movi.16b v1, #92 -Lloh16: - WORD $0x10febe88 // adr x8, lCPI0_0 $-10288(%rip) -Lloh17: +Lloh24: + WORD $0x10fea408 // adr x8, lCPI0_0 $-11136(%rip) +Lloh25: WORD $0x3dc00102 // ldr q2, [x8, lCPI0_0@PAGEOFF] $0(%rip) -Lloh18: - WORD $0x10febec8 // adr x8, lCPI0_1 $-10280(%rip) -Lloh19: +Lloh26: + WORD $0x10fea448 // adr x8, lCPI0_1 $-11128(%rip) +Lloh27: WORD $0x3dc00103 // ldr q3, [x8, lCPI0_1@PAGEOFF] $0(%rip) WORD $0x92f00006 // mov x6, #9223372036854775807 WORD $0x4f01e5c4 // movi.16b v4, #46 @@ -2908,104 +3130,104 @@ Lloh19: WORD $0x4f06e7f1 // movi.16b v17, #223 WORD $0x4f02e4b2 // movi.16b v18, #69 WORD $0x52800024 // mov w4, #1 -LBB0_501: +LBB0_513: WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xeb08037f // cmp x27, x8 - WORD $0x54000162 // b.hs LBB0_506 $44(%rip) + WORD $0x54000162 // b.hs LBB0_518 $44(%rip) WORD $0x387b6931 // ldrb w17, [x9, x27] WORD $0x7100363f // cmp w17, #13 - WORD $0x54000100 // b.eq LBB0_506 $32(%rip) + WORD $0x54000100 // b.eq LBB0_518 $32(%rip) WORD $0x7100823f // cmp w17, #32 - WORD $0x540000c0 // b.eq LBB0_506 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_518 $24(%rip) WORD $0x51002e31 // sub w17, w17, #11 WORD $0x31000a3f // cmn w17, #2 - WORD $0x54000062 // b.hs LBB0_506 $12(%rip) + WORD $0x54000062 // b.hs LBB0_518 $12(%rip) WORD $0xaa1b03fa // mov x26, x27 - WORD $0x14000031 // b LBB0_522 $196(%rip) -LBB0_506: + WORD $0x14000031 // b LBB0_534 $196(%rip) +LBB0_518: WORD $0x9100077a // add x26, x27, #1 WORD $0xeb08035f // cmp x26, x8 - WORD $0x54000122 // b.hs LBB0_510 $36(%rip) + WORD $0x54000122 // b.hs LBB0_522 $36(%rip) WORD $0x387a6931 // ldrb w17, [x9, x26] WORD $0x7100363f // cmp w17, #13 - WORD $0x540000c0 // b.eq LBB0_510 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_522 $24(%rip) WORD $0x7100823f // cmp w17, #32 - WORD $0x54000080 // b.eq LBB0_510 $16(%rip) + WORD $0x54000080 // b.eq LBB0_522 $16(%rip) WORD $0x51002e31 // sub w17, w17, #11 WORD $0x31000a3f // cmn w17, #2 - WORD $0x540004c3 // b.lo LBB0_522 $152(%rip) -LBB0_510: + WORD $0x540004c3 // b.lo LBB0_534 $152(%rip) +LBB0_522: WORD $0x91000b7a // add x26, x27, #2 WORD $0xeb08035f // cmp x26, x8 - WORD $0x54000122 // b.hs LBB0_514 $36(%rip) + WORD $0x54000122 // b.hs LBB0_526 $36(%rip) WORD $0x387a6931 // ldrb w17, [x9, x26] WORD $0x7100363f // cmp w17, #13 - WORD $0x540000c0 // b.eq LBB0_514 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_526 $24(%rip) WORD $0x7100823f // cmp w17, #32 - WORD $0x54000080 // b.eq LBB0_514 $16(%rip) + WORD $0x54000080 // b.eq LBB0_526 $16(%rip) WORD $0x51002e31 // sub w17, w17, #11 WORD $0x31000a3f // cmn w17, #2 - WORD $0x54000363 // b.lo LBB0_522 $108(%rip) -LBB0_514: + WORD $0x54000363 // b.lo LBB0_534 $108(%rip) +LBB0_526: WORD $0x91000f7a // add x26, x27, #3 WORD $0xeb08035f // cmp x26, x8 - WORD $0x54000122 // b.hs LBB0_518 $36(%rip) + WORD $0x54000122 // b.hs LBB0_530 $36(%rip) WORD $0x387a6931 // ldrb w17, [x9, x26] WORD $0x7100363f // cmp w17, #13 - WORD $0x540000c0 // b.eq LBB0_518 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_530 $24(%rip) WORD $0x7100823f // cmp w17, #32 - WORD $0x54000080 // b.eq LBB0_518 $16(%rip) + WORD $0x54000080 // b.eq LBB0_530 $16(%rip) WORD $0x51002e31 // sub w17, w17, #11 WORD $0x31000a3f // cmn w17, #2 - WORD $0x54000203 // b.lo LBB0_522 $64(%rip) -LBB0_518: + WORD $0x54000203 // b.lo LBB0_534 $64(%rip) +LBB0_530: WORD $0x9100137a // add x26, x27, #4 WORD $0xeb08035f // cmp x26, x8 - WORD $0x5400a902 // b.hs LBB0_831 $5408(%rip) -LBB0_519: + WORD $0x5400aca2 // b.hs LBB0_846 $5524(%rip) +LBB0_531: WORD $0x387a6931 // ldrb w17, [x9, x26] WORD $0x7100823f // cmp w17, #32 WORD $0x9ad121f1 // lsl x17, x15, x17 WORD $0x8a100231 // and x17, x17, x16 WORD $0xfa409a24 // ccmp x17, #0, #4, ls - WORD $0x540000a0 // b.eq LBB0_521 $20(%rip) + WORD $0x540000a0 // b.eq LBB0_533 $20(%rip) WORD $0x9100075a // add x26, x26, #1 WORD $0xeb1a011f // cmp x8, x26 - WORD $0x54ffff01 // b.ne LBB0_519 $-32(%rip) - WORD $0x140004bc // b LBB0_797 $4848(%rip) -LBB0_521: + WORD $0x54ffff01 // b.ne LBB0_531 $-32(%rip) + WORD $0x140004bc // b LBB0_809 $4848(%rip) +LBB0_533: WORD $0xeb08035f // cmp x26, x8 - WORD $0x54009742 // b.hs LBB0_797 $4840(%rip) -LBB0_522: + WORD $0x54009742 // b.hs LBB0_809 $4840(%rip) +LBB0_534: WORD $0x9100075b // add x27, x26, #1 WORD $0xf900003b // str x27, [x1] WORD $0x8b1a013e // add lr, x9, x26 WORD $0x394003d4 // ldrb w20, [lr] - WORD $0x340096b4 // cbz w20, LBB0_797 $4820(%rip) + WORD $0x340096b4 // cbz w20, LBB0_809 $4820(%rip) WORD $0xd1000493 // sub x19, x4, #1 WORD $0xf8737948 // ldr x8, [x10, x19, lsl #3] WORD $0xb10005df // cmn x14, #1 WORD $0x9a8e034e // csel x14, x26, x14, eq WORD $0x71000d1f // cmp w8, #3 - WORD $0x54000d0c // b.gt LBB0_538 $416(%rip) + WORD $0x54000d0c // b.gt LBB0_550 $416(%rip) WORD $0x7100051f // cmp w8, #1 - WORD $0x54001b80 // b.eq LBB0_555 $880(%rip) + WORD $0x54001b80 // b.eq LBB0_567 $880(%rip) WORD $0x7100091f // cmp w8, #2 - WORD $0x54001d00 // b.eq LBB0_560 $928(%rip) + WORD $0x54001d00 // b.eq LBB0_572 $928(%rip) WORD $0x71000d1f // cmp w8, #3 - WORD $0x54001c81 // b.ne LBB0_559 $912(%rip) + WORD $0x54001c81 // b.ne LBB0_571 $912(%rip) WORD $0x71008a9f // cmp w20, #34 - WORD $0x5400a3e1 // b.ne LBB0_829 $5244(%rip) + WORD $0x5400a781 // b.ne LBB0_844 $5360(%rip) WORD $0xf8337945 // str x5, [x10, x19, lsl #3] WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xeb1b0113 // subs x19, x8, x27 - WORD $0x5400fc60 // b.eq LBB0_929 $8076(%rip) + WORD $0x54010040 // b.eq LBB0_945 $8200(%rip) WORD $0x3200f3e2 // mov w2, #1431655765 WORD $0xf101027f // cmp x19, #64 - WORD $0x540063e3 // b.lo LBB0_708 $3196(%rip) + WORD $0x540063e3 // b.lo LBB0_720 $3196(%rip) WORD $0xd2800004 // mov x4, #0 WORD $0x9280001e // mov lr, #-1 -LBB0_531: +LBB0_543: WORD $0x8b1b0131 // add x17, x9, x27 WORD $0xad405233 // ldp q19, q20, [x17] WORD $0xad415a35 // ldp q21, q22, [x17, #32] @@ -3059,22 +3281,22 @@ LBB0_531: WORD $0x53103ef4 // lsl w20, w23, #16 WORD $0xaa140231 // orr x17, x17, x20 WORD $0xaa160231 // orr x17, x17, x22 - WORD $0xb5000111 // cbnz x17, LBB0_535 $32(%rip) - WORD $0xb5000184 // cbnz x4, LBB0_536 $48(%rip) - WORD $0xb50002c6 // cbnz x6, LBB0_537 $88(%rip) -LBB0_534: + WORD $0xb5000111 // cbnz x17, LBB0_547 $32(%rip) + WORD $0xb5000184 // cbnz x4, LBB0_548 $48(%rip) + WORD $0xb50002c6 // cbnz x6, LBB0_549 $88(%rip) +LBB0_546: WORD $0xd1010273 // sub x19, x19, #64 WORD $0x9101037b // add x27, x27, #64 WORD $0xf100fe7f // cmp x19, #63 - WORD $0x54fff8a8 // b.hi LBB0_531 $-236(%rip) - WORD $0x140002d6 // b LBB0_705 $2904(%rip) -LBB0_535: + WORD $0x54fff8a8 // b.hi LBB0_543 $-236(%rip) + WORD $0x140002d6 // b LBB0_717 $2904(%rip) +LBB0_547: WORD $0xb10007df // cmn lr, #1 WORD $0xdac00234 // rbit x20, x17 WORD $0xdac01294 // clz x20, x20 WORD $0x8b1b0294 // add x20, x20, x27 WORD $0x9a9413de // csel lr, lr, x20, ne -LBB0_536: +LBB0_548: WORD $0x8a240234 // bic x20, x17, x4 WORD $0xaa140495 // orr x21, x4, x20, lsl #1 WORD $0x8a350231 // bic x17, x17, x21 @@ -3085,8 +3307,8 @@ LBB0_536: WORD $0xd200f231 // eor x17, x17, #0x5555555555555555 WORD $0x8a150231 // and x17, x17, x21 WORD $0x8a3100c6 // bic x6, x6, x17 - WORD $0xb4fffd86 // cbz x6, LBB0_534 $-80(%rip) -LBB0_537: + WORD $0xb4fffd86 // cbz x6, LBB0_546 $-80(%rip) +LBB0_549: WORD $0xdac000d1 // rbit x17, x6 WORD $0xdac01231 // clz x17, x17 WORD $0x8b1b0231 // add x17, x17, x27 @@ -3094,28 +3316,28 @@ LBB0_537: WORD $0x52800062 // mov w2, #3 WORD $0x52800085 // mov w5, #4 WORD $0x92f00006 // mov x6, #9223372036854775807 - WORD $0xb6f8343b // tbz x27, #63, LBB0_642 $1668(%rip) - WORD $0x1400072d // b LBB0_901 $7348(%rip) -LBB0_538: + WORD $0xb6f8343b // tbz x27, #63, LBB0_654 $1668(%rip) + WORD $0x1400074c // b LBB0_917 $7472(%rip) +LBB0_550: WORD $0x7100111f // cmp w8, #4 - WORD $0x54000f40 // b.eq LBB0_557 $488(%rip) + WORD $0x54000f40 // b.eq LBB0_569 $488(%rip) WORD $0x7100151f // cmp w8, #5 - WORD $0x540010c0 // b.eq LBB0_562 $536(%rip) + WORD $0x540010c0 // b.eq LBB0_574 $536(%rip) WORD $0x7100191f // cmp w8, #6 - WORD $0x54000fa1 // b.ne LBB0_559 $500(%rip) + WORD $0x54000fa1 // b.ne LBB0_571 $500(%rip) WORD $0x71008a9f // cmp w20, #34 - WORD $0x54000fe1 // b.ne LBB0_561 $508(%rip) + WORD $0x54000fe1 // b.ne LBB0_573 $508(%rip) WORD $0x52800048 // mov w8, #2 WORD $0xf8337948 // str x8, [x10, x19, lsl #3] WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xeb1b0113 // subs x19, x8, x27 - WORD $0x5400ef60 // b.eq LBB0_929 $7660(%rip) + WORD $0x5400f340 // b.eq LBB0_945 $7784(%rip) WORD $0x3200f3e2 // mov w2, #1431655765 WORD $0xf101027f // cmp x19, #64 - WORD $0x54005cc3 // b.lo LBB0_716 $2968(%rip) + WORD $0x54005cc3 // b.lo LBB0_728 $2968(%rip) WORD $0xd2800004 // mov x4, #0 WORD $0x9280001e // mov lr, #-1 -LBB0_545: +LBB0_557: WORD $0x8b1b0131 // add x17, x9, x27 WORD $0xad405233 // ldp q19, q20, [x17] WORD $0xad415a35 // ldp q21, q22, [x17, #32] @@ -3169,22 +3391,22 @@ LBB0_545: WORD $0x53103ef4 // lsl w20, w23, #16 WORD $0xaa140231 // orr x17, x17, x20 WORD $0xaa160231 // orr x17, x17, x22 - WORD $0xb5000111 // cbnz x17, LBB0_549 $32(%rip) - WORD $0xb5000184 // cbnz x4, LBB0_550 $48(%rip) - WORD $0xb50002c6 // cbnz x6, LBB0_551 $88(%rip) -LBB0_548: + WORD $0xb5000111 // cbnz x17, LBB0_561 $32(%rip) + WORD $0xb5000184 // cbnz x4, LBB0_562 $48(%rip) + WORD $0xb50002c6 // cbnz x6, LBB0_563 $88(%rip) +LBB0_560: WORD $0xd1010273 // sub x19, x19, #64 WORD $0x9101037b // add x27, x27, #64 WORD $0xf100fe7f // cmp x19, #63 - WORD $0x54fff8a8 // b.hi LBB0_545 $-236(%rip) - WORD $0x140002a1 // b LBB0_714 $2692(%rip) -LBB0_549: + WORD $0x54fff8a8 // b.hi LBB0_557 $-236(%rip) + WORD $0x140002a1 // b LBB0_726 $2692(%rip) +LBB0_561: WORD $0xb10007df // cmn lr, #1 WORD $0xdac00234 // rbit x20, x17 WORD $0xdac01294 // clz x20, x20 WORD $0x8b1b0294 // add x20, x20, x27 WORD $0x9a9413de // csel lr, lr, x20, ne -LBB0_550: +LBB0_562: WORD $0x8a240234 // bic x20, x17, x4 WORD $0xaa140495 // orr x21, x4, x20, lsl #1 WORD $0x8a350231 // bic x17, x17, x21 @@ -3195,8 +3417,8 @@ LBB0_550: WORD $0xd200f231 // eor x17, x17, #0x5555555555555555 WORD $0x8a150231 // and x17, x17, x21 WORD $0x8a3100c6 // bic x6, x6, x17 - WORD $0xb4fffd86 // cbz x6, LBB0_548 $-80(%rip) -LBB0_551: + WORD $0xb4fffd86 // cbz x6, LBB0_560 $-80(%rip) +LBB0_563: WORD $0xdac000d1 // rbit x17, x6 WORD $0xdac01231 // clz x17, x17 WORD $0x8b1b0231 // add x17, x17, x27 @@ -3204,91 +3426,91 @@ LBB0_551: WORD $0x52800062 // mov w2, #3 WORD $0x52800085 // mov w5, #4 WORD $0x92f00006 // mov x6, #9223372036854775807 - WORD $0xb7f8d8db // tbnz x27, #63, LBB0_901 $6936(%rip) -LBB0_552: + WORD $0xb7f8dcbb // tbnz x27, #63, LBB0_917 $7060(%rip) +LBB0_564: WORD $0xf900003b // str x27, [x1] WORD $0xaa1a03e8 // mov x8, x26 WORD $0xb27ff7f1 // mov x17, #9223372036854775806 WORD $0xeb11035f // cmp x26, x17 - WORD $0x54008aa8 // b.hi LBB0_830 $4436(%rip) + WORD $0x54008e48 // b.hi LBB0_845 $4552(%rip) WORD $0xf9400068 // ldr x8, [x3] WORD $0xf13ffd1f // cmp x8, #4095 - WORD $0x5400d78c // b.gt LBB0_900 $6896(%rip) + WORD $0x5400db6c // b.gt LBB0_916 $7020(%rip) WORD $0x91000511 // add x17, x8, #1 WORD $0xf9000071 // str x17, [x3] WORD $0xf8287945 // str x5, [x10, x8, lsl #3] WORD $0xf9400064 // ldr x4, [x3] WORD $0xaa0e03e8 // mov x8, x14 - WORD $0xb5ffdba4 // cbnz x4, LBB0_501 $-1164(%rip) - WORD $0x1400044b // b LBB0_830 $4396(%rip) -LBB0_555: + WORD $0xb5ffdba4 // cbnz x4, LBB0_513 $-1164(%rip) + WORD $0x14000468 // b LBB0_845 $4512(%rip) +LBB0_567: WORD $0x7100b29f // cmp w20, #44 - WORD $0x54001560 // b.eq LBB0_601 $684(%rip) + WORD $0x54001560 // b.eq LBB0_613 $684(%rip) WORD $0x7101769f // cmp w20, #93 - WORD $0x54000240 // b.eq LBB0_563 $72(%rip) - WORD $0x14000445 // b LBB0_829 $4372(%rip) -LBB0_557: + WORD $0x54000240 // b.eq LBB0_575 $72(%rip) + WORD $0x14000462 // b LBB0_844 $4488(%rip) +LBB0_569: WORD $0x7100ea9f // cmp w20, #58 - WORD $0x54008861 // b.ne LBB0_829 $4364(%rip) + WORD $0x54008c01 // b.ne LBB0_844 $4480(%rip) WORD $0xf833795f // str xzr, [x10, x19, lsl #3] WORD $0xf9400064 // ldr x4, [x3] WORD $0xaa0e03e8 // mov x8, x14 - WORD $0xb5ffda24 // cbnz x4, LBB0_501 $-1212(%rip) - WORD $0x1400043f // b LBB0_830 $4348(%rip) -LBB0_559: + WORD $0xb5ffda24 // cbnz x4, LBB0_513 $-1212(%rip) + WORD $0x1400045c // b LBB0_845 $4464(%rip) +LBB0_571: WORD $0xf9000073 // str x19, [x3] - WORD $0x1400000e // b LBB0_565 $56(%rip) -LBB0_560: + WORD $0x1400000e // b LBB0_577 $56(%rip) +LBB0_572: WORD $0x7100b29f // cmp w20, #44 - WORD $0x540014c0 // b.eq LBB0_603 $664(%rip) -LBB0_561: + WORD $0x540014c0 // b.eq LBB0_615 $664(%rip) +LBB0_573: WORD $0x7101f69f // cmp w20, #125 - WORD $0x54000080 // b.eq LBB0_563 $16(%rip) - WORD $0x14000437 // b LBB0_829 $4316(%rip) -LBB0_562: + WORD $0x54000080 // b.eq LBB0_575 $16(%rip) + WORD $0x14000454 // b LBB0_844 $4432(%rip) +LBB0_574: WORD $0x7101769f // cmp w20, #93 - WORD $0x540000c1 // b.ne LBB0_564 $24(%rip) -LBB0_563: + WORD $0x540000c1 // b.ne LBB0_576 $24(%rip) +LBB0_575: WORD $0xf9000073 // str x19, [x3] WORD $0xaa1303e4 // mov x4, x19 WORD $0xaa0e03e8 // mov x8, x14 - WORD $0xb5ffd873 // cbnz x19, LBB0_501 $-1268(%rip) - WORD $0x14000431 // b LBB0_830 $4292(%rip) -LBB0_564: + WORD $0xb5ffd873 // cbnz x19, LBB0_513 $-1268(%rip) + WORD $0x1400044e // b LBB0_845 $4408(%rip) +LBB0_576: WORD $0xf833794f // str x15, [x10, x19, lsl #3] -LBB0_565: +LBB0_577: WORD $0x92800028 // mov x8, #-2 WORD $0x71016a9f // cmp w20, #90 - WORD $0x5400142c // b.gt LBB0_605 $644(%rip) + WORD $0x5400142c // b.gt LBB0_617 $644(%rip) WORD $0x5100c291 // sub w17, w20, #48 WORD $0x71002a3f // cmp w17, #10 - WORD $0x54001ac2 // b.hs LBB0_626 $856(%rip) + WORD $0x54001ac2 // b.hs LBB0_638 $856(%rip) WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xeb1a0114 // subs x20, x8, x26 - WORD $0x5400d300 // b.eq LBB0_903 $6752(%rip) + WORD $0x5400d6e0 // b.eq LBB0_919 $6876(%rip) WORD $0x394003c8 // ldrb w8, [lr] WORD $0x7100c11f // cmp w8, #48 - WORD $0x54000181 // b.ne LBB0_572 $48(%rip) + WORD $0x54000181 // b.ne LBB0_584 $48(%rip) WORD $0xf100069f // cmp x20, #1 - WORD $0x54002020 // b.eq LBB0_642 $1028(%rip) + WORD $0x54002020 // b.eq LBB0_654 $1028(%rip) WORD $0x387b6928 // ldrb w8, [x9, x27] WORD $0x5100b908 // sub w8, w8, #46 WORD $0x7100dd1f // cmp w8, #55 - WORD $0x54001fa8 // b.hi LBB0_642 $1012(%rip) + WORD $0x54001fa8 // b.hi LBB0_654 $1012(%rip) WORD $0x9ac821e8 // lsl x8, x15, x8 WORD $0xb20903f1 // mov x17, #36028797027352576 WORD $0xf2800031 // movk x17, #1 WORD $0xea11011f // tst x8, x17 - WORD $0x54001f00 // b.eq LBB0_642 $992(%rip) -LBB0_572: + WORD $0x54001f00 // b.eq LBB0_654 $992(%rip) +LBB0_584: WORD $0xf100429f // cmp x20, #16 - WORD $0x54005543 // b.lo LBB0_732 $2728(%rip) + WORD $0x54005543 // b.lo LBB0_744 $2728(%rip) WORD $0xd2800015 // mov x21, #0 WORD $0xd280001b // mov x27, #0 WORD $0x92800013 // mov x19, #-1 WORD $0x92800004 // mov x4, #-1 WORD $0x92800008 // mov x8, #-1 -LBB0_574: +LBB0_586: WORD $0x3cfb6bd3 // ldr q19, [lr, x27] WORD $0x6e248e74 // cmeq.16b v20, v19, v4 WORD $0x6e258e75 // cmeq.16b v21, v19, v5 @@ -3331,155 +3553,155 @@ LBB0_574: WORD $0x1a850316 // csel w22, w24, w5, eq WORD $0x51000622 // sub w2, w17, #1 WORD $0x6a110058 // ands w24, w2, w17 - WORD $0x54003ca1 // b.ne LBB0_706 $1940(%rip) + WORD $0x54003ca1 // b.ne LBB0_718 $1940(%rip) WORD $0x510006e2 // sub w2, w23, #1 WORD $0x6a170058 // ands w24, w2, w23 - WORD $0x54003c41 // b.ne LBB0_706 $1928(%rip) + WORD $0x54003c41 // b.ne LBB0_718 $1928(%rip) WORD $0x510006c2 // sub w2, w22, #1 WORD $0x6a160058 // ands w24, w2, w22 - WORD $0x54003be1 // b.ne LBB0_706 $1916(%rip) - WORD $0x340000d1 // cbz w17, LBB0_580 $24(%rip) + WORD $0x54003be1 // b.ne LBB0_718 $1916(%rip) + WORD $0x340000d1 // cbz w17, LBB0_592 $24(%rip) WORD $0x5ac00231 // rbit w17, w17 WORD $0x5ac01231 // clz w17, w17 WORD $0xb100051f // cmn x8, #1 - WORD $0x54003be1 // b.ne LBB0_707 $1916(%rip) + WORD $0x54003be1 // b.ne LBB0_719 $1916(%rip) WORD $0x8b110368 // add x8, x27, x17 -LBB0_580: - WORD $0x340000d7 // cbz w23, LBB0_583 $24(%rip) +LBB0_592: + WORD $0x340000d7 // cbz w23, LBB0_595 $24(%rip) WORD $0x5ac002f1 // rbit w17, w23 WORD $0x5ac01231 // clz w17, w17 WORD $0xb100049f // cmn x4, #1 - WORD $0x54003b21 // b.ne LBB0_707 $1892(%rip) + WORD $0x54003b21 // b.ne LBB0_719 $1892(%rip) WORD $0x8b110364 // add x4, x27, x17 -LBB0_583: - WORD $0x340000d6 // cbz w22, LBB0_586 $24(%rip) +LBB0_595: + WORD $0x340000d6 // cbz w22, LBB0_598 $24(%rip) WORD $0x5ac002d1 // rbit w17, w22 WORD $0x5ac01231 // clz w17, w17 WORD $0xb100067f // cmn x19, #1 - WORD $0x54003a61 // b.ne LBB0_707 $1868(%rip) + WORD $0x54003a61 // b.ne LBB0_719 $1868(%rip) WORD $0x8b110373 // add x19, x27, x17 -LBB0_586: +LBB0_598: WORD $0x710040df // cmp w6, #16 - WORD $0x54000a81 // b.ne LBB0_611 $336(%rip) + WORD $0x54000a81 // b.ne LBB0_623 $336(%rip) WORD $0x9100437b // add x27, x27, #16 WORD $0xd10042b5 // sub x21, x21, #16 WORD $0x8b150296 // add x22, x20, x21 WORD $0xf1003edf // cmp x22, #15 - WORD $0x54fff6e8 // b.hi LBB0_574 $-292(%rip) + WORD $0x54fff6e8 // b.hi LBB0_586 $-292(%rip) WORD $0x8b1b03d5 // add x21, lr, x27 WORD $0xeb1b029f // cmp x20, x27 - WORD $0x540009c0 // b.eq LBB0_612 $312(%rip) -LBB0_589: + WORD $0x540009c0 // b.eq LBB0_624 $312(%rip) +LBB0_601: WORD $0x8b1602b7 // add x23, x21, x22 WORD $0x8b1a01b1 // add x17, x13, x26 WORD $0xcb150234 // sub x20, x17, x21 WORD $0xcb1e02a6 // sub x6, x21, lr WORD $0xaa1503fb // mov x27, x21 - WORD $0x14000009 // b LBB0_592 $36(%rip) -LBB0_590: + WORD $0x14000009 // b LBB0_604 $36(%rip) +LBB0_602: WORD $0xb100049f // cmn x4, #1 WORD $0xaa0603e4 // mov x4, x6 - WORD $0x54000c41 // b.ne LBB0_624 $392(%rip) -LBB0_591: + WORD $0x54000c41 // b.ne LBB0_636 $392(%rip) +LBB0_603: WORD $0xd1000694 // sub x20, x20, #1 WORD $0x910004c6 // add x6, x6, #1 WORD $0xaa1b03f5 // mov x21, x27 WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb4001ff6 // cbz x22, LBB0_655 $1020(%rip) -LBB0_592: + WORD $0xb4001ff6 // cbz x22, LBB0_667 $1020(%rip) +LBB0_604: WORD $0x38401771 // ldrb w17, [x27], #1 WORD $0x5100c222 // sub w2, w17, #48 WORD $0x7100285f // cmp w2, #10 - WORD $0x54ffff03 // b.lo LBB0_591 $-32(%rip) + WORD $0x54ffff03 // b.lo LBB0_603 $-32(%rip) WORD $0x7100b63f // cmp w17, #45 - WORD $0x5400016d // b.le LBB0_598 $44(%rip) + WORD $0x5400016d // b.le LBB0_610 $44(%rip) WORD $0x7101963f // cmp w17, #101 - WORD $0x54fffe20 // b.eq LBB0_590 $-60(%rip) + WORD $0x54fffe20 // b.eq LBB0_602 $-60(%rip) WORD $0x7101163f // cmp w17, #69 - WORD $0x54fffde0 // b.eq LBB0_590 $-68(%rip) + WORD $0x54fffde0 // b.eq LBB0_602 $-68(%rip) WORD $0x7100ba3f // cmp w17, #46 - WORD $0x54000681 // b.ne LBB0_612 $208(%rip) + WORD $0x54000681 // b.ne LBB0_624 $208(%rip) WORD $0xb100051f // cmn x8, #1 WORD $0xaa0603e8 // mov x8, x6 - WORD $0x54fffda0 // b.eq LBB0_591 $-76(%rip) - WORD $0x1400004d // b LBB0_624 $308(%rip) -LBB0_598: + WORD $0x54fffda0 // b.eq LBB0_603 $-76(%rip) + WORD $0x1400004d // b LBB0_636 $308(%rip) +LBB0_610: WORD $0x7100ae3f // cmp w17, #43 - WORD $0x54000060 // b.eq LBB0_600 $12(%rip) + WORD $0x54000060 // b.eq LBB0_612 $12(%rip) WORD $0x7100b63f // cmp w17, #45 - WORD $0x54000581 // b.ne LBB0_612 $176(%rip) -LBB0_600: + WORD $0x54000581 // b.ne LBB0_624 $176(%rip) +LBB0_612: WORD $0xb100067f // cmn x19, #1 WORD $0xaa0603f3 // mov x19, x6 - WORD $0x54fffca0 // b.eq LBB0_591 $-108(%rip) - WORD $0x14000045 // b LBB0_624 $276(%rip) -LBB0_601: + WORD $0x54fffca0 // b.eq LBB0_603 $-108(%rip) + WORD $0x14000045 // b LBB0_636 $276(%rip) +LBB0_613: WORD $0xf13ffc9f // cmp x4, #4095 - WORD $0x5400c0ec // b.gt LBB0_900 $6172(%rip) + WORD $0x5400c4cc // b.gt LBB0_916 $6296(%rip) WORD $0x91000488 // add x8, x4, #1 WORD $0xf9000068 // str x8, [x3] WORD $0xf824795f // str xzr, [x10, x4, lsl #3] WORD $0xf9400064 // ldr x4, [x3] WORD $0xaa0e03e8 // mov x8, x14 - WORD $0xb5ffc504 // cbnz x4, LBB0_501 $-1888(%rip) - WORD $0x14000396 // b LBB0_830 $3672(%rip) -LBB0_603: + WORD $0xb5ffc504 // cbnz x4, LBB0_513 $-1888(%rip) + WORD $0x140003b3 // b LBB0_845 $3788(%rip) +LBB0_615: WORD $0xf13ffc9f // cmp x4, #4095 - WORD $0x5400bfcc // b.gt LBB0_900 $6136(%rip) + WORD $0x5400c3ac // b.gt LBB0_916 $6260(%rip) WORD $0x91000488 // add x8, x4, #1 WORD $0xf9000068 // str x8, [x3] WORD $0xf8247942 // str x2, [x10, x4, lsl #3] WORD $0xf9400064 // ldr x4, [x3] WORD $0xaa0e03e8 // mov x8, x14 - WORD $0xb5ffc3e4 // cbnz x4, LBB0_501 $-1924(%rip) - WORD $0x1400038d // b LBB0_830 $3636(%rip) -LBB0_605: + WORD $0xb5ffc3e4 // cbnz x4, LBB0_513 $-1924(%rip) + WORD $0x140003aa // b LBB0_845 $3752(%rip) +LBB0_617: WORD $0x7101b69f // cmp w20, #109 - WORD $0x540008ed // b.le LBB0_632 $284(%rip) + WORD $0x540008ed // b.le LBB0_644 $284(%rip) WORD $0x7101ba9f // cmp w20, #110 - WORD $0x54000bc0 // b.eq LBB0_639 $376(%rip) + WORD $0x54000bc0 // b.eq LBB0_651 $376(%rip) WORD $0x7101d29f // cmp w20, #116 - WORD $0x54000a40 // b.eq LBB0_637 $328(%rip) + WORD $0x54000a40 // b.eq LBB0_649 $328(%rip) WORD $0x7101ee9f // cmp w20, #123 - WORD $0x540070a1 // b.ne LBB0_830 $3604(%rip) + WORD $0x54007441 // b.ne LBB0_845 $3720(%rip) WORD $0xf9400068 // ldr x8, [x3] WORD $0xf13ffd1f // cmp x8, #4095 - WORD $0x5400bd8c // b.gt LBB0_900 $6064(%rip) + WORD $0x5400c16c // b.gt LBB0_916 $6188(%rip) WORD $0x91000511 // add x17, x8, #1 WORD $0xf9000071 // str x17, [x3] WORD $0x528000d1 // mov w17, #6 WORD $0xf8287951 // str x17, [x10, x8, lsl #3] WORD $0xf9400064 // ldr x4, [x3] WORD $0xaa0e03e8 // mov x8, x14 - WORD $0xb5ffc184 // cbnz x4, LBB0_501 $-2000(%rip) - WORD $0x1400037a // b LBB0_830 $3560(%rip) -LBB0_611: + WORD $0xb5ffc184 // cbnz x4, LBB0_513 $-2000(%rip) + WORD $0x14000397 // b LBB0_845 $3676(%rip) +LBB0_623: WORD $0x8b2643d1 // add x17, lr, w6, uxtw WORD $0x8b1b0235 // add x21, x17, x27 -LBB0_612: +LBB0_624: WORD $0x92800014 // mov x20, #-1 - WORD $0xb400bd08 // cbz x8, LBB0_904 $6048(%rip) -LBB0_613: - WORD $0xb400bcf3 // cbz x19, LBB0_904 $6044(%rip) - WORD $0xb400bcc4 // cbz x4, LBB0_904 $6040(%rip) + WORD $0xb400c0e8 // cbz x8, LBB0_920 $6172(%rip) +LBB0_625: + WORD $0xb400c0d3 // cbz x19, LBB0_920 $6168(%rip) + WORD $0xb400c0a4 // cbz x4, LBB0_920 $6164(%rip) WORD $0xcb1e02a6 // sub x6, x21, lr WORD $0xd10004d1 // sub x17, x6, #1 WORD $0xeb11011f // cmp x8, x17 - WORD $0x540002a0 // b.eq LBB0_623 $84(%rip) + WORD $0x540002a0 // b.eq LBB0_635 $84(%rip) WORD $0xeb11027f // cmp x19, x17 - WORD $0x54000260 // b.eq LBB0_623 $76(%rip) + WORD $0x54000260 // b.eq LBB0_635 $76(%rip) WORD $0xeb11009f // cmp x4, x17 - WORD $0x54000220 // b.eq LBB0_623 $68(%rip) + WORD $0x54000220 // b.eq LBB0_635 $68(%rip) WORD $0xf1000671 // subs x17, x19, #1 - WORD $0x5400006b // b.lt LBB0_620 $12(%rip) + WORD $0x5400006b // b.lt LBB0_632 $12(%rip) WORD $0xeb11009f // cmp x4, x17 - WORD $0x5400bb61 // b.ne LBB0_905 $5996(%rip) -LBB0_620: + WORD $0x5400bf41 // b.ne LBB0_921 $6120(%rip) +LBB0_632: WORD $0xaa040111 // orr x17, x8, x4 - WORD $0xb7f80071 // tbnz x17, #63, LBB0_622 $12(%rip) + WORD $0xb7f80071 // tbnz x17, #63, LBB0_634 $12(%rip) WORD $0xeb04011f // cmp x8, x4 - WORD $0x5400bb8a // b.ge LBB0_907 $6000(%rip) -LBB0_622: + WORD $0x5400bf6a // b.ge LBB0_923 $6124(%rip) +LBB0_634: WORD $0xd37ffe31 // lsr x17, x17, #63 WORD $0x52000231 // eor w17, w17, #0x1 WORD $0xd1000482 // sub x2, x4, #1 @@ -3487,105 +3709,105 @@ LBB0_622: WORD $0x1a9f17e8 // cset w8, eq WORD $0x6a08023f // tst w17, w8 WORD $0xda8400d4 // csinv x20, x6, x4, eq - WORD $0x14000002 // b LBB0_624 $8(%rip) -LBB0_623: + WORD $0x14000002 // b LBB0_636 $8(%rip) +LBB0_635: WORD $0xcb0603f4 // neg x20, x6 -LBB0_624: +LBB0_636: WORD $0x52800062 // mov w2, #3 WORD $0x52800085 // mov w5, #4 WORD $0x92f00006 // mov x6, #9223372036854775807 - WORD $0xb7f8b934 // tbnz x20, #63, LBB0_904 $5924(%rip) + WORD $0xb7f8bd14 // tbnz x20, #63, LBB0_920 $6048(%rip) WORD $0x8b14035b // add x27, x26, x20 - WORD $0x14000034 // b LBB0_642 $208(%rip) -LBB0_626: + WORD $0x14000034 // b LBB0_654 $208(%rip) +LBB0_638: WORD $0x71008a9f // cmp w20, #34 - WORD $0x540008a0 // b.eq LBB0_646 $276(%rip) + WORD $0x540008a0 // b.eq LBB0_658 $276(%rip) WORD $0x7100b69f // cmp w20, #45 - WORD $0x54006a21 // b.ne LBB0_830 $3396(%rip) + WORD $0x54006dc1 // b.ne LBB0_845 $3512(%rip) WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xeb1b0117 // subs x23, x8, x27 - WORD $0x5400b980 // b.eq LBB0_910 $5936(%rip) + WORD $0x5400bd60 // b.eq LBB0_926 $6060(%rip) WORD $0x8b1b0128 // add x8, x9, x27 - WORD $0xf9000fe8 // str x8, [sp, #24] + WORD $0xf90017e8 // str x8, [sp, #40] WORD $0x39400111 // ldrb w17, [x8] WORD $0x7100c23f // cmp w17, #48 - WORD $0x54001401 // b.ne LBB0_658 $640(%rip) + WORD $0x54001401 // b.ne LBB0_670 $640(%rip) WORD $0xf10006ff // cmp x23, #1 - WORD $0x54001261 // b.ne LBB0_656 $588(%rip) -LBB0_631: + WORD $0x54001261 // b.ne LBB0_668 $588(%rip) +LBB0_643: WORD $0x52800026 // mov w6, #1 - WORD $0x14000138 // b LBB0_704 $1248(%rip) -LBB0_632: + WORD $0x14000138 // b LBB0_716 $1248(%rip) +LBB0_644: WORD $0x71016e9f // cmp w20, #91 - WORD $0x54000540 // b.eq LBB0_644 $168(%rip) + WORD $0x54000540 // b.eq LBB0_656 $168(%rip) WORD $0x71019a9f // cmp w20, #102 - WORD $0x54006821 // b.ne LBB0_830 $3332(%rip) + WORD $0x54006bc1 // b.ne LBB0_845 $3448(%rip) WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xd1001111 // sub x17, x8, #4 WORD $0xeb11035f // cmp x26, x17 - WORD $0x5400c262 // b.hs LBB0_938 $6220(%rip) + WORD $0x5400c642 // b.hs LBB0_954 $6344(%rip) WORD $0xb87b6928 // ldr w8, [x9, x27] WORD $0x528d8c31 // mov w17, #27745 WORD $0x72acae71 // movk w17, #25971, lsl #16 WORD $0x6b11011f // cmp w8, w17 - WORD $0x5400b741 // b.ne LBB0_913 $5864(%rip) + WORD $0x5400bb21 // b.ne LBB0_929 $5988(%rip) WORD $0x9100175b // add x27, x26, #5 - WORD $0x14000015 // b LBB0_642 $84(%rip) -LBB0_637: + WORD $0x14000015 // b LBB0_654 $84(%rip) +LBB0_649: WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xd1000d11 // sub x17, x8, #3 WORD $0xeb11035f // cmp x26, x17 - WORD $0x5400c102 // b.hs LBB0_938 $6176(%rip) + WORD $0x5400c4e2 // b.hs LBB0_954 $6300(%rip) WORD $0xb87a6928 // ldr w8, [x9, x26] WORD $0x528e4e91 // mov w17, #29300 WORD $0x72acaeb1 // movk w17, #25973, lsl #16 WORD $0x6b11011f // cmp w8, w17 - WORD $0x54000160 // b.eq LBB0_641 $44(%rip) - WORD $0x140005d7 // b LBB0_922 $5980(%rip) -LBB0_639: + WORD $0x54000160 // b.eq LBB0_653 $44(%rip) + WORD $0x140005f6 // b LBB0_938 $6104(%rip) +LBB0_651: WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xd1000d11 // sub x17, x8, #3 WORD $0xeb11035f // cmp x26, x17 - WORD $0x5400bfc2 // b.hs LBB0_938 $6136(%rip) + WORD $0x5400c3a2 // b.hs LBB0_954 $6260(%rip) WORD $0xb87a6928 // ldr w8, [x9, x26] WORD $0x528eadd1 // mov w17, #30062 WORD $0x72ad8d91 // movk w17, #27756, lsl #16 WORD $0x6b11011f // cmp w8, w17 - WORD $0x5400b741 // b.ne LBB0_918 $5864(%rip) -LBB0_641: + WORD $0x5400bb21 // b.ne LBB0_934 $5988(%rip) +LBB0_653: WORD $0x9100135b // add x27, x26, #4 -LBB0_642: +LBB0_654: WORD $0xf900003b // str x27, [x1] WORD $0xaa1a03e8 // mov x8, x26 WORD $0xeb06035f // cmp x26, x6 - WORD $0x540063c2 // b.hs LBB0_830 $3192(%rip) -LBB0_643: + WORD $0x54006762 // b.hs LBB0_845 $3308(%rip) +LBB0_655: WORD $0xf9400064 // ldr x4, [x3] WORD $0xaa0e03e8 // mov x8, x14 - WORD $0xb5ffb584 // cbnz x4, LBB0_501 $-2384(%rip) - WORD $0x1400031a // b LBB0_830 $3176(%rip) -LBB0_644: + WORD $0xb5ffb584 // cbnz x4, LBB0_513 $-2384(%rip) + WORD $0x14000337 // b LBB0_845 $3292(%rip) +LBB0_656: WORD $0xf9400068 // ldr x8, [x3] WORD $0xf13ffd1f // cmp x8, #4095 - WORD $0x5400b02c // b.gt LBB0_900 $5636(%rip) + WORD $0x5400b40c // b.gt LBB0_916 $5760(%rip) WORD $0x91000511 // add x17, x8, #1 WORD $0xf9000071 // str x17, [x3] WORD $0x528000b1 // mov w17, #5 WORD $0xf8287951 // str x17, [x10, x8, lsl #3] WORD $0xf9400064 // ldr x4, [x3] WORD $0xaa0e03e8 // mov x8, x14 - WORD $0xb5ffb424 // cbnz x4, LBB0_501 $-2428(%rip) - WORD $0x1400030f // b LBB0_830 $3132(%rip) -LBB0_646: + WORD $0xb5ffb424 // cbnz x4, LBB0_513 $-2428(%rip) + WORD $0x1400032c // b LBB0_845 $3248(%rip) +LBB0_658: WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xeb1b0113 // subs x19, x8, x27 - WORD $0x5400ba60 // b.eq LBB0_929 $5964(%rip) + WORD $0x5400be40 // b.eq LBB0_945 $6088(%rip) WORD $0x3200f3f8 // mov w24, #1431655765 WORD $0xf101027f // cmp x19, #64 - WORD $0x54002e03 // b.lo LBB0_725 $1472(%rip) + WORD $0x54002e03 // b.lo LBB0_737 $1472(%rip) WORD $0xd2800004 // mov x4, #0 WORD $0x9280001e // mov lr, #-1 -LBB0_649: +LBB0_661: WORD $0x8b1b0131 // add x17, x9, x27 WORD $0xad405233 // ldp q19, q20, [x17] WORD $0xad415a35 // ldp q21, q22, [x17, #32] @@ -3639,22 +3861,22 @@ LBB0_649: WORD $0x53103ea2 // lsl w2, w21, #16 WORD $0xaa020231 // orr x17, x17, x2 WORD $0xaa140231 // orr x17, x17, x20 - WORD $0xb5000111 // cbnz x17, LBB0_653 $32(%rip) - WORD $0xb5000184 // cbnz x4, LBB0_654 $48(%rip) - WORD $0xb5ffc0c6 // cbnz x6, LBB0_537 $-2024(%rip) -LBB0_652: + WORD $0xb5000111 // cbnz x17, LBB0_665 $32(%rip) + WORD $0xb5000184 // cbnz x4, LBB0_666 $48(%rip) + WORD $0xb5ffc0c6 // cbnz x6, LBB0_549 $-2024(%rip) +LBB0_664: WORD $0xd1010273 // sub x19, x19, #64 WORD $0x9101037b // add x27, x27, #64 WORD $0xf100fe7f // cmp x19, #63 - WORD $0x54fff8a8 // b.hi LBB0_649 $-236(%rip) - WORD $0x1400012f // b LBB0_724 $1212(%rip) -LBB0_653: + WORD $0x54fff8a8 // b.hi LBB0_661 $-236(%rip) + WORD $0x1400012f // b LBB0_736 $1212(%rip) +LBB0_665: WORD $0xb10007df // cmn lr, #1 WORD $0xdac00222 // rbit x2, x17 WORD $0xdac01042 // clz x2, x2 WORD $0x8b1b0042 // add x2, x2, x27 WORD $0x9a8213de // csel lr, lr, x2, ne -LBB0_654: +LBB0_666: WORD $0x8a240222 // bic x2, x17, x4 WORD $0xaa020485 // orr x5, x4, x2, lsl #1 WORD $0x8a250231 // bic x17, x17, x5 @@ -3665,35 +3887,35 @@ LBB0_654: WORD $0xd200f231 // eor x17, x17, #0x5555555555555555 WORD $0x8a050231 // and x17, x17, x5 WORD $0x8a3100c6 // bic x6, x6, x17 - WORD $0xb4fffd86 // cbz x6, LBB0_652 $-80(%rip) - WORD $0x17fffdf0 // b LBB0_537 $-2112(%rip) -LBB0_655: + WORD $0xb4fffd86 // cbz x6, LBB0_664 $-80(%rip) + WORD $0x17fffdf0 // b LBB0_549 $-2112(%rip) +LBB0_667: WORD $0xaa1703f5 // mov x21, x23 WORD $0x92800014 // mov x20, #-1 - WORD $0xb5ffe828 // cbnz x8, LBB0_613 $-764(%rip) - WORD $0x14000527 // b LBB0_904 $5276(%rip) -LBB0_656: - WORD $0xf9400fe8 // ldr x8, [sp, #24] + WORD $0xb5ffe828 // cbnz x8, LBB0_625 $-764(%rip) + WORD $0x14000546 // b LBB0_920 $5400(%rip) +LBB0_668: + WORD $0xf94017e8 // ldr x8, [sp, #40] WORD $0x39400511 // ldrb w17, [x8, #1] WORD $0x5100ba31 // sub w17, w17, #46 WORD $0x7100de3f // cmp w17, #55 - WORD $0x54ffed48 // b.hi LBB0_631 $-600(%rip) + WORD $0x54ffed48 // b.hi LBB0_643 $-600(%rip) WORD $0x9ad121f1 // lsl x17, x15, x17 WORD $0x52800026 // mov w6, #1 WORD $0xb20903e8 // mov x8, #36028797027352576 WORD $0xf2800028 // movk x8, #1 WORD $0xea08023f // tst x17, x8 - WORD $0x540013a0 // b.eq LBB0_704 $628(%rip) -LBB0_658: + WORD $0x540013a0 // b.eq LBB0_716 $628(%rip) +LBB0_670: WORD $0xf10042ff // cmp x23, #16 - WORD $0x54002883 // b.lo LBB0_734 $1296(%rip) + WORD $0x54002883 // b.lo LBB0_746 $1296(%rip) WORD $0xd2800016 // mov x22, #0 WORD $0xd2800006 // mov x6, #0 WORD $0x9280001e // mov lr, #-1 WORD $0x92800004 // mov x4, #-1 WORD $0x92800013 // mov x19, #-1 -LBB0_660: - WORD $0xf9400fe8 // ldr x8, [sp, #24] +LBB0_672: + WORD $0xf94017e8 // ldr x8, [sp, #40] WORD $0x3ce66913 // ldr q19, [x8, x6] WORD $0x6e248e74 // cmeq.16b v20, v19, v4 WORD $0x6e258e75 // cmeq.16b v21, v19, v5 @@ -3736,116 +3958,116 @@ LBB0_660: WORD $0x1a9500b5 // csel w21, w5, w21, eq WORD $0x51000728 // sub w8, w25, #1 WORD $0x6a190118 // ands w24, w8, w25 - WORD $0x54001ae1 // b.ne LBB0_723 $860(%rip) + WORD $0x54001ae1 // b.ne LBB0_735 $860(%rip) WORD $0x51000628 // sub w8, w17, #1 WORD $0x6a110118 // ands w24, w8, w17 - WORD $0x54001a81 // b.ne LBB0_723 $848(%rip) + WORD $0x54001a81 // b.ne LBB0_735 $848(%rip) WORD $0x510006a8 // sub w8, w21, #1 WORD $0x6a150118 // ands w24, w8, w21 - WORD $0x54001a21 // b.ne LBB0_723 $836(%rip) - WORD $0x340000d9 // cbz w25, LBB0_666 $24(%rip) + WORD $0x54001a21 // b.ne LBB0_735 $836(%rip) + WORD $0x340000d9 // cbz w25, LBB0_678 $24(%rip) WORD $0x5ac00328 // rbit w8, w25 WORD $0x5ac01119 // clz w25, w8 WORD $0xb100067f // cmn x19, #1 - WORD $0x540020a1 // b.ne LBB0_733 $1044(%rip) + WORD $0x540020a1 // b.ne LBB0_745 $1044(%rip) WORD $0x8b1900d3 // add x19, x6, x25 -LBB0_666: - WORD $0x340000d1 // cbz w17, LBB0_669 $24(%rip) +LBB0_678: + WORD $0x340000d1 // cbz w17, LBB0_681 $24(%rip) WORD $0x5ac00228 // rbit w8, w17 WORD $0x5ac01111 // clz w17, w8 WORD $0xb100049f // cmn x4, #1 - WORD $0x54001ec1 // b.ne LBB0_731 $984(%rip) + WORD $0x54001ec1 // b.ne LBB0_743 $984(%rip) WORD $0x8b1100c4 // add x4, x6, x17 -LBB0_669: - WORD $0x340000d5 // cbz w21, LBB0_672 $24(%rip) +LBB0_681: + WORD $0x340000d5 // cbz w21, LBB0_684 $24(%rip) WORD $0x5ac002a8 // rbit w8, w21 WORD $0x5ac01111 // clz w17, w8 WORD $0xb10007df // cmn lr, #1 - WORD $0x54001e01 // b.ne LBB0_731 $960(%rip) + WORD $0x54001e01 // b.ne LBB0_743 $960(%rip) WORD $0x8b1100de // add lr, x6, x17 -LBB0_672: +LBB0_684: WORD $0x7100429f // cmp w20, #16 - WORD $0x540005c1 // b.ne LBB0_690 $184(%rip) + WORD $0x540005c1 // b.ne LBB0_702 $184(%rip) WORD $0x910040c6 // add x6, x6, #16 WORD $0xd10042d6 // sub x22, x22, #16 WORD $0x8b1602f4 // add x20, x23, x22 WORD $0xf1003e9f // cmp x20, #15 - WORD $0x54fff6c8 // b.hi LBB0_660 $-296(%rip) - WORD $0xf9400fe8 // ldr x8, [sp, #24] + WORD $0x54fff6c8 // b.hi LBB0_672 $-296(%rip) + WORD $0xf94017e8 // ldr x8, [sp, #40] WORD $0x8b060115 // add x21, x8, x6 WORD $0xeb0602ff // cmp x23, x6 - WORD $0x54000500 // b.eq LBB0_691 $160(%rip) -LBB0_675: + WORD $0x54000500 // b.eq LBB0_703 $160(%rip) +LBB0_687: WORD $0x8b1402a2 // add x2, x21, x20 WORD $0x8b150188 // add x8, x12, x21 WORD $0xcb1a0117 // sub x23, x8, x26 WORD $0xaa1503f6 // mov x22, x21 - WORD $0x14000008 // b LBB0_679 $32(%rip) -LBB0_676: + WORD $0x14000008 // b LBB0_691 $32(%rip) +LBB0_688: WORD $0xb100049f // cmn x4, #1 - WORD $0x54001561 // b.ne LBB0_722 $684(%rip) + WORD $0x54001561 // b.ne LBB0_734 $684(%rip) WORD $0xd10006e4 // sub x4, x23, #1 -LBB0_678: +LBB0_690: WORD $0x910006f7 // add x23, x23, #1 WORD $0xaa1603f5 // mov x21, x22 WORD $0xd1000694 // sub x20, x20, #1 - WORD $0xb4000f34 // cbz x20, LBB0_715 $484(%rip) -LBB0_679: + WORD $0xb4000f34 // cbz x20, LBB0_727 $484(%rip) +LBB0_691: WORD $0x384016d1 // ldrb w17, [x22], #1 WORD $0x5100c228 // sub w8, w17, #48 WORD $0x7100291f // cmp w8, #10 - WORD $0x54ffff23 // b.lo LBB0_678 $-28(%rip) + WORD $0x54ffff23 // b.lo LBB0_690 $-28(%rip) WORD $0x7100b63f // cmp w17, #45 - WORD $0x5400016d // b.le LBB0_686 $44(%rip) + WORD $0x5400016d // b.le LBB0_698 $44(%rip) WORD $0x7101963f // cmp w17, #101 - WORD $0x54fffe40 // b.eq LBB0_676 $-56(%rip) + WORD $0x54fffe40 // b.eq LBB0_688 $-56(%rip) WORD $0x7101163f // cmp w17, #69 - WORD $0x54fffe00 // b.eq LBB0_676 $-64(%rip) + WORD $0x54fffe00 // b.eq LBB0_688 $-64(%rip) WORD $0x7100ba3f // cmp w17, #46 - WORD $0x54000201 // b.ne LBB0_691 $64(%rip) + WORD $0x54000201 // b.ne LBB0_703 $64(%rip) WORD $0xb100067f // cmn x19, #1 - WORD $0x54001301 // b.ne LBB0_722 $608(%rip) + WORD $0x54001301 // b.ne LBB0_734 $608(%rip) WORD $0xd10006f3 // sub x19, x23, #1 - WORD $0x17ffffed // b LBB0_678 $-76(%rip) -LBB0_686: + WORD $0x17ffffed // b LBB0_690 $-76(%rip) +LBB0_698: WORD $0x7100ae3f // cmp w17, #43 - WORD $0x54000060 // b.eq LBB0_688 $12(%rip) + WORD $0x54000060 // b.eq LBB0_700 $12(%rip) WORD $0x7100b63f // cmp w17, #45 - WORD $0x54000101 // b.ne LBB0_691 $32(%rip) -LBB0_688: + WORD $0x54000101 // b.ne LBB0_703 $32(%rip) +LBB0_700: WORD $0xb10007df // cmn lr, #1 - WORD $0x54001201 // b.ne LBB0_722 $576(%rip) + WORD $0x54001201 // b.ne LBB0_734 $576(%rip) WORD $0xd10006fe // sub lr, x23, #1 - WORD $0x17ffffe5 // b LBB0_678 $-108(%rip) -LBB0_690: - WORD $0xf9400fe8 // ldr x8, [sp, #24] + WORD $0x17ffffe5 // b LBB0_690 $-108(%rip) +LBB0_702: + WORD $0xf94017e8 // ldr x8, [sp, #40] WORD $0x8b344108 // add x8, x8, w20, uxtw WORD $0x8b060115 // add x21, x8, x6 -LBB0_691: +LBB0_703: WORD $0x92800006 // mov x6, #-1 - WORD $0xb4009553 // cbz x19, LBB0_911 $4776(%rip) -LBB0_692: - WORD $0xb400953e // cbz lr, LBB0_911 $4772(%rip) - WORD $0xb4009504 // cbz x4, LBB0_911 $4768(%rip) - WORD $0xf9400fe8 // ldr x8, [sp, #24] + WORD $0xb4009933 // cbz x19, LBB0_927 $4900(%rip) +LBB0_704: + WORD $0xb400991e // cbz lr, LBB0_927 $4896(%rip) + WORD $0xb40098e4 // cbz x4, LBB0_927 $4892(%rip) + WORD $0xf94017e8 // ldr x8, [sp, #40] WORD $0xcb0802a8 // sub x8, x21, x8 WORD $0xd1000511 // sub x17, x8, #1 WORD $0xeb11027f // cmp x19, x17 - WORD $0x540002a0 // b.eq LBB0_702 $84(%rip) + WORD $0x540002a0 // b.eq LBB0_714 $84(%rip) WORD $0xeb1103df // cmp lr, x17 - WORD $0x54000260 // b.eq LBB0_702 $76(%rip) + WORD $0x54000260 // b.eq LBB0_714 $76(%rip) WORD $0xeb11009f // cmp x4, x17 - WORD $0x54000220 // b.eq LBB0_702 $68(%rip) + WORD $0x54000220 // b.eq LBB0_714 $68(%rip) WORD $0xf10007d1 // subs x17, lr, #1 - WORD $0x5400006b // b.lt LBB0_699 $12(%rip) + WORD $0x5400006b // b.lt LBB0_711 $12(%rip) WORD $0xeb11009f // cmp x4, x17 - WORD $0x54009381 // b.ne LBB0_912 $4720(%rip) -LBB0_699: + WORD $0x54009761 // b.ne LBB0_928 $4844(%rip) +LBB0_711: WORD $0xaa040271 // orr x17, x19, x4 - WORD $0xb7f80071 // tbnz x17, #63, LBB0_701 $12(%rip) + WORD $0xb7f80071 // tbnz x17, #63, LBB0_713 $12(%rip) WORD $0xeb04027f // cmp x19, x4 - WORD $0x54009b8a // b.ge LBB0_928 $4976(%rip) -LBB0_701: + WORD $0x54009f6a // b.ge LBB0_944 $5100(%rip) +LBB0_713: WORD $0xd37ffe31 // lsr x17, x17, #63 WORD $0x52000231 // eor w17, w17, #0x1 WORD $0xd1000482 // sub x2, x4, #1 @@ -3853,12 +4075,12 @@ LBB0_701: WORD $0x1a9f17e2 // cset w2, eq WORD $0x6a02023f // tst w17, w2 WORD $0xda840106 // csinv x6, x8, x4, eq - WORD $0x14000002 // b LBB0_703 $8(%rip) -LBB0_702: + WORD $0x14000002 // b LBB0_715 $8(%rip) +LBB0_714: WORD $0xcb0803e6 // neg x6, x8 -LBB0_703: - WORD $0xb7f891a6 // tbnz x6, #63, LBB0_911 $4660(%rip) -LBB0_704: +LBB0_715: + WORD $0xb7f89586 // tbnz x6, #63, LBB0_927 $4784(%rip) +LBB0_716: WORD $0x8b1b00db // add x27, x6, x27 WORD $0xf900003b // str x27, [x1] WORD $0xaa1a03e8 // mov x8, x26 @@ -3866,28 +4088,28 @@ LBB0_704: WORD $0xeb06035f // cmp x26, x6 WORD $0x52800062 // mov w2, #3 WORD $0x52800085 // mov w5, #4 - WORD $0x54ffdd23 // b.lo LBB0_643 $-1116(%rip) - WORD $0x14000205 // b LBB0_830 $2068(%rip) -LBB0_705: + WORD $0x54ffdd23 // b.lo LBB0_655 $-1116(%rip) + WORD $0x14000222 // b LBB0_845 $2184(%rip) +LBB0_717: WORD $0x8b1b013b // add x27, x9, x27 - WORD $0x1400000c // b LBB0_709 $48(%rip) -LBB0_706: + WORD $0x1400000c // b LBB0_721 $48(%rip) +LBB0_718: WORD $0x5ac00308 // rbit w8, w24 WORD $0x5ac01108 // clz w8, w8 WORD $0xaa3b03f1 // mvn x17, x27 WORD $0xcb080234 // sub x20, x17, x8 - WORD $0x17fffea4 // b LBB0_624 $-1392(%rip) -LBB0_707: + WORD $0x17fffea4 // b LBB0_636 $-1392(%rip) +LBB0_719: WORD $0xaa3b03e8 // mvn x8, x27 WORD $0xcb314114 // sub x20, x8, w17, uxtw - WORD $0x17fffea1 // b LBB0_624 $-1404(%rip) -LBB0_708: + WORD $0x17fffea1 // b LBB0_636 $-1404(%rip) +LBB0_720: WORD $0xd2800004 // mov x4, #0 WORD $0x8b1b013b // add x27, x9, x27 WORD $0x9280001e // mov lr, #-1 -LBB0_709: +LBB0_721: WORD $0xf1008266 // subs x6, x19, #32 - WORD $0x54001583 // b.lo LBB0_738 $688(%rip) + WORD $0x54001583 // b.lo LBB0_750 $688(%rip) WORD $0xad405373 // ldp q19, q20, [x27] WORD $0x6e208e75 // cmeq.16b v21, v19, v0 WORD $0x6e208e96 // cmeq.16b v22, v20, v0 @@ -3911,10 +4133,10 @@ LBB0_709: WORD $0x1e260275 // fmov w21, s19 WORD $0x33103e33 // bfi w19, w17, #16, #16 WORD $0x33103eb4 // bfi w20, w21, #16, #16 - WORD $0x35001014 // cbnz w20, LBB0_735 $512(%rip) - WORD $0xb50010a4 // cbnz x4, LBB0_736 $532(%rip) - WORD $0xb4001213 // cbz x19, LBB0_737 $576(%rip) -LBB0_713: + WORD $0x35001014 // cbnz w20, LBB0_747 $512(%rip) + WORD $0xb50010a4 // cbnz x4, LBB0_748 $532(%rip) + WORD $0xb4001213 // cbz x19, LBB0_749 $576(%rip) +LBB0_725: WORD $0xdac00271 // rbit x17, x19 WORD $0xdac01231 // clz x17, x17 WORD $0xcb090364 // sub x4, x27, x9 @@ -3923,23 +4145,23 @@ LBB0_713: WORD $0x52800062 // mov w2, #3 WORD $0x52800085 // mov w5, #4 WORD $0x92f00006 // mov x6, #9223372036854775807 - WORD $0xb6ffd65b // tbz x27, #63, LBB0_642 $-1336(%rip) - WORD $0x1400043e // b LBB0_901 $4344(%rip) -LBB0_714: + WORD $0xb6ffd65b // tbz x27, #63, LBB0_654 $-1336(%rip) + WORD $0x1400045d // b LBB0_917 $4468(%rip) +LBB0_726: WORD $0x8b1b013b // add x27, x9, x27 - WORD $0x14000008 // b LBB0_717 $32(%rip) -LBB0_715: + WORD $0x14000008 // b LBB0_729 $32(%rip) +LBB0_727: WORD $0xaa0203f5 // mov x21, x2 WORD $0x92800006 // mov x6, #-1 - WORD $0xb5fff473 // cbnz x19, LBB0_692 $-372(%rip) - WORD $0x1400044b // b LBB0_911 $4396(%rip) -LBB0_716: + WORD $0xb5fff473 // cbnz x19, LBB0_704 $-372(%rip) + WORD $0x1400046a // b LBB0_927 $4520(%rip) +LBB0_728: WORD $0xd2800004 // mov x4, #0 WORD $0x8b1b013b // add x27, x9, x27 WORD $0x9280001e // mov lr, #-1 -LBB0_717: +LBB0_729: WORD $0xf1008266 // subs x6, x19, #32 - WORD $0x54001523 // b.lo LBB0_749 $676(%rip) + WORD $0x54001523 // b.lo LBB0_761 $676(%rip) WORD $0xad405373 // ldp q19, q20, [x27] WORD $0x6e208e75 // cmeq.16b v21, v19, v0 WORD $0x6e208e96 // cmeq.16b v22, v20, v0 @@ -3963,10 +4185,10 @@ LBB0_717: WORD $0x1e260275 // fmov w21, s19 WORD $0x33103e33 // bfi w19, w17, #16, #16 WORD $0x33103eb4 // bfi w20, w21, #16, #16 - WORD $0x35000fb4 // cbnz w20, LBB0_746 $500(%rip) - WORD $0xb5001044 // cbnz x4, LBB0_747 $520(%rip) - WORD $0xb40011b3 // cbz x19, LBB0_748 $564(%rip) -LBB0_721: + WORD $0x35000fb4 // cbnz w20, LBB0_758 $500(%rip) + WORD $0xb5001044 // cbnz x4, LBB0_759 $520(%rip) + WORD $0xb40011b3 // cbz x19, LBB0_760 $564(%rip) +LBB0_733: WORD $0xdac00271 // rbit x17, x19 WORD $0xdac01231 // clz x17, x17 WORD $0xcb090364 // sub x4, x27, x9 @@ -3975,27 +4197,27 @@ LBB0_721: WORD $0x52800062 // mov w2, #3 WORD $0x52800085 // mov w5, #4 WORD $0x92f00006 // mov x6, #9223372036854775807 - WORD $0xb6ffa97b // tbz x27, #63, LBB0_552 $-2772(%rip) - WORD $0x1400040f // b LBB0_901 $4156(%rip) -LBB0_722: + WORD $0xb6ffa97b // tbz x27, #63, LBB0_564 $-2772(%rip) + WORD $0x1400042e // b LBB0_917 $4280(%rip) +LBB0_734: WORD $0xcb1703e6 // neg x6, x23 - WORD $0x17ffff93 // b LBB0_703 $-436(%rip) -LBB0_723: + WORD $0x17ffff93 // b LBB0_715 $-436(%rip) +LBB0_735: WORD $0x5ac00308 // rbit w8, w24 WORD $0x5ac01108 // clz w8, w8 WORD $0xaa2603f1 // mvn x17, x6 WORD $0xcb080226 // sub x6, x17, x8 - WORD $0x17ffff8e // b LBB0_703 $-456(%rip) -LBB0_724: + WORD $0x17ffff8e // b LBB0_715 $-456(%rip) +LBB0_736: WORD $0x8b1b013b // add x27, x9, x27 - WORD $0x14000004 // b LBB0_726 $16(%rip) -LBB0_725: + WORD $0x14000004 // b LBB0_738 $16(%rip) +LBB0_737: WORD $0xd2800004 // mov x4, #0 WORD $0x8b1b013b // add x27, x9, x27 WORD $0x9280001e // mov lr, #-1 -LBB0_726: +LBB0_738: WORD $0xf1008266 // subs x6, x19, #32 - WORD $0x54001743 // b.lo LBB0_766 $744(%rip) + WORD $0x54001743 // b.lo LBB0_778 $744(%rip) WORD $0xad405373 // ldp q19, q20, [x27] WORD $0x6e208e75 // cmeq.16b v21, v19, v0 WORD $0x6e208e96 // cmeq.16b v22, v20, v0 @@ -4019,10 +4241,10 @@ LBB0_726: WORD $0x1e260262 // fmov w2, s19 WORD $0x33103e33 // bfi w19, w17, #16, #16 WORD $0x33103c54 // bfi w20, w2, #16, #16 - WORD $0x350011d4 // cbnz w20, LBB0_763 $568(%rip) - WORD $0xb5001264 // cbnz x4, LBB0_764 $588(%rip) - WORD $0xb40013d3 // cbz x19, LBB0_765 $632(%rip) -LBB0_730: + WORD $0x350011d4 // cbnz w20, LBB0_775 $568(%rip) + WORD $0xb5001264 // cbnz x4, LBB0_776 $588(%rip) + WORD $0xb40013d3 // cbz x19, LBB0_777 $632(%rip) +LBB0_742: WORD $0xdac00271 // rbit x17, x19 WORD $0xdac01231 // clz x17, x17 WORD $0xcb090362 // sub x2, x27, x9 @@ -4031,38 +4253,38 @@ LBB0_730: WORD $0x52800062 // mov w2, #3 WORD $0x52800085 // mov w5, #4 WORD $0x92f00006 // mov x6, #9223372036854775807 - WORD $0xb6ffca3b // tbz x27, #63, LBB0_642 $-1724(%rip) - WORD $0x140003dd // b LBB0_901 $3956(%rip) -LBB0_731: + WORD $0xb6ffca3b // tbz x27, #63, LBB0_654 $-1724(%rip) + WORD $0x140003fc // b LBB0_917 $4080(%rip) +LBB0_743: WORD $0xaa2603e8 // mvn x8, x6 WORD $0xcb314106 // sub x6, x8, w17, uxtw - WORD $0x17ffff60 // b LBB0_703 $-640(%rip) -LBB0_732: + WORD $0x17ffff60 // b LBB0_715 $-640(%rip) +LBB0_744: WORD $0x92800008 // mov x8, #-1 WORD $0xaa1e03f5 // mov x21, lr WORD $0xaa1403f6 // mov x22, x20 WORD $0x92800004 // mov x4, #-1 WORD $0x92800013 // mov x19, #-1 - WORD $0x17fffda4 // b LBB0_589 $-2416(%rip) -LBB0_733: + WORD $0x17fffda4 // b LBB0_601 $-2416(%rip) +LBB0_745: WORD $0xaa2603e8 // mvn x8, x6 WORD $0xcb394106 // sub x6, x8, w25, uxtw - WORD $0x17ffff57 // b LBB0_703 $-676(%rip) -LBB0_734: + WORD $0x17ffff57 // b LBB0_715 $-676(%rip) +LBB0_746: WORD $0x92800013 // mov x19, #-1 - WORD $0xf9400ff5 // ldr x21, [sp, #24] + WORD $0xf94017f5 // ldr x21, [sp, #40] WORD $0xaa1703f4 // mov x20, x23 WORD $0x92800004 // mov x4, #-1 WORD $0x9280001e // mov lr, #-1 - WORD $0x17ffff0c // b LBB0_675 $-976(%rip) -LBB0_735: + WORD $0x17ffff0c // b LBB0_687 $-976(%rip) +LBB0_747: WORD $0xdac00291 // rbit x17, x20 WORD $0xdac01231 // clz x17, x17 WORD $0xcb090375 // sub x21, x27, x9 WORD $0x8b1102b1 // add x17, x21, x17 WORD $0xb10007df // cmn lr, #1 WORD $0x9a9113de // csel lr, lr, x17, ne -LBB0_736: +LBB0_748: WORD $0x0a240291 // bic w17, w20, w4 WORD $0x531f7a35 // lsl w21, w17, #1 WORD $0x331f7a24 // bfi w4, w17, #1, #31 @@ -4074,46 +4296,46 @@ LBB0_736: WORD $0x1a9f37e4 // cset w4, hs WORD $0x2a3103f1 // mvn w17, w17 WORD $0x8a130233 // and x19, x17, x19 - WORD $0xb5ffee53 // cbnz x19, LBB0_713 $-568(%rip) -LBB0_737: + WORD $0xb5ffee53 // cbnz x19, LBB0_725 $-568(%rip) +LBB0_749: WORD $0x9100837b // add x27, x27, #32 WORD $0xaa0603f3 // mov x19, x6 -LBB0_738: - WORD $0xb5000964 // cbnz x4, LBB0_759 $300(%rip) - WORD $0xb40010b3 // cbz x19, LBB0_774 $532(%rip) -LBB0_740: +LBB0_750: + WORD $0xb5000964 // cbnz x4, LBB0_771 $300(%rip) + WORD $0xb40010b3 // cbz x19, LBB0_786 $532(%rip) +LBB0_752: WORD $0xaa1b03e6 // mov x6, x27 WORD $0x384014c4 // ldrb w4, [x6], #1 WORD $0x7100889f // cmp w4, #34 - WORD $0x54001000 // b.eq LBB0_773 $512(%rip) + WORD $0x54001000 // b.eq LBB0_785 $512(%rip) WORD $0xd1000671 // sub x17, x19, #1 WORD $0x7101709f // cmp w4, #92 - WORD $0x540000a0 // b.eq LBB0_743 $20(%rip) + WORD $0x540000a0 // b.eq LBB0_755 $20(%rip) WORD $0xaa0603fb // mov x27, x6 WORD $0xaa1103f3 // mov x19, x17 - WORD $0xb5fffef1 // cbnz x17, LBB0_740 $-36(%rip) - WORD $0x14000009 // b LBB0_745 $36(%rip) -LBB0_743: - WORD $0xb40080b1 // cbz x17, LBB0_930 $4116(%rip) + WORD $0xb5fffef1 // cbnz x17, LBB0_752 $-36(%rip) + WORD $0x14000009 // b LBB0_757 $36(%rip) +LBB0_755: + WORD $0xb4008491 // cbz x17, LBB0_946 $4240(%rip) WORD $0x8b0b00d1 // add x17, x6, x11 WORD $0xb10007df // cmn lr, #1 WORD $0x9a9e023e // csel lr, x17, lr, eq WORD $0x91000b7b // add x27, x27, #2 WORD $0xd1000a71 // sub x17, x19, #2 WORD $0xaa1103f3 // mov x19, x17 - WORD $0xb5fffdd1 // cbnz x17, LBB0_740 $-72(%rip) -LBB0_745: + WORD $0xb5fffdd1 // cbnz x17, LBB0_752 $-72(%rip) +LBB0_757: WORD $0x7100889f // cmp w4, #34 - WORD $0x54000e00 // b.eq LBB0_774 $448(%rip) - WORD $0x140003fb // b LBB0_930 $4076(%rip) -LBB0_746: + WORD $0x54000e00 // b.eq LBB0_786 $448(%rip) + WORD $0x1400041a // b LBB0_946 $4200(%rip) +LBB0_758: WORD $0xdac00291 // rbit x17, x20 WORD $0xdac01231 // clz x17, x17 WORD $0xcb090375 // sub x21, x27, x9 WORD $0x8b1102b1 // add x17, x21, x17 WORD $0xb10007df // cmn lr, #1 WORD $0x9a9113de // csel lr, lr, x17, ne -LBB0_747: +LBB0_759: WORD $0x0a240291 // bic w17, w20, w4 WORD $0x531f7a35 // lsl w21, w17, #1 WORD $0x331f7a24 // bfi w4, w17, #1, #31 @@ -4125,73 +4347,73 @@ LBB0_747: WORD $0x1a9f37e4 // cset w4, hs WORD $0x2a3103f1 // mvn w17, w17 WORD $0x8a130233 // and x19, x17, x19 - WORD $0xb5ffeeb3 // cbnz x19, LBB0_721 $-556(%rip) -LBB0_748: + WORD $0xb5ffeeb3 // cbnz x19, LBB0_733 $-556(%rip) +LBB0_760: WORD $0x9100837b // add x27, x27, #32 WORD $0xaa0603f3 // mov x19, x6 -LBB0_749: - WORD $0xb50004e4 // cbnz x4, LBB0_761 $156(%rip) - WORD $0xb4000313 // cbz x19, LBB0_758 $96(%rip) -LBB0_751: +LBB0_761: + WORD $0xb50004e4 // cbnz x4, LBB0_773 $156(%rip) + WORD $0xb4000313 // cbz x19, LBB0_770 $96(%rip) +LBB0_763: WORD $0xaa1b03e6 // mov x6, x27 WORD $0x384014c4 // ldrb w4, [x6], #1 WORD $0x7100889f // cmp w4, #34 - WORD $0x54000260 // b.eq LBB0_757 $76(%rip) + WORD $0x54000260 // b.eq LBB0_769 $76(%rip) WORD $0xd1000671 // sub x17, x19, #1 WORD $0x7101709f // cmp w4, #92 - WORD $0x540000a0 // b.eq LBB0_754 $20(%rip) + WORD $0x540000a0 // b.eq LBB0_766 $20(%rip) WORD $0xaa0603fb // mov x27, x6 WORD $0xaa1103f3 // mov x19, x17 - WORD $0xb5fffef1 // cbnz x17, LBB0_751 $-36(%rip) - WORD $0x14000009 // b LBB0_756 $36(%rip) -LBB0_754: - WORD $0xb4007b31 // cbz x17, LBB0_930 $3940(%rip) + WORD $0xb5fffef1 // cbnz x17, LBB0_763 $-36(%rip) + WORD $0x14000009 // b LBB0_768 $36(%rip) +LBB0_766: + WORD $0xb4007f11 // cbz x17, LBB0_946 $4064(%rip) WORD $0x8b0b00d1 // add x17, x6, x11 WORD $0xb10007df // cmn lr, #1 WORD $0x9a9e023e // csel lr, x17, lr, eq WORD $0x91000b7b // add x27, x27, #2 WORD $0xd1000a71 // sub x17, x19, #2 WORD $0xaa1103f3 // mov x19, x17 - WORD $0xb5fffdd1 // cbnz x17, LBB0_751 $-72(%rip) -LBB0_756: + WORD $0xb5fffdd1 // cbnz x17, LBB0_763 $-72(%rip) +LBB0_768: WORD $0x7100889f // cmp w4, #34 - WORD $0x54000060 // b.eq LBB0_758 $12(%rip) - WORD $0x140003cf // b LBB0_930 $3900(%rip) -LBB0_757: + WORD $0x54000060 // b.eq LBB0_770 $12(%rip) + WORD $0x140003ee // b LBB0_946 $4024(%rip) +LBB0_769: WORD $0xaa0603fb // mov x27, x6 -LBB0_758: +LBB0_770: WORD $0xcb09037b // sub x27, x27, x9 WORD $0x52800062 // mov w2, #3 WORD $0x52800085 // mov w5, #4 WORD $0x92f00006 // mov x6, #9223372036854775807 - WORD $0xb6ff951b // tbz x27, #63, LBB0_552 $-3424(%rip) - WORD $0x1400036c // b LBB0_901 $3504(%rip) -LBB0_759: - WORD $0xb40078f3 // cbz x19, LBB0_930 $3868(%rip) + WORD $0xb6ff951b // tbz x27, #63, LBB0_564 $-3424(%rip) + WORD $0x1400038b // b LBB0_917 $3628(%rip) +LBB0_771: + WORD $0xb4007cd3 // cbz x19, LBB0_946 $3992(%rip) WORD $0x8b0b0371 // add x17, x27, x11 WORD $0xb10007df // cmn lr, #1 WORD $0x9a9e023e // csel lr, x17, lr, eq WORD $0x9100077b // add x27, x27, #1 WORD $0xd1000673 // sub x19, x19, #1 - WORD $0xb5fff633 // cbnz x19, LBB0_740 $-316(%rip) - WORD $0x14000034 // b LBB0_774 $208(%rip) -LBB0_761: - WORD $0xb40077f3 // cbz x19, LBB0_930 $3836(%rip) + WORD $0xb5fff633 // cbnz x19, LBB0_752 $-316(%rip) + WORD $0x14000034 // b LBB0_786 $208(%rip) +LBB0_773: + WORD $0xb4007bd3 // cbz x19, LBB0_946 $3960(%rip) WORD $0x8b0b0371 // add x17, x27, x11 WORD $0xb10007df // cmn lr, #1 WORD $0x9a9e023e // csel lr, x17, lr, eq WORD $0x9100077b // add x27, x27, #1 WORD $0xd1000673 // sub x19, x19, #1 - WORD $0xb5fffab3 // cbnz x19, LBB0_751 $-172(%rip) - WORD $0x17ffffeb // b LBB0_758 $-84(%rip) -LBB0_763: + WORD $0xb5fffab3 // cbnz x19, LBB0_763 $-172(%rip) + WORD $0x17ffffeb // b LBB0_770 $-84(%rip) +LBB0_775: WORD $0xdac00291 // rbit x17, x20 WORD $0xdac01231 // clz x17, x17 WORD $0xcb090362 // sub x2, x27, x9 WORD $0x8b110051 // add x17, x2, x17 WORD $0xb10007df // cmn lr, #1 WORD $0x9a9113de // csel lr, lr, x17, ne -LBB0_764: +LBB0_776: WORD $0x0a240291 // bic w17, w20, w4 WORD $0x531f7a22 // lsl w2, w17, #1 WORD $0x331f7a24 // bfi w4, w17, #1, #31 @@ -4203,175 +4425,177 @@ LBB0_764: WORD $0x1a9f37e4 // cset w4, hs WORD $0x2a3103f1 // mvn w17, w17 WORD $0x8a130233 // and x19, x17, x19 - WORD $0xb5ffec93 // cbnz x19, LBB0_730 $-624(%rip) -LBB0_765: + WORD $0xb5ffec93 // cbnz x19, LBB0_742 $-624(%rip) +LBB0_777: WORD $0x9100837b // add x27, x27, #32 WORD $0xaa0603f3 // mov x19, x6 -LBB0_766: - WORD $0xb50003a4 // cbnz x4, LBB0_775 $116(%rip) - WORD $0xb40002d3 // cbz x19, LBB0_774 $88(%rip) -LBB0_768: +LBB0_778: + WORD $0xb50003a4 // cbnz x4, LBB0_787 $116(%rip) + WORD $0xb40002d3 // cbz x19, LBB0_786 $88(%rip) +LBB0_780: WORD $0xaa1b03e6 // mov x6, x27 WORD $0x384014c4 // ldrb w4, [x6], #1 WORD $0x7100889f // cmp w4, #34 - WORD $0x54000220 // b.eq LBB0_773 $68(%rip) + WORD $0x54000220 // b.eq LBB0_785 $68(%rip) WORD $0xd1000671 // sub x17, x19, #1 WORD $0x7101709f // cmp w4, #92 - WORD $0x540000a0 // b.eq LBB0_771 $20(%rip) + WORD $0x540000a0 // b.eq LBB0_783 $20(%rip) WORD $0xaa0603fb // mov x27, x6 WORD $0xaa1103f3 // mov x19, x17 - WORD $0xb5fffef1 // cbnz x17, LBB0_768 $-36(%rip) - WORD $0x17ffff9a // b LBB0_745 $-408(%rip) -LBB0_771: - WORD $0xb40072d1 // cbz x17, LBB0_930 $3672(%rip) + WORD $0xb5fffef1 // cbnz x17, LBB0_780 $-36(%rip) + WORD $0x17ffff9a // b LBB0_757 $-408(%rip) +LBB0_783: + WORD $0xb40076b1 // cbz x17, LBB0_946 $3796(%rip) WORD $0x8b0b00d1 // add x17, x6, x11 WORD $0xb10007df // cmn lr, #1 WORD $0x9a9e023e // csel lr, x17, lr, eq WORD $0x91000b7b // add x27, x27, #2 WORD $0xd1000a71 // sub x17, x19, #2 WORD $0xaa1103f3 // mov x19, x17 - WORD $0xb5fffdd1 // cbnz x17, LBB0_768 $-72(%rip) - WORD $0x17ffff91 // b LBB0_745 $-444(%rip) -LBB0_773: + WORD $0xb5fffdd1 // cbnz x17, LBB0_780 $-72(%rip) + WORD $0x17ffff91 // b LBB0_757 $-444(%rip) +LBB0_785: WORD $0xaa0603fb // mov x27, x6 -LBB0_774: +LBB0_786: WORD $0xcb09037b // sub x27, x27, x9 WORD $0x52800062 // mov w2, #3 WORD $0x52800085 // mov w5, #4 WORD $0x92f00006 // mov x6, #9223372036854775807 - WORD $0xb6ffb3fb // tbz x27, #63, LBB0_642 $-2436(%rip) - WORD $0x1400032b // b LBB0_901 $3244(%rip) -LBB0_775: - WORD $0xb40070d3 // cbz x19, LBB0_930 $3608(%rip) + WORD $0xb6ffb3fb // tbz x27, #63, LBB0_654 $-2436(%rip) + WORD $0x1400034a // b LBB0_917 $3368(%rip) +LBB0_787: + WORD $0xb40074b3 // cbz x19, LBB0_946 $3732(%rip) WORD $0x8b0b0371 // add x17, x27, x11 WORD $0xb10007df // cmn lr, #1 WORD $0x9a9e023e // csel lr, x17, lr, eq WORD $0x9100077b // add x27, x27, #1 WORD $0xd1000673 // sub x19, x19, #1 - WORD $0xb5fffbf3 // cbnz x19, LBB0_768 $-132(%rip) - WORD $0x17fffff3 // b LBB0_774 $-52(%rip) -LBB0_777: + WORD $0xb5fffbf3 // cbnz x19, LBB0_780 $-132(%rip) + WORD $0x17fffff3 // b LBB0_786 $-52(%rip) +LBB0_789: WORD $0xf940002b // ldr x11, [x1] WORD $0xa940200a // ldp x10, x8, [x0] WORD $0xeb08017f // cmp x11, x8 - WORD $0x54000142 // b.hs LBB0_781 $40(%rip) + WORD $0x54000142 // b.hs LBB0_793 $40(%rip) WORD $0x386b6949 // ldrb w9, [x10, x11] WORD $0x7100353f // cmp w9, #13 - WORD $0x540000e0 // b.eq LBB0_781 $28(%rip) + WORD $0x540000e0 // b.eq LBB0_793 $28(%rip) WORD $0x7100813f // cmp w9, #32 - WORD $0x540000a0 // b.eq LBB0_781 $20(%rip) + WORD $0x540000a0 // b.eq LBB0_793 $20(%rip) WORD $0x51002d2c // sub w12, w9, #11 WORD $0xaa0b03e9 // mov x9, x11 WORD $0x3100099f // cmn w12, #2 - WORD $0x54000883 // b.lo LBB0_804 $272(%rip) -LBB0_781: + WORD $0x54000883 // b.lo LBB0_816 $272(%rip) +LBB0_793: WORD $0x91000569 // add x9, x11, #1 WORD $0xeb08013f // cmp x9, x8 - WORD $0x54000122 // b.hs LBB0_785 $36(%rip) + WORD $0x54000122 // b.hs LBB0_797 $36(%rip) WORD $0x3869694c // ldrb w12, [x10, x9] WORD $0x7100359f // cmp w12, #13 - WORD $0x540000c0 // b.eq LBB0_785 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_797 $24(%rip) WORD $0x7100819f // cmp w12, #32 - WORD $0x54000080 // b.eq LBB0_785 $16(%rip) + WORD $0x54000080 // b.eq LBB0_797 $16(%rip) WORD $0x51002d8c // sub w12, w12, #11 WORD $0x3100099f // cmn w12, #2 - WORD $0x54000723 // b.lo LBB0_804 $228(%rip) -LBB0_785: + WORD $0x54000723 // b.lo LBB0_816 $228(%rip) +LBB0_797: WORD $0x91000969 // add x9, x11, #2 WORD $0xeb08013f // cmp x9, x8 - WORD $0x54000122 // b.hs LBB0_789 $36(%rip) + WORD $0x54000122 // b.hs LBB0_801 $36(%rip) WORD $0x3869694c // ldrb w12, [x10, x9] WORD $0x7100359f // cmp w12, #13 - WORD $0x540000c0 // b.eq LBB0_789 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_801 $24(%rip) WORD $0x7100819f // cmp w12, #32 - WORD $0x54000080 // b.eq LBB0_789 $16(%rip) + WORD $0x54000080 // b.eq LBB0_801 $16(%rip) WORD $0x51002d8c // sub w12, w12, #11 WORD $0x3100099f // cmn w12, #2 - WORD $0x540005c3 // b.lo LBB0_804 $184(%rip) -LBB0_789: + WORD $0x540005c3 // b.lo LBB0_816 $184(%rip) +LBB0_801: WORD $0x91000d69 // add x9, x11, #3 WORD $0xeb08013f // cmp x9, x8 - WORD $0x54000122 // b.hs LBB0_793 $36(%rip) + WORD $0x54000122 // b.hs LBB0_805 $36(%rip) WORD $0x3869694c // ldrb w12, [x10, x9] WORD $0x7100359f // cmp w12, #13 - WORD $0x540000c0 // b.eq LBB0_793 $24(%rip) + WORD $0x540000c0 // b.eq LBB0_805 $24(%rip) WORD $0x7100819f // cmp w12, #32 - WORD $0x54000080 // b.eq LBB0_793 $16(%rip) + WORD $0x54000080 // b.eq LBB0_805 $16(%rip) WORD $0x51002d8c // sub w12, w12, #11 WORD $0x3100099f // cmn w12, #2 - WORD $0x54000463 // b.lo LBB0_804 $140(%rip) -LBB0_793: + WORD $0x54000463 // b.lo LBB0_816 $140(%rip) +LBB0_805: WORD $0x91001169 // add x9, x11, #4 WORD $0xeb08013f // cmp x9, x8 - WORD $0x540001e2 // b.hs LBB0_798 $60(%rip) + WORD $0x540001e2 // b.hs LBB0_810 $60(%rip) WORD $0x5280002b // mov w11, #1 WORD $0xd284c00c // mov x12, #9728 WORD $0xf2c0002c // movk x12, #1, lsl #32 -LBB0_795: +LBB0_807: WORD $0x3869694d // ldrb w13, [x10, x9] WORD $0x710081bf // cmp w13, #32 WORD $0x9acd216d // lsl x13, x11, x13 WORD $0x8a0c01ad // and x13, x13, x12 WORD $0xfa4099a4 // ccmp x13, #0, #4, ls - WORD $0x540002a0 // b.eq LBB0_803 $84(%rip) + WORD $0x540002a0 // b.eq LBB0_815 $84(%rip) WORD $0x91000529 // add x9, x9, #1 WORD $0xeb09011f // cmp x8, x9 - WORD $0x54ffff01 // b.ne LBB0_795 $-32(%rip) -LBB0_797: + WORD $0x54ffff01 // b.ne LBB0_807 $-32(%rip) +LBB0_809: WORD $0x92800008 // mov x8, #-1 - WORD $0x14000078 // b LBB0_830 $480(%rip) -LBB0_798: + WORD $0x14000095 // b LBB0_845 $596(%rip) +LBB0_810: WORD $0xf9000029 // str x9, [x1] WORD $0x92800008 // mov x8, #-1 - WORD $0x14000075 // b LBB0_830 $468(%rip) -LBB0_799: + WORD $0x14000092 // b LBB0_845 $584(%rip) +LBB0_811: WORD $0xf9400028 // ldr x8, [x1] WORD $0xd1000508 // sub x8, x8, #1 WORD $0xf9000028 // str x8, [x1] WORD $0x92800428 // mov x8, #-34 - WORD $0x14000070 // b LBB0_830 $448(%rip) -LBB0_800: - WORD $0xf9000037 // str x23, [x1] - WORD $0x1400006a // b LBB0_827 $424(%rip) -LBB0_801: - WORD $0x7101745f // cmp w2, #93 - WORD $0x54000d01 // b.ne LBB0_827 $416(%rip) -LBB0_802: - WORD $0xf9000037 // str x23, [x1] + WORD $0x1400008d // b LBB0_845 $564(%rip) +LBB0_812: + WORD $0xf9000038 // str x24, [x1] + WORD $0x14000087 // b LBB0_842 $540(%rip) +LBB0_813: + WORD $0x7101761f // cmp w16, #93 + WORD $0x540010a1 // b.ne LBB0_842 $532(%rip) +LBB0_814: + WORD $0xf9000038 // str x24, [x1] WORD $0x92800408 // mov x8, #-33 - WORD $0x14000069 // b LBB0_830 $420(%rip) -LBB0_803: + WORD $0x14000086 // b LBB0_845 $536(%rip) +LBB0_815: WORD $0xeb08013f // cmp x9, x8 - WORD $0x54fffdc2 // b.hs LBB0_797 $-72(%rip) -LBB0_804: + WORD $0x54fffdc2 // b.hs LBB0_809 $-72(%rip) +LBB0_816: WORD $0x91000530 // add x16, x9, #1 WORD $0xf9000030 // str x16, [x1] WORD $0x38696948 // ldrb w8, [x10, x9] WORD $0x7101691f // cmp w8, #90 - WORD $0x540006ec // b.gt LBB0_821 $220(%rip) + WORD $0x54000a8c // b.gt LBB0_836 $336(%rip) WORD $0x7100bd1f // cmp w8, #47 - WORD $0x54000d8d // b.le LBB0_832 $432(%rip) + WORD $0x5400112d // b.le LBB0_847 $548(%rip) WORD $0x5100c108 // sub w8, w8, #48 WORD $0x7100291f // cmp w8, #10 - WORD $0x540057e2 // b.hs LBB0_898 $2812(%rip) -LBB0_807: + WORD $0x54005b82 // b.hs LBB0_913 $2928(%rip) +LBB0_819: WORD $0xf9400408 // ldr x8, [x0, #8] - WORD $0xcb100108 // sub x8, x8, x16 - WORD $0xf100411f // cmp x8, #16 - WORD $0x540002c3 // b.lo LBB0_811 $88(%rip) + WORD $0xcb10010b // sub x11, x8, x16 + WORD $0x8b100148 // add x8, x10, x16 + WORD $0xf100417f // cmp x11, #16 + WORD $0x54000303 // b.lo LBB0_823 $96(%rip) + WORD $0xd280000c // mov x12, #0 WORD $0x4f01e580 // movi.16b v0, #44 WORD $0x4f06e7e1 // movi.16b v1, #223 WORD $0x4f02e7a2 // movi.16b v2, #93 -Lloh20: - WORD $0x10fe198b // adr x11, lCPI0_0 $-15568(%rip) -Lloh21: - WORD $0x3dc00163 // ldr q3, [x11, lCPI0_0@PAGEOFF] $0(%rip) -Lloh22: - WORD $0x10fe19cb // adr x11, lCPI0_1 $-15560(%rip) -Lloh23: - WORD $0x3dc00164 // ldr q4, [x11, lCPI0_1@PAGEOFF] $0(%rip) -LBB0_809: - WORD $0x3cf06945 // ldr q5, [x10, x16] +Lloh28: + WORD $0x10fdfecd // adr x13, lCPI0_0 $-16424(%rip) +Lloh29: + WORD $0x3dc001a3 // ldr q3, [x13, lCPI0_0@PAGEOFF] $0(%rip) +Lloh30: + WORD $0x10fdff0d // adr x13, lCPI0_1 $-16416(%rip) +Lloh31: + WORD $0x3dc001a4 // ldr q4, [x13, lCPI0_1@PAGEOFF] $0(%rip) +LBB0_821: + WORD $0x3dc00105 // ldr q5, [x8] WORD $0x6e208ca6 // cmeq.16b v6, v5, v0 WORD $0x4e211ca5 // and.16b v5, v5, v1 WORD $0x6e228ca5 // cmeq.16b v5, v5, v2 @@ -4379,50 +4603,78 @@ LBB0_809: WORD $0x4e231ca5 // and.16b v5, v5, v3 WORD $0x4e0400a5 // tbl.16b v5, { v5 }, v4 WORD $0x4e71b8a5 // addv.8h h5, v5 - WORD $0x1e2600ab // fmov w11, s5 - WORD $0x350002eb // cbnz w11, LBB0_819 $92(%rip) - WORD $0xd1004108 // sub x8, x8, #16 - WORD $0x91004210 // add x16, x16, #16 - WORD $0xf1003d1f // cmp x8, #15 - WORD $0x54fffe68 // b.hi LBB0_809 $-52(%rip) -LBB0_811: - WORD $0x8b10014b // add x11, x10, x16 - WORD $0xb40001e8 // cbz x8, LBB0_818 $60(%rip) - WORD $0x8b08016c // add x12, x11, x8 - WORD $0xcb0a016d // sub x13, x11, x10 -LBB0_813: - WORD $0x3940016e // ldrb w14, [x11] - WORD $0x7100b1df // cmp w14, #44 - WORD $0x54005640 // b.eq LBB0_906 $2760(%rip) - WORD $0x7101f5df // cmp w14, #125 - WORD $0x54005600 // b.eq LBB0_906 $2752(%rip) - WORD $0x710175df // cmp w14, #93 - WORD $0x540055c0 // b.eq LBB0_906 $2744(%rip) - WORD $0x9100056b // add x11, x11, #1 + WORD $0x1e2600ad // fmov w13, s5 + WORD $0x350003ad // cbnz w13, LBB0_831 $116(%rip) + WORD $0x91004108 // add x8, x8, #16 + WORD $0xd100416b // sub x11, x11, #16 + WORD $0x9100418c // add x12, x12, #16 + WORD $0xf1003d7f // cmp x11, #15 + WORD $0x54fffe48 // b.hi LBB0_821 $-56(%rip) +LBB0_823: + WORD $0xb40002ab // cbz x11, LBB0_830 $84(%rip) + WORD $0x8b0b010c // add x12, x8, x11 + WORD $0xcb0a010d // sub x13, x8, x10 + WORD $0x5280002e // mov w14, #1 + WORD $0xd284c00f // mov x15, #9728 + WORD $0xf2c2002f // movk x15, #4097, lsl #32 +LBB0_825: + WORD $0x39400110 // ldrb w16, [x8] + WORD $0x7100b21f // cmp w16, #44 + WORD $0x9ad021d1 // lsl x17, x14, x16 + WORD $0x8a0f0231 // and x17, x17, x15 + WORD $0xfa409a24 // ccmp x17, #0, #4, ls + WORD $0x54005921 // b.ne LBB0_922 $2852(%rip) + WORD $0x7101f61f // cmp w16, #125 + WORD $0x540058e0 // b.eq LBB0_922 $2844(%rip) + WORD $0x7101761f // cmp w16, #93 + WORD $0x540058a0 // b.eq LBB0_922 $2836(%rip) + WORD $0x91000508 // add x8, x8, #1 WORD $0x910005ad // add x13, x13, #1 - WORD $0xf1000508 // subs x8, x8, #1 - WORD $0x54fffec1 // b.ne LBB0_813 $-40(%rip) - WORD $0xaa0c03eb // mov x11, x12 -LBB0_818: - WORD $0xcb0a0168 // sub x8, x11, x10 - WORD $0x14000004 // b LBB0_820 $16(%rip) -LBB0_819: - WORD $0x5ac00168 // rbit w8, w11 - WORD $0x5ac01108 // clz w8, w8 - WORD $0x8b100108 // add x8, x8, x16 -LBB0_820: + WORD $0xf100056b // subs x11, x11, #1 + WORD $0x54fffe61 // b.ne LBB0_825 $-52(%rip) + WORD $0xaa0c03e8 // mov x8, x12 +LBB0_830: + WORD $0xcb0a0108 // sub x8, x8, x10 + WORD $0x140002b0 // b LBB0_915 $2752(%rip) +LBB0_831: + WORD $0x5ac001ab // rbit w11, w13 + WORD $0x5ac0116b // clz w11, w11 + WORD $0xcb0a0108 // sub x8, x8, x10 + WORD $0x8b0b0108 // add x8, x8, x11 WORD $0xf9000028 // str x8, [x1] + WORD $0xf100051f // cmp x8, #1 + WORD $0x5400026b // b.lt LBB0_835 $76(%rip) + WORD $0x8b0c0168 // add x8, x11, x12 + WORD $0x8b09014a // add x10, x10, x9 + WORD $0x5280002b // mov w11, #1 + WORD $0xd284c00c // mov x12, #9728 + WORD $0xf2c0002c // movk x12, #1, lsl #32 +LBB0_833: + WORD $0x3868694d // ldrb w13, [x10, x8] + WORD $0x710081bf // cmp w13, #32 + WORD $0x9acd216d // lsl x13, x11, x13 + WORD $0x8a0c01ad // and x13, x13, x12 + WORD $0xfa4099a4 // ccmp x13, #0, #4, ls + WORD $0x54000100 // b.eq LBB0_835 $32(%rip) + WORD $0x8b08012d // add x13, x9, x8 + WORD $0xf900002d // str x13, [x1] + WORD $0xd1000508 // sub x8, x8, #1 + WORD $0x8b08012d // add x13, x9, x8 + WORD $0x910009ad // add x13, x13, #2 + WORD $0xf10005bf // cmp x13, #1 + WORD $0x54fffe8c // b.gt LBB0_833 $-48(%rip) +LBB0_835: WORD $0xaa0903e8 // mov x8, x9 - WORD $0x1400002c // b LBB0_830 $176(%rip) -LBB0_821: + WORD $0x1400002c // b LBB0_845 $176(%rip) +LBB0_836: WORD $0x7101b51f // cmp w8, #109 - WORD $0x5400078d // b.le LBB0_835 $240(%rip) + WORD $0x5400078d // b.le LBB0_850 $240(%rip) WORD $0x7101b91f // cmp w8, #110 - WORD $0x54002560 // b.eq LBB0_862 $1196(%rip) + WORD $0x54002560 // b.eq LBB0_877 $1196(%rip) WORD $0x7101d11f // cmp w8, #116 - WORD $0x54002520 // b.eq LBB0_862 $1188(%rip) + WORD $0x54002520 // b.eq LBB0_877 $1188(%rip) WORD $0x7101ed1f // cmp w8, #123 - WORD $0x540050c1 // b.ne LBB0_898 $2584(%rip) + WORD $0x540050c1 // b.ne LBB0_913 $2584(%rip) WORD $0xd2800007 // mov x7, #0 WORD $0xd280000f // mov x15, #0 WORD $0xd2800008 // mov x8, #0 @@ -4436,16 +4688,16 @@ LBB0_821: WORD $0xf9400411 // ldr x17, [x0, #8] WORD $0xcb100225 // sub x5, x17, x16 WORD $0x8b100150 // add x16, x10, x16 - WORD $0x910083ea // add x10, sp, #32 + WORD $0x9100c3ea // add x10, sp, #48 WORD $0x9100814a // add x10, x10, #32 WORD $0x4f01e440 // movi.16b v0, #34 -Lloh24: - WORD $0x10fe1151 // adr x17, lCPI0_0 $-15832(%rip) -Lloh25: +Lloh32: + WORD $0x10fdf331 // adr x17, lCPI0_0 $-16796(%rip) +Lloh33: WORD $0x3dc00221 // ldr q1, [x17, lCPI0_0@PAGEOFF] $0(%rip) -Lloh26: - WORD $0x10fe1191 // adr x17, lCPI0_1 $-15824(%rip) -Lloh27: +Lloh34: + WORD $0x10fdf371 // adr x17, lCPI0_1 $-16788(%rip) +Lloh35: WORD $0x3dc00222 // ldr q2, [x17, lCPI0_1@PAGEOFF] $0(%rip) WORD $0x4f02e783 // movi.16b v3, #92 WORD $0xb200e3f1 // mov x17, #1229782938247303441 @@ -4455,49 +4707,49 @@ Lloh27: WORD $0x4f03e764 // movi.16b v4, #123 WORD $0x4f03e7a5 // movi.16b v5, #125 WORD $0x6f00e406 // movi.2d v6, #0000000000000000 - WORD $0x1400002a // b LBB0_839 $168(%rip) -LBB0_826: - WORD $0x7101f45f // cmp w2, #125 - WORD $0x54fff340 // b.eq LBB0_802 $-408(%rip) -LBB0_827: + WORD $0x1400002a // b LBB0_854 $168(%rip) +LBB0_841: + WORD $0x7101f61f // cmp w16, #125 + WORD $0x54ffefa0 // b.eq LBB0_814 $-524(%rip) +LBB0_842: WORD $0xf9400028 // ldr x8, [x1] WORD $0xd1000508 // sub x8, x8, #1 -LBB0_828: +LBB0_843: WORD $0xf9000028 // str x8, [x1] -LBB0_829: +LBB0_844: WORD $0x92800028 // mov x8, #-2 -LBB0_830: +LBB0_845: WORD $0xaa0803e0 // mov x0, x8 - WORD $0xa94bfbfd // ldp fp, lr, [sp, #184] - WORD $0xa94acff4 // ldp x20, x19, [sp, #168] - WORD $0xa949d7f6 // ldp x22, x21, [sp, #152] - WORD $0xa948dff8 // ldp x24, x23, [sp, #136] - WORD $0xa947e7fa // ldp x26, x25, [sp, #120] - WORD $0xa946effc // ldp x28, x27, [sp, #104] - WORD $0x910343ff // add sp, sp, #208 + WORD $0xa94cfbfd // ldp fp, lr, [sp, #200] + WORD $0xa94bcff4 // ldp x20, x19, [sp, #184] + WORD $0xa94ad7f6 // ldp x22, x21, [sp, #168] + WORD $0xa949dff8 // ldp x24, x23, [sp, #152] + WORD $0xa948e7fa // ldp x26, x25, [sp, #136] + WORD $0xa947effc // ldp x28, x27, [sp, #120] + WORD $0x910383ff // add sp, sp, #224 WORD $0xd65f03c0 // ret -LBB0_831: +LBB0_846: WORD $0xf900003a // str x26, [x1] WORD $0x92800008 // mov x8, #-1 - WORD $0x17fffff5 // b LBB0_830 $-44(%rip) -LBB0_832: - WORD $0x34ffef68 // cbz w8, LBB0_797 $-532(%rip) + WORD $0x17fffff5 // b LBB0_845 $-44(%rip) +LBB0_847: + WORD $0x34ffebc8 // cbz w8, LBB0_809 $-648(%rip) WORD $0x7100891f // cmp w8, #34 - WORD $0x54001f40 // b.eq LBB0_863 $1000(%rip) + WORD $0x54001f40 // b.eq LBB0_878 $1000(%rip) WORD $0x7100b51f // cmp w8, #45 - WORD $0x54fff280 // b.eq LBB0_807 $-432(%rip) - WORD $0x14000251 // b LBB0_898 $2372(%rip) -LBB0_835: + WORD $0x54ffeee0 // b.eq LBB0_819 $-548(%rip) + WORD $0x14000251 // b LBB0_913 $2372(%rip) +LBB0_850: WORD $0x71016d1f // cmp w8, #91 - WORD $0x540027a0 // b.eq LBB0_872 $1268(%rip) + WORD $0x540027a0 // b.eq LBB0_887 $1268(%rip) WORD $0x7101991f // cmp w8, #102 - WORD $0x540049a1 // b.ne LBB0_898 $2356(%rip) + WORD $0x540049a1 // b.ne LBB0_913 $2356(%rip) WORD $0x91001528 // add x8, x9, #5 WORD $0xf940040a // ldr x10, [x0, #8] WORD $0xeb0a011f // cmp x8, x10 - WORD $0x54ffedc8 // b.hi LBB0_797 $-584(%rip) - WORD $0x17ffffb8 // b LBB0_820 $-288(%rip) -LBB0_838: + WORD $0x54ffea28 // b.hi LBB0_809 $-700(%rip) + WORD $0x1400024f // b LBB0_915 $2364(%rip) +LBB0_853: WORD $0x937ffce7 // asr x7, x7, #63 WORD $0x9e670267 // fmov d7, x19 WORD $0x0e2058e7 // cnt.8b v7, v7 @@ -4506,10 +4758,10 @@ LBB0_838: WORD $0x8b0800a8 // add x8, x5, x8 WORD $0x91010210 // add x16, x16, #64 WORD $0xaa0603e5 // mov x5, x6 -LBB0_839: +LBB0_854: WORD $0xf10100a6 // subs x6, x5, #64 - WORD $0x540015cb // b.lt LBB0_846 $696(%rip) -LBB0_840: + WORD $0x540015cb // b.lt LBB0_861 $696(%rip) +LBB0_855: WORD $0xad404612 // ldp q18, q17, [x16] WORD $0xad411e10 // ldp q16, q7, [x16, #32] WORD $0x6e238e53 // cmeq.16b v19, v18, v3 @@ -4538,11 +4790,11 @@ LBB0_840: WORD $0xaa1402b4 // orr x20, x21, x20 WORD $0xaa130293 // orr x19, x20, x19 WORD $0xaa0f0274 // orr x20, x19, x15 - WORD $0xb5000094 // cbnz x20, LBB0_842 $16(%rip) + WORD $0xb5000094 // cbnz x20, LBB0_857 $16(%rip) WORD $0xd280000f // mov x15, #0 WORD $0xd2800013 // mov x19, #0 - WORD $0x1400000a // b LBB0_843 $40(%rip) -LBB0_842: + WORD $0x1400000a // b LBB0_858 $40(%rip) +LBB0_857: WORD $0x8a2f0274 // bic x20, x19, x15 WORD $0xaa1405f5 // orr x21, x15, x20, lsl #1 WORD $0x8a35026f // bic x15, x19, x21 @@ -4552,7 +4804,7 @@ LBB0_842: WORD $0xd37ffa73 // lsl x19, x19, #1 WORD $0xd200f273 // eor x19, x19, #0x5555555555555555 WORD $0x8a150273 // and x19, x19, x21 -LBB0_843: +LBB0_858: WORD $0x6e208e53 // cmeq.16b v19, v18, v0 WORD $0x4e211e73 // and.16b v19, v19, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 @@ -4671,8 +4923,8 @@ LBB0_843: WORD $0xaa1502d5 // orr x21, x22, x21 WORD $0xaa1402b4 // orr x20, x21, x20 WORD $0xea270294 // bics x20, x20, x7 - WORD $0x54ffeae0 // b.eq LBB0_838 $-676(%rip) -LBB0_844: + WORD $0x54ffeae0 // b.eq LBB0_853 $-676(%rip) +LBB0_859: WORD $0xd1000695 // sub x21, x20, #1 WORD $0x8a1302b6 // and x22, x21, x19 WORD $0x9e6702c7 // fmov d7, x22 @@ -4681,101 +4933,101 @@ LBB0_844: WORD $0x1e2600f6 // fmov w22, s7 WORD $0x8b0802d6 // add x22, x22, x8 WORD $0xeb0b02df // cmp x22, x11 - WORD $0x54003109 // b.ls LBB0_897 $1568(%rip) + WORD $0x54003109 // b.ls LBB0_912 $1568(%rip) WORD $0x9100056b // add x11, x11, #1 WORD $0xea1402b4 // ands x20, x21, x20 - WORD $0x54fffea1 // b.ne LBB0_844 $-44(%rip) - WORD $0x17ffff4a // b LBB0_838 $-728(%rip) -LBB0_846: + WORD $0x54fffea1 // b.ne LBB0_859 $-44(%rip) + WORD $0x17ffff4a // b LBB0_853 $-728(%rip) +LBB0_861: WORD $0xf10000bf // cmp x5, #0 - WORD $0x5400404d // b.le LBB0_937 $2056(%rip) - WORD $0xad021be6 // stp q6, q6, [sp, #64] - WORD $0xad011be6 // stp q6, q6, [sp, #32] + WORD $0x5400408d // b.le LBB0_953 $2064(%rip) + WORD $0xad029be6 // stp q6, q6, [sp, #80] + WORD $0xad019be6 // stp q6, q6, [sp, #48] WORD $0x92402e13 // and x19, x16, #0xfff WORD $0xf13f067f // cmp x19, #4033 - WORD $0x54ffe9a3 // b.lo LBB0_840 $-716(%rip) + WORD $0x54ffe9a3 // b.lo LBB0_855 $-716(%rip) WORD $0xf10080b4 // subs x20, x5, #32 - WORD $0x540000a3 // b.lo LBB0_850 $20(%rip) + WORD $0x540000a3 // b.lo LBB0_865 $20(%rip) WORD $0xacc14207 // ldp q7, q16, [x16], #32 - WORD $0xad0143e7 // stp q7, q16, [sp, #32] + WORD $0xad01c3e7 // stp q7, q16, [sp, #48] WORD $0xaa0a03f3 // mov x19, x10 - WORD $0x14000003 // b LBB0_851 $12(%rip) -LBB0_850: - WORD $0x910083f3 // add x19, sp, #32 + WORD $0x14000003 // b LBB0_866 $12(%rip) +LBB0_865: + WORD $0x9100c3f3 // add x19, sp, #48 WORD $0xaa0503f4 // mov x20, x5 -LBB0_851: +LBB0_866: WORD $0xf1004295 // subs x21, x20, #16 - WORD $0x54000243 // b.lo LBB0_857 $72(%rip) + WORD $0x54000243 // b.lo LBB0_872 $72(%rip) WORD $0x3cc10607 // ldr q7, [x16], #16 WORD $0x3c810667 // str q7, [x19], #16 WORD $0xaa1503f4 // mov x20, x21 WORD $0xf10022b5 // subs x21, x21, #8 - WORD $0x540001e2 // b.hs LBB0_858 $60(%rip) -LBB0_853: + WORD $0x540001e2 // b.hs LBB0_873 $60(%rip) +LBB0_868: WORD $0xf1001295 // subs x21, x20, #4 - WORD $0x54000243 // b.lo LBB0_859 $72(%rip) -LBB0_854: + WORD $0x54000243 // b.lo LBB0_874 $72(%rip) +LBB0_869: WORD $0xb8404614 // ldr w20, [x16], #4 WORD $0xb8004674 // str w20, [x19], #4 WORD $0xaa1503f4 // mov x20, x21 WORD $0xf1000ab5 // subs x21, x21, #2 - WORD $0x540001e2 // b.hs LBB0_860 $60(%rip) -LBB0_855: - WORD $0xb4000254 // cbz x20, LBB0_861 $72(%rip) -LBB0_856: + WORD $0x540001e2 // b.hs LBB0_875 $60(%rip) +LBB0_870: + WORD $0xb4000254 // cbz x20, LBB0_876 $72(%rip) +LBB0_871: WORD $0x39400210 // ldrb w16, [x16] WORD $0x39000270 // strb w16, [x19] - WORD $0x910083f0 // add x16, sp, #32 - WORD $0x17ffff32 // b LBB0_840 $-824(%rip) -LBB0_857: + WORD $0x9100c3f0 // add x16, sp, #48 + WORD $0x17ffff32 // b LBB0_855 $-824(%rip) +LBB0_872: WORD $0xf1002295 // subs x21, x20, #8 - WORD $0x54fffe63 // b.lo LBB0_853 $-52(%rip) -LBB0_858: + WORD $0x54fffe63 // b.lo LBB0_868 $-52(%rip) +LBB0_873: WORD $0xf8408614 // ldr x20, [x16], #8 WORD $0xf8008674 // str x20, [x19], #8 WORD $0xaa1503f4 // mov x20, x21 WORD $0xf10012b5 // subs x21, x21, #4 - WORD $0x54fffe02 // b.hs LBB0_854 $-64(%rip) -LBB0_859: + WORD $0x54fffe02 // b.hs LBB0_869 $-64(%rip) +LBB0_874: WORD $0xf1000a95 // subs x21, x20, #2 - WORD $0x54fffe63 // b.lo LBB0_855 $-52(%rip) -LBB0_860: + WORD $0x54fffe63 // b.lo LBB0_870 $-52(%rip) +LBB0_875: WORD $0x78402614 // ldrh w20, [x16], #2 WORD $0x78002674 // strh w20, [x19], #2 WORD $0xaa1503f4 // mov x20, x21 - WORD $0xb5fffe15 // cbnz x21, LBB0_856 $-64(%rip) -LBB0_861: - WORD $0x910083f0 // add x16, sp, #32 - WORD $0x17ffff23 // b LBB0_840 $-884(%rip) -LBB0_862: + WORD $0xb5fffe15 // cbnz x21, LBB0_871 $-64(%rip) +LBB0_876: + WORD $0x9100c3f0 // add x16, sp, #48 + WORD $0x17ffff23 // b LBB0_855 $-884(%rip) +LBB0_877: WORD $0x91001128 // add x8, x9, #4 WORD $0xf940040a // ldr x10, [x0, #8] WORD $0xeb0a011f // cmp x8, x10 - WORD $0x54ffd028 // b.hi LBB0_797 $-1532(%rip) - WORD $0x17fffecb // b LBB0_820 $-1236(%rip) -LBB0_863: + WORD $0x54ffcc88 // b.hi LBB0_809 $-1648(%rip) + WORD $0x14000162 // b LBB0_915 $1416(%rip) +LBB0_878: WORD $0xf9400411 // ldr x17, [x0, #8] WORD $0xcb10022b // sub x11, x17, x16 WORD $0xf100817f // cmp x11, #32 - WORD $0x540036ab // b.lt LBB0_927 $1748(%rip) + WORD $0x540036eb // b.lt LBB0_943 $1756(%rip) WORD $0xd2800008 // mov x8, #0 WORD $0xd280000e // mov x14, #0 WORD $0x3200f3ec // mov w12, #1431655765 WORD $0x3201f3ed // mov w13, #-1431655766 WORD $0x4f01e440 // movi.16b v0, #34 WORD $0x8b09014f // add x15, x10, x9 -Lloh28: - WORD $0x10fdecab // adr x11, lCPI0_0 $-17004(%rip) -Lloh29: +Lloh36: + WORD $0x10fdce8b // adr x11, lCPI0_0 $-17968(%rip) +Lloh37: WORD $0x3dc00161 // ldr q1, [x11, lCPI0_0@PAGEOFF] $0(%rip) -Lloh30: - WORD $0x10fdeceb // adr x11, lCPI0_1 $-16996(%rip) -Lloh31: +Lloh38: + WORD $0x10fdcecb // adr x11, lCPI0_1 $-17960(%rip) +Lloh39: WORD $0x3dc00162 // ldr q2, [x11, lCPI0_1@PAGEOFF] $0(%rip) WORD $0xcb09022b // sub x11, x17, x9 WORD $0x4f02e783 // movi.16b v3, #92 WORD $0x528003f0 // mov w16, #31 -LBB0_865: +LBB0_880: WORD $0x8b0801f1 // add x17, x15, x8 WORD $0x3cc01224 // ldur q4, [x17, #1] WORD $0x3cc11225 // ldur q5, [x17, #17] @@ -4803,7 +5055,7 @@ LBB0_865: WORD $0x33103c40 // bfi w0, w2, #16, #16 WORD $0x7100001f // cmp w0, #0 WORD $0xfa4009c0 // ccmp x14, #0, #0, eq - WORD $0x54000180 // b.eq LBB0_867 $48(%rip) + WORD $0x54000180 // b.eq LBB0_882 $48(%rip) WORD $0x0a2e0002 // bic w2, w0, w14 WORD $0x2a0205c3 // orr w3, w14, w2, lsl #1 WORD $0x0a0d000e // and w14, w0, w13 @@ -4814,26 +5066,26 @@ LBB0_865: WORD $0x0a030000 // and w0, w0, w3 WORD $0x2a2003e0 // mvn w0, w0 WORD $0x8a110011 // and x17, x0, x17 - WORD $0x14000002 // b LBB0_868 $8(%rip) -LBB0_867: + WORD $0x14000002 // b LBB0_883 $8(%rip) +LBB0_882: WORD $0xd280000e // mov x14, #0 -LBB0_868: - WORD $0xb5002471 // cbnz x17, LBB0_899 $1164(%rip) +LBB0_883: + WORD $0xb5002471 // cbnz x17, LBB0_914 $1164(%rip) WORD $0x91008108 // add x8, x8, #32 WORD $0xd1008210 // sub x16, x16, #32 WORD $0x8b100171 // add x17, x11, x16 WORD $0xf100fe3f // cmp x17, #63 - WORD $0x54fffa6c // b.gt LBB0_865 $-180(%rip) - WORD $0xb500324e // cbnz x14, LBB0_939 $1608(%rip) + WORD $0x54fffa6c // b.gt LBB0_880 $-180(%rip) + WORD $0xb500328e // cbnz x14, LBB0_955 $1616(%rip) WORD $0x8b09014c // add x12, x10, x9 WORD $0x8b08018c // add x12, x12, x8 WORD $0x9100058c // add x12, x12, #1 WORD $0xaa2803e8 // mvn x8, x8 WORD $0x8b0b010b // add x11, x8, x11 WORD $0xf100057f // cmp x11, #1 - WORD $0x5400338a // b.ge LBB0_942 $1648(%rip) - WORD $0x17fffe38 // b LBB0_797 $-1824(%rip) -LBB0_872: + WORD $0x540033ca // b.ge LBB0_958 $1656(%rip) + WORD $0x17fffe1b // b LBB0_809 $-1940(%rip) +LBB0_887: WORD $0xd2800007 // mov x7, #0 WORD $0xd280000f // mov x15, #0 WORD $0xd2800008 // mov x8, #0 @@ -4847,16 +5099,16 @@ LBB0_872: WORD $0xf9400411 // ldr x17, [x0, #8] WORD $0xcb100225 // sub x5, x17, x16 WORD $0x8b100150 // add x16, x10, x16 - WORD $0x910083ea // add x10, sp, #32 + WORD $0x9100c3ea // add x10, sp, #48 WORD $0x9100814a // add x10, x10, #32 WORD $0x4f01e440 // movi.16b v0, #34 -Lloh32: - WORD $0x10fde2f1 // adr x17, lCPI0_0 $-17316(%rip) -Lloh33: +Lloh40: + WORD $0x10fdc4d1 // adr x17, lCPI0_0 $-18280(%rip) +Lloh41: WORD $0x3dc00221 // ldr q1, [x17, lCPI0_0@PAGEOFF] $0(%rip) -Lloh34: - WORD $0x10fde331 // adr x17, lCPI0_1 $-17308(%rip) -Lloh35: +Lloh42: + WORD $0x10fdc511 // adr x17, lCPI0_1 $-18272(%rip) +Lloh43: WORD $0x3dc00222 // ldr q2, [x17, lCPI0_1@PAGEOFF] $0(%rip) WORD $0x4f02e783 // movi.16b v3, #92 WORD $0xb200e3f1 // mov x17, #1229782938247303441 @@ -4866,8 +5118,8 @@ Lloh35: WORD $0x4f02e764 // movi.16b v4, #91 WORD $0x4f02e7a5 // movi.16b v5, #93 WORD $0x6f00e406 // movi.2d v6, #0000000000000000 - WORD $0x14000009 // b LBB0_874 $36(%rip) -LBB0_873: + WORD $0x14000009 // b LBB0_889 $36(%rip) +LBB0_888: WORD $0x937ffce7 // asr x7, x7, #63 WORD $0x9e670267 // fmov d7, x19 WORD $0x0e2058e7 // cnt.8b v7, v7 @@ -4876,10 +5128,10 @@ LBB0_873: WORD $0x8b0800a8 // add x8, x5, x8 WORD $0x91010210 // add x16, x16, #64 WORD $0xaa0603e5 // mov x5, x6 -LBB0_874: +LBB0_889: WORD $0xf10100a6 // subs x6, x5, #64 - WORD $0x540015cb // b.lt LBB0_881 $696(%rip) -LBB0_875: + WORD $0x540015cb // b.lt LBB0_896 $696(%rip) +LBB0_890: WORD $0xad404612 // ldp q18, q17, [x16] WORD $0xad411e10 // ldp q16, q7, [x16, #32] WORD $0x6e238e53 // cmeq.16b v19, v18, v3 @@ -4908,11 +5160,11 @@ LBB0_875: WORD $0xaa1402b4 // orr x20, x21, x20 WORD $0xaa130293 // orr x19, x20, x19 WORD $0xaa0f0274 // orr x20, x19, x15 - WORD $0xb5000094 // cbnz x20, LBB0_877 $16(%rip) + WORD $0xb5000094 // cbnz x20, LBB0_892 $16(%rip) WORD $0xd280000f // mov x15, #0 WORD $0xd2800013 // mov x19, #0 - WORD $0x1400000a // b LBB0_878 $40(%rip) -LBB0_877: + WORD $0x1400000a // b LBB0_893 $40(%rip) +LBB0_892: WORD $0x8a2f0274 // bic x20, x19, x15 WORD $0xaa1405f5 // orr x21, x15, x20, lsl #1 WORD $0x8a35026f // bic x15, x19, x21 @@ -4922,7 +5174,7 @@ LBB0_877: WORD $0xd37ffa73 // lsl x19, x19, #1 WORD $0xd200f273 // eor x19, x19, #0x5555555555555555 WORD $0x8a150273 // and x19, x19, x21 -LBB0_878: +LBB0_893: WORD $0x6e208e53 // cmeq.16b v19, v18, v0 WORD $0x4e211e73 // and.16b v19, v19, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 @@ -5041,8 +5293,8 @@ LBB0_878: WORD $0xaa1502d5 // orr x21, x22, x21 WORD $0xaa1402b4 // orr x20, x21, x20 WORD $0xea270294 // bics x20, x20, x7 - WORD $0x54ffeae0 // b.eq LBB0_873 $-676(%rip) -LBB0_879: + WORD $0x54ffeae0 // b.eq LBB0_888 $-676(%rip) +LBB0_894: WORD $0xd1000695 // sub x21, x20, #1 WORD $0x8a1302b6 // and x22, x21, x19 WORD $0x9e6702c7 // fmov d7, x22 @@ -5051,73 +5303,73 @@ LBB0_879: WORD $0x1e2600f6 // fmov w22, s7 WORD $0x8b0802d6 // add x22, x22, x8 WORD $0xeb0b02df // cmp x22, x11 - WORD $0x540006c9 // b.ls LBB0_897 $216(%rip) + WORD $0x540006c9 // b.ls LBB0_912 $216(%rip) WORD $0x9100056b // add x11, x11, #1 WORD $0xea1402b4 // ands x20, x21, x20 - WORD $0x54fffea1 // b.ne LBB0_879 $-44(%rip) - WORD $0x17ffff4a // b LBB0_873 $-728(%rip) -LBB0_881: + WORD $0x54fffea1 // b.ne LBB0_894 $-44(%rip) + WORD $0x17ffff4a // b LBB0_888 $-728(%rip) +LBB0_896: WORD $0xf10000bf // cmp x5, #0 - WORD $0x5400160d // b.le LBB0_937 $704(%rip) - WORD $0xad021be6 // stp q6, q6, [sp, #64] - WORD $0xad011be6 // stp q6, q6, [sp, #32] + WORD $0x5400164d // b.le LBB0_953 $712(%rip) + WORD $0xad029be6 // stp q6, q6, [sp, #80] + WORD $0xad019be6 // stp q6, q6, [sp, #48] WORD $0x92402e13 // and x19, x16, #0xfff WORD $0xf13f067f // cmp x19, #4033 - WORD $0x54ffe9a3 // b.lo LBB0_875 $-716(%rip) + WORD $0x54ffe9a3 // b.lo LBB0_890 $-716(%rip) WORD $0xf10080b4 // subs x20, x5, #32 - WORD $0x540000a3 // b.lo LBB0_885 $20(%rip) + WORD $0x540000a3 // b.lo LBB0_900 $20(%rip) WORD $0xacc14207 // ldp q7, q16, [x16], #32 - WORD $0xad0143e7 // stp q7, q16, [sp, #32] + WORD $0xad01c3e7 // stp q7, q16, [sp, #48] WORD $0xaa0a03f3 // mov x19, x10 - WORD $0x14000003 // b LBB0_886 $12(%rip) -LBB0_885: - WORD $0x910083f3 // add x19, sp, #32 + WORD $0x14000003 // b LBB0_901 $12(%rip) +LBB0_900: + WORD $0x9100c3f3 // add x19, sp, #48 WORD $0xaa0503f4 // mov x20, x5 -LBB0_886: +LBB0_901: WORD $0xf1004295 // subs x21, x20, #16 - WORD $0x54000243 // b.lo LBB0_892 $72(%rip) + WORD $0x54000243 // b.lo LBB0_907 $72(%rip) WORD $0x3cc10607 // ldr q7, [x16], #16 WORD $0x3c810667 // str q7, [x19], #16 WORD $0xaa1503f4 // mov x20, x21 WORD $0xf10022b5 // subs x21, x21, #8 - WORD $0x540001e2 // b.hs LBB0_893 $60(%rip) -LBB0_888: + WORD $0x540001e2 // b.hs LBB0_908 $60(%rip) +LBB0_903: WORD $0xf1001295 // subs x21, x20, #4 - WORD $0x54000243 // b.lo LBB0_894 $72(%rip) -LBB0_889: + WORD $0x54000243 // b.lo LBB0_909 $72(%rip) +LBB0_904: WORD $0xb8404614 // ldr w20, [x16], #4 WORD $0xb8004674 // str w20, [x19], #4 WORD $0xaa1503f4 // mov x20, x21 WORD $0xf1000ab5 // subs x21, x21, #2 - WORD $0x540001e2 // b.hs LBB0_895 $60(%rip) -LBB0_890: - WORD $0xb4000254 // cbz x20, LBB0_896 $72(%rip) -LBB0_891: + WORD $0x540001e2 // b.hs LBB0_910 $60(%rip) +LBB0_905: + WORD $0xb4000254 // cbz x20, LBB0_911 $72(%rip) +LBB0_906: WORD $0x39400210 // ldrb w16, [x16] WORD $0x39000270 // strb w16, [x19] - WORD $0x910083f0 // add x16, sp, #32 - WORD $0x17ffff32 // b LBB0_875 $-824(%rip) -LBB0_892: + WORD $0x9100c3f0 // add x16, sp, #48 + WORD $0x17ffff32 // b LBB0_890 $-824(%rip) +LBB0_907: WORD $0xf1002295 // subs x21, x20, #8 - WORD $0x54fffe63 // b.lo LBB0_888 $-52(%rip) -LBB0_893: + WORD $0x54fffe63 // b.lo LBB0_903 $-52(%rip) +LBB0_908: WORD $0xf8408614 // ldr x20, [x16], #8 WORD $0xf8008674 // str x20, [x19], #8 WORD $0xaa1503f4 // mov x20, x21 WORD $0xf10012b5 // subs x21, x21, #4 - WORD $0x54fffe02 // b.hs LBB0_889 $-64(%rip) -LBB0_894: + WORD $0x54fffe02 // b.hs LBB0_904 $-64(%rip) +LBB0_909: WORD $0xf1000a95 // subs x21, x20, #2 - WORD $0x54fffe63 // b.lo LBB0_890 $-52(%rip) -LBB0_895: + WORD $0x54fffe63 // b.lo LBB0_905 $-52(%rip) +LBB0_910: WORD $0x78402614 // ldrh w20, [x16], #2 WORD $0x78002674 // strh w20, [x19], #2 WORD $0xaa1503f4 // mov x20, x21 - WORD $0xb5fffe15 // cbnz x21, LBB0_891 $-64(%rip) -LBB0_896: - WORD $0x910083f0 // add x16, sp, #32 - WORD $0x17ffff23 // b LBB0_875 $-884(%rip) -LBB0_897: + WORD $0xb5fffe15 // cbnz x21, LBB0_906 $-64(%rip) +LBB0_911: + WORD $0x9100c3f0 // add x16, sp, #48 + WORD $0x17ffff23 // b LBB0_890 $-884(%rip) +LBB0_912: WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xdac0028a // rbit x10, x20 WORD $0xdac0114a // clz x10, x10 @@ -5130,207 +5382,210 @@ LBB0_897: WORD $0x9a882568 // csinc x8, x11, x8, hs WORD $0xf9000028 // str x8, [x1] WORD $0xda9f9128 // csinv x8, x9, xzr, ls - WORD $0x17fffd9f // b LBB0_830 $-2436(%rip) -LBB0_898: + WORD $0x17fffd9f // b LBB0_845 $-2436(%rip) +LBB0_913: WORD $0xf9000029 // str x9, [x1] - WORD $0x17fffd9c // b LBB0_829 $-2448(%rip) -LBB0_899: + WORD $0x17fffd9c // b LBB0_844 $-2448(%rip) +LBB0_914: WORD $0xdac0022a // rbit x10, x17 WORD $0xdac0114a // clz x10, x10 WORD $0x8b080128 // add x8, x9, x8 WORD $0x8b080148 // add x8, x10, x8 WORD $0x91000908 // add x8, x8, #2 - WORD $0x17fffd69 // b LBB0_820 $-2652(%rip) -LBB0_900: +LBB0_915: + WORD $0xf9000028 // str x8, [x1] + WORD $0xaa0903e8 // mov x8, x9 + WORD $0x17fffd95 // b LBB0_845 $-2476(%rip) +LBB0_916: WORD $0x928000c8 // mov x8, #-7 - WORD $0x17fffd95 // b LBB0_830 $-2476(%rip) -LBB0_901: + WORD $0x17fffd93 // b LBB0_845 $-2484(%rip) +LBB0_917: WORD $0xb100077f // cmn x27, #1 WORD $0x9a9e0108 // csel x8, x8, lr, eq -LBB0_902: +LBB0_918: WORD $0xf9000028 // str x8, [x1] WORD $0xaa1b03e8 // mov x8, x27 - WORD $0x17fffd90 // b LBB0_830 $-2496(%rip) -LBB0_903: + WORD $0x17fffd8e // b LBB0_845 $-2504(%rip) +LBB0_919: WORD $0x92800014 // mov x20, #-1 -LBB0_904: +LBB0_920: WORD $0xaa3403f3 // mvn x19, x20 -LBB0_905: +LBB0_921: WORD $0x8b1a0268 // add x8, x19, x26 - WORD $0x17fffd8a // b LBB0_828 $-2520(%rip) -LBB0_906: + WORD $0x17fffd88 // b LBB0_843 $-2528(%rip) +LBB0_922: WORD $0xf900002d // str x13, [x1] WORD $0xaa0903e8 // mov x8, x9 - WORD $0x17fffd89 // b LBB0_830 $-2524(%rip) -LBB0_907: + WORD $0x17fffd87 // b LBB0_845 $-2532(%rip) +LBB0_923: WORD $0xaa0803f3 // mov x19, x8 - WORD $0x17fffffa // b LBB0_905 $-24(%rip) -LBB0_908: - WORD $0xaa1b03f4 // mov x20, x27 -LBB0_909: - WORD $0xf9000034 // str x20, [x1] + WORD $0x17fffffa // b LBB0_921 $-24(%rip) +LBB0_924: + WORD $0xaa1e03f0 // mov x16, lr +LBB0_925: + WORD $0xf9000030 // str x16, [x1] WORD $0x92800008 // mov x8, #-1 - WORD $0x17fffd83 // b LBB0_830 $-2548(%rip) -LBB0_910: + WORD $0x17fffd81 // b LBB0_845 $-2556(%rip) +LBB0_926: WORD $0x92800006 // mov x6, #-1 -LBB0_911: +LBB0_927: WORD $0xaa2603fe // mvn lr, x6 -LBB0_912: +LBB0_928: WORD $0x8b1e0368 // add x8, x27, lr - WORD $0x17fffd7d // b LBB0_828 $-2572(%rip) -LBB0_913: + WORD $0x17fffd7b // b LBB0_843 $-2580(%rip) +LBB0_929: WORD $0xf900003b // str x27, [x1] WORD $0x387b6928 // ldrb w8, [x9, x27] WORD $0x7101851f // cmp w8, #97 - WORD $0x54ffaf41 // b.ne LBB0_829 $-2584(%rip) + WORD $0x54ffaf01 // b.ne LBB0_844 $-2592(%rip) WORD $0x91000b48 // add x8, x26, #2 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101b11f // cmp w8, #108 - WORD $0x54ffaea1 // b.ne LBB0_829 $-2604(%rip) + WORD $0x54ffae61 // b.ne LBB0_844 $-2612(%rip) WORD $0x91000f48 // add x8, x26, #3 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101cd1f // cmp w8, #115 - WORD $0x54ffae01 // b.ne LBB0_829 $-2624(%rip) + WORD $0x54ffadc1 // b.ne LBB0_844 $-2632(%rip) WORD $0x91001348 // add x8, x26, #4 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101951f // cmp w8, #101 - WORD $0x54ffad61 // b.ne LBB0_829 $-2644(%rip) + WORD $0x54ffad21 // b.ne LBB0_844 $-2652(%rip) WORD $0x91001748 // add x8, x26, #5 - WORD $0x17fffd68 // b LBB0_828 $-2656(%rip) -LBB0_918: + WORD $0x17fffd66 // b LBB0_843 $-2664(%rip) +LBB0_934: WORD $0xf900003a // str x26, [x1] WORD $0x394003c8 // ldrb w8, [lr] WORD $0x7101b91f // cmp w8, #110 - WORD $0x54ffaca1 // b.ne LBB0_829 $-2668(%rip) + WORD $0x54ffac61 // b.ne LBB0_844 $-2676(%rip) WORD $0x91000748 // add x8, x26, #1 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101d51f // cmp w8, #117 - WORD $0x54ffac01 // b.ne LBB0_829 $-2688(%rip) + WORD $0x54ffabc1 // b.ne LBB0_844 $-2696(%rip) WORD $0x91000b48 // add x8, x26, #2 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101b11f // cmp w8, #108 - WORD $0x54ffab61 // b.ne LBB0_829 $-2708(%rip) + WORD $0x54ffab21 // b.ne LBB0_844 $-2716(%rip) WORD $0x91000f48 // add x8, x26, #3 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101b11f // cmp w8, #108 - WORD $0x54ffaac1 // b.ne LBB0_829 $-2728(%rip) - WORD $0x14000014 // b LBB0_926 $80(%rip) -LBB0_922: + WORD $0x54ffaa81 // b.ne LBB0_844 $-2736(%rip) + WORD $0x14000014 // b LBB0_942 $80(%rip) +LBB0_938: WORD $0xf900003a // str x26, [x1] WORD $0x394003c8 // ldrb w8, [lr] WORD $0x7101d11f // cmp w8, #116 - WORD $0x54ffaa21 // b.ne LBB0_829 $-2748(%rip) + WORD $0x54ffa9e1 // b.ne LBB0_844 $-2756(%rip) WORD $0x91000748 // add x8, x26, #1 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101c91f // cmp w8, #114 - WORD $0x54ffa981 // b.ne LBB0_829 $-2768(%rip) + WORD $0x54ffa941 // b.ne LBB0_844 $-2776(%rip) WORD $0x91000b48 // add x8, x26, #2 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101d51f // cmp w8, #117 - WORD $0x54ffa8e1 // b.ne LBB0_829 $-2788(%rip) + WORD $0x54ffa8a1 // b.ne LBB0_844 $-2796(%rip) WORD $0x91000f48 // add x8, x26, #3 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101951f // cmp w8, #101 - WORD $0x54ffa841 // b.ne LBB0_829 $-2808(%rip) -LBB0_926: + WORD $0x54ffa801 // b.ne LBB0_844 $-2816(%rip) +LBB0_942: WORD $0x91001348 // add x8, x26, #4 - WORD $0x17fffd3f // b LBB0_828 $-2820(%rip) -LBB0_927: + WORD $0x17fffd3d // b LBB0_843 $-2828(%rip) +LBB0_943: WORD $0x8b10014c // add x12, x10, x16 WORD $0xf100057f // cmp x11, #1 - WORD $0x5400050a // b.ge LBB0_942 $160(%rip) - WORD $0x17fffcc4 // b LBB0_797 $-3312(%rip) -LBB0_928: + WORD $0x5400050a // b.ge LBB0_958 $160(%rip) + WORD $0x17fffca5 // b LBB0_809 $-3436(%rip) +LBB0_944: WORD $0xaa1303fe // mov lr, x19 WORD $0x8b130368 // add x8, x27, x19 - WORD $0x17fffd38 // b LBB0_828 $-2848(%rip) -LBB0_929: + WORD $0x17fffd36 // b LBB0_843 $-2856(%rip) +LBB0_945: WORD $0xaa1b03e8 // mov x8, x27 -LBB0_930: +LBB0_946: WORD $0x9280001b // mov x27, #-1 - WORD $0x17ffffa5 // b LBB0_902 $-364(%rip) -LBB0_931: - WORD $0x91000ad6 // add x22, x22, #2 -LBB0_932: + WORD $0x17ffffa5 // b LBB0_918 $-364(%rip) +LBB0_947: + WORD $0x91000af7 // add x23, x23, #2 +LBB0_948: WORD $0x92800028 // mov x8, #-2 - WORD $0x14000006 // b LBB0_936 $24(%rip) -LBB0_933: - WORD $0x910006d6 // add x22, x22, #1 + WORD $0x14000006 // b LBB0_952 $24(%rip) +LBB0_949: + WORD $0x910006f7 // add x23, x23, #1 WORD $0x92800048 // mov x8, #-3 - WORD $0x14000003 // b LBB0_936 $12(%rip) -LBB0_934: - WORD $0x910006d6 // add x22, x22, #1 -LBB0_935: + WORD $0x14000003 // b LBB0_952 $12(%rip) +LBB0_950: + WORD $0x910006f7 // add x23, x23, #1 +LBB0_951: WORD $0x92800008 // mov x8, #-1 -LBB0_936: - WORD $0xcb1502c9 // sub x9, x22, x21 +LBB0_952: + WORD $0xcb1602e9 // sub x9, x23, x22 WORD $0xf9000029 // str x9, [x1] - WORD $0x17fffd2c // b LBB0_830 $-2896(%rip) -LBB0_937: + WORD $0x17fffd2a // b LBB0_845 $-2904(%rip) +LBB0_953: WORD $0xf9400408 // ldr x8, [x0, #8] -LBB0_938: +LBB0_954: WORD $0xf9000028 // str x8, [x1] WORD $0x92800008 // mov x8, #-1 - WORD $0x17fffd28 // b LBB0_830 $-2912(%rip) -LBB0_939: + WORD $0x17fffd26 // b LBB0_845 $-2920(%rip) +LBB0_955: WORD $0xd100056c // sub x12, x11, #1 WORD $0xeb08019f // cmp x12, x8 - WORD $0x54ff9580 // b.eq LBB0_797 $-3408(%rip) + WORD $0x54ff91a0 // b.eq LBB0_809 $-3532(%rip) WORD $0x8b09014c // add x12, x10, x9 WORD $0x8b08018c // add x12, x12, x8 WORD $0x9100098c // add x12, x12, #2 WORD $0xcb080168 // sub x8, x11, x8 WORD $0xd100090b // sub x11, x8, #2 WORD $0xf100057f // cmp x11, #1 - WORD $0x5400010a // b.ge LBB0_942 $32(%rip) - WORD $0x17fffca4 // b LBB0_797 $-3440(%rip) -LBB0_941: + WORD $0x5400010a // b.ge LBB0_958 $32(%rip) + WORD $0x17fffc85 // b LBB0_809 $-3564(%rip) +LBB0_957: WORD $0x9280002d // mov x13, #-2 WORD $0x52800048 // mov w8, #2 WORD $0x8b08018c // add x12, x12, x8 WORD $0x92800008 // mov x8, #-1 WORD $0xab0d016b // adds x11, x11, x13 - WORD $0x54ffa2ed // b.le LBB0_830 $-2980(%rip) -LBB0_942: + WORD $0x54ffa2ad // b.le LBB0_845 $-2988(%rip) +LBB0_958: WORD $0x39400188 // ldrb w8, [x12] WORD $0x7101711f // cmp w8, #92 - WORD $0x54ffff00 // b.eq LBB0_941 $-32(%rip) + WORD $0x54ffff00 // b.eq LBB0_957 $-32(%rip) WORD $0x7100891f // cmp w8, #34 - WORD $0x54000100 // b.eq LBB0_945 $32(%rip) + WORD $0x54000100 // b.eq LBB0_961 $32(%rip) WORD $0x9280000d // mov x13, #-1 WORD $0x52800028 // mov w8, #1 WORD $0x8b08018c // add x12, x12, x8 WORD $0x92800008 // mov x8, #-1 WORD $0xab0d016b // adds x11, x11, x13 - WORD $0x54fffecc // b.gt LBB0_942 $-40(%rip) - WORD $0x17fffd0b // b LBB0_830 $-3028(%rip) -LBB0_945: + WORD $0x54fffecc // b.gt LBB0_958 $-40(%rip) + WORD $0x17fffd09 // b LBB0_845 $-3036(%rip) +LBB0_961: WORD $0xcb0a0188 // sub x8, x12, x10 WORD $0x91000508 // add x8, x8, #1 - WORD $0x17fffcda // b LBB0_820 $-3224(%rip) -LBB0_946: - WORD $0x910022d6 // add x22, x22, #8 - WORD $0x17ffffd1 // b LBB0_932 $-188(%rip) -LBB0_947: + WORD $0x17ffff6f // b LBB0_915 $-580(%rip) +LBB0_962: + WORD $0x910022f7 // add x23, x23, #8 + WORD $0x17ffffd1 // b LBB0_948 $-188(%rip) +LBB0_963: WORD $0x92800068 // mov x8, #-4 - WORD $0xaa1a03f6 // mov x22, x26 - WORD $0x17ffffd5 // b LBB0_936 $-172(%rip) -LBB0_948: - WORD $0xaa1a03f6 // mov x22, x26 - WORD $0x17ffffd3 // b LBB0_936 $-180(%rip) -LBB0_949: - WORD $0x910022d6 // add x22, x22, #8 + WORD $0xaa1803f7 // mov x23, x24 + WORD $0x17ffffd5 // b LBB0_952 $-172(%rip) +LBB0_964: + WORD $0xaa1803f7 // mov x23, x24 + WORD $0x17ffffd3 // b LBB0_952 $-180(%rip) +LBB0_965: + WORD $0x910022f7 // add x23, x23, #8 WORD $0x92800068 // mov x8, #-4 - WORD $0x17ffffd0 // b LBB0_936 $-192(%rip) + WORD $0x17ffffd0 // b LBB0_952 $-192(%rip) // .p2align 2, 0x00 _MASK_USE_NUMBER: WORD $0x00000002 // .long 2 @@ -5406,7 +5661,7 @@ TEXT ·__get_by_path(SB), NOSPLIT, $0-40 _entry: MOVD 16(g), R16 - SUB $272, RSP, R17 + SUB $288, RSP, R17 CMP R16, R17 BLS _stack_grow diff --git a/vendor/github.com/bytedance/sonic/internal/native/neon/get_by_path_subr_arm64.go b/vendor/github.com/bytedance/sonic/internal/native/neon/get_by_path_subr_arm64.go index 2d01727..790ba88 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/neon/get_by_path_subr_arm64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/neon/get_by_path_subr_arm64.go @@ -13,7 +13,7 @@ var ( ) const ( - _stack__get_by_path = 208 + _stack__get_by_path = 224 ) var ( diff --git a/vendor/github.com/bytedance/sonic/internal/native/neon/skip_array_arm64.s b/vendor/github.com/bytedance/sonic/internal/native/neon/skip_array_arm64.s index 88756a0..af24710 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/neon/skip_array_arm64.s +++ b/vendor/github.com/bytedance/sonic/internal/native/neon/skip_array_arm64.s @@ -69,7 +69,7 @@ _skip_array: WORD $0xa90dfbfd // stp fp, lr, [sp, #216] WORD $0xa93ffbfd // stp fp, lr, [sp, #-8] WORD $0xd10023fd // sub fp, sp, #8 - WORD $0xaa0003fb // mov x27, x0 + WORD $0xaa0003fe // mov lr, x0 Lloh0: WORD $0x10fffd28 // adr x8, lCPI0_0 $-92(%rip) Lloh1: @@ -83,7 +83,7 @@ Lloh1: WORD $0x5280002c // mov w12, #1 WORD $0xd284c00d // mov x13, #9728 WORD $0xf2c0002d // movk x13, #1, lsl #32 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x4f01e440 // movi.16b v0, #34 WORD $0x4f02e781 // movi.16b v1, #92 Lloh2: @@ -112,12 +112,12 @@ Lloh5: WORD $0x6f00e417 // movi.2d v23, #0000000000000000 WORD $0x4f03e778 // movi.16b v24, #123 WORD $0x4f03e7b9 // movi.16b v25, #125 - WORD $0x52800036 // mov w22, #1 + WORD $0x52800037 // mov w23, #1 LBB0_1: - WORD $0xa9403b7e // ldp lr, x14, [x27] + WORD $0xa9403bd4 // ldp x20, x14, [lr] WORD $0xeb0e027f // cmp x19, x14 WORD $0x54000162 // b.hs LBB0_6 $44(%rip) - WORD $0x38736bc8 // ldrb w8, [lr, x19] + WORD $0x38736a88 // ldrb w8, [x20, x19] WORD $0x7100351f // cmp w8, #13 WORD $0x54000100 // b.eq LBB0_6 $32(%rip) WORD $0x7100811f // cmp w8, #32 @@ -131,7 +131,7 @@ LBB0_6: WORD $0x91000668 // add x8, x19, #1 WORD $0xeb0e011f // cmp x8, x14 WORD $0x54000122 // b.hs LBB0_10 $36(%rip) - WORD $0x38686bc0 // ldrb w0, [lr, x8] + WORD $0x38686a80 // ldrb w0, [x20, x8] WORD $0x7100341f // cmp w0, #13 WORD $0x540000c0 // b.eq LBB0_10 $24(%rip) WORD $0x7100801f // cmp w0, #32 @@ -143,7 +143,7 @@ LBB0_10: WORD $0x91000a68 // add x8, x19, #2 WORD $0xeb0e011f // cmp x8, x14 WORD $0x54000122 // b.hs LBB0_14 $36(%rip) - WORD $0x38686bc0 // ldrb w0, [lr, x8] + WORD $0x38686a80 // ldrb w0, [x20, x8] WORD $0x7100341f // cmp w0, #13 WORD $0x540000c0 // b.eq LBB0_14 $24(%rip) WORD $0x7100801f // cmp w0, #32 @@ -155,7 +155,7 @@ LBB0_14: WORD $0x91000e68 // add x8, x19, #3 WORD $0xeb0e011f // cmp x8, x14 WORD $0x54000122 // b.hs LBB0_18 $36(%rip) - WORD $0x38686bc0 // ldrb w0, [lr, x8] + WORD $0x38686a80 // ldrb w0, [x20, x8] WORD $0x7100341f // cmp w0, #13 WORD $0x540000c0 // b.eq LBB0_18 $24(%rip) WORD $0x7100801f // cmp w0, #32 @@ -166,9 +166,9 @@ LBB0_14: LBB0_18: WORD $0x91001268 // add x8, x19, #4 WORD $0xeb0e011f // cmp x8, x14 - WORD $0x540171c2 // b.hs LBB0_576 $11832(%rip) + WORD $0x540178a2 // b.hs LBB0_589 $12052(%rip) LBB0_19: - WORD $0x38686bcf // ldrb w15, [lr, x8] + WORD $0x38686a8f // ldrb w15, [x20, x8] WORD $0x710081ff // cmp w15, #32 WORD $0x9acf218f // lsl x15, x12, x15 WORD $0x8a0d01ef // and x15, x15, x13 @@ -177,17 +177,17 @@ LBB0_19: WORD $0x91000508 // add x8, x8, #1 WORD $0xeb0801df // cmp x14, x8 WORD $0x54ffff01 // b.ne LBB0_19 $-32(%rip) - WORD $0x14000b85 // b LBB0_577 $11796(%rip) + WORD $0x14000bbc // b LBB0_590 $12016(%rip) LBB0_21: WORD $0xeb0e011f // cmp x8, x14 - WORD $0x54017062 // b.hs LBB0_577 $11788(%rip) + WORD $0x54017742 // b.hs LBB0_590 $12008(%rip) LBB0_22: WORD $0x91000513 // add x19, x8, #1 WORD $0xf9000033 // str x19, [x1] - WORD $0x8b0803c6 // add x6, lr, x8 + WORD $0x8b080286 // add x6, x20, x8 WORD $0x394000c5 // ldrb w5, [x6] - WORD $0x34016fc5 // cbz w5, LBB0_577 $11768(%rip) - WORD $0xd10006ce // sub x14, x22, #1 + WORD $0x340176a5 // cbz w5, LBB0_590 $11988(%rip) + WORD $0xd10006ee // sub x14, x23, #1 WORD $0xf86e7920 // ldr x0, [x9, x14, lsl #3] WORD $0xb100057f // cmn x11, #1 WORD $0x9a8b010b // csel x11, x8, x11, eq @@ -200,20 +200,20 @@ LBB0_22: WORD $0x71000c1f // cmp w0, #3 WORD $0x54001a01 // b.ne LBB0_60 $832(%rip) WORD $0x710088bf // cmp w5, #34 - WORD $0x540160c1 // b.ne LBB0_542 $11288(%rip) + WORD $0x540167a1 // b.ne LBB0_555 $11508(%rip) WORD $0x5280008f // mov w15, #4 WORD $0xf82e792f // str x15, [x9, x14, lsl #3] WORD $0x37303203 // tbnz w3, #6, LBB0_114 $1600(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] - WORD $0xeb1301d6 // subs x22, x14, x19 - WORD $0x372845c3 // tbnz w3, #5, LBB0_142 $2232(%rip) - WORD $0x540160a0 // b.eq LBB0_545 $11284(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x5400f963 // b.lo LBB0_366 $7980(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] + WORD $0xeb1301d7 // subs x23, x14, x19 + WORD $0x372848c3 // tbnz w3, #5, LBB0_147 $2328(%rip) + WORD $0x54016780 // b.eq LBB0_558 $11504(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x5400ff63 // b.lo LBB0_376 $8172(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 LBB0_33: - WORD $0x8b1303ce // add x14, lr, x19 + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad406dda // ldp q26, q27, [x14] WORD $0xad4175dc // ldp q28, q29, [x14, #32] WORD $0x6e208f5e // cmeq.16b v30, v26, v0 @@ -239,42 +239,42 @@ LBB0_33: WORD $0x4e221d3e // and.16b v30, v9, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d4 // fmov w20, s30 + WORD $0x1e2603d5 // fmov w21, s30 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 + WORD $0x1e260356 // fmov w22, s26 WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260357 // fmov w23, s26 + WORD $0x1e260358 // fmov w24, s26 WORD $0x4e221f9a // and.16b v26, v28, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260358 // fmov w24, s26 + WORD $0x1e260359 // fmov w25, s26 WORD $0x4e221fba // and.16b v26, v29, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260359 // fmov w25, s26 + WORD $0x1e26035a // fmov w26, s26 WORD $0xd3607ca5 // lsl x5, x5, #32 - WORD $0xaa14c0a5 // orr x5, x5, x20, lsl #48 + WORD $0xaa15c0a5 // orr x5, x5, x21, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f00af // orr x15, x5, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607f0f // lsl x15, x24, #32 - WORD $0xaa19c1ef // orr x15, x15, x25, lsl #48 - WORD $0x53103ee5 // lsl w5, w23, #16 + WORD $0xd3607f2f // lsl x15, x25, #32 + WORD $0xaa1ac1ef // orr x15, x15, x26, lsl #48 + WORD $0x53103f05 // lsl w5, w24, #16 WORD $0xaa0501ef // orr x15, x15, x5 - WORD $0xaa1501e5 // orr x5, x15, x21 + WORD $0xaa1601e5 // orr x5, x15, x22 WORD $0xb5000105 // cbnz x5, LBB0_37 $32(%rip) WORD $0xb5000186 // cbnz x6, LBB0_38 $48(%rip) WORD $0xb50002ce // cbnz x14, LBB0_39 $88(%rip) LBB0_36: - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 + WORD $0xf100feff // cmp x23, #63 WORD $0x54fff8a8 // b.hi LBB0_33 $-236(%rip) - WORD $0x14000774 // b LBB0_360 $7632(%rip) + WORD $0x140007a4 // b LBB0_370 $7824(%rip) LBB0_37: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 @@ -283,14 +283,14 @@ LBB0_37: WORD $0x9a8f1000 // csel x0, x0, x15, ne LBB0_38: WORD $0x8a2600af // bic x15, x5, x6 - WORD $0xaa0f04d4 // orr x20, x6, x15, lsl #1 - WORD $0x8a3400a5 // bic x5, x5, x20 + WORD $0xaa0f04d5 // orr x21, x6, x15, lsl #1 + WORD $0x8a3500a5 // bic x5, x5, x21 WORD $0x9201f0a5 // and x5, x5, #0xaaaaaaaaaaaaaaaa WORD $0xab0f00af // adds x15, x5, x15 WORD $0x1a9f37e6 // cset w6, hs WORD $0xd37ff9ef // lsl x15, x15, #1 WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 - WORD $0x8a1401ef // and x15, x15, x20 + WORD $0x8a1501ef // and x15, x15, x21 WORD $0x8a2f01ce // bic x14, x14, x15 WORD $0xb4fffd8e // cbz x14, LBB0_36 $-80(%rip) LBB0_39: @@ -298,8 +298,8 @@ LBB0_39: WORD $0xdac011ce // clz x14, x14 WORD $0x8b1301ce // add x14, x14, x19 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6f8baf3 // tbz x19, #63, LBB0_283 $5980(%rip) - WORD $0x14000aac // b LBB0_544 $10928(%rip) + WORD $0xb6f93153 // tbz x19, #63, LBB0_478 $9768(%rip) + WORD $0x14000ae3 // b LBB0_557 $11148(%rip) LBB0_40: WORD $0x7100101f // cmp w0, #4 WORD $0x54000d40 // b.eq LBB0_58 $424(%rip) @@ -311,17 +311,17 @@ LBB0_40: WORD $0x54002061 // b.ne LBB0_99 $1036(%rip) WORD $0x5280004f // mov w15, #2 WORD $0xf82e792f // str x15, [x9, x14, lsl #3] - WORD $0x373031a3 // tbnz w3, #6, LBB0_133 $1588(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] - WORD $0xeb1301d6 // subs x22, x14, x19 - WORD $0x372851c3 // tbnz w3, #5, LBB0_182 $2616(%rip) - WORD $0x540153e0 // b.eq LBB0_545 $10876(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x5400fd43 // b.lo LBB0_395 $8104(%rip) + WORD $0x373034a3 // tbnz w3, #6, LBB0_138 $1684(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] + WORD $0xeb1301d7 // subs x23, x14, x19 + WORD $0x372854c3 // tbnz w3, #5, LBB0_187 $2712(%rip) + WORD $0x54015ac0 // b.eq LBB0_558 $11096(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x54010343 // b.lo LBB0_405 $8296(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 LBB0_49: - WORD $0x8b1303ce // add x14, lr, x19 + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad406dda // ldp q26, q27, [x14] WORD $0xad4175dc // ldp q28, q29, [x14, #32] WORD $0x6e208f5e // cmeq.16b v30, v26, v0 @@ -347,42 +347,42 @@ LBB0_49: WORD $0x4e221d3e // and.16b v30, v9, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d4 // fmov w20, s30 + WORD $0x1e2603d5 // fmov w21, s30 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 + WORD $0x1e260356 // fmov w22, s26 WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260357 // fmov w23, s26 + WORD $0x1e260358 // fmov w24, s26 WORD $0x4e221f9a // and.16b v26, v28, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260358 // fmov w24, s26 + WORD $0x1e260359 // fmov w25, s26 WORD $0x4e221fba // and.16b v26, v29, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260359 // fmov w25, s26 + WORD $0x1e26035a // fmov w26, s26 WORD $0xd3607ca5 // lsl x5, x5, #32 - WORD $0xaa14c0a5 // orr x5, x5, x20, lsl #48 + WORD $0xaa15c0a5 // orr x5, x5, x21, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f00af // orr x15, x5, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607f0f // lsl x15, x24, #32 - WORD $0xaa19c1ef // orr x15, x15, x25, lsl #48 - WORD $0x53103ee5 // lsl w5, w23, #16 + WORD $0xd3607f2f // lsl x15, x25, #32 + WORD $0xaa1ac1ef // orr x15, x15, x26, lsl #48 + WORD $0x53103f05 // lsl w5, w24, #16 WORD $0xaa0501ef // orr x15, x15, x5 - WORD $0xaa1501e5 // orr x5, x15, x21 + WORD $0xaa1601e5 // orr x5, x15, x22 WORD $0xb5000105 // cbnz x5, LBB0_53 $32(%rip) WORD $0xb5000186 // cbnz x6, LBB0_54 $48(%rip) WORD $0xb50002ce // cbnz x14, LBB0_55 $88(%rip) LBB0_52: - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 + WORD $0xf100feff // cmp x23, #63 WORD $0x54fff8a8 // b.hi LBB0_49 $-236(%rip) - WORD $0x140007a3 // b LBB0_392 $7820(%rip) + WORD $0x140007d3 // b LBB0_402 $8012(%rip) LBB0_53: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 @@ -391,14 +391,14 @@ LBB0_53: WORD $0x9a8f1000 // csel x0, x0, x15, ne LBB0_54: WORD $0x8a2600af // bic x15, x5, x6 - WORD $0xaa0f04d4 // orr x20, x6, x15, lsl #1 - WORD $0x8a3400a5 // bic x5, x5, x20 + WORD $0xaa0f04d5 // orr x21, x6, x15, lsl #1 + WORD $0x8a3500a5 // bic x5, x5, x21 WORD $0x9201f0a5 // and x5, x5, #0xaaaaaaaaaaaaaaaa WORD $0xab0f00af // adds x15, x5, x15 WORD $0x1a9f37e6 // cset w6, hs WORD $0xd37ff9ef // lsl x15, x15, #1 WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 - WORD $0x8a1401ef // and x15, x15, x20 + WORD $0x8a1501ef // and x15, x15, x21 WORD $0x8a2f01ce // bic x14, x14, x15 WORD $0xb4fffd8e // cbz x14, LBB0_52 $-80(%rip) LBB0_55: @@ -406,19 +406,19 @@ LBB0_55: WORD $0xdac011ce // clz x14, x14 WORD $0x8b1301ce // add x14, x14, x19 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6f85593 // tbz x19, #63, LBB0_194 $2736(%rip) - WORD $0x14000a46 // b LBB0_544 $10520(%rip) + WORD $0xb6f85893 // tbz x19, #63, LBB0_199 $2832(%rip) + WORD $0x14000a7d // b LBB0_557 $10740(%rip) LBB0_56: WORD $0x7100b0bf // cmp w5, #44 WORD $0x54001820 // b.eq LBB0_110 $772(%rip) WORD $0x710174bf // cmp w5, #93 WORD $0x540014c0 // b.eq LBB0_101 $664(%rip) - WORD $0x14000a3d // b LBB0_542 $10484(%rip) + WORD $0x14000a74 // b LBB0_555 $10704(%rip) LBB0_58: WORD $0x7100e8bf // cmp w5, #58 - WORD $0x54014761 // b.ne LBB0_542 $10476(%rip) + WORD $0x54014e41 // b.ne LBB0_555 $10696(%rip) WORD $0xf82e793f // str xzr, [x9, x14, lsl #3] - WORD $0x1400056b // b LBB0_284 $5548(%rip) + WORD $0x1400091e // b LBB0_480 $9336(%rip) LBB0_60: WORD $0xf900004e // str x14, [x2] WORD $0x92800020 // mov x0, #-2 @@ -427,36 +427,36 @@ LBB0_60: LBB0_61: WORD $0x5100c0ae // sub w14, w5, #48 WORD $0x710029df // cmp w14, #10 - WORD $0x54003c02 // b.hs LBB0_155 $1920(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0x54003f02 // b.hs LBB0_160 $2016(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0x37301f43 // tbnz w3, #6, LBB0_121 $1000(%rip) WORD $0xeb0801ce // subs x14, x14, x8 - WORD $0x540146e0 // b.eq LBB0_546 $10460(%rip) + WORD $0x54014dc0 // b.eq LBB0_559 $10680(%rip) WORD $0x394000cf // ldrb w15, [x6] WORD $0x7100c1ff // cmp w15, #48 WORD $0x540001a1 // b.ne LBB0_68 $52(%rip) WORD $0xf10005df // cmp x14, #1 - WORD $0x5400aae0 // b.eq LBB0_283 $5468(%rip) - WORD $0x38736bcf // ldrb w15, [lr, x19] + WORD $0x54012140 // b.eq LBB0_478 $9256(%rip) + WORD $0x38736a8f // ldrb w15, [x20, x19] WORD $0x5100b9e0 // sub w0, w15, #46 WORD $0x7100dc1f // cmp w0, #55 - WORD $0x5400aa68 // b.hi LBB0_283 $5452(%rip) + WORD $0x540120c8 // b.hi LBB0_478 $9240(%rip) WORD $0x9ac0218f // lsl x15, x12, x0 WORD $0xb20903f1 // mov x17, #36028797027352576 WORD $0xf2800031 // movk x17, #1 WORD $0xea1101ff // tst x15, x17 WORD $0x12800011 // mov w17, #-1 - WORD $0x5400a9a0 // b.eq LBB0_283 $5428(%rip) + WORD $0x54012000 // b.eq LBB0_478 $9216(%rip) LBB0_68: WORD $0xf10041df // cmp x14, #16 - WORD $0x54011363 // b.lo LBB0_458 $8812(%rip) + WORD $0x54011963 // b.lo LBB0_468 $9004(%rip) WORD $0xd2800005 // mov x5, #0 - WORD $0xd280001a // mov x26, #0 - WORD $0x92800016 // mov x22, #-1 + WORD $0xd280001b // mov x27, #0 + WORD $0x92800017 // mov x23, #-1 WORD $0x92800013 // mov x19, #-1 WORD $0x92800000 // mov x0, #-1 LBB0_70: - WORD $0x3cfa68da // ldr q26, [x6, x26] + WORD $0x3cfb68da // ldr q26, [x6, x27] WORD $0x6e258f5b // cmeq.16b v27, v26, v5 WORD $0x6e268f5c // cmeq.16b v28, v26, v6 WORD $0x6e278f5d // cmeq.16b v29, v26, v7 @@ -475,133 +475,133 @@ LBB0_70: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x4e221f9a // and.16b v26, v28, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260357 // fmov w23, s26 + WORD $0x1e260358 // fmov w24, s26 WORD $0x4e221fba // and.16b v26, v29, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 - WORD $0x2a3503f5 // mvn w21, w21 - WORD $0x32103eb5 // orr w21, w21, #0xffff0000 - WORD $0x5ac002b5 // rbit w21, w21 - WORD $0x5ac012b5 // clz w21, w21 - WORD $0x1ad52238 // lsl w24, w17, w21 - WORD $0x0a3801f9 // bic w25, w15, w24 - WORD $0x0a380291 // bic w17, w20, w24 - WORD $0x0a3802e7 // bic w7, w23, w24 - WORD $0x710042bf // cmp w21, #16 - WORD $0x1a9901f8 // csel w24, w15, w25, eq - WORD $0x1a910294 // csel w20, w20, w17, eq - WORD $0x1a8702f9 // csel w25, w23, w7, eq - WORD $0x5100070f // sub w15, w24, #1 - WORD $0x6a1801ef // ands w15, w15, w24 - WORD $0x5400d5e1 // b.ne LBB0_364 $6844(%rip) - WORD $0x5100068f // sub w15, w20, #1 - WORD $0x6a1401ef // ands w15, w15, w20 - WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x12800011 // mov w17, #-1 - WORD $0x5400d281 // b.ne LBB0_358 $6736(%rip) + WORD $0x1e260356 // fmov w22, s26 + WORD $0x2a3603f6 // mvn w22, w22 + WORD $0x32103ed6 // orr w22, w22, #0xffff0000 + WORD $0x5ac002d6 // rbit w22, w22 + WORD $0x5ac012d6 // clz w22, w22 + WORD $0x1ad62239 // lsl w25, w17, w22 + WORD $0x0a3901fa // bic w26, w15, w25 + WORD $0x0a3902b1 // bic w17, w21, w25 + WORD $0x0a390307 // bic w7, w24, w25 + WORD $0x710042df // cmp w22, #16 + WORD $0x1a9a01f9 // csel w25, w15, w26, eq + WORD $0x1a9102b5 // csel w21, w21, w17, eq + WORD $0x1a87031a // csel w26, w24, w7, eq WORD $0x5100072f // sub w15, w25, #1 WORD $0x6a1901ef // ands w15, w15, w25 - WORD $0x5400d221 // b.ne LBB0_358 $6724(%rip) - WORD $0x340000d8 // cbz w24, LBB0_76 $24(%rip) - WORD $0x5ac0030f // rbit w15, w24 - WORD $0x5ac011f7 // clz w23, w15 + WORD $0x5400dbe1 // b.ne LBB0_374 $7036(%rip) + WORD $0x510006af // sub w15, w21, #1 + WORD $0x6a1501ef // ands w15, w15, w21 + WORD $0x92f00007 // mov x7, #9223372036854775807 + WORD $0x12800011 // mov w17, #-1 + WORD $0x5400d881 // b.ne LBB0_368 $6928(%rip) + WORD $0x5100074f // sub w15, w26, #1 + WORD $0x6a1a01ef // ands w15, w15, w26 + WORD $0x5400d821 // b.ne LBB0_368 $6916(%rip) + WORD $0x340000d9 // cbz w25, LBB0_76 $24(%rip) + WORD $0x5ac0032f // rbit w15, w25 + WORD $0x5ac011f8 // clz w24, w15 WORD $0xb100041f // cmn x0, #1 - WORD $0x5400e5e1 // b.ne LBB0_394 $7356(%rip) - WORD $0x8b170340 // add x0, x26, x23 + WORD $0x5400ebe1 // b.ne LBB0_404 $7548(%rip) + WORD $0x8b180360 // add x0, x27, x24 LBB0_76: - WORD $0x340000d4 // cbz w20, LBB0_79 $24(%rip) - WORD $0x5ac0028f // rbit w15, w20 - WORD $0x5ac011f4 // clz w20, w15 + WORD $0x340000d5 // cbz w21, LBB0_79 $24(%rip) + WORD $0x5ac002af // rbit w15, w21 + WORD $0x5ac011f5 // clz w21, w15 WORD $0xb100067f // cmn x19, #1 - WORD $0x5400d281 // b.ne LBB0_362 $6736(%rip) - WORD $0x8b140353 // add x19, x26, x20 + WORD $0x5400d881 // b.ne LBB0_372 $6928(%rip) + WORD $0x8b150373 // add x19, x27, x21 LBB0_79: - WORD $0x340000d9 // cbz w25, LBB0_82 $24(%rip) - WORD $0x5ac0032f // rbit w15, w25 - WORD $0x5ac011f4 // clz w20, w15 - WORD $0xb10006df // cmn x22, #1 - WORD $0x5400d1c1 // b.ne LBB0_362 $6712(%rip) - WORD $0x8b140356 // add x22, x26, x20 + WORD $0x340000da // cbz w26, LBB0_82 $24(%rip) + WORD $0x5ac0034f // rbit w15, w26 + WORD $0x5ac011f5 // clz w21, w15 + WORD $0xb10006ff // cmn x23, #1 + WORD $0x5400d7c1 // b.ne LBB0_372 $6904(%rip) + WORD $0x8b150377 // add x23, x27, x21 LBB0_82: - WORD $0x710042bf // cmp w21, #16 - WORD $0x540033c1 // b.ne LBB0_167 $1656(%rip) - WORD $0x9100435a // add x26, x26, #16 + WORD $0x710042df // cmp w22, #16 + WORD $0x540036c1 // b.ne LBB0_172 $1752(%rip) + WORD $0x9100437b // add x27, x27, #16 WORD $0xd10040a5 // sub x5, x5, #16 - WORD $0x8b0501d5 // add x21, x14, x5 - WORD $0xf1003ebf // cmp x21, #15 + WORD $0x8b0501d6 // add x22, x14, x5 + WORD $0xf1003edf // cmp x22, #15 WORD $0x54fff6a8 // b.hi LBB0_70 $-300(%rip) - WORD $0x8b1a00c5 // add x5, x6, x26 - WORD $0xeb1a01df // cmp x14, x26 - WORD $0x54003300 // b.eq LBB0_168 $1632(%rip) + WORD $0x8b1b00c5 // add x5, x6, x27 + WORD $0xeb1b01df // cmp x14, x27 + WORD $0x54003600 // b.eq LBB0_173 $1728(%rip) LBB0_85: - WORD $0x8b1500b9 // add x25, x5, x21 + WORD $0x8b1600ba // add x26, x5, x22 WORD $0xaa2503ee // mvn x14, x5 - WORD $0x8b1e010f // add x15, x8, lr + WORD $0x8b14010f // add x15, x8, x20 WORD $0x8b0f01ce // add x14, x14, x15 - WORD $0xcb0600ba // sub x26, x5, x6 - WORD $0xaa0503fe // mov lr, x5 + WORD $0xcb0600b4 // sub x20, x5, x6 + WORD $0xaa0503fb // mov x27, x5 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x14000009 // b LBB0_88 $36(%rip) LBB0_86: WORD $0xb100067f // cmn x19, #1 - WORD $0xaa1a03f3 // mov x19, x26 + WORD $0xaa1403f3 // mov x19, x20 WORD $0x540003a1 // b.ne LBB0_97 $116(%rip) LBB0_87: WORD $0xd10005ce // sub x14, x14, #1 - WORD $0x9100075a // add x26, x26, #1 - WORD $0xaa1e03e5 // mov x5, lr - WORD $0xd10006b5 // sub x21, x21, #1 - WORD $0xb400a5d5 // cbz x21, LBB0_294 $5304(%rip) + WORD $0x91000694 // add x20, x20, #1 + WORD $0xaa1b03e5 // mov x5, x27 + WORD $0xd10006d6 // sub x22, x22, #1 + WORD $0xb400abd6 // cbz x22, LBB0_304 $5496(%rip) LBB0_88: - WORD $0x384017d4 // ldrb w20, [lr], #1 - WORD $0x5100c28f // sub w15, w20, #48 + WORD $0x38401775 // ldrb w21, [x27], #1 + WORD $0x5100c2af // sub w15, w21, #48 WORD $0x710029ff // cmp w15, #10 WORD $0x54ffff03 // b.lo LBB0_87 $-32(%rip) - WORD $0x7100b69f // cmp w20, #45 + WORD $0x7100b6bf // cmp w21, #45 WORD $0x5400016d // b.le LBB0_94 $44(%rip) - WORD $0x7101969f // cmp w20, #101 + WORD $0x710196bf // cmp w21, #101 WORD $0x54fffe20 // b.eq LBB0_86 $-60(%rip) - WORD $0x7101169f // cmp w20, #69 + WORD $0x710116bf // cmp w21, #69 WORD $0x54fffde0 // b.eq LBB0_86 $-68(%rip) - WORD $0x7100ba9f // cmp w20, #46 - WORD $0x54002f81 // b.ne LBB0_168 $1520(%rip) + WORD $0x7100babf // cmp w21, #46 + WORD $0x54003281 // b.ne LBB0_173 $1616(%rip) WORD $0xb100041f // cmn x0, #1 - WORD $0xaa1a03e0 // mov x0, x26 + WORD $0xaa1403e0 // mov x0, x20 WORD $0x54fffda0 // b.eq LBB0_87 $-76(%rip) WORD $0x14000008 // b LBB0_97 $32(%rip) LBB0_94: - WORD $0x7100ae9f // cmp w20, #43 + WORD $0x7100aebf // cmp w21, #43 WORD $0x54000060 // b.eq LBB0_96 $12(%rip) - WORD $0x7100b69f // cmp w20, #45 - WORD $0x54002e81 // b.ne LBB0_168 $1488(%rip) + WORD $0x7100b6bf // cmp w21, #45 + WORD $0x54003181 // b.ne LBB0_173 $1584(%rip) LBB0_96: - WORD $0xb10006df // cmn x22, #1 - WORD $0xaa1a03f6 // mov x22, x26 + WORD $0xb10006ff // cmn x23, #1 + WORD $0xaa1403f7 // mov x23, x20 WORD $0x54fffca0 // b.eq LBB0_87 $-108(%rip) LBB0_97: - WORD $0x5280007a // mov w26, #3 - WORD $0x14000191 // b LBB0_180 $1604(%rip) + WORD $0x5280007b // mov w27, #3 + WORD $0x140001a9 // b LBB0_185 $1700(%rip) LBB0_98: WORD $0x7100b0bf // cmp w5, #44 WORD $0x540004a0 // b.eq LBB0_112 $148(%rip) LBB0_99: WORD $0x7101f4bf // cmp w5, #125 WORD $0x54000080 // b.eq LBB0_101 $16(%rip) - WORD $0x1400099b // b LBB0_542 $9836(%rip) + WORD $0x140009d2 // b LBB0_555 $10056(%rip) LBB0_100: WORD $0x710174bf // cmp w5, #93 WORD $0x540000c1 // b.ne LBB0_102 $24(%rip) LBB0_101: WORD $0xf900004e // str x14, [x2] - WORD $0xaa0e03f6 // mov x22, x14 + WORD $0xaa0e03f7 // mov x23, x14 WORD $0xaa0b03e0 // mov x0, x11 WORD $0xb5ffc80e // cbnz x14, LBB0_1 $-1792(%rip) - WORD $0x140009ff // b LBB0_578 $10236(%rip) + WORD $0x14000a36 // b LBB0_591 $10456(%rip) LBB0_102: WORD $0xf82e792c // str x12, [x9, x14, lsl #3] WORD $0x92800020 // mov x0, #-2 @@ -609,40 +609,40 @@ LBB0_102: WORD $0x54ffeb8d // b.le LBB0_61 $-656(%rip) LBB0_103: WORD $0x7101b4bf // cmp w5, #109 - WORD $0x5400298d // b.le LBB0_162 $1328(%rip) + WORD $0x54002c8d // b.le LBB0_167 $1424(%rip) WORD $0x7101b8bf // cmp w5, #110 - WORD $0x540041a0 // b.eq LBB0_200 $2100(%rip) + WORD $0x540044a0 // b.eq LBB0_205 $2196(%rip) WORD $0x7101d0bf // cmp w5, #116 - WORD $0x54004000 // b.eq LBB0_198 $2048(%rip) + WORD $0x54004300 // b.eq LBB0_203 $2144(%rip) WORD $0x7101ecbf // cmp w5, #123 - WORD $0x54013e61 // b.ne LBB0_578 $10188(%rip) - WORD $0x37304f43 // tbnz w3, #6, LBB0_218 $2536(%rip) + WORD $0x54014541 // b.ne LBB0_591 $10408(%rip) + WORD $0x37305243 // tbnz w3, #6, LBB0_223 $2632(%rip) WORD $0xf9400048 // ldr x8, [x2] WORD $0xf13ffd1f // cmp x8, #4095 - WORD $0x540130cc // b.gt LBB0_543 $9752(%rip) + WORD $0x540137ac // b.gt LBB0_556 $9972(%rip) WORD $0x9100050e // add x14, x8, #1 WORD $0xf900004e // str x14, [x2] WORD $0x528000ce // mov w14, #6 - WORD $0x140001f4 // b LBB0_197 $2000(%rip) + WORD $0x1400020c // b LBB0_202 $2096(%rip) LBB0_110: - WORD $0xf13ffedf // cmp x22, #4095 - WORD $0x5401300c // b.gt LBB0_543 $9728(%rip) - WORD $0x910006c8 // add x8, x22, #1 + WORD $0xf13ffeff // cmp x23, #4095 + WORD $0x540136ec // b.gt LBB0_556 $9948(%rip) + WORD $0x910006e8 // add x8, x23, #1 WORD $0xf9000048 // str x8, [x2] - WORD $0xf836793f // str xzr, [x9, x22, lsl #3] - WORD $0x140004ac // b LBB0_284 $4784(%rip) + WORD $0xf837793f // str xzr, [x9, x23, lsl #3] + WORD $0x1400085f // b LBB0_480 $8572(%rip) LBB0_112: - WORD $0xf13ffedf // cmp x22, #4095 - WORD $0x54012f4c // b.gt LBB0_543 $9704(%rip) - WORD $0x910006c8 // add x8, x22, #1 + WORD $0xf13ffeff // cmp x23, #4095 + WORD $0x5401362c // b.gt LBB0_556 $9924(%rip) + WORD $0x910006e8 // add x8, x23, #1 WORD $0xf9000048 // str x8, [x2] - WORD $0xf836793a // str x26, [x9, x22, lsl #3] - WORD $0x140004a6 // b LBB0_284 $4760(%rip) + WORD $0xf837793b // str x27, [x9, x23, lsl #3] + WORD $0x14000859 // b LBB0_480 $8548(%rip) LBB0_114: - WORD $0xf9400760 // ldr x0, [x27, #8] + WORD $0xf94007c0 // ldr x0, [lr, #8] WORD $0xcb13000e // sub x14, x0, x19 WORD $0xf10081df // cmp x14, #32 - WORD $0x5400c44b // b.lt LBB0_359 $6280(%rip) + WORD $0x5400ca4b // b.lt LBB0_369 $6472(%rip) WORD $0xd280000e // mov x14, #0 WORD $0xd2800005 // mov x5, #0 WORD $0xcb080000 // sub x0, x0, x8 @@ -650,13 +650,13 @@ LBB0_114: WORD $0x14000008 // b LBB0_118 $32(%rip) LBB0_116: WORD $0xd2800005 // mov x5, #0 - WORD $0xb50005b5 // cbnz x21, LBB0_120 $180(%rip) + WORD $0xb50005b6 // cbnz x22, LBB0_120 $180(%rip) LBB0_117: WORD $0x910081ce // add x14, x14, #32 WORD $0xd1008273 // sub x19, x19, #32 WORD $0x8b13000f // add x15, x0, x19 WORD $0xf100fdff // cmp x15, #63 - WORD $0x5400c10d // b.le LBB0_356 $6176(%rip) + WORD $0x5400c70d // b.le LBB0_366 $6368(%rip) LBB0_118: WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x3cc011fa // ldur q26, [x15, #1] @@ -665,51 +665,52 @@ LBB0_118: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260395 // fmov w21, s28 + WORD $0x1e260396 // fmov w22, s28 WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 WORD $0x1e26038f // fmov w15, s28 - WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x33103df6 // bfi w22, w15, #16, #16 WORD $0x6e218f5a // cmeq.16b v26, v26, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x6e218f7a // cmeq.16b v26, v27, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df4 // bfi w20, w15, #16, #16 - WORD $0x7100029f // cmp w20, #0 + WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x710002bf // cmp w21, #0 WORD $0xfa4008a0 // ccmp x5, #0, #0, eq WORD $0x54fffbc0 // b.eq LBB0_116 $-136(%rip) - WORD $0x0a25028f // bic w15, w20, w5 - WORD $0x2a0f04b6 // orr w22, w5, w15, lsl #1 - WORD $0x0a040285 // and w5, w20, w4 - WORD $0x0a3600a5 // bic w5, w5, w22 + WORD $0x0a2502af // bic w15, w21, w5 + WORD $0x2a0f04b7 // orr w23, w5, w15, lsl #1 + WORD $0x0a0402a5 // and w5, w21, w4 + WORD $0x0a3700a5 // bic w5, w5, w23 WORD $0x2b0f00af // adds w15, w5, w15 WORD $0x1a9f37e5 // cset w5, hs WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 - WORD $0x0a1601ef // and w15, w15, w22 + WORD $0x0a1701ef // and w15, w15, w23 WORD $0x2a2f03ef // mvn w15, w15 - WORD $0x8a1501f5 // and x21, x15, x21 - WORD $0xb4fffab5 // cbz x21, LBB0_117 $-172(%rip) + WORD $0x8a1601f6 // and x22, x15, x22 + WORD $0xb4fffab6 // cbz x22, LBB0_117 $-172(%rip) LBB0_120: - WORD $0xdac002af // rbit x15, x21 + WORD $0xdac002cf // rbit x15, x22 WORD $0xdac011ef // clz x15, x15 WORD $0x8b0e010e // add x14, x8, x14 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910009d3 // add x19, x14, #2 - WORD $0x14000465 // b LBB0_283 $4500(%rip) + WORD $0x14000818 // b LBB0_478 $8288(%rip) LBB0_121: WORD $0xcb1301ce // sub x14, x14, x19 WORD $0xf10041df // cmp x14, #16 - WORD $0x540001e3 // b.lo LBB0_124 $60(%rip) -LBB0_122: - WORD $0x3cf36bda // ldr q26, [lr, x19] + WORD $0x54000223 // b.lo LBB0_125 $68(%rip) + WORD $0xd2800000 // mov x0, #0 +LBB0_123: + WORD $0x3cf36a9a // ldr q26, [x20, x19] WORD $0x6e348f5b // cmeq.16b v27, v26, v20 WORD $0x4e321f5a // and.16b v26, v26, v18 WORD $0x6e358f5a // cmeq.16b v26, v26, v21 @@ -717,48 +718,72 @@ LBB0_122: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260340 // fmov w0, s26 - WORD $0x35008aa0 // cbnz w0, LBB0_282 $4436(%rip) + WORD $0x1e260345 // fmov w5, s26 + WORD $0x35000365 // cbnz w5, LBB0_133 $108(%rip) WORD $0xd10041ce // sub x14, x14, #16 WORD $0x91004273 // add x19, x19, #16 + WORD $0x91004000 // add x0, x0, #16 WORD $0xf1003ddf // cmp x14, #15 - WORD $0x54fffe68 // b.hi LBB0_122 $-52(%rip) -LBB0_124: - WORD $0x8b1303c0 // add x0, lr, x19 - WORD $0xb40001ee // cbz x14, LBB0_131 $60(%rip) + WORD $0x54fffe48 // b.hi LBB0_123 $-56(%rip) +LBB0_125: + WORD $0x8b130280 // add x0, x20, x19 + WORD $0xd284c013 // mov x19, #9728 + WORD $0xf2c20033 // movk x19, #4097, lsl #32 + WORD $0xb400020e // cbz x14, LBB0_132 $64(%rip) WORD $0x8b0e0005 // add x5, x0, x14 - WORD $0xcb1e0013 // sub x19, x0, lr -LBB0_126: +LBB0_127: WORD $0x39400006 // ldrb w6, [x0] WORD $0x7100b0df // cmp w6, #44 - WORD $0x540089a0 // b.eq LBB0_283 $4404(%rip) - WORD $0x7101f4df // cmp w6, #125 - WORD $0x54008960 // b.eq LBB0_283 $4396(%rip) + WORD $0x9ac6218f // lsl x15, x12, x6 + WORD $0x8a1301ef // and x15, x15, x19 + WORD $0xfa4099e4 // ccmp x15, #0, #4, ls + WORD $0x54000121 // b.ne LBB0_132 $36(%rip) WORD $0x710174df // cmp w6, #93 - WORD $0x54008920 // b.eq LBB0_283 $4388(%rip) + WORD $0x540000e0 // b.eq LBB0_132 $28(%rip) + WORD $0x7101f4df // cmp w6, #125 + WORD $0x540000a0 // b.eq LBB0_132 $20(%rip) WORD $0x91000400 // add x0, x0, #1 - WORD $0x91000673 // add x19, x19, #1 WORD $0xf10005ce // subs x14, x14, #1 - WORD $0x54fffec1 // b.ne LBB0_126 $-40(%rip) -LBB0_130: + WORD $0x54fffe81 // b.ne LBB0_127 $-48(%rip) WORD $0xaa0503e0 // mov x0, x5 -LBB0_131: - WORD $0xcb1e0013 // sub x19, x0, lr LBB0_132: - WORD $0x5280007a // mov w26, #3 - WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x12800011 // mov w17, #-1 - WORD $0x1400043f // b LBB0_283 $4348(%rip) + WORD $0xcb140013 // sub x19, x0, x20 + WORD $0x140007f0 // b LBB0_478 $8128(%rip) LBB0_133: - WORD $0xf9400760 // ldr x0, [x27, #8] + WORD $0x5ac000ae // rbit w14, w5 + WORD $0x5ac011ce // clz w14, w14 + WORD $0x8b1301d3 // add x19, x14, x19 + WORD $0xf9000033 // str x19, [x1] + WORD $0xf100067f // cmp x19, #1 + WORD $0x5400fd6b // b.lt LBB0_479 $8108(%rip) + WORD $0x8b0001ce // add x14, x14, x0 +LBB0_135: + WORD $0x386e68cf // ldrb w15, [x6, x14] + WORD $0x710081ff // cmp w15, #32 + WORD $0x9acf218f // lsl x15, x12, x15 + WORD $0x8a0d01ef // and x15, x15, x13 + WORD $0xfa4099e4 // ccmp x15, #0, #4, ls + WORD $0x54009480 // b.eq LBB0_303 $4752(%rip) + WORD $0x8b0e010f // add x15, x8, x14 + WORD $0xf900002f // str x15, [x1] + WORD $0xd10005ce // sub x14, x14, #1 + WORD $0x8b0e0100 // add x0, x8, x14 + WORD $0x9100080f // add x15, x0, #2 + WORD $0xf10005ff // cmp x15, #1 + WORD $0x54fffe8c // b.gt LBB0_135 $-48(%rip) +LBB0_137: + WORD $0x91000413 // add x19, x0, #1 + WORD $0x140007db // b LBB0_479 $8044(%rip) +LBB0_138: + WORD $0xf94007c0 // ldr x0, [lr, #8] WORD $0xcb13000e // sub x14, x0, x19 WORD $0xf10081df // cmp x14, #32 - WORD $0x5400baeb // b.lt LBB0_365 $5980(%rip) + WORD $0x5400bdeb // b.lt LBB0_375 $6076(%rip) WORD $0xd280000e // mov x14, #0 WORD $0xd2800005 // mov x5, #0 WORD $0xcb080000 // sub x0, x0, x8 WORD $0x528003f3 // mov w19, #31 -LBB0_135: +LBB0_140: WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x3cc011fa // ldur q26, [x15, #1] WORD $0x3cc111fb // ldur q27, [x15, #17] @@ -766,63 +791,63 @@ LBB0_135: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260395 // fmov w21, s28 + WORD $0x1e260396 // fmov w22, s28 WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 WORD $0x1e26038f // fmov w15, s28 - WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x33103df6 // bfi w22, w15, #16, #16 WORD $0x6e218f5a // cmeq.16b v26, v26, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x6e218f7a // cmeq.16b v26, v27, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df4 // bfi w20, w15, #16, #16 - WORD $0x7100029f // cmp w20, #0 + WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x710002bf // cmp w21, #0 WORD $0xfa4008a0 // ccmp x5, #0, #0, eq - WORD $0x54000180 // b.eq LBB0_137 $48(%rip) - WORD $0x0a25028f // bic w15, w20, w5 - WORD $0x2a0f04b6 // orr w22, w5, w15, lsl #1 - WORD $0x0a040285 // and w5, w20, w4 - WORD $0x0a3600a5 // bic w5, w5, w22 + WORD $0x54000180 // b.eq LBB0_142 $48(%rip) + WORD $0x0a2502af // bic w15, w21, w5 + WORD $0x2a0f04b7 // orr w23, w5, w15, lsl #1 + WORD $0x0a0402a5 // and w5, w21, w4 + WORD $0x0a3700a5 // bic w5, w5, w23 WORD $0x2b0f00af // adds w15, w5, w15 WORD $0x1a9f37e5 // cset w5, hs WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 - WORD $0x0a1601ef // and w15, w15, w22 + WORD $0x0a1701ef // and w15, w15, w23 WORD $0x2a2f03ef // mvn w15, w15 - WORD $0x8a1501f5 // and x21, x15, x21 - WORD $0x14000002 // b LBB0_138 $8(%rip) -LBB0_137: + WORD $0x8a1601f6 // and x22, x15, x22 + WORD $0x14000002 // b LBB0_143 $8(%rip) +LBB0_142: WORD $0xd2800005 // mov x5, #0 -LBB0_138: - WORD $0xb5000f55 // cbnz x21, LBB0_152 $488(%rip) +LBB0_143: + WORD $0xb5000f56 // cbnz x22, LBB0_157 $488(%rip) WORD $0x910081ce // add x14, x14, #32 WORD $0xd1008273 // sub x19, x19, #32 WORD $0x8b13000f // add x15, x0, x19 WORD $0xf100fdff // cmp x15, #63 - WORD $0x54fffa6c // b.gt LBB0_135 $-180(%rip) - WORD $0xb500f185 // cbnz x5, LBB0_468 $7728(%rip) + WORD $0x54fffa6c // b.gt LBB0_140 $-180(%rip) + WORD $0xb500f565 // cbnz x5, LBB0_481 $7852(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910005e5 // add x5, x15, #1 WORD $0xaa2e03ee // mvn x14, x14 WORD $0x8b0001ce // add x14, x14, x0 WORD $0xf10005df // cmp x14, #1 - WORD $0x5400f32a // b.ge LBB0_471 $7780(%rip) - WORD $0x1400093d // b LBB0_577 $9460(%rip) -LBB0_142: - WORD $0x54011b00 // b.eq LBB0_545 $9056(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x5400b883 // b.lo LBB0_372 $5904(%rip) + WORD $0x5400f70a // b.ge LBB0_484 $7904(%rip) + WORD $0x1400095c // b LBB0_590 $9584(%rip) +LBB0_147: + WORD $0x54011ee0 // b.eq LBB0_558 $9180(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x5400bb83 // b.lo LBB0_382 $6000(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 -LBB0_145: - WORD $0x8b1303ce // add x14, lr, x19 +LBB0_150: + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad4071dd // ldp q29, q28, [x14] WORD $0xad4169db // ldp q27, q26, [x14, #32] WORD $0x6e208fbe // cmeq.16b v30, v29, v0 @@ -844,40 +869,40 @@ LBB0_145: WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d4 // fmov w20, s30 + WORD $0x1e2603d5 // fmov w21, s30 WORD $0x6e218fbe // cmeq.16b v30, v29, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d5 // fmov w21, s30 + WORD $0x1e2603d6 // fmov w22, s30 WORD $0x6e218f9e // cmeq.16b v30, v28, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d7 // fmov w23, s30 + WORD $0x1e2603d8 // fmov w24, s30 WORD $0x6e218f7e // cmeq.16b v30, v27, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d8 // fmov w24, s30 + WORD $0x1e2603d9 // fmov w25, s30 WORD $0x6e218f5e // cmeq.16b v30, v26, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d9 // fmov w25, s30 + WORD $0x1e2603da // fmov w26, s30 WORD $0xd3607ca5 // lsl x5, x5, #32 - WORD $0xaa14c0a5 // orr x5, x5, x20, lsl #48 + WORD $0xaa15c0a5 // orr x5, x5, x21, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f00af // orr x15, x5, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607f0f // lsl x15, x24, #32 - WORD $0xaa19c1ef // orr x15, x15, x25, lsl #48 - WORD $0x53103ee5 // lsl w5, w23, #16 + WORD $0xd3607f2f // lsl x15, x25, #32 + WORD $0xaa1ac1ef // orr x15, x15, x26, lsl #48 + WORD $0x53103f05 // lsl w5, w24, #16 WORD $0xaa0501ef // orr x15, x15, x5 - WORD $0xaa1501e5 // orr x5, x15, x21 - WORD $0xb5000445 // cbnz x5, LBB0_150 $136(%rip) - WORD $0xb50004c6 // cbnz x6, LBB0_151 $152(%rip) -LBB0_147: + WORD $0xaa1601e5 // orr x5, x15, x22 + WORD $0xb5000445 // cbnz x5, LBB0_155 $136(%rip) + WORD $0xb50004c6 // cbnz x6, LBB0_156 $152(%rip) +LBB0_152: WORD $0x6e3d349d // cmhi.16b v29, v4, v29 WORD $0x4e221fbd // and.16b v29, v29, v2 WORD $0x4e0303bd // tbl.16b v29, { v29 }, v3 @@ -892,44 +917,44 @@ LBB0_147: WORD $0x4e221f7b // and.16b v27, v27, v2 WORD $0x4e03037b // tbl.16b v27, { v27 }, v3 WORD $0x4e71bb7b // addv.8h h27, v27 - WORD $0x1e260374 // fmov w20, s27 + WORD $0x1e260375 // fmov w21, s27 WORD $0x6e3a349a // cmhi.16b v26, v4, v26 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 - WORD $0xd3607e94 // lsl x20, x20, #32 - WORD $0xaa15c294 // orr x20, x20, x21, lsl #48 + WORD $0x1e260356 // fmov w22, s26 + WORD $0xd3607eb5 // lsl x21, x21, #32 + WORD $0xaa16c2b5 // orr x21, x21, x22, lsl #48 WORD $0x53103ca5 // lsl w5, w5, #16 - WORD $0xaa050285 // orr x5, x20, x5 + WORD $0xaa0502a5 // orr x5, x21, x5 WORD $0xaa0f00a5 // orr x5, x5, x15 - WORD $0xb500042e // cbnz x14, LBB0_153 $132(%rip) - WORD $0xb50111a5 // cbnz x5, LBB0_551 $8756(%rip) - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xb500042e // cbnz x14, LBB0_158 $132(%rip) + WORD $0xb5011585 // cbnz x5, LBB0_564 $8880(%rip) + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 - WORD $0x54fff568 // b.hi LBB0_145 $-340(%rip) - WORD $0x1400052f // b LBB0_361 $5308(%rip) -LBB0_150: + WORD $0xf100feff // cmp x23, #63 + WORD $0x54fff568 // b.hi LBB0_150 $-340(%rip) + WORD $0x14000547 // b LBB0_371 $5404(%rip) +LBB0_155: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011ef // clz x15, x15 WORD $0x8b1301ef // add x15, x15, x19 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_151: +LBB0_156: WORD $0x8a2600af // bic x15, x5, x6 - WORD $0xaa0f04d4 // orr x20, x6, x15, lsl #1 - WORD $0x8a3400a5 // bic x5, x5, x20 + WORD $0xaa0f04d5 // orr x21, x6, x15, lsl #1 + WORD $0x8a3500a5 // bic x5, x5, x21 WORD $0x9201f0a5 // and x5, x5, #0xaaaaaaaaaaaaaaaa WORD $0xab0f00af // adds x15, x5, x15 WORD $0x1a9f37e6 // cset w6, hs WORD $0xd37ff9ef // lsl x15, x15, #1 WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 - WORD $0x8a1401ef // and x15, x15, x20 + WORD $0x8a1501ef // and x15, x15, x21 WORD $0x8a2f01ce // bic x14, x14, x15 - WORD $0x17ffffd1 // b LBB0_147 $-188(%rip) -LBB0_152: - WORD $0xdac002af // rbit x15, x21 + WORD $0x17ffffd1 // b LBB0_152 $-188(%rip) +LBB0_157: + WORD $0xdac002cf // rbit x15, x22 WORD $0xdac011ef // clz x15, x15 WORD $0x8b0e010e // add x14, x8, x14 WORD $0x8b0e01ee // add x14, x15, x14 @@ -937,82 +962,82 @@ LBB0_152: WORD $0xf9000033 // str x19, [x1] WORD $0xaa0803e0 // mov x0, x8 WORD $0xeb07011f // cmp x8, x7 - WORD $0x54001983 // b.lo LBB0_195 $816(%rip) - WORD $0x140008c8 // b LBB0_578 $8992(%rip) -LBB0_153: + WORD $0x54001983 // b.lo LBB0_200 $816(%rip) + WORD $0x140008e7 // b LBB0_591 $9116(%rip) +LBB0_158: WORD $0xdac001ce // rbit x14, x14 WORD $0xdac011ce // clz x14, x14 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011e5 // clz x5, x15 WORD $0xeb0e00bf // cmp x5, x14 - WORD $0x54011783 // b.lo LBB0_574 $8944(%rip) + WORD $0x54011b63 // b.lo LBB0_587 $9068(%rip) WORD $0x8b1301ce // add x14, x14, x19 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6f87053 // tbz x19, #63, LBB0_283 $3592(%rip) - WORD $0x14000857 // b LBB0_544 $8540(%rip) -LBB0_155: + WORD $0xb6f8e3b3 // tbz x19, #63, LBB0_478 $7284(%rip) + WORD $0x14000876 // b LBB0_557 $8664(%rip) +LBB0_160: WORD $0x710088bf // cmp w5, #34 - WORD $0x54001cc0 // b.eq LBB0_206 $920(%rip) + WORD $0x54001cc0 // b.eq LBB0_211 $920(%rip) WORD $0x7100b4bf // cmp w5, #45 - WORD $0x54011741 // b.ne LBB0_578 $8936(%rip) - WORD $0x37306ae3 // tbnz w3, #6, LBB0_273 $3420(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] - WORD $0xeb1301d9 // subs x25, x14, x19 - WORD $0x54011520 // b.eq LBB0_570 $8868(%rip) - WORD $0x8b1303c0 // add x0, lr, x19 + WORD $0x54011b21 // b.ne LBB0_591 $9060(%rip) + WORD $0x37306ae3 // tbnz w3, #6, LBB0_278 $3420(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] + WORD $0xeb1301da // subs x26, x14, x19 + WORD $0x54011900 // b.eq LBB0_583 $8992(%rip) + WORD $0x8b130280 // add x0, x20, x19 WORD $0x3940000e // ldrb w14, [x0] WORD $0x7100c1df // cmp w14, #48 - WORD $0x54008881 // b.ne LBB0_309 $4368(%rip) - WORD $0xf100073f // cmp x25, #1 - WORD $0x540086e1 // b.ne LBB0_307 $4316(%rip) -LBB0_161: + WORD $0x54008b81 // b.ne LBB0_319 $4464(%rip) + WORD $0xf100075f // cmp x26, #1 + WORD $0x540089e1 // b.ne LBB0_317 $4412(%rip) +LBB0_166: WORD $0x5280002e // mov w14, #1 - WORD $0x140004e0 // b LBB0_355 $4992(%rip) -LBB0_162: + WORD $0x140004f8 // b LBB0_365 $5088(%rip) +LBB0_167: WORD $0x71016cbf // cmp w5, #91 - WORD $0x540019c0 // b.eq LBB0_203 $824(%rip) + WORD $0x540019c0 // b.eq LBB0_208 $824(%rip) WORD $0x710198bf // cmp w5, #102 - WORD $0x54011541 // b.ne LBB0_578 $8872(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0x54011921 // b.ne LBB0_591 $8996(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xd10011cf // sub x15, x14, #4 WORD $0xeb0f011f // cmp x8, x15 - WORD $0x54010942 // b.hs LBB0_550 $8488(%rip) - WORD $0xb8736bce // ldr w14, [lr, x19] + WORD $0x54010d22 // b.hs LBB0_563 $8612(%rip) + WORD $0xb8736a8e // ldr w14, [x20, x19] WORD $0x528d8c2f // mov w15, #27745 WORD $0x72acae6f // movk w15, #25971, lsl #16 WORD $0x6b0f01df // cmp w14, w15 - WORD $0x54010ee1 // b.ne LBB0_563 $8668(%rip) + WORD $0x540112c1 // b.ne LBB0_576 $8792(%rip) WORD $0x91001513 // add x19, x8, #5 - WORD $0x14000362 // b LBB0_283 $3464(%rip) -LBB0_167: - WORD $0x8b3540ce // add x14, x6, w21, uxtw - WORD $0x8b1a01c5 // add x5, x14, x26 -LBB0_168: + WORD $0x140006fd // b LBB0_478 $7156(%rip) +LBB0_172: + WORD $0x8b3640ce // add x14, x6, w22, uxtw + WORD $0x8b1b01c5 // add x5, x14, x27 +LBB0_173: WORD $0x9280000e // mov x14, #-1 - WORD $0xb4010740 // cbz x0, LBB0_547 $8424(%rip) -LBB0_169: - WORD $0xb4010736 // cbz x22, LBB0_547 $8420(%rip) - WORD $0xb4010713 // cbz x19, LBB0_547 $8416(%rip) + WORD $0xb4010b20 // cbz x0, LBB0_560 $8548(%rip) +LBB0_174: + WORD $0xb4010b17 // cbz x23, LBB0_560 $8544(%rip) + WORD $0xb4010af3 // cbz x19, LBB0_560 $8540(%rip) WORD $0xcb0600ae // sub x14, x5, x6 WORD $0xd10005c5 // sub x5, x14, #1 WORD $0xeb05001f // cmp x0, x5 - WORD $0x54000300 // b.eq LBB0_179 $96(%rip) - WORD $0xeb0502df // cmp x22, x5 - WORD $0x540002c0 // b.eq LBB0_179 $88(%rip) + WORD $0x54000300 // b.eq LBB0_184 $96(%rip) + WORD $0xeb0502ff // cmp x23, x5 + WORD $0x540002c0 // b.eq LBB0_184 $88(%rip) WORD $0xeb05027f // cmp x19, x5 - WORD $0x54000280 // b.eq LBB0_179 $80(%rip) - WORD $0xf10006cf // subs x15, x22, #1 - WORD $0x5280007a // mov w26, #3 + WORD $0x54000280 // b.eq LBB0_184 $80(%rip) + WORD $0xf10006ef // subs x15, x23, #1 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x5400006b // b.lt LBB0_176 $12(%rip) + WORD $0x5400006b // b.lt LBB0_181 $12(%rip) WORD $0xeb0f027f // cmp x19, x15 - WORD $0x54010561 // b.ne LBB0_548 $8364(%rip) -LBB0_176: + WORD $0x54010941 // b.ne LBB0_561 $8488(%rip) +LBB0_181: WORD $0xaa130005 // orr x5, x0, x19 - WORD $0xb7f80065 // tbnz x5, #63, LBB0_178 $12(%rip) + WORD $0xb7f80065 // tbnz x5, #63, LBB0_183 $12(%rip) WORD $0xeb13001f // cmp x0, x19 - WORD $0x5401062a // b.ge LBB0_553 $8388(%rip) -LBB0_178: + WORD $0x54010a0a // b.ge LBB0_566 $8512(%rip) +LBB0_183: WORD $0xd37ffcaf // lsr x15, x5, #63 WORD $0x520001ef // eor w15, w15, #0x1 WORD $0xd1000671 // sub x17, x19, #1 @@ -1021,23 +1046,23 @@ LBB0_178: WORD $0x6a1101ff // tst w15, w17 WORD $0x12800011 // mov w17, #-1 WORD $0xda9301ce // csinv x14, x14, x19, eq - WORD $0x14000004 // b LBB0_180 $16(%rip) -LBB0_179: + WORD $0x14000004 // b LBB0_185 $16(%rip) +LBB0_184: WORD $0xcb0e03ee // neg x14, x14 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 -LBB0_180: - WORD $0xb7f9032e // tbnz x14, #63, LBB0_547 $8292(%rip) +LBB0_185: + WORD $0xb7f9070e // tbnz x14, #63, LBB0_560 $8416(%rip) WORD $0x8b0e0113 // add x19, x8, x14 - WORD $0x1400033b // b LBB0_283 $3308(%rip) -LBB0_182: - WORD $0x54010240 // b.eq LBB0_545 $8264(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x5400b063 // b.lo LBB0_401 $5644(%rip) + WORD $0x140006d6 // b LBB0_478 $7000(%rip) +LBB0_187: + WORD $0x54010620 // b.eq LBB0_558 $8388(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x5400b363 // b.lo LBB0_411 $5740(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 -LBB0_185: - WORD $0x8b1303ce // add x14, lr, x19 +LBB0_190: + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad4071dd // ldp q29, q28, [x14] WORD $0xad4169db // ldp q27, q26, [x14, #32] WORD $0x6e208fbe // cmeq.16b v30, v29, v0 @@ -1059,40 +1084,40 @@ LBB0_185: WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d4 // fmov w20, s30 + WORD $0x1e2603d5 // fmov w21, s30 WORD $0x6e218fbe // cmeq.16b v30, v29, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d5 // fmov w21, s30 + WORD $0x1e2603d6 // fmov w22, s30 WORD $0x6e218f9e // cmeq.16b v30, v28, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d7 // fmov w23, s30 + WORD $0x1e2603d8 // fmov w24, s30 WORD $0x6e218f7e // cmeq.16b v30, v27, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d8 // fmov w24, s30 + WORD $0x1e2603d9 // fmov w25, s30 WORD $0x6e218f5e // cmeq.16b v30, v26, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d9 // fmov w25, s30 + WORD $0x1e2603da // fmov w26, s30 WORD $0xd3607ca5 // lsl x5, x5, #32 - WORD $0xaa14c0a5 // orr x5, x5, x20, lsl #48 + WORD $0xaa15c0a5 // orr x5, x5, x21, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f00af // orr x15, x5, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607f0f // lsl x15, x24, #32 - WORD $0xaa19c1ef // orr x15, x15, x25, lsl #48 - WORD $0x53103ee5 // lsl w5, w23, #16 + WORD $0xd3607f2f // lsl x15, x25, #32 + WORD $0xaa1ac1ef // orr x15, x15, x26, lsl #48 + WORD $0x53103f05 // lsl w5, w24, #16 WORD $0xaa0501ef // orr x15, x15, x5 - WORD $0xaa1501e5 // orr x5, x15, x21 - WORD $0xb5000445 // cbnz x5, LBB0_190 $136(%rip) - WORD $0xb50004c6 // cbnz x6, LBB0_191 $152(%rip) -LBB0_187: + WORD $0xaa1601e5 // orr x5, x15, x22 + WORD $0xb5000445 // cbnz x5, LBB0_195 $136(%rip) + WORD $0xb50004c6 // cbnz x6, LBB0_196 $152(%rip) +LBB0_192: WORD $0x6e3d349d // cmhi.16b v29, v4, v29 WORD $0x4e221fbd // and.16b v29, v29, v2 WORD $0x4e0303bd // tbl.16b v29, { v29 }, v3 @@ -1107,115 +1132,115 @@ LBB0_187: WORD $0x4e221f7b // and.16b v27, v27, v2 WORD $0x4e03037b // tbl.16b v27, { v27 }, v3 WORD $0x4e71bb7b // addv.8h h27, v27 - WORD $0x1e260374 // fmov w20, s27 + WORD $0x1e260375 // fmov w21, s27 WORD $0x6e3a349a // cmhi.16b v26, v4, v26 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 - WORD $0xd3607e94 // lsl x20, x20, #32 - WORD $0xaa15c294 // orr x20, x20, x21, lsl #48 + WORD $0x1e260356 // fmov w22, s26 + WORD $0xd3607eb5 // lsl x21, x21, #32 + WORD $0xaa16c2b5 // orr x21, x21, x22, lsl #48 WORD $0x53103ca5 // lsl w5, w5, #16 - WORD $0xaa050285 // orr x5, x20, x5 + WORD $0xaa0502a5 // orr x5, x21, x5 WORD $0xaa0f00a5 // orr x5, x5, x15 - WORD $0xb50002ee // cbnz x14, LBB0_192 $92(%rip) - WORD $0xb500f8e5 // cbnz x5, LBB0_551 $7964(%rip) - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xb50002ee // cbnz x14, LBB0_197 $92(%rip) + WORD $0xb500fcc5 // cbnz x5, LBB0_564 $8088(%rip) + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 - WORD $0x54fff568 // b.hi LBB0_185 $-340(%rip) - WORD $0x140004fe // b LBB0_393 $5112(%rip) -LBB0_190: + WORD $0xf100feff // cmp x23, #63 + WORD $0x54fff568 // b.hi LBB0_190 $-340(%rip) + WORD $0x14000516 // b LBB0_403 $5208(%rip) +LBB0_195: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011ef // clz x15, x15 WORD $0x8b1301ef // add x15, x15, x19 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_191: +LBB0_196: WORD $0x8a2600af // bic x15, x5, x6 - WORD $0xaa0f04d4 // orr x20, x6, x15, lsl #1 - WORD $0x8a3400a5 // bic x5, x5, x20 + WORD $0xaa0f04d5 // orr x21, x6, x15, lsl #1 + WORD $0x8a3500a5 // bic x5, x5, x21 WORD $0x9201f0a5 // and x5, x5, #0xaaaaaaaaaaaaaaaa WORD $0xab0f00af // adds x15, x5, x15 WORD $0x1a9f37e6 // cset w6, hs WORD $0xd37ff9ef // lsl x15, x15, #1 WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 - WORD $0x8a1401ef // and x15, x15, x20 + WORD $0x8a1501ef // and x15, x15, x21 WORD $0x8a2f01ce // bic x14, x14, x15 - WORD $0x17ffffd1 // b LBB0_187 $-188(%rip) -LBB0_192: + WORD $0x17ffffd1 // b LBB0_192 $-188(%rip) +LBB0_197: WORD $0xdac001ce // rbit x14, x14 WORD $0xdac011ce // clz x14, x14 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011e5 // clz x5, x15 WORD $0xeb0e00bf // cmp x5, x14 - WORD $0x54010003 // b.lo LBB0_574 $8192(%rip) + WORD $0x540103e3 // b.lo LBB0_587 $8316(%rip) WORD $0x8b1301ce // add x14, x14, x19 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb7f8f393 // tbnz x19, #63, LBB0_544 $7792(%rip) -LBB0_194: + WORD $0xb7f8f773 // tbnz x19, #63, LBB0_557 $7916(%rip) +LBB0_199: WORD $0xf9000033 // str x19, [x1] WORD $0xaa0803e0 // mov x0, x8 WORD $0xb27ff7ee // mov x14, #9223372036854775806 WORD $0xeb0e011f // cmp x8, x14 - WORD $0x5400ffc8 // b.hi LBB0_578 $8184(%rip) -LBB0_195: + WORD $0x540103a8 // b.hi LBB0_591 $8308(%rip) +LBB0_200: WORD $0xf9400048 // ldr x8, [x2] WORD $0xf13ffd1f // cmp x8, #4095 - WORD $0x5400f24c // b.gt LBB0_543 $7752(%rip) + WORD $0x5400f62c // b.gt LBB0_556 $7876(%rip) WORD $0x9100050e // add x14, x8, #1 WORD $0xf900004e // str x14, [x2] WORD $0x5280008e // mov w14, #4 -LBB0_197: +LBB0_202: WORD $0xf828792e // str x14, [x9, x8, lsl #3] - WORD $0x140002bd // b LBB0_284 $2804(%rip) -LBB0_198: - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0x14000658 // b LBB0_480 $6496(%rip) +LBB0_203: + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xd1000dcf // sub x15, x14, #3 WORD $0xeb0f011f // cmp x8, x15 - WORD $0x5400f2c2 // b.hs LBB0_550 $7768(%rip) - WORD $0x8b1303ce // add x14, lr, x19 + WORD $0x5400f6a2 // b.hs LBB0_563 $7892(%rip) + WORD $0x8b13028e // add x14, x20, x19 WORD $0xb85ff1ce // ldur w14, [x14, #-1] WORD $0x528e4e8f // mov w15, #29300 WORD $0x72acaeaf // movk w15, #25973, lsl #16 WORD $0x6b0f01df // cmp w14, w15 - WORD $0x54000180 // b.eq LBB0_202 $48(%rip) - WORD $0x14000797 // b LBB0_554 $7772(%rip) -LBB0_200: - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0x54000180 // b.eq LBB0_207 $48(%rip) + WORD $0x140007b6 // b LBB0_567 $7896(%rip) +LBB0_205: + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xd1000dcf // sub x15, x14, #3 WORD $0xeb0f011f // cmp x8, x15 - WORD $0x5400f162 // b.hs LBB0_550 $7724(%rip) - WORD $0x8b1303ce // add x14, lr, x19 + WORD $0x5400f542 // b.hs LBB0_563 $7848(%rip) + WORD $0x8b13028e // add x14, x20, x19 WORD $0xb85ff1ce // ldur w14, [x14, #-1] WORD $0x528eadcf // mov w15, #30062 WORD $0x72ad8d8f // movk w15, #27756, lsl #16 WORD $0x6b0f01df // cmp w14, w15 - WORD $0x5400f421 // b.ne LBB0_558 $7812(%rip) -LBB0_202: + WORD $0x5400f801 // b.ne LBB0_571 $7936(%rip) +LBB0_207: WORD $0x91001113 // add x19, x8, #4 - WORD $0x140002a2 // b LBB0_283 $2696(%rip) -LBB0_203: - WORD $0x37302d23 // tbnz w3, #6, LBB0_245 $1444(%rip) + WORD $0x1400063d // b LBB0_478 $6388(%rip) +LBB0_208: + WORD $0x37302d23 // tbnz w3, #6, LBB0_250 $1444(%rip) WORD $0xf9400048 // ldr x8, [x2] WORD $0xf13ffd1f // cmp x8, #4095 - WORD $0x5400ee4c // b.gt LBB0_543 $7624(%rip) + WORD $0x5400f22c // b.gt LBB0_556 $7748(%rip) WORD $0x9100050e // add x14, x8, #1 WORD $0xf900004e // str x14, [x2] WORD $0x528000ae // mov w14, #5 - WORD $0x17ffffe0 // b LBB0_197 $-128(%rip) -LBB0_206: - WORD $0x37305423 // tbnz w3, #6, LBB0_285 $2692(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] - WORD $0xeb1301d6 // subs x22, x14, x19 - WORD $0x37285c23 // tbnz w3, #5, LBB0_295 $2948(%rip) - WORD $0x5400eda0 // b.eq LBB0_545 $7604(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x5400ad03 // b.lo LBB0_432 $5536(%rip) + WORD $0x17ffffe0 // b LBB0_202 $-128(%rip) +LBB0_211: + WORD $0x37305423 // tbnz w3, #6, LBB0_290 $2692(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] + WORD $0xeb1301d7 // subs x23, x14, x19 + WORD $0x37285f23 // tbnz w3, #5, LBB0_305 $3044(%rip) + WORD $0x5400f180 // b.eq LBB0_558 $7728(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x5400b003 // b.lo LBB0_442 $5632(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 -LBB0_211: - WORD $0x8b1303ce // add x14, lr, x19 +LBB0_216: + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad406dda // ldp q26, q27, [x14] WORD $0xad4175dc // ldp q28, q29, [x14, #32] WORD $0x6e208f5e // cmeq.16b v30, v26, v0 @@ -1249,43 +1274,43 @@ LBB0_211: WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x4e221f9a // and.16b v26, v28, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 + WORD $0x1e260356 // fmov w22, s26 WORD $0x4e221fba // and.16b v26, v29, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260357 // fmov w23, s26 + WORD $0x1e260358 // fmov w24, s26 WORD $0xd3607e31 // lsl x17, x17, #32 WORD $0xaa05c231 // orr x17, x17, x5, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607eaf // lsl x15, x21, #32 - WORD $0xaa17c1ef // orr x15, x15, x23, lsl #48 - WORD $0x53103e91 // lsl w17, w20, #16 + WORD $0xd3607ecf // lsl x15, x22, #32 + WORD $0xaa18c1ef // orr x15, x15, x24, lsl #48 + WORD $0x53103eb1 // lsl w17, w21, #16 WORD $0xaa1101ef // orr x15, x15, x17 WORD $0xaa0701e5 // orr x5, x15, x7 - WORD $0xb5000145 // cbnz x5, LBB0_215 $40(%rip) - WORD $0xb50001c6 // cbnz x6, LBB0_216 $56(%rip) + WORD $0xb5000145 // cbnz x5, LBB0_220 $40(%rip) + WORD $0xb50001c6 // cbnz x6, LBB0_221 $56(%rip) WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb500032e // cbnz x14, LBB0_217 $100(%rip) -LBB0_214: - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xb500032e // cbnz x14, LBB0_222 $100(%rip) +LBB0_219: + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 - WORD $0x54fff868 // b.hi LBB0_211 $-244(%rip) - WORD $0x1400051f // b LBB0_429 $5244(%rip) -LBB0_215: + WORD $0xf100feff // cmp x23, #63 + WORD $0x54fff868 // b.hi LBB0_216 $-244(%rip) + WORD $0x14000537 // b LBB0_439 $5340(%rip) +LBB0_220: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011ef // clz x15, x15 WORD $0x8b1301ef // add x15, x15, x19 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_216: +LBB0_221: WORD $0x8a2600af // bic x15, x5, x6 WORD $0xaa0f04d1 // orr x17, x6, x15, lsl #1 WORD $0x8a3100a5 // bic x5, x5, x17 @@ -1296,24 +1321,24 @@ LBB0_216: WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 WORD $0x8a1101ef // and x15, x15, x17 WORD $0x8a2f01ce // bic x14, x14, x15 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb4fffd2e // cbz x14, LBB0_214 $-92(%rip) -LBB0_217: + WORD $0xb4fffd2e // cbz x14, LBB0_219 $-92(%rip) +LBB0_222: WORD $0xdac001ce // rbit x14, x14 WORD $0xdac011ce // clz x14, x14 - WORD $0x140002fc // b LBB0_306 $3056(%rip) -LBB0_218: + WORD $0x14000314 // b LBB0_316 $3152(%rip) +LBB0_223: WORD $0xf90017ff // str xzr, [sp, #40] WORD $0xd2800007 // mov x7, #0 WORD $0xd2800000 // mov x0, #0 WORD $0xd2800006 // mov x6, #0 - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xcb1301cf // sub x15, x14, x19 - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400000a // b LBB0_220 $40(%rip) -LBB0_219: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400000a // b LBB0_225 $40(%rip) +LBB0_224: WORD $0x937ffdce // asr x14, x14, #63 WORD $0xf90017ee // str x14, [sp, #40] WORD $0x9e6700ba // fmov d26, x5 @@ -1323,12 +1348,12 @@ LBB0_219: WORD $0x8b0001c0 // add x0, x14, x0 WORD $0x91010273 // add x19, x19, #64 WORD $0xa941bfe7 // ldp x7, x15, [sp, #24] -LBB0_220: +LBB0_225: WORD $0xf10101ee // subs x14, x15, #64 WORD $0xf90013ee // str x14, [sp, #32] WORD $0xf9000bef // str x15, [sp, #16] - WORD $0x5400176b // b.lt LBB0_228 $748(%rip) -LBB0_221: + WORD $0x5400176b // b.lt LBB0_233 $748(%rip) +LBB0_226: WORD $0xad40727d // ldp q29, q28, [x19] WORD $0xad416a7b // ldp q27, q26, [x19, #32] WORD $0x6e218fbe // cmeq.16b v30, v29, v1 @@ -1357,11 +1382,11 @@ LBB0_221: WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 WORD $0xaa0701cf // orr x15, x14, x7 - WORD $0xb500008f // cbnz x15, LBB0_223 $16(%rip) + WORD $0xb500008f // cbnz x15, LBB0_228 $16(%rip) WORD $0xf9000fff // str xzr, [sp, #24] WORD $0xd280000e // mov x14, #0 - WORD $0x1400000b // b LBB0_224 $44(%rip) -LBB0_223: + WORD $0x1400000b // b LBB0_229 $44(%rip) +LBB0_228: WORD $0x8a2701cf // bic x15, x14, x7 WORD $0xaa0f04f1 // orr x17, x7, x15, lsl #1 WORD $0x8a3101ce // bic x14, x14, x17 @@ -1372,7 +1397,7 @@ LBB0_223: WORD $0xd37ff9ce // lsl x14, x14, #1 WORD $0xd200f1ce // eor x14, x14, #0x5555555555555555 WORD $0x8a1101ce // and x14, x14, x17 -LBB0_224: +LBB0_229: WORD $0x6e208fbe // cmeq.16b v30, v29, v0 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 @@ -1403,47 +1428,47 @@ LBB0_224: WORD $0x9203e1d1 // and x17, x14, #0x2222222222222222 WORD $0x9202e1c5 // and x5, x14, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 - WORD $0xb200e3f9 // mov x25, #1229782938247303441 - WORD $0x9b197de7 // mul x7, x15, x25 - WORD $0xb201e3f8 // mov x24, #-8608480567731124088 - WORD $0xf2e11118 // movk x24, #2184, lsl #48 - WORD $0x9b187e34 // mul x20, x17, x24 - WORD $0xca1400e7 // eor x7, x7, x20 - WORD $0xb202e3f7 // mov x23, #4919131752989213764 - WORD $0xf2e08897 // movk x23, #1092, lsl #48 - WORD $0x9b177cb4 // mul x20, x5, x23 - WORD $0xb203e3f5 // mov x21, #2459565876494606882 - WORD $0xf2e04455 // movk x21, #546, lsl #48 - WORD $0x9b157dd5 // mul x21, x14, x21 - WORD $0xca150294 // eor x20, x20, x21 - WORD $0xca1400e7 // eor x7, x7, x20 - WORD $0xb203e3fe // mov lr, #2459565876494606882 - WORD $0x9b1e7df4 // mul x20, x15, lr + WORD $0xb200e3fa // mov x26, #1229782938247303441 + WORD $0x9b1a7de7 // mul x7, x15, x26 + WORD $0xb201e3f9 // mov x25, #-8608480567731124088 + WORD $0xf2e11119 // movk x25, #2184, lsl #48 WORD $0x9b197e35 // mul x21, x17, x25 - WORD $0xca150294 // eor x20, x20, x21 + WORD $0xca1500e7 // eor x7, x7, x21 + WORD $0xb202e3f8 // mov x24, #4919131752989213764 + WORD $0xf2e08898 // movk x24, #1092, lsl #48 WORD $0x9b187cb5 // mul x21, x5, x24 - WORD $0x9b177dd7 // mul x23, x14, x23 - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0xca150294 // eor x20, x20, x21 - WORD $0xb202e3f6 // mov x22, #4919131752989213764 - WORD $0x9b167df5 // mul x21, x15, x22 - WORD $0x9b1e7e37 // mul x23, x17, lr - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0x9b197cb7 // mul x23, x5, x25 + WORD $0xb203e3f6 // mov x22, #2459565876494606882 + WORD $0xf2e04456 // movk x22, #546, lsl #48 + WORD $0x9b167dd6 // mul x22, x14, x22 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0xca1500e7 // eor x7, x7, x21 + WORD $0xb203e3f4 // mov x20, #2459565876494606882 + WORD $0x9b147df5 // mul x21, x15, x20 + WORD $0x9b1a7e36 // mul x22, x17, x26 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0x9b197cb6 // mul x22, x5, x25 WORD $0x9b187dd8 // mul x24, x14, x24 - WORD $0xca1802f7 // eor x23, x23, x24 - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0xb201e3f7 // mov x23, #-8608480567731124088 - WORD $0x9b177def // mul x15, x15, x23 - WORD $0x9b167e31 // mul x17, x17, x22 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0xb202e3f7 // mov x23, #4919131752989213764 + WORD $0x9b177df6 // mul x22, x15, x23 + WORD $0x9b147e38 // mul x24, x17, x20 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0x9b1a7cb8 // mul x24, x5, x26 + WORD $0x9b197dd9 // mul x25, x14, x25 + WORD $0xca190318 // eor x24, x24, x25 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0xb201e3f8 // mov x24, #-8608480567731124088 + WORD $0x9b187def // mul x15, x15, x24 + WORD $0x9b177e31 // mul x17, x17, x23 WORD $0xca1101ef // eor x15, x15, x17 - WORD $0x9b1e7cb1 // mul x17, x5, lr - WORD $0x9b197dce // mul x14, x14, x25 + WORD $0x9b147cb1 // mul x17, x5, x20 + WORD $0x9b1a7dce // mul x14, x14, x26 WORD $0xca0e022e // eor x14, x17, x14 WORD $0xca0e01ee // eor x14, x15, x14 WORD $0x9200e0ef // and x15, x7, #0x1111111111111111 - WORD $0x9203e291 // and x17, x20, #0x2222222222222222 - WORD $0x9202e2a5 // and x5, x21, #0x4444444444444444 + WORD $0x9203e2b1 // and x17, x21, #0x2222222222222222 + WORD $0x9202e2c5 // and x5, x22, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 WORD $0xaa1101ef // orr x15, x15, x17 WORD $0xaa0e00ae // orr x14, x5, x14 @@ -1495,104 +1520,104 @@ LBB0_224: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0xd3607ce7 // lsl x7, x7, #32 - WORD $0xaa14c0e7 // orr x7, x7, x20, lsl #48 + WORD $0xaa15c0e7 // orr x7, x7, x21, lsl #48 WORD $0x53103e31 // lsl w17, w17, #16 WORD $0xaa1100f1 // orr x17, x7, x17 WORD $0xaa0f022f // orr x15, x17, x15 - WORD $0xea2e01f4 // bics x20, x15, x14 - WORD $0x54ffe900 // b.eq LBB0_219 $-736(%rip) + WORD $0xea2e01f5 // bics x21, x15, x14 + WORD $0x54ffe900 // b.eq LBB0_224 $-736(%rip) WORD $0x92f00007 // mov x7, #9223372036854775807 -LBB0_226: - WORD $0xd1000695 // sub x21, x20, #1 - WORD $0x8a0502af // and x15, x21, x5 +LBB0_231: + WORD $0xd10006b6 // sub x22, x21, #1 + WORD $0x8a0502cf // and x15, x22, x5 WORD $0x9e6701fa // fmov d26, x15 WORD $0x0e205b5a // cnt.8b v26, v26 WORD $0x2e303b5a // uaddlv.8b h26, v26 WORD $0x1e26034f // fmov w15, s26 WORD $0x8b0001ef // add x15, x15, x0 WORD $0xeb0601ff // cmp x15, x6 - WORD $0x54002789 // b.ls LBB0_272 $1264(%rip) + WORD $0x54002789 // b.ls LBB0_277 $1264(%rip) WORD $0x910004c6 // add x6, x6, #1 - WORD $0xea1402b4 // ands x20, x21, x20 - WORD $0x54fffea1 // b.ne LBB0_226 $-44(%rip) - WORD $0x17ffff3a // b LBB0_219 $-792(%rip) -LBB0_228: + WORD $0xea1502d5 // ands x21, x22, x21 + WORD $0x54fffea1 // b.ne LBB0_231 $-44(%rip) + WORD $0x17ffff3a // b LBB0_224 $-792(%rip) +LBB0_233: WORD $0xf10001ff // cmp x15, #0 - WORD $0x5400d4ad // b.le LBB0_575 $6804(%rip) + WORD $0x5400d88d // b.le LBB0_588 $6928(%rip) WORD $0xaa0703f1 // mov x17, x7 WORD $0xad02dff7 // stp q23, q23, [sp, #80] WORD $0xad01dff7 // stp q23, q23, [sp, #48] WORD $0x92402e6e // and x14, x19, #0xfff WORD $0xf13f05df // cmp x14, #4033 - WORD $0x54000383 // b.lo LBB0_240 $112(%rip) + WORD $0x54000383 // b.lo LBB0_245 $112(%rip) WORD $0xf9400bee // ldr x14, [sp, #16] WORD $0xf10081c5 // subs x5, x14, #32 - WORD $0x540000a3 // b.lo LBB0_232 $20(%rip) + WORD $0x540000a3 // b.lo LBB0_237 $20(%rip) WORD $0xacc16e7a // ldp q26, q27, [x19], #32 WORD $0xad01effa // stp q26, q27, [sp, #48] WORD $0xaa0a03ee // mov x14, x10 - WORD $0x14000003 // b LBB0_233 $12(%rip) -LBB0_232: + WORD $0x14000003 // b LBB0_238 $12(%rip) +LBB0_237: WORD $0x9100c3ee // add x14, sp, #48 WORD $0xf9400be5 // ldr x5, [sp, #16] -LBB0_233: - WORD $0xf10040b4 // subs x20, x5, #16 - WORD $0x54000283 // b.lo LBB0_241 $80(%rip) +LBB0_238: + WORD $0xf10040b5 // subs x21, x5, #16 + WORD $0x54000283 // b.lo LBB0_246 $80(%rip) WORD $0x3cc1067a // ldr q26, [x19], #16 WORD $0x3c8105da // str q26, [x14], #16 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1002294 // subs x20, x20, #8 - WORD $0x54000222 // b.hs LBB0_242 $68(%rip) -LBB0_235: - WORD $0xf10010b4 // subs x20, x5, #4 - WORD $0x54000283 // b.lo LBB0_243 $80(%rip) -LBB0_236: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf10022b5 // subs x21, x21, #8 + WORD $0x54000222 // b.hs LBB0_247 $68(%rip) +LBB0_240: + WORD $0xf10010b5 // subs x21, x5, #4 + WORD $0x54000283 // b.lo LBB0_248 $80(%rip) +LBB0_241: WORD $0xb840466f // ldr w15, [x19], #4 WORD $0xb80045cf // str w15, [x14], #4 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1000a94 // subs x20, x20, #2 - WORD $0x54000222 // b.hs LBB0_244 $68(%rip) -LBB0_237: - WORD $0xb4000065 // cbz x5, LBB0_239 $12(%rip) -LBB0_238: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf1000ab5 // subs x21, x21, #2 + WORD $0x54000222 // b.hs LBB0_249 $68(%rip) +LBB0_242: + WORD $0xb4000065 // cbz x5, LBB0_244 $12(%rip) +LBB0_243: WORD $0x3940026f // ldrb w15, [x19] WORD $0x390001cf // strb w15, [x14] -LBB0_239: +LBB0_244: WORD $0x9100c3f3 // add x19, sp, #48 -LBB0_240: - WORD $0x5280007a // mov w26, #3 +LBB0_245: + WORD $0x5280007b // mov w27, #3 WORD $0xaa1103e7 // mov x7, x17 - WORD $0x17ffff21 // b LBB0_221 $-892(%rip) -LBB0_241: - WORD $0xf10020b4 // subs x20, x5, #8 - WORD $0x54fffe23 // b.lo LBB0_235 $-60(%rip) -LBB0_242: + WORD $0x17ffff21 // b LBB0_226 $-892(%rip) +LBB0_246: + WORD $0xf10020b5 // subs x21, x5, #8 + WORD $0x54fffe23 // b.lo LBB0_240 $-60(%rip) +LBB0_247: WORD $0xf840866f // ldr x15, [x19], #8 WORD $0xf80085cf // str x15, [x14], #8 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1001294 // subs x20, x20, #4 - WORD $0x54fffdc2 // b.hs LBB0_236 $-72(%rip) -LBB0_243: - WORD $0xf10008b4 // subs x20, x5, #2 - WORD $0x54fffe23 // b.lo LBB0_237 $-60(%rip) -LBB0_244: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf10012b5 // subs x21, x21, #4 + WORD $0x54fffdc2 // b.hs LBB0_241 $-72(%rip) +LBB0_248: + WORD $0xf10008b5 // subs x21, x5, #2 + WORD $0x54fffe23 // b.lo LBB0_242 $-60(%rip) +LBB0_249: WORD $0x7840266f // ldrh w15, [x19], #2 WORD $0x780025cf // strh w15, [x14], #2 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xb5fffdd4 // cbnz x20, LBB0_238 $-72(%rip) - WORD $0x17ffffef // b LBB0_239 $-68(%rip) -LBB0_245: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xb5fffdd5 // cbnz x21, LBB0_243 $-72(%rip) + WORD $0x17ffffef // b LBB0_244 $-68(%rip) +LBB0_250: WORD $0xf90017ff // str xzr, [sp, #40] WORD $0xd2800007 // mov x7, #0 WORD $0xd2800000 // mov x0, #0 WORD $0xd2800006 // mov x6, #0 - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xcb1301cf // sub x15, x14, x19 - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400000a // b LBB0_247 $40(%rip) -LBB0_246: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400000a // b LBB0_252 $40(%rip) +LBB0_251: WORD $0x937ffdce // asr x14, x14, #63 WORD $0xf90017ee // str x14, [sp, #40] WORD $0x9e6700ba // fmov d26, x5 @@ -1602,12 +1627,12 @@ LBB0_246: WORD $0x8b0001c0 // add x0, x14, x0 WORD $0x91010273 // add x19, x19, #64 WORD $0xa941bfe7 // ldp x7, x15, [sp, #24] -LBB0_247: +LBB0_252: WORD $0xf10101ee // subs x14, x15, #64 WORD $0xf90013ee // str x14, [sp, #32] WORD $0xf9000bef // str x15, [sp, #16] - WORD $0x5400176b // b.lt LBB0_255 $748(%rip) -LBB0_248: + WORD $0x5400176b // b.lt LBB0_260 $748(%rip) +LBB0_253: WORD $0xad40727d // ldp q29, q28, [x19] WORD $0xad416a7b // ldp q27, q26, [x19, #32] WORD $0x6e218fbe // cmeq.16b v30, v29, v1 @@ -1636,11 +1661,11 @@ LBB0_248: WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 WORD $0xaa0701cf // orr x15, x14, x7 - WORD $0xb500008f // cbnz x15, LBB0_250 $16(%rip) + WORD $0xb500008f // cbnz x15, LBB0_255 $16(%rip) WORD $0xf9000fff // str xzr, [sp, #24] WORD $0xd280000e // mov x14, #0 - WORD $0x1400000b // b LBB0_251 $44(%rip) -LBB0_250: + WORD $0x1400000b // b LBB0_256 $44(%rip) +LBB0_255: WORD $0x8a2701cf // bic x15, x14, x7 WORD $0xaa0f04f1 // orr x17, x7, x15, lsl #1 WORD $0x8a3101ce // bic x14, x14, x17 @@ -1651,7 +1676,7 @@ LBB0_250: WORD $0xd37ff9ce // lsl x14, x14, #1 WORD $0xd200f1ce // eor x14, x14, #0x5555555555555555 WORD $0x8a1101ce // and x14, x14, x17 -LBB0_251: +LBB0_256: WORD $0x6e208fbe // cmeq.16b v30, v29, v0 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 @@ -1682,47 +1707,47 @@ LBB0_251: WORD $0x9203e1d1 // and x17, x14, #0x2222222222222222 WORD $0x9202e1c5 // and x5, x14, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 - WORD $0xb200e3f9 // mov x25, #1229782938247303441 - WORD $0x9b197de7 // mul x7, x15, x25 - WORD $0xb201e3f8 // mov x24, #-8608480567731124088 - WORD $0xf2e11118 // movk x24, #2184, lsl #48 - WORD $0x9b187e34 // mul x20, x17, x24 - WORD $0xca1400e7 // eor x7, x7, x20 - WORD $0xb202e3f7 // mov x23, #4919131752989213764 - WORD $0xf2e08897 // movk x23, #1092, lsl #48 - WORD $0x9b177cb4 // mul x20, x5, x23 - WORD $0xb203e3f5 // mov x21, #2459565876494606882 - WORD $0xf2e04455 // movk x21, #546, lsl #48 - WORD $0x9b157dd5 // mul x21, x14, x21 - WORD $0xca150294 // eor x20, x20, x21 - WORD $0xca1400e7 // eor x7, x7, x20 - WORD $0xb203e3fe // mov lr, #2459565876494606882 - WORD $0x9b1e7df4 // mul x20, x15, lr + WORD $0xb200e3fa // mov x26, #1229782938247303441 + WORD $0x9b1a7de7 // mul x7, x15, x26 + WORD $0xb201e3f9 // mov x25, #-8608480567731124088 + WORD $0xf2e11119 // movk x25, #2184, lsl #48 WORD $0x9b197e35 // mul x21, x17, x25 - WORD $0xca150294 // eor x20, x20, x21 + WORD $0xca1500e7 // eor x7, x7, x21 + WORD $0xb202e3f8 // mov x24, #4919131752989213764 + WORD $0xf2e08898 // movk x24, #1092, lsl #48 WORD $0x9b187cb5 // mul x21, x5, x24 - WORD $0x9b177dd7 // mul x23, x14, x23 - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0xca150294 // eor x20, x20, x21 - WORD $0xb202e3f6 // mov x22, #4919131752989213764 - WORD $0x9b167df5 // mul x21, x15, x22 - WORD $0x9b1e7e37 // mul x23, x17, lr - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0x9b197cb7 // mul x23, x5, x25 + WORD $0xb203e3f6 // mov x22, #2459565876494606882 + WORD $0xf2e04456 // movk x22, #546, lsl #48 + WORD $0x9b167dd6 // mul x22, x14, x22 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0xca1500e7 // eor x7, x7, x21 + WORD $0xb203e3f4 // mov x20, #2459565876494606882 + WORD $0x9b147df5 // mul x21, x15, x20 + WORD $0x9b1a7e36 // mul x22, x17, x26 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0x9b197cb6 // mul x22, x5, x25 WORD $0x9b187dd8 // mul x24, x14, x24 - WORD $0xca1802f7 // eor x23, x23, x24 - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0xb201e3f7 // mov x23, #-8608480567731124088 - WORD $0x9b177def // mul x15, x15, x23 - WORD $0x9b167e31 // mul x17, x17, x22 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0xb202e3f7 // mov x23, #4919131752989213764 + WORD $0x9b177df6 // mul x22, x15, x23 + WORD $0x9b147e38 // mul x24, x17, x20 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0x9b1a7cb8 // mul x24, x5, x26 + WORD $0x9b197dd9 // mul x25, x14, x25 + WORD $0xca190318 // eor x24, x24, x25 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0xb201e3f8 // mov x24, #-8608480567731124088 + WORD $0x9b187def // mul x15, x15, x24 + WORD $0x9b177e31 // mul x17, x17, x23 WORD $0xca1101ef // eor x15, x15, x17 - WORD $0x9b1e7cb1 // mul x17, x5, lr - WORD $0x9b197dce // mul x14, x14, x25 + WORD $0x9b147cb1 // mul x17, x5, x20 + WORD $0x9b1a7dce // mul x14, x14, x26 WORD $0xca0e022e // eor x14, x17, x14 WORD $0xca0e01ee // eor x14, x15, x14 WORD $0x9200e0ef // and x15, x7, #0x1111111111111111 - WORD $0x9203e291 // and x17, x20, #0x2222222222222222 - WORD $0x9202e2a5 // and x5, x21, #0x4444444444444444 + WORD $0x9203e2b1 // and x17, x21, #0x2222222222222222 + WORD $0x9202e2c5 // and x5, x22, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 WORD $0xaa1101ef // orr x15, x15, x17 WORD $0xaa0e00ae // orr x14, x5, x14 @@ -1774,118 +1799,119 @@ LBB0_251: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0xd3607ce7 // lsl x7, x7, #32 - WORD $0xaa14c0e7 // orr x7, x7, x20, lsl #48 + WORD $0xaa15c0e7 // orr x7, x7, x21, lsl #48 WORD $0x53103e31 // lsl w17, w17, #16 WORD $0xaa1100f1 // orr x17, x7, x17 WORD $0xaa0f022f // orr x15, x17, x15 - WORD $0xea2e01f4 // bics x20, x15, x14 - WORD $0x54ffe900 // b.eq LBB0_246 $-736(%rip) + WORD $0xea2e01f5 // bics x21, x15, x14 + WORD $0x54ffe900 // b.eq LBB0_251 $-736(%rip) WORD $0x92f00007 // mov x7, #9223372036854775807 -LBB0_253: - WORD $0xd1000695 // sub x21, x20, #1 - WORD $0x8a0502af // and x15, x21, x5 +LBB0_258: + WORD $0xd10006b6 // sub x22, x21, #1 + WORD $0x8a0502cf // and x15, x22, x5 WORD $0x9e6701fa // fmov d26, x15 WORD $0x0e205b5a // cnt.8b v26, v26 WORD $0x2e303b5a // uaddlv.8b h26, v26 WORD $0x1e26034f // fmov w15, s26 WORD $0x8b0001ef // add x15, x15, x0 WORD $0xeb0601ff // cmp x15, x6 - WORD $0x54000729 // b.ls LBB0_272 $228(%rip) + WORD $0x54000729 // b.ls LBB0_277 $228(%rip) WORD $0x910004c6 // add x6, x6, #1 - WORD $0xea1402b4 // ands x20, x21, x20 - WORD $0x54fffea1 // b.ne LBB0_253 $-44(%rip) - WORD $0x17ffff3a // b LBB0_246 $-792(%rip) -LBB0_255: + WORD $0xea1502d5 // ands x21, x22, x21 + WORD $0x54fffea1 // b.ne LBB0_258 $-44(%rip) + WORD $0x17ffff3a // b LBB0_251 $-792(%rip) +LBB0_260: WORD $0xf10001ff // cmp x15, #0 - WORD $0x5400b44d // b.le LBB0_575 $5768(%rip) + WORD $0x5400b82d // b.le LBB0_588 $5892(%rip) WORD $0xaa0703f1 // mov x17, x7 WORD $0xad02dff7 // stp q23, q23, [sp, #80] WORD $0xad01dff7 // stp q23, q23, [sp, #48] WORD $0x92402e6e // and x14, x19, #0xfff WORD $0xf13f05df // cmp x14, #4033 - WORD $0x54000383 // b.lo LBB0_267 $112(%rip) + WORD $0x54000383 // b.lo LBB0_272 $112(%rip) WORD $0xf9400bee // ldr x14, [sp, #16] WORD $0xf10081c5 // subs x5, x14, #32 - WORD $0x540000a3 // b.lo LBB0_259 $20(%rip) + WORD $0x540000a3 // b.lo LBB0_264 $20(%rip) WORD $0xacc16e7a // ldp q26, q27, [x19], #32 WORD $0xad01effa // stp q26, q27, [sp, #48] WORD $0xaa0a03ee // mov x14, x10 - WORD $0x14000003 // b LBB0_260 $12(%rip) -LBB0_259: + WORD $0x14000003 // b LBB0_265 $12(%rip) +LBB0_264: WORD $0x9100c3ee // add x14, sp, #48 WORD $0xf9400be5 // ldr x5, [sp, #16] -LBB0_260: - WORD $0xf10040b4 // subs x20, x5, #16 - WORD $0x54000283 // b.lo LBB0_268 $80(%rip) +LBB0_265: + WORD $0xf10040b5 // subs x21, x5, #16 + WORD $0x54000283 // b.lo LBB0_273 $80(%rip) WORD $0x3cc1067a // ldr q26, [x19], #16 WORD $0x3c8105da // str q26, [x14], #16 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1002294 // subs x20, x20, #8 - WORD $0x54000222 // b.hs LBB0_269 $68(%rip) -LBB0_262: - WORD $0xf10010b4 // subs x20, x5, #4 - WORD $0x54000283 // b.lo LBB0_270 $80(%rip) -LBB0_263: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf10022b5 // subs x21, x21, #8 + WORD $0x54000222 // b.hs LBB0_274 $68(%rip) +LBB0_267: + WORD $0xf10010b5 // subs x21, x5, #4 + WORD $0x54000283 // b.lo LBB0_275 $80(%rip) +LBB0_268: WORD $0xb840466f // ldr w15, [x19], #4 WORD $0xb80045cf // str w15, [x14], #4 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1000a94 // subs x20, x20, #2 - WORD $0x54000222 // b.hs LBB0_271 $68(%rip) -LBB0_264: - WORD $0xb4000065 // cbz x5, LBB0_266 $12(%rip) -LBB0_265: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf1000ab5 // subs x21, x21, #2 + WORD $0x54000222 // b.hs LBB0_276 $68(%rip) +LBB0_269: + WORD $0xb4000065 // cbz x5, LBB0_271 $12(%rip) +LBB0_270: WORD $0x3940026f // ldrb w15, [x19] WORD $0x390001cf // strb w15, [x14] -LBB0_266: +LBB0_271: WORD $0x9100c3f3 // add x19, sp, #48 -LBB0_267: - WORD $0x5280007a // mov w26, #3 +LBB0_272: + WORD $0x5280007b // mov w27, #3 WORD $0xaa1103e7 // mov x7, x17 - WORD $0x17ffff21 // b LBB0_248 $-892(%rip) -LBB0_268: - WORD $0xf10020b4 // subs x20, x5, #8 - WORD $0x54fffe23 // b.lo LBB0_262 $-60(%rip) -LBB0_269: + WORD $0x17ffff21 // b LBB0_253 $-892(%rip) +LBB0_273: + WORD $0xf10020b5 // subs x21, x5, #8 + WORD $0x54fffe23 // b.lo LBB0_267 $-60(%rip) +LBB0_274: WORD $0xf840866f // ldr x15, [x19], #8 WORD $0xf80085cf // str x15, [x14], #8 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1001294 // subs x20, x20, #4 - WORD $0x54fffdc2 // b.hs LBB0_263 $-72(%rip) -LBB0_270: - WORD $0xf10008b4 // subs x20, x5, #2 - WORD $0x54fffe23 // b.lo LBB0_264 $-60(%rip) -LBB0_271: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf10012b5 // subs x21, x21, #4 + WORD $0x54fffdc2 // b.hs LBB0_268 $-72(%rip) +LBB0_275: + WORD $0xf10008b5 // subs x21, x5, #2 + WORD $0x54fffe23 // b.lo LBB0_269 $-60(%rip) +LBB0_276: WORD $0x7840266f // ldrh w15, [x19], #2 WORD $0x780025cf // strh w15, [x14], #2 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xb5fffdd4 // cbnz x20, LBB0_265 $-72(%rip) - WORD $0x17ffffef // b LBB0_266 $-68(%rip) -LBB0_272: - WORD $0xf940076e // ldr x14, [x27, #8] - WORD $0xdac0028f // rbit x15, x20 + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xb5fffdd5 // cbnz x21, LBB0_270 $-72(%rip) + WORD $0x17ffffef // b LBB0_271 $-68(%rip) +LBB0_277: + WORD $0xf94007ce // ldr x14, [lr, #8] + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 WORD $0xf9400bf1 // ldr x17, [sp, #16] WORD $0xcb1101ef // sub x15, x15, x17 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910005cf // add x15, x14, #1 WORD $0xf900002f // str x15, [x1] - WORD $0xf9400771 // ldr x17, [x27, #8] + WORD $0xf94007d1 // ldr x17, [lr, #8] WORD $0xeb1101ff // cmp x15, x17 WORD $0x9a8e2633 // csinc x19, x17, x14, hs WORD $0x12800011 // mov w17, #-1 WORD $0xf9000033 // str x19, [x1] WORD $0xda9f9100 // csinv x0, x8, xzr, ls - WORD $0xb6f80560 // tbz x0, #63, LBB0_284 $172(%rip) - WORD $0x14000563 // b LBB0_578 $5516(%rip) -LBB0_273: - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0xb6f878c0 // tbz x0, #63, LBB0_480 $3864(%rip) + WORD $0x14000582 // b LBB0_591 $5640(%rip) +LBB0_278: + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xcb1301ce // sub x14, x14, x19 WORD $0xf10041df // cmp x14, #16 - WORD $0x540001e3 // b.lo LBB0_276 $60(%rip) -LBB0_274: - WORD $0x3cf36bda // ldr q26, [lr, x19] + WORD $0x54000223 // b.lo LBB0_282 $68(%rip) + WORD $0xd2800000 // mov x0, #0 +LBB0_280: + WORD $0x3cf36a9a // ldr q26, [x20, x19] WORD $0x6e348f5b // cmeq.16b v27, v26, v20 WORD $0x4e321f5a // and.16b v26, v26, v18 WORD $0x6e358f5a // cmeq.16b v26, v26, v21 @@ -1893,54 +1919,51 @@ LBB0_274: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260340 // fmov w0, s26 - WORD $0x350002a0 // cbnz w0, LBB0_282 $84(%rip) + WORD $0x1e260345 // fmov w5, s26 + WORD $0x35000bc5 // cbnz w5, LBB0_299 $376(%rip) WORD $0xd10041ce // sub x14, x14, #16 WORD $0x91004273 // add x19, x19, #16 + WORD $0x91004000 // add x0, x0, #16 WORD $0xf1003ddf // cmp x14, #15 - WORD $0x54fffe68 // b.hi LBB0_274 $-52(%rip) -LBB0_276: - WORD $0x8b1303c0 // add x0, lr, x19 - WORD $0xb4ff79ee // cbz x14, LBB0_131 $-4292(%rip) + WORD $0x54fffe48 // b.hi LBB0_280 $-56(%rip) +LBB0_282: + WORD $0x8b130280 // add x0, x20, x19 + WORD $0xb400024e // cbz x14, LBB0_289 $72(%rip) WORD $0x8b0e0005 // add x5, x0, x14 - WORD $0xcb1e0013 // sub x19, x0, lr -LBB0_278: + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 +LBB0_284: WORD $0x39400006 // ldrb w6, [x0] WORD $0x7100b0df // cmp w6, #44 - WORD $0x54ff7960 // b.eq LBB0_132 $-4308(%rip) - WORD $0x7101f4df // cmp w6, #125 - WORD $0x54ff7920 // b.eq LBB0_132 $-4316(%rip) + WORD $0x9ac6218f // lsl x15, x12, x6 + WORD $0x8a1101ef // and x15, x15, x17 + WORD $0xfa4099e4 // ccmp x15, #0, #4, ls + WORD $0x54000121 // b.ne LBB0_289 $36(%rip) WORD $0x710174df // cmp w6, #93 - WORD $0x54ff78e0 // b.eq LBB0_132 $-4324(%rip) + WORD $0x540000e0 // b.eq LBB0_289 $28(%rip) + WORD $0x7101f4df // cmp w6, #125 + WORD $0x540000a0 // b.eq LBB0_289 $20(%rip) WORD $0x91000400 // add x0, x0, #1 - WORD $0x91000673 // add x19, x19, #1 WORD $0xf10005ce // subs x14, x14, #1 - WORD $0x54fffec1 // b.ne LBB0_278 $-40(%rip) - WORD $0x17fffbc0 // b LBB0_130 $-4352(%rip) -LBB0_282: - WORD $0x5ac0000e // rbit w14, w0 - WORD $0x5ac011ce // clz w14, w14 - WORD $0x8b1301d3 // add x19, x14, x19 -LBB0_283: + WORD $0x54fffe81 // b.ne LBB0_284 $-48(%rip) + WORD $0xaa0503e0 // mov x0, x5 +LBB0_289: + WORD $0xcb140013 // sub x19, x0, x20 WORD $0xf9000033 // str x19, [x1] - WORD $0xaa0803e0 // mov x0, x8 - WORD $0xeb07011f // cmp x8, x7 - WORD $0x5400a742 // b.hs LBB0_578 $5352(%rip) -LBB0_284: - WORD $0xf9400056 // ldr x22, [x2] - WORD $0xaa0b03e0 // mov x0, x11 - WORD $0xb5ff2ef6 // cbnz x22, LBB0_1 $-6692(%rip) - WORD $0x14000536 // b LBB0_578 $5336(%rip) -LBB0_285: - WORD $0xf9400760 // ldr x0, [x27, #8] + WORD $0x5280007b // mov w27, #3 + WORD $0x92f00007 // mov x7, #9223372036854775807 + WORD $0x12800011 // mov w17, #-1 + WORD $0x14000395 // b LBB0_479 $3668(%rip) +LBB0_290: + WORD $0xf94007c0 // ldr x0, [lr, #8] WORD $0xcb13000e // sub x14, x0, x19 WORD $0xf10081df // cmp x14, #32 - WORD $0x5400552b // b.lt LBB0_423 $2724(%rip) + WORD $0x5400582b // b.lt LBB0_433 $2820(%rip) WORD $0xd280000e // mov x14, #0 WORD $0xd2800005 // mov x5, #0 WORD $0xcb080000 // sub x0, x0, x8 WORD $0x528003f3 // mov w19, #31 -LBB0_287: +LBB0_292: WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x3cc011fa // ldur q26, [x15, #1] WORD $0x3cc111fb // ldur q27, [x15, #17] @@ -1948,30 +1971,30 @@ LBB0_287: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260395 // fmov w21, s28 + WORD $0x1e260396 // fmov w22, s28 WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 WORD $0x1e26038f // fmov w15, s28 - WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x33103df6 // bfi w22, w15, #16, #16 WORD $0x6e218f5a // cmeq.16b v26, v26, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x6e218f7a // cmeq.16b v26, v27, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df4 // bfi w20, w15, #16, #16 - WORD $0x7100029f // cmp w20, #0 + WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x710002bf // cmp w21, #0 WORD $0xfa4008a0 // ccmp x5, #0, #0, eq - WORD $0x540001a0 // b.eq LBB0_289 $52(%rip) - WORD $0x0a25028f // bic w15, w20, w5 + WORD $0x540001a0 // b.eq LBB0_294 $52(%rip) + WORD $0x0a2502af // bic w15, w21, w5 WORD $0x2a0f04b1 // orr w17, w5, w15, lsl #1 - WORD $0x0a040285 // and w5, w20, w4 + WORD $0x0a0402a5 // and w5, w21, w4 WORD $0x0a3100a5 // bic w5, w5, w17 WORD $0x2b0f00af // adds w15, w5, w15 WORD $0x1a9f37e5 // cset w5, hs @@ -1979,38 +2002,65 @@ LBB0_287: WORD $0x0a1101ef // and w15, w15, w17 WORD $0x12800011 // mov w17, #-1 WORD $0x2a2f03ef // mvn w15, w15 - WORD $0x8a1501f5 // and x21, x15, x21 - WORD $0x14000002 // b LBB0_290 $8(%rip) -LBB0_289: + WORD $0x8a1601f6 // and x22, x15, x22 + WORD $0x14000002 // b LBB0_295 $8(%rip) +LBB0_294: WORD $0xd2800005 // mov x5, #0 -LBB0_290: - WORD $0xb5ff6bb5 // cbnz x21, LBB0_120 $-4748(%rip) +LBB0_295: + WORD $0xb5ff68b6 // cbnz x22, LBB0_120 $-4844(%rip) WORD $0x910081ce // add x14, x14, #32 WORD $0xd1008273 // sub x19, x19, #32 WORD $0x8b13000f // add x15, x0, x19 WORD $0xf100fdff // cmp x15, #63 - WORD $0x54fffa4c // b.gt LBB0_287 $-184(%rip) - WORD $0xb5008645 // cbnz x5, LBB0_518 $4296(%rip) + WORD $0x54fffa4c // b.gt LBB0_292 $-184(%rip) + WORD $0xb5008a25 // cbnz x5, LBB0_531 $4420(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910005e5 // add x5, x15, #1 WORD $0xaa2e03ee // mvn x14, x14 WORD $0x8b0001ce // add x14, x14, x0 WORD $0xf10005df // cmp x14, #1 - WORD $0x54004e4a // b.ge LBB0_424 $2504(%rip) - WORD $0x140004f6 // b LBB0_577 $5080(%rip) -LBB0_294: - WORD $0xaa1903e5 // mov x5, x25 + WORD $0x5400514a // b.ge LBB0_434 $2600(%rip) + WORD $0x14000515 // b LBB0_590 $5204(%rip) +LBB0_299: + WORD $0x5ac000ae // rbit w14, w5 + WORD $0x5ac011ce // clz w14, w14 + WORD $0x8b1301d3 // add x19, x14, x19 + WORD $0xf9000033 // str x19, [x1] + WORD $0xf100067f // cmp x19, #1 + WORD $0x54006a0b // b.lt LBB0_479 $3392(%rip) + WORD $0x8b0001ce // add x14, x14, x0 +LBB0_301: + WORD $0x386e68cf // ldrb w15, [x6, x14] + WORD $0x710081ff // cmp w15, #32 + WORD $0x9acf218f // lsl x15, x12, x15 + WORD $0x8a0d01ef // and x15, x15, x13 + WORD $0xfa4099e4 // ccmp x15, #0, #4, ls + WORD $0x54000120 // b.eq LBB0_303 $36(%rip) + WORD $0x8b0e010f // add x15, x8, x14 + WORD $0xf900002f // str x15, [x1] + WORD $0xd10005ce // sub x14, x14, #1 + WORD $0x8b0e0100 // add x0, x8, x14 + WORD $0x9100080f // add x15, x0, #2 + WORD $0xf10005ff // cmp x15, #1 + WORD $0x54fffe8c // b.gt LBB0_301 $-48(%rip) + WORD $0x17fffb65 // b LBB0_137 $-4716(%rip) +LBB0_303: + WORD $0x8b0e010e // add x14, x8, x14 + WORD $0x910005d3 // add x19, x14, #1 + WORD $0x1400033e // b LBB0_479 $3320(%rip) +LBB0_304: + WORD $0xaa1a03e5 // mov x5, x26 WORD $0x9280000e // mov x14, #-1 - WORD $0xb5ff8b40 // cbnz x0, LBB0_169 $-3736(%rip) - WORD $0x14000492 // b LBB0_547 $4680(%rip) -LBB0_295: - WORD $0x540091a0 // b.eq LBB0_545 $4660(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x540055a3 // b.lo LBB0_438 $2740(%rip) + WORD $0xb5ff8840 // cbnz x0, LBB0_174 $-3832(%rip) + WORD $0x14000499 // b LBB0_560 $4708(%rip) +LBB0_305: + WORD $0x54009280 // b.eq LBB0_558 $4688(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x540055a3 // b.lo LBB0_448 $2740(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 -LBB0_298: - WORD $0x8b1303ce // add x14, lr, x19 +LBB0_308: + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad4071dd // ldp q29, q28, [x14] WORD $0xad4169db // ldp q27, q26, [x14, #32] WORD $0x6e208fbe // cmeq.16b v30, v29, v0 @@ -2042,30 +2092,30 @@ LBB0_298: WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d4 // fmov w20, s30 + WORD $0x1e2603d5 // fmov w21, s30 WORD $0x6e218f7e // cmeq.16b v30, v27, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d5 // fmov w21, s30 + WORD $0x1e2603d6 // fmov w22, s30 WORD $0x6e218f5e // cmeq.16b v30, v26, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d7 // fmov w23, s30 + WORD $0x1e2603d8 // fmov w24, s30 WORD $0xd3607e31 // lsl x17, x17, #32 WORD $0xaa05c231 // orr x17, x17, x5, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607eaf // lsl x15, x21, #32 - WORD $0xaa17c1ef // orr x15, x15, x23, lsl #48 - WORD $0x53103e91 // lsl w17, w20, #16 + WORD $0xd3607ecf // lsl x15, x22, #32 + WORD $0xaa18c1ef // orr x15, x15, x24, lsl #48 + WORD $0x53103eb1 // lsl w17, w21, #16 WORD $0xaa1101ef // orr x15, x15, x17 WORD $0xaa0701e5 // orr x5, x15, x7 - WORD $0xb5000445 // cbnz x5, LBB0_303 $136(%rip) - WORD $0xb50004c6 // cbnz x6, LBB0_304 $152(%rip) -LBB0_300: + WORD $0xb5000445 // cbnz x5, LBB0_313 $136(%rip) + WORD $0xb50004c6 // cbnz x6, LBB0_314 $152(%rip) +LBB0_310: WORD $0x6e3d349d // cmhi.16b v29, v4, v29 WORD $0x4e221fbd // and.16b v29, v29, v2 WORD $0x4e0303bd // tbl.16b v29, { v29 }, v3 @@ -2091,20 +2141,20 @@ LBB0_300: WORD $0x53103e31 // lsl w17, w17, #16 WORD $0xaa1100b1 // orr x17, x5, x17 WORD $0xaa0f0225 // orr x5, x17, x15 - WORD $0xb500030e // cbnz x14, LBB0_305 $96(%rip) - WORD $0xb5008845 // cbnz x5, LBB0_551 $4360(%rip) - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xb500030e // cbnz x14, LBB0_315 $96(%rip) + WORD $0xb5008925 // cbnz x5, LBB0_564 $4388(%rip) + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 - WORD $0x54fff568 // b.hi LBB0_298 $-340(%rip) - WORD $0x14000229 // b LBB0_430 $2212(%rip) -LBB0_303: + WORD $0xf100feff // cmp x23, #63 + WORD $0x54fff568 // b.hi LBB0_308 $-340(%rip) + WORD $0x14000229 // b LBB0_440 $2212(%rip) +LBB0_313: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011ef // clz x15, x15 WORD $0x8b1301ef // add x15, x15, x19 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_304: +LBB0_314: WORD $0x8a2600af // bic x15, x5, x6 WORD $0xaa0f04d1 // orr x17, x6, x15, lsl #1 WORD $0x8a3100a5 // bic x5, x5, x17 @@ -2115,9 +2165,9 @@ LBB0_304: WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 WORD $0x8a1101ef // and x15, x15, x17 WORD $0x8a2f01ce // bic x14, x14, x15 - WORD $0x5280007a // mov w26, #3 - WORD $0x17ffffd0 // b LBB0_300 $-192(%rip) -LBB0_305: + WORD $0x5280007b // mov w27, #3 + WORD $0x17ffffd0 // b LBB0_310 $-192(%rip) +LBB0_315: WORD $0xdac001ce // rbit x14, x14 WORD $0xdac011ce // clz x14, x14 WORD $0xdac000af // rbit x15, x5 @@ -2125,33 +2175,33 @@ LBB0_305: WORD $0xeb0e00bf // cmp x5, x14 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x54008f03 // b.lo LBB0_574 $4576(%rip) -LBB0_306: + WORD $0x54008fe3 // b.lo LBB0_587 $4604(%rip) +LBB0_316: WORD $0x8b1301ce // add x14, x14, x19 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6ffe7d3 // tbz x19, #63, LBB0_283 $-776(%rip) - WORD $0x14000413 // b LBB0_544 $4172(%rip) -LBB0_307: + WORD $0xb6f85833 // tbz x19, #63, LBB0_478 $2820(%rip) + WORD $0x1400041a // b LBB0_557 $4200(%rip) +LBB0_317: WORD $0x3940040e // ldrb w14, [x0, #1] WORD $0x5100b9ce // sub w14, w14, #46 WORD $0x7100dddf // cmp w14, #55 - WORD $0x54ff78e8 // b.hi LBB0_161 $-4324(%rip) + WORD $0x54ff75e8 // b.hi LBB0_166 $-4420(%rip) WORD $0x9ace218f // lsl x15, x12, x14 WORD $0x5280002e // mov w14, #1 WORD $0xb20903f1 // mov x17, #36028797027352576 WORD $0xf2800031 // movk x17, #1 WORD $0xea1101ff // tst x15, x17 WORD $0x12800011 // mov w17, #-1 - WORD $0x54001420 // b.eq LBB0_355 $644(%rip) -LBB0_309: - WORD $0xf100433f // cmp x25, #16 - WORD $0x54005143 // b.lo LBB0_460 $2600(%rip) - WORD $0xd2800015 // mov x21, #0 + WORD $0x54001420 // b.eq LBB0_365 $644(%rip) +LBB0_319: + WORD $0xf100435f // cmp x26, #16 + WORD $0x54005143 // b.lo LBB0_470 $2600(%rip) + WORD $0xd2800016 // mov x22, #0 WORD $0xd2800005 // mov x5, #0 WORD $0x92800006 // mov x6, #-1 - WORD $0x92800016 // mov x22, #-1 - WORD $0x9280001a // mov x26, #-1 -LBB0_311: + WORD $0x92800017 // mov x23, #-1 + WORD $0x9280001b // mov x27, #-1 +LBB0_321: WORD $0x3ce5681a // ldr q26, [x0, x5] WORD $0x6e258f5b // cmeq.16b v27, v26, v5 WORD $0x6e268f5c // cmeq.16b v28, v26, v6 @@ -2184,210 +2234,210 @@ LBB0_311: WORD $0x32103dce // orr w14, w14, #0xffff0000 WORD $0x5ac001ce // rbit w14, w14 WORD $0x5ac011ce // clz w14, w14 - WORD $0x12800014 // mov w20, #-1 - WORD $0x1ace2294 // lsl w20, w20, w14 - WORD $0x0a3401f7 // bic w23, w15, w20 - WORD $0x0a340238 // bic w24, w17, w20 - WORD $0x0a3400f4 // bic w20, w7, w20 + WORD $0x12800015 // mov w21, #-1 + WORD $0x1ace22b5 // lsl w21, w21, w14 + WORD $0x0a3501f8 // bic w24, w15, w21 + WORD $0x0a350239 // bic w25, w17, w21 + WORD $0x0a3500f5 // bic w21, w7, w21 WORD $0x710041df // cmp w14, #16 - WORD $0x1a9701f7 // csel w23, w15, w23, eq - WORD $0x1a980238 // csel w24, w17, w24, eq - WORD $0x1a9400f4 // csel w20, w7, w20, eq - WORD $0x510006ef // sub w15, w23, #1 - WORD $0x6a1701ef // ands w15, w15, w23 - WORD $0x540035a1 // b.ne LBB0_422 $1716(%rip) + WORD $0x1a9801f8 // csel w24, w15, w24, eq + WORD $0x1a990239 // csel w25, w17, w25, eq + WORD $0x1a9500f5 // csel w21, w7, w21, eq WORD $0x5100070f // sub w15, w24, #1 WORD $0x6a1801ef // ands w15, w15, w24 - WORD $0x54003541 // b.ne LBB0_422 $1704(%rip) - WORD $0x5100068f // sub w15, w20, #1 - WORD $0x6a1401ef // ands w15, w15, w20 - WORD $0x540034e1 // b.ne LBB0_422 $1692(%rip) - WORD $0x340000d7 // cbz w23, LBB0_317 $24(%rip) - WORD $0x5ac002ef // rbit w15, w23 - WORD $0x5ac011f7 // clz w23, w15 - WORD $0xb100075f // cmn x26, #1 - WORD $0x540038a1 // b.ne LBB0_431 $1812(%rip) - WORD $0x8b1700ba // add x26, x5, x23 -LBB0_317: - WORD $0x340000d8 // cbz w24, LBB0_320 $24(%rip) + WORD $0x540035a1 // b.ne LBB0_432 $1716(%rip) + WORD $0x5100072f // sub w15, w25, #1 + WORD $0x6a1901ef // ands w15, w15, w25 + WORD $0x54003541 // b.ne LBB0_432 $1704(%rip) + WORD $0x510006af // sub w15, w21, #1 + WORD $0x6a1501ef // ands w15, w15, w21 + WORD $0x540034e1 // b.ne LBB0_432 $1692(%rip) + WORD $0x340000d8 // cbz w24, LBB0_327 $24(%rip) WORD $0x5ac0030f // rbit w15, w24 - WORD $0x5ac011f7 // clz w23, w15 - WORD $0xb10006df // cmn x22, #1 - WORD $0x540037e1 // b.ne LBB0_431 $1788(%rip) - WORD $0x8b1700b6 // add x22, x5, x23 -LBB0_320: - WORD $0x340000d4 // cbz w20, LBB0_323 $24(%rip) - WORD $0x5ac0028f // rbit w15, w20 - WORD $0x5ac011f4 // clz w20, w15 + WORD $0x5ac011f8 // clz w24, w15 + WORD $0xb100077f // cmn x27, #1 + WORD $0x540038a1 // b.ne LBB0_441 $1812(%rip) + WORD $0x8b1800bb // add x27, x5, x24 +LBB0_327: + WORD $0x340000d9 // cbz w25, LBB0_330 $24(%rip) + WORD $0x5ac0032f // rbit w15, w25 + WORD $0x5ac011f8 // clz w24, w15 + WORD $0xb10006ff // cmn x23, #1 + WORD $0x540037e1 // b.ne LBB0_441 $1788(%rip) + WORD $0x8b1800b7 // add x23, x5, x24 +LBB0_330: + WORD $0x340000d5 // cbz w21, LBB0_333 $24(%rip) + WORD $0x5ac002af // rbit w15, w21 + WORD $0x5ac011f5 // clz w21, w15 WORD $0xb10004df // cmn x6, #1 - WORD $0x540047c1 // b.ne LBB0_459 $2296(%rip) - WORD $0x8b1400a6 // add x6, x5, x20 -LBB0_323: + WORD $0x540047c1 // b.ne LBB0_469 $2296(%rip) + WORD $0x8b1500a6 // add x6, x5, x21 +LBB0_333: WORD $0x710041df // cmp w14, #16 - WORD $0x54000601 // b.ne LBB0_341 $192(%rip) + WORD $0x54000601 // b.ne LBB0_351 $192(%rip) WORD $0x910040a5 // add x5, x5, #16 - WORD $0xd10042b5 // sub x21, x21, #16 - WORD $0x8b15032e // add x14, x25, x21 + WORD $0xd10042d6 // sub x22, x22, #16 + WORD $0x8b16034e // add x14, x26, x22 WORD $0xf1003ddf // cmp x14, #15 - WORD $0x54fff6c8 // b.hi LBB0_311 $-296(%rip) - WORD $0x8b050015 // add x21, x0, x5 - WORD $0xeb05033f // cmp x25, x5 + WORD $0x54fff6c8 // b.hi LBB0_321 $-296(%rip) + WORD $0x8b050016 // add x22, x0, x5 + WORD $0xeb05035f // cmp x26, x5 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x54000540 // b.eq LBB0_342 $168(%rip) -LBB0_326: - WORD $0x8b0e02a5 // add x5, x21, x14 - WORD $0xcb0802af // sub x15, x21, x8 - WORD $0xcb1e01f9 // sub x25, x15, lr - WORD $0xaa1503fe // mov lr, x21 - WORD $0x14000006 // b LBB0_329 $24(%rip) -LBB0_327: - WORD $0xd100073a // sub x26, x25, #1 -LBB0_328: - WORD $0x91000739 // add x25, x25, #1 - WORD $0xaa1e03f5 // mov x21, lr + WORD $0x54000540 // b.eq LBB0_352 $168(%rip) +LBB0_336: + WORD $0x8b0e02c5 // add x5, x22, x14 + WORD $0xcb0802cf // sub x15, x22, x8 + WORD $0xcb1401f4 // sub x20, x15, x20 + WORD $0xaa1603fa // mov x26, x22 + WORD $0x14000006 // b LBB0_339 $24(%rip) +LBB0_337: + WORD $0xd100069b // sub x27, x20, #1 +LBB0_338: + WORD $0x91000694 // add x20, x20, #1 + WORD $0xaa1a03f6 // mov x22, x26 WORD $0xd10005ce // sub x14, x14, #1 - WORD $0xb4000c2e // cbz x14, LBB0_363 $388(%rip) -LBB0_329: - WORD $0x384017d4 // ldrb w20, [lr], #1 - WORD $0x5100c28f // sub w15, w20, #48 + WORD $0xb4000c2e // cbz x14, LBB0_373 $388(%rip) +LBB0_339: + WORD $0x38401755 // ldrb w21, [x26], #1 + WORD $0x5100c2af // sub w15, w21, #48 WORD $0x710029ff // cmp w15, #10 - WORD $0x54ffff23 // b.lo LBB0_328 $-28(%rip) - WORD $0x7100b69f // cmp w20, #45 - WORD $0x5400014d // b.le LBB0_335 $40(%rip) - WORD $0x7101969f // cmp w20, #101 - WORD $0x54000200 // b.eq LBB0_339 $64(%rip) - WORD $0x7101169f // cmp w20, #69 - WORD $0x540001c0 // b.eq LBB0_339 $56(%rip) - WORD $0x7100ba9f // cmp w20, #46 - WORD $0x54000281 // b.ne LBB0_342 $80(%rip) - WORD $0xb100075f // cmn x26, #1 - WORD $0x54fffdc0 // b.eq LBB0_327 $-72(%rip) - WORD $0x1400016d // b LBB0_421 $1460(%rip) -LBB0_335: - WORD $0x7100ae9f // cmp w20, #43 - WORD $0x54000060 // b.eq LBB0_337 $12(%rip) - WORD $0x7100b69f // cmp w20, #45 - WORD $0x540001a1 // b.ne LBB0_342 $52(%rip) -LBB0_337: + WORD $0x54ffff23 // b.lo LBB0_338 $-28(%rip) + WORD $0x7100b6bf // cmp w21, #45 + WORD $0x5400014d // b.le LBB0_345 $40(%rip) + WORD $0x710196bf // cmp w21, #101 + WORD $0x54000200 // b.eq LBB0_349 $64(%rip) + WORD $0x710116bf // cmp w21, #69 + WORD $0x540001c0 // b.eq LBB0_349 $56(%rip) + WORD $0x7100babf // cmp w21, #46 + WORD $0x54000281 // b.ne LBB0_352 $80(%rip) + WORD $0xb100077f // cmn x27, #1 + WORD $0x54fffdc0 // b.eq LBB0_337 $-72(%rip) + WORD $0x1400016d // b LBB0_431 $1460(%rip) +LBB0_345: + WORD $0x7100aebf // cmp w21, #43 + WORD $0x54000060 // b.eq LBB0_347 $12(%rip) + WORD $0x7100b6bf // cmp w21, #45 + WORD $0x540001a1 // b.ne LBB0_352 $52(%rip) +LBB0_347: WORD $0xb10004df // cmn x6, #1 - WORD $0x54002ce1 // b.ne LBB0_421 $1436(%rip) - WORD $0xd1000726 // sub x6, x25, #1 - WORD $0x17ffffe6 // b LBB0_328 $-104(%rip) -LBB0_339: - WORD $0xb10006df // cmn x22, #1 - WORD $0x54002c61 // b.ne LBB0_421 $1420(%rip) - WORD $0xd1000736 // sub x22, x25, #1 - WORD $0x17ffffe2 // b LBB0_328 $-120(%rip) -LBB0_341: + WORD $0x54002ce1 // b.ne LBB0_431 $1436(%rip) + WORD $0xd1000686 // sub x6, x20, #1 + WORD $0x17ffffe6 // b LBB0_338 $-104(%rip) +LBB0_349: + WORD $0xb10006ff // cmn x23, #1 + WORD $0x54002c61 // b.ne LBB0_431 $1420(%rip) + WORD $0xd1000697 // sub x23, x20, #1 + WORD $0x17ffffe2 // b LBB0_338 $-120(%rip) +LBB0_351: WORD $0x8b2e400e // add x14, x0, w14, uxtw - WORD $0x8b0501d5 // add x21, x14, x5 + WORD $0x8b0501d6 // add x22, x14, x5 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 -LBB0_342: +LBB0_352: WORD $0x9280000e // mov x14, #-1 - WORD $0xb4007c3a // cbz x26, LBB0_571 $3972(%rip) -LBB0_343: - WORD $0xb4007c06 // cbz x6, LBB0_571 $3968(%rip) - WORD $0xb4007bf6 // cbz x22, LBB0_571 $3964(%rip) - WORD $0xcb0002ae // sub x14, x21, x0 + WORD $0xb4007d1b // cbz x27, LBB0_584 $4000(%rip) +LBB0_353: + WORD $0xb4007ce6 // cbz x6, LBB0_584 $3996(%rip) + WORD $0xb4007cd7 // cbz x23, LBB0_584 $3992(%rip) + WORD $0xcb0002ce // sub x14, x22, x0 WORD $0xd10005c0 // sub x0, x14, #1 - WORD $0xeb00035f // cmp x26, x0 - WORD $0x540002e0 // b.eq LBB0_354 $92(%rip) + WORD $0xeb00037f // cmp x27, x0 + WORD $0x540002e0 // b.eq LBB0_364 $92(%rip) WORD $0xeb0000df // cmp x6, x0 - WORD $0x540002a0 // b.eq LBB0_354 $84(%rip) - WORD $0xeb0002df // cmp x22, x0 - WORD $0x54000260 // b.eq LBB0_354 $76(%rip) + WORD $0x540002a0 // b.eq LBB0_364 $84(%rip) + WORD $0xeb0002ff // cmp x23, x0 + WORD $0x54000260 // b.eq LBB0_364 $76(%rip) WORD $0xf10004cf // subs x15, x6, #1 - WORD $0x5400006b // b.lt LBB0_350 $12(%rip) - WORD $0xeb0f02df // cmp x22, x15 - WORD $0x54007a81 // b.ne LBB0_572 $3920(%rip) -LBB0_350: - WORD $0xaa160340 // orr x0, x26, x22 - WORD $0xb7f80060 // tbnz x0, #63, LBB0_352 $12(%rip) - WORD $0xeb16035f // cmp x26, x22 - WORD $0x54007a4a // b.ge LBB0_573 $3912(%rip) -LBB0_352: + WORD $0x5400006b // b.lt LBB0_360 $12(%rip) + WORD $0xeb0f02ff // cmp x23, x15 + WORD $0x54007b61 // b.ne LBB0_585 $3948(%rip) +LBB0_360: + WORD $0xaa170360 // orr x0, x27, x23 + WORD $0xb7f80060 // tbnz x0, #63, LBB0_362 $12(%rip) + WORD $0xeb17037f // cmp x27, x23 + WORD $0x54007b2a // b.ge LBB0_586 $3940(%rip) +LBB0_362: WORD $0xd37ffc0f // lsr x15, x0, #63 WORD $0x520001ef // eor w15, w15, #0x1 - WORD $0xd10006d1 // sub x17, x22, #1 - WORD $0xeb11035f // cmp x26, x17 + WORD $0xd10006f1 // sub x17, x23, #1 + WORD $0xeb11037f // cmp x27, x17 WORD $0x1a9f17f1 // cset w17, eq WORD $0x6a1101ff // tst w15, w17 - WORD $0xda9601ce // csinv x14, x14, x22, eq -LBB0_353: + WORD $0xda9701ce // csinv x14, x14, x23, eq +LBB0_363: WORD $0x12800011 // mov w17, #-1 - WORD $0xb6f8008e // tbz x14, #63, LBB0_355 $16(%rip) - WORD $0x140003c5 // b LBB0_571 $3860(%rip) -LBB0_354: + WORD $0xb6f8008e // tbz x14, #63, LBB0_365 $16(%rip) + WORD $0x140003cc // b LBB0_584 $3888(%rip) +LBB0_364: WORD $0xcb0e03ee // neg x14, x14 - WORD $0xb7f8786e // tbnz x14, #63, LBB0_571 $3852(%rip) -LBB0_355: + WORD $0xb7f8794e // tbnz x14, #63, LBB0_584 $3880(%rip) +LBB0_365: WORD $0x8b1301d3 // add x19, x14, x19 WORD $0xf9000033 // str x19, [x1] WORD $0xaa0803e0 // mov x0, x8 WORD $0xeb07011f // cmp x8, x7 - WORD $0x5280007a // mov w26, #3 - WORD $0x54ffd203 // b.lo LBB0_284 $-1472(%rip) - WORD $0x140003c8 // b LBB0_578 $3872(%rip) -LBB0_356: - WORD $0xb5003d85 // cbnz x5, LBB0_461 $1968(%rip) + WORD $0x5280007b // mov w27, #3 + WORD $0x54004263 // b.lo LBB0_480 $2124(%rip) + WORD $0x140003cf // b LBB0_591 $3900(%rip) +LBB0_366: + WORD $0xb5003d85 // cbnz x5, LBB0_471 $1968(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910005e5 // add x5, x15, #1 WORD $0xaa2e03ee // mvn x14, x14 WORD $0x8b0001ce // add x14, x14, x0 WORD $0xf10005df // cmp x14, #1 - WORD $0x54003f2a // b.ge LBB0_464 $2020(%rip) - WORD $0x140003bf // b LBB0_577 $3836(%rip) -LBB0_358: + WORD $0x54003f2a // b.ge LBB0_474 $2020(%rip) + WORD $0x140003c6 // b LBB0_590 $3864(%rip) +LBB0_368: WORD $0x5ac001ee // rbit w14, w15 WORD $0x5ac011ce // clz w14, w14 - WORD $0xaa3a03ef // mvn x15, x26 + WORD $0xaa3b03ef // mvn x15, x27 WORD $0xcb0e01ee // sub x14, x15, x14 - WORD $0x5280007a // mov w26, #3 - WORD $0x17fffb40 // b LBB0_180 $-4864(%rip) -LBB0_359: - WORD $0x8b1303c5 // add x5, lr, x19 + WORD $0x5280007b // mov w27, #3 + WORD $0x17fffb28 // b LBB0_185 $-4960(%rip) +LBB0_369: + WORD $0x8b130285 // add x5, x20, x19 WORD $0xf10005df // cmp x14, #1 - WORD $0x54003dea // b.ge LBB0_464 $1980(%rip) - WORD $0x140003b5 // b LBB0_577 $3796(%rip) -LBB0_360: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400001a // b LBB0_367 $104(%rip) -LBB0_361: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400003e // b LBB0_373 $248(%rip) -LBB0_362: - WORD $0xaa3a03ee // mvn x14, x26 - WORD $0xcb3441ce // sub x14, x14, w20, uxtw - WORD $0x5280007a // mov w26, #3 - WORD $0x17fffb34 // b LBB0_180 $-4912(%rip) -LBB0_363: - WORD $0xaa0503f5 // mov x21, x5 + WORD $0x54003dea // b.ge LBB0_474 $1980(%rip) + WORD $0x140003bc // b LBB0_590 $3824(%rip) +LBB0_370: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400001a // b LBB0_377 $104(%rip) +LBB0_371: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400003e // b LBB0_383 $248(%rip) +LBB0_372: + WORD $0xaa3b03ee // mvn x14, x27 + WORD $0xcb3541ce // sub x14, x14, w21, uxtw + WORD $0x5280007b // mov w27, #3 + WORD $0x17fffb1c // b LBB0_185 $-5008(%rip) +LBB0_373: + WORD $0xaa0503f6 // mov x22, x5 WORD $0x9280000e // mov x14, #-1 - WORD $0xb5fff7fa // cbnz x26, LBB0_343 $-260(%rip) - WORD $0x1400039e // b LBB0_571 $3704(%rip) -LBB0_364: + WORD $0xb5fff7fb // cbnz x27, LBB0_353 $-260(%rip) + WORD $0x140003a5 // b LBB0_584 $3732(%rip) +LBB0_374: WORD $0x5ac001ee // rbit w14, w15 WORD $0x5ac011ce // clz w14, w14 - WORD $0xaa3a03ef // mvn x15, x26 + WORD $0xaa3b03ef // mvn x15, x27 WORD $0xcb0e01ee // sub x14, x15, x14 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x17fffb28 // b LBB0_180 $-4960(%rip) -LBB0_365: - WORD $0x8b1303c5 // add x5, lr, x19 + WORD $0x17fffb10 // b LBB0_185 $-5056(%rip) +LBB0_375: + WORD $0x8b130285 // add x5, x20, x19 WORD $0xf10005df // cmp x14, #1 - WORD $0x54003f2a // b.ge LBB0_471 $2020(%rip) - WORD $0x1400039d // b LBB0_577 $3700(%rip) -LBB0_366: + WORD $0x5400400a // b.ge LBB0_484 $2048(%rip) + WORD $0x140003a4 // b LBB0_590 $3728(%rip) +LBB0_376: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_367: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x540043a3 // b.lo LBB0_478 $2164(%rip) +LBB0_377: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x54004483 // b.lo LBB0_491 $2192(%rip) WORD $0xad406e7a // ldp q26, q27, [x19] WORD $0x6e208f5c // cmeq.16b v28, v26, v0 WORD $0x6e208f7d // cmeq.16b v29, v27, v0 @@ -2404,31 +2454,31 @@ LBB0_367: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 + WORD $0x1e260356 // fmov w22, s26 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103eb4 // bfi w20, w21, #16, #16 - WORD $0x35003dd4 // cbnz w20, LBB0_475 $1976(%rip) - WORD $0xb5003e66 // cbnz x6, LBB0_476 $1996(%rip) - WORD $0xb4004025 // cbz x5, LBB0_477 $2052(%rip) -LBB0_371: + WORD $0x33103ed5 // bfi w21, w22, #16, #16 + WORD $0x35003eb5 // cbnz w21, LBB0_488 $2004(%rip) + WORD $0xb5003f46 // cbnz x6, LBB0_489 $2024(%rip) + WORD $0xb4004105 // cbz x5, LBB0_490 $2080(%rip) +LBB0_381: WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011ce // clz x14, x14 - WORD $0xcb1e026f // sub x15, x19, lr + WORD $0xcb14026f // sub x15, x19, x20 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6ffc793 // tbz x19, #63, LBB0_283 $-1808(%rip) - WORD $0x14000311 // b LBB0_544 $3140(%rip) -LBB0_372: + WORD $0xb6f837f3 // tbz x19, #63, LBB0_478 $1788(%rip) + WORD $0x14000318 // b LBB0_557 $3168(%rip) +LBB0_382: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_373: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x54000623 // b.lo LBB0_380 $196(%rip) +LBB0_383: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x54000623 // b.lo LBB0_390 $196(%rip) WORD $0xad406a7b // ldp q27, q26, [x19] WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 @@ -2444,100 +2494,100 @@ LBB0_373: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260394 // fmov w20, s28 + WORD $0x1e260395 // fmov w21, s28 WORD $0x6e218f5c // cmeq.16b v28, v26, v1 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260395 // fmov w21, s28 + WORD $0x1e260396 // fmov w22, s28 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103eb4 // bfi w20, w21, #16, #16 - WORD $0x35004034 // cbnz w20, LBB0_489 $2052(%rip) - WORD $0xb50040c6 // cbnz x6, LBB0_490 $2072(%rip) -LBB0_376: + WORD $0x33103ed5 // bfi w21, w22, #16, #16 + WORD $0x35004115 // cbnz w21, LBB0_502 $2080(%rip) + WORD $0xb50041a6 // cbnz x6, LBB0_503 $2100(%rip) +LBB0_386: WORD $0x6e3b349b // cmhi.16b v27, v4, v27 WORD $0x4e221f7b // and.16b v27, v27, v2 WORD $0x4e03037b // tbl.16b v27, { v27 }, v3 WORD $0x4e71bb7b // addv.8h h27, v27 - WORD $0x1e260375 // fmov w21, s27 + WORD $0x1e260376 // fmov w22, s27 WORD $0x6e3a349a // cmhi.16b v26, v4, v26 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df5 // bfi w21, w15, #16, #16 - WORD $0xdac002af // rbit x15, x21 - WORD $0xdac011f4 // clz x20, x15 - WORD $0xb40000e5 // cbz x5, LBB0_378 $28(%rip) + WORD $0x33103df6 // bfi w22, w15, #16, #16 + WORD $0xdac002cf // rbit x15, x22 + WORD $0xdac011f5 // clz x21, x15 + WORD $0xb40000e5 // cbz x5, LBB0_388 $28(%rip) WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011c5 // clz x5, x14 - WORD $0xcb1e026e // sub x14, x19, lr - WORD $0xeb05029f // cmp x20, x5 - WORD $0x54000462 // b.hs LBB0_391 $140(%rip) - WORD $0x1400034f // b LBB0_579 $3388(%rip) -LBB0_378: - WORD $0x35006a35 // cbnz w21, LBB0_580 $3396(%rip) + WORD $0xcb14026e // sub x14, x19, x20 + WORD $0xeb0502bf // cmp x21, x5 + WORD $0x54000462 // b.hs LBB0_401 $140(%rip) + WORD $0x14000356 // b LBB0_592 $3416(%rip) +LBB0_388: + WORD $0x35006b16 // cbnz w22, LBB0_593 $3424(%rip) WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_380: - WORD $0xb5004a46 // cbnz x6, LBB0_509 $2376(%rip) - WORD $0xb4005b96 // cbz x22, LBB0_545 $2928(%rip) -LBB0_382: - WORD $0xcb1e03ee // neg x14, lr -LBB0_383: + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_390: + WORD $0xb5004b26 // cbnz x6, LBB0_522 $2404(%rip) + WORD $0xb4005c77 // cbz x23, LBB0_558 $2956(%rip) +LBB0_392: + WORD $0xcb1403ee // neg x14, x20 +LBB0_393: WORD $0xd2800005 // mov x5, #0 -LBB0_384: +LBB0_394: WORD $0x38656a66 // ldrb w6, [x19, x5] WORD $0x710088df // cmp w6, #34 - WORD $0x540002e0 // b.eq LBB0_390 $92(%rip) + WORD $0x540002e0 // b.eq LBB0_400 $92(%rip) WORD $0x710170df // cmp w6, #92 - WORD $0x540000e0 // b.eq LBB0_388 $28(%rip) + WORD $0x540000e0 // b.eq LBB0_398 $28(%rip) WORD $0x71007cdf // cmp w6, #31 - WORD $0x54006909 // b.ls LBB0_581 $3360(%rip) + WORD $0x540069e9 // b.ls LBB0_594 $3388(%rip) WORD $0x910004a5 // add x5, x5, #1 - WORD $0xeb0502df // cmp x22, x5 - WORD $0x54fffee1 // b.ne LBB0_384 $-36(%rip) - WORD $0x140002cf // b LBB0_545 $2876(%rip) -LBB0_388: - WORD $0xd10006cf // sub x15, x22, #1 + WORD $0xeb0502ff // cmp x23, x5 + WORD $0x54fffee1 // b.ne LBB0_394 $-36(%rip) + WORD $0x140002d6 // b LBB0_558 $2904(%rip) +LBB0_398: + WORD $0xd10006ef // sub x15, x23, #1 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x54005980 // b.eq LBB0_545 $2864(%rip) + WORD $0x54005a60 // b.eq LBB0_558 $2892(%rip) WORD $0x8b05026f // add x15, x19, x5 WORD $0x8b0e01e6 // add x6, x15, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8000c0 // csel x0, x6, x0, eq WORD $0x910009f3 // add x19, x15, #2 - WORD $0xd1000acf // sub x15, x22, #2 - WORD $0xcb0502c6 // sub x6, x22, x5 - WORD $0xd10008d6 // sub x22, x6, #2 + WORD $0xd1000aef // sub x15, x23, #2 + WORD $0xcb0502e6 // sub x6, x23, x5 + WORD $0xd10008d7 // sub x23, x6, #2 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x54fffd01 // b.ne LBB0_383 $-96(%rip) - WORD $0x140002c1 // b LBB0_545 $2820(%rip) -LBB0_390: - WORD $0xcb1e026e // sub x14, x19, lr -LBB0_391: + WORD $0x54fffd01 // b.ne LBB0_393 $-96(%rip) + WORD $0x140002c8 // b LBB0_558 $2848(%rip) +LBB0_400: + WORD $0xcb14026e // sub x14, x19, x20 +LBB0_401: WORD $0x8b0501ce // add x14, x14, x5 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6ffbcb3 // tbz x19, #63, LBB0_283 $-2156(%rip) - WORD $0x140002ba // b LBB0_544 $2792(%rip) -LBB0_392: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400000a // b LBB0_396 $40(%rip) -LBB0_393: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400002e // b LBB0_402 $184(%rip) -LBB0_394: - WORD $0xaa3a03ee // mvn x14, x26 - WORD $0xcb3741ce // sub x14, x14, w23, uxtw - WORD $0x5280007a // mov w26, #3 - WORD $0x17fffa9f // b LBB0_180 $-5508(%rip) -LBB0_395: + WORD $0xb6f82d13 // tbz x19, #63, LBB0_478 $1440(%rip) + WORD $0x140002c1 // b LBB0_557 $2820(%rip) +LBB0_402: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400000a // b LBB0_406 $40(%rip) +LBB0_403: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400002e // b LBB0_412 $184(%rip) +LBB0_404: + WORD $0xaa3b03ee // mvn x14, x27 + WORD $0xcb3841ce // sub x14, x14, w24, uxtw + WORD $0x5280007b // mov w27, #3 + WORD $0x17fffa87 // b LBB0_185 $-5604(%rip) +LBB0_405: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_396: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x54003cc3 // b.lo LBB0_494 $1944(%rip) +LBB0_406: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x54003da3 // b.lo LBB0_507 $1972(%rip) WORD $0xad406e7a // ldp q26, q27, [x19] WORD $0x6e208f5c // cmeq.16b v28, v26, v0 WORD $0x6e208f7d // cmeq.16b v29, v27, v0 @@ -2554,31 +2604,31 @@ LBB0_396: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 + WORD $0x1e260356 // fmov w22, s26 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103eb4 // bfi w20, w21, #16, #16 - WORD $0x350036f4 // cbnz w20, LBB0_491 $1756(%rip) - WORD $0xb5003786 // cbnz x6, LBB0_492 $1776(%rip) - WORD $0xb4003945 // cbz x5, LBB0_493 $1832(%rip) -LBB0_400: + WORD $0x33103ed5 // bfi w21, w22, #16, #16 + WORD $0x350037d5 // cbnz w21, LBB0_504 $1784(%rip) + WORD $0xb5003866 // cbnz x6, LBB0_505 $1804(%rip) + WORD $0xb4003a25 // cbz x5, LBB0_506 $1860(%rip) +LBB0_410: WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011ce // clz x14, x14 - WORD $0xcb1e026f // sub x15, x19, lr + WORD $0xcb14026f // sub x15, x19, x20 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6ff5e53 // tbz x19, #63, LBB0_194 $-5176(%rip) - WORD $0x1400028c // b LBB0_544 $2608(%rip) -LBB0_401: + WORD $0xb6ff5b53 // tbz x19, #63, LBB0_199 $-5272(%rip) + WORD $0x14000293 // b LBB0_557 $2636(%rip) +LBB0_411: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_402: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x54000623 // b.lo LBB0_409 $196(%rip) +LBB0_412: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x54000623 // b.lo LBB0_419 $196(%rip) WORD $0xad406a7b // ldp q27, q26, [x19] WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 @@ -2594,149 +2644,149 @@ LBB0_402: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260394 // fmov w20, s28 + WORD $0x1e260395 // fmov w21, s28 WORD $0x6e218f5c // cmeq.16b v28, v26, v1 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260395 // fmov w21, s28 + WORD $0x1e260396 // fmov w22, s28 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103eb4 // bfi w20, w21, #16, #16 - WORD $0x35003914 // cbnz w20, LBB0_504 $1824(%rip) - WORD $0xb50039a6 // cbnz x6, LBB0_506 $1844(%rip) -LBB0_405: + WORD $0x33103ed5 // bfi w21, w22, #16, #16 + WORD $0x350039f5 // cbnz w21, LBB0_517 $1852(%rip) + WORD $0xb5003a86 // cbnz x6, LBB0_519 $1872(%rip) +LBB0_415: WORD $0x6e3b349b // cmhi.16b v27, v4, v27 WORD $0x4e221f7b // and.16b v27, v27, v2 WORD $0x4e03037b // tbl.16b v27, { v27 }, v3 WORD $0x4e71bb7b // addv.8h h27, v27 - WORD $0x1e260375 // fmov w21, s27 + WORD $0x1e260376 // fmov w22, s27 WORD $0x6e3a349a // cmhi.16b v26, v4, v26 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df5 // bfi w21, w15, #16, #16 - WORD $0xdac002af // rbit x15, x21 - WORD $0xdac011f4 // clz x20, x15 - WORD $0xb40000e5 // cbz x5, LBB0_407 $28(%rip) + WORD $0x33103df6 // bfi w22, w15, #16, #16 + WORD $0xdac002cf // rbit x15, x22 + WORD $0xdac011f5 // clz x21, x15 + WORD $0xb40000e5 // cbz x5, LBB0_417 $28(%rip) WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011c5 // clz x5, x14 - WORD $0xcb1e026e // sub x14, x19, lr - WORD $0xeb05029f // cmp x20, x5 - WORD $0x54000582 // b.hs LBB0_420 $176(%rip) - WORD $0x140002ca // b LBB0_579 $2856(%rip) -LBB0_407: - WORD $0x35005995 // cbnz w21, LBB0_580 $2864(%rip) + WORD $0xcb14026e // sub x14, x19, x20 + WORD $0xeb0502bf // cmp x21, x5 + WORD $0x54000582 // b.hs LBB0_430 $176(%rip) + WORD $0x140002d1 // b LBB0_592 $2884(%rip) +LBB0_417: + WORD $0x35005a76 // cbnz w22, LBB0_593 $2892(%rip) WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_409: - WORD $0xb5003ca6 // cbnz x6, LBB0_516 $1940(%rip) - WORD $0x5280007a // mov w26, #3 + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_419: + WORD $0xb5003d86 // cbnz x6, LBB0_529 $1968(%rip) + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb4004a96 // cbz x22, LBB0_545 $2384(%rip) -LBB0_411: - WORD $0xcb1e03ee // neg x14, lr -LBB0_412: + WORD $0xb4004b77 // cbz x23, LBB0_558 $2412(%rip) +LBB0_421: + WORD $0xcb1403ee // neg x14, x20 +LBB0_422: WORD $0xd2800005 // mov x5, #0 -LBB0_413: +LBB0_423: WORD $0x38656a66 // ldrb w6, [x19, x5] WORD $0x710088df // cmp w6, #34 - WORD $0x540003a0 // b.eq LBB0_419 $116(%rip) + WORD $0x540003a0 // b.eq LBB0_429 $116(%rip) WORD $0x710170df // cmp w6, #92 - WORD $0x54000140 // b.eq LBB0_417 $40(%rip) + WORD $0x54000140 // b.eq LBB0_427 $40(%rip) WORD $0x71007cdf // cmp w6, #31 - WORD $0x54005809 // b.ls LBB0_581 $2816(%rip) + WORD $0x540058e9 // b.ls LBB0_594 $2844(%rip) WORD $0x910004a5 // add x5, x5, #1 - WORD $0xeb0502df // cmp x22, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0xeb0502ff // cmp x23, x5 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x54fffe81 // b.ne LBB0_413 $-48(%rip) - WORD $0x14000244 // b LBB0_545 $2320(%rip) -LBB0_417: - WORD $0xd10006cf // sub x15, x22, #1 + WORD $0x54fffe81 // b.ne LBB0_423 $-48(%rip) + WORD $0x1400024b // b LBB0_558 $2348(%rip) +LBB0_427: + WORD $0xd10006ef // sub x15, x23, #1 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x540047c0 // b.eq LBB0_545 $2296(%rip) + WORD $0x540048a0 // b.eq LBB0_558 $2324(%rip) WORD $0x8b05026f // add x15, x19, x5 WORD $0x8b0e01e6 // add x6, x15, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8000c0 // csel x0, x6, x0, eq WORD $0x910009f3 // add x19, x15, #2 - WORD $0xd1000acf // sub x15, x22, #2 - WORD $0xcb0502c6 // sub x6, x22, x5 - WORD $0xd10008d6 // sub x22, x6, #2 + WORD $0xd1000aef // sub x15, x23, #2 + WORD $0xcb0502e6 // sub x6, x23, x5 + WORD $0xd10008d7 // sub x23, x6, #2 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x54fffc41 // b.ne LBB0_412 $-120(%rip) - WORD $0x14000233 // b LBB0_545 $2252(%rip) -LBB0_419: - WORD $0xcb1e026e // sub x14, x19, lr -LBB0_420: + WORD $0x54fffc41 // b.ne LBB0_422 $-120(%rip) + WORD $0x1400023a // b LBB0_558 $2280(%rip) +LBB0_429: + WORD $0xcb14026e // sub x14, x19, x20 +LBB0_430: WORD $0x8b0501ce // add x14, x14, x5 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6ff5253 // tbz x19, #63, LBB0_194 $-5560(%rip) - WORD $0x1400022c // b LBB0_544 $2224(%rip) -LBB0_421: - WORD $0xcb1903ee // neg x14, x25 - WORD $0xb6ffd86e // tbz x14, #63, LBB0_355 $-1268(%rip) - WORD $0x14000284 // b LBB0_571 $2576(%rip) -LBB0_422: + WORD $0xb6ff4f53 // tbz x19, #63, LBB0_199 $-5656(%rip) + WORD $0x14000233 // b LBB0_557 $2252(%rip) +LBB0_431: + WORD $0xcb1403ee // neg x14, x20 + WORD $0xb6ffd86e // tbz x14, #63, LBB0_365 $-1268(%rip) + WORD $0x1400028b // b LBB0_584 $2604(%rip) +LBB0_432: WORD $0x5ac001ee // rbit w14, w15 WORD $0x5ac011ce // clz w14, w14 WORD $0xaa2503ef // mvn x15, x5 WORD $0xcb0e01ee // sub x14, x15, x14 WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x17fffeb7 // b LBB0_353 $-1316(%rip) -LBB0_423: - WORD $0x8b1303c5 // add x5, lr, x19 + WORD $0x17fffeb7 // b LBB0_363 $-1316(%rip) +LBB0_433: + WORD $0x8b130285 // add x5, x20, x19 WORD $0xf10005df // cmp x14, #1 - WORD $0x540050cb // b.lt LBB0_577 $2584(%rip) -LBB0_424: - WORD $0x5280007a // mov w26, #3 + WORD $0x540051ab // b.lt LBB0_590 $2612(%rip) +LBB0_434: + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x14000007 // b LBB0_426 $28(%rip) -LBB0_425: + WORD $0x14000007 // b LBB0_436 $28(%rip) +LBB0_435: WORD $0x92800026 // mov x6, #-2 WORD $0x52800040 // mov w0, #2 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x54004fad // b.le LBB0_578 $2548(%rip) -LBB0_426: + WORD $0x5400508d // b.le LBB0_591 $2576(%rip) +LBB0_436: WORD $0x394000a0 // ldrb w0, [x5] WORD $0x7101701f // cmp w0, #92 - WORD $0x54ffff00 // b.eq LBB0_425 $-32(%rip) + WORD $0x54ffff00 // b.eq LBB0_435 $-32(%rip) WORD $0x7100881f // cmp w0, #34 - WORD $0x54001780 // b.eq LBB0_467 $752(%rip) + WORD $0x54001780 // b.eq LBB0_477 $752(%rip) WORD $0x92800006 // mov x6, #-1 WORD $0x52800020 // mov w0, #1 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x54fffecc // b.gt LBB0_426 $-40(%rip) - WORD $0x14000271 // b LBB0_578 $2500(%rip) -LBB0_429: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400000a // b LBB0_433 $40(%rip) -LBB0_430: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400002d // b LBB0_439 $180(%rip) -LBB0_431: + WORD $0x54fffecc // b.gt LBB0_436 $-40(%rip) + WORD $0x14000278 // b LBB0_591 $2528(%rip) +LBB0_439: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400000a // b LBB0_443 $40(%rip) +LBB0_440: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400002d // b LBB0_449 $180(%rip) +LBB0_441: WORD $0xaa2503ee // mvn x14, x5 - WORD $0xcb3741ce // sub x14, x14, w23, uxtw + WORD $0xcb3841ce // sub x14, x14, w24, uxtw WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x17fffe96 // b LBB0_353 $-1448(%rip) -LBB0_432: + WORD $0x17fffe96 // b LBB0_363 $-1448(%rip) +LBB0_442: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_433: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x540036c3 // b.lo LBB0_523 $1752(%rip) +LBB0_443: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x540037a3 // b.lo LBB0_536 $1780(%rip) WORD $0xad406e7a // ldp q26, q27, [x19] WORD $0x6e208f5c // cmeq.16b v28, v26, v0 WORD $0x6e208f7d // cmeq.16b v29, v27, v0 @@ -2753,30 +2803,30 @@ LBB0_433: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e260351 // fmov w17, s26 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103e34 // bfi w20, w17, #16, #16 - WORD $0x35003154 // cbnz w20, LBB0_520 $1576(%rip) - WORD $0xb50031e6 // cbnz x6, LBB0_521 $1596(%rip) - WORD $0xb4003345 // cbz x5, LBB0_522 $1640(%rip) -LBB0_437: + WORD $0x33103e35 // bfi w21, w17, #16, #16 + WORD $0x35003235 // cbnz w21, LBB0_533 $1604(%rip) + WORD $0xb50032c6 // cbnz x6, LBB0_534 $1624(%rip) + WORD $0xb4003425 // cbz x5, LBB0_535 $1668(%rip) +LBB0_447: WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011ce // clz x14, x14 - WORD $0xcb1e026f // sub x15, x19, lr + WORD $0xcb14026f // sub x15, x19, x20 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910005d3 // add x19, x14, #1 - WORD $0x140001b0 // b LBB0_534 $1728(%rip) -LBB0_438: + WORD $0x140001b7 // b LBB0_547 $1756(%rip) +LBB0_448: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_439: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x54000623 // b.lo LBB0_446 $196(%rip) +LBB0_449: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x54000623 // b.lo LBB0_456 $196(%rip) WORD $0xad406a7b // ldp q27, q26, [x19] WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 @@ -2792,434 +2842,444 @@ LBB0_439: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260394 // fmov w20, s28 + WORD $0x1e260395 // fmov w21, s28 WORD $0x6e218f5c // cmeq.16b v28, v26, v1 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 WORD $0x1e260391 // fmov w17, s28 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103e34 // bfi w20, w17, #16, #16 - WORD $0x35003314 // cbnz w20, LBB0_535 $1632(%rip) - WORD $0xb50033a6 // cbnz x6, LBB0_537 $1652(%rip) -LBB0_442: + WORD $0x33103e35 // bfi w21, w17, #16, #16 + WORD $0x350033f5 // cbnz w21, LBB0_548 $1660(%rip) + WORD $0xb5003486 // cbnz x6, LBB0_550 $1680(%rip) +LBB0_452: WORD $0x6e3b349b // cmhi.16b v27, v4, v27 WORD $0x4e221f7b // and.16b v27, v27, v2 WORD $0x4e03037b // tbl.16b v27, { v27 }, v3 WORD $0x4e71bb7b // addv.8h h27, v27 - WORD $0x1e260375 // fmov w21, s27 + WORD $0x1e260376 // fmov w22, s27 WORD $0x6e3a349a // cmhi.16b v26, v4, v26 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df5 // bfi w21, w15, #16, #16 - WORD $0xdac002af // rbit x15, x21 - WORD $0xdac011f4 // clz x20, x15 - WORD $0xb40000e5 // cbz x5, LBB0_444 $28(%rip) + WORD $0x33103df6 // bfi w22, w15, #16, #16 + WORD $0xdac002cf // rbit x15, x22 + WORD $0xdac011f5 // clz x21, x15 + WORD $0xb40000e5 // cbz x5, LBB0_454 $28(%rip) WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011c5 // clz x5, x14 - WORD $0xcb1e026e // sub x14, x19, lr - WORD $0xeb05029f // cmp x20, x5 - WORD $0x54000462 // b.hs LBB0_457 $140(%rip) - WORD $0x1400021b // b LBB0_579 $2156(%rip) -LBB0_444: - WORD $0x350043b5 // cbnz w21, LBB0_580 $2164(%rip) + WORD $0xcb14026e // sub x14, x19, x20 + WORD $0xeb0502bf // cmp x21, x5 + WORD $0x54000462 // b.hs LBB0_467 $140(%rip) + WORD $0x14000222 // b LBB0_592 $2184(%rip) +LBB0_454: + WORD $0x35004496 // cbnz w22, LBB0_593 $2192(%rip) WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_446: - WORD $0xb5003346 // cbnz x6, LBB0_540 $1640(%rip) - WORD $0xb4003516 // cbz x22, LBB0_545 $1696(%rip) -LBB0_448: - WORD $0xcb1e03ee // neg x14, lr -LBB0_449: + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_456: + WORD $0xb5003426 // cbnz x6, LBB0_553 $1668(%rip) + WORD $0xb40035f7 // cbz x23, LBB0_558 $1724(%rip) +LBB0_458: + WORD $0xcb1403ee // neg x14, x20 +LBB0_459: WORD $0xd2800005 // mov x5, #0 -LBB0_450: +LBB0_460: WORD $0x38656a66 // ldrb w6, [x19, x5] WORD $0x710088df // cmp w6, #34 - WORD $0x540002e0 // b.eq LBB0_456 $92(%rip) + WORD $0x540002e0 // b.eq LBB0_466 $92(%rip) WORD $0x710170df // cmp w6, #92 - WORD $0x540000e0 // b.eq LBB0_454 $28(%rip) + WORD $0x540000e0 // b.eq LBB0_464 $28(%rip) WORD $0x71007cdf // cmp w6, #31 - WORD $0x54004289 // b.ls LBB0_581 $2128(%rip) + WORD $0x54004369 // b.ls LBB0_594 $2156(%rip) WORD $0x910004a5 // add x5, x5, #1 - WORD $0xeb0502df // cmp x22, x5 - WORD $0x54fffee1 // b.ne LBB0_450 $-36(%rip) - WORD $0x1400019b // b LBB0_545 $1644(%rip) -LBB0_454: - WORD $0xd10006cf // sub x15, x22, #1 + WORD $0xeb0502ff // cmp x23, x5 + WORD $0x54fffee1 // b.ne LBB0_460 $-36(%rip) + WORD $0x140001a2 // b LBB0_558 $1672(%rip) +LBB0_464: + WORD $0xd10006ef // sub x15, x23, #1 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x54003300 // b.eq LBB0_545 $1632(%rip) + WORD $0x540033e0 // b.eq LBB0_558 $1660(%rip) WORD $0x8b05026f // add x15, x19, x5 WORD $0x8b0e01f1 // add x17, x15, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a800220 // csel x0, x17, x0, eq WORD $0x910009f3 // add x19, x15, #2 - WORD $0xd1000acf // sub x15, x22, #2 - WORD $0xcb0502d1 // sub x17, x22, x5 - WORD $0xd1000a36 // sub x22, x17, #2 + WORD $0xd1000aef // sub x15, x23, #2 + WORD $0xcb0502f1 // sub x17, x23, x5 + WORD $0xd1000a37 // sub x23, x17, #2 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x54fffd01 // b.ne LBB0_449 $-96(%rip) - WORD $0x1400018d // b LBB0_545 $1588(%rip) -LBB0_456: - WORD $0xcb1e026e // sub x14, x19, lr -LBB0_457: + WORD $0x54fffd01 // b.ne LBB0_459 $-96(%rip) + WORD $0x14000194 // b LBB0_558 $1616(%rip) +LBB0_466: + WORD $0xcb14026e // sub x14, x19, x20 +LBB0_467: WORD $0x8b0501ce // add x14, x14, x5 WORD $0x910005d3 // add x19, x14, #1 - WORD $0x1400015a // b LBB0_534 $1384(%rip) -LBB0_458: + WORD $0x14000161 // b LBB0_547 $1412(%rip) +LBB0_468: WORD $0x92800000 // mov x0, #-1 WORD $0xaa0603e5 // mov x5, x6 - WORD $0xaa0e03f5 // mov x21, x14 + WORD $0xaa0e03f6 // mov x22, x14 WORD $0x92800013 // mov x19, #-1 - WORD $0x92800016 // mov x22, #-1 - WORD $0x17fff7b5 // b LBB0_85 $-8492(%rip) -LBB0_459: + WORD $0x92800017 // mov x23, #-1 + WORD $0x17fff785 // b LBB0_85 $-8684(%rip) +LBB0_469: WORD $0xaa2503ee // mvn x14, x5 - WORD $0xcb3441ce // sub x14, x14, w20, uxtw + WORD $0xcb3541ce // sub x14, x14, w21, uxtw WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x17fffe11 // b LBB0_353 $-1980(%rip) -LBB0_460: - WORD $0x9280001a // mov x26, #-1 - WORD $0xaa0003f5 // mov x21, x0 - WORD $0xaa1903ee // mov x14, x25 - WORD $0x92800016 // mov x22, #-1 + WORD $0x17fffe11 // b LBB0_363 $-1980(%rip) +LBB0_470: + WORD $0x9280001b // mov x27, #-1 + WORD $0xaa0003f6 // mov x22, x0 + WORD $0xaa1a03ee // mov x14, x26 + WORD $0x92800017 // mov x23, #-1 WORD $0x92800006 // mov x6, #-1 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x17fffdc5 // b LBB0_326 $-2284(%rip) -LBB0_461: + WORD $0x17fffdc5 // b LBB0_336 $-2284(%rip) +LBB0_471: WORD $0xd100040f // sub x15, x0, #1 WORD $0xeb0e01ff // cmp x15, x14 - WORD $0x54003b00 // b.eq LBB0_577 $1888(%rip) + WORD $0x54003be0 // b.eq LBB0_590 $1916(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910009e5 // add x5, x15, #2 WORD $0xcb0e000e // sub x14, x0, x14 WORD $0xd10009ce // sub x14, x14, #2 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 WORD $0xf10005df // cmp x14, #1 - WORD $0x5400010a // b.ge LBB0_464 $32(%rip) - WORD $0x140001ce // b LBB0_577 $1848(%rip) -LBB0_463: + WORD $0x5400010a // b.ge LBB0_474 $32(%rip) + WORD $0x140001d5 // b LBB0_590 $1876(%rip) +LBB0_473: WORD $0x92800026 // mov x6, #-2 WORD $0x52800040 // mov w0, #2 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x5400392d // b.le LBB0_578 $1828(%rip) -LBB0_464: + WORD $0x54003a0d // b.le LBB0_591 $1856(%rip) +LBB0_474: WORD $0x394000a0 // ldrb w0, [x5] WORD $0x7101701f // cmp w0, #92 - WORD $0x54ffff00 // b.eq LBB0_463 $-32(%rip) + WORD $0x54ffff00 // b.eq LBB0_473 $-32(%rip) WORD $0x7100881f // cmp w0, #34 - WORD $0x54000100 // b.eq LBB0_467 $32(%rip) + WORD $0x54000100 // b.eq LBB0_477 $32(%rip) WORD $0x92800006 // mov x6, #-1 WORD $0x52800020 // mov w0, #1 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x54fffecc // b.gt LBB0_464 $-40(%rip) - WORD $0x140001bd // b LBB0_578 $1780(%rip) -LBB0_467: - WORD $0xcb1e00ae // sub x14, x5, lr + WORD $0x54fffecc // b.gt LBB0_474 $-40(%rip) + WORD $0x140001c4 // b LBB0_591 $1808(%rip) +LBB0_477: + WORD $0xcb1400ae // sub x14, x5, x20 WORD $0x910005d3 // add x19, x14, #1 - WORD $0x17fffc7d // b LBB0_283 $-3596(%rip) -LBB0_468: +LBB0_478: + WORD $0xf9000033 // str x19, [x1] +LBB0_479: + WORD $0xaa0803e0 // mov x0, x8 + WORD $0xeb07011f // cmp x8, x7 + WORD $0x540037c2 // b.hs LBB0_591 $1784(%rip) +LBB0_480: + WORD $0xf9400057 // ldr x23, [x2] + WORD $0xaa0b03e0 // mov x0, x11 + WORD $0xb5feb897 // cbnz x23, LBB0_1 $-10480(%rip) + WORD $0x140001ba // b LBB0_591 $1768(%rip) +LBB0_481: WORD $0xd100040f // sub x15, x0, #1 WORD $0xeb0e01ff // cmp x15, x14 - WORD $0x540036c0 // b.eq LBB0_577 $1752(%rip) + WORD $0x540036c0 // b.eq LBB0_590 $1752(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910009e5 // add x5, x15, #2 WORD $0xcb0e000e // sub x14, x0, x14 WORD $0xd10009ce // sub x14, x14, #2 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 WORD $0xf10005df // cmp x14, #1 - WORD $0x5400010a // b.ge LBB0_471 $32(%rip) - WORD $0x140001ac // b LBB0_577 $1712(%rip) -LBB0_470: + WORD $0x5400010a // b.ge LBB0_484 $32(%rip) + WORD $0x140001ac // b LBB0_590 $1712(%rip) +LBB0_483: WORD $0x92800026 // mov x6, #-2 WORD $0x52800040 // mov w0, #2 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x540034ed // b.le LBB0_578 $1692(%rip) -LBB0_471: + WORD $0x540034ed // b.le LBB0_591 $1692(%rip) +LBB0_484: WORD $0x394000a0 // ldrb w0, [x5] WORD $0x7101701f // cmp w0, #92 - WORD $0x54ffff00 // b.eq LBB0_470 $-32(%rip) + WORD $0x54ffff00 // b.eq LBB0_483 $-32(%rip) WORD $0x7100881f // cmp w0, #34 - WORD $0x54000100 // b.eq LBB0_474 $32(%rip) + WORD $0x54000100 // b.eq LBB0_487 $32(%rip) WORD $0x92800006 // mov x6, #-1 WORD $0x52800020 // mov w0, #1 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x54fffecc // b.gt LBB0_471 $-40(%rip) - WORD $0x1400019b // b LBB0_578 $1644(%rip) -LBB0_474: - WORD $0xcb1e00ae // sub x14, x5, lr + WORD $0x54fffecc // b.gt LBB0_484 $-40(%rip) + WORD $0x1400019b // b LBB0_591 $1644(%rip) +LBB0_487: + WORD $0xcb1400ae // sub x14, x5, x20 WORD $0x910005d3 // add x19, x14, #1 WORD $0xf9000033 // str x19, [x1] WORD $0xaa0803e0 // mov x0, x8 WORD $0xeb07011f // cmp x8, x7 - WORD $0x54ff3303 // b.lo LBB0_195 $-6560(%rip) - WORD $0x14000194 // b LBB0_578 $1616(%rip) -LBB0_475: - WORD $0xdac0028f // rbit x15, x20 + WORD $0x54ff2f23 // b.lo LBB0_200 $-6684(%rip) + WORD $0x14000194 // b LBB0_591 $1616(%rip) +LBB0_488: + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0275 // sub x21, x19, lr - WORD $0x8b0f02af // add x15, x21, x15 + WORD $0xcb140276 // sub x22, x19, x20 + WORD $0x8b0f02cf // add x15, x22, x15 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_476: - WORD $0x0a26028f // bic w15, w20, w6 - WORD $0x531f79f5 // lsl w21, w15, #1 +LBB0_489: + WORD $0x0a2602af // bic w15, w21, w6 + WORD $0x531f79f6 // lsl w22, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a350294 // bic w20, w20, w21 - WORD $0x1201f294 // and w20, w20, #0xaaaaaaaa - WORD $0x2b0f028f // adds w15, w20, w15 + WORD $0x0a3602b5 // bic w21, w21, w22 + WORD $0x1201f2b5 // and w21, w21, #0xaaaaaaaa + WORD $0x2b0f02af // adds w15, w21, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 WORD $0x0a0601ef // and w15, w15, w6 WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb5ffc025 // cbnz x5, LBB0_371 $-2044(%rip) -LBB0_477: + WORD $0xb5ffbf45 // cbnz x5, LBB0_381 $-2072(%rip) +LBB0_490: WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_478: - WORD $0xb5001066 // cbnz x6, LBB0_507 $524(%rip) - WORD $0xb40003b6 // cbz x22, LBB0_487 $116(%rip) -LBB0_480: - WORD $0xaa3e03ee // mvn x14, lr -LBB0_481: + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_491: + WORD $0xb5001066 // cbnz x6, LBB0_520 $524(%rip) + WORD $0xb40003b7 // cbz x23, LBB0_500 $116(%rip) +LBB0_493: + WORD $0xaa3403ee // mvn x14, x20 +LBB0_494: WORD $0xaa1303e6 // mov x6, x19 WORD $0x384014c5 // ldrb w5, [x6], #1 WORD $0x710088bf // cmp w5, #34 - WORD $0x54000320 // b.eq LBB0_488 $100(%rip) - WORD $0xd10006d4 // sub x20, x22, #1 + WORD $0x54000320 // b.eq LBB0_501 $100(%rip) + WORD $0xd10006f5 // sub x21, x23, #1 WORD $0x710170bf // cmp w5, #92 - WORD $0x54000100 // b.eq LBB0_484 $32(%rip) + WORD $0x54000100 // b.eq LBB0_497 $32(%rip) WORD $0xaa0603f3 // mov x19, x6 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0x5280007a // mov w26, #3 + WORD $0xaa1503f7 // mov x23, x21 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb5fffe94 // cbnz x20, LBB0_481 $-48(%rip) - WORD $0x1400000c // b LBB0_486 $48(%rip) -LBB0_484: - WORD $0xb40020d4 // cbz x20, LBB0_545 $1048(%rip) + WORD $0xb5fffe95 // cbnz x21, LBB0_494 $-48(%rip) + WORD $0x1400000c // b LBB0_499 $48(%rip) +LBB0_497: + WORD $0xb40020d5 // cbz x21, LBB0_558 $1048(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001e0 // csel x0, x15, x0, eq WORD $0x91000a73 // add x19, x19, #2 - WORD $0xd1000ad4 // sub x20, x22, #2 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0x5280007a // mov w26, #3 + WORD $0xd1000af5 // sub x21, x23, #2 + WORD $0xaa1503f7 // mov x23, x21 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb5fffd14 // cbnz x20, LBB0_481 $-96(%rip) -LBB0_486: + WORD $0xb5fffd15 // cbnz x21, LBB0_494 $-96(%rip) +LBB0_499: WORD $0x710088bf // cmp w5, #34 - WORD $0x54001f41 // b.ne LBB0_545 $1000(%rip) -LBB0_487: + WORD $0x54001f41 // b.ne LBB0_558 $1000(%rip) +LBB0_500: WORD $0xaa1303e6 // mov x6, x19 -LBB0_488: - WORD $0xcb1e00d3 // sub x19, x6, lr - WORD $0xb6ff83f3 // tbz x19, #63, LBB0_283 $-3972(%rip) - WORD $0x140000f4 // b LBB0_544 $976(%rip) -LBB0_489: - WORD $0xdac0028f // rbit x15, x20 +LBB0_501: + WORD $0xcb1400d3 // sub x19, x6, x20 + WORD $0xb6fff373 // tbz x19, #63, LBB0_478 $-404(%rip) + WORD $0x140000f4 // b LBB0_557 $976(%rip) +LBB0_502: + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0275 // sub x21, x19, lr - WORD $0x8b0f02af // add x15, x21, x15 + WORD $0xcb140276 // sub x22, x19, x20 + WORD $0x8b0f02cf // add x15, x22, x15 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_490: - WORD $0x0a26028f // bic w15, w20, w6 - WORD $0x531f79f5 // lsl w21, w15, #1 +LBB0_503: + WORD $0x0a2602af // bic w15, w21, w6 + WORD $0x531f79f6 // lsl w22, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a350294 // bic w20, w20, w21 - WORD $0x1201f294 // and w20, w20, #0xaaaaaaaa - WORD $0x2b0f028f // adds w15, w20, w15 + WORD $0x0a3602b5 // bic w21, w21, w22 + WORD $0x1201f2b5 // and w21, w21, #0xaaaaaaaa + WORD $0x2b0f02af // adds w15, w21, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 WORD $0x0a0601ef // and w15, w15, w6 WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x17fffded // b LBB0_376 $-2124(%rip) -LBB0_491: - WORD $0xdac0028f // rbit x15, x20 + WORD $0x17fffde6 // b LBB0_386 $-2152(%rip) +LBB0_504: + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0275 // sub x21, x19, lr - WORD $0x8b0f02af // add x15, x21, x15 + WORD $0xcb140276 // sub x22, x19, x20 + WORD $0x8b0f02cf // add x15, x22, x15 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_492: - WORD $0x0a26028f // bic w15, w20, w6 - WORD $0x531f79f5 // lsl w21, w15, #1 +LBB0_505: + WORD $0x0a2602af // bic w15, w21, w6 + WORD $0x531f79f6 // lsl w22, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a350294 // bic w20, w20, w21 - WORD $0x1201f294 // and w20, w20, #0xaaaaaaaa - WORD $0x2b0f028f // adds w15, w20, w15 + WORD $0x0a3602b5 // bic w21, w21, w22 + WORD $0x1201f2b5 // and w21, w21, #0xaaaaaaaa + WORD $0x2b0f02af // adds w15, w21, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 WORD $0x0a0601ef // and w15, w15, w6 WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb5ffc705 // cbnz x5, LBB0_400 $-1824(%rip) -LBB0_493: + WORD $0xb5ffc625 // cbnz x5, LBB0_410 $-1852(%rip) +LBB0_506: WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_494: - WORD $0xb50008e6 // cbnz x6, LBB0_511 $284(%rip) - WORD $0xb40009d6 // cbz x22, LBB0_513 $312(%rip) -LBB0_496: - WORD $0xaa3e03ee // mvn x14, lr -LBB0_497: + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_507: + WORD $0xb50008e6 // cbnz x6, LBB0_524 $284(%rip) + WORD $0xb40009d7 // cbz x23, LBB0_526 $312(%rip) +LBB0_509: + WORD $0xaa3403ee // mvn x14, x20 +LBB0_510: WORD $0xaa1303e6 // mov x6, x19 WORD $0x384014c5 // ldrb w5, [x6], #1 WORD $0x710088bf // cmp w5, #34 - WORD $0x540002c0 // b.eq LBB0_503 $88(%rip) - WORD $0xd10006d4 // sub x20, x22, #1 + WORD $0x540002c0 // b.eq LBB0_516 $88(%rip) + WORD $0xd10006f5 // sub x21, x23, #1 WORD $0x710170bf // cmp w5, #92 - WORD $0x540000a0 // b.eq LBB0_500 $20(%rip) + WORD $0x540000a0 // b.eq LBB0_513 $20(%rip) WORD $0xaa0603f3 // mov x19, x6 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0xb5fffef4 // cbnz x20, LBB0_497 $-36(%rip) - WORD $0x14000009 // b LBB0_502 $36(%rip) -LBB0_500: - WORD $0xb4001774 // cbz x20, LBB0_545 $748(%rip) + WORD $0xaa1503f7 // mov x23, x21 + WORD $0xb5fffef5 // cbnz x21, LBB0_510 $-36(%rip) + WORD $0x14000009 // b LBB0_515 $36(%rip) +LBB0_513: + WORD $0xb4001775 // cbz x21, LBB0_558 $748(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001e0 // csel x0, x15, x0, eq WORD $0x91000a73 // add x19, x19, #2 - WORD $0xd1000ad4 // sub x20, x22, #2 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0xb5fffdd4 // cbnz x20, LBB0_497 $-72(%rip) -LBB0_502: + WORD $0xd1000af5 // sub x21, x23, #2 + WORD $0xaa1503f7 // mov x23, x21 + WORD $0xb5fffdd5 // cbnz x21, LBB0_510 $-72(%rip) +LBB0_515: WORD $0x710088bf // cmp w5, #34 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x54000700 // b.eq LBB0_514 $224(%rip) - WORD $0x140000ae // b LBB0_545 $696(%rip) -LBB0_503: - WORD $0x5280007a // mov w26, #3 + WORD $0x54000700 // b.eq LBB0_527 $224(%rip) + WORD $0x140000ae // b LBB0_558 $696(%rip) +LBB0_516: + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x14000034 // b LBB0_515 $208(%rip) -LBB0_504: + WORD $0x14000034 // b LBB0_528 $208(%rip) +LBB0_517: WORD $0xb100041f // cmn x0, #1 - WORD $0x540000a1 // b.ne LBB0_506 $20(%rip) - WORD $0xdac0028f // rbit x15, x20 + WORD $0x540000a1 // b.ne LBB0_519 $20(%rip) + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0260 // sub x0, x19, lr + WORD $0xcb140260 // sub x0, x19, x20 WORD $0x8b0f0000 // add x0, x0, x15 -LBB0_506: - WORD $0x0a26028f // bic w15, w20, w6 - WORD $0x531f79f5 // lsl w21, w15, #1 +LBB0_519: + WORD $0x0a2602af // bic w15, w21, w6 + WORD $0x531f79f6 // lsl w22, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a350294 // bic w20, w20, w21 - WORD $0x1201f294 // and w20, w20, #0xaaaaaaaa - WORD $0x2b0f028f // adds w15, w20, w15 + WORD $0x0a3602b5 // bic w21, w21, w22 + WORD $0x1201f2b5 // and w21, w21, #0xaaaaaaaa + WORD $0x2b0f02af // adds w15, w21, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 WORD $0x0a0601ef // and w15, w15, w6 WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x17fffe26 // b LBB0_405 $-1896(%rip) -LBB0_507: - WORD $0xb4001296 // cbz x22, LBB0_545 $592(%rip) - WORD $0xaa3e03ee // mvn x14, lr + WORD $0x17fffe1f // b LBB0_415 $-1924(%rip) +LBB0_520: + WORD $0xb4001297 // cbz x23, LBB0_558 $592(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb5ffef16 // cbnz x22, LBB0_480 $-544(%rip) - WORD $0x17ffff93 // b LBB0_487 $-436(%rip) -LBB0_509: - WORD $0xb4001176 // cbz x22, LBB0_545 $556(%rip) - WORD $0xaa3e03ee // mvn x14, lr + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0xb5ffef17 // cbnz x23, LBB0_493 $-544(%rip) + WORD $0x17ffff93 // b LBB0_500 $-436(%rip) +LBB0_522: + WORD $0xb4001177 // cbz x23, LBB0_558 $556(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb5ffb536 // cbnz x22, LBB0_382 $-2396(%rip) - WORD $0x14000083 // b LBB0_545 $524(%rip) -LBB0_511: - WORD $0xb4001056 // cbz x22, LBB0_545 $520(%rip) - WORD $0xaa3e03ee // mvn x14, lr + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0xb5ffb457 // cbnz x23, LBB0_392 $-2424(%rip) + WORD $0x14000083 // b LBB0_558 $524(%rip) +LBB0_524: + WORD $0xb4001057 // cbz x23, LBB0_558 $520(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb5fff696 // cbnz x22, LBB0_496 $-304(%rip) -LBB0_513: - WORD $0x5280007a // mov w26, #3 + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0xb5fff697 // cbnz x23, LBB0_509 $-304(%rip) +LBB0_526: + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 -LBB0_514: +LBB0_527: WORD $0xaa1303e6 // mov x6, x19 -LBB0_515: - WORD $0xcb1e00d3 // sub x19, x6, lr - WORD $0xb6ff1b13 // tbz x19, #63, LBB0_194 $-7328(%rip) - WORD $0x14000072 // b LBB0_544 $456(%rip) -LBB0_516: - WORD $0xb4000e76 // cbz x22, LBB0_545 $460(%rip) - WORD $0xaa3e03ee // mvn x14, lr +LBB0_528: + WORD $0xcb1400d3 // sub x19, x6, x20 + WORD $0xb6ff1733 // tbz x19, #63, LBB0_199 $-7452(%rip) + WORD $0x14000072 // b LBB0_557 $456(%rip) +LBB0_529: + WORD $0xb4000e77 // cbz x23, LBB0_558 $460(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0x5280007a // mov w26, #3 + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb5ffc2d6 // cbnz x22, LBB0_411 $-1960(%rip) - WORD $0x14000068 // b LBB0_545 $416(%rip) -LBB0_518: + WORD $0xb5ffc1f7 // cbnz x23, LBB0_421 $-1988(%rip) + WORD $0x14000068 // b LBB0_558 $416(%rip) +LBB0_531: WORD $0xd100040f // sub x15, x0, #1 WORD $0xeb0e01ff // cmp x15, x14 - WORD $0x54001920 // b.eq LBB0_577 $804(%rip) + WORD $0x54001920 // b.eq LBB0_590 $804(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910009e5 // add x5, x15, #2 WORD $0xcb0e000e // sub x14, x0, x14 WORD $0xd10009ce // sub x14, x14, #2 WORD $0xf10005df // cmp x14, #1 - WORD $0x54ffc7ca // b.ge LBB0_424 $-1800(%rip) - WORD $0x140000c2 // b LBB0_577 $776(%rip) -LBB0_520: - WORD $0xdac0028f // rbit x15, x20 + WORD $0x54ffc6ea // b.ge LBB0_434 $-1828(%rip) + WORD $0x140000c2 // b LBB0_590 $776(%rip) +LBB0_533: + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0271 // sub x17, x19, lr + WORD $0xcb140271 // sub x17, x19, x20 WORD $0x8b0f022f // add x15, x17, x15 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_521: - WORD $0x0a26028f // bic w15, w20, w6 +LBB0_534: + WORD $0x0a2602af // bic w15, w21, w6 WORD $0x531f79f1 // lsl w17, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a310291 // bic w17, w20, w17 + WORD $0x0a3102b1 // bic w17, w21, w17 WORD $0x1201f231 // and w17, w17, #0xaaaaaaaa WORD $0x2b0f022f // adds w15, w17, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 @@ -3227,61 +3287,61 @@ LBB0_521: WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0xb5ffcd05 // cbnz x5, LBB0_437 $-1632(%rip) -LBB0_522: + WORD $0xb5ffcc25 // cbnz x5, LBB0_447 $-1660(%rip) +LBB0_535: WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_523: - WORD $0xb5000626 // cbnz x6, LBB0_538 $196(%rip) - WORD $0xb40002f6 // cbz x22, LBB0_532 $92(%rip) -LBB0_525: - WORD $0xaa3e03ee // mvn x14, lr -LBB0_526: + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_536: + WORD $0xb5000626 // cbnz x6, LBB0_551 $196(%rip) + WORD $0xb40002f7 // cbz x23, LBB0_545 $92(%rip) +LBB0_538: + WORD $0xaa3403ee // mvn x14, x20 +LBB0_539: WORD $0xaa1303e6 // mov x6, x19 WORD $0x384014c5 // ldrb w5, [x6], #1 WORD $0x710088bf // cmp w5, #34 - WORD $0x54000260 // b.eq LBB0_533 $76(%rip) - WORD $0xd10006d4 // sub x20, x22, #1 + WORD $0x54000260 // b.eq LBB0_546 $76(%rip) + WORD $0xd10006f5 // sub x21, x23, #1 WORD $0x710170bf // cmp w5, #92 - WORD $0x540000a0 // b.eq LBB0_529 $20(%rip) + WORD $0x540000a0 // b.eq LBB0_542 $20(%rip) WORD $0xaa0603f3 // mov x19, x6 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0xb5fffef4 // cbnz x20, LBB0_526 $-36(%rip) - WORD $0x14000009 // b LBB0_531 $36(%rip) -LBB0_529: - WORD $0xb4000774 // cbz x20, LBB0_545 $236(%rip) + WORD $0xaa1503f7 // mov x23, x21 + WORD $0xb5fffef5 // cbnz x21, LBB0_539 $-36(%rip) + WORD $0x14000009 // b LBB0_544 $36(%rip) +LBB0_542: + WORD $0xb4000775 // cbz x21, LBB0_558 $236(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001e0 // csel x0, x15, x0, eq WORD $0x91000a73 // add x19, x19, #2 - WORD $0xd1000ad4 // sub x20, x22, #2 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0xb5fffdd4 // cbnz x20, LBB0_526 $-72(%rip) -LBB0_531: + WORD $0xd1000af5 // sub x21, x23, #2 + WORD $0xaa1503f7 // mov x23, x21 + WORD $0xb5fffdd5 // cbnz x21, LBB0_539 $-72(%rip) +LBB0_544: WORD $0x710088bf // cmp w5, #34 - WORD $0x54000641 // b.ne LBB0_545 $200(%rip) -LBB0_532: + WORD $0x54000641 // b.ne LBB0_558 $200(%rip) +LBB0_545: WORD $0xaa1303e6 // mov x6, x19 -LBB0_533: - WORD $0xcb1e00d3 // sub x19, x6, lr -LBB0_534: - WORD $0x5280007a // mov w26, #3 +LBB0_546: + WORD $0xcb1400d3 // sub x19, x6, x20 +LBB0_547: + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb6ff6a93 // tbz x19, #63, LBB0_283 $-4784(%rip) - WORD $0x14000029 // b LBB0_544 $164(%rip) -LBB0_535: + WORD $0xb6ffda13 // tbz x19, #63, LBB0_478 $-1216(%rip) + WORD $0x14000029 // b LBB0_557 $164(%rip) +LBB0_548: WORD $0xb100041f // cmn x0, #1 - WORD $0x540000a1 // b.ne LBB0_537 $20(%rip) - WORD $0xdac0028f // rbit x15, x20 + WORD $0x540000a1 // b.ne LBB0_550 $20(%rip) + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0271 // sub x17, x19, lr + WORD $0xcb140271 // sub x17, x19, x20 WORD $0x8b0f0220 // add x0, x17, x15 -LBB0_537: - WORD $0x0a26028f // bic w15, w20, w6 +LBB0_550: + WORD $0x0a2602af // bic w15, w21, w6 WORD $0x531f79f1 // lsl w17, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a310291 // bic w17, w20, w17 + WORD $0x0a3102b1 // bic w17, w21, w17 WORD $0x1201f231 // and w17, w17, #0xaaaaaaaa WORD $0x2b0f022f // adds w15, w17, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 @@ -3289,160 +3349,160 @@ LBB0_537: WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0x17fffe59 // b LBB0_442 $-1692(%rip) -LBB0_538: - WORD $0xb4000316 // cbz x22, LBB0_545 $96(%rip) - WORD $0xaa3e03ee // mvn x14, lr + WORD $0x17fffe52 // b LBB0_452 $-1720(%rip) +LBB0_551: + WORD $0xb4000317 // cbz x23, LBB0_558 $96(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb5fff956 // cbnz x22, LBB0_525 $-216(%rip) - WORD $0x17ffffdf // b LBB0_532 $-132(%rip) -LBB0_540: - WORD $0xb40001f6 // cbz x22, LBB0_545 $60(%rip) - WORD $0xaa3e03ee // mvn x14, lr + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0xb5fff957 // cbnz x23, LBB0_538 $-216(%rip) + WORD $0x17ffffdf // b LBB0_545 $-132(%rip) +LBB0_553: + WORD $0xb40001f7 // cbz x23, LBB0_558 $60(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb5ffcc36 // cbnz x22, LBB0_448 $-1660(%rip) - WORD $0x14000007 // b LBB0_545 $28(%rip) -LBB0_542: + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0xb5ffcb57 // cbnz x23, LBB0_458 $-1688(%rip) + WORD $0x14000007 // b LBB0_558 $28(%rip) +LBB0_555: WORD $0x92800020 // mov x0, #-2 - WORD $0x1400006a // b LBB0_578 $424(%rip) -LBB0_543: + WORD $0x1400006a // b LBB0_591 $424(%rip) +LBB0_556: WORD $0x928000c0 // mov x0, #-7 - WORD $0x14000068 // b LBB0_578 $416(%rip) -LBB0_544: + WORD $0x14000068 // b LBB0_591 $416(%rip) +LBB0_557: WORD $0xb100067f // cmn x19, #1 - WORD $0x54000ac1 // b.ne LBB0_569 $344(%rip) -LBB0_545: - WORD $0xf9400760 // ldr x0, [x27, #8] + WORD $0x54000ac1 // b.ne LBB0_582 $344(%rip) +LBB0_558: + WORD $0xf94007c0 // ldr x0, [lr, #8] WORD $0x92800013 // mov x19, #-1 - WORD $0x14000053 // b LBB0_569 $332(%rip) -LBB0_546: + WORD $0x14000053 // b LBB0_582 $332(%rip) +LBB0_559: WORD $0x9280000e // mov x14, #-1 -LBB0_547: - WORD $0xaa2e03f6 // mvn x22, x14 -LBB0_548: - WORD $0x8b0802c8 // add x8, x22, x8 -LBB0_549: +LBB0_560: + WORD $0xaa2e03f7 // mvn x23, x14 +LBB0_561: + WORD $0x8b0802e8 // add x8, x23, x8 +LBB0_562: WORD $0xf9000028 // str x8, [x1] WORD $0x92800020 // mov x0, #-2 - WORD $0x1400005d // b LBB0_578 $372(%rip) -LBB0_550: + WORD $0x1400005d // b LBB0_591 $372(%rip) +LBB0_563: WORD $0xf900002e // str x14, [x1] - WORD $0x1400005a // b LBB0_577 $360(%rip) -LBB0_551: + WORD $0x1400005a // b LBB0_590 $360(%rip) +LBB0_564: WORD $0xb100041f // cmn x0, #1 - WORD $0x540008a0 // b.eq LBB0_568 $276(%rip) + WORD $0x540008a0 // b.eq LBB0_581 $276(%rip) WORD $0x92800033 // mov x19, #-2 - WORD $0x14000047 // b LBB0_569 $284(%rip) -LBB0_553: - WORD $0xaa0003f6 // mov x22, x0 - WORD $0x17fffff5 // b LBB0_548 $-44(%rip) -LBB0_554: + WORD $0x14000047 // b LBB0_582 $284(%rip) +LBB0_566: + WORD $0xaa0003f7 // mov x23, x0 + WORD $0x17fffff5 // b LBB0_561 $-44(%rip) +LBB0_567: WORD $0xf9000028 // str x8, [x1] WORD $0x394000c9 // ldrb w9, [x6] WORD $0x7101d13f // cmp w9, #116 - WORD $0x54000a21 // b.ne LBB0_578 $324(%rip) + WORD $0x54000a21 // b.ne LBB0_591 $324(%rip) WORD $0x91000509 // add x9, x8, #1 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101c93f // cmp w9, #114 - WORD $0x54000981 // b.ne LBB0_578 $304(%rip) + WORD $0x54000981 // b.ne LBB0_591 $304(%rip) WORD $0x91000909 // add x9, x8, #2 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101d53f // cmp w9, #117 - WORD $0x540008e1 // b.ne LBB0_578 $284(%rip) + WORD $0x540008e1 // b.ne LBB0_591 $284(%rip) WORD $0x91000d09 // add x9, x8, #3 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101953f // cmp w9, #101 - WORD $0x54000841 // b.ne LBB0_578 $264(%rip) - WORD $0x14000014 // b LBB0_562 $80(%rip) -LBB0_558: + WORD $0x54000841 // b.ne LBB0_591 $264(%rip) + WORD $0x14000014 // b LBB0_575 $80(%rip) +LBB0_571: WORD $0xf9000028 // str x8, [x1] WORD $0x394000c9 // ldrb w9, [x6] WORD $0x7101b93f // cmp w9, #110 - WORD $0x540007a1 // b.ne LBB0_578 $244(%rip) + WORD $0x540007a1 // b.ne LBB0_591 $244(%rip) WORD $0x91000509 // add x9, x8, #1 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101d53f // cmp w9, #117 - WORD $0x54000701 // b.ne LBB0_578 $224(%rip) + WORD $0x54000701 // b.ne LBB0_591 $224(%rip) WORD $0x91000909 // add x9, x8, #2 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101b13f // cmp w9, #108 - WORD $0x54000661 // b.ne LBB0_578 $204(%rip) + WORD $0x54000661 // b.ne LBB0_591 $204(%rip) WORD $0x91000d09 // add x9, x8, #3 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101b13f // cmp w9, #108 - WORD $0x540005c1 // b.ne LBB0_578 $184(%rip) -LBB0_562: + WORD $0x540005c1 // b.ne LBB0_591 $184(%rip) +LBB0_575: WORD $0x91001108 // add x8, x8, #4 WORD $0xf9000028 // str x8, [x1] - WORD $0x1400002b // b LBB0_578 $172(%rip) -LBB0_563: + WORD $0x1400002b // b LBB0_591 $172(%rip) +LBB0_576: WORD $0xf9000033 // str x19, [x1] - WORD $0x38736bc9 // ldrb w9, [lr, x19] + WORD $0x38736a89 // ldrb w9, [x20, x19] WORD $0x7101853f // cmp w9, #97 - WORD $0x540004e1 // b.ne LBB0_578 $156(%rip) + WORD $0x540004e1 // b.ne LBB0_591 $156(%rip) WORD $0x91000909 // add x9, x8, #2 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101b13f // cmp w9, #108 - WORD $0x54000441 // b.ne LBB0_578 $136(%rip) + WORD $0x54000441 // b.ne LBB0_591 $136(%rip) WORD $0x91000d09 // add x9, x8, #3 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101cd3f // cmp w9, #115 - WORD $0x540003a1 // b.ne LBB0_578 $116(%rip) + WORD $0x540003a1 // b.ne LBB0_591 $116(%rip) WORD $0x91001109 // add x9, x8, #4 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101953f // cmp w9, #101 - WORD $0x54000301 // b.ne LBB0_578 $96(%rip) + WORD $0x54000301 // b.ne LBB0_591 $96(%rip) WORD $0x91001508 // add x8, x8, #5 WORD $0xf9000028 // str x8, [x1] - WORD $0x14000015 // b LBB0_578 $84(%rip) -LBB0_568: + WORD $0x14000015 // b LBB0_591 $84(%rip) +LBB0_581: WORD $0xdac000a8 // rbit x8, x5 WORD $0xdac01108 // clz x8, x8 WORD $0x8b130100 // add x0, x8, x19 WORD $0x92800033 // mov x19, #-2 -LBB0_569: +LBB0_582: WORD $0xf9000020 // str x0, [x1] WORD $0xaa1303e0 // mov x0, x19 - WORD $0x1400000e // b LBB0_578 $56(%rip) -LBB0_570: + WORD $0x1400000e // b LBB0_591 $56(%rip) +LBB0_583: WORD $0x9280000e // mov x14, #-1 -LBB0_571: +LBB0_584: WORD $0xaa2e03e6 // mvn x6, x14 -LBB0_572: +LBB0_585: WORD $0x8b060268 // add x8, x19, x6 - WORD $0x17ffffab // b LBB0_549 $-340(%rip) -LBB0_573: - WORD $0xaa1a03e6 // mov x6, x26 - WORD $0x8b1a0268 // add x8, x19, x26 - WORD $0x17ffffa8 // b LBB0_549 $-352(%rip) -LBB0_574: + WORD $0x17ffffab // b LBB0_562 $-340(%rip) +LBB0_586: + WORD $0xaa1b03e6 // mov x6, x27 + WORD $0x8b1b0268 // add x8, x19, x27 + WORD $0x17ffffa8 // b LBB0_562 $-352(%rip) +LBB0_587: WORD $0x8b1300a0 // add x0, x5, x19 WORD $0x92800033 // mov x19, #-2 - WORD $0x17fffff4 // b LBB0_569 $-48(%rip) -LBB0_575: - WORD $0xf9400768 // ldr x8, [x27, #8] -LBB0_576: + WORD $0x17fffff4 // b LBB0_582 $-48(%rip) +LBB0_588: + WORD $0xf94007c8 // ldr x8, [lr, #8] +LBB0_589: WORD $0xf9000028 // str x8, [x1] -LBB0_577: +LBB0_590: WORD $0x92800000 // mov x0, #-1 -LBB0_578: +LBB0_591: WORD $0xa94dfbfd // ldp fp, lr, [sp, #216] WORD $0xa94ccff4 // ldp x20, x19, [sp, #200] WORD $0xa94bd7f6 // ldp x22, x21, [sp, #184] @@ -3452,20 +3512,20 @@ LBB0_578: WORD $0x6d47a3e9 // ldp d9, d8, [sp, #120] WORD $0x9103c3ff // add sp, sp, #240 WORD $0xd65f03c0 // ret -LBB0_579: - WORD $0x8b1401c0 // add x0, x14, x20 +LBB0_592: + WORD $0x8b1501c0 // add x0, x14, x21 WORD $0x92800033 // mov x19, #-2 - WORD $0x17ffffe5 // b LBB0_569 $-108(%rip) -LBB0_580: - WORD $0xcb1e0268 // sub x8, x19, lr - WORD $0x8b140100 // add x0, x8, x20 + WORD $0x17ffffe5 // b LBB0_582 $-108(%rip) +LBB0_593: + WORD $0xcb140268 // sub x8, x19, x20 + WORD $0x8b150100 // add x0, x8, x21 WORD $0x92800033 // mov x19, #-2 - WORD $0x17ffffe1 // b LBB0_569 $-124(%rip) -LBB0_581: - WORD $0xcb1e0268 // sub x8, x19, lr + WORD $0x17ffffe1 // b LBB0_582 $-124(%rip) +LBB0_594: + WORD $0xcb140268 // sub x8, x19, x20 WORD $0x8b050100 // add x0, x8, x5 WORD $0x92800033 // mov x19, #-2 - WORD $0x17ffffdd // b LBB0_569 $-140(%rip) + WORD $0x17ffffdd // b LBB0_582 $-140(%rip) // .p2align 2, 0x00 _MASK_USE_NUMBER: WORD $0x00000002 // .long 2 diff --git a/vendor/github.com/bytedance/sonic/internal/native/neon/skip_object_arm64.s b/vendor/github.com/bytedance/sonic/internal/native/neon/skip_object_arm64.s index 220a216..666fd64 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/neon/skip_object_arm64.s +++ b/vendor/github.com/bytedance/sonic/internal/native/neon/skip_object_arm64.s @@ -69,7 +69,7 @@ _skip_object: WORD $0xa90dfbfd // stp fp, lr, [sp, #216] WORD $0xa93ffbfd // stp fp, lr, [sp, #-8] WORD $0xd10023fd // sub fp, sp, #8 - WORD $0xaa0003fb // mov x27, x0 + WORD $0xaa0003fe // mov lr, x0 Lloh0: WORD $0x10fffd28 // adr x8, lCPI0_0 $-92(%rip) Lloh1: @@ -83,7 +83,7 @@ Lloh1: WORD $0x5280002c // mov w12, #1 WORD $0xd284c00d // mov x13, #9728 WORD $0xf2c0002d // movk x13, #1, lsl #32 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x4f01e440 // movi.16b v0, #34 WORD $0x4f02e781 // movi.16b v1, #92 Lloh2: @@ -112,12 +112,12 @@ Lloh5: WORD $0x6f00e417 // movi.2d v23, #0000000000000000 WORD $0x4f03e778 // movi.16b v24, #123 WORD $0x4f03e7b9 // movi.16b v25, #125 - WORD $0x52800036 // mov w22, #1 + WORD $0x52800037 // mov w23, #1 LBB0_1: - WORD $0xa9403b7e // ldp lr, x14, [x27] + WORD $0xa9403bd4 // ldp x20, x14, [lr] WORD $0xeb0e027f // cmp x19, x14 WORD $0x54000162 // b.hs LBB0_6 $44(%rip) - WORD $0x38736bc8 // ldrb w8, [lr, x19] + WORD $0x38736a88 // ldrb w8, [x20, x19] WORD $0x7100351f // cmp w8, #13 WORD $0x54000100 // b.eq LBB0_6 $32(%rip) WORD $0x7100811f // cmp w8, #32 @@ -131,7 +131,7 @@ LBB0_6: WORD $0x91000668 // add x8, x19, #1 WORD $0xeb0e011f // cmp x8, x14 WORD $0x54000122 // b.hs LBB0_10 $36(%rip) - WORD $0x38686bc0 // ldrb w0, [lr, x8] + WORD $0x38686a80 // ldrb w0, [x20, x8] WORD $0x7100341f // cmp w0, #13 WORD $0x540000c0 // b.eq LBB0_10 $24(%rip) WORD $0x7100801f // cmp w0, #32 @@ -143,7 +143,7 @@ LBB0_10: WORD $0x91000a68 // add x8, x19, #2 WORD $0xeb0e011f // cmp x8, x14 WORD $0x54000122 // b.hs LBB0_14 $36(%rip) - WORD $0x38686bc0 // ldrb w0, [lr, x8] + WORD $0x38686a80 // ldrb w0, [x20, x8] WORD $0x7100341f // cmp w0, #13 WORD $0x540000c0 // b.eq LBB0_14 $24(%rip) WORD $0x7100801f // cmp w0, #32 @@ -155,7 +155,7 @@ LBB0_14: WORD $0x91000e68 // add x8, x19, #3 WORD $0xeb0e011f // cmp x8, x14 WORD $0x54000122 // b.hs LBB0_18 $36(%rip) - WORD $0x38686bc0 // ldrb w0, [lr, x8] + WORD $0x38686a80 // ldrb w0, [x20, x8] WORD $0x7100341f // cmp w0, #13 WORD $0x540000c0 // b.eq LBB0_18 $24(%rip) WORD $0x7100801f // cmp w0, #32 @@ -166,9 +166,9 @@ LBB0_14: LBB0_18: WORD $0x91001268 // add x8, x19, #4 WORD $0xeb0e011f // cmp x8, x14 - WORD $0x540171c2 // b.hs LBB0_576 $11832(%rip) + WORD $0x540178a2 // b.hs LBB0_589 $12052(%rip) LBB0_19: - WORD $0x38686bcf // ldrb w15, [lr, x8] + WORD $0x38686a8f // ldrb w15, [x20, x8] WORD $0x710081ff // cmp w15, #32 WORD $0x9acf218f // lsl x15, x12, x15 WORD $0x8a0d01ef // and x15, x15, x13 @@ -177,17 +177,17 @@ LBB0_19: WORD $0x91000508 // add x8, x8, #1 WORD $0xeb0801df // cmp x14, x8 WORD $0x54ffff01 // b.ne LBB0_19 $-32(%rip) - WORD $0x14000b85 // b LBB0_577 $11796(%rip) + WORD $0x14000bbc // b LBB0_590 $12016(%rip) LBB0_21: WORD $0xeb0e011f // cmp x8, x14 - WORD $0x54017062 // b.hs LBB0_577 $11788(%rip) + WORD $0x54017742 // b.hs LBB0_590 $12008(%rip) LBB0_22: WORD $0x91000513 // add x19, x8, #1 WORD $0xf9000033 // str x19, [x1] - WORD $0x8b0803c6 // add x6, lr, x8 + WORD $0x8b080286 // add x6, x20, x8 WORD $0x394000c5 // ldrb w5, [x6] - WORD $0x34016fc5 // cbz w5, LBB0_577 $11768(%rip) - WORD $0xd10006ce // sub x14, x22, #1 + WORD $0x340176a5 // cbz w5, LBB0_590 $11988(%rip) + WORD $0xd10006ee // sub x14, x23, #1 WORD $0xf86e7920 // ldr x0, [x9, x14, lsl #3] WORD $0xb100057f // cmn x11, #1 WORD $0x9a8b010b // csel x11, x8, x11, eq @@ -200,20 +200,20 @@ LBB0_22: WORD $0x71000c1f // cmp w0, #3 WORD $0x54001a01 // b.ne LBB0_60 $832(%rip) WORD $0x710088bf // cmp w5, #34 - WORD $0x540160c1 // b.ne LBB0_542 $11288(%rip) + WORD $0x540167a1 // b.ne LBB0_555 $11508(%rip) WORD $0x5280008f // mov w15, #4 WORD $0xf82e792f // str x15, [x9, x14, lsl #3] WORD $0x37303203 // tbnz w3, #6, LBB0_114 $1600(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] - WORD $0xeb1301d6 // subs x22, x14, x19 - WORD $0x372845c3 // tbnz w3, #5, LBB0_142 $2232(%rip) - WORD $0x540160a0 // b.eq LBB0_545 $11284(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x5400f963 // b.lo LBB0_366 $7980(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] + WORD $0xeb1301d7 // subs x23, x14, x19 + WORD $0x372848c3 // tbnz w3, #5, LBB0_147 $2328(%rip) + WORD $0x54016780 // b.eq LBB0_558 $11504(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x5400ff63 // b.lo LBB0_376 $8172(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 LBB0_33: - WORD $0x8b1303ce // add x14, lr, x19 + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad406dda // ldp q26, q27, [x14] WORD $0xad4175dc // ldp q28, q29, [x14, #32] WORD $0x6e208f5e // cmeq.16b v30, v26, v0 @@ -239,42 +239,42 @@ LBB0_33: WORD $0x4e221d3e // and.16b v30, v9, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d4 // fmov w20, s30 + WORD $0x1e2603d5 // fmov w21, s30 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 + WORD $0x1e260356 // fmov w22, s26 WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260357 // fmov w23, s26 + WORD $0x1e260358 // fmov w24, s26 WORD $0x4e221f9a // and.16b v26, v28, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260358 // fmov w24, s26 + WORD $0x1e260359 // fmov w25, s26 WORD $0x4e221fba // and.16b v26, v29, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260359 // fmov w25, s26 + WORD $0x1e26035a // fmov w26, s26 WORD $0xd3607ca5 // lsl x5, x5, #32 - WORD $0xaa14c0a5 // orr x5, x5, x20, lsl #48 + WORD $0xaa15c0a5 // orr x5, x5, x21, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f00af // orr x15, x5, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607f0f // lsl x15, x24, #32 - WORD $0xaa19c1ef // orr x15, x15, x25, lsl #48 - WORD $0x53103ee5 // lsl w5, w23, #16 + WORD $0xd3607f2f // lsl x15, x25, #32 + WORD $0xaa1ac1ef // orr x15, x15, x26, lsl #48 + WORD $0x53103f05 // lsl w5, w24, #16 WORD $0xaa0501ef // orr x15, x15, x5 - WORD $0xaa1501e5 // orr x5, x15, x21 + WORD $0xaa1601e5 // orr x5, x15, x22 WORD $0xb5000105 // cbnz x5, LBB0_37 $32(%rip) WORD $0xb5000186 // cbnz x6, LBB0_38 $48(%rip) WORD $0xb50002ce // cbnz x14, LBB0_39 $88(%rip) LBB0_36: - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 + WORD $0xf100feff // cmp x23, #63 WORD $0x54fff8a8 // b.hi LBB0_33 $-236(%rip) - WORD $0x14000774 // b LBB0_360 $7632(%rip) + WORD $0x140007a4 // b LBB0_370 $7824(%rip) LBB0_37: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 @@ -283,14 +283,14 @@ LBB0_37: WORD $0x9a8f1000 // csel x0, x0, x15, ne LBB0_38: WORD $0x8a2600af // bic x15, x5, x6 - WORD $0xaa0f04d4 // orr x20, x6, x15, lsl #1 - WORD $0x8a3400a5 // bic x5, x5, x20 + WORD $0xaa0f04d5 // orr x21, x6, x15, lsl #1 + WORD $0x8a3500a5 // bic x5, x5, x21 WORD $0x9201f0a5 // and x5, x5, #0xaaaaaaaaaaaaaaaa WORD $0xab0f00af // adds x15, x5, x15 WORD $0x1a9f37e6 // cset w6, hs WORD $0xd37ff9ef // lsl x15, x15, #1 WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 - WORD $0x8a1401ef // and x15, x15, x20 + WORD $0x8a1501ef // and x15, x15, x21 WORD $0x8a2f01ce // bic x14, x14, x15 WORD $0xb4fffd8e // cbz x14, LBB0_36 $-80(%rip) LBB0_39: @@ -298,8 +298,8 @@ LBB0_39: WORD $0xdac011ce // clz x14, x14 WORD $0x8b1301ce // add x14, x14, x19 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6f8baf3 // tbz x19, #63, LBB0_283 $5980(%rip) - WORD $0x14000aac // b LBB0_544 $10928(%rip) + WORD $0xb6f93153 // tbz x19, #63, LBB0_478 $9768(%rip) + WORD $0x14000ae3 // b LBB0_557 $11148(%rip) LBB0_40: WORD $0x7100101f // cmp w0, #4 WORD $0x54000d40 // b.eq LBB0_58 $424(%rip) @@ -311,17 +311,17 @@ LBB0_40: WORD $0x54002061 // b.ne LBB0_99 $1036(%rip) WORD $0x5280004f // mov w15, #2 WORD $0xf82e792f // str x15, [x9, x14, lsl #3] - WORD $0x373031a3 // tbnz w3, #6, LBB0_133 $1588(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] - WORD $0xeb1301d6 // subs x22, x14, x19 - WORD $0x372851c3 // tbnz w3, #5, LBB0_182 $2616(%rip) - WORD $0x540153e0 // b.eq LBB0_545 $10876(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x5400fd43 // b.lo LBB0_395 $8104(%rip) + WORD $0x373034a3 // tbnz w3, #6, LBB0_138 $1684(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] + WORD $0xeb1301d7 // subs x23, x14, x19 + WORD $0x372854c3 // tbnz w3, #5, LBB0_187 $2712(%rip) + WORD $0x54015ac0 // b.eq LBB0_558 $11096(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x54010343 // b.lo LBB0_405 $8296(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 LBB0_49: - WORD $0x8b1303ce // add x14, lr, x19 + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad406dda // ldp q26, q27, [x14] WORD $0xad4175dc // ldp q28, q29, [x14, #32] WORD $0x6e208f5e // cmeq.16b v30, v26, v0 @@ -347,42 +347,42 @@ LBB0_49: WORD $0x4e221d3e // and.16b v30, v9, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d4 // fmov w20, s30 + WORD $0x1e2603d5 // fmov w21, s30 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 + WORD $0x1e260356 // fmov w22, s26 WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260357 // fmov w23, s26 + WORD $0x1e260358 // fmov w24, s26 WORD $0x4e221f9a // and.16b v26, v28, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260358 // fmov w24, s26 + WORD $0x1e260359 // fmov w25, s26 WORD $0x4e221fba // and.16b v26, v29, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260359 // fmov w25, s26 + WORD $0x1e26035a // fmov w26, s26 WORD $0xd3607ca5 // lsl x5, x5, #32 - WORD $0xaa14c0a5 // orr x5, x5, x20, lsl #48 + WORD $0xaa15c0a5 // orr x5, x5, x21, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f00af // orr x15, x5, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607f0f // lsl x15, x24, #32 - WORD $0xaa19c1ef // orr x15, x15, x25, lsl #48 - WORD $0x53103ee5 // lsl w5, w23, #16 + WORD $0xd3607f2f // lsl x15, x25, #32 + WORD $0xaa1ac1ef // orr x15, x15, x26, lsl #48 + WORD $0x53103f05 // lsl w5, w24, #16 WORD $0xaa0501ef // orr x15, x15, x5 - WORD $0xaa1501e5 // orr x5, x15, x21 + WORD $0xaa1601e5 // orr x5, x15, x22 WORD $0xb5000105 // cbnz x5, LBB0_53 $32(%rip) WORD $0xb5000186 // cbnz x6, LBB0_54 $48(%rip) WORD $0xb50002ce // cbnz x14, LBB0_55 $88(%rip) LBB0_52: - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 + WORD $0xf100feff // cmp x23, #63 WORD $0x54fff8a8 // b.hi LBB0_49 $-236(%rip) - WORD $0x140007a3 // b LBB0_392 $7820(%rip) + WORD $0x140007d3 // b LBB0_402 $8012(%rip) LBB0_53: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 @@ -391,14 +391,14 @@ LBB0_53: WORD $0x9a8f1000 // csel x0, x0, x15, ne LBB0_54: WORD $0x8a2600af // bic x15, x5, x6 - WORD $0xaa0f04d4 // orr x20, x6, x15, lsl #1 - WORD $0x8a3400a5 // bic x5, x5, x20 + WORD $0xaa0f04d5 // orr x21, x6, x15, lsl #1 + WORD $0x8a3500a5 // bic x5, x5, x21 WORD $0x9201f0a5 // and x5, x5, #0xaaaaaaaaaaaaaaaa WORD $0xab0f00af // adds x15, x5, x15 WORD $0x1a9f37e6 // cset w6, hs WORD $0xd37ff9ef // lsl x15, x15, #1 WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 - WORD $0x8a1401ef // and x15, x15, x20 + WORD $0x8a1501ef // and x15, x15, x21 WORD $0x8a2f01ce // bic x14, x14, x15 WORD $0xb4fffd8e // cbz x14, LBB0_52 $-80(%rip) LBB0_55: @@ -406,19 +406,19 @@ LBB0_55: WORD $0xdac011ce // clz x14, x14 WORD $0x8b1301ce // add x14, x14, x19 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6f85593 // tbz x19, #63, LBB0_194 $2736(%rip) - WORD $0x14000a46 // b LBB0_544 $10520(%rip) + WORD $0xb6f85893 // tbz x19, #63, LBB0_199 $2832(%rip) + WORD $0x14000a7d // b LBB0_557 $10740(%rip) LBB0_56: WORD $0x7100b0bf // cmp w5, #44 WORD $0x54001820 // b.eq LBB0_110 $772(%rip) WORD $0x710174bf // cmp w5, #93 WORD $0x540014c0 // b.eq LBB0_101 $664(%rip) - WORD $0x14000a3d // b LBB0_542 $10484(%rip) + WORD $0x14000a74 // b LBB0_555 $10704(%rip) LBB0_58: WORD $0x7100e8bf // cmp w5, #58 - WORD $0x54014761 // b.ne LBB0_542 $10476(%rip) + WORD $0x54014e41 // b.ne LBB0_555 $10696(%rip) WORD $0xf82e793f // str xzr, [x9, x14, lsl #3] - WORD $0x1400056b // b LBB0_284 $5548(%rip) + WORD $0x1400091e // b LBB0_480 $9336(%rip) LBB0_60: WORD $0xf900004e // str x14, [x2] WORD $0x92800020 // mov x0, #-2 @@ -427,36 +427,36 @@ LBB0_60: LBB0_61: WORD $0x5100c0ae // sub w14, w5, #48 WORD $0x710029df // cmp w14, #10 - WORD $0x54003c02 // b.hs LBB0_155 $1920(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0x54003f02 // b.hs LBB0_160 $2016(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0x37301f43 // tbnz w3, #6, LBB0_121 $1000(%rip) WORD $0xeb0801ce // subs x14, x14, x8 - WORD $0x540146e0 // b.eq LBB0_546 $10460(%rip) + WORD $0x54014dc0 // b.eq LBB0_559 $10680(%rip) WORD $0x394000cf // ldrb w15, [x6] WORD $0x7100c1ff // cmp w15, #48 WORD $0x540001a1 // b.ne LBB0_68 $52(%rip) WORD $0xf10005df // cmp x14, #1 - WORD $0x5400aae0 // b.eq LBB0_283 $5468(%rip) - WORD $0x38736bcf // ldrb w15, [lr, x19] + WORD $0x54012140 // b.eq LBB0_478 $9256(%rip) + WORD $0x38736a8f // ldrb w15, [x20, x19] WORD $0x5100b9e0 // sub w0, w15, #46 WORD $0x7100dc1f // cmp w0, #55 - WORD $0x5400aa68 // b.hi LBB0_283 $5452(%rip) + WORD $0x540120c8 // b.hi LBB0_478 $9240(%rip) WORD $0x9ac0218f // lsl x15, x12, x0 WORD $0xb20903f1 // mov x17, #36028797027352576 WORD $0xf2800031 // movk x17, #1 WORD $0xea1101ff // tst x15, x17 WORD $0x12800011 // mov w17, #-1 - WORD $0x5400a9a0 // b.eq LBB0_283 $5428(%rip) + WORD $0x54012000 // b.eq LBB0_478 $9216(%rip) LBB0_68: WORD $0xf10041df // cmp x14, #16 - WORD $0x54011363 // b.lo LBB0_458 $8812(%rip) + WORD $0x54011963 // b.lo LBB0_468 $9004(%rip) WORD $0xd2800005 // mov x5, #0 - WORD $0xd280001a // mov x26, #0 - WORD $0x92800016 // mov x22, #-1 + WORD $0xd280001b // mov x27, #0 + WORD $0x92800017 // mov x23, #-1 WORD $0x92800013 // mov x19, #-1 WORD $0x92800000 // mov x0, #-1 LBB0_70: - WORD $0x3cfa68da // ldr q26, [x6, x26] + WORD $0x3cfb68da // ldr q26, [x6, x27] WORD $0x6e258f5b // cmeq.16b v27, v26, v5 WORD $0x6e268f5c // cmeq.16b v28, v26, v6 WORD $0x6e278f5d // cmeq.16b v29, v26, v7 @@ -475,133 +475,133 @@ LBB0_70: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x4e221f9a // and.16b v26, v28, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260357 // fmov w23, s26 + WORD $0x1e260358 // fmov w24, s26 WORD $0x4e221fba // and.16b v26, v29, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 - WORD $0x2a3503f5 // mvn w21, w21 - WORD $0x32103eb5 // orr w21, w21, #0xffff0000 - WORD $0x5ac002b5 // rbit w21, w21 - WORD $0x5ac012b5 // clz w21, w21 - WORD $0x1ad52238 // lsl w24, w17, w21 - WORD $0x0a3801f9 // bic w25, w15, w24 - WORD $0x0a380291 // bic w17, w20, w24 - WORD $0x0a3802e7 // bic w7, w23, w24 - WORD $0x710042bf // cmp w21, #16 - WORD $0x1a9901f8 // csel w24, w15, w25, eq - WORD $0x1a910294 // csel w20, w20, w17, eq - WORD $0x1a8702f9 // csel w25, w23, w7, eq - WORD $0x5100070f // sub w15, w24, #1 - WORD $0x6a1801ef // ands w15, w15, w24 - WORD $0x5400d5e1 // b.ne LBB0_364 $6844(%rip) - WORD $0x5100068f // sub w15, w20, #1 - WORD $0x6a1401ef // ands w15, w15, w20 - WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x12800011 // mov w17, #-1 - WORD $0x5400d281 // b.ne LBB0_358 $6736(%rip) + WORD $0x1e260356 // fmov w22, s26 + WORD $0x2a3603f6 // mvn w22, w22 + WORD $0x32103ed6 // orr w22, w22, #0xffff0000 + WORD $0x5ac002d6 // rbit w22, w22 + WORD $0x5ac012d6 // clz w22, w22 + WORD $0x1ad62239 // lsl w25, w17, w22 + WORD $0x0a3901fa // bic w26, w15, w25 + WORD $0x0a3902b1 // bic w17, w21, w25 + WORD $0x0a390307 // bic w7, w24, w25 + WORD $0x710042df // cmp w22, #16 + WORD $0x1a9a01f9 // csel w25, w15, w26, eq + WORD $0x1a9102b5 // csel w21, w21, w17, eq + WORD $0x1a87031a // csel w26, w24, w7, eq WORD $0x5100072f // sub w15, w25, #1 WORD $0x6a1901ef // ands w15, w15, w25 - WORD $0x5400d221 // b.ne LBB0_358 $6724(%rip) - WORD $0x340000d8 // cbz w24, LBB0_76 $24(%rip) - WORD $0x5ac0030f // rbit w15, w24 - WORD $0x5ac011f7 // clz w23, w15 + WORD $0x5400dbe1 // b.ne LBB0_374 $7036(%rip) + WORD $0x510006af // sub w15, w21, #1 + WORD $0x6a1501ef // ands w15, w15, w21 + WORD $0x92f00007 // mov x7, #9223372036854775807 + WORD $0x12800011 // mov w17, #-1 + WORD $0x5400d881 // b.ne LBB0_368 $6928(%rip) + WORD $0x5100074f // sub w15, w26, #1 + WORD $0x6a1a01ef // ands w15, w15, w26 + WORD $0x5400d821 // b.ne LBB0_368 $6916(%rip) + WORD $0x340000d9 // cbz w25, LBB0_76 $24(%rip) + WORD $0x5ac0032f // rbit w15, w25 + WORD $0x5ac011f8 // clz w24, w15 WORD $0xb100041f // cmn x0, #1 - WORD $0x5400e5e1 // b.ne LBB0_394 $7356(%rip) - WORD $0x8b170340 // add x0, x26, x23 + WORD $0x5400ebe1 // b.ne LBB0_404 $7548(%rip) + WORD $0x8b180360 // add x0, x27, x24 LBB0_76: - WORD $0x340000d4 // cbz w20, LBB0_79 $24(%rip) - WORD $0x5ac0028f // rbit w15, w20 - WORD $0x5ac011f4 // clz w20, w15 + WORD $0x340000d5 // cbz w21, LBB0_79 $24(%rip) + WORD $0x5ac002af // rbit w15, w21 + WORD $0x5ac011f5 // clz w21, w15 WORD $0xb100067f // cmn x19, #1 - WORD $0x5400d281 // b.ne LBB0_362 $6736(%rip) - WORD $0x8b140353 // add x19, x26, x20 + WORD $0x5400d881 // b.ne LBB0_372 $6928(%rip) + WORD $0x8b150373 // add x19, x27, x21 LBB0_79: - WORD $0x340000d9 // cbz w25, LBB0_82 $24(%rip) - WORD $0x5ac0032f // rbit w15, w25 - WORD $0x5ac011f4 // clz w20, w15 - WORD $0xb10006df // cmn x22, #1 - WORD $0x5400d1c1 // b.ne LBB0_362 $6712(%rip) - WORD $0x8b140356 // add x22, x26, x20 + WORD $0x340000da // cbz w26, LBB0_82 $24(%rip) + WORD $0x5ac0034f // rbit w15, w26 + WORD $0x5ac011f5 // clz w21, w15 + WORD $0xb10006ff // cmn x23, #1 + WORD $0x5400d7c1 // b.ne LBB0_372 $6904(%rip) + WORD $0x8b150377 // add x23, x27, x21 LBB0_82: - WORD $0x710042bf // cmp w21, #16 - WORD $0x540033c1 // b.ne LBB0_167 $1656(%rip) - WORD $0x9100435a // add x26, x26, #16 + WORD $0x710042df // cmp w22, #16 + WORD $0x540036c1 // b.ne LBB0_172 $1752(%rip) + WORD $0x9100437b // add x27, x27, #16 WORD $0xd10040a5 // sub x5, x5, #16 - WORD $0x8b0501d5 // add x21, x14, x5 - WORD $0xf1003ebf // cmp x21, #15 + WORD $0x8b0501d6 // add x22, x14, x5 + WORD $0xf1003edf // cmp x22, #15 WORD $0x54fff6a8 // b.hi LBB0_70 $-300(%rip) - WORD $0x8b1a00c5 // add x5, x6, x26 - WORD $0xeb1a01df // cmp x14, x26 - WORD $0x54003300 // b.eq LBB0_168 $1632(%rip) + WORD $0x8b1b00c5 // add x5, x6, x27 + WORD $0xeb1b01df // cmp x14, x27 + WORD $0x54003600 // b.eq LBB0_173 $1728(%rip) LBB0_85: - WORD $0x8b1500b9 // add x25, x5, x21 + WORD $0x8b1600ba // add x26, x5, x22 WORD $0xaa2503ee // mvn x14, x5 - WORD $0x8b1e010f // add x15, x8, lr + WORD $0x8b14010f // add x15, x8, x20 WORD $0x8b0f01ce // add x14, x14, x15 - WORD $0xcb0600ba // sub x26, x5, x6 - WORD $0xaa0503fe // mov lr, x5 + WORD $0xcb0600b4 // sub x20, x5, x6 + WORD $0xaa0503fb // mov x27, x5 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x14000009 // b LBB0_88 $36(%rip) LBB0_86: WORD $0xb100067f // cmn x19, #1 - WORD $0xaa1a03f3 // mov x19, x26 + WORD $0xaa1403f3 // mov x19, x20 WORD $0x540003a1 // b.ne LBB0_97 $116(%rip) LBB0_87: WORD $0xd10005ce // sub x14, x14, #1 - WORD $0x9100075a // add x26, x26, #1 - WORD $0xaa1e03e5 // mov x5, lr - WORD $0xd10006b5 // sub x21, x21, #1 - WORD $0xb400a5d5 // cbz x21, LBB0_294 $5304(%rip) + WORD $0x91000694 // add x20, x20, #1 + WORD $0xaa1b03e5 // mov x5, x27 + WORD $0xd10006d6 // sub x22, x22, #1 + WORD $0xb400abd6 // cbz x22, LBB0_304 $5496(%rip) LBB0_88: - WORD $0x384017d4 // ldrb w20, [lr], #1 - WORD $0x5100c28f // sub w15, w20, #48 + WORD $0x38401775 // ldrb w21, [x27], #1 + WORD $0x5100c2af // sub w15, w21, #48 WORD $0x710029ff // cmp w15, #10 WORD $0x54ffff03 // b.lo LBB0_87 $-32(%rip) - WORD $0x7100b69f // cmp w20, #45 + WORD $0x7100b6bf // cmp w21, #45 WORD $0x5400016d // b.le LBB0_94 $44(%rip) - WORD $0x7101969f // cmp w20, #101 + WORD $0x710196bf // cmp w21, #101 WORD $0x54fffe20 // b.eq LBB0_86 $-60(%rip) - WORD $0x7101169f // cmp w20, #69 + WORD $0x710116bf // cmp w21, #69 WORD $0x54fffde0 // b.eq LBB0_86 $-68(%rip) - WORD $0x7100ba9f // cmp w20, #46 - WORD $0x54002f81 // b.ne LBB0_168 $1520(%rip) + WORD $0x7100babf // cmp w21, #46 + WORD $0x54003281 // b.ne LBB0_173 $1616(%rip) WORD $0xb100041f // cmn x0, #1 - WORD $0xaa1a03e0 // mov x0, x26 + WORD $0xaa1403e0 // mov x0, x20 WORD $0x54fffda0 // b.eq LBB0_87 $-76(%rip) WORD $0x14000008 // b LBB0_97 $32(%rip) LBB0_94: - WORD $0x7100ae9f // cmp w20, #43 + WORD $0x7100aebf // cmp w21, #43 WORD $0x54000060 // b.eq LBB0_96 $12(%rip) - WORD $0x7100b69f // cmp w20, #45 - WORD $0x54002e81 // b.ne LBB0_168 $1488(%rip) + WORD $0x7100b6bf // cmp w21, #45 + WORD $0x54003181 // b.ne LBB0_173 $1584(%rip) LBB0_96: - WORD $0xb10006df // cmn x22, #1 - WORD $0xaa1a03f6 // mov x22, x26 + WORD $0xb10006ff // cmn x23, #1 + WORD $0xaa1403f7 // mov x23, x20 WORD $0x54fffca0 // b.eq LBB0_87 $-108(%rip) LBB0_97: - WORD $0x5280007a // mov w26, #3 - WORD $0x14000191 // b LBB0_180 $1604(%rip) + WORD $0x5280007b // mov w27, #3 + WORD $0x140001a9 // b LBB0_185 $1700(%rip) LBB0_98: WORD $0x7100b0bf // cmp w5, #44 WORD $0x540004a0 // b.eq LBB0_112 $148(%rip) LBB0_99: WORD $0x7101f4bf // cmp w5, #125 WORD $0x54000080 // b.eq LBB0_101 $16(%rip) - WORD $0x1400099b // b LBB0_542 $9836(%rip) + WORD $0x140009d2 // b LBB0_555 $10056(%rip) LBB0_100: WORD $0x710174bf // cmp w5, #93 WORD $0x540000c1 // b.ne LBB0_102 $24(%rip) LBB0_101: WORD $0xf900004e // str x14, [x2] - WORD $0xaa0e03f6 // mov x22, x14 + WORD $0xaa0e03f7 // mov x23, x14 WORD $0xaa0b03e0 // mov x0, x11 WORD $0xb5ffc80e // cbnz x14, LBB0_1 $-1792(%rip) - WORD $0x140009ff // b LBB0_578 $10236(%rip) + WORD $0x14000a36 // b LBB0_591 $10456(%rip) LBB0_102: WORD $0xf82e792c // str x12, [x9, x14, lsl #3] WORD $0x92800020 // mov x0, #-2 @@ -609,40 +609,40 @@ LBB0_102: WORD $0x54ffeb8d // b.le LBB0_61 $-656(%rip) LBB0_103: WORD $0x7101b4bf // cmp w5, #109 - WORD $0x5400298d // b.le LBB0_162 $1328(%rip) + WORD $0x54002c8d // b.le LBB0_167 $1424(%rip) WORD $0x7101b8bf // cmp w5, #110 - WORD $0x540041a0 // b.eq LBB0_200 $2100(%rip) + WORD $0x540044a0 // b.eq LBB0_205 $2196(%rip) WORD $0x7101d0bf // cmp w5, #116 - WORD $0x54004000 // b.eq LBB0_198 $2048(%rip) + WORD $0x54004300 // b.eq LBB0_203 $2144(%rip) WORD $0x7101ecbf // cmp w5, #123 - WORD $0x54013e61 // b.ne LBB0_578 $10188(%rip) - WORD $0x37304f43 // tbnz w3, #6, LBB0_218 $2536(%rip) + WORD $0x54014541 // b.ne LBB0_591 $10408(%rip) + WORD $0x37305243 // tbnz w3, #6, LBB0_223 $2632(%rip) WORD $0xf9400048 // ldr x8, [x2] WORD $0xf13ffd1f // cmp x8, #4095 - WORD $0x540130cc // b.gt LBB0_543 $9752(%rip) + WORD $0x540137ac // b.gt LBB0_556 $9972(%rip) WORD $0x9100050e // add x14, x8, #1 WORD $0xf900004e // str x14, [x2] WORD $0x528000ce // mov w14, #6 - WORD $0x140001f4 // b LBB0_197 $2000(%rip) + WORD $0x1400020c // b LBB0_202 $2096(%rip) LBB0_110: - WORD $0xf13ffedf // cmp x22, #4095 - WORD $0x5401300c // b.gt LBB0_543 $9728(%rip) - WORD $0x910006c8 // add x8, x22, #1 + WORD $0xf13ffeff // cmp x23, #4095 + WORD $0x540136ec // b.gt LBB0_556 $9948(%rip) + WORD $0x910006e8 // add x8, x23, #1 WORD $0xf9000048 // str x8, [x2] - WORD $0xf836793f // str xzr, [x9, x22, lsl #3] - WORD $0x140004ac // b LBB0_284 $4784(%rip) + WORD $0xf837793f // str xzr, [x9, x23, lsl #3] + WORD $0x1400085f // b LBB0_480 $8572(%rip) LBB0_112: - WORD $0xf13ffedf // cmp x22, #4095 - WORD $0x54012f4c // b.gt LBB0_543 $9704(%rip) - WORD $0x910006c8 // add x8, x22, #1 + WORD $0xf13ffeff // cmp x23, #4095 + WORD $0x5401362c // b.gt LBB0_556 $9924(%rip) + WORD $0x910006e8 // add x8, x23, #1 WORD $0xf9000048 // str x8, [x2] - WORD $0xf836793a // str x26, [x9, x22, lsl #3] - WORD $0x140004a6 // b LBB0_284 $4760(%rip) + WORD $0xf837793b // str x27, [x9, x23, lsl #3] + WORD $0x14000859 // b LBB0_480 $8548(%rip) LBB0_114: - WORD $0xf9400760 // ldr x0, [x27, #8] + WORD $0xf94007c0 // ldr x0, [lr, #8] WORD $0xcb13000e // sub x14, x0, x19 WORD $0xf10081df // cmp x14, #32 - WORD $0x5400c44b // b.lt LBB0_359 $6280(%rip) + WORD $0x5400ca4b // b.lt LBB0_369 $6472(%rip) WORD $0xd280000e // mov x14, #0 WORD $0xd2800005 // mov x5, #0 WORD $0xcb080000 // sub x0, x0, x8 @@ -650,13 +650,13 @@ LBB0_114: WORD $0x14000008 // b LBB0_118 $32(%rip) LBB0_116: WORD $0xd2800005 // mov x5, #0 - WORD $0xb50005b5 // cbnz x21, LBB0_120 $180(%rip) + WORD $0xb50005b6 // cbnz x22, LBB0_120 $180(%rip) LBB0_117: WORD $0x910081ce // add x14, x14, #32 WORD $0xd1008273 // sub x19, x19, #32 WORD $0x8b13000f // add x15, x0, x19 WORD $0xf100fdff // cmp x15, #63 - WORD $0x5400c10d // b.le LBB0_356 $6176(%rip) + WORD $0x5400c70d // b.le LBB0_366 $6368(%rip) LBB0_118: WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x3cc011fa // ldur q26, [x15, #1] @@ -665,51 +665,52 @@ LBB0_118: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260395 // fmov w21, s28 + WORD $0x1e260396 // fmov w22, s28 WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 WORD $0x1e26038f // fmov w15, s28 - WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x33103df6 // bfi w22, w15, #16, #16 WORD $0x6e218f5a // cmeq.16b v26, v26, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x6e218f7a // cmeq.16b v26, v27, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df4 // bfi w20, w15, #16, #16 - WORD $0x7100029f // cmp w20, #0 + WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x710002bf // cmp w21, #0 WORD $0xfa4008a0 // ccmp x5, #0, #0, eq WORD $0x54fffbc0 // b.eq LBB0_116 $-136(%rip) - WORD $0x0a25028f // bic w15, w20, w5 - WORD $0x2a0f04b6 // orr w22, w5, w15, lsl #1 - WORD $0x0a040285 // and w5, w20, w4 - WORD $0x0a3600a5 // bic w5, w5, w22 + WORD $0x0a2502af // bic w15, w21, w5 + WORD $0x2a0f04b7 // orr w23, w5, w15, lsl #1 + WORD $0x0a0402a5 // and w5, w21, w4 + WORD $0x0a3700a5 // bic w5, w5, w23 WORD $0x2b0f00af // adds w15, w5, w15 WORD $0x1a9f37e5 // cset w5, hs WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 - WORD $0x0a1601ef // and w15, w15, w22 + WORD $0x0a1701ef // and w15, w15, w23 WORD $0x2a2f03ef // mvn w15, w15 - WORD $0x8a1501f5 // and x21, x15, x21 - WORD $0xb4fffab5 // cbz x21, LBB0_117 $-172(%rip) + WORD $0x8a1601f6 // and x22, x15, x22 + WORD $0xb4fffab6 // cbz x22, LBB0_117 $-172(%rip) LBB0_120: - WORD $0xdac002af // rbit x15, x21 + WORD $0xdac002cf // rbit x15, x22 WORD $0xdac011ef // clz x15, x15 WORD $0x8b0e010e // add x14, x8, x14 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910009d3 // add x19, x14, #2 - WORD $0x14000465 // b LBB0_283 $4500(%rip) + WORD $0x14000818 // b LBB0_478 $8288(%rip) LBB0_121: WORD $0xcb1301ce // sub x14, x14, x19 WORD $0xf10041df // cmp x14, #16 - WORD $0x540001e3 // b.lo LBB0_124 $60(%rip) -LBB0_122: - WORD $0x3cf36bda // ldr q26, [lr, x19] + WORD $0x54000223 // b.lo LBB0_125 $68(%rip) + WORD $0xd2800000 // mov x0, #0 +LBB0_123: + WORD $0x3cf36a9a // ldr q26, [x20, x19] WORD $0x6e348f5b // cmeq.16b v27, v26, v20 WORD $0x4e321f5a // and.16b v26, v26, v18 WORD $0x6e358f5a // cmeq.16b v26, v26, v21 @@ -717,48 +718,72 @@ LBB0_122: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260340 // fmov w0, s26 - WORD $0x35008aa0 // cbnz w0, LBB0_282 $4436(%rip) + WORD $0x1e260345 // fmov w5, s26 + WORD $0x35000365 // cbnz w5, LBB0_133 $108(%rip) WORD $0xd10041ce // sub x14, x14, #16 WORD $0x91004273 // add x19, x19, #16 + WORD $0x91004000 // add x0, x0, #16 WORD $0xf1003ddf // cmp x14, #15 - WORD $0x54fffe68 // b.hi LBB0_122 $-52(%rip) -LBB0_124: - WORD $0x8b1303c0 // add x0, lr, x19 - WORD $0xb40001ee // cbz x14, LBB0_131 $60(%rip) + WORD $0x54fffe48 // b.hi LBB0_123 $-56(%rip) +LBB0_125: + WORD $0x8b130280 // add x0, x20, x19 + WORD $0xd284c013 // mov x19, #9728 + WORD $0xf2c20033 // movk x19, #4097, lsl #32 + WORD $0xb400020e // cbz x14, LBB0_132 $64(%rip) WORD $0x8b0e0005 // add x5, x0, x14 - WORD $0xcb1e0013 // sub x19, x0, lr -LBB0_126: +LBB0_127: WORD $0x39400006 // ldrb w6, [x0] WORD $0x7100b0df // cmp w6, #44 - WORD $0x540089a0 // b.eq LBB0_283 $4404(%rip) - WORD $0x7101f4df // cmp w6, #125 - WORD $0x54008960 // b.eq LBB0_283 $4396(%rip) + WORD $0x9ac6218f // lsl x15, x12, x6 + WORD $0x8a1301ef // and x15, x15, x19 + WORD $0xfa4099e4 // ccmp x15, #0, #4, ls + WORD $0x54000121 // b.ne LBB0_132 $36(%rip) WORD $0x710174df // cmp w6, #93 - WORD $0x54008920 // b.eq LBB0_283 $4388(%rip) + WORD $0x540000e0 // b.eq LBB0_132 $28(%rip) + WORD $0x7101f4df // cmp w6, #125 + WORD $0x540000a0 // b.eq LBB0_132 $20(%rip) WORD $0x91000400 // add x0, x0, #1 - WORD $0x91000673 // add x19, x19, #1 WORD $0xf10005ce // subs x14, x14, #1 - WORD $0x54fffec1 // b.ne LBB0_126 $-40(%rip) -LBB0_130: + WORD $0x54fffe81 // b.ne LBB0_127 $-48(%rip) WORD $0xaa0503e0 // mov x0, x5 -LBB0_131: - WORD $0xcb1e0013 // sub x19, x0, lr LBB0_132: - WORD $0x5280007a // mov w26, #3 - WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x12800011 // mov w17, #-1 - WORD $0x1400043f // b LBB0_283 $4348(%rip) + WORD $0xcb140013 // sub x19, x0, x20 + WORD $0x140007f0 // b LBB0_478 $8128(%rip) LBB0_133: - WORD $0xf9400760 // ldr x0, [x27, #8] + WORD $0x5ac000ae // rbit w14, w5 + WORD $0x5ac011ce // clz w14, w14 + WORD $0x8b1301d3 // add x19, x14, x19 + WORD $0xf9000033 // str x19, [x1] + WORD $0xf100067f // cmp x19, #1 + WORD $0x5400fd6b // b.lt LBB0_479 $8108(%rip) + WORD $0x8b0001ce // add x14, x14, x0 +LBB0_135: + WORD $0x386e68cf // ldrb w15, [x6, x14] + WORD $0x710081ff // cmp w15, #32 + WORD $0x9acf218f // lsl x15, x12, x15 + WORD $0x8a0d01ef // and x15, x15, x13 + WORD $0xfa4099e4 // ccmp x15, #0, #4, ls + WORD $0x54009480 // b.eq LBB0_303 $4752(%rip) + WORD $0x8b0e010f // add x15, x8, x14 + WORD $0xf900002f // str x15, [x1] + WORD $0xd10005ce // sub x14, x14, #1 + WORD $0x8b0e0100 // add x0, x8, x14 + WORD $0x9100080f // add x15, x0, #2 + WORD $0xf10005ff // cmp x15, #1 + WORD $0x54fffe8c // b.gt LBB0_135 $-48(%rip) +LBB0_137: + WORD $0x91000413 // add x19, x0, #1 + WORD $0x140007db // b LBB0_479 $8044(%rip) +LBB0_138: + WORD $0xf94007c0 // ldr x0, [lr, #8] WORD $0xcb13000e // sub x14, x0, x19 WORD $0xf10081df // cmp x14, #32 - WORD $0x5400baeb // b.lt LBB0_365 $5980(%rip) + WORD $0x5400bdeb // b.lt LBB0_375 $6076(%rip) WORD $0xd280000e // mov x14, #0 WORD $0xd2800005 // mov x5, #0 WORD $0xcb080000 // sub x0, x0, x8 WORD $0x528003f3 // mov w19, #31 -LBB0_135: +LBB0_140: WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x3cc011fa // ldur q26, [x15, #1] WORD $0x3cc111fb // ldur q27, [x15, #17] @@ -766,63 +791,63 @@ LBB0_135: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260395 // fmov w21, s28 + WORD $0x1e260396 // fmov w22, s28 WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 WORD $0x1e26038f // fmov w15, s28 - WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x33103df6 // bfi w22, w15, #16, #16 WORD $0x6e218f5a // cmeq.16b v26, v26, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x6e218f7a // cmeq.16b v26, v27, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df4 // bfi w20, w15, #16, #16 - WORD $0x7100029f // cmp w20, #0 + WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x710002bf // cmp w21, #0 WORD $0xfa4008a0 // ccmp x5, #0, #0, eq - WORD $0x54000180 // b.eq LBB0_137 $48(%rip) - WORD $0x0a25028f // bic w15, w20, w5 - WORD $0x2a0f04b6 // orr w22, w5, w15, lsl #1 - WORD $0x0a040285 // and w5, w20, w4 - WORD $0x0a3600a5 // bic w5, w5, w22 + WORD $0x54000180 // b.eq LBB0_142 $48(%rip) + WORD $0x0a2502af // bic w15, w21, w5 + WORD $0x2a0f04b7 // orr w23, w5, w15, lsl #1 + WORD $0x0a0402a5 // and w5, w21, w4 + WORD $0x0a3700a5 // bic w5, w5, w23 WORD $0x2b0f00af // adds w15, w5, w15 WORD $0x1a9f37e5 // cset w5, hs WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 - WORD $0x0a1601ef // and w15, w15, w22 + WORD $0x0a1701ef // and w15, w15, w23 WORD $0x2a2f03ef // mvn w15, w15 - WORD $0x8a1501f5 // and x21, x15, x21 - WORD $0x14000002 // b LBB0_138 $8(%rip) -LBB0_137: + WORD $0x8a1601f6 // and x22, x15, x22 + WORD $0x14000002 // b LBB0_143 $8(%rip) +LBB0_142: WORD $0xd2800005 // mov x5, #0 -LBB0_138: - WORD $0xb5000f55 // cbnz x21, LBB0_152 $488(%rip) +LBB0_143: + WORD $0xb5000f56 // cbnz x22, LBB0_157 $488(%rip) WORD $0x910081ce // add x14, x14, #32 WORD $0xd1008273 // sub x19, x19, #32 WORD $0x8b13000f // add x15, x0, x19 WORD $0xf100fdff // cmp x15, #63 - WORD $0x54fffa6c // b.gt LBB0_135 $-180(%rip) - WORD $0xb500f185 // cbnz x5, LBB0_468 $7728(%rip) + WORD $0x54fffa6c // b.gt LBB0_140 $-180(%rip) + WORD $0xb500f565 // cbnz x5, LBB0_481 $7852(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910005e5 // add x5, x15, #1 WORD $0xaa2e03ee // mvn x14, x14 WORD $0x8b0001ce // add x14, x14, x0 WORD $0xf10005df // cmp x14, #1 - WORD $0x5400f32a // b.ge LBB0_471 $7780(%rip) - WORD $0x1400093d // b LBB0_577 $9460(%rip) -LBB0_142: - WORD $0x54011b00 // b.eq LBB0_545 $9056(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x5400b883 // b.lo LBB0_372 $5904(%rip) + WORD $0x5400f70a // b.ge LBB0_484 $7904(%rip) + WORD $0x1400095c // b LBB0_590 $9584(%rip) +LBB0_147: + WORD $0x54011ee0 // b.eq LBB0_558 $9180(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x5400bb83 // b.lo LBB0_382 $6000(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 -LBB0_145: - WORD $0x8b1303ce // add x14, lr, x19 +LBB0_150: + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad4071dd // ldp q29, q28, [x14] WORD $0xad4169db // ldp q27, q26, [x14, #32] WORD $0x6e208fbe // cmeq.16b v30, v29, v0 @@ -844,40 +869,40 @@ LBB0_145: WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d4 // fmov w20, s30 + WORD $0x1e2603d5 // fmov w21, s30 WORD $0x6e218fbe // cmeq.16b v30, v29, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d5 // fmov w21, s30 + WORD $0x1e2603d6 // fmov w22, s30 WORD $0x6e218f9e // cmeq.16b v30, v28, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d7 // fmov w23, s30 + WORD $0x1e2603d8 // fmov w24, s30 WORD $0x6e218f7e // cmeq.16b v30, v27, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d8 // fmov w24, s30 + WORD $0x1e2603d9 // fmov w25, s30 WORD $0x6e218f5e // cmeq.16b v30, v26, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d9 // fmov w25, s30 + WORD $0x1e2603da // fmov w26, s30 WORD $0xd3607ca5 // lsl x5, x5, #32 - WORD $0xaa14c0a5 // orr x5, x5, x20, lsl #48 + WORD $0xaa15c0a5 // orr x5, x5, x21, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f00af // orr x15, x5, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607f0f // lsl x15, x24, #32 - WORD $0xaa19c1ef // orr x15, x15, x25, lsl #48 - WORD $0x53103ee5 // lsl w5, w23, #16 + WORD $0xd3607f2f // lsl x15, x25, #32 + WORD $0xaa1ac1ef // orr x15, x15, x26, lsl #48 + WORD $0x53103f05 // lsl w5, w24, #16 WORD $0xaa0501ef // orr x15, x15, x5 - WORD $0xaa1501e5 // orr x5, x15, x21 - WORD $0xb5000445 // cbnz x5, LBB0_150 $136(%rip) - WORD $0xb50004c6 // cbnz x6, LBB0_151 $152(%rip) -LBB0_147: + WORD $0xaa1601e5 // orr x5, x15, x22 + WORD $0xb5000445 // cbnz x5, LBB0_155 $136(%rip) + WORD $0xb50004c6 // cbnz x6, LBB0_156 $152(%rip) +LBB0_152: WORD $0x6e3d349d // cmhi.16b v29, v4, v29 WORD $0x4e221fbd // and.16b v29, v29, v2 WORD $0x4e0303bd // tbl.16b v29, { v29 }, v3 @@ -892,44 +917,44 @@ LBB0_147: WORD $0x4e221f7b // and.16b v27, v27, v2 WORD $0x4e03037b // tbl.16b v27, { v27 }, v3 WORD $0x4e71bb7b // addv.8h h27, v27 - WORD $0x1e260374 // fmov w20, s27 + WORD $0x1e260375 // fmov w21, s27 WORD $0x6e3a349a // cmhi.16b v26, v4, v26 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 - WORD $0xd3607e94 // lsl x20, x20, #32 - WORD $0xaa15c294 // orr x20, x20, x21, lsl #48 + WORD $0x1e260356 // fmov w22, s26 + WORD $0xd3607eb5 // lsl x21, x21, #32 + WORD $0xaa16c2b5 // orr x21, x21, x22, lsl #48 WORD $0x53103ca5 // lsl w5, w5, #16 - WORD $0xaa050285 // orr x5, x20, x5 + WORD $0xaa0502a5 // orr x5, x21, x5 WORD $0xaa0f00a5 // orr x5, x5, x15 - WORD $0xb500042e // cbnz x14, LBB0_153 $132(%rip) - WORD $0xb50111a5 // cbnz x5, LBB0_551 $8756(%rip) - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xb500042e // cbnz x14, LBB0_158 $132(%rip) + WORD $0xb5011585 // cbnz x5, LBB0_564 $8880(%rip) + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 - WORD $0x54fff568 // b.hi LBB0_145 $-340(%rip) - WORD $0x1400052f // b LBB0_361 $5308(%rip) -LBB0_150: + WORD $0xf100feff // cmp x23, #63 + WORD $0x54fff568 // b.hi LBB0_150 $-340(%rip) + WORD $0x14000547 // b LBB0_371 $5404(%rip) +LBB0_155: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011ef // clz x15, x15 WORD $0x8b1301ef // add x15, x15, x19 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_151: +LBB0_156: WORD $0x8a2600af // bic x15, x5, x6 - WORD $0xaa0f04d4 // orr x20, x6, x15, lsl #1 - WORD $0x8a3400a5 // bic x5, x5, x20 + WORD $0xaa0f04d5 // orr x21, x6, x15, lsl #1 + WORD $0x8a3500a5 // bic x5, x5, x21 WORD $0x9201f0a5 // and x5, x5, #0xaaaaaaaaaaaaaaaa WORD $0xab0f00af // adds x15, x5, x15 WORD $0x1a9f37e6 // cset w6, hs WORD $0xd37ff9ef // lsl x15, x15, #1 WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 - WORD $0x8a1401ef // and x15, x15, x20 + WORD $0x8a1501ef // and x15, x15, x21 WORD $0x8a2f01ce // bic x14, x14, x15 - WORD $0x17ffffd1 // b LBB0_147 $-188(%rip) -LBB0_152: - WORD $0xdac002af // rbit x15, x21 + WORD $0x17ffffd1 // b LBB0_152 $-188(%rip) +LBB0_157: + WORD $0xdac002cf // rbit x15, x22 WORD $0xdac011ef // clz x15, x15 WORD $0x8b0e010e // add x14, x8, x14 WORD $0x8b0e01ee // add x14, x15, x14 @@ -937,82 +962,82 @@ LBB0_152: WORD $0xf9000033 // str x19, [x1] WORD $0xaa0803e0 // mov x0, x8 WORD $0xeb07011f // cmp x8, x7 - WORD $0x54001983 // b.lo LBB0_195 $816(%rip) - WORD $0x140008c8 // b LBB0_578 $8992(%rip) -LBB0_153: + WORD $0x54001983 // b.lo LBB0_200 $816(%rip) + WORD $0x140008e7 // b LBB0_591 $9116(%rip) +LBB0_158: WORD $0xdac001ce // rbit x14, x14 WORD $0xdac011ce // clz x14, x14 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011e5 // clz x5, x15 WORD $0xeb0e00bf // cmp x5, x14 - WORD $0x54011783 // b.lo LBB0_574 $8944(%rip) + WORD $0x54011b63 // b.lo LBB0_587 $9068(%rip) WORD $0x8b1301ce // add x14, x14, x19 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6f87053 // tbz x19, #63, LBB0_283 $3592(%rip) - WORD $0x14000857 // b LBB0_544 $8540(%rip) -LBB0_155: + WORD $0xb6f8e3b3 // tbz x19, #63, LBB0_478 $7284(%rip) + WORD $0x14000876 // b LBB0_557 $8664(%rip) +LBB0_160: WORD $0x710088bf // cmp w5, #34 - WORD $0x54001cc0 // b.eq LBB0_206 $920(%rip) + WORD $0x54001cc0 // b.eq LBB0_211 $920(%rip) WORD $0x7100b4bf // cmp w5, #45 - WORD $0x54011741 // b.ne LBB0_578 $8936(%rip) - WORD $0x37306ae3 // tbnz w3, #6, LBB0_273 $3420(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] - WORD $0xeb1301d9 // subs x25, x14, x19 - WORD $0x54011520 // b.eq LBB0_570 $8868(%rip) - WORD $0x8b1303c0 // add x0, lr, x19 + WORD $0x54011b21 // b.ne LBB0_591 $9060(%rip) + WORD $0x37306ae3 // tbnz w3, #6, LBB0_278 $3420(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] + WORD $0xeb1301da // subs x26, x14, x19 + WORD $0x54011900 // b.eq LBB0_583 $8992(%rip) + WORD $0x8b130280 // add x0, x20, x19 WORD $0x3940000e // ldrb w14, [x0] WORD $0x7100c1df // cmp w14, #48 - WORD $0x54008881 // b.ne LBB0_309 $4368(%rip) - WORD $0xf100073f // cmp x25, #1 - WORD $0x540086e1 // b.ne LBB0_307 $4316(%rip) -LBB0_161: + WORD $0x54008b81 // b.ne LBB0_319 $4464(%rip) + WORD $0xf100075f // cmp x26, #1 + WORD $0x540089e1 // b.ne LBB0_317 $4412(%rip) +LBB0_166: WORD $0x5280002e // mov w14, #1 - WORD $0x140004e0 // b LBB0_355 $4992(%rip) -LBB0_162: + WORD $0x140004f8 // b LBB0_365 $5088(%rip) +LBB0_167: WORD $0x71016cbf // cmp w5, #91 - WORD $0x540019c0 // b.eq LBB0_203 $824(%rip) + WORD $0x540019c0 // b.eq LBB0_208 $824(%rip) WORD $0x710198bf // cmp w5, #102 - WORD $0x54011541 // b.ne LBB0_578 $8872(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0x54011921 // b.ne LBB0_591 $8996(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xd10011cf // sub x15, x14, #4 WORD $0xeb0f011f // cmp x8, x15 - WORD $0x54010942 // b.hs LBB0_550 $8488(%rip) - WORD $0xb8736bce // ldr w14, [lr, x19] + WORD $0x54010d22 // b.hs LBB0_563 $8612(%rip) + WORD $0xb8736a8e // ldr w14, [x20, x19] WORD $0x528d8c2f // mov w15, #27745 WORD $0x72acae6f // movk w15, #25971, lsl #16 WORD $0x6b0f01df // cmp w14, w15 - WORD $0x54010ee1 // b.ne LBB0_563 $8668(%rip) + WORD $0x540112c1 // b.ne LBB0_576 $8792(%rip) WORD $0x91001513 // add x19, x8, #5 - WORD $0x14000362 // b LBB0_283 $3464(%rip) -LBB0_167: - WORD $0x8b3540ce // add x14, x6, w21, uxtw - WORD $0x8b1a01c5 // add x5, x14, x26 -LBB0_168: + WORD $0x140006fd // b LBB0_478 $7156(%rip) +LBB0_172: + WORD $0x8b3640ce // add x14, x6, w22, uxtw + WORD $0x8b1b01c5 // add x5, x14, x27 +LBB0_173: WORD $0x9280000e // mov x14, #-1 - WORD $0xb4010740 // cbz x0, LBB0_547 $8424(%rip) -LBB0_169: - WORD $0xb4010736 // cbz x22, LBB0_547 $8420(%rip) - WORD $0xb4010713 // cbz x19, LBB0_547 $8416(%rip) + WORD $0xb4010b20 // cbz x0, LBB0_560 $8548(%rip) +LBB0_174: + WORD $0xb4010b17 // cbz x23, LBB0_560 $8544(%rip) + WORD $0xb4010af3 // cbz x19, LBB0_560 $8540(%rip) WORD $0xcb0600ae // sub x14, x5, x6 WORD $0xd10005c5 // sub x5, x14, #1 WORD $0xeb05001f // cmp x0, x5 - WORD $0x54000300 // b.eq LBB0_179 $96(%rip) - WORD $0xeb0502df // cmp x22, x5 - WORD $0x540002c0 // b.eq LBB0_179 $88(%rip) + WORD $0x54000300 // b.eq LBB0_184 $96(%rip) + WORD $0xeb0502ff // cmp x23, x5 + WORD $0x540002c0 // b.eq LBB0_184 $88(%rip) WORD $0xeb05027f // cmp x19, x5 - WORD $0x54000280 // b.eq LBB0_179 $80(%rip) - WORD $0xf10006cf // subs x15, x22, #1 - WORD $0x5280007a // mov w26, #3 + WORD $0x54000280 // b.eq LBB0_184 $80(%rip) + WORD $0xf10006ef // subs x15, x23, #1 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x5400006b // b.lt LBB0_176 $12(%rip) + WORD $0x5400006b // b.lt LBB0_181 $12(%rip) WORD $0xeb0f027f // cmp x19, x15 - WORD $0x54010561 // b.ne LBB0_548 $8364(%rip) -LBB0_176: + WORD $0x54010941 // b.ne LBB0_561 $8488(%rip) +LBB0_181: WORD $0xaa130005 // orr x5, x0, x19 - WORD $0xb7f80065 // tbnz x5, #63, LBB0_178 $12(%rip) + WORD $0xb7f80065 // tbnz x5, #63, LBB0_183 $12(%rip) WORD $0xeb13001f // cmp x0, x19 - WORD $0x5401062a // b.ge LBB0_553 $8388(%rip) -LBB0_178: + WORD $0x54010a0a // b.ge LBB0_566 $8512(%rip) +LBB0_183: WORD $0xd37ffcaf // lsr x15, x5, #63 WORD $0x520001ef // eor w15, w15, #0x1 WORD $0xd1000671 // sub x17, x19, #1 @@ -1021,23 +1046,23 @@ LBB0_178: WORD $0x6a1101ff // tst w15, w17 WORD $0x12800011 // mov w17, #-1 WORD $0xda9301ce // csinv x14, x14, x19, eq - WORD $0x14000004 // b LBB0_180 $16(%rip) -LBB0_179: + WORD $0x14000004 // b LBB0_185 $16(%rip) +LBB0_184: WORD $0xcb0e03ee // neg x14, x14 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 -LBB0_180: - WORD $0xb7f9032e // tbnz x14, #63, LBB0_547 $8292(%rip) +LBB0_185: + WORD $0xb7f9070e // tbnz x14, #63, LBB0_560 $8416(%rip) WORD $0x8b0e0113 // add x19, x8, x14 - WORD $0x1400033b // b LBB0_283 $3308(%rip) -LBB0_182: - WORD $0x54010240 // b.eq LBB0_545 $8264(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x5400b063 // b.lo LBB0_401 $5644(%rip) + WORD $0x140006d6 // b LBB0_478 $7000(%rip) +LBB0_187: + WORD $0x54010620 // b.eq LBB0_558 $8388(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x5400b363 // b.lo LBB0_411 $5740(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 -LBB0_185: - WORD $0x8b1303ce // add x14, lr, x19 +LBB0_190: + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad4071dd // ldp q29, q28, [x14] WORD $0xad4169db // ldp q27, q26, [x14, #32] WORD $0x6e208fbe // cmeq.16b v30, v29, v0 @@ -1059,40 +1084,40 @@ LBB0_185: WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d4 // fmov w20, s30 + WORD $0x1e2603d5 // fmov w21, s30 WORD $0x6e218fbe // cmeq.16b v30, v29, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d5 // fmov w21, s30 + WORD $0x1e2603d6 // fmov w22, s30 WORD $0x6e218f9e // cmeq.16b v30, v28, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d7 // fmov w23, s30 + WORD $0x1e2603d8 // fmov w24, s30 WORD $0x6e218f7e // cmeq.16b v30, v27, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d8 // fmov w24, s30 + WORD $0x1e2603d9 // fmov w25, s30 WORD $0x6e218f5e // cmeq.16b v30, v26, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d9 // fmov w25, s30 + WORD $0x1e2603da // fmov w26, s30 WORD $0xd3607ca5 // lsl x5, x5, #32 - WORD $0xaa14c0a5 // orr x5, x5, x20, lsl #48 + WORD $0xaa15c0a5 // orr x5, x5, x21, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f00af // orr x15, x5, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607f0f // lsl x15, x24, #32 - WORD $0xaa19c1ef // orr x15, x15, x25, lsl #48 - WORD $0x53103ee5 // lsl w5, w23, #16 + WORD $0xd3607f2f // lsl x15, x25, #32 + WORD $0xaa1ac1ef // orr x15, x15, x26, lsl #48 + WORD $0x53103f05 // lsl w5, w24, #16 WORD $0xaa0501ef // orr x15, x15, x5 - WORD $0xaa1501e5 // orr x5, x15, x21 - WORD $0xb5000445 // cbnz x5, LBB0_190 $136(%rip) - WORD $0xb50004c6 // cbnz x6, LBB0_191 $152(%rip) -LBB0_187: + WORD $0xaa1601e5 // orr x5, x15, x22 + WORD $0xb5000445 // cbnz x5, LBB0_195 $136(%rip) + WORD $0xb50004c6 // cbnz x6, LBB0_196 $152(%rip) +LBB0_192: WORD $0x6e3d349d // cmhi.16b v29, v4, v29 WORD $0x4e221fbd // and.16b v29, v29, v2 WORD $0x4e0303bd // tbl.16b v29, { v29 }, v3 @@ -1107,115 +1132,115 @@ LBB0_187: WORD $0x4e221f7b // and.16b v27, v27, v2 WORD $0x4e03037b // tbl.16b v27, { v27 }, v3 WORD $0x4e71bb7b // addv.8h h27, v27 - WORD $0x1e260374 // fmov w20, s27 + WORD $0x1e260375 // fmov w21, s27 WORD $0x6e3a349a // cmhi.16b v26, v4, v26 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 - WORD $0xd3607e94 // lsl x20, x20, #32 - WORD $0xaa15c294 // orr x20, x20, x21, lsl #48 + WORD $0x1e260356 // fmov w22, s26 + WORD $0xd3607eb5 // lsl x21, x21, #32 + WORD $0xaa16c2b5 // orr x21, x21, x22, lsl #48 WORD $0x53103ca5 // lsl w5, w5, #16 - WORD $0xaa050285 // orr x5, x20, x5 + WORD $0xaa0502a5 // orr x5, x21, x5 WORD $0xaa0f00a5 // orr x5, x5, x15 - WORD $0xb50002ee // cbnz x14, LBB0_192 $92(%rip) - WORD $0xb500f8e5 // cbnz x5, LBB0_551 $7964(%rip) - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xb50002ee // cbnz x14, LBB0_197 $92(%rip) + WORD $0xb500fcc5 // cbnz x5, LBB0_564 $8088(%rip) + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 - WORD $0x54fff568 // b.hi LBB0_185 $-340(%rip) - WORD $0x140004fe // b LBB0_393 $5112(%rip) -LBB0_190: + WORD $0xf100feff // cmp x23, #63 + WORD $0x54fff568 // b.hi LBB0_190 $-340(%rip) + WORD $0x14000516 // b LBB0_403 $5208(%rip) +LBB0_195: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011ef // clz x15, x15 WORD $0x8b1301ef // add x15, x15, x19 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_191: +LBB0_196: WORD $0x8a2600af // bic x15, x5, x6 - WORD $0xaa0f04d4 // orr x20, x6, x15, lsl #1 - WORD $0x8a3400a5 // bic x5, x5, x20 + WORD $0xaa0f04d5 // orr x21, x6, x15, lsl #1 + WORD $0x8a3500a5 // bic x5, x5, x21 WORD $0x9201f0a5 // and x5, x5, #0xaaaaaaaaaaaaaaaa WORD $0xab0f00af // adds x15, x5, x15 WORD $0x1a9f37e6 // cset w6, hs WORD $0xd37ff9ef // lsl x15, x15, #1 WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 - WORD $0x8a1401ef // and x15, x15, x20 + WORD $0x8a1501ef // and x15, x15, x21 WORD $0x8a2f01ce // bic x14, x14, x15 - WORD $0x17ffffd1 // b LBB0_187 $-188(%rip) -LBB0_192: + WORD $0x17ffffd1 // b LBB0_192 $-188(%rip) +LBB0_197: WORD $0xdac001ce // rbit x14, x14 WORD $0xdac011ce // clz x14, x14 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011e5 // clz x5, x15 WORD $0xeb0e00bf // cmp x5, x14 - WORD $0x54010003 // b.lo LBB0_574 $8192(%rip) + WORD $0x540103e3 // b.lo LBB0_587 $8316(%rip) WORD $0x8b1301ce // add x14, x14, x19 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb7f8f393 // tbnz x19, #63, LBB0_544 $7792(%rip) -LBB0_194: + WORD $0xb7f8f773 // tbnz x19, #63, LBB0_557 $7916(%rip) +LBB0_199: WORD $0xf9000033 // str x19, [x1] WORD $0xaa0803e0 // mov x0, x8 WORD $0xb27ff7ee // mov x14, #9223372036854775806 WORD $0xeb0e011f // cmp x8, x14 - WORD $0x5400ffc8 // b.hi LBB0_578 $8184(%rip) -LBB0_195: + WORD $0x540103a8 // b.hi LBB0_591 $8308(%rip) +LBB0_200: WORD $0xf9400048 // ldr x8, [x2] WORD $0xf13ffd1f // cmp x8, #4095 - WORD $0x5400f24c // b.gt LBB0_543 $7752(%rip) + WORD $0x5400f62c // b.gt LBB0_556 $7876(%rip) WORD $0x9100050e // add x14, x8, #1 WORD $0xf900004e // str x14, [x2] WORD $0x5280008e // mov w14, #4 -LBB0_197: +LBB0_202: WORD $0xf828792e // str x14, [x9, x8, lsl #3] - WORD $0x140002bd // b LBB0_284 $2804(%rip) -LBB0_198: - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0x14000658 // b LBB0_480 $6496(%rip) +LBB0_203: + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xd1000dcf // sub x15, x14, #3 WORD $0xeb0f011f // cmp x8, x15 - WORD $0x5400f2c2 // b.hs LBB0_550 $7768(%rip) - WORD $0x8b1303ce // add x14, lr, x19 + WORD $0x5400f6a2 // b.hs LBB0_563 $7892(%rip) + WORD $0x8b13028e // add x14, x20, x19 WORD $0xb85ff1ce // ldur w14, [x14, #-1] WORD $0x528e4e8f // mov w15, #29300 WORD $0x72acaeaf // movk w15, #25973, lsl #16 WORD $0x6b0f01df // cmp w14, w15 - WORD $0x54000180 // b.eq LBB0_202 $48(%rip) - WORD $0x14000797 // b LBB0_554 $7772(%rip) -LBB0_200: - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0x54000180 // b.eq LBB0_207 $48(%rip) + WORD $0x140007b6 // b LBB0_567 $7896(%rip) +LBB0_205: + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xd1000dcf // sub x15, x14, #3 WORD $0xeb0f011f // cmp x8, x15 - WORD $0x5400f162 // b.hs LBB0_550 $7724(%rip) - WORD $0x8b1303ce // add x14, lr, x19 + WORD $0x5400f542 // b.hs LBB0_563 $7848(%rip) + WORD $0x8b13028e // add x14, x20, x19 WORD $0xb85ff1ce // ldur w14, [x14, #-1] WORD $0x528eadcf // mov w15, #30062 WORD $0x72ad8d8f // movk w15, #27756, lsl #16 WORD $0x6b0f01df // cmp w14, w15 - WORD $0x5400f421 // b.ne LBB0_558 $7812(%rip) -LBB0_202: + WORD $0x5400f801 // b.ne LBB0_571 $7936(%rip) +LBB0_207: WORD $0x91001113 // add x19, x8, #4 - WORD $0x140002a2 // b LBB0_283 $2696(%rip) -LBB0_203: - WORD $0x37302d23 // tbnz w3, #6, LBB0_245 $1444(%rip) + WORD $0x1400063d // b LBB0_478 $6388(%rip) +LBB0_208: + WORD $0x37302d23 // tbnz w3, #6, LBB0_250 $1444(%rip) WORD $0xf9400048 // ldr x8, [x2] WORD $0xf13ffd1f // cmp x8, #4095 - WORD $0x5400ee4c // b.gt LBB0_543 $7624(%rip) + WORD $0x5400f22c // b.gt LBB0_556 $7748(%rip) WORD $0x9100050e // add x14, x8, #1 WORD $0xf900004e // str x14, [x2] WORD $0x528000ae // mov w14, #5 - WORD $0x17ffffe0 // b LBB0_197 $-128(%rip) -LBB0_206: - WORD $0x37305423 // tbnz w3, #6, LBB0_285 $2692(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] - WORD $0xeb1301d6 // subs x22, x14, x19 - WORD $0x37285c23 // tbnz w3, #5, LBB0_295 $2948(%rip) - WORD $0x5400eda0 // b.eq LBB0_545 $7604(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x5400ad03 // b.lo LBB0_432 $5536(%rip) + WORD $0x17ffffe0 // b LBB0_202 $-128(%rip) +LBB0_211: + WORD $0x37305423 // tbnz w3, #6, LBB0_290 $2692(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] + WORD $0xeb1301d7 // subs x23, x14, x19 + WORD $0x37285f23 // tbnz w3, #5, LBB0_305 $3044(%rip) + WORD $0x5400f180 // b.eq LBB0_558 $7728(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x5400b003 // b.lo LBB0_442 $5632(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 -LBB0_211: - WORD $0x8b1303ce // add x14, lr, x19 +LBB0_216: + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad406dda // ldp q26, q27, [x14] WORD $0xad4175dc // ldp q28, q29, [x14, #32] WORD $0x6e208f5e // cmeq.16b v30, v26, v0 @@ -1249,43 +1274,43 @@ LBB0_211: WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x4e221f9a // and.16b v26, v28, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 + WORD $0x1e260356 // fmov w22, s26 WORD $0x4e221fba // and.16b v26, v29, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260357 // fmov w23, s26 + WORD $0x1e260358 // fmov w24, s26 WORD $0xd3607e31 // lsl x17, x17, #32 WORD $0xaa05c231 // orr x17, x17, x5, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607eaf // lsl x15, x21, #32 - WORD $0xaa17c1ef // orr x15, x15, x23, lsl #48 - WORD $0x53103e91 // lsl w17, w20, #16 + WORD $0xd3607ecf // lsl x15, x22, #32 + WORD $0xaa18c1ef // orr x15, x15, x24, lsl #48 + WORD $0x53103eb1 // lsl w17, w21, #16 WORD $0xaa1101ef // orr x15, x15, x17 WORD $0xaa0701e5 // orr x5, x15, x7 - WORD $0xb5000145 // cbnz x5, LBB0_215 $40(%rip) - WORD $0xb50001c6 // cbnz x6, LBB0_216 $56(%rip) + WORD $0xb5000145 // cbnz x5, LBB0_220 $40(%rip) + WORD $0xb50001c6 // cbnz x6, LBB0_221 $56(%rip) WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb500032e // cbnz x14, LBB0_217 $100(%rip) -LBB0_214: - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xb500032e // cbnz x14, LBB0_222 $100(%rip) +LBB0_219: + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 - WORD $0x54fff868 // b.hi LBB0_211 $-244(%rip) - WORD $0x1400051f // b LBB0_429 $5244(%rip) -LBB0_215: + WORD $0xf100feff // cmp x23, #63 + WORD $0x54fff868 // b.hi LBB0_216 $-244(%rip) + WORD $0x14000537 // b LBB0_439 $5340(%rip) +LBB0_220: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011ef // clz x15, x15 WORD $0x8b1301ef // add x15, x15, x19 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_216: +LBB0_221: WORD $0x8a2600af // bic x15, x5, x6 WORD $0xaa0f04d1 // orr x17, x6, x15, lsl #1 WORD $0x8a3100a5 // bic x5, x5, x17 @@ -1296,24 +1321,24 @@ LBB0_216: WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 WORD $0x8a1101ef // and x15, x15, x17 WORD $0x8a2f01ce // bic x14, x14, x15 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb4fffd2e // cbz x14, LBB0_214 $-92(%rip) -LBB0_217: + WORD $0xb4fffd2e // cbz x14, LBB0_219 $-92(%rip) +LBB0_222: WORD $0xdac001ce // rbit x14, x14 WORD $0xdac011ce // clz x14, x14 - WORD $0x140002fc // b LBB0_306 $3056(%rip) -LBB0_218: + WORD $0x14000314 // b LBB0_316 $3152(%rip) +LBB0_223: WORD $0xf90017ff // str xzr, [sp, #40] WORD $0xd2800007 // mov x7, #0 WORD $0xd2800000 // mov x0, #0 WORD $0xd2800006 // mov x6, #0 - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xcb1301cf // sub x15, x14, x19 - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400000a // b LBB0_220 $40(%rip) -LBB0_219: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400000a // b LBB0_225 $40(%rip) +LBB0_224: WORD $0x937ffdce // asr x14, x14, #63 WORD $0xf90017ee // str x14, [sp, #40] WORD $0x9e6700ba // fmov d26, x5 @@ -1323,12 +1348,12 @@ LBB0_219: WORD $0x8b0001c0 // add x0, x14, x0 WORD $0x91010273 // add x19, x19, #64 WORD $0xa941bfe7 // ldp x7, x15, [sp, #24] -LBB0_220: +LBB0_225: WORD $0xf10101ee // subs x14, x15, #64 WORD $0xf90013ee // str x14, [sp, #32] WORD $0xf9000bef // str x15, [sp, #16] - WORD $0x5400176b // b.lt LBB0_228 $748(%rip) -LBB0_221: + WORD $0x5400176b // b.lt LBB0_233 $748(%rip) +LBB0_226: WORD $0xad40727d // ldp q29, q28, [x19] WORD $0xad416a7b // ldp q27, q26, [x19, #32] WORD $0x6e218fbe // cmeq.16b v30, v29, v1 @@ -1357,11 +1382,11 @@ LBB0_221: WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 WORD $0xaa0701cf // orr x15, x14, x7 - WORD $0xb500008f // cbnz x15, LBB0_223 $16(%rip) + WORD $0xb500008f // cbnz x15, LBB0_228 $16(%rip) WORD $0xf9000fff // str xzr, [sp, #24] WORD $0xd280000e // mov x14, #0 - WORD $0x1400000b // b LBB0_224 $44(%rip) -LBB0_223: + WORD $0x1400000b // b LBB0_229 $44(%rip) +LBB0_228: WORD $0x8a2701cf // bic x15, x14, x7 WORD $0xaa0f04f1 // orr x17, x7, x15, lsl #1 WORD $0x8a3101ce // bic x14, x14, x17 @@ -1372,7 +1397,7 @@ LBB0_223: WORD $0xd37ff9ce // lsl x14, x14, #1 WORD $0xd200f1ce // eor x14, x14, #0x5555555555555555 WORD $0x8a1101ce // and x14, x14, x17 -LBB0_224: +LBB0_229: WORD $0x6e208fbe // cmeq.16b v30, v29, v0 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 @@ -1403,47 +1428,47 @@ LBB0_224: WORD $0x9203e1d1 // and x17, x14, #0x2222222222222222 WORD $0x9202e1c5 // and x5, x14, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 - WORD $0xb200e3f9 // mov x25, #1229782938247303441 - WORD $0x9b197de7 // mul x7, x15, x25 - WORD $0xb201e3f8 // mov x24, #-8608480567731124088 - WORD $0xf2e11118 // movk x24, #2184, lsl #48 - WORD $0x9b187e34 // mul x20, x17, x24 - WORD $0xca1400e7 // eor x7, x7, x20 - WORD $0xb202e3f7 // mov x23, #4919131752989213764 - WORD $0xf2e08897 // movk x23, #1092, lsl #48 - WORD $0x9b177cb4 // mul x20, x5, x23 - WORD $0xb203e3f5 // mov x21, #2459565876494606882 - WORD $0xf2e04455 // movk x21, #546, lsl #48 - WORD $0x9b157dd5 // mul x21, x14, x21 - WORD $0xca150294 // eor x20, x20, x21 - WORD $0xca1400e7 // eor x7, x7, x20 - WORD $0xb203e3fe // mov lr, #2459565876494606882 - WORD $0x9b1e7df4 // mul x20, x15, lr + WORD $0xb200e3fa // mov x26, #1229782938247303441 + WORD $0x9b1a7de7 // mul x7, x15, x26 + WORD $0xb201e3f9 // mov x25, #-8608480567731124088 + WORD $0xf2e11119 // movk x25, #2184, lsl #48 WORD $0x9b197e35 // mul x21, x17, x25 - WORD $0xca150294 // eor x20, x20, x21 + WORD $0xca1500e7 // eor x7, x7, x21 + WORD $0xb202e3f8 // mov x24, #4919131752989213764 + WORD $0xf2e08898 // movk x24, #1092, lsl #48 WORD $0x9b187cb5 // mul x21, x5, x24 - WORD $0x9b177dd7 // mul x23, x14, x23 - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0xca150294 // eor x20, x20, x21 - WORD $0xb202e3f6 // mov x22, #4919131752989213764 - WORD $0x9b167df5 // mul x21, x15, x22 - WORD $0x9b1e7e37 // mul x23, x17, lr - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0x9b197cb7 // mul x23, x5, x25 + WORD $0xb203e3f6 // mov x22, #2459565876494606882 + WORD $0xf2e04456 // movk x22, #546, lsl #48 + WORD $0x9b167dd6 // mul x22, x14, x22 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0xca1500e7 // eor x7, x7, x21 + WORD $0xb203e3f4 // mov x20, #2459565876494606882 + WORD $0x9b147df5 // mul x21, x15, x20 + WORD $0x9b1a7e36 // mul x22, x17, x26 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0x9b197cb6 // mul x22, x5, x25 WORD $0x9b187dd8 // mul x24, x14, x24 - WORD $0xca1802f7 // eor x23, x23, x24 - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0xb201e3f7 // mov x23, #-8608480567731124088 - WORD $0x9b177def // mul x15, x15, x23 - WORD $0x9b167e31 // mul x17, x17, x22 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0xb202e3f7 // mov x23, #4919131752989213764 + WORD $0x9b177df6 // mul x22, x15, x23 + WORD $0x9b147e38 // mul x24, x17, x20 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0x9b1a7cb8 // mul x24, x5, x26 + WORD $0x9b197dd9 // mul x25, x14, x25 + WORD $0xca190318 // eor x24, x24, x25 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0xb201e3f8 // mov x24, #-8608480567731124088 + WORD $0x9b187def // mul x15, x15, x24 + WORD $0x9b177e31 // mul x17, x17, x23 WORD $0xca1101ef // eor x15, x15, x17 - WORD $0x9b1e7cb1 // mul x17, x5, lr - WORD $0x9b197dce // mul x14, x14, x25 + WORD $0x9b147cb1 // mul x17, x5, x20 + WORD $0x9b1a7dce // mul x14, x14, x26 WORD $0xca0e022e // eor x14, x17, x14 WORD $0xca0e01ee // eor x14, x15, x14 WORD $0x9200e0ef // and x15, x7, #0x1111111111111111 - WORD $0x9203e291 // and x17, x20, #0x2222222222222222 - WORD $0x9202e2a5 // and x5, x21, #0x4444444444444444 + WORD $0x9203e2b1 // and x17, x21, #0x2222222222222222 + WORD $0x9202e2c5 // and x5, x22, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 WORD $0xaa1101ef // orr x15, x15, x17 WORD $0xaa0e00ae // orr x14, x5, x14 @@ -1495,104 +1520,104 @@ LBB0_224: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0xd3607ce7 // lsl x7, x7, #32 - WORD $0xaa14c0e7 // orr x7, x7, x20, lsl #48 + WORD $0xaa15c0e7 // orr x7, x7, x21, lsl #48 WORD $0x53103e31 // lsl w17, w17, #16 WORD $0xaa1100f1 // orr x17, x7, x17 WORD $0xaa0f022f // orr x15, x17, x15 - WORD $0xea2e01f4 // bics x20, x15, x14 - WORD $0x54ffe900 // b.eq LBB0_219 $-736(%rip) + WORD $0xea2e01f5 // bics x21, x15, x14 + WORD $0x54ffe900 // b.eq LBB0_224 $-736(%rip) WORD $0x92f00007 // mov x7, #9223372036854775807 -LBB0_226: - WORD $0xd1000695 // sub x21, x20, #1 - WORD $0x8a0502af // and x15, x21, x5 +LBB0_231: + WORD $0xd10006b6 // sub x22, x21, #1 + WORD $0x8a0502cf // and x15, x22, x5 WORD $0x9e6701fa // fmov d26, x15 WORD $0x0e205b5a // cnt.8b v26, v26 WORD $0x2e303b5a // uaddlv.8b h26, v26 WORD $0x1e26034f // fmov w15, s26 WORD $0x8b0001ef // add x15, x15, x0 WORD $0xeb0601ff // cmp x15, x6 - WORD $0x54002789 // b.ls LBB0_272 $1264(%rip) + WORD $0x54002789 // b.ls LBB0_277 $1264(%rip) WORD $0x910004c6 // add x6, x6, #1 - WORD $0xea1402b4 // ands x20, x21, x20 - WORD $0x54fffea1 // b.ne LBB0_226 $-44(%rip) - WORD $0x17ffff3a // b LBB0_219 $-792(%rip) -LBB0_228: + WORD $0xea1502d5 // ands x21, x22, x21 + WORD $0x54fffea1 // b.ne LBB0_231 $-44(%rip) + WORD $0x17ffff3a // b LBB0_224 $-792(%rip) +LBB0_233: WORD $0xf10001ff // cmp x15, #0 - WORD $0x5400d4ad // b.le LBB0_575 $6804(%rip) + WORD $0x5400d88d // b.le LBB0_588 $6928(%rip) WORD $0xaa0703f1 // mov x17, x7 WORD $0xad02dff7 // stp q23, q23, [sp, #80] WORD $0xad01dff7 // stp q23, q23, [sp, #48] WORD $0x92402e6e // and x14, x19, #0xfff WORD $0xf13f05df // cmp x14, #4033 - WORD $0x54000383 // b.lo LBB0_240 $112(%rip) + WORD $0x54000383 // b.lo LBB0_245 $112(%rip) WORD $0xf9400bee // ldr x14, [sp, #16] WORD $0xf10081c5 // subs x5, x14, #32 - WORD $0x540000a3 // b.lo LBB0_232 $20(%rip) + WORD $0x540000a3 // b.lo LBB0_237 $20(%rip) WORD $0xacc16e7a // ldp q26, q27, [x19], #32 WORD $0xad01effa // stp q26, q27, [sp, #48] WORD $0xaa0a03ee // mov x14, x10 - WORD $0x14000003 // b LBB0_233 $12(%rip) -LBB0_232: + WORD $0x14000003 // b LBB0_238 $12(%rip) +LBB0_237: WORD $0x9100c3ee // add x14, sp, #48 WORD $0xf9400be5 // ldr x5, [sp, #16] -LBB0_233: - WORD $0xf10040b4 // subs x20, x5, #16 - WORD $0x54000283 // b.lo LBB0_241 $80(%rip) +LBB0_238: + WORD $0xf10040b5 // subs x21, x5, #16 + WORD $0x54000283 // b.lo LBB0_246 $80(%rip) WORD $0x3cc1067a // ldr q26, [x19], #16 WORD $0x3c8105da // str q26, [x14], #16 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1002294 // subs x20, x20, #8 - WORD $0x54000222 // b.hs LBB0_242 $68(%rip) -LBB0_235: - WORD $0xf10010b4 // subs x20, x5, #4 - WORD $0x54000283 // b.lo LBB0_243 $80(%rip) -LBB0_236: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf10022b5 // subs x21, x21, #8 + WORD $0x54000222 // b.hs LBB0_247 $68(%rip) +LBB0_240: + WORD $0xf10010b5 // subs x21, x5, #4 + WORD $0x54000283 // b.lo LBB0_248 $80(%rip) +LBB0_241: WORD $0xb840466f // ldr w15, [x19], #4 WORD $0xb80045cf // str w15, [x14], #4 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1000a94 // subs x20, x20, #2 - WORD $0x54000222 // b.hs LBB0_244 $68(%rip) -LBB0_237: - WORD $0xb4000065 // cbz x5, LBB0_239 $12(%rip) -LBB0_238: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf1000ab5 // subs x21, x21, #2 + WORD $0x54000222 // b.hs LBB0_249 $68(%rip) +LBB0_242: + WORD $0xb4000065 // cbz x5, LBB0_244 $12(%rip) +LBB0_243: WORD $0x3940026f // ldrb w15, [x19] WORD $0x390001cf // strb w15, [x14] -LBB0_239: +LBB0_244: WORD $0x9100c3f3 // add x19, sp, #48 -LBB0_240: - WORD $0x5280007a // mov w26, #3 +LBB0_245: + WORD $0x5280007b // mov w27, #3 WORD $0xaa1103e7 // mov x7, x17 - WORD $0x17ffff21 // b LBB0_221 $-892(%rip) -LBB0_241: - WORD $0xf10020b4 // subs x20, x5, #8 - WORD $0x54fffe23 // b.lo LBB0_235 $-60(%rip) -LBB0_242: + WORD $0x17ffff21 // b LBB0_226 $-892(%rip) +LBB0_246: + WORD $0xf10020b5 // subs x21, x5, #8 + WORD $0x54fffe23 // b.lo LBB0_240 $-60(%rip) +LBB0_247: WORD $0xf840866f // ldr x15, [x19], #8 WORD $0xf80085cf // str x15, [x14], #8 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1001294 // subs x20, x20, #4 - WORD $0x54fffdc2 // b.hs LBB0_236 $-72(%rip) -LBB0_243: - WORD $0xf10008b4 // subs x20, x5, #2 - WORD $0x54fffe23 // b.lo LBB0_237 $-60(%rip) -LBB0_244: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf10012b5 // subs x21, x21, #4 + WORD $0x54fffdc2 // b.hs LBB0_241 $-72(%rip) +LBB0_248: + WORD $0xf10008b5 // subs x21, x5, #2 + WORD $0x54fffe23 // b.lo LBB0_242 $-60(%rip) +LBB0_249: WORD $0x7840266f // ldrh w15, [x19], #2 WORD $0x780025cf // strh w15, [x14], #2 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xb5fffdd4 // cbnz x20, LBB0_238 $-72(%rip) - WORD $0x17ffffef // b LBB0_239 $-68(%rip) -LBB0_245: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xb5fffdd5 // cbnz x21, LBB0_243 $-72(%rip) + WORD $0x17ffffef // b LBB0_244 $-68(%rip) +LBB0_250: WORD $0xf90017ff // str xzr, [sp, #40] WORD $0xd2800007 // mov x7, #0 WORD $0xd2800000 // mov x0, #0 WORD $0xd2800006 // mov x6, #0 - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xcb1301cf // sub x15, x14, x19 - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400000a // b LBB0_247 $40(%rip) -LBB0_246: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400000a // b LBB0_252 $40(%rip) +LBB0_251: WORD $0x937ffdce // asr x14, x14, #63 WORD $0xf90017ee // str x14, [sp, #40] WORD $0x9e6700ba // fmov d26, x5 @@ -1602,12 +1627,12 @@ LBB0_246: WORD $0x8b0001c0 // add x0, x14, x0 WORD $0x91010273 // add x19, x19, #64 WORD $0xa941bfe7 // ldp x7, x15, [sp, #24] -LBB0_247: +LBB0_252: WORD $0xf10101ee // subs x14, x15, #64 WORD $0xf90013ee // str x14, [sp, #32] WORD $0xf9000bef // str x15, [sp, #16] - WORD $0x5400176b // b.lt LBB0_255 $748(%rip) -LBB0_248: + WORD $0x5400176b // b.lt LBB0_260 $748(%rip) +LBB0_253: WORD $0xad40727d // ldp q29, q28, [x19] WORD $0xad416a7b // ldp q27, q26, [x19, #32] WORD $0x6e218fbe // cmeq.16b v30, v29, v1 @@ -1636,11 +1661,11 @@ LBB0_248: WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 WORD $0xaa0701cf // orr x15, x14, x7 - WORD $0xb500008f // cbnz x15, LBB0_250 $16(%rip) + WORD $0xb500008f // cbnz x15, LBB0_255 $16(%rip) WORD $0xf9000fff // str xzr, [sp, #24] WORD $0xd280000e // mov x14, #0 - WORD $0x1400000b // b LBB0_251 $44(%rip) -LBB0_250: + WORD $0x1400000b // b LBB0_256 $44(%rip) +LBB0_255: WORD $0x8a2701cf // bic x15, x14, x7 WORD $0xaa0f04f1 // orr x17, x7, x15, lsl #1 WORD $0x8a3101ce // bic x14, x14, x17 @@ -1651,7 +1676,7 @@ LBB0_250: WORD $0xd37ff9ce // lsl x14, x14, #1 WORD $0xd200f1ce // eor x14, x14, #0x5555555555555555 WORD $0x8a1101ce // and x14, x14, x17 -LBB0_251: +LBB0_256: WORD $0x6e208fbe // cmeq.16b v30, v29, v0 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 @@ -1682,47 +1707,47 @@ LBB0_251: WORD $0x9203e1d1 // and x17, x14, #0x2222222222222222 WORD $0x9202e1c5 // and x5, x14, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 - WORD $0xb200e3f9 // mov x25, #1229782938247303441 - WORD $0x9b197de7 // mul x7, x15, x25 - WORD $0xb201e3f8 // mov x24, #-8608480567731124088 - WORD $0xf2e11118 // movk x24, #2184, lsl #48 - WORD $0x9b187e34 // mul x20, x17, x24 - WORD $0xca1400e7 // eor x7, x7, x20 - WORD $0xb202e3f7 // mov x23, #4919131752989213764 - WORD $0xf2e08897 // movk x23, #1092, lsl #48 - WORD $0x9b177cb4 // mul x20, x5, x23 - WORD $0xb203e3f5 // mov x21, #2459565876494606882 - WORD $0xf2e04455 // movk x21, #546, lsl #48 - WORD $0x9b157dd5 // mul x21, x14, x21 - WORD $0xca150294 // eor x20, x20, x21 - WORD $0xca1400e7 // eor x7, x7, x20 - WORD $0xb203e3fe // mov lr, #2459565876494606882 - WORD $0x9b1e7df4 // mul x20, x15, lr + WORD $0xb200e3fa // mov x26, #1229782938247303441 + WORD $0x9b1a7de7 // mul x7, x15, x26 + WORD $0xb201e3f9 // mov x25, #-8608480567731124088 + WORD $0xf2e11119 // movk x25, #2184, lsl #48 WORD $0x9b197e35 // mul x21, x17, x25 - WORD $0xca150294 // eor x20, x20, x21 + WORD $0xca1500e7 // eor x7, x7, x21 + WORD $0xb202e3f8 // mov x24, #4919131752989213764 + WORD $0xf2e08898 // movk x24, #1092, lsl #48 WORD $0x9b187cb5 // mul x21, x5, x24 - WORD $0x9b177dd7 // mul x23, x14, x23 - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0xca150294 // eor x20, x20, x21 - WORD $0xb202e3f6 // mov x22, #4919131752989213764 - WORD $0x9b167df5 // mul x21, x15, x22 - WORD $0x9b1e7e37 // mul x23, x17, lr - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0x9b197cb7 // mul x23, x5, x25 + WORD $0xb203e3f6 // mov x22, #2459565876494606882 + WORD $0xf2e04456 // movk x22, #546, lsl #48 + WORD $0x9b167dd6 // mul x22, x14, x22 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0xca1500e7 // eor x7, x7, x21 + WORD $0xb203e3f4 // mov x20, #2459565876494606882 + WORD $0x9b147df5 // mul x21, x15, x20 + WORD $0x9b1a7e36 // mul x22, x17, x26 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0x9b197cb6 // mul x22, x5, x25 WORD $0x9b187dd8 // mul x24, x14, x24 - WORD $0xca1802f7 // eor x23, x23, x24 - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0xb201e3f7 // mov x23, #-8608480567731124088 - WORD $0x9b177def // mul x15, x15, x23 - WORD $0x9b167e31 // mul x17, x17, x22 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0xb202e3f7 // mov x23, #4919131752989213764 + WORD $0x9b177df6 // mul x22, x15, x23 + WORD $0x9b147e38 // mul x24, x17, x20 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0x9b1a7cb8 // mul x24, x5, x26 + WORD $0x9b197dd9 // mul x25, x14, x25 + WORD $0xca190318 // eor x24, x24, x25 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0xb201e3f8 // mov x24, #-8608480567731124088 + WORD $0x9b187def // mul x15, x15, x24 + WORD $0x9b177e31 // mul x17, x17, x23 WORD $0xca1101ef // eor x15, x15, x17 - WORD $0x9b1e7cb1 // mul x17, x5, lr - WORD $0x9b197dce // mul x14, x14, x25 + WORD $0x9b147cb1 // mul x17, x5, x20 + WORD $0x9b1a7dce // mul x14, x14, x26 WORD $0xca0e022e // eor x14, x17, x14 WORD $0xca0e01ee // eor x14, x15, x14 WORD $0x9200e0ef // and x15, x7, #0x1111111111111111 - WORD $0x9203e291 // and x17, x20, #0x2222222222222222 - WORD $0x9202e2a5 // and x5, x21, #0x4444444444444444 + WORD $0x9203e2b1 // and x17, x21, #0x2222222222222222 + WORD $0x9202e2c5 // and x5, x22, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 WORD $0xaa1101ef // orr x15, x15, x17 WORD $0xaa0e00ae // orr x14, x5, x14 @@ -1774,118 +1799,119 @@ LBB0_251: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0xd3607ce7 // lsl x7, x7, #32 - WORD $0xaa14c0e7 // orr x7, x7, x20, lsl #48 + WORD $0xaa15c0e7 // orr x7, x7, x21, lsl #48 WORD $0x53103e31 // lsl w17, w17, #16 WORD $0xaa1100f1 // orr x17, x7, x17 WORD $0xaa0f022f // orr x15, x17, x15 - WORD $0xea2e01f4 // bics x20, x15, x14 - WORD $0x54ffe900 // b.eq LBB0_246 $-736(%rip) + WORD $0xea2e01f5 // bics x21, x15, x14 + WORD $0x54ffe900 // b.eq LBB0_251 $-736(%rip) WORD $0x92f00007 // mov x7, #9223372036854775807 -LBB0_253: - WORD $0xd1000695 // sub x21, x20, #1 - WORD $0x8a0502af // and x15, x21, x5 +LBB0_258: + WORD $0xd10006b6 // sub x22, x21, #1 + WORD $0x8a0502cf // and x15, x22, x5 WORD $0x9e6701fa // fmov d26, x15 WORD $0x0e205b5a // cnt.8b v26, v26 WORD $0x2e303b5a // uaddlv.8b h26, v26 WORD $0x1e26034f // fmov w15, s26 WORD $0x8b0001ef // add x15, x15, x0 WORD $0xeb0601ff // cmp x15, x6 - WORD $0x54000729 // b.ls LBB0_272 $228(%rip) + WORD $0x54000729 // b.ls LBB0_277 $228(%rip) WORD $0x910004c6 // add x6, x6, #1 - WORD $0xea1402b4 // ands x20, x21, x20 - WORD $0x54fffea1 // b.ne LBB0_253 $-44(%rip) - WORD $0x17ffff3a // b LBB0_246 $-792(%rip) -LBB0_255: + WORD $0xea1502d5 // ands x21, x22, x21 + WORD $0x54fffea1 // b.ne LBB0_258 $-44(%rip) + WORD $0x17ffff3a // b LBB0_251 $-792(%rip) +LBB0_260: WORD $0xf10001ff // cmp x15, #0 - WORD $0x5400b44d // b.le LBB0_575 $5768(%rip) + WORD $0x5400b82d // b.le LBB0_588 $5892(%rip) WORD $0xaa0703f1 // mov x17, x7 WORD $0xad02dff7 // stp q23, q23, [sp, #80] WORD $0xad01dff7 // stp q23, q23, [sp, #48] WORD $0x92402e6e // and x14, x19, #0xfff WORD $0xf13f05df // cmp x14, #4033 - WORD $0x54000383 // b.lo LBB0_267 $112(%rip) + WORD $0x54000383 // b.lo LBB0_272 $112(%rip) WORD $0xf9400bee // ldr x14, [sp, #16] WORD $0xf10081c5 // subs x5, x14, #32 - WORD $0x540000a3 // b.lo LBB0_259 $20(%rip) + WORD $0x540000a3 // b.lo LBB0_264 $20(%rip) WORD $0xacc16e7a // ldp q26, q27, [x19], #32 WORD $0xad01effa // stp q26, q27, [sp, #48] WORD $0xaa0a03ee // mov x14, x10 - WORD $0x14000003 // b LBB0_260 $12(%rip) -LBB0_259: + WORD $0x14000003 // b LBB0_265 $12(%rip) +LBB0_264: WORD $0x9100c3ee // add x14, sp, #48 WORD $0xf9400be5 // ldr x5, [sp, #16] -LBB0_260: - WORD $0xf10040b4 // subs x20, x5, #16 - WORD $0x54000283 // b.lo LBB0_268 $80(%rip) +LBB0_265: + WORD $0xf10040b5 // subs x21, x5, #16 + WORD $0x54000283 // b.lo LBB0_273 $80(%rip) WORD $0x3cc1067a // ldr q26, [x19], #16 WORD $0x3c8105da // str q26, [x14], #16 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1002294 // subs x20, x20, #8 - WORD $0x54000222 // b.hs LBB0_269 $68(%rip) -LBB0_262: - WORD $0xf10010b4 // subs x20, x5, #4 - WORD $0x54000283 // b.lo LBB0_270 $80(%rip) -LBB0_263: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf10022b5 // subs x21, x21, #8 + WORD $0x54000222 // b.hs LBB0_274 $68(%rip) +LBB0_267: + WORD $0xf10010b5 // subs x21, x5, #4 + WORD $0x54000283 // b.lo LBB0_275 $80(%rip) +LBB0_268: WORD $0xb840466f // ldr w15, [x19], #4 WORD $0xb80045cf // str w15, [x14], #4 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1000a94 // subs x20, x20, #2 - WORD $0x54000222 // b.hs LBB0_271 $68(%rip) -LBB0_264: - WORD $0xb4000065 // cbz x5, LBB0_266 $12(%rip) -LBB0_265: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf1000ab5 // subs x21, x21, #2 + WORD $0x54000222 // b.hs LBB0_276 $68(%rip) +LBB0_269: + WORD $0xb4000065 // cbz x5, LBB0_271 $12(%rip) +LBB0_270: WORD $0x3940026f // ldrb w15, [x19] WORD $0x390001cf // strb w15, [x14] -LBB0_266: +LBB0_271: WORD $0x9100c3f3 // add x19, sp, #48 -LBB0_267: - WORD $0x5280007a // mov w26, #3 +LBB0_272: + WORD $0x5280007b // mov w27, #3 WORD $0xaa1103e7 // mov x7, x17 - WORD $0x17ffff21 // b LBB0_248 $-892(%rip) -LBB0_268: - WORD $0xf10020b4 // subs x20, x5, #8 - WORD $0x54fffe23 // b.lo LBB0_262 $-60(%rip) -LBB0_269: + WORD $0x17ffff21 // b LBB0_253 $-892(%rip) +LBB0_273: + WORD $0xf10020b5 // subs x21, x5, #8 + WORD $0x54fffe23 // b.lo LBB0_267 $-60(%rip) +LBB0_274: WORD $0xf840866f // ldr x15, [x19], #8 WORD $0xf80085cf // str x15, [x14], #8 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1001294 // subs x20, x20, #4 - WORD $0x54fffdc2 // b.hs LBB0_263 $-72(%rip) -LBB0_270: - WORD $0xf10008b4 // subs x20, x5, #2 - WORD $0x54fffe23 // b.lo LBB0_264 $-60(%rip) -LBB0_271: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf10012b5 // subs x21, x21, #4 + WORD $0x54fffdc2 // b.hs LBB0_268 $-72(%rip) +LBB0_275: + WORD $0xf10008b5 // subs x21, x5, #2 + WORD $0x54fffe23 // b.lo LBB0_269 $-60(%rip) +LBB0_276: WORD $0x7840266f // ldrh w15, [x19], #2 WORD $0x780025cf // strh w15, [x14], #2 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xb5fffdd4 // cbnz x20, LBB0_265 $-72(%rip) - WORD $0x17ffffef // b LBB0_266 $-68(%rip) -LBB0_272: - WORD $0xf940076e // ldr x14, [x27, #8] - WORD $0xdac0028f // rbit x15, x20 + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xb5fffdd5 // cbnz x21, LBB0_270 $-72(%rip) + WORD $0x17ffffef // b LBB0_271 $-68(%rip) +LBB0_277: + WORD $0xf94007ce // ldr x14, [lr, #8] + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 WORD $0xf9400bf1 // ldr x17, [sp, #16] WORD $0xcb1101ef // sub x15, x15, x17 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910005cf // add x15, x14, #1 WORD $0xf900002f // str x15, [x1] - WORD $0xf9400771 // ldr x17, [x27, #8] + WORD $0xf94007d1 // ldr x17, [lr, #8] WORD $0xeb1101ff // cmp x15, x17 WORD $0x9a8e2633 // csinc x19, x17, x14, hs WORD $0x12800011 // mov w17, #-1 WORD $0xf9000033 // str x19, [x1] WORD $0xda9f9100 // csinv x0, x8, xzr, ls - WORD $0xb6f80560 // tbz x0, #63, LBB0_284 $172(%rip) - WORD $0x14000563 // b LBB0_578 $5516(%rip) -LBB0_273: - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0xb6f878c0 // tbz x0, #63, LBB0_480 $3864(%rip) + WORD $0x14000582 // b LBB0_591 $5640(%rip) +LBB0_278: + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xcb1301ce // sub x14, x14, x19 WORD $0xf10041df // cmp x14, #16 - WORD $0x540001e3 // b.lo LBB0_276 $60(%rip) -LBB0_274: - WORD $0x3cf36bda // ldr q26, [lr, x19] + WORD $0x54000223 // b.lo LBB0_282 $68(%rip) + WORD $0xd2800000 // mov x0, #0 +LBB0_280: + WORD $0x3cf36a9a // ldr q26, [x20, x19] WORD $0x6e348f5b // cmeq.16b v27, v26, v20 WORD $0x4e321f5a // and.16b v26, v26, v18 WORD $0x6e358f5a // cmeq.16b v26, v26, v21 @@ -1893,54 +1919,51 @@ LBB0_274: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260340 // fmov w0, s26 - WORD $0x350002a0 // cbnz w0, LBB0_282 $84(%rip) + WORD $0x1e260345 // fmov w5, s26 + WORD $0x35000bc5 // cbnz w5, LBB0_299 $376(%rip) WORD $0xd10041ce // sub x14, x14, #16 WORD $0x91004273 // add x19, x19, #16 + WORD $0x91004000 // add x0, x0, #16 WORD $0xf1003ddf // cmp x14, #15 - WORD $0x54fffe68 // b.hi LBB0_274 $-52(%rip) -LBB0_276: - WORD $0x8b1303c0 // add x0, lr, x19 - WORD $0xb4ff79ee // cbz x14, LBB0_131 $-4292(%rip) + WORD $0x54fffe48 // b.hi LBB0_280 $-56(%rip) +LBB0_282: + WORD $0x8b130280 // add x0, x20, x19 + WORD $0xb400024e // cbz x14, LBB0_289 $72(%rip) WORD $0x8b0e0005 // add x5, x0, x14 - WORD $0xcb1e0013 // sub x19, x0, lr -LBB0_278: + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 +LBB0_284: WORD $0x39400006 // ldrb w6, [x0] WORD $0x7100b0df // cmp w6, #44 - WORD $0x54ff7960 // b.eq LBB0_132 $-4308(%rip) - WORD $0x7101f4df // cmp w6, #125 - WORD $0x54ff7920 // b.eq LBB0_132 $-4316(%rip) + WORD $0x9ac6218f // lsl x15, x12, x6 + WORD $0x8a1101ef // and x15, x15, x17 + WORD $0xfa4099e4 // ccmp x15, #0, #4, ls + WORD $0x54000121 // b.ne LBB0_289 $36(%rip) WORD $0x710174df // cmp w6, #93 - WORD $0x54ff78e0 // b.eq LBB0_132 $-4324(%rip) + WORD $0x540000e0 // b.eq LBB0_289 $28(%rip) + WORD $0x7101f4df // cmp w6, #125 + WORD $0x540000a0 // b.eq LBB0_289 $20(%rip) WORD $0x91000400 // add x0, x0, #1 - WORD $0x91000673 // add x19, x19, #1 WORD $0xf10005ce // subs x14, x14, #1 - WORD $0x54fffec1 // b.ne LBB0_278 $-40(%rip) - WORD $0x17fffbc0 // b LBB0_130 $-4352(%rip) -LBB0_282: - WORD $0x5ac0000e // rbit w14, w0 - WORD $0x5ac011ce // clz w14, w14 - WORD $0x8b1301d3 // add x19, x14, x19 -LBB0_283: + WORD $0x54fffe81 // b.ne LBB0_284 $-48(%rip) + WORD $0xaa0503e0 // mov x0, x5 +LBB0_289: + WORD $0xcb140013 // sub x19, x0, x20 WORD $0xf9000033 // str x19, [x1] - WORD $0xaa0803e0 // mov x0, x8 - WORD $0xeb07011f // cmp x8, x7 - WORD $0x5400a742 // b.hs LBB0_578 $5352(%rip) -LBB0_284: - WORD $0xf9400056 // ldr x22, [x2] - WORD $0xaa0b03e0 // mov x0, x11 - WORD $0xb5ff2ef6 // cbnz x22, LBB0_1 $-6692(%rip) - WORD $0x14000536 // b LBB0_578 $5336(%rip) -LBB0_285: - WORD $0xf9400760 // ldr x0, [x27, #8] + WORD $0x5280007b // mov w27, #3 + WORD $0x92f00007 // mov x7, #9223372036854775807 + WORD $0x12800011 // mov w17, #-1 + WORD $0x14000395 // b LBB0_479 $3668(%rip) +LBB0_290: + WORD $0xf94007c0 // ldr x0, [lr, #8] WORD $0xcb13000e // sub x14, x0, x19 WORD $0xf10081df // cmp x14, #32 - WORD $0x5400552b // b.lt LBB0_423 $2724(%rip) + WORD $0x5400582b // b.lt LBB0_433 $2820(%rip) WORD $0xd280000e // mov x14, #0 WORD $0xd2800005 // mov x5, #0 WORD $0xcb080000 // sub x0, x0, x8 WORD $0x528003f3 // mov w19, #31 -LBB0_287: +LBB0_292: WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x3cc011fa // ldur q26, [x15, #1] WORD $0x3cc111fb // ldur q27, [x15, #17] @@ -1948,30 +1971,30 @@ LBB0_287: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260395 // fmov w21, s28 + WORD $0x1e260396 // fmov w22, s28 WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 WORD $0x1e26038f // fmov w15, s28 - WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x33103df6 // bfi w22, w15, #16, #16 WORD $0x6e218f5a // cmeq.16b v26, v26, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x6e218f7a // cmeq.16b v26, v27, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df4 // bfi w20, w15, #16, #16 - WORD $0x7100029f // cmp w20, #0 + WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x710002bf // cmp w21, #0 WORD $0xfa4008a0 // ccmp x5, #0, #0, eq - WORD $0x540001a0 // b.eq LBB0_289 $52(%rip) - WORD $0x0a25028f // bic w15, w20, w5 + WORD $0x540001a0 // b.eq LBB0_294 $52(%rip) + WORD $0x0a2502af // bic w15, w21, w5 WORD $0x2a0f04b1 // orr w17, w5, w15, lsl #1 - WORD $0x0a040285 // and w5, w20, w4 + WORD $0x0a0402a5 // and w5, w21, w4 WORD $0x0a3100a5 // bic w5, w5, w17 WORD $0x2b0f00af // adds w15, w5, w15 WORD $0x1a9f37e5 // cset w5, hs @@ -1979,38 +2002,65 @@ LBB0_287: WORD $0x0a1101ef // and w15, w15, w17 WORD $0x12800011 // mov w17, #-1 WORD $0x2a2f03ef // mvn w15, w15 - WORD $0x8a1501f5 // and x21, x15, x21 - WORD $0x14000002 // b LBB0_290 $8(%rip) -LBB0_289: + WORD $0x8a1601f6 // and x22, x15, x22 + WORD $0x14000002 // b LBB0_295 $8(%rip) +LBB0_294: WORD $0xd2800005 // mov x5, #0 -LBB0_290: - WORD $0xb5ff6bb5 // cbnz x21, LBB0_120 $-4748(%rip) +LBB0_295: + WORD $0xb5ff68b6 // cbnz x22, LBB0_120 $-4844(%rip) WORD $0x910081ce // add x14, x14, #32 WORD $0xd1008273 // sub x19, x19, #32 WORD $0x8b13000f // add x15, x0, x19 WORD $0xf100fdff // cmp x15, #63 - WORD $0x54fffa4c // b.gt LBB0_287 $-184(%rip) - WORD $0xb5008645 // cbnz x5, LBB0_518 $4296(%rip) + WORD $0x54fffa4c // b.gt LBB0_292 $-184(%rip) + WORD $0xb5008a25 // cbnz x5, LBB0_531 $4420(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910005e5 // add x5, x15, #1 WORD $0xaa2e03ee // mvn x14, x14 WORD $0x8b0001ce // add x14, x14, x0 WORD $0xf10005df // cmp x14, #1 - WORD $0x54004e4a // b.ge LBB0_424 $2504(%rip) - WORD $0x140004f6 // b LBB0_577 $5080(%rip) -LBB0_294: - WORD $0xaa1903e5 // mov x5, x25 + WORD $0x5400514a // b.ge LBB0_434 $2600(%rip) + WORD $0x14000515 // b LBB0_590 $5204(%rip) +LBB0_299: + WORD $0x5ac000ae // rbit w14, w5 + WORD $0x5ac011ce // clz w14, w14 + WORD $0x8b1301d3 // add x19, x14, x19 + WORD $0xf9000033 // str x19, [x1] + WORD $0xf100067f // cmp x19, #1 + WORD $0x54006a0b // b.lt LBB0_479 $3392(%rip) + WORD $0x8b0001ce // add x14, x14, x0 +LBB0_301: + WORD $0x386e68cf // ldrb w15, [x6, x14] + WORD $0x710081ff // cmp w15, #32 + WORD $0x9acf218f // lsl x15, x12, x15 + WORD $0x8a0d01ef // and x15, x15, x13 + WORD $0xfa4099e4 // ccmp x15, #0, #4, ls + WORD $0x54000120 // b.eq LBB0_303 $36(%rip) + WORD $0x8b0e010f // add x15, x8, x14 + WORD $0xf900002f // str x15, [x1] + WORD $0xd10005ce // sub x14, x14, #1 + WORD $0x8b0e0100 // add x0, x8, x14 + WORD $0x9100080f // add x15, x0, #2 + WORD $0xf10005ff // cmp x15, #1 + WORD $0x54fffe8c // b.gt LBB0_301 $-48(%rip) + WORD $0x17fffb65 // b LBB0_137 $-4716(%rip) +LBB0_303: + WORD $0x8b0e010e // add x14, x8, x14 + WORD $0x910005d3 // add x19, x14, #1 + WORD $0x1400033e // b LBB0_479 $3320(%rip) +LBB0_304: + WORD $0xaa1a03e5 // mov x5, x26 WORD $0x9280000e // mov x14, #-1 - WORD $0xb5ff8b40 // cbnz x0, LBB0_169 $-3736(%rip) - WORD $0x14000492 // b LBB0_547 $4680(%rip) -LBB0_295: - WORD $0x540091a0 // b.eq LBB0_545 $4660(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x540055a3 // b.lo LBB0_438 $2740(%rip) + WORD $0xb5ff8840 // cbnz x0, LBB0_174 $-3832(%rip) + WORD $0x14000499 // b LBB0_560 $4708(%rip) +LBB0_305: + WORD $0x54009280 // b.eq LBB0_558 $4688(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x540055a3 // b.lo LBB0_448 $2740(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 -LBB0_298: - WORD $0x8b1303ce // add x14, lr, x19 +LBB0_308: + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad4071dd // ldp q29, q28, [x14] WORD $0xad4169db // ldp q27, q26, [x14, #32] WORD $0x6e208fbe // cmeq.16b v30, v29, v0 @@ -2042,30 +2092,30 @@ LBB0_298: WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d4 // fmov w20, s30 + WORD $0x1e2603d5 // fmov w21, s30 WORD $0x6e218f7e // cmeq.16b v30, v27, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d5 // fmov w21, s30 + WORD $0x1e2603d6 // fmov w22, s30 WORD $0x6e218f5e // cmeq.16b v30, v26, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d7 // fmov w23, s30 + WORD $0x1e2603d8 // fmov w24, s30 WORD $0xd3607e31 // lsl x17, x17, #32 WORD $0xaa05c231 // orr x17, x17, x5, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607eaf // lsl x15, x21, #32 - WORD $0xaa17c1ef // orr x15, x15, x23, lsl #48 - WORD $0x53103e91 // lsl w17, w20, #16 + WORD $0xd3607ecf // lsl x15, x22, #32 + WORD $0xaa18c1ef // orr x15, x15, x24, lsl #48 + WORD $0x53103eb1 // lsl w17, w21, #16 WORD $0xaa1101ef // orr x15, x15, x17 WORD $0xaa0701e5 // orr x5, x15, x7 - WORD $0xb5000445 // cbnz x5, LBB0_303 $136(%rip) - WORD $0xb50004c6 // cbnz x6, LBB0_304 $152(%rip) -LBB0_300: + WORD $0xb5000445 // cbnz x5, LBB0_313 $136(%rip) + WORD $0xb50004c6 // cbnz x6, LBB0_314 $152(%rip) +LBB0_310: WORD $0x6e3d349d // cmhi.16b v29, v4, v29 WORD $0x4e221fbd // and.16b v29, v29, v2 WORD $0x4e0303bd // tbl.16b v29, { v29 }, v3 @@ -2091,20 +2141,20 @@ LBB0_300: WORD $0x53103e31 // lsl w17, w17, #16 WORD $0xaa1100b1 // orr x17, x5, x17 WORD $0xaa0f0225 // orr x5, x17, x15 - WORD $0xb500030e // cbnz x14, LBB0_305 $96(%rip) - WORD $0xb5008845 // cbnz x5, LBB0_551 $4360(%rip) - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xb500030e // cbnz x14, LBB0_315 $96(%rip) + WORD $0xb5008925 // cbnz x5, LBB0_564 $4388(%rip) + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 - WORD $0x54fff568 // b.hi LBB0_298 $-340(%rip) - WORD $0x14000229 // b LBB0_430 $2212(%rip) -LBB0_303: + WORD $0xf100feff // cmp x23, #63 + WORD $0x54fff568 // b.hi LBB0_308 $-340(%rip) + WORD $0x14000229 // b LBB0_440 $2212(%rip) +LBB0_313: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011ef // clz x15, x15 WORD $0x8b1301ef // add x15, x15, x19 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_304: +LBB0_314: WORD $0x8a2600af // bic x15, x5, x6 WORD $0xaa0f04d1 // orr x17, x6, x15, lsl #1 WORD $0x8a3100a5 // bic x5, x5, x17 @@ -2115,9 +2165,9 @@ LBB0_304: WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 WORD $0x8a1101ef // and x15, x15, x17 WORD $0x8a2f01ce // bic x14, x14, x15 - WORD $0x5280007a // mov w26, #3 - WORD $0x17ffffd0 // b LBB0_300 $-192(%rip) -LBB0_305: + WORD $0x5280007b // mov w27, #3 + WORD $0x17ffffd0 // b LBB0_310 $-192(%rip) +LBB0_315: WORD $0xdac001ce // rbit x14, x14 WORD $0xdac011ce // clz x14, x14 WORD $0xdac000af // rbit x15, x5 @@ -2125,33 +2175,33 @@ LBB0_305: WORD $0xeb0e00bf // cmp x5, x14 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x54008f03 // b.lo LBB0_574 $4576(%rip) -LBB0_306: + WORD $0x54008fe3 // b.lo LBB0_587 $4604(%rip) +LBB0_316: WORD $0x8b1301ce // add x14, x14, x19 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6ffe7d3 // tbz x19, #63, LBB0_283 $-776(%rip) - WORD $0x14000413 // b LBB0_544 $4172(%rip) -LBB0_307: + WORD $0xb6f85833 // tbz x19, #63, LBB0_478 $2820(%rip) + WORD $0x1400041a // b LBB0_557 $4200(%rip) +LBB0_317: WORD $0x3940040e // ldrb w14, [x0, #1] WORD $0x5100b9ce // sub w14, w14, #46 WORD $0x7100dddf // cmp w14, #55 - WORD $0x54ff78e8 // b.hi LBB0_161 $-4324(%rip) + WORD $0x54ff75e8 // b.hi LBB0_166 $-4420(%rip) WORD $0x9ace218f // lsl x15, x12, x14 WORD $0x5280002e // mov w14, #1 WORD $0xb20903f1 // mov x17, #36028797027352576 WORD $0xf2800031 // movk x17, #1 WORD $0xea1101ff // tst x15, x17 WORD $0x12800011 // mov w17, #-1 - WORD $0x54001420 // b.eq LBB0_355 $644(%rip) -LBB0_309: - WORD $0xf100433f // cmp x25, #16 - WORD $0x54005143 // b.lo LBB0_460 $2600(%rip) - WORD $0xd2800015 // mov x21, #0 + WORD $0x54001420 // b.eq LBB0_365 $644(%rip) +LBB0_319: + WORD $0xf100435f // cmp x26, #16 + WORD $0x54005143 // b.lo LBB0_470 $2600(%rip) + WORD $0xd2800016 // mov x22, #0 WORD $0xd2800005 // mov x5, #0 WORD $0x92800006 // mov x6, #-1 - WORD $0x92800016 // mov x22, #-1 - WORD $0x9280001a // mov x26, #-1 -LBB0_311: + WORD $0x92800017 // mov x23, #-1 + WORD $0x9280001b // mov x27, #-1 +LBB0_321: WORD $0x3ce5681a // ldr q26, [x0, x5] WORD $0x6e258f5b // cmeq.16b v27, v26, v5 WORD $0x6e268f5c // cmeq.16b v28, v26, v6 @@ -2184,210 +2234,210 @@ LBB0_311: WORD $0x32103dce // orr w14, w14, #0xffff0000 WORD $0x5ac001ce // rbit w14, w14 WORD $0x5ac011ce // clz w14, w14 - WORD $0x12800014 // mov w20, #-1 - WORD $0x1ace2294 // lsl w20, w20, w14 - WORD $0x0a3401f7 // bic w23, w15, w20 - WORD $0x0a340238 // bic w24, w17, w20 - WORD $0x0a3400f4 // bic w20, w7, w20 + WORD $0x12800015 // mov w21, #-1 + WORD $0x1ace22b5 // lsl w21, w21, w14 + WORD $0x0a3501f8 // bic w24, w15, w21 + WORD $0x0a350239 // bic w25, w17, w21 + WORD $0x0a3500f5 // bic w21, w7, w21 WORD $0x710041df // cmp w14, #16 - WORD $0x1a9701f7 // csel w23, w15, w23, eq - WORD $0x1a980238 // csel w24, w17, w24, eq - WORD $0x1a9400f4 // csel w20, w7, w20, eq - WORD $0x510006ef // sub w15, w23, #1 - WORD $0x6a1701ef // ands w15, w15, w23 - WORD $0x540035a1 // b.ne LBB0_422 $1716(%rip) + WORD $0x1a9801f8 // csel w24, w15, w24, eq + WORD $0x1a990239 // csel w25, w17, w25, eq + WORD $0x1a9500f5 // csel w21, w7, w21, eq WORD $0x5100070f // sub w15, w24, #1 WORD $0x6a1801ef // ands w15, w15, w24 - WORD $0x54003541 // b.ne LBB0_422 $1704(%rip) - WORD $0x5100068f // sub w15, w20, #1 - WORD $0x6a1401ef // ands w15, w15, w20 - WORD $0x540034e1 // b.ne LBB0_422 $1692(%rip) - WORD $0x340000d7 // cbz w23, LBB0_317 $24(%rip) - WORD $0x5ac002ef // rbit w15, w23 - WORD $0x5ac011f7 // clz w23, w15 - WORD $0xb100075f // cmn x26, #1 - WORD $0x540038a1 // b.ne LBB0_431 $1812(%rip) - WORD $0x8b1700ba // add x26, x5, x23 -LBB0_317: - WORD $0x340000d8 // cbz w24, LBB0_320 $24(%rip) + WORD $0x540035a1 // b.ne LBB0_432 $1716(%rip) + WORD $0x5100072f // sub w15, w25, #1 + WORD $0x6a1901ef // ands w15, w15, w25 + WORD $0x54003541 // b.ne LBB0_432 $1704(%rip) + WORD $0x510006af // sub w15, w21, #1 + WORD $0x6a1501ef // ands w15, w15, w21 + WORD $0x540034e1 // b.ne LBB0_432 $1692(%rip) + WORD $0x340000d8 // cbz w24, LBB0_327 $24(%rip) WORD $0x5ac0030f // rbit w15, w24 - WORD $0x5ac011f7 // clz w23, w15 - WORD $0xb10006df // cmn x22, #1 - WORD $0x540037e1 // b.ne LBB0_431 $1788(%rip) - WORD $0x8b1700b6 // add x22, x5, x23 -LBB0_320: - WORD $0x340000d4 // cbz w20, LBB0_323 $24(%rip) - WORD $0x5ac0028f // rbit w15, w20 - WORD $0x5ac011f4 // clz w20, w15 + WORD $0x5ac011f8 // clz w24, w15 + WORD $0xb100077f // cmn x27, #1 + WORD $0x540038a1 // b.ne LBB0_441 $1812(%rip) + WORD $0x8b1800bb // add x27, x5, x24 +LBB0_327: + WORD $0x340000d9 // cbz w25, LBB0_330 $24(%rip) + WORD $0x5ac0032f // rbit w15, w25 + WORD $0x5ac011f8 // clz w24, w15 + WORD $0xb10006ff // cmn x23, #1 + WORD $0x540037e1 // b.ne LBB0_441 $1788(%rip) + WORD $0x8b1800b7 // add x23, x5, x24 +LBB0_330: + WORD $0x340000d5 // cbz w21, LBB0_333 $24(%rip) + WORD $0x5ac002af // rbit w15, w21 + WORD $0x5ac011f5 // clz w21, w15 WORD $0xb10004df // cmn x6, #1 - WORD $0x540047c1 // b.ne LBB0_459 $2296(%rip) - WORD $0x8b1400a6 // add x6, x5, x20 -LBB0_323: + WORD $0x540047c1 // b.ne LBB0_469 $2296(%rip) + WORD $0x8b1500a6 // add x6, x5, x21 +LBB0_333: WORD $0x710041df // cmp w14, #16 - WORD $0x54000601 // b.ne LBB0_341 $192(%rip) + WORD $0x54000601 // b.ne LBB0_351 $192(%rip) WORD $0x910040a5 // add x5, x5, #16 - WORD $0xd10042b5 // sub x21, x21, #16 - WORD $0x8b15032e // add x14, x25, x21 + WORD $0xd10042d6 // sub x22, x22, #16 + WORD $0x8b16034e // add x14, x26, x22 WORD $0xf1003ddf // cmp x14, #15 - WORD $0x54fff6c8 // b.hi LBB0_311 $-296(%rip) - WORD $0x8b050015 // add x21, x0, x5 - WORD $0xeb05033f // cmp x25, x5 + WORD $0x54fff6c8 // b.hi LBB0_321 $-296(%rip) + WORD $0x8b050016 // add x22, x0, x5 + WORD $0xeb05035f // cmp x26, x5 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x54000540 // b.eq LBB0_342 $168(%rip) -LBB0_326: - WORD $0x8b0e02a5 // add x5, x21, x14 - WORD $0xcb0802af // sub x15, x21, x8 - WORD $0xcb1e01f9 // sub x25, x15, lr - WORD $0xaa1503fe // mov lr, x21 - WORD $0x14000006 // b LBB0_329 $24(%rip) -LBB0_327: - WORD $0xd100073a // sub x26, x25, #1 -LBB0_328: - WORD $0x91000739 // add x25, x25, #1 - WORD $0xaa1e03f5 // mov x21, lr + WORD $0x54000540 // b.eq LBB0_352 $168(%rip) +LBB0_336: + WORD $0x8b0e02c5 // add x5, x22, x14 + WORD $0xcb0802cf // sub x15, x22, x8 + WORD $0xcb1401f4 // sub x20, x15, x20 + WORD $0xaa1603fa // mov x26, x22 + WORD $0x14000006 // b LBB0_339 $24(%rip) +LBB0_337: + WORD $0xd100069b // sub x27, x20, #1 +LBB0_338: + WORD $0x91000694 // add x20, x20, #1 + WORD $0xaa1a03f6 // mov x22, x26 WORD $0xd10005ce // sub x14, x14, #1 - WORD $0xb4000c2e // cbz x14, LBB0_363 $388(%rip) -LBB0_329: - WORD $0x384017d4 // ldrb w20, [lr], #1 - WORD $0x5100c28f // sub w15, w20, #48 + WORD $0xb4000c2e // cbz x14, LBB0_373 $388(%rip) +LBB0_339: + WORD $0x38401755 // ldrb w21, [x26], #1 + WORD $0x5100c2af // sub w15, w21, #48 WORD $0x710029ff // cmp w15, #10 - WORD $0x54ffff23 // b.lo LBB0_328 $-28(%rip) - WORD $0x7100b69f // cmp w20, #45 - WORD $0x5400014d // b.le LBB0_335 $40(%rip) - WORD $0x7101969f // cmp w20, #101 - WORD $0x54000200 // b.eq LBB0_339 $64(%rip) - WORD $0x7101169f // cmp w20, #69 - WORD $0x540001c0 // b.eq LBB0_339 $56(%rip) - WORD $0x7100ba9f // cmp w20, #46 - WORD $0x54000281 // b.ne LBB0_342 $80(%rip) - WORD $0xb100075f // cmn x26, #1 - WORD $0x54fffdc0 // b.eq LBB0_327 $-72(%rip) - WORD $0x1400016d // b LBB0_421 $1460(%rip) -LBB0_335: - WORD $0x7100ae9f // cmp w20, #43 - WORD $0x54000060 // b.eq LBB0_337 $12(%rip) - WORD $0x7100b69f // cmp w20, #45 - WORD $0x540001a1 // b.ne LBB0_342 $52(%rip) -LBB0_337: + WORD $0x54ffff23 // b.lo LBB0_338 $-28(%rip) + WORD $0x7100b6bf // cmp w21, #45 + WORD $0x5400014d // b.le LBB0_345 $40(%rip) + WORD $0x710196bf // cmp w21, #101 + WORD $0x54000200 // b.eq LBB0_349 $64(%rip) + WORD $0x710116bf // cmp w21, #69 + WORD $0x540001c0 // b.eq LBB0_349 $56(%rip) + WORD $0x7100babf // cmp w21, #46 + WORD $0x54000281 // b.ne LBB0_352 $80(%rip) + WORD $0xb100077f // cmn x27, #1 + WORD $0x54fffdc0 // b.eq LBB0_337 $-72(%rip) + WORD $0x1400016d // b LBB0_431 $1460(%rip) +LBB0_345: + WORD $0x7100aebf // cmp w21, #43 + WORD $0x54000060 // b.eq LBB0_347 $12(%rip) + WORD $0x7100b6bf // cmp w21, #45 + WORD $0x540001a1 // b.ne LBB0_352 $52(%rip) +LBB0_347: WORD $0xb10004df // cmn x6, #1 - WORD $0x54002ce1 // b.ne LBB0_421 $1436(%rip) - WORD $0xd1000726 // sub x6, x25, #1 - WORD $0x17ffffe6 // b LBB0_328 $-104(%rip) -LBB0_339: - WORD $0xb10006df // cmn x22, #1 - WORD $0x54002c61 // b.ne LBB0_421 $1420(%rip) - WORD $0xd1000736 // sub x22, x25, #1 - WORD $0x17ffffe2 // b LBB0_328 $-120(%rip) -LBB0_341: + WORD $0x54002ce1 // b.ne LBB0_431 $1436(%rip) + WORD $0xd1000686 // sub x6, x20, #1 + WORD $0x17ffffe6 // b LBB0_338 $-104(%rip) +LBB0_349: + WORD $0xb10006ff // cmn x23, #1 + WORD $0x54002c61 // b.ne LBB0_431 $1420(%rip) + WORD $0xd1000697 // sub x23, x20, #1 + WORD $0x17ffffe2 // b LBB0_338 $-120(%rip) +LBB0_351: WORD $0x8b2e400e // add x14, x0, w14, uxtw - WORD $0x8b0501d5 // add x21, x14, x5 + WORD $0x8b0501d6 // add x22, x14, x5 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 -LBB0_342: +LBB0_352: WORD $0x9280000e // mov x14, #-1 - WORD $0xb4007c3a // cbz x26, LBB0_571 $3972(%rip) -LBB0_343: - WORD $0xb4007c06 // cbz x6, LBB0_571 $3968(%rip) - WORD $0xb4007bf6 // cbz x22, LBB0_571 $3964(%rip) - WORD $0xcb0002ae // sub x14, x21, x0 + WORD $0xb4007d1b // cbz x27, LBB0_584 $4000(%rip) +LBB0_353: + WORD $0xb4007ce6 // cbz x6, LBB0_584 $3996(%rip) + WORD $0xb4007cd7 // cbz x23, LBB0_584 $3992(%rip) + WORD $0xcb0002ce // sub x14, x22, x0 WORD $0xd10005c0 // sub x0, x14, #1 - WORD $0xeb00035f // cmp x26, x0 - WORD $0x540002e0 // b.eq LBB0_354 $92(%rip) + WORD $0xeb00037f // cmp x27, x0 + WORD $0x540002e0 // b.eq LBB0_364 $92(%rip) WORD $0xeb0000df // cmp x6, x0 - WORD $0x540002a0 // b.eq LBB0_354 $84(%rip) - WORD $0xeb0002df // cmp x22, x0 - WORD $0x54000260 // b.eq LBB0_354 $76(%rip) + WORD $0x540002a0 // b.eq LBB0_364 $84(%rip) + WORD $0xeb0002ff // cmp x23, x0 + WORD $0x54000260 // b.eq LBB0_364 $76(%rip) WORD $0xf10004cf // subs x15, x6, #1 - WORD $0x5400006b // b.lt LBB0_350 $12(%rip) - WORD $0xeb0f02df // cmp x22, x15 - WORD $0x54007a81 // b.ne LBB0_572 $3920(%rip) -LBB0_350: - WORD $0xaa160340 // orr x0, x26, x22 - WORD $0xb7f80060 // tbnz x0, #63, LBB0_352 $12(%rip) - WORD $0xeb16035f // cmp x26, x22 - WORD $0x54007a4a // b.ge LBB0_573 $3912(%rip) -LBB0_352: + WORD $0x5400006b // b.lt LBB0_360 $12(%rip) + WORD $0xeb0f02ff // cmp x23, x15 + WORD $0x54007b61 // b.ne LBB0_585 $3948(%rip) +LBB0_360: + WORD $0xaa170360 // orr x0, x27, x23 + WORD $0xb7f80060 // tbnz x0, #63, LBB0_362 $12(%rip) + WORD $0xeb17037f // cmp x27, x23 + WORD $0x54007b2a // b.ge LBB0_586 $3940(%rip) +LBB0_362: WORD $0xd37ffc0f // lsr x15, x0, #63 WORD $0x520001ef // eor w15, w15, #0x1 - WORD $0xd10006d1 // sub x17, x22, #1 - WORD $0xeb11035f // cmp x26, x17 + WORD $0xd10006f1 // sub x17, x23, #1 + WORD $0xeb11037f // cmp x27, x17 WORD $0x1a9f17f1 // cset w17, eq WORD $0x6a1101ff // tst w15, w17 - WORD $0xda9601ce // csinv x14, x14, x22, eq -LBB0_353: + WORD $0xda9701ce // csinv x14, x14, x23, eq +LBB0_363: WORD $0x12800011 // mov w17, #-1 - WORD $0xb6f8008e // tbz x14, #63, LBB0_355 $16(%rip) - WORD $0x140003c5 // b LBB0_571 $3860(%rip) -LBB0_354: + WORD $0xb6f8008e // tbz x14, #63, LBB0_365 $16(%rip) + WORD $0x140003cc // b LBB0_584 $3888(%rip) +LBB0_364: WORD $0xcb0e03ee // neg x14, x14 - WORD $0xb7f8786e // tbnz x14, #63, LBB0_571 $3852(%rip) -LBB0_355: + WORD $0xb7f8794e // tbnz x14, #63, LBB0_584 $3880(%rip) +LBB0_365: WORD $0x8b1301d3 // add x19, x14, x19 WORD $0xf9000033 // str x19, [x1] WORD $0xaa0803e0 // mov x0, x8 WORD $0xeb07011f // cmp x8, x7 - WORD $0x5280007a // mov w26, #3 - WORD $0x54ffd203 // b.lo LBB0_284 $-1472(%rip) - WORD $0x140003c8 // b LBB0_578 $3872(%rip) -LBB0_356: - WORD $0xb5003d85 // cbnz x5, LBB0_461 $1968(%rip) + WORD $0x5280007b // mov w27, #3 + WORD $0x54004263 // b.lo LBB0_480 $2124(%rip) + WORD $0x140003cf // b LBB0_591 $3900(%rip) +LBB0_366: + WORD $0xb5003d85 // cbnz x5, LBB0_471 $1968(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910005e5 // add x5, x15, #1 WORD $0xaa2e03ee // mvn x14, x14 WORD $0x8b0001ce // add x14, x14, x0 WORD $0xf10005df // cmp x14, #1 - WORD $0x54003f2a // b.ge LBB0_464 $2020(%rip) - WORD $0x140003bf // b LBB0_577 $3836(%rip) -LBB0_358: + WORD $0x54003f2a // b.ge LBB0_474 $2020(%rip) + WORD $0x140003c6 // b LBB0_590 $3864(%rip) +LBB0_368: WORD $0x5ac001ee // rbit w14, w15 WORD $0x5ac011ce // clz w14, w14 - WORD $0xaa3a03ef // mvn x15, x26 + WORD $0xaa3b03ef // mvn x15, x27 WORD $0xcb0e01ee // sub x14, x15, x14 - WORD $0x5280007a // mov w26, #3 - WORD $0x17fffb40 // b LBB0_180 $-4864(%rip) -LBB0_359: - WORD $0x8b1303c5 // add x5, lr, x19 + WORD $0x5280007b // mov w27, #3 + WORD $0x17fffb28 // b LBB0_185 $-4960(%rip) +LBB0_369: + WORD $0x8b130285 // add x5, x20, x19 WORD $0xf10005df // cmp x14, #1 - WORD $0x54003dea // b.ge LBB0_464 $1980(%rip) - WORD $0x140003b5 // b LBB0_577 $3796(%rip) -LBB0_360: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400001a // b LBB0_367 $104(%rip) -LBB0_361: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400003e // b LBB0_373 $248(%rip) -LBB0_362: - WORD $0xaa3a03ee // mvn x14, x26 - WORD $0xcb3441ce // sub x14, x14, w20, uxtw - WORD $0x5280007a // mov w26, #3 - WORD $0x17fffb34 // b LBB0_180 $-4912(%rip) -LBB0_363: - WORD $0xaa0503f5 // mov x21, x5 + WORD $0x54003dea // b.ge LBB0_474 $1980(%rip) + WORD $0x140003bc // b LBB0_590 $3824(%rip) +LBB0_370: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400001a // b LBB0_377 $104(%rip) +LBB0_371: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400003e // b LBB0_383 $248(%rip) +LBB0_372: + WORD $0xaa3b03ee // mvn x14, x27 + WORD $0xcb3541ce // sub x14, x14, w21, uxtw + WORD $0x5280007b // mov w27, #3 + WORD $0x17fffb1c // b LBB0_185 $-5008(%rip) +LBB0_373: + WORD $0xaa0503f6 // mov x22, x5 WORD $0x9280000e // mov x14, #-1 - WORD $0xb5fff7fa // cbnz x26, LBB0_343 $-260(%rip) - WORD $0x1400039e // b LBB0_571 $3704(%rip) -LBB0_364: + WORD $0xb5fff7fb // cbnz x27, LBB0_353 $-260(%rip) + WORD $0x140003a5 // b LBB0_584 $3732(%rip) +LBB0_374: WORD $0x5ac001ee // rbit w14, w15 WORD $0x5ac011ce // clz w14, w14 - WORD $0xaa3a03ef // mvn x15, x26 + WORD $0xaa3b03ef // mvn x15, x27 WORD $0xcb0e01ee // sub x14, x15, x14 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x17fffb28 // b LBB0_180 $-4960(%rip) -LBB0_365: - WORD $0x8b1303c5 // add x5, lr, x19 + WORD $0x17fffb10 // b LBB0_185 $-5056(%rip) +LBB0_375: + WORD $0x8b130285 // add x5, x20, x19 WORD $0xf10005df // cmp x14, #1 - WORD $0x54003f2a // b.ge LBB0_471 $2020(%rip) - WORD $0x1400039d // b LBB0_577 $3700(%rip) -LBB0_366: + WORD $0x5400400a // b.ge LBB0_484 $2048(%rip) + WORD $0x140003a4 // b LBB0_590 $3728(%rip) +LBB0_376: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_367: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x540043a3 // b.lo LBB0_478 $2164(%rip) +LBB0_377: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x54004483 // b.lo LBB0_491 $2192(%rip) WORD $0xad406e7a // ldp q26, q27, [x19] WORD $0x6e208f5c // cmeq.16b v28, v26, v0 WORD $0x6e208f7d // cmeq.16b v29, v27, v0 @@ -2404,31 +2454,31 @@ LBB0_367: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 + WORD $0x1e260356 // fmov w22, s26 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103eb4 // bfi w20, w21, #16, #16 - WORD $0x35003dd4 // cbnz w20, LBB0_475 $1976(%rip) - WORD $0xb5003e66 // cbnz x6, LBB0_476 $1996(%rip) - WORD $0xb4004025 // cbz x5, LBB0_477 $2052(%rip) -LBB0_371: + WORD $0x33103ed5 // bfi w21, w22, #16, #16 + WORD $0x35003eb5 // cbnz w21, LBB0_488 $2004(%rip) + WORD $0xb5003f46 // cbnz x6, LBB0_489 $2024(%rip) + WORD $0xb4004105 // cbz x5, LBB0_490 $2080(%rip) +LBB0_381: WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011ce // clz x14, x14 - WORD $0xcb1e026f // sub x15, x19, lr + WORD $0xcb14026f // sub x15, x19, x20 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6ffc793 // tbz x19, #63, LBB0_283 $-1808(%rip) - WORD $0x14000311 // b LBB0_544 $3140(%rip) -LBB0_372: + WORD $0xb6f837f3 // tbz x19, #63, LBB0_478 $1788(%rip) + WORD $0x14000318 // b LBB0_557 $3168(%rip) +LBB0_382: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_373: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x54000623 // b.lo LBB0_380 $196(%rip) +LBB0_383: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x54000623 // b.lo LBB0_390 $196(%rip) WORD $0xad406a7b // ldp q27, q26, [x19] WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 @@ -2444,100 +2494,100 @@ LBB0_373: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260394 // fmov w20, s28 + WORD $0x1e260395 // fmov w21, s28 WORD $0x6e218f5c // cmeq.16b v28, v26, v1 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260395 // fmov w21, s28 + WORD $0x1e260396 // fmov w22, s28 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103eb4 // bfi w20, w21, #16, #16 - WORD $0x35004034 // cbnz w20, LBB0_489 $2052(%rip) - WORD $0xb50040c6 // cbnz x6, LBB0_490 $2072(%rip) -LBB0_376: + WORD $0x33103ed5 // bfi w21, w22, #16, #16 + WORD $0x35004115 // cbnz w21, LBB0_502 $2080(%rip) + WORD $0xb50041a6 // cbnz x6, LBB0_503 $2100(%rip) +LBB0_386: WORD $0x6e3b349b // cmhi.16b v27, v4, v27 WORD $0x4e221f7b // and.16b v27, v27, v2 WORD $0x4e03037b // tbl.16b v27, { v27 }, v3 WORD $0x4e71bb7b // addv.8h h27, v27 - WORD $0x1e260375 // fmov w21, s27 + WORD $0x1e260376 // fmov w22, s27 WORD $0x6e3a349a // cmhi.16b v26, v4, v26 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df5 // bfi w21, w15, #16, #16 - WORD $0xdac002af // rbit x15, x21 - WORD $0xdac011f4 // clz x20, x15 - WORD $0xb40000e5 // cbz x5, LBB0_378 $28(%rip) + WORD $0x33103df6 // bfi w22, w15, #16, #16 + WORD $0xdac002cf // rbit x15, x22 + WORD $0xdac011f5 // clz x21, x15 + WORD $0xb40000e5 // cbz x5, LBB0_388 $28(%rip) WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011c5 // clz x5, x14 - WORD $0xcb1e026e // sub x14, x19, lr - WORD $0xeb05029f // cmp x20, x5 - WORD $0x54000462 // b.hs LBB0_391 $140(%rip) - WORD $0x1400034f // b LBB0_579 $3388(%rip) -LBB0_378: - WORD $0x35006a35 // cbnz w21, LBB0_580 $3396(%rip) + WORD $0xcb14026e // sub x14, x19, x20 + WORD $0xeb0502bf // cmp x21, x5 + WORD $0x54000462 // b.hs LBB0_401 $140(%rip) + WORD $0x14000356 // b LBB0_592 $3416(%rip) +LBB0_388: + WORD $0x35006b16 // cbnz w22, LBB0_593 $3424(%rip) WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_380: - WORD $0xb5004a46 // cbnz x6, LBB0_509 $2376(%rip) - WORD $0xb4005b96 // cbz x22, LBB0_545 $2928(%rip) -LBB0_382: - WORD $0xcb1e03ee // neg x14, lr -LBB0_383: + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_390: + WORD $0xb5004b26 // cbnz x6, LBB0_522 $2404(%rip) + WORD $0xb4005c77 // cbz x23, LBB0_558 $2956(%rip) +LBB0_392: + WORD $0xcb1403ee // neg x14, x20 +LBB0_393: WORD $0xd2800005 // mov x5, #0 -LBB0_384: +LBB0_394: WORD $0x38656a66 // ldrb w6, [x19, x5] WORD $0x710088df // cmp w6, #34 - WORD $0x540002e0 // b.eq LBB0_390 $92(%rip) + WORD $0x540002e0 // b.eq LBB0_400 $92(%rip) WORD $0x710170df // cmp w6, #92 - WORD $0x540000e0 // b.eq LBB0_388 $28(%rip) + WORD $0x540000e0 // b.eq LBB0_398 $28(%rip) WORD $0x71007cdf // cmp w6, #31 - WORD $0x54006909 // b.ls LBB0_581 $3360(%rip) + WORD $0x540069e9 // b.ls LBB0_594 $3388(%rip) WORD $0x910004a5 // add x5, x5, #1 - WORD $0xeb0502df // cmp x22, x5 - WORD $0x54fffee1 // b.ne LBB0_384 $-36(%rip) - WORD $0x140002cf // b LBB0_545 $2876(%rip) -LBB0_388: - WORD $0xd10006cf // sub x15, x22, #1 + WORD $0xeb0502ff // cmp x23, x5 + WORD $0x54fffee1 // b.ne LBB0_394 $-36(%rip) + WORD $0x140002d6 // b LBB0_558 $2904(%rip) +LBB0_398: + WORD $0xd10006ef // sub x15, x23, #1 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x54005980 // b.eq LBB0_545 $2864(%rip) + WORD $0x54005a60 // b.eq LBB0_558 $2892(%rip) WORD $0x8b05026f // add x15, x19, x5 WORD $0x8b0e01e6 // add x6, x15, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8000c0 // csel x0, x6, x0, eq WORD $0x910009f3 // add x19, x15, #2 - WORD $0xd1000acf // sub x15, x22, #2 - WORD $0xcb0502c6 // sub x6, x22, x5 - WORD $0xd10008d6 // sub x22, x6, #2 + WORD $0xd1000aef // sub x15, x23, #2 + WORD $0xcb0502e6 // sub x6, x23, x5 + WORD $0xd10008d7 // sub x23, x6, #2 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x54fffd01 // b.ne LBB0_383 $-96(%rip) - WORD $0x140002c1 // b LBB0_545 $2820(%rip) -LBB0_390: - WORD $0xcb1e026e // sub x14, x19, lr -LBB0_391: + WORD $0x54fffd01 // b.ne LBB0_393 $-96(%rip) + WORD $0x140002c8 // b LBB0_558 $2848(%rip) +LBB0_400: + WORD $0xcb14026e // sub x14, x19, x20 +LBB0_401: WORD $0x8b0501ce // add x14, x14, x5 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6ffbcb3 // tbz x19, #63, LBB0_283 $-2156(%rip) - WORD $0x140002ba // b LBB0_544 $2792(%rip) -LBB0_392: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400000a // b LBB0_396 $40(%rip) -LBB0_393: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400002e // b LBB0_402 $184(%rip) -LBB0_394: - WORD $0xaa3a03ee // mvn x14, x26 - WORD $0xcb3741ce // sub x14, x14, w23, uxtw - WORD $0x5280007a // mov w26, #3 - WORD $0x17fffa9f // b LBB0_180 $-5508(%rip) -LBB0_395: + WORD $0xb6f82d13 // tbz x19, #63, LBB0_478 $1440(%rip) + WORD $0x140002c1 // b LBB0_557 $2820(%rip) +LBB0_402: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400000a // b LBB0_406 $40(%rip) +LBB0_403: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400002e // b LBB0_412 $184(%rip) +LBB0_404: + WORD $0xaa3b03ee // mvn x14, x27 + WORD $0xcb3841ce // sub x14, x14, w24, uxtw + WORD $0x5280007b // mov w27, #3 + WORD $0x17fffa87 // b LBB0_185 $-5604(%rip) +LBB0_405: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_396: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x54003cc3 // b.lo LBB0_494 $1944(%rip) +LBB0_406: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x54003da3 // b.lo LBB0_507 $1972(%rip) WORD $0xad406e7a // ldp q26, q27, [x19] WORD $0x6e208f5c // cmeq.16b v28, v26, v0 WORD $0x6e208f7d // cmeq.16b v29, v27, v0 @@ -2554,31 +2604,31 @@ LBB0_396: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 + WORD $0x1e260356 // fmov w22, s26 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103eb4 // bfi w20, w21, #16, #16 - WORD $0x350036f4 // cbnz w20, LBB0_491 $1756(%rip) - WORD $0xb5003786 // cbnz x6, LBB0_492 $1776(%rip) - WORD $0xb4003945 // cbz x5, LBB0_493 $1832(%rip) -LBB0_400: + WORD $0x33103ed5 // bfi w21, w22, #16, #16 + WORD $0x350037d5 // cbnz w21, LBB0_504 $1784(%rip) + WORD $0xb5003866 // cbnz x6, LBB0_505 $1804(%rip) + WORD $0xb4003a25 // cbz x5, LBB0_506 $1860(%rip) +LBB0_410: WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011ce // clz x14, x14 - WORD $0xcb1e026f // sub x15, x19, lr + WORD $0xcb14026f // sub x15, x19, x20 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6ff5e53 // tbz x19, #63, LBB0_194 $-5176(%rip) - WORD $0x1400028c // b LBB0_544 $2608(%rip) -LBB0_401: + WORD $0xb6ff5b53 // tbz x19, #63, LBB0_199 $-5272(%rip) + WORD $0x14000293 // b LBB0_557 $2636(%rip) +LBB0_411: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_402: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x54000623 // b.lo LBB0_409 $196(%rip) +LBB0_412: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x54000623 // b.lo LBB0_419 $196(%rip) WORD $0xad406a7b // ldp q27, q26, [x19] WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 @@ -2594,149 +2644,149 @@ LBB0_402: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260394 // fmov w20, s28 + WORD $0x1e260395 // fmov w21, s28 WORD $0x6e218f5c // cmeq.16b v28, v26, v1 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260395 // fmov w21, s28 + WORD $0x1e260396 // fmov w22, s28 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103eb4 // bfi w20, w21, #16, #16 - WORD $0x35003914 // cbnz w20, LBB0_504 $1824(%rip) - WORD $0xb50039a6 // cbnz x6, LBB0_506 $1844(%rip) -LBB0_405: + WORD $0x33103ed5 // bfi w21, w22, #16, #16 + WORD $0x350039f5 // cbnz w21, LBB0_517 $1852(%rip) + WORD $0xb5003a86 // cbnz x6, LBB0_519 $1872(%rip) +LBB0_415: WORD $0x6e3b349b // cmhi.16b v27, v4, v27 WORD $0x4e221f7b // and.16b v27, v27, v2 WORD $0x4e03037b // tbl.16b v27, { v27 }, v3 WORD $0x4e71bb7b // addv.8h h27, v27 - WORD $0x1e260375 // fmov w21, s27 + WORD $0x1e260376 // fmov w22, s27 WORD $0x6e3a349a // cmhi.16b v26, v4, v26 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df5 // bfi w21, w15, #16, #16 - WORD $0xdac002af // rbit x15, x21 - WORD $0xdac011f4 // clz x20, x15 - WORD $0xb40000e5 // cbz x5, LBB0_407 $28(%rip) + WORD $0x33103df6 // bfi w22, w15, #16, #16 + WORD $0xdac002cf // rbit x15, x22 + WORD $0xdac011f5 // clz x21, x15 + WORD $0xb40000e5 // cbz x5, LBB0_417 $28(%rip) WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011c5 // clz x5, x14 - WORD $0xcb1e026e // sub x14, x19, lr - WORD $0xeb05029f // cmp x20, x5 - WORD $0x54000582 // b.hs LBB0_420 $176(%rip) - WORD $0x140002ca // b LBB0_579 $2856(%rip) -LBB0_407: - WORD $0x35005995 // cbnz w21, LBB0_580 $2864(%rip) + WORD $0xcb14026e // sub x14, x19, x20 + WORD $0xeb0502bf // cmp x21, x5 + WORD $0x54000582 // b.hs LBB0_430 $176(%rip) + WORD $0x140002d1 // b LBB0_592 $2884(%rip) +LBB0_417: + WORD $0x35005a76 // cbnz w22, LBB0_593 $2892(%rip) WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_409: - WORD $0xb5003ca6 // cbnz x6, LBB0_516 $1940(%rip) - WORD $0x5280007a // mov w26, #3 + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_419: + WORD $0xb5003d86 // cbnz x6, LBB0_529 $1968(%rip) + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb4004a96 // cbz x22, LBB0_545 $2384(%rip) -LBB0_411: - WORD $0xcb1e03ee // neg x14, lr -LBB0_412: + WORD $0xb4004b77 // cbz x23, LBB0_558 $2412(%rip) +LBB0_421: + WORD $0xcb1403ee // neg x14, x20 +LBB0_422: WORD $0xd2800005 // mov x5, #0 -LBB0_413: +LBB0_423: WORD $0x38656a66 // ldrb w6, [x19, x5] WORD $0x710088df // cmp w6, #34 - WORD $0x540003a0 // b.eq LBB0_419 $116(%rip) + WORD $0x540003a0 // b.eq LBB0_429 $116(%rip) WORD $0x710170df // cmp w6, #92 - WORD $0x54000140 // b.eq LBB0_417 $40(%rip) + WORD $0x54000140 // b.eq LBB0_427 $40(%rip) WORD $0x71007cdf // cmp w6, #31 - WORD $0x54005809 // b.ls LBB0_581 $2816(%rip) + WORD $0x540058e9 // b.ls LBB0_594 $2844(%rip) WORD $0x910004a5 // add x5, x5, #1 - WORD $0xeb0502df // cmp x22, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0xeb0502ff // cmp x23, x5 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x54fffe81 // b.ne LBB0_413 $-48(%rip) - WORD $0x14000244 // b LBB0_545 $2320(%rip) -LBB0_417: - WORD $0xd10006cf // sub x15, x22, #1 + WORD $0x54fffe81 // b.ne LBB0_423 $-48(%rip) + WORD $0x1400024b // b LBB0_558 $2348(%rip) +LBB0_427: + WORD $0xd10006ef // sub x15, x23, #1 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x540047c0 // b.eq LBB0_545 $2296(%rip) + WORD $0x540048a0 // b.eq LBB0_558 $2324(%rip) WORD $0x8b05026f // add x15, x19, x5 WORD $0x8b0e01e6 // add x6, x15, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8000c0 // csel x0, x6, x0, eq WORD $0x910009f3 // add x19, x15, #2 - WORD $0xd1000acf // sub x15, x22, #2 - WORD $0xcb0502c6 // sub x6, x22, x5 - WORD $0xd10008d6 // sub x22, x6, #2 + WORD $0xd1000aef // sub x15, x23, #2 + WORD $0xcb0502e6 // sub x6, x23, x5 + WORD $0xd10008d7 // sub x23, x6, #2 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x54fffc41 // b.ne LBB0_412 $-120(%rip) - WORD $0x14000233 // b LBB0_545 $2252(%rip) -LBB0_419: - WORD $0xcb1e026e // sub x14, x19, lr -LBB0_420: + WORD $0x54fffc41 // b.ne LBB0_422 $-120(%rip) + WORD $0x1400023a // b LBB0_558 $2280(%rip) +LBB0_429: + WORD $0xcb14026e // sub x14, x19, x20 +LBB0_430: WORD $0x8b0501ce // add x14, x14, x5 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6ff5253 // tbz x19, #63, LBB0_194 $-5560(%rip) - WORD $0x1400022c // b LBB0_544 $2224(%rip) -LBB0_421: - WORD $0xcb1903ee // neg x14, x25 - WORD $0xb6ffd86e // tbz x14, #63, LBB0_355 $-1268(%rip) - WORD $0x14000284 // b LBB0_571 $2576(%rip) -LBB0_422: + WORD $0xb6ff4f53 // tbz x19, #63, LBB0_199 $-5656(%rip) + WORD $0x14000233 // b LBB0_557 $2252(%rip) +LBB0_431: + WORD $0xcb1403ee // neg x14, x20 + WORD $0xb6ffd86e // tbz x14, #63, LBB0_365 $-1268(%rip) + WORD $0x1400028b // b LBB0_584 $2604(%rip) +LBB0_432: WORD $0x5ac001ee // rbit w14, w15 WORD $0x5ac011ce // clz w14, w14 WORD $0xaa2503ef // mvn x15, x5 WORD $0xcb0e01ee // sub x14, x15, x14 WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x17fffeb7 // b LBB0_353 $-1316(%rip) -LBB0_423: - WORD $0x8b1303c5 // add x5, lr, x19 + WORD $0x17fffeb7 // b LBB0_363 $-1316(%rip) +LBB0_433: + WORD $0x8b130285 // add x5, x20, x19 WORD $0xf10005df // cmp x14, #1 - WORD $0x540050cb // b.lt LBB0_577 $2584(%rip) -LBB0_424: - WORD $0x5280007a // mov w26, #3 + WORD $0x540051ab // b.lt LBB0_590 $2612(%rip) +LBB0_434: + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x14000007 // b LBB0_426 $28(%rip) -LBB0_425: + WORD $0x14000007 // b LBB0_436 $28(%rip) +LBB0_435: WORD $0x92800026 // mov x6, #-2 WORD $0x52800040 // mov w0, #2 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x54004fad // b.le LBB0_578 $2548(%rip) -LBB0_426: + WORD $0x5400508d // b.le LBB0_591 $2576(%rip) +LBB0_436: WORD $0x394000a0 // ldrb w0, [x5] WORD $0x7101701f // cmp w0, #92 - WORD $0x54ffff00 // b.eq LBB0_425 $-32(%rip) + WORD $0x54ffff00 // b.eq LBB0_435 $-32(%rip) WORD $0x7100881f // cmp w0, #34 - WORD $0x54001780 // b.eq LBB0_467 $752(%rip) + WORD $0x54001780 // b.eq LBB0_477 $752(%rip) WORD $0x92800006 // mov x6, #-1 WORD $0x52800020 // mov w0, #1 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x54fffecc // b.gt LBB0_426 $-40(%rip) - WORD $0x14000271 // b LBB0_578 $2500(%rip) -LBB0_429: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400000a // b LBB0_433 $40(%rip) -LBB0_430: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400002d // b LBB0_439 $180(%rip) -LBB0_431: + WORD $0x54fffecc // b.gt LBB0_436 $-40(%rip) + WORD $0x14000278 // b LBB0_591 $2528(%rip) +LBB0_439: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400000a // b LBB0_443 $40(%rip) +LBB0_440: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400002d // b LBB0_449 $180(%rip) +LBB0_441: WORD $0xaa2503ee // mvn x14, x5 - WORD $0xcb3741ce // sub x14, x14, w23, uxtw + WORD $0xcb3841ce // sub x14, x14, w24, uxtw WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x17fffe96 // b LBB0_353 $-1448(%rip) -LBB0_432: + WORD $0x17fffe96 // b LBB0_363 $-1448(%rip) +LBB0_442: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_433: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x540036c3 // b.lo LBB0_523 $1752(%rip) +LBB0_443: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x540037a3 // b.lo LBB0_536 $1780(%rip) WORD $0xad406e7a // ldp q26, q27, [x19] WORD $0x6e208f5c // cmeq.16b v28, v26, v0 WORD $0x6e208f7d // cmeq.16b v29, v27, v0 @@ -2753,30 +2803,30 @@ LBB0_433: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e260351 // fmov w17, s26 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103e34 // bfi w20, w17, #16, #16 - WORD $0x35003154 // cbnz w20, LBB0_520 $1576(%rip) - WORD $0xb50031e6 // cbnz x6, LBB0_521 $1596(%rip) - WORD $0xb4003345 // cbz x5, LBB0_522 $1640(%rip) -LBB0_437: + WORD $0x33103e35 // bfi w21, w17, #16, #16 + WORD $0x35003235 // cbnz w21, LBB0_533 $1604(%rip) + WORD $0xb50032c6 // cbnz x6, LBB0_534 $1624(%rip) + WORD $0xb4003425 // cbz x5, LBB0_535 $1668(%rip) +LBB0_447: WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011ce // clz x14, x14 - WORD $0xcb1e026f // sub x15, x19, lr + WORD $0xcb14026f // sub x15, x19, x20 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910005d3 // add x19, x14, #1 - WORD $0x140001b0 // b LBB0_534 $1728(%rip) -LBB0_438: + WORD $0x140001b7 // b LBB0_547 $1756(%rip) +LBB0_448: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_439: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x54000623 // b.lo LBB0_446 $196(%rip) +LBB0_449: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x54000623 // b.lo LBB0_456 $196(%rip) WORD $0xad406a7b // ldp q27, q26, [x19] WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 @@ -2792,434 +2842,444 @@ LBB0_439: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260394 // fmov w20, s28 + WORD $0x1e260395 // fmov w21, s28 WORD $0x6e218f5c // cmeq.16b v28, v26, v1 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 WORD $0x1e260391 // fmov w17, s28 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103e34 // bfi w20, w17, #16, #16 - WORD $0x35003314 // cbnz w20, LBB0_535 $1632(%rip) - WORD $0xb50033a6 // cbnz x6, LBB0_537 $1652(%rip) -LBB0_442: + WORD $0x33103e35 // bfi w21, w17, #16, #16 + WORD $0x350033f5 // cbnz w21, LBB0_548 $1660(%rip) + WORD $0xb5003486 // cbnz x6, LBB0_550 $1680(%rip) +LBB0_452: WORD $0x6e3b349b // cmhi.16b v27, v4, v27 WORD $0x4e221f7b // and.16b v27, v27, v2 WORD $0x4e03037b // tbl.16b v27, { v27 }, v3 WORD $0x4e71bb7b // addv.8h h27, v27 - WORD $0x1e260375 // fmov w21, s27 + WORD $0x1e260376 // fmov w22, s27 WORD $0x6e3a349a // cmhi.16b v26, v4, v26 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df5 // bfi w21, w15, #16, #16 - WORD $0xdac002af // rbit x15, x21 - WORD $0xdac011f4 // clz x20, x15 - WORD $0xb40000e5 // cbz x5, LBB0_444 $28(%rip) + WORD $0x33103df6 // bfi w22, w15, #16, #16 + WORD $0xdac002cf // rbit x15, x22 + WORD $0xdac011f5 // clz x21, x15 + WORD $0xb40000e5 // cbz x5, LBB0_454 $28(%rip) WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011c5 // clz x5, x14 - WORD $0xcb1e026e // sub x14, x19, lr - WORD $0xeb05029f // cmp x20, x5 - WORD $0x54000462 // b.hs LBB0_457 $140(%rip) - WORD $0x1400021b // b LBB0_579 $2156(%rip) -LBB0_444: - WORD $0x350043b5 // cbnz w21, LBB0_580 $2164(%rip) + WORD $0xcb14026e // sub x14, x19, x20 + WORD $0xeb0502bf // cmp x21, x5 + WORD $0x54000462 // b.hs LBB0_467 $140(%rip) + WORD $0x14000222 // b LBB0_592 $2184(%rip) +LBB0_454: + WORD $0x35004496 // cbnz w22, LBB0_593 $2192(%rip) WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_446: - WORD $0xb5003346 // cbnz x6, LBB0_540 $1640(%rip) - WORD $0xb4003516 // cbz x22, LBB0_545 $1696(%rip) -LBB0_448: - WORD $0xcb1e03ee // neg x14, lr -LBB0_449: + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_456: + WORD $0xb5003426 // cbnz x6, LBB0_553 $1668(%rip) + WORD $0xb40035f7 // cbz x23, LBB0_558 $1724(%rip) +LBB0_458: + WORD $0xcb1403ee // neg x14, x20 +LBB0_459: WORD $0xd2800005 // mov x5, #0 -LBB0_450: +LBB0_460: WORD $0x38656a66 // ldrb w6, [x19, x5] WORD $0x710088df // cmp w6, #34 - WORD $0x540002e0 // b.eq LBB0_456 $92(%rip) + WORD $0x540002e0 // b.eq LBB0_466 $92(%rip) WORD $0x710170df // cmp w6, #92 - WORD $0x540000e0 // b.eq LBB0_454 $28(%rip) + WORD $0x540000e0 // b.eq LBB0_464 $28(%rip) WORD $0x71007cdf // cmp w6, #31 - WORD $0x54004289 // b.ls LBB0_581 $2128(%rip) + WORD $0x54004369 // b.ls LBB0_594 $2156(%rip) WORD $0x910004a5 // add x5, x5, #1 - WORD $0xeb0502df // cmp x22, x5 - WORD $0x54fffee1 // b.ne LBB0_450 $-36(%rip) - WORD $0x1400019b // b LBB0_545 $1644(%rip) -LBB0_454: - WORD $0xd10006cf // sub x15, x22, #1 + WORD $0xeb0502ff // cmp x23, x5 + WORD $0x54fffee1 // b.ne LBB0_460 $-36(%rip) + WORD $0x140001a2 // b LBB0_558 $1672(%rip) +LBB0_464: + WORD $0xd10006ef // sub x15, x23, #1 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x54003300 // b.eq LBB0_545 $1632(%rip) + WORD $0x540033e0 // b.eq LBB0_558 $1660(%rip) WORD $0x8b05026f // add x15, x19, x5 WORD $0x8b0e01f1 // add x17, x15, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a800220 // csel x0, x17, x0, eq WORD $0x910009f3 // add x19, x15, #2 - WORD $0xd1000acf // sub x15, x22, #2 - WORD $0xcb0502d1 // sub x17, x22, x5 - WORD $0xd1000a36 // sub x22, x17, #2 + WORD $0xd1000aef // sub x15, x23, #2 + WORD $0xcb0502f1 // sub x17, x23, x5 + WORD $0xd1000a37 // sub x23, x17, #2 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x54fffd01 // b.ne LBB0_449 $-96(%rip) - WORD $0x1400018d // b LBB0_545 $1588(%rip) -LBB0_456: - WORD $0xcb1e026e // sub x14, x19, lr -LBB0_457: + WORD $0x54fffd01 // b.ne LBB0_459 $-96(%rip) + WORD $0x14000194 // b LBB0_558 $1616(%rip) +LBB0_466: + WORD $0xcb14026e // sub x14, x19, x20 +LBB0_467: WORD $0x8b0501ce // add x14, x14, x5 WORD $0x910005d3 // add x19, x14, #1 - WORD $0x1400015a // b LBB0_534 $1384(%rip) -LBB0_458: + WORD $0x14000161 // b LBB0_547 $1412(%rip) +LBB0_468: WORD $0x92800000 // mov x0, #-1 WORD $0xaa0603e5 // mov x5, x6 - WORD $0xaa0e03f5 // mov x21, x14 + WORD $0xaa0e03f6 // mov x22, x14 WORD $0x92800013 // mov x19, #-1 - WORD $0x92800016 // mov x22, #-1 - WORD $0x17fff7b5 // b LBB0_85 $-8492(%rip) -LBB0_459: + WORD $0x92800017 // mov x23, #-1 + WORD $0x17fff785 // b LBB0_85 $-8684(%rip) +LBB0_469: WORD $0xaa2503ee // mvn x14, x5 - WORD $0xcb3441ce // sub x14, x14, w20, uxtw + WORD $0xcb3541ce // sub x14, x14, w21, uxtw WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x17fffe11 // b LBB0_353 $-1980(%rip) -LBB0_460: - WORD $0x9280001a // mov x26, #-1 - WORD $0xaa0003f5 // mov x21, x0 - WORD $0xaa1903ee // mov x14, x25 - WORD $0x92800016 // mov x22, #-1 + WORD $0x17fffe11 // b LBB0_363 $-1980(%rip) +LBB0_470: + WORD $0x9280001b // mov x27, #-1 + WORD $0xaa0003f6 // mov x22, x0 + WORD $0xaa1a03ee // mov x14, x26 + WORD $0x92800017 // mov x23, #-1 WORD $0x92800006 // mov x6, #-1 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x17fffdc5 // b LBB0_326 $-2284(%rip) -LBB0_461: + WORD $0x17fffdc5 // b LBB0_336 $-2284(%rip) +LBB0_471: WORD $0xd100040f // sub x15, x0, #1 WORD $0xeb0e01ff // cmp x15, x14 - WORD $0x54003b00 // b.eq LBB0_577 $1888(%rip) + WORD $0x54003be0 // b.eq LBB0_590 $1916(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910009e5 // add x5, x15, #2 WORD $0xcb0e000e // sub x14, x0, x14 WORD $0xd10009ce // sub x14, x14, #2 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 WORD $0xf10005df // cmp x14, #1 - WORD $0x5400010a // b.ge LBB0_464 $32(%rip) - WORD $0x140001ce // b LBB0_577 $1848(%rip) -LBB0_463: + WORD $0x5400010a // b.ge LBB0_474 $32(%rip) + WORD $0x140001d5 // b LBB0_590 $1876(%rip) +LBB0_473: WORD $0x92800026 // mov x6, #-2 WORD $0x52800040 // mov w0, #2 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x5400392d // b.le LBB0_578 $1828(%rip) -LBB0_464: + WORD $0x54003a0d // b.le LBB0_591 $1856(%rip) +LBB0_474: WORD $0x394000a0 // ldrb w0, [x5] WORD $0x7101701f // cmp w0, #92 - WORD $0x54ffff00 // b.eq LBB0_463 $-32(%rip) + WORD $0x54ffff00 // b.eq LBB0_473 $-32(%rip) WORD $0x7100881f // cmp w0, #34 - WORD $0x54000100 // b.eq LBB0_467 $32(%rip) + WORD $0x54000100 // b.eq LBB0_477 $32(%rip) WORD $0x92800006 // mov x6, #-1 WORD $0x52800020 // mov w0, #1 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x54fffecc // b.gt LBB0_464 $-40(%rip) - WORD $0x140001bd // b LBB0_578 $1780(%rip) -LBB0_467: - WORD $0xcb1e00ae // sub x14, x5, lr + WORD $0x54fffecc // b.gt LBB0_474 $-40(%rip) + WORD $0x140001c4 // b LBB0_591 $1808(%rip) +LBB0_477: + WORD $0xcb1400ae // sub x14, x5, x20 WORD $0x910005d3 // add x19, x14, #1 - WORD $0x17fffc7d // b LBB0_283 $-3596(%rip) -LBB0_468: +LBB0_478: + WORD $0xf9000033 // str x19, [x1] +LBB0_479: + WORD $0xaa0803e0 // mov x0, x8 + WORD $0xeb07011f // cmp x8, x7 + WORD $0x540037c2 // b.hs LBB0_591 $1784(%rip) +LBB0_480: + WORD $0xf9400057 // ldr x23, [x2] + WORD $0xaa0b03e0 // mov x0, x11 + WORD $0xb5feb897 // cbnz x23, LBB0_1 $-10480(%rip) + WORD $0x140001ba // b LBB0_591 $1768(%rip) +LBB0_481: WORD $0xd100040f // sub x15, x0, #1 WORD $0xeb0e01ff // cmp x15, x14 - WORD $0x540036c0 // b.eq LBB0_577 $1752(%rip) + WORD $0x540036c0 // b.eq LBB0_590 $1752(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910009e5 // add x5, x15, #2 WORD $0xcb0e000e // sub x14, x0, x14 WORD $0xd10009ce // sub x14, x14, #2 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 WORD $0xf10005df // cmp x14, #1 - WORD $0x5400010a // b.ge LBB0_471 $32(%rip) - WORD $0x140001ac // b LBB0_577 $1712(%rip) -LBB0_470: + WORD $0x5400010a // b.ge LBB0_484 $32(%rip) + WORD $0x140001ac // b LBB0_590 $1712(%rip) +LBB0_483: WORD $0x92800026 // mov x6, #-2 WORD $0x52800040 // mov w0, #2 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x540034ed // b.le LBB0_578 $1692(%rip) -LBB0_471: + WORD $0x540034ed // b.le LBB0_591 $1692(%rip) +LBB0_484: WORD $0x394000a0 // ldrb w0, [x5] WORD $0x7101701f // cmp w0, #92 - WORD $0x54ffff00 // b.eq LBB0_470 $-32(%rip) + WORD $0x54ffff00 // b.eq LBB0_483 $-32(%rip) WORD $0x7100881f // cmp w0, #34 - WORD $0x54000100 // b.eq LBB0_474 $32(%rip) + WORD $0x54000100 // b.eq LBB0_487 $32(%rip) WORD $0x92800006 // mov x6, #-1 WORD $0x52800020 // mov w0, #1 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x54fffecc // b.gt LBB0_471 $-40(%rip) - WORD $0x1400019b // b LBB0_578 $1644(%rip) -LBB0_474: - WORD $0xcb1e00ae // sub x14, x5, lr + WORD $0x54fffecc // b.gt LBB0_484 $-40(%rip) + WORD $0x1400019b // b LBB0_591 $1644(%rip) +LBB0_487: + WORD $0xcb1400ae // sub x14, x5, x20 WORD $0x910005d3 // add x19, x14, #1 WORD $0xf9000033 // str x19, [x1] WORD $0xaa0803e0 // mov x0, x8 WORD $0xeb07011f // cmp x8, x7 - WORD $0x54ff3303 // b.lo LBB0_195 $-6560(%rip) - WORD $0x14000194 // b LBB0_578 $1616(%rip) -LBB0_475: - WORD $0xdac0028f // rbit x15, x20 + WORD $0x54ff2f23 // b.lo LBB0_200 $-6684(%rip) + WORD $0x14000194 // b LBB0_591 $1616(%rip) +LBB0_488: + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0275 // sub x21, x19, lr - WORD $0x8b0f02af // add x15, x21, x15 + WORD $0xcb140276 // sub x22, x19, x20 + WORD $0x8b0f02cf // add x15, x22, x15 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_476: - WORD $0x0a26028f // bic w15, w20, w6 - WORD $0x531f79f5 // lsl w21, w15, #1 +LBB0_489: + WORD $0x0a2602af // bic w15, w21, w6 + WORD $0x531f79f6 // lsl w22, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a350294 // bic w20, w20, w21 - WORD $0x1201f294 // and w20, w20, #0xaaaaaaaa - WORD $0x2b0f028f // adds w15, w20, w15 + WORD $0x0a3602b5 // bic w21, w21, w22 + WORD $0x1201f2b5 // and w21, w21, #0xaaaaaaaa + WORD $0x2b0f02af // adds w15, w21, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 WORD $0x0a0601ef // and w15, w15, w6 WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb5ffc025 // cbnz x5, LBB0_371 $-2044(%rip) -LBB0_477: + WORD $0xb5ffbf45 // cbnz x5, LBB0_381 $-2072(%rip) +LBB0_490: WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_478: - WORD $0xb5001066 // cbnz x6, LBB0_507 $524(%rip) - WORD $0xb40003b6 // cbz x22, LBB0_487 $116(%rip) -LBB0_480: - WORD $0xaa3e03ee // mvn x14, lr -LBB0_481: + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_491: + WORD $0xb5001066 // cbnz x6, LBB0_520 $524(%rip) + WORD $0xb40003b7 // cbz x23, LBB0_500 $116(%rip) +LBB0_493: + WORD $0xaa3403ee // mvn x14, x20 +LBB0_494: WORD $0xaa1303e6 // mov x6, x19 WORD $0x384014c5 // ldrb w5, [x6], #1 WORD $0x710088bf // cmp w5, #34 - WORD $0x54000320 // b.eq LBB0_488 $100(%rip) - WORD $0xd10006d4 // sub x20, x22, #1 + WORD $0x54000320 // b.eq LBB0_501 $100(%rip) + WORD $0xd10006f5 // sub x21, x23, #1 WORD $0x710170bf // cmp w5, #92 - WORD $0x54000100 // b.eq LBB0_484 $32(%rip) + WORD $0x54000100 // b.eq LBB0_497 $32(%rip) WORD $0xaa0603f3 // mov x19, x6 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0x5280007a // mov w26, #3 + WORD $0xaa1503f7 // mov x23, x21 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb5fffe94 // cbnz x20, LBB0_481 $-48(%rip) - WORD $0x1400000c // b LBB0_486 $48(%rip) -LBB0_484: - WORD $0xb40020d4 // cbz x20, LBB0_545 $1048(%rip) + WORD $0xb5fffe95 // cbnz x21, LBB0_494 $-48(%rip) + WORD $0x1400000c // b LBB0_499 $48(%rip) +LBB0_497: + WORD $0xb40020d5 // cbz x21, LBB0_558 $1048(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001e0 // csel x0, x15, x0, eq WORD $0x91000a73 // add x19, x19, #2 - WORD $0xd1000ad4 // sub x20, x22, #2 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0x5280007a // mov w26, #3 + WORD $0xd1000af5 // sub x21, x23, #2 + WORD $0xaa1503f7 // mov x23, x21 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb5fffd14 // cbnz x20, LBB0_481 $-96(%rip) -LBB0_486: + WORD $0xb5fffd15 // cbnz x21, LBB0_494 $-96(%rip) +LBB0_499: WORD $0x710088bf // cmp w5, #34 - WORD $0x54001f41 // b.ne LBB0_545 $1000(%rip) -LBB0_487: + WORD $0x54001f41 // b.ne LBB0_558 $1000(%rip) +LBB0_500: WORD $0xaa1303e6 // mov x6, x19 -LBB0_488: - WORD $0xcb1e00d3 // sub x19, x6, lr - WORD $0xb6ff83f3 // tbz x19, #63, LBB0_283 $-3972(%rip) - WORD $0x140000f4 // b LBB0_544 $976(%rip) -LBB0_489: - WORD $0xdac0028f // rbit x15, x20 +LBB0_501: + WORD $0xcb1400d3 // sub x19, x6, x20 + WORD $0xb6fff373 // tbz x19, #63, LBB0_478 $-404(%rip) + WORD $0x140000f4 // b LBB0_557 $976(%rip) +LBB0_502: + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0275 // sub x21, x19, lr - WORD $0x8b0f02af // add x15, x21, x15 + WORD $0xcb140276 // sub x22, x19, x20 + WORD $0x8b0f02cf // add x15, x22, x15 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_490: - WORD $0x0a26028f // bic w15, w20, w6 - WORD $0x531f79f5 // lsl w21, w15, #1 +LBB0_503: + WORD $0x0a2602af // bic w15, w21, w6 + WORD $0x531f79f6 // lsl w22, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a350294 // bic w20, w20, w21 - WORD $0x1201f294 // and w20, w20, #0xaaaaaaaa - WORD $0x2b0f028f // adds w15, w20, w15 + WORD $0x0a3602b5 // bic w21, w21, w22 + WORD $0x1201f2b5 // and w21, w21, #0xaaaaaaaa + WORD $0x2b0f02af // adds w15, w21, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 WORD $0x0a0601ef // and w15, w15, w6 WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x17fffded // b LBB0_376 $-2124(%rip) -LBB0_491: - WORD $0xdac0028f // rbit x15, x20 + WORD $0x17fffde6 // b LBB0_386 $-2152(%rip) +LBB0_504: + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0275 // sub x21, x19, lr - WORD $0x8b0f02af // add x15, x21, x15 + WORD $0xcb140276 // sub x22, x19, x20 + WORD $0x8b0f02cf // add x15, x22, x15 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_492: - WORD $0x0a26028f // bic w15, w20, w6 - WORD $0x531f79f5 // lsl w21, w15, #1 +LBB0_505: + WORD $0x0a2602af // bic w15, w21, w6 + WORD $0x531f79f6 // lsl w22, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a350294 // bic w20, w20, w21 - WORD $0x1201f294 // and w20, w20, #0xaaaaaaaa - WORD $0x2b0f028f // adds w15, w20, w15 + WORD $0x0a3602b5 // bic w21, w21, w22 + WORD $0x1201f2b5 // and w21, w21, #0xaaaaaaaa + WORD $0x2b0f02af // adds w15, w21, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 WORD $0x0a0601ef // and w15, w15, w6 WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb5ffc705 // cbnz x5, LBB0_400 $-1824(%rip) -LBB0_493: + WORD $0xb5ffc625 // cbnz x5, LBB0_410 $-1852(%rip) +LBB0_506: WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_494: - WORD $0xb50008e6 // cbnz x6, LBB0_511 $284(%rip) - WORD $0xb40009d6 // cbz x22, LBB0_513 $312(%rip) -LBB0_496: - WORD $0xaa3e03ee // mvn x14, lr -LBB0_497: + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_507: + WORD $0xb50008e6 // cbnz x6, LBB0_524 $284(%rip) + WORD $0xb40009d7 // cbz x23, LBB0_526 $312(%rip) +LBB0_509: + WORD $0xaa3403ee // mvn x14, x20 +LBB0_510: WORD $0xaa1303e6 // mov x6, x19 WORD $0x384014c5 // ldrb w5, [x6], #1 WORD $0x710088bf // cmp w5, #34 - WORD $0x540002c0 // b.eq LBB0_503 $88(%rip) - WORD $0xd10006d4 // sub x20, x22, #1 + WORD $0x540002c0 // b.eq LBB0_516 $88(%rip) + WORD $0xd10006f5 // sub x21, x23, #1 WORD $0x710170bf // cmp w5, #92 - WORD $0x540000a0 // b.eq LBB0_500 $20(%rip) + WORD $0x540000a0 // b.eq LBB0_513 $20(%rip) WORD $0xaa0603f3 // mov x19, x6 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0xb5fffef4 // cbnz x20, LBB0_497 $-36(%rip) - WORD $0x14000009 // b LBB0_502 $36(%rip) -LBB0_500: - WORD $0xb4001774 // cbz x20, LBB0_545 $748(%rip) + WORD $0xaa1503f7 // mov x23, x21 + WORD $0xb5fffef5 // cbnz x21, LBB0_510 $-36(%rip) + WORD $0x14000009 // b LBB0_515 $36(%rip) +LBB0_513: + WORD $0xb4001775 // cbz x21, LBB0_558 $748(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001e0 // csel x0, x15, x0, eq WORD $0x91000a73 // add x19, x19, #2 - WORD $0xd1000ad4 // sub x20, x22, #2 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0xb5fffdd4 // cbnz x20, LBB0_497 $-72(%rip) -LBB0_502: + WORD $0xd1000af5 // sub x21, x23, #2 + WORD $0xaa1503f7 // mov x23, x21 + WORD $0xb5fffdd5 // cbnz x21, LBB0_510 $-72(%rip) +LBB0_515: WORD $0x710088bf // cmp w5, #34 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x54000700 // b.eq LBB0_514 $224(%rip) - WORD $0x140000ae // b LBB0_545 $696(%rip) -LBB0_503: - WORD $0x5280007a // mov w26, #3 + WORD $0x54000700 // b.eq LBB0_527 $224(%rip) + WORD $0x140000ae // b LBB0_558 $696(%rip) +LBB0_516: + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x14000034 // b LBB0_515 $208(%rip) -LBB0_504: + WORD $0x14000034 // b LBB0_528 $208(%rip) +LBB0_517: WORD $0xb100041f // cmn x0, #1 - WORD $0x540000a1 // b.ne LBB0_506 $20(%rip) - WORD $0xdac0028f // rbit x15, x20 + WORD $0x540000a1 // b.ne LBB0_519 $20(%rip) + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0260 // sub x0, x19, lr + WORD $0xcb140260 // sub x0, x19, x20 WORD $0x8b0f0000 // add x0, x0, x15 -LBB0_506: - WORD $0x0a26028f // bic w15, w20, w6 - WORD $0x531f79f5 // lsl w21, w15, #1 +LBB0_519: + WORD $0x0a2602af // bic w15, w21, w6 + WORD $0x531f79f6 // lsl w22, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a350294 // bic w20, w20, w21 - WORD $0x1201f294 // and w20, w20, #0xaaaaaaaa - WORD $0x2b0f028f // adds w15, w20, w15 + WORD $0x0a3602b5 // bic w21, w21, w22 + WORD $0x1201f2b5 // and w21, w21, #0xaaaaaaaa + WORD $0x2b0f02af // adds w15, w21, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 WORD $0x0a0601ef // and w15, w15, w6 WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x17fffe26 // b LBB0_405 $-1896(%rip) -LBB0_507: - WORD $0xb4001296 // cbz x22, LBB0_545 $592(%rip) - WORD $0xaa3e03ee // mvn x14, lr + WORD $0x17fffe1f // b LBB0_415 $-1924(%rip) +LBB0_520: + WORD $0xb4001297 // cbz x23, LBB0_558 $592(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb5ffef16 // cbnz x22, LBB0_480 $-544(%rip) - WORD $0x17ffff93 // b LBB0_487 $-436(%rip) -LBB0_509: - WORD $0xb4001176 // cbz x22, LBB0_545 $556(%rip) - WORD $0xaa3e03ee // mvn x14, lr + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0xb5ffef17 // cbnz x23, LBB0_493 $-544(%rip) + WORD $0x17ffff93 // b LBB0_500 $-436(%rip) +LBB0_522: + WORD $0xb4001177 // cbz x23, LBB0_558 $556(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb5ffb536 // cbnz x22, LBB0_382 $-2396(%rip) - WORD $0x14000083 // b LBB0_545 $524(%rip) -LBB0_511: - WORD $0xb4001056 // cbz x22, LBB0_545 $520(%rip) - WORD $0xaa3e03ee // mvn x14, lr + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0xb5ffb457 // cbnz x23, LBB0_392 $-2424(%rip) + WORD $0x14000083 // b LBB0_558 $524(%rip) +LBB0_524: + WORD $0xb4001057 // cbz x23, LBB0_558 $520(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb5fff696 // cbnz x22, LBB0_496 $-304(%rip) -LBB0_513: - WORD $0x5280007a // mov w26, #3 + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0xb5fff697 // cbnz x23, LBB0_509 $-304(%rip) +LBB0_526: + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 -LBB0_514: +LBB0_527: WORD $0xaa1303e6 // mov x6, x19 -LBB0_515: - WORD $0xcb1e00d3 // sub x19, x6, lr - WORD $0xb6ff1b13 // tbz x19, #63, LBB0_194 $-7328(%rip) - WORD $0x14000072 // b LBB0_544 $456(%rip) -LBB0_516: - WORD $0xb4000e76 // cbz x22, LBB0_545 $460(%rip) - WORD $0xaa3e03ee // mvn x14, lr +LBB0_528: + WORD $0xcb1400d3 // sub x19, x6, x20 + WORD $0xb6ff1733 // tbz x19, #63, LBB0_199 $-7452(%rip) + WORD $0x14000072 // b LBB0_557 $456(%rip) +LBB0_529: + WORD $0xb4000e77 // cbz x23, LBB0_558 $460(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0x5280007a // mov w26, #3 + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb5ffc2d6 // cbnz x22, LBB0_411 $-1960(%rip) - WORD $0x14000068 // b LBB0_545 $416(%rip) -LBB0_518: + WORD $0xb5ffc1f7 // cbnz x23, LBB0_421 $-1988(%rip) + WORD $0x14000068 // b LBB0_558 $416(%rip) +LBB0_531: WORD $0xd100040f // sub x15, x0, #1 WORD $0xeb0e01ff // cmp x15, x14 - WORD $0x54001920 // b.eq LBB0_577 $804(%rip) + WORD $0x54001920 // b.eq LBB0_590 $804(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910009e5 // add x5, x15, #2 WORD $0xcb0e000e // sub x14, x0, x14 WORD $0xd10009ce // sub x14, x14, #2 WORD $0xf10005df // cmp x14, #1 - WORD $0x54ffc7ca // b.ge LBB0_424 $-1800(%rip) - WORD $0x140000c2 // b LBB0_577 $776(%rip) -LBB0_520: - WORD $0xdac0028f // rbit x15, x20 + WORD $0x54ffc6ea // b.ge LBB0_434 $-1828(%rip) + WORD $0x140000c2 // b LBB0_590 $776(%rip) +LBB0_533: + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0271 // sub x17, x19, lr + WORD $0xcb140271 // sub x17, x19, x20 WORD $0x8b0f022f // add x15, x17, x15 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_521: - WORD $0x0a26028f // bic w15, w20, w6 +LBB0_534: + WORD $0x0a2602af // bic w15, w21, w6 WORD $0x531f79f1 // lsl w17, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a310291 // bic w17, w20, w17 + WORD $0x0a3102b1 // bic w17, w21, w17 WORD $0x1201f231 // and w17, w17, #0xaaaaaaaa WORD $0x2b0f022f // adds w15, w17, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 @@ -3227,61 +3287,61 @@ LBB0_521: WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0xb5ffcd05 // cbnz x5, LBB0_437 $-1632(%rip) -LBB0_522: + WORD $0xb5ffcc25 // cbnz x5, LBB0_447 $-1660(%rip) +LBB0_535: WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_523: - WORD $0xb5000626 // cbnz x6, LBB0_538 $196(%rip) - WORD $0xb40002f6 // cbz x22, LBB0_532 $92(%rip) -LBB0_525: - WORD $0xaa3e03ee // mvn x14, lr -LBB0_526: + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_536: + WORD $0xb5000626 // cbnz x6, LBB0_551 $196(%rip) + WORD $0xb40002f7 // cbz x23, LBB0_545 $92(%rip) +LBB0_538: + WORD $0xaa3403ee // mvn x14, x20 +LBB0_539: WORD $0xaa1303e6 // mov x6, x19 WORD $0x384014c5 // ldrb w5, [x6], #1 WORD $0x710088bf // cmp w5, #34 - WORD $0x54000260 // b.eq LBB0_533 $76(%rip) - WORD $0xd10006d4 // sub x20, x22, #1 + WORD $0x54000260 // b.eq LBB0_546 $76(%rip) + WORD $0xd10006f5 // sub x21, x23, #1 WORD $0x710170bf // cmp w5, #92 - WORD $0x540000a0 // b.eq LBB0_529 $20(%rip) + WORD $0x540000a0 // b.eq LBB0_542 $20(%rip) WORD $0xaa0603f3 // mov x19, x6 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0xb5fffef4 // cbnz x20, LBB0_526 $-36(%rip) - WORD $0x14000009 // b LBB0_531 $36(%rip) -LBB0_529: - WORD $0xb4000774 // cbz x20, LBB0_545 $236(%rip) + WORD $0xaa1503f7 // mov x23, x21 + WORD $0xb5fffef5 // cbnz x21, LBB0_539 $-36(%rip) + WORD $0x14000009 // b LBB0_544 $36(%rip) +LBB0_542: + WORD $0xb4000775 // cbz x21, LBB0_558 $236(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001e0 // csel x0, x15, x0, eq WORD $0x91000a73 // add x19, x19, #2 - WORD $0xd1000ad4 // sub x20, x22, #2 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0xb5fffdd4 // cbnz x20, LBB0_526 $-72(%rip) -LBB0_531: + WORD $0xd1000af5 // sub x21, x23, #2 + WORD $0xaa1503f7 // mov x23, x21 + WORD $0xb5fffdd5 // cbnz x21, LBB0_539 $-72(%rip) +LBB0_544: WORD $0x710088bf // cmp w5, #34 - WORD $0x54000641 // b.ne LBB0_545 $200(%rip) -LBB0_532: + WORD $0x54000641 // b.ne LBB0_558 $200(%rip) +LBB0_545: WORD $0xaa1303e6 // mov x6, x19 -LBB0_533: - WORD $0xcb1e00d3 // sub x19, x6, lr -LBB0_534: - WORD $0x5280007a // mov w26, #3 +LBB0_546: + WORD $0xcb1400d3 // sub x19, x6, x20 +LBB0_547: + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb6ff6a93 // tbz x19, #63, LBB0_283 $-4784(%rip) - WORD $0x14000029 // b LBB0_544 $164(%rip) -LBB0_535: + WORD $0xb6ffda13 // tbz x19, #63, LBB0_478 $-1216(%rip) + WORD $0x14000029 // b LBB0_557 $164(%rip) +LBB0_548: WORD $0xb100041f // cmn x0, #1 - WORD $0x540000a1 // b.ne LBB0_537 $20(%rip) - WORD $0xdac0028f // rbit x15, x20 + WORD $0x540000a1 // b.ne LBB0_550 $20(%rip) + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0271 // sub x17, x19, lr + WORD $0xcb140271 // sub x17, x19, x20 WORD $0x8b0f0220 // add x0, x17, x15 -LBB0_537: - WORD $0x0a26028f // bic w15, w20, w6 +LBB0_550: + WORD $0x0a2602af // bic w15, w21, w6 WORD $0x531f79f1 // lsl w17, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a310291 // bic w17, w20, w17 + WORD $0x0a3102b1 // bic w17, w21, w17 WORD $0x1201f231 // and w17, w17, #0xaaaaaaaa WORD $0x2b0f022f // adds w15, w17, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 @@ -3289,160 +3349,160 @@ LBB0_537: WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0x17fffe59 // b LBB0_442 $-1692(%rip) -LBB0_538: - WORD $0xb4000316 // cbz x22, LBB0_545 $96(%rip) - WORD $0xaa3e03ee // mvn x14, lr + WORD $0x17fffe52 // b LBB0_452 $-1720(%rip) +LBB0_551: + WORD $0xb4000317 // cbz x23, LBB0_558 $96(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb5fff956 // cbnz x22, LBB0_525 $-216(%rip) - WORD $0x17ffffdf // b LBB0_532 $-132(%rip) -LBB0_540: - WORD $0xb40001f6 // cbz x22, LBB0_545 $60(%rip) - WORD $0xaa3e03ee // mvn x14, lr + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0xb5fff957 // cbnz x23, LBB0_538 $-216(%rip) + WORD $0x17ffffdf // b LBB0_545 $-132(%rip) +LBB0_553: + WORD $0xb40001f7 // cbz x23, LBB0_558 $60(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb5ffcc36 // cbnz x22, LBB0_448 $-1660(%rip) - WORD $0x14000007 // b LBB0_545 $28(%rip) -LBB0_542: + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0xb5ffcb57 // cbnz x23, LBB0_458 $-1688(%rip) + WORD $0x14000007 // b LBB0_558 $28(%rip) +LBB0_555: WORD $0x92800020 // mov x0, #-2 - WORD $0x1400006a // b LBB0_578 $424(%rip) -LBB0_543: + WORD $0x1400006a // b LBB0_591 $424(%rip) +LBB0_556: WORD $0x928000c0 // mov x0, #-7 - WORD $0x14000068 // b LBB0_578 $416(%rip) -LBB0_544: + WORD $0x14000068 // b LBB0_591 $416(%rip) +LBB0_557: WORD $0xb100067f // cmn x19, #1 - WORD $0x54000ac1 // b.ne LBB0_569 $344(%rip) -LBB0_545: - WORD $0xf9400760 // ldr x0, [x27, #8] + WORD $0x54000ac1 // b.ne LBB0_582 $344(%rip) +LBB0_558: + WORD $0xf94007c0 // ldr x0, [lr, #8] WORD $0x92800013 // mov x19, #-1 - WORD $0x14000053 // b LBB0_569 $332(%rip) -LBB0_546: + WORD $0x14000053 // b LBB0_582 $332(%rip) +LBB0_559: WORD $0x9280000e // mov x14, #-1 -LBB0_547: - WORD $0xaa2e03f6 // mvn x22, x14 -LBB0_548: - WORD $0x8b0802c8 // add x8, x22, x8 -LBB0_549: +LBB0_560: + WORD $0xaa2e03f7 // mvn x23, x14 +LBB0_561: + WORD $0x8b0802e8 // add x8, x23, x8 +LBB0_562: WORD $0xf9000028 // str x8, [x1] WORD $0x92800020 // mov x0, #-2 - WORD $0x1400005d // b LBB0_578 $372(%rip) -LBB0_550: + WORD $0x1400005d // b LBB0_591 $372(%rip) +LBB0_563: WORD $0xf900002e // str x14, [x1] - WORD $0x1400005a // b LBB0_577 $360(%rip) -LBB0_551: + WORD $0x1400005a // b LBB0_590 $360(%rip) +LBB0_564: WORD $0xb100041f // cmn x0, #1 - WORD $0x540008a0 // b.eq LBB0_568 $276(%rip) + WORD $0x540008a0 // b.eq LBB0_581 $276(%rip) WORD $0x92800033 // mov x19, #-2 - WORD $0x14000047 // b LBB0_569 $284(%rip) -LBB0_553: - WORD $0xaa0003f6 // mov x22, x0 - WORD $0x17fffff5 // b LBB0_548 $-44(%rip) -LBB0_554: + WORD $0x14000047 // b LBB0_582 $284(%rip) +LBB0_566: + WORD $0xaa0003f7 // mov x23, x0 + WORD $0x17fffff5 // b LBB0_561 $-44(%rip) +LBB0_567: WORD $0xf9000028 // str x8, [x1] WORD $0x394000c9 // ldrb w9, [x6] WORD $0x7101d13f // cmp w9, #116 - WORD $0x54000a21 // b.ne LBB0_578 $324(%rip) + WORD $0x54000a21 // b.ne LBB0_591 $324(%rip) WORD $0x91000509 // add x9, x8, #1 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101c93f // cmp w9, #114 - WORD $0x54000981 // b.ne LBB0_578 $304(%rip) + WORD $0x54000981 // b.ne LBB0_591 $304(%rip) WORD $0x91000909 // add x9, x8, #2 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101d53f // cmp w9, #117 - WORD $0x540008e1 // b.ne LBB0_578 $284(%rip) + WORD $0x540008e1 // b.ne LBB0_591 $284(%rip) WORD $0x91000d09 // add x9, x8, #3 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101953f // cmp w9, #101 - WORD $0x54000841 // b.ne LBB0_578 $264(%rip) - WORD $0x14000014 // b LBB0_562 $80(%rip) -LBB0_558: + WORD $0x54000841 // b.ne LBB0_591 $264(%rip) + WORD $0x14000014 // b LBB0_575 $80(%rip) +LBB0_571: WORD $0xf9000028 // str x8, [x1] WORD $0x394000c9 // ldrb w9, [x6] WORD $0x7101b93f // cmp w9, #110 - WORD $0x540007a1 // b.ne LBB0_578 $244(%rip) + WORD $0x540007a1 // b.ne LBB0_591 $244(%rip) WORD $0x91000509 // add x9, x8, #1 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101d53f // cmp w9, #117 - WORD $0x54000701 // b.ne LBB0_578 $224(%rip) + WORD $0x54000701 // b.ne LBB0_591 $224(%rip) WORD $0x91000909 // add x9, x8, #2 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101b13f // cmp w9, #108 - WORD $0x54000661 // b.ne LBB0_578 $204(%rip) + WORD $0x54000661 // b.ne LBB0_591 $204(%rip) WORD $0x91000d09 // add x9, x8, #3 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101b13f // cmp w9, #108 - WORD $0x540005c1 // b.ne LBB0_578 $184(%rip) -LBB0_562: + WORD $0x540005c1 // b.ne LBB0_591 $184(%rip) +LBB0_575: WORD $0x91001108 // add x8, x8, #4 WORD $0xf9000028 // str x8, [x1] - WORD $0x1400002b // b LBB0_578 $172(%rip) -LBB0_563: + WORD $0x1400002b // b LBB0_591 $172(%rip) +LBB0_576: WORD $0xf9000033 // str x19, [x1] - WORD $0x38736bc9 // ldrb w9, [lr, x19] + WORD $0x38736a89 // ldrb w9, [x20, x19] WORD $0x7101853f // cmp w9, #97 - WORD $0x540004e1 // b.ne LBB0_578 $156(%rip) + WORD $0x540004e1 // b.ne LBB0_591 $156(%rip) WORD $0x91000909 // add x9, x8, #2 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101b13f // cmp w9, #108 - WORD $0x54000441 // b.ne LBB0_578 $136(%rip) + WORD $0x54000441 // b.ne LBB0_591 $136(%rip) WORD $0x91000d09 // add x9, x8, #3 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101cd3f // cmp w9, #115 - WORD $0x540003a1 // b.ne LBB0_578 $116(%rip) + WORD $0x540003a1 // b.ne LBB0_591 $116(%rip) WORD $0x91001109 // add x9, x8, #4 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101953f // cmp w9, #101 - WORD $0x54000301 // b.ne LBB0_578 $96(%rip) + WORD $0x54000301 // b.ne LBB0_591 $96(%rip) WORD $0x91001508 // add x8, x8, #5 WORD $0xf9000028 // str x8, [x1] - WORD $0x14000015 // b LBB0_578 $84(%rip) -LBB0_568: + WORD $0x14000015 // b LBB0_591 $84(%rip) +LBB0_581: WORD $0xdac000a8 // rbit x8, x5 WORD $0xdac01108 // clz x8, x8 WORD $0x8b130100 // add x0, x8, x19 WORD $0x92800033 // mov x19, #-2 -LBB0_569: +LBB0_582: WORD $0xf9000020 // str x0, [x1] WORD $0xaa1303e0 // mov x0, x19 - WORD $0x1400000e // b LBB0_578 $56(%rip) -LBB0_570: + WORD $0x1400000e // b LBB0_591 $56(%rip) +LBB0_583: WORD $0x9280000e // mov x14, #-1 -LBB0_571: +LBB0_584: WORD $0xaa2e03e6 // mvn x6, x14 -LBB0_572: +LBB0_585: WORD $0x8b060268 // add x8, x19, x6 - WORD $0x17ffffab // b LBB0_549 $-340(%rip) -LBB0_573: - WORD $0xaa1a03e6 // mov x6, x26 - WORD $0x8b1a0268 // add x8, x19, x26 - WORD $0x17ffffa8 // b LBB0_549 $-352(%rip) -LBB0_574: + WORD $0x17ffffab // b LBB0_562 $-340(%rip) +LBB0_586: + WORD $0xaa1b03e6 // mov x6, x27 + WORD $0x8b1b0268 // add x8, x19, x27 + WORD $0x17ffffa8 // b LBB0_562 $-352(%rip) +LBB0_587: WORD $0x8b1300a0 // add x0, x5, x19 WORD $0x92800033 // mov x19, #-2 - WORD $0x17fffff4 // b LBB0_569 $-48(%rip) -LBB0_575: - WORD $0xf9400768 // ldr x8, [x27, #8] -LBB0_576: + WORD $0x17fffff4 // b LBB0_582 $-48(%rip) +LBB0_588: + WORD $0xf94007c8 // ldr x8, [lr, #8] +LBB0_589: WORD $0xf9000028 // str x8, [x1] -LBB0_577: +LBB0_590: WORD $0x92800000 // mov x0, #-1 -LBB0_578: +LBB0_591: WORD $0xa94dfbfd // ldp fp, lr, [sp, #216] WORD $0xa94ccff4 // ldp x20, x19, [sp, #200] WORD $0xa94bd7f6 // ldp x22, x21, [sp, #184] @@ -3452,20 +3512,20 @@ LBB0_578: WORD $0x6d47a3e9 // ldp d9, d8, [sp, #120] WORD $0x9103c3ff // add sp, sp, #240 WORD $0xd65f03c0 // ret -LBB0_579: - WORD $0x8b1401c0 // add x0, x14, x20 +LBB0_592: + WORD $0x8b1501c0 // add x0, x14, x21 WORD $0x92800033 // mov x19, #-2 - WORD $0x17ffffe5 // b LBB0_569 $-108(%rip) -LBB0_580: - WORD $0xcb1e0268 // sub x8, x19, lr - WORD $0x8b140100 // add x0, x8, x20 + WORD $0x17ffffe5 // b LBB0_582 $-108(%rip) +LBB0_593: + WORD $0xcb140268 // sub x8, x19, x20 + WORD $0x8b150100 // add x0, x8, x21 WORD $0x92800033 // mov x19, #-2 - WORD $0x17ffffe1 // b LBB0_569 $-124(%rip) -LBB0_581: - WORD $0xcb1e0268 // sub x8, x19, lr + WORD $0x17ffffe1 // b LBB0_582 $-124(%rip) +LBB0_594: + WORD $0xcb140268 // sub x8, x19, x20 WORD $0x8b050100 // add x0, x8, x5 WORD $0x92800033 // mov x19, #-2 - WORD $0x17ffffdd // b LBB0_569 $-140(%rip) + WORD $0x17ffffdd // b LBB0_582 $-140(%rip) // .p2align 2, 0x00 _MASK_USE_NUMBER: WORD $0x00000002 // .long 2 diff --git a/vendor/github.com/bytedance/sonic/internal/native/neon/skip_one_arm64.s b/vendor/github.com/bytedance/sonic/internal/native/neon/skip_one_arm64.s index a773aa3..f8cbc0d 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/neon/skip_one_arm64.s +++ b/vendor/github.com/bytedance/sonic/internal/native/neon/skip_one_arm64.s @@ -157,7 +157,7 @@ LBB0_15: LBB0_19: WORD $0x910013db // add x27, lr, #4 WORD $0xeb08037f // cmp x27, x8 - WORD $0x54011942 // b.hs LBB0_474 $9000(%rip) + WORD $0x54011bc2 // b.hs LBB0_474 $9080(%rip) LBB0_20: WORD $0x387b6931 // ldrb w17, [x9, x27] WORD $0x7100823f // cmp w17, #32 @@ -191,13 +191,13 @@ LBB0_23: WORD $0x71000d1f // cmp w8, #3 WORD $0x540019c1 // b.ne LBB0_59 $824(%rip) WORD $0x71008abf // cmp w21, #34 - WORD $0x54014e41 // b.ne LBB0_543 $10696(%rip) + WORD $0x54015201 // b.ne LBB0_546 $10816(%rip) WORD $0x52800088 // mov w8, #4 WORD $0xf8277948 // str x8, [x10, x7, lsl #3] WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xeb1e0114 // subs x20, x8, lr WORD $0x372830e3 // tbnz w3, #5, LBB0_110 $1564(%rip) - WORD $0x54014280 // b.eq LBB0_515 $10320(%rip) + WORD $0x54014640 // b.eq LBB0_518 $10440(%rip) WORD $0xf101029f // cmp x20, #64 WORD $0x54008cc3 // b.lo LBB0_249 $4504(%rip) WORD $0xd2800005 // mov x5, #0 @@ -289,7 +289,7 @@ LBB0_39: WORD $0x8b1e0231 // add x17, x17, lr WORD $0x9100063e // add lr, x17, #1 WORD $0xb6f87f9e // tbz lr, #63, LBB0_243 $4080(%rip) - WORD $0x140009bb // b LBB0_514 $9964(%rip) + WORD $0x140009d9 // b LBB0_517 $10084(%rip) LBB0_40: WORD $0x7100111f // cmp w8, #4 WORD $0x54000d20 // b.eq LBB0_57 $420(%rip) @@ -304,7 +304,7 @@ LBB0_40: WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xeb1e0114 // subs x20, x8, lr WORD $0x37283743 // tbnz w3, #5, LBB0_137 $1768(%rip) - WORD $0x540135e0 // b.eq LBB0_515 $9916(%rip) + WORD $0x540139a0 // b.eq LBB0_518 $10036(%rip) WORD $0xf101029f // cmp x20, #64 WORD $0x54009143 // b.lo LBB0_280 $4648(%rip) WORD $0xd2800005 // mov x5, #0 @@ -396,16 +396,16 @@ LBB0_54: WORD $0x8b1e0231 // add x17, x17, lr WORD $0x9100063e // add lr, x17, #1 WORD $0xb6f83b1e // tbz lr, #63, LBB0_149 $1888(%rip) - WORD $0x14000956 // b LBB0_514 $9560(%rip) + WORD $0x14000974 // b LBB0_517 $9680(%rip) LBB0_55: WORD $0x7100b2bf // cmp w21, #44 WORD $0x54001760 // b.eq LBB0_106 $748(%rip) WORD $0x710176bf // cmp w21, #93 WORD $0x54001400 // b.eq LBB0_98 $640(%rip) - WORD $0x140009ab // b LBB0_543 $9900(%rip) + WORD $0x140009c9 // b LBB0_546 $10020(%rip) LBB0_57: WORD $0x7100eabf // cmp w21, #58 - WORD $0x54013521 // b.ne LBB0_543 $9892(%rip) + WORD $0x540138e1 // b.ne LBB0_546 $10012(%rip) WORD $0xf827795f // str xzr, [x10, x7, lsl #3] WORD $0x14000392 // b LBB0_244 $3656(%rip) LBB0_59: @@ -419,7 +419,7 @@ LBB0_60: WORD $0x54003a82 // b.hs LBB0_152 $1872(%rip) WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xeb1b0116 // subs x22, x8, x27 - WORD $0x54012940 // b.eq LBB0_517 $9512(%rip) + WORD $0x54012d00 // b.eq LBB0_520 $9632(%rip) WORD $0x394000a8 // ldrb w8, [x5] WORD $0x7100c11f // cmp w8, #48 WORD $0x54000181 // b.ne LBB0_66 $48(%rip) @@ -574,7 +574,7 @@ LBB0_95: LBB0_96: WORD $0x7101f6bf // cmp w21, #125 WORD $0x54000080 // b.eq LBB0_98 $16(%rip) - WORD $0x1400090f // b LBB0_543 $9276(%rip) + WORD $0x1400092d // b LBB0_546 $9396(%rip) LBB0_97: WORD $0x710176bf // cmp w21, #93 WORD $0x540000c1 // b.ne LBB0_99 $24(%rip) @@ -583,7 +583,7 @@ LBB0_98: WORD $0xaa0703f4 // mov x20, x7 WORD $0xaa0e03e8 // mov x8, x14 WORD $0xb5ffc907 // cbnz x7, LBB0_2 $-1760(%rip) - WORD $0x1400061c // b LBB0_438 $6256(%rip) + WORD $0x140008c1 // b LBB0_515 $8964(%rip) LBB0_99: WORD $0xf827794f // str x15, [x10, x7, lsl #3] WORD $0x92800028 // mov x8, #-2 @@ -597,10 +597,10 @@ LBB0_100: WORD $0x7101d2bf // cmp w21, #116 WORD $0x54002a00 // b.eq LBB0_163 $1344(%rip) WORD $0x7101eebf // cmp w21, #123 - WORD $0x5400c201 // b.ne LBB0_438 $6208(%rip) + WORD $0x540116a1 // b.ne LBB0_515 $8916(%rip) WORD $0xf9400048 // ldr x8, [x2] WORD $0xf13ffd1f // cmp x8, #4095 - WORD $0x540113ac // b.gt LBB0_513 $8820(%rip) + WORD $0x5401176c // b.gt LBB0_516 $8940(%rip) WORD $0x91000511 // add x17, x8, #1 WORD $0xf9000051 // str x17, [x2] WORD $0x528000d1 // mov w17, #6 @@ -608,21 +608,21 @@ LBB0_100: WORD $0x140002df // b LBB0_244 $2940(%rip) LBB0_106: WORD $0xf13ffe9f // cmp x20, #4095 - WORD $0x540112cc // b.gt LBB0_513 $8792(%rip) + WORD $0x5401168c // b.gt LBB0_516 $8912(%rip) WORD $0x91000688 // add x8, x20, #1 WORD $0xf9000048 // str x8, [x2] WORD $0xf834795f // str xzr, [x10, x20, lsl #3] WORD $0x140002d9 // b LBB0_244 $2916(%rip) LBB0_108: WORD $0xf13ffe9f // cmp x20, #4095 - WORD $0x5401120c // b.gt LBB0_513 $8768(%rip) + WORD $0x540115cc // b.gt LBB0_516 $8888(%rip) WORD $0x91000688 // add x8, x20, #1 WORD $0xf9000048 // str x8, [x2] WORD $0x52800068 // mov w8, #3 WORD $0xf8347948 // str x8, [x10, x20, lsl #3] WORD $0x140002d2 // b LBB0_244 $2888(%rip) LBB0_110: - WORD $0x540111c0 // b.eq LBB0_515 $8760(%rip) + WORD $0x54011580 // b.eq LBB0_518 $8880(%rip) WORD $0xf101029f // cmp x20, #64 WORD $0x54006063 // b.lo LBB0_255 $3084(%rip) WORD $0xd2800005 // mov x5, #0 @@ -710,7 +710,7 @@ LBB0_115: WORD $0xaa0702a7 // orr x7, x21, x7 WORD $0xaa0400e7 // orr x7, x7, x4 WORD $0xb50002f1 // cbnz x17, LBB0_120 $92(%rip) - WORD $0xb5010867 // cbnz x7, LBB0_521 $8460(%rip) + WORD $0xb5010c27 // cbnz x7, LBB0_524 $8580(%rip) WORD $0xd1010294 // sub x20, x20, #64 WORD $0x910103de // add lr, lr, #64 WORD $0xf100fe9f // cmp x20, #63 @@ -740,20 +740,20 @@ LBB0_120: WORD $0xdac000e4 // rbit x4, x7 WORD $0xdac01085 // clz x5, x4 WORD $0xeb1100bf // cmp x5, x17 - WORD $0x54010fc3 // b.lo LBB0_546 $8696(%rip) + WORD $0x54011383 // b.lo LBB0_549 $8816(%rip) WORD $0x8b1e0231 // add x17, x17, lr WORD $0x9100063e // add lr, x17, #1 WORD $0xb6f84b1e // tbz lr, #63, LBB0_243 $2400(%rip) - WORD $0x14000817 // b LBB0_514 $8284(%rip) + WORD $0x14000835 // b LBB0_517 $8404(%rip) LBB0_122: WORD $0x8b3140b1 // add x17, x5, w17, uxtw WORD $0x8b1e0237 // add x23, x17, lr LBB0_123: WORD $0x92800016 // mov x22, #-1 - WORD $0xb4010368 // cbz x8, LBB0_518 $8300(%rip) + WORD $0xb4010728 // cbz x8, LBB0_521 $8420(%rip) LBB0_124: - WORD $0xb4010355 // cbz x21, LBB0_518 $8296(%rip) - WORD $0xb4010334 // cbz x20, LBB0_518 $8292(%rip) + WORD $0xb4010715 // cbz x21, LBB0_521 $8416(%rip) + WORD $0xb40106f4 // cbz x20, LBB0_521 $8412(%rip) WORD $0xcb0502f1 // sub x17, x23, x5 WORD $0xd1000625 // sub x5, x17, #1 WORD $0xeb05011f // cmp x8, x5 @@ -765,12 +765,12 @@ LBB0_124: WORD $0xf10006a4 // subs x4, x21, #1 WORD $0x5400006b // b.lt LBB0_131 $12(%rip) WORD $0xeb04029f // cmp x20, x4 - WORD $0x540101c1 // b.ne LBB0_519 $8248(%rip) + WORD $0x54010581 // b.ne LBB0_522 $8368(%rip) LBB0_131: WORD $0xaa140105 // orr x5, x8, x20 WORD $0xb7f80065 // tbnz x5, #63, LBB0_133 $12(%rip) WORD $0xeb14011f // cmp x8, x20 - WORD $0x540102ea // b.ge LBB0_525 $8284(%rip) + WORD $0x540106aa // b.ge LBB0_528 $8404(%rip) LBB0_133: WORD $0xd37ffca4 // lsr x4, x5, #63 WORD $0x52000084 // eor w4, w4, #0x1 @@ -783,11 +783,11 @@ LBB0_133: LBB0_134: WORD $0xcb1103f6 // neg x22, x17 LBB0_135: - WORD $0xb7f8fff6 // tbnz x22, #63, LBB0_518 $8188(%rip) + WORD $0xb7f903b6 // tbnz x22, #63, LBB0_521 $8308(%rip) WORD $0x8b16037e // add lr, x27, x22 WORD $0x14000235 // b LBB0_243 $2260(%rip) LBB0_137: - WORD $0x5400fec0 // b.eq LBB0_515 $8152(%rip) + WORD $0x54010280 // b.eq LBB0_518 $8272(%rip) WORD $0xf101029f // cmp x20, #64 WORD $0x54005e83 // b.lo LBB0_286 $3024(%rip) WORD $0xd2800005 // mov x5, #0 @@ -875,7 +875,7 @@ LBB0_142: WORD $0xaa0702a7 // orr x7, x21, x7 WORD $0xaa0400e7 // orr x7, x7, x4 WORD $0xb50002f1 // cbnz x17, LBB0_147 $92(%rip) - WORD $0xb500f567 // cbnz x7, LBB0_521 $7852(%rip) + WORD $0xb500f927 // cbnz x7, LBB0_524 $7972(%rip) WORD $0xd1010294 // sub x20, x20, #64 WORD $0x910103de // add lr, lr, #64 WORD $0xf100fe9f // cmp x20, #63 @@ -905,19 +905,19 @@ LBB0_147: WORD $0xdac000e4 // rbit x4, x7 WORD $0xdac01085 // clz x5, x4 WORD $0xeb1100bf // cmp x5, x17 - WORD $0x5400fcc3 // b.lo LBB0_546 $8088(%rip) + WORD $0x54010083 // b.lo LBB0_549 $8208(%rip) WORD $0x8b1e0231 // add x17, x17, lr WORD $0x9100063e // add lr, x17, #1 - WORD $0xb7f8f01e // tbnz lr, #63, LBB0_514 $7680(%rip) + WORD $0xb7f8f3de // tbnz lr, #63, LBB0_517 $7800(%rip) LBB0_149: WORD $0xf900003e // str lr, [x1] WORD $0xaa1b03e8 // mov x8, x27 WORD $0xb27ff7f1 // mov x17, #9223372036854775806 WORD $0xeb11037f // cmp x27, x17 - WORD $0x54009d28 // b.hi LBB0_438 $5028(%rip) + WORD $0x5400f1c8 // b.hi LBB0_515 $7736(%rip) WORD $0xf9400048 // ldr x8, [x2] WORD $0xf13ffd1f // cmp x8, #4095 - WORD $0x5400eecc // b.gt LBB0_513 $7640(%rip) + WORD $0x5400f28c // b.gt LBB0_516 $7760(%rip) WORD $0x91000511 // add x17, x8, #1 WORD $0xf9000051 // str x17, [x2] WORD $0x52800091 // mov w17, #4 @@ -927,10 +927,10 @@ LBB0_152: WORD $0x71008abf // cmp w21, #34 WORD $0x54000740 // b.eq LBB0_170 $232(%rip) WORD $0x7100b6bf // cmp w21, #45 - WORD $0x54009ba1 // b.ne LBB0_438 $4980(%rip) + WORD $0x5400f041 // b.ne LBB0_515 $7688(%rip) WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xeb1e0111 // subs x17, x8, lr - WORD $0x5400f080 // b.eq LBB0_526 $7696(%rip) + WORD $0x5400f440 // b.eq LBB0_529 $7816(%rip) WORD $0x8b1e0128 // add x8, x9, lr WORD $0x39400104 // ldrb w4, [x8] WORD $0x7100c09f // cmp w4, #48 @@ -944,46 +944,46 @@ LBB0_158: WORD $0x71016ebf // cmp w21, #91 WORD $0x54000460 // b.eq LBB0_168 $140(%rip) WORD $0x71019abf // cmp w21, #102 - WORD $0x540099c1 // b.ne LBB0_438 $4920(%rip) + WORD $0x5400ee61 // b.ne LBB0_515 $7628(%rip) WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xd1001111 // sub x17, x8, #4 WORD $0xeb11037f // cmp x27, x17 - WORD $0x5400f842 // b.hs LBB0_548 $7944(%rip) + WORD $0x5400fc02 // b.hs LBB0_551 $8064(%rip) WORD $0xb87e6928 // ldr w8, [x9, lr] WORD $0x528d8c31 // mov w17, #27745 WORD $0x72acae71 // movk w17, #25971, lsl #16 WORD $0x6b11011f // cmp w8, w17 - WORD $0x5400ee61 // b.ne LBB0_529 $7628(%rip) + WORD $0x5400f221 // b.ne LBB0_532 $7748(%rip) WORD $0x9100177e // add lr, x27, #5 WORD $0x14000195 // b LBB0_243 $1620(%rip) LBB0_163: WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xd1000d11 // sub x17, x8, #3 WORD $0xeb11037f // cmp x27, x17 - WORD $0x5400f6e2 // b.hs LBB0_548 $7900(%rip) + WORD $0x5400faa2 // b.hs LBB0_551 $8020(%rip) WORD $0xb87b6928 // ldr w8, [x9, x27] WORD $0x528e4e91 // mov w17, #29300 WORD $0x72acaeb1 // movk w17, #25973, lsl #16 WORD $0x6b11011f // cmp w8, w17 WORD $0x54000160 // b.eq LBB0_167 $44(%rip) - WORD $0x1400077c // b LBB0_534 $7664(%rip) + WORD $0x1400079a // b LBB0_537 $7784(%rip) LBB0_165: WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xd1000d11 // sub x17, x8, #3 WORD $0xeb11037f // cmp x27, x17 - WORD $0x5400f5a2 // b.hs LBB0_548 $7860(%rip) + WORD $0x5400f962 // b.hs LBB0_551 $7980(%rip) WORD $0xb87b6928 // ldr w8, [x9, x27] WORD $0x528eadd1 // mov w17, #30062 WORD $0x72ad8d91 // movk w17, #27756, lsl #16 WORD $0x6b11011f // cmp w8, w17 - WORD $0x5400f0e1 // b.ne LBB0_538 $7708(%rip) + WORD $0x5400f4a1 // b.ne LBB0_541 $7828(%rip) LBB0_167: WORD $0x9100137e // add lr, x27, #4 WORD $0x14000180 // b LBB0_243 $1536(%rip) LBB0_168: WORD $0xf9400048 // ldr x8, [x2] WORD $0xf13ffd1f // cmp x8, #4095 - WORD $0x5400e76c // b.gt LBB0_513 $7404(%rip) + WORD $0x5400eb2c // b.gt LBB0_516 $7524(%rip) WORD $0x91000511 // add x17, x8, #1 WORD $0xf9000051 // str x17, [x2] WORD $0x528000b1 // mov w17, #5 @@ -993,7 +993,7 @@ LBB0_170: WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0xeb1e0114 // subs x20, x8, lr WORD $0x37280b43 // tbnz w3, #5, LBB0_182 $360(%rip) - WORD $0x5400e6c0 // b.eq LBB0_515 $7384(%rip) + WORD $0x5400ea80 // b.eq LBB0_518 $7504(%rip) WORD $0xf101029f // cmp x20, #64 WORD $0x54005363 // b.lo LBB0_311 $2668(%rip) WORD $0xd2800005 // mov x5, #0 @@ -1087,9 +1087,9 @@ LBB0_181: WORD $0xaa1803f7 // mov x23, x24 WORD $0x92800016 // mov x22, #-1 WORD $0xb5ffd968 // cbnz x8, LBB0_124 $-1236(%rip) - WORD $0x140006e4 // b LBB0_518 $7056(%rip) + WORD $0x14000702 // b LBB0_521 $7176(%rip) LBB0_182: - WORD $0x5400dba0 // b.eq LBB0_515 $7028(%rip) + WORD $0x5400df60 // b.eq LBB0_518 $7148(%rip) WORD $0xf101029f // cmp x20, #64 WORD $0x54004ca3 // b.lo LBB0_317 $2452(%rip) WORD $0xd2800005 // mov x5, #0 @@ -1177,7 +1177,7 @@ LBB0_187: WORD $0xaa0600e6 // orr x6, x7, x6 WORD $0xaa0400c7 // orr x7, x6, x4 WORD $0xb50002f1 // cbnz x17, LBB0_192 $92(%rip) - WORD $0xb500d247 // cbnz x7, LBB0_521 $6728(%rip) + WORD $0xb500d607 // cbnz x7, LBB0_524 $6848(%rip) WORD $0xd1010294 // sub x20, x20, #64 WORD $0x910103de // add lr, lr, #64 WORD $0xf100fe9f // cmp x20, #63 @@ -1207,12 +1207,12 @@ LBB0_192: WORD $0xdac000e4 // rbit x4, x7 WORD $0xdac01085 // clz x5, x4 WORD $0xeb1100bf // cmp x5, x17 - WORD $0x5400d9a3 // b.lo LBB0_546 $6964(%rip) + WORD $0x5400dd63 // b.lo LBB0_549 $7084(%rip) LBB0_193: WORD $0x8b1e0231 // add x17, x17, lr WORD $0x9100063e // add lr, x17, #1 WORD $0xb6f814fe // tbz lr, #63, LBB0_243 $668(%rip) - WORD $0x14000666 // b LBB0_514 $6552(%rip) + WORD $0x14000684 // b LBB0_517 $6672(%rip) LBB0_194: WORD $0x39400504 // ldrb w4, [x8, #1] WORD $0x5100b885 // sub w5, w4, #46 @@ -1363,10 +1363,10 @@ LBB0_228: WORD $0x8b170227 // add x7, x17, x23 LBB0_229: WORD $0x92800016 // mov x22, #-1 - WORD $0xb400bef5 // cbz x21, LBB0_527 $6108(%rip) + WORD $0xb400c2b5 // cbz x21, LBB0_530 $6228(%rip) LBB0_230: - WORD $0xb400bec5 // cbz x5, LBB0_527 $6104(%rip) - WORD $0xb400beb4 // cbz x20, LBB0_527 $6100(%rip) + WORD $0xb400c285 // cbz x5, LBB0_530 $6224(%rip) + WORD $0xb400c274 // cbz x20, LBB0_530 $6220(%rip) WORD $0xcb0800e8 // sub x8, x7, x8 WORD $0xd1000511 // sub x17, x8, #1 WORD $0xeb1102bf // cmp x21, x17 @@ -1378,12 +1378,12 @@ LBB0_230: WORD $0xf10004b1 // subs x17, x5, #1 WORD $0x5400006b // b.lt LBB0_237 $12(%rip) WORD $0xeb11029f // cmp x20, x17 - WORD $0x5400bd41 // b.ne LBB0_528 $6056(%rip) + WORD $0x5400c101 // b.ne LBB0_531 $6176(%rip) LBB0_237: WORD $0xaa1402b1 // orr x17, x21, x20 WORD $0xb7f80071 // tbnz x17, #63, LBB0_239 $12(%rip) WORD $0xeb1402bf // cmp x21, x20 - WORD $0x5400c58a // b.ge LBB0_545 $6320(%rip) + WORD $0x5400c94a // b.ge LBB0_548 $6440(%rip) LBB0_239: WORD $0xd37ffe31 // lsr x17, x17, #63 WORD $0x52000231 // eor w17, w17, #0x1 @@ -1396,7 +1396,7 @@ LBB0_239: LBB0_240: WORD $0xcb0803f6 // neg x22, x8 LBB0_241: - WORD $0xb7f8bb76 // tbnz x22, #63, LBB0_527 $5996(%rip) + WORD $0xb7f8bf36 // tbnz x22, #63, LBB0_530 $6116(%rip) LBB0_242: WORD $0x8b1e02de // add lr, x22, lr LBB0_243: @@ -1404,12 +1404,12 @@ LBB0_243: WORD $0xaa1b03e8 // mov x8, x27 WORD $0x92f00011 // mov x17, #9223372036854775807 WORD $0xeb11037f // cmp x27, x17 - WORD $0x54006542 // b.hs LBB0_438 $3240(%rip) + WORD $0x5400b9e2 // b.hs LBB0_515 $5948(%rip) LBB0_244: WORD $0xf9400054 // ldr x20, [x2] WORD $0xaa0e03e8 // mov x8, x14 WORD $0xb5ff6a54 // cbnz x20, LBB0_2 $-4792(%rip) - WORD $0x14000326 // b LBB0_438 $3224(%rip) + WORD $0x140005cb // b LBB0_515 $5932(%rip) LBB0_245: WORD $0x5ac00088 // rbit w8, w4 WORD $0x5ac01108 // clz w8, w8 @@ -1426,7 +1426,7 @@ LBB0_248: WORD $0xaa1103e7 // mov x7, x17 WORD $0x92800016 // mov x22, #-1 WORD $0xb5fff9f5 // cbnz x21, LBB0_230 $-196(%rip) - WORD $0x140005c4 // b LBB0_527 $5904(%rip) + WORD $0x140005e2 // b LBB0_530 $6024(%rip) LBB0_249: WORD $0xd2800005 // mov x5, #0 WORD $0x8b1e0135 // add x21, x9, lr @@ -1516,18 +1516,18 @@ LBB0_259: WORD $0xdac01087 // clz x7, x4 WORD $0xcb0902a5 // sub x5, x21, x9 WORD $0xeb07023f // cmp x17, x7 - WORD $0x5400b863 // b.lo LBB0_550 $5900(%rip) + WORD $0x5400bc23 // b.lo LBB0_553 $6020(%rip) WORD $0x8b0700b1 // add x17, x5, x7 WORD $0x9100063e // add lr, x17, #1 WORD $0xb6fff29e // tbz lr, #63, LBB0_243 $-432(%rip) - WORD $0x14000553 // b LBB0_514 $5452(%rip) + WORD $0x14000571 // b LBB0_517 $5572(%rip) LBB0_262: - WORD $0x3500b776 // cbnz w22, LBB0_549 $5868(%rip) + WORD $0x3500bb36 // cbnz w22, LBB0_552 $5988(%rip) WORD $0x910082b5 // add x21, x21, #32 WORD $0xaa0703f4 // mov x20, x7 LBB0_264: WORD $0xb5003a65 // cbnz x5, LBB0_372 $1868(%rip) - WORD $0xb400aa14 // cbz x20, LBB0_515 $5440(%rip) + WORD $0xb400add4 // cbz x20, LBB0_518 $5560(%rip) LBB0_266: WORD $0xd2800011 // mov x17, #0 LBB0_267: @@ -1537,15 +1537,15 @@ LBB0_267: WORD $0x710170bf // cmp w5, #92 WORD $0x540000e0 // b.eq LBB0_271 $28(%rip) WORD $0x71007cbf // cmp w5, #31 - WORD $0x5400b5e9 // b.ls LBB0_549 $5820(%rip) + WORD $0x5400b9a9 // b.ls LBB0_552 $5940(%rip) WORD $0x91000631 // add x17, x17, #1 WORD $0xeb11029f // cmp x20, x17 WORD $0x54fffee1 // b.ne LBB0_267 $-36(%rip) - WORD $0x14000544 // b LBB0_515 $5392(%rip) + WORD $0x14000562 // b LBB0_518 $5512(%rip) LBB0_271: WORD $0xd1000684 // sub x4, x20, #1 WORD $0xeb11009f // cmp x4, x17 - WORD $0x5400a820 // b.eq LBB0_515 $5380(%rip) + WORD $0x5400abe0 // b.eq LBB0_518 $5500(%rip) WORD $0x8b1102a4 // add x4, x21, x17 WORD $0x8b0c0085 // add x5, x4, x12 WORD $0xb100051f // cmn x8, #1 @@ -1556,14 +1556,14 @@ LBB0_271: WORD $0xd1000894 // sub x20, x4, #2 WORD $0xeb1100bf // cmp x5, x17 WORD $0x54fffd01 // b.ne LBB0_266 $-96(%rip) - WORD $0x14000536 // b LBB0_515 $5336(%rip) + WORD $0x14000554 // b LBB0_518 $5456(%rip) LBB0_273: WORD $0x8b150184 // add x4, x12, x21 LBB0_274: WORD $0x8b110091 // add x17, x4, x17 WORD $0x9100063e // add lr, x17, #1 WORD $0xb6ffee1e // tbz lr, #63, LBB0_243 $-576(%rip) - WORD $0x1400052f // b LBB0_514 $5308(%rip) + WORD $0x1400054d // b LBB0_517 $5428(%rip) LBB0_275: WORD $0x8b1e0135 // add x21, x9, lr WORD $0x1400000f // b LBB0_281 $60(%rip) @@ -1671,18 +1671,18 @@ LBB0_290: WORD $0xdac01087 // clz x7, x4 WORD $0xcb0902a5 // sub x5, x21, x9 WORD $0xeb07023f // cmp x17, x7 - WORD $0x5400a743 // b.lo LBB0_550 $5352(%rip) + WORD $0x5400ab03 // b.lo LBB0_553 $5472(%rip) WORD $0x8b0700b1 // add x17, x5, x7 WORD $0x9100063e // add lr, x17, #1 WORD $0xb6ffa99e // tbz lr, #63, LBB0_149 $-2768(%rip) - WORD $0x140004ca // b LBB0_514 $4904(%rip) + WORD $0x140004e8 // b LBB0_517 $5024(%rip) LBB0_293: - WORD $0x3500a656 // cbnz w22, LBB0_549 $5320(%rip) + WORD $0x3500aa16 // cbnz w22, LBB0_552 $5440(%rip) WORD $0x910082b5 // add x21, x21, #32 WORD $0xaa0703f4 // mov x20, x7 LBB0_295: WORD $0xb5002b45 // cbnz x5, LBB0_376 $1384(%rip) - WORD $0xb40098f4 // cbz x20, LBB0_515 $4892(%rip) + WORD $0xb4009cb4 // cbz x20, LBB0_518 $5012(%rip) LBB0_297: WORD $0xd2800011 // mov x17, #0 LBB0_298: @@ -1692,15 +1692,15 @@ LBB0_298: WORD $0x710170bf // cmp w5, #92 WORD $0x540000e0 // b.eq LBB0_302 $28(%rip) WORD $0x71007cbf // cmp w5, #31 - WORD $0x5400a4c9 // b.ls LBB0_549 $5272(%rip) + WORD $0x5400a889 // b.ls LBB0_552 $5392(%rip) WORD $0x91000631 // add x17, x17, #1 WORD $0xeb11029f // cmp x20, x17 WORD $0x54fffee1 // b.ne LBB0_298 $-36(%rip) - WORD $0x140004bb // b LBB0_515 $4844(%rip) + WORD $0x140004d9 // b LBB0_518 $4964(%rip) LBB0_302: WORD $0xd1000684 // sub x4, x20, #1 WORD $0xeb11009f // cmp x4, x17 - WORD $0x54009700 // b.eq LBB0_515 $4832(%rip) + WORD $0x54009ac0 // b.eq LBB0_518 $4952(%rip) WORD $0x8b1102a4 // add x4, x21, x17 WORD $0x8b0c0085 // add x5, x4, x12 WORD $0xb100051f // cmn x8, #1 @@ -1711,14 +1711,14 @@ LBB0_302: WORD $0xd1000894 // sub x20, x4, #2 WORD $0xeb1100bf // cmp x5, x17 WORD $0x54fffd01 // b.ne LBB0_297 $-96(%rip) - WORD $0x140004ad // b LBB0_515 $4788(%rip) + WORD $0x140004cb // b LBB0_518 $4908(%rip) LBB0_304: WORD $0x8b150184 // add x4, x12, x21 LBB0_305: WORD $0x8b110091 // add x17, x4, x17 WORD $0x9100063e // add lr, x17, #1 WORD $0xb6ffa51e // tbz lr, #63, LBB0_149 $-2912(%rip) - WORD $0x140004a6 // b LBB0_514 $4760(%rip) + WORD $0x140004c4 // b LBB0_517 $4880(%rip) LBB0_306: WORD $0xcb1703f6 // neg x22, x23 WORD $0x17fffee2 // b LBB0_241 $-1144(%rip) @@ -1827,18 +1827,18 @@ LBB0_321: WORD $0xdac01087 // clz x7, x4 WORD $0xcb0902a5 // sub x5, x21, x9 WORD $0xeb07023f // cmp x17, x7 - WORD $0x54009603 // b.lo LBB0_550 $4800(%rip) + WORD $0x540099c3 // b.lo LBB0_553 $4920(%rip) WORD $0x8b0700b1 // add x17, x5, x7 WORD $0x9100063e // add lr, x17, #1 WORD $0xb6ffd03e // tbz lr, #63, LBB0_243 $-1532(%rip) - WORD $0x14000440 // b LBB0_514 $4352(%rip) + WORD $0x1400045e // b LBB0_517 $4472(%rip) LBB0_324: - WORD $0x35009516 // cbnz w22, LBB0_549 $4768(%rip) + WORD $0x350098d6 // cbnz w22, LBB0_552 $4888(%rip) WORD $0x910082b5 // add x21, x21, #32 WORD $0xaa0703f4 // mov x20, x7 LBB0_326: WORD $0xb5002485 // cbnz x5, LBB0_395 $1168(%rip) - WORD $0xb40087b4 // cbz x20, LBB0_515 $4340(%rip) + WORD $0xb4008b74 // cbz x20, LBB0_518 $4460(%rip) LBB0_328: WORD $0xd2800011 // mov x17, #0 LBB0_329: @@ -1848,15 +1848,15 @@ LBB0_329: WORD $0x710170bf // cmp w5, #92 WORD $0x540000e0 // b.eq LBB0_333 $28(%rip) WORD $0x71007cbf // cmp w5, #31 - WORD $0x54009389 // b.ls LBB0_549 $4720(%rip) + WORD $0x54009749 // b.ls LBB0_552 $4840(%rip) WORD $0x91000631 // add x17, x17, #1 WORD $0xeb11029f // cmp x20, x17 WORD $0x54fffee1 // b.ne LBB0_329 $-36(%rip) - WORD $0x14000431 // b LBB0_515 $4292(%rip) + WORD $0x1400044f // b LBB0_518 $4412(%rip) LBB0_333: WORD $0xd1000684 // sub x4, x20, #1 WORD $0xeb11009f // cmp x4, x17 - WORD $0x540085c0 // b.eq LBB0_515 $4280(%rip) + WORD $0x54008980 // b.eq LBB0_518 $4400(%rip) WORD $0x8b1102a4 // add x4, x21, x17 WORD $0x8b0c0085 // add x5, x4, x12 WORD $0xb100051f // cmn x8, #1 @@ -1867,14 +1867,14 @@ LBB0_333: WORD $0xd1000894 // sub x20, x4, #2 WORD $0xeb1100bf // cmp x5, x17 WORD $0x54fffd01 // b.ne LBB0_328 $-96(%rip) - WORD $0x14000423 // b LBB0_515 $4236(%rip) + WORD $0x14000441 // b LBB0_518 $4356(%rip) LBB0_335: WORD $0x8b150184 // add x4, x12, x21 LBB0_336: WORD $0x8b110091 // add x17, x4, x17 WORD $0x9100063e // add lr, x17, #1 WORD $0xb6ffcbbe // tbz lr, #63, LBB0_243 $-1676(%rip) - WORD $0x1400041c // b LBB0_514 $4208(%rip) + WORD $0x1400043a // b LBB0_517 $4328(%rip) LBB0_337: WORD $0x92800008 // mov x8, #-1 WORD $0xaa0503f7 // mov x23, x5 @@ -1933,7 +1933,7 @@ LBB0_345: WORD $0xb5fffee5 // cbnz x5, LBB0_345 $-36(%rip) WORD $0x14000009 // b LBB0_350 $36(%rip) LBB0_348: - WORD $0xb4007d85 // cbz x5, LBB0_515 $4016(%rip) + WORD $0xb4008145 // cbz x5, LBB0_518 $4136(%rip) WORD $0x8b0b00e4 // add x4, x7, x11 WORD $0xb100051f // cmn x8, #1 WORD $0x9a880088 // csel x8, x4, x8, eq @@ -1944,13 +1944,13 @@ LBB0_348: LBB0_350: WORD $0x71008a3f // cmp w17, #34 WORD $0x54000060 // b.eq LBB0_352 $12(%rip) - WORD $0x140003e2 // b LBB0_515 $3976(%rip) + WORD $0x14000400 // b LBB0_518 $4096(%rip) LBB0_351: WORD $0xaa0703f5 // mov x21, x7 LBB0_352: WORD $0xcb0902be // sub lr, x21, x9 WORD $0xb6ffc3be // tbz lr, #63, LBB0_243 $-1932(%rip) - WORD $0x140003dc // b LBB0_514 $3952(%rip) + WORD $0x140003fa // b LBB0_517 $4072(%rip) LBB0_353: WORD $0xdac00224 // rbit x4, x17 WORD $0xdac01084 // clz x4, x4 @@ -2012,7 +2012,7 @@ LBB0_360: WORD $0xb5fffee5 // cbnz x5, LBB0_360 $-36(%rip) WORD $0x14000009 // b LBB0_365 $36(%rip) LBB0_363: - WORD $0xb4007505 // cbz x5, LBB0_515 $3744(%rip) + WORD $0xb40078c5 // cbz x5, LBB0_518 $3864(%rip) WORD $0x8b0b00e4 // add x4, x7, x11 WORD $0xb100051f // cmn x8, #1 WORD $0x9a880088 // csel x8, x4, x8, eq @@ -2023,13 +2023,13 @@ LBB0_363: LBB0_365: WORD $0x71008a3f // cmp w17, #34 WORD $0x54000060 // b.eq LBB0_367 $12(%rip) - WORD $0x1400039e // b LBB0_515 $3704(%rip) + WORD $0x140003bc // b LBB0_518 $3824(%rip) LBB0_366: WORD $0xaa0703f5 // mov x21, x7 LBB0_367: WORD $0xcb0902be // sub lr, x21, x9 WORD $0xb6ff835e // tbz lr, #63, LBB0_149 $-3992(%rip) - WORD $0x14000398 // b LBB0_514 $3680(%rip) + WORD $0x140003b6 // b LBB0_517 $3800(%rip) LBB0_368: WORD $0xdac00224 // rbit x4, x17 WORD $0xdac01084 // clz x4, x4 @@ -2052,7 +2052,7 @@ LBB0_369: WORD $0x8a140234 // and x20, x17, x20 WORD $0x17fffea5 // b LBB0_290 $-1388(%rip) LBB0_370: - WORD $0xb40070d4 // cbz x20, LBB0_515 $3608(%rip) + WORD $0xb4007494 // cbz x20, LBB0_518 $3728(%rip) WORD $0x8b0b02b1 // add x17, x21, x11 WORD $0xb100051f // cmn x8, #1 WORD $0x9a880228 // csel x8, x17, x8, eq @@ -2061,16 +2061,16 @@ LBB0_370: WORD $0xb5fff134 // cbnz x20, LBB0_345 $-476(%rip) WORD $0x17ffff9f // b LBB0_352 $-388(%rip) LBB0_372: - WORD $0xb4006fd4 // cbz x20, LBB0_515 $3576(%rip) + WORD $0xb4007394 // cbz x20, LBB0_518 $3696(%rip) WORD $0x8b0b02b1 // add x17, x21, x11 WORD $0xb100051f // cmn x8, #1 WORD $0x9a880228 // csel x8, x17, x8, eq WORD $0x910006b5 // add x21, x21, #1 WORD $0xd1000694 // sub x20, x20, #1 WORD $0xb5ffc534 // cbnz x20, LBB0_266 $-1884(%rip) - WORD $0x14000377 // b LBB0_515 $3548(%rip) + WORD $0x14000395 // b LBB0_518 $3668(%rip) LBB0_374: - WORD $0xb4006ed4 // cbz x20, LBB0_515 $3544(%rip) + WORD $0xb4007294 // cbz x20, LBB0_518 $3664(%rip) WORD $0x8b0b02b1 // add x17, x21, x11 WORD $0xb100051f // cmn x8, #1 WORD $0x9a880228 // csel x8, x17, x8, eq @@ -2079,14 +2079,14 @@ LBB0_374: WORD $0xb5fff7b4 // cbnz x20, LBB0_360 $-268(%rip) WORD $0x17ffffd3 // b LBB0_367 $-180(%rip) LBB0_376: - WORD $0xb4006dd4 // cbz x20, LBB0_515 $3512(%rip) + WORD $0xb4007194 // cbz x20, LBB0_518 $3632(%rip) WORD $0x8b0b02b1 // add x17, x21, x11 WORD $0xb100051f // cmn x8, #1 WORD $0x9a880228 // csel x8, x17, x8, eq WORD $0x910006b5 // add x21, x21, #1 WORD $0xd1000694 // sub x20, x20, #1 WORD $0xb5ffd454 // cbnz x20, LBB0_297 $-1400(%rip) - WORD $0x14000367 // b LBB0_515 $3484(%rip) + WORD $0x14000385 // b LBB0_518 $3604(%rip) LBB0_378: WORD $0xdac00284 // rbit x4, x20 WORD $0xdac01084 // clz x4, x4 @@ -2127,7 +2127,7 @@ LBB0_383: WORD $0xb5fffee5 // cbnz x5, LBB0_383 $-36(%rip) WORD $0x14000009 // b LBB0_388 $36(%rip) LBB0_386: - WORD $0xb4006885 // cbz x5, LBB0_515 $3344(%rip) + WORD $0xb4006c45 // cbz x5, LBB0_518 $3464(%rip) WORD $0x8b0b00e4 // add x4, x7, x11 WORD $0xb100051f // cmn x8, #1 WORD $0x9a880088 // csel x8, x4, x8, eq @@ -2138,13 +2138,13 @@ LBB0_386: LBB0_388: WORD $0x71008a3f // cmp w17, #34 WORD $0x54000060 // b.eq LBB0_390 $12(%rip) - WORD $0x1400033a // b LBB0_515 $3304(%rip) + WORD $0x14000358 // b LBB0_518 $3424(%rip) LBB0_389: WORD $0xaa0703f5 // mov x21, x7 LBB0_390: WORD $0xcb0902be // sub lr, x21, x9 WORD $0xb6ffaebe // tbz lr, #63, LBB0_243 $-2604(%rip) - WORD $0x14000334 // b LBB0_514 $3280(%rip) + WORD $0x14000352 // b LBB0_517 $3400(%rip) LBB0_391: WORD $0xdac00224 // rbit x4, x17 WORD $0xdac01084 // clz x4, x4 @@ -2167,7 +2167,7 @@ LBB0_392: WORD $0x8a140234 // and x20, x17, x20 WORD $0x17fffecb // b LBB0_321 $-1236(%rip) LBB0_393: - WORD $0xb4006454 // cbz x20, LBB0_515 $3208(%rip) + WORD $0xb4006814 // cbz x20, LBB0_518 $3328(%rip) WORD $0x8b0b02b1 // add x17, x21, x11 WORD $0xb100051f // cmn x8, #1 WORD $0x9a880228 // csel x8, x17, x8, eq @@ -2176,14 +2176,14 @@ LBB0_393: WORD $0xb5fff9b4 // cbnz x20, LBB0_383 $-204(%rip) WORD $0x17ffffe3 // b LBB0_390 $-116(%rip) LBB0_395: - WORD $0xb4006354 // cbz x20, LBB0_515 $3176(%rip) + WORD $0xb4006714 // cbz x20, LBB0_518 $3296(%rip) WORD $0x8b0b02b1 // add x17, x21, x11 WORD $0xb100051f // cmn x8, #1 WORD $0x9a880228 // csel x8, x17, x8, eq WORD $0x910006b5 // add x21, x21, #1 WORD $0xd1000694 // sub x20, x20, #1 WORD $0xb5ffdb14 // cbnz x20, LBB0_328 $-1184(%rip) - WORD $0x14000313 // b LBB0_515 $3148(%rip) + WORD $0x14000331 // b LBB0_518 $3268(%rip) LBB0_397: WORD $0xf940002b // ldr x11, [x1] WORD $0xa940200a // ldp x10, x8, [x0] @@ -2253,11 +2253,11 @@ LBB0_415: WORD $0x54ffff01 // b.ne LBB0_415 $-32(%rip) LBB0_417: WORD $0x92800008 // mov x8, #-1 - WORD $0x14000040 // b LBB0_438 $256(%rip) + WORD $0x140002e5 // b LBB0_515 $2964(%rip) LBB0_418: WORD $0xf9000029 // str x9, [x1] WORD $0x92800008 // mov x8, #-1 - WORD $0x1400003d // b LBB0_438 $244(%rip) + WORD $0x140002e2 // b LBB0_515 $2952(%rip) LBB0_419: WORD $0xeb08013f // cmp x9, x8 WORD $0x54ffff42 // b.hs LBB0_417 $-24(%rip) @@ -2266,30 +2266,32 @@ LBB0_420: WORD $0xf9000030 // str x16, [x1] WORD $0x38696948 // ldrb w8, [x10, x9] WORD $0x7101691f // cmp w8, #90 - WORD $0x540007ec // b.gt LBB0_439 $252(%rip) + WORD $0x54000a6c // b.gt LBB0_439 $332(%rip) WORD $0x7100bd1f // cmp w8, #47 - WORD $0x54000c4d // b.le LBB0_444 $392(%rip) + WORD $0x54000ecd // b.le LBB0_444 $472(%rip) WORD $0x5100c108 // sub w8, w8, #48 WORD $0x7100291f // cmp w8, #10 - WORD $0x54005702 // b.hs LBB0_511 $2784(%rip) + WORD $0x54005982 // b.hs LBB0_511 $2864(%rip) LBB0_423: WORD $0xf9400408 // ldr x8, [x0, #8] - WORD $0xcb100108 // sub x8, x8, x16 - WORD $0xf100411f // cmp x8, #16 - WORD $0x540002c3 // b.lo LBB0_427 $88(%rip) + WORD $0xcb10010b // sub x11, x8, x16 + WORD $0x8b100148 // add x8, x10, x16 + WORD $0xf100417f // cmp x11, #16 + WORD $0x54000303 // b.lo LBB0_427 $96(%rip) + WORD $0xd280000c // mov x12, #0 WORD $0x4f01e580 // movi.16b v0, #44 WORD $0x4f06e7e1 // movi.16b v1, #223 WORD $0x4f02e7a2 // movi.16b v2, #93 Lloh6: - WORD $0x10ff044b // adr x11, lCPI0_0 $-8056(%rip) + WORD $0x10ff040d // adr x13, lCPI0_0 $-8064(%rip) Lloh7: - WORD $0x3dc00163 // ldr q3, [x11, lCPI0_0@PAGEOFF] $0(%rip) + WORD $0x3dc001a3 // ldr q3, [x13, lCPI0_0@PAGEOFF] $0(%rip) Lloh8: - WORD $0x10ff048b // adr x11, lCPI0_1 $-8048(%rip) + WORD $0x10ff044d // adr x13, lCPI0_1 $-8056(%rip) Lloh9: - WORD $0x3dc00164 // ldr q4, [x11, lCPI0_1@PAGEOFF] $0(%rip) + WORD $0x3dc001a4 // ldr q4, [x13, lCPI0_1@PAGEOFF] $0(%rip) LBB0_425: - WORD $0x3cf06945 // ldr q5, [x10, x16] + WORD $0x3dc00105 // ldr q5, [x8] WORD $0x6e208ca6 // cmeq.16b v6, v5, v0 WORD $0x4e211ca5 // and.16b v5, v5, v1 WORD $0x6e228ca5 // cmeq.16b v5, v5, v2 @@ -2297,51 +2299,67 @@ LBB0_425: WORD $0x4e231ca5 // and.16b v5, v5, v3 WORD $0x4e0400a5 // tbl.16b v5, { v5 }, v4 WORD $0x4e71b8a5 // addv.8h h5, v5 - WORD $0x1e2600ab // fmov w11, s5 - WORD $0x350002eb // cbnz w11, LBB0_435 $92(%rip) - WORD $0xd1004108 // sub x8, x8, #16 - WORD $0x91004210 // add x16, x16, #16 - WORD $0xf1003d1f // cmp x8, #15 - WORD $0x54fffe68 // b.hi LBB0_425 $-52(%rip) + WORD $0x1e2600ad // fmov w13, s5 + WORD $0x350003ad // cbnz w13, LBB0_435 $116(%rip) + WORD $0x91004108 // add x8, x8, #16 + WORD $0xd100416b // sub x11, x11, #16 + WORD $0x9100418c // add x12, x12, #16 + WORD $0xf1003d7f // cmp x11, #15 + WORD $0x54fffe48 // b.hi LBB0_425 $-56(%rip) LBB0_427: - WORD $0x8b10014b // add x11, x10, x16 - WORD $0xb40001e8 // cbz x8, LBB0_434 $60(%rip) - WORD $0x8b08016c // add x12, x11, x8 - WORD $0xcb0a016d // sub x13, x11, x10 + WORD $0xb40002ab // cbz x11, LBB0_434 $84(%rip) + WORD $0x8b0b010c // add x12, x8, x11 + WORD $0xcb0a010d // sub x13, x8, x10 + WORD $0x5280002e // mov w14, #1 + WORD $0xd284c00f // mov x15, #9728 + WORD $0xf2c2002f // movk x15, #4097, lsl #32 LBB0_429: - WORD $0x3940016e // ldrb w14, [x11] - WORD $0x7100b1df // cmp w14, #44 - WORD $0x54005500 // b.eq LBB0_516 $2720(%rip) - WORD $0x7101f5df // cmp w14, #125 - WORD $0x540054c0 // b.eq LBB0_516 $2712(%rip) - WORD $0x710175df // cmp w14, #93 - WORD $0x54005480 // b.eq LBB0_516 $2704(%rip) - WORD $0x9100056b // add x11, x11, #1 + WORD $0x39400110 // ldrb w16, [x8] + WORD $0x7100b21f // cmp w16, #44 + WORD $0x9ad021d1 // lsl x17, x14, x16 + WORD $0x8a0f0231 // and x17, x17, x15 + WORD $0xfa409a24 // ccmp x17, #0, #4, ls + WORD $0x540057c1 // b.ne LBB0_519 $2808(%rip) + WORD $0x7101f61f // cmp w16, #125 + WORD $0x54005780 // b.eq LBB0_519 $2800(%rip) + WORD $0x7101761f // cmp w16, #93 + WORD $0x54005740 // b.eq LBB0_519 $2792(%rip) + WORD $0x91000508 // add x8, x8, #1 WORD $0x910005ad // add x13, x13, #1 - WORD $0xf1000508 // subs x8, x8, #1 - WORD $0x54fffec1 // b.ne LBB0_429 $-40(%rip) - WORD $0xaa0c03eb // mov x11, x12 + WORD $0xf100056b // subs x11, x11, #1 + WORD $0x54fffe61 // b.ne LBB0_429 $-52(%rip) + WORD $0xaa0c03e8 // mov x8, x12 LBB0_434: - WORD $0xcb0a0168 // sub x8, x11, x10 - WORD $0x14000004 // b LBB0_436 $16(%rip) + WORD $0xcb0a0108 // sub x8, x8, x10 + WORD $0x140002a1 // b LBB0_513 $2692(%rip) LBB0_435: - WORD $0x5ac00168 // rbit w8, w11 - WORD $0x5ac01108 // clz w8, w8 - WORD $0x8b100108 // add x8, x8, x16 -LBB0_436: + WORD $0x5ac001ab // rbit w11, w13 + WORD $0x5ac0116b // clz w11, w11 + WORD $0xcb0a0108 // sub x8, x8, x10 + WORD $0x8b0b0108 // add x8, x8, x11 WORD $0xf9000028 // str x8, [x1] + WORD $0xf100051f // cmp x8, #1 + WORD $0x5400536b // b.lt LBB0_514 $2668(%rip) + WORD $0x8b0c0168 // add x8, x11, x12 + WORD $0x8b09014a // add x10, x10, x9 + WORD $0x5280002b // mov w11, #1 + WORD $0xd284c00c // mov x12, #9728 + WORD $0xf2c0002c // movk x12, #1, lsl #32 LBB0_437: - WORD $0xaa0903e8 // mov x8, x9 -LBB0_438: - WORD $0xaa0803e0 // mov x0, x8 - WORD $0xa94afbfd // ldp fp, lr, [sp, #168] - WORD $0xa949cff4 // ldp x20, x19, [sp, #152] - WORD $0xa948d7f6 // ldp x22, x21, [sp, #136] - WORD $0xa947dff8 // ldp x24, x23, [sp, #120] - WORD $0xa946e7fa // ldp x26, x25, [sp, #104] - WORD $0xa945effc // ldp x28, x27, [sp, #88] - WORD $0x910303ff // add sp, sp, #192 - WORD $0xd65f03c0 // ret + WORD $0x3868694d // ldrb w13, [x10, x8] + WORD $0x710081bf // cmp w13, #32 + WORD $0x9acd216d // lsl x13, x11, x13 + WORD $0x8a0c01ad // and x13, x13, x12 + WORD $0xfa4099a4 // ccmp x13, #0, #4, ls + WORD $0x54005200 // b.eq LBB0_514 $2624(%rip) + WORD $0x8b08012d // add x13, x9, x8 + WORD $0xf900002d // str x13, [x1] + WORD $0xd1000508 // sub x8, x8, #1 + WORD $0x8b08012d // add x13, x9, x8 + WORD $0x910009ad // add x13, x13, #2 + WORD $0xf10005bf // cmp x13, #1 + WORD $0x54fffe8c // b.gt LBB0_437 $-48(%rip) + WORD $0x14000288 // b LBB0_514 $2592(%rip) LBB0_439: WORD $0x7101b51f // cmp w8, #109 WORD $0x5400054d // b.le LBB0_447 $168(%rip) @@ -2368,11 +2386,11 @@ LBB0_439: WORD $0x9100814a // add x10, x10, #32 WORD $0x4f01e440 // movi.16b v0, #34 Lloh10: - WORD $0x10fefb11 // adr x17, lCPI0_0 $-8352(%rip) + WORD $0x10fef891 // adr x17, lCPI0_0 $-8432(%rip) Lloh11: WORD $0x3dc00221 // ldr q1, [x17, lCPI0_0@PAGEOFF] $0(%rip) Lloh12: - WORD $0x10fefb51 // adr x17, lCPI0_1 $-8344(%rip) + WORD $0x10fef8d1 // adr x17, lCPI0_1 $-8424(%rip) Lloh13: WORD $0x3dc00222 // ldr q2, [x17, lCPI0_1@PAGEOFF] $0(%rip) WORD $0x4f02e783 // movi.16b v3, #92 @@ -2385,11 +2403,11 @@ Lloh13: WORD $0x6f00e406 // movi.2d v6, #0000000000000000 WORD $0x14000018 // b LBB0_451 $96(%rip) LBB0_444: - WORD $0x34fff228 // cbz w8, LBB0_417 $-444(%rip) + WORD $0x34ffefa8 // cbz w8, LBB0_417 $-524(%rip) WORD $0x7100891f // cmp w8, #34 WORD $0x54001fa0 // b.eq LBB0_476 $1012(%rip) WORD $0x7100b51f // cmp w8, #45 - WORD $0x54fff3c0 // b.eq LBB0_423 $-392(%rip) + WORD $0x54fff140 // b.eq LBB0_423 $-472(%rip) WORD $0x14000254 // b LBB0_511 $2384(%rip) LBB0_447: WORD $0x71016d1f // cmp w8, #91 @@ -2399,8 +2417,8 @@ LBB0_447: WORD $0x91001528 // add x8, x9, #5 WORD $0xf940040a // ldr x10, [x0, #8] WORD $0xeb0a011f // cmp x8, x10 - WORD $0x54fff088 // b.hi LBB0_417 $-496(%rip) - WORD $0x17ffffc2 // b LBB0_436 $-248(%rip) + WORD $0x54ffee08 // b.hi LBB0_417 $-576(%rip) + WORD $0x14000253 // b LBB0_513 $2380(%rip) LBB0_450: WORD $0x937ffce7 // asr x7, x7, #63 WORD $0x9e670267 // fmov d7, x19 @@ -2592,7 +2610,7 @@ LBB0_456: WORD $0x17ffff4a // b LBB0_450 $-728(%rip) LBB0_458: WORD $0xf10000bf // cmp x5, #0 - WORD $0x5400404d // b.le LBB0_547 $2056(%rip) + WORD $0x5400418d // b.le LBB0_550 $2096(%rip) WORD $0xad019be6 // stp q6, q6, [sp, #48] WORD $0xad009be6 // stp q6, q6, [sp, #16] WORD $0x92402e13 // and x19, x16, #0xfff @@ -2654,18 +2672,18 @@ LBB0_473: LBB0_474: WORD $0xf900003b // str x27, [x1] WORD $0x92800008 // mov x8, #-1 - WORD $0x17fffed9 // b LBB0_438 $-1180(%rip) + WORD $0x1400016a // b LBB0_515 $1448(%rip) LBB0_475: WORD $0x91001128 // add x8, x9, #4 WORD $0xf940040a // ldr x10, [x0, #8] WORD $0xeb0a011f // cmp x8, x10 - WORD $0x54ffd288 // b.hi LBB0_417 $-1456(%rip) - WORD $0x17fffed2 // b LBB0_436 $-1208(%rip) + WORD $0x54ffd008 // b.hi LBB0_417 $-1536(%rip) + WORD $0x14000163 // b LBB0_513 $1420(%rip) LBB0_476: WORD $0xf9400411 // ldr x17, [x0, #8] WORD $0xcb10022b // sub x11, x17, x16 WORD $0xf100817f // cmp x11, #32 - WORD $0x540037cb // b.lt LBB0_544 $1784(%rip) + WORD $0x5400390b // b.lt LBB0_547 $1824(%rip) WORD $0xd2800008 // mov x8, #0 WORD $0xd280000e // mov x14, #0 WORD $0x3200f3ec // mov w12, #1431655765 @@ -2673,11 +2691,11 @@ LBB0_476: WORD $0x4f01e440 // movi.16b v0, #34 WORD $0x8b09014f // add x15, x10, x9 Lloh14: - WORD $0x10fed84b // adr x11, lCPI0_0 $-9464(%rip) + WORD $0x10fed5cb // adr x11, lCPI0_0 $-9544(%rip) Lloh15: WORD $0x3dc00161 // ldr q1, [x11, lCPI0_0@PAGEOFF] $0(%rip) Lloh16: - WORD $0x10fed88b // adr x11, lCPI0_1 $-9456(%rip) + WORD $0x10fed60b // adr x11, lCPI0_1 $-9536(%rip) Lloh17: WORD $0x3dc00162 // ldr q2, [x11, lCPI0_1@PAGEOFF] $0(%rip) WORD $0xcb09022b // sub x11, x17, x9 @@ -2732,15 +2750,15 @@ LBB0_481: WORD $0x8b100171 // add x17, x11, x16 WORD $0xf100fe3f // cmp x17, #63 WORD $0x54fffa6c // b.gt LBB0_478 $-180(%rip) - WORD $0xb500328e // cbnz x14, LBB0_551 $1616(%rip) + WORD $0xb50033ce // cbnz x14, LBB0_554 $1656(%rip) WORD $0x8b09014c // add x12, x10, x9 WORD $0x8b08018c // add x12, x12, x8 WORD $0x9100058c // add x12, x12, #1 WORD $0xaa2803e8 // mvn x8, x8 WORD $0x8b0b010b // add x11, x8, x11 WORD $0xf100057f // cmp x11, #1 - WORD $0x540033ca // b.ge LBB0_554 $1656(%rip) - WORD $0x17fffe4b // b LBB0_417 $-1748(%rip) + WORD $0x5400350a // b.ge LBB0_557 $1696(%rip) + WORD $0x17fffe37 // b LBB0_417 $-1828(%rip) LBB0_485: WORD $0xd2800007 // mov x7, #0 WORD $0xd280000f // mov x15, #0 @@ -2759,11 +2777,11 @@ LBB0_485: WORD $0x9100814a // add x10, x10, #32 WORD $0x4f01e440 // movi.16b v0, #34 Lloh18: - WORD $0x10fece91 // adr x17, lCPI0_0 $-9776(%rip) + WORD $0x10fecc11 // adr x17, lCPI0_0 $-9856(%rip) Lloh19: WORD $0x3dc00221 // ldr q1, [x17, lCPI0_0@PAGEOFF] $0(%rip) Lloh20: - WORD $0x10feced1 // adr x17, lCPI0_1 $-9768(%rip) + WORD $0x10fecc51 // adr x17, lCPI0_1 $-9848(%rip) Lloh21: WORD $0x3dc00222 // ldr q2, [x17, lCPI0_1@PAGEOFF] $0(%rip) WORD $0x4f02e783 // movi.16b v3, #92 @@ -2966,7 +2984,7 @@ LBB0_492: WORD $0x17ffff4a // b LBB0_486 $-728(%rip) LBB0_494: WORD $0xf10000bf // cmp x5, #0 - WORD $0x540015ad // b.le LBB0_547 $692(%rip) + WORD $0x540016ed // b.le LBB0_550 $732(%rip) WORD $0xad019be6 // stp q6, q6, [sp, #48] WORD $0xad009be6 // stp q6, q6, [sp, #16] WORD $0x92402e13 // and x19, x16, #0xfff @@ -3038,193 +3056,206 @@ LBB0_510: WORD $0x9a882568 // csinc x8, x11, x8, hs WORD $0xf9000028 // str x8, [x1] WORD $0xda9f9128 // csinv x8, x9, xzr, ls - WORD $0x17fffd7a // b LBB0_438 $-2584(%rip) + WORD $0x1400000b // b LBB0_515 $44(%rip) LBB0_511: WORD $0xf9000029 // str x9, [x1] WORD $0x92800028 // mov x8, #-2 - WORD $0x17fffd77 // b LBB0_438 $-2596(%rip) + WORD $0x14000008 // b LBB0_515 $32(%rip) LBB0_512: WORD $0xdac0022a // rbit x10, x17 WORD $0xdac0114a // clz x10, x10 WORD $0x8b080128 // add x8, x9, x8 WORD $0x8b080148 // add x8, x10, x8 WORD $0x91000908 // add x8, x8, #2 - WORD $0x17fffd6f // b LBB0_436 $-2628(%rip) LBB0_513: - WORD $0x928000c8 // mov x8, #-7 - WORD $0x17fffd6f // b LBB0_438 $-2628(%rip) + WORD $0xf9000028 // str x8, [x1] LBB0_514: - WORD $0xb10007df // cmn lr, #1 - WORD $0x54000241 // b.ne LBB0_524 $72(%rip) + WORD $0xaa0903e8 // mov x8, x9 LBB0_515: + WORD $0xaa0803e0 // mov x0, x8 + WORD $0xa94afbfd // ldp fp, lr, [sp, #168] + WORD $0xa949cff4 // ldp x20, x19, [sp, #152] + WORD $0xa948d7f6 // ldp x22, x21, [sp, #136] + WORD $0xa947dff8 // ldp x24, x23, [sp, #120] + WORD $0xa946e7fa // ldp x26, x25, [sp, #104] + WORD $0xa945effc // ldp x28, x27, [sp, #88] + WORD $0x910303ff // add sp, sp, #192 + WORD $0xd65f03c0 // ret +LBB0_516: + WORD $0x928000c8 // mov x8, #-7 + WORD $0x17fffff6 // b LBB0_515 $-40(%rip) +LBB0_517: + WORD $0xb10007df // cmn lr, #1 + WORD $0x54000241 // b.ne LBB0_527 $72(%rip) +LBB0_518: WORD $0xf9400408 // ldr x8, [x0, #8] WORD $0x9280001e // mov lr, #-1 - WORD $0x1400000f // b LBB0_524 $60(%rip) -LBB0_516: + WORD $0x1400000f // b LBB0_527 $60(%rip) +LBB0_519: WORD $0xf900002d // str x13, [x1] - WORD $0x17fffd67 // b LBB0_437 $-2660(%rip) -LBB0_517: + WORD $0x17ffffee // b LBB0_514 $-72(%rip) +LBB0_520: WORD $0x92800016 // mov x22, #-1 -LBB0_518: +LBB0_521: WORD $0xaa3603f5 // mvn x21, x22 -LBB0_519: +LBB0_522: WORD $0x8b1b02a8 // add x8, x21, x27 -LBB0_520: +LBB0_523: WORD $0xf9000028 // str x8, [x1] WORD $0x92800028 // mov x8, #-2 - WORD $0x17fffd62 // b LBB0_438 $-2680(%rip) -LBB0_521: + WORD $0x17ffffe9 // b LBB0_515 $-92(%rip) +LBB0_524: WORD $0xb100051f // cmn x8, #1 - WORD $0x54000081 // b.ne LBB0_523 $16(%rip) + WORD $0x54000081 // b.ne LBB0_526 $16(%rip) WORD $0xdac000e8 // rbit x8, x7 WORD $0xdac01108 // clz x8, x8 WORD $0x8b1e0108 // add x8, x8, lr -LBB0_523: +LBB0_526: WORD $0x9280003e // mov lr, #-2 -LBB0_524: +LBB0_527: WORD $0xf9000028 // str x8, [x1] WORD $0xaa1e03e8 // mov x8, lr - WORD $0x17fffd59 // b LBB0_438 $-2716(%rip) -LBB0_525: + WORD $0x17ffffe0 // b LBB0_515 $-128(%rip) +LBB0_528: WORD $0xaa0803f5 // mov x21, x8 - WORD $0x17fffff2 // b LBB0_519 $-56(%rip) -LBB0_526: + WORD $0x17fffff2 // b LBB0_522 $-56(%rip) +LBB0_529: WORD $0x92800016 // mov x22, #-1 -LBB0_527: +LBB0_530: WORD $0xaa3603e5 // mvn x5, x22 -LBB0_528: +LBB0_531: WORD $0x8b0503c8 // add x8, lr, x5 - WORD $0x17ffffef // b LBB0_520 $-68(%rip) -LBB0_529: + WORD $0x17ffffef // b LBB0_523 $-68(%rip) +LBB0_532: WORD $0xf900003e // str lr, [x1] WORD $0x387e6928 // ldrb w8, [x9, lr] WORD $0x7101851f // cmp w8, #97 - WORD $0x54000761 // b.ne LBB0_543 $236(%rip) + WORD $0x54000761 // b.ne LBB0_546 $236(%rip) WORD $0x91000b68 // add x8, x27, #2 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101b11f // cmp w8, #108 - WORD $0x540006c1 // b.ne LBB0_543 $216(%rip) + WORD $0x540006c1 // b.ne LBB0_546 $216(%rip) WORD $0x91000f68 // add x8, x27, #3 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101cd1f // cmp w8, #115 - WORD $0x54000621 // b.ne LBB0_543 $196(%rip) + WORD $0x54000621 // b.ne LBB0_546 $196(%rip) WORD $0x91001368 // add x8, x27, #4 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101951f // cmp w8, #101 - WORD $0x54000581 // b.ne LBB0_543 $176(%rip) + WORD $0x54000581 // b.ne LBB0_546 $176(%rip) WORD $0x91001768 // add x8, x27, #5 - WORD $0x17ffffda // b LBB0_520 $-152(%rip) -LBB0_534: + WORD $0x17ffffda // b LBB0_523 $-152(%rip) +LBB0_537: WORD $0xf900003b // str x27, [x1] WORD $0x394000a8 // ldrb w8, [x5] WORD $0x7101d11f // cmp w8, #116 - WORD $0x540004c1 // b.ne LBB0_543 $152(%rip) + WORD $0x540004c1 // b.ne LBB0_546 $152(%rip) WORD $0x91000768 // add x8, x27, #1 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101c91f // cmp w8, #114 - WORD $0x54000421 // b.ne LBB0_543 $132(%rip) + WORD $0x54000421 // b.ne LBB0_546 $132(%rip) WORD $0x91000b68 // add x8, x27, #2 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101d51f // cmp w8, #117 - WORD $0x54000381 // b.ne LBB0_543 $112(%rip) + WORD $0x54000381 // b.ne LBB0_546 $112(%rip) WORD $0x91000f68 // add x8, x27, #3 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101951f // cmp w8, #101 - WORD $0x540002e1 // b.ne LBB0_543 $92(%rip) - WORD $0x14000014 // b LBB0_542 $80(%rip) -LBB0_538: + WORD $0x540002e1 // b.ne LBB0_546 $92(%rip) + WORD $0x14000014 // b LBB0_545 $80(%rip) +LBB0_541: WORD $0xf900003b // str x27, [x1] WORD $0x394000a8 // ldrb w8, [x5] WORD $0x7101b91f // cmp w8, #110 - WORD $0x54000241 // b.ne LBB0_543 $72(%rip) + WORD $0x54000241 // b.ne LBB0_546 $72(%rip) WORD $0x91000768 // add x8, x27, #1 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101d51f // cmp w8, #117 - WORD $0x540001a1 // b.ne LBB0_543 $52(%rip) + WORD $0x540001a1 // b.ne LBB0_546 $52(%rip) WORD $0x91000b68 // add x8, x27, #2 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101b11f // cmp w8, #108 - WORD $0x54000101 // b.ne LBB0_543 $32(%rip) + WORD $0x54000101 // b.ne LBB0_546 $32(%rip) WORD $0x91000f68 // add x8, x27, #3 WORD $0xf9000028 // str x8, [x1] WORD $0x38686928 // ldrb w8, [x9, x8] WORD $0x7101b11f // cmp w8, #108 - WORD $0x54000061 // b.ne LBB0_543 $12(%rip) -LBB0_542: + WORD $0x54000061 // b.ne LBB0_546 $12(%rip) +LBB0_545: WORD $0x91001368 // add x8, x27, #4 - WORD $0x17ffffb1 // b LBB0_520 $-316(%rip) -LBB0_543: + WORD $0x17ffffb1 // b LBB0_523 $-316(%rip) +LBB0_546: WORD $0x92800028 // mov x8, #-2 - WORD $0x17fffd13 // b LBB0_438 $-2996(%rip) -LBB0_544: + WORD $0x17ffff9a // b LBB0_515 $-408(%rip) +LBB0_547: WORD $0x8b10014c // add x12, x10, x16 WORD $0xf100057f // cmp x11, #1 - WORD $0x5400042a // b.ge LBB0_554 $132(%rip) - WORD $0x17fffcce // b LBB0_417 $-3272(%rip) -LBB0_545: + WORD $0x5400042a // b.ge LBB0_557 $132(%rip) + WORD $0x17fffcb0 // b LBB0_417 $-3392(%rip) +LBB0_548: WORD $0xaa1503e5 // mov x5, x21 WORD $0x8b1503c8 // add x8, lr, x21 - WORD $0x17ffffa8 // b LBB0_520 $-352(%rip) -LBB0_546: + WORD $0x17ffffa8 // b LBB0_523 $-352(%rip) +LBB0_549: WORD $0x8b1e00a8 // add x8, x5, lr - WORD $0x17ffffae // b LBB0_523 $-328(%rip) -LBB0_547: + WORD $0x17ffffae // b LBB0_526 $-328(%rip) +LBB0_550: WORD $0xf9400408 // ldr x8, [x0, #8] -LBB0_548: +LBB0_551: WORD $0xf9000028 // str x8, [x1] WORD $0x92800008 // mov x8, #-1 - WORD $0x17fffd06 // b LBB0_438 $-3048(%rip) -LBB0_549: + WORD $0x17ffff8d // b LBB0_515 $-460(%rip) +LBB0_552: WORD $0xcb0902a8 // sub x8, x21, x9 WORD $0x8b110108 // add x8, x8, x17 - WORD $0x17ffffa7 // b LBB0_523 $-356(%rip) -LBB0_550: + WORD $0x17ffffa7 // b LBB0_526 $-356(%rip) +LBB0_553: WORD $0x8b1100a8 // add x8, x5, x17 - WORD $0x17ffffa5 // b LBB0_523 $-364(%rip) -LBB0_551: + WORD $0x17ffffa5 // b LBB0_526 $-364(%rip) +LBB0_554: WORD $0xd100056c // sub x12, x11, #1 WORD $0xeb08019f // cmp x12, x8 - WORD $0x54ff97a0 // b.eq LBB0_417 $-3340(%rip) + WORD $0x54ff93e0 // b.eq LBB0_417 $-3460(%rip) WORD $0x8b09014c // add x12, x10, x9 WORD $0x8b08018c // add x12, x12, x8 WORD $0x9100098c // add x12, x12, #2 WORD $0xcb080168 // sub x8, x11, x8 WORD $0xd100090b // sub x11, x8, #2 WORD $0xf100057f // cmp x11, #1 - WORD $0x5400010a // b.ge LBB0_554 $32(%rip) - WORD $0x17fffcb5 // b LBB0_417 $-3372(%rip) -LBB0_553: + WORD $0x5400010a // b.ge LBB0_557 $32(%rip) + WORD $0x17fffc97 // b LBB0_417 $-3492(%rip) +LBB0_556: WORD $0x9280002d // mov x13, #-2 WORD $0x52800048 // mov w8, #2 WORD $0x8b08018c // add x12, x12, x8 WORD $0x92800008 // mov x8, #-1 WORD $0xab0d016b // adds x11, x11, x13 - WORD $0x54ff9e0d // b.le LBB0_438 $-3136(%rip) -LBB0_554: + WORD $0x54ffeeed // b.le LBB0_515 $-548(%rip) +LBB0_557: WORD $0x39400188 // ldrb w8, [x12] WORD $0x7101711f // cmp w8, #92 - WORD $0x54ffff00 // b.eq LBB0_553 $-32(%rip) + WORD $0x54ffff00 // b.eq LBB0_556 $-32(%rip) WORD $0x7100891f // cmp w8, #34 - WORD $0x54000100 // b.eq LBB0_557 $32(%rip) + WORD $0x54000100 // b.eq LBB0_560 $32(%rip) WORD $0x9280000d // mov x13, #-1 WORD $0x52800028 // mov w8, #1 WORD $0x8b08018c // add x12, x12, x8 WORD $0x92800008 // mov x8, #-1 WORD $0xab0d016b // adds x11, x11, x13 - WORD $0x54fffecc // b.gt LBB0_554 $-40(%rip) - WORD $0x17fffce4 // b LBB0_438 $-3184(%rip) -LBB0_557: + WORD $0x54fffecc // b.gt LBB0_557 $-40(%rip) + WORD $0x17ffff6b // b LBB0_515 $-596(%rip) +LBB0_560: WORD $0xcb0a0188 // sub x8, x12, x10 WORD $0x91000508 // add x8, x8, #1 - WORD $0x17fffcdf // b LBB0_436 $-3204(%rip) + WORD $0x17ffff66 // b LBB0_513 $-616(%rip) // .p2align 2, 0x00 _MASK_USE_NUMBER: WORD $0x00000002 // .long 2 diff --git a/vendor/github.com/bytedance/sonic/internal/native/neon/skip_one_fast_arm64.s b/vendor/github.com/bytedance/sonic/internal/native/neon/skip_one_fast_arm64.s index 0caf278..176caa0 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/neon/skip_one_fast_arm64.s +++ b/vendor/github.com/bytedance/sonic/internal/native/neon/skip_one_fast_arm64.s @@ -117,7 +117,7 @@ LBB0_12: LBB0_16: WORD $0x91001168 // add x8, x11, #4 WORD $0xeb0a011f // cmp x8, x10 - WORD $0x54005ae2 // b.hs LBB0_115 $2908(%rip) + WORD $0x54005ea2 // b.hs LBB0_118 $3028(%rip) WORD $0x5280002b // mov w11, #1 WORD $0xd284c00c // mov x12, #9728 WORD $0xf2c0002c // movk x12, #1, lsl #32 @@ -131,39 +131,41 @@ LBB0_18: WORD $0x91000508 // add x8, x8, #1 WORD $0xeb08015f // cmp x10, x8 WORD $0x54ffff01 // b.ne LBB0_18 $-32(%rip) - WORD $0x140002cb // b LBB0_116 $2860(%rip) + WORD $0x140002e9 // b LBB0_119 $2980(%rip) LBB0_20: WORD $0xeb0a011f // cmp x8, x10 - WORD $0x54005922 // b.hs LBB0_116 $2852(%rip) + WORD $0x54005ce2 // b.hs LBB0_119 $2972(%rip) LBB0_21: WORD $0x91000510 // add x16, x8, #1 WORD $0xf9000030 // str x16, [x1] WORD $0x3868692a // ldrb w10, [x9, x8] WORD $0x7101695f // cmp w10, #90 - WORD $0x540006ec // b.gt LBB0_39 $220(%rip) + WORD $0x54000a6c // b.gt LBB0_40 $332(%rip) WORD $0x7100bd5f // cmp w10, #47 - WORD $0x54000b4d // b.le LBB0_44 $360(%rip) + WORD $0x54000ecd // b.le LBB0_45 $472(%rip) WORD $0x5100c14a // sub w10, w10, #48 WORD $0x7100295f // cmp w10, #10 - WORD $0x540055a2 // b.hs LBB0_110 $2740(%rip) + WORD $0x54005922 // b.hs LBB0_111 $2852(%rip) LBB0_24: WORD $0xf940040a // ldr x10, [x0, #8] - WORD $0xcb10014a // sub x10, x10, x16 - WORD $0xf100415f // cmp x10, #16 - WORD $0x540002c3 // b.lo LBB0_28 $88(%rip) + WORD $0xcb10014b // sub x11, x10, x16 + WORD $0x8b10012a // add x10, x9, x16 + WORD $0xf100417f // cmp x11, #16 + WORD $0x54000303 // b.lo LBB0_28 $96(%rip) + WORD $0xd280000c // mov x12, #0 WORD $0x4f01e580 // movi.16b v0, #44 WORD $0x4f06e7e1 // movi.16b v1, #223 WORD $0x4f02e7a2 // movi.16b v2, #93 Lloh0: - WORD $0x10fff3cb // adr x11, lCPI0_0 $-392(%rip) + WORD $0x10fff38d // adr x13, lCPI0_0 $-400(%rip) Lloh1: - WORD $0x3dc00163 // ldr q3, [x11, lCPI0_0@PAGEOFF] $0(%rip) + WORD $0x3dc001a3 // ldr q3, [x13, lCPI0_0@PAGEOFF] $0(%rip) Lloh2: - WORD $0x10fff40b // adr x11, lCPI0_1 $-384(%rip) + WORD $0x10fff3cd // adr x13, lCPI0_1 $-392(%rip) Lloh3: - WORD $0x3dc00164 // ldr q4, [x11, lCPI0_1@PAGEOFF] $0(%rip) + WORD $0x3dc001a4 // ldr q4, [x13, lCPI0_1@PAGEOFF] $0(%rip) LBB0_26: - WORD $0x3cf06925 // ldr q5, [x9, x16] + WORD $0x3dc00145 // ldr q5, [x10] WORD $0x6e208ca6 // cmeq.16b v6, v5, v0 WORD $0x4e211ca5 // and.16b v5, v5, v1 WORD $0x6e228ca5 // cmeq.16b v5, v5, v2 @@ -171,51 +173,76 @@ LBB0_26: WORD $0x4e231ca5 // and.16b v5, v5, v3 WORD $0x4e0400a5 // tbl.16b v5, { v5 }, v4 WORD $0x4e71b8a5 // addv.8h h5, v5 - WORD $0x1e2600ab // fmov w11, s5 - WORD $0x350002eb // cbnz w11, LBB0_36 $92(%rip) - WORD $0xd100414a // sub x10, x10, #16 - WORD $0x91004210 // add x16, x16, #16 - WORD $0xf1003d5f // cmp x10, #15 - WORD $0x54fffe68 // b.hi LBB0_26 $-52(%rip) + WORD $0x1e2600ad // fmov w13, s5 + WORD $0x350003ad // cbnz w13, LBB0_36 $116(%rip) + WORD $0x9100414a // add x10, x10, #16 + WORD $0xd100416b // sub x11, x11, #16 + WORD $0x9100418c // add x12, x12, #16 + WORD $0xf1003d7f // cmp x11, #15 + WORD $0x54fffe48 // b.hi LBB0_26 $-56(%rip) LBB0_28: - WORD $0x8b10012b // add x11, x9, x16 - WORD $0xb40001ea // cbz x10, LBB0_35 $60(%rip) - WORD $0x8b0a016c // add x12, x11, x10 - WORD $0xcb09016d // sub x13, x11, x9 + WORD $0xb40002ab // cbz x11, LBB0_35 $84(%rip) + WORD $0x8b0b014c // add x12, x10, x11 + WORD $0xcb09014d // sub x13, x10, x9 + WORD $0x5280002e // mov w14, #1 + WORD $0xd284c00f // mov x15, #9728 + WORD $0xf2c2002f // movk x15, #4097, lsl #32 LBB0_30: - WORD $0x3940016e // ldrb w14, [x11] - WORD $0x7100b1df // cmp w14, #44 - WORD $0x540052c0 // b.eq LBB0_112 $2648(%rip) - WORD $0x7101f5df // cmp w14, #125 - WORD $0x54005280 // b.eq LBB0_112 $2640(%rip) - WORD $0x710175df // cmp w14, #93 - WORD $0x54005240 // b.eq LBB0_112 $2632(%rip) - WORD $0x9100056b // add x11, x11, #1 + WORD $0x39400150 // ldrb w16, [x10] + WORD $0x7100b21f // cmp w16, #44 + WORD $0x9ad021d1 // lsl x17, x14, x16 + WORD $0x8a0f0231 // and x17, x17, x15 + WORD $0xfa409a24 // ccmp x17, #0, #4, ls + WORD $0x54005581 // b.ne LBB0_115 $2736(%rip) + WORD $0x7101f61f // cmp w16, #125 + WORD $0x54005540 // b.eq LBB0_115 $2728(%rip) + WORD $0x7101761f // cmp w16, #93 + WORD $0x54005500 // b.eq LBB0_115 $2720(%rip) + WORD $0x9100054a // add x10, x10, #1 WORD $0x910005ad // add x13, x13, #1 - WORD $0xf100054a // subs x10, x10, #1 - WORD $0x54fffec1 // b.ne LBB0_30 $-40(%rip) - WORD $0xaa0c03eb // mov x11, x12 + WORD $0xf100056b // subs x11, x11, #1 + WORD $0x54fffe61 // b.ne LBB0_30 $-52(%rip) + WORD $0xaa0c03ea // mov x10, x12 LBB0_35: - WORD $0xcb090169 // sub x9, x11, x9 - WORD $0x14000004 // b LBB0_37 $16(%rip) + WORD $0xcb090149 // sub x9, x10, x9 + WORD $0x1400029e // b LBB0_113 $2680(%rip) LBB0_36: - WORD $0x5ac00169 // rbit w9, w11 - WORD $0x5ac01129 // clz w9, w9 - WORD $0x8b100129 // add x9, x9, x16 -LBB0_37: - WORD $0xf9000029 // str x9, [x1] + WORD $0x5ac001ab // rbit w11, w13 + WORD $0x5ac0116b // clz w11, w11 + WORD $0xcb09014a // sub x10, x10, x9 + WORD $0x8b0b014a // add x10, x10, x11 + WORD $0xf900002a // str x10, [x1] + WORD $0xf100055f // cmp x10, #1 + WORD $0x5400530b // b.lt LBB0_114 $2656(%rip) + WORD $0x8b0c016a // add x10, x11, x12 + WORD $0x8b080129 // add x9, x9, x8 + WORD $0x5280002b // mov w11, #1 + WORD $0xd284c00c // mov x12, #9728 + WORD $0xf2c0002c // movk x12, #1, lsl #32 LBB0_38: - WORD $0xaa0803e0 // mov x0, x8 - WORD $0x1400028f // b LBB0_117 $2620(%rip) -LBB0_39: + WORD $0x386a692d // ldrb w13, [x9, x10] + WORD $0x710081bf // cmp w13, #32 + WORD $0x9acd216d // lsl x13, x11, x13 + WORD $0x8a0c01ad // and x13, x13, x12 + WORD $0xfa4099a4 // ccmp x13, #0, #4, ls + WORD $0x540051a0 // b.eq LBB0_114 $2612(%rip) + WORD $0x8b0a010d // add x13, x8, x10 + WORD $0xf900002d // str x13, [x1] + WORD $0xd100054a // sub x10, x10, #1 + WORD $0x8b0a010d // add x13, x8, x10 + WORD $0x910009ad // add x13, x13, #2 + WORD $0xf10005bf // cmp x13, #1 + WORD $0x54fffe8c // b.gt LBB0_38 $-48(%rip) + WORD $0x14000285 // b LBB0_114 $2580(%rip) +LBB0_40: WORD $0x7101b55f // cmp w10, #109 - WORD $0x5400054d // b.le LBB0_47 $168(%rip) + WORD $0x5400054d // b.le LBB0_48 $168(%rip) WORD $0x7101b95f // cmp w10, #110 - WORD $0x54002320 // b.eq LBB0_74 $1124(%rip) + WORD $0x54002320 // b.eq LBB0_75 $1124(%rip) WORD $0x7101d15f // cmp w10, #116 - WORD $0x540022e0 // b.eq LBB0_74 $1116(%rip) + WORD $0x540022e0 // b.eq LBB0_75 $1116(%rip) WORD $0x7101ed5f // cmp w10, #123 - WORD $0x54004e81 // b.ne LBB0_110 $2512(%rip) + WORD $0x54004e81 // b.ne LBB0_111 $2512(%rip) WORD $0xd2800007 // mov x7, #0 WORD $0xd280000f // mov x15, #0 WORD $0xd280000a // mov x10, #0 @@ -233,11 +260,11 @@ LBB0_39: WORD $0x91008129 // add x9, x9, #32 WORD $0x4f01e440 // movi.16b v0, #34 Lloh4: - WORD $0x10ffeb91 // adr x17, lCPI0_0 $-656(%rip) + WORD $0x10ffe811 // adr x17, lCPI0_0 $-768(%rip) Lloh5: WORD $0x3dc00221 // ldr q1, [x17, lCPI0_0@PAGEOFF] $0(%rip) Lloh6: - WORD $0x10ffebd1 // adr x17, lCPI0_1 $-648(%rip) + WORD $0x10ffe851 // adr x17, lCPI0_1 $-760(%rip) Lloh7: WORD $0x3dc00222 // ldr q2, [x17, lCPI0_1@PAGEOFF] $0(%rip) WORD $0x4f02e783 // movi.16b v3, #92 @@ -248,25 +275,25 @@ Lloh7: WORD $0x4f03e764 // movi.16b v4, #123 WORD $0x4f03e7a5 // movi.16b v5, #125 WORD $0x6f00e406 // movi.2d v6, #0000000000000000 - WORD $0x14000018 // b LBB0_51 $96(%rip) -LBB0_44: - WORD $0x34004d0a // cbz w10, LBB0_116 $2464(%rip) + WORD $0x14000018 // b LBB0_52 $96(%rip) +LBB0_45: + WORD $0x34004d4a // cbz w10, LBB0_119 $2472(%rip) WORD $0x7100895f // cmp w10, #34 - WORD $0x54001f40 // b.eq LBB0_75 $1000(%rip) + WORD $0x54001f40 // b.eq LBB0_76 $1000(%rip) WORD $0x7100b55f // cmp w10, #45 - WORD $0x54fff4c0 // b.eq LBB0_24 $-360(%rip) - WORD $0x14000251 // b LBB0_110 $2372(%rip) -LBB0_47: + WORD $0x54fff140 // b.eq LBB0_24 $-472(%rip) + WORD $0x14000251 // b LBB0_111 $2372(%rip) +LBB0_48: WORD $0x71016d5f // cmp w10, #91 - WORD $0x540027a0 // b.eq LBB0_84 $1268(%rip) + WORD $0x540027a0 // b.eq LBB0_85 $1268(%rip) WORD $0x7101995f // cmp w10, #102 - WORD $0x540049a1 // b.ne LBB0_110 $2356(%rip) + WORD $0x540049a1 // b.ne LBB0_111 $2356(%rip) WORD $0x91001509 // add x9, x8, #5 WORD $0xf940040a // ldr x10, [x0, #8] WORD $0xeb0a013f // cmp x9, x10 - WORD $0x54fff969 // b.ls LBB0_37 $-212(%rip) - WORD $0x1400025a // b LBB0_116 $2408(%rip) -LBB0_50: + WORD $0x54004a29 // b.ls LBB0_113 $2372(%rip) + WORD $0x1400025c // b LBB0_119 $2416(%rip) +LBB0_51: WORD $0x937ffce7 // asr x7, x7, #63 WORD $0x9e670267 // fmov d7, x19 WORD $0x0e2058e7 // cnt.8b v7, v7 @@ -275,10 +302,10 @@ LBB0_50: WORD $0x8b0a00aa // add x10, x5, x10 WORD $0x91010210 // add x16, x16, #64 WORD $0xaa0603e5 // mov x5, x6 -LBB0_51: - WORD $0xf10100a6 // subs x6, x5, #64 - WORD $0x540015cb // b.lt LBB0_58 $696(%rip) LBB0_52: + WORD $0xf10100a6 // subs x6, x5, #64 + WORD $0x540015cb // b.lt LBB0_59 $696(%rip) +LBB0_53: WORD $0xad404612 // ldp q18, q17, [x16] WORD $0xad411e10 // ldp q16, q7, [x16, #32] WORD $0x6e238e53 // cmeq.16b v19, v18, v3 @@ -307,11 +334,11 @@ LBB0_52: WORD $0xaa1402b4 // orr x20, x21, x20 WORD $0xaa130293 // orr x19, x20, x19 WORD $0xaa0f0274 // orr x20, x19, x15 - WORD $0xb5000094 // cbnz x20, LBB0_54 $16(%rip) + WORD $0xb5000094 // cbnz x20, LBB0_55 $16(%rip) WORD $0xd280000f // mov x15, #0 WORD $0xd2800013 // mov x19, #0 - WORD $0x1400000a // b LBB0_55 $40(%rip) -LBB0_54: + WORD $0x1400000a // b LBB0_56 $40(%rip) +LBB0_55: WORD $0x8a2f0274 // bic x20, x19, x15 WORD $0xaa1405f5 // orr x21, x15, x20, lsl #1 WORD $0x8a35026f // bic x15, x19, x21 @@ -321,7 +348,7 @@ LBB0_54: WORD $0xd37ffa73 // lsl x19, x19, #1 WORD $0xd200f273 // eor x19, x19, #0x5555555555555555 WORD $0x8a150273 // and x19, x19, x21 -LBB0_55: +LBB0_56: WORD $0x6e208e53 // cmeq.16b v19, v18, v0 WORD $0x4e211e73 // and.16b v19, v19, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 @@ -440,8 +467,8 @@ LBB0_55: WORD $0xaa1502d5 // orr x21, x22, x21 WORD $0xaa1402b4 // orr x20, x21, x20 WORD $0xea270294 // bics x20, x20, x7 - WORD $0x54ffeae0 // b.eq LBB0_50 $-676(%rip) -LBB0_56: + WORD $0x54ffeae0 // b.eq LBB0_51 $-676(%rip) +LBB0_57: WORD $0xd1000695 // sub x21, x20, #1 WORD $0x8a1302b6 // and x22, x21, x19 WORD $0x9e6702c7 // fmov d7, x22 @@ -450,99 +477,99 @@ LBB0_56: WORD $0x1e2600f6 // fmov w22, s7 WORD $0x8b0a02d6 // add x22, x22, x10 WORD $0xeb0b02df // cmp x22, x11 - WORD $0x54003109 // b.ls LBB0_109 $1568(%rip) + WORD $0x54003109 // b.ls LBB0_110 $1568(%rip) WORD $0x9100056b // add x11, x11, #1 WORD $0xea1402b4 // ands x20, x21, x20 - WORD $0x54fffea1 // b.ne LBB0_56 $-44(%rip) - WORD $0x17ffff4a // b LBB0_50 $-728(%rip) -LBB0_58: + WORD $0x54fffea1 // b.ne LBB0_57 $-44(%rip) + WORD $0x17ffff4a // b LBB0_51 $-728(%rip) +LBB0_59: WORD $0xf10000bf // cmp x5, #0 - WORD $0x540033ed // b.le LBB0_114 $1660(%rip) + WORD $0x5400342d // b.le LBB0_117 $1668(%rip) WORD $0xad019be6 // stp q6, q6, [sp, #48] WORD $0xad009be6 // stp q6, q6, [sp, #16] WORD $0x92402e13 // and x19, x16, #0xfff WORD $0xf13f067f // cmp x19, #4033 - WORD $0x54ffe9a3 // b.lo LBB0_52 $-716(%rip) + WORD $0x54ffe9a3 // b.lo LBB0_53 $-716(%rip) WORD $0xf10080b4 // subs x20, x5, #32 - WORD $0x540000a3 // b.lo LBB0_62 $20(%rip) + WORD $0x540000a3 // b.lo LBB0_63 $20(%rip) WORD $0xacc14207 // ldp q7, q16, [x16], #32 WORD $0xad00c3e7 // stp q7, q16, [sp, #16] WORD $0xaa0903f3 // mov x19, x9 - WORD $0x14000003 // b LBB0_63 $12(%rip) -LBB0_62: + WORD $0x14000003 // b LBB0_64 $12(%rip) +LBB0_63: WORD $0x910043f3 // add x19, sp, #16 WORD $0xaa0503f4 // mov x20, x5 -LBB0_63: +LBB0_64: WORD $0xf1004295 // subs x21, x20, #16 - WORD $0x54000243 // b.lo LBB0_69 $72(%rip) + WORD $0x54000243 // b.lo LBB0_70 $72(%rip) WORD $0x3cc10607 // ldr q7, [x16], #16 WORD $0x3c810667 // str q7, [x19], #16 WORD $0xaa1503f4 // mov x20, x21 WORD $0xf10022b5 // subs x21, x21, #8 - WORD $0x540001e2 // b.hs LBB0_70 $60(%rip) -LBB0_65: - WORD $0xf1001295 // subs x21, x20, #4 - WORD $0x54000243 // b.lo LBB0_71 $72(%rip) + WORD $0x540001e2 // b.hs LBB0_71 $60(%rip) LBB0_66: + WORD $0xf1001295 // subs x21, x20, #4 + WORD $0x54000243 // b.lo LBB0_72 $72(%rip) +LBB0_67: WORD $0xb8404614 // ldr w20, [x16], #4 WORD $0xb8004674 // str w20, [x19], #4 WORD $0xaa1503f4 // mov x20, x21 WORD $0xf1000ab5 // subs x21, x21, #2 - WORD $0x540001e2 // b.hs LBB0_72 $60(%rip) -LBB0_67: - WORD $0xb4000254 // cbz x20, LBB0_73 $72(%rip) + WORD $0x540001e2 // b.hs LBB0_73 $60(%rip) LBB0_68: + WORD $0xb4000254 // cbz x20, LBB0_74 $72(%rip) +LBB0_69: WORD $0x39400210 // ldrb w16, [x16] WORD $0x39000270 // strb w16, [x19] WORD $0x910043f0 // add x16, sp, #16 - WORD $0x17ffff32 // b LBB0_52 $-824(%rip) -LBB0_69: - WORD $0xf1002295 // subs x21, x20, #8 - WORD $0x54fffe63 // b.lo LBB0_65 $-52(%rip) + WORD $0x17ffff32 // b LBB0_53 $-824(%rip) LBB0_70: + WORD $0xf1002295 // subs x21, x20, #8 + WORD $0x54fffe63 // b.lo LBB0_66 $-52(%rip) +LBB0_71: WORD $0xf8408614 // ldr x20, [x16], #8 WORD $0xf8008674 // str x20, [x19], #8 WORD $0xaa1503f4 // mov x20, x21 WORD $0xf10012b5 // subs x21, x21, #4 - WORD $0x54fffe02 // b.hs LBB0_66 $-64(%rip) -LBB0_71: - WORD $0xf1000a95 // subs x21, x20, #2 - WORD $0x54fffe63 // b.lo LBB0_67 $-52(%rip) + WORD $0x54fffe02 // b.hs LBB0_67 $-64(%rip) LBB0_72: + WORD $0xf1000a95 // subs x21, x20, #2 + WORD $0x54fffe63 // b.lo LBB0_68 $-52(%rip) +LBB0_73: WORD $0x78402614 // ldrh w20, [x16], #2 WORD $0x78002674 // strh w20, [x19], #2 WORD $0xaa1503f4 // mov x20, x21 - WORD $0xb5fffe15 // cbnz x21, LBB0_68 $-64(%rip) -LBB0_73: - WORD $0x910043f0 // add x16, sp, #16 - WORD $0x17ffff23 // b LBB0_52 $-884(%rip) + WORD $0xb5fffe15 // cbnz x21, LBB0_69 $-64(%rip) LBB0_74: + WORD $0x910043f0 // add x16, sp, #16 + WORD $0x17ffff23 // b LBB0_53 $-884(%rip) +LBB0_75: WORD $0x91001109 // add x9, x8, #4 WORD $0xf940040a // ldr x10, [x0, #8] WORD $0xeb0a013f // cmp x9, x10 - WORD $0x54ffdbc9 // b.ls LBB0_37 $-1160(%rip) - WORD $0x1400016d // b LBB0_116 $1460(%rip) -LBB0_75: + WORD $0x54002c89 // b.ls LBB0_113 $1424(%rip) + WORD $0x1400016f // b LBB0_119 $1468(%rip) +LBB0_76: WORD $0xf940040b // ldr x11, [x0, #8] WORD $0xcb10016a // sub x10, x11, x16 WORD $0xf100815f // cmp x10, #32 - WORD $0x54002c4b // b.lt LBB0_113 $1416(%rip) + WORD $0x54002c8b // b.lt LBB0_116 $1424(%rip) WORD $0xd280000a // mov x10, #0 WORD $0xd280000d // mov x13, #0 WORD $0x8b08012c // add x12, x9, x8 WORD $0x4f01e440 // movi.16b v0, #34 Lloh8: - WORD $0x10ffc96e // adr x14, lCPI0_0 $-1748(%rip) + WORD $0x10ffc5ee // adr x14, lCPI0_0 $-1860(%rip) Lloh9: WORD $0x3dc001c1 // ldr q1, [x14, lCPI0_0@PAGEOFF] $0(%rip) WORD $0xcb08016b // sub x11, x11, x8 Lloh10: - WORD $0x10ffc98e // adr x14, lCPI0_1 $-1744(%rip) + WORD $0x10ffc60e // adr x14, lCPI0_1 $-1856(%rip) Lloh11: WORD $0x3dc001c2 // ldr q2, [x14, lCPI0_1@PAGEOFF] $0(%rip) WORD $0x528003ee // mov w14, #31 WORD $0x4f02e783 // movi.16b v3, #92 -LBB0_77: +LBB0_78: WORD $0x8b0a018f // add x15, x12, x10 WORD $0x3cc011e4 // ldur q4, [x15, #1] WORD $0x3cc111e5 // ldur q5, [x15, #17] @@ -570,7 +597,7 @@ LBB0_77: WORD $0x33103e30 // bfi w16, w17, #16, #16 WORD $0x7100021f // cmp w16, #0 WORD $0xfa4009a0 // ccmp x13, #0, #0, eq - WORD $0x540001a0 // b.eq LBB0_79 $52(%rip) + WORD $0x540001a0 // b.eq LBB0_80 $52(%rip) WORD $0x0a2d0211 // bic w17, w16, w13 WORD $0x2a1105a0 // orr w0, w13, w17, lsl #1 WORD $0x0a20020d // bic w13, w16, w0 @@ -582,17 +609,17 @@ LBB0_77: WORD $0x0a000210 // and w16, w16, w0 WORD $0x2a3003f0 // mvn w16, w16 WORD $0x8a0f020f // and x15, x16, x15 - WORD $0x14000002 // b LBB0_80 $8(%rip) -LBB0_79: - WORD $0xd280000d // mov x13, #0 + WORD $0x14000002 // b LBB0_81 $8(%rip) LBB0_80: - WORD $0xb50024af // cbnz x15, LBB0_111 $1172(%rip) + WORD $0xd280000d // mov x13, #0 +LBB0_81: + WORD $0xb50024af // cbnz x15, LBB0_112 $1172(%rip) WORD $0x9100814a // add x10, x10, #32 WORD $0xd10081ce // sub x14, x14, #32 WORD $0x8b0e016f // add x15, x11, x14 WORD $0xf100fdff // cmp x15, #63 - WORD $0x54fffa4c // b.gt LBB0_77 $-184(%rip) - WORD $0xb50026ed // cbnz x13, LBB0_118 $1244(%rip) + WORD $0x54fffa4c // b.gt LBB0_78 $-184(%rip) + WORD $0xb500272d // cbnz x13, LBB0_121 $1252(%rip) WORD $0x8b08012c // add x12, x9, x8 WORD $0x8b0a018c // add x12, x12, x10 WORD $0x9100058c // add x12, x12, #1 @@ -600,9 +627,9 @@ LBB0_80: WORD $0x8b0b014a // add x10, x10, x11 WORD $0x92800000 // mov x0, #-1 WORD $0xf100055f // cmp x10, #1 - WORD $0x5400280a // b.ge LBB0_121 $1280(%rip) - WORD $0x14000126 // b LBB0_117 $1176(%rip) -LBB0_84: + WORD $0x5400284a // b.ge LBB0_124 $1288(%rip) + WORD $0x14000128 // b LBB0_120 $1184(%rip) +LBB0_85: WORD $0xd2800007 // mov x7, #0 WORD $0xd280000f // mov x15, #0 WORD $0xd280000a // mov x10, #0 @@ -620,11 +647,11 @@ LBB0_84: WORD $0x91008129 // add x9, x9, #32 WORD $0x4f01e440 // movi.16b v0, #34 Lloh12: - WORD $0x10ffbf71 // adr x17, lCPI0_0 $-2068(%rip) + WORD $0x10ffbbf1 // adr x17, lCPI0_0 $-2180(%rip) Lloh13: WORD $0x3dc00221 // ldr q1, [x17, lCPI0_0@PAGEOFF] $0(%rip) Lloh14: - WORD $0x10ffbfb1 // adr x17, lCPI0_1 $-2060(%rip) + WORD $0x10ffbc31 // adr x17, lCPI0_1 $-2172(%rip) Lloh15: WORD $0x3dc00222 // ldr q2, [x17, lCPI0_1@PAGEOFF] $0(%rip) WORD $0x4f02e783 // movi.16b v3, #92 @@ -635,8 +662,8 @@ Lloh15: WORD $0x4f02e764 // movi.16b v4, #91 WORD $0x4f02e7a5 // movi.16b v5, #93 WORD $0x6f00e406 // movi.2d v6, #0000000000000000 - WORD $0x14000009 // b LBB0_86 $36(%rip) -LBB0_85: + WORD $0x14000009 // b LBB0_87 $36(%rip) +LBB0_86: WORD $0x937ffce7 // asr x7, x7, #63 WORD $0x9e670267 // fmov d7, x19 WORD $0x0e2058e7 // cnt.8b v7, v7 @@ -645,10 +672,10 @@ LBB0_85: WORD $0x8b0a00aa // add x10, x5, x10 WORD $0x91010210 // add x16, x16, #64 WORD $0xaa0603e5 // mov x5, x6 -LBB0_86: - WORD $0xf10100a6 // subs x6, x5, #64 - WORD $0x540015cb // b.lt LBB0_93 $696(%rip) LBB0_87: + WORD $0xf10100a6 // subs x6, x5, #64 + WORD $0x540015cb // b.lt LBB0_94 $696(%rip) +LBB0_88: WORD $0xad404612 // ldp q18, q17, [x16] WORD $0xad411e10 // ldp q16, q7, [x16, #32] WORD $0x6e238e53 // cmeq.16b v19, v18, v3 @@ -677,11 +704,11 @@ LBB0_87: WORD $0xaa1402b4 // orr x20, x21, x20 WORD $0xaa130293 // orr x19, x20, x19 WORD $0xaa0f0274 // orr x20, x19, x15 - WORD $0xb5000094 // cbnz x20, LBB0_89 $16(%rip) + WORD $0xb5000094 // cbnz x20, LBB0_90 $16(%rip) WORD $0xd280000f // mov x15, #0 WORD $0xd2800013 // mov x19, #0 - WORD $0x1400000a // b LBB0_90 $40(%rip) -LBB0_89: + WORD $0x1400000a // b LBB0_91 $40(%rip) +LBB0_90: WORD $0x8a2f0274 // bic x20, x19, x15 WORD $0xaa1405f5 // orr x21, x15, x20, lsl #1 WORD $0x8a35026f // bic x15, x19, x21 @@ -691,7 +718,7 @@ LBB0_89: WORD $0xd37ffa73 // lsl x19, x19, #1 WORD $0xd200f273 // eor x19, x19, #0x5555555555555555 WORD $0x8a150273 // and x19, x19, x21 -LBB0_90: +LBB0_91: WORD $0x6e208e53 // cmeq.16b v19, v18, v0 WORD $0x4e211e73 // and.16b v19, v19, v1 WORD $0x4e020273 // tbl.16b v19, { v19 }, v2 @@ -810,8 +837,8 @@ LBB0_90: WORD $0xaa1502d5 // orr x21, x22, x21 WORD $0xaa1402b4 // orr x20, x21, x20 WORD $0xea270294 // bics x20, x20, x7 - WORD $0x54ffeae0 // b.eq LBB0_85 $-676(%rip) -LBB0_91: + WORD $0x54ffeae0 // b.eq LBB0_86 $-676(%rip) +LBB0_92: WORD $0xd1000695 // sub x21, x20, #1 WORD $0x8a1302b6 // and x22, x21, x19 WORD $0x9e6702c7 // fmov d7, x22 @@ -820,73 +847,73 @@ LBB0_91: WORD $0x1e2600f6 // fmov w22, s7 WORD $0x8b0a02d6 // add x22, x22, x10 WORD $0xeb0b02df // cmp x22, x11 - WORD $0x540006c9 // b.ls LBB0_109 $216(%rip) + WORD $0x540006c9 // b.ls LBB0_110 $216(%rip) WORD $0x9100056b // add x11, x11, #1 WORD $0xea1402b4 // ands x20, x21, x20 - WORD $0x54fffea1 // b.ne LBB0_91 $-44(%rip) - WORD $0x17ffff4a // b LBB0_85 $-728(%rip) -LBB0_93: + WORD $0x54fffea1 // b.ne LBB0_92 $-44(%rip) + WORD $0x17ffff4a // b LBB0_86 $-728(%rip) +LBB0_94: WORD $0xf10000bf // cmp x5, #0 - WORD $0x540009ad // b.le LBB0_114 $308(%rip) + WORD $0x540009ed // b.le LBB0_117 $316(%rip) WORD $0xad019be6 // stp q6, q6, [sp, #48] WORD $0xad009be6 // stp q6, q6, [sp, #16] WORD $0x92402e13 // and x19, x16, #0xfff WORD $0xf13f067f // cmp x19, #4033 - WORD $0x54ffe9a3 // b.lo LBB0_87 $-716(%rip) + WORD $0x54ffe9a3 // b.lo LBB0_88 $-716(%rip) WORD $0xf10080b4 // subs x20, x5, #32 - WORD $0x540000a3 // b.lo LBB0_97 $20(%rip) + WORD $0x540000a3 // b.lo LBB0_98 $20(%rip) WORD $0xacc14207 // ldp q7, q16, [x16], #32 WORD $0xad00c3e7 // stp q7, q16, [sp, #16] WORD $0xaa0903f3 // mov x19, x9 - WORD $0x14000003 // b LBB0_98 $12(%rip) -LBB0_97: + WORD $0x14000003 // b LBB0_99 $12(%rip) +LBB0_98: WORD $0x910043f3 // add x19, sp, #16 WORD $0xaa0503f4 // mov x20, x5 -LBB0_98: +LBB0_99: WORD $0xf1004295 // subs x21, x20, #16 - WORD $0x54000243 // b.lo LBB0_104 $72(%rip) + WORD $0x54000243 // b.lo LBB0_105 $72(%rip) WORD $0x3cc10607 // ldr q7, [x16], #16 WORD $0x3c810667 // str q7, [x19], #16 WORD $0xaa1503f4 // mov x20, x21 WORD $0xf10022b5 // subs x21, x21, #8 - WORD $0x540001e2 // b.hs LBB0_105 $60(%rip) -LBB0_100: - WORD $0xf1001295 // subs x21, x20, #4 - WORD $0x54000243 // b.lo LBB0_106 $72(%rip) + WORD $0x540001e2 // b.hs LBB0_106 $60(%rip) LBB0_101: + WORD $0xf1001295 // subs x21, x20, #4 + WORD $0x54000243 // b.lo LBB0_107 $72(%rip) +LBB0_102: WORD $0xb8404614 // ldr w20, [x16], #4 WORD $0xb8004674 // str w20, [x19], #4 WORD $0xaa1503f4 // mov x20, x21 WORD $0xf1000ab5 // subs x21, x21, #2 - WORD $0x540001e2 // b.hs LBB0_107 $60(%rip) -LBB0_102: - WORD $0xb4000254 // cbz x20, LBB0_108 $72(%rip) + WORD $0x540001e2 // b.hs LBB0_108 $60(%rip) LBB0_103: + WORD $0xb4000254 // cbz x20, LBB0_109 $72(%rip) +LBB0_104: WORD $0x39400210 // ldrb w16, [x16] WORD $0x39000270 // strb w16, [x19] WORD $0x910043f0 // add x16, sp, #16 - WORD $0x17ffff32 // b LBB0_87 $-824(%rip) -LBB0_104: - WORD $0xf1002295 // subs x21, x20, #8 - WORD $0x54fffe63 // b.lo LBB0_100 $-52(%rip) + WORD $0x17ffff32 // b LBB0_88 $-824(%rip) LBB0_105: + WORD $0xf1002295 // subs x21, x20, #8 + WORD $0x54fffe63 // b.lo LBB0_101 $-52(%rip) +LBB0_106: WORD $0xf8408614 // ldr x20, [x16], #8 WORD $0xf8008674 // str x20, [x19], #8 WORD $0xaa1503f4 // mov x20, x21 WORD $0xf10012b5 // subs x21, x21, #4 - WORD $0x54fffe02 // b.hs LBB0_101 $-64(%rip) -LBB0_106: - WORD $0xf1000a95 // subs x21, x20, #2 - WORD $0x54fffe63 // b.lo LBB0_102 $-52(%rip) + WORD $0x54fffe02 // b.hs LBB0_102 $-64(%rip) LBB0_107: + WORD $0xf1000a95 // subs x21, x20, #2 + WORD $0x54fffe63 // b.lo LBB0_103 $-52(%rip) +LBB0_108: WORD $0x78402614 // ldrh w20, [x16], #2 WORD $0x78002674 // strh w20, [x19], #2 WORD $0xaa1503f4 // mov x20, x21 - WORD $0xb5fffe15 // cbnz x21, LBB0_103 $-64(%rip) -LBB0_108: - WORD $0x910043f0 // add x16, sp, #16 - WORD $0x17ffff23 // b LBB0_87 $-884(%rip) + WORD $0xb5fffe15 // cbnz x21, LBB0_104 $-64(%rip) LBB0_109: + WORD $0x910043f0 // add x16, sp, #16 + WORD $0x17ffff23 // b LBB0_88 $-884(%rip) +LBB0_110: WORD $0xf9400409 // ldr x9, [x0, #8] WORD $0xdac0028a // rbit x10, x20 WORD $0xdac0114a // clz x10, x10 @@ -899,34 +926,38 @@ LBB0_109: WORD $0x9a892569 // csinc x9, x11, x9, hs WORD $0xf9000029 // str x9, [x1] WORD $0xda9f9100 // csinv x0, x8, xzr, ls - WORD $0x14000014 // b LBB0_117 $80(%rip) -LBB0_110: + WORD $0x14000016 // b LBB0_120 $88(%rip) +LBB0_111: WORD $0xf9000028 // str x8, [x1] WORD $0x92800020 // mov x0, #-2 - WORD $0x14000011 // b LBB0_117 $68(%rip) -LBB0_111: + WORD $0x14000013 // b LBB0_120 $76(%rip) +LBB0_112: WORD $0xdac001e9 // rbit x9, x15 WORD $0xdac01129 // clz x9, x9 WORD $0x8b0a010a // add x10, x8, x10 WORD $0x8b0a0129 // add x9, x9, x10 WORD $0x91000929 // add x9, x9, #2 - WORD $0x17fffd7a // b LBB0_37 $-2584(%rip) -LBB0_112: - WORD $0xf900002d // str x13, [x1] - WORD $0x17fffd79 // b LBB0_38 $-2588(%rip) LBB0_113: + WORD $0xf9000029 // str x9, [x1] +LBB0_114: + WORD $0xaa0803e0 // mov x0, x8 + WORD $0x1400000b // b LBB0_120 $44(%rip) +LBB0_115: + WORD $0xf900002d // str x13, [x1] + WORD $0x17fffffd // b LBB0_114 $-12(%rip) +LBB0_116: WORD $0x8b10012c // add x12, x9, x16 WORD $0x92800000 // mov x0, #-1 WORD $0xf100055f // cmp x10, #1 - WORD $0x540003ca // b.ge LBB0_121 $120(%rip) - WORD $0x14000004 // b LBB0_117 $16(%rip) -LBB0_114: + WORD $0x540003ca // b.ge LBB0_124 $120(%rip) + WORD $0x14000004 // b LBB0_120 $16(%rip) +LBB0_117: WORD $0xf9400408 // ldr x8, [x0, #8] -LBB0_115: +LBB0_118: WORD $0xf9000028 // str x8, [x1] -LBB0_116: +LBB0_119: WORD $0x92800000 // mov x0, #-1 -LBB0_117: +LBB0_120: WORD $0xa94afbfd // ldp fp, lr, [sp, #168] WORD $0xa949cff4 // ldp x20, x19, [sp, #152] WORD $0xa948d7f6 // ldp x22, x21, [sp, #136] @@ -935,10 +966,10 @@ LBB0_117: WORD $0xa945effc // ldp x28, x27, [sp, #88] WORD $0x910303ff // add sp, sp, #192 WORD $0xd65f03c0 // ret -LBB0_118: +LBB0_121: WORD $0xd100056c // sub x12, x11, #1 WORD $0xeb0a019f // cmp x12, x10 - WORD $0x54fffea0 // b.eq LBB0_116 $-44(%rip) + WORD $0x54fffea0 // b.eq LBB0_119 $-44(%rip) WORD $0x8b08012c // add x12, x9, x8 WORD $0x8b0a018c // add x12, x12, x10 WORD $0x9100098c // add x12, x12, #2 @@ -946,30 +977,30 @@ LBB0_118: WORD $0xd100094a // sub x10, x10, #2 WORD $0x92800000 // mov x0, #-1 WORD $0xf100055f // cmp x10, #1 - WORD $0x540000ea // b.ge LBB0_121 $28(%rip) - WORD $0x17ffffed // b LBB0_117 $-76(%rip) -LBB0_120: + WORD $0x540000ea // b.ge LBB0_124 $28(%rip) + WORD $0x17ffffed // b LBB0_120 $-76(%rip) +LBB0_123: WORD $0x9280002b // mov x11, #-2 WORD $0x5280004d // mov w13, #2 WORD $0x8b0d018c // add x12, x12, x13 WORD $0xab0b014a // adds x10, x10, x11 - WORD $0x54fffd0d // b.le LBB0_117 $-96(%rip) -LBB0_121: + WORD $0x54fffd0d // b.le LBB0_120 $-96(%rip) +LBB0_124: WORD $0x3940018b // ldrb w11, [x12] WORD $0x7101717f // cmp w11, #92 - WORD $0x54ffff20 // b.eq LBB0_120 $-28(%rip) + WORD $0x54ffff20 // b.eq LBB0_123 $-28(%rip) WORD $0x7100897f // cmp w11, #34 - WORD $0x540000e0 // b.eq LBB0_124 $28(%rip) + WORD $0x540000e0 // b.eq LBB0_127 $28(%rip) WORD $0x9280000b // mov x11, #-1 WORD $0x5280002d // mov w13, #1 WORD $0x8b0d018c // add x12, x12, x13 WORD $0xab0b014a // adds x10, x10, x11 - WORD $0x54fffeec // b.gt LBB0_121 $-36(%rip) - WORD $0x17ffffdd // b LBB0_117 $-140(%rip) -LBB0_124: + WORD $0x54fffeec // b.gt LBB0_124 $-36(%rip) + WORD $0x17ffffdd // b LBB0_120 $-140(%rip) +LBB0_127: WORD $0xcb090189 // sub x9, x12, x9 WORD $0x91000529 // add x9, x9, #1 - WORD $0x17fffd49 // b LBB0_37 $-2780(%rip) + WORD $0x17ffffcd // b LBB0_113 $-204(%rip) // .p2align 2, 0x00 _MASK_USE_NUMBER: WORD $0x00000002 // .long 2 diff --git a/vendor/github.com/bytedance/sonic/internal/native/neon/validate_one_arm64.s b/vendor/github.com/bytedance/sonic/internal/native/neon/validate_one_arm64.s index faaae30..6e80e93 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/neon/validate_one_arm64.s +++ b/vendor/github.com/bytedance/sonic/internal/native/neon/validate_one_arm64.s @@ -69,7 +69,7 @@ _validate_one: WORD $0xa90dfbfd // stp fp, lr, [sp, #216] WORD $0xa93ffbfd // stp fp, lr, [sp, #-8] WORD $0xd10023fd // sub fp, sp, #8 - WORD $0xaa0003fb // mov x27, x0 + WORD $0xaa0003fe // mov lr, x0 Lloh0: WORD $0x10fffd28 // adr x8, lCPI0_0 $-92(%rip) Lloh1: @@ -83,7 +83,7 @@ Lloh1: WORD $0x5280002c // mov w12, #1 WORD $0xd284c00d // mov x13, #9728 WORD $0xf2c0002d // movk x13, #1, lsl #32 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x4f01e440 // movi.16b v0, #34 WORD $0x4f02e781 // movi.16b v1, #92 Lloh2: @@ -112,12 +112,12 @@ Lloh5: WORD $0x6f00e417 // movi.2d v23, #0000000000000000 WORD $0x4f03e778 // movi.16b v24, #123 WORD $0x4f03e7b9 // movi.16b v25, #125 - WORD $0x52800036 // mov w22, #1 + WORD $0x52800037 // mov w23, #1 LBB0_1: - WORD $0xa9403b7e // ldp lr, x14, [x27] + WORD $0xa9403bd4 // ldp x20, x14, [lr] WORD $0xeb0e027f // cmp x19, x14 WORD $0x54000162 // b.hs LBB0_6 $44(%rip) - WORD $0x38736bc8 // ldrb w8, [lr, x19] + WORD $0x38736a88 // ldrb w8, [x20, x19] WORD $0x7100351f // cmp w8, #13 WORD $0x54000100 // b.eq LBB0_6 $32(%rip) WORD $0x7100811f // cmp w8, #32 @@ -131,7 +131,7 @@ LBB0_6: WORD $0x91000668 // add x8, x19, #1 WORD $0xeb0e011f // cmp x8, x14 WORD $0x54000122 // b.hs LBB0_10 $36(%rip) - WORD $0x38686bc0 // ldrb w0, [lr, x8] + WORD $0x38686a80 // ldrb w0, [x20, x8] WORD $0x7100341f // cmp w0, #13 WORD $0x540000c0 // b.eq LBB0_10 $24(%rip) WORD $0x7100801f // cmp w0, #32 @@ -143,7 +143,7 @@ LBB0_10: WORD $0x91000a68 // add x8, x19, #2 WORD $0xeb0e011f // cmp x8, x14 WORD $0x54000122 // b.hs LBB0_14 $36(%rip) - WORD $0x38686bc0 // ldrb w0, [lr, x8] + WORD $0x38686a80 // ldrb w0, [x20, x8] WORD $0x7100341f // cmp w0, #13 WORD $0x540000c0 // b.eq LBB0_14 $24(%rip) WORD $0x7100801f // cmp w0, #32 @@ -155,7 +155,7 @@ LBB0_14: WORD $0x91000e68 // add x8, x19, #3 WORD $0xeb0e011f // cmp x8, x14 WORD $0x54000122 // b.hs LBB0_18 $36(%rip) - WORD $0x38686bc0 // ldrb w0, [lr, x8] + WORD $0x38686a80 // ldrb w0, [x20, x8] WORD $0x7100341f // cmp w0, #13 WORD $0x540000c0 // b.eq LBB0_18 $24(%rip) WORD $0x7100801f // cmp w0, #32 @@ -166,9 +166,9 @@ LBB0_14: LBB0_18: WORD $0x91001268 // add x8, x19, #4 WORD $0xeb0e011f // cmp x8, x14 - WORD $0x540171c2 // b.hs LBB0_576 $11832(%rip) + WORD $0x540178a2 // b.hs LBB0_589 $12052(%rip) LBB0_19: - WORD $0x38686bcf // ldrb w15, [lr, x8] + WORD $0x38686a8f // ldrb w15, [x20, x8] WORD $0x710081ff // cmp w15, #32 WORD $0x9acf218f // lsl x15, x12, x15 WORD $0x8a0d01ef // and x15, x15, x13 @@ -177,17 +177,17 @@ LBB0_19: WORD $0x91000508 // add x8, x8, #1 WORD $0xeb0801df // cmp x14, x8 WORD $0x54ffff01 // b.ne LBB0_19 $-32(%rip) - WORD $0x14000b85 // b LBB0_577 $11796(%rip) + WORD $0x14000bbc // b LBB0_590 $12016(%rip) LBB0_21: WORD $0xeb0e011f // cmp x8, x14 - WORD $0x54017062 // b.hs LBB0_577 $11788(%rip) + WORD $0x54017742 // b.hs LBB0_590 $12008(%rip) LBB0_22: WORD $0x91000513 // add x19, x8, #1 WORD $0xf9000033 // str x19, [x1] - WORD $0x8b0803c6 // add x6, lr, x8 + WORD $0x8b080286 // add x6, x20, x8 WORD $0x394000c5 // ldrb w5, [x6] - WORD $0x34016fc5 // cbz w5, LBB0_577 $11768(%rip) - WORD $0xd10006ce // sub x14, x22, #1 + WORD $0x340176a5 // cbz w5, LBB0_590 $11988(%rip) + WORD $0xd10006ee // sub x14, x23, #1 WORD $0xf86e7920 // ldr x0, [x9, x14, lsl #3] WORD $0xb100057f // cmn x11, #1 WORD $0x9a8b010b // csel x11, x8, x11, eq @@ -200,20 +200,20 @@ LBB0_22: WORD $0x71000c1f // cmp w0, #3 WORD $0x54001a01 // b.ne LBB0_60 $832(%rip) WORD $0x710088bf // cmp w5, #34 - WORD $0x540160c1 // b.ne LBB0_542 $11288(%rip) + WORD $0x540167a1 // b.ne LBB0_555 $11508(%rip) WORD $0x5280008f // mov w15, #4 WORD $0xf82e792f // str x15, [x9, x14, lsl #3] WORD $0x37303203 // tbnz w3, #6, LBB0_114 $1600(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] - WORD $0xeb1301d6 // subs x22, x14, x19 - WORD $0x372845c3 // tbnz w3, #5, LBB0_142 $2232(%rip) - WORD $0x540160a0 // b.eq LBB0_545 $11284(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x5400f963 // b.lo LBB0_366 $7980(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] + WORD $0xeb1301d7 // subs x23, x14, x19 + WORD $0x372848c3 // tbnz w3, #5, LBB0_147 $2328(%rip) + WORD $0x54016780 // b.eq LBB0_558 $11504(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x5400ff63 // b.lo LBB0_376 $8172(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 LBB0_33: - WORD $0x8b1303ce // add x14, lr, x19 + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad406dda // ldp q26, q27, [x14] WORD $0xad4175dc // ldp q28, q29, [x14, #32] WORD $0x6e208f5e // cmeq.16b v30, v26, v0 @@ -239,42 +239,42 @@ LBB0_33: WORD $0x4e221d3e // and.16b v30, v9, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d4 // fmov w20, s30 + WORD $0x1e2603d5 // fmov w21, s30 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 + WORD $0x1e260356 // fmov w22, s26 WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260357 // fmov w23, s26 + WORD $0x1e260358 // fmov w24, s26 WORD $0x4e221f9a // and.16b v26, v28, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260358 // fmov w24, s26 + WORD $0x1e260359 // fmov w25, s26 WORD $0x4e221fba // and.16b v26, v29, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260359 // fmov w25, s26 + WORD $0x1e26035a // fmov w26, s26 WORD $0xd3607ca5 // lsl x5, x5, #32 - WORD $0xaa14c0a5 // orr x5, x5, x20, lsl #48 + WORD $0xaa15c0a5 // orr x5, x5, x21, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f00af // orr x15, x5, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607f0f // lsl x15, x24, #32 - WORD $0xaa19c1ef // orr x15, x15, x25, lsl #48 - WORD $0x53103ee5 // lsl w5, w23, #16 + WORD $0xd3607f2f // lsl x15, x25, #32 + WORD $0xaa1ac1ef // orr x15, x15, x26, lsl #48 + WORD $0x53103f05 // lsl w5, w24, #16 WORD $0xaa0501ef // orr x15, x15, x5 - WORD $0xaa1501e5 // orr x5, x15, x21 + WORD $0xaa1601e5 // orr x5, x15, x22 WORD $0xb5000105 // cbnz x5, LBB0_37 $32(%rip) WORD $0xb5000186 // cbnz x6, LBB0_38 $48(%rip) WORD $0xb50002ce // cbnz x14, LBB0_39 $88(%rip) LBB0_36: - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 + WORD $0xf100feff // cmp x23, #63 WORD $0x54fff8a8 // b.hi LBB0_33 $-236(%rip) - WORD $0x14000774 // b LBB0_360 $7632(%rip) + WORD $0x140007a4 // b LBB0_370 $7824(%rip) LBB0_37: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 @@ -283,14 +283,14 @@ LBB0_37: WORD $0x9a8f1000 // csel x0, x0, x15, ne LBB0_38: WORD $0x8a2600af // bic x15, x5, x6 - WORD $0xaa0f04d4 // orr x20, x6, x15, lsl #1 - WORD $0x8a3400a5 // bic x5, x5, x20 + WORD $0xaa0f04d5 // orr x21, x6, x15, lsl #1 + WORD $0x8a3500a5 // bic x5, x5, x21 WORD $0x9201f0a5 // and x5, x5, #0xaaaaaaaaaaaaaaaa WORD $0xab0f00af // adds x15, x5, x15 WORD $0x1a9f37e6 // cset w6, hs WORD $0xd37ff9ef // lsl x15, x15, #1 WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 - WORD $0x8a1401ef // and x15, x15, x20 + WORD $0x8a1501ef // and x15, x15, x21 WORD $0x8a2f01ce // bic x14, x14, x15 WORD $0xb4fffd8e // cbz x14, LBB0_36 $-80(%rip) LBB0_39: @@ -298,8 +298,8 @@ LBB0_39: WORD $0xdac011ce // clz x14, x14 WORD $0x8b1301ce // add x14, x14, x19 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6f8baf3 // tbz x19, #63, LBB0_283 $5980(%rip) - WORD $0x14000aac // b LBB0_544 $10928(%rip) + WORD $0xb6f93153 // tbz x19, #63, LBB0_478 $9768(%rip) + WORD $0x14000ae3 // b LBB0_557 $11148(%rip) LBB0_40: WORD $0x7100101f // cmp w0, #4 WORD $0x54000d40 // b.eq LBB0_58 $424(%rip) @@ -311,17 +311,17 @@ LBB0_40: WORD $0x54002061 // b.ne LBB0_99 $1036(%rip) WORD $0x5280004f // mov w15, #2 WORD $0xf82e792f // str x15, [x9, x14, lsl #3] - WORD $0x373031a3 // tbnz w3, #6, LBB0_133 $1588(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] - WORD $0xeb1301d6 // subs x22, x14, x19 - WORD $0x372851c3 // tbnz w3, #5, LBB0_182 $2616(%rip) - WORD $0x540153e0 // b.eq LBB0_545 $10876(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x5400fd43 // b.lo LBB0_395 $8104(%rip) + WORD $0x373034a3 // tbnz w3, #6, LBB0_138 $1684(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] + WORD $0xeb1301d7 // subs x23, x14, x19 + WORD $0x372854c3 // tbnz w3, #5, LBB0_187 $2712(%rip) + WORD $0x54015ac0 // b.eq LBB0_558 $11096(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x54010343 // b.lo LBB0_405 $8296(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 LBB0_49: - WORD $0x8b1303ce // add x14, lr, x19 + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad406dda // ldp q26, q27, [x14] WORD $0xad4175dc // ldp q28, q29, [x14, #32] WORD $0x6e208f5e // cmeq.16b v30, v26, v0 @@ -347,42 +347,42 @@ LBB0_49: WORD $0x4e221d3e // and.16b v30, v9, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d4 // fmov w20, s30 + WORD $0x1e2603d5 // fmov w21, s30 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 + WORD $0x1e260356 // fmov w22, s26 WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260357 // fmov w23, s26 + WORD $0x1e260358 // fmov w24, s26 WORD $0x4e221f9a // and.16b v26, v28, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260358 // fmov w24, s26 + WORD $0x1e260359 // fmov w25, s26 WORD $0x4e221fba // and.16b v26, v29, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260359 // fmov w25, s26 + WORD $0x1e26035a // fmov w26, s26 WORD $0xd3607ca5 // lsl x5, x5, #32 - WORD $0xaa14c0a5 // orr x5, x5, x20, lsl #48 + WORD $0xaa15c0a5 // orr x5, x5, x21, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f00af // orr x15, x5, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607f0f // lsl x15, x24, #32 - WORD $0xaa19c1ef // orr x15, x15, x25, lsl #48 - WORD $0x53103ee5 // lsl w5, w23, #16 + WORD $0xd3607f2f // lsl x15, x25, #32 + WORD $0xaa1ac1ef // orr x15, x15, x26, lsl #48 + WORD $0x53103f05 // lsl w5, w24, #16 WORD $0xaa0501ef // orr x15, x15, x5 - WORD $0xaa1501e5 // orr x5, x15, x21 + WORD $0xaa1601e5 // orr x5, x15, x22 WORD $0xb5000105 // cbnz x5, LBB0_53 $32(%rip) WORD $0xb5000186 // cbnz x6, LBB0_54 $48(%rip) WORD $0xb50002ce // cbnz x14, LBB0_55 $88(%rip) LBB0_52: - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 + WORD $0xf100feff // cmp x23, #63 WORD $0x54fff8a8 // b.hi LBB0_49 $-236(%rip) - WORD $0x140007a3 // b LBB0_392 $7820(%rip) + WORD $0x140007d3 // b LBB0_402 $8012(%rip) LBB0_53: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 @@ -391,14 +391,14 @@ LBB0_53: WORD $0x9a8f1000 // csel x0, x0, x15, ne LBB0_54: WORD $0x8a2600af // bic x15, x5, x6 - WORD $0xaa0f04d4 // orr x20, x6, x15, lsl #1 - WORD $0x8a3400a5 // bic x5, x5, x20 + WORD $0xaa0f04d5 // orr x21, x6, x15, lsl #1 + WORD $0x8a3500a5 // bic x5, x5, x21 WORD $0x9201f0a5 // and x5, x5, #0xaaaaaaaaaaaaaaaa WORD $0xab0f00af // adds x15, x5, x15 WORD $0x1a9f37e6 // cset w6, hs WORD $0xd37ff9ef // lsl x15, x15, #1 WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 - WORD $0x8a1401ef // and x15, x15, x20 + WORD $0x8a1501ef // and x15, x15, x21 WORD $0x8a2f01ce // bic x14, x14, x15 WORD $0xb4fffd8e // cbz x14, LBB0_52 $-80(%rip) LBB0_55: @@ -406,19 +406,19 @@ LBB0_55: WORD $0xdac011ce // clz x14, x14 WORD $0x8b1301ce // add x14, x14, x19 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6f85593 // tbz x19, #63, LBB0_194 $2736(%rip) - WORD $0x14000a46 // b LBB0_544 $10520(%rip) + WORD $0xb6f85893 // tbz x19, #63, LBB0_199 $2832(%rip) + WORD $0x14000a7d // b LBB0_557 $10740(%rip) LBB0_56: WORD $0x7100b0bf // cmp w5, #44 WORD $0x54001820 // b.eq LBB0_110 $772(%rip) WORD $0x710174bf // cmp w5, #93 WORD $0x540014c0 // b.eq LBB0_101 $664(%rip) - WORD $0x14000a3d // b LBB0_542 $10484(%rip) + WORD $0x14000a74 // b LBB0_555 $10704(%rip) LBB0_58: WORD $0x7100e8bf // cmp w5, #58 - WORD $0x54014761 // b.ne LBB0_542 $10476(%rip) + WORD $0x54014e41 // b.ne LBB0_555 $10696(%rip) WORD $0xf82e793f // str xzr, [x9, x14, lsl #3] - WORD $0x1400056b // b LBB0_284 $5548(%rip) + WORD $0x1400091e // b LBB0_480 $9336(%rip) LBB0_60: WORD $0xf900004e // str x14, [x2] WORD $0x92800020 // mov x0, #-2 @@ -427,36 +427,36 @@ LBB0_60: LBB0_61: WORD $0x5100c0ae // sub w14, w5, #48 WORD $0x710029df // cmp w14, #10 - WORD $0x54003c02 // b.hs LBB0_155 $1920(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0x54003f02 // b.hs LBB0_160 $2016(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0x37301f43 // tbnz w3, #6, LBB0_121 $1000(%rip) WORD $0xeb0801ce // subs x14, x14, x8 - WORD $0x540146e0 // b.eq LBB0_546 $10460(%rip) + WORD $0x54014dc0 // b.eq LBB0_559 $10680(%rip) WORD $0x394000cf // ldrb w15, [x6] WORD $0x7100c1ff // cmp w15, #48 WORD $0x540001a1 // b.ne LBB0_68 $52(%rip) WORD $0xf10005df // cmp x14, #1 - WORD $0x5400aae0 // b.eq LBB0_283 $5468(%rip) - WORD $0x38736bcf // ldrb w15, [lr, x19] + WORD $0x54012140 // b.eq LBB0_478 $9256(%rip) + WORD $0x38736a8f // ldrb w15, [x20, x19] WORD $0x5100b9e0 // sub w0, w15, #46 WORD $0x7100dc1f // cmp w0, #55 - WORD $0x5400aa68 // b.hi LBB0_283 $5452(%rip) + WORD $0x540120c8 // b.hi LBB0_478 $9240(%rip) WORD $0x9ac0218f // lsl x15, x12, x0 WORD $0xb20903f1 // mov x17, #36028797027352576 WORD $0xf2800031 // movk x17, #1 WORD $0xea1101ff // tst x15, x17 WORD $0x12800011 // mov w17, #-1 - WORD $0x5400a9a0 // b.eq LBB0_283 $5428(%rip) + WORD $0x54012000 // b.eq LBB0_478 $9216(%rip) LBB0_68: WORD $0xf10041df // cmp x14, #16 - WORD $0x54011363 // b.lo LBB0_458 $8812(%rip) + WORD $0x54011963 // b.lo LBB0_468 $9004(%rip) WORD $0xd2800005 // mov x5, #0 - WORD $0xd280001a // mov x26, #0 - WORD $0x92800016 // mov x22, #-1 + WORD $0xd280001b // mov x27, #0 + WORD $0x92800017 // mov x23, #-1 WORD $0x92800013 // mov x19, #-1 WORD $0x92800000 // mov x0, #-1 LBB0_70: - WORD $0x3cfa68da // ldr q26, [x6, x26] + WORD $0x3cfb68da // ldr q26, [x6, x27] WORD $0x6e258f5b // cmeq.16b v27, v26, v5 WORD $0x6e268f5c // cmeq.16b v28, v26, v6 WORD $0x6e278f5d // cmeq.16b v29, v26, v7 @@ -475,133 +475,133 @@ LBB0_70: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x4e221f9a // and.16b v26, v28, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260357 // fmov w23, s26 + WORD $0x1e260358 // fmov w24, s26 WORD $0x4e221fba // and.16b v26, v29, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 - WORD $0x2a3503f5 // mvn w21, w21 - WORD $0x32103eb5 // orr w21, w21, #0xffff0000 - WORD $0x5ac002b5 // rbit w21, w21 - WORD $0x5ac012b5 // clz w21, w21 - WORD $0x1ad52238 // lsl w24, w17, w21 - WORD $0x0a3801f9 // bic w25, w15, w24 - WORD $0x0a380291 // bic w17, w20, w24 - WORD $0x0a3802e7 // bic w7, w23, w24 - WORD $0x710042bf // cmp w21, #16 - WORD $0x1a9901f8 // csel w24, w15, w25, eq - WORD $0x1a910294 // csel w20, w20, w17, eq - WORD $0x1a8702f9 // csel w25, w23, w7, eq - WORD $0x5100070f // sub w15, w24, #1 - WORD $0x6a1801ef // ands w15, w15, w24 - WORD $0x5400d5e1 // b.ne LBB0_364 $6844(%rip) - WORD $0x5100068f // sub w15, w20, #1 - WORD $0x6a1401ef // ands w15, w15, w20 - WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x12800011 // mov w17, #-1 - WORD $0x5400d281 // b.ne LBB0_358 $6736(%rip) + WORD $0x1e260356 // fmov w22, s26 + WORD $0x2a3603f6 // mvn w22, w22 + WORD $0x32103ed6 // orr w22, w22, #0xffff0000 + WORD $0x5ac002d6 // rbit w22, w22 + WORD $0x5ac012d6 // clz w22, w22 + WORD $0x1ad62239 // lsl w25, w17, w22 + WORD $0x0a3901fa // bic w26, w15, w25 + WORD $0x0a3902b1 // bic w17, w21, w25 + WORD $0x0a390307 // bic w7, w24, w25 + WORD $0x710042df // cmp w22, #16 + WORD $0x1a9a01f9 // csel w25, w15, w26, eq + WORD $0x1a9102b5 // csel w21, w21, w17, eq + WORD $0x1a87031a // csel w26, w24, w7, eq WORD $0x5100072f // sub w15, w25, #1 WORD $0x6a1901ef // ands w15, w15, w25 - WORD $0x5400d221 // b.ne LBB0_358 $6724(%rip) - WORD $0x340000d8 // cbz w24, LBB0_76 $24(%rip) - WORD $0x5ac0030f // rbit w15, w24 - WORD $0x5ac011f7 // clz w23, w15 + WORD $0x5400dbe1 // b.ne LBB0_374 $7036(%rip) + WORD $0x510006af // sub w15, w21, #1 + WORD $0x6a1501ef // ands w15, w15, w21 + WORD $0x92f00007 // mov x7, #9223372036854775807 + WORD $0x12800011 // mov w17, #-1 + WORD $0x5400d881 // b.ne LBB0_368 $6928(%rip) + WORD $0x5100074f // sub w15, w26, #1 + WORD $0x6a1a01ef // ands w15, w15, w26 + WORD $0x5400d821 // b.ne LBB0_368 $6916(%rip) + WORD $0x340000d9 // cbz w25, LBB0_76 $24(%rip) + WORD $0x5ac0032f // rbit w15, w25 + WORD $0x5ac011f8 // clz w24, w15 WORD $0xb100041f // cmn x0, #1 - WORD $0x5400e5e1 // b.ne LBB0_394 $7356(%rip) - WORD $0x8b170340 // add x0, x26, x23 + WORD $0x5400ebe1 // b.ne LBB0_404 $7548(%rip) + WORD $0x8b180360 // add x0, x27, x24 LBB0_76: - WORD $0x340000d4 // cbz w20, LBB0_79 $24(%rip) - WORD $0x5ac0028f // rbit w15, w20 - WORD $0x5ac011f4 // clz w20, w15 + WORD $0x340000d5 // cbz w21, LBB0_79 $24(%rip) + WORD $0x5ac002af // rbit w15, w21 + WORD $0x5ac011f5 // clz w21, w15 WORD $0xb100067f // cmn x19, #1 - WORD $0x5400d281 // b.ne LBB0_362 $6736(%rip) - WORD $0x8b140353 // add x19, x26, x20 + WORD $0x5400d881 // b.ne LBB0_372 $6928(%rip) + WORD $0x8b150373 // add x19, x27, x21 LBB0_79: - WORD $0x340000d9 // cbz w25, LBB0_82 $24(%rip) - WORD $0x5ac0032f // rbit w15, w25 - WORD $0x5ac011f4 // clz w20, w15 - WORD $0xb10006df // cmn x22, #1 - WORD $0x5400d1c1 // b.ne LBB0_362 $6712(%rip) - WORD $0x8b140356 // add x22, x26, x20 + WORD $0x340000da // cbz w26, LBB0_82 $24(%rip) + WORD $0x5ac0034f // rbit w15, w26 + WORD $0x5ac011f5 // clz w21, w15 + WORD $0xb10006ff // cmn x23, #1 + WORD $0x5400d7c1 // b.ne LBB0_372 $6904(%rip) + WORD $0x8b150377 // add x23, x27, x21 LBB0_82: - WORD $0x710042bf // cmp w21, #16 - WORD $0x540033c1 // b.ne LBB0_167 $1656(%rip) - WORD $0x9100435a // add x26, x26, #16 + WORD $0x710042df // cmp w22, #16 + WORD $0x540036c1 // b.ne LBB0_172 $1752(%rip) + WORD $0x9100437b // add x27, x27, #16 WORD $0xd10040a5 // sub x5, x5, #16 - WORD $0x8b0501d5 // add x21, x14, x5 - WORD $0xf1003ebf // cmp x21, #15 + WORD $0x8b0501d6 // add x22, x14, x5 + WORD $0xf1003edf // cmp x22, #15 WORD $0x54fff6a8 // b.hi LBB0_70 $-300(%rip) - WORD $0x8b1a00c5 // add x5, x6, x26 - WORD $0xeb1a01df // cmp x14, x26 - WORD $0x54003300 // b.eq LBB0_168 $1632(%rip) + WORD $0x8b1b00c5 // add x5, x6, x27 + WORD $0xeb1b01df // cmp x14, x27 + WORD $0x54003600 // b.eq LBB0_173 $1728(%rip) LBB0_85: - WORD $0x8b1500b9 // add x25, x5, x21 + WORD $0x8b1600ba // add x26, x5, x22 WORD $0xaa2503ee // mvn x14, x5 - WORD $0x8b1e010f // add x15, x8, lr + WORD $0x8b14010f // add x15, x8, x20 WORD $0x8b0f01ce // add x14, x14, x15 - WORD $0xcb0600ba // sub x26, x5, x6 - WORD $0xaa0503fe // mov lr, x5 + WORD $0xcb0600b4 // sub x20, x5, x6 + WORD $0xaa0503fb // mov x27, x5 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x14000009 // b LBB0_88 $36(%rip) LBB0_86: WORD $0xb100067f // cmn x19, #1 - WORD $0xaa1a03f3 // mov x19, x26 + WORD $0xaa1403f3 // mov x19, x20 WORD $0x540003a1 // b.ne LBB0_97 $116(%rip) LBB0_87: WORD $0xd10005ce // sub x14, x14, #1 - WORD $0x9100075a // add x26, x26, #1 - WORD $0xaa1e03e5 // mov x5, lr - WORD $0xd10006b5 // sub x21, x21, #1 - WORD $0xb400a5d5 // cbz x21, LBB0_294 $5304(%rip) + WORD $0x91000694 // add x20, x20, #1 + WORD $0xaa1b03e5 // mov x5, x27 + WORD $0xd10006d6 // sub x22, x22, #1 + WORD $0xb400abd6 // cbz x22, LBB0_304 $5496(%rip) LBB0_88: - WORD $0x384017d4 // ldrb w20, [lr], #1 - WORD $0x5100c28f // sub w15, w20, #48 + WORD $0x38401775 // ldrb w21, [x27], #1 + WORD $0x5100c2af // sub w15, w21, #48 WORD $0x710029ff // cmp w15, #10 WORD $0x54ffff03 // b.lo LBB0_87 $-32(%rip) - WORD $0x7100b69f // cmp w20, #45 + WORD $0x7100b6bf // cmp w21, #45 WORD $0x5400016d // b.le LBB0_94 $44(%rip) - WORD $0x7101969f // cmp w20, #101 + WORD $0x710196bf // cmp w21, #101 WORD $0x54fffe20 // b.eq LBB0_86 $-60(%rip) - WORD $0x7101169f // cmp w20, #69 + WORD $0x710116bf // cmp w21, #69 WORD $0x54fffde0 // b.eq LBB0_86 $-68(%rip) - WORD $0x7100ba9f // cmp w20, #46 - WORD $0x54002f81 // b.ne LBB0_168 $1520(%rip) + WORD $0x7100babf // cmp w21, #46 + WORD $0x54003281 // b.ne LBB0_173 $1616(%rip) WORD $0xb100041f // cmn x0, #1 - WORD $0xaa1a03e0 // mov x0, x26 + WORD $0xaa1403e0 // mov x0, x20 WORD $0x54fffda0 // b.eq LBB0_87 $-76(%rip) WORD $0x14000008 // b LBB0_97 $32(%rip) LBB0_94: - WORD $0x7100ae9f // cmp w20, #43 + WORD $0x7100aebf // cmp w21, #43 WORD $0x54000060 // b.eq LBB0_96 $12(%rip) - WORD $0x7100b69f // cmp w20, #45 - WORD $0x54002e81 // b.ne LBB0_168 $1488(%rip) + WORD $0x7100b6bf // cmp w21, #45 + WORD $0x54003181 // b.ne LBB0_173 $1584(%rip) LBB0_96: - WORD $0xb10006df // cmn x22, #1 - WORD $0xaa1a03f6 // mov x22, x26 + WORD $0xb10006ff // cmn x23, #1 + WORD $0xaa1403f7 // mov x23, x20 WORD $0x54fffca0 // b.eq LBB0_87 $-108(%rip) LBB0_97: - WORD $0x5280007a // mov w26, #3 - WORD $0x14000191 // b LBB0_180 $1604(%rip) + WORD $0x5280007b // mov w27, #3 + WORD $0x140001a9 // b LBB0_185 $1700(%rip) LBB0_98: WORD $0x7100b0bf // cmp w5, #44 WORD $0x540004a0 // b.eq LBB0_112 $148(%rip) LBB0_99: WORD $0x7101f4bf // cmp w5, #125 WORD $0x54000080 // b.eq LBB0_101 $16(%rip) - WORD $0x1400099b // b LBB0_542 $9836(%rip) + WORD $0x140009d2 // b LBB0_555 $10056(%rip) LBB0_100: WORD $0x710174bf // cmp w5, #93 WORD $0x540000c1 // b.ne LBB0_102 $24(%rip) LBB0_101: WORD $0xf900004e // str x14, [x2] - WORD $0xaa0e03f6 // mov x22, x14 + WORD $0xaa0e03f7 // mov x23, x14 WORD $0xaa0b03e0 // mov x0, x11 WORD $0xb5ffc80e // cbnz x14, LBB0_1 $-1792(%rip) - WORD $0x140009ff // b LBB0_578 $10236(%rip) + WORD $0x14000a36 // b LBB0_591 $10456(%rip) LBB0_102: WORD $0xf82e792c // str x12, [x9, x14, lsl #3] WORD $0x92800020 // mov x0, #-2 @@ -609,40 +609,40 @@ LBB0_102: WORD $0x54ffeb8d // b.le LBB0_61 $-656(%rip) LBB0_103: WORD $0x7101b4bf // cmp w5, #109 - WORD $0x5400298d // b.le LBB0_162 $1328(%rip) + WORD $0x54002c8d // b.le LBB0_167 $1424(%rip) WORD $0x7101b8bf // cmp w5, #110 - WORD $0x540041a0 // b.eq LBB0_200 $2100(%rip) + WORD $0x540044a0 // b.eq LBB0_205 $2196(%rip) WORD $0x7101d0bf // cmp w5, #116 - WORD $0x54004000 // b.eq LBB0_198 $2048(%rip) + WORD $0x54004300 // b.eq LBB0_203 $2144(%rip) WORD $0x7101ecbf // cmp w5, #123 - WORD $0x54013e61 // b.ne LBB0_578 $10188(%rip) - WORD $0x37304f43 // tbnz w3, #6, LBB0_218 $2536(%rip) + WORD $0x54014541 // b.ne LBB0_591 $10408(%rip) + WORD $0x37305243 // tbnz w3, #6, LBB0_223 $2632(%rip) WORD $0xf9400048 // ldr x8, [x2] WORD $0xf13ffd1f // cmp x8, #4095 - WORD $0x540130cc // b.gt LBB0_543 $9752(%rip) + WORD $0x540137ac // b.gt LBB0_556 $9972(%rip) WORD $0x9100050e // add x14, x8, #1 WORD $0xf900004e // str x14, [x2] WORD $0x528000ce // mov w14, #6 - WORD $0x140001f4 // b LBB0_197 $2000(%rip) + WORD $0x1400020c // b LBB0_202 $2096(%rip) LBB0_110: - WORD $0xf13ffedf // cmp x22, #4095 - WORD $0x5401300c // b.gt LBB0_543 $9728(%rip) - WORD $0x910006c8 // add x8, x22, #1 + WORD $0xf13ffeff // cmp x23, #4095 + WORD $0x540136ec // b.gt LBB0_556 $9948(%rip) + WORD $0x910006e8 // add x8, x23, #1 WORD $0xf9000048 // str x8, [x2] - WORD $0xf836793f // str xzr, [x9, x22, lsl #3] - WORD $0x140004ac // b LBB0_284 $4784(%rip) + WORD $0xf837793f // str xzr, [x9, x23, lsl #3] + WORD $0x1400085f // b LBB0_480 $8572(%rip) LBB0_112: - WORD $0xf13ffedf // cmp x22, #4095 - WORD $0x54012f4c // b.gt LBB0_543 $9704(%rip) - WORD $0x910006c8 // add x8, x22, #1 + WORD $0xf13ffeff // cmp x23, #4095 + WORD $0x5401362c // b.gt LBB0_556 $9924(%rip) + WORD $0x910006e8 // add x8, x23, #1 WORD $0xf9000048 // str x8, [x2] - WORD $0xf836793a // str x26, [x9, x22, lsl #3] - WORD $0x140004a6 // b LBB0_284 $4760(%rip) + WORD $0xf837793b // str x27, [x9, x23, lsl #3] + WORD $0x14000859 // b LBB0_480 $8548(%rip) LBB0_114: - WORD $0xf9400760 // ldr x0, [x27, #8] + WORD $0xf94007c0 // ldr x0, [lr, #8] WORD $0xcb13000e // sub x14, x0, x19 WORD $0xf10081df // cmp x14, #32 - WORD $0x5400c44b // b.lt LBB0_359 $6280(%rip) + WORD $0x5400ca4b // b.lt LBB0_369 $6472(%rip) WORD $0xd280000e // mov x14, #0 WORD $0xd2800005 // mov x5, #0 WORD $0xcb080000 // sub x0, x0, x8 @@ -650,13 +650,13 @@ LBB0_114: WORD $0x14000008 // b LBB0_118 $32(%rip) LBB0_116: WORD $0xd2800005 // mov x5, #0 - WORD $0xb50005b5 // cbnz x21, LBB0_120 $180(%rip) + WORD $0xb50005b6 // cbnz x22, LBB0_120 $180(%rip) LBB0_117: WORD $0x910081ce // add x14, x14, #32 WORD $0xd1008273 // sub x19, x19, #32 WORD $0x8b13000f // add x15, x0, x19 WORD $0xf100fdff // cmp x15, #63 - WORD $0x5400c10d // b.le LBB0_356 $6176(%rip) + WORD $0x5400c70d // b.le LBB0_366 $6368(%rip) LBB0_118: WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x3cc011fa // ldur q26, [x15, #1] @@ -665,51 +665,52 @@ LBB0_118: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260395 // fmov w21, s28 + WORD $0x1e260396 // fmov w22, s28 WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 WORD $0x1e26038f // fmov w15, s28 - WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x33103df6 // bfi w22, w15, #16, #16 WORD $0x6e218f5a // cmeq.16b v26, v26, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x6e218f7a // cmeq.16b v26, v27, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df4 // bfi w20, w15, #16, #16 - WORD $0x7100029f // cmp w20, #0 + WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x710002bf // cmp w21, #0 WORD $0xfa4008a0 // ccmp x5, #0, #0, eq WORD $0x54fffbc0 // b.eq LBB0_116 $-136(%rip) - WORD $0x0a25028f // bic w15, w20, w5 - WORD $0x2a0f04b6 // orr w22, w5, w15, lsl #1 - WORD $0x0a040285 // and w5, w20, w4 - WORD $0x0a3600a5 // bic w5, w5, w22 + WORD $0x0a2502af // bic w15, w21, w5 + WORD $0x2a0f04b7 // orr w23, w5, w15, lsl #1 + WORD $0x0a0402a5 // and w5, w21, w4 + WORD $0x0a3700a5 // bic w5, w5, w23 WORD $0x2b0f00af // adds w15, w5, w15 WORD $0x1a9f37e5 // cset w5, hs WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 - WORD $0x0a1601ef // and w15, w15, w22 + WORD $0x0a1701ef // and w15, w15, w23 WORD $0x2a2f03ef // mvn w15, w15 - WORD $0x8a1501f5 // and x21, x15, x21 - WORD $0xb4fffab5 // cbz x21, LBB0_117 $-172(%rip) + WORD $0x8a1601f6 // and x22, x15, x22 + WORD $0xb4fffab6 // cbz x22, LBB0_117 $-172(%rip) LBB0_120: - WORD $0xdac002af // rbit x15, x21 + WORD $0xdac002cf // rbit x15, x22 WORD $0xdac011ef // clz x15, x15 WORD $0x8b0e010e // add x14, x8, x14 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910009d3 // add x19, x14, #2 - WORD $0x14000465 // b LBB0_283 $4500(%rip) + WORD $0x14000818 // b LBB0_478 $8288(%rip) LBB0_121: WORD $0xcb1301ce // sub x14, x14, x19 WORD $0xf10041df // cmp x14, #16 - WORD $0x540001e3 // b.lo LBB0_124 $60(%rip) -LBB0_122: - WORD $0x3cf36bda // ldr q26, [lr, x19] + WORD $0x54000223 // b.lo LBB0_125 $68(%rip) + WORD $0xd2800000 // mov x0, #0 +LBB0_123: + WORD $0x3cf36a9a // ldr q26, [x20, x19] WORD $0x6e348f5b // cmeq.16b v27, v26, v20 WORD $0x4e321f5a // and.16b v26, v26, v18 WORD $0x6e358f5a // cmeq.16b v26, v26, v21 @@ -717,48 +718,72 @@ LBB0_122: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260340 // fmov w0, s26 - WORD $0x35008aa0 // cbnz w0, LBB0_282 $4436(%rip) + WORD $0x1e260345 // fmov w5, s26 + WORD $0x35000365 // cbnz w5, LBB0_133 $108(%rip) WORD $0xd10041ce // sub x14, x14, #16 WORD $0x91004273 // add x19, x19, #16 + WORD $0x91004000 // add x0, x0, #16 WORD $0xf1003ddf // cmp x14, #15 - WORD $0x54fffe68 // b.hi LBB0_122 $-52(%rip) -LBB0_124: - WORD $0x8b1303c0 // add x0, lr, x19 - WORD $0xb40001ee // cbz x14, LBB0_131 $60(%rip) + WORD $0x54fffe48 // b.hi LBB0_123 $-56(%rip) +LBB0_125: + WORD $0x8b130280 // add x0, x20, x19 + WORD $0xd284c013 // mov x19, #9728 + WORD $0xf2c20033 // movk x19, #4097, lsl #32 + WORD $0xb400020e // cbz x14, LBB0_132 $64(%rip) WORD $0x8b0e0005 // add x5, x0, x14 - WORD $0xcb1e0013 // sub x19, x0, lr -LBB0_126: +LBB0_127: WORD $0x39400006 // ldrb w6, [x0] WORD $0x7100b0df // cmp w6, #44 - WORD $0x540089a0 // b.eq LBB0_283 $4404(%rip) - WORD $0x7101f4df // cmp w6, #125 - WORD $0x54008960 // b.eq LBB0_283 $4396(%rip) + WORD $0x9ac6218f // lsl x15, x12, x6 + WORD $0x8a1301ef // and x15, x15, x19 + WORD $0xfa4099e4 // ccmp x15, #0, #4, ls + WORD $0x54000121 // b.ne LBB0_132 $36(%rip) WORD $0x710174df // cmp w6, #93 - WORD $0x54008920 // b.eq LBB0_283 $4388(%rip) + WORD $0x540000e0 // b.eq LBB0_132 $28(%rip) + WORD $0x7101f4df // cmp w6, #125 + WORD $0x540000a0 // b.eq LBB0_132 $20(%rip) WORD $0x91000400 // add x0, x0, #1 - WORD $0x91000673 // add x19, x19, #1 WORD $0xf10005ce // subs x14, x14, #1 - WORD $0x54fffec1 // b.ne LBB0_126 $-40(%rip) -LBB0_130: + WORD $0x54fffe81 // b.ne LBB0_127 $-48(%rip) WORD $0xaa0503e0 // mov x0, x5 -LBB0_131: - WORD $0xcb1e0013 // sub x19, x0, lr LBB0_132: - WORD $0x5280007a // mov w26, #3 - WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x12800011 // mov w17, #-1 - WORD $0x1400043f // b LBB0_283 $4348(%rip) + WORD $0xcb140013 // sub x19, x0, x20 + WORD $0x140007f0 // b LBB0_478 $8128(%rip) LBB0_133: - WORD $0xf9400760 // ldr x0, [x27, #8] + WORD $0x5ac000ae // rbit w14, w5 + WORD $0x5ac011ce // clz w14, w14 + WORD $0x8b1301d3 // add x19, x14, x19 + WORD $0xf9000033 // str x19, [x1] + WORD $0xf100067f // cmp x19, #1 + WORD $0x5400fd6b // b.lt LBB0_479 $8108(%rip) + WORD $0x8b0001ce // add x14, x14, x0 +LBB0_135: + WORD $0x386e68cf // ldrb w15, [x6, x14] + WORD $0x710081ff // cmp w15, #32 + WORD $0x9acf218f // lsl x15, x12, x15 + WORD $0x8a0d01ef // and x15, x15, x13 + WORD $0xfa4099e4 // ccmp x15, #0, #4, ls + WORD $0x54009480 // b.eq LBB0_303 $4752(%rip) + WORD $0x8b0e010f // add x15, x8, x14 + WORD $0xf900002f // str x15, [x1] + WORD $0xd10005ce // sub x14, x14, #1 + WORD $0x8b0e0100 // add x0, x8, x14 + WORD $0x9100080f // add x15, x0, #2 + WORD $0xf10005ff // cmp x15, #1 + WORD $0x54fffe8c // b.gt LBB0_135 $-48(%rip) +LBB0_137: + WORD $0x91000413 // add x19, x0, #1 + WORD $0x140007db // b LBB0_479 $8044(%rip) +LBB0_138: + WORD $0xf94007c0 // ldr x0, [lr, #8] WORD $0xcb13000e // sub x14, x0, x19 WORD $0xf10081df // cmp x14, #32 - WORD $0x5400baeb // b.lt LBB0_365 $5980(%rip) + WORD $0x5400bdeb // b.lt LBB0_375 $6076(%rip) WORD $0xd280000e // mov x14, #0 WORD $0xd2800005 // mov x5, #0 WORD $0xcb080000 // sub x0, x0, x8 WORD $0x528003f3 // mov w19, #31 -LBB0_135: +LBB0_140: WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x3cc011fa // ldur q26, [x15, #1] WORD $0x3cc111fb // ldur q27, [x15, #17] @@ -766,63 +791,63 @@ LBB0_135: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260395 // fmov w21, s28 + WORD $0x1e260396 // fmov w22, s28 WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 WORD $0x1e26038f // fmov w15, s28 - WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x33103df6 // bfi w22, w15, #16, #16 WORD $0x6e218f5a // cmeq.16b v26, v26, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x6e218f7a // cmeq.16b v26, v27, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df4 // bfi w20, w15, #16, #16 - WORD $0x7100029f // cmp w20, #0 + WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x710002bf // cmp w21, #0 WORD $0xfa4008a0 // ccmp x5, #0, #0, eq - WORD $0x54000180 // b.eq LBB0_137 $48(%rip) - WORD $0x0a25028f // bic w15, w20, w5 - WORD $0x2a0f04b6 // orr w22, w5, w15, lsl #1 - WORD $0x0a040285 // and w5, w20, w4 - WORD $0x0a3600a5 // bic w5, w5, w22 + WORD $0x54000180 // b.eq LBB0_142 $48(%rip) + WORD $0x0a2502af // bic w15, w21, w5 + WORD $0x2a0f04b7 // orr w23, w5, w15, lsl #1 + WORD $0x0a0402a5 // and w5, w21, w4 + WORD $0x0a3700a5 // bic w5, w5, w23 WORD $0x2b0f00af // adds w15, w5, w15 WORD $0x1a9f37e5 // cset w5, hs WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 - WORD $0x0a1601ef // and w15, w15, w22 + WORD $0x0a1701ef // and w15, w15, w23 WORD $0x2a2f03ef // mvn w15, w15 - WORD $0x8a1501f5 // and x21, x15, x21 - WORD $0x14000002 // b LBB0_138 $8(%rip) -LBB0_137: + WORD $0x8a1601f6 // and x22, x15, x22 + WORD $0x14000002 // b LBB0_143 $8(%rip) +LBB0_142: WORD $0xd2800005 // mov x5, #0 -LBB0_138: - WORD $0xb5000f55 // cbnz x21, LBB0_152 $488(%rip) +LBB0_143: + WORD $0xb5000f56 // cbnz x22, LBB0_157 $488(%rip) WORD $0x910081ce // add x14, x14, #32 WORD $0xd1008273 // sub x19, x19, #32 WORD $0x8b13000f // add x15, x0, x19 WORD $0xf100fdff // cmp x15, #63 - WORD $0x54fffa6c // b.gt LBB0_135 $-180(%rip) - WORD $0xb500f185 // cbnz x5, LBB0_468 $7728(%rip) + WORD $0x54fffa6c // b.gt LBB0_140 $-180(%rip) + WORD $0xb500f565 // cbnz x5, LBB0_481 $7852(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910005e5 // add x5, x15, #1 WORD $0xaa2e03ee // mvn x14, x14 WORD $0x8b0001ce // add x14, x14, x0 WORD $0xf10005df // cmp x14, #1 - WORD $0x5400f32a // b.ge LBB0_471 $7780(%rip) - WORD $0x1400093d // b LBB0_577 $9460(%rip) -LBB0_142: - WORD $0x54011b00 // b.eq LBB0_545 $9056(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x5400b883 // b.lo LBB0_372 $5904(%rip) + WORD $0x5400f70a // b.ge LBB0_484 $7904(%rip) + WORD $0x1400095c // b LBB0_590 $9584(%rip) +LBB0_147: + WORD $0x54011ee0 // b.eq LBB0_558 $9180(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x5400bb83 // b.lo LBB0_382 $6000(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 -LBB0_145: - WORD $0x8b1303ce // add x14, lr, x19 +LBB0_150: + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad4071dd // ldp q29, q28, [x14] WORD $0xad4169db // ldp q27, q26, [x14, #32] WORD $0x6e208fbe // cmeq.16b v30, v29, v0 @@ -844,40 +869,40 @@ LBB0_145: WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d4 // fmov w20, s30 + WORD $0x1e2603d5 // fmov w21, s30 WORD $0x6e218fbe // cmeq.16b v30, v29, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d5 // fmov w21, s30 + WORD $0x1e2603d6 // fmov w22, s30 WORD $0x6e218f9e // cmeq.16b v30, v28, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d7 // fmov w23, s30 + WORD $0x1e2603d8 // fmov w24, s30 WORD $0x6e218f7e // cmeq.16b v30, v27, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d8 // fmov w24, s30 + WORD $0x1e2603d9 // fmov w25, s30 WORD $0x6e218f5e // cmeq.16b v30, v26, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d9 // fmov w25, s30 + WORD $0x1e2603da // fmov w26, s30 WORD $0xd3607ca5 // lsl x5, x5, #32 - WORD $0xaa14c0a5 // orr x5, x5, x20, lsl #48 + WORD $0xaa15c0a5 // orr x5, x5, x21, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f00af // orr x15, x5, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607f0f // lsl x15, x24, #32 - WORD $0xaa19c1ef // orr x15, x15, x25, lsl #48 - WORD $0x53103ee5 // lsl w5, w23, #16 + WORD $0xd3607f2f // lsl x15, x25, #32 + WORD $0xaa1ac1ef // orr x15, x15, x26, lsl #48 + WORD $0x53103f05 // lsl w5, w24, #16 WORD $0xaa0501ef // orr x15, x15, x5 - WORD $0xaa1501e5 // orr x5, x15, x21 - WORD $0xb5000445 // cbnz x5, LBB0_150 $136(%rip) - WORD $0xb50004c6 // cbnz x6, LBB0_151 $152(%rip) -LBB0_147: + WORD $0xaa1601e5 // orr x5, x15, x22 + WORD $0xb5000445 // cbnz x5, LBB0_155 $136(%rip) + WORD $0xb50004c6 // cbnz x6, LBB0_156 $152(%rip) +LBB0_152: WORD $0x6e3d349d // cmhi.16b v29, v4, v29 WORD $0x4e221fbd // and.16b v29, v29, v2 WORD $0x4e0303bd // tbl.16b v29, { v29 }, v3 @@ -892,44 +917,44 @@ LBB0_147: WORD $0x4e221f7b // and.16b v27, v27, v2 WORD $0x4e03037b // tbl.16b v27, { v27 }, v3 WORD $0x4e71bb7b // addv.8h h27, v27 - WORD $0x1e260374 // fmov w20, s27 + WORD $0x1e260375 // fmov w21, s27 WORD $0x6e3a349a // cmhi.16b v26, v4, v26 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 - WORD $0xd3607e94 // lsl x20, x20, #32 - WORD $0xaa15c294 // orr x20, x20, x21, lsl #48 + WORD $0x1e260356 // fmov w22, s26 + WORD $0xd3607eb5 // lsl x21, x21, #32 + WORD $0xaa16c2b5 // orr x21, x21, x22, lsl #48 WORD $0x53103ca5 // lsl w5, w5, #16 - WORD $0xaa050285 // orr x5, x20, x5 + WORD $0xaa0502a5 // orr x5, x21, x5 WORD $0xaa0f00a5 // orr x5, x5, x15 - WORD $0xb500042e // cbnz x14, LBB0_153 $132(%rip) - WORD $0xb50111a5 // cbnz x5, LBB0_551 $8756(%rip) - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xb500042e // cbnz x14, LBB0_158 $132(%rip) + WORD $0xb5011585 // cbnz x5, LBB0_564 $8880(%rip) + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 - WORD $0x54fff568 // b.hi LBB0_145 $-340(%rip) - WORD $0x1400052f // b LBB0_361 $5308(%rip) -LBB0_150: + WORD $0xf100feff // cmp x23, #63 + WORD $0x54fff568 // b.hi LBB0_150 $-340(%rip) + WORD $0x14000547 // b LBB0_371 $5404(%rip) +LBB0_155: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011ef // clz x15, x15 WORD $0x8b1301ef // add x15, x15, x19 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_151: +LBB0_156: WORD $0x8a2600af // bic x15, x5, x6 - WORD $0xaa0f04d4 // orr x20, x6, x15, lsl #1 - WORD $0x8a3400a5 // bic x5, x5, x20 + WORD $0xaa0f04d5 // orr x21, x6, x15, lsl #1 + WORD $0x8a3500a5 // bic x5, x5, x21 WORD $0x9201f0a5 // and x5, x5, #0xaaaaaaaaaaaaaaaa WORD $0xab0f00af // adds x15, x5, x15 WORD $0x1a9f37e6 // cset w6, hs WORD $0xd37ff9ef // lsl x15, x15, #1 WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 - WORD $0x8a1401ef // and x15, x15, x20 + WORD $0x8a1501ef // and x15, x15, x21 WORD $0x8a2f01ce // bic x14, x14, x15 - WORD $0x17ffffd1 // b LBB0_147 $-188(%rip) -LBB0_152: - WORD $0xdac002af // rbit x15, x21 + WORD $0x17ffffd1 // b LBB0_152 $-188(%rip) +LBB0_157: + WORD $0xdac002cf // rbit x15, x22 WORD $0xdac011ef // clz x15, x15 WORD $0x8b0e010e // add x14, x8, x14 WORD $0x8b0e01ee // add x14, x15, x14 @@ -937,82 +962,82 @@ LBB0_152: WORD $0xf9000033 // str x19, [x1] WORD $0xaa0803e0 // mov x0, x8 WORD $0xeb07011f // cmp x8, x7 - WORD $0x54001983 // b.lo LBB0_195 $816(%rip) - WORD $0x140008c8 // b LBB0_578 $8992(%rip) -LBB0_153: + WORD $0x54001983 // b.lo LBB0_200 $816(%rip) + WORD $0x140008e7 // b LBB0_591 $9116(%rip) +LBB0_158: WORD $0xdac001ce // rbit x14, x14 WORD $0xdac011ce // clz x14, x14 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011e5 // clz x5, x15 WORD $0xeb0e00bf // cmp x5, x14 - WORD $0x54011783 // b.lo LBB0_574 $8944(%rip) + WORD $0x54011b63 // b.lo LBB0_587 $9068(%rip) WORD $0x8b1301ce // add x14, x14, x19 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6f87053 // tbz x19, #63, LBB0_283 $3592(%rip) - WORD $0x14000857 // b LBB0_544 $8540(%rip) -LBB0_155: + WORD $0xb6f8e3b3 // tbz x19, #63, LBB0_478 $7284(%rip) + WORD $0x14000876 // b LBB0_557 $8664(%rip) +LBB0_160: WORD $0x710088bf // cmp w5, #34 - WORD $0x54001cc0 // b.eq LBB0_206 $920(%rip) + WORD $0x54001cc0 // b.eq LBB0_211 $920(%rip) WORD $0x7100b4bf // cmp w5, #45 - WORD $0x54011741 // b.ne LBB0_578 $8936(%rip) - WORD $0x37306ae3 // tbnz w3, #6, LBB0_273 $3420(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] - WORD $0xeb1301d9 // subs x25, x14, x19 - WORD $0x54011520 // b.eq LBB0_570 $8868(%rip) - WORD $0x8b1303c0 // add x0, lr, x19 + WORD $0x54011b21 // b.ne LBB0_591 $9060(%rip) + WORD $0x37306ae3 // tbnz w3, #6, LBB0_278 $3420(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] + WORD $0xeb1301da // subs x26, x14, x19 + WORD $0x54011900 // b.eq LBB0_583 $8992(%rip) + WORD $0x8b130280 // add x0, x20, x19 WORD $0x3940000e // ldrb w14, [x0] WORD $0x7100c1df // cmp w14, #48 - WORD $0x54008881 // b.ne LBB0_309 $4368(%rip) - WORD $0xf100073f // cmp x25, #1 - WORD $0x540086e1 // b.ne LBB0_307 $4316(%rip) -LBB0_161: + WORD $0x54008b81 // b.ne LBB0_319 $4464(%rip) + WORD $0xf100075f // cmp x26, #1 + WORD $0x540089e1 // b.ne LBB0_317 $4412(%rip) +LBB0_166: WORD $0x5280002e // mov w14, #1 - WORD $0x140004e0 // b LBB0_355 $4992(%rip) -LBB0_162: + WORD $0x140004f8 // b LBB0_365 $5088(%rip) +LBB0_167: WORD $0x71016cbf // cmp w5, #91 - WORD $0x540019c0 // b.eq LBB0_203 $824(%rip) + WORD $0x540019c0 // b.eq LBB0_208 $824(%rip) WORD $0x710198bf // cmp w5, #102 - WORD $0x54011541 // b.ne LBB0_578 $8872(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0x54011921 // b.ne LBB0_591 $8996(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xd10011cf // sub x15, x14, #4 WORD $0xeb0f011f // cmp x8, x15 - WORD $0x54010942 // b.hs LBB0_550 $8488(%rip) - WORD $0xb8736bce // ldr w14, [lr, x19] + WORD $0x54010d22 // b.hs LBB0_563 $8612(%rip) + WORD $0xb8736a8e // ldr w14, [x20, x19] WORD $0x528d8c2f // mov w15, #27745 WORD $0x72acae6f // movk w15, #25971, lsl #16 WORD $0x6b0f01df // cmp w14, w15 - WORD $0x54010ee1 // b.ne LBB0_563 $8668(%rip) + WORD $0x540112c1 // b.ne LBB0_576 $8792(%rip) WORD $0x91001513 // add x19, x8, #5 - WORD $0x14000362 // b LBB0_283 $3464(%rip) -LBB0_167: - WORD $0x8b3540ce // add x14, x6, w21, uxtw - WORD $0x8b1a01c5 // add x5, x14, x26 -LBB0_168: + WORD $0x140006fd // b LBB0_478 $7156(%rip) +LBB0_172: + WORD $0x8b3640ce // add x14, x6, w22, uxtw + WORD $0x8b1b01c5 // add x5, x14, x27 +LBB0_173: WORD $0x9280000e // mov x14, #-1 - WORD $0xb4010740 // cbz x0, LBB0_547 $8424(%rip) -LBB0_169: - WORD $0xb4010736 // cbz x22, LBB0_547 $8420(%rip) - WORD $0xb4010713 // cbz x19, LBB0_547 $8416(%rip) + WORD $0xb4010b20 // cbz x0, LBB0_560 $8548(%rip) +LBB0_174: + WORD $0xb4010b17 // cbz x23, LBB0_560 $8544(%rip) + WORD $0xb4010af3 // cbz x19, LBB0_560 $8540(%rip) WORD $0xcb0600ae // sub x14, x5, x6 WORD $0xd10005c5 // sub x5, x14, #1 WORD $0xeb05001f // cmp x0, x5 - WORD $0x54000300 // b.eq LBB0_179 $96(%rip) - WORD $0xeb0502df // cmp x22, x5 - WORD $0x540002c0 // b.eq LBB0_179 $88(%rip) + WORD $0x54000300 // b.eq LBB0_184 $96(%rip) + WORD $0xeb0502ff // cmp x23, x5 + WORD $0x540002c0 // b.eq LBB0_184 $88(%rip) WORD $0xeb05027f // cmp x19, x5 - WORD $0x54000280 // b.eq LBB0_179 $80(%rip) - WORD $0xf10006cf // subs x15, x22, #1 - WORD $0x5280007a // mov w26, #3 + WORD $0x54000280 // b.eq LBB0_184 $80(%rip) + WORD $0xf10006ef // subs x15, x23, #1 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x5400006b // b.lt LBB0_176 $12(%rip) + WORD $0x5400006b // b.lt LBB0_181 $12(%rip) WORD $0xeb0f027f // cmp x19, x15 - WORD $0x54010561 // b.ne LBB0_548 $8364(%rip) -LBB0_176: + WORD $0x54010941 // b.ne LBB0_561 $8488(%rip) +LBB0_181: WORD $0xaa130005 // orr x5, x0, x19 - WORD $0xb7f80065 // tbnz x5, #63, LBB0_178 $12(%rip) + WORD $0xb7f80065 // tbnz x5, #63, LBB0_183 $12(%rip) WORD $0xeb13001f // cmp x0, x19 - WORD $0x5401062a // b.ge LBB0_553 $8388(%rip) -LBB0_178: + WORD $0x54010a0a // b.ge LBB0_566 $8512(%rip) +LBB0_183: WORD $0xd37ffcaf // lsr x15, x5, #63 WORD $0x520001ef // eor w15, w15, #0x1 WORD $0xd1000671 // sub x17, x19, #1 @@ -1021,23 +1046,23 @@ LBB0_178: WORD $0x6a1101ff // tst w15, w17 WORD $0x12800011 // mov w17, #-1 WORD $0xda9301ce // csinv x14, x14, x19, eq - WORD $0x14000004 // b LBB0_180 $16(%rip) -LBB0_179: + WORD $0x14000004 // b LBB0_185 $16(%rip) +LBB0_184: WORD $0xcb0e03ee // neg x14, x14 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 -LBB0_180: - WORD $0xb7f9032e // tbnz x14, #63, LBB0_547 $8292(%rip) +LBB0_185: + WORD $0xb7f9070e // tbnz x14, #63, LBB0_560 $8416(%rip) WORD $0x8b0e0113 // add x19, x8, x14 - WORD $0x1400033b // b LBB0_283 $3308(%rip) -LBB0_182: - WORD $0x54010240 // b.eq LBB0_545 $8264(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x5400b063 // b.lo LBB0_401 $5644(%rip) + WORD $0x140006d6 // b LBB0_478 $7000(%rip) +LBB0_187: + WORD $0x54010620 // b.eq LBB0_558 $8388(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x5400b363 // b.lo LBB0_411 $5740(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 -LBB0_185: - WORD $0x8b1303ce // add x14, lr, x19 +LBB0_190: + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad4071dd // ldp q29, q28, [x14] WORD $0xad4169db // ldp q27, q26, [x14, #32] WORD $0x6e208fbe // cmeq.16b v30, v29, v0 @@ -1059,40 +1084,40 @@ LBB0_185: WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d4 // fmov w20, s30 + WORD $0x1e2603d5 // fmov w21, s30 WORD $0x6e218fbe // cmeq.16b v30, v29, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d5 // fmov w21, s30 + WORD $0x1e2603d6 // fmov w22, s30 WORD $0x6e218f9e // cmeq.16b v30, v28, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d7 // fmov w23, s30 + WORD $0x1e2603d8 // fmov w24, s30 WORD $0x6e218f7e // cmeq.16b v30, v27, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d8 // fmov w24, s30 + WORD $0x1e2603d9 // fmov w25, s30 WORD $0x6e218f5e // cmeq.16b v30, v26, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d9 // fmov w25, s30 + WORD $0x1e2603da // fmov w26, s30 WORD $0xd3607ca5 // lsl x5, x5, #32 - WORD $0xaa14c0a5 // orr x5, x5, x20, lsl #48 + WORD $0xaa15c0a5 // orr x5, x5, x21, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f00af // orr x15, x5, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607f0f // lsl x15, x24, #32 - WORD $0xaa19c1ef // orr x15, x15, x25, lsl #48 - WORD $0x53103ee5 // lsl w5, w23, #16 + WORD $0xd3607f2f // lsl x15, x25, #32 + WORD $0xaa1ac1ef // orr x15, x15, x26, lsl #48 + WORD $0x53103f05 // lsl w5, w24, #16 WORD $0xaa0501ef // orr x15, x15, x5 - WORD $0xaa1501e5 // orr x5, x15, x21 - WORD $0xb5000445 // cbnz x5, LBB0_190 $136(%rip) - WORD $0xb50004c6 // cbnz x6, LBB0_191 $152(%rip) -LBB0_187: + WORD $0xaa1601e5 // orr x5, x15, x22 + WORD $0xb5000445 // cbnz x5, LBB0_195 $136(%rip) + WORD $0xb50004c6 // cbnz x6, LBB0_196 $152(%rip) +LBB0_192: WORD $0x6e3d349d // cmhi.16b v29, v4, v29 WORD $0x4e221fbd // and.16b v29, v29, v2 WORD $0x4e0303bd // tbl.16b v29, { v29 }, v3 @@ -1107,115 +1132,115 @@ LBB0_187: WORD $0x4e221f7b // and.16b v27, v27, v2 WORD $0x4e03037b // tbl.16b v27, { v27 }, v3 WORD $0x4e71bb7b // addv.8h h27, v27 - WORD $0x1e260374 // fmov w20, s27 + WORD $0x1e260375 // fmov w21, s27 WORD $0x6e3a349a // cmhi.16b v26, v4, v26 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 - WORD $0xd3607e94 // lsl x20, x20, #32 - WORD $0xaa15c294 // orr x20, x20, x21, lsl #48 + WORD $0x1e260356 // fmov w22, s26 + WORD $0xd3607eb5 // lsl x21, x21, #32 + WORD $0xaa16c2b5 // orr x21, x21, x22, lsl #48 WORD $0x53103ca5 // lsl w5, w5, #16 - WORD $0xaa050285 // orr x5, x20, x5 + WORD $0xaa0502a5 // orr x5, x21, x5 WORD $0xaa0f00a5 // orr x5, x5, x15 - WORD $0xb50002ee // cbnz x14, LBB0_192 $92(%rip) - WORD $0xb500f8e5 // cbnz x5, LBB0_551 $7964(%rip) - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xb50002ee // cbnz x14, LBB0_197 $92(%rip) + WORD $0xb500fcc5 // cbnz x5, LBB0_564 $8088(%rip) + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 - WORD $0x54fff568 // b.hi LBB0_185 $-340(%rip) - WORD $0x140004fe // b LBB0_393 $5112(%rip) -LBB0_190: + WORD $0xf100feff // cmp x23, #63 + WORD $0x54fff568 // b.hi LBB0_190 $-340(%rip) + WORD $0x14000516 // b LBB0_403 $5208(%rip) +LBB0_195: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011ef // clz x15, x15 WORD $0x8b1301ef // add x15, x15, x19 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_191: +LBB0_196: WORD $0x8a2600af // bic x15, x5, x6 - WORD $0xaa0f04d4 // orr x20, x6, x15, lsl #1 - WORD $0x8a3400a5 // bic x5, x5, x20 + WORD $0xaa0f04d5 // orr x21, x6, x15, lsl #1 + WORD $0x8a3500a5 // bic x5, x5, x21 WORD $0x9201f0a5 // and x5, x5, #0xaaaaaaaaaaaaaaaa WORD $0xab0f00af // adds x15, x5, x15 WORD $0x1a9f37e6 // cset w6, hs WORD $0xd37ff9ef // lsl x15, x15, #1 WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 - WORD $0x8a1401ef // and x15, x15, x20 + WORD $0x8a1501ef // and x15, x15, x21 WORD $0x8a2f01ce // bic x14, x14, x15 - WORD $0x17ffffd1 // b LBB0_187 $-188(%rip) -LBB0_192: + WORD $0x17ffffd1 // b LBB0_192 $-188(%rip) +LBB0_197: WORD $0xdac001ce // rbit x14, x14 WORD $0xdac011ce // clz x14, x14 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011e5 // clz x5, x15 WORD $0xeb0e00bf // cmp x5, x14 - WORD $0x54010003 // b.lo LBB0_574 $8192(%rip) + WORD $0x540103e3 // b.lo LBB0_587 $8316(%rip) WORD $0x8b1301ce // add x14, x14, x19 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb7f8f393 // tbnz x19, #63, LBB0_544 $7792(%rip) -LBB0_194: + WORD $0xb7f8f773 // tbnz x19, #63, LBB0_557 $7916(%rip) +LBB0_199: WORD $0xf9000033 // str x19, [x1] WORD $0xaa0803e0 // mov x0, x8 WORD $0xb27ff7ee // mov x14, #9223372036854775806 WORD $0xeb0e011f // cmp x8, x14 - WORD $0x5400ffc8 // b.hi LBB0_578 $8184(%rip) -LBB0_195: + WORD $0x540103a8 // b.hi LBB0_591 $8308(%rip) +LBB0_200: WORD $0xf9400048 // ldr x8, [x2] WORD $0xf13ffd1f // cmp x8, #4095 - WORD $0x5400f24c // b.gt LBB0_543 $7752(%rip) + WORD $0x5400f62c // b.gt LBB0_556 $7876(%rip) WORD $0x9100050e // add x14, x8, #1 WORD $0xf900004e // str x14, [x2] WORD $0x5280008e // mov w14, #4 -LBB0_197: +LBB0_202: WORD $0xf828792e // str x14, [x9, x8, lsl #3] - WORD $0x140002bd // b LBB0_284 $2804(%rip) -LBB0_198: - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0x14000658 // b LBB0_480 $6496(%rip) +LBB0_203: + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xd1000dcf // sub x15, x14, #3 WORD $0xeb0f011f // cmp x8, x15 - WORD $0x5400f2c2 // b.hs LBB0_550 $7768(%rip) - WORD $0x8b1303ce // add x14, lr, x19 + WORD $0x5400f6a2 // b.hs LBB0_563 $7892(%rip) + WORD $0x8b13028e // add x14, x20, x19 WORD $0xb85ff1ce // ldur w14, [x14, #-1] WORD $0x528e4e8f // mov w15, #29300 WORD $0x72acaeaf // movk w15, #25973, lsl #16 WORD $0x6b0f01df // cmp w14, w15 - WORD $0x54000180 // b.eq LBB0_202 $48(%rip) - WORD $0x14000797 // b LBB0_554 $7772(%rip) -LBB0_200: - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0x54000180 // b.eq LBB0_207 $48(%rip) + WORD $0x140007b6 // b LBB0_567 $7896(%rip) +LBB0_205: + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xd1000dcf // sub x15, x14, #3 WORD $0xeb0f011f // cmp x8, x15 - WORD $0x5400f162 // b.hs LBB0_550 $7724(%rip) - WORD $0x8b1303ce // add x14, lr, x19 + WORD $0x5400f542 // b.hs LBB0_563 $7848(%rip) + WORD $0x8b13028e // add x14, x20, x19 WORD $0xb85ff1ce // ldur w14, [x14, #-1] WORD $0x528eadcf // mov w15, #30062 WORD $0x72ad8d8f // movk w15, #27756, lsl #16 WORD $0x6b0f01df // cmp w14, w15 - WORD $0x5400f421 // b.ne LBB0_558 $7812(%rip) -LBB0_202: + WORD $0x5400f801 // b.ne LBB0_571 $7936(%rip) +LBB0_207: WORD $0x91001113 // add x19, x8, #4 - WORD $0x140002a2 // b LBB0_283 $2696(%rip) -LBB0_203: - WORD $0x37302d23 // tbnz w3, #6, LBB0_245 $1444(%rip) + WORD $0x1400063d // b LBB0_478 $6388(%rip) +LBB0_208: + WORD $0x37302d23 // tbnz w3, #6, LBB0_250 $1444(%rip) WORD $0xf9400048 // ldr x8, [x2] WORD $0xf13ffd1f // cmp x8, #4095 - WORD $0x5400ee4c // b.gt LBB0_543 $7624(%rip) + WORD $0x5400f22c // b.gt LBB0_556 $7748(%rip) WORD $0x9100050e // add x14, x8, #1 WORD $0xf900004e // str x14, [x2] WORD $0x528000ae // mov w14, #5 - WORD $0x17ffffe0 // b LBB0_197 $-128(%rip) -LBB0_206: - WORD $0x37305423 // tbnz w3, #6, LBB0_285 $2692(%rip) - WORD $0xf940076e // ldr x14, [x27, #8] - WORD $0xeb1301d6 // subs x22, x14, x19 - WORD $0x37285c23 // tbnz w3, #5, LBB0_295 $2948(%rip) - WORD $0x5400eda0 // b.eq LBB0_545 $7604(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x5400ad03 // b.lo LBB0_432 $5536(%rip) + WORD $0x17ffffe0 // b LBB0_202 $-128(%rip) +LBB0_211: + WORD $0x37305423 // tbnz w3, #6, LBB0_290 $2692(%rip) + WORD $0xf94007ce // ldr x14, [lr, #8] + WORD $0xeb1301d7 // subs x23, x14, x19 + WORD $0x37285f23 // tbnz w3, #5, LBB0_305 $3044(%rip) + WORD $0x5400f180 // b.eq LBB0_558 $7728(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x5400b003 // b.lo LBB0_442 $5632(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 -LBB0_211: - WORD $0x8b1303ce // add x14, lr, x19 +LBB0_216: + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad406dda // ldp q26, q27, [x14] WORD $0xad4175dc // ldp q28, q29, [x14, #32] WORD $0x6e208f5e // cmeq.16b v30, v26, v0 @@ -1249,43 +1274,43 @@ LBB0_211: WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x4e221f9a // and.16b v26, v28, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 + WORD $0x1e260356 // fmov w22, s26 WORD $0x4e221fba // and.16b v26, v29, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260357 // fmov w23, s26 + WORD $0x1e260358 // fmov w24, s26 WORD $0xd3607e31 // lsl x17, x17, #32 WORD $0xaa05c231 // orr x17, x17, x5, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607eaf // lsl x15, x21, #32 - WORD $0xaa17c1ef // orr x15, x15, x23, lsl #48 - WORD $0x53103e91 // lsl w17, w20, #16 + WORD $0xd3607ecf // lsl x15, x22, #32 + WORD $0xaa18c1ef // orr x15, x15, x24, lsl #48 + WORD $0x53103eb1 // lsl w17, w21, #16 WORD $0xaa1101ef // orr x15, x15, x17 WORD $0xaa0701e5 // orr x5, x15, x7 - WORD $0xb5000145 // cbnz x5, LBB0_215 $40(%rip) - WORD $0xb50001c6 // cbnz x6, LBB0_216 $56(%rip) + WORD $0xb5000145 // cbnz x5, LBB0_220 $40(%rip) + WORD $0xb50001c6 // cbnz x6, LBB0_221 $56(%rip) WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb500032e // cbnz x14, LBB0_217 $100(%rip) -LBB0_214: - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xb500032e // cbnz x14, LBB0_222 $100(%rip) +LBB0_219: + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 - WORD $0x54fff868 // b.hi LBB0_211 $-244(%rip) - WORD $0x1400051f // b LBB0_429 $5244(%rip) -LBB0_215: + WORD $0xf100feff // cmp x23, #63 + WORD $0x54fff868 // b.hi LBB0_216 $-244(%rip) + WORD $0x14000537 // b LBB0_439 $5340(%rip) +LBB0_220: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011ef // clz x15, x15 WORD $0x8b1301ef // add x15, x15, x19 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_216: +LBB0_221: WORD $0x8a2600af // bic x15, x5, x6 WORD $0xaa0f04d1 // orr x17, x6, x15, lsl #1 WORD $0x8a3100a5 // bic x5, x5, x17 @@ -1296,24 +1321,24 @@ LBB0_216: WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 WORD $0x8a1101ef // and x15, x15, x17 WORD $0x8a2f01ce // bic x14, x14, x15 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb4fffd2e // cbz x14, LBB0_214 $-92(%rip) -LBB0_217: + WORD $0xb4fffd2e // cbz x14, LBB0_219 $-92(%rip) +LBB0_222: WORD $0xdac001ce // rbit x14, x14 WORD $0xdac011ce // clz x14, x14 - WORD $0x140002fc // b LBB0_306 $3056(%rip) -LBB0_218: + WORD $0x14000314 // b LBB0_316 $3152(%rip) +LBB0_223: WORD $0xf90017ff // str xzr, [sp, #40] WORD $0xd2800007 // mov x7, #0 WORD $0xd2800000 // mov x0, #0 WORD $0xd2800006 // mov x6, #0 - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xcb1301cf // sub x15, x14, x19 - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400000a // b LBB0_220 $40(%rip) -LBB0_219: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400000a // b LBB0_225 $40(%rip) +LBB0_224: WORD $0x937ffdce // asr x14, x14, #63 WORD $0xf90017ee // str x14, [sp, #40] WORD $0x9e6700ba // fmov d26, x5 @@ -1323,12 +1348,12 @@ LBB0_219: WORD $0x8b0001c0 // add x0, x14, x0 WORD $0x91010273 // add x19, x19, #64 WORD $0xa941bfe7 // ldp x7, x15, [sp, #24] -LBB0_220: +LBB0_225: WORD $0xf10101ee // subs x14, x15, #64 WORD $0xf90013ee // str x14, [sp, #32] WORD $0xf9000bef // str x15, [sp, #16] - WORD $0x5400176b // b.lt LBB0_228 $748(%rip) -LBB0_221: + WORD $0x5400176b // b.lt LBB0_233 $748(%rip) +LBB0_226: WORD $0xad40727d // ldp q29, q28, [x19] WORD $0xad416a7b // ldp q27, q26, [x19, #32] WORD $0x6e218fbe // cmeq.16b v30, v29, v1 @@ -1357,11 +1382,11 @@ LBB0_221: WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 WORD $0xaa0701cf // orr x15, x14, x7 - WORD $0xb500008f // cbnz x15, LBB0_223 $16(%rip) + WORD $0xb500008f // cbnz x15, LBB0_228 $16(%rip) WORD $0xf9000fff // str xzr, [sp, #24] WORD $0xd280000e // mov x14, #0 - WORD $0x1400000b // b LBB0_224 $44(%rip) -LBB0_223: + WORD $0x1400000b // b LBB0_229 $44(%rip) +LBB0_228: WORD $0x8a2701cf // bic x15, x14, x7 WORD $0xaa0f04f1 // orr x17, x7, x15, lsl #1 WORD $0x8a3101ce // bic x14, x14, x17 @@ -1372,7 +1397,7 @@ LBB0_223: WORD $0xd37ff9ce // lsl x14, x14, #1 WORD $0xd200f1ce // eor x14, x14, #0x5555555555555555 WORD $0x8a1101ce // and x14, x14, x17 -LBB0_224: +LBB0_229: WORD $0x6e208fbe // cmeq.16b v30, v29, v0 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 @@ -1403,47 +1428,47 @@ LBB0_224: WORD $0x9203e1d1 // and x17, x14, #0x2222222222222222 WORD $0x9202e1c5 // and x5, x14, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 - WORD $0xb200e3f9 // mov x25, #1229782938247303441 - WORD $0x9b197de7 // mul x7, x15, x25 - WORD $0xb201e3f8 // mov x24, #-8608480567731124088 - WORD $0xf2e11118 // movk x24, #2184, lsl #48 - WORD $0x9b187e34 // mul x20, x17, x24 - WORD $0xca1400e7 // eor x7, x7, x20 - WORD $0xb202e3f7 // mov x23, #4919131752989213764 - WORD $0xf2e08897 // movk x23, #1092, lsl #48 - WORD $0x9b177cb4 // mul x20, x5, x23 - WORD $0xb203e3f5 // mov x21, #2459565876494606882 - WORD $0xf2e04455 // movk x21, #546, lsl #48 - WORD $0x9b157dd5 // mul x21, x14, x21 - WORD $0xca150294 // eor x20, x20, x21 - WORD $0xca1400e7 // eor x7, x7, x20 - WORD $0xb203e3fe // mov lr, #2459565876494606882 - WORD $0x9b1e7df4 // mul x20, x15, lr + WORD $0xb200e3fa // mov x26, #1229782938247303441 + WORD $0x9b1a7de7 // mul x7, x15, x26 + WORD $0xb201e3f9 // mov x25, #-8608480567731124088 + WORD $0xf2e11119 // movk x25, #2184, lsl #48 WORD $0x9b197e35 // mul x21, x17, x25 - WORD $0xca150294 // eor x20, x20, x21 + WORD $0xca1500e7 // eor x7, x7, x21 + WORD $0xb202e3f8 // mov x24, #4919131752989213764 + WORD $0xf2e08898 // movk x24, #1092, lsl #48 WORD $0x9b187cb5 // mul x21, x5, x24 - WORD $0x9b177dd7 // mul x23, x14, x23 - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0xca150294 // eor x20, x20, x21 - WORD $0xb202e3f6 // mov x22, #4919131752989213764 - WORD $0x9b167df5 // mul x21, x15, x22 - WORD $0x9b1e7e37 // mul x23, x17, lr - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0x9b197cb7 // mul x23, x5, x25 + WORD $0xb203e3f6 // mov x22, #2459565876494606882 + WORD $0xf2e04456 // movk x22, #546, lsl #48 + WORD $0x9b167dd6 // mul x22, x14, x22 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0xca1500e7 // eor x7, x7, x21 + WORD $0xb203e3f4 // mov x20, #2459565876494606882 + WORD $0x9b147df5 // mul x21, x15, x20 + WORD $0x9b1a7e36 // mul x22, x17, x26 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0x9b197cb6 // mul x22, x5, x25 WORD $0x9b187dd8 // mul x24, x14, x24 - WORD $0xca1802f7 // eor x23, x23, x24 - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0xb201e3f7 // mov x23, #-8608480567731124088 - WORD $0x9b177def // mul x15, x15, x23 - WORD $0x9b167e31 // mul x17, x17, x22 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0xb202e3f7 // mov x23, #4919131752989213764 + WORD $0x9b177df6 // mul x22, x15, x23 + WORD $0x9b147e38 // mul x24, x17, x20 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0x9b1a7cb8 // mul x24, x5, x26 + WORD $0x9b197dd9 // mul x25, x14, x25 + WORD $0xca190318 // eor x24, x24, x25 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0xb201e3f8 // mov x24, #-8608480567731124088 + WORD $0x9b187def // mul x15, x15, x24 + WORD $0x9b177e31 // mul x17, x17, x23 WORD $0xca1101ef // eor x15, x15, x17 - WORD $0x9b1e7cb1 // mul x17, x5, lr - WORD $0x9b197dce // mul x14, x14, x25 + WORD $0x9b147cb1 // mul x17, x5, x20 + WORD $0x9b1a7dce // mul x14, x14, x26 WORD $0xca0e022e // eor x14, x17, x14 WORD $0xca0e01ee // eor x14, x15, x14 WORD $0x9200e0ef // and x15, x7, #0x1111111111111111 - WORD $0x9203e291 // and x17, x20, #0x2222222222222222 - WORD $0x9202e2a5 // and x5, x21, #0x4444444444444444 + WORD $0x9203e2b1 // and x17, x21, #0x2222222222222222 + WORD $0x9202e2c5 // and x5, x22, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 WORD $0xaa1101ef // orr x15, x15, x17 WORD $0xaa0e00ae // orr x14, x5, x14 @@ -1495,104 +1520,104 @@ LBB0_224: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0xd3607ce7 // lsl x7, x7, #32 - WORD $0xaa14c0e7 // orr x7, x7, x20, lsl #48 + WORD $0xaa15c0e7 // orr x7, x7, x21, lsl #48 WORD $0x53103e31 // lsl w17, w17, #16 WORD $0xaa1100f1 // orr x17, x7, x17 WORD $0xaa0f022f // orr x15, x17, x15 - WORD $0xea2e01f4 // bics x20, x15, x14 - WORD $0x54ffe900 // b.eq LBB0_219 $-736(%rip) + WORD $0xea2e01f5 // bics x21, x15, x14 + WORD $0x54ffe900 // b.eq LBB0_224 $-736(%rip) WORD $0x92f00007 // mov x7, #9223372036854775807 -LBB0_226: - WORD $0xd1000695 // sub x21, x20, #1 - WORD $0x8a0502af // and x15, x21, x5 +LBB0_231: + WORD $0xd10006b6 // sub x22, x21, #1 + WORD $0x8a0502cf // and x15, x22, x5 WORD $0x9e6701fa // fmov d26, x15 WORD $0x0e205b5a // cnt.8b v26, v26 WORD $0x2e303b5a // uaddlv.8b h26, v26 WORD $0x1e26034f // fmov w15, s26 WORD $0x8b0001ef // add x15, x15, x0 WORD $0xeb0601ff // cmp x15, x6 - WORD $0x54002789 // b.ls LBB0_272 $1264(%rip) + WORD $0x54002789 // b.ls LBB0_277 $1264(%rip) WORD $0x910004c6 // add x6, x6, #1 - WORD $0xea1402b4 // ands x20, x21, x20 - WORD $0x54fffea1 // b.ne LBB0_226 $-44(%rip) - WORD $0x17ffff3a // b LBB0_219 $-792(%rip) -LBB0_228: + WORD $0xea1502d5 // ands x21, x22, x21 + WORD $0x54fffea1 // b.ne LBB0_231 $-44(%rip) + WORD $0x17ffff3a // b LBB0_224 $-792(%rip) +LBB0_233: WORD $0xf10001ff // cmp x15, #0 - WORD $0x5400d4ad // b.le LBB0_575 $6804(%rip) + WORD $0x5400d88d // b.le LBB0_588 $6928(%rip) WORD $0xaa0703f1 // mov x17, x7 WORD $0xad02dff7 // stp q23, q23, [sp, #80] WORD $0xad01dff7 // stp q23, q23, [sp, #48] WORD $0x92402e6e // and x14, x19, #0xfff WORD $0xf13f05df // cmp x14, #4033 - WORD $0x54000383 // b.lo LBB0_240 $112(%rip) + WORD $0x54000383 // b.lo LBB0_245 $112(%rip) WORD $0xf9400bee // ldr x14, [sp, #16] WORD $0xf10081c5 // subs x5, x14, #32 - WORD $0x540000a3 // b.lo LBB0_232 $20(%rip) + WORD $0x540000a3 // b.lo LBB0_237 $20(%rip) WORD $0xacc16e7a // ldp q26, q27, [x19], #32 WORD $0xad01effa // stp q26, q27, [sp, #48] WORD $0xaa0a03ee // mov x14, x10 - WORD $0x14000003 // b LBB0_233 $12(%rip) -LBB0_232: + WORD $0x14000003 // b LBB0_238 $12(%rip) +LBB0_237: WORD $0x9100c3ee // add x14, sp, #48 WORD $0xf9400be5 // ldr x5, [sp, #16] -LBB0_233: - WORD $0xf10040b4 // subs x20, x5, #16 - WORD $0x54000283 // b.lo LBB0_241 $80(%rip) +LBB0_238: + WORD $0xf10040b5 // subs x21, x5, #16 + WORD $0x54000283 // b.lo LBB0_246 $80(%rip) WORD $0x3cc1067a // ldr q26, [x19], #16 WORD $0x3c8105da // str q26, [x14], #16 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1002294 // subs x20, x20, #8 - WORD $0x54000222 // b.hs LBB0_242 $68(%rip) -LBB0_235: - WORD $0xf10010b4 // subs x20, x5, #4 - WORD $0x54000283 // b.lo LBB0_243 $80(%rip) -LBB0_236: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf10022b5 // subs x21, x21, #8 + WORD $0x54000222 // b.hs LBB0_247 $68(%rip) +LBB0_240: + WORD $0xf10010b5 // subs x21, x5, #4 + WORD $0x54000283 // b.lo LBB0_248 $80(%rip) +LBB0_241: WORD $0xb840466f // ldr w15, [x19], #4 WORD $0xb80045cf // str w15, [x14], #4 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1000a94 // subs x20, x20, #2 - WORD $0x54000222 // b.hs LBB0_244 $68(%rip) -LBB0_237: - WORD $0xb4000065 // cbz x5, LBB0_239 $12(%rip) -LBB0_238: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf1000ab5 // subs x21, x21, #2 + WORD $0x54000222 // b.hs LBB0_249 $68(%rip) +LBB0_242: + WORD $0xb4000065 // cbz x5, LBB0_244 $12(%rip) +LBB0_243: WORD $0x3940026f // ldrb w15, [x19] WORD $0x390001cf // strb w15, [x14] -LBB0_239: +LBB0_244: WORD $0x9100c3f3 // add x19, sp, #48 -LBB0_240: - WORD $0x5280007a // mov w26, #3 +LBB0_245: + WORD $0x5280007b // mov w27, #3 WORD $0xaa1103e7 // mov x7, x17 - WORD $0x17ffff21 // b LBB0_221 $-892(%rip) -LBB0_241: - WORD $0xf10020b4 // subs x20, x5, #8 - WORD $0x54fffe23 // b.lo LBB0_235 $-60(%rip) -LBB0_242: + WORD $0x17ffff21 // b LBB0_226 $-892(%rip) +LBB0_246: + WORD $0xf10020b5 // subs x21, x5, #8 + WORD $0x54fffe23 // b.lo LBB0_240 $-60(%rip) +LBB0_247: WORD $0xf840866f // ldr x15, [x19], #8 WORD $0xf80085cf // str x15, [x14], #8 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1001294 // subs x20, x20, #4 - WORD $0x54fffdc2 // b.hs LBB0_236 $-72(%rip) -LBB0_243: - WORD $0xf10008b4 // subs x20, x5, #2 - WORD $0x54fffe23 // b.lo LBB0_237 $-60(%rip) -LBB0_244: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf10012b5 // subs x21, x21, #4 + WORD $0x54fffdc2 // b.hs LBB0_241 $-72(%rip) +LBB0_248: + WORD $0xf10008b5 // subs x21, x5, #2 + WORD $0x54fffe23 // b.lo LBB0_242 $-60(%rip) +LBB0_249: WORD $0x7840266f // ldrh w15, [x19], #2 WORD $0x780025cf // strh w15, [x14], #2 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xb5fffdd4 // cbnz x20, LBB0_238 $-72(%rip) - WORD $0x17ffffef // b LBB0_239 $-68(%rip) -LBB0_245: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xb5fffdd5 // cbnz x21, LBB0_243 $-72(%rip) + WORD $0x17ffffef // b LBB0_244 $-68(%rip) +LBB0_250: WORD $0xf90017ff // str xzr, [sp, #40] WORD $0xd2800007 // mov x7, #0 WORD $0xd2800000 // mov x0, #0 WORD $0xd2800006 // mov x6, #0 - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xcb1301cf // sub x15, x14, x19 - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400000a // b LBB0_247 $40(%rip) -LBB0_246: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400000a // b LBB0_252 $40(%rip) +LBB0_251: WORD $0x937ffdce // asr x14, x14, #63 WORD $0xf90017ee // str x14, [sp, #40] WORD $0x9e6700ba // fmov d26, x5 @@ -1602,12 +1627,12 @@ LBB0_246: WORD $0x8b0001c0 // add x0, x14, x0 WORD $0x91010273 // add x19, x19, #64 WORD $0xa941bfe7 // ldp x7, x15, [sp, #24] -LBB0_247: +LBB0_252: WORD $0xf10101ee // subs x14, x15, #64 WORD $0xf90013ee // str x14, [sp, #32] WORD $0xf9000bef // str x15, [sp, #16] - WORD $0x5400176b // b.lt LBB0_255 $748(%rip) -LBB0_248: + WORD $0x5400176b // b.lt LBB0_260 $748(%rip) +LBB0_253: WORD $0xad40727d // ldp q29, q28, [x19] WORD $0xad416a7b // ldp q27, q26, [x19, #32] WORD $0x6e218fbe // cmeq.16b v30, v29, v1 @@ -1636,11 +1661,11 @@ LBB0_248: WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 WORD $0xaa0701cf // orr x15, x14, x7 - WORD $0xb500008f // cbnz x15, LBB0_250 $16(%rip) + WORD $0xb500008f // cbnz x15, LBB0_255 $16(%rip) WORD $0xf9000fff // str xzr, [sp, #24] WORD $0xd280000e // mov x14, #0 - WORD $0x1400000b // b LBB0_251 $44(%rip) -LBB0_250: + WORD $0x1400000b // b LBB0_256 $44(%rip) +LBB0_255: WORD $0x8a2701cf // bic x15, x14, x7 WORD $0xaa0f04f1 // orr x17, x7, x15, lsl #1 WORD $0x8a3101ce // bic x14, x14, x17 @@ -1651,7 +1676,7 @@ LBB0_250: WORD $0xd37ff9ce // lsl x14, x14, #1 WORD $0xd200f1ce // eor x14, x14, #0x5555555555555555 WORD $0x8a1101ce // and x14, x14, x17 -LBB0_251: +LBB0_256: WORD $0x6e208fbe // cmeq.16b v30, v29, v0 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 @@ -1682,47 +1707,47 @@ LBB0_251: WORD $0x9203e1d1 // and x17, x14, #0x2222222222222222 WORD $0x9202e1c5 // and x5, x14, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 - WORD $0xb200e3f9 // mov x25, #1229782938247303441 - WORD $0x9b197de7 // mul x7, x15, x25 - WORD $0xb201e3f8 // mov x24, #-8608480567731124088 - WORD $0xf2e11118 // movk x24, #2184, lsl #48 - WORD $0x9b187e34 // mul x20, x17, x24 - WORD $0xca1400e7 // eor x7, x7, x20 - WORD $0xb202e3f7 // mov x23, #4919131752989213764 - WORD $0xf2e08897 // movk x23, #1092, lsl #48 - WORD $0x9b177cb4 // mul x20, x5, x23 - WORD $0xb203e3f5 // mov x21, #2459565876494606882 - WORD $0xf2e04455 // movk x21, #546, lsl #48 - WORD $0x9b157dd5 // mul x21, x14, x21 - WORD $0xca150294 // eor x20, x20, x21 - WORD $0xca1400e7 // eor x7, x7, x20 - WORD $0xb203e3fe // mov lr, #2459565876494606882 - WORD $0x9b1e7df4 // mul x20, x15, lr + WORD $0xb200e3fa // mov x26, #1229782938247303441 + WORD $0x9b1a7de7 // mul x7, x15, x26 + WORD $0xb201e3f9 // mov x25, #-8608480567731124088 + WORD $0xf2e11119 // movk x25, #2184, lsl #48 WORD $0x9b197e35 // mul x21, x17, x25 - WORD $0xca150294 // eor x20, x20, x21 + WORD $0xca1500e7 // eor x7, x7, x21 + WORD $0xb202e3f8 // mov x24, #4919131752989213764 + WORD $0xf2e08898 // movk x24, #1092, lsl #48 WORD $0x9b187cb5 // mul x21, x5, x24 - WORD $0x9b177dd7 // mul x23, x14, x23 - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0xca150294 // eor x20, x20, x21 - WORD $0xb202e3f6 // mov x22, #4919131752989213764 - WORD $0x9b167df5 // mul x21, x15, x22 - WORD $0x9b1e7e37 // mul x23, x17, lr - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0x9b197cb7 // mul x23, x5, x25 + WORD $0xb203e3f6 // mov x22, #2459565876494606882 + WORD $0xf2e04456 // movk x22, #546, lsl #48 + WORD $0x9b167dd6 // mul x22, x14, x22 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0xca1500e7 // eor x7, x7, x21 + WORD $0xb203e3f4 // mov x20, #2459565876494606882 + WORD $0x9b147df5 // mul x21, x15, x20 + WORD $0x9b1a7e36 // mul x22, x17, x26 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0x9b197cb6 // mul x22, x5, x25 WORD $0x9b187dd8 // mul x24, x14, x24 - WORD $0xca1802f7 // eor x23, x23, x24 - WORD $0xca1702b5 // eor x21, x21, x23 - WORD $0xb201e3f7 // mov x23, #-8608480567731124088 - WORD $0x9b177def // mul x15, x15, x23 - WORD $0x9b167e31 // mul x17, x17, x22 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0xca1602b5 // eor x21, x21, x22 + WORD $0xb202e3f7 // mov x23, #4919131752989213764 + WORD $0x9b177df6 // mul x22, x15, x23 + WORD $0x9b147e38 // mul x24, x17, x20 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0x9b1a7cb8 // mul x24, x5, x26 + WORD $0x9b197dd9 // mul x25, x14, x25 + WORD $0xca190318 // eor x24, x24, x25 + WORD $0xca1802d6 // eor x22, x22, x24 + WORD $0xb201e3f8 // mov x24, #-8608480567731124088 + WORD $0x9b187def // mul x15, x15, x24 + WORD $0x9b177e31 // mul x17, x17, x23 WORD $0xca1101ef // eor x15, x15, x17 - WORD $0x9b1e7cb1 // mul x17, x5, lr - WORD $0x9b197dce // mul x14, x14, x25 + WORD $0x9b147cb1 // mul x17, x5, x20 + WORD $0x9b1a7dce // mul x14, x14, x26 WORD $0xca0e022e // eor x14, x17, x14 WORD $0xca0e01ee // eor x14, x15, x14 WORD $0x9200e0ef // and x15, x7, #0x1111111111111111 - WORD $0x9203e291 // and x17, x20, #0x2222222222222222 - WORD $0x9202e2a5 // and x5, x21, #0x4444444444444444 + WORD $0x9203e2b1 // and x17, x21, #0x2222222222222222 + WORD $0x9202e2c5 // and x5, x22, #0x4444444444444444 WORD $0x9201e1ce // and x14, x14, #0x8888888888888888 WORD $0xaa1101ef // orr x15, x15, x17 WORD $0xaa0e00ae // orr x14, x5, x14 @@ -1774,118 +1799,119 @@ LBB0_251: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0xd3607ce7 // lsl x7, x7, #32 - WORD $0xaa14c0e7 // orr x7, x7, x20, lsl #48 + WORD $0xaa15c0e7 // orr x7, x7, x21, lsl #48 WORD $0x53103e31 // lsl w17, w17, #16 WORD $0xaa1100f1 // orr x17, x7, x17 WORD $0xaa0f022f // orr x15, x17, x15 - WORD $0xea2e01f4 // bics x20, x15, x14 - WORD $0x54ffe900 // b.eq LBB0_246 $-736(%rip) + WORD $0xea2e01f5 // bics x21, x15, x14 + WORD $0x54ffe900 // b.eq LBB0_251 $-736(%rip) WORD $0x92f00007 // mov x7, #9223372036854775807 -LBB0_253: - WORD $0xd1000695 // sub x21, x20, #1 - WORD $0x8a0502af // and x15, x21, x5 +LBB0_258: + WORD $0xd10006b6 // sub x22, x21, #1 + WORD $0x8a0502cf // and x15, x22, x5 WORD $0x9e6701fa // fmov d26, x15 WORD $0x0e205b5a // cnt.8b v26, v26 WORD $0x2e303b5a // uaddlv.8b h26, v26 WORD $0x1e26034f // fmov w15, s26 WORD $0x8b0001ef // add x15, x15, x0 WORD $0xeb0601ff // cmp x15, x6 - WORD $0x54000729 // b.ls LBB0_272 $228(%rip) + WORD $0x54000729 // b.ls LBB0_277 $228(%rip) WORD $0x910004c6 // add x6, x6, #1 - WORD $0xea1402b4 // ands x20, x21, x20 - WORD $0x54fffea1 // b.ne LBB0_253 $-44(%rip) - WORD $0x17ffff3a // b LBB0_246 $-792(%rip) -LBB0_255: + WORD $0xea1502d5 // ands x21, x22, x21 + WORD $0x54fffea1 // b.ne LBB0_258 $-44(%rip) + WORD $0x17ffff3a // b LBB0_251 $-792(%rip) +LBB0_260: WORD $0xf10001ff // cmp x15, #0 - WORD $0x5400b44d // b.le LBB0_575 $5768(%rip) + WORD $0x5400b82d // b.le LBB0_588 $5892(%rip) WORD $0xaa0703f1 // mov x17, x7 WORD $0xad02dff7 // stp q23, q23, [sp, #80] WORD $0xad01dff7 // stp q23, q23, [sp, #48] WORD $0x92402e6e // and x14, x19, #0xfff WORD $0xf13f05df // cmp x14, #4033 - WORD $0x54000383 // b.lo LBB0_267 $112(%rip) + WORD $0x54000383 // b.lo LBB0_272 $112(%rip) WORD $0xf9400bee // ldr x14, [sp, #16] WORD $0xf10081c5 // subs x5, x14, #32 - WORD $0x540000a3 // b.lo LBB0_259 $20(%rip) + WORD $0x540000a3 // b.lo LBB0_264 $20(%rip) WORD $0xacc16e7a // ldp q26, q27, [x19], #32 WORD $0xad01effa // stp q26, q27, [sp, #48] WORD $0xaa0a03ee // mov x14, x10 - WORD $0x14000003 // b LBB0_260 $12(%rip) -LBB0_259: + WORD $0x14000003 // b LBB0_265 $12(%rip) +LBB0_264: WORD $0x9100c3ee // add x14, sp, #48 WORD $0xf9400be5 // ldr x5, [sp, #16] -LBB0_260: - WORD $0xf10040b4 // subs x20, x5, #16 - WORD $0x54000283 // b.lo LBB0_268 $80(%rip) +LBB0_265: + WORD $0xf10040b5 // subs x21, x5, #16 + WORD $0x54000283 // b.lo LBB0_273 $80(%rip) WORD $0x3cc1067a // ldr q26, [x19], #16 WORD $0x3c8105da // str q26, [x14], #16 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1002294 // subs x20, x20, #8 - WORD $0x54000222 // b.hs LBB0_269 $68(%rip) -LBB0_262: - WORD $0xf10010b4 // subs x20, x5, #4 - WORD $0x54000283 // b.lo LBB0_270 $80(%rip) -LBB0_263: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf10022b5 // subs x21, x21, #8 + WORD $0x54000222 // b.hs LBB0_274 $68(%rip) +LBB0_267: + WORD $0xf10010b5 // subs x21, x5, #4 + WORD $0x54000283 // b.lo LBB0_275 $80(%rip) +LBB0_268: WORD $0xb840466f // ldr w15, [x19], #4 WORD $0xb80045cf // str w15, [x14], #4 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1000a94 // subs x20, x20, #2 - WORD $0x54000222 // b.hs LBB0_271 $68(%rip) -LBB0_264: - WORD $0xb4000065 // cbz x5, LBB0_266 $12(%rip) -LBB0_265: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf1000ab5 // subs x21, x21, #2 + WORD $0x54000222 // b.hs LBB0_276 $68(%rip) +LBB0_269: + WORD $0xb4000065 // cbz x5, LBB0_271 $12(%rip) +LBB0_270: WORD $0x3940026f // ldrb w15, [x19] WORD $0x390001cf // strb w15, [x14] -LBB0_266: +LBB0_271: WORD $0x9100c3f3 // add x19, sp, #48 -LBB0_267: - WORD $0x5280007a // mov w26, #3 +LBB0_272: + WORD $0x5280007b // mov w27, #3 WORD $0xaa1103e7 // mov x7, x17 - WORD $0x17ffff21 // b LBB0_248 $-892(%rip) -LBB0_268: - WORD $0xf10020b4 // subs x20, x5, #8 - WORD $0x54fffe23 // b.lo LBB0_262 $-60(%rip) -LBB0_269: + WORD $0x17ffff21 // b LBB0_253 $-892(%rip) +LBB0_273: + WORD $0xf10020b5 // subs x21, x5, #8 + WORD $0x54fffe23 // b.lo LBB0_267 $-60(%rip) +LBB0_274: WORD $0xf840866f // ldr x15, [x19], #8 WORD $0xf80085cf // str x15, [x14], #8 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xf1001294 // subs x20, x20, #4 - WORD $0x54fffdc2 // b.hs LBB0_263 $-72(%rip) -LBB0_270: - WORD $0xf10008b4 // subs x20, x5, #2 - WORD $0x54fffe23 // b.lo LBB0_264 $-60(%rip) -LBB0_271: + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xf10012b5 // subs x21, x21, #4 + WORD $0x54fffdc2 // b.hs LBB0_268 $-72(%rip) +LBB0_275: + WORD $0xf10008b5 // subs x21, x5, #2 + WORD $0x54fffe23 // b.lo LBB0_269 $-60(%rip) +LBB0_276: WORD $0x7840266f // ldrh w15, [x19], #2 WORD $0x780025cf // strh w15, [x14], #2 - WORD $0xaa1403e5 // mov x5, x20 - WORD $0xb5fffdd4 // cbnz x20, LBB0_265 $-72(%rip) - WORD $0x17ffffef // b LBB0_266 $-68(%rip) -LBB0_272: - WORD $0xf940076e // ldr x14, [x27, #8] - WORD $0xdac0028f // rbit x15, x20 + WORD $0xaa1503e5 // mov x5, x21 + WORD $0xb5fffdd5 // cbnz x21, LBB0_270 $-72(%rip) + WORD $0x17ffffef // b LBB0_271 $-68(%rip) +LBB0_277: + WORD $0xf94007ce // ldr x14, [lr, #8] + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 WORD $0xf9400bf1 // ldr x17, [sp, #16] WORD $0xcb1101ef // sub x15, x15, x17 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910005cf // add x15, x14, #1 WORD $0xf900002f // str x15, [x1] - WORD $0xf9400771 // ldr x17, [x27, #8] + WORD $0xf94007d1 // ldr x17, [lr, #8] WORD $0xeb1101ff // cmp x15, x17 WORD $0x9a8e2633 // csinc x19, x17, x14, hs WORD $0x12800011 // mov w17, #-1 WORD $0xf9000033 // str x19, [x1] WORD $0xda9f9100 // csinv x0, x8, xzr, ls - WORD $0xb6f80560 // tbz x0, #63, LBB0_284 $172(%rip) - WORD $0x14000563 // b LBB0_578 $5516(%rip) -LBB0_273: - WORD $0xf940076e // ldr x14, [x27, #8] + WORD $0xb6f878c0 // tbz x0, #63, LBB0_480 $3864(%rip) + WORD $0x14000582 // b LBB0_591 $5640(%rip) +LBB0_278: + WORD $0xf94007ce // ldr x14, [lr, #8] WORD $0xcb1301ce // sub x14, x14, x19 WORD $0xf10041df // cmp x14, #16 - WORD $0x540001e3 // b.lo LBB0_276 $60(%rip) -LBB0_274: - WORD $0x3cf36bda // ldr q26, [lr, x19] + WORD $0x54000223 // b.lo LBB0_282 $68(%rip) + WORD $0xd2800000 // mov x0, #0 +LBB0_280: + WORD $0x3cf36a9a // ldr q26, [x20, x19] WORD $0x6e348f5b // cmeq.16b v27, v26, v20 WORD $0x4e321f5a // and.16b v26, v26, v18 WORD $0x6e358f5a // cmeq.16b v26, v26, v21 @@ -1893,54 +1919,51 @@ LBB0_274: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260340 // fmov w0, s26 - WORD $0x350002a0 // cbnz w0, LBB0_282 $84(%rip) + WORD $0x1e260345 // fmov w5, s26 + WORD $0x35000bc5 // cbnz w5, LBB0_299 $376(%rip) WORD $0xd10041ce // sub x14, x14, #16 WORD $0x91004273 // add x19, x19, #16 + WORD $0x91004000 // add x0, x0, #16 WORD $0xf1003ddf // cmp x14, #15 - WORD $0x54fffe68 // b.hi LBB0_274 $-52(%rip) -LBB0_276: - WORD $0x8b1303c0 // add x0, lr, x19 - WORD $0xb4ff79ee // cbz x14, LBB0_131 $-4292(%rip) + WORD $0x54fffe48 // b.hi LBB0_280 $-56(%rip) +LBB0_282: + WORD $0x8b130280 // add x0, x20, x19 + WORD $0xb400024e // cbz x14, LBB0_289 $72(%rip) WORD $0x8b0e0005 // add x5, x0, x14 - WORD $0xcb1e0013 // sub x19, x0, lr -LBB0_278: + WORD $0xd284c011 // mov x17, #9728 + WORD $0xf2c20031 // movk x17, #4097, lsl #32 +LBB0_284: WORD $0x39400006 // ldrb w6, [x0] WORD $0x7100b0df // cmp w6, #44 - WORD $0x54ff7960 // b.eq LBB0_132 $-4308(%rip) - WORD $0x7101f4df // cmp w6, #125 - WORD $0x54ff7920 // b.eq LBB0_132 $-4316(%rip) + WORD $0x9ac6218f // lsl x15, x12, x6 + WORD $0x8a1101ef // and x15, x15, x17 + WORD $0xfa4099e4 // ccmp x15, #0, #4, ls + WORD $0x54000121 // b.ne LBB0_289 $36(%rip) WORD $0x710174df // cmp w6, #93 - WORD $0x54ff78e0 // b.eq LBB0_132 $-4324(%rip) + WORD $0x540000e0 // b.eq LBB0_289 $28(%rip) + WORD $0x7101f4df // cmp w6, #125 + WORD $0x540000a0 // b.eq LBB0_289 $20(%rip) WORD $0x91000400 // add x0, x0, #1 - WORD $0x91000673 // add x19, x19, #1 WORD $0xf10005ce // subs x14, x14, #1 - WORD $0x54fffec1 // b.ne LBB0_278 $-40(%rip) - WORD $0x17fffbc0 // b LBB0_130 $-4352(%rip) -LBB0_282: - WORD $0x5ac0000e // rbit w14, w0 - WORD $0x5ac011ce // clz w14, w14 - WORD $0x8b1301d3 // add x19, x14, x19 -LBB0_283: + WORD $0x54fffe81 // b.ne LBB0_284 $-48(%rip) + WORD $0xaa0503e0 // mov x0, x5 +LBB0_289: + WORD $0xcb140013 // sub x19, x0, x20 WORD $0xf9000033 // str x19, [x1] - WORD $0xaa0803e0 // mov x0, x8 - WORD $0xeb07011f // cmp x8, x7 - WORD $0x5400a742 // b.hs LBB0_578 $5352(%rip) -LBB0_284: - WORD $0xf9400056 // ldr x22, [x2] - WORD $0xaa0b03e0 // mov x0, x11 - WORD $0xb5ff2ef6 // cbnz x22, LBB0_1 $-6692(%rip) - WORD $0x14000536 // b LBB0_578 $5336(%rip) -LBB0_285: - WORD $0xf9400760 // ldr x0, [x27, #8] + WORD $0x5280007b // mov w27, #3 + WORD $0x92f00007 // mov x7, #9223372036854775807 + WORD $0x12800011 // mov w17, #-1 + WORD $0x14000395 // b LBB0_479 $3668(%rip) +LBB0_290: + WORD $0xf94007c0 // ldr x0, [lr, #8] WORD $0xcb13000e // sub x14, x0, x19 WORD $0xf10081df // cmp x14, #32 - WORD $0x5400552b // b.lt LBB0_423 $2724(%rip) + WORD $0x5400582b // b.lt LBB0_433 $2820(%rip) WORD $0xd280000e // mov x14, #0 WORD $0xd2800005 // mov x5, #0 WORD $0xcb080000 // sub x0, x0, x8 WORD $0x528003f3 // mov w19, #31 -LBB0_287: +LBB0_292: WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x3cc011fa // ldur q26, [x15, #1] WORD $0x3cc111fb // ldur q27, [x15, #17] @@ -1948,30 +1971,30 @@ LBB0_287: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260395 // fmov w21, s28 + WORD $0x1e260396 // fmov w22, s28 WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 WORD $0x1e26038f // fmov w15, s28 - WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x33103df6 // bfi w22, w15, #16, #16 WORD $0x6e218f5a // cmeq.16b v26, v26, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x6e218f7a // cmeq.16b v26, v27, v1 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df4 // bfi w20, w15, #16, #16 - WORD $0x7100029f // cmp w20, #0 + WORD $0x33103df5 // bfi w21, w15, #16, #16 + WORD $0x710002bf // cmp w21, #0 WORD $0xfa4008a0 // ccmp x5, #0, #0, eq - WORD $0x540001a0 // b.eq LBB0_289 $52(%rip) - WORD $0x0a25028f // bic w15, w20, w5 + WORD $0x540001a0 // b.eq LBB0_294 $52(%rip) + WORD $0x0a2502af // bic w15, w21, w5 WORD $0x2a0f04b1 // orr w17, w5, w15, lsl #1 - WORD $0x0a040285 // and w5, w20, w4 + WORD $0x0a0402a5 // and w5, w21, w4 WORD $0x0a3100a5 // bic w5, w5, w17 WORD $0x2b0f00af // adds w15, w5, w15 WORD $0x1a9f37e5 // cset w5, hs @@ -1979,38 +2002,65 @@ LBB0_287: WORD $0x0a1101ef // and w15, w15, w17 WORD $0x12800011 // mov w17, #-1 WORD $0x2a2f03ef // mvn w15, w15 - WORD $0x8a1501f5 // and x21, x15, x21 - WORD $0x14000002 // b LBB0_290 $8(%rip) -LBB0_289: + WORD $0x8a1601f6 // and x22, x15, x22 + WORD $0x14000002 // b LBB0_295 $8(%rip) +LBB0_294: WORD $0xd2800005 // mov x5, #0 -LBB0_290: - WORD $0xb5ff6bb5 // cbnz x21, LBB0_120 $-4748(%rip) +LBB0_295: + WORD $0xb5ff68b6 // cbnz x22, LBB0_120 $-4844(%rip) WORD $0x910081ce // add x14, x14, #32 WORD $0xd1008273 // sub x19, x19, #32 WORD $0x8b13000f // add x15, x0, x19 WORD $0xf100fdff // cmp x15, #63 - WORD $0x54fffa4c // b.gt LBB0_287 $-184(%rip) - WORD $0xb5008645 // cbnz x5, LBB0_518 $4296(%rip) + WORD $0x54fffa4c // b.gt LBB0_292 $-184(%rip) + WORD $0xb5008a25 // cbnz x5, LBB0_531 $4420(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910005e5 // add x5, x15, #1 WORD $0xaa2e03ee // mvn x14, x14 WORD $0x8b0001ce // add x14, x14, x0 WORD $0xf10005df // cmp x14, #1 - WORD $0x54004e4a // b.ge LBB0_424 $2504(%rip) - WORD $0x140004f6 // b LBB0_577 $5080(%rip) -LBB0_294: - WORD $0xaa1903e5 // mov x5, x25 + WORD $0x5400514a // b.ge LBB0_434 $2600(%rip) + WORD $0x14000515 // b LBB0_590 $5204(%rip) +LBB0_299: + WORD $0x5ac000ae // rbit w14, w5 + WORD $0x5ac011ce // clz w14, w14 + WORD $0x8b1301d3 // add x19, x14, x19 + WORD $0xf9000033 // str x19, [x1] + WORD $0xf100067f // cmp x19, #1 + WORD $0x54006a0b // b.lt LBB0_479 $3392(%rip) + WORD $0x8b0001ce // add x14, x14, x0 +LBB0_301: + WORD $0x386e68cf // ldrb w15, [x6, x14] + WORD $0x710081ff // cmp w15, #32 + WORD $0x9acf218f // lsl x15, x12, x15 + WORD $0x8a0d01ef // and x15, x15, x13 + WORD $0xfa4099e4 // ccmp x15, #0, #4, ls + WORD $0x54000120 // b.eq LBB0_303 $36(%rip) + WORD $0x8b0e010f // add x15, x8, x14 + WORD $0xf900002f // str x15, [x1] + WORD $0xd10005ce // sub x14, x14, #1 + WORD $0x8b0e0100 // add x0, x8, x14 + WORD $0x9100080f // add x15, x0, #2 + WORD $0xf10005ff // cmp x15, #1 + WORD $0x54fffe8c // b.gt LBB0_301 $-48(%rip) + WORD $0x17fffb65 // b LBB0_137 $-4716(%rip) +LBB0_303: + WORD $0x8b0e010e // add x14, x8, x14 + WORD $0x910005d3 // add x19, x14, #1 + WORD $0x1400033e // b LBB0_479 $3320(%rip) +LBB0_304: + WORD $0xaa1a03e5 // mov x5, x26 WORD $0x9280000e // mov x14, #-1 - WORD $0xb5ff8b40 // cbnz x0, LBB0_169 $-3736(%rip) - WORD $0x14000492 // b LBB0_547 $4680(%rip) -LBB0_295: - WORD $0x540091a0 // b.eq LBB0_545 $4660(%rip) - WORD $0xf10102df // cmp x22, #64 - WORD $0x540055a3 // b.lo LBB0_438 $2740(%rip) + WORD $0xb5ff8840 // cbnz x0, LBB0_174 $-3832(%rip) + WORD $0x14000499 // b LBB0_560 $4708(%rip) +LBB0_305: + WORD $0x54009280 // b.eq LBB0_558 $4688(%rip) + WORD $0xf10102ff // cmp x23, #64 + WORD $0x540055a3 // b.lo LBB0_448 $2740(%rip) WORD $0xd2800006 // mov x6, #0 WORD $0x92800000 // mov x0, #-1 -LBB0_298: - WORD $0x8b1303ce // add x14, lr, x19 +LBB0_308: + WORD $0x8b13028e // add x14, x20, x19 WORD $0xad4071dd // ldp q29, q28, [x14] WORD $0xad4169db // ldp q27, q26, [x14, #32] WORD $0x6e208fbe // cmeq.16b v30, v29, v0 @@ -2042,30 +2092,30 @@ LBB0_298: WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d4 // fmov w20, s30 + WORD $0x1e2603d5 // fmov w21, s30 WORD $0x6e218f7e // cmeq.16b v30, v27, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d5 // fmov w21, s30 + WORD $0x1e2603d6 // fmov w22, s30 WORD $0x6e218f5e // cmeq.16b v30, v26, v1 WORD $0x4e221fde // and.16b v30, v30, v2 WORD $0x4e0303de // tbl.16b v30, { v30 }, v3 WORD $0x4e71bbde // addv.8h h30, v30 - WORD $0x1e2603d7 // fmov w23, s30 + WORD $0x1e2603d8 // fmov w24, s30 WORD $0xd3607e31 // lsl x17, x17, #32 WORD $0xaa05c231 // orr x17, x17, x5, lsl #48 WORD $0x53103def // lsl w15, w15, #16 WORD $0xaa0f022f // orr x15, x17, x15 WORD $0xaa0e01ee // orr x14, x15, x14 - WORD $0xd3607eaf // lsl x15, x21, #32 - WORD $0xaa17c1ef // orr x15, x15, x23, lsl #48 - WORD $0x53103e91 // lsl w17, w20, #16 + WORD $0xd3607ecf // lsl x15, x22, #32 + WORD $0xaa18c1ef // orr x15, x15, x24, lsl #48 + WORD $0x53103eb1 // lsl w17, w21, #16 WORD $0xaa1101ef // orr x15, x15, x17 WORD $0xaa0701e5 // orr x5, x15, x7 - WORD $0xb5000445 // cbnz x5, LBB0_303 $136(%rip) - WORD $0xb50004c6 // cbnz x6, LBB0_304 $152(%rip) -LBB0_300: + WORD $0xb5000445 // cbnz x5, LBB0_313 $136(%rip) + WORD $0xb50004c6 // cbnz x6, LBB0_314 $152(%rip) +LBB0_310: WORD $0x6e3d349d // cmhi.16b v29, v4, v29 WORD $0x4e221fbd // and.16b v29, v29, v2 WORD $0x4e0303bd // tbl.16b v29, { v29 }, v3 @@ -2091,20 +2141,20 @@ LBB0_300: WORD $0x53103e31 // lsl w17, w17, #16 WORD $0xaa1100b1 // orr x17, x5, x17 WORD $0xaa0f0225 // orr x5, x17, x15 - WORD $0xb500030e // cbnz x14, LBB0_305 $96(%rip) - WORD $0xb5008845 // cbnz x5, LBB0_551 $4360(%rip) - WORD $0xd10102d6 // sub x22, x22, #64 + WORD $0xb500030e // cbnz x14, LBB0_315 $96(%rip) + WORD $0xb5008925 // cbnz x5, LBB0_564 $4388(%rip) + WORD $0xd10102f7 // sub x23, x23, #64 WORD $0x91010273 // add x19, x19, #64 - WORD $0xf100fedf // cmp x22, #63 - WORD $0x54fff568 // b.hi LBB0_298 $-340(%rip) - WORD $0x14000229 // b LBB0_430 $2212(%rip) -LBB0_303: + WORD $0xf100feff // cmp x23, #63 + WORD $0x54fff568 // b.hi LBB0_308 $-340(%rip) + WORD $0x14000229 // b LBB0_440 $2212(%rip) +LBB0_313: WORD $0xb100041f // cmn x0, #1 WORD $0xdac000af // rbit x15, x5 WORD $0xdac011ef // clz x15, x15 WORD $0x8b1301ef // add x15, x15, x19 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_304: +LBB0_314: WORD $0x8a2600af // bic x15, x5, x6 WORD $0xaa0f04d1 // orr x17, x6, x15, lsl #1 WORD $0x8a3100a5 // bic x5, x5, x17 @@ -2115,9 +2165,9 @@ LBB0_304: WORD $0xd200f1ef // eor x15, x15, #0x5555555555555555 WORD $0x8a1101ef // and x15, x15, x17 WORD $0x8a2f01ce // bic x14, x14, x15 - WORD $0x5280007a // mov w26, #3 - WORD $0x17ffffd0 // b LBB0_300 $-192(%rip) -LBB0_305: + WORD $0x5280007b // mov w27, #3 + WORD $0x17ffffd0 // b LBB0_310 $-192(%rip) +LBB0_315: WORD $0xdac001ce // rbit x14, x14 WORD $0xdac011ce // clz x14, x14 WORD $0xdac000af // rbit x15, x5 @@ -2125,33 +2175,33 @@ LBB0_305: WORD $0xeb0e00bf // cmp x5, x14 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x54008f03 // b.lo LBB0_574 $4576(%rip) -LBB0_306: + WORD $0x54008fe3 // b.lo LBB0_587 $4604(%rip) +LBB0_316: WORD $0x8b1301ce // add x14, x14, x19 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6ffe7d3 // tbz x19, #63, LBB0_283 $-776(%rip) - WORD $0x14000413 // b LBB0_544 $4172(%rip) -LBB0_307: + WORD $0xb6f85833 // tbz x19, #63, LBB0_478 $2820(%rip) + WORD $0x1400041a // b LBB0_557 $4200(%rip) +LBB0_317: WORD $0x3940040e // ldrb w14, [x0, #1] WORD $0x5100b9ce // sub w14, w14, #46 WORD $0x7100dddf // cmp w14, #55 - WORD $0x54ff78e8 // b.hi LBB0_161 $-4324(%rip) + WORD $0x54ff75e8 // b.hi LBB0_166 $-4420(%rip) WORD $0x9ace218f // lsl x15, x12, x14 WORD $0x5280002e // mov w14, #1 WORD $0xb20903f1 // mov x17, #36028797027352576 WORD $0xf2800031 // movk x17, #1 WORD $0xea1101ff // tst x15, x17 WORD $0x12800011 // mov w17, #-1 - WORD $0x54001420 // b.eq LBB0_355 $644(%rip) -LBB0_309: - WORD $0xf100433f // cmp x25, #16 - WORD $0x54005143 // b.lo LBB0_460 $2600(%rip) - WORD $0xd2800015 // mov x21, #0 + WORD $0x54001420 // b.eq LBB0_365 $644(%rip) +LBB0_319: + WORD $0xf100435f // cmp x26, #16 + WORD $0x54005143 // b.lo LBB0_470 $2600(%rip) + WORD $0xd2800016 // mov x22, #0 WORD $0xd2800005 // mov x5, #0 WORD $0x92800006 // mov x6, #-1 - WORD $0x92800016 // mov x22, #-1 - WORD $0x9280001a // mov x26, #-1 -LBB0_311: + WORD $0x92800017 // mov x23, #-1 + WORD $0x9280001b // mov x27, #-1 +LBB0_321: WORD $0x3ce5681a // ldr q26, [x0, x5] WORD $0x6e258f5b // cmeq.16b v27, v26, v5 WORD $0x6e268f5c // cmeq.16b v28, v26, v6 @@ -2184,210 +2234,210 @@ LBB0_311: WORD $0x32103dce // orr w14, w14, #0xffff0000 WORD $0x5ac001ce // rbit w14, w14 WORD $0x5ac011ce // clz w14, w14 - WORD $0x12800014 // mov w20, #-1 - WORD $0x1ace2294 // lsl w20, w20, w14 - WORD $0x0a3401f7 // bic w23, w15, w20 - WORD $0x0a340238 // bic w24, w17, w20 - WORD $0x0a3400f4 // bic w20, w7, w20 + WORD $0x12800015 // mov w21, #-1 + WORD $0x1ace22b5 // lsl w21, w21, w14 + WORD $0x0a3501f8 // bic w24, w15, w21 + WORD $0x0a350239 // bic w25, w17, w21 + WORD $0x0a3500f5 // bic w21, w7, w21 WORD $0x710041df // cmp w14, #16 - WORD $0x1a9701f7 // csel w23, w15, w23, eq - WORD $0x1a980238 // csel w24, w17, w24, eq - WORD $0x1a9400f4 // csel w20, w7, w20, eq - WORD $0x510006ef // sub w15, w23, #1 - WORD $0x6a1701ef // ands w15, w15, w23 - WORD $0x540035a1 // b.ne LBB0_422 $1716(%rip) + WORD $0x1a9801f8 // csel w24, w15, w24, eq + WORD $0x1a990239 // csel w25, w17, w25, eq + WORD $0x1a9500f5 // csel w21, w7, w21, eq WORD $0x5100070f // sub w15, w24, #1 WORD $0x6a1801ef // ands w15, w15, w24 - WORD $0x54003541 // b.ne LBB0_422 $1704(%rip) - WORD $0x5100068f // sub w15, w20, #1 - WORD $0x6a1401ef // ands w15, w15, w20 - WORD $0x540034e1 // b.ne LBB0_422 $1692(%rip) - WORD $0x340000d7 // cbz w23, LBB0_317 $24(%rip) - WORD $0x5ac002ef // rbit w15, w23 - WORD $0x5ac011f7 // clz w23, w15 - WORD $0xb100075f // cmn x26, #1 - WORD $0x540038a1 // b.ne LBB0_431 $1812(%rip) - WORD $0x8b1700ba // add x26, x5, x23 -LBB0_317: - WORD $0x340000d8 // cbz w24, LBB0_320 $24(%rip) + WORD $0x540035a1 // b.ne LBB0_432 $1716(%rip) + WORD $0x5100072f // sub w15, w25, #1 + WORD $0x6a1901ef // ands w15, w15, w25 + WORD $0x54003541 // b.ne LBB0_432 $1704(%rip) + WORD $0x510006af // sub w15, w21, #1 + WORD $0x6a1501ef // ands w15, w15, w21 + WORD $0x540034e1 // b.ne LBB0_432 $1692(%rip) + WORD $0x340000d8 // cbz w24, LBB0_327 $24(%rip) WORD $0x5ac0030f // rbit w15, w24 - WORD $0x5ac011f7 // clz w23, w15 - WORD $0xb10006df // cmn x22, #1 - WORD $0x540037e1 // b.ne LBB0_431 $1788(%rip) - WORD $0x8b1700b6 // add x22, x5, x23 -LBB0_320: - WORD $0x340000d4 // cbz w20, LBB0_323 $24(%rip) - WORD $0x5ac0028f // rbit w15, w20 - WORD $0x5ac011f4 // clz w20, w15 + WORD $0x5ac011f8 // clz w24, w15 + WORD $0xb100077f // cmn x27, #1 + WORD $0x540038a1 // b.ne LBB0_441 $1812(%rip) + WORD $0x8b1800bb // add x27, x5, x24 +LBB0_327: + WORD $0x340000d9 // cbz w25, LBB0_330 $24(%rip) + WORD $0x5ac0032f // rbit w15, w25 + WORD $0x5ac011f8 // clz w24, w15 + WORD $0xb10006ff // cmn x23, #1 + WORD $0x540037e1 // b.ne LBB0_441 $1788(%rip) + WORD $0x8b1800b7 // add x23, x5, x24 +LBB0_330: + WORD $0x340000d5 // cbz w21, LBB0_333 $24(%rip) + WORD $0x5ac002af // rbit w15, w21 + WORD $0x5ac011f5 // clz w21, w15 WORD $0xb10004df // cmn x6, #1 - WORD $0x540047c1 // b.ne LBB0_459 $2296(%rip) - WORD $0x8b1400a6 // add x6, x5, x20 -LBB0_323: + WORD $0x540047c1 // b.ne LBB0_469 $2296(%rip) + WORD $0x8b1500a6 // add x6, x5, x21 +LBB0_333: WORD $0x710041df // cmp w14, #16 - WORD $0x54000601 // b.ne LBB0_341 $192(%rip) + WORD $0x54000601 // b.ne LBB0_351 $192(%rip) WORD $0x910040a5 // add x5, x5, #16 - WORD $0xd10042b5 // sub x21, x21, #16 - WORD $0x8b15032e // add x14, x25, x21 + WORD $0xd10042d6 // sub x22, x22, #16 + WORD $0x8b16034e // add x14, x26, x22 WORD $0xf1003ddf // cmp x14, #15 - WORD $0x54fff6c8 // b.hi LBB0_311 $-296(%rip) - WORD $0x8b050015 // add x21, x0, x5 - WORD $0xeb05033f // cmp x25, x5 + WORD $0x54fff6c8 // b.hi LBB0_321 $-296(%rip) + WORD $0x8b050016 // add x22, x0, x5 + WORD $0xeb05035f // cmp x26, x5 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x54000540 // b.eq LBB0_342 $168(%rip) -LBB0_326: - WORD $0x8b0e02a5 // add x5, x21, x14 - WORD $0xcb0802af // sub x15, x21, x8 - WORD $0xcb1e01f9 // sub x25, x15, lr - WORD $0xaa1503fe // mov lr, x21 - WORD $0x14000006 // b LBB0_329 $24(%rip) -LBB0_327: - WORD $0xd100073a // sub x26, x25, #1 -LBB0_328: - WORD $0x91000739 // add x25, x25, #1 - WORD $0xaa1e03f5 // mov x21, lr + WORD $0x54000540 // b.eq LBB0_352 $168(%rip) +LBB0_336: + WORD $0x8b0e02c5 // add x5, x22, x14 + WORD $0xcb0802cf // sub x15, x22, x8 + WORD $0xcb1401f4 // sub x20, x15, x20 + WORD $0xaa1603fa // mov x26, x22 + WORD $0x14000006 // b LBB0_339 $24(%rip) +LBB0_337: + WORD $0xd100069b // sub x27, x20, #1 +LBB0_338: + WORD $0x91000694 // add x20, x20, #1 + WORD $0xaa1a03f6 // mov x22, x26 WORD $0xd10005ce // sub x14, x14, #1 - WORD $0xb4000c2e // cbz x14, LBB0_363 $388(%rip) -LBB0_329: - WORD $0x384017d4 // ldrb w20, [lr], #1 - WORD $0x5100c28f // sub w15, w20, #48 + WORD $0xb4000c2e // cbz x14, LBB0_373 $388(%rip) +LBB0_339: + WORD $0x38401755 // ldrb w21, [x26], #1 + WORD $0x5100c2af // sub w15, w21, #48 WORD $0x710029ff // cmp w15, #10 - WORD $0x54ffff23 // b.lo LBB0_328 $-28(%rip) - WORD $0x7100b69f // cmp w20, #45 - WORD $0x5400014d // b.le LBB0_335 $40(%rip) - WORD $0x7101969f // cmp w20, #101 - WORD $0x54000200 // b.eq LBB0_339 $64(%rip) - WORD $0x7101169f // cmp w20, #69 - WORD $0x540001c0 // b.eq LBB0_339 $56(%rip) - WORD $0x7100ba9f // cmp w20, #46 - WORD $0x54000281 // b.ne LBB0_342 $80(%rip) - WORD $0xb100075f // cmn x26, #1 - WORD $0x54fffdc0 // b.eq LBB0_327 $-72(%rip) - WORD $0x1400016d // b LBB0_421 $1460(%rip) -LBB0_335: - WORD $0x7100ae9f // cmp w20, #43 - WORD $0x54000060 // b.eq LBB0_337 $12(%rip) - WORD $0x7100b69f // cmp w20, #45 - WORD $0x540001a1 // b.ne LBB0_342 $52(%rip) -LBB0_337: + WORD $0x54ffff23 // b.lo LBB0_338 $-28(%rip) + WORD $0x7100b6bf // cmp w21, #45 + WORD $0x5400014d // b.le LBB0_345 $40(%rip) + WORD $0x710196bf // cmp w21, #101 + WORD $0x54000200 // b.eq LBB0_349 $64(%rip) + WORD $0x710116bf // cmp w21, #69 + WORD $0x540001c0 // b.eq LBB0_349 $56(%rip) + WORD $0x7100babf // cmp w21, #46 + WORD $0x54000281 // b.ne LBB0_352 $80(%rip) + WORD $0xb100077f // cmn x27, #1 + WORD $0x54fffdc0 // b.eq LBB0_337 $-72(%rip) + WORD $0x1400016d // b LBB0_431 $1460(%rip) +LBB0_345: + WORD $0x7100aebf // cmp w21, #43 + WORD $0x54000060 // b.eq LBB0_347 $12(%rip) + WORD $0x7100b6bf // cmp w21, #45 + WORD $0x540001a1 // b.ne LBB0_352 $52(%rip) +LBB0_347: WORD $0xb10004df // cmn x6, #1 - WORD $0x54002ce1 // b.ne LBB0_421 $1436(%rip) - WORD $0xd1000726 // sub x6, x25, #1 - WORD $0x17ffffe6 // b LBB0_328 $-104(%rip) -LBB0_339: - WORD $0xb10006df // cmn x22, #1 - WORD $0x54002c61 // b.ne LBB0_421 $1420(%rip) - WORD $0xd1000736 // sub x22, x25, #1 - WORD $0x17ffffe2 // b LBB0_328 $-120(%rip) -LBB0_341: + WORD $0x54002ce1 // b.ne LBB0_431 $1436(%rip) + WORD $0xd1000686 // sub x6, x20, #1 + WORD $0x17ffffe6 // b LBB0_338 $-104(%rip) +LBB0_349: + WORD $0xb10006ff // cmn x23, #1 + WORD $0x54002c61 // b.ne LBB0_431 $1420(%rip) + WORD $0xd1000697 // sub x23, x20, #1 + WORD $0x17ffffe2 // b LBB0_338 $-120(%rip) +LBB0_351: WORD $0x8b2e400e // add x14, x0, w14, uxtw - WORD $0x8b0501d5 // add x21, x14, x5 + WORD $0x8b0501d6 // add x22, x14, x5 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 -LBB0_342: +LBB0_352: WORD $0x9280000e // mov x14, #-1 - WORD $0xb4007c3a // cbz x26, LBB0_571 $3972(%rip) -LBB0_343: - WORD $0xb4007c06 // cbz x6, LBB0_571 $3968(%rip) - WORD $0xb4007bf6 // cbz x22, LBB0_571 $3964(%rip) - WORD $0xcb0002ae // sub x14, x21, x0 + WORD $0xb4007d1b // cbz x27, LBB0_584 $4000(%rip) +LBB0_353: + WORD $0xb4007ce6 // cbz x6, LBB0_584 $3996(%rip) + WORD $0xb4007cd7 // cbz x23, LBB0_584 $3992(%rip) + WORD $0xcb0002ce // sub x14, x22, x0 WORD $0xd10005c0 // sub x0, x14, #1 - WORD $0xeb00035f // cmp x26, x0 - WORD $0x540002e0 // b.eq LBB0_354 $92(%rip) + WORD $0xeb00037f // cmp x27, x0 + WORD $0x540002e0 // b.eq LBB0_364 $92(%rip) WORD $0xeb0000df // cmp x6, x0 - WORD $0x540002a0 // b.eq LBB0_354 $84(%rip) - WORD $0xeb0002df // cmp x22, x0 - WORD $0x54000260 // b.eq LBB0_354 $76(%rip) + WORD $0x540002a0 // b.eq LBB0_364 $84(%rip) + WORD $0xeb0002ff // cmp x23, x0 + WORD $0x54000260 // b.eq LBB0_364 $76(%rip) WORD $0xf10004cf // subs x15, x6, #1 - WORD $0x5400006b // b.lt LBB0_350 $12(%rip) - WORD $0xeb0f02df // cmp x22, x15 - WORD $0x54007a81 // b.ne LBB0_572 $3920(%rip) -LBB0_350: - WORD $0xaa160340 // orr x0, x26, x22 - WORD $0xb7f80060 // tbnz x0, #63, LBB0_352 $12(%rip) - WORD $0xeb16035f // cmp x26, x22 - WORD $0x54007a4a // b.ge LBB0_573 $3912(%rip) -LBB0_352: + WORD $0x5400006b // b.lt LBB0_360 $12(%rip) + WORD $0xeb0f02ff // cmp x23, x15 + WORD $0x54007b61 // b.ne LBB0_585 $3948(%rip) +LBB0_360: + WORD $0xaa170360 // orr x0, x27, x23 + WORD $0xb7f80060 // tbnz x0, #63, LBB0_362 $12(%rip) + WORD $0xeb17037f // cmp x27, x23 + WORD $0x54007b2a // b.ge LBB0_586 $3940(%rip) +LBB0_362: WORD $0xd37ffc0f // lsr x15, x0, #63 WORD $0x520001ef // eor w15, w15, #0x1 - WORD $0xd10006d1 // sub x17, x22, #1 - WORD $0xeb11035f // cmp x26, x17 + WORD $0xd10006f1 // sub x17, x23, #1 + WORD $0xeb11037f // cmp x27, x17 WORD $0x1a9f17f1 // cset w17, eq WORD $0x6a1101ff // tst w15, w17 - WORD $0xda9601ce // csinv x14, x14, x22, eq -LBB0_353: + WORD $0xda9701ce // csinv x14, x14, x23, eq +LBB0_363: WORD $0x12800011 // mov w17, #-1 - WORD $0xb6f8008e // tbz x14, #63, LBB0_355 $16(%rip) - WORD $0x140003c5 // b LBB0_571 $3860(%rip) -LBB0_354: + WORD $0xb6f8008e // tbz x14, #63, LBB0_365 $16(%rip) + WORD $0x140003cc // b LBB0_584 $3888(%rip) +LBB0_364: WORD $0xcb0e03ee // neg x14, x14 - WORD $0xb7f8786e // tbnz x14, #63, LBB0_571 $3852(%rip) -LBB0_355: + WORD $0xb7f8794e // tbnz x14, #63, LBB0_584 $3880(%rip) +LBB0_365: WORD $0x8b1301d3 // add x19, x14, x19 WORD $0xf9000033 // str x19, [x1] WORD $0xaa0803e0 // mov x0, x8 WORD $0xeb07011f // cmp x8, x7 - WORD $0x5280007a // mov w26, #3 - WORD $0x54ffd203 // b.lo LBB0_284 $-1472(%rip) - WORD $0x140003c8 // b LBB0_578 $3872(%rip) -LBB0_356: - WORD $0xb5003d85 // cbnz x5, LBB0_461 $1968(%rip) + WORD $0x5280007b // mov w27, #3 + WORD $0x54004263 // b.lo LBB0_480 $2124(%rip) + WORD $0x140003cf // b LBB0_591 $3900(%rip) +LBB0_366: + WORD $0xb5003d85 // cbnz x5, LBB0_471 $1968(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910005e5 // add x5, x15, #1 WORD $0xaa2e03ee // mvn x14, x14 WORD $0x8b0001ce // add x14, x14, x0 WORD $0xf10005df // cmp x14, #1 - WORD $0x54003f2a // b.ge LBB0_464 $2020(%rip) - WORD $0x140003bf // b LBB0_577 $3836(%rip) -LBB0_358: + WORD $0x54003f2a // b.ge LBB0_474 $2020(%rip) + WORD $0x140003c6 // b LBB0_590 $3864(%rip) +LBB0_368: WORD $0x5ac001ee // rbit w14, w15 WORD $0x5ac011ce // clz w14, w14 - WORD $0xaa3a03ef // mvn x15, x26 + WORD $0xaa3b03ef // mvn x15, x27 WORD $0xcb0e01ee // sub x14, x15, x14 - WORD $0x5280007a // mov w26, #3 - WORD $0x17fffb40 // b LBB0_180 $-4864(%rip) -LBB0_359: - WORD $0x8b1303c5 // add x5, lr, x19 + WORD $0x5280007b // mov w27, #3 + WORD $0x17fffb28 // b LBB0_185 $-4960(%rip) +LBB0_369: + WORD $0x8b130285 // add x5, x20, x19 WORD $0xf10005df // cmp x14, #1 - WORD $0x54003dea // b.ge LBB0_464 $1980(%rip) - WORD $0x140003b5 // b LBB0_577 $3796(%rip) -LBB0_360: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400001a // b LBB0_367 $104(%rip) -LBB0_361: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400003e // b LBB0_373 $248(%rip) -LBB0_362: - WORD $0xaa3a03ee // mvn x14, x26 - WORD $0xcb3441ce // sub x14, x14, w20, uxtw - WORD $0x5280007a // mov w26, #3 - WORD $0x17fffb34 // b LBB0_180 $-4912(%rip) -LBB0_363: - WORD $0xaa0503f5 // mov x21, x5 + WORD $0x54003dea // b.ge LBB0_474 $1980(%rip) + WORD $0x140003bc // b LBB0_590 $3824(%rip) +LBB0_370: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400001a // b LBB0_377 $104(%rip) +LBB0_371: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400003e // b LBB0_383 $248(%rip) +LBB0_372: + WORD $0xaa3b03ee // mvn x14, x27 + WORD $0xcb3541ce // sub x14, x14, w21, uxtw + WORD $0x5280007b // mov w27, #3 + WORD $0x17fffb1c // b LBB0_185 $-5008(%rip) +LBB0_373: + WORD $0xaa0503f6 // mov x22, x5 WORD $0x9280000e // mov x14, #-1 - WORD $0xb5fff7fa // cbnz x26, LBB0_343 $-260(%rip) - WORD $0x1400039e // b LBB0_571 $3704(%rip) -LBB0_364: + WORD $0xb5fff7fb // cbnz x27, LBB0_353 $-260(%rip) + WORD $0x140003a5 // b LBB0_584 $3732(%rip) +LBB0_374: WORD $0x5ac001ee // rbit w14, w15 WORD $0x5ac011ce // clz w14, w14 - WORD $0xaa3a03ef // mvn x15, x26 + WORD $0xaa3b03ef // mvn x15, x27 WORD $0xcb0e01ee // sub x14, x15, x14 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x17fffb28 // b LBB0_180 $-4960(%rip) -LBB0_365: - WORD $0x8b1303c5 // add x5, lr, x19 + WORD $0x17fffb10 // b LBB0_185 $-5056(%rip) +LBB0_375: + WORD $0x8b130285 // add x5, x20, x19 WORD $0xf10005df // cmp x14, #1 - WORD $0x54003f2a // b.ge LBB0_471 $2020(%rip) - WORD $0x1400039d // b LBB0_577 $3700(%rip) -LBB0_366: + WORD $0x5400400a // b.ge LBB0_484 $2048(%rip) + WORD $0x140003a4 // b LBB0_590 $3728(%rip) +LBB0_376: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_367: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x540043a3 // b.lo LBB0_478 $2164(%rip) +LBB0_377: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x54004483 // b.lo LBB0_491 $2192(%rip) WORD $0xad406e7a // ldp q26, q27, [x19] WORD $0x6e208f5c // cmeq.16b v28, v26, v0 WORD $0x6e208f7d // cmeq.16b v29, v27, v0 @@ -2404,31 +2454,31 @@ LBB0_367: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 + WORD $0x1e260356 // fmov w22, s26 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103eb4 // bfi w20, w21, #16, #16 - WORD $0x35003dd4 // cbnz w20, LBB0_475 $1976(%rip) - WORD $0xb5003e66 // cbnz x6, LBB0_476 $1996(%rip) - WORD $0xb4004025 // cbz x5, LBB0_477 $2052(%rip) -LBB0_371: + WORD $0x33103ed5 // bfi w21, w22, #16, #16 + WORD $0x35003eb5 // cbnz w21, LBB0_488 $2004(%rip) + WORD $0xb5003f46 // cbnz x6, LBB0_489 $2024(%rip) + WORD $0xb4004105 // cbz x5, LBB0_490 $2080(%rip) +LBB0_381: WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011ce // clz x14, x14 - WORD $0xcb1e026f // sub x15, x19, lr + WORD $0xcb14026f // sub x15, x19, x20 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6ffc793 // tbz x19, #63, LBB0_283 $-1808(%rip) - WORD $0x14000311 // b LBB0_544 $3140(%rip) -LBB0_372: + WORD $0xb6f837f3 // tbz x19, #63, LBB0_478 $1788(%rip) + WORD $0x14000318 // b LBB0_557 $3168(%rip) +LBB0_382: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_373: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x54000623 // b.lo LBB0_380 $196(%rip) +LBB0_383: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x54000623 // b.lo LBB0_390 $196(%rip) WORD $0xad406a7b // ldp q27, q26, [x19] WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 @@ -2444,100 +2494,100 @@ LBB0_373: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260394 // fmov w20, s28 + WORD $0x1e260395 // fmov w21, s28 WORD $0x6e218f5c // cmeq.16b v28, v26, v1 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260395 // fmov w21, s28 + WORD $0x1e260396 // fmov w22, s28 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103eb4 // bfi w20, w21, #16, #16 - WORD $0x35004034 // cbnz w20, LBB0_489 $2052(%rip) - WORD $0xb50040c6 // cbnz x6, LBB0_490 $2072(%rip) -LBB0_376: + WORD $0x33103ed5 // bfi w21, w22, #16, #16 + WORD $0x35004115 // cbnz w21, LBB0_502 $2080(%rip) + WORD $0xb50041a6 // cbnz x6, LBB0_503 $2100(%rip) +LBB0_386: WORD $0x6e3b349b // cmhi.16b v27, v4, v27 WORD $0x4e221f7b // and.16b v27, v27, v2 WORD $0x4e03037b // tbl.16b v27, { v27 }, v3 WORD $0x4e71bb7b // addv.8h h27, v27 - WORD $0x1e260375 // fmov w21, s27 + WORD $0x1e260376 // fmov w22, s27 WORD $0x6e3a349a // cmhi.16b v26, v4, v26 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df5 // bfi w21, w15, #16, #16 - WORD $0xdac002af // rbit x15, x21 - WORD $0xdac011f4 // clz x20, x15 - WORD $0xb40000e5 // cbz x5, LBB0_378 $28(%rip) + WORD $0x33103df6 // bfi w22, w15, #16, #16 + WORD $0xdac002cf // rbit x15, x22 + WORD $0xdac011f5 // clz x21, x15 + WORD $0xb40000e5 // cbz x5, LBB0_388 $28(%rip) WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011c5 // clz x5, x14 - WORD $0xcb1e026e // sub x14, x19, lr - WORD $0xeb05029f // cmp x20, x5 - WORD $0x54000462 // b.hs LBB0_391 $140(%rip) - WORD $0x1400034f // b LBB0_579 $3388(%rip) -LBB0_378: - WORD $0x35006a35 // cbnz w21, LBB0_580 $3396(%rip) + WORD $0xcb14026e // sub x14, x19, x20 + WORD $0xeb0502bf // cmp x21, x5 + WORD $0x54000462 // b.hs LBB0_401 $140(%rip) + WORD $0x14000356 // b LBB0_592 $3416(%rip) +LBB0_388: + WORD $0x35006b16 // cbnz w22, LBB0_593 $3424(%rip) WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_380: - WORD $0xb5004a46 // cbnz x6, LBB0_509 $2376(%rip) - WORD $0xb4005b96 // cbz x22, LBB0_545 $2928(%rip) -LBB0_382: - WORD $0xcb1e03ee // neg x14, lr -LBB0_383: + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_390: + WORD $0xb5004b26 // cbnz x6, LBB0_522 $2404(%rip) + WORD $0xb4005c77 // cbz x23, LBB0_558 $2956(%rip) +LBB0_392: + WORD $0xcb1403ee // neg x14, x20 +LBB0_393: WORD $0xd2800005 // mov x5, #0 -LBB0_384: +LBB0_394: WORD $0x38656a66 // ldrb w6, [x19, x5] WORD $0x710088df // cmp w6, #34 - WORD $0x540002e0 // b.eq LBB0_390 $92(%rip) + WORD $0x540002e0 // b.eq LBB0_400 $92(%rip) WORD $0x710170df // cmp w6, #92 - WORD $0x540000e0 // b.eq LBB0_388 $28(%rip) + WORD $0x540000e0 // b.eq LBB0_398 $28(%rip) WORD $0x71007cdf // cmp w6, #31 - WORD $0x54006909 // b.ls LBB0_581 $3360(%rip) + WORD $0x540069e9 // b.ls LBB0_594 $3388(%rip) WORD $0x910004a5 // add x5, x5, #1 - WORD $0xeb0502df // cmp x22, x5 - WORD $0x54fffee1 // b.ne LBB0_384 $-36(%rip) - WORD $0x140002cf // b LBB0_545 $2876(%rip) -LBB0_388: - WORD $0xd10006cf // sub x15, x22, #1 + WORD $0xeb0502ff // cmp x23, x5 + WORD $0x54fffee1 // b.ne LBB0_394 $-36(%rip) + WORD $0x140002d6 // b LBB0_558 $2904(%rip) +LBB0_398: + WORD $0xd10006ef // sub x15, x23, #1 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x54005980 // b.eq LBB0_545 $2864(%rip) + WORD $0x54005a60 // b.eq LBB0_558 $2892(%rip) WORD $0x8b05026f // add x15, x19, x5 WORD $0x8b0e01e6 // add x6, x15, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8000c0 // csel x0, x6, x0, eq WORD $0x910009f3 // add x19, x15, #2 - WORD $0xd1000acf // sub x15, x22, #2 - WORD $0xcb0502c6 // sub x6, x22, x5 - WORD $0xd10008d6 // sub x22, x6, #2 + WORD $0xd1000aef // sub x15, x23, #2 + WORD $0xcb0502e6 // sub x6, x23, x5 + WORD $0xd10008d7 // sub x23, x6, #2 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x54fffd01 // b.ne LBB0_383 $-96(%rip) - WORD $0x140002c1 // b LBB0_545 $2820(%rip) -LBB0_390: - WORD $0xcb1e026e // sub x14, x19, lr -LBB0_391: + WORD $0x54fffd01 // b.ne LBB0_393 $-96(%rip) + WORD $0x140002c8 // b LBB0_558 $2848(%rip) +LBB0_400: + WORD $0xcb14026e // sub x14, x19, x20 +LBB0_401: WORD $0x8b0501ce // add x14, x14, x5 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6ffbcb3 // tbz x19, #63, LBB0_283 $-2156(%rip) - WORD $0x140002ba // b LBB0_544 $2792(%rip) -LBB0_392: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400000a // b LBB0_396 $40(%rip) -LBB0_393: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400002e // b LBB0_402 $184(%rip) -LBB0_394: - WORD $0xaa3a03ee // mvn x14, x26 - WORD $0xcb3741ce // sub x14, x14, w23, uxtw - WORD $0x5280007a // mov w26, #3 - WORD $0x17fffa9f // b LBB0_180 $-5508(%rip) -LBB0_395: + WORD $0xb6f82d13 // tbz x19, #63, LBB0_478 $1440(%rip) + WORD $0x140002c1 // b LBB0_557 $2820(%rip) +LBB0_402: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400000a // b LBB0_406 $40(%rip) +LBB0_403: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400002e // b LBB0_412 $184(%rip) +LBB0_404: + WORD $0xaa3b03ee // mvn x14, x27 + WORD $0xcb3841ce // sub x14, x14, w24, uxtw + WORD $0x5280007b // mov w27, #3 + WORD $0x17fffa87 // b LBB0_185 $-5604(%rip) +LBB0_405: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_396: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x54003cc3 // b.lo LBB0_494 $1944(%rip) +LBB0_406: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x54003da3 // b.lo LBB0_507 $1972(%rip) WORD $0xad406e7a // ldp q26, q27, [x19] WORD $0x6e208f5c // cmeq.16b v28, v26, v0 WORD $0x6e208f7d // cmeq.16b v29, v27, v0 @@ -2554,31 +2604,31 @@ LBB0_396: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260355 // fmov w21, s26 + WORD $0x1e260356 // fmov w22, s26 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103eb4 // bfi w20, w21, #16, #16 - WORD $0x350036f4 // cbnz w20, LBB0_491 $1756(%rip) - WORD $0xb5003786 // cbnz x6, LBB0_492 $1776(%rip) - WORD $0xb4003945 // cbz x5, LBB0_493 $1832(%rip) -LBB0_400: + WORD $0x33103ed5 // bfi w21, w22, #16, #16 + WORD $0x350037d5 // cbnz w21, LBB0_504 $1784(%rip) + WORD $0xb5003866 // cbnz x6, LBB0_505 $1804(%rip) + WORD $0xb4003a25 // cbz x5, LBB0_506 $1860(%rip) +LBB0_410: WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011ce // clz x14, x14 - WORD $0xcb1e026f // sub x15, x19, lr + WORD $0xcb14026f // sub x15, x19, x20 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6ff5e53 // tbz x19, #63, LBB0_194 $-5176(%rip) - WORD $0x1400028c // b LBB0_544 $2608(%rip) -LBB0_401: + WORD $0xb6ff5b53 // tbz x19, #63, LBB0_199 $-5272(%rip) + WORD $0x14000293 // b LBB0_557 $2636(%rip) +LBB0_411: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_402: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x54000623 // b.lo LBB0_409 $196(%rip) +LBB0_412: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x54000623 // b.lo LBB0_419 $196(%rip) WORD $0xad406a7b // ldp q27, q26, [x19] WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 @@ -2594,149 +2644,149 @@ LBB0_402: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260394 // fmov w20, s28 + WORD $0x1e260395 // fmov w21, s28 WORD $0x6e218f5c // cmeq.16b v28, v26, v1 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260395 // fmov w21, s28 + WORD $0x1e260396 // fmov w22, s28 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103eb4 // bfi w20, w21, #16, #16 - WORD $0x35003914 // cbnz w20, LBB0_504 $1824(%rip) - WORD $0xb50039a6 // cbnz x6, LBB0_506 $1844(%rip) -LBB0_405: + WORD $0x33103ed5 // bfi w21, w22, #16, #16 + WORD $0x350039f5 // cbnz w21, LBB0_517 $1852(%rip) + WORD $0xb5003a86 // cbnz x6, LBB0_519 $1872(%rip) +LBB0_415: WORD $0x6e3b349b // cmhi.16b v27, v4, v27 WORD $0x4e221f7b // and.16b v27, v27, v2 WORD $0x4e03037b // tbl.16b v27, { v27 }, v3 WORD $0x4e71bb7b // addv.8h h27, v27 - WORD $0x1e260375 // fmov w21, s27 + WORD $0x1e260376 // fmov w22, s27 WORD $0x6e3a349a // cmhi.16b v26, v4, v26 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df5 // bfi w21, w15, #16, #16 - WORD $0xdac002af // rbit x15, x21 - WORD $0xdac011f4 // clz x20, x15 - WORD $0xb40000e5 // cbz x5, LBB0_407 $28(%rip) + WORD $0x33103df6 // bfi w22, w15, #16, #16 + WORD $0xdac002cf // rbit x15, x22 + WORD $0xdac011f5 // clz x21, x15 + WORD $0xb40000e5 // cbz x5, LBB0_417 $28(%rip) WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011c5 // clz x5, x14 - WORD $0xcb1e026e // sub x14, x19, lr - WORD $0xeb05029f // cmp x20, x5 - WORD $0x54000582 // b.hs LBB0_420 $176(%rip) - WORD $0x140002ca // b LBB0_579 $2856(%rip) -LBB0_407: - WORD $0x35005995 // cbnz w21, LBB0_580 $2864(%rip) + WORD $0xcb14026e // sub x14, x19, x20 + WORD $0xeb0502bf // cmp x21, x5 + WORD $0x54000582 // b.hs LBB0_430 $176(%rip) + WORD $0x140002d1 // b LBB0_592 $2884(%rip) +LBB0_417: + WORD $0x35005a76 // cbnz w22, LBB0_593 $2892(%rip) WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_409: - WORD $0xb5003ca6 // cbnz x6, LBB0_516 $1940(%rip) - WORD $0x5280007a // mov w26, #3 + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_419: + WORD $0xb5003d86 // cbnz x6, LBB0_529 $1968(%rip) + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb4004a96 // cbz x22, LBB0_545 $2384(%rip) -LBB0_411: - WORD $0xcb1e03ee // neg x14, lr -LBB0_412: + WORD $0xb4004b77 // cbz x23, LBB0_558 $2412(%rip) +LBB0_421: + WORD $0xcb1403ee // neg x14, x20 +LBB0_422: WORD $0xd2800005 // mov x5, #0 -LBB0_413: +LBB0_423: WORD $0x38656a66 // ldrb w6, [x19, x5] WORD $0x710088df // cmp w6, #34 - WORD $0x540003a0 // b.eq LBB0_419 $116(%rip) + WORD $0x540003a0 // b.eq LBB0_429 $116(%rip) WORD $0x710170df // cmp w6, #92 - WORD $0x54000140 // b.eq LBB0_417 $40(%rip) + WORD $0x54000140 // b.eq LBB0_427 $40(%rip) WORD $0x71007cdf // cmp w6, #31 - WORD $0x54005809 // b.ls LBB0_581 $2816(%rip) + WORD $0x540058e9 // b.ls LBB0_594 $2844(%rip) WORD $0x910004a5 // add x5, x5, #1 - WORD $0xeb0502df // cmp x22, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0xeb0502ff // cmp x23, x5 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x54fffe81 // b.ne LBB0_413 $-48(%rip) - WORD $0x14000244 // b LBB0_545 $2320(%rip) -LBB0_417: - WORD $0xd10006cf // sub x15, x22, #1 + WORD $0x54fffe81 // b.ne LBB0_423 $-48(%rip) + WORD $0x1400024b // b LBB0_558 $2348(%rip) +LBB0_427: + WORD $0xd10006ef // sub x15, x23, #1 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x540047c0 // b.eq LBB0_545 $2296(%rip) + WORD $0x540048a0 // b.eq LBB0_558 $2324(%rip) WORD $0x8b05026f // add x15, x19, x5 WORD $0x8b0e01e6 // add x6, x15, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8000c0 // csel x0, x6, x0, eq WORD $0x910009f3 // add x19, x15, #2 - WORD $0xd1000acf // sub x15, x22, #2 - WORD $0xcb0502c6 // sub x6, x22, x5 - WORD $0xd10008d6 // sub x22, x6, #2 + WORD $0xd1000aef // sub x15, x23, #2 + WORD $0xcb0502e6 // sub x6, x23, x5 + WORD $0xd10008d7 // sub x23, x6, #2 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x54fffc41 // b.ne LBB0_412 $-120(%rip) - WORD $0x14000233 // b LBB0_545 $2252(%rip) -LBB0_419: - WORD $0xcb1e026e // sub x14, x19, lr -LBB0_420: + WORD $0x54fffc41 // b.ne LBB0_422 $-120(%rip) + WORD $0x1400023a // b LBB0_558 $2280(%rip) +LBB0_429: + WORD $0xcb14026e // sub x14, x19, x20 +LBB0_430: WORD $0x8b0501ce // add x14, x14, x5 WORD $0x910005d3 // add x19, x14, #1 - WORD $0xb6ff5253 // tbz x19, #63, LBB0_194 $-5560(%rip) - WORD $0x1400022c // b LBB0_544 $2224(%rip) -LBB0_421: - WORD $0xcb1903ee // neg x14, x25 - WORD $0xb6ffd86e // tbz x14, #63, LBB0_355 $-1268(%rip) - WORD $0x14000284 // b LBB0_571 $2576(%rip) -LBB0_422: + WORD $0xb6ff4f53 // tbz x19, #63, LBB0_199 $-5656(%rip) + WORD $0x14000233 // b LBB0_557 $2252(%rip) +LBB0_431: + WORD $0xcb1403ee // neg x14, x20 + WORD $0xb6ffd86e // tbz x14, #63, LBB0_365 $-1268(%rip) + WORD $0x1400028b // b LBB0_584 $2604(%rip) +LBB0_432: WORD $0x5ac001ee // rbit w14, w15 WORD $0x5ac011ce // clz w14, w14 WORD $0xaa2503ef // mvn x15, x5 WORD $0xcb0e01ee // sub x14, x15, x14 WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x17fffeb7 // b LBB0_353 $-1316(%rip) -LBB0_423: - WORD $0x8b1303c5 // add x5, lr, x19 + WORD $0x17fffeb7 // b LBB0_363 $-1316(%rip) +LBB0_433: + WORD $0x8b130285 // add x5, x20, x19 WORD $0xf10005df // cmp x14, #1 - WORD $0x540050cb // b.lt LBB0_577 $2584(%rip) -LBB0_424: - WORD $0x5280007a // mov w26, #3 + WORD $0x540051ab // b.lt LBB0_590 $2612(%rip) +LBB0_434: + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x14000007 // b LBB0_426 $28(%rip) -LBB0_425: + WORD $0x14000007 // b LBB0_436 $28(%rip) +LBB0_435: WORD $0x92800026 // mov x6, #-2 WORD $0x52800040 // mov w0, #2 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x54004fad // b.le LBB0_578 $2548(%rip) -LBB0_426: + WORD $0x5400508d // b.le LBB0_591 $2576(%rip) +LBB0_436: WORD $0x394000a0 // ldrb w0, [x5] WORD $0x7101701f // cmp w0, #92 - WORD $0x54ffff00 // b.eq LBB0_425 $-32(%rip) + WORD $0x54ffff00 // b.eq LBB0_435 $-32(%rip) WORD $0x7100881f // cmp w0, #34 - WORD $0x54001780 // b.eq LBB0_467 $752(%rip) + WORD $0x54001780 // b.eq LBB0_477 $752(%rip) WORD $0x92800006 // mov x6, #-1 WORD $0x52800020 // mov w0, #1 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x54fffecc // b.gt LBB0_426 $-40(%rip) - WORD $0x14000271 // b LBB0_578 $2500(%rip) -LBB0_429: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400000a // b LBB0_433 $40(%rip) -LBB0_430: - WORD $0x8b1303d3 // add x19, lr, x19 - WORD $0x1400002d // b LBB0_439 $180(%rip) -LBB0_431: + WORD $0x54fffecc // b.gt LBB0_436 $-40(%rip) + WORD $0x14000278 // b LBB0_591 $2528(%rip) +LBB0_439: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400000a // b LBB0_443 $40(%rip) +LBB0_440: + WORD $0x8b130293 // add x19, x20, x19 + WORD $0x1400002d // b LBB0_449 $180(%rip) +LBB0_441: WORD $0xaa2503ee // mvn x14, x5 - WORD $0xcb3741ce // sub x14, x14, w23, uxtw + WORD $0xcb3841ce // sub x14, x14, w24, uxtw WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x17fffe96 // b LBB0_353 $-1448(%rip) -LBB0_432: + WORD $0x17fffe96 // b LBB0_363 $-1448(%rip) +LBB0_442: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_433: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x540036c3 // b.lo LBB0_523 $1752(%rip) +LBB0_443: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x540037a3 // b.lo LBB0_536 $1780(%rip) WORD $0xad406e7a // ldp q26, q27, [x19] WORD $0x6e208f5c // cmeq.16b v28, v26, v0 WORD $0x6e208f7d // cmeq.16b v29, v27, v0 @@ -2753,30 +2803,30 @@ LBB0_433: WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 - WORD $0x1e260354 // fmov w20, s26 + WORD $0x1e260355 // fmov w21, s26 WORD $0x4e221f7a // and.16b v26, v27, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e260351 // fmov w17, s26 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103e34 // bfi w20, w17, #16, #16 - WORD $0x35003154 // cbnz w20, LBB0_520 $1576(%rip) - WORD $0xb50031e6 // cbnz x6, LBB0_521 $1596(%rip) - WORD $0xb4003345 // cbz x5, LBB0_522 $1640(%rip) -LBB0_437: + WORD $0x33103e35 // bfi w21, w17, #16, #16 + WORD $0x35003235 // cbnz w21, LBB0_533 $1604(%rip) + WORD $0xb50032c6 // cbnz x6, LBB0_534 $1624(%rip) + WORD $0xb4003425 // cbz x5, LBB0_535 $1668(%rip) +LBB0_447: WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011ce // clz x14, x14 - WORD $0xcb1e026f // sub x15, x19, lr + WORD $0xcb14026f // sub x15, x19, x20 WORD $0x8b0e01ee // add x14, x15, x14 WORD $0x910005d3 // add x19, x14, #1 - WORD $0x140001b0 // b LBB0_534 $1728(%rip) -LBB0_438: + WORD $0x140001b7 // b LBB0_547 $1756(%rip) +LBB0_448: WORD $0xd2800006 // mov x6, #0 - WORD $0x8b1303d3 // add x19, lr, x19 + WORD $0x8b130293 // add x19, x20, x19 WORD $0x92800000 // mov x0, #-1 -LBB0_439: - WORD $0xf10082ce // subs x14, x22, #32 - WORD $0x54000623 // b.lo LBB0_446 $196(%rip) +LBB0_449: + WORD $0xf10082ee // subs x14, x23, #32 + WORD $0x54000623 // b.lo LBB0_456 $196(%rip) WORD $0xad406a7b // ldp q27, q26, [x19] WORD $0x6e208f7c // cmeq.16b v28, v27, v0 WORD $0x4e221f9c // and.16b v28, v28, v2 @@ -2792,434 +2842,444 @@ LBB0_439: WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 - WORD $0x1e260394 // fmov w20, s28 + WORD $0x1e260395 // fmov w21, s28 WORD $0x6e218f5c // cmeq.16b v28, v26, v1 WORD $0x4e221f9c // and.16b v28, v28, v2 WORD $0x4e03039c // tbl.16b v28, { v28 }, v3 WORD $0x4e71bb9c // addv.8h h28, v28 WORD $0x1e260391 // fmov w17, s28 WORD $0x33103de5 // bfi w5, w15, #16, #16 - WORD $0x33103e34 // bfi w20, w17, #16, #16 - WORD $0x35003314 // cbnz w20, LBB0_535 $1632(%rip) - WORD $0xb50033a6 // cbnz x6, LBB0_537 $1652(%rip) -LBB0_442: + WORD $0x33103e35 // bfi w21, w17, #16, #16 + WORD $0x350033f5 // cbnz w21, LBB0_548 $1660(%rip) + WORD $0xb5003486 // cbnz x6, LBB0_550 $1680(%rip) +LBB0_452: WORD $0x6e3b349b // cmhi.16b v27, v4, v27 WORD $0x4e221f7b // and.16b v27, v27, v2 WORD $0x4e03037b // tbl.16b v27, { v27 }, v3 WORD $0x4e71bb7b // addv.8h h27, v27 - WORD $0x1e260375 // fmov w21, s27 + WORD $0x1e260376 // fmov w22, s27 WORD $0x6e3a349a // cmhi.16b v26, v4, v26 WORD $0x4e221f5a // and.16b v26, v26, v2 WORD $0x4e03035a // tbl.16b v26, { v26 }, v3 WORD $0x4e71bb5a // addv.8h h26, v26 WORD $0x1e26034f // fmov w15, s26 - WORD $0x33103df5 // bfi w21, w15, #16, #16 - WORD $0xdac002af // rbit x15, x21 - WORD $0xdac011f4 // clz x20, x15 - WORD $0xb40000e5 // cbz x5, LBB0_444 $28(%rip) + WORD $0x33103df6 // bfi w22, w15, #16, #16 + WORD $0xdac002cf // rbit x15, x22 + WORD $0xdac011f5 // clz x21, x15 + WORD $0xb40000e5 // cbz x5, LBB0_454 $28(%rip) WORD $0xdac000ae // rbit x14, x5 WORD $0xdac011c5 // clz x5, x14 - WORD $0xcb1e026e // sub x14, x19, lr - WORD $0xeb05029f // cmp x20, x5 - WORD $0x54000462 // b.hs LBB0_457 $140(%rip) - WORD $0x1400021b // b LBB0_579 $2156(%rip) -LBB0_444: - WORD $0x350043b5 // cbnz w21, LBB0_580 $2164(%rip) + WORD $0xcb14026e // sub x14, x19, x20 + WORD $0xeb0502bf // cmp x21, x5 + WORD $0x54000462 // b.hs LBB0_467 $140(%rip) + WORD $0x14000222 // b LBB0_592 $2184(%rip) +LBB0_454: + WORD $0x35004496 // cbnz w22, LBB0_593 $2192(%rip) WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_446: - WORD $0xb5003346 // cbnz x6, LBB0_540 $1640(%rip) - WORD $0xb4003516 // cbz x22, LBB0_545 $1696(%rip) -LBB0_448: - WORD $0xcb1e03ee // neg x14, lr -LBB0_449: + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_456: + WORD $0xb5003426 // cbnz x6, LBB0_553 $1668(%rip) + WORD $0xb40035f7 // cbz x23, LBB0_558 $1724(%rip) +LBB0_458: + WORD $0xcb1403ee // neg x14, x20 +LBB0_459: WORD $0xd2800005 // mov x5, #0 -LBB0_450: +LBB0_460: WORD $0x38656a66 // ldrb w6, [x19, x5] WORD $0x710088df // cmp w6, #34 - WORD $0x540002e0 // b.eq LBB0_456 $92(%rip) + WORD $0x540002e0 // b.eq LBB0_466 $92(%rip) WORD $0x710170df // cmp w6, #92 - WORD $0x540000e0 // b.eq LBB0_454 $28(%rip) + WORD $0x540000e0 // b.eq LBB0_464 $28(%rip) WORD $0x71007cdf // cmp w6, #31 - WORD $0x54004289 // b.ls LBB0_581 $2128(%rip) + WORD $0x54004369 // b.ls LBB0_594 $2156(%rip) WORD $0x910004a5 // add x5, x5, #1 - WORD $0xeb0502df // cmp x22, x5 - WORD $0x54fffee1 // b.ne LBB0_450 $-36(%rip) - WORD $0x1400019b // b LBB0_545 $1644(%rip) -LBB0_454: - WORD $0xd10006cf // sub x15, x22, #1 + WORD $0xeb0502ff // cmp x23, x5 + WORD $0x54fffee1 // b.ne LBB0_460 $-36(%rip) + WORD $0x140001a2 // b LBB0_558 $1672(%rip) +LBB0_464: + WORD $0xd10006ef // sub x15, x23, #1 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x54003300 // b.eq LBB0_545 $1632(%rip) + WORD $0x540033e0 // b.eq LBB0_558 $1660(%rip) WORD $0x8b05026f // add x15, x19, x5 WORD $0x8b0e01f1 // add x17, x15, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a800220 // csel x0, x17, x0, eq WORD $0x910009f3 // add x19, x15, #2 - WORD $0xd1000acf // sub x15, x22, #2 - WORD $0xcb0502d1 // sub x17, x22, x5 - WORD $0xd1000a36 // sub x22, x17, #2 + WORD $0xd1000aef // sub x15, x23, #2 + WORD $0xcb0502f1 // sub x17, x23, x5 + WORD $0xd1000a37 // sub x23, x17, #2 WORD $0xeb0501ff // cmp x15, x5 - WORD $0x54fffd01 // b.ne LBB0_449 $-96(%rip) - WORD $0x1400018d // b LBB0_545 $1588(%rip) -LBB0_456: - WORD $0xcb1e026e // sub x14, x19, lr -LBB0_457: + WORD $0x54fffd01 // b.ne LBB0_459 $-96(%rip) + WORD $0x14000194 // b LBB0_558 $1616(%rip) +LBB0_466: + WORD $0xcb14026e // sub x14, x19, x20 +LBB0_467: WORD $0x8b0501ce // add x14, x14, x5 WORD $0x910005d3 // add x19, x14, #1 - WORD $0x1400015a // b LBB0_534 $1384(%rip) -LBB0_458: + WORD $0x14000161 // b LBB0_547 $1412(%rip) +LBB0_468: WORD $0x92800000 // mov x0, #-1 WORD $0xaa0603e5 // mov x5, x6 - WORD $0xaa0e03f5 // mov x21, x14 + WORD $0xaa0e03f6 // mov x22, x14 WORD $0x92800013 // mov x19, #-1 - WORD $0x92800016 // mov x22, #-1 - WORD $0x17fff7b5 // b LBB0_85 $-8492(%rip) -LBB0_459: + WORD $0x92800017 // mov x23, #-1 + WORD $0x17fff785 // b LBB0_85 $-8684(%rip) +LBB0_469: WORD $0xaa2503ee // mvn x14, x5 - WORD $0xcb3441ce // sub x14, x14, w20, uxtw + WORD $0xcb3541ce // sub x14, x14, w21, uxtw WORD $0x92f00007 // mov x7, #9223372036854775807 - WORD $0x17fffe11 // b LBB0_353 $-1980(%rip) -LBB0_460: - WORD $0x9280001a // mov x26, #-1 - WORD $0xaa0003f5 // mov x21, x0 - WORD $0xaa1903ee // mov x14, x25 - WORD $0x92800016 // mov x22, #-1 + WORD $0x17fffe11 // b LBB0_363 $-1980(%rip) +LBB0_470: + WORD $0x9280001b // mov x27, #-1 + WORD $0xaa0003f6 // mov x22, x0 + WORD $0xaa1a03ee // mov x14, x26 + WORD $0x92800017 // mov x23, #-1 WORD $0x92800006 // mov x6, #-1 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x17fffdc5 // b LBB0_326 $-2284(%rip) -LBB0_461: + WORD $0x17fffdc5 // b LBB0_336 $-2284(%rip) +LBB0_471: WORD $0xd100040f // sub x15, x0, #1 WORD $0xeb0e01ff // cmp x15, x14 - WORD $0x54003b00 // b.eq LBB0_577 $1888(%rip) + WORD $0x54003be0 // b.eq LBB0_590 $1916(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910009e5 // add x5, x15, #2 WORD $0xcb0e000e // sub x14, x0, x14 WORD $0xd10009ce // sub x14, x14, #2 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 WORD $0xf10005df // cmp x14, #1 - WORD $0x5400010a // b.ge LBB0_464 $32(%rip) - WORD $0x140001ce // b LBB0_577 $1848(%rip) -LBB0_463: + WORD $0x5400010a // b.ge LBB0_474 $32(%rip) + WORD $0x140001d5 // b LBB0_590 $1876(%rip) +LBB0_473: WORD $0x92800026 // mov x6, #-2 WORD $0x52800040 // mov w0, #2 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x5400392d // b.le LBB0_578 $1828(%rip) -LBB0_464: + WORD $0x54003a0d // b.le LBB0_591 $1856(%rip) +LBB0_474: WORD $0x394000a0 // ldrb w0, [x5] WORD $0x7101701f // cmp w0, #92 - WORD $0x54ffff00 // b.eq LBB0_463 $-32(%rip) + WORD $0x54ffff00 // b.eq LBB0_473 $-32(%rip) WORD $0x7100881f // cmp w0, #34 - WORD $0x54000100 // b.eq LBB0_467 $32(%rip) + WORD $0x54000100 // b.eq LBB0_477 $32(%rip) WORD $0x92800006 // mov x6, #-1 WORD $0x52800020 // mov w0, #1 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x54fffecc // b.gt LBB0_464 $-40(%rip) - WORD $0x140001bd // b LBB0_578 $1780(%rip) -LBB0_467: - WORD $0xcb1e00ae // sub x14, x5, lr + WORD $0x54fffecc // b.gt LBB0_474 $-40(%rip) + WORD $0x140001c4 // b LBB0_591 $1808(%rip) +LBB0_477: + WORD $0xcb1400ae // sub x14, x5, x20 WORD $0x910005d3 // add x19, x14, #1 - WORD $0x17fffc7d // b LBB0_283 $-3596(%rip) -LBB0_468: +LBB0_478: + WORD $0xf9000033 // str x19, [x1] +LBB0_479: + WORD $0xaa0803e0 // mov x0, x8 + WORD $0xeb07011f // cmp x8, x7 + WORD $0x540037c2 // b.hs LBB0_591 $1784(%rip) +LBB0_480: + WORD $0xf9400057 // ldr x23, [x2] + WORD $0xaa0b03e0 // mov x0, x11 + WORD $0xb5feb897 // cbnz x23, LBB0_1 $-10480(%rip) + WORD $0x140001ba // b LBB0_591 $1768(%rip) +LBB0_481: WORD $0xd100040f // sub x15, x0, #1 WORD $0xeb0e01ff // cmp x15, x14 - WORD $0x540036c0 // b.eq LBB0_577 $1752(%rip) + WORD $0x540036c0 // b.eq LBB0_590 $1752(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910009e5 // add x5, x15, #2 WORD $0xcb0e000e // sub x14, x0, x14 WORD $0xd10009ce // sub x14, x14, #2 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 WORD $0xf10005df // cmp x14, #1 - WORD $0x5400010a // b.ge LBB0_471 $32(%rip) - WORD $0x140001ac // b LBB0_577 $1712(%rip) -LBB0_470: + WORD $0x5400010a // b.ge LBB0_484 $32(%rip) + WORD $0x140001ac // b LBB0_590 $1712(%rip) +LBB0_483: WORD $0x92800026 // mov x6, #-2 WORD $0x52800040 // mov w0, #2 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x540034ed // b.le LBB0_578 $1692(%rip) -LBB0_471: + WORD $0x540034ed // b.le LBB0_591 $1692(%rip) +LBB0_484: WORD $0x394000a0 // ldrb w0, [x5] WORD $0x7101701f // cmp w0, #92 - WORD $0x54ffff00 // b.eq LBB0_470 $-32(%rip) + WORD $0x54ffff00 // b.eq LBB0_483 $-32(%rip) WORD $0x7100881f // cmp w0, #34 - WORD $0x54000100 // b.eq LBB0_474 $32(%rip) + WORD $0x54000100 // b.eq LBB0_487 $32(%rip) WORD $0x92800006 // mov x6, #-1 WORD $0x52800020 // mov w0, #1 WORD $0x8b0000a5 // add x5, x5, x0 WORD $0x92800000 // mov x0, #-1 WORD $0xab0601ce // adds x14, x14, x6 - WORD $0x54fffecc // b.gt LBB0_471 $-40(%rip) - WORD $0x1400019b // b LBB0_578 $1644(%rip) -LBB0_474: - WORD $0xcb1e00ae // sub x14, x5, lr + WORD $0x54fffecc // b.gt LBB0_484 $-40(%rip) + WORD $0x1400019b // b LBB0_591 $1644(%rip) +LBB0_487: + WORD $0xcb1400ae // sub x14, x5, x20 WORD $0x910005d3 // add x19, x14, #1 WORD $0xf9000033 // str x19, [x1] WORD $0xaa0803e0 // mov x0, x8 WORD $0xeb07011f // cmp x8, x7 - WORD $0x54ff3303 // b.lo LBB0_195 $-6560(%rip) - WORD $0x14000194 // b LBB0_578 $1616(%rip) -LBB0_475: - WORD $0xdac0028f // rbit x15, x20 + WORD $0x54ff2f23 // b.lo LBB0_200 $-6684(%rip) + WORD $0x14000194 // b LBB0_591 $1616(%rip) +LBB0_488: + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0275 // sub x21, x19, lr - WORD $0x8b0f02af // add x15, x21, x15 + WORD $0xcb140276 // sub x22, x19, x20 + WORD $0x8b0f02cf // add x15, x22, x15 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_476: - WORD $0x0a26028f // bic w15, w20, w6 - WORD $0x531f79f5 // lsl w21, w15, #1 +LBB0_489: + WORD $0x0a2602af // bic w15, w21, w6 + WORD $0x531f79f6 // lsl w22, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a350294 // bic w20, w20, w21 - WORD $0x1201f294 // and w20, w20, #0xaaaaaaaa - WORD $0x2b0f028f // adds w15, w20, w15 + WORD $0x0a3602b5 // bic w21, w21, w22 + WORD $0x1201f2b5 // and w21, w21, #0xaaaaaaaa + WORD $0x2b0f02af // adds w15, w21, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 WORD $0x0a0601ef // and w15, w15, w6 WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb5ffc025 // cbnz x5, LBB0_371 $-2044(%rip) -LBB0_477: + WORD $0xb5ffbf45 // cbnz x5, LBB0_381 $-2072(%rip) +LBB0_490: WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_478: - WORD $0xb5001066 // cbnz x6, LBB0_507 $524(%rip) - WORD $0xb40003b6 // cbz x22, LBB0_487 $116(%rip) -LBB0_480: - WORD $0xaa3e03ee // mvn x14, lr -LBB0_481: + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_491: + WORD $0xb5001066 // cbnz x6, LBB0_520 $524(%rip) + WORD $0xb40003b7 // cbz x23, LBB0_500 $116(%rip) +LBB0_493: + WORD $0xaa3403ee // mvn x14, x20 +LBB0_494: WORD $0xaa1303e6 // mov x6, x19 WORD $0x384014c5 // ldrb w5, [x6], #1 WORD $0x710088bf // cmp w5, #34 - WORD $0x54000320 // b.eq LBB0_488 $100(%rip) - WORD $0xd10006d4 // sub x20, x22, #1 + WORD $0x54000320 // b.eq LBB0_501 $100(%rip) + WORD $0xd10006f5 // sub x21, x23, #1 WORD $0x710170bf // cmp w5, #92 - WORD $0x54000100 // b.eq LBB0_484 $32(%rip) + WORD $0x54000100 // b.eq LBB0_497 $32(%rip) WORD $0xaa0603f3 // mov x19, x6 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0x5280007a // mov w26, #3 + WORD $0xaa1503f7 // mov x23, x21 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb5fffe94 // cbnz x20, LBB0_481 $-48(%rip) - WORD $0x1400000c // b LBB0_486 $48(%rip) -LBB0_484: - WORD $0xb40020d4 // cbz x20, LBB0_545 $1048(%rip) + WORD $0xb5fffe95 // cbnz x21, LBB0_494 $-48(%rip) + WORD $0x1400000c // b LBB0_499 $48(%rip) +LBB0_497: + WORD $0xb40020d5 // cbz x21, LBB0_558 $1048(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001e0 // csel x0, x15, x0, eq WORD $0x91000a73 // add x19, x19, #2 - WORD $0xd1000ad4 // sub x20, x22, #2 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0x5280007a // mov w26, #3 + WORD $0xd1000af5 // sub x21, x23, #2 + WORD $0xaa1503f7 // mov x23, x21 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb5fffd14 // cbnz x20, LBB0_481 $-96(%rip) -LBB0_486: + WORD $0xb5fffd15 // cbnz x21, LBB0_494 $-96(%rip) +LBB0_499: WORD $0x710088bf // cmp w5, #34 - WORD $0x54001f41 // b.ne LBB0_545 $1000(%rip) -LBB0_487: + WORD $0x54001f41 // b.ne LBB0_558 $1000(%rip) +LBB0_500: WORD $0xaa1303e6 // mov x6, x19 -LBB0_488: - WORD $0xcb1e00d3 // sub x19, x6, lr - WORD $0xb6ff83f3 // tbz x19, #63, LBB0_283 $-3972(%rip) - WORD $0x140000f4 // b LBB0_544 $976(%rip) -LBB0_489: - WORD $0xdac0028f // rbit x15, x20 +LBB0_501: + WORD $0xcb1400d3 // sub x19, x6, x20 + WORD $0xb6fff373 // tbz x19, #63, LBB0_478 $-404(%rip) + WORD $0x140000f4 // b LBB0_557 $976(%rip) +LBB0_502: + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0275 // sub x21, x19, lr - WORD $0x8b0f02af // add x15, x21, x15 + WORD $0xcb140276 // sub x22, x19, x20 + WORD $0x8b0f02cf // add x15, x22, x15 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_490: - WORD $0x0a26028f // bic w15, w20, w6 - WORD $0x531f79f5 // lsl w21, w15, #1 +LBB0_503: + WORD $0x0a2602af // bic w15, w21, w6 + WORD $0x531f79f6 // lsl w22, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a350294 // bic w20, w20, w21 - WORD $0x1201f294 // and w20, w20, #0xaaaaaaaa - WORD $0x2b0f028f // adds w15, w20, w15 + WORD $0x0a3602b5 // bic w21, w21, w22 + WORD $0x1201f2b5 // and w21, w21, #0xaaaaaaaa + WORD $0x2b0f02af // adds w15, w21, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 WORD $0x0a0601ef // and w15, w15, w6 WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x17fffded // b LBB0_376 $-2124(%rip) -LBB0_491: - WORD $0xdac0028f // rbit x15, x20 + WORD $0x17fffde6 // b LBB0_386 $-2152(%rip) +LBB0_504: + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0275 // sub x21, x19, lr - WORD $0x8b0f02af // add x15, x21, x15 + WORD $0xcb140276 // sub x22, x19, x20 + WORD $0x8b0f02cf // add x15, x22, x15 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_492: - WORD $0x0a26028f // bic w15, w20, w6 - WORD $0x531f79f5 // lsl w21, w15, #1 +LBB0_505: + WORD $0x0a2602af // bic w15, w21, w6 + WORD $0x531f79f6 // lsl w22, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a350294 // bic w20, w20, w21 - WORD $0x1201f294 // and w20, w20, #0xaaaaaaaa - WORD $0x2b0f028f // adds w15, w20, w15 + WORD $0x0a3602b5 // bic w21, w21, w22 + WORD $0x1201f2b5 // and w21, w21, #0xaaaaaaaa + WORD $0x2b0f02af // adds w15, w21, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 WORD $0x0a0601ef // and w15, w15, w6 WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb5ffc705 // cbnz x5, LBB0_400 $-1824(%rip) -LBB0_493: + WORD $0xb5ffc625 // cbnz x5, LBB0_410 $-1852(%rip) +LBB0_506: WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_494: - WORD $0xb50008e6 // cbnz x6, LBB0_511 $284(%rip) - WORD $0xb40009d6 // cbz x22, LBB0_513 $312(%rip) -LBB0_496: - WORD $0xaa3e03ee // mvn x14, lr -LBB0_497: + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_507: + WORD $0xb50008e6 // cbnz x6, LBB0_524 $284(%rip) + WORD $0xb40009d7 // cbz x23, LBB0_526 $312(%rip) +LBB0_509: + WORD $0xaa3403ee // mvn x14, x20 +LBB0_510: WORD $0xaa1303e6 // mov x6, x19 WORD $0x384014c5 // ldrb w5, [x6], #1 WORD $0x710088bf // cmp w5, #34 - WORD $0x540002c0 // b.eq LBB0_503 $88(%rip) - WORD $0xd10006d4 // sub x20, x22, #1 + WORD $0x540002c0 // b.eq LBB0_516 $88(%rip) + WORD $0xd10006f5 // sub x21, x23, #1 WORD $0x710170bf // cmp w5, #92 - WORD $0x540000a0 // b.eq LBB0_500 $20(%rip) + WORD $0x540000a0 // b.eq LBB0_513 $20(%rip) WORD $0xaa0603f3 // mov x19, x6 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0xb5fffef4 // cbnz x20, LBB0_497 $-36(%rip) - WORD $0x14000009 // b LBB0_502 $36(%rip) -LBB0_500: - WORD $0xb4001774 // cbz x20, LBB0_545 $748(%rip) + WORD $0xaa1503f7 // mov x23, x21 + WORD $0xb5fffef5 // cbnz x21, LBB0_510 $-36(%rip) + WORD $0x14000009 // b LBB0_515 $36(%rip) +LBB0_513: + WORD $0xb4001775 // cbz x21, LBB0_558 $748(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001e0 // csel x0, x15, x0, eq WORD $0x91000a73 // add x19, x19, #2 - WORD $0xd1000ad4 // sub x20, x22, #2 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0xb5fffdd4 // cbnz x20, LBB0_497 $-72(%rip) -LBB0_502: + WORD $0xd1000af5 // sub x21, x23, #2 + WORD $0xaa1503f7 // mov x23, x21 + WORD $0xb5fffdd5 // cbnz x21, LBB0_510 $-72(%rip) +LBB0_515: WORD $0x710088bf // cmp w5, #34 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x54000700 // b.eq LBB0_514 $224(%rip) - WORD $0x140000ae // b LBB0_545 $696(%rip) -LBB0_503: - WORD $0x5280007a // mov w26, #3 + WORD $0x54000700 // b.eq LBB0_527 $224(%rip) + WORD $0x140000ae // b LBB0_558 $696(%rip) +LBB0_516: + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x14000034 // b LBB0_515 $208(%rip) -LBB0_504: + WORD $0x14000034 // b LBB0_528 $208(%rip) +LBB0_517: WORD $0xb100041f // cmn x0, #1 - WORD $0x540000a1 // b.ne LBB0_506 $20(%rip) - WORD $0xdac0028f // rbit x15, x20 + WORD $0x540000a1 // b.ne LBB0_519 $20(%rip) + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0260 // sub x0, x19, lr + WORD $0xcb140260 // sub x0, x19, x20 WORD $0x8b0f0000 // add x0, x0, x15 -LBB0_506: - WORD $0x0a26028f // bic w15, w20, w6 - WORD $0x531f79f5 // lsl w21, w15, #1 +LBB0_519: + WORD $0x0a2602af // bic w15, w21, w6 + WORD $0x531f79f6 // lsl w22, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a350294 // bic w20, w20, w21 - WORD $0x1201f294 // and w20, w20, #0xaaaaaaaa - WORD $0x2b0f028f // adds w15, w20, w15 + WORD $0x0a3602b5 // bic w21, w21, w22 + WORD $0x1201f2b5 // and w21, w21, #0xaaaaaaaa + WORD $0x2b0f02af // adds w15, w21, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 WORD $0x0a0601ef // and w15, w15, w6 WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0x5280007a // mov w26, #3 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0x17fffe26 // b LBB0_405 $-1896(%rip) -LBB0_507: - WORD $0xb4001296 // cbz x22, LBB0_545 $592(%rip) - WORD $0xaa3e03ee // mvn x14, lr + WORD $0x17fffe1f // b LBB0_415 $-1924(%rip) +LBB0_520: + WORD $0xb4001297 // cbz x23, LBB0_558 $592(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb5ffef16 // cbnz x22, LBB0_480 $-544(%rip) - WORD $0x17ffff93 // b LBB0_487 $-436(%rip) -LBB0_509: - WORD $0xb4001176 // cbz x22, LBB0_545 $556(%rip) - WORD $0xaa3e03ee // mvn x14, lr + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0xb5ffef17 // cbnz x23, LBB0_493 $-544(%rip) + WORD $0x17ffff93 // b LBB0_500 $-436(%rip) +LBB0_522: + WORD $0xb4001177 // cbz x23, LBB0_558 $556(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb5ffb536 // cbnz x22, LBB0_382 $-2396(%rip) - WORD $0x14000083 // b LBB0_545 $524(%rip) -LBB0_511: - WORD $0xb4001056 // cbz x22, LBB0_545 $520(%rip) - WORD $0xaa3e03ee // mvn x14, lr + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0xb5ffb457 // cbnz x23, LBB0_392 $-2424(%rip) + WORD $0x14000083 // b LBB0_558 $524(%rip) +LBB0_524: + WORD $0xb4001057 // cbz x23, LBB0_558 $520(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb5fff696 // cbnz x22, LBB0_496 $-304(%rip) -LBB0_513: - WORD $0x5280007a // mov w26, #3 + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0xb5fff697 // cbnz x23, LBB0_509 $-304(%rip) +LBB0_526: + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 -LBB0_514: +LBB0_527: WORD $0xaa1303e6 // mov x6, x19 -LBB0_515: - WORD $0xcb1e00d3 // sub x19, x6, lr - WORD $0xb6ff1b13 // tbz x19, #63, LBB0_194 $-7328(%rip) - WORD $0x14000072 // b LBB0_544 $456(%rip) -LBB0_516: - WORD $0xb4000e76 // cbz x22, LBB0_545 $460(%rip) - WORD $0xaa3e03ee // mvn x14, lr +LBB0_528: + WORD $0xcb1400d3 // sub x19, x6, x20 + WORD $0xb6ff1733 // tbz x19, #63, LBB0_199 $-7452(%rip) + WORD $0x14000072 // b LBB0_557 $456(%rip) +LBB0_529: + WORD $0xb4000e77 // cbz x23, LBB0_558 $460(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0x5280007a // mov w26, #3 + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb5ffc2d6 // cbnz x22, LBB0_411 $-1960(%rip) - WORD $0x14000068 // b LBB0_545 $416(%rip) -LBB0_518: + WORD $0xb5ffc1f7 // cbnz x23, LBB0_421 $-1988(%rip) + WORD $0x14000068 // b LBB0_558 $416(%rip) +LBB0_531: WORD $0xd100040f // sub x15, x0, #1 WORD $0xeb0e01ff // cmp x15, x14 - WORD $0x54001920 // b.eq LBB0_577 $804(%rip) + WORD $0x54001920 // b.eq LBB0_590 $804(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0x910009e5 // add x5, x15, #2 WORD $0xcb0e000e // sub x14, x0, x14 WORD $0xd10009ce // sub x14, x14, #2 WORD $0xf10005df // cmp x14, #1 - WORD $0x54ffc7ca // b.ge LBB0_424 $-1800(%rip) - WORD $0x140000c2 // b LBB0_577 $776(%rip) -LBB0_520: - WORD $0xdac0028f // rbit x15, x20 + WORD $0x54ffc6ea // b.ge LBB0_434 $-1828(%rip) + WORD $0x140000c2 // b LBB0_590 $776(%rip) +LBB0_533: + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0271 // sub x17, x19, lr + WORD $0xcb140271 // sub x17, x19, x20 WORD $0x8b0f022f // add x15, x17, x15 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8f1000 // csel x0, x0, x15, ne -LBB0_521: - WORD $0x0a26028f // bic w15, w20, w6 +LBB0_534: + WORD $0x0a2602af // bic w15, w21, w6 WORD $0x531f79f1 // lsl w17, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a310291 // bic w17, w20, w17 + WORD $0x0a3102b1 // bic w17, w21, w17 WORD $0x1201f231 // and w17, w17, #0xaaaaaaaa WORD $0x2b0f022f // adds w15, w17, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 @@ -3227,61 +3287,61 @@ LBB0_521: WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0xb5ffcd05 // cbnz x5, LBB0_437 $-1632(%rip) -LBB0_522: + WORD $0xb5ffcc25 // cbnz x5, LBB0_447 $-1660(%rip) +LBB0_535: WORD $0x91008273 // add x19, x19, #32 - WORD $0xaa0e03f6 // mov x22, x14 -LBB0_523: - WORD $0xb5000626 // cbnz x6, LBB0_538 $196(%rip) - WORD $0xb40002f6 // cbz x22, LBB0_532 $92(%rip) -LBB0_525: - WORD $0xaa3e03ee // mvn x14, lr -LBB0_526: + WORD $0xaa0e03f7 // mov x23, x14 +LBB0_536: + WORD $0xb5000626 // cbnz x6, LBB0_551 $196(%rip) + WORD $0xb40002f7 // cbz x23, LBB0_545 $92(%rip) +LBB0_538: + WORD $0xaa3403ee // mvn x14, x20 +LBB0_539: WORD $0xaa1303e6 // mov x6, x19 WORD $0x384014c5 // ldrb w5, [x6], #1 WORD $0x710088bf // cmp w5, #34 - WORD $0x54000260 // b.eq LBB0_533 $76(%rip) - WORD $0xd10006d4 // sub x20, x22, #1 + WORD $0x54000260 // b.eq LBB0_546 $76(%rip) + WORD $0xd10006f5 // sub x21, x23, #1 WORD $0x710170bf // cmp w5, #92 - WORD $0x540000a0 // b.eq LBB0_529 $20(%rip) + WORD $0x540000a0 // b.eq LBB0_542 $20(%rip) WORD $0xaa0603f3 // mov x19, x6 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0xb5fffef4 // cbnz x20, LBB0_526 $-36(%rip) - WORD $0x14000009 // b LBB0_531 $36(%rip) -LBB0_529: - WORD $0xb4000774 // cbz x20, LBB0_545 $236(%rip) + WORD $0xaa1503f7 // mov x23, x21 + WORD $0xb5fffef5 // cbnz x21, LBB0_539 $-36(%rip) + WORD $0x14000009 // b LBB0_544 $36(%rip) +LBB0_542: + WORD $0xb4000775 // cbz x21, LBB0_558 $236(%rip) WORD $0x8b0e00cf // add x15, x6, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001e0 // csel x0, x15, x0, eq WORD $0x91000a73 // add x19, x19, #2 - WORD $0xd1000ad4 // sub x20, x22, #2 - WORD $0xaa1403f6 // mov x22, x20 - WORD $0xb5fffdd4 // cbnz x20, LBB0_526 $-72(%rip) -LBB0_531: + WORD $0xd1000af5 // sub x21, x23, #2 + WORD $0xaa1503f7 // mov x23, x21 + WORD $0xb5fffdd5 // cbnz x21, LBB0_539 $-72(%rip) +LBB0_544: WORD $0x710088bf // cmp w5, #34 - WORD $0x54000641 // b.ne LBB0_545 $200(%rip) -LBB0_532: + WORD $0x54000641 // b.ne LBB0_558 $200(%rip) +LBB0_545: WORD $0xaa1303e6 // mov x6, x19 -LBB0_533: - WORD $0xcb1e00d3 // sub x19, x6, lr -LBB0_534: - WORD $0x5280007a // mov w26, #3 +LBB0_546: + WORD $0xcb1400d3 // sub x19, x6, x20 +LBB0_547: + WORD $0x5280007b // mov w27, #3 WORD $0x92f00007 // mov x7, #9223372036854775807 WORD $0x12800011 // mov w17, #-1 - WORD $0xb6ff6a93 // tbz x19, #63, LBB0_283 $-4784(%rip) - WORD $0x14000029 // b LBB0_544 $164(%rip) -LBB0_535: + WORD $0xb6ffda13 // tbz x19, #63, LBB0_478 $-1216(%rip) + WORD $0x14000029 // b LBB0_557 $164(%rip) +LBB0_548: WORD $0xb100041f // cmn x0, #1 - WORD $0x540000a1 // b.ne LBB0_537 $20(%rip) - WORD $0xdac0028f // rbit x15, x20 + WORD $0x540000a1 // b.ne LBB0_550 $20(%rip) + WORD $0xdac002af // rbit x15, x21 WORD $0xdac011ef // clz x15, x15 - WORD $0xcb1e0271 // sub x17, x19, lr + WORD $0xcb140271 // sub x17, x19, x20 WORD $0x8b0f0220 // add x0, x17, x15 -LBB0_537: - WORD $0x0a26028f // bic w15, w20, w6 +LBB0_550: + WORD $0x0a2602af // bic w15, w21, w6 WORD $0x531f79f1 // lsl w17, w15, #1 WORD $0x331f79e6 // bfi w6, w15, #1, #31 - WORD $0x0a310291 // bic w17, w20, w17 + WORD $0x0a3102b1 // bic w17, w21, w17 WORD $0x1201f231 // and w17, w17, #0xaaaaaaaa WORD $0x2b0f022f // adds w15, w17, w15 WORD $0x4a0f060f // eor w15, w16, w15, lsl #1 @@ -3289,160 +3349,160 @@ LBB0_537: WORD $0x1a9f37e6 // cset w6, hs WORD $0x2a2f03ef // mvn w15, w15 WORD $0x8a0501e5 // and x5, x15, x5 - WORD $0x17fffe59 // b LBB0_442 $-1692(%rip) -LBB0_538: - WORD $0xb4000316 // cbz x22, LBB0_545 $96(%rip) - WORD $0xaa3e03ee // mvn x14, lr + WORD $0x17fffe52 // b LBB0_452 $-1720(%rip) +LBB0_551: + WORD $0xb4000317 // cbz x23, LBB0_558 $96(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb5fff956 // cbnz x22, LBB0_525 $-216(%rip) - WORD $0x17ffffdf // b LBB0_532 $-132(%rip) -LBB0_540: - WORD $0xb40001f6 // cbz x22, LBB0_545 $60(%rip) - WORD $0xaa3e03ee // mvn x14, lr + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0xb5fff957 // cbnz x23, LBB0_538 $-216(%rip) + WORD $0x17ffffdf // b LBB0_545 $-132(%rip) +LBB0_553: + WORD $0xb40001f7 // cbz x23, LBB0_558 $60(%rip) + WORD $0xaa3403ee // mvn x14, x20 WORD $0x8b0e026e // add x14, x19, x14 WORD $0xb100041f // cmn x0, #1 WORD $0x9a8001c0 // csel x0, x14, x0, eq WORD $0x91000673 // add x19, x19, #1 - WORD $0xd10006d6 // sub x22, x22, #1 - WORD $0xb5ffcc36 // cbnz x22, LBB0_448 $-1660(%rip) - WORD $0x14000007 // b LBB0_545 $28(%rip) -LBB0_542: + WORD $0xd10006f7 // sub x23, x23, #1 + WORD $0xb5ffcb57 // cbnz x23, LBB0_458 $-1688(%rip) + WORD $0x14000007 // b LBB0_558 $28(%rip) +LBB0_555: WORD $0x92800020 // mov x0, #-2 - WORD $0x1400006a // b LBB0_578 $424(%rip) -LBB0_543: + WORD $0x1400006a // b LBB0_591 $424(%rip) +LBB0_556: WORD $0x928000c0 // mov x0, #-7 - WORD $0x14000068 // b LBB0_578 $416(%rip) -LBB0_544: + WORD $0x14000068 // b LBB0_591 $416(%rip) +LBB0_557: WORD $0xb100067f // cmn x19, #1 - WORD $0x54000ac1 // b.ne LBB0_569 $344(%rip) -LBB0_545: - WORD $0xf9400760 // ldr x0, [x27, #8] + WORD $0x54000ac1 // b.ne LBB0_582 $344(%rip) +LBB0_558: + WORD $0xf94007c0 // ldr x0, [lr, #8] WORD $0x92800013 // mov x19, #-1 - WORD $0x14000053 // b LBB0_569 $332(%rip) -LBB0_546: + WORD $0x14000053 // b LBB0_582 $332(%rip) +LBB0_559: WORD $0x9280000e // mov x14, #-1 -LBB0_547: - WORD $0xaa2e03f6 // mvn x22, x14 -LBB0_548: - WORD $0x8b0802c8 // add x8, x22, x8 -LBB0_549: +LBB0_560: + WORD $0xaa2e03f7 // mvn x23, x14 +LBB0_561: + WORD $0x8b0802e8 // add x8, x23, x8 +LBB0_562: WORD $0xf9000028 // str x8, [x1] WORD $0x92800020 // mov x0, #-2 - WORD $0x1400005d // b LBB0_578 $372(%rip) -LBB0_550: + WORD $0x1400005d // b LBB0_591 $372(%rip) +LBB0_563: WORD $0xf900002e // str x14, [x1] - WORD $0x1400005a // b LBB0_577 $360(%rip) -LBB0_551: + WORD $0x1400005a // b LBB0_590 $360(%rip) +LBB0_564: WORD $0xb100041f // cmn x0, #1 - WORD $0x540008a0 // b.eq LBB0_568 $276(%rip) + WORD $0x540008a0 // b.eq LBB0_581 $276(%rip) WORD $0x92800033 // mov x19, #-2 - WORD $0x14000047 // b LBB0_569 $284(%rip) -LBB0_553: - WORD $0xaa0003f6 // mov x22, x0 - WORD $0x17fffff5 // b LBB0_548 $-44(%rip) -LBB0_554: + WORD $0x14000047 // b LBB0_582 $284(%rip) +LBB0_566: + WORD $0xaa0003f7 // mov x23, x0 + WORD $0x17fffff5 // b LBB0_561 $-44(%rip) +LBB0_567: WORD $0xf9000028 // str x8, [x1] WORD $0x394000c9 // ldrb w9, [x6] WORD $0x7101d13f // cmp w9, #116 - WORD $0x54000a21 // b.ne LBB0_578 $324(%rip) + WORD $0x54000a21 // b.ne LBB0_591 $324(%rip) WORD $0x91000509 // add x9, x8, #1 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101c93f // cmp w9, #114 - WORD $0x54000981 // b.ne LBB0_578 $304(%rip) + WORD $0x54000981 // b.ne LBB0_591 $304(%rip) WORD $0x91000909 // add x9, x8, #2 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101d53f // cmp w9, #117 - WORD $0x540008e1 // b.ne LBB0_578 $284(%rip) + WORD $0x540008e1 // b.ne LBB0_591 $284(%rip) WORD $0x91000d09 // add x9, x8, #3 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101953f // cmp w9, #101 - WORD $0x54000841 // b.ne LBB0_578 $264(%rip) - WORD $0x14000014 // b LBB0_562 $80(%rip) -LBB0_558: + WORD $0x54000841 // b.ne LBB0_591 $264(%rip) + WORD $0x14000014 // b LBB0_575 $80(%rip) +LBB0_571: WORD $0xf9000028 // str x8, [x1] WORD $0x394000c9 // ldrb w9, [x6] WORD $0x7101b93f // cmp w9, #110 - WORD $0x540007a1 // b.ne LBB0_578 $244(%rip) + WORD $0x540007a1 // b.ne LBB0_591 $244(%rip) WORD $0x91000509 // add x9, x8, #1 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101d53f // cmp w9, #117 - WORD $0x54000701 // b.ne LBB0_578 $224(%rip) + WORD $0x54000701 // b.ne LBB0_591 $224(%rip) WORD $0x91000909 // add x9, x8, #2 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101b13f // cmp w9, #108 - WORD $0x54000661 // b.ne LBB0_578 $204(%rip) + WORD $0x54000661 // b.ne LBB0_591 $204(%rip) WORD $0x91000d09 // add x9, x8, #3 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101b13f // cmp w9, #108 - WORD $0x540005c1 // b.ne LBB0_578 $184(%rip) -LBB0_562: + WORD $0x540005c1 // b.ne LBB0_591 $184(%rip) +LBB0_575: WORD $0x91001108 // add x8, x8, #4 WORD $0xf9000028 // str x8, [x1] - WORD $0x1400002b // b LBB0_578 $172(%rip) -LBB0_563: + WORD $0x1400002b // b LBB0_591 $172(%rip) +LBB0_576: WORD $0xf9000033 // str x19, [x1] - WORD $0x38736bc9 // ldrb w9, [lr, x19] + WORD $0x38736a89 // ldrb w9, [x20, x19] WORD $0x7101853f // cmp w9, #97 - WORD $0x540004e1 // b.ne LBB0_578 $156(%rip) + WORD $0x540004e1 // b.ne LBB0_591 $156(%rip) WORD $0x91000909 // add x9, x8, #2 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101b13f // cmp w9, #108 - WORD $0x54000441 // b.ne LBB0_578 $136(%rip) + WORD $0x54000441 // b.ne LBB0_591 $136(%rip) WORD $0x91000d09 // add x9, x8, #3 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101cd3f // cmp w9, #115 - WORD $0x540003a1 // b.ne LBB0_578 $116(%rip) + WORD $0x540003a1 // b.ne LBB0_591 $116(%rip) WORD $0x91001109 // add x9, x8, #4 WORD $0xf9000029 // str x9, [x1] - WORD $0x38696bc9 // ldrb w9, [lr, x9] + WORD $0x38696a89 // ldrb w9, [x20, x9] WORD $0x7101953f // cmp w9, #101 - WORD $0x54000301 // b.ne LBB0_578 $96(%rip) + WORD $0x54000301 // b.ne LBB0_591 $96(%rip) WORD $0x91001508 // add x8, x8, #5 WORD $0xf9000028 // str x8, [x1] - WORD $0x14000015 // b LBB0_578 $84(%rip) -LBB0_568: + WORD $0x14000015 // b LBB0_591 $84(%rip) +LBB0_581: WORD $0xdac000a8 // rbit x8, x5 WORD $0xdac01108 // clz x8, x8 WORD $0x8b130100 // add x0, x8, x19 WORD $0x92800033 // mov x19, #-2 -LBB0_569: +LBB0_582: WORD $0xf9000020 // str x0, [x1] WORD $0xaa1303e0 // mov x0, x19 - WORD $0x1400000e // b LBB0_578 $56(%rip) -LBB0_570: + WORD $0x1400000e // b LBB0_591 $56(%rip) +LBB0_583: WORD $0x9280000e // mov x14, #-1 -LBB0_571: +LBB0_584: WORD $0xaa2e03e6 // mvn x6, x14 -LBB0_572: +LBB0_585: WORD $0x8b060268 // add x8, x19, x6 - WORD $0x17ffffab // b LBB0_549 $-340(%rip) -LBB0_573: - WORD $0xaa1a03e6 // mov x6, x26 - WORD $0x8b1a0268 // add x8, x19, x26 - WORD $0x17ffffa8 // b LBB0_549 $-352(%rip) -LBB0_574: + WORD $0x17ffffab // b LBB0_562 $-340(%rip) +LBB0_586: + WORD $0xaa1b03e6 // mov x6, x27 + WORD $0x8b1b0268 // add x8, x19, x27 + WORD $0x17ffffa8 // b LBB0_562 $-352(%rip) +LBB0_587: WORD $0x8b1300a0 // add x0, x5, x19 WORD $0x92800033 // mov x19, #-2 - WORD $0x17fffff4 // b LBB0_569 $-48(%rip) -LBB0_575: - WORD $0xf9400768 // ldr x8, [x27, #8] -LBB0_576: + WORD $0x17fffff4 // b LBB0_582 $-48(%rip) +LBB0_588: + WORD $0xf94007c8 // ldr x8, [lr, #8] +LBB0_589: WORD $0xf9000028 // str x8, [x1] -LBB0_577: +LBB0_590: WORD $0x92800000 // mov x0, #-1 -LBB0_578: +LBB0_591: WORD $0xa94dfbfd // ldp fp, lr, [sp, #216] WORD $0xa94ccff4 // ldp x20, x19, [sp, #200] WORD $0xa94bd7f6 // ldp x22, x21, [sp, #184] @@ -3452,20 +3512,20 @@ LBB0_578: WORD $0x6d47a3e9 // ldp d9, d8, [sp, #120] WORD $0x9103c3ff // add sp, sp, #240 WORD $0xd65f03c0 // ret -LBB0_579: - WORD $0x8b1401c0 // add x0, x14, x20 +LBB0_592: + WORD $0x8b1501c0 // add x0, x14, x21 WORD $0x92800033 // mov x19, #-2 - WORD $0x17ffffe5 // b LBB0_569 $-108(%rip) -LBB0_580: - WORD $0xcb1e0268 // sub x8, x19, lr - WORD $0x8b140100 // add x0, x8, x20 + WORD $0x17ffffe5 // b LBB0_582 $-108(%rip) +LBB0_593: + WORD $0xcb140268 // sub x8, x19, x20 + WORD $0x8b150100 // add x0, x8, x21 WORD $0x92800033 // mov x19, #-2 - WORD $0x17ffffe1 // b LBB0_569 $-124(%rip) -LBB0_581: - WORD $0xcb1e0268 // sub x8, x19, lr + WORD $0x17ffffe1 // b LBB0_582 $-124(%rip) +LBB0_594: + WORD $0xcb140268 // sub x8, x19, x20 WORD $0x8b050100 // add x0, x8, x5 WORD $0x92800033 // mov x19, #-2 - WORD $0x17ffffdd // b LBB0_569 $-140(%rip) + WORD $0x17ffffdd // b LBB0_582 $-140(%rip) // .p2align 2, 0x00 _MASK_USE_NUMBER: WORD $0x00000002 // .long 2 diff --git a/vendor/github.com/bytedance/sonic/internal/native/sse/get_by_path_subr.go b/vendor/github.com/bytedance/sonic/internal/native/sse/get_by_path_subr.go index 8d76ae0..872e757 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/sse/get_by_path_subr.go +++ b/vendor/github.com/bytedance/sonic/internal/native/sse/get_by_path_subr.go @@ -16,7 +16,7 @@ const ( ) const ( - _size__get_by_path = 21416 + _size__get_by_path = 21728 ) var ( @@ -28,15 +28,15 @@ var ( {0xc, 32}, {0xd, 40}, {0x14, 48}, - {0x4568, 216}, - {0x4569, 48}, - {0x456b, 40}, - {0x456d, 32}, - {0x456f, 24}, - {0x4571, 16}, - {0x4572, 8}, - {0x4573, 0}, - {0x53a8, 216}, + {0x4680, 216}, + {0x4681, 48}, + {0x4683, 40}, + {0x4685, 32}, + {0x4687, 24}, + {0x4689, 16}, + {0x468a, 8}, + {0x468b, 0}, + {0x54e0, 216}, } ) diff --git a/vendor/github.com/bytedance/sonic/internal/native/sse/get_by_path_text_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/sse/get_by_path_text_amd64.go index b7912a4..0e46eb5 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/sse/get_by_path_text_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/sse/get_by_path_text_amd64.go @@ -46,585 +46,590 @@ var _text_get_by_path = []byte{ 0x41, 0x54, //0x000000fa pushq %r12 0x53, //0x000000fc pushq %rbx 0x48, 0x81, 0xec, 0xa8, 0x00, 0x00, 0x00, //0x000000fd subq $168, %rsp - 0x49, 0x89, 0xc9, //0x00000104 movq %rcx, %r9 + 0x49, 0x89, 0xca, //0x00000104 movq %rcx, %r10 0x49, 0x89, 0xf0, //0x00000107 movq %rsi, %r8 0x49, 0x89, 0xfc, //0x0000010a movq %rdi, %r12 0x48, 0x8b, 0x42, 0x08, //0x0000010d movq $8(%rdx), %rax - 0x4c, 0x8d, 0x7f, 0x08, //0x00000111 leaq $8(%rdi), %r15 + 0x4c, 0x8d, 0x4f, 0x08, //0x00000111 leaq $8(%rdi), %r9 0x48, 0x85, 0xc0, //0x00000115 testq %rax, %rax 0x48, 0x89, 0x75, 0xc8, //0x00000118 movq %rsi, $-56(%rbp) - 0x4c, 0x89, 0x7d, 0xc0, //0x0000011c movq %r15, $-64(%rbp) - 0x48, 0x89, 0x4d, 0x98, //0x00000120 movq %rcx, $-104(%rbp) - 0x0f, 0x84, 0xce, 0x2c, 0x00, 0x00, //0x00000124 je LBB0_459 - 0x4c, 0x8b, 0x1a, //0x0000012a movq (%rdx), %r11 + 0x4c, 0x89, 0x4d, 0xc0, //0x0000011c movq %r9, $-64(%rbp) + 0x48, 0x89, 0x4d, 0xa0, //0x00000120 movq %rcx, $-96(%rbp) + 0x0f, 0x84, 0x36, 0x2d, 0x00, 0x00, //0x00000124 je LBB0_465 + 0x48, 0x8b, 0x0a, //0x0000012a movq (%rdx), %rcx 0x48, 0xc1, 0xe0, 0x04, //0x0000012d shlq $4, %rax - 0x4c, 0x01, 0xd8, //0x00000131 addq %r11, %rax - 0x48, 0x89, 0x85, 0x38, 0xff, 0xff, 0xff, //0x00000134 movq %rax, $-200(%rbp) - 0x4d, 0x8b, 0x2c, 0x24, //0x0000013b movq (%r12), %r13 - 0x49, 0x8b, 0x00, //0x0000013f movq (%r8), %rax - 0xf3, 0x0f, 0x6f, 0x05, 0xe6, 0xfe, 0xff, 0xff, //0x00000142 movdqu $-282(%rip), %xmm0 /* LCPI0_3+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0xee, 0xfe, 0xff, 0xff, //0x0000014a movdqu $-274(%rip), %xmm1 /* LCPI0_4+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xa5, 0xfe, 0xff, 0xff, //0x00000152 movdqu $-347(%rip), %xmm13 /* LCPI0_0+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x35, 0xac, 0xfe, 0xff, 0xff, //0x0000015b movdqu $-340(%rip), %xmm14 /* LCPI0_1+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x25, 0xb4, 0xfe, 0xff, 0xff, //0x00000164 movdqu $-332(%rip), %xmm4 /* LCPI0_2+0(%rip) */ - 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x0000016c pcmpeqd %xmm9, %xmm9 - 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0xf6, 0xfe, 0xff, 0xff, //0x00000171 movdqu $-266(%rip), %xmm10 /* LCPI0_7+0(%rip) */ - 0x66, 0x45, 0x0f, 0xef, 0xc0, //0x0000017a pxor %xmm8, %xmm8 - 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0xc8, 0xfe, 0xff, 0xff, //0x0000017f movdqu $-312(%rip), %xmm11 /* LCPI0_5+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x25, 0xcf, 0xfe, 0xff, 0xff, //0x00000188 movdqu $-305(%rip), %xmm12 /* LCPI0_6+0(%rip) */ - 0x4c, 0x89, 0x65, 0xb0, //0x00000191 movq %r12, $-80(%rbp) - //0x00000195 LBB0_2 - 0x49, 0x8b, 0x0f, //0x00000195 movq (%r15), %rcx - 0x48, 0x39, 0xc8, //0x00000198 cmpq %rcx, %rax - 0x0f, 0x83, 0x2f, 0x00, 0x00, 0x00, //0x0000019b jae LBB0_7 - 0x41, 0x8a, 0x54, 0x05, 0x00, //0x000001a1 movb (%r13,%rax), %dl - 0x80, 0xfa, 0x0d, //0x000001a6 cmpb $13, %dl - 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x000001a9 je LBB0_7 - 0x80, 0xfa, 0x20, //0x000001af cmpb $32, %dl - 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x000001b2 je LBB0_7 - 0x80, 0xc2, 0xf7, //0x000001b8 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x000001bb cmpb $1, %dl - 0x0f, 0x86, 0x0c, 0x00, 0x00, 0x00, //0x000001be jbe LBB0_7 - 0x48, 0x89, 0xc2, //0x000001c4 movq %rax, %rdx - 0xe9, 0x2c, 0x01, 0x00, 0x00, //0x000001c7 jmp LBB0_28 - 0x90, 0x90, 0x90, 0x90, //0x000001cc .p2align 4, 0x90 - //0x000001d0 LBB0_7 - 0x48, 0x8d, 0x50, 0x01, //0x000001d0 leaq $1(%rax), %rdx - 0x48, 0x39, 0xca, //0x000001d4 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000001d7 jae LBB0_11 - 0x41, 0x8a, 0x5c, 0x15, 0x00, //0x000001dd movb (%r13,%rdx), %bl - 0x80, 0xfb, 0x0d, //0x000001e2 cmpb $13, %bl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000001e5 je LBB0_11 - 0x80, 0xfb, 0x20, //0x000001eb cmpb $32, %bl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000001ee je LBB0_11 - 0x80, 0xc3, 0xf7, //0x000001f4 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x000001f7 cmpb $1, %bl - 0x0f, 0x87, 0xf8, 0x00, 0x00, 0x00, //0x000001fa ja LBB0_28 - //0x00000200 .p2align 4, 0x90 - //0x00000200 LBB0_11 - 0x48, 0x8d, 0x50, 0x02, //0x00000200 leaq $2(%rax), %rdx - 0x48, 0x39, 0xca, //0x00000204 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000207 jae LBB0_15 - 0x41, 0x8a, 0x5c, 0x15, 0x00, //0x0000020d movb (%r13,%rdx), %bl - 0x80, 0xfb, 0x0d, //0x00000212 cmpb $13, %bl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000215 je LBB0_15 - 0x80, 0xfb, 0x20, //0x0000021b cmpb $32, %bl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000021e je LBB0_15 - 0x80, 0xc3, 0xf7, //0x00000224 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000227 cmpb $1, %bl - 0x0f, 0x87, 0xc8, 0x00, 0x00, 0x00, //0x0000022a ja LBB0_28 - //0x00000230 .p2align 4, 0x90 - //0x00000230 LBB0_15 - 0x48, 0x8d, 0x50, 0x03, //0x00000230 leaq $3(%rax), %rdx - 0x48, 0x39, 0xca, //0x00000234 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000237 jae LBB0_19 - 0x41, 0x8a, 0x5c, 0x15, 0x00, //0x0000023d movb (%r13,%rdx), %bl - 0x80, 0xfb, 0x0d, //0x00000242 cmpb $13, %bl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000245 je LBB0_19 - 0x80, 0xfb, 0x20, //0x0000024b cmpb $32, %bl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000024e je LBB0_19 - 0x80, 0xc3, 0xf7, //0x00000254 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000257 cmpb $1, %bl - 0x0f, 0x87, 0x98, 0x00, 0x00, 0x00, //0x0000025a ja LBB0_28 - //0x00000260 .p2align 4, 0x90 - //0x00000260 LBB0_19 - 0x4c, 0x8d, 0x50, 0x04, //0x00000260 leaq $4(%rax), %r10 - 0x4c, 0x39, 0xd1, //0x00000264 cmpq %r10, %rcx - 0x0f, 0x86, 0x53, 0x00, 0x00, 0x00, //0x00000267 jbe LBB0_860 - 0x4c, 0x39, 0xd1, //0x0000026d cmpq %r10, %rcx - 0x0f, 0x84, 0x6a, 0x00, 0x00, 0x00, //0x00000270 je LBB0_25 - 0x4a, 0x8d, 0x14, 0x29, //0x00000276 leaq (%rcx,%r13), %rdx - 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000027a movabsq $4294977024, %rdi - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000284 .p2align 4, 0x90 + 0x48, 0x89, 0x4d, 0xb0, //0x00000131 movq %rcx, $-80(%rbp) + 0x48, 0x01, 0xc8, //0x00000135 addq %rcx, %rax + 0x48, 0x89, 0x85, 0x30, 0xff, 0xff, 0xff, //0x00000138 movq %rax, $-208(%rbp) + 0x4d, 0x8b, 0x2c, 0x24, //0x0000013f movq (%r12), %r13 + 0x49, 0x8b, 0x00, //0x00000143 movq (%r8), %rax + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000146 movabsq $4294977024, %r14 + 0xf3, 0x0f, 0x6f, 0x05, 0xd8, 0xfe, 0xff, 0xff, //0x00000150 movdqu $-296(%rip), %xmm0 /* LCPI0_3+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0xe0, 0xfe, 0xff, 0xff, //0x00000158 movdqu $-288(%rip), %xmm1 /* LCPI0_4+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x97, 0xfe, 0xff, 0xff, //0x00000160 movdqu $-361(%rip), %xmm13 /* LCPI0_0+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x35, 0x9e, 0xfe, 0xff, 0xff, //0x00000169 movdqu $-354(%rip), %xmm14 /* LCPI0_1+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x25, 0xa6, 0xfe, 0xff, 0xff, //0x00000172 movdqu $-346(%rip), %xmm4 /* LCPI0_2+0(%rip) */ + 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x0000017a pcmpeqd %xmm9, %xmm9 + 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0xe8, 0xfe, 0xff, 0xff, //0x0000017f movdqu $-280(%rip), %xmm10 /* LCPI0_7+0(%rip) */ + 0x66, 0x45, 0x0f, 0xef, 0xc0, //0x00000188 pxor %xmm8, %xmm8 + 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0xba, 0xfe, 0xff, 0xff, //0x0000018d movdqu $-326(%rip), %xmm11 /* LCPI0_5+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x25, 0xc1, 0xfe, 0xff, 0xff, //0x00000196 movdqu $-319(%rip), %xmm12 /* LCPI0_6+0(%rip) */ + 0x4c, 0x89, 0x65, 0xa8, //0x0000019f movq %r12, $-88(%rbp) + //0x000001a3 LBB0_2 + 0x49, 0x8b, 0x09, //0x000001a3 movq (%r9), %rcx + 0x48, 0x39, 0xc8, //0x000001a6 cmpq %rcx, %rax + 0x0f, 0x83, 0x31, 0x00, 0x00, 0x00, //0x000001a9 jae LBB0_7 + 0x41, 0x8a, 0x54, 0x05, 0x00, //0x000001af movb (%r13,%rax), %dl + 0x80, 0xfa, 0x0d, //0x000001b4 cmpb $13, %dl + 0x0f, 0x84, 0x23, 0x00, 0x00, 0x00, //0x000001b7 je LBB0_7 + 0x80, 0xfa, 0x20, //0x000001bd cmpb $32, %dl + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x000001c0 je LBB0_7 + 0x80, 0xc2, 0xf7, //0x000001c6 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000001c9 cmpb $1, %dl + 0x0f, 0x86, 0x0e, 0x00, 0x00, 0x00, //0x000001cc jbe LBB0_7 + 0x48, 0x89, 0xc2, //0x000001d2 movq %rax, %rdx + 0xe9, 0x18, 0x01, 0x00, 0x00, //0x000001d5 jmp LBB0_28 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000001da .p2align 4, 0x90 + //0x000001e0 LBB0_7 + 0x48, 0x8d, 0x50, 0x01, //0x000001e0 leaq $1(%rax), %rdx + 0x48, 0x39, 0xca, //0x000001e4 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000001e7 jae LBB0_11 + 0x41, 0x8a, 0x5c, 0x15, 0x00, //0x000001ed movb (%r13,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x000001f2 cmpb $13, %bl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000001f5 je LBB0_11 + 0x80, 0xfb, 0x20, //0x000001fb cmpb $32, %bl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000001fe je LBB0_11 + 0x80, 0xc3, 0xf7, //0x00000204 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000207 cmpb $1, %bl + 0x0f, 0x87, 0xe2, 0x00, 0x00, 0x00, //0x0000020a ja LBB0_28 + //0x00000210 .p2align 4, 0x90 + //0x00000210 LBB0_11 + 0x48, 0x8d, 0x50, 0x02, //0x00000210 leaq $2(%rax), %rdx + 0x48, 0x39, 0xca, //0x00000214 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000217 jae LBB0_15 + 0x41, 0x8a, 0x5c, 0x15, 0x00, //0x0000021d movb (%r13,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x00000222 cmpb $13, %bl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000225 je LBB0_15 + 0x80, 0xfb, 0x20, //0x0000022b cmpb $32, %bl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000022e je LBB0_15 + 0x80, 0xc3, 0xf7, //0x00000234 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000237 cmpb $1, %bl + 0x0f, 0x87, 0xb2, 0x00, 0x00, 0x00, //0x0000023a ja LBB0_28 + //0x00000240 .p2align 4, 0x90 + //0x00000240 LBB0_15 + 0x48, 0x8d, 0x50, 0x03, //0x00000240 leaq $3(%rax), %rdx + 0x48, 0x39, 0xca, //0x00000244 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000247 jae LBB0_19 + 0x41, 0x8a, 0x5c, 0x15, 0x00, //0x0000024d movb (%r13,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x00000252 cmpb $13, %bl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000255 je LBB0_19 + 0x80, 0xfb, 0x20, //0x0000025b cmpb $32, %bl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000025e je LBB0_19 + 0x80, 0xc3, 0xf7, //0x00000264 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000267 cmpb $1, %bl + 0x0f, 0x87, 0x82, 0x00, 0x00, 0x00, //0x0000026a ja LBB0_28 + //0x00000270 .p2align 4, 0x90 + //0x00000270 LBB0_19 + 0x4c, 0x8d, 0x58, 0x04, //0x00000270 leaq $4(%rax), %r11 + 0x4c, 0x39, 0xd9, //0x00000274 cmpq %r11, %rcx + 0x0f, 0x86, 0x43, 0x00, 0x00, 0x00, //0x00000277 jbe LBB0_864 + 0x4c, 0x39, 0xd9, //0x0000027d cmpq %r11, %rcx + 0x0f, 0x84, 0x54, 0x00, 0x00, 0x00, //0x00000280 je LBB0_25 + 0x4a, 0x8d, 0x14, 0x29, //0x00000286 leaq (%rcx,%r13), %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000028a .p2align 4, 0x90 //0x00000290 LBB0_22 - 0x43, 0x0f, 0xbe, 0x74, 0x15, 0x00, //0x00000290 movsbl (%r13,%r10), %esi + 0x43, 0x0f, 0xbe, 0x74, 0x1d, 0x00, //0x00000290 movsbl (%r13,%r11), %esi 0x83, 0xfe, 0x20, //0x00000296 cmpl $32, %esi - 0x0f, 0x87, 0x4d, 0x00, 0x00, 0x00, //0x00000299 ja LBB0_27 - 0x48, 0x0f, 0xa3, 0xf7, //0x0000029f btq %rsi, %rdi - 0x0f, 0x83, 0x43, 0x00, 0x00, 0x00, //0x000002a3 jae LBB0_27 - 0x49, 0x83, 0xc2, 0x01, //0x000002a9 addq $1, %r10 - 0x4c, 0x39, 0xd1, //0x000002ad cmpq %r10, %rcx + 0x0f, 0x87, 0x47, 0x00, 0x00, 0x00, //0x00000299 ja LBB0_27 + 0x49, 0x0f, 0xa3, 0xf6, //0x0000029f btq %rsi, %r14 + 0x0f, 0x83, 0x3d, 0x00, 0x00, 0x00, //0x000002a3 jae LBB0_27 + 0x49, 0x83, 0xc3, 0x01, //0x000002a9 addq $1, %r11 + 0x4c, 0x39, 0xd9, //0x000002ad cmpq %r11, %rcx 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x000002b0 jne LBB0_22 - 0xe9, 0x2b, 0x00, 0x00, 0x00, //0x000002b6 jmp LBB0_26 + 0xe9, 0x25, 0x00, 0x00, 0x00, //0x000002b6 jmp LBB0_26 0x90, 0x90, 0x90, 0x90, 0x90, //0x000002bb .p2align 4, 0x90 - //0x000002c0 LBB0_860 - 0x4d, 0x89, 0x10, //0x000002c0 movq %r10, (%r8) + //0x000002c0 LBB0_864 + 0x4d, 0x89, 0x18, //0x000002c0 movq %r11, (%r8) 0x31, 0xc9, //0x000002c3 xorl %ecx, %ecx - 0x49, 0x8b, 0x03, //0x000002c5 movq (%r11), %rax - 0x48, 0x85, 0xc0, //0x000002c8 testq %rax, %rax - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000002cb movabsq $4294977024, %r9 - 0x0f, 0x85, 0x65, 0x00, 0x00, 0x00, //0x000002d5 jne LBB0_30 - 0xe9, 0x23, 0x43, 0x00, 0x00, //0x000002db jmp LBB0_861 - //0x000002e0 LBB0_25 - 0x4d, 0x01, 0xea, //0x000002e0 addq %r13, %r10 - 0x4c, 0x89, 0xd2, //0x000002e3 movq %r10, %rdx - //0x000002e6 LBB0_26 - 0x4c, 0x29, 0xea, //0x000002e6 subq %r13, %rdx - 0x49, 0x89, 0xd2, //0x000002e9 movq %rdx, %r10 - //0x000002ec LBB0_27 - 0x4c, 0x89, 0xd2, //0x000002ec movq %r10, %rdx - 0x49, 0x39, 0xca, //0x000002ef cmpq %rcx, %r10 - 0x0f, 0x83, 0x27, 0x00, 0x00, 0x00, //0x000002f2 jae LBB0_29 - //0x000002f8 LBB0_28 - 0x4c, 0x8d, 0x52, 0x01, //0x000002f8 leaq $1(%rdx), %r10 - 0x4d, 0x89, 0x10, //0x000002fc movq %r10, (%r8) - 0x41, 0x8a, 0x4c, 0x15, 0x00, //0x000002ff movb (%r13,%rdx), %cl - 0x49, 0x8b, 0x03, //0x00000304 movq (%r11), %rax - 0x48, 0x85, 0xc0, //0x00000307 testq %rax, %rax - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000030a movabsq $4294977024, %r9 - 0x0f, 0x85, 0x26, 0x00, 0x00, 0x00, //0x00000314 jne LBB0_30 - 0xe9, 0xe4, 0x42, 0x00, 0x00, //0x0000031a jmp LBB0_861 - //0x0000031f LBB0_29 - 0x31, 0xc9, //0x0000031f xorl %ecx, %ecx - 0x49, 0x89, 0xc2, //0x00000321 movq %rax, %r10 - 0x49, 0x8b, 0x03, //0x00000324 movq (%r11), %rax - 0x48, 0x85, 0xc0, //0x00000327 testq %rax, %rax - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000032a movabsq $4294977024, %r9 - 0x0f, 0x84, 0xc9, 0x42, 0x00, 0x00, //0x00000334 je LBB0_861 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000033a .p2align 4, 0x90 - //0x00000340 LBB0_30 - 0x8a, 0x40, 0x17, //0x00000340 movb $23(%rax), %al - 0x24, 0x1f, //0x00000343 andb $31, %al - 0x3c, 0x02, //0x00000345 cmpb $2, %al - 0x0f, 0x84, 0x93, 0x1a, 0x00, 0x00, //0x00000347 je LBB0_342 - 0x3c, 0x18, //0x0000034d cmpb $24, %al - 0x0f, 0x85, 0xae, 0x42, 0x00, 0x00, //0x0000034f jne LBB0_861 - 0x80, 0xf9, 0x7b, //0x00000355 cmpb $123, %cl - 0x4c, 0x89, 0x5d, 0xa8, //0x00000358 movq %r11, $-88(%rbp) - 0x0f, 0x85, 0xe1, 0x42, 0x00, 0x00, //0x0000035c jne LBB0_868 - //0x00000362 LBB0_33 - 0x49, 0x8b, 0x0f, //0x00000362 movq (%r15), %rcx - 0x49, 0x39, 0xca, //0x00000365 cmpq %rcx, %r10 - 0x0f, 0x83, 0x32, 0x00, 0x00, 0x00, //0x00000368 jae LBB0_38 - 0x43, 0x8a, 0x44, 0x15, 0x00, //0x0000036e movb (%r13,%r10), %al - 0x3c, 0x0d, //0x00000373 cmpb $13, %al - 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00000375 je LBB0_38 - 0x3c, 0x20, //0x0000037b cmpb $32, %al - 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x0000037d je LBB0_38 - 0x04, 0xf7, //0x00000383 addb $-9, %al - 0x3c, 0x01, //0x00000385 cmpb $1, %al - 0x0f, 0x86, 0x13, 0x00, 0x00, 0x00, //0x00000387 jbe LBB0_38 - 0x4c, 0x89, 0xd0, //0x0000038d movq %r10, %rax - 0xe9, 0x00, 0x01, 0x00, 0x00, //0x00000390 jmp LBB0_59 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000395 .p2align 4, 0x90 - //0x000003a0 LBB0_38 - 0x49, 0x8d, 0x42, 0x01, //0x000003a0 leaq $1(%r10), %rax - 0x48, 0x39, 0xc8, //0x000003a4 cmpq %rcx, %rax - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000003a7 jae LBB0_42 - 0x41, 0x8a, 0x54, 0x05, 0x00, //0x000003ad movb (%r13,%rax), %dl - 0x80, 0xfa, 0x0d, //0x000003b2 cmpb $13, %dl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000003b5 je LBB0_42 - 0x80, 0xfa, 0x20, //0x000003bb cmpb $32, %dl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000003be je LBB0_42 - 0x80, 0xc2, 0xf7, //0x000003c4 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x000003c7 cmpb $1, %dl - 0x0f, 0x87, 0xc5, 0x00, 0x00, 0x00, //0x000003ca ja LBB0_59 - //0x000003d0 .p2align 4, 0x90 - //0x000003d0 LBB0_42 - 0x49, 0x8d, 0x42, 0x02, //0x000003d0 leaq $2(%r10), %rax - 0x48, 0x39, 0xc8, //0x000003d4 cmpq %rcx, %rax - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000003d7 jae LBB0_46 - 0x41, 0x8a, 0x54, 0x05, 0x00, //0x000003dd movb (%r13,%rax), %dl - 0x80, 0xfa, 0x0d, //0x000003e2 cmpb $13, %dl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000003e5 je LBB0_46 - 0x80, 0xfa, 0x20, //0x000003eb cmpb $32, %dl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000003ee je LBB0_46 - 0x80, 0xc2, 0xf7, //0x000003f4 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x000003f7 cmpb $1, %dl - 0x0f, 0x87, 0x95, 0x00, 0x00, 0x00, //0x000003fa ja LBB0_59 - //0x00000400 .p2align 4, 0x90 - //0x00000400 LBB0_46 - 0x49, 0x8d, 0x42, 0x03, //0x00000400 leaq $3(%r10), %rax - 0x48, 0x39, 0xc8, //0x00000404 cmpq %rcx, %rax - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000407 jae LBB0_50 - 0x41, 0x8a, 0x54, 0x05, 0x00, //0x0000040d movb (%r13,%rax), %dl - 0x80, 0xfa, 0x0d, //0x00000412 cmpb $13, %dl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000415 je LBB0_50 - 0x80, 0xfa, 0x20, //0x0000041b cmpb $32, %dl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000041e je LBB0_50 - 0x80, 0xc2, 0xf7, //0x00000424 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x00000427 cmpb $1, %dl - 0x0f, 0x87, 0x65, 0x00, 0x00, 0x00, //0x0000042a ja LBB0_59 - //0x00000430 .p2align 4, 0x90 - //0x00000430 LBB0_50 - 0x49, 0x8d, 0x42, 0x04, //0x00000430 leaq $4(%r10), %rax - 0x48, 0x39, 0xc1, //0x00000434 cmpq %rax, %rcx - 0x0f, 0x86, 0xfb, 0x41, 0x00, 0x00, //0x00000437 jbe LBB0_865 - 0x48, 0x39, 0xc1, //0x0000043d cmpq %rax, %rcx - 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00000440 je LBB0_56 - 0x4a, 0x8d, 0x14, 0x29, //0x00000446 leaq (%rcx,%r13), %rdx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000044a .p2align 4, 0x90 - //0x00000450 LBB0_53 - 0x41, 0x0f, 0xbe, 0x74, 0x05, 0x00, //0x00000450 movsbl (%r13,%rax), %esi - 0x83, 0xfe, 0x20, //0x00000456 cmpl $32, %esi - 0x0f, 0x87, 0x2d, 0x00, 0x00, 0x00, //0x00000459 ja LBB0_58 - 0x49, 0x0f, 0xa3, 0xf1, //0x0000045f btq %rsi, %r9 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000463 jae LBB0_58 - 0x48, 0x83, 0xc0, 0x01, //0x00000469 addq $1, %rax - 0x48, 0x39, 0xc1, //0x0000046d cmpq %rax, %rcx - 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x00000470 jne LBB0_53 - 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00000476 jmp LBB0_57 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000047b .p2align 4, 0x90 - //0x00000480 LBB0_56 - 0x4c, 0x01, 0xe8, //0x00000480 addq %r13, %rax - 0x48, 0x89, 0xc2, //0x00000483 movq %rax, %rdx - //0x00000486 LBB0_57 - 0x4c, 0x29, 0xea, //0x00000486 subq %r13, %rdx - 0x48, 0x89, 0xd0, //0x00000489 movq %rdx, %rax - //0x0000048c LBB0_58 - 0x48, 0x39, 0xc8, //0x0000048c cmpq %rcx, %rax - 0x0f, 0x83, 0xae, 0x41, 0x00, 0x00, //0x0000048f jae LBB0_868 - //0x00000495 LBB0_59 - 0x4c, 0x8d, 0x50, 0x01, //0x00000495 leaq $1(%rax), %r10 - 0x4d, 0x89, 0x10, //0x00000499 movq %r10, (%r8) - 0x41, 0x8a, 0x54, 0x05, 0x00, //0x0000049c movb (%r13,%rax), %dl - 0x80, 0xfa, 0x22, //0x000004a1 cmpb $34, %dl - 0x0f, 0x85, 0x2d, 0x2b, 0x00, 0x00, //0x000004a4 jne LBB0_550 - 0x49, 0x8b, 0x0f, //0x000004aa movq (%r15), %rcx - 0x49, 0x89, 0xc8, //0x000004ad movq %rcx, %r8 - 0x4d, 0x29, 0xd0, //0x000004b0 subq %r10, %r8 - 0x0f, 0x84, 0xe8, 0x4d, 0x00, 0x00, //0x000004b3 je LBB0_966 - 0x48, 0x89, 0x8d, 0x48, 0xff, 0xff, 0xff, //0x000004b9 movq %rcx, $-184(%rbp) - 0x49, 0x8b, 0x73, 0x08, //0x000004c0 movq $8(%r11), %rsi - 0x4c, 0x8b, 0x36, //0x000004c4 movq (%rsi), %r14 - 0x48, 0x8b, 0x4e, 0x08, //0x000004c7 movq $8(%rsi), %rcx - 0x48, 0x89, 0x4d, 0xd0, //0x000004cb movq %rcx, $-48(%rbp) - 0x4c, 0x89, 0x95, 0x40, 0xff, 0xff, 0xff, //0x000004cf movq %r10, $-192(%rbp) - 0x4b, 0x8d, 0x1c, 0x2a, //0x000004d6 leaq (%r10,%r13), %rbx - 0x49, 0x83, 0xf8, 0x40, //0x000004da cmpq $64, %r8 - 0x48, 0x89, 0x5d, 0x90, //0x000004de movq %rbx, $-112(%rbp) - 0x0f, 0x82, 0xa5, 0x12, 0x00, 0x00, //0x000004e2 jb LBB0_266 - 0x4c, 0x89, 0x75, 0xa0, //0x000004e8 movq %r14, $-96(%rbp) - 0x49, 0xc7, 0xc6, 0xfe, 0xff, 0xff, 0xff, //0x000004ec movq $-2, %r14 - 0x49, 0x29, 0xc6, //0x000004f3 subq %rax, %r14 - 0x4c, 0x8d, 0x50, 0x01, //0x000004f6 leaq $1(%rax), %r10 - 0x48, 0xc7, 0x45, 0xb8, 0xff, 0xff, 0xff, 0xff, //0x000004fa movq $-1, $-72(%rbp) - 0x45, 0x31, 0xc9, //0x00000502 xorl %r9d, %r9d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000505 .p2align 4, 0x90 - //0x00000510 LBB0_63 - 0xf3, 0x43, 0x0f, 0x6f, 0x5c, 0x15, 0x00, //0x00000510 movdqu (%r13,%r10), %xmm3 - 0xf3, 0x43, 0x0f, 0x6f, 0x6c, 0x15, 0x10, //0x00000517 movdqu $16(%r13,%r10), %xmm5 - 0xf3, 0x43, 0x0f, 0x6f, 0x74, 0x15, 0x20, //0x0000051e movdqu $32(%r13,%r10), %xmm6 - 0xf3, 0x43, 0x0f, 0x6f, 0x7c, 0x15, 0x30, //0x00000525 movdqu $48(%r13,%r10), %xmm7 - 0x66, 0x0f, 0x6f, 0xd3, //0x0000052c movdqa %xmm3, %xmm2 - 0x66, 0x0f, 0x74, 0xd0, //0x00000530 pcmpeqb %xmm0, %xmm2 - 0x66, 0x0f, 0xd7, 0xfa, //0x00000534 pmovmskb %xmm2, %edi - 0x66, 0x0f, 0x6f, 0xd5, //0x00000538 movdqa %xmm5, %xmm2 - 0x66, 0x0f, 0x74, 0xd0, //0x0000053c pcmpeqb %xmm0, %xmm2 - 0x66, 0x44, 0x0f, 0xd7, 0xfa, //0x00000540 pmovmskb %xmm2, %r15d - 0x66, 0x0f, 0x6f, 0xd6, //0x00000545 movdqa %xmm6, %xmm2 - 0x66, 0x0f, 0x74, 0xd0, //0x00000549 pcmpeqb %xmm0, %xmm2 - 0x66, 0x44, 0x0f, 0xd7, 0xe2, //0x0000054d pmovmskb %xmm2, %r12d - 0x66, 0x0f, 0x6f, 0xd7, //0x00000552 movdqa %xmm7, %xmm2 - 0x66, 0x0f, 0x74, 0xd0, //0x00000556 pcmpeqb %xmm0, %xmm2 - 0x66, 0x44, 0x0f, 0xd7, 0xda, //0x0000055a pmovmskb %xmm2, %r11d - 0x66, 0x0f, 0x74, 0xd9, //0x0000055f pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00000563 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x74, 0xe9, //0x00000567 pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xdd, //0x0000056b pmovmskb %xmm5, %ebx - 0x66, 0x0f, 0x74, 0xf1, //0x0000056f pcmpeqb %xmm1, %xmm6 - 0x66, 0x0f, 0xd7, 0xd6, //0x00000573 pmovmskb %xmm6, %edx - 0x66, 0x0f, 0x74, 0xf9, //0x00000577 pcmpeqb %xmm1, %xmm7 - 0x66, 0x0f, 0xd7, 0xcf, //0x0000057b pmovmskb %xmm7, %ecx - 0x49, 0xc1, 0xe3, 0x30, //0x0000057f shlq $48, %r11 - 0x49, 0xc1, 0xe4, 0x20, //0x00000583 shlq $32, %r12 - 0x4d, 0x09, 0xdc, //0x00000587 orq %r11, %r12 - 0x49, 0xc1, 0xe7, 0x10, //0x0000058a shlq $16, %r15 - 0x4d, 0x09, 0xe7, //0x0000058e orq %r12, %r15 - 0x4c, 0x09, 0xff, //0x00000591 orq %r15, %rdi - 0x48, 0xc1, 0xe1, 0x30, //0x00000594 shlq $48, %rcx - 0x48, 0xc1, 0xe2, 0x20, //0x00000598 shlq $32, %rdx - 0x48, 0x09, 0xca, //0x0000059c orq %rcx, %rdx - 0x48, 0xc1, 0xe3, 0x10, //0x0000059f shlq $16, %rbx - 0x48, 0x09, 0xd3, //0x000005a3 orq %rdx, %rbx - 0x48, 0x09, 0xde, //0x000005a6 orq %rbx, %rsi - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000005a9 jne LBB0_72 - 0x4d, 0x85, 0xc9, //0x000005af testq %r9, %r9 - 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x000005b2 jne LBB0_74 - 0x45, 0x31, 0xc9, //0x000005b8 xorl %r9d, %r9d - 0x48, 0x85, 0xff, //0x000005bb testq %rdi, %rdi - 0x0f, 0x85, 0x8c, 0x00, 0x00, 0x00, //0x000005be jne LBB0_75 - //0x000005c4 LBB0_66 - 0x49, 0x83, 0xc0, 0xc0, //0x000005c4 addq $-64, %r8 - 0x49, 0x83, 0xc6, 0xc0, //0x000005c8 addq $-64, %r14 - 0x49, 0x83, 0xc2, 0x40, //0x000005cc addq $64, %r10 - 0x49, 0x83, 0xf8, 0x3f, //0x000005d0 cmpq $63, %r8 - 0x0f, 0x87, 0x36, 0xff, 0xff, 0xff, //0x000005d4 ja LBB0_63 - 0xe9, 0xae, 0x10, 0x00, 0x00, //0x000005da jmp LBB0_67 - //0x000005df LBB0_72 - 0x48, 0x83, 0x7d, 0xb8, 0xff, //0x000005df cmpq $-1, $-72(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000005e4 jne LBB0_74 - 0x48, 0x0f, 0xbc, 0xce, //0x000005ea bsfq %rsi, %rcx - 0x4c, 0x01, 0xd1, //0x000005ee addq %r10, %rcx - 0x48, 0x89, 0x4d, 0xb8, //0x000005f1 movq %rcx, $-72(%rbp) - //0x000005f5 LBB0_74 - 0x4c, 0x89, 0xc9, //0x000005f5 movq %r9, %rcx - 0x48, 0xf7, 0xd1, //0x000005f8 notq %rcx - 0x48, 0x21, 0xf1, //0x000005fb andq %rsi, %rcx - 0x48, 0x8d, 0x1c, 0x09, //0x000005fe leaq (%rcx,%rcx), %rbx - 0x4c, 0x09, 0xcb, //0x00000602 orq %r9, %rbx - 0x48, 0x89, 0xda, //0x00000605 movq %rbx, %rdx - 0x48, 0xf7, 0xd2, //0x00000608 notq %rdx - 0x48, 0x21, 0xf2, //0x0000060b andq %rsi, %rdx - 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000060e movabsq $-6148914691236517206, %rsi - 0x48, 0x21, 0xf2, //0x00000618 andq %rsi, %rdx - 0x45, 0x31, 0xc9, //0x0000061b xorl %r9d, %r9d - 0x48, 0x01, 0xca, //0x0000061e addq %rcx, %rdx - 0x41, 0x0f, 0x92, 0xc1, //0x00000621 setb %r9b - 0x48, 0x01, 0xd2, //0x00000625 addq %rdx, %rdx - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000628 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xca, //0x00000632 xorq %rcx, %rdx - 0x48, 0x21, 0xda, //0x00000635 andq %rbx, %rdx - 0x48, 0xf7, 0xd2, //0x00000638 notq %rdx - 0x48, 0x21, 0xd7, //0x0000063b andq %rdx, %rdi - 0x48, 0x85, 0xff, //0x0000063e testq %rdi, %rdi - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000641 je LBB0_66 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000647 .p2align 4, 0x90 - //0x00000650 LBB0_75 - 0x4c, 0x0f, 0xbc, 0xd7, //0x00000650 bsfq %rdi, %r10 - 0x4d, 0x29, 0xf2, //0x00000654 subq %r14, %r10 - 0x4c, 0x8b, 0x45, 0xc8, //0x00000657 movq $-56(%rbp), %r8 - 0x4c, 0x8b, 0x7d, 0xc0, //0x0000065b movq $-64(%rbp), %r15 - 0x4c, 0x8b, 0x65, 0xb0, //0x0000065f movq $-80(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x00000663 movq $-88(%rbp), %r11 - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000667 movabsq $4294977024, %r9 - 0x4c, 0x8b, 0x75, 0xa0, //0x00000671 movq $-96(%rbp), %r14 - 0x48, 0x8b, 0x5d, 0x90, //0x00000675 movq $-112(%rbp), %rbx - 0x48, 0x8b, 0x4d, 0xb8, //0x00000679 movq $-72(%rbp), %rcx - 0x4d, 0x85, 0xd2, //0x0000067d testq %r10, %r10 - 0x0f, 0x88, 0x26, 0x4c, 0x00, 0x00, //0x00000680 js LBB0_968 - //0x00000686 LBB0_78 - 0x4d, 0x89, 0x10, //0x00000686 movq %r10, (%r8) - 0x48, 0x83, 0xf9, 0xff, //0x00000689 cmpq $-1, %rcx - 0x0f, 0x84, 0x09, 0x00, 0x00, 0x00, //0x0000068d je LBB0_80 - 0x4c, 0x39, 0xd1, //0x00000693 cmpq %r10, %rcx - 0x0f, 0x8e, 0x0e, 0x11, 0x00, 0x00, //0x00000696 jle LBB0_267 - //0x0000069c LBB0_80 - 0x4c, 0x89, 0xd2, //0x0000069c movq %r10, %rdx - 0x48, 0x29, 0xc2, //0x0000069f subq %rax, %rdx - 0x48, 0x83, 0xc2, 0xfe, //0x000006a2 addq $-2, %rdx - 0xb9, 0x01, 0x00, 0x00, 0x00, //0x000006a6 movl $1, %ecx - 0x48, 0x89, 0xd6, //0x000006ab movq %rdx, %rsi - 0x48, 0x8b, 0x7d, 0xd0, //0x000006ae movq $-48(%rbp), %rdi - 0x48, 0x09, 0xfe, //0x000006b2 orq %rdi, %rsi - 0x0f, 0x84, 0x46, 0x00, 0x00, 0x00, //0x000006b5 je LBB0_86 - 0x48, 0x39, 0xfa, //0x000006bb cmpq %rdi, %rdx - 0x0f, 0x85, 0x3b, 0x00, 0x00, 0x00, //0x000006be jne LBB0_85 - 0x31, 0xf6, //0x000006c4 xorl %esi, %esi - 0x48, 0x89, 0xfa, //0x000006c6 movq %rdi, %rdx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000006c9 .p2align 4, 0x90 - //0x000006d0 LBB0_83 - 0x48, 0x83, 0xfa, 0x10, //0x000006d0 cmpq $16, %rdx - 0x0f, 0x82, 0xa1, 0x02, 0x00, 0x00, //0x000006d4 jb LBB0_138 - 0xf3, 0x0f, 0x6f, 0x14, 0x33, //0x000006da movdqu (%rbx,%rsi), %xmm2 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x36, //0x000006df movdqu (%r14,%rsi), %xmm3 - 0x66, 0x0f, 0x74, 0xda, //0x000006e5 pcmpeqb %xmm2, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x000006e9 pmovmskb %xmm3, %edi - 0x48, 0x83, 0xc2, 0xf0, //0x000006ed addq $-16, %rdx - 0x48, 0x83, 0xc6, 0x10, //0x000006f1 addq $16, %rsi - 0x66, 0x83, 0xff, 0xff, //0x000006f5 cmpw $-1, %di - 0x0f, 0x84, 0xd1, 0xff, 0xff, 0xff, //0x000006f9 je LBB0_83 - //0x000006ff LBB0_85 - 0x31, 0xc9, //0x000006ff xorl %ecx, %ecx - //0x00000701 LBB0_86 - 0x49, 0x8b, 0x07, //0x00000701 movq (%r15), %rax - 0x49, 0x39, 0xc2, //0x00000704 cmpq %rax, %r10 - 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x00000707 jae LBB0_91 - 0x43, 0x8a, 0x54, 0x15, 0x00, //0x0000070d movb (%r13,%r10), %dl - 0x80, 0xfa, 0x0d, //0x00000712 cmpb $13, %dl - 0x0f, 0x84, 0x25, 0x00, 0x00, 0x00, //0x00000715 je LBB0_91 - 0x80, 0xfa, 0x20, //0x0000071b cmpb $32, %dl - 0x0f, 0x84, 0x1c, 0x00, 0x00, 0x00, //0x0000071e je LBB0_91 - 0x80, 0xc2, 0xf7, //0x00000724 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x00000727 cmpb $1, %dl - 0x0f, 0x86, 0x10, 0x00, 0x00, 0x00, //0x0000072a jbe LBB0_91 - 0x4c, 0x89, 0xd2, //0x00000730 movq %r10, %rdx - 0xe9, 0xfd, 0x00, 0x00, 0x00, //0x00000733 jmp LBB0_112 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000738 .p2align 4, 0x90 - //0x00000740 LBB0_91 - 0x49, 0x8d, 0x52, 0x01, //0x00000740 leaq $1(%r10), %rdx - 0x48, 0x39, 0xc2, //0x00000744 cmpq %rax, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000747 jae LBB0_95 - 0x41, 0x8a, 0x5c, 0x15, 0x00, //0x0000074d movb (%r13,%rdx), %bl - 0x80, 0xfb, 0x0d, //0x00000752 cmpb $13, %bl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000755 je LBB0_95 - 0x80, 0xfb, 0x20, //0x0000075b cmpb $32, %bl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000075e je LBB0_95 - 0x80, 0xc3, 0xf7, //0x00000764 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000767 cmpb $1, %bl - 0x0f, 0x87, 0xc5, 0x00, 0x00, 0x00, //0x0000076a ja LBB0_112 - //0x00000770 .p2align 4, 0x90 - //0x00000770 LBB0_95 - 0x49, 0x8d, 0x52, 0x02, //0x00000770 leaq $2(%r10), %rdx - 0x48, 0x39, 0xc2, //0x00000774 cmpq %rax, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000777 jae LBB0_99 - 0x41, 0x8a, 0x5c, 0x15, 0x00, //0x0000077d movb (%r13,%rdx), %bl - 0x80, 0xfb, 0x0d, //0x00000782 cmpb $13, %bl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000785 je LBB0_99 - 0x80, 0xfb, 0x20, //0x0000078b cmpb $32, %bl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000078e je LBB0_99 - 0x80, 0xc3, 0xf7, //0x00000794 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000797 cmpb $1, %bl - 0x0f, 0x87, 0x95, 0x00, 0x00, 0x00, //0x0000079a ja LBB0_112 - //0x000007a0 .p2align 4, 0x90 - //0x000007a0 LBB0_99 - 0x49, 0x8d, 0x52, 0x03, //0x000007a0 leaq $3(%r10), %rdx - 0x48, 0x39, 0xc2, //0x000007a4 cmpq %rax, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000007a7 jae LBB0_103 - 0x41, 0x8a, 0x5c, 0x15, 0x00, //0x000007ad movb (%r13,%rdx), %bl - 0x80, 0xfb, 0x0d, //0x000007b2 cmpb $13, %bl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000007b5 je LBB0_103 - 0x80, 0xfb, 0x20, //0x000007bb cmpb $32, %bl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000007be je LBB0_103 - 0x80, 0xc3, 0xf7, //0x000007c4 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x000007c7 cmpb $1, %bl - 0x0f, 0x87, 0x65, 0x00, 0x00, 0x00, //0x000007ca ja LBB0_112 - //0x000007d0 .p2align 4, 0x90 - //0x000007d0 LBB0_103 - 0x49, 0x8d, 0x52, 0x04, //0x000007d0 leaq $4(%r10), %rdx - 0x48, 0x39, 0xd0, //0x000007d4 cmpq %rdx, %rax - 0x0f, 0x86, 0x08, 0x28, 0x00, 0x00, //0x000007d7 jbe LBB0_866 - 0x48, 0x39, 0xd0, //0x000007dd cmpq %rdx, %rax - 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x000007e0 je LBB0_109 - 0x4a, 0x8d, 0x34, 0x28, //0x000007e6 leaq (%rax,%r13), %rsi - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000007ea .p2align 4, 0x90 - //0x000007f0 LBB0_106 - 0x41, 0x0f, 0xbe, 0x7c, 0x15, 0x00, //0x000007f0 movsbl (%r13,%rdx), %edi - 0x83, 0xff, 0x20, //0x000007f6 cmpl $32, %edi - 0x0f, 0x87, 0x2d, 0x00, 0x00, 0x00, //0x000007f9 ja LBB0_111 - 0x49, 0x0f, 0xa3, 0xf9, //0x000007ff btq %rdi, %r9 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000803 jae LBB0_111 - 0x48, 0x83, 0xc2, 0x01, //0x00000809 addq $1, %rdx - 0x48, 0x39, 0xd0, //0x0000080d cmpq %rdx, %rax - 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x00000810 jne LBB0_106 - 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00000816 jmp LBB0_110 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000081b .p2align 4, 0x90 - //0x00000820 LBB0_109 - 0x4c, 0x01, 0xea, //0x00000820 addq %r13, %rdx - 0x48, 0x89, 0xd6, //0x00000823 movq %rdx, %rsi - //0x00000826 LBB0_110 - 0x4c, 0x29, 0xee, //0x00000826 subq %r13, %rsi - 0x48, 0x89, 0xf2, //0x00000829 movq %rsi, %rdx - //0x0000082c LBB0_111 - 0x48, 0x39, 0xc2, //0x0000082c cmpq %rax, %rdx - 0x0f, 0x83, 0x0e, 0x3e, 0x00, 0x00, //0x0000082f jae LBB0_868 - //0x00000835 LBB0_112 - 0x4c, 0x8d, 0x52, 0x01, //0x00000835 leaq $1(%rdx), %r10 - 0x4d, 0x89, 0x10, //0x00000839 movq %r10, (%r8) - 0x41, 0x80, 0x7c, 0x15, 0x00, 0x3a, //0x0000083c cmpb $58, (%r13,%rdx) - 0x0f, 0x85, 0xfb, 0x3d, 0x00, 0x00, //0x00000842 jne LBB0_868 - 0x48, 0x85, 0xc9, //0x00000848 testq %rcx, %rcx - 0x0f, 0x85, 0x8f, 0x25, 0x00, 0x00, //0x0000084b jne LBB0_458 - 0x49, 0x8b, 0x0f, //0x00000851 movq (%r15), %rcx - 0x49, 0x39, 0xca, //0x00000854 cmpq %rcx, %r10 - 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x00000857 jae LBB0_119 - 0x43, 0x8a, 0x44, 0x15, 0x00, //0x0000085d movb (%r13,%r10), %al - 0x3c, 0x0d, //0x00000862 cmpb $13, %al - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00000864 je LBB0_119 - 0x3c, 0x20, //0x0000086a cmpb $32, %al - 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x0000086c je LBB0_119 - 0x04, 0xf7, //0x00000872 addb $-9, %al - 0x3c, 0x01, //0x00000874 cmpb $1, %al - 0x0f, 0x86, 0x14, 0x00, 0x00, 0x00, //0x00000876 jbe LBB0_119 - 0x4c, 0x89, 0xd0, //0x0000087c movq %r10, %rax - 0xe9, 0x95, 0x01, 0x00, 0x00, //0x0000087f jmp LBB0_148 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000884 .p2align 4, 0x90 - //0x00000890 LBB0_119 - 0x48, 0x8d, 0x42, 0x02, //0x00000890 leaq $2(%rdx), %rax - 0x48, 0x39, 0xc8, //0x00000894 cmpq %rcx, %rax - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000897 jae LBB0_123 - 0x41, 0x8a, 0x5c, 0x05, 0x00, //0x0000089d movb (%r13,%rax), %bl - 0x80, 0xfb, 0x0d, //0x000008a2 cmpb $13, %bl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000008a5 je LBB0_123 - 0x80, 0xfb, 0x20, //0x000008ab cmpb $32, %bl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000008ae je LBB0_123 - 0x80, 0xc3, 0xf7, //0x000008b4 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x000008b7 cmpb $1, %bl - 0x0f, 0x87, 0x59, 0x01, 0x00, 0x00, //0x000008ba ja LBB0_148 - //0x000008c0 .p2align 4, 0x90 - //0x000008c0 LBB0_123 - 0x48, 0x8d, 0x42, 0x03, //0x000008c0 leaq $3(%rdx), %rax - 0x48, 0x39, 0xc8, //0x000008c4 cmpq %rcx, %rax - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000008c7 jae LBB0_127 - 0x41, 0x8a, 0x5c, 0x05, 0x00, //0x000008cd movb (%r13,%rax), %bl - 0x80, 0xfb, 0x0d, //0x000008d2 cmpb $13, %bl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000008d5 je LBB0_127 - 0x80, 0xfb, 0x20, //0x000008db cmpb $32, %bl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000008de je LBB0_127 - 0x80, 0xc3, 0xf7, //0x000008e4 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x000008e7 cmpb $1, %bl - 0x0f, 0x87, 0x29, 0x01, 0x00, 0x00, //0x000008ea ja LBB0_148 - //0x000008f0 .p2align 4, 0x90 - //0x000008f0 LBB0_127 - 0x48, 0x8d, 0x42, 0x04, //0x000008f0 leaq $4(%rdx), %rax - 0x48, 0x39, 0xc8, //0x000008f4 cmpq %rcx, %rax - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000008f7 jae LBB0_131 - 0x41, 0x8a, 0x5c, 0x05, 0x00, //0x000008fd movb (%r13,%rax), %bl - 0x80, 0xfb, 0x0d, //0x00000902 cmpb $13, %bl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000905 je LBB0_131 - 0x80, 0xfb, 0x20, //0x0000090b cmpb $32, %bl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000090e je LBB0_131 - 0x80, 0xc3, 0xf7, //0x00000914 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000917 cmpb $1, %bl - 0x0f, 0x87, 0xf9, 0x00, 0x00, 0x00, //0x0000091a ja LBB0_148 - //0x00000920 .p2align 4, 0x90 - //0x00000920 LBB0_131 - 0x48, 0x83, 0xc2, 0x05, //0x00000920 addq $5, %rdx - 0x48, 0x39, 0xd1, //0x00000924 cmpq %rdx, %rcx - 0x0f, 0x86, 0x43, 0x00, 0x00, 0x00, //0x00000927 jbe LBB0_137 - 0x48, 0x39, 0xd1, //0x0000092d cmpq %rdx, %rcx - 0x0f, 0x84, 0xcb, 0x00, 0x00, 0x00, //0x00000930 je LBB0_145 - 0x4a, 0x8d, 0x04, 0x29, //0x00000936 leaq (%rcx,%r13), %rax - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000093a .p2align 4, 0x90 - //0x00000940 LBB0_134 - 0x41, 0x0f, 0xbe, 0x74, 0x15, 0x00, //0x00000940 movsbl (%r13,%rdx), %esi - 0x83, 0xfe, 0x20, //0x00000946 cmpl $32, %esi - 0x0f, 0x87, 0xbe, 0x00, 0x00, 0x00, //0x00000949 ja LBB0_147 - 0x49, 0x0f, 0xa3, 0xf1, //0x0000094f btq %rsi, %r9 - 0x0f, 0x83, 0xb4, 0x00, 0x00, 0x00, //0x00000953 jae LBB0_147 - 0x48, 0x83, 0xc2, 0x01, //0x00000959 addq $1, %rdx - 0x48, 0x39, 0xd1, //0x0000095d cmpq %rdx, %rcx - 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x00000960 jne LBB0_134 - 0xe9, 0x9c, 0x00, 0x00, 0x00, //0x00000966 jmp LBB0_146 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000096b .p2align 4, 0x90 - //0x00000970 LBB0_137 - 0x49, 0x89, 0x10, //0x00000970 movq %rdx, (%r8) - 0x49, 0x89, 0xd2, //0x00000973 movq %rdx, %r10 - 0xe9, 0xa3, 0x01, 0x00, 0x00, //0x00000976 jmp LBB0_164 - //0x0000097b LBB0_138 - 0x44, 0x01, 0xe8, //0x0000097b addl %r13d, %eax - 0x01, 0xf0, //0x0000097e addl %esi, %eax - 0x83, 0xc0, 0x01, //0x00000980 addl $1, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00000983 andl $4095, %eax - 0x3d, 0xf0, 0x0f, 0x00, 0x00, //0x00000988 cmpl $4080, %eax - 0x0f, 0x87, 0x51, 0x00, 0x00, 0x00, //0x0000098d ja LBB0_143 - 0x41, 0x8d, 0x04, 0x36, //0x00000993 leal (%r14,%rsi), %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00000997 andl $4095, %eax - 0x3d, 0xf1, 0x0f, 0x00, 0x00, //0x0000099c cmpl $4081, %eax - 0x0f, 0x83, 0x3d, 0x00, 0x00, 0x00, //0x000009a1 jae LBB0_143 - 0xf3, 0x0f, 0x6f, 0x14, 0x33, //0x000009a7 movdqu (%rbx,%rsi), %xmm2 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x36, //0x000009ac movdqu (%r14,%rsi), %xmm3 - 0x66, 0x0f, 0x74, 0xda, //0x000009b2 pcmpeqb %xmm2, %xmm3 - 0x66, 0x0f, 0xd7, 0xc3, //0x000009b6 pmovmskb %xmm3, %eax - 0x66, 0x83, 0xf8, 0xff, //0x000009ba cmpw $-1, %ax - 0x0f, 0x84, 0x3d, 0xfd, 0xff, 0xff, //0x000009be je LBB0_86 - 0xf7, 0xd0, //0x000009c4 notl %eax - 0x66, 0x0f, 0xbc, 0xc0, //0x000009c6 bsfw %ax, %ax - 0x0f, 0xb7, 0xc0, //0x000009ca movzwl %ax, %eax - 0x31, 0xc9, //0x000009cd xorl %ecx, %ecx - 0x48, 0x39, 0xc2, //0x000009cf cmpq %rax, %rdx - 0x0f, 0x96, 0xc1, //0x000009d2 setbe %cl - 0xe9, 0x27, 0xfd, 0xff, 0xff, //0x000009d5 jmp LBB0_86 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000009da .p2align 4, 0x90 + 0x48, 0x8b, 0x45, 0xb0, //0x000002c5 movq $-80(%rbp), %rax + 0x48, 0x8b, 0x00, //0x000002c9 movq (%rax), %rax + 0x48, 0x85, 0xc0, //0x000002cc testq %rax, %rax + 0x0f, 0x85, 0x5b, 0x00, 0x00, 0x00, //0x000002cf jne LBB0_30 + 0xe9, 0x41, 0x44, 0x00, 0x00, //0x000002d5 jmp LBB0_865 + //0x000002da LBB0_25 + 0x4d, 0x01, 0xeb, //0x000002da addq %r13, %r11 + 0x4c, 0x89, 0xda, //0x000002dd movq %r11, %rdx + //0x000002e0 LBB0_26 + 0x4c, 0x29, 0xea, //0x000002e0 subq %r13, %rdx + 0x49, 0x89, 0xd3, //0x000002e3 movq %rdx, %r11 + //0x000002e6 LBB0_27 + 0x4c, 0x89, 0xda, //0x000002e6 movq %r11, %rdx + 0x49, 0x39, 0xcb, //0x000002e9 cmpq %rcx, %r11 + 0x0f, 0x83, 0x21, 0x00, 0x00, 0x00, //0x000002ec jae LBB0_29 + //0x000002f2 LBB0_28 + 0x4c, 0x8d, 0x5a, 0x01, //0x000002f2 leaq $1(%rdx), %r11 + 0x4d, 0x89, 0x18, //0x000002f6 movq %r11, (%r8) + 0x41, 0x8a, 0x4c, 0x15, 0x00, //0x000002f9 movb (%r13,%rdx), %cl + 0x48, 0x8b, 0x45, 0xb0, //0x000002fe movq $-80(%rbp), %rax + 0x48, 0x8b, 0x00, //0x00000302 movq (%rax), %rax + 0x48, 0x85, 0xc0, //0x00000305 testq %rax, %rax + 0x0f, 0x85, 0x22, 0x00, 0x00, 0x00, //0x00000308 jne LBB0_30 + 0xe9, 0x08, 0x44, 0x00, 0x00, //0x0000030e jmp LBB0_865 + //0x00000313 LBB0_29 + 0x31, 0xc9, //0x00000313 xorl %ecx, %ecx + 0x49, 0x89, 0xc3, //0x00000315 movq %rax, %r11 + 0x48, 0x8b, 0x45, 0xb0, //0x00000318 movq $-80(%rbp), %rax + 0x48, 0x8b, 0x00, //0x0000031c movq (%rax), %rax + 0x48, 0x85, 0xc0, //0x0000031f testq %rax, %rax + 0x0f, 0x84, 0xf3, 0x43, 0x00, 0x00, //0x00000322 je LBB0_865 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000328 .p2align 4, 0x90 + //0x00000330 LBB0_30 + 0x8a, 0x40, 0x17, //0x00000330 movb $23(%rax), %al + 0x24, 0x1f, //0x00000333 andb $31, %al + 0x3c, 0x02, //0x00000335 cmpb $2, %al + 0x0f, 0x84, 0xc3, 0x1a, 0x00, 0x00, //0x00000337 je LBB0_342 + 0x3c, 0x18, //0x0000033d cmpb $24, %al + 0x0f, 0x85, 0xd6, 0x43, 0x00, 0x00, //0x0000033f jne LBB0_865 + 0x80, 0xf9, 0x7b, //0x00000345 cmpb $123, %cl + 0x0f, 0x85, 0x0d, 0x44, 0x00, 0x00, //0x00000348 jne LBB0_872 + //0x0000034e LBB0_33 + 0x49, 0x8b, 0x09, //0x0000034e movq (%r9), %rcx + 0x49, 0x39, 0xcb, //0x00000351 cmpq %rcx, %r11 + 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x00000354 jae LBB0_38 + 0x43, 0x8a, 0x44, 0x1d, 0x00, //0x0000035a movb (%r13,%r11), %al + 0x3c, 0x0d, //0x0000035f cmpb $13, %al + 0x0f, 0x84, 0x29, 0x00, 0x00, 0x00, //0x00000361 je LBB0_38 + 0x3c, 0x20, //0x00000367 cmpb $32, %al + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00000369 je LBB0_38 + 0x04, 0xf7, //0x0000036f addb $-9, %al + 0x3c, 0x01, //0x00000371 cmpb $1, %al + 0x0f, 0x86, 0x17, 0x00, 0x00, 0x00, //0x00000373 jbe LBB0_38 + 0x4c, 0x89, 0xd8, //0x00000379 movq %r11, %rax + 0xe9, 0x04, 0x01, 0x00, 0x00, //0x0000037c jmp LBB0_59 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000381 .p2align 4, 0x90 + //0x00000390 LBB0_38 + 0x49, 0x8d, 0x43, 0x01, //0x00000390 leaq $1(%r11), %rax + 0x48, 0x39, 0xc8, //0x00000394 cmpq %rcx, %rax + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000397 jae LBB0_42 + 0x41, 0x8a, 0x54, 0x05, 0x00, //0x0000039d movb (%r13,%rax), %dl + 0x80, 0xfa, 0x0d, //0x000003a2 cmpb $13, %dl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000003a5 je LBB0_42 + 0x80, 0xfa, 0x20, //0x000003ab cmpb $32, %dl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000003ae je LBB0_42 + 0x80, 0xc2, 0xf7, //0x000003b4 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000003b7 cmpb $1, %dl + 0x0f, 0x87, 0xc5, 0x00, 0x00, 0x00, //0x000003ba ja LBB0_59 + //0x000003c0 .p2align 4, 0x90 + //0x000003c0 LBB0_42 + 0x49, 0x8d, 0x43, 0x02, //0x000003c0 leaq $2(%r11), %rax + 0x48, 0x39, 0xc8, //0x000003c4 cmpq %rcx, %rax + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000003c7 jae LBB0_46 + 0x41, 0x8a, 0x54, 0x05, 0x00, //0x000003cd movb (%r13,%rax), %dl + 0x80, 0xfa, 0x0d, //0x000003d2 cmpb $13, %dl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000003d5 je LBB0_46 + 0x80, 0xfa, 0x20, //0x000003db cmpb $32, %dl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000003de je LBB0_46 + 0x80, 0xc2, 0xf7, //0x000003e4 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000003e7 cmpb $1, %dl + 0x0f, 0x87, 0x95, 0x00, 0x00, 0x00, //0x000003ea ja LBB0_59 + //0x000003f0 .p2align 4, 0x90 + //0x000003f0 LBB0_46 + 0x49, 0x8d, 0x43, 0x03, //0x000003f0 leaq $3(%r11), %rax + 0x48, 0x39, 0xc8, //0x000003f4 cmpq %rcx, %rax + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000003f7 jae LBB0_50 + 0x41, 0x8a, 0x54, 0x05, 0x00, //0x000003fd movb (%r13,%rax), %dl + 0x80, 0xfa, 0x0d, //0x00000402 cmpb $13, %dl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000405 je LBB0_50 + 0x80, 0xfa, 0x20, //0x0000040b cmpb $32, %dl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000040e je LBB0_50 + 0x80, 0xc2, 0xf7, //0x00000414 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00000417 cmpb $1, %dl + 0x0f, 0x87, 0x65, 0x00, 0x00, 0x00, //0x0000041a ja LBB0_59 + //0x00000420 .p2align 4, 0x90 + //0x00000420 LBB0_50 + 0x49, 0x8d, 0x43, 0x04, //0x00000420 leaq $4(%r11), %rax + 0x48, 0x39, 0xc1, //0x00000424 cmpq %rax, %rcx + 0x0f, 0x86, 0x23, 0x43, 0x00, 0x00, //0x00000427 jbe LBB0_869 + 0x48, 0x39, 0xc1, //0x0000042d cmpq %rax, %rcx + 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00000430 je LBB0_56 + 0x4a, 0x8d, 0x14, 0x29, //0x00000436 leaq (%rcx,%r13), %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000043a .p2align 4, 0x90 + //0x00000440 LBB0_53 + 0x41, 0x0f, 0xbe, 0x74, 0x05, 0x00, //0x00000440 movsbl (%r13,%rax), %esi + 0x83, 0xfe, 0x20, //0x00000446 cmpl $32, %esi + 0x0f, 0x87, 0x2d, 0x00, 0x00, 0x00, //0x00000449 ja LBB0_58 + 0x49, 0x0f, 0xa3, 0xf6, //0x0000044f btq %rsi, %r14 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000453 jae LBB0_58 + 0x48, 0x83, 0xc0, 0x01, //0x00000459 addq $1, %rax + 0x48, 0x39, 0xc1, //0x0000045d cmpq %rax, %rcx + 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x00000460 jne LBB0_53 + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00000466 jmp LBB0_57 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000046b .p2align 4, 0x90 + //0x00000470 LBB0_56 + 0x4c, 0x01, 0xe8, //0x00000470 addq %r13, %rax + 0x48, 0x89, 0xc2, //0x00000473 movq %rax, %rdx + //0x00000476 LBB0_57 + 0x4c, 0x29, 0xea, //0x00000476 subq %r13, %rdx + 0x48, 0x89, 0xd0, //0x00000479 movq %rdx, %rax + //0x0000047c LBB0_58 + 0x48, 0x39, 0xc8, //0x0000047c cmpq %rcx, %rax + 0x0f, 0x83, 0xd6, 0x42, 0x00, 0x00, //0x0000047f jae LBB0_872 + //0x00000485 LBB0_59 + 0x4c, 0x8d, 0x58, 0x01, //0x00000485 leaq $1(%rax), %r11 + 0x4d, 0x89, 0x18, //0x00000489 movq %r11, (%r8) + 0x41, 0x8a, 0x54, 0x05, 0x00, //0x0000048c movb (%r13,%rax), %dl + 0x80, 0xfa, 0x22, //0x00000491 cmpb $34, %dl + 0x0f, 0x85, 0x9d, 0x2b, 0x00, 0x00, //0x00000494 jne LBB0_555 + 0x49, 0x8b, 0x09, //0x0000049a movq (%r9), %rcx + 0x49, 0x89, 0xc8, //0x0000049d movq %rcx, %r8 + 0x4d, 0x29, 0xd8, //0x000004a0 subq %r11, %r8 + 0x0f, 0x84, 0x41, 0x4f, 0x00, 0x00, //0x000004a3 je LBB0_974 + 0x48, 0x89, 0x8d, 0x48, 0xff, 0xff, 0xff, //0x000004a9 movq %rcx, $-184(%rbp) + 0x48, 0x8b, 0x4d, 0xb0, //0x000004b0 movq $-80(%rbp), %rcx + 0x48, 0x8b, 0x71, 0x08, //0x000004b4 movq $8(%rcx), %rsi + 0x4c, 0x8b, 0x3e, //0x000004b8 movq (%rsi), %r15 + 0x48, 0x8b, 0x4e, 0x08, //0x000004bb movq $8(%rsi), %rcx + 0x48, 0x89, 0x4d, 0xb8, //0x000004bf movq %rcx, $-72(%rbp) + 0x4c, 0x89, 0x9d, 0x38, 0xff, 0xff, 0xff, //0x000004c3 movq %r11, $-200(%rbp) + 0x4d, 0x01, 0xeb, //0x000004ca addq %r13, %r11 + 0x49, 0x83, 0xf8, 0x40, //0x000004cd cmpq $64, %r8 + 0x4c, 0x89, 0x5d, 0xd0, //0x000004d1 movq %r11, $-48(%rbp) + 0x0f, 0x82, 0xc3, 0x12, 0x00, 0x00, //0x000004d5 jb LBB0_268 + 0x4c, 0x89, 0xbd, 0x40, 0xff, 0xff, 0xff, //0x000004db movq %r15, $-192(%rbp) + 0x49, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x000004e2 movq $-2, %r15 + 0x49, 0x29, 0xc7, //0x000004e9 subq %rax, %r15 + 0x4c, 0x8d, 0x58, 0x01, //0x000004ec leaq $1(%rax), %r11 + 0x48, 0xc7, 0x45, 0x98, 0xff, 0xff, 0xff, 0xff, //0x000004f0 movq $-1, $-104(%rbp) + 0x45, 0x31, 0xc9, //0x000004f8 xorl %r9d, %r9d + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000004fb .p2align 4, 0x90 + //0x00000500 LBB0_63 + 0xf3, 0x43, 0x0f, 0x6f, 0x5c, 0x1d, 0x00, //0x00000500 movdqu (%r13,%r11), %xmm3 + 0xf3, 0x43, 0x0f, 0x6f, 0x6c, 0x1d, 0x10, //0x00000507 movdqu $16(%r13,%r11), %xmm5 + 0xf3, 0x43, 0x0f, 0x6f, 0x74, 0x1d, 0x20, //0x0000050e movdqu $32(%r13,%r11), %xmm6 + 0xf3, 0x43, 0x0f, 0x6f, 0x7c, 0x1d, 0x30, //0x00000515 movdqu $48(%r13,%r11), %xmm7 + 0x66, 0x0f, 0x6f, 0xd3, //0x0000051c movdqa %xmm3, %xmm2 + 0x66, 0x0f, 0x74, 0xd0, //0x00000520 pcmpeqb %xmm0, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x00000524 pmovmskb %xmm2, %edi + 0x66, 0x0f, 0x6f, 0xd5, //0x00000528 movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd0, //0x0000052c pcmpeqb %xmm0, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xe2, //0x00000530 pmovmskb %xmm2, %r12d + 0x66, 0x0f, 0x6f, 0xd6, //0x00000535 movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd0, //0x00000539 pcmpeqb %xmm0, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xd2, //0x0000053d pmovmskb %xmm2, %r10d + 0x66, 0x0f, 0x6f, 0xd7, //0x00000542 movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd0, //0x00000546 pcmpeqb %xmm0, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xf2, //0x0000054a pmovmskb %xmm2, %r14d + 0x66, 0x0f, 0x74, 0xd9, //0x0000054f pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00000553 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x74, 0xe9, //0x00000557 pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xdd, //0x0000055b pmovmskb %xmm5, %ebx + 0x66, 0x0f, 0x74, 0xf1, //0x0000055f pcmpeqb %xmm1, %xmm6 + 0x66, 0x0f, 0xd7, 0xd6, //0x00000563 pmovmskb %xmm6, %edx + 0x66, 0x0f, 0x74, 0xf9, //0x00000567 pcmpeqb %xmm1, %xmm7 + 0x66, 0x0f, 0xd7, 0xcf, //0x0000056b pmovmskb %xmm7, %ecx + 0x49, 0xc1, 0xe6, 0x30, //0x0000056f shlq $48, %r14 + 0x49, 0xc1, 0xe2, 0x20, //0x00000573 shlq $32, %r10 + 0x4d, 0x09, 0xf2, //0x00000577 orq %r14, %r10 + 0x49, 0xc1, 0xe4, 0x10, //0x0000057a shlq $16, %r12 + 0x4d, 0x09, 0xd4, //0x0000057e orq %r10, %r12 + 0x4c, 0x09, 0xe7, //0x00000581 orq %r12, %rdi + 0x48, 0xc1, 0xe1, 0x30, //0x00000584 shlq $48, %rcx + 0x48, 0xc1, 0xe2, 0x20, //0x00000588 shlq $32, %rdx + 0x48, 0x09, 0xca, //0x0000058c orq %rcx, %rdx + 0x48, 0xc1, 0xe3, 0x10, //0x0000058f shlq $16, %rbx + 0x48, 0x09, 0xd3, //0x00000593 orq %rdx, %rbx + 0x48, 0x09, 0xde, //0x00000596 orq %rbx, %rsi + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x00000599 jne LBB0_72 + 0x4d, 0x85, 0xc9, //0x0000059f testq %r9, %r9 + 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x000005a2 jne LBB0_74 + 0x45, 0x31, 0xc9, //0x000005a8 xorl %r9d, %r9d + 0x48, 0x85, 0xff, //0x000005ab testq %rdi, %rdi + 0x0f, 0x85, 0x8c, 0x00, 0x00, 0x00, //0x000005ae jne LBB0_75 + //0x000005b4 LBB0_66 + 0x49, 0x83, 0xc0, 0xc0, //0x000005b4 addq $-64, %r8 + 0x49, 0x83, 0xc7, 0xc0, //0x000005b8 addq $-64, %r15 + 0x49, 0x83, 0xc3, 0x40, //0x000005bc addq $64, %r11 + 0x49, 0x83, 0xf8, 0x3f, //0x000005c0 cmpq $63, %r8 + 0x0f, 0x87, 0x36, 0xff, 0xff, 0xff, //0x000005c4 ja LBB0_63 + 0xe9, 0xdf, 0x10, 0x00, 0x00, //0x000005ca jmp LBB0_67 + //0x000005cf LBB0_72 + 0x48, 0x83, 0x7d, 0x98, 0xff, //0x000005cf cmpq $-1, $-104(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000005d4 jne LBB0_74 + 0x48, 0x0f, 0xbc, 0xce, //0x000005da bsfq %rsi, %rcx + 0x4c, 0x01, 0xd9, //0x000005de addq %r11, %rcx + 0x48, 0x89, 0x4d, 0x98, //0x000005e1 movq %rcx, $-104(%rbp) + //0x000005e5 LBB0_74 + 0x4c, 0x89, 0xc9, //0x000005e5 movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x000005e8 notq %rcx + 0x48, 0x21, 0xf1, //0x000005eb andq %rsi, %rcx + 0x48, 0x8d, 0x1c, 0x09, //0x000005ee leaq (%rcx,%rcx), %rbx + 0x4c, 0x09, 0xcb, //0x000005f2 orq %r9, %rbx + 0x48, 0x89, 0xda, //0x000005f5 movq %rbx, %rdx + 0x48, 0xf7, 0xd2, //0x000005f8 notq %rdx + 0x48, 0x21, 0xf2, //0x000005fb andq %rsi, %rdx + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000005fe movabsq $-6148914691236517206, %rsi + 0x48, 0x21, 0xf2, //0x00000608 andq %rsi, %rdx + 0x45, 0x31, 0xc9, //0x0000060b xorl %r9d, %r9d + 0x48, 0x01, 0xca, //0x0000060e addq %rcx, %rdx + 0x41, 0x0f, 0x92, 0xc1, //0x00000611 setb %r9b + 0x48, 0x01, 0xd2, //0x00000615 addq %rdx, %rdx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000618 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xca, //0x00000622 xorq %rcx, %rdx + 0x48, 0x21, 0xda, //0x00000625 andq %rbx, %rdx + 0x48, 0xf7, 0xd2, //0x00000628 notq %rdx + 0x48, 0x21, 0xd7, //0x0000062b andq %rdx, %rdi + 0x48, 0x85, 0xff, //0x0000062e testq %rdi, %rdi + 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000631 je LBB0_66 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000637 .p2align 4, 0x90 + //0x00000640 LBB0_75 + 0x4c, 0x0f, 0xbc, 0xdf, //0x00000640 bsfq %rdi, %r11 + 0x4d, 0x29, 0xfb, //0x00000644 subq %r15, %r11 + 0x4c, 0x8b, 0x45, 0xc8, //0x00000647 movq $-56(%rbp), %r8 + 0x4c, 0x8b, 0x4d, 0xc0, //0x0000064b movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x65, 0xa8, //0x0000064f movq $-88(%rbp), %r12 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000653 movabsq $4294977024, %r14 + 0x4c, 0x8b, 0xbd, 0x40, 0xff, 0xff, 0xff, //0x0000065d movq $-192(%rbp), %r15 + 0x48, 0x8b, 0x4d, 0x98, //0x00000664 movq $-104(%rbp), %rcx + 0x4d, 0x85, 0xdb, //0x00000668 testq %r11, %r11 + 0x0f, 0x88, 0x84, 0x4d, 0x00, 0x00, //0x0000066b js LBB0_976 + //0x00000671 LBB0_78 + 0x4d, 0x89, 0x18, //0x00000671 movq %r11, (%r8) + 0x48, 0x83, 0xf9, 0xff, //0x00000674 cmpq $-1, %rcx + 0x0f, 0x84, 0x09, 0x00, 0x00, 0x00, //0x00000678 je LBB0_80 + 0x4c, 0x39, 0xd9, //0x0000067e cmpq %r11, %rcx + 0x0f, 0x8e, 0x31, 0x11, 0x00, 0x00, //0x00000681 jle LBB0_269 + //0x00000687 LBB0_80 + 0x4c, 0x89, 0xda, //0x00000687 movq %r11, %rdx + 0x48, 0x29, 0xc2, //0x0000068a subq %rax, %rdx + 0x48, 0x83, 0xc2, 0xfe, //0x0000068d addq $-2, %rdx + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00000691 movl $1, %ecx + 0x48, 0x89, 0xd6, //0x00000696 movq %rdx, %rsi + 0x48, 0x8b, 0x5d, 0xb8, //0x00000699 movq $-72(%rbp), %rbx + 0x48, 0x09, 0xde, //0x0000069d orq %rbx, %rsi + 0x48, 0x8b, 0x7d, 0xd0, //0x000006a0 movq $-48(%rbp), %rdi + 0x0f, 0x84, 0x4b, 0x00, 0x00, 0x00, //0x000006a4 je LBB0_86 + 0x48, 0x39, 0xda, //0x000006aa cmpq %rbx, %rdx + 0x0f, 0x85, 0x40, 0x00, 0x00, 0x00, //0x000006ad jne LBB0_85 + 0x31, 0xf6, //0x000006b3 xorl %esi, %esi + 0x48, 0x89, 0xda, //0x000006b5 movq %rbx, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000006b8 .p2align 4, 0x90 + //0x000006c0 LBB0_83 + 0x48, 0x83, 0xfa, 0x10, //0x000006c0 cmpq $16, %rdx + 0x0f, 0x82, 0xb3, 0x02, 0x00, 0x00, //0x000006c4 jb LBB0_138 + 0xf3, 0x0f, 0x6f, 0x14, 0x37, //0x000006ca movdqu (%rdi,%rsi), %xmm2 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x37, //0x000006cf movdqu (%r15,%rsi), %xmm3 + 0x66, 0x0f, 0x74, 0xda, //0x000006d5 pcmpeqb %xmm2, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x000006d9 pmovmskb %xmm3, %edi + 0x48, 0x83, 0xc2, 0xf0, //0x000006dd addq $-16, %rdx + 0x48, 0x83, 0xc6, 0x10, //0x000006e1 addq $16, %rsi + 0x66, 0x83, 0xff, 0xff, //0x000006e5 cmpw $-1, %di + 0x48, 0x8b, 0x7d, 0xd0, //0x000006e9 movq $-48(%rbp), %rdi + 0x0f, 0x84, 0xcd, 0xff, 0xff, 0xff, //0x000006ed je LBB0_83 + //0x000006f3 LBB0_85 + 0x31, 0xc9, //0x000006f3 xorl %ecx, %ecx + //0x000006f5 LBB0_86 + 0x49, 0x8b, 0x01, //0x000006f5 movq (%r9), %rax + 0x49, 0x39, 0xc3, //0x000006f8 cmpq %rax, %r11 + 0x0f, 0x83, 0x2f, 0x00, 0x00, 0x00, //0x000006fb jae LBB0_91 + 0x43, 0x8a, 0x54, 0x1d, 0x00, //0x00000701 movb (%r13,%r11), %dl + 0x80, 0xfa, 0x0d, //0x00000706 cmpb $13, %dl + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00000709 je LBB0_91 + 0x80, 0xfa, 0x20, //0x0000070f cmpb $32, %dl + 0x0f, 0x84, 0x18, 0x00, 0x00, 0x00, //0x00000712 je LBB0_91 + 0x80, 0xc2, 0xf7, //0x00000718 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x0000071b cmpb $1, %dl + 0x0f, 0x86, 0x0c, 0x00, 0x00, 0x00, //0x0000071e jbe LBB0_91 + 0x4c, 0x89, 0xda, //0x00000724 movq %r11, %rdx + 0xe9, 0xf9, 0x00, 0x00, 0x00, //0x00000727 jmp LBB0_112 + 0x90, 0x90, 0x90, 0x90, //0x0000072c .p2align 4, 0x90 + //0x00000730 LBB0_91 + 0x49, 0x8d, 0x53, 0x01, //0x00000730 leaq $1(%r11), %rdx + 0x48, 0x39, 0xc2, //0x00000734 cmpq %rax, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000737 jae LBB0_95 + 0x41, 0x8a, 0x5c, 0x15, 0x00, //0x0000073d movb (%r13,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x00000742 cmpb $13, %bl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000745 je LBB0_95 + 0x80, 0xfb, 0x20, //0x0000074b cmpb $32, %bl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000074e je LBB0_95 + 0x80, 0xc3, 0xf7, //0x00000754 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000757 cmpb $1, %bl + 0x0f, 0x87, 0xc5, 0x00, 0x00, 0x00, //0x0000075a ja LBB0_112 + //0x00000760 .p2align 4, 0x90 + //0x00000760 LBB0_95 + 0x49, 0x8d, 0x53, 0x02, //0x00000760 leaq $2(%r11), %rdx + 0x48, 0x39, 0xc2, //0x00000764 cmpq %rax, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000767 jae LBB0_99 + 0x41, 0x8a, 0x5c, 0x15, 0x00, //0x0000076d movb (%r13,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x00000772 cmpb $13, %bl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000775 je LBB0_99 + 0x80, 0xfb, 0x20, //0x0000077b cmpb $32, %bl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000077e je LBB0_99 + 0x80, 0xc3, 0xf7, //0x00000784 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000787 cmpb $1, %bl + 0x0f, 0x87, 0x95, 0x00, 0x00, 0x00, //0x0000078a ja LBB0_112 + //0x00000790 .p2align 4, 0x90 + //0x00000790 LBB0_99 + 0x49, 0x8d, 0x53, 0x03, //0x00000790 leaq $3(%r11), %rdx + 0x48, 0x39, 0xc2, //0x00000794 cmpq %rax, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000797 jae LBB0_103 + 0x41, 0x8a, 0x5c, 0x15, 0x00, //0x0000079d movb (%r13,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x000007a2 cmpb $13, %bl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000007a5 je LBB0_103 + 0x80, 0xfb, 0x20, //0x000007ab cmpb $32, %bl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000007ae je LBB0_103 + 0x80, 0xc3, 0xf7, //0x000007b4 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000007b7 cmpb $1, %bl + 0x0f, 0x87, 0x65, 0x00, 0x00, 0x00, //0x000007ba ja LBB0_112 + //0x000007c0 .p2align 4, 0x90 + //0x000007c0 LBB0_103 + 0x49, 0x8d, 0x53, 0x04, //0x000007c0 leaq $4(%r11), %rdx + 0x48, 0x39, 0xd0, //0x000007c4 cmpq %rdx, %rax + 0x0f, 0x86, 0x78, 0x28, 0x00, 0x00, //0x000007c7 jbe LBB0_870 + 0x48, 0x39, 0xd0, //0x000007cd cmpq %rdx, %rax + 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x000007d0 je LBB0_109 + 0x4a, 0x8d, 0x34, 0x28, //0x000007d6 leaq (%rax,%r13), %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000007da .p2align 4, 0x90 + //0x000007e0 LBB0_106 + 0x41, 0x0f, 0xbe, 0x7c, 0x15, 0x00, //0x000007e0 movsbl (%r13,%rdx), %edi + 0x83, 0xff, 0x20, //0x000007e6 cmpl $32, %edi + 0x0f, 0x87, 0x2d, 0x00, 0x00, 0x00, //0x000007e9 ja LBB0_111 + 0x49, 0x0f, 0xa3, 0xfe, //0x000007ef btq %rdi, %r14 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000007f3 jae LBB0_111 + 0x48, 0x83, 0xc2, 0x01, //0x000007f9 addq $1, %rdx + 0x48, 0x39, 0xd0, //0x000007fd cmpq %rdx, %rax + 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x00000800 jne LBB0_106 + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00000806 jmp LBB0_110 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000080b .p2align 4, 0x90 + //0x00000810 LBB0_109 + 0x4c, 0x01, 0xea, //0x00000810 addq %r13, %rdx + 0x48, 0x89, 0xd6, //0x00000813 movq %rdx, %rsi + //0x00000816 LBB0_110 + 0x4c, 0x29, 0xee, //0x00000816 subq %r13, %rsi + 0x48, 0x89, 0xf2, //0x00000819 movq %rsi, %rdx + //0x0000081c LBB0_111 + 0x48, 0x39, 0xc2, //0x0000081c cmpq %rax, %rdx + 0x0f, 0x83, 0x36, 0x3f, 0x00, 0x00, //0x0000081f jae LBB0_872 + //0x00000825 LBB0_112 + 0x4c, 0x8d, 0x5a, 0x01, //0x00000825 leaq $1(%rdx), %r11 + 0x4d, 0x89, 0x18, //0x00000829 movq %r11, (%r8) + 0x41, 0x80, 0x7c, 0x15, 0x00, 0x3a, //0x0000082c cmpb $58, (%r13,%rdx) + 0x0f, 0x85, 0x23, 0x3f, 0x00, 0x00, //0x00000832 jne LBB0_872 + 0x48, 0x85, 0xc9, //0x00000838 testq %rcx, %rcx + 0x0f, 0x85, 0xff, 0x25, 0x00, 0x00, //0x0000083b jne LBB0_464 + 0x49, 0x8b, 0x09, //0x00000841 movq (%r9), %rcx + 0x49, 0x39, 0xcb, //0x00000844 cmpq %rcx, %r11 + 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x00000847 jae LBB0_119 + 0x43, 0x8a, 0x44, 0x1d, 0x00, //0x0000084d movb (%r13,%r11), %al + 0x3c, 0x0d, //0x00000852 cmpb $13, %al + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00000854 je LBB0_119 + 0x3c, 0x20, //0x0000085a cmpb $32, %al + 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x0000085c je LBB0_119 + 0x04, 0xf7, //0x00000862 addb $-9, %al + 0x3c, 0x01, //0x00000864 cmpb $1, %al + 0x0f, 0x86, 0x14, 0x00, 0x00, 0x00, //0x00000866 jbe LBB0_119 + 0x4c, 0x89, 0xd8, //0x0000086c movq %r11, %rax + 0xe9, 0xa5, 0x01, 0x00, 0x00, //0x0000086f jmp LBB0_148 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000874 .p2align 4, 0x90 + //0x00000880 LBB0_119 + 0x48, 0x8d, 0x42, 0x02, //0x00000880 leaq $2(%rdx), %rax + 0x48, 0x39, 0xc8, //0x00000884 cmpq %rcx, %rax + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000887 jae LBB0_123 + 0x41, 0x8a, 0x5c, 0x05, 0x00, //0x0000088d movb (%r13,%rax), %bl + 0x80, 0xfb, 0x0d, //0x00000892 cmpb $13, %bl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000895 je LBB0_123 + 0x80, 0xfb, 0x20, //0x0000089b cmpb $32, %bl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000089e je LBB0_123 + 0x80, 0xc3, 0xf7, //0x000008a4 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000008a7 cmpb $1, %bl + 0x0f, 0x87, 0x69, 0x01, 0x00, 0x00, //0x000008aa ja LBB0_148 + //0x000008b0 .p2align 4, 0x90 + //0x000008b0 LBB0_123 + 0x48, 0x8d, 0x42, 0x03, //0x000008b0 leaq $3(%rdx), %rax + 0x48, 0x39, 0xc8, //0x000008b4 cmpq %rcx, %rax + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000008b7 jae LBB0_127 + 0x41, 0x8a, 0x5c, 0x05, 0x00, //0x000008bd movb (%r13,%rax), %bl + 0x80, 0xfb, 0x0d, //0x000008c2 cmpb $13, %bl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000008c5 je LBB0_127 + 0x80, 0xfb, 0x20, //0x000008cb cmpb $32, %bl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000008ce je LBB0_127 + 0x80, 0xc3, 0xf7, //0x000008d4 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000008d7 cmpb $1, %bl + 0x0f, 0x87, 0x39, 0x01, 0x00, 0x00, //0x000008da ja LBB0_148 + //0x000008e0 .p2align 4, 0x90 + //0x000008e0 LBB0_127 + 0x48, 0x8d, 0x42, 0x04, //0x000008e0 leaq $4(%rdx), %rax + 0x48, 0x39, 0xc8, //0x000008e4 cmpq %rcx, %rax + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000008e7 jae LBB0_131 + 0x41, 0x8a, 0x5c, 0x05, 0x00, //0x000008ed movb (%r13,%rax), %bl + 0x80, 0xfb, 0x0d, //0x000008f2 cmpb $13, %bl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000008f5 je LBB0_131 + 0x80, 0xfb, 0x20, //0x000008fb cmpb $32, %bl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000008fe je LBB0_131 + 0x80, 0xc3, 0xf7, //0x00000904 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000907 cmpb $1, %bl + 0x0f, 0x87, 0x09, 0x01, 0x00, 0x00, //0x0000090a ja LBB0_148 + //0x00000910 .p2align 4, 0x90 + //0x00000910 LBB0_131 + 0x48, 0x83, 0xc2, 0x05, //0x00000910 addq $5, %rdx + 0x48, 0x39, 0xd1, //0x00000914 cmpq %rdx, %rcx + 0x0f, 0x86, 0x43, 0x00, 0x00, 0x00, //0x00000917 jbe LBB0_137 + 0x48, 0x39, 0xd1, //0x0000091d cmpq %rdx, %rcx + 0x0f, 0x84, 0xdb, 0x00, 0x00, 0x00, //0x00000920 je LBB0_145 + 0x4a, 0x8d, 0x04, 0x29, //0x00000926 leaq (%rcx,%r13), %rax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000092a .p2align 4, 0x90 + //0x00000930 LBB0_134 + 0x41, 0x0f, 0xbe, 0x74, 0x15, 0x00, //0x00000930 movsbl (%r13,%rdx), %esi + 0x83, 0xfe, 0x20, //0x00000936 cmpl $32, %esi + 0x0f, 0x87, 0xce, 0x00, 0x00, 0x00, //0x00000939 ja LBB0_147 + 0x49, 0x0f, 0xa3, 0xf6, //0x0000093f btq %rsi, %r14 + 0x0f, 0x83, 0xc4, 0x00, 0x00, 0x00, //0x00000943 jae LBB0_147 + 0x48, 0x83, 0xc2, 0x01, //0x00000949 addq $1, %rdx + 0x48, 0x39, 0xd1, //0x0000094d cmpq %rdx, %rcx + 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x00000950 jne LBB0_134 + 0xe9, 0xac, 0x00, 0x00, 0x00, //0x00000956 jmp LBB0_146 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000095b .p2align 4, 0x90 + //0x00000960 LBB0_137 + 0x49, 0x89, 0x10, //0x00000960 movq %rdx, (%r8) + 0x49, 0x89, 0xd3, //0x00000963 movq %rdx, %r11 + 0x4d, 0x8b, 0x2c, 0x24, //0x00000966 movq (%r12), %r13 + 0x49, 0x8b, 0x44, 0x24, 0x08, //0x0000096a movq $8(%r12), %rax + 0x49, 0x39, 0xc3, //0x0000096f cmpq %rax, %r11 + 0x0f, 0x83, 0x28, 0x0c, 0x00, 0x00, //0x00000972 jae LBB0_241 + 0xe9, 0x85, 0x07, 0x00, 0x00, //0x00000978 jmp LBB0_237 + //0x0000097d LBB0_138 + 0x44, 0x01, 0xe8, //0x0000097d addl %r13d, %eax + 0x01, 0xf0, //0x00000980 addl %esi, %eax + 0x83, 0xc0, 0x01, //0x00000982 addl $1, %eax + 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00000985 andl $4095, %eax + 0x3d, 0xf0, 0x0f, 0x00, 0x00, //0x0000098a cmpl $4080, %eax + 0x0f, 0x87, 0x4f, 0x00, 0x00, 0x00, //0x0000098f ja LBB0_143 + 0x41, 0x8d, 0x04, 0x37, //0x00000995 leal (%r15,%rsi), %eax + 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00000999 andl $4095, %eax + 0x3d, 0xf1, 0x0f, 0x00, 0x00, //0x0000099e cmpl $4081, %eax + 0x0f, 0x83, 0x3b, 0x00, 0x00, 0x00, //0x000009a3 jae LBB0_143 + 0xf3, 0x0f, 0x6f, 0x14, 0x37, //0x000009a9 movdqu (%rdi,%rsi), %xmm2 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x37, //0x000009ae movdqu (%r15,%rsi), %xmm3 + 0x66, 0x0f, 0x74, 0xda, //0x000009b4 pcmpeqb %xmm2, %xmm3 + 0x66, 0x0f, 0xd7, 0xc3, //0x000009b8 pmovmskb %xmm3, %eax + 0x66, 0x83, 0xf8, 0xff, //0x000009bc cmpw $-1, %ax + 0x0f, 0x84, 0x2f, 0xfd, 0xff, 0xff, //0x000009c0 je LBB0_86 + 0xf7, 0xd0, //0x000009c6 notl %eax + 0x66, 0x0f, 0xbc, 0xc0, //0x000009c8 bsfw %ax, %ax + 0x0f, 0xb7, 0xc0, //0x000009cc movzwl %ax, %eax + 0x31, 0xc9, //0x000009cf xorl %ecx, %ecx + 0x48, 0x39, 0xc2, //0x000009d1 cmpq %rax, %rdx + 0x0f, 0x96, 0xc1, //0x000009d4 setbe %cl + 0xe9, 0x19, 0xfd, 0xff, 0xff, //0x000009d7 jmp LBB0_86 + 0x90, 0x90, 0x90, 0x90, //0x000009dc .p2align 4, 0x90 //0x000009e0 LBB0_142 0x48, 0x83, 0xc6, 0x01, //0x000009e0 addq $1, %rsi //0x000009e4 LBB0_143 - 0x48, 0x39, 0x75, 0xd0, //0x000009e4 cmpq %rsi, $-48(%rbp) - 0x0f, 0x84, 0x13, 0xfd, 0xff, 0xff, //0x000009e8 je LBB0_86 - 0x0f, 0xb6, 0x04, 0x33, //0x000009ee movzbl (%rbx,%rsi), %eax - 0x41, 0x3a, 0x04, 0x36, //0x000009f2 cmpb (%r14,%rsi), %al + 0x48, 0x39, 0x75, 0xb8, //0x000009e4 cmpq %rsi, $-72(%rbp) + 0x0f, 0x84, 0x07, 0xfd, 0xff, 0xff, //0x000009e8 je LBB0_86 + 0x0f, 0xb6, 0x04, 0x37, //0x000009ee movzbl (%rdi,%rsi), %eax + 0x41, 0x3a, 0x04, 0x37, //0x000009f2 cmpb (%r15,%rsi), %al 0x0f, 0x84, 0xe4, 0xff, 0xff, 0xff, //0x000009f6 je LBB0_142 - 0xe9, 0xfe, 0xfc, 0xff, 0xff, //0x000009fc jmp LBB0_85 + 0xe9, 0xf2, 0xfc, 0xff, 0xff, //0x000009fc jmp LBB0_85 //0x00000a01 LBB0_145 0x4c, 0x01, 0xea, //0x00000a01 addq %r13, %rdx 0x48, 0x89, 0xd0, //0x00000a04 movq %rdx, %rax @@ -634,5584 +639,5660 @@ var _text_get_by_path = []byte{ //0x00000a0d LBB0_147 0x48, 0x89, 0xd0, //0x00000a0d movq %rdx, %rax 0x48, 0x39, 0xca, //0x00000a10 cmpq %rcx, %rdx - 0x0f, 0x83, 0x05, 0x01, 0x00, 0x00, //0x00000a13 jae LBB0_164 + 0x0f, 0x83, 0xd7, 0x06, 0x00, 0x00, //0x00000a13 jae LBB0_236 //0x00000a19 LBB0_148 - 0x4c, 0x8d, 0x50, 0x01, //0x00000a19 leaq $1(%rax), %r10 - 0x4d, 0x89, 0x10, //0x00000a1d movq %r10, (%r8) + 0x4c, 0x8d, 0x58, 0x01, //0x00000a19 leaq $1(%rax), %r11 + 0x4d, 0x89, 0x18, //0x00000a1d movq %r11, (%r8) 0x41, 0x0f, 0xbe, 0x4c, 0x05, 0x00, //0x00000a20 movsbl (%r13,%rax), %ecx 0x83, 0xf9, 0x7b, //0x00000a26 cmpl $123, %ecx - 0x0f, 0x87, 0xbf, 0x07, 0x00, 0x00, //0x00000a29 ja LBB0_231 - 0x48, 0x8d, 0x15, 0x52, 0x4c, 0x00, 0x00, //0x00000a2f leaq $19538(%rip), %rdx /* LJTI0_1+0(%rip) */ + 0x0f, 0x87, 0xb8, 0x06, 0x00, 0x00, //0x00000a29 ja LBB0_206 + 0x48, 0x8d, 0x15, 0x8a, 0x4d, 0x00, 0x00, //0x00000a2f leaq $19850(%rip), %rdx /* LJTI0_1+0(%rip) */ 0x48, 0x63, 0x0c, 0x8a, //0x00000a36 movslq (%rdx,%rcx,4), %rcx 0x48, 0x01, 0xd1, //0x00000a3a addq %rdx, %rcx 0xff, 0xe1, //0x00000a3d jmpq *%rcx //0x00000a3f LBB0_150 - 0x49, 0x8b, 0x0f, //0x00000a3f movq (%r15), %rcx - 0x48, 0x89, 0xca, //0x00000a42 movq %rcx, %rdx - 0x4c, 0x29, 0xd2, //0x00000a45 subq %r10, %rdx - 0x48, 0x83, 0xfa, 0x10, //0x00000a48 cmpq $16, %rdx - 0x0f, 0x82, 0x67, 0x11, 0x00, 0x00, //0x00000a4c jb LBB0_314 - 0x48, 0x89, 0xc2, //0x00000a52 movq %rax, %rdx - 0x48, 0xf7, 0xd2, //0x00000a55 notq %rdx - 0x48, 0x83, 0xc0, 0x01, //0x00000a58 addq $1, %rax - 0x90, 0x90, 0x90, 0x90, //0x00000a5c .p2align 4, 0x90 - //0x00000a60 LBB0_152 - 0xf3, 0x41, 0x0f, 0x6f, 0x54, 0x05, 0x00, //0x00000a60 movdqu (%r13,%rax), %xmm2 - 0x66, 0x0f, 0x6f, 0xda, //0x00000a67 movdqa %xmm2, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00000a6b pcmpeqb %xmm13, %xmm3 - 0x66, 0x41, 0x0f, 0xdb, 0xd6, //0x00000a70 pand %xmm14, %xmm2 - 0x66, 0x0f, 0x74, 0xd4, //0x00000a75 pcmpeqb %xmm4, %xmm2 - 0x66, 0x0f, 0xeb, 0xd3, //0x00000a79 por %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xf2, //0x00000a7d pmovmskb %xmm2, %esi - 0x85, 0xf6, //0x00000a81 testl %esi, %esi - 0x0f, 0x85, 0x87, 0x00, 0x00, 0x00, //0x00000a83 jne LBB0_162 - 0x48, 0x83, 0xc0, 0x10, //0x00000a89 addq $16, %rax - 0x48, 0x8d, 0x34, 0x11, //0x00000a8d leaq (%rcx,%rdx), %rsi - 0x48, 0x83, 0xc6, 0xf0, //0x00000a91 addq $-16, %rsi - 0x48, 0x83, 0xc2, 0xf0, //0x00000a95 addq $-16, %rdx - 0x48, 0x83, 0xfe, 0x0f, //0x00000a99 cmpq $15, %rsi - 0x0f, 0x87, 0xbd, 0xff, 0xff, 0xff, //0x00000a9d ja LBB0_152 - 0x4d, 0x89, 0xea, //0x00000aa3 movq %r13, %r10 - 0x49, 0x29, 0xd2, //0x00000aa6 subq %rdx, %r10 - 0x48, 0x01, 0xd1, //0x00000aa9 addq %rdx, %rcx - 0x48, 0x89, 0xca, //0x00000aac movq %rcx, %rdx - 0x48, 0x85, 0xd2, //0x00000aaf testq %rdx, %rdx - 0x0f, 0x84, 0x36, 0x00, 0x00, 0x00, //0x00000ab2 je LBB0_161 - //0x00000ab8 LBB0_155 - 0x49, 0x8d, 0x0c, 0x12, //0x00000ab8 leaq (%r10,%rdx), %rcx - 0x31, 0xc0, //0x00000abc xorl %eax, %eax - //0x00000abe LBB0_156 - 0x41, 0x0f, 0xb6, 0x1c, 0x02, //0x00000abe movzbl (%r10,%rax), %ebx - 0x80, 0xfb, 0x2c, //0x00000ac3 cmpb $44, %bl - 0x0f, 0x84, 0xb6, 0x0c, 0x00, 0x00, //0x00000ac6 je LBB0_265 - 0x80, 0xfb, 0x7d, //0x00000acc cmpb $125, %bl - 0x0f, 0x84, 0xad, 0x0c, 0x00, 0x00, //0x00000acf je LBB0_265 - 0x80, 0xfb, 0x5d, //0x00000ad5 cmpb $93, %bl - 0x0f, 0x84, 0xa4, 0x0c, 0x00, 0x00, //0x00000ad8 je LBB0_265 - 0x48, 0x83, 0xc0, 0x01, //0x00000ade addq $1, %rax - 0x48, 0x39, 0xc2, //0x00000ae2 cmpq %rax, %rdx - 0x0f, 0x85, 0xd3, 0xff, 0xff, 0xff, //0x00000ae5 jne LBB0_156 - 0x49, 0x89, 0xca, //0x00000aeb movq %rcx, %r10 - //0x00000aee LBB0_161 - 0x4d, 0x29, 0xea, //0x00000aee subq %r13, %r10 - 0x4c, 0x8b, 0x45, 0xc8, //0x00000af1 movq $-56(%rbp), %r8 - 0x4d, 0x89, 0x10, //0x00000af5 movq %r10, (%r8) - 0x4c, 0x8b, 0x7d, 0xc0, //0x00000af8 movq $-64(%rbp), %r15 - 0x4c, 0x8b, 0x65, 0xb0, //0x00000afc movq $-80(%rbp), %r12 - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000b00 movabsq $4294977024, %r9 - 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00000b0a jmp LBB0_164 - 0x90, //0x00000b0f .p2align 4, 0x90 - //0x00000b10 LBB0_162 - 0x66, 0x0f, 0xbc, 0xc6, //0x00000b10 bsfw %si, %ax - 0x44, 0x0f, 0xb7, 0xd0, //0x00000b14 movzwl %ax, %r10d - 0x49, 0x29, 0xd2, //0x00000b18 subq %rdx, %r10 - //0x00000b1b LBB0_163 - 0x4d, 0x89, 0x10, //0x00000b1b movq %r10, (%r8) - //0x00000b1e LBB0_164 - 0x4d, 0x8b, 0x2c, 0x24, //0x00000b1e movq (%r12), %r13 - 0x49, 0x8b, 0x44, 0x24, 0x08, //0x00000b22 movq $8(%r12), %rax - 0x49, 0x39, 0xc2, //0x00000b27 cmpq %rax, %r10 - 0x0f, 0x83, 0x30, 0x00, 0x00, 0x00, //0x00000b2a jae LBB0_169 - 0x43, 0x8a, 0x4c, 0x15, 0x00, //0x00000b30 movb (%r13,%r10), %cl - 0x80, 0xf9, 0x0d, //0x00000b35 cmpb $13, %cl - 0x0f, 0x84, 0x22, 0x00, 0x00, 0x00, //0x00000b38 je LBB0_169 - 0x80, 0xf9, 0x20, //0x00000b3e cmpb $32, %cl - 0x0f, 0x84, 0x19, 0x00, 0x00, 0x00, //0x00000b41 je LBB0_169 - 0x80, 0xc1, 0xf7, //0x00000b47 addb $-9, %cl - 0x80, 0xf9, 0x01, //0x00000b4a cmpb $1, %cl - 0x0f, 0x86, 0x0d, 0x00, 0x00, 0x00, //0x00000b4d jbe LBB0_169 - 0x4c, 0x89, 0xd1, //0x00000b53 movq %r10, %rcx - 0xe9, 0xfa, 0x00, 0x00, 0x00, //0x00000b56 jmp LBB0_190 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000b5b .p2align 4, 0x90 - //0x00000b60 LBB0_169 - 0x49, 0x8d, 0x4a, 0x01, //0x00000b60 leaq $1(%r10), %rcx - 0x48, 0x39, 0xc1, //0x00000b64 cmpq %rax, %rcx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000b67 jae LBB0_173 - 0x41, 0x8a, 0x54, 0x0d, 0x00, //0x00000b6d movb (%r13,%rcx), %dl - 0x80, 0xfa, 0x0d, //0x00000b72 cmpb $13, %dl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000b75 je LBB0_173 - 0x80, 0xfa, 0x20, //0x00000b7b cmpb $32, %dl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x00000b7e je LBB0_173 - 0x80, 0xc2, 0xf7, //0x00000b84 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x00000b87 cmpb $1, %dl - 0x0f, 0x87, 0xc5, 0x00, 0x00, 0x00, //0x00000b8a ja LBB0_190 - //0x00000b90 .p2align 4, 0x90 - //0x00000b90 LBB0_173 - 0x49, 0x8d, 0x4a, 0x02, //0x00000b90 leaq $2(%r10), %rcx - 0x48, 0x39, 0xc1, //0x00000b94 cmpq %rax, %rcx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000b97 jae LBB0_177 - 0x41, 0x8a, 0x54, 0x0d, 0x00, //0x00000b9d movb (%r13,%rcx), %dl - 0x80, 0xfa, 0x0d, //0x00000ba2 cmpb $13, %dl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000ba5 je LBB0_177 - 0x80, 0xfa, 0x20, //0x00000bab cmpb $32, %dl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x00000bae je LBB0_177 - 0x80, 0xc2, 0xf7, //0x00000bb4 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x00000bb7 cmpb $1, %dl - 0x0f, 0x87, 0x95, 0x00, 0x00, 0x00, //0x00000bba ja LBB0_190 - //0x00000bc0 .p2align 4, 0x90 - //0x00000bc0 LBB0_177 - 0x49, 0x8d, 0x4a, 0x03, //0x00000bc0 leaq $3(%r10), %rcx - 0x48, 0x39, 0xc1, //0x00000bc4 cmpq %rax, %rcx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000bc7 jae LBB0_181 - 0x41, 0x8a, 0x54, 0x0d, 0x00, //0x00000bcd movb (%r13,%rcx), %dl - 0x80, 0xfa, 0x0d, //0x00000bd2 cmpb $13, %dl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00000bd5 je LBB0_181 - 0x80, 0xfa, 0x20, //0x00000bdb cmpb $32, %dl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x00000bde je LBB0_181 - 0x80, 0xc2, 0xf7, //0x00000be4 addb $-9, %dl - 0x80, 0xfa, 0x01, //0x00000be7 cmpb $1, %dl - 0x0f, 0x87, 0x65, 0x00, 0x00, 0x00, //0x00000bea ja LBB0_190 - //0x00000bf0 .p2align 4, 0x90 - //0x00000bf0 LBB0_181 - 0x49, 0x8d, 0x4a, 0x04, //0x00000bf0 leaq $4(%r10), %rcx - 0x48, 0x39, 0xc8, //0x00000bf4 cmpq %rcx, %rax - 0x0f, 0x86, 0x43, 0x3a, 0x00, 0x00, //0x00000bf7 jbe LBB0_867 - 0x48, 0x39, 0xc8, //0x00000bfd cmpq %rcx, %rax - 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00000c00 je LBB0_187 - 0x4a, 0x8d, 0x14, 0x28, //0x00000c06 leaq (%rax,%r13), %rdx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000c0a .p2align 4, 0x90 - //0x00000c10 LBB0_184 - 0x41, 0x0f, 0xbe, 0x74, 0x0d, 0x00, //0x00000c10 movsbl (%r13,%rcx), %esi - 0x83, 0xfe, 0x20, //0x00000c16 cmpl $32, %esi - 0x0f, 0x87, 0x2d, 0x00, 0x00, 0x00, //0x00000c19 ja LBB0_189 - 0x49, 0x0f, 0xa3, 0xf1, //0x00000c1f btq %rsi, %r9 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000c23 jae LBB0_189 - 0x48, 0x83, 0xc1, 0x01, //0x00000c29 addq $1, %rcx - 0x48, 0x39, 0xc8, //0x00000c2d cmpq %rcx, %rax - 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x00000c30 jne LBB0_184 - 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00000c36 jmp LBB0_188 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000c3b .p2align 4, 0x90 - //0x00000c40 LBB0_187 - 0x4c, 0x01, 0xe9, //0x00000c40 addq %r13, %rcx - 0x48, 0x89, 0xca, //0x00000c43 movq %rcx, %rdx - //0x00000c46 LBB0_188 - 0x4c, 0x29, 0xea, //0x00000c46 subq %r13, %rdx - 0x48, 0x89, 0xd1, //0x00000c49 movq %rdx, %rcx - //0x00000c4c LBB0_189 - 0x48, 0x39, 0xc1, //0x00000c4c cmpq %rax, %rcx - 0x0f, 0x83, 0xee, 0x39, 0x00, 0x00, //0x00000c4f jae LBB0_868 - //0x00000c55 LBB0_190 - 0x4c, 0x8d, 0x51, 0x01, //0x00000c55 leaq $1(%rcx), %r10 - 0x4d, 0x89, 0x10, //0x00000c59 movq %r10, (%r8) - 0x41, 0x8a, 0x44, 0x0d, 0x00, //0x00000c5c movb (%r13,%rcx), %al - 0x3c, 0x2c, //0x00000c61 cmpb $44, %al - 0x0f, 0x84, 0xf9, 0xf6, 0xff, 0xff, //0x00000c63 je LBB0_33 - 0xe9, 0x7f, 0x23, 0x00, 0x00, //0x00000c69 jmp LBB0_191 - //0x00000c6e LBB0_192 - 0x48, 0x83, 0xc0, 0x04, //0x00000c6e addq $4, %rax - 0x49, 0x3b, 0x07, //0x00000c72 cmpq (%r15), %rax - 0x0f, 0x87, 0xa3, 0xfe, 0xff, 0xff, //0x00000c75 ja LBB0_164 - 0xe9, 0x6e, 0x05, 0x00, 0x00, //0x00000c7b jmp LBB0_231 - //0x00000c80 LBB0_193 - 0x4d, 0x8b, 0x07, //0x00000c80 movq (%r15), %r8 - 0x4d, 0x89, 0xc6, //0x00000c83 movq %r8, %r14 - 0x4d, 0x29, 0xd6, //0x00000c86 subq %r10, %r14 - 0x49, 0x83, 0xfe, 0x20, //0x00000c89 cmpq $32, %r14 - 0x0f, 0x8c, 0x3e, 0x0f, 0x00, 0x00, //0x00000c8d jl LBB0_316 - 0x4e, 0x8d, 0x0c, 0x28, //0x00000c93 leaq (%rax,%r13), %r9 - 0x49, 0x29, 0xc0, //0x00000c97 subq %rax, %r8 - 0x41, 0xbf, 0x1f, 0x00, 0x00, 0x00, //0x00000c9a movl $31, %r15d - 0x45, 0x31, 0xf6, //0x00000ca0 xorl %r14d, %r14d - 0x45, 0x31, 0xdb, //0x00000ca3 xorl %r11d, %r11d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000ca6 .p2align 4, 0x90 - //0x00000cb0 LBB0_195 - 0xf3, 0x43, 0x0f, 0x6f, 0x54, 0x31, 0x01, //0x00000cb0 movdqu $1(%r9,%r14), %xmm2 - 0xf3, 0x43, 0x0f, 0x6f, 0x5c, 0x31, 0x11, //0x00000cb7 movdqu $17(%r9,%r14), %xmm3 - 0x66, 0x0f, 0x6f, 0xea, //0x00000cbe movdqa %xmm2, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00000cc2 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00000cc6 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x6f, 0xeb, //0x00000cca movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00000cce pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xdd, //0x00000cd2 pmovmskb %xmm5, %ebx - 0x48, 0xc1, 0xe3, 0x10, //0x00000cd6 shlq $16, %rbx - 0x48, 0x09, 0xf3, //0x00000cda orq %rsi, %rbx - 0x66, 0x0f, 0x74, 0xd1, //0x00000cdd pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xd2, //0x00000ce1 pmovmskb %xmm2, %edx - 0x66, 0x0f, 0x74, 0xd9, //0x00000ce5 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00000ce9 pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x10, //0x00000ced shlq $16, %rsi - 0x48, 0x09, 0xd6, //0x00000cf1 orq %rdx, %rsi - 0x48, 0x89, 0xf2, //0x00000cf4 movq %rsi, %rdx - 0x4c, 0x09, 0xda, //0x00000cf7 orq %r11, %rdx - 0x0f, 0x84, 0x40, 0x00, 0x00, 0x00, //0x00000cfa je LBB0_197 - 0x44, 0x89, 0xda, //0x00000d00 movl %r11d, %edx - 0xf7, 0xd2, //0x00000d03 notl %edx - 0x21, 0xf2, //0x00000d05 andl %esi, %edx - 0x8d, 0x3c, 0x12, //0x00000d07 leal (%rdx,%rdx), %edi - 0x44, 0x09, 0xdf, //0x00000d0a orl %r11d, %edi - 0x89, 0xf9, //0x00000d0d movl %edi, %ecx - 0xf7, 0xd1, //0x00000d0f notl %ecx - 0x21, 0xf1, //0x00000d11 andl %esi, %ecx - 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000d13 andl $-1431655766, %ecx - 0x45, 0x31, 0xdb, //0x00000d19 xorl %r11d, %r11d - 0x01, 0xd1, //0x00000d1c addl %edx, %ecx - 0x41, 0x0f, 0x92, 0xc3, //0x00000d1e setb %r11b - 0x01, 0xc9, //0x00000d22 addl %ecx, %ecx - 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00000d24 xorl $1431655765, %ecx - 0x21, 0xf9, //0x00000d2a andl %edi, %ecx - 0xf7, 0xd1, //0x00000d2c notl %ecx - 0x21, 0xcb, //0x00000d2e andl %ecx, %ebx - 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00000d30 jmp LBB0_198 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000d35 .p2align 4, 0x90 - //0x00000d40 LBB0_197 - 0x45, 0x31, 0xdb, //0x00000d40 xorl %r11d, %r11d - //0x00000d43 LBB0_198 - 0x48, 0x85, 0xdb, //0x00000d43 testq %rbx, %rbx - 0x0f, 0x85, 0x15, 0x09, 0x00, 0x00, //0x00000d46 jne LBB0_259 - 0x49, 0x83, 0xc6, 0x20, //0x00000d4c addq $32, %r14 - 0x4b, 0x8d, 0x0c, 0x38, //0x00000d50 leaq (%r8,%r15), %rcx - 0x48, 0x83, 0xc1, 0xe0, //0x00000d54 addq $-32, %rcx - 0x49, 0x83, 0xc7, 0xe0, //0x00000d58 addq $-32, %r15 - 0x48, 0x83, 0xf9, 0x3f, //0x00000d5c cmpq $63, %rcx - 0x0f, 0x8f, 0x4a, 0xff, 0xff, 0xff, //0x00000d60 jg LBB0_195 - 0x4d, 0x85, 0xdb, //0x00000d66 testq %r11, %r11 - 0x0f, 0x85, 0x2c, 0x10, 0x00, 0x00, //0x00000d69 jne LBB0_339 - 0x4b, 0x8d, 0x04, 0x0e, //0x00000d6f leaq (%r14,%r9), %rax - 0x48, 0x83, 0xc0, 0x01, //0x00000d73 addq $1, %rax - 0x49, 0xf7, 0xd6, //0x00000d77 notq %r14 - 0x4d, 0x01, 0xc6, //0x00000d7a addq %r8, %r14 - //0x00000d7d LBB0_202 - 0x4c, 0x8b, 0x7d, 0xc0, //0x00000d7d movq $-64(%rbp), %r15 - //0x00000d81 LBB0_203 - 0x4c, 0x8b, 0x5d, 0xa8, //0x00000d81 movq $-88(%rbp), %r11 - 0x4d, 0x85, 0xf6, //0x00000d85 testq %r14, %r14 - 0x4c, 0x8b, 0x45, 0xc8, //0x00000d88 movq $-56(%rbp), %r8 - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000d8c movabsq $4294977024, %r9 - 0x0f, 0x8f, 0xb4, 0x09, 0x00, 0x00, //0x00000d96 jg LBB0_262 - 0xe9, 0x7d, 0xfd, 0xff, 0xff, //0x00000d9c jmp LBB0_164 - //0x00000da1 LBB0_204 - 0x49, 0x8b, 0x07, //0x00000da1 movq (%r15), %rax - 0x4c, 0x29, 0xd0, //0x00000da4 subq %r10, %rax - 0x4d, 0x01, 0xd5, //0x00000da7 addq %r10, %r13 - 0x45, 0x31, 0xc9, //0x00000daa xorl %r9d, %r9d - 0x45, 0x31, 0xc0, //0x00000dad xorl %r8d, %r8d - 0x45, 0x31, 0xdb, //0x00000db0 xorl %r11d, %r11d - 0x31, 0xd2, //0x00000db3 xorl %edx, %edx - 0xe9, 0x73, 0x00, 0x00, 0x00, //0x00000db5 jmp LBB0_206 - //0x00000dba LBB0_205 - 0x49, 0xc1, 0xfe, 0x3f, //0x00000dba sarq $63, %r14 - 0x4c, 0x89, 0xd1, //0x00000dbe movq %r10, %rcx - 0x48, 0xd1, 0xe9, //0x00000dc1 shrq %rcx - 0x48, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000dc4 movabsq $6148914691236517205, %rsi - 0x48, 0x21, 0xf1, //0x00000dce andq %rsi, %rcx - 0x49, 0x29, 0xca, //0x00000dd1 subq %rcx, %r10 - 0x4c, 0x89, 0xd1, //0x00000dd4 movq %r10, %rcx - 0x48, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00000dd7 movabsq $3689348814741910323, %rax - 0x48, 0x21, 0xc1, //0x00000de1 andq %rax, %rcx - 0x49, 0xc1, 0xea, 0x02, //0x00000de4 shrq $2, %r10 - 0x49, 0x21, 0xc2, //0x00000de8 andq %rax, %r10 - 0x49, 0x01, 0xca, //0x00000deb addq %rcx, %r10 - 0x4c, 0x89, 0xd1, //0x00000dee movq %r10, %rcx - 0x48, 0xc1, 0xe9, 0x04, //0x00000df1 shrq $4, %rcx - 0x4c, 0x01, 0xd1, //0x00000df5 addq %r10, %rcx - 0x48, 0xb8, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00000df8 movabsq $1085102592571150095, %rax - 0x48, 0x21, 0xc1, //0x00000e02 andq %rax, %rcx - 0x48, 0xb8, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00000e05 movabsq $72340172838076673, %rax - 0x48, 0x0f, 0xaf, 0xc8, //0x00000e0f imulq %rax, %rcx - 0x48, 0xc1, 0xe9, 0x38, //0x00000e13 shrq $56, %rcx - 0x49, 0x01, 0xcb, //0x00000e17 addq %rcx, %r11 - 0x49, 0x83, 0xc5, 0x40, //0x00000e1a addq $64, %r13 - 0x48, 0x8b, 0x45, 0xd0, //0x00000e1e movq $-48(%rbp), %rax - 0x48, 0x83, 0xc0, 0xc0, //0x00000e22 addq $-64, %rax - 0x4d, 0x89, 0xf1, //0x00000e26 movq %r14, %r9 - 0x4c, 0x8b, 0x45, 0xb8, //0x00000e29 movq $-72(%rbp), %r8 - //0x00000e2d LBB0_206 - 0x48, 0x83, 0xf8, 0x40, //0x00000e2d cmpq $64, %rax - 0x48, 0x89, 0x45, 0xd0, //0x00000e31 movq %rax, $-48(%rbp) - 0x0f, 0x8c, 0x46, 0x02, 0x00, 0x00, //0x00000e35 jl LBB0_214 - //0x00000e3b LBB0_207 - 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x00, //0x00000e3b movdqu (%r13), %xmm2 - 0xf3, 0x41, 0x0f, 0x6f, 0x6d, 0x10, //0x00000e41 movdqu $16(%r13), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x7d, 0x20, //0x00000e47 movdqu $32(%r13), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x75, 0x30, //0x00000e4d movdqu $48(%r13), %xmm6 - 0x66, 0x0f, 0x6f, 0xda, //0x00000e53 movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00000e57 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xc3, //0x00000e5b pmovmskb %xmm3, %eax - 0x66, 0x0f, 0x6f, 0xdd, //0x00000e5f movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00000e63 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00000e67 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdf, //0x00000e6b movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00000e6f pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00000e73 pmovmskb %xmm3, %edi - 0x66, 0x0f, 0x6f, 0xde, //0x00000e77 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00000e7b pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xdb, //0x00000e7f pmovmskb %xmm3, %ebx - 0x48, 0xc1, 0xe3, 0x30, //0x00000e83 shlq $48, %rbx - 0x48, 0xc1, 0xe7, 0x20, //0x00000e87 shlq $32, %rdi - 0x48, 0x09, 0xdf, //0x00000e8b orq %rbx, %rdi - 0x48, 0xc1, 0xe6, 0x10, //0x00000e8e shlq $16, %rsi - 0x48, 0x09, 0xfe, //0x00000e92 orq %rdi, %rsi - 0x48, 0x09, 0xf0, //0x00000e95 orq %rsi, %rax - 0x48, 0x89, 0xc6, //0x00000e98 movq %rax, %rsi - 0x4c, 0x09, 0xc6, //0x00000e9b orq %r8, %rsi - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00000e9e jne LBB0_209 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000ea4 movq $-1, %rax - 0x31, 0xc9, //0x00000eab xorl %ecx, %ecx - 0x48, 0x89, 0x4d, 0xb8, //0x00000ead movq %rcx, $-72(%rbp) - 0xe9, 0x48, 0x00, 0x00, 0x00, //0x00000eb1 jmp LBB0_210 - //0x00000eb6 LBB0_209 - 0x4c, 0x89, 0xc6, //0x00000eb6 movq %r8, %rsi - 0x48, 0xf7, 0xd6, //0x00000eb9 notq %rsi - 0x48, 0x21, 0xc6, //0x00000ebc andq %rax, %rsi - 0x48, 0x8d, 0x1c, 0x36, //0x00000ebf leaq (%rsi,%rsi), %rbx - 0x4c, 0x09, 0xc3, //0x00000ec3 orq %r8, %rbx - 0x48, 0x89, 0xdf, //0x00000ec6 movq %rbx, %rdi - 0x48, 0xf7, 0xd7, //0x00000ec9 notq %rdi - 0x48, 0xb9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000ecc movabsq $-6148914691236517206, %rcx - 0x48, 0x21, 0xc8, //0x00000ed6 andq %rcx, %rax - 0x48, 0x21, 0xf8, //0x00000ed9 andq %rdi, %rax - 0x31, 0xc9, //0x00000edc xorl %ecx, %ecx - 0x48, 0x01, 0xf0, //0x00000ede addq %rsi, %rax - 0x0f, 0x92, 0xc1, //0x00000ee1 setb %cl - 0x48, 0x89, 0x4d, 0xb8, //0x00000ee4 movq %rcx, $-72(%rbp) - 0x48, 0x01, 0xc0, //0x00000ee8 addq %rax, %rax - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000eeb movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xc8, //0x00000ef5 xorq %rcx, %rax - 0x48, 0x21, 0xd8, //0x00000ef8 andq %rbx, %rax - 0x48, 0xf7, 0xd0, //0x00000efb notq %rax - //0x00000efe LBB0_210 - 0x66, 0x0f, 0x6f, 0xde, //0x00000efe movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00000f02 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00000f06 pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x30, //0x00000f0a shlq $48, %rsi - 0x66, 0x0f, 0x6f, 0xdf, //0x00000f0e movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00000f12 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00000f16 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe7, 0x20, //0x00000f1a shlq $32, %rdi - 0x48, 0x09, 0xf7, //0x00000f1e orq %rsi, %rdi - 0x66, 0x0f, 0x6f, 0xdd, //0x00000f21 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00000f25 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00000f29 pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x10, //0x00000f2d shlq $16, %rsi - 0x48, 0x09, 0xfe, //0x00000f31 orq %rdi, %rsi - 0x66, 0x0f, 0x6f, 0xda, //0x00000f34 movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00000f38 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00000f3c pmovmskb %xmm3, %edi - 0x48, 0x09, 0xf7, //0x00000f40 orq %rsi, %rdi - 0x48, 0x21, 0xc7, //0x00000f43 andq %rax, %rdi - 0x66, 0x48, 0x0f, 0x6e, 0xdf, //0x00000f46 movq %rdi, %xmm3 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd9, 0x00, //0x00000f4b pclmulqdq $0, %xmm9, %xmm3 - 0x66, 0x49, 0x0f, 0x7e, 0xde, //0x00000f52 movq %xmm3, %r14 - 0x4d, 0x31, 0xce, //0x00000f57 xorq %r9, %r14 - 0x66, 0x0f, 0x6f, 0xda, //0x00000f5a movdqa %xmm2, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xda, //0x00000f5e pcmpeqb %xmm10, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x00000f63 pmovmskb %xmm3, %r10d - 0x66, 0x0f, 0x6f, 0xdd, //0x00000f68 movdqa %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xda, //0x00000f6c pcmpeqb %xmm10, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00000f71 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdf, //0x00000f75 movdqa %xmm7, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xda, //0x00000f79 pcmpeqb %xmm10, %xmm3 - 0x66, 0x0f, 0xd7, 0xdb, //0x00000f7e pmovmskb %xmm3, %ebx - 0x66, 0x0f, 0x6f, 0xde, //0x00000f82 movdqa %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xda, //0x00000f86 pcmpeqb %xmm10, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00000f8b pmovmskb %xmm3, %ecx - 0x48, 0xc1, 0xe1, 0x30, //0x00000f8f shlq $48, %rcx - 0x48, 0xc1, 0xe3, 0x20, //0x00000f93 shlq $32, %rbx - 0x48, 0x09, 0xcb, //0x00000f97 orq %rcx, %rbx - 0x48, 0xc1, 0xe6, 0x10, //0x00000f9a shlq $16, %rsi - 0x48, 0x09, 0xde, //0x00000f9e orq %rbx, %rsi - 0x49, 0x09, 0xf2, //0x00000fa1 orq %rsi, %r10 - 0x4d, 0x89, 0xf1, //0x00000fa4 movq %r14, %r9 - 0x49, 0xf7, 0xd1, //0x00000fa7 notq %r9 - 0x4d, 0x21, 0xca, //0x00000faa andq %r9, %r10 - 0x66, 0x0f, 0x74, 0xd4, //0x00000fad pcmpeqb %xmm4, %xmm2 - 0x66, 0x0f, 0xd7, 0xf2, //0x00000fb1 pmovmskb %xmm2, %esi - 0x66, 0x0f, 0x74, 0xec, //0x00000fb5 pcmpeqb %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xdd, //0x00000fb9 pmovmskb %xmm5, %ebx - 0x66, 0x0f, 0x74, 0xfc, //0x00000fbd pcmpeqb %xmm4, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x00000fc1 pmovmskb %xmm7, %edi - 0x66, 0x0f, 0x74, 0xf4, //0x00000fc5 pcmpeqb %xmm4, %xmm6 - 0x66, 0x0f, 0xd7, 0xce, //0x00000fc9 pmovmskb %xmm6, %ecx - 0x48, 0xc1, 0xe1, 0x30, //0x00000fcd shlq $48, %rcx - 0x48, 0xc1, 0xe7, 0x20, //0x00000fd1 shlq $32, %rdi - 0x48, 0x09, 0xcf, //0x00000fd5 orq %rcx, %rdi - 0x48, 0xc1, 0xe3, 0x10, //0x00000fd8 shlq $16, %rbx - 0x48, 0x09, 0xfb, //0x00000fdc orq %rdi, %rbx - 0x48, 0x09, 0xde, //0x00000fdf orq %rbx, %rsi - 0x4c, 0x21, 0xce, //0x00000fe2 andq %r9, %rsi - 0x0f, 0x84, 0xcf, 0xfd, 0xff, 0xff, //0x00000fe5 je LBB0_205 - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000feb movabsq $4294977024, %r9 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000ff5 .p2align 4, 0x90 - //0x00001000 LBB0_212 - 0x48, 0x8d, 0x5e, 0xff, //0x00001000 leaq $-1(%rsi), %rbx - 0x48, 0x89, 0xd9, //0x00001004 movq %rbx, %rcx - 0x4c, 0x21, 0xd1, //0x00001007 andq %r10, %rcx - 0x48, 0x89, 0xcf, //0x0000100a movq %rcx, %rdi - 0x48, 0xd1, 0xef, //0x0000100d shrq %rdi - 0x49, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001010 movabsq $6148914691236517205, %r8 - 0x4c, 0x21, 0xc7, //0x0000101a andq %r8, %rdi - 0x48, 0x29, 0xf9, //0x0000101d subq %rdi, %rcx - 0x48, 0x89, 0xcf, //0x00001020 movq %rcx, %rdi - 0x48, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001023 movabsq $3689348814741910323, %rax - 0x48, 0x21, 0xc7, //0x0000102d andq %rax, %rdi - 0x48, 0xc1, 0xe9, 0x02, //0x00001030 shrq $2, %rcx - 0x48, 0x21, 0xc1, //0x00001034 andq %rax, %rcx - 0x48, 0x01, 0xf9, //0x00001037 addq %rdi, %rcx - 0x48, 0x89, 0xcf, //0x0000103a movq %rcx, %rdi - 0x48, 0xc1, 0xef, 0x04, //0x0000103d shrq $4, %rdi - 0x48, 0x01, 0xcf, //0x00001041 addq %rcx, %rdi - 0x48, 0xb8, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001044 movabsq $1085102592571150095, %rax - 0x48, 0x21, 0xc7, //0x0000104e andq %rax, %rdi - 0x48, 0xb8, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00001051 movabsq $72340172838076673, %rax - 0x48, 0x0f, 0xaf, 0xf8, //0x0000105b imulq %rax, %rdi - 0x48, 0xc1, 0xef, 0x38, //0x0000105f shrq $56, %rdi - 0x4c, 0x01, 0xdf, //0x00001063 addq %r11, %rdi - 0x48, 0x39, 0xd7, //0x00001066 cmpq %rdx, %rdi - 0x0f, 0x86, 0xc2, 0x05, 0x00, 0x00, //0x00001069 jbe LBB0_258 - 0x48, 0x83, 0xc2, 0x01, //0x0000106f addq $1, %rdx - 0x48, 0x21, 0xde, //0x00001073 andq %rbx, %rsi - 0x0f, 0x85, 0x84, 0xff, 0xff, 0xff, //0x00001076 jne LBB0_212 - 0xe9, 0x39, 0xfd, 0xff, 0xff, //0x0000107c jmp LBB0_205 - //0x00001081 LBB0_214 - 0x48, 0x85, 0xc0, //0x00001081 testq %rax, %rax - 0x0f, 0x8e, 0xfa, 0x0c, 0x00, 0x00, //0x00001084 jle LBB0_337 - 0x4c, 0x89, 0xc3, //0x0000108a movq %r8, %rbx - 0xf3, 0x44, 0x0f, 0x7f, 0x45, 0x80, //0x0000108d movdqu %xmm8, $-128(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x70, 0xff, 0xff, 0xff, //0x00001093 movdqu %xmm8, $-144(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x0000109c movdqu %xmm8, $-160(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x000010a5 movdqu %xmm8, $-176(%rbp) - 0x44, 0x89, 0xe8, //0x000010ae movl %r13d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x000010b1 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x000010b6 cmpl $4033, %eax - 0x0f, 0x82, 0x3d, 0x00, 0x00, 0x00, //0x000010bb jb LBB0_218 - 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x000010c1 cmpq $32, $-48(%rbp) - 0x0f, 0x82, 0x42, 0x00, 0x00, 0x00, //0x000010c6 jb LBB0_219 - 0x41, 0x0f, 0x10, 0x55, 0x00, //0x000010cc movups (%r13), %xmm2 - 0x0f, 0x11, 0x95, 0x50, 0xff, 0xff, 0xff, //0x000010d1 movups %xmm2, $-176(%rbp) - 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x10, //0x000010d8 movdqu $16(%r13), %xmm2 - 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x000010de movdqu %xmm2, $-160(%rbp) - 0x49, 0x83, 0xc5, 0x20, //0x000010e6 addq $32, %r13 - 0x48, 0x8b, 0x45, 0xd0, //0x000010ea movq $-48(%rbp), %rax - 0x48, 0x8d, 0x70, 0xe0, //0x000010ee leaq $-32(%rax), %rsi - 0x48, 0x8d, 0x85, 0x70, 0xff, 0xff, 0xff, //0x000010f2 leaq $-144(%rbp), %rax - 0xe9, 0x1b, 0x00, 0x00, 0x00, //0x000010f9 jmp LBB0_220 - //0x000010fe LBB0_218 - 0x4c, 0x8b, 0x7d, 0xc0, //0x000010fe movq $-64(%rbp), %r15 - 0x4c, 0x8b, 0x65, 0xb0, //0x00001102 movq $-80(%rbp), %r12 - 0x49, 0x89, 0xd8, //0x00001106 movq %rbx, %r8 - 0xe9, 0x2d, 0xfd, 0xff, 0xff, //0x00001109 jmp LBB0_207 - //0x0000110e LBB0_219 - 0x48, 0x8d, 0x85, 0x50, 0xff, 0xff, 0xff, //0x0000110e leaq $-176(%rbp), %rax - 0x48, 0x8b, 0x75, 0xd0, //0x00001115 movq $-48(%rbp), %rsi - //0x00001119 LBB0_220 - 0x48, 0x83, 0xfe, 0x10, //0x00001119 cmpq $16, %rsi - 0x0f, 0x82, 0x4b, 0x00, 0x00, 0x00, //0x0000111d jb LBB0_221 - 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x00, //0x00001123 movdqu (%r13), %xmm2 - 0xf3, 0x0f, 0x7f, 0x10, //0x00001129 movdqu %xmm2, (%rax) - 0x49, 0x83, 0xc5, 0x10, //0x0000112d addq $16, %r13 - 0x48, 0x83, 0xc0, 0x10, //0x00001131 addq $16, %rax - 0x48, 0x83, 0xc6, 0xf0, //0x00001135 addq $-16, %rsi - 0x48, 0x83, 0xfe, 0x08, //0x00001139 cmpq $8, %rsi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x0000113d jae LBB0_228 - //0x00001143 LBB0_222 - 0x48, 0x83, 0xfe, 0x04, //0x00001143 cmpq $4, %rsi - 0x0f, 0x8c, 0x48, 0x00, 0x00, 0x00, //0x00001147 jl LBB0_223 - //0x0000114d LBB0_229 - 0x41, 0x8b, 0x4d, 0x00, //0x0000114d movl (%r13), %ecx - 0x89, 0x08, //0x00001151 movl %ecx, (%rax) - 0x49, 0x83, 0xc5, 0x04, //0x00001153 addq $4, %r13 - 0x48, 0x83, 0xc0, 0x04, //0x00001157 addq $4, %rax - 0x48, 0x83, 0xc6, 0xfc, //0x0000115b addq $-4, %rsi - 0x48, 0x83, 0xfe, 0x02, //0x0000115f cmpq $2, %rsi - 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x00001163 jae LBB0_224 - 0xe9, 0x45, 0x00, 0x00, 0x00, //0x00001169 jmp LBB0_225 - //0x0000116e LBB0_221 - 0x48, 0x83, 0xfe, 0x08, //0x0000116e cmpq $8, %rsi - 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x00001172 jb LBB0_222 - //0x00001178 LBB0_228 - 0x49, 0x8b, 0x4d, 0x00, //0x00001178 movq (%r13), %rcx - 0x48, 0x89, 0x08, //0x0000117c movq %rcx, (%rax) - 0x49, 0x83, 0xc5, 0x08, //0x0000117f addq $8, %r13 - 0x48, 0x83, 0xc0, 0x08, //0x00001183 addq $8, %rax - 0x48, 0x83, 0xc6, 0xf8, //0x00001187 addq $-8, %rsi - 0x48, 0x83, 0xfe, 0x04, //0x0000118b cmpq $4, %rsi - 0x0f, 0x8d, 0xb8, 0xff, 0xff, 0xff, //0x0000118f jge LBB0_229 - //0x00001195 LBB0_223 - 0x48, 0x83, 0xfe, 0x02, //0x00001195 cmpq $2, %rsi - 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00001199 jb LBB0_225 - //0x0000119f LBB0_224 - 0x41, 0x0f, 0xb7, 0x4d, 0x00, //0x0000119f movzwl (%r13), %ecx - 0x66, 0x89, 0x08, //0x000011a4 movw %cx, (%rax) - 0x49, 0x83, 0xc5, 0x02, //0x000011a7 addq $2, %r13 - 0x48, 0x83, 0xc0, 0x02, //0x000011ab addq $2, %rax - 0x48, 0x83, 0xc6, 0xfe, //0x000011af addq $-2, %rsi - //0x000011b3 LBB0_225 - 0x4c, 0x89, 0xef, //0x000011b3 movq %r13, %rdi - 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x000011b6 leaq $-176(%rbp), %r13 - 0x48, 0x85, 0xf6, //0x000011bd testq %rsi, %rsi - 0x4c, 0x8b, 0x7d, 0xc0, //0x000011c0 movq $-64(%rbp), %r15 - 0x4c, 0x8b, 0x65, 0xb0, //0x000011c4 movq $-80(%rbp), %r12 - 0x49, 0x89, 0xd8, //0x000011c8 movq %rbx, %r8 - 0x0f, 0x84, 0x6a, 0xfc, 0xff, 0xff, //0x000011cb je LBB0_207 - 0x8a, 0x0f, //0x000011d1 movb (%rdi), %cl - 0x88, 0x08, //0x000011d3 movb %cl, (%rax) - 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x000011d5 leaq $-176(%rbp), %r13 - 0xe9, 0x5a, 0xfc, 0xff, 0xff, //0x000011dc jmp LBB0_207 - //0x000011e1 LBB0_230 - 0x48, 0x83, 0xc0, 0x05, //0x000011e1 addq $5, %rax - 0x49, 0x3b, 0x07, //0x000011e5 cmpq (%r15), %rax - 0x0f, 0x87, 0x30, 0xf9, 0xff, 0xff, //0x000011e8 ja LBB0_164 - //0x000011ee LBB0_231 - 0x49, 0x89, 0x00, //0x000011ee movq %rax, (%r8) - 0x49, 0x89, 0xc2, //0x000011f1 movq %rax, %r10 - 0xe9, 0x25, 0xf9, 0xff, 0xff, //0x000011f4 jmp LBB0_164 - //0x000011f9 LBB0_232 - 0x49, 0x8b, 0x07, //0x000011f9 movq (%r15), %rax - 0x4c, 0x29, 0xd0, //0x000011fc subq %r10, %rax - 0x4d, 0x01, 0xd5, //0x000011ff addq %r10, %r13 - 0x45, 0x31, 0xc9, //0x00001202 xorl %r9d, %r9d - 0x45, 0x31, 0xc0, //0x00001205 xorl %r8d, %r8d - 0x45, 0x31, 0xdb, //0x00001208 xorl %r11d, %r11d - 0x31, 0xd2, //0x0000120b xorl %edx, %edx - 0xe9, 0x73, 0x00, 0x00, 0x00, //0x0000120d jmp LBB0_234 - //0x00001212 LBB0_233 - 0x49, 0xc1, 0xfe, 0x3f, //0x00001212 sarq $63, %r14 - 0x4c, 0x89, 0xd1, //0x00001216 movq %r10, %rcx - 0x48, 0xd1, 0xe9, //0x00001219 shrq %rcx - 0x48, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000121c movabsq $6148914691236517205, %rsi - 0x48, 0x21, 0xf1, //0x00001226 andq %rsi, %rcx - 0x49, 0x29, 0xca, //0x00001229 subq %rcx, %r10 - 0x4c, 0x89, 0xd1, //0x0000122c movq %r10, %rcx - 0x48, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x0000122f movabsq $3689348814741910323, %rax - 0x48, 0x21, 0xc1, //0x00001239 andq %rax, %rcx - 0x49, 0xc1, 0xea, 0x02, //0x0000123c shrq $2, %r10 - 0x49, 0x21, 0xc2, //0x00001240 andq %rax, %r10 - 0x49, 0x01, 0xca, //0x00001243 addq %rcx, %r10 - 0x4c, 0x89, 0xd1, //0x00001246 movq %r10, %rcx - 0x48, 0xc1, 0xe9, 0x04, //0x00001249 shrq $4, %rcx - 0x4c, 0x01, 0xd1, //0x0000124d addq %r10, %rcx - 0x48, 0xb8, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001250 movabsq $1085102592571150095, %rax - 0x48, 0x21, 0xc1, //0x0000125a andq %rax, %rcx - 0x48, 0xb8, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x0000125d movabsq $72340172838076673, %rax - 0x48, 0x0f, 0xaf, 0xc8, //0x00001267 imulq %rax, %rcx - 0x48, 0xc1, 0xe9, 0x38, //0x0000126b shrq $56, %rcx - 0x49, 0x01, 0xcb, //0x0000126f addq %rcx, %r11 - 0x49, 0x83, 0xc5, 0x40, //0x00001272 addq $64, %r13 - 0x48, 0x8b, 0x45, 0xd0, //0x00001276 movq $-48(%rbp), %rax - 0x48, 0x83, 0xc0, 0xc0, //0x0000127a addq $-64, %rax - 0x4d, 0x89, 0xf1, //0x0000127e movq %r14, %r9 - 0x4c, 0x8b, 0x45, 0xb8, //0x00001281 movq $-72(%rbp), %r8 - //0x00001285 LBB0_234 - 0x48, 0x83, 0xf8, 0x40, //0x00001285 cmpq $64, %rax - 0x48, 0x89, 0x45, 0xd0, //0x00001289 movq %rax, $-48(%rbp) - 0x0f, 0x8c, 0x3e, 0x02, 0x00, 0x00, //0x0000128d jl LBB0_242 - //0x00001293 LBB0_235 - 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x00, //0x00001293 movdqu (%r13), %xmm2 - 0xf3, 0x41, 0x0f, 0x6f, 0x6d, 0x10, //0x00001299 movdqu $16(%r13), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x7d, 0x20, //0x0000129f movdqu $32(%r13), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x75, 0x30, //0x000012a5 movdqu $48(%r13), %xmm6 - 0x66, 0x0f, 0x6f, 0xda, //0x000012ab movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x000012af pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xc3, //0x000012b3 pmovmskb %xmm3, %eax - 0x66, 0x0f, 0x6f, 0xdd, //0x000012b7 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x000012bb pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x000012bf pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdf, //0x000012c3 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x000012c7 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x000012cb pmovmskb %xmm3, %edi - 0x66, 0x0f, 0x6f, 0xde, //0x000012cf movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x000012d3 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xdb, //0x000012d7 pmovmskb %xmm3, %ebx - 0x48, 0xc1, 0xe3, 0x30, //0x000012db shlq $48, %rbx - 0x48, 0xc1, 0xe7, 0x20, //0x000012df shlq $32, %rdi - 0x48, 0x09, 0xdf, //0x000012e3 orq %rbx, %rdi - 0x48, 0xc1, 0xe6, 0x10, //0x000012e6 shlq $16, %rsi - 0x48, 0x09, 0xfe, //0x000012ea orq %rdi, %rsi - 0x48, 0x09, 0xf0, //0x000012ed orq %rsi, %rax - 0x48, 0x89, 0xc6, //0x000012f0 movq %rax, %rsi - 0x4c, 0x09, 0xc6, //0x000012f3 orq %r8, %rsi - 0x0f, 0x85, 0x0e, 0x00, 0x00, 0x00, //0x000012f6 jne LBB0_237 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000012fc movq $-1, %rax - 0x31, 0xff, //0x00001303 xorl %edi, %edi - 0xe9, 0x45, 0x00, 0x00, 0x00, //0x00001305 jmp LBB0_238 - //0x0000130a LBB0_237 - 0x4c, 0x89, 0xc6, //0x0000130a movq %r8, %rsi - 0x48, 0xf7, 0xd6, //0x0000130d notq %rsi - 0x48, 0x21, 0xc6, //0x00001310 andq %rax, %rsi - 0x48, 0x8d, 0x1c, 0x36, //0x00001313 leaq (%rsi,%rsi), %rbx - 0x4c, 0x09, 0xc3, //0x00001317 orq %r8, %rbx - 0x48, 0x89, 0xdf, //0x0000131a movq %rbx, %rdi - 0x48, 0xf7, 0xd7, //0x0000131d notq %rdi - 0x48, 0xb9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001320 movabsq $-6148914691236517206, %rcx - 0x48, 0x21, 0xc8, //0x0000132a andq %rcx, %rax - 0x48, 0x21, 0xf8, //0x0000132d andq %rdi, %rax - 0x31, 0xff, //0x00001330 xorl %edi, %edi - 0x48, 0x01, 0xf0, //0x00001332 addq %rsi, %rax - 0x40, 0x0f, 0x92, 0xc7, //0x00001335 setb %dil - 0x48, 0x01, 0xc0, //0x00001339 addq %rax, %rax - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000133c movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xc8, //0x00001346 xorq %rcx, %rax - 0x48, 0x21, 0xd8, //0x00001349 andq %rbx, %rax - 0x48, 0xf7, 0xd0, //0x0000134c notq %rax - //0x0000134f LBB0_238 - 0x48, 0x89, 0x7d, 0xb8, //0x0000134f movq %rdi, $-72(%rbp) - 0x66, 0x0f, 0x6f, 0xde, //0x00001353 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001357 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x0000135b pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x30, //0x0000135f shlq $48, %rsi - 0x66, 0x0f, 0x6f, 0xdf, //0x00001363 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001367 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x0000136b pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe7, 0x20, //0x0000136f shlq $32, %rdi - 0x48, 0x09, 0xf7, //0x00001373 orq %rsi, %rdi - 0x66, 0x0f, 0x6f, 0xdd, //0x00001376 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x0000137a pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x0000137e pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x10, //0x00001382 shlq $16, %rsi - 0x48, 0x09, 0xfe, //0x00001386 orq %rdi, %rsi - 0x66, 0x0f, 0x6f, 0xda, //0x00001389 movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x0000138d pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00001391 pmovmskb %xmm3, %edi - 0x48, 0x09, 0xf7, //0x00001395 orq %rsi, %rdi - 0x48, 0x21, 0xc7, //0x00001398 andq %rax, %rdi - 0x66, 0x48, 0x0f, 0x6e, 0xdf, //0x0000139b movq %rdi, %xmm3 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd9, 0x00, //0x000013a0 pclmulqdq $0, %xmm9, %xmm3 - 0x66, 0x49, 0x0f, 0x7e, 0xde, //0x000013a7 movq %xmm3, %r14 - 0x4d, 0x31, 0xce, //0x000013ac xorq %r9, %r14 - 0x66, 0x0f, 0x6f, 0xda, //0x000013af movdqa %xmm2, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x000013b3 pcmpeqb %xmm11, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x000013b8 pmovmskb %xmm3, %r10d - 0x66, 0x0f, 0x6f, 0xdd, //0x000013bd movdqa %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x000013c1 pcmpeqb %xmm11, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x000013c6 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdf, //0x000013ca movdqa %xmm7, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x000013ce pcmpeqb %xmm11, %xmm3 - 0x66, 0x0f, 0xd7, 0xdb, //0x000013d3 pmovmskb %xmm3, %ebx - 0x66, 0x0f, 0x6f, 0xde, //0x000013d7 movdqa %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x000013db pcmpeqb %xmm11, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x000013e0 pmovmskb %xmm3, %ecx - 0x48, 0xc1, 0xe1, 0x30, //0x000013e4 shlq $48, %rcx - 0x48, 0xc1, 0xe3, 0x20, //0x000013e8 shlq $32, %rbx - 0x48, 0x09, 0xcb, //0x000013ec orq %rcx, %rbx - 0x48, 0xc1, 0xe6, 0x10, //0x000013ef shlq $16, %rsi - 0x48, 0x09, 0xde, //0x000013f3 orq %rbx, %rsi - 0x49, 0x09, 0xf2, //0x000013f6 orq %rsi, %r10 - 0x4d, 0x89, 0xf1, //0x000013f9 movq %r14, %r9 - 0x49, 0xf7, 0xd1, //0x000013fc notq %r9 - 0x4d, 0x21, 0xca, //0x000013ff andq %r9, %r10 - 0x66, 0x41, 0x0f, 0x74, 0xd4, //0x00001402 pcmpeqb %xmm12, %xmm2 - 0x66, 0x0f, 0xd7, 0xf2, //0x00001407 pmovmskb %xmm2, %esi - 0x66, 0x41, 0x0f, 0x74, 0xec, //0x0000140b pcmpeqb %xmm12, %xmm5 - 0x66, 0x0f, 0xd7, 0xdd, //0x00001410 pmovmskb %xmm5, %ebx - 0x66, 0x41, 0x0f, 0x74, 0xfc, //0x00001414 pcmpeqb %xmm12, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x00001419 pmovmskb %xmm7, %edi - 0x66, 0x41, 0x0f, 0x74, 0xf4, //0x0000141d pcmpeqb %xmm12, %xmm6 - 0x66, 0x0f, 0xd7, 0xce, //0x00001422 pmovmskb %xmm6, %ecx - 0x48, 0xc1, 0xe1, 0x30, //0x00001426 shlq $48, %rcx - 0x48, 0xc1, 0xe7, 0x20, //0x0000142a shlq $32, %rdi - 0x48, 0x09, 0xcf, //0x0000142e orq %rcx, %rdi - 0x48, 0xc1, 0xe3, 0x10, //0x00001431 shlq $16, %rbx - 0x48, 0x09, 0xfb, //0x00001435 orq %rdi, %rbx - 0x48, 0x09, 0xde, //0x00001438 orq %rbx, %rsi - 0x4c, 0x21, 0xce, //0x0000143b andq %r9, %rsi - 0x0f, 0x84, 0xce, 0xfd, 0xff, 0xff, //0x0000143e je LBB0_233 - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001444 movabsq $4294977024, %r9 - 0x90, 0x90, //0x0000144e .p2align 4, 0x90 - //0x00001450 LBB0_240 - 0x48, 0x8d, 0x5e, 0xff, //0x00001450 leaq $-1(%rsi), %rbx - 0x48, 0x89, 0xd9, //0x00001454 movq %rbx, %rcx - 0x4c, 0x21, 0xd1, //0x00001457 andq %r10, %rcx - 0x48, 0x89, 0xcf, //0x0000145a movq %rcx, %rdi - 0x48, 0xd1, 0xef, //0x0000145d shrq %rdi - 0x49, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001460 movabsq $6148914691236517205, %r8 - 0x4c, 0x21, 0xc7, //0x0000146a andq %r8, %rdi - 0x48, 0x29, 0xf9, //0x0000146d subq %rdi, %rcx - 0x48, 0x89, 0xcf, //0x00001470 movq %rcx, %rdi - 0x48, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001473 movabsq $3689348814741910323, %rax - 0x48, 0x21, 0xc7, //0x0000147d andq %rax, %rdi - 0x48, 0xc1, 0xe9, 0x02, //0x00001480 shrq $2, %rcx - 0x48, 0x21, 0xc1, //0x00001484 andq %rax, %rcx - 0x48, 0x01, 0xf9, //0x00001487 addq %rdi, %rcx - 0x48, 0x89, 0xcf, //0x0000148a movq %rcx, %rdi - 0x48, 0xc1, 0xef, 0x04, //0x0000148d shrq $4, %rdi - 0x48, 0x01, 0xcf, //0x00001491 addq %rcx, %rdi - 0x48, 0xb8, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001494 movabsq $1085102592571150095, %rax - 0x48, 0x21, 0xc7, //0x0000149e andq %rax, %rdi - 0x48, 0xb8, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000014a1 movabsq $72340172838076673, %rax - 0x48, 0x0f, 0xaf, 0xf8, //0x000014ab imulq %rax, %rdi - 0x48, 0xc1, 0xef, 0x38, //0x000014af shrq $56, %rdi - 0x4c, 0x01, 0xdf, //0x000014b3 addq %r11, %rdi - 0x48, 0x39, 0xd7, //0x000014b6 cmpq %rdx, %rdi - 0x0f, 0x86, 0x72, 0x01, 0x00, 0x00, //0x000014b9 jbe LBB0_258 - 0x48, 0x83, 0xc2, 0x01, //0x000014bf addq $1, %rdx - 0x48, 0x21, 0xde, //0x000014c3 andq %rbx, %rsi - 0x0f, 0x85, 0x84, 0xff, 0xff, 0xff, //0x000014c6 jne LBB0_240 - 0xe9, 0x41, 0xfd, 0xff, 0xff, //0x000014cc jmp LBB0_233 - //0x000014d1 LBB0_242 - 0x48, 0x85, 0xc0, //0x000014d1 testq %rax, %rax - 0x0f, 0x8e, 0xaa, 0x08, 0x00, 0x00, //0x000014d4 jle LBB0_337 - 0x4c, 0x89, 0xc3, //0x000014da movq %r8, %rbx - 0xf3, 0x44, 0x0f, 0x7f, 0x45, 0x80, //0x000014dd movdqu %xmm8, $-128(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x70, 0xff, 0xff, 0xff, //0x000014e3 movdqu %xmm8, $-144(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x000014ec movdqu %xmm8, $-160(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x000014f5 movdqu %xmm8, $-176(%rbp) - 0x44, 0x89, 0xe8, //0x000014fe movl %r13d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00001501 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00001506 cmpl $4033, %eax - 0x0f, 0x82, 0x3d, 0x00, 0x00, 0x00, //0x0000150b jb LBB0_246 - 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x00001511 cmpq $32, $-48(%rbp) - 0x0f, 0x82, 0x42, 0x00, 0x00, 0x00, //0x00001516 jb LBB0_247 - 0x41, 0x0f, 0x10, 0x55, 0x00, //0x0000151c movups (%r13), %xmm2 - 0x0f, 0x11, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001521 movups %xmm2, $-176(%rbp) - 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x10, //0x00001528 movdqu $16(%r13), %xmm2 - 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x0000152e movdqu %xmm2, $-160(%rbp) - 0x49, 0x83, 0xc5, 0x20, //0x00001536 addq $32, %r13 - 0x48, 0x8b, 0x45, 0xd0, //0x0000153a movq $-48(%rbp), %rax - 0x48, 0x8d, 0x70, 0xe0, //0x0000153e leaq $-32(%rax), %rsi - 0x48, 0x8d, 0x85, 0x70, 0xff, 0xff, 0xff, //0x00001542 leaq $-144(%rbp), %rax - 0xe9, 0x1b, 0x00, 0x00, 0x00, //0x00001549 jmp LBB0_248 - //0x0000154e LBB0_246 - 0x4c, 0x8b, 0x7d, 0xc0, //0x0000154e movq $-64(%rbp), %r15 - 0x4c, 0x8b, 0x65, 0xb0, //0x00001552 movq $-80(%rbp), %r12 - 0x49, 0x89, 0xd8, //0x00001556 movq %rbx, %r8 - 0xe9, 0x35, 0xfd, 0xff, 0xff, //0x00001559 jmp LBB0_235 - //0x0000155e LBB0_247 - 0x48, 0x8d, 0x85, 0x50, 0xff, 0xff, 0xff, //0x0000155e leaq $-176(%rbp), %rax - 0x48, 0x8b, 0x75, 0xd0, //0x00001565 movq $-48(%rbp), %rsi - //0x00001569 LBB0_248 - 0x48, 0x83, 0xfe, 0x10, //0x00001569 cmpq $16, %rsi - 0x0f, 0x82, 0x4b, 0x00, 0x00, 0x00, //0x0000156d jb LBB0_249 - 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x00, //0x00001573 movdqu (%r13), %xmm2 - 0xf3, 0x0f, 0x7f, 0x10, //0x00001579 movdqu %xmm2, (%rax) - 0x49, 0x83, 0xc5, 0x10, //0x0000157d addq $16, %r13 - 0x48, 0x83, 0xc0, 0x10, //0x00001581 addq $16, %rax - 0x48, 0x83, 0xc6, 0xf0, //0x00001585 addq $-16, %rsi - 0x48, 0x83, 0xfe, 0x08, //0x00001589 cmpq $8, %rsi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x0000158d jae LBB0_256 - //0x00001593 LBB0_250 - 0x48, 0x83, 0xfe, 0x04, //0x00001593 cmpq $4, %rsi - 0x0f, 0x8c, 0x48, 0x00, 0x00, 0x00, //0x00001597 jl LBB0_251 - //0x0000159d LBB0_257 - 0x41, 0x8b, 0x4d, 0x00, //0x0000159d movl (%r13), %ecx - 0x89, 0x08, //0x000015a1 movl %ecx, (%rax) - 0x49, 0x83, 0xc5, 0x04, //0x000015a3 addq $4, %r13 - 0x48, 0x83, 0xc0, 0x04, //0x000015a7 addq $4, %rax - 0x48, 0x83, 0xc6, 0xfc, //0x000015ab addq $-4, %rsi - 0x48, 0x83, 0xfe, 0x02, //0x000015af cmpq $2, %rsi - 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x000015b3 jae LBB0_252 - 0xe9, 0x45, 0x00, 0x00, 0x00, //0x000015b9 jmp LBB0_253 - //0x000015be LBB0_249 - 0x48, 0x83, 0xfe, 0x08, //0x000015be cmpq $8, %rsi - 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x000015c2 jb LBB0_250 - //0x000015c8 LBB0_256 - 0x49, 0x8b, 0x4d, 0x00, //0x000015c8 movq (%r13), %rcx - 0x48, 0x89, 0x08, //0x000015cc movq %rcx, (%rax) - 0x49, 0x83, 0xc5, 0x08, //0x000015cf addq $8, %r13 - 0x48, 0x83, 0xc0, 0x08, //0x000015d3 addq $8, %rax - 0x48, 0x83, 0xc6, 0xf8, //0x000015d7 addq $-8, %rsi - 0x48, 0x83, 0xfe, 0x04, //0x000015db cmpq $4, %rsi - 0x0f, 0x8d, 0xb8, 0xff, 0xff, 0xff, //0x000015df jge LBB0_257 - //0x000015e5 LBB0_251 - 0x48, 0x83, 0xfe, 0x02, //0x000015e5 cmpq $2, %rsi - 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x000015e9 jb LBB0_253 - //0x000015ef LBB0_252 - 0x41, 0x0f, 0xb7, 0x4d, 0x00, //0x000015ef movzwl (%r13), %ecx - 0x66, 0x89, 0x08, //0x000015f4 movw %cx, (%rax) - 0x49, 0x83, 0xc5, 0x02, //0x000015f7 addq $2, %r13 - 0x48, 0x83, 0xc0, 0x02, //0x000015fb addq $2, %rax - 0x48, 0x83, 0xc6, 0xfe, //0x000015ff addq $-2, %rsi - //0x00001603 LBB0_253 - 0x4c, 0x89, 0xef, //0x00001603 movq %r13, %rdi - 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x00001606 leaq $-176(%rbp), %r13 - 0x48, 0x85, 0xf6, //0x0000160d testq %rsi, %rsi - 0x4c, 0x8b, 0x7d, 0xc0, //0x00001610 movq $-64(%rbp), %r15 - 0x4c, 0x8b, 0x65, 0xb0, //0x00001614 movq $-80(%rbp), %r12 - 0x49, 0x89, 0xd8, //0x00001618 movq %rbx, %r8 - 0x0f, 0x84, 0x72, 0xfc, 0xff, 0xff, //0x0000161b je LBB0_235 - 0x8a, 0x0f, //0x00001621 movb (%rdi), %cl - 0x88, 0x08, //0x00001623 movb %cl, (%rax) - 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x00001625 leaq $-176(%rbp), %r13 - 0xe9, 0x62, 0xfc, 0xff, 0xff, //0x0000162c jmp LBB0_235 - //0x00001631 LBB0_258 - 0x49, 0x8b, 0x07, //0x00001631 movq (%r15), %rax - 0x48, 0x0f, 0xbc, 0xce, //0x00001634 bsfq %rsi, %rcx - 0x48, 0x2b, 0x4d, 0xd0, //0x00001638 subq $-48(%rbp), %rcx - 0x4c, 0x8d, 0x14, 0x01, //0x0000163c leaq (%rcx,%rax), %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00001640 addq $1, %r10 - 0x4c, 0x8b, 0x45, 0xc8, //0x00001644 movq $-56(%rbp), %r8 - 0x4d, 0x89, 0x10, //0x00001648 movq %r10, (%r8) - 0x49, 0x8b, 0x07, //0x0000164b movq (%r15), %rax - 0x49, 0x39, 0xc2, //0x0000164e cmpq %rax, %r10 - 0x4c, 0x0f, 0x47, 0xd0, //0x00001651 cmovaq %rax, %r10 - 0x4d, 0x89, 0x10, //0x00001655 movq %r10, (%r8) - 0x4c, 0x8b, 0x5d, 0xa8, //0x00001658 movq $-88(%rbp), %r11 - 0xe9, 0xbd, 0xf4, 0xff, 0xff, //0x0000165c jmp LBB0_164 - //0x00001661 LBB0_259 - 0x0f, 0xbc, 0xcb, //0x00001661 bsfl %ebx, %ecx - 0x48, 0x01, 0xc1, //0x00001664 addq %rax, %rcx - 0x4d, 0x8d, 0x14, 0x0e, //0x00001667 leaq (%r14,%rcx), %r10 - 0x49, 0x83, 0xc2, 0x02, //0x0000166b addq $2, %r10 - 0x4c, 0x8b, 0x45, 0xc8, //0x0000166f movq $-56(%rbp), %r8 - 0x4d, 0x89, 0x10, //0x00001673 movq %r10, (%r8) - 0x4c, 0x8b, 0x7d, 0xc0, //0x00001676 movq $-64(%rbp), %r15 - //0x0000167a LBB0_260 - 0x4c, 0x8b, 0x5d, 0xa8, //0x0000167a movq $-88(%rbp), %r11 - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000167e movabsq $4294977024, %r9 - 0xe9, 0x91, 0xf4, 0xff, 0xff, //0x00001688 jmp LBB0_164 - //0x0000168d LBB0_67 - 0x4d, 0x01, 0xea, //0x0000168d addq %r13, %r10 - 0x4c, 0x8b, 0x7d, 0xc0, //0x00001690 movq $-64(%rbp), %r15 - 0x4c, 0x8b, 0x65, 0xb0, //0x00001694 movq $-80(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x00001698 movq $-88(%rbp), %r11 - 0x4c, 0x8b, 0x75, 0xa0, //0x0000169c movq $-96(%rbp), %r14 - 0x48, 0x8b, 0x5d, 0x90, //0x000016a0 movq $-112(%rbp), %rbx - 0x49, 0x83, 0xf8, 0x20, //0x000016a4 cmpq $32, %r8 - 0x0f, 0x82, 0x94, 0x05, 0x00, 0x00, //0x000016a8 jb LBB0_321 - //0x000016ae LBB0_68 - 0xf3, 0x41, 0x0f, 0x6f, 0x12, //0x000016ae movdqu (%r10), %xmm2 - 0xf3, 0x41, 0x0f, 0x6f, 0x5a, 0x10, //0x000016b3 movdqu $16(%r10), %xmm3 - 0x66, 0x0f, 0x6f, 0xea, //0x000016b9 movdqa %xmm2, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000016bd pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x000016c1 pmovmskb %xmm5, %edi - 0x66, 0x0f, 0x6f, 0xeb, //0x000016c5 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000016c9 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x000016cd pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x74, 0xd1, //0x000016d1 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xf2, //0x000016d5 pmovmskb %xmm2, %esi - 0x66, 0x0f, 0x74, 0xd9, //0x000016d9 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x000016dd pmovmskb %xmm3, %edx - 0x48, 0xc1, 0xe1, 0x10, //0x000016e1 shlq $16, %rcx - 0x48, 0x09, 0xcf, //0x000016e5 orq %rcx, %rdi - 0x48, 0xc1, 0xe2, 0x10, //0x000016e8 shlq $16, %rdx - 0x48, 0x09, 0xd6, //0x000016ec orq %rdx, %rsi - 0x0f, 0x85, 0xe5, 0x04, 0x00, 0x00, //0x000016ef jne LBB0_317 - 0x4d, 0x85, 0xc9, //0x000016f5 testq %r9, %r9 - 0x0f, 0x85, 0xf8, 0x04, 0x00, 0x00, //0x000016f8 jne LBB0_319 - 0x45, 0x31, 0xc9, //0x000016fe xorl %r9d, %r9d - 0x48, 0x85, 0xff, //0x00001701 testq %rdi, %rdi - 0x0f, 0x84, 0x30, 0x05, 0x00, 0x00, //0x00001704 je LBB0_320 - //0x0000170a LBB0_71 - 0x48, 0x0f, 0xbc, 0xcf, //0x0000170a bsfq %rdi, %rcx - 0x4d, 0x29, 0xea, //0x0000170e subq %r13, %r10 - 0x49, 0x01, 0xca, //0x00001711 addq %rcx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00001714 addq $1, %r10 - 0x4c, 0x8b, 0x45, 0xc8, //0x00001718 movq $-56(%rbp), %r8 - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000171c movabsq $4294977024, %r9 - 0x48, 0x8b, 0x4d, 0xb8, //0x00001726 movq $-72(%rbp), %rcx - 0x4d, 0x85, 0xd2, //0x0000172a testq %r10, %r10 - 0x0f, 0x89, 0x53, 0xef, 0xff, 0xff, //0x0000172d jns LBB0_78 - 0xe9, 0x74, 0x3b, 0x00, 0x00, //0x00001733 jmp LBB0_968 - //0x00001738 LBB0_261 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00001738 movq $-2, %rdx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x0000173f movl $2, %esi - 0x48, 0x01, 0xf0, //0x00001744 addq %rsi, %rax - 0x49, 0x01, 0xd6, //0x00001747 addq %rdx, %r14 - 0x0f, 0x8e, 0xce, 0xf3, 0xff, 0xff, //0x0000174a jle LBB0_164 - //0x00001750 LBB0_262 - 0x0f, 0xb6, 0x10, //0x00001750 movzbl (%rax), %edx - 0x80, 0xfa, 0x5c, //0x00001753 cmpb $92, %dl - 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x00001756 je LBB0_261 - 0x80, 0xfa, 0x22, //0x0000175c cmpb $34, %dl - 0x0f, 0x84, 0x2d, 0x04, 0x00, 0x00, //0x0000175f je LBB0_313 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001765 movq $-1, %rdx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x0000176c movl $1, %esi - 0x48, 0x01, 0xf0, //0x00001771 addq %rsi, %rax - 0x49, 0x01, 0xd6, //0x00001774 addq %rdx, %r14 - 0x0f, 0x8f, 0xd3, 0xff, 0xff, 0xff, //0x00001777 jg LBB0_262 - 0xe9, 0x9c, 0xf3, 0xff, 0xff, //0x0000177d jmp LBB0_164 - //0x00001782 LBB0_265 - 0x4d, 0x29, 0xea, //0x00001782 subq %r13, %r10 - 0x49, 0x01, 0xc2, //0x00001785 addq %rax, %r10 - 0xe9, 0x8e, 0xf3, 0xff, 0xff, //0x00001788 jmp LBB0_163 - //0x0000178d LBB0_266 - 0x48, 0xc7, 0x45, 0xb8, 0xff, 0xff, 0xff, 0xff, //0x0000178d movq $-1, $-72(%rbp) - 0x45, 0x31, 0xc9, //0x00001795 xorl %r9d, %r9d - 0x49, 0x89, 0xda, //0x00001798 movq %rbx, %r10 - 0x49, 0x83, 0xf8, 0x20, //0x0000179b cmpq $32, %r8 - 0x0f, 0x83, 0x09, 0xff, 0xff, 0xff, //0x0000179f jae LBB0_68 - 0xe9, 0x98, 0x04, 0x00, 0x00, //0x000017a5 jmp LBB0_321 - //0x000017aa LBB0_267 - 0x48, 0xc7, 0x85, 0x50, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, //0x000017aa movq $0, $-176(%rbp) - 0x49, 0x8d, 0x42, 0xff, //0x000017b5 leaq $-1(%r10), %rax - 0x4f, 0x8d, 0x04, 0x2a, //0x000017b9 leaq (%r10,%r13), %r8 - 0x49, 0x83, 0xc0, 0xff, //0x000017bd addq $-1, %r8 - 0x48, 0x8b, 0x4d, 0xd0, //0x000017c1 movq $-48(%rbp), %rcx - 0x4d, 0x8d, 0x1c, 0x0e, //0x000017c5 leaq (%r14,%rcx), %r11 - 0x48, 0x39, 0x85, 0x40, 0xff, 0xff, 0xff, //0x000017c9 cmpq %rax, $-192(%rbp) - 0x0f, 0x8d, 0xc8, 0x03, 0x00, 0x00, //0x000017d0 jge LBB0_299 - 0x48, 0x85, 0xc9, //0x000017d6 testq %rcx, %rcx - 0x0f, 0x8e, 0xbf, 0x03, 0x00, 0x00, //0x000017d9 jle LBB0_299 - 0x4c, 0x89, 0x45, 0xb8, //0x000017df movq %r8, $-72(%rbp) - //0x000017e3 LBB0_270 - 0x8a, 0x03, //0x000017e3 movb (%rbx), %al - 0x3c, 0x5c, //0x000017e5 cmpb $92, %al - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x000017e7 jne LBB0_275 - 0x4c, 0x89, 0xc6, //0x000017ed movq %r8, %rsi - 0x48, 0x29, 0xde, //0x000017f0 subq %rbx, %rsi - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000017f3 movq $-1, %rax - 0x48, 0x85, 0xf6, //0x000017fa testq %rsi, %rsi - 0x0f, 0x8e, 0x33, 0x3c, 0x00, 0x00, //0x000017fd jle LBB0_989 - 0x0f, 0xb6, 0x4b, 0x01, //0x00001803 movzbl $1(%rbx), %ecx - 0x48, 0x8d, 0x15, 0x42, 0x45, 0x00, 0x00, //0x00001807 leaq $17730(%rip), %rdx /* __UnquoteTab+0(%rip) */ - 0x8a, 0x0c, 0x11, //0x0000180e movb (%rcx,%rdx), %cl - 0x80, 0xf9, 0xff, //0x00001811 cmpb $-1, %cl - 0x0f, 0x84, 0x32, 0x00, 0x00, 0x00, //0x00001814 je LBB0_277 - 0x84, 0xc9, //0x0000181a testb %cl, %cl - 0x0f, 0x84, 0x00, 0x3c, 0x00, 0x00, //0x0000181c je LBB0_987 - 0x88, 0x8d, 0x50, 0xff, 0xff, 0xff, //0x00001822 movb %cl, $-176(%rbp) - 0x48, 0x83, 0xc3, 0x02, //0x00001828 addq $2, %rbx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x0000182c movl $1, %esi - 0xe9, 0x3d, 0x01, 0x00, 0x00, //0x00001831 jmp LBB0_288 - //0x00001836 LBB0_275 - 0x41, 0x3a, 0x06, //0x00001836 cmpb (%r14), %al - 0x0f, 0x85, 0x8b, 0x03, 0x00, 0x00, //0x00001839 jne LBB0_315 - 0x48, 0x83, 0xc3, 0x01, //0x0000183f addq $1, %rbx - 0x49, 0x83, 0xc6, 0x01, //0x00001843 addq $1, %r14 - 0xe9, 0xa2, 0x01, 0x00, 0x00, //0x00001847 jmp LBB0_297 - //0x0000184c LBB0_277 - 0x48, 0x83, 0xfe, 0x04, //0x0000184c cmpq $4, %rsi - 0x0f, 0x8c, 0xdc, 0x3b, 0x00, 0x00, //0x00001850 jl LBB0_988 - 0x4c, 0x8d, 0x4b, 0x02, //0x00001856 leaq $2(%rbx), %r9 - 0x8b, 0x7b, 0x02, //0x0000185a movl $2(%rbx), %edi - 0x89, 0xf9, //0x0000185d movl %edi, %ecx - 0xf7, 0xd1, //0x0000185f notl %ecx - 0x8d, 0x97, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001861 leal $-808464432(%rdi), %edx - 0x81, 0xe1, 0x80, 0x80, 0x80, 0x80, //0x00001867 andl $-2139062144, %ecx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x0000186d movq $-2, %rax - 0x85, 0xd1, //0x00001874 testl %edx, %ecx - 0x0f, 0x85, 0x84, 0x3b, 0x00, 0x00, //0x00001876 jne LBB0_997 - 0x49, 0x89, 0xd8, //0x0000187c movq %rbx, %r8 - 0x4c, 0x89, 0x75, 0xa0, //0x0000187f movq %r14, $-96(%rbp) - 0x8d, 0x9f, 0x19, 0x19, 0x19, 0x19, //0x00001883 leal $421075225(%rdi), %ebx - 0x09, 0xfb, //0x00001889 orl %edi, %ebx - 0xf7, 0xc3, 0x80, 0x80, 0x80, 0x80, //0x0000188b testl $-2139062144, %ebx - 0x0f, 0x85, 0x69, 0x3b, 0x00, 0x00, //0x00001891 jne LBB0_997 - 0x89, 0xfb, //0x00001897 movl %edi, %ebx - 0x81, 0xe3, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001899 andl $2139062143, %ebx - 0xba, 0xc0, 0xc0, 0xc0, 0xc0, //0x0000189f movl $-1061109568, %edx - 0x29, 0xda, //0x000018a4 subl %ebx, %edx - 0x44, 0x8d, 0xb3, 0x46, 0x46, 0x46, 0x46, //0x000018a6 leal $1179010630(%rbx), %r14d - 0x21, 0xca, //0x000018ad andl %ecx, %edx - 0x44, 0x85, 0xf2, //0x000018af testl %r14d, %edx - 0x0f, 0x85, 0x48, 0x3b, 0x00, 0x00, //0x000018b2 jne LBB0_997 - 0xba, 0xe0, 0xe0, 0xe0, 0xe0, //0x000018b8 movl $-522133280, %edx - 0x29, 0xda, //0x000018bd subl %ebx, %edx - 0x81, 0xc3, 0x39, 0x39, 0x39, 0x39, //0x000018bf addl $960051513, %ebx - 0x21, 0xd1, //0x000018c5 andl %edx, %ecx - 0x85, 0xd9, //0x000018c7 testl %ebx, %ecx - 0x4c, 0x8b, 0x75, 0xa0, //0x000018c9 movq $-96(%rbp), %r14 - 0x0f, 0x85, 0x66, 0x3b, 0x00, 0x00, //0x000018cd jne LBB0_990 - 0x4c, 0x89, 0xc2, //0x000018d3 movq %r8, %rdx - 0x0f, 0xcf, //0x000018d6 bswapl %edi - 0x89, 0xf8, //0x000018d8 movl %edi, %eax - 0xc1, 0xe8, 0x04, //0x000018da shrl $4, %eax - 0xf7, 0xd0, //0x000018dd notl %eax - 0x25, 0x01, 0x01, 0x01, 0x01, //0x000018df andl $16843009, %eax - 0x8d, 0x04, 0xc0, //0x000018e4 leal (%rax,%rax,8), %eax - 0x81, 0xe7, 0x0f, 0x0f, 0x0f, 0x0f, //0x000018e7 andl $252645135, %edi - 0x01, 0xc7, //0x000018ed addl %eax, %edi - 0x89, 0xf9, //0x000018ef movl %edi, %ecx - 0xc1, 0xe9, 0x04, //0x000018f1 shrl $4, %ecx - 0x09, 0xf9, //0x000018f4 orl %edi, %ecx - 0x89, 0xc8, //0x000018f6 movl %ecx, %eax - 0xc1, 0xe8, 0x08, //0x000018f8 shrl $8, %eax - 0x25, 0x00, 0xff, 0x00, 0x00, //0x000018fb andl $65280, %eax - 0x0f, 0xb6, 0xf9, //0x00001900 movzbl %cl, %edi - 0x09, 0xc7, //0x00001903 orl %eax, %edi - 0x4d, 0x8d, 0x48, 0x06, //0x00001905 leaq $6(%r8), %r9 - 0x83, 0xff, 0x7f, //0x00001909 cmpl $127, %edi - 0x0f, 0x86, 0xf3, 0x00, 0x00, 0x00, //0x0000190c jbe LBB0_301 - 0x81, 0xff, 0xff, 0x07, 0x00, 0x00, //0x00001912 cmpl $2047, %edi - 0x0f, 0x86, 0xf7, 0x00, 0x00, 0x00, //0x00001918 jbe LBB0_302 - 0x89, 0xca, //0x0000191e movl %ecx, %edx - 0x81, 0xe2, 0x00, 0x00, 0xf8, 0x00, //0x00001920 andl $16252928, %edx - 0x81, 0xfa, 0x00, 0x00, 0xd8, 0x00, //0x00001926 cmpl $14155776, %edx - 0x0f, 0x84, 0x09, 0x01, 0x00, 0x00, //0x0000192c je LBB0_303 - 0xc1, 0xe8, 0x0c, //0x00001932 shrl $12, %eax - 0x0c, 0xe0, //0x00001935 orb $-32, %al - 0x88, 0x85, 0x50, 0xff, 0xff, 0xff, //0x00001937 movb %al, $-176(%rbp) - 0xc1, 0xef, 0x06, //0x0000193d shrl $6, %edi - 0x40, 0x80, 0xe7, 0x3f, //0x00001940 andb $63, %dil - 0x40, 0x80, 0xcf, 0x80, //0x00001944 orb $-128, %dil - 0x40, 0x88, 0xbd, 0x51, 0xff, 0xff, 0xff, //0x00001948 movb %dil, $-175(%rbp) - 0x80, 0xe1, 0x3f, //0x0000194f andb $63, %cl - 0x80, 0xc9, 0x80, //0x00001952 orb $-128, %cl - 0x88, 0x8d, 0x52, 0xff, 0xff, 0xff, //0x00001955 movb %cl, $-174(%rbp) - 0xbe, 0x03, 0x00, 0x00, 0x00, //0x0000195b movl $3, %esi - 0x89, 0xc1, //0x00001960 movl %eax, %ecx - //0x00001962 LBB0_286 - 0x4c, 0x89, 0xcb, //0x00001962 movq %r9, %rbx - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001965 movabsq $4294977024, %r9 - //0x0000196f LBB0_287 - 0x4c, 0x8b, 0x45, 0xb8, //0x0000196f movq $-72(%rbp), %r8 - //0x00001973 LBB0_288 - 0x48, 0x8d, 0x04, 0x2e, //0x00001973 leaq (%rsi,%rbp), %rax - 0x48, 0x05, 0x50, 0xff, 0xff, 0xff, //0x00001977 addq $-176, %rax - 0x4d, 0x39, 0xde, //0x0000197d cmpq %r11, %r14 - 0x0f, 0x83, 0x58, 0x00, 0x00, 0x00, //0x00001980 jae LBB0_295 - 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001986 leaq $-176(%rbp), %rdx - 0x48, 0x39, 0xd0, //0x0000198d cmpq %rdx, %rax - 0x0f, 0x86, 0x48, 0x00, 0x00, 0x00, //0x00001990 jbe LBB0_295 - 0x41, 0x38, 0x0e, //0x00001996 cmpb %cl, (%r14) - 0x0f, 0x85, 0x3f, 0x00, 0x00, 0x00, //0x00001999 jne LBB0_295 - 0x49, 0x83, 0xc6, 0x01, //0x0000199f addq $1, %r14 - 0x48, 0x8d, 0xb5, 0x51, 0xff, 0xff, 0xff, //0x000019a3 leaq $-175(%rbp), %rsi - 0x4c, 0x89, 0xf7, //0x000019aa movq %r14, %rdi - //0x000019ad LBB0_292 - 0x49, 0x89, 0xfe, //0x000019ad movq %rdi, %r14 - 0x48, 0x89, 0xf1, //0x000019b0 movq %rsi, %rcx - 0x4c, 0x39, 0xdf, //0x000019b3 cmpq %r11, %rdi - 0x0f, 0x83, 0x29, 0x00, 0x00, 0x00, //0x000019b6 jae LBB0_296 - 0x48, 0x39, 0xc1, //0x000019bc cmpq %rax, %rcx - 0x0f, 0x83, 0x20, 0x00, 0x00, 0x00, //0x000019bf jae LBB0_296 - 0x41, 0x0f, 0xb6, 0x16, //0x000019c5 movzbl (%r14), %edx - 0x49, 0x8d, 0x7e, 0x01, //0x000019c9 leaq $1(%r14), %rdi - 0x48, 0x8d, 0x71, 0x01, //0x000019cd leaq $1(%rcx), %rsi - 0x3a, 0x11, //0x000019d1 cmpb (%rcx), %dl - 0x0f, 0x84, 0xd4, 0xff, 0xff, 0xff, //0x000019d3 je LBB0_292 - 0xe9, 0x07, 0x00, 0x00, 0x00, //0x000019d9 jmp LBB0_296 - //0x000019de LBB0_295 - 0x48, 0x8d, 0x8d, 0x50, 0xff, 0xff, 0xff, //0x000019de leaq $-176(%rbp), %rcx - //0x000019e5 LBB0_296 - 0x48, 0x39, 0xc1, //0x000019e5 cmpq %rax, %rcx - 0x0f, 0x85, 0xdc, 0x01, 0x00, 0x00, //0x000019e8 jne LBB0_315 - //0x000019ee LBB0_297 - 0x4c, 0x39, 0xc3, //0x000019ee cmpq %r8, %rbx - 0x0f, 0x83, 0xa7, 0x01, 0x00, 0x00, //0x000019f1 jae LBB0_299 - 0x4d, 0x39, 0xde, //0x000019f7 cmpq %r11, %r14 - 0x0f, 0x82, 0xe3, 0xfd, 0xff, 0xff, //0x000019fa jb LBB0_270 - 0xe9, 0x99, 0x01, 0x00, 0x00, //0x00001a00 jmp LBB0_299 - //0x00001a05 LBB0_301 - 0x88, 0x8d, 0x50, 0xff, 0xff, 0xff, //0x00001a05 movb %cl, $-176(%rbp) - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00001a0b movl $1, %esi - 0xe9, 0x4d, 0xff, 0xff, 0xff, //0x00001a10 jmp LBB0_286 - //0x00001a15 LBB0_302 - 0xc1, 0xef, 0x06, //0x00001a15 shrl $6, %edi - 0x40, 0x80, 0xcf, 0xc0, //0x00001a18 orb $-64, %dil - 0x40, 0x88, 0xbd, 0x50, 0xff, 0xff, 0xff, //0x00001a1c movb %dil, $-176(%rbp) - 0x80, 0xe1, 0x3f, //0x00001a23 andb $63, %cl - 0x80, 0xc9, 0x80, //0x00001a26 orb $-128, %cl - 0x88, 0x8d, 0x51, 0xff, 0xff, 0xff, //0x00001a29 movb %cl, $-175(%rbp) - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00001a2f movl $2, %esi - 0x89, 0xf9, //0x00001a34 movl %edi, %ecx - 0xe9, 0x27, 0xff, 0xff, 0xff, //0x00001a36 jmp LBB0_286 - //0x00001a3b LBB0_303 - 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x00001a3b movq $-4, %rax - 0x48, 0x83, 0xfe, 0x06, //0x00001a42 cmpq $6, %rsi - 0x0f, 0x8c, 0xed, 0x39, 0x00, 0x00, //0x00001a46 jl LBB0_990 - 0x81, 0xff, 0xff, 0xdb, 0x00, 0x00, //0x00001a4c cmpl $56319, %edi - 0x0f, 0x87, 0xe1, 0x39, 0x00, 0x00, //0x00001a52 ja LBB0_990 - 0x41, 0x80, 0x39, 0x5c, //0x00001a58 cmpb $92, (%r9) - 0x0f, 0x85, 0xd7, 0x39, 0x00, 0x00, //0x00001a5c jne LBB0_990 - 0x41, 0x80, 0x78, 0x07, 0x75, //0x00001a62 cmpb $117, $7(%r8) - 0x0f, 0x85, 0xcc, 0x39, 0x00, 0x00, //0x00001a67 jne LBB0_990 - 0x4c, 0x89, 0xc1, //0x00001a6d movq %r8, %rcx - 0x4d, 0x8d, 0x48, 0x08, //0x00001a70 leaq $8(%r8), %r9 - 0x41, 0x8b, 0x48, 0x08, //0x00001a74 movl $8(%r8), %ecx - 0x89, 0xce, //0x00001a78 movl %ecx, %esi - 0xf7, 0xd6, //0x00001a7a notl %esi - 0x8d, 0x91, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001a7c leal $-808464432(%rcx), %edx - 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x00001a82 andl $-2139062144, %esi - 0x85, 0xd6, //0x00001a88 testl %edx, %esi - 0x0f, 0x85, 0x70, 0x39, 0x00, 0x00, //0x00001a8a jne LBB0_997 - 0x8d, 0x91, 0x19, 0x19, 0x19, 0x19, //0x00001a90 leal $421075225(%rcx), %edx - 0x09, 0xca, //0x00001a96 orl %ecx, %edx - 0xf7, 0xc2, 0x80, 0x80, 0x80, 0x80, //0x00001a98 testl $-2139062144, %edx - 0x0f, 0x85, 0x5c, 0x39, 0x00, 0x00, //0x00001a9e jne LBB0_997 - 0x89, 0xcb, //0x00001aa4 movl %ecx, %ebx - 0x81, 0xe3, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001aa6 andl $2139062143, %ebx - 0xba, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001aac movl $-1061109568, %edx - 0x29, 0xda, //0x00001ab1 subl %ebx, %edx - 0x44, 0x8d, 0xb3, 0x46, 0x46, 0x46, 0x46, //0x00001ab3 leal $1179010630(%rbx), %r14d - 0x21, 0xf2, //0x00001aba andl %esi, %edx - 0x44, 0x85, 0xf2, //0x00001abc testl %r14d, %edx - 0x0f, 0x85, 0x3b, 0x39, 0x00, 0x00, //0x00001abf jne LBB0_997 - 0xba, 0xe0, 0xe0, 0xe0, 0xe0, //0x00001ac5 movl $-522133280, %edx - 0x29, 0xda, //0x00001aca subl %ebx, %edx - 0x81, 0xc3, 0x39, 0x39, 0x39, 0x39, //0x00001acc addl $960051513, %ebx - 0x21, 0xd6, //0x00001ad2 andl %edx, %esi - 0x85, 0xde, //0x00001ad4 testl %ebx, %esi - 0x0f, 0x85, 0x24, 0x39, 0x00, 0x00, //0x00001ad6 jne LBB0_997 - 0x0f, 0xc9, //0x00001adc bswapl %ecx - 0x89, 0xca, //0x00001ade movl %ecx, %edx - 0xc1, 0xea, 0x04, //0x00001ae0 shrl $4, %edx - 0xf7, 0xd2, //0x00001ae3 notl %edx - 0x81, 0xe2, 0x01, 0x01, 0x01, 0x01, //0x00001ae5 andl $16843009, %edx - 0x8d, 0x14, 0xd2, //0x00001aeb leal (%rdx,%rdx,8), %edx - 0x81, 0xe1, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001aee andl $252645135, %ecx - 0x01, 0xd1, //0x00001af4 addl %edx, %ecx - 0x89, 0xce, //0x00001af6 movl %ecx, %esi - 0xc1, 0xee, 0x04, //0x00001af8 shrl $4, %esi - 0x09, 0xce, //0x00001afb orl %ecx, %esi - 0x89, 0xf1, //0x00001afd movl %esi, %ecx - 0x81, 0xe1, 0x00, 0x00, 0xfc, 0x00, //0x00001aff andl $16515072, %ecx - 0x81, 0xf9, 0x00, 0x00, 0xdc, 0x00, //0x00001b05 cmpl $14417920, %ecx - 0x0f, 0x85, 0x28, 0x39, 0x00, 0x00, //0x00001b0b jne LBB0_990 - 0x89, 0xf0, //0x00001b11 movl %esi, %eax - 0xc1, 0xe8, 0x08, //0x00001b13 shrl $8, %eax - 0x25, 0x00, 0xff, 0x00, 0x00, //0x00001b16 andl $65280, %eax - 0x40, 0x0f, 0xb6, 0xce, //0x00001b1b movzbl %sil, %ecx - 0x09, 0xc1, //0x00001b1f orl %eax, %ecx - 0xc1, 0xe7, 0x0a, //0x00001b21 shll $10, %edi - 0x8d, 0x04, 0x39, //0x00001b24 leal (%rcx,%rdi), %eax - 0x8d, 0x14, 0x0f, //0x00001b27 leal (%rdi,%rcx), %edx - 0x81, 0xc2, 0x00, 0x24, 0xa0, 0xfc, //0x00001b2a addl $-56613888, %edx - 0x89, 0xd1, //0x00001b30 movl %edx, %ecx - 0xc1, 0xe9, 0x12, //0x00001b32 shrl $18, %ecx - 0x80, 0xc9, 0xf0, //0x00001b35 orb $-16, %cl - 0x88, 0x8d, 0x50, 0xff, 0xff, 0xff, //0x00001b38 movb %cl, $-176(%rbp) - 0x89, 0xd6, //0x00001b3e movl %edx, %esi - 0xc1, 0xee, 0x0c, //0x00001b40 shrl $12, %esi - 0x40, 0x80, 0xe6, 0x3f, //0x00001b43 andb $63, %sil - 0x40, 0x80, 0xce, 0x80, //0x00001b47 orb $-128, %sil - 0x40, 0x88, 0xb5, 0x51, 0xff, 0xff, 0xff, //0x00001b4b movb %sil, $-175(%rbp) - 0xc1, 0xea, 0x06, //0x00001b52 shrl $6, %edx - 0x80, 0xe2, 0x3f, //0x00001b55 andb $63, %dl - 0x80, 0xca, 0x80, //0x00001b58 orb $-128, %dl - 0x88, 0x95, 0x52, 0xff, 0xff, 0xff, //0x00001b5b movb %dl, $-174(%rbp) - 0x24, 0x3f, //0x00001b61 andb $63, %al - 0x0c, 0x80, //0x00001b63 orb $-128, %al - 0x88, 0x85, 0x53, 0xff, 0xff, 0xff, //0x00001b65 movb %al, $-173(%rbp) - 0x4c, 0x89, 0xc3, //0x00001b6b movq %r8, %rbx - 0x48, 0x83, 0xc3, 0x0c, //0x00001b6e addq $12, %rbx - 0xbe, 0x04, 0x00, 0x00, 0x00, //0x00001b72 movl $4, %esi - 0x4c, 0x8b, 0x7d, 0xc0, //0x00001b77 movq $-64(%rbp), %r15 - 0x4c, 0x8b, 0x65, 0xb0, //0x00001b7b movq $-80(%rbp), %r12 - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001b7f movabsq $4294977024, %r9 - 0x4c, 0x8b, 0x75, 0xa0, //0x00001b89 movq $-96(%rbp), %r14 - 0xe9, 0xdd, 0xfd, 0xff, 0xff, //0x00001b8d jmp LBB0_287 - //0x00001b92 LBB0_313 - 0x4c, 0x29, 0xe8, //0x00001b92 subq %r13, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00001b95 addq $1, %rax - 0xe9, 0x50, 0xf6, 0xff, 0xff, //0x00001b99 jmp LBB0_231 - //0x00001b9e LBB0_299 - 0x4c, 0x31, 0xc3, //0x00001b9e xorq %r8, %rbx - 0x4d, 0x31, 0xde, //0x00001ba1 xorq %r11, %r14 - 0x31, 0xc9, //0x00001ba4 xorl %ecx, %ecx - 0x49, 0x09, 0xde, //0x00001ba6 orq %rbx, %r14 - 0x0f, 0x94, 0xc1, //0x00001ba9 sete %cl - //0x00001bac LBB0_300 - 0x4c, 0x8b, 0x45, 0xc8, //0x00001bac movq $-56(%rbp), %r8 - 0x4c, 0x8b, 0x5d, 0xa8, //0x00001bb0 movq $-88(%rbp), %r11 - 0xe9, 0x48, 0xeb, 0xff, 0xff, //0x00001bb4 jmp LBB0_86 - //0x00001bb9 LBB0_314 - 0x4d, 0x01, 0xea, //0x00001bb9 addq %r13, %r10 - 0x48, 0x85, 0xd2, //0x00001bbc testq %rdx, %rdx - 0x0f, 0x85, 0xf3, 0xee, 0xff, 0xff, //0x00001bbf jne LBB0_155 - 0xe9, 0x24, 0xef, 0xff, 0xff, //0x00001bc5 jmp LBB0_161 - //0x00001bca LBB0_315 - 0x31, 0xc9, //0x00001bca xorl %ecx, %ecx - 0xe9, 0xdb, 0xff, 0xff, 0xff, //0x00001bcc jmp LBB0_300 - //0x00001bd1 LBB0_316 - 0x4b, 0x8d, 0x04, 0x2a, //0x00001bd1 leaq (%r10,%r13), %rax - 0xe9, 0xa3, 0xf1, 0xff, 0xff, //0x00001bd5 jmp LBB0_202 - //0x00001bda LBB0_317 - 0x48, 0x83, 0x7d, 0xb8, 0xff, //0x00001bda cmpq $-1, $-72(%rbp) - 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x00001bdf jne LBB0_319 - 0x4c, 0x89, 0xd1, //0x00001be5 movq %r10, %rcx - 0x4c, 0x29, 0xe9, //0x00001be8 subq %r13, %rcx - 0x48, 0x0f, 0xbc, 0xd6, //0x00001beb bsfq %rsi, %rdx - 0x48, 0x01, 0xca, //0x00001bef addq %rcx, %rdx - 0x48, 0x89, 0x55, 0xb8, //0x00001bf2 movq %rdx, $-72(%rbp) - //0x00001bf6 LBB0_319 - 0x44, 0x89, 0xc9, //0x00001bf6 movl %r9d, %ecx - 0xf7, 0xd1, //0x00001bf9 notl %ecx - 0x21, 0xf1, //0x00001bfb andl %esi, %ecx - 0x41, 0x8d, 0x14, 0x49, //0x00001bfd leal (%r9,%rcx,2), %edx - 0x8d, 0x1c, 0x09, //0x00001c01 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x00001c04 notl %ebx - 0x21, 0xf3, //0x00001c06 andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001c08 andl $-1431655766, %ebx - 0x45, 0x31, 0xc9, //0x00001c0e xorl %r9d, %r9d - 0x01, 0xcb, //0x00001c11 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc1, //0x00001c13 setb %r9b - 0x01, 0xdb, //0x00001c17 addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00001c19 xorl $1431655765, %ebx - 0x21, 0xd3, //0x00001c1f andl %edx, %ebx - 0xf7, 0xd3, //0x00001c21 notl %ebx - 0x21, 0xdf, //0x00001c23 andl %ebx, %edi - 0x4c, 0x8b, 0x7d, 0xc0, //0x00001c25 movq $-64(%rbp), %r15 - 0x4c, 0x8b, 0x65, 0xb0, //0x00001c29 movq $-80(%rbp), %r12 - 0x48, 0x8b, 0x5d, 0x90, //0x00001c2d movq $-112(%rbp), %rbx - 0x48, 0x85, 0xff, //0x00001c31 testq %rdi, %rdi - 0x0f, 0x85, 0xd0, 0xfa, 0xff, 0xff, //0x00001c34 jne LBB0_71 - //0x00001c3a LBB0_320 - 0x49, 0x83, 0xc2, 0x20, //0x00001c3a addq $32, %r10 - 0x49, 0x83, 0xc0, 0xe0, //0x00001c3e addq $-32, %r8 - //0x00001c42 LBB0_321 - 0x4d, 0x85, 0xc9, //0x00001c42 testq %r9, %r9 - 0x0f, 0x85, 0xe8, 0x00, 0x00, 0x00, //0x00001c45 jne LBB0_335 - 0x4c, 0x89, 0xef, //0x00001c4b movq %r13, %rdi - 0x48, 0xf7, 0xd7, //0x00001c4e notq %rdi - 0x4c, 0x8b, 0x4d, 0xb8, //0x00001c51 movq $-72(%rbp), %r9 - 0x4d, 0x85, 0xc0, //0x00001c55 testq %r8, %r8 - 0x0f, 0x84, 0x93, 0x00, 0x00, 0x00, //0x00001c58 je LBB0_333 - //0x00001c5e LBB0_323 - 0x48, 0x83, 0xc7, 0x01, //0x00001c5e addq $1, %rdi - //0x00001c62 LBB0_324 - 0x31, 0xf6, //0x00001c62 xorl %esi, %esi - //0x00001c64 LBB0_325 - 0x41, 0x0f, 0xb6, 0x0c, 0x32, //0x00001c64 movzbl (%r10,%rsi), %ecx - 0x80, 0xf9, 0x22, //0x00001c69 cmpb $34, %cl - 0x0f, 0x84, 0x78, 0x00, 0x00, 0x00, //0x00001c6c je LBB0_332 - 0x80, 0xf9, 0x5c, //0x00001c72 cmpb $92, %cl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00001c75 je LBB0_330 - 0x48, 0x83, 0xc6, 0x01, //0x00001c7b addq $1, %rsi - 0x49, 0x39, 0xf0, //0x00001c7f cmpq %rsi, %r8 - 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x00001c82 jne LBB0_325 - 0xe9, 0x87, 0x00, 0x00, 0x00, //0x00001c88 jmp LBB0_328 - //0x00001c8d LBB0_330 - 0x49, 0x8d, 0x48, 0xff, //0x00001c8d leaq $-1(%r8), %rcx - 0x48, 0x39, 0xf1, //0x00001c91 cmpq %rsi, %rcx - 0x0f, 0x84, 0x0e, 0x36, 0x00, 0x00, //0x00001c94 je LBB0_967 - 0x4c, 0x89, 0xf3, //0x00001c9a movq %r14, %rbx - 0x4a, 0x8d, 0x0c, 0x17, //0x00001c9d leaq (%rdi,%r10), %rcx - 0x48, 0x01, 0xf1, //0x00001ca1 addq %rsi, %rcx - 0x49, 0x83, 0xf9, 0xff, //0x00001ca4 cmpq $-1, %r9 - 0x48, 0x8b, 0x55, 0xb8, //0x00001ca8 movq $-72(%rbp), %rdx - 0x48, 0x0f, 0x44, 0xd1, //0x00001cac cmoveq %rcx, %rdx - 0x48, 0x89, 0x55, 0xb8, //0x00001cb0 movq %rdx, $-72(%rbp) - 0x4c, 0x0f, 0x44, 0xc9, //0x00001cb4 cmoveq %rcx, %r9 - 0x49, 0x01, 0xf2, //0x00001cb8 addq %rsi, %r10 - 0x49, 0x83, 0xc2, 0x02, //0x00001cbb addq $2, %r10 - 0x4c, 0x89, 0xc1, //0x00001cbf movq %r8, %rcx - 0x48, 0x29, 0xf1, //0x00001cc2 subq %rsi, %rcx - 0x48, 0x83, 0xc1, 0xfe, //0x00001cc5 addq $-2, %rcx - 0x49, 0x83, 0xc0, 0xfe, //0x00001cc9 addq $-2, %r8 - 0x49, 0x39, 0xf0, //0x00001ccd cmpq %rsi, %r8 - 0x49, 0x89, 0xc8, //0x00001cd0 movq %rcx, %r8 - 0x4c, 0x8b, 0x7d, 0xc0, //0x00001cd3 movq $-64(%rbp), %r15 - 0x4c, 0x8b, 0x65, 0xb0, //0x00001cd7 movq $-80(%rbp), %r12 - 0x48, 0x8b, 0x5d, 0x90, //0x00001cdb movq $-112(%rbp), %rbx - 0x0f, 0x85, 0x7d, 0xff, 0xff, 0xff, //0x00001cdf jne LBB0_324 - 0xe9, 0xbe, 0x35, 0x00, 0x00, //0x00001ce5 jmp LBB0_967 - //0x00001cea LBB0_332 - 0x49, 0x01, 0xf2, //0x00001cea addq %rsi, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00001ced addq $1, %r10 - //0x00001cf1 LBB0_333 - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001cf1 movabsq $4294977024, %r9 - 0x48, 0x8b, 0x4d, 0xb8, //0x00001cfb movq $-72(%rbp), %rcx - //0x00001cff LBB0_334 - 0x4d, 0x29, 0xea, //0x00001cff subq %r13, %r10 - 0x4c, 0x8b, 0x45, 0xc8, //0x00001d02 movq $-56(%rbp), %r8 - 0x4d, 0x85, 0xd2, //0x00001d06 testq %r10, %r10 - 0x0f, 0x89, 0x77, 0xe9, 0xff, 0xff, //0x00001d09 jns LBB0_78 - 0xe9, 0x98, 0x35, 0x00, 0x00, //0x00001d0f jmp LBB0_968 - //0x00001d14 LBB0_328 - 0x80, 0xf9, 0x22, //0x00001d14 cmpb $34, %cl - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001d17 movabsq $4294977024, %r9 - 0x48, 0x8b, 0x4d, 0xb8, //0x00001d21 movq $-72(%rbp), %rcx - 0x0f, 0x85, 0x7d, 0x35, 0x00, 0x00, //0x00001d25 jne LBB0_967 - 0x4d, 0x01, 0xc2, //0x00001d2b addq %r8, %r10 - 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x00001d2e jmp LBB0_334 - //0x00001d33 LBB0_335 - 0x4d, 0x85, 0xc0, //0x00001d33 testq %r8, %r8 - 0x0f, 0x84, 0x6c, 0x35, 0x00, 0x00, //0x00001d36 je LBB0_967 - 0x48, 0x89, 0xde, //0x00001d3c movq %rbx, %rsi - 0x4c, 0x89, 0xf3, //0x00001d3f movq %r14, %rbx - 0x4c, 0x89, 0xef, //0x00001d42 movq %r13, %rdi - 0x48, 0xf7, 0xd7, //0x00001d45 notq %rdi - 0x49, 0x8d, 0x0c, 0x3a, //0x00001d48 leaq (%r10,%rdi), %rcx - 0x48, 0x8b, 0x55, 0xb8, //0x00001d4c movq $-72(%rbp), %rdx - 0x48, 0x83, 0xfa, 0xff, //0x00001d50 cmpq $-1, %rdx - 0x49, 0x89, 0xd1, //0x00001d54 movq %rdx, %r9 - 0x48, 0x0f, 0x44, 0xd1, //0x00001d57 cmoveq %rcx, %rdx - 0x4c, 0x0f, 0x44, 0xc9, //0x00001d5b cmoveq %rcx, %r9 - 0x49, 0x83, 0xc2, 0x01, //0x00001d5f addq $1, %r10 - 0x49, 0x83, 0xc0, 0xff, //0x00001d63 addq $-1, %r8 - 0x48, 0x89, 0x55, 0xb8, //0x00001d67 movq %rdx, $-72(%rbp) - 0x4c, 0x8b, 0x7d, 0xc0, //0x00001d6b movq $-64(%rbp), %r15 - 0x4c, 0x8b, 0x65, 0xb0, //0x00001d6f movq $-80(%rbp), %r12 - 0x48, 0x89, 0xf3, //0x00001d73 movq %rsi, %rbx - 0x4d, 0x85, 0xc0, //0x00001d76 testq %r8, %r8 - 0x0f, 0x85, 0xdf, 0xfe, 0xff, 0xff, //0x00001d79 jne LBB0_323 - 0xe9, 0x6d, 0xff, 0xff, 0xff, //0x00001d7f jmp LBB0_333 - //0x00001d84 LBB0_337 - 0x4c, 0x8b, 0x7d, 0xc0, //0x00001d84 movq $-64(%rbp), %r15 - 0x4d, 0x8b, 0x17, //0x00001d88 movq (%r15), %r10 - 0x4c, 0x8b, 0x45, 0xc8, //0x00001d8b movq $-56(%rbp), %r8 - 0x4d, 0x89, 0x10, //0x00001d8f movq %r10, (%r8) - //0x00001d92 LBB0_338 - 0x4c, 0x8b, 0x65, 0xb0, //0x00001d92 movq $-80(%rbp), %r12 - 0xe9, 0xdf, 0xf8, 0xff, 0xff, //0x00001d96 jmp LBB0_260 - //0x00001d9b LBB0_339 - 0x49, 0x8d, 0x40, 0xff, //0x00001d9b leaq $-1(%r8), %rax - 0x4c, 0x39, 0xf0, //0x00001d9f cmpq %r14, %rax - 0x0f, 0x85, 0x0d, 0x00, 0x00, 0x00, //0x00001da2 jne LBB0_341 - 0x4c, 0x8b, 0x45, 0xc8, //0x00001da8 movq $-56(%rbp), %r8 - 0x4c, 0x8b, 0x7d, 0xc0, //0x00001dac movq $-64(%rbp), %r15 - 0xe9, 0xdd, 0xff, 0xff, 0xff, //0x00001db0 jmp LBB0_338 - //0x00001db5 LBB0_341 - 0x4b, 0x8d, 0x04, 0x0e, //0x00001db5 leaq (%r14,%r9), %rax - 0x48, 0x83, 0xc0, 0x02, //0x00001db9 addq $2, %rax - 0x4d, 0x29, 0xf0, //0x00001dbd subq %r14, %r8 - 0x49, 0x83, 0xc0, 0xfe, //0x00001dc0 addq $-2, %r8 - 0x4d, 0x89, 0xc6, //0x00001dc4 movq %r8, %r14 - 0x4c, 0x8b, 0x7d, 0xc0, //0x00001dc7 movq $-64(%rbp), %r15 - 0x4c, 0x8b, 0x65, 0xb0, //0x00001dcb movq $-80(%rbp), %r12 - 0xe9, 0xad, 0xef, 0xff, 0xff, //0x00001dcf jmp LBB0_203 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001dd4 .p2align 4, 0x90 - //0x00001de0 LBB0_342 - 0x80, 0xf9, 0x5b, //0x00001de0 cmpb $91, %cl - 0x0f, 0x85, 0x5a, 0x28, 0x00, 0x00, //0x00001de3 jne LBB0_868 - 0x49, 0x8b, 0x43, 0x08, //0x00001de9 movq $8(%r11), %rax - 0x4c, 0x8b, 0x30, //0x00001ded movq (%rax), %r14 - 0x4d, 0x85, 0xf6, //0x00001df0 testq %r14, %r14 - 0x0f, 0x88, 0x0a, 0x28, 0x00, 0x00, //0x00001df3 js LBB0_861 - 0x49, 0x8b, 0x0f, //0x00001df9 movq (%r15), %rcx - 0x49, 0x39, 0xca, //0x00001dfc cmpq %rcx, %r10 - 0x0f, 0x83, 0x2b, 0x00, 0x00, 0x00, //0x00001dff jae LBB0_349 - 0x43, 0x8a, 0x44, 0x15, 0x00, //0x00001e05 movb (%r13,%r10), %al - 0x3c, 0x0d, //0x00001e0a cmpb $13, %al - 0x0f, 0x84, 0x1e, 0x00, 0x00, 0x00, //0x00001e0c je LBB0_349 - 0x3c, 0x20, //0x00001e12 cmpb $32, %al - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001e14 je LBB0_349 - 0x04, 0xf7, //0x00001e1a addb $-9, %al - 0x3c, 0x01, //0x00001e1c cmpb $1, %al - 0x0f, 0x86, 0x0c, 0x00, 0x00, 0x00, //0x00001e1e jbe LBB0_349 - 0x4c, 0x89, 0xd2, //0x00001e24 movq %r10, %rdx - 0xe9, 0xfc, 0x00, 0x00, 0x00, //0x00001e27 jmp LBB0_371 - 0x90, 0x90, 0x90, 0x90, //0x00001e2c .p2align 4, 0x90 - //0x00001e30 LBB0_349 - 0x49, 0x8d, 0x52, 0x01, //0x00001e30 leaq $1(%r10), %rdx - 0x48, 0x39, 0xca, //0x00001e34 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001e37 jae LBB0_353 - 0x41, 0x8a, 0x44, 0x15, 0x00, //0x00001e3d movb (%r13,%rdx), %al - 0x3c, 0x0d, //0x00001e42 cmpb $13, %al - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001e44 je LBB0_353 - 0x3c, 0x20, //0x00001e4a cmpb $32, %al - 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x00001e4c je LBB0_353 - 0x04, 0xf7, //0x00001e52 addb $-9, %al - 0x3c, 0x01, //0x00001e54 cmpb $1, %al - 0x0f, 0x87, 0xcc, 0x00, 0x00, 0x00, //0x00001e56 ja LBB0_371 - 0x90, 0x90, 0x90, 0x90, //0x00001e5c .p2align 4, 0x90 - //0x00001e60 LBB0_353 - 0x49, 0x8d, 0x52, 0x02, //0x00001e60 leaq $2(%r10), %rdx - 0x48, 0x39, 0xca, //0x00001e64 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001e67 jae LBB0_357 - 0x41, 0x8a, 0x44, 0x15, 0x00, //0x00001e6d movb (%r13,%rdx), %al - 0x3c, 0x0d, //0x00001e72 cmpb $13, %al - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001e74 je LBB0_357 - 0x3c, 0x20, //0x00001e7a cmpb $32, %al - 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x00001e7c je LBB0_357 - 0x04, 0xf7, //0x00001e82 addb $-9, %al - 0x3c, 0x01, //0x00001e84 cmpb $1, %al - 0x0f, 0x87, 0x9c, 0x00, 0x00, 0x00, //0x00001e86 ja LBB0_371 - 0x90, 0x90, 0x90, 0x90, //0x00001e8c .p2align 4, 0x90 - //0x00001e90 LBB0_357 - 0x49, 0x8d, 0x52, 0x03, //0x00001e90 leaq $3(%r10), %rdx - 0x48, 0x39, 0xca, //0x00001e94 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001e97 jae LBB0_361 - 0x41, 0x8a, 0x44, 0x15, 0x00, //0x00001e9d movb (%r13,%rdx), %al - 0x3c, 0x0d, //0x00001ea2 cmpb $13, %al - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001ea4 je LBB0_361 - 0x3c, 0x20, //0x00001eaa cmpb $32, %al - 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x00001eac je LBB0_361 - 0x04, 0xf7, //0x00001eb2 addb $-9, %al - 0x3c, 0x01, //0x00001eb4 cmpb $1, %al - 0x0f, 0x87, 0x6c, 0x00, 0x00, 0x00, //0x00001eb6 ja LBB0_371 - 0x90, 0x90, 0x90, 0x90, //0x00001ebc .p2align 4, 0x90 - //0x00001ec0 LBB0_361 - 0x49, 0x8d, 0x52, 0x04, //0x00001ec0 leaq $4(%r10), %rdx - 0x48, 0x39, 0xd1, //0x00001ec4 cmpq %rdx, %rcx - 0x0f, 0x86, 0x3e, 0x00, 0x00, 0x00, //0x00001ec7 jbe LBB0_367 - 0x48, 0x39, 0xd1, //0x00001ecd cmpq %rdx, %rcx - 0x0f, 0x84, 0x3d, 0x00, 0x00, 0x00, //0x00001ed0 je LBB0_368 - 0x4a, 0x8d, 0x04, 0x29, //0x00001ed6 leaq (%rcx,%r13), %rax - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001eda .p2align 4, 0x90 - //0x00001ee0 LBB0_364 - 0x41, 0x0f, 0xbe, 0x74, 0x15, 0x00, //0x00001ee0 movsbl (%r13,%rdx), %esi - 0x83, 0xfe, 0x20, //0x00001ee6 cmpl $32, %esi - 0x0f, 0x87, 0x30, 0x00, 0x00, 0x00, //0x00001ee9 ja LBB0_370 - 0x49, 0x0f, 0xa3, 0xf1, //0x00001eef btq %rsi, %r9 - 0x0f, 0x83, 0x26, 0x00, 0x00, 0x00, //0x00001ef3 jae LBB0_370 - 0x48, 0x83, 0xc2, 0x01, //0x00001ef9 addq $1, %rdx - 0x48, 0x39, 0xd1, //0x00001efd cmpq %rdx, %rcx - 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x00001f00 jne LBB0_364 - 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00001f06 jmp LBB0_369 - //0x00001f0b LBB0_367 - 0x49, 0x89, 0xd2, //0x00001f0b movq %rdx, %r10 - 0xe9, 0x28, 0x00, 0x00, 0x00, //0x00001f0e jmp LBB0_372 - //0x00001f13 LBB0_368 - 0x4c, 0x01, 0xea, //0x00001f13 addq %r13, %rdx - 0x48, 0x89, 0xd0, //0x00001f16 movq %rdx, %rax - //0x00001f19 LBB0_369 - 0x4c, 0x29, 0xe8, //0x00001f19 subq %r13, %rax - 0x48, 0x89, 0xc2, //0x00001f1c movq %rax, %rdx - //0x00001f1f LBB0_370 - 0x48, 0x39, 0xca, //0x00001f1f cmpq %rcx, %rdx - 0x0f, 0x83, 0x13, 0x00, 0x00, 0x00, //0x00001f22 jae LBB0_372 - //0x00001f28 LBB0_371 - 0x4c, 0x8d, 0x52, 0x01, //0x00001f28 leaq $1(%rdx), %r10 - 0x4d, 0x89, 0x10, //0x00001f2c movq %r10, (%r8) - 0x41, 0x80, 0x7c, 0x15, 0x00, 0x5d, //0x00001f2f cmpb $93, (%r13,%rdx) - 0x0f, 0x84, 0xba, 0x10, 0x00, 0x00, //0x00001f35 je LBB0_551 - //0x00001f3b LBB0_372 - 0x49, 0x83, 0xc2, 0xff, //0x00001f3b addq $-1, %r10 - 0x4d, 0x89, 0x10, //0x00001f3f movq %r10, (%r8) - 0x4d, 0x85, 0xf6, //0x00001f42 testq %r14, %r14 - 0x0f, 0x8e, 0x95, 0x0e, 0x00, 0x00, //0x00001f45 jle LBB0_458 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001f4b .p2align 4, 0x90 - //0x00001f50 LBB0_373 - 0x49, 0x8b, 0x17, //0x00001f50 movq (%r15), %rdx - 0x49, 0x39, 0xd2, //0x00001f53 cmpq %rdx, %r10 - 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00001f56 jae LBB0_378 - 0x43, 0x8a, 0x44, 0x15, 0x00, //0x00001f5c movb (%r13,%r10), %al - 0x3c, 0x0d, //0x00001f61 cmpb $13, %al - 0x0f, 0x84, 0x27, 0x00, 0x00, 0x00, //0x00001f63 je LBB0_378 - 0x3c, 0x20, //0x00001f69 cmpb $32, %al - 0x0f, 0x84, 0x1f, 0x00, 0x00, 0x00, //0x00001f6b je LBB0_378 - 0x04, 0xf7, //0x00001f71 addb $-9, %al - 0x3c, 0x01, //0x00001f73 cmpb $1, %al - 0x0f, 0x86, 0x15, 0x00, 0x00, 0x00, //0x00001f75 jbe LBB0_378 - 0x4c, 0x89, 0xd1, //0x00001f7b movq %r10, %rcx - 0xe9, 0xfd, 0x00, 0x00, 0x00, //0x00001f7e jmp LBB0_399 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001f83 .p2align 4, 0x90 - //0x00001f90 LBB0_378 - 0x49, 0x8d, 0x4a, 0x01, //0x00001f90 leaq $1(%r10), %rcx - 0x48, 0x39, 0xd1, //0x00001f94 cmpq %rdx, %rcx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001f97 jae LBB0_382 - 0x41, 0x8a, 0x44, 0x0d, 0x00, //0x00001f9d movb (%r13,%rcx), %al - 0x3c, 0x0d, //0x00001fa2 cmpb $13, %al - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001fa4 je LBB0_382 - 0x3c, 0x20, //0x00001faa cmpb $32, %al - 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x00001fac je LBB0_382 - 0x04, 0xf7, //0x00001fb2 addb $-9, %al - 0x3c, 0x01, //0x00001fb4 cmpb $1, %al - 0x0f, 0x87, 0xc4, 0x00, 0x00, 0x00, //0x00001fb6 ja LBB0_399 - 0x90, 0x90, 0x90, 0x90, //0x00001fbc .p2align 4, 0x90 - //0x00001fc0 LBB0_382 - 0x49, 0x8d, 0x4a, 0x02, //0x00001fc0 leaq $2(%r10), %rcx - 0x48, 0x39, 0xd1, //0x00001fc4 cmpq %rdx, %rcx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001fc7 jae LBB0_386 - 0x41, 0x8a, 0x44, 0x0d, 0x00, //0x00001fcd movb (%r13,%rcx), %al - 0x3c, 0x0d, //0x00001fd2 cmpb $13, %al - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001fd4 je LBB0_386 - 0x3c, 0x20, //0x00001fda cmpb $32, %al - 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x00001fdc je LBB0_386 - 0x04, 0xf7, //0x00001fe2 addb $-9, %al - 0x3c, 0x01, //0x00001fe4 cmpb $1, %al - 0x0f, 0x87, 0x94, 0x00, 0x00, 0x00, //0x00001fe6 ja LBB0_399 - 0x90, 0x90, 0x90, 0x90, //0x00001fec .p2align 4, 0x90 - //0x00001ff0 LBB0_386 - 0x49, 0x8d, 0x4a, 0x03, //0x00001ff0 leaq $3(%r10), %rcx - 0x48, 0x39, 0xd1, //0x00001ff4 cmpq %rdx, %rcx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001ff7 jae LBB0_390 - 0x41, 0x8a, 0x44, 0x0d, 0x00, //0x00001ffd movb (%r13,%rcx), %al - 0x3c, 0x0d, //0x00002002 cmpb $13, %al - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00002004 je LBB0_390 - 0x3c, 0x20, //0x0000200a cmpb $32, %al - 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x0000200c je LBB0_390 - 0x04, 0xf7, //0x00002012 addb $-9, %al - 0x3c, 0x01, //0x00002014 cmpb $1, %al - 0x0f, 0x87, 0x64, 0x00, 0x00, 0x00, //0x00002016 ja LBB0_399 - 0x90, 0x90, 0x90, 0x90, //0x0000201c .p2align 4, 0x90 - //0x00002020 LBB0_390 - 0x49, 0x8d, 0x4a, 0x04, //0x00002020 leaq $4(%r10), %rcx - 0x48, 0x39, 0xca, //0x00002024 cmpq %rcx, %rdx - 0x0f, 0x86, 0xa3, 0x02, 0x00, 0x00, //0x00002027 jbe LBB0_429 - 0x48, 0x39, 0xca, //0x0000202d cmpq %rcx, %rdx - 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00002030 je LBB0_396 - 0x4a, 0x8d, 0x04, 0x2a, //0x00002036 leaq (%rdx,%r13), %rax - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000203a .p2align 4, 0x90 - //0x00002040 LBB0_393 - 0x41, 0x0f, 0xbe, 0x74, 0x0d, 0x00, //0x00002040 movsbl (%r13,%rcx), %esi - 0x83, 0xfe, 0x20, //0x00002046 cmpl $32, %esi - 0x0f, 0x87, 0x28, 0x00, 0x00, 0x00, //0x00002049 ja LBB0_398 - 0x49, 0x0f, 0xa3, 0xf1, //0x0000204f btq %rsi, %r9 - 0x0f, 0x83, 0x1e, 0x00, 0x00, 0x00, //0x00002053 jae LBB0_398 - 0x48, 0x83, 0xc1, 0x01, //0x00002059 addq $1, %rcx - 0x48, 0x39, 0xca, //0x0000205d cmpq %rcx, %rdx - 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x00002060 jne LBB0_393 - 0xe9, 0x06, 0x00, 0x00, 0x00, //0x00002066 jmp LBB0_397 - //0x0000206b LBB0_396 - 0x4c, 0x01, 0xe9, //0x0000206b addq %r13, %rcx - 0x48, 0x89, 0xc8, //0x0000206e movq %rcx, %rax - //0x00002071 LBB0_397 - 0x4c, 0x29, 0xe8, //0x00002071 subq %r13, %rax - 0x48, 0x89, 0xc1, //0x00002074 movq %rax, %rcx - //0x00002077 LBB0_398 - 0x48, 0x39, 0xd1, //0x00002077 cmpq %rdx, %rcx - 0x0f, 0x83, 0x56, 0x02, 0x00, 0x00, //0x0000207a jae LBB0_430 - //0x00002080 LBB0_399 - 0x4c, 0x8d, 0x51, 0x01, //0x00002080 leaq $1(%rcx), %r10 - 0x4d, 0x89, 0x10, //0x00002084 movq %r10, (%r8) - 0x41, 0x0f, 0xbe, 0x44, 0x0d, 0x00, //0x00002087 movsbl (%r13,%rcx), %eax - 0x83, 0xf8, 0x7b, //0x0000208d cmpl $123, %eax - 0x0f, 0x87, 0x3a, 0x02, 0x00, 0x00, //0x00002090 ja LBB0_429 - 0x48, 0x8d, 0x15, 0xfb, 0x33, 0x00, 0x00, //0x00002096 leaq $13307(%rip), %rdx /* LJTI0_0+0(%rip) */ - 0x48, 0x63, 0x04, 0x82, //0x0000209d movslq (%rdx,%rax,4), %rax - 0x48, 0x01, 0xd0, //0x000020a1 addq %rdx, %rax - 0xff, 0xe0, //0x000020a4 jmpq *%rax - //0x000020a6 LBB0_401 - 0x49, 0x8b, 0x07, //0x000020a6 movq (%r15), %rax - 0x48, 0x89, 0xc2, //0x000020a9 movq %rax, %rdx - 0x4c, 0x29, 0xd2, //0x000020ac subq %r10, %rdx - 0x48, 0x83, 0xfa, 0x10, //0x000020af cmpq $16, %rdx - 0x0f, 0x82, 0xcd, 0x0c, 0x00, 0x00, //0x000020b3 jb LBB0_520 - 0x48, 0x89, 0xca, //0x000020b9 movq %rcx, %rdx - 0x48, 0xf7, 0xd2, //0x000020bc notq %rdx - 0x48, 0x83, 0xc1, 0x01, //0x000020bf addq $1, %rcx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000020c3 .p2align 4, 0x90 - //0x000020d0 LBB0_403 - 0xf3, 0x41, 0x0f, 0x6f, 0x54, 0x0d, 0x00, //0x000020d0 movdqu (%r13,%rcx), %xmm2 - 0x66, 0x0f, 0x6f, 0xda, //0x000020d7 movdqa %xmm2, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x000020db pcmpeqb %xmm13, %xmm3 - 0x66, 0x41, 0x0f, 0xdb, 0xd6, //0x000020e0 pand %xmm14, %xmm2 - 0x66, 0x0f, 0x74, 0xd4, //0x000020e5 pcmpeqb %xmm4, %xmm2 - 0x66, 0x0f, 0xeb, 0xd3, //0x000020e9 por %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xf2, //0x000020ed pmovmskb %xmm2, %esi - 0x85, 0xf6, //0x000020f1 testl %esi, %esi - 0x0f, 0x85, 0x87, 0x00, 0x00, 0x00, //0x000020f3 jne LBB0_413 - 0x48, 0x83, 0xc1, 0x10, //0x000020f9 addq $16, %rcx - 0x48, 0x8d, 0x34, 0x10, //0x000020fd leaq (%rax,%rdx), %rsi - 0x48, 0x83, 0xc6, 0xf0, //0x00002101 addq $-16, %rsi - 0x48, 0x83, 0xc2, 0xf0, //0x00002105 addq $-16, %rdx - 0x48, 0x83, 0xfe, 0x0f, //0x00002109 cmpq $15, %rsi - 0x0f, 0x87, 0xbd, 0xff, 0xff, 0xff, //0x0000210d ja LBB0_403 - 0x4d, 0x89, 0xea, //0x00002113 movq %r13, %r10 - 0x49, 0x29, 0xd2, //0x00002116 subq %rdx, %r10 - 0x48, 0x01, 0xd0, //0x00002119 addq %rdx, %rax - 0x48, 0x89, 0xc2, //0x0000211c movq %rax, %rdx - 0x48, 0x85, 0xd2, //0x0000211f testq %rdx, %rdx - 0x0f, 0x84, 0x36, 0x00, 0x00, 0x00, //0x00002122 je LBB0_412 - //0x00002128 LBB0_406 - 0x49, 0x8d, 0x0c, 0x12, //0x00002128 leaq (%r10,%rdx), %rcx - 0x31, 0xc0, //0x0000212c xorl %eax, %eax - //0x0000212e LBB0_407 - 0x41, 0x0f, 0xb6, 0x1c, 0x02, //0x0000212e movzbl (%r10,%rax), %ebx - 0x80, 0xfb, 0x2c, //0x00002133 cmpb $44, %bl - 0x0f, 0x84, 0x9d, 0x0b, 0x00, 0x00, //0x00002136 je LBB0_518 - 0x80, 0xfb, 0x7d, //0x0000213c cmpb $125, %bl - 0x0f, 0x84, 0x94, 0x0b, 0x00, 0x00, //0x0000213f je LBB0_518 - 0x80, 0xfb, 0x5d, //0x00002145 cmpb $93, %bl - 0x0f, 0x84, 0x8b, 0x0b, 0x00, 0x00, //0x00002148 je LBB0_518 - 0x48, 0x83, 0xc0, 0x01, //0x0000214e addq $1, %rax - 0x48, 0x39, 0xc2, //0x00002152 cmpq %rax, %rdx - 0x0f, 0x85, 0xd3, 0xff, 0xff, 0xff, //0x00002155 jne LBB0_407 - 0x49, 0x89, 0xca, //0x0000215b movq %rcx, %r10 - //0x0000215e LBB0_412 - 0x4d, 0x29, 0xea, //0x0000215e subq %r13, %r10 - 0x4c, 0x8b, 0x45, 0xc8, //0x00002161 movq $-56(%rbp), %r8 - 0x4d, 0x89, 0x10, //0x00002165 movq %r10, (%r8) - 0x4c, 0x8b, 0x7d, 0xc0, //0x00002168 movq $-64(%rbp), %r15 - 0x4c, 0x8b, 0x65, 0xb0, //0x0000216c movq $-80(%rbp), %r12 - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002170 movabsq $4294977024, %r9 - 0xe9, 0x57, 0x01, 0x00, 0x00, //0x0000217a jmp LBB0_430 - 0x90, //0x0000217f .p2align 4, 0x90 - //0x00002180 LBB0_413 - 0x66, 0x0f, 0xbc, 0xc6, //0x00002180 bsfw %si, %ax - 0x44, 0x0f, 0xb7, 0xd0, //0x00002184 movzwl %ax, %r10d - 0x49, 0x29, 0xd2, //0x00002188 subq %rdx, %r10 - 0x4d, 0x89, 0x10, //0x0000218b movq %r10, (%r8) - 0xe9, 0x43, 0x01, 0x00, 0x00, //0x0000218e jmp LBB0_430 - //0x00002193 LBB0_414 - 0x48, 0x83, 0xc1, 0x04, //0x00002193 addq $4, %rcx - 0x49, 0x3b, 0x0f, //0x00002197 cmpq (%r15), %rcx - 0x0f, 0x86, 0x30, 0x01, 0x00, 0x00, //0x0000219a jbe LBB0_429 - 0xe9, 0x31, 0x01, 0x00, 0x00, //0x000021a0 jmp LBB0_430 - //0x000021a5 LBB0_415 - 0x4c, 0x89, 0x5d, 0xa8, //0x000021a5 movq %r11, $-88(%rbp) - 0x4d, 0x8b, 0x07, //0x000021a9 movq (%r15), %r8 - 0x4d, 0x89, 0xc7, //0x000021ac movq %r8, %r15 - 0x4d, 0x29, 0xd7, //0x000021af subq %r10, %r15 - 0x49, 0x83, 0xff, 0x20, //0x000021b2 cmpq $32, %r15 - 0x0f, 0x8c, 0xdb, 0x0b, 0x00, 0x00, //0x000021b6 jl LBB0_521 - 0x4e, 0x8d, 0x0c, 0x29, //0x000021bc leaq (%rcx,%r13), %r9 - 0x49, 0x29, 0xc8, //0x000021c0 subq %rcx, %r8 - 0x41, 0xbc, 0x1f, 0x00, 0x00, 0x00, //0x000021c3 movl $31, %r12d - 0x45, 0x31, 0xff, //0x000021c9 xorl %r15d, %r15d - 0x45, 0x31, 0xdb, //0x000021cc xorl %r11d, %r11d - 0xe9, 0x32, 0x00, 0x00, 0x00, //0x000021cf jmp LBB0_417 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000021d4 .p2align 4, 0x90 - //0x000021e0 LBB0_422 - 0x45, 0x31, 0xdb, //0x000021e0 xorl %r11d, %r11d - 0x48, 0x85, 0xf6, //0x000021e3 testq %rsi, %rsi - 0x0f, 0x85, 0xa3, 0x00, 0x00, 0x00, //0x000021e6 jne LBB0_419 - //0x000021ec LBB0_423 - 0x49, 0x83, 0xc7, 0x20, //0x000021ec addq $32, %r15 - 0x4b, 0x8d, 0x04, 0x20, //0x000021f0 leaq (%r8,%r12), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x000021f4 addq $-32, %rax - 0x49, 0x83, 0xc4, 0xe0, //0x000021f8 addq $-32, %r12 - 0x48, 0x83, 0xf8, 0x3f, //0x000021fc cmpq $63, %rax - 0x0f, 0x8e, 0xe1, 0x0a, 0x00, 0x00, //0x00002200 jle LBB0_424 - //0x00002206 LBB0_417 - 0xf3, 0x43, 0x0f, 0x6f, 0x54, 0x39, 0x01, //0x00002206 movdqu $1(%r9,%r15), %xmm2 - 0xf3, 0x43, 0x0f, 0x6f, 0x5c, 0x39, 0x11, //0x0000220d movdqu $17(%r9,%r15), %xmm3 - 0x66, 0x0f, 0x6f, 0xea, //0x00002214 movdqa %xmm2, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002218 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x0000221c pmovmskb %xmm5, %edi - 0x66, 0x0f, 0x6f, 0xeb, //0x00002220 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002224 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00002228 pmovmskb %xmm5, %esi - 0x48, 0xc1, 0xe6, 0x10, //0x0000222c shlq $16, %rsi - 0x48, 0x09, 0xfe, //0x00002230 orq %rdi, %rsi - 0x66, 0x0f, 0x74, 0xd1, //0x00002233 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xda, //0x00002237 pmovmskb %xmm2, %ebx - 0x66, 0x0f, 0x74, 0xd9, //0x0000223b pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x0000223f pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe7, 0x10, //0x00002243 shlq $16, %rdi - 0x48, 0x09, 0xdf, //0x00002247 orq %rbx, %rdi - 0x48, 0x89, 0xfb, //0x0000224a movq %rdi, %rbx - 0x4c, 0x09, 0xdb, //0x0000224d orq %r11, %rbx - 0x0f, 0x84, 0x8a, 0xff, 0xff, 0xff, //0x00002250 je LBB0_422 - 0x44, 0x89, 0xdb, //0x00002256 movl %r11d, %ebx - 0xf7, 0xd3, //0x00002259 notl %ebx - 0x21, 0xfb, //0x0000225b andl %edi, %ebx - 0x8d, 0x04, 0x1b, //0x0000225d leal (%rbx,%rbx), %eax - 0x44, 0x09, 0xd8, //0x00002260 orl %r11d, %eax - 0x89, 0xc2, //0x00002263 movl %eax, %edx - 0xf7, 0xd2, //0x00002265 notl %edx - 0x21, 0xfa, //0x00002267 andl %edi, %edx - 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002269 andl $-1431655766, %edx - 0x45, 0x31, 0xdb, //0x0000226f xorl %r11d, %r11d - 0x01, 0xda, //0x00002272 addl %ebx, %edx - 0x41, 0x0f, 0x92, 0xc3, //0x00002274 setb %r11b - 0x01, 0xd2, //0x00002278 addl %edx, %edx - 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x0000227a xorl $1431655765, %edx - 0x21, 0xc2, //0x00002280 andl %eax, %edx - 0xf7, 0xd2, //0x00002282 notl %edx - 0x21, 0xd6, //0x00002284 andl %edx, %esi - 0x48, 0x85, 0xf6, //0x00002286 testq %rsi, %rsi - 0x0f, 0x84, 0x5d, 0xff, 0xff, 0xff, //0x00002289 je LBB0_423 - //0x0000228f LBB0_419 - 0x0f, 0xbc, 0xc6, //0x0000228f bsfl %esi, %eax - 0x48, 0x01, 0xc8, //0x00002292 addq %rcx, %rax - 0x4d, 0x8d, 0x14, 0x07, //0x00002295 leaq (%r15,%rax), %r10 - 0x49, 0x83, 0xc2, 0x02, //0x00002299 addq $2, %r10 - 0x4c, 0x8b, 0x45, 0xc8, //0x0000229d movq $-56(%rbp), %r8 - 0x4d, 0x89, 0x10, //0x000022a1 movq %r10, (%r8) - //0x000022a4 LBB0_420 - 0x4c, 0x8b, 0x7d, 0xc0, //0x000022a4 movq $-64(%rbp), %r15 - //0x000022a8 LBB0_421 - 0x4c, 0x8b, 0x65, 0xb0, //0x000022a8 movq $-80(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x000022ac movq $-88(%rbp), %r11 - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000022b0 movabsq $4294977024, %r9 - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x000022ba jmp LBB0_430 - //0x000022bf LBB0_428 - 0x48, 0x83, 0xc1, 0x05, //0x000022bf addq $5, %rcx - 0x49, 0x3b, 0x0f, //0x000022c3 cmpq (%r15), %rcx - 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x000022c6 ja LBB0_430 - 0x90, 0x90, 0x90, 0x90, //0x000022cc .p2align 4, 0x90 - //0x000022d0 LBB0_429 - 0x49, 0x89, 0x08, //0x000022d0 movq %rcx, (%r8) - 0x49, 0x89, 0xca, //0x000022d3 movq %rcx, %r10 - //0x000022d6 LBB0_430 - 0x4d, 0x8b, 0x2c, 0x24, //0x000022d6 movq (%r12), %r13 - 0x49, 0x8b, 0x4c, 0x24, 0x08, //0x000022da movq $8(%r12), %rcx - 0x49, 0x39, 0xca, //0x000022df cmpq %rcx, %r10 - 0x0f, 0x83, 0x28, 0x00, 0x00, 0x00, //0x000022e2 jae LBB0_435 - 0x43, 0x8a, 0x44, 0x15, 0x00, //0x000022e8 movb (%r13,%r10), %al - 0x3c, 0x0d, //0x000022ed cmpb $13, %al - 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x000022ef je LBB0_435 - 0x3c, 0x20, //0x000022f5 cmpb $32, %al - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000022f7 je LBB0_435 - 0x04, 0xf7, //0x000022fd addb $-9, %al - 0x3c, 0x01, //0x000022ff cmpb $1, %al - 0x0f, 0x86, 0x09, 0x00, 0x00, 0x00, //0x00002301 jbe LBB0_435 - 0x4c, 0x89, 0xd2, //0x00002307 movq %r10, %rdx - 0xe9, 0xf6, 0x00, 0x00, 0x00, //0x0000230a jmp LBB0_456 - 0x90, //0x0000230f .p2align 4, 0x90 - //0x00002310 LBB0_435 - 0x49, 0x8d, 0x52, 0x01, //0x00002310 leaq $1(%r10), %rdx - 0x48, 0x39, 0xca, //0x00002314 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002317 jae LBB0_439 - 0x41, 0x8a, 0x44, 0x15, 0x00, //0x0000231d movb (%r13,%rdx), %al - 0x3c, 0x0d, //0x00002322 cmpb $13, %al - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00002324 je LBB0_439 - 0x3c, 0x20, //0x0000232a cmpb $32, %al - 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x0000232c je LBB0_439 - 0x04, 0xf7, //0x00002332 addb $-9, %al - 0x3c, 0x01, //0x00002334 cmpb $1, %al - 0x0f, 0x87, 0xc9, 0x00, 0x00, 0x00, //0x00002336 ja LBB0_456 - 0x90, 0x90, 0x90, 0x90, //0x0000233c .p2align 4, 0x90 - //0x00002340 LBB0_439 - 0x49, 0x8d, 0x52, 0x02, //0x00002340 leaq $2(%r10), %rdx - 0x48, 0x39, 0xca, //0x00002344 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002347 jae LBB0_443 - 0x41, 0x8a, 0x44, 0x15, 0x00, //0x0000234d movb (%r13,%rdx), %al - 0x3c, 0x0d, //0x00002352 cmpb $13, %al - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00002354 je LBB0_443 - 0x3c, 0x20, //0x0000235a cmpb $32, %al - 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x0000235c je LBB0_443 - 0x04, 0xf7, //0x00002362 addb $-9, %al - 0x3c, 0x01, //0x00002364 cmpb $1, %al - 0x0f, 0x87, 0x99, 0x00, 0x00, 0x00, //0x00002366 ja LBB0_456 - 0x90, 0x90, 0x90, 0x90, //0x0000236c .p2align 4, 0x90 - //0x00002370 LBB0_443 - 0x49, 0x8d, 0x52, 0x03, //0x00002370 leaq $3(%r10), %rdx - 0x48, 0x39, 0xca, //0x00002374 cmpq %rcx, %rdx - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002377 jae LBB0_447 - 0x41, 0x8a, 0x44, 0x15, 0x00, //0x0000237d movb (%r13,%rdx), %al - 0x3c, 0x0d, //0x00002382 cmpb $13, %al - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00002384 je LBB0_447 - 0x3c, 0x20, //0x0000238a cmpb $32, %al - 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x0000238c je LBB0_447 - 0x04, 0xf7, //0x00002392 addb $-9, %al - 0x3c, 0x01, //0x00002394 cmpb $1, %al - 0x0f, 0x87, 0x69, 0x00, 0x00, 0x00, //0x00002396 ja LBB0_456 - 0x90, 0x90, 0x90, 0x90, //0x0000239c .p2align 4, 0x90 - //0x000023a0 LBB0_447 - 0x49, 0x8d, 0x52, 0x04, //0x000023a0 leaq $4(%r10), %rdx - 0x48, 0x39, 0xd1, //0x000023a4 cmpq %rdx, %rcx - 0x0f, 0x86, 0x38, 0x0c, 0x00, 0x00, //0x000023a7 jbe LBB0_866 - 0x48, 0x39, 0xd1, //0x000023ad cmpq %rdx, %rcx - 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x000023b0 je LBB0_453 - 0x4a, 0x8d, 0x04, 0x29, //0x000023b6 leaq (%rcx,%r13), %rax - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000023ba .p2align 4, 0x90 - //0x000023c0 LBB0_450 - 0x41, 0x0f, 0xbe, 0x74, 0x15, 0x00, //0x000023c0 movsbl (%r13,%rdx), %esi - 0x83, 0xfe, 0x20, //0x000023c6 cmpl $32, %esi - 0x0f, 0x87, 0x2d, 0x00, 0x00, 0x00, //0x000023c9 ja LBB0_455 - 0x49, 0x0f, 0xa3, 0xf1, //0x000023cf btq %rsi, %r9 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000023d3 jae LBB0_455 - 0x48, 0x83, 0xc2, 0x01, //0x000023d9 addq $1, %rdx - 0x48, 0x39, 0xd1, //0x000023dd cmpq %rdx, %rcx - 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x000023e0 jne LBB0_450 - 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x000023e6 jmp LBB0_454 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x000023eb .p2align 4, 0x90 - //0x000023f0 LBB0_453 - 0x4c, 0x01, 0xea, //0x000023f0 addq %r13, %rdx - 0x48, 0x89, 0xd0, //0x000023f3 movq %rdx, %rax - //0x000023f6 LBB0_454 - 0x4c, 0x29, 0xe8, //0x000023f6 subq %r13, %rax - 0x48, 0x89, 0xc2, //0x000023f9 movq %rax, %rdx - //0x000023fc LBB0_455 - 0x48, 0x39, 0xca, //0x000023fc cmpq %rcx, %rdx - 0x0f, 0x83, 0x3e, 0x22, 0x00, 0x00, //0x000023ff jae LBB0_868 - //0x00002405 LBB0_456 - 0x4c, 0x8d, 0x52, 0x01, //0x00002405 leaq $1(%rdx), %r10 - 0x4d, 0x89, 0x10, //0x00002409 movq %r10, (%r8) - 0x41, 0x8a, 0x44, 0x15, 0x00, //0x0000240c movb (%r13,%rdx), %al - 0x3c, 0x2c, //0x00002411 cmpb $44, %al - 0x0f, 0x85, 0xb1, 0x0b, 0x00, 0x00, //0x00002413 jne LBB0_549 - 0x49, 0x8d, 0x46, 0xff, //0x00002419 leaq $-1(%r14), %rax - 0x49, 0x83, 0xfe, 0x02, //0x0000241d cmpq $2, %r14 - 0x49, 0x89, 0xc6, //0x00002421 movq %rax, %r14 - 0x0f, 0x8d, 0x26, 0xfb, 0xff, 0xff, //0x00002424 jge LBB0_373 - 0xe9, 0xb1, 0x09, 0x00, 0x00, //0x0000242a jmp LBB0_458 - //0x0000242f LBB0_461 - 0x4c, 0x89, 0x5d, 0xa8, //0x0000242f movq %r11, $-88(%rbp) - 0x49, 0x8b, 0x07, //0x00002433 movq (%r15), %rax - 0x4c, 0x29, 0xd0, //0x00002436 subq %r10, %rax - 0x4d, 0x01, 0xd5, //0x00002439 addq %r10, %r13 - 0x45, 0x31, 0xc9, //0x0000243c xorl %r9d, %r9d - 0x31, 0xdb, //0x0000243f xorl %ebx, %ebx - 0x45, 0x31, 0xdb, //0x00002441 xorl %r11d, %r11d - 0x31, 0xc9, //0x00002444 xorl %ecx, %ecx - 0xe9, 0x73, 0x00, 0x00, 0x00, //0x00002446 jmp LBB0_463 - //0x0000244b LBB0_462 - 0x49, 0xc1, 0xff, 0x3f, //0x0000244b sarq $63, %r15 - 0x4c, 0x89, 0xd0, //0x0000244f movq %r10, %rax - 0x48, 0xd1, 0xe8, //0x00002452 shrq %rax - 0x48, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002455 movabsq $6148914691236517205, %rsi - 0x48, 0x21, 0xf0, //0x0000245f andq %rsi, %rax - 0x49, 0x29, 0xc2, //0x00002462 subq %rax, %r10 - 0x4c, 0x89, 0xd0, //0x00002465 movq %r10, %rax - 0x48, 0xba, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00002468 movabsq $3689348814741910323, %rdx - 0x48, 0x21, 0xd0, //0x00002472 andq %rdx, %rax - 0x49, 0xc1, 0xea, 0x02, //0x00002475 shrq $2, %r10 - 0x49, 0x21, 0xd2, //0x00002479 andq %rdx, %r10 - 0x49, 0x01, 0xc2, //0x0000247c addq %rax, %r10 - 0x4c, 0x89, 0xd0, //0x0000247f movq %r10, %rax - 0x48, 0xc1, 0xe8, 0x04, //0x00002482 shrq $4, %rax - 0x4c, 0x01, 0xd0, //0x00002486 addq %r10, %rax - 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00002489 movabsq $1085102592571150095, %rdx - 0x48, 0x21, 0xd0, //0x00002493 andq %rdx, %rax - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002496 movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xc2, //0x000024a0 imulq %rdx, %rax - 0x48, 0xc1, 0xe8, 0x38, //0x000024a4 shrq $56, %rax - 0x49, 0x01, 0xc3, //0x000024a8 addq %rax, %r11 - 0x49, 0x83, 0xc5, 0x40, //0x000024ab addq $64, %r13 - 0x48, 0x8b, 0x45, 0xd0, //0x000024af movq $-48(%rbp), %rax - 0x48, 0x83, 0xc0, 0xc0, //0x000024b3 addq $-64, %rax - 0x4d, 0x89, 0xf9, //0x000024b7 movq %r15, %r9 - 0x48, 0x8b, 0x5d, 0xb8, //0x000024ba movq $-72(%rbp), %rbx - //0x000024be LBB0_463 - 0x48, 0x83, 0xf8, 0x40, //0x000024be cmpq $64, %rax - 0x48, 0x89, 0x45, 0xd0, //0x000024c2 movq %rax, $-48(%rbp) - 0x0f, 0x8c, 0x45, 0x02, 0x00, 0x00, //0x000024c6 jl LBB0_471 - //0x000024cc LBB0_464 - 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x00, //0x000024cc movdqu (%r13), %xmm2 - 0xf3, 0x41, 0x0f, 0x6f, 0x6d, 0x10, //0x000024d2 movdqu $16(%r13), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x7d, 0x20, //0x000024d8 movdqu $32(%r13), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x75, 0x30, //0x000024de movdqu $48(%r13), %xmm6 - 0x66, 0x0f, 0x6f, 0xda, //0x000024e4 movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x000024e8 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xc3, //0x000024ec pmovmskb %xmm3, %eax - 0x66, 0x0f, 0x6f, 0xdd, //0x000024f0 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x000024f4 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x000024f8 pmovmskb %xmm3, %edx - 0x66, 0x0f, 0x6f, 0xdf, //0x000024fc movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002500 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002504 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xde, //0x00002508 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000250c pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00002510 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe7, 0x30, //0x00002514 shlq $48, %rdi - 0x48, 0xc1, 0xe6, 0x20, //0x00002518 shlq $32, %rsi - 0x48, 0x09, 0xfe, //0x0000251c orq %rdi, %rsi - 0x48, 0xc1, 0xe2, 0x10, //0x0000251f shlq $16, %rdx - 0x48, 0x09, 0xf2, //0x00002523 orq %rsi, %rdx - 0x48, 0x09, 0xd0, //0x00002526 orq %rdx, %rax - 0x48, 0x89, 0xc2, //0x00002529 movq %rax, %rdx - 0x48, 0x09, 0xda, //0x0000252c orq %rbx, %rdx - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x0000252f jne LBB0_466 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002535 movq $-1, %rax - 0x31, 0xd2, //0x0000253c xorl %edx, %edx - 0x48, 0x89, 0x55, 0xb8, //0x0000253e movq %rdx, $-72(%rbp) - 0xe9, 0x49, 0x00, 0x00, 0x00, //0x00002542 jmp LBB0_467 - //0x00002547 LBB0_466 - 0x48, 0x89, 0xda, //0x00002547 movq %rbx, %rdx - 0x48, 0xf7, 0xd2, //0x0000254a notq %rdx - 0x48, 0x21, 0xc2, //0x0000254d andq %rax, %rdx - 0x48, 0x8d, 0x34, 0x12, //0x00002550 leaq (%rdx,%rdx), %rsi - 0x48, 0x09, 0xde, //0x00002554 orq %rbx, %rsi - 0x48, 0x89, 0xf7, //0x00002557 movq %rsi, %rdi - 0x48, 0xf7, 0xd7, //0x0000255a notq %rdi - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000255d movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xd8, //0x00002567 andq %rbx, %rax - 0x48, 0x21, 0xf8, //0x0000256a andq %rdi, %rax - 0x31, 0xff, //0x0000256d xorl %edi, %edi - 0x48, 0x01, 0xd0, //0x0000256f addq %rdx, %rax - 0x40, 0x0f, 0x92, 0xc7, //0x00002572 setb %dil - 0x48, 0x89, 0x7d, 0xb8, //0x00002576 movq %rdi, $-72(%rbp) - 0x48, 0x01, 0xc0, //0x0000257a addq %rax, %rax - 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000257d movabsq $6148914691236517205, %rdx - 0x48, 0x31, 0xd0, //0x00002587 xorq %rdx, %rax - 0x48, 0x21, 0xf0, //0x0000258a andq %rsi, %rax - 0x48, 0xf7, 0xd0, //0x0000258d notq %rax - //0x00002590 LBB0_467 - 0x66, 0x0f, 0x6f, 0xde, //0x00002590 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00002594 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x00002598 pmovmskb %xmm3, %edx - 0x48, 0xc1, 0xe2, 0x30, //0x0000259c shlq $48, %rdx - 0x66, 0x0f, 0x6f, 0xdf, //0x000025a0 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000025a4 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x000025a8 pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x20, //0x000025ac shlq $32, %rsi - 0x48, 0x09, 0xd6, //0x000025b0 orq %rdx, %rsi - 0x66, 0x0f, 0x6f, 0xdd, //0x000025b3 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000025b7 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x000025bb pmovmskb %xmm3, %edx - 0x48, 0xc1, 0xe2, 0x10, //0x000025bf shlq $16, %rdx - 0x48, 0x09, 0xf2, //0x000025c3 orq %rsi, %rdx - 0x66, 0x0f, 0x6f, 0xda, //0x000025c6 movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000025ca pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x000025ce pmovmskb %xmm3, %esi - 0x48, 0x09, 0xd6, //0x000025d2 orq %rdx, %rsi - 0x48, 0x21, 0xc6, //0x000025d5 andq %rax, %rsi - 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x000025d8 movq %rsi, %xmm3 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd9, 0x00, //0x000025dd pclmulqdq $0, %xmm9, %xmm3 - 0x66, 0x49, 0x0f, 0x7e, 0xdf, //0x000025e4 movq %xmm3, %r15 - 0x4d, 0x31, 0xcf, //0x000025e9 xorq %r9, %r15 - 0x66, 0x0f, 0x6f, 0xda, //0x000025ec movdqa %xmm2, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xda, //0x000025f0 pcmpeqb %xmm10, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x000025f5 pmovmskb %xmm3, %r10d - 0x66, 0x0f, 0x6f, 0xdd, //0x000025fa movdqa %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xda, //0x000025fe pcmpeqb %xmm10, %xmm3 - 0x66, 0x0f, 0xd7, 0xc3, //0x00002603 pmovmskb %xmm3, %eax - 0x66, 0x0f, 0x6f, 0xdf, //0x00002607 movdqa %xmm7, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xda, //0x0000260b pcmpeqb %xmm10, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002610 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xde, //0x00002614 movdqa %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xda, //0x00002618 pcmpeqb %xmm10, %xmm3 - 0x66, 0x0f, 0xd7, 0xdb, //0x0000261d pmovmskb %xmm3, %ebx - 0x48, 0xc1, 0xe3, 0x30, //0x00002621 shlq $48, %rbx - 0x48, 0xc1, 0xe6, 0x20, //0x00002625 shlq $32, %rsi - 0x48, 0x09, 0xde, //0x00002629 orq %rbx, %rsi - 0x48, 0xc1, 0xe0, 0x10, //0x0000262c shlq $16, %rax - 0x48, 0x09, 0xf0, //0x00002630 orq %rsi, %rax - 0x49, 0x09, 0xc2, //0x00002633 orq %rax, %r10 - 0x4d, 0x89, 0xf9, //0x00002636 movq %r15, %r9 - 0x49, 0xf7, 0xd1, //0x00002639 notq %r9 - 0x4d, 0x21, 0xca, //0x0000263c andq %r9, %r10 - 0x66, 0x0f, 0x74, 0xd4, //0x0000263f pcmpeqb %xmm4, %xmm2 - 0x66, 0x0f, 0xd7, 0xc2, //0x00002643 pmovmskb %xmm2, %eax - 0x66, 0x0f, 0x74, 0xec, //0x00002647 pcmpeqb %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xdd, //0x0000264b pmovmskb %xmm5, %ebx - 0x66, 0x0f, 0x74, 0xfc, //0x0000264f pcmpeqb %xmm4, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x00002653 pmovmskb %xmm7, %edi - 0x66, 0x0f, 0x74, 0xf4, //0x00002657 pcmpeqb %xmm4, %xmm6 - 0x66, 0x0f, 0xd7, 0xf6, //0x0000265b pmovmskb %xmm6, %esi - 0x48, 0xc1, 0xe6, 0x30, //0x0000265f shlq $48, %rsi - 0x48, 0xc1, 0xe7, 0x20, //0x00002663 shlq $32, %rdi - 0x48, 0x09, 0xf7, //0x00002667 orq %rsi, %rdi - 0x48, 0xc1, 0xe3, 0x10, //0x0000266a shlq $16, %rbx - 0x48, 0x09, 0xfb, //0x0000266e orq %rdi, %rbx - 0x48, 0x09, 0xd8, //0x00002671 orq %rbx, %rax - 0x4c, 0x21, 0xc8, //0x00002674 andq %r9, %rax - 0x0f, 0x84, 0xce, 0xfd, 0xff, 0xff, //0x00002677 je LBB0_462 - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000267d movabsq $4294977024, %r9 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002687 .p2align 4, 0x90 - //0x00002690 LBB0_469 - 0x48, 0x8d, 0x58, 0xff, //0x00002690 leaq $-1(%rax), %rbx - 0x48, 0x89, 0xde, //0x00002694 movq %rbx, %rsi - 0x4c, 0x21, 0xd6, //0x00002697 andq %r10, %rsi - 0x48, 0x89, 0xf7, //0x0000269a movq %rsi, %rdi - 0x48, 0xd1, 0xef, //0x0000269d shrq %rdi - 0x49, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000026a0 movabsq $6148914691236517205, %r8 - 0x4c, 0x21, 0xc7, //0x000026aa andq %r8, %rdi - 0x48, 0x29, 0xfe, //0x000026ad subq %rdi, %rsi - 0x48, 0x89, 0xf7, //0x000026b0 movq %rsi, %rdi - 0x48, 0xba, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x000026b3 movabsq $3689348814741910323, %rdx - 0x48, 0x21, 0xd7, //0x000026bd andq %rdx, %rdi - 0x48, 0xc1, 0xee, 0x02, //0x000026c0 shrq $2, %rsi - 0x48, 0x21, 0xd6, //0x000026c4 andq %rdx, %rsi - 0x48, 0x01, 0xfe, //0x000026c7 addq %rdi, %rsi - 0x48, 0x89, 0xf7, //0x000026ca movq %rsi, %rdi - 0x48, 0xc1, 0xef, 0x04, //0x000026cd shrq $4, %rdi - 0x48, 0x01, 0xf7, //0x000026d1 addq %rsi, %rdi - 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x000026d4 movabsq $1085102592571150095, %rdx - 0x48, 0x21, 0xd7, //0x000026de andq %rdx, %rdi - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000026e1 movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xfa, //0x000026eb imulq %rdx, %rdi - 0x48, 0xc1, 0xef, 0x38, //0x000026ef shrq $56, %rdi - 0x4c, 0x01, 0xdf, //0x000026f3 addq %r11, %rdi - 0x48, 0x39, 0xcf, //0x000026f6 cmpq %rcx, %rdi - 0x0f, 0x86, 0xa6, 0x05, 0x00, 0x00, //0x000026f9 jbe LBB0_513 - 0x48, 0x83, 0xc1, 0x01, //0x000026ff addq $1, %rcx - 0x48, 0x21, 0xd8, //0x00002703 andq %rbx, %rax - 0x0f, 0x85, 0x84, 0xff, 0xff, 0xff, //0x00002706 jne LBB0_469 - 0xe9, 0x3a, 0xfd, 0xff, 0xff, //0x0000270c jmp LBB0_462 - //0x00002711 LBB0_471 - 0x48, 0x85, 0xc0, //0x00002711 testq %rax, %rax - 0x0f, 0x8e, 0x86, 0x06, 0x00, 0x00, //0x00002714 jle LBB0_522 - 0x48, 0x89, 0xdf, //0x0000271a movq %rbx, %rdi - 0xf3, 0x44, 0x0f, 0x7f, 0x45, 0x80, //0x0000271d movdqu %xmm8, $-128(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x70, 0xff, 0xff, 0xff, //0x00002723 movdqu %xmm8, $-144(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x0000272c movdqu %xmm8, $-160(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x00002735 movdqu %xmm8, $-176(%rbp) - 0x44, 0x89, 0xe8, //0x0000273e movl %r13d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00002741 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00002746 cmpl $4033, %eax - 0x0f, 0x82, 0x3b, 0x00, 0x00, 0x00, //0x0000274b jb LBB0_475 - 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x00002751 cmpq $32, $-48(%rbp) - 0x0f, 0x82, 0x3c, 0x00, 0x00, 0x00, //0x00002756 jb LBB0_476 - 0x41, 0x0f, 0x10, 0x55, 0x00, //0x0000275c movups (%r13), %xmm2 - 0x0f, 0x11, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00002761 movups %xmm2, $-176(%rbp) - 0x41, 0x0f, 0x10, 0x55, 0x10, //0x00002768 movups $16(%r13), %xmm2 - 0x0f, 0x11, 0x95, 0x60, 0xff, 0xff, 0xff, //0x0000276d movups %xmm2, $-160(%rbp) - 0x49, 0x83, 0xc5, 0x20, //0x00002774 addq $32, %r13 - 0x48, 0x8b, 0x45, 0xd0, //0x00002778 movq $-48(%rbp), %rax - 0x48, 0x8d, 0x70, 0xe0, //0x0000277c leaq $-32(%rax), %rsi - 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00002780 leaq $-144(%rbp), %rdx - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00002787 jmp LBB0_477 - //0x0000278c LBB0_475 - 0x4c, 0x8b, 0x65, 0xb0, //0x0000278c movq $-80(%rbp), %r12 - 0x48, 0x89, 0xfb, //0x00002790 movq %rdi, %rbx - 0xe9, 0x34, 0xfd, 0xff, 0xff, //0x00002793 jmp LBB0_464 - //0x00002798 LBB0_476 - 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00002798 leaq $-176(%rbp), %rdx - 0x48, 0x8b, 0x75, 0xd0, //0x0000279f movq $-48(%rbp), %rsi - //0x000027a3 LBB0_477 - 0x48, 0x83, 0xfe, 0x10, //0x000027a3 cmpq $16, %rsi - 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x000027a7 jb LBB0_478 - 0x41, 0x0f, 0x10, 0x55, 0x00, //0x000027ad movups (%r13), %xmm2 - 0x0f, 0x11, 0x12, //0x000027b2 movups %xmm2, (%rdx) - 0x49, 0x83, 0xc5, 0x10, //0x000027b5 addq $16, %r13 - 0x48, 0x83, 0xc2, 0x10, //0x000027b9 addq $16, %rdx - 0x48, 0x83, 0xc6, 0xf0, //0x000027bd addq $-16, %rsi - 0x48, 0x83, 0xfe, 0x08, //0x000027c1 cmpq $8, %rsi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x000027c5 jae LBB0_485 - //0x000027cb LBB0_479 - 0x48, 0x83, 0xfe, 0x04, //0x000027cb cmpq $4, %rsi - 0x0f, 0x8c, 0x48, 0x00, 0x00, 0x00, //0x000027cf jl LBB0_480 - //0x000027d5 LBB0_486 - 0x41, 0x8b, 0x45, 0x00, //0x000027d5 movl (%r13), %eax - 0x89, 0x02, //0x000027d9 movl %eax, (%rdx) - 0x49, 0x83, 0xc5, 0x04, //0x000027db addq $4, %r13 - 0x48, 0x83, 0xc2, 0x04, //0x000027df addq $4, %rdx - 0x48, 0x83, 0xc6, 0xfc, //0x000027e3 addq $-4, %rsi - 0x48, 0x83, 0xfe, 0x02, //0x000027e7 cmpq $2, %rsi - 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x000027eb jae LBB0_481 - 0xe9, 0x45, 0x00, 0x00, 0x00, //0x000027f1 jmp LBB0_482 - //0x000027f6 LBB0_478 - 0x48, 0x83, 0xfe, 0x08, //0x000027f6 cmpq $8, %rsi - 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x000027fa jb LBB0_479 - //0x00002800 LBB0_485 - 0x49, 0x8b, 0x45, 0x00, //0x00002800 movq (%r13), %rax - 0x48, 0x89, 0x02, //0x00002804 movq %rax, (%rdx) - 0x49, 0x83, 0xc5, 0x08, //0x00002807 addq $8, %r13 - 0x48, 0x83, 0xc2, 0x08, //0x0000280b addq $8, %rdx - 0x48, 0x83, 0xc6, 0xf8, //0x0000280f addq $-8, %rsi - 0x48, 0x83, 0xfe, 0x04, //0x00002813 cmpq $4, %rsi - 0x0f, 0x8d, 0xb8, 0xff, 0xff, 0xff, //0x00002817 jge LBB0_486 - //0x0000281d LBB0_480 - 0x48, 0x83, 0xfe, 0x02, //0x0000281d cmpq $2, %rsi - 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00002821 jb LBB0_482 - //0x00002827 LBB0_481 - 0x41, 0x0f, 0xb7, 0x45, 0x00, //0x00002827 movzwl (%r13), %eax - 0x66, 0x89, 0x02, //0x0000282c movw %ax, (%rdx) - 0x49, 0x83, 0xc5, 0x02, //0x0000282f addq $2, %r13 - 0x48, 0x83, 0xc2, 0x02, //0x00002833 addq $2, %rdx - 0x48, 0x83, 0xc6, 0xfe, //0x00002837 addq $-2, %rsi - //0x0000283b LBB0_482 - 0x4c, 0x89, 0xe8, //0x0000283b movq %r13, %rax - 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x0000283e leaq $-176(%rbp), %r13 - 0x48, 0x85, 0xf6, //0x00002845 testq %rsi, %rsi - 0x4c, 0x8b, 0x65, 0xb0, //0x00002848 movq $-80(%rbp), %r12 - 0x48, 0x89, 0xfb, //0x0000284c movq %rdi, %rbx - 0x0f, 0x84, 0x77, 0xfc, 0xff, 0xff, //0x0000284f je LBB0_464 - 0x8a, 0x00, //0x00002855 movb (%rax), %al - 0x88, 0x02, //0x00002857 movb %al, (%rdx) - 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x00002859 leaq $-176(%rbp), %r13 - 0xe9, 0x67, 0xfc, 0xff, 0xff, //0x00002860 jmp LBB0_464 - //0x00002865 LBB0_487 - 0x4c, 0x89, 0x5d, 0xa8, //0x00002865 movq %r11, $-88(%rbp) - 0x49, 0x8b, 0x07, //0x00002869 movq (%r15), %rax - 0x4c, 0x29, 0xd0, //0x0000286c subq %r10, %rax - 0x4d, 0x01, 0xd5, //0x0000286f addq %r10, %r13 - 0x45, 0x31, 0xc9, //0x00002872 xorl %r9d, %r9d - 0x31, 0xdb, //0x00002875 xorl %ebx, %ebx - 0x45, 0x31, 0xdb, //0x00002877 xorl %r11d, %r11d - 0x31, 0xc9, //0x0000287a xorl %ecx, %ecx - 0xe9, 0x73, 0x00, 0x00, 0x00, //0x0000287c jmp LBB0_489 - //0x00002881 LBB0_488 - 0x49, 0xc1, 0xff, 0x3f, //0x00002881 sarq $63, %r15 - 0x4c, 0x89, 0xd0, //0x00002885 movq %r10, %rax - 0x48, 0xd1, 0xe8, //0x00002888 shrq %rax - 0x48, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000288b movabsq $6148914691236517205, %rsi - 0x48, 0x21, 0xf0, //0x00002895 andq %rsi, %rax - 0x49, 0x29, 0xc2, //0x00002898 subq %rax, %r10 - 0x4c, 0x89, 0xd0, //0x0000289b movq %r10, %rax - 0x48, 0xba, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x0000289e movabsq $3689348814741910323, %rdx - 0x48, 0x21, 0xd0, //0x000028a8 andq %rdx, %rax - 0x49, 0xc1, 0xea, 0x02, //0x000028ab shrq $2, %r10 - 0x49, 0x21, 0xd2, //0x000028af andq %rdx, %r10 - 0x49, 0x01, 0xc2, //0x000028b2 addq %rax, %r10 - 0x4c, 0x89, 0xd0, //0x000028b5 movq %r10, %rax - 0x48, 0xc1, 0xe8, 0x04, //0x000028b8 shrq $4, %rax - 0x4c, 0x01, 0xd0, //0x000028bc addq %r10, %rax - 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x000028bf movabsq $1085102592571150095, %rdx - 0x48, 0x21, 0xd0, //0x000028c9 andq %rdx, %rax - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000028cc movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xc2, //0x000028d6 imulq %rdx, %rax - 0x48, 0xc1, 0xe8, 0x38, //0x000028da shrq $56, %rax - 0x49, 0x01, 0xc3, //0x000028de addq %rax, %r11 - 0x49, 0x83, 0xc5, 0x40, //0x000028e1 addq $64, %r13 - 0x48, 0x8b, 0x45, 0xd0, //0x000028e5 movq $-48(%rbp), %rax - 0x48, 0x83, 0xc0, 0xc0, //0x000028e9 addq $-64, %rax - 0x4d, 0x89, 0xf9, //0x000028ed movq %r15, %r9 - 0x48, 0x8b, 0x5d, 0xb8, //0x000028f0 movq $-72(%rbp), %rbx - //0x000028f4 LBB0_489 - 0x48, 0x83, 0xf8, 0x40, //0x000028f4 cmpq $64, %rax - 0x48, 0x89, 0x45, 0xd0, //0x000028f8 movq %rax, $-48(%rbp) - 0x0f, 0x8c, 0x4f, 0x02, 0x00, 0x00, //0x000028fc jl LBB0_497 - //0x00002902 LBB0_490 - 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x00, //0x00002902 movdqu (%r13), %xmm2 - 0xf3, 0x41, 0x0f, 0x6f, 0x6d, 0x10, //0x00002908 movdqu $16(%r13), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x7d, 0x20, //0x0000290e movdqu $32(%r13), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x75, 0x30, //0x00002914 movdqu $48(%r13), %xmm6 - 0x66, 0x0f, 0x6f, 0xda, //0x0000291a movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000291e pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xc3, //0x00002922 pmovmskb %xmm3, %eax - 0x66, 0x0f, 0x6f, 0xdd, //0x00002926 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000292a pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x0000292e pmovmskb %xmm3, %edx - 0x66, 0x0f, 0x6f, 0xdf, //0x00002932 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002936 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x0000293a pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xde, //0x0000293e movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002942 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00002946 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe7, 0x30, //0x0000294a shlq $48, %rdi - 0x48, 0xc1, 0xe6, 0x20, //0x0000294e shlq $32, %rsi - 0x48, 0x09, 0xfe, //0x00002952 orq %rdi, %rsi - 0x48, 0xc1, 0xe2, 0x10, //0x00002955 shlq $16, %rdx - 0x48, 0x09, 0xf2, //0x00002959 orq %rsi, %rdx - 0x48, 0x09, 0xd0, //0x0000295c orq %rdx, %rax - 0x48, 0x89, 0xc2, //0x0000295f movq %rax, %rdx - 0x48, 0x09, 0xda, //0x00002962 orq %rbx, %rdx - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00002965 jne LBB0_492 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000296b movq $-1, %rax - 0x31, 0xd2, //0x00002972 xorl %edx, %edx - 0x48, 0x89, 0x55, 0xb8, //0x00002974 movq %rdx, $-72(%rbp) - 0xe9, 0x49, 0x00, 0x00, 0x00, //0x00002978 jmp LBB0_493 - //0x0000297d LBB0_492 - 0x48, 0x89, 0xda, //0x0000297d movq %rbx, %rdx - 0x48, 0xf7, 0xd2, //0x00002980 notq %rdx - 0x48, 0x21, 0xc2, //0x00002983 andq %rax, %rdx - 0x48, 0x8d, 0x34, 0x12, //0x00002986 leaq (%rdx,%rdx), %rsi - 0x48, 0x09, 0xde, //0x0000298a orq %rbx, %rsi - 0x48, 0x89, 0xf7, //0x0000298d movq %rsi, %rdi - 0x48, 0xf7, 0xd7, //0x00002990 notq %rdi - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002993 movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xd8, //0x0000299d andq %rbx, %rax - 0x48, 0x21, 0xf8, //0x000029a0 andq %rdi, %rax - 0x31, 0xff, //0x000029a3 xorl %edi, %edi - 0x48, 0x01, 0xd0, //0x000029a5 addq %rdx, %rax - 0x40, 0x0f, 0x92, 0xc7, //0x000029a8 setb %dil - 0x48, 0x89, 0x7d, 0xb8, //0x000029ac movq %rdi, $-72(%rbp) - 0x48, 0x01, 0xc0, //0x000029b0 addq %rax, %rax - 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000029b3 movabsq $6148914691236517205, %rdx - 0x48, 0x31, 0xd0, //0x000029bd xorq %rdx, %rax - 0x48, 0x21, 0xf0, //0x000029c0 andq %rsi, %rax - 0x48, 0xf7, 0xd0, //0x000029c3 notq %rax - //0x000029c6 LBB0_493 - 0x66, 0x0f, 0x6f, 0xde, //0x000029c6 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000029ca pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x000029ce pmovmskb %xmm3, %edx - 0x48, 0xc1, 0xe2, 0x30, //0x000029d2 shlq $48, %rdx - 0x66, 0x0f, 0x6f, 0xdf, //0x000029d6 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000029da pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x000029de pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x20, //0x000029e2 shlq $32, %rsi - 0x48, 0x09, 0xd6, //0x000029e6 orq %rdx, %rsi - 0x66, 0x0f, 0x6f, 0xdd, //0x000029e9 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000029ed pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x000029f1 pmovmskb %xmm3, %edx - 0x48, 0xc1, 0xe2, 0x10, //0x000029f5 shlq $16, %rdx - 0x48, 0x09, 0xf2, //0x000029f9 orq %rsi, %rdx - 0x66, 0x0f, 0x6f, 0xda, //0x000029fc movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00002a00 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002a04 pmovmskb %xmm3, %esi - 0x48, 0x09, 0xd6, //0x00002a08 orq %rdx, %rsi - 0x48, 0x21, 0xc6, //0x00002a0b andq %rax, %rsi - 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x00002a0e movq %rsi, %xmm3 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd9, 0x00, //0x00002a13 pclmulqdq $0, %xmm9, %xmm3 - 0x66, 0x49, 0x0f, 0x7e, 0xdf, //0x00002a1a movq %xmm3, %r15 - 0x4d, 0x31, 0xcf, //0x00002a1f xorq %r9, %r15 - 0x66, 0x0f, 0x6f, 0xda, //0x00002a22 movdqa %xmm2, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00002a26 pcmpeqb %xmm11, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x00002a2b pmovmskb %xmm3, %r10d - 0x66, 0x0f, 0x6f, 0xdd, //0x00002a30 movdqa %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00002a34 pcmpeqb %xmm11, %xmm3 - 0x66, 0x0f, 0xd7, 0xc3, //0x00002a39 pmovmskb %xmm3, %eax - 0x66, 0x0f, 0x6f, 0xdf, //0x00002a3d movdqa %xmm7, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00002a41 pcmpeqb %xmm11, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002a46 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xde, //0x00002a4a movdqa %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00002a4e pcmpeqb %xmm11, %xmm3 - 0x66, 0x0f, 0xd7, 0xdb, //0x00002a53 pmovmskb %xmm3, %ebx - 0x48, 0xc1, 0xe3, 0x30, //0x00002a57 shlq $48, %rbx - 0x48, 0xc1, 0xe6, 0x20, //0x00002a5b shlq $32, %rsi - 0x48, 0x09, 0xde, //0x00002a5f orq %rbx, %rsi - 0x48, 0xc1, 0xe0, 0x10, //0x00002a62 shlq $16, %rax - 0x48, 0x09, 0xf0, //0x00002a66 orq %rsi, %rax - 0x49, 0x09, 0xc2, //0x00002a69 orq %rax, %r10 - 0x4d, 0x89, 0xf9, //0x00002a6c movq %r15, %r9 - 0x49, 0xf7, 0xd1, //0x00002a6f notq %r9 - 0x4d, 0x21, 0xca, //0x00002a72 andq %r9, %r10 - 0x66, 0x41, 0x0f, 0x74, 0xd4, //0x00002a75 pcmpeqb %xmm12, %xmm2 - 0x66, 0x0f, 0xd7, 0xc2, //0x00002a7a pmovmskb %xmm2, %eax - 0x66, 0x41, 0x0f, 0x74, 0xec, //0x00002a7e pcmpeqb %xmm12, %xmm5 - 0x66, 0x0f, 0xd7, 0xdd, //0x00002a83 pmovmskb %xmm5, %ebx - 0x66, 0x41, 0x0f, 0x74, 0xfc, //0x00002a87 pcmpeqb %xmm12, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x00002a8c pmovmskb %xmm7, %edi - 0x66, 0x41, 0x0f, 0x74, 0xf4, //0x00002a90 pcmpeqb %xmm12, %xmm6 - 0x66, 0x0f, 0xd7, 0xf6, //0x00002a95 pmovmskb %xmm6, %esi - 0x48, 0xc1, 0xe6, 0x30, //0x00002a99 shlq $48, %rsi - 0x48, 0xc1, 0xe7, 0x20, //0x00002a9d shlq $32, %rdi - 0x48, 0x09, 0xf7, //0x00002aa1 orq %rsi, %rdi - 0x48, 0xc1, 0xe3, 0x10, //0x00002aa4 shlq $16, %rbx - 0x48, 0x09, 0xfb, //0x00002aa8 orq %rdi, %rbx - 0x48, 0x09, 0xd8, //0x00002aab orq %rbx, %rax - 0x4c, 0x21, 0xc8, //0x00002aae andq %r9, %rax - 0x0f, 0x84, 0xca, 0xfd, 0xff, 0xff, //0x00002ab1 je LBB0_488 - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002ab7 movabsq $4294977024, %r9 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002ac1 .p2align 4, 0x90 - //0x00002ad0 LBB0_495 - 0x48, 0x8d, 0x58, 0xff, //0x00002ad0 leaq $-1(%rax), %rbx - 0x48, 0x89, 0xde, //0x00002ad4 movq %rbx, %rsi - 0x4c, 0x21, 0xd6, //0x00002ad7 andq %r10, %rsi - 0x48, 0x89, 0xf7, //0x00002ada movq %rsi, %rdi - 0x48, 0xd1, 0xef, //0x00002add shrq %rdi - 0x49, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002ae0 movabsq $6148914691236517205, %r8 - 0x4c, 0x21, 0xc7, //0x00002aea andq %r8, %rdi - 0x48, 0x29, 0xfe, //0x00002aed subq %rdi, %rsi - 0x48, 0x89, 0xf7, //0x00002af0 movq %rsi, %rdi - 0x48, 0xba, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00002af3 movabsq $3689348814741910323, %rdx - 0x48, 0x21, 0xd7, //0x00002afd andq %rdx, %rdi - 0x48, 0xc1, 0xee, 0x02, //0x00002b00 shrq $2, %rsi - 0x48, 0x21, 0xd6, //0x00002b04 andq %rdx, %rsi - 0x48, 0x01, 0xfe, //0x00002b07 addq %rdi, %rsi - 0x48, 0x89, 0xf7, //0x00002b0a movq %rsi, %rdi - 0x48, 0xc1, 0xef, 0x04, //0x00002b0d shrq $4, %rdi - 0x48, 0x01, 0xf7, //0x00002b11 addq %rsi, %rdi - 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00002b14 movabsq $1085102592571150095, %rdx - 0x48, 0x21, 0xd7, //0x00002b1e andq %rdx, %rdi - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002b21 movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xfa, //0x00002b2b imulq %rdx, %rdi - 0x48, 0xc1, 0xef, 0x38, //0x00002b2f shrq $56, %rdi - 0x4c, 0x01, 0xdf, //0x00002b33 addq %r11, %rdi - 0x48, 0x39, 0xcf, //0x00002b36 cmpq %rcx, %rdi - 0x0f, 0x86, 0x66, 0x01, 0x00, 0x00, //0x00002b39 jbe LBB0_513 - 0x48, 0x83, 0xc1, 0x01, //0x00002b3f addq $1, %rcx - 0x48, 0x21, 0xd8, //0x00002b43 andq %rbx, %rax - 0x0f, 0x85, 0x84, 0xff, 0xff, 0xff, //0x00002b46 jne LBB0_495 - 0xe9, 0x30, 0xfd, 0xff, 0xff, //0x00002b4c jmp LBB0_488 - //0x00002b51 LBB0_497 - 0x48, 0x85, 0xc0, //0x00002b51 testq %rax, %rax - 0x0f, 0x8e, 0x46, 0x02, 0x00, 0x00, //0x00002b54 jle LBB0_522 - 0x48, 0x89, 0xdf, //0x00002b5a movq %rbx, %rdi - 0xf3, 0x44, 0x0f, 0x7f, 0x45, 0x80, //0x00002b5d movdqu %xmm8, $-128(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x70, 0xff, 0xff, 0xff, //0x00002b63 movdqu %xmm8, $-144(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x00002b6c movdqu %xmm8, $-160(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x00002b75 movdqu %xmm8, $-176(%rbp) - 0x44, 0x89, 0xe8, //0x00002b7e movl %r13d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00002b81 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00002b86 cmpl $4033, %eax - 0x0f, 0x82, 0x3b, 0x00, 0x00, 0x00, //0x00002b8b jb LBB0_501 - 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x00002b91 cmpq $32, $-48(%rbp) - 0x0f, 0x82, 0x3c, 0x00, 0x00, 0x00, //0x00002b96 jb LBB0_502 - 0x41, 0x0f, 0x10, 0x55, 0x00, //0x00002b9c movups (%r13), %xmm2 - 0x0f, 0x11, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00002ba1 movups %xmm2, $-176(%rbp) - 0x41, 0x0f, 0x10, 0x55, 0x10, //0x00002ba8 movups $16(%r13), %xmm2 - 0x0f, 0x11, 0x95, 0x60, 0xff, 0xff, 0xff, //0x00002bad movups %xmm2, $-160(%rbp) - 0x49, 0x83, 0xc5, 0x20, //0x00002bb4 addq $32, %r13 - 0x48, 0x8b, 0x45, 0xd0, //0x00002bb8 movq $-48(%rbp), %rax - 0x48, 0x8d, 0x70, 0xe0, //0x00002bbc leaq $-32(%rax), %rsi - 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00002bc0 leaq $-144(%rbp), %rdx - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00002bc7 jmp LBB0_503 - //0x00002bcc LBB0_501 - 0x4c, 0x8b, 0x65, 0xb0, //0x00002bcc movq $-80(%rbp), %r12 - 0x48, 0x89, 0xfb, //0x00002bd0 movq %rdi, %rbx - 0xe9, 0x2a, 0xfd, 0xff, 0xff, //0x00002bd3 jmp LBB0_490 - //0x00002bd8 LBB0_502 - 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00002bd8 leaq $-176(%rbp), %rdx - 0x48, 0x8b, 0x75, 0xd0, //0x00002bdf movq $-48(%rbp), %rsi - //0x00002be3 LBB0_503 - 0x48, 0x83, 0xfe, 0x10, //0x00002be3 cmpq $16, %rsi - 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00002be7 jb LBB0_504 - 0x41, 0x0f, 0x10, 0x55, 0x00, //0x00002bed movups (%r13), %xmm2 - 0x0f, 0x11, 0x12, //0x00002bf2 movups %xmm2, (%rdx) - 0x49, 0x83, 0xc5, 0x10, //0x00002bf5 addq $16, %r13 - 0x48, 0x83, 0xc2, 0x10, //0x00002bf9 addq $16, %rdx - 0x48, 0x83, 0xc6, 0xf0, //0x00002bfd addq $-16, %rsi - 0x48, 0x83, 0xfe, 0x08, //0x00002c01 cmpq $8, %rsi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00002c05 jae LBB0_511 - //0x00002c0b LBB0_505 - 0x48, 0x83, 0xfe, 0x04, //0x00002c0b cmpq $4, %rsi - 0x0f, 0x8c, 0x48, 0x00, 0x00, 0x00, //0x00002c0f jl LBB0_506 - //0x00002c15 LBB0_512 - 0x41, 0x8b, 0x45, 0x00, //0x00002c15 movl (%r13), %eax - 0x89, 0x02, //0x00002c19 movl %eax, (%rdx) - 0x49, 0x83, 0xc5, 0x04, //0x00002c1b addq $4, %r13 - 0x48, 0x83, 0xc2, 0x04, //0x00002c1f addq $4, %rdx - 0x48, 0x83, 0xc6, 0xfc, //0x00002c23 addq $-4, %rsi - 0x48, 0x83, 0xfe, 0x02, //0x00002c27 cmpq $2, %rsi - 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x00002c2b jae LBB0_507 - 0xe9, 0x45, 0x00, 0x00, 0x00, //0x00002c31 jmp LBB0_508 - //0x00002c36 LBB0_504 - 0x48, 0x83, 0xfe, 0x08, //0x00002c36 cmpq $8, %rsi - 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x00002c3a jb LBB0_505 - //0x00002c40 LBB0_511 - 0x49, 0x8b, 0x45, 0x00, //0x00002c40 movq (%r13), %rax - 0x48, 0x89, 0x02, //0x00002c44 movq %rax, (%rdx) - 0x49, 0x83, 0xc5, 0x08, //0x00002c47 addq $8, %r13 - 0x48, 0x83, 0xc2, 0x08, //0x00002c4b addq $8, %rdx - 0x48, 0x83, 0xc6, 0xf8, //0x00002c4f addq $-8, %rsi - 0x48, 0x83, 0xfe, 0x04, //0x00002c53 cmpq $4, %rsi - 0x0f, 0x8d, 0xb8, 0xff, 0xff, 0xff, //0x00002c57 jge LBB0_512 - //0x00002c5d LBB0_506 - 0x48, 0x83, 0xfe, 0x02, //0x00002c5d cmpq $2, %rsi - 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00002c61 jb LBB0_508 - //0x00002c67 LBB0_507 - 0x41, 0x0f, 0xb7, 0x45, 0x00, //0x00002c67 movzwl (%r13), %eax - 0x66, 0x89, 0x02, //0x00002c6c movw %ax, (%rdx) - 0x49, 0x83, 0xc5, 0x02, //0x00002c6f addq $2, %r13 - 0x48, 0x83, 0xc2, 0x02, //0x00002c73 addq $2, %rdx - 0x48, 0x83, 0xc6, 0xfe, //0x00002c77 addq $-2, %rsi - //0x00002c7b LBB0_508 - 0x4c, 0x89, 0xe8, //0x00002c7b movq %r13, %rax - 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x00002c7e leaq $-176(%rbp), %r13 - 0x48, 0x85, 0xf6, //0x00002c85 testq %rsi, %rsi - 0x4c, 0x8b, 0x65, 0xb0, //0x00002c88 movq $-80(%rbp), %r12 - 0x48, 0x89, 0xfb, //0x00002c8c movq %rdi, %rbx - 0x0f, 0x84, 0x6d, 0xfc, 0xff, 0xff, //0x00002c8f je LBB0_490 - 0x8a, 0x00, //0x00002c95 movb (%rax), %al - 0x88, 0x02, //0x00002c97 movb %al, (%rdx) - 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x00002c99 leaq $-176(%rbp), %r13 - 0xe9, 0x5d, 0xfc, 0xff, 0xff, //0x00002ca0 jmp LBB0_490 - //0x00002ca5 LBB0_513 - 0x4c, 0x8b, 0x7d, 0xc0, //0x00002ca5 movq $-64(%rbp), %r15 - 0x49, 0x8b, 0x0f, //0x00002ca9 movq (%r15), %rcx - 0x48, 0x0f, 0xbc, 0xc0, //0x00002cac bsfq %rax, %rax - 0x48, 0x2b, 0x45, 0xd0, //0x00002cb0 subq $-48(%rbp), %rax - 0x4c, 0x8d, 0x14, 0x08, //0x00002cb4 leaq (%rax,%rcx), %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00002cb8 addq $1, %r10 - 0x4c, 0x8b, 0x45, 0xc8, //0x00002cbc movq $-56(%rbp), %r8 - 0x4d, 0x89, 0x10, //0x00002cc0 movq %r10, (%r8) - 0x49, 0x8b, 0x07, //0x00002cc3 movq (%r15), %rax - 0x49, 0x39, 0xc2, //0x00002cc6 cmpq %rax, %r10 - 0x4c, 0x0f, 0x47, 0xd0, //0x00002cc9 cmovaq %rax, %r10 - 0x4d, 0x89, 0x10, //0x00002ccd movq %r10, (%r8) - 0x4c, 0x8b, 0x5d, 0xa8, //0x00002cd0 movq $-88(%rbp), %r11 - 0xe9, 0xfd, 0xf5, 0xff, 0xff, //0x00002cd4 jmp LBB0_430 - //0x00002cd9 LBB0_518 - 0x4d, 0x29, 0xea, //0x00002cd9 subq %r13, %r10 - 0x49, 0x01, 0xc2, //0x00002cdc addq %rax, %r10 - 0x4d, 0x89, 0x10, //0x00002cdf movq %r10, (%r8) - 0xe9, 0xef, 0xf5, 0xff, 0xff, //0x00002ce2 jmp LBB0_430 - //0x00002ce7 LBB0_424 - 0x4d, 0x85, 0xdb, //0x00002ce7 testq %r11, %r11 - 0x0f, 0x85, 0xc3, 0x00, 0x00, 0x00, //0x00002cea jne LBB0_523 - 0x4b, 0x8d, 0x04, 0x0f, //0x00002cf0 leaq (%r15,%r9), %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002cf4 addq $1, %rax - 0x49, 0xf7, 0xd7, //0x00002cf8 notq %r15 - 0x4d, 0x01, 0xc7, //0x00002cfb addq %r8, %r15 - //0x00002cfe LBB0_426 - 0x4c, 0x8b, 0x65, 0xb0, //0x00002cfe movq $-80(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x00002d02 movq $-88(%rbp), %r11 - 0x4d, 0x85, 0xff, //0x00002d06 testq %r15, %r15 - 0x4c, 0x8b, 0x45, 0xc8, //0x00002d09 movq $-56(%rbp), %r8 - 0x49, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002d0d movabsq $4294977024, %r9 - 0x0f, 0x8f, 0x1d, 0x00, 0x00, 0x00, //0x00002d17 jg LBB0_515 - 0xe9, 0x45, 0x00, 0x00, 0x00, //0x00002d1d jmp LBB0_427 - //0x00002d22 LBB0_514 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002d22 movq $-2, %rcx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002d29 movl $2, %esi - 0x48, 0x01, 0xf0, //0x00002d2e addq %rsi, %rax - 0x49, 0x01, 0xcf, //0x00002d31 addq %rcx, %r15 - 0x0f, 0x8e, 0x2d, 0x00, 0x00, 0x00, //0x00002d34 jle LBB0_427 - //0x00002d3a LBB0_515 - 0x0f, 0xb6, 0x08, //0x00002d3a movzbl (%rax), %ecx - 0x80, 0xf9, 0x5c, //0x00002d3d cmpb $92, %cl - 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x00002d40 je LBB0_514 - 0x80, 0xf9, 0x22, //0x00002d46 cmpb $34, %cl - 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00002d49 je LBB0_519 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002d4f movq $-1, %rcx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002d56 movl $1, %esi - 0x48, 0x01, 0xf0, //0x00002d5b addq %rsi, %rax - 0x49, 0x01, 0xcf, //0x00002d5e addq %rcx, %r15 - 0x0f, 0x8f, 0xd3, 0xff, 0xff, 0xff, //0x00002d61 jg LBB0_515 - //0x00002d67 LBB0_427 - 0x4c, 0x8b, 0x7d, 0xc0, //0x00002d67 movq $-64(%rbp), %r15 - 0xe9, 0x66, 0xf5, 0xff, 0xff, //0x00002d6b jmp LBB0_430 - //0x00002d70 LBB0_519 - 0x4c, 0x29, 0xe8, //0x00002d70 subq %r13, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002d73 addq $1, %rax - 0x49, 0x89, 0x00, //0x00002d77 movq %rax, (%r8) - 0x49, 0x89, 0xc2, //0x00002d7a movq %rax, %r10 - 0x4c, 0x8b, 0x7d, 0xc0, //0x00002d7d movq $-64(%rbp), %r15 - 0xe9, 0x50, 0xf5, 0xff, 0xff, //0x00002d81 jmp LBB0_430 - //0x00002d86 LBB0_520 - 0x4d, 0x01, 0xea, //0x00002d86 addq %r13, %r10 - 0x48, 0x85, 0xd2, //0x00002d89 testq %rdx, %rdx - 0x0f, 0x85, 0x96, 0xf3, 0xff, 0xff, //0x00002d8c jne LBB0_406 - 0xe9, 0xc7, 0xf3, 0xff, 0xff, //0x00002d92 jmp LBB0_412 - //0x00002d97 LBB0_521 - 0x4b, 0x8d, 0x04, 0x2a, //0x00002d97 leaq (%r10,%r13), %rax - 0xe9, 0x5e, 0xff, 0xff, 0xff, //0x00002d9b jmp LBB0_426 - //0x00002da0 LBB0_522 - 0x4c, 0x8b, 0x7d, 0xc0, //0x00002da0 movq $-64(%rbp), %r15 - 0x4d, 0x8b, 0x17, //0x00002da4 movq (%r15), %r10 - 0x4c, 0x8b, 0x45, 0xc8, //0x00002da7 movq $-56(%rbp), %r8 - 0x4d, 0x89, 0x10, //0x00002dab movq %r10, (%r8) - 0xe9, 0xf5, 0xf4, 0xff, 0xff, //0x00002dae jmp LBB0_421 - //0x00002db3 LBB0_523 - 0x49, 0x8d, 0x40, 0xff, //0x00002db3 leaq $-1(%r8), %rax - 0x4c, 0x39, 0xf8, //0x00002db7 cmpq %r15, %rax - 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00002dba jne LBB0_525 - 0x4c, 0x8b, 0x45, 0xc8, //0x00002dc0 movq $-56(%rbp), %r8 - 0xe9, 0xdb, 0xf4, 0xff, 0xff, //0x00002dc4 jmp LBB0_420 - //0x00002dc9 LBB0_525 - 0x4b, 0x8d, 0x04, 0x0f, //0x00002dc9 leaq (%r15,%r9), %rax - 0x48, 0x83, 0xc0, 0x02, //0x00002dcd addq $2, %rax - 0x4d, 0x29, 0xf8, //0x00002dd1 subq %r15, %r8 - 0x49, 0x83, 0xc0, 0xfe, //0x00002dd4 addq $-2, %r8 - 0x4d, 0x89, 0xc7, //0x00002dd8 movq %r8, %r15 - 0xe9, 0x1e, 0xff, 0xff, 0xff, //0x00002ddb jmp LBB0_426 - //0x00002de0 .p2align 4, 0x90 - //0x00002de0 LBB0_458 - 0x49, 0x83, 0xc3, 0x10, //0x00002de0 addq $16, %r11 - 0x4c, 0x89, 0xd0, //0x00002de4 movq %r10, %rax - 0x4c, 0x3b, 0x9d, 0x38, 0xff, 0xff, 0xff, //0x00002de7 cmpq $-200(%rbp), %r11 - 0x4c, 0x8b, 0x4d, 0x98, //0x00002dee movq $-104(%rbp), %r9 - 0x0f, 0x85, 0x9d, 0xd3, 0xff, 0xff, //0x00002df2 jne LBB0_2 - //0x00002df8 LBB0_459 - 0x4d, 0x85, 0xc9, //0x00002df8 testq %r9, %r9 - 0x0f, 0x84, 0xb0, 0x00, 0x00, 0x00, //0x00002dfb je LBB0_526 - 0x0f, 0x10, 0x05, 0x78, 0xd2, 0xff, 0xff, //0x00002e01 movups $-11656(%rip), %xmm0 /* LCPI0_8+0(%rip) */ - 0x41, 0x0f, 0x11, 0x01, //0x00002e08 movups %xmm0, (%r9) - 0x4d, 0x8b, 0x2c, 0x24, //0x00002e0c movq (%r12), %r13 - 0x4c, 0x89, 0xe8, //0x00002e10 movq %r13, %rax - 0x48, 0xf7, 0xd0, //0x00002e13 notq %rax - 0x48, 0x89, 0x85, 0x48, 0xff, 0xff, 0xff, //0x00002e16 movq %rax, $-184(%rbp) - 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00002e1d movl $1, %eax - 0x4c, 0x29, 0xe8, //0x00002e22 subq %r13, %rax - 0x48, 0x89, 0x45, 0x90, //0x00002e25 movq %rax, $-112(%rbp) - 0x4c, 0x89, 0xe8, //0x00002e29 movq %r13, %rax - 0x48, 0xf7, 0xd8, //0x00002e2c negq %rax - 0x48, 0x89, 0x85, 0x40, 0xff, 0xff, 0xff, //0x00002e2f movq %rax, $-192(%rbp) - 0x49, 0x8d, 0x45, 0xff, //0x00002e36 leaq $-1(%r13), %rax - 0x48, 0x89, 0x45, 0xb0, //0x00002e3a movq %rax, $-80(%rbp) - 0x49, 0x8d, 0x45, 0xfe, //0x00002e3e leaq $-2(%r13), %rax - 0x48, 0x89, 0x45, 0xa8, //0x00002e42 movq %rax, $-88(%rbp) - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00002e46 movq $-1, %r14 - 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002e4d movabsq $4294977024, %r10 - 0xf3, 0x0f, 0x6f, 0x05, 0xd1, 0xd1, 0xff, 0xff, //0x00002e57 movdqu $-11823(%rip), %xmm0 /* LCPI0_3+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0xd9, 0xd1, 0xff, 0xff, //0x00002e5f movdqu $-11815(%rip), %xmm1 /* LCPI0_4+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x05, 0x20, 0xd2, 0xff, 0xff, //0x00002e67 movdqu $-11744(%rip), %xmm8 /* LCPI0_9+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x1d, 0x28, 0xd2, 0xff, 0xff, //0x00002e70 movdqu $-11736(%rip), %xmm3 /* LCPI0_10+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x0d, 0x2f, 0xd2, 0xff, 0xff, //0x00002e78 movdqu $-11729(%rip), %xmm9 /* LCPI0_11+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0x36, 0xd2, 0xff, 0xff, //0x00002e81 movdqu $-11722(%rip), %xmm10 /* LCPI0_12+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x7d, 0xd1, 0xff, 0xff, //0x00002e8a movdqu $-11907(%rip), %xmm11 /* LCPI0_1+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x25, 0x34, 0xd2, 0xff, 0xff, //0x00002e93 movdqu $-11724(%rip), %xmm12 /* LCPI0_13+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x3b, 0xd2, 0xff, 0xff, //0x00002e9c movdqu $-11717(%rip), %xmm13 /* LCPI0_14+0(%rip) */ - 0x4c, 0x8d, 0x1d, 0xcc, 0x29, 0x00, 0x00, //0x00002ea5 leaq $10700(%rip), %r11 /* LJTI0_2+0(%rip) */ - 0xe9, 0xae, 0x01, 0x00, 0x00, //0x00002eac jmp LBB0_557 - //0x00002eb1 LBB0_526 - 0x4c, 0x89, 0xe0, //0x00002eb1 movq %r12, %rax - 0x4d, 0x8b, 0x24, 0x24, //0x00002eb4 movq (%r12), %r12 - 0x48, 0x8b, 0x78, 0x08, //0x00002eb8 movq $8(%rax), %rdi - 0x49, 0x8b, 0x30, //0x00002ebc movq (%r8), %rsi - 0x48, 0x39, 0xfe, //0x00002ebf cmpq %rdi, %rsi - 0x0f, 0x83, 0x26, 0x00, 0x00, 0x00, //0x00002ec2 jae LBB0_531 - 0x41, 0x8a, 0x04, 0x34, //0x00002ec8 movb (%r12,%rsi), %al - 0x3c, 0x0d, //0x00002ecc cmpb $13, %al - 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00002ece je LBB0_531 - 0x3c, 0x20, //0x00002ed4 cmpb $32, %al - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002ed6 je LBB0_531 - 0x04, 0xf7, //0x00002edc addb $-9, %al - 0x3c, 0x01, //0x00002ede cmpb $1, %al - 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x00002ee0 jbe LBB0_531 - 0x49, 0x89, 0xf3, //0x00002ee6 movq %rsi, %r11 - 0xe9, 0x94, 0x17, 0x00, 0x00, //0x00002ee9 jmp LBB0_874 - //0x00002eee LBB0_531 - 0x4c, 0x8d, 0x5e, 0x01, //0x00002eee leaq $1(%rsi), %r11 - 0x49, 0x39, 0xfb, //0x00002ef2 cmpq %rdi, %r11 - 0x0f, 0x83, 0x1e, 0x00, 0x00, 0x00, //0x00002ef5 jae LBB0_535 - 0x43, 0x8a, 0x04, 0x1c, //0x00002efb movb (%r12,%r11), %al - 0x3c, 0x0d, //0x00002eff cmpb $13, %al - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002f01 je LBB0_535 - 0x3c, 0x20, //0x00002f07 cmpb $32, %al - 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x00002f09 je LBB0_535 - 0x04, 0xf7, //0x00002f0f addb $-9, %al - 0x3c, 0x01, //0x00002f11 cmpb $1, %al - 0x0f, 0x87, 0x69, 0x17, 0x00, 0x00, //0x00002f13 ja LBB0_874 - //0x00002f19 LBB0_535 - 0x4c, 0x8d, 0x5e, 0x02, //0x00002f19 leaq $2(%rsi), %r11 - 0x49, 0x39, 0xfb, //0x00002f1d cmpq %rdi, %r11 - 0x0f, 0x83, 0x1e, 0x00, 0x00, 0x00, //0x00002f20 jae LBB0_539 - 0x43, 0x8a, 0x04, 0x1c, //0x00002f26 movb (%r12,%r11), %al - 0x3c, 0x0d, //0x00002f2a cmpb $13, %al - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002f2c je LBB0_539 - 0x3c, 0x20, //0x00002f32 cmpb $32, %al - 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x00002f34 je LBB0_539 - 0x04, 0xf7, //0x00002f3a addb $-9, %al - 0x3c, 0x01, //0x00002f3c cmpb $1, %al - 0x0f, 0x87, 0x3e, 0x17, 0x00, 0x00, //0x00002f3e ja LBB0_874 - //0x00002f44 LBB0_539 - 0x4c, 0x8d, 0x5e, 0x03, //0x00002f44 leaq $3(%rsi), %r11 - 0x49, 0x39, 0xfb, //0x00002f48 cmpq %rdi, %r11 - 0x0f, 0x83, 0x1e, 0x00, 0x00, 0x00, //0x00002f4b jae LBB0_543 - 0x43, 0x8a, 0x04, 0x1c, //0x00002f51 movb (%r12,%r11), %al - 0x3c, 0x0d, //0x00002f55 cmpb $13, %al - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002f57 je LBB0_543 - 0x3c, 0x20, //0x00002f5d cmpb $32, %al - 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x00002f5f je LBB0_543 - 0x04, 0xf7, //0x00002f65 addb $-9, %al - 0x3c, 0x01, //0x00002f67 cmpb $1, %al - 0x0f, 0x87, 0x13, 0x17, 0x00, 0x00, //0x00002f69 ja LBB0_874 - //0x00002f6f LBB0_543 - 0x48, 0x83, 0xc6, 0x04, //0x00002f6f addq $4, %rsi - 0x48, 0x39, 0xf7, //0x00002f73 cmpq %rsi, %rdi - 0x0f, 0x86, 0x9a, 0x16, 0x00, 0x00, //0x00002f76 jbe LBB0_862 - 0x48, 0x39, 0xf7, //0x00002f7c cmpq %rsi, %rdi - 0x0f, 0x84, 0xde, 0x16, 0x00, 0x00, //0x00002f7f je LBB0_871 - 0x49, 0x8d, 0x04, 0x3c, //0x00002f85 leaq (%r12,%rdi), %rax - 0x48, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f89 movabsq $4294977024, %rcx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002f93 .p2align 4, 0x90 - //0x00002fa0 LBB0_546 - 0x41, 0x0f, 0xbe, 0x14, 0x34, //0x00002fa0 movsbl (%r12,%rsi), %edx - 0x83, 0xfa, 0x20, //0x00002fa5 cmpl $32, %edx - 0x0f, 0x87, 0xc1, 0x16, 0x00, 0x00, //0x00002fa8 ja LBB0_873 - 0x48, 0x0f, 0xa3, 0xd1, //0x00002fae btq %rdx, %rcx - 0x0f, 0x83, 0xb7, 0x16, 0x00, 0x00, //0x00002fb2 jae LBB0_873 - 0x48, 0x83, 0xc6, 0x01, //0x00002fb8 addq $1, %rsi - 0x48, 0x39, 0xf7, //0x00002fbc cmpq %rsi, %rdi - 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x00002fbf jne LBB0_546 - 0xe9, 0x9f, 0x16, 0x00, 0x00, //0x00002fc5 jmp LBB0_872 - //0x00002fca LBB0_549 - 0x3c, 0x5d, //0x00002fca cmpb $93, %al - 0x0f, 0x84, 0x23, 0x00, 0x00, 0x00, //0x00002fcc je LBB0_551 - 0xe9, 0x6c, 0x16, 0x00, 0x00, //0x00002fd2 jmp LBB0_868 - //0x00002fd7 LBB0_550 - 0x80, 0xfa, 0x7d, //0x00002fd7 cmpb $125, %dl - 0x0f, 0x85, 0x63, 0x16, 0x00, 0x00, //0x00002fda jne LBB0_868 - 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00002fe0 jmp LBB0_551 - //0x00002fe5 LBB0_866 - 0x49, 0x89, 0xd2, //0x00002fe5 movq %rdx, %r10 - 0xe9, 0x56, 0x16, 0x00, 0x00, //0x00002fe8 jmp LBB0_868 - //0x00002fed LBB0_191 - 0x3c, 0x7d, //0x00002fed cmpb $125, %al - 0x0f, 0x85, 0x4e, 0x16, 0x00, 0x00, //0x00002fef jne LBB0_868 - //0x00002ff5 LBB0_551 - 0x49, 0x83, 0xc2, 0xff, //0x00002ff5 addq $-1, %r10 - 0x4d, 0x89, 0x10, //0x00002ff9 movq %r10, (%r8) - 0x48, 0xc7, 0xc0, 0xdf, 0xff, 0xff, 0xff, //0x00002ffc movq $-33, %rax - 0xe9, 0x49, 0x16, 0x00, 0x00, //0x00003003 jmp LBB0_870 - //0x00003008 LBB0_552 - 0x49, 0xf7, 0xdc, //0x00003008 negq %r12 - 0x4d, 0x89, 0xe0, //0x0000300b movq %r12, %r8 - //0x0000300e LBB0_553 - 0x4d, 0x85, 0xc0, //0x0000300e testq %r8, %r8 - 0x0f, 0x88, 0xd1, 0x17, 0x00, 0x00, //0x00003011 js LBB0_891 - //0x00003017 LBB0_554 - 0x49, 0x01, 0xc0, //0x00003017 addq %rax, %r8 - 0x48, 0x8b, 0x4d, 0xc8, //0x0000301a movq $-56(%rbp), %rcx - 0x4c, 0x89, 0x01, //0x0000301e movq %r8, (%rcx) - 0x48, 0x85, 0xc0, //0x00003021 testq %rax, %rax - 0x4c, 0x8b, 0x7d, 0xc0, //0x00003024 movq $-64(%rbp), %r15 - 0x4c, 0x8b, 0x4d, 0x98, //0x00003028 movq $-104(%rbp), %r9 - 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000302c movabsq $4294977024, %r10 - 0x4c, 0x8d, 0x1d, 0x3b, 0x28, 0x00, 0x00, //0x00003036 leaq $10299(%rip), %r11 /* LJTI0_2+0(%rip) */ - 0x4c, 0x8b, 0x75, 0xb8, //0x0000303d movq $-72(%rbp), %r14 - 0x0f, 0x88, 0x0a, 0x16, 0x00, 0x00, //0x00003041 js LBB0_870 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003047 .p2align 4, 0x90 - //0x00003050 LBB0_555 - 0x49, 0x8b, 0x11, //0x00003050 movq (%r9), %rdx - 0x4c, 0x89, 0xf0, //0x00003053 movq %r14, %rax - 0x48, 0x85, 0xd2, //0x00003056 testq %rdx, %rdx - 0x0f, 0x84, 0xf2, 0x15, 0x00, 0x00, //0x00003059 je LBB0_870 - //0x0000305f LBB0_557 - 0x4c, 0x89, 0xf1, //0x0000305f movq %r14, %rcx - 0x49, 0x8b, 0x07, //0x00003062 movq (%r15), %rax - 0x4c, 0x8b, 0x45, 0xc8, //0x00003065 movq $-56(%rbp), %r8 - 0x49, 0x8b, 0x10, //0x00003069 movq (%r8), %rdx - 0x48, 0x39, 0xc2, //0x0000306c cmpq %rax, %rdx - 0x0f, 0x83, 0x2b, 0x00, 0x00, 0x00, //0x0000306f jae LBB0_562 - 0x41, 0x8a, 0x5c, 0x15, 0x00, //0x00003075 movb (%r13,%rdx), %bl - 0x80, 0xfb, 0x0d, //0x0000307a cmpb $13, %bl - 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x0000307d je LBB0_562 - 0x80, 0xfb, 0x20, //0x00003083 cmpb $32, %bl - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00003086 je LBB0_562 - 0x80, 0xc3, 0xf7, //0x0000308c addb $-9, %bl - 0x80, 0xfb, 0x01, //0x0000308f cmpb $1, %bl - 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x00003092 jbe LBB0_562 - 0x49, 0x89, 0xd6, //0x00003098 movq %rdx, %r14 - 0xe9, 0xf8, 0x00, 0x00, 0x00, //0x0000309b jmp LBB0_583 - //0x000030a0 .p2align 4, 0x90 - //0x000030a0 LBB0_562 - 0x4c, 0x8d, 0x72, 0x01, //0x000030a0 leaq $1(%rdx), %r14 - 0x49, 0x39, 0xc6, //0x000030a4 cmpq %rax, %r14 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000030a7 jae LBB0_566 - 0x43, 0x8a, 0x5c, 0x35, 0x00, //0x000030ad movb (%r13,%r14), %bl - 0x80, 0xfb, 0x0d, //0x000030b2 cmpb $13, %bl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000030b5 je LBB0_566 - 0x80, 0xfb, 0x20, //0x000030bb cmpb $32, %bl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000030be je LBB0_566 - 0x80, 0xc3, 0xf7, //0x000030c4 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x000030c7 cmpb $1, %bl - 0x0f, 0x87, 0xc8, 0x00, 0x00, 0x00, //0x000030ca ja LBB0_583 - //0x000030d0 .p2align 4, 0x90 - //0x000030d0 LBB0_566 - 0x4c, 0x8d, 0x72, 0x02, //0x000030d0 leaq $2(%rdx), %r14 - 0x49, 0x39, 0xc6, //0x000030d4 cmpq %rax, %r14 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000030d7 jae LBB0_570 - 0x43, 0x8a, 0x5c, 0x35, 0x00, //0x000030dd movb (%r13,%r14), %bl - 0x80, 0xfb, 0x0d, //0x000030e2 cmpb $13, %bl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000030e5 je LBB0_570 - 0x80, 0xfb, 0x20, //0x000030eb cmpb $32, %bl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000030ee je LBB0_570 - 0x80, 0xc3, 0xf7, //0x000030f4 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x000030f7 cmpb $1, %bl - 0x0f, 0x87, 0x98, 0x00, 0x00, 0x00, //0x000030fa ja LBB0_583 + 0x4d, 0x8b, 0x01, //0x00000a3f movq (%r9), %r8 + 0x4c, 0x89, 0xc1, //0x00000a42 movq %r8, %rcx + 0x4c, 0x29, 0xd9, //0x00000a45 subq %r11, %rcx + 0x48, 0x83, 0xf9, 0x10, //0x00000a48 cmpq $16, %rcx + 0x0f, 0x82, 0x93, 0x11, 0x00, 0x00, //0x00000a4c jb LBB0_314 + 0x48, 0x89, 0xc7, //0x00000a52 movq %rax, %rdi + 0x48, 0xf7, 0xd7, //0x00000a55 notq %rdi + 0x48, 0x8d, 0x58, 0x01, //0x00000a58 leaq $1(%rax), %rbx + 0x48, 0x8d, 0x48, 0x02, //0x00000a5c leaq $2(%rax), %rcx + 0x4a, 0x8d, 0x14, 0x28, //0x00000a60 leaq (%rax,%r13), %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000a64 .p2align 4, 0x90 + //0x00000a70 LBB0_152 + 0xf3, 0x41, 0x0f, 0x6f, 0x54, 0x1d, 0x00, //0x00000a70 movdqu (%r13,%rbx), %xmm2 + 0x66, 0x0f, 0x6f, 0xda, //0x00000a77 movdqa %xmm2, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00000a7b pcmpeqb %xmm13, %xmm3 + 0x66, 0x41, 0x0f, 0xdb, 0xd6, //0x00000a80 pand %xmm14, %xmm2 + 0x66, 0x0f, 0x74, 0xd4, //0x00000a85 pcmpeqb %xmm4, %xmm2 + 0x66, 0x0f, 0xeb, 0xd3, //0x00000a89 por %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xf2, //0x00000a8d pmovmskb %xmm2, %esi + 0x85, 0xf6, //0x00000a91 testl %esi, %esi + 0x0f, 0x85, 0xa7, 0x00, 0x00, 0x00, //0x00000a93 jne LBB0_163 + 0x48, 0x83, 0xc3, 0x10, //0x00000a99 addq $16, %rbx + 0x49, 0x8d, 0x34, 0x38, //0x00000a9d leaq (%r8,%rdi), %rsi + 0x48, 0x83, 0xc6, 0xf0, //0x00000aa1 addq $-16, %rsi + 0x48, 0x83, 0xc7, 0xf0, //0x00000aa5 addq $-16, %rdi + 0x48, 0x83, 0xc1, 0x10, //0x00000aa9 addq $16, %rcx + 0x48, 0x83, 0xc0, 0x10, //0x00000aad addq $16, %rax + 0x48, 0x83, 0xc2, 0x10, //0x00000ab1 addq $16, %rdx + 0x48, 0x83, 0xfe, 0x0f, //0x00000ab5 cmpq $15, %rsi + 0x0f, 0x87, 0xb1, 0xff, 0xff, 0xff, //0x00000ab9 ja LBB0_152 + 0x4d, 0x89, 0xeb, //0x00000abf movq %r13, %r11 + 0x49, 0x29, 0xfb, //0x00000ac2 subq %rdi, %r11 + 0x49, 0x01, 0xf8, //0x00000ac5 addq %rdi, %r8 + 0x4c, 0x89, 0xc1, //0x00000ac8 movq %r8, %rcx + 0x48, 0x85, 0xc9, //0x00000acb testq %rcx, %rcx + 0x4c, 0x8b, 0x45, 0xc8, //0x00000ace movq $-56(%rbp), %r8 + 0x0f, 0x84, 0x49, 0x00, 0x00, 0x00, //0x00000ad2 je LBB0_162 + //0x00000ad8 LBB0_155 + 0x49, 0x8d, 0x04, 0x0b, //0x00000ad8 leaq (%r11,%rcx), %rax + //0x00000adc LBB0_156 + 0x41, 0x0f, 0xb6, 0x13, //0x00000adc movzbl (%r11), %edx + 0x48, 0x83, 0xfa, 0x2c, //0x00000ae0 cmpq $44, %rdx + 0x0f, 0x87, 0x14, 0x00, 0x00, 0x00, //0x00000ae4 ja LBB0_158 + 0x48, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00000aea movabsq $17596481021440, %rsi + 0x48, 0x0f, 0xa3, 0xd6, //0x00000af4 btq %rdx, %rsi + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x00000af8 jb LBB0_162 + //0x00000afe LBB0_158 + 0x80, 0xfa, 0x5d, //0x00000afe cmpb $93, %dl + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00000b01 je LBB0_162 + 0x80, 0xfa, 0x7d, //0x00000b07 cmpb $125, %dl + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00000b0a je LBB0_162 + 0x49, 0x83, 0xc3, 0x01, //0x00000b10 addq $1, %r11 + 0x48, 0x83, 0xc1, 0xff, //0x00000b14 addq $-1, %rcx + 0x0f, 0x85, 0xbe, 0xff, 0xff, 0xff, //0x00000b18 jne LBB0_156 + 0x49, 0x89, 0xc3, //0x00000b1e movq %rax, %r11 + //0x00000b21 LBB0_162 + 0x4d, 0x29, 0xeb, //0x00000b21 subq %r13, %r11 + 0x4d, 0x89, 0x18, //0x00000b24 movq %r11, (%r8) + 0x4d, 0x8b, 0x2c, 0x24, //0x00000b27 movq (%r12), %r13 + 0x49, 0x8b, 0x44, 0x24, 0x08, //0x00000b2b movq $8(%r12), %rax + 0x49, 0x39, 0xc3, //0x00000b30 cmpq %rax, %r11 + 0x0f, 0x83, 0x67, 0x0a, 0x00, 0x00, //0x00000b33 jae LBB0_241 + 0xe9, 0xc4, 0x05, 0x00, 0x00, //0x00000b39 jmp LBB0_237 + 0x90, 0x90, //0x00000b3e .p2align 4, 0x90 + //0x00000b40 LBB0_163 + 0x66, 0x0f, 0xbc, 0xf6, //0x00000b40 bsfw %si, %si + 0x0f, 0xb7, 0xf6, //0x00000b44 movzwl %si, %esi + 0x49, 0x89, 0xf3, //0x00000b47 movq %rsi, %r11 + 0x49, 0x29, 0xfb, //0x00000b4a subq %rdi, %r11 + 0x4c, 0x8b, 0x45, 0xc8, //0x00000b4d movq $-56(%rbp), %r8 + 0x4d, 0x89, 0x18, //0x00000b51 movq %r11, (%r8) + 0x4d, 0x85, 0xdb, //0x00000b54 testq %r11, %r11 + 0x0f, 0x8e, 0x93, 0x05, 0x00, 0x00, //0x00000b57 jle LBB0_236 + 0x48, 0x01, 0xf1, //0x00000b5d addq %rsi, %rcx + 0x48, 0x01, 0xf0, //0x00000b60 addq %rsi, %rax + 0x48, 0x01, 0xf2, //0x00000b63 addq %rsi, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000b66 .p2align 4, 0x90 + //0x00000b70 LBB0_165 + 0x0f, 0xb6, 0x32, //0x00000b70 movzbl (%rdx), %esi + 0x48, 0x83, 0xfe, 0x20, //0x00000b73 cmpq $32, %rsi + 0x0f, 0x87, 0x73, 0x05, 0x00, 0x00, //0x00000b77 ja LBB0_236 + 0x49, 0x0f, 0xa3, 0xf6, //0x00000b7d btq %rsi, %r14 + 0x0f, 0x83, 0x69, 0x05, 0x00, 0x00, //0x00000b81 jae LBB0_236 + 0x49, 0x89, 0x00, //0x00000b87 movq %rax, (%r8) + 0x48, 0x83, 0xc1, 0xff, //0x00000b8a addq $-1, %rcx + 0x48, 0x83, 0xc0, 0xff, //0x00000b8e addq $-1, %rax + 0x48, 0x83, 0xc2, 0xff, //0x00000b92 addq $-1, %rdx + 0x49, 0x83, 0xc3, 0xff, //0x00000b96 addq $-1, %r11 + 0x48, 0x83, 0xf9, 0x01, //0x00000b9a cmpq $1, %rcx + 0x0f, 0x8f, 0xcc, 0xff, 0xff, 0xff, //0x00000b9e jg LBB0_165 + 0xe9, 0x47, 0x05, 0x00, 0x00, //0x00000ba4 jmp LBB0_236 + //0x00000ba9 LBB0_168 + 0x48, 0x83, 0xc0, 0x04, //0x00000ba9 addq $4, %rax + 0x49, 0x3b, 0x01, //0x00000bad cmpq (%r9), %rax + 0x0f, 0x86, 0x31, 0x05, 0x00, 0x00, //0x00000bb0 jbe LBB0_206 + 0xe9, 0x35, 0x05, 0x00, 0x00, //0x00000bb6 jmp LBB0_236 + //0x00000bbb LBB0_169 + 0x4d, 0x8b, 0x01, //0x00000bbb movq (%r9), %r8 + 0x4d, 0x89, 0xc6, //0x00000bbe movq %r8, %r14 + 0x4d, 0x29, 0xde, //0x00000bc1 subq %r11, %r14 + 0x49, 0x83, 0xfe, 0x20, //0x00000bc4 cmpq $32, %r14 + 0x0f, 0x8c, 0x33, 0x10, 0x00, 0x00, //0x00000bc8 jl LBB0_316 + 0x4e, 0x8d, 0x0c, 0x28, //0x00000bce leaq (%rax,%r13), %r9 + 0x49, 0x29, 0xc0, //0x00000bd2 subq %rax, %r8 + 0x41, 0xbf, 0x1f, 0x00, 0x00, 0x00, //0x00000bd5 movl $31, %r15d + 0x45, 0x31, 0xf6, //0x00000bdb xorl %r14d, %r14d + 0x45, 0x31, 0xd2, //0x00000bde xorl %r10d, %r10d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000be1 .p2align 4, 0x90 + //0x00000bf0 LBB0_171 + 0xf3, 0x43, 0x0f, 0x6f, 0x54, 0x31, 0x01, //0x00000bf0 movdqu $1(%r9,%r14), %xmm2 + 0xf3, 0x43, 0x0f, 0x6f, 0x5c, 0x31, 0x11, //0x00000bf7 movdqu $17(%r9,%r14), %xmm3 + 0x66, 0x0f, 0x6f, 0xea, //0x00000bfe movdqa %xmm2, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00000c02 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xf5, //0x00000c06 pmovmskb %xmm5, %esi + 0x66, 0x0f, 0x6f, 0xeb, //0x00000c0a movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00000c0e pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xdd, //0x00000c12 pmovmskb %xmm5, %ebx + 0x48, 0xc1, 0xe3, 0x10, //0x00000c16 shlq $16, %rbx + 0x48, 0x09, 0xf3, //0x00000c1a orq %rsi, %rbx + 0x66, 0x0f, 0x74, 0xd1, //0x00000c1d pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00000c21 pmovmskb %xmm2, %edx + 0x66, 0x0f, 0x74, 0xd9, //0x00000c25 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00000c29 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x10, //0x00000c2d shlq $16, %rsi + 0x48, 0x09, 0xd6, //0x00000c31 orq %rdx, %rsi + 0x48, 0x89, 0xf2, //0x00000c34 movq %rsi, %rdx + 0x4c, 0x09, 0xd2, //0x00000c37 orq %r10, %rdx + 0x0f, 0x84, 0x40, 0x00, 0x00, 0x00, //0x00000c3a je LBB0_173 + 0x44, 0x89, 0xd2, //0x00000c40 movl %r10d, %edx + 0xf7, 0xd2, //0x00000c43 notl %edx + 0x21, 0xf2, //0x00000c45 andl %esi, %edx + 0x8d, 0x3c, 0x12, //0x00000c47 leal (%rdx,%rdx), %edi + 0x44, 0x09, 0xd7, //0x00000c4a orl %r10d, %edi + 0x89, 0xf9, //0x00000c4d movl %edi, %ecx + 0xf7, 0xd1, //0x00000c4f notl %ecx + 0x21, 0xf1, //0x00000c51 andl %esi, %ecx + 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000c53 andl $-1431655766, %ecx + 0x45, 0x31, 0xd2, //0x00000c59 xorl %r10d, %r10d + 0x01, 0xd1, //0x00000c5c addl %edx, %ecx + 0x41, 0x0f, 0x92, 0xc2, //0x00000c5e setb %r10b + 0x01, 0xc9, //0x00000c62 addl %ecx, %ecx + 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00000c64 xorl $1431655765, %ecx + 0x21, 0xf9, //0x00000c6a andl %edi, %ecx + 0xf7, 0xd1, //0x00000c6c notl %ecx + 0x21, 0xcb, //0x00000c6e andl %ecx, %ebx + 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00000c70 jmp LBB0_174 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000c75 .p2align 4, 0x90 + //0x00000c80 LBB0_173 + 0x45, 0x31, 0xd2, //0x00000c80 xorl %r10d, %r10d + //0x00000c83 LBB0_174 + 0x48, 0x85, 0xdb, //0x00000c83 testq %rbx, %rbx + 0x0f, 0x85, 0xd9, 0x08, 0x00, 0x00, //0x00000c86 jne LBB0_234 + 0x49, 0x83, 0xc6, 0x20, //0x00000c8c addq $32, %r14 + 0x4b, 0x8d, 0x0c, 0x38, //0x00000c90 leaq (%r8,%r15), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00000c94 addq $-32, %rcx + 0x49, 0x83, 0xc7, 0xe0, //0x00000c98 addq $-32, %r15 + 0x48, 0x83, 0xf9, 0x3f, //0x00000c9c cmpq $63, %rcx + 0x0f, 0x8f, 0x4a, 0xff, 0xff, 0xff, //0x00000ca0 jg LBB0_171 + 0x4d, 0x85, 0xd2, //0x00000ca6 testq %r10, %r10 + 0x0f, 0x85, 0x0e, 0x11, 0x00, 0x00, //0x00000ca9 jne LBB0_339 + 0x4b, 0x8d, 0x04, 0x0e, //0x00000caf leaq (%r14,%r9), %rax + 0x48, 0x83, 0xc0, 0x01, //0x00000cb3 addq $1, %rax + 0x49, 0xf7, 0xd6, //0x00000cb7 notq %r14 + 0x4d, 0x01, 0xc6, //0x00000cba addq %r8, %r14 + //0x00000cbd LBB0_178 + 0x4d, 0x85, 0xf6, //0x00000cbd testq %r14, %r14 + 0x4c, 0x8b, 0x45, 0xc8, //0x00000cc0 movq $-56(%rbp), %r8 + 0x4c, 0x8b, 0x4d, 0xc0, //0x00000cc4 movq $-64(%rbp), %r9 + 0x0f, 0x8f, 0x9e, 0x0a, 0x00, 0x00, //0x00000cc8 jg LBB0_265 + 0xe9, 0xab, 0x08, 0x00, 0x00, //0x00000cce jmp LBB0_235 + //0x00000cd3 LBB0_179 + 0x4d, 0x8b, 0x01, //0x00000cd3 movq (%r9), %r8 + 0x4d, 0x29, 0xd8, //0x00000cd6 subq %r11, %r8 + 0x4d, 0x01, 0xdd, //0x00000cd9 addq %r11, %r13 + 0x45, 0x31, 0xc9, //0x00000cdc xorl %r9d, %r9d + 0x45, 0x31, 0xd2, //0x00000cdf xorl %r10d, %r10d + 0x45, 0x31, 0xdb, //0x00000ce2 xorl %r11d, %r11d + 0x31, 0xd2, //0x00000ce5 xorl %edx, %edx + 0xe9, 0x6b, 0x00, 0x00, 0x00, //0x00000ce7 jmp LBB0_181 + //0x00000cec LBB0_180 + 0x49, 0xc1, 0xfe, 0x3f, //0x00000cec sarq $63, %r14 + 0x4c, 0x89, 0xf9, //0x00000cf0 movq %r15, %rcx + 0x48, 0xd1, 0xe9, //0x00000cf3 shrq %rcx + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000cf6 movabsq $6148914691236517205, %rax + 0x48, 0x21, 0xc1, //0x00000d00 andq %rax, %rcx + 0x49, 0x29, 0xcf, //0x00000d03 subq %rcx, %r15 + 0x4c, 0x89, 0xf9, //0x00000d06 movq %r15, %rcx + 0x48, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00000d09 movabsq $3689348814741910323, %rax + 0x48, 0x21, 0xc1, //0x00000d13 andq %rax, %rcx + 0x49, 0xc1, 0xef, 0x02, //0x00000d16 shrq $2, %r15 + 0x49, 0x21, 0xc7, //0x00000d1a andq %rax, %r15 + 0x49, 0x01, 0xcf, //0x00000d1d addq %rcx, %r15 + 0x4c, 0x89, 0xf9, //0x00000d20 movq %r15, %rcx + 0x48, 0xc1, 0xe9, 0x04, //0x00000d23 shrq $4, %rcx + 0x4c, 0x01, 0xf9, //0x00000d27 addq %r15, %rcx + 0x48, 0xb8, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00000d2a movabsq $1085102592571150095, %rax + 0x48, 0x21, 0xc1, //0x00000d34 andq %rax, %rcx + 0x48, 0xb8, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00000d37 movabsq $72340172838076673, %rax + 0x48, 0x0f, 0xaf, 0xc8, //0x00000d41 imulq %rax, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x00000d45 shrq $56, %rcx + 0x49, 0x01, 0xcb, //0x00000d49 addq %rcx, %r11 + 0x49, 0x83, 0xc5, 0x40, //0x00000d4c addq $64, %r13 + 0x49, 0x83, 0xc0, 0xc0, //0x00000d50 addq $-64, %r8 + 0x4d, 0x89, 0xf1, //0x00000d54 movq %r14, %r9 + //0x00000d57 LBB0_181 + 0x49, 0x83, 0xf8, 0x40, //0x00000d57 cmpq $64, %r8 + 0x0f, 0x8c, 0x30, 0x02, 0x00, 0x00, //0x00000d5b jl LBB0_189 + //0x00000d61 LBB0_182 + 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x00, //0x00000d61 movdqu (%r13), %xmm2 + 0xf3, 0x41, 0x0f, 0x6f, 0x6d, 0x10, //0x00000d67 movdqu $16(%r13), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x7d, 0x20, //0x00000d6d movdqu $32(%r13), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x75, 0x30, //0x00000d73 movdqu $48(%r13), %xmm6 + 0x66, 0x0f, 0x6f, 0xda, //0x00000d79 movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00000d7d pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xc3, //0x00000d81 pmovmskb %xmm3, %eax + 0x66, 0x0f, 0x6f, 0xdd, //0x00000d85 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00000d89 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00000d8d pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x6f, 0xdf, //0x00000d91 movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00000d95 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00000d99 pmovmskb %xmm3, %edi + 0x66, 0x0f, 0x6f, 0xde, //0x00000d9d movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00000da1 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x00000da5 pmovmskb %xmm3, %ebx + 0x48, 0xc1, 0xe3, 0x30, //0x00000da9 shlq $48, %rbx + 0x48, 0xc1, 0xe7, 0x20, //0x00000dad shlq $32, %rdi + 0x48, 0x09, 0xdf, //0x00000db1 orq %rbx, %rdi + 0x48, 0xc1, 0xe6, 0x10, //0x00000db4 shlq $16, %rsi + 0x48, 0x09, 0xfe, //0x00000db8 orq %rdi, %rsi + 0x48, 0x09, 0xf0, //0x00000dbb orq %rsi, %rax + 0x48, 0x89, 0xc6, //0x00000dbe movq %rax, %rsi + 0x4c, 0x09, 0xd6, //0x00000dc1 orq %r10, %rsi + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00000dc4 jne LBB0_184 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000dca movq $-1, %rax + 0x45, 0x31, 0xd2, //0x00000dd1 xorl %r10d, %r10d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00000dd4 jmp LBB0_185 + //0x00000dd9 LBB0_184 + 0x4c, 0x89, 0xd6, //0x00000dd9 movq %r10, %rsi + 0x48, 0xf7, 0xd6, //0x00000ddc notq %rsi + 0x48, 0x21, 0xc6, //0x00000ddf andq %rax, %rsi + 0x48, 0x8d, 0x1c, 0x36, //0x00000de2 leaq (%rsi,%rsi), %rbx + 0x4c, 0x09, 0xd3, //0x00000de6 orq %r10, %rbx + 0x48, 0x89, 0xdf, //0x00000de9 movq %rbx, %rdi + 0x48, 0xf7, 0xd7, //0x00000dec notq %rdi + 0x48, 0xb9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000def movabsq $-6148914691236517206, %rcx + 0x48, 0x21, 0xc8, //0x00000df9 andq %rcx, %rax + 0x48, 0x21, 0xf8, //0x00000dfc andq %rdi, %rax + 0x45, 0x31, 0xd2, //0x00000dff xorl %r10d, %r10d + 0x48, 0x01, 0xf0, //0x00000e02 addq %rsi, %rax + 0x41, 0x0f, 0x92, 0xc2, //0x00000e05 setb %r10b + 0x48, 0x01, 0xc0, //0x00000e09 addq %rax, %rax + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000e0c movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xc8, //0x00000e16 xorq %rcx, %rax + 0x48, 0x21, 0xd8, //0x00000e19 andq %rbx, %rax + 0x48, 0xf7, 0xd0, //0x00000e1c notq %rax + //0x00000e1f LBB0_185 + 0x66, 0x0f, 0x6f, 0xde, //0x00000e1f movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00000e23 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00000e27 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x30, //0x00000e2b shlq $48, %rsi + 0x66, 0x0f, 0x6f, 0xdf, //0x00000e2f movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00000e33 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00000e37 pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe7, 0x20, //0x00000e3b shlq $32, %rdi + 0x48, 0x09, 0xf7, //0x00000e3f orq %rsi, %rdi + 0x66, 0x0f, 0x6f, 0xdd, //0x00000e42 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00000e46 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00000e4a pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x10, //0x00000e4e shlq $16, %rsi + 0x48, 0x09, 0xfe, //0x00000e52 orq %rdi, %rsi + 0x66, 0x0f, 0x6f, 0xda, //0x00000e55 movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00000e59 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00000e5d pmovmskb %xmm3, %edi + 0x48, 0x09, 0xf7, //0x00000e61 orq %rsi, %rdi + 0x48, 0x21, 0xc7, //0x00000e64 andq %rax, %rdi + 0x66, 0x48, 0x0f, 0x6e, 0xdf, //0x00000e67 movq %rdi, %xmm3 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd9, 0x00, //0x00000e6c pclmulqdq $0, %xmm9, %xmm3 + 0x66, 0x49, 0x0f, 0x7e, 0xde, //0x00000e73 movq %xmm3, %r14 + 0x4d, 0x31, 0xce, //0x00000e78 xorq %r9, %r14 + 0x66, 0x0f, 0x6f, 0xda, //0x00000e7b movdqa %xmm2, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xda, //0x00000e7f pcmpeqb %xmm10, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x00000e84 pmovmskb %xmm3, %r15d + 0x66, 0x0f, 0x6f, 0xdd, //0x00000e89 movdqa %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xda, //0x00000e8d pcmpeqb %xmm10, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00000e92 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x6f, 0xdf, //0x00000e96 movdqa %xmm7, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xda, //0x00000e9a pcmpeqb %xmm10, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x00000e9f pmovmskb %xmm3, %ebx + 0x66, 0x0f, 0x6f, 0xde, //0x00000ea3 movdqa %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xda, //0x00000ea7 pcmpeqb %xmm10, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00000eac pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x30, //0x00000eb0 shlq $48, %rcx + 0x48, 0xc1, 0xe3, 0x20, //0x00000eb4 shlq $32, %rbx + 0x48, 0x09, 0xcb, //0x00000eb8 orq %rcx, %rbx + 0x48, 0xc1, 0xe6, 0x10, //0x00000ebb shlq $16, %rsi + 0x48, 0x09, 0xde, //0x00000ebf orq %rbx, %rsi + 0x49, 0x09, 0xf7, //0x00000ec2 orq %rsi, %r15 + 0x4d, 0x89, 0xf1, //0x00000ec5 movq %r14, %r9 + 0x49, 0xf7, 0xd1, //0x00000ec8 notq %r9 + 0x4d, 0x21, 0xcf, //0x00000ecb andq %r9, %r15 + 0x66, 0x0f, 0x74, 0xd4, //0x00000ece pcmpeqb %xmm4, %xmm2 + 0x66, 0x0f, 0xd7, 0xf2, //0x00000ed2 pmovmskb %xmm2, %esi + 0x66, 0x0f, 0x74, 0xec, //0x00000ed6 pcmpeqb %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xdd, //0x00000eda pmovmskb %xmm5, %ebx + 0x66, 0x0f, 0x74, 0xfc, //0x00000ede pcmpeqb %xmm4, %xmm7 + 0x66, 0x0f, 0xd7, 0xff, //0x00000ee2 pmovmskb %xmm7, %edi + 0x66, 0x0f, 0x74, 0xf4, //0x00000ee6 pcmpeqb %xmm4, %xmm6 + 0x66, 0x0f, 0xd7, 0xce, //0x00000eea pmovmskb %xmm6, %ecx + 0x48, 0xc1, 0xe1, 0x30, //0x00000eee shlq $48, %rcx + 0x48, 0xc1, 0xe7, 0x20, //0x00000ef2 shlq $32, %rdi + 0x48, 0x09, 0xcf, //0x00000ef6 orq %rcx, %rdi + 0x48, 0xc1, 0xe3, 0x10, //0x00000ef9 shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x00000efd orq %rdi, %rbx + 0x48, 0x09, 0xde, //0x00000f00 orq %rbx, %rsi + 0x4c, 0x21, 0xce, //0x00000f03 andq %r9, %rsi + 0x0f, 0x84, 0xe0, 0xfd, 0xff, 0xff, //0x00000f06 je LBB0_180 + 0x4c, 0x8b, 0x4d, 0xc0, //0x00000f0c movq $-64(%rbp), %r9 + //0x00000f10 .p2align 4, 0x90 + //0x00000f10 LBB0_187 + 0x48, 0x8d, 0x5e, 0xff, //0x00000f10 leaq $-1(%rsi), %rbx + 0x48, 0x89, 0xd9, //0x00000f14 movq %rbx, %rcx + 0x4c, 0x21, 0xf9, //0x00000f17 andq %r15, %rcx + 0x48, 0x89, 0xcf, //0x00000f1a movq %rcx, %rdi + 0x48, 0xd1, 0xef, //0x00000f1d shrq %rdi + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000f20 movabsq $6148914691236517205, %rax + 0x48, 0x21, 0xc7, //0x00000f2a andq %rax, %rdi + 0x48, 0x29, 0xf9, //0x00000f2d subq %rdi, %rcx + 0x48, 0x89, 0xcf, //0x00000f30 movq %rcx, %rdi + 0x48, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00000f33 movabsq $3689348814741910323, %rax + 0x48, 0x21, 0xc7, //0x00000f3d andq %rax, %rdi + 0x48, 0xc1, 0xe9, 0x02, //0x00000f40 shrq $2, %rcx + 0x48, 0x21, 0xc1, //0x00000f44 andq %rax, %rcx + 0x48, 0x01, 0xf9, //0x00000f47 addq %rdi, %rcx + 0x48, 0x89, 0xcf, //0x00000f4a movq %rcx, %rdi + 0x48, 0xc1, 0xef, 0x04, //0x00000f4d shrq $4, %rdi + 0x48, 0x01, 0xcf, //0x00000f51 addq %rcx, %rdi + 0x48, 0xb8, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00000f54 movabsq $1085102592571150095, %rax + 0x48, 0x21, 0xc7, //0x00000f5e andq %rax, %rdi + 0x48, 0xb8, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00000f61 movabsq $72340172838076673, %rax + 0x48, 0x0f, 0xaf, 0xf8, //0x00000f6b imulq %rax, %rdi + 0x48, 0xc1, 0xef, 0x38, //0x00000f6f shrq $56, %rdi + 0x4c, 0x01, 0xdf, //0x00000f73 addq %r11, %rdi + 0x48, 0x39, 0xd7, //0x00000f76 cmpq %rdx, %rdi + 0x0f, 0x86, 0xbb, 0x05, 0x00, 0x00, //0x00000f79 jbe LBB0_233 + 0x48, 0x83, 0xc2, 0x01, //0x00000f7f addq $1, %rdx + 0x48, 0x21, 0xde, //0x00000f83 andq %rbx, %rsi + 0x0f, 0x85, 0x84, 0xff, 0xff, 0xff, //0x00000f86 jne LBB0_187 + 0xe9, 0x5b, 0xfd, 0xff, 0xff, //0x00000f8c jmp LBB0_180 + //0x00000f91 LBB0_189 + 0x4d, 0x85, 0xc0, //0x00000f91 testq %r8, %r8 + 0x0f, 0x8e, 0x0c, 0x0e, 0x00, 0x00, //0x00000f94 jle LBB0_337 + 0xf3, 0x44, 0x0f, 0x7f, 0x45, 0x80, //0x00000f9a movdqu %xmm8, $-128(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x70, 0xff, 0xff, 0xff, //0x00000fa0 movdqu %xmm8, $-144(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x00000fa9 movdqu %xmm8, $-160(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x00000fb2 movdqu %xmm8, $-176(%rbp) + 0x44, 0x89, 0xe8, //0x00000fbb movl %r13d, %eax + 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00000fbe andl $4095, %eax + 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00000fc3 cmpl $4033, %eax + 0x0f, 0x82, 0x38, 0x00, 0x00, 0x00, //0x00000fc8 jb LBB0_193 + 0x49, 0x83, 0xf8, 0x20, //0x00000fce cmpq $32, %r8 + 0x0f, 0x82, 0x37, 0x00, 0x00, 0x00, //0x00000fd2 jb LBB0_194 + 0x41, 0x0f, 0x10, 0x55, 0x00, //0x00000fd8 movups (%r13), %xmm2 + 0x0f, 0x11, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00000fdd movups %xmm2, $-176(%rbp) + 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x10, //0x00000fe4 movdqu $16(%r13), %xmm2 + 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x00000fea movdqu %xmm2, $-160(%rbp) + 0x49, 0x83, 0xc5, 0x20, //0x00000ff2 addq $32, %r13 + 0x49, 0x8d, 0x70, 0xe0, //0x00000ff6 leaq $-32(%r8), %rsi + 0x48, 0x8d, 0x85, 0x70, 0xff, 0xff, 0xff, //0x00000ffa leaq $-144(%rbp), %rax + 0xe9, 0x13, 0x00, 0x00, 0x00, //0x00001001 jmp LBB0_195 + //0x00001006 LBB0_193 + 0x4c, 0x8b, 0x65, 0xa8, //0x00001006 movq $-88(%rbp), %r12 + 0xe9, 0x52, 0xfd, 0xff, 0xff, //0x0000100a jmp LBB0_182 + //0x0000100f LBB0_194 + 0x48, 0x8d, 0x85, 0x50, 0xff, 0xff, 0xff, //0x0000100f leaq $-176(%rbp), %rax + 0x4c, 0x89, 0xc6, //0x00001016 movq %r8, %rsi + //0x00001019 LBB0_195 + 0x48, 0x83, 0xfe, 0x10, //0x00001019 cmpq $16, %rsi + 0x0f, 0x82, 0x4b, 0x00, 0x00, 0x00, //0x0000101d jb LBB0_196 + 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x00, //0x00001023 movdqu (%r13), %xmm2 + 0xf3, 0x0f, 0x7f, 0x10, //0x00001029 movdqu %xmm2, (%rax) + 0x49, 0x83, 0xc5, 0x10, //0x0000102d addq $16, %r13 + 0x48, 0x83, 0xc0, 0x10, //0x00001031 addq $16, %rax + 0x48, 0x83, 0xc6, 0xf0, //0x00001035 addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x08, //0x00001039 cmpq $8, %rsi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x0000103d jae LBB0_203 + //0x00001043 LBB0_197 + 0x48, 0x83, 0xfe, 0x04, //0x00001043 cmpq $4, %rsi + 0x0f, 0x8c, 0x48, 0x00, 0x00, 0x00, //0x00001047 jl LBB0_198 + //0x0000104d LBB0_204 + 0x41, 0x8b, 0x4d, 0x00, //0x0000104d movl (%r13), %ecx + 0x89, 0x08, //0x00001051 movl %ecx, (%rax) + 0x49, 0x83, 0xc5, 0x04, //0x00001053 addq $4, %r13 + 0x48, 0x83, 0xc0, 0x04, //0x00001057 addq $4, %rax + 0x48, 0x83, 0xc6, 0xfc, //0x0000105b addq $-4, %rsi + 0x48, 0x83, 0xfe, 0x02, //0x0000105f cmpq $2, %rsi + 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x00001063 jae LBB0_199 + 0xe9, 0x45, 0x00, 0x00, 0x00, //0x00001069 jmp LBB0_200 + //0x0000106e LBB0_196 + 0x48, 0x83, 0xfe, 0x08, //0x0000106e cmpq $8, %rsi + 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x00001072 jb LBB0_197 + //0x00001078 LBB0_203 + 0x49, 0x8b, 0x4d, 0x00, //0x00001078 movq (%r13), %rcx + 0x48, 0x89, 0x08, //0x0000107c movq %rcx, (%rax) + 0x49, 0x83, 0xc5, 0x08, //0x0000107f addq $8, %r13 + 0x48, 0x83, 0xc0, 0x08, //0x00001083 addq $8, %rax + 0x48, 0x83, 0xc6, 0xf8, //0x00001087 addq $-8, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x0000108b cmpq $4, %rsi + 0x0f, 0x8d, 0xb8, 0xff, 0xff, 0xff, //0x0000108f jge LBB0_204 + //0x00001095 LBB0_198 + 0x48, 0x83, 0xfe, 0x02, //0x00001095 cmpq $2, %rsi + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00001099 jb LBB0_200 + //0x0000109f LBB0_199 + 0x41, 0x0f, 0xb7, 0x4d, 0x00, //0x0000109f movzwl (%r13), %ecx + 0x66, 0x89, 0x08, //0x000010a4 movw %cx, (%rax) + 0x49, 0x83, 0xc5, 0x02, //0x000010a7 addq $2, %r13 + 0x48, 0x83, 0xc0, 0x02, //0x000010ab addq $2, %rax + 0x48, 0x83, 0xc6, 0xfe, //0x000010af addq $-2, %rsi + //0x000010b3 LBB0_200 + 0x4c, 0x89, 0xef, //0x000010b3 movq %r13, %rdi + 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x000010b6 leaq $-176(%rbp), %r13 + 0x48, 0x85, 0xf6, //0x000010bd testq %rsi, %rsi + 0x4c, 0x8b, 0x65, 0xa8, //0x000010c0 movq $-88(%rbp), %r12 + 0x0f, 0x84, 0x97, 0xfc, 0xff, 0xff, //0x000010c4 je LBB0_182 + 0x8a, 0x0f, //0x000010ca movb (%rdi), %cl + 0x88, 0x08, //0x000010cc movb %cl, (%rax) + 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x000010ce leaq $-176(%rbp), %r13 + 0xe9, 0x87, 0xfc, 0xff, 0xff, //0x000010d5 jmp LBB0_182 + //0x000010da LBB0_205 + 0x48, 0x83, 0xc0, 0x05, //0x000010da addq $5, %rax + 0x49, 0x3b, 0x01, //0x000010de cmpq (%r9), %rax + 0x0f, 0x87, 0x09, 0x00, 0x00, 0x00, //0x000010e1 ja LBB0_236 + //0x000010e7 LBB0_206 + 0x49, 0x89, 0x00, //0x000010e7 movq %rax, (%r8) + 0x49, 0x89, 0xc3, //0x000010ea movq %rax, %r11 + 0x90, 0x90, 0x90, //0x000010ed .p2align 4, 0x90 + //0x000010f0 LBB0_236 + 0x4d, 0x8b, 0x2c, 0x24, //0x000010f0 movq (%r12), %r13 + 0x49, 0x8b, 0x44, 0x24, 0x08, //0x000010f4 movq $8(%r12), %rax + 0x49, 0x39, 0xc3, //0x000010f9 cmpq %rax, %r11 + 0x0f, 0x83, 0x9e, 0x04, 0x00, 0x00, //0x000010fc jae LBB0_241 + //0x00001102 LBB0_237 + 0x43, 0x8a, 0x4c, 0x1d, 0x00, //0x00001102 movb (%r13,%r11), %cl + 0x80, 0xf9, 0x0d, //0x00001107 cmpb $13, %cl + 0x0f, 0x84, 0x90, 0x04, 0x00, 0x00, //0x0000110a je LBB0_241 + 0x80, 0xf9, 0x20, //0x00001110 cmpb $32, %cl + 0x0f, 0x84, 0x87, 0x04, 0x00, 0x00, //0x00001113 je LBB0_241 + 0x80, 0xc1, 0xf7, //0x00001119 addb $-9, %cl + 0x80, 0xf9, 0x01, //0x0000111c cmpb $1, %cl + 0x0f, 0x86, 0x7b, 0x04, 0x00, 0x00, //0x0000111f jbe LBB0_241 + 0x4c, 0x89, 0xd9, //0x00001125 movq %r11, %rcx + 0xe9, 0x68, 0x05, 0x00, 0x00, //0x00001128 jmp LBB0_262 + //0x0000112d LBB0_207 + 0x4d, 0x8b, 0x01, //0x0000112d movq (%r9), %r8 + 0x4d, 0x29, 0xd8, //0x00001130 subq %r11, %r8 + 0x4d, 0x01, 0xdd, //0x00001133 addq %r11, %r13 + 0x45, 0x31, 0xc9, //0x00001136 xorl %r9d, %r9d + 0x45, 0x31, 0xd2, //0x00001139 xorl %r10d, %r10d + 0x45, 0x31, 0xdb, //0x0000113c xorl %r11d, %r11d + 0x31, 0xd2, //0x0000113f xorl %edx, %edx + 0xe9, 0x6b, 0x00, 0x00, 0x00, //0x00001141 jmp LBB0_209 + //0x00001146 LBB0_208 + 0x49, 0xc1, 0xfe, 0x3f, //0x00001146 sarq $63, %r14 + 0x4c, 0x89, 0xf9, //0x0000114a movq %r15, %rcx + 0x48, 0xd1, 0xe9, //0x0000114d shrq %rcx + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001150 movabsq $6148914691236517205, %rax + 0x48, 0x21, 0xc1, //0x0000115a andq %rax, %rcx + 0x49, 0x29, 0xcf, //0x0000115d subq %rcx, %r15 + 0x4c, 0x89, 0xf9, //0x00001160 movq %r15, %rcx + 0x48, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001163 movabsq $3689348814741910323, %rax + 0x48, 0x21, 0xc1, //0x0000116d andq %rax, %rcx + 0x49, 0xc1, 0xef, 0x02, //0x00001170 shrq $2, %r15 + 0x49, 0x21, 0xc7, //0x00001174 andq %rax, %r15 + 0x49, 0x01, 0xcf, //0x00001177 addq %rcx, %r15 + 0x4c, 0x89, 0xf9, //0x0000117a movq %r15, %rcx + 0x48, 0xc1, 0xe9, 0x04, //0x0000117d shrq $4, %rcx + 0x4c, 0x01, 0xf9, //0x00001181 addq %r15, %rcx + 0x48, 0xb8, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001184 movabsq $1085102592571150095, %rax + 0x48, 0x21, 0xc1, //0x0000118e andq %rax, %rcx + 0x48, 0xb8, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00001191 movabsq $72340172838076673, %rax + 0x48, 0x0f, 0xaf, 0xc8, //0x0000119b imulq %rax, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x0000119f shrq $56, %rcx + 0x49, 0x01, 0xcb, //0x000011a3 addq %rcx, %r11 + 0x49, 0x83, 0xc5, 0x40, //0x000011a6 addq $64, %r13 + 0x49, 0x83, 0xc0, 0xc0, //0x000011aa addq $-64, %r8 + 0x4d, 0x89, 0xf1, //0x000011ae movq %r14, %r9 + //0x000011b1 LBB0_209 + 0x49, 0x83, 0xf8, 0x40, //0x000011b1 cmpq $64, %r8 + 0x0f, 0x8c, 0x36, 0x02, 0x00, 0x00, //0x000011b5 jl LBB0_217 + //0x000011bb LBB0_210 + 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x00, //0x000011bb movdqu (%r13), %xmm2 + 0xf3, 0x41, 0x0f, 0x6f, 0x6d, 0x10, //0x000011c1 movdqu $16(%r13), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x7d, 0x20, //0x000011c7 movdqu $32(%r13), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x75, 0x30, //0x000011cd movdqu $48(%r13), %xmm6 + 0x66, 0x0f, 0x6f, 0xda, //0x000011d3 movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x000011d7 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xc3, //0x000011db pmovmskb %xmm3, %eax + 0x66, 0x0f, 0x6f, 0xdd, //0x000011df movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x000011e3 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x000011e7 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x6f, 0xdf, //0x000011eb movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x000011ef pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x000011f3 pmovmskb %xmm3, %edi + 0x66, 0x0f, 0x6f, 0xde, //0x000011f7 movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x000011fb pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x000011ff pmovmskb %xmm3, %ebx + 0x48, 0xc1, 0xe3, 0x30, //0x00001203 shlq $48, %rbx + 0x48, 0xc1, 0xe7, 0x20, //0x00001207 shlq $32, %rdi + 0x48, 0x09, 0xdf, //0x0000120b orq %rbx, %rdi + 0x48, 0xc1, 0xe6, 0x10, //0x0000120e shlq $16, %rsi + 0x48, 0x09, 0xfe, //0x00001212 orq %rdi, %rsi + 0x48, 0x09, 0xf0, //0x00001215 orq %rsi, %rax + 0x48, 0x89, 0xc6, //0x00001218 movq %rax, %rsi + 0x4c, 0x09, 0xd6, //0x0000121b orq %r10, %rsi + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x0000121e jne LBB0_212 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00001224 movq $-1, %rax + 0x45, 0x31, 0xd2, //0x0000122b xorl %r10d, %r10d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x0000122e jmp LBB0_213 + //0x00001233 LBB0_212 + 0x4c, 0x89, 0xd6, //0x00001233 movq %r10, %rsi + 0x48, 0xf7, 0xd6, //0x00001236 notq %rsi + 0x48, 0x21, 0xc6, //0x00001239 andq %rax, %rsi + 0x48, 0x8d, 0x1c, 0x36, //0x0000123c leaq (%rsi,%rsi), %rbx + 0x4c, 0x09, 0xd3, //0x00001240 orq %r10, %rbx + 0x48, 0x89, 0xdf, //0x00001243 movq %rbx, %rdi + 0x48, 0xf7, 0xd7, //0x00001246 notq %rdi + 0x48, 0xb9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001249 movabsq $-6148914691236517206, %rcx + 0x48, 0x21, 0xc8, //0x00001253 andq %rcx, %rax + 0x48, 0x21, 0xf8, //0x00001256 andq %rdi, %rax + 0x45, 0x31, 0xd2, //0x00001259 xorl %r10d, %r10d + 0x48, 0x01, 0xf0, //0x0000125c addq %rsi, %rax + 0x41, 0x0f, 0x92, 0xc2, //0x0000125f setb %r10b + 0x48, 0x01, 0xc0, //0x00001263 addq %rax, %rax + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001266 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xc8, //0x00001270 xorq %rcx, %rax + 0x48, 0x21, 0xd8, //0x00001273 andq %rbx, %rax + 0x48, 0xf7, 0xd0, //0x00001276 notq %rax + //0x00001279 LBB0_213 + 0x66, 0x0f, 0x6f, 0xde, //0x00001279 movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000127d pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001281 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x30, //0x00001285 shlq $48, %rsi + 0x66, 0x0f, 0x6f, 0xdf, //0x00001289 movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000128d pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00001291 pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe7, 0x20, //0x00001295 shlq $32, %rdi + 0x48, 0x09, 0xf7, //0x00001299 orq %rsi, %rdi + 0x66, 0x0f, 0x6f, 0xdd, //0x0000129c movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x000012a0 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x000012a4 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x10, //0x000012a8 shlq $16, %rsi + 0x48, 0x09, 0xfe, //0x000012ac orq %rdi, %rsi + 0x66, 0x0f, 0x6f, 0xda, //0x000012af movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x000012b3 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x000012b7 pmovmskb %xmm3, %edi + 0x48, 0x09, 0xf7, //0x000012bb orq %rsi, %rdi + 0x48, 0x21, 0xc7, //0x000012be andq %rax, %rdi + 0x66, 0x48, 0x0f, 0x6e, 0xdf, //0x000012c1 movq %rdi, %xmm3 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd9, 0x00, //0x000012c6 pclmulqdq $0, %xmm9, %xmm3 + 0x66, 0x49, 0x0f, 0x7e, 0xde, //0x000012cd movq %xmm3, %r14 + 0x4d, 0x31, 0xce, //0x000012d2 xorq %r9, %r14 + 0x66, 0x0f, 0x6f, 0xda, //0x000012d5 movdqa %xmm2, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x000012d9 pcmpeqb %xmm11, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x000012de pmovmskb %xmm3, %r15d + 0x66, 0x0f, 0x6f, 0xdd, //0x000012e3 movdqa %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x000012e7 pcmpeqb %xmm11, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x000012ec pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x6f, 0xdf, //0x000012f0 movdqa %xmm7, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x000012f4 pcmpeqb %xmm11, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x000012f9 pmovmskb %xmm3, %ebx + 0x66, 0x0f, 0x6f, 0xde, //0x000012fd movdqa %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001301 pcmpeqb %xmm11, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001306 pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x30, //0x0000130a shlq $48, %rcx + 0x48, 0xc1, 0xe3, 0x20, //0x0000130e shlq $32, %rbx + 0x48, 0x09, 0xcb, //0x00001312 orq %rcx, %rbx + 0x48, 0xc1, 0xe6, 0x10, //0x00001315 shlq $16, %rsi + 0x48, 0x09, 0xde, //0x00001319 orq %rbx, %rsi + 0x49, 0x09, 0xf7, //0x0000131c orq %rsi, %r15 + 0x4d, 0x89, 0xf1, //0x0000131f movq %r14, %r9 + 0x49, 0xf7, 0xd1, //0x00001322 notq %r9 + 0x4d, 0x21, 0xcf, //0x00001325 andq %r9, %r15 + 0x66, 0x41, 0x0f, 0x74, 0xd4, //0x00001328 pcmpeqb %xmm12, %xmm2 + 0x66, 0x0f, 0xd7, 0xf2, //0x0000132d pmovmskb %xmm2, %esi + 0x66, 0x41, 0x0f, 0x74, 0xec, //0x00001331 pcmpeqb %xmm12, %xmm5 + 0x66, 0x0f, 0xd7, 0xdd, //0x00001336 pmovmskb %xmm5, %ebx + 0x66, 0x41, 0x0f, 0x74, 0xfc, //0x0000133a pcmpeqb %xmm12, %xmm7 + 0x66, 0x0f, 0xd7, 0xff, //0x0000133f pmovmskb %xmm7, %edi + 0x66, 0x41, 0x0f, 0x74, 0xf4, //0x00001343 pcmpeqb %xmm12, %xmm6 + 0x66, 0x0f, 0xd7, 0xce, //0x00001348 pmovmskb %xmm6, %ecx + 0x48, 0xc1, 0xe1, 0x30, //0x0000134c shlq $48, %rcx + 0x48, 0xc1, 0xe7, 0x20, //0x00001350 shlq $32, %rdi + 0x48, 0x09, 0xcf, //0x00001354 orq %rcx, %rdi + 0x48, 0xc1, 0xe3, 0x10, //0x00001357 shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x0000135b orq %rdi, %rbx + 0x48, 0x09, 0xde, //0x0000135e orq %rbx, %rsi + 0x4c, 0x21, 0xce, //0x00001361 andq %r9, %rsi + 0x0f, 0x84, 0xdc, 0xfd, 0xff, 0xff, //0x00001364 je LBB0_208 + 0x4c, 0x8b, 0x4d, 0xc0, //0x0000136a movq $-64(%rbp), %r9 + 0x90, 0x90, //0x0000136e .p2align 4, 0x90 + //0x00001370 LBB0_215 + 0x48, 0x8d, 0x5e, 0xff, //0x00001370 leaq $-1(%rsi), %rbx + 0x48, 0x89, 0xd9, //0x00001374 movq %rbx, %rcx + 0x4c, 0x21, 0xf9, //0x00001377 andq %r15, %rcx + 0x48, 0x89, 0xcf, //0x0000137a movq %rcx, %rdi + 0x48, 0xd1, 0xef, //0x0000137d shrq %rdi + 0x48, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001380 movabsq $6148914691236517205, %rax + 0x48, 0x21, 0xc7, //0x0000138a andq %rax, %rdi + 0x48, 0x29, 0xf9, //0x0000138d subq %rdi, %rcx + 0x48, 0x89, 0xcf, //0x00001390 movq %rcx, %rdi + 0x48, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001393 movabsq $3689348814741910323, %rax + 0x48, 0x21, 0xc7, //0x0000139d andq %rax, %rdi + 0x48, 0xc1, 0xe9, 0x02, //0x000013a0 shrq $2, %rcx + 0x48, 0x21, 0xc1, //0x000013a4 andq %rax, %rcx + 0x48, 0x01, 0xf9, //0x000013a7 addq %rdi, %rcx + 0x48, 0x89, 0xcf, //0x000013aa movq %rcx, %rdi + 0x48, 0xc1, 0xef, 0x04, //0x000013ad shrq $4, %rdi + 0x48, 0x01, 0xcf, //0x000013b1 addq %rcx, %rdi + 0x48, 0xb8, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x000013b4 movabsq $1085102592571150095, %rax + 0x48, 0x21, 0xc7, //0x000013be andq %rax, %rdi + 0x48, 0xb8, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000013c1 movabsq $72340172838076673, %rax + 0x48, 0x0f, 0xaf, 0xf8, //0x000013cb imulq %rax, %rdi + 0x48, 0xc1, 0xef, 0x38, //0x000013cf shrq $56, %rdi + 0x4c, 0x01, 0xdf, //0x000013d3 addq %r11, %rdi + 0x48, 0x39, 0xd7, //0x000013d6 cmpq %rdx, %rdi + 0x0f, 0x86, 0x5b, 0x01, 0x00, 0x00, //0x000013d9 jbe LBB0_233 + 0x48, 0x83, 0xc2, 0x01, //0x000013df addq $1, %rdx + 0x48, 0x21, 0xde, //0x000013e3 andq %rbx, %rsi + 0x0f, 0x85, 0x84, 0xff, 0xff, 0xff, //0x000013e6 jne LBB0_215 + 0xe9, 0x55, 0xfd, 0xff, 0xff, //0x000013ec jmp LBB0_208 + //0x000013f1 LBB0_217 + 0x4d, 0x85, 0xc0, //0x000013f1 testq %r8, %r8 + 0x0f, 0x8e, 0xac, 0x09, 0x00, 0x00, //0x000013f4 jle LBB0_337 + 0xf3, 0x44, 0x0f, 0x7f, 0x45, 0x80, //0x000013fa movdqu %xmm8, $-128(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x70, 0xff, 0xff, 0xff, //0x00001400 movdqu %xmm8, $-144(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x00001409 movdqu %xmm8, $-160(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x00001412 movdqu %xmm8, $-176(%rbp) + 0x44, 0x89, 0xe8, //0x0000141b movl %r13d, %eax + 0x25, 0xff, 0x0f, 0x00, 0x00, //0x0000141e andl $4095, %eax + 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00001423 cmpl $4033, %eax + 0x0f, 0x82, 0x38, 0x00, 0x00, 0x00, //0x00001428 jb LBB0_221 + 0x49, 0x83, 0xf8, 0x20, //0x0000142e cmpq $32, %r8 + 0x0f, 0x82, 0x37, 0x00, 0x00, 0x00, //0x00001432 jb LBB0_222 + 0x41, 0x0f, 0x10, 0x55, 0x00, //0x00001438 movups (%r13), %xmm2 + 0x0f, 0x11, 0x95, 0x50, 0xff, 0xff, 0xff, //0x0000143d movups %xmm2, $-176(%rbp) + 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x10, //0x00001444 movdqu $16(%r13), %xmm2 + 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x0000144a movdqu %xmm2, $-160(%rbp) + 0x49, 0x83, 0xc5, 0x20, //0x00001452 addq $32, %r13 + 0x49, 0x8d, 0x70, 0xe0, //0x00001456 leaq $-32(%r8), %rsi + 0x48, 0x8d, 0x85, 0x70, 0xff, 0xff, 0xff, //0x0000145a leaq $-144(%rbp), %rax + 0xe9, 0x13, 0x00, 0x00, 0x00, //0x00001461 jmp LBB0_223 + //0x00001466 LBB0_221 + 0x4c, 0x8b, 0x65, 0xa8, //0x00001466 movq $-88(%rbp), %r12 + 0xe9, 0x4c, 0xfd, 0xff, 0xff, //0x0000146a jmp LBB0_210 + //0x0000146f LBB0_222 + 0x48, 0x8d, 0x85, 0x50, 0xff, 0xff, 0xff, //0x0000146f leaq $-176(%rbp), %rax + 0x4c, 0x89, 0xc6, //0x00001476 movq %r8, %rsi + //0x00001479 LBB0_223 + 0x48, 0x83, 0xfe, 0x10, //0x00001479 cmpq $16, %rsi + 0x0f, 0x82, 0x4b, 0x00, 0x00, 0x00, //0x0000147d jb LBB0_224 + 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x00, //0x00001483 movdqu (%r13), %xmm2 + 0xf3, 0x0f, 0x7f, 0x10, //0x00001489 movdqu %xmm2, (%rax) + 0x49, 0x83, 0xc5, 0x10, //0x0000148d addq $16, %r13 + 0x48, 0x83, 0xc0, 0x10, //0x00001491 addq $16, %rax + 0x48, 0x83, 0xc6, 0xf0, //0x00001495 addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x08, //0x00001499 cmpq $8, %rsi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x0000149d jae LBB0_231 + //0x000014a3 LBB0_225 + 0x48, 0x83, 0xfe, 0x04, //0x000014a3 cmpq $4, %rsi + 0x0f, 0x8c, 0x48, 0x00, 0x00, 0x00, //0x000014a7 jl LBB0_226 + //0x000014ad LBB0_232 + 0x41, 0x8b, 0x4d, 0x00, //0x000014ad movl (%r13), %ecx + 0x89, 0x08, //0x000014b1 movl %ecx, (%rax) + 0x49, 0x83, 0xc5, 0x04, //0x000014b3 addq $4, %r13 + 0x48, 0x83, 0xc0, 0x04, //0x000014b7 addq $4, %rax + 0x48, 0x83, 0xc6, 0xfc, //0x000014bb addq $-4, %rsi + 0x48, 0x83, 0xfe, 0x02, //0x000014bf cmpq $2, %rsi + 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x000014c3 jae LBB0_227 + 0xe9, 0x45, 0x00, 0x00, 0x00, //0x000014c9 jmp LBB0_228 + //0x000014ce LBB0_224 + 0x48, 0x83, 0xfe, 0x08, //0x000014ce cmpq $8, %rsi + 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x000014d2 jb LBB0_225 + //0x000014d8 LBB0_231 + 0x49, 0x8b, 0x4d, 0x00, //0x000014d8 movq (%r13), %rcx + 0x48, 0x89, 0x08, //0x000014dc movq %rcx, (%rax) + 0x49, 0x83, 0xc5, 0x08, //0x000014df addq $8, %r13 + 0x48, 0x83, 0xc0, 0x08, //0x000014e3 addq $8, %rax + 0x48, 0x83, 0xc6, 0xf8, //0x000014e7 addq $-8, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x000014eb cmpq $4, %rsi + 0x0f, 0x8d, 0xb8, 0xff, 0xff, 0xff, //0x000014ef jge LBB0_232 + //0x000014f5 LBB0_226 + 0x48, 0x83, 0xfe, 0x02, //0x000014f5 cmpq $2, %rsi + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x000014f9 jb LBB0_228 + //0x000014ff LBB0_227 + 0x41, 0x0f, 0xb7, 0x4d, 0x00, //0x000014ff movzwl (%r13), %ecx + 0x66, 0x89, 0x08, //0x00001504 movw %cx, (%rax) + 0x49, 0x83, 0xc5, 0x02, //0x00001507 addq $2, %r13 + 0x48, 0x83, 0xc0, 0x02, //0x0000150b addq $2, %rax + 0x48, 0x83, 0xc6, 0xfe, //0x0000150f addq $-2, %rsi + //0x00001513 LBB0_228 + 0x4c, 0x89, 0xef, //0x00001513 movq %r13, %rdi + 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x00001516 leaq $-176(%rbp), %r13 + 0x48, 0x85, 0xf6, //0x0000151d testq %rsi, %rsi + 0x4c, 0x8b, 0x65, 0xa8, //0x00001520 movq $-88(%rbp), %r12 + 0x0f, 0x84, 0x91, 0xfc, 0xff, 0xff, //0x00001524 je LBB0_210 + 0x8a, 0x0f, //0x0000152a movb (%rdi), %cl + 0x88, 0x08, //0x0000152c movb %cl, (%rax) + 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x0000152e leaq $-176(%rbp), %r13 + 0xe9, 0x81, 0xfc, 0xff, 0xff, //0x00001535 jmp LBB0_210 + //0x0000153a LBB0_233 + 0x49, 0x8b, 0x01, //0x0000153a movq (%r9), %rax + 0x48, 0x0f, 0xbc, 0xce, //0x0000153d bsfq %rsi, %rcx + 0x4c, 0x29, 0xc1, //0x00001541 subq %r8, %rcx + 0x4c, 0x8d, 0x1c, 0x01, //0x00001544 leaq (%rcx,%rax), %r11 + 0x49, 0x83, 0xc3, 0x01, //0x00001548 addq $1, %r11 + 0x4c, 0x8b, 0x45, 0xc8, //0x0000154c movq $-56(%rbp), %r8 + 0x4d, 0x89, 0x18, //0x00001550 movq %r11, (%r8) + 0x49, 0x8b, 0x01, //0x00001553 movq (%r9), %rax + 0x49, 0x39, 0xc3, //0x00001556 cmpq %rax, %r11 + 0x4c, 0x0f, 0x47, 0xd8, //0x00001559 cmovaq %rax, %r11 + 0x4d, 0x89, 0x18, //0x0000155d movq %r11, (%r8) + 0xe9, 0x19, 0x00, 0x00, 0x00, //0x00001560 jmp LBB0_235 + //0x00001565 LBB0_234 + 0x0f, 0xbc, 0xcb, //0x00001565 bsfl %ebx, %ecx + 0x48, 0x01, 0xc1, //0x00001568 addq %rax, %rcx + 0x4d, 0x8d, 0x1c, 0x0e, //0x0000156b leaq (%r14,%rcx), %r11 + 0x49, 0x83, 0xc3, 0x02, //0x0000156f addq $2, %r11 + 0x4c, 0x8b, 0x45, 0xc8, //0x00001573 movq $-56(%rbp), %r8 + 0x4d, 0x89, 0x18, //0x00001577 movq %r11, (%r8) + 0x4c, 0x8b, 0x4d, 0xc0, //0x0000157a movq $-64(%rbp), %r9 + //0x0000157e LBB0_235 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000157e movabsq $4294977024, %r14 + 0x4d, 0x8b, 0x2c, 0x24, //0x00001588 movq (%r12), %r13 + 0x49, 0x8b, 0x44, 0x24, 0x08, //0x0000158c movq $8(%r12), %rax + 0x49, 0x39, 0xc3, //0x00001591 cmpq %rax, %r11 + 0x0f, 0x82, 0x68, 0xfb, 0xff, 0xff, //0x00001594 jb LBB0_237 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000159a .p2align 4, 0x90 + //0x000015a0 LBB0_241 + 0x49, 0x8d, 0x4b, 0x01, //0x000015a0 leaq $1(%r11), %rcx + 0x48, 0x39, 0xc1, //0x000015a4 cmpq %rax, %rcx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000015a7 jae LBB0_245 + 0x41, 0x8a, 0x54, 0x0d, 0x00, //0x000015ad movb (%r13,%rcx), %dl + 0x80, 0xfa, 0x0d, //0x000015b2 cmpb $13, %dl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000015b5 je LBB0_245 + 0x80, 0xfa, 0x20, //0x000015bb cmpb $32, %dl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000015be je LBB0_245 + 0x80, 0xc2, 0xf7, //0x000015c4 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000015c7 cmpb $1, %dl + 0x0f, 0x87, 0xc5, 0x00, 0x00, 0x00, //0x000015ca ja LBB0_262 + //0x000015d0 .p2align 4, 0x90 + //0x000015d0 LBB0_245 + 0x49, 0x8d, 0x4b, 0x02, //0x000015d0 leaq $2(%r11), %rcx + 0x48, 0x39, 0xc1, //0x000015d4 cmpq %rax, %rcx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000015d7 jae LBB0_249 + 0x41, 0x8a, 0x54, 0x0d, 0x00, //0x000015dd movb (%r13,%rcx), %dl + 0x80, 0xfa, 0x0d, //0x000015e2 cmpb $13, %dl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x000015e5 je LBB0_249 + 0x80, 0xfa, 0x20, //0x000015eb cmpb $32, %dl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x000015ee je LBB0_249 + 0x80, 0xc2, 0xf7, //0x000015f4 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x000015f7 cmpb $1, %dl + 0x0f, 0x87, 0x95, 0x00, 0x00, 0x00, //0x000015fa ja LBB0_262 + //0x00001600 .p2align 4, 0x90 + //0x00001600 LBB0_249 + 0x49, 0x8d, 0x4b, 0x03, //0x00001600 leaq $3(%r11), %rcx + 0x48, 0x39, 0xc1, //0x00001604 cmpq %rax, %rcx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001607 jae LBB0_253 + 0x41, 0x8a, 0x54, 0x0d, 0x00, //0x0000160d movb (%r13,%rcx), %dl + 0x80, 0xfa, 0x0d, //0x00001612 cmpb $13, %dl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00001615 je LBB0_253 + 0x80, 0xfa, 0x20, //0x0000161b cmpb $32, %dl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000161e je LBB0_253 + 0x80, 0xc2, 0xf7, //0x00001624 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00001627 cmpb $1, %dl + 0x0f, 0x87, 0x65, 0x00, 0x00, 0x00, //0x0000162a ja LBB0_262 + //0x00001630 .p2align 4, 0x90 + //0x00001630 LBB0_253 + 0x49, 0x8d, 0x4b, 0x04, //0x00001630 leaq $4(%r11), %rcx + 0x48, 0x39, 0xc8, //0x00001634 cmpq %rcx, %rax + 0x0f, 0x86, 0x1b, 0x31, 0x00, 0x00, //0x00001637 jbe LBB0_871 + 0x48, 0x39, 0xc8, //0x0000163d cmpq %rcx, %rax + 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00001640 je LBB0_259 + 0x4a, 0x8d, 0x14, 0x28, //0x00001646 leaq (%rax,%r13), %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000164a .p2align 4, 0x90 + //0x00001650 LBB0_256 + 0x41, 0x0f, 0xbe, 0x74, 0x0d, 0x00, //0x00001650 movsbl (%r13,%rcx), %esi + 0x83, 0xfe, 0x20, //0x00001656 cmpl $32, %esi + 0x0f, 0x87, 0x2d, 0x00, 0x00, 0x00, //0x00001659 ja LBB0_261 + 0x49, 0x0f, 0xa3, 0xf6, //0x0000165f btq %rsi, %r14 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001663 jae LBB0_261 + 0x48, 0x83, 0xc1, 0x01, //0x00001669 addq $1, %rcx + 0x48, 0x39, 0xc8, //0x0000166d cmpq %rcx, %rax + 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x00001670 jne LBB0_256 + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00001676 jmp LBB0_260 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000167b .p2align 4, 0x90 + //0x00001680 LBB0_259 + 0x4c, 0x01, 0xe9, //0x00001680 addq %r13, %rcx + 0x48, 0x89, 0xca, //0x00001683 movq %rcx, %rdx + //0x00001686 LBB0_260 + 0x4c, 0x29, 0xea, //0x00001686 subq %r13, %rdx + 0x48, 0x89, 0xd1, //0x00001689 movq %rdx, %rcx + //0x0000168c LBB0_261 + 0x48, 0x39, 0xc1, //0x0000168c cmpq %rax, %rcx + 0x0f, 0x83, 0xc6, 0x30, 0x00, 0x00, //0x0000168f jae LBB0_872 + //0x00001695 LBB0_262 + 0x4c, 0x8d, 0x59, 0x01, //0x00001695 leaq $1(%rcx), %r11 + 0x4d, 0x89, 0x18, //0x00001699 movq %r11, (%r8) + 0x41, 0x8a, 0x44, 0x0d, 0x00, //0x0000169c movb (%r13,%rcx), %al + 0x3c, 0x2c, //0x000016a1 cmpb $44, %al + 0x0f, 0x84, 0xa5, 0xec, 0xff, 0xff, //0x000016a3 je LBB0_33 + 0xe9, 0x9f, 0x19, 0x00, 0x00, //0x000016a9 jmp LBB0_263 + //0x000016ae LBB0_67 + 0x4d, 0x01, 0xeb, //0x000016ae addq %r13, %r11 + 0x4c, 0x8b, 0x65, 0xa8, //0x000016b1 movq $-88(%rbp), %r12 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000016b5 movabsq $4294977024, %r14 + 0x4c, 0x8b, 0xbd, 0x40, 0xff, 0xff, 0xff, //0x000016bf movq $-192(%rbp), %r15 + 0x49, 0x83, 0xf8, 0x20, //0x000016c6 cmpq $32, %r8 + 0x0f, 0x82, 0xa4, 0x05, 0x00, 0x00, //0x000016ca jb LBB0_321 + //0x000016d0 LBB0_68 + 0xf3, 0x41, 0x0f, 0x6f, 0x13, //0x000016d0 movdqu (%r11), %xmm2 + 0xf3, 0x41, 0x0f, 0x6f, 0x5b, 0x10, //0x000016d5 movdqu $16(%r11), %xmm3 + 0x66, 0x0f, 0x6f, 0xea, //0x000016db movdqa %xmm2, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x000016df pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x000016e3 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x6f, 0xeb, //0x000016e7 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x000016eb pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x000016ef pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x74, 0xd1, //0x000016f3 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xf2, //0x000016f7 pmovmskb %xmm2, %esi + 0x66, 0x0f, 0x74, 0xd9, //0x000016fb pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x000016ff pmovmskb %xmm3, %edx + 0x48, 0xc1, 0xe1, 0x10, //0x00001703 shlq $16, %rcx + 0x48, 0x09, 0xcf, //0x00001707 orq %rcx, %rdi + 0x48, 0xc1, 0xe2, 0x10, //0x0000170a shlq $16, %rdx + 0x48, 0x09, 0xd6, //0x0000170e orq %rdx, %rsi + 0x0f, 0x85, 0xf3, 0x04, 0x00, 0x00, //0x00001711 jne LBB0_317 + 0x4d, 0x85, 0xc9, //0x00001717 testq %r9, %r9 + 0x0f, 0x85, 0x06, 0x05, 0x00, 0x00, //0x0000171a jne LBB0_319 + 0x45, 0x31, 0xc9, //0x00001720 xorl %r9d, %r9d + 0x48, 0x85, 0xff, //0x00001723 testq %rdi, %rdi + 0x0f, 0x84, 0x40, 0x05, 0x00, 0x00, //0x00001726 je LBB0_320 + //0x0000172c LBB0_71 + 0x48, 0x0f, 0xbc, 0xcf, //0x0000172c bsfq %rdi, %rcx + 0x4d, 0x29, 0xeb, //0x00001730 subq %r13, %r11 + 0x49, 0x01, 0xcb, //0x00001733 addq %rcx, %r11 + 0x49, 0x83, 0xc3, 0x01, //0x00001736 addq $1, %r11 + 0x4c, 0x8b, 0x45, 0xc8, //0x0000173a movq $-56(%rbp), %r8 + 0x4c, 0x8b, 0x4d, 0xc0, //0x0000173e movq $-64(%rbp), %r9 + 0x48, 0x8b, 0x4d, 0x98, //0x00001742 movq $-104(%rbp), %rcx + 0x4d, 0x85, 0xdb, //0x00001746 testq %r11, %r11 + 0x0f, 0x89, 0x22, 0xef, 0xff, 0xff, //0x00001749 jns LBB0_78 + 0xe9, 0xa1, 0x3c, 0x00, 0x00, //0x0000174f jmp LBB0_976 + //0x00001754 LBB0_264 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00001754 movq $-2, %rdx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x0000175b movl $2, %esi + 0x48, 0x01, 0xf0, //0x00001760 addq %rsi, %rax + 0x49, 0x01, 0xd6, //0x00001763 addq %rdx, %r14 + 0x0f, 0x8e, 0x12, 0xfe, 0xff, 0xff, //0x00001766 jle LBB0_235 + //0x0000176c LBB0_265 + 0x0f, 0xb6, 0x10, //0x0000176c movzbl (%rax), %edx + 0x80, 0xfa, 0x5c, //0x0000176f cmpb $92, %dl + 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x00001772 je LBB0_264 + 0x80, 0xfa, 0x22, //0x00001778 cmpb $34, %dl + 0x0f, 0x84, 0x52, 0x04, 0x00, 0x00, //0x0000177b je LBB0_313 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001781 movq $-1, %rdx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00001788 movl $1, %esi + 0x48, 0x01, 0xf0, //0x0000178d addq %rsi, %rax + 0x49, 0x01, 0xd6, //0x00001790 addq %rdx, %r14 + 0x0f, 0x8f, 0xd3, 0xff, 0xff, 0xff, //0x00001793 jg LBB0_265 + 0xe9, 0xe0, 0xfd, 0xff, 0xff, //0x00001799 jmp LBB0_235 + //0x0000179e LBB0_268 + 0x48, 0xc7, 0x45, 0x98, 0xff, 0xff, 0xff, 0xff, //0x0000179e movq $-1, $-104(%rbp) + 0x45, 0x31, 0xc9, //0x000017a6 xorl %r9d, %r9d + 0x49, 0x83, 0xf8, 0x20, //0x000017a9 cmpq $32, %r8 + 0x0f, 0x83, 0x1d, 0xff, 0xff, 0xff, //0x000017ad jae LBB0_68 + 0xe9, 0xbc, 0x04, 0x00, 0x00, //0x000017b3 jmp LBB0_321 + //0x000017b8 LBB0_269 + 0x48, 0xc7, 0x85, 0x50, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, //0x000017b8 movq $0, $-176(%rbp) + 0x49, 0x8d, 0x43, 0xff, //0x000017c3 leaq $-1(%r11), %rax + 0x4f, 0x8d, 0x04, 0x2b, //0x000017c7 leaq (%r11,%r13), %r8 + 0x49, 0x83, 0xc0, 0xff, //0x000017cb addq $-1, %r8 + 0x48, 0x8b, 0x4d, 0xb8, //0x000017cf movq $-72(%rbp), %rcx + 0x4d, 0x8d, 0x14, 0x0f, //0x000017d3 leaq (%r15,%rcx), %r10 + 0x48, 0x39, 0x85, 0x38, 0xff, 0xff, 0xff, //0x000017d7 cmpq %rax, $-200(%rbp) + 0x48, 0x8b, 0x7d, 0xd0, //0x000017de movq $-48(%rbp), %rdi + 0x0f, 0x8d, 0xd4, 0x03, 0x00, 0x00, //0x000017e2 jge LBB0_311 + 0x48, 0x85, 0xc9, //0x000017e8 testq %rcx, %rcx + 0x0f, 0x8e, 0xcb, 0x03, 0x00, 0x00, //0x000017eb jle LBB0_311 + //0x000017f1 LBB0_271 + 0x8a, 0x07, //0x000017f1 movb (%rdi), %al + 0x3c, 0x5c, //0x000017f3 cmpb $92, %al + 0x0f, 0x85, 0x5c, 0x00, 0x00, 0x00, //0x000017f5 jne LBB0_276 + 0x4c, 0x89, 0xc6, //0x000017fb movq %r8, %rsi + 0x48, 0x29, 0xfe, //0x000017fe subq %rdi, %rsi + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00001801 movq $-1, %rax + 0x48, 0x85, 0xf6, //0x00001808 testq %rsi, %rsi + 0x0f, 0x8e, 0x5d, 0x3d, 0x00, 0x00, //0x0000180b jle LBB0_995 + 0x0f, 0xb6, 0x4f, 0x01, //0x00001811 movzbl $1(%rdi), %ecx + 0x48, 0x8d, 0x15, 0x74, 0x46, 0x00, 0x00, //0x00001815 leaq $18036(%rip), %rdx /* __UnquoteTab+0(%rip) */ + 0x8a, 0x0c, 0x11, //0x0000181c movb (%rcx,%rdx), %cl + 0x80, 0xf9, 0xff, //0x0000181f cmpb $-1, %cl + 0x0f, 0x84, 0x45, 0x00, 0x00, 0x00, //0x00001822 je LBB0_278 + 0x84, 0xc9, //0x00001828 testb %cl, %cl + 0x0f, 0x84, 0x2a, 0x3d, 0x00, 0x00, //0x0000182a je LBB0_993 + 0x88, 0x8d, 0x50, 0xff, 0xff, 0xff, //0x00001830 movb %cl, $-176(%rbp) + 0x48, 0x83, 0xc7, 0x02, //0x00001836 addq $2, %rdi + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x0000183a movl $1, %esi + 0x48, 0x8d, 0x04, 0x2e, //0x0000183f leaq (%rsi,%rbp), %rax + 0x48, 0x05, 0x50, 0xff, 0xff, 0xff, //0x00001843 addq $-176, %rax + 0x4d, 0x39, 0xd7, //0x00001849 cmpq %r10, %r15 + 0x0f, 0x82, 0x4f, 0x01, 0x00, 0x00, //0x0000184c jb LBB0_288 + 0xe9, 0x43, 0x03, 0x00, 0x00, //0x00001852 jmp LBB0_307 + //0x00001857 LBB0_276 + 0x41, 0x3a, 0x07, //0x00001857 cmpb (%r15), %al + 0x0f, 0x85, 0x9a, 0x03, 0x00, 0x00, //0x0000185a jne LBB0_315 + 0x48, 0x83, 0xc7, 0x01, //0x00001860 addq $1, %rdi + 0x49, 0x83, 0xc7, 0x01, //0x00001864 addq $1, %r15 + 0xe9, 0x3d, 0x03, 0x00, 0x00, //0x00001868 jmp LBB0_309 + //0x0000186d LBB0_278 + 0x48, 0x83, 0xfe, 0x04, //0x0000186d cmpq $4, %rsi + 0x0f, 0x8c, 0xf3, 0x3c, 0x00, 0x00, //0x00001871 jl LBB0_994 + 0x4c, 0x8d, 0x4f, 0x02, //0x00001877 leaq $2(%rdi), %r9 + 0x48, 0x89, 0x7d, 0xd0, //0x0000187b movq %rdi, $-48(%rbp) + 0x8b, 0x7f, 0x02, //0x0000187f movl $2(%rdi), %edi + 0x89, 0xf9, //0x00001882 movl %edi, %ecx + 0xf7, 0xd1, //0x00001884 notl %ecx + 0x8d, 0x9f, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001886 leal $-808464432(%rdi), %ebx + 0x81, 0xe1, 0x80, 0x80, 0x80, 0x80, //0x0000188c andl $-2139062144, %ecx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00001892 movq $-2, %rax + 0x85, 0xd9, //0x00001899 testl %ebx, %ecx + 0x0f, 0x85, 0x97, 0x3c, 0x00, 0x00, //0x0000189b jne LBB0_1003 + 0x8d, 0x9f, 0x19, 0x19, 0x19, 0x19, //0x000018a1 leal $421075225(%rdi), %ebx + 0x09, 0xfb, //0x000018a7 orl %edi, %ebx + 0xf7, 0xc3, 0x80, 0x80, 0x80, 0x80, //0x000018a9 testl $-2139062144, %ebx + 0x0f, 0x85, 0x83, 0x3c, 0x00, 0x00, //0x000018af jne LBB0_1003 + 0x89, 0xfb, //0x000018b5 movl %edi, %ebx + 0x81, 0xe3, 0x7f, 0x7f, 0x7f, 0x7f, //0x000018b7 andl $2139062143, %ebx + 0xba, 0xc0, 0xc0, 0xc0, 0xc0, //0x000018bd movl $-1061109568, %edx + 0x29, 0xda, //0x000018c2 subl %ebx, %edx + 0x44, 0x8d, 0xb3, 0x46, 0x46, 0x46, 0x46, //0x000018c4 leal $1179010630(%rbx), %r14d + 0x21, 0xca, //0x000018cb andl %ecx, %edx + 0x44, 0x85, 0xf2, //0x000018cd testl %r14d, %edx + 0x0f, 0x85, 0x62, 0x3c, 0x00, 0x00, //0x000018d0 jne LBB0_1003 + 0xba, 0xe0, 0xe0, 0xe0, 0xe0, //0x000018d6 movl $-522133280, %edx + 0x29, 0xda, //0x000018db subl %ebx, %edx + 0x81, 0xc3, 0x39, 0x39, 0x39, 0x39, //0x000018dd addl $960051513, %ebx + 0x21, 0xd1, //0x000018e3 andl %edx, %ecx + 0x85, 0xd9, //0x000018e5 testl %ebx, %ecx + 0x0f, 0x85, 0x84, 0x3c, 0x00, 0x00, //0x000018e7 jne LBB0_996 + 0x0f, 0xcf, //0x000018ed bswapl %edi + 0x89, 0xf8, //0x000018ef movl %edi, %eax + 0xc1, 0xe8, 0x04, //0x000018f1 shrl $4, %eax + 0xf7, 0xd0, //0x000018f4 notl %eax + 0x25, 0x01, 0x01, 0x01, 0x01, //0x000018f6 andl $16843009, %eax + 0x8d, 0x04, 0xc0, //0x000018fb leal (%rax,%rax,8), %eax + 0x81, 0xe7, 0x0f, 0x0f, 0x0f, 0x0f, //0x000018fe andl $252645135, %edi + 0x01, 0xc7, //0x00001904 addl %eax, %edi + 0x89, 0xf9, //0x00001906 movl %edi, %ecx + 0xc1, 0xe9, 0x04, //0x00001908 shrl $4, %ecx + 0x09, 0xf9, //0x0000190b orl %edi, %ecx + 0x89, 0xc8, //0x0000190d movl %ecx, %eax + 0xc1, 0xe8, 0x08, //0x0000190f shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x00001912 andl $65280, %eax + 0x0f, 0xb6, 0xf9, //0x00001917 movzbl %cl, %edi + 0x09, 0xc7, //0x0000191a orl %eax, %edi + 0x48, 0x8b, 0x55, 0xd0, //0x0000191c movq $-48(%rbp), %rdx + 0x4c, 0x8d, 0x4a, 0x06, //0x00001920 leaq $6(%rdx), %r9 + 0x83, 0xff, 0x7f, //0x00001924 cmpl $127, %edi + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001927 movabsq $4294977024, %r14 + 0x0f, 0x86, 0xc8, 0x00, 0x00, 0x00, //0x00001931 jbe LBB0_295 + 0x81, 0xff, 0xff, 0x07, 0x00, 0x00, //0x00001937 cmpl $2047, %edi + 0x0f, 0x86, 0xcc, 0x00, 0x00, 0x00, //0x0000193d jbe LBB0_296 + 0x89, 0xca, //0x00001943 movl %ecx, %edx + 0x81, 0xe2, 0x00, 0x00, 0xf8, 0x00, //0x00001945 andl $16252928, %edx + 0x81, 0xfa, 0x00, 0x00, 0xd8, 0x00, //0x0000194b cmpl $14155776, %edx + 0x0f, 0x84, 0xde, 0x00, 0x00, 0x00, //0x00001951 je LBB0_297 + 0xc1, 0xe8, 0x0c, //0x00001957 shrl $12, %eax + 0x0c, 0xe0, //0x0000195a orb $-32, %al + 0x88, 0x85, 0x50, 0xff, 0xff, 0xff, //0x0000195c movb %al, $-176(%rbp) + 0xc1, 0xef, 0x06, //0x00001962 shrl $6, %edi + 0x40, 0x80, 0xe7, 0x3f, //0x00001965 andb $63, %dil + 0x40, 0x80, 0xcf, 0x80, //0x00001969 orb $-128, %dil + 0x40, 0x88, 0xbd, 0x51, 0xff, 0xff, 0xff, //0x0000196d movb %dil, $-175(%rbp) + 0x80, 0xe1, 0x3f, //0x00001974 andb $63, %cl + 0x80, 0xc9, 0x80, //0x00001977 orb $-128, %cl + 0x88, 0x8d, 0x52, 0xff, 0xff, 0xff, //0x0000197a movb %cl, $-174(%rbp) + 0xbe, 0x03, 0x00, 0x00, 0x00, //0x00001980 movl $3, %esi + 0x89, 0xc1, //0x00001985 movl %eax, %ecx + //0x00001987 LBB0_287 + 0x4c, 0x89, 0xcf, //0x00001987 movq %r9, %rdi + 0x4c, 0x8b, 0x4d, 0xc0, //0x0000198a movq $-64(%rbp), %r9 + 0x48, 0x8d, 0x04, 0x2e, //0x0000198e leaq (%rsi,%rbp), %rax + 0x48, 0x05, 0x50, 0xff, 0xff, 0xff, //0x00001992 addq $-176, %rax + 0x4d, 0x39, 0xd7, //0x00001998 cmpq %r10, %r15 + 0x0f, 0x83, 0xf9, 0x01, 0x00, 0x00, //0x0000199b jae LBB0_307 + //0x000019a1 LBB0_288 + 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x000019a1 leaq $-176(%rbp), %rdx + 0x48, 0x39, 0xd0, //0x000019a8 cmpq %rdx, %rax + 0x0f, 0x86, 0xe9, 0x01, 0x00, 0x00, //0x000019ab jbe LBB0_307 + 0x41, 0x38, 0x0f, //0x000019b1 cmpb %cl, (%r15) + 0x0f, 0x85, 0xe0, 0x01, 0x00, 0x00, //0x000019b4 jne LBB0_307 + 0x48, 0x89, 0xfb, //0x000019ba movq %rdi, %rbx + 0x49, 0x83, 0xc7, 0x01, //0x000019bd addq $1, %r15 + 0x48, 0x8d, 0xb5, 0x51, 0xff, 0xff, 0xff, //0x000019c1 leaq $-175(%rbp), %rsi + 0x4c, 0x89, 0xff, //0x000019c8 movq %r15, %rdi + //0x000019cb LBB0_291 + 0x49, 0x89, 0xff, //0x000019cb movq %rdi, %r15 + 0x48, 0x89, 0xf1, //0x000019ce movq %rsi, %rcx + 0x4c, 0x39, 0xd7, //0x000019d1 cmpq %r10, %rdi + 0x0f, 0x83, 0x1d, 0x00, 0x00, 0x00, //0x000019d4 jae LBB0_294 + 0x48, 0x39, 0xc1, //0x000019da cmpq %rax, %rcx + 0x0f, 0x83, 0x14, 0x00, 0x00, 0x00, //0x000019dd jae LBB0_294 + 0x41, 0x0f, 0xb6, 0x17, //0x000019e3 movzbl (%r15), %edx + 0x49, 0x8d, 0x7f, 0x01, //0x000019e7 leaq $1(%r15), %rdi + 0x48, 0x8d, 0x71, 0x01, //0x000019eb leaq $1(%rcx), %rsi + 0x3a, 0x11, //0x000019ef cmpb (%rcx), %dl + 0x0f, 0x84, 0xd4, 0xff, 0xff, 0xff, //0x000019f1 je LBB0_291 + //0x000019f7 LBB0_294 + 0x48, 0x89, 0xdf, //0x000019f7 movq %rbx, %rdi + 0xe9, 0xa2, 0x01, 0x00, 0x00, //0x000019fa jmp LBB0_308 + //0x000019ff LBB0_295 + 0x88, 0x8d, 0x50, 0xff, 0xff, 0xff, //0x000019ff movb %cl, $-176(%rbp) + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00001a05 movl $1, %esi + 0xe9, 0x78, 0xff, 0xff, 0xff, //0x00001a0a jmp LBB0_287 + //0x00001a0f LBB0_296 + 0xc1, 0xef, 0x06, //0x00001a0f shrl $6, %edi + 0x40, 0x80, 0xcf, 0xc0, //0x00001a12 orb $-64, %dil + 0x40, 0x88, 0xbd, 0x50, 0xff, 0xff, 0xff, //0x00001a16 movb %dil, $-176(%rbp) + 0x80, 0xe1, 0x3f, //0x00001a1d andb $63, %cl + 0x80, 0xc9, 0x80, //0x00001a20 orb $-128, %cl + 0x88, 0x8d, 0x51, 0xff, 0xff, 0xff, //0x00001a23 movb %cl, $-175(%rbp) + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00001a29 movl $2, %esi + 0x89, 0xf9, //0x00001a2e movl %edi, %ecx + 0xe9, 0x52, 0xff, 0xff, 0xff, //0x00001a30 jmp LBB0_287 + //0x00001a35 LBB0_297 + 0x48, 0xc7, 0xc0, 0xfc, 0xff, 0xff, 0xff, //0x00001a35 movq $-4, %rax + 0x48, 0x83, 0xfe, 0x06, //0x00001a3c cmpq $6, %rsi + 0x0f, 0x8c, 0x2b, 0x3b, 0x00, 0x00, //0x00001a40 jl LBB0_996 + 0x81, 0xff, 0xff, 0xdb, 0x00, 0x00, //0x00001a46 cmpl $56319, %edi + 0x0f, 0x87, 0x1f, 0x3b, 0x00, 0x00, //0x00001a4c ja LBB0_996 + 0x41, 0x80, 0x39, 0x5c, //0x00001a52 cmpb $92, (%r9) + 0x0f, 0x85, 0x15, 0x3b, 0x00, 0x00, //0x00001a56 jne LBB0_996 + 0x48, 0x8b, 0x4d, 0xd0, //0x00001a5c movq $-48(%rbp), %rcx + 0x80, 0x79, 0x07, 0x75, //0x00001a60 cmpb $117, $7(%rcx) + 0x0f, 0x85, 0x07, 0x3b, 0x00, 0x00, //0x00001a64 jne LBB0_996 + 0x48, 0x8b, 0x4d, 0xd0, //0x00001a6a movq $-48(%rbp), %rcx + 0x4c, 0x8d, 0x49, 0x08, //0x00001a6e leaq $8(%rcx), %r9 + 0x8b, 0x49, 0x08, //0x00001a72 movl $8(%rcx), %ecx + 0x89, 0xce, //0x00001a75 movl %ecx, %esi + 0xf7, 0xd6, //0x00001a77 notl %esi + 0x8d, 0x91, 0xd0, 0xcf, 0xcf, 0xcf, //0x00001a79 leal $-808464432(%rcx), %edx + 0x81, 0xe6, 0x80, 0x80, 0x80, 0x80, //0x00001a7f andl $-2139062144, %esi + 0x85, 0xd6, //0x00001a85 testl %edx, %esi + 0x0f, 0x85, 0xab, 0x3a, 0x00, 0x00, //0x00001a87 jne LBB0_1003 + 0x8d, 0x91, 0x19, 0x19, 0x19, 0x19, //0x00001a8d leal $421075225(%rcx), %edx + 0x09, 0xca, //0x00001a93 orl %ecx, %edx + 0xf7, 0xc2, 0x80, 0x80, 0x80, 0x80, //0x00001a95 testl $-2139062144, %edx + 0x0f, 0x85, 0x97, 0x3a, 0x00, 0x00, //0x00001a9b jne LBB0_1003 + 0x89, 0xcb, //0x00001aa1 movl %ecx, %ebx + 0x81, 0xe3, 0x7f, 0x7f, 0x7f, 0x7f, //0x00001aa3 andl $2139062143, %ebx + 0xba, 0xc0, 0xc0, 0xc0, 0xc0, //0x00001aa9 movl $-1061109568, %edx + 0x29, 0xda, //0x00001aae subl %ebx, %edx + 0x44, 0x8d, 0xb3, 0x46, 0x46, 0x46, 0x46, //0x00001ab0 leal $1179010630(%rbx), %r14d + 0x21, 0xf2, //0x00001ab7 andl %esi, %edx + 0x44, 0x85, 0xf2, //0x00001ab9 testl %r14d, %edx + 0x0f, 0x85, 0x76, 0x3a, 0x00, 0x00, //0x00001abc jne LBB0_1003 + 0xba, 0xe0, 0xe0, 0xe0, 0xe0, //0x00001ac2 movl $-522133280, %edx + 0x29, 0xda, //0x00001ac7 subl %ebx, %edx + 0x81, 0xc3, 0x39, 0x39, 0x39, 0x39, //0x00001ac9 addl $960051513, %ebx + 0x21, 0xd6, //0x00001acf andl %edx, %esi + 0x85, 0xde, //0x00001ad1 testl %ebx, %esi + 0x0f, 0x85, 0x5f, 0x3a, 0x00, 0x00, //0x00001ad3 jne LBB0_1003 + 0x0f, 0xc9, //0x00001ad9 bswapl %ecx + 0x89, 0xca, //0x00001adb movl %ecx, %edx + 0xc1, 0xea, 0x04, //0x00001add shrl $4, %edx + 0xf7, 0xd2, //0x00001ae0 notl %edx + 0x81, 0xe2, 0x01, 0x01, 0x01, 0x01, //0x00001ae2 andl $16843009, %edx + 0x8d, 0x14, 0xd2, //0x00001ae8 leal (%rdx,%rdx,8), %edx + 0x81, 0xe1, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001aeb andl $252645135, %ecx + 0x01, 0xd1, //0x00001af1 addl %edx, %ecx + 0x89, 0xce, //0x00001af3 movl %ecx, %esi + 0xc1, 0xee, 0x04, //0x00001af5 shrl $4, %esi + 0x09, 0xce, //0x00001af8 orl %ecx, %esi + 0x89, 0xf1, //0x00001afa movl %esi, %ecx + 0x81, 0xe1, 0x00, 0x00, 0xfc, 0x00, //0x00001afc andl $16515072, %ecx + 0x81, 0xf9, 0x00, 0x00, 0xdc, 0x00, //0x00001b02 cmpl $14417920, %ecx + 0x0f, 0x85, 0x63, 0x3a, 0x00, 0x00, //0x00001b08 jne LBB0_996 + 0x89, 0xf0, //0x00001b0e movl %esi, %eax + 0xc1, 0xe8, 0x08, //0x00001b10 shrl $8, %eax + 0x25, 0x00, 0xff, 0x00, 0x00, //0x00001b13 andl $65280, %eax + 0x40, 0x0f, 0xb6, 0xce, //0x00001b18 movzbl %sil, %ecx + 0x09, 0xc1, //0x00001b1c orl %eax, %ecx + 0xc1, 0xe7, 0x0a, //0x00001b1e shll $10, %edi + 0x8d, 0x04, 0x39, //0x00001b21 leal (%rcx,%rdi), %eax + 0x8d, 0x14, 0x0f, //0x00001b24 leal (%rdi,%rcx), %edx + 0x81, 0xc2, 0x00, 0x24, 0xa0, 0xfc, //0x00001b27 addl $-56613888, %edx + 0x89, 0xd1, //0x00001b2d movl %edx, %ecx + 0xc1, 0xe9, 0x12, //0x00001b2f shrl $18, %ecx + 0x80, 0xc9, 0xf0, //0x00001b32 orb $-16, %cl + 0x88, 0x8d, 0x50, 0xff, 0xff, 0xff, //0x00001b35 movb %cl, $-176(%rbp) + 0x89, 0xd6, //0x00001b3b movl %edx, %esi + 0xc1, 0xee, 0x0c, //0x00001b3d shrl $12, %esi + 0x40, 0x80, 0xe6, 0x3f, //0x00001b40 andb $63, %sil + 0x40, 0x80, 0xce, 0x80, //0x00001b44 orb $-128, %sil + 0x40, 0x88, 0xb5, 0x51, 0xff, 0xff, 0xff, //0x00001b48 movb %sil, $-175(%rbp) + 0xc1, 0xea, 0x06, //0x00001b4f shrl $6, %edx + 0x80, 0xe2, 0x3f, //0x00001b52 andb $63, %dl + 0x80, 0xca, 0x80, //0x00001b55 orb $-128, %dl + 0x88, 0x95, 0x52, 0xff, 0xff, 0xff, //0x00001b58 movb %dl, $-174(%rbp) + 0x24, 0x3f, //0x00001b5e andb $63, %al + 0x0c, 0x80, //0x00001b60 orb $-128, %al + 0x88, 0x85, 0x53, 0xff, 0xff, 0xff, //0x00001b62 movb %al, $-173(%rbp) + 0x48, 0x8b, 0x7d, 0xd0, //0x00001b68 movq $-48(%rbp), %rdi + 0x48, 0x83, 0xc7, 0x0c, //0x00001b6c addq $12, %rdi + 0xbe, 0x04, 0x00, 0x00, 0x00, //0x00001b70 movl $4, %esi + 0x4c, 0x8b, 0x4d, 0xc0, //0x00001b75 movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x65, 0xa8, //0x00001b79 movq $-88(%rbp), %r12 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001b7d movabsq $4294977024, %r14 + 0x48, 0x8d, 0x04, 0x2e, //0x00001b87 leaq (%rsi,%rbp), %rax + 0x48, 0x05, 0x50, 0xff, 0xff, 0xff, //0x00001b8b addq $-176, %rax + 0x4d, 0x39, 0xd7, //0x00001b91 cmpq %r10, %r15 + 0x0f, 0x82, 0x07, 0xfe, 0xff, 0xff, //0x00001b94 jb LBB0_288 + //0x00001b9a LBB0_307 + 0x48, 0x8d, 0x8d, 0x50, 0xff, 0xff, 0xff, //0x00001b9a leaq $-176(%rbp), %rcx + //0x00001ba1 LBB0_308 + 0x48, 0x39, 0xc1, //0x00001ba1 cmpq %rax, %rcx + 0x0f, 0x85, 0x50, 0x00, 0x00, 0x00, //0x00001ba4 jne LBB0_315 + //0x00001baa LBB0_309 + 0x4c, 0x39, 0xc7, //0x00001baa cmpq %r8, %rdi + 0x0f, 0x83, 0x09, 0x00, 0x00, 0x00, //0x00001bad jae LBB0_311 + 0x4d, 0x39, 0xd7, //0x00001bb3 cmpq %r10, %r15 + 0x0f, 0x82, 0x35, 0xfc, 0xff, 0xff, //0x00001bb6 jb LBB0_271 + //0x00001bbc LBB0_311 + 0x4c, 0x31, 0xc7, //0x00001bbc xorq %r8, %rdi + 0x4d, 0x31, 0xd7, //0x00001bbf xorq %r10, %r15 + 0x31, 0xc9, //0x00001bc2 xorl %ecx, %ecx + 0x49, 0x09, 0xff, //0x00001bc4 orq %rdi, %r15 + 0x0f, 0x94, 0xc1, //0x00001bc7 sete %cl + //0x00001bca LBB0_312 + 0x4c, 0x8b, 0x45, 0xc8, //0x00001bca movq $-56(%rbp), %r8 + 0xe9, 0x22, 0xeb, 0xff, 0xff, //0x00001bce jmp LBB0_86 + //0x00001bd3 LBB0_313 + 0x4c, 0x29, 0xe8, //0x00001bd3 subq %r13, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00001bd6 addq $1, %rax + 0x49, 0x89, 0x00, //0x00001bda movq %rax, (%r8) + 0x49, 0x89, 0xc3, //0x00001bdd movq %rax, %r11 + 0xe9, 0x99, 0xf9, 0xff, 0xff, //0x00001be0 jmp LBB0_235 + //0x00001be5 LBB0_314 + 0x4d, 0x01, 0xeb, //0x00001be5 addq %r13, %r11 + 0x48, 0x85, 0xc9, //0x00001be8 testq %rcx, %rcx + 0x4c, 0x8b, 0x45, 0xc8, //0x00001beb movq $-56(%rbp), %r8 + 0x0f, 0x85, 0xe3, 0xee, 0xff, 0xff, //0x00001bef jne LBB0_155 + 0xe9, 0x27, 0xef, 0xff, 0xff, //0x00001bf5 jmp LBB0_162 + //0x00001bfa LBB0_315 + 0x31, 0xc9, //0x00001bfa xorl %ecx, %ecx + 0xe9, 0xc9, 0xff, 0xff, 0xff, //0x00001bfc jmp LBB0_312 + //0x00001c01 LBB0_316 + 0x4b, 0x8d, 0x04, 0x2b, //0x00001c01 leaq (%r11,%r13), %rax + 0xe9, 0xb3, 0xf0, 0xff, 0xff, //0x00001c05 jmp LBB0_178 + //0x00001c0a LBB0_317 + 0x48, 0x83, 0x7d, 0x98, 0xff, //0x00001c0a cmpq $-1, $-104(%rbp) + 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x00001c0f jne LBB0_319 + 0x4c, 0x89, 0xd9, //0x00001c15 movq %r11, %rcx + 0x4c, 0x29, 0xe9, //0x00001c18 subq %r13, %rcx + 0x48, 0x0f, 0xbc, 0xd6, //0x00001c1b bsfq %rsi, %rdx + 0x48, 0x01, 0xca, //0x00001c1f addq %rcx, %rdx + 0x48, 0x89, 0x55, 0x98, //0x00001c22 movq %rdx, $-104(%rbp) + //0x00001c26 LBB0_319 + 0x44, 0x89, 0xc9, //0x00001c26 movl %r9d, %ecx + 0xf7, 0xd1, //0x00001c29 notl %ecx + 0x21, 0xf1, //0x00001c2b andl %esi, %ecx + 0x41, 0x8d, 0x14, 0x49, //0x00001c2d leal (%r9,%rcx,2), %edx + 0x8d, 0x1c, 0x09, //0x00001c31 leal (%rcx,%rcx), %ebx + 0xf7, 0xd3, //0x00001c34 notl %ebx + 0x21, 0xf3, //0x00001c36 andl %esi, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001c38 andl $-1431655766, %ebx + 0x45, 0x31, 0xc9, //0x00001c3e xorl %r9d, %r9d + 0x01, 0xcb, //0x00001c41 addl %ecx, %ebx + 0x41, 0x0f, 0x92, 0xc1, //0x00001c43 setb %r9b + 0x01, 0xdb, //0x00001c47 addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00001c49 xorl $1431655765, %ebx + 0x21, 0xd3, //0x00001c4f andl %edx, %ebx + 0xf7, 0xd3, //0x00001c51 notl %ebx + 0x21, 0xdf, //0x00001c53 andl %ebx, %edi + 0x4c, 0x8b, 0x65, 0xa8, //0x00001c55 movq $-88(%rbp), %r12 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001c59 movabsq $4294977024, %r14 + 0x48, 0x85, 0xff, //0x00001c63 testq %rdi, %rdi + 0x0f, 0x85, 0xc0, 0xfa, 0xff, 0xff, //0x00001c66 jne LBB0_71 + //0x00001c6c LBB0_320 + 0x49, 0x83, 0xc3, 0x20, //0x00001c6c addq $32, %r11 + 0x49, 0x83, 0xc0, 0xe0, //0x00001c70 addq $-32, %r8 + //0x00001c74 LBB0_321 + 0x4d, 0x85, 0xc9, //0x00001c74 testq %r9, %r9 + 0x0f, 0x85, 0xdb, 0x00, 0x00, 0x00, //0x00001c77 jne LBB0_335 + 0x4c, 0x89, 0xef, //0x00001c7d movq %r13, %rdi + 0x48, 0xf7, 0xd7, //0x00001c80 notq %rdi + 0x4c, 0x8b, 0x4d, 0x98, //0x00001c83 movq $-104(%rbp), %r9 + 0x4d, 0x85, 0xc0, //0x00001c87 testq %r8, %r8 + 0x0f, 0x84, 0x92, 0x00, 0x00, 0x00, //0x00001c8a je LBB0_333 + //0x00001c90 LBB0_323 + 0x48, 0x83, 0xc7, 0x01, //0x00001c90 addq $1, %rdi + //0x00001c94 LBB0_324 + 0x31, 0xf6, //0x00001c94 xorl %esi, %esi + //0x00001c96 LBB0_325 + 0x41, 0x0f, 0xb6, 0x1c, 0x33, //0x00001c96 movzbl (%r11,%rsi), %ebx + 0x80, 0xfb, 0x22, //0x00001c9b cmpb $34, %bl + 0x0f, 0x84, 0x77, 0x00, 0x00, 0x00, //0x00001c9e je LBB0_332 + 0x80, 0xfb, 0x5c, //0x00001ca4 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00001ca7 je LBB0_330 + 0x48, 0x83, 0xc6, 0x01, //0x00001cad addq $1, %rsi + 0x49, 0x39, 0xf0, //0x00001cb1 cmpq %rsi, %r8 + 0x0f, 0x85, 0xdc, 0xff, 0xff, 0xff, //0x00001cb4 jne LBB0_325 + 0xe9, 0x80, 0x00, 0x00, 0x00, //0x00001cba jmp LBB0_328 + //0x00001cbf LBB0_330 + 0x49, 0x8d, 0x48, 0xff, //0x00001cbf leaq $-1(%r8), %rcx + 0x48, 0x39, 0xf1, //0x00001cc3 cmpq %rsi, %rcx + 0x0f, 0x84, 0x25, 0x37, 0x00, 0x00, //0x00001cc6 je LBB0_975 + 0x4a, 0x8d, 0x0c, 0x1f, //0x00001ccc leaq (%rdi,%r11), %rcx + 0x48, 0x01, 0xf1, //0x00001cd0 addq %rsi, %rcx + 0x49, 0x83, 0xf9, 0xff, //0x00001cd3 cmpq $-1, %r9 + 0x48, 0x8b, 0x55, 0x98, //0x00001cd7 movq $-104(%rbp), %rdx + 0x48, 0x0f, 0x44, 0xd1, //0x00001cdb cmoveq %rcx, %rdx + 0x48, 0x89, 0x55, 0x98, //0x00001cdf movq %rdx, $-104(%rbp) + 0x4c, 0x0f, 0x44, 0xc9, //0x00001ce3 cmoveq %rcx, %r9 + 0x49, 0x01, 0xf3, //0x00001ce7 addq %rsi, %r11 + 0x49, 0x83, 0xc3, 0x02, //0x00001cea addq $2, %r11 + 0x4c, 0x89, 0xc1, //0x00001cee movq %r8, %rcx + 0x48, 0x29, 0xf1, //0x00001cf1 subq %rsi, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x00001cf4 addq $-2, %rcx + 0x49, 0x83, 0xc0, 0xfe, //0x00001cf8 addq $-2, %r8 + 0x49, 0x39, 0xf0, //0x00001cfc cmpq %rsi, %r8 + 0x49, 0x89, 0xc8, //0x00001cff movq %rcx, %r8 + 0x4c, 0x8b, 0x65, 0xa8, //0x00001d02 movq $-88(%rbp), %r12 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001d06 movabsq $4294977024, %r14 + 0x0f, 0x85, 0x7e, 0xff, 0xff, 0xff, //0x00001d10 jne LBB0_324 + 0xe9, 0xd6, 0x36, 0x00, 0x00, //0x00001d16 jmp LBB0_975 + //0x00001d1b LBB0_332 + 0x49, 0x01, 0xf3, //0x00001d1b addq %rsi, %r11 + 0x49, 0x83, 0xc3, 0x01, //0x00001d1e addq $1, %r11 + //0x00001d22 LBB0_333 + 0x4c, 0x8b, 0x4d, 0xc0, //0x00001d22 movq $-64(%rbp), %r9 + 0x48, 0x8b, 0x4d, 0x98, //0x00001d26 movq $-104(%rbp), %rcx + //0x00001d2a LBB0_334 + 0x4d, 0x29, 0xeb, //0x00001d2a subq %r13, %r11 + 0x4c, 0x8b, 0x45, 0xc8, //0x00001d2d movq $-56(%rbp), %r8 + 0x4d, 0x85, 0xdb, //0x00001d31 testq %r11, %r11 + 0x0f, 0x89, 0x37, 0xe9, 0xff, 0xff, //0x00001d34 jns LBB0_78 + 0xe9, 0xb6, 0x36, 0x00, 0x00, //0x00001d3a jmp LBB0_976 + //0x00001d3f LBB0_328 + 0x80, 0xfb, 0x22, //0x00001d3f cmpb $34, %bl + 0x4c, 0x8b, 0x4d, 0xc0, //0x00001d42 movq $-64(%rbp), %r9 + 0x48, 0x8b, 0x4d, 0x98, //0x00001d46 movq $-104(%rbp), %rcx + 0x0f, 0x85, 0xa1, 0x36, 0x00, 0x00, //0x00001d4a jne LBB0_975 + 0x4d, 0x01, 0xc3, //0x00001d50 addq %r8, %r11 + 0xe9, 0xd2, 0xff, 0xff, 0xff, //0x00001d53 jmp LBB0_334 + //0x00001d58 LBB0_335 + 0x4d, 0x85, 0xc0, //0x00001d58 testq %r8, %r8 + 0x0f, 0x84, 0x90, 0x36, 0x00, 0x00, //0x00001d5b je LBB0_975 + 0x4c, 0x89, 0xef, //0x00001d61 movq %r13, %rdi + 0x48, 0xf7, 0xd7, //0x00001d64 notq %rdi + 0x49, 0x8d, 0x0c, 0x3b, //0x00001d67 leaq (%r11,%rdi), %rcx + 0x48, 0x8b, 0x55, 0x98, //0x00001d6b movq $-104(%rbp), %rdx + 0x48, 0x83, 0xfa, 0xff, //0x00001d6f cmpq $-1, %rdx + 0x49, 0x89, 0xd1, //0x00001d73 movq %rdx, %r9 + 0x48, 0x0f, 0x44, 0xd1, //0x00001d76 cmoveq %rcx, %rdx + 0x4c, 0x0f, 0x44, 0xc9, //0x00001d7a cmoveq %rcx, %r9 + 0x49, 0x83, 0xc3, 0x01, //0x00001d7e addq $1, %r11 + 0x49, 0x83, 0xc0, 0xff, //0x00001d82 addq $-1, %r8 + 0x48, 0x89, 0x55, 0x98, //0x00001d86 movq %rdx, $-104(%rbp) + 0x4c, 0x8b, 0x65, 0xa8, //0x00001d8a movq $-88(%rbp), %r12 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001d8e movabsq $4294977024, %r14 + 0x4d, 0x85, 0xc0, //0x00001d98 testq %r8, %r8 + 0x0f, 0x85, 0xef, 0xfe, 0xff, 0xff, //0x00001d9b jne LBB0_323 + 0xe9, 0x7c, 0xff, 0xff, 0xff, //0x00001da1 jmp LBB0_333 + //0x00001da6 LBB0_337 + 0x4c, 0x8b, 0x4d, 0xc0, //0x00001da6 movq $-64(%rbp), %r9 + 0x4d, 0x8b, 0x19, //0x00001daa movq (%r9), %r11 + 0x4c, 0x8b, 0x45, 0xc8, //0x00001dad movq $-56(%rbp), %r8 + 0x4d, 0x89, 0x18, //0x00001db1 movq %r11, (%r8) + //0x00001db4 LBB0_338 + 0x4c, 0x8b, 0x65, 0xa8, //0x00001db4 movq $-88(%rbp), %r12 + 0xe9, 0xc1, 0xf7, 0xff, 0xff, //0x00001db8 jmp LBB0_235 + //0x00001dbd LBB0_339 + 0x49, 0x8d, 0x40, 0xff, //0x00001dbd leaq $-1(%r8), %rax + 0x4c, 0x39, 0xf0, //0x00001dc1 cmpq %r14, %rax + 0x0f, 0x85, 0x0d, 0x00, 0x00, 0x00, //0x00001dc4 jne LBB0_341 + 0x4c, 0x8b, 0x45, 0xc8, //0x00001dca movq $-56(%rbp), %r8 + 0x4c, 0x8b, 0x4d, 0xc0, //0x00001dce movq $-64(%rbp), %r9 + 0xe9, 0xdd, 0xff, 0xff, 0xff, //0x00001dd2 jmp LBB0_338 + //0x00001dd7 LBB0_341 + 0x4b, 0x8d, 0x04, 0x0e, //0x00001dd7 leaq (%r14,%r9), %rax + 0x48, 0x83, 0xc0, 0x02, //0x00001ddb addq $2, %rax + 0x4d, 0x29, 0xf0, //0x00001ddf subq %r14, %r8 + 0x49, 0x83, 0xc0, 0xfe, //0x00001de2 addq $-2, %r8 + 0x4d, 0x89, 0xc6, //0x00001de6 movq %r8, %r14 + 0x4c, 0x8b, 0x65, 0xa8, //0x00001de9 movq $-88(%rbp), %r12 + 0xe9, 0xcb, 0xee, 0xff, 0xff, //0x00001ded jmp LBB0_178 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001df2 .p2align 4, 0x90 + //0x00001e00 LBB0_342 + 0x80, 0xf9, 0x5b, //0x00001e00 cmpb $91, %cl + 0x0f, 0x85, 0x52, 0x29, 0x00, 0x00, //0x00001e03 jne LBB0_872 + 0x48, 0x8b, 0x45, 0xb0, //0x00001e09 movq $-80(%rbp), %rax + 0x48, 0x8b, 0x40, 0x08, //0x00001e0d movq $8(%rax), %rax + 0x4c, 0x8b, 0x38, //0x00001e11 movq (%rax), %r15 + 0x4d, 0x85, 0xff, //0x00001e14 testq %r15, %r15 + 0x0f, 0x88, 0xfe, 0x28, 0x00, 0x00, //0x00001e17 js LBB0_865 + 0x49, 0x8b, 0x09, //0x00001e1d movq (%r9), %rcx + 0x49, 0x39, 0xcb, //0x00001e20 cmpq %rcx, %r11 + 0x0f, 0x83, 0x27, 0x00, 0x00, 0x00, //0x00001e23 jae LBB0_349 + 0x43, 0x8a, 0x44, 0x1d, 0x00, //0x00001e29 movb (%r13,%r11), %al + 0x3c, 0x0d, //0x00001e2e cmpb $13, %al + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00001e30 je LBB0_349 + 0x3c, 0x20, //0x00001e36 cmpb $32, %al + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00001e38 je LBB0_349 + 0x04, 0xf7, //0x00001e3e addb $-9, %al + 0x3c, 0x01, //0x00001e40 cmpb $1, %al + 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x00001e42 jbe LBB0_349 + 0x4c, 0x89, 0xda, //0x00001e48 movq %r11, %rdx + 0xe9, 0xf8, 0x00, 0x00, 0x00, //0x00001e4b jmp LBB0_371 + //0x00001e50 .p2align 4, 0x90 + //0x00001e50 LBB0_349 + 0x49, 0x8d, 0x53, 0x01, //0x00001e50 leaq $1(%r11), %rdx + 0x48, 0x39, 0xca, //0x00001e54 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001e57 jae LBB0_353 + 0x41, 0x8a, 0x44, 0x15, 0x00, //0x00001e5d movb (%r13,%rdx), %al + 0x3c, 0x0d, //0x00001e62 cmpb $13, %al + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001e64 je LBB0_353 + 0x3c, 0x20, //0x00001e6a cmpb $32, %al + 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x00001e6c je LBB0_353 + 0x04, 0xf7, //0x00001e72 addb $-9, %al + 0x3c, 0x01, //0x00001e74 cmpb $1, %al + 0x0f, 0x87, 0xcc, 0x00, 0x00, 0x00, //0x00001e76 ja LBB0_371 + 0x90, 0x90, 0x90, 0x90, //0x00001e7c .p2align 4, 0x90 + //0x00001e80 LBB0_353 + 0x49, 0x8d, 0x53, 0x02, //0x00001e80 leaq $2(%r11), %rdx + 0x48, 0x39, 0xca, //0x00001e84 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001e87 jae LBB0_357 + 0x41, 0x8a, 0x44, 0x15, 0x00, //0x00001e8d movb (%r13,%rdx), %al + 0x3c, 0x0d, //0x00001e92 cmpb $13, %al + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001e94 je LBB0_357 + 0x3c, 0x20, //0x00001e9a cmpb $32, %al + 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x00001e9c je LBB0_357 + 0x04, 0xf7, //0x00001ea2 addb $-9, %al + 0x3c, 0x01, //0x00001ea4 cmpb $1, %al + 0x0f, 0x87, 0x9c, 0x00, 0x00, 0x00, //0x00001ea6 ja LBB0_371 + 0x90, 0x90, 0x90, 0x90, //0x00001eac .p2align 4, 0x90 + //0x00001eb0 LBB0_357 + 0x49, 0x8d, 0x53, 0x03, //0x00001eb0 leaq $3(%r11), %rdx + 0x48, 0x39, 0xca, //0x00001eb4 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001eb7 jae LBB0_361 + 0x41, 0x8a, 0x44, 0x15, 0x00, //0x00001ebd movb (%r13,%rdx), %al + 0x3c, 0x0d, //0x00001ec2 cmpb $13, %al + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001ec4 je LBB0_361 + 0x3c, 0x20, //0x00001eca cmpb $32, %al + 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x00001ecc je LBB0_361 + 0x04, 0xf7, //0x00001ed2 addb $-9, %al + 0x3c, 0x01, //0x00001ed4 cmpb $1, %al + 0x0f, 0x87, 0x6c, 0x00, 0x00, 0x00, //0x00001ed6 ja LBB0_371 + 0x90, 0x90, 0x90, 0x90, //0x00001edc .p2align 4, 0x90 + //0x00001ee0 LBB0_361 + 0x49, 0x8d, 0x53, 0x04, //0x00001ee0 leaq $4(%r11), %rdx + 0x48, 0x39, 0xd1, //0x00001ee4 cmpq %rdx, %rcx + 0x0f, 0x86, 0x3e, 0x00, 0x00, 0x00, //0x00001ee7 jbe LBB0_367 + 0x48, 0x39, 0xd1, //0x00001eed cmpq %rdx, %rcx + 0x0f, 0x84, 0x3d, 0x00, 0x00, 0x00, //0x00001ef0 je LBB0_368 + 0x4a, 0x8d, 0x04, 0x29, //0x00001ef6 leaq (%rcx,%r13), %rax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001efa .p2align 4, 0x90 + //0x00001f00 LBB0_364 + 0x41, 0x0f, 0xbe, 0x74, 0x15, 0x00, //0x00001f00 movsbl (%r13,%rdx), %esi + 0x83, 0xfe, 0x20, //0x00001f06 cmpl $32, %esi + 0x0f, 0x87, 0x30, 0x00, 0x00, 0x00, //0x00001f09 ja LBB0_370 + 0x49, 0x0f, 0xa3, 0xf6, //0x00001f0f btq %rsi, %r14 + 0x0f, 0x83, 0x26, 0x00, 0x00, 0x00, //0x00001f13 jae LBB0_370 + 0x48, 0x83, 0xc2, 0x01, //0x00001f19 addq $1, %rdx + 0x48, 0x39, 0xd1, //0x00001f1d cmpq %rdx, %rcx + 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x00001f20 jne LBB0_364 + 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00001f26 jmp LBB0_369 + //0x00001f2b LBB0_367 + 0x49, 0x89, 0xd3, //0x00001f2b movq %rdx, %r11 + 0xe9, 0x28, 0x00, 0x00, 0x00, //0x00001f2e jmp LBB0_372 + //0x00001f33 LBB0_368 + 0x4c, 0x01, 0xea, //0x00001f33 addq %r13, %rdx + 0x48, 0x89, 0xd0, //0x00001f36 movq %rdx, %rax + //0x00001f39 LBB0_369 + 0x4c, 0x29, 0xe8, //0x00001f39 subq %r13, %rax + 0x48, 0x89, 0xc2, //0x00001f3c movq %rax, %rdx + //0x00001f3f LBB0_370 + 0x48, 0x39, 0xca, //0x00001f3f cmpq %rcx, %rdx + 0x0f, 0x83, 0x13, 0x00, 0x00, 0x00, //0x00001f42 jae LBB0_372 + //0x00001f48 LBB0_371 + 0x4c, 0x8d, 0x5a, 0x01, //0x00001f48 leaq $1(%rdx), %r11 + 0x4d, 0x89, 0x18, //0x00001f4c movq %r11, (%r8) + 0x41, 0x80, 0x7c, 0x15, 0x00, 0x5d, //0x00001f4f cmpb $93, (%r13,%rdx) + 0x0f, 0x84, 0xfa, 0x10, 0x00, 0x00, //0x00001f55 je LBB0_556 + //0x00001f5b LBB0_372 + 0x49, 0x83, 0xc3, 0xff, //0x00001f5b addq $-1, %r11 + 0x4d, 0x89, 0x18, //0x00001f5f movq %r11, (%r8) + 0x4d, 0x85, 0xff, //0x00001f62 testq %r15, %r15 + 0x0f, 0x8e, 0xd5, 0x0e, 0x00, 0x00, //0x00001f65 jle LBB0_464 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001f6b .p2align 4, 0x90 + //0x00001f70 LBB0_373 + 0x49, 0x8b, 0x11, //0x00001f70 movq (%r9), %rdx + 0x49, 0x39, 0xd3, //0x00001f73 cmpq %rdx, %r11 + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00001f76 jae LBB0_378 + 0x43, 0x8a, 0x44, 0x1d, 0x00, //0x00001f7c movb (%r13,%r11), %al + 0x3c, 0x0d, //0x00001f81 cmpb $13, %al + 0x0f, 0x84, 0x27, 0x00, 0x00, 0x00, //0x00001f83 je LBB0_378 + 0x3c, 0x20, //0x00001f89 cmpb $32, %al + 0x0f, 0x84, 0x1f, 0x00, 0x00, 0x00, //0x00001f8b je LBB0_378 + 0x04, 0xf7, //0x00001f91 addb $-9, %al + 0x3c, 0x01, //0x00001f93 cmpb $1, %al + 0x0f, 0x86, 0x15, 0x00, 0x00, 0x00, //0x00001f95 jbe LBB0_378 + 0x4c, 0x89, 0xd9, //0x00001f9b movq %r11, %rcx + 0xe9, 0xfd, 0x00, 0x00, 0x00, //0x00001f9e jmp LBB0_399 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001fa3 .p2align 4, 0x90 + //0x00001fb0 LBB0_378 + 0x49, 0x8d, 0x4b, 0x01, //0x00001fb0 leaq $1(%r11), %rcx + 0x48, 0x39, 0xd1, //0x00001fb4 cmpq %rdx, %rcx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001fb7 jae LBB0_382 + 0x41, 0x8a, 0x44, 0x0d, 0x00, //0x00001fbd movb (%r13,%rcx), %al + 0x3c, 0x0d, //0x00001fc2 cmpb $13, %al + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001fc4 je LBB0_382 + 0x3c, 0x20, //0x00001fca cmpb $32, %al + 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x00001fcc je LBB0_382 + 0x04, 0xf7, //0x00001fd2 addb $-9, %al + 0x3c, 0x01, //0x00001fd4 cmpb $1, %al + 0x0f, 0x87, 0xc4, 0x00, 0x00, 0x00, //0x00001fd6 ja LBB0_399 + 0x90, 0x90, 0x90, 0x90, //0x00001fdc .p2align 4, 0x90 + //0x00001fe0 LBB0_382 + 0x49, 0x8d, 0x4b, 0x02, //0x00001fe0 leaq $2(%r11), %rcx + 0x48, 0x39, 0xd1, //0x00001fe4 cmpq %rdx, %rcx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00001fe7 jae LBB0_386 + 0x41, 0x8a, 0x44, 0x0d, 0x00, //0x00001fed movb (%r13,%rcx), %al + 0x3c, 0x0d, //0x00001ff2 cmpb $13, %al + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00001ff4 je LBB0_386 + 0x3c, 0x20, //0x00001ffa cmpb $32, %al + 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x00001ffc je LBB0_386 + 0x04, 0xf7, //0x00002002 addb $-9, %al + 0x3c, 0x01, //0x00002004 cmpb $1, %al + 0x0f, 0x87, 0x94, 0x00, 0x00, 0x00, //0x00002006 ja LBB0_399 + 0x90, 0x90, 0x90, 0x90, //0x0000200c .p2align 4, 0x90 + //0x00002010 LBB0_386 + 0x49, 0x8d, 0x4b, 0x03, //0x00002010 leaq $3(%r11), %rcx + 0x48, 0x39, 0xd1, //0x00002014 cmpq %rdx, %rcx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002017 jae LBB0_390 + 0x41, 0x8a, 0x44, 0x0d, 0x00, //0x0000201d movb (%r13,%rcx), %al + 0x3c, 0x0d, //0x00002022 cmpb $13, %al + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00002024 je LBB0_390 + 0x3c, 0x20, //0x0000202a cmpb $32, %al + 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x0000202c je LBB0_390 + 0x04, 0xf7, //0x00002032 addb $-9, %al + 0x3c, 0x01, //0x00002034 cmpb $1, %al + 0x0f, 0x87, 0x64, 0x00, 0x00, 0x00, //0x00002036 ja LBB0_399 + 0x90, 0x90, 0x90, 0x90, //0x0000203c .p2align 4, 0x90 + //0x00002040 LBB0_390 + 0x49, 0x8d, 0x4b, 0x04, //0x00002040 leaq $4(%r11), %rcx + 0x48, 0x39, 0xca, //0x00002044 cmpq %rcx, %rdx + 0x0f, 0x86, 0x03, 0x03, 0x00, 0x00, //0x00002047 jbe LBB0_435 + 0x48, 0x39, 0xca, //0x0000204d cmpq %rcx, %rdx + 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00002050 je LBB0_396 + 0x4a, 0x8d, 0x04, 0x2a, //0x00002056 leaq (%rdx,%r13), %rax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000205a .p2align 4, 0x90 + //0x00002060 LBB0_393 + 0x41, 0x0f, 0xbe, 0x74, 0x0d, 0x00, //0x00002060 movsbl (%r13,%rcx), %esi + 0x83, 0xfe, 0x20, //0x00002066 cmpl $32, %esi + 0x0f, 0x87, 0x28, 0x00, 0x00, 0x00, //0x00002069 ja LBB0_398 + 0x49, 0x0f, 0xa3, 0xf6, //0x0000206f btq %rsi, %r14 + 0x0f, 0x83, 0x1e, 0x00, 0x00, 0x00, //0x00002073 jae LBB0_398 + 0x48, 0x83, 0xc1, 0x01, //0x00002079 addq $1, %rcx + 0x48, 0x39, 0xca, //0x0000207d cmpq %rcx, %rdx + 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x00002080 jne LBB0_393 + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x00002086 jmp LBB0_397 + //0x0000208b LBB0_396 + 0x4c, 0x01, 0xe9, //0x0000208b addq %r13, %rcx + 0x48, 0x89, 0xc8, //0x0000208e movq %rcx, %rax + //0x00002091 LBB0_397 + 0x4c, 0x29, 0xe8, //0x00002091 subq %r13, %rax + 0x48, 0x89, 0xc1, //0x00002094 movq %rax, %rcx + //0x00002097 LBB0_398 + 0x48, 0x39, 0xd1, //0x00002097 cmpq %rdx, %rcx + 0x0f, 0x83, 0xb6, 0x02, 0x00, 0x00, //0x0000209a jae LBB0_436 + //0x000020a0 LBB0_399 + 0x4c, 0x8d, 0x59, 0x01, //0x000020a0 leaq $1(%rcx), %r11 + 0x4d, 0x89, 0x18, //0x000020a4 movq %r11, (%r8) + 0x41, 0x0f, 0xbe, 0x44, 0x0d, 0x00, //0x000020a7 movsbl (%r13,%rcx), %eax + 0x83, 0xf8, 0x7b, //0x000020ad cmpl $123, %eax + 0x0f, 0x87, 0x9a, 0x02, 0x00, 0x00, //0x000020b0 ja LBB0_435 + 0x48, 0x8d, 0x15, 0x13, 0x35, 0x00, 0x00, //0x000020b6 leaq $13587(%rip), %rdx /* LJTI0_0+0(%rip) */ + 0x48, 0x63, 0x04, 0x82, //0x000020bd movslq (%rdx,%rax,4), %rax + 0x48, 0x01, 0xd0, //0x000020c1 addq %rdx, %rax + 0xff, 0xe0, //0x000020c4 jmpq *%rax + //0x000020c6 LBB0_401 + 0x4d, 0x8b, 0x01, //0x000020c6 movq (%r9), %r8 + 0x4c, 0x89, 0xc0, //0x000020c9 movq %r8, %rax + 0x4c, 0x29, 0xd8, //0x000020cc subq %r11, %rax + 0x48, 0x83, 0xf8, 0x10, //0x000020cf cmpq $16, %rax + 0x0f, 0x82, 0x03, 0x0d, 0x00, 0x00, //0x000020d3 jb LBB0_525 + 0x48, 0x89, 0xcf, //0x000020d9 movq %rcx, %rdi + 0x48, 0xf7, 0xd7, //0x000020dc notq %rdi + 0x48, 0x8d, 0x59, 0x01, //0x000020df leaq $1(%rcx), %rbx + 0x48, 0x8d, 0x41, 0x02, //0x000020e3 leaq $2(%rcx), %rax + 0x4a, 0x8d, 0x14, 0x29, //0x000020e7 leaq (%rcx,%r13), %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000020eb .p2align 4, 0x90 + //0x000020f0 LBB0_403 + 0xf3, 0x41, 0x0f, 0x6f, 0x54, 0x1d, 0x00, //0x000020f0 movdqu (%r13,%rbx), %xmm2 + 0x66, 0x0f, 0x6f, 0xda, //0x000020f7 movdqa %xmm2, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x000020fb pcmpeqb %xmm13, %xmm3 + 0x66, 0x41, 0x0f, 0xdb, 0xd6, //0x00002100 pand %xmm14, %xmm2 + 0x66, 0x0f, 0x74, 0xd4, //0x00002105 pcmpeqb %xmm4, %xmm2 + 0x66, 0x0f, 0xeb, 0xd3, //0x00002109 por %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xf2, //0x0000210d pmovmskb %xmm2, %esi + 0x85, 0xf6, //0x00002111 testl %esi, %esi + 0x0f, 0x85, 0x97, 0x00, 0x00, 0x00, //0x00002113 jne LBB0_414 + 0x48, 0x83, 0xc3, 0x10, //0x00002119 addq $16, %rbx + 0x49, 0x8d, 0x34, 0x38, //0x0000211d leaq (%r8,%rdi), %rsi + 0x48, 0x83, 0xc6, 0xf0, //0x00002121 addq $-16, %rsi + 0x48, 0x83, 0xc7, 0xf0, //0x00002125 addq $-16, %rdi + 0x48, 0x83, 0xc0, 0x10, //0x00002129 addq $16, %rax + 0x48, 0x83, 0xc1, 0x10, //0x0000212d addq $16, %rcx + 0x48, 0x83, 0xc2, 0x10, //0x00002131 addq $16, %rdx + 0x48, 0x83, 0xfe, 0x0f, //0x00002135 cmpq $15, %rsi + 0x0f, 0x87, 0xb1, 0xff, 0xff, 0xff, //0x00002139 ja LBB0_403 + 0x4d, 0x89, 0xeb, //0x0000213f movq %r13, %r11 + 0x49, 0x29, 0xfb, //0x00002142 subq %rdi, %r11 + 0x49, 0x01, 0xf8, //0x00002145 addq %rdi, %r8 + 0x4c, 0x89, 0xc0, //0x00002148 movq %r8, %rax + 0x48, 0x85, 0xc0, //0x0000214b testq %rax, %rax + 0x4c, 0x8b, 0x45, 0xc8, //0x0000214e movq $-56(%rbp), %r8 + 0x0f, 0x84, 0x49, 0x00, 0x00, 0x00, //0x00002152 je LBB0_413 + //0x00002158 LBB0_406 + 0x49, 0x8d, 0x0c, 0x03, //0x00002158 leaq (%r11,%rax), %rcx + //0x0000215c LBB0_407 + 0x41, 0x0f, 0xb6, 0x13, //0x0000215c movzbl (%r11), %edx + 0x48, 0x83, 0xfa, 0x2c, //0x00002160 cmpq $44, %rdx + 0x0f, 0x87, 0x14, 0x00, 0x00, 0x00, //0x00002164 ja LBB0_409 + 0x48, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x0000216a movabsq $17596481021440, %rsi + 0x48, 0x0f, 0xa3, 0xd6, //0x00002174 btq %rdx, %rsi + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x00002178 jb LBB0_413 + //0x0000217e LBB0_409 + 0x80, 0xfa, 0x5d, //0x0000217e cmpb $93, %dl + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00002181 je LBB0_413 + 0x80, 0xfa, 0x7d, //0x00002187 cmpb $125, %dl + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x0000218a je LBB0_413 + 0x49, 0x83, 0xc3, 0x01, //0x00002190 addq $1, %r11 + 0x48, 0x83, 0xc0, 0xff, //0x00002194 addq $-1, %rax + 0x0f, 0x85, 0xbe, 0xff, 0xff, 0xff, //0x00002198 jne LBB0_407 + 0x49, 0x89, 0xcb, //0x0000219e movq %rcx, %r11 + //0x000021a1 LBB0_413 + 0x4d, 0x29, 0xeb, //0x000021a1 subq %r13, %r11 + 0x4d, 0x89, 0x18, //0x000021a4 movq %r11, (%r8) + 0xe9, 0xaa, 0x01, 0x00, 0x00, //0x000021a7 jmp LBB0_436 + 0x90, 0x90, 0x90, 0x90, //0x000021ac .p2align 4, 0x90 + //0x000021b0 LBB0_414 + 0x66, 0x0f, 0xbc, 0xf6, //0x000021b0 bsfw %si, %si + 0x0f, 0xb7, 0xf6, //0x000021b4 movzwl %si, %esi + 0x49, 0x89, 0xf3, //0x000021b7 movq %rsi, %r11 + 0x49, 0x29, 0xfb, //0x000021ba subq %rdi, %r11 + 0x4c, 0x8b, 0x45, 0xc8, //0x000021bd movq $-56(%rbp), %r8 + 0x4d, 0x89, 0x18, //0x000021c1 movq %r11, (%r8) + 0x4d, 0x85, 0xdb, //0x000021c4 testq %r11, %r11 + 0x0f, 0x8e, 0x89, 0x01, 0x00, 0x00, //0x000021c7 jle LBB0_436 + 0x48, 0x01, 0xf0, //0x000021cd addq %rsi, %rax + 0x48, 0x01, 0xf1, //0x000021d0 addq %rsi, %rcx + 0x48, 0x01, 0xf2, //0x000021d3 addq %rsi, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000021d6 .p2align 4, 0x90 + //0x000021e0 LBB0_416 + 0x0f, 0xb6, 0x32, //0x000021e0 movzbl (%rdx), %esi + 0x48, 0x83, 0xfe, 0x20, //0x000021e3 cmpq $32, %rsi + 0x0f, 0x87, 0x69, 0x01, 0x00, 0x00, //0x000021e7 ja LBB0_436 + 0x49, 0x0f, 0xa3, 0xf6, //0x000021ed btq %rsi, %r14 + 0x0f, 0x83, 0x5f, 0x01, 0x00, 0x00, //0x000021f1 jae LBB0_436 + 0x49, 0x89, 0x08, //0x000021f7 movq %rcx, (%r8) + 0x48, 0x83, 0xc0, 0xff, //0x000021fa addq $-1, %rax + 0x48, 0x83, 0xc1, 0xff, //0x000021fe addq $-1, %rcx + 0x48, 0x83, 0xc2, 0xff, //0x00002202 addq $-1, %rdx + 0x49, 0x83, 0xc3, 0xff, //0x00002206 addq $-1, %r11 + 0x48, 0x83, 0xf8, 0x01, //0x0000220a cmpq $1, %rax + 0x0f, 0x8f, 0xcc, 0xff, 0xff, 0xff, //0x0000220e jg LBB0_416 + 0x45, 0x31, 0xdb, //0x00002214 xorl %r11d, %r11d + 0xe9, 0x3a, 0x01, 0x00, 0x00, //0x00002217 jmp LBB0_436 + //0x0000221c LBB0_420 + 0x48, 0x83, 0xc1, 0x04, //0x0000221c addq $4, %rcx + 0x49, 0x3b, 0x09, //0x00002220 cmpq (%r9), %rcx + 0x0f, 0x86, 0x27, 0x01, 0x00, 0x00, //0x00002223 jbe LBB0_435 + 0xe9, 0x28, 0x01, 0x00, 0x00, //0x00002229 jmp LBB0_436 + //0x0000222e LBB0_421 + 0x4d, 0x8b, 0x01, //0x0000222e movq (%r9), %r8 + 0x4d, 0x89, 0xc6, //0x00002231 movq %r8, %r14 + 0x4d, 0x29, 0xde, //0x00002234 subq %r11, %r14 + 0x49, 0x83, 0xfe, 0x20, //0x00002237 cmpq $32, %r14 + 0x0f, 0x8c, 0xb0, 0x0b, 0x00, 0x00, //0x0000223b jl LBB0_526 + 0x4e, 0x8d, 0x0c, 0x29, //0x00002241 leaq (%rcx,%r13), %r9 + 0x49, 0x29, 0xc8, //0x00002245 subq %rcx, %r8 + 0x41, 0xbc, 0x1f, 0x00, 0x00, 0x00, //0x00002248 movl $31, %r12d + 0x45, 0x31, 0xf6, //0x0000224e xorl %r14d, %r14d + 0x45, 0x31, 0xd2, //0x00002251 xorl %r10d, %r10d + 0xe9, 0x2d, 0x00, 0x00, 0x00, //0x00002254 jmp LBB0_423 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002259 .p2align 4, 0x90 + //0x00002260 LBB0_428 + 0x45, 0x31, 0xd2, //0x00002260 xorl %r10d, %r10d + 0x48, 0x85, 0xf6, //0x00002263 testq %rsi, %rsi + 0x0f, 0x85, 0xa3, 0x00, 0x00, 0x00, //0x00002266 jne LBB0_425 + //0x0000226c LBB0_429 + 0x49, 0x83, 0xc6, 0x20, //0x0000226c addq $32, %r14 + 0x4b, 0x8d, 0x04, 0x20, //0x00002270 leaq (%r8,%r12), %rax + 0x48, 0x83, 0xc0, 0xe0, //0x00002274 addq $-32, %rax + 0x49, 0x83, 0xc4, 0xe0, //0x00002278 addq $-32, %r12 + 0x48, 0x83, 0xf8, 0x3f, //0x0000227c cmpq $63, %rax + 0x0f, 0x8e, 0xb5, 0x0a, 0x00, 0x00, //0x00002280 jle LBB0_430 + //0x00002286 LBB0_423 + 0xf3, 0x43, 0x0f, 0x6f, 0x54, 0x31, 0x01, //0x00002286 movdqu $1(%r9,%r14), %xmm2 + 0xf3, 0x43, 0x0f, 0x6f, 0x5c, 0x31, 0x11, //0x0000228d movdqu $17(%r9,%r14), %xmm3 + 0x66, 0x0f, 0x6f, 0xea, //0x00002294 movdqa %xmm2, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002298 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x0000229c pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x6f, 0xeb, //0x000022a0 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x000022a4 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xf5, //0x000022a8 pmovmskb %xmm5, %esi + 0x48, 0xc1, 0xe6, 0x10, //0x000022ac shlq $16, %rsi + 0x48, 0x09, 0xfe, //0x000022b0 orq %rdi, %rsi + 0x66, 0x0f, 0x74, 0xd1, //0x000022b3 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x000022b7 pmovmskb %xmm2, %ebx + 0x66, 0x0f, 0x74, 0xd9, //0x000022bb pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x000022bf pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe7, 0x10, //0x000022c3 shlq $16, %rdi + 0x48, 0x09, 0xdf, //0x000022c7 orq %rbx, %rdi + 0x48, 0x89, 0xfb, //0x000022ca movq %rdi, %rbx + 0x4c, 0x09, 0xd3, //0x000022cd orq %r10, %rbx + 0x0f, 0x84, 0x8a, 0xff, 0xff, 0xff, //0x000022d0 je LBB0_428 + 0x44, 0x89, 0xd3, //0x000022d6 movl %r10d, %ebx + 0xf7, 0xd3, //0x000022d9 notl %ebx + 0x21, 0xfb, //0x000022db andl %edi, %ebx + 0x8d, 0x04, 0x1b, //0x000022dd leal (%rbx,%rbx), %eax + 0x44, 0x09, 0xd0, //0x000022e0 orl %r10d, %eax + 0x89, 0xc2, //0x000022e3 movl %eax, %edx + 0xf7, 0xd2, //0x000022e5 notl %edx + 0x21, 0xfa, //0x000022e7 andl %edi, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x000022e9 andl $-1431655766, %edx + 0x45, 0x31, 0xd2, //0x000022ef xorl %r10d, %r10d + 0x01, 0xda, //0x000022f2 addl %ebx, %edx + 0x41, 0x0f, 0x92, 0xc2, //0x000022f4 setb %r10b + 0x01, 0xd2, //0x000022f8 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x000022fa xorl $1431655765, %edx + 0x21, 0xc2, //0x00002300 andl %eax, %edx + 0xf7, 0xd2, //0x00002302 notl %edx + 0x21, 0xd6, //0x00002304 andl %edx, %esi + 0x48, 0x85, 0xf6, //0x00002306 testq %rsi, %rsi + 0x0f, 0x84, 0x5d, 0xff, 0xff, 0xff, //0x00002309 je LBB0_429 + //0x0000230f LBB0_425 + 0x0f, 0xbc, 0xc6, //0x0000230f bsfl %esi, %eax + 0x48, 0x01, 0xc8, //0x00002312 addq %rcx, %rax + 0x4d, 0x8d, 0x1c, 0x06, //0x00002315 leaq (%r14,%rax), %r11 + 0x49, 0x83, 0xc3, 0x02, //0x00002319 addq $2, %r11 + 0x4c, 0x8b, 0x45, 0xc8, //0x0000231d movq $-56(%rbp), %r8 + 0x4d, 0x89, 0x18, //0x00002321 movq %r11, (%r8) + //0x00002324 LBB0_426 + 0x4c, 0x8b, 0x4d, 0xc0, //0x00002324 movq $-64(%rbp), %r9 + //0x00002328 LBB0_427 + 0x4c, 0x8b, 0x65, 0xa8, //0x00002328 movq $-88(%rbp), %r12 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000232c movabsq $4294977024, %r14 + 0xe9, 0x1b, 0x00, 0x00, 0x00, //0x00002336 jmp LBB0_436 + //0x0000233b LBB0_434 + 0x48, 0x83, 0xc1, 0x05, //0x0000233b addq $5, %rcx + 0x49, 0x3b, 0x09, //0x0000233f cmpq (%r9), %rcx + 0x0f, 0x87, 0x0e, 0x00, 0x00, 0x00, //0x00002342 ja LBB0_436 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002348 .p2align 4, 0x90 + //0x00002350 LBB0_435 + 0x49, 0x89, 0x08, //0x00002350 movq %rcx, (%r8) + 0x49, 0x89, 0xcb, //0x00002353 movq %rcx, %r11 + //0x00002356 LBB0_436 + 0x4d, 0x8b, 0x2c, 0x24, //0x00002356 movq (%r12), %r13 + 0x49, 0x8b, 0x4c, 0x24, 0x08, //0x0000235a movq $8(%r12), %rcx + 0x49, 0x39, 0xcb, //0x0000235f cmpq %rcx, %r11 + 0x0f, 0x83, 0x28, 0x00, 0x00, 0x00, //0x00002362 jae LBB0_441 + 0x43, 0x8a, 0x44, 0x1d, 0x00, //0x00002368 movb (%r13,%r11), %al + 0x3c, 0x0d, //0x0000236d cmpb $13, %al + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x0000236f je LBB0_441 + 0x3c, 0x20, //0x00002375 cmpb $32, %al + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00002377 je LBB0_441 + 0x04, 0xf7, //0x0000237d addb $-9, %al + 0x3c, 0x01, //0x0000237f cmpb $1, %al + 0x0f, 0x86, 0x09, 0x00, 0x00, 0x00, //0x00002381 jbe LBB0_441 + 0x4c, 0x89, 0xda, //0x00002387 movq %r11, %rdx + 0xe9, 0xf6, 0x00, 0x00, 0x00, //0x0000238a jmp LBB0_462 + 0x90, //0x0000238f .p2align 4, 0x90 + //0x00002390 LBB0_441 + 0x49, 0x8d, 0x53, 0x01, //0x00002390 leaq $1(%r11), %rdx + 0x48, 0x39, 0xca, //0x00002394 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002397 jae LBB0_445 + 0x41, 0x8a, 0x44, 0x15, 0x00, //0x0000239d movb (%r13,%rdx), %al + 0x3c, 0x0d, //0x000023a2 cmpb $13, %al + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000023a4 je LBB0_445 + 0x3c, 0x20, //0x000023aa cmpb $32, %al + 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x000023ac je LBB0_445 + 0x04, 0xf7, //0x000023b2 addb $-9, %al + 0x3c, 0x01, //0x000023b4 cmpb $1, %al + 0x0f, 0x87, 0xc9, 0x00, 0x00, 0x00, //0x000023b6 ja LBB0_462 + 0x90, 0x90, 0x90, 0x90, //0x000023bc .p2align 4, 0x90 + //0x000023c0 LBB0_445 + 0x49, 0x8d, 0x53, 0x02, //0x000023c0 leaq $2(%r11), %rdx + 0x48, 0x39, 0xca, //0x000023c4 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000023c7 jae LBB0_449 + 0x41, 0x8a, 0x44, 0x15, 0x00, //0x000023cd movb (%r13,%rdx), %al + 0x3c, 0x0d, //0x000023d2 cmpb $13, %al + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000023d4 je LBB0_449 + 0x3c, 0x20, //0x000023da cmpb $32, %al + 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x000023dc je LBB0_449 + 0x04, 0xf7, //0x000023e2 addb $-9, %al + 0x3c, 0x01, //0x000023e4 cmpb $1, %al + 0x0f, 0x87, 0x99, 0x00, 0x00, 0x00, //0x000023e6 ja LBB0_462 + 0x90, 0x90, 0x90, 0x90, //0x000023ec .p2align 4, 0x90 + //0x000023f0 LBB0_449 + 0x49, 0x8d, 0x53, 0x03, //0x000023f0 leaq $3(%r11), %rdx + 0x48, 0x39, 0xca, //0x000023f4 cmpq %rcx, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000023f7 jae LBB0_453 + 0x41, 0x8a, 0x44, 0x15, 0x00, //0x000023fd movb (%r13,%rdx), %al + 0x3c, 0x0d, //0x00002402 cmpb $13, %al + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00002404 je LBB0_453 + 0x3c, 0x20, //0x0000240a cmpb $32, %al + 0x0f, 0x84, 0x0e, 0x00, 0x00, 0x00, //0x0000240c je LBB0_453 + 0x04, 0xf7, //0x00002412 addb $-9, %al + 0x3c, 0x01, //0x00002414 cmpb $1, %al + 0x0f, 0x87, 0x69, 0x00, 0x00, 0x00, //0x00002416 ja LBB0_462 + 0x90, 0x90, 0x90, 0x90, //0x0000241c .p2align 4, 0x90 + //0x00002420 LBB0_453 + 0x49, 0x8d, 0x53, 0x04, //0x00002420 leaq $4(%r11), %rdx + 0x48, 0x39, 0xd1, //0x00002424 cmpq %rdx, %rcx + 0x0f, 0x86, 0x18, 0x0c, 0x00, 0x00, //0x00002427 jbe LBB0_870 + 0x48, 0x39, 0xd1, //0x0000242d cmpq %rdx, %rcx + 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00002430 je LBB0_459 + 0x4a, 0x8d, 0x04, 0x29, //0x00002436 leaq (%rcx,%r13), %rax + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000243a .p2align 4, 0x90 + //0x00002440 LBB0_456 + 0x41, 0x0f, 0xbe, 0x74, 0x15, 0x00, //0x00002440 movsbl (%r13,%rdx), %esi + 0x83, 0xfe, 0x20, //0x00002446 cmpl $32, %esi + 0x0f, 0x87, 0x2d, 0x00, 0x00, 0x00, //0x00002449 ja LBB0_461 + 0x49, 0x0f, 0xa3, 0xf6, //0x0000244f btq %rsi, %r14 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00002453 jae LBB0_461 + 0x48, 0x83, 0xc2, 0x01, //0x00002459 addq $1, %rdx + 0x48, 0x39, 0xd1, //0x0000245d cmpq %rdx, %rcx + 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x00002460 jne LBB0_456 + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00002466 jmp LBB0_460 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000246b .p2align 4, 0x90 + //0x00002470 LBB0_459 + 0x4c, 0x01, 0xea, //0x00002470 addq %r13, %rdx + 0x48, 0x89, 0xd0, //0x00002473 movq %rdx, %rax + //0x00002476 LBB0_460 + 0x4c, 0x29, 0xe8, //0x00002476 subq %r13, %rax + 0x48, 0x89, 0xc2, //0x00002479 movq %rax, %rdx + //0x0000247c LBB0_461 + 0x48, 0x39, 0xca, //0x0000247c cmpq %rcx, %rdx + 0x0f, 0x83, 0xd6, 0x22, 0x00, 0x00, //0x0000247f jae LBB0_872 + //0x00002485 LBB0_462 + 0x4c, 0x8d, 0x5a, 0x01, //0x00002485 leaq $1(%rdx), %r11 + 0x4d, 0x89, 0x18, //0x00002489 movq %r11, (%r8) + 0x41, 0x8a, 0x44, 0x15, 0x00, //0x0000248c movb (%r13,%rdx), %al + 0x3c, 0x2c, //0x00002491 cmpb $44, %al + 0x0f, 0x85, 0x91, 0x0b, 0x00, 0x00, //0x00002493 jne LBB0_554 + 0x49, 0x8d, 0x47, 0xff, //0x00002499 leaq $-1(%r15), %rax + 0x49, 0x83, 0xff, 0x02, //0x0000249d cmpq $2, %r15 + 0x49, 0x89, 0xc7, //0x000024a1 movq %rax, %r15 + 0x0f, 0x8d, 0xc6, 0xfa, 0xff, 0xff, //0x000024a4 jge LBB0_373 + 0xe9, 0x91, 0x09, 0x00, 0x00, //0x000024aa jmp LBB0_464 + //0x000024af LBB0_467 + 0x49, 0x8b, 0x01, //0x000024af movq (%r9), %rax + 0x4c, 0x29, 0xd8, //0x000024b2 subq %r11, %rax + 0x4d, 0x01, 0xdd, //0x000024b5 addq %r11, %r13 + 0x45, 0x31, 0xc9, //0x000024b8 xorl %r9d, %r9d + 0x31, 0xdb, //0x000024bb xorl %ebx, %ebx + 0x45, 0x31, 0xdb, //0x000024bd xorl %r11d, %r11d + 0x31, 0xc9, //0x000024c0 xorl %ecx, %ecx + 0xe9, 0x73, 0x00, 0x00, 0x00, //0x000024c2 jmp LBB0_469 + //0x000024c7 LBB0_468 + 0x49, 0xc1, 0xfe, 0x3f, //0x000024c7 sarq $63, %r14 + 0x4c, 0x89, 0xd0, //0x000024cb movq %r10, %rax + 0x48, 0xd1, 0xe8, //0x000024ce shrq %rax + 0x48, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000024d1 movabsq $6148914691236517205, %rsi + 0x48, 0x21, 0xf0, //0x000024db andq %rsi, %rax + 0x49, 0x29, 0xc2, //0x000024de subq %rax, %r10 + 0x4c, 0x89, 0xd0, //0x000024e1 movq %r10, %rax + 0x48, 0xba, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x000024e4 movabsq $3689348814741910323, %rdx + 0x48, 0x21, 0xd0, //0x000024ee andq %rdx, %rax + 0x49, 0xc1, 0xea, 0x02, //0x000024f1 shrq $2, %r10 + 0x49, 0x21, 0xd2, //0x000024f5 andq %rdx, %r10 + 0x49, 0x01, 0xc2, //0x000024f8 addq %rax, %r10 + 0x4c, 0x89, 0xd0, //0x000024fb movq %r10, %rax + 0x48, 0xc1, 0xe8, 0x04, //0x000024fe shrq $4, %rax + 0x4c, 0x01, 0xd0, //0x00002502 addq %r10, %rax + 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00002505 movabsq $1085102592571150095, %rdx + 0x48, 0x21, 0xd0, //0x0000250f andq %rdx, %rax + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002512 movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xc2, //0x0000251c imulq %rdx, %rax + 0x48, 0xc1, 0xe8, 0x38, //0x00002520 shrq $56, %rax + 0x49, 0x01, 0xc3, //0x00002524 addq %rax, %r11 + 0x49, 0x83, 0xc5, 0x40, //0x00002527 addq $64, %r13 + 0x48, 0x8b, 0x45, 0xd0, //0x0000252b movq $-48(%rbp), %rax + 0x48, 0x83, 0xc0, 0xc0, //0x0000252f addq $-64, %rax + 0x4d, 0x89, 0xf1, //0x00002533 movq %r14, %r9 + 0x48, 0x8b, 0x5d, 0xb8, //0x00002536 movq $-72(%rbp), %rbx + //0x0000253a LBB0_469 + 0x48, 0x83, 0xf8, 0x40, //0x0000253a cmpq $64, %rax + 0x48, 0x89, 0x45, 0xd0, //0x0000253e movq %rax, $-48(%rbp) + 0x0f, 0x8c, 0x39, 0x02, 0x00, 0x00, //0x00002542 jl LBB0_477 + //0x00002548 LBB0_470 + 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x00, //0x00002548 movdqu (%r13), %xmm2 + 0xf3, 0x41, 0x0f, 0x6f, 0x6d, 0x10, //0x0000254e movdqu $16(%r13), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x7d, 0x20, //0x00002554 movdqu $32(%r13), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x75, 0x30, //0x0000255a movdqu $48(%r13), %xmm6 + 0x66, 0x0f, 0x6f, 0xda, //0x00002560 movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002564 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xc3, //0x00002568 pmovmskb %xmm3, %eax + 0x66, 0x0f, 0x6f, 0xdd, //0x0000256c movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002570 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x00002574 pmovmskb %xmm3, %edx + 0x66, 0x0f, 0x6f, 0xdf, //0x00002578 movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000257c pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002580 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x6f, 0xde, //0x00002584 movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002588 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x0000258c pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe7, 0x30, //0x00002590 shlq $48, %rdi + 0x48, 0xc1, 0xe6, 0x20, //0x00002594 shlq $32, %rsi + 0x48, 0x09, 0xfe, //0x00002598 orq %rdi, %rsi + 0x48, 0xc1, 0xe2, 0x10, //0x0000259b shlq $16, %rdx + 0x48, 0x09, 0xf2, //0x0000259f orq %rsi, %rdx + 0x48, 0x09, 0xd0, //0x000025a2 orq %rdx, %rax + 0x48, 0x89, 0xc2, //0x000025a5 movq %rax, %rdx + 0x48, 0x09, 0xda, //0x000025a8 orq %rbx, %rdx + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x000025ab jne LBB0_472 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000025b1 movq $-1, %rax + 0x31, 0xd2, //0x000025b8 xorl %edx, %edx + 0x48, 0x89, 0x55, 0xb8, //0x000025ba movq %rdx, $-72(%rbp) + 0xe9, 0x49, 0x00, 0x00, 0x00, //0x000025be jmp LBB0_473 + //0x000025c3 LBB0_472 + 0x48, 0x89, 0xda, //0x000025c3 movq %rbx, %rdx + 0x48, 0xf7, 0xd2, //0x000025c6 notq %rdx + 0x48, 0x21, 0xc2, //0x000025c9 andq %rax, %rdx + 0x48, 0x8d, 0x34, 0x12, //0x000025cc leaq (%rdx,%rdx), %rsi + 0x48, 0x09, 0xde, //0x000025d0 orq %rbx, %rsi + 0x48, 0x89, 0xf7, //0x000025d3 movq %rsi, %rdi + 0x48, 0xf7, 0xd7, //0x000025d6 notq %rdi + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000025d9 movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xd8, //0x000025e3 andq %rbx, %rax + 0x48, 0x21, 0xf8, //0x000025e6 andq %rdi, %rax + 0x31, 0xff, //0x000025e9 xorl %edi, %edi + 0x48, 0x01, 0xd0, //0x000025eb addq %rdx, %rax + 0x40, 0x0f, 0x92, 0xc7, //0x000025ee setb %dil + 0x48, 0x89, 0x7d, 0xb8, //0x000025f2 movq %rdi, $-72(%rbp) + 0x48, 0x01, 0xc0, //0x000025f6 addq %rax, %rax + 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000025f9 movabsq $6148914691236517205, %rdx + 0x48, 0x31, 0xd0, //0x00002603 xorq %rdx, %rax + 0x48, 0x21, 0xf0, //0x00002606 andq %rsi, %rax + 0x48, 0xf7, 0xd0, //0x00002609 notq %rax + //0x0000260c LBB0_473 + 0x66, 0x0f, 0x6f, 0xde, //0x0000260c movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002610 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x00002614 pmovmskb %xmm3, %edx + 0x48, 0xc1, 0xe2, 0x30, //0x00002618 shlq $48, %rdx + 0x66, 0x0f, 0x6f, 0xdf, //0x0000261c movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002620 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002624 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x20, //0x00002628 shlq $32, %rsi + 0x48, 0x09, 0xd6, //0x0000262c orq %rdx, %rsi + 0x66, 0x0f, 0x6f, 0xdd, //0x0000262f movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002633 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x00002637 pmovmskb %xmm3, %edx + 0x48, 0xc1, 0xe2, 0x10, //0x0000263b shlq $16, %rdx + 0x48, 0x09, 0xf2, //0x0000263f orq %rsi, %rdx + 0x66, 0x0f, 0x6f, 0xda, //0x00002642 movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002646 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x0000264a pmovmskb %xmm3, %esi + 0x48, 0x09, 0xd6, //0x0000264e orq %rdx, %rsi + 0x48, 0x21, 0xc6, //0x00002651 andq %rax, %rsi + 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x00002654 movq %rsi, %xmm3 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd9, 0x00, //0x00002659 pclmulqdq $0, %xmm9, %xmm3 + 0x66, 0x49, 0x0f, 0x7e, 0xde, //0x00002660 movq %xmm3, %r14 + 0x4d, 0x31, 0xce, //0x00002665 xorq %r9, %r14 + 0x66, 0x0f, 0x6f, 0xda, //0x00002668 movdqa %xmm2, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xda, //0x0000266c pcmpeqb %xmm10, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x00002671 pmovmskb %xmm3, %r10d + 0x66, 0x0f, 0x6f, 0xdd, //0x00002676 movdqa %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xda, //0x0000267a pcmpeqb %xmm10, %xmm3 + 0x66, 0x0f, 0xd7, 0xc3, //0x0000267f pmovmskb %xmm3, %eax + 0x66, 0x0f, 0x6f, 0xdf, //0x00002683 movdqa %xmm7, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xda, //0x00002687 pcmpeqb %xmm10, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x0000268c pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x6f, 0xde, //0x00002690 movdqa %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xda, //0x00002694 pcmpeqb %xmm10, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x00002699 pmovmskb %xmm3, %ebx + 0x48, 0xc1, 0xe3, 0x30, //0x0000269d shlq $48, %rbx + 0x48, 0xc1, 0xe6, 0x20, //0x000026a1 shlq $32, %rsi + 0x48, 0x09, 0xde, //0x000026a5 orq %rbx, %rsi + 0x48, 0xc1, 0xe0, 0x10, //0x000026a8 shlq $16, %rax + 0x48, 0x09, 0xf0, //0x000026ac orq %rsi, %rax + 0x49, 0x09, 0xc2, //0x000026af orq %rax, %r10 + 0x4d, 0x89, 0xf1, //0x000026b2 movq %r14, %r9 + 0x49, 0xf7, 0xd1, //0x000026b5 notq %r9 + 0x4d, 0x21, 0xca, //0x000026b8 andq %r9, %r10 + 0x66, 0x0f, 0x74, 0xd4, //0x000026bb pcmpeqb %xmm4, %xmm2 + 0x66, 0x0f, 0xd7, 0xc2, //0x000026bf pmovmskb %xmm2, %eax + 0x66, 0x0f, 0x74, 0xec, //0x000026c3 pcmpeqb %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xdd, //0x000026c7 pmovmskb %xmm5, %ebx + 0x66, 0x0f, 0x74, 0xfc, //0x000026cb pcmpeqb %xmm4, %xmm7 + 0x66, 0x0f, 0xd7, 0xff, //0x000026cf pmovmskb %xmm7, %edi + 0x66, 0x0f, 0x74, 0xf4, //0x000026d3 pcmpeqb %xmm4, %xmm6 + 0x66, 0x0f, 0xd7, 0xf6, //0x000026d7 pmovmskb %xmm6, %esi + 0x48, 0xc1, 0xe6, 0x30, //0x000026db shlq $48, %rsi + 0x48, 0xc1, 0xe7, 0x20, //0x000026df shlq $32, %rdi + 0x48, 0x09, 0xf7, //0x000026e3 orq %rsi, %rdi + 0x48, 0xc1, 0xe3, 0x10, //0x000026e6 shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x000026ea orq %rdi, %rbx + 0x48, 0x09, 0xd8, //0x000026ed orq %rbx, %rax + 0x4c, 0x21, 0xc8, //0x000026f0 andq %r9, %rax + 0x0f, 0x84, 0xce, 0xfd, 0xff, 0xff, //0x000026f3 je LBB0_468 + 0x4c, 0x8b, 0x4d, 0xc0, //0x000026f9 movq $-64(%rbp), %r9 + 0x90, 0x90, 0x90, //0x000026fd .p2align 4, 0x90 + //0x00002700 LBB0_475 + 0x48, 0x8d, 0x58, 0xff, //0x00002700 leaq $-1(%rax), %rbx + 0x48, 0x89, 0xde, //0x00002704 movq %rbx, %rsi + 0x4c, 0x21, 0xd6, //0x00002707 andq %r10, %rsi + 0x48, 0x89, 0xf7, //0x0000270a movq %rsi, %rdi + 0x48, 0xd1, 0xef, //0x0000270d shrq %rdi + 0x49, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002710 movabsq $6148914691236517205, %r8 + 0x4c, 0x21, 0xc7, //0x0000271a andq %r8, %rdi + 0x48, 0x29, 0xfe, //0x0000271d subq %rdi, %rsi + 0x48, 0x89, 0xf7, //0x00002720 movq %rsi, %rdi + 0x48, 0xba, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00002723 movabsq $3689348814741910323, %rdx + 0x48, 0x21, 0xd7, //0x0000272d andq %rdx, %rdi + 0x48, 0xc1, 0xee, 0x02, //0x00002730 shrq $2, %rsi + 0x48, 0x21, 0xd6, //0x00002734 andq %rdx, %rsi + 0x48, 0x01, 0xfe, //0x00002737 addq %rdi, %rsi + 0x48, 0x89, 0xf7, //0x0000273a movq %rsi, %rdi + 0x48, 0xc1, 0xef, 0x04, //0x0000273d shrq $4, %rdi + 0x48, 0x01, 0xf7, //0x00002741 addq %rsi, %rdi + 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00002744 movabsq $1085102592571150095, %rdx + 0x48, 0x21, 0xd7, //0x0000274e andq %rdx, %rdi + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002751 movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xfa, //0x0000275b imulq %rdx, %rdi + 0x48, 0xc1, 0xef, 0x38, //0x0000275f shrq $56, %rdi + 0x4c, 0x01, 0xdf, //0x00002763 addq %r11, %rdi + 0x48, 0x39, 0xcf, //0x00002766 cmpq %rcx, %rdi + 0x0f, 0x86, 0x96, 0x05, 0x00, 0x00, //0x00002769 jbe LBB0_519 + 0x48, 0x83, 0xc1, 0x01, //0x0000276f addq $1, %rcx + 0x48, 0x21, 0xd8, //0x00002773 andq %rbx, %rax + 0x0f, 0x85, 0x84, 0xff, 0xff, 0xff, //0x00002776 jne LBB0_475 + 0xe9, 0x46, 0xfd, 0xff, 0xff, //0x0000277c jmp LBB0_468 + //0x00002781 LBB0_477 + 0x48, 0x85, 0xc0, //0x00002781 testq %rax, %rax + 0x0f, 0x8e, 0x70, 0x06, 0x00, 0x00, //0x00002784 jle LBB0_527 + 0x48, 0x89, 0xdf, //0x0000278a movq %rbx, %rdi + 0xf3, 0x44, 0x0f, 0x7f, 0x45, 0x80, //0x0000278d movdqu %xmm8, $-128(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x70, 0xff, 0xff, 0xff, //0x00002793 movdqu %xmm8, $-144(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x0000279c movdqu %xmm8, $-160(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x000027a5 movdqu %xmm8, $-176(%rbp) + 0x44, 0x89, 0xe8, //0x000027ae movl %r13d, %eax + 0x25, 0xff, 0x0f, 0x00, 0x00, //0x000027b1 andl $4095, %eax + 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x000027b6 cmpl $4033, %eax + 0x0f, 0x82, 0x3b, 0x00, 0x00, 0x00, //0x000027bb jb LBB0_481 + 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x000027c1 cmpq $32, $-48(%rbp) + 0x0f, 0x82, 0x3c, 0x00, 0x00, 0x00, //0x000027c6 jb LBB0_482 + 0x41, 0x0f, 0x10, 0x55, 0x00, //0x000027cc movups (%r13), %xmm2 + 0x0f, 0x11, 0x95, 0x50, 0xff, 0xff, 0xff, //0x000027d1 movups %xmm2, $-176(%rbp) + 0x41, 0x0f, 0x10, 0x55, 0x10, //0x000027d8 movups $16(%r13), %xmm2 + 0x0f, 0x11, 0x95, 0x60, 0xff, 0xff, 0xff, //0x000027dd movups %xmm2, $-160(%rbp) + 0x49, 0x83, 0xc5, 0x20, //0x000027e4 addq $32, %r13 + 0x48, 0x8b, 0x45, 0xd0, //0x000027e8 movq $-48(%rbp), %rax + 0x48, 0x8d, 0x70, 0xe0, //0x000027ec leaq $-32(%rax), %rsi + 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x000027f0 leaq $-144(%rbp), %rdx + 0xe9, 0x17, 0x00, 0x00, 0x00, //0x000027f7 jmp LBB0_483 + //0x000027fc LBB0_481 + 0x4c, 0x8b, 0x65, 0xa8, //0x000027fc movq $-88(%rbp), %r12 + 0x48, 0x89, 0xfb, //0x00002800 movq %rdi, %rbx + 0xe9, 0x40, 0xfd, 0xff, 0xff, //0x00002803 jmp LBB0_470 + //0x00002808 LBB0_482 + 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00002808 leaq $-176(%rbp), %rdx + 0x48, 0x8b, 0x75, 0xd0, //0x0000280f movq $-48(%rbp), %rsi + //0x00002813 LBB0_483 + 0x48, 0x83, 0xfe, 0x10, //0x00002813 cmpq $16, %rsi + 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00002817 jb LBB0_484 + 0x41, 0x0f, 0x10, 0x55, 0x00, //0x0000281d movups (%r13), %xmm2 + 0x0f, 0x11, 0x12, //0x00002822 movups %xmm2, (%rdx) + 0x49, 0x83, 0xc5, 0x10, //0x00002825 addq $16, %r13 + 0x48, 0x83, 0xc2, 0x10, //0x00002829 addq $16, %rdx + 0x48, 0x83, 0xc6, 0xf0, //0x0000282d addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x08, //0x00002831 cmpq $8, %rsi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00002835 jae LBB0_491 + //0x0000283b LBB0_485 + 0x48, 0x83, 0xfe, 0x04, //0x0000283b cmpq $4, %rsi + 0x0f, 0x8c, 0x48, 0x00, 0x00, 0x00, //0x0000283f jl LBB0_486 + //0x00002845 LBB0_492 + 0x41, 0x8b, 0x45, 0x00, //0x00002845 movl (%r13), %eax + 0x89, 0x02, //0x00002849 movl %eax, (%rdx) + 0x49, 0x83, 0xc5, 0x04, //0x0000284b addq $4, %r13 + 0x48, 0x83, 0xc2, 0x04, //0x0000284f addq $4, %rdx + 0x48, 0x83, 0xc6, 0xfc, //0x00002853 addq $-4, %rsi + 0x48, 0x83, 0xfe, 0x02, //0x00002857 cmpq $2, %rsi + 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x0000285b jae LBB0_487 + 0xe9, 0x45, 0x00, 0x00, 0x00, //0x00002861 jmp LBB0_488 + //0x00002866 LBB0_484 + 0x48, 0x83, 0xfe, 0x08, //0x00002866 cmpq $8, %rsi + 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x0000286a jb LBB0_485 + //0x00002870 LBB0_491 + 0x49, 0x8b, 0x45, 0x00, //0x00002870 movq (%r13), %rax + 0x48, 0x89, 0x02, //0x00002874 movq %rax, (%rdx) + 0x49, 0x83, 0xc5, 0x08, //0x00002877 addq $8, %r13 + 0x48, 0x83, 0xc2, 0x08, //0x0000287b addq $8, %rdx + 0x48, 0x83, 0xc6, 0xf8, //0x0000287f addq $-8, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x00002883 cmpq $4, %rsi + 0x0f, 0x8d, 0xb8, 0xff, 0xff, 0xff, //0x00002887 jge LBB0_492 + //0x0000288d LBB0_486 + 0x48, 0x83, 0xfe, 0x02, //0x0000288d cmpq $2, %rsi + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00002891 jb LBB0_488 + //0x00002897 LBB0_487 + 0x41, 0x0f, 0xb7, 0x45, 0x00, //0x00002897 movzwl (%r13), %eax + 0x66, 0x89, 0x02, //0x0000289c movw %ax, (%rdx) + 0x49, 0x83, 0xc5, 0x02, //0x0000289f addq $2, %r13 + 0x48, 0x83, 0xc2, 0x02, //0x000028a3 addq $2, %rdx + 0x48, 0x83, 0xc6, 0xfe, //0x000028a7 addq $-2, %rsi + //0x000028ab LBB0_488 + 0x4c, 0x89, 0xe8, //0x000028ab movq %r13, %rax + 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x000028ae leaq $-176(%rbp), %r13 + 0x48, 0x85, 0xf6, //0x000028b5 testq %rsi, %rsi + 0x4c, 0x8b, 0x65, 0xa8, //0x000028b8 movq $-88(%rbp), %r12 + 0x48, 0x89, 0xfb, //0x000028bc movq %rdi, %rbx + 0x0f, 0x84, 0x83, 0xfc, 0xff, 0xff, //0x000028bf je LBB0_470 + 0x8a, 0x00, //0x000028c5 movb (%rax), %al + 0x88, 0x02, //0x000028c7 movb %al, (%rdx) + 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x000028c9 leaq $-176(%rbp), %r13 + 0xe9, 0x73, 0xfc, 0xff, 0xff, //0x000028d0 jmp LBB0_470 + //0x000028d5 LBB0_493 + 0x49, 0x8b, 0x01, //0x000028d5 movq (%r9), %rax + 0x4c, 0x29, 0xd8, //0x000028d8 subq %r11, %rax + 0x4d, 0x01, 0xdd, //0x000028db addq %r11, %r13 + 0x45, 0x31, 0xc9, //0x000028de xorl %r9d, %r9d + 0x31, 0xdb, //0x000028e1 xorl %ebx, %ebx + 0x45, 0x31, 0xdb, //0x000028e3 xorl %r11d, %r11d + 0x31, 0xc9, //0x000028e6 xorl %ecx, %ecx + 0xe9, 0x73, 0x00, 0x00, 0x00, //0x000028e8 jmp LBB0_495 + //0x000028ed LBB0_494 + 0x49, 0xc1, 0xfe, 0x3f, //0x000028ed sarq $63, %r14 + 0x4c, 0x89, 0xd0, //0x000028f1 movq %r10, %rax + 0x48, 0xd1, 0xe8, //0x000028f4 shrq %rax + 0x48, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000028f7 movabsq $6148914691236517205, %rsi + 0x48, 0x21, 0xf0, //0x00002901 andq %rsi, %rax + 0x49, 0x29, 0xc2, //0x00002904 subq %rax, %r10 + 0x4c, 0x89, 0xd0, //0x00002907 movq %r10, %rax + 0x48, 0xba, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x0000290a movabsq $3689348814741910323, %rdx + 0x48, 0x21, 0xd0, //0x00002914 andq %rdx, %rax + 0x49, 0xc1, 0xea, 0x02, //0x00002917 shrq $2, %r10 + 0x49, 0x21, 0xd2, //0x0000291b andq %rdx, %r10 + 0x49, 0x01, 0xc2, //0x0000291e addq %rax, %r10 + 0x4c, 0x89, 0xd0, //0x00002921 movq %r10, %rax + 0x48, 0xc1, 0xe8, 0x04, //0x00002924 shrq $4, %rax + 0x4c, 0x01, 0xd0, //0x00002928 addq %r10, %rax + 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000292b movabsq $1085102592571150095, %rdx + 0x48, 0x21, 0xd0, //0x00002935 andq %rdx, %rax + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002938 movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xc2, //0x00002942 imulq %rdx, %rax + 0x48, 0xc1, 0xe8, 0x38, //0x00002946 shrq $56, %rax + 0x49, 0x01, 0xc3, //0x0000294a addq %rax, %r11 + 0x49, 0x83, 0xc5, 0x40, //0x0000294d addq $64, %r13 + 0x48, 0x8b, 0x45, 0xd0, //0x00002951 movq $-48(%rbp), %rax + 0x48, 0x83, 0xc0, 0xc0, //0x00002955 addq $-64, %rax + 0x4d, 0x89, 0xf1, //0x00002959 movq %r14, %r9 + 0x48, 0x8b, 0x5d, 0xb8, //0x0000295c movq $-72(%rbp), %rbx + //0x00002960 LBB0_495 + 0x48, 0x83, 0xf8, 0x40, //0x00002960 cmpq $64, %rax + 0x48, 0x89, 0x45, 0xd0, //0x00002964 movq %rax, $-48(%rbp) + 0x0f, 0x8c, 0x43, 0x02, 0x00, 0x00, //0x00002968 jl LBB0_503 + //0x0000296e LBB0_496 + 0xf3, 0x41, 0x0f, 0x6f, 0x55, 0x00, //0x0000296e movdqu (%r13), %xmm2 + 0xf3, 0x41, 0x0f, 0x6f, 0x6d, 0x10, //0x00002974 movdqu $16(%r13), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x7d, 0x20, //0x0000297a movdqu $32(%r13), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x75, 0x30, //0x00002980 movdqu $48(%r13), %xmm6 + 0x66, 0x0f, 0x6f, 0xda, //0x00002986 movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000298a pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xc3, //0x0000298e pmovmskb %xmm3, %eax + 0x66, 0x0f, 0x6f, 0xdd, //0x00002992 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002996 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x0000299a pmovmskb %xmm3, %edx + 0x66, 0x0f, 0x6f, 0xdf, //0x0000299e movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x000029a2 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x000029a6 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x6f, 0xde, //0x000029aa movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x000029ae pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x000029b2 pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe7, 0x30, //0x000029b6 shlq $48, %rdi + 0x48, 0xc1, 0xe6, 0x20, //0x000029ba shlq $32, %rsi + 0x48, 0x09, 0xfe, //0x000029be orq %rdi, %rsi + 0x48, 0xc1, 0xe2, 0x10, //0x000029c1 shlq $16, %rdx + 0x48, 0x09, 0xf2, //0x000029c5 orq %rsi, %rdx + 0x48, 0x09, 0xd0, //0x000029c8 orq %rdx, %rax + 0x48, 0x89, 0xc2, //0x000029cb movq %rax, %rdx + 0x48, 0x09, 0xda, //0x000029ce orq %rbx, %rdx + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x000029d1 jne LBB0_498 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000029d7 movq $-1, %rax + 0x31, 0xd2, //0x000029de xorl %edx, %edx + 0x48, 0x89, 0x55, 0xb8, //0x000029e0 movq %rdx, $-72(%rbp) + 0xe9, 0x49, 0x00, 0x00, 0x00, //0x000029e4 jmp LBB0_499 + //0x000029e9 LBB0_498 + 0x48, 0x89, 0xda, //0x000029e9 movq %rbx, %rdx + 0x48, 0xf7, 0xd2, //0x000029ec notq %rdx + 0x48, 0x21, 0xc2, //0x000029ef andq %rax, %rdx + 0x48, 0x8d, 0x34, 0x12, //0x000029f2 leaq (%rdx,%rdx), %rsi + 0x48, 0x09, 0xde, //0x000029f6 orq %rbx, %rsi + 0x48, 0x89, 0xf7, //0x000029f9 movq %rsi, %rdi + 0x48, 0xf7, 0xd7, //0x000029fc notq %rdi + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000029ff movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xd8, //0x00002a09 andq %rbx, %rax + 0x48, 0x21, 0xf8, //0x00002a0c andq %rdi, %rax + 0x31, 0xff, //0x00002a0f xorl %edi, %edi + 0x48, 0x01, 0xd0, //0x00002a11 addq %rdx, %rax + 0x40, 0x0f, 0x92, 0xc7, //0x00002a14 setb %dil + 0x48, 0x89, 0x7d, 0xb8, //0x00002a18 movq %rdi, $-72(%rbp) + 0x48, 0x01, 0xc0, //0x00002a1c addq %rax, %rax + 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002a1f movabsq $6148914691236517205, %rdx + 0x48, 0x31, 0xd0, //0x00002a29 xorq %rdx, %rax + 0x48, 0x21, 0xf0, //0x00002a2c andq %rsi, %rax + 0x48, 0xf7, 0xd0, //0x00002a2f notq %rax + //0x00002a32 LBB0_499 + 0x66, 0x0f, 0x6f, 0xde, //0x00002a32 movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002a36 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x00002a3a pmovmskb %xmm3, %edx + 0x48, 0xc1, 0xe2, 0x30, //0x00002a3e shlq $48, %rdx + 0x66, 0x0f, 0x6f, 0xdf, //0x00002a42 movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002a46 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002a4a pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x20, //0x00002a4e shlq $32, %rsi + 0x48, 0x09, 0xd6, //0x00002a52 orq %rdx, %rsi + 0x66, 0x0f, 0x6f, 0xdd, //0x00002a55 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002a59 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x00002a5d pmovmskb %xmm3, %edx + 0x48, 0xc1, 0xe2, 0x10, //0x00002a61 shlq $16, %rdx + 0x48, 0x09, 0xf2, //0x00002a65 orq %rsi, %rdx + 0x66, 0x0f, 0x6f, 0xda, //0x00002a68 movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002a6c pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002a70 pmovmskb %xmm3, %esi + 0x48, 0x09, 0xd6, //0x00002a74 orq %rdx, %rsi + 0x48, 0x21, 0xc6, //0x00002a77 andq %rax, %rsi + 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x00002a7a movq %rsi, %xmm3 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd9, 0x00, //0x00002a7f pclmulqdq $0, %xmm9, %xmm3 + 0x66, 0x49, 0x0f, 0x7e, 0xde, //0x00002a86 movq %xmm3, %r14 + 0x4d, 0x31, 0xce, //0x00002a8b xorq %r9, %r14 + 0x66, 0x0f, 0x6f, 0xda, //0x00002a8e movdqa %xmm2, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00002a92 pcmpeqb %xmm11, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x00002a97 pmovmskb %xmm3, %r10d + 0x66, 0x0f, 0x6f, 0xdd, //0x00002a9c movdqa %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00002aa0 pcmpeqb %xmm11, %xmm3 + 0x66, 0x0f, 0xd7, 0xc3, //0x00002aa5 pmovmskb %xmm3, %eax + 0x66, 0x0f, 0x6f, 0xdf, //0x00002aa9 movdqa %xmm7, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00002aad pcmpeqb %xmm11, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002ab2 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x6f, 0xde, //0x00002ab6 movdqa %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00002aba pcmpeqb %xmm11, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x00002abf pmovmskb %xmm3, %ebx + 0x48, 0xc1, 0xe3, 0x30, //0x00002ac3 shlq $48, %rbx + 0x48, 0xc1, 0xe6, 0x20, //0x00002ac7 shlq $32, %rsi + 0x48, 0x09, 0xde, //0x00002acb orq %rbx, %rsi + 0x48, 0xc1, 0xe0, 0x10, //0x00002ace shlq $16, %rax + 0x48, 0x09, 0xf0, //0x00002ad2 orq %rsi, %rax + 0x49, 0x09, 0xc2, //0x00002ad5 orq %rax, %r10 + 0x4d, 0x89, 0xf1, //0x00002ad8 movq %r14, %r9 + 0x49, 0xf7, 0xd1, //0x00002adb notq %r9 + 0x4d, 0x21, 0xca, //0x00002ade andq %r9, %r10 + 0x66, 0x41, 0x0f, 0x74, 0xd4, //0x00002ae1 pcmpeqb %xmm12, %xmm2 + 0x66, 0x0f, 0xd7, 0xc2, //0x00002ae6 pmovmskb %xmm2, %eax + 0x66, 0x41, 0x0f, 0x74, 0xec, //0x00002aea pcmpeqb %xmm12, %xmm5 + 0x66, 0x0f, 0xd7, 0xdd, //0x00002aef pmovmskb %xmm5, %ebx + 0x66, 0x41, 0x0f, 0x74, 0xfc, //0x00002af3 pcmpeqb %xmm12, %xmm7 + 0x66, 0x0f, 0xd7, 0xff, //0x00002af8 pmovmskb %xmm7, %edi + 0x66, 0x41, 0x0f, 0x74, 0xf4, //0x00002afc pcmpeqb %xmm12, %xmm6 + 0x66, 0x0f, 0xd7, 0xf6, //0x00002b01 pmovmskb %xmm6, %esi + 0x48, 0xc1, 0xe6, 0x30, //0x00002b05 shlq $48, %rsi + 0x48, 0xc1, 0xe7, 0x20, //0x00002b09 shlq $32, %rdi + 0x48, 0x09, 0xf7, //0x00002b0d orq %rsi, %rdi + 0x48, 0xc1, 0xe3, 0x10, //0x00002b10 shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x00002b14 orq %rdi, %rbx + 0x48, 0x09, 0xd8, //0x00002b17 orq %rbx, %rax + 0x4c, 0x21, 0xc8, //0x00002b1a andq %r9, %rax + 0x0f, 0x84, 0xca, 0xfd, 0xff, 0xff, //0x00002b1d je LBB0_494 + 0x4c, 0x8b, 0x4d, 0xc0, //0x00002b23 movq $-64(%rbp), %r9 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002b27 .p2align 4, 0x90 + //0x00002b30 LBB0_501 + 0x48, 0x8d, 0x58, 0xff, //0x00002b30 leaq $-1(%rax), %rbx + 0x48, 0x89, 0xde, //0x00002b34 movq %rbx, %rsi + 0x4c, 0x21, 0xd6, //0x00002b37 andq %r10, %rsi + 0x48, 0x89, 0xf7, //0x00002b3a movq %rsi, %rdi + 0x48, 0xd1, 0xef, //0x00002b3d shrq %rdi + 0x49, 0xb8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002b40 movabsq $6148914691236517205, %r8 + 0x4c, 0x21, 0xc7, //0x00002b4a andq %r8, %rdi + 0x48, 0x29, 0xfe, //0x00002b4d subq %rdi, %rsi + 0x48, 0x89, 0xf7, //0x00002b50 movq %rsi, %rdi + 0x48, 0xba, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00002b53 movabsq $3689348814741910323, %rdx + 0x48, 0x21, 0xd7, //0x00002b5d andq %rdx, %rdi + 0x48, 0xc1, 0xee, 0x02, //0x00002b60 shrq $2, %rsi + 0x48, 0x21, 0xd6, //0x00002b64 andq %rdx, %rsi + 0x48, 0x01, 0xfe, //0x00002b67 addq %rdi, %rsi + 0x48, 0x89, 0xf7, //0x00002b6a movq %rsi, %rdi + 0x48, 0xc1, 0xef, 0x04, //0x00002b6d shrq $4, %rdi + 0x48, 0x01, 0xf7, //0x00002b71 addq %rsi, %rdi + 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00002b74 movabsq $1085102592571150095, %rdx + 0x48, 0x21, 0xd7, //0x00002b7e andq %rdx, %rdi + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002b81 movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xfa, //0x00002b8b imulq %rdx, %rdi + 0x48, 0xc1, 0xef, 0x38, //0x00002b8f shrq $56, %rdi + 0x4c, 0x01, 0xdf, //0x00002b93 addq %r11, %rdi + 0x48, 0x39, 0xcf, //0x00002b96 cmpq %rcx, %rdi + 0x0f, 0x86, 0x66, 0x01, 0x00, 0x00, //0x00002b99 jbe LBB0_519 + 0x48, 0x83, 0xc1, 0x01, //0x00002b9f addq $1, %rcx + 0x48, 0x21, 0xd8, //0x00002ba3 andq %rbx, %rax + 0x0f, 0x85, 0x84, 0xff, 0xff, 0xff, //0x00002ba6 jne LBB0_501 + 0xe9, 0x3c, 0xfd, 0xff, 0xff, //0x00002bac jmp LBB0_494 + //0x00002bb1 LBB0_503 + 0x48, 0x85, 0xc0, //0x00002bb1 testq %rax, %rax + 0x0f, 0x8e, 0x40, 0x02, 0x00, 0x00, //0x00002bb4 jle LBB0_527 + 0x48, 0x89, 0xdf, //0x00002bba movq %rbx, %rdi + 0xf3, 0x44, 0x0f, 0x7f, 0x45, 0x80, //0x00002bbd movdqu %xmm8, $-128(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x70, 0xff, 0xff, 0xff, //0x00002bc3 movdqu %xmm8, $-144(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x00002bcc movdqu %xmm8, $-160(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x00002bd5 movdqu %xmm8, $-176(%rbp) + 0x44, 0x89, 0xe8, //0x00002bde movl %r13d, %eax + 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00002be1 andl $4095, %eax + 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00002be6 cmpl $4033, %eax + 0x0f, 0x82, 0x3b, 0x00, 0x00, 0x00, //0x00002beb jb LBB0_507 + 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x00002bf1 cmpq $32, $-48(%rbp) + 0x0f, 0x82, 0x3c, 0x00, 0x00, 0x00, //0x00002bf6 jb LBB0_508 + 0x41, 0x0f, 0x10, 0x55, 0x00, //0x00002bfc movups (%r13), %xmm2 + 0x0f, 0x11, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00002c01 movups %xmm2, $-176(%rbp) + 0x41, 0x0f, 0x10, 0x55, 0x10, //0x00002c08 movups $16(%r13), %xmm2 + 0x0f, 0x11, 0x95, 0x60, 0xff, 0xff, 0xff, //0x00002c0d movups %xmm2, $-160(%rbp) + 0x49, 0x83, 0xc5, 0x20, //0x00002c14 addq $32, %r13 + 0x48, 0x8b, 0x45, 0xd0, //0x00002c18 movq $-48(%rbp), %rax + 0x48, 0x8d, 0x70, 0xe0, //0x00002c1c leaq $-32(%rax), %rsi + 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00002c20 leaq $-144(%rbp), %rdx + 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00002c27 jmp LBB0_509 + //0x00002c2c LBB0_507 + 0x4c, 0x8b, 0x65, 0xa8, //0x00002c2c movq $-88(%rbp), %r12 + 0x48, 0x89, 0xfb, //0x00002c30 movq %rdi, %rbx + 0xe9, 0x36, 0xfd, 0xff, 0xff, //0x00002c33 jmp LBB0_496 + //0x00002c38 LBB0_508 + 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00002c38 leaq $-176(%rbp), %rdx + 0x48, 0x8b, 0x75, 0xd0, //0x00002c3f movq $-48(%rbp), %rsi + //0x00002c43 LBB0_509 + 0x48, 0x83, 0xfe, 0x10, //0x00002c43 cmpq $16, %rsi + 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00002c47 jb LBB0_510 + 0x41, 0x0f, 0x10, 0x55, 0x00, //0x00002c4d movups (%r13), %xmm2 + 0x0f, 0x11, 0x12, //0x00002c52 movups %xmm2, (%rdx) + 0x49, 0x83, 0xc5, 0x10, //0x00002c55 addq $16, %r13 + 0x48, 0x83, 0xc2, 0x10, //0x00002c59 addq $16, %rdx + 0x48, 0x83, 0xc6, 0xf0, //0x00002c5d addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x08, //0x00002c61 cmpq $8, %rsi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00002c65 jae LBB0_517 + //0x00002c6b LBB0_511 + 0x48, 0x83, 0xfe, 0x04, //0x00002c6b cmpq $4, %rsi + 0x0f, 0x8c, 0x48, 0x00, 0x00, 0x00, //0x00002c6f jl LBB0_512 + //0x00002c75 LBB0_518 + 0x41, 0x8b, 0x45, 0x00, //0x00002c75 movl (%r13), %eax + 0x89, 0x02, //0x00002c79 movl %eax, (%rdx) + 0x49, 0x83, 0xc5, 0x04, //0x00002c7b addq $4, %r13 + 0x48, 0x83, 0xc2, 0x04, //0x00002c7f addq $4, %rdx + 0x48, 0x83, 0xc6, 0xfc, //0x00002c83 addq $-4, %rsi + 0x48, 0x83, 0xfe, 0x02, //0x00002c87 cmpq $2, %rsi + 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x00002c8b jae LBB0_513 + 0xe9, 0x45, 0x00, 0x00, 0x00, //0x00002c91 jmp LBB0_514 + //0x00002c96 LBB0_510 + 0x48, 0x83, 0xfe, 0x08, //0x00002c96 cmpq $8, %rsi + 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x00002c9a jb LBB0_511 + //0x00002ca0 LBB0_517 + 0x49, 0x8b, 0x45, 0x00, //0x00002ca0 movq (%r13), %rax + 0x48, 0x89, 0x02, //0x00002ca4 movq %rax, (%rdx) + 0x49, 0x83, 0xc5, 0x08, //0x00002ca7 addq $8, %r13 + 0x48, 0x83, 0xc2, 0x08, //0x00002cab addq $8, %rdx + 0x48, 0x83, 0xc6, 0xf8, //0x00002caf addq $-8, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x00002cb3 cmpq $4, %rsi + 0x0f, 0x8d, 0xb8, 0xff, 0xff, 0xff, //0x00002cb7 jge LBB0_518 + //0x00002cbd LBB0_512 + 0x48, 0x83, 0xfe, 0x02, //0x00002cbd cmpq $2, %rsi + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00002cc1 jb LBB0_514 + //0x00002cc7 LBB0_513 + 0x41, 0x0f, 0xb7, 0x45, 0x00, //0x00002cc7 movzwl (%r13), %eax + 0x66, 0x89, 0x02, //0x00002ccc movw %ax, (%rdx) + 0x49, 0x83, 0xc5, 0x02, //0x00002ccf addq $2, %r13 + 0x48, 0x83, 0xc2, 0x02, //0x00002cd3 addq $2, %rdx + 0x48, 0x83, 0xc6, 0xfe, //0x00002cd7 addq $-2, %rsi + //0x00002cdb LBB0_514 + 0x4c, 0x89, 0xe8, //0x00002cdb movq %r13, %rax + 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x00002cde leaq $-176(%rbp), %r13 + 0x48, 0x85, 0xf6, //0x00002ce5 testq %rsi, %rsi + 0x4c, 0x8b, 0x65, 0xa8, //0x00002ce8 movq $-88(%rbp), %r12 + 0x48, 0x89, 0xfb, //0x00002cec movq %rdi, %rbx + 0x0f, 0x84, 0x79, 0xfc, 0xff, 0xff, //0x00002cef je LBB0_496 + 0x8a, 0x00, //0x00002cf5 movb (%rax), %al + 0x88, 0x02, //0x00002cf7 movb %al, (%rdx) + 0x4c, 0x8d, 0xad, 0x50, 0xff, 0xff, 0xff, //0x00002cf9 leaq $-176(%rbp), %r13 + 0xe9, 0x69, 0xfc, 0xff, 0xff, //0x00002d00 jmp LBB0_496 + //0x00002d05 LBB0_519 + 0x49, 0x8b, 0x09, //0x00002d05 movq (%r9), %rcx + 0x48, 0x0f, 0xbc, 0xc0, //0x00002d08 bsfq %rax, %rax + 0x48, 0x2b, 0x45, 0xd0, //0x00002d0c subq $-48(%rbp), %rax + 0x4c, 0x8d, 0x1c, 0x08, //0x00002d10 leaq (%rax,%rcx), %r11 + 0x49, 0x83, 0xc3, 0x01, //0x00002d14 addq $1, %r11 + 0x4c, 0x8b, 0x45, 0xc8, //0x00002d18 movq $-56(%rbp), %r8 + 0x4d, 0x89, 0x18, //0x00002d1c movq %r11, (%r8) + 0x49, 0x8b, 0x01, //0x00002d1f movq (%r9), %rax + 0x49, 0x39, 0xc3, //0x00002d22 cmpq %rax, %r11 + 0x4c, 0x0f, 0x47, 0xd8, //0x00002d25 cmovaq %rax, %r11 + 0x4d, 0x89, 0x18, //0x00002d29 movq %r11, (%r8) + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002d2c movabsq $4294977024, %r14 + 0xe9, 0x1b, 0xf6, 0xff, 0xff, //0x00002d36 jmp LBB0_436 + //0x00002d3b LBB0_430 + 0x4d, 0x85, 0xd2, //0x00002d3b testq %r10, %r10 + 0x0f, 0x85, 0xc9, 0x00, 0x00, 0x00, //0x00002d3e jne LBB0_528 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002d44 leaq (%r14,%r9), %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002d48 addq $1, %rax + 0x49, 0xf7, 0xd6, //0x00002d4c notq %r14 + 0x4d, 0x01, 0xc6, //0x00002d4f addq %r8, %r14 + //0x00002d52 LBB0_432 + 0x4c, 0x8b, 0x65, 0xa8, //0x00002d52 movq $-88(%rbp), %r12 + 0x4d, 0x85, 0xf6, //0x00002d56 testq %r14, %r14 + 0x4c, 0x8b, 0x45, 0xc8, //0x00002d59 movq $-56(%rbp), %r8 + 0x4c, 0x8b, 0x4d, 0xc0, //0x00002d5d movq $-64(%rbp), %r9 + 0x0f, 0x8f, 0x1d, 0x00, 0x00, 0x00, //0x00002d61 jg LBB0_521 + 0xe9, 0x45, 0x00, 0x00, 0x00, //0x00002d67 jmp LBB0_433 + //0x00002d6c LBB0_520 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002d6c movq $-2, %rcx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002d73 movl $2, %esi + 0x48, 0x01, 0xf0, //0x00002d78 addq %rsi, %rax + 0x49, 0x01, 0xce, //0x00002d7b addq %rcx, %r14 + 0x0f, 0x8e, 0x2d, 0x00, 0x00, 0x00, //0x00002d7e jle LBB0_433 + //0x00002d84 LBB0_521 + 0x0f, 0xb6, 0x08, //0x00002d84 movzbl (%rax), %ecx + 0x80, 0xf9, 0x5c, //0x00002d87 cmpb $92, %cl + 0x0f, 0x84, 0xdc, 0xff, 0xff, 0xff, //0x00002d8a je LBB0_520 + 0x80, 0xf9, 0x22, //0x00002d90 cmpb $34, %cl + 0x0f, 0x84, 0x27, 0x00, 0x00, 0x00, //0x00002d93 je LBB0_524 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002d99 movq $-1, %rcx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002da0 movl $1, %esi + 0x48, 0x01, 0xf0, //0x00002da5 addq %rsi, %rax + 0x49, 0x01, 0xce, //0x00002da8 addq %rcx, %r14 + 0x0f, 0x8f, 0xd3, 0xff, 0xff, 0xff, //0x00002dab jg LBB0_521 + //0x00002db1 LBB0_433 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002db1 movabsq $4294977024, %r14 + 0xe9, 0x96, 0xf5, 0xff, 0xff, //0x00002dbb jmp LBB0_436 + //0x00002dc0 LBB0_524 + 0x4c, 0x29, 0xe8, //0x00002dc0 subq %r13, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002dc3 addq $1, %rax + 0x49, 0x89, 0x00, //0x00002dc7 movq %rax, (%r8) + 0x49, 0x89, 0xc3, //0x00002dca movq %rax, %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002dcd movabsq $4294977024, %r14 + 0xe9, 0x7a, 0xf5, 0xff, 0xff, //0x00002dd7 jmp LBB0_436 + //0x00002ddc LBB0_525 + 0x4d, 0x01, 0xeb, //0x00002ddc addq %r13, %r11 + 0x48, 0x85, 0xc0, //0x00002ddf testq %rax, %rax + 0x4c, 0x8b, 0x45, 0xc8, //0x00002de2 movq $-56(%rbp), %r8 + 0x0f, 0x85, 0x6c, 0xf3, 0xff, 0xff, //0x00002de6 jne LBB0_406 + 0xe9, 0xb0, 0xf3, 0xff, 0xff, //0x00002dec jmp LBB0_413 + //0x00002df1 LBB0_526 + 0x4b, 0x8d, 0x04, 0x2b, //0x00002df1 leaq (%r11,%r13), %rax + 0xe9, 0x58, 0xff, 0xff, 0xff, //0x00002df5 jmp LBB0_432 + //0x00002dfa LBB0_527 + 0x4c, 0x8b, 0x4d, 0xc0, //0x00002dfa movq $-64(%rbp), %r9 + 0x4d, 0x8b, 0x19, //0x00002dfe movq (%r9), %r11 + 0x4c, 0x8b, 0x45, 0xc8, //0x00002e01 movq $-56(%rbp), %r8 + 0x4d, 0x89, 0x18, //0x00002e05 movq %r11, (%r8) + 0xe9, 0x1b, 0xf5, 0xff, 0xff, //0x00002e08 jmp LBB0_427 + //0x00002e0d LBB0_528 + 0x49, 0x8d, 0x40, 0xff, //0x00002e0d leaq $-1(%r8), %rax + 0x4c, 0x39, 0xf0, //0x00002e11 cmpq %r14, %rax + 0x0f, 0x85, 0x09, 0x00, 0x00, 0x00, //0x00002e14 jne LBB0_530 + 0x4c, 0x8b, 0x45, 0xc8, //0x00002e1a movq $-56(%rbp), %r8 + 0xe9, 0x01, 0xf5, 0xff, 0xff, //0x00002e1e jmp LBB0_426 + //0x00002e23 LBB0_530 + 0x4b, 0x8d, 0x04, 0x0e, //0x00002e23 leaq (%r14,%r9), %rax + 0x48, 0x83, 0xc0, 0x02, //0x00002e27 addq $2, %rax + 0x4d, 0x29, 0xf0, //0x00002e2b subq %r14, %r8 + 0x49, 0x83, 0xc0, 0xfe, //0x00002e2e addq $-2, %r8 + 0x4d, 0x89, 0xc6, //0x00002e32 movq %r8, %r14 + 0xe9, 0x18, 0xff, 0xff, 0xff, //0x00002e35 jmp LBB0_432 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002e3a .p2align 4, 0x90 + //0x00002e40 LBB0_464 + 0x48, 0x8b, 0x4d, 0xb0, //0x00002e40 movq $-80(%rbp), %rcx + 0x48, 0x83, 0xc1, 0x10, //0x00002e44 addq $16, %rcx + 0x4c, 0x89, 0xd8, //0x00002e48 movq %r11, %rax + 0x48, 0x89, 0x4d, 0xb0, //0x00002e4b movq %rcx, $-80(%rbp) + 0x48, 0x3b, 0x8d, 0x30, 0xff, 0xff, 0xff, //0x00002e4f cmpq $-208(%rbp), %rcx + 0x4c, 0x8b, 0x55, 0xa0, //0x00002e56 movq $-96(%rbp), %r10 + 0x0f, 0x85, 0x43, 0xd3, 0xff, 0xff, //0x00002e5a jne LBB0_2 + //0x00002e60 LBB0_465 + 0x4d, 0x85, 0xd2, //0x00002e60 testq %r10, %r10 + 0x0f, 0x84, 0xb3, 0x00, 0x00, 0x00, //0x00002e63 je LBB0_531 + 0x0f, 0x10, 0x05, 0x10, 0xd2, 0xff, 0xff, //0x00002e69 movups $-11760(%rip), %xmm0 /* LCPI0_8+0(%rip) */ + 0x41, 0x0f, 0x11, 0x02, //0x00002e70 movups %xmm0, (%r10) + 0x4d, 0x8b, 0x2c, 0x24, //0x00002e74 movq (%r12), %r13 + 0x4c, 0x89, 0xe8, //0x00002e78 movq %r13, %rax + 0x48, 0xf7, 0xd0, //0x00002e7b notq %rax + 0x48, 0x89, 0x85, 0x48, 0xff, 0xff, 0xff, //0x00002e7e movq %rax, $-184(%rbp) + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00002e85 movl $1, %eax + 0x4c, 0x29, 0xe8, //0x00002e8a subq %r13, %rax + 0x48, 0x89, 0x45, 0x98, //0x00002e8d movq %rax, $-104(%rbp) + 0x4c, 0x89, 0xe8, //0x00002e91 movq %r13, %rax + 0x48, 0xf7, 0xd8, //0x00002e94 negq %rax + 0x48, 0x89, 0x85, 0x38, 0xff, 0xff, 0xff, //0x00002e97 movq %rax, $-200(%rbp) + 0x49, 0x8d, 0x45, 0xff, //0x00002e9e leaq $-1(%r13), %rax + 0x48, 0x89, 0x45, 0xa8, //0x00002ea2 movq %rax, $-88(%rbp) + 0x49, 0x8d, 0x45, 0xfe, //0x00002ea6 leaq $-2(%r13), %rax + 0x48, 0x89, 0x85, 0x40, 0xff, 0xff, 0xff, //0x00002eaa movq %rax, $-192(%rbp) + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002eb1 movq $-1, %r15 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002eb8 movabsq $4294977024, %r11 + 0xf3, 0x0f, 0x6f, 0x05, 0x66, 0xd1, 0xff, 0xff, //0x00002ec2 movdqu $-11930(%rip), %xmm0 /* LCPI0_3+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0x6e, 0xd1, 0xff, 0xff, //0x00002eca movdqu $-11922(%rip), %xmm1 /* LCPI0_4+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x05, 0xb5, 0xd1, 0xff, 0xff, //0x00002ed2 movdqu $-11851(%rip), %xmm8 /* LCPI0_9+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x1d, 0xbd, 0xd1, 0xff, 0xff, //0x00002edb movdqu $-11843(%rip), %xmm3 /* LCPI0_10+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x0d, 0xc4, 0xd1, 0xff, 0xff, //0x00002ee3 movdqu $-11836(%rip), %xmm9 /* LCPI0_11+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0xcb, 0xd1, 0xff, 0xff, //0x00002eec movdqu $-11829(%rip), %xmm10 /* LCPI0_12+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x12, 0xd1, 0xff, 0xff, //0x00002ef5 movdqu $-12014(%rip), %xmm11 /* LCPI0_1+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x25, 0xc9, 0xd1, 0xff, 0xff, //0x00002efe movdqu $-11831(%rip), %xmm12 /* LCPI0_13+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xd0, 0xd1, 0xff, 0xff, //0x00002f07 movdqu $-11824(%rip), %xmm13 /* LCPI0_14+0(%rip) */ + 0x4c, 0x8d, 0x35, 0x99, 0x2a, 0x00, 0x00, //0x00002f10 leaq $10905(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0xe9, 0xa3, 0x01, 0x00, 0x00, //0x00002f17 jmp LBB0_562 + //0x00002f1c LBB0_531 + 0x4d, 0x8b, 0x1c, 0x24, //0x00002f1c movq (%r12), %r11 + 0x49, 0x8b, 0x7c, 0x24, 0x08, //0x00002f20 movq $8(%r12), %rdi + 0x49, 0x8b, 0x30, //0x00002f25 movq (%r8), %rsi + 0x48, 0x39, 0xfe, //0x00002f28 cmpq %rdi, %rsi + 0x0f, 0x83, 0x26, 0x00, 0x00, 0x00, //0x00002f2b jae LBB0_536 + 0x41, 0x8a, 0x04, 0x33, //0x00002f31 movb (%r11,%rsi), %al + 0x3c, 0x0d, //0x00002f35 cmpb $13, %al + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x00002f37 je LBB0_536 + 0x3c, 0x20, //0x00002f3d cmpb $32, %al + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002f3f je LBB0_536 + 0x04, 0xf7, //0x00002f45 addb $-9, %al + 0x3c, 0x01, //0x00002f47 cmpb $1, %al + 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x00002f49 jbe LBB0_536 + 0x49, 0x89, 0xf4, //0x00002f4f movq %rsi, %r12 + 0xe9, 0x43, 0x18, 0x00, 0x00, //0x00002f52 jmp LBB0_878 + //0x00002f57 LBB0_536 + 0x4c, 0x8d, 0x66, 0x01, //0x00002f57 leaq $1(%rsi), %r12 + 0x49, 0x39, 0xfc, //0x00002f5b cmpq %rdi, %r12 + 0x0f, 0x83, 0x1e, 0x00, 0x00, 0x00, //0x00002f5e jae LBB0_540 + 0x43, 0x8a, 0x04, 0x23, //0x00002f64 movb (%r11,%r12), %al + 0x3c, 0x0d, //0x00002f68 cmpb $13, %al + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002f6a je LBB0_540 + 0x3c, 0x20, //0x00002f70 cmpb $32, %al + 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x00002f72 je LBB0_540 + 0x04, 0xf7, //0x00002f78 addb $-9, %al + 0x3c, 0x01, //0x00002f7a cmpb $1, %al + 0x0f, 0x87, 0x18, 0x18, 0x00, 0x00, //0x00002f7c ja LBB0_878 + //0x00002f82 LBB0_540 + 0x4c, 0x8d, 0x66, 0x02, //0x00002f82 leaq $2(%rsi), %r12 + 0x49, 0x39, 0xfc, //0x00002f86 cmpq %rdi, %r12 + 0x0f, 0x83, 0x1e, 0x00, 0x00, 0x00, //0x00002f89 jae LBB0_544 + 0x43, 0x8a, 0x04, 0x23, //0x00002f8f movb (%r11,%r12), %al + 0x3c, 0x0d, //0x00002f93 cmpb $13, %al + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002f95 je LBB0_544 + 0x3c, 0x20, //0x00002f9b cmpb $32, %al + 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x00002f9d je LBB0_544 + 0x04, 0xf7, //0x00002fa3 addb $-9, %al + 0x3c, 0x01, //0x00002fa5 cmpb $1, %al + 0x0f, 0x87, 0xed, 0x17, 0x00, 0x00, //0x00002fa7 ja LBB0_878 + //0x00002fad LBB0_544 + 0x4c, 0x8d, 0x66, 0x03, //0x00002fad leaq $3(%rsi), %r12 + 0x49, 0x39, 0xfc, //0x00002fb1 cmpq %rdi, %r12 + 0x0f, 0x83, 0x1e, 0x00, 0x00, 0x00, //0x00002fb4 jae LBB0_548 + 0x43, 0x8a, 0x04, 0x23, //0x00002fba movb (%r11,%r12), %al + 0x3c, 0x0d, //0x00002fbe cmpb $13, %al + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002fc0 je LBB0_548 + 0x3c, 0x20, //0x00002fc6 cmpb $32, %al + 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x00002fc8 je LBB0_548 + 0x04, 0xf7, //0x00002fce addb $-9, %al + 0x3c, 0x01, //0x00002fd0 cmpb $1, %al + 0x0f, 0x87, 0xc2, 0x17, 0x00, 0x00, //0x00002fd2 ja LBB0_878 + //0x00002fd8 LBB0_548 + 0x48, 0x83, 0xc6, 0x04, //0x00002fd8 addq $4, %rsi + 0x48, 0x39, 0xf7, //0x00002fdc cmpq %rsi, %rdi + 0x0f, 0x86, 0x49, 0x17, 0x00, 0x00, //0x00002fdf jbe LBB0_866 + 0x48, 0x39, 0xf7, //0x00002fe5 cmpq %rsi, %rdi + 0x0f, 0x84, 0x8d, 0x17, 0x00, 0x00, //0x00002fe8 je LBB0_875 + 0x49, 0x8d, 0x04, 0x3b, //0x00002fee leaq (%r11,%rdi), %rax + 0x48, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002ff2 movabsq $4294977024, %rcx + 0x90, 0x90, 0x90, 0x90, //0x00002ffc .p2align 4, 0x90 + //0x00003000 LBB0_551 + 0x41, 0x0f, 0xbe, 0x14, 0x33, //0x00003000 movsbl (%r11,%rsi), %edx + 0x83, 0xfa, 0x20, //0x00003005 cmpl $32, %edx + 0x0f, 0x87, 0x79, 0x17, 0x00, 0x00, //0x00003008 ja LBB0_877 + 0x48, 0x0f, 0xa3, 0xd1, //0x0000300e btq %rdx, %rcx + 0x0f, 0x83, 0x6f, 0x17, 0x00, 0x00, //0x00003012 jae LBB0_877 + 0x48, 0x83, 0xc6, 0x01, //0x00003018 addq $1, %rsi + 0x48, 0x39, 0xf7, //0x0000301c cmpq %rsi, %rdi + 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x0000301f jne LBB0_551 + 0xe9, 0x57, 0x17, 0x00, 0x00, //0x00003025 jmp LBB0_876 + //0x0000302a LBB0_554 + 0x3c, 0x5d, //0x0000302a cmpb $93, %al + 0x0f, 0x84, 0x23, 0x00, 0x00, 0x00, //0x0000302c je LBB0_556 + 0xe9, 0x24, 0x17, 0x00, 0x00, //0x00003032 jmp LBB0_872 + //0x00003037 LBB0_555 + 0x80, 0xfa, 0x7d, //0x00003037 cmpb $125, %dl + 0x0f, 0x85, 0x1b, 0x17, 0x00, 0x00, //0x0000303a jne LBB0_872 + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00003040 jmp LBB0_556 + //0x00003045 LBB0_870 + 0x49, 0x89, 0xd3, //0x00003045 movq %rdx, %r11 + 0xe9, 0x0e, 0x17, 0x00, 0x00, //0x00003048 jmp LBB0_872 + //0x0000304d LBB0_263 + 0x3c, 0x7d, //0x0000304d cmpb $125, %al + 0x0f, 0x85, 0x06, 0x17, 0x00, 0x00, //0x0000304f jne LBB0_872 + //0x00003055 LBB0_556 + 0x49, 0x83, 0xc3, 0xff, //0x00003055 addq $-1, %r11 + 0x4d, 0x89, 0x18, //0x00003059 movq %r11, (%r8) + 0x48, 0xc7, 0xc0, 0xdf, 0xff, 0xff, 0xff, //0x0000305c movq $-33, %rax + 0xe9, 0x01, 0x17, 0x00, 0x00, //0x00003063 jmp LBB0_874 + //0x00003068 LBB0_557 + 0x49, 0xf7, 0xdc, //0x00003068 negq %r12 + 0x4d, 0x89, 0xe0, //0x0000306b movq %r12, %r8 + //0x0000306e LBB0_558 + 0x4d, 0x85, 0xc0, //0x0000306e testq %r8, %r8 + 0x0f, 0x88, 0xf3, 0x18, 0x00, 0x00, //0x00003071 js LBB0_901 + //0x00003077 LBB0_559 + 0x49, 0x01, 0xc0, //0x00003077 addq %rax, %r8 + 0x48, 0x8b, 0x4d, 0xc8, //0x0000307a movq $-56(%rbp), %rcx + 0x4c, 0x89, 0x01, //0x0000307e movq %r8, (%rcx) + 0x48, 0x85, 0xc0, //0x00003081 testq %rax, %rax + 0x4c, 0x8b, 0x4d, 0xc0, //0x00003084 movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x00003088 movq $-96(%rbp), %r10 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000308c movabsq $4294977024, %r11 + 0x4c, 0x8d, 0x35, 0x13, 0x29, 0x00, 0x00, //0x00003096 leaq $10515(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x4c, 0x8b, 0x7d, 0xb0, //0x0000309d movq $-80(%rbp), %r15 + 0x0f, 0x88, 0xc2, 0x16, 0x00, 0x00, //0x000030a1 js LBB0_874 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000030a7 .p2align 4, 0x90 + //0x000030b0 LBB0_560 + 0x49, 0x8b, 0x12, //0x000030b0 movq (%r10), %rdx + 0x4c, 0x89, 0xf8, //0x000030b3 movq %r15, %rax + 0x48, 0x85, 0xd2, //0x000030b6 testq %rdx, %rdx + 0x0f, 0x84, 0xaa, 0x16, 0x00, 0x00, //0x000030b9 je LBB0_874 + //0x000030bf LBB0_562 + 0x4c, 0x89, 0xf9, //0x000030bf movq %r15, %rcx + 0x49, 0x8b, 0x01, //0x000030c2 movq (%r9), %rax + 0x4c, 0x8b, 0x45, 0xc8, //0x000030c5 movq $-56(%rbp), %r8 + 0x49, 0x8b, 0x10, //0x000030c9 movq (%r8), %rdx + 0x48, 0x39, 0xc2, //0x000030cc cmpq %rax, %rdx + 0x0f, 0x83, 0x2b, 0x00, 0x00, 0x00, //0x000030cf jae LBB0_567 + 0x41, 0x8a, 0x5c, 0x15, 0x00, //0x000030d5 movb (%r13,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x000030da cmpb $13, %bl + 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x000030dd je LBB0_567 + 0x80, 0xfb, 0x20, //0x000030e3 cmpb $32, %bl + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x000030e6 je LBB0_567 + 0x80, 0xc3, 0xf7, //0x000030ec addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000030ef cmpb $1, %bl + 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x000030f2 jbe LBB0_567 + 0x49, 0x89, 0xd7, //0x000030f8 movq %rdx, %r15 + 0xe9, 0xf8, 0x00, 0x00, 0x00, //0x000030fb jmp LBB0_588 //0x00003100 .p2align 4, 0x90 - //0x00003100 LBB0_570 - 0x4c, 0x8d, 0x72, 0x03, //0x00003100 leaq $3(%rdx), %r14 - 0x49, 0x39, 0xc6, //0x00003104 cmpq %rax, %r14 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00003107 jae LBB0_574 - 0x43, 0x8a, 0x5c, 0x35, 0x00, //0x0000310d movb (%r13,%r14), %bl + //0x00003100 LBB0_567 + 0x4c, 0x8d, 0x7a, 0x01, //0x00003100 leaq $1(%rdx), %r15 + 0x49, 0x39, 0xc7, //0x00003104 cmpq %rax, %r15 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00003107 jae LBB0_571 + 0x43, 0x8a, 0x5c, 0x3d, 0x00, //0x0000310d movb (%r13,%r15), %bl 0x80, 0xfb, 0x0d, //0x00003112 cmpb $13, %bl - 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00003115 je LBB0_574 + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00003115 je LBB0_571 0x80, 0xfb, 0x20, //0x0000311b cmpb $32, %bl - 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000311e je LBB0_574 + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000311e je LBB0_571 0x80, 0xc3, 0xf7, //0x00003124 addb $-9, %bl 0x80, 0xfb, 0x01, //0x00003127 cmpb $1, %bl - 0x0f, 0x87, 0x68, 0x00, 0x00, 0x00, //0x0000312a ja LBB0_583 + 0x0f, 0x87, 0xc8, 0x00, 0x00, 0x00, //0x0000312a ja LBB0_588 //0x00003130 .p2align 4, 0x90 - //0x00003130 LBB0_574 - 0x48, 0x83, 0xc2, 0x04, //0x00003130 addq $4, %rdx - 0x48, 0x39, 0xd0, //0x00003134 cmpq %rdx, %rax - 0x0f, 0x86, 0xec, 0x14, 0x00, 0x00, //0x00003137 jbe LBB0_863 - 0x48, 0x39, 0xd0, //0x0000313d cmpq %rdx, %rax - 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00003140 je LBB0_580 - 0x4a, 0x8d, 0x34, 0x28, //0x00003146 leaq (%rax,%r13), %rsi - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000314a .p2align 4, 0x90 - //0x00003150 LBB0_577 - 0x41, 0x0f, 0xbe, 0x7c, 0x15, 0x00, //0x00003150 movsbl (%r13,%rdx), %edi - 0x83, 0xff, 0x20, //0x00003156 cmpl $32, %edi - 0x0f, 0x87, 0x2d, 0x00, 0x00, 0x00, //0x00003159 ja LBB0_582 - 0x49, 0x0f, 0xa3, 0xfa, //0x0000315f btq %rdi, %r10 - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00003163 jae LBB0_582 - 0x48, 0x83, 0xc2, 0x01, //0x00003169 addq $1, %rdx - 0x48, 0x39, 0xd0, //0x0000316d cmpq %rdx, %rax - 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x00003170 jne LBB0_577 - 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x00003176 jmp LBB0_581 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000317b .p2align 4, 0x90 - //0x00003180 LBB0_580 - 0x4c, 0x01, 0xea, //0x00003180 addq %r13, %rdx - 0x48, 0x89, 0xd6, //0x00003183 movq %rdx, %rsi - //0x00003186 LBB0_581 - 0x4c, 0x29, 0xee, //0x00003186 subq %r13, %rsi - 0x48, 0x89, 0xf2, //0x00003189 movq %rsi, %rdx - //0x0000318c LBB0_582 - 0x49, 0x89, 0xd6, //0x0000318c movq %rdx, %r14 - 0x48, 0x39, 0xc2, //0x0000318f cmpq %rax, %rdx - 0x0f, 0x83, 0x94, 0x14, 0x00, 0x00, //0x00003192 jae LBB0_864 - //0x00003198 LBB0_583 - 0x49, 0x8d, 0x46, 0x01, //0x00003198 leaq $1(%r14), %rax - 0x49, 0x89, 0x00, //0x0000319c movq %rax, (%r8) - 0x43, 0x0f, 0xbe, 0x7c, 0x35, 0x00, //0x0000319f movsbl (%r13,%r14), %edi - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000031a5 movq $-1, %rax - 0x85, 0xff, //0x000031ac testl %edi, %edi - 0x0f, 0x84, 0x9d, 0x14, 0x00, 0x00, //0x000031ae je LBB0_870 - 0x49, 0x8b, 0x31, //0x000031b4 movq (%r9), %rsi - 0x48, 0x8d, 0x56, 0xff, //0x000031b7 leaq $-1(%rsi), %rdx - 0x41, 0x8b, 0x1c, 0xf1, //0x000031bb movl (%r9,%rsi,8), %ebx - 0x48, 0x83, 0xf9, 0xff, //0x000031bf cmpq $-1, %rcx - 0x4c, 0x0f, 0x45, 0xf1, //0x000031c3 cmovneq %rcx, %r14 - 0x83, 0xc3, 0xff, //0x000031c7 addl $-1, %ebx - 0x83, 0xfb, 0x05, //0x000031ca cmpl $5, %ebx - 0x0f, 0x87, 0x40, 0x00, 0x00, 0x00, //0x000031cd ja LBB0_592 - 0x49, 0x63, 0x0c, 0x9b, //0x000031d3 movslq (%r11,%rbx,4), %rcx - 0x4c, 0x01, 0xd9, //0x000031d7 addq %r11, %rcx - 0xff, 0xe1, //0x000031da jmpq *%rcx - //0x000031dc LBB0_586 - 0x83, 0xff, 0x2c, //0x000031dc cmpl $44, %edi - 0x0f, 0x84, 0xe2, 0x04, 0x00, 0x00, //0x000031df je LBB0_655 - 0x83, 0xff, 0x5d, //0x000031e5 cmpl $93, %edi - 0x0f, 0x84, 0xc5, 0x04, 0x00, 0x00, //0x000031e8 je LBB0_588 - 0xe9, 0x57, 0x14, 0x00, 0x00, //0x000031ee jmp LBB0_869 - //0x000031f3 LBB0_589 - 0x40, 0x80, 0xff, 0x5d, //0x000031f3 cmpb $93, %dil - 0x0f, 0x84, 0xb6, 0x04, 0x00, 0x00, //0x000031f7 je LBB0_588 - 0x49, 0xc7, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x00, //0x000031fd movq $1, (%r9,%rsi,8) - 0x83, 0xff, 0x7b, //0x00003205 cmpl $123, %edi - 0x0f, 0x86, 0x11, 0x00, 0x00, 0x00, //0x00003208 jbe LBB0_591 - 0xe9, 0x37, 0x14, 0x00, 0x00, //0x0000320e jmp LBB0_869 - //0x00003213 LBB0_592 - 0x49, 0x89, 0x11, //0x00003213 movq %rdx, (%r9) - 0x83, 0xff, 0x7b, //0x00003216 cmpl $123, %edi - 0x0f, 0x87, 0x2b, 0x14, 0x00, 0x00, //0x00003219 ja LBB0_869 - //0x0000321f LBB0_591 - 0x89, 0xf9, //0x0000321f movl %edi, %ecx - 0x48, 0x8d, 0x15, 0x68, 0x26, 0x00, 0x00, //0x00003221 leaq $9832(%rip), %rdx /* LJTI0_3+0(%rip) */ - 0x48, 0x63, 0x0c, 0x8a, //0x00003228 movslq (%rdx,%rcx,4), %rcx - 0x48, 0x01, 0xd1, //0x0000322c addq %rdx, %rcx - 0xff, 0xe1, //0x0000322f jmpq *%rcx - //0x00003231 LBB0_619 - 0x4d, 0x8b, 0x1f, //0x00003231 movq (%r15), %r11 - 0x48, 0x8b, 0x45, 0xc8, //0x00003234 movq $-56(%rbp), %rax - 0x48, 0x8b, 0x38, //0x00003238 movq (%rax), %rdi - 0x48, 0x8d, 0x47, 0xff, //0x0000323b leaq $-1(%rdi), %rax - 0x49, 0x29, 0xc3, //0x0000323f subq %rax, %r11 - 0x0f, 0x84, 0x99, 0x15, 0x00, 0x00, //0x00003242 je LBB0_890 - 0x4c, 0x89, 0x75, 0xb8, //0x00003248 movq %r14, $-72(%rbp) - 0x4a, 0x8d, 0x0c, 0x2f, //0x0000324c leaq (%rdi,%r13), %rcx - 0x48, 0x83, 0xc1, 0xff, //0x00003250 addq $-1, %rcx - 0x48, 0x89, 0x4d, 0xd0, //0x00003254 movq %rcx, $-48(%rbp) - 0x80, 0x39, 0x30, //0x00003258 cmpb $48, (%rcx) - 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x0000325b jne LBB0_624 - 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00003261 movl $1, %r8d - 0x49, 0x83, 0xfb, 0x01, //0x00003267 cmpq $1, %r11 - 0x0f, 0x84, 0xa6, 0xfd, 0xff, 0xff, //0x0000326b je LBB0_554 - 0x41, 0x8a, 0x4c, 0x3d, 0x00, //0x00003271 movb (%r13,%rdi), %cl - 0x80, 0xc1, 0xd2, //0x00003276 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x00003279 cmpb $55, %cl - 0x0f, 0x87, 0x95, 0xfd, 0xff, 0xff, //0x0000327c ja LBB0_554 - 0x0f, 0xb6, 0xc9, //0x00003282 movzbl %cl, %ecx - 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00003285 movabsq $36028797027352577, %rdx - 0x48, 0x0f, 0xa3, 0xca, //0x0000328f btq %rcx, %rdx - 0x0f, 0x83, 0x7e, 0xfd, 0xff, 0xff, //0x00003293 jae LBB0_554 - //0x00003299 LBB0_624 - 0x48, 0x89, 0x7d, 0xa0, //0x00003299 movq %rdi, $-96(%rbp) - 0x49, 0x83, 0xfb, 0x10, //0x0000329d cmpq $16, %r11 - 0x0f, 0x82, 0xb2, 0x0e, 0x00, 0x00, //0x000032a1 jb LBB0_799 - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x000032a7 movq $-1, %r14 - 0x45, 0x31, 0xc0, //0x000032ae xorl %r8d, %r8d - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000032b1 movq $-1, %r15 - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000032b8 movq $-1, %r9 - 0x4c, 0x89, 0xdb, //0x000032bf movq %r11, %rbx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000032c2 .p2align 4, 0x90 - //0x000032d0 LBB0_626 - 0x48, 0x8b, 0x4d, 0xd0, //0x000032d0 movq $-48(%rbp), %rcx - 0xf3, 0x42, 0x0f, 0x6f, 0x14, 0x01, //0x000032d4 movdqu (%rcx,%r8), %xmm2 - 0x66, 0x0f, 0x6f, 0xe2, //0x000032da movdqa %xmm2, %xmm4 - 0x66, 0x41, 0x0f, 0x64, 0xe0, //0x000032de pcmpgtb %xmm8, %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x000032e3 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x64, 0xea, //0x000032e7 pcmpgtb %xmm2, %xmm5 - 0x66, 0x0f, 0xdb, 0xec, //0x000032eb pand %xmm4, %xmm5 - 0x66, 0x0f, 0x6f, 0xe2, //0x000032ef movdqa %xmm2, %xmm4 - 0x66, 0x41, 0x0f, 0x74, 0xe1, //0x000032f3 pcmpeqb %xmm9, %xmm4 - 0x66, 0x0f, 0x6f, 0xf2, //0x000032f8 movdqa %xmm2, %xmm6 - 0x66, 0x41, 0x0f, 0x74, 0xf2, //0x000032fc pcmpeqb %xmm10, %xmm6 - 0x66, 0x0f, 0xeb, 0xf4, //0x00003301 por %xmm4, %xmm6 - 0x66, 0x0f, 0x6f, 0xe2, //0x00003305 movdqa %xmm2, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xe3, //0x00003309 pand %xmm11, %xmm4 - 0x66, 0x41, 0x0f, 0x74, 0xd4, //0x0000330e pcmpeqb %xmm12, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xe5, //0x00003313 pcmpeqb %xmm13, %xmm4 - 0x66, 0x0f, 0xd7, 0xf4, //0x00003318 pmovmskb %xmm4, %esi - 0x66, 0x0f, 0xeb, 0xe2, //0x0000331c por %xmm2, %xmm4 - 0x66, 0x0f, 0xeb, 0xee, //0x00003320 por %xmm6, %xmm5 - 0x66, 0x0f, 0xeb, 0xec, //0x00003324 por %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xfa, //0x00003328 pmovmskb %xmm2, %edi - 0x66, 0x44, 0x0f, 0xd7, 0xe6, //0x0000332c pmovmskb %xmm6, %r12d - 0x66, 0x0f, 0xd7, 0xcd, //0x00003331 pmovmskb %xmm5, %ecx - 0xf7, 0xd1, //0x00003335 notl %ecx - 0x0f, 0xbc, 0xc9, //0x00003337 bsfl %ecx, %ecx - 0x83, 0xf9, 0x10, //0x0000333a cmpl $16, %ecx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000333d je LBB0_628 - 0xba, 0xff, 0xff, 0xff, 0xff, //0x00003343 movl $-1, %edx - 0xd3, 0xe2, //0x00003348 shll %cl, %edx - 0xf7, 0xd2, //0x0000334a notl %edx - 0x21, 0xd7, //0x0000334c andl %edx, %edi - 0x21, 0xd6, //0x0000334e andl %edx, %esi - 0x44, 0x21, 0xe2, //0x00003350 andl %r12d, %edx - 0x41, 0x89, 0xd4, //0x00003353 movl %edx, %r12d - //0x00003356 LBB0_628 - 0x44, 0x8d, 0x57, 0xff, //0x00003356 leal $-1(%rdi), %r10d - 0x41, 0x21, 0xfa, //0x0000335a andl %edi, %r10d - 0x0f, 0x85, 0x0f, 0x0d, 0x00, 0x00, //0x0000335d jne LBB0_789 - 0x8d, 0x56, 0xff, //0x00003363 leal $-1(%rsi), %edx - 0x21, 0xf2, //0x00003366 andl %esi, %edx - 0x0f, 0x85, 0x65, 0x0c, 0x00, 0x00, //0x00003368 jne LBB0_787 - 0x41, 0x8d, 0x54, 0x24, 0xff, //0x0000336e leal $-1(%r12), %edx - 0x44, 0x21, 0xe2, //0x00003373 andl %r12d, %edx - 0x0f, 0x85, 0x57, 0x0c, 0x00, 0x00, //0x00003376 jne LBB0_787 - 0x85, 0xff, //0x0000337c testl %edi, %edi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000337e je LBB0_634 - 0x0f, 0xbc, 0xff, //0x00003384 bsfl %edi, %edi - 0x49, 0x83, 0xf9, 0xff, //0x00003387 cmpq $-1, %r9 - 0x0f, 0x85, 0xea, 0x0c, 0x00, 0x00, //0x0000338b jne LBB0_790 - 0x4c, 0x01, 0xc7, //0x00003391 addq %r8, %rdi - 0x49, 0x89, 0xf9, //0x00003394 movq %rdi, %r9 - //0x00003397 LBB0_634 - 0x85, 0xf6, //0x00003397 testl %esi, %esi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00003399 je LBB0_637 - 0x0f, 0xbc, 0xf6, //0x0000339f bsfl %esi, %esi - 0x49, 0x83, 0xff, 0xff, //0x000033a2 cmpq $-1, %r15 - 0x0f, 0x85, 0xd6, 0x0c, 0x00, 0x00, //0x000033a6 jne LBB0_791 - 0x4c, 0x01, 0xc6, //0x000033ac addq %r8, %rsi - 0x49, 0x89, 0xf7, //0x000033af movq %rsi, %r15 - //0x000033b2 LBB0_637 - 0x45, 0x85, 0xe4, //0x000033b2 testl %r12d, %r12d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x000033b5 je LBB0_640 - 0x41, 0x0f, 0xbc, 0xd4, //0x000033bb bsfl %r12d, %edx - 0x49, 0x83, 0xfe, 0xff, //0x000033bf cmpq $-1, %r14 - 0x0f, 0x85, 0xc0, 0x0c, 0x00, 0x00, //0x000033c3 jne LBB0_792 - 0x4c, 0x01, 0xc2, //0x000033c9 addq %r8, %rdx - 0x49, 0x89, 0xd6, //0x000033cc movq %rdx, %r14 - //0x000033cf LBB0_640 - 0x83, 0xf9, 0x10, //0x000033cf cmpl $16, %ecx - 0x0f, 0x85, 0xf1, 0x04, 0x00, 0x00, //0x000033d2 jne LBB0_679 - 0x48, 0x83, 0xc3, 0xf0, //0x000033d8 addq $-16, %rbx - 0x49, 0x83, 0xc0, 0x10, //0x000033dc addq $16, %r8 - 0x48, 0x83, 0xfb, 0x0f, //0x000033e0 cmpq $15, %rbx - 0x0f, 0x87, 0xe6, 0xfe, 0xff, 0xff, //0x000033e4 ja LBB0_626 - 0x48, 0x8b, 0x4d, 0xd0, //0x000033ea movq $-48(%rbp), %rcx - 0x4a, 0x8d, 0x34, 0x01, //0x000033ee leaq (%rcx,%r8), %rsi - 0x49, 0x89, 0xf4, //0x000033f2 movq %rsi, %r12 - 0x4d, 0x39, 0xc3, //0x000033f5 cmpq %r8, %r11 - 0x4c, 0x8d, 0x15, 0xed, 0x26, 0x00, 0x00, //0x000033f8 leaq $9965(%rip), %r10 /* LJTI0_5+0(%rip) */ - 0x0f, 0x84, 0xd9, 0x04, 0x00, 0x00, //0x000033ff je LBB0_681 - //0x00003405 LBB0_643 - 0x4c, 0x8d, 0x24, 0x1e, //0x00003405 leaq (%rsi,%rbx), %r12 - 0x48, 0x8b, 0x4d, 0x90, //0x00003409 movq $-112(%rbp), %rcx - 0x4c, 0x8d, 0x04, 0x31, //0x0000340d leaq (%rcx,%rsi), %r8 - 0x4c, 0x2b, 0x45, 0xa0, //0x00003411 subq $-96(%rbp), %r8 - 0x31, 0xd2, //0x00003415 xorl %edx, %edx - 0xe9, 0x21, 0x00, 0x00, 0x00, //0x00003417 jmp LBB0_647 - //0x0000341c LBB0_644 - 0x49, 0x83, 0xfe, 0xff, //0x0000341c cmpq $-1, %r14 - 0x0f, 0x85, 0x96, 0x0b, 0x00, 0x00, //0x00003420 jne LBB0_786 - 0x4d, 0x8d, 0x34, 0x10, //0x00003426 leaq (%r8,%rdx), %r14 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000342a .p2align 4, 0x90 - //0x00003430 LBB0_646 - 0x48, 0x83, 0xc2, 0x01, //0x00003430 addq $1, %rdx - 0x48, 0x39, 0xd3, //0x00003434 cmpq %rdx, %rbx - 0x0f, 0x84, 0xa1, 0x04, 0x00, 0x00, //0x00003437 je LBB0_681 - //0x0000343d LBB0_647 - 0x0f, 0xbe, 0x3c, 0x16, //0x0000343d movsbl (%rsi,%rdx), %edi - 0x8d, 0x4f, 0xd0, //0x00003441 leal $-48(%rdi), %ecx - 0x83, 0xf9, 0x0a, //0x00003444 cmpl $10, %ecx - 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00003447 jb LBB0_646 - 0x8d, 0x4f, 0xd5, //0x0000344d leal $-43(%rdi), %ecx - 0x83, 0xf9, 0x1a, //0x00003450 cmpl $26, %ecx - 0x0f, 0x87, 0x1c, 0x00, 0x00, 0x00, //0x00003453 ja LBB0_652 - 0x49, 0x63, 0x0c, 0x8a, //0x00003459 movslq (%r10,%rcx,4), %rcx - 0x4c, 0x01, 0xd1, //0x0000345d addq %r10, %rcx - 0xff, 0xe1, //0x00003460 jmpq *%rcx - //0x00003462 LBB0_650 - 0x49, 0x83, 0xf9, 0xff, //0x00003462 cmpq $-1, %r9 - 0x0f, 0x85, 0x50, 0x0b, 0x00, 0x00, //0x00003466 jne LBB0_786 - 0x4d, 0x8d, 0x0c, 0x10, //0x0000346c leaq (%r8,%rdx), %r9 - 0xe9, 0xbb, 0xff, 0xff, 0xff, //0x00003470 jmp LBB0_646 - //0x00003475 LBB0_652 - 0x83, 0xff, 0x65, //0x00003475 cmpl $101, %edi - 0x0f, 0x85, 0x5a, 0x04, 0x00, 0x00, //0x00003478 jne LBB0_680 - //0x0000347e LBB0_653 - 0x49, 0x83, 0xff, 0xff, //0x0000347e cmpq $-1, %r15 - 0x0f, 0x85, 0x34, 0x0b, 0x00, 0x00, //0x00003482 jne LBB0_786 - 0x4d, 0x8d, 0x3c, 0x10, //0x00003488 leaq (%r8,%rdx), %r15 - 0xe9, 0x9f, 0xff, 0xff, 0xff, //0x0000348c jmp LBB0_646 - //0x00003491 LBB0_593 - 0x83, 0xff, 0x2c, //0x00003491 cmpl $44, %edi - 0x0f, 0x85, 0x10, 0x02, 0x00, 0x00, //0x00003494 jne LBB0_594 - 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x0000349a cmpq $4095, %rsi - 0x0f, 0x8f, 0xf0, 0x12, 0x00, 0x00, //0x000034a1 jg LBB0_973 - 0x48, 0x8d, 0x46, 0x01, //0x000034a7 leaq $1(%rsi), %rax - 0x49, 0x89, 0x01, //0x000034ab movq %rax, (%r9) - 0x49, 0xc7, 0x44, 0xf1, 0x08, 0x03, 0x00, 0x00, 0x00, //0x000034ae movq $3, $8(%r9,%rsi,8) - 0xe9, 0x94, 0xfb, 0xff, 0xff, //0x000034b7 jmp LBB0_555 - //0x000034bc LBB0_595 - 0x40, 0x80, 0xff, 0x22, //0x000034bc cmpb $34, %dil - 0x0f, 0x85, 0x84, 0x11, 0x00, 0x00, //0x000034c0 jne LBB0_869 - 0x4c, 0x89, 0x75, 0xb8, //0x000034c6 movq %r14, $-72(%rbp) - 0x49, 0xc7, 0x04, 0xf1, 0x04, 0x00, 0x00, 0x00, //0x000034ca movq $4, (%r9,%rsi,8) - 0x4d, 0x8b, 0x00, //0x000034d2 movq (%r8), %r8 - 0x49, 0x8b, 0x07, //0x000034d5 movq (%r15), %rax - 0x49, 0x89, 0xc6, //0x000034d8 movq %rax, %r14 - 0x4d, 0x29, 0xc6, //0x000034db subq %r8, %r14 - 0x0f, 0x84, 0x13, 0x1f, 0x00, 0x00, //0x000034de je LBB0_992 - 0x48, 0x89, 0x45, 0xa0, //0x000034e4 movq %rax, $-96(%rbp) - 0x49, 0x83, 0xfe, 0x40, //0x000034e8 cmpq $64, %r14 - 0x0f, 0x82, 0x45, 0x0c, 0x00, 0x00, //0x000034ec jb LBB0_797 - 0x4c, 0x89, 0xc1, //0x000034f2 movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x000034f5 notq %rcx - 0x48, 0xc7, 0x45, 0xd0, 0xff, 0xff, 0xff, 0xff, //0x000034f8 movq $-1, $-48(%rbp) - 0x4c, 0x89, 0xc0, //0x00003500 movq %r8, %rax - 0x45, 0x31, 0xdb, //0x00003503 xorl %r11d, %r11d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003506 .p2align 4, 0x90 - //0x00003510 LBB0_599 - 0xf3, 0x41, 0x0f, 0x6f, 0x54, 0x05, 0x00, //0x00003510 movdqu (%r13,%rax), %xmm2 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x05, 0x10, //0x00003517 movdqu $16(%r13,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x05, 0x20, //0x0000351e movdqu $32(%r13,%rax), %xmm6 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x05, 0x30, //0x00003525 movdqu $48(%r13,%rax), %xmm7 - 0x66, 0x0f, 0x6f, 0xe2, //0x0000352c movdqa %xmm2, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x00003530 pcmpeqb %xmm0, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xfc, //0x00003534 pmovmskb %xmm4, %r15d - 0x66, 0x0f, 0x6f, 0xe5, //0x00003539 movdqa %xmm5, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x0000353d pcmpeqb %xmm0, %xmm4 - 0x66, 0x0f, 0xd7, 0xdc, //0x00003541 pmovmskb %xmm4, %ebx - 0x66, 0x0f, 0x6f, 0xe6, //0x00003545 movdqa %xmm6, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x00003549 pcmpeqb %xmm0, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x0000354d pmovmskb %xmm4, %edx - 0x66, 0x0f, 0x6f, 0xe7, //0x00003551 movdqa %xmm7, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x00003555 pcmpeqb %xmm0, %xmm4 - 0x66, 0x0f, 0xd7, 0xf4, //0x00003559 pmovmskb %xmm4, %esi - 0x66, 0x0f, 0x74, 0xd1, //0x0000355d pcmpeqb %xmm1, %xmm2 - 0x66, 0x44, 0x0f, 0xd7, 0xe2, //0x00003561 pmovmskb %xmm2, %r12d - 0x66, 0x0f, 0x74, 0xe9, //0x00003566 pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x0000356a pmovmskb %xmm5, %edi - 0x66, 0x0f, 0x74, 0xf1, //0x0000356e pcmpeqb %xmm1, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xd6, //0x00003572 pmovmskb %xmm6, %r10d - 0x66, 0x0f, 0x74, 0xf9, //0x00003577 pcmpeqb %xmm1, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xcf, //0x0000357b pmovmskb %xmm7, %r9d - 0x48, 0xc1, 0xe6, 0x30, //0x00003580 shlq $48, %rsi - 0x48, 0xc1, 0xe2, 0x20, //0x00003584 shlq $32, %rdx - 0x48, 0x09, 0xf2, //0x00003588 orq %rsi, %rdx - 0x48, 0xc1, 0xe3, 0x10, //0x0000358b shlq $16, %rbx - 0x48, 0x09, 0xd3, //0x0000358f orq %rdx, %rbx - 0x49, 0x09, 0xdf, //0x00003592 orq %rbx, %r15 - 0x49, 0xc1, 0xe1, 0x30, //0x00003595 shlq $48, %r9 - 0x49, 0xc1, 0xe2, 0x20, //0x00003599 shlq $32, %r10 - 0x4d, 0x09, 0xca, //0x0000359d orq %r9, %r10 - 0x48, 0xc1, 0xe7, 0x10, //0x000035a0 shlq $16, %rdi - 0x4c, 0x09, 0xd7, //0x000035a4 orq %r10, %rdi - 0x49, 0x09, 0xfc, //0x000035a7 orq %rdi, %r12 - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000035aa jne LBB0_608 - 0x4d, 0x85, 0xdb, //0x000035b0 testq %r11, %r11 - 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x000035b3 jne LBB0_610 - 0x45, 0x31, 0xdb, //0x000035b9 xorl %r11d, %r11d - 0x4d, 0x85, 0xff, //0x000035bc testq %r15, %r15 - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x000035bf jne LBB0_611 - //0x000035c5 LBB0_602 - 0x49, 0x83, 0xc6, 0xc0, //0x000035c5 addq $-64, %r14 - 0x48, 0x83, 0xc1, 0xc0, //0x000035c9 addq $-64, %rcx - 0x48, 0x83, 0xc0, 0x40, //0x000035cd addq $64, %rax - 0x49, 0x83, 0xfe, 0x3f, //0x000035d1 cmpq $63, %r14 - 0x0f, 0x87, 0x35, 0xff, 0xff, 0xff, //0x000035d5 ja LBB0_599 - 0xe9, 0x3e, 0x09, 0x00, 0x00, //0x000035db jmp LBB0_603 - //0x000035e0 LBB0_608 - 0x48, 0x83, 0x7d, 0xd0, 0xff, //0x000035e0 cmpq $-1, $-48(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000035e5 jne LBB0_610 - 0x49, 0x0f, 0xbc, 0xd4, //0x000035eb bsfq %r12, %rdx - 0x48, 0x01, 0xc2, //0x000035ef addq %rax, %rdx - 0x48, 0x89, 0x55, 0xd0, //0x000035f2 movq %rdx, $-48(%rbp) - //0x000035f6 LBB0_610 - 0x4c, 0x89, 0xda, //0x000035f6 movq %r11, %rdx - 0x48, 0xf7, 0xd2, //0x000035f9 notq %rdx - 0x4c, 0x21, 0xe2, //0x000035fc andq %r12, %rdx - 0x48, 0x8d, 0x34, 0x12, //0x000035ff leaq (%rdx,%rdx), %rsi - 0x4c, 0x09, 0xde, //0x00003603 orq %r11, %rsi - 0x48, 0x89, 0xf7, //0x00003606 movq %rsi, %rdi - 0x48, 0xf7, 0xd7, //0x00003609 notq %rdi - 0x4c, 0x21, 0xe7, //0x0000360c andq %r12, %rdi - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000360f movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xdf, //0x00003619 andq %rbx, %rdi - 0x45, 0x31, 0xdb, //0x0000361c xorl %r11d, %r11d - 0x48, 0x01, 0xd7, //0x0000361f addq %rdx, %rdi - 0x41, 0x0f, 0x92, 0xc3, //0x00003622 setb %r11b - 0x48, 0x01, 0xff, //0x00003626 addq %rdi, %rdi - 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00003629 movabsq $6148914691236517205, %rdx - 0x48, 0x31, 0xd7, //0x00003633 xorq %rdx, %rdi - 0x48, 0x21, 0xf7, //0x00003636 andq %rsi, %rdi - 0x48, 0xf7, 0xd7, //0x00003639 notq %rdi - 0x49, 0x21, 0xff, //0x0000363c andq %rdi, %r15 - 0x4d, 0x85, 0xff, //0x0000363f testq %r15, %r15 - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00003642 je LBB0_602 - //0x00003648 LBB0_611 - 0x49, 0x0f, 0xbc, 0xc7, //0x00003648 bsfq %r15, %rax - 0x48, 0x29, 0xc8, //0x0000364c subq %rcx, %rax - 0x4c, 0x8b, 0x7d, 0xc0, //0x0000364f movq $-64(%rbp), %r15 - //0x00003653 LBB0_612 - 0x4c, 0x8b, 0x4d, 0x98, //0x00003653 movq $-104(%rbp), %r9 - 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003657 movabsq $4294977024, %r10 - 0x4c, 0x8d, 0x1d, 0x10, 0x22, 0x00, 0x00, //0x00003661 leaq $8720(%rip), %r11 /* LJTI0_2+0(%rip) */ - 0x4c, 0x8b, 0x75, 0xb8, //0x00003668 movq $-72(%rbp), %r14 - 0x48, 0x85, 0xc0, //0x0000366c testq %rax, %rax - 0x0f, 0x88, 0x2e, 0x11, 0x00, 0x00, //0x0000366f js LBB0_711 - //0x00003675 LBB0_613 - 0x48, 0x8b, 0x4d, 0xc8, //0x00003675 movq $-56(%rbp), %rcx - 0x48, 0x89, 0x01, //0x00003679 movq %rax, (%rcx) - 0x4d, 0x85, 0xc0, //0x0000367c testq %r8, %r8 - 0x0f, 0x8f, 0xcb, 0xf9, 0xff, 0xff, //0x0000367f jg LBB0_555 - 0xe9, 0x42, 0x11, 0x00, 0x00, //0x00003685 jmp LBB0_614 - //0x0000368a LBB0_615 - 0x40, 0x80, 0xff, 0x3a, //0x0000368a cmpb $58, %dil - 0x0f, 0x85, 0xb6, 0x0f, 0x00, 0x00, //0x0000368e jne LBB0_869 - 0x49, 0xc7, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x00, //0x00003694 movq $0, (%r9,%rsi,8) - 0xe9, 0xaf, 0xf9, 0xff, 0xff, //0x0000369c jmp LBB0_555 - //0x000036a1 LBB0_617 - 0x83, 0xff, 0x22, //0x000036a1 cmpl $34, %edi - 0x0f, 0x84, 0x3f, 0x00, 0x00, 0x00, //0x000036a4 je LBB0_659 - //0x000036aa LBB0_594 - 0x83, 0xff, 0x7d, //0x000036aa cmpl $125, %edi - 0x0f, 0x85, 0x97, 0x0f, 0x00, 0x00, //0x000036ad jne LBB0_869 - //0x000036b3 LBB0_588 - 0x49, 0x89, 0x11, //0x000036b3 movq %rdx, (%r9) - 0x4c, 0x89, 0xf0, //0x000036b6 movq %r14, %rax - 0x48, 0x85, 0xd2, //0x000036b9 testq %rdx, %rdx - 0x0f, 0x85, 0x9d, 0xf9, 0xff, 0xff, //0x000036bc jne LBB0_557 - 0xe9, 0x8a, 0x0f, 0x00, 0x00, //0x000036c2 jmp LBB0_870 - //0x000036c7 LBB0_655 - 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x000036c7 cmpq $4095, %rsi - 0x0f, 0x8f, 0xc3, 0x10, 0x00, 0x00, //0x000036ce jg LBB0_973 - 0x48, 0x8d, 0x46, 0x01, //0x000036d4 leaq $1(%rsi), %rax - 0x49, 0x89, 0x01, //0x000036d8 movq %rax, (%r9) - 0x49, 0xc7, 0x44, 0xf1, 0x08, 0x00, 0x00, 0x00, 0x00, //0x000036db movq $0, $8(%r9,%rsi,8) - 0xe9, 0x67, 0xf9, 0xff, 0xff, //0x000036e4 jmp LBB0_555 - //0x000036e9 LBB0_659 - 0x4c, 0x89, 0x75, 0xb8, //0x000036e9 movq %r14, $-72(%rbp) - 0x49, 0xc7, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x00, //0x000036ed movq $2, (%r9,%rsi,8) - 0x4d, 0x8b, 0x00, //0x000036f5 movq (%r8), %r8 - 0x49, 0x8b, 0x07, //0x000036f8 movq (%r15), %rax - 0x49, 0x89, 0xc6, //0x000036fb movq %rax, %r14 - 0x4d, 0x29, 0xc6, //0x000036fe subq %r8, %r14 - 0x0f, 0x84, 0xf0, 0x1c, 0x00, 0x00, //0x00003701 je LBB0_992 - 0x48, 0x89, 0x45, 0xa0, //0x00003707 movq %rax, $-96(%rbp) - 0x49, 0x83, 0xfe, 0x40, //0x0000370b cmpq $64, %r14 - 0x0f, 0x82, 0x79, 0x0a, 0x00, 0x00, //0x0000370f jb LBB0_802 - 0x4c, 0x89, 0xc3, //0x00003715 movq %r8, %rbx - 0x48, 0xf7, 0xd3, //0x00003718 notq %rbx - 0x48, 0xc7, 0x45, 0xd0, 0xff, 0xff, 0xff, 0xff, //0x0000371b movq $-1, $-48(%rbp) - 0x4c, 0x89, 0xc0, //0x00003723 movq %r8, %rax - 0x45, 0x31, 0xdb, //0x00003726 xorl %r11d, %r11d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003729 .p2align 4, 0x90 - //0x00003730 LBB0_662 - 0xf3, 0x41, 0x0f, 0x6f, 0x54, 0x05, 0x00, //0x00003730 movdqu (%r13,%rax), %xmm2 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x05, 0x10, //0x00003737 movdqu $16(%r13,%rax), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x05, 0x20, //0x0000373e movdqu $32(%r13,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x05, 0x30, //0x00003745 movdqu $48(%r13,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xfa, //0x0000374c movdqa %xmm2, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x00003750 pcmpeqb %xmm0, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xff, //0x00003754 pmovmskb %xmm7, %r15d - 0x66, 0x0f, 0x6f, 0xfc, //0x00003759 movdqa %xmm4, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000375d pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xcf, //0x00003761 pmovmskb %xmm7, %ecx - 0x66, 0x0f, 0x6f, 0xfd, //0x00003765 movdqa %xmm5, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x00003769 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xd7, //0x0000376d pmovmskb %xmm7, %edx - 0x66, 0x0f, 0x6f, 0xfe, //0x00003771 movdqa %xmm6, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x00003775 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xf7, //0x00003779 pmovmskb %xmm7, %esi - 0x66, 0x0f, 0x74, 0xd1, //0x0000377d pcmpeqb %xmm1, %xmm2 - 0x66, 0x44, 0x0f, 0xd7, 0xe2, //0x00003781 pmovmskb %xmm2, %r12d - 0x66, 0x0f, 0x74, 0xe1, //0x00003786 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xfc, //0x0000378a pmovmskb %xmm4, %edi - 0x66, 0x0f, 0x74, 0xe9, //0x0000378e pcmpeqb %xmm1, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x00003792 pmovmskb %xmm5, %r9d - 0x66, 0x0f, 0x74, 0xf1, //0x00003797 pcmpeqb %xmm1, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xd6, //0x0000379b pmovmskb %xmm6, %r10d - 0x48, 0xc1, 0xe6, 0x30, //0x000037a0 shlq $48, %rsi - 0x48, 0xc1, 0xe2, 0x20, //0x000037a4 shlq $32, %rdx - 0x48, 0x09, 0xf2, //0x000037a8 orq %rsi, %rdx - 0x48, 0xc1, 0xe1, 0x10, //0x000037ab shlq $16, %rcx - 0x48, 0x09, 0xd1, //0x000037af orq %rdx, %rcx - 0x49, 0x09, 0xcf, //0x000037b2 orq %rcx, %r15 - 0x49, 0xc1, 0xe2, 0x30, //0x000037b5 shlq $48, %r10 - 0x49, 0xc1, 0xe1, 0x20, //0x000037b9 shlq $32, %r9 - 0x4d, 0x09, 0xd1, //0x000037bd orq %r10, %r9 - 0x48, 0xc1, 0xe7, 0x10, //0x000037c0 shlq $16, %rdi - 0x4c, 0x09, 0xcf, //0x000037c4 orq %r9, %rdi - 0x49, 0x09, 0xfc, //0x000037c7 orq %rdi, %r12 - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000037ca jne LBB0_671 - 0x4d, 0x85, 0xdb, //0x000037d0 testq %r11, %r11 - 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x000037d3 jne LBB0_673 - 0x45, 0x31, 0xdb, //0x000037d9 xorl %r11d, %r11d - 0x4d, 0x85, 0xff, //0x000037dc testq %r15, %r15 - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x000037df jne LBB0_674 - //0x000037e5 LBB0_665 - 0x49, 0x83, 0xc6, 0xc0, //0x000037e5 addq $-64, %r14 - 0x48, 0x83, 0xc3, 0xc0, //0x000037e9 addq $-64, %rbx - 0x48, 0x83, 0xc0, 0x40, //0x000037ed addq $64, %rax - 0x49, 0x83, 0xfe, 0x3f, //0x000037f1 cmpq $63, %r14 - 0x0f, 0x87, 0x35, 0xff, 0xff, 0xff, //0x000037f5 ja LBB0_662 - 0xe9, 0xdb, 0x07, 0x00, 0x00, //0x000037fb jmp LBB0_666 - //0x00003800 LBB0_671 - 0x48, 0x83, 0x7d, 0xd0, 0xff, //0x00003800 cmpq $-1, $-48(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003805 jne LBB0_673 - 0x49, 0x0f, 0xbc, 0xcc, //0x0000380b bsfq %r12, %rcx - 0x48, 0x01, 0xc1, //0x0000380f addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xd0, //0x00003812 movq %rcx, $-48(%rbp) - //0x00003816 LBB0_673 - 0x4c, 0x89, 0xd9, //0x00003816 movq %r11, %rcx - 0x48, 0xf7, 0xd1, //0x00003819 notq %rcx - 0x4c, 0x21, 0xe1, //0x0000381c andq %r12, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x0000381f leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xda, //0x00003823 orq %r11, %rdx - 0x48, 0x89, 0xd6, //0x00003826 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00003829 notq %rsi - 0x4c, 0x21, 0xe6, //0x0000382c andq %r12, %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000382f movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfe, //0x00003839 andq %rdi, %rsi - 0x45, 0x31, 0xdb, //0x0000383c xorl %r11d, %r11d - 0x48, 0x01, 0xce, //0x0000383f addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc3, //0x00003842 setb %r11b - 0x48, 0x01, 0xf6, //0x00003846 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00003849 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00003853 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00003856 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00003859 notq %rsi - 0x49, 0x21, 0xf7, //0x0000385c andq %rsi, %r15 - 0x4d, 0x85, 0xff, //0x0000385f testq %r15, %r15 - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00003862 je LBB0_665 - //0x00003868 LBB0_674 - 0x49, 0x0f, 0xbc, 0xc7, //0x00003868 bsfq %r15, %rax - 0x48, 0x29, 0xd8, //0x0000386c subq %rbx, %rax - 0x4c, 0x8b, 0x7d, 0xc0, //0x0000386f movq $-64(%rbp), %r15 - //0x00003873 LBB0_675 - 0x4c, 0x8b, 0x4d, 0x98, //0x00003873 movq $-104(%rbp), %r9 - 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003877 movabsq $4294977024, %r10 - 0x4c, 0x8d, 0x1d, 0xf0, 0x1f, 0x00, 0x00, //0x00003881 leaq $8176(%rip), %r11 /* LJTI0_2+0(%rip) */ - 0x4c, 0x8b, 0x75, 0xb8, //0x00003888 movq $-72(%rbp), %r14 - 0x48, 0x85, 0xc0, //0x0000388c testq %rax, %rax - 0x0f, 0x88, 0x0e, 0x0f, 0x00, 0x00, //0x0000388f js LBB0_711 - 0x48, 0x8b, 0x4d, 0xc8, //0x00003895 movq $-56(%rbp), %rcx - 0x48, 0x89, 0x01, //0x00003899 movq %rax, (%rcx) - 0x4d, 0x85, 0xc0, //0x0000389c testq %r8, %r8 - 0x0f, 0x8e, 0x27, 0x0f, 0x00, 0x00, //0x0000389f jle LBB0_614 - 0x49, 0x8b, 0x01, //0x000038a5 movq (%r9), %rax - 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x000038a8 cmpq $4095, %rax - 0x0f, 0x8f, 0xe3, 0x0e, 0x00, 0x00, //0x000038ae jg LBB0_973 - 0x48, 0x8d, 0x48, 0x01, //0x000038b4 leaq $1(%rax), %rcx - 0x49, 0x89, 0x09, //0x000038b8 movq %rcx, (%r9) - 0x49, 0xc7, 0x44, 0xc1, 0x08, 0x04, 0x00, 0x00, 0x00, //0x000038bb movq $4, $8(%r9,%rax,8) - 0xe9, 0x87, 0xf7, 0xff, 0xff, //0x000038c4 jmp LBB0_555 - //0x000038c9 LBB0_679 - 0x41, 0x89, 0xcc, //0x000038c9 movl %ecx, %r12d - 0x4c, 0x03, 0x65, 0xd0, //0x000038cc addq $-48(%rbp), %r12 - 0x4d, 0x01, 0xc4, //0x000038d0 addq %r8, %r12 - 0xe9, 0x06, 0x00, 0x00, 0x00, //0x000038d3 jmp LBB0_681 - //0x000038d8 LBB0_680 - 0x48, 0x01, 0xd6, //0x000038d8 addq %rdx, %rsi - 0x49, 0x89, 0xf4, //0x000038db movq %rsi, %r12 - //0x000038de LBB0_681 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000038de movq $-1, %r8 - 0x4d, 0x85, 0xc9, //0x000038e5 testq %r9, %r9 - 0x0f, 0x84, 0xaa, 0x19, 0x00, 0x00, //0x000038e8 je LBB0_965 - 0x4d, 0x85, 0xf6, //0x000038ee testq %r14, %r14 - 0x48, 0x8b, 0x7d, 0xa0, //0x000038f1 movq $-96(%rbp), %rdi - 0x0f, 0x84, 0xed, 0x0e, 0x00, 0x00, //0x000038f5 je LBB0_891 - 0x4d, 0x85, 0xff, //0x000038fb testq %r15, %r15 - 0x0f, 0x84, 0xe4, 0x0e, 0x00, 0x00, //0x000038fe je LBB0_891 - 0x4c, 0x2b, 0x65, 0xd0, //0x00003904 subq $-48(%rbp), %r12 - 0x49, 0x8d, 0x4c, 0x24, 0xff, //0x00003908 leaq $-1(%r12), %rcx - 0x49, 0x39, 0xc9, //0x0000390d cmpq %rcx, %r9 - 0x0f, 0x84, 0xf2, 0xf6, 0xff, 0xff, //0x00003910 je LBB0_552 - 0x49, 0x39, 0xce, //0x00003916 cmpq %rcx, %r14 - 0x0f, 0x84, 0xe9, 0xf6, 0xff, 0xff, //0x00003919 je LBB0_552 - 0x49, 0x39, 0xcf, //0x0000391f cmpq %rcx, %r15 - 0x0f, 0x84, 0xe0, 0xf6, 0xff, 0xff, //0x00003922 je LBB0_552 - 0x4d, 0x85, 0xf6, //0x00003928 testq %r14, %r14 - 0x0f, 0x8e, 0x18, 0x00, 0x00, 0x00, //0x0000392b jle LBB0_690 - 0x49, 0x8d, 0x4e, 0xff, //0x00003931 leaq $-1(%r14), %rcx - 0x49, 0x39, 0xcf, //0x00003935 cmpq %rcx, %r15 - 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x00003938 je LBB0_690 - 0x49, 0xf7, 0xd6, //0x0000393e notq %r14 - 0x4d, 0x89, 0xf0, //0x00003941 movq %r14, %r8 - 0xe9, 0xc5, 0xf6, 0xff, 0xff, //0x00003944 jmp LBB0_553 - //0x00003949 LBB0_690 - 0x4c, 0x89, 0xc9, //0x00003949 movq %r9, %rcx - 0x4c, 0x09, 0xf9, //0x0000394c orq %r15, %rcx - 0x0f, 0x99, 0xc1, //0x0000394f setns %cl - 0x0f, 0x88, 0xec, 0x04, 0x00, 0x00, //0x00003952 js LBB0_767 - 0x4d, 0x39, 0xf9, //0x00003958 cmpq %r15, %r9 - 0x0f, 0x8c, 0xe3, 0x04, 0x00, 0x00, //0x0000395b jl LBB0_767 - 0x49, 0xf7, 0xd1, //0x00003961 notq %r9 - 0x4d, 0x89, 0xc8, //0x00003964 movq %r9, %r8 - 0xe9, 0xa2, 0xf6, 0xff, 0xff, //0x00003967 jmp LBB0_553 - //0x0000396c LBB0_693 - 0x4c, 0x89, 0x75, 0xb8, //0x0000396c movq %r14, $-72(%rbp) - 0x48, 0x8b, 0x45, 0xc8, //0x00003970 movq $-56(%rbp), %rax - 0x4c, 0x8b, 0x00, //0x00003974 movq (%rax), %r8 - 0x49, 0x8b, 0x07, //0x00003977 movq (%r15), %rax - 0x49, 0x89, 0xc6, //0x0000397a movq %rax, %r14 - 0x4d, 0x29, 0xc6, //0x0000397d subq %r8, %r14 - 0x0f, 0x84, 0x71, 0x1a, 0x00, 0x00, //0x00003980 je LBB0_992 - 0x48, 0x89, 0x45, 0xa0, //0x00003986 movq %rax, $-96(%rbp) - 0x49, 0x83, 0xfe, 0x40, //0x0000398a cmpq $64, %r14 - 0x0f, 0x82, 0x1c, 0x08, 0x00, 0x00, //0x0000398e jb LBB0_804 - 0x4c, 0x89, 0xc3, //0x00003994 movq %r8, %rbx - 0x48, 0xf7, 0xd3, //0x00003997 notq %rbx - 0x48, 0xc7, 0x45, 0xd0, 0xff, 0xff, 0xff, 0xff, //0x0000399a movq $-1, $-48(%rbp) - 0x4c, 0x89, 0xc0, //0x000039a2 movq %r8, %rax - 0x45, 0x31, 0xdb, //0x000039a5 xorl %r11d, %r11d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000039a8 .p2align 4, 0x90 - //0x000039b0 LBB0_696 - 0xf3, 0x41, 0x0f, 0x6f, 0x54, 0x05, 0x00, //0x000039b0 movdqu (%r13,%rax), %xmm2 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x05, 0x10, //0x000039b7 movdqu $16(%r13,%rax), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x05, 0x20, //0x000039be movdqu $32(%r13,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x05, 0x30, //0x000039c5 movdqu $48(%r13,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xfa, //0x000039cc movdqa %xmm2, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000039d0 pcmpeqb %xmm0, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xff, //0x000039d4 pmovmskb %xmm7, %r15d - 0x66, 0x0f, 0x6f, 0xfc, //0x000039d9 movdqa %xmm4, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000039dd pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xcf, //0x000039e1 pmovmskb %xmm7, %ecx - 0x66, 0x0f, 0x6f, 0xfd, //0x000039e5 movdqa %xmm5, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000039e9 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xd7, //0x000039ed pmovmskb %xmm7, %edx - 0x66, 0x0f, 0x6f, 0xfe, //0x000039f1 movdqa %xmm6, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000039f5 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xf7, //0x000039f9 pmovmskb %xmm7, %esi - 0x66, 0x0f, 0x74, 0xd1, //0x000039fd pcmpeqb %xmm1, %xmm2 - 0x66, 0x44, 0x0f, 0xd7, 0xe2, //0x00003a01 pmovmskb %xmm2, %r12d - 0x66, 0x0f, 0x74, 0xe1, //0x00003a06 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xfc, //0x00003a0a pmovmskb %xmm4, %edi - 0x66, 0x0f, 0x74, 0xe9, //0x00003a0e pcmpeqb %xmm1, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x00003a12 pmovmskb %xmm5, %r9d - 0x66, 0x0f, 0x74, 0xf1, //0x00003a17 pcmpeqb %xmm1, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xd6, //0x00003a1b pmovmskb %xmm6, %r10d - 0x48, 0xc1, 0xe6, 0x30, //0x00003a20 shlq $48, %rsi - 0x48, 0xc1, 0xe2, 0x20, //0x00003a24 shlq $32, %rdx - 0x48, 0x09, 0xf2, //0x00003a28 orq %rsi, %rdx - 0x48, 0xc1, 0xe1, 0x10, //0x00003a2b shlq $16, %rcx - 0x48, 0x09, 0xd1, //0x00003a2f orq %rdx, %rcx - 0x49, 0x09, 0xcf, //0x00003a32 orq %rcx, %r15 - 0x49, 0xc1, 0xe2, 0x30, //0x00003a35 shlq $48, %r10 - 0x49, 0xc1, 0xe1, 0x20, //0x00003a39 shlq $32, %r9 - 0x4d, 0x09, 0xd1, //0x00003a3d orq %r10, %r9 - 0x48, 0xc1, 0xe7, 0x10, //0x00003a40 shlq $16, %rdi - 0x4c, 0x09, 0xcf, //0x00003a44 orq %r9, %rdi - 0x49, 0x09, 0xfc, //0x00003a47 orq %rdi, %r12 - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x00003a4a jne LBB0_705 - 0x4d, 0x85, 0xdb, //0x00003a50 testq %r11, %r11 - 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x00003a53 jne LBB0_707 - 0x45, 0x31, 0xdb, //0x00003a59 xorl %r11d, %r11d - 0x4d, 0x85, 0xff, //0x00003a5c testq %r15, %r15 - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x00003a5f jne LBB0_708 - //0x00003a65 LBB0_699 - 0x49, 0x83, 0xc6, 0xc0, //0x00003a65 addq $-64, %r14 - 0x48, 0x83, 0xc3, 0xc0, //0x00003a69 addq $-64, %rbx - 0x48, 0x83, 0xc0, 0x40, //0x00003a6d addq $64, %rax - 0x49, 0x83, 0xfe, 0x3f, //0x00003a71 cmpq $63, %r14 - 0x0f, 0x87, 0x35, 0xff, 0xff, 0xff, //0x00003a75 ja LBB0_696 - 0xe9, 0x22, 0x06, 0x00, 0x00, //0x00003a7b jmp LBB0_700 - //0x00003a80 LBB0_705 - 0x48, 0x83, 0x7d, 0xd0, 0xff, //0x00003a80 cmpq $-1, $-48(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003a85 jne LBB0_707 - 0x49, 0x0f, 0xbc, 0xcc, //0x00003a8b bsfq %r12, %rcx - 0x48, 0x01, 0xc1, //0x00003a8f addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xd0, //0x00003a92 movq %rcx, $-48(%rbp) - //0x00003a96 LBB0_707 - 0x4c, 0x89, 0xd9, //0x00003a96 movq %r11, %rcx - 0x48, 0xf7, 0xd1, //0x00003a99 notq %rcx - 0x4c, 0x21, 0xe1, //0x00003a9c andq %r12, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x00003a9f leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xda, //0x00003aa3 orq %r11, %rdx - 0x48, 0x89, 0xd6, //0x00003aa6 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00003aa9 notq %rsi - 0x4c, 0x21, 0xe6, //0x00003aac andq %r12, %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003aaf movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfe, //0x00003ab9 andq %rdi, %rsi - 0x45, 0x31, 0xdb, //0x00003abc xorl %r11d, %r11d - 0x48, 0x01, 0xce, //0x00003abf addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc3, //0x00003ac2 setb %r11b - 0x48, 0x01, 0xf6, //0x00003ac6 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00003ac9 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00003ad3 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00003ad6 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00003ad9 notq %rsi - 0x49, 0x21, 0xf7, //0x00003adc andq %rsi, %r15 - 0x4d, 0x85, 0xff, //0x00003adf testq %r15, %r15 - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00003ae2 je LBB0_699 - //0x00003ae8 LBB0_708 - 0x49, 0x0f, 0xbc, 0xc7, //0x00003ae8 bsfq %r15, %rax - 0x48, 0x29, 0xd8, //0x00003aec subq %rbx, %rax - //0x00003aef LBB0_709 - 0x4c, 0x8b, 0x7d, 0xc0, //0x00003aef movq $-64(%rbp), %r15 - //0x00003af3 LBB0_710 - 0x48, 0x85, 0xc0, //0x00003af3 testq %rax, %rax - 0x4c, 0x8b, 0x4d, 0x98, //0x00003af6 movq $-104(%rbp), %r9 - 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003afa movabsq $4294977024, %r10 - 0x4c, 0x8d, 0x1d, 0x6d, 0x1d, 0x00, 0x00, //0x00003b04 leaq $7533(%rip), %r11 /* LJTI0_2+0(%rip) */ - 0x4c, 0x8b, 0x75, 0xb8, //0x00003b0b movq $-72(%rbp), %r14 - 0x0f, 0x89, 0x60, 0xfb, 0xff, 0xff, //0x00003b0f jns LBB0_613 - 0xe9, 0x89, 0x0c, 0x00, 0x00, //0x00003b15 jmp LBB0_711 - //0x00003b1a LBB0_714 - 0x4d, 0x8b, 0x1f, //0x00003b1a movq (%r15), %r11 - 0x48, 0x8b, 0x45, 0xc8, //0x00003b1d movq $-56(%rbp), %rax - 0x48, 0x8b, 0x00, //0x00003b21 movq (%rax), %rax - 0x49, 0x29, 0xc3, //0x00003b24 subq %rax, %r11 - 0x0f, 0x84, 0xa6, 0x17, 0x00, 0x00, //0x00003b27 je LBB0_970 - 0x4c, 0x89, 0x75, 0xb8, //0x00003b2d movq %r14, $-72(%rbp) - 0x4e, 0x8d, 0x14, 0x28, //0x00003b31 leaq (%rax,%r13), %r10 - 0x41, 0x80, 0x3a, 0x30, //0x00003b35 cmpb $48, (%r10) - 0x0f, 0x85, 0x37, 0x00, 0x00, 0x00, //0x00003b39 jne LBB0_719 - 0x41, 0xbf, 0x01, 0x00, 0x00, 0x00, //0x00003b3f movl $1, %r15d - 0x49, 0x83, 0xfb, 0x01, //0x00003b45 cmpq $1, %r11 - 0x0f, 0x84, 0x9a, 0x03, 0x00, 0x00, //0x00003b49 je LBB0_781 - 0x41, 0x8a, 0x4a, 0x01, //0x00003b4f movb $1(%r10), %cl - 0x80, 0xc1, 0xd2, //0x00003b53 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x00003b56 cmpb $55, %cl - 0x0f, 0x87, 0x8a, 0x03, 0x00, 0x00, //0x00003b59 ja LBB0_781 - 0x0f, 0xb6, 0xc9, //0x00003b5f movzbl %cl, %ecx - 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00003b62 movabsq $36028797027352577, %rdx - 0x48, 0x0f, 0xa3, 0xca, //0x00003b6c btq %rcx, %rdx - 0x0f, 0x83, 0x73, 0x03, 0x00, 0x00, //0x00003b70 jae LBB0_781 - //0x00003b76 LBB0_719 - 0x49, 0x83, 0xfb, 0x10, //0x00003b76 cmpq $16, %r11 - 0x0f, 0x82, 0x4e, 0x06, 0x00, 0x00, //0x00003b7a jb LBB0_805 - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003b80 movq $-1, %r9 - 0x45, 0x31, 0xff, //0x00003b87 xorl %r15d, %r15d - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003b8a movq $-1, %r14 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003b91 movq $-1, %r8 - 0x4c, 0x89, 0xdf, //0x00003b98 movq %r11, %rdi - //0x00003b9b LBB0_721 - 0xf3, 0x43, 0x0f, 0x6f, 0x14, 0x3a, //0x00003b9b movdqu (%r10,%r15), %xmm2 - 0x66, 0x0f, 0x6f, 0xe2, //0x00003ba1 movdqa %xmm2, %xmm4 - 0x66, 0x41, 0x0f, 0x64, 0xe0, //0x00003ba5 pcmpgtb %xmm8, %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x00003baa movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x64, 0xea, //0x00003bae pcmpgtb %xmm2, %xmm5 - 0x66, 0x0f, 0xdb, 0xec, //0x00003bb2 pand %xmm4, %xmm5 - 0x66, 0x0f, 0x6f, 0xe2, //0x00003bb6 movdqa %xmm2, %xmm4 - 0x66, 0x41, 0x0f, 0x74, 0xe1, //0x00003bba pcmpeqb %xmm9, %xmm4 - 0x66, 0x0f, 0x6f, 0xf2, //0x00003bbf movdqa %xmm2, %xmm6 - 0x66, 0x41, 0x0f, 0x74, 0xf2, //0x00003bc3 pcmpeqb %xmm10, %xmm6 - 0x66, 0x0f, 0xeb, 0xf4, //0x00003bc8 por %xmm4, %xmm6 - 0x66, 0x0f, 0x6f, 0xe2, //0x00003bcc movdqa %xmm2, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xe3, //0x00003bd0 pand %xmm11, %xmm4 - 0x66, 0x41, 0x0f, 0x74, 0xd4, //0x00003bd5 pcmpeqb %xmm12, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xe5, //0x00003bda pcmpeqb %xmm13, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x00003bdf pmovmskb %xmm4, %edx - 0x66, 0x0f, 0xeb, 0xe2, //0x00003be3 por %xmm2, %xmm4 - 0x66, 0x0f, 0xeb, 0xee, //0x00003be7 por %xmm6, %xmm5 - 0x66, 0x0f, 0xeb, 0xec, //0x00003beb por %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xda, //0x00003bef pmovmskb %xmm2, %ebx - 0x66, 0x44, 0x0f, 0xd7, 0xe6, //0x00003bf3 pmovmskb %xmm6, %r12d - 0x66, 0x0f, 0xd7, 0xcd, //0x00003bf8 pmovmskb %xmm5, %ecx - 0xf7, 0xd1, //0x00003bfc notl %ecx - 0x0f, 0xbc, 0xc9, //0x00003bfe bsfl %ecx, %ecx - 0x83, 0xf9, 0x10, //0x00003c01 cmpl $16, %ecx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00003c04 je LBB0_723 - 0xbe, 0xff, 0xff, 0xff, 0xff, //0x00003c0a movl $-1, %esi - 0xd3, 0xe6, //0x00003c0f shll %cl, %esi - 0xf7, 0xd6, //0x00003c11 notl %esi - 0x21, 0xf3, //0x00003c13 andl %esi, %ebx - 0x21, 0xf2, //0x00003c15 andl %esi, %edx - 0x44, 0x21, 0xe6, //0x00003c17 andl %r12d, %esi - 0x41, 0x89, 0xf4, //0x00003c1a movl %esi, %r12d - //0x00003c1d LBB0_723 - 0x8d, 0x73, 0xff, //0x00003c1d leal $-1(%rbx), %esi - 0x21, 0xde, //0x00003c20 andl %ebx, %esi - 0x0f, 0x85, 0x72, 0x04, 0x00, 0x00, //0x00003c22 jne LBB0_794 - 0x8d, 0x72, 0xff, //0x00003c28 leal $-1(%rdx), %esi - 0x21, 0xd6, //0x00003c2b andl %edx, %esi - 0x0f, 0x85, 0x67, 0x04, 0x00, 0x00, //0x00003c2d jne LBB0_794 - 0x41, 0x8d, 0x74, 0x24, 0xff, //0x00003c33 leal $-1(%r12), %esi - 0x44, 0x21, 0xe6, //0x00003c38 andl %r12d, %esi - 0x0f, 0x85, 0x59, 0x04, 0x00, 0x00, //0x00003c3b jne LBB0_794 - 0x85, 0xdb, //0x00003c41 testl %ebx, %ebx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00003c43 je LBB0_729 - 0x0f, 0xbc, 0xdb, //0x00003c49 bsfl %ebx, %ebx - 0x49, 0x83, 0xf8, 0xff, //0x00003c4c cmpq $-1, %r8 - 0x0f, 0x85, 0x2b, 0x05, 0x00, 0x00, //0x00003c50 jne LBB0_800 - 0x4c, 0x01, 0xfb, //0x00003c56 addq %r15, %rbx - 0x49, 0x89, 0xd8, //0x00003c59 movq %rbx, %r8 - //0x00003c5c LBB0_729 - 0x85, 0xd2, //0x00003c5c testl %edx, %edx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00003c5e je LBB0_732 - 0x0f, 0xbc, 0xd2, //0x00003c64 bsfl %edx, %edx - 0x49, 0x83, 0xfe, 0xff, //0x00003c67 cmpq $-1, %r14 - 0x0f, 0x85, 0xbf, 0x04, 0x00, 0x00, //0x00003c6b jne LBB0_796 - 0x4c, 0x01, 0xfa, //0x00003c71 addq %r15, %rdx - 0x49, 0x89, 0xd6, //0x00003c74 movq %rdx, %r14 - //0x00003c77 LBB0_732 - 0x45, 0x85, 0xe4, //0x00003c77 testl %r12d, %r12d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00003c7a je LBB0_735 - 0x41, 0x0f, 0xbc, 0xd4, //0x00003c80 bsfl %r12d, %edx - 0x49, 0x83, 0xf9, 0xff, //0x00003c84 cmpq $-1, %r9 - 0x0f, 0x85, 0xa2, 0x04, 0x00, 0x00, //0x00003c88 jne LBB0_796 - 0x4c, 0x01, 0xfa, //0x00003c8e addq %r15, %rdx - 0x49, 0x89, 0xd1, //0x00003c91 movq %rdx, %r9 - //0x00003c94 LBB0_735 - 0x83, 0xf9, 0x10, //0x00003c94 cmpl $16, %ecx - 0x0f, 0x85, 0xc3, 0x01, 0x00, 0x00, //0x00003c97 jne LBB0_768 - 0x48, 0x83, 0xc7, 0xf0, //0x00003c9d addq $-16, %rdi - 0x49, 0x83, 0xc7, 0x10, //0x00003ca1 addq $16, %r15 - 0x48, 0x83, 0xff, 0x0f, //0x00003ca5 cmpq $15, %rdi - 0x0f, 0x87, 0xec, 0xfe, 0xff, 0xff, //0x00003ca9 ja LBB0_721 - 0x4b, 0x8d, 0x34, 0x3a, //0x00003caf leaq (%r10,%r15), %rsi - 0x49, 0x89, 0xf4, //0x00003cb3 movq %rsi, %r12 - 0x4d, 0x39, 0xfb, //0x00003cb6 cmpq %r15, %r11 - 0x0f, 0x84, 0xb5, 0x01, 0x00, 0x00, //0x00003cb9 je LBB0_770 - //0x00003cbf LBB0_738 - 0x4c, 0x8d, 0x24, 0x3e, //0x00003cbf leaq (%rsi,%rdi), %r12 - 0x49, 0x89, 0xf3, //0x00003cc3 movq %rsi, %r11 - 0x4d, 0x29, 0xd3, //0x00003cc6 subq %r10, %r11 - 0x31, 0xc9, //0x00003cc9 xorl %ecx, %ecx - 0x4c, 0x8d, 0x3d, 0xae, 0x1d, 0x00, 0x00, //0x00003ccb leaq $7598(%rip), %r15 /* LJTI0_4+0(%rip) */ - 0xe9, 0x26, 0x00, 0x00, 0x00, //0x00003cd2 jmp LBB0_742 - //0x00003cd7 LBB0_739 - 0x49, 0x83, 0xf9, 0xff, //0x00003cd7 cmpq $-1, %r9 - 0x0f, 0x85, 0x3c, 0x04, 0x00, 0x00, //0x00003cdb jne LBB0_795 - 0x4d, 0x8d, 0x0c, 0x0b, //0x00003ce1 leaq (%r11,%rcx), %r9 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003ce5 .p2align 4, 0x90 - //0x00003cf0 LBB0_741 - 0x48, 0x83, 0xc1, 0x01, //0x00003cf0 addq $1, %rcx - 0x48, 0x39, 0xcf, //0x00003cf4 cmpq %rcx, %rdi - 0x0f, 0x84, 0x77, 0x01, 0x00, 0x00, //0x00003cf7 je LBB0_770 - //0x00003cfd LBB0_742 - 0x0f, 0xbe, 0x14, 0x0e, //0x00003cfd movsbl (%rsi,%rcx), %edx - 0x8d, 0x5a, 0xd0, //0x00003d01 leal $-48(%rdx), %ebx - 0x83, 0xfb, 0x0a, //0x00003d04 cmpl $10, %ebx - 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00003d07 jb LBB0_741 - 0x8d, 0x5a, 0xd5, //0x00003d0d leal $-43(%rdx), %ebx - 0x83, 0xfb, 0x1a, //0x00003d10 cmpl $26, %ebx - 0x0f, 0x87, 0x1c, 0x00, 0x00, 0x00, //0x00003d13 ja LBB0_747 - 0x49, 0x63, 0x14, 0x9f, //0x00003d19 movslq (%r15,%rbx,4), %rdx - 0x4c, 0x01, 0xfa, //0x00003d1d addq %r15, %rdx - 0xff, 0xe2, //0x00003d20 jmpq *%rdx - //0x00003d22 LBB0_745 - 0x49, 0x83, 0xf8, 0xff, //0x00003d22 cmpq $-1, %r8 - 0x0f, 0x85, 0xf1, 0x03, 0x00, 0x00, //0x00003d26 jne LBB0_795 - 0x4d, 0x8d, 0x04, 0x0b, //0x00003d2c leaq (%r11,%rcx), %r8 - 0xe9, 0xbb, 0xff, 0xff, 0xff, //0x00003d30 jmp LBB0_741 - //0x00003d35 LBB0_747 - 0x83, 0xfa, 0x65, //0x00003d35 cmpl $101, %edx - 0x0f, 0x85, 0x30, 0x01, 0x00, 0x00, //0x00003d38 jne LBB0_769 - //0x00003d3e LBB0_748 - 0x49, 0x83, 0xfe, 0xff, //0x00003d3e cmpq $-1, %r14 - 0x0f, 0x85, 0xd5, 0x03, 0x00, 0x00, //0x00003d42 jne LBB0_795 - 0x4d, 0x8d, 0x34, 0x0b, //0x00003d48 leaq (%r11,%rcx), %r14 - 0xe9, 0x9f, 0xff, 0xff, 0xff, //0x00003d4c jmp LBB0_741 - //0x00003d51 LBB0_750 - 0x49, 0x8b, 0x01, //0x00003d51 movq (%r9), %rax - 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00003d54 cmpq $4095, %rax - 0x0f, 0x8f, 0x37, 0x0a, 0x00, 0x00, //0x00003d5a jg LBB0_973 - 0x48, 0x8d, 0x48, 0x01, //0x00003d60 leaq $1(%rax), %rcx - 0x49, 0x89, 0x09, //0x00003d64 movq %rcx, (%r9) - 0x49, 0xc7, 0x44, 0xc1, 0x08, 0x05, 0x00, 0x00, 0x00, //0x00003d67 movq $5, $8(%r9,%rax,8) - 0xe9, 0xdb, 0xf2, 0xff, 0xff, //0x00003d70 jmp LBB0_555 - //0x00003d75 LBB0_752 - 0x48, 0x8b, 0x7d, 0xc8, //0x00003d75 movq $-56(%rbp), %rdi - 0x48, 0x8b, 0x0f, //0x00003d79 movq (%rdi), %rcx - 0x49, 0x8b, 0x17, //0x00003d7c movq (%r15), %rdx - 0x48, 0x8d, 0x72, 0xfc, //0x00003d7f leaq $-4(%rdx), %rsi - 0x48, 0x39, 0xf1, //0x00003d83 cmpq %rsi, %rcx - 0x0f, 0x87, 0xae, 0x14, 0x00, 0x00, //0x00003d86 ja LBB0_972 - 0x41, 0x8b, 0x54, 0x0d, 0x00, //0x00003d8c movl (%r13,%rcx), %edx - 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x00003d91 cmpl $1702063201, %edx - 0x0f, 0x85, 0x4f, 0x15, 0x00, 0x00, //0x00003d97 jne LBB0_974 - 0x48, 0x8d, 0x41, 0x04, //0x00003d9d leaq $4(%rcx), %rax - 0x48, 0x89, 0x07, //0x00003da1 movq %rax, (%rdi) - 0x48, 0x85, 0xc9, //0x00003da4 testq %rcx, %rcx - 0x0f, 0x8f, 0xa3, 0xf2, 0xff, 0xff, //0x00003da7 jg LBB0_555 - 0xe9, 0x30, 0x16, 0x00, 0x00, //0x00003dad jmp LBB0_755 - //0x00003db2 LBB0_756 - 0x48, 0x8b, 0x7d, 0xc8, //0x00003db2 movq $-56(%rbp), %rdi - 0x48, 0x8b, 0x0f, //0x00003db6 movq (%rdi), %rcx - 0x49, 0x8b, 0x17, //0x00003db9 movq (%r15), %rdx - 0x48, 0x8d, 0x72, 0xfd, //0x00003dbc leaq $-3(%rdx), %rsi - 0x48, 0x39, 0xf1, //0x00003dc0 cmpq %rsi, %rcx - 0x0f, 0x87, 0x71, 0x14, 0x00, 0x00, //0x00003dc3 ja LBB0_972 - 0x48, 0x8d, 0x41, 0xff, //0x00003dc9 leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0d, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x00003dcd cmpl $1819047278, $-1(%r13,%rcx) - 0x0f, 0x84, 0x2f, 0x00, 0x00, 0x00, //0x00003dd6 je LBB0_764 - 0xe9, 0x64, 0x15, 0x00, 0x00, //0x00003ddc jmp LBB0_758 - //0x00003de1 LBB0_762 - 0x48, 0x8b, 0x7d, 0xc8, //0x00003de1 movq $-56(%rbp), %rdi - 0x48, 0x8b, 0x0f, //0x00003de5 movq (%rdi), %rcx - 0x49, 0x8b, 0x17, //0x00003de8 movq (%r15), %rdx - 0x48, 0x8d, 0x72, 0xfd, //0x00003deb leaq $-3(%rdx), %rsi - 0x48, 0x39, 0xf1, //0x00003def cmpq %rsi, %rcx - 0x0f, 0x87, 0x42, 0x14, 0x00, 0x00, //0x00003df2 ja LBB0_972 - 0x48, 0x8d, 0x41, 0xff, //0x00003df8 leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0d, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00003dfc cmpl $1702195828, $-1(%r13,%rcx) - 0x0f, 0x85, 0x83, 0x15, 0x00, 0x00, //0x00003e05 jne LBB0_980 - //0x00003e0b LBB0_764 - 0x48, 0x8d, 0x51, 0x03, //0x00003e0b leaq $3(%rcx), %rdx - 0x48, 0x89, 0x17, //0x00003e0f movq %rdx, (%rdi) - 0x48, 0x85, 0xc9, //0x00003e12 testq %rcx, %rcx - 0x0f, 0x8f, 0x35, 0xf2, 0xff, 0xff, //0x00003e15 jg LBB0_555 - 0xe9, 0x31, 0x08, 0x00, 0x00, //0x00003e1b jmp LBB0_870 - //0x00003e20 LBB0_765 - 0x49, 0x8b, 0x01, //0x00003e20 movq (%r9), %rax - 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00003e23 cmpq $4095, %rax - 0x0f, 0x8f, 0x68, 0x09, 0x00, 0x00, //0x00003e29 jg LBB0_973 - 0x48, 0x8d, 0x48, 0x01, //0x00003e2f leaq $1(%rax), %rcx - 0x49, 0x89, 0x09, //0x00003e33 movq %rcx, (%r9) - 0x49, 0xc7, 0x44, 0xc1, 0x08, 0x06, 0x00, 0x00, 0x00, //0x00003e36 movq $6, $8(%r9,%rax,8) - 0xe9, 0x0c, 0xf2, 0xff, 0xff, //0x00003e3f jmp LBB0_555 - //0x00003e44 LBB0_767 - 0x49, 0x8d, 0x57, 0xff, //0x00003e44 leaq $-1(%r15), %rdx - 0x49, 0x39, 0xd1, //0x00003e48 cmpq %rdx, %r9 - 0x49, 0xf7, 0xd7, //0x00003e4b notq %r15 - 0x4d, 0x0f, 0x45, 0xfc, //0x00003e4e cmovneq %r12, %r15 - 0x84, 0xc9, //0x00003e52 testb %cl, %cl - 0x4d, 0x0f, 0x44, 0xfc, //0x00003e54 cmoveq %r12, %r15 - 0x4d, 0x89, 0xf8, //0x00003e58 movq %r15, %r8 - 0xe9, 0xae, 0xf1, 0xff, 0xff, //0x00003e5b jmp LBB0_553 - //0x00003e60 LBB0_768 - 0x41, 0x89, 0xcc, //0x00003e60 movl %ecx, %r12d - 0x4d, 0x01, 0xd4, //0x00003e63 addq %r10, %r12 - 0x4d, 0x01, 0xfc, //0x00003e66 addq %r15, %r12 - 0xe9, 0x06, 0x00, 0x00, 0x00, //0x00003e69 jmp LBB0_770 - //0x00003e6e LBB0_769 - 0x48, 0x01, 0xce, //0x00003e6e addq %rcx, %rsi - 0x49, 0x89, 0xf4, //0x00003e71 movq %rsi, %r12 - //0x00003e74 LBB0_770 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00003e74 movq $-1, %r15 - 0x4d, 0x85, 0xc0, //0x00003e7b testq %r8, %r8 - 0x0f, 0x84, 0x56, 0x14, 0x00, 0x00, //0x00003e7e je LBB0_971 - 0x4d, 0x85, 0xc9, //0x00003e84 testq %r9, %r9 - 0x0f, 0x84, 0x4d, 0x14, 0x00, 0x00, //0x00003e87 je LBB0_971 - 0x4d, 0x85, 0xf6, //0x00003e8d testq %r14, %r14 - 0x0f, 0x84, 0x44, 0x14, 0x00, 0x00, //0x00003e90 je LBB0_971 - 0x4d, 0x29, 0xd4, //0x00003e96 subq %r10, %r12 - 0x49, 0x8d, 0x4c, 0x24, 0xff, //0x00003e99 leaq $-1(%r12), %rcx - 0x49, 0x39, 0xc8, //0x00003e9e cmpq %rcx, %r8 - 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00003ea1 je LBB0_779 - 0x49, 0x39, 0xc9, //0x00003ea7 cmpq %rcx, %r9 - 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x00003eaa je LBB0_779 - 0x49, 0x39, 0xce, //0x00003eb0 cmpq %rcx, %r14 - 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00003eb3 je LBB0_779 - 0x4d, 0x85, 0xc9, //0x00003eb9 testq %r9, %r9 - 0x0f, 0x8e, 0xd7, 0x00, 0x00, 0x00, //0x00003ebc jle LBB0_783 - 0x49, 0x8d, 0x49, 0xff, //0x00003ec2 leaq $-1(%r9), %rcx - 0x49, 0x39, 0xce, //0x00003ec6 cmpq %rcx, %r14 - 0x0f, 0x84, 0xca, 0x00, 0x00, 0x00, //0x00003ec9 je LBB0_783 - 0x49, 0xf7, 0xd1, //0x00003ecf notq %r9 - 0x4d, 0x89, 0xcf, //0x00003ed2 movq %r9, %r15 - 0xe9, 0x06, 0x00, 0x00, 0x00, //0x00003ed5 jmp LBB0_780 - //0x00003eda LBB0_779 - 0x49, 0xf7, 0xdc, //0x00003eda negq %r12 - 0x4d, 0x89, 0xe7, //0x00003edd movq %r12, %r15 - //0x00003ee0 LBB0_780 - 0x4d, 0x85, 0xff, //0x00003ee0 testq %r15, %r15 - 0x0f, 0x88, 0xf1, 0x13, 0x00, 0x00, //0x00003ee3 js LBB0_971 - //0x00003ee9 LBB0_781 - 0x49, 0x01, 0xc7, //0x00003ee9 addq %rax, %r15 - 0x48, 0x8b, 0x4d, 0xc8, //0x00003eec movq $-56(%rbp), %rcx - 0x4c, 0x89, 0x39, //0x00003ef0 movq %r15, (%rcx) - 0x48, 0x85, 0xc0, //0x00003ef3 testq %rax, %rax - 0x4c, 0x8b, 0x7d, 0xc0, //0x00003ef6 movq $-64(%rbp), %r15 - 0x4c, 0x8b, 0x4d, 0x98, //0x00003efa movq $-104(%rbp), %r9 - 0x49, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003efe movabsq $4294977024, %r10 - 0x4c, 0x8d, 0x1d, 0x69, 0x19, 0x00, 0x00, //0x00003f08 leaq $6505(%rip), %r11 /* LJTI0_2+0(%rip) */ - 0x4c, 0x8b, 0x75, 0xb8, //0x00003f0f movq $-72(%rbp), %r14 - 0x0f, 0x8f, 0x37, 0xf1, 0xff, 0xff, //0x00003f13 jg LBB0_555 - 0xe9, 0xd0, 0x14, 0x00, 0x00, //0x00003f19 jmp LBB0_782 - //0x00003f1e LBB0_603 - 0x4c, 0x01, 0xe8, //0x00003f1e addq %r13, %rax - 0x49, 0x83, 0xfe, 0x20, //0x00003f21 cmpq $32, %r14 - 0x0f, 0x82, 0x25, 0x02, 0x00, 0x00, //0x00003f25 jb LBB0_798 - //0x00003f2b LBB0_604 - 0xf3, 0x0f, 0x6f, 0x10, //0x00003f2b movdqu (%rax), %xmm2 - 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00003f2f movdqu $16(%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xea, //0x00003f34 movdqa %xmm2, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00003f38 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x00003f3c pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x6f, 0xec, //0x00003f40 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00003f44 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00003f48 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x74, 0xd1, //0x00003f4c pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xd2, //0x00003f50 pmovmskb %xmm2, %edx - 0x66, 0x0f, 0x74, 0xe1, //0x00003f54 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xfc, //0x00003f58 pmovmskb %xmm4, %edi - 0x48, 0xc1, 0xe6, 0x10, //0x00003f5c shlq $16, %rsi - 0x48, 0x09, 0xf1, //0x00003f60 orq %rsi, %rcx - 0x48, 0xc1, 0xe7, 0x10, //0x00003f63 shlq $16, %rdi - 0x48, 0x09, 0xfa, //0x00003f67 orq %rdi, %rdx - 0x0f, 0x85, 0x7e, 0x02, 0x00, 0x00, //0x00003f6a jne LBB0_806 - 0x4d, 0x85, 0xdb, //0x00003f70 testq %r11, %r11 - 0x4c, 0x8b, 0x7d, 0xc0, //0x00003f73 movq $-64(%rbp), %r15 - 0x0f, 0x85, 0x8d, 0x02, 0x00, 0x00, //0x00003f77 jne LBB0_808 - 0x45, 0x31, 0xdb, //0x00003f7d xorl %r11d, %r11d - 0x48, 0x85, 0xc9, //0x00003f80 testq %rcx, %rcx - 0x0f, 0x84, 0xbd, 0x02, 0x00, 0x00, //0x00003f83 je LBB0_809 - //0x00003f89 LBB0_607 - 0x48, 0x0f, 0xbc, 0xc9, //0x00003f89 bsfq %rcx, %rcx - 0x48, 0x03, 0x45, 0x90, //0x00003f8d addq $-112(%rbp), %rax - 0x48, 0x01, 0xc8, //0x00003f91 addq %rcx, %rax - 0xe9, 0xba, 0xf6, 0xff, 0xff, //0x00003f94 jmp LBB0_612 - //0x00003f99 LBB0_783 - 0x4c, 0x89, 0xc1, //0x00003f99 movq %r8, %rcx - 0x4c, 0x09, 0xf1, //0x00003f9c orq %r14, %rcx - 0x0f, 0x99, 0xc1, //0x00003f9f setns %cl - 0x0f, 0x88, 0xae, 0x00, 0x00, 0x00, //0x00003fa2 js LBB0_788 - 0x4d, 0x39, 0xf0, //0x00003fa8 cmpq %r14, %r8 - 0x0f, 0x8c, 0xa5, 0x00, 0x00, 0x00, //0x00003fab jl LBB0_788 - 0x49, 0xf7, 0xd0, //0x00003fb1 notq %r8 - 0x4d, 0x89, 0xc7, //0x00003fb4 movq %r8, %r15 - 0xe9, 0x24, 0xff, 0xff, 0xff, //0x00003fb7 jmp LBB0_780 - //0x00003fbc LBB0_786 - 0x48, 0x8b, 0x4d, 0xa8, //0x00003fbc movq $-88(%rbp), %rcx - 0x48, 0x8b, 0x7d, 0xa0, //0x00003fc0 movq $-96(%rbp), %rdi - 0x4c, 0x8d, 0x04, 0x39, //0x00003fc4 leaq (%rcx,%rdi), %r8 - 0x49, 0x29, 0xf0, //0x00003fc8 subq %rsi, %r8 - 0x49, 0x29, 0xd0, //0x00003fcb subq %rdx, %r8 - 0xe9, 0x3b, 0xf0, 0xff, 0xff, //0x00003fce jmp LBB0_553 - //0x00003fd3 LBB0_787 - 0x0f, 0xbc, 0xca, //0x00003fd3 bsfl %edx, %ecx - 0xe9, 0xb0, 0x00, 0x00, 0x00, //0x00003fd6 jmp LBB0_793 - //0x00003fdb LBB0_666 - 0x4c, 0x01, 0xe8, //0x00003fdb addq %r13, %rax - 0x49, 0x83, 0xfe, 0x20, //0x00003fde cmpq $32, %r14 - 0x0f, 0x82, 0xbf, 0x01, 0x00, 0x00, //0x00003fe2 jb LBB0_803 - //0x00003fe8 LBB0_667 - 0xf3, 0x0f, 0x6f, 0x10, //0x00003fe8 movdqu (%rax), %xmm2 - 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00003fec movdqu $16(%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xea, //0x00003ff1 movdqa %xmm2, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00003ff5 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00003ff9 pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x00003ffd movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00004001 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x00004005 pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x74, 0xd1, //0x00004009 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xf2, //0x0000400d pmovmskb %xmm2, %esi - 0x66, 0x0f, 0x74, 0xe1, //0x00004011 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xfc, //0x00004015 pmovmskb %xmm4, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x00004019 shlq $16, %rcx - 0x48, 0x09, 0xca, //0x0000401d orq %rcx, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x00004020 shlq $16, %rdi - 0x48, 0x09, 0xfe, //0x00004024 orq %rdi, %rsi - 0x0f, 0x85, 0xdd, 0x02, 0x00, 0x00, //0x00004027 jne LBB0_822 - 0x4d, 0x85, 0xdb, //0x0000402d testq %r11, %r11 - 0x4c, 0x8b, 0x7d, 0xc0, //0x00004030 movq $-64(%rbp), %r15 - 0x0f, 0x85, 0xec, 0x02, 0x00, 0x00, //0x00004034 jne LBB0_824 - 0x45, 0x31, 0xdb, //0x0000403a xorl %r11d, %r11d - 0x48, 0x85, 0xd2, //0x0000403d testq %rdx, %rdx - 0x0f, 0x84, 0x1c, 0x03, 0x00, 0x00, //0x00004040 je LBB0_825 - //0x00004046 LBB0_670 - 0x48, 0x0f, 0xbc, 0xca, //0x00004046 bsfq %rdx, %rcx - 0x48, 0x03, 0x45, 0x90, //0x0000404a addq $-112(%rbp), %rax - 0x48, 0x01, 0xc8, //0x0000404e addq %rcx, %rax - 0xe9, 0x1d, 0xf8, 0xff, 0xff, //0x00004051 jmp LBB0_675 - //0x00004056 LBB0_788 - 0x49, 0x8d, 0x56, 0xff, //0x00004056 leaq $-1(%r14), %rdx - 0x49, 0x39, 0xd0, //0x0000405a cmpq %rdx, %r8 - 0x49, 0xf7, 0xd6, //0x0000405d notq %r14 - 0x4d, 0x0f, 0x45, 0xf4, //0x00004060 cmovneq %r12, %r14 - 0x84, 0xc9, //0x00004064 testb %cl, %cl - 0x4d, 0x0f, 0x44, 0xf4, //0x00004066 cmoveq %r12, %r14 - 0x4d, 0x89, 0xf7, //0x0000406a movq %r14, %r15 - 0xe9, 0x6e, 0xfe, 0xff, 0xff, //0x0000406d jmp LBB0_780 - //0x00004072 LBB0_789 - 0x41, 0x0f, 0xbc, 0xca, //0x00004072 bsfl %r10d, %ecx - 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00004076 jmp LBB0_793 - //0x0000407b LBB0_790 - 0x89, 0xf9, //0x0000407b movl %edi, %ecx - 0xe9, 0x09, 0x00, 0x00, 0x00, //0x0000407d jmp LBB0_793 - //0x00004082 LBB0_791 - 0x89, 0xf1, //0x00004082 movl %esi, %ecx - 0xe9, 0x02, 0x00, 0x00, 0x00, //0x00004084 jmp LBB0_793 - //0x00004089 LBB0_792 - 0x89, 0xd1, //0x00004089 movl %edx, %ecx - //0x0000408b LBB0_793 - 0x49, 0xf7, 0xd0, //0x0000408b notq %r8 - 0x49, 0x29, 0xc8, //0x0000408e subq %rcx, %r8 - 0x48, 0x8b, 0x7d, 0xa0, //0x00004091 movq $-96(%rbp), %rdi - 0xe9, 0x74, 0xef, 0xff, 0xff, //0x00004095 jmp LBB0_553 - //0x0000409a LBB0_794 - 0x0f, 0xbc, 0xce, //0x0000409a bsfl %esi, %ecx - 0xe9, 0xe1, 0x00, 0x00, 0x00, //0x0000409d jmp LBB0_801 - //0x000040a2 LBB0_700 - 0x4c, 0x01, 0xe8, //0x000040a2 addq %r13, %rax - 0x49, 0x83, 0xfe, 0x20, //0x000040a5 cmpq $32, %r14 - 0x0f, 0x82, 0x60, 0x04, 0x00, 0x00, //0x000040a9 jb LBB0_846 - //0x000040af LBB0_701 - 0xf3, 0x0f, 0x6f, 0x10, //0x000040af movdqu (%rax), %xmm2 - 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x000040b3 movdqu $16(%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xea, //0x000040b8 movdqa %xmm2, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000040bc pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x000040c0 pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x000040c4 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000040c8 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x000040cc pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x74, 0xd1, //0x000040d0 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xf2, //0x000040d4 pmovmskb %xmm2, %esi - 0x66, 0x0f, 0x74, 0xe1, //0x000040d8 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xfc, //0x000040dc pmovmskb %xmm4, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x000040e0 shlq $16, %rcx - 0x48, 0x09, 0xca, //0x000040e4 orq %rcx, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x000040e7 shlq $16, %rdi - 0x48, 0x09, 0xfe, //0x000040eb orq %rdi, %rsi - 0x0f, 0x85, 0xbb, 0x03, 0x00, 0x00, //0x000040ee jne LBB0_842 - 0x4d, 0x85, 0xdb, //0x000040f4 testq %r11, %r11 - 0x4c, 0x8b, 0x7d, 0xc0, //0x000040f7 movq $-64(%rbp), %r15 - 0x0f, 0x85, 0xca, 0x03, 0x00, 0x00, //0x000040fb jne LBB0_844 - 0x45, 0x31, 0xdb, //0x00004101 xorl %r11d, %r11d - 0x48, 0x85, 0xd2, //0x00004104 testq %rdx, %rdx - 0x0f, 0x84, 0xfa, 0x03, 0x00, 0x00, //0x00004107 je LBB0_845 - //0x0000410d LBB0_704 - 0x48, 0x0f, 0xbc, 0xca, //0x0000410d bsfq %rdx, %rcx - 0x48, 0x03, 0x45, 0x90, //0x00004111 addq $-112(%rbp), %rax - 0x48, 0x01, 0xc8, //0x00004115 addq %rcx, %rax - 0xe9, 0xd6, 0xf9, 0xff, 0xff, //0x00004118 jmp LBB0_710 - //0x0000411d LBB0_795 - 0x48, 0x8b, 0x55, 0xb0, //0x0000411d movq $-80(%rbp), %rdx - 0x4c, 0x8d, 0x3c, 0x02, //0x00004121 leaq (%rdx,%rax), %r15 - 0x49, 0x29, 0xf7, //0x00004125 subq %rsi, %r15 - 0x49, 0x29, 0xcf, //0x00004128 subq %rcx, %r15 - 0xe9, 0xb0, 0xfd, 0xff, 0xff, //0x0000412b jmp LBB0_780 - //0x00004130 LBB0_796 - 0x89, 0xd1, //0x00004130 movl %edx, %ecx - 0xe9, 0x4c, 0x00, 0x00, 0x00, //0x00004132 jmp LBB0_801 - //0x00004137 LBB0_797 - 0x4b, 0x8d, 0x04, 0x28, //0x00004137 leaq (%r8,%r13), %rax - 0x48, 0xc7, 0x45, 0xd0, 0xff, 0xff, 0xff, 0xff, //0x0000413b movq $-1, $-48(%rbp) - 0x45, 0x31, 0xdb, //0x00004143 xorl %r11d, %r11d - 0x49, 0x83, 0xfe, 0x20, //0x00004146 cmpq $32, %r14 - 0x0f, 0x83, 0xdb, 0xfd, 0xff, 0xff, //0x0000414a jae LBB0_604 - //0x00004150 LBB0_798 - 0x4c, 0x8b, 0x7d, 0xc0, //0x00004150 movq $-64(%rbp), %r15 - 0xe9, 0xf5, 0x00, 0x00, 0x00, //0x00004154 jmp LBB0_810 - //0x00004159 LBB0_799 - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00004159 movq $-1, %r9 - 0x48, 0x8b, 0x75, 0xd0, //0x00004160 movq $-48(%rbp), %rsi - 0x4c, 0x89, 0xdb, //0x00004164 movq %r11, %rbx - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00004167 movq $-1, %r15 - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x0000416e movq $-1, %r14 - 0x4c, 0x8d, 0x15, 0x70, 0x19, 0x00, 0x00, //0x00004175 leaq $6512(%rip), %r10 /* LJTI0_5+0(%rip) */ - 0xe9, 0x84, 0xf2, 0xff, 0xff, //0x0000417c jmp LBB0_643 - //0x00004181 LBB0_800 - 0x89, 0xd9, //0x00004181 movl %ebx, %ecx - //0x00004183 LBB0_801 - 0x49, 0xf7, 0xd7, //0x00004183 notq %r15 - 0x49, 0x29, 0xcf, //0x00004186 subq %rcx, %r15 - 0xe9, 0x52, 0xfd, 0xff, 0xff, //0x00004189 jmp LBB0_780 - //0x0000418e LBB0_802 - 0x4b, 0x8d, 0x04, 0x28, //0x0000418e leaq (%r8,%r13), %rax - 0x48, 0xc7, 0x45, 0xd0, 0xff, 0xff, 0xff, 0xff, //0x00004192 movq $-1, $-48(%rbp) - 0x45, 0x31, 0xdb, //0x0000419a xorl %r11d, %r11d - 0x49, 0x83, 0xfe, 0x20, //0x0000419d cmpq $32, %r14 - 0x0f, 0x83, 0x41, 0xfe, 0xff, 0xff, //0x000041a1 jae LBB0_667 - //0x000041a7 LBB0_803 - 0x4c, 0x8b, 0x7d, 0xc0, //0x000041a7 movq $-64(%rbp), %r15 - 0xe9, 0xba, 0x01, 0x00, 0x00, //0x000041ab jmp LBB0_826 - //0x000041b0 LBB0_804 - 0x4b, 0x8d, 0x04, 0x28, //0x000041b0 leaq (%r8,%r13), %rax - 0x48, 0xc7, 0x45, 0xd0, 0xff, 0xff, 0xff, 0xff, //0x000041b4 movq $-1, $-48(%rbp) - 0x45, 0x31, 0xdb, //0x000041bc xorl %r11d, %r11d - 0x49, 0x83, 0xfe, 0x20, //0x000041bf cmpq $32, %r14 - 0x0f, 0x83, 0xe6, 0xfe, 0xff, 0xff, //0x000041c3 jae LBB0_701 - 0xe9, 0x41, 0x03, 0x00, 0x00, //0x000041c9 jmp LBB0_846 - //0x000041ce LBB0_805 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000041ce movq $-1, %r8 - 0x4c, 0x89, 0xd6, //0x000041d5 movq %r10, %rsi - 0x4c, 0x89, 0xdf, //0x000041d8 movq %r11, %rdi - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x000041db movq $-1, %r14 - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000041e2 movq $-1, %r9 - 0xe9, 0xd1, 0xfa, 0xff, 0xff, //0x000041e9 jmp LBB0_738 - //0x000041ee LBB0_806 - 0x48, 0x83, 0x7d, 0xd0, 0xff, //0x000041ee cmpq $-1, $-48(%rbp) - 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x000041f3 jne LBB0_808 - 0x48, 0x89, 0xc6, //0x000041f9 movq %rax, %rsi - 0x4c, 0x29, 0xee, //0x000041fc subq %r13, %rsi - 0x48, 0x0f, 0xbc, 0xfa, //0x000041ff bsfq %rdx, %rdi - 0x48, 0x01, 0xf7, //0x00004203 addq %rsi, %rdi - 0x48, 0x89, 0x7d, 0xd0, //0x00004206 movq %rdi, $-48(%rbp) - //0x0000420a LBB0_808 - 0x44, 0x89, 0xde, //0x0000420a movl %r11d, %esi - 0xf7, 0xd6, //0x0000420d notl %esi - 0x21, 0xd6, //0x0000420f andl %edx, %esi - 0x41, 0x8d, 0x3c, 0x73, //0x00004211 leal (%r11,%rsi,2), %edi - 0x8d, 0x1c, 0x36, //0x00004215 leal (%rsi,%rsi), %ebx - 0xf7, 0xd3, //0x00004218 notl %ebx - 0x21, 0xd3, //0x0000421a andl %edx, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000421c andl $-1431655766, %ebx - 0x45, 0x31, 0xdb, //0x00004222 xorl %r11d, %r11d - 0x01, 0xf3, //0x00004225 addl %esi, %ebx - 0x41, 0x0f, 0x92, 0xc3, //0x00004227 setb %r11b - 0x01, 0xdb, //0x0000422b addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x0000422d xorl $1431655765, %ebx - 0x21, 0xfb, //0x00004233 andl %edi, %ebx - 0xf7, 0xd3, //0x00004235 notl %ebx - 0x21, 0xd9, //0x00004237 andl %ebx, %ecx - 0x4c, 0x8b, 0x7d, 0xc0, //0x00004239 movq $-64(%rbp), %r15 - 0x48, 0x85, 0xc9, //0x0000423d testq %rcx, %rcx - 0x0f, 0x85, 0x43, 0xfd, 0xff, 0xff, //0x00004240 jne LBB0_607 - //0x00004246 LBB0_809 - 0x48, 0x83, 0xc0, 0x20, //0x00004246 addq $32, %rax - 0x49, 0x83, 0xc6, 0xe0, //0x0000424a addq $-32, %r14 - //0x0000424e LBB0_810 - 0x4d, 0x85, 0xdb, //0x0000424e testq %r11, %r11 - 0x0f, 0x85, 0xcf, 0x01, 0x00, 0x00, //0x00004251 jne LBB0_838 - 0x48, 0x8b, 0x4d, 0xd0, //0x00004257 movq $-48(%rbp), %rcx - 0x4d, 0x85, 0xf6, //0x0000425b testq %r14, %r14 - 0x0f, 0x84, 0x89, 0x00, 0x00, 0x00, //0x0000425e je LBB0_821 - //0x00004264 LBB0_812 - 0x31, 0xd2, //0x00004264 xorl %edx, %edx - //0x00004266 LBB0_813 - 0x0f, 0xb6, 0x1c, 0x10, //0x00004266 movzbl (%rax,%rdx), %ebx - 0x80, 0xfb, 0x22, //0x0000426a cmpb $34, %bl - 0x0f, 0x84, 0x73, 0x00, 0x00, 0x00, //0x0000426d je LBB0_820 - 0x80, 0xfb, 0x5c, //0x00004273 cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00004276 je LBB0_818 - 0x48, 0x83, 0xc2, 0x01, //0x0000427c addq $1, %rdx - 0x49, 0x39, 0xd6, //0x00004280 cmpq %rdx, %r14 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00004283 jne LBB0_813 - 0xe9, 0x67, 0x00, 0x00, 0x00, //0x00004289 jmp LBB0_816 - //0x0000428e LBB0_818 - 0x49, 0x8d, 0x76, 0xff, //0x0000428e leaq $-1(%r14), %rsi - 0x48, 0x39, 0xd6, //0x00004292 cmpq %rdx, %rsi - 0x0f, 0x84, 0x12, 0x05, 0x00, 0x00, //0x00004295 je LBB0_712 - 0x48, 0x8b, 0xb5, 0x40, 0xff, 0xff, 0xff, //0x0000429b movq $-192(%rbp), %rsi - 0x48, 0x01, 0xc6, //0x000042a2 addq %rax, %rsi - 0x48, 0x01, 0xd6, //0x000042a5 addq %rdx, %rsi - 0x48, 0x83, 0xf9, 0xff, //0x000042a8 cmpq $-1, %rcx - 0x48, 0x8b, 0x7d, 0xd0, //0x000042ac movq $-48(%rbp), %rdi - 0x48, 0x0f, 0x44, 0xfe, //0x000042b0 cmoveq %rsi, %rdi - 0x48, 0x89, 0x7d, 0xd0, //0x000042b4 movq %rdi, $-48(%rbp) - 0x48, 0x0f, 0x44, 0xce, //0x000042b8 cmoveq %rsi, %rcx - 0x48, 0x01, 0xd0, //0x000042bc addq %rdx, %rax - 0x48, 0x83, 0xc0, 0x02, //0x000042bf addq $2, %rax - 0x4c, 0x89, 0xf6, //0x000042c3 movq %r14, %rsi - 0x48, 0x29, 0xd6, //0x000042c6 subq %rdx, %rsi - 0x48, 0x83, 0xc6, 0xfe, //0x000042c9 addq $-2, %rsi - 0x49, 0x83, 0xc6, 0xfe, //0x000042cd addq $-2, %r14 - 0x49, 0x39, 0xd6, //0x000042d1 cmpq %rdx, %r14 - 0x49, 0x89, 0xf6, //0x000042d4 movq %rsi, %r14 - 0x4c, 0x8b, 0x7d, 0xc0, //0x000042d7 movq $-64(%rbp), %r15 - 0x0f, 0x85, 0x83, 0xff, 0xff, 0xff, //0x000042db jne LBB0_812 - 0xe9, 0xc7, 0x04, 0x00, 0x00, //0x000042e1 jmp LBB0_712 - //0x000042e6 LBB0_820 - 0x48, 0x01, 0xd0, //0x000042e6 addq %rdx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x000042e9 addq $1, %rax - //0x000042ed LBB0_821 - 0x4c, 0x29, 0xe8, //0x000042ed subq %r13, %rax - 0xe9, 0x5e, 0xf3, 0xff, 0xff, //0x000042f0 jmp LBB0_612 - //0x000042f5 LBB0_816 - 0x80, 0xfb, 0x22, //0x000042f5 cmpb $34, %bl - 0x0f, 0x85, 0xaf, 0x04, 0x00, 0x00, //0x000042f8 jne LBB0_712 - 0x4c, 0x01, 0xf0, //0x000042fe addq %r14, %rax - 0x4c, 0x8b, 0x7d, 0xc0, //0x00004301 movq $-64(%rbp), %r15 - 0xe9, 0xe3, 0xff, 0xff, 0xff, //0x00004305 jmp LBB0_821 - //0x0000430a LBB0_822 - 0x48, 0x83, 0x7d, 0xd0, 0xff, //0x0000430a cmpq $-1, $-48(%rbp) - 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x0000430f jne LBB0_824 - 0x48, 0x89, 0xc1, //0x00004315 movq %rax, %rcx - 0x4c, 0x29, 0xe9, //0x00004318 subq %r13, %rcx - 0x48, 0x0f, 0xbc, 0xfe, //0x0000431b bsfq %rsi, %rdi - 0x48, 0x01, 0xcf, //0x0000431f addq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xd0, //0x00004322 movq %rdi, $-48(%rbp) - //0x00004326 LBB0_824 - 0x44, 0x89, 0xd9, //0x00004326 movl %r11d, %ecx - 0xf7, 0xd1, //0x00004329 notl %ecx - 0x21, 0xf1, //0x0000432b andl %esi, %ecx - 0x41, 0x8d, 0x3c, 0x4b, //0x0000432d leal (%r11,%rcx,2), %edi - 0x8d, 0x1c, 0x09, //0x00004331 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x00004334 notl %ebx - 0x21, 0xf3, //0x00004336 andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00004338 andl $-1431655766, %ebx - 0x45, 0x31, 0xdb, //0x0000433e xorl %r11d, %r11d - 0x01, 0xcb, //0x00004341 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc3, //0x00004343 setb %r11b - 0x01, 0xdb, //0x00004347 addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00004349 xorl $1431655765, %ebx - 0x21, 0xfb, //0x0000434f andl %edi, %ebx - 0xf7, 0xd3, //0x00004351 notl %ebx - 0x21, 0xda, //0x00004353 andl %ebx, %edx - 0x4c, 0x8b, 0x7d, 0xc0, //0x00004355 movq $-64(%rbp), %r15 - 0x48, 0x85, 0xd2, //0x00004359 testq %rdx, %rdx - 0x0f, 0x85, 0xe4, 0xfc, 0xff, 0xff, //0x0000435c jne LBB0_670 - //0x00004362 LBB0_825 - 0x48, 0x83, 0xc0, 0x20, //0x00004362 addq $32, %rax - 0x49, 0x83, 0xc6, 0xe0, //0x00004366 addq $-32, %r14 - //0x0000436a LBB0_826 - 0x4d, 0x85, 0xdb, //0x0000436a testq %r11, %r11 - 0x0f, 0x85, 0xf8, 0x00, 0x00, 0x00, //0x0000436d jne LBB0_840 - 0x48, 0x8b, 0x55, 0xd0, //0x00004373 movq $-48(%rbp), %rdx - 0x4d, 0x85, 0xf6, //0x00004377 testq %r14, %r14 - 0x0f, 0x84, 0x89, 0x00, 0x00, 0x00, //0x0000437a je LBB0_837 - //0x00004380 LBB0_828 - 0x31, 0xf6, //0x00004380 xorl %esi, %esi - //0x00004382 LBB0_829 - 0x0f, 0xb6, 0x0c, 0x30, //0x00004382 movzbl (%rax,%rsi), %ecx - 0x80, 0xf9, 0x22, //0x00004386 cmpb $34, %cl - 0x0f, 0x84, 0x73, 0x00, 0x00, 0x00, //0x00004389 je LBB0_836 - 0x80, 0xf9, 0x5c, //0x0000438f cmpb $92, %cl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00004392 je LBB0_834 - 0x48, 0x83, 0xc6, 0x01, //0x00004398 addq $1, %rsi - 0x49, 0x39, 0xf6, //0x0000439c cmpq %rsi, %r14 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x0000439f jne LBB0_829 - 0xe9, 0x67, 0x00, 0x00, 0x00, //0x000043a5 jmp LBB0_832 - //0x000043aa LBB0_834 - 0x49, 0x8d, 0x4e, 0xff, //0x000043aa leaq $-1(%r14), %rcx - 0x48, 0x39, 0xf1, //0x000043ae cmpq %rsi, %rcx - 0x0f, 0x84, 0xf6, 0x03, 0x00, 0x00, //0x000043b1 je LBB0_712 - 0x48, 0x8b, 0x8d, 0x40, 0xff, 0xff, 0xff, //0x000043b7 movq $-192(%rbp), %rcx - 0x48, 0x01, 0xc1, //0x000043be addq %rax, %rcx - 0x48, 0x01, 0xf1, //0x000043c1 addq %rsi, %rcx - 0x48, 0x83, 0xfa, 0xff, //0x000043c4 cmpq $-1, %rdx - 0x48, 0x8b, 0x7d, 0xd0, //0x000043c8 movq $-48(%rbp), %rdi - 0x48, 0x0f, 0x44, 0xf9, //0x000043cc cmoveq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xd0, //0x000043d0 movq %rdi, $-48(%rbp) - 0x48, 0x0f, 0x44, 0xd1, //0x000043d4 cmoveq %rcx, %rdx - 0x48, 0x01, 0xf0, //0x000043d8 addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x02, //0x000043db addq $2, %rax - 0x4c, 0x89, 0xf1, //0x000043df movq %r14, %rcx - 0x48, 0x29, 0xf1, //0x000043e2 subq %rsi, %rcx - 0x48, 0x83, 0xc1, 0xfe, //0x000043e5 addq $-2, %rcx - 0x49, 0x83, 0xc6, 0xfe, //0x000043e9 addq $-2, %r14 - 0x49, 0x39, 0xf6, //0x000043ed cmpq %rsi, %r14 - 0x49, 0x89, 0xce, //0x000043f0 movq %rcx, %r14 - 0x4c, 0x8b, 0x7d, 0xc0, //0x000043f3 movq $-64(%rbp), %r15 - 0x0f, 0x85, 0x83, 0xff, 0xff, 0xff, //0x000043f7 jne LBB0_828 - 0xe9, 0xab, 0x03, 0x00, 0x00, //0x000043fd jmp LBB0_712 - //0x00004402 LBB0_836 - 0x48, 0x01, 0xf0, //0x00004402 addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00004405 addq $1, %rax - //0x00004409 LBB0_837 - 0x4c, 0x29, 0xe8, //0x00004409 subq %r13, %rax - 0xe9, 0x62, 0xf4, 0xff, 0xff, //0x0000440c jmp LBB0_675 - //0x00004411 LBB0_832 - 0x80, 0xf9, 0x22, //0x00004411 cmpb $34, %cl - 0x0f, 0x85, 0x93, 0x03, 0x00, 0x00, //0x00004414 jne LBB0_712 - 0x4c, 0x01, 0xf0, //0x0000441a addq %r14, %rax - 0x4c, 0x8b, 0x7d, 0xc0, //0x0000441d movq $-64(%rbp), %r15 - 0xe9, 0xe3, 0xff, 0xff, 0xff, //0x00004421 jmp LBB0_837 - //0x00004426 LBB0_838 - 0x4d, 0x85, 0xf6, //0x00004426 testq %r14, %r14 - 0x0f, 0x84, 0x7e, 0x03, 0x00, 0x00, //0x00004429 je LBB0_712 - 0x48, 0x8b, 0x8d, 0x48, 0xff, 0xff, 0xff, //0x0000442f movq $-184(%rbp), %rcx - 0x48, 0x8d, 0x14, 0x08, //0x00004436 leaq (%rax,%rcx), %rdx - 0x48, 0x8b, 0x75, 0xd0, //0x0000443a movq $-48(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x0000443e cmpq $-1, %rsi - 0x48, 0x89, 0xf1, //0x00004442 movq %rsi, %rcx - 0x48, 0x0f, 0x44, 0xf2, //0x00004445 cmoveq %rdx, %rsi - 0x48, 0x0f, 0x44, 0xca, //0x00004449 cmoveq %rdx, %rcx - 0x48, 0x83, 0xc0, 0x01, //0x0000444d addq $1, %rax - 0x49, 0x83, 0xc6, 0xff, //0x00004451 addq $-1, %r14 - 0x48, 0x89, 0x75, 0xd0, //0x00004455 movq %rsi, $-48(%rbp) - 0x4c, 0x8b, 0x7d, 0xc0, //0x00004459 movq $-64(%rbp), %r15 - 0x4d, 0x85, 0xf6, //0x0000445d testq %r14, %r14 - 0x0f, 0x85, 0xfe, 0xfd, 0xff, 0xff, //0x00004460 jne LBB0_812 - 0xe9, 0x82, 0xfe, 0xff, 0xff, //0x00004466 jmp LBB0_821 - //0x0000446b LBB0_840 - 0x4d, 0x85, 0xf6, //0x0000446b testq %r14, %r14 - 0x0f, 0x84, 0x39, 0x03, 0x00, 0x00, //0x0000446e je LBB0_712 - 0x48, 0x8b, 0x8d, 0x48, 0xff, 0xff, 0xff, //0x00004474 movq $-184(%rbp), %rcx - 0x48, 0x01, 0xc1, //0x0000447b addq %rax, %rcx - 0x48, 0x8b, 0x75, 0xd0, //0x0000447e movq $-48(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x00004482 cmpq $-1, %rsi - 0x48, 0x89, 0xf2, //0x00004486 movq %rsi, %rdx - 0x48, 0x0f, 0x44, 0xf1, //0x00004489 cmoveq %rcx, %rsi - 0x48, 0x0f, 0x44, 0xd1, //0x0000448d cmoveq %rcx, %rdx - 0x48, 0x83, 0xc0, 0x01, //0x00004491 addq $1, %rax - 0x49, 0x83, 0xc6, 0xff, //0x00004495 addq $-1, %r14 - 0x48, 0x89, 0x75, 0xd0, //0x00004499 movq %rsi, $-48(%rbp) - 0x4c, 0x8b, 0x7d, 0xc0, //0x0000449d movq $-64(%rbp), %r15 - 0x4d, 0x85, 0xf6, //0x000044a1 testq %r14, %r14 - 0x0f, 0x85, 0xd6, 0xfe, 0xff, 0xff, //0x000044a4 jne LBB0_828 - 0xe9, 0x5a, 0xff, 0xff, 0xff, //0x000044aa jmp LBB0_837 - //0x000044af LBB0_842 - 0x48, 0x83, 0x7d, 0xd0, 0xff, //0x000044af cmpq $-1, $-48(%rbp) - 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x000044b4 jne LBB0_844 - 0x48, 0x89, 0xc1, //0x000044ba movq %rax, %rcx - 0x4c, 0x29, 0xe9, //0x000044bd subq %r13, %rcx - 0x48, 0x0f, 0xbc, 0xfe, //0x000044c0 bsfq %rsi, %rdi - 0x48, 0x01, 0xcf, //0x000044c4 addq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xd0, //0x000044c7 movq %rdi, $-48(%rbp) - //0x000044cb LBB0_844 - 0x44, 0x89, 0xd9, //0x000044cb movl %r11d, %ecx - 0xf7, 0xd1, //0x000044ce notl %ecx - 0x21, 0xf1, //0x000044d0 andl %esi, %ecx - 0x41, 0x8d, 0x3c, 0x4b, //0x000044d2 leal (%r11,%rcx,2), %edi - 0x8d, 0x1c, 0x09, //0x000044d6 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x000044d9 notl %ebx - 0x21, 0xf3, //0x000044db andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x000044dd andl $-1431655766, %ebx - 0x45, 0x31, 0xdb, //0x000044e3 xorl %r11d, %r11d - 0x01, 0xcb, //0x000044e6 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc3, //0x000044e8 setb %r11b - 0x01, 0xdb, //0x000044ec addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x000044ee xorl $1431655765, %ebx - 0x21, 0xfb, //0x000044f4 andl %edi, %ebx - 0xf7, 0xd3, //0x000044f6 notl %ebx - 0x21, 0xda, //0x000044f8 andl %ebx, %edx - 0x4c, 0x8b, 0x7d, 0xc0, //0x000044fa movq $-64(%rbp), %r15 - 0x48, 0x85, 0xd2, //0x000044fe testq %rdx, %rdx - 0x0f, 0x85, 0x06, 0xfc, 0xff, 0xff, //0x00004501 jne LBB0_704 - //0x00004507 LBB0_845 - 0x48, 0x83, 0xc0, 0x20, //0x00004507 addq $32, %rax - 0x49, 0x83, 0xc6, 0xe0, //0x0000450b addq $-32, %r14 - //0x0000450f LBB0_846 - 0x4d, 0x85, 0xdb, //0x0000450f testq %r11, %r11 - 0x0f, 0x85, 0xab, 0x00, 0x00, 0x00, //0x00004512 jne LBB0_858 - 0x48, 0x8b, 0x55, 0xd0, //0x00004518 movq $-48(%rbp), %rdx - 0x4d, 0x85, 0xf6, //0x0000451c testq %r14, %r14 - 0x0f, 0x84, 0x85, 0x00, 0x00, 0x00, //0x0000451f je LBB0_857 - //0x00004525 LBB0_848 - 0x31, 0xf6, //0x00004525 xorl %esi, %esi - //0x00004527 LBB0_849 - 0x0f, 0xb6, 0x0c, 0x30, //0x00004527 movzbl (%rax,%rsi), %ecx - 0x80, 0xf9, 0x22, //0x0000452b cmpb $34, %cl - 0x0f, 0x84, 0x6f, 0x00, 0x00, 0x00, //0x0000452e je LBB0_856 - 0x80, 0xf9, 0x5c, //0x00004534 cmpb $92, %cl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00004537 je LBB0_854 - 0x48, 0x83, 0xc6, 0x01, //0x0000453d addq $1, %rsi - 0x49, 0x39, 0xf6, //0x00004541 cmpq %rsi, %r14 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00004544 jne LBB0_849 - 0xe9, 0x63, 0x00, 0x00, 0x00, //0x0000454a jmp LBB0_852 - //0x0000454f LBB0_854 - 0x49, 0x8d, 0x4e, 0xff, //0x0000454f leaq $-1(%r14), %rcx - 0x48, 0x39, 0xf1, //0x00004553 cmpq %rsi, %rcx - 0x0f, 0x84, 0x51, 0x02, 0x00, 0x00, //0x00004556 je LBB0_712 - 0x48, 0x8b, 0x8d, 0x40, 0xff, 0xff, 0xff, //0x0000455c movq $-192(%rbp), %rcx - 0x48, 0x01, 0xc1, //0x00004563 addq %rax, %rcx - 0x48, 0x01, 0xf1, //0x00004566 addq %rsi, %rcx - 0x48, 0x83, 0xfa, 0xff, //0x00004569 cmpq $-1, %rdx - 0x48, 0x8b, 0x7d, 0xd0, //0x0000456d movq $-48(%rbp), %rdi - 0x48, 0x0f, 0x44, 0xf9, //0x00004571 cmoveq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xd0, //0x00004575 movq %rdi, $-48(%rbp) - 0x48, 0x0f, 0x44, 0xd1, //0x00004579 cmoveq %rcx, %rdx - 0x48, 0x01, 0xf0, //0x0000457d addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x02, //0x00004580 addq $2, %rax - 0x4c, 0x89, 0xf1, //0x00004584 movq %r14, %rcx - 0x48, 0x29, 0xf1, //0x00004587 subq %rsi, %rcx - 0x48, 0x83, 0xc1, 0xfe, //0x0000458a addq $-2, %rcx - 0x49, 0x83, 0xc6, 0xfe, //0x0000458e addq $-2, %r14 - 0x49, 0x39, 0xf6, //0x00004592 cmpq %rsi, %r14 - 0x49, 0x89, 0xce, //0x00004595 movq %rcx, %r14 - 0x0f, 0x85, 0x87, 0xff, 0xff, 0xff, //0x00004598 jne LBB0_848 - 0xe9, 0x0a, 0x02, 0x00, 0x00, //0x0000459e jmp LBB0_712 - //0x000045a3 LBB0_856 - 0x48, 0x01, 0xf0, //0x000045a3 addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x000045a6 addq $1, %rax - //0x000045aa LBB0_857 - 0x4c, 0x29, 0xe8, //0x000045aa subq %r13, %rax - 0xe9, 0x3d, 0xf5, 0xff, 0xff, //0x000045ad jmp LBB0_709 - //0x000045b2 LBB0_852 - 0x80, 0xf9, 0x22, //0x000045b2 cmpb $34, %cl - 0x0f, 0x85, 0xf2, 0x01, 0x00, 0x00, //0x000045b5 jne LBB0_712 - 0x4c, 0x01, 0xf0, //0x000045bb addq %r14, %rax - 0xe9, 0xe7, 0xff, 0xff, 0xff, //0x000045be jmp LBB0_857 - //0x000045c3 LBB0_858 - 0x4d, 0x85, 0xf6, //0x000045c3 testq %r14, %r14 - 0x0f, 0x84, 0xe1, 0x01, 0x00, 0x00, //0x000045c6 je LBB0_712 - 0x48, 0x8b, 0x8d, 0x48, 0xff, 0xff, 0xff, //0x000045cc movq $-184(%rbp), %rcx - 0x48, 0x01, 0xc1, //0x000045d3 addq %rax, %rcx - 0x48, 0x8b, 0x75, 0xd0, //0x000045d6 movq $-48(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x000045da cmpq $-1, %rsi - 0x48, 0x89, 0xf2, //0x000045de movq %rsi, %rdx - 0x48, 0x0f, 0x44, 0xf1, //0x000045e1 cmoveq %rcx, %rsi - 0x48, 0x0f, 0x44, 0xd1, //0x000045e5 cmoveq %rcx, %rdx - 0x48, 0x83, 0xc0, 0x01, //0x000045e9 addq $1, %rax - 0x49, 0x83, 0xc6, 0xff, //0x000045ed addq $-1, %r14 - 0x48, 0x89, 0x75, 0xd0, //0x000045f1 movq %rsi, $-48(%rbp) - 0x4d, 0x85, 0xf6, //0x000045f5 testq %r14, %r14 - 0x0f, 0x85, 0x27, 0xff, 0xff, 0xff, //0x000045f8 jne LBB0_848 - 0xe9, 0xa7, 0xff, 0xff, 0xff, //0x000045fe jmp LBB0_857 - //0x00004603 LBB0_861 - 0x49, 0x83, 0xc2, 0xff, //0x00004603 addq $-1, %r10 - 0x4d, 0x89, 0x10, //0x00004607 movq %r10, (%r8) - 0x48, 0xc7, 0xc0, 0xde, 0xff, 0xff, 0xff, //0x0000460a movq $-34, %rax - 0xe9, 0x3b, 0x00, 0x00, 0x00, //0x00004611 jmp LBB0_870 - //0x00004616 LBB0_862 - 0x48, 0x8b, 0x45, 0xc8, //0x00004616 movq $-56(%rbp), %rax - 0x48, 0x89, 0x30, //0x0000461a movq %rsi, (%rax) - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000461d movq $-1, %rax - 0xe9, 0x28, 0x00, 0x00, 0x00, //0x00004624 jmp LBB0_870 - //0x00004629 LBB0_863 - 0x49, 0x89, 0x10, //0x00004629 movq %rdx, (%r8) - //0x0000462c LBB0_864 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000462c movq $-1, %rax - 0xe9, 0x19, 0x00, 0x00, 0x00, //0x00004633 jmp LBB0_870 - //0x00004638 LBB0_865 - 0x49, 0x89, 0xc2, //0x00004638 movq %rax, %r10 - 0xe9, 0x03, 0x00, 0x00, 0x00, //0x0000463b jmp LBB0_868 - //0x00004640 LBB0_867 - 0x49, 0x89, 0xca, //0x00004640 movq %rcx, %r10 - //0x00004643 LBB0_868 - 0x49, 0x83, 0xc2, 0xff, //0x00004643 addq $-1, %r10 - 0x4d, 0x89, 0x10, //0x00004647 movq %r10, (%r8) - //0x0000464a LBB0_869 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x0000464a movq $-2, %rax - //0x00004651 LBB0_870 - 0x48, 0x81, 0xc4, 0xa8, 0x00, 0x00, 0x00, //0x00004651 addq $168, %rsp - 0x5b, //0x00004658 popq %rbx - 0x41, 0x5c, //0x00004659 popq %r12 - 0x41, 0x5d, //0x0000465b popq %r13 - 0x41, 0x5e, //0x0000465d popq %r14 - 0x41, 0x5f, //0x0000465f popq %r15 - 0x5d, //0x00004661 popq %rbp - 0xc3, //0x00004662 retq - //0x00004663 LBB0_871 - 0x4c, 0x01, 0xe6, //0x00004663 addq %r12, %rsi - 0x48, 0x89, 0xf0, //0x00004666 movq %rsi, %rax - //0x00004669 LBB0_872 - 0x4c, 0x29, 0xe0, //0x00004669 subq %r12, %rax - 0x48, 0x89, 0xc6, //0x0000466c movq %rax, %rsi - //0x0000466f LBB0_873 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000466f movq $-1, %rax - 0x49, 0x89, 0xf3, //0x00004676 movq %rsi, %r11 - 0x48, 0x39, 0xfe, //0x00004679 cmpq %rdi, %rsi - 0x0f, 0x83, 0xcf, 0xff, 0xff, 0xff, //0x0000467c jae LBB0_870 - //0x00004682 LBB0_874 - 0x49, 0x8d, 0x7b, 0x01, //0x00004682 leaq $1(%r11), %rdi - 0x48, 0x8b, 0x45, 0xc8, //0x00004686 movq $-56(%rbp), %rax - 0x48, 0x89, 0x38, //0x0000468a movq %rdi, (%rax) - 0x43, 0x0f, 0xbe, 0x0c, 0x1c, //0x0000468d movsbl (%r12,%r11), %ecx - 0x83, 0xf9, 0x7b, //0x00004692 cmpl $123, %ecx - 0x0f, 0x87, 0x60, 0x01, 0x00, 0x00, //0x00004695 ja LBB0_892 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000469b movq $-1, %rax - 0x48, 0x8d, 0x15, 0xaf, 0x14, 0x00, 0x00, //0x000046a2 leaq $5295(%rip), %rdx /* LJTI0_6+0(%rip) */ - 0x48, 0x63, 0x0c, 0x8a, //0x000046a9 movslq (%rdx,%rcx,4), %rcx - 0x48, 0x01, 0xd1, //0x000046ad addq %rdx, %rcx - 0xff, 0xe1, //0x000046b0 jmpq *%rcx - //0x000046b2 LBB0_876 - 0x49, 0x8b, 0x07, //0x000046b2 movq (%r15), %rax - 0x48, 0x89, 0xc1, //0x000046b5 movq %rax, %rcx - 0x48, 0x29, 0xf9, //0x000046b8 subq %rdi, %rcx - 0x48, 0x83, 0xf9, 0x10, //0x000046bb cmpq $16, %rcx - 0x0f, 0x82, 0x83, 0x0d, 0x00, 0x00, //0x000046bf jb LBB0_991 - 0x4c, 0x89, 0xd9, //0x000046c5 movq %r11, %rcx - 0x48, 0xf7, 0xd1, //0x000046c8 notq %rcx - 0xf3, 0x0f, 0x6f, 0x05, 0x2d, 0xb9, 0xff, 0xff, //0x000046cb movdqu $-18131(%rip), %xmm0 /* LCPI0_0+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0x35, 0xb9, 0xff, 0xff, //0x000046d3 movdqu $-18123(%rip), %xmm1 /* LCPI0_1+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x15, 0x3d, 0xb9, 0xff, 0xff, //0x000046db movdqu $-18115(%rip), %xmm2 /* LCPI0_2+0(%rip) */ - 0x48, 0x8b, 0x5d, 0xc8, //0x000046e3 movq $-56(%rbp), %rbx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000046e7 .p2align 4, 0x90 - //0x000046f0 LBB0_878 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x3c, //0x000046f0 movdqu (%r12,%rdi), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x000046f6 movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x000046fa pcmpeqb %xmm0, %xmm4 - 0x66, 0x0f, 0xdb, 0xd9, //0x000046fe pand %xmm1, %xmm3 - 0x66, 0x0f, 0x74, 0xda, //0x00004702 pcmpeqb %xmm2, %xmm3 - 0x66, 0x0f, 0xeb, 0xdc, //0x00004706 por %xmm4, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x0000470a pmovmskb %xmm3, %edx - 0x85, 0xd2, //0x0000470e testl %edx, %edx - 0x0f, 0x85, 0x6c, 0x00, 0x00, 0x00, //0x00004710 jne LBB0_888 - 0x48, 0x83, 0xc7, 0x10, //0x00004716 addq $16, %rdi - 0x48, 0x8d, 0x14, 0x08, //0x0000471a leaq (%rax,%rcx), %rdx - 0x48, 0x83, 0xc2, 0xf0, //0x0000471e addq $-16, %rdx - 0x48, 0x83, 0xc1, 0xf0, //0x00004722 addq $-16, %rcx - 0x48, 0x83, 0xfa, 0x0f, //0x00004726 cmpq $15, %rdx - 0x0f, 0x87, 0xc0, 0xff, 0xff, 0xff, //0x0000472a ja LBB0_878 - 0x4c, 0x89, 0xe7, //0x00004730 movq %r12, %rdi - 0x48, 0x29, 0xcf, //0x00004733 subq %rcx, %rdi - 0x48, 0x01, 0xc8, //0x00004736 addq %rcx, %rax - 0x48, 0x89, 0xc1, //0x00004739 movq %rax, %rcx - 0x48, 0x85, 0xc9, //0x0000473c testq %rcx, %rcx - 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x0000473f je LBB0_887 - //0x00004745 LBB0_881 - 0x48, 0x8d, 0x34, 0x0f, //0x00004745 leaq (%rdi,%rcx), %rsi - 0x31, 0xc0, //0x00004749 xorl %eax, %eax - //0x0000474b LBB0_882 - 0x0f, 0xb6, 0x14, 0x07, //0x0000474b movzbl (%rdi,%rax), %edx - 0x80, 0xfa, 0x2c, //0x0000474f cmpb $44, %dl - 0x0f, 0x84, 0x6a, 0x0b, 0x00, 0x00, //0x00004752 je LBB0_969 - 0x80, 0xfa, 0x7d, //0x00004758 cmpb $125, %dl - 0x0f, 0x84, 0x61, 0x0b, 0x00, 0x00, //0x0000475b je LBB0_969 - 0x80, 0xfa, 0x5d, //0x00004761 cmpb $93, %dl - 0x0f, 0x84, 0x58, 0x0b, 0x00, 0x00, //0x00004764 je LBB0_969 - 0x48, 0x83, 0xc0, 0x01, //0x0000476a addq $1, %rax - 0x48, 0x39, 0xc1, //0x0000476e cmpq %rax, %rcx - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x00004771 jne LBB0_882 - 0x48, 0x89, 0xf7, //0x00004777 movq %rsi, %rdi - //0x0000477a LBB0_887 - 0x4c, 0x29, 0xe7, //0x0000477a subq %r12, %rdi - 0xe9, 0x91, 0x0c, 0x00, 0x00, //0x0000477d jmp LBB0_986 - //0x00004782 LBB0_888 - 0x66, 0x0f, 0xbc, 0xc2, //0x00004782 bsfw %dx, %ax - 0x0f, 0xb7, 0xc0, //0x00004786 movzwl %ax, %eax - 0x48, 0x29, 0xc8, //0x00004789 subq %rcx, %rax - 0x48, 0x89, 0x03, //0x0000478c movq %rax, (%rbx) - 0x4c, 0x89, 0xd8, //0x0000478f movq %r11, %rax - 0xe9, 0xba, 0xfe, 0xff, 0xff, //0x00004792 jmp LBB0_870 - //0x00004797 LBB0_973 - 0x48, 0xc7, 0xc0, 0xf9, 0xff, 0xff, 0xff, //0x00004797 movq $-7, %rax - 0xe9, 0xae, 0xfe, 0xff, 0xff, //0x0000479e jmp LBB0_870 - //0x000047a3 LBB0_711 - 0x48, 0x83, 0xf8, 0xff, //0x000047a3 cmpq $-1, %rax - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x000047a7 jne LBB0_713 - //0x000047ad LBB0_712 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000047ad movq $-1, %rax - 0x48, 0x8b, 0x4d, 0xa0, //0x000047b4 movq $-96(%rbp), %rcx - 0x48, 0x89, 0x4d, 0xd0, //0x000047b8 movq %rcx, $-48(%rbp) - //0x000047bc LBB0_713 - 0x48, 0x8b, 0x4d, 0xc8, //0x000047bc movq $-56(%rbp), %rcx - 0x48, 0x8b, 0x55, 0xd0, //0x000047c0 movq $-48(%rbp), %rdx - 0x48, 0x89, 0x11, //0x000047c4 movq %rdx, (%rcx) - 0xe9, 0x85, 0xfe, 0xff, 0xff, //0x000047c7 jmp LBB0_870 - //0x000047cc LBB0_614 - 0x49, 0x83, 0xc0, 0xff, //0x000047cc addq $-1, %r8 - 0x4c, 0x89, 0xc0, //0x000047d0 movq %r8, %rax - 0xe9, 0x79, 0xfe, 0xff, 0xff, //0x000047d3 jmp LBB0_870 - //0x000047d8 LBB0_889 - 0x49, 0x8d, 0x4b, 0x04, //0x000047d8 leaq $4(%r11), %rcx - 0xe9, 0x8e, 0x05, 0x00, 0x00, //0x000047dc jmp LBB0_930 - //0x000047e1 LBB0_890 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000047e1 movq $-1, %r8 - //0x000047e8 LBB0_891 - 0x4c, 0x29, 0xc7, //0x000047e8 subq %r8, %rdi - 0x48, 0x83, 0xc7, 0xfe, //0x000047eb addq $-2, %rdi - 0x48, 0x8b, 0x45, 0xc8, //0x000047ef movq $-56(%rbp), %rax - 0x48, 0x89, 0x38, //0x000047f3 movq %rdi, (%rax) - 0xe9, 0x4f, 0xfe, 0xff, 0xff, //0x000047f6 jmp LBB0_869 - //0x000047fb LBB0_892 - 0x48, 0x8b, 0x45, 0xc8, //0x000047fb movq $-56(%rbp), %rax - 0x4c, 0x89, 0x18, //0x000047ff movq %r11, (%rax) - 0xe9, 0x43, 0xfe, 0xff, 0xff, //0x00004802 jmp LBB0_869 - //0x00004807 LBB0_893 - 0x4d, 0x8b, 0x07, //0x00004807 movq (%r15), %r8 - 0x4d, 0x89, 0xc6, //0x0000480a movq %r8, %r14 - 0x49, 0x29, 0xfe, //0x0000480d subq %rdi, %r14 - 0x49, 0x83, 0xfe, 0x20, //0x00004810 cmpq $32, %r14 - 0x0f, 0x8c, 0x43, 0x0c, 0x00, 0x00, //0x00004814 jl LBB0_993 - 0x4f, 0x8d, 0x0c, 0x1c, //0x0000481a leaq (%r12,%r11), %r9 - 0x4d, 0x29, 0xd8, //0x0000481e subq %r11, %r8 - 0x41, 0xbf, 0x1f, 0x00, 0x00, 0x00, //0x00004821 movl $31, %r15d - 0x45, 0x31, 0xf6, //0x00004827 xorl %r14d, %r14d - 0xf3, 0x0f, 0x6f, 0x05, 0xfe, 0xb7, 0xff, 0xff, //0x0000482a movdqu $-18434(%rip), %xmm0 /* LCPI0_3+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0x06, 0xb8, 0xff, 0xff, //0x00004832 movdqu $-18426(%rip), %xmm1 /* LCPI0_4+0(%rip) */ - 0x45, 0x31, 0xd2, //0x0000483a xorl %r10d, %r10d - //0x0000483d LBB0_895 - 0xf3, 0x43, 0x0f, 0x6f, 0x54, 0x31, 0x01, //0x0000483d movdqu $1(%r9,%r14), %xmm2 - 0xf3, 0x43, 0x0f, 0x6f, 0x5c, 0x31, 0x11, //0x00004844 movdqu $17(%r9,%r14), %xmm3 - 0x66, 0x0f, 0x6f, 0xe2, //0x0000484b movdqa %xmm2, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x0000484f pcmpeqb %xmm0, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x00004853 pmovmskb %xmm4, %edx - 0x66, 0x0f, 0x6f, 0xe3, //0x00004857 movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x0000485b pcmpeqb %xmm0, %xmm4 - 0x66, 0x0f, 0xd7, 0xf4, //0x0000485f pmovmskb %xmm4, %esi - 0x48, 0xc1, 0xe6, 0x10, //0x00004863 shlq $16, %rsi - 0x48, 0x09, 0xd6, //0x00004867 orq %rdx, %rsi - 0x66, 0x0f, 0x74, 0xd1, //0x0000486a pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x0000486e pmovmskb %xmm2, %ecx - 0x66, 0x0f, 0x74, 0xd9, //0x00004872 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x00004876 pmovmskb %xmm3, %edx - 0x48, 0xc1, 0xe2, 0x10, //0x0000487a shlq $16, %rdx - 0x48, 0x09, 0xca, //0x0000487e orq %rcx, %rdx - 0x48, 0x89, 0xd1, //0x00004881 movq %rdx, %rcx - 0x4c, 0x09, 0xd1, //0x00004884 orq %r10, %rcx - 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00004887 je LBB0_897 - 0x44, 0x89, 0xd1, //0x0000488d movl %r10d, %ecx - 0xf7, 0xd1, //0x00004890 notl %ecx - 0x21, 0xd1, //0x00004892 andl %edx, %ecx - 0x8d, 0x3c, 0x09, //0x00004894 leal (%rcx,%rcx), %edi - 0x44, 0x09, 0xd7, //0x00004897 orl %r10d, %edi - 0x89, 0xfb, //0x0000489a movl %edi, %ebx - 0xf7, 0xd3, //0x0000489c notl %ebx - 0x21, 0xd3, //0x0000489e andl %edx, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x000048a0 andl $-1431655766, %ebx - 0x45, 0x31, 0xd2, //0x000048a6 xorl %r10d, %r10d - 0x01, 0xcb, //0x000048a9 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc2, //0x000048ab setb %r10b - 0x01, 0xdb, //0x000048af addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x000048b1 xorl $1431655765, %ebx - 0x21, 0xfb, //0x000048b7 andl %edi, %ebx - 0xf7, 0xd3, //0x000048b9 notl %ebx - 0x21, 0xde, //0x000048bb andl %ebx, %esi - 0xe9, 0x03, 0x00, 0x00, 0x00, //0x000048bd jmp LBB0_898 - //0x000048c2 LBB0_897 - 0x45, 0x31, 0xd2, //0x000048c2 xorl %r10d, %r10d - //0x000048c5 LBB0_898 - 0x48, 0x85, 0xf6, //0x000048c5 testq %rsi, %rsi - 0x0f, 0x85, 0x50, 0x09, 0x00, 0x00, //0x000048c8 jne LBB0_959 - 0x49, 0x83, 0xc6, 0x20, //0x000048ce addq $32, %r14 - 0x4b, 0x8d, 0x0c, 0x38, //0x000048d2 leaq (%r8,%r15), %rcx - 0x48, 0x83, 0xc1, 0xe0, //0x000048d6 addq $-32, %rcx - 0x49, 0x83, 0xc7, 0xe0, //0x000048da addq $-32, %r15 - 0x48, 0x83, 0xf9, 0x3f, //0x000048de cmpq $63, %rcx - 0x0f, 0x8f, 0x55, 0xff, 0xff, 0xff, //0x000048e2 jg LBB0_895 - 0x4d, 0x85, 0xd2, //0x000048e8 testq %r10, %r10 - 0x0f, 0x85, 0x80, 0x0b, 0x00, 0x00, //0x000048eb jne LBB0_995 - 0x4b, 0x8d, 0x3c, 0x0e, //0x000048f1 leaq (%r14,%r9), %rdi - 0x48, 0x83, 0xc7, 0x01, //0x000048f5 addq $1, %rdi - 0x49, 0xf7, 0xd6, //0x000048f9 notq %r14 - 0x4d, 0x01, 0xc6, //0x000048fc addq %r8, %r14 - //0x000048ff LBB0_902 - 0x4d, 0x85, 0xf6, //0x000048ff testq %r14, %r14 - 0x0f, 0x8f, 0x59, 0x09, 0x00, 0x00, //0x00004902 jg LBB0_962 - 0xe9, 0x44, 0xfd, 0xff, 0xff, //0x00004908 jmp LBB0_870 - //0x0000490d LBB0_903 - 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000490d movabsq $6148914691236517205, %rdx - 0x49, 0x8b, 0x0f, //0x00004917 movq (%r15), %rcx - 0x49, 0x89, 0xd7, //0x0000491a movq %rdx, %r15 - 0x48, 0x29, 0xf9, //0x0000491d subq %rdi, %rcx - 0x49, 0x01, 0xfc, //0x00004920 addq %rdi, %r12 - 0x45, 0x31, 0xf6, //0x00004923 xorl %r14d, %r14d - 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0x11, 0xb7, 0xff, 0xff, //0x00004926 movdqu $-18671(%rip), %xmm10 /* LCPI0_4+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0xf9, 0xb6, 0xff, 0xff, //0x0000492f movdqu $-18695(%rip), %xmm1 /* LCPI0_3+0(%rip) */ - 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x00004937 pcmpeqd %xmm9, %xmm9 - 0xf3, 0x0f, 0x6f, 0x1d, 0x2c, 0xb7, 0xff, 0xff, //0x0000493c movdqu $-18644(%rip), %xmm3 /* LCPI0_7+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x25, 0xd4, 0xb6, 0xff, 0xff, //0x00004944 movdqu $-18732(%rip), %xmm4 /* LCPI0_2+0(%rip) */ - 0x49, 0xb9, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x0000494c movabsq $3689348814741910323, %r9 - 0x66, 0x45, 0x0f, 0xef, 0xc0, //0x00004956 pxor %xmm8, %xmm8 - 0x31, 0xd2, //0x0000495b xorl %edx, %edx - 0x45, 0x31, 0xc0, //0x0000495d xorl %r8d, %r8d - 0x45, 0x31, 0xd2, //0x00004960 xorl %r10d, %r10d - 0x48, 0x83, 0xf9, 0x40, //0x00004963 cmpq $64, %rcx - 0x48, 0x89, 0x4d, 0xd0, //0x00004967 movq %rcx, $-48(%rbp) - 0x0f, 0x8d, 0x59, 0x01, 0x00, 0x00, //0x0000496b jge LBB0_904 - //0x00004971 LBB0_913 - 0x48, 0x85, 0xc9, //0x00004971 testq %rcx, %rcx - 0x0f, 0x8e, 0xeb, 0x0a, 0x00, 0x00, //0x00004974 jle LBB0_994 - 0xf3, 0x44, 0x0f, 0x7f, 0x45, 0x80, //0x0000497a movdqu %xmm8, $-128(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x70, 0xff, 0xff, 0xff, //0x00004980 movdqu %xmm8, $-144(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x00004989 movdqu %xmm8, $-160(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x00004992 movdqu %xmm8, $-176(%rbp) - 0x44, 0x89, 0xe1, //0x0000499b movl %r12d, %ecx - 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x0000499e andl $4095, %ecx - 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x000049a4 cmpl $4033, %ecx - 0x0f, 0x82, 0x3e, 0x00, 0x00, 0x00, //0x000049aa jb LBB0_917 - 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x000049b0 cmpq $32, $-48(%rbp) - 0x0f, 0x82, 0x42, 0x00, 0x00, 0x00, //0x000049b5 jb LBB0_918 - 0x41, 0x0f, 0x10, 0x04, 0x24, //0x000049bb movups (%r12), %xmm0 - 0x0f, 0x11, 0x85, 0x50, 0xff, 0xff, 0xff, //0x000049c0 movups %xmm0, $-176(%rbp) - 0xf3, 0x41, 0x0f, 0x6f, 0x44, 0x24, 0x10, //0x000049c7 movdqu $16(%r12), %xmm0 - 0xf3, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x000049ce movdqu %xmm0, $-160(%rbp) - 0x49, 0x83, 0xc4, 0x20, //0x000049d6 addq $32, %r12 - 0x48, 0x8b, 0x4d, 0xd0, //0x000049da movq $-48(%rbp), %rcx - 0x48, 0x8d, 0x79, 0xe0, //0x000049de leaq $-32(%rcx), %rdi - 0x48, 0x8d, 0xb5, 0x70, 0xff, 0xff, 0xff, //0x000049e2 leaq $-144(%rbp), %rsi - 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x000049e9 jmp LBB0_919 - //0x000049ee LBB0_917 - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000049ee movabsq $6148914691236517205, %r15 - 0xe9, 0xcd, 0x00, 0x00, 0x00, //0x000049f8 jmp LBB0_904 - //0x000049fd LBB0_918 - 0x48, 0x8d, 0xb5, 0x50, 0xff, 0xff, 0xff, //0x000049fd leaq $-176(%rbp), %rsi - 0x48, 0x8b, 0x7d, 0xd0, //0x00004a04 movq $-48(%rbp), %rdi - //0x00004a08 LBB0_919 - 0x48, 0x83, 0xff, 0x10, //0x00004a08 cmpq $16, %rdi - 0x0f, 0x82, 0x4b, 0x00, 0x00, 0x00, //0x00004a0c jb LBB0_920 - 0xf3, 0x41, 0x0f, 0x6f, 0x04, 0x24, //0x00004a12 movdqu (%r12), %xmm0 - 0xf3, 0x0f, 0x7f, 0x06, //0x00004a18 movdqu %xmm0, (%rsi) - 0x49, 0x83, 0xc4, 0x10, //0x00004a1c addq $16, %r12 - 0x48, 0x83, 0xc6, 0x10, //0x00004a20 addq $16, %rsi - 0x48, 0x83, 0xc7, 0xf0, //0x00004a24 addq $-16, %rdi - 0x48, 0x83, 0xff, 0x08, //0x00004a28 cmpq $8, %rdi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00004a2c jae LBB0_927 - //0x00004a32 LBB0_921 - 0x48, 0x83, 0xff, 0x04, //0x00004a32 cmpq $4, %rdi - 0x0f, 0x8c, 0x48, 0x00, 0x00, 0x00, //0x00004a36 jl LBB0_922 - //0x00004a3c LBB0_928 - 0x41, 0x8b, 0x0c, 0x24, //0x00004a3c movl (%r12), %ecx - 0x89, 0x0e, //0x00004a40 movl %ecx, (%rsi) - 0x49, 0x83, 0xc4, 0x04, //0x00004a42 addq $4, %r12 - 0x48, 0x83, 0xc6, 0x04, //0x00004a46 addq $4, %rsi - 0x48, 0x83, 0xc7, 0xfc, //0x00004a4a addq $-4, %rdi - 0x48, 0x83, 0xff, 0x02, //0x00004a4e cmpq $2, %rdi - 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x00004a52 jae LBB0_923 - 0xe9, 0x45, 0x00, 0x00, 0x00, //0x00004a58 jmp LBB0_924 - //0x00004a5d LBB0_920 - 0x48, 0x83, 0xff, 0x08, //0x00004a5d cmpq $8, %rdi - 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x00004a61 jb LBB0_921 - //0x00004a67 LBB0_927 - 0x49, 0x8b, 0x0c, 0x24, //0x00004a67 movq (%r12), %rcx - 0x48, 0x89, 0x0e, //0x00004a6b movq %rcx, (%rsi) - 0x49, 0x83, 0xc4, 0x08, //0x00004a6e addq $8, %r12 - 0x48, 0x83, 0xc6, 0x08, //0x00004a72 addq $8, %rsi - 0x48, 0x83, 0xc7, 0xf8, //0x00004a76 addq $-8, %rdi - 0x48, 0x83, 0xff, 0x04, //0x00004a7a cmpq $4, %rdi - 0x0f, 0x8d, 0xb8, 0xff, 0xff, 0xff, //0x00004a7e jge LBB0_928 - //0x00004a84 LBB0_922 - 0x48, 0x83, 0xff, 0x02, //0x00004a84 cmpq $2, %rdi - 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00004a88 jb LBB0_924 - //0x00004a8e LBB0_923 - 0x41, 0x0f, 0xb7, 0x0c, 0x24, //0x00004a8e movzwl (%r12), %ecx - 0x66, 0x89, 0x0e, //0x00004a93 movw %cx, (%rsi) - 0x49, 0x83, 0xc4, 0x02, //0x00004a96 addq $2, %r12 - 0x48, 0x83, 0xc6, 0x02, //0x00004a9a addq $2, %rsi - 0x48, 0x83, 0xc7, 0xfe, //0x00004a9e addq $-2, %rdi - //0x00004aa2 LBB0_924 - 0x4c, 0x89, 0xe1, //0x00004aa2 movq %r12, %rcx - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00004aa5 leaq $-176(%rbp), %r12 - 0x48, 0x85, 0xff, //0x00004aac testq %rdi, %rdi - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00004aaf movabsq $6148914691236517205, %r15 - 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x00004ab9 je LBB0_904 - 0x8a, 0x09, //0x00004abf movb (%rcx), %cl - 0x88, 0x0e, //0x00004ac1 movb %cl, (%rsi) - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00004ac3 leaq $-176(%rbp), %r12 - //0x00004aca LBB0_904 - 0xf3, 0x41, 0x0f, 0x6f, 0x04, 0x24, //0x00004aca movdqu (%r12), %xmm0 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x10, //0x00004ad0 movdqu $16(%r12), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x20, //0x00004ad7 movdqu $32(%r12), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x30, //0x00004ade movdqu $48(%r12), %xmm6 - 0x66, 0x0f, 0x6f, 0xd0, //0x00004ae5 movdqa %xmm0, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004ae9 pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xf2, //0x00004aee pmovmskb %xmm2, %esi - 0x66, 0x0f, 0x6f, 0xd5, //0x00004af2 movdqa %xmm5, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004af6 pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x00004afb pmovmskb %xmm2, %ecx - 0x66, 0x0f, 0x6f, 0xd7, //0x00004aff movdqa %xmm7, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004b03 pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xfa, //0x00004b08 pmovmskb %xmm2, %edi - 0x66, 0x0f, 0x6f, 0xd6, //0x00004b0c movdqa %xmm6, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004b10 pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xda, //0x00004b15 pmovmskb %xmm2, %ebx - 0x48, 0xc1, 0xe3, 0x30, //0x00004b19 shlq $48, %rbx - 0x48, 0xc1, 0xe7, 0x20, //0x00004b1d shlq $32, %rdi - 0x48, 0x09, 0xdf, //0x00004b21 orq %rbx, %rdi - 0x48, 0xc1, 0xe1, 0x10, //0x00004b24 shlq $16, %rcx - 0x48, 0x09, 0xf9, //0x00004b28 orq %rdi, %rcx - 0x48, 0x09, 0xce, //0x00004b2b orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00004b2e movq %rsi, %rcx - 0x48, 0x09, 0xd1, //0x00004b31 orq %rdx, %rcx - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00004b34 jne LBB0_906 - 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00004b3a movq $-1, %rsi - 0x31, 0xc9, //0x00004b41 xorl %ecx, %ecx - 0x48, 0x89, 0x4d, 0xb8, //0x00004b43 movq %rcx, $-72(%rbp) - 0xe9, 0x3e, 0x00, 0x00, 0x00, //0x00004b47 jmp LBB0_907 - //0x00004b4c LBB0_906 - 0x48, 0x89, 0xd1, //0x00004b4c movq %rdx, %rcx - 0x48, 0xf7, 0xd1, //0x00004b4f notq %rcx - 0x48, 0x21, 0xf1, //0x00004b52 andq %rsi, %rcx - 0x48, 0x8d, 0x3c, 0x09, //0x00004b55 leaq (%rcx,%rcx), %rdi - 0x48, 0x09, 0xd7, //0x00004b59 orq %rdx, %rdi - 0x48, 0x89, 0xfa, //0x00004b5c movq %rdi, %rdx - 0x48, 0xf7, 0xd2, //0x00004b5f notq %rdx - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00004b62 movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xde, //0x00004b6c andq %rbx, %rsi - 0x48, 0x21, 0xd6, //0x00004b6f andq %rdx, %rsi - 0x31, 0xd2, //0x00004b72 xorl %edx, %edx - 0x48, 0x01, 0xce, //0x00004b74 addq %rcx, %rsi - 0x0f, 0x92, 0xc2, //0x00004b77 setb %dl - 0x48, 0x89, 0x55, 0xb8, //0x00004b7a movq %rdx, $-72(%rbp) - 0x48, 0x01, 0xf6, //0x00004b7e addq %rsi, %rsi - 0x4c, 0x31, 0xfe, //0x00004b81 xorq %r15, %rsi - 0x48, 0x21, 0xfe, //0x00004b84 andq %rdi, %rsi - 0x48, 0xf7, 0xd6, //0x00004b87 notq %rsi - //0x00004b8a LBB0_907 - 0x66, 0x0f, 0x6f, 0xd6, //0x00004b8a movdqa %xmm6, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x00004b8e pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x00004b92 pmovmskb %xmm2, %ecx - 0x48, 0xc1, 0xe1, 0x30, //0x00004b96 shlq $48, %rcx - 0x66, 0x0f, 0x6f, 0xd7, //0x00004b9a movdqa %xmm7, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x00004b9e pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xfa, //0x00004ba2 pmovmskb %xmm2, %edi - 0x48, 0xc1, 0xe7, 0x20, //0x00004ba6 shlq $32, %rdi - 0x48, 0x09, 0xcf, //0x00004baa orq %rcx, %rdi - 0x66, 0x0f, 0x6f, 0xd5, //0x00004bad movdqa %xmm5, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x00004bb1 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x00004bb5 pmovmskb %xmm2, %ecx - 0x48, 0xc1, 0xe1, 0x10, //0x00004bb9 shlq $16, %rcx - 0x48, 0x09, 0xf9, //0x00004bbd orq %rdi, %rcx - 0x66, 0x0f, 0x6f, 0xd0, //0x00004bc0 movdqa %xmm0, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x00004bc4 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xfa, //0x00004bc8 pmovmskb %xmm2, %edi - 0x48, 0x09, 0xcf, //0x00004bcc orq %rcx, %rdi - 0x48, 0x21, 0xf7, //0x00004bcf andq %rsi, %rdi - 0x66, 0x48, 0x0f, 0x6e, 0xd7, //0x00004bd2 movq %rdi, %xmm2 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd1, 0x00, //0x00004bd7 pclmulqdq $0, %xmm9, %xmm2 - 0x66, 0x49, 0x0f, 0x7e, 0xd5, //0x00004bde movq %xmm2, %r13 - 0x4d, 0x31, 0xf5, //0x00004be3 xorq %r14, %r13 - 0x66, 0x0f, 0x6f, 0xd0, //0x00004be6 movdqa %xmm0, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00004bea pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xda, //0x00004bee pmovmskb %xmm2, %ebx - 0x66, 0x0f, 0x6f, 0xd5, //0x00004bf2 movdqa %xmm5, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00004bf6 pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x00004bfa pmovmskb %xmm2, %ecx - 0x66, 0x0f, 0x6f, 0xd7, //0x00004bfe movdqa %xmm7, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00004c02 pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xf2, //0x00004c06 pmovmskb %xmm2, %esi - 0x66, 0x0f, 0x6f, 0xd6, //0x00004c0a movdqa %xmm6, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00004c0e pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xd2, //0x00004c12 pmovmskb %xmm2, %edx - 0x48, 0xc1, 0xe2, 0x30, //0x00004c16 shlq $48, %rdx - 0x48, 0xc1, 0xe6, 0x20, //0x00004c1a shlq $32, %rsi - 0x48, 0x09, 0xd6, //0x00004c1e orq %rdx, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x00004c21 shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x00004c25 orq %rsi, %rcx - 0x48, 0x09, 0xcb, //0x00004c28 orq %rcx, %rbx - 0x4c, 0x89, 0xe9, //0x00004c2b movq %r13, %rcx - 0x48, 0xf7, 0xd1, //0x00004c2e notq %rcx - 0x48, 0x21, 0xcb, //0x00004c31 andq %rcx, %rbx - 0x66, 0x0f, 0x74, 0xc4, //0x00004c34 pcmpeqb %xmm4, %xmm0 - 0x66, 0x0f, 0xd7, 0xf0, //0x00004c38 pmovmskb %xmm0, %esi - 0x66, 0x0f, 0x74, 0xec, //0x00004c3c pcmpeqb %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00004c40 pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x74, 0xfc, //0x00004c44 pcmpeqb %xmm4, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xf7, //0x00004c48 pmovmskb %xmm7, %r14d - 0x66, 0x0f, 0x74, 0xf4, //0x00004c4d pcmpeqb %xmm4, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00004c51 pmovmskb %xmm6, %r15d - 0x49, 0xc1, 0xe7, 0x30, //0x00004c56 shlq $48, %r15 - 0x49, 0xc1, 0xe6, 0x20, //0x00004c5a shlq $32, %r14 - 0x4d, 0x09, 0xfe, //0x00004c5e orq %r15, %r14 - 0x48, 0xc1, 0xe2, 0x10, //0x00004c61 shlq $16, %rdx - 0x4c, 0x09, 0xf2, //0x00004c65 orq %r14, %rdx - 0x48, 0x09, 0xd6, //0x00004c68 orq %rdx, %rsi - 0x48, 0x21, 0xce, //0x00004c6b andq %rcx, %rsi - 0x0f, 0x84, 0x7b, 0x00, 0x00, 0x00, //0x00004c6e je LBB0_911 - 0x4c, 0x8b, 0x75, 0xc0, //0x00004c74 movq $-64(%rbp), %r14 - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00004c78 movabsq $6148914691236517205, %r15 - //0x00004c82 LBB0_909 - 0x48, 0x8d, 0x7e, 0xff, //0x00004c82 leaq $-1(%rsi), %rdi - 0x48, 0x89, 0xf9, //0x00004c86 movq %rdi, %rcx - 0x48, 0x21, 0xd9, //0x00004c89 andq %rbx, %rcx - 0x48, 0x89, 0xca, //0x00004c8c movq %rcx, %rdx - 0x48, 0xd1, 0xea, //0x00004c8f shrq %rdx - 0x4c, 0x21, 0xfa, //0x00004c92 andq %r15, %rdx - 0x48, 0x29, 0xd1, //0x00004c95 subq %rdx, %rcx - 0x48, 0x89, 0xca, //0x00004c98 movq %rcx, %rdx - 0x4c, 0x21, 0xca, //0x00004c9b andq %r9, %rdx - 0x48, 0xc1, 0xe9, 0x02, //0x00004c9e shrq $2, %rcx - 0x4c, 0x21, 0xc9, //0x00004ca2 andq %r9, %rcx - 0x48, 0x01, 0xd1, //0x00004ca5 addq %rdx, %rcx - 0x48, 0x89, 0xca, //0x00004ca8 movq %rcx, %rdx - 0x48, 0xc1, 0xea, 0x04, //0x00004cab shrq $4, %rdx - 0x48, 0x01, 0xca, //0x00004caf addq %rcx, %rdx - 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00004cb2 movabsq $1085102592571150095, %rcx - 0x48, 0x21, 0xca, //0x00004cbc andq %rcx, %rdx - 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00004cbf movabsq $72340172838076673, %rcx - 0x48, 0x0f, 0xaf, 0xd1, //0x00004cc9 imulq %rcx, %rdx - 0x48, 0xc1, 0xea, 0x38, //0x00004ccd shrq $56, %rdx - 0x4c, 0x01, 0xc2, //0x00004cd1 addq %r8, %rdx - 0x4c, 0x39, 0xd2, //0x00004cd4 cmpq %r10, %rdx - 0x0f, 0x86, 0x08, 0x05, 0x00, 0x00, //0x00004cd7 jbe LBB0_958 - 0x49, 0x83, 0xc2, 0x01, //0x00004cdd addq $1, %r10 - 0x48, 0x21, 0xfe, //0x00004ce1 andq %rdi, %rsi - 0x0f, 0x85, 0x98, 0xff, 0xff, 0xff, //0x00004ce4 jne LBB0_909 - 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00004cea jmp LBB0_912 - //0x00004cef LBB0_911 - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00004cef movabsq $6148914691236517205, %r15 - //0x00004cf9 LBB0_912 - 0x49, 0xc1, 0xfd, 0x3f, //0x00004cf9 sarq $63, %r13 - 0x48, 0x89, 0xd9, //0x00004cfd movq %rbx, %rcx - 0x48, 0xd1, 0xe9, //0x00004d00 shrq %rcx - 0x4c, 0x21, 0xf9, //0x00004d03 andq %r15, %rcx - 0x48, 0x29, 0xcb, //0x00004d06 subq %rcx, %rbx - 0x48, 0x89, 0xd9, //0x00004d09 movq %rbx, %rcx - 0x4c, 0x21, 0xc9, //0x00004d0c andq %r9, %rcx - 0x48, 0xc1, 0xeb, 0x02, //0x00004d0f shrq $2, %rbx - 0x4c, 0x21, 0xcb, //0x00004d13 andq %r9, %rbx - 0x48, 0x01, 0xcb, //0x00004d16 addq %rcx, %rbx - 0x48, 0x89, 0xd9, //0x00004d19 movq %rbx, %rcx - 0x48, 0xc1, 0xe9, 0x04, //0x00004d1c shrq $4, %rcx - 0x48, 0x01, 0xd9, //0x00004d20 addq %rbx, %rcx - 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00004d23 movabsq $1085102592571150095, %rdx - 0x48, 0x21, 0xd1, //0x00004d2d andq %rdx, %rcx - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00004d30 movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xca, //0x00004d3a imulq %rdx, %rcx - 0x48, 0xc1, 0xe9, 0x38, //0x00004d3e shrq $56, %rcx - 0x49, 0x01, 0xc8, //0x00004d42 addq %rcx, %r8 - 0x49, 0x83, 0xc4, 0x40, //0x00004d45 addq $64, %r12 - 0x48, 0x8b, 0x4d, 0xd0, //0x00004d49 movq $-48(%rbp), %rcx - 0x48, 0x83, 0xc1, 0xc0, //0x00004d4d addq $-64, %rcx - 0x4d, 0x89, 0xee, //0x00004d51 movq %r13, %r14 - 0x48, 0x8b, 0x55, 0xb8, //0x00004d54 movq $-72(%rbp), %rdx - 0x48, 0x83, 0xf9, 0x40, //0x00004d58 cmpq $64, %rcx - 0x48, 0x89, 0x4d, 0xd0, //0x00004d5c movq %rcx, $-48(%rbp) - 0x0f, 0x8d, 0x64, 0xfd, 0xff, 0xff, //0x00004d60 jge LBB0_904 - 0xe9, 0x06, 0xfc, 0xff, 0xff, //0x00004d66 jmp LBB0_913 - //0x00004d6b LBB0_929 - 0x49, 0x8d, 0x4b, 0x05, //0x00004d6b leaq $5(%r11), %rcx - //0x00004d6f LBB0_930 - 0x49, 0x3b, 0x0f, //0x00004d6f cmpq (%r15), %rcx - 0x0f, 0x87, 0xd9, 0xf8, 0xff, 0xff, //0x00004d72 ja LBB0_870 - 0x48, 0x8b, 0x45, 0xc8, //0x00004d78 movq $-56(%rbp), %rax - 0x48, 0x89, 0x08, //0x00004d7c movq %rcx, (%rax) - 0x4c, 0x89, 0xd8, //0x00004d7f movq %r11, %rax - 0xe9, 0xca, 0xf8, 0xff, 0xff, //0x00004d82 jmp LBB0_870 - //0x00004d87 LBB0_932 - 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00004d87 movabsq $6148914691236517205, %rdx - 0x49, 0x8b, 0x0f, //0x00004d91 movq (%r15), %rcx - 0x49, 0x89, 0xd7, //0x00004d94 movq %rdx, %r15 - 0x48, 0x29, 0xf9, //0x00004d97 subq %rdi, %rcx - 0x49, 0x01, 0xfc, //0x00004d9a addq %rdi, %r12 - 0x45, 0x31, 0xf6, //0x00004d9d xorl %r14d, %r14d - 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0x97, 0xb2, 0xff, 0xff, //0x00004da0 movdqu $-19817(%rip), %xmm10 /* LCPI0_4+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0x7f, 0xb2, 0xff, 0xff, //0x00004da9 movdqu $-19841(%rip), %xmm1 /* LCPI0_3+0(%rip) */ - 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x00004db1 pcmpeqd %xmm9, %xmm9 - 0xf3, 0x0f, 0x6f, 0x1d, 0x92, 0xb2, 0xff, 0xff, //0x00004db6 movdqu $-19822(%rip), %xmm3 /* LCPI0_5+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x25, 0x9a, 0xb2, 0xff, 0xff, //0x00004dbe movdqu $-19814(%rip), %xmm4 /* LCPI0_6+0(%rip) */ - 0x49, 0xb9, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00004dc6 movabsq $3689348814741910323, %r9 - 0x66, 0x45, 0x0f, 0xef, 0xc0, //0x00004dd0 pxor %xmm8, %xmm8 - 0x31, 0xd2, //0x00004dd5 xorl %edx, %edx - 0x45, 0x31, 0xc0, //0x00004dd7 xorl %r8d, %r8d - 0x45, 0x31, 0xd2, //0x00004dda xorl %r10d, %r10d - 0x48, 0x83, 0xf9, 0x40, //0x00004ddd cmpq $64, %rcx - 0x48, 0x89, 0x4d, 0xd0, //0x00004de1 movq %rcx, $-48(%rbp) - 0x0f, 0x8d, 0x59, 0x01, 0x00, 0x00, //0x00004de5 jge LBB0_933 - //0x00004deb LBB0_942 - 0x48, 0x85, 0xc9, //0x00004deb testq %rcx, %rcx - 0x0f, 0x8e, 0x71, 0x06, 0x00, 0x00, //0x00004dee jle LBB0_994 - 0xf3, 0x44, 0x0f, 0x7f, 0x45, 0x80, //0x00004df4 movdqu %xmm8, $-128(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x70, 0xff, 0xff, 0xff, //0x00004dfa movdqu %xmm8, $-144(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x00004e03 movdqu %xmm8, $-160(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x00004e0c movdqu %xmm8, $-176(%rbp) - 0x44, 0x89, 0xe1, //0x00004e15 movl %r12d, %ecx - 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00004e18 andl $4095, %ecx - 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00004e1e cmpl $4033, %ecx - 0x0f, 0x82, 0x3e, 0x00, 0x00, 0x00, //0x00004e24 jb LBB0_946 - 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x00004e2a cmpq $32, $-48(%rbp) - 0x0f, 0x82, 0x42, 0x00, 0x00, 0x00, //0x00004e2f jb LBB0_947 - 0x41, 0x0f, 0x10, 0x04, 0x24, //0x00004e35 movups (%r12), %xmm0 - 0x0f, 0x11, 0x85, 0x50, 0xff, 0xff, 0xff, //0x00004e3a movups %xmm0, $-176(%rbp) - 0xf3, 0x41, 0x0f, 0x6f, 0x44, 0x24, 0x10, //0x00004e41 movdqu $16(%r12), %xmm0 - 0xf3, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x00004e48 movdqu %xmm0, $-160(%rbp) - 0x49, 0x83, 0xc4, 0x20, //0x00004e50 addq $32, %r12 - 0x48, 0x8b, 0x4d, 0xd0, //0x00004e54 movq $-48(%rbp), %rcx - 0x48, 0x8d, 0x79, 0xe0, //0x00004e58 leaq $-32(%rcx), %rdi - 0x48, 0x8d, 0xb5, 0x70, 0xff, 0xff, 0xff, //0x00004e5c leaq $-144(%rbp), %rsi - 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x00004e63 jmp LBB0_948 - //0x00004e68 LBB0_946 - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00004e68 movabsq $6148914691236517205, %r15 - 0xe9, 0xcd, 0x00, 0x00, 0x00, //0x00004e72 jmp LBB0_933 - //0x00004e77 LBB0_947 - 0x48, 0x8d, 0xb5, 0x50, 0xff, 0xff, 0xff, //0x00004e77 leaq $-176(%rbp), %rsi - 0x48, 0x8b, 0x7d, 0xd0, //0x00004e7e movq $-48(%rbp), %rdi - //0x00004e82 LBB0_948 - 0x48, 0x83, 0xff, 0x10, //0x00004e82 cmpq $16, %rdi - 0x0f, 0x82, 0x4b, 0x00, 0x00, 0x00, //0x00004e86 jb LBB0_949 - 0xf3, 0x41, 0x0f, 0x6f, 0x04, 0x24, //0x00004e8c movdqu (%r12), %xmm0 - 0xf3, 0x0f, 0x7f, 0x06, //0x00004e92 movdqu %xmm0, (%rsi) - 0x49, 0x83, 0xc4, 0x10, //0x00004e96 addq $16, %r12 - 0x48, 0x83, 0xc6, 0x10, //0x00004e9a addq $16, %rsi - 0x48, 0x83, 0xc7, 0xf0, //0x00004e9e addq $-16, %rdi - 0x48, 0x83, 0xff, 0x08, //0x00004ea2 cmpq $8, %rdi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00004ea6 jae LBB0_956 - //0x00004eac LBB0_950 - 0x48, 0x83, 0xff, 0x04, //0x00004eac cmpq $4, %rdi - 0x0f, 0x8c, 0x48, 0x00, 0x00, 0x00, //0x00004eb0 jl LBB0_951 - //0x00004eb6 LBB0_957 - 0x41, 0x8b, 0x0c, 0x24, //0x00004eb6 movl (%r12), %ecx - 0x89, 0x0e, //0x00004eba movl %ecx, (%rsi) - 0x49, 0x83, 0xc4, 0x04, //0x00004ebc addq $4, %r12 - 0x48, 0x83, 0xc6, 0x04, //0x00004ec0 addq $4, %rsi - 0x48, 0x83, 0xc7, 0xfc, //0x00004ec4 addq $-4, %rdi - 0x48, 0x83, 0xff, 0x02, //0x00004ec8 cmpq $2, %rdi - 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x00004ecc jae LBB0_952 - 0xe9, 0x45, 0x00, 0x00, 0x00, //0x00004ed2 jmp LBB0_953 - //0x00004ed7 LBB0_949 - 0x48, 0x83, 0xff, 0x08, //0x00004ed7 cmpq $8, %rdi - 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x00004edb jb LBB0_950 - //0x00004ee1 LBB0_956 - 0x49, 0x8b, 0x0c, 0x24, //0x00004ee1 movq (%r12), %rcx - 0x48, 0x89, 0x0e, //0x00004ee5 movq %rcx, (%rsi) - 0x49, 0x83, 0xc4, 0x08, //0x00004ee8 addq $8, %r12 - 0x48, 0x83, 0xc6, 0x08, //0x00004eec addq $8, %rsi - 0x48, 0x83, 0xc7, 0xf8, //0x00004ef0 addq $-8, %rdi - 0x48, 0x83, 0xff, 0x04, //0x00004ef4 cmpq $4, %rdi - 0x0f, 0x8d, 0xb8, 0xff, 0xff, 0xff, //0x00004ef8 jge LBB0_957 - //0x00004efe LBB0_951 - 0x48, 0x83, 0xff, 0x02, //0x00004efe cmpq $2, %rdi - 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00004f02 jb LBB0_953 - //0x00004f08 LBB0_952 - 0x41, 0x0f, 0xb7, 0x0c, 0x24, //0x00004f08 movzwl (%r12), %ecx - 0x66, 0x89, 0x0e, //0x00004f0d movw %cx, (%rsi) - 0x49, 0x83, 0xc4, 0x02, //0x00004f10 addq $2, %r12 - 0x48, 0x83, 0xc6, 0x02, //0x00004f14 addq $2, %rsi - 0x48, 0x83, 0xc7, 0xfe, //0x00004f18 addq $-2, %rdi - //0x00004f1c LBB0_953 - 0x4c, 0x89, 0xe1, //0x00004f1c movq %r12, %rcx - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00004f1f leaq $-176(%rbp), %r12 - 0x48, 0x85, 0xff, //0x00004f26 testq %rdi, %rdi - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00004f29 movabsq $6148914691236517205, %r15 - 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x00004f33 je LBB0_933 - 0x8a, 0x09, //0x00004f39 movb (%rcx), %cl - 0x88, 0x0e, //0x00004f3b movb %cl, (%rsi) - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00004f3d leaq $-176(%rbp), %r12 - //0x00004f44 LBB0_933 - 0xf3, 0x41, 0x0f, 0x6f, 0x04, 0x24, //0x00004f44 movdqu (%r12), %xmm0 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x10, //0x00004f4a movdqu $16(%r12), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x20, //0x00004f51 movdqu $32(%r12), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x30, //0x00004f58 movdqu $48(%r12), %xmm6 - 0x66, 0x0f, 0x6f, 0xd0, //0x00004f5f movdqa %xmm0, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004f63 pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xf2, //0x00004f68 pmovmskb %xmm2, %esi - 0x66, 0x0f, 0x6f, 0xd5, //0x00004f6c movdqa %xmm5, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004f70 pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x00004f75 pmovmskb %xmm2, %ecx - 0x66, 0x0f, 0x6f, 0xd7, //0x00004f79 movdqa %xmm7, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004f7d pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xfa, //0x00004f82 pmovmskb %xmm2, %edi - 0x66, 0x0f, 0x6f, 0xd6, //0x00004f86 movdqa %xmm6, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004f8a pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xda, //0x00004f8f pmovmskb %xmm2, %ebx - 0x48, 0xc1, 0xe3, 0x30, //0x00004f93 shlq $48, %rbx - 0x48, 0xc1, 0xe7, 0x20, //0x00004f97 shlq $32, %rdi - 0x48, 0x09, 0xdf, //0x00004f9b orq %rbx, %rdi - 0x48, 0xc1, 0xe1, 0x10, //0x00004f9e shlq $16, %rcx - 0x48, 0x09, 0xf9, //0x00004fa2 orq %rdi, %rcx - 0x48, 0x09, 0xce, //0x00004fa5 orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00004fa8 movq %rsi, %rcx - 0x48, 0x09, 0xd1, //0x00004fab orq %rdx, %rcx - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00004fae jne LBB0_935 - 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00004fb4 movq $-1, %rsi - 0x31, 0xc9, //0x00004fbb xorl %ecx, %ecx - 0x48, 0x89, 0x4d, 0xb8, //0x00004fbd movq %rcx, $-72(%rbp) - 0xe9, 0x3e, 0x00, 0x00, 0x00, //0x00004fc1 jmp LBB0_936 - //0x00004fc6 LBB0_935 - 0x48, 0x89, 0xd1, //0x00004fc6 movq %rdx, %rcx - 0x48, 0xf7, 0xd1, //0x00004fc9 notq %rcx - 0x48, 0x21, 0xf1, //0x00004fcc andq %rsi, %rcx - 0x48, 0x8d, 0x3c, 0x09, //0x00004fcf leaq (%rcx,%rcx), %rdi - 0x48, 0x09, 0xd7, //0x00004fd3 orq %rdx, %rdi - 0x48, 0x89, 0xfa, //0x00004fd6 movq %rdi, %rdx - 0x48, 0xf7, 0xd2, //0x00004fd9 notq %rdx - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00004fdc movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xde, //0x00004fe6 andq %rbx, %rsi - 0x48, 0x21, 0xd6, //0x00004fe9 andq %rdx, %rsi - 0x31, 0xd2, //0x00004fec xorl %edx, %edx - 0x48, 0x01, 0xce, //0x00004fee addq %rcx, %rsi - 0x0f, 0x92, 0xc2, //0x00004ff1 setb %dl - 0x48, 0x89, 0x55, 0xb8, //0x00004ff4 movq %rdx, $-72(%rbp) - 0x48, 0x01, 0xf6, //0x00004ff8 addq %rsi, %rsi - 0x4c, 0x31, 0xfe, //0x00004ffb xorq %r15, %rsi - 0x48, 0x21, 0xfe, //0x00004ffe andq %rdi, %rsi - 0x48, 0xf7, 0xd6, //0x00005001 notq %rsi - //0x00005004 LBB0_936 - 0x66, 0x0f, 0x6f, 0xd6, //0x00005004 movdqa %xmm6, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x00005008 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x0000500c pmovmskb %xmm2, %ecx - 0x48, 0xc1, 0xe1, 0x30, //0x00005010 shlq $48, %rcx - 0x66, 0x0f, 0x6f, 0xd7, //0x00005014 movdqa %xmm7, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x00005018 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xfa, //0x0000501c pmovmskb %xmm2, %edi - 0x48, 0xc1, 0xe7, 0x20, //0x00005020 shlq $32, %rdi - 0x48, 0x09, 0xcf, //0x00005024 orq %rcx, %rdi - 0x66, 0x0f, 0x6f, 0xd5, //0x00005027 movdqa %xmm5, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x0000502b pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x0000502f pmovmskb %xmm2, %ecx - 0x48, 0xc1, 0xe1, 0x10, //0x00005033 shlq $16, %rcx - 0x48, 0x09, 0xf9, //0x00005037 orq %rdi, %rcx - 0x66, 0x0f, 0x6f, 0xd0, //0x0000503a movdqa %xmm0, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x0000503e pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xfa, //0x00005042 pmovmskb %xmm2, %edi - 0x48, 0x09, 0xcf, //0x00005046 orq %rcx, %rdi - 0x48, 0x21, 0xf7, //0x00005049 andq %rsi, %rdi - 0x66, 0x48, 0x0f, 0x6e, 0xd7, //0x0000504c movq %rdi, %xmm2 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd1, 0x00, //0x00005051 pclmulqdq $0, %xmm9, %xmm2 - 0x66, 0x49, 0x0f, 0x7e, 0xd5, //0x00005058 movq %xmm2, %r13 - 0x4d, 0x31, 0xf5, //0x0000505d xorq %r14, %r13 - 0x66, 0x0f, 0x6f, 0xd0, //0x00005060 movdqa %xmm0, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00005064 pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xda, //0x00005068 pmovmskb %xmm2, %ebx - 0x66, 0x0f, 0x6f, 0xd5, //0x0000506c movdqa %xmm5, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00005070 pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x00005074 pmovmskb %xmm2, %ecx - 0x66, 0x0f, 0x6f, 0xd7, //0x00005078 movdqa %xmm7, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x0000507c pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xf2, //0x00005080 pmovmskb %xmm2, %esi - 0x66, 0x0f, 0x6f, 0xd6, //0x00005084 movdqa %xmm6, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00005088 pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xd2, //0x0000508c pmovmskb %xmm2, %edx - 0x48, 0xc1, 0xe2, 0x30, //0x00005090 shlq $48, %rdx - 0x48, 0xc1, 0xe6, 0x20, //0x00005094 shlq $32, %rsi - 0x48, 0x09, 0xd6, //0x00005098 orq %rdx, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x0000509b shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x0000509f orq %rsi, %rcx - 0x48, 0x09, 0xcb, //0x000050a2 orq %rcx, %rbx - 0x4c, 0x89, 0xe9, //0x000050a5 movq %r13, %rcx - 0x48, 0xf7, 0xd1, //0x000050a8 notq %rcx - 0x48, 0x21, 0xcb, //0x000050ab andq %rcx, %rbx - 0x66, 0x0f, 0x74, 0xc4, //0x000050ae pcmpeqb %xmm4, %xmm0 - 0x66, 0x0f, 0xd7, 0xf0, //0x000050b2 pmovmskb %xmm0, %esi - 0x66, 0x0f, 0x74, 0xec, //0x000050b6 pcmpeqb %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x000050ba pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x74, 0xfc, //0x000050be pcmpeqb %xmm4, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xf7, //0x000050c2 pmovmskb %xmm7, %r14d - 0x66, 0x0f, 0x74, 0xf4, //0x000050c7 pcmpeqb %xmm4, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x000050cb pmovmskb %xmm6, %r15d - 0x49, 0xc1, 0xe7, 0x30, //0x000050d0 shlq $48, %r15 - 0x49, 0xc1, 0xe6, 0x20, //0x000050d4 shlq $32, %r14 - 0x4d, 0x09, 0xfe, //0x000050d8 orq %r15, %r14 - 0x48, 0xc1, 0xe2, 0x10, //0x000050db shlq $16, %rdx - 0x4c, 0x09, 0xf2, //0x000050df orq %r14, %rdx - 0x48, 0x09, 0xd6, //0x000050e2 orq %rdx, %rsi - 0x48, 0x21, 0xce, //0x000050e5 andq %rcx, %rsi - 0x0f, 0x84, 0x7b, 0x00, 0x00, 0x00, //0x000050e8 je LBB0_940 - 0x4c, 0x8b, 0x75, 0xc0, //0x000050ee movq $-64(%rbp), %r14 - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000050f2 movabsq $6148914691236517205, %r15 - //0x000050fc LBB0_938 - 0x48, 0x8d, 0x7e, 0xff, //0x000050fc leaq $-1(%rsi), %rdi - 0x48, 0x89, 0xf9, //0x00005100 movq %rdi, %rcx - 0x48, 0x21, 0xd9, //0x00005103 andq %rbx, %rcx - 0x48, 0x89, 0xca, //0x00005106 movq %rcx, %rdx - 0x48, 0xd1, 0xea, //0x00005109 shrq %rdx - 0x4c, 0x21, 0xfa, //0x0000510c andq %r15, %rdx - 0x48, 0x29, 0xd1, //0x0000510f subq %rdx, %rcx - 0x48, 0x89, 0xca, //0x00005112 movq %rcx, %rdx - 0x4c, 0x21, 0xca, //0x00005115 andq %r9, %rdx - 0x48, 0xc1, 0xe9, 0x02, //0x00005118 shrq $2, %rcx - 0x4c, 0x21, 0xc9, //0x0000511c andq %r9, %rcx - 0x48, 0x01, 0xd1, //0x0000511f addq %rdx, %rcx - 0x48, 0x89, 0xca, //0x00005122 movq %rcx, %rdx - 0x48, 0xc1, 0xea, 0x04, //0x00005125 shrq $4, %rdx - 0x48, 0x01, 0xca, //0x00005129 addq %rcx, %rdx - 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000512c movabsq $1085102592571150095, %rcx - 0x48, 0x21, 0xca, //0x00005136 andq %rcx, %rdx - 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00005139 movabsq $72340172838076673, %rcx - 0x48, 0x0f, 0xaf, 0xd1, //0x00005143 imulq %rcx, %rdx - 0x48, 0xc1, 0xea, 0x38, //0x00005147 shrq $56, %rdx - 0x4c, 0x01, 0xc2, //0x0000514b addq %r8, %rdx - 0x4c, 0x39, 0xd2, //0x0000514e cmpq %r10, %rdx - 0x0f, 0x86, 0x8e, 0x00, 0x00, 0x00, //0x00005151 jbe LBB0_958 - 0x49, 0x83, 0xc2, 0x01, //0x00005157 addq $1, %r10 - 0x48, 0x21, 0xfe, //0x0000515b andq %rdi, %rsi - 0x0f, 0x85, 0x98, 0xff, 0xff, 0xff, //0x0000515e jne LBB0_938 - 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00005164 jmp LBB0_941 - //0x00005169 LBB0_940 - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00005169 movabsq $6148914691236517205, %r15 - //0x00005173 LBB0_941 - 0x49, 0xc1, 0xfd, 0x3f, //0x00005173 sarq $63, %r13 - 0x48, 0x89, 0xd9, //0x00005177 movq %rbx, %rcx - 0x48, 0xd1, 0xe9, //0x0000517a shrq %rcx - 0x4c, 0x21, 0xf9, //0x0000517d andq %r15, %rcx - 0x48, 0x29, 0xcb, //0x00005180 subq %rcx, %rbx - 0x48, 0x89, 0xd9, //0x00005183 movq %rbx, %rcx - 0x4c, 0x21, 0xc9, //0x00005186 andq %r9, %rcx - 0x48, 0xc1, 0xeb, 0x02, //0x00005189 shrq $2, %rbx - 0x4c, 0x21, 0xcb, //0x0000518d andq %r9, %rbx - 0x48, 0x01, 0xcb, //0x00005190 addq %rcx, %rbx - 0x48, 0x89, 0xd9, //0x00005193 movq %rbx, %rcx - 0x48, 0xc1, 0xe9, 0x04, //0x00005196 shrq $4, %rcx - 0x48, 0x01, 0xd9, //0x0000519a addq %rbx, %rcx - 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000519d movabsq $1085102592571150095, %rdx - 0x48, 0x21, 0xd1, //0x000051a7 andq %rdx, %rcx - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000051aa movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xca, //0x000051b4 imulq %rdx, %rcx - 0x48, 0xc1, 0xe9, 0x38, //0x000051b8 shrq $56, %rcx - 0x49, 0x01, 0xc8, //0x000051bc addq %rcx, %r8 - 0x49, 0x83, 0xc4, 0x40, //0x000051bf addq $64, %r12 - 0x48, 0x8b, 0x4d, 0xd0, //0x000051c3 movq $-48(%rbp), %rcx - 0x48, 0x83, 0xc1, 0xc0, //0x000051c7 addq $-64, %rcx - 0x4d, 0x89, 0xee, //0x000051cb movq %r13, %r14 - 0x48, 0x8b, 0x55, 0xb8, //0x000051ce movq $-72(%rbp), %rdx - 0x48, 0x83, 0xf9, 0x40, //0x000051d2 cmpq $64, %rcx - 0x48, 0x89, 0x4d, 0xd0, //0x000051d6 movq %rcx, $-48(%rbp) - 0x0f, 0x8d, 0x64, 0xfd, 0xff, 0xff, //0x000051da jge LBB0_933 - 0xe9, 0x06, 0xfc, 0xff, 0xff, //0x000051e0 jmp LBB0_942 - //0x000051e5 LBB0_958 - 0x49, 0x8b, 0x06, //0x000051e5 movq (%r14), %rax - 0x48, 0x0f, 0xbc, 0xce, //0x000051e8 bsfq %rsi, %rcx - 0x48, 0x2b, 0x4d, 0xd0, //0x000051ec subq $-48(%rbp), %rcx - 0x48, 0x01, 0xc8, //0x000051f0 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x000051f3 addq $1, %rax - 0x48, 0x8b, 0x55, 0xc8, //0x000051f7 movq $-56(%rbp), %rdx - 0x48, 0x89, 0x02, //0x000051fb movq %rax, (%rdx) - 0x49, 0x8b, 0x0e, //0x000051fe movq (%r14), %rcx - 0x48, 0x39, 0xc8, //0x00005201 cmpq %rcx, %rax - 0x48, 0x0f, 0x47, 0xc1, //0x00005204 cmovaq %rcx, %rax - 0x48, 0x89, 0x02, //0x00005208 movq %rax, (%rdx) - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000520b movq $-1, %rax - 0x4c, 0x0f, 0x47, 0xd8, //0x00005212 cmovaq %rax, %r11 - 0x4c, 0x89, 0xd8, //0x00005216 movq %r11, %rax - 0xe9, 0x33, 0xf4, 0xff, 0xff, //0x00005219 jmp LBB0_870 - //0x0000521e LBB0_959 - 0x0f, 0xbc, 0xc6, //0x0000521e bsfl %esi, %eax - 0x4c, 0x01, 0xd8, //0x00005221 addq %r11, %rax - 0x4c, 0x01, 0xf0, //0x00005224 addq %r14, %rax - 0x48, 0x83, 0xc0, 0x02, //0x00005227 addq $2, %rax - 0x48, 0x8b, 0x4d, 0xc8, //0x0000522b movq $-56(%rbp), %rcx - 0x48, 0x89, 0x01, //0x0000522f movq %rax, (%rcx) - 0x4c, 0x89, 0xd8, //0x00005232 movq %r11, %rax - 0xe9, 0x17, 0xf4, 0xff, 0xff, //0x00005235 jmp LBB0_870 - //0x0000523a LBB0_972 - 0x48, 0x89, 0x17, //0x0000523a movq %rdx, (%rdi) - 0xe9, 0x0f, 0xf4, 0xff, 0xff, //0x0000523d jmp LBB0_870 - //0x00005242 LBB0_960 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00005242 movq $-2, %rcx - 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00005249 movl $2, %eax - 0x48, 0x01, 0xc7, //0x0000524e addq %rax, %rdi - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00005251 movq $-1, %rax - 0x49, 0x01, 0xce, //0x00005258 addq %rcx, %r14 - 0x0f, 0x8e, 0xf0, 0xf3, 0xff, 0xff, //0x0000525b jle LBB0_870 - //0x00005261 LBB0_962 - 0x0f, 0xb6, 0x07, //0x00005261 movzbl (%rdi), %eax - 0x3c, 0x5c, //0x00005264 cmpb $92, %al - 0x0f, 0x84, 0xd6, 0xff, 0xff, 0xff, //0x00005266 je LBB0_960 - 0x3c, 0x22, //0x0000526c cmpb $34, %al - 0x0f, 0x84, 0x98, 0x01, 0x00, 0x00, //0x0000526e je LBB0_985 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00005274 movq $-1, %rcx - 0xb8, 0x01, 0x00, 0x00, 0x00, //0x0000527b movl $1, %eax - 0x48, 0x01, 0xc7, //0x00005280 addq %rax, %rdi - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00005283 movq $-1, %rax - 0x49, 0x01, 0xce, //0x0000528a addq %rcx, %r14 - 0x0f, 0x8f, 0xce, 0xff, 0xff, 0xff, //0x0000528d jg LBB0_962 - 0xe9, 0xb9, 0xf3, 0xff, 0xff, //0x00005293 jmp LBB0_870 - //0x00005298 LBB0_965 - 0x48, 0x8b, 0x7d, 0xa0, //0x00005298 movq $-96(%rbp), %rdi - 0xe9, 0x47, 0xf5, 0xff, 0xff, //0x0000529c jmp LBB0_891 - //0x000052a1 LBB0_966 - 0x4c, 0x89, 0x95, 0x48, 0xff, 0xff, 0xff, //0x000052a1 movq %r10, $-184(%rbp) - //0x000052a8 LBB0_967 - 0x4c, 0x8b, 0x45, 0xc8, //0x000052a8 movq $-56(%rbp), %r8 - //0x000052ac LBB0_968 - 0x48, 0x8b, 0x85, 0x48, 0xff, 0xff, 0xff, //0x000052ac movq $-184(%rbp), %rax - 0x49, 0x89, 0x00, //0x000052b3 movq %rax, (%r8) - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000052b6 movq $-1, %rax - 0xe9, 0x8f, 0xf3, 0xff, 0xff, //0x000052bd jmp LBB0_870 - //0x000052c2 LBB0_969 - 0x4c, 0x29, 0xe7, //0x000052c2 subq %r12, %rdi - 0x48, 0x01, 0xc7, //0x000052c5 addq %rax, %rdi - 0x48, 0x89, 0x3b, //0x000052c8 movq %rdi, (%rbx) - 0x4c, 0x89, 0xd8, //0x000052cb movq %r11, %rax - 0xe9, 0x7e, 0xf3, 0xff, 0xff, //0x000052ce jmp LBB0_870 - //0x000052d3 LBB0_970 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000052d3 movq $-1, %r15 - //0x000052da LBB0_971 - 0x49, 0xf7, 0xd7, //0x000052da notq %r15 - 0x4c, 0x01, 0xf8, //0x000052dd addq %r15, %rax - 0x48, 0x8b, 0x4d, 0xc8, //0x000052e0 movq $-56(%rbp), %rcx - 0x48, 0x89, 0x01, //0x000052e4 movq %rax, (%rcx) - 0xe9, 0x5e, 0xf3, 0xff, 0xff, //0x000052e7 jmp LBB0_869 - //0x000052ec LBB0_974 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x000052ec movq $-2, %rax - 0x80, 0xfa, 0x61, //0x000052f3 cmpb $97, %dl - 0x0f, 0x85, 0x55, 0xf3, 0xff, 0xff, //0x000052f6 jne LBB0_870 - 0x48, 0x8d, 0x51, 0x01, //0x000052fc leaq $1(%rcx), %rdx - 0x48, 0x89, 0x17, //0x00005300 movq %rdx, (%rdi) - 0x41, 0x80, 0x7c, 0x0d, 0x01, 0x6c, //0x00005303 cmpb $108, $1(%r13,%rcx) - 0x0f, 0x85, 0x42, 0xf3, 0xff, 0xff, //0x00005309 jne LBB0_870 - 0x48, 0x8d, 0x51, 0x02, //0x0000530f leaq $2(%rcx), %rdx - 0x48, 0x89, 0x17, //0x00005313 movq %rdx, (%rdi) - 0x41, 0x80, 0x7c, 0x0d, 0x02, 0x73, //0x00005316 cmpb $115, $2(%r13,%rcx) - 0x0f, 0x85, 0x2f, 0xf3, 0xff, 0xff, //0x0000531c jne LBB0_870 - 0x48, 0x8d, 0x51, 0x03, //0x00005322 leaq $3(%rcx), %rdx - 0x48, 0x89, 0x17, //0x00005326 movq %rdx, (%rdi) - 0x41, 0x80, 0x7c, 0x0d, 0x03, 0x65, //0x00005329 cmpb $101, $3(%r13,%rcx) - 0x0f, 0x85, 0x1c, 0xf3, 0xff, 0xff, //0x0000532f jne LBB0_870 - 0x48, 0x83, 0xc1, 0x04, //0x00005335 addq $4, %rcx - //0x00005339 LBB0_979 - 0x48, 0x8b, 0x55, 0xc8, //0x00005339 movq $-56(%rbp), %rdx - 0x48, 0x89, 0x0a, //0x0000533d movq %rcx, (%rdx) - 0xe9, 0x0c, 0xf3, 0xff, 0xff, //0x00005340 jmp LBB0_870 - //0x00005345 LBB0_758 - 0x48, 0x89, 0x07, //0x00005345 movq %rax, (%rdi) - 0x41, 0x80, 0x7c, 0x05, 0x00, 0x6e, //0x00005348 cmpb $110, (%r13,%rax) - 0x0f, 0x85, 0xf6, 0xf2, 0xff, 0xff, //0x0000534e jne LBB0_869 - 0x48, 0x89, 0x0f, //0x00005354 movq %rcx, (%rdi) - 0x41, 0x80, 0x7c, 0x0d, 0x00, 0x75, //0x00005357 cmpb $117, (%r13,%rcx) - 0x0f, 0x85, 0xe7, 0xf2, 0xff, 0xff, //0x0000535d jne LBB0_869 - 0x48, 0x8d, 0x41, 0x01, //0x00005363 leaq $1(%rcx), %rax - 0x48, 0x89, 0x07, //0x00005367 movq %rax, (%rdi) - 0x41, 0x80, 0x7c, 0x0d, 0x01, 0x6c, //0x0000536a cmpb $108, $1(%r13,%rcx) - 0x0f, 0x85, 0xd4, 0xf2, 0xff, 0xff, //0x00005370 jne LBB0_869 - 0x48, 0x8d, 0x41, 0x02, //0x00005376 leaq $2(%rcx), %rax - 0x48, 0x89, 0x07, //0x0000537a movq %rax, (%rdi) - 0x41, 0x80, 0x7c, 0x0d, 0x02, 0x6c, //0x0000537d cmpb $108, $2(%r13,%rcx) - 0x0f, 0x85, 0xc1, 0xf2, 0xff, 0xff, //0x00005383 jne LBB0_869 - 0xe9, 0x44, 0x00, 0x00, 0x00, //0x00005389 jmp LBB0_984 - //0x0000538e LBB0_980 - 0x48, 0x89, 0x07, //0x0000538e movq %rax, (%rdi) - 0x41, 0x80, 0x7c, 0x05, 0x00, 0x74, //0x00005391 cmpb $116, (%r13,%rax) - 0x0f, 0x85, 0xad, 0xf2, 0xff, 0xff, //0x00005397 jne LBB0_869 - 0x48, 0x89, 0x0f, //0x0000539d movq %rcx, (%rdi) - 0x41, 0x80, 0x7c, 0x0d, 0x00, 0x72, //0x000053a0 cmpb $114, (%r13,%rcx) - 0x0f, 0x85, 0x9e, 0xf2, 0xff, 0xff, //0x000053a6 jne LBB0_869 - 0x48, 0x8d, 0x41, 0x01, //0x000053ac leaq $1(%rcx), %rax - 0x48, 0x89, 0x07, //0x000053b0 movq %rax, (%rdi) - 0x41, 0x80, 0x7c, 0x0d, 0x01, 0x75, //0x000053b3 cmpb $117, $1(%r13,%rcx) - 0x0f, 0x85, 0x8b, 0xf2, 0xff, 0xff, //0x000053b9 jne LBB0_869 - 0x48, 0x8d, 0x41, 0x02, //0x000053bf leaq $2(%rcx), %rax - 0x48, 0x89, 0x07, //0x000053c3 movq %rax, (%rdi) - 0x41, 0x80, 0x7c, 0x0d, 0x02, 0x65, //0x000053c6 cmpb $101, $2(%r13,%rcx) - 0x0f, 0x85, 0x78, 0xf2, 0xff, 0xff, //0x000053cc jne LBB0_869 - //0x000053d2 LBB0_984 - 0x48, 0x83, 0xc1, 0x03, //0x000053d2 addq $3, %rcx - 0x48, 0x8b, 0x45, 0xc8, //0x000053d6 movq $-56(%rbp), %rax - 0x48, 0x89, 0x08, //0x000053da movq %rcx, (%rax) - 0xe9, 0x68, 0xf2, 0xff, 0xff, //0x000053dd jmp LBB0_869 - //0x000053e2 LBB0_755 - 0x48, 0x83, 0xc1, 0xff, //0x000053e2 addq $-1, %rcx - 0x48, 0x89, 0xc8, //0x000053e6 movq %rcx, %rax - 0xe9, 0x63, 0xf2, 0xff, 0xff, //0x000053e9 jmp LBB0_870 - //0x000053ee LBB0_782 - 0x48, 0x83, 0xc0, 0xff, //0x000053ee addq $-1, %rax - 0xe9, 0x5a, 0xf2, 0xff, 0xff, //0x000053f2 jmp LBB0_870 - //0x000053f7 LBB0_992 - 0x4c, 0x89, 0x45, 0xa0, //0x000053f7 movq %r8, $-96(%rbp) - 0xe9, 0xad, 0xf3, 0xff, 0xff, //0x000053fb jmp LBB0_712 - //0x00005400 LBB0_997 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00005400 movq $-2, %rax - 0xe9, 0x2d, 0x00, 0x00, 0x00, //0x00005407 jmp LBB0_990 - //0x0000540c LBB0_985 - 0x4c, 0x29, 0xe7, //0x0000540c subq %r12, %rdi - 0x48, 0x83, 0xc7, 0x01, //0x0000540f addq $1, %rdi - //0x00005413 LBB0_986 - 0x48, 0x8b, 0x45, 0xc8, //0x00005413 movq $-56(%rbp), %rax - 0x48, 0x89, 0x38, //0x00005417 movq %rdi, (%rax) - 0x4c, 0x89, 0xd8, //0x0000541a movq %r11, %rax - 0xe9, 0x2f, 0xf2, 0xff, 0xff, //0x0000541d jmp LBB0_870 - //0x00005422 LBB0_987 - 0x48, 0x83, 0xc3, 0x01, //0x00005422 addq $1, %rbx - 0x48, 0xc7, 0xc0, 0xfd, 0xff, 0xff, 0xff, //0x00005426 movq $-3, %rax - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x0000542d jmp LBB0_989 - //0x00005432 LBB0_988 - 0x48, 0x83, 0xc3, 0x01, //0x00005432 addq $1, %rbx - //0x00005436 LBB0_989 - 0x49, 0x89, 0xd9, //0x00005436 movq %rbx, %r9 - //0x00005439 LBB0_990 - 0x4d, 0x29, 0xe9, //0x00005439 subq %r13, %r9 - 0x48, 0x8b, 0x4d, 0xc8, //0x0000543c movq $-56(%rbp), %rcx - 0x4c, 0x89, 0x09, //0x00005440 movq %r9, (%rcx) - 0xe9, 0x09, 0xf2, 0xff, 0xff, //0x00005443 jmp LBB0_870 - //0x00005448 LBB0_991 - 0x4c, 0x01, 0xe7, //0x00005448 addq %r12, %rdi - 0x48, 0x8b, 0x5d, 0xc8, //0x0000544b movq $-56(%rbp), %rbx - 0x48, 0x85, 0xc9, //0x0000544f testq %rcx, %rcx - 0x0f, 0x85, 0xed, 0xf2, 0xff, 0xff, //0x00005452 jne LBB0_881 - 0xe9, 0x1d, 0xf3, 0xff, 0xff, //0x00005458 jmp LBB0_887 - //0x0000545d LBB0_993 - 0x4c, 0x01, 0xe7, //0x0000545d addq %r12, %rdi - 0xe9, 0x9a, 0xf4, 0xff, 0xff, //0x00005460 jmp LBB0_902 - //0x00005465 LBB0_994 - 0x48, 0x8b, 0x4d, 0xc0, //0x00005465 movq $-64(%rbp), %rcx - 0x48, 0x8b, 0x09, //0x00005469 movq (%rcx), %rcx - 0xe9, 0xc8, 0xfe, 0xff, 0xff, //0x0000546c jmp LBB0_979 - //0x00005471 LBB0_995 - 0x49, 0x8d, 0x48, 0xff, //0x00005471 leaq $-1(%r8), %rcx - 0x4c, 0x39, 0xf1, //0x00005475 cmpq %r14, %rcx - 0x0f, 0x84, 0xd3, 0xf1, 0xff, 0xff, //0x00005478 je LBB0_870 - 0x4b, 0x8d, 0x3c, 0x0e, //0x0000547e leaq (%r14,%r9), %rdi - 0x48, 0x83, 0xc7, 0x02, //0x00005482 addq $2, %rdi - 0x4d, 0x29, 0xf0, //0x00005486 subq %r14, %r8 - 0x49, 0x83, 0xc0, 0xfe, //0x00005489 addq $-2, %r8 - 0x4d, 0x89, 0xc6, //0x0000548d movq %r8, %r14 - 0xe9, 0x6a, 0xf4, 0xff, 0xff, //0x00005490 jmp LBB0_902 - 0x90, 0x90, 0x90, //0x00005495 .p2align 2, 0x90 - // // .set L0_0_set_430, LBB0_430-LJTI0_0 - // // .set L0_0_set_429, LBB0_429-LJTI0_0 - // // .set L0_0_set_415, LBB0_415-LJTI0_0 + //0x00003130 LBB0_571 + 0x4c, 0x8d, 0x7a, 0x02, //0x00003130 leaq $2(%rdx), %r15 + 0x49, 0x39, 0xc7, //0x00003134 cmpq %rax, %r15 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00003137 jae LBB0_575 + 0x43, 0x8a, 0x5c, 0x3d, 0x00, //0x0000313d movb (%r13,%r15), %bl + 0x80, 0xfb, 0x0d, //0x00003142 cmpb $13, %bl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00003145 je LBB0_575 + 0x80, 0xfb, 0x20, //0x0000314b cmpb $32, %bl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000314e je LBB0_575 + 0x80, 0xc3, 0xf7, //0x00003154 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00003157 cmpb $1, %bl + 0x0f, 0x87, 0x98, 0x00, 0x00, 0x00, //0x0000315a ja LBB0_588 + //0x00003160 .p2align 4, 0x90 + //0x00003160 LBB0_575 + 0x4c, 0x8d, 0x7a, 0x03, //0x00003160 leaq $3(%rdx), %r15 + 0x49, 0x39, 0xc7, //0x00003164 cmpq %rax, %r15 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00003167 jae LBB0_579 + 0x43, 0x8a, 0x5c, 0x3d, 0x00, //0x0000316d movb (%r13,%r15), %bl + 0x80, 0xfb, 0x0d, //0x00003172 cmpb $13, %bl + 0x0f, 0x84, 0x15, 0x00, 0x00, 0x00, //0x00003175 je LBB0_579 + 0x80, 0xfb, 0x20, //0x0000317b cmpb $32, %bl + 0x0f, 0x84, 0x0c, 0x00, 0x00, 0x00, //0x0000317e je LBB0_579 + 0x80, 0xc3, 0xf7, //0x00003184 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00003187 cmpb $1, %bl + 0x0f, 0x87, 0x68, 0x00, 0x00, 0x00, //0x0000318a ja LBB0_588 + //0x00003190 .p2align 4, 0x90 + //0x00003190 LBB0_579 + 0x48, 0x83, 0xc2, 0x04, //0x00003190 addq $4, %rdx + 0x48, 0x39, 0xd0, //0x00003194 cmpq %rdx, %rax + 0x0f, 0x86, 0xa4, 0x15, 0x00, 0x00, //0x00003197 jbe LBB0_867 + 0x48, 0x39, 0xd0, //0x0000319d cmpq %rdx, %rax + 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x000031a0 je LBB0_585 + 0x4a, 0x8d, 0x34, 0x28, //0x000031a6 leaq (%rax,%r13), %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000031aa .p2align 4, 0x90 + //0x000031b0 LBB0_582 + 0x41, 0x0f, 0xbe, 0x7c, 0x15, 0x00, //0x000031b0 movsbl (%r13,%rdx), %edi + 0x83, 0xff, 0x20, //0x000031b6 cmpl $32, %edi + 0x0f, 0x87, 0x2d, 0x00, 0x00, 0x00, //0x000031b9 ja LBB0_587 + 0x49, 0x0f, 0xa3, 0xfb, //0x000031bf btq %rdi, %r11 + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000031c3 jae LBB0_587 + 0x48, 0x83, 0xc2, 0x01, //0x000031c9 addq $1, %rdx + 0x48, 0x39, 0xd0, //0x000031cd cmpq %rdx, %rax + 0x0f, 0x85, 0xda, 0xff, 0xff, 0xff, //0x000031d0 jne LBB0_582 + 0xe9, 0x0b, 0x00, 0x00, 0x00, //0x000031d6 jmp LBB0_586 + 0x90, 0x90, 0x90, 0x90, 0x90, //0x000031db .p2align 4, 0x90 + //0x000031e0 LBB0_585 + 0x4c, 0x01, 0xea, //0x000031e0 addq %r13, %rdx + 0x48, 0x89, 0xd6, //0x000031e3 movq %rdx, %rsi + //0x000031e6 LBB0_586 + 0x4c, 0x29, 0xee, //0x000031e6 subq %r13, %rsi + 0x48, 0x89, 0xf2, //0x000031e9 movq %rsi, %rdx + //0x000031ec LBB0_587 + 0x49, 0x89, 0xd7, //0x000031ec movq %rdx, %r15 + 0x48, 0x39, 0xc2, //0x000031ef cmpq %rax, %rdx + 0x0f, 0x83, 0x4c, 0x15, 0x00, 0x00, //0x000031f2 jae LBB0_868 + //0x000031f8 LBB0_588 + 0x49, 0x8d, 0x47, 0x01, //0x000031f8 leaq $1(%r15), %rax + 0x49, 0x89, 0x00, //0x000031fc movq %rax, (%r8) + 0x43, 0x0f, 0xbe, 0x7c, 0x3d, 0x00, //0x000031ff movsbl (%r13,%r15), %edi + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003205 movq $-1, %rax + 0x85, 0xff, //0x0000320c testl %edi, %edi + 0x0f, 0x84, 0x55, 0x15, 0x00, 0x00, //0x0000320e je LBB0_874 + 0x49, 0x8b, 0x32, //0x00003214 movq (%r10), %rsi + 0x48, 0x8d, 0x56, 0xff, //0x00003217 leaq $-1(%rsi), %rdx + 0x41, 0x8b, 0x1c, 0xf2, //0x0000321b movl (%r10,%rsi,8), %ebx + 0x48, 0x83, 0xf9, 0xff, //0x0000321f cmpq $-1, %rcx + 0x4c, 0x0f, 0x45, 0xf9, //0x00003223 cmovneq %rcx, %r15 + 0x83, 0xc3, 0xff, //0x00003227 addl $-1, %ebx + 0x83, 0xfb, 0x05, //0x0000322a cmpl $5, %ebx + 0x0f, 0x87, 0x40, 0x00, 0x00, 0x00, //0x0000322d ja LBB0_597 + 0x49, 0x63, 0x0c, 0x9e, //0x00003233 movslq (%r14,%rbx,4), %rcx + 0x4c, 0x01, 0xf1, //0x00003237 addq %r14, %rcx + 0xff, 0xe1, //0x0000323a jmpq *%rcx + //0x0000323c LBB0_591 + 0x83, 0xff, 0x2c, //0x0000323c cmpl $44, %edi + 0x0f, 0x84, 0xe2, 0x04, 0x00, 0x00, //0x0000323f je LBB0_659 + 0x83, 0xff, 0x5d, //0x00003245 cmpl $93, %edi + 0x0f, 0x84, 0xc5, 0x04, 0x00, 0x00, //0x00003248 je LBB0_593 + 0xe9, 0x0f, 0x15, 0x00, 0x00, //0x0000324e jmp LBB0_873 + //0x00003253 LBB0_594 + 0x40, 0x80, 0xff, 0x5d, //0x00003253 cmpb $93, %dil + 0x0f, 0x84, 0xb6, 0x04, 0x00, 0x00, //0x00003257 je LBB0_593 + 0x49, 0xc7, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x00, //0x0000325d movq $1, (%r10,%rsi,8) + 0x83, 0xff, 0x7b, //0x00003265 cmpl $123, %edi + 0x0f, 0x86, 0x11, 0x00, 0x00, 0x00, //0x00003268 jbe LBB0_596 + 0xe9, 0xef, 0x14, 0x00, 0x00, //0x0000326e jmp LBB0_873 + //0x00003273 LBB0_597 + 0x49, 0x89, 0x12, //0x00003273 movq %rdx, (%r10) + 0x83, 0xff, 0x7b, //0x00003276 cmpl $123, %edi + 0x0f, 0x87, 0xe3, 0x14, 0x00, 0x00, //0x00003279 ja LBB0_873 + //0x0000327f LBB0_596 + 0x89, 0xf9, //0x0000327f movl %edi, %ecx + 0x48, 0x8d, 0x15, 0x40, 0x27, 0x00, 0x00, //0x00003281 leaq $10048(%rip), %rdx /* LJTI0_3+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8a, //0x00003288 movslq (%rdx,%rcx,4), %rcx + 0x48, 0x01, 0xd1, //0x0000328c addq %rdx, %rcx + 0xff, 0xe1, //0x0000328f jmpq *%rcx + //0x00003291 LBB0_623 + 0x4d, 0x8b, 0x19, //0x00003291 movq (%r9), %r11 + 0x48, 0x8b, 0x45, 0xc8, //0x00003294 movq $-56(%rbp), %rax + 0x48, 0x8b, 0x38, //0x00003298 movq (%rax), %rdi + 0x48, 0x8d, 0x47, 0xff, //0x0000329b leaq $-1(%rdi), %rax + 0x49, 0x29, 0xc3, //0x0000329f subq %rax, %r11 + 0x0f, 0x84, 0xbb, 0x16, 0x00, 0x00, //0x000032a2 je LBB0_900 + 0x4c, 0x89, 0x7d, 0xb0, //0x000032a8 movq %r15, $-80(%rbp) + 0x4a, 0x8d, 0x0c, 0x2f, //0x000032ac leaq (%rdi,%r13), %rcx + 0x48, 0x83, 0xc1, 0xff, //0x000032b0 addq $-1, %rcx + 0x48, 0x89, 0x4d, 0xd0, //0x000032b4 movq %rcx, $-48(%rbp) + 0x80, 0x39, 0x30, //0x000032b8 cmpb $48, (%rcx) + 0x0f, 0x85, 0x38, 0x00, 0x00, 0x00, //0x000032bb jne LBB0_628 + 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000032c1 movl $1, %r8d + 0x49, 0x83, 0xfb, 0x01, //0x000032c7 cmpq $1, %r11 + 0x0f, 0x84, 0xa6, 0xfd, 0xff, 0xff, //0x000032cb je LBB0_559 + 0x41, 0x8a, 0x4c, 0x3d, 0x00, //0x000032d1 movb (%r13,%rdi), %cl + 0x80, 0xc1, 0xd2, //0x000032d6 addb $-46, %cl + 0x80, 0xf9, 0x37, //0x000032d9 cmpb $55, %cl + 0x0f, 0x87, 0x95, 0xfd, 0xff, 0xff, //0x000032dc ja LBB0_559 + 0x0f, 0xb6, 0xc9, //0x000032e2 movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x000032e5 movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x000032ef btq %rcx, %rdx + 0x0f, 0x83, 0x7e, 0xfd, 0xff, 0xff, //0x000032f3 jae LBB0_559 + //0x000032f9 LBB0_628 + 0x48, 0x89, 0x7d, 0xb8, //0x000032f9 movq %rdi, $-72(%rbp) + 0x49, 0x83, 0xfb, 0x10, //0x000032fd cmpq $16, %r11 + 0x0f, 0x82, 0xe6, 0x0e, 0x00, 0x00, //0x00003301 jb LBB0_798 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003307 movq $-1, %r14 + 0x45, 0x31, 0xc0, //0x0000330e xorl %r8d, %r8d + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00003311 movq $-1, %r15 + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003318 movq $-1, %r9 + 0x4c, 0x89, 0xdb, //0x0000331f movq %r11, %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003322 .p2align 4, 0x90 + //0x00003330 LBB0_630 + 0x48, 0x8b, 0x4d, 0xd0, //0x00003330 movq $-48(%rbp), %rcx + 0xf3, 0x42, 0x0f, 0x6f, 0x14, 0x01, //0x00003334 movdqu (%rcx,%r8), %xmm2 + 0x66, 0x0f, 0x6f, 0xe2, //0x0000333a movdqa %xmm2, %xmm4 + 0x66, 0x41, 0x0f, 0x64, 0xe0, //0x0000333e pcmpgtb %xmm8, %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x00003343 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x64, 0xea, //0x00003347 pcmpgtb %xmm2, %xmm5 + 0x66, 0x0f, 0xdb, 0xec, //0x0000334b pand %xmm4, %xmm5 + 0x66, 0x0f, 0x6f, 0xe2, //0x0000334f movdqa %xmm2, %xmm4 + 0x66, 0x41, 0x0f, 0x74, 0xe1, //0x00003353 pcmpeqb %xmm9, %xmm4 + 0x66, 0x0f, 0x6f, 0xf2, //0x00003358 movdqa %xmm2, %xmm6 + 0x66, 0x41, 0x0f, 0x74, 0xf2, //0x0000335c pcmpeqb %xmm10, %xmm6 + 0x66, 0x0f, 0xeb, 0xf4, //0x00003361 por %xmm4, %xmm6 + 0x66, 0x0f, 0x6f, 0xe2, //0x00003365 movdqa %xmm2, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xe3, //0x00003369 pand %xmm11, %xmm4 + 0x66, 0x41, 0x0f, 0x74, 0xd4, //0x0000336e pcmpeqb %xmm12, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xe5, //0x00003373 pcmpeqb %xmm13, %xmm4 + 0x66, 0x0f, 0xd7, 0xf4, //0x00003378 pmovmskb %xmm4, %esi + 0x66, 0x0f, 0xeb, 0xe2, //0x0000337c por %xmm2, %xmm4 + 0x66, 0x0f, 0xeb, 0xee, //0x00003380 por %xmm6, %xmm5 + 0x66, 0x0f, 0xeb, 0xec, //0x00003384 por %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xfa, //0x00003388 pmovmskb %xmm2, %edi + 0x66, 0x44, 0x0f, 0xd7, 0xe6, //0x0000338c pmovmskb %xmm6, %r12d + 0x66, 0x0f, 0xd7, 0xcd, //0x00003391 pmovmskb %xmm5, %ecx + 0xf7, 0xd1, //0x00003395 notl %ecx + 0x0f, 0xbc, 0xc9, //0x00003397 bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x0000339a cmpl $16, %ecx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000339d je LBB0_632 + 0xba, 0xff, 0xff, 0xff, 0xff, //0x000033a3 movl $-1, %edx + 0xd3, 0xe2, //0x000033a8 shll %cl, %edx + 0xf7, 0xd2, //0x000033aa notl %edx + 0x21, 0xd7, //0x000033ac andl %edx, %edi + 0x21, 0xd6, //0x000033ae andl %edx, %esi + 0x44, 0x21, 0xe2, //0x000033b0 andl %r12d, %edx + 0x41, 0x89, 0xd4, //0x000033b3 movl %edx, %r12d + //0x000033b6 LBB0_632 + 0x44, 0x8d, 0x57, 0xff, //0x000033b6 leal $-1(%rdi), %r10d + 0x41, 0x21, 0xfa, //0x000033ba andl %edi, %r10d + 0x0f, 0x85, 0x19, 0x0d, 0x00, 0x00, //0x000033bd jne LBB0_788 + 0x8d, 0x56, 0xff, //0x000033c3 leal $-1(%rsi), %edx + 0x21, 0xf2, //0x000033c6 andl %esi, %edx + 0x0f, 0x85, 0x67, 0x0c, 0x00, 0x00, //0x000033c8 jne LBB0_786 + 0x41, 0x8d, 0x54, 0x24, 0xff, //0x000033ce leal $-1(%r12), %edx + 0x44, 0x21, 0xe2, //0x000033d3 andl %r12d, %edx + 0x0f, 0x85, 0x59, 0x0c, 0x00, 0x00, //0x000033d6 jne LBB0_786 + 0x85, 0xff, //0x000033dc testl %edi, %edi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000033de je LBB0_638 + 0x0f, 0xbc, 0xff, //0x000033e4 bsfl %edi, %edi + 0x49, 0x83, 0xf9, 0xff, //0x000033e7 cmpq $-1, %r9 + 0x0f, 0x85, 0xf4, 0x0c, 0x00, 0x00, //0x000033eb jne LBB0_789 + 0x4c, 0x01, 0xc7, //0x000033f1 addq %r8, %rdi + 0x49, 0x89, 0xf9, //0x000033f4 movq %rdi, %r9 + //0x000033f7 LBB0_638 + 0x85, 0xf6, //0x000033f7 testl %esi, %esi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000033f9 je LBB0_641 + 0x0f, 0xbc, 0xf6, //0x000033ff bsfl %esi, %esi + 0x49, 0x83, 0xff, 0xff, //0x00003402 cmpq $-1, %r15 + 0x0f, 0x85, 0xe0, 0x0c, 0x00, 0x00, //0x00003406 jne LBB0_790 + 0x4c, 0x01, 0xc6, //0x0000340c addq %r8, %rsi + 0x49, 0x89, 0xf7, //0x0000340f movq %rsi, %r15 + //0x00003412 LBB0_641 + 0x45, 0x85, 0xe4, //0x00003412 testl %r12d, %r12d + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00003415 je LBB0_644 + 0x41, 0x0f, 0xbc, 0xd4, //0x0000341b bsfl %r12d, %edx + 0x49, 0x83, 0xfe, 0xff, //0x0000341f cmpq $-1, %r14 + 0x0f, 0x85, 0xca, 0x0c, 0x00, 0x00, //0x00003423 jne LBB0_791 + 0x4c, 0x01, 0xc2, //0x00003429 addq %r8, %rdx + 0x49, 0x89, 0xd6, //0x0000342c movq %rdx, %r14 + //0x0000342f LBB0_644 + 0x83, 0xf9, 0x10, //0x0000342f cmpl $16, %ecx + 0x0f, 0x85, 0xf1, 0x04, 0x00, 0x00, //0x00003432 jne LBB0_682 + 0x48, 0x83, 0xc3, 0xf0, //0x00003438 addq $-16, %rbx + 0x49, 0x83, 0xc0, 0x10, //0x0000343c addq $16, %r8 + 0x48, 0x83, 0xfb, 0x0f, //0x00003440 cmpq $15, %rbx + 0x0f, 0x87, 0xe6, 0xfe, 0xff, 0xff, //0x00003444 ja LBB0_630 + 0x48, 0x8b, 0x4d, 0xd0, //0x0000344a movq $-48(%rbp), %rcx + 0x4a, 0x8d, 0x34, 0x01, //0x0000344e leaq (%rcx,%r8), %rsi + 0x49, 0x89, 0xf4, //0x00003452 movq %rsi, %r12 + 0x4d, 0x39, 0xc3, //0x00003455 cmpq %r8, %r11 + 0x4c, 0x8d, 0x15, 0xc5, 0x27, 0x00, 0x00, //0x00003458 leaq $10181(%rip), %r10 /* LJTI0_5+0(%rip) */ + 0x0f, 0x84, 0xd9, 0x04, 0x00, 0x00, //0x0000345f je LBB0_684 + //0x00003465 LBB0_647 + 0x4c, 0x8d, 0x24, 0x1e, //0x00003465 leaq (%rsi,%rbx), %r12 + 0x48, 0x8b, 0x4d, 0x98, //0x00003469 movq $-104(%rbp), %rcx + 0x4c, 0x8d, 0x04, 0x31, //0x0000346d leaq (%rcx,%rsi), %r8 + 0x4c, 0x2b, 0x45, 0xb8, //0x00003471 subq $-72(%rbp), %r8 + 0x31, 0xd2, //0x00003475 xorl %edx, %edx + 0xe9, 0x21, 0x00, 0x00, 0x00, //0x00003477 jmp LBB0_651 + //0x0000347c LBB0_648 + 0x49, 0x83, 0xfe, 0xff, //0x0000347c cmpq $-1, %r14 + 0x0f, 0x85, 0x95, 0x0b, 0x00, 0x00, //0x00003480 jne LBB0_785 + 0x4d, 0x8d, 0x34, 0x10, //0x00003486 leaq (%r8,%rdx), %r14 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000348a .p2align 4, 0x90 + //0x00003490 LBB0_650 + 0x48, 0x83, 0xc2, 0x01, //0x00003490 addq $1, %rdx + 0x48, 0x39, 0xd3, //0x00003494 cmpq %rdx, %rbx + 0x0f, 0x84, 0xa1, 0x04, 0x00, 0x00, //0x00003497 je LBB0_684 + //0x0000349d LBB0_651 + 0x0f, 0xbe, 0x3c, 0x16, //0x0000349d movsbl (%rsi,%rdx), %edi + 0x8d, 0x4f, 0xd0, //0x000034a1 leal $-48(%rdi), %ecx + 0x83, 0xf9, 0x0a, //0x000034a4 cmpl $10, %ecx + 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x000034a7 jb LBB0_650 + 0x8d, 0x4f, 0xd5, //0x000034ad leal $-43(%rdi), %ecx + 0x83, 0xf9, 0x1a, //0x000034b0 cmpl $26, %ecx + 0x0f, 0x87, 0x1c, 0x00, 0x00, 0x00, //0x000034b3 ja LBB0_656 + 0x49, 0x63, 0x0c, 0x8a, //0x000034b9 movslq (%r10,%rcx,4), %rcx + 0x4c, 0x01, 0xd1, //0x000034bd addq %r10, %rcx + 0xff, 0xe1, //0x000034c0 jmpq *%rcx + //0x000034c2 LBB0_654 + 0x49, 0x83, 0xf9, 0xff, //0x000034c2 cmpq $-1, %r9 + 0x0f, 0x85, 0x4f, 0x0b, 0x00, 0x00, //0x000034c6 jne LBB0_785 + 0x4d, 0x8d, 0x0c, 0x10, //0x000034cc leaq (%r8,%rdx), %r9 + 0xe9, 0xbb, 0xff, 0xff, 0xff, //0x000034d0 jmp LBB0_650 + //0x000034d5 LBB0_656 + 0x83, 0xff, 0x65, //0x000034d5 cmpl $101, %edi + 0x0f, 0x85, 0x5a, 0x04, 0x00, 0x00, //0x000034d8 jne LBB0_683 + //0x000034de LBB0_657 + 0x49, 0x83, 0xff, 0xff, //0x000034de cmpq $-1, %r15 + 0x0f, 0x85, 0x33, 0x0b, 0x00, 0x00, //0x000034e2 jne LBB0_785 + 0x4d, 0x8d, 0x3c, 0x10, //0x000034e8 leaq (%r8,%rdx), %r15 + 0xe9, 0x9f, 0xff, 0xff, 0xff, //0x000034ec jmp LBB0_650 + //0x000034f1 LBB0_598 + 0x83, 0xff, 0x2c, //0x000034f1 cmpl $44, %edi + 0x0f, 0x85, 0x10, 0x02, 0x00, 0x00, //0x000034f4 jne LBB0_599 + 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x000034fa cmpq $4095, %rsi + 0x0f, 0x8f, 0x11, 0x14, 0x00, 0x00, //0x00003501 jg LBB0_980 + 0x48, 0x8d, 0x46, 0x01, //0x00003507 leaq $1(%rsi), %rax + 0x49, 0x89, 0x02, //0x0000350b movq %rax, (%r10) + 0x49, 0xc7, 0x44, 0xf2, 0x08, 0x03, 0x00, 0x00, 0x00, //0x0000350e movq $3, $8(%r10,%rsi,8) + 0xe9, 0x94, 0xfb, 0xff, 0xff, //0x00003517 jmp LBB0_560 + //0x0000351c LBB0_600 + 0x40, 0x80, 0xff, 0x22, //0x0000351c cmpb $34, %dil + 0x0f, 0x85, 0x3c, 0x12, 0x00, 0x00, //0x00003520 jne LBB0_873 + 0x49, 0xc7, 0x04, 0xf2, 0x04, 0x00, 0x00, 0x00, //0x00003526 movq $4, (%r10,%rsi,8) + 0x4d, 0x8b, 0x00, //0x0000352e movq (%r8), %r8 + 0x49, 0x8b, 0x01, //0x00003531 movq (%r9), %rax + 0x49, 0x89, 0xc6, //0x00003534 movq %rax, %r14 + 0x4d, 0x29, 0xc6, //0x00003537 subq %r8, %r14 + 0x0f, 0x84, 0xef, 0x1f, 0x00, 0x00, //0x0000353a je LBB0_998 + 0x48, 0x89, 0x45, 0xb8, //0x00003540 movq %rax, $-72(%rbp) + 0x4c, 0x89, 0x7d, 0xb0, //0x00003544 movq %r15, $-80(%rbp) + 0x49, 0x83, 0xfe, 0x40, //0x00003548 cmpq $64, %r14 + 0x0f, 0x82, 0x71, 0x0c, 0x00, 0x00, //0x0000354c jb LBB0_796 + 0x4c, 0x89, 0xc1, //0x00003552 movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00003555 notq %rcx + 0x48, 0xc7, 0x45, 0xd0, 0xff, 0xff, 0xff, 0xff, //0x00003558 movq $-1, $-48(%rbp) + 0x4c, 0x89, 0xc0, //0x00003560 movq %r8, %rax + 0x45, 0x31, 0xdb, //0x00003563 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003566 .p2align 4, 0x90 + //0x00003570 LBB0_604 + 0xf3, 0x41, 0x0f, 0x6f, 0x54, 0x05, 0x00, //0x00003570 movdqu (%r13,%rax), %xmm2 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x05, 0x10, //0x00003577 movdqu $16(%r13,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x05, 0x20, //0x0000357e movdqu $32(%r13,%rax), %xmm6 + 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x05, 0x30, //0x00003585 movdqu $48(%r13,%rax), %xmm7 + 0x66, 0x0f, 0x6f, 0xe2, //0x0000358c movdqa %xmm2, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x00003590 pcmpeqb %xmm0, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xfc, //0x00003594 pmovmskb %xmm4, %r15d + 0x66, 0x0f, 0x6f, 0xe5, //0x00003599 movdqa %xmm5, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x0000359d pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xd7, 0xdc, //0x000035a1 pmovmskb %xmm4, %ebx + 0x66, 0x0f, 0x6f, 0xe6, //0x000035a5 movdqa %xmm6, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x000035a9 pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xd7, 0xd4, //0x000035ad pmovmskb %xmm4, %edx + 0x66, 0x0f, 0x6f, 0xe7, //0x000035b1 movdqa %xmm7, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x000035b5 pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xd7, 0xf4, //0x000035b9 pmovmskb %xmm4, %esi + 0x66, 0x0f, 0x74, 0xd1, //0x000035bd pcmpeqb %xmm1, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xe2, //0x000035c1 pmovmskb %xmm2, %r12d + 0x66, 0x0f, 0x74, 0xe9, //0x000035c6 pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x000035ca pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x74, 0xf1, //0x000035ce pcmpeqb %xmm1, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xd6, //0x000035d2 pmovmskb %xmm6, %r10d + 0x66, 0x0f, 0x74, 0xf9, //0x000035d7 pcmpeqb %xmm1, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xcf, //0x000035db pmovmskb %xmm7, %r9d + 0x48, 0xc1, 0xe6, 0x30, //0x000035e0 shlq $48, %rsi + 0x48, 0xc1, 0xe2, 0x20, //0x000035e4 shlq $32, %rdx + 0x48, 0x09, 0xf2, //0x000035e8 orq %rsi, %rdx + 0x48, 0xc1, 0xe3, 0x10, //0x000035eb shlq $16, %rbx + 0x48, 0x09, 0xd3, //0x000035ef orq %rdx, %rbx + 0x49, 0x09, 0xdf, //0x000035f2 orq %rbx, %r15 + 0x49, 0xc1, 0xe1, 0x30, //0x000035f5 shlq $48, %r9 + 0x49, 0xc1, 0xe2, 0x20, //0x000035f9 shlq $32, %r10 + 0x4d, 0x09, 0xca, //0x000035fd orq %r9, %r10 + 0x48, 0xc1, 0xe7, 0x10, //0x00003600 shlq $16, %rdi + 0x4c, 0x09, 0xd7, //0x00003604 orq %r10, %rdi + 0x49, 0x09, 0xfc, //0x00003607 orq %rdi, %r12 + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000360a jne LBB0_613 + 0x4d, 0x85, 0xdb, //0x00003610 testq %r11, %r11 + 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x00003613 jne LBB0_615 + 0x45, 0x31, 0xdb, //0x00003619 xorl %r11d, %r11d + 0x4d, 0x85, 0xff, //0x0000361c testq %r15, %r15 + 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x0000361f jne LBB0_616 + //0x00003625 LBB0_607 + 0x49, 0x83, 0xc6, 0xc0, //0x00003625 addq $-64, %r14 + 0x48, 0x83, 0xc1, 0xc0, //0x00003629 addq $-64, %rcx + 0x48, 0x83, 0xc0, 0x40, //0x0000362d addq $64, %rax + 0x49, 0x83, 0xfe, 0x3f, //0x00003631 cmpq $63, %r14 + 0x0f, 0x87, 0x35, 0xff, 0xff, 0xff, //0x00003635 ja LBB0_604 + 0xe9, 0x35, 0x09, 0x00, 0x00, //0x0000363b jmp LBB0_608 + //0x00003640 LBB0_613 + 0x48, 0x83, 0x7d, 0xd0, 0xff, //0x00003640 cmpq $-1, $-48(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003645 jne LBB0_615 + 0x49, 0x0f, 0xbc, 0xd4, //0x0000364b bsfq %r12, %rdx + 0x48, 0x01, 0xc2, //0x0000364f addq %rax, %rdx + 0x48, 0x89, 0x55, 0xd0, //0x00003652 movq %rdx, $-48(%rbp) + //0x00003656 LBB0_615 + 0x4c, 0x89, 0xda, //0x00003656 movq %r11, %rdx + 0x48, 0xf7, 0xd2, //0x00003659 notq %rdx + 0x4c, 0x21, 0xe2, //0x0000365c andq %r12, %rdx + 0x48, 0x8d, 0x34, 0x12, //0x0000365f leaq (%rdx,%rdx), %rsi + 0x4c, 0x09, 0xde, //0x00003663 orq %r11, %rsi + 0x48, 0x89, 0xf7, //0x00003666 movq %rsi, %rdi + 0x48, 0xf7, 0xd7, //0x00003669 notq %rdi + 0x4c, 0x21, 0xe7, //0x0000366c andq %r12, %rdi + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000366f movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xdf, //0x00003679 andq %rbx, %rdi + 0x45, 0x31, 0xdb, //0x0000367c xorl %r11d, %r11d + 0x48, 0x01, 0xd7, //0x0000367f addq %rdx, %rdi + 0x41, 0x0f, 0x92, 0xc3, //0x00003682 setb %r11b + 0x48, 0x01, 0xff, //0x00003686 addq %rdi, %rdi + 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00003689 movabsq $6148914691236517205, %rdx + 0x48, 0x31, 0xd7, //0x00003693 xorq %rdx, %rdi + 0x48, 0x21, 0xf7, //0x00003696 andq %rsi, %rdi + 0x48, 0xf7, 0xd7, //0x00003699 notq %rdi + 0x49, 0x21, 0xff, //0x0000369c andq %rdi, %r15 + 0x4d, 0x85, 0xff, //0x0000369f testq %r15, %r15 + 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x000036a2 je LBB0_607 + //0x000036a8 LBB0_616 + 0x49, 0x0f, 0xbc, 0xc7, //0x000036a8 bsfq %r15, %rax + 0x48, 0x29, 0xc8, //0x000036ac subq %rcx, %rax + 0x4c, 0x8b, 0x4d, 0xc0, //0x000036af movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x000036b3 movq $-96(%rbp), %r10 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000036b7 movabsq $4294977024, %r11 + 0x4c, 0x8d, 0x35, 0xe8, 0x22, 0x00, 0x00, //0x000036c1 leaq $8936(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x4c, 0x8b, 0x7d, 0xb0, //0x000036c8 movq $-80(%rbp), %r15 + 0x48, 0x85, 0xc0, //0x000036cc testq %rax, %rax + 0x0f, 0x88, 0x4f, 0x12, 0x00, 0x00, //0x000036cf js LBB0_822 + //0x000036d5 LBB0_617 + 0x48, 0x8b, 0x4d, 0xc8, //0x000036d5 movq $-56(%rbp), %rcx + 0x48, 0x89, 0x01, //0x000036d9 movq %rax, (%rcx) + 0x4d, 0x85, 0xc0, //0x000036dc testq %r8, %r8 + 0x0f, 0x8f, 0xcb, 0xf9, 0xff, 0xff, //0x000036df jg LBB0_560 + 0xe9, 0x63, 0x12, 0x00, 0x00, //0x000036e5 jmp LBB0_618 + //0x000036ea LBB0_619 + 0x40, 0x80, 0xff, 0x3a, //0x000036ea cmpb $58, %dil + 0x0f, 0x85, 0x6e, 0x10, 0x00, 0x00, //0x000036ee jne LBB0_873 + 0x49, 0xc7, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x00, //0x000036f4 movq $0, (%r10,%rsi,8) + 0xe9, 0xaf, 0xf9, 0xff, 0xff, //0x000036fc jmp LBB0_560 + //0x00003701 LBB0_621 + 0x83, 0xff, 0x22, //0x00003701 cmpl $34, %edi + 0x0f, 0x84, 0x3f, 0x00, 0x00, 0x00, //0x00003704 je LBB0_663 + //0x0000370a LBB0_599 + 0x83, 0xff, 0x7d, //0x0000370a cmpl $125, %edi + 0x0f, 0x85, 0x4f, 0x10, 0x00, 0x00, //0x0000370d jne LBB0_873 + //0x00003713 LBB0_593 + 0x49, 0x89, 0x12, //0x00003713 movq %rdx, (%r10) + 0x4c, 0x89, 0xf8, //0x00003716 movq %r15, %rax + 0x48, 0x85, 0xd2, //0x00003719 testq %rdx, %rdx + 0x0f, 0x85, 0x9d, 0xf9, 0xff, 0xff, //0x0000371c jne LBB0_562 + 0xe9, 0x42, 0x10, 0x00, 0x00, //0x00003722 jmp LBB0_874 + //0x00003727 LBB0_659 + 0x48, 0x81, 0xfe, 0xff, 0x0f, 0x00, 0x00, //0x00003727 cmpq $4095, %rsi + 0x0f, 0x8f, 0xe4, 0x11, 0x00, 0x00, //0x0000372e jg LBB0_980 + 0x48, 0x8d, 0x46, 0x01, //0x00003734 leaq $1(%rsi), %rax + 0x49, 0x89, 0x02, //0x00003738 movq %rax, (%r10) + 0x49, 0xc7, 0x44, 0xf2, 0x08, 0x00, 0x00, 0x00, 0x00, //0x0000373b movq $0, $8(%r10,%rsi,8) + 0xe9, 0x67, 0xf9, 0xff, 0xff, //0x00003744 jmp LBB0_560 + //0x00003749 LBB0_663 + 0x49, 0xc7, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x00, //0x00003749 movq $2, (%r10,%rsi,8) + 0x4d, 0x8b, 0x00, //0x00003751 movq (%r8), %r8 + 0x49, 0x8b, 0x01, //0x00003754 movq (%r9), %rax + 0x49, 0x89, 0xc6, //0x00003757 movq %rax, %r14 + 0x4d, 0x29, 0xc6, //0x0000375a subq %r8, %r14 + 0x0f, 0x84, 0xcc, 0x1d, 0x00, 0x00, //0x0000375d je LBB0_998 + 0x48, 0x89, 0x45, 0xb8, //0x00003763 movq %rax, $-72(%rbp) + 0x4c, 0x89, 0x7d, 0xb0, //0x00003767 movq %r15, $-80(%rbp) + 0x49, 0x83, 0xfe, 0x40, //0x0000376b cmpq $64, %r14 + 0x0f, 0x82, 0xad, 0x0a, 0x00, 0x00, //0x0000376f jb LBB0_801 + 0x4c, 0x89, 0xc3, //0x00003775 movq %r8, %rbx + 0x48, 0xf7, 0xd3, //0x00003778 notq %rbx + 0x48, 0xc7, 0x45, 0xd0, 0xff, 0xff, 0xff, 0xff, //0x0000377b movq $-1, $-48(%rbp) + 0x4c, 0x89, 0xc0, //0x00003783 movq %r8, %rax + 0x45, 0x31, 0xdb, //0x00003786 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003789 .p2align 4, 0x90 + //0x00003790 LBB0_666 + 0xf3, 0x41, 0x0f, 0x6f, 0x54, 0x05, 0x00, //0x00003790 movdqu (%r13,%rax), %xmm2 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x05, 0x10, //0x00003797 movdqu $16(%r13,%rax), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x05, 0x20, //0x0000379e movdqu $32(%r13,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x05, 0x30, //0x000037a5 movdqu $48(%r13,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xfa, //0x000037ac movdqa %xmm2, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x000037b0 pcmpeqb %xmm0, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xff, //0x000037b4 pmovmskb %xmm7, %r15d + 0x66, 0x0f, 0x6f, 0xfc, //0x000037b9 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x000037bd pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xcf, //0x000037c1 pmovmskb %xmm7, %ecx + 0x66, 0x0f, 0x6f, 0xfd, //0x000037c5 movdqa %xmm5, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x000037c9 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xd7, //0x000037cd pmovmskb %xmm7, %edx + 0x66, 0x0f, 0x6f, 0xfe, //0x000037d1 movdqa %xmm6, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x000037d5 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x000037d9 pmovmskb %xmm7, %esi + 0x66, 0x0f, 0x74, 0xd1, //0x000037dd pcmpeqb %xmm1, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xe2, //0x000037e1 pmovmskb %xmm2, %r12d + 0x66, 0x0f, 0x74, 0xe1, //0x000037e6 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x000037ea pmovmskb %xmm4, %edi + 0x66, 0x0f, 0x74, 0xe9, //0x000037ee pcmpeqb %xmm1, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x000037f2 pmovmskb %xmm5, %r9d + 0x66, 0x0f, 0x74, 0xf1, //0x000037f7 pcmpeqb %xmm1, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xd6, //0x000037fb pmovmskb %xmm6, %r10d + 0x48, 0xc1, 0xe6, 0x30, //0x00003800 shlq $48, %rsi + 0x48, 0xc1, 0xe2, 0x20, //0x00003804 shlq $32, %rdx + 0x48, 0x09, 0xf2, //0x00003808 orq %rsi, %rdx + 0x48, 0xc1, 0xe1, 0x10, //0x0000380b shlq $16, %rcx + 0x48, 0x09, 0xd1, //0x0000380f orq %rdx, %rcx + 0x49, 0x09, 0xcf, //0x00003812 orq %rcx, %r15 + 0x49, 0xc1, 0xe2, 0x30, //0x00003815 shlq $48, %r10 + 0x49, 0xc1, 0xe1, 0x20, //0x00003819 shlq $32, %r9 + 0x4d, 0x09, 0xd1, //0x0000381d orq %r10, %r9 + 0x48, 0xc1, 0xe7, 0x10, //0x00003820 shlq $16, %rdi + 0x4c, 0x09, 0xcf, //0x00003824 orq %r9, %rdi + 0x49, 0x09, 0xfc, //0x00003827 orq %rdi, %r12 + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x0000382a jne LBB0_675 + 0x4d, 0x85, 0xdb, //0x00003830 testq %r11, %r11 + 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x00003833 jne LBB0_677 + 0x45, 0x31, 0xdb, //0x00003839 xorl %r11d, %r11d + 0x4d, 0x85, 0xff, //0x0000383c testq %r15, %r15 + 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x0000383f jne LBB0_678 + //0x00003845 LBB0_669 + 0x49, 0x83, 0xc6, 0xc0, //0x00003845 addq $-64, %r14 + 0x48, 0x83, 0xc3, 0xc0, //0x00003849 addq $-64, %rbx + 0x48, 0x83, 0xc0, 0x40, //0x0000384d addq $64, %rax + 0x49, 0x83, 0xfe, 0x3f, //0x00003851 cmpq $63, %r14 + 0x0f, 0x87, 0x35, 0xff, 0xff, 0xff, //0x00003855 ja LBB0_666 + 0xe9, 0xdd, 0x07, 0x00, 0x00, //0x0000385b jmp LBB0_670 + //0x00003860 LBB0_675 + 0x48, 0x83, 0x7d, 0xd0, 0xff, //0x00003860 cmpq $-1, $-48(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003865 jne LBB0_677 + 0x49, 0x0f, 0xbc, 0xcc, //0x0000386b bsfq %r12, %rcx + 0x48, 0x01, 0xc1, //0x0000386f addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xd0, //0x00003872 movq %rcx, $-48(%rbp) + //0x00003876 LBB0_677 + 0x4c, 0x89, 0xd9, //0x00003876 movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x00003879 notq %rcx + 0x4c, 0x21, 0xe1, //0x0000387c andq %r12, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x0000387f leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xda, //0x00003883 orq %r11, %rdx + 0x48, 0x89, 0xd6, //0x00003886 movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00003889 notq %rsi + 0x4c, 0x21, 0xe6, //0x0000388c andq %r12, %rsi + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000388f movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfe, //0x00003899 andq %rdi, %rsi + 0x45, 0x31, 0xdb, //0x0000389c xorl %r11d, %r11d + 0x48, 0x01, 0xce, //0x0000389f addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc3, //0x000038a2 setb %r11b + 0x48, 0x01, 0xf6, //0x000038a6 addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000038a9 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x000038b3 xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x000038b6 andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x000038b9 notq %rsi + 0x49, 0x21, 0xf7, //0x000038bc andq %rsi, %r15 + 0x4d, 0x85, 0xff, //0x000038bf testq %r15, %r15 + 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x000038c2 je LBB0_669 + //0x000038c8 LBB0_678 + 0x49, 0x0f, 0xbc, 0xc7, //0x000038c8 bsfq %r15, %rax + 0x48, 0x29, 0xd8, //0x000038cc subq %rbx, %rax + 0x4c, 0x8b, 0x4d, 0xc0, //0x000038cf movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x000038d3 movq $-96(%rbp), %r10 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000038d7 movabsq $4294977024, %r11 + 0x4c, 0x8d, 0x35, 0xc8, 0x20, 0x00, 0x00, //0x000038e1 leaq $8392(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x4c, 0x8b, 0x7d, 0xb0, //0x000038e8 movq $-80(%rbp), %r15 + 0x48, 0x85, 0xc0, //0x000038ec testq %rax, %rax + 0x0f, 0x88, 0x2f, 0x10, 0x00, 0x00, //0x000038ef js LBB0_822 + //0x000038f5 LBB0_679 + 0x48, 0x8b, 0x4d, 0xc8, //0x000038f5 movq $-56(%rbp), %rcx + 0x48, 0x89, 0x01, //0x000038f9 movq %rax, (%rcx) + 0x4d, 0x85, 0xc0, //0x000038fc testq %r8, %r8 + 0x0f, 0x8e, 0x48, 0x10, 0x00, 0x00, //0x000038ff jle LBB0_618 + 0x49, 0x8b, 0x02, //0x00003905 movq (%r10), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00003908 cmpq $4095, %rax + 0x0f, 0x8f, 0x04, 0x10, 0x00, 0x00, //0x0000390e jg LBB0_980 + 0x48, 0x8d, 0x48, 0x01, //0x00003914 leaq $1(%rax), %rcx + 0x49, 0x89, 0x0a, //0x00003918 movq %rcx, (%r10) + 0x49, 0xc7, 0x44, 0xc2, 0x08, 0x04, 0x00, 0x00, 0x00, //0x0000391b movq $4, $8(%r10,%rax,8) + 0xe9, 0x87, 0xf7, 0xff, 0xff, //0x00003924 jmp LBB0_560 + //0x00003929 LBB0_682 + 0x41, 0x89, 0xcc, //0x00003929 movl %ecx, %r12d + 0x4c, 0x03, 0x65, 0xd0, //0x0000392c addq $-48(%rbp), %r12 + 0x4d, 0x01, 0xc4, //0x00003930 addq %r8, %r12 + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x00003933 jmp LBB0_684 + //0x00003938 LBB0_683 + 0x48, 0x01, 0xd6, //0x00003938 addq %rdx, %rsi + 0x49, 0x89, 0xf4, //0x0000393b movq %rsi, %r12 + //0x0000393e LBB0_684 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000393e movq $-1, %r8 + 0x4d, 0x85, 0xc9, //0x00003945 testq %r9, %r9 + 0x0f, 0x84, 0x93, 0x1a, 0x00, 0x00, //0x00003948 je LBB0_973 + 0x4d, 0x85, 0xf6, //0x0000394e testq %r14, %r14 + 0x48, 0x8b, 0x7d, 0xb8, //0x00003951 movq $-72(%rbp), %rdi + 0x0f, 0x84, 0x0f, 0x10, 0x00, 0x00, //0x00003955 je LBB0_901 + 0x4d, 0x85, 0xff, //0x0000395b testq %r15, %r15 + 0x0f, 0x84, 0x06, 0x10, 0x00, 0x00, //0x0000395e je LBB0_901 + 0x4c, 0x2b, 0x65, 0xd0, //0x00003964 subq $-48(%rbp), %r12 + 0x49, 0x8d, 0x4c, 0x24, 0xff, //0x00003968 leaq $-1(%r12), %rcx + 0x49, 0x39, 0xc9, //0x0000396d cmpq %rcx, %r9 + 0x0f, 0x84, 0xf2, 0xf6, 0xff, 0xff, //0x00003970 je LBB0_557 + 0x49, 0x39, 0xce, //0x00003976 cmpq %rcx, %r14 + 0x0f, 0x84, 0xe9, 0xf6, 0xff, 0xff, //0x00003979 je LBB0_557 + 0x49, 0x39, 0xcf, //0x0000397f cmpq %rcx, %r15 + 0x0f, 0x84, 0xe0, 0xf6, 0xff, 0xff, //0x00003982 je LBB0_557 + 0x4d, 0x85, 0xf6, //0x00003988 testq %r14, %r14 + 0x0f, 0x8e, 0x18, 0x00, 0x00, 0x00, //0x0000398b jle LBB0_693 + 0x49, 0x8d, 0x4e, 0xff, //0x00003991 leaq $-1(%r14), %rcx + 0x49, 0x39, 0xcf, //0x00003995 cmpq %rcx, %r15 + 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x00003998 je LBB0_693 + 0x49, 0xf7, 0xd6, //0x0000399e notq %r14 + 0x4d, 0x89, 0xf0, //0x000039a1 movq %r14, %r8 + 0xe9, 0xc5, 0xf6, 0xff, 0xff, //0x000039a4 jmp LBB0_558 + //0x000039a9 LBB0_693 + 0x4c, 0x89, 0xc9, //0x000039a9 movq %r9, %rcx + 0x4c, 0x09, 0xf9, //0x000039ac orq %r15, %rcx + 0x0f, 0x99, 0xc1, //0x000039af setns %cl + 0x0f, 0x88, 0xe3, 0x04, 0x00, 0x00, //0x000039b2 js LBB0_766 + 0x4d, 0x39, 0xf9, //0x000039b8 cmpq %r15, %r9 + 0x0f, 0x8c, 0xda, 0x04, 0x00, 0x00, //0x000039bb jl LBB0_766 + 0x49, 0xf7, 0xd1, //0x000039c1 notq %r9 + 0x4d, 0x89, 0xc8, //0x000039c4 movq %r9, %r8 + 0xe9, 0xa2, 0xf6, 0xff, 0xff, //0x000039c7 jmp LBB0_558 + //0x000039cc LBB0_696 + 0x48, 0x8b, 0x45, 0xc8, //0x000039cc movq $-56(%rbp), %rax + 0x4c, 0x8b, 0x00, //0x000039d0 movq (%rax), %r8 + 0x49, 0x8b, 0x01, //0x000039d3 movq (%r9), %rax + 0x49, 0x89, 0xc6, //0x000039d6 movq %rax, %r14 + 0x4d, 0x29, 0xc6, //0x000039d9 subq %r8, %r14 + 0x0f, 0x84, 0x4d, 0x1b, 0x00, 0x00, //0x000039dc je LBB0_998 + 0x48, 0x89, 0x45, 0xb8, //0x000039e2 movq %rax, $-72(%rbp) + 0x4c, 0x89, 0x7d, 0xb0, //0x000039e6 movq %r15, $-80(%rbp) + 0x49, 0x83, 0xfe, 0x40, //0x000039ea cmpq $64, %r14 + 0x0f, 0x82, 0x58, 0x08, 0x00, 0x00, //0x000039ee jb LBB0_803 + 0x4c, 0x89, 0xc3, //0x000039f4 movq %r8, %rbx + 0x48, 0xf7, 0xd3, //0x000039f7 notq %rbx + 0x48, 0xc7, 0x45, 0xd0, 0xff, 0xff, 0xff, 0xff, //0x000039fa movq $-1, $-48(%rbp) + 0x4c, 0x89, 0xc0, //0x00003a02 movq %r8, %rax + 0x45, 0x31, 0xdb, //0x00003a05 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003a08 .p2align 4, 0x90 + //0x00003a10 LBB0_699 + 0xf3, 0x41, 0x0f, 0x6f, 0x54, 0x05, 0x00, //0x00003a10 movdqu (%r13,%rax), %xmm2 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x05, 0x10, //0x00003a17 movdqu $16(%r13,%rax), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x05, 0x20, //0x00003a1e movdqu $32(%r13,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x05, 0x30, //0x00003a25 movdqu $48(%r13,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xfa, //0x00003a2c movdqa %xmm2, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00003a30 pcmpeqb %xmm0, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xff, //0x00003a34 pmovmskb %xmm7, %r15d + 0x66, 0x0f, 0x6f, 0xfc, //0x00003a39 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00003a3d pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xcf, //0x00003a41 pmovmskb %xmm7, %ecx + 0x66, 0x0f, 0x6f, 0xfd, //0x00003a45 movdqa %xmm5, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00003a49 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xd7, //0x00003a4d pmovmskb %xmm7, %edx + 0x66, 0x0f, 0x6f, 0xfe, //0x00003a51 movdqa %xmm6, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00003a55 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x00003a59 pmovmskb %xmm7, %esi + 0x66, 0x0f, 0x74, 0xd1, //0x00003a5d pcmpeqb %xmm1, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xe2, //0x00003a61 pmovmskb %xmm2, %r12d + 0x66, 0x0f, 0x74, 0xe1, //0x00003a66 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00003a6a pmovmskb %xmm4, %edi + 0x66, 0x0f, 0x74, 0xe9, //0x00003a6e pcmpeqb %xmm1, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x00003a72 pmovmskb %xmm5, %r9d + 0x66, 0x0f, 0x74, 0xf1, //0x00003a77 pcmpeqb %xmm1, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xd6, //0x00003a7b pmovmskb %xmm6, %r10d + 0x48, 0xc1, 0xe6, 0x30, //0x00003a80 shlq $48, %rsi + 0x48, 0xc1, 0xe2, 0x20, //0x00003a84 shlq $32, %rdx + 0x48, 0x09, 0xf2, //0x00003a88 orq %rsi, %rdx + 0x48, 0xc1, 0xe1, 0x10, //0x00003a8b shlq $16, %rcx + 0x48, 0x09, 0xd1, //0x00003a8f orq %rdx, %rcx + 0x49, 0x09, 0xcf, //0x00003a92 orq %rcx, %r15 + 0x49, 0xc1, 0xe2, 0x30, //0x00003a95 shlq $48, %r10 + 0x49, 0xc1, 0xe1, 0x20, //0x00003a99 shlq $32, %r9 + 0x4d, 0x09, 0xd1, //0x00003a9d orq %r10, %r9 + 0x48, 0xc1, 0xe7, 0x10, //0x00003aa0 shlq $16, %rdi + 0x4c, 0x09, 0xcf, //0x00003aa4 orq %r9, %rdi + 0x49, 0x09, 0xfc, //0x00003aa7 orq %rdi, %r12 + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x00003aaa jne LBB0_708 + 0x4d, 0x85, 0xdb, //0x00003ab0 testq %r11, %r11 + 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x00003ab3 jne LBB0_710 + 0x45, 0x31, 0xdb, //0x00003ab9 xorl %r11d, %r11d + 0x4d, 0x85, 0xff, //0x00003abc testq %r15, %r15 + 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x00003abf jne LBB0_711 + //0x00003ac5 LBB0_702 + 0x49, 0x83, 0xc6, 0xc0, //0x00003ac5 addq $-64, %r14 + 0x48, 0x83, 0xc3, 0xc0, //0x00003ac9 addq $-64, %rbx + 0x48, 0x83, 0xc0, 0x40, //0x00003acd addq $64, %rax + 0x49, 0x83, 0xfe, 0x3f, //0x00003ad1 cmpq $63, %r14 + 0x0f, 0x87, 0x35, 0xff, 0xff, 0xff, //0x00003ad5 ja LBB0_699 + 0xe9, 0x2c, 0x06, 0x00, 0x00, //0x00003adb jmp LBB0_703 + //0x00003ae0 LBB0_708 + 0x48, 0x83, 0x7d, 0xd0, 0xff, //0x00003ae0 cmpq $-1, $-48(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003ae5 jne LBB0_710 + 0x49, 0x0f, 0xbc, 0xcc, //0x00003aeb bsfq %r12, %rcx + 0x48, 0x01, 0xc1, //0x00003aef addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xd0, //0x00003af2 movq %rcx, $-48(%rbp) + //0x00003af6 LBB0_710 + 0x4c, 0x89, 0xd9, //0x00003af6 movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x00003af9 notq %rcx + 0x4c, 0x21, 0xe1, //0x00003afc andq %r12, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x00003aff leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xda, //0x00003b03 orq %r11, %rdx + 0x48, 0x89, 0xd6, //0x00003b06 movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00003b09 notq %rsi + 0x4c, 0x21, 0xe6, //0x00003b0c andq %r12, %rsi + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003b0f movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfe, //0x00003b19 andq %rdi, %rsi + 0x45, 0x31, 0xdb, //0x00003b1c xorl %r11d, %r11d + 0x48, 0x01, 0xce, //0x00003b1f addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc3, //0x00003b22 setb %r11b + 0x48, 0x01, 0xf6, //0x00003b26 addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00003b29 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x00003b33 xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00003b36 andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00003b39 notq %rsi + 0x49, 0x21, 0xf7, //0x00003b3c andq %rsi, %r15 + 0x4d, 0x85, 0xff, //0x00003b3f testq %r15, %r15 + 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00003b42 je LBB0_702 + //0x00003b48 LBB0_711 + 0x49, 0x0f, 0xbc, 0xc7, //0x00003b48 bsfq %r15, %rax + 0x48, 0x29, 0xd8, //0x00003b4c subq %rbx, %rax + //0x00003b4f LBB0_712 + 0x4c, 0x8b, 0x4d, 0xc0, //0x00003b4f movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x00003b53 movq $-96(%rbp), %r10 + 0x4c, 0x8b, 0x7d, 0xb0, //0x00003b57 movq $-80(%rbp), %r15 + 0x48, 0x85, 0xc0, //0x00003b5b testq %rax, %rax + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003b5e movabsq $4294977024, %r11 + 0x4c, 0x8d, 0x35, 0x41, 0x1e, 0x00, 0x00, //0x00003b68 leaq $7745(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x0f, 0x89, 0x60, 0xfb, 0xff, 0xff, //0x00003b6f jns LBB0_617 + 0xe9, 0xaa, 0x0d, 0x00, 0x00, //0x00003b75 jmp LBB0_822 + //0x00003b7a LBB0_713 + 0x49, 0x8b, 0x39, //0x00003b7a movq (%r9), %rdi + 0x48, 0x8b, 0x45, 0xc8, //0x00003b7d movq $-56(%rbp), %rax + 0x48, 0x8b, 0x00, //0x00003b81 movq (%rax), %rax + 0x48, 0x29, 0xc7, //0x00003b84 subq %rax, %rdi + 0x0f, 0x84, 0x7e, 0x18, 0x00, 0x00, //0x00003b87 je LBB0_977 + 0x4c, 0x89, 0x7d, 0xb0, //0x00003b8d movq %r15, $-80(%rbp) + 0x4e, 0x8d, 0x14, 0x28, //0x00003b91 leaq (%rax,%r13), %r10 + 0x41, 0x80, 0x3a, 0x30, //0x00003b95 cmpb $48, (%r10) + 0x0f, 0x85, 0x37, 0x00, 0x00, 0x00, //0x00003b99 jne LBB0_718 + 0x41, 0xbf, 0x01, 0x00, 0x00, 0x00, //0x00003b9f movl $1, %r15d + 0x48, 0x83, 0xff, 0x01, //0x00003ba5 cmpq $1, %rdi + 0x0f, 0x84, 0x91, 0x03, 0x00, 0x00, //0x00003ba9 je LBB0_780 + 0x41, 0x8a, 0x4a, 0x01, //0x00003baf movb $1(%r10), %cl + 0x80, 0xc1, 0xd2, //0x00003bb3 addb $-46, %cl + 0x80, 0xf9, 0x37, //0x00003bb6 cmpb $55, %cl + 0x0f, 0x87, 0x81, 0x03, 0x00, 0x00, //0x00003bb9 ja LBB0_780 + 0x0f, 0xb6, 0xc9, //0x00003bbf movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00003bc2 movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x00003bcc btq %rcx, %rdx + 0x0f, 0x83, 0x6a, 0x03, 0x00, 0x00, //0x00003bd0 jae LBB0_780 + //0x00003bd6 LBB0_718 + 0x48, 0x83, 0xff, 0x10, //0x00003bd6 cmpq $16, %rdi + 0x0f, 0x82, 0x8a, 0x06, 0x00, 0x00, //0x00003bda jb LBB0_804 + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003be0 movq $-1, %r9 + 0x45, 0x31, 0xff, //0x00003be7 xorl %r15d, %r15d + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003bea movq $-1, %r14 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003bf1 movq $-1, %r8 + 0x49, 0x89, 0xfb, //0x00003bf8 movq %rdi, %r11 + //0x00003bfb LBB0_720 + 0xf3, 0x43, 0x0f, 0x6f, 0x14, 0x3a, //0x00003bfb movdqu (%r10,%r15), %xmm2 + 0x66, 0x0f, 0x6f, 0xe2, //0x00003c01 movdqa %xmm2, %xmm4 + 0x66, 0x41, 0x0f, 0x64, 0xe0, //0x00003c05 pcmpgtb %xmm8, %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x00003c0a movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x64, 0xea, //0x00003c0e pcmpgtb %xmm2, %xmm5 + 0x66, 0x0f, 0xdb, 0xec, //0x00003c12 pand %xmm4, %xmm5 + 0x66, 0x0f, 0x6f, 0xe2, //0x00003c16 movdqa %xmm2, %xmm4 + 0x66, 0x41, 0x0f, 0x74, 0xe1, //0x00003c1a pcmpeqb %xmm9, %xmm4 + 0x66, 0x0f, 0x6f, 0xf2, //0x00003c1f movdqa %xmm2, %xmm6 + 0x66, 0x41, 0x0f, 0x74, 0xf2, //0x00003c23 pcmpeqb %xmm10, %xmm6 + 0x66, 0x0f, 0xeb, 0xf4, //0x00003c28 por %xmm4, %xmm6 + 0x66, 0x0f, 0x6f, 0xe2, //0x00003c2c movdqa %xmm2, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xe3, //0x00003c30 pand %xmm11, %xmm4 + 0x66, 0x41, 0x0f, 0x74, 0xd4, //0x00003c35 pcmpeqb %xmm12, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xe5, //0x00003c3a pcmpeqb %xmm13, %xmm4 + 0x66, 0x0f, 0xd7, 0xd4, //0x00003c3f pmovmskb %xmm4, %edx + 0x66, 0x0f, 0xeb, 0xe2, //0x00003c43 por %xmm2, %xmm4 + 0x66, 0x0f, 0xeb, 0xee, //0x00003c47 por %xmm6, %xmm5 + 0x66, 0x0f, 0xeb, 0xec, //0x00003c4b por %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xda, //0x00003c4f pmovmskb %xmm2, %ebx + 0x66, 0x44, 0x0f, 0xd7, 0xe6, //0x00003c53 pmovmskb %xmm6, %r12d + 0x66, 0x0f, 0xd7, 0xcd, //0x00003c58 pmovmskb %xmm5, %ecx + 0xf7, 0xd1, //0x00003c5c notl %ecx + 0x0f, 0xbc, 0xc9, //0x00003c5e bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x00003c61 cmpl $16, %ecx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00003c64 je LBB0_722 + 0xbe, 0xff, 0xff, 0xff, 0xff, //0x00003c6a movl $-1, %esi + 0xd3, 0xe6, //0x00003c6f shll %cl, %esi + 0xf7, 0xd6, //0x00003c71 notl %esi + 0x21, 0xf3, //0x00003c73 andl %esi, %ebx + 0x21, 0xf2, //0x00003c75 andl %esi, %edx + 0x44, 0x21, 0xe6, //0x00003c77 andl %r12d, %esi + 0x41, 0x89, 0xf4, //0x00003c7a movl %esi, %r12d + //0x00003c7d LBB0_722 + 0x8d, 0x73, 0xff, //0x00003c7d leal $-1(%rbx), %esi + 0x21, 0xde, //0x00003c80 andl %ebx, %esi + 0x0f, 0x85, 0x7c, 0x04, 0x00, 0x00, //0x00003c82 jne LBB0_793 + 0x8d, 0x72, 0xff, //0x00003c88 leal $-1(%rdx), %esi + 0x21, 0xd6, //0x00003c8b andl %edx, %esi + 0x0f, 0x85, 0x71, 0x04, 0x00, 0x00, //0x00003c8d jne LBB0_793 + 0x41, 0x8d, 0x74, 0x24, 0xff, //0x00003c93 leal $-1(%r12), %esi + 0x44, 0x21, 0xe6, //0x00003c98 andl %r12d, %esi + 0x0f, 0x85, 0x63, 0x04, 0x00, 0x00, //0x00003c9b jne LBB0_793 + 0x85, 0xdb, //0x00003ca1 testl %ebx, %ebx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00003ca3 je LBB0_728 + 0x0f, 0xbc, 0xdb, //0x00003ca9 bsfl %ebx, %ebx + 0x49, 0x83, 0xf8, 0xff, //0x00003cac cmpq $-1, %r8 + 0x0f, 0x85, 0x5f, 0x05, 0x00, 0x00, //0x00003cb0 jne LBB0_799 + 0x4c, 0x01, 0xfb, //0x00003cb6 addq %r15, %rbx + 0x49, 0x89, 0xd8, //0x00003cb9 movq %rbx, %r8 + //0x00003cbc LBB0_728 + 0x85, 0xd2, //0x00003cbc testl %edx, %edx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00003cbe je LBB0_731 + 0x0f, 0xbc, 0xd2, //0x00003cc4 bsfl %edx, %edx + 0x49, 0x83, 0xfe, 0xff, //0x00003cc7 cmpq $-1, %r14 + 0x0f, 0x85, 0xeb, 0x04, 0x00, 0x00, //0x00003ccb jne LBB0_795 + 0x4c, 0x01, 0xfa, //0x00003cd1 addq %r15, %rdx + 0x49, 0x89, 0xd6, //0x00003cd4 movq %rdx, %r14 + //0x00003cd7 LBB0_731 + 0x45, 0x85, 0xe4, //0x00003cd7 testl %r12d, %r12d + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00003cda je LBB0_734 + 0x41, 0x0f, 0xbc, 0xd4, //0x00003ce0 bsfl %r12d, %edx + 0x49, 0x83, 0xf9, 0xff, //0x00003ce4 cmpq $-1, %r9 + 0x0f, 0x85, 0xce, 0x04, 0x00, 0x00, //0x00003ce8 jne LBB0_795 + 0x4c, 0x01, 0xfa, //0x00003cee addq %r15, %rdx + 0x49, 0x89, 0xd1, //0x00003cf1 movq %rdx, %r9 + //0x00003cf4 LBB0_734 + 0x83, 0xf9, 0x10, //0x00003cf4 cmpl $16, %ecx + 0x0f, 0x85, 0xba, 0x01, 0x00, 0x00, //0x00003cf7 jne LBB0_767 + 0x49, 0x83, 0xc3, 0xf0, //0x00003cfd addq $-16, %r11 + 0x49, 0x83, 0xc7, 0x10, //0x00003d01 addq $16, %r15 + 0x49, 0x83, 0xfb, 0x0f, //0x00003d05 cmpq $15, %r11 + 0x0f, 0x87, 0xec, 0xfe, 0xff, 0xff, //0x00003d09 ja LBB0_720 + 0x4b, 0x8d, 0x34, 0x3a, //0x00003d0f leaq (%r10,%r15), %rsi + 0x49, 0x89, 0xf4, //0x00003d13 movq %rsi, %r12 + 0x4c, 0x39, 0xff, //0x00003d16 cmpq %r15, %rdi + 0x0f, 0x84, 0xac, 0x01, 0x00, 0x00, //0x00003d19 je LBB0_769 + //0x00003d1f LBB0_737 + 0x4e, 0x8d, 0x24, 0x1e, //0x00003d1f leaq (%rsi,%r11), %r12 + 0x49, 0x89, 0xf7, //0x00003d23 movq %rsi, %r15 + 0x4d, 0x29, 0xd7, //0x00003d26 subq %r10, %r15 + 0x31, 0xc9, //0x00003d29 xorl %ecx, %ecx + 0xe9, 0x1d, 0x00, 0x00, 0x00, //0x00003d2b jmp LBB0_741 + //0x00003d30 LBB0_738 + 0x49, 0x83, 0xf9, 0xff, //0x00003d30 cmpq $-1, %r9 + 0x0f, 0x85, 0x6f, 0x04, 0x00, 0x00, //0x00003d34 jne LBB0_794 + 0x4d, 0x8d, 0x0c, 0x0f, //0x00003d3a leaq (%r15,%rcx), %r9 + 0x90, 0x90, //0x00003d3e .p2align 4, 0x90 + //0x00003d40 LBB0_740 + 0x48, 0x83, 0xc1, 0x01, //0x00003d40 addq $1, %rcx + 0x49, 0x39, 0xcb, //0x00003d44 cmpq %rcx, %r11 + 0x0f, 0x84, 0x7e, 0x01, 0x00, 0x00, //0x00003d47 je LBB0_769 + //0x00003d4d LBB0_741 + 0x0f, 0xbe, 0x14, 0x0e, //0x00003d4d movsbl (%rsi,%rcx), %edx + 0x8d, 0x5a, 0xd0, //0x00003d51 leal $-48(%rdx), %ebx + 0x83, 0xfb, 0x0a, //0x00003d54 cmpl $10, %ebx + 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00003d57 jb LBB0_740 + 0x8d, 0x5a, 0xd5, //0x00003d5d leal $-43(%rdx), %ebx + 0x83, 0xfb, 0x1a, //0x00003d60 cmpl $26, %ebx + 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00003d63 ja LBB0_746 + 0x48, 0x8d, 0x3d, 0x48, 0x1e, 0x00, 0x00, //0x00003d69 leaq $7752(%rip), %rdi /* LJTI0_4+0(%rip) */ + 0x48, 0x63, 0x14, 0x9f, //0x00003d70 movslq (%rdi,%rbx,4), %rdx + 0x48, 0x01, 0xfa, //0x00003d74 addq %rdi, %rdx + 0xff, 0xe2, //0x00003d77 jmpq *%rdx + //0x00003d79 LBB0_744 + 0x49, 0x83, 0xf8, 0xff, //0x00003d79 cmpq $-1, %r8 + 0x0f, 0x85, 0x26, 0x04, 0x00, 0x00, //0x00003d7d jne LBB0_794 + 0x4d, 0x8d, 0x04, 0x0f, //0x00003d83 leaq (%r15,%rcx), %r8 + 0xe9, 0xb4, 0xff, 0xff, 0xff, //0x00003d87 jmp LBB0_740 + //0x00003d8c LBB0_746 + 0x83, 0xfa, 0x65, //0x00003d8c cmpl $101, %edx + 0x0f, 0x85, 0x30, 0x01, 0x00, 0x00, //0x00003d8f jne LBB0_768 + //0x00003d95 LBB0_747 + 0x49, 0x83, 0xfe, 0xff, //0x00003d95 cmpq $-1, %r14 + 0x0f, 0x85, 0x0a, 0x04, 0x00, 0x00, //0x00003d99 jne LBB0_794 + 0x4d, 0x8d, 0x34, 0x0f, //0x00003d9f leaq (%r15,%rcx), %r14 + 0xe9, 0x98, 0xff, 0xff, 0xff, //0x00003da3 jmp LBB0_740 + //0x00003da8 LBB0_749 + 0x49, 0x8b, 0x02, //0x00003da8 movq (%r10), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00003dab cmpq $4095, %rax + 0x0f, 0x8f, 0x61, 0x0b, 0x00, 0x00, //0x00003db1 jg LBB0_980 + 0x48, 0x8d, 0x48, 0x01, //0x00003db7 leaq $1(%rax), %rcx + 0x49, 0x89, 0x0a, //0x00003dbb movq %rcx, (%r10) + 0x49, 0xc7, 0x44, 0xc2, 0x08, 0x05, 0x00, 0x00, 0x00, //0x00003dbe movq $5, $8(%r10,%rax,8) + 0xe9, 0xe4, 0xf2, 0xff, 0xff, //0x00003dc7 jmp LBB0_560 + //0x00003dcc LBB0_751 + 0x48, 0x8b, 0x7d, 0xc8, //0x00003dcc movq $-56(%rbp), %rdi + 0x48, 0x8b, 0x0f, //0x00003dd0 movq (%rdi), %rcx + 0x49, 0x8b, 0x11, //0x00003dd3 movq (%r9), %rdx + 0x48, 0x8d, 0x72, 0xfc, //0x00003dd6 leaq $-4(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00003dda cmpq %rsi, %rcx + 0x0f, 0x87, 0xa0, 0x15, 0x00, 0x00, //0x00003ddd ja LBB0_979 + 0x41, 0x8b, 0x54, 0x0d, 0x00, //0x00003de3 movl (%r13,%rcx), %edx + 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x00003de8 cmpl $1702063201, %edx + 0x0f, 0x85, 0x30, 0x16, 0x00, 0x00, //0x00003dee jne LBB0_981 + 0x48, 0x8d, 0x41, 0x04, //0x00003df4 leaq $4(%rcx), %rax + 0x48, 0x89, 0x07, //0x00003df8 movq %rax, (%rdi) + 0x48, 0x85, 0xc9, //0x00003dfb testq %rcx, %rcx + 0x0f, 0x8f, 0xac, 0xf2, 0xff, 0xff, //0x00003dfe jg LBB0_560 + 0xe9, 0x11, 0x17, 0x00, 0x00, //0x00003e04 jmp LBB0_754 + //0x00003e09 LBB0_755 + 0x48, 0x8b, 0x7d, 0xc8, //0x00003e09 movq $-56(%rbp), %rdi + 0x48, 0x8b, 0x0f, //0x00003e0d movq (%rdi), %rcx + 0x49, 0x8b, 0x11, //0x00003e10 movq (%r9), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x00003e13 leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00003e17 cmpq %rsi, %rcx + 0x0f, 0x87, 0x63, 0x15, 0x00, 0x00, //0x00003e1a ja LBB0_979 + 0x48, 0x8d, 0x41, 0xff, //0x00003e20 leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0d, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x00003e24 cmpl $1819047278, $-1(%r13,%rcx) + 0x0f, 0x84, 0x2f, 0x00, 0x00, 0x00, //0x00003e2d je LBB0_763 + 0xe9, 0x45, 0x16, 0x00, 0x00, //0x00003e33 jmp LBB0_757 + //0x00003e38 LBB0_761 + 0x48, 0x8b, 0x7d, 0xc8, //0x00003e38 movq $-56(%rbp), %rdi + 0x48, 0x8b, 0x0f, //0x00003e3c movq (%rdi), %rcx + 0x49, 0x8b, 0x11, //0x00003e3f movq (%r9), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x00003e42 leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00003e46 cmpq %rsi, %rcx + 0x0f, 0x87, 0x34, 0x15, 0x00, 0x00, //0x00003e49 ja LBB0_979 + 0x48, 0x8d, 0x41, 0xff, //0x00003e4f leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0d, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00003e53 cmpl $1702195828, $-1(%r13,%rcx) + 0x0f, 0x85, 0x64, 0x16, 0x00, 0x00, //0x00003e5c jne LBB0_987 + //0x00003e62 LBB0_763 + 0x48, 0x8d, 0x51, 0x03, //0x00003e62 leaq $3(%rcx), %rdx + 0x48, 0x89, 0x17, //0x00003e66 movq %rdx, (%rdi) + 0x48, 0x85, 0xc9, //0x00003e69 testq %rcx, %rcx + 0x0f, 0x8f, 0x3e, 0xf2, 0xff, 0xff, //0x00003e6c jg LBB0_560 + 0xe9, 0xf2, 0x08, 0x00, 0x00, //0x00003e72 jmp LBB0_874 + //0x00003e77 LBB0_764 + 0x49, 0x8b, 0x02, //0x00003e77 movq (%r10), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00003e7a cmpq $4095, %rax + 0x0f, 0x8f, 0x92, 0x0a, 0x00, 0x00, //0x00003e80 jg LBB0_980 + 0x48, 0x8d, 0x48, 0x01, //0x00003e86 leaq $1(%rax), %rcx + 0x49, 0x89, 0x0a, //0x00003e8a movq %rcx, (%r10) + 0x49, 0xc7, 0x44, 0xc2, 0x08, 0x06, 0x00, 0x00, 0x00, //0x00003e8d movq $6, $8(%r10,%rax,8) + 0xe9, 0x15, 0xf2, 0xff, 0xff, //0x00003e96 jmp LBB0_560 + //0x00003e9b LBB0_766 + 0x49, 0x8d, 0x57, 0xff, //0x00003e9b leaq $-1(%r15), %rdx + 0x49, 0x39, 0xd1, //0x00003e9f cmpq %rdx, %r9 + 0x49, 0xf7, 0xd7, //0x00003ea2 notq %r15 + 0x4d, 0x0f, 0x45, 0xfc, //0x00003ea5 cmovneq %r12, %r15 + 0x84, 0xc9, //0x00003ea9 testb %cl, %cl + 0x4d, 0x0f, 0x44, 0xfc, //0x00003eab cmoveq %r12, %r15 + 0x4d, 0x89, 0xf8, //0x00003eaf movq %r15, %r8 + 0xe9, 0xb7, 0xf1, 0xff, 0xff, //0x00003eb2 jmp LBB0_558 + //0x00003eb7 LBB0_767 + 0x41, 0x89, 0xcc, //0x00003eb7 movl %ecx, %r12d + 0x4d, 0x01, 0xd4, //0x00003eba addq %r10, %r12 + 0x4d, 0x01, 0xfc, //0x00003ebd addq %r15, %r12 + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x00003ec0 jmp LBB0_769 + //0x00003ec5 LBB0_768 + 0x48, 0x01, 0xce, //0x00003ec5 addq %rcx, %rsi + 0x49, 0x89, 0xf4, //0x00003ec8 movq %rsi, %r12 + //0x00003ecb LBB0_769 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00003ecb movq $-1, %r15 + 0x4d, 0x85, 0xc0, //0x00003ed2 testq %r8, %r8 + 0x0f, 0x84, 0x37, 0x15, 0x00, 0x00, //0x00003ed5 je LBB0_978 + 0x4d, 0x85, 0xc9, //0x00003edb testq %r9, %r9 + 0x0f, 0x84, 0x2e, 0x15, 0x00, 0x00, //0x00003ede je LBB0_978 + 0x4d, 0x85, 0xf6, //0x00003ee4 testq %r14, %r14 + 0x0f, 0x84, 0x25, 0x15, 0x00, 0x00, //0x00003ee7 je LBB0_978 + 0x4d, 0x29, 0xd4, //0x00003eed subq %r10, %r12 + 0x49, 0x8d, 0x4c, 0x24, 0xff, //0x00003ef0 leaq $-1(%r12), %rcx + 0x49, 0x39, 0xc8, //0x00003ef5 cmpq %rcx, %r8 + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00003ef8 je LBB0_778 + 0x49, 0x39, 0xc9, //0x00003efe cmpq %rcx, %r9 + 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x00003f01 je LBB0_778 + 0x49, 0x39, 0xce, //0x00003f07 cmpq %rcx, %r14 + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00003f0a je LBB0_778 + 0x4d, 0x85, 0xc9, //0x00003f10 testq %r9, %r9 + 0x0f, 0x8e, 0xdf, 0x00, 0x00, 0x00, //0x00003f13 jle LBB0_782 + 0x49, 0x8d, 0x49, 0xff, //0x00003f19 leaq $-1(%r9), %rcx + 0x49, 0x39, 0xce, //0x00003f1d cmpq %rcx, %r14 + 0x0f, 0x84, 0xd2, 0x00, 0x00, 0x00, //0x00003f20 je LBB0_782 + 0x49, 0xf7, 0xd1, //0x00003f26 notq %r9 + 0x4d, 0x89, 0xcf, //0x00003f29 movq %r9, %r15 + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x00003f2c jmp LBB0_779 + //0x00003f31 LBB0_778 + 0x49, 0xf7, 0xdc, //0x00003f31 negq %r12 + 0x4d, 0x89, 0xe7, //0x00003f34 movq %r12, %r15 + //0x00003f37 LBB0_779 + 0x4d, 0x85, 0xff, //0x00003f37 testq %r15, %r15 + 0x0f, 0x88, 0xd2, 0x14, 0x00, 0x00, //0x00003f3a js LBB0_978 + //0x00003f40 LBB0_780 + 0x49, 0x01, 0xc7, //0x00003f40 addq %rax, %r15 + 0x48, 0x8b, 0x4d, 0xc8, //0x00003f43 movq $-56(%rbp), %rcx + 0x4c, 0x89, 0x39, //0x00003f47 movq %r15, (%rcx) + 0x48, 0x85, 0xc0, //0x00003f4a testq %rax, %rax + 0x4c, 0x8b, 0x4d, 0xc0, //0x00003f4d movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x00003f51 movq $-96(%rbp), %r10 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003f55 movabsq $4294977024, %r11 + 0x4c, 0x8d, 0x35, 0x4a, 0x1a, 0x00, 0x00, //0x00003f5f leaq $6730(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x4c, 0x8b, 0x7d, 0xb0, //0x00003f66 movq $-80(%rbp), %r15 + 0x0f, 0x8f, 0x40, 0xf1, 0xff, 0xff, //0x00003f6a jg LBB0_560 + 0xe9, 0xb1, 0x15, 0x00, 0x00, //0x00003f70 jmp LBB0_781 + //0x00003f75 LBB0_608 + 0x4c, 0x01, 0xe8, //0x00003f75 addq %r13, %rax + 0x49, 0x83, 0xfe, 0x20, //0x00003f78 cmpq $32, %r14 + 0x0f, 0x82, 0x5a, 0x02, 0x00, 0x00, //0x00003f7c jb LBB0_797 + //0x00003f82 LBB0_609 + 0xf3, 0x0f, 0x6f, 0x10, //0x00003f82 movdqu (%rax), %xmm2 + 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00003f86 movdqu $16(%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xea, //0x00003f8b movdqa %xmm2, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00003f8f pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00003f93 pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x6f, 0xec, //0x00003f97 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00003f9b pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xf5, //0x00003f9f pmovmskb %xmm5, %esi + 0x66, 0x0f, 0x74, 0xd1, //0x00003fa3 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00003fa7 pmovmskb %xmm2, %edx + 0x66, 0x0f, 0x74, 0xe1, //0x00003fab pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00003faf pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe6, 0x10, //0x00003fb3 shlq $16, %rsi + 0x48, 0x09, 0xf1, //0x00003fb7 orq %rsi, %rcx + 0x48, 0xc1, 0xe7, 0x10, //0x00003fba shlq $16, %rdi + 0x48, 0x09, 0xfa, //0x00003fbe orq %rdi, %rdx + 0x4c, 0x8b, 0x7d, 0xb0, //0x00003fc1 movq $-80(%rbp), %r15 + 0x0f, 0x85, 0xbf, 0x02, 0x00, 0x00, //0x00003fc5 jne LBB0_805 + 0x4d, 0x85, 0xdb, //0x00003fcb testq %r11, %r11 + 0x4c, 0x8b, 0x4d, 0xc0, //0x00003fce movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x00003fd2 movq $-96(%rbp), %r10 + 0x0f, 0x85, 0xca, 0x02, 0x00, 0x00, //0x00003fd6 jne LBB0_807 + 0x45, 0x31, 0xdb, //0x00003fdc xorl %r11d, %r11d + 0x48, 0x85, 0xc9, //0x00003fdf testq %rcx, %rcx + 0x0f, 0x84, 0x02, 0x03, 0x00, 0x00, //0x00003fe2 je LBB0_808 + //0x00003fe8 LBB0_612 + 0x48, 0x0f, 0xbc, 0xc9, //0x00003fe8 bsfq %rcx, %rcx + 0x48, 0x03, 0x45, 0x98, //0x00003fec addq $-104(%rbp), %rax + 0x48, 0x01, 0xc8, //0x00003ff0 addq %rcx, %rax + 0xe9, 0xa4, 0x03, 0x00, 0x00, //0x00003ff3 jmp LBB0_821 + //0x00003ff8 LBB0_782 + 0x4c, 0x89, 0xc1, //0x00003ff8 movq %r8, %rcx + 0x4c, 0x09, 0xf1, //0x00003ffb orq %r14, %rcx + 0x0f, 0x99, 0xc1, //0x00003ffe setns %cl + 0x0f, 0x88, 0xb9, 0x00, 0x00, 0x00, //0x00004001 js LBB0_787 + 0x4d, 0x39, 0xf0, //0x00004007 cmpq %r14, %r8 + 0x0f, 0x8c, 0xb0, 0x00, 0x00, 0x00, //0x0000400a jl LBB0_787 + 0x49, 0xf7, 0xd0, //0x00004010 notq %r8 + 0x4d, 0x89, 0xc7, //0x00004013 movq %r8, %r15 + 0xe9, 0x1c, 0xff, 0xff, 0xff, //0x00004016 jmp LBB0_779 + //0x0000401b LBB0_785 + 0x48, 0x8b, 0x8d, 0x40, 0xff, 0xff, 0xff, //0x0000401b movq $-192(%rbp), %rcx + 0x48, 0x8b, 0x7d, 0xb8, //0x00004022 movq $-72(%rbp), %rdi + 0x4c, 0x8d, 0x04, 0x39, //0x00004026 leaq (%rcx,%rdi), %r8 + 0x49, 0x29, 0xf0, //0x0000402a subq %rsi, %r8 + 0x49, 0x29, 0xd0, //0x0000402d subq %rdx, %r8 + 0xe9, 0x39, 0xf0, 0xff, 0xff, //0x00004030 jmp LBB0_558 + //0x00004035 LBB0_786 + 0x0f, 0xbc, 0xca, //0x00004035 bsfl %edx, %ecx + 0xe9, 0xb8, 0x00, 0x00, 0x00, //0x00004038 jmp LBB0_792 + //0x0000403d LBB0_670 + 0x4c, 0x01, 0xe8, //0x0000403d addq %r13, %rax + 0x49, 0x83, 0xfe, 0x20, //0x00004040 cmpq $32, %r14 + 0x0f, 0x82, 0xf1, 0x01, 0x00, 0x00, //0x00004044 jb LBB0_802 + //0x0000404a LBB0_671 + 0xf3, 0x0f, 0x6f, 0x10, //0x0000404a movdqu (%rax), %xmm2 + 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x0000404e movdqu $16(%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xea, //0x00004053 movdqa %xmm2, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00004057 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x0000405b pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x0000405f movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00004063 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00004067 pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x74, 0xd1, //0x0000406b pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xf2, //0x0000406f pmovmskb %xmm2, %esi + 0x66, 0x0f, 0x74, 0xe1, //0x00004073 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00004077 pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x0000407b shlq $16, %rcx + 0x48, 0x09, 0xca, //0x0000407f orq %rcx, %rdx + 0x48, 0xc1, 0xe7, 0x10, //0x00004082 shlq $16, %rdi + 0x48, 0x09, 0xfe, //0x00004086 orq %rdi, %rsi + 0x0f, 0x85, 0x49, 0x03, 0x00, 0x00, //0x00004089 jne LBB0_825 + 0x4d, 0x85, 0xdb, //0x0000408f testq %r11, %r11 + 0x4c, 0x8b, 0x4d, 0xc0, //0x00004092 movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x00004096 movq $-96(%rbp), %r10 + 0x4c, 0x8b, 0x7d, 0xb0, //0x0000409a movq $-80(%rbp), %r15 + 0x0f, 0x85, 0x50, 0x03, 0x00, 0x00, //0x0000409e jne LBB0_827 + 0x45, 0x31, 0xdb, //0x000040a4 xorl %r11d, %r11d + 0x48, 0x85, 0xd2, //0x000040a7 testq %rdx, %rdx + 0x0f, 0x84, 0x88, 0x03, 0x00, 0x00, //0x000040aa je LBB0_828 + //0x000040b0 LBB0_674 + 0x48, 0x0f, 0xbc, 0xca, //0x000040b0 bsfq %rdx, %rcx + 0x48, 0x03, 0x45, 0x98, //0x000040b4 addq $-104(%rbp), %rax + 0x48, 0x01, 0xc8, //0x000040b8 addq %rcx, %rax + 0xe9, 0x2a, 0x04, 0x00, 0x00, //0x000040bb jmp LBB0_841 + //0x000040c0 LBB0_787 + 0x49, 0x8d, 0x56, 0xff, //0x000040c0 leaq $-1(%r14), %rdx + 0x49, 0x39, 0xd0, //0x000040c4 cmpq %rdx, %r8 + 0x49, 0xf7, 0xd6, //0x000040c7 notq %r14 + 0x4d, 0x0f, 0x45, 0xf4, //0x000040ca cmovneq %r12, %r14 + 0x84, 0xc9, //0x000040ce testb %cl, %cl + 0x4d, 0x0f, 0x44, 0xf4, //0x000040d0 cmoveq %r12, %r14 + 0x4d, 0x89, 0xf7, //0x000040d4 movq %r14, %r15 + 0xe9, 0x5b, 0xfe, 0xff, 0xff, //0x000040d7 jmp LBB0_779 + //0x000040dc LBB0_788 + 0x41, 0x0f, 0xbc, 0xca, //0x000040dc bsfl %r10d, %ecx + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x000040e0 jmp LBB0_792 + //0x000040e5 LBB0_789 + 0x89, 0xf9, //0x000040e5 movl %edi, %ecx + 0xe9, 0x09, 0x00, 0x00, 0x00, //0x000040e7 jmp LBB0_792 + //0x000040ec LBB0_790 + 0x89, 0xf1, //0x000040ec movl %esi, %ecx + 0xe9, 0x02, 0x00, 0x00, 0x00, //0x000040ee jmp LBB0_792 + //0x000040f3 LBB0_791 + 0x89, 0xd1, //0x000040f3 movl %edx, %ecx + //0x000040f5 LBB0_792 + 0x49, 0xf7, 0xd0, //0x000040f5 notq %r8 + 0x49, 0x29, 0xc8, //0x000040f8 subq %rcx, %r8 + 0x48, 0x8b, 0x7d, 0xb8, //0x000040fb movq $-72(%rbp), %rdi + 0xe9, 0x6a, 0xef, 0xff, 0xff, //0x000040ff jmp LBB0_558 + //0x00004104 LBB0_793 + 0x0f, 0xbc, 0xce, //0x00004104 bsfl %esi, %ecx + 0xe9, 0x0b, 0x01, 0x00, 0x00, //0x00004107 jmp LBB0_800 + //0x0000410c LBB0_703 + 0x4c, 0x01, 0xe8, //0x0000410c addq %r13, %rax + 0x49, 0x83, 0xfe, 0x20, //0x0000410f cmpq $32, %r14 + 0x0f, 0x82, 0x0e, 0x05, 0x00, 0x00, //0x00004113 jb LBB0_850 + //0x00004119 LBB0_704 + 0xf3, 0x0f, 0x6f, 0x10, //0x00004119 movdqu (%rax), %xmm2 + 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x0000411d movdqu $16(%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xea, //0x00004122 movdqa %xmm2, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00004126 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x0000412a pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x0000412e movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00004132 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00004136 pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x74, 0xd1, //0x0000413a pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xf2, //0x0000413e pmovmskb %xmm2, %esi + 0x66, 0x0f, 0x74, 0xe1, //0x00004142 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00004146 pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x0000414a shlq $16, %rcx + 0x48, 0x09, 0xca, //0x0000414e orq %rcx, %rdx + 0x48, 0xc1, 0xe7, 0x10, //0x00004151 shlq $16, %rdi + 0x48, 0x09, 0xfe, //0x00004155 orq %rdi, %rsi + 0x0f, 0x85, 0x61, 0x04, 0x00, 0x00, //0x00004158 jne LBB0_846 + 0x4d, 0x85, 0xdb, //0x0000415e testq %r11, %r11 + 0x4c, 0x8b, 0x4d, 0xc0, //0x00004161 movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x00004165 movq $-96(%rbp), %r10 + 0x4c, 0x8b, 0x7d, 0xb0, //0x00004169 movq $-80(%rbp), %r15 + 0x0f, 0x85, 0x68, 0x04, 0x00, 0x00, //0x0000416d jne LBB0_848 + 0x45, 0x31, 0xdb, //0x00004173 xorl %r11d, %r11d + 0x48, 0x85, 0xd2, //0x00004176 testq %rdx, %rdx + 0x0f, 0x84, 0xa0, 0x04, 0x00, 0x00, //0x00004179 je LBB0_849 + //0x0000417f LBB0_707 + 0x48, 0x0f, 0xbc, 0xca, //0x0000417f bsfq %rdx, %rcx + 0x48, 0x03, 0x45, 0x98, //0x00004183 addq $-104(%rbp), %rax + 0x48, 0x01, 0xc8, //0x00004187 addq %rcx, %rax + 0x48, 0x85, 0xc0, //0x0000418a testq %rax, %rax + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000418d movabsq $4294977024, %r11 + 0x4c, 0x8d, 0x35, 0x12, 0x18, 0x00, 0x00, //0x00004197 leaq $6162(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x0f, 0x89, 0x31, 0xf5, 0xff, 0xff, //0x0000419e jns LBB0_617 + 0xe9, 0x7b, 0x07, 0x00, 0x00, //0x000041a4 jmp LBB0_822 + //0x000041a9 LBB0_794 + 0x48, 0x8b, 0x55, 0xa8, //0x000041a9 movq $-88(%rbp), %rdx + 0x4c, 0x8d, 0x3c, 0x02, //0x000041ad leaq (%rdx,%rax), %r15 + 0x49, 0x29, 0xf7, //0x000041b1 subq %rsi, %r15 + 0x49, 0x29, 0xcf, //0x000041b4 subq %rcx, %r15 + 0xe9, 0x7b, 0xfd, 0xff, 0xff, //0x000041b7 jmp LBB0_779 + //0x000041bc LBB0_795 + 0x89, 0xd1, //0x000041bc movl %edx, %ecx + 0xe9, 0x54, 0x00, 0x00, 0x00, //0x000041be jmp LBB0_800 + //0x000041c3 LBB0_796 + 0x4b, 0x8d, 0x04, 0x28, //0x000041c3 leaq (%r8,%r13), %rax + 0x48, 0xc7, 0x45, 0xd0, 0xff, 0xff, 0xff, 0xff, //0x000041c7 movq $-1, $-48(%rbp) + 0x45, 0x31, 0xdb, //0x000041cf xorl %r11d, %r11d + 0x49, 0x83, 0xfe, 0x20, //0x000041d2 cmpq $32, %r14 + 0x0f, 0x83, 0xa6, 0xfd, 0xff, 0xff, //0x000041d6 jae LBB0_609 + //0x000041dc LBB0_797 + 0x4c, 0x8b, 0x4d, 0xc0, //0x000041dc movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x000041e0 movq $-96(%rbp), %r10 + 0x4c, 0x8b, 0x7d, 0xb0, //0x000041e4 movq $-80(%rbp), %r15 + 0xe9, 0x05, 0x01, 0x00, 0x00, //0x000041e8 jmp LBB0_809 + //0x000041ed LBB0_798 + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000041ed movq $-1, %r9 + 0x48, 0x8b, 0x75, 0xd0, //0x000041f4 movq $-48(%rbp), %rsi + 0x4c, 0x89, 0xdb, //0x000041f8 movq %r11, %rbx + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000041fb movq $-1, %r15 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00004202 movq $-1, %r14 + 0x4c, 0x8d, 0x15, 0x14, 0x1a, 0x00, 0x00, //0x00004209 leaq $6676(%rip), %r10 /* LJTI0_5+0(%rip) */ + 0xe9, 0x50, 0xf2, 0xff, 0xff, //0x00004210 jmp LBB0_647 + //0x00004215 LBB0_799 + 0x89, 0xd9, //0x00004215 movl %ebx, %ecx + //0x00004217 LBB0_800 + 0x49, 0xf7, 0xd7, //0x00004217 notq %r15 + 0x49, 0x29, 0xcf, //0x0000421a subq %rcx, %r15 + 0xe9, 0x15, 0xfd, 0xff, 0xff, //0x0000421d jmp LBB0_779 + //0x00004222 LBB0_801 + 0x4b, 0x8d, 0x04, 0x28, //0x00004222 leaq (%r8,%r13), %rax + 0x48, 0xc7, 0x45, 0xd0, 0xff, 0xff, 0xff, 0xff, //0x00004226 movq $-1, $-48(%rbp) + 0x45, 0x31, 0xdb, //0x0000422e xorl %r11d, %r11d + 0x49, 0x83, 0xfe, 0x20, //0x00004231 cmpq $32, %r14 + 0x0f, 0x83, 0x0f, 0xfe, 0xff, 0xff, //0x00004235 jae LBB0_671 + //0x0000423b LBB0_802 + 0x4c, 0x8b, 0x4d, 0xc0, //0x0000423b movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x0000423f movq $-96(%rbp), %r10 + 0x4c, 0x8b, 0x7d, 0xb0, //0x00004243 movq $-80(%rbp), %r15 + 0xe9, 0xf4, 0x01, 0x00, 0x00, //0x00004247 jmp LBB0_829 + //0x0000424c LBB0_803 + 0x4b, 0x8d, 0x04, 0x28, //0x0000424c leaq (%r8,%r13), %rax + 0x48, 0xc7, 0x45, 0xd0, 0xff, 0xff, 0xff, 0xff, //0x00004250 movq $-1, $-48(%rbp) + 0x45, 0x31, 0xdb, //0x00004258 xorl %r11d, %r11d + 0x49, 0x83, 0xfe, 0x20, //0x0000425b cmpq $32, %r14 + 0x0f, 0x83, 0xb4, 0xfe, 0xff, 0xff, //0x0000425f jae LBB0_704 + 0xe9, 0xbd, 0x03, 0x00, 0x00, //0x00004265 jmp LBB0_850 + //0x0000426a LBB0_804 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000426a movq $-1, %r8 + 0x4c, 0x89, 0xd6, //0x00004271 movq %r10, %rsi + 0x49, 0x89, 0xfb, //0x00004274 movq %rdi, %r11 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00004277 movq $-1, %r14 + 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000427e movq $-1, %r9 + 0xe9, 0x95, 0xfa, 0xff, 0xff, //0x00004285 jmp LBB0_737 + //0x0000428a LBB0_805 + 0x48, 0x83, 0x7d, 0xd0, 0xff, //0x0000428a cmpq $-1, $-48(%rbp) + 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x0000428f jne LBB0_807 + 0x48, 0x89, 0xc6, //0x00004295 movq %rax, %rsi + 0x4c, 0x29, 0xee, //0x00004298 subq %r13, %rsi + 0x48, 0x0f, 0xbc, 0xfa, //0x0000429b bsfq %rdx, %rdi + 0x48, 0x01, 0xf7, //0x0000429f addq %rsi, %rdi + 0x48, 0x89, 0x7d, 0xd0, //0x000042a2 movq %rdi, $-48(%rbp) + //0x000042a6 LBB0_807 + 0x44, 0x89, 0xde, //0x000042a6 movl %r11d, %esi + 0xf7, 0xd6, //0x000042a9 notl %esi + 0x21, 0xd6, //0x000042ab andl %edx, %esi + 0x41, 0x8d, 0x3c, 0x73, //0x000042ad leal (%r11,%rsi,2), %edi + 0x8d, 0x1c, 0x36, //0x000042b1 leal (%rsi,%rsi), %ebx + 0xf7, 0xd3, //0x000042b4 notl %ebx + 0x21, 0xd3, //0x000042b6 andl %edx, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x000042b8 andl $-1431655766, %ebx + 0x45, 0x31, 0xdb, //0x000042be xorl %r11d, %r11d + 0x01, 0xf3, //0x000042c1 addl %esi, %ebx + 0x41, 0x0f, 0x92, 0xc3, //0x000042c3 setb %r11b + 0x01, 0xdb, //0x000042c7 addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x000042c9 xorl $1431655765, %ebx + 0x21, 0xfb, //0x000042cf andl %edi, %ebx + 0xf7, 0xd3, //0x000042d1 notl %ebx + 0x21, 0xd9, //0x000042d3 andl %ebx, %ecx + 0x4c, 0x8b, 0x4d, 0xc0, //0x000042d5 movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x000042d9 movq $-96(%rbp), %r10 + 0x4c, 0x8b, 0x7d, 0xb0, //0x000042dd movq $-80(%rbp), %r15 + 0x48, 0x85, 0xc9, //0x000042e1 testq %rcx, %rcx + 0x0f, 0x85, 0xfe, 0xfc, 0xff, 0xff, //0x000042e4 jne LBB0_612 + //0x000042ea LBB0_808 + 0x48, 0x83, 0xc0, 0x20, //0x000042ea addq $32, %rax + 0x49, 0x83, 0xc6, 0xe0, //0x000042ee addq $-32, %r14 + //0x000042f2 LBB0_809 + 0x4d, 0x85, 0xdb, //0x000042f2 testq %r11, %r11 + 0x0f, 0x85, 0x2b, 0x02, 0x00, 0x00, //0x000042f5 jne LBB0_842 + 0x48, 0x8b, 0x4d, 0xd0, //0x000042fb movq $-48(%rbp), %rcx + 0x4d, 0x85, 0xf6, //0x000042ff testq %r14, %r14 + 0x0f, 0x84, 0x91, 0x00, 0x00, 0x00, //0x00004302 je LBB0_820 + //0x00004308 LBB0_811 + 0x31, 0xd2, //0x00004308 xorl %edx, %edx + //0x0000430a LBB0_812 + 0x0f, 0xb6, 0x1c, 0x10, //0x0000430a movzbl (%rax,%rdx), %ebx + 0x80, 0xfb, 0x22, //0x0000430e cmpb $34, %bl + 0x0f, 0x84, 0x7b, 0x00, 0x00, 0x00, //0x00004311 je LBB0_819 + 0x80, 0xfb, 0x5c, //0x00004317 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x0000431a je LBB0_817 + 0x48, 0x83, 0xc2, 0x01, //0x00004320 addq $1, %rdx + 0x49, 0x39, 0xd6, //0x00004324 cmpq %rdx, %r14 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00004327 jne LBB0_812 + 0xe9, 0x89, 0x00, 0x00, 0x00, //0x0000432d jmp LBB0_815 + //0x00004332 LBB0_817 + 0x49, 0x8d, 0x76, 0xff, //0x00004332 leaq $-1(%r14), %rsi + 0x48, 0x39, 0xd6, //0x00004336 cmpq %rdx, %rsi + 0x0f, 0x84, 0xef, 0x05, 0x00, 0x00, //0x00004339 je LBB0_823 + 0x48, 0x8b, 0xb5, 0x38, 0xff, 0xff, 0xff, //0x0000433f movq $-200(%rbp), %rsi + 0x48, 0x01, 0xc6, //0x00004346 addq %rax, %rsi + 0x48, 0x01, 0xd6, //0x00004349 addq %rdx, %rsi + 0x48, 0x83, 0xf9, 0xff, //0x0000434c cmpq $-1, %rcx + 0x48, 0x8b, 0x7d, 0xd0, //0x00004350 movq $-48(%rbp), %rdi + 0x48, 0x0f, 0x44, 0xfe, //0x00004354 cmoveq %rsi, %rdi + 0x48, 0x89, 0x7d, 0xd0, //0x00004358 movq %rdi, $-48(%rbp) + 0x48, 0x0f, 0x44, 0xce, //0x0000435c cmoveq %rsi, %rcx + 0x48, 0x01, 0xd0, //0x00004360 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00004363 addq $2, %rax + 0x4c, 0x89, 0xf6, //0x00004367 movq %r14, %rsi + 0x48, 0x29, 0xd6, //0x0000436a subq %rdx, %rsi + 0x48, 0x83, 0xc6, 0xfe, //0x0000436d addq $-2, %rsi + 0x49, 0x83, 0xc6, 0xfe, //0x00004371 addq $-2, %r14 + 0x49, 0x39, 0xd6, //0x00004375 cmpq %rdx, %r14 + 0x49, 0x89, 0xf6, //0x00004378 movq %rsi, %r14 + 0x4c, 0x8b, 0x4d, 0xc0, //0x0000437b movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x0000437f movq $-96(%rbp), %r10 + 0x4c, 0x8b, 0x7d, 0xb0, //0x00004383 movq $-80(%rbp), %r15 + 0x0f, 0x85, 0x7b, 0xff, 0xff, 0xff, //0x00004387 jne LBB0_811 + 0xe9, 0x9c, 0x05, 0x00, 0x00, //0x0000438d jmp LBB0_823 + //0x00004392 LBB0_819 + 0x48, 0x01, 0xd0, //0x00004392 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00004395 addq $1, %rax + //0x00004399 LBB0_820 + 0x4c, 0x29, 0xe8, //0x00004399 subq %r13, %rax + //0x0000439c LBB0_821 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000439c movabsq $4294977024, %r11 + 0x4c, 0x8d, 0x35, 0x03, 0x16, 0x00, 0x00, //0x000043a6 leaq $5635(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x48, 0x85, 0xc0, //0x000043ad testq %rax, %rax + 0x0f, 0x89, 0x1f, 0xf3, 0xff, 0xff, //0x000043b0 jns LBB0_617 + 0xe9, 0x69, 0x05, 0x00, 0x00, //0x000043b6 jmp LBB0_822 + //0x000043bb LBB0_815 + 0x80, 0xfb, 0x22, //0x000043bb cmpb $34, %bl + 0x0f, 0x85, 0x6a, 0x05, 0x00, 0x00, //0x000043be jne LBB0_823 + 0x4c, 0x01, 0xf0, //0x000043c4 addq %r14, %rax + 0x4c, 0x8b, 0x4d, 0xc0, //0x000043c7 movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x000043cb movq $-96(%rbp), %r10 + 0x4c, 0x8b, 0x7d, 0xb0, //0x000043cf movq $-80(%rbp), %r15 + 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x000043d3 jmp LBB0_820 + //0x000043d8 LBB0_825 + 0x48, 0x83, 0x7d, 0xd0, 0xff, //0x000043d8 cmpq $-1, $-48(%rbp) + 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x000043dd jne LBB0_827 + 0x48, 0x89, 0xc1, //0x000043e3 movq %rax, %rcx + 0x4c, 0x29, 0xe9, //0x000043e6 subq %r13, %rcx + 0x48, 0x0f, 0xbc, 0xfe, //0x000043e9 bsfq %rsi, %rdi + 0x48, 0x01, 0xcf, //0x000043ed addq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xd0, //0x000043f0 movq %rdi, $-48(%rbp) + //0x000043f4 LBB0_827 + 0x44, 0x89, 0xd9, //0x000043f4 movl %r11d, %ecx + 0xf7, 0xd1, //0x000043f7 notl %ecx + 0x21, 0xf1, //0x000043f9 andl %esi, %ecx + 0x41, 0x8d, 0x3c, 0x4b, //0x000043fb leal (%r11,%rcx,2), %edi + 0x8d, 0x1c, 0x09, //0x000043ff leal (%rcx,%rcx), %ebx + 0xf7, 0xd3, //0x00004402 notl %ebx + 0x21, 0xf3, //0x00004404 andl %esi, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00004406 andl $-1431655766, %ebx + 0x45, 0x31, 0xdb, //0x0000440c xorl %r11d, %r11d + 0x01, 0xcb, //0x0000440f addl %ecx, %ebx + 0x41, 0x0f, 0x92, 0xc3, //0x00004411 setb %r11b + 0x01, 0xdb, //0x00004415 addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00004417 xorl $1431655765, %ebx + 0x21, 0xfb, //0x0000441d andl %edi, %ebx + 0xf7, 0xd3, //0x0000441f notl %ebx + 0x21, 0xda, //0x00004421 andl %ebx, %edx + 0x4c, 0x8b, 0x4d, 0xc0, //0x00004423 movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x00004427 movq $-96(%rbp), %r10 + 0x4c, 0x8b, 0x7d, 0xb0, //0x0000442b movq $-80(%rbp), %r15 + 0x48, 0x85, 0xd2, //0x0000442f testq %rdx, %rdx + 0x0f, 0x85, 0x78, 0xfc, 0xff, 0xff, //0x00004432 jne LBB0_674 + //0x00004438 LBB0_828 + 0x48, 0x83, 0xc0, 0x20, //0x00004438 addq $32, %rax + 0x49, 0x83, 0xc6, 0xe0, //0x0000443c addq $-32, %r14 + //0x00004440 LBB0_829 + 0x4d, 0x85, 0xdb, //0x00004440 testq %r11, %r11 + 0x0f, 0x85, 0x2a, 0x01, 0x00, 0x00, //0x00004443 jne LBB0_844 + 0x48, 0x8b, 0x55, 0xd0, //0x00004449 movq $-48(%rbp), %rdx + 0x4d, 0x85, 0xf6, //0x0000444d testq %r14, %r14 + 0x0f, 0x84, 0x91, 0x00, 0x00, 0x00, //0x00004450 je LBB0_840 + //0x00004456 LBB0_831 + 0x31, 0xf6, //0x00004456 xorl %esi, %esi + //0x00004458 LBB0_832 + 0x0f, 0xb6, 0x0c, 0x30, //0x00004458 movzbl (%rax,%rsi), %ecx + 0x80, 0xf9, 0x22, //0x0000445c cmpb $34, %cl + 0x0f, 0x84, 0x7b, 0x00, 0x00, 0x00, //0x0000445f je LBB0_839 + 0x80, 0xf9, 0x5c, //0x00004465 cmpb $92, %cl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00004468 je LBB0_837 + 0x48, 0x83, 0xc6, 0x01, //0x0000446e addq $1, %rsi + 0x49, 0x39, 0xf6, //0x00004472 cmpq %rsi, %r14 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00004475 jne LBB0_832 + 0xe9, 0x89, 0x00, 0x00, 0x00, //0x0000447b jmp LBB0_835 + //0x00004480 LBB0_837 + 0x49, 0x8d, 0x4e, 0xff, //0x00004480 leaq $-1(%r14), %rcx + 0x48, 0x39, 0xf1, //0x00004484 cmpq %rsi, %rcx + 0x0f, 0x84, 0xa1, 0x04, 0x00, 0x00, //0x00004487 je LBB0_823 + 0x48, 0x8b, 0x8d, 0x38, 0xff, 0xff, 0xff, //0x0000448d movq $-200(%rbp), %rcx + 0x48, 0x01, 0xc1, //0x00004494 addq %rax, %rcx + 0x48, 0x01, 0xf1, //0x00004497 addq %rsi, %rcx + 0x48, 0x83, 0xfa, 0xff, //0x0000449a cmpq $-1, %rdx + 0x48, 0x8b, 0x7d, 0xd0, //0x0000449e movq $-48(%rbp), %rdi + 0x48, 0x0f, 0x44, 0xf9, //0x000044a2 cmoveq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xd0, //0x000044a6 movq %rdi, $-48(%rbp) + 0x48, 0x0f, 0x44, 0xd1, //0x000044aa cmoveq %rcx, %rdx + 0x48, 0x01, 0xf0, //0x000044ae addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x000044b1 addq $2, %rax + 0x4c, 0x89, 0xf1, //0x000044b5 movq %r14, %rcx + 0x48, 0x29, 0xf1, //0x000044b8 subq %rsi, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x000044bb addq $-2, %rcx + 0x49, 0x83, 0xc6, 0xfe, //0x000044bf addq $-2, %r14 + 0x49, 0x39, 0xf6, //0x000044c3 cmpq %rsi, %r14 + 0x49, 0x89, 0xce, //0x000044c6 movq %rcx, %r14 + 0x4c, 0x8b, 0x4d, 0xc0, //0x000044c9 movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x000044cd movq $-96(%rbp), %r10 + 0x4c, 0x8b, 0x7d, 0xb0, //0x000044d1 movq $-80(%rbp), %r15 + 0x0f, 0x85, 0x7b, 0xff, 0xff, 0xff, //0x000044d5 jne LBB0_831 + 0xe9, 0x4e, 0x04, 0x00, 0x00, //0x000044db jmp LBB0_823 + //0x000044e0 LBB0_839 + 0x48, 0x01, 0xf0, //0x000044e0 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000044e3 addq $1, %rax + //0x000044e7 LBB0_840 + 0x4c, 0x29, 0xe8, //0x000044e7 subq %r13, %rax + //0x000044ea LBB0_841 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000044ea movabsq $4294977024, %r11 + 0x4c, 0x8d, 0x35, 0xb5, 0x14, 0x00, 0x00, //0x000044f4 leaq $5301(%rip), %r14 /* LJTI0_2+0(%rip) */ + 0x48, 0x85, 0xc0, //0x000044fb testq %rax, %rax + 0x0f, 0x89, 0xf1, 0xf3, 0xff, 0xff, //0x000044fe jns LBB0_679 + 0xe9, 0x1b, 0x04, 0x00, 0x00, //0x00004504 jmp LBB0_822 + //0x00004509 LBB0_835 + 0x80, 0xf9, 0x22, //0x00004509 cmpb $34, %cl + 0x0f, 0x85, 0x1c, 0x04, 0x00, 0x00, //0x0000450c jne LBB0_823 + 0x4c, 0x01, 0xf0, //0x00004512 addq %r14, %rax + 0x4c, 0x8b, 0x4d, 0xc0, //0x00004515 movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x00004519 movq $-96(%rbp), %r10 + 0x4c, 0x8b, 0x7d, 0xb0, //0x0000451d movq $-80(%rbp), %r15 + 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00004521 jmp LBB0_840 + //0x00004526 LBB0_842 + 0x4d, 0x85, 0xf6, //0x00004526 testq %r14, %r14 + 0x0f, 0x84, 0xff, 0x03, 0x00, 0x00, //0x00004529 je LBB0_823 + 0x48, 0x8b, 0x8d, 0x48, 0xff, 0xff, 0xff, //0x0000452f movq $-184(%rbp), %rcx + 0x48, 0x8d, 0x14, 0x08, //0x00004536 leaq (%rax,%rcx), %rdx + 0x48, 0x8b, 0x75, 0xd0, //0x0000453a movq $-48(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x0000453e cmpq $-1, %rsi + 0x48, 0x89, 0xf1, //0x00004542 movq %rsi, %rcx + 0x48, 0x0f, 0x44, 0xf2, //0x00004545 cmoveq %rdx, %rsi + 0x48, 0x0f, 0x44, 0xca, //0x00004549 cmoveq %rdx, %rcx + 0x48, 0x83, 0xc0, 0x01, //0x0000454d addq $1, %rax + 0x49, 0x83, 0xc6, 0xff, //0x00004551 addq $-1, %r14 + 0x48, 0x89, 0x75, 0xd0, //0x00004555 movq %rsi, $-48(%rbp) + 0x4c, 0x8b, 0x4d, 0xc0, //0x00004559 movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x0000455d movq $-96(%rbp), %r10 + 0x4c, 0x8b, 0x7d, 0xb0, //0x00004561 movq $-80(%rbp), %r15 + 0x4d, 0x85, 0xf6, //0x00004565 testq %r14, %r14 + 0x0f, 0x85, 0x9a, 0xfd, 0xff, 0xff, //0x00004568 jne LBB0_811 + 0xe9, 0x26, 0xfe, 0xff, 0xff, //0x0000456e jmp LBB0_820 + //0x00004573 LBB0_844 + 0x4d, 0x85, 0xf6, //0x00004573 testq %r14, %r14 + 0x0f, 0x84, 0xb2, 0x03, 0x00, 0x00, //0x00004576 je LBB0_823 + 0x48, 0x8b, 0x8d, 0x48, 0xff, 0xff, 0xff, //0x0000457c movq $-184(%rbp), %rcx + 0x48, 0x01, 0xc1, //0x00004583 addq %rax, %rcx + 0x48, 0x8b, 0x75, 0xd0, //0x00004586 movq $-48(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x0000458a cmpq $-1, %rsi + 0x48, 0x89, 0xf2, //0x0000458e movq %rsi, %rdx + 0x48, 0x0f, 0x44, 0xf1, //0x00004591 cmoveq %rcx, %rsi + 0x48, 0x0f, 0x44, 0xd1, //0x00004595 cmoveq %rcx, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x00004599 addq $1, %rax + 0x49, 0x83, 0xc6, 0xff, //0x0000459d addq $-1, %r14 + 0x48, 0x89, 0x75, 0xd0, //0x000045a1 movq %rsi, $-48(%rbp) + 0x4c, 0x8b, 0x4d, 0xc0, //0x000045a5 movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x000045a9 movq $-96(%rbp), %r10 + 0x4c, 0x8b, 0x7d, 0xb0, //0x000045ad movq $-80(%rbp), %r15 + 0x4d, 0x85, 0xf6, //0x000045b1 testq %r14, %r14 + 0x0f, 0x85, 0x9c, 0xfe, 0xff, 0xff, //0x000045b4 jne LBB0_831 + 0xe9, 0x28, 0xff, 0xff, 0xff, //0x000045ba jmp LBB0_840 + //0x000045bf LBB0_846 + 0x48, 0x83, 0x7d, 0xd0, 0xff, //0x000045bf cmpq $-1, $-48(%rbp) + 0x0f, 0x85, 0x11, 0x00, 0x00, 0x00, //0x000045c4 jne LBB0_848 + 0x48, 0x89, 0xc1, //0x000045ca movq %rax, %rcx + 0x4c, 0x29, 0xe9, //0x000045cd subq %r13, %rcx + 0x48, 0x0f, 0xbc, 0xfe, //0x000045d0 bsfq %rsi, %rdi + 0x48, 0x01, 0xcf, //0x000045d4 addq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xd0, //0x000045d7 movq %rdi, $-48(%rbp) + //0x000045db LBB0_848 + 0x44, 0x89, 0xd9, //0x000045db movl %r11d, %ecx + 0xf7, 0xd1, //0x000045de notl %ecx + 0x21, 0xf1, //0x000045e0 andl %esi, %ecx + 0x41, 0x8d, 0x3c, 0x4b, //0x000045e2 leal (%r11,%rcx,2), %edi + 0x8d, 0x1c, 0x09, //0x000045e6 leal (%rcx,%rcx), %ebx + 0xf7, 0xd3, //0x000045e9 notl %ebx + 0x21, 0xf3, //0x000045eb andl %esi, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x000045ed andl $-1431655766, %ebx + 0x45, 0x31, 0xdb, //0x000045f3 xorl %r11d, %r11d + 0x01, 0xcb, //0x000045f6 addl %ecx, %ebx + 0x41, 0x0f, 0x92, 0xc3, //0x000045f8 setb %r11b + 0x01, 0xdb, //0x000045fc addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x000045fe xorl $1431655765, %ebx + 0x21, 0xfb, //0x00004604 andl %edi, %ebx + 0xf7, 0xd3, //0x00004606 notl %ebx + 0x21, 0xda, //0x00004608 andl %ebx, %edx + 0x4c, 0x8b, 0x4d, 0xc0, //0x0000460a movq $-64(%rbp), %r9 + 0x4c, 0x8b, 0x55, 0xa0, //0x0000460e movq $-96(%rbp), %r10 + 0x4c, 0x8b, 0x7d, 0xb0, //0x00004612 movq $-80(%rbp), %r15 + 0x48, 0x85, 0xd2, //0x00004616 testq %rdx, %rdx + 0x0f, 0x85, 0x60, 0xfb, 0xff, 0xff, //0x00004619 jne LBB0_707 + //0x0000461f LBB0_849 + 0x48, 0x83, 0xc0, 0x20, //0x0000461f addq $32, %rax + 0x49, 0x83, 0xc6, 0xe0, //0x00004623 addq $-32, %r14 + //0x00004627 LBB0_850 + 0x4d, 0x85, 0xdb, //0x00004627 testq %r11, %r11 + 0x0f, 0x85, 0xab, 0x00, 0x00, 0x00, //0x0000462a jne LBB0_862 + 0x48, 0x8b, 0x55, 0xd0, //0x00004630 movq $-48(%rbp), %rdx + 0x4d, 0x85, 0xf6, //0x00004634 testq %r14, %r14 + 0x0f, 0x84, 0x85, 0x00, 0x00, 0x00, //0x00004637 je LBB0_861 + //0x0000463d LBB0_852 + 0x31, 0xf6, //0x0000463d xorl %esi, %esi + //0x0000463f LBB0_853 + 0x0f, 0xb6, 0x0c, 0x30, //0x0000463f movzbl (%rax,%rsi), %ecx + 0x80, 0xf9, 0x22, //0x00004643 cmpb $34, %cl + 0x0f, 0x84, 0x6f, 0x00, 0x00, 0x00, //0x00004646 je LBB0_860 + 0x80, 0xf9, 0x5c, //0x0000464c cmpb $92, %cl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x0000464f je LBB0_858 + 0x48, 0x83, 0xc6, 0x01, //0x00004655 addq $1, %rsi + 0x49, 0x39, 0xf6, //0x00004659 cmpq %rsi, %r14 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x0000465c jne LBB0_853 + 0xe9, 0x63, 0x00, 0x00, 0x00, //0x00004662 jmp LBB0_856 + //0x00004667 LBB0_858 + 0x49, 0x8d, 0x4e, 0xff, //0x00004667 leaq $-1(%r14), %rcx + 0x48, 0x39, 0xf1, //0x0000466b cmpq %rsi, %rcx + 0x0f, 0x84, 0xba, 0x02, 0x00, 0x00, //0x0000466e je LBB0_823 + 0x48, 0x8b, 0x8d, 0x38, 0xff, 0xff, 0xff, //0x00004674 movq $-200(%rbp), %rcx + 0x48, 0x01, 0xc1, //0x0000467b addq %rax, %rcx + 0x48, 0x01, 0xf1, //0x0000467e addq %rsi, %rcx + 0x48, 0x83, 0xfa, 0xff, //0x00004681 cmpq $-1, %rdx + 0x48, 0x8b, 0x7d, 0xd0, //0x00004685 movq $-48(%rbp), %rdi + 0x48, 0x0f, 0x44, 0xf9, //0x00004689 cmoveq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xd0, //0x0000468d movq %rdi, $-48(%rbp) + 0x48, 0x0f, 0x44, 0xd1, //0x00004691 cmoveq %rcx, %rdx + 0x48, 0x01, 0xf0, //0x00004695 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00004698 addq $2, %rax + 0x4c, 0x89, 0xf1, //0x0000469c movq %r14, %rcx + 0x48, 0x29, 0xf1, //0x0000469f subq %rsi, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x000046a2 addq $-2, %rcx + 0x49, 0x83, 0xc6, 0xfe, //0x000046a6 addq $-2, %r14 + 0x49, 0x39, 0xf6, //0x000046aa cmpq %rsi, %r14 + 0x49, 0x89, 0xce, //0x000046ad movq %rcx, %r14 + 0x0f, 0x85, 0x87, 0xff, 0xff, 0xff, //0x000046b0 jne LBB0_852 + 0xe9, 0x73, 0x02, 0x00, 0x00, //0x000046b6 jmp LBB0_823 + //0x000046bb LBB0_860 + 0x48, 0x01, 0xf0, //0x000046bb addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000046be addq $1, %rax + //0x000046c2 LBB0_861 + 0x4c, 0x29, 0xe8, //0x000046c2 subq %r13, %rax + 0xe9, 0x85, 0xf4, 0xff, 0xff, //0x000046c5 jmp LBB0_712 + //0x000046ca LBB0_856 + 0x80, 0xf9, 0x22, //0x000046ca cmpb $34, %cl + 0x0f, 0x85, 0x5b, 0x02, 0x00, 0x00, //0x000046cd jne LBB0_823 + 0x4c, 0x01, 0xf0, //0x000046d3 addq %r14, %rax + 0xe9, 0xe7, 0xff, 0xff, 0xff, //0x000046d6 jmp LBB0_861 + //0x000046db LBB0_862 + 0x4d, 0x85, 0xf6, //0x000046db testq %r14, %r14 + 0x0f, 0x84, 0x4a, 0x02, 0x00, 0x00, //0x000046de je LBB0_823 + 0x48, 0x8b, 0x8d, 0x48, 0xff, 0xff, 0xff, //0x000046e4 movq $-184(%rbp), %rcx + 0x48, 0x01, 0xc1, //0x000046eb addq %rax, %rcx + 0x48, 0x8b, 0x75, 0xd0, //0x000046ee movq $-48(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x000046f2 cmpq $-1, %rsi + 0x48, 0x89, 0xf2, //0x000046f6 movq %rsi, %rdx + 0x48, 0x0f, 0x44, 0xf1, //0x000046f9 cmoveq %rcx, %rsi + 0x48, 0x0f, 0x44, 0xd1, //0x000046fd cmoveq %rcx, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x00004701 addq $1, %rax + 0x49, 0x83, 0xc6, 0xff, //0x00004705 addq $-1, %r14 + 0x48, 0x89, 0x75, 0xd0, //0x00004709 movq %rsi, $-48(%rbp) + 0x4d, 0x85, 0xf6, //0x0000470d testq %r14, %r14 + 0x0f, 0x85, 0x27, 0xff, 0xff, 0xff, //0x00004710 jne LBB0_852 + 0xe9, 0xa7, 0xff, 0xff, 0xff, //0x00004716 jmp LBB0_861 + //0x0000471b LBB0_865 + 0x49, 0x83, 0xc3, 0xff, //0x0000471b addq $-1, %r11 + 0x4d, 0x89, 0x18, //0x0000471f movq %r11, (%r8) + 0x48, 0xc7, 0xc0, 0xde, 0xff, 0xff, 0xff, //0x00004722 movq $-34, %rax + 0xe9, 0x3b, 0x00, 0x00, 0x00, //0x00004729 jmp LBB0_874 + //0x0000472e LBB0_866 + 0x48, 0x8b, 0x45, 0xc8, //0x0000472e movq $-56(%rbp), %rax + 0x48, 0x89, 0x30, //0x00004732 movq %rsi, (%rax) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004735 movq $-1, %rax + 0xe9, 0x28, 0x00, 0x00, 0x00, //0x0000473c jmp LBB0_874 + //0x00004741 LBB0_867 + 0x49, 0x89, 0x10, //0x00004741 movq %rdx, (%r8) + //0x00004744 LBB0_868 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004744 movq $-1, %rax + 0xe9, 0x19, 0x00, 0x00, 0x00, //0x0000474b jmp LBB0_874 + //0x00004750 LBB0_869 + 0x49, 0x89, 0xc3, //0x00004750 movq %rax, %r11 + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00004753 jmp LBB0_872 + //0x00004758 LBB0_871 + 0x49, 0x89, 0xcb, //0x00004758 movq %rcx, %r11 + //0x0000475b LBB0_872 + 0x49, 0x83, 0xc3, 0xff, //0x0000475b addq $-1, %r11 + 0x4d, 0x89, 0x18, //0x0000475f movq %r11, (%r8) + //0x00004762 LBB0_873 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00004762 movq $-2, %rax + //0x00004769 LBB0_874 + 0x48, 0x81, 0xc4, 0xa8, 0x00, 0x00, 0x00, //0x00004769 addq $168, %rsp + 0x5b, //0x00004770 popq %rbx + 0x41, 0x5c, //0x00004771 popq %r12 + 0x41, 0x5d, //0x00004773 popq %r13 + 0x41, 0x5e, //0x00004775 popq %r14 + 0x41, 0x5f, //0x00004777 popq %r15 + 0x5d, //0x00004779 popq %rbp + 0xc3, //0x0000477a retq + //0x0000477b LBB0_875 + 0x4c, 0x01, 0xde, //0x0000477b addq %r11, %rsi + 0x48, 0x89, 0xf0, //0x0000477e movq %rsi, %rax + //0x00004781 LBB0_876 + 0x4c, 0x29, 0xd8, //0x00004781 subq %r11, %rax + 0x48, 0x89, 0xc6, //0x00004784 movq %rax, %rsi + //0x00004787 LBB0_877 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004787 movq $-1, %rax + 0x49, 0x89, 0xf4, //0x0000478e movq %rsi, %r12 + 0x48, 0x39, 0xfe, //0x00004791 cmpq %rdi, %rsi + 0x0f, 0x83, 0xcf, 0xff, 0xff, 0xff, //0x00004794 jae LBB0_874 + //0x0000479a LBB0_878 + 0x49, 0x8d, 0x7c, 0x24, 0x01, //0x0000479a leaq $1(%r12), %rdi + 0x48, 0x8b, 0x45, 0xc8, //0x0000479f movq $-56(%rbp), %rax + 0x48, 0x89, 0x38, //0x000047a3 movq %rdi, (%rax) + 0x43, 0x0f, 0xbe, 0x0c, 0x23, //0x000047a6 movsbl (%r11,%r12), %ecx + 0x83, 0xf9, 0x7b, //0x000047ab cmpl $123, %ecx + 0x0f, 0x87, 0xc9, 0x01, 0x00, 0x00, //0x000047ae ja LBB0_902 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000047b4 movq $-1, %rax + 0x48, 0x8d, 0x15, 0xce, 0x14, 0x00, 0x00, //0x000047bb leaq $5326(%rip), %rdx /* LJTI0_6+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8a, //0x000047c2 movslq (%rdx,%rcx,4), %rcx + 0x48, 0x01, 0xd1, //0x000047c6 addq %rdx, %rcx + 0xff, 0xe1, //0x000047c9 jmpq *%rcx + //0x000047cb LBB0_880 + 0x49, 0x8b, 0x01, //0x000047cb movq (%r9), %rax + 0x48, 0x29, 0xf8, //0x000047ce subq %rdi, %rax + 0x48, 0x83, 0xf8, 0x10, //0x000047d1 cmpq $16, %rax + 0x0f, 0x82, 0xa5, 0x0d, 0x00, 0x00, //0x000047d5 jb LBB0_997 + 0x31, 0xf6, //0x000047db xorl %esi, %esi + 0xf3, 0x0f, 0x6f, 0x05, 0x1b, 0xb8, 0xff, 0xff, //0x000047dd movdqu $-18405(%rip), %xmm0 /* LCPI0_0+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0x23, 0xb8, 0xff, 0xff, //0x000047e5 movdqu $-18397(%rip), %xmm1 /* LCPI0_1+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x15, 0x2b, 0xb8, 0xff, 0xff, //0x000047ed movdqu $-18389(%rip), %xmm2 /* LCPI0_2+0(%rip) */ + 0x4c, 0x89, 0xda, //0x000047f5 movq %r11, %rdx + 0x48, 0x8b, 0x5d, 0xc8, //0x000047f8 movq $-56(%rbp), %rbx + 0x90, 0x90, 0x90, 0x90, //0x000047fc .p2align 4, 0x90 + //0x00004800 LBB0_882 + 0xf3, 0x42, 0x0f, 0x6f, 0x5c, 0x22, 0x01, //0x00004800 movdqu $1(%rdx,%r12), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00004807 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x0000480b pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xdb, 0xd9, //0x0000480f pand %xmm1, %xmm3 + 0x66, 0x0f, 0x74, 0xda, //0x00004813 pcmpeqb %xmm2, %xmm3 + 0x66, 0x0f, 0xeb, 0xdc, //0x00004817 por %xmm4, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x0000481b pmovmskb %xmm3, %ecx + 0x85, 0xc9, //0x0000481f testl %ecx, %ecx + 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x00004821 jne LBB0_893 + 0x48, 0x83, 0xc2, 0x10, //0x00004827 addq $16, %rdx + 0x48, 0x8d, 0x0c, 0x30, //0x0000482b leaq (%rax,%rsi), %rcx + 0x48, 0x83, 0xc1, 0xf0, //0x0000482f addq $-16, %rcx + 0x48, 0x83, 0xc6, 0xf0, //0x00004833 addq $-16, %rsi + 0x48, 0x83, 0xf9, 0x0f, //0x00004837 cmpq $15, %rcx + 0x0f, 0x87, 0xbf, 0xff, 0xff, 0xff, //0x0000483b ja LBB0_882 + 0x4a, 0x8d, 0x3c, 0x22, //0x00004841 leaq (%rdx,%r12), %rdi + 0x48, 0x83, 0xc7, 0x01, //0x00004845 addq $1, %rdi + 0x48, 0x01, 0xf0, //0x00004849 addq %rsi, %rax + 0x48, 0x85, 0xc0, //0x0000484c testq %rax, %rax + 0x0f, 0x84, 0x48, 0x00, 0x00, 0x00, //0x0000484f je LBB0_892 + //0x00004855 LBB0_885 + 0x48, 0x8d, 0x14, 0x07, //0x00004855 leaq (%rdi,%rax), %rdx + 0x48, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00004859 movabsq $17596481021440, %rsi + //0x00004863 LBB0_886 + 0x0f, 0xb6, 0x0f, //0x00004863 movzbl (%rdi), %ecx + 0x48, 0x83, 0xf9, 0x2c, //0x00004866 cmpq $44, %rcx + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x0000486a ja LBB0_888 + 0x48, 0x0f, 0xa3, 0xce, //0x00004870 btq %rcx, %rsi + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x00004874 jb LBB0_892 + //0x0000487a LBB0_888 + 0x80, 0xf9, 0x5d, //0x0000487a cmpb $93, %cl + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x0000487d je LBB0_892 + 0x80, 0xf9, 0x7d, //0x00004883 cmpb $125, %cl + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00004886 je LBB0_892 + 0x48, 0x83, 0xc7, 0x01, //0x0000488c addq $1, %rdi + 0x48, 0x83, 0xc0, 0xff, //0x00004890 addq $-1, %rax + 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x00004894 jne LBB0_886 + 0x48, 0x89, 0xd7, //0x0000489a movq %rdx, %rdi + //0x0000489d LBB0_892 + 0x4c, 0x29, 0xdf, //0x0000489d subq %r11, %rdi + 0x48, 0x89, 0x3b, //0x000048a0 movq %rdi, (%rbx) + 0x4c, 0x89, 0xe0, //0x000048a3 movq %r12, %rax + 0xe9, 0xbe, 0xfe, 0xff, 0xff, //0x000048a6 jmp LBB0_874 + //0x000048ab LBB0_893 + 0x66, 0x0f, 0xbc, 0xc1, //0x000048ab bsfw %cx, %ax + 0x0f, 0xb7, 0xc8, //0x000048af movzwl %ax, %ecx + 0x4c, 0x01, 0xe1, //0x000048b2 addq %r12, %rcx + 0x48, 0x89, 0xc8, //0x000048b5 movq %rcx, %rax + 0x48, 0x29, 0xf0, //0x000048b8 subq %rsi, %rax + 0x48, 0x8d, 0x70, 0x01, //0x000048bb leaq $1(%rax), %rsi + 0x48, 0x89, 0x33, //0x000048bf movq %rsi, (%rbx) + 0x48, 0x85, 0xf6, //0x000048c2 testq %rsi, %rsi + 0x0f, 0x8e, 0x45, 0x00, 0x00, 0x00, //0x000048c5 jle LBB0_898 + 0x48, 0x8d, 0x70, 0x02, //0x000048cb leaq $2(%rax), %rsi + 0x48, 0x01, 0xca, //0x000048cf addq %rcx, %rdx + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000048d2 movabsq $4294977024, %rdi + 0x90, 0x90, 0x90, 0x90, //0x000048dc .p2align 4, 0x90 + //0x000048e0 LBB0_895 + 0x0f, 0xb6, 0x0a, //0x000048e0 movzbl (%rdx), %ecx + 0x48, 0x83, 0xf9, 0x20, //0x000048e3 cmpq $32, %rcx + 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x000048e7 ja LBB0_898 + 0x48, 0x0f, 0xa3, 0xcf, //0x000048ed btq %rcx, %rdi + 0x0f, 0x83, 0x19, 0x00, 0x00, 0x00, //0x000048f1 jae LBB0_898 + 0x48, 0x89, 0x03, //0x000048f7 movq %rax, (%rbx) + 0x48, 0x83, 0xc6, 0xff, //0x000048fa addq $-1, %rsi + 0x48, 0x83, 0xc0, 0xff, //0x000048fe addq $-1, %rax + 0x48, 0x83, 0xc2, 0xff, //0x00004902 addq $-1, %rdx + 0x48, 0x83, 0xfe, 0x01, //0x00004906 cmpq $1, %rsi + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x0000490a jg LBB0_895 + //0x00004910 LBB0_898 + 0x4c, 0x89, 0xe0, //0x00004910 movq %r12, %rax + 0xe9, 0x51, 0xfe, 0xff, 0xff, //0x00004913 jmp LBB0_874 + //0x00004918 LBB0_980 + 0x48, 0xc7, 0xc0, 0xf9, 0xff, 0xff, 0xff, //0x00004918 movq $-7, %rax + 0xe9, 0x45, 0xfe, 0xff, 0xff, //0x0000491f jmp LBB0_874 + //0x00004924 LBB0_822 + 0x48, 0x83, 0xf8, 0xff, //0x00004924 cmpq $-1, %rax + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00004928 jne LBB0_824 + //0x0000492e LBB0_823 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000492e movq $-1, %rax + 0x48, 0x8b, 0x4d, 0xb8, //0x00004935 movq $-72(%rbp), %rcx + 0x48, 0x89, 0x4d, 0xd0, //0x00004939 movq %rcx, $-48(%rbp) + //0x0000493d LBB0_824 + 0x48, 0x8b, 0x4d, 0xc8, //0x0000493d movq $-56(%rbp), %rcx + 0x48, 0x8b, 0x55, 0xd0, //0x00004941 movq $-48(%rbp), %rdx + 0x48, 0x89, 0x11, //0x00004945 movq %rdx, (%rcx) + 0xe9, 0x1c, 0xfe, 0xff, 0xff, //0x00004948 jmp LBB0_874 + //0x0000494d LBB0_618 + 0x49, 0x83, 0xc0, 0xff, //0x0000494d addq $-1, %r8 + 0x4c, 0x89, 0xc0, //0x00004951 movq %r8, %rax + 0xe9, 0x10, 0xfe, 0xff, 0xff, //0x00004954 jmp LBB0_874 + //0x00004959 LBB0_899 + 0x49, 0x8d, 0x4c, 0x24, 0x04, //0x00004959 leaq $4(%r12), %rcx + 0xe9, 0x70, 0x05, 0x00, 0x00, //0x0000495e jmp LBB0_939 + //0x00004963 LBB0_900 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00004963 movq $-1, %r8 + //0x0000496a LBB0_901 + 0x4c, 0x29, 0xc7, //0x0000496a subq %r8, %rdi + 0x48, 0x83, 0xc7, 0xfe, //0x0000496d addq $-2, %rdi + 0x48, 0x8b, 0x45, 0xc8, //0x00004971 movq $-56(%rbp), %rax + 0x48, 0x89, 0x38, //0x00004975 movq %rdi, (%rax) + 0xe9, 0xe5, 0xfd, 0xff, 0xff, //0x00004978 jmp LBB0_873 + //0x0000497d LBB0_902 + 0x48, 0x8b, 0x45, 0xc8, //0x0000497d movq $-56(%rbp), %rax + 0x4c, 0x89, 0x20, //0x00004981 movq %r12, (%rax) + 0xe9, 0xd9, 0xfd, 0xff, 0xff, //0x00004984 jmp LBB0_873 + //0x00004989 LBB0_903 + 0x4d, 0x8b, 0x01, //0x00004989 movq (%r9), %r8 + 0x4d, 0x89, 0xc6, //0x0000498c movq %r8, %r14 + 0x49, 0x29, 0xfe, //0x0000498f subq %rdi, %r14 + 0x49, 0x83, 0xfe, 0x20, //0x00004992 cmpq $32, %r14 + 0x0f, 0x8c, 0xf9, 0x0b, 0x00, 0x00, //0x00004996 jl LBB0_999 + 0x4f, 0x8d, 0x0c, 0x23, //0x0000499c leaq (%r11,%r12), %r9 + 0x4d, 0x29, 0xe0, //0x000049a0 subq %r12, %r8 + 0x41, 0xbf, 0x1f, 0x00, 0x00, 0x00, //0x000049a3 movl $31, %r15d + 0x45, 0x31, 0xf6, //0x000049a9 xorl %r14d, %r14d + 0xf3, 0x0f, 0x6f, 0x05, 0x7c, 0xb6, 0xff, 0xff, //0x000049ac movdqu $-18820(%rip), %xmm0 /* LCPI0_3+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0x84, 0xb6, 0xff, 0xff, //0x000049b4 movdqu $-18812(%rip), %xmm1 /* LCPI0_4+0(%rip) */ + 0x45, 0x31, 0xd2, //0x000049bc xorl %r10d, %r10d + //0x000049bf LBB0_905 + 0xf3, 0x43, 0x0f, 0x6f, 0x54, 0x31, 0x01, //0x000049bf movdqu $1(%r9,%r14), %xmm2 + 0xf3, 0x43, 0x0f, 0x6f, 0x5c, 0x31, 0x11, //0x000049c6 movdqu $17(%r9,%r14), %xmm3 + 0x66, 0x0f, 0x6f, 0xe2, //0x000049cd movdqa %xmm2, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x000049d1 pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x000049d5 pmovmskb %xmm4, %ecx + 0x66, 0x0f, 0x6f, 0xe3, //0x000049d9 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x000049dd pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xd7, 0xf4, //0x000049e1 pmovmskb %xmm4, %esi + 0x48, 0xc1, 0xe6, 0x10, //0x000049e5 shlq $16, %rsi + 0x48, 0x09, 0xce, //0x000049e9 orq %rcx, %rsi + 0x66, 0x0f, 0x74, 0xd1, //0x000049ec pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x000049f0 pmovmskb %xmm2, %edx + 0x66, 0x0f, 0x74, 0xd9, //0x000049f4 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x000049f8 pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x10, //0x000049fc shlq $16, %rcx + 0x48, 0x09, 0xd1, //0x00004a00 orq %rdx, %rcx + 0x48, 0x89, 0xca, //0x00004a03 movq %rcx, %rdx + 0x4c, 0x09, 0xd2, //0x00004a06 orq %r10, %rdx + 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00004a09 je LBB0_907 + 0x44, 0x89, 0xd2, //0x00004a0f movl %r10d, %edx + 0xf7, 0xd2, //0x00004a12 notl %edx + 0x21, 0xca, //0x00004a14 andl %ecx, %edx + 0x8d, 0x1c, 0x12, //0x00004a16 leal (%rdx,%rdx), %ebx + 0x44, 0x09, 0xd3, //0x00004a19 orl %r10d, %ebx + 0x89, 0xdf, //0x00004a1c movl %ebx, %edi + 0xf7, 0xd7, //0x00004a1e notl %edi + 0x21, 0xcf, //0x00004a20 andl %ecx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00004a22 andl $-1431655766, %edi + 0x45, 0x31, 0xd2, //0x00004a28 xorl %r10d, %r10d + 0x01, 0xd7, //0x00004a2b addl %edx, %edi + 0x41, 0x0f, 0x92, 0xc2, //0x00004a2d setb %r10b + 0x01, 0xff, //0x00004a31 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00004a33 xorl $1431655765, %edi + 0x21, 0xdf, //0x00004a39 andl %ebx, %edi + 0xf7, 0xd7, //0x00004a3b notl %edi + 0x21, 0xfe, //0x00004a3d andl %edi, %esi + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00004a3f jmp LBB0_908 + //0x00004a44 LBB0_907 + 0x45, 0x31, 0xd2, //0x00004a44 xorl %r10d, %r10d + //0x00004a47 LBB0_908 + 0x48, 0x85, 0xf6, //0x00004a47 testq %rsi, %rsi + 0x0f, 0x85, 0x17, 0x09, 0x00, 0x00, //0x00004a4a jne LBB0_967 + 0x49, 0x83, 0xc6, 0x20, //0x00004a50 addq $32, %r14 + 0x4b, 0x8d, 0x0c, 0x38, //0x00004a54 leaq (%r8,%r15), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00004a58 addq $-32, %rcx + 0x49, 0x83, 0xc7, 0xe0, //0x00004a5c addq $-32, %r15 + 0x48, 0x83, 0xf9, 0x3f, //0x00004a60 cmpq $63, %rcx + 0x0f, 0x8f, 0x55, 0xff, 0xff, 0xff, //0x00004a64 jg LBB0_905 + 0x4d, 0x85, 0xd2, //0x00004a6a testq %r10, %r10 + 0x0f, 0x85, 0x36, 0x0b, 0x00, 0x00, //0x00004a6d jne LBB0_1001 + 0x4b, 0x8d, 0x3c, 0x0e, //0x00004a73 leaq (%r14,%r9), %rdi + 0x48, 0x83, 0xc7, 0x01, //0x00004a77 addq $1, %rdi + 0x49, 0xf7, 0xd6, //0x00004a7b notq %r14 + 0x4d, 0x01, 0xc6, //0x00004a7e addq %r8, %r14 + //0x00004a81 LBB0_912 + 0x4d, 0x85, 0xf6, //0x00004a81 testq %r14, %r14 + 0x0f, 0x8f, 0x20, 0x09, 0x00, 0x00, //0x00004a84 jg LBB0_970 + 0xe9, 0xda, 0xfc, 0xff, 0xff, //0x00004a8a jmp LBB0_874 + //0x00004a8f LBB0_913 + 0x49, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00004a8f movabsq $6148914691236517205, %r14 + 0x49, 0x8b, 0x09, //0x00004a99 movq (%r9), %rcx + 0x48, 0x29, 0xf9, //0x00004a9c subq %rdi, %rcx + 0x49, 0x01, 0xfb, //0x00004a9f addq %rdi, %r11 + 0x31, 0xd2, //0x00004aa2 xorl %edx, %edx + 0x48, 0x89, 0x55, 0xb0, //0x00004aa4 movq %rdx, $-80(%rbp) + 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0x8f, 0xb5, 0xff, 0xff, //0x00004aa8 movdqu $-19057(%rip), %xmm10 /* LCPI0_4+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0x77, 0xb5, 0xff, 0xff, //0x00004ab1 movdqu $-19081(%rip), %xmm1 /* LCPI0_3+0(%rip) */ + 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x00004ab9 pcmpeqd %xmm9, %xmm9 + 0xf3, 0x0f, 0x6f, 0x1d, 0xaa, 0xb5, 0xff, 0xff, //0x00004abe movdqu $-19030(%rip), %xmm3 /* LCPI0_7+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x25, 0x52, 0xb5, 0xff, 0xff, //0x00004ac6 movdqu $-19118(%rip), %xmm4 /* LCPI0_2+0(%rip) */ + 0x49, 0xb9, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00004ace movabsq $3689348814741910323, %r9 + 0x66, 0x45, 0x0f, 0xef, 0xc0, //0x00004ad8 pxor %xmm8, %xmm8 + 0x45, 0x31, 0xff, //0x00004add xorl %r15d, %r15d + 0x45, 0x31, 0xc0, //0x00004ae0 xorl %r8d, %r8d + 0x45, 0x31, 0xd2, //0x00004ae3 xorl %r10d, %r10d + 0xe9, 0x56, 0x00, 0x00, 0x00, //0x00004ae6 jmp LBB0_915 + //0x00004aeb LBB0_914 + 0x49, 0xc1, 0xfd, 0x3f, //0x00004aeb sarq $63, %r13 + 0x48, 0x89, 0xd9, //0x00004aef movq %rbx, %rcx + 0x48, 0xd1, 0xe9, //0x00004af2 shrq %rcx + 0x4c, 0x21, 0xf1, //0x00004af5 andq %r14, %rcx + 0x48, 0x29, 0xcb, //0x00004af8 subq %rcx, %rbx + 0x48, 0x89, 0xd9, //0x00004afb movq %rbx, %rcx + 0x4c, 0x21, 0xc9, //0x00004afe andq %r9, %rcx + 0x48, 0xc1, 0xeb, 0x02, //0x00004b01 shrq $2, %rbx + 0x4c, 0x21, 0xcb, //0x00004b05 andq %r9, %rbx + 0x48, 0x01, 0xcb, //0x00004b08 addq %rcx, %rbx + 0x48, 0x89, 0xd9, //0x00004b0b movq %rbx, %rcx + 0x48, 0xc1, 0xe9, 0x04, //0x00004b0e shrq $4, %rcx + 0x48, 0x01, 0xd9, //0x00004b12 addq %rbx, %rcx + 0x4c, 0x21, 0xf9, //0x00004b15 andq %r15, %rcx + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00004b18 movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xca, //0x00004b22 imulq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x00004b26 shrq $56, %rcx + 0x49, 0x01, 0xc8, //0x00004b2a addq %rcx, %r8 + 0x49, 0x83, 0xc3, 0x40, //0x00004b2d addq $64, %r11 + 0x48, 0x8b, 0x4d, 0xd0, //0x00004b31 movq $-48(%rbp), %rcx + 0x48, 0x83, 0xc1, 0xc0, //0x00004b35 addq $-64, %rcx + 0x4c, 0x89, 0x6d, 0xb0, //0x00004b39 movq %r13, $-80(%rbp) + 0x4c, 0x8b, 0x7d, 0xb8, //0x00004b3d movq $-72(%rbp), %r15 + //0x00004b41 LBB0_915 + 0x48, 0x83, 0xf9, 0x40, //0x00004b41 cmpq $64, %rcx + 0x48, 0x89, 0x4d, 0xd0, //0x00004b45 movq %rcx, $-48(%rbp) + 0x0f, 0x8c, 0x1e, 0x02, 0x00, 0x00, //0x00004b49 jl LBB0_922 + //0x00004b4f LBB0_916 + 0xf3, 0x41, 0x0f, 0x6f, 0x03, //0x00004b4f movdqu (%r11), %xmm0 + 0xf3, 0x41, 0x0f, 0x6f, 0x6b, 0x10, //0x00004b54 movdqu $16(%r11), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x7b, 0x20, //0x00004b5a movdqu $32(%r11), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x73, 0x30, //0x00004b60 movdqu $48(%r11), %xmm6 + 0x66, 0x0f, 0x6f, 0xd0, //0x00004b66 movdqa %xmm0, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004b6a pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xf2, //0x00004b6f pmovmskb %xmm2, %esi + 0x66, 0x0f, 0x6f, 0xd5, //0x00004b73 movdqa %xmm5, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004b77 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00004b7c pmovmskb %xmm2, %edx + 0x66, 0x0f, 0x6f, 0xd7, //0x00004b80 movdqa %xmm7, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004b84 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x00004b89 pmovmskb %xmm2, %edi + 0x66, 0x0f, 0x6f, 0xd6, //0x00004b8d movdqa %xmm6, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004b91 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x00004b96 pmovmskb %xmm2, %ebx + 0x48, 0xc1, 0xe3, 0x30, //0x00004b9a shlq $48, %rbx + 0x48, 0xc1, 0xe7, 0x20, //0x00004b9e shlq $32, %rdi + 0x48, 0x09, 0xdf, //0x00004ba2 orq %rbx, %rdi + 0x48, 0xc1, 0xe2, 0x10, //0x00004ba5 shlq $16, %rdx + 0x48, 0x09, 0xfa, //0x00004ba9 orq %rdi, %rdx + 0x48, 0x09, 0xd6, //0x00004bac orq %rdx, %rsi + 0x48, 0x89, 0xf2, //0x00004baf movq %rsi, %rdx + 0x4c, 0x09, 0xfa, //0x00004bb2 orq %r15, %rdx + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00004bb5 jne LBB0_918 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00004bbb movq $-1, %rsi + 0x31, 0xc9, //0x00004bc2 xorl %ecx, %ecx + 0x48, 0x89, 0x4d, 0xb8, //0x00004bc4 movq %rcx, $-72(%rbp) + 0xe9, 0x3e, 0x00, 0x00, 0x00, //0x00004bc8 jmp LBB0_919 + //0x00004bcd LBB0_918 + 0x4c, 0x89, 0xfa, //0x00004bcd movq %r15, %rdx + 0x48, 0xf7, 0xd2, //0x00004bd0 notq %rdx + 0x48, 0x21, 0xf2, //0x00004bd3 andq %rsi, %rdx + 0x48, 0x8d, 0x3c, 0x12, //0x00004bd6 leaq (%rdx,%rdx), %rdi + 0x4c, 0x09, 0xff, //0x00004bda orq %r15, %rdi + 0x48, 0x89, 0xf9, //0x00004bdd movq %rdi, %rcx + 0x48, 0xf7, 0xd1, //0x00004be0 notq %rcx + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00004be3 movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xde, //0x00004bed andq %rbx, %rsi + 0x48, 0x21, 0xce, //0x00004bf0 andq %rcx, %rsi + 0x31, 0xc9, //0x00004bf3 xorl %ecx, %ecx + 0x48, 0x01, 0xd6, //0x00004bf5 addq %rdx, %rsi + 0x0f, 0x92, 0xc1, //0x00004bf8 setb %cl + 0x48, 0x89, 0x4d, 0xb8, //0x00004bfb movq %rcx, $-72(%rbp) + 0x48, 0x01, 0xf6, //0x00004bff addq %rsi, %rsi + 0x4c, 0x31, 0xf6, //0x00004c02 xorq %r14, %rsi + 0x48, 0x21, 0xfe, //0x00004c05 andq %rdi, %rsi + 0x48, 0xf7, 0xd6, //0x00004c08 notq %rsi + //0x00004c0b LBB0_919 + 0x66, 0x0f, 0x6f, 0xd6, //0x00004c0b movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00004c0f pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00004c13 pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x30, //0x00004c17 shlq $48, %rdx + 0x66, 0x0f, 0x6f, 0xd7, //0x00004c1b movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00004c1f pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x00004c23 pmovmskb %xmm2, %edi + 0x48, 0xc1, 0xe7, 0x20, //0x00004c27 shlq $32, %rdi + 0x48, 0x09, 0xd7, //0x00004c2b orq %rdx, %rdi + 0x66, 0x0f, 0x6f, 0xd5, //0x00004c2e movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00004c32 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00004c36 pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x10, //0x00004c3a shlq $16, %rdx + 0x48, 0x09, 0xfa, //0x00004c3e orq %rdi, %rdx + 0x66, 0x0f, 0x6f, 0xd0, //0x00004c41 movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00004c45 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x00004c49 pmovmskb %xmm2, %edi + 0x48, 0x09, 0xd7, //0x00004c4d orq %rdx, %rdi + 0x48, 0x21, 0xf7, //0x00004c50 andq %rsi, %rdi + 0x66, 0x48, 0x0f, 0x6e, 0xd7, //0x00004c53 movq %rdi, %xmm2 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd1, 0x00, //0x00004c58 pclmulqdq $0, %xmm9, %xmm2 + 0x66, 0x49, 0x0f, 0x7e, 0xd5, //0x00004c5f movq %xmm2, %r13 + 0x4c, 0x33, 0x6d, 0xb0, //0x00004c64 xorq $-80(%rbp), %r13 + 0x66, 0x0f, 0x6f, 0xd0, //0x00004c68 movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00004c6c pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x00004c70 pmovmskb %xmm2, %ebx + 0x66, 0x0f, 0x6f, 0xd5, //0x00004c74 movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00004c78 pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00004c7c pmovmskb %xmm2, %edx + 0x66, 0x0f, 0x6f, 0xd7, //0x00004c80 movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00004c84 pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xf2, //0x00004c88 pmovmskb %xmm2, %esi + 0x66, 0x0f, 0x6f, 0xd6, //0x00004c8c movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00004c90 pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xca, //0x00004c94 pmovmskb %xmm2, %ecx + 0x48, 0xc1, 0xe1, 0x30, //0x00004c98 shlq $48, %rcx + 0x48, 0xc1, 0xe6, 0x20, //0x00004c9c shlq $32, %rsi + 0x48, 0x09, 0xce, //0x00004ca0 orq %rcx, %rsi + 0x48, 0xc1, 0xe2, 0x10, //0x00004ca3 shlq $16, %rdx + 0x48, 0x09, 0xf2, //0x00004ca7 orq %rsi, %rdx + 0x48, 0x09, 0xd3, //0x00004caa orq %rdx, %rbx + 0x4c, 0x89, 0xe9, //0x00004cad movq %r13, %rcx + 0x48, 0xf7, 0xd1, //0x00004cb0 notq %rcx + 0x48, 0x21, 0xcb, //0x00004cb3 andq %rcx, %rbx + 0x66, 0x0f, 0x74, 0xc4, //0x00004cb6 pcmpeqb %xmm4, %xmm0 + 0x66, 0x0f, 0xd7, 0xf0, //0x00004cba pmovmskb %xmm0, %esi + 0x66, 0x0f, 0x74, 0xec, //0x00004cbe pcmpeqb %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00004cc2 pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x74, 0xfc, //0x00004cc6 pcmpeqb %xmm4, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xf7, //0x00004cca pmovmskb %xmm7, %r14d + 0x66, 0x0f, 0x74, 0xf4, //0x00004ccf pcmpeqb %xmm4, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00004cd3 pmovmskb %xmm6, %r15d + 0x49, 0xc1, 0xe7, 0x30, //0x00004cd8 shlq $48, %r15 + 0x49, 0xc1, 0xe6, 0x20, //0x00004cdc shlq $32, %r14 + 0x4d, 0x09, 0xfe, //0x00004ce0 orq %r15, %r14 + 0x48, 0xc1, 0xe2, 0x10, //0x00004ce3 shlq $16, %rdx + 0x4c, 0x09, 0xf2, //0x00004ce7 orq %r14, %rdx + 0x48, 0x09, 0xd6, //0x00004cea orq %rdx, %rsi + 0x49, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00004ced movabsq $6148914691236517205, %r14 + 0x49, 0xbf, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00004cf7 movabsq $1085102592571150095, %r15 + 0x48, 0x21, 0xce, //0x00004d01 andq %rcx, %rsi + 0x0f, 0x84, 0xe1, 0xfd, 0xff, 0xff, //0x00004d04 je LBB0_914 + //0x00004d0a LBB0_920 + 0x48, 0x8d, 0x7e, 0xff, //0x00004d0a leaq $-1(%rsi), %rdi + 0x48, 0x89, 0xfa, //0x00004d0e movq %rdi, %rdx + 0x48, 0x21, 0xda, //0x00004d11 andq %rbx, %rdx + 0x48, 0x89, 0xd1, //0x00004d14 movq %rdx, %rcx + 0x48, 0xd1, 0xe9, //0x00004d17 shrq %rcx + 0x4c, 0x21, 0xf1, //0x00004d1a andq %r14, %rcx + 0x48, 0x29, 0xca, //0x00004d1d subq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x00004d20 movq %rdx, %rcx + 0x4c, 0x21, 0xc9, //0x00004d23 andq %r9, %rcx + 0x48, 0xc1, 0xea, 0x02, //0x00004d26 shrq $2, %rdx + 0x4c, 0x21, 0xca, //0x00004d2a andq %r9, %rdx + 0x48, 0x01, 0xca, //0x00004d2d addq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x00004d30 movq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x04, //0x00004d33 shrq $4, %rcx + 0x48, 0x01, 0xd1, //0x00004d37 addq %rdx, %rcx + 0x4c, 0x21, 0xf9, //0x00004d3a andq %r15, %rcx + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00004d3d movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xca, //0x00004d47 imulq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x00004d4b shrq $56, %rcx + 0x4c, 0x01, 0xc1, //0x00004d4f addq %r8, %rcx + 0x4c, 0x39, 0xd1, //0x00004d52 cmpq %r10, %rcx + 0x0f, 0x86, 0xcf, 0x05, 0x00, 0x00, //0x00004d55 jbe LBB0_966 + 0x49, 0x83, 0xc2, 0x01, //0x00004d5b addq $1, %r10 + 0x48, 0x21, 0xfe, //0x00004d5f andq %rdi, %rsi + 0x0f, 0x85, 0xa2, 0xff, 0xff, 0xff, //0x00004d62 jne LBB0_920 + 0xe9, 0x7e, 0xfd, 0xff, 0xff, //0x00004d68 jmp LBB0_914 + //0x00004d6d LBB0_922 + 0x48, 0x85, 0xc9, //0x00004d6d testq %rcx, %rcx + 0x0f, 0x8e, 0x27, 0x08, 0x00, 0x00, //0x00004d70 jle LBB0_1000 + 0x4c, 0x89, 0xfb, //0x00004d76 movq %r15, %rbx + 0xf3, 0x44, 0x0f, 0x7f, 0x45, 0x80, //0x00004d79 movdqu %xmm8, $-128(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x70, 0xff, 0xff, 0xff, //0x00004d7f movdqu %xmm8, $-144(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x00004d88 movdqu %xmm8, $-160(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x00004d91 movdqu %xmm8, $-176(%rbp) + 0x44, 0x89, 0xd9, //0x00004d9a movl %r11d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00004d9d andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00004da3 cmpl $4033, %ecx + 0x0f, 0x82, 0x3c, 0x00, 0x00, 0x00, //0x00004da9 jb LBB0_926 + 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x00004daf cmpq $32, $-48(%rbp) + 0x0f, 0x82, 0x43, 0x00, 0x00, 0x00, //0x00004db4 jb LBB0_927 + 0x41, 0x0f, 0x10, 0x03, //0x00004dba movups (%r11), %xmm0 + 0x0f, 0x11, 0x85, 0x50, 0xff, 0xff, 0xff, //0x00004dbe movups %xmm0, $-176(%rbp) + 0xf3, 0x41, 0x0f, 0x6f, 0x43, 0x10, //0x00004dc5 movdqu $16(%r11), %xmm0 + 0xf3, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x00004dcb movdqu %xmm0, $-160(%rbp) + 0x49, 0x83, 0xc3, 0x20, //0x00004dd3 addq $32, %r11 + 0x48, 0x8b, 0x4d, 0xd0, //0x00004dd7 movq $-48(%rbp), %rcx + 0x48, 0x8d, 0x79, 0xe0, //0x00004ddb leaq $-32(%rcx), %rdi + 0x48, 0x8d, 0xb5, 0x70, 0xff, 0xff, 0xff, //0x00004ddf leaq $-144(%rbp), %rsi + 0xe9, 0x1d, 0x00, 0x00, 0x00, //0x00004de6 jmp LBB0_928 + //0x00004deb LBB0_926 + 0x49, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00004deb movabsq $6148914691236517205, %r14 + 0x49, 0x89, 0xdf, //0x00004df5 movq %rbx, %r15 + 0xe9, 0x52, 0xfd, 0xff, 0xff, //0x00004df8 jmp LBB0_916 + //0x00004dfd LBB0_927 + 0x48, 0x8d, 0xb5, 0x50, 0xff, 0xff, 0xff, //0x00004dfd leaq $-176(%rbp), %rsi + 0x48, 0x8b, 0x7d, 0xd0, //0x00004e04 movq $-48(%rbp), %rdi + //0x00004e08 LBB0_928 + 0x48, 0x83, 0xff, 0x10, //0x00004e08 cmpq $16, %rdi + 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00004e0c jb LBB0_929 + 0xf3, 0x41, 0x0f, 0x6f, 0x03, //0x00004e12 movdqu (%r11), %xmm0 + 0xf3, 0x0f, 0x7f, 0x06, //0x00004e17 movdqu %xmm0, (%rsi) + 0x49, 0x83, 0xc3, 0x10, //0x00004e1b addq $16, %r11 + 0x48, 0x83, 0xc6, 0x10, //0x00004e1f addq $16, %rsi + 0x48, 0x83, 0xc7, 0xf0, //0x00004e23 addq $-16, %rdi + 0x48, 0x83, 0xff, 0x08, //0x00004e27 cmpq $8, %rdi + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00004e2b jae LBB0_936 + //0x00004e31 LBB0_930 + 0x48, 0x83, 0xff, 0x04, //0x00004e31 cmpq $4, %rdi + 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x00004e35 jl LBB0_931 + //0x00004e3b LBB0_937 + 0x41, 0x8b, 0x0b, //0x00004e3b movl (%r11), %ecx + 0x89, 0x0e, //0x00004e3e movl %ecx, (%rsi) + 0x49, 0x83, 0xc3, 0x04, //0x00004e40 addq $4, %r11 + 0x48, 0x83, 0xc6, 0x04, //0x00004e44 addq $4, %rsi + 0x48, 0x83, 0xc7, 0xfc, //0x00004e48 addq $-4, %rdi + 0x48, 0x83, 0xff, 0x02, //0x00004e4c cmpq $2, %rdi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00004e50 jae LBB0_932 + 0xe9, 0x43, 0x00, 0x00, 0x00, //0x00004e56 jmp LBB0_933 + //0x00004e5b LBB0_929 + 0x48, 0x83, 0xff, 0x08, //0x00004e5b cmpq $8, %rdi + 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x00004e5f jb LBB0_930 + //0x00004e65 LBB0_936 + 0x49, 0x8b, 0x0b, //0x00004e65 movq (%r11), %rcx + 0x48, 0x89, 0x0e, //0x00004e68 movq %rcx, (%rsi) + 0x49, 0x83, 0xc3, 0x08, //0x00004e6b addq $8, %r11 + 0x48, 0x83, 0xc6, 0x08, //0x00004e6f addq $8, %rsi + 0x48, 0x83, 0xc7, 0xf8, //0x00004e73 addq $-8, %rdi + 0x48, 0x83, 0xff, 0x04, //0x00004e77 cmpq $4, %rdi + 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x00004e7b jge LBB0_937 + //0x00004e81 LBB0_931 + 0x48, 0x83, 0xff, 0x02, //0x00004e81 cmpq $2, %rdi + 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x00004e85 jb LBB0_933 + //0x00004e8b LBB0_932 + 0x41, 0x0f, 0xb7, 0x0b, //0x00004e8b movzwl (%r11), %ecx + 0x66, 0x89, 0x0e, //0x00004e8f movw %cx, (%rsi) + 0x49, 0x83, 0xc3, 0x02, //0x00004e92 addq $2, %r11 + 0x48, 0x83, 0xc6, 0x02, //0x00004e96 addq $2, %rsi + 0x48, 0x83, 0xc7, 0xfe, //0x00004e9a addq $-2, %rdi + //0x00004e9e LBB0_933 + 0x4c, 0x89, 0xda, //0x00004e9e movq %r11, %rdx + 0x4c, 0x8d, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x00004ea1 leaq $-176(%rbp), %r11 + 0x48, 0x85, 0xff, //0x00004ea8 testq %rdi, %rdi + 0x49, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00004eab movabsq $6148914691236517205, %r14 + 0x49, 0x89, 0xdf, //0x00004eb5 movq %rbx, %r15 + 0x0f, 0x84, 0x91, 0xfc, 0xff, 0xff, //0x00004eb8 je LBB0_916 + 0x8a, 0x0a, //0x00004ebe movb (%rdx), %cl + 0x88, 0x0e, //0x00004ec0 movb %cl, (%rsi) + 0x4c, 0x8d, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x00004ec2 leaq $-176(%rbp), %r11 + 0xe9, 0x81, 0xfc, 0xff, 0xff, //0x00004ec9 jmp LBB0_916 + //0x00004ece LBB0_938 + 0x49, 0x8d, 0x4c, 0x24, 0x05, //0x00004ece leaq $5(%r12), %rcx + //0x00004ed3 LBB0_939 + 0x49, 0x3b, 0x09, //0x00004ed3 cmpq (%r9), %rcx + 0x0f, 0x87, 0x8d, 0xf8, 0xff, 0xff, //0x00004ed6 ja LBB0_874 + 0x48, 0x8b, 0x45, 0xc8, //0x00004edc movq $-56(%rbp), %rax + 0x48, 0x89, 0x08, //0x00004ee0 movq %rcx, (%rax) + 0x4c, 0x89, 0xe0, //0x00004ee3 movq %r12, %rax + 0xe9, 0x7e, 0xf8, 0xff, 0xff, //0x00004ee6 jmp LBB0_874 + //0x00004eeb LBB0_941 + 0x49, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00004eeb movabsq $6148914691236517205, %r14 + 0x49, 0x8b, 0x09, //0x00004ef5 movq (%r9), %rcx + 0x48, 0x29, 0xf9, //0x00004ef8 subq %rdi, %rcx + 0x49, 0x01, 0xfb, //0x00004efb addq %rdi, %r11 + 0x31, 0xd2, //0x00004efe xorl %edx, %edx + 0x48, 0x89, 0x55, 0xb0, //0x00004f00 movq %rdx, $-80(%rbp) + 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0x33, 0xb1, 0xff, 0xff, //0x00004f04 movdqu $-20173(%rip), %xmm10 /* LCPI0_4+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0x1b, 0xb1, 0xff, 0xff, //0x00004f0d movdqu $-20197(%rip), %xmm1 /* LCPI0_3+0(%rip) */ + 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x00004f15 pcmpeqd %xmm9, %xmm9 + 0xf3, 0x0f, 0x6f, 0x1d, 0x2e, 0xb1, 0xff, 0xff, //0x00004f1a movdqu $-20178(%rip), %xmm3 /* LCPI0_5+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x25, 0x36, 0xb1, 0xff, 0xff, //0x00004f22 movdqu $-20170(%rip), %xmm4 /* LCPI0_6+0(%rip) */ + 0x49, 0xb9, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00004f2a movabsq $3689348814741910323, %r9 + 0x66, 0x45, 0x0f, 0xef, 0xc0, //0x00004f34 pxor %xmm8, %xmm8 + 0x45, 0x31, 0xff, //0x00004f39 xorl %r15d, %r15d + 0x45, 0x31, 0xc0, //0x00004f3c xorl %r8d, %r8d + 0x45, 0x31, 0xd2, //0x00004f3f xorl %r10d, %r10d + 0xe9, 0x56, 0x00, 0x00, 0x00, //0x00004f42 jmp LBB0_943 + //0x00004f47 LBB0_942 + 0x49, 0xc1, 0xfd, 0x3f, //0x00004f47 sarq $63, %r13 + 0x48, 0x89, 0xd9, //0x00004f4b movq %rbx, %rcx + 0x48, 0xd1, 0xe9, //0x00004f4e shrq %rcx + 0x4c, 0x21, 0xf1, //0x00004f51 andq %r14, %rcx + 0x48, 0x29, 0xcb, //0x00004f54 subq %rcx, %rbx + 0x48, 0x89, 0xd9, //0x00004f57 movq %rbx, %rcx + 0x4c, 0x21, 0xc9, //0x00004f5a andq %r9, %rcx + 0x48, 0xc1, 0xeb, 0x02, //0x00004f5d shrq $2, %rbx + 0x4c, 0x21, 0xcb, //0x00004f61 andq %r9, %rbx + 0x48, 0x01, 0xcb, //0x00004f64 addq %rcx, %rbx + 0x48, 0x89, 0xd9, //0x00004f67 movq %rbx, %rcx + 0x48, 0xc1, 0xe9, 0x04, //0x00004f6a shrq $4, %rcx + 0x48, 0x01, 0xd9, //0x00004f6e addq %rbx, %rcx + 0x4c, 0x21, 0xf9, //0x00004f71 andq %r15, %rcx + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00004f74 movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xca, //0x00004f7e imulq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x00004f82 shrq $56, %rcx + 0x49, 0x01, 0xc8, //0x00004f86 addq %rcx, %r8 + 0x49, 0x83, 0xc3, 0x40, //0x00004f89 addq $64, %r11 + 0x48, 0x8b, 0x4d, 0xd0, //0x00004f8d movq $-48(%rbp), %rcx + 0x48, 0x83, 0xc1, 0xc0, //0x00004f91 addq $-64, %rcx + 0x4c, 0x89, 0x6d, 0xb0, //0x00004f95 movq %r13, $-80(%rbp) + 0x4c, 0x8b, 0x7d, 0xb8, //0x00004f99 movq $-72(%rbp), %r15 + //0x00004f9d LBB0_943 + 0x48, 0x83, 0xf9, 0x40, //0x00004f9d cmpq $64, %rcx + 0x48, 0x89, 0x4d, 0xd0, //0x00004fa1 movq %rcx, $-48(%rbp) + 0x0f, 0x8c, 0x1e, 0x02, 0x00, 0x00, //0x00004fa5 jl LBB0_950 + //0x00004fab LBB0_944 + 0xf3, 0x41, 0x0f, 0x6f, 0x03, //0x00004fab movdqu (%r11), %xmm0 + 0xf3, 0x41, 0x0f, 0x6f, 0x6b, 0x10, //0x00004fb0 movdqu $16(%r11), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x7b, 0x20, //0x00004fb6 movdqu $32(%r11), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x73, 0x30, //0x00004fbc movdqu $48(%r11), %xmm6 + 0x66, 0x0f, 0x6f, 0xd0, //0x00004fc2 movdqa %xmm0, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004fc6 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xf2, //0x00004fcb pmovmskb %xmm2, %esi + 0x66, 0x0f, 0x6f, 0xd5, //0x00004fcf movdqa %xmm5, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004fd3 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00004fd8 pmovmskb %xmm2, %edx + 0x66, 0x0f, 0x6f, 0xd7, //0x00004fdc movdqa %xmm7, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004fe0 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x00004fe5 pmovmskb %xmm2, %edi + 0x66, 0x0f, 0x6f, 0xd6, //0x00004fe9 movdqa %xmm6, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00004fed pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x00004ff2 pmovmskb %xmm2, %ebx + 0x48, 0xc1, 0xe3, 0x30, //0x00004ff6 shlq $48, %rbx + 0x48, 0xc1, 0xe7, 0x20, //0x00004ffa shlq $32, %rdi + 0x48, 0x09, 0xdf, //0x00004ffe orq %rbx, %rdi + 0x48, 0xc1, 0xe2, 0x10, //0x00005001 shlq $16, %rdx + 0x48, 0x09, 0xfa, //0x00005005 orq %rdi, %rdx + 0x48, 0x09, 0xd6, //0x00005008 orq %rdx, %rsi + 0x48, 0x89, 0xf2, //0x0000500b movq %rsi, %rdx + 0x4c, 0x09, 0xfa, //0x0000500e orq %r15, %rdx + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00005011 jne LBB0_946 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00005017 movq $-1, %rsi + 0x31, 0xc9, //0x0000501e xorl %ecx, %ecx + 0x48, 0x89, 0x4d, 0xb8, //0x00005020 movq %rcx, $-72(%rbp) + 0xe9, 0x3e, 0x00, 0x00, 0x00, //0x00005024 jmp LBB0_947 + //0x00005029 LBB0_946 + 0x4c, 0x89, 0xfa, //0x00005029 movq %r15, %rdx + 0x48, 0xf7, 0xd2, //0x0000502c notq %rdx + 0x48, 0x21, 0xf2, //0x0000502f andq %rsi, %rdx + 0x48, 0x8d, 0x3c, 0x12, //0x00005032 leaq (%rdx,%rdx), %rdi + 0x4c, 0x09, 0xff, //0x00005036 orq %r15, %rdi + 0x48, 0x89, 0xf9, //0x00005039 movq %rdi, %rcx + 0x48, 0xf7, 0xd1, //0x0000503c notq %rcx + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000503f movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xde, //0x00005049 andq %rbx, %rsi + 0x48, 0x21, 0xce, //0x0000504c andq %rcx, %rsi + 0x31, 0xc9, //0x0000504f xorl %ecx, %ecx + 0x48, 0x01, 0xd6, //0x00005051 addq %rdx, %rsi + 0x0f, 0x92, 0xc1, //0x00005054 setb %cl + 0x48, 0x89, 0x4d, 0xb8, //0x00005057 movq %rcx, $-72(%rbp) + 0x48, 0x01, 0xf6, //0x0000505b addq %rsi, %rsi + 0x4c, 0x31, 0xf6, //0x0000505e xorq %r14, %rsi + 0x48, 0x21, 0xfe, //0x00005061 andq %rdi, %rsi + 0x48, 0xf7, 0xd6, //0x00005064 notq %rsi + //0x00005067 LBB0_947 + 0x66, 0x0f, 0x6f, 0xd6, //0x00005067 movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x0000506b pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x0000506f pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x30, //0x00005073 shlq $48, %rdx + 0x66, 0x0f, 0x6f, 0xd7, //0x00005077 movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x0000507b pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x0000507f pmovmskb %xmm2, %edi + 0x48, 0xc1, 0xe7, 0x20, //0x00005083 shlq $32, %rdi + 0x48, 0x09, 0xd7, //0x00005087 orq %rdx, %rdi + 0x66, 0x0f, 0x6f, 0xd5, //0x0000508a movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x0000508e pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00005092 pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x10, //0x00005096 shlq $16, %rdx + 0x48, 0x09, 0xfa, //0x0000509a orq %rdi, %rdx + 0x66, 0x0f, 0x6f, 0xd0, //0x0000509d movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x000050a1 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x000050a5 pmovmskb %xmm2, %edi + 0x48, 0x09, 0xd7, //0x000050a9 orq %rdx, %rdi + 0x48, 0x21, 0xf7, //0x000050ac andq %rsi, %rdi + 0x66, 0x48, 0x0f, 0x6e, 0xd7, //0x000050af movq %rdi, %xmm2 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd1, 0x00, //0x000050b4 pclmulqdq $0, %xmm9, %xmm2 + 0x66, 0x49, 0x0f, 0x7e, 0xd5, //0x000050bb movq %xmm2, %r13 + 0x4c, 0x33, 0x6d, 0xb0, //0x000050c0 xorq $-80(%rbp), %r13 + 0x66, 0x0f, 0x6f, 0xd0, //0x000050c4 movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x000050c8 pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x000050cc pmovmskb %xmm2, %ebx + 0x66, 0x0f, 0x6f, 0xd5, //0x000050d0 movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x000050d4 pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x000050d8 pmovmskb %xmm2, %edx + 0x66, 0x0f, 0x6f, 0xd7, //0x000050dc movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x000050e0 pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xf2, //0x000050e4 pmovmskb %xmm2, %esi + 0x66, 0x0f, 0x6f, 0xd6, //0x000050e8 movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x000050ec pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xca, //0x000050f0 pmovmskb %xmm2, %ecx + 0x48, 0xc1, 0xe1, 0x30, //0x000050f4 shlq $48, %rcx + 0x48, 0xc1, 0xe6, 0x20, //0x000050f8 shlq $32, %rsi + 0x48, 0x09, 0xce, //0x000050fc orq %rcx, %rsi + 0x48, 0xc1, 0xe2, 0x10, //0x000050ff shlq $16, %rdx + 0x48, 0x09, 0xf2, //0x00005103 orq %rsi, %rdx + 0x48, 0x09, 0xd3, //0x00005106 orq %rdx, %rbx + 0x4c, 0x89, 0xe9, //0x00005109 movq %r13, %rcx + 0x48, 0xf7, 0xd1, //0x0000510c notq %rcx + 0x48, 0x21, 0xcb, //0x0000510f andq %rcx, %rbx + 0x66, 0x0f, 0x74, 0xc4, //0x00005112 pcmpeqb %xmm4, %xmm0 + 0x66, 0x0f, 0xd7, 0xf0, //0x00005116 pmovmskb %xmm0, %esi + 0x66, 0x0f, 0x74, 0xec, //0x0000511a pcmpeqb %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x0000511e pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x74, 0xfc, //0x00005122 pcmpeqb %xmm4, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xf7, //0x00005126 pmovmskb %xmm7, %r14d + 0x66, 0x0f, 0x74, 0xf4, //0x0000512b pcmpeqb %xmm4, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x0000512f pmovmskb %xmm6, %r15d + 0x49, 0xc1, 0xe7, 0x30, //0x00005134 shlq $48, %r15 + 0x49, 0xc1, 0xe6, 0x20, //0x00005138 shlq $32, %r14 + 0x4d, 0x09, 0xfe, //0x0000513c orq %r15, %r14 + 0x48, 0xc1, 0xe2, 0x10, //0x0000513f shlq $16, %rdx + 0x4c, 0x09, 0xf2, //0x00005143 orq %r14, %rdx + 0x48, 0x09, 0xd6, //0x00005146 orq %rdx, %rsi + 0x49, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00005149 movabsq $6148914691236517205, %r14 + 0x49, 0xbf, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00005153 movabsq $1085102592571150095, %r15 + 0x48, 0x21, 0xce, //0x0000515d andq %rcx, %rsi + 0x0f, 0x84, 0xe1, 0xfd, 0xff, 0xff, //0x00005160 je LBB0_942 + //0x00005166 LBB0_948 + 0x48, 0x8d, 0x7e, 0xff, //0x00005166 leaq $-1(%rsi), %rdi + 0x48, 0x89, 0xfa, //0x0000516a movq %rdi, %rdx + 0x48, 0x21, 0xda, //0x0000516d andq %rbx, %rdx + 0x48, 0x89, 0xd1, //0x00005170 movq %rdx, %rcx + 0x48, 0xd1, 0xe9, //0x00005173 shrq %rcx + 0x4c, 0x21, 0xf1, //0x00005176 andq %r14, %rcx + 0x48, 0x29, 0xca, //0x00005179 subq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x0000517c movq %rdx, %rcx + 0x4c, 0x21, 0xc9, //0x0000517f andq %r9, %rcx + 0x48, 0xc1, 0xea, 0x02, //0x00005182 shrq $2, %rdx + 0x4c, 0x21, 0xca, //0x00005186 andq %r9, %rdx + 0x48, 0x01, 0xca, //0x00005189 addq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x0000518c movq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x04, //0x0000518f shrq $4, %rcx + 0x48, 0x01, 0xd1, //0x00005193 addq %rdx, %rcx + 0x4c, 0x21, 0xf9, //0x00005196 andq %r15, %rcx + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00005199 movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xca, //0x000051a3 imulq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x000051a7 shrq $56, %rcx + 0x4c, 0x01, 0xc1, //0x000051ab addq %r8, %rcx + 0x4c, 0x39, 0xd1, //0x000051ae cmpq %r10, %rcx + 0x0f, 0x86, 0x73, 0x01, 0x00, 0x00, //0x000051b1 jbe LBB0_966 + 0x49, 0x83, 0xc2, 0x01, //0x000051b7 addq $1, %r10 + 0x48, 0x21, 0xfe, //0x000051bb andq %rdi, %rsi + 0x0f, 0x85, 0xa2, 0xff, 0xff, 0xff, //0x000051be jne LBB0_948 + 0xe9, 0x7e, 0xfd, 0xff, 0xff, //0x000051c4 jmp LBB0_942 + //0x000051c9 LBB0_950 + 0x48, 0x85, 0xc9, //0x000051c9 testq %rcx, %rcx + 0x0f, 0x8e, 0xcb, 0x03, 0x00, 0x00, //0x000051cc jle LBB0_1000 + 0x4c, 0x89, 0xfb, //0x000051d2 movq %r15, %rbx + 0xf3, 0x44, 0x0f, 0x7f, 0x45, 0x80, //0x000051d5 movdqu %xmm8, $-128(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x70, 0xff, 0xff, 0xff, //0x000051db movdqu %xmm8, $-144(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x000051e4 movdqu %xmm8, $-160(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x000051ed movdqu %xmm8, $-176(%rbp) + 0x44, 0x89, 0xd9, //0x000051f6 movl %r11d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x000051f9 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x000051ff cmpl $4033, %ecx + 0x0f, 0x82, 0x3c, 0x00, 0x00, 0x00, //0x00005205 jb LBB0_954 + 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x0000520b cmpq $32, $-48(%rbp) + 0x0f, 0x82, 0x43, 0x00, 0x00, 0x00, //0x00005210 jb LBB0_955 + 0x41, 0x0f, 0x10, 0x03, //0x00005216 movups (%r11), %xmm0 + 0x0f, 0x11, 0x85, 0x50, 0xff, 0xff, 0xff, //0x0000521a movups %xmm0, $-176(%rbp) + 0xf3, 0x41, 0x0f, 0x6f, 0x43, 0x10, //0x00005221 movdqu $16(%r11), %xmm0 + 0xf3, 0x0f, 0x7f, 0x85, 0x60, 0xff, 0xff, 0xff, //0x00005227 movdqu %xmm0, $-160(%rbp) + 0x49, 0x83, 0xc3, 0x20, //0x0000522f addq $32, %r11 + 0x48, 0x8b, 0x4d, 0xd0, //0x00005233 movq $-48(%rbp), %rcx + 0x48, 0x8d, 0x79, 0xe0, //0x00005237 leaq $-32(%rcx), %rdi + 0x48, 0x8d, 0xb5, 0x70, 0xff, 0xff, 0xff, //0x0000523b leaq $-144(%rbp), %rsi + 0xe9, 0x1d, 0x00, 0x00, 0x00, //0x00005242 jmp LBB0_956 + //0x00005247 LBB0_954 + 0x49, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00005247 movabsq $6148914691236517205, %r14 + 0x49, 0x89, 0xdf, //0x00005251 movq %rbx, %r15 + 0xe9, 0x52, 0xfd, 0xff, 0xff, //0x00005254 jmp LBB0_944 + //0x00005259 LBB0_955 + 0x48, 0x8d, 0xb5, 0x50, 0xff, 0xff, 0xff, //0x00005259 leaq $-176(%rbp), %rsi + 0x48, 0x8b, 0x7d, 0xd0, //0x00005260 movq $-48(%rbp), %rdi + //0x00005264 LBB0_956 + 0x48, 0x83, 0xff, 0x10, //0x00005264 cmpq $16, %rdi + 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00005268 jb LBB0_957 + 0xf3, 0x41, 0x0f, 0x6f, 0x03, //0x0000526e movdqu (%r11), %xmm0 + 0xf3, 0x0f, 0x7f, 0x06, //0x00005273 movdqu %xmm0, (%rsi) + 0x49, 0x83, 0xc3, 0x10, //0x00005277 addq $16, %r11 + 0x48, 0x83, 0xc6, 0x10, //0x0000527b addq $16, %rsi + 0x48, 0x83, 0xc7, 0xf0, //0x0000527f addq $-16, %rdi + 0x48, 0x83, 0xff, 0x08, //0x00005283 cmpq $8, %rdi + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00005287 jae LBB0_964 + //0x0000528d LBB0_958 + 0x48, 0x83, 0xff, 0x04, //0x0000528d cmpq $4, %rdi + 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x00005291 jl LBB0_959 + //0x00005297 LBB0_965 + 0x41, 0x8b, 0x0b, //0x00005297 movl (%r11), %ecx + 0x89, 0x0e, //0x0000529a movl %ecx, (%rsi) + 0x49, 0x83, 0xc3, 0x04, //0x0000529c addq $4, %r11 + 0x48, 0x83, 0xc6, 0x04, //0x000052a0 addq $4, %rsi + 0x48, 0x83, 0xc7, 0xfc, //0x000052a4 addq $-4, %rdi + 0x48, 0x83, 0xff, 0x02, //0x000052a8 cmpq $2, %rdi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x000052ac jae LBB0_960 + 0xe9, 0x43, 0x00, 0x00, 0x00, //0x000052b2 jmp LBB0_961 + //0x000052b7 LBB0_957 + 0x48, 0x83, 0xff, 0x08, //0x000052b7 cmpq $8, %rdi + 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x000052bb jb LBB0_958 + //0x000052c1 LBB0_964 + 0x49, 0x8b, 0x0b, //0x000052c1 movq (%r11), %rcx + 0x48, 0x89, 0x0e, //0x000052c4 movq %rcx, (%rsi) + 0x49, 0x83, 0xc3, 0x08, //0x000052c7 addq $8, %r11 + 0x48, 0x83, 0xc6, 0x08, //0x000052cb addq $8, %rsi + 0x48, 0x83, 0xc7, 0xf8, //0x000052cf addq $-8, %rdi + 0x48, 0x83, 0xff, 0x04, //0x000052d3 cmpq $4, %rdi + 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x000052d7 jge LBB0_965 + //0x000052dd LBB0_959 + 0x48, 0x83, 0xff, 0x02, //0x000052dd cmpq $2, %rdi + 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x000052e1 jb LBB0_961 + //0x000052e7 LBB0_960 + 0x41, 0x0f, 0xb7, 0x0b, //0x000052e7 movzwl (%r11), %ecx + 0x66, 0x89, 0x0e, //0x000052eb movw %cx, (%rsi) + 0x49, 0x83, 0xc3, 0x02, //0x000052ee addq $2, %r11 + 0x48, 0x83, 0xc6, 0x02, //0x000052f2 addq $2, %rsi + 0x48, 0x83, 0xc7, 0xfe, //0x000052f6 addq $-2, %rdi + //0x000052fa LBB0_961 + 0x4c, 0x89, 0xda, //0x000052fa movq %r11, %rdx + 0x4c, 0x8d, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x000052fd leaq $-176(%rbp), %r11 + 0x48, 0x85, 0xff, //0x00005304 testq %rdi, %rdi + 0x49, 0xbe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00005307 movabsq $6148914691236517205, %r14 + 0x49, 0x89, 0xdf, //0x00005311 movq %rbx, %r15 + 0x0f, 0x84, 0x91, 0xfc, 0xff, 0xff, //0x00005314 je LBB0_944 + 0x8a, 0x0a, //0x0000531a movb (%rdx), %cl + 0x88, 0x0e, //0x0000531c movb %cl, (%rsi) + 0x4c, 0x8d, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x0000531e leaq $-176(%rbp), %r11 + 0xe9, 0x81, 0xfc, 0xff, 0xff, //0x00005325 jmp LBB0_944 + //0x0000532a LBB0_966 + 0x48, 0x8b, 0x7d, 0xc0, //0x0000532a movq $-64(%rbp), %rdi + 0x48, 0x8b, 0x07, //0x0000532e movq (%rdi), %rax + 0x48, 0x0f, 0xbc, 0xce, //0x00005331 bsfq %rsi, %rcx + 0x48, 0x2b, 0x4d, 0xd0, //0x00005335 subq $-48(%rbp), %rcx + 0x48, 0x01, 0xc8, //0x00005339 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000533c addq $1, %rax + 0x48, 0x8b, 0x55, 0xc8, //0x00005340 movq $-56(%rbp), %rdx + 0x48, 0x89, 0x02, //0x00005344 movq %rax, (%rdx) + 0x48, 0x8b, 0x0f, //0x00005347 movq (%rdi), %rcx + 0x48, 0x39, 0xc8, //0x0000534a cmpq %rcx, %rax + 0x48, 0x0f, 0x47, 0xc1, //0x0000534d cmovaq %rcx, %rax + 0x48, 0x89, 0x02, //0x00005351 movq %rax, (%rdx) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00005354 movq $-1, %rax + 0x4c, 0x0f, 0x47, 0xe0, //0x0000535b cmovaq %rax, %r12 + 0x4c, 0x89, 0xe0, //0x0000535f movq %r12, %rax + 0xe9, 0x02, 0xf4, 0xff, 0xff, //0x00005362 jmp LBB0_874 + //0x00005367 LBB0_967 + 0x0f, 0xbc, 0xc6, //0x00005367 bsfl %esi, %eax + 0x4c, 0x01, 0xe0, //0x0000536a addq %r12, %rax + 0x4c, 0x01, 0xf0, //0x0000536d addq %r14, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00005370 addq $2, %rax + 0x48, 0x8b, 0x4d, 0xc8, //0x00005374 movq $-56(%rbp), %rcx + 0x48, 0x89, 0x01, //0x00005378 movq %rax, (%rcx) + 0x4c, 0x89, 0xe0, //0x0000537b movq %r12, %rax + 0xe9, 0xe6, 0xf3, 0xff, 0xff, //0x0000537e jmp LBB0_874 + //0x00005383 LBB0_979 + 0x48, 0x89, 0x17, //0x00005383 movq %rdx, (%rdi) + 0xe9, 0xde, 0xf3, 0xff, 0xff, //0x00005386 jmp LBB0_874 + //0x0000538b LBB0_968 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x0000538b movq $-2, %rcx + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00005392 movl $2, %eax + 0x48, 0x01, 0xc7, //0x00005397 addq %rax, %rdi + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000539a movq $-1, %rax + 0x49, 0x01, 0xce, //0x000053a1 addq %rcx, %r14 + 0x0f, 0x8e, 0xbf, 0xf3, 0xff, 0xff, //0x000053a4 jle LBB0_874 + //0x000053aa LBB0_970 + 0x0f, 0xb6, 0x07, //0x000053aa movzbl (%rdi), %eax + 0x3c, 0x5c, //0x000053ad cmpb $92, %al + 0x0f, 0x84, 0xd6, 0xff, 0xff, 0xff, //0x000053af je LBB0_968 + 0x3c, 0x22, //0x000053b5 cmpb $34, %al + 0x0f, 0x84, 0x87, 0x01, 0x00, 0x00, //0x000053b7 je LBB0_992 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000053bd movq $-1, %rcx + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000053c4 movl $1, %eax + 0x48, 0x01, 0xc7, //0x000053c9 addq %rax, %rdi + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000053cc movq $-1, %rax + 0x49, 0x01, 0xce, //0x000053d3 addq %rcx, %r14 + 0x0f, 0x8f, 0xce, 0xff, 0xff, 0xff, //0x000053d6 jg LBB0_970 + 0xe9, 0x88, 0xf3, 0xff, 0xff, //0x000053dc jmp LBB0_874 + //0x000053e1 LBB0_973 + 0x48, 0x8b, 0x7d, 0xb8, //0x000053e1 movq $-72(%rbp), %rdi + 0xe9, 0x80, 0xf5, 0xff, 0xff, //0x000053e5 jmp LBB0_901 + //0x000053ea LBB0_974 + 0x4c, 0x89, 0x9d, 0x48, 0xff, 0xff, 0xff, //0x000053ea movq %r11, $-184(%rbp) + //0x000053f1 LBB0_975 + 0x4c, 0x8b, 0x45, 0xc8, //0x000053f1 movq $-56(%rbp), %r8 + //0x000053f5 LBB0_976 + 0x48, 0x8b, 0x85, 0x48, 0xff, 0xff, 0xff, //0x000053f5 movq $-184(%rbp), %rax + 0x49, 0x89, 0x00, //0x000053fc movq %rax, (%r8) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000053ff movq $-1, %rax + 0xe9, 0x5e, 0xf3, 0xff, 0xff, //0x00005406 jmp LBB0_874 + //0x0000540b LBB0_977 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000540b movq $-1, %r15 + //0x00005412 LBB0_978 + 0x49, 0xf7, 0xd7, //0x00005412 notq %r15 + 0x4c, 0x01, 0xf8, //0x00005415 addq %r15, %rax + 0x48, 0x8b, 0x4d, 0xc8, //0x00005418 movq $-56(%rbp), %rcx + 0x48, 0x89, 0x01, //0x0000541c movq %rax, (%rcx) + 0xe9, 0x3e, 0xf3, 0xff, 0xff, //0x0000541f jmp LBB0_873 + //0x00005424 LBB0_981 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00005424 movq $-2, %rax + 0x80, 0xfa, 0x61, //0x0000542b cmpb $97, %dl + 0x0f, 0x85, 0x35, 0xf3, 0xff, 0xff, //0x0000542e jne LBB0_874 + 0x48, 0x8d, 0x51, 0x01, //0x00005434 leaq $1(%rcx), %rdx + 0x48, 0x89, 0x17, //0x00005438 movq %rdx, (%rdi) + 0x41, 0x80, 0x7c, 0x0d, 0x01, 0x6c, //0x0000543b cmpb $108, $1(%r13,%rcx) + 0x0f, 0x85, 0x22, 0xf3, 0xff, 0xff, //0x00005441 jne LBB0_874 + 0x48, 0x8d, 0x51, 0x02, //0x00005447 leaq $2(%rcx), %rdx + 0x48, 0x89, 0x17, //0x0000544b movq %rdx, (%rdi) + 0x41, 0x80, 0x7c, 0x0d, 0x02, 0x73, //0x0000544e cmpb $115, $2(%r13,%rcx) + 0x0f, 0x85, 0x0f, 0xf3, 0xff, 0xff, //0x00005454 jne LBB0_874 + 0x48, 0x8d, 0x51, 0x03, //0x0000545a leaq $3(%rcx), %rdx + 0x48, 0x89, 0x17, //0x0000545e movq %rdx, (%rdi) + 0x41, 0x80, 0x7c, 0x0d, 0x03, 0x65, //0x00005461 cmpb $101, $3(%r13,%rcx) + 0x0f, 0x85, 0xfc, 0xf2, 0xff, 0xff, //0x00005467 jne LBB0_874 + 0x48, 0x83, 0xc1, 0x04, //0x0000546d addq $4, %rcx + //0x00005471 LBB0_986 + 0x48, 0x8b, 0x55, 0xc8, //0x00005471 movq $-56(%rbp), %rdx + 0x48, 0x89, 0x0a, //0x00005475 movq %rcx, (%rdx) + 0xe9, 0xec, 0xf2, 0xff, 0xff, //0x00005478 jmp LBB0_874 + //0x0000547d LBB0_757 + 0x48, 0x89, 0x07, //0x0000547d movq %rax, (%rdi) + 0x41, 0x80, 0x7c, 0x05, 0x00, 0x6e, //0x00005480 cmpb $110, (%r13,%rax) + 0x0f, 0x85, 0xd6, 0xf2, 0xff, 0xff, //0x00005486 jne LBB0_873 + 0x48, 0x89, 0x0f, //0x0000548c movq %rcx, (%rdi) + 0x41, 0x80, 0x7c, 0x0d, 0x00, 0x75, //0x0000548f cmpb $117, (%r13,%rcx) + 0x0f, 0x85, 0xc7, 0xf2, 0xff, 0xff, //0x00005495 jne LBB0_873 + 0x48, 0x8d, 0x41, 0x01, //0x0000549b leaq $1(%rcx), %rax + 0x48, 0x89, 0x07, //0x0000549f movq %rax, (%rdi) + 0x41, 0x80, 0x7c, 0x0d, 0x01, 0x6c, //0x000054a2 cmpb $108, $1(%r13,%rcx) + 0x0f, 0x85, 0xb4, 0xf2, 0xff, 0xff, //0x000054a8 jne LBB0_873 + 0x48, 0x8d, 0x41, 0x02, //0x000054ae leaq $2(%rcx), %rax + 0x48, 0x89, 0x07, //0x000054b2 movq %rax, (%rdi) + 0x41, 0x80, 0x7c, 0x0d, 0x02, 0x6c, //0x000054b5 cmpb $108, $2(%r13,%rcx) + 0x0f, 0x85, 0xa1, 0xf2, 0xff, 0xff, //0x000054bb jne LBB0_873 + 0xe9, 0x44, 0x00, 0x00, 0x00, //0x000054c1 jmp LBB0_991 + //0x000054c6 LBB0_987 + 0x48, 0x89, 0x07, //0x000054c6 movq %rax, (%rdi) + 0x41, 0x80, 0x7c, 0x05, 0x00, 0x74, //0x000054c9 cmpb $116, (%r13,%rax) + 0x0f, 0x85, 0x8d, 0xf2, 0xff, 0xff, //0x000054cf jne LBB0_873 + 0x48, 0x89, 0x0f, //0x000054d5 movq %rcx, (%rdi) + 0x41, 0x80, 0x7c, 0x0d, 0x00, 0x72, //0x000054d8 cmpb $114, (%r13,%rcx) + 0x0f, 0x85, 0x7e, 0xf2, 0xff, 0xff, //0x000054de jne LBB0_873 + 0x48, 0x8d, 0x41, 0x01, //0x000054e4 leaq $1(%rcx), %rax + 0x48, 0x89, 0x07, //0x000054e8 movq %rax, (%rdi) + 0x41, 0x80, 0x7c, 0x0d, 0x01, 0x75, //0x000054eb cmpb $117, $1(%r13,%rcx) + 0x0f, 0x85, 0x6b, 0xf2, 0xff, 0xff, //0x000054f1 jne LBB0_873 + 0x48, 0x8d, 0x41, 0x02, //0x000054f7 leaq $2(%rcx), %rax + 0x48, 0x89, 0x07, //0x000054fb movq %rax, (%rdi) + 0x41, 0x80, 0x7c, 0x0d, 0x02, 0x65, //0x000054fe cmpb $101, $2(%r13,%rcx) + 0x0f, 0x85, 0x58, 0xf2, 0xff, 0xff, //0x00005504 jne LBB0_873 + //0x0000550a LBB0_991 + 0x48, 0x83, 0xc1, 0x03, //0x0000550a addq $3, %rcx + 0x48, 0x8b, 0x45, 0xc8, //0x0000550e movq $-56(%rbp), %rax + 0x48, 0x89, 0x08, //0x00005512 movq %rcx, (%rax) + 0xe9, 0x48, 0xf2, 0xff, 0xff, //0x00005515 jmp LBB0_873 + //0x0000551a LBB0_754 + 0x48, 0x83, 0xc1, 0xff, //0x0000551a addq $-1, %rcx + 0x48, 0x89, 0xc8, //0x0000551e movq %rcx, %rax + 0xe9, 0x43, 0xf2, 0xff, 0xff, //0x00005521 jmp LBB0_874 + //0x00005526 LBB0_781 + 0x48, 0x83, 0xc0, 0xff, //0x00005526 addq $-1, %rax + 0xe9, 0x3a, 0xf2, 0xff, 0xff, //0x0000552a jmp LBB0_874 + //0x0000552f LBB0_998 + 0x4c, 0x89, 0x45, 0xb8, //0x0000552f movq %r8, $-72(%rbp) + 0xe9, 0xf6, 0xf3, 0xff, 0xff, //0x00005533 jmp LBB0_823 + //0x00005538 LBB0_1003 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00005538 movq $-2, %rax + 0xe9, 0x2d, 0x00, 0x00, 0x00, //0x0000553f jmp LBB0_996 + //0x00005544 LBB0_992 + 0x4c, 0x29, 0xdf, //0x00005544 subq %r11, %rdi + 0x48, 0x83, 0xc7, 0x01, //0x00005547 addq $1, %rdi + 0x48, 0x8b, 0x45, 0xc8, //0x0000554b movq $-56(%rbp), %rax + 0x48, 0x89, 0x38, //0x0000554f movq %rdi, (%rax) + 0x4c, 0x89, 0xe0, //0x00005552 movq %r12, %rax + 0xe9, 0x0f, 0xf2, 0xff, 0xff, //0x00005555 jmp LBB0_874 + //0x0000555a LBB0_993 + 0x48, 0x83, 0xc7, 0x01, //0x0000555a addq $1, %rdi + 0x48, 0xc7, 0xc0, 0xfd, 0xff, 0xff, 0xff, //0x0000555e movq $-3, %rax + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00005565 jmp LBB0_995 + //0x0000556a LBB0_994 + 0x48, 0x83, 0xc7, 0x01, //0x0000556a addq $1, %rdi + //0x0000556e LBB0_995 + 0x49, 0x89, 0xf9, //0x0000556e movq %rdi, %r9 + //0x00005571 LBB0_996 + 0x4d, 0x29, 0xe9, //0x00005571 subq %r13, %r9 + 0x48, 0x8b, 0x4d, 0xc8, //0x00005574 movq $-56(%rbp), %rcx + 0x4c, 0x89, 0x09, //0x00005578 movq %r9, (%rcx) + 0xe9, 0xe9, 0xf1, 0xff, 0xff, //0x0000557b jmp LBB0_874 + //0x00005580 LBB0_997 + 0x4c, 0x01, 0xdf, //0x00005580 addq %r11, %rdi + 0x48, 0x8b, 0x5d, 0xc8, //0x00005583 movq $-56(%rbp), %rbx + 0x48, 0x85, 0xc0, //0x00005587 testq %rax, %rax + 0x0f, 0x85, 0xc5, 0xf2, 0xff, 0xff, //0x0000558a jne LBB0_885 + 0xe9, 0x08, 0xf3, 0xff, 0xff, //0x00005590 jmp LBB0_892 + //0x00005595 LBB0_999 + 0x4c, 0x01, 0xdf, //0x00005595 addq %r11, %rdi + 0xe9, 0xe4, 0xf4, 0xff, 0xff, //0x00005598 jmp LBB0_912 + //0x0000559d LBB0_1000 + 0x48, 0x8b, 0x4d, 0xc0, //0x0000559d movq $-64(%rbp), %rcx + 0x48, 0x8b, 0x09, //0x000055a1 movq (%rcx), %rcx + 0xe9, 0xc8, 0xfe, 0xff, 0xff, //0x000055a4 jmp LBB0_986 + //0x000055a9 LBB0_1001 + 0x49, 0x8d, 0x48, 0xff, //0x000055a9 leaq $-1(%r8), %rcx + 0x4c, 0x39, 0xf1, //0x000055ad cmpq %r14, %rcx + 0x0f, 0x84, 0xb3, 0xf1, 0xff, 0xff, //0x000055b0 je LBB0_874 + 0x4b, 0x8d, 0x3c, 0x0e, //0x000055b6 leaq (%r14,%r9), %rdi + 0x48, 0x83, 0xc7, 0x02, //0x000055ba addq $2, %rdi + 0x4d, 0x29, 0xf0, //0x000055be subq %r14, %r8 + 0x49, 0x83, 0xc0, 0xfe, //0x000055c1 addq $-2, %r8 + 0x4d, 0x89, 0xc6, //0x000055c5 movq %r8, %r14 + 0xe9, 0xb4, 0xf4, 0xff, 0xff, //0x000055c8 jmp LBB0_912 + 0x90, 0x90, 0x90, //0x000055cd .p2align 2, 0x90 + // // .set L0_0_set_436, LBB0_436-LJTI0_0 + // // .set L0_0_set_435, LBB0_435-LJTI0_0 + // // .set L0_0_set_421, LBB0_421-LJTI0_0 // // .set L0_0_set_401, LBB0_401-LJTI0_0 - // // .set L0_0_set_461, LBB0_461-LJTI0_0 - // // .set L0_0_set_428, LBB0_428-LJTI0_0 - // // .set L0_0_set_414, LBB0_414-LJTI0_0 - // // .set L0_0_set_487, LBB0_487-LJTI0_0 - //0x00005498 LJTI0_0 - 0x3e, 0xce, 0xff, 0xff, //0x00005498 .long L0_0_set_430 - 0x38, 0xce, 0xff, 0xff, //0x0000549c .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054a0 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054a4 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054a8 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054ac .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054b0 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054b4 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054b8 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054bc .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054c0 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054c4 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054c8 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054cc .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054d0 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054d4 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054d8 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054dc .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054e0 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054e4 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054e8 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054ec .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054f0 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054f4 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054f8 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000054fc .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005500 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005504 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005508 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x0000550c .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005510 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005514 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005518 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x0000551c .long L0_0_set_429 - 0x0d, 0xcd, 0xff, 0xff, //0x00005520 .long L0_0_set_415 - 0x38, 0xce, 0xff, 0xff, //0x00005524 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005528 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x0000552c .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005530 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005534 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005538 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x0000553c .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005540 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005544 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005548 .long L0_0_set_429 - 0x0e, 0xcc, 0xff, 0xff, //0x0000554c .long L0_0_set_401 - 0x38, 0xce, 0xff, 0xff, //0x00005550 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005554 .long L0_0_set_429 - 0x0e, 0xcc, 0xff, 0xff, //0x00005558 .long L0_0_set_401 - 0x0e, 0xcc, 0xff, 0xff, //0x0000555c .long L0_0_set_401 - 0x0e, 0xcc, 0xff, 0xff, //0x00005560 .long L0_0_set_401 - 0x0e, 0xcc, 0xff, 0xff, //0x00005564 .long L0_0_set_401 - 0x0e, 0xcc, 0xff, 0xff, //0x00005568 .long L0_0_set_401 - 0x0e, 0xcc, 0xff, 0xff, //0x0000556c .long L0_0_set_401 - 0x0e, 0xcc, 0xff, 0xff, //0x00005570 .long L0_0_set_401 - 0x0e, 0xcc, 0xff, 0xff, //0x00005574 .long L0_0_set_401 - 0x0e, 0xcc, 0xff, 0xff, //0x00005578 .long L0_0_set_401 - 0x0e, 0xcc, 0xff, 0xff, //0x0000557c .long L0_0_set_401 - 0x38, 0xce, 0xff, 0xff, //0x00005580 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005584 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005588 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x0000558c .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005590 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005594 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005598 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x0000559c .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055a0 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055a4 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055a8 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055ac .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055b0 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055b4 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055b8 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055bc .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055c0 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055c4 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055c8 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055cc .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055d0 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055d4 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055d8 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055dc .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055e0 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055e4 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055e8 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055ec .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055f0 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055f4 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055f8 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x000055fc .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005600 .long L0_0_set_429 - 0x97, 0xcf, 0xff, 0xff, //0x00005604 .long L0_0_set_461 - 0x38, 0xce, 0xff, 0xff, //0x00005608 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x0000560c .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005610 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005614 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005618 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x0000561c .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005620 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005624 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005628 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x0000562c .long L0_0_set_429 - 0x27, 0xce, 0xff, 0xff, //0x00005630 .long L0_0_set_428 - 0x38, 0xce, 0xff, 0xff, //0x00005634 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005638 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x0000563c .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005640 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005644 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005648 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x0000564c .long L0_0_set_429 - 0xfb, 0xcc, 0xff, 0xff, //0x00005650 .long L0_0_set_414 - 0x38, 0xce, 0xff, 0xff, //0x00005654 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005658 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x0000565c .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005660 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005664 .long L0_0_set_429 - 0xfb, 0xcc, 0xff, 0xff, //0x00005668 .long L0_0_set_414 - 0x38, 0xce, 0xff, 0xff, //0x0000566c .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005670 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005674 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005678 .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x0000567c .long L0_0_set_429 - 0x38, 0xce, 0xff, 0xff, //0x00005680 .long L0_0_set_429 - 0xcd, 0xd3, 0xff, 0xff, //0x00005684 .long L0_0_set_487 - // // .set L0_1_set_164, LBB0_164-LJTI0_1 - // // .set L0_1_set_231, LBB0_231-LJTI0_1 - // // .set L0_1_set_193, LBB0_193-LJTI0_1 + // // .set L0_0_set_467, LBB0_467-LJTI0_0 + // // .set L0_0_set_434, LBB0_434-LJTI0_0 + // // .set L0_0_set_420, LBB0_420-LJTI0_0 + // // .set L0_0_set_493, LBB0_493-LJTI0_0 + //0x000055d0 LJTI0_0 + 0x86, 0xcd, 0xff, 0xff, //0x000055d0 .long L0_0_set_436 + 0x80, 0xcd, 0xff, 0xff, //0x000055d4 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000055d8 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000055dc .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000055e0 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000055e4 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000055e8 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000055ec .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000055f0 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000055f4 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000055f8 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000055fc .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005600 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005604 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005608 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x0000560c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005610 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005614 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005618 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x0000561c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005620 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005624 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005628 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x0000562c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005630 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005634 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005638 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x0000563c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005640 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005644 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005648 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x0000564c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005650 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005654 .long L0_0_set_435 + 0x5e, 0xcc, 0xff, 0xff, //0x00005658 .long L0_0_set_421 + 0x80, 0xcd, 0xff, 0xff, //0x0000565c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005660 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005664 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005668 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x0000566c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005670 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005674 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005678 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x0000567c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005680 .long L0_0_set_435 + 0xf6, 0xca, 0xff, 0xff, //0x00005684 .long L0_0_set_401 + 0x80, 0xcd, 0xff, 0xff, //0x00005688 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x0000568c .long L0_0_set_435 + 0xf6, 0xca, 0xff, 0xff, //0x00005690 .long L0_0_set_401 + 0xf6, 0xca, 0xff, 0xff, //0x00005694 .long L0_0_set_401 + 0xf6, 0xca, 0xff, 0xff, //0x00005698 .long L0_0_set_401 + 0xf6, 0xca, 0xff, 0xff, //0x0000569c .long L0_0_set_401 + 0xf6, 0xca, 0xff, 0xff, //0x000056a0 .long L0_0_set_401 + 0xf6, 0xca, 0xff, 0xff, //0x000056a4 .long L0_0_set_401 + 0xf6, 0xca, 0xff, 0xff, //0x000056a8 .long L0_0_set_401 + 0xf6, 0xca, 0xff, 0xff, //0x000056ac .long L0_0_set_401 + 0xf6, 0xca, 0xff, 0xff, //0x000056b0 .long L0_0_set_401 + 0xf6, 0xca, 0xff, 0xff, //0x000056b4 .long L0_0_set_401 + 0x80, 0xcd, 0xff, 0xff, //0x000056b8 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056bc .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056c0 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056c4 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056c8 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056cc .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056d0 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056d4 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056d8 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056dc .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056e0 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056e4 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056e8 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056ec .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056f0 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056f4 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056f8 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000056fc .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005700 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005704 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005708 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x0000570c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005710 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005714 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005718 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x0000571c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005720 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005724 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005728 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x0000572c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005730 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005734 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005738 .long L0_0_set_435 + 0xdf, 0xce, 0xff, 0xff, //0x0000573c .long L0_0_set_467 + 0x80, 0xcd, 0xff, 0xff, //0x00005740 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005744 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005748 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x0000574c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005750 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005754 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005758 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x0000575c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005760 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005764 .long L0_0_set_435 + 0x6b, 0xcd, 0xff, 0xff, //0x00005768 .long L0_0_set_434 + 0x80, 0xcd, 0xff, 0xff, //0x0000576c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005770 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005774 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005778 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x0000577c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005780 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005784 .long L0_0_set_435 + 0x4c, 0xcc, 0xff, 0xff, //0x00005788 .long L0_0_set_420 + 0x80, 0xcd, 0xff, 0xff, //0x0000578c .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005790 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005794 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x00005798 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x0000579c .long L0_0_set_435 + 0x4c, 0xcc, 0xff, 0xff, //0x000057a0 .long L0_0_set_420 + 0x80, 0xcd, 0xff, 0xff, //0x000057a4 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000057a8 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000057ac .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000057b0 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000057b4 .long L0_0_set_435 + 0x80, 0xcd, 0xff, 0xff, //0x000057b8 .long L0_0_set_435 + 0x05, 0xd3, 0xff, 0xff, //0x000057bc .long L0_0_set_493 + // // .set L0_1_set_236, LBB0_236-LJTI0_1 + // // .set L0_1_set_206, LBB0_206-LJTI0_1 + // // .set L0_1_set_169, LBB0_169-LJTI0_1 // // .set L0_1_set_150, LBB0_150-LJTI0_1 - // // .set L0_1_set_204, LBB0_204-LJTI0_1 - // // .set L0_1_set_230, LBB0_230-LJTI0_1 - // // .set L0_1_set_192, LBB0_192-LJTI0_1 - // // .set L0_1_set_232, LBB0_232-LJTI0_1 - //0x00005688 LJTI0_1 - 0x96, 0xb4, 0xff, 0xff, //0x00005688 .long L0_1_set_164 - 0x66, 0xbb, 0xff, 0xff, //0x0000568c .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005690 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005694 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005698 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x0000569c .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056a0 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056a4 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056a8 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056ac .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056b0 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056b4 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056b8 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056bc .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056c0 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056c4 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056c8 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056cc .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056d0 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056d4 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056d8 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056dc .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056e0 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056e4 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056e8 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056ec .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056f0 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056f4 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056f8 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000056fc .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005700 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005704 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005708 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x0000570c .long L0_1_set_231 - 0xf8, 0xb5, 0xff, 0xff, //0x00005710 .long L0_1_set_193 - 0x66, 0xbb, 0xff, 0xff, //0x00005714 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005718 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x0000571c .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005720 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005724 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005728 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x0000572c .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005730 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005734 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005738 .long L0_1_set_231 - 0xb7, 0xb3, 0xff, 0xff, //0x0000573c .long L0_1_set_150 - 0x66, 0xbb, 0xff, 0xff, //0x00005740 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005744 .long L0_1_set_231 - 0xb7, 0xb3, 0xff, 0xff, //0x00005748 .long L0_1_set_150 - 0xb7, 0xb3, 0xff, 0xff, //0x0000574c .long L0_1_set_150 - 0xb7, 0xb3, 0xff, 0xff, //0x00005750 .long L0_1_set_150 - 0xb7, 0xb3, 0xff, 0xff, //0x00005754 .long L0_1_set_150 - 0xb7, 0xb3, 0xff, 0xff, //0x00005758 .long L0_1_set_150 - 0xb7, 0xb3, 0xff, 0xff, //0x0000575c .long L0_1_set_150 - 0xb7, 0xb3, 0xff, 0xff, //0x00005760 .long L0_1_set_150 - 0xb7, 0xb3, 0xff, 0xff, //0x00005764 .long L0_1_set_150 - 0xb7, 0xb3, 0xff, 0xff, //0x00005768 .long L0_1_set_150 - 0xb7, 0xb3, 0xff, 0xff, //0x0000576c .long L0_1_set_150 - 0x66, 0xbb, 0xff, 0xff, //0x00005770 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005774 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005778 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x0000577c .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005780 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005784 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005788 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x0000578c .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005790 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005794 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005798 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x0000579c .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057a0 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057a4 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057a8 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057ac .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057b0 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057b4 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057b8 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057bc .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057c0 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057c4 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057c8 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057cc .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057d0 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057d4 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057d8 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057dc .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057e0 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057e4 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057e8 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057ec .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057f0 .long L0_1_set_231 - 0x19, 0xb7, 0xff, 0xff, //0x000057f4 .long L0_1_set_204 - 0x66, 0xbb, 0xff, 0xff, //0x000057f8 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x000057fc .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005800 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005804 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005808 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x0000580c .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005810 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005814 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005818 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x0000581c .long L0_1_set_231 - 0x59, 0xbb, 0xff, 0xff, //0x00005820 .long L0_1_set_230 - 0x66, 0xbb, 0xff, 0xff, //0x00005824 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005828 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x0000582c .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005830 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005834 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005838 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x0000583c .long L0_1_set_231 - 0xe6, 0xb5, 0xff, 0xff, //0x00005840 .long L0_1_set_192 - 0x66, 0xbb, 0xff, 0xff, //0x00005844 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005848 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x0000584c .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005850 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005854 .long L0_1_set_231 - 0xe6, 0xb5, 0xff, 0xff, //0x00005858 .long L0_1_set_192 - 0x66, 0xbb, 0xff, 0xff, //0x0000585c .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005860 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005864 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005868 .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x0000586c .long L0_1_set_231 - 0x66, 0xbb, 0xff, 0xff, //0x00005870 .long L0_1_set_231 - 0x71, 0xbb, 0xff, 0xff, //0x00005874 .long L0_1_set_232 - // // .set L0_2_set_586, LBB0_586-LJTI0_2 - // // .set L0_2_set_593, LBB0_593-LJTI0_2 - // // .set L0_2_set_595, LBB0_595-LJTI0_2 - // // .set L0_2_set_615, LBB0_615-LJTI0_2 - // // .set L0_2_set_589, LBB0_589-LJTI0_2 - // // .set L0_2_set_617, LBB0_617-LJTI0_2 - //0x00005878 LJTI0_2 - 0x64, 0xd9, 0xff, 0xff, //0x00005878 .long L0_2_set_586 - 0x19, 0xdc, 0xff, 0xff, //0x0000587c .long L0_2_set_593 - 0x44, 0xdc, 0xff, 0xff, //0x00005880 .long L0_2_set_595 - 0x12, 0xde, 0xff, 0xff, //0x00005884 .long L0_2_set_615 - 0x7b, 0xd9, 0xff, 0xff, //0x00005888 .long L0_2_set_589 - 0x29, 0xde, 0xff, 0xff, //0x0000588c .long L0_2_set_617 - // // .set L0_3_set_870, LBB0_870-LJTI0_3 - // // .set L0_3_set_869, LBB0_869-LJTI0_3 - // // .set L0_3_set_693, LBB0_693-LJTI0_3 - // // .set L0_3_set_714, LBB0_714-LJTI0_3 - // // .set L0_3_set_619, LBB0_619-LJTI0_3 - // // .set L0_3_set_750, LBB0_750-LJTI0_3 - // // .set L0_3_set_752, LBB0_752-LJTI0_3 - // // .set L0_3_set_756, LBB0_756-LJTI0_3 - // // .set L0_3_set_762, LBB0_762-LJTI0_3 - // // .set L0_3_set_765, LBB0_765-LJTI0_3 - //0x00005890 LJTI0_3 - 0xc1, 0xed, 0xff, 0xff, //0x00005890 .long L0_3_set_870 - 0xba, 0xed, 0xff, 0xff, //0x00005894 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005898 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x0000589c .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058a0 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058a4 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058a8 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058ac .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058b0 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058b4 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058b8 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058bc .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058c0 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058c4 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058c8 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058cc .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058d0 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058d4 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058d8 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058dc .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058e0 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058e4 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058e8 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058ec .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058f0 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058f4 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058f8 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000058fc .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005900 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005904 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005908 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x0000590c .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005910 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005914 .long L0_3_set_869 - 0xdc, 0xe0, 0xff, 0xff, //0x00005918 .long L0_3_set_693 - 0xba, 0xed, 0xff, 0xff, //0x0000591c .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005920 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005924 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005928 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x0000592c .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005930 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005934 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005938 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x0000593c .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005940 .long L0_3_set_869 - 0x8a, 0xe2, 0xff, 0xff, //0x00005944 .long L0_3_set_714 - 0xba, 0xed, 0xff, 0xff, //0x00005948 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x0000594c .long L0_3_set_869 - 0xa1, 0xd9, 0xff, 0xff, //0x00005950 .long L0_3_set_619 - 0xa1, 0xd9, 0xff, 0xff, //0x00005954 .long L0_3_set_619 - 0xa1, 0xd9, 0xff, 0xff, //0x00005958 .long L0_3_set_619 - 0xa1, 0xd9, 0xff, 0xff, //0x0000595c .long L0_3_set_619 - 0xa1, 0xd9, 0xff, 0xff, //0x00005960 .long L0_3_set_619 - 0xa1, 0xd9, 0xff, 0xff, //0x00005964 .long L0_3_set_619 - 0xa1, 0xd9, 0xff, 0xff, //0x00005968 .long L0_3_set_619 - 0xa1, 0xd9, 0xff, 0xff, //0x0000596c .long L0_3_set_619 - 0xa1, 0xd9, 0xff, 0xff, //0x00005970 .long L0_3_set_619 - 0xa1, 0xd9, 0xff, 0xff, //0x00005974 .long L0_3_set_619 - 0xba, 0xed, 0xff, 0xff, //0x00005978 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x0000597c .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005980 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005984 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005988 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x0000598c .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005990 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005994 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005998 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x0000599c .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059a0 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059a4 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059a8 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059ac .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059b0 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059b4 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059b8 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059bc .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059c0 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059c4 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059c8 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059cc .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059d0 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059d4 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059d8 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059dc .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059e0 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059e4 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059e8 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059ec .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059f0 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059f4 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x000059f8 .long L0_3_set_869 - 0xc1, 0xe4, 0xff, 0xff, //0x000059fc .long L0_3_set_750 - 0xba, 0xed, 0xff, 0xff, //0x00005a00 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a04 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a08 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a0c .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a10 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a14 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a18 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a1c .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a20 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a24 .long L0_3_set_869 - 0xe5, 0xe4, 0xff, 0xff, //0x00005a28 .long L0_3_set_752 - 0xba, 0xed, 0xff, 0xff, //0x00005a2c .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a30 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a34 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a38 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a3c .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a40 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a44 .long L0_3_set_869 - 0x22, 0xe5, 0xff, 0xff, //0x00005a48 .long L0_3_set_756 - 0xba, 0xed, 0xff, 0xff, //0x00005a4c .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a50 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a54 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a58 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a5c .long L0_3_set_869 - 0x51, 0xe5, 0xff, 0xff, //0x00005a60 .long L0_3_set_762 - 0xba, 0xed, 0xff, 0xff, //0x00005a64 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a68 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a6c .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a70 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a74 .long L0_3_set_869 - 0xba, 0xed, 0xff, 0xff, //0x00005a78 .long L0_3_set_869 - 0x90, 0xe5, 0xff, 0xff, //0x00005a7c .long L0_3_set_765 - // // .set L0_4_set_739, LBB0_739-LJTI0_4 - // // .set L0_4_set_769, LBB0_769-LJTI0_4 - // // .set L0_4_set_745, LBB0_745-LJTI0_4 - // // .set L0_4_set_748, LBB0_748-LJTI0_4 - //0x00005a80 LJTI0_4 - 0x57, 0xe2, 0xff, 0xff, //0x00005a80 .long L0_4_set_739 - 0xee, 0xe3, 0xff, 0xff, //0x00005a84 .long L0_4_set_769 - 0x57, 0xe2, 0xff, 0xff, //0x00005a88 .long L0_4_set_739 - 0xa2, 0xe2, 0xff, 0xff, //0x00005a8c .long L0_4_set_745 - 0xee, 0xe3, 0xff, 0xff, //0x00005a90 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005a94 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005a98 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005a9c .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005aa0 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005aa4 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005aa8 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005aac .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005ab0 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005ab4 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005ab8 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005abc .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005ac0 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005ac4 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005ac8 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005acc .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005ad0 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005ad4 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005ad8 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005adc .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005ae0 .long L0_4_set_769 - 0xee, 0xe3, 0xff, 0xff, //0x00005ae4 .long L0_4_set_769 - 0xbe, 0xe2, 0xff, 0xff, //0x00005ae8 .long L0_4_set_748 - // // .set L0_5_set_644, LBB0_644-LJTI0_5 - // // .set L0_5_set_680, LBB0_680-LJTI0_5 - // // .set L0_5_set_650, LBB0_650-LJTI0_5 - // // .set L0_5_set_653, LBB0_653-LJTI0_5 - //0x00005aec LJTI0_5 - 0x30, 0xd9, 0xff, 0xff, //0x00005aec .long L0_5_set_644 - 0xec, 0xdd, 0xff, 0xff, //0x00005af0 .long L0_5_set_680 - 0x30, 0xd9, 0xff, 0xff, //0x00005af4 .long L0_5_set_644 - 0x76, 0xd9, 0xff, 0xff, //0x00005af8 .long L0_5_set_650 - 0xec, 0xdd, 0xff, 0xff, //0x00005afc .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b00 .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b04 .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b08 .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b0c .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b10 .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b14 .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b18 .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b1c .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b20 .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b24 .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b28 .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b2c .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b30 .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b34 .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b38 .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b3c .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b40 .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b44 .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b48 .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b4c .long L0_5_set_680 - 0xec, 0xdd, 0xff, 0xff, //0x00005b50 .long L0_5_set_680 - 0x92, 0xd9, 0xff, 0xff, //0x00005b54 .long L0_5_set_653 - // // .set L0_6_set_870, LBB0_870-LJTI0_6 - // // .set L0_6_set_892, LBB0_892-LJTI0_6 - // // .set L0_6_set_893, LBB0_893-LJTI0_6 - // // .set L0_6_set_876, LBB0_876-LJTI0_6 + // // .set L0_1_set_179, LBB0_179-LJTI0_1 + // // .set L0_1_set_205, LBB0_205-LJTI0_1 + // // .set L0_1_set_168, LBB0_168-LJTI0_1 + // // .set L0_1_set_207, LBB0_207-LJTI0_1 + //0x000057c0 LJTI0_1 + 0x30, 0xb9, 0xff, 0xff, //0x000057c0 .long L0_1_set_236 + 0x27, 0xb9, 0xff, 0xff, //0x000057c4 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000057c8 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000057cc .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000057d0 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000057d4 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000057d8 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000057dc .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000057e0 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000057e4 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000057e8 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000057ec .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000057f0 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000057f4 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000057f8 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000057fc .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005800 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005804 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005808 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x0000580c .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005810 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005814 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005818 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x0000581c .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005820 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005824 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005828 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x0000582c .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005830 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005834 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005838 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x0000583c .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005840 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005844 .long L0_1_set_206 + 0xfb, 0xb3, 0xff, 0xff, //0x00005848 .long L0_1_set_169 + 0x27, 0xb9, 0xff, 0xff, //0x0000584c .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005850 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005854 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005858 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x0000585c .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005860 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005864 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005868 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x0000586c .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005870 .long L0_1_set_206 + 0x7f, 0xb2, 0xff, 0xff, //0x00005874 .long L0_1_set_150 + 0x27, 0xb9, 0xff, 0xff, //0x00005878 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x0000587c .long L0_1_set_206 + 0x7f, 0xb2, 0xff, 0xff, //0x00005880 .long L0_1_set_150 + 0x7f, 0xb2, 0xff, 0xff, //0x00005884 .long L0_1_set_150 + 0x7f, 0xb2, 0xff, 0xff, //0x00005888 .long L0_1_set_150 + 0x7f, 0xb2, 0xff, 0xff, //0x0000588c .long L0_1_set_150 + 0x7f, 0xb2, 0xff, 0xff, //0x00005890 .long L0_1_set_150 + 0x7f, 0xb2, 0xff, 0xff, //0x00005894 .long L0_1_set_150 + 0x7f, 0xb2, 0xff, 0xff, //0x00005898 .long L0_1_set_150 + 0x7f, 0xb2, 0xff, 0xff, //0x0000589c .long L0_1_set_150 + 0x7f, 0xb2, 0xff, 0xff, //0x000058a0 .long L0_1_set_150 + 0x7f, 0xb2, 0xff, 0xff, //0x000058a4 .long L0_1_set_150 + 0x27, 0xb9, 0xff, 0xff, //0x000058a8 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058ac .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058b0 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058b4 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058b8 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058bc .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058c0 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058c4 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058c8 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058cc .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058d0 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058d4 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058d8 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058dc .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058e0 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058e4 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058e8 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058ec .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058f0 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058f4 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058f8 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000058fc .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005900 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005904 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005908 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x0000590c .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005910 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005914 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005918 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x0000591c .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005920 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005924 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005928 .long L0_1_set_206 + 0x13, 0xb5, 0xff, 0xff, //0x0000592c .long L0_1_set_179 + 0x27, 0xb9, 0xff, 0xff, //0x00005930 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005934 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005938 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x0000593c .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005940 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005944 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005948 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x0000594c .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005950 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005954 .long L0_1_set_206 + 0x1a, 0xb9, 0xff, 0xff, //0x00005958 .long L0_1_set_205 + 0x27, 0xb9, 0xff, 0xff, //0x0000595c .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005960 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005964 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005968 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x0000596c .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005970 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005974 .long L0_1_set_206 + 0xe9, 0xb3, 0xff, 0xff, //0x00005978 .long L0_1_set_168 + 0x27, 0xb9, 0xff, 0xff, //0x0000597c .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005980 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005984 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005988 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x0000598c .long L0_1_set_206 + 0xe9, 0xb3, 0xff, 0xff, //0x00005990 .long L0_1_set_168 + 0x27, 0xb9, 0xff, 0xff, //0x00005994 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x00005998 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x0000599c .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000059a0 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000059a4 .long L0_1_set_206 + 0x27, 0xb9, 0xff, 0xff, //0x000059a8 .long L0_1_set_206 + 0x6d, 0xb9, 0xff, 0xff, //0x000059ac .long L0_1_set_207 + // // .set L0_2_set_591, LBB0_591-LJTI0_2 + // // .set L0_2_set_598, LBB0_598-LJTI0_2 + // // .set L0_2_set_600, LBB0_600-LJTI0_2 + // // .set L0_2_set_619, LBB0_619-LJTI0_2 + // // .set L0_2_set_594, LBB0_594-LJTI0_2 + // // .set L0_2_set_621, LBB0_621-LJTI0_2 + //0x000059b0 LJTI0_2 + 0x8c, 0xd8, 0xff, 0xff, //0x000059b0 .long L0_2_set_591 + 0x41, 0xdb, 0xff, 0xff, //0x000059b4 .long L0_2_set_598 + 0x6c, 0xdb, 0xff, 0xff, //0x000059b8 .long L0_2_set_600 + 0x3a, 0xdd, 0xff, 0xff, //0x000059bc .long L0_2_set_619 + 0xa3, 0xd8, 0xff, 0xff, //0x000059c0 .long L0_2_set_594 + 0x51, 0xdd, 0xff, 0xff, //0x000059c4 .long L0_2_set_621 + // // .set L0_3_set_874, LBB0_874-LJTI0_3 + // // .set L0_3_set_873, LBB0_873-LJTI0_3 + // // .set L0_3_set_696, LBB0_696-LJTI0_3 + // // .set L0_3_set_713, LBB0_713-LJTI0_3 + // // .set L0_3_set_623, LBB0_623-LJTI0_3 + // // .set L0_3_set_749, LBB0_749-LJTI0_3 + // // .set L0_3_set_751, LBB0_751-LJTI0_3 + // // .set L0_3_set_755, LBB0_755-LJTI0_3 + // // .set L0_3_set_761, LBB0_761-LJTI0_3 + // // .set L0_3_set_764, LBB0_764-LJTI0_3 + //0x000059c8 LJTI0_3 + 0xa1, 0xed, 0xff, 0xff, //0x000059c8 .long L0_3_set_874 + 0x9a, 0xed, 0xff, 0xff, //0x000059cc .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x000059d0 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x000059d4 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x000059d8 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x000059dc .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x000059e0 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x000059e4 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x000059e8 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x000059ec .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x000059f0 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x000059f4 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x000059f8 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x000059fc .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a00 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a04 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a08 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a0c .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a10 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a14 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a18 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a1c .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a20 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a24 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a28 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a2c .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a30 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a34 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a38 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a3c .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a40 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a44 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a48 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a4c .long L0_3_set_873 + 0x04, 0xe0, 0xff, 0xff, //0x00005a50 .long L0_3_set_696 + 0x9a, 0xed, 0xff, 0xff, //0x00005a54 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a58 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a5c .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a60 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a64 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a68 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a6c .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a70 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a74 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a78 .long L0_3_set_873 + 0xb2, 0xe1, 0xff, 0xff, //0x00005a7c .long L0_3_set_713 + 0x9a, 0xed, 0xff, 0xff, //0x00005a80 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005a84 .long L0_3_set_873 + 0xc9, 0xd8, 0xff, 0xff, //0x00005a88 .long L0_3_set_623 + 0xc9, 0xd8, 0xff, 0xff, //0x00005a8c .long L0_3_set_623 + 0xc9, 0xd8, 0xff, 0xff, //0x00005a90 .long L0_3_set_623 + 0xc9, 0xd8, 0xff, 0xff, //0x00005a94 .long L0_3_set_623 + 0xc9, 0xd8, 0xff, 0xff, //0x00005a98 .long L0_3_set_623 + 0xc9, 0xd8, 0xff, 0xff, //0x00005a9c .long L0_3_set_623 + 0xc9, 0xd8, 0xff, 0xff, //0x00005aa0 .long L0_3_set_623 + 0xc9, 0xd8, 0xff, 0xff, //0x00005aa4 .long L0_3_set_623 + 0xc9, 0xd8, 0xff, 0xff, //0x00005aa8 .long L0_3_set_623 + 0xc9, 0xd8, 0xff, 0xff, //0x00005aac .long L0_3_set_623 + 0x9a, 0xed, 0xff, 0xff, //0x00005ab0 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005ab4 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005ab8 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005abc .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005ac0 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005ac4 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005ac8 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005acc .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005ad0 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005ad4 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005ad8 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005adc .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005ae0 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005ae4 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005ae8 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005aec .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005af0 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005af4 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005af8 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005afc .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b00 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b04 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b08 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b0c .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b10 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b14 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b18 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b1c .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b20 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b24 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b28 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b2c .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b30 .long L0_3_set_873 + 0xe0, 0xe3, 0xff, 0xff, //0x00005b34 .long L0_3_set_749 + 0x9a, 0xed, 0xff, 0xff, //0x00005b38 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b3c .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b40 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b44 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b48 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b4c .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b50 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b54 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b58 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b5c .long L0_3_set_873 + 0x04, 0xe4, 0xff, 0xff, //0x00005b60 .long L0_3_set_751 + 0x9a, 0xed, 0xff, 0xff, //0x00005b64 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b68 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b6c .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b70 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b74 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b78 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b7c .long L0_3_set_873 + 0x41, 0xe4, 0xff, 0xff, //0x00005b80 .long L0_3_set_755 + 0x9a, 0xed, 0xff, 0xff, //0x00005b84 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b88 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b8c .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b90 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005b94 .long L0_3_set_873 + 0x70, 0xe4, 0xff, 0xff, //0x00005b98 .long L0_3_set_761 + 0x9a, 0xed, 0xff, 0xff, //0x00005b9c .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005ba0 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005ba4 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005ba8 .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005bac .long L0_3_set_873 + 0x9a, 0xed, 0xff, 0xff, //0x00005bb0 .long L0_3_set_873 + 0xaf, 0xe4, 0xff, 0xff, //0x00005bb4 .long L0_3_set_764 + // // .set L0_4_set_738, LBB0_738-LJTI0_4 + // // .set L0_4_set_768, LBB0_768-LJTI0_4 + // // .set L0_4_set_744, LBB0_744-LJTI0_4 + // // .set L0_4_set_747, LBB0_747-LJTI0_4 + //0x00005bb8 LJTI0_4 + 0x78, 0xe1, 0xff, 0xff, //0x00005bb8 .long L0_4_set_738 + 0x0d, 0xe3, 0xff, 0xff, //0x00005bbc .long L0_4_set_768 + 0x78, 0xe1, 0xff, 0xff, //0x00005bc0 .long L0_4_set_738 + 0xc1, 0xe1, 0xff, 0xff, //0x00005bc4 .long L0_4_set_744 + 0x0d, 0xe3, 0xff, 0xff, //0x00005bc8 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005bcc .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005bd0 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005bd4 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005bd8 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005bdc .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005be0 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005be4 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005be8 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005bec .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005bf0 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005bf4 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005bf8 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005bfc .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005c00 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005c04 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005c08 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005c0c .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005c10 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005c14 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005c18 .long L0_4_set_768 + 0x0d, 0xe3, 0xff, 0xff, //0x00005c1c .long L0_4_set_768 + 0xdd, 0xe1, 0xff, 0xff, //0x00005c20 .long L0_4_set_747 + // // .set L0_5_set_648, LBB0_648-LJTI0_5 + // // .set L0_5_set_683, LBB0_683-LJTI0_5 + // // .set L0_5_set_654, LBB0_654-LJTI0_5 + // // .set L0_5_set_657, LBB0_657-LJTI0_5 + //0x00005c24 LJTI0_5 + 0x58, 0xd8, 0xff, 0xff, //0x00005c24 .long L0_5_set_648 + 0x14, 0xdd, 0xff, 0xff, //0x00005c28 .long L0_5_set_683 + 0x58, 0xd8, 0xff, 0xff, //0x00005c2c .long L0_5_set_648 + 0x9e, 0xd8, 0xff, 0xff, //0x00005c30 .long L0_5_set_654 + 0x14, 0xdd, 0xff, 0xff, //0x00005c34 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c38 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c3c .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c40 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c44 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c48 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c4c .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c50 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c54 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c58 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c5c .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c60 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c64 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c68 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c6c .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c70 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c74 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c78 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c7c .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c80 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c84 .long L0_5_set_683 + 0x14, 0xdd, 0xff, 0xff, //0x00005c88 .long L0_5_set_683 + 0xba, 0xd8, 0xff, 0xff, //0x00005c8c .long L0_5_set_657 + // // .set L0_6_set_874, LBB0_874-LJTI0_6 + // // .set L0_6_set_902, LBB0_902-LJTI0_6 // // .set L0_6_set_903, LBB0_903-LJTI0_6 - // // .set L0_6_set_929, LBB0_929-LJTI0_6 - // // .set L0_6_set_889, LBB0_889-LJTI0_6 - // // .set L0_6_set_932, LBB0_932-LJTI0_6 - //0x00005b58 LJTI0_6 - 0xf9, 0xea, 0xff, 0xff, //0x00005b58 .long L0_6_set_870 - 0xa3, 0xec, 0xff, 0xff, //0x00005b5c .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b60 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b64 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b68 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b6c .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b70 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b74 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b78 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b7c .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b80 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b84 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b88 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b8c .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b90 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b94 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b98 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005b9c .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005ba0 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005ba4 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005ba8 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bac .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bb0 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bb4 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bb8 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bbc .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bc0 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bc4 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bc8 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bcc .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bd0 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bd4 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bd8 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bdc .long L0_6_set_892 - 0xaf, 0xec, 0xff, 0xff, //0x00005be0 .long L0_6_set_893 - 0xa3, 0xec, 0xff, 0xff, //0x00005be4 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005be8 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bec .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bf0 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bf4 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bf8 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005bfc .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c00 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c04 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c08 .long L0_6_set_892 - 0x5a, 0xeb, 0xff, 0xff, //0x00005c0c .long L0_6_set_876 - 0xa3, 0xec, 0xff, 0xff, //0x00005c10 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c14 .long L0_6_set_892 - 0x5a, 0xeb, 0xff, 0xff, //0x00005c18 .long L0_6_set_876 - 0x5a, 0xeb, 0xff, 0xff, //0x00005c1c .long L0_6_set_876 - 0x5a, 0xeb, 0xff, 0xff, //0x00005c20 .long L0_6_set_876 - 0x5a, 0xeb, 0xff, 0xff, //0x00005c24 .long L0_6_set_876 - 0x5a, 0xeb, 0xff, 0xff, //0x00005c28 .long L0_6_set_876 - 0x5a, 0xeb, 0xff, 0xff, //0x00005c2c .long L0_6_set_876 - 0x5a, 0xeb, 0xff, 0xff, //0x00005c30 .long L0_6_set_876 - 0x5a, 0xeb, 0xff, 0xff, //0x00005c34 .long L0_6_set_876 - 0x5a, 0xeb, 0xff, 0xff, //0x00005c38 .long L0_6_set_876 - 0x5a, 0xeb, 0xff, 0xff, //0x00005c3c .long L0_6_set_876 - 0xa3, 0xec, 0xff, 0xff, //0x00005c40 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c44 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c48 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c4c .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c50 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c54 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c58 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c5c .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c60 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c64 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c68 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c6c .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c70 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c74 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c78 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c7c .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c80 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c84 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c88 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c8c .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c90 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c94 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c98 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005c9c .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005ca0 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005ca4 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005ca8 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005cac .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005cb0 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005cb4 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005cb8 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005cbc .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005cc0 .long L0_6_set_892 - 0xb5, 0xed, 0xff, 0xff, //0x00005cc4 .long L0_6_set_903 - 0xa3, 0xec, 0xff, 0xff, //0x00005cc8 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005ccc .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005cd0 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005cd4 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005cd8 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005cdc .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005ce0 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005ce4 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005ce8 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005cec .long L0_6_set_892 - 0x13, 0xf2, 0xff, 0xff, //0x00005cf0 .long L0_6_set_929 - 0xa3, 0xec, 0xff, 0xff, //0x00005cf4 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005cf8 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005cfc .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005d00 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005d04 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005d08 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005d0c .long L0_6_set_892 - 0x80, 0xec, 0xff, 0xff, //0x00005d10 .long L0_6_set_889 - 0xa3, 0xec, 0xff, 0xff, //0x00005d14 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005d18 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005d1c .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005d20 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005d24 .long L0_6_set_892 - 0x80, 0xec, 0xff, 0xff, //0x00005d28 .long L0_6_set_889 - 0xa3, 0xec, 0xff, 0xff, //0x00005d2c .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005d30 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005d34 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005d38 .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005d3c .long L0_6_set_892 - 0xa3, 0xec, 0xff, 0xff, //0x00005d40 .long L0_6_set_892 - 0x2f, 0xf2, 0xff, 0xff, //0x00005d44 .long L0_6_set_932 - //0x00005d48 .p2align 2, 0x00 - //0x00005d48 _MASK_USE_NUMBER - 0x02, 0x00, 0x00, 0x00, //0x00005d48 .long 2 - 0x00, 0x00, 0x00, 0x00, //0x00005d4c .p2align 4, 0x00 - //0x00005d50 __UnquoteTab - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005d50 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005d60 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, //0x00005d70 QUAD $0x0000000000220000; QUAD $0x2f00000000000000 // .ascii 16, '\x00\x00"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005d80 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005d90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, //0x00005da0 QUAD $0x0000000000000000; QUAD $0x0000005c00000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\\\x00\x00\x00' - 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, //0x00005db0 QUAD $0x000c000000080000; QUAD $0x000a000000000000 // .ascii 16, '\x00\x00\x08\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\n\x00' - 0x00, 0x00, 0x0d, 0x00, 0x09, 0xff, //0x00005dc0 LONG $0x000d0000; WORD $0xff09 // .ascii 6, '\x00\x00\r\x00\t\xff' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005dc6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005dd6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005de6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005df6 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005e06 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005e16 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005e26 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005e36 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005e46 QUAD $0x0000000000000000; WORD $0x0000 // .space 10, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + // // .set L0_6_set_880, LBB0_880-LJTI0_6 + // // .set L0_6_set_913, LBB0_913-LJTI0_6 + // // .set L0_6_set_938, LBB0_938-LJTI0_6 + // // .set L0_6_set_899, LBB0_899-LJTI0_6 + // // .set L0_6_set_941, LBB0_941-LJTI0_6 + //0x00005c90 LJTI0_6 + 0xd9, 0xea, 0xff, 0xff, //0x00005c90 .long L0_6_set_874 + 0xed, 0xec, 0xff, 0xff, //0x00005c94 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005c98 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005c9c .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005ca0 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005ca4 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005ca8 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cac .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cb0 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cb4 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cb8 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cbc .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cc0 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cc4 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cc8 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005ccc .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cd0 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cd4 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cd8 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cdc .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005ce0 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005ce4 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005ce8 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cec .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cf0 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cf4 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cf8 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005cfc .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d00 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d04 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d08 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d0c .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d10 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d14 .long L0_6_set_902 + 0xf9, 0xec, 0xff, 0xff, //0x00005d18 .long L0_6_set_903 + 0xed, 0xec, 0xff, 0xff, //0x00005d1c .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d20 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d24 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d28 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d2c .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d30 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d34 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d38 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d3c .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d40 .long L0_6_set_902 + 0x3b, 0xeb, 0xff, 0xff, //0x00005d44 .long L0_6_set_880 + 0xed, 0xec, 0xff, 0xff, //0x00005d48 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d4c .long L0_6_set_902 + 0x3b, 0xeb, 0xff, 0xff, //0x00005d50 .long L0_6_set_880 + 0x3b, 0xeb, 0xff, 0xff, //0x00005d54 .long L0_6_set_880 + 0x3b, 0xeb, 0xff, 0xff, //0x00005d58 .long L0_6_set_880 + 0x3b, 0xeb, 0xff, 0xff, //0x00005d5c .long L0_6_set_880 + 0x3b, 0xeb, 0xff, 0xff, //0x00005d60 .long L0_6_set_880 + 0x3b, 0xeb, 0xff, 0xff, //0x00005d64 .long L0_6_set_880 + 0x3b, 0xeb, 0xff, 0xff, //0x00005d68 .long L0_6_set_880 + 0x3b, 0xeb, 0xff, 0xff, //0x00005d6c .long L0_6_set_880 + 0x3b, 0xeb, 0xff, 0xff, //0x00005d70 .long L0_6_set_880 + 0x3b, 0xeb, 0xff, 0xff, //0x00005d74 .long L0_6_set_880 + 0xed, 0xec, 0xff, 0xff, //0x00005d78 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d7c .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d80 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d84 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d88 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d8c .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d90 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d94 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d98 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005d9c .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005da0 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005da4 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005da8 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005dac .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005db0 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005db4 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005db8 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005dbc .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005dc0 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005dc4 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005dc8 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005dcc .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005dd0 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005dd4 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005dd8 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005ddc .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005de0 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005de4 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005de8 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005dec .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005df0 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005df4 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005df8 .long L0_6_set_902 + 0xff, 0xed, 0xff, 0xff, //0x00005dfc .long L0_6_set_913 + 0xed, 0xec, 0xff, 0xff, //0x00005e00 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e04 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e08 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e0c .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e10 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e14 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e18 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e1c .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e20 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e24 .long L0_6_set_902 + 0x3e, 0xf2, 0xff, 0xff, //0x00005e28 .long L0_6_set_938 + 0xed, 0xec, 0xff, 0xff, //0x00005e2c .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e30 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e34 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e38 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e3c .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e40 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e44 .long L0_6_set_902 + 0xc9, 0xec, 0xff, 0xff, //0x00005e48 .long L0_6_set_899 + 0xed, 0xec, 0xff, 0xff, //0x00005e4c .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e50 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e54 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e58 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e5c .long L0_6_set_902 + 0xc9, 0xec, 0xff, 0xff, //0x00005e60 .long L0_6_set_899 + 0xed, 0xec, 0xff, 0xff, //0x00005e64 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e68 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e6c .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e70 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e74 .long L0_6_set_902 + 0xed, 0xec, 0xff, 0xff, //0x00005e78 .long L0_6_set_902 + 0x5b, 0xf2, 0xff, 0xff, //0x00005e7c .long L0_6_set_941 + //0x00005e80 .p2align 2, 0x00 + //0x00005e80 _MASK_USE_NUMBER + 0x02, 0x00, 0x00, 0x00, //0x00005e80 .long 2 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005e84 .p2align 4, 0x00 + //0x00005e90 __UnquoteTab + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005e90 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005ea0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, //0x00005eb0 QUAD $0x0000000000220000; QUAD $0x2f00000000000000 // .ascii 16, '\x00\x00"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005ec0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005ed0 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, //0x00005ee0 QUAD $0x0000000000000000; QUAD $0x0000005c00000000 // .ascii 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\\\x00\x00\x00' + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, //0x00005ef0 QUAD $0x000c000000080000; QUAD $0x000a000000000000 // .ascii 16, '\x00\x00\x08\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\n\x00' + 0x00, 0x00, 0x0d, 0x00, 0x09, 0xff, //0x00005f00 LONG $0x000d0000; WORD $0xff09 // .ascii 6, '\x00\x00\r\x00\t\xff' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f06 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f16 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f26 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f36 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f46 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f56 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f66 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f76 QUAD $0x0000000000000000; QUAD $0x0000000000000000 // .space 16, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00005f86 QUAD $0x0000000000000000; WORD $0x0000 // .space 10, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' } diff --git a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_array_subr.go b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_array_subr.go index e9f3f67..cb7825d 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_array_subr.go +++ b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_array_subr.go @@ -16,7 +16,7 @@ const ( ) const ( - _size__skip_array = 15328 + _size__skip_array = 15436 ) var ( @@ -28,15 +28,15 @@ var ( {0xc, 32}, {0xd, 40}, {0x14, 48}, - {0x394e, 184}, - {0x394f, 48}, - {0x3951, 40}, - {0x3953, 32}, - {0x3955, 24}, - {0x3957, 16}, - {0x3958, 8}, - {0x3959, 0}, - {0x3be0, 184}, + {0x39b6, 184}, + {0x39b7, 48}, + {0x39b9, 40}, + {0x39bb, 32}, + {0x39bd, 24}, + {0x39bf, 16}, + {0x39c0, 8}, + {0x39c1, 0}, + {0x3c4c, 184}, } ) diff --git a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_array_text_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_array_text_amd64.go index 1802875..00de5d1 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_array_text_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_array_text_amd64.go @@ -54,815 +54,818 @@ var _text_skip_array = []byte{ 0x48, 0x89, 0x7d, 0xa8, //0x0000011e movq %rdi, $-88(%rbp) 0x0f, 0x10, 0x05, 0xd7, 0xfe, 0xff, 0xff, //0x00000122 movups $-297(%rip), %xmm0 /* LCPI0_0+0(%rip) */ 0x0f, 0x11, 0x02, //0x00000129 movups %xmm0, (%rdx) - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000012c movq $-1, %rcx - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000133 movabsq $4294977024, %r11 - 0xf3, 0x0f, 0x6f, 0x05, 0xcb, 0xfe, 0xff, 0xff, //0x0000013d movdqu $-309(%rip), %xmm0 /* LCPI0_1+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0xd3, 0xfe, 0xff, 0xff, //0x00000145 movdqu $-301(%rip), %xmm1 /* LCPI0_2+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x25, 0xda, 0xfe, 0xff, 0xff, //0x0000014d movdqu $-294(%rip), %xmm12 /* LCPI0_3+0(%rip) */ - 0x66, 0x45, 0x0f, 0x76, 0xd2, //0x00000156 pcmpeqd %xmm10, %xmm10 - 0xf3, 0x44, 0x0f, 0x6f, 0x3d, 0x4c, 0xff, 0xff, 0xff, //0x0000015b movdqu $-180(%rip), %xmm15 /* LCPI0_11+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x0d, 0x23, 0xff, 0xff, 0xff, //0x00000164 movdqu $-221(%rip), %xmm9 /* LCPI0_9+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x7a, 0xff, 0xff, 0xff, //0x0000016d movdqu $-134(%rip), %xmm11 /* LCPI0_15+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x35, 0x01, 0xff, 0xff, 0xff, //0x00000176 movdqu $-255(%rip), %xmm14 /* LCPI0_8+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x15, 0xe9, 0xfe, 0xff, 0xff, //0x0000017f movdqu $-279(%rip), %xmm2 /* LCPI0_7+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xb0, 0xfe, 0xff, 0xff, //0x00000187 movdqu $-336(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x05, 0xb7, 0xfe, 0xff, 0xff, //0x00000190 movdqu $-329(%rip), %xmm8 /* LCPI0_5+0(%rip) */ - 0x48, 0x89, 0x75, 0xd0, //0x00000199 movq %rsi, $-48(%rbp) - 0x48, 0x89, 0x55, 0xb8, //0x0000019d movq %rdx, $-72(%rbp) - 0xe9, 0x7a, 0x00, 0x00, 0x00, //0x000001a1 jmp LBB0_6 - //0x000001a6 LBB0_613 - 0x66, 0x0f, 0xbc, 0xc2, //0x000001a6 bsfw %dx, %ax - 0x0f, 0xb7, 0xc0, //0x000001aa movzwl %ax, %eax - 0x48, 0x29, 0xc8, //0x000001ad subq %rcx, %rax - 0x49, 0x89, 0x06, //0x000001b0 movq %rax, (%r14) - 0x48, 0x85, 0xf6, //0x000001b3 testq %rsi, %rsi - 0x0f, 0x8e, 0x9d, 0x38, 0x00, 0x00, //0x000001b6 jle LBB0_614 - 0x90, 0x90, 0x90, 0x90, //0x000001bc .p2align 4, 0x90 - //0x000001c0 LBB0_4 - 0x4d, 0x8b, 0x45, 0x00, //0x000001c0 movq (%r13), %r8 - 0x48, 0x8b, 0x75, 0x90, //0x000001c4 movq $-112(%rbp), %rsi - 0x48, 0x89, 0xf1, //0x000001c8 movq %rsi, %rcx - 0x48, 0x89, 0xf0, //0x000001cb movq %rsi, %rax - 0x4d, 0x85, 0xc0, //0x000001ce testq %r8, %r8 - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x000001d1 jne LBB0_6 - 0xe9, 0x6b, 0x38, 0x00, 0x00, //0x000001d7 jmp LBB0_638 - //0x000001dc LBB0_1 - 0x49, 0xf7, 0xdb, //0x000001dc negq %r11 - 0x4d, 0x89, 0xdd, //0x000001df movq %r11, %r13 - //0x000001e2 LBB0_2 - 0x4d, 0x85, 0xed, //0x000001e2 testq %r13, %r13 - 0x0f, 0x88, 0x47, 0x38, 0x00, 0x00, //0x000001e5 js LBB0_612 - //0x000001eb LBB0_3 - 0x49, 0x01, 0xc5, //0x000001eb addq %rax, %r13 - 0x4c, 0x8b, 0x75, 0xd0, //0x000001ee movq $-48(%rbp), %r14 - 0x4d, 0x89, 0x2e, //0x000001f2 movq %r13, (%r14) - 0x48, 0x85, 0xc0, //0x000001f5 testq %rax, %rax - 0x4c, 0x8b, 0x6d, 0xb8, //0x000001f8 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000001fc movabsq $4294977024, %r11 - 0x0f, 0x89, 0xb4, 0xff, 0xff, 0xff, //0x00000206 jns LBB0_4 - 0xe9, 0x36, 0x38, 0x00, 0x00, //0x0000020c jmp LBB0_638 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000211 .p2align 4, 0x90 - //0x00000220 LBB0_6 - 0x48, 0x8b, 0x45, 0xa8, //0x00000220 movq $-88(%rbp), %rax - 0x4c, 0x8b, 0x20, //0x00000224 movq (%rax), %r12 - 0x48, 0x8b, 0x40, 0x08, //0x00000227 movq $8(%rax), %rax - 0x49, 0x8b, 0x16, //0x0000022b movq (%r14), %rdx - 0x48, 0x39, 0xc2, //0x0000022e cmpq %rax, %rdx - 0x0f, 0x83, 0x39, 0x00, 0x00, 0x00, //0x00000231 jae LBB0_11 - 0x41, 0x8a, 0x1c, 0x14, //0x00000237 movb (%r12,%rdx), %bl - 0x80, 0xfb, 0x0d, //0x0000023b cmpb $13, %bl - 0x0f, 0x84, 0x2c, 0x00, 0x00, 0x00, //0x0000023e je LBB0_11 - 0x80, 0xfb, 0x20, //0x00000244 cmpb $32, %bl - 0x0f, 0x84, 0x23, 0x00, 0x00, 0x00, //0x00000247 je LBB0_11 - 0x80, 0xc3, 0xf7, //0x0000024d addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000250 cmpb $1, %bl - 0x0f, 0x86, 0x17, 0x00, 0x00, 0x00, //0x00000253 jbe LBB0_11 - 0x48, 0x89, 0xd6, //0x00000259 movq %rdx, %rsi - 0xe9, 0x07, 0x01, 0x00, 0x00, //0x0000025c jmp LBB0_32 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000261 .p2align 4, 0x90 - //0x00000270 LBB0_11 - 0x48, 0x8d, 0x72, 0x01, //0x00000270 leaq $1(%rdx), %rsi - 0x48, 0x39, 0xc6, //0x00000274 cmpq %rax, %rsi - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000277 jae LBB0_15 - 0x41, 0x8a, 0x1c, 0x34, //0x0000027d movb (%r12,%rsi), %bl - 0x80, 0xfb, 0x0d, //0x00000281 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000284 je LBB0_15 - 0x80, 0xfb, 0x20, //0x0000028a cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000028d je LBB0_15 - 0x80, 0xc3, 0xf7, //0x00000293 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000296 cmpb $1, %bl - 0x0f, 0x87, 0xc9, 0x00, 0x00, 0x00, //0x00000299 ja LBB0_32 - 0x90, //0x0000029f .p2align 4, 0x90 - //0x000002a0 LBB0_15 - 0x48, 0x8d, 0x72, 0x02, //0x000002a0 leaq $2(%rdx), %rsi - 0x48, 0x39, 0xc6, //0x000002a4 cmpq %rax, %rsi - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000002a7 jae LBB0_19 - 0x41, 0x8a, 0x1c, 0x34, //0x000002ad movb (%r12,%rsi), %bl - 0x80, 0xfb, 0x0d, //0x000002b1 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000002b4 je LBB0_19 - 0x80, 0xfb, 0x20, //0x000002ba cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000002bd je LBB0_19 - 0x80, 0xc3, 0xf7, //0x000002c3 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x000002c6 cmpb $1, %bl - 0x0f, 0x87, 0x99, 0x00, 0x00, 0x00, //0x000002c9 ja LBB0_32 - 0x90, //0x000002cf .p2align 4, 0x90 - //0x000002d0 LBB0_19 - 0x48, 0x8d, 0x72, 0x03, //0x000002d0 leaq $3(%rdx), %rsi - 0x48, 0x39, 0xc6, //0x000002d4 cmpq %rax, %rsi - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000002d7 jae LBB0_23 - 0x41, 0x8a, 0x1c, 0x34, //0x000002dd movb (%r12,%rsi), %bl - 0x80, 0xfb, 0x0d, //0x000002e1 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000002e4 je LBB0_23 - 0x80, 0xfb, 0x20, //0x000002ea cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000002ed je LBB0_23 - 0x80, 0xc3, 0xf7, //0x000002f3 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x000002f6 cmpb $1, %bl - 0x0f, 0x87, 0x69, 0x00, 0x00, 0x00, //0x000002f9 ja LBB0_32 - 0x90, //0x000002ff .p2align 4, 0x90 - //0x00000300 LBB0_23 - 0x48, 0x83, 0xc2, 0x04, //0x00000300 addq $4, %rdx - 0x48, 0x39, 0xd0, //0x00000304 cmpq %rdx, %rax - 0x0f, 0x86, 0xd0, 0x36, 0x00, 0x00, //0x00000307 jbe LBB0_603 - 0x48, 0x39, 0xd0, //0x0000030d cmpq %rdx, %rax - 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00000310 je LBB0_29 - 0x49, 0x8d, 0x34, 0x04, //0x00000316 leaq (%r12,%rax), %rsi - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000031a .p2align 4, 0x90 - //0x00000320 LBB0_26 - 0x41, 0x0f, 0xbe, 0x3c, 0x14, //0x00000320 movsbl (%r12,%rdx), %edi - 0x83, 0xff, 0x20, //0x00000325 cmpl $32, %edi - 0x0f, 0x87, 0x2e, 0x00, 0x00, 0x00, //0x00000328 ja LBB0_31 - 0x49, 0x0f, 0xa3, 0xfb, //0x0000032e btq %rdi, %r11 - 0x0f, 0x83, 0x24, 0x00, 0x00, 0x00, //0x00000332 jae LBB0_31 - 0x48, 0x83, 0xc2, 0x01, //0x00000338 addq $1, %rdx - 0x48, 0x39, 0xd0, //0x0000033c cmpq %rdx, %rax - 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x0000033f jne LBB0_26 - 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x00000345 jmp LBB0_30 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000034a .p2align 4, 0x90 - //0x00000350 LBB0_29 - 0x4c, 0x01, 0xe2, //0x00000350 addq %r12, %rdx - 0x48, 0x89, 0xd6, //0x00000353 movq %rdx, %rsi - //0x00000356 LBB0_30 - 0x4c, 0x29, 0xe6, //0x00000356 subq %r12, %rsi - 0x48, 0x89, 0xf2, //0x00000359 movq %rsi, %rdx - //0x0000035c LBB0_31 - 0x48, 0x89, 0xd6, //0x0000035c movq %rdx, %rsi - 0x48, 0x39, 0xc2, //0x0000035f cmpq %rax, %rdx - 0x0f, 0x83, 0x78, 0x36, 0x00, 0x00, //0x00000362 jae LBB0_604 - //0x00000368 LBB0_32 - 0x48, 0x8d, 0x46, 0x01, //0x00000368 leaq $1(%rsi), %rax - 0x49, 0x89, 0x06, //0x0000036c movq %rax, (%r14) - 0x41, 0x0f, 0xbe, 0x3c, 0x34, //0x0000036f movsbl (%r12,%rsi), %edi - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000374 movq $-1, %rax - 0x85, 0xff, //0x0000037b testl %edi, %edi - 0x0f, 0x84, 0xc4, 0x36, 0x00, 0x00, //0x0000037d je LBB0_638 - 0x4d, 0x8b, 0x4d, 0x00, //0x00000383 movq (%r13), %r9 - 0x4d, 0x8d, 0x41, 0xff, //0x00000387 leaq $-1(%r9), %r8 - 0x43, 0x8b, 0x5c, 0xcd, 0x00, //0x0000038b movl (%r13,%r9,8), %ebx - 0x48, 0x83, 0xf9, 0xff, //0x00000390 cmpq $-1, %rcx - 0x48, 0x0f, 0x45, 0xf1, //0x00000394 cmovneq %rcx, %rsi - 0x83, 0xc3, 0xff, //0x00000398 addl $-1, %ebx - 0x83, 0xfb, 0x05, //0x0000039b cmpl $5, %ebx - 0x0f, 0x87, 0x82, 0x02, 0x00, 0x00, //0x0000039e ja LBB0_78 - 0x48, 0x8d, 0x15, 0x35, 0x39, 0x00, 0x00, //0x000003a4 leaq $14645(%rip), %rdx /* LJTI0_0+0(%rip) */ - 0x48, 0x63, 0x0c, 0x9a, //0x000003ab movslq (%rdx,%rbx,4), %rcx - 0x48, 0x01, 0xd1, //0x000003af addq %rdx, %rcx - 0xff, 0xe1, //0x000003b2 jmpq *%rcx - //0x000003b4 LBB0_35 - 0x83, 0xff, 0x2c, //0x000003b4 cmpl $44, %edi - 0x0f, 0x84, 0xec, 0x04, 0x00, 0x00, //0x000003b7 je LBB0_117 - 0x83, 0xff, 0x5d, //0x000003bd cmpl $93, %edi - 0x0f, 0x84, 0x48, 0x02, 0x00, 0x00, //0x000003c0 je LBB0_37 - 0xe9, 0x75, 0x36, 0x00, 0x00, //0x000003c6 jmp LBB0_637 - //0x000003cb LBB0_38 - 0x40, 0x80, 0xff, 0x5d, //0x000003cb cmpb $93, %dil - 0x0f, 0x84, 0x39, 0x02, 0x00, 0x00, //0x000003cf je LBB0_37 - 0x48, 0x89, 0x75, 0x90, //0x000003d5 movq %rsi, $-112(%rbp) - 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000003d9 movq $1, (%r13,%r9,8) - 0x83, 0xff, 0x7b, //0x000003e2 cmpl $123, %edi - 0x0f, 0x86, 0x4c, 0x02, 0x00, 0x00, //0x000003e5 jbe LBB0_79 - 0xe9, 0x50, 0x36, 0x00, 0x00, //0x000003eb jmp LBB0_637 - //0x000003f0 LBB0_40 - 0x40, 0x80, 0xff, 0x22, //0x000003f0 cmpb $34, %dil - 0x0f, 0x85, 0x46, 0x36, 0x00, 0x00, //0x000003f4 jne LBB0_637 - 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x04, 0x00, 0x00, 0x00, //0x000003fa movq $4, (%r13,%r9,8) - 0x48, 0x8b, 0x4d, 0x98, //0x00000403 movq $-104(%rbp), %rcx - 0xf6, 0xc1, 0x40, //0x00000407 testb $64, %cl - 0x48, 0x89, 0x75, 0x90, //0x0000040a movq %rsi, $-112(%rbp) - 0x0f, 0x85, 0x7c, 0x06, 0x00, 0x00, //0x0000040e jne LBB0_125 - 0x49, 0x8b, 0x16, //0x00000414 movq (%r14), %rdx - 0x48, 0x8b, 0x45, 0xa8, //0x00000417 movq $-88(%rbp), %rax - 0x48, 0x8b, 0x40, 0x08, //0x0000041b movq $8(%rax), %rax - 0xf6, 0xc1, 0x20, //0x0000041f testb $32, %cl - 0x48, 0x89, 0x45, 0xa0, //0x00000422 movq %rax, $-96(%rbp) - 0x48, 0x89, 0x55, 0xb0, //0x00000426 movq %rdx, $-80(%rbp) - 0x0f, 0x85, 0x5e, 0x09, 0x00, 0x00, //0x0000042a jne LBB0_157 - 0x49, 0x89, 0xc1, //0x00000430 movq %rax, %r9 - 0x49, 0x29, 0xd1, //0x00000433 subq %rdx, %r9 - 0x0f, 0x84, 0xc2, 0x37, 0x00, 0x00, //0x00000436 je LBB0_642 - 0x49, 0x83, 0xf9, 0x40, //0x0000043c cmpq $64, %r9 - 0x0f, 0x82, 0x4a, 0x2a, 0x00, 0x00, //0x00000440 jb LBB0_484 - 0x48, 0x8b, 0x45, 0xb0, //0x00000446 movq $-80(%rbp), %rax - 0x49, 0x89, 0xc6, //0x0000044a movq %rax, %r14 - 0x49, 0xf7, 0xd6, //0x0000044d notq %r14 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000450 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00000458 xorl %r8d, %r8d - 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000045b .p2align 4, 0x90 - //0x00000460 LBB0_46 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00000460 movdqu (%r12,%rax), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00000466 movdqu $16(%r12,%rax), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000046d movdqu $32(%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000474 movdqu $48(%r12,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xfb, //0x0000047b movdqa %xmm3, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000047f pcmpeqb %xmm0, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00000483 pmovmskb %xmm7, %r10d - 0x66, 0x0f, 0x6f, 0xfc, //0x00000488 movdqa %xmm4, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000048c pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xdf, //0x00000490 pmovmskb %xmm7, %ebx - 0x66, 0x0f, 0x6f, 0xfd, //0x00000494 movdqa %xmm5, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x00000498 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x0000049c pmovmskb %xmm7, %edi - 0x66, 0x0f, 0x6f, 0xfe, //0x000004a0 movdqa %xmm6, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000004a4 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xd7, //0x000004a8 pmovmskb %xmm7, %edx - 0x66, 0x0f, 0x74, 0xd9, //0x000004ac pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x000004b0 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x74, 0xe1, //0x000004b5 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x000004b9 pmovmskb %xmm4, %ecx - 0x66, 0x0f, 0x74, 0xe9, //0x000004bd pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x000004c1 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x74, 0xf1, //0x000004c5 pcmpeqb %xmm1, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x000004c9 pmovmskb %xmm6, %r15d - 0x48, 0xc1, 0xe2, 0x30, //0x000004ce shlq $48, %rdx - 0x48, 0xc1, 0xe7, 0x20, //0x000004d2 shlq $32, %rdi - 0x48, 0x09, 0xd7, //0x000004d6 orq %rdx, %rdi - 0x48, 0xc1, 0xe3, 0x10, //0x000004d9 shlq $16, %rbx - 0x48, 0x09, 0xfb, //0x000004dd orq %rdi, %rbx - 0x49, 0x09, 0xda, //0x000004e0 orq %rbx, %r10 - 0x49, 0xc1, 0xe7, 0x30, //0x000004e3 shlq $48, %r15 - 0x48, 0xc1, 0xe6, 0x20, //0x000004e7 shlq $32, %rsi - 0x4c, 0x09, 0xfe, //0x000004eb orq %r15, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x000004ee shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x000004f2 orq %rsi, %rcx - 0x49, 0x09, 0xcb, //0x000004f5 orq %rcx, %r11 - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000004f8 jne LBB0_55 - 0x4d, 0x85, 0xc0, //0x000004fe testq %r8, %r8 - 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x00000501 jne LBB0_57 - 0x45, 0x31, 0xc0, //0x00000507 xorl %r8d, %r8d - 0x4d, 0x85, 0xd2, //0x0000050a testq %r10, %r10 - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x0000050d jne LBB0_58 - //0x00000513 LBB0_49 - 0x49, 0x83, 0xc1, 0xc0, //0x00000513 addq $-64, %r9 - 0x49, 0x83, 0xc6, 0xc0, //0x00000517 addq $-64, %r14 - 0x48, 0x83, 0xc0, 0x40, //0x0000051b addq $64, %rax - 0x49, 0x83, 0xf9, 0x3f, //0x0000051f cmpq $63, %r9 - 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x00000523 ja LBB0_46 - 0xe9, 0xce, 0x21, 0x00, 0x00, //0x00000529 jmp LBB0_50 - //0x0000052e LBB0_55 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000052e cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00000533 jne LBB0_57 - 0x49, 0x0f, 0xbc, 0xcb, //0x00000539 bsfq %r11, %rcx - 0x48, 0x01, 0xc1, //0x0000053d addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00000540 movq %rcx, $-56(%rbp) - //0x00000544 LBB0_57 - 0x4c, 0x89, 0xc1, //0x00000544 movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00000547 notq %rcx - 0x4c, 0x21, 0xd9, //0x0000054a andq %r11, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x0000054d leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xc2, //0x00000551 orq %r8, %rdx - 0x48, 0x89, 0xd6, //0x00000554 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000557 notq %rsi - 0x4c, 0x21, 0xde, //0x0000055a andq %r11, %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000055d movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfe, //0x00000567 andq %rdi, %rsi - 0x45, 0x31, 0xc0, //0x0000056a xorl %r8d, %r8d - 0x48, 0x01, 0xce, //0x0000056d addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc0, //0x00000570 setb %r8b - 0x48, 0x01, 0xf6, //0x00000574 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000577 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00000581 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00000584 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000587 notq %rsi - 0x49, 0x21, 0xf2, //0x0000058a andq %rsi, %r10 - 0x4d, 0x85, 0xd2, //0x0000058d testq %r10, %r10 - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000590 je LBB0_49 - //0x00000596 LBB0_58 - 0x49, 0x0f, 0xbc, 0xc2, //0x00000596 bsfq %r10, %rax - 0x4c, 0x29, 0xf0, //0x0000059a subq %r14, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x0000059d movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000005a1 movabsq $4294977024, %r11 - 0xe9, 0xd6, 0x0c, 0x00, 0x00, //0x000005ab jmp LBB0_223 - //0x000005b0 LBB0_59 - 0x40, 0x80, 0xff, 0x3a, //0x000005b0 cmpb $58, %dil - 0x0f, 0x85, 0x86, 0x34, 0x00, 0x00, //0x000005b4 jne LBB0_637 - 0x48, 0x89, 0x75, 0x90, //0x000005ba movq %rsi, $-112(%rbp) - 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000005be movq $0, (%r13,%r9,8) - 0xe9, 0xf4, 0xfb, 0xff, 0xff, //0x000005c7 jmp LBB0_4 - //0x000005cc LBB0_61 - 0x83, 0xff, 0x2c, //0x000005cc cmpl $44, %edi - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000005cf jne LBB0_62 - 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000005d5 cmpq $4095, %r9 - 0x0f, 0x8f, 0x0a, 0x34, 0x00, 0x00, //0x000005dc jg LBB0_634 - 0x48, 0x89, 0x75, 0x90, //0x000005e2 movq %rsi, $-112(%rbp) - 0x49, 0x8d, 0x41, 0x01, //0x000005e6 leaq $1(%r9), %rax - 0x49, 0x89, 0x45, 0x00, //0x000005ea movq %rax, (%r13) - 0x4b, 0xc7, 0x44, 0xcd, 0x08, 0x03, 0x00, 0x00, 0x00, //0x000005ee movq $3, $8(%r13,%r9,8) - 0xe9, 0xc4, 0xfb, 0xff, 0xff, //0x000005f7 jmp LBB0_4 - //0x000005fc LBB0_63 - 0x83, 0xff, 0x22, //0x000005fc cmpl $34, %edi - 0x0f, 0x84, 0xcb, 0x02, 0x00, 0x00, //0x000005ff je LBB0_64 - //0x00000605 LBB0_62 - 0x83, 0xff, 0x7d, //0x00000605 cmpl $125, %edi - 0x0f, 0x85, 0x32, 0x34, 0x00, 0x00, //0x00000608 jne LBB0_637 - //0x0000060e LBB0_37 - 0x4d, 0x89, 0x45, 0x00, //0x0000060e movq %r8, (%r13) - 0x48, 0x89, 0xf1, //0x00000612 movq %rsi, %rcx - 0x48, 0x89, 0xf0, //0x00000615 movq %rsi, %rax - 0x4d, 0x85, 0xc0, //0x00000618 testq %r8, %r8 - 0x0f, 0x85, 0xff, 0xfb, 0xff, 0xff, //0x0000061b jne LBB0_6 - 0xe9, 0x21, 0x34, 0x00, 0x00, //0x00000621 jmp LBB0_638 - //0x00000626 LBB0_78 - 0x48, 0x89, 0x75, 0x90, //0x00000626 movq %rsi, $-112(%rbp) - 0x4d, 0x89, 0x45, 0x00, //0x0000062a movq %r8, (%r13) - 0x83, 0xff, 0x7b, //0x0000062e cmpl $123, %edi - 0x0f, 0x87, 0x09, 0x34, 0x00, 0x00, //0x00000631 ja LBB0_637 - //0x00000637 LBB0_79 - 0x89, 0xf9, //0x00000637 movl %edi, %ecx - 0x48, 0x8d, 0x15, 0xb8, 0x36, 0x00, 0x00, //0x00000639 leaq $14008(%rip), %rdx /* LJTI0_1+0(%rip) */ - 0x48, 0x63, 0x0c, 0x8a, //0x00000640 movslq (%rdx,%rcx,4), %rcx - 0x48, 0x01, 0xd1, //0x00000644 addq %rdx, %rcx - 0xff, 0xe1, //0x00000647 jmpq *%rcx - //0x00000649 LBB0_80 - 0x48, 0x8b, 0x45, 0xa8, //0x00000649 movq $-88(%rbp), %rax - 0x48, 0x8b, 0x78, 0x08, //0x0000064d movq $8(%rax), %rdi - 0x49, 0x8b, 0x36, //0x00000651 movq (%r14), %rsi - 0xf6, 0x45, 0x98, 0x40, //0x00000654 testb $64, $-104(%rbp) - 0x0f, 0x85, 0x40, 0x05, 0x00, 0x00, //0x00000658 jne LBB0_135 - 0x48, 0x8d, 0x46, 0xff, //0x0000065e leaq $-1(%rsi), %rax - 0x48, 0x29, 0xc7, //0x00000662 subq %rax, %rdi - 0x0f, 0x84, 0xc0, 0x33, 0x00, 0x00, //0x00000665 je LBB0_611 - 0x4d, 0x8d, 0x34, 0x34, //0x0000066b leaq (%r12,%rsi), %r14 - 0x49, 0x83, 0xc6, 0xff, //0x0000066f addq $-1, %r14 - 0x41, 0x80, 0x3e, 0x30, //0x00000673 cmpb $48, (%r14) - 0x0f, 0x85, 0x37, 0x00, 0x00, 0x00, //0x00000677 jne LBB0_86 - 0x41, 0xbd, 0x01, 0x00, 0x00, 0x00, //0x0000067d movl $1, %r13d - 0x48, 0x83, 0xff, 0x01, //0x00000683 cmpq $1, %rdi - 0x0f, 0x84, 0x5e, 0xfb, 0xff, 0xff, //0x00000687 je LBB0_3 - 0x41, 0x8a, 0x0c, 0x34, //0x0000068d movb (%r12,%rsi), %cl - 0x80, 0xc1, 0xd2, //0x00000691 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x00000694 cmpb $55, %cl - 0x0f, 0x87, 0x4e, 0xfb, 0xff, 0xff, //0x00000697 ja LBB0_3 - 0x0f, 0xb6, 0xc9, //0x0000069d movzbl %cl, %ecx - 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x000006a0 movabsq $36028797027352577, %rdx - 0x48, 0x0f, 0xa3, 0xca, //0x000006aa btq %rcx, %rdx - 0x0f, 0x83, 0x37, 0xfb, 0xff, 0xff, //0x000006ae jae LBB0_3 - //0x000006b4 LBB0_86 - 0x48, 0x89, 0x75, 0xc0, //0x000006b4 movq %rsi, $-64(%rbp) - 0x48, 0x83, 0xff, 0x10, //0x000006b8 cmpq $16, %rdi - 0x0f, 0x82, 0x14, 0x27, 0x00, 0x00, //0x000006bc jb LBB0_472 - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000006c2 movq $-1, %r9 - 0x45, 0x31, 0xed, //0x000006c9 xorl %r13d, %r13d - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000006cc movq $-1, %r15 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000006d3 movq $-1, %r8 - 0x49, 0x89, 0xfa, //0x000006da movq %rdi, %r10 - 0x90, 0x90, 0x90, //0x000006dd .p2align 4, 0x90 - //0x000006e0 LBB0_88 - 0xf3, 0x43, 0x0f, 0x6f, 0x1c, 0x2e, //0x000006e0 movdqu (%r14,%r13), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x000006e6 movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x64, 0x25, 0xae, 0xf9, 0xff, 0xff, //0x000006ea pcmpgtb $-1618(%rip), %xmm4 /* LCPI0_10+0(%rip) */ - 0x66, 0x41, 0x0f, 0x6f, 0xef, //0x000006f2 movdqa %xmm15, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x000006f7 pcmpgtb %xmm3, %xmm5 - 0x66, 0x0f, 0xdb, 0xec, //0x000006fb pand %xmm4, %xmm5 - 0x66, 0x0f, 0x6f, 0xe3, //0x000006ff movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x74, 0x25, 0xb5, 0xf9, 0xff, 0xff, //0x00000703 pcmpeqb $-1611(%rip), %xmm4 /* LCPI0_12+0(%rip) */ - 0x66, 0x0f, 0x6f, 0xf3, //0x0000070b movdqa %xmm3, %xmm6 - 0x66, 0x0f, 0x74, 0x35, 0xb9, 0xf9, 0xff, 0xff, //0x0000070f pcmpeqb $-1607(%rip), %xmm6 /* LCPI0_13+0(%rip) */ - 0x66, 0x0f, 0xeb, 0xf4, //0x00000717 por %xmm4, %xmm6 - 0x66, 0x0f, 0x6f, 0xe3, //0x0000071b movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xe1, //0x0000071f pand %xmm9, %xmm4 - 0x66, 0x0f, 0x74, 0x1d, 0xb4, 0xf9, 0xff, 0xff, //0x00000724 pcmpeqb $-1612(%rip), %xmm3 /* LCPI0_14+0(%rip) */ - 0x66, 0x41, 0x0f, 0x74, 0xe3, //0x0000072c pcmpeqb %xmm11, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x00000731 pmovmskb %xmm4, %edx - 0x66, 0x0f, 0xeb, 0xe3, //0x00000735 por %xmm3, %xmm4 - 0x66, 0x0f, 0xeb, 0xee, //0x00000739 por %xmm6, %xmm5 - 0x66, 0x0f, 0xeb, 0xec, //0x0000073d por %xmm4, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000741 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0xd7, 0xf6, //0x00000746 pmovmskb %xmm6, %esi - 0x66, 0x0f, 0xd7, 0xcd, //0x0000074a pmovmskb %xmm5, %ecx - 0xf7, 0xd1, //0x0000074e notl %ecx - 0x0f, 0xbc, 0xc9, //0x00000750 bsfl %ecx, %ecx - 0x83, 0xf9, 0x10, //0x00000753 cmpl $16, %ecx - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00000756 je LBB0_90 - 0xbb, 0xff, 0xff, 0xff, 0xff, //0x0000075c movl $-1, %ebx - 0xd3, 0xe3, //0x00000761 shll %cl, %ebx - 0xf7, 0xd3, //0x00000763 notl %ebx - 0x41, 0x21, 0xdb, //0x00000765 andl %ebx, %r11d - 0x21, 0xda, //0x00000768 andl %ebx, %edx - 0x21, 0xf3, //0x0000076a andl %esi, %ebx - 0x89, 0xde, //0x0000076c movl %ebx, %esi - //0x0000076e LBB0_90 - 0x41, 0x8d, 0x5b, 0xff, //0x0000076e leal $-1(%r11), %ebx - 0x44, 0x21, 0xdb, //0x00000772 andl %r11d, %ebx - 0x0f, 0x85, 0x12, 0x1f, 0x00, 0x00, //0x00000775 jne LBB0_429 - 0x8d, 0x5a, 0xff, //0x0000077b leal $-1(%rdx), %ebx - 0x21, 0xd3, //0x0000077e andl %edx, %ebx - 0x0f, 0x85, 0x07, 0x1f, 0x00, 0x00, //0x00000780 jne LBB0_429 - 0x8d, 0x5e, 0xff, //0x00000786 leal $-1(%rsi), %ebx - 0x21, 0xf3, //0x00000789 andl %esi, %ebx - 0x0f, 0x85, 0xfc, 0x1e, 0x00, 0x00, //0x0000078b jne LBB0_429 - 0x45, 0x85, 0xdb, //0x00000791 testl %r11d, %r11d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00000794 je LBB0_96 - 0x41, 0x0f, 0xbc, 0xdb, //0x0000079a bsfl %r11d, %ebx - 0x49, 0x83, 0xf8, 0xff, //0x0000079e cmpq $-1, %r8 - 0x0f, 0x85, 0x75, 0x22, 0x00, 0x00, //0x000007a2 jne LBB0_436 - 0x4c, 0x01, 0xeb, //0x000007a8 addq %r13, %rbx - 0x49, 0x89, 0xd8, //0x000007ab movq %rbx, %r8 - //0x000007ae LBB0_96 - 0x85, 0xd2, //0x000007ae testl %edx, %edx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000007b0 je LBB0_99 - 0x0f, 0xbc, 0xd2, //0x000007b6 bsfl %edx, %edx - 0x49, 0x83, 0xff, 0xff, //0x000007b9 cmpq $-1, %r15 - 0x0f, 0x85, 0xd1, 0x20, 0x00, 0x00, //0x000007bd jne LBB0_435 - 0x4c, 0x01, 0xea, //0x000007c3 addq %r13, %rdx - 0x49, 0x89, 0xd7, //0x000007c6 movq %rdx, %r15 - //0x000007c9 LBB0_99 - 0x85, 0xf6, //0x000007c9 testl %esi, %esi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000007cb je LBB0_102 - 0x0f, 0xbc, 0xd6, //0x000007d1 bsfl %esi, %edx - 0x49, 0x83, 0xf9, 0xff, //0x000007d4 cmpq $-1, %r9 - 0x0f, 0x85, 0xb6, 0x20, 0x00, 0x00, //0x000007d8 jne LBB0_435 - 0x4c, 0x01, 0xea, //0x000007de addq %r13, %rdx - 0x49, 0x89, 0xd1, //0x000007e1 movq %rdx, %r9 - //0x000007e4 LBB0_102 - 0x83, 0xf9, 0x10, //0x000007e4 cmpl $16, %ecx - 0x0f, 0x85, 0xbb, 0x07, 0x00, 0x00, //0x000007e7 jne LBB0_183 - 0x49, 0x83, 0xc2, 0xf0, //0x000007ed addq $-16, %r10 - 0x49, 0x83, 0xc5, 0x10, //0x000007f1 addq $16, %r13 - 0x49, 0x83, 0xfa, 0x0f, //0x000007f5 cmpq $15, %r10 - 0x0f, 0x87, 0xe1, 0xfe, 0xff, 0xff, //0x000007f9 ja LBB0_88 - 0x4b, 0x8d, 0x0c, 0x2e, //0x000007ff leaq (%r14,%r13), %rcx - 0x49, 0x89, 0xcb, //0x00000803 movq %rcx, %r11 - 0x4c, 0x39, 0xef, //0x00000806 cmpq %r13, %rdi - 0x0f, 0x84, 0xa2, 0x07, 0x00, 0x00, //0x00000809 je LBB0_184 - //0x0000080f LBB0_105 - 0x4e, 0x8d, 0x1c, 0x11, //0x0000080f leaq (%rcx,%r10), %r11 - 0x48, 0x89, 0xca, //0x00000813 movq %rcx, %rdx - 0x48, 0x2b, 0x55, 0xc0, //0x00000816 subq $-64(%rbp), %rdx - 0x4c, 0x29, 0xe2, //0x0000081a subq %r12, %rdx - 0x48, 0x83, 0xc2, 0x01, //0x0000081d addq $1, %rdx - 0x31, 0xff, //0x00000821 xorl %edi, %edi - 0x4c, 0x8d, 0x2d, 0x2a, 0x37, 0x00, 0x00, //0x00000823 leaq $14122(%rip), %r13 /* LJTI0_3+0(%rip) */ - 0xe9, 0x2e, 0x00, 0x00, 0x00, //0x0000082a jmp LBB0_110 - //0x0000082f LBB0_106 - 0x83, 0xfe, 0x65, //0x0000082f cmpl $101, %esi - 0x0f, 0x85, 0xbc, 0x09, 0x00, 0x00, //0x00000832 jne LBB0_212 - //0x00000838 LBB0_107 - 0x49, 0x83, 0xff, 0xff, //0x00000838 cmpq $-1, %r15 - 0x0f, 0x85, 0x76, 0x1e, 0x00, 0x00, //0x0000083c jne LBB0_433 - 0x4c, 0x8d, 0x3c, 0x3a, //0x00000842 leaq (%rdx,%rdi), %r15 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000846 .p2align 4, 0x90 - //0x00000850 LBB0_109 - 0x48, 0x83, 0xc7, 0x01, //0x00000850 addq $1, %rdi - 0x49, 0x39, 0xfa, //0x00000854 cmpq %rdi, %r10 - 0x0f, 0x84, 0x54, 0x07, 0x00, 0x00, //0x00000857 je LBB0_184 - //0x0000085d LBB0_110 - 0x0f, 0xbe, 0x34, 0x39, //0x0000085d movsbl (%rcx,%rdi), %esi - 0x8d, 0x5e, 0xd0, //0x00000861 leal $-48(%rsi), %ebx - 0x83, 0xfb, 0x0a, //0x00000864 cmpl $10, %ebx - 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00000867 jb LBB0_109 - 0x8d, 0x5e, 0xd5, //0x0000086d leal $-43(%rsi), %ebx - 0x83, 0xfb, 0x1a, //0x00000870 cmpl $26, %ebx - 0x0f, 0x87, 0xb6, 0xff, 0xff, 0xff, //0x00000873 ja LBB0_106 - 0x49, 0x63, 0x74, 0x9d, 0x00, //0x00000879 movslq (%r13,%rbx,4), %rsi - 0x4c, 0x01, 0xee, //0x0000087e addq %r13, %rsi - 0xff, 0xe6, //0x00000881 jmpq *%rsi - //0x00000883 LBB0_113 - 0x49, 0x83, 0xf9, 0xff, //0x00000883 cmpq $-1, %r9 - 0x0f, 0x85, 0x2b, 0x1e, 0x00, 0x00, //0x00000887 jne LBB0_433 - 0x4c, 0x8d, 0x0c, 0x3a, //0x0000088d leaq (%rdx,%rdi), %r9 - 0xe9, 0xba, 0xff, 0xff, 0xff, //0x00000891 jmp LBB0_109 - //0x00000896 LBB0_115 - 0x49, 0x83, 0xf8, 0xff, //0x00000896 cmpq $-1, %r8 - 0x0f, 0x85, 0x18, 0x1e, 0x00, 0x00, //0x0000089a jne LBB0_433 - 0x4c, 0x8d, 0x04, 0x3a, //0x000008a0 leaq (%rdx,%rdi), %r8 - 0xe9, 0xa7, 0xff, 0xff, 0xff, //0x000008a4 jmp LBB0_109 - //0x000008a9 LBB0_117 - 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000008a9 cmpq $4095, %r9 - 0x0f, 0x8f, 0x36, 0x31, 0x00, 0x00, //0x000008b0 jg LBB0_634 - 0x48, 0x89, 0x75, 0x90, //0x000008b6 movq %rsi, $-112(%rbp) - 0x49, 0x8d, 0x41, 0x01, //0x000008ba leaq $1(%r9), %rax - 0x49, 0x89, 0x45, 0x00, //0x000008be movq %rax, (%r13) - 0x4b, 0xc7, 0x44, 0xcd, 0x08, 0x00, 0x00, 0x00, 0x00, //0x000008c2 movq $0, $8(%r13,%r9,8) - 0xe9, 0xf0, 0xf8, 0xff, 0xff, //0x000008cb jmp LBB0_4 - //0x000008d0 LBB0_64 - 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x02, 0x00, 0x00, 0x00, //0x000008d0 movq $2, (%r13,%r9,8) - 0x48, 0x8b, 0x4d, 0x98, //0x000008d9 movq $-104(%rbp), %rcx - 0xf6, 0xc1, 0x40, //0x000008dd testb $64, %cl - 0x48, 0x89, 0x75, 0x90, //0x000008e0 movq %rsi, $-112(%rbp) - 0x0f, 0x85, 0x9a, 0x03, 0x00, 0x00, //0x000008e4 jne LBB0_147 - 0x49, 0x8b, 0x16, //0x000008ea movq (%r14), %rdx - 0x48, 0x8b, 0x45, 0xa8, //0x000008ed movq $-88(%rbp), %rax - 0x48, 0x8b, 0x40, 0x08, //0x000008f1 movq $8(%rax), %rax - 0xf6, 0xc1, 0x20, //0x000008f5 testb $32, %cl - 0x48, 0x89, 0xd1, //0x000008f8 movq %rdx, %rcx - 0x48, 0x89, 0x55, 0xb0, //0x000008fb movq %rdx, $-80(%rbp) - 0x48, 0x89, 0x45, 0xa0, //0x000008ff movq %rax, $-96(%rbp) - 0x49, 0x89, 0xc1, //0x00000903 movq %rax, %r9 - 0x0f, 0x85, 0xba, 0x06, 0x00, 0x00, //0x00000906 jne LBB0_186 - 0x49, 0x29, 0xd1, //0x0000090c subq %rdx, %r9 - 0x0f, 0x84, 0x23, 0x33, 0x00, 0x00, //0x0000090f je LBB0_646 - 0x49, 0x83, 0xf9, 0x40, //0x00000915 cmpq $64, %r9 - 0x0f, 0x82, 0x30, 0x26, 0x00, 0x00, //0x00000919 jb LBB0_492 - 0x48, 0x8b, 0x45, 0xb0, //0x0000091f movq $-80(%rbp), %rax - 0x49, 0x89, 0xc6, //0x00000923 movq %rax, %r14 - 0x49, 0xf7, 0xd6, //0x00000926 notq %r14 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000929 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00000931 xorl %r8d, %r8d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000934 .p2align 4, 0x90 - //0x00000940 LBB0_69 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00000940 movdqu (%r12,%rax), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00000946 movdqu $16(%r12,%rax), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000094d movdqu $32(%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000954 movdqu $48(%r12,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xfb, //0x0000095b movdqa %xmm3, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000095f pcmpeqb %xmm0, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00000963 pmovmskb %xmm7, %r10d - 0x66, 0x0f, 0x6f, 0xfc, //0x00000968 movdqa %xmm4, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000096c pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xdf, //0x00000970 pmovmskb %xmm7, %ebx - 0x66, 0x0f, 0x6f, 0xfd, //0x00000974 movdqa %xmm5, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x00000978 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x0000097c pmovmskb %xmm7, %edi - 0x66, 0x0f, 0x6f, 0xfe, //0x00000980 movdqa %xmm6, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x00000984 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xd7, //0x00000988 pmovmskb %xmm7, %edx - 0x66, 0x0f, 0x74, 0xd9, //0x0000098c pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000990 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x74, 0xe1, //0x00000995 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x00000999 pmovmskb %xmm4, %ecx - 0x66, 0x0f, 0x74, 0xe9, //0x0000099d pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x000009a1 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x74, 0xf1, //0x000009a5 pcmpeqb %xmm1, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x000009a9 pmovmskb %xmm6, %r15d - 0x48, 0xc1, 0xe2, 0x30, //0x000009ae shlq $48, %rdx - 0x48, 0xc1, 0xe7, 0x20, //0x000009b2 shlq $32, %rdi - 0x48, 0x09, 0xd7, //0x000009b6 orq %rdx, %rdi - 0x48, 0xc1, 0xe3, 0x10, //0x000009b9 shlq $16, %rbx - 0x48, 0x09, 0xfb, //0x000009bd orq %rdi, %rbx - 0x49, 0x09, 0xda, //0x000009c0 orq %rbx, %r10 - 0x49, 0xc1, 0xe7, 0x30, //0x000009c3 shlq $48, %r15 - 0x48, 0xc1, 0xe6, 0x20, //0x000009c7 shlq $32, %rsi - 0x4c, 0x09, 0xfe, //0x000009cb orq %r15, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x000009ce shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x000009d2 orq %rsi, %rcx - 0x49, 0x09, 0xcb, //0x000009d5 orq %rcx, %r11 - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000009d8 jne LBB0_121 - 0x4d, 0x85, 0xc0, //0x000009de testq %r8, %r8 - 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x000009e1 jne LBB0_123 - 0x45, 0x31, 0xc0, //0x000009e7 xorl %r8d, %r8d - 0x4d, 0x85, 0xd2, //0x000009ea testq %r10, %r10 - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x000009ed jne LBB0_124 - //0x000009f3 LBB0_72 - 0x49, 0x83, 0xc1, 0xc0, //0x000009f3 addq $-64, %r9 - 0x49, 0x83, 0xc6, 0xc0, //0x000009f7 addq $-64, %r14 - 0x48, 0x83, 0xc0, 0x40, //0x000009fb addq $64, %rax - 0x49, 0x83, 0xf9, 0x3f, //0x000009ff cmpq $63, %r9 - 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x00000a03 ja LBB0_69 - 0xe9, 0x8d, 0x1e, 0x00, 0x00, //0x00000a09 jmp LBB0_73 - //0x00000a0e LBB0_121 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00000a0e cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00000a13 jne LBB0_123 - 0x49, 0x0f, 0xbc, 0xcb, //0x00000a19 bsfq %r11, %rcx - 0x48, 0x01, 0xc1, //0x00000a1d addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00000a20 movq %rcx, $-56(%rbp) - //0x00000a24 LBB0_123 - 0x4c, 0x89, 0xc1, //0x00000a24 movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00000a27 notq %rcx - 0x4c, 0x21, 0xd9, //0x00000a2a andq %r11, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x00000a2d leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xc2, //0x00000a31 orq %r8, %rdx - 0x48, 0x89, 0xd6, //0x00000a34 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000a37 notq %rsi - 0x4c, 0x21, 0xde, //0x00000a3a andq %r11, %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000a3d movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfe, //0x00000a47 andq %rdi, %rsi - 0x45, 0x31, 0xc0, //0x00000a4a xorl %r8d, %r8d - 0x48, 0x01, 0xce, //0x00000a4d addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc0, //0x00000a50 setb %r8b - 0x48, 0x01, 0xf6, //0x00000a54 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000a57 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00000a61 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00000a64 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000a67 notq %rsi - 0x49, 0x21, 0xf2, //0x00000a6a andq %rsi, %r10 - 0x4d, 0x85, 0xd2, //0x00000a6d testq %r10, %r10 - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000a70 je LBB0_72 - //0x00000a76 LBB0_124 - 0x49, 0x0f, 0xbc, 0xc2, //0x00000a76 bsfq %r10, %rax - 0x4c, 0x29, 0xf0, //0x00000a7a subq %r14, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x00000a7d movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000a81 movabsq $4294977024, %r11 - 0xe9, 0x73, 0x0d, 0x00, 0x00, //0x00000a8b jmp LBB0_304 - //0x00000a90 LBB0_125 - 0x48, 0x8b, 0x4d, 0xa8, //0x00000a90 movq $-88(%rbp), %rcx - 0x4c, 0x8b, 0x49, 0x08, //0x00000a94 movq $8(%rcx), %r9 - 0x4d, 0x8b, 0x06, //0x00000a98 movq (%r14), %r8 - 0x4f, 0x8d, 0x14, 0x04, //0x00000a9b leaq (%r12,%r8), %r10 - 0x4d, 0x29, 0xc1, //0x00000a9f subq %r8, %r9 - 0x49, 0x83, 0xf9, 0x20, //0x00000aa2 cmpq $32, %r9 - 0x0f, 0x8c, 0xbc, 0x1b, 0x00, 0x00, //0x00000aa6 jl LBB0_134 - 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x00000aac movl $32, %r14d - 0x31, 0xd2, //0x00000ab2 xorl %edx, %edx - 0x45, 0x31, 0xdb, //0x00000ab4 xorl %r11d, %r11d - 0xe9, 0x2a, 0x00, 0x00, 0x00, //0x00000ab7 jmp LBB0_127 - 0x90, 0x90, 0x90, 0x90, //0x00000abc .p2align 4, 0x90 - //0x00000ac0 LBB0_130 - 0x45, 0x31, 0xdb, //0x00000ac0 xorl %r11d, %r11d - 0x48, 0x85, 0xff, //0x00000ac3 testq %rdi, %rdi - 0x0f, 0x85, 0xa5, 0x00, 0x00, 0x00, //0x00000ac6 jne LBB0_129 - //0x00000acc LBB0_131 - 0x48, 0x83, 0xc2, 0x20, //0x00000acc addq $32, %rdx - 0x4b, 0x8d, 0x0c, 0x31, //0x00000ad0 leaq (%r9,%r14), %rcx - 0x48, 0x83, 0xc1, 0xe0, //0x00000ad4 addq $-32, %rcx - 0x49, 0x83, 0xc6, 0xe0, //0x00000ad8 addq $-32, %r14 - 0x48, 0x83, 0xf9, 0x3f, //0x00000adc cmpq $63, %rcx - 0x0f, 0x8e, 0x65, 0x1b, 0x00, 0x00, //0x00000ae0 jle LBB0_132 - //0x00000ae6 LBB0_127 - 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x12, //0x00000ae6 movdqu (%r10,%rdx), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x12, 0x10, //0x00000aec movdqu $16(%r10,%rdx), %xmm5 - 0x66, 0x0f, 0x6f, 0xf4, //0x00000af3 movdqa %xmm4, %xmm6 - 0x66, 0x0f, 0x74, 0xf0, //0x00000af7 pcmpeqb %xmm0, %xmm6 - 0x66, 0x0f, 0xd7, 0xf6, //0x00000afb pmovmskb %xmm6, %esi - 0x66, 0x0f, 0x6f, 0xf5, //0x00000aff movdqa %xmm5, %xmm6 - 0x66, 0x0f, 0x74, 0xf0, //0x00000b03 pcmpeqb %xmm0, %xmm6 - 0x66, 0x0f, 0xd7, 0xfe, //0x00000b07 pmovmskb %xmm6, %edi - 0x48, 0xc1, 0xe7, 0x10, //0x00000b0b shlq $16, %rdi - 0x48, 0x09, 0xf7, //0x00000b0f orq %rsi, %rdi - 0x66, 0x0f, 0x74, 0xe1, //0x00000b12 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x00000b16 pmovmskb %xmm4, %ecx - 0x66, 0x0f, 0x74, 0xe9, //0x00000b1a pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00000b1e pmovmskb %xmm5, %esi - 0x48, 0xc1, 0xe6, 0x10, //0x00000b22 shlq $16, %rsi - 0x48, 0x09, 0xce, //0x00000b26 orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00000b29 movq %rsi, %rcx - 0x4c, 0x09, 0xd9, //0x00000b2c orq %r11, %rcx - 0x0f, 0x84, 0x8b, 0xff, 0xff, 0xff, //0x00000b2f je LBB0_130 - 0x44, 0x89, 0xd9, //0x00000b35 movl %r11d, %ecx - 0xf7, 0xd1, //0x00000b38 notl %ecx - 0x21, 0xf1, //0x00000b3a andl %esi, %ecx - 0x44, 0x8d, 0x3c, 0x09, //0x00000b3c leal (%rcx,%rcx), %r15d - 0x45, 0x09, 0xdf, //0x00000b40 orl %r11d, %r15d - 0x44, 0x89, 0xfb, //0x00000b43 movl %r15d, %ebx - 0xf7, 0xd3, //0x00000b46 notl %ebx - 0x21, 0xf3, //0x00000b48 andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000b4a andl $-1431655766, %ebx - 0x45, 0x31, 0xdb, //0x00000b50 xorl %r11d, %r11d - 0x01, 0xcb, //0x00000b53 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc3, //0x00000b55 setb %r11b - 0x01, 0xdb, //0x00000b59 addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00000b5b xorl $1431655765, %ebx - 0x44, 0x21, 0xfb, //0x00000b61 andl %r15d, %ebx - 0xf7, 0xd3, //0x00000b64 notl %ebx - 0x21, 0xdf, //0x00000b66 andl %ebx, %edi - 0x48, 0x85, 0xff, //0x00000b68 testq %rdi, %rdi - 0x0f, 0x84, 0x5b, 0xff, 0xff, 0xff, //0x00000b6b je LBB0_131 - //0x00000b71 LBB0_129 - 0x0f, 0xbc, 0xc7, //0x00000b71 bsfl %edi, %eax - 0x4c, 0x01, 0xc0, //0x00000b74 addq %r8, %rax - 0x4c, 0x8d, 0x14, 0x02, //0x00000b77 leaq (%rdx,%rax), %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00000b7b addq $1, %r10 - 0x4c, 0x8b, 0x75, 0xd0, //0x00000b7f movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000b83 movabsq $4294977024, %r11 - 0x4d, 0x89, 0x16, //0x00000b8d movq %r10, (%r14) - 0x4d, 0x85, 0xc0, //0x00000b90 testq %r8, %r8 - 0x0f, 0x8f, 0x27, 0xf6, 0xff, 0xff, //0x00000b93 jg LBB0_4 - 0xe9, 0x63, 0x2e, 0x00, 0x00, //0x00000b99 jmp LBB0_608 - //0x00000b9e LBB0_135 - 0x48, 0x89, 0xf9, //0x00000b9e movq %rdi, %rcx - 0x48, 0x29, 0xf1, //0x00000ba1 subq %rsi, %rcx - 0x48, 0x83, 0xf9, 0x10, //0x00000ba4 cmpq $16, %rcx - 0x0f, 0x82, 0x0d, 0x22, 0x00, 0x00, //0x00000ba8 jb LBB0_470 - 0x48, 0x89, 0xf1, //0x00000bae movq %rsi, %rcx - 0x48, 0xf7, 0xd9, //0x00000bb1 negq %rcx - 0x48, 0x89, 0xf0, //0x00000bb4 movq %rsi, %rax - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000bb7 .p2align 4, 0x90 - //0x00000bc0 LBB0_137 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00000bc0 movdqu (%r12,%rax), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x00000bc6 movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0x74, 0xe6, //0x00000bca pcmpeqb %xmm14, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xd9, //0x00000bcf pand %xmm9, %xmm3 - 0x66, 0x0f, 0x74, 0xda, //0x00000bd4 pcmpeqb %xmm2, %xmm3 - 0x66, 0x0f, 0xeb, 0xdc, //0x00000bd8 por %xmm4, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x00000bdc pmovmskb %xmm3, %edx - 0x85, 0xd2, //0x00000be0 testl %edx, %edx - 0x0f, 0x85, 0xbe, 0xf5, 0xff, 0xff, //0x00000be2 jne LBB0_613 - 0x48, 0x83, 0xc0, 0x10, //0x00000be8 addq $16, %rax - 0x48, 0x8d, 0x14, 0x0f, //0x00000bec leaq (%rdi,%rcx), %rdx - 0x48, 0x83, 0xc2, 0xf0, //0x00000bf0 addq $-16, %rdx - 0x48, 0x83, 0xc1, 0xf0, //0x00000bf4 addq $-16, %rcx - 0x48, 0x83, 0xfa, 0x0f, //0x00000bf8 cmpq $15, %rdx - 0x0f, 0x87, 0xbe, 0xff, 0xff, 0xff, //0x00000bfc ja LBB0_137 - 0x4c, 0x89, 0xe0, //0x00000c02 movq %r12, %rax - 0x48, 0x29, 0xc8, //0x00000c05 subq %rcx, %rax - 0x48, 0x01, 0xcf, //0x00000c08 addq %rcx, %rdi - 0x48, 0x89, 0xf9, //0x00000c0b movq %rdi, %rcx - 0x48, 0x85, 0xc9, //0x00000c0e testq %rcx, %rcx - 0x0f, 0x84, 0xb1, 0x21, 0x00, 0x00, //0x00000c11 je LBB0_471 - //0x00000c17 LBB0_140 - 0x48, 0x8d, 0x3c, 0x08, //0x00000c17 leaq (%rax,%rcx), %rdi - 0x31, 0xd2, //0x00000c1b xorl %edx, %edx - //0x00000c1d LBB0_141 - 0x0f, 0xb6, 0x1c, 0x10, //0x00000c1d movzbl (%rax,%rdx), %ebx - 0x80, 0xfb, 0x2c, //0x00000c21 cmpb $44, %bl - 0x0f, 0x84, 0x4c, 0x1a, 0x00, 0x00, //0x00000c24 je LBB0_428 - 0x80, 0xfb, 0x7d, //0x00000c2a cmpb $125, %bl - 0x0f, 0x84, 0x43, 0x1a, 0x00, 0x00, //0x00000c2d je LBB0_428 - 0x80, 0xfb, 0x5d, //0x00000c33 cmpb $93, %bl - 0x0f, 0x84, 0x3a, 0x1a, 0x00, 0x00, //0x00000c36 je LBB0_428 - 0x48, 0x83, 0xc2, 0x01, //0x00000c3c addq $1, %rdx - 0x48, 0x39, 0xd1, //0x00000c40 cmpq %rdx, %rcx - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x00000c43 jne LBB0_141 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00000c49 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00000c4e movdqa %xmm2, %xmm5 - 0x48, 0x89, 0xf8, //0x00000c52 movq %rdi, %rax - //0x00000c55 LBB0_146 - 0x4c, 0x29, 0xe0, //0x00000c55 subq %r12, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x00000c58 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00000c5c movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000c60 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x00000c6a movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00000c6e movdqa %xmm6, %xmm13 - 0x49, 0x89, 0x06, //0x00000c73 movq %rax, (%r14) - 0x48, 0x85, 0xf6, //0x00000c76 testq %rsi, %rsi - 0x0f, 0x8f, 0x41, 0xf5, 0xff, 0xff, //0x00000c79 jg LBB0_4 - 0xe9, 0xd5, 0x2d, 0x00, 0x00, //0x00000c7f jmp LBB0_614 - //0x00000c84 LBB0_147 - 0x48, 0x8b, 0x4d, 0xa8, //0x00000c84 movq $-88(%rbp), %rcx - 0x4c, 0x8b, 0x49, 0x08, //0x00000c88 movq $8(%rcx), %r9 - 0x4d, 0x8b, 0x06, //0x00000c8c movq (%r14), %r8 - 0x4f, 0x8d, 0x14, 0x04, //0x00000c8f leaq (%r12,%r8), %r10 - 0x4d, 0x29, 0xc1, //0x00000c93 subq %r8, %r9 - 0x49, 0x83, 0xf9, 0x20, //0x00000c96 cmpq $32, %r9 - 0x0f, 0x8c, 0x4e, 0x1a, 0x00, 0x00, //0x00000c9a jl LBB0_156 - 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x00000ca0 movl $32, %r14d - 0x31, 0xd2, //0x00000ca6 xorl %edx, %edx - 0x45, 0x31, 0xdb, //0x00000ca8 xorl %r11d, %r11d - 0xe9, 0x26, 0x00, 0x00, 0x00, //0x00000cab jmp LBB0_149 - //0x00000cb0 .p2align 4, 0x90 - //0x00000cb0 LBB0_152 + 0x48, 0xc7, 0x45, 0x90, 0xff, 0xff, 0xff, 0xff, //0x0000012c movq $-1, $-112(%rbp) + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000134 movabsq $4294977024, %r11 + 0xf3, 0x0f, 0x6f, 0x05, 0xca, 0xfe, 0xff, 0xff, //0x0000013e movdqu $-310(%rip), %xmm0 /* LCPI0_1+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0xd2, 0xfe, 0xff, 0xff, //0x00000146 movdqu $-302(%rip), %xmm1 /* LCPI0_2+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x25, 0xd9, 0xfe, 0xff, 0xff, //0x0000014e movdqu $-295(%rip), %xmm12 /* LCPI0_3+0(%rip) */ + 0x66, 0x45, 0x0f, 0x76, 0xd2, //0x00000157 pcmpeqd %xmm10, %xmm10 + 0xf3, 0x44, 0x0f, 0x6f, 0x3d, 0x4b, 0xff, 0xff, 0xff, //0x0000015c movdqu $-181(%rip), %xmm15 /* LCPI0_11+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x0d, 0x22, 0xff, 0xff, 0xff, //0x00000165 movdqu $-222(%rip), %xmm9 /* LCPI0_9+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x79, 0xff, 0xff, 0xff, //0x0000016e movdqu $-135(%rip), %xmm11 /* LCPI0_15+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x35, 0x00, 0xff, 0xff, 0xff, //0x00000177 movdqu $-256(%rip), %xmm14 /* LCPI0_8+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x15, 0xe8, 0xfe, 0xff, 0xff, //0x00000180 movdqu $-280(%rip), %xmm2 /* LCPI0_7+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xaf, 0xfe, 0xff, 0xff, //0x00000188 movdqu $-337(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x05, 0xb6, 0xfe, 0xff, 0xff, //0x00000191 movdqu $-330(%rip), %xmm8 /* LCPI0_5+0(%rip) */ + 0x48, 0x89, 0x75, 0xd0, //0x0000019a movq %rsi, $-48(%rbp) + 0x48, 0x89, 0x55, 0xb0, //0x0000019e movq %rdx, $-80(%rbp) + 0xe9, 0x3d, 0x00, 0x00, 0x00, //0x000001a2 jmp LBB0_6 + //0x000001a7 LBB0_1 + 0x0f, 0xbc, 0xc3, //0x000001a7 bsfl %ebx, %eax + 0x4c, 0x01, 0xc0, //0x000001aa addq %r8, %rax + 0x4c, 0x8d, 0x14, 0x06, //0x000001ad leaq (%rsi,%rax), %r10 + 0x49, 0x83, 0xc2, 0x01, //0x000001b1 addq $1, %r10 + 0x4c, 0x8b, 0x75, 0xd0, //0x000001b5 movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000001b9 movabsq $4294977024, %r11 + //0x000001c3 LBB0_2 + 0x4d, 0x89, 0x16, //0x000001c3 movq %r10, (%r14) + //0x000001c6 LBB0_3 + 0x4d, 0x85, 0xc0, //0x000001c6 testq %r8, %r8 + 0x0f, 0x8e, 0x8d, 0x38, 0x00, 0x00, //0x000001c9 jle LBB0_622 + 0x90, //0x000001cf .p2align 4, 0x90 + //0x000001d0 LBB0_4 + 0x4d, 0x8b, 0x45, 0x00, //0x000001d0 movq (%r13), %r8 + 0x48, 0x8b, 0x55, 0x90, //0x000001d4 movq $-112(%rbp), %rdx + 0x48, 0x89, 0xd0, //0x000001d8 movq %rdx, %rax + 0x4d, 0x85, 0xc0, //0x000001db testq %r8, %r8 + 0x0f, 0x84, 0xcb, 0x38, 0x00, 0x00, //0x000001de je LBB0_650 + //0x000001e4 LBB0_6 + 0x48, 0x8b, 0x4d, 0x90, //0x000001e4 movq $-112(%rbp), %rcx + 0x48, 0x8b, 0x45, 0xa8, //0x000001e8 movq $-88(%rbp), %rax + 0x4c, 0x8b, 0x20, //0x000001ec movq (%rax), %r12 + 0x48, 0x8b, 0x40, 0x08, //0x000001ef movq $8(%rax), %rax + 0x49, 0x8b, 0x36, //0x000001f3 movq (%r14), %rsi + 0x48, 0x39, 0xc6, //0x000001f6 cmpq %rax, %rsi + 0x0f, 0x83, 0x31, 0x00, 0x00, 0x00, //0x000001f9 jae LBB0_11 + 0x41, 0x8a, 0x14, 0x34, //0x000001ff movb (%r12,%rsi), %dl + 0x80, 0xfa, 0x0d, //0x00000203 cmpb $13, %dl + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x00000206 je LBB0_11 + 0x80, 0xfa, 0x20, //0x0000020c cmpb $32, %dl + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x0000020f je LBB0_11 + 0x80, 0xc2, 0xf7, //0x00000215 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00000218 cmpb $1, %dl + 0x0f, 0x86, 0x0f, 0x00, 0x00, 0x00, //0x0000021b jbe LBB0_11 + 0x48, 0x89, 0xf2, //0x00000221 movq %rsi, %rdx + 0xe9, 0xff, 0x00, 0x00, 0x00, //0x00000224 jmp LBB0_32 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000229 .p2align 4, 0x90 + //0x00000230 LBB0_11 + 0x48, 0x8d, 0x56, 0x01, //0x00000230 leaq $1(%rsi), %rdx + 0x48, 0x39, 0xc2, //0x00000234 cmpq %rax, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000237 jae LBB0_15 + 0x41, 0x8a, 0x1c, 0x14, //0x0000023d movb (%r12,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x00000241 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000244 je LBB0_15 + 0x80, 0xfb, 0x20, //0x0000024a cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000024d je LBB0_15 + 0x80, 0xc3, 0xf7, //0x00000253 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000256 cmpb $1, %bl + 0x0f, 0x87, 0xc9, 0x00, 0x00, 0x00, //0x00000259 ja LBB0_32 + 0x90, //0x0000025f .p2align 4, 0x90 + //0x00000260 LBB0_15 + 0x48, 0x8d, 0x56, 0x02, //0x00000260 leaq $2(%rsi), %rdx + 0x48, 0x39, 0xc2, //0x00000264 cmpq %rax, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000267 jae LBB0_19 + 0x41, 0x8a, 0x1c, 0x14, //0x0000026d movb (%r12,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x00000271 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000274 je LBB0_19 + 0x80, 0xfb, 0x20, //0x0000027a cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000027d je LBB0_19 + 0x80, 0xc3, 0xf7, //0x00000283 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000286 cmpb $1, %bl + 0x0f, 0x87, 0x99, 0x00, 0x00, 0x00, //0x00000289 ja LBB0_32 + 0x90, //0x0000028f .p2align 4, 0x90 + //0x00000290 LBB0_19 + 0x48, 0x8d, 0x56, 0x03, //0x00000290 leaq $3(%rsi), %rdx + 0x48, 0x39, 0xc2, //0x00000294 cmpq %rax, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000297 jae LBB0_23 + 0x41, 0x8a, 0x1c, 0x14, //0x0000029d movb (%r12,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x000002a1 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000002a4 je LBB0_23 + 0x80, 0xfb, 0x20, //0x000002aa cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000002ad je LBB0_23 + 0x80, 0xc3, 0xf7, //0x000002b3 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000002b6 cmpb $1, %bl + 0x0f, 0x87, 0x69, 0x00, 0x00, 0x00, //0x000002b9 ja LBB0_32 + 0x90, //0x000002bf .p2align 4, 0x90 + //0x000002c0 LBB0_23 + 0x48, 0x83, 0xc6, 0x04, //0x000002c0 addq $4, %rsi + 0x48, 0x39, 0xf0, //0x000002c4 cmpq %rsi, %rax + 0x0f, 0x86, 0x74, 0x37, 0x00, 0x00, //0x000002c7 jbe LBB0_619 + 0x48, 0x39, 0xf0, //0x000002cd cmpq %rsi, %rax + 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x000002d0 je LBB0_29 + 0x49, 0x8d, 0x14, 0x04, //0x000002d6 leaq (%r12,%rax), %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000002da .p2align 4, 0x90 + //0x000002e0 LBB0_26 + 0x41, 0x0f, 0xbe, 0x3c, 0x34, //0x000002e0 movsbl (%r12,%rsi), %edi + 0x83, 0xff, 0x20, //0x000002e5 cmpl $32, %edi + 0x0f, 0x87, 0x2e, 0x00, 0x00, 0x00, //0x000002e8 ja LBB0_31 + 0x49, 0x0f, 0xa3, 0xfb, //0x000002ee btq %rdi, %r11 + 0x0f, 0x83, 0x24, 0x00, 0x00, 0x00, //0x000002f2 jae LBB0_31 + 0x48, 0x83, 0xc6, 0x01, //0x000002f8 addq $1, %rsi + 0x48, 0x39, 0xf0, //0x000002fc cmpq %rsi, %rax + 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x000002ff jne LBB0_26 + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x00000305 jmp LBB0_30 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000030a .p2align 4, 0x90 + //0x00000310 LBB0_29 + 0x4c, 0x01, 0xe6, //0x00000310 addq %r12, %rsi + 0x48, 0x89, 0xf2, //0x00000313 movq %rsi, %rdx + //0x00000316 LBB0_30 + 0x4c, 0x29, 0xe2, //0x00000316 subq %r12, %rdx + 0x48, 0x89, 0xd6, //0x00000319 movq %rdx, %rsi + //0x0000031c LBB0_31 + 0x48, 0x89, 0xf2, //0x0000031c movq %rsi, %rdx + 0x48, 0x39, 0xc6, //0x0000031f cmpq %rax, %rsi + 0x0f, 0x83, 0x1c, 0x37, 0x00, 0x00, //0x00000322 jae LBB0_620 + //0x00000328 LBB0_32 + 0x48, 0x8d, 0x42, 0x01, //0x00000328 leaq $1(%rdx), %rax + 0x49, 0x89, 0x06, //0x0000032c movq %rax, (%r14) + 0x41, 0x0f, 0xbe, 0x3c, 0x14, //0x0000032f movsbl (%r12,%rdx), %edi + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000334 movq $-1, %rax + 0x85, 0xff, //0x0000033b testl %edi, %edi + 0x0f, 0x84, 0x6c, 0x37, 0x00, 0x00, //0x0000033d je LBB0_650 + 0x4d, 0x8b, 0x4d, 0x00, //0x00000343 movq (%r13), %r9 + 0x4d, 0x8d, 0x41, 0xff, //0x00000347 leaq $-1(%r9), %r8 + 0x43, 0x8b, 0x5c, 0xcd, 0x00, //0x0000034b movl (%r13,%r9,8), %ebx + 0x48, 0x83, 0xf9, 0xff, //0x00000350 cmpq $-1, %rcx + 0x48, 0x0f, 0x45, 0xd1, //0x00000354 cmovneq %rcx, %rdx + 0x83, 0xc3, 0xff, //0x00000358 addl $-1, %ebx + 0x83, 0xfb, 0x05, //0x0000035b cmpl $5, %ebx + 0x48, 0x89, 0x55, 0x90, //0x0000035e movq %rdx, $-112(%rbp) + 0x0f, 0x87, 0x73, 0x02, 0x00, 0x00, //0x00000362 ja LBB0_78 + 0x48, 0x8d, 0x35, 0xdd, 0x39, 0x00, 0x00, //0x00000368 leaq $14813(%rip), %rsi /* LJTI0_0+0(%rip) */ + 0x48, 0x63, 0x0c, 0x9e, //0x0000036f movslq (%rsi,%rbx,4), %rcx + 0x48, 0x01, 0xf1, //0x00000373 addq %rsi, %rcx + 0xff, 0xe1, //0x00000376 jmpq *%rcx + //0x00000378 LBB0_35 + 0x83, 0xff, 0x2c, //0x00000378 cmpl $44, %edi + 0x0f, 0x84, 0xf0, 0x04, 0x00, 0x00, //0x0000037b je LBB0_117 + 0x83, 0xff, 0x5d, //0x00000381 cmpl $93, %edi + 0x0f, 0x84, 0x3c, 0x02, 0x00, 0x00, //0x00000384 je LBB0_37 + 0xe9, 0x19, 0x37, 0x00, 0x00, //0x0000038a jmp LBB0_649 + //0x0000038f LBB0_38 + 0x40, 0x80, 0xff, 0x5d, //0x0000038f cmpb $93, %dil + 0x0f, 0x84, 0x2d, 0x02, 0x00, 0x00, //0x00000393 je LBB0_37 + 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000399 movq $1, (%r13,%r9,8) + 0x83, 0xff, 0x7b, //0x000003a2 cmpl $123, %edi + 0x0f, 0x86, 0x3d, 0x02, 0x00, 0x00, //0x000003a5 jbe LBB0_79 + 0xe9, 0xf8, 0x36, 0x00, 0x00, //0x000003ab jmp LBB0_649 + //0x000003b0 LBB0_40 + 0x40, 0x80, 0xff, 0x22, //0x000003b0 cmpb $34, %dil + 0x0f, 0x85, 0xee, 0x36, 0x00, 0x00, //0x000003b4 jne LBB0_649 + 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x04, 0x00, 0x00, 0x00, //0x000003ba movq $4, (%r13,%r9,8) + 0x48, 0x8b, 0x4d, 0x98, //0x000003c3 movq $-104(%rbp), %rcx + 0xf6, 0xc1, 0x40, //0x000003c7 testb $64, %cl + 0x0f, 0x85, 0x74, 0x06, 0x00, 0x00, //0x000003ca jne LBB0_125 + 0x49, 0x8b, 0x16, //0x000003d0 movq (%r14), %rdx + 0x48, 0x8b, 0x45, 0xa8, //0x000003d3 movq $-88(%rbp), %rax + 0x48, 0x8b, 0x40, 0x08, //0x000003d7 movq $8(%rax), %rax + 0xf6, 0xc1, 0x20, //0x000003db testb $32, %cl + 0x48, 0x89, 0x45, 0xa0, //0x000003de movq %rax, $-96(%rbp) + 0x48, 0x89, 0x55, 0xc0, //0x000003e2 movq %rdx, $-64(%rbp) + 0x0f, 0x85, 0xa2, 0x09, 0x00, 0x00, //0x000003e6 jne LBB0_162 + 0x49, 0x89, 0xc1, //0x000003ec movq %rax, %r9 + 0x49, 0x29, 0xd1, //0x000003ef subq %rdx, %r9 + 0x0f, 0x84, 0x71, 0x38, 0x00, 0x00, //0x000003f2 je LBB0_656 + 0x49, 0x83, 0xf9, 0x40, //0x000003f8 cmpq $64, %r9 + 0x0f, 0x82, 0xd5, 0x2a, 0x00, 0x00, //0x000003fc jb LBB0_502 + 0x48, 0x8b, 0x45, 0xc0, //0x00000402 movq $-64(%rbp), %rax + 0x49, 0x89, 0xc6, //0x00000406 movq %rax, %r14 + 0x49, 0xf7, 0xd6, //0x00000409 notq %r14 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000040c movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x00000414 xorl %r8d, %r8d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000417 .p2align 4, 0x90 + //0x00000420 LBB0_46 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00000420 movdqu (%r12,%rax), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00000426 movdqu $16(%r12,%rax), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000042d movdqu $32(%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000434 movdqu $48(%r12,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xfb, //0x0000043b movdqa %xmm3, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000043f pcmpeqb %xmm0, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00000443 pmovmskb %xmm7, %r10d + 0x66, 0x0f, 0x6f, 0xfc, //0x00000448 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000044c pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xdf, //0x00000450 pmovmskb %xmm7, %ebx + 0x66, 0x0f, 0x6f, 0xfd, //0x00000454 movdqa %xmm5, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00000458 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x0000045c pmovmskb %xmm7, %esi + 0x66, 0x0f, 0x6f, 0xfe, //0x00000460 movdqa %xmm6, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00000464 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xd7, //0x00000468 pmovmskb %xmm7, %edx + 0x66, 0x0f, 0x74, 0xd9, //0x0000046c pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000470 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x74, 0xe1, //0x00000475 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00000479 pmovmskb %xmm4, %ecx + 0x66, 0x0f, 0x74, 0xe9, //0x0000047d pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00000481 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x74, 0xf1, //0x00000485 pcmpeqb %xmm1, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00000489 pmovmskb %xmm6, %r15d + 0x48, 0xc1, 0xe2, 0x30, //0x0000048e shlq $48, %rdx + 0x48, 0xc1, 0xe6, 0x20, //0x00000492 shlq $32, %rsi + 0x48, 0x09, 0xd6, //0x00000496 orq %rdx, %rsi + 0x48, 0xc1, 0xe3, 0x10, //0x00000499 shlq $16, %rbx + 0x48, 0x09, 0xf3, //0x0000049d orq %rsi, %rbx + 0x49, 0x09, 0xda, //0x000004a0 orq %rbx, %r10 + 0x49, 0xc1, 0xe7, 0x30, //0x000004a3 shlq $48, %r15 + 0x48, 0xc1, 0xe7, 0x20, //0x000004a7 shlq $32, %rdi + 0x4c, 0x09, 0xff, //0x000004ab orq %r15, %rdi + 0x48, 0xc1, 0xe1, 0x10, //0x000004ae shlq $16, %rcx + 0x48, 0x09, 0xf9, //0x000004b2 orq %rdi, %rcx + 0x49, 0x09, 0xcb, //0x000004b5 orq %rcx, %r11 + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000004b8 jne LBB0_55 + 0x4d, 0x85, 0xc0, //0x000004be testq %r8, %r8 + 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x000004c1 jne LBB0_57 + 0x45, 0x31, 0xc0, //0x000004c7 xorl %r8d, %r8d + 0x4d, 0x85, 0xd2, //0x000004ca testq %r10, %r10 + 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x000004cd jne LBB0_58 + //0x000004d3 LBB0_49 + 0x49, 0x83, 0xc1, 0xc0, //0x000004d3 addq $-64, %r9 + 0x49, 0x83, 0xc6, 0xc0, //0x000004d7 addq $-64, %r14 + 0x48, 0x83, 0xc0, 0x40, //0x000004db addq $64, %rax + 0x49, 0x83, 0xf9, 0x3f, //0x000004df cmpq $63, %r9 + 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x000004e3 ja LBB0_46 + 0xe9, 0x56, 0x22, 0x00, 0x00, //0x000004e9 jmp LBB0_50 + //0x000004ee LBB0_55 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000004ee cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000004f3 jne LBB0_57 + 0x49, 0x0f, 0xbc, 0xcb, //0x000004f9 bsfq %r11, %rcx + 0x48, 0x01, 0xc1, //0x000004fd addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00000500 movq %rcx, $-56(%rbp) + //0x00000504 LBB0_57 + 0x4c, 0x89, 0xc1, //0x00000504 movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00000507 notq %rcx + 0x4c, 0x21, 0xd9, //0x0000050a andq %r11, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x0000050d leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xc2, //0x00000511 orq %r8, %rdx + 0x48, 0x89, 0xd6, //0x00000514 movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000517 notq %rsi + 0x4c, 0x21, 0xde, //0x0000051a andq %r11, %rsi + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000051d movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfe, //0x00000527 andq %rdi, %rsi + 0x45, 0x31, 0xc0, //0x0000052a xorl %r8d, %r8d + 0x48, 0x01, 0xce, //0x0000052d addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc0, //0x00000530 setb %r8b + 0x48, 0x01, 0xf6, //0x00000534 addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000537 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x00000541 xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00000544 andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000547 notq %rsi + 0x49, 0x21, 0xf2, //0x0000054a andq %rsi, %r10 + 0x4d, 0x85, 0xd2, //0x0000054d testq %r10, %r10 + 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000550 je LBB0_49 + //0x00000556 LBB0_58 + 0x49, 0x0f, 0xbc, 0xc2, //0x00000556 bsfq %r10, %rax + 0x4c, 0x29, 0xf0, //0x0000055a subq %r14, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x0000055d movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000561 movabsq $4294977024, %r11 + 0xe9, 0xff, 0x0c, 0x00, 0x00, //0x0000056b jmp LBB0_229 + //0x00000570 LBB0_59 + 0x40, 0x80, 0xff, 0x3a, //0x00000570 cmpb $58, %dil + 0x0f, 0x85, 0x2e, 0x35, 0x00, 0x00, //0x00000574 jne LBB0_649 + 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000057a movq $0, (%r13,%r9,8) + 0xe9, 0x48, 0xfc, 0xff, 0xff, //0x00000583 jmp LBB0_4 + //0x00000588 LBB0_61 + 0x83, 0xff, 0x2c, //0x00000588 cmpl $44, %edi + 0x0f, 0x85, 0x2c, 0x00, 0x00, 0x00, //0x0000058b jne LBB0_62 + 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00000591 cmpq $4095, %r9 + 0x0f, 0x8f, 0xb2, 0x34, 0x00, 0x00, //0x00000598 jg LBB0_651 + 0x49, 0x8d, 0x41, 0x01, //0x0000059e leaq $1(%r9), %rax + 0x49, 0x89, 0x45, 0x00, //0x000005a2 movq %rax, (%r13) + 0x4b, 0xc7, 0x44, 0xcd, 0x08, 0x03, 0x00, 0x00, 0x00, //0x000005a6 movq $3, $8(%r13,%r9,8) + 0xe9, 0x1c, 0xfc, 0xff, 0xff, //0x000005af jmp LBB0_4 + //0x000005b4 LBB0_63 + 0x83, 0xff, 0x22, //0x000005b4 cmpl $34, %edi + 0x0f, 0x84, 0xd7, 0x02, 0x00, 0x00, //0x000005b7 je LBB0_64 + //0x000005bd LBB0_62 + 0x83, 0xff, 0x7d, //0x000005bd cmpl $125, %edi + 0x0f, 0x85, 0xe2, 0x34, 0x00, 0x00, //0x000005c0 jne LBB0_649 + //0x000005c6 LBB0_37 + 0x4d, 0x89, 0x45, 0x00, //0x000005c6 movq %r8, (%r13) + 0x48, 0x89, 0xd0, //0x000005ca movq %rdx, %rax + 0x4d, 0x85, 0xc0, //0x000005cd testq %r8, %r8 + 0x0f, 0x85, 0x0e, 0xfc, 0xff, 0xff, //0x000005d0 jne LBB0_6 + 0xe9, 0xd4, 0x34, 0x00, 0x00, //0x000005d6 jmp LBB0_650 + //0x000005db LBB0_78 + 0x4d, 0x89, 0x45, 0x00, //0x000005db movq %r8, (%r13) + 0x83, 0xff, 0x7b, //0x000005df cmpl $123, %edi + 0x0f, 0x87, 0xc0, 0x34, 0x00, 0x00, //0x000005e2 ja LBB0_649 + //0x000005e8 LBB0_79 + 0x89, 0xf9, //0x000005e8 movl %edi, %ecx + 0x48, 0x8d, 0x15, 0x73, 0x37, 0x00, 0x00, //0x000005ea leaq $14195(%rip), %rdx /* LJTI0_1+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8a, //0x000005f1 movslq (%rdx,%rcx,4), %rcx + 0x48, 0x01, 0xd1, //0x000005f5 addq %rdx, %rcx + 0xff, 0xe1, //0x000005f8 jmpq *%rcx + //0x000005fa LBB0_80 + 0x4c, 0x89, 0xf0, //0x000005fa movq %r14, %rax + 0x48, 0x8b, 0x4d, 0xa8, //0x000005fd movq $-88(%rbp), %rcx + 0x4c, 0x8b, 0x71, 0x08, //0x00000601 movq $8(%rcx), %r14 + 0x4c, 0x8b, 0x00, //0x00000605 movq (%rax), %r8 + 0xf6, 0x45, 0x98, 0x40, //0x00000608 testb $64, $-104(%rbp) + 0x0f, 0x85, 0x14, 0x05, 0x00, 0x00, //0x0000060c jne LBB0_134 + 0x49, 0x8d, 0x40, 0xff, //0x00000612 leaq $-1(%r8), %rax + 0x49, 0x29, 0xc6, //0x00000616 subq %rax, %r14 + 0x4c, 0x89, 0x45, 0xc0, //0x00000619 movq %r8, $-64(%rbp) + 0x0f, 0x84, 0x6c, 0x34, 0x00, 0x00, //0x0000061d je LBB0_625 + 0x4b, 0x8d, 0x3c, 0x04, //0x00000623 leaq (%r12,%r8), %rdi + 0x48, 0x83, 0xc7, 0xff, //0x00000627 addq $-1, %rdi + 0x80, 0x3f, 0x30, //0x0000062b cmpb $48, (%rdi) + 0x0f, 0x85, 0x3b, 0x00, 0x00, 0x00, //0x0000062e jne LBB0_86 + 0x41, 0xbd, 0x01, 0x00, 0x00, 0x00, //0x00000634 movl $1, %r13d + 0x49, 0x83, 0xfe, 0x01, //0x0000063a cmpq $1, %r14 + 0x0f, 0x84, 0xb9, 0x20, 0x00, 0x00, //0x0000063e je LBB0_452 + 0x48, 0x8b, 0x4d, 0xc0, //0x00000644 movq $-64(%rbp), %rcx + 0x41, 0x8a, 0x0c, 0x0c, //0x00000648 movb (%r12,%rcx), %cl + 0x80, 0xc1, 0xd2, //0x0000064c addb $-46, %cl + 0x80, 0xf9, 0x37, //0x0000064f cmpb $55, %cl + 0x0f, 0x87, 0xa5, 0x20, 0x00, 0x00, //0x00000652 ja LBB0_452 + 0x0f, 0xb6, 0xc9, //0x00000658 movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x0000065b movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x00000665 btq %rcx, %rdx + 0x0f, 0x83, 0x8e, 0x20, 0x00, 0x00, //0x00000669 jae LBB0_452 + //0x0000066f LBB0_86 + 0x49, 0x83, 0xfe, 0x10, //0x0000066f cmpq $16, %r14 + 0x48, 0x89, 0x7d, 0xb8, //0x00000673 movq %rdi, $-72(%rbp) + 0x0f, 0x82, 0xa0, 0x27, 0x00, 0x00, //0x00000677 jb LBB0_490 + 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000067d movq $-1, %r10 + 0x45, 0x31, 0xed, //0x00000684 xorl %r13d, %r13d + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00000687 movq $-1, %r15 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000068e movq $-1, %r8 + 0x4d, 0x89, 0xf3, //0x00000695 movq %r14, %r11 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000698 .p2align 4, 0x90 + //0x000006a0 LBB0_88 + 0xf3, 0x42, 0x0f, 0x6f, 0x1c, 0x2f, //0x000006a0 movdqu (%rdi,%r13), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x000006a6 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x64, 0x25, 0xee, 0xf9, 0xff, 0xff, //0x000006aa pcmpgtb $-1554(%rip), %xmm4 /* LCPI0_10+0(%rip) */ + 0x66, 0x41, 0x0f, 0x6f, 0xef, //0x000006b2 movdqa %xmm15, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x000006b7 pcmpgtb %xmm3, %xmm5 + 0x66, 0x0f, 0xdb, 0xec, //0x000006bb pand %xmm4, %xmm5 + 0x66, 0x0f, 0x6f, 0xe3, //0x000006bf movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0x25, 0xf5, 0xf9, 0xff, 0xff, //0x000006c3 pcmpeqb $-1547(%rip), %xmm4 /* LCPI0_12+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xf3, //0x000006cb movdqa %xmm3, %xmm6 + 0x66, 0x0f, 0x74, 0x35, 0xf9, 0xf9, 0xff, 0xff, //0x000006cf pcmpeqb $-1543(%rip), %xmm6 /* LCPI0_13+0(%rip) */ + 0x66, 0x0f, 0xeb, 0xf4, //0x000006d7 por %xmm4, %xmm6 + 0x66, 0x0f, 0x6f, 0xe3, //0x000006db movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xe1, //0x000006df pand %xmm9, %xmm4 + 0x66, 0x0f, 0x74, 0x1d, 0xf4, 0xf9, 0xff, 0xff, //0x000006e4 pcmpeqb $-1548(%rip), %xmm3 /* LCPI0_14+0(%rip) */ + 0x66, 0x41, 0x0f, 0x74, 0xe3, //0x000006ec pcmpeqb %xmm11, %xmm4 + 0x66, 0x0f, 0xd7, 0xf4, //0x000006f1 pmovmskb %xmm4, %esi + 0x66, 0x0f, 0xeb, 0xe3, //0x000006f5 por %xmm3, %xmm4 + 0x66, 0x0f, 0xeb, 0xee, //0x000006f9 por %xmm6, %xmm5 + 0x66, 0x0f, 0xeb, 0xec, //0x000006fd por %xmm4, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xcb, //0x00000701 pmovmskb %xmm3, %r9d + 0x66, 0x0f, 0xd7, 0xd6, //0x00000706 pmovmskb %xmm6, %edx + 0x66, 0x0f, 0xd7, 0xcd, //0x0000070a pmovmskb %xmm5, %ecx + 0xf7, 0xd1, //0x0000070e notl %ecx + 0x0f, 0xbc, 0xc9, //0x00000710 bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x00000713 cmpl $16, %ecx + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000716 je LBB0_90 + 0xbf, 0xff, 0xff, 0xff, 0xff, //0x0000071c movl $-1, %edi + 0xd3, 0xe7, //0x00000721 shll %cl, %edi + 0xf7, 0xd7, //0x00000723 notl %edi + 0x41, 0x21, 0xf9, //0x00000725 andl %edi, %r9d + 0x21, 0xfe, //0x00000728 andl %edi, %esi + 0x21, 0xd7, //0x0000072a andl %edx, %edi + 0x89, 0xfa, //0x0000072c movl %edi, %edx + 0x48, 0x8b, 0x7d, 0xb8, //0x0000072e movq $-72(%rbp), %rdi + //0x00000732 LBB0_90 + 0x41, 0x8d, 0x59, 0xff, //0x00000732 leal $-1(%r9), %ebx + 0x44, 0x21, 0xcb, //0x00000736 andl %r9d, %ebx + 0x0f, 0x85, 0x69, 0x1f, 0x00, 0x00, //0x00000739 jne LBB0_444 + 0x8d, 0x5e, 0xff, //0x0000073f leal $-1(%rsi), %ebx + 0x21, 0xf3, //0x00000742 andl %esi, %ebx + 0x0f, 0x85, 0x5e, 0x1f, 0x00, 0x00, //0x00000744 jne LBB0_444 + 0x8d, 0x5a, 0xff, //0x0000074a leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x0000074d andl %edx, %ebx + 0x0f, 0x85, 0x53, 0x1f, 0x00, 0x00, //0x0000074f jne LBB0_444 + 0x45, 0x85, 0xc9, //0x00000755 testl %r9d, %r9d + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00000758 je LBB0_96 + 0x41, 0x0f, 0xbc, 0xd9, //0x0000075e bsfl %r9d, %ebx + 0x49, 0x83, 0xf8, 0xff, //0x00000762 cmpq $-1, %r8 + 0x0f, 0x85, 0xfa, 0x22, 0x00, 0x00, //0x00000766 jne LBB0_454 + 0x4c, 0x01, 0xeb, //0x0000076c addq %r13, %rbx + 0x49, 0x89, 0xd8, //0x0000076f movq %rbx, %r8 + //0x00000772 LBB0_96 + 0x85, 0xf6, //0x00000772 testl %esi, %esi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000774 je LBB0_99 + 0x0f, 0xbc, 0xf6, //0x0000077a bsfl %esi, %esi + 0x49, 0x83, 0xff, 0xff, //0x0000077d cmpq $-1, %r15 + 0x0f, 0x85, 0xe6, 0x22, 0x00, 0x00, //0x00000781 jne LBB0_455 + 0x4c, 0x01, 0xee, //0x00000787 addq %r13, %rsi + 0x49, 0x89, 0xf7, //0x0000078a movq %rsi, %r15 + //0x0000078d LBB0_99 + 0x85, 0xd2, //0x0000078d testl %edx, %edx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000078f je LBB0_102 + 0x0f, 0xbc, 0xd2, //0x00000795 bsfl %edx, %edx + 0x49, 0x83, 0xfa, 0xff, //0x00000798 cmpq $-1, %r10 + 0x0f, 0x85, 0xd2, 0x22, 0x00, 0x00, //0x0000079c jne LBB0_456 + 0x4c, 0x01, 0xea, //0x000007a2 addq %r13, %rdx + 0x49, 0x89, 0xd2, //0x000007a5 movq %rdx, %r10 + //0x000007a8 LBB0_102 + 0x83, 0xf9, 0x10, //0x000007a8 cmpl $16, %ecx + 0x0f, 0x85, 0xf7, 0x07, 0x00, 0x00, //0x000007ab jne LBB0_188 + 0x49, 0x83, 0xc3, 0xf0, //0x000007b1 addq $-16, %r11 + 0x49, 0x83, 0xc5, 0x10, //0x000007b5 addq $16, %r13 + 0x49, 0x83, 0xfb, 0x0f, //0x000007b9 cmpq $15, %r11 + 0x0f, 0x87, 0xdd, 0xfe, 0xff, 0xff, //0x000007bd ja LBB0_88 + 0x4a, 0x8d, 0x34, 0x2f, //0x000007c3 leaq (%rdi,%r13), %rsi + 0x49, 0x89, 0xf1, //0x000007c7 movq %rsi, %r9 + 0x4d, 0x39, 0xee, //0x000007ca cmpq %r13, %r14 + 0x0f, 0x84, 0xff, 0x09, 0x00, 0x00, //0x000007cd je LBB0_217 + //0x000007d3 LBB0_105 + 0x4e, 0x8d, 0x0c, 0x1e, //0x000007d3 leaq (%rsi,%r11), %r9 + 0x48, 0x89, 0xf7, //0x000007d7 movq %rsi, %rdi + 0x48, 0x2b, 0x7d, 0xc0, //0x000007da subq $-64(%rbp), %rdi + 0x4c, 0x29, 0xe7, //0x000007de subq %r12, %rdi + 0x48, 0x83, 0xc7, 0x01, //0x000007e1 addq $1, %rdi + 0x31, 0xd2, //0x000007e5 xorl %edx, %edx + 0x4c, 0x8d, 0x35, 0xd2, 0x37, 0x00, 0x00, //0x000007e7 leaq $14290(%rip), %r14 /* LJTI0_3+0(%rip) */ + 0xe9, 0x2a, 0x00, 0x00, 0x00, //0x000007ee jmp LBB0_109 + //0x000007f3 LBB0_106 + 0x49, 0x83, 0xfa, 0xff, //0x000007f3 cmpq $-1, %r10 + 0x0f, 0x85, 0xdc, 0x1e, 0x00, 0x00, //0x000007f7 jne LBB0_449 + 0x4c, 0x8d, 0x14, 0x17, //0x000007fd leaq (%rdi,%rdx), %r10 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000801 .p2align 4, 0x90 + //0x00000810 LBB0_108 + 0x48, 0x83, 0xc2, 0x01, //0x00000810 addq $1, %rdx + 0x49, 0x39, 0xd3, //0x00000814 cmpq %rdx, %r11 + 0x0f, 0x84, 0xb1, 0x09, 0x00, 0x00, //0x00000817 je LBB0_216 + //0x0000081d LBB0_109 + 0x0f, 0xbe, 0x0c, 0x16, //0x0000081d movsbl (%rsi,%rdx), %ecx + 0x8d, 0x59, 0xd0, //0x00000821 leal $-48(%rcx), %ebx + 0x83, 0xfb, 0x0a, //0x00000824 cmpl $10, %ebx + 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00000827 jb LBB0_108 + 0x8d, 0x59, 0xd5, //0x0000082d leal $-43(%rcx), %ebx + 0x83, 0xfb, 0x1a, //0x00000830 cmpl $26, %ebx + 0x0f, 0x87, 0x1c, 0x00, 0x00, 0x00, //0x00000833 ja LBB0_114 + 0x49, 0x63, 0x0c, 0x9e, //0x00000839 movslq (%r14,%rbx,4), %rcx + 0x4c, 0x01, 0xf1, //0x0000083d addq %r14, %rcx + 0xff, 0xe1, //0x00000840 jmpq *%rcx + //0x00000842 LBB0_112 + 0x49, 0x83, 0xf8, 0xff, //0x00000842 cmpq $-1, %r8 + 0x0f, 0x85, 0x8d, 0x1e, 0x00, 0x00, //0x00000846 jne LBB0_449 + 0x4c, 0x8d, 0x04, 0x17, //0x0000084c leaq (%rdi,%rdx), %r8 + 0xe9, 0xbb, 0xff, 0xff, 0xff, //0x00000850 jmp LBB0_108 + //0x00000855 LBB0_114 + 0x83, 0xf9, 0x65, //0x00000855 cmpl $101, %ecx + 0x0f, 0x85, 0x6a, 0x09, 0x00, 0x00, //0x00000858 jne LBB0_215 + //0x0000085e LBB0_115 + 0x49, 0x83, 0xff, 0xff, //0x0000085e cmpq $-1, %r15 + 0x0f, 0x85, 0x71, 0x1e, 0x00, 0x00, //0x00000862 jne LBB0_449 + 0x4c, 0x8d, 0x3c, 0x17, //0x00000868 leaq (%rdi,%rdx), %r15 + 0xe9, 0x9f, 0xff, 0xff, 0xff, //0x0000086c jmp LBB0_108 + //0x00000871 LBB0_117 + 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00000871 cmpq $4095, %r9 + 0x0f, 0x8f, 0xd2, 0x31, 0x00, 0x00, //0x00000878 jg LBB0_651 + 0x49, 0x8d, 0x41, 0x01, //0x0000087e leaq $1(%r9), %rax + 0x49, 0x89, 0x45, 0x00, //0x00000882 movq %rax, (%r13) + 0x4b, 0xc7, 0x44, 0xcd, 0x08, 0x00, 0x00, 0x00, 0x00, //0x00000886 movq $0, $8(%r13,%r9,8) + 0xe9, 0x3c, 0xf9, 0xff, 0xff, //0x0000088f jmp LBB0_4 + //0x00000894 LBB0_64 + 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x02, 0x00, 0x00, 0x00, //0x00000894 movq $2, (%r13,%r9,8) + 0x48, 0x8b, 0x4d, 0x98, //0x0000089d movq $-104(%rbp), %rcx + 0xf6, 0xc1, 0x40, //0x000008a1 testb $64, %cl + 0x0f, 0x85, 0xcb, 0x03, 0x00, 0x00, //0x000008a4 jne LBB0_152 + 0x49, 0x8b, 0x16, //0x000008aa movq (%r14), %rdx + 0x48, 0x8b, 0x45, 0xa8, //0x000008ad movq $-88(%rbp), %rax + 0x48, 0x8b, 0x40, 0x08, //0x000008b1 movq $8(%rax), %rax + 0xf6, 0xc1, 0x20, //0x000008b5 testb $32, %cl + 0x48, 0x89, 0x45, 0xa0, //0x000008b8 movq %rax, $-96(%rbp) + 0x48, 0x89, 0x55, 0xc0, //0x000008bc movq %rdx, $-64(%rbp) + 0x0f, 0x85, 0xf0, 0x06, 0x00, 0x00, //0x000008c0 jne LBB0_189 + 0x49, 0x89, 0xc1, //0x000008c6 movq %rax, %r9 + 0x49, 0x29, 0xd1, //0x000008c9 subq %rdx, %r9 + 0x0f, 0x84, 0xde, 0x33, 0x00, 0x00, //0x000008cc je LBB0_660 + 0x49, 0x83, 0xf9, 0x40, //0x000008d2 cmpq $64, %r9 + 0x0f, 0x82, 0xd9, 0x26, 0x00, 0x00, //0x000008d6 jb LBB0_510 + 0x49, 0x89, 0xd6, //0x000008dc movq %rdx, %r14 + 0x49, 0xf7, 0xd6, //0x000008df notq %r14 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000008e2 movq $-1, $-56(%rbp) + 0x48, 0x89, 0xd0, //0x000008ea movq %rdx, %rax + 0x45, 0x31, 0xc0, //0x000008ed xorl %r8d, %r8d + //0x000008f0 .p2align 4, 0x90 + //0x000008f0 LBB0_69 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x000008f0 movdqu (%r12,%rax), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x000008f6 movdqu $16(%r12,%rax), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x000008fd movdqu $32(%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000904 movdqu $48(%r12,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xfb, //0x0000090b movdqa %xmm3, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000090f pcmpeqb %xmm0, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00000913 pmovmskb %xmm7, %r10d + 0x66, 0x0f, 0x6f, 0xfc, //0x00000918 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000091c pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xdf, //0x00000920 pmovmskb %xmm7, %ebx + 0x66, 0x0f, 0x6f, 0xfd, //0x00000924 movdqa %xmm5, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00000928 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x0000092c pmovmskb %xmm7, %esi + 0x66, 0x0f, 0x6f, 0xfe, //0x00000930 movdqa %xmm6, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00000934 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xd7, //0x00000938 pmovmskb %xmm7, %edx + 0x66, 0x0f, 0x74, 0xd9, //0x0000093c pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000940 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x74, 0xe1, //0x00000945 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00000949 pmovmskb %xmm4, %ecx + 0x66, 0x0f, 0x74, 0xe9, //0x0000094d pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00000951 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x74, 0xf1, //0x00000955 pcmpeqb %xmm1, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00000959 pmovmskb %xmm6, %r15d + 0x48, 0xc1, 0xe2, 0x30, //0x0000095e shlq $48, %rdx + 0x48, 0xc1, 0xe6, 0x20, //0x00000962 shlq $32, %rsi + 0x48, 0x09, 0xd6, //0x00000966 orq %rdx, %rsi + 0x48, 0xc1, 0xe3, 0x10, //0x00000969 shlq $16, %rbx + 0x48, 0x09, 0xf3, //0x0000096d orq %rsi, %rbx + 0x49, 0x09, 0xda, //0x00000970 orq %rbx, %r10 + 0x49, 0xc1, 0xe7, 0x30, //0x00000973 shlq $48, %r15 + 0x48, 0xc1, 0xe7, 0x20, //0x00000977 shlq $32, %rdi + 0x4c, 0x09, 0xff, //0x0000097b orq %r15, %rdi + 0x48, 0xc1, 0xe1, 0x10, //0x0000097e shlq $16, %rcx + 0x48, 0x09, 0xf9, //0x00000982 orq %rdi, %rcx + 0x49, 0x09, 0xcb, //0x00000985 orq %rcx, %r11 + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x00000988 jne LBB0_121 + 0x4d, 0x85, 0xc0, //0x0000098e testq %r8, %r8 + 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x00000991 jne LBB0_123 + 0x45, 0x31, 0xc0, //0x00000997 xorl %r8d, %r8d + 0x4d, 0x85, 0xd2, //0x0000099a testq %r10, %r10 + 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x0000099d jne LBB0_124 + //0x000009a3 LBB0_72 + 0x49, 0x83, 0xc1, 0xc0, //0x000009a3 addq $-64, %r9 + 0x49, 0x83, 0xc6, 0xc0, //0x000009a7 addq $-64, %r14 + 0x48, 0x83, 0xc0, 0x40, //0x000009ab addq $64, %rax + 0x49, 0x83, 0xf9, 0x3f, //0x000009af cmpq $63, %r9 + 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x000009b3 ja LBB0_69 + 0xe9, 0x1e, 0x1f, 0x00, 0x00, //0x000009b9 jmp LBB0_73 + //0x000009be LBB0_121 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000009be cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000009c3 jne LBB0_123 + 0x49, 0x0f, 0xbc, 0xcb, //0x000009c9 bsfq %r11, %rcx + 0x48, 0x01, 0xc1, //0x000009cd addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x000009d0 movq %rcx, $-56(%rbp) + //0x000009d4 LBB0_123 + 0x4c, 0x89, 0xc1, //0x000009d4 movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x000009d7 notq %rcx + 0x4c, 0x21, 0xd9, //0x000009da andq %r11, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x000009dd leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xc2, //0x000009e1 orq %r8, %rdx + 0x48, 0x89, 0xd6, //0x000009e4 movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x000009e7 notq %rsi + 0x4c, 0x21, 0xde, //0x000009ea andq %r11, %rsi + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000009ed movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfe, //0x000009f7 andq %rdi, %rsi + 0x45, 0x31, 0xc0, //0x000009fa xorl %r8d, %r8d + 0x48, 0x01, 0xce, //0x000009fd addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc0, //0x00000a00 setb %r8b + 0x48, 0x01, 0xf6, //0x00000a04 addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000a07 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x00000a11 xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00000a14 andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000a17 notq %rsi + 0x49, 0x21, 0xf2, //0x00000a1a andq %rsi, %r10 + 0x4d, 0x85, 0xd2, //0x00000a1d testq %r10, %r10 + 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000a20 je LBB0_72 + //0x00000a26 LBB0_124 + 0x49, 0x0f, 0xbc, 0xc2, //0x00000a26 bsfq %r10, %rax + 0x4c, 0x29, 0xf0, //0x00000a2a subq %r14, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00000a2d movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000a31 movabsq $4294977024, %r11 + 0x48, 0x8b, 0x75, 0xc0, //0x00000a3b movq $-64(%rbp), %rsi + 0xe9, 0xb3, 0x0d, 0x00, 0x00, //0x00000a3f jmp LBB0_313 + //0x00000a44 LBB0_125 + 0x48, 0x8b, 0x4d, 0xa8, //0x00000a44 movq $-88(%rbp), %rcx + 0x4c, 0x8b, 0x49, 0x08, //0x00000a48 movq $8(%rcx), %r9 + 0x4d, 0x8b, 0x06, //0x00000a4c movq (%r14), %r8 + 0x4f, 0x8d, 0x14, 0x04, //0x00000a4f leaq (%r12,%r8), %r10 + 0x4d, 0x29, 0xc1, //0x00000a53 subq %r8, %r9 + 0x49, 0x83, 0xf9, 0x20, //0x00000a56 cmpq $32, %r9 + 0x0f, 0x8c, 0x3a, 0x1c, 0x00, 0x00, //0x00000a5a jl LBB0_133 + 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x00000a60 movl $32, %r14d + 0x31, 0xf6, //0x00000a66 xorl %esi, %esi + 0x45, 0x31, 0xdb, //0x00000a68 xorl %r11d, %r11d + 0xe9, 0x26, 0x00, 0x00, 0x00, //0x00000a6b jmp LBB0_127 + //0x00000a70 .p2align 4, 0x90 + //0x00000a70 LBB0_129 + 0x45, 0x31, 0xdb, //0x00000a70 xorl %r11d, %r11d + 0x48, 0x85, 0xdb, //0x00000a73 testq %rbx, %rbx + 0x0f, 0x85, 0x2b, 0xf7, 0xff, 0xff, //0x00000a76 jne LBB0_1 + //0x00000a7c LBB0_130 + 0x48, 0x83, 0xc6, 0x20, //0x00000a7c addq $32, %rsi + 0x4b, 0x8d, 0x0c, 0x31, //0x00000a80 leaq (%r9,%r14), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00000a84 addq $-32, %rcx + 0x49, 0x83, 0xc6, 0xe0, //0x00000a88 addq $-32, %r14 + 0x48, 0x83, 0xf9, 0x3f, //0x00000a8c cmpq $63, %rcx + 0x0f, 0x8e, 0xe7, 0x1b, 0x00, 0x00, //0x00000a90 jle LBB0_131 + //0x00000a96 LBB0_127 + 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x32, //0x00000a96 movdqu (%r10,%rsi), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x32, 0x10, //0x00000a9c movdqu $16(%r10,%rsi), %xmm5 + 0x66, 0x0f, 0x6f, 0xf4, //0x00000aa3 movdqa %xmm4, %xmm6 + 0x66, 0x0f, 0x74, 0xf0, //0x00000aa7 pcmpeqb %xmm0, %xmm6 + 0x66, 0x0f, 0xd7, 0xfe, //0x00000aab pmovmskb %xmm6, %edi + 0x66, 0x0f, 0x6f, 0xf5, //0x00000aaf movdqa %xmm5, %xmm6 + 0x66, 0x0f, 0x74, 0xf0, //0x00000ab3 pcmpeqb %xmm0, %xmm6 + 0x66, 0x0f, 0xd7, 0xde, //0x00000ab7 pmovmskb %xmm6, %ebx + 0x48, 0xc1, 0xe3, 0x10, //0x00000abb shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x00000abf orq %rdi, %rbx + 0x66, 0x0f, 0x74, 0xe1, //0x00000ac2 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00000ac6 pmovmskb %xmm4, %ecx + 0x66, 0x0f, 0x74, 0xe9, //0x00000aca pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00000ace pmovmskb %xmm5, %edi + 0x48, 0xc1, 0xe7, 0x10, //0x00000ad2 shlq $16, %rdi + 0x48, 0x09, 0xcf, //0x00000ad6 orq %rcx, %rdi + 0x48, 0x89, 0xf9, //0x00000ad9 movq %rdi, %rcx + 0x4c, 0x09, 0xd9, //0x00000adc orq %r11, %rcx + 0x0f, 0x84, 0x8b, 0xff, 0xff, 0xff, //0x00000adf je LBB0_129 + 0x44, 0x89, 0xd9, //0x00000ae5 movl %r11d, %ecx + 0xf7, 0xd1, //0x00000ae8 notl %ecx + 0x21, 0xf9, //0x00000aea andl %edi, %ecx + 0x44, 0x8d, 0x3c, 0x09, //0x00000aec leal (%rcx,%rcx), %r15d + 0x45, 0x09, 0xdf, //0x00000af0 orl %r11d, %r15d + 0x44, 0x89, 0xfa, //0x00000af3 movl %r15d, %edx + 0xf7, 0xd2, //0x00000af6 notl %edx + 0x21, 0xfa, //0x00000af8 andl %edi, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000afa andl $-1431655766, %edx + 0x45, 0x31, 0xdb, //0x00000b00 xorl %r11d, %r11d + 0x01, 0xca, //0x00000b03 addl %ecx, %edx + 0x41, 0x0f, 0x92, 0xc3, //0x00000b05 setb %r11b + 0x01, 0xd2, //0x00000b09 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x00000b0b xorl $1431655765, %edx + 0x44, 0x21, 0xfa, //0x00000b11 andl %r15d, %edx + 0xf7, 0xd2, //0x00000b14 notl %edx + 0x21, 0xd3, //0x00000b16 andl %edx, %ebx + 0x48, 0x85, 0xdb, //0x00000b18 testq %rbx, %rbx + 0x0f, 0x84, 0x5b, 0xff, 0xff, 0xff, //0x00000b1b je LBB0_130 + 0xe9, 0x81, 0xf6, 0xff, 0xff, //0x00000b21 jmp LBB0_1 + //0x00000b26 LBB0_134 + 0x4c, 0x89, 0xf1, //0x00000b26 movq %r14, %rcx + 0x4c, 0x29, 0xc1, //0x00000b29 subq %r8, %rcx + 0x48, 0x83, 0xf9, 0x10, //0x00000b2c cmpq $16, %rcx + 0x0f, 0x82, 0xc7, 0x22, 0x00, 0x00, //0x00000b30 jb LBB0_489 + 0x4c, 0x89, 0xc6, //0x00000b36 movq %r8, %rsi + 0x48, 0xf7, 0xde, //0x00000b39 negq %rsi + 0x49, 0x8d, 0x40, 0x01, //0x00000b3c leaq $1(%r8), %rax + 0x49, 0x8d, 0x48, 0xff, //0x00000b40 leaq $-1(%r8), %rcx + 0x4b, 0x8d, 0x14, 0x04, //0x00000b44 leaq (%r12,%r8), %rdx + 0x48, 0x83, 0xc2, 0xff, //0x00000b48 addq $-1, %rdx + 0x4c, 0x89, 0xc3, //0x00000b4c movq %r8, %rbx + 0x90, //0x00000b4f .p2align 4, 0x90 + //0x00000b50 LBB0_136 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x1c, //0x00000b50 movdqu (%r12,%rbx), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00000b56 movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0x74, 0xe6, //0x00000b5a pcmpeqb %xmm14, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xd9, //0x00000b5f pand %xmm9, %xmm3 + 0x66, 0x0f, 0x74, 0xda, //0x00000b64 pcmpeqb %xmm2, %xmm3 + 0x66, 0x0f, 0xeb, 0xdc, //0x00000b68 por %xmm4, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00000b6c pmovmskb %xmm3, %edi + 0x85, 0xff, //0x00000b70 testl %edi, %edi + 0x0f, 0x85, 0x94, 0x00, 0x00, 0x00, //0x00000b72 jne LBB0_147 + 0x48, 0x83, 0xc3, 0x10, //0x00000b78 addq $16, %rbx + 0x49, 0x8d, 0x3c, 0x36, //0x00000b7c leaq (%r14,%rsi), %rdi + 0x48, 0x83, 0xc7, 0xf0, //0x00000b80 addq $-16, %rdi + 0x48, 0x83, 0xc6, 0xf0, //0x00000b84 addq $-16, %rsi + 0x48, 0x83, 0xc0, 0x10, //0x00000b88 addq $16, %rax + 0x48, 0x83, 0xc1, 0x10, //0x00000b8c addq $16, %rcx + 0x48, 0x83, 0xc2, 0x10, //0x00000b90 addq $16, %rdx + 0x48, 0x83, 0xff, 0x0f, //0x00000b94 cmpq $15, %rdi + 0x0f, 0x87, 0xb2, 0xff, 0xff, 0xff, //0x00000b98 ja LBB0_136 + 0x4c, 0x89, 0xe0, //0x00000b9e movq %r12, %rax + 0x48, 0x29, 0xf0, //0x00000ba1 subq %rsi, %rax + 0x49, 0x01, 0xf6, //0x00000ba4 addq %rsi, %r14 + 0x4c, 0x89, 0xf1, //0x00000ba7 movq %r14, %rcx + 0x48, 0x85, 0xc9, //0x00000baa testq %rcx, %rcx + 0x4c, 0x8b, 0x75, 0xd0, //0x00000bad movq $-48(%rbp), %r14 + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00000bb1 movabsq $17596481021440, %rdi + 0x0f, 0x84, 0x40, 0x00, 0x00, 0x00, //0x00000bbb je LBB0_146 + //0x00000bc1 LBB0_139 + 0x48, 0x8d, 0x14, 0x08, //0x00000bc1 leaq (%rax,%rcx), %rdx + //0x00000bc5 LBB0_140 + 0x0f, 0xb6, 0x30, //0x00000bc5 movzbl (%rax), %esi + 0x48, 0x83, 0xfe, 0x2c, //0x00000bc8 cmpq $44, %rsi + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x00000bcc ja LBB0_142 + 0x48, 0x0f, 0xa3, 0xf7, //0x00000bd2 btq %rsi, %rdi + 0x0f, 0x82, 0x25, 0x00, 0x00, 0x00, //0x00000bd6 jb LBB0_146 + //0x00000bdc LBB0_142 + 0x40, 0x80, 0xfe, 0x5d, //0x00000bdc cmpb $93, %sil + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x00000be0 je LBB0_146 + 0x40, 0x80, 0xfe, 0x7d, //0x00000be6 cmpb $125, %sil + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00000bea je LBB0_146 + 0x48, 0x83, 0xc0, 0x01, //0x00000bf0 addq $1, %rax + 0x48, 0x83, 0xc1, 0xff, //0x00000bf4 addq $-1, %rcx + 0x0f, 0x85, 0xc7, 0xff, 0xff, 0xff, //0x00000bf8 jne LBB0_140 + 0x48, 0x89, 0xd0, //0x00000bfe movq %rdx, %rax + //0x00000c01 LBB0_146 + 0x4c, 0x29, 0xe0, //0x00000c01 subq %r12, %rax + 0x49, 0x89, 0x06, //0x00000c04 movq %rax, (%r14) + 0xe9, 0xba, 0xf5, 0xff, 0xff, //0x00000c07 jmp LBB0_3 + //0x00000c0c LBB0_147 + 0x66, 0x0f, 0xbc, 0xff, //0x00000c0c bsfw %di, %di + 0x0f, 0xb7, 0xdf, //0x00000c10 movzwl %di, %ebx + 0x48, 0x89, 0xdf, //0x00000c13 movq %rbx, %rdi + 0x48, 0x29, 0xf7, //0x00000c16 subq %rsi, %rdi + 0x4c, 0x8b, 0x75, 0xd0, //0x00000c19 movq $-48(%rbp), %r14 + 0x49, 0x89, 0x3e, //0x00000c1d movq %rdi, (%r14) + 0x48, 0x85, 0xff, //0x00000c20 testq %rdi, %rdi + 0x0f, 0x8e, 0x9d, 0xf5, 0xff, 0xff, //0x00000c23 jle LBB0_3 + 0x48, 0x01, 0xd8, //0x00000c29 addq %rbx, %rax + 0x48, 0x01, 0xd9, //0x00000c2c addq %rbx, %rcx + 0x48, 0x01, 0xda, //0x00000c2f addq %rbx, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000c32 .p2align 4, 0x90 + //0x00000c40 LBB0_149 + 0x0f, 0xb6, 0x32, //0x00000c40 movzbl (%rdx), %esi + 0x48, 0x83, 0xfe, 0x20, //0x00000c43 cmpq $32, %rsi + 0x0f, 0x87, 0x79, 0xf5, 0xff, 0xff, //0x00000c47 ja LBB0_3 + 0x49, 0x0f, 0xa3, 0xf3, //0x00000c4d btq %rsi, %r11 + 0x0f, 0x83, 0x6f, 0xf5, 0xff, 0xff, //0x00000c51 jae LBB0_3 + 0x49, 0x89, 0x0e, //0x00000c57 movq %rcx, (%r14) + 0x48, 0x83, 0xc0, 0xff, //0x00000c5a addq $-1, %rax + 0x48, 0x83, 0xc1, 0xff, //0x00000c5e addq $-1, %rcx + 0x48, 0x83, 0xc2, 0xff, //0x00000c62 addq $-1, %rdx + 0x48, 0x83, 0xf8, 0x01, //0x00000c66 cmpq $1, %rax + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x00000c6a jg LBB0_149 + 0xe9, 0x51, 0xf5, 0xff, 0xff, //0x00000c70 jmp LBB0_3 + //0x00000c75 LBB0_152 + 0x48, 0x8b, 0x4d, 0xa8, //0x00000c75 movq $-88(%rbp), %rcx + 0x4c, 0x8b, 0x49, 0x08, //0x00000c79 movq $8(%rcx), %r9 + 0x4d, 0x8b, 0x06, //0x00000c7d movq (%r14), %r8 + 0x4f, 0x8d, 0x14, 0x04, //0x00000c80 leaq (%r12,%r8), %r10 + 0x4d, 0x29, 0xc1, //0x00000c84 subq %r8, %r9 + 0x49, 0x83, 0xf9, 0x20, //0x00000c87 cmpq $32, %r9 + 0x0f, 0x8c, 0xa5, 0x1a, 0x00, 0x00, //0x00000c8b jl LBB0_161 + 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x00000c91 movl $32, %r14d + 0x31, 0xf6, //0x00000c97 xorl %esi, %esi + 0x45, 0x31, 0xdb, //0x00000c99 xorl %r11d, %r11d + 0xe9, 0x35, 0x00, 0x00, 0x00, //0x00000c9c jmp LBB0_154 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000ca1 .p2align 4, 0x90 + //0x00000cb0 LBB0_157 0x45, 0x31, 0xdb, //0x00000cb0 xorl %r11d, %r11d - 0x48, 0x85, 0xff, //0x00000cb3 testq %rdi, %rdi - 0x0f, 0x85, 0xa5, 0x00, 0x00, 0x00, //0x00000cb6 jne LBB0_151 - //0x00000cbc LBB0_153 - 0x48, 0x83, 0xc2, 0x20, //0x00000cbc addq $32, %rdx + 0x48, 0x85, 0xdb, //0x00000cb3 testq %rbx, %rbx + 0x0f, 0x85, 0xa5, 0x00, 0x00, 0x00, //0x00000cb6 jne LBB0_156 + //0x00000cbc LBB0_158 + 0x48, 0x83, 0xc6, 0x20, //0x00000cbc addq $32, %rsi 0x4b, 0x8d, 0x0c, 0x31, //0x00000cc0 leaq (%r9,%r14), %rcx 0x48, 0x83, 0xc1, 0xe0, //0x00000cc4 addq $-32, %rcx 0x49, 0x83, 0xc6, 0xe0, //0x00000cc8 addq $-32, %r14 0x48, 0x83, 0xf9, 0x3f, //0x00000ccc cmpq $63, %rcx - 0x0f, 0x8e, 0xfb, 0x19, 0x00, 0x00, //0x00000cd0 jle LBB0_154 - //0x00000cd6 LBB0_149 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x12, //0x00000cd6 movdqu (%r10,%rdx), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x12, 0x10, //0x00000cdc movdqu $16(%r10,%rdx), %xmm4 + 0x0f, 0x8e, 0x43, 0x1a, 0x00, 0x00, //0x00000cd0 jle LBB0_159 + //0x00000cd6 LBB0_154 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x32, //0x00000cd6 movdqu (%r10,%rsi), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x32, 0x10, //0x00000cdc movdqu $16(%r10,%rsi), %xmm4 0x66, 0x0f, 0x6f, 0xeb, //0x00000ce3 movdqa %xmm3, %xmm5 0x66, 0x0f, 0x74, 0xe8, //0x00000ce7 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00000ceb pmovmskb %xmm5, %esi + 0x66, 0x0f, 0xd7, 0xfd, //0x00000ceb pmovmskb %xmm5, %edi 0x66, 0x0f, 0x6f, 0xec, //0x00000cef movdqa %xmm4, %xmm5 0x66, 0x0f, 0x74, 0xe8, //0x00000cf3 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x00000cf7 pmovmskb %xmm5, %edi - 0x48, 0xc1, 0xe7, 0x10, //0x00000cfb shlq $16, %rdi - 0x48, 0x09, 0xf7, //0x00000cff orq %rsi, %rdi + 0x66, 0x0f, 0xd7, 0xdd, //0x00000cf7 pmovmskb %xmm5, %ebx + 0x48, 0xc1, 0xe3, 0x10, //0x00000cfb shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x00000cff orq %rdi, %rbx 0x66, 0x0f, 0x74, 0xd9, //0x00000d02 pcmpeqb %xmm1, %xmm3 0x66, 0x0f, 0xd7, 0xcb, //0x00000d06 pmovmskb %xmm3, %ecx 0x66, 0x0f, 0x74, 0xe1, //0x00000d0a pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xf4, //0x00000d0e pmovmskb %xmm4, %esi - 0x48, 0xc1, 0xe6, 0x10, //0x00000d12 shlq $16, %rsi - 0x48, 0x09, 0xce, //0x00000d16 orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00000d19 movq %rsi, %rcx + 0x66, 0x0f, 0xd7, 0xfc, //0x00000d0e pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe7, 0x10, //0x00000d12 shlq $16, %rdi + 0x48, 0x09, 0xcf, //0x00000d16 orq %rcx, %rdi + 0x48, 0x89, 0xf9, //0x00000d19 movq %rdi, %rcx 0x4c, 0x09, 0xd9, //0x00000d1c orq %r11, %rcx - 0x0f, 0x84, 0x8b, 0xff, 0xff, 0xff, //0x00000d1f je LBB0_152 + 0x0f, 0x84, 0x8b, 0xff, 0xff, 0xff, //0x00000d1f je LBB0_157 0x44, 0x89, 0xd9, //0x00000d25 movl %r11d, %ecx 0xf7, 0xd1, //0x00000d28 notl %ecx - 0x21, 0xf1, //0x00000d2a andl %esi, %ecx + 0x21, 0xf9, //0x00000d2a andl %edi, %ecx 0x44, 0x8d, 0x3c, 0x09, //0x00000d2c leal (%rcx,%rcx), %r15d 0x45, 0x09, 0xdf, //0x00000d30 orl %r11d, %r15d - 0x44, 0x89, 0xfb, //0x00000d33 movl %r15d, %ebx - 0xf7, 0xd3, //0x00000d36 notl %ebx - 0x21, 0xf3, //0x00000d38 andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000d3a andl $-1431655766, %ebx + 0x44, 0x89, 0xfa, //0x00000d33 movl %r15d, %edx + 0xf7, 0xd2, //0x00000d36 notl %edx + 0x21, 0xfa, //0x00000d38 andl %edi, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000d3a andl $-1431655766, %edx 0x45, 0x31, 0xdb, //0x00000d40 xorl %r11d, %r11d - 0x01, 0xcb, //0x00000d43 addl %ecx, %ebx + 0x01, 0xca, //0x00000d43 addl %ecx, %edx 0x41, 0x0f, 0x92, 0xc3, //0x00000d45 setb %r11b - 0x01, 0xdb, //0x00000d49 addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00000d4b xorl $1431655765, %ebx - 0x44, 0x21, 0xfb, //0x00000d51 andl %r15d, %ebx - 0xf7, 0xd3, //0x00000d54 notl %ebx - 0x21, 0xdf, //0x00000d56 andl %ebx, %edi - 0x48, 0x85, 0xff, //0x00000d58 testq %rdi, %rdi - 0x0f, 0x84, 0x5b, 0xff, 0xff, 0xff, //0x00000d5b je LBB0_153 - //0x00000d61 LBB0_151 - 0x0f, 0xbc, 0xc7, //0x00000d61 bsfl %edi, %eax + 0x01, 0xd2, //0x00000d49 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x00000d4b xorl $1431655765, %edx + 0x44, 0x21, 0xfa, //0x00000d51 andl %r15d, %edx + 0xf7, 0xd2, //0x00000d54 notl %edx + 0x21, 0xd3, //0x00000d56 andl %edx, %ebx + 0x48, 0x85, 0xdb, //0x00000d58 testq %rbx, %rbx + 0x0f, 0x84, 0x5b, 0xff, 0xff, 0xff, //0x00000d5b je LBB0_158 + //0x00000d61 LBB0_156 + 0x0f, 0xbc, 0xc3, //0x00000d61 bsfl %ebx, %eax 0x4c, 0x01, 0xc0, //0x00000d64 addq %r8, %rax - 0x4c, 0x8d, 0x14, 0x02, //0x00000d67 leaq (%rdx,%rax), %r10 + 0x4c, 0x8d, 0x14, 0x06, //0x00000d67 leaq (%rsi,%rax), %r10 0x49, 0x83, 0xc2, 0x01, //0x00000d6b addq $1, %r10 0x4c, 0x8b, 0x75, 0xd0, //0x00000d6f movq $-48(%rbp), %r14 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000d73 movabsq $4294977024, %r11 0x4d, 0x89, 0x16, //0x00000d7d movq %r10, (%r14) 0x4d, 0x85, 0xc0, //0x00000d80 testq %r8, %r8 - 0x0f, 0x8f, 0x93, 0x0a, 0x00, 0x00, //0x00000d83 jg LBB0_306 - 0xe9, 0x73, 0x2c, 0x00, 0x00, //0x00000d89 jmp LBB0_608 - //0x00000d8e LBB0_157 + 0x0f, 0x8f, 0x83, 0x0a, 0x00, 0x00, //0x00000d83 jg LBB0_315 + 0xe9, 0xce, 0x2c, 0x00, 0x00, //0x00000d89 jmp LBB0_622 + //0x00000d8e LBB0_162 0x49, 0x89, 0xc6, //0x00000d8e movq %rax, %r14 0x49, 0x29, 0xd6, //0x00000d91 subq %rdx, %r14 - 0x0f, 0x84, 0x71, 0x2e, 0x00, 0x00, //0x00000d94 je LBB0_643 + 0x0f, 0x84, 0xdc, 0x2e, 0x00, 0x00, //0x00000d94 je LBB0_657 0x49, 0x83, 0xfe, 0x40, //0x00000d9a cmpq $64, %r14 - 0x0f, 0x82, 0x17, 0x21, 0x00, 0x00, //0x00000d9e jb LBB0_486 - 0x4c, 0x89, 0x65, 0xc0, //0x00000da4 movq %r12, $-64(%rbp) + 0x0f, 0x82, 0x5e, 0x21, 0x00, 0x00, //0x00000d9e jb LBB0_504 + 0x4c, 0x89, 0x65, 0xb8, //0x00000da4 movq %r12, $-72(%rbp) 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000da8 movq $-1, $-56(%rbp) - 0x48, 0x8b, 0x45, 0xb0, //0x00000db0 movq $-80(%rbp), %rax + 0x48, 0x8b, 0x45, 0xc0, //0x00000db0 movq $-64(%rbp), %rax 0x31, 0xdb, //0x00000db4 xorl %ebx, %ebx 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000db6 .p2align 4, 0x90 - //0x00000dc0 LBB0_160 + //0x00000dc0 LBB0_165 0x49, 0x89, 0xdc, //0x00000dc0 movq %rbx, %r12 - 0x48, 0x8b, 0x4d, 0xc0, //0x00000dc3 movq $-64(%rbp), %rcx + 0x48, 0x8b, 0x4d, 0xb8, //0x00000dc3 movq $-72(%rbp), %rcx 0xf3, 0x0f, 0x6f, 0x1c, 0x01, //0x00000dc7 movdqu (%rcx,%rax), %xmm3 0xf3, 0x0f, 0x6f, 0x7c, 0x01, 0x10, //0x00000dcc movdqu $16(%rcx,%rax), %xmm7 0xf3, 0x0f, 0x6f, 0x74, 0x01, 0x20, //0x00000dd2 movdqu $32(%rcx,%rax), %xmm6 @@ -875,7 +878,7 @@ var _text_skip_array = []byte{ 0x66, 0x0f, 0xd7, 0xdd, //0x00000df3 pmovmskb %xmm5, %ebx 0x66, 0x0f, 0x6f, 0xee, //0x00000df7 movdqa %xmm6, %xmm5 0x66, 0x0f, 0x74, 0xe8, //0x00000dfb pcmpeqb %xmm0, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xd5, //0x00000dff pmovmskb %xmm5, %r10d + 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x00000dff pmovmskb %xmm5, %r9d 0x66, 0x0f, 0x6f, 0xec, //0x00000e04 movdqa %xmm4, %xmm5 0x66, 0x0f, 0x74, 0xe8, //0x00000e08 pcmpeqb %xmm0, %xmm5 0x66, 0x44, 0x0f, 0xd7, 0xfd, //0x00000e0c pmovmskb %xmm5, %r15d @@ -884,7 +887,7 @@ var _text_skip_array = []byte{ 0x66, 0x44, 0x0f, 0xd7, 0xed, //0x00000e19 pmovmskb %xmm5, %r13d 0x66, 0x0f, 0x6f, 0xef, //0x00000e1e movdqa %xmm7, %xmm5 0x66, 0x0f, 0x74, 0xe9, //0x00000e22 pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x00000e26 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0xd7, 0xd5, //0x00000e26 pmovmskb %xmm5, %edx 0x66, 0x0f, 0x6f, 0xee, //0x00000e2a movdqa %xmm6, %xmm5 0x66, 0x0f, 0x74, 0xe9, //0x00000e2e pcmpeqb %xmm1, %xmm5 0x66, 0x0f, 0xd7, 0xcd, //0x00000e32 pmovmskb %xmm5, %ecx @@ -895,3281 +898,3312 @@ var _text_skip_array = []byte{ 0x66, 0x0f, 0x64, 0xef, //0x00000e48 pcmpgtb %xmm7, %xmm5 0x66, 0x41, 0x0f, 0x64, 0xfa, //0x00000e4c pcmpgtb %xmm10, %xmm7 0x66, 0x0f, 0xdb, 0xfd, //0x00000e51 pand %xmm5, %xmm7 - 0x66, 0x0f, 0xd7, 0xf7, //0x00000e55 pmovmskb %xmm7, %esi + 0x66, 0x0f, 0xd7, 0xff, //0x00000e55 pmovmskb %xmm7, %edi 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x00000e59 movdqa %xmm12, %xmm5 0x66, 0x0f, 0x64, 0xee, //0x00000e5e pcmpgtb %xmm6, %xmm5 0x66, 0x41, 0x0f, 0x64, 0xf2, //0x00000e62 pcmpgtb %xmm10, %xmm6 0x66, 0x0f, 0xdb, 0xf5, //0x00000e67 pand %xmm5, %xmm6 - 0x66, 0x0f, 0xd7, 0xd6, //0x00000e6b pmovmskb %xmm6, %edx + 0x66, 0x0f, 0xd7, 0xf6, //0x00000e6b pmovmskb %xmm6, %esi 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x00000e6f movdqa %xmm12, %xmm5 0x66, 0x0f, 0x64, 0xec, //0x00000e74 pcmpgtb %xmm4, %xmm5 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00000e78 pcmpgtb %xmm10, %xmm4 0x66, 0x0f, 0xdb, 0xe5, //0x00000e7d pand %xmm5, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xcc, //0x00000e81 pmovmskb %xmm4, %r9d + 0x66, 0x44, 0x0f, 0xd7, 0xd4, //0x00000e81 pmovmskb %xmm4, %r10d 0x49, 0xc1, 0xe7, 0x30, //0x00000e86 shlq $48, %r15 - 0x49, 0xc1, 0xe2, 0x20, //0x00000e8a shlq $32, %r10 - 0x4d, 0x09, 0xfa, //0x00000e8e orq %r15, %r10 + 0x49, 0xc1, 0xe1, 0x20, //0x00000e8a shlq $32, %r9 + 0x4d, 0x09, 0xf9, //0x00000e8e orq %r15, %r9 0x48, 0xc1, 0xe3, 0x10, //0x00000e91 shlq $16, %rbx - 0x4c, 0x09, 0xd3, //0x00000e95 orq %r10, %rbx + 0x4c, 0x09, 0xcb, //0x00000e95 orq %r9, %rbx 0x49, 0x09, 0xdb, //0x00000e98 orq %rbx, %r11 0x49, 0xc1, 0xe0, 0x30, //0x00000e9b shlq $48, %r8 0x48, 0xc1, 0xe1, 0x20, //0x00000e9f shlq $32, %rcx 0x4c, 0x09, 0xc1, //0x00000ea3 orq %r8, %rcx - 0x48, 0xc1, 0xe7, 0x10, //0x00000ea6 shlq $16, %rdi - 0x48, 0x09, 0xcf, //0x00000eaa orq %rcx, %rdi - 0x49, 0xc1, 0xe1, 0x30, //0x00000ead shlq $48, %r9 - 0x48, 0xc1, 0xe2, 0x20, //0x00000eb1 shlq $32, %rdx - 0x4c, 0x09, 0xca, //0x00000eb5 orq %r9, %rdx - 0x48, 0xc1, 0xe6, 0x10, //0x00000eb8 shlq $16, %rsi - 0x48, 0x09, 0xd6, //0x00000ebc orq %rdx, %rsi - 0x49, 0x09, 0xfd, //0x00000ebf orq %rdi, %r13 - 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00000ec2 jne LBB0_177 + 0x48, 0xc1, 0xe2, 0x10, //0x00000ea6 shlq $16, %rdx + 0x48, 0x09, 0xca, //0x00000eaa orq %rcx, %rdx + 0x49, 0xc1, 0xe2, 0x30, //0x00000ead shlq $48, %r10 + 0x48, 0xc1, 0xe6, 0x20, //0x00000eb1 shlq $32, %rsi + 0x4c, 0x09, 0xd6, //0x00000eb5 orq %r10, %rsi + 0x48, 0xc1, 0xe7, 0x10, //0x00000eb8 shlq $16, %rdi + 0x48, 0x09, 0xf7, //0x00000ebc orq %rsi, %rdi + 0x49, 0x09, 0xd5, //0x00000ebf orq %rdx, %r13 + 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00000ec2 jne LBB0_182 0x4d, 0x85, 0xe4, //0x00000ec8 testq %r12, %r12 - 0x0f, 0x85, 0x5e, 0x00, 0x00, 0x00, //0x00000ecb jne LBB0_179 + 0x0f, 0x85, 0x5e, 0x00, 0x00, 0x00, //0x00000ecb jne LBB0_184 0x31, 0xdb, //0x00000ed1 xorl %ebx, %ebx - //0x00000ed3 LBB0_163 + //0x00000ed3 LBB0_168 0x66, 0x41, 0x0f, 0x6f, 0xe4, //0x00000ed3 movdqa %xmm12, %xmm4 0x66, 0x0f, 0x64, 0xe3, //0x00000ed8 pcmpgtb %xmm3, %xmm4 0x66, 0x41, 0x0f, 0x64, 0xda, //0x00000edc pcmpgtb %xmm10, %xmm3 0x66, 0x0f, 0xdb, 0xdc, //0x00000ee1 pand %xmm4, %xmm3 0x66, 0x0f, 0xd7, 0xcb, //0x00000ee5 pmovmskb %xmm3, %ecx - 0x48, 0x09, 0xce, //0x00000ee9 orq %rcx, %rsi + 0x48, 0x09, 0xcf, //0x00000ee9 orq %rcx, %rdi 0x4d, 0x85, 0xdb, //0x00000eec testq %r11, %r11 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00000eef movq $-72(%rbp), %r13 - 0x0f, 0x85, 0x82, 0x00, 0x00, 0x00, //0x00000ef3 jne LBB0_180 - 0x48, 0x85, 0xf6, //0x00000ef9 testq %rsi, %rsi - 0x0f, 0x85, 0x84, 0x2b, 0x00, 0x00, //0x00000efc jne LBB0_618 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00000eef movq $-80(%rbp), %r13 + 0x0f, 0x85, 0x82, 0x00, 0x00, 0x00, //0x00000ef3 jne LBB0_185 + 0x48, 0x85, 0xff, //0x00000ef9 testq %rdi, %rdi + 0x0f, 0x85, 0xec, 0x2b, 0x00, 0x00, //0x00000efc jne LBB0_631 0x49, 0x83, 0xc6, 0xc0, //0x00000f02 addq $-64, %r14 0x48, 0x83, 0xc0, 0x40, //0x00000f06 addq $64, %rax 0x49, 0x83, 0xfe, 0x3f, //0x00000f0a cmpq $63, %r14 - 0x0f, 0x87, 0xac, 0xfe, 0xff, 0xff, //0x00000f0e ja LBB0_160 - 0xe9, 0x6b, 0x18, 0x00, 0x00, //0x00000f14 jmp LBB0_166 - //0x00000f19 LBB0_177 + 0x0f, 0x87, 0xac, 0xfe, 0xff, 0xff, //0x00000f0e ja LBB0_165 + 0xe9, 0xb3, 0x18, 0x00, 0x00, //0x00000f14 jmp LBB0_171 + //0x00000f19 LBB0_182 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00000f19 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00000f1e jne LBB0_179 + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00000f1e jne LBB0_184 0x49, 0x0f, 0xbc, 0xcd, //0x00000f24 bsfq %r13, %rcx 0x48, 0x01, 0xc1, //0x00000f28 addq %rax, %rcx 0x48, 0x89, 0x4d, 0xc8, //0x00000f2b movq %rcx, $-56(%rbp) - //0x00000f2f LBB0_179 + //0x00000f2f LBB0_184 0x4c, 0x89, 0xe1, //0x00000f2f movq %r12, %rcx 0x48, 0xf7, 0xd1, //0x00000f32 notq %rcx 0x4c, 0x21, 0xe9, //0x00000f35 andq %r13, %rcx 0x48, 0x8d, 0x14, 0x09, //0x00000f38 leaq (%rcx,%rcx), %rdx 0x4c, 0x09, 0xe2, //0x00000f3c orq %r12, %rdx - 0x48, 0x89, 0xd7, //0x00000f3f movq %rdx, %rdi - 0x48, 0xf7, 0xd7, //0x00000f42 notq %rdi - 0x4c, 0x21, 0xef, //0x00000f45 andq %r13, %rdi + 0x48, 0x89, 0xd6, //0x00000f3f movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000f42 notq %rsi + 0x4c, 0x21, 0xee, //0x00000f45 andq %r13, %rsi 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000f48 movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xdf, //0x00000f52 andq %rbx, %rdi + 0x48, 0x21, 0xde, //0x00000f52 andq %rbx, %rsi 0x31, 0xdb, //0x00000f55 xorl %ebx, %ebx - 0x48, 0x01, 0xcf, //0x00000f57 addq %rcx, %rdi + 0x48, 0x01, 0xce, //0x00000f57 addq %rcx, %rsi 0x0f, 0x92, 0xc3, //0x00000f5a setb %bl - 0x48, 0x01, 0xff, //0x00000f5d addq %rdi, %rdi + 0x48, 0x01, 0xf6, //0x00000f5d addq %rsi, %rsi 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000f60 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xcf, //0x00000f6a xorq %rcx, %rdi - 0x48, 0x21, 0xd7, //0x00000f6d andq %rdx, %rdi - 0x48, 0xf7, 0xd7, //0x00000f70 notq %rdi - 0x49, 0x21, 0xfb, //0x00000f73 andq %rdi, %r11 - 0xe9, 0x58, 0xff, 0xff, 0xff, //0x00000f76 jmp LBB0_163 - //0x00000f7b LBB0_180 + 0x48, 0x31, 0xce, //0x00000f6a xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00000f6d andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000f70 notq %rsi + 0x49, 0x21, 0xf3, //0x00000f73 andq %rsi, %r11 + 0xe9, 0x58, 0xff, 0xff, 0xff, //0x00000f76 jmp LBB0_168 + //0x00000f7b LBB0_185 0x49, 0x0f, 0xbc, 0xcb, //0x00000f7b bsfq %r11, %rcx - 0x48, 0x85, 0xf6, //0x00000f7f testq %rsi, %rsi - 0x0f, 0x84, 0xdb, 0x02, 0x00, 0x00, //0x00000f82 je LBB0_221 - 0x48, 0x0f, 0xbc, 0xd6, //0x00000f88 bsfq %rsi, %rdx + 0x48, 0x85, 0xff, //0x00000f7f testq %rdi, %rdi + 0x0f, 0x84, 0xc4, 0x02, 0x00, 0x00, //0x00000f82 je LBB0_227 + 0x48, 0x0f, 0xbc, 0xd7, //0x00000f88 bsfq %rdi, %rdx 0x4c, 0x8b, 0x75, 0xd0, //0x00000f8c movq $-48(%rbp), %r14 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000f90 movabsq $4294977024, %r11 0x48, 0x39, 0xca, //0x00000f9a cmpq %rcx, %rdx - 0x0f, 0x83, 0xdc, 0x02, 0x00, 0x00, //0x00000f9d jae LBB0_222 - 0xe9, 0x74, 0x2c, 0x00, 0x00, //0x00000fa3 jmp LBB0_182 - //0x00000fa8 LBB0_183 - 0x41, 0x89, 0xcb, //0x00000fa8 movl %ecx, %r11d - 0x4d, 0x01, 0xf3, //0x00000fab addq %r14, %r11 - 0x4d, 0x01, 0xeb, //0x00000fae addq %r13, %r11 - //0x00000fb1 LBB0_184 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00000fb1 movq $-1, %r13 - 0x4d, 0x85, 0xc0, //0x00000fb8 testq %r8, %r8 - 0x0f, 0x85, 0x49, 0x02, 0x00, 0x00, //0x00000fbb jne LBB0_213 - 0xe9, 0x00, 0x2c, 0x00, 0x00, //0x00000fc1 jmp LBB0_185 - //0x00000fc6 LBB0_186 - 0x49, 0x29, 0xd1, //0x00000fc6 subq %rdx, %r9 - 0x48, 0x89, 0xd1, //0x00000fc9 movq %rdx, %rcx - 0x0f, 0x84, 0x73, 0x2c, 0x00, 0x00, //0x00000fcc je LBB0_644 - 0x4c, 0x89, 0x65, 0xc0, //0x00000fd2 movq %r12, $-64(%rbp) - 0x49, 0x83, 0xf9, 0x40, //0x00000fd6 cmpq $64, %r9 - 0x0f, 0x82, 0x9e, 0x1f, 0x00, 0x00, //0x00000fda jb LBB0_494 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000fe0 movq $-1, $-56(%rbp) - 0x48, 0x89, 0xc8, //0x00000fe8 movq %rcx, %rax - 0x45, 0x31, 0xe4, //0x00000feb xorl %r12d, %r12d - 0x90, 0x90, //0x00000fee .p2align 4, 0x90 - //0x00000ff0 LBB0_189 - 0x48, 0x8b, 0x4d, 0xc0, //0x00000ff0 movq $-64(%rbp), %rcx - 0xf3, 0x44, 0x0f, 0x6f, 0x2c, 0x01, //0x00000ff4 movdqu (%rcx,%rax), %xmm13 - 0xf3, 0x0f, 0x6f, 0x74, 0x01, 0x10, //0x00000ffa movdqu $16(%rcx,%rax), %xmm6 - 0xf3, 0x0f, 0x6f, 0x6c, 0x01, 0x20, //0x00001000 movdqu $32(%rcx,%rax), %xmm5 - 0xf3, 0x0f, 0x6f, 0x64, 0x01, 0x30, //0x00001006 movdqu $48(%rcx,%rax), %xmm4 - 0x66, 0x41, 0x0f, 0x6f, 0xdd, //0x0000100c movdqa %xmm13, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001011 pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00001015 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x6f, 0xde, //0x0000101a movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x0000101e pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xdb, //0x00001022 pmovmskb %xmm3, %ebx - 0x66, 0x0f, 0x6f, 0xdd, //0x00001026 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x0000102a pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xf3, //0x0000102e pmovmskb %xmm3, %r14d - 0x66, 0x0f, 0x6f, 0xdc, //0x00001033 movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001037 pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x0000103b pmovmskb %xmm3, %r15d - 0x66, 0x41, 0x0f, 0x6f, 0xdd, //0x00001040 movdqa %xmm13, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00001045 pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00001049 pmovmskb %xmm3, %r13d - 0x66, 0x0f, 0x6f, 0xde, //0x0000104e movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00001052 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001056 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xdd, //0x0000105a movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000105e pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001062 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdc, //0x00001066 movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000106a pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x0000106e pmovmskb %xmm3, %r10d - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00001073 movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xde, //0x00001078 pcmpgtb %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xf2, //0x0000107c pcmpgtb %xmm10, %xmm6 - 0x66, 0x0f, 0xdb, 0xf3, //0x00001081 pand %xmm3, %xmm6 - 0x66, 0x0f, 0xd7, 0xfe, //0x00001085 pmovmskb %xmm6, %edi - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00001089 movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdd, //0x0000108e pcmpgtb %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xea, //0x00001092 pcmpgtb %xmm10, %xmm5 - 0x66, 0x0f, 0xdb, 0xeb, //0x00001097 pand %xmm3, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x0000109b pmovmskb %xmm5, %edx - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x0000109f movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x000010a4 pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x000010a8 pcmpgtb %xmm10, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x000010ad pand %xmm3, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xc4, //0x000010b1 pmovmskb %xmm4, %r8d - 0x49, 0xc1, 0xe7, 0x30, //0x000010b6 shlq $48, %r15 - 0x49, 0xc1, 0xe6, 0x20, //0x000010ba shlq $32, %r14 - 0x4d, 0x09, 0xfe, //0x000010be orq %r15, %r14 - 0x48, 0xc1, 0xe3, 0x10, //0x000010c1 shlq $16, %rbx - 0x4c, 0x09, 0xf3, //0x000010c5 orq %r14, %rbx - 0x49, 0x09, 0xdb, //0x000010c8 orq %rbx, %r11 - 0x49, 0xc1, 0xe2, 0x30, //0x000010cb shlq $48, %r10 - 0x48, 0xc1, 0xe6, 0x20, //0x000010cf shlq $32, %rsi - 0x4c, 0x09, 0xd6, //0x000010d3 orq %r10, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x000010d6 shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x000010da orq %rsi, %rcx - 0x49, 0xc1, 0xe0, 0x30, //0x000010dd shlq $48, %r8 - 0x48, 0xc1, 0xe2, 0x20, //0x000010e1 shlq $32, %rdx - 0x4c, 0x09, 0xc2, //0x000010e5 orq %r8, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x000010e8 shlq $16, %rdi - 0x48, 0x09, 0xd7, //0x000010ec orq %rdx, %rdi - 0x49, 0x09, 0xcd, //0x000010ef orq %rcx, %r13 - 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x000010f2 jne LBB0_206 - 0x4d, 0x85, 0xe4, //0x000010f8 testq %r12, %r12 - 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x000010fb jne LBB0_208 - 0x45, 0x31, 0xe4, //0x00001101 xorl %r12d, %r12d - 0x4c, 0x8b, 0x75, 0xd0, //0x00001104 movq $-48(%rbp), %r14 - //0x00001108 LBB0_192 - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00001108 movdqa %xmm12, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xdd, //0x0000110d pcmpgtb %xmm13, %xmm3 - 0x66, 0x45, 0x0f, 0x64, 0xea, //0x00001112 pcmpgtb %xmm10, %xmm13 - 0x66, 0x44, 0x0f, 0xdb, 0xeb, //0x00001117 pand %xmm3, %xmm13 - 0x66, 0x41, 0x0f, 0xd7, 0xcd, //0x0000111c pmovmskb %xmm13, %ecx - 0x48, 0x09, 0xcf, //0x00001121 orq %rcx, %rdi - 0x4d, 0x85, 0xdb, //0x00001124 testq %r11, %r11 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00001127 movq $-72(%rbp), %r13 - 0x0f, 0x85, 0x91, 0x00, 0x00, 0x00, //0x0000112b jne LBB0_210 - 0x48, 0x85, 0xff, //0x00001131 testq %rdi, %rdi - 0x0f, 0x85, 0x6f, 0x2a, 0x00, 0x00, //0x00001134 jne LBB0_632 - 0x49, 0x83, 0xc1, 0xc0, //0x0000113a addq $-64, %r9 - 0x48, 0x83, 0xc0, 0x40, //0x0000113e addq $64, %rax - 0x49, 0x83, 0xf9, 0x3f, //0x00001142 cmpq $63, %r9 - 0x0f, 0x87, 0xa4, 0xfe, 0xff, 0xff, //0x00001146 ja LBB0_189 - 0xe9, 0xd2, 0x17, 0x00, 0x00, //0x0000114c jmp LBB0_195 - //0x00001151 LBB0_206 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00001151 cmpq $-1, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x00001156 movq $-48(%rbp), %r14 - 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x0000115a jne LBB0_209 - 0x49, 0x0f, 0xbc, 0xcd, //0x00001160 bsfq %r13, %rcx - 0x48, 0x01, 0xc1, //0x00001164 addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00001167 movq %rcx, $-56(%rbp) - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x0000116b jmp LBB0_209 - //0x00001170 LBB0_208 - 0x4c, 0x8b, 0x75, 0xd0, //0x00001170 movq $-48(%rbp), %r14 - //0x00001174 LBB0_209 - 0x4c, 0x89, 0xe1, //0x00001174 movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x00001177 notq %rcx - 0x4c, 0x21, 0xe9, //0x0000117a andq %r13, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x0000117d leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xe2, //0x00001181 orq %r12, %rdx - 0x48, 0x89, 0xd6, //0x00001184 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00001187 notq %rsi - 0x4c, 0x21, 0xee, //0x0000118a andq %r13, %rsi - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000118d movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xde, //0x00001197 andq %rbx, %rsi - 0x45, 0x31, 0xe4, //0x0000119a xorl %r12d, %r12d - 0x48, 0x01, 0xce, //0x0000119d addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc4, //0x000011a0 setb %r12b - 0x48, 0x01, 0xf6, //0x000011a4 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000011a7 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x000011b1 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x000011b4 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x000011b7 notq %rsi - 0x49, 0x21, 0xf3, //0x000011ba andq %rsi, %r11 - 0xe9, 0x46, 0xff, 0xff, 0xff, //0x000011bd jmp LBB0_192 - //0x000011c2 LBB0_210 - 0x49, 0x0f, 0xbc, 0xcb, //0x000011c2 bsfq %r11, %rcx - 0x48, 0x85, 0xff, //0x000011c6 testq %rdi, %rdi - 0x0f, 0x84, 0x0c, 0x06, 0x00, 0x00, //0x000011c9 je LBB0_302 - 0x48, 0x0f, 0xbc, 0xd7, //0x000011cf bsfq %rdi, %rdx - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000011d3 movabsq $4294977024, %r11 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x5a, 0xee, 0xff, 0xff, //0x000011dd movdqu $-4518(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x48, 0x39, 0xca, //0x000011e6 cmpq %rcx, %rdx - 0x0f, 0x83, 0x0d, 0x06, 0x00, 0x00, //0x000011e9 jae LBB0_303 - 0xe9, 0xf8, 0x29, 0x00, 0x00, //0x000011ef jmp LBB0_640 - //0x000011f4 LBB0_212 - 0x48, 0x01, 0xf9, //0x000011f4 addq %rdi, %rcx - 0x49, 0x89, 0xcb, //0x000011f7 movq %rcx, %r11 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000011fa movq $-1, %r13 - 0x4d, 0x85, 0xc0, //0x00001201 testq %r8, %r8 - 0x0f, 0x84, 0xbc, 0x29, 0x00, 0x00, //0x00001204 je LBB0_185 - //0x0000120a LBB0_213 - 0x4d, 0x85, 0xc9, //0x0000120a testq %r9, %r9 - 0x48, 0x8b, 0x75, 0xc0, //0x0000120d movq $-64(%rbp), %rsi - 0x0f, 0x84, 0x1b, 0x28, 0x00, 0x00, //0x00001211 je LBB0_612 - 0x4d, 0x85, 0xff, //0x00001217 testq %r15, %r15 - 0x0f, 0x84, 0x12, 0x28, 0x00, 0x00, //0x0000121a je LBB0_612 - 0x4d, 0x29, 0xf3, //0x00001220 subq %r14, %r11 - 0x49, 0x8d, 0x4b, 0xff, //0x00001223 leaq $-1(%r11), %rcx - 0x49, 0x39, 0xc8, //0x00001227 cmpq %rcx, %r8 - 0x0f, 0x84, 0xac, 0xef, 0xff, 0xff, //0x0000122a je LBB0_1 - 0x49, 0x39, 0xc9, //0x00001230 cmpq %rcx, %r9 - 0x0f, 0x84, 0xa3, 0xef, 0xff, 0xff, //0x00001233 je LBB0_1 - 0x49, 0x39, 0xcf, //0x00001239 cmpq %rcx, %r15 - 0x0f, 0x84, 0x9a, 0xef, 0xff, 0xff, //0x0000123c je LBB0_1 - 0x4d, 0x85, 0xc9, //0x00001242 testq %r9, %r9 - 0x0f, 0x8e, 0x6d, 0x05, 0x00, 0x00, //0x00001245 jle LBB0_299 - 0x49, 0x8d, 0x49, 0xff, //0x0000124b leaq $-1(%r9), %rcx - 0x49, 0x39, 0xcf, //0x0000124f cmpq %rcx, %r15 - 0x0f, 0x84, 0x60, 0x05, 0x00, 0x00, //0x00001252 je LBB0_299 - 0x49, 0xf7, 0xd1, //0x00001258 notq %r9 - 0x4d, 0x89, 0xcd, //0x0000125b movq %r9, %r13 - 0xe9, 0x7f, 0xef, 0xff, 0xff, //0x0000125e jmp LBB0_2 - //0x00001263 LBB0_221 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001263 movl $64, %edx - 0x4c, 0x8b, 0x75, 0xd0, //0x00001268 movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000126c movabsq $4294977024, %r11 - 0x48, 0x39, 0xca, //0x00001276 cmpq %rcx, %rdx - 0x0f, 0x82, 0x9d, 0x29, 0x00, 0x00, //0x00001279 jb LBB0_182 - //0x0000127f LBB0_222 - 0x48, 0x01, 0xc8, //0x0000127f addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00001282 addq $1, %rax - //0x00001286 LBB0_223 - 0x48, 0x85, 0xc0, //0x00001286 testq %rax, %rax - 0x0f, 0x88, 0x7e, 0x27, 0x00, 0x00, //0x00001289 js LBB0_609 - //0x0000128f LBB0_224 - 0x49, 0x89, 0x06, //0x0000128f movq %rax, (%r14) - 0x48, 0x8b, 0x45, 0xb0, //0x00001292 movq $-80(%rbp), %rax - 0x48, 0x85, 0xc0, //0x00001296 testq %rax, %rax - 0x0f, 0x8f, 0x21, 0xef, 0xff, 0xff, //0x00001299 jg LBB0_4 - 0xe9, 0x54, 0x27, 0x00, 0x00, //0x0000129f jmp LBB0_606 - //0x000012a4 LBB0_225 - 0x49, 0x8b, 0x0e, //0x000012a4 movq (%r14), %rcx - 0x48, 0x8b, 0x55, 0xa8, //0x000012a7 movq $-88(%rbp), %rdx - 0x48, 0x8b, 0x52, 0x08, //0x000012ab movq $8(%rdx), %rdx - 0x48, 0x8d, 0x72, 0xfc, //0x000012af leaq $-4(%rdx), %rsi - 0x48, 0x39, 0xf1, //0x000012b3 cmpq %rsi, %rcx - 0x0f, 0x87, 0xc2, 0x27, 0x00, 0x00, //0x000012b6 ja LBB0_617 - 0x41, 0x8b, 0x14, 0x0c, //0x000012bc movl (%r12,%rcx), %edx - 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x000012c0 cmpl $1702063201, %edx - 0x0f, 0x85, 0xe7, 0x27, 0x00, 0x00, //0x000012c6 jne LBB0_622 - 0x48, 0x8d, 0x41, 0x04, //0x000012cc leaq $4(%rcx), %rax - 0x49, 0x89, 0x06, //0x000012d0 movq %rax, (%r14) - 0x48, 0x85, 0xc9, //0x000012d3 testq %rcx, %rcx - 0x0f, 0x8f, 0xe4, 0xee, 0xff, 0xff, //0x000012d6 jg LBB0_4 - 0xe9, 0xbc, 0x28, 0x00, 0x00, //0x000012dc jmp LBB0_228 - //0x000012e1 LBB0_229 - 0xf6, 0x45, 0x98, 0x40, //0x000012e1 testb $64, $-104(%rbp) - 0x0f, 0x85, 0x57, 0x05, 0x00, 0x00, //0x000012e5 jne LBB0_308 - 0x49, 0x8b, 0x45, 0x00, //0x000012eb movq (%r13), %rax - 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x000012ef cmpq $4095, %rax - 0x0f, 0x8f, 0xf1, 0x26, 0x00, 0x00, //0x000012f5 jg LBB0_634 - 0x48, 0x8d, 0x48, 0x01, //0x000012fb leaq $1(%rax), %rcx - 0x49, 0x89, 0x4d, 0x00, //0x000012ff movq %rcx, (%r13) - 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x05, 0x00, 0x00, 0x00, //0x00001303 movq $5, $8(%r13,%rax,8) - 0xe9, 0xaf, 0xee, 0xff, 0xff, //0x0000130c jmp LBB0_4 - //0x00001311 LBB0_232 - 0x48, 0x8b, 0x4d, 0x98, //0x00001311 movq $-104(%rbp), %rcx - 0xf6, 0xc1, 0x40, //0x00001315 testb $64, %cl - 0x0f, 0x85, 0xa0, 0x09, 0x00, 0x00, //0x00001318 jne LBB0_334 - 0x49, 0x8b, 0x16, //0x0000131e movq (%r14), %rdx - 0x48, 0x8b, 0x45, 0xa8, //0x00001321 movq $-88(%rbp), %rax - 0x48, 0x8b, 0x40, 0x08, //0x00001325 movq $8(%rax), %rax - 0xf6, 0xc1, 0x20, //0x00001329 testb $32, %cl - 0x48, 0x89, 0xd1, //0x0000132c movq %rdx, %rcx - 0x48, 0x89, 0x55, 0xb0, //0x0000132f movq %rdx, $-80(%rbp) - 0x48, 0x89, 0x45, 0xa0, //0x00001333 movq %rax, $-96(%rbp) - 0x0f, 0x85, 0x45, 0x10, 0x00, 0x00, //0x00001337 jne LBB0_385 - 0x49, 0x89, 0xc1, //0x0000133d movq %rax, %r9 - 0x49, 0x29, 0xd1, //0x00001340 subq %rdx, %r9 - 0x0f, 0x84, 0xef, 0x28, 0x00, 0x00, //0x00001343 je LBB0_646 - 0x49, 0x83, 0xf9, 0x40, //0x00001349 cmpq $64, %r9 - 0x0f, 0x82, 0x05, 0x1d, 0x00, 0x00, //0x0000134d jb LBB0_501 - 0x48, 0x8b, 0x45, 0xb0, //0x00001353 movq $-80(%rbp), %rax - 0x49, 0x89, 0xc6, //0x00001357 movq %rax, %r14 - 0x49, 0xf7, 0xd6, //0x0000135a notq %r14 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000135d movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00001365 xorl %r8d, %r8d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001368 .p2align 4, 0x90 - //0x00001370 LBB0_237 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00001370 movdqu (%r12,%rax), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00001376 movdqu $16(%r12,%rax), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000137d movdqu $32(%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00001384 movdqu $48(%r12,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xfb, //0x0000138b movdqa %xmm3, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000138f pcmpeqb %xmm0, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00001393 pmovmskb %xmm7, %r10d - 0x66, 0x0f, 0x6f, 0xfc, //0x00001398 movdqa %xmm4, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000139c pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xcf, //0x000013a0 pmovmskb %xmm7, %ecx - 0x66, 0x0f, 0x6f, 0xfd, //0x000013a4 movdqa %xmm5, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000013a8 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x000013ac pmovmskb %xmm7, %edi - 0x66, 0x0f, 0x6f, 0xfe, //0x000013b0 movdqa %xmm6, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000013b4 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xd7, //0x000013b8 pmovmskb %xmm7, %edx - 0x66, 0x0f, 0x74, 0xd9, //0x000013bc pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x000013c0 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x74, 0xe1, //0x000013c5 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xdc, //0x000013c9 pmovmskb %xmm4, %ebx - 0x66, 0x0f, 0x74, 0xe9, //0x000013cd pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x000013d1 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x74, 0xf1, //0x000013d5 pcmpeqb %xmm1, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x000013d9 pmovmskb %xmm6, %r15d - 0x48, 0xc1, 0xe2, 0x30, //0x000013de shlq $48, %rdx - 0x48, 0xc1, 0xe7, 0x20, //0x000013e2 shlq $32, %rdi - 0x48, 0x09, 0xd7, //0x000013e6 orq %rdx, %rdi - 0x48, 0xc1, 0xe1, 0x10, //0x000013e9 shlq $16, %rcx - 0x48, 0x09, 0xf9, //0x000013ed orq %rdi, %rcx - 0x49, 0x09, 0xca, //0x000013f0 orq %rcx, %r10 - 0x49, 0xc1, 0xe7, 0x30, //0x000013f3 shlq $48, %r15 - 0x48, 0xc1, 0xe6, 0x20, //0x000013f7 shlq $32, %rsi - 0x4c, 0x09, 0xfe, //0x000013fb orq %r15, %rsi - 0x48, 0xc1, 0xe3, 0x10, //0x000013fe shlq $16, %rbx - 0x48, 0x09, 0xf3, //0x00001402 orq %rsi, %rbx - 0x49, 0x09, 0xdb, //0x00001405 orq %rbx, %r11 - 0x0f, 0x85, 0x3a, 0x00, 0x00, 0x00, //0x00001408 jne LBB0_246 - 0x4d, 0x85, 0xc0, //0x0000140e testq %r8, %r8 - 0x0f, 0x85, 0x47, 0x00, 0x00, 0x00, //0x00001411 jne LBB0_248 - 0x45, 0x31, 0xc0, //0x00001417 xorl %r8d, %r8d - 0x4d, 0x85, 0xd2, //0x0000141a testq %r10, %r10 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000141d movabsq $4294977024, %r11 - 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, //0x00001427 jne LBB0_249 - //0x0000142d LBB0_240 - 0x49, 0x83, 0xc1, 0xc0, //0x0000142d addq $-64, %r9 - 0x49, 0x83, 0xc6, 0xc0, //0x00001431 addq $-64, %r14 - 0x48, 0x83, 0xc0, 0x40, //0x00001435 addq $64, %rax - 0x49, 0x83, 0xf9, 0x3f, //0x00001439 cmpq $63, %r9 - 0x0f, 0x87, 0x2d, 0xff, 0xff, 0xff, //0x0000143d ja LBB0_237 - 0xe9, 0x06, 0x18, 0x00, 0x00, //0x00001443 jmp LBB0_241 - //0x00001448 LBB0_246 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00001448 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x0000144d jne LBB0_248 - 0x49, 0x0f, 0xbc, 0xcb, //0x00001453 bsfq %r11, %rcx - 0x48, 0x01, 0xc1, //0x00001457 addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x0000145a movq %rcx, $-56(%rbp) - //0x0000145e LBB0_248 - 0x4c, 0x89, 0xc1, //0x0000145e movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00001461 notq %rcx - 0x4c, 0x21, 0xd9, //0x00001464 andq %r11, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x00001467 leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xc2, //0x0000146b orq %r8, %rdx - 0x48, 0x89, 0xd6, //0x0000146e movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00001471 notq %rsi - 0x4c, 0x21, 0xde, //0x00001474 andq %r11, %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001477 movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfe, //0x00001481 andq %rdi, %rsi - 0x45, 0x31, 0xc0, //0x00001484 xorl %r8d, %r8d - 0x48, 0x01, 0xce, //0x00001487 addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc0, //0x0000148a setb %r8b - 0x48, 0x01, 0xf6, //0x0000148e addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001491 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x0000149b xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x0000149e andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x000014a1 notq %rsi - 0x49, 0x21, 0xf2, //0x000014a4 andq %rsi, %r10 - 0x4d, 0x85, 0xd2, //0x000014a7 testq %r10, %r10 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000014aa movabsq $4294977024, %r11 - 0x0f, 0x84, 0x73, 0xff, 0xff, 0xff, //0x000014b4 je LBB0_240 - //0x000014ba LBB0_249 - 0x49, 0x0f, 0xbc, 0xc2, //0x000014ba bsfq %r10, %rax - 0x4c, 0x29, 0xf0, //0x000014be subq %r14, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x000014c1 movq $-48(%rbp), %r14 - 0xe9, 0x73, 0x11, 0x00, 0x00, //0x000014c5 jmp LBB0_426 - //0x000014ca LBB0_250 - 0x48, 0x8b, 0x45, 0xa8, //0x000014ca movq $-88(%rbp), %rax - 0x48, 0x8b, 0x78, 0x08, //0x000014ce movq $8(%rax), %rdi - 0x49, 0x8b, 0x06, //0x000014d2 movq (%r14), %rax - 0xf6, 0x45, 0x98, 0x40, //0x000014d5 testb $64, $-104(%rbp) - 0x0f, 0x85, 0xf2, 0x08, 0x00, 0x00, //0x000014d9 jne LBB0_344 - 0x48, 0x29, 0xc7, //0x000014df subq %rax, %rdi - 0x0f, 0x84, 0xe7, 0x26, 0x00, 0x00, //0x000014e2 je LBB0_635 - 0x4d, 0x8d, 0x04, 0x04, //0x000014e8 leaq (%r12,%rax), %r8 - 0x41, 0x80, 0x38, 0x30, //0x000014ec cmpb $48, (%r8) - 0x0f, 0x85, 0x36, 0x00, 0x00, 0x00, //0x000014f0 jne LBB0_256 - 0xbb, 0x01, 0x00, 0x00, 0x00, //0x000014f6 movl $1, %ebx - 0x48, 0x83, 0xff, 0x01, //0x000014fb cmpq $1, %rdi - 0x0f, 0x84, 0x23, 0x17, 0x00, 0x00, //0x000014ff je LBB0_469 - 0x41, 0x8a, 0x48, 0x01, //0x00001505 movb $1(%r8), %cl - 0x80, 0xc1, 0xd2, //0x00001509 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x0000150c cmpb $55, %cl - 0x0f, 0x87, 0x13, 0x17, 0x00, 0x00, //0x0000150f ja LBB0_469 - 0x0f, 0xb6, 0xc9, //0x00001515 movzbl %cl, %ecx - 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00001518 movabsq $36028797027352577, %rdx - 0x48, 0x0f, 0xa3, 0xca, //0x00001522 btq %rcx, %rdx - 0x0f, 0x83, 0xfc, 0x16, 0x00, 0x00, //0x00001526 jae LBB0_469 - //0x0000152c LBB0_256 - 0x48, 0x83, 0xff, 0x10, //0x0000152c cmpq $16, %rdi - 0x0f, 0x82, 0x02, 0x1b, 0x00, 0x00, //0x00001530 jb LBB0_500 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00001536 movq $-1, %r13 - 0x31, 0xdb, //0x0000153d xorl %ebx, %ebx - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000153f movq $-1, %r10 - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00001546 movq $-1, %r14 - 0x49, 0x89, 0xf9, //0x0000154d movq %rdi, %r9 - //0x00001550 .p2align 4, 0x90 - //0x00001550 LBB0_258 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x18, //0x00001550 movdqu (%r8,%rbx), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x00001556 movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x64, 0x25, 0x3e, 0xeb, 0xff, 0xff, //0x0000155a pcmpgtb $-5314(%rip), %xmm4 /* LCPI0_10+0(%rip) */ - 0x66, 0x41, 0x0f, 0x6f, 0xef, //0x00001562 movdqa %xmm15, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x00001567 pcmpgtb %xmm3, %xmm5 - 0x66, 0x0f, 0xdb, 0xec, //0x0000156b pand %xmm4, %xmm5 - 0x66, 0x0f, 0x6f, 0xe3, //0x0000156f movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x74, 0x25, 0x45, 0xeb, 0xff, 0xff, //0x00001573 pcmpeqb $-5307(%rip), %xmm4 /* LCPI0_12+0(%rip) */ - 0x66, 0x0f, 0x6f, 0xf3, //0x0000157b movdqa %xmm3, %xmm6 - 0x66, 0x0f, 0x74, 0x35, 0x49, 0xeb, 0xff, 0xff, //0x0000157f pcmpeqb $-5303(%rip), %xmm6 /* LCPI0_13+0(%rip) */ - 0x66, 0x0f, 0xeb, 0xf4, //0x00001587 por %xmm4, %xmm6 - 0x66, 0x0f, 0x6f, 0xe3, //0x0000158b movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xe1, //0x0000158f pand %xmm9, %xmm4 - 0x66, 0x0f, 0x74, 0x1d, 0x44, 0xeb, 0xff, 0xff, //0x00001594 pcmpeqb $-5308(%rip), %xmm3 /* LCPI0_14+0(%rip) */ - 0x66, 0x41, 0x0f, 0x74, 0xe3, //0x0000159c pcmpeqb %xmm11, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xfc, //0x000015a1 pmovmskb %xmm4, %r15d - 0x66, 0x0f, 0xeb, 0xe3, //0x000015a6 por %xmm3, %xmm4 - 0x66, 0x0f, 0xeb, 0xee, //0x000015aa por %xmm6, %xmm5 - 0x66, 0x0f, 0xeb, 0xec, //0x000015ae por %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xd3, //0x000015b2 pmovmskb %xmm3, %edx - 0x66, 0x44, 0x0f, 0xd7, 0xde, //0x000015b6 pmovmskb %xmm6, %r11d - 0x66, 0x0f, 0xd7, 0xcd, //0x000015bb pmovmskb %xmm5, %ecx - 0xf7, 0xd1, //0x000015bf notl %ecx - 0x0f, 0xbc, 0xc9, //0x000015c1 bsfl %ecx, %ecx - 0x83, 0xf9, 0x10, //0x000015c4 cmpl $16, %ecx - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x000015c7 je LBB0_260 - 0xbe, 0xff, 0xff, 0xff, 0xff, //0x000015cd movl $-1, %esi - 0xd3, 0xe6, //0x000015d2 shll %cl, %esi - 0xf7, 0xd6, //0x000015d4 notl %esi - 0x21, 0xf2, //0x000015d6 andl %esi, %edx - 0x41, 0x21, 0xf7, //0x000015d8 andl %esi, %r15d - 0x44, 0x21, 0xde, //0x000015db andl %r11d, %esi - 0x41, 0x89, 0xf3, //0x000015de movl %esi, %r11d - //0x000015e1 LBB0_260 - 0x8d, 0x72, 0xff, //0x000015e1 leal $-1(%rdx), %esi - 0x21, 0xd6, //0x000015e4 andl %edx, %esi - 0x0f, 0x85, 0x06, 0x16, 0x00, 0x00, //0x000015e6 jne LBB0_463 - 0x41, 0x8d, 0x77, 0xff, //0x000015ec leal $-1(%r15), %esi - 0x44, 0x21, 0xfe, //0x000015f0 andl %r15d, %esi - 0x0f, 0x85, 0xf9, 0x15, 0x00, 0x00, //0x000015f3 jne LBB0_463 - 0x41, 0x8d, 0x73, 0xff, //0x000015f9 leal $-1(%r11), %esi - 0x44, 0x21, 0xde, //0x000015fd andl %r11d, %esi - 0x0f, 0x85, 0xec, 0x15, 0x00, 0x00, //0x00001600 jne LBB0_463 - 0x85, 0xd2, //0x00001606 testl %edx, %edx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00001608 je LBB0_266 - 0x0f, 0xbc, 0xd2, //0x0000160e bsfl %edx, %edx - 0x49, 0x83, 0xfe, 0xff, //0x00001611 cmpq $-1, %r14 - 0x0f, 0x85, 0xfc, 0x15, 0x00, 0x00, //0x00001615 jne LBB0_466 - 0x48, 0x01, 0xda, //0x0000161b addq %rbx, %rdx - 0x49, 0x89, 0xd6, //0x0000161e movq %rdx, %r14 - //0x00001621 LBB0_266 - 0x45, 0x85, 0xff, //0x00001621 testl %r15d, %r15d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00001624 je LBB0_269 - 0x41, 0x0f, 0xbc, 0xd7, //0x0000162a bsfl %r15d, %edx - 0x49, 0x83, 0xfa, 0xff, //0x0000162e cmpq $-1, %r10 - 0x0f, 0x85, 0xdf, 0x15, 0x00, 0x00, //0x00001632 jne LBB0_466 - 0x48, 0x01, 0xda, //0x00001638 addq %rbx, %rdx - 0x49, 0x89, 0xd2, //0x0000163b movq %rdx, %r10 - //0x0000163e LBB0_269 - 0x45, 0x85, 0xdb, //0x0000163e testl %r11d, %r11d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00001641 je LBB0_272 - 0x41, 0x0f, 0xbc, 0xd3, //0x00001647 bsfl %r11d, %edx - 0x49, 0x83, 0xfd, 0xff, //0x0000164b cmpq $-1, %r13 - 0x0f, 0x85, 0xc2, 0x15, 0x00, 0x00, //0x0000164f jne LBB0_466 - 0x48, 0x01, 0xda, //0x00001655 addq %rbx, %rdx - 0x49, 0x89, 0xd5, //0x00001658 movq %rdx, %r13 - //0x0000165b LBB0_272 - 0x83, 0xf9, 0x10, //0x0000165b cmpl $16, %ecx - 0x0f, 0x85, 0x36, 0x0f, 0x00, 0x00, //0x0000165e jne LBB0_411 - 0x49, 0x83, 0xc1, 0xf0, //0x00001664 addq $-16, %r9 - 0x48, 0x83, 0xc3, 0x10, //0x00001668 addq $16, %rbx - 0x49, 0x83, 0xf9, 0x0f, //0x0000166c cmpq $15, %r9 - 0x0f, 0x87, 0xda, 0xfe, 0xff, 0xff, //0x00001670 ja LBB0_258 - 0x49, 0x8d, 0x14, 0x18, //0x00001676 leaq (%r8,%rbx), %rdx - 0x49, 0x89, 0xd3, //0x0000167a movq %rdx, %r11 - 0x48, 0x39, 0xdf, //0x0000167d cmpq %rbx, %rdi - 0x0f, 0x84, 0x28, 0x0f, 0x00, 0x00, //0x00001680 je LBB0_413 - //0x00001686 LBB0_275 - 0x4e, 0x8d, 0x1c, 0x0a, //0x00001686 leaq (%rdx,%r9), %r11 - 0x49, 0x89, 0xd7, //0x0000168a movq %rdx, %r15 - 0x4d, 0x29, 0xc7, //0x0000168d subq %r8, %r15 - 0x31, 0xdb, //0x00001690 xorl %ebx, %ebx - 0xe9, 0x26, 0x00, 0x00, 0x00, //0x00001692 jmp LBB0_279 - //0x00001697 LBB0_276 - 0x49, 0x83, 0xfd, 0xff, //0x00001697 cmpq $-1, %r13 - 0x0f, 0x85, 0x65, 0x15, 0x00, 0x00, //0x0000169b jne LBB0_465 - 0x4d, 0x8d, 0x2c, 0x1f, //0x000016a1 leaq (%r15,%rbx), %r13 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000016a5 .p2align 4, 0x90 - //0x000016b0 LBB0_278 - 0x48, 0x83, 0xc3, 0x01, //0x000016b0 addq $1, %rbx - 0x49, 0x39, 0xd9, //0x000016b4 cmpq %rbx, %r9 - 0x0f, 0x84, 0xf1, 0x0e, 0x00, 0x00, //0x000016b7 je LBB0_413 - //0x000016bd LBB0_279 - 0x0f, 0xbe, 0x0c, 0x1a, //0x000016bd movsbl (%rdx,%rbx), %ecx - 0x8d, 0x71, 0xd0, //0x000016c1 leal $-48(%rcx), %esi - 0x83, 0xfe, 0x0a, //0x000016c4 cmpl $10, %esi - 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x000016c7 jb LBB0_278 - 0x8d, 0x71, 0xd5, //0x000016cd leal $-43(%rcx), %esi - 0x83, 0xfe, 0x1a, //0x000016d0 cmpl $26, %esi - 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x000016d3 ja LBB0_284 - 0x48, 0x8d, 0x3d, 0x08, 0x28, 0x00, 0x00, //0x000016d9 leaq $10248(%rip), %rdi /* LJTI0_2+0(%rip) */ - 0x48, 0x63, 0x0c, 0xb7, //0x000016e0 movslq (%rdi,%rsi,4), %rcx - 0x48, 0x01, 0xf9, //0x000016e4 addq %rdi, %rcx - 0xff, 0xe1, //0x000016e7 jmpq *%rcx - //0x000016e9 LBB0_282 - 0x49, 0x83, 0xfe, 0xff, //0x000016e9 cmpq $-1, %r14 - 0x0f, 0x85, 0x13, 0x15, 0x00, 0x00, //0x000016ed jne LBB0_465 - 0x4d, 0x8d, 0x34, 0x1f, //0x000016f3 leaq (%r15,%rbx), %r14 - 0xe9, 0xb4, 0xff, 0xff, 0xff, //0x000016f7 jmp LBB0_278 - //0x000016fc LBB0_284 - 0x83, 0xf9, 0x65, //0x000016fc cmpl $101, %ecx - 0x0f, 0x85, 0xa3, 0x0e, 0x00, 0x00, //0x000016ff jne LBB0_412 - //0x00001705 LBB0_285 - 0x49, 0x83, 0xfa, 0xff, //0x00001705 cmpq $-1, %r10 - 0x0f, 0x85, 0xf7, 0x14, 0x00, 0x00, //0x00001709 jne LBB0_465 - 0x4d, 0x8d, 0x14, 0x1f, //0x0000170f leaq (%r15,%rbx), %r10 - 0xe9, 0x98, 0xff, 0xff, 0xff, //0x00001713 jmp LBB0_278 - //0x00001718 LBB0_287 - 0x49, 0x8b, 0x0e, //0x00001718 movq (%r14), %rcx - 0x48, 0x8b, 0x55, 0xa8, //0x0000171b movq $-88(%rbp), %rdx - 0x48, 0x8b, 0x52, 0x08, //0x0000171f movq $8(%rdx), %rdx - 0x48, 0x8d, 0x72, 0xfd, //0x00001723 leaq $-3(%rdx), %rsi - 0x48, 0x39, 0xf1, //0x00001727 cmpq %rsi, %rcx - 0x0f, 0x87, 0x4e, 0x23, 0x00, 0x00, //0x0000172a ja LBB0_617 - 0x48, 0x8d, 0x41, 0xff, //0x00001730 leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x00001734 cmpl $1819047278, $-1(%r12,%rcx) - 0x0f, 0x84, 0x60, 0x00, 0x00, 0x00, //0x0000173d je LBB0_298 - 0xe9, 0x07, 0x24, 0x00, 0x00, //0x00001743 jmp LBB0_289 - //0x00001748 LBB0_293 - 0xf6, 0x45, 0x98, 0x40, //0x00001748 testb $64, $-104(%rbp) - 0x0f, 0x85, 0x62, 0x07, 0x00, 0x00, //0x0000174c jne LBB0_356 - 0x49, 0x8b, 0x45, 0x00, //0x00001752 movq (%r13), %rax - 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00001756 cmpq $4095, %rax - 0x0f, 0x8f, 0x8a, 0x22, 0x00, 0x00, //0x0000175c jg LBB0_634 - 0x48, 0x8d, 0x48, 0x01, //0x00001762 leaq $1(%rax), %rcx - 0x49, 0x89, 0x4d, 0x00, //0x00001766 movq %rcx, (%r13) - 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x06, 0x00, 0x00, 0x00, //0x0000176a movq $6, $8(%r13,%rax,8) - 0xe9, 0x48, 0xea, 0xff, 0xff, //0x00001773 jmp LBB0_4 - //0x00001778 LBB0_296 - 0x49, 0x8b, 0x0e, //0x00001778 movq (%r14), %rcx - 0x48, 0x8b, 0x55, 0xa8, //0x0000177b movq $-88(%rbp), %rdx - 0x48, 0x8b, 0x52, 0x08, //0x0000177f movq $8(%rdx), %rdx - 0x48, 0x8d, 0x72, 0xfd, //0x00001783 leaq $-3(%rdx), %rsi - 0x48, 0x39, 0xf1, //0x00001787 cmpq %rsi, %rcx - 0x0f, 0x87, 0xee, 0x22, 0x00, 0x00, //0x0000178a ja LBB0_617 - 0x48, 0x8d, 0x41, 0xff, //0x00001790 leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00001794 cmpl $1702195828, $-1(%r12,%rcx) - 0x0f, 0x85, 0x65, 0x23, 0x00, 0x00, //0x0000179d jne LBB0_627 - //0x000017a3 LBB0_298 - 0x48, 0x8d, 0x51, 0x03, //0x000017a3 leaq $3(%rcx), %rdx - 0x49, 0x89, 0x16, //0x000017a7 movq %rdx, (%r14) - 0x48, 0x85, 0xc9, //0x000017aa testq %rcx, %rcx - 0x0f, 0x8f, 0x0d, 0xea, 0xff, 0xff, //0x000017ad jg LBB0_4 - 0xe9, 0x8f, 0x22, 0x00, 0x00, //0x000017b3 jmp LBB0_638 - //0x000017b8 LBB0_299 - 0x4c, 0x89, 0xc1, //0x000017b8 movq %r8, %rcx - 0x4c, 0x09, 0xf9, //0x000017bb orq %r15, %rcx - 0x0f, 0x99, 0xc1, //0x000017be setns %cl - 0x0f, 0x88, 0x9f, 0x0b, 0x00, 0x00, //0x000017c1 js LBB0_384 - 0x4d, 0x39, 0xf8, //0x000017c7 cmpq %r15, %r8 - 0x0f, 0x8c, 0x96, 0x0b, 0x00, 0x00, //0x000017ca jl LBB0_384 - 0x49, 0xf7, 0xd0, //0x000017d0 notq %r8 - 0x4d, 0x89, 0xc5, //0x000017d3 movq %r8, %r13 - 0xe9, 0x07, 0xea, 0xff, 0xff, //0x000017d6 jmp LBB0_2 - //0x000017db LBB0_302 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x000017db movl $64, %edx - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000017e0 movabsq $4294977024, %r11 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x4d, 0xe8, 0xff, 0xff, //0x000017ea movdqu $-6067(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x48, 0x39, 0xca, //0x000017f3 cmpq %rcx, %rdx - 0x0f, 0x82, 0xf0, 0x23, 0x00, 0x00, //0x000017f6 jb LBB0_640 - //0x000017fc LBB0_303 - 0x48, 0x01, 0xc8, //0x000017fc addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x000017ff addq $1, %rax - //0x00001803 LBB0_304 - 0x48, 0x85, 0xc0, //0x00001803 testq %rax, %rax - 0x0f, 0x88, 0x59, 0x22, 0x00, 0x00, //0x00001806 js LBB0_615 - 0x49, 0x89, 0x06, //0x0000180c movq %rax, (%r14) - 0x48, 0x8b, 0x45, 0xb0, //0x0000180f movq $-80(%rbp), %rax - 0x48, 0x85, 0xc0, //0x00001813 testq %rax, %rax - 0x0f, 0x8e, 0xdc, 0x21, 0x00, 0x00, //0x00001816 jle LBB0_606 - //0x0000181c LBB0_306 - 0x49, 0x8b, 0x45, 0x00, //0x0000181c movq (%r13), %rax - 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00001820 cmpq $4095, %rax - 0x0f, 0x8f, 0xc0, 0x21, 0x00, 0x00, //0x00001826 jg LBB0_634 - 0x48, 0x8d, 0x48, 0x01, //0x0000182c leaq $1(%rax), %rcx - 0x49, 0x89, 0x4d, 0x00, //0x00001830 movq %rcx, (%r13) - 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x04, 0x00, 0x00, 0x00, //0x00001834 movq $4, $8(%r13,%rax,8) - 0xe9, 0x7e, 0xe9, 0xff, 0xff, //0x0000183d jmp LBB0_4 - //0x00001842 LBB0_308 - 0x48, 0x8b, 0x55, 0xa8, //0x00001842 movq $-88(%rbp), %rdx - 0x48, 0x8b, 0x52, 0x08, //0x00001846 movq $8(%rdx), %rdx - 0x49, 0x8b, 0x0e, //0x0000184a movq (%r14), %rcx - 0x48, 0x29, 0xca, //0x0000184d subq %rcx, %rdx - 0x48, 0x89, 0x4d, 0xb0, //0x00001850 movq %rcx, $-80(%rbp) - 0x49, 0x01, 0xcc, //0x00001854 addq %rcx, %r12 - 0x45, 0x31, 0xc0, //0x00001857 xorl %r8d, %r8d - 0x45, 0x31, 0xd2, //0x0000185a xorl %r10d, %r10d - 0x45, 0x31, 0xc9, //0x0000185d xorl %r9d, %r9d - 0x45, 0x31, 0xf6, //0x00001860 xorl %r14d, %r14d - 0x48, 0x83, 0xfa, 0x40, //0x00001863 cmpq $64, %rdx - 0x48, 0x89, 0x55, 0xc0, //0x00001867 movq %rdx, $-64(%rbp) - 0x0f, 0x8d, 0x4c, 0x01, 0x00, 0x00, //0x0000186b jge LBB0_309 - //0x00001871 LBB0_318 - 0x48, 0x85, 0xd2, //0x00001871 testq %rdx, %rdx - 0x0f, 0x8e, 0xdd, 0x23, 0x00, 0x00, //0x00001874 jle LBB0_648 - 0x66, 0x0f, 0x6f, 0xf2, //0x0000187a movdqa %xmm2, %xmm6 - 0x66, 0x0f, 0xef, 0xd2, //0x0000187e pxor %xmm2, %xmm2 - 0xf3, 0x0f, 0x7f, 0x55, 0x80, //0x00001882 movdqu %xmm2, $-128(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001887 movdqu %xmm2, $-144(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x0000188f movdqu %xmm2, $-160(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001897 movdqu %xmm2, $-176(%rbp) - 0x4c, 0x89, 0xe7, //0x0000189f movq %r12, %rdi - 0x44, 0x89, 0xe1, //0x000018a2 movl %r12d, %ecx - 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x000018a5 andl $4095, %ecx - 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x000018ab cmpl $4033, %ecx - 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x000018b1 jb LBB0_322 - 0x48, 0x83, 0x7d, 0xc0, 0x20, //0x000018b7 cmpq $32, $-64(%rbp) - 0x0f, 0x82, 0x3b, 0x00, 0x00, 0x00, //0x000018bc jb LBB0_323 - 0x0f, 0x10, 0x1f, //0x000018c2 movups (%rdi), %xmm3 - 0x0f, 0x11, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x000018c5 movups %xmm3, $-176(%rbp) - 0xf3, 0x0f, 0x6f, 0x5f, 0x10, //0x000018cc movdqu $16(%rdi), %xmm3 - 0xf3, 0x0f, 0x7f, 0x9d, 0x60, 0xff, 0xff, 0xff, //0x000018d1 movdqu %xmm3, $-160(%rbp) - 0x48, 0x83, 0xc7, 0x20, //0x000018d9 addq $32, %rdi - 0x48, 0x8b, 0x4d, 0xc0, //0x000018dd movq $-64(%rbp), %rcx - 0x48, 0x8d, 0x71, 0xe0, //0x000018e1 leaq $-32(%rcx), %rsi - 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x000018e5 leaq $-144(%rbp), %rdx - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x000018ec jmp LBB0_324 - //0x000018f1 LBB0_322 - 0x66, 0x0f, 0x6f, 0xd6, //0x000018f1 movdqa %xmm6, %xmm2 - 0x49, 0x89, 0xfc, //0x000018f5 movq %rdi, %r12 - 0xe9, 0xc0, 0x00, 0x00, 0x00, //0x000018f8 jmp LBB0_309 - //0x000018fd LBB0_323 - 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x000018fd leaq $-176(%rbp), %rdx - 0x48, 0x8b, 0x75, 0xc0, //0x00001904 movq $-64(%rbp), %rsi - //0x00001908 LBB0_324 - 0x48, 0x83, 0xfe, 0x10, //0x00001908 cmpq $16, %rsi - 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x0000190c jb LBB0_325 - 0xf3, 0x0f, 0x6f, 0x1f, //0x00001912 movdqu (%rdi), %xmm3 - 0xf3, 0x0f, 0x7f, 0x1a, //0x00001916 movdqu %xmm3, (%rdx) - 0x48, 0x83, 0xc7, 0x10, //0x0000191a addq $16, %rdi - 0x48, 0x83, 0xc2, 0x10, //0x0000191e addq $16, %rdx - 0x48, 0x83, 0xc6, 0xf0, //0x00001922 addq $-16, %rsi - 0x48, 0x83, 0xfe, 0x08, //0x00001926 cmpq $8, %rsi - 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x0000192a jae LBB0_332 - //0x00001930 LBB0_326 - 0x48, 0x83, 0xfe, 0x04, //0x00001930 cmpq $4, %rsi - 0x0f, 0x8c, 0x45, 0x00, 0x00, 0x00, //0x00001934 jl LBB0_327 - //0x0000193a LBB0_333 - 0x8b, 0x0f, //0x0000193a movl (%rdi), %ecx - 0x89, 0x0a, //0x0000193c movl %ecx, (%rdx) - 0x48, 0x83, 0xc7, 0x04, //0x0000193e addq $4, %rdi - 0x48, 0x83, 0xc2, 0x04, //0x00001942 addq $4, %rdx - 0x48, 0x83, 0xc6, 0xfc, //0x00001946 addq $-4, %rsi - 0x48, 0x83, 0xfe, 0x02, //0x0000194a cmpq $2, %rsi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x0000194e jae LBB0_328 - 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00001954 jmp LBB0_329 - //0x00001959 LBB0_325 - 0x48, 0x83, 0xfe, 0x08, //0x00001959 cmpq $8, %rsi - 0x0f, 0x82, 0xcd, 0xff, 0xff, 0xff, //0x0000195d jb LBB0_326 - //0x00001963 LBB0_332 - 0x48, 0x8b, 0x0f, //0x00001963 movq (%rdi), %rcx - 0x48, 0x89, 0x0a, //0x00001966 movq %rcx, (%rdx) - 0x48, 0x83, 0xc7, 0x08, //0x00001969 addq $8, %rdi - 0x48, 0x83, 0xc2, 0x08, //0x0000196d addq $8, %rdx - 0x48, 0x83, 0xc6, 0xf8, //0x00001971 addq $-8, %rsi - 0x48, 0x83, 0xfe, 0x04, //0x00001975 cmpq $4, %rsi - 0x0f, 0x8d, 0xbb, 0xff, 0xff, 0xff, //0x00001979 jge LBB0_333 - //0x0000197f LBB0_327 - 0x48, 0x83, 0xfe, 0x02, //0x0000197f cmpq $2, %rsi - 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00001983 jb LBB0_329 - //0x00001989 LBB0_328 - 0x0f, 0xb7, 0x0f, //0x00001989 movzwl (%rdi), %ecx - 0x66, 0x89, 0x0a, //0x0000198c movw %cx, (%rdx) - 0x48, 0x83, 0xc7, 0x02, //0x0000198f addq $2, %rdi - 0x48, 0x83, 0xc2, 0x02, //0x00001993 addq $2, %rdx - 0x48, 0x83, 0xc6, 0xfe, //0x00001997 addq $-2, %rsi - //0x0000199b LBB0_329 - 0x48, 0x89, 0xf9, //0x0000199b movq %rdi, %rcx - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x0000199e leaq $-176(%rbp), %r12 - 0x48, 0x85, 0xf6, //0x000019a5 testq %rsi, %rsi - 0x66, 0x0f, 0x6f, 0xd6, //0x000019a8 movdqa %xmm6, %xmm2 - 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x000019ac je LBB0_309 - 0x8a, 0x09, //0x000019b2 movb (%rcx), %cl - 0x88, 0x0a, //0x000019b4 movb %cl, (%rdx) - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x000019b6 leaq $-176(%rbp), %r12 - //0x000019bd LBB0_309 - 0x66, 0x44, 0x0f, 0x6f, 0xc2, //0x000019bd movdqa %xmm2, %xmm8 - 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x000019c2 movdqu (%r12), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x10, //0x000019c8 movdqu $16(%r12), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x20, //0x000019cf movdqu $32(%r12), %xmm6 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x30, //0x000019d6 movdqu $48(%r12), %xmm5 - 0x66, 0x0f, 0x6f, 0xdc, //0x000019dd movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x000019e1 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x000019e5 pmovmskb %xmm3, %edx - 0x66, 0x0f, 0x6f, 0xdf, //0x000019e9 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x000019ed pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x000019f1 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xde, //0x000019f5 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x000019f9 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x000019fd pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdd, //0x00001a01 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00001a05 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00001a09 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe7, 0x30, //0x00001a0d shlq $48, %rdi - 0x48, 0xc1, 0xe6, 0x20, //0x00001a11 shlq $32, %rsi - 0x48, 0x09, 0xfe, //0x00001a15 orq %rdi, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x00001a18 shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x00001a1c orq %rsi, %rcx - 0x48, 0x09, 0xca, //0x00001a1f orq %rcx, %rdx - 0x48, 0x89, 0xd1, //0x00001a22 movq %rdx, %rcx - 0x66, 0x45, 0x0f, 0x6f, 0xee, //0x00001a25 movdqa %xmm14, %xmm13 - 0x4c, 0x09, 0xd1, //0x00001a2a orq %r10, %rcx - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001a2d jne LBB0_311 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001a33 movq $-1, %rdx - 0x45, 0x31, 0xd2, //0x00001a3a xorl %r10d, %r10d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001a3d jmp LBB0_312 - //0x00001a42 LBB0_311 - 0x4c, 0x89, 0xd1, //0x00001a42 movq %r10, %rcx - 0x48, 0xf7, 0xd1, //0x00001a45 notq %rcx - 0x48, 0x21, 0xd1, //0x00001a48 andq %rdx, %rcx - 0x4c, 0x8d, 0x1c, 0x09, //0x00001a4b leaq (%rcx,%rcx), %r11 - 0x4d, 0x09, 0xd3, //0x00001a4f orq %r10, %r11 - 0x4c, 0x89, 0xdf, //0x00001a52 movq %r11, %rdi - 0x48, 0xf7, 0xd7, //0x00001a55 notq %rdi - 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001a58 movabsq $-6148914691236517206, %rsi - 0x48, 0x21, 0xf2, //0x00001a62 andq %rsi, %rdx - 0x48, 0x21, 0xfa, //0x00001a65 andq %rdi, %rdx - 0x45, 0x31, 0xd2, //0x00001a68 xorl %r10d, %r10d - 0x48, 0x01, 0xca, //0x00001a6b addq %rcx, %rdx - 0x41, 0x0f, 0x92, 0xc2, //0x00001a6e setb %r10b - 0x48, 0x01, 0xd2, //0x00001a72 addq %rdx, %rdx - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001a75 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xca, //0x00001a7f xorq %rcx, %rdx - 0x4c, 0x21, 0xda, //0x00001a82 andq %r11, %rdx - 0x48, 0xf7, 0xd2, //0x00001a85 notq %rdx - //0x00001a88 LBB0_312 - 0x66, 0x0f, 0x6f, 0xdd, //0x00001a88 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001a8c pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001a90 pmovmskb %xmm3, %ecx - 0x48, 0xc1, 0xe1, 0x30, //0x00001a94 shlq $48, %rcx - 0x66, 0x0f, 0x6f, 0xde, //0x00001a98 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001a9c pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001aa0 pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x20, //0x00001aa4 shlq $32, %rsi - 0x48, 0x09, 0xce, //0x00001aa8 orq %rcx, %rsi - 0x66, 0x0f, 0x6f, 0xdf, //0x00001aab movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001aaf pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001ab3 pmovmskb %xmm3, %ecx - 0x48, 0xc1, 0xe1, 0x10, //0x00001ab7 shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x00001abb orq %rsi, %rcx - 0x66, 0x0f, 0x6f, 0xdc, //0x00001abe movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001ac2 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001ac6 pmovmskb %xmm3, %esi - 0x48, 0x09, 0xce, //0x00001aca orq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00001acd andq %rdx, %rsi - 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x00001ad0 movq %rsi, %xmm3 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xda, 0x00, //0x00001ad5 pclmulqdq $0, %xmm10, %xmm3 - 0x66, 0x49, 0x0f, 0x7e, 0xdb, //0x00001adc movq %xmm3, %r11 - 0x4d, 0x31, 0xc3, //0x00001ae1 xorq %r8, %r11 - 0x66, 0x0f, 0x6f, 0xdc, //0x00001ae4 movdqa %xmm4, %xmm3 - 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x6f, 0xe5, 0xff, 0xff, //0x00001ae8 movdqu $-6801(%rip), %xmm11 /* LCPI0_6+0(%rip) */ - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001af1 pcmpeqb %xmm11, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00001af6 pmovmskb %xmm3, %r13d - 0x66, 0x0f, 0x6f, 0xdf, //0x00001afb movdqa %xmm7, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001aff pcmpeqb %xmm11, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001b04 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xde, //0x00001b08 movdqa %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001b0c pcmpeqb %xmm11, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x00001b11 pmovmskb %xmm3, %edx - 0x66, 0x0f, 0x6f, 0xdd, //0x00001b15 movdqa %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001b19 pcmpeqb %xmm11, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001b1e pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x30, //0x00001b22 shlq $48, %rsi - 0x48, 0xc1, 0xe2, 0x20, //0x00001b26 shlq $32, %rdx - 0x48, 0x09, 0xf2, //0x00001b2a orq %rsi, %rdx - 0x48, 0xc1, 0xe1, 0x10, //0x00001b2d shlq $16, %rcx - 0x48, 0x09, 0xd1, //0x00001b31 orq %rdx, %rcx - 0x49, 0x09, 0xcd, //0x00001b34 orq %rcx, %r13 - 0x4d, 0x89, 0xd8, //0x00001b37 movq %r11, %r8 - 0x49, 0xf7, 0xd0, //0x00001b3a notq %r8 - 0x4d, 0x21, 0xc5, //0x00001b3d andq %r8, %r13 - 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001b40 movdqa %xmm8, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xe0, //0x00001b45 pcmpeqb %xmm8, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x00001b4a pmovmskb %xmm4, %edx - 0x66, 0x41, 0x0f, 0x74, 0xf8, //0x00001b4e pcmpeqb %xmm8, %xmm7 - 0x66, 0x0f, 0xd7, 0xf7, //0x00001b53 pmovmskb %xmm7, %esi - 0x66, 0x41, 0x0f, 0x74, 0xf0, //0x00001b57 pcmpeqb %xmm8, %xmm6 - 0x66, 0x0f, 0xd7, 0xce, //0x00001b5c pmovmskb %xmm6, %ecx - 0x66, 0x41, 0x0f, 0x74, 0xe8, //0x00001b60 pcmpeqb %xmm8, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xfd, //0x00001b65 pmovmskb %xmm5, %r15d - 0x49, 0xc1, 0xe7, 0x30, //0x00001b6a shlq $48, %r15 - 0x48, 0xc1, 0xe1, 0x20, //0x00001b6e shlq $32, %rcx - 0x4c, 0x09, 0xf9, //0x00001b72 orq %r15, %rcx - 0x48, 0xc1, 0xe6, 0x10, //0x00001b75 shlq $16, %rsi - 0x48, 0x09, 0xce, //0x00001b79 orq %rcx, %rsi - 0x48, 0x09, 0xf2, //0x00001b7c orq %rsi, %rdx - 0x66, 0x45, 0x0f, 0x6f, 0xf5, //0x00001b7f movdqa %xmm13, %xmm14 - 0x4c, 0x21, 0xc2, //0x00001b84 andq %r8, %rdx - 0x0f, 0x84, 0xaa, 0x00, 0x00, 0x00, //0x00001b87 je LBB0_316 - 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x5a, 0xe5, 0xff, 0xff, //0x00001b8d movdqu $-6822(%rip), %xmm11 /* LCPI0_15+0(%rip) */ - 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001b96 movdqa %xmm8, %xmm2 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x9c, 0xe4, 0xff, 0xff, //0x00001b9b movdqu $-7012(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001ba4 movabsq $3689348814741910323, %r8 - 0xf3, 0x44, 0x0f, 0x6f, 0x05, 0x99, 0xe4, 0xff, 0xff, //0x00001bae movdqu $-7015(%rip), %xmm8 /* LCPI0_5+0(%rip) */ - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001bb7 .p2align 4, 0x90 - //0x00001bc0 LBB0_314 - 0x48, 0x8d, 0x7a, 0xff, //0x00001bc0 leaq $-1(%rdx), %rdi - 0x48, 0x89, 0xf9, //0x00001bc4 movq %rdi, %rcx - 0x4c, 0x21, 0xe9, //0x00001bc7 andq %r13, %rcx - 0x48, 0x89, 0xce, //0x00001bca movq %rcx, %rsi - 0x48, 0xd1, 0xee, //0x00001bcd shrq %rsi - 0x48, 0xbb, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001bd0 movabsq $6148914691236517205, %rbx - 0x48, 0x21, 0xde, //0x00001bda andq %rbx, %rsi - 0x48, 0x29, 0xf1, //0x00001bdd subq %rsi, %rcx - 0x48, 0x89, 0xce, //0x00001be0 movq %rcx, %rsi - 0x4c, 0x21, 0xc6, //0x00001be3 andq %r8, %rsi - 0x48, 0xc1, 0xe9, 0x02, //0x00001be6 shrq $2, %rcx - 0x4c, 0x21, 0xc1, //0x00001bea andq %r8, %rcx - 0x48, 0x01, 0xf1, //0x00001bed addq %rsi, %rcx - 0x48, 0x89, 0xce, //0x00001bf0 movq %rcx, %rsi - 0x48, 0xc1, 0xee, 0x04, //0x00001bf3 shrq $4, %rsi - 0x48, 0x01, 0xce, //0x00001bf7 addq %rcx, %rsi - 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001bfa movabsq $1085102592571150095, %rcx - 0x48, 0x21, 0xce, //0x00001c04 andq %rcx, %rsi - 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00001c07 movabsq $72340172838076673, %rcx - 0x48, 0x0f, 0xaf, 0xf1, //0x00001c11 imulq %rcx, %rsi - 0x48, 0xc1, 0xee, 0x38, //0x00001c15 shrq $56, %rsi - 0x4c, 0x01, 0xce, //0x00001c19 addq %r9, %rsi - 0x4c, 0x39, 0xf6, //0x00001c1c cmpq %r14, %rsi - 0x0f, 0x86, 0xd4, 0x06, 0x00, 0x00, //0x00001c1f jbe LBB0_382 - 0x49, 0x83, 0xc6, 0x01, //0x00001c25 addq $1, %r14 - 0x48, 0x21, 0xfa, //0x00001c29 andq %rdi, %rdx - 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x00001c2c jne LBB0_314 - 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00001c32 jmp LBB0_317 - //0x00001c37 LBB0_316 - 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001c37 movdqa %xmm8, %xmm2 - 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001c3c movabsq $3689348814741910323, %r8 - //0x00001c46 LBB0_317 - 0x49, 0xc1, 0xfb, 0x3f, //0x00001c46 sarq $63, %r11 - 0x4c, 0x89, 0xe9, //0x00001c4a movq %r13, %rcx - 0x48, 0xd1, 0xe9, //0x00001c4d shrq %rcx - 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001c50 movabsq $6148914691236517205, %rdx - 0x48, 0x21, 0xd1, //0x00001c5a andq %rdx, %rcx - 0x49, 0x29, 0xcd, //0x00001c5d subq %rcx, %r13 - 0x4c, 0x89, 0xe9, //0x00001c60 movq %r13, %rcx - 0x4c, 0x21, 0xc1, //0x00001c63 andq %r8, %rcx - 0x49, 0xc1, 0xed, 0x02, //0x00001c66 shrq $2, %r13 - 0x4d, 0x21, 0xc5, //0x00001c6a andq %r8, %r13 - 0x49, 0x01, 0xcd, //0x00001c6d addq %rcx, %r13 - 0x4c, 0x89, 0xe9, //0x00001c70 movq %r13, %rcx - 0x48, 0xc1, 0xe9, 0x04, //0x00001c73 shrq $4, %rcx - 0x4c, 0x01, 0xe9, //0x00001c77 addq %r13, %rcx - 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001c7a movabsq $1085102592571150095, %rdx - 0x48, 0x21, 0xd1, //0x00001c84 andq %rdx, %rcx - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00001c87 movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xca, //0x00001c91 imulq %rdx, %rcx - 0x48, 0xc1, 0xe9, 0x38, //0x00001c95 shrq $56, %rcx - 0x49, 0x01, 0xc9, //0x00001c99 addq %rcx, %r9 - 0x49, 0x83, 0xc4, 0x40, //0x00001c9c addq $64, %r12 - 0x48, 0x8b, 0x55, 0xc0, //0x00001ca0 movq $-64(%rbp), %rdx - 0x48, 0x83, 0xc2, 0xc0, //0x00001ca4 addq $-64, %rdx - 0x4d, 0x89, 0xd8, //0x00001ca8 movq %r11, %r8 - 0x48, 0x83, 0xfa, 0x40, //0x00001cab cmpq $64, %rdx - 0x48, 0x89, 0x55, 0xc0, //0x00001caf movq %rdx, $-64(%rbp) - 0x0f, 0x8d, 0x04, 0xfd, 0xff, 0xff, //0x00001cb3 jge LBB0_309 - 0xe9, 0xb3, 0xfb, 0xff, 0xff, //0x00001cb9 jmp LBB0_318 - //0x00001cbe LBB0_334 - 0x48, 0x8b, 0x4d, 0xa8, //0x00001cbe movq $-88(%rbp), %rcx - 0x4c, 0x8b, 0x49, 0x08, //0x00001cc2 movq $8(%rcx), %r9 - 0x4d, 0x8b, 0x06, //0x00001cc6 movq (%r14), %r8 - 0x4f, 0x8d, 0x14, 0x04, //0x00001cc9 leaq (%r12,%r8), %r10 - 0x4d, 0x29, 0xc1, //0x00001ccd subq %r8, %r9 - 0x49, 0x83, 0xf9, 0x20, //0x00001cd0 cmpq $32, %r9 - 0x0f, 0x8c, 0xdb, 0x00, 0x00, 0x00, //0x00001cd4 jl LBB0_343 - 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x00001cda movl $32, %r14d - 0x31, 0xd2, //0x00001ce0 xorl %edx, %edx - 0x45, 0x31, 0xdb, //0x00001ce2 xorl %r11d, %r11d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001ce5 .p2align 4, 0x90 - //0x00001cf0 LBB0_336 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x12, //0x00001cf0 movdqu (%r10,%rdx), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x12, 0x10, //0x00001cf6 movdqu $16(%r10,%rdx), %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x00001cfd movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00001d01 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00001d05 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x6f, 0xec, //0x00001d09 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00001d0d pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x00001d11 pmovmskb %xmm5, %edi - 0x48, 0xc1, 0xe7, 0x10, //0x00001d15 shlq $16, %rdi - 0x48, 0x09, 0xf7, //0x00001d19 orq %rsi, %rdi - 0x66, 0x0f, 0x74, 0xd9, //0x00001d1c pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001d20 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x74, 0xe1, //0x00001d24 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xf4, //0x00001d28 pmovmskb %xmm4, %esi - 0x48, 0xc1, 0xe6, 0x10, //0x00001d2c shlq $16, %rsi - 0x48, 0x09, 0xce, //0x00001d30 orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00001d33 movq %rsi, %rcx - 0x4c, 0x09, 0xd9, //0x00001d36 orq %r11, %rcx - 0x0f, 0x84, 0x41, 0x00, 0x00, 0x00, //0x00001d39 je LBB0_338 - 0x44, 0x89, 0xd9, //0x00001d3f movl %r11d, %ecx - 0xf7, 0xd1, //0x00001d42 notl %ecx - 0x21, 0xf1, //0x00001d44 andl %esi, %ecx - 0x44, 0x8d, 0x3c, 0x09, //0x00001d46 leal (%rcx,%rcx), %r15d - 0x45, 0x09, 0xdf, //0x00001d4a orl %r11d, %r15d - 0x44, 0x89, 0xfb, //0x00001d4d movl %r15d, %ebx - 0xf7, 0xd3, //0x00001d50 notl %ebx - 0x21, 0xf3, //0x00001d52 andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001d54 andl $-1431655766, %ebx - 0x45, 0x31, 0xdb, //0x00001d5a xorl %r11d, %r11d - 0x01, 0xcb, //0x00001d5d addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc3, //0x00001d5f setb %r11b - 0x01, 0xdb, //0x00001d63 addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00001d65 xorl $1431655765, %ebx - 0x44, 0x21, 0xfb, //0x00001d6b andl %r15d, %ebx - 0xf7, 0xd3, //0x00001d6e notl %ebx - 0x21, 0xdf, //0x00001d70 andl %ebx, %edi - 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x00001d72 jmp LBB0_339 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001d77 .p2align 4, 0x90 - //0x00001d80 LBB0_338 - 0x45, 0x31, 0xdb, //0x00001d80 xorl %r11d, %r11d - //0x00001d83 LBB0_339 - 0x48, 0x85, 0xff, //0x00001d83 testq %rdi, %rdi - 0x0f, 0x85, 0xe5, 0xed, 0xff, 0xff, //0x00001d86 jne LBB0_129 - 0x48, 0x83, 0xc2, 0x20, //0x00001d8c addq $32, %rdx - 0x4b, 0x8d, 0x0c, 0x31, //0x00001d90 leaq (%r9,%r14), %rcx - 0x48, 0x83, 0xc1, 0xe0, //0x00001d94 addq $-32, %rcx - 0x49, 0x83, 0xc6, 0xe0, //0x00001d98 addq $-32, %r14 - 0x48, 0x83, 0xf9, 0x3f, //0x00001d9c cmpq $63, %rcx - 0x0f, 0x8f, 0x4a, 0xff, 0xff, 0xff, //0x00001da0 jg LBB0_336 - 0x4d, 0x85, 0xdb, //0x00001da6 testq %r11, %r11 - 0x0f, 0x85, 0x4d, 0x19, 0x00, 0x00, //0x00001da9 jne LBB0_570 - 0x49, 0x01, 0xd2, //0x00001daf addq %rdx, %r10 - 0x49, 0x29, 0xd1, //0x00001db2 subq %rdx, %r9 - //0x00001db5 LBB0_343 - 0x4c, 0x8b, 0x75, 0xd0, //0x00001db5 movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001db9 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x00001dc3 testq %r9, %r9 - 0x0f, 0x8f, 0x8e, 0x19, 0x00, 0x00, //0x00001dc6 jg LBB0_574 - 0xe9, 0x76, 0x1c, 0x00, 0x00, //0x00001dcc jmp LBB0_638 - //0x00001dd1 LBB0_344 - 0x48, 0x89, 0xfa, //0x00001dd1 movq %rdi, %rdx - 0x48, 0x29, 0xc2, //0x00001dd4 subq %rax, %rdx - 0x48, 0x83, 0xfa, 0x10, //0x00001dd7 cmpq $16, %rdx - 0x0f, 0x82, 0x3c, 0x12, 0x00, 0x00, //0x00001ddb jb LBB0_498 - 0x48, 0x89, 0xc2, //0x00001de1 movq %rax, %rdx - 0x48, 0xf7, 0xda, //0x00001de4 negq %rdx - 0x48, 0x89, 0xc1, //0x00001de7 movq %rax, %rcx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001dea .p2align 4, 0x90 - //0x00001df0 LBB0_346 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x0c, //0x00001df0 movdqu (%r12,%rcx), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x00001df6 movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0x74, 0xe6, //0x00001dfa pcmpeqb %xmm14, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xd9, //0x00001dff pand %xmm9, %xmm3 - 0x66, 0x0f, 0x74, 0xda, //0x00001e04 pcmpeqb %xmm2, %xmm3 - 0x66, 0x0f, 0xeb, 0xdc, //0x00001e08 por %xmm4, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001e0c pmovmskb %xmm3, %esi - 0x85, 0xf6, //0x00001e10 testl %esi, %esi - 0x0f, 0x85, 0x33, 0x05, 0x00, 0x00, //0x00001e12 jne LBB0_605 - 0x48, 0x83, 0xc1, 0x10, //0x00001e18 addq $16, %rcx - 0x48, 0x8d, 0x34, 0x17, //0x00001e1c leaq (%rdi,%rdx), %rsi - 0x48, 0x83, 0xc6, 0xf0, //0x00001e20 addq $-16, %rsi - 0x48, 0x83, 0xc2, 0xf0, //0x00001e24 addq $-16, %rdx - 0x48, 0x83, 0xfe, 0x0f, //0x00001e28 cmpq $15, %rsi - 0x0f, 0x87, 0xbe, 0xff, 0xff, 0xff, //0x00001e2c ja LBB0_346 - 0x4c, 0x89, 0xe1, //0x00001e32 movq %r12, %rcx - 0x48, 0x29, 0xd1, //0x00001e35 subq %rdx, %rcx - 0x48, 0x01, 0xd7, //0x00001e38 addq %rdx, %rdi - 0x48, 0x89, 0xfa, //0x00001e3b movq %rdi, %rdx - 0x48, 0x85, 0xd2, //0x00001e3e testq %rdx, %rdx - 0x0f, 0x84, 0xe3, 0x11, 0x00, 0x00, //0x00001e41 je LBB0_499 - //0x00001e47 LBB0_349 - 0x48, 0x8d, 0x3c, 0x11, //0x00001e47 leaq (%rcx,%rdx), %rdi - 0x31, 0xf6, //0x00001e4b xorl %esi, %esi - //0x00001e4d LBB0_350 - 0x0f, 0xb6, 0x1c, 0x31, //0x00001e4d movzbl (%rcx,%rsi), %ebx - 0x80, 0xfb, 0x2c, //0x00001e51 cmpb $44, %bl - 0x0f, 0x84, 0x81, 0x0d, 0x00, 0x00, //0x00001e54 je LBB0_462 - 0x80, 0xfb, 0x7d, //0x00001e5a cmpb $125, %bl - 0x0f, 0x84, 0x78, 0x0d, 0x00, 0x00, //0x00001e5d je LBB0_462 - 0x80, 0xfb, 0x5d, //0x00001e63 cmpb $93, %bl - 0x0f, 0x84, 0x6f, 0x0d, 0x00, 0x00, //0x00001e66 je LBB0_462 - 0x48, 0x83, 0xc6, 0x01, //0x00001e6c addq $1, %rsi - 0x48, 0x39, 0xf2, //0x00001e70 cmpq %rsi, %rdx - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x00001e73 jne LBB0_350 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00001e79 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00001e7e movdqa %xmm2, %xmm5 - 0x48, 0x89, 0xf9, //0x00001e82 movq %rdi, %rcx - //0x00001e85 LBB0_355 - 0x4c, 0x29, 0xe1, //0x00001e85 subq %r12, %rcx - 0x4c, 0x8b, 0x75, 0xd0, //0x00001e88 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00001e8c movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001e90 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x00001e9a movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00001e9e movdqa %xmm6, %xmm13 - 0x49, 0x89, 0x0e, //0x00001ea3 movq %rcx, (%r14) - 0x48, 0x85, 0xc0, //0x00001ea6 testq %rax, %rax - 0x0f, 0x8f, 0x11, 0xe3, 0xff, 0xff, //0x00001ea9 jg LBB0_4 - 0xe9, 0x44, 0x1b, 0x00, 0x00, //0x00001eaf jmp LBB0_606 - //0x00001eb4 LBB0_356 - 0x48, 0x8b, 0x55, 0xa8, //0x00001eb4 movq $-88(%rbp), %rdx - 0x48, 0x8b, 0x52, 0x08, //0x00001eb8 movq $8(%rdx), %rdx - 0x49, 0x8b, 0x0e, //0x00001ebc movq (%r14), %rcx - 0x48, 0x29, 0xca, //0x00001ebf subq %rcx, %rdx - 0x48, 0x89, 0x4d, 0xb0, //0x00001ec2 movq %rcx, $-80(%rbp) - 0x49, 0x01, 0xcc, //0x00001ec6 addq %rcx, %r12 - 0x45, 0x31, 0xc0, //0x00001ec9 xorl %r8d, %r8d - 0x45, 0x31, 0xd2, //0x00001ecc xorl %r10d, %r10d - 0x45, 0x31, 0xc9, //0x00001ecf xorl %r9d, %r9d - 0x45, 0x31, 0xf6, //0x00001ed2 xorl %r14d, %r14d - 0x48, 0x83, 0xfa, 0x40, //0x00001ed5 cmpq $64, %rdx - 0x48, 0x89, 0x55, 0xc0, //0x00001ed9 movq %rdx, $-64(%rbp) - 0x0f, 0x8d, 0x5b, 0x01, 0x00, 0x00, //0x00001edd jge LBB0_357 - //0x00001ee3 LBB0_366 - 0x48, 0x85, 0xd2, //0x00001ee3 testq %rdx, %rdx - 0x0f, 0x8e, 0x6b, 0x1d, 0x00, 0x00, //0x00001ee6 jle LBB0_648 - 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00001eec movdqa %xmm13, %xmm7 - 0x66, 0x0f, 0x6f, 0xf2, //0x00001ef1 movdqa %xmm2, %xmm6 - 0x66, 0x0f, 0xef, 0xd2, //0x00001ef5 pxor %xmm2, %xmm2 - 0xf3, 0x0f, 0x7f, 0x55, 0x80, //0x00001ef9 movdqu %xmm2, $-128(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001efe movdqu %xmm2, $-144(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x00001f06 movdqu %xmm2, $-160(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001f0e movdqu %xmm2, $-176(%rbp) - 0x4c, 0x89, 0xe7, //0x00001f16 movq %r12, %rdi - 0x44, 0x89, 0xe1, //0x00001f19 movl %r12d, %ecx - 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00001f1c andl $4095, %ecx - 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00001f22 cmpl $4033, %ecx - 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x00001f28 jb LBB0_370 - 0x48, 0x83, 0x7d, 0xc0, 0x20, //0x00001f2e cmpq $32, $-64(%rbp) - 0x0f, 0x82, 0x40, 0x00, 0x00, 0x00, //0x00001f33 jb LBB0_371 - 0x0f, 0x10, 0x1f, //0x00001f39 movups (%rdi), %xmm3 - 0x0f, 0x11, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x00001f3c movups %xmm3, $-176(%rbp) - 0xf3, 0x0f, 0x6f, 0x5f, 0x10, //0x00001f43 movdqu $16(%rdi), %xmm3 - 0xf3, 0x0f, 0x7f, 0x9d, 0x60, 0xff, 0xff, 0xff, //0x00001f48 movdqu %xmm3, $-160(%rbp) - 0x48, 0x83, 0xc7, 0x20, //0x00001f50 addq $32, %rdi - 0x48, 0x8b, 0x4d, 0xc0, //0x00001f54 movq $-64(%rbp), %rcx - 0x48, 0x8d, 0x71, 0xe0, //0x00001f58 leaq $-32(%rcx), %rsi - 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001f5c leaq $-144(%rbp), %rdx - 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x00001f63 jmp LBB0_372 - //0x00001f68 LBB0_370 - 0x66, 0x0f, 0x6f, 0xd6, //0x00001f68 movdqa %xmm6, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x00001f6c movdqa %xmm7, %xmm13 - 0x49, 0x89, 0xfc, //0x00001f71 movq %rdi, %r12 - 0xe9, 0xc5, 0x00, 0x00, 0x00, //0x00001f74 jmp LBB0_357 - //0x00001f79 LBB0_371 - 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001f79 leaq $-176(%rbp), %rdx - 0x48, 0x8b, 0x75, 0xc0, //0x00001f80 movq $-64(%rbp), %rsi - //0x00001f84 LBB0_372 - 0x48, 0x83, 0xfe, 0x10, //0x00001f84 cmpq $16, %rsi - 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x00001f88 jb LBB0_373 - 0xf3, 0x0f, 0x6f, 0x1f, //0x00001f8e movdqu (%rdi), %xmm3 - 0xf3, 0x0f, 0x7f, 0x1a, //0x00001f92 movdqu %xmm3, (%rdx) - 0x48, 0x83, 0xc7, 0x10, //0x00001f96 addq $16, %rdi - 0x48, 0x83, 0xc2, 0x10, //0x00001f9a addq $16, %rdx - 0x48, 0x83, 0xc6, 0xf0, //0x00001f9e addq $-16, %rsi - 0x48, 0x83, 0xfe, 0x08, //0x00001fa2 cmpq $8, %rsi - 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x00001fa6 jae LBB0_380 - //0x00001fac LBB0_374 - 0x48, 0x83, 0xfe, 0x04, //0x00001fac cmpq $4, %rsi - 0x0f, 0x8c, 0x45, 0x00, 0x00, 0x00, //0x00001fb0 jl LBB0_375 - //0x00001fb6 LBB0_381 - 0x8b, 0x0f, //0x00001fb6 movl (%rdi), %ecx - 0x89, 0x0a, //0x00001fb8 movl %ecx, (%rdx) - 0x48, 0x83, 0xc7, 0x04, //0x00001fba addq $4, %rdi - 0x48, 0x83, 0xc2, 0x04, //0x00001fbe addq $4, %rdx - 0x48, 0x83, 0xc6, 0xfc, //0x00001fc2 addq $-4, %rsi - 0x48, 0x83, 0xfe, 0x02, //0x00001fc6 cmpq $2, %rsi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001fca jae LBB0_376 - 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00001fd0 jmp LBB0_377 - //0x00001fd5 LBB0_373 - 0x48, 0x83, 0xfe, 0x08, //0x00001fd5 cmpq $8, %rsi - 0x0f, 0x82, 0xcd, 0xff, 0xff, 0xff, //0x00001fd9 jb LBB0_374 - //0x00001fdf LBB0_380 - 0x48, 0x8b, 0x0f, //0x00001fdf movq (%rdi), %rcx - 0x48, 0x89, 0x0a, //0x00001fe2 movq %rcx, (%rdx) - 0x48, 0x83, 0xc7, 0x08, //0x00001fe5 addq $8, %rdi - 0x48, 0x83, 0xc2, 0x08, //0x00001fe9 addq $8, %rdx - 0x48, 0x83, 0xc6, 0xf8, //0x00001fed addq $-8, %rsi - 0x48, 0x83, 0xfe, 0x04, //0x00001ff1 cmpq $4, %rsi - 0x0f, 0x8d, 0xbb, 0xff, 0xff, 0xff, //0x00001ff5 jge LBB0_381 - //0x00001ffb LBB0_375 - 0x48, 0x83, 0xfe, 0x02, //0x00001ffb cmpq $2, %rsi - 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00001fff jb LBB0_377 - //0x00002005 LBB0_376 - 0x0f, 0xb7, 0x0f, //0x00002005 movzwl (%rdi), %ecx - 0x66, 0x89, 0x0a, //0x00002008 movw %cx, (%rdx) - 0x48, 0x83, 0xc7, 0x02, //0x0000200b addq $2, %rdi - 0x48, 0x83, 0xc2, 0x02, //0x0000200f addq $2, %rdx - 0x48, 0x83, 0xc6, 0xfe, //0x00002013 addq $-2, %rsi - //0x00002017 LBB0_377 - 0x48, 0x89, 0xf9, //0x00002017 movq %rdi, %rcx - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x0000201a leaq $-176(%rbp), %r12 - 0x48, 0x85, 0xf6, //0x00002021 testq %rsi, %rsi - 0x66, 0x0f, 0x6f, 0xd6, //0x00002024 movdqa %xmm6, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x00002028 movdqa %xmm7, %xmm13 - 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x0000202d je LBB0_357 - 0x8a, 0x09, //0x00002033 movb (%rcx), %cl - 0x88, 0x0a, //0x00002035 movb %cl, (%rdx) - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00002037 leaq $-176(%rbp), %r12 - //0x0000203e LBB0_357 - 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x0000203e movdqu (%r12), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x10, //0x00002044 movdqu $16(%r12), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x20, //0x0000204b movdqu $32(%r12), %xmm6 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x30, //0x00002052 movdqu $48(%r12), %xmm5 - 0x66, 0x0f, 0x6f, 0xdc, //0x00002059 movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000205d pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x00002061 pmovmskb %xmm3, %edx - 0x66, 0x0f, 0x6f, 0xdf, //0x00002065 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002069 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x0000206d pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xde, //0x00002071 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002075 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002079 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdd, //0x0000207d movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002081 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00002085 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe7, 0x30, //0x00002089 shlq $48, %rdi - 0x48, 0xc1, 0xe6, 0x20, //0x0000208d shlq $32, %rsi - 0x48, 0x09, 0xfe, //0x00002091 orq %rdi, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x00002094 shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x00002098 orq %rsi, %rcx - 0x48, 0x09, 0xca, //0x0000209b orq %rcx, %rdx - 0x48, 0x89, 0xd1, //0x0000209e movq %rdx, %rcx - 0x4c, 0x09, 0xd1, //0x000020a1 orq %r10, %rcx - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x000020a4 jne LBB0_359 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000020aa movq $-1, %rdx - 0x45, 0x31, 0xd2, //0x000020b1 xorl %r10d, %r10d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x000020b4 jmp LBB0_360 - //0x000020b9 LBB0_359 - 0x4c, 0x89, 0xd1, //0x000020b9 movq %r10, %rcx - 0x48, 0xf7, 0xd1, //0x000020bc notq %rcx - 0x48, 0x21, 0xd1, //0x000020bf andq %rdx, %rcx - 0x4c, 0x8d, 0x1c, 0x09, //0x000020c2 leaq (%rcx,%rcx), %r11 - 0x4d, 0x09, 0xd3, //0x000020c6 orq %r10, %r11 - 0x4c, 0x89, 0xdf, //0x000020c9 movq %r11, %rdi - 0x48, 0xf7, 0xd7, //0x000020cc notq %rdi - 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000020cf movabsq $-6148914691236517206, %rsi - 0x48, 0x21, 0xf2, //0x000020d9 andq %rsi, %rdx - 0x48, 0x21, 0xfa, //0x000020dc andq %rdi, %rdx - 0x45, 0x31, 0xd2, //0x000020df xorl %r10d, %r10d - 0x48, 0x01, 0xca, //0x000020e2 addq %rcx, %rdx - 0x41, 0x0f, 0x92, 0xc2, //0x000020e5 setb %r10b - 0x48, 0x01, 0xd2, //0x000020e9 addq %rdx, %rdx - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000020ec movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xca, //0x000020f6 xorq %rcx, %rdx - 0x4c, 0x21, 0xda, //0x000020f9 andq %r11, %rdx - 0x48, 0xf7, 0xd2, //0x000020fc notq %rdx - //0x000020ff LBB0_360 - 0x66, 0x0f, 0x6f, 0xdd, //0x000020ff movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00002103 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00002107 pmovmskb %xmm3, %ecx - 0x48, 0xc1, 0xe1, 0x30, //0x0000210b shlq $48, %rcx - 0x66, 0x0f, 0x6f, 0xde, //0x0000210f movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00002113 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002117 pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x20, //0x0000211b shlq $32, %rsi - 0x48, 0x09, 0xce, //0x0000211f orq %rcx, %rsi - 0x66, 0x0f, 0x6f, 0xdf, //0x00002122 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00002126 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x0000212a pmovmskb %xmm3, %ecx - 0x48, 0xc1, 0xe1, 0x10, //0x0000212e shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x00002132 orq %rsi, %rcx - 0x66, 0x0f, 0x6f, 0xdc, //0x00002135 movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00002139 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x0000213d pmovmskb %xmm3, %esi - 0x48, 0x09, 0xce, //0x00002141 orq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00002144 andq %rdx, %rsi - 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x00002147 movq %rsi, %xmm3 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xda, 0x00, //0x0000214c pclmulqdq $0, %xmm10, %xmm3 - 0x66, 0x49, 0x0f, 0x7e, 0xdb, //0x00002153 movq %xmm3, %r11 - 0x4d, 0x31, 0xc3, //0x00002158 xorq %r8, %r11 - 0x66, 0x0f, 0x6f, 0xdc, //0x0000215b movdqa %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x0000215f pcmpeqb %xmm13, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00002164 pmovmskb %xmm3, %r13d - 0x66, 0x0f, 0x6f, 0xdf, //0x00002169 movdqa %xmm7, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x0000216d pcmpeqb %xmm13, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00002172 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xde, //0x00002176 movdqa %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x0000217a pcmpeqb %xmm13, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x0000217f pmovmskb %xmm3, %edx - 0x66, 0x0f, 0x6f, 0xdd, //0x00002183 movdqa %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00002187 pcmpeqb %xmm13, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x0000218c pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x30, //0x00002190 shlq $48, %rsi - 0x48, 0xc1, 0xe2, 0x20, //0x00002194 shlq $32, %rdx - 0x48, 0x09, 0xf2, //0x00002198 orq %rsi, %rdx - 0x48, 0xc1, 0xe1, 0x10, //0x0000219b shlq $16, %rcx - 0x48, 0x09, 0xd1, //0x0000219f orq %rdx, %rcx - 0x49, 0x09, 0xcd, //0x000021a2 orq %rcx, %r13 - 0x4d, 0x89, 0xd8, //0x000021a5 movq %r11, %r8 - 0x49, 0xf7, 0xd0, //0x000021a8 notq %r8 - 0x4d, 0x21, 0xc5, //0x000021ab andq %r8, %r13 - 0x66, 0x41, 0x0f, 0x74, 0xe0, //0x000021ae pcmpeqb %xmm8, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x000021b3 pmovmskb %xmm4, %edx - 0x66, 0x41, 0x0f, 0x74, 0xf8, //0x000021b7 pcmpeqb %xmm8, %xmm7 - 0x66, 0x0f, 0xd7, 0xf7, //0x000021bc pmovmskb %xmm7, %esi - 0x66, 0x41, 0x0f, 0x74, 0xf0, //0x000021c0 pcmpeqb %xmm8, %xmm6 - 0x66, 0x0f, 0xd7, 0xce, //0x000021c5 pmovmskb %xmm6, %ecx - 0x66, 0x41, 0x0f, 0x74, 0xe8, //0x000021c9 pcmpeqb %xmm8, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xfd, //0x000021ce pmovmskb %xmm5, %r15d - 0x49, 0xc1, 0xe7, 0x30, //0x000021d3 shlq $48, %r15 - 0x48, 0xc1, 0xe1, 0x20, //0x000021d7 shlq $32, %rcx - 0x4c, 0x09, 0xf9, //0x000021db orq %r15, %rcx - 0x48, 0xc1, 0xe6, 0x10, //0x000021de shlq $16, %rsi - 0x48, 0x09, 0xce, //0x000021e2 orq %rcx, %rsi - 0x48, 0x09, 0xf2, //0x000021e5 orq %rsi, %rdx - 0x4c, 0x21, 0xc2, //0x000021e8 andq %r8, %rdx - 0x0f, 0x84, 0x86, 0x00, 0x00, 0x00, //0x000021eb je LBB0_364 - 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x000021f1 movabsq $3689348814741910323, %r8 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x000021fb .p2align 4, 0x90 - //0x00002200 LBB0_362 - 0x48, 0x8d, 0x7a, 0xff, //0x00002200 leaq $-1(%rdx), %rdi - 0x48, 0x89, 0xf9, //0x00002204 movq %rdi, %rcx - 0x4c, 0x21, 0xe9, //0x00002207 andq %r13, %rcx - 0x48, 0x89, 0xce, //0x0000220a movq %rcx, %rsi - 0x48, 0xd1, 0xee, //0x0000220d shrq %rsi - 0x48, 0xbb, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002210 movabsq $6148914691236517205, %rbx - 0x48, 0x21, 0xde, //0x0000221a andq %rbx, %rsi - 0x48, 0x29, 0xf1, //0x0000221d subq %rsi, %rcx + 0x0f, 0x83, 0xc5, 0x02, 0x00, 0x00, //0x00000f9d jae LBB0_228 + 0xe9, 0xdf, 0x2c, 0x00, 0x00, //0x00000fa3 jmp LBB0_187 + //0x00000fa8 LBB0_188 + 0x41, 0x89, 0xc9, //0x00000fa8 movl %ecx, %r9d + 0x49, 0x01, 0xf9, //0x00000fab addq %rdi, %r9 + 0x4d, 0x01, 0xe9, //0x00000fae addq %r13, %r9 + 0xe9, 0x1c, 0x02, 0x00, 0x00, //0x00000fb1 jmp LBB0_217 + //0x00000fb6 LBB0_189 + 0x49, 0x89, 0xc2, //0x00000fb6 movq %rax, %r10 + 0x49, 0x29, 0xd2, //0x00000fb9 subq %rdx, %r10 + 0x0f, 0x84, 0xe1, 0x2c, 0x00, 0x00, //0x00000fbc je LBB0_658 + 0x4c, 0x89, 0x65, 0xb8, //0x00000fc2 movq %r12, $-72(%rbp) + 0x49, 0x83, 0xfa, 0x40, //0x00000fc6 cmpq $64, %r10 + 0x0f, 0x82, 0x15, 0x20, 0x00, 0x00, //0x00000fca jb LBB0_512 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000fd0 movq $-1, $-56(%rbp) + 0x48, 0x8b, 0x45, 0xc0, //0x00000fd8 movq $-64(%rbp), %rax + 0x45, 0x31, 0xe4, //0x00000fdc xorl %r12d, %r12d + 0x90, //0x00000fdf .p2align 4, 0x90 + //0x00000fe0 LBB0_192 + 0x48, 0x8b, 0x4d, 0xb8, //0x00000fe0 movq $-72(%rbp), %rcx + 0xf3, 0x44, 0x0f, 0x6f, 0x2c, 0x01, //0x00000fe4 movdqu (%rcx,%rax), %xmm13 + 0xf3, 0x0f, 0x6f, 0x74, 0x01, 0x10, //0x00000fea movdqu $16(%rcx,%rax), %xmm6 + 0xf3, 0x0f, 0x6f, 0x6c, 0x01, 0x20, //0x00000ff0 movdqu $32(%rcx,%rax), %xmm5 + 0xf3, 0x0f, 0x6f, 0x64, 0x01, 0x30, //0x00000ff6 movdqu $48(%rcx,%rax), %xmm4 + 0x66, 0x41, 0x0f, 0x6f, 0xdd, //0x00000ffc movdqa %xmm13, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001001 pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00001005 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x6f, 0xde, //0x0000100a movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000100e pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x00001012 pmovmskb %xmm3, %ebx + 0x66, 0x0f, 0x6f, 0xdd, //0x00001016 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000101a pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xf3, //0x0000101e pmovmskb %xmm3, %r14d + 0x66, 0x0f, 0x6f, 0xdc, //0x00001023 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001027 pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x0000102b pmovmskb %xmm3, %r15d + 0x66, 0x41, 0x0f, 0x6f, 0xdd, //0x00001030 movdqa %xmm13, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001035 pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00001039 pmovmskb %xmm3, %r13d + 0x66, 0x0f, 0x6f, 0xde, //0x0000103e movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001042 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001046 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xdd, //0x0000104a movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000104e pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00001052 pmovmskb %xmm3, %edi + 0x66, 0x0f, 0x6f, 0xdc, //0x00001056 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000105a pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xcb, //0x0000105e pmovmskb %xmm3, %r9d + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00001063 movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xde, //0x00001068 pcmpgtb %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xf2, //0x0000106c pcmpgtb %xmm10, %xmm6 + 0x66, 0x0f, 0xdb, 0xf3, //0x00001071 pand %xmm3, %xmm6 + 0x66, 0x0f, 0xd7, 0xf6, //0x00001075 pmovmskb %xmm6, %esi + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00001079 movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdd, //0x0000107e pcmpgtb %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xea, //0x00001082 pcmpgtb %xmm10, %xmm5 + 0x66, 0x0f, 0xdb, 0xeb, //0x00001087 pand %xmm3, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x0000108b pmovmskb %xmm5, %edx + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x0000108f movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00001094 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00001098 pcmpgtb %xmm10, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x0000109d pand %xmm3, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xc4, //0x000010a1 pmovmskb %xmm4, %r8d + 0x49, 0xc1, 0xe7, 0x30, //0x000010a6 shlq $48, %r15 + 0x49, 0xc1, 0xe6, 0x20, //0x000010aa shlq $32, %r14 + 0x4d, 0x09, 0xfe, //0x000010ae orq %r15, %r14 + 0x48, 0xc1, 0xe3, 0x10, //0x000010b1 shlq $16, %rbx + 0x4c, 0x09, 0xf3, //0x000010b5 orq %r14, %rbx + 0x49, 0x09, 0xdb, //0x000010b8 orq %rbx, %r11 + 0x49, 0xc1, 0xe1, 0x30, //0x000010bb shlq $48, %r9 + 0x48, 0xc1, 0xe7, 0x20, //0x000010bf shlq $32, %rdi + 0x4c, 0x09, 0xcf, //0x000010c3 orq %r9, %rdi + 0x48, 0xc1, 0xe1, 0x10, //0x000010c6 shlq $16, %rcx + 0x48, 0x09, 0xf9, //0x000010ca orq %rdi, %rcx + 0x49, 0xc1, 0xe0, 0x30, //0x000010cd shlq $48, %r8 + 0x48, 0xc1, 0xe2, 0x20, //0x000010d1 shlq $32, %rdx + 0x4c, 0x09, 0xc2, //0x000010d5 orq %r8, %rdx + 0x48, 0xc1, 0xe6, 0x10, //0x000010d8 shlq $16, %rsi + 0x48, 0x09, 0xd6, //0x000010dc orq %rdx, %rsi + 0x49, 0x09, 0xcd, //0x000010df orq %rcx, %r13 + 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x000010e2 jne LBB0_209 + 0x4d, 0x85, 0xe4, //0x000010e8 testq %r12, %r12 + 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x000010eb jne LBB0_211 + 0x45, 0x31, 0xe4, //0x000010f1 xorl %r12d, %r12d + 0x4c, 0x8b, 0x75, 0xd0, //0x000010f4 movq $-48(%rbp), %r14 + //0x000010f8 LBB0_195 + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x000010f8 movdqa %xmm12, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xdd, //0x000010fd pcmpgtb %xmm13, %xmm3 + 0x66, 0x45, 0x0f, 0x64, 0xea, //0x00001102 pcmpgtb %xmm10, %xmm13 + 0x66, 0x44, 0x0f, 0xdb, 0xeb, //0x00001107 pand %xmm3, %xmm13 + 0x66, 0x41, 0x0f, 0xd7, 0xcd, //0x0000110c pmovmskb %xmm13, %ecx + 0x48, 0x09, 0xce, //0x00001111 orq %rcx, %rsi + 0x4d, 0x85, 0xdb, //0x00001114 testq %r11, %r11 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00001117 movq $-80(%rbp), %r13 + 0x0f, 0x85, 0x91, 0x00, 0x00, 0x00, //0x0000111b jne LBB0_213 + 0x48, 0x85, 0xf6, //0x00001121 testq %rsi, %rsi + 0x0f, 0x85, 0xe7, 0x2a, 0x00, 0x00, //0x00001124 jne LBB0_645 + 0x49, 0x83, 0xc2, 0xc0, //0x0000112a addq $-64, %r10 + 0x48, 0x83, 0xc0, 0x40, //0x0000112e addq $64, %rax + 0x49, 0x83, 0xfa, 0x3f, //0x00001132 cmpq $63, %r10 + 0x0f, 0x87, 0xa4, 0xfe, 0xff, 0xff, //0x00001136 ja LBB0_192 + 0xe9, 0x27, 0x18, 0x00, 0x00, //0x0000113c jmp LBB0_198 + //0x00001141 LBB0_209 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00001141 cmpq $-1, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x00001146 movq $-48(%rbp), %r14 + 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x0000114a jne LBB0_212 + 0x49, 0x0f, 0xbc, 0xcd, //0x00001150 bsfq %r13, %rcx + 0x48, 0x01, 0xc1, //0x00001154 addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00001157 movq %rcx, $-56(%rbp) + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x0000115b jmp LBB0_212 + //0x00001160 LBB0_211 + 0x4c, 0x8b, 0x75, 0xd0, //0x00001160 movq $-48(%rbp), %r14 + //0x00001164 LBB0_212 + 0x4c, 0x89, 0xe1, //0x00001164 movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x00001167 notq %rcx + 0x4c, 0x21, 0xe9, //0x0000116a andq %r13, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x0000116d leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xe2, //0x00001171 orq %r12, %rdx + 0x48, 0x89, 0xd7, //0x00001174 movq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x00001177 notq %rdi + 0x4c, 0x21, 0xef, //0x0000117a andq %r13, %rdi + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000117d movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xdf, //0x00001187 andq %rbx, %rdi + 0x45, 0x31, 0xe4, //0x0000118a xorl %r12d, %r12d + 0x48, 0x01, 0xcf, //0x0000118d addq %rcx, %rdi + 0x41, 0x0f, 0x92, 0xc4, //0x00001190 setb %r12b + 0x48, 0x01, 0xff, //0x00001194 addq %rdi, %rdi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001197 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcf, //0x000011a1 xorq %rcx, %rdi + 0x48, 0x21, 0xd7, //0x000011a4 andq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x000011a7 notq %rdi + 0x49, 0x21, 0xfb, //0x000011aa andq %rdi, %r11 + 0xe9, 0x46, 0xff, 0xff, 0xff, //0x000011ad jmp LBB0_195 + //0x000011b2 LBB0_213 + 0x49, 0x0f, 0xbc, 0xcb, //0x000011b2 bsfq %r11, %rcx + 0x48, 0x85, 0xf6, //0x000011b6 testq %rsi, %rsi + 0x0f, 0x84, 0x0c, 0x06, 0x00, 0x00, //0x000011b9 je LBB0_310 + 0x48, 0x0f, 0xbc, 0xd6, //0x000011bf bsfq %rsi, %rdx + 0xe9, 0x08, 0x06, 0x00, 0x00, //0x000011c3 jmp LBB0_311 + //0x000011c8 LBB0_215 + 0x48, 0x01, 0xd6, //0x000011c8 addq %rdx, %rsi + 0x49, 0x89, 0xf1, //0x000011cb movq %rsi, %r9 + //0x000011ce LBB0_216 + 0x48, 0x8b, 0x7d, 0xb8, //0x000011ce movq $-72(%rbp), %rdi + //0x000011d2 LBB0_217 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000011d2 movq $-1, %r13 + 0x4d, 0x85, 0xc0, //0x000011d9 testq %r8, %r8 + 0x0f, 0x84, 0xb4, 0x28, 0x00, 0x00, //0x000011dc je LBB0_626 + 0x4d, 0x85, 0xd2, //0x000011e2 testq %r10, %r10 + 0x0f, 0x84, 0xab, 0x28, 0x00, 0x00, //0x000011e5 je LBB0_626 + 0x4d, 0x85, 0xff, //0x000011eb testq %r15, %r15 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000011ee movabsq $4294977024, %r11 + 0x0f, 0x84, 0x98, 0x28, 0x00, 0x00, //0x000011f8 je LBB0_626 + 0x49, 0x29, 0xf9, //0x000011fe subq %rdi, %r9 + 0x49, 0x8d, 0x49, 0xff, //0x00001201 leaq $-1(%r9), %rcx + 0x49, 0x39, 0xc8, //0x00001205 cmpq %rcx, %r8 + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00001208 je LBB0_226 + 0x49, 0x39, 0xca, //0x0000120e cmpq %rcx, %r10 + 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x00001211 je LBB0_226 + 0x49, 0x39, 0xcf, //0x00001217 cmpq %rcx, %r15 + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x0000121a je LBB0_226 + 0x4d, 0x85, 0xd2, //0x00001220 testq %r10, %r10 + 0x0f, 0x8e, 0x7f, 0x05, 0x00, 0x00, //0x00001223 jle LBB0_307 + 0x49, 0x8d, 0x4a, 0xff, //0x00001229 leaq $-1(%r10), %rcx + 0x49, 0x39, 0xcf, //0x0000122d cmpq %rcx, %r15 + 0x0f, 0x84, 0x72, 0x05, 0x00, 0x00, //0x00001230 je LBB0_307 + 0x49, 0xf7, 0xd2, //0x00001236 notq %r10 + 0x4d, 0x89, 0xd5, //0x00001239 movq %r10, %r13 + 0xe9, 0xb3, 0x14, 0x00, 0x00, //0x0000123c jmp LBB0_451 + //0x00001241 LBB0_226 + 0x49, 0xf7, 0xd9, //0x00001241 negq %r9 + 0x4d, 0x89, 0xcd, //0x00001244 movq %r9, %r13 + 0xe9, 0xa8, 0x14, 0x00, 0x00, //0x00001247 jmp LBB0_451 + //0x0000124c LBB0_227 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000124c movl $64, %edx + 0x4c, 0x8b, 0x75, 0xd0, //0x00001251 movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001255 movabsq $4294977024, %r11 + 0x48, 0x39, 0xca, //0x0000125f cmpq %rcx, %rdx + 0x0f, 0x82, 0x1f, 0x2a, 0x00, 0x00, //0x00001262 jb LBB0_187 + //0x00001268 LBB0_228 + 0x48, 0x01, 0xc8, //0x00001268 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000126b addq $1, %rax + //0x0000126f LBB0_229 + 0x48, 0x85, 0xc0, //0x0000126f testq %rax, %rax + 0x0f, 0x88, 0xf9, 0x27, 0x00, 0x00, //0x00001272 js LBB0_623 + 0x49, 0x89, 0x06, //0x00001278 movq %rax, (%r14) + 0x48, 0x8b, 0x45, 0xc0, //0x0000127b movq $-64(%rbp), %rax + //0x0000127f LBB0_231 + 0x48, 0x85, 0xc0, //0x0000127f testq %rax, %rax + 0x0f, 0x8f, 0x48, 0xef, 0xff, 0xff, //0x00001282 jg LBB0_4 + 0xe9, 0xdb, 0x27, 0x00, 0x00, //0x00001288 jmp LBB0_232 + //0x0000128d LBB0_233 + 0x49, 0x8b, 0x0e, //0x0000128d movq (%r14), %rcx + 0x48, 0x8b, 0x55, 0xa8, //0x00001290 movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x00001294 movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfc, //0x00001298 leaq $-4(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x0000129c cmpq %rsi, %rcx + 0x0f, 0x87, 0x35, 0x28, 0x00, 0x00, //0x0000129f ja LBB0_629 + 0x41, 0x8b, 0x14, 0x0c, //0x000012a5 movl (%r12,%rcx), %edx + 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x000012a9 cmpl $1702063201, %edx + 0x0f, 0x85, 0xfb, 0x28, 0x00, 0x00, //0x000012af jne LBB0_640 + 0x48, 0x8d, 0x41, 0x04, //0x000012b5 leaq $4(%rcx), %rax + 0x49, 0x89, 0x06, //0x000012b9 movq %rax, (%r14) + 0x48, 0x85, 0xc9, //0x000012bc testq %rcx, %rcx + 0x0f, 0x8f, 0x0b, 0xef, 0xff, 0xff, //0x000012bf jg LBB0_4 + 0xe9, 0x3b, 0x29, 0x00, 0x00, //0x000012c5 jmp LBB0_236 + //0x000012ca LBB0_237 + 0x48, 0x8b, 0x4d, 0x98, //0x000012ca movq $-104(%rbp), %rcx + 0xf6, 0xc1, 0x40, //0x000012ce testb $64, %cl + 0x0f, 0x85, 0x5b, 0x05, 0x00, 0x00, //0x000012d1 jne LBB0_317 + 0x49, 0x8b, 0x16, //0x000012d7 movq (%r14), %rdx + 0x48, 0x8b, 0x45, 0xa8, //0x000012da movq $-88(%rbp), %rax + 0x48, 0x8b, 0x40, 0x08, //0x000012de movq $8(%rax), %rax + 0xf6, 0xc1, 0x20, //0x000012e2 testb $32, %cl + 0x48, 0x89, 0x45, 0xa0, //0x000012e5 movq %rax, $-96(%rbp) + 0x48, 0x89, 0x55, 0xc0, //0x000012e9 movq %rdx, $-64(%rbp) + 0x0f, 0x85, 0xae, 0x10, 0x00, 0x00, //0x000012ed jne LBB0_400 + 0x49, 0x89, 0xc1, //0x000012f3 movq %rax, %r9 + 0x49, 0x29, 0xd1, //0x000012f6 subq %rdx, %r9 + 0x0f, 0x84, 0xb1, 0x29, 0x00, 0x00, //0x000012f9 je LBB0_660 + 0x49, 0x83, 0xf9, 0x40, //0x000012ff cmpq $64, %r9 + 0x0f, 0x82, 0xb1, 0x1d, 0x00, 0x00, //0x00001303 jb LBB0_518 + 0x49, 0x89, 0xd6, //0x00001309 movq %rdx, %r14 + 0x49, 0xf7, 0xd6, //0x0000130c notq %r14 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000130f movq $-1, $-56(%rbp) + 0x48, 0x89, 0xd0, //0x00001317 movq %rdx, %rax + 0x45, 0x31, 0xc0, //0x0000131a xorl %r8d, %r8d + 0x90, 0x90, 0x90, //0x0000131d .p2align 4, 0x90 + //0x00001320 LBB0_242 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00001320 movdqu (%r12,%rax), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00001326 movdqu $16(%r12,%rax), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000132d movdqu $32(%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00001334 movdqu $48(%r12,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xfb, //0x0000133b movdqa %xmm3, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000133f pcmpeqb %xmm0, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00001343 pmovmskb %xmm7, %r10d + 0x66, 0x0f, 0x6f, 0xfc, //0x00001348 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000134c pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xcf, //0x00001350 pmovmskb %xmm7, %ecx + 0x66, 0x0f, 0x6f, 0xfd, //0x00001354 movdqa %xmm5, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00001358 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x0000135c pmovmskb %xmm7, %esi + 0x66, 0x0f, 0x6f, 0xfe, //0x00001360 movdqa %xmm6, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00001364 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xd7, //0x00001368 pmovmskb %xmm7, %edx + 0x66, 0x0f, 0x74, 0xd9, //0x0000136c pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00001370 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x74, 0xe1, //0x00001375 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xdc, //0x00001379 pmovmskb %xmm4, %ebx + 0x66, 0x0f, 0x74, 0xe9, //0x0000137d pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00001381 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x74, 0xf1, //0x00001385 pcmpeqb %xmm1, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00001389 pmovmskb %xmm6, %r15d + 0x48, 0xc1, 0xe2, 0x30, //0x0000138e shlq $48, %rdx + 0x48, 0xc1, 0xe6, 0x20, //0x00001392 shlq $32, %rsi + 0x48, 0x09, 0xd6, //0x00001396 orq %rdx, %rsi + 0x48, 0xc1, 0xe1, 0x10, //0x00001399 shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x0000139d orq %rsi, %rcx + 0x49, 0x09, 0xca, //0x000013a0 orq %rcx, %r10 + 0x49, 0xc1, 0xe7, 0x30, //0x000013a3 shlq $48, %r15 + 0x48, 0xc1, 0xe7, 0x20, //0x000013a7 shlq $32, %rdi + 0x4c, 0x09, 0xff, //0x000013ab orq %r15, %rdi + 0x48, 0xc1, 0xe3, 0x10, //0x000013ae shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x000013b2 orq %rdi, %rbx + 0x49, 0x09, 0xdb, //0x000013b5 orq %rbx, %r11 + 0x0f, 0x85, 0x3a, 0x00, 0x00, 0x00, //0x000013b8 jne LBB0_251 + 0x4d, 0x85, 0xc0, //0x000013be testq %r8, %r8 + 0x0f, 0x85, 0x47, 0x00, 0x00, 0x00, //0x000013c1 jne LBB0_253 + 0x45, 0x31, 0xc0, //0x000013c7 xorl %r8d, %r8d + 0x4d, 0x85, 0xd2, //0x000013ca testq %r10, %r10 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000013cd movabsq $4294977024, %r11 + 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, //0x000013d7 jne LBB0_254 + //0x000013dd LBB0_245 + 0x49, 0x83, 0xc1, 0xc0, //0x000013dd addq $-64, %r9 + 0x49, 0x83, 0xc6, 0xc0, //0x000013e1 addq $-64, %r14 + 0x48, 0x83, 0xc0, 0x40, //0x000013e5 addq $64, %rax + 0x49, 0x83, 0xf9, 0x3f, //0x000013e9 cmpq $63, %r9 + 0x0f, 0x87, 0x2d, 0xff, 0xff, 0xff, //0x000013ed ja LBB0_242 + 0xe9, 0x90, 0x18, 0x00, 0x00, //0x000013f3 jmp LBB0_246 + //0x000013f8 LBB0_251 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000013f8 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000013fd jne LBB0_253 + 0x49, 0x0f, 0xbc, 0xcb, //0x00001403 bsfq %r11, %rcx + 0x48, 0x01, 0xc1, //0x00001407 addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x0000140a movq %rcx, $-56(%rbp) + //0x0000140e LBB0_253 + 0x4c, 0x89, 0xc1, //0x0000140e movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00001411 notq %rcx + 0x4c, 0x21, 0xd9, //0x00001414 andq %r11, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x00001417 leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xc2, //0x0000141b orq %r8, %rdx + 0x48, 0x89, 0xd6, //0x0000141e movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00001421 notq %rsi + 0x4c, 0x21, 0xde, //0x00001424 andq %r11, %rsi + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001427 movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfe, //0x00001431 andq %rdi, %rsi + 0x45, 0x31, 0xc0, //0x00001434 xorl %r8d, %r8d + 0x48, 0x01, 0xce, //0x00001437 addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc0, //0x0000143a setb %r8b + 0x48, 0x01, 0xf6, //0x0000143e addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001441 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x0000144b xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x0000144e andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00001451 notq %rsi + 0x49, 0x21, 0xf2, //0x00001454 andq %rsi, %r10 + 0x4d, 0x85, 0xd2, //0x00001457 testq %r10, %r10 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000145a movabsq $4294977024, %r11 + 0x0f, 0x84, 0x73, 0xff, 0xff, 0xff, //0x00001464 je LBB0_245 + //0x0000146a LBB0_254 + 0x49, 0x0f, 0xbc, 0xc2, //0x0000146a bsfq %r10, %rax + 0x4c, 0x29, 0xf0, //0x0000146e subq %r14, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00001471 movq $-48(%rbp), %r14 + 0x48, 0x8b, 0x5d, 0xc0, //0x00001475 movq $-64(%rbp), %rbx + 0xe9, 0xe5, 0x11, 0x00, 0x00, //0x00001479 jmp LBB0_441 + //0x0000147e LBB0_255 + 0x48, 0x8b, 0x45, 0xa8, //0x0000147e movq $-88(%rbp), %rax + 0x4c, 0x8b, 0x48, 0x08, //0x00001482 movq $8(%rax), %r9 + 0x49, 0x8b, 0x06, //0x00001486 movq (%r14), %rax + 0xf6, 0x45, 0x98, 0x40, //0x00001489 testb $64, $-104(%rbp) + 0x0f, 0x85, 0xae, 0x04, 0x00, 0x00, //0x0000148d jne LBB0_327 + 0x49, 0x29, 0xc1, //0x00001493 subq %rax, %r9 + 0x0f, 0x84, 0x92, 0x27, 0x00, 0x00, //0x00001496 je LBB0_647 + 0x49, 0x8d, 0x0c, 0x04, //0x0000149c leaq (%r12,%rax), %rcx + 0x48, 0x89, 0x4d, 0xb8, //0x000014a0 movq %rcx, $-72(%rbp) + 0x80, 0x39, 0x30, //0x000014a4 cmpb $48, (%rcx) + 0x0f, 0x85, 0x39, 0x00, 0x00, 0x00, //0x000014a7 jne LBB0_261 + 0xbb, 0x01, 0x00, 0x00, 0x00, //0x000014ad movl $1, %ebx + 0x49, 0x83, 0xf9, 0x01, //0x000014b2 cmpq $1, %r9 + 0x0f, 0x84, 0xa6, 0x17, 0x00, 0x00, //0x000014b6 je LBB0_487 + 0x48, 0x8b, 0x4d, 0xb8, //0x000014bc movq $-72(%rbp), %rcx + 0x8a, 0x49, 0x01, //0x000014c0 movb $1(%rcx), %cl + 0x80, 0xc1, 0xd2, //0x000014c3 addb $-46, %cl + 0x80, 0xf9, 0x37, //0x000014c6 cmpb $55, %cl + 0x0f, 0x87, 0x93, 0x17, 0x00, 0x00, //0x000014c9 ja LBB0_487 + 0x0f, 0xb6, 0xc9, //0x000014cf movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x000014d2 movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x000014dc btq %rcx, %rdx + 0x0f, 0x83, 0x7c, 0x17, 0x00, 0x00, //0x000014e0 jae LBB0_487 + //0x000014e6 LBB0_261 + 0x49, 0x83, 0xf9, 0x10, //0x000014e6 cmpq $16, %r9 + 0x0f, 0x82, 0xa9, 0x1b, 0x00, 0x00, //0x000014ea jb LBB0_517 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000014f0 movq $-1, %r13 + 0x31, 0xdb, //0x000014f7 xorl %ebx, %ebx + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000014f9 movq $-1, %r8 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00001500 movq $-1, %r14 + 0x4d, 0x89, 0xca, //0x00001507 movq %r9, %r10 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000150a .p2align 4, 0x90 + //0x00001510 LBB0_263 + 0x48, 0x8b, 0x4d, 0xb8, //0x00001510 movq $-72(%rbp), %rcx + 0xf3, 0x0f, 0x6f, 0x1c, 0x19, //0x00001514 movdqu (%rcx,%rbx), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00001519 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x64, 0x25, 0x7b, 0xeb, 0xff, 0xff, //0x0000151d pcmpgtb $-5253(%rip), %xmm4 /* LCPI0_10+0(%rip) */ + 0x66, 0x41, 0x0f, 0x6f, 0xef, //0x00001525 movdqa %xmm15, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x0000152a pcmpgtb %xmm3, %xmm5 + 0x66, 0x0f, 0xdb, 0xec, //0x0000152e pand %xmm4, %xmm5 + 0x66, 0x0f, 0x6f, 0xe3, //0x00001532 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0x25, 0x82, 0xeb, 0xff, 0xff, //0x00001536 pcmpeqb $-5246(%rip), %xmm4 /* LCPI0_12+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xf3, //0x0000153e movdqa %xmm3, %xmm6 + 0x66, 0x0f, 0x74, 0x35, 0x86, 0xeb, 0xff, 0xff, //0x00001542 pcmpeqb $-5242(%rip), %xmm6 /* LCPI0_13+0(%rip) */ + 0x66, 0x0f, 0xeb, 0xf4, //0x0000154a por %xmm4, %xmm6 + 0x66, 0x0f, 0x6f, 0xe3, //0x0000154e movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xe1, //0x00001552 pand %xmm9, %xmm4 + 0x66, 0x0f, 0x74, 0x1d, 0x81, 0xeb, 0xff, 0xff, //0x00001557 pcmpeqb $-5247(%rip), %xmm3 /* LCPI0_14+0(%rip) */ + 0x66, 0x41, 0x0f, 0x74, 0xe3, //0x0000155f pcmpeqb %xmm11, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xfc, //0x00001564 pmovmskb %xmm4, %r15d + 0x66, 0x0f, 0xeb, 0xe3, //0x00001569 por %xmm3, %xmm4 + 0x66, 0x0f, 0xeb, 0xee, //0x0000156d por %xmm6, %xmm5 + 0x66, 0x0f, 0xeb, 0xec, //0x00001571 por %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xd3, //0x00001575 pmovmskb %xmm3, %edx + 0x66, 0x44, 0x0f, 0xd7, 0xde, //0x00001579 pmovmskb %xmm6, %r11d + 0x66, 0x0f, 0xd7, 0xcd, //0x0000157e pmovmskb %xmm5, %ecx + 0xf7, 0xd1, //0x00001582 notl %ecx + 0x0f, 0xbc, 0xc9, //0x00001584 bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x00001587 cmpl $16, %ecx + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x0000158a je LBB0_265 + 0xbe, 0xff, 0xff, 0xff, 0xff, //0x00001590 movl $-1, %esi + 0xd3, 0xe6, //0x00001595 shll %cl, %esi + 0xf7, 0xd6, //0x00001597 notl %esi + 0x21, 0xf2, //0x00001599 andl %esi, %edx + 0x41, 0x21, 0xf7, //0x0000159b andl %esi, %r15d + 0x44, 0x21, 0xde, //0x0000159e andl %r11d, %esi + 0x41, 0x89, 0xf3, //0x000015a1 movl %esi, %r11d + //0x000015a4 LBB0_265 + 0x8d, 0x72, 0xff, //0x000015a4 leal $-1(%rdx), %esi + 0x21, 0xd6, //0x000015a7 andl %edx, %esi + 0x0f, 0x85, 0x79, 0x16, 0x00, 0x00, //0x000015a9 jne LBB0_481 + 0x41, 0x8d, 0x77, 0xff, //0x000015af leal $-1(%r15), %esi + 0x44, 0x21, 0xfe, //0x000015b3 andl %r15d, %esi + 0x0f, 0x85, 0x6c, 0x16, 0x00, 0x00, //0x000015b6 jne LBB0_481 + 0x41, 0x8d, 0x73, 0xff, //0x000015bc leal $-1(%r11), %esi + 0x44, 0x21, 0xde, //0x000015c0 andl %r11d, %esi + 0x0f, 0x85, 0x5f, 0x16, 0x00, 0x00, //0x000015c3 jne LBB0_481 + 0x85, 0xd2, //0x000015c9 testl %edx, %edx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000015cb je LBB0_271 + 0x0f, 0xbc, 0xd2, //0x000015d1 bsfl %edx, %edx + 0x49, 0x83, 0xfe, 0xff, //0x000015d4 cmpq $-1, %r14 + 0x0f, 0x85, 0x73, 0x16, 0x00, 0x00, //0x000015d8 jne LBB0_484 + 0x48, 0x01, 0xda, //0x000015de addq %rbx, %rdx + 0x49, 0x89, 0xd6, //0x000015e1 movq %rdx, %r14 + //0x000015e4 LBB0_271 + 0x45, 0x85, 0xff, //0x000015e4 testl %r15d, %r15d + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x000015e7 je LBB0_274 + 0x41, 0x0f, 0xbc, 0xd7, //0x000015ed bsfl %r15d, %edx + 0x49, 0x83, 0xf8, 0xff, //0x000015f1 cmpq $-1, %r8 + 0x0f, 0x85, 0x56, 0x16, 0x00, 0x00, //0x000015f5 jne LBB0_484 + 0x48, 0x01, 0xda, //0x000015fb addq %rbx, %rdx + 0x49, 0x89, 0xd0, //0x000015fe movq %rdx, %r8 + //0x00001601 LBB0_274 + 0x45, 0x85, 0xdb, //0x00001601 testl %r11d, %r11d + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00001604 je LBB0_277 + 0x41, 0x0f, 0xbc, 0xd3, //0x0000160a bsfl %r11d, %edx + 0x49, 0x83, 0xfd, 0xff, //0x0000160e cmpq $-1, %r13 + 0x0f, 0x85, 0x39, 0x16, 0x00, 0x00, //0x00001612 jne LBB0_484 + 0x48, 0x01, 0xda, //0x00001618 addq %rbx, %rdx + 0x49, 0x89, 0xd5, //0x0000161b movq %rdx, %r13 + //0x0000161e LBB0_277 + 0x83, 0xf9, 0x10, //0x0000161e cmpl $16, %ecx + 0x0f, 0x85, 0x93, 0x0f, 0x00, 0x00, //0x00001621 jne LBB0_426 + 0x49, 0x83, 0xc2, 0xf0, //0x00001627 addq $-16, %r10 + 0x48, 0x83, 0xc3, 0x10, //0x0000162b addq $16, %rbx + 0x49, 0x83, 0xfa, 0x0f, //0x0000162f cmpq $15, %r10 + 0x0f, 0x87, 0xd7, 0xfe, 0xff, 0xff, //0x00001633 ja LBB0_263 + 0x48, 0x8b, 0x4d, 0xb8, //0x00001639 movq $-72(%rbp), %rcx + 0x48, 0x8d, 0x34, 0x19, //0x0000163d leaq (%rcx,%rbx), %rsi + 0x49, 0x89, 0xf3, //0x00001641 movq %rsi, %r11 + 0x49, 0x39, 0xd9, //0x00001644 cmpq %rbx, %r9 + 0x0f, 0x84, 0x82, 0x0f, 0x00, 0x00, //0x00001647 je LBB0_428 + //0x0000164d LBB0_280 + 0x4e, 0x8d, 0x1c, 0x16, //0x0000164d leaq (%rsi,%r10), %r11 + 0x49, 0x89, 0xf1, //0x00001651 movq %rsi, %r9 + 0x4c, 0x2b, 0x4d, 0xb8, //0x00001654 subq $-72(%rbp), %r9 + 0x31, 0xdb, //0x00001658 xorl %ebx, %ebx + 0xe9, 0x1e, 0x00, 0x00, 0x00, //0x0000165a jmp LBB0_284 + //0x0000165f LBB0_281 + 0x49, 0x83, 0xfd, 0xff, //0x0000165f cmpq $-1, %r13 + 0x0f, 0x85, 0xd7, 0x15, 0x00, 0x00, //0x00001663 jne LBB0_483 + 0x4d, 0x8d, 0x2c, 0x19, //0x00001669 leaq (%r9,%rbx), %r13 + 0x90, 0x90, 0x90, //0x0000166d .p2align 4, 0x90 + //0x00001670 LBB0_283 + 0x48, 0x83, 0xc3, 0x01, //0x00001670 addq $1, %rbx + 0x49, 0x39, 0xda, //0x00001674 cmpq %rbx, %r10 + 0x0f, 0x84, 0x52, 0x0f, 0x00, 0x00, //0x00001677 je LBB0_428 + //0x0000167d LBB0_284 + 0x0f, 0xbe, 0x0c, 0x1e, //0x0000167d movsbl (%rsi,%rbx), %ecx + 0x8d, 0x51, 0xd0, //0x00001681 leal $-48(%rcx), %edx + 0x83, 0xfa, 0x0a, //0x00001684 cmpl $10, %edx + 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00001687 jb LBB0_283 + 0x8d, 0x51, 0xd5, //0x0000168d leal $-43(%rcx), %edx + 0x83, 0xfa, 0x1a, //0x00001690 cmpl $26, %edx + 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00001693 ja LBB0_289 + 0x48, 0x8d, 0x3d, 0xb4, 0x28, 0x00, 0x00, //0x00001699 leaq $10420(%rip), %rdi /* LJTI0_2+0(%rip) */ + 0x48, 0x63, 0x0c, 0x97, //0x000016a0 movslq (%rdi,%rdx,4), %rcx + 0x48, 0x01, 0xf9, //0x000016a4 addq %rdi, %rcx + 0xff, 0xe1, //0x000016a7 jmpq *%rcx + //0x000016a9 LBB0_287 + 0x49, 0x83, 0xfe, 0xff, //0x000016a9 cmpq $-1, %r14 + 0x0f, 0x85, 0x8d, 0x15, 0x00, 0x00, //0x000016ad jne LBB0_483 + 0x4d, 0x8d, 0x34, 0x19, //0x000016b3 leaq (%r9,%rbx), %r14 + 0xe9, 0xb4, 0xff, 0xff, 0xff, //0x000016b7 jmp LBB0_283 + //0x000016bc LBB0_289 + 0x83, 0xf9, 0x65, //0x000016bc cmpl $101, %ecx + 0x0f, 0x85, 0x04, 0x0f, 0x00, 0x00, //0x000016bf jne LBB0_427 + //0x000016c5 LBB0_290 + 0x49, 0x83, 0xf8, 0xff, //0x000016c5 cmpq $-1, %r8 + 0x0f, 0x85, 0x71, 0x15, 0x00, 0x00, //0x000016c9 jne LBB0_483 + 0x4d, 0x8d, 0x04, 0x19, //0x000016cf leaq (%r9,%rbx), %r8 + 0xe9, 0x98, 0xff, 0xff, 0xff, //0x000016d3 jmp LBB0_283 + //0x000016d8 LBB0_292 + 0xf6, 0x45, 0x98, 0x40, //0x000016d8 testb $64, $-104(%rbp) + 0x0f, 0x85, 0x46, 0x03, 0x00, 0x00, //0x000016dc jne LBB0_340 + 0x49, 0x8b, 0x45, 0x00, //0x000016e2 movq (%r13), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x000016e6 cmpq $4095, %rax + 0x0f, 0x8f, 0x5e, 0x23, 0x00, 0x00, //0x000016ec jg LBB0_651 + 0x48, 0x8d, 0x48, 0x01, //0x000016f2 leaq $1(%rax), %rcx + 0x49, 0x89, 0x4d, 0x00, //0x000016f6 movq %rcx, (%r13) + 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x05, 0x00, 0x00, 0x00, //0x000016fa movq $5, $8(%r13,%rax,8) + 0xe9, 0xc8, 0xea, 0xff, 0xff, //0x00001703 jmp LBB0_4 + //0x00001708 LBB0_295 + 0x49, 0x8b, 0x0e, //0x00001708 movq (%r14), %rcx + 0x48, 0x8b, 0x55, 0xa8, //0x0000170b movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x0000170f movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x00001713 leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001717 cmpq %rsi, %rcx + 0x0f, 0x87, 0xba, 0x23, 0x00, 0x00, //0x0000171a ja LBB0_629 + 0x48, 0x8d, 0x41, 0xff, //0x00001720 leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x00001724 cmpl $1819047278, $-1(%r12,%rcx) + 0x0f, 0x84, 0x60, 0x00, 0x00, 0x00, //0x0000172d je LBB0_306 + 0xe9, 0x2a, 0x24, 0x00, 0x00, //0x00001733 jmp LBB0_297 + //0x00001738 LBB0_301 + 0xf6, 0x45, 0x98, 0x40, //0x00001738 testb $64, $-104(%rbp) + 0x0f, 0x85, 0x5c, 0x07, 0x00, 0x00, //0x0000173c jne LBB0_366 + 0x49, 0x8b, 0x45, 0x00, //0x00001742 movq (%r13), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00001746 cmpq $4095, %rax + 0x0f, 0x8f, 0xfe, 0x22, 0x00, 0x00, //0x0000174c jg LBB0_651 + 0x48, 0x8d, 0x48, 0x01, //0x00001752 leaq $1(%rax), %rcx + 0x49, 0x89, 0x4d, 0x00, //0x00001756 movq %rcx, (%r13) + 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x06, 0x00, 0x00, 0x00, //0x0000175a movq $6, $8(%r13,%rax,8) + 0xe9, 0x68, 0xea, 0xff, 0xff, //0x00001763 jmp LBB0_4 + //0x00001768 LBB0_304 + 0x49, 0x8b, 0x0e, //0x00001768 movq (%r14), %rcx + 0x48, 0x8b, 0x55, 0xa8, //0x0000176b movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x0000176f movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x00001773 leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001777 cmpq %rsi, %rcx + 0x0f, 0x87, 0x5a, 0x23, 0x00, 0x00, //0x0000177a ja LBB0_629 + 0x48, 0x8d, 0x41, 0xff, //0x00001780 leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00001784 cmpl $1702195828, $-1(%r12,%rcx) + 0x0f, 0x85, 0x88, 0x23, 0x00, 0x00, //0x0000178d jne LBB0_635 + //0x00001793 LBB0_306 + 0x48, 0x8d, 0x51, 0x03, //0x00001793 leaq $3(%rcx), %rdx + 0x49, 0x89, 0x16, //0x00001797 movq %rdx, (%r14) + 0x48, 0x85, 0xc9, //0x0000179a testq %rcx, %rcx + 0x0f, 0x8f, 0x2d, 0xea, 0xff, 0xff, //0x0000179d jg LBB0_4 + 0xe9, 0x07, 0x23, 0x00, 0x00, //0x000017a3 jmp LBB0_650 + //0x000017a8 LBB0_307 + 0x4c, 0x89, 0xc1, //0x000017a8 movq %r8, %rcx + 0x4c, 0x09, 0xf9, //0x000017ab orq %r15, %rcx + 0x0f, 0x99, 0xc2, //0x000017ae setns %dl + 0x0f, 0x88, 0xce, 0x0b, 0x00, 0x00, //0x000017b1 js LBB0_399 + 0x4d, 0x39, 0xf8, //0x000017b7 cmpq %r15, %r8 + 0x0f, 0x8c, 0xc5, 0x0b, 0x00, 0x00, //0x000017ba jl LBB0_399 + 0x49, 0xf7, 0xd0, //0x000017c0 notq %r8 + 0x4d, 0x89, 0xc5, //0x000017c3 movq %r8, %r13 + 0xe9, 0x29, 0x0f, 0x00, 0x00, //0x000017c6 jmp LBB0_451 + //0x000017cb LBB0_310 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x000017cb movl $64, %edx + //0x000017d0 LBB0_311 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000017d0 movabsq $4294977024, %r11 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x5d, 0xe8, 0xff, 0xff, //0x000017da movdqu $-6051(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x48, 0x8b, 0x75, 0xc0, //0x000017e3 movq $-64(%rbp), %rsi + 0x48, 0x39, 0xca, //0x000017e7 cmpq %rcx, %rdx + 0x0f, 0x82, 0x67, 0x24, 0x00, 0x00, //0x000017ea jb LBB0_654 + 0x48, 0x01, 0xc8, //0x000017f0 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000017f3 addq $1, %rax + //0x000017f7 LBB0_313 + 0x48, 0x85, 0xc0, //0x000017f7 testq %rax, %rax + 0x0f, 0x88, 0xc1, 0x22, 0x00, 0x00, //0x000017fa js LBB0_627 + 0x49, 0x89, 0x06, //0x00001800 movq %rax, (%r14) + 0x48, 0x85, 0xf6, //0x00001803 testq %rsi, %rsi + 0x0f, 0x8e, 0xd6, 0x22, 0x00, 0x00, //0x00001806 jle LBB0_630 + //0x0000180c LBB0_315 + 0x49, 0x8b, 0x45, 0x00, //0x0000180c movq (%r13), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00001810 cmpq $4095, %rax + 0x0f, 0x8f, 0x34, 0x22, 0x00, 0x00, //0x00001816 jg LBB0_651 + 0x48, 0x8d, 0x48, 0x01, //0x0000181c leaq $1(%rax), %rcx + 0x49, 0x89, 0x4d, 0x00, //0x00001820 movq %rcx, (%r13) + 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x04, 0x00, 0x00, 0x00, //0x00001824 movq $4, $8(%r13,%rax,8) + 0xe9, 0x9e, 0xe9, 0xff, 0xff, //0x0000182d jmp LBB0_4 + //0x00001832 LBB0_317 + 0x48, 0x8b, 0x4d, 0xa8, //0x00001832 movq $-88(%rbp), %rcx + 0x4c, 0x8b, 0x49, 0x08, //0x00001836 movq $8(%rcx), %r9 + 0x4d, 0x8b, 0x06, //0x0000183a movq (%r14), %r8 + 0x4f, 0x8d, 0x14, 0x04, //0x0000183d leaq (%r12,%r8), %r10 + 0x4d, 0x29, 0xc1, //0x00001841 subq %r8, %r9 + 0x49, 0x83, 0xf9, 0x20, //0x00001844 cmpq $32, %r9 + 0x0f, 0x8c, 0xd7, 0x00, 0x00, 0x00, //0x00001848 jl LBB0_326 + 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x0000184e movl $32, %r14d + 0x31, 0xf6, //0x00001854 xorl %esi, %esi + 0x45, 0x31, 0xdb, //0x00001856 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001859 .p2align 4, 0x90 + //0x00001860 LBB0_319 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x32, //0x00001860 movdqu (%r10,%rsi), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x32, 0x10, //0x00001866 movdqu $16(%r10,%rsi), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x0000186d movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00001871 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00001875 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x6f, 0xec, //0x00001879 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x0000187d pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xdd, //0x00001881 pmovmskb %xmm5, %ebx + 0x48, 0xc1, 0xe3, 0x10, //0x00001885 shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x00001889 orq %rdi, %rbx + 0x66, 0x0f, 0x74, 0xd9, //0x0000188c pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001890 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x74, 0xe1, //0x00001894 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00001898 pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe7, 0x10, //0x0000189c shlq $16, %rdi + 0x48, 0x09, 0xcf, //0x000018a0 orq %rcx, %rdi + 0x48, 0x89, 0xf9, //0x000018a3 movq %rdi, %rcx + 0x4c, 0x09, 0xd9, //0x000018a6 orq %r11, %rcx + 0x0f, 0x84, 0x41, 0x00, 0x00, 0x00, //0x000018a9 je LBB0_321 + 0x44, 0x89, 0xd9, //0x000018af movl %r11d, %ecx + 0xf7, 0xd1, //0x000018b2 notl %ecx + 0x21, 0xf9, //0x000018b4 andl %edi, %ecx + 0x44, 0x8d, 0x3c, 0x09, //0x000018b6 leal (%rcx,%rcx), %r15d + 0x45, 0x09, 0xdf, //0x000018ba orl %r11d, %r15d + 0x44, 0x89, 0xfa, //0x000018bd movl %r15d, %edx + 0xf7, 0xd2, //0x000018c0 notl %edx + 0x21, 0xfa, //0x000018c2 andl %edi, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x000018c4 andl $-1431655766, %edx + 0x45, 0x31, 0xdb, //0x000018ca xorl %r11d, %r11d + 0x01, 0xca, //0x000018cd addl %ecx, %edx + 0x41, 0x0f, 0x92, 0xc3, //0x000018cf setb %r11b + 0x01, 0xd2, //0x000018d3 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x000018d5 xorl $1431655765, %edx + 0x44, 0x21, 0xfa, //0x000018db andl %r15d, %edx + 0xf7, 0xd2, //0x000018de notl %edx + 0x21, 0xd3, //0x000018e0 andl %edx, %ebx + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x000018e2 jmp LBB0_322 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000018e7 .p2align 4, 0x90 + //0x000018f0 LBB0_321 + 0x45, 0x31, 0xdb, //0x000018f0 xorl %r11d, %r11d + //0x000018f3 LBB0_322 + 0x48, 0x85, 0xdb, //0x000018f3 testq %rbx, %rbx + 0x0f, 0x85, 0xab, 0xe8, 0xff, 0xff, //0x000018f6 jne LBB0_1 + 0x48, 0x83, 0xc6, 0x20, //0x000018fc addq $32, %rsi + 0x4b, 0x8d, 0x0c, 0x31, //0x00001900 leaq (%r9,%r14), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00001904 addq $-32, %rcx + 0x49, 0x83, 0xc6, 0xe0, //0x00001908 addq $-32, %r14 + 0x48, 0x83, 0xf9, 0x3f, //0x0000190c cmpq $63, %rcx + 0x0f, 0x8f, 0x4a, 0xff, 0xff, 0xff, //0x00001910 jg LBB0_319 + 0x4d, 0x85, 0xdb, //0x00001916 testq %r11, %r11 + 0x0f, 0x85, 0x44, 0x1e, 0x00, 0x00, //0x00001919 jne LBB0_587 + 0x49, 0x01, 0xf2, //0x0000191f addq %rsi, %r10 + 0x49, 0x29, 0xf1, //0x00001922 subq %rsi, %r9 + //0x00001925 LBB0_326 + 0x4c, 0x8b, 0x75, 0xd0, //0x00001925 movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001929 movabsq $4294977024, %r11 + 0x4d, 0x85, 0xc9, //0x00001933 testq %r9, %r9 + 0x0f, 0x8f, 0x85, 0x1e, 0x00, 0x00, //0x00001936 jg LBB0_591 + 0xe9, 0x6e, 0x21, 0x00, 0x00, //0x0000193c jmp LBB0_650 + //0x00001941 LBB0_327 + 0x4c, 0x89, 0xca, //0x00001941 movq %r9, %rdx + 0x48, 0x29, 0xc2, //0x00001944 subq %rax, %rdx + 0x48, 0x83, 0xfa, 0x10, //0x00001947 cmpq $16, %rdx + 0x0f, 0x82, 0x36, 0x17, 0x00, 0x00, //0x0000194b jb LBB0_516 + 0x48, 0x89, 0xc7, //0x00001951 movq %rax, %rdi + 0x48, 0xf7, 0xdf, //0x00001954 negq %rdi + 0x4c, 0x8d, 0x40, 0x01, //0x00001957 leaq $1(%rax), %r8 + 0x48, 0x8d, 0x50, 0xff, //0x0000195b leaq $-1(%rax), %rdx + 0x49, 0x8d, 0x34, 0x04, //0x0000195f leaq (%r12,%rax), %rsi + 0x48, 0x83, 0xc6, 0xff, //0x00001963 addq $-1, %rsi + 0x48, 0x89, 0xc3, //0x00001967 movq %rax, %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000196a .p2align 4, 0x90 + //0x00001970 LBB0_329 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x1c, //0x00001970 movdqu (%r12,%rbx), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00001976 movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0x74, 0xe6, //0x0000197a pcmpeqb %xmm14, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xd9, //0x0000197f pand %xmm9, %xmm3 + 0x66, 0x0f, 0x74, 0xda, //0x00001984 pcmpeqb %xmm2, %xmm3 + 0x66, 0x0f, 0xeb, 0xdc, //0x00001988 por %xmm4, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x0000198c pmovmskb %xmm3, %ecx + 0x85, 0xc9, //0x00001990 testl %ecx, %ecx + 0x0f, 0x85, 0x8c, 0x09, 0x00, 0x00, //0x00001992 jne LBB0_394 + 0x48, 0x83, 0xc3, 0x10, //0x00001998 addq $16, %rbx + 0x49, 0x8d, 0x0c, 0x39, //0x0000199c leaq (%r9,%rdi), %rcx + 0x48, 0x83, 0xc1, 0xf0, //0x000019a0 addq $-16, %rcx + 0x48, 0x83, 0xc7, 0xf0, //0x000019a4 addq $-16, %rdi + 0x49, 0x83, 0xc0, 0x10, //0x000019a8 addq $16, %r8 + 0x48, 0x83, 0xc2, 0x10, //0x000019ac addq $16, %rdx + 0x48, 0x83, 0xc6, 0x10, //0x000019b0 addq $16, %rsi + 0x48, 0x83, 0xf9, 0x0f, //0x000019b4 cmpq $15, %rcx + 0x0f, 0x87, 0xb2, 0xff, 0xff, 0xff, //0x000019b8 ja LBB0_329 + 0x4c, 0x89, 0xe1, //0x000019be movq %r12, %rcx + 0x48, 0x29, 0xf9, //0x000019c1 subq %rdi, %rcx + 0x49, 0x01, 0xf9, //0x000019c4 addq %rdi, %r9 + 0x4c, 0x89, 0xca, //0x000019c7 movq %r9, %rdx + 0x48, 0x85, 0xd2, //0x000019ca testq %rdx, %rdx + 0x0f, 0x84, 0x4a, 0x00, 0x00, 0x00, //0x000019cd je LBB0_339 + //0x000019d3 LBB0_332 + 0x48, 0x8d, 0x34, 0x11, //0x000019d3 leaq (%rcx,%rdx), %rsi + //0x000019d7 LBB0_333 + 0x0f, 0xb6, 0x39, //0x000019d7 movzbl (%rcx), %edi + 0x48, 0x83, 0xff, 0x2c, //0x000019da cmpq $44, %rdi + 0x0f, 0x87, 0x14, 0x00, 0x00, 0x00, //0x000019de ja LBB0_335 + 0x48, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x000019e4 movabsq $17596481021440, %rbx + 0x48, 0x0f, 0xa3, 0xfb, //0x000019ee btq %rdi, %rbx + 0x0f, 0x82, 0x25, 0x00, 0x00, 0x00, //0x000019f2 jb LBB0_339 + //0x000019f8 LBB0_335 + 0x40, 0x80, 0xff, 0x5d, //0x000019f8 cmpb $93, %dil + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x000019fc je LBB0_339 + 0x40, 0x80, 0xff, 0x7d, //0x00001a02 cmpb $125, %dil + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00001a06 je LBB0_339 + 0x48, 0x83, 0xc1, 0x01, //0x00001a0c addq $1, %rcx + 0x48, 0x83, 0xc2, 0xff, //0x00001a10 addq $-1, %rdx + 0x0f, 0x85, 0xbd, 0xff, 0xff, 0xff, //0x00001a14 jne LBB0_333 + 0x48, 0x89, 0xf1, //0x00001a1a movq %rsi, %rcx + //0x00001a1d LBB0_339 + 0x4c, 0x29, 0xe1, //0x00001a1d subq %r12, %rcx + 0x49, 0x89, 0x0e, //0x00001a20 movq %rcx, (%r14) + 0xe9, 0x57, 0xf8, 0xff, 0xff, //0x00001a23 jmp LBB0_231 + //0x00001a28 LBB0_340 + 0x48, 0x8b, 0x55, 0xa8, //0x00001a28 movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x00001a2c movq $8(%rdx), %rdx + 0x49, 0x8b, 0x0e, //0x00001a30 movq (%r14), %rcx + 0x48, 0x29, 0xca, //0x00001a33 subq %rcx, %rdx + 0x48, 0x89, 0x4d, 0xc0, //0x00001a36 movq %rcx, $-64(%rbp) + 0x49, 0x01, 0xcc, //0x00001a3a addq %rcx, %r12 + 0x45, 0x31, 0xc0, //0x00001a3d xorl %r8d, %r8d + 0x45, 0x31, 0xc9, //0x00001a40 xorl %r9d, %r9d + 0x45, 0x31, 0xd2, //0x00001a43 xorl %r10d, %r10d + 0x45, 0x31, 0xf6, //0x00001a46 xorl %r14d, %r14d + 0x48, 0x83, 0xfa, 0x40, //0x00001a49 cmpq $64, %rdx + 0x48, 0x89, 0x55, 0xb8, //0x00001a4d movq %rdx, $-72(%rbp) + 0x0f, 0x8d, 0x4c, 0x01, 0x00, 0x00, //0x00001a51 jge LBB0_341 + //0x00001a57 LBB0_350 + 0x48, 0x85, 0xd2, //0x00001a57 testq %rdx, %rdx + 0x0f, 0x8e, 0x62, 0x22, 0x00, 0x00, //0x00001a5a jle LBB0_662 + 0x66, 0x0f, 0x6f, 0xf2, //0x00001a60 movdqa %xmm2, %xmm6 + 0x66, 0x0f, 0xef, 0xd2, //0x00001a64 pxor %xmm2, %xmm2 + 0xf3, 0x0f, 0x7f, 0x55, 0x80, //0x00001a68 movdqu %xmm2, $-128(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001a6d movdqu %xmm2, $-144(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x00001a75 movdqu %xmm2, $-160(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001a7d movdqu %xmm2, $-176(%rbp) + 0x4c, 0x89, 0xe7, //0x00001a85 movq %r12, %rdi + 0x44, 0x89, 0xe1, //0x00001a88 movl %r12d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00001a8b andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00001a91 cmpl $4033, %ecx + 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x00001a97 jb LBB0_354 + 0x48, 0x83, 0x7d, 0xb8, 0x20, //0x00001a9d cmpq $32, $-72(%rbp) + 0x0f, 0x82, 0x3b, 0x00, 0x00, 0x00, //0x00001aa2 jb LBB0_355 + 0x0f, 0x10, 0x1f, //0x00001aa8 movups (%rdi), %xmm3 + 0x0f, 0x11, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x00001aab movups %xmm3, $-176(%rbp) + 0xf3, 0x0f, 0x6f, 0x5f, 0x10, //0x00001ab2 movdqu $16(%rdi), %xmm3 + 0xf3, 0x0f, 0x7f, 0x9d, 0x60, 0xff, 0xff, 0xff, //0x00001ab7 movdqu %xmm3, $-160(%rbp) + 0x48, 0x83, 0xc7, 0x20, //0x00001abf addq $32, %rdi + 0x48, 0x8b, 0x4d, 0xb8, //0x00001ac3 movq $-72(%rbp), %rcx + 0x48, 0x8d, 0x71, 0xe0, //0x00001ac7 leaq $-32(%rcx), %rsi + 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001acb leaq $-144(%rbp), %rdx + 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00001ad2 jmp LBB0_356 + //0x00001ad7 LBB0_354 + 0x66, 0x0f, 0x6f, 0xd6, //0x00001ad7 movdqa %xmm6, %xmm2 + 0x49, 0x89, 0xfc, //0x00001adb movq %rdi, %r12 + 0xe9, 0xc0, 0x00, 0x00, 0x00, //0x00001ade jmp LBB0_341 + //0x00001ae3 LBB0_355 + 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001ae3 leaq $-176(%rbp), %rdx + 0x48, 0x8b, 0x75, 0xb8, //0x00001aea movq $-72(%rbp), %rsi + //0x00001aee LBB0_356 + 0x48, 0x83, 0xfe, 0x10, //0x00001aee cmpq $16, %rsi + 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x00001af2 jb LBB0_357 + 0xf3, 0x0f, 0x6f, 0x1f, //0x00001af8 movdqu (%rdi), %xmm3 + 0xf3, 0x0f, 0x7f, 0x1a, //0x00001afc movdqu %xmm3, (%rdx) + 0x48, 0x83, 0xc7, 0x10, //0x00001b00 addq $16, %rdi + 0x48, 0x83, 0xc2, 0x10, //0x00001b04 addq $16, %rdx + 0x48, 0x83, 0xc6, 0xf0, //0x00001b08 addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x08, //0x00001b0c cmpq $8, %rsi + 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x00001b10 jae LBB0_364 + //0x00001b16 LBB0_358 + 0x48, 0x83, 0xfe, 0x04, //0x00001b16 cmpq $4, %rsi + 0x0f, 0x8c, 0x45, 0x00, 0x00, 0x00, //0x00001b1a jl LBB0_359 + //0x00001b20 LBB0_365 + 0x8b, 0x0f, //0x00001b20 movl (%rdi), %ecx + 0x89, 0x0a, //0x00001b22 movl %ecx, (%rdx) + 0x48, 0x83, 0xc7, 0x04, //0x00001b24 addq $4, %rdi + 0x48, 0x83, 0xc2, 0x04, //0x00001b28 addq $4, %rdx + 0x48, 0x83, 0xc6, 0xfc, //0x00001b2c addq $-4, %rsi + 0x48, 0x83, 0xfe, 0x02, //0x00001b30 cmpq $2, %rsi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001b34 jae LBB0_360 + 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00001b3a jmp LBB0_361 + //0x00001b3f LBB0_357 + 0x48, 0x83, 0xfe, 0x08, //0x00001b3f cmpq $8, %rsi + 0x0f, 0x82, 0xcd, 0xff, 0xff, 0xff, //0x00001b43 jb LBB0_358 + //0x00001b49 LBB0_364 + 0x48, 0x8b, 0x0f, //0x00001b49 movq (%rdi), %rcx + 0x48, 0x89, 0x0a, //0x00001b4c movq %rcx, (%rdx) + 0x48, 0x83, 0xc7, 0x08, //0x00001b4f addq $8, %rdi + 0x48, 0x83, 0xc2, 0x08, //0x00001b53 addq $8, %rdx + 0x48, 0x83, 0xc6, 0xf8, //0x00001b57 addq $-8, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x00001b5b cmpq $4, %rsi + 0x0f, 0x8d, 0xbb, 0xff, 0xff, 0xff, //0x00001b5f jge LBB0_365 + //0x00001b65 LBB0_359 + 0x48, 0x83, 0xfe, 0x02, //0x00001b65 cmpq $2, %rsi + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00001b69 jb LBB0_361 + //0x00001b6f LBB0_360 + 0x0f, 0xb7, 0x0f, //0x00001b6f movzwl (%rdi), %ecx + 0x66, 0x89, 0x0a, //0x00001b72 movw %cx, (%rdx) + 0x48, 0x83, 0xc7, 0x02, //0x00001b75 addq $2, %rdi + 0x48, 0x83, 0xc2, 0x02, //0x00001b79 addq $2, %rdx + 0x48, 0x83, 0xc6, 0xfe, //0x00001b7d addq $-2, %rsi + //0x00001b81 LBB0_361 + 0x48, 0x89, 0xf9, //0x00001b81 movq %rdi, %rcx + 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00001b84 leaq $-176(%rbp), %r12 + 0x48, 0x85, 0xf6, //0x00001b8b testq %rsi, %rsi + 0x66, 0x0f, 0x6f, 0xd6, //0x00001b8e movdqa %xmm6, %xmm2 + 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x00001b92 je LBB0_341 + 0x8a, 0x09, //0x00001b98 movb (%rcx), %cl + 0x88, 0x0a, //0x00001b9a movb %cl, (%rdx) + 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00001b9c leaq $-176(%rbp), %r12 + //0x00001ba3 LBB0_341 + 0x66, 0x44, 0x0f, 0x6f, 0xc2, //0x00001ba3 movdqa %xmm2, %xmm8 + 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x00001ba8 movdqu (%r12), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x10, //0x00001bae movdqu $16(%r12), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x20, //0x00001bb5 movdqu $32(%r12), %xmm6 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x30, //0x00001bbc movdqu $48(%r12), %xmm5 + 0x66, 0x0f, 0x6f, 0xdc, //0x00001bc3 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001bc7 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x00001bcb pmovmskb %xmm3, %edx + 0x66, 0x0f, 0x6f, 0xdf, //0x00001bcf movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001bd3 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001bd7 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xde, //0x00001bdb movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001bdf pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001be3 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x6f, 0xdd, //0x00001be7 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001beb pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00001bef pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe7, 0x30, //0x00001bf3 shlq $48, %rdi + 0x48, 0xc1, 0xe6, 0x20, //0x00001bf7 shlq $32, %rsi + 0x48, 0x09, 0xfe, //0x00001bfb orq %rdi, %rsi + 0x48, 0xc1, 0xe1, 0x10, //0x00001bfe shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x00001c02 orq %rsi, %rcx + 0x48, 0x09, 0xca, //0x00001c05 orq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x00001c08 movq %rdx, %rcx + 0x66, 0x45, 0x0f, 0x6f, 0xee, //0x00001c0b movdqa %xmm14, %xmm13 + 0x4c, 0x09, 0xc9, //0x00001c10 orq %r9, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001c13 jne LBB0_343 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001c19 movq $-1, %rdx + 0x45, 0x31, 0xc9, //0x00001c20 xorl %r9d, %r9d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001c23 jmp LBB0_344 + //0x00001c28 LBB0_343 + 0x4c, 0x89, 0xc9, //0x00001c28 movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x00001c2b notq %rcx + 0x48, 0x21, 0xd1, //0x00001c2e andq %rdx, %rcx + 0x4c, 0x8d, 0x1c, 0x09, //0x00001c31 leaq (%rcx,%rcx), %r11 + 0x4d, 0x09, 0xcb, //0x00001c35 orq %r9, %r11 + 0x4c, 0x89, 0xdf, //0x00001c38 movq %r11, %rdi + 0x48, 0xf7, 0xd7, //0x00001c3b notq %rdi + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001c3e movabsq $-6148914691236517206, %rsi + 0x48, 0x21, 0xf2, //0x00001c48 andq %rsi, %rdx + 0x48, 0x21, 0xfa, //0x00001c4b andq %rdi, %rdx + 0x45, 0x31, 0xc9, //0x00001c4e xorl %r9d, %r9d + 0x48, 0x01, 0xca, //0x00001c51 addq %rcx, %rdx + 0x41, 0x0f, 0x92, 0xc1, //0x00001c54 setb %r9b + 0x48, 0x01, 0xd2, //0x00001c58 addq %rdx, %rdx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001c5b movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xca, //0x00001c65 xorq %rcx, %rdx + 0x4c, 0x21, 0xda, //0x00001c68 andq %r11, %rdx + 0x48, 0xf7, 0xd2, //0x00001c6b notq %rdx + //0x00001c6e LBB0_344 + 0x66, 0x0f, 0x6f, 0xdd, //0x00001c6e movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001c72 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001c76 pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x30, //0x00001c7a shlq $48, %rcx + 0x66, 0x0f, 0x6f, 0xde, //0x00001c7e movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001c82 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001c86 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x20, //0x00001c8a shlq $32, %rsi + 0x48, 0x09, 0xce, //0x00001c8e orq %rcx, %rsi + 0x66, 0x0f, 0x6f, 0xdf, //0x00001c91 movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001c95 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001c99 pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x10, //0x00001c9d shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x00001ca1 orq %rsi, %rcx + 0x66, 0x0f, 0x6f, 0xdc, //0x00001ca4 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001ca8 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001cac pmovmskb %xmm3, %esi + 0x48, 0x09, 0xce, //0x00001cb0 orq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00001cb3 andq %rdx, %rsi + 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x00001cb6 movq %rsi, %xmm3 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xda, 0x00, //0x00001cbb pclmulqdq $0, %xmm10, %xmm3 + 0x66, 0x49, 0x0f, 0x7e, 0xdb, //0x00001cc2 movq %xmm3, %r11 + 0x4d, 0x31, 0xc3, //0x00001cc7 xorq %r8, %r11 + 0x66, 0x0f, 0x6f, 0xdc, //0x00001cca movdqa %xmm4, %xmm3 + 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x89, 0xe3, 0xff, 0xff, //0x00001cce movdqu $-7287(%rip), %xmm11 /* LCPI0_6+0(%rip) */ + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001cd7 pcmpeqb %xmm11, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00001cdc pmovmskb %xmm3, %r13d + 0x66, 0x0f, 0x6f, 0xdf, //0x00001ce1 movdqa %xmm7, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001ce5 pcmpeqb %xmm11, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001cea pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xde, //0x00001cee movdqa %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001cf2 pcmpeqb %xmm11, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x00001cf7 pmovmskb %xmm3, %edx + 0x66, 0x0f, 0x6f, 0xdd, //0x00001cfb movdqa %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001cff pcmpeqb %xmm11, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001d04 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x30, //0x00001d08 shlq $48, %rsi + 0x48, 0xc1, 0xe2, 0x20, //0x00001d0c shlq $32, %rdx + 0x48, 0x09, 0xf2, //0x00001d10 orq %rsi, %rdx + 0x48, 0xc1, 0xe1, 0x10, //0x00001d13 shlq $16, %rcx + 0x48, 0x09, 0xd1, //0x00001d17 orq %rdx, %rcx + 0x49, 0x09, 0xcd, //0x00001d1a orq %rcx, %r13 + 0x4d, 0x89, 0xd8, //0x00001d1d movq %r11, %r8 + 0x49, 0xf7, 0xd0, //0x00001d20 notq %r8 + 0x4d, 0x21, 0xc5, //0x00001d23 andq %r8, %r13 + 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001d26 movdqa %xmm8, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xe0, //0x00001d2b pcmpeqb %xmm8, %xmm4 + 0x66, 0x0f, 0xd7, 0xd4, //0x00001d30 pmovmskb %xmm4, %edx + 0x66, 0x41, 0x0f, 0x74, 0xf8, //0x00001d34 pcmpeqb %xmm8, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x00001d39 pmovmskb %xmm7, %esi + 0x66, 0x41, 0x0f, 0x74, 0xf0, //0x00001d3d pcmpeqb %xmm8, %xmm6 + 0x66, 0x0f, 0xd7, 0xce, //0x00001d42 pmovmskb %xmm6, %ecx + 0x66, 0x41, 0x0f, 0x74, 0xe8, //0x00001d46 pcmpeqb %xmm8, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xfd, //0x00001d4b pmovmskb %xmm5, %r15d + 0x49, 0xc1, 0xe7, 0x30, //0x00001d50 shlq $48, %r15 + 0x48, 0xc1, 0xe1, 0x20, //0x00001d54 shlq $32, %rcx + 0x4c, 0x09, 0xf9, //0x00001d58 orq %r15, %rcx + 0x48, 0xc1, 0xe6, 0x10, //0x00001d5b shlq $16, %rsi + 0x48, 0x09, 0xce, //0x00001d5f orq %rcx, %rsi + 0x48, 0x09, 0xf2, //0x00001d62 orq %rsi, %rdx + 0x66, 0x45, 0x0f, 0x6f, 0xf5, //0x00001d65 movdqa %xmm13, %xmm14 + 0x4c, 0x21, 0xc2, //0x00001d6a andq %r8, %rdx + 0x0f, 0x84, 0xa4, 0x00, 0x00, 0x00, //0x00001d6d je LBB0_348 + 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x74, 0xe3, 0xff, 0xff, //0x00001d73 movdqu $-7308(%rip), %xmm11 /* LCPI0_15+0(%rip) */ + 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001d7c movdqa %xmm8, %xmm2 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xb6, 0xe2, 0xff, 0xff, //0x00001d81 movdqu $-7498(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001d8a movabsq $3689348814741910323, %r8 + 0xf3, 0x44, 0x0f, 0x6f, 0x05, 0xb3, 0xe2, 0xff, 0xff, //0x00001d94 movdqu $-7501(%rip), %xmm8 /* LCPI0_5+0(%rip) */ + 0x90, 0x90, 0x90, //0x00001d9d .p2align 4, 0x90 + //0x00001da0 LBB0_346 + 0x48, 0x8d, 0x7a, 0xff, //0x00001da0 leaq $-1(%rdx), %rdi + 0x48, 0x89, 0xf9, //0x00001da4 movq %rdi, %rcx + 0x4c, 0x21, 0xe9, //0x00001da7 andq %r13, %rcx + 0x48, 0x89, 0xce, //0x00001daa movq %rcx, %rsi + 0x48, 0xd1, 0xee, //0x00001dad shrq %rsi + 0x48, 0xbb, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001db0 movabsq $6148914691236517205, %rbx + 0x48, 0x21, 0xde, //0x00001dba andq %rbx, %rsi + 0x48, 0x29, 0xf1, //0x00001dbd subq %rsi, %rcx + 0x48, 0x89, 0xce, //0x00001dc0 movq %rcx, %rsi + 0x4c, 0x21, 0xc6, //0x00001dc3 andq %r8, %rsi + 0x48, 0xc1, 0xe9, 0x02, //0x00001dc6 shrq $2, %rcx + 0x4c, 0x21, 0xc1, //0x00001dca andq %r8, %rcx + 0x48, 0x01, 0xf1, //0x00001dcd addq %rsi, %rcx + 0x48, 0x89, 0xce, //0x00001dd0 movq %rcx, %rsi + 0x48, 0xc1, 0xee, 0x04, //0x00001dd3 shrq $4, %rsi + 0x48, 0x01, 0xce, //0x00001dd7 addq %rcx, %rsi + 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001dda movabsq $1085102592571150095, %rcx + 0x48, 0x21, 0xce, //0x00001de4 andq %rcx, %rsi + 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00001de7 movabsq $72340172838076673, %rcx + 0x48, 0x0f, 0xaf, 0xf1, //0x00001df1 imulq %rcx, %rsi + 0x48, 0xc1, 0xee, 0x38, //0x00001df5 shrq $56, %rsi + 0x4c, 0x01, 0xd6, //0x00001df9 addq %r10, %rsi + 0x4c, 0x39, 0xf6, //0x00001dfc cmpq %r14, %rsi + 0x0f, 0x86, 0xe4, 0x04, 0x00, 0x00, //0x00001dff jbe LBB0_392 + 0x49, 0x83, 0xc6, 0x01, //0x00001e05 addq $1, %r14 + 0x48, 0x21, 0xfa, //0x00001e09 andq %rdi, %rdx + 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x00001e0c jne LBB0_346 + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00001e12 jmp LBB0_349 + //0x00001e17 LBB0_348 + 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001e17 movdqa %xmm8, %xmm2 + 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001e1c movabsq $3689348814741910323, %r8 + //0x00001e26 LBB0_349 + 0x49, 0xc1, 0xfb, 0x3f, //0x00001e26 sarq $63, %r11 + 0x4c, 0x89, 0xe9, //0x00001e2a movq %r13, %rcx + 0x48, 0xd1, 0xe9, //0x00001e2d shrq %rcx + 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001e30 movabsq $6148914691236517205, %rdx + 0x48, 0x21, 0xd1, //0x00001e3a andq %rdx, %rcx + 0x49, 0x29, 0xcd, //0x00001e3d subq %rcx, %r13 + 0x4c, 0x89, 0xe9, //0x00001e40 movq %r13, %rcx + 0x4c, 0x21, 0xc1, //0x00001e43 andq %r8, %rcx + 0x49, 0xc1, 0xed, 0x02, //0x00001e46 shrq $2, %r13 + 0x4d, 0x21, 0xc5, //0x00001e4a andq %r8, %r13 + 0x49, 0x01, 0xcd, //0x00001e4d addq %rcx, %r13 + 0x4c, 0x89, 0xe9, //0x00001e50 movq %r13, %rcx + 0x48, 0xc1, 0xe9, 0x04, //0x00001e53 shrq $4, %rcx + 0x4c, 0x01, 0xe9, //0x00001e57 addq %r13, %rcx + 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001e5a movabsq $1085102592571150095, %rdx + 0x48, 0x21, 0xd1, //0x00001e64 andq %rdx, %rcx + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00001e67 movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xca, //0x00001e71 imulq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x00001e75 shrq $56, %rcx + 0x49, 0x01, 0xca, //0x00001e79 addq %rcx, %r10 + 0x49, 0x83, 0xc4, 0x40, //0x00001e7c addq $64, %r12 + 0x48, 0x8b, 0x55, 0xb8, //0x00001e80 movq $-72(%rbp), %rdx + 0x48, 0x83, 0xc2, 0xc0, //0x00001e84 addq $-64, %rdx + 0x4d, 0x89, 0xd8, //0x00001e88 movq %r11, %r8 + 0x48, 0x83, 0xfa, 0x40, //0x00001e8b cmpq $64, %rdx + 0x48, 0x89, 0x55, 0xb8, //0x00001e8f movq %rdx, $-72(%rbp) + 0x0f, 0x8d, 0x0a, 0xfd, 0xff, 0xff, //0x00001e93 jge LBB0_341 + 0xe9, 0xb9, 0xfb, 0xff, 0xff, //0x00001e99 jmp LBB0_350 + //0x00001e9e LBB0_366 + 0x48, 0x8b, 0x55, 0xa8, //0x00001e9e movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x00001ea2 movq $8(%rdx), %rdx + 0x49, 0x8b, 0x0e, //0x00001ea6 movq (%r14), %rcx + 0x48, 0x29, 0xca, //0x00001ea9 subq %rcx, %rdx + 0x48, 0x89, 0x4d, 0xc0, //0x00001eac movq %rcx, $-64(%rbp) + 0x49, 0x01, 0xcc, //0x00001eb0 addq %rcx, %r12 + 0x45, 0x31, 0xc0, //0x00001eb3 xorl %r8d, %r8d + 0x45, 0x31, 0xc9, //0x00001eb6 xorl %r9d, %r9d + 0x45, 0x31, 0xd2, //0x00001eb9 xorl %r10d, %r10d + 0x45, 0x31, 0xf6, //0x00001ebc xorl %r14d, %r14d + 0x48, 0x83, 0xfa, 0x40, //0x00001ebf cmpq $64, %rdx + 0x48, 0x89, 0x55, 0xb8, //0x00001ec3 movq %rdx, $-72(%rbp) + 0x0f, 0x8d, 0x5b, 0x01, 0x00, 0x00, //0x00001ec7 jge LBB0_367 + //0x00001ecd LBB0_376 + 0x48, 0x85, 0xd2, //0x00001ecd testq %rdx, %rdx + 0x0f, 0x8e, 0xec, 0x1d, 0x00, 0x00, //0x00001ed0 jle LBB0_662 + 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00001ed6 movdqa %xmm13, %xmm7 + 0x66, 0x0f, 0x6f, 0xf2, //0x00001edb movdqa %xmm2, %xmm6 + 0x66, 0x0f, 0xef, 0xd2, //0x00001edf pxor %xmm2, %xmm2 + 0xf3, 0x0f, 0x7f, 0x55, 0x80, //0x00001ee3 movdqu %xmm2, $-128(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001ee8 movdqu %xmm2, $-144(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x00001ef0 movdqu %xmm2, $-160(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001ef8 movdqu %xmm2, $-176(%rbp) + 0x4c, 0x89, 0xe7, //0x00001f00 movq %r12, %rdi + 0x44, 0x89, 0xe1, //0x00001f03 movl %r12d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00001f06 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00001f0c cmpl $4033, %ecx + 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x00001f12 jb LBB0_380 + 0x48, 0x83, 0x7d, 0xb8, 0x20, //0x00001f18 cmpq $32, $-72(%rbp) + 0x0f, 0x82, 0x40, 0x00, 0x00, 0x00, //0x00001f1d jb LBB0_381 + 0x0f, 0x10, 0x1f, //0x00001f23 movups (%rdi), %xmm3 + 0x0f, 0x11, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x00001f26 movups %xmm3, $-176(%rbp) + 0xf3, 0x0f, 0x6f, 0x5f, 0x10, //0x00001f2d movdqu $16(%rdi), %xmm3 + 0xf3, 0x0f, 0x7f, 0x9d, 0x60, 0xff, 0xff, 0xff, //0x00001f32 movdqu %xmm3, $-160(%rbp) + 0x48, 0x83, 0xc7, 0x20, //0x00001f3a addq $32, %rdi + 0x48, 0x8b, 0x4d, 0xb8, //0x00001f3e movq $-72(%rbp), %rcx + 0x48, 0x8d, 0x71, 0xe0, //0x00001f42 leaq $-32(%rcx), %rsi + 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001f46 leaq $-144(%rbp), %rdx + 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x00001f4d jmp LBB0_382 + //0x00001f52 LBB0_380 + 0x66, 0x0f, 0x6f, 0xd6, //0x00001f52 movdqa %xmm6, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x00001f56 movdqa %xmm7, %xmm13 + 0x49, 0x89, 0xfc, //0x00001f5b movq %rdi, %r12 + 0xe9, 0xc5, 0x00, 0x00, 0x00, //0x00001f5e jmp LBB0_367 + //0x00001f63 LBB0_381 + 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001f63 leaq $-176(%rbp), %rdx + 0x48, 0x8b, 0x75, 0xb8, //0x00001f6a movq $-72(%rbp), %rsi + //0x00001f6e LBB0_382 + 0x48, 0x83, 0xfe, 0x10, //0x00001f6e cmpq $16, %rsi + 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x00001f72 jb LBB0_383 + 0xf3, 0x0f, 0x6f, 0x1f, //0x00001f78 movdqu (%rdi), %xmm3 + 0xf3, 0x0f, 0x7f, 0x1a, //0x00001f7c movdqu %xmm3, (%rdx) + 0x48, 0x83, 0xc7, 0x10, //0x00001f80 addq $16, %rdi + 0x48, 0x83, 0xc2, 0x10, //0x00001f84 addq $16, %rdx + 0x48, 0x83, 0xc6, 0xf0, //0x00001f88 addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x08, //0x00001f8c cmpq $8, %rsi + 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x00001f90 jae LBB0_390 + //0x00001f96 LBB0_384 + 0x48, 0x83, 0xfe, 0x04, //0x00001f96 cmpq $4, %rsi + 0x0f, 0x8c, 0x45, 0x00, 0x00, 0x00, //0x00001f9a jl LBB0_385 + //0x00001fa0 LBB0_391 + 0x8b, 0x0f, //0x00001fa0 movl (%rdi), %ecx + 0x89, 0x0a, //0x00001fa2 movl %ecx, (%rdx) + 0x48, 0x83, 0xc7, 0x04, //0x00001fa4 addq $4, %rdi + 0x48, 0x83, 0xc2, 0x04, //0x00001fa8 addq $4, %rdx + 0x48, 0x83, 0xc6, 0xfc, //0x00001fac addq $-4, %rsi + 0x48, 0x83, 0xfe, 0x02, //0x00001fb0 cmpq $2, %rsi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001fb4 jae LBB0_386 + 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00001fba jmp LBB0_387 + //0x00001fbf LBB0_383 + 0x48, 0x83, 0xfe, 0x08, //0x00001fbf cmpq $8, %rsi + 0x0f, 0x82, 0xcd, 0xff, 0xff, 0xff, //0x00001fc3 jb LBB0_384 + //0x00001fc9 LBB0_390 + 0x48, 0x8b, 0x0f, //0x00001fc9 movq (%rdi), %rcx + 0x48, 0x89, 0x0a, //0x00001fcc movq %rcx, (%rdx) + 0x48, 0x83, 0xc7, 0x08, //0x00001fcf addq $8, %rdi + 0x48, 0x83, 0xc2, 0x08, //0x00001fd3 addq $8, %rdx + 0x48, 0x83, 0xc6, 0xf8, //0x00001fd7 addq $-8, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x00001fdb cmpq $4, %rsi + 0x0f, 0x8d, 0xbb, 0xff, 0xff, 0xff, //0x00001fdf jge LBB0_391 + //0x00001fe5 LBB0_385 + 0x48, 0x83, 0xfe, 0x02, //0x00001fe5 cmpq $2, %rsi + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00001fe9 jb LBB0_387 + //0x00001fef LBB0_386 + 0x0f, 0xb7, 0x0f, //0x00001fef movzwl (%rdi), %ecx + 0x66, 0x89, 0x0a, //0x00001ff2 movw %cx, (%rdx) + 0x48, 0x83, 0xc7, 0x02, //0x00001ff5 addq $2, %rdi + 0x48, 0x83, 0xc2, 0x02, //0x00001ff9 addq $2, %rdx + 0x48, 0x83, 0xc6, 0xfe, //0x00001ffd addq $-2, %rsi + //0x00002001 LBB0_387 + 0x48, 0x89, 0xf9, //0x00002001 movq %rdi, %rcx + 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00002004 leaq $-176(%rbp), %r12 + 0x48, 0x85, 0xf6, //0x0000200b testq %rsi, %rsi + 0x66, 0x0f, 0x6f, 0xd6, //0x0000200e movdqa %xmm6, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x00002012 movdqa %xmm7, %xmm13 + 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x00002017 je LBB0_367 + 0x8a, 0x09, //0x0000201d movb (%rcx), %cl + 0x88, 0x0a, //0x0000201f movb %cl, (%rdx) + 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00002021 leaq $-176(%rbp), %r12 + //0x00002028 LBB0_367 + 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x00002028 movdqu (%r12), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x10, //0x0000202e movdqu $16(%r12), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x20, //0x00002035 movdqu $32(%r12), %xmm6 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x30, //0x0000203c movdqu $48(%r12), %xmm5 + 0x66, 0x0f, 0x6f, 0xdc, //0x00002043 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002047 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x0000204b pmovmskb %xmm3, %edx + 0x66, 0x0f, 0x6f, 0xdf, //0x0000204f movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002053 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00002057 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xde, //0x0000205b movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000205f pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002063 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x6f, 0xdd, //0x00002067 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000206b pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x0000206f pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe7, 0x30, //0x00002073 shlq $48, %rdi + 0x48, 0xc1, 0xe6, 0x20, //0x00002077 shlq $32, %rsi + 0x48, 0x09, 0xfe, //0x0000207b orq %rdi, %rsi + 0x48, 0xc1, 0xe1, 0x10, //0x0000207e shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x00002082 orq %rsi, %rcx + 0x48, 0x09, 0xca, //0x00002085 orq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x00002088 movq %rdx, %rcx + 0x4c, 0x09, 0xc9, //0x0000208b orq %r9, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x0000208e jne LBB0_369 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002094 movq $-1, %rdx + 0x45, 0x31, 0xc9, //0x0000209b xorl %r9d, %r9d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x0000209e jmp LBB0_370 + //0x000020a3 LBB0_369 + 0x4c, 0x89, 0xc9, //0x000020a3 movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x000020a6 notq %rcx + 0x48, 0x21, 0xd1, //0x000020a9 andq %rdx, %rcx + 0x4c, 0x8d, 0x1c, 0x09, //0x000020ac leaq (%rcx,%rcx), %r11 + 0x4d, 0x09, 0xcb, //0x000020b0 orq %r9, %r11 + 0x4c, 0x89, 0xdf, //0x000020b3 movq %r11, %rdi + 0x48, 0xf7, 0xd7, //0x000020b6 notq %rdi + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000020b9 movabsq $-6148914691236517206, %rsi + 0x48, 0x21, 0xf2, //0x000020c3 andq %rsi, %rdx + 0x48, 0x21, 0xfa, //0x000020c6 andq %rdi, %rdx + 0x45, 0x31, 0xc9, //0x000020c9 xorl %r9d, %r9d + 0x48, 0x01, 0xca, //0x000020cc addq %rcx, %rdx + 0x41, 0x0f, 0x92, 0xc1, //0x000020cf setb %r9b + 0x48, 0x01, 0xd2, //0x000020d3 addq %rdx, %rdx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000020d6 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xca, //0x000020e0 xorq %rcx, %rdx + 0x4c, 0x21, 0xda, //0x000020e3 andq %r11, %rdx + 0x48, 0xf7, 0xd2, //0x000020e6 notq %rdx + //0x000020e9 LBB0_370 + 0x66, 0x0f, 0x6f, 0xdd, //0x000020e9 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x000020ed pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x000020f1 pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x30, //0x000020f5 shlq $48, %rcx + 0x66, 0x0f, 0x6f, 0xde, //0x000020f9 movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x000020fd pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002101 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x20, //0x00002105 shlq $32, %rsi + 0x48, 0x09, 0xce, //0x00002109 orq %rcx, %rsi + 0x66, 0x0f, 0x6f, 0xdf, //0x0000210c movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002110 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00002114 pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x10, //0x00002118 shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x0000211c orq %rsi, %rcx + 0x66, 0x0f, 0x6f, 0xdc, //0x0000211f movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002123 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002127 pmovmskb %xmm3, %esi + 0x48, 0x09, 0xce, //0x0000212b orq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x0000212e andq %rdx, %rsi + 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x00002131 movq %rsi, %xmm3 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xda, 0x00, //0x00002136 pclmulqdq $0, %xmm10, %xmm3 + 0x66, 0x49, 0x0f, 0x7e, 0xdb, //0x0000213d movq %xmm3, %r11 + 0x4d, 0x31, 0xc3, //0x00002142 xorq %r8, %r11 + 0x66, 0x0f, 0x6f, 0xdc, //0x00002145 movdqa %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00002149 pcmpeqb %xmm13, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x0000214e pmovmskb %xmm3, %r13d + 0x66, 0x0f, 0x6f, 0xdf, //0x00002153 movdqa %xmm7, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00002157 pcmpeqb %xmm13, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x0000215c pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xde, //0x00002160 movdqa %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00002164 pcmpeqb %xmm13, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x00002169 pmovmskb %xmm3, %edx + 0x66, 0x0f, 0x6f, 0xdd, //0x0000216d movdqa %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00002171 pcmpeqb %xmm13, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002176 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x30, //0x0000217a shlq $48, %rsi + 0x48, 0xc1, 0xe2, 0x20, //0x0000217e shlq $32, %rdx + 0x48, 0x09, 0xf2, //0x00002182 orq %rsi, %rdx + 0x48, 0xc1, 0xe1, 0x10, //0x00002185 shlq $16, %rcx + 0x48, 0x09, 0xd1, //0x00002189 orq %rdx, %rcx + 0x49, 0x09, 0xcd, //0x0000218c orq %rcx, %r13 + 0x4d, 0x89, 0xd8, //0x0000218f movq %r11, %r8 + 0x49, 0xf7, 0xd0, //0x00002192 notq %r8 + 0x4d, 0x21, 0xc5, //0x00002195 andq %r8, %r13 + 0x66, 0x41, 0x0f, 0x74, 0xe0, //0x00002198 pcmpeqb %xmm8, %xmm4 + 0x66, 0x0f, 0xd7, 0xd4, //0x0000219d pmovmskb %xmm4, %edx + 0x66, 0x41, 0x0f, 0x74, 0xf8, //0x000021a1 pcmpeqb %xmm8, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x000021a6 pmovmskb %xmm7, %esi + 0x66, 0x41, 0x0f, 0x74, 0xf0, //0x000021aa pcmpeqb %xmm8, %xmm6 + 0x66, 0x0f, 0xd7, 0xce, //0x000021af pmovmskb %xmm6, %ecx + 0x66, 0x41, 0x0f, 0x74, 0xe8, //0x000021b3 pcmpeqb %xmm8, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xfd, //0x000021b8 pmovmskb %xmm5, %r15d + 0x49, 0xc1, 0xe7, 0x30, //0x000021bd shlq $48, %r15 + 0x48, 0xc1, 0xe1, 0x20, //0x000021c1 shlq $32, %rcx + 0x4c, 0x09, 0xf9, //0x000021c5 orq %r15, %rcx + 0x48, 0xc1, 0xe6, 0x10, //0x000021c8 shlq $16, %rsi + 0x48, 0x09, 0xce, //0x000021cc orq %rcx, %rsi + 0x48, 0x09, 0xf2, //0x000021cf orq %rsi, %rdx + 0x4c, 0x21, 0xc2, //0x000021d2 andq %r8, %rdx + 0x0f, 0x84, 0x8c, 0x00, 0x00, 0x00, //0x000021d5 je LBB0_374 + 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x000021db movabsq $3689348814741910323, %r8 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000021e5 .p2align 4, 0x90 + //0x000021f0 LBB0_372 + 0x48, 0x8d, 0x7a, 0xff, //0x000021f0 leaq $-1(%rdx), %rdi + 0x48, 0x89, 0xf9, //0x000021f4 movq %rdi, %rcx + 0x4c, 0x21, 0xe9, //0x000021f7 andq %r13, %rcx + 0x48, 0x89, 0xce, //0x000021fa movq %rcx, %rsi + 0x48, 0xd1, 0xee, //0x000021fd shrq %rsi + 0x48, 0xbb, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002200 movabsq $6148914691236517205, %rbx + 0x48, 0x21, 0xde, //0x0000220a andq %rbx, %rsi + 0x48, 0x29, 0xf1, //0x0000220d subq %rsi, %rcx + 0x48, 0x89, 0xce, //0x00002210 movq %rcx, %rsi + 0x4c, 0x21, 0xc6, //0x00002213 andq %r8, %rsi + 0x48, 0xc1, 0xe9, 0x02, //0x00002216 shrq $2, %rcx + 0x4c, 0x21, 0xc1, //0x0000221a andq %r8, %rcx + 0x48, 0x01, 0xf1, //0x0000221d addq %rsi, %rcx 0x48, 0x89, 0xce, //0x00002220 movq %rcx, %rsi - 0x4c, 0x21, 0xc6, //0x00002223 andq %r8, %rsi - 0x48, 0xc1, 0xe9, 0x02, //0x00002226 shrq $2, %rcx - 0x4c, 0x21, 0xc1, //0x0000222a andq %r8, %rcx - 0x48, 0x01, 0xf1, //0x0000222d addq %rsi, %rcx - 0x48, 0x89, 0xce, //0x00002230 movq %rcx, %rsi - 0x48, 0xc1, 0xee, 0x04, //0x00002233 shrq $4, %rsi - 0x48, 0x01, 0xce, //0x00002237 addq %rcx, %rsi - 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000223a movabsq $1085102592571150095, %rcx - 0x48, 0x21, 0xce, //0x00002244 andq %rcx, %rsi - 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002247 movabsq $72340172838076673, %rcx - 0x48, 0x0f, 0xaf, 0xf1, //0x00002251 imulq %rcx, %rsi - 0x48, 0xc1, 0xee, 0x38, //0x00002255 shrq $56, %rsi - 0x4c, 0x01, 0xce, //0x00002259 addq %r9, %rsi - 0x4c, 0x39, 0xf6, //0x0000225c cmpq %r14, %rsi - 0x0f, 0x86, 0x94, 0x00, 0x00, 0x00, //0x0000225f jbe LBB0_382 - 0x49, 0x83, 0xc6, 0x01, //0x00002265 addq $1, %r14 - 0x48, 0x21, 0xfa, //0x00002269 andq %rdi, %rdx - 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x0000226c jne LBB0_362 - 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00002272 jmp LBB0_365 - //0x00002277 LBB0_364 - 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00002277 movabsq $3689348814741910323, %r8 - //0x00002281 LBB0_365 - 0x49, 0xc1, 0xfb, 0x3f, //0x00002281 sarq $63, %r11 - 0x4c, 0x89, 0xe9, //0x00002285 movq %r13, %rcx - 0x48, 0xd1, 0xe9, //0x00002288 shrq %rcx - 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000228b movabsq $6148914691236517205, %rdx - 0x48, 0x21, 0xd1, //0x00002295 andq %rdx, %rcx - 0x49, 0x29, 0xcd, //0x00002298 subq %rcx, %r13 + 0x48, 0xc1, 0xee, 0x04, //0x00002223 shrq $4, %rsi + 0x48, 0x01, 0xce, //0x00002227 addq %rcx, %rsi + 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000222a movabsq $1085102592571150095, %rcx + 0x48, 0x21, 0xce, //0x00002234 andq %rcx, %rsi + 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002237 movabsq $72340172838076673, %rcx + 0x48, 0x0f, 0xaf, 0xf1, //0x00002241 imulq %rcx, %rsi + 0x48, 0xc1, 0xee, 0x38, //0x00002245 shrq $56, %rsi + 0x4c, 0x01, 0xd6, //0x00002249 addq %r10, %rsi + 0x4c, 0x39, 0xf6, //0x0000224c cmpq %r14, %rsi + 0x0f, 0x86, 0x94, 0x00, 0x00, 0x00, //0x0000224f jbe LBB0_392 + 0x49, 0x83, 0xc6, 0x01, //0x00002255 addq $1, %r14 + 0x48, 0x21, 0xfa, //0x00002259 andq %rdi, %rdx + 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x0000225c jne LBB0_372 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00002262 jmp LBB0_375 + //0x00002267 LBB0_374 + 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00002267 movabsq $3689348814741910323, %r8 + //0x00002271 LBB0_375 + 0x49, 0xc1, 0xfb, 0x3f, //0x00002271 sarq $63, %r11 + 0x4c, 0x89, 0xe9, //0x00002275 movq %r13, %rcx + 0x48, 0xd1, 0xe9, //0x00002278 shrq %rcx + 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000227b movabsq $6148914691236517205, %rdx + 0x48, 0x21, 0xd1, //0x00002285 andq %rdx, %rcx + 0x49, 0x29, 0xcd, //0x00002288 subq %rcx, %r13 + 0x4c, 0x89, 0xe9, //0x0000228b movq %r13, %rcx + 0x4c, 0x21, 0xc1, //0x0000228e andq %r8, %rcx + 0x49, 0xc1, 0xed, 0x02, //0x00002291 shrq $2, %r13 + 0x4d, 0x21, 0xc5, //0x00002295 andq %r8, %r13 + 0x49, 0x01, 0xcd, //0x00002298 addq %rcx, %r13 0x4c, 0x89, 0xe9, //0x0000229b movq %r13, %rcx - 0x4c, 0x21, 0xc1, //0x0000229e andq %r8, %rcx - 0x49, 0xc1, 0xed, 0x02, //0x000022a1 shrq $2, %r13 - 0x4d, 0x21, 0xc5, //0x000022a5 andq %r8, %r13 - 0x49, 0x01, 0xcd, //0x000022a8 addq %rcx, %r13 - 0x4c, 0x89, 0xe9, //0x000022ab movq %r13, %rcx - 0x48, 0xc1, 0xe9, 0x04, //0x000022ae shrq $4, %rcx - 0x4c, 0x01, 0xe9, //0x000022b2 addq %r13, %rcx - 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x000022b5 movabsq $1085102592571150095, %rdx - 0x48, 0x21, 0xd1, //0x000022bf andq %rdx, %rcx - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000022c2 movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xca, //0x000022cc imulq %rdx, %rcx - 0x48, 0xc1, 0xe9, 0x38, //0x000022d0 shrq $56, %rcx - 0x49, 0x01, 0xc9, //0x000022d4 addq %rcx, %r9 - 0x49, 0x83, 0xc4, 0x40, //0x000022d7 addq $64, %r12 - 0x48, 0x8b, 0x55, 0xc0, //0x000022db movq $-64(%rbp), %rdx - 0x48, 0x83, 0xc2, 0xc0, //0x000022df addq $-64, %rdx - 0x4d, 0x89, 0xd8, //0x000022e3 movq %r11, %r8 - 0x48, 0x83, 0xfa, 0x40, //0x000022e6 cmpq $64, %rdx - 0x48, 0x89, 0x55, 0xc0, //0x000022ea movq %rdx, $-64(%rbp) - 0x0f, 0x8d, 0x4a, 0xfd, 0xff, 0xff, //0x000022ee jge LBB0_357 - 0xe9, 0xea, 0xfb, 0xff, 0xff, //0x000022f4 jmp LBB0_366 - //0x000022f9 LBB0_382 - 0x48, 0x8b, 0x75, 0xa8, //0x000022f9 movq $-88(%rbp), %rsi - 0x48, 0x8b, 0x4e, 0x08, //0x000022fd movq $8(%rsi), %rcx - 0x48, 0x0f, 0xbc, 0xd2, //0x00002301 bsfq %rdx, %rdx - 0x48, 0x2b, 0x55, 0xc0, //0x00002305 subq $-64(%rbp), %rdx - 0x48, 0x01, 0xd1, //0x00002309 addq %rdx, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x0000230c addq $1, %rcx - 0x4c, 0x8b, 0x75, 0xd0, //0x00002310 movq $-48(%rbp), %r14 - 0x49, 0x89, 0x0e, //0x00002314 movq %rcx, (%r14) - 0x48, 0x8b, 0x56, 0x08, //0x00002317 movq $8(%rsi), %rdx - 0x48, 0x39, 0xd1, //0x0000231b cmpq %rdx, %rcx - 0x48, 0x0f, 0x47, 0xca, //0x0000231e cmovaq %rdx, %rcx - 0x49, 0x89, 0x0e, //0x00002322 movq %rcx, (%r14) - 0x0f, 0x87, 0x1c, 0x17, 0x00, 0x00, //0x00002325 ja LBB0_638 - 0x48, 0x8b, 0x45, 0xb0, //0x0000232b movq $-80(%rbp), %rax - 0x48, 0x85, 0xc0, //0x0000232f testq %rax, %rax - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002332 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002336 movabsq $4294977024, %r11 - 0x0f, 0x8f, 0x7a, 0xde, 0xff, 0xff, //0x00002340 jg LBB0_4 - 0xe9, 0xad, 0x16, 0x00, 0x00, //0x00002346 jmp LBB0_606 - //0x0000234b LBB0_605 - 0x66, 0x0f, 0xbc, 0xce, //0x0000234b bsfw %si, %cx - 0x0f, 0xb7, 0xc9, //0x0000234f movzwl %cx, %ecx - 0x48, 0x29, 0xd1, //0x00002352 subq %rdx, %rcx - 0x49, 0x89, 0x0e, //0x00002355 movq %rcx, (%r14) - 0x48, 0x85, 0xc0, //0x00002358 testq %rax, %rax - 0x0f, 0x8f, 0x5f, 0xde, 0xff, 0xff, //0x0000235b jg LBB0_4 - 0xe9, 0x92, 0x16, 0x00, 0x00, //0x00002361 jmp LBB0_606 - //0x00002366 LBB0_384 - 0x49, 0x8d, 0x57, 0xff, //0x00002366 leaq $-1(%r15), %rdx - 0x49, 0x39, 0xd0, //0x0000236a cmpq %rdx, %r8 - 0x49, 0xf7, 0xd7, //0x0000236d notq %r15 - 0x4d, 0x0f, 0x45, 0xfb, //0x00002370 cmovneq %r11, %r15 - 0x84, 0xc9, //0x00002374 testb %cl, %cl - 0x4d, 0x0f, 0x44, 0xfb, //0x00002376 cmoveq %r11, %r15 - 0x4d, 0x89, 0xfd, //0x0000237a movq %r15, %r13 - 0xe9, 0x60, 0xde, 0xff, 0xff, //0x0000237d jmp LBB0_2 - //0x00002382 LBB0_385 - 0x48, 0x89, 0xc6, //0x00002382 movq %rax, %rsi - 0x48, 0x29, 0xd6, //0x00002385 subq %rdx, %rsi - 0x48, 0x89, 0xd1, //0x00002388 movq %rdx, %rcx - 0x0f, 0x84, 0xb4, 0x18, 0x00, 0x00, //0x0000238b je LBB0_644 - 0x48, 0x83, 0xfe, 0x40, //0x00002391 cmpq $64, %rsi - 0x0f, 0x82, 0xeb, 0x0c, 0x00, 0x00, //0x00002395 jb LBB0_503 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000239b movq $-1, $-56(%rbp) - 0x48, 0x89, 0xc8, //0x000023a3 movq %rcx, %rax - 0x31, 0xdb, //0x000023a6 xorl %ebx, %ebx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000023a8 .p2align 4, 0x90 - //0x000023b0 LBB0_388 - 0x48, 0x89, 0x75, 0xc0, //0x000023b0 movq %rsi, $-64(%rbp) - 0x49, 0x89, 0xd9, //0x000023b4 movq %rbx, %r9 - 0xf3, 0x41, 0x0f, 0x6f, 0x2c, 0x04, //0x000023b7 movdqu (%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x04, 0x10, //0x000023bd movdqu $16(%r12,%rax), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x20, //0x000023c4 movdqu $32(%r12,%rax), %xmm6 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x30, //0x000023cb movdqu $48(%r12,%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xdd, //0x000023d2 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000023d6 pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x000023da pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x6f, 0xdf, //0x000023df movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000023e3 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x000023e7 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xde, //0x000023eb movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000023ef pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xf3, //0x000023f3 pmovmskb %xmm3, %r14d - 0x66, 0x0f, 0x6f, 0xdc, //0x000023f8 movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000023fc pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x00002400 pmovmskb %xmm3, %r15d - 0x66, 0x0f, 0x6f, 0xdd, //0x00002405 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002409 pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x0000240d pmovmskb %xmm3, %r13d - 0x66, 0x0f, 0x6f, 0xdf, //0x00002412 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002416 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xdb, //0x0000241a pmovmskb %xmm3, %ebx - 0x66, 0x0f, 0x6f, 0xde, //0x0000241e movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002422 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002426 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdc, //0x0000242a movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000242e pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x00002432 pmovmskb %xmm3, %r10d - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002437 movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdf, //0x0000243c pcmpgtb %xmm7, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xfa, //0x00002440 pcmpgtb %xmm10, %xmm7 - 0x66, 0x0f, 0xdb, 0xfb, //0x00002445 pand %xmm3, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x00002449 pmovmskb %xmm7, %edi - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x0000244d movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xde, //0x00002452 pcmpgtb %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xf2, //0x00002456 pcmpgtb %xmm10, %xmm6 - 0x66, 0x0f, 0xdb, 0xf3, //0x0000245b pand %xmm3, %xmm6 - 0x66, 0x0f, 0xd7, 0xd6, //0x0000245f pmovmskb %xmm6, %edx - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002463 movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x00002468 pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x0000246c pcmpgtb %xmm10, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x00002471 pand %xmm3, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xc4, //0x00002475 pmovmskb %xmm4, %r8d - 0x49, 0xc1, 0xe7, 0x30, //0x0000247a shlq $48, %r15 - 0x49, 0xc1, 0xe6, 0x20, //0x0000247e shlq $32, %r14 - 0x4d, 0x09, 0xfe, //0x00002482 orq %r15, %r14 - 0x48, 0xc1, 0xe1, 0x10, //0x00002485 shlq $16, %rcx - 0x4c, 0x09, 0xf1, //0x00002489 orq %r14, %rcx - 0x49, 0x09, 0xcb, //0x0000248c orq %rcx, %r11 - 0x49, 0xc1, 0xe2, 0x30, //0x0000248f shlq $48, %r10 - 0x48, 0xc1, 0xe6, 0x20, //0x00002493 shlq $32, %rsi - 0x4c, 0x09, 0xd6, //0x00002497 orq %r10, %rsi - 0x48, 0xc1, 0xe3, 0x10, //0x0000249a shlq $16, %rbx - 0x48, 0x09, 0xf3, //0x0000249e orq %rsi, %rbx - 0x49, 0xc1, 0xe0, 0x30, //0x000024a1 shlq $48, %r8 - 0x48, 0xc1, 0xe2, 0x20, //0x000024a5 shlq $32, %rdx - 0x4c, 0x09, 0xc2, //0x000024a9 orq %r8, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x000024ac shlq $16, %rdi - 0x48, 0x09, 0xd7, //0x000024b0 orq %rdx, %rdi - 0x49, 0x09, 0xdd, //0x000024b3 orq %rbx, %r13 - 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x000024b6 jne LBB0_405 - 0x4d, 0x85, 0xc9, //0x000024bc testq %r9, %r9 - 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x000024bf jne LBB0_407 - 0x31, 0xdb, //0x000024c5 xorl %ebx, %ebx - 0x4c, 0x8b, 0x75, 0xd0, //0x000024c7 movq $-48(%rbp), %r14 - //0x000024cb LBB0_391 - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x000024cb movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdd, //0x000024d0 pcmpgtb %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xea, //0x000024d4 pcmpgtb %xmm10, %xmm5 - 0x66, 0x0f, 0xdb, 0xeb, //0x000024d9 pand %xmm3, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x000024dd pmovmskb %xmm5, %ecx - 0x48, 0x09, 0xcf, //0x000024e1 orq %rcx, %rdi - 0x4d, 0x85, 0xdb, //0x000024e4 testq %r11, %r11 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000024e7 movq $-72(%rbp), %r13 - 0x0f, 0x85, 0x93, 0x00, 0x00, 0x00, //0x000024eb jne LBB0_409 - 0x48, 0x85, 0xff, //0x000024f1 testq %rdi, %rdi - 0x0f, 0x85, 0xaf, 0x16, 0x00, 0x00, //0x000024f4 jne LBB0_632 - 0x48, 0x8b, 0x75, 0xc0, //0x000024fa movq $-64(%rbp), %rsi - 0x48, 0x83, 0xc6, 0xc0, //0x000024fe addq $-64, %rsi - 0x48, 0x83, 0xc0, 0x40, //0x00002502 addq $64, %rax - 0x48, 0x83, 0xfe, 0x3f, //0x00002506 cmpq $63, %rsi - 0x0f, 0x87, 0xa0, 0xfe, 0xff, 0xff, //0x0000250a ja LBB0_388 - 0xe9, 0xb7, 0x07, 0x00, 0x00, //0x00002510 jmp LBB0_394 - //0x00002515 LBB0_405 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00002515 cmpq $-1, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x0000251a movq $-48(%rbp), %r14 - 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x0000251e jne LBB0_408 - 0x49, 0x0f, 0xbc, 0xcd, //0x00002524 bsfq %r13, %rcx - 0x48, 0x01, 0xc1, //0x00002528 addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x0000252b movq %rcx, $-56(%rbp) - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x0000252f jmp LBB0_408 - //0x00002534 LBB0_407 - 0x4c, 0x8b, 0x75, 0xd0, //0x00002534 movq $-48(%rbp), %r14 - //0x00002538 LBB0_408 - 0x4c, 0x89, 0xc9, //0x00002538 movq %r9, %rcx - 0x48, 0xf7, 0xd1, //0x0000253b notq %rcx - 0x4c, 0x21, 0xe9, //0x0000253e andq %r13, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x00002541 leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xca, //0x00002545 orq %r9, %rdx - 0x48, 0x89, 0xd6, //0x00002548 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x0000254b notq %rsi - 0x4c, 0x21, 0xee, //0x0000254e andq %r13, %rsi - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002551 movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xde, //0x0000255b andq %rbx, %rsi - 0x31, 0xdb, //0x0000255e xorl %ebx, %ebx - 0x48, 0x01, 0xce, //0x00002560 addq %rcx, %rsi - 0x0f, 0x92, 0xc3, //0x00002563 setb %bl - 0x48, 0x01, 0xf6, //0x00002566 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002569 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00002573 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00002576 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00002579 notq %rsi - 0x49, 0x21, 0xf3, //0x0000257c andq %rsi, %r11 - 0xe9, 0x47, 0xff, 0xff, 0xff, //0x0000257f jmp LBB0_391 - //0x00002584 LBB0_409 - 0x49, 0x0f, 0xbc, 0xcb, //0x00002584 bsfq %r11, %rcx - 0x48, 0x85, 0xff, //0x00002588 testq %rdi, %rdi - 0x0f, 0x84, 0x8d, 0x00, 0x00, 0x00, //0x0000258b je LBB0_423 - 0x48, 0x0f, 0xbc, 0xd7, //0x00002591 bsfq %rdi, %rdx - 0xe9, 0x89, 0x00, 0x00, 0x00, //0x00002595 jmp LBB0_424 - //0x0000259a LBB0_411 - 0x41, 0x89, 0xcb, //0x0000259a movl %ecx, %r11d - 0x4d, 0x01, 0xc3, //0x0000259d addq %r8, %r11 - 0x49, 0x01, 0xdb, //0x000025a0 addq %rbx, %r11 - 0xe9, 0x06, 0x00, 0x00, 0x00, //0x000025a3 jmp LBB0_413 - //0x000025a8 LBB0_412 - 0x48, 0x01, 0xda, //0x000025a8 addq %rbx, %rdx - 0x49, 0x89, 0xd3, //0x000025ab movq %rdx, %r11 - //0x000025ae LBB0_413 - 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x000025ae movq $-1, %rbx - 0x4d, 0x85, 0xf6, //0x000025b5 testq %r14, %r14 - 0x0f, 0x84, 0x18, 0x16, 0x00, 0x00, //0x000025b8 je LBB0_636 - 0x4d, 0x85, 0xed, //0x000025be testq %r13, %r13 - 0x0f, 0x84, 0x0f, 0x16, 0x00, 0x00, //0x000025c1 je LBB0_636 - 0x4d, 0x85, 0xd2, //0x000025c7 testq %r10, %r10 - 0x0f, 0x84, 0x06, 0x16, 0x00, 0x00, //0x000025ca je LBB0_636 - 0x4d, 0x29, 0xc3, //0x000025d0 subq %r8, %r11 - 0x49, 0x8d, 0x4b, 0xff, //0x000025d3 leaq $-1(%r11), %rcx - 0x49, 0x39, 0xce, //0x000025d7 cmpq %rcx, %r14 - 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x000025da je LBB0_422 - 0x49, 0x39, 0xcd, //0x000025e0 cmpq %rcx, %r13 - 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x000025e3 je LBB0_422 - 0x49, 0x39, 0xca, //0x000025e9 cmpq %rcx, %r10 - 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x000025ec je LBB0_422 - 0x4d, 0x85, 0xed, //0x000025f2 testq %r13, %r13 - 0x0f, 0x8e, 0x9a, 0x00, 0x00, 0x00, //0x000025f5 jle LBB0_430 - 0x49, 0x8d, 0x4d, 0xff, //0x000025fb leaq $-1(%r13), %rcx - 0x49, 0x39, 0xca, //0x000025ff cmpq %rcx, %r10 - 0x0f, 0x84, 0x8d, 0x00, 0x00, 0x00, //0x00002602 je LBB0_430 - 0x49, 0xf7, 0xd5, //0x00002608 notq %r13 - 0x4c, 0x89, 0xeb, //0x0000260b movq %r13, %rbx - 0xe9, 0x0c, 0x06, 0x00, 0x00, //0x0000260e jmp LBB0_468 - //0x00002613 LBB0_422 - 0x49, 0xf7, 0xdb, //0x00002613 negq %r11 - 0x4c, 0x89, 0xdb, //0x00002616 movq %r11, %rbx - 0xe9, 0x01, 0x06, 0x00, 0x00, //0x00002619 jmp LBB0_468 - //0x0000261e LBB0_423 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000261e movl $64, %edx - //0x00002623 LBB0_424 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002623 movabsq $4294977024, %r11 - 0x48, 0x39, 0xca, //0x0000262d cmpq %rcx, %rdx - 0x0f, 0x82, 0xb6, 0x15, 0x00, 0x00, //0x00002630 jb LBB0_640 - 0x48, 0x01, 0xc8, //0x00002636 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002639 addq $1, %rax - //0x0000263d LBB0_426 - 0x48, 0x85, 0xc0, //0x0000263d testq %rax, %rax - 0x0f, 0x89, 0x49, 0xec, 0xff, 0xff, //0x00002640 jns LBB0_224 - 0xe9, 0x1a, 0x14, 0x00, 0x00, //0x00002646 jmp LBB0_615 - //0x0000264b LBB0_132 - 0x4d, 0x85, 0xdb, //0x0000264b testq %r11, %r11 - 0x0f, 0x85, 0x9e, 0x0a, 0x00, 0x00, //0x0000264e jne LBB0_508 - 0x49, 0x01, 0xd2, //0x00002654 addq %rdx, %r10 - 0x49, 0x29, 0xd1, //0x00002657 subq %rdx, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x0000265a movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000265e movabsq $4294977024, %r11 - //0x00002668 LBB0_134 - 0x4d, 0x85, 0xc9, //0x00002668 testq %r9, %r9 - 0x0f, 0x8f, 0xee, 0x0a, 0x00, 0x00, //0x0000266b jg LBB0_512 - 0xe9, 0xd1, 0x13, 0x00, 0x00, //0x00002671 jmp LBB0_638 - //0x00002676 LBB0_428 - 0x4c, 0x29, 0xe0, //0x00002676 subq %r12, %rax - 0x48, 0x01, 0xd0, //0x00002679 addq %rdx, %rax - 0x49, 0x89, 0x06, //0x0000267c movq %rax, (%r14) - 0x48, 0x85, 0xf6, //0x0000267f testq %rsi, %rsi - 0x0f, 0x8f, 0x38, 0xdb, 0xff, 0xff, //0x00002682 jg LBB0_4 - 0xe9, 0xcc, 0x13, 0x00, 0x00, //0x00002688 jmp LBB0_614 - //0x0000268d LBB0_429 - 0x0f, 0xbc, 0xcb, //0x0000268d bsfl %ebx, %ecx - 0xe9, 0x8a, 0x03, 0x00, 0x00, //0x00002690 jmp LBB0_437 - //0x00002695 LBB0_430 - 0x4c, 0x89, 0xf1, //0x00002695 movq %r14, %rcx - 0x4c, 0x09, 0xd1, //0x00002698 orq %r10, %rcx - 0x0f, 0x99, 0xc2, //0x0000269b setns %dl - 0x0f, 0x88, 0xd4, 0x01, 0x00, 0x00, //0x0000269e js LBB0_434 - 0x4d, 0x39, 0xd6, //0x000026a4 cmpq %r10, %r14 - 0x0f, 0x8c, 0xcb, 0x01, 0x00, 0x00, //0x000026a7 jl LBB0_434 - 0x49, 0xf7, 0xd6, //0x000026ad notq %r14 - 0x4c, 0x89, 0xf3, //0x000026b0 movq %r14, %rbx - 0xe9, 0x67, 0x05, 0x00, 0x00, //0x000026b3 jmp LBB0_468 - //0x000026b8 LBB0_433 - 0x48, 0x8b, 0x75, 0xc0, //0x000026b8 movq $-64(%rbp), %rsi - 0x49, 0x01, 0xf4, //0x000026bc addq %rsi, %r12 - 0x49, 0x29, 0xcc, //0x000026bf subq %rcx, %r12 - 0x49, 0x29, 0xfc, //0x000026c2 subq %rdi, %r12 - 0x49, 0x83, 0xc4, 0xfe, //0x000026c5 addq $-2, %r12 - 0x4d, 0x89, 0xe5, //0x000026c9 movq %r12, %r13 - 0xe9, 0x11, 0xdb, 0xff, 0xff, //0x000026cc jmp LBB0_2 - //0x000026d1 LBB0_154 - 0x4d, 0x85, 0xdb, //0x000026d1 testq %r11, %r11 - 0x0f, 0x85, 0x66, 0x0c, 0x00, 0x00, //0x000026d4 jne LBB0_535 - 0x49, 0x01, 0xd2, //0x000026da addq %rdx, %r10 - 0x49, 0x29, 0xd1, //0x000026dd subq %rdx, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x000026e0 movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000026e4 movabsq $4294977024, %r11 - //0x000026ee LBB0_156 - 0x4d, 0x85, 0xc9, //0x000026ee testq %r9, %r9 - 0x0f, 0x8f, 0xa7, 0x0c, 0x00, 0x00, //0x000026f1 jg LBB0_539 - 0xe9, 0x4b, 0x13, 0x00, 0x00, //0x000026f7 jmp LBB0_638 - //0x000026fc LBB0_50 - 0x4c, 0x01, 0xe0, //0x000026fc addq %r12, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x000026ff movq $-48(%rbp), %r14 - 0x49, 0x83, 0xf9, 0x20, //0x00002703 cmpq $32, %r9 - 0x0f, 0x82, 0x9f, 0x07, 0x00, 0x00, //0x00002707 jb LBB0_485 - //0x0000270d LBB0_51 - 0xf3, 0x0f, 0x6f, 0x18, //0x0000270d movdqu (%rax), %xmm3 - 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00002711 movdqu $16(%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x00002716 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x0000271a pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x0000271e pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x00002722 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002726 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x0000272a pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x74, 0xd9, //0x0000272e pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002732 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x74, 0xe1, //0x00002736 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xfc, //0x0000273a pmovmskb %xmm4, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x0000273e shlq $16, %rcx - 0x48, 0x09, 0xca, //0x00002742 orq %rcx, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x00002745 shlq $16, %rdi - 0x48, 0x09, 0xfe, //0x00002749 orq %rdi, %rsi - 0x0f, 0x85, 0x45, 0x0a, 0x00, 0x00, //0x0000274c jne LBB0_515 - 0x4d, 0x85, 0xc0, //0x00002752 testq %r8, %r8 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002755 movabsq $4294977024, %r11 - 0x0f, 0x85, 0x5c, 0x0a, 0x00, 0x00, //0x0000275f jne LBB0_517 - 0x45, 0x31, 0xc0, //0x00002765 xorl %r8d, %r8d - 0x48, 0x85, 0xd2, //0x00002768 testq %rdx, %rdx - 0x0f, 0x84, 0xac, 0x0a, 0x00, 0x00, //0x0000276b je LBB0_519 - //0x00002771 LBB0_54 - 0x48, 0x0f, 0xbc, 0xca, //0x00002771 bsfq %rdx, %rcx - 0x4c, 0x29, 0xe0, //0x00002775 subq %r12, %rax - 0x48, 0x01, 0xc8, //0x00002778 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x0000277b addq $1, %rax - 0xe9, 0x02, 0xeb, 0xff, 0xff, //0x0000277f jmp LBB0_223 - //0x00002784 LBB0_166 - 0x4c, 0x8b, 0x65, 0xc0, //0x00002784 movq $-64(%rbp), %r12 - 0x4c, 0x01, 0xe0, //0x00002788 addq %r12, %rax - 0x49, 0x83, 0xfe, 0x20, //0x0000278b cmpq $32, %r14 - 0x0f, 0x82, 0x41, 0x07, 0x00, 0x00, //0x0000278f jb LBB0_487 - //0x00002795 LBB0_167 - 0xf3, 0x0f, 0x6f, 0x20, //0x00002795 movdqu (%rax), %xmm4 - 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00002799 movdqu $16(%rax), %xmm3 - 0x66, 0x0f, 0x6f, 0xec, //0x0000279e movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000027a2 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x000027a6 pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x6f, 0xeb, //0x000027aa movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000027ae pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x000027b2 pmovmskb %xmm5, %edi - 0x66, 0x0f, 0x6f, 0xec, //0x000027b6 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x000027ba pcmpeqb %xmm1, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x000027be pmovmskb %xmm5, %r9d - 0x66, 0x0f, 0x6f, 0xeb, //0x000027c3 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x000027c7 pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x000027cb pmovmskb %xmm5, %edx - 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x000027cf movdqa %xmm12, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x000027d4 pcmpgtb %xmm3, %xmm5 - 0x66, 0x41, 0x0f, 0x64, 0xda, //0x000027d8 pcmpgtb %xmm10, %xmm3 - 0x66, 0x0f, 0xdb, 0xdd, //0x000027dd pand %xmm5, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x000027e1 pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe7, 0x10, //0x000027e5 shlq $16, %rdi - 0x48, 0x09, 0xf9, //0x000027e9 orq %rdi, %rcx - 0x48, 0xc1, 0xe2, 0x10, //0x000027ec shlq $16, %rdx - 0x48, 0xc1, 0xe6, 0x10, //0x000027f0 shlq $16, %rsi - 0x49, 0x09, 0xd1, //0x000027f4 orq %rdx, %r9 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000027f7 movabsq $4294977024, %r11 - 0x0f, 0x85, 0x0c, 0x0b, 0x00, 0x00, //0x00002801 jne LBB0_533 - 0x48, 0x85, 0xdb, //0x00002807 testq %rbx, %rbx - 0x4c, 0x8b, 0x6d, 0xb8, //0x0000280a movq $-72(%rbp), %r13 - 0x0f, 0x85, 0xda, 0x0b, 0x00, 0x00, //0x0000280e jne LBB0_542 - 0x31, 0xdb, //0x00002814 xorl %ebx, %ebx - //0x00002816 LBB0_170 - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002816 movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x0000281b pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x0000281f pcmpgtb %xmm10, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x00002824 pand %xmm3, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x00002828 pmovmskb %xmm4, %edx - 0x48, 0x09, 0xd6, //0x0000282c orq %rdx, %rsi - 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000282f movl $64, %edx - 0xbf, 0x40, 0x00, 0x00, 0x00, //0x00002834 movl $64, %edi - 0x48, 0x85, 0xc9, //0x00002839 testq %rcx, %rcx - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x0000283c je LBB0_172 - 0x48, 0x0f, 0xbc, 0xf9, //0x00002842 bsfq %rcx, %rdi - //0x00002846 LBB0_172 - 0x48, 0x85, 0xf6, //0x00002846 testq %rsi, %rsi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002849 je LBB0_174 - 0x48, 0x0f, 0xbc, 0xd6, //0x0000284f bsfq %rsi, %rdx - //0x00002853 LBB0_174 - 0x48, 0x85, 0xc9, //0x00002853 testq %rcx, %rcx - 0x0f, 0x84, 0xd2, 0x01, 0x00, 0x00, //0x00002856 je LBB0_438 - 0x48, 0x39, 0xfa, //0x0000285c cmpq %rdi, %rdx - 0x0f, 0x82, 0x06, 0x14, 0x00, 0x00, //0x0000285f jb LBB0_649 - 0x4c, 0x29, 0xe0, //0x00002865 subq %r12, %rax - 0x48, 0x01, 0xf8, //0x00002868 addq %rdi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x0000286b addq $1, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x0000286f movq $-48(%rbp), %r14 - 0xe9, 0x0e, 0xea, 0xff, 0xff, //0x00002873 jmp LBB0_223 - //0x00002878 LBB0_434 - 0x49, 0x8d, 0x4a, 0xff, //0x00002878 leaq $-1(%r10), %rcx - 0x49, 0x39, 0xce, //0x0000287c cmpq %rcx, %r14 - 0x49, 0xf7, 0xd2, //0x0000287f notq %r10 - 0x4d, 0x0f, 0x45, 0xd3, //0x00002882 cmovneq %r11, %r10 - 0x84, 0xd2, //0x00002886 testb %dl, %dl - 0x4d, 0x0f, 0x44, 0xd3, //0x00002888 cmoveq %r11, %r10 - 0x4c, 0x89, 0xd3, //0x0000288c movq %r10, %rbx - 0xe9, 0x8b, 0x03, 0x00, 0x00, //0x0000288f jmp LBB0_468 - //0x00002894 LBB0_435 - 0x89, 0xd1, //0x00002894 movl %edx, %ecx - 0xe9, 0x84, 0x01, 0x00, 0x00, //0x00002896 jmp LBB0_437 - //0x0000289b LBB0_73 - 0x4c, 0x01, 0xe0, //0x0000289b addq %r12, %rax - 0x49, 0x83, 0xf9, 0x20, //0x0000289e cmpq $32, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x000028a2 movq $-48(%rbp), %r14 - 0x0f, 0x82, 0xc3, 0x06, 0x00, 0x00, //0x000028a6 jb LBB0_493 - //0x000028ac LBB0_74 - 0xf3, 0x0f, 0x6f, 0x18, //0x000028ac movdqu (%rax), %xmm3 - 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x000028b0 movdqu $16(%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x000028b5 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000028b9 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x000028bd pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x000028c1 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000028c5 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x000028c9 pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x74, 0xd9, //0x000028cd pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x000028d1 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x74, 0xe1, //0x000028d5 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xfc, //0x000028d9 pmovmskb %xmm4, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x000028dd shlq $16, %rcx - 0x48, 0x09, 0xca, //0x000028e1 orq %rcx, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x000028e4 shlq $16, %rdi - 0x48, 0x09, 0xfe, //0x000028e8 orq %rdi, %rsi - 0x0f, 0x85, 0x55, 0x0b, 0x00, 0x00, //0x000028eb jne LBB0_544 - 0x4d, 0x85, 0xc0, //0x000028f1 testq %r8, %r8 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000028f4 movabsq $4294977024, %r11 - 0x0f, 0x85, 0x6c, 0x0b, 0x00, 0x00, //0x000028fe jne LBB0_546 - 0x45, 0x31, 0xc0, //0x00002904 xorl %r8d, %r8d - 0x48, 0x85, 0xd2, //0x00002907 testq %rdx, %rdx - 0x0f, 0x84, 0xbc, 0x0b, 0x00, 0x00, //0x0000290a je LBB0_548 - //0x00002910 LBB0_77 - 0x48, 0x0f, 0xbc, 0xca, //0x00002910 bsfq %rdx, %rcx - 0x4c, 0x29, 0xe0, //0x00002914 subq %r12, %rax - 0x48, 0x01, 0xc8, //0x00002917 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x0000291a addq $1, %rax - 0xe9, 0xe0, 0xee, 0xff, 0xff, //0x0000291e jmp LBB0_304 - //0x00002923 LBB0_195 - 0x4c, 0x8b, 0x45, 0xc0, //0x00002923 movq $-64(%rbp), %r8 - 0x4c, 0x01, 0xc0, //0x00002927 addq %r8, %rax - 0x49, 0x83, 0xf9, 0x20, //0x0000292a cmpq $32, %r9 - 0x0f, 0x82, 0x67, 0x06, 0x00, 0x00, //0x0000292e jb LBB0_495 - //0x00002934 LBB0_196 - 0xf3, 0x0f, 0x6f, 0x20, //0x00002934 movdqu (%rax), %xmm4 - 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00002938 movdqu $16(%rax), %xmm3 - 0x66, 0x0f, 0x6f, 0xec, //0x0000293d movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002941 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00002945 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x6f, 0xeb, //0x00002949 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x0000294d pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00002951 pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x00002955 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00002959 pcmpeqb %xmm1, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xd5, //0x0000295d pmovmskb %xmm5, %r10d - 0x66, 0x0f, 0x6f, 0xeb, //0x00002962 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00002966 pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x0000296a pmovmskb %xmm5, %ecx - 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x0000296e movdqa %xmm12, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x00002973 pcmpgtb %xmm3, %xmm5 - 0x66, 0x41, 0x0f, 0x64, 0xda, //0x00002977 pcmpgtb %xmm10, %xmm3 - 0x66, 0x0f, 0xdb, 0xdd, //0x0000297c pand %xmm5, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00002980 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe2, 0x10, //0x00002984 shlq $16, %rdx - 0x48, 0x09, 0xd6, //0x00002988 orq %rdx, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x0000298b shlq $16, %rcx - 0x48, 0xc1, 0xe7, 0x10, //0x0000298f shlq $16, %rdi - 0x49, 0x09, 0xca, //0x00002993 orq %rcx, %r10 - 0x0f, 0x85, 0x26, 0x0c, 0x00, 0x00, //0x00002996 jne LBB0_562 - 0x4d, 0x85, 0xe4, //0x0000299c testq %r12, %r12 - 0x4c, 0x8b, 0x6d, 0xb8, //0x0000299f movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000029a3 movabsq $4294977024, %r11 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x8a, 0xd6, 0xff, 0xff, //0x000029ad movdqu $-10614(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x0f, 0x85, 0x2c, 0x0c, 0x00, 0x00, //0x000029b6 jne LBB0_564 - 0x45, 0x31, 0xe4, //0x000029bc xorl %r12d, %r12d - //0x000029bf LBB0_199 - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x000029bf movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x000029c4 pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x000029c8 pcmpgtb %xmm10, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x000029cd pand %xmm3, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x000029d1 pmovmskb %xmm4, %ecx - 0x48, 0x09, 0xcf, //0x000029d5 orq %rcx, %rdi - 0xb9, 0x40, 0x00, 0x00, 0x00, //0x000029d8 movl $64, %ecx - 0xba, 0x40, 0x00, 0x00, 0x00, //0x000029dd movl $64, %edx - 0x48, 0x85, 0xf6, //0x000029e2 testq %rsi, %rsi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x000029e5 je LBB0_201 - 0x48, 0x0f, 0xbc, 0xd6, //0x000029eb bsfq %rsi, %rdx - //0x000029ef LBB0_201 - 0x48, 0x85, 0xff, //0x000029ef testq %rdi, %rdi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x000029f2 je LBB0_203 - 0x48, 0x0f, 0xbc, 0xcf, //0x000029f8 bsfq %rdi, %rcx - //0x000029fc LBB0_203 - 0x48, 0x85, 0xf6, //0x000029fc testq %rsi, %rsi - 0x0f, 0x84, 0xf6, 0x00, 0x00, 0x00, //0x000029ff je LBB0_450 - 0x48, 0x39, 0xd1, //0x00002a05 cmpq %rdx, %rcx - 0x0f, 0x82, 0x6c, 0x12, 0x00, 0x00, //0x00002a08 jb LBB0_650 - 0x4c, 0x29, 0xc0, //0x00002a0e subq %r8, %rax - 0x48, 0x01, 0xd0, //0x00002a11 addq %rdx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002a14 addq $1, %rax - 0xe9, 0xe6, 0xed, 0xff, 0xff, //0x00002a18 jmp LBB0_304 - //0x00002a1d LBB0_436 - 0x89, 0xd9, //0x00002a1d movl %ebx, %ecx - //0x00002a1f LBB0_437 - 0x49, 0xf7, 0xd5, //0x00002a1f notq %r13 - 0x49, 0x29, 0xcd, //0x00002a22 subq %rcx, %r13 - 0x48, 0x8b, 0x75, 0xc0, //0x00002a25 movq $-64(%rbp), %rsi - 0xe9, 0xb4, 0xd7, 0xff, 0xff, //0x00002a29 jmp LBB0_2 - //0x00002a2e LBB0_438 - 0x48, 0x85, 0xf6, //0x00002a2e testq %rsi, %rsi - 0x0f, 0x85, 0x34, 0x12, 0x00, 0x00, //0x00002a31 jne LBB0_649 - 0x48, 0x83, 0xc0, 0x20, //0x00002a37 addq $32, %rax - 0x49, 0x83, 0xc6, 0xe0, //0x00002a3b addq $-32, %r14 - 0x48, 0x85, 0xdb, //0x00002a3f testq %rbx, %rbx - 0x0f, 0x85, 0xa5, 0x04, 0x00, 0x00, //0x00002a42 jne LBB0_488 - //0x00002a48 LBB0_440 - 0x48, 0x8b, 0x4d, 0xc8, //0x00002a48 movq $-56(%rbp), %rcx - 0x4d, 0x85, 0xf6, //0x00002a4c testq %r14, %r14 - 0x0f, 0x84, 0xda, 0x11, 0x00, 0x00, //0x00002a4f je LBB0_490 - //0x00002a55 LBB0_441 - 0x0f, 0xb6, 0x10, //0x00002a55 movzbl (%rax), %edx - 0x80, 0xfa, 0x22, //0x00002a58 cmpb $34, %dl - 0x0f, 0x84, 0x8a, 0x00, 0x00, 0x00, //0x00002a5b je LBB0_449 - 0x80, 0xfa, 0x5c, //0x00002a61 cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002a64 je LBB0_445 - 0x80, 0xfa, 0x1f, //0x00002a6a cmpb $31, %dl - 0x0f, 0x86, 0x12, 0x12, 0x00, 0x00, //0x00002a6d jbe LBB0_651 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002a73 movq $-1, %rdx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002a7a movl $1, %esi - 0x48, 0x01, 0xf0, //0x00002a7f addq %rsi, %rax - 0x49, 0x01, 0xd6, //0x00002a82 addq %rdx, %r14 - 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002a85 jne LBB0_441 - 0xe9, 0x9f, 0x11, 0x00, 0x00, //0x00002a8b jmp LBB0_490 - //0x00002a90 LBB0_445 - 0x49, 0x83, 0xfe, 0x01, //0x00002a90 cmpq $1, %r14 - 0x0f, 0x84, 0x95, 0x11, 0x00, 0x00, //0x00002a94 je LBB0_490 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002a9a movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00002a9f movdqa %xmm2, %xmm5 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00002aa3 movq $-2, %rdx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002aaa movl $2, %esi - 0x48, 0x83, 0xf9, 0xff, //0x00002aaf cmpq $-1, %rcx - 0x0f, 0x85, 0x0a, 0x00, 0x00, 0x00, //0x00002ab3 jne LBB0_448 - 0x48, 0x89, 0xc1, //0x00002ab9 movq %rax, %rcx - 0x4c, 0x29, 0xe1, //0x00002abc subq %r12, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00002abf movq %rcx, $-56(%rbp) - //0x00002ac3 LBB0_448 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002ac3 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002ac7 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x00002ad1 movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00002ad5 movdqa %xmm6, %xmm13 - 0x48, 0x01, 0xf0, //0x00002ada addq %rsi, %rax - 0x49, 0x01, 0xd6, //0x00002add addq %rdx, %r14 - 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x00002ae0 jne LBB0_441 - 0xe9, 0x44, 0x11, 0x00, 0x00, //0x00002ae6 jmp LBB0_490 - //0x00002aeb LBB0_449 - 0x4c, 0x29, 0xe0, //0x00002aeb subq %r12, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002aee addq $1, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x00002af2 movq $-48(%rbp), %r14 - 0xe9, 0x8b, 0xe7, 0xff, 0xff, //0x00002af6 jmp LBB0_223 - //0x00002afb LBB0_450 - 0x48, 0x85, 0xff, //0x00002afb testq %rdi, %rdi - 0x0f, 0x85, 0x76, 0x11, 0x00, 0x00, //0x00002afe jne LBB0_650 - 0x48, 0x83, 0xc0, 0x20, //0x00002b04 addq $32, %rax - 0x49, 0x83, 0xc1, 0xe0, //0x00002b08 addq $-32, %r9 - 0x4d, 0x85, 0xe4, //0x00002b0c testq %r12, %r12 - 0x0f, 0x85, 0xa6, 0x04, 0x00, 0x00, //0x00002b0f jne LBB0_496 - //0x00002b15 LBB0_452 - 0x48, 0x8b, 0x4d, 0xc8, //0x00002b15 movq $-56(%rbp), %rcx - 0x4d, 0x85, 0xc9, //0x00002b19 testq %r9, %r9 - 0x0f, 0x84, 0x51, 0x0f, 0x00, 0x00, //0x00002b1c je LBB0_616 - //0x00002b22 LBB0_453 - 0x0f, 0xb6, 0x10, //0x00002b22 movzbl (%rax), %edx - 0x80, 0xfa, 0x22, //0x00002b25 cmpb $34, %dl - 0x0f, 0x84, 0xcc, 0x00, 0x00, 0x00, //0x00002b28 je LBB0_464 - 0x80, 0xfa, 0x5c, //0x00002b2e cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002b31 je LBB0_458 - 0x80, 0xfa, 0x1f, //0x00002b37 cmpb $31, %dl - 0x0f, 0x86, 0x51, 0x11, 0x00, 0x00, //0x00002b3a jbe LBB0_652 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002b40 movq $-1, %rdx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002b47 movl $1, %esi - //0x00002b4c LBB0_457 - 0x48, 0x01, 0xf0, //0x00002b4c addq %rsi, %rax - 0x49, 0x01, 0xd1, //0x00002b4f addq %rdx, %r9 - 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002b52 jne LBB0_453 - 0xe9, 0x16, 0x0f, 0x00, 0x00, //0x00002b58 jmp LBB0_616 - //0x00002b5d LBB0_458 - 0x49, 0x83, 0xf9, 0x01, //0x00002b5d cmpq $1, %r9 - 0x0f, 0x84, 0xe7, 0x10, 0x00, 0x00, //0x00002b61 je LBB0_507 - 0x66, 0x0f, 0x6f, 0xea, //0x00002b67 movdqa %xmm2, %xmm5 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00002b6b movq $-2, %rdx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002b72 movl $2, %esi - 0x48, 0x83, 0xf9, 0xff, //0x00002b77 cmpq $-1, %rcx - 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x00002b7b je LBB0_461 - 0x4c, 0x8b, 0x75, 0xd0, //0x00002b81 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002b85 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002b89 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x00002b93 movdqa %xmm5, %xmm2 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xa0, 0xd4, 0xff, 0xff, //0x00002b97 movdqu $-11104(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x4c, 0x8b, 0x45, 0xc0, //0x00002ba0 movq $-64(%rbp), %r8 - 0xe9, 0xa3, 0xff, 0xff, 0xff, //0x00002ba4 jmp LBB0_457 - //0x00002ba9 LBB0_461 - 0x48, 0x89, 0xc1, //0x00002ba9 movq %rax, %rcx - 0x4c, 0x8b, 0x45, 0xc0, //0x00002bac movq $-64(%rbp), %r8 - 0x4c, 0x29, 0xc1, //0x00002bb0 subq %r8, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00002bb3 movq %rcx, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x00002bb7 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002bbb movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002bbf movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x00002bc9 movdqa %xmm5, %xmm2 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x6a, 0xd4, 0xff, 0xff, //0x00002bcd movdqu $-11158(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0xe9, 0x71, 0xff, 0xff, 0xff, //0x00002bd6 jmp LBB0_457 - //0x00002bdb LBB0_462 - 0x4c, 0x29, 0xe1, //0x00002bdb subq %r12, %rcx - 0x48, 0x01, 0xf1, //0x00002bde addq %rsi, %rcx - 0x49, 0x89, 0x0e, //0x00002be1 movq %rcx, (%r14) - 0x48, 0x85, 0xc0, //0x00002be4 testq %rax, %rax - 0x0f, 0x8f, 0xd3, 0xd5, 0xff, 0xff, //0x00002be7 jg LBB0_4 - 0xe9, 0x06, 0x0e, 0x00, 0x00, //0x00002bed jmp LBB0_606 - //0x00002bf2 LBB0_463 - 0x0f, 0xbc, 0xce, //0x00002bf2 bsfl %esi, %ecx - 0xe9, 0x1f, 0x00, 0x00, 0x00, //0x00002bf5 jmp LBB0_467 - //0x00002bfa LBB0_464 - 0x4c, 0x29, 0xc0, //0x00002bfa subq %r8, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002bfd addq $1, %rax - 0xe9, 0xfd, 0xeb, 0xff, 0xff, //0x00002c01 jmp LBB0_304 - //0x00002c06 LBB0_465 - 0x49, 0x01, 0xc4, //0x00002c06 addq %rax, %r12 - 0x49, 0x29, 0xd4, //0x00002c09 subq %rdx, %r12 - 0x48, 0xf7, 0xd3, //0x00002c0c notq %rbx - 0x4c, 0x01, 0xe3, //0x00002c0f addq %r12, %rbx - 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00002c12 jmp LBB0_468 - //0x00002c17 LBB0_466 - 0x89, 0xd1, //0x00002c17 movl %edx, %ecx - //0x00002c19 LBB0_467 - 0x48, 0xf7, 0xd3, //0x00002c19 notq %rbx - 0x48, 0x29, 0xcb, //0x00002c1c subq %rcx, %rbx - //0x00002c1f LBB0_468 - 0x48, 0x85, 0xdb, //0x00002c1f testq %rbx, %rbx - 0x0f, 0x88, 0xae, 0x0f, 0x00, 0x00, //0x00002c22 js LBB0_636 - //0x00002c28 LBB0_469 - 0x48, 0x01, 0xc3, //0x00002c28 addq %rax, %rbx - 0x4c, 0x8b, 0x75, 0xd0, //0x00002c2b movq $-48(%rbp), %r14 - 0x49, 0x89, 0x1e, //0x00002c2f movq %rbx, (%r14) - 0x48, 0x85, 0xc0, //0x00002c32 testq %rax, %rax - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002c35 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002c39 movabsq $4294977024, %r11 - 0x0f, 0x8f, 0x77, 0xd5, 0xff, 0xff, //0x00002c43 jg LBB0_4 - 0xe9, 0xaa, 0x0d, 0x00, 0x00, //0x00002c49 jmp LBB0_606 - //0x00002c4e LBB0_241 - 0x4c, 0x01, 0xe0, //0x00002c4e addq %r12, %rax - 0x49, 0x83, 0xf9, 0x20, //0x00002c51 cmpq $32, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x00002c55 movq $-48(%rbp), %r14 - 0x0f, 0x82, 0x19, 0x04, 0x00, 0x00, //0x00002c59 jb LBB0_502 - //0x00002c5f LBB0_242 - 0xf3, 0x0f, 0x6f, 0x18, //0x00002c5f movdqu (%rax), %xmm3 - 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00002c63 movdqu $16(%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x00002c68 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002c6c pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00002c70 pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x00002c74 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002c78 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x00002c7c pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x74, 0xd9, //0x00002c80 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002c84 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x74, 0xe1, //0x00002c88 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xfc, //0x00002c8c pmovmskb %xmm4, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x00002c90 shlq $16, %rcx - 0x48, 0x09, 0xca, //0x00002c94 orq %rcx, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x00002c97 shlq $16, %rdi - 0x48, 0x09, 0xfe, //0x00002c9b orq %rdi, %rsi - 0x0f, 0x85, 0x06, 0x0b, 0x00, 0x00, //0x00002c9e jne LBB0_578 - 0x4d, 0x85, 0xc0, //0x00002ca4 testq %r8, %r8 - 0x0f, 0x85, 0x27, 0x0b, 0x00, 0x00, //0x00002ca7 jne LBB0_580 - 0x45, 0x31, 0xc0, //0x00002cad xorl %r8d, %r8d - 0x48, 0x85, 0xd2, //0x00002cb0 testq %rdx, %rdx - 0x0f, 0x84, 0x77, 0x0b, 0x00, 0x00, //0x00002cb3 je LBB0_582 - //0x00002cb9 LBB0_245 - 0x48, 0x0f, 0xbc, 0xca, //0x00002cb9 bsfq %rdx, %rcx - 0x4c, 0x29, 0xe0, //0x00002cbd subq %r12, %rax - 0x48, 0x01, 0xc8, //0x00002cc0 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002cc3 addq $1, %rax - 0xe9, 0x71, 0xf9, 0xff, 0xff, //0x00002cc7 jmp LBB0_426 - //0x00002ccc LBB0_394 - 0x4c, 0x01, 0xe0, //0x00002ccc addq %r12, %rax - 0x49, 0x89, 0xf2, //0x00002ccf movq %rsi, %r10 - 0x48, 0x83, 0xfe, 0x20, //0x00002cd2 cmpq $32, %rsi - 0x0f, 0x82, 0xc5, 0x03, 0x00, 0x00, //0x00002cd6 jb LBB0_504 - //0x00002cdc LBB0_395 - 0xf3, 0x0f, 0x6f, 0x20, //0x00002cdc movdqu (%rax), %xmm4 - 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00002ce0 movdqu $16(%rax), %xmm3 - 0x66, 0x0f, 0x6f, 0xec, //0x00002ce5 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002ce9 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00002ced pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x6f, 0xeb, //0x00002cf1 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002cf5 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x00002cf9 pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x6f, 0xec, //0x00002cfd movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00002d01 pcmpeqb %xmm1, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x00002d05 pmovmskb %xmm5, %r9d - 0x66, 0x0f, 0x6f, 0xeb, //0x00002d0a movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00002d0e pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00002d12 pmovmskb %xmm5, %edx - 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x00002d16 movdqa %xmm12, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x00002d1b pcmpgtb %xmm3, %xmm5 - 0x66, 0x41, 0x0f, 0x64, 0xda, //0x00002d1f pcmpgtb %xmm10, %xmm3 - 0x66, 0x0f, 0xdb, 0xdd, //0x00002d24 pand %xmm5, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00002d28 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x00002d2c shlq $16, %rcx - 0x48, 0x09, 0xce, //0x00002d30 orq %rcx, %rsi - 0x48, 0xc1, 0xe2, 0x10, //0x00002d33 shlq $16, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x00002d37 shlq $16, %rdi - 0x49, 0x09, 0xd1, //0x00002d3b orq %rdx, %r9 - 0x0f, 0x85, 0xd0, 0x0b, 0x00, 0x00, //0x00002d3e jne LBB0_597 - 0x48, 0x85, 0xdb, //0x00002d44 testq %rbx, %rbx - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002d47 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002d4b movabsq $4294977024, %r11 - 0x0f, 0x85, 0xe6, 0x0b, 0x00, 0x00, //0x00002d55 jne LBB0_599 - 0x31, 0xdb, //0x00002d5b xorl %ebx, %ebx - //0x00002d5d LBB0_398 - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002d5d movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x00002d62 pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00002d66 pcmpgtb %xmm10, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x00002d6b pand %xmm3, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x00002d6f pmovmskb %xmm4, %ecx - 0x48, 0x09, 0xcf, //0x00002d73 orq %rcx, %rdi - 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00002d76 movl $64, %ecx - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002d7b movl $64, %edx - 0x48, 0x85, 0xf6, //0x00002d80 testq %rsi, %rsi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002d83 je LBB0_400 - 0x48, 0x0f, 0xbc, 0xd6, //0x00002d89 bsfq %rsi, %rdx - //0x00002d8d LBB0_400 - 0x48, 0x85, 0xff, //0x00002d8d testq %rdi, %rdi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002d90 je LBB0_402 - 0x48, 0x0f, 0xbc, 0xcf, //0x00002d96 bsfq %rdi, %rcx - //0x00002d9a LBB0_402 - 0x48, 0x85, 0xf6, //0x00002d9a testq %rsi, %rsi - 0x0f, 0x84, 0x53, 0x00, 0x00, 0x00, //0x00002d9d je LBB0_473 - 0x4c, 0x29, 0xe0, //0x00002da3 subq %r12, %rax - 0x48, 0x39, 0xd1, //0x00002da6 cmpq %rdx, %rcx - 0x0f, 0x82, 0xf7, 0x0e, 0x00, 0x00, //0x00002da9 jb LBB0_654 - 0x48, 0x01, 0xd0, //0x00002daf addq %rdx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002db2 addq $1, %rax - 0xe9, 0x82, 0xf8, 0xff, 0xff, //0x00002db6 jmp LBB0_426 - //0x00002dbb LBB0_470 - 0x49, 0x8d, 0x04, 0x34, //0x00002dbb leaq (%r12,%rsi), %rax - 0x48, 0x85, 0xc9, //0x00002dbf testq %rcx, %rcx - 0x0f, 0x85, 0x4f, 0xde, 0xff, 0xff, //0x00002dc2 jne LBB0_140 - //0x00002dc8 LBB0_471 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002dc8 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00002dcd movdqa %xmm2, %xmm5 - 0xe9, 0x7f, 0xde, 0xff, 0xff, //0x00002dd1 jmp LBB0_146 - //0x00002dd6 LBB0_472 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002dd6 movq $-1, %r8 - 0x4c, 0x89, 0xf1, //0x00002ddd movq %r14, %rcx - 0x49, 0x89, 0xfa, //0x00002de0 movq %rdi, %r10 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002de3 movq $-1, %r15 - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002dea movq $-1, %r9 - 0xe9, 0x19, 0xda, 0xff, 0xff, //0x00002df1 jmp LBB0_105 - //0x00002df6 LBB0_473 - 0x48, 0x85, 0xff, //0x00002df6 testq %rdi, %rdi - 0x0f, 0x85, 0xbc, 0x0e, 0x00, 0x00, //0x00002df9 jne LBB0_655 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002dff movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00002e04 movdqa %xmm2, %xmm5 - 0x48, 0x83, 0xc0, 0x20, //0x00002e08 addq $32, %rax - 0x49, 0x83, 0xc2, 0xe0, //0x00002e0c addq $-32, %r10 - 0x48, 0x85, 0xdb, //0x00002e10 testq %rbx, %rbx - 0x0f, 0x85, 0x9a, 0x02, 0x00, 0x00, //0x00002e13 jne LBB0_505 - //0x00002e19 LBB0_475 - 0x48, 0x8b, 0x55, 0xc8, //0x00002e19 movq $-56(%rbp), %rdx - 0x4d, 0x85, 0xd2, //0x00002e1d testq %r10, %r10 - 0x0f, 0x84, 0x28, 0x0e, 0x00, 0x00, //0x00002e20 je LBB0_507 - //0x00002e26 LBB0_476 - 0x0f, 0xb6, 0x08, //0x00002e26 movzbl (%rax), %ecx - 0x80, 0xf9, 0x22, //0x00002e29 cmpb $34, %cl - 0x0f, 0x84, 0x11, 0x01, 0x00, 0x00, //0x00002e2c je LBB0_491 - 0x80, 0xf9, 0x5c, //0x00002e32 cmpb $92, %cl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002e35 je LBB0_481 - 0x80, 0xf9, 0x1f, //0x00002e3b cmpb $31, %cl - 0x0f, 0x86, 0x82, 0x0e, 0x00, 0x00, //0x00002e3e jbe LBB0_656 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002e44 movq $-1, %rcx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002e4b movl $1, %esi - //0x00002e50 LBB0_480 - 0x48, 0x01, 0xf0, //0x00002e50 addq %rsi, %rax - 0x49, 0x01, 0xca, //0x00002e53 addq %rcx, %r10 - 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002e56 jne LBB0_476 - 0xe9, 0xed, 0x0d, 0x00, 0x00, //0x00002e5c jmp LBB0_507 - //0x00002e61 LBB0_481 - 0x49, 0x83, 0xfa, 0x01, //0x00002e61 cmpq $1, %r10 - 0x0f, 0x84, 0xe3, 0x0d, 0x00, 0x00, //0x00002e65 je LBB0_507 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002e6b movq $-2, %rcx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002e72 movl $2, %esi - 0x48, 0x83, 0xfa, 0xff, //0x00002e77 cmpq $-1, %rdx - 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00002e7b jne LBB0_480 - 0x48, 0x89, 0xc2, //0x00002e81 movq %rax, %rdx - 0x4c, 0x29, 0xe2, //0x00002e84 subq %r12, %rdx - 0x48, 0x89, 0x55, 0xc8, //0x00002e87 movq %rdx, $-56(%rbp) - 0xe9, 0xc0, 0xff, 0xff, 0xff, //0x00002e8b jmp LBB0_480 - //0x00002e90 LBB0_484 - 0x48, 0x8b, 0x45, 0xb0, //0x00002e90 movq $-80(%rbp), %rax - 0x4c, 0x01, 0xe0, //0x00002e94 addq %r12, %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002e97 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00002e9f xorl %r8d, %r8d - 0x49, 0x83, 0xf9, 0x20, //0x00002ea2 cmpq $32, %r9 - 0x0f, 0x83, 0x61, 0xf8, 0xff, 0xff, //0x00002ea6 jae LBB0_51 - //0x00002eac LBB0_485 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002eac movabsq $4294977024, %r11 - 0xe9, 0x6a, 0x03, 0x00, 0x00, //0x00002eb6 jmp LBB0_520 - //0x00002ebb LBB0_486 - 0x48, 0x8b, 0x45, 0xb0, //0x00002ebb movq $-80(%rbp), %rax - 0x4c, 0x01, 0xe0, //0x00002ebf addq %r12, %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002ec2 movq $-1, $-56(%rbp) - 0x31, 0xdb, //0x00002eca xorl %ebx, %ebx - 0x49, 0x83, 0xfe, 0x20, //0x00002ecc cmpq $32, %r14 - 0x0f, 0x83, 0xbf, 0xf8, 0xff, 0xff, //0x00002ed0 jae LBB0_167 - //0x00002ed6 LBB0_487 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002ed6 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002eda movabsq $4294977024, %r11 - 0x48, 0x85, 0xdb, //0x00002ee4 testq %rbx, %rbx - 0x0f, 0x84, 0x5b, 0xfb, 0xff, 0xff, //0x00002ee7 je LBB0_440 - //0x00002eed LBB0_488 - 0x4d, 0x85, 0xf6, //0x00002eed testq %r14, %r14 - 0x0f, 0x84, 0x39, 0x0d, 0x00, 0x00, //0x00002ef0 je LBB0_490 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002ef6 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00002efb movdqa %xmm2, %xmm5 - 0x4c, 0x89, 0xe1, //0x00002eff movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x00002f02 notq %rcx - 0x48, 0x01, 0xc1, //0x00002f05 addq %rax, %rcx - 0x48, 0x8b, 0x75, 0xc8, //0x00002f08 movq $-56(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x00002f0c cmpq $-1, %rsi - 0x48, 0x89, 0xf2, //0x00002f10 movq %rsi, %rdx - 0x48, 0x0f, 0x44, 0xd1, //0x00002f13 cmoveq %rcx, %rdx - 0x48, 0x0f, 0x45, 0xce, //0x00002f17 cmovneq %rsi, %rcx - 0x48, 0x83, 0xc0, 0x01, //0x00002f1b addq $1, %rax - 0x49, 0x83, 0xc6, 0xff, //0x00002f1f addq $-1, %r14 - 0x48, 0x89, 0x55, 0xc8, //0x00002f23 movq %rdx, $-56(%rbp) - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002f27 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f2b movabsq $4294977024, %r11 - 0x4d, 0x85, 0xf6, //0x00002f35 testq %r14, %r14 - 0x0f, 0x85, 0x17, 0xfb, 0xff, 0xff, //0x00002f38 jne LBB0_441 - 0xe9, 0xec, 0x0c, 0x00, 0x00, //0x00002f3e jmp LBB0_490 - //0x00002f43 LBB0_491 - 0x4c, 0x29, 0xe0, //0x00002f43 subq %r12, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002f46 addq $1, %rax - 0xe9, 0x94, 0x09, 0x00, 0x00, //0x00002f4a jmp LBB0_596 - //0x00002f4f LBB0_492 - 0x48, 0x8b, 0x45, 0xb0, //0x00002f4f movq $-80(%rbp), %rax - 0x4c, 0x01, 0xe0, //0x00002f53 addq %r12, %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002f56 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00002f5e xorl %r8d, %r8d - 0x49, 0x83, 0xf9, 0x20, //0x00002f61 cmpq $32, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x00002f65 movq $-48(%rbp), %r14 - 0x0f, 0x83, 0x3d, 0xf9, 0xff, 0xff, //0x00002f69 jae LBB0_74 - //0x00002f6f LBB0_493 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f6f movabsq $4294977024, %r11 - 0xe9, 0x56, 0x05, 0x00, 0x00, //0x00002f79 jmp LBB0_549 - //0x00002f7e LBB0_494 - 0x4c, 0x8b, 0x45, 0xc0, //0x00002f7e movq $-64(%rbp), %r8 - 0x49, 0x8d, 0x04, 0x08, //0x00002f82 leaq (%r8,%rcx), %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002f86 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xe4, //0x00002f8e xorl %r12d, %r12d - 0x49, 0x83, 0xf9, 0x20, //0x00002f91 cmpq $32, %r9 - 0x0f, 0x83, 0x99, 0xf9, 0xff, 0xff, //0x00002f95 jae LBB0_196 - //0x00002f9b LBB0_495 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002f9b movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f9f movabsq $4294977024, %r11 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x8e, 0xd0, 0xff, 0xff, //0x00002fa9 movdqu $-12146(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x4d, 0x85, 0xe4, //0x00002fb2 testq %r12, %r12 - 0x0f, 0x84, 0x5a, 0xfb, 0xff, 0xff, //0x00002fb5 je LBB0_452 - //0x00002fbb LBB0_496 - 0x4d, 0x85, 0xc9, //0x00002fbb testq %r9, %r9 - 0x0f, 0x84, 0x8a, 0x0c, 0x00, 0x00, //0x00002fbe je LBB0_507 - 0x66, 0x0f, 0x6f, 0xea, //0x00002fc4 movdqa %xmm2, %xmm5 - 0x4c, 0x8b, 0x45, 0xc0, //0x00002fc8 movq $-64(%rbp), %r8 - 0x4c, 0x89, 0xc1, //0x00002fcc movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00002fcf notq %rcx - 0x48, 0x01, 0xc1, //0x00002fd2 addq %rax, %rcx - 0x48, 0x8b, 0x75, 0xc8, //0x00002fd5 movq $-56(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x00002fd9 cmpq $-1, %rsi - 0x48, 0x89, 0xf2, //0x00002fdd movq %rsi, %rdx - 0x48, 0x0f, 0x44, 0xd1, //0x00002fe0 cmoveq %rcx, %rdx - 0x48, 0x0f, 0x45, 0xce, //0x00002fe4 cmovneq %rsi, %rcx - 0x48, 0x83, 0xc0, 0x01, //0x00002fe8 addq $1, %rax - 0x49, 0x83, 0xc1, 0xff, //0x00002fec addq $-1, %r9 - 0x48, 0x89, 0x55, 0xc8, //0x00002ff0 movq %rdx, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x00002ff4 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002ff8 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002ffc movabsq $4294977024, %r11 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x31, 0xd0, 0xff, 0xff, //0x00003006 movdqu $-12239(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x4d, 0x85, 0xc9, //0x0000300f testq %r9, %r9 - 0x0f, 0x85, 0x0a, 0xfb, 0xff, 0xff, //0x00003012 jne LBB0_453 - 0xe9, 0x56, 0x0a, 0x00, 0x00, //0x00003018 jmp LBB0_616 - //0x0000301d LBB0_498 - 0x49, 0x8d, 0x0c, 0x04, //0x0000301d leaq (%r12,%rax), %rcx - 0x48, 0x85, 0xd2, //0x00003021 testq %rdx, %rdx - 0x0f, 0x85, 0x1d, 0xee, 0xff, 0xff, //0x00003024 jne LBB0_349 - //0x0000302a LBB0_499 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000302a movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000302f movdqa %xmm2, %xmm5 - 0xe9, 0x4d, 0xee, 0xff, 0xff, //0x00003033 jmp LBB0_355 - //0x00003038 LBB0_500 - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003038 movq $-1, %r14 - 0x4c, 0x89, 0xc2, //0x0000303f movq %r8, %rdx - 0x49, 0x89, 0xf9, //0x00003042 movq %rdi, %r9 - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00003045 movq $-1, %r10 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x0000304c movq $-1, %r13 - 0xe9, 0x2e, 0xe6, 0xff, 0xff, //0x00003053 jmp LBB0_275 - //0x00003058 LBB0_501 - 0x48, 0x8b, 0x45, 0xb0, //0x00003058 movq $-80(%rbp), %rax - 0x4c, 0x01, 0xe0, //0x0000305c addq %r12, %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000305f movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00003067 xorl %r8d, %r8d - 0x49, 0x83, 0xf9, 0x20, //0x0000306a cmpq $32, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x0000306e movq $-48(%rbp), %r14 - 0x0f, 0x83, 0xe7, 0xfb, 0xff, 0xff, //0x00003072 jae LBB0_242 - //0x00003078 LBB0_502 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003078 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000307d movdqa %xmm2, %xmm5 - 0xe9, 0xbb, 0x07, 0x00, 0x00, //0x00003081 jmp LBB0_583 - //0x00003086 LBB0_503 - 0x49, 0x8d, 0x04, 0x0c, //0x00003086 leaq (%r12,%rcx), %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000308a movq $-1, $-56(%rbp) - 0x31, 0xdb, //0x00003092 xorl %ebx, %ebx - 0x49, 0x89, 0xf2, //0x00003094 movq %rsi, %r10 - 0x48, 0x83, 0xfe, 0x20, //0x00003097 cmpq $32, %rsi - 0x0f, 0x83, 0x3b, 0xfc, 0xff, 0xff, //0x0000309b jae LBB0_395 - //0x000030a1 LBB0_504 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000030a1 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000030a6 movdqa %xmm2, %xmm5 - 0x48, 0x85, 0xdb, //0x000030aa testq %rbx, %rbx - 0x0f, 0x84, 0x66, 0xfd, 0xff, 0xff, //0x000030ad je LBB0_475 - //0x000030b3 LBB0_505 - 0x4d, 0x85, 0xd2, //0x000030b3 testq %r10, %r10 - 0x0f, 0x84, 0x92, 0x0b, 0x00, 0x00, //0x000030b6 je LBB0_507 - 0x4c, 0x89, 0xe2, //0x000030bc movq %r12, %rdx - 0x48, 0xf7, 0xd2, //0x000030bf notq %rdx - 0x48, 0x01, 0xc2, //0x000030c2 addq %rax, %rdx - 0x48, 0x8b, 0x75, 0xc8, //0x000030c5 movq $-56(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x000030c9 cmpq $-1, %rsi - 0x48, 0x89, 0xf1, //0x000030cd movq %rsi, %rcx - 0x48, 0x0f, 0x44, 0xca, //0x000030d0 cmoveq %rdx, %rcx - 0x48, 0x0f, 0x45, 0xd6, //0x000030d4 cmovneq %rsi, %rdx - 0x48, 0x83, 0xc0, 0x01, //0x000030d8 addq $1, %rax - 0x49, 0x83, 0xc2, 0xff, //0x000030dc addq $-1, %r10 - 0x48, 0x89, 0x4d, 0xc8, //0x000030e0 movq %rcx, $-56(%rbp) - 0x4d, 0x85, 0xd2, //0x000030e4 testq %r10, %r10 - 0x0f, 0x85, 0x39, 0xfd, 0xff, 0xff, //0x000030e7 jne LBB0_476 - 0xe9, 0x5c, 0x0b, 0x00, 0x00, //0x000030ed jmp LBB0_507 - //0x000030f2 LBB0_508 - 0x49, 0x39, 0xd1, //0x000030f2 cmpq %rdx, %r9 - 0x0f, 0x84, 0x4c, 0x09, 0x00, 0x00, //0x000030f5 je LBB0_638 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000030fb movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003100 movdqa %xmm2, %xmm5 - 0x49, 0x01, 0xd2, //0x00003104 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003107 addq $1, %r10 - 0x48, 0xf7, 0xd2, //0x0000310b notq %rdx - 0x49, 0x01, 0xd1, //0x0000310e addq %rdx, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x00003111 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003115 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003119 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x00003123 testq %r9, %r9 - 0x0f, 0x8f, 0x33, 0x00, 0x00, 0x00, //0x00003126 jg LBB0_512 - 0xe9, 0x16, 0x09, 0x00, 0x00, //0x0000312c jmp LBB0_638 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003131 .p2align 4, 0x90 - //0x00003140 LBB0_510 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003140 movq $-2, %rcx - 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00003147 movl $2, %eax - 0x49, 0x01, 0xc2, //0x0000314c addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000314f movq $-1, %rax - 0x49, 0x01, 0xc9, //0x00003156 addq %rcx, %r9 - 0x0f, 0x8e, 0xe8, 0x08, 0x00, 0x00, //0x00003159 jle LBB0_638 - //0x0000315f LBB0_512 - 0x41, 0x0f, 0xb6, 0x02, //0x0000315f movzbl (%r10), %eax - 0x3c, 0x5c, //0x00003163 cmpb $92, %al - 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00003165 je LBB0_510 - 0x3c, 0x22, //0x0000316b cmpb $34, %al - 0x0f, 0x84, 0x1f, 0x06, 0x00, 0x00, //0x0000316d je LBB0_577 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003173 movq $-1, %rcx - 0xb8, 0x01, 0x00, 0x00, 0x00, //0x0000317a movl $1, %eax - 0x49, 0x01, 0xc2, //0x0000317f addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003182 movq $-1, %rax - 0x49, 0x01, 0xc9, //0x00003189 addq %rcx, %r9 - 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x0000318c jg LBB0_512 - 0xe9, 0xb0, 0x08, 0x00, 0x00, //0x00003192 jmp LBB0_638 - //0x00003197 LBB0_515 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003197 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000319c movdqa %xmm2, %xmm5 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000031a0 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x000031a5 jne LBB0_518 - 0x48, 0x89, 0xc1, //0x000031ab movq %rax, %rcx - 0x4c, 0x29, 0xe1, //0x000031ae subq %r12, %rcx - 0x48, 0x0f, 0xbc, 0xfe, //0x000031b1 bsfq %rsi, %rdi - 0x48, 0x01, 0xcf, //0x000031b5 addq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xc8, //0x000031b8 movq %rdi, $-56(%rbp) - 0xe9, 0x09, 0x00, 0x00, 0x00, //0x000031bc jmp LBB0_518 - //0x000031c1 LBB0_517 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000031c1 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000031c6 movdqa %xmm2, %xmm5 - //0x000031ca LBB0_518 - 0x44, 0x89, 0xc1, //0x000031ca movl %r8d, %ecx - 0xf7, 0xd1, //0x000031cd notl %ecx - 0x21, 0xf1, //0x000031cf andl %esi, %ecx - 0x41, 0x8d, 0x3c, 0x48, //0x000031d1 leal (%r8,%rcx,2), %edi - 0x8d, 0x1c, 0x09, //0x000031d5 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x000031d8 notl %ebx - 0x21, 0xf3, //0x000031da andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x000031dc andl $-1431655766, %ebx - 0x45, 0x31, 0xc0, //0x000031e2 xorl %r8d, %r8d - 0x01, 0xcb, //0x000031e5 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc0, //0x000031e7 setb %r8b - 0x01, 0xdb, //0x000031eb addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x000031ed xorl $1431655765, %ebx - 0x21, 0xfb, //0x000031f3 andl %edi, %ebx - 0xf7, 0xd3, //0x000031f5 notl %ebx - 0x21, 0xda, //0x000031f7 andl %ebx, %edx - 0x4c, 0x8b, 0x75, 0xd0, //0x000031f9 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000031fd movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003201 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x0000320b movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x0000320f movdqa %xmm6, %xmm13 - 0x48, 0x85, 0xd2, //0x00003214 testq %rdx, %rdx - 0x0f, 0x85, 0x54, 0xf5, 0xff, 0xff, //0x00003217 jne LBB0_54 - //0x0000321d LBB0_519 - 0x48, 0x83, 0xc0, 0x20, //0x0000321d addq $32, %rax - 0x49, 0x83, 0xc1, 0xe0, //0x00003221 addq $-32, %r9 - //0x00003225 LBB0_520 - 0x4d, 0x85, 0xc0, //0x00003225 testq %r8, %r8 - 0x0f, 0x85, 0x18, 0x04, 0x00, 0x00, //0x00003228 jne LBB0_566 - 0x4c, 0x89, 0xe1, //0x0000322e movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x00003231 notq %rcx - 0x48, 0x8b, 0x55, 0xc8, //0x00003234 movq $-56(%rbp), %rdx - 0x4d, 0x85, 0xc9, //0x00003238 testq %r9, %r9 - 0x0f, 0x84, 0x9e, 0x00, 0x00, 0x00, //0x0000323b je LBB0_532 - //0x00003241 LBB0_522 - 0x48, 0x83, 0xc1, 0x01, //0x00003241 addq $1, %rcx - //0x00003245 LBB0_523 - 0x31, 0xf6, //0x00003245 xorl %esi, %esi - //0x00003247 LBB0_524 - 0x0f, 0xb6, 0x1c, 0x30, //0x00003247 movzbl (%rax,%rsi), %ebx - 0x80, 0xfb, 0x22, //0x0000324b cmpb $34, %bl - 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x0000324e je LBB0_531 - 0x80, 0xfb, 0x5c, //0x00003254 cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003257 je LBB0_529 - 0x48, 0x83, 0xc6, 0x01, //0x0000325d addq $1, %rsi - 0x49, 0x39, 0xf1, //0x00003261 cmpq %rsi, %r9 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003264 jne LBB0_524 - 0xe9, 0x78, 0x00, 0x00, 0x00, //0x0000326a jmp LBB0_527 - //0x0000326f LBB0_529 - 0x49, 0x8d, 0x79, 0xff, //0x0000326f leaq $-1(%r9), %rdi - 0x48, 0x39, 0xf7, //0x00003273 cmpq %rsi, %rdi - 0x0f, 0x84, 0xb3, 0x09, 0x00, 0x00, //0x00003276 je LBB0_490 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000327c movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003281 movdqa %xmm2, %xmm5 - 0x48, 0x8d, 0x3c, 0x01, //0x00003285 leaq (%rcx,%rax), %rdi - 0x48, 0x01, 0xf7, //0x00003289 addq %rsi, %rdi - 0x48, 0x83, 0xfa, 0xff, //0x0000328c cmpq $-1, %rdx - 0x48, 0x8b, 0x5d, 0xc8, //0x00003290 movq $-56(%rbp), %rbx - 0x48, 0x0f, 0x44, 0xdf, //0x00003294 cmoveq %rdi, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x00003298 movq %rbx, $-56(%rbp) - 0x48, 0x0f, 0x44, 0xd7, //0x0000329c cmoveq %rdi, %rdx - 0x48, 0x01, 0xf0, //0x000032a0 addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x02, //0x000032a3 addq $2, %rax - 0x4c, 0x89, 0xcf, //0x000032a7 movq %r9, %rdi - 0x48, 0x29, 0xf7, //0x000032aa subq %rsi, %rdi - 0x48, 0x83, 0xc7, 0xfe, //0x000032ad addq $-2, %rdi - 0x49, 0x83, 0xc1, 0xfe, //0x000032b1 addq $-2, %r9 - 0x49, 0x39, 0xf1, //0x000032b5 cmpq %rsi, %r9 - 0x49, 0x89, 0xf9, //0x000032b8 movq %rdi, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x000032bb movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000032bf movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000032c3 movabsq $4294977024, %r11 - 0x0f, 0x85, 0x72, 0xff, 0xff, 0xff, //0x000032cd jne LBB0_523 - 0xe9, 0x3f, 0x07, 0x00, 0x00, //0x000032d3 jmp LBB0_610 - //0x000032d8 LBB0_531 - 0x48, 0x01, 0xf0, //0x000032d8 addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x000032db addq $1, %rax - //0x000032df LBB0_532 - 0x4c, 0x29, 0xe0, //0x000032df subq %r12, %rax - 0xe9, 0x9f, 0xdf, 0xff, 0xff, //0x000032e2 jmp LBB0_223 - //0x000032e7 LBB0_527 - 0x80, 0xfb, 0x22, //0x000032e7 cmpb $34, %bl - 0x0f, 0x85, 0x3f, 0x09, 0x00, 0x00, //0x000032ea jne LBB0_490 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000032f0 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000032f5 movdqa %xmm2, %xmm5 - 0x4c, 0x01, 0xc8, //0x000032f9 addq %r9, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x000032fc movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003300 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003304 movabsq $4294977024, %r11 - 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x0000330e jmp LBB0_532 - //0x00003313 LBB0_533 - 0x48, 0x89, 0xdf, //0x00003313 movq %rbx, %rdi - 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00003316 movdqa %xmm13, %xmm7 - 0x66, 0x0f, 0x6f, 0xf2, //0x0000331b movdqa %xmm2, %xmm6 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000331f cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0xd0, 0x00, 0x00, 0x00, //0x00003324 jne LBB0_543 - 0x49, 0x89, 0xc0, //0x0000332a movq %rax, %r8 - 0x4d, 0x29, 0xe0, //0x0000332d subq %r12, %r8 - 0x49, 0x0f, 0xbc, 0xd9, //0x00003330 bsfq %r9, %rbx - 0x4c, 0x01, 0xc3, //0x00003334 addq %r8, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x00003337 movq %rbx, $-56(%rbp) - 0xe9, 0xba, 0x00, 0x00, 0x00, //0x0000333b jmp LBB0_543 - //0x00003340 LBB0_535 - 0x49, 0x39, 0xd1, //0x00003340 cmpq %rdx, %r9 - 0x0f, 0x84, 0xfe, 0x06, 0x00, 0x00, //0x00003343 je LBB0_638 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003349 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000334e movdqa %xmm2, %xmm5 - 0x49, 0x01, 0xd2, //0x00003352 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003355 addq $1, %r10 - 0x48, 0xf7, 0xd2, //0x00003359 notq %rdx - 0x49, 0x01, 0xd1, //0x0000335c addq %rdx, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x0000335f movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003363 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003367 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x00003371 testq %r9, %r9 - 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00003374 jg LBB0_539 - 0xe9, 0xc8, 0x06, 0x00, 0x00, //0x0000337a jmp LBB0_638 - //0x0000337f LBB0_537 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x0000337f movq $-2, %rcx - 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00003386 movl $2, %eax - 0x49, 0x01, 0xc2, //0x0000338b addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000338e movq $-1, %rax - 0x49, 0x01, 0xc9, //0x00003395 addq %rcx, %r9 - 0x0f, 0x8e, 0xa9, 0x06, 0x00, 0x00, //0x00003398 jle LBB0_638 - //0x0000339e LBB0_539 - 0x41, 0x0f, 0xb6, 0x02, //0x0000339e movzbl (%r10), %eax - 0x3c, 0x5c, //0x000033a2 cmpb $92, %al - 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x000033a4 je LBB0_537 - 0x3c, 0x22, //0x000033aa cmpb $34, %al - 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x000033ac je LBB0_607 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000033b2 movq $-1, %rcx - 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000033b9 movl $1, %eax - 0x49, 0x01, 0xc2, //0x000033be addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000033c1 movq $-1, %rax - 0x49, 0x01, 0xc9, //0x000033c8 addq %rcx, %r9 - 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x000033cb jg LBB0_539 - 0xe9, 0x71, 0x06, 0x00, 0x00, //0x000033d1 jmp LBB0_638 - //0x000033d6 LBB0_607 - 0x4d, 0x29, 0xe2, //0x000033d6 subq %r12, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x000033d9 addq $1, %r10 - 0x4d, 0x89, 0x16, //0x000033dd movq %r10, (%r14) - 0x4d, 0x85, 0xc0, //0x000033e0 testq %r8, %r8 - 0x0f, 0x8f, 0x33, 0xe4, 0xff, 0xff, //0x000033e3 jg LBB0_306 - 0xe9, 0x13, 0x06, 0x00, 0x00, //0x000033e9 jmp LBB0_608 - //0x000033ee LBB0_542 - 0x48, 0x89, 0xdf, //0x000033ee movq %rbx, %rdi - 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x000033f1 movdqa %xmm13, %xmm7 - 0x66, 0x0f, 0x6f, 0xf2, //0x000033f6 movdqa %xmm2, %xmm6 - //0x000033fa LBB0_543 - 0x48, 0x89, 0xfb, //0x000033fa movq %rdi, %rbx - 0xf7, 0xd7, //0x000033fd notl %edi - 0x44, 0x21, 0xcf, //0x000033ff andl %r9d, %edi - 0x44, 0x8d, 0x04, 0x7b, //0x00003402 leal (%rbx,%rdi,2), %r8d - 0x8d, 0x14, 0x3f, //0x00003406 leal (%rdi,%rdi), %edx - 0xf7, 0xd2, //0x00003409 notl %edx - 0x44, 0x21, 0xca, //0x0000340b andl %r9d, %edx - 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000340e andl $-1431655766, %edx - 0x31, 0xdb, //0x00003414 xorl %ebx, %ebx - 0x01, 0xfa, //0x00003416 addl %edi, %edx - 0x0f, 0x92, 0xc3, //0x00003418 setb %bl - 0x01, 0xd2, //0x0000341b addl %edx, %edx - 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x0000341d xorl $1431655765, %edx - 0x44, 0x21, 0xc2, //0x00003423 andl %r8d, %edx - 0xf7, 0xd2, //0x00003426 notl %edx - 0x21, 0xd1, //0x00003428 andl %edx, %ecx - 0x4c, 0x8b, 0x6d, 0xb8, //0x0000342a movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000342e movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd6, //0x00003438 movdqa %xmm6, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x0000343c movdqa %xmm7, %xmm13 - 0xe9, 0xd0, 0xf3, 0xff, 0xff, //0x00003441 jmp LBB0_170 - //0x00003446 LBB0_544 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003446 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000344b movdqa %xmm2, %xmm5 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000344f cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x00003454 jne LBB0_547 - 0x48, 0x89, 0xc1, //0x0000345a movq %rax, %rcx - 0x4c, 0x29, 0xe1, //0x0000345d subq %r12, %rcx - 0x48, 0x0f, 0xbc, 0xfe, //0x00003460 bsfq %rsi, %rdi - 0x48, 0x01, 0xcf, //0x00003464 addq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xc8, //0x00003467 movq %rdi, $-56(%rbp) - 0xe9, 0x09, 0x00, 0x00, 0x00, //0x0000346b jmp LBB0_547 - //0x00003470 LBB0_546 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003470 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003475 movdqa %xmm2, %xmm5 - //0x00003479 LBB0_547 - 0x44, 0x89, 0xc1, //0x00003479 movl %r8d, %ecx - 0xf7, 0xd1, //0x0000347c notl %ecx - 0x21, 0xf1, //0x0000347e andl %esi, %ecx - 0x41, 0x8d, 0x3c, 0x48, //0x00003480 leal (%r8,%rcx,2), %edi - 0x8d, 0x1c, 0x09, //0x00003484 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x00003487 notl %ebx - 0x21, 0xf3, //0x00003489 andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000348b andl $-1431655766, %ebx - 0x45, 0x31, 0xc0, //0x00003491 xorl %r8d, %r8d - 0x01, 0xcb, //0x00003494 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc0, //0x00003496 setb %r8b - 0x01, 0xdb, //0x0000349a addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x0000349c xorl $1431655765, %ebx - 0x21, 0xfb, //0x000034a2 andl %edi, %ebx - 0xf7, 0xd3, //0x000034a4 notl %ebx - 0x21, 0xda, //0x000034a6 andl %ebx, %edx - 0x4c, 0x8b, 0x75, 0xd0, //0x000034a8 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000034ac movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000034b0 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x000034ba movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x000034be movdqa %xmm6, %xmm13 - 0x48, 0x85, 0xd2, //0x000034c3 testq %rdx, %rdx - 0x0f, 0x85, 0x44, 0xf4, 0xff, 0xff, //0x000034c6 jne LBB0_77 - //0x000034cc LBB0_548 - 0x48, 0x83, 0xc0, 0x20, //0x000034cc addq $32, %rax - 0x49, 0x83, 0xc1, 0xe0, //0x000034d0 addq $-32, %r9 - //0x000034d4 LBB0_549 - 0x4d, 0x85, 0xc0, //0x000034d4 testq %r8, %r8 - 0x0f, 0x85, 0xc4, 0x01, 0x00, 0x00, //0x000034d7 jne LBB0_568 - 0x4c, 0x89, 0xe1, //0x000034dd movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x000034e0 notq %rcx - 0x48, 0x8b, 0x55, 0xc8, //0x000034e3 movq $-56(%rbp), %rdx - 0x4d, 0x85, 0xc9, //0x000034e7 testq %r9, %r9 - 0x0f, 0x84, 0x9e, 0x00, 0x00, 0x00, //0x000034ea je LBB0_561 - //0x000034f0 LBB0_551 - 0x48, 0x83, 0xc1, 0x01, //0x000034f0 addq $1, %rcx - //0x000034f4 LBB0_552 - 0x31, 0xf6, //0x000034f4 xorl %esi, %esi - //0x000034f6 LBB0_553 - 0x0f, 0xb6, 0x1c, 0x30, //0x000034f6 movzbl (%rax,%rsi), %ebx - 0x80, 0xfb, 0x22, //0x000034fa cmpb $34, %bl - 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x000034fd je LBB0_560 - 0x80, 0xfb, 0x5c, //0x00003503 cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003506 je LBB0_558 - 0x48, 0x83, 0xc6, 0x01, //0x0000350c addq $1, %rsi - 0x49, 0x39, 0xf1, //0x00003510 cmpq %rsi, %r9 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003513 jne LBB0_553 - 0xe9, 0x78, 0x00, 0x00, 0x00, //0x00003519 jmp LBB0_556 - //0x0000351e LBB0_558 - 0x49, 0x8d, 0x79, 0xff, //0x0000351e leaq $-1(%r9), %rdi - 0x48, 0x39, 0xf7, //0x00003522 cmpq %rsi, %rdi - 0x0f, 0x84, 0x23, 0x07, 0x00, 0x00, //0x00003525 je LBB0_507 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000352b movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003530 movdqa %xmm2, %xmm5 - 0x48, 0x8d, 0x3c, 0x01, //0x00003534 leaq (%rcx,%rax), %rdi - 0x48, 0x01, 0xf7, //0x00003538 addq %rsi, %rdi - 0x48, 0x83, 0xfa, 0xff, //0x0000353b cmpq $-1, %rdx - 0x48, 0x8b, 0x5d, 0xc8, //0x0000353f movq $-56(%rbp), %rbx - 0x48, 0x0f, 0x44, 0xdf, //0x00003543 cmoveq %rdi, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x00003547 movq %rbx, $-56(%rbp) - 0x48, 0x0f, 0x44, 0xd7, //0x0000354b cmoveq %rdi, %rdx - 0x48, 0x01, 0xf0, //0x0000354f addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x02, //0x00003552 addq $2, %rax - 0x4c, 0x89, 0xcf, //0x00003556 movq %r9, %rdi - 0x48, 0x29, 0xf7, //0x00003559 subq %rsi, %rdi - 0x48, 0x83, 0xc7, 0xfe, //0x0000355c addq $-2, %rdi - 0x49, 0x83, 0xc1, 0xfe, //0x00003560 addq $-2, %r9 - 0x49, 0x39, 0xf1, //0x00003564 cmpq %rsi, %r9 - 0x49, 0x89, 0xf9, //0x00003567 movq %rdi, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x0000356a movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x0000356e movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003572 movabsq $4294977024, %r11 - 0x0f, 0x85, 0x72, 0xff, 0xff, 0xff, //0x0000357c jne LBB0_552 - 0xe9, 0xec, 0x04, 0x00, 0x00, //0x00003582 jmp LBB0_616 - //0x00003587 LBB0_560 - 0x48, 0x01, 0xf0, //0x00003587 addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x0000358a addq $1, %rax - //0x0000358e LBB0_561 - 0x4c, 0x29, 0xe0, //0x0000358e subq %r12, %rax - 0xe9, 0x6d, 0xe2, 0xff, 0xff, //0x00003591 jmp LBB0_304 - //0x00003596 LBB0_556 - 0x80, 0xfb, 0x22, //0x00003596 cmpb $34, %bl - 0x0f, 0x85, 0xaf, 0x06, 0x00, 0x00, //0x00003599 jne LBB0_507 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000359f movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000035a4 movdqa %xmm2, %xmm5 - 0x4c, 0x01, 0xc8, //0x000035a8 addq %r9, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x000035ab movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000035af movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000035b3 movabsq $4294977024, %r11 - 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x000035bd jmp LBB0_561 - //0x000035c2 LBB0_562 - 0x66, 0x0f, 0x6f, 0xf2, //0x000035c2 movdqa %xmm2, %xmm6 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000035c6 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x1b, 0x00, 0x00, 0x00, //0x000035cb jne LBB0_565 - 0x49, 0x89, 0xc0, //0x000035d1 movq %rax, %r8 - 0x4c, 0x2b, 0x45, 0xc0, //0x000035d4 subq $-64(%rbp), %r8 - 0x49, 0x0f, 0xbc, 0xda, //0x000035d8 bsfq %r10, %rbx - 0x4c, 0x01, 0xc3, //0x000035dc addq %r8, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x000035df movq %rbx, $-56(%rbp) - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x000035e3 jmp LBB0_565 - //0x000035e8 LBB0_564 - 0x66, 0x0f, 0x6f, 0xf2, //0x000035e8 movdqa %xmm2, %xmm6 - //0x000035ec LBB0_565 - 0x44, 0x89, 0xe2, //0x000035ec movl %r12d, %edx - 0xf7, 0xd2, //0x000035ef notl %edx - 0x44, 0x21, 0xd2, //0x000035f1 andl %r10d, %edx - 0x45, 0x8d, 0x04, 0x54, //0x000035f4 leal (%r12,%rdx,2), %r8d - 0x8d, 0x0c, 0x12, //0x000035f8 leal (%rdx,%rdx), %ecx - 0xf7, 0xd1, //0x000035fb notl %ecx - 0x44, 0x21, 0xd1, //0x000035fd andl %r10d, %ecx - 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003600 andl $-1431655766, %ecx - 0x45, 0x31, 0xe4, //0x00003606 xorl %r12d, %r12d - 0x01, 0xd1, //0x00003609 addl %edx, %ecx - 0x41, 0x0f, 0x92, 0xc4, //0x0000360b setb %r12b - 0x01, 0xc9, //0x0000360f addl %ecx, %ecx - 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00003611 xorl $1431655765, %ecx - 0x44, 0x21, 0xc1, //0x00003617 andl %r8d, %ecx - 0xf7, 0xd1, //0x0000361a notl %ecx - 0x21, 0xce, //0x0000361c andl %ecx, %esi - 0x4c, 0x8b, 0x75, 0xd0, //0x0000361e movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003622 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003626 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd6, //0x00003630 movdqa %xmm6, %xmm2 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x03, 0xca, 0xff, 0xff, //0x00003634 movdqu $-13821(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x4c, 0x8b, 0x45, 0xc0, //0x0000363d movq $-64(%rbp), %r8 - 0xe9, 0x79, 0xf3, 0xff, 0xff, //0x00003641 jmp LBB0_199 - //0x00003646 LBB0_566 - 0x4d, 0x85, 0xc9, //0x00003646 testq %r9, %r9 - 0x0f, 0x84, 0xe0, 0x05, 0x00, 0x00, //0x00003649 je LBB0_490 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000364f movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003654 movdqa %xmm2, %xmm5 - 0x4c, 0x89, 0xe1, //0x00003658 movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x0000365b notq %rcx - 0x48, 0x8d, 0x34, 0x08, //0x0000365e leaq (%rax,%rcx), %rsi - 0x48, 0x8b, 0x7d, 0xc8, //0x00003662 movq $-56(%rbp), %rdi - 0x48, 0x83, 0xff, 0xff, //0x00003666 cmpq $-1, %rdi - 0x48, 0x89, 0xfa, //0x0000366a movq %rdi, %rdx - 0x48, 0x0f, 0x44, 0xfe, //0x0000366d cmoveq %rsi, %rdi - 0x48, 0x0f, 0x44, 0xd6, //0x00003671 cmoveq %rsi, %rdx - 0x48, 0x83, 0xc0, 0x01, //0x00003675 addq $1, %rax - 0x49, 0x83, 0xc1, 0xff, //0x00003679 addq $-1, %r9 - 0x48, 0x89, 0x7d, 0xc8, //0x0000367d movq %rdi, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x00003681 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003685 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003689 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x00003693 testq %r9, %r9 - 0x0f, 0x85, 0xa5, 0xfb, 0xff, 0xff, //0x00003696 jne LBB0_522 - 0xe9, 0x3e, 0xfc, 0xff, 0xff, //0x0000369c jmp LBB0_532 - //0x000036a1 LBB0_568 - 0x4d, 0x85, 0xc9, //0x000036a1 testq %r9, %r9 - 0x0f, 0x84, 0xa4, 0x05, 0x00, 0x00, //0x000036a4 je LBB0_507 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000036aa movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000036af movdqa %xmm2, %xmm5 - 0x4c, 0x89, 0xe1, //0x000036b3 movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x000036b6 notq %rcx - 0x48, 0x8d, 0x34, 0x08, //0x000036b9 leaq (%rax,%rcx), %rsi - 0x48, 0x8b, 0x7d, 0xc8, //0x000036bd movq $-56(%rbp), %rdi - 0x48, 0x83, 0xff, 0xff, //0x000036c1 cmpq $-1, %rdi - 0x48, 0x89, 0xfa, //0x000036c5 movq %rdi, %rdx - 0x48, 0x0f, 0x44, 0xfe, //0x000036c8 cmoveq %rsi, %rdi - 0x48, 0x0f, 0x44, 0xd6, //0x000036cc cmoveq %rsi, %rdx - 0x48, 0x83, 0xc0, 0x01, //0x000036d0 addq $1, %rax - 0x49, 0x83, 0xc1, 0xff, //0x000036d4 addq $-1, %r9 - 0x48, 0x89, 0x7d, 0xc8, //0x000036d8 movq %rdi, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x000036dc movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000036e0 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000036e4 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x000036ee testq %r9, %r9 - 0x0f, 0x85, 0xf9, 0xfd, 0xff, 0xff, //0x000036f1 jne LBB0_551 - 0xe9, 0x92, 0xfe, 0xff, 0xff, //0x000036f7 jmp LBB0_561 - //0x000036fc LBB0_570 - 0x49, 0x39, 0xd1, //0x000036fc cmpq %rdx, %r9 - 0x0f, 0x84, 0x42, 0x03, 0x00, 0x00, //0x000036ff je LBB0_638 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003705 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000370a movdqa %xmm2, %xmm5 - 0x49, 0x01, 0xd2, //0x0000370e addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003711 addq $1, %r10 - 0x48, 0xf7, 0xd2, //0x00003715 notq %rdx - 0x49, 0x01, 0xd1, //0x00003718 addq %rdx, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x0000371b movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x0000371f movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003723 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x0000372d testq %r9, %r9 - 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00003730 jg LBB0_574 - 0xe9, 0x0c, 0x03, 0x00, 0x00, //0x00003736 jmp LBB0_638 - //0x0000373b LBB0_572 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x0000373b movq $-2, %rcx - 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00003742 movl $2, %eax - 0x49, 0x01, 0xc2, //0x00003747 addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000374a movq $-1, %rax - 0x49, 0x01, 0xc9, //0x00003751 addq %rcx, %r9 - 0x0f, 0x8e, 0xed, 0x02, 0x00, 0x00, //0x00003754 jle LBB0_638 - //0x0000375a LBB0_574 - 0x41, 0x0f, 0xb6, 0x02, //0x0000375a movzbl (%r10), %eax - 0x3c, 0x5c, //0x0000375e cmpb $92, %al - 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00003760 je LBB0_572 - 0x3c, 0x22, //0x00003766 cmpb $34, %al - 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x00003768 je LBB0_577 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000376e movq $-1, %rcx - 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00003775 movl $1, %eax - 0x49, 0x01, 0xc2, //0x0000377a addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000377d movq $-1, %rax - 0x49, 0x01, 0xc9, //0x00003784 addq %rcx, %r9 - 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x00003787 jg LBB0_574 - 0xe9, 0xb5, 0x02, 0x00, 0x00, //0x0000378d jmp LBB0_638 - //0x00003792 LBB0_577 - 0x4d, 0x29, 0xe2, //0x00003792 subq %r12, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003795 addq $1, %r10 - 0x4d, 0x89, 0x16, //0x00003799 movq %r10, (%r14) - 0x4d, 0x85, 0xc0, //0x0000379c testq %r8, %r8 - 0x0f, 0x8f, 0x1b, 0xca, 0xff, 0xff, //0x0000379f jg LBB0_4 - 0xe9, 0x57, 0x02, 0x00, 0x00, //0x000037a5 jmp LBB0_608 - //0x000037aa LBB0_578 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000037aa movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000037af movdqa %xmm2, %xmm5 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000037b3 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x000037b8 jne LBB0_581 - 0x48, 0x89, 0xc1, //0x000037be movq %rax, %rcx - 0x4c, 0x29, 0xe1, //0x000037c1 subq %r12, %rcx - 0x48, 0x0f, 0xbc, 0xfe, //0x000037c4 bsfq %rsi, %rdi - 0x48, 0x01, 0xcf, //0x000037c8 addq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xc8, //0x000037cb movq %rdi, $-56(%rbp) - 0xe9, 0x09, 0x00, 0x00, 0x00, //0x000037cf jmp LBB0_581 - //0x000037d4 LBB0_580 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000037d4 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000037d9 movdqa %xmm2, %xmm5 - //0x000037dd LBB0_581 - 0x44, 0x89, 0xc1, //0x000037dd movl %r8d, %ecx - 0xf7, 0xd1, //0x000037e0 notl %ecx - 0x21, 0xf1, //0x000037e2 andl %esi, %ecx - 0x41, 0x8d, 0x3c, 0x48, //0x000037e4 leal (%r8,%rcx,2), %edi - 0x8d, 0x1c, 0x09, //0x000037e8 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x000037eb notl %ebx - 0x21, 0xf3, //0x000037ed andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x000037ef andl $-1431655766, %ebx - 0x45, 0x31, 0xc0, //0x000037f5 xorl %r8d, %r8d - 0x01, 0xcb, //0x000037f8 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc0, //0x000037fa setb %r8b - 0x01, 0xdb, //0x000037fe addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00003800 xorl $1431655765, %ebx - 0x21, 0xfb, //0x00003806 andl %edi, %ebx - 0xf7, 0xd3, //0x00003808 notl %ebx - 0x21, 0xda, //0x0000380a andl %ebx, %edx - 0x4c, 0x8b, 0x75, 0xd0, //0x0000380c movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003810 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003814 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x0000381e movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00003822 movdqa %xmm6, %xmm13 - 0x48, 0x85, 0xd2, //0x00003827 testq %rdx, %rdx - 0x0f, 0x85, 0x89, 0xf4, 0xff, 0xff, //0x0000382a jne LBB0_245 - //0x00003830 LBB0_582 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003830 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003835 movdqa %xmm2, %xmm5 - 0x48, 0x83, 0xc0, 0x20, //0x00003839 addq $32, %rax - 0x49, 0x83, 0xc1, 0xe0, //0x0000383d addq $-32, %r9 - //0x00003841 LBB0_583 - 0x4d, 0x85, 0xc0, //0x00003841 testq %r8, %r8 - 0x0f, 0x85, 0x53, 0x01, 0x00, 0x00, //0x00003844 jne LBB0_601 - 0x4c, 0x89, 0xe2, //0x0000384a movq %r12, %rdx - 0x48, 0xf7, 0xd2, //0x0000384d notq %rdx - 0x48, 0x8b, 0x75, 0xc8, //0x00003850 movq $-56(%rbp), %rsi - 0x4d, 0x85, 0xc9, //0x00003854 testq %r9, %r9 - 0x0f, 0x84, 0x83, 0x00, 0x00, 0x00, //0x00003857 je LBB0_595 - //0x0000385d LBB0_585 - 0x48, 0x83, 0xc2, 0x01, //0x0000385d addq $1, %rdx - //0x00003861 LBB0_586 - 0x31, 0xff, //0x00003861 xorl %edi, %edi - //0x00003863 LBB0_587 - 0x0f, 0xb6, 0x0c, 0x38, //0x00003863 movzbl (%rax,%rdi), %ecx - 0x80, 0xf9, 0x22, //0x00003867 cmpb $34, %cl - 0x0f, 0x84, 0x69, 0x00, 0x00, 0x00, //0x0000386a je LBB0_594 - 0x80, 0xf9, 0x5c, //0x00003870 cmpb $92, %cl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003873 je LBB0_592 - 0x48, 0x83, 0xc7, 0x01, //0x00003879 addq $1, %rdi - 0x49, 0x39, 0xf9, //0x0000387d cmpq %rdi, %r9 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003880 jne LBB0_587 - 0xe9, 0x78, 0x00, 0x00, 0x00, //0x00003886 jmp LBB0_590 - //0x0000388b LBB0_592 - 0x49, 0x8d, 0x49, 0xff, //0x0000388b leaq $-1(%r9), %rcx - 0x48, 0x39, 0xf9, //0x0000388f cmpq %rdi, %rcx - 0x0f, 0x84, 0xb6, 0x03, 0x00, 0x00, //0x00003892 je LBB0_507 - 0x48, 0x8d, 0x0c, 0x02, //0x00003898 leaq (%rdx,%rax), %rcx - 0x48, 0x01, 0xf9, //0x0000389c addq %rdi, %rcx - 0x48, 0x83, 0xfe, 0xff, //0x0000389f cmpq $-1, %rsi - 0x48, 0x8b, 0x5d, 0xc8, //0x000038a3 movq $-56(%rbp), %rbx - 0x48, 0x0f, 0x44, 0xd9, //0x000038a7 cmoveq %rcx, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x000038ab movq %rbx, $-56(%rbp) - 0x48, 0x0f, 0x44, 0xf1, //0x000038af cmoveq %rcx, %rsi - 0x48, 0x01, 0xf8, //0x000038b3 addq %rdi, %rax - 0x48, 0x83, 0xc0, 0x02, //0x000038b6 addq $2, %rax - 0x4c, 0x89, 0xc9, //0x000038ba movq %r9, %rcx - 0x48, 0x29, 0xf9, //0x000038bd subq %rdi, %rcx - 0x48, 0x83, 0xc1, 0xfe, //0x000038c0 addq $-2, %rcx - 0x49, 0x83, 0xc1, 0xfe, //0x000038c4 addq $-2, %r9 - 0x49, 0x39, 0xf9, //0x000038c8 cmpq %rdi, %r9 - 0x49, 0x89, 0xc9, //0x000038cb movq %rcx, %r9 - 0x0f, 0x85, 0x8d, 0xff, 0xff, 0xff, //0x000038ce jne LBB0_586 - 0xe9, 0x75, 0x03, 0x00, 0x00, //0x000038d4 jmp LBB0_507 - //0x000038d9 LBB0_594 - 0x48, 0x01, 0xf8, //0x000038d9 addq %rdi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x000038dc addq $1, %rax - //0x000038e0 LBB0_595 - 0x4c, 0x29, 0xe0, //0x000038e0 subq %r12, %rax - //0x000038e3 LBB0_596 - 0x4c, 0x8b, 0x75, 0xd0, //0x000038e3 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000038e7 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000038eb movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x000038f5 movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x000038f9 movdqa %xmm6, %xmm13 - 0xe9, 0x3a, 0xed, 0xff, 0xff, //0x000038fe jmp LBB0_426 - //0x00003903 LBB0_590 - 0x80, 0xf9, 0x22, //0x00003903 cmpb $34, %cl - 0x0f, 0x85, 0x42, 0x03, 0x00, 0x00, //0x00003906 jne LBB0_507 - 0x4c, 0x01, 0xc8, //0x0000390c addq %r9, %rax - 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x0000390f jmp LBB0_595 - //0x00003914 LBB0_597 - 0x48, 0x89, 0xd9, //0x00003914 movq %rbx, %rcx - 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00003917 movdqa %xmm13, %xmm7 - 0x66, 0x0f, 0x6f, 0xf2, //0x0000391c movdqa %xmm2, %xmm6 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003920 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x22, 0x00, 0x00, 0x00, //0x00003925 jne LBB0_600 - 0x49, 0x89, 0xc0, //0x0000392b movq %rax, %r8 - 0x4d, 0x29, 0xe0, //0x0000392e subq %r12, %r8 - 0x49, 0x0f, 0xbc, 0xd9, //0x00003931 bsfq %r9, %rbx - 0x4c, 0x01, 0xc3, //0x00003935 addq %r8, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x00003938 movq %rbx, $-56(%rbp) - 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x0000393c jmp LBB0_600 - //0x00003941 LBB0_599 - 0x48, 0x89, 0xd9, //0x00003941 movq %rbx, %rcx - 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00003944 movdqa %xmm13, %xmm7 - 0x66, 0x0f, 0x6f, 0xf2, //0x00003949 movdqa %xmm2, %xmm6 - //0x0000394d LBB0_600 - 0x48, 0x89, 0xcb, //0x0000394d movq %rcx, %rbx - 0xf7, 0xd1, //0x00003950 notl %ecx - 0x44, 0x21, 0xc9, //0x00003952 andl %r9d, %ecx - 0x44, 0x8d, 0x04, 0x4b, //0x00003955 leal (%rbx,%rcx,2), %r8d - 0x8d, 0x14, 0x09, //0x00003959 leal (%rcx,%rcx), %edx - 0xf7, 0xd2, //0x0000395c notl %edx - 0x44, 0x21, 0xca, //0x0000395e andl %r9d, %edx - 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003961 andl $-1431655766, %edx - 0x31, 0xdb, //0x00003967 xorl %ebx, %ebx - 0x01, 0xca, //0x00003969 addl %ecx, %edx - 0x0f, 0x92, 0xc3, //0x0000396b setb %bl - 0x01, 0xd2, //0x0000396e addl %edx, %edx - 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x00003970 xorl $1431655765, %edx - 0x44, 0x21, 0xc2, //0x00003976 andl %r8d, %edx - 0xf7, 0xd2, //0x00003979 notl %edx - 0x21, 0xd6, //0x0000397b andl %edx, %esi - 0x4c, 0x8b, 0x75, 0xd0, //0x0000397d movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003981 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003985 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd6, //0x0000398f movdqa %xmm6, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x00003993 movdqa %xmm7, %xmm13 - 0xe9, 0xc0, 0xf3, 0xff, 0xff, //0x00003998 jmp LBB0_398 - //0x0000399d LBB0_601 - 0x4d, 0x85, 0xc9, //0x0000399d testq %r9, %r9 - 0x0f, 0x84, 0xa8, 0x02, 0x00, 0x00, //0x000039a0 je LBB0_507 - 0x4c, 0x89, 0xe2, //0x000039a6 movq %r12, %rdx - 0x48, 0xf7, 0xd2, //0x000039a9 notq %rdx - 0x48, 0x8d, 0x0c, 0x10, //0x000039ac leaq (%rax,%rdx), %rcx - 0x48, 0x8b, 0x7d, 0xc8, //0x000039b0 movq $-56(%rbp), %rdi - 0x48, 0x83, 0xff, 0xff, //0x000039b4 cmpq $-1, %rdi - 0x48, 0x89, 0xfe, //0x000039b8 movq %rdi, %rsi - 0x48, 0x0f, 0x44, 0xf9, //0x000039bb cmoveq %rcx, %rdi - 0x48, 0x0f, 0x44, 0xf1, //0x000039bf cmoveq %rcx, %rsi - 0x48, 0x83, 0xc0, 0x01, //0x000039c3 addq $1, %rax - 0x49, 0x83, 0xc1, 0xff, //0x000039c7 addq $-1, %r9 - 0x48, 0x89, 0x7d, 0xc8, //0x000039cb movq %rdi, $-56(%rbp) - 0x4d, 0x85, 0xc9, //0x000039cf testq %r9, %r9 - 0x0f, 0x85, 0x85, 0xfe, 0xff, 0xff, //0x000039d2 jne LBB0_585 - 0xe9, 0x03, 0xff, 0xff, 0xff, //0x000039d8 jmp LBB0_595 - //0x000039dd LBB0_603 - 0x49, 0x89, 0x16, //0x000039dd movq %rdx, (%r14) - //0x000039e0 LBB0_604 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000039e0 movq $-1, %rax - 0xe9, 0x5b, 0x00, 0x00, 0x00, //0x000039e7 jmp LBB0_638 - //0x000039ec LBB0_634 - 0x48, 0xc7, 0xc0, 0xf9, 0xff, 0xff, 0xff, //0x000039ec movq $-7, %rax - 0xe9, 0x4f, 0x00, 0x00, 0x00, //0x000039f3 jmp LBB0_638 - //0x000039f8 LBB0_606 - 0x48, 0x83, 0xc0, 0xff, //0x000039f8 addq $-1, %rax - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x000039fc jmp LBB0_638 - //0x00003a01 LBB0_608 - 0x49, 0x83, 0xc0, 0xff, //0x00003a01 addq $-1, %r8 - 0x4c, 0x89, 0xc0, //0x00003a05 movq %r8, %rax - 0xe9, 0x3a, 0x00, 0x00, 0x00, //0x00003a08 jmp LBB0_638 - //0x00003a0d LBB0_609 - 0x48, 0x83, 0xf8, 0xff, //0x00003a0d cmpq $-1, %rax - 0x0f, 0x85, 0x90, 0x00, 0x00, 0x00, //0x00003a11 jne LBB0_621 - //0x00003a17 LBB0_610 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003a17 movq $-1, %rax - 0x48, 0x8b, 0x4d, 0xa0, //0x00003a1e movq $-96(%rbp), %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00003a22 movq %rcx, $-56(%rbp) - 0xe9, 0x7c, 0x00, 0x00, 0x00, //0x00003a26 jmp LBB0_621 - //0x00003a2b LBB0_611 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00003a2b movq $-1, %r13 - //0x00003a32 LBB0_612 - 0x4c, 0x29, 0xee, //0x00003a32 subq %r13, %rsi - 0x48, 0x83, 0xc6, 0xfe, //0x00003a35 addq $-2, %rsi - 0x48, 0x8b, 0x45, 0xd0, //0x00003a39 movq $-48(%rbp), %rax - 0x48, 0x89, 0x30, //0x00003a3d movq %rsi, (%rax) - //0x00003a40 LBB0_637 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003a40 movq $-2, %rax - //0x00003a47 LBB0_638 - 0x48, 0x81, 0xc4, 0x88, 0x00, 0x00, 0x00, //0x00003a47 addq $136, %rsp - 0x5b, //0x00003a4e popq %rbx - 0x41, 0x5c, //0x00003a4f popq %r12 - 0x41, 0x5d, //0x00003a51 popq %r13 - 0x41, 0x5e, //0x00003a53 popq %r14 - 0x41, 0x5f, //0x00003a55 popq %r15 - 0x5d, //0x00003a57 popq %rbp - 0xc3, //0x00003a58 retq - //0x00003a59 LBB0_614 - 0x48, 0x83, 0xc6, 0xff, //0x00003a59 addq $-1, %rsi - 0x48, 0x89, 0xf0, //0x00003a5d movq %rsi, %rax - 0xe9, 0xe2, 0xff, 0xff, 0xff, //0x00003a60 jmp LBB0_638 - //0x00003a65 LBB0_615 - 0x48, 0x83, 0xf8, 0xff, //0x00003a65 cmpq $-1, %rax - 0x48, 0x8b, 0x55, 0xc8, //0x00003a69 movq $-56(%rbp), %rdx - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003a6d jne LBB0_617 - //0x00003a73 LBB0_616 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003a73 movq $-1, %rax - 0x48, 0x8b, 0x55, 0xa0, //0x00003a7a movq $-96(%rbp), %rdx - //0x00003a7e LBB0_617 - 0x49, 0x89, 0x16, //0x00003a7e movq %rdx, (%r14) - 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003a81 jmp LBB0_638 - //0x00003a86 LBB0_618 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003a86 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003a8b jne LBB0_620 - 0x48, 0x0f, 0xbc, 0xce, //0x00003a91 bsfq %rsi, %rcx - 0x48, 0x01, 0xc1, //0x00003a95 addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00003a98 movq %rcx, $-56(%rbp) - //0x00003a9c LBB0_620 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003a9c movq $-2, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x00003aa3 movq $-48(%rbp), %r14 - //0x00003aa7 LBB0_621 - 0x48, 0x8b, 0x4d, 0xc8, //0x00003aa7 movq $-56(%rbp), %rcx - 0x49, 0x89, 0x0e, //0x00003aab movq %rcx, (%r14) - 0xe9, 0x94, 0xff, 0xff, 0xff, //0x00003aae jmp LBB0_638 - //0x00003ab3 LBB0_622 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003ab3 movq $-2, %rax - 0x80, 0xfa, 0x61, //0x00003aba cmpb $97, %dl - 0x0f, 0x85, 0x84, 0xff, 0xff, 0xff, //0x00003abd jne LBB0_638 - 0x48, 0x8d, 0x51, 0x01, //0x00003ac3 leaq $1(%rcx), %rdx - 0x49, 0x89, 0x16, //0x00003ac7 movq %rdx, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x00003aca cmpb $108, $1(%r12,%rcx) - 0x0f, 0x85, 0x71, 0xff, 0xff, 0xff, //0x00003ad0 jne LBB0_638 - 0x48, 0x8d, 0x51, 0x02, //0x00003ad6 leaq $2(%rcx), %rdx + 0x48, 0xc1, 0xe9, 0x04, //0x0000229e shrq $4, %rcx + 0x4c, 0x01, 0xe9, //0x000022a2 addq %r13, %rcx + 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x000022a5 movabsq $1085102592571150095, %rdx + 0x48, 0x21, 0xd1, //0x000022af andq %rdx, %rcx + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000022b2 movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xca, //0x000022bc imulq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x000022c0 shrq $56, %rcx + 0x49, 0x01, 0xca, //0x000022c4 addq %rcx, %r10 + 0x49, 0x83, 0xc4, 0x40, //0x000022c7 addq $64, %r12 + 0x48, 0x8b, 0x55, 0xb8, //0x000022cb movq $-72(%rbp), %rdx + 0x48, 0x83, 0xc2, 0xc0, //0x000022cf addq $-64, %rdx + 0x4d, 0x89, 0xd8, //0x000022d3 movq %r11, %r8 + 0x48, 0x83, 0xfa, 0x40, //0x000022d6 cmpq $64, %rdx + 0x48, 0x89, 0x55, 0xb8, //0x000022da movq %rdx, $-72(%rbp) + 0x0f, 0x8d, 0x44, 0xfd, 0xff, 0xff, //0x000022de jge LBB0_367 + 0xe9, 0xe4, 0xfb, 0xff, 0xff, //0x000022e4 jmp LBB0_376 + //0x000022e9 LBB0_392 + 0x48, 0x8b, 0x75, 0xa8, //0x000022e9 movq $-88(%rbp), %rsi + 0x48, 0x8b, 0x4e, 0x08, //0x000022ed movq $8(%rsi), %rcx + 0x48, 0x0f, 0xbc, 0xd2, //0x000022f1 bsfq %rdx, %rdx + 0x48, 0x2b, 0x55, 0xb8, //0x000022f5 subq $-72(%rbp), %rdx + 0x48, 0x01, 0xd1, //0x000022f9 addq %rdx, %rcx + 0x48, 0x83, 0xc1, 0x01, //0x000022fc addq $1, %rcx + 0x4c, 0x8b, 0x75, 0xd0, //0x00002300 movq $-48(%rbp), %r14 + 0x49, 0x89, 0x0e, //0x00002304 movq %rcx, (%r14) + 0x48, 0x8b, 0x56, 0x08, //0x00002307 movq $8(%rsi), %rdx + 0x48, 0x39, 0xd1, //0x0000230b cmpq %rdx, %rcx + 0x48, 0x0f, 0x47, 0xca, //0x0000230e cmovaq %rdx, %rcx + 0x49, 0x89, 0x0e, //0x00002312 movq %rcx, (%r14) + 0x0f, 0x87, 0x94, 0x17, 0x00, 0x00, //0x00002315 ja LBB0_650 + 0x48, 0x8b, 0x45, 0xc0, //0x0000231b movq $-64(%rbp), %rax + 0xe9, 0x48, 0x09, 0x00, 0x00, //0x0000231f jmp LBB0_488 + //0x00002324 LBB0_394 + 0x66, 0x0f, 0xbc, 0xc9, //0x00002324 bsfw %cx, %cx + 0x0f, 0xb7, 0xd9, //0x00002328 movzwl %cx, %ebx + 0x48, 0x89, 0xd9, //0x0000232b movq %rbx, %rcx + 0x48, 0x29, 0xf9, //0x0000232e subq %rdi, %rcx + 0x49, 0x89, 0x0e, //0x00002331 movq %rcx, (%r14) + 0x48, 0x85, 0xc9, //0x00002334 testq %rcx, %rcx + 0x0f, 0x8e, 0x42, 0xef, 0xff, 0xff, //0x00002337 jle LBB0_231 + 0x49, 0x01, 0xd8, //0x0000233d addq %rbx, %r8 + 0x48, 0x01, 0xda, //0x00002340 addq %rbx, %rdx + 0x48, 0x01, 0xde, //0x00002343 addq %rbx, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002346 .p2align 4, 0x90 + //0x00002350 LBB0_396 + 0x0f, 0xb6, 0x0e, //0x00002350 movzbl (%rsi), %ecx + 0x48, 0x83, 0xf9, 0x20, //0x00002353 cmpq $32, %rcx + 0x0f, 0x87, 0x22, 0xef, 0xff, 0xff, //0x00002357 ja LBB0_231 + 0x49, 0x0f, 0xa3, 0xcb, //0x0000235d btq %rcx, %r11 + 0x0f, 0x83, 0x18, 0xef, 0xff, 0xff, //0x00002361 jae LBB0_231 + 0x49, 0x89, 0x16, //0x00002367 movq %rdx, (%r14) + 0x49, 0x83, 0xc0, 0xff, //0x0000236a addq $-1, %r8 + 0x48, 0x83, 0xc2, 0xff, //0x0000236e addq $-1, %rdx + 0x48, 0x83, 0xc6, 0xff, //0x00002372 addq $-1, %rsi + 0x49, 0x83, 0xf8, 0x01, //0x00002376 cmpq $1, %r8 + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x0000237a jg LBB0_396 + 0xe9, 0xfa, 0xee, 0xff, 0xff, //0x00002380 jmp LBB0_231 + //0x00002385 LBB0_399 + 0x49, 0x8d, 0x4f, 0xff, //0x00002385 leaq $-1(%r15), %rcx + 0x49, 0x39, 0xc8, //0x00002389 cmpq %rcx, %r8 + 0x49, 0xf7, 0xd7, //0x0000238c notq %r15 + 0x4d, 0x0f, 0x45, 0xf9, //0x0000238f cmovneq %r9, %r15 + 0x84, 0xd2, //0x00002393 testb %dl, %dl + 0x4d, 0x0f, 0x44, 0xf9, //0x00002395 cmoveq %r9, %r15 + 0x4d, 0x89, 0xfd, //0x00002399 movq %r15, %r13 + 0xe9, 0x53, 0x03, 0x00, 0x00, //0x0000239c jmp LBB0_451 + //0x000023a1 LBB0_400 + 0x48, 0x89, 0xc6, //0x000023a1 movq %rax, %rsi + 0x48, 0x29, 0xd6, //0x000023a4 subq %rdx, %rsi + 0x0f, 0x84, 0xf6, 0x18, 0x00, 0x00, //0x000023a7 je LBB0_658 + 0x48, 0x83, 0xfe, 0x40, //0x000023ad cmpq $64, %rsi + 0x0f, 0x82, 0x32, 0x0d, 0x00, 0x00, //0x000023b1 jb LBB0_520 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000023b7 movq $-1, $-56(%rbp) + 0x48, 0x8b, 0x45, 0xc0, //0x000023bf movq $-64(%rbp), %rax + 0x31, 0xdb, //0x000023c3 xorl %ebx, %ebx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000023c5 .p2align 4, 0x90 + //0x000023d0 LBB0_403 + 0x48, 0x89, 0x75, 0xb8, //0x000023d0 movq %rsi, $-72(%rbp) + 0x49, 0x89, 0xda, //0x000023d4 movq %rbx, %r10 + 0xf3, 0x41, 0x0f, 0x6f, 0x2c, 0x04, //0x000023d7 movdqu (%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x04, 0x10, //0x000023dd movdqu $16(%r12,%rax), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x20, //0x000023e4 movdqu $32(%r12,%rax), %xmm6 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x30, //0x000023eb movdqu $48(%r12,%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xdd, //0x000023f2 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x000023f6 pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x000023fa pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x6f, 0xdf, //0x000023ff movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002403 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00002407 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xde, //0x0000240b movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000240f pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xf3, //0x00002413 pmovmskb %xmm3, %r14d + 0x66, 0x0f, 0x6f, 0xdc, //0x00002418 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000241c pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x00002420 pmovmskb %xmm3, %r15d + 0x66, 0x0f, 0x6f, 0xdd, //0x00002425 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002429 pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x0000242d pmovmskb %xmm3, %r13d + 0x66, 0x0f, 0x6f, 0xdf, //0x00002432 movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002436 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x0000243a pmovmskb %xmm3, %ebx + 0x66, 0x0f, 0x6f, 0xde, //0x0000243e movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002442 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00002446 pmovmskb %xmm3, %edi + 0x66, 0x0f, 0x6f, 0xdc, //0x0000244a movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000244e pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xcb, //0x00002452 pmovmskb %xmm3, %r9d + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002457 movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdf, //0x0000245c pcmpgtb %xmm7, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xfa, //0x00002460 pcmpgtb %xmm10, %xmm7 + 0x66, 0x0f, 0xdb, 0xfb, //0x00002465 pand %xmm3, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x00002469 pmovmskb %xmm7, %esi + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x0000246d movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xde, //0x00002472 pcmpgtb %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xf2, //0x00002476 pcmpgtb %xmm10, %xmm6 + 0x66, 0x0f, 0xdb, 0xf3, //0x0000247b pand %xmm3, %xmm6 + 0x66, 0x0f, 0xd7, 0xd6, //0x0000247f pmovmskb %xmm6, %edx + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002483 movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00002488 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x0000248c pcmpgtb %xmm10, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x00002491 pand %xmm3, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xc4, //0x00002495 pmovmskb %xmm4, %r8d + 0x49, 0xc1, 0xe7, 0x30, //0x0000249a shlq $48, %r15 + 0x49, 0xc1, 0xe6, 0x20, //0x0000249e shlq $32, %r14 + 0x4d, 0x09, 0xfe, //0x000024a2 orq %r15, %r14 + 0x48, 0xc1, 0xe1, 0x10, //0x000024a5 shlq $16, %rcx + 0x4c, 0x09, 0xf1, //0x000024a9 orq %r14, %rcx + 0x49, 0x09, 0xcb, //0x000024ac orq %rcx, %r11 + 0x49, 0xc1, 0xe1, 0x30, //0x000024af shlq $48, %r9 + 0x48, 0xc1, 0xe7, 0x20, //0x000024b3 shlq $32, %rdi + 0x4c, 0x09, 0xcf, //0x000024b7 orq %r9, %rdi + 0x48, 0xc1, 0xe3, 0x10, //0x000024ba shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x000024be orq %rdi, %rbx + 0x49, 0xc1, 0xe0, 0x30, //0x000024c1 shlq $48, %r8 + 0x48, 0xc1, 0xe2, 0x20, //0x000024c5 shlq $32, %rdx + 0x4c, 0x09, 0xc2, //0x000024c9 orq %r8, %rdx + 0x48, 0xc1, 0xe6, 0x10, //0x000024cc shlq $16, %rsi + 0x48, 0x09, 0xd6, //0x000024d0 orq %rdx, %rsi + 0x49, 0x09, 0xdd, //0x000024d3 orq %rbx, %r13 + 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x000024d6 jne LBB0_420 + 0x4d, 0x85, 0xd2, //0x000024dc testq %r10, %r10 + 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x000024df jne LBB0_422 + 0x31, 0xdb, //0x000024e5 xorl %ebx, %ebx + 0x4c, 0x8b, 0x75, 0xd0, //0x000024e7 movq $-48(%rbp), %r14 + //0x000024eb LBB0_406 + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x000024eb movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdd, //0x000024f0 pcmpgtb %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xea, //0x000024f4 pcmpgtb %xmm10, %xmm5 + 0x66, 0x0f, 0xdb, 0xeb, //0x000024f9 pand %xmm3, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x000024fd pmovmskb %xmm5, %ecx + 0x48, 0x09, 0xce, //0x00002501 orq %rcx, %rsi + 0x4d, 0x85, 0xdb, //0x00002504 testq %r11, %r11 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002507 movq $-80(%rbp), %r13 + 0x0f, 0x85, 0x93, 0x00, 0x00, 0x00, //0x0000250b jne LBB0_424 + 0x48, 0x85, 0xf6, //0x00002511 testq %rsi, %rsi + 0x0f, 0x85, 0xf7, 0x16, 0x00, 0x00, //0x00002514 jne LBB0_645 + 0x48, 0x8b, 0x75, 0xb8, //0x0000251a movq $-72(%rbp), %rsi + 0x48, 0x83, 0xc6, 0xc0, //0x0000251e addq $-64, %rsi + 0x48, 0x83, 0xc0, 0x40, //0x00002522 addq $64, %rax + 0x48, 0x83, 0xfe, 0x3f, //0x00002526 cmpq $63, %rsi + 0x0f, 0x87, 0xa0, 0xfe, 0xff, 0xff, //0x0000252a ja LBB0_403 + 0xe9, 0xd5, 0x07, 0x00, 0x00, //0x00002530 jmp LBB0_409 + //0x00002535 LBB0_420 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00002535 cmpq $-1, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x0000253a movq $-48(%rbp), %r14 + 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x0000253e jne LBB0_423 + 0x49, 0x0f, 0xbc, 0xcd, //0x00002544 bsfq %r13, %rcx + 0x48, 0x01, 0xc1, //0x00002548 addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x0000254b movq %rcx, $-56(%rbp) + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x0000254f jmp LBB0_423 + //0x00002554 LBB0_422 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002554 movq $-48(%rbp), %r14 + //0x00002558 LBB0_423 + 0x4c, 0x89, 0xd1, //0x00002558 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x0000255b notq %rcx + 0x4c, 0x21, 0xe9, //0x0000255e andq %r13, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x00002561 leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xd2, //0x00002565 orq %r10, %rdx + 0x48, 0x89, 0xd7, //0x00002568 movq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x0000256b notq %rdi + 0x4c, 0x21, 0xef, //0x0000256e andq %r13, %rdi + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002571 movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xdf, //0x0000257b andq %rbx, %rdi + 0x31, 0xdb, //0x0000257e xorl %ebx, %ebx + 0x48, 0x01, 0xcf, //0x00002580 addq %rcx, %rdi + 0x0f, 0x92, 0xc3, //0x00002583 setb %bl + 0x48, 0x01, 0xff, //0x00002586 addq %rdi, %rdi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002589 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcf, //0x00002593 xorq %rcx, %rdi + 0x48, 0x21, 0xd7, //0x00002596 andq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x00002599 notq %rdi + 0x49, 0x21, 0xfb, //0x0000259c andq %rdi, %r11 + 0xe9, 0x47, 0xff, 0xff, 0xff, //0x0000259f jmp LBB0_406 + //0x000025a4 LBB0_424 + 0x49, 0x0f, 0xbc, 0xcb, //0x000025a4 bsfq %r11, %rcx + 0x48, 0x85, 0xf6, //0x000025a8 testq %rsi, %rsi + 0x0f, 0x84, 0x8f, 0x00, 0x00, 0x00, //0x000025ab je LBB0_438 + 0x48, 0x0f, 0xbc, 0xd6, //0x000025b1 bsfq %rsi, %rdx + 0xe9, 0x8b, 0x00, 0x00, 0x00, //0x000025b5 jmp LBB0_439 + //0x000025ba LBB0_426 + 0x41, 0x89, 0xcb, //0x000025ba movl %ecx, %r11d + 0x4c, 0x03, 0x5d, 0xb8, //0x000025bd addq $-72(%rbp), %r11 + 0x49, 0x01, 0xdb, //0x000025c1 addq %rbx, %r11 + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x000025c4 jmp LBB0_428 + //0x000025c9 LBB0_427 + 0x48, 0x01, 0xde, //0x000025c9 addq %rbx, %rsi + 0x49, 0x89, 0xf3, //0x000025cc movq %rsi, %r11 + //0x000025cf LBB0_428 + 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x000025cf movq $-1, %rbx + 0x4d, 0x85, 0xf6, //0x000025d6 testq %r14, %r14 + 0x0f, 0x84, 0x56, 0x16, 0x00, 0x00, //0x000025d9 je LBB0_648 + 0x4d, 0x85, 0xed, //0x000025df testq %r13, %r13 + 0x0f, 0x84, 0x4d, 0x16, 0x00, 0x00, //0x000025e2 je LBB0_648 + 0x4d, 0x85, 0xc0, //0x000025e8 testq %r8, %r8 + 0x0f, 0x84, 0x44, 0x16, 0x00, 0x00, //0x000025eb je LBB0_648 + 0x4c, 0x2b, 0x5d, 0xb8, //0x000025f1 subq $-72(%rbp), %r11 + 0x49, 0x8d, 0x4b, 0xff, //0x000025f5 leaq $-1(%r11), %rcx + 0x49, 0x39, 0xce, //0x000025f9 cmpq %rcx, %r14 + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x000025fc je LBB0_437 + 0x49, 0x39, 0xcd, //0x00002602 cmpq %rcx, %r13 + 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x00002605 je LBB0_437 + 0x49, 0x39, 0xc8, //0x0000260b cmpq %rcx, %r8 + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x0000260e je LBB0_437 + 0x4d, 0x85, 0xed, //0x00002614 testq %r13, %r13 + 0x0f, 0x8e, 0x99, 0x00, 0x00, 0x00, //0x00002617 jle LBB0_446 + 0x49, 0x8d, 0x4d, 0xff, //0x0000261d leaq $-1(%r13), %rcx + 0x49, 0x39, 0xc8, //0x00002621 cmpq %rcx, %r8 + 0x0f, 0x84, 0x8c, 0x00, 0x00, 0x00, //0x00002624 je LBB0_446 + 0x49, 0xf7, 0xd5, //0x0000262a notq %r13 + 0x4c, 0x89, 0xeb, //0x0000262d movq %r13, %rbx + 0xe9, 0x24, 0x06, 0x00, 0x00, //0x00002630 jmp LBB0_486 + //0x00002635 LBB0_437 + 0x49, 0xf7, 0xdb, //0x00002635 negq %r11 + 0x4c, 0x89, 0xdb, //0x00002638 movq %r11, %rbx + 0xe9, 0x19, 0x06, 0x00, 0x00, //0x0000263b jmp LBB0_486 + //0x00002640 LBB0_438 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002640 movl $64, %edx + //0x00002645 LBB0_439 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002645 movabsq $4294977024, %r11 + 0x48, 0x8b, 0x5d, 0xc0, //0x0000264f movq $-64(%rbp), %rbx + 0x48, 0x39, 0xca, //0x00002653 cmpq %rcx, %rdx + 0x0f, 0x82, 0xfb, 0x15, 0x00, 0x00, //0x00002656 jb LBB0_654 + 0x48, 0x01, 0xc8, //0x0000265c addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000265f addq $1, %rax + //0x00002663 LBB0_441 + 0x48, 0x85, 0xc0, //0x00002663 testq %rax, %rax + 0x0f, 0x88, 0x55, 0x14, 0x00, 0x00, //0x00002666 js LBB0_627 + 0x49, 0x89, 0x06, //0x0000266c movq %rax, (%r14) + 0x48, 0x85, 0xdb, //0x0000266f testq %rbx, %rbx + 0x0f, 0x8f, 0x58, 0xdb, 0xff, 0xff, //0x00002672 jg LBB0_4 + 0xe9, 0xca, 0x15, 0x00, 0x00, //0x00002678 jmp LBB0_443 + //0x0000267d LBB0_131 + 0x4d, 0x85, 0xdb, //0x0000267d testq %r11, %r11 + 0x0f, 0x85, 0xd2, 0x0a, 0x00, 0x00, //0x00002680 jne LBB0_525 + 0x49, 0x01, 0xf2, //0x00002686 addq %rsi, %r10 + 0x49, 0x29, 0xf1, //0x00002689 subq %rsi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x0000268c movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002690 movabsq $4294977024, %r11 + //0x0000269a LBB0_133 + 0x4d, 0x85, 0xc9, //0x0000269a testq %r9, %r9 + 0x0f, 0x8f, 0x1c, 0x0b, 0x00, 0x00, //0x0000269d jg LBB0_529 + 0xe9, 0x07, 0x14, 0x00, 0x00, //0x000026a3 jmp LBB0_650 + //0x000026a8 LBB0_444 + 0x0f, 0xbc, 0xcb, //0x000026a8 bsfl %ebx, %ecx + //0x000026ab LBB0_445 + 0x49, 0xf7, 0xd5, //0x000026ab notq %r13 + 0x49, 0x29, 0xcd, //0x000026ae subq %rcx, %r13 + 0xe9, 0x34, 0x00, 0x00, 0x00, //0x000026b1 jmp LBB0_450 + //0x000026b6 LBB0_446 + 0x4c, 0x89, 0xf1, //0x000026b6 movq %r14, %rcx + 0x4c, 0x09, 0xc1, //0x000026b9 orq %r8, %rcx + 0x0f, 0x99, 0xc2, //0x000026bc setns %dl + 0x0f, 0x88, 0xfb, 0x01, 0x00, 0x00, //0x000026bf js LBB0_453 + 0x4d, 0x39, 0xc6, //0x000026c5 cmpq %r8, %r14 + 0x0f, 0x8c, 0xf2, 0x01, 0x00, 0x00, //0x000026c8 jl LBB0_453 + 0x49, 0xf7, 0xd6, //0x000026ce notq %r14 + 0x4c, 0x89, 0xf3, //0x000026d1 movq %r14, %rbx + 0xe9, 0x80, 0x05, 0x00, 0x00, //0x000026d4 jmp LBB0_486 + //0x000026d9 LBB0_449 + 0x4c, 0x03, 0x65, 0xc0, //0x000026d9 addq $-64(%rbp), %r12 + 0x49, 0x29, 0xf4, //0x000026dd subq %rsi, %r12 + 0x49, 0x29, 0xd4, //0x000026e0 subq %rdx, %r12 + 0x49, 0x83, 0xc4, 0xfe, //0x000026e3 addq $-2, %r12 + 0x4d, 0x89, 0xe5, //0x000026e7 movq %r12, %r13 + //0x000026ea LBB0_450 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000026ea movabsq $4294977024, %r11 + //0x000026f4 LBB0_451 + 0x4d, 0x85, 0xed, //0x000026f4 testq %r13, %r13 + 0x0f, 0x88, 0x99, 0x13, 0x00, 0x00, //0x000026f7 js LBB0_626 + //0x000026fd LBB0_452 + 0x49, 0x01, 0xc5, //0x000026fd addq %rax, %r13 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002700 movq $-48(%rbp), %r14 + 0x4d, 0x89, 0x2e, //0x00002704 movq %r13, (%r14) + 0x48, 0x85, 0xc0, //0x00002707 testq %rax, %rax + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000270a movq $-80(%rbp), %r13 + 0x0f, 0x89, 0xbc, 0xda, 0xff, 0xff, //0x0000270e jns LBB0_4 + 0xe9, 0x96, 0x13, 0x00, 0x00, //0x00002714 jmp LBB0_650 + //0x00002719 LBB0_159 + 0x4d, 0x85, 0xdb, //0x00002719 testq %r11, %r11 + 0x0f, 0x85, 0x7e, 0x0c, 0x00, 0x00, //0x0000271c jne LBB0_552 + 0x49, 0x01, 0xf2, //0x00002722 addq %rsi, %r10 + 0x49, 0x29, 0xf1, //0x00002725 subq %rsi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002728 movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000272c movabsq $4294977024, %r11 + //0x00002736 LBB0_161 + 0x4d, 0x85, 0xc9, //0x00002736 testq %r9, %r9 + 0x0f, 0x8f, 0xbf, 0x0c, 0x00, 0x00, //0x00002739 jg LBB0_556 + 0xe9, 0x6b, 0x13, 0x00, 0x00, //0x0000273f jmp LBB0_650 + //0x00002744 LBB0_50 + 0x4c, 0x01, 0xe0, //0x00002744 addq %r12, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00002747 movq $-48(%rbp), %r14 + 0x49, 0x83, 0xf9, 0x20, //0x0000274b cmpq $32, %r9 + 0x0f, 0x82, 0x9e, 0x07, 0x00, 0x00, //0x0000274f jb LBB0_503 + //0x00002755 LBB0_51 + 0xf3, 0x0f, 0x6f, 0x18, //0x00002755 movdqu (%rax), %xmm3 + 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00002759 movdqu $16(%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x0000275e movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002762 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002766 pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x0000276a movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x0000276e pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00002772 pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x74, 0xd9, //0x00002776 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x0000277a pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x74, 0xe1, //0x0000277e pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00002782 pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x00002786 shlq $16, %rcx + 0x48, 0x09, 0xca, //0x0000278a orq %rcx, %rdx + 0x48, 0xc1, 0xe7, 0x10, //0x0000278d shlq $16, %rdi + 0x48, 0x09, 0xfe, //0x00002791 orq %rdi, %rsi + 0x0f, 0x85, 0x5d, 0x0a, 0x00, 0x00, //0x00002794 jne LBB0_532 + 0x4d, 0x85, 0xc0, //0x0000279a testq %r8, %r8 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000279d movabsq $4294977024, %r11 + 0x0f, 0x85, 0x74, 0x0a, 0x00, 0x00, //0x000027a7 jne LBB0_534 + 0x45, 0x31, 0xc0, //0x000027ad xorl %r8d, %r8d + 0x48, 0x85, 0xd2, //0x000027b0 testq %rdx, %rdx + 0x0f, 0x84, 0xc4, 0x0a, 0x00, 0x00, //0x000027b3 je LBB0_536 + //0x000027b9 LBB0_54 + 0x48, 0x0f, 0xbc, 0xca, //0x000027b9 bsfq %rdx, %rcx + 0x4c, 0x29, 0xe0, //0x000027bd subq %r12, %rax + 0x48, 0x01, 0xc8, //0x000027c0 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000027c3 addq $1, %rax + 0xe9, 0xa3, 0xea, 0xff, 0xff, //0x000027c7 jmp LBB0_229 + //0x000027cc LBB0_171 + 0x4c, 0x8b, 0x65, 0xb8, //0x000027cc movq $-72(%rbp), %r12 + 0x4c, 0x01, 0xe0, //0x000027d0 addq %r12, %rax + 0x49, 0x83, 0xfe, 0x20, //0x000027d3 cmpq $32, %r14 + 0x0f, 0x82, 0x40, 0x07, 0x00, 0x00, //0x000027d7 jb LBB0_505 + //0x000027dd LBB0_172 + 0xf3, 0x0f, 0x6f, 0x20, //0x000027dd movdqu (%rax), %xmm4 + 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x000027e1 movdqu $16(%rax), %xmm3 + 0x66, 0x0f, 0x6f, 0xec, //0x000027e6 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x000027ea pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x000027ee pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x6f, 0xeb, //0x000027f2 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x000027f6 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x000027fa pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x6f, 0xec, //0x000027fe movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x00002802 pcmpeqb %xmm1, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x00002806 pmovmskb %xmm5, %r9d + 0x66, 0x0f, 0x6f, 0xeb, //0x0000280b movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x0000280f pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002813 pmovmskb %xmm5, %edx + 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x00002817 movdqa %xmm12, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x0000281c pcmpgtb %xmm3, %xmm5 + 0x66, 0x41, 0x0f, 0x64, 0xda, //0x00002820 pcmpgtb %xmm10, %xmm3 + 0x66, 0x0f, 0xdb, 0xdd, //0x00002825 pand %xmm5, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002829 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe7, 0x10, //0x0000282d shlq $16, %rdi + 0x48, 0x09, 0xf9, //0x00002831 orq %rdi, %rcx + 0x48, 0xc1, 0xe2, 0x10, //0x00002834 shlq $16, %rdx + 0x48, 0xc1, 0xe6, 0x10, //0x00002838 shlq $16, %rsi + 0x49, 0x09, 0xd1, //0x0000283c orq %rdx, %r9 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000283f movabsq $4294977024, %r11 + 0x0f, 0x85, 0x24, 0x0b, 0x00, 0x00, //0x00002849 jne LBB0_550 + 0x48, 0x85, 0xdb, //0x0000284f testq %rbx, %rbx + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002852 movq $-80(%rbp), %r13 + 0x0f, 0x85, 0xf2, 0x0b, 0x00, 0x00, //0x00002856 jne LBB0_559 + 0x31, 0xdb, //0x0000285c xorl %ebx, %ebx + //0x0000285e LBB0_175 + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x0000285e movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00002863 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00002867 pcmpgtb %xmm10, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x0000286c pand %xmm3, %xmm4 + 0x66, 0x0f, 0xd7, 0xd4, //0x00002870 pmovmskb %xmm4, %edx + 0x48, 0x09, 0xd6, //0x00002874 orq %rdx, %rsi + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002877 movl $64, %edx + 0xbf, 0x40, 0x00, 0x00, 0x00, //0x0000287c movl $64, %edi + 0x48, 0x85, 0xc9, //0x00002881 testq %rcx, %rcx + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002884 je LBB0_177 + 0x48, 0x0f, 0xbc, 0xf9, //0x0000288a bsfq %rcx, %rdi + //0x0000288e LBB0_177 + 0x48, 0x85, 0xf6, //0x0000288e testq %rsi, %rsi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002891 je LBB0_179 + 0x48, 0x0f, 0xbc, 0xd6, //0x00002897 bsfq %rsi, %rdx + //0x0000289b LBB0_179 + 0x48, 0x85, 0xc9, //0x0000289b testq %rcx, %rcx + 0x0f, 0x84, 0xd7, 0x01, 0x00, 0x00, //0x0000289e je LBB0_457 + 0x48, 0x39, 0xfa, //0x000028a4 cmpq %rdi, %rdx + 0x0f, 0x82, 0x29, 0x14, 0x00, 0x00, //0x000028a7 jb LBB0_663 + 0x4c, 0x29, 0xe0, //0x000028ad subq %r12, %rax + 0x48, 0x01, 0xf8, //0x000028b0 addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000028b3 addq $1, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x000028b7 movq $-48(%rbp), %r14 + 0xe9, 0xaf, 0xe9, 0xff, 0xff, //0x000028bb jmp LBB0_229 + //0x000028c0 LBB0_453 + 0x49, 0x8d, 0x48, 0xff, //0x000028c0 leaq $-1(%r8), %rcx + 0x49, 0x39, 0xce, //0x000028c4 cmpq %rcx, %r14 + 0x49, 0xf7, 0xd0, //0x000028c7 notq %r8 + 0x4d, 0x0f, 0x45, 0xc3, //0x000028ca cmovneq %r11, %r8 + 0x84, 0xd2, //0x000028ce testb %dl, %dl + 0x4d, 0x0f, 0x44, 0xc3, //0x000028d0 cmoveq %r11, %r8 + 0x4c, 0x89, 0xc3, //0x000028d4 movq %r8, %rbx + 0xe9, 0x7d, 0x03, 0x00, 0x00, //0x000028d7 jmp LBB0_486 + //0x000028dc LBB0_73 + 0x4c, 0x01, 0xe0, //0x000028dc addq %r12, %rax + 0x49, 0x83, 0xf9, 0x20, //0x000028df cmpq $32, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x000028e3 movq $-48(%rbp), %r14 + 0x48, 0x8b, 0x75, 0xc0, //0x000028e7 movq $-64(%rbp), %rsi + 0x0f, 0x82, 0xe5, 0x06, 0x00, 0x00, //0x000028eb jb LBB0_511 + //0x000028f1 LBB0_74 + 0xf3, 0x0f, 0x6f, 0x18, //0x000028f1 movdqu (%rax), %xmm3 + 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x000028f5 movdqu $16(%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x000028fa movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x000028fe pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002902 pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x00002906 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x0000290a pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x0000290e pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x74, 0xd9, //0x00002912 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x00002916 pmovmskb %xmm3, %ebx + 0x66, 0x0f, 0x74, 0xe1, //0x0000291a pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x0000291e pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x00002922 shlq $16, %rcx + 0x48, 0x09, 0xca, //0x00002926 orq %rcx, %rdx + 0x48, 0xc1, 0xe7, 0x10, //0x00002929 shlq $16, %rdi + 0x48, 0x09, 0xfb, //0x0000292d orq %rdi, %rbx + 0x0f, 0x85, 0x70, 0x0b, 0x00, 0x00, //0x00002930 jne LBB0_561 + 0x4d, 0x85, 0xc0, //0x00002936 testq %r8, %r8 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002939 movabsq $4294977024, %r11 + 0x0f, 0x85, 0x87, 0x0b, 0x00, 0x00, //0x00002943 jne LBB0_563 + 0x45, 0x31, 0xc0, //0x00002949 xorl %r8d, %r8d + 0x48, 0x85, 0xd2, //0x0000294c testq %rdx, %rdx + 0x0f, 0x84, 0xd8, 0x0b, 0x00, 0x00, //0x0000294f je LBB0_565 + //0x00002955 LBB0_77 + 0x48, 0x0f, 0xbc, 0xca, //0x00002955 bsfq %rdx, %rcx + 0x4c, 0x29, 0xe0, //0x00002959 subq %r12, %rax + 0x48, 0x01, 0xc8, //0x0000295c addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000295f addq $1, %rax + 0xe9, 0x8f, 0xee, 0xff, 0xff, //0x00002963 jmp LBB0_313 + //0x00002968 LBB0_198 + 0x4c, 0x8b, 0x45, 0xb8, //0x00002968 movq $-72(%rbp), %r8 + 0x4c, 0x01, 0xc0, //0x0000296c addq %r8, %rax + 0x49, 0x83, 0xfa, 0x20, //0x0000296f cmpq $32, %r10 + 0x0f, 0x82, 0x8c, 0x06, 0x00, 0x00, //0x00002973 jb LBB0_513 + //0x00002979 LBB0_199 + 0xf3, 0x0f, 0x6f, 0x20, //0x00002979 movdqu (%rax), %xmm4 + 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x0000297d movdqu $16(%rax), %xmm3 + 0x66, 0x0f, 0x6f, 0xec, //0x00002982 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002986 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xf5, //0x0000298a pmovmskb %xmm5, %esi + 0x66, 0x0f, 0x6f, 0xeb, //0x0000298e movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002992 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002996 pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x0000299a movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x0000299e pcmpeqb %xmm1, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x000029a2 pmovmskb %xmm5, %r9d + 0x66, 0x0f, 0x6f, 0xeb, //0x000029a7 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x000029ab pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x000029af pmovmskb %xmm5, %ecx + 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x000029b3 movdqa %xmm12, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x000029b8 pcmpgtb %xmm3, %xmm5 + 0x66, 0x41, 0x0f, 0x64, 0xda, //0x000029bc pcmpgtb %xmm10, %xmm3 + 0x66, 0x0f, 0xdb, 0xdd, //0x000029c1 pand %xmm5, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x000029c5 pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe2, 0x10, //0x000029c9 shlq $16, %rdx + 0x48, 0x09, 0xd6, //0x000029cd orq %rdx, %rsi + 0x48, 0xc1, 0xe1, 0x10, //0x000029d0 shlq $16, %rcx + 0x48, 0xc1, 0xe7, 0x10, //0x000029d4 shlq $16, %rdi + 0x49, 0x09, 0xc9, //0x000029d8 orq %rcx, %r9 + 0x0f, 0x85, 0x42, 0x0c, 0x00, 0x00, //0x000029db jne LBB0_579 + 0x4d, 0x85, 0xe4, //0x000029e1 testq %r12, %r12 + 0x4c, 0x8b, 0x6d, 0xb0, //0x000029e4 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000029e8 movabsq $4294977024, %r11 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x45, 0xd6, 0xff, 0xff, //0x000029f2 movdqu $-10683(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x0f, 0x85, 0x48, 0x0c, 0x00, 0x00, //0x000029fb jne LBB0_581 + 0x45, 0x31, 0xe4, //0x00002a01 xorl %r12d, %r12d + //0x00002a04 LBB0_202 + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002a04 movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00002a09 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00002a0d pcmpgtb %xmm10, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x00002a12 pand %xmm3, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00002a16 pmovmskb %xmm4, %ecx + 0x48, 0x09, 0xcf, //0x00002a1a orq %rcx, %rdi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00002a1d movl $64, %ecx + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002a22 movl $64, %edx + 0x48, 0x85, 0xf6, //0x00002a27 testq %rsi, %rsi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002a2a je LBB0_204 + 0x48, 0x0f, 0xbc, 0xd6, //0x00002a30 bsfq %rsi, %rdx + //0x00002a34 LBB0_204 + 0x48, 0x85, 0xff, //0x00002a34 testq %rdi, %rdi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002a37 je LBB0_206 + 0x48, 0x0f, 0xbc, 0xcf, //0x00002a3d bsfq %rdi, %rcx + //0x00002a41 LBB0_206 + 0x48, 0x85, 0xf6, //0x00002a41 testq %rsi, %rsi + 0x0f, 0x84, 0xfe, 0x00, 0x00, 0x00, //0x00002a44 je LBB0_469 + 0x48, 0x39, 0xd1, //0x00002a4a cmpq %rdx, %rcx + 0x0f, 0x82, 0x92, 0x12, 0x00, 0x00, //0x00002a4d jb LBB0_664 + 0x4c, 0x29, 0xc0, //0x00002a53 subq %r8, %rax + 0x48, 0x01, 0xd0, //0x00002a56 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002a59 addq $1, %rax + 0x48, 0x8b, 0x75, 0xc0, //0x00002a5d movq $-64(%rbp), %rsi + 0xe9, 0x91, 0xed, 0xff, 0xff, //0x00002a61 jmp LBB0_313 + //0x00002a66 LBB0_454 + 0x89, 0xd9, //0x00002a66 movl %ebx, %ecx + 0xe9, 0x3e, 0xfc, 0xff, 0xff, //0x00002a68 jmp LBB0_445 + //0x00002a6d LBB0_455 + 0x89, 0xf1, //0x00002a6d movl %esi, %ecx + 0xe9, 0x37, 0xfc, 0xff, 0xff, //0x00002a6f jmp LBB0_445 + //0x00002a74 LBB0_456 + 0x89, 0xd1, //0x00002a74 movl %edx, %ecx + 0xe9, 0x30, 0xfc, 0xff, 0xff, //0x00002a76 jmp LBB0_445 + //0x00002a7b LBB0_457 + 0x48, 0x85, 0xf6, //0x00002a7b testq %rsi, %rsi + 0x0f, 0x85, 0x52, 0x12, 0x00, 0x00, //0x00002a7e jne LBB0_663 + 0x48, 0x83, 0xc0, 0x20, //0x00002a84 addq $32, %rax + 0x49, 0x83, 0xc6, 0xe0, //0x00002a88 addq $-32, %r14 + 0x48, 0x85, 0xdb, //0x00002a8c testq %rbx, %rbx + 0x0f, 0x85, 0x9f, 0x04, 0x00, 0x00, //0x00002a8f jne LBB0_506 + //0x00002a95 LBB0_459 + 0x48, 0x8b, 0x4d, 0xc8, //0x00002a95 movq $-56(%rbp), %rcx + 0x4d, 0x85, 0xf6, //0x00002a99 testq %r14, %r14 + 0x0f, 0x84, 0xf8, 0x11, 0x00, 0x00, //0x00002a9c je LBB0_508 + //0x00002aa2 LBB0_460 + 0x0f, 0xb6, 0x10, //0x00002aa2 movzbl (%rax), %edx + 0x80, 0xfa, 0x22, //0x00002aa5 cmpb $34, %dl + 0x0f, 0x84, 0x8a, 0x00, 0x00, 0x00, //0x00002aa8 je LBB0_468 + 0x80, 0xfa, 0x5c, //0x00002aae cmpb $92, %dl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002ab1 je LBB0_464 + 0x80, 0xfa, 0x1f, //0x00002ab7 cmpb $31, %dl + 0x0f, 0x86, 0x30, 0x12, 0x00, 0x00, //0x00002aba jbe LBB0_665 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002ac0 movq $-1, %rdx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002ac7 movl $1, %esi + 0x48, 0x01, 0xf0, //0x00002acc addq %rsi, %rax + 0x49, 0x01, 0xd6, //0x00002acf addq %rdx, %r14 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002ad2 jne LBB0_460 + 0xe9, 0xbd, 0x11, 0x00, 0x00, //0x00002ad8 jmp LBB0_508 + //0x00002add LBB0_464 + 0x49, 0x83, 0xfe, 0x01, //0x00002add cmpq $1, %r14 + 0x0f, 0x84, 0xb3, 0x11, 0x00, 0x00, //0x00002ae1 je LBB0_508 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002ae7 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00002aec movdqa %xmm2, %xmm5 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00002af0 movq $-2, %rdx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002af7 movl $2, %esi + 0x48, 0x83, 0xf9, 0xff, //0x00002afc cmpq $-1, %rcx + 0x0f, 0x85, 0x0a, 0x00, 0x00, 0x00, //0x00002b00 jne LBB0_467 + 0x48, 0x89, 0xc1, //0x00002b06 movq %rax, %rcx + 0x4c, 0x29, 0xe1, //0x00002b09 subq %r12, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00002b0c movq %rcx, $-56(%rbp) + //0x00002b10 LBB0_467 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002b10 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002b14 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x00002b1e movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00002b22 movdqa %xmm6, %xmm13 + 0x48, 0x01, 0xf0, //0x00002b27 addq %rsi, %rax + 0x49, 0x01, 0xd6, //0x00002b2a addq %rdx, %r14 + 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x00002b2d jne LBB0_460 + 0xe9, 0x62, 0x11, 0x00, 0x00, //0x00002b33 jmp LBB0_508 + //0x00002b38 LBB0_468 + 0x4c, 0x29, 0xe0, //0x00002b38 subq %r12, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002b3b addq $1, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00002b3f movq $-48(%rbp), %r14 + 0xe9, 0x27, 0xe7, 0xff, 0xff, //0x00002b43 jmp LBB0_229 + //0x00002b48 LBB0_469 + 0x48, 0x85, 0xff, //0x00002b48 testq %rdi, %rdi + 0x0f, 0x85, 0x94, 0x11, 0x00, 0x00, //0x00002b4b jne LBB0_664 + 0x48, 0x83, 0xc0, 0x20, //0x00002b51 addq $32, %rax + 0x49, 0x83, 0xc2, 0xe0, //0x00002b55 addq $-32, %r10 + 0x4d, 0x85, 0xe4, //0x00002b59 testq %r12, %r12 + 0x0f, 0x85, 0xc3, 0x04, 0x00, 0x00, //0x00002b5c jne LBB0_514 + //0x00002b62 LBB0_471 + 0x48, 0x8b, 0x4d, 0xc8, //0x00002b62 movq $-56(%rbp), %rcx + 0x4d, 0x85, 0xd2, //0x00002b66 testq %r10, %r10 + 0x0f, 0x84, 0x60, 0x0f, 0x00, 0x00, //0x00002b69 je LBB0_628 + //0x00002b6f LBB0_472 + 0x0f, 0xb6, 0x10, //0x00002b6f movzbl (%rax), %edx + 0x80, 0xfa, 0x22, //0x00002b72 cmpb $34, %dl + 0x0f, 0x84, 0xb5, 0x00, 0x00, 0x00, //0x00002b75 je LBB0_482 + 0x80, 0xfa, 0x5c, //0x00002b7b cmpb $92, %dl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002b7e je LBB0_477 + 0x80, 0xfa, 0x1f, //0x00002b84 cmpb $31, %dl + 0x0f, 0x86, 0x6f, 0x11, 0x00, 0x00, //0x00002b87 jbe LBB0_666 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002b8d movq $-1, %rdx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002b94 movl $1, %esi + //0x00002b99 LBB0_476 + 0x48, 0x01, 0xf0, //0x00002b99 addq %rsi, %rax + 0x49, 0x01, 0xd2, //0x00002b9c addq %rdx, %r10 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002b9f jne LBB0_472 + 0xe9, 0x25, 0x0f, 0x00, 0x00, //0x00002ba5 jmp LBB0_628 + //0x00002baa LBB0_477 + 0x49, 0x83, 0xfa, 0x01, //0x00002baa cmpq $1, %r10 + 0x0f, 0x84, 0x05, 0x11, 0x00, 0x00, //0x00002bae je LBB0_524 + 0x66, 0x0f, 0x6f, 0xea, //0x00002bb4 movdqa %xmm2, %xmm5 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00002bb8 movq $-2, %rdx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002bbf movl $2, %esi + 0x48, 0x83, 0xf9, 0xff, //0x00002bc4 cmpq $-1, %rcx + 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x00002bc8 je LBB0_480 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002bce movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002bd2 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002bd6 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x00002be0 movdqa %xmm5, %xmm2 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x53, 0xd4, 0xff, 0xff, //0x00002be4 movdqu $-11181(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x4c, 0x8b, 0x45, 0xb8, //0x00002bed movq $-72(%rbp), %r8 + 0xe9, 0xa3, 0xff, 0xff, 0xff, //0x00002bf1 jmp LBB0_476 + //0x00002bf6 LBB0_480 + 0x48, 0x89, 0xc1, //0x00002bf6 movq %rax, %rcx + 0x4c, 0x8b, 0x45, 0xb8, //0x00002bf9 movq $-72(%rbp), %r8 + 0x4c, 0x29, 0xc1, //0x00002bfd subq %r8, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00002c00 movq %rcx, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x00002c04 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002c08 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002c0c movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x00002c16 movdqa %xmm5, %xmm2 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x1d, 0xd4, 0xff, 0xff, //0x00002c1a movdqu $-11235(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0xe9, 0x71, 0xff, 0xff, 0xff, //0x00002c23 jmp LBB0_476 + //0x00002c28 LBB0_481 + 0x0f, 0xbc, 0xce, //0x00002c28 bsfl %esi, %ecx + 0xe9, 0x23, 0x00, 0x00, 0x00, //0x00002c2b jmp LBB0_485 + //0x00002c30 LBB0_482 + 0x4c, 0x29, 0xc0, //0x00002c30 subq %r8, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002c33 addq $1, %rax + 0x48, 0x8b, 0x75, 0xc0, //0x00002c37 movq $-64(%rbp), %rsi + 0xe9, 0xb7, 0xeb, 0xff, 0xff, //0x00002c3b jmp LBB0_313 + //0x00002c40 LBB0_483 + 0x49, 0x01, 0xc4, //0x00002c40 addq %rax, %r12 + 0x49, 0x29, 0xf4, //0x00002c43 subq %rsi, %r12 + 0x48, 0xf7, 0xd3, //0x00002c46 notq %rbx + 0x4c, 0x01, 0xe3, //0x00002c49 addq %r12, %rbx + 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00002c4c jmp LBB0_486 + //0x00002c51 LBB0_484 + 0x89, 0xd1, //0x00002c51 movl %edx, %ecx + //0x00002c53 LBB0_485 + 0x48, 0xf7, 0xd3, //0x00002c53 notq %rbx + 0x48, 0x29, 0xcb, //0x00002c56 subq %rcx, %rbx + //0x00002c59 LBB0_486 + 0x48, 0x85, 0xdb, //0x00002c59 testq %rbx, %rbx + 0x0f, 0x88, 0xd3, 0x0f, 0x00, 0x00, //0x00002c5c js LBB0_648 + //0x00002c62 LBB0_487 + 0x48, 0x01, 0xc3, //0x00002c62 addq %rax, %rbx + 0x4c, 0x8b, 0x75, 0xd0, //0x00002c65 movq $-48(%rbp), %r14 + 0x49, 0x89, 0x1e, //0x00002c69 movq %rbx, (%r14) + //0x00002c6c LBB0_488 + 0x48, 0x85, 0xc0, //0x00002c6c testq %rax, %rax + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002c6f movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002c73 movabsq $4294977024, %r11 + 0x0f, 0x8f, 0x4d, 0xd5, 0xff, 0xff, //0x00002c7d jg LBB0_4 + 0xe9, 0xe0, 0x0d, 0x00, 0x00, //0x00002c83 jmp LBB0_232 + //0x00002c88 LBB0_246 + 0x4c, 0x01, 0xe0, //0x00002c88 addq %r12, %rax + 0x49, 0x83, 0xf9, 0x20, //0x00002c8b cmpq $32, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002c8f movq $-48(%rbp), %r14 + 0x48, 0x8b, 0x5d, 0xc0, //0x00002c93 movq $-64(%rbp), %rbx + 0x0f, 0x82, 0x3e, 0x04, 0x00, 0x00, //0x00002c97 jb LBB0_519 + //0x00002c9d LBB0_247 + 0xf3, 0x0f, 0x6f, 0x18, //0x00002c9d movdqu (%rax), %xmm3 + 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00002ca1 movdqu $16(%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x00002ca6 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002caa pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002cae pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x00002cb2 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002cb6 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00002cba pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x74, 0xd9, //0x00002cbe pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002cc2 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x74, 0xe1, //0x00002cc6 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00002cca pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x00002cce shlq $16, %rcx + 0x48, 0x09, 0xca, //0x00002cd2 orq %rcx, %rdx + 0x48, 0xc1, 0xe7, 0x10, //0x00002cd5 shlq $16, %rdi + 0x48, 0x09, 0xfe, //0x00002cd9 orq %rdi, %rsi + 0x0f, 0x85, 0x23, 0x0b, 0x00, 0x00, //0x00002cdc jne LBB0_595 + 0x4d, 0x85, 0xc0, //0x00002ce2 testq %r8, %r8 + 0x0f, 0x85, 0x47, 0x0b, 0x00, 0x00, //0x00002ce5 jne LBB0_597 + 0x45, 0x31, 0xc0, //0x00002ceb xorl %r8d, %r8d + 0x48, 0x85, 0xd2, //0x00002cee testq %rdx, %rdx + 0x0f, 0x84, 0x9d, 0x0b, 0x00, 0x00, //0x00002cf1 je LBB0_599 + //0x00002cf7 LBB0_250 + 0x48, 0x0f, 0xbc, 0xca, //0x00002cf7 bsfq %rdx, %rcx + 0x4c, 0x29, 0xe0, //0x00002cfb subq %r12, %rax + 0x48, 0x01, 0xc8, //0x00002cfe addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002d01 addq $1, %rax + 0xe9, 0x59, 0xf9, 0xff, 0xff, //0x00002d05 jmp LBB0_441 + //0x00002d0a LBB0_409 + 0x4c, 0x01, 0xe0, //0x00002d0a addq %r12, %rax + 0x49, 0x89, 0xf2, //0x00002d0d movq %rsi, %r10 + 0x48, 0x83, 0xfe, 0x20, //0x00002d10 cmpq $32, %rsi + 0x0f, 0x82, 0xed, 0x03, 0x00, 0x00, //0x00002d14 jb LBB0_521 + //0x00002d1a LBB0_410 + 0xf3, 0x0f, 0x6f, 0x20, //0x00002d1a movdqu (%rax), %xmm4 + 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00002d1e movdqu $16(%rax), %xmm3 + 0x66, 0x0f, 0x6f, 0xec, //0x00002d23 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002d27 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xf5, //0x00002d2b pmovmskb %xmm5, %esi + 0x66, 0x0f, 0x6f, 0xeb, //0x00002d2f movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002d33 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00002d37 pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x6f, 0xec, //0x00002d3b movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x00002d3f pcmpeqb %xmm1, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x00002d43 pmovmskb %xmm5, %r9d + 0x66, 0x0f, 0x6f, 0xeb, //0x00002d48 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x00002d4c pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002d50 pmovmskb %xmm5, %edx + 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x00002d54 movdqa %xmm12, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x00002d59 pcmpgtb %xmm3, %xmm5 + 0x66, 0x41, 0x0f, 0x64, 0xda, //0x00002d5d pcmpgtb %xmm10, %xmm3 + 0x66, 0x0f, 0xdb, 0xdd, //0x00002d62 pand %xmm5, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00002d66 pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x00002d6a shlq $16, %rcx + 0x48, 0x09, 0xce, //0x00002d6e orq %rcx, %rsi + 0x48, 0xc1, 0xe2, 0x10, //0x00002d71 shlq $16, %rdx + 0x48, 0xc1, 0xe7, 0x10, //0x00002d75 shlq $16, %rdi + 0x49, 0x09, 0xd1, //0x00002d79 orq %rdx, %r9 + 0x0f, 0x85, 0xf6, 0x0b, 0x00, 0x00, //0x00002d7c jne LBB0_613 + 0x48, 0x85, 0xdb, //0x00002d82 testq %rbx, %rbx + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002d85 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002d89 movabsq $4294977024, %r11 + 0x0f, 0x85, 0x0c, 0x0c, 0x00, 0x00, //0x00002d93 jne LBB0_615 + 0x31, 0xdb, //0x00002d99 xorl %ebx, %ebx + //0x00002d9b LBB0_413 + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002d9b movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00002da0 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00002da4 pcmpgtb %xmm10, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x00002da9 pand %xmm3, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00002dad pmovmskb %xmm4, %ecx + 0x48, 0x09, 0xcf, //0x00002db1 orq %rcx, %rdi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00002db4 movl $64, %ecx + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002db9 movl $64, %edx + 0x48, 0x85, 0xf6, //0x00002dbe testq %rsi, %rsi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002dc1 je LBB0_415 + 0x48, 0x0f, 0xbc, 0xd6, //0x00002dc7 bsfq %rsi, %rdx + //0x00002dcb LBB0_415 + 0x48, 0x85, 0xff, //0x00002dcb testq %rdi, %rdi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002dce je LBB0_417 + 0x48, 0x0f, 0xbc, 0xcf, //0x00002dd4 bsfq %rdi, %rcx + //0x00002dd8 LBB0_417 + 0x48, 0x85, 0xf6, //0x00002dd8 testq %rsi, %rsi + 0x0f, 0x84, 0x5c, 0x00, 0x00, 0x00, //0x00002ddb je LBB0_491 + 0x4c, 0x29, 0xe0, //0x00002de1 subq %r12, %rax + 0x48, 0x39, 0xd1, //0x00002de4 cmpq %rdx, %rcx + 0x0f, 0x82, 0x24, 0x0f, 0x00, 0x00, //0x00002de7 jb LBB0_668 + 0x48, 0x01, 0xd0, //0x00002ded addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002df0 addq $1, %rax + 0x48, 0x8b, 0x5d, 0xc0, //0x00002df4 movq $-64(%rbp), %rbx + 0xe9, 0x66, 0xf8, 0xff, 0xff, //0x00002df8 jmp LBB0_441 + //0x00002dfd LBB0_489 + 0x4b, 0x8d, 0x04, 0x04, //0x00002dfd leaq (%r12,%r8), %rax + 0x48, 0x85, 0xc9, //0x00002e01 testq %rcx, %rcx + 0x4c, 0x8b, 0x75, 0xd0, //0x00002e04 movq $-48(%rbp), %r14 + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00002e08 movabsq $17596481021440, %rdi + 0x0f, 0x85, 0xa9, 0xdd, 0xff, 0xff, //0x00002e12 jne LBB0_139 + 0xe9, 0xe4, 0xdd, 0xff, 0xff, //0x00002e18 jmp LBB0_146 + //0x00002e1d LBB0_490 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002e1d movq $-1, %r8 + 0x48, 0x89, 0xfe, //0x00002e24 movq %rdi, %rsi + 0x4d, 0x89, 0xf3, //0x00002e27 movq %r14, %r11 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002e2a movq $-1, %r15 + 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002e31 movq $-1, %r10 + 0xe9, 0x96, 0xd9, 0xff, 0xff, //0x00002e38 jmp LBB0_105 + //0x00002e3d LBB0_491 + 0x48, 0x85, 0xff, //0x00002e3d testq %rdi, %rdi + 0x0f, 0x85, 0xe0, 0x0e, 0x00, 0x00, //0x00002e40 jne LBB0_669 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002e46 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00002e4b movdqa %xmm2, %xmm5 + 0x48, 0x83, 0xc0, 0x20, //0x00002e4f addq $32, %rax + 0x49, 0x83, 0xc2, 0xe0, //0x00002e53 addq $-32, %r10 + 0x48, 0x85, 0xdb, //0x00002e57 testq %rbx, %rbx + 0x0f, 0x85, 0xb9, 0x02, 0x00, 0x00, //0x00002e5a jne LBB0_522 + //0x00002e60 LBB0_493 + 0x48, 0x8b, 0x55, 0xc8, //0x00002e60 movq $-56(%rbp), %rdx + 0x4d, 0x85, 0xd2, //0x00002e64 testq %r10, %r10 + 0x0f, 0x84, 0x4c, 0x0e, 0x00, 0x00, //0x00002e67 je LBB0_524 + //0x00002e6d LBB0_494 + 0x0f, 0xb6, 0x08, //0x00002e6d movzbl (%rax), %ecx + 0x80, 0xf9, 0x22, //0x00002e70 cmpb $34, %cl + 0x0f, 0x84, 0x11, 0x01, 0x00, 0x00, //0x00002e73 je LBB0_509 + 0x80, 0xf9, 0x5c, //0x00002e79 cmpb $92, %cl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002e7c je LBB0_499 + 0x80, 0xf9, 0x1f, //0x00002e82 cmpb $31, %cl + 0x0f, 0x86, 0xa6, 0x0e, 0x00, 0x00, //0x00002e85 jbe LBB0_670 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002e8b movq $-1, %rcx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002e92 movl $1, %esi + //0x00002e97 LBB0_498 + 0x48, 0x01, 0xf0, //0x00002e97 addq %rsi, %rax + 0x49, 0x01, 0xca, //0x00002e9a addq %rcx, %r10 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002e9d jne LBB0_494 + 0xe9, 0x11, 0x0e, 0x00, 0x00, //0x00002ea3 jmp LBB0_524 + //0x00002ea8 LBB0_499 + 0x49, 0x83, 0xfa, 0x01, //0x00002ea8 cmpq $1, %r10 + 0x0f, 0x84, 0x07, 0x0e, 0x00, 0x00, //0x00002eac je LBB0_524 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002eb2 movq $-2, %rcx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002eb9 movl $2, %esi + 0x48, 0x83, 0xfa, 0xff, //0x00002ebe cmpq $-1, %rdx + 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00002ec2 jne LBB0_498 + 0x48, 0x89, 0xc2, //0x00002ec8 movq %rax, %rdx + 0x4c, 0x29, 0xe2, //0x00002ecb subq %r12, %rdx + 0x48, 0x89, 0x55, 0xc8, //0x00002ece movq %rdx, $-56(%rbp) + 0xe9, 0xc0, 0xff, 0xff, 0xff, //0x00002ed2 jmp LBB0_498 + //0x00002ed7 LBB0_502 + 0x48, 0x8b, 0x45, 0xc0, //0x00002ed7 movq $-64(%rbp), %rax + 0x4c, 0x01, 0xe0, //0x00002edb addq %r12, %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002ede movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x00002ee6 xorl %r8d, %r8d + 0x49, 0x83, 0xf9, 0x20, //0x00002ee9 cmpq $32, %r9 + 0x0f, 0x83, 0x62, 0xf8, 0xff, 0xff, //0x00002eed jae LBB0_51 + //0x00002ef3 LBB0_503 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002ef3 movabsq $4294977024, %r11 + 0xe9, 0x83, 0x03, 0x00, 0x00, //0x00002efd jmp LBB0_537 + //0x00002f02 LBB0_504 + 0x48, 0x8b, 0x45, 0xc0, //0x00002f02 movq $-64(%rbp), %rax + 0x4c, 0x01, 0xe0, //0x00002f06 addq %r12, %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002f09 movq $-1, $-56(%rbp) + 0x31, 0xdb, //0x00002f11 xorl %ebx, %ebx + 0x49, 0x83, 0xfe, 0x20, //0x00002f13 cmpq $32, %r14 + 0x0f, 0x83, 0xc0, 0xf8, 0xff, 0xff, //0x00002f17 jae LBB0_172 + //0x00002f1d LBB0_505 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002f1d movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f21 movabsq $4294977024, %r11 + 0x48, 0x85, 0xdb, //0x00002f2b testq %rbx, %rbx + 0x0f, 0x84, 0x61, 0xfb, 0xff, 0xff, //0x00002f2e je LBB0_459 + //0x00002f34 LBB0_506 + 0x4d, 0x85, 0xf6, //0x00002f34 testq %r14, %r14 + 0x0f, 0x84, 0x5d, 0x0d, 0x00, 0x00, //0x00002f37 je LBB0_508 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002f3d movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00002f42 movdqa %xmm2, %xmm5 + 0x4c, 0x89, 0xe1, //0x00002f46 movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x00002f49 notq %rcx + 0x48, 0x01, 0xc1, //0x00002f4c addq %rax, %rcx + 0x48, 0x8b, 0x75, 0xc8, //0x00002f4f movq $-56(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x00002f53 cmpq $-1, %rsi + 0x48, 0x89, 0xf2, //0x00002f57 movq %rsi, %rdx + 0x48, 0x0f, 0x44, 0xd1, //0x00002f5a cmoveq %rcx, %rdx + 0x48, 0x0f, 0x45, 0xce, //0x00002f5e cmovneq %rsi, %rcx + 0x48, 0x83, 0xc0, 0x01, //0x00002f62 addq $1, %rax + 0x49, 0x83, 0xc6, 0xff, //0x00002f66 addq $-1, %r14 + 0x48, 0x89, 0x55, 0xc8, //0x00002f6a movq %rdx, $-56(%rbp) + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002f6e movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f72 movabsq $4294977024, %r11 + 0x4d, 0x85, 0xf6, //0x00002f7c testq %r14, %r14 + 0x0f, 0x85, 0x1d, 0xfb, 0xff, 0xff, //0x00002f7f jne LBB0_460 + 0xe9, 0x10, 0x0d, 0x00, 0x00, //0x00002f85 jmp LBB0_508 + //0x00002f8a LBB0_509 + 0x4c, 0x29, 0xe0, //0x00002f8a subq %r12, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002f8d addq $1, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00002f91 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002f95 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f99 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x00002fa3 movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00002fa7 movdqa %xmm6, %xmm13 + 0x48, 0x8b, 0x5d, 0xc0, //0x00002fac movq $-64(%rbp), %rbx + 0xe9, 0xae, 0xf6, 0xff, 0xff, //0x00002fb0 jmp LBB0_441 + //0x00002fb5 LBB0_510 + 0x49, 0x8d, 0x04, 0x14, //0x00002fb5 leaq (%r12,%rdx), %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002fb9 movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x00002fc1 xorl %r8d, %r8d + 0x49, 0x83, 0xf9, 0x20, //0x00002fc4 cmpq $32, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002fc8 movq $-48(%rbp), %r14 + 0x48, 0x8b, 0x75, 0xc0, //0x00002fcc movq $-64(%rbp), %rsi + 0x0f, 0x83, 0x1b, 0xf9, 0xff, 0xff, //0x00002fd0 jae LBB0_74 + //0x00002fd6 LBB0_511 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002fd6 movabsq $4294977024, %r11 + 0xe9, 0x50, 0x05, 0x00, 0x00, //0x00002fe0 jmp LBB0_566 + //0x00002fe5 LBB0_512 + 0x48, 0x8b, 0x45, 0xc0, //0x00002fe5 movq $-64(%rbp), %rax + 0x4c, 0x8b, 0x45, 0xb8, //0x00002fe9 movq $-72(%rbp), %r8 + 0x4c, 0x01, 0xc0, //0x00002fed addq %r8, %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002ff0 movq $-1, $-56(%rbp) + 0x45, 0x31, 0xe4, //0x00002ff8 xorl %r12d, %r12d + 0x49, 0x83, 0xfa, 0x20, //0x00002ffb cmpq $32, %r10 + 0x0f, 0x83, 0x74, 0xf9, 0xff, 0xff, //0x00002fff jae LBB0_199 + //0x00003005 LBB0_513 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003005 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003009 movabsq $4294977024, %r11 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x24, 0xd0, 0xff, 0xff, //0x00003013 movdqu $-12252(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x4d, 0x85, 0xe4, //0x0000301c testq %r12, %r12 + 0x0f, 0x84, 0x3d, 0xfb, 0xff, 0xff, //0x0000301f je LBB0_471 + //0x00003025 LBB0_514 + 0x4d, 0x85, 0xd2, //0x00003025 testq %r10, %r10 + 0x0f, 0x84, 0x8b, 0x0c, 0x00, 0x00, //0x00003028 je LBB0_524 + 0x66, 0x0f, 0x6f, 0xea, //0x0000302e movdqa %xmm2, %xmm5 + 0x4c, 0x8b, 0x45, 0xb8, //0x00003032 movq $-72(%rbp), %r8 + 0x4c, 0x89, 0xc1, //0x00003036 movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00003039 notq %rcx + 0x48, 0x01, 0xc1, //0x0000303c addq %rax, %rcx + 0x48, 0x8b, 0x75, 0xc8, //0x0000303f movq $-56(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x00003043 cmpq $-1, %rsi + 0x48, 0x89, 0xf2, //0x00003047 movq %rsi, %rdx + 0x48, 0x0f, 0x44, 0xd1, //0x0000304a cmoveq %rcx, %rdx + 0x48, 0x0f, 0x45, 0xce, //0x0000304e cmovneq %rsi, %rcx + 0x48, 0x83, 0xc0, 0x01, //0x00003052 addq $1, %rax + 0x49, 0x83, 0xc2, 0xff, //0x00003056 addq $-1, %r10 + 0x48, 0x89, 0x55, 0xc8, //0x0000305a movq %rdx, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x0000305e movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003062 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003066 movabsq $4294977024, %r11 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xc7, 0xcf, 0xff, 0xff, //0x00003070 movdqu $-12345(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x4d, 0x85, 0xd2, //0x00003079 testq %r10, %r10 + 0x0f, 0x85, 0xed, 0xfa, 0xff, 0xff, //0x0000307c jne LBB0_472 + 0xe9, 0x48, 0x0a, 0x00, 0x00, //0x00003082 jmp LBB0_628 + //0x00003087 LBB0_516 + 0x49, 0x8d, 0x0c, 0x04, //0x00003087 leaq (%r12,%rax), %rcx + 0x48, 0x85, 0xd2, //0x0000308b testq %rdx, %rdx + 0x0f, 0x85, 0x3f, 0xe9, 0xff, 0xff, //0x0000308e jne LBB0_332 + 0xe9, 0x84, 0xe9, 0xff, 0xff, //0x00003094 jmp LBB0_339 + //0x00003099 LBB0_517 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003099 movq $-1, %r14 + 0x48, 0x8b, 0x75, 0xb8, //0x000030a0 movq $-72(%rbp), %rsi + 0x4d, 0x89, 0xca, //0x000030a4 movq %r9, %r10 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000030a7 movq $-1, %r8 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000030ae movq $-1, %r13 + 0xe9, 0x93, 0xe5, 0xff, 0xff, //0x000030b5 jmp LBB0_280 + //0x000030ba LBB0_518 + 0x49, 0x8d, 0x04, 0x14, //0x000030ba leaq (%r12,%rdx), %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000030be movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x000030c6 xorl %r8d, %r8d + 0x49, 0x83, 0xf9, 0x20, //0x000030c9 cmpq $32, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x000030cd movq $-48(%rbp), %r14 + 0x48, 0x8b, 0x5d, 0xc0, //0x000030d1 movq $-64(%rbp), %rbx + 0x0f, 0x83, 0xc2, 0xfb, 0xff, 0xff, //0x000030d5 jae LBB0_247 + //0x000030db LBB0_519 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000030db movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000030e0 movdqa %xmm2, %xmm5 + 0xe9, 0xbc, 0x07, 0x00, 0x00, //0x000030e4 jmp LBB0_600 + //0x000030e9 LBB0_520 + 0x48, 0x8b, 0x45, 0xc0, //0x000030e9 movq $-64(%rbp), %rax + 0x4c, 0x01, 0xe0, //0x000030ed addq %r12, %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000030f0 movq $-1, $-56(%rbp) + 0x31, 0xdb, //0x000030f8 xorl %ebx, %ebx + 0x49, 0x89, 0xf2, //0x000030fa movq %rsi, %r10 + 0x48, 0x83, 0xfe, 0x20, //0x000030fd cmpq $32, %rsi + 0x0f, 0x83, 0x13, 0xfc, 0xff, 0xff, //0x00003101 jae LBB0_410 + //0x00003107 LBB0_521 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003107 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x0000310c movdqa %xmm2, %xmm5 + 0x48, 0x85, 0xdb, //0x00003110 testq %rbx, %rbx + 0x0f, 0x84, 0x47, 0xfd, 0xff, 0xff, //0x00003113 je LBB0_493 + //0x00003119 LBB0_522 + 0x4d, 0x85, 0xd2, //0x00003119 testq %r10, %r10 + 0x0f, 0x84, 0x97, 0x0b, 0x00, 0x00, //0x0000311c je LBB0_524 + 0x4c, 0x89, 0xe2, //0x00003122 movq %r12, %rdx + 0x48, 0xf7, 0xd2, //0x00003125 notq %rdx + 0x48, 0x01, 0xc2, //0x00003128 addq %rax, %rdx + 0x48, 0x8b, 0x75, 0xc8, //0x0000312b movq $-56(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x0000312f cmpq $-1, %rsi + 0x48, 0x89, 0xf1, //0x00003133 movq %rsi, %rcx + 0x48, 0x0f, 0x44, 0xca, //0x00003136 cmoveq %rdx, %rcx + 0x48, 0x0f, 0x45, 0xd6, //0x0000313a cmovneq %rsi, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x0000313e addq $1, %rax + 0x49, 0x83, 0xc2, 0xff, //0x00003142 addq $-1, %r10 + 0x48, 0x89, 0x4d, 0xc8, //0x00003146 movq %rcx, $-56(%rbp) + 0x4d, 0x85, 0xd2, //0x0000314a testq %r10, %r10 + 0x0f, 0x85, 0x1a, 0xfd, 0xff, 0xff, //0x0000314d jne LBB0_494 + 0xe9, 0x61, 0x0b, 0x00, 0x00, //0x00003153 jmp LBB0_524 + //0x00003158 LBB0_525 + 0x49, 0x39, 0xf1, //0x00003158 cmpq %rsi, %r9 + 0x0f, 0x84, 0x4e, 0x09, 0x00, 0x00, //0x0000315b je LBB0_650 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003161 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003166 movdqa %xmm2, %xmm5 + 0x49, 0x01, 0xf2, //0x0000316a addq %rsi, %r10 + 0x49, 0x83, 0xc2, 0x01, //0x0000316d addq $1, %r10 + 0x48, 0xf7, 0xd6, //0x00003171 notq %rsi + 0x49, 0x01, 0xf1, //0x00003174 addq %rsi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x00003177 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000317b movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000317f movabsq $4294977024, %r11 + 0x4d, 0x85, 0xc9, //0x00003189 testq %r9, %r9 + 0x0f, 0x8f, 0x2d, 0x00, 0x00, 0x00, //0x0000318c jg LBB0_529 + 0xe9, 0x18, 0x09, 0x00, 0x00, //0x00003192 jmp LBB0_650 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003197 .p2align 4, 0x90 + //0x000031a0 LBB0_527 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000031a0 movq $-2, %rcx + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x000031a7 movl $2, %eax + 0x49, 0x01, 0xc2, //0x000031ac addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000031af movq $-1, %rax + 0x49, 0x01, 0xc9, //0x000031b6 addq %rcx, %r9 + 0x0f, 0x8e, 0xf0, 0x08, 0x00, 0x00, //0x000031b9 jle LBB0_650 + //0x000031bf LBB0_529 + 0x41, 0x0f, 0xb6, 0x02, //0x000031bf movzbl (%r10), %eax + 0x3c, 0x5c, //0x000031c3 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x000031c5 je LBB0_527 + 0x3c, 0x22, //0x000031cb cmpb $34, %al + 0x0f, 0x84, 0x26, 0x06, 0x00, 0x00, //0x000031cd je LBB0_594 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000031d3 movq $-1, %rcx + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000031da movl $1, %eax + 0x49, 0x01, 0xc2, //0x000031df addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000031e2 movq $-1, %rax + 0x49, 0x01, 0xc9, //0x000031e9 addq %rcx, %r9 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x000031ec jg LBB0_529 + 0xe9, 0xb8, 0x08, 0x00, 0x00, //0x000031f2 jmp LBB0_650 + //0x000031f7 LBB0_532 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000031f7 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000031fc movdqa %xmm2, %xmm5 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003200 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x00003205 jne LBB0_535 + 0x48, 0x89, 0xc1, //0x0000320b movq %rax, %rcx + 0x4c, 0x29, 0xe1, //0x0000320e subq %r12, %rcx + 0x48, 0x0f, 0xbc, 0xfe, //0x00003211 bsfq %rsi, %rdi + 0x48, 0x01, 0xcf, //0x00003215 addq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xc8, //0x00003218 movq %rdi, $-56(%rbp) + 0xe9, 0x09, 0x00, 0x00, 0x00, //0x0000321c jmp LBB0_535 + //0x00003221 LBB0_534 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003221 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003226 movdqa %xmm2, %xmm5 + //0x0000322a LBB0_535 + 0x44, 0x89, 0xc1, //0x0000322a movl %r8d, %ecx + 0xf7, 0xd1, //0x0000322d notl %ecx + 0x21, 0xf1, //0x0000322f andl %esi, %ecx + 0x41, 0x8d, 0x3c, 0x48, //0x00003231 leal (%r8,%rcx,2), %edi + 0x8d, 0x1c, 0x09, //0x00003235 leal (%rcx,%rcx), %ebx + 0xf7, 0xd3, //0x00003238 notl %ebx + 0x21, 0xf3, //0x0000323a andl %esi, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000323c andl $-1431655766, %ebx + 0x45, 0x31, 0xc0, //0x00003242 xorl %r8d, %r8d + 0x01, 0xcb, //0x00003245 addl %ecx, %ebx + 0x41, 0x0f, 0x92, 0xc0, //0x00003247 setb %r8b + 0x01, 0xdb, //0x0000324b addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x0000324d xorl $1431655765, %ebx + 0x21, 0xfb, //0x00003253 andl %edi, %ebx + 0xf7, 0xd3, //0x00003255 notl %ebx + 0x21, 0xda, //0x00003257 andl %ebx, %edx + 0x4c, 0x8b, 0x75, 0xd0, //0x00003259 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000325d movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003261 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x0000326b movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x0000326f movdqa %xmm6, %xmm13 + 0x48, 0x85, 0xd2, //0x00003274 testq %rdx, %rdx + 0x0f, 0x85, 0x3c, 0xf5, 0xff, 0xff, //0x00003277 jne LBB0_54 + //0x0000327d LBB0_536 + 0x48, 0x83, 0xc0, 0x20, //0x0000327d addq $32, %rax + 0x49, 0x83, 0xc1, 0xe0, //0x00003281 addq $-32, %r9 + //0x00003285 LBB0_537 + 0x4d, 0x85, 0xc0, //0x00003285 testq %r8, %r8 + 0x0f, 0x85, 0x19, 0x04, 0x00, 0x00, //0x00003288 jne LBB0_583 + 0x4c, 0x89, 0xe1, //0x0000328e movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x00003291 notq %rcx + 0x48, 0x8b, 0x55, 0xc8, //0x00003294 movq $-56(%rbp), %rdx + 0x4d, 0x85, 0xc9, //0x00003298 testq %r9, %r9 + 0x0f, 0x84, 0x9e, 0x00, 0x00, 0x00, //0x0000329b je LBB0_549 + //0x000032a1 LBB0_539 + 0x48, 0x83, 0xc1, 0x01, //0x000032a1 addq $1, %rcx + //0x000032a5 LBB0_540 + 0x31, 0xf6, //0x000032a5 xorl %esi, %esi + //0x000032a7 LBB0_541 + 0x0f, 0xb6, 0x1c, 0x30, //0x000032a7 movzbl (%rax,%rsi), %ebx + 0x80, 0xfb, 0x22, //0x000032ab cmpb $34, %bl + 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x000032ae je LBB0_548 + 0x80, 0xfb, 0x5c, //0x000032b4 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000032b7 je LBB0_546 + 0x48, 0x83, 0xc6, 0x01, //0x000032bd addq $1, %rsi + 0x49, 0x39, 0xf1, //0x000032c1 cmpq %rsi, %r9 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000032c4 jne LBB0_541 + 0xe9, 0x78, 0x00, 0x00, 0x00, //0x000032ca jmp LBB0_544 + //0x000032cf LBB0_546 + 0x49, 0x8d, 0x79, 0xff, //0x000032cf leaq $-1(%r9), %rdi + 0x48, 0x39, 0xf7, //0x000032d3 cmpq %rsi, %rdi + 0x0f, 0x84, 0xbe, 0x09, 0x00, 0x00, //0x000032d6 je LBB0_508 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000032dc movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000032e1 movdqa %xmm2, %xmm5 + 0x48, 0x8d, 0x3c, 0x01, //0x000032e5 leaq (%rcx,%rax), %rdi + 0x48, 0x01, 0xf7, //0x000032e9 addq %rsi, %rdi + 0x48, 0x83, 0xfa, 0xff, //0x000032ec cmpq $-1, %rdx + 0x48, 0x8b, 0x5d, 0xc8, //0x000032f0 movq $-56(%rbp), %rbx + 0x48, 0x0f, 0x44, 0xdf, //0x000032f4 cmoveq %rdi, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x000032f8 movq %rbx, $-56(%rbp) + 0x48, 0x0f, 0x44, 0xd7, //0x000032fc cmoveq %rdi, %rdx + 0x48, 0x01, 0xf0, //0x00003300 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00003303 addq $2, %rax + 0x4c, 0x89, 0xcf, //0x00003307 movq %r9, %rdi + 0x48, 0x29, 0xf7, //0x0000330a subq %rsi, %rdi + 0x48, 0x83, 0xc7, 0xfe, //0x0000330d addq $-2, %rdi + 0x49, 0x83, 0xc1, 0xfe, //0x00003311 addq $-2, %r9 + 0x49, 0x39, 0xf1, //0x00003315 cmpq %rsi, %r9 + 0x49, 0x89, 0xf9, //0x00003318 movq %rdi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x0000331b movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000331f movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003323 movabsq $4294977024, %r11 + 0x0f, 0x85, 0x72, 0xff, 0xff, 0xff, //0x0000332d jne LBB0_540 + 0xe9, 0x43, 0x07, 0x00, 0x00, //0x00003333 jmp LBB0_624 + //0x00003338 LBB0_548 + 0x48, 0x01, 0xf0, //0x00003338 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000333b addq $1, %rax + //0x0000333f LBB0_549 + 0x4c, 0x29, 0xe0, //0x0000333f subq %r12, %rax + 0xe9, 0x28, 0xdf, 0xff, 0xff, //0x00003342 jmp LBB0_229 + //0x00003347 LBB0_544 + 0x80, 0xfb, 0x22, //0x00003347 cmpb $34, %bl + 0x0f, 0x85, 0x4a, 0x09, 0x00, 0x00, //0x0000334a jne LBB0_508 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003350 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003355 movdqa %xmm2, %xmm5 + 0x4c, 0x01, 0xc8, //0x00003359 addq %r9, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x0000335c movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003360 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003364 movabsq $4294977024, %r11 + 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x0000336e jmp LBB0_549 + //0x00003373 LBB0_550 + 0x48, 0x89, 0xdf, //0x00003373 movq %rbx, %rdi + 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00003376 movdqa %xmm13, %xmm7 + 0x66, 0x0f, 0x6f, 0xf2, //0x0000337b movdqa %xmm2, %xmm6 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000337f cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0xd0, 0x00, 0x00, 0x00, //0x00003384 jne LBB0_560 + 0x49, 0x89, 0xc0, //0x0000338a movq %rax, %r8 + 0x4d, 0x29, 0xe0, //0x0000338d subq %r12, %r8 + 0x49, 0x0f, 0xbc, 0xd9, //0x00003390 bsfq %r9, %rbx + 0x4c, 0x01, 0xc3, //0x00003394 addq %r8, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x00003397 movq %rbx, $-56(%rbp) + 0xe9, 0xba, 0x00, 0x00, 0x00, //0x0000339b jmp LBB0_560 + //0x000033a0 LBB0_552 + 0x49, 0x39, 0xf1, //0x000033a0 cmpq %rsi, %r9 + 0x0f, 0x84, 0x06, 0x07, 0x00, 0x00, //0x000033a3 je LBB0_650 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000033a9 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000033ae movdqa %xmm2, %xmm5 + 0x49, 0x01, 0xf2, //0x000033b2 addq %rsi, %r10 + 0x49, 0x83, 0xc2, 0x01, //0x000033b5 addq $1, %r10 + 0x48, 0xf7, 0xd6, //0x000033b9 notq %rsi + 0x49, 0x01, 0xf1, //0x000033bc addq %rsi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x000033bf movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x000033c3 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000033c7 movabsq $4294977024, %r11 + 0x4d, 0x85, 0xc9, //0x000033d1 testq %r9, %r9 + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x000033d4 jg LBB0_556 + 0xe9, 0xd0, 0x06, 0x00, 0x00, //0x000033da jmp LBB0_650 + //0x000033df LBB0_554 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000033df movq $-2, %rcx + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x000033e6 movl $2, %eax + 0x49, 0x01, 0xc2, //0x000033eb addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000033ee movq $-1, %rax + 0x49, 0x01, 0xc9, //0x000033f5 addq %rcx, %r9 + 0x0f, 0x8e, 0xb1, 0x06, 0x00, 0x00, //0x000033f8 jle LBB0_650 + //0x000033fe LBB0_556 + 0x41, 0x0f, 0xb6, 0x02, //0x000033fe movzbl (%r10), %eax + 0x3c, 0x5c, //0x00003402 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00003404 je LBB0_554 + 0x3c, 0x22, //0x0000340a cmpb $34, %al + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x0000340c je LBB0_621 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003412 movq $-1, %rcx + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00003419 movl $1, %eax + 0x49, 0x01, 0xc2, //0x0000341e addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003421 movq $-1, %rax + 0x49, 0x01, 0xc9, //0x00003428 addq %rcx, %r9 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x0000342b jg LBB0_556 + 0xe9, 0x79, 0x06, 0x00, 0x00, //0x00003431 jmp LBB0_650 + //0x00003436 LBB0_621 + 0x4d, 0x29, 0xe2, //0x00003436 subq %r12, %r10 + 0x49, 0x83, 0xc2, 0x01, //0x00003439 addq $1, %r10 + 0x4d, 0x89, 0x16, //0x0000343d movq %r10, (%r14) + 0x4d, 0x85, 0xc0, //0x00003440 testq %r8, %r8 + 0x0f, 0x8f, 0xc3, 0xe3, 0xff, 0xff, //0x00003443 jg LBB0_315 + 0xe9, 0x0e, 0x06, 0x00, 0x00, //0x00003449 jmp LBB0_622 + //0x0000344e LBB0_559 + 0x48, 0x89, 0xdf, //0x0000344e movq %rbx, %rdi + 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00003451 movdqa %xmm13, %xmm7 + 0x66, 0x0f, 0x6f, 0xf2, //0x00003456 movdqa %xmm2, %xmm6 + //0x0000345a LBB0_560 + 0x48, 0x89, 0xfb, //0x0000345a movq %rdi, %rbx + 0xf7, 0xd7, //0x0000345d notl %edi + 0x44, 0x21, 0xcf, //0x0000345f andl %r9d, %edi + 0x44, 0x8d, 0x04, 0x7b, //0x00003462 leal (%rbx,%rdi,2), %r8d + 0x8d, 0x14, 0x3f, //0x00003466 leal (%rdi,%rdi), %edx + 0xf7, 0xd2, //0x00003469 notl %edx + 0x44, 0x21, 0xca, //0x0000346b andl %r9d, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000346e andl $-1431655766, %edx + 0x31, 0xdb, //0x00003474 xorl %ebx, %ebx + 0x01, 0xfa, //0x00003476 addl %edi, %edx + 0x0f, 0x92, 0xc3, //0x00003478 setb %bl + 0x01, 0xd2, //0x0000347b addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x0000347d xorl $1431655765, %edx + 0x44, 0x21, 0xc2, //0x00003483 andl %r8d, %edx + 0xf7, 0xd2, //0x00003486 notl %edx + 0x21, 0xd1, //0x00003488 andl %edx, %ecx + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000348a movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000348e movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd6, //0x00003498 movdqa %xmm6, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x0000349c movdqa %xmm7, %xmm13 + 0xe9, 0xb8, 0xf3, 0xff, 0xff, //0x000034a1 jmp LBB0_175 + //0x000034a6 LBB0_561 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000034a6 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000034ab movdqa %xmm2, %xmm5 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000034af cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x000034b4 jne LBB0_564 + 0x48, 0x89, 0xc1, //0x000034ba movq %rax, %rcx + 0x4c, 0x29, 0xe1, //0x000034bd subq %r12, %rcx + 0x48, 0x0f, 0xbc, 0xfb, //0x000034c0 bsfq %rbx, %rdi + 0x48, 0x01, 0xcf, //0x000034c4 addq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xc8, //0x000034c7 movq %rdi, $-56(%rbp) + 0xe9, 0x09, 0x00, 0x00, 0x00, //0x000034cb jmp LBB0_564 + //0x000034d0 LBB0_563 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000034d0 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000034d5 movdqa %xmm2, %xmm5 + //0x000034d9 LBB0_564 + 0x44, 0x89, 0xc1, //0x000034d9 movl %r8d, %ecx + 0xf7, 0xd1, //0x000034dc notl %ecx + 0x21, 0xd9, //0x000034de andl %ebx, %ecx + 0x45, 0x8d, 0x14, 0x48, //0x000034e0 leal (%r8,%rcx,2), %r10d + 0x8d, 0x3c, 0x09, //0x000034e4 leal (%rcx,%rcx), %edi + 0xf7, 0xd7, //0x000034e7 notl %edi + 0x21, 0xdf, //0x000034e9 andl %ebx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x000034eb andl $-1431655766, %edi + 0x45, 0x31, 0xc0, //0x000034f1 xorl %r8d, %r8d + 0x01, 0xcf, //0x000034f4 addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc0, //0x000034f6 setb %r8b + 0x01, 0xff, //0x000034fa addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x000034fc xorl $1431655765, %edi + 0x44, 0x21, 0xd7, //0x00003502 andl %r10d, %edi + 0xf7, 0xd7, //0x00003505 notl %edi + 0x21, 0xfa, //0x00003507 andl %edi, %edx + 0x4c, 0x8b, 0x75, 0xd0, //0x00003509 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000350d movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003511 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x0000351b movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x0000351f movdqa %xmm6, %xmm13 + 0x48, 0x85, 0xd2, //0x00003524 testq %rdx, %rdx + 0x0f, 0x85, 0x28, 0xf4, 0xff, 0xff, //0x00003527 jne LBB0_77 + //0x0000352d LBB0_565 + 0x48, 0x83, 0xc0, 0x20, //0x0000352d addq $32, %rax + 0x49, 0x83, 0xc1, 0xe0, //0x00003531 addq $-32, %r9 + //0x00003535 LBB0_566 + 0x4d, 0x85, 0xc0, //0x00003535 testq %r8, %r8 + 0x0f, 0x85, 0xc4, 0x01, 0x00, 0x00, //0x00003538 jne LBB0_585 + 0x4c, 0x89, 0xe1, //0x0000353e movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x00003541 notq %rcx + 0x4c, 0x8b, 0x45, 0xc8, //0x00003544 movq $-56(%rbp), %r8 + 0x4d, 0x85, 0xc9, //0x00003548 testq %r9, %r9 + 0x0f, 0x84, 0x9e, 0x00, 0x00, 0x00, //0x0000354b je LBB0_578 + //0x00003551 LBB0_568 + 0x48, 0x83, 0xc1, 0x01, //0x00003551 addq $1, %rcx + //0x00003555 LBB0_569 + 0x31, 0xd2, //0x00003555 xorl %edx, %edx + //0x00003557 LBB0_570 + 0x0f, 0xb6, 0x1c, 0x10, //0x00003557 movzbl (%rax,%rdx), %ebx + 0x80, 0xfb, 0x22, //0x0000355b cmpb $34, %bl + 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x0000355e je LBB0_577 + 0x80, 0xfb, 0x5c, //0x00003564 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003567 je LBB0_575 + 0x48, 0x83, 0xc2, 0x01, //0x0000356d addq $1, %rdx + 0x49, 0x39, 0xd1, //0x00003571 cmpq %rdx, %r9 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003574 jne LBB0_570 + 0xe9, 0x78, 0x00, 0x00, 0x00, //0x0000357a jmp LBB0_573 + //0x0000357f LBB0_575 + 0x49, 0x8d, 0x79, 0xff, //0x0000357f leaq $-1(%r9), %rdi + 0x48, 0x39, 0xd7, //0x00003583 cmpq %rdx, %rdi + 0x0f, 0x84, 0x2d, 0x07, 0x00, 0x00, //0x00003586 je LBB0_524 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000358c movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003591 movdqa %xmm2, %xmm5 + 0x48, 0x8d, 0x3c, 0x01, //0x00003595 leaq (%rcx,%rax), %rdi + 0x48, 0x01, 0xd7, //0x00003599 addq %rdx, %rdi + 0x49, 0x83, 0xf8, 0xff, //0x0000359c cmpq $-1, %r8 + 0x48, 0x8b, 0x5d, 0xc8, //0x000035a0 movq $-56(%rbp), %rbx + 0x48, 0x0f, 0x44, 0xdf, //0x000035a4 cmoveq %rdi, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x000035a8 movq %rbx, $-56(%rbp) + 0x4c, 0x0f, 0x44, 0xc7, //0x000035ac cmoveq %rdi, %r8 + 0x48, 0x01, 0xd0, //0x000035b0 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x02, //0x000035b3 addq $2, %rax + 0x4c, 0x89, 0xcf, //0x000035b7 movq %r9, %rdi + 0x48, 0x29, 0xd7, //0x000035ba subq %rdx, %rdi + 0x48, 0x83, 0xc7, 0xfe, //0x000035bd addq $-2, %rdi + 0x49, 0x83, 0xc1, 0xfe, //0x000035c1 addq $-2, %r9 + 0x49, 0x39, 0xd1, //0x000035c5 cmpq %rdx, %r9 + 0x49, 0x89, 0xf9, //0x000035c8 movq %rdi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x000035cb movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x000035cf movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000035d3 movabsq $4294977024, %r11 + 0x0f, 0x85, 0x72, 0xff, 0xff, 0xff, //0x000035dd jne LBB0_569 + 0xe9, 0xe7, 0x04, 0x00, 0x00, //0x000035e3 jmp LBB0_628 + //0x000035e8 LBB0_577 + 0x48, 0x01, 0xd0, //0x000035e8 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000035eb addq $1, %rax + //0x000035ef LBB0_578 + 0x4c, 0x29, 0xe0, //0x000035ef subq %r12, %rax + 0xe9, 0x00, 0xe2, 0xff, 0xff, //0x000035f2 jmp LBB0_313 + //0x000035f7 LBB0_573 + 0x80, 0xfb, 0x22, //0x000035f7 cmpb $34, %bl + 0x0f, 0x85, 0xb9, 0x06, 0x00, 0x00, //0x000035fa jne LBB0_524 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003600 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003605 movdqa %xmm2, %xmm5 + 0x4c, 0x01, 0xc8, //0x00003609 addq %r9, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x0000360c movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003610 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003614 movabsq $4294977024, %r11 + 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x0000361e jmp LBB0_578 + //0x00003623 LBB0_579 + 0x66, 0x0f, 0x6f, 0xf2, //0x00003623 movdqa %xmm2, %xmm6 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003627 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x1b, 0x00, 0x00, 0x00, //0x0000362c jne LBB0_582 + 0x49, 0x89, 0xc0, //0x00003632 movq %rax, %r8 + 0x4c, 0x2b, 0x45, 0xb8, //0x00003635 subq $-72(%rbp), %r8 + 0x49, 0x0f, 0xbc, 0xd9, //0x00003639 bsfq %r9, %rbx + 0x4c, 0x01, 0xc3, //0x0000363d addq %r8, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x00003640 movq %rbx, $-56(%rbp) + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00003644 jmp LBB0_582 + //0x00003649 LBB0_581 + 0x66, 0x0f, 0x6f, 0xf2, //0x00003649 movdqa %xmm2, %xmm6 + //0x0000364d LBB0_582 + 0x44, 0x89, 0xe2, //0x0000364d movl %r12d, %edx + 0xf7, 0xd2, //0x00003650 notl %edx + 0x44, 0x21, 0xca, //0x00003652 andl %r9d, %edx + 0x45, 0x8d, 0x04, 0x54, //0x00003655 leal (%r12,%rdx,2), %r8d + 0x8d, 0x0c, 0x12, //0x00003659 leal (%rdx,%rdx), %ecx + 0xf7, 0xd1, //0x0000365c notl %ecx + 0x44, 0x21, 0xc9, //0x0000365e andl %r9d, %ecx + 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003661 andl $-1431655766, %ecx + 0x45, 0x31, 0xe4, //0x00003667 xorl %r12d, %r12d + 0x01, 0xd1, //0x0000366a addl %edx, %ecx + 0x41, 0x0f, 0x92, 0xc4, //0x0000366c setb %r12b + 0x01, 0xc9, //0x00003670 addl %ecx, %ecx + 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00003672 xorl $1431655765, %ecx + 0x44, 0x21, 0xc1, //0x00003678 andl %r8d, %ecx + 0xf7, 0xd1, //0x0000367b notl %ecx + 0x21, 0xce, //0x0000367d andl %ecx, %esi + 0x4c, 0x8b, 0x75, 0xd0, //0x0000367f movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003683 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003687 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd6, //0x00003691 movdqa %xmm6, %xmm2 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xa2, 0xc9, 0xff, 0xff, //0x00003695 movdqu $-13918(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x4c, 0x8b, 0x45, 0xb8, //0x0000369e movq $-72(%rbp), %r8 + 0xe9, 0x5d, 0xf3, 0xff, 0xff, //0x000036a2 jmp LBB0_202 + //0x000036a7 LBB0_583 + 0x4d, 0x85, 0xc9, //0x000036a7 testq %r9, %r9 + 0x0f, 0x84, 0xea, 0x05, 0x00, 0x00, //0x000036aa je LBB0_508 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000036b0 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000036b5 movdqa %xmm2, %xmm5 + 0x4c, 0x89, 0xe1, //0x000036b9 movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x000036bc notq %rcx + 0x48, 0x8d, 0x34, 0x08, //0x000036bf leaq (%rax,%rcx), %rsi + 0x48, 0x8b, 0x7d, 0xc8, //0x000036c3 movq $-56(%rbp), %rdi + 0x48, 0x83, 0xff, 0xff, //0x000036c7 cmpq $-1, %rdi + 0x48, 0x89, 0xfa, //0x000036cb movq %rdi, %rdx + 0x48, 0x0f, 0x44, 0xfe, //0x000036ce cmoveq %rsi, %rdi + 0x48, 0x0f, 0x44, 0xd6, //0x000036d2 cmoveq %rsi, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x000036d6 addq $1, %rax + 0x49, 0x83, 0xc1, 0xff, //0x000036da addq $-1, %r9 + 0x48, 0x89, 0x7d, 0xc8, //0x000036de movq %rdi, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x000036e2 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x000036e6 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000036ea movabsq $4294977024, %r11 + 0x4d, 0x85, 0xc9, //0x000036f4 testq %r9, %r9 + 0x0f, 0x85, 0xa4, 0xfb, 0xff, 0xff, //0x000036f7 jne LBB0_539 + 0xe9, 0x3d, 0xfc, 0xff, 0xff, //0x000036fd jmp LBB0_549 + //0x00003702 LBB0_585 + 0x4d, 0x85, 0xc9, //0x00003702 testq %r9, %r9 + 0x0f, 0x84, 0xae, 0x05, 0x00, 0x00, //0x00003705 je LBB0_524 + 0x48, 0x89, 0xf2, //0x0000370b movq %rsi, %rdx + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000370e movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003713 movdqa %xmm2, %xmm5 + 0x4c, 0x89, 0xe1, //0x00003717 movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x0000371a notq %rcx + 0x48, 0x8d, 0x34, 0x08, //0x0000371d leaq (%rax,%rcx), %rsi + 0x48, 0x8b, 0x7d, 0xc8, //0x00003721 movq $-56(%rbp), %rdi + 0x48, 0x83, 0xff, 0xff, //0x00003725 cmpq $-1, %rdi + 0x49, 0x89, 0xf8, //0x00003729 movq %rdi, %r8 + 0x48, 0x0f, 0x44, 0xfe, //0x0000372c cmoveq %rsi, %rdi + 0x4c, 0x0f, 0x44, 0xc6, //0x00003730 cmoveq %rsi, %r8 + 0x48, 0x83, 0xc0, 0x01, //0x00003734 addq $1, %rax + 0x49, 0x83, 0xc1, 0xff, //0x00003738 addq $-1, %r9 + 0x48, 0x89, 0x7d, 0xc8, //0x0000373c movq %rdi, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x00003740 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003744 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003748 movabsq $4294977024, %r11 + 0x48, 0x89, 0xd6, //0x00003752 movq %rdx, %rsi + 0x4d, 0x85, 0xc9, //0x00003755 testq %r9, %r9 + 0x0f, 0x85, 0xf3, 0xfd, 0xff, 0xff, //0x00003758 jne LBB0_568 + 0xe9, 0x8c, 0xfe, 0xff, 0xff, //0x0000375e jmp LBB0_578 + //0x00003763 LBB0_587 + 0x49, 0x39, 0xf1, //0x00003763 cmpq %rsi, %r9 + 0x0f, 0x84, 0x43, 0x03, 0x00, 0x00, //0x00003766 je LBB0_650 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000376c movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003771 movdqa %xmm2, %xmm5 + 0x49, 0x01, 0xf2, //0x00003775 addq %rsi, %r10 + 0x49, 0x83, 0xc2, 0x01, //0x00003778 addq $1, %r10 + 0x48, 0xf7, 0xd6, //0x0000377c notq %rsi + 0x49, 0x01, 0xf1, //0x0000377f addq %rsi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x00003782 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003786 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000378a movabsq $4294977024, %r11 + 0x4d, 0x85, 0xc9, //0x00003794 testq %r9, %r9 + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00003797 jg LBB0_591 + 0xe9, 0x0d, 0x03, 0x00, 0x00, //0x0000379d jmp LBB0_650 + //0x000037a2 LBB0_589 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000037a2 movq $-2, %rcx + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x000037a9 movl $2, %eax + 0x49, 0x01, 0xc2, //0x000037ae addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000037b1 movq $-1, %rax + 0x49, 0x01, 0xc9, //0x000037b8 addq %rcx, %r9 + 0x0f, 0x8e, 0xee, 0x02, 0x00, 0x00, //0x000037bb jle LBB0_650 + //0x000037c1 LBB0_591 + 0x41, 0x0f, 0xb6, 0x02, //0x000037c1 movzbl (%r10), %eax + 0x3c, 0x5c, //0x000037c5 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x000037c7 je LBB0_589 + 0x3c, 0x22, //0x000037cd cmpb $34, %al + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x000037cf je LBB0_594 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000037d5 movq $-1, %rcx + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000037dc movl $1, %eax + 0x49, 0x01, 0xc2, //0x000037e1 addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000037e4 movq $-1, %rax + 0x49, 0x01, 0xc9, //0x000037eb addq %rcx, %r9 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x000037ee jg LBB0_591 + 0xe9, 0xb6, 0x02, 0x00, 0x00, //0x000037f4 jmp LBB0_650 + //0x000037f9 LBB0_594 + 0x4d, 0x29, 0xe2, //0x000037f9 subq %r12, %r10 + 0x49, 0x83, 0xc2, 0x01, //0x000037fc addq $1, %r10 + 0xe9, 0xbe, 0xc9, 0xff, 0xff, //0x00003800 jmp LBB0_2 + //0x00003805 LBB0_595 + 0x49, 0x89, 0xda, //0x00003805 movq %rbx, %r10 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003808 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x0000380d movdqa %xmm2, %xmm5 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003811 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x22, 0x00, 0x00, 0x00, //0x00003816 jne LBB0_598 + 0x48, 0x89, 0xc1, //0x0000381c movq %rax, %rcx + 0x4c, 0x29, 0xe1, //0x0000381f subq %r12, %rcx + 0x48, 0x0f, 0xbc, 0xfe, //0x00003822 bsfq %rsi, %rdi + 0x48, 0x01, 0xcf, //0x00003826 addq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xc8, //0x00003829 movq %rdi, $-56(%rbp) + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x0000382d jmp LBB0_598 + //0x00003832 LBB0_597 + 0x49, 0x89, 0xda, //0x00003832 movq %rbx, %r10 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003835 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x0000383a movdqa %xmm2, %xmm5 + //0x0000383e LBB0_598 + 0x44, 0x89, 0xc1, //0x0000383e movl %r8d, %ecx + 0xf7, 0xd1, //0x00003841 notl %ecx + 0x21, 0xf1, //0x00003843 andl %esi, %ecx + 0x41, 0x8d, 0x3c, 0x48, //0x00003845 leal (%r8,%rcx,2), %edi + 0x8d, 0x1c, 0x09, //0x00003849 leal (%rcx,%rcx), %ebx + 0xf7, 0xd3, //0x0000384c notl %ebx + 0x21, 0xf3, //0x0000384e andl %esi, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003850 andl $-1431655766, %ebx + 0x45, 0x31, 0xc0, //0x00003856 xorl %r8d, %r8d + 0x01, 0xcb, //0x00003859 addl %ecx, %ebx + 0x41, 0x0f, 0x92, 0xc0, //0x0000385b setb %r8b + 0x01, 0xdb, //0x0000385f addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00003861 xorl $1431655765, %ebx + 0x21, 0xfb, //0x00003867 andl %edi, %ebx + 0xf7, 0xd3, //0x00003869 notl %ebx + 0x21, 0xda, //0x0000386b andl %ebx, %edx + 0x4c, 0x8b, 0x75, 0xd0, //0x0000386d movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003871 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003875 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x0000387f movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00003883 movdqa %xmm6, %xmm13 + 0x4c, 0x89, 0xd3, //0x00003888 movq %r10, %rbx + 0x48, 0x85, 0xd2, //0x0000388b testq %rdx, %rdx + 0x0f, 0x85, 0x63, 0xf4, 0xff, 0xff, //0x0000388e jne LBB0_250 + //0x00003894 LBB0_599 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003894 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003899 movdqa %xmm2, %xmm5 + 0x48, 0x83, 0xc0, 0x20, //0x0000389d addq $32, %rax + 0x49, 0x83, 0xc1, 0xe0, //0x000038a1 addq $-32, %r9 + //0x000038a5 LBB0_600 + 0x4d, 0x85, 0xc0, //0x000038a5 testq %r8, %r8 + 0x0f, 0x85, 0x53, 0x01, 0x00, 0x00, //0x000038a8 jne LBB0_617 + 0x4c, 0x89, 0xe2, //0x000038ae movq %r12, %rdx + 0x48, 0xf7, 0xd2, //0x000038b1 notq %rdx + 0x48, 0x8b, 0x75, 0xc8, //0x000038b4 movq $-56(%rbp), %rsi + 0x4d, 0x85, 0xc9, //0x000038b8 testq %r9, %r9 + 0x0f, 0x84, 0x83, 0x00, 0x00, 0x00, //0x000038bb je LBB0_612 + //0x000038c1 LBB0_602 + 0x48, 0x83, 0xc2, 0x01, //0x000038c1 addq $1, %rdx + //0x000038c5 LBB0_603 + 0x31, 0xff, //0x000038c5 xorl %edi, %edi + //0x000038c7 LBB0_604 + 0x0f, 0xb6, 0x0c, 0x38, //0x000038c7 movzbl (%rax,%rdi), %ecx + 0x80, 0xf9, 0x22, //0x000038cb cmpb $34, %cl + 0x0f, 0x84, 0x69, 0x00, 0x00, 0x00, //0x000038ce je LBB0_611 + 0x80, 0xf9, 0x5c, //0x000038d4 cmpb $92, %cl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000038d7 je LBB0_609 + 0x48, 0x83, 0xc7, 0x01, //0x000038dd addq $1, %rdi + 0x49, 0x39, 0xf9, //0x000038e1 cmpq %rdi, %r9 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000038e4 jne LBB0_604 + 0xe9, 0x78, 0x00, 0x00, 0x00, //0x000038ea jmp LBB0_607 + //0x000038ef LBB0_609 + 0x49, 0x8d, 0x49, 0xff, //0x000038ef leaq $-1(%r9), %rcx + 0x48, 0x39, 0xf9, //0x000038f3 cmpq %rdi, %rcx + 0x0f, 0x84, 0xbd, 0x03, 0x00, 0x00, //0x000038f6 je LBB0_524 + 0x4c, 0x8d, 0x04, 0x02, //0x000038fc leaq (%rdx,%rax), %r8 + 0x49, 0x01, 0xf8, //0x00003900 addq %rdi, %r8 + 0x48, 0x83, 0xfe, 0xff, //0x00003903 cmpq $-1, %rsi + 0x48, 0x8b, 0x4d, 0xc8, //0x00003907 movq $-56(%rbp), %rcx + 0x49, 0x0f, 0x44, 0xc8, //0x0000390b cmoveq %r8, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x0000390f movq %rcx, $-56(%rbp) + 0x49, 0x0f, 0x44, 0xf0, //0x00003913 cmoveq %r8, %rsi + 0x48, 0x01, 0xf8, //0x00003917 addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x0000391a addq $2, %rax + 0x4c, 0x89, 0xc9, //0x0000391e movq %r9, %rcx + 0x48, 0x29, 0xf9, //0x00003921 subq %rdi, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x00003924 addq $-2, %rcx + 0x49, 0x83, 0xc1, 0xfe, //0x00003928 addq $-2, %r9 + 0x49, 0x39, 0xf9, //0x0000392c cmpq %rdi, %r9 + 0x49, 0x89, 0xc9, //0x0000392f movq %rcx, %r9 + 0x0f, 0x85, 0x8d, 0xff, 0xff, 0xff, //0x00003932 jne LBB0_603 + 0xe9, 0x7c, 0x03, 0x00, 0x00, //0x00003938 jmp LBB0_524 + //0x0000393d LBB0_611 + 0x48, 0x01, 0xf8, //0x0000393d addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003940 addq $1, %rax + //0x00003944 LBB0_612 + 0x4c, 0x29, 0xe0, //0x00003944 subq %r12, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00003947 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000394b movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000394f movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x00003959 movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x0000395d movdqa %xmm6, %xmm13 + 0xe9, 0xfc, 0xec, 0xff, 0xff, //0x00003962 jmp LBB0_441 + //0x00003967 LBB0_607 + 0x80, 0xf9, 0x22, //0x00003967 cmpb $34, %cl + 0x0f, 0x85, 0x49, 0x03, 0x00, 0x00, //0x0000396a jne LBB0_524 + 0x4c, 0x01, 0xc8, //0x00003970 addq %r9, %rax + 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x00003973 jmp LBB0_612 + //0x00003978 LBB0_613 + 0x48, 0x89, 0xd9, //0x00003978 movq %rbx, %rcx + 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x0000397b movdqa %xmm13, %xmm7 + 0x66, 0x0f, 0x6f, 0xf2, //0x00003980 movdqa %xmm2, %xmm6 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003984 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x22, 0x00, 0x00, 0x00, //0x00003989 jne LBB0_616 + 0x49, 0x89, 0xc0, //0x0000398f movq %rax, %r8 + 0x4d, 0x29, 0xe0, //0x00003992 subq %r12, %r8 + 0x49, 0x0f, 0xbc, 0xd9, //0x00003995 bsfq %r9, %rbx + 0x4c, 0x01, 0xc3, //0x00003999 addq %r8, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x0000399c movq %rbx, $-56(%rbp) + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x000039a0 jmp LBB0_616 + //0x000039a5 LBB0_615 + 0x48, 0x89, 0xd9, //0x000039a5 movq %rbx, %rcx + 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x000039a8 movdqa %xmm13, %xmm7 + 0x66, 0x0f, 0x6f, 0xf2, //0x000039ad movdqa %xmm2, %xmm6 + //0x000039b1 LBB0_616 + 0x48, 0x89, 0xcb, //0x000039b1 movq %rcx, %rbx + 0xf7, 0xd1, //0x000039b4 notl %ecx + 0x44, 0x21, 0xc9, //0x000039b6 andl %r9d, %ecx + 0x44, 0x8d, 0x04, 0x4b, //0x000039b9 leal (%rbx,%rcx,2), %r8d + 0x8d, 0x14, 0x09, //0x000039bd leal (%rcx,%rcx), %edx + 0xf7, 0xd2, //0x000039c0 notl %edx + 0x44, 0x21, 0xca, //0x000039c2 andl %r9d, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x000039c5 andl $-1431655766, %edx + 0x31, 0xdb, //0x000039cb xorl %ebx, %ebx + 0x01, 0xca, //0x000039cd addl %ecx, %edx + 0x0f, 0x92, 0xc3, //0x000039cf setb %bl + 0x01, 0xd2, //0x000039d2 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x000039d4 xorl $1431655765, %edx + 0x44, 0x21, 0xc2, //0x000039da andl %r8d, %edx + 0xf7, 0xd2, //0x000039dd notl %edx + 0x21, 0xd6, //0x000039df andl %edx, %esi + 0x4c, 0x8b, 0x75, 0xd0, //0x000039e1 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x000039e5 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000039e9 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd6, //0x000039f3 movdqa %xmm6, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x000039f7 movdqa %xmm7, %xmm13 + 0xe9, 0x9a, 0xf3, 0xff, 0xff, //0x000039fc jmp LBB0_413 + //0x00003a01 LBB0_617 + 0x4d, 0x85, 0xc9, //0x00003a01 testq %r9, %r9 + 0x0f, 0x84, 0xaf, 0x02, 0x00, 0x00, //0x00003a04 je LBB0_524 + 0x4c, 0x89, 0xe2, //0x00003a0a movq %r12, %rdx + 0x48, 0xf7, 0xd2, //0x00003a0d notq %rdx + 0x48, 0x8d, 0x0c, 0x10, //0x00003a10 leaq (%rax,%rdx), %rcx + 0x48, 0x8b, 0x7d, 0xc8, //0x00003a14 movq $-56(%rbp), %rdi + 0x48, 0x83, 0xff, 0xff, //0x00003a18 cmpq $-1, %rdi + 0x48, 0x89, 0xfe, //0x00003a1c movq %rdi, %rsi + 0x48, 0x0f, 0x44, 0xf9, //0x00003a1f cmoveq %rcx, %rdi + 0x48, 0x0f, 0x44, 0xf1, //0x00003a23 cmoveq %rcx, %rsi + 0x48, 0x83, 0xc0, 0x01, //0x00003a27 addq $1, %rax + 0x49, 0x83, 0xc1, 0xff, //0x00003a2b addq $-1, %r9 + 0x48, 0x89, 0x7d, 0xc8, //0x00003a2f movq %rdi, $-56(%rbp) + 0x4d, 0x85, 0xc9, //0x00003a33 testq %r9, %r9 + 0x0f, 0x85, 0x85, 0xfe, 0xff, 0xff, //0x00003a36 jne LBB0_602 + 0xe9, 0x03, 0xff, 0xff, 0xff, //0x00003a3c jmp LBB0_612 + //0x00003a41 LBB0_619 + 0x49, 0x89, 0x36, //0x00003a41 movq %rsi, (%r14) + //0x00003a44 LBB0_620 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003a44 movq $-1, %rax + 0xe9, 0x5f, 0x00, 0x00, 0x00, //0x00003a4b jmp LBB0_650 + //0x00003a50 LBB0_651 + 0x48, 0xc7, 0xc0, 0xf9, 0xff, 0xff, 0xff, //0x00003a50 movq $-7, %rax + 0xe9, 0x53, 0x00, 0x00, 0x00, //0x00003a57 jmp LBB0_650 + //0x00003a5c LBB0_622 + 0x49, 0x83, 0xc0, 0xff, //0x00003a5c addq $-1, %r8 + 0x4c, 0x89, 0xc0, //0x00003a60 movq %r8, %rax + 0xe9, 0x47, 0x00, 0x00, 0x00, //0x00003a63 jmp LBB0_650 + //0x00003a68 LBB0_232 + 0x48, 0x83, 0xc0, 0xff, //0x00003a68 addq $-1, %rax + 0xe9, 0x3e, 0x00, 0x00, 0x00, //0x00003a6c jmp LBB0_650 + //0x00003a71 LBB0_623 + 0x48, 0x83, 0xf8, 0xff, //0x00003a71 cmpq $-1, %rax + 0x0f, 0x85, 0x94, 0x00, 0x00, 0x00, //0x00003a75 jne LBB0_634 + //0x00003a7b LBB0_624 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003a7b movq $-1, %rax + 0x48, 0x8b, 0x4d, 0xa0, //0x00003a82 movq $-96(%rbp), %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00003a86 movq %rcx, $-56(%rbp) + 0xe9, 0x80, 0x00, 0x00, 0x00, //0x00003a8a jmp LBB0_634 + //0x00003a8f LBB0_625 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00003a8f movq $-1, %r13 + //0x00003a96 LBB0_626 + 0x48, 0x8b, 0x4d, 0xc0, //0x00003a96 movq $-64(%rbp), %rcx + 0x4c, 0x29, 0xe9, //0x00003a9a subq %r13, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x00003a9d addq $-2, %rcx + 0x48, 0x8b, 0x45, 0xd0, //0x00003aa1 movq $-48(%rbp), %rax + 0x48, 0x89, 0x08, //0x00003aa5 movq %rcx, (%rax) + //0x00003aa8 LBB0_649 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003aa8 movq $-2, %rax + //0x00003aaf LBB0_650 + 0x48, 0x81, 0xc4, 0x88, 0x00, 0x00, 0x00, //0x00003aaf addq $136, %rsp + 0x5b, //0x00003ab6 popq %rbx + 0x41, 0x5c, //0x00003ab7 popq %r12 + 0x41, 0x5d, //0x00003ab9 popq %r13 + 0x41, 0x5e, //0x00003abb popq %r14 + 0x41, 0x5f, //0x00003abd popq %r15 + 0x5d, //0x00003abf popq %rbp + 0xc3, //0x00003ac0 retq + //0x00003ac1 LBB0_627 + 0x48, 0x83, 0xf8, 0xff, //0x00003ac1 cmpq $-1, %rax + 0x48, 0x8b, 0x55, 0xc8, //0x00003ac5 movq $-56(%rbp), %rdx + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003ac9 jne LBB0_629 + //0x00003acf LBB0_628 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003acf movq $-1, %rax + 0x48, 0x8b, 0x55, 0xa0, //0x00003ad6 movq $-96(%rbp), %rdx + //0x00003ada LBB0_629 0x49, 0x89, 0x16, //0x00003ada movq %rdx, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x73, //0x00003add cmpb $115, $2(%r12,%rcx) - 0x0f, 0x85, 0x5e, 0xff, 0xff, 0xff, //0x00003ae3 jne LBB0_638 - 0x48, 0x8d, 0x51, 0x03, //0x00003ae9 leaq $3(%rcx), %rdx - 0x49, 0x89, 0x16, //0x00003aed movq %rdx, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x03, 0x65, //0x00003af0 cmpb $101, $3(%r12,%rcx) - 0x0f, 0x85, 0x4b, 0xff, 0xff, 0xff, //0x00003af6 jne LBB0_638 - 0x48, 0x83, 0xc1, 0x04, //0x00003afc addq $4, %rcx - 0x49, 0x89, 0x0e, //0x00003b00 movq %rcx, (%r14) - 0xe9, 0x3f, 0xff, 0xff, 0xff, //0x00003b03 jmp LBB0_638 - //0x00003b08 LBB0_627 - 0x49, 0x89, 0x06, //0x00003b08 movq %rax, (%r14) - 0x41, 0x80, 0x3c, 0x04, 0x74, //0x00003b0b cmpb $116, (%r12,%rax) - 0x0f, 0x85, 0x2a, 0xff, 0xff, 0xff, //0x00003b10 jne LBB0_637 - 0x49, 0x89, 0x0e, //0x00003b16 movq %rcx, (%r14) - 0x41, 0x80, 0x3c, 0x0c, 0x72, //0x00003b19 cmpb $114, (%r12,%rcx) - 0x0f, 0x85, 0x1c, 0xff, 0xff, 0xff, //0x00003b1e jne LBB0_637 - 0x48, 0x8d, 0x41, 0x01, //0x00003b24 leaq $1(%rcx), %rax - 0x49, 0x89, 0x06, //0x00003b28 movq %rax, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x75, //0x00003b2b cmpb $117, $1(%r12,%rcx) - 0x0f, 0x85, 0x09, 0xff, 0xff, 0xff, //0x00003b31 jne LBB0_637 - 0x48, 0x8d, 0x41, 0x02, //0x00003b37 leaq $2(%rcx), %rax + 0xe9, 0xcd, 0xff, 0xff, 0xff, //0x00003add jmp LBB0_650 + //0x00003ae2 LBB0_630 + 0x48, 0x83, 0xc6, 0xff, //0x00003ae2 addq $-1, %rsi + 0x48, 0x89, 0xf0, //0x00003ae6 movq %rsi, %rax + 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003ae9 jmp LBB0_650 + //0x00003aee LBB0_631 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003aee cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003af3 jne LBB0_633 + 0x48, 0x0f, 0xbc, 0xcf, //0x00003af9 bsfq %rdi, %rcx + 0x48, 0x01, 0xc1, //0x00003afd addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00003b00 movq %rcx, $-56(%rbp) + //0x00003b04 LBB0_633 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003b04 movq $-2, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00003b0b movq $-48(%rbp), %r14 + //0x00003b0f LBB0_634 + 0x48, 0x8b, 0x4d, 0xc8, //0x00003b0f movq $-56(%rbp), %rcx + 0x49, 0x89, 0x0e, //0x00003b13 movq %rcx, (%r14) + 0xe9, 0x94, 0xff, 0xff, 0xff, //0x00003b16 jmp LBB0_650 + //0x00003b1b LBB0_635 + 0x49, 0x89, 0x06, //0x00003b1b movq %rax, (%r14) + 0x41, 0x80, 0x3c, 0x04, 0x74, //0x00003b1e cmpb $116, (%r12,%rax) + 0x0f, 0x85, 0x7f, 0xff, 0xff, 0xff, //0x00003b23 jne LBB0_649 + 0x49, 0x89, 0x0e, //0x00003b29 movq %rcx, (%r14) + 0x41, 0x80, 0x3c, 0x0c, 0x72, //0x00003b2c cmpb $114, (%r12,%rcx) + 0x0f, 0x85, 0x71, 0xff, 0xff, 0xff, //0x00003b31 jne LBB0_649 + 0x48, 0x8d, 0x41, 0x01, //0x00003b37 leaq $1(%rcx), %rax 0x49, 0x89, 0x06, //0x00003b3b movq %rax, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x65, //0x00003b3e cmpb $101, $2(%r12,%rcx) - 0x0f, 0x85, 0xf6, 0xfe, 0xff, 0xff, //0x00003b44 jne LBB0_637 - 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00003b4a jmp LBB0_631 - //0x00003b4f LBB0_289 - 0x49, 0x89, 0x06, //0x00003b4f movq %rax, (%r14) - 0x41, 0x80, 0x3c, 0x04, 0x6e, //0x00003b52 cmpb $110, (%r12,%rax) - 0x0f, 0x85, 0xe3, 0xfe, 0xff, 0xff, //0x00003b57 jne LBB0_637 - 0x49, 0x89, 0x0e, //0x00003b5d movq %rcx, (%r14) - 0x41, 0x80, 0x3c, 0x0c, 0x75, //0x00003b60 cmpb $117, (%r12,%rcx) - 0x0f, 0x85, 0xd5, 0xfe, 0xff, 0xff, //0x00003b65 jne LBB0_637 - 0x48, 0x8d, 0x41, 0x01, //0x00003b6b leaq $1(%rcx), %rax - 0x49, 0x89, 0x06, //0x00003b6f movq %rax, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x00003b72 cmpb $108, $1(%r12,%rcx) - 0x0f, 0x85, 0xc2, 0xfe, 0xff, 0xff, //0x00003b78 jne LBB0_637 - 0x48, 0x8d, 0x41, 0x02, //0x00003b7e leaq $2(%rcx), %rax + 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x75, //0x00003b3e cmpb $117, $1(%r12,%rcx) + 0x0f, 0x85, 0x5e, 0xff, 0xff, 0xff, //0x00003b44 jne LBB0_649 + 0x48, 0x8d, 0x41, 0x02, //0x00003b4a leaq $2(%rcx), %rax + 0x49, 0x89, 0x06, //0x00003b4e movq %rax, (%r14) + 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x65, //0x00003b51 cmpb $101, $2(%r12,%rcx) + 0x0f, 0x85, 0x4b, 0xff, 0xff, 0xff, //0x00003b57 jne LBB0_649 + 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00003b5d jmp LBB0_639 + //0x00003b62 LBB0_297 + 0x49, 0x89, 0x06, //0x00003b62 movq %rax, (%r14) + 0x41, 0x80, 0x3c, 0x04, 0x6e, //0x00003b65 cmpb $110, (%r12,%rax) + 0x0f, 0x85, 0x38, 0xff, 0xff, 0xff, //0x00003b6a jne LBB0_649 + 0x49, 0x89, 0x0e, //0x00003b70 movq %rcx, (%r14) + 0x41, 0x80, 0x3c, 0x0c, 0x75, //0x00003b73 cmpb $117, (%r12,%rcx) + 0x0f, 0x85, 0x2a, 0xff, 0xff, 0xff, //0x00003b78 jne LBB0_649 + 0x48, 0x8d, 0x41, 0x01, //0x00003b7e leaq $1(%rcx), %rax 0x49, 0x89, 0x06, //0x00003b82 movq %rax, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x6c, //0x00003b85 cmpb $108, $2(%r12,%rcx) - 0x0f, 0x85, 0xaf, 0xfe, 0xff, 0xff, //0x00003b8b jne LBB0_637 - //0x00003b91 LBB0_631 - 0x48, 0x83, 0xc1, 0x03, //0x00003b91 addq $3, %rcx - 0x49, 0x89, 0x0e, //0x00003b95 movq %rcx, (%r14) - 0xe9, 0xa3, 0xfe, 0xff, 0xff, //0x00003b98 jmp LBB0_637 - //0x00003b9d LBB0_228 - 0x48, 0x83, 0xc1, 0xff, //0x00003b9d addq $-1, %rcx - 0x48, 0x89, 0xc8, //0x00003ba1 movq %rcx, %rax - 0xe9, 0x9e, 0xfe, 0xff, 0xff, //0x00003ba4 jmp LBB0_638 - //0x00003ba9 LBB0_632 - 0x48, 0x8b, 0x55, 0xc8, //0x00003ba9 movq $-56(%rbp), %rdx - 0x48, 0x83, 0xfa, 0xff, //0x00003bad cmpq $-1, %rdx - 0x0f, 0x84, 0x31, 0x00, 0x00, 0x00, //0x00003bb1 je LBB0_639 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003bb7 movq $-2, %rax - 0x49, 0x89, 0x16, //0x00003bbe movq %rdx, (%r14) - 0xe9, 0x81, 0xfe, 0xff, 0xff, //0x00003bc1 jmp LBB0_638 - //0x00003bc6 LBB0_185 - 0x48, 0x8b, 0x75, 0xc0, //0x00003bc6 movq $-64(%rbp), %rsi - 0xe9, 0x63, 0xfe, 0xff, 0xff, //0x00003bca jmp LBB0_612 - //0x00003bcf LBB0_635 - 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00003bcf movq $-1, %rbx - //0x00003bd6 LBB0_636 - 0x48, 0xf7, 0xd3, //0x00003bd6 notq %rbx - 0x48, 0x01, 0xd8, //0x00003bd9 addq %rbx, %rax - 0x48, 0x8b, 0x4d, 0xd0, //0x00003bdc movq $-48(%rbp), %rcx - 0x48, 0x89, 0x01, //0x00003be0 movq %rax, (%rcx) - 0xe9, 0x58, 0xfe, 0xff, 0xff, //0x00003be3 jmp LBB0_637 - //0x00003be8 LBB0_639 - 0x48, 0x0f, 0xbc, 0xd7, //0x00003be8 bsfq %rdi, %rdx - //0x00003bec LBB0_640 - 0x48, 0x01, 0xc2, //0x00003bec addq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003bef movq $-2, %rax - 0x49, 0x89, 0x16, //0x00003bf6 movq %rdx, (%r14) - 0xe9, 0x49, 0xfe, 0xff, 0xff, //0x00003bf9 jmp LBB0_638 - //0x00003bfe LBB0_642 - 0x48, 0x8b, 0x45, 0xb0, //0x00003bfe movq $-80(%rbp), %rax - 0x48, 0x89, 0x45, 0xa0, //0x00003c02 movq %rax, $-96(%rbp) - 0xe9, 0x0c, 0xfe, 0xff, 0xff, //0x00003c06 jmp LBB0_610 - //0x00003c0b LBB0_643 - 0x48, 0x8b, 0x45, 0xb0, //0x00003c0b movq $-80(%rbp), %rax - 0x48, 0x89, 0x45, 0xa0, //0x00003c0f movq %rax, $-96(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x00003c13 movq $-48(%rbp), %r14 - 0xe9, 0xfb, 0xfd, 0xff, 0xff, //0x00003c17 jmp LBB0_610 - //0x00003c1c LBB0_182 - 0x48, 0x01, 0xc2, //0x00003c1c addq %rax, %rdx + 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x00003b85 cmpb $108, $1(%r12,%rcx) + 0x0f, 0x85, 0x17, 0xff, 0xff, 0xff, //0x00003b8b jne LBB0_649 + 0x48, 0x8d, 0x41, 0x02, //0x00003b91 leaq $2(%rcx), %rax + 0x49, 0x89, 0x06, //0x00003b95 movq %rax, (%r14) + 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x6c, //0x00003b98 cmpb $108, $2(%r12,%rcx) + 0x0f, 0x85, 0x04, 0xff, 0xff, 0xff, //0x00003b9e jne LBB0_649 + //0x00003ba4 LBB0_639 + 0x48, 0x83, 0xc1, 0x03, //0x00003ba4 addq $3, %rcx + 0x49, 0x89, 0x0e, //0x00003ba8 movq %rcx, (%r14) + 0xe9, 0xf8, 0xfe, 0xff, 0xff, //0x00003bab jmp LBB0_649 + //0x00003bb0 LBB0_640 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003bb0 movq $-2, %rax + 0x80, 0xfa, 0x61, //0x00003bb7 cmpb $97, %dl + 0x0f, 0x85, 0xef, 0xfe, 0xff, 0xff, //0x00003bba jne LBB0_650 + 0x48, 0x8d, 0x51, 0x01, //0x00003bc0 leaq $1(%rcx), %rdx + 0x49, 0x89, 0x16, //0x00003bc4 movq %rdx, (%r14) + 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x00003bc7 cmpb $108, $1(%r12,%rcx) + 0x0f, 0x85, 0xdc, 0xfe, 0xff, 0xff, //0x00003bcd jne LBB0_650 + 0x48, 0x8d, 0x51, 0x02, //0x00003bd3 leaq $2(%rcx), %rdx + 0x49, 0x89, 0x16, //0x00003bd7 movq %rdx, (%r14) + 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x73, //0x00003bda cmpb $115, $2(%r12,%rcx) + 0x0f, 0x85, 0xc9, 0xfe, 0xff, 0xff, //0x00003be0 jne LBB0_650 + 0x48, 0x8d, 0x51, 0x03, //0x00003be6 leaq $3(%rcx), %rdx + 0x49, 0x89, 0x16, //0x00003bea movq %rdx, (%r14) + 0x41, 0x80, 0x7c, 0x0c, 0x03, 0x65, //0x00003bed cmpb $101, $3(%r12,%rcx) + 0x0f, 0x85, 0xb6, 0xfe, 0xff, 0xff, //0x00003bf3 jne LBB0_650 + 0x48, 0x83, 0xc1, 0x04, //0x00003bf9 addq $4, %rcx + 0x49, 0x89, 0x0e, //0x00003bfd movq %rcx, (%r14) + 0xe9, 0xaa, 0xfe, 0xff, 0xff, //0x00003c00 jmp LBB0_650 + //0x00003c05 LBB0_236 + 0x48, 0x83, 0xc1, 0xff, //0x00003c05 addq $-1, %rcx + 0x48, 0x89, 0xc8, //0x00003c09 movq %rcx, %rax + 0xe9, 0x9e, 0xfe, 0xff, 0xff, //0x00003c0c jmp LBB0_650 + //0x00003c11 LBB0_645 + 0x48, 0x8b, 0x55, 0xc8, //0x00003c11 movq $-56(%rbp), %rdx + 0x48, 0x83, 0xfa, 0xff, //0x00003c15 cmpq $-1, %rdx + 0x0f, 0x84, 0x34, 0x00, 0x00, 0x00, //0x00003c19 je LBB0_653 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003c1f movq $-2, %rax - 0x48, 0x89, 0x55, 0xc8, //0x00003c26 movq %rdx, $-56(%rbp) - 0xe9, 0x78, 0xfe, 0xff, 0xff, //0x00003c2a jmp LBB0_621 - //0x00003c2f LBB0_490 - 0x4c, 0x8b, 0x75, 0xd0, //0x00003c2f movq $-48(%rbp), %r14 - 0xe9, 0xdf, 0xfd, 0xff, 0xff, //0x00003c33 jmp LBB0_610 - //0x00003c38 LBB0_646 - 0x48, 0x8b, 0x45, 0xb0, //0x00003c38 movq $-80(%rbp), %rax - 0x48, 0x89, 0x45, 0xa0, //0x00003c3c movq %rax, $-96(%rbp) - 0xe9, 0x2e, 0xfe, 0xff, 0xff, //0x00003c40 jmp LBB0_616 - //0x00003c45 LBB0_644 - 0x48, 0x89, 0x4d, 0xa0, //0x00003c45 movq %rcx, $-96(%rbp) - 0xe9, 0x25, 0xfe, 0xff, 0xff, //0x00003c49 jmp LBB0_616 - //0x00003c4e LBB0_507 - 0x4c, 0x8b, 0x75, 0xd0, //0x00003c4e movq $-48(%rbp), %r14 - 0xe9, 0x1c, 0xfe, 0xff, 0xff, //0x00003c52 jmp LBB0_616 - //0x00003c57 LBB0_648 - 0x48, 0x8b, 0x4d, 0xa8, //0x00003c57 movq $-88(%rbp), %rcx - 0x48, 0x8b, 0x49, 0x08, //0x00003c5b movq $8(%rcx), %rcx - 0x48, 0x8b, 0x55, 0xd0, //0x00003c5f movq $-48(%rbp), %rdx - 0x48, 0x89, 0x0a, //0x00003c63 movq %rcx, (%rdx) - 0xe9, 0xdc, 0xfd, 0xff, 0xff, //0x00003c66 jmp LBB0_638 - //0x00003c6b LBB0_649 - 0x4c, 0x29, 0xe0, //0x00003c6b subq %r12, %rax - 0x48, 0x01, 0xd0, //0x00003c6e addq %rdx, %rax - 0x48, 0x89, 0x45, 0xc8, //0x00003c71 movq %rax, $-56(%rbp) - 0xe9, 0x22, 0xfe, 0xff, 0xff, //0x00003c75 jmp LBB0_620 - //0x00003c7a LBB0_650 - 0x4c, 0x29, 0xc0, //0x00003c7a subq %r8, %rax - 0x48, 0x01, 0xc8, //0x00003c7d addq %rcx, %rax - 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00003c80 jmp LBB0_653 - //0x00003c85 LBB0_651 - 0x4c, 0x29, 0xe0, //0x00003c85 subq %r12, %rax - 0x48, 0x89, 0x45, 0xc8, //0x00003c88 movq %rax, $-56(%rbp) - 0xe9, 0x0b, 0xfe, 0xff, 0xff, //0x00003c8c jmp LBB0_620 - //0x00003c91 LBB0_652 - 0x4c, 0x29, 0xc0, //0x00003c91 subq %r8, %rax - //0x00003c94 LBB0_653 - 0x48, 0x89, 0xc2, //0x00003c94 movq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003c97 movq $-2, %rax - 0x49, 0x89, 0x16, //0x00003c9e movq %rdx, (%r14) - 0xe9, 0xa1, 0xfd, 0xff, 0xff, //0x00003ca1 jmp LBB0_638 - //0x00003ca6 LBB0_654 - 0x48, 0x01, 0xc8, //0x00003ca6 addq %rcx, %rax - 0x48, 0x89, 0xc2, //0x00003ca9 movq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003cac movq $-2, %rax - 0x49, 0x89, 0x16, //0x00003cb3 movq %rdx, (%r14) - 0xe9, 0x8c, 0xfd, 0xff, 0xff, //0x00003cb6 jmp LBB0_638 - //0x00003cbb LBB0_655 - 0x4c, 0x29, 0xe0, //0x00003cbb subq %r12, %rax - 0x48, 0x01, 0xc8, //0x00003cbe addq %rcx, %rax - 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00003cc1 jmp LBB0_657 - //0x00003cc6 LBB0_656 - 0x4c, 0x29, 0xe0, //0x00003cc6 subq %r12, %rax - //0x00003cc9 LBB0_657 - 0x48, 0x89, 0xc2, //0x00003cc9 movq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003ccc movq $-2, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x00003cd3 movq $-48(%rbp), %r14 - 0x49, 0x89, 0x16, //0x00003cd7 movq %rdx, (%r14) - 0xe9, 0x68, 0xfd, 0xff, 0xff, //0x00003cda jmp LBB0_638 - 0x90, //0x00003cdf .p2align 2, 0x90 + 0x49, 0x89, 0x16, //0x00003c26 movq %rdx, (%r14) + 0xe9, 0x81, 0xfe, 0xff, 0xff, //0x00003c29 jmp LBB0_650 + //0x00003c2e LBB0_647 + 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00003c2e movq $-1, %rbx + //0x00003c35 LBB0_648 + 0x48, 0xf7, 0xd3, //0x00003c35 notq %rbx + 0x48, 0x01, 0xd8, //0x00003c38 addq %rbx, %rax + 0x48, 0x8b, 0x4d, 0xd0, //0x00003c3b movq $-48(%rbp), %rcx + 0x48, 0x89, 0x01, //0x00003c3f movq %rax, (%rcx) + 0xe9, 0x61, 0xfe, 0xff, 0xff, //0x00003c42 jmp LBB0_649 + //0x00003c47 LBB0_443 + 0x48, 0x83, 0xc3, 0xff, //0x00003c47 addq $-1, %rbx + 0x48, 0x89, 0xd8, //0x00003c4b movq %rbx, %rax + 0xe9, 0x5c, 0xfe, 0xff, 0xff, //0x00003c4e jmp LBB0_650 + //0x00003c53 LBB0_653 + 0x48, 0x0f, 0xbc, 0xd6, //0x00003c53 bsfq %rsi, %rdx + //0x00003c57 LBB0_654 + 0x48, 0x01, 0xc2, //0x00003c57 addq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003c5a movq $-2, %rax + 0x49, 0x89, 0x16, //0x00003c61 movq %rdx, (%r14) + 0xe9, 0x46, 0xfe, 0xff, 0xff, //0x00003c64 jmp LBB0_650 + //0x00003c69 LBB0_656 + 0x48, 0x8b, 0x45, 0xc0, //0x00003c69 movq $-64(%rbp), %rax + 0x48, 0x89, 0x45, 0xa0, //0x00003c6d movq %rax, $-96(%rbp) + 0xe9, 0x05, 0xfe, 0xff, 0xff, //0x00003c71 jmp LBB0_624 + //0x00003c76 LBB0_657 + 0x48, 0x8b, 0x45, 0xc0, //0x00003c76 movq $-64(%rbp), %rax + 0x48, 0x89, 0x45, 0xa0, //0x00003c7a movq %rax, $-96(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x00003c7e movq $-48(%rbp), %r14 + 0xe9, 0xf4, 0xfd, 0xff, 0xff, //0x00003c82 jmp LBB0_624 + //0x00003c87 LBB0_187 + 0x48, 0x01, 0xc2, //0x00003c87 addq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003c8a movq $-2, %rax + 0x48, 0x89, 0x55, 0xc8, //0x00003c91 movq %rdx, $-56(%rbp) + 0xe9, 0x75, 0xfe, 0xff, 0xff, //0x00003c95 jmp LBB0_634 + //0x00003c9a LBB0_508 + 0x4c, 0x8b, 0x75, 0xd0, //0x00003c9a movq $-48(%rbp), %r14 + 0xe9, 0xd8, 0xfd, 0xff, 0xff, //0x00003c9e jmp LBB0_624 + //0x00003ca3 LBB0_658 + 0x48, 0x8b, 0x45, 0xc0, //0x00003ca3 movq $-64(%rbp), %rax + 0x48, 0x89, 0x45, 0xa0, //0x00003ca7 movq %rax, $-96(%rbp) + 0xe9, 0x1f, 0xfe, 0xff, 0xff, //0x00003cab jmp LBB0_628 + //0x00003cb0 LBB0_660 + 0x48, 0x89, 0x55, 0xa0, //0x00003cb0 movq %rdx, $-96(%rbp) + 0xe9, 0x16, 0xfe, 0xff, 0xff, //0x00003cb4 jmp LBB0_628 + //0x00003cb9 LBB0_524 + 0x4c, 0x8b, 0x75, 0xd0, //0x00003cb9 movq $-48(%rbp), %r14 + 0xe9, 0x0d, 0xfe, 0xff, 0xff, //0x00003cbd jmp LBB0_628 + //0x00003cc2 LBB0_662 + 0x48, 0x8b, 0x4d, 0xa8, //0x00003cc2 movq $-88(%rbp), %rcx + 0x48, 0x8b, 0x49, 0x08, //0x00003cc6 movq $8(%rcx), %rcx + 0x48, 0x8b, 0x55, 0xd0, //0x00003cca movq $-48(%rbp), %rdx + 0x48, 0x89, 0x0a, //0x00003cce movq %rcx, (%rdx) + 0xe9, 0xd9, 0xfd, 0xff, 0xff, //0x00003cd1 jmp LBB0_650 + //0x00003cd6 LBB0_663 + 0x4c, 0x29, 0xe0, //0x00003cd6 subq %r12, %rax + 0x48, 0x01, 0xd0, //0x00003cd9 addq %rdx, %rax + 0x48, 0x89, 0x45, 0xc8, //0x00003cdc movq %rax, $-56(%rbp) + 0xe9, 0x1f, 0xfe, 0xff, 0xff, //0x00003ce0 jmp LBB0_633 + //0x00003ce5 LBB0_664 + 0x4c, 0x29, 0xc0, //0x00003ce5 subq %r8, %rax + 0x48, 0x01, 0xc8, //0x00003ce8 addq %rcx, %rax + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00003ceb jmp LBB0_667 + //0x00003cf0 LBB0_665 + 0x4c, 0x29, 0xe0, //0x00003cf0 subq %r12, %rax + 0x48, 0x89, 0x45, 0xc8, //0x00003cf3 movq %rax, $-56(%rbp) + 0xe9, 0x08, 0xfe, 0xff, 0xff, //0x00003cf7 jmp LBB0_633 + //0x00003cfc LBB0_666 + 0x4c, 0x29, 0xc0, //0x00003cfc subq %r8, %rax + //0x00003cff LBB0_667 + 0x48, 0x89, 0xc2, //0x00003cff movq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d02 movq $-2, %rax + 0x49, 0x89, 0x16, //0x00003d09 movq %rdx, (%r14) + 0xe9, 0x9e, 0xfd, 0xff, 0xff, //0x00003d0c jmp LBB0_650 + //0x00003d11 LBB0_668 + 0x48, 0x01, 0xc8, //0x00003d11 addq %rcx, %rax + 0x48, 0x89, 0xc2, //0x00003d14 movq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d17 movq $-2, %rax + 0x49, 0x89, 0x16, //0x00003d1e movq %rdx, (%r14) + 0xe9, 0x89, 0xfd, 0xff, 0xff, //0x00003d21 jmp LBB0_650 + //0x00003d26 LBB0_669 + 0x4c, 0x29, 0xe0, //0x00003d26 subq %r12, %rax + 0x48, 0x01, 0xc8, //0x00003d29 addq %rcx, %rax + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00003d2c jmp LBB0_671 + //0x00003d31 LBB0_670 + 0x4c, 0x29, 0xe0, //0x00003d31 subq %r12, %rax + //0x00003d34 LBB0_671 + 0x48, 0x89, 0xc2, //0x00003d34 movq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d37 movq $-2, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00003d3e movq $-48(%rbp), %r14 + 0x49, 0x89, 0x16, //0x00003d42 movq %rdx, (%r14) + 0xe9, 0x65, 0xfd, 0xff, 0xff, //0x00003d45 jmp LBB0_650 + 0x90, 0x90, //0x00003d4a .p2align 2, 0x90 // // .set L0_0_set_35, LBB0_35-LJTI0_0 // // .set L0_0_set_61, LBB0_61-LJTI0_0 // // .set L0_0_set_40, LBB0_40-LJTI0_0 // // .set L0_0_set_59, LBB0_59-LJTI0_0 // // .set L0_0_set_38, LBB0_38-LJTI0_0 // // .set L0_0_set_63, LBB0_63-LJTI0_0 - //0x00003ce0 LJTI0_0 - 0xd4, 0xc6, 0xff, 0xff, //0x00003ce0 .long L0_0_set_35 - 0xec, 0xc8, 0xff, 0xff, //0x00003ce4 .long L0_0_set_61 - 0x10, 0xc7, 0xff, 0xff, //0x00003ce8 .long L0_0_set_40 - 0xd0, 0xc8, 0xff, 0xff, //0x00003cec .long L0_0_set_59 - 0xeb, 0xc6, 0xff, 0xff, //0x00003cf0 .long L0_0_set_38 - 0x1c, 0xc9, 0xff, 0xff, //0x00003cf4 .long L0_0_set_63 - // // .set L0_1_set_638, LBB0_638-LJTI0_1 - // // .set L0_1_set_637, LBB0_637-LJTI0_1 - // // .set L0_1_set_232, LBB0_232-LJTI0_1 - // // .set L0_1_set_250, LBB0_250-LJTI0_1 + //0x00003d4c LJTI0_0 + 0x2c, 0xc6, 0xff, 0xff, //0x00003d4c .long L0_0_set_35 + 0x3c, 0xc8, 0xff, 0xff, //0x00003d50 .long L0_0_set_61 + 0x64, 0xc6, 0xff, 0xff, //0x00003d54 .long L0_0_set_40 + 0x24, 0xc8, 0xff, 0xff, //0x00003d58 .long L0_0_set_59 + 0x43, 0xc6, 0xff, 0xff, //0x00003d5c .long L0_0_set_38 + 0x68, 0xc8, 0xff, 0xff, //0x00003d60 .long L0_0_set_63 + // // .set L0_1_set_650, LBB0_650-LJTI0_1 + // // .set L0_1_set_649, LBB0_649-LJTI0_1 + // // .set L0_1_set_237, LBB0_237-LJTI0_1 + // // .set L0_1_set_255, LBB0_255-LJTI0_1 // // .set L0_1_set_80, LBB0_80-LJTI0_1 - // // .set L0_1_set_229, LBB0_229-LJTI0_1 - // // .set L0_1_set_225, LBB0_225-LJTI0_1 - // // .set L0_1_set_287, LBB0_287-LJTI0_1 - // // .set L0_1_set_296, LBB0_296-LJTI0_1 - // // .set L0_1_set_293, LBB0_293-LJTI0_1 - //0x00003cf8 LJTI0_1 - 0x4f, 0xfd, 0xff, 0xff, //0x00003cf8 .long L0_1_set_638 - 0x48, 0xfd, 0xff, 0xff, //0x00003cfc .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d00 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d04 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d08 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d0c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d10 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d14 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d18 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d1c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d20 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d24 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d28 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d2c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d30 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d34 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d38 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d3c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d40 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d44 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d48 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d4c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d50 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d54 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d58 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d5c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d60 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d64 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d68 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d6c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d70 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d74 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d78 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d7c .long L0_1_set_637 - 0x19, 0xd6, 0xff, 0xff, //0x00003d80 .long L0_1_set_232 - 0x48, 0xfd, 0xff, 0xff, //0x00003d84 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d88 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d8c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d90 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d94 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d98 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d9c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003da0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003da4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003da8 .long L0_1_set_637 - 0xd2, 0xd7, 0xff, 0xff, //0x00003dac .long L0_1_set_250 - 0x48, 0xfd, 0xff, 0xff, //0x00003db0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003db4 .long L0_1_set_637 - 0x51, 0xc9, 0xff, 0xff, //0x00003db8 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dbc .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dc0 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dc4 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dc8 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dcc .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dd0 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dd4 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dd8 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003ddc .long L0_1_set_80 - 0x48, 0xfd, 0xff, 0xff, //0x00003de0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003de4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003de8 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003dec .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003df0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003df4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003df8 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003dfc .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e00 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e04 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e08 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e0c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e10 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e14 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e18 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e1c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e20 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e24 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e28 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e2c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e30 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e34 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e38 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e3c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e40 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e44 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e48 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e4c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e50 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e54 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e58 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e5c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e60 .long L0_1_set_637 - 0xe9, 0xd5, 0xff, 0xff, //0x00003e64 .long L0_1_set_229 - 0x48, 0xfd, 0xff, 0xff, //0x00003e68 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e6c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e70 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e74 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e78 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e7c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e80 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e84 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e88 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e8c .long L0_1_set_637 - 0xac, 0xd5, 0xff, 0xff, //0x00003e90 .long L0_1_set_225 - 0x48, 0xfd, 0xff, 0xff, //0x00003e94 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e98 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e9c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ea0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ea4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ea8 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003eac .long L0_1_set_637 - 0x20, 0xda, 0xff, 0xff, //0x00003eb0 .long L0_1_set_287 - 0x48, 0xfd, 0xff, 0xff, //0x00003eb4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003eb8 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ebc .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ec0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ec4 .long L0_1_set_637 - 0x80, 0xda, 0xff, 0xff, //0x00003ec8 .long L0_1_set_296 - 0x48, 0xfd, 0xff, 0xff, //0x00003ecc .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ed0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ed4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ed8 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003edc .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ee0 .long L0_1_set_637 - 0x50, 0xda, 0xff, 0xff, //0x00003ee4 .long L0_1_set_293 - // // .set L0_2_set_276, LBB0_276-LJTI0_2 - // // .set L0_2_set_412, LBB0_412-LJTI0_2 - // // .set L0_2_set_282, LBB0_282-LJTI0_2 - // // .set L0_2_set_285, LBB0_285-LJTI0_2 - //0x00003ee8 LJTI0_2 - 0xaf, 0xd7, 0xff, 0xff, //0x00003ee8 .long L0_2_set_276 - 0xc0, 0xe6, 0xff, 0xff, //0x00003eec .long L0_2_set_412 - 0xaf, 0xd7, 0xff, 0xff, //0x00003ef0 .long L0_2_set_276 - 0x01, 0xd8, 0xff, 0xff, //0x00003ef4 .long L0_2_set_282 - 0xc0, 0xe6, 0xff, 0xff, //0x00003ef8 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003efc .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f00 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f04 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f08 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f0c .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f10 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f14 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f18 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f1c .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f20 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f24 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f28 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f2c .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f30 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f34 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f38 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f3c .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f40 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f44 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f48 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f4c .long L0_2_set_412 - 0x1d, 0xd8, 0xff, 0xff, //0x00003f50 .long L0_2_set_285 - // // .set L0_3_set_113, LBB0_113-LJTI0_3 - // // .set L0_3_set_212, LBB0_212-LJTI0_3 + // // .set L0_1_set_292, LBB0_292-LJTI0_1 + // // .set L0_1_set_233, LBB0_233-LJTI0_1 + // // .set L0_1_set_295, LBB0_295-LJTI0_1 + // // .set L0_1_set_304, LBB0_304-LJTI0_1 + // // .set L0_1_set_301, LBB0_301-LJTI0_1 + //0x00003d64 LJTI0_1 + 0x4b, 0xfd, 0xff, 0xff, //0x00003d64 .long L0_1_set_650 + 0x44, 0xfd, 0xff, 0xff, //0x00003d68 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d6c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d70 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d74 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d78 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d7c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d80 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d84 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d88 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d8c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d90 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d94 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d98 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d9c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003da0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003da4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003da8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dac .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003db0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003db4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003db8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dbc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dc0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dc4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dc8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dcc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dd0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dd4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dd8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ddc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003de0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003de4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003de8 .long L0_1_set_649 + 0x66, 0xd5, 0xff, 0xff, //0x00003dec .long L0_1_set_237 + 0x44, 0xfd, 0xff, 0xff, //0x00003df0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003df4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003df8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dfc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e00 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e04 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e08 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e0c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e10 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e14 .long L0_1_set_649 + 0x1a, 0xd7, 0xff, 0xff, //0x00003e18 .long L0_1_set_255 + 0x44, 0xfd, 0xff, 0xff, //0x00003e1c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e20 .long L0_1_set_649 + 0x96, 0xc8, 0xff, 0xff, //0x00003e24 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e28 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e2c .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e30 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e34 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e38 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e3c .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e40 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e44 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e48 .long L0_1_set_80 + 0x44, 0xfd, 0xff, 0xff, //0x00003e4c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e50 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e54 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e58 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e5c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e60 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e64 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e68 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e6c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e70 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e74 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e78 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e7c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e80 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e84 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e88 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e8c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e90 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e94 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e98 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e9c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ea0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ea4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ea8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003eac .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003eb0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003eb4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003eb8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ebc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ec0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ec4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ec8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ecc .long L0_1_set_649 + 0x74, 0xd9, 0xff, 0xff, //0x00003ed0 .long L0_1_set_292 + 0x44, 0xfd, 0xff, 0xff, //0x00003ed4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ed8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003edc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ee0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ee4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ee8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003eec .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ef0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ef4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ef8 .long L0_1_set_649 + 0x29, 0xd5, 0xff, 0xff, //0x00003efc .long L0_1_set_233 + 0x44, 0xfd, 0xff, 0xff, //0x00003f00 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f04 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f08 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f0c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f10 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f14 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f18 .long L0_1_set_649 + 0xa4, 0xd9, 0xff, 0xff, //0x00003f1c .long L0_1_set_295 + 0x44, 0xfd, 0xff, 0xff, //0x00003f20 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f24 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f28 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f2c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f30 .long L0_1_set_649 + 0x04, 0xda, 0xff, 0xff, //0x00003f34 .long L0_1_set_304 + 0x44, 0xfd, 0xff, 0xff, //0x00003f38 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f3c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f40 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f44 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f48 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f4c .long L0_1_set_649 + 0xd4, 0xd9, 0xff, 0xff, //0x00003f50 .long L0_1_set_301 + // // .set L0_2_set_281, LBB0_281-LJTI0_2 + // // .set L0_2_set_427, LBB0_427-LJTI0_2 + // // .set L0_2_set_287, LBB0_287-LJTI0_2 + // // .set L0_2_set_290, LBB0_290-LJTI0_2 + //0x00003f54 LJTI0_2 + 0x0b, 0xd7, 0xff, 0xff, //0x00003f54 .long L0_2_set_281 + 0x75, 0xe6, 0xff, 0xff, //0x00003f58 .long L0_2_set_427 + 0x0b, 0xd7, 0xff, 0xff, //0x00003f5c .long L0_2_set_281 + 0x55, 0xd7, 0xff, 0xff, //0x00003f60 .long L0_2_set_287 + 0x75, 0xe6, 0xff, 0xff, //0x00003f64 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f68 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f6c .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f70 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f74 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f78 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f7c .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f80 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f84 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f88 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f8c .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f90 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f94 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f98 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f9c .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fa0 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fa4 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fa8 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fac .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fb0 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fb4 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fb8 .long L0_2_set_427 + 0x71, 0xd7, 0xff, 0xff, //0x00003fbc .long L0_2_set_290 + // // .set L0_3_set_106, LBB0_106-LJTI0_3 + // // .set L0_3_set_215, LBB0_215-LJTI0_3 + // // .set L0_3_set_112, LBB0_112-LJTI0_3 // // .set L0_3_set_115, LBB0_115-LJTI0_3 - // // .set L0_3_set_107, LBB0_107-LJTI0_3 - //0x00003f54 LJTI0_3 - 0x2f, 0xc9, 0xff, 0xff, //0x00003f54 .long L0_3_set_113 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f58 .long L0_3_set_212 - 0x2f, 0xc9, 0xff, 0xff, //0x00003f5c .long L0_3_set_113 - 0x42, 0xc9, 0xff, 0xff, //0x00003f60 .long L0_3_set_115 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f64 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f68 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f6c .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f70 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f74 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f78 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f7c .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f80 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f84 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f88 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f8c .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f90 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f94 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f98 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f9c .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fa0 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fa4 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fa8 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fac .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fb0 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fb4 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fb8 .long L0_3_set_212 - 0xe4, 0xc8, 0xff, 0xff, //0x00003fbc .long L0_3_set_107 - //0x00003fc0 .p2align 2, 0x00 - //0x00003fc0 _MASK_USE_NUMBER - 0x02, 0x00, 0x00, 0x00, //0x00003fc0 .long 2 + //0x00003fc0 LJTI0_3 + 0x33, 0xc8, 0xff, 0xff, //0x00003fc0 .long L0_3_set_106 + 0x08, 0xd2, 0xff, 0xff, //0x00003fc4 .long L0_3_set_215 + 0x33, 0xc8, 0xff, 0xff, //0x00003fc8 .long L0_3_set_106 + 0x82, 0xc8, 0xff, 0xff, //0x00003fcc .long L0_3_set_112 + 0x08, 0xd2, 0xff, 0xff, //0x00003fd0 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fd4 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fd8 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fdc .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fe0 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fe4 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fe8 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fec .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003ff0 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003ff4 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003ff8 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003ffc .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004000 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004004 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004008 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x0000400c .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004010 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004014 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004018 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x0000401c .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004020 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004024 .long L0_3_set_215 + 0x9e, 0xc8, 0xff, 0xff, //0x00004028 .long L0_3_set_115 + //0x0000402c .p2align 2, 0x00 + //0x0000402c _MASK_USE_NUMBER + 0x02, 0x00, 0x00, 0x00, //0x0000402c .long 2 } diff --git a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_object_subr.go b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_object_subr.go index ec3fb43..dd2581b 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_object_subr.go +++ b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_object_subr.go @@ -16,7 +16,7 @@ const ( ) const ( - _size__skip_object = 15328 + _size__skip_object = 15436 ) var ( @@ -28,15 +28,15 @@ var ( {0xc, 32}, {0xd, 40}, {0x14, 48}, - {0x394e, 184}, - {0x394f, 48}, - {0x3951, 40}, - {0x3953, 32}, - {0x3955, 24}, - {0x3957, 16}, - {0x3958, 8}, - {0x3959, 0}, - {0x3be0, 184}, + {0x39b6, 184}, + {0x39b7, 48}, + {0x39b9, 40}, + {0x39bb, 32}, + {0x39bd, 24}, + {0x39bf, 16}, + {0x39c0, 8}, + {0x39c1, 0}, + {0x3c4c, 184}, } ) diff --git a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_object_text_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_object_text_amd64.go index b01f98d..ddaf84c 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_object_text_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_object_text_amd64.go @@ -54,815 +54,818 @@ var _text_skip_object = []byte{ 0x48, 0x89, 0x7d, 0xa8, //0x0000011e movq %rdi, $-88(%rbp) 0x0f, 0x10, 0x05, 0xd7, 0xfe, 0xff, 0xff, //0x00000122 movups $-297(%rip), %xmm0 /* LCPI0_0+0(%rip) */ 0x0f, 0x11, 0x02, //0x00000129 movups %xmm0, (%rdx) - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000012c movq $-1, %rcx - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000133 movabsq $4294977024, %r11 - 0xf3, 0x0f, 0x6f, 0x05, 0xcb, 0xfe, 0xff, 0xff, //0x0000013d movdqu $-309(%rip), %xmm0 /* LCPI0_1+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0xd3, 0xfe, 0xff, 0xff, //0x00000145 movdqu $-301(%rip), %xmm1 /* LCPI0_2+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x25, 0xda, 0xfe, 0xff, 0xff, //0x0000014d movdqu $-294(%rip), %xmm12 /* LCPI0_3+0(%rip) */ - 0x66, 0x45, 0x0f, 0x76, 0xd2, //0x00000156 pcmpeqd %xmm10, %xmm10 - 0xf3, 0x44, 0x0f, 0x6f, 0x3d, 0x4c, 0xff, 0xff, 0xff, //0x0000015b movdqu $-180(%rip), %xmm15 /* LCPI0_11+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x0d, 0x23, 0xff, 0xff, 0xff, //0x00000164 movdqu $-221(%rip), %xmm9 /* LCPI0_9+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x7a, 0xff, 0xff, 0xff, //0x0000016d movdqu $-134(%rip), %xmm11 /* LCPI0_15+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x35, 0x01, 0xff, 0xff, 0xff, //0x00000176 movdqu $-255(%rip), %xmm14 /* LCPI0_8+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x15, 0xe9, 0xfe, 0xff, 0xff, //0x0000017f movdqu $-279(%rip), %xmm2 /* LCPI0_7+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xb0, 0xfe, 0xff, 0xff, //0x00000187 movdqu $-336(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x05, 0xb7, 0xfe, 0xff, 0xff, //0x00000190 movdqu $-329(%rip), %xmm8 /* LCPI0_5+0(%rip) */ - 0x48, 0x89, 0x75, 0xd0, //0x00000199 movq %rsi, $-48(%rbp) - 0x48, 0x89, 0x55, 0xb8, //0x0000019d movq %rdx, $-72(%rbp) - 0xe9, 0x7a, 0x00, 0x00, 0x00, //0x000001a1 jmp LBB0_6 - //0x000001a6 LBB0_613 - 0x66, 0x0f, 0xbc, 0xc2, //0x000001a6 bsfw %dx, %ax - 0x0f, 0xb7, 0xc0, //0x000001aa movzwl %ax, %eax - 0x48, 0x29, 0xc8, //0x000001ad subq %rcx, %rax - 0x49, 0x89, 0x06, //0x000001b0 movq %rax, (%r14) - 0x48, 0x85, 0xf6, //0x000001b3 testq %rsi, %rsi - 0x0f, 0x8e, 0x9d, 0x38, 0x00, 0x00, //0x000001b6 jle LBB0_614 - 0x90, 0x90, 0x90, 0x90, //0x000001bc .p2align 4, 0x90 - //0x000001c0 LBB0_4 - 0x4d, 0x8b, 0x45, 0x00, //0x000001c0 movq (%r13), %r8 - 0x48, 0x8b, 0x75, 0x90, //0x000001c4 movq $-112(%rbp), %rsi - 0x48, 0x89, 0xf1, //0x000001c8 movq %rsi, %rcx - 0x48, 0x89, 0xf0, //0x000001cb movq %rsi, %rax - 0x4d, 0x85, 0xc0, //0x000001ce testq %r8, %r8 - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x000001d1 jne LBB0_6 - 0xe9, 0x6b, 0x38, 0x00, 0x00, //0x000001d7 jmp LBB0_638 - //0x000001dc LBB0_1 - 0x49, 0xf7, 0xdb, //0x000001dc negq %r11 - 0x4d, 0x89, 0xdd, //0x000001df movq %r11, %r13 - //0x000001e2 LBB0_2 - 0x4d, 0x85, 0xed, //0x000001e2 testq %r13, %r13 - 0x0f, 0x88, 0x47, 0x38, 0x00, 0x00, //0x000001e5 js LBB0_612 - //0x000001eb LBB0_3 - 0x49, 0x01, 0xc5, //0x000001eb addq %rax, %r13 - 0x4c, 0x8b, 0x75, 0xd0, //0x000001ee movq $-48(%rbp), %r14 - 0x4d, 0x89, 0x2e, //0x000001f2 movq %r13, (%r14) - 0x48, 0x85, 0xc0, //0x000001f5 testq %rax, %rax - 0x4c, 0x8b, 0x6d, 0xb8, //0x000001f8 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000001fc movabsq $4294977024, %r11 - 0x0f, 0x89, 0xb4, 0xff, 0xff, 0xff, //0x00000206 jns LBB0_4 - 0xe9, 0x36, 0x38, 0x00, 0x00, //0x0000020c jmp LBB0_638 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000211 .p2align 4, 0x90 - //0x00000220 LBB0_6 - 0x48, 0x8b, 0x45, 0xa8, //0x00000220 movq $-88(%rbp), %rax - 0x4c, 0x8b, 0x20, //0x00000224 movq (%rax), %r12 - 0x48, 0x8b, 0x40, 0x08, //0x00000227 movq $8(%rax), %rax - 0x49, 0x8b, 0x16, //0x0000022b movq (%r14), %rdx - 0x48, 0x39, 0xc2, //0x0000022e cmpq %rax, %rdx - 0x0f, 0x83, 0x39, 0x00, 0x00, 0x00, //0x00000231 jae LBB0_11 - 0x41, 0x8a, 0x1c, 0x14, //0x00000237 movb (%r12,%rdx), %bl - 0x80, 0xfb, 0x0d, //0x0000023b cmpb $13, %bl - 0x0f, 0x84, 0x2c, 0x00, 0x00, 0x00, //0x0000023e je LBB0_11 - 0x80, 0xfb, 0x20, //0x00000244 cmpb $32, %bl - 0x0f, 0x84, 0x23, 0x00, 0x00, 0x00, //0x00000247 je LBB0_11 - 0x80, 0xc3, 0xf7, //0x0000024d addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000250 cmpb $1, %bl - 0x0f, 0x86, 0x17, 0x00, 0x00, 0x00, //0x00000253 jbe LBB0_11 - 0x48, 0x89, 0xd6, //0x00000259 movq %rdx, %rsi - 0xe9, 0x07, 0x01, 0x00, 0x00, //0x0000025c jmp LBB0_32 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000261 .p2align 4, 0x90 - //0x00000270 LBB0_11 - 0x48, 0x8d, 0x72, 0x01, //0x00000270 leaq $1(%rdx), %rsi - 0x48, 0x39, 0xc6, //0x00000274 cmpq %rax, %rsi - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000277 jae LBB0_15 - 0x41, 0x8a, 0x1c, 0x34, //0x0000027d movb (%r12,%rsi), %bl - 0x80, 0xfb, 0x0d, //0x00000281 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000284 je LBB0_15 - 0x80, 0xfb, 0x20, //0x0000028a cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000028d je LBB0_15 - 0x80, 0xc3, 0xf7, //0x00000293 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000296 cmpb $1, %bl - 0x0f, 0x87, 0xc9, 0x00, 0x00, 0x00, //0x00000299 ja LBB0_32 - 0x90, //0x0000029f .p2align 4, 0x90 - //0x000002a0 LBB0_15 - 0x48, 0x8d, 0x72, 0x02, //0x000002a0 leaq $2(%rdx), %rsi - 0x48, 0x39, 0xc6, //0x000002a4 cmpq %rax, %rsi - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000002a7 jae LBB0_19 - 0x41, 0x8a, 0x1c, 0x34, //0x000002ad movb (%r12,%rsi), %bl - 0x80, 0xfb, 0x0d, //0x000002b1 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000002b4 je LBB0_19 - 0x80, 0xfb, 0x20, //0x000002ba cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000002bd je LBB0_19 - 0x80, 0xc3, 0xf7, //0x000002c3 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x000002c6 cmpb $1, %bl - 0x0f, 0x87, 0x99, 0x00, 0x00, 0x00, //0x000002c9 ja LBB0_32 - 0x90, //0x000002cf .p2align 4, 0x90 - //0x000002d0 LBB0_19 - 0x48, 0x8d, 0x72, 0x03, //0x000002d0 leaq $3(%rdx), %rsi - 0x48, 0x39, 0xc6, //0x000002d4 cmpq %rax, %rsi - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000002d7 jae LBB0_23 - 0x41, 0x8a, 0x1c, 0x34, //0x000002dd movb (%r12,%rsi), %bl - 0x80, 0xfb, 0x0d, //0x000002e1 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000002e4 je LBB0_23 - 0x80, 0xfb, 0x20, //0x000002ea cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000002ed je LBB0_23 - 0x80, 0xc3, 0xf7, //0x000002f3 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x000002f6 cmpb $1, %bl - 0x0f, 0x87, 0x69, 0x00, 0x00, 0x00, //0x000002f9 ja LBB0_32 - 0x90, //0x000002ff .p2align 4, 0x90 - //0x00000300 LBB0_23 - 0x48, 0x83, 0xc2, 0x04, //0x00000300 addq $4, %rdx - 0x48, 0x39, 0xd0, //0x00000304 cmpq %rdx, %rax - 0x0f, 0x86, 0xd0, 0x36, 0x00, 0x00, //0x00000307 jbe LBB0_603 - 0x48, 0x39, 0xd0, //0x0000030d cmpq %rdx, %rax - 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00000310 je LBB0_29 - 0x49, 0x8d, 0x34, 0x04, //0x00000316 leaq (%r12,%rax), %rsi - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000031a .p2align 4, 0x90 - //0x00000320 LBB0_26 - 0x41, 0x0f, 0xbe, 0x3c, 0x14, //0x00000320 movsbl (%r12,%rdx), %edi - 0x83, 0xff, 0x20, //0x00000325 cmpl $32, %edi - 0x0f, 0x87, 0x2e, 0x00, 0x00, 0x00, //0x00000328 ja LBB0_31 - 0x49, 0x0f, 0xa3, 0xfb, //0x0000032e btq %rdi, %r11 - 0x0f, 0x83, 0x24, 0x00, 0x00, 0x00, //0x00000332 jae LBB0_31 - 0x48, 0x83, 0xc2, 0x01, //0x00000338 addq $1, %rdx - 0x48, 0x39, 0xd0, //0x0000033c cmpq %rdx, %rax - 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x0000033f jne LBB0_26 - 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x00000345 jmp LBB0_30 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000034a .p2align 4, 0x90 - //0x00000350 LBB0_29 - 0x4c, 0x01, 0xe2, //0x00000350 addq %r12, %rdx - 0x48, 0x89, 0xd6, //0x00000353 movq %rdx, %rsi - //0x00000356 LBB0_30 - 0x4c, 0x29, 0xe6, //0x00000356 subq %r12, %rsi - 0x48, 0x89, 0xf2, //0x00000359 movq %rsi, %rdx - //0x0000035c LBB0_31 - 0x48, 0x89, 0xd6, //0x0000035c movq %rdx, %rsi - 0x48, 0x39, 0xc2, //0x0000035f cmpq %rax, %rdx - 0x0f, 0x83, 0x78, 0x36, 0x00, 0x00, //0x00000362 jae LBB0_604 - //0x00000368 LBB0_32 - 0x48, 0x8d, 0x46, 0x01, //0x00000368 leaq $1(%rsi), %rax - 0x49, 0x89, 0x06, //0x0000036c movq %rax, (%r14) - 0x41, 0x0f, 0xbe, 0x3c, 0x34, //0x0000036f movsbl (%r12,%rsi), %edi - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000374 movq $-1, %rax - 0x85, 0xff, //0x0000037b testl %edi, %edi - 0x0f, 0x84, 0xc4, 0x36, 0x00, 0x00, //0x0000037d je LBB0_638 - 0x4d, 0x8b, 0x4d, 0x00, //0x00000383 movq (%r13), %r9 - 0x4d, 0x8d, 0x41, 0xff, //0x00000387 leaq $-1(%r9), %r8 - 0x43, 0x8b, 0x5c, 0xcd, 0x00, //0x0000038b movl (%r13,%r9,8), %ebx - 0x48, 0x83, 0xf9, 0xff, //0x00000390 cmpq $-1, %rcx - 0x48, 0x0f, 0x45, 0xf1, //0x00000394 cmovneq %rcx, %rsi - 0x83, 0xc3, 0xff, //0x00000398 addl $-1, %ebx - 0x83, 0xfb, 0x05, //0x0000039b cmpl $5, %ebx - 0x0f, 0x87, 0x82, 0x02, 0x00, 0x00, //0x0000039e ja LBB0_78 - 0x48, 0x8d, 0x15, 0x35, 0x39, 0x00, 0x00, //0x000003a4 leaq $14645(%rip), %rdx /* LJTI0_0+0(%rip) */ - 0x48, 0x63, 0x0c, 0x9a, //0x000003ab movslq (%rdx,%rbx,4), %rcx - 0x48, 0x01, 0xd1, //0x000003af addq %rdx, %rcx - 0xff, 0xe1, //0x000003b2 jmpq *%rcx - //0x000003b4 LBB0_35 - 0x83, 0xff, 0x2c, //0x000003b4 cmpl $44, %edi - 0x0f, 0x84, 0xec, 0x04, 0x00, 0x00, //0x000003b7 je LBB0_117 - 0x83, 0xff, 0x5d, //0x000003bd cmpl $93, %edi - 0x0f, 0x84, 0x48, 0x02, 0x00, 0x00, //0x000003c0 je LBB0_37 - 0xe9, 0x75, 0x36, 0x00, 0x00, //0x000003c6 jmp LBB0_637 - //0x000003cb LBB0_38 - 0x40, 0x80, 0xff, 0x5d, //0x000003cb cmpb $93, %dil - 0x0f, 0x84, 0x39, 0x02, 0x00, 0x00, //0x000003cf je LBB0_37 - 0x48, 0x89, 0x75, 0x90, //0x000003d5 movq %rsi, $-112(%rbp) - 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000003d9 movq $1, (%r13,%r9,8) - 0x83, 0xff, 0x7b, //0x000003e2 cmpl $123, %edi - 0x0f, 0x86, 0x4c, 0x02, 0x00, 0x00, //0x000003e5 jbe LBB0_79 - 0xe9, 0x50, 0x36, 0x00, 0x00, //0x000003eb jmp LBB0_637 - //0x000003f0 LBB0_40 - 0x40, 0x80, 0xff, 0x22, //0x000003f0 cmpb $34, %dil - 0x0f, 0x85, 0x46, 0x36, 0x00, 0x00, //0x000003f4 jne LBB0_637 - 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x04, 0x00, 0x00, 0x00, //0x000003fa movq $4, (%r13,%r9,8) - 0x48, 0x8b, 0x4d, 0x98, //0x00000403 movq $-104(%rbp), %rcx - 0xf6, 0xc1, 0x40, //0x00000407 testb $64, %cl - 0x48, 0x89, 0x75, 0x90, //0x0000040a movq %rsi, $-112(%rbp) - 0x0f, 0x85, 0x7c, 0x06, 0x00, 0x00, //0x0000040e jne LBB0_125 - 0x49, 0x8b, 0x16, //0x00000414 movq (%r14), %rdx - 0x48, 0x8b, 0x45, 0xa8, //0x00000417 movq $-88(%rbp), %rax - 0x48, 0x8b, 0x40, 0x08, //0x0000041b movq $8(%rax), %rax - 0xf6, 0xc1, 0x20, //0x0000041f testb $32, %cl - 0x48, 0x89, 0x45, 0xa0, //0x00000422 movq %rax, $-96(%rbp) - 0x48, 0x89, 0x55, 0xb0, //0x00000426 movq %rdx, $-80(%rbp) - 0x0f, 0x85, 0x5e, 0x09, 0x00, 0x00, //0x0000042a jne LBB0_157 - 0x49, 0x89, 0xc1, //0x00000430 movq %rax, %r9 - 0x49, 0x29, 0xd1, //0x00000433 subq %rdx, %r9 - 0x0f, 0x84, 0xc2, 0x37, 0x00, 0x00, //0x00000436 je LBB0_642 - 0x49, 0x83, 0xf9, 0x40, //0x0000043c cmpq $64, %r9 - 0x0f, 0x82, 0x4a, 0x2a, 0x00, 0x00, //0x00000440 jb LBB0_484 - 0x48, 0x8b, 0x45, 0xb0, //0x00000446 movq $-80(%rbp), %rax - 0x49, 0x89, 0xc6, //0x0000044a movq %rax, %r14 - 0x49, 0xf7, 0xd6, //0x0000044d notq %r14 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000450 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00000458 xorl %r8d, %r8d - 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000045b .p2align 4, 0x90 - //0x00000460 LBB0_46 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00000460 movdqu (%r12,%rax), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00000466 movdqu $16(%r12,%rax), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000046d movdqu $32(%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000474 movdqu $48(%r12,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xfb, //0x0000047b movdqa %xmm3, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000047f pcmpeqb %xmm0, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00000483 pmovmskb %xmm7, %r10d - 0x66, 0x0f, 0x6f, 0xfc, //0x00000488 movdqa %xmm4, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000048c pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xdf, //0x00000490 pmovmskb %xmm7, %ebx - 0x66, 0x0f, 0x6f, 0xfd, //0x00000494 movdqa %xmm5, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x00000498 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x0000049c pmovmskb %xmm7, %edi - 0x66, 0x0f, 0x6f, 0xfe, //0x000004a0 movdqa %xmm6, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000004a4 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xd7, //0x000004a8 pmovmskb %xmm7, %edx - 0x66, 0x0f, 0x74, 0xd9, //0x000004ac pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x000004b0 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x74, 0xe1, //0x000004b5 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x000004b9 pmovmskb %xmm4, %ecx - 0x66, 0x0f, 0x74, 0xe9, //0x000004bd pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x000004c1 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x74, 0xf1, //0x000004c5 pcmpeqb %xmm1, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x000004c9 pmovmskb %xmm6, %r15d - 0x48, 0xc1, 0xe2, 0x30, //0x000004ce shlq $48, %rdx - 0x48, 0xc1, 0xe7, 0x20, //0x000004d2 shlq $32, %rdi - 0x48, 0x09, 0xd7, //0x000004d6 orq %rdx, %rdi - 0x48, 0xc1, 0xe3, 0x10, //0x000004d9 shlq $16, %rbx - 0x48, 0x09, 0xfb, //0x000004dd orq %rdi, %rbx - 0x49, 0x09, 0xda, //0x000004e0 orq %rbx, %r10 - 0x49, 0xc1, 0xe7, 0x30, //0x000004e3 shlq $48, %r15 - 0x48, 0xc1, 0xe6, 0x20, //0x000004e7 shlq $32, %rsi - 0x4c, 0x09, 0xfe, //0x000004eb orq %r15, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x000004ee shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x000004f2 orq %rsi, %rcx - 0x49, 0x09, 0xcb, //0x000004f5 orq %rcx, %r11 - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000004f8 jne LBB0_55 - 0x4d, 0x85, 0xc0, //0x000004fe testq %r8, %r8 - 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x00000501 jne LBB0_57 - 0x45, 0x31, 0xc0, //0x00000507 xorl %r8d, %r8d - 0x4d, 0x85, 0xd2, //0x0000050a testq %r10, %r10 - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x0000050d jne LBB0_58 - //0x00000513 LBB0_49 - 0x49, 0x83, 0xc1, 0xc0, //0x00000513 addq $-64, %r9 - 0x49, 0x83, 0xc6, 0xc0, //0x00000517 addq $-64, %r14 - 0x48, 0x83, 0xc0, 0x40, //0x0000051b addq $64, %rax - 0x49, 0x83, 0xf9, 0x3f, //0x0000051f cmpq $63, %r9 - 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x00000523 ja LBB0_46 - 0xe9, 0xce, 0x21, 0x00, 0x00, //0x00000529 jmp LBB0_50 - //0x0000052e LBB0_55 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000052e cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00000533 jne LBB0_57 - 0x49, 0x0f, 0xbc, 0xcb, //0x00000539 bsfq %r11, %rcx - 0x48, 0x01, 0xc1, //0x0000053d addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00000540 movq %rcx, $-56(%rbp) - //0x00000544 LBB0_57 - 0x4c, 0x89, 0xc1, //0x00000544 movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00000547 notq %rcx - 0x4c, 0x21, 0xd9, //0x0000054a andq %r11, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x0000054d leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xc2, //0x00000551 orq %r8, %rdx - 0x48, 0x89, 0xd6, //0x00000554 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000557 notq %rsi - 0x4c, 0x21, 0xde, //0x0000055a andq %r11, %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000055d movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfe, //0x00000567 andq %rdi, %rsi - 0x45, 0x31, 0xc0, //0x0000056a xorl %r8d, %r8d - 0x48, 0x01, 0xce, //0x0000056d addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc0, //0x00000570 setb %r8b - 0x48, 0x01, 0xf6, //0x00000574 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000577 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00000581 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00000584 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000587 notq %rsi - 0x49, 0x21, 0xf2, //0x0000058a andq %rsi, %r10 - 0x4d, 0x85, 0xd2, //0x0000058d testq %r10, %r10 - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000590 je LBB0_49 - //0x00000596 LBB0_58 - 0x49, 0x0f, 0xbc, 0xc2, //0x00000596 bsfq %r10, %rax - 0x4c, 0x29, 0xf0, //0x0000059a subq %r14, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x0000059d movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000005a1 movabsq $4294977024, %r11 - 0xe9, 0xd6, 0x0c, 0x00, 0x00, //0x000005ab jmp LBB0_223 - //0x000005b0 LBB0_59 - 0x40, 0x80, 0xff, 0x3a, //0x000005b0 cmpb $58, %dil - 0x0f, 0x85, 0x86, 0x34, 0x00, 0x00, //0x000005b4 jne LBB0_637 - 0x48, 0x89, 0x75, 0x90, //0x000005ba movq %rsi, $-112(%rbp) - 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000005be movq $0, (%r13,%r9,8) - 0xe9, 0xf4, 0xfb, 0xff, 0xff, //0x000005c7 jmp LBB0_4 - //0x000005cc LBB0_61 - 0x83, 0xff, 0x2c, //0x000005cc cmpl $44, %edi - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000005cf jne LBB0_62 - 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000005d5 cmpq $4095, %r9 - 0x0f, 0x8f, 0x0a, 0x34, 0x00, 0x00, //0x000005dc jg LBB0_634 - 0x48, 0x89, 0x75, 0x90, //0x000005e2 movq %rsi, $-112(%rbp) - 0x49, 0x8d, 0x41, 0x01, //0x000005e6 leaq $1(%r9), %rax - 0x49, 0x89, 0x45, 0x00, //0x000005ea movq %rax, (%r13) - 0x4b, 0xc7, 0x44, 0xcd, 0x08, 0x03, 0x00, 0x00, 0x00, //0x000005ee movq $3, $8(%r13,%r9,8) - 0xe9, 0xc4, 0xfb, 0xff, 0xff, //0x000005f7 jmp LBB0_4 - //0x000005fc LBB0_63 - 0x83, 0xff, 0x22, //0x000005fc cmpl $34, %edi - 0x0f, 0x84, 0xcb, 0x02, 0x00, 0x00, //0x000005ff je LBB0_64 - //0x00000605 LBB0_62 - 0x83, 0xff, 0x7d, //0x00000605 cmpl $125, %edi - 0x0f, 0x85, 0x32, 0x34, 0x00, 0x00, //0x00000608 jne LBB0_637 - //0x0000060e LBB0_37 - 0x4d, 0x89, 0x45, 0x00, //0x0000060e movq %r8, (%r13) - 0x48, 0x89, 0xf1, //0x00000612 movq %rsi, %rcx - 0x48, 0x89, 0xf0, //0x00000615 movq %rsi, %rax - 0x4d, 0x85, 0xc0, //0x00000618 testq %r8, %r8 - 0x0f, 0x85, 0xff, 0xfb, 0xff, 0xff, //0x0000061b jne LBB0_6 - 0xe9, 0x21, 0x34, 0x00, 0x00, //0x00000621 jmp LBB0_638 - //0x00000626 LBB0_78 - 0x48, 0x89, 0x75, 0x90, //0x00000626 movq %rsi, $-112(%rbp) - 0x4d, 0x89, 0x45, 0x00, //0x0000062a movq %r8, (%r13) - 0x83, 0xff, 0x7b, //0x0000062e cmpl $123, %edi - 0x0f, 0x87, 0x09, 0x34, 0x00, 0x00, //0x00000631 ja LBB0_637 - //0x00000637 LBB0_79 - 0x89, 0xf9, //0x00000637 movl %edi, %ecx - 0x48, 0x8d, 0x15, 0xb8, 0x36, 0x00, 0x00, //0x00000639 leaq $14008(%rip), %rdx /* LJTI0_1+0(%rip) */ - 0x48, 0x63, 0x0c, 0x8a, //0x00000640 movslq (%rdx,%rcx,4), %rcx - 0x48, 0x01, 0xd1, //0x00000644 addq %rdx, %rcx - 0xff, 0xe1, //0x00000647 jmpq *%rcx - //0x00000649 LBB0_80 - 0x48, 0x8b, 0x45, 0xa8, //0x00000649 movq $-88(%rbp), %rax - 0x48, 0x8b, 0x78, 0x08, //0x0000064d movq $8(%rax), %rdi - 0x49, 0x8b, 0x36, //0x00000651 movq (%r14), %rsi - 0xf6, 0x45, 0x98, 0x40, //0x00000654 testb $64, $-104(%rbp) - 0x0f, 0x85, 0x40, 0x05, 0x00, 0x00, //0x00000658 jne LBB0_135 - 0x48, 0x8d, 0x46, 0xff, //0x0000065e leaq $-1(%rsi), %rax - 0x48, 0x29, 0xc7, //0x00000662 subq %rax, %rdi - 0x0f, 0x84, 0xc0, 0x33, 0x00, 0x00, //0x00000665 je LBB0_611 - 0x4d, 0x8d, 0x34, 0x34, //0x0000066b leaq (%r12,%rsi), %r14 - 0x49, 0x83, 0xc6, 0xff, //0x0000066f addq $-1, %r14 - 0x41, 0x80, 0x3e, 0x30, //0x00000673 cmpb $48, (%r14) - 0x0f, 0x85, 0x37, 0x00, 0x00, 0x00, //0x00000677 jne LBB0_86 - 0x41, 0xbd, 0x01, 0x00, 0x00, 0x00, //0x0000067d movl $1, %r13d - 0x48, 0x83, 0xff, 0x01, //0x00000683 cmpq $1, %rdi - 0x0f, 0x84, 0x5e, 0xfb, 0xff, 0xff, //0x00000687 je LBB0_3 - 0x41, 0x8a, 0x0c, 0x34, //0x0000068d movb (%r12,%rsi), %cl - 0x80, 0xc1, 0xd2, //0x00000691 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x00000694 cmpb $55, %cl - 0x0f, 0x87, 0x4e, 0xfb, 0xff, 0xff, //0x00000697 ja LBB0_3 - 0x0f, 0xb6, 0xc9, //0x0000069d movzbl %cl, %ecx - 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x000006a0 movabsq $36028797027352577, %rdx - 0x48, 0x0f, 0xa3, 0xca, //0x000006aa btq %rcx, %rdx - 0x0f, 0x83, 0x37, 0xfb, 0xff, 0xff, //0x000006ae jae LBB0_3 - //0x000006b4 LBB0_86 - 0x48, 0x89, 0x75, 0xc0, //0x000006b4 movq %rsi, $-64(%rbp) - 0x48, 0x83, 0xff, 0x10, //0x000006b8 cmpq $16, %rdi - 0x0f, 0x82, 0x14, 0x27, 0x00, 0x00, //0x000006bc jb LBB0_472 - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000006c2 movq $-1, %r9 - 0x45, 0x31, 0xed, //0x000006c9 xorl %r13d, %r13d - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000006cc movq $-1, %r15 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000006d3 movq $-1, %r8 - 0x49, 0x89, 0xfa, //0x000006da movq %rdi, %r10 - 0x90, 0x90, 0x90, //0x000006dd .p2align 4, 0x90 - //0x000006e0 LBB0_88 - 0xf3, 0x43, 0x0f, 0x6f, 0x1c, 0x2e, //0x000006e0 movdqu (%r14,%r13), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x000006e6 movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x64, 0x25, 0xae, 0xf9, 0xff, 0xff, //0x000006ea pcmpgtb $-1618(%rip), %xmm4 /* LCPI0_10+0(%rip) */ - 0x66, 0x41, 0x0f, 0x6f, 0xef, //0x000006f2 movdqa %xmm15, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x000006f7 pcmpgtb %xmm3, %xmm5 - 0x66, 0x0f, 0xdb, 0xec, //0x000006fb pand %xmm4, %xmm5 - 0x66, 0x0f, 0x6f, 0xe3, //0x000006ff movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x74, 0x25, 0xb5, 0xf9, 0xff, 0xff, //0x00000703 pcmpeqb $-1611(%rip), %xmm4 /* LCPI0_12+0(%rip) */ - 0x66, 0x0f, 0x6f, 0xf3, //0x0000070b movdqa %xmm3, %xmm6 - 0x66, 0x0f, 0x74, 0x35, 0xb9, 0xf9, 0xff, 0xff, //0x0000070f pcmpeqb $-1607(%rip), %xmm6 /* LCPI0_13+0(%rip) */ - 0x66, 0x0f, 0xeb, 0xf4, //0x00000717 por %xmm4, %xmm6 - 0x66, 0x0f, 0x6f, 0xe3, //0x0000071b movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xe1, //0x0000071f pand %xmm9, %xmm4 - 0x66, 0x0f, 0x74, 0x1d, 0xb4, 0xf9, 0xff, 0xff, //0x00000724 pcmpeqb $-1612(%rip), %xmm3 /* LCPI0_14+0(%rip) */ - 0x66, 0x41, 0x0f, 0x74, 0xe3, //0x0000072c pcmpeqb %xmm11, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x00000731 pmovmskb %xmm4, %edx - 0x66, 0x0f, 0xeb, 0xe3, //0x00000735 por %xmm3, %xmm4 - 0x66, 0x0f, 0xeb, 0xee, //0x00000739 por %xmm6, %xmm5 - 0x66, 0x0f, 0xeb, 0xec, //0x0000073d por %xmm4, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000741 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0xd7, 0xf6, //0x00000746 pmovmskb %xmm6, %esi - 0x66, 0x0f, 0xd7, 0xcd, //0x0000074a pmovmskb %xmm5, %ecx - 0xf7, 0xd1, //0x0000074e notl %ecx - 0x0f, 0xbc, 0xc9, //0x00000750 bsfl %ecx, %ecx - 0x83, 0xf9, 0x10, //0x00000753 cmpl $16, %ecx - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00000756 je LBB0_90 - 0xbb, 0xff, 0xff, 0xff, 0xff, //0x0000075c movl $-1, %ebx - 0xd3, 0xe3, //0x00000761 shll %cl, %ebx - 0xf7, 0xd3, //0x00000763 notl %ebx - 0x41, 0x21, 0xdb, //0x00000765 andl %ebx, %r11d - 0x21, 0xda, //0x00000768 andl %ebx, %edx - 0x21, 0xf3, //0x0000076a andl %esi, %ebx - 0x89, 0xde, //0x0000076c movl %ebx, %esi - //0x0000076e LBB0_90 - 0x41, 0x8d, 0x5b, 0xff, //0x0000076e leal $-1(%r11), %ebx - 0x44, 0x21, 0xdb, //0x00000772 andl %r11d, %ebx - 0x0f, 0x85, 0x12, 0x1f, 0x00, 0x00, //0x00000775 jne LBB0_429 - 0x8d, 0x5a, 0xff, //0x0000077b leal $-1(%rdx), %ebx - 0x21, 0xd3, //0x0000077e andl %edx, %ebx - 0x0f, 0x85, 0x07, 0x1f, 0x00, 0x00, //0x00000780 jne LBB0_429 - 0x8d, 0x5e, 0xff, //0x00000786 leal $-1(%rsi), %ebx - 0x21, 0xf3, //0x00000789 andl %esi, %ebx - 0x0f, 0x85, 0xfc, 0x1e, 0x00, 0x00, //0x0000078b jne LBB0_429 - 0x45, 0x85, 0xdb, //0x00000791 testl %r11d, %r11d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00000794 je LBB0_96 - 0x41, 0x0f, 0xbc, 0xdb, //0x0000079a bsfl %r11d, %ebx - 0x49, 0x83, 0xf8, 0xff, //0x0000079e cmpq $-1, %r8 - 0x0f, 0x85, 0x75, 0x22, 0x00, 0x00, //0x000007a2 jne LBB0_436 - 0x4c, 0x01, 0xeb, //0x000007a8 addq %r13, %rbx - 0x49, 0x89, 0xd8, //0x000007ab movq %rbx, %r8 - //0x000007ae LBB0_96 - 0x85, 0xd2, //0x000007ae testl %edx, %edx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000007b0 je LBB0_99 - 0x0f, 0xbc, 0xd2, //0x000007b6 bsfl %edx, %edx - 0x49, 0x83, 0xff, 0xff, //0x000007b9 cmpq $-1, %r15 - 0x0f, 0x85, 0xd1, 0x20, 0x00, 0x00, //0x000007bd jne LBB0_435 - 0x4c, 0x01, 0xea, //0x000007c3 addq %r13, %rdx - 0x49, 0x89, 0xd7, //0x000007c6 movq %rdx, %r15 - //0x000007c9 LBB0_99 - 0x85, 0xf6, //0x000007c9 testl %esi, %esi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000007cb je LBB0_102 - 0x0f, 0xbc, 0xd6, //0x000007d1 bsfl %esi, %edx - 0x49, 0x83, 0xf9, 0xff, //0x000007d4 cmpq $-1, %r9 - 0x0f, 0x85, 0xb6, 0x20, 0x00, 0x00, //0x000007d8 jne LBB0_435 - 0x4c, 0x01, 0xea, //0x000007de addq %r13, %rdx - 0x49, 0x89, 0xd1, //0x000007e1 movq %rdx, %r9 - //0x000007e4 LBB0_102 - 0x83, 0xf9, 0x10, //0x000007e4 cmpl $16, %ecx - 0x0f, 0x85, 0xbb, 0x07, 0x00, 0x00, //0x000007e7 jne LBB0_183 - 0x49, 0x83, 0xc2, 0xf0, //0x000007ed addq $-16, %r10 - 0x49, 0x83, 0xc5, 0x10, //0x000007f1 addq $16, %r13 - 0x49, 0x83, 0xfa, 0x0f, //0x000007f5 cmpq $15, %r10 - 0x0f, 0x87, 0xe1, 0xfe, 0xff, 0xff, //0x000007f9 ja LBB0_88 - 0x4b, 0x8d, 0x0c, 0x2e, //0x000007ff leaq (%r14,%r13), %rcx - 0x49, 0x89, 0xcb, //0x00000803 movq %rcx, %r11 - 0x4c, 0x39, 0xef, //0x00000806 cmpq %r13, %rdi - 0x0f, 0x84, 0xa2, 0x07, 0x00, 0x00, //0x00000809 je LBB0_184 - //0x0000080f LBB0_105 - 0x4e, 0x8d, 0x1c, 0x11, //0x0000080f leaq (%rcx,%r10), %r11 - 0x48, 0x89, 0xca, //0x00000813 movq %rcx, %rdx - 0x48, 0x2b, 0x55, 0xc0, //0x00000816 subq $-64(%rbp), %rdx - 0x4c, 0x29, 0xe2, //0x0000081a subq %r12, %rdx - 0x48, 0x83, 0xc2, 0x01, //0x0000081d addq $1, %rdx - 0x31, 0xff, //0x00000821 xorl %edi, %edi - 0x4c, 0x8d, 0x2d, 0x2a, 0x37, 0x00, 0x00, //0x00000823 leaq $14122(%rip), %r13 /* LJTI0_3+0(%rip) */ - 0xe9, 0x2e, 0x00, 0x00, 0x00, //0x0000082a jmp LBB0_110 - //0x0000082f LBB0_106 - 0x83, 0xfe, 0x65, //0x0000082f cmpl $101, %esi - 0x0f, 0x85, 0xbc, 0x09, 0x00, 0x00, //0x00000832 jne LBB0_212 - //0x00000838 LBB0_107 - 0x49, 0x83, 0xff, 0xff, //0x00000838 cmpq $-1, %r15 - 0x0f, 0x85, 0x76, 0x1e, 0x00, 0x00, //0x0000083c jne LBB0_433 - 0x4c, 0x8d, 0x3c, 0x3a, //0x00000842 leaq (%rdx,%rdi), %r15 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000846 .p2align 4, 0x90 - //0x00000850 LBB0_109 - 0x48, 0x83, 0xc7, 0x01, //0x00000850 addq $1, %rdi - 0x49, 0x39, 0xfa, //0x00000854 cmpq %rdi, %r10 - 0x0f, 0x84, 0x54, 0x07, 0x00, 0x00, //0x00000857 je LBB0_184 - //0x0000085d LBB0_110 - 0x0f, 0xbe, 0x34, 0x39, //0x0000085d movsbl (%rcx,%rdi), %esi - 0x8d, 0x5e, 0xd0, //0x00000861 leal $-48(%rsi), %ebx - 0x83, 0xfb, 0x0a, //0x00000864 cmpl $10, %ebx - 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00000867 jb LBB0_109 - 0x8d, 0x5e, 0xd5, //0x0000086d leal $-43(%rsi), %ebx - 0x83, 0xfb, 0x1a, //0x00000870 cmpl $26, %ebx - 0x0f, 0x87, 0xb6, 0xff, 0xff, 0xff, //0x00000873 ja LBB0_106 - 0x49, 0x63, 0x74, 0x9d, 0x00, //0x00000879 movslq (%r13,%rbx,4), %rsi - 0x4c, 0x01, 0xee, //0x0000087e addq %r13, %rsi - 0xff, 0xe6, //0x00000881 jmpq *%rsi - //0x00000883 LBB0_113 - 0x49, 0x83, 0xf9, 0xff, //0x00000883 cmpq $-1, %r9 - 0x0f, 0x85, 0x2b, 0x1e, 0x00, 0x00, //0x00000887 jne LBB0_433 - 0x4c, 0x8d, 0x0c, 0x3a, //0x0000088d leaq (%rdx,%rdi), %r9 - 0xe9, 0xba, 0xff, 0xff, 0xff, //0x00000891 jmp LBB0_109 - //0x00000896 LBB0_115 - 0x49, 0x83, 0xf8, 0xff, //0x00000896 cmpq $-1, %r8 - 0x0f, 0x85, 0x18, 0x1e, 0x00, 0x00, //0x0000089a jne LBB0_433 - 0x4c, 0x8d, 0x04, 0x3a, //0x000008a0 leaq (%rdx,%rdi), %r8 - 0xe9, 0xa7, 0xff, 0xff, 0xff, //0x000008a4 jmp LBB0_109 - //0x000008a9 LBB0_117 - 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000008a9 cmpq $4095, %r9 - 0x0f, 0x8f, 0x36, 0x31, 0x00, 0x00, //0x000008b0 jg LBB0_634 - 0x48, 0x89, 0x75, 0x90, //0x000008b6 movq %rsi, $-112(%rbp) - 0x49, 0x8d, 0x41, 0x01, //0x000008ba leaq $1(%r9), %rax - 0x49, 0x89, 0x45, 0x00, //0x000008be movq %rax, (%r13) - 0x4b, 0xc7, 0x44, 0xcd, 0x08, 0x00, 0x00, 0x00, 0x00, //0x000008c2 movq $0, $8(%r13,%r9,8) - 0xe9, 0xf0, 0xf8, 0xff, 0xff, //0x000008cb jmp LBB0_4 - //0x000008d0 LBB0_64 - 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x02, 0x00, 0x00, 0x00, //0x000008d0 movq $2, (%r13,%r9,8) - 0x48, 0x8b, 0x4d, 0x98, //0x000008d9 movq $-104(%rbp), %rcx - 0xf6, 0xc1, 0x40, //0x000008dd testb $64, %cl - 0x48, 0x89, 0x75, 0x90, //0x000008e0 movq %rsi, $-112(%rbp) - 0x0f, 0x85, 0x9a, 0x03, 0x00, 0x00, //0x000008e4 jne LBB0_147 - 0x49, 0x8b, 0x16, //0x000008ea movq (%r14), %rdx - 0x48, 0x8b, 0x45, 0xa8, //0x000008ed movq $-88(%rbp), %rax - 0x48, 0x8b, 0x40, 0x08, //0x000008f1 movq $8(%rax), %rax - 0xf6, 0xc1, 0x20, //0x000008f5 testb $32, %cl - 0x48, 0x89, 0xd1, //0x000008f8 movq %rdx, %rcx - 0x48, 0x89, 0x55, 0xb0, //0x000008fb movq %rdx, $-80(%rbp) - 0x48, 0x89, 0x45, 0xa0, //0x000008ff movq %rax, $-96(%rbp) - 0x49, 0x89, 0xc1, //0x00000903 movq %rax, %r9 - 0x0f, 0x85, 0xba, 0x06, 0x00, 0x00, //0x00000906 jne LBB0_186 - 0x49, 0x29, 0xd1, //0x0000090c subq %rdx, %r9 - 0x0f, 0x84, 0x23, 0x33, 0x00, 0x00, //0x0000090f je LBB0_646 - 0x49, 0x83, 0xf9, 0x40, //0x00000915 cmpq $64, %r9 - 0x0f, 0x82, 0x30, 0x26, 0x00, 0x00, //0x00000919 jb LBB0_492 - 0x48, 0x8b, 0x45, 0xb0, //0x0000091f movq $-80(%rbp), %rax - 0x49, 0x89, 0xc6, //0x00000923 movq %rax, %r14 - 0x49, 0xf7, 0xd6, //0x00000926 notq %r14 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000929 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00000931 xorl %r8d, %r8d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000934 .p2align 4, 0x90 - //0x00000940 LBB0_69 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00000940 movdqu (%r12,%rax), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00000946 movdqu $16(%r12,%rax), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000094d movdqu $32(%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000954 movdqu $48(%r12,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xfb, //0x0000095b movdqa %xmm3, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000095f pcmpeqb %xmm0, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00000963 pmovmskb %xmm7, %r10d - 0x66, 0x0f, 0x6f, 0xfc, //0x00000968 movdqa %xmm4, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000096c pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xdf, //0x00000970 pmovmskb %xmm7, %ebx - 0x66, 0x0f, 0x6f, 0xfd, //0x00000974 movdqa %xmm5, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x00000978 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x0000097c pmovmskb %xmm7, %edi - 0x66, 0x0f, 0x6f, 0xfe, //0x00000980 movdqa %xmm6, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x00000984 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xd7, //0x00000988 pmovmskb %xmm7, %edx - 0x66, 0x0f, 0x74, 0xd9, //0x0000098c pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000990 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x74, 0xe1, //0x00000995 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x00000999 pmovmskb %xmm4, %ecx - 0x66, 0x0f, 0x74, 0xe9, //0x0000099d pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x000009a1 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x74, 0xf1, //0x000009a5 pcmpeqb %xmm1, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x000009a9 pmovmskb %xmm6, %r15d - 0x48, 0xc1, 0xe2, 0x30, //0x000009ae shlq $48, %rdx - 0x48, 0xc1, 0xe7, 0x20, //0x000009b2 shlq $32, %rdi - 0x48, 0x09, 0xd7, //0x000009b6 orq %rdx, %rdi - 0x48, 0xc1, 0xe3, 0x10, //0x000009b9 shlq $16, %rbx - 0x48, 0x09, 0xfb, //0x000009bd orq %rdi, %rbx - 0x49, 0x09, 0xda, //0x000009c0 orq %rbx, %r10 - 0x49, 0xc1, 0xe7, 0x30, //0x000009c3 shlq $48, %r15 - 0x48, 0xc1, 0xe6, 0x20, //0x000009c7 shlq $32, %rsi - 0x4c, 0x09, 0xfe, //0x000009cb orq %r15, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x000009ce shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x000009d2 orq %rsi, %rcx - 0x49, 0x09, 0xcb, //0x000009d5 orq %rcx, %r11 - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000009d8 jne LBB0_121 - 0x4d, 0x85, 0xc0, //0x000009de testq %r8, %r8 - 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x000009e1 jne LBB0_123 - 0x45, 0x31, 0xc0, //0x000009e7 xorl %r8d, %r8d - 0x4d, 0x85, 0xd2, //0x000009ea testq %r10, %r10 - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x000009ed jne LBB0_124 - //0x000009f3 LBB0_72 - 0x49, 0x83, 0xc1, 0xc0, //0x000009f3 addq $-64, %r9 - 0x49, 0x83, 0xc6, 0xc0, //0x000009f7 addq $-64, %r14 - 0x48, 0x83, 0xc0, 0x40, //0x000009fb addq $64, %rax - 0x49, 0x83, 0xf9, 0x3f, //0x000009ff cmpq $63, %r9 - 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x00000a03 ja LBB0_69 - 0xe9, 0x8d, 0x1e, 0x00, 0x00, //0x00000a09 jmp LBB0_73 - //0x00000a0e LBB0_121 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00000a0e cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00000a13 jne LBB0_123 - 0x49, 0x0f, 0xbc, 0xcb, //0x00000a19 bsfq %r11, %rcx - 0x48, 0x01, 0xc1, //0x00000a1d addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00000a20 movq %rcx, $-56(%rbp) - //0x00000a24 LBB0_123 - 0x4c, 0x89, 0xc1, //0x00000a24 movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00000a27 notq %rcx - 0x4c, 0x21, 0xd9, //0x00000a2a andq %r11, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x00000a2d leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xc2, //0x00000a31 orq %r8, %rdx - 0x48, 0x89, 0xd6, //0x00000a34 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000a37 notq %rsi - 0x4c, 0x21, 0xde, //0x00000a3a andq %r11, %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000a3d movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfe, //0x00000a47 andq %rdi, %rsi - 0x45, 0x31, 0xc0, //0x00000a4a xorl %r8d, %r8d - 0x48, 0x01, 0xce, //0x00000a4d addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc0, //0x00000a50 setb %r8b - 0x48, 0x01, 0xf6, //0x00000a54 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000a57 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00000a61 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00000a64 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000a67 notq %rsi - 0x49, 0x21, 0xf2, //0x00000a6a andq %rsi, %r10 - 0x4d, 0x85, 0xd2, //0x00000a6d testq %r10, %r10 - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000a70 je LBB0_72 - //0x00000a76 LBB0_124 - 0x49, 0x0f, 0xbc, 0xc2, //0x00000a76 bsfq %r10, %rax - 0x4c, 0x29, 0xf0, //0x00000a7a subq %r14, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x00000a7d movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000a81 movabsq $4294977024, %r11 - 0xe9, 0x73, 0x0d, 0x00, 0x00, //0x00000a8b jmp LBB0_304 - //0x00000a90 LBB0_125 - 0x48, 0x8b, 0x4d, 0xa8, //0x00000a90 movq $-88(%rbp), %rcx - 0x4c, 0x8b, 0x49, 0x08, //0x00000a94 movq $8(%rcx), %r9 - 0x4d, 0x8b, 0x06, //0x00000a98 movq (%r14), %r8 - 0x4f, 0x8d, 0x14, 0x04, //0x00000a9b leaq (%r12,%r8), %r10 - 0x4d, 0x29, 0xc1, //0x00000a9f subq %r8, %r9 - 0x49, 0x83, 0xf9, 0x20, //0x00000aa2 cmpq $32, %r9 - 0x0f, 0x8c, 0xbc, 0x1b, 0x00, 0x00, //0x00000aa6 jl LBB0_134 - 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x00000aac movl $32, %r14d - 0x31, 0xd2, //0x00000ab2 xorl %edx, %edx - 0x45, 0x31, 0xdb, //0x00000ab4 xorl %r11d, %r11d - 0xe9, 0x2a, 0x00, 0x00, 0x00, //0x00000ab7 jmp LBB0_127 - 0x90, 0x90, 0x90, 0x90, //0x00000abc .p2align 4, 0x90 - //0x00000ac0 LBB0_130 - 0x45, 0x31, 0xdb, //0x00000ac0 xorl %r11d, %r11d - 0x48, 0x85, 0xff, //0x00000ac3 testq %rdi, %rdi - 0x0f, 0x85, 0xa5, 0x00, 0x00, 0x00, //0x00000ac6 jne LBB0_129 - //0x00000acc LBB0_131 - 0x48, 0x83, 0xc2, 0x20, //0x00000acc addq $32, %rdx - 0x4b, 0x8d, 0x0c, 0x31, //0x00000ad0 leaq (%r9,%r14), %rcx - 0x48, 0x83, 0xc1, 0xe0, //0x00000ad4 addq $-32, %rcx - 0x49, 0x83, 0xc6, 0xe0, //0x00000ad8 addq $-32, %r14 - 0x48, 0x83, 0xf9, 0x3f, //0x00000adc cmpq $63, %rcx - 0x0f, 0x8e, 0x65, 0x1b, 0x00, 0x00, //0x00000ae0 jle LBB0_132 - //0x00000ae6 LBB0_127 - 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x12, //0x00000ae6 movdqu (%r10,%rdx), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x12, 0x10, //0x00000aec movdqu $16(%r10,%rdx), %xmm5 - 0x66, 0x0f, 0x6f, 0xf4, //0x00000af3 movdqa %xmm4, %xmm6 - 0x66, 0x0f, 0x74, 0xf0, //0x00000af7 pcmpeqb %xmm0, %xmm6 - 0x66, 0x0f, 0xd7, 0xf6, //0x00000afb pmovmskb %xmm6, %esi - 0x66, 0x0f, 0x6f, 0xf5, //0x00000aff movdqa %xmm5, %xmm6 - 0x66, 0x0f, 0x74, 0xf0, //0x00000b03 pcmpeqb %xmm0, %xmm6 - 0x66, 0x0f, 0xd7, 0xfe, //0x00000b07 pmovmskb %xmm6, %edi - 0x48, 0xc1, 0xe7, 0x10, //0x00000b0b shlq $16, %rdi - 0x48, 0x09, 0xf7, //0x00000b0f orq %rsi, %rdi - 0x66, 0x0f, 0x74, 0xe1, //0x00000b12 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x00000b16 pmovmskb %xmm4, %ecx - 0x66, 0x0f, 0x74, 0xe9, //0x00000b1a pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00000b1e pmovmskb %xmm5, %esi - 0x48, 0xc1, 0xe6, 0x10, //0x00000b22 shlq $16, %rsi - 0x48, 0x09, 0xce, //0x00000b26 orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00000b29 movq %rsi, %rcx - 0x4c, 0x09, 0xd9, //0x00000b2c orq %r11, %rcx - 0x0f, 0x84, 0x8b, 0xff, 0xff, 0xff, //0x00000b2f je LBB0_130 - 0x44, 0x89, 0xd9, //0x00000b35 movl %r11d, %ecx - 0xf7, 0xd1, //0x00000b38 notl %ecx - 0x21, 0xf1, //0x00000b3a andl %esi, %ecx - 0x44, 0x8d, 0x3c, 0x09, //0x00000b3c leal (%rcx,%rcx), %r15d - 0x45, 0x09, 0xdf, //0x00000b40 orl %r11d, %r15d - 0x44, 0x89, 0xfb, //0x00000b43 movl %r15d, %ebx - 0xf7, 0xd3, //0x00000b46 notl %ebx - 0x21, 0xf3, //0x00000b48 andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000b4a andl $-1431655766, %ebx - 0x45, 0x31, 0xdb, //0x00000b50 xorl %r11d, %r11d - 0x01, 0xcb, //0x00000b53 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc3, //0x00000b55 setb %r11b - 0x01, 0xdb, //0x00000b59 addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00000b5b xorl $1431655765, %ebx - 0x44, 0x21, 0xfb, //0x00000b61 andl %r15d, %ebx - 0xf7, 0xd3, //0x00000b64 notl %ebx - 0x21, 0xdf, //0x00000b66 andl %ebx, %edi - 0x48, 0x85, 0xff, //0x00000b68 testq %rdi, %rdi - 0x0f, 0x84, 0x5b, 0xff, 0xff, 0xff, //0x00000b6b je LBB0_131 - //0x00000b71 LBB0_129 - 0x0f, 0xbc, 0xc7, //0x00000b71 bsfl %edi, %eax - 0x4c, 0x01, 0xc0, //0x00000b74 addq %r8, %rax - 0x4c, 0x8d, 0x14, 0x02, //0x00000b77 leaq (%rdx,%rax), %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00000b7b addq $1, %r10 - 0x4c, 0x8b, 0x75, 0xd0, //0x00000b7f movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000b83 movabsq $4294977024, %r11 - 0x4d, 0x89, 0x16, //0x00000b8d movq %r10, (%r14) - 0x4d, 0x85, 0xc0, //0x00000b90 testq %r8, %r8 - 0x0f, 0x8f, 0x27, 0xf6, 0xff, 0xff, //0x00000b93 jg LBB0_4 - 0xe9, 0x63, 0x2e, 0x00, 0x00, //0x00000b99 jmp LBB0_608 - //0x00000b9e LBB0_135 - 0x48, 0x89, 0xf9, //0x00000b9e movq %rdi, %rcx - 0x48, 0x29, 0xf1, //0x00000ba1 subq %rsi, %rcx - 0x48, 0x83, 0xf9, 0x10, //0x00000ba4 cmpq $16, %rcx - 0x0f, 0x82, 0x0d, 0x22, 0x00, 0x00, //0x00000ba8 jb LBB0_470 - 0x48, 0x89, 0xf1, //0x00000bae movq %rsi, %rcx - 0x48, 0xf7, 0xd9, //0x00000bb1 negq %rcx - 0x48, 0x89, 0xf0, //0x00000bb4 movq %rsi, %rax - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000bb7 .p2align 4, 0x90 - //0x00000bc0 LBB0_137 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00000bc0 movdqu (%r12,%rax), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x00000bc6 movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0x74, 0xe6, //0x00000bca pcmpeqb %xmm14, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xd9, //0x00000bcf pand %xmm9, %xmm3 - 0x66, 0x0f, 0x74, 0xda, //0x00000bd4 pcmpeqb %xmm2, %xmm3 - 0x66, 0x0f, 0xeb, 0xdc, //0x00000bd8 por %xmm4, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x00000bdc pmovmskb %xmm3, %edx - 0x85, 0xd2, //0x00000be0 testl %edx, %edx - 0x0f, 0x85, 0xbe, 0xf5, 0xff, 0xff, //0x00000be2 jne LBB0_613 - 0x48, 0x83, 0xc0, 0x10, //0x00000be8 addq $16, %rax - 0x48, 0x8d, 0x14, 0x0f, //0x00000bec leaq (%rdi,%rcx), %rdx - 0x48, 0x83, 0xc2, 0xf0, //0x00000bf0 addq $-16, %rdx - 0x48, 0x83, 0xc1, 0xf0, //0x00000bf4 addq $-16, %rcx - 0x48, 0x83, 0xfa, 0x0f, //0x00000bf8 cmpq $15, %rdx - 0x0f, 0x87, 0xbe, 0xff, 0xff, 0xff, //0x00000bfc ja LBB0_137 - 0x4c, 0x89, 0xe0, //0x00000c02 movq %r12, %rax - 0x48, 0x29, 0xc8, //0x00000c05 subq %rcx, %rax - 0x48, 0x01, 0xcf, //0x00000c08 addq %rcx, %rdi - 0x48, 0x89, 0xf9, //0x00000c0b movq %rdi, %rcx - 0x48, 0x85, 0xc9, //0x00000c0e testq %rcx, %rcx - 0x0f, 0x84, 0xb1, 0x21, 0x00, 0x00, //0x00000c11 je LBB0_471 - //0x00000c17 LBB0_140 - 0x48, 0x8d, 0x3c, 0x08, //0x00000c17 leaq (%rax,%rcx), %rdi - 0x31, 0xd2, //0x00000c1b xorl %edx, %edx - //0x00000c1d LBB0_141 - 0x0f, 0xb6, 0x1c, 0x10, //0x00000c1d movzbl (%rax,%rdx), %ebx - 0x80, 0xfb, 0x2c, //0x00000c21 cmpb $44, %bl - 0x0f, 0x84, 0x4c, 0x1a, 0x00, 0x00, //0x00000c24 je LBB0_428 - 0x80, 0xfb, 0x7d, //0x00000c2a cmpb $125, %bl - 0x0f, 0x84, 0x43, 0x1a, 0x00, 0x00, //0x00000c2d je LBB0_428 - 0x80, 0xfb, 0x5d, //0x00000c33 cmpb $93, %bl - 0x0f, 0x84, 0x3a, 0x1a, 0x00, 0x00, //0x00000c36 je LBB0_428 - 0x48, 0x83, 0xc2, 0x01, //0x00000c3c addq $1, %rdx - 0x48, 0x39, 0xd1, //0x00000c40 cmpq %rdx, %rcx - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x00000c43 jne LBB0_141 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00000c49 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00000c4e movdqa %xmm2, %xmm5 - 0x48, 0x89, 0xf8, //0x00000c52 movq %rdi, %rax - //0x00000c55 LBB0_146 - 0x4c, 0x29, 0xe0, //0x00000c55 subq %r12, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x00000c58 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00000c5c movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000c60 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x00000c6a movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00000c6e movdqa %xmm6, %xmm13 - 0x49, 0x89, 0x06, //0x00000c73 movq %rax, (%r14) - 0x48, 0x85, 0xf6, //0x00000c76 testq %rsi, %rsi - 0x0f, 0x8f, 0x41, 0xf5, 0xff, 0xff, //0x00000c79 jg LBB0_4 - 0xe9, 0xd5, 0x2d, 0x00, 0x00, //0x00000c7f jmp LBB0_614 - //0x00000c84 LBB0_147 - 0x48, 0x8b, 0x4d, 0xa8, //0x00000c84 movq $-88(%rbp), %rcx - 0x4c, 0x8b, 0x49, 0x08, //0x00000c88 movq $8(%rcx), %r9 - 0x4d, 0x8b, 0x06, //0x00000c8c movq (%r14), %r8 - 0x4f, 0x8d, 0x14, 0x04, //0x00000c8f leaq (%r12,%r8), %r10 - 0x4d, 0x29, 0xc1, //0x00000c93 subq %r8, %r9 - 0x49, 0x83, 0xf9, 0x20, //0x00000c96 cmpq $32, %r9 - 0x0f, 0x8c, 0x4e, 0x1a, 0x00, 0x00, //0x00000c9a jl LBB0_156 - 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x00000ca0 movl $32, %r14d - 0x31, 0xd2, //0x00000ca6 xorl %edx, %edx - 0x45, 0x31, 0xdb, //0x00000ca8 xorl %r11d, %r11d - 0xe9, 0x26, 0x00, 0x00, 0x00, //0x00000cab jmp LBB0_149 - //0x00000cb0 .p2align 4, 0x90 - //0x00000cb0 LBB0_152 + 0x48, 0xc7, 0x45, 0x90, 0xff, 0xff, 0xff, 0xff, //0x0000012c movq $-1, $-112(%rbp) + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000134 movabsq $4294977024, %r11 + 0xf3, 0x0f, 0x6f, 0x05, 0xca, 0xfe, 0xff, 0xff, //0x0000013e movdqu $-310(%rip), %xmm0 /* LCPI0_1+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0xd2, 0xfe, 0xff, 0xff, //0x00000146 movdqu $-302(%rip), %xmm1 /* LCPI0_2+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x25, 0xd9, 0xfe, 0xff, 0xff, //0x0000014e movdqu $-295(%rip), %xmm12 /* LCPI0_3+0(%rip) */ + 0x66, 0x45, 0x0f, 0x76, 0xd2, //0x00000157 pcmpeqd %xmm10, %xmm10 + 0xf3, 0x44, 0x0f, 0x6f, 0x3d, 0x4b, 0xff, 0xff, 0xff, //0x0000015c movdqu $-181(%rip), %xmm15 /* LCPI0_11+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x0d, 0x22, 0xff, 0xff, 0xff, //0x00000165 movdqu $-222(%rip), %xmm9 /* LCPI0_9+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x79, 0xff, 0xff, 0xff, //0x0000016e movdqu $-135(%rip), %xmm11 /* LCPI0_15+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x35, 0x00, 0xff, 0xff, 0xff, //0x00000177 movdqu $-256(%rip), %xmm14 /* LCPI0_8+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x15, 0xe8, 0xfe, 0xff, 0xff, //0x00000180 movdqu $-280(%rip), %xmm2 /* LCPI0_7+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xaf, 0xfe, 0xff, 0xff, //0x00000188 movdqu $-337(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x05, 0xb6, 0xfe, 0xff, 0xff, //0x00000191 movdqu $-330(%rip), %xmm8 /* LCPI0_5+0(%rip) */ + 0x48, 0x89, 0x75, 0xd0, //0x0000019a movq %rsi, $-48(%rbp) + 0x48, 0x89, 0x55, 0xb0, //0x0000019e movq %rdx, $-80(%rbp) + 0xe9, 0x3d, 0x00, 0x00, 0x00, //0x000001a2 jmp LBB0_6 + //0x000001a7 LBB0_1 + 0x0f, 0xbc, 0xc3, //0x000001a7 bsfl %ebx, %eax + 0x4c, 0x01, 0xc0, //0x000001aa addq %r8, %rax + 0x4c, 0x8d, 0x14, 0x06, //0x000001ad leaq (%rsi,%rax), %r10 + 0x49, 0x83, 0xc2, 0x01, //0x000001b1 addq $1, %r10 + 0x4c, 0x8b, 0x75, 0xd0, //0x000001b5 movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000001b9 movabsq $4294977024, %r11 + //0x000001c3 LBB0_2 + 0x4d, 0x89, 0x16, //0x000001c3 movq %r10, (%r14) + //0x000001c6 LBB0_3 + 0x4d, 0x85, 0xc0, //0x000001c6 testq %r8, %r8 + 0x0f, 0x8e, 0x8d, 0x38, 0x00, 0x00, //0x000001c9 jle LBB0_622 + 0x90, //0x000001cf .p2align 4, 0x90 + //0x000001d0 LBB0_4 + 0x4d, 0x8b, 0x45, 0x00, //0x000001d0 movq (%r13), %r8 + 0x48, 0x8b, 0x55, 0x90, //0x000001d4 movq $-112(%rbp), %rdx + 0x48, 0x89, 0xd0, //0x000001d8 movq %rdx, %rax + 0x4d, 0x85, 0xc0, //0x000001db testq %r8, %r8 + 0x0f, 0x84, 0xcb, 0x38, 0x00, 0x00, //0x000001de je LBB0_650 + //0x000001e4 LBB0_6 + 0x48, 0x8b, 0x4d, 0x90, //0x000001e4 movq $-112(%rbp), %rcx + 0x48, 0x8b, 0x45, 0xa8, //0x000001e8 movq $-88(%rbp), %rax + 0x4c, 0x8b, 0x20, //0x000001ec movq (%rax), %r12 + 0x48, 0x8b, 0x40, 0x08, //0x000001ef movq $8(%rax), %rax + 0x49, 0x8b, 0x36, //0x000001f3 movq (%r14), %rsi + 0x48, 0x39, 0xc6, //0x000001f6 cmpq %rax, %rsi + 0x0f, 0x83, 0x31, 0x00, 0x00, 0x00, //0x000001f9 jae LBB0_11 + 0x41, 0x8a, 0x14, 0x34, //0x000001ff movb (%r12,%rsi), %dl + 0x80, 0xfa, 0x0d, //0x00000203 cmpb $13, %dl + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x00000206 je LBB0_11 + 0x80, 0xfa, 0x20, //0x0000020c cmpb $32, %dl + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x0000020f je LBB0_11 + 0x80, 0xc2, 0xf7, //0x00000215 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00000218 cmpb $1, %dl + 0x0f, 0x86, 0x0f, 0x00, 0x00, 0x00, //0x0000021b jbe LBB0_11 + 0x48, 0x89, 0xf2, //0x00000221 movq %rsi, %rdx + 0xe9, 0xff, 0x00, 0x00, 0x00, //0x00000224 jmp LBB0_32 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000229 .p2align 4, 0x90 + //0x00000230 LBB0_11 + 0x48, 0x8d, 0x56, 0x01, //0x00000230 leaq $1(%rsi), %rdx + 0x48, 0x39, 0xc2, //0x00000234 cmpq %rax, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000237 jae LBB0_15 + 0x41, 0x8a, 0x1c, 0x14, //0x0000023d movb (%r12,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x00000241 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000244 je LBB0_15 + 0x80, 0xfb, 0x20, //0x0000024a cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000024d je LBB0_15 + 0x80, 0xc3, 0xf7, //0x00000253 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000256 cmpb $1, %bl + 0x0f, 0x87, 0xc9, 0x00, 0x00, 0x00, //0x00000259 ja LBB0_32 + 0x90, //0x0000025f .p2align 4, 0x90 + //0x00000260 LBB0_15 + 0x48, 0x8d, 0x56, 0x02, //0x00000260 leaq $2(%rsi), %rdx + 0x48, 0x39, 0xc2, //0x00000264 cmpq %rax, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000267 jae LBB0_19 + 0x41, 0x8a, 0x1c, 0x14, //0x0000026d movb (%r12,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x00000271 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000274 je LBB0_19 + 0x80, 0xfb, 0x20, //0x0000027a cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000027d je LBB0_19 + 0x80, 0xc3, 0xf7, //0x00000283 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000286 cmpb $1, %bl + 0x0f, 0x87, 0x99, 0x00, 0x00, 0x00, //0x00000289 ja LBB0_32 + 0x90, //0x0000028f .p2align 4, 0x90 + //0x00000290 LBB0_19 + 0x48, 0x8d, 0x56, 0x03, //0x00000290 leaq $3(%rsi), %rdx + 0x48, 0x39, 0xc2, //0x00000294 cmpq %rax, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000297 jae LBB0_23 + 0x41, 0x8a, 0x1c, 0x14, //0x0000029d movb (%r12,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x000002a1 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000002a4 je LBB0_23 + 0x80, 0xfb, 0x20, //0x000002aa cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000002ad je LBB0_23 + 0x80, 0xc3, 0xf7, //0x000002b3 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000002b6 cmpb $1, %bl + 0x0f, 0x87, 0x69, 0x00, 0x00, 0x00, //0x000002b9 ja LBB0_32 + 0x90, //0x000002bf .p2align 4, 0x90 + //0x000002c0 LBB0_23 + 0x48, 0x83, 0xc6, 0x04, //0x000002c0 addq $4, %rsi + 0x48, 0x39, 0xf0, //0x000002c4 cmpq %rsi, %rax + 0x0f, 0x86, 0x74, 0x37, 0x00, 0x00, //0x000002c7 jbe LBB0_619 + 0x48, 0x39, 0xf0, //0x000002cd cmpq %rsi, %rax + 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x000002d0 je LBB0_29 + 0x49, 0x8d, 0x14, 0x04, //0x000002d6 leaq (%r12,%rax), %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000002da .p2align 4, 0x90 + //0x000002e0 LBB0_26 + 0x41, 0x0f, 0xbe, 0x3c, 0x34, //0x000002e0 movsbl (%r12,%rsi), %edi + 0x83, 0xff, 0x20, //0x000002e5 cmpl $32, %edi + 0x0f, 0x87, 0x2e, 0x00, 0x00, 0x00, //0x000002e8 ja LBB0_31 + 0x49, 0x0f, 0xa3, 0xfb, //0x000002ee btq %rdi, %r11 + 0x0f, 0x83, 0x24, 0x00, 0x00, 0x00, //0x000002f2 jae LBB0_31 + 0x48, 0x83, 0xc6, 0x01, //0x000002f8 addq $1, %rsi + 0x48, 0x39, 0xf0, //0x000002fc cmpq %rsi, %rax + 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x000002ff jne LBB0_26 + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x00000305 jmp LBB0_30 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000030a .p2align 4, 0x90 + //0x00000310 LBB0_29 + 0x4c, 0x01, 0xe6, //0x00000310 addq %r12, %rsi + 0x48, 0x89, 0xf2, //0x00000313 movq %rsi, %rdx + //0x00000316 LBB0_30 + 0x4c, 0x29, 0xe2, //0x00000316 subq %r12, %rdx + 0x48, 0x89, 0xd6, //0x00000319 movq %rdx, %rsi + //0x0000031c LBB0_31 + 0x48, 0x89, 0xf2, //0x0000031c movq %rsi, %rdx + 0x48, 0x39, 0xc6, //0x0000031f cmpq %rax, %rsi + 0x0f, 0x83, 0x1c, 0x37, 0x00, 0x00, //0x00000322 jae LBB0_620 + //0x00000328 LBB0_32 + 0x48, 0x8d, 0x42, 0x01, //0x00000328 leaq $1(%rdx), %rax + 0x49, 0x89, 0x06, //0x0000032c movq %rax, (%r14) + 0x41, 0x0f, 0xbe, 0x3c, 0x14, //0x0000032f movsbl (%r12,%rdx), %edi + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000334 movq $-1, %rax + 0x85, 0xff, //0x0000033b testl %edi, %edi + 0x0f, 0x84, 0x6c, 0x37, 0x00, 0x00, //0x0000033d je LBB0_650 + 0x4d, 0x8b, 0x4d, 0x00, //0x00000343 movq (%r13), %r9 + 0x4d, 0x8d, 0x41, 0xff, //0x00000347 leaq $-1(%r9), %r8 + 0x43, 0x8b, 0x5c, 0xcd, 0x00, //0x0000034b movl (%r13,%r9,8), %ebx + 0x48, 0x83, 0xf9, 0xff, //0x00000350 cmpq $-1, %rcx + 0x48, 0x0f, 0x45, 0xd1, //0x00000354 cmovneq %rcx, %rdx + 0x83, 0xc3, 0xff, //0x00000358 addl $-1, %ebx + 0x83, 0xfb, 0x05, //0x0000035b cmpl $5, %ebx + 0x48, 0x89, 0x55, 0x90, //0x0000035e movq %rdx, $-112(%rbp) + 0x0f, 0x87, 0x73, 0x02, 0x00, 0x00, //0x00000362 ja LBB0_78 + 0x48, 0x8d, 0x35, 0xdd, 0x39, 0x00, 0x00, //0x00000368 leaq $14813(%rip), %rsi /* LJTI0_0+0(%rip) */ + 0x48, 0x63, 0x0c, 0x9e, //0x0000036f movslq (%rsi,%rbx,4), %rcx + 0x48, 0x01, 0xf1, //0x00000373 addq %rsi, %rcx + 0xff, 0xe1, //0x00000376 jmpq *%rcx + //0x00000378 LBB0_35 + 0x83, 0xff, 0x2c, //0x00000378 cmpl $44, %edi + 0x0f, 0x84, 0xf0, 0x04, 0x00, 0x00, //0x0000037b je LBB0_117 + 0x83, 0xff, 0x5d, //0x00000381 cmpl $93, %edi + 0x0f, 0x84, 0x3c, 0x02, 0x00, 0x00, //0x00000384 je LBB0_37 + 0xe9, 0x19, 0x37, 0x00, 0x00, //0x0000038a jmp LBB0_649 + //0x0000038f LBB0_38 + 0x40, 0x80, 0xff, 0x5d, //0x0000038f cmpb $93, %dil + 0x0f, 0x84, 0x2d, 0x02, 0x00, 0x00, //0x00000393 je LBB0_37 + 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000399 movq $1, (%r13,%r9,8) + 0x83, 0xff, 0x7b, //0x000003a2 cmpl $123, %edi + 0x0f, 0x86, 0x3d, 0x02, 0x00, 0x00, //0x000003a5 jbe LBB0_79 + 0xe9, 0xf8, 0x36, 0x00, 0x00, //0x000003ab jmp LBB0_649 + //0x000003b0 LBB0_40 + 0x40, 0x80, 0xff, 0x22, //0x000003b0 cmpb $34, %dil + 0x0f, 0x85, 0xee, 0x36, 0x00, 0x00, //0x000003b4 jne LBB0_649 + 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x04, 0x00, 0x00, 0x00, //0x000003ba movq $4, (%r13,%r9,8) + 0x48, 0x8b, 0x4d, 0x98, //0x000003c3 movq $-104(%rbp), %rcx + 0xf6, 0xc1, 0x40, //0x000003c7 testb $64, %cl + 0x0f, 0x85, 0x74, 0x06, 0x00, 0x00, //0x000003ca jne LBB0_125 + 0x49, 0x8b, 0x16, //0x000003d0 movq (%r14), %rdx + 0x48, 0x8b, 0x45, 0xa8, //0x000003d3 movq $-88(%rbp), %rax + 0x48, 0x8b, 0x40, 0x08, //0x000003d7 movq $8(%rax), %rax + 0xf6, 0xc1, 0x20, //0x000003db testb $32, %cl + 0x48, 0x89, 0x45, 0xa0, //0x000003de movq %rax, $-96(%rbp) + 0x48, 0x89, 0x55, 0xc0, //0x000003e2 movq %rdx, $-64(%rbp) + 0x0f, 0x85, 0xa2, 0x09, 0x00, 0x00, //0x000003e6 jne LBB0_162 + 0x49, 0x89, 0xc1, //0x000003ec movq %rax, %r9 + 0x49, 0x29, 0xd1, //0x000003ef subq %rdx, %r9 + 0x0f, 0x84, 0x71, 0x38, 0x00, 0x00, //0x000003f2 je LBB0_656 + 0x49, 0x83, 0xf9, 0x40, //0x000003f8 cmpq $64, %r9 + 0x0f, 0x82, 0xd5, 0x2a, 0x00, 0x00, //0x000003fc jb LBB0_502 + 0x48, 0x8b, 0x45, 0xc0, //0x00000402 movq $-64(%rbp), %rax + 0x49, 0x89, 0xc6, //0x00000406 movq %rax, %r14 + 0x49, 0xf7, 0xd6, //0x00000409 notq %r14 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000040c movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x00000414 xorl %r8d, %r8d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000417 .p2align 4, 0x90 + //0x00000420 LBB0_46 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00000420 movdqu (%r12,%rax), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00000426 movdqu $16(%r12,%rax), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000042d movdqu $32(%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000434 movdqu $48(%r12,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xfb, //0x0000043b movdqa %xmm3, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000043f pcmpeqb %xmm0, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00000443 pmovmskb %xmm7, %r10d + 0x66, 0x0f, 0x6f, 0xfc, //0x00000448 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000044c pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xdf, //0x00000450 pmovmskb %xmm7, %ebx + 0x66, 0x0f, 0x6f, 0xfd, //0x00000454 movdqa %xmm5, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00000458 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x0000045c pmovmskb %xmm7, %esi + 0x66, 0x0f, 0x6f, 0xfe, //0x00000460 movdqa %xmm6, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00000464 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xd7, //0x00000468 pmovmskb %xmm7, %edx + 0x66, 0x0f, 0x74, 0xd9, //0x0000046c pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000470 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x74, 0xe1, //0x00000475 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00000479 pmovmskb %xmm4, %ecx + 0x66, 0x0f, 0x74, 0xe9, //0x0000047d pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00000481 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x74, 0xf1, //0x00000485 pcmpeqb %xmm1, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00000489 pmovmskb %xmm6, %r15d + 0x48, 0xc1, 0xe2, 0x30, //0x0000048e shlq $48, %rdx + 0x48, 0xc1, 0xe6, 0x20, //0x00000492 shlq $32, %rsi + 0x48, 0x09, 0xd6, //0x00000496 orq %rdx, %rsi + 0x48, 0xc1, 0xe3, 0x10, //0x00000499 shlq $16, %rbx + 0x48, 0x09, 0xf3, //0x0000049d orq %rsi, %rbx + 0x49, 0x09, 0xda, //0x000004a0 orq %rbx, %r10 + 0x49, 0xc1, 0xe7, 0x30, //0x000004a3 shlq $48, %r15 + 0x48, 0xc1, 0xe7, 0x20, //0x000004a7 shlq $32, %rdi + 0x4c, 0x09, 0xff, //0x000004ab orq %r15, %rdi + 0x48, 0xc1, 0xe1, 0x10, //0x000004ae shlq $16, %rcx + 0x48, 0x09, 0xf9, //0x000004b2 orq %rdi, %rcx + 0x49, 0x09, 0xcb, //0x000004b5 orq %rcx, %r11 + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000004b8 jne LBB0_55 + 0x4d, 0x85, 0xc0, //0x000004be testq %r8, %r8 + 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x000004c1 jne LBB0_57 + 0x45, 0x31, 0xc0, //0x000004c7 xorl %r8d, %r8d + 0x4d, 0x85, 0xd2, //0x000004ca testq %r10, %r10 + 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x000004cd jne LBB0_58 + //0x000004d3 LBB0_49 + 0x49, 0x83, 0xc1, 0xc0, //0x000004d3 addq $-64, %r9 + 0x49, 0x83, 0xc6, 0xc0, //0x000004d7 addq $-64, %r14 + 0x48, 0x83, 0xc0, 0x40, //0x000004db addq $64, %rax + 0x49, 0x83, 0xf9, 0x3f, //0x000004df cmpq $63, %r9 + 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x000004e3 ja LBB0_46 + 0xe9, 0x56, 0x22, 0x00, 0x00, //0x000004e9 jmp LBB0_50 + //0x000004ee LBB0_55 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000004ee cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000004f3 jne LBB0_57 + 0x49, 0x0f, 0xbc, 0xcb, //0x000004f9 bsfq %r11, %rcx + 0x48, 0x01, 0xc1, //0x000004fd addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00000500 movq %rcx, $-56(%rbp) + //0x00000504 LBB0_57 + 0x4c, 0x89, 0xc1, //0x00000504 movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00000507 notq %rcx + 0x4c, 0x21, 0xd9, //0x0000050a andq %r11, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x0000050d leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xc2, //0x00000511 orq %r8, %rdx + 0x48, 0x89, 0xd6, //0x00000514 movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000517 notq %rsi + 0x4c, 0x21, 0xde, //0x0000051a andq %r11, %rsi + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000051d movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfe, //0x00000527 andq %rdi, %rsi + 0x45, 0x31, 0xc0, //0x0000052a xorl %r8d, %r8d + 0x48, 0x01, 0xce, //0x0000052d addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc0, //0x00000530 setb %r8b + 0x48, 0x01, 0xf6, //0x00000534 addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000537 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x00000541 xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00000544 andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000547 notq %rsi + 0x49, 0x21, 0xf2, //0x0000054a andq %rsi, %r10 + 0x4d, 0x85, 0xd2, //0x0000054d testq %r10, %r10 + 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000550 je LBB0_49 + //0x00000556 LBB0_58 + 0x49, 0x0f, 0xbc, 0xc2, //0x00000556 bsfq %r10, %rax + 0x4c, 0x29, 0xf0, //0x0000055a subq %r14, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x0000055d movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000561 movabsq $4294977024, %r11 + 0xe9, 0xff, 0x0c, 0x00, 0x00, //0x0000056b jmp LBB0_229 + //0x00000570 LBB0_59 + 0x40, 0x80, 0xff, 0x3a, //0x00000570 cmpb $58, %dil + 0x0f, 0x85, 0x2e, 0x35, 0x00, 0x00, //0x00000574 jne LBB0_649 + 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000057a movq $0, (%r13,%r9,8) + 0xe9, 0x48, 0xfc, 0xff, 0xff, //0x00000583 jmp LBB0_4 + //0x00000588 LBB0_61 + 0x83, 0xff, 0x2c, //0x00000588 cmpl $44, %edi + 0x0f, 0x85, 0x2c, 0x00, 0x00, 0x00, //0x0000058b jne LBB0_62 + 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00000591 cmpq $4095, %r9 + 0x0f, 0x8f, 0xb2, 0x34, 0x00, 0x00, //0x00000598 jg LBB0_651 + 0x49, 0x8d, 0x41, 0x01, //0x0000059e leaq $1(%r9), %rax + 0x49, 0x89, 0x45, 0x00, //0x000005a2 movq %rax, (%r13) + 0x4b, 0xc7, 0x44, 0xcd, 0x08, 0x03, 0x00, 0x00, 0x00, //0x000005a6 movq $3, $8(%r13,%r9,8) + 0xe9, 0x1c, 0xfc, 0xff, 0xff, //0x000005af jmp LBB0_4 + //0x000005b4 LBB0_63 + 0x83, 0xff, 0x22, //0x000005b4 cmpl $34, %edi + 0x0f, 0x84, 0xd7, 0x02, 0x00, 0x00, //0x000005b7 je LBB0_64 + //0x000005bd LBB0_62 + 0x83, 0xff, 0x7d, //0x000005bd cmpl $125, %edi + 0x0f, 0x85, 0xe2, 0x34, 0x00, 0x00, //0x000005c0 jne LBB0_649 + //0x000005c6 LBB0_37 + 0x4d, 0x89, 0x45, 0x00, //0x000005c6 movq %r8, (%r13) + 0x48, 0x89, 0xd0, //0x000005ca movq %rdx, %rax + 0x4d, 0x85, 0xc0, //0x000005cd testq %r8, %r8 + 0x0f, 0x85, 0x0e, 0xfc, 0xff, 0xff, //0x000005d0 jne LBB0_6 + 0xe9, 0xd4, 0x34, 0x00, 0x00, //0x000005d6 jmp LBB0_650 + //0x000005db LBB0_78 + 0x4d, 0x89, 0x45, 0x00, //0x000005db movq %r8, (%r13) + 0x83, 0xff, 0x7b, //0x000005df cmpl $123, %edi + 0x0f, 0x87, 0xc0, 0x34, 0x00, 0x00, //0x000005e2 ja LBB0_649 + //0x000005e8 LBB0_79 + 0x89, 0xf9, //0x000005e8 movl %edi, %ecx + 0x48, 0x8d, 0x15, 0x73, 0x37, 0x00, 0x00, //0x000005ea leaq $14195(%rip), %rdx /* LJTI0_1+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8a, //0x000005f1 movslq (%rdx,%rcx,4), %rcx + 0x48, 0x01, 0xd1, //0x000005f5 addq %rdx, %rcx + 0xff, 0xe1, //0x000005f8 jmpq *%rcx + //0x000005fa LBB0_80 + 0x4c, 0x89, 0xf0, //0x000005fa movq %r14, %rax + 0x48, 0x8b, 0x4d, 0xa8, //0x000005fd movq $-88(%rbp), %rcx + 0x4c, 0x8b, 0x71, 0x08, //0x00000601 movq $8(%rcx), %r14 + 0x4c, 0x8b, 0x00, //0x00000605 movq (%rax), %r8 + 0xf6, 0x45, 0x98, 0x40, //0x00000608 testb $64, $-104(%rbp) + 0x0f, 0x85, 0x14, 0x05, 0x00, 0x00, //0x0000060c jne LBB0_134 + 0x49, 0x8d, 0x40, 0xff, //0x00000612 leaq $-1(%r8), %rax + 0x49, 0x29, 0xc6, //0x00000616 subq %rax, %r14 + 0x4c, 0x89, 0x45, 0xc0, //0x00000619 movq %r8, $-64(%rbp) + 0x0f, 0x84, 0x6c, 0x34, 0x00, 0x00, //0x0000061d je LBB0_625 + 0x4b, 0x8d, 0x3c, 0x04, //0x00000623 leaq (%r12,%r8), %rdi + 0x48, 0x83, 0xc7, 0xff, //0x00000627 addq $-1, %rdi + 0x80, 0x3f, 0x30, //0x0000062b cmpb $48, (%rdi) + 0x0f, 0x85, 0x3b, 0x00, 0x00, 0x00, //0x0000062e jne LBB0_86 + 0x41, 0xbd, 0x01, 0x00, 0x00, 0x00, //0x00000634 movl $1, %r13d + 0x49, 0x83, 0xfe, 0x01, //0x0000063a cmpq $1, %r14 + 0x0f, 0x84, 0xb9, 0x20, 0x00, 0x00, //0x0000063e je LBB0_452 + 0x48, 0x8b, 0x4d, 0xc0, //0x00000644 movq $-64(%rbp), %rcx + 0x41, 0x8a, 0x0c, 0x0c, //0x00000648 movb (%r12,%rcx), %cl + 0x80, 0xc1, 0xd2, //0x0000064c addb $-46, %cl + 0x80, 0xf9, 0x37, //0x0000064f cmpb $55, %cl + 0x0f, 0x87, 0xa5, 0x20, 0x00, 0x00, //0x00000652 ja LBB0_452 + 0x0f, 0xb6, 0xc9, //0x00000658 movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x0000065b movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x00000665 btq %rcx, %rdx + 0x0f, 0x83, 0x8e, 0x20, 0x00, 0x00, //0x00000669 jae LBB0_452 + //0x0000066f LBB0_86 + 0x49, 0x83, 0xfe, 0x10, //0x0000066f cmpq $16, %r14 + 0x48, 0x89, 0x7d, 0xb8, //0x00000673 movq %rdi, $-72(%rbp) + 0x0f, 0x82, 0xa0, 0x27, 0x00, 0x00, //0x00000677 jb LBB0_490 + 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000067d movq $-1, %r10 + 0x45, 0x31, 0xed, //0x00000684 xorl %r13d, %r13d + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00000687 movq $-1, %r15 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000068e movq $-1, %r8 + 0x4d, 0x89, 0xf3, //0x00000695 movq %r14, %r11 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000698 .p2align 4, 0x90 + //0x000006a0 LBB0_88 + 0xf3, 0x42, 0x0f, 0x6f, 0x1c, 0x2f, //0x000006a0 movdqu (%rdi,%r13), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x000006a6 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x64, 0x25, 0xee, 0xf9, 0xff, 0xff, //0x000006aa pcmpgtb $-1554(%rip), %xmm4 /* LCPI0_10+0(%rip) */ + 0x66, 0x41, 0x0f, 0x6f, 0xef, //0x000006b2 movdqa %xmm15, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x000006b7 pcmpgtb %xmm3, %xmm5 + 0x66, 0x0f, 0xdb, 0xec, //0x000006bb pand %xmm4, %xmm5 + 0x66, 0x0f, 0x6f, 0xe3, //0x000006bf movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0x25, 0xf5, 0xf9, 0xff, 0xff, //0x000006c3 pcmpeqb $-1547(%rip), %xmm4 /* LCPI0_12+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xf3, //0x000006cb movdqa %xmm3, %xmm6 + 0x66, 0x0f, 0x74, 0x35, 0xf9, 0xf9, 0xff, 0xff, //0x000006cf pcmpeqb $-1543(%rip), %xmm6 /* LCPI0_13+0(%rip) */ + 0x66, 0x0f, 0xeb, 0xf4, //0x000006d7 por %xmm4, %xmm6 + 0x66, 0x0f, 0x6f, 0xe3, //0x000006db movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xe1, //0x000006df pand %xmm9, %xmm4 + 0x66, 0x0f, 0x74, 0x1d, 0xf4, 0xf9, 0xff, 0xff, //0x000006e4 pcmpeqb $-1548(%rip), %xmm3 /* LCPI0_14+0(%rip) */ + 0x66, 0x41, 0x0f, 0x74, 0xe3, //0x000006ec pcmpeqb %xmm11, %xmm4 + 0x66, 0x0f, 0xd7, 0xf4, //0x000006f1 pmovmskb %xmm4, %esi + 0x66, 0x0f, 0xeb, 0xe3, //0x000006f5 por %xmm3, %xmm4 + 0x66, 0x0f, 0xeb, 0xee, //0x000006f9 por %xmm6, %xmm5 + 0x66, 0x0f, 0xeb, 0xec, //0x000006fd por %xmm4, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xcb, //0x00000701 pmovmskb %xmm3, %r9d + 0x66, 0x0f, 0xd7, 0xd6, //0x00000706 pmovmskb %xmm6, %edx + 0x66, 0x0f, 0xd7, 0xcd, //0x0000070a pmovmskb %xmm5, %ecx + 0xf7, 0xd1, //0x0000070e notl %ecx + 0x0f, 0xbc, 0xc9, //0x00000710 bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x00000713 cmpl $16, %ecx + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000716 je LBB0_90 + 0xbf, 0xff, 0xff, 0xff, 0xff, //0x0000071c movl $-1, %edi + 0xd3, 0xe7, //0x00000721 shll %cl, %edi + 0xf7, 0xd7, //0x00000723 notl %edi + 0x41, 0x21, 0xf9, //0x00000725 andl %edi, %r9d + 0x21, 0xfe, //0x00000728 andl %edi, %esi + 0x21, 0xd7, //0x0000072a andl %edx, %edi + 0x89, 0xfa, //0x0000072c movl %edi, %edx + 0x48, 0x8b, 0x7d, 0xb8, //0x0000072e movq $-72(%rbp), %rdi + //0x00000732 LBB0_90 + 0x41, 0x8d, 0x59, 0xff, //0x00000732 leal $-1(%r9), %ebx + 0x44, 0x21, 0xcb, //0x00000736 andl %r9d, %ebx + 0x0f, 0x85, 0x69, 0x1f, 0x00, 0x00, //0x00000739 jne LBB0_444 + 0x8d, 0x5e, 0xff, //0x0000073f leal $-1(%rsi), %ebx + 0x21, 0xf3, //0x00000742 andl %esi, %ebx + 0x0f, 0x85, 0x5e, 0x1f, 0x00, 0x00, //0x00000744 jne LBB0_444 + 0x8d, 0x5a, 0xff, //0x0000074a leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x0000074d andl %edx, %ebx + 0x0f, 0x85, 0x53, 0x1f, 0x00, 0x00, //0x0000074f jne LBB0_444 + 0x45, 0x85, 0xc9, //0x00000755 testl %r9d, %r9d + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00000758 je LBB0_96 + 0x41, 0x0f, 0xbc, 0xd9, //0x0000075e bsfl %r9d, %ebx + 0x49, 0x83, 0xf8, 0xff, //0x00000762 cmpq $-1, %r8 + 0x0f, 0x85, 0xfa, 0x22, 0x00, 0x00, //0x00000766 jne LBB0_454 + 0x4c, 0x01, 0xeb, //0x0000076c addq %r13, %rbx + 0x49, 0x89, 0xd8, //0x0000076f movq %rbx, %r8 + //0x00000772 LBB0_96 + 0x85, 0xf6, //0x00000772 testl %esi, %esi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000774 je LBB0_99 + 0x0f, 0xbc, 0xf6, //0x0000077a bsfl %esi, %esi + 0x49, 0x83, 0xff, 0xff, //0x0000077d cmpq $-1, %r15 + 0x0f, 0x85, 0xe6, 0x22, 0x00, 0x00, //0x00000781 jne LBB0_455 + 0x4c, 0x01, 0xee, //0x00000787 addq %r13, %rsi + 0x49, 0x89, 0xf7, //0x0000078a movq %rsi, %r15 + //0x0000078d LBB0_99 + 0x85, 0xd2, //0x0000078d testl %edx, %edx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000078f je LBB0_102 + 0x0f, 0xbc, 0xd2, //0x00000795 bsfl %edx, %edx + 0x49, 0x83, 0xfa, 0xff, //0x00000798 cmpq $-1, %r10 + 0x0f, 0x85, 0xd2, 0x22, 0x00, 0x00, //0x0000079c jne LBB0_456 + 0x4c, 0x01, 0xea, //0x000007a2 addq %r13, %rdx + 0x49, 0x89, 0xd2, //0x000007a5 movq %rdx, %r10 + //0x000007a8 LBB0_102 + 0x83, 0xf9, 0x10, //0x000007a8 cmpl $16, %ecx + 0x0f, 0x85, 0xf7, 0x07, 0x00, 0x00, //0x000007ab jne LBB0_188 + 0x49, 0x83, 0xc3, 0xf0, //0x000007b1 addq $-16, %r11 + 0x49, 0x83, 0xc5, 0x10, //0x000007b5 addq $16, %r13 + 0x49, 0x83, 0xfb, 0x0f, //0x000007b9 cmpq $15, %r11 + 0x0f, 0x87, 0xdd, 0xfe, 0xff, 0xff, //0x000007bd ja LBB0_88 + 0x4a, 0x8d, 0x34, 0x2f, //0x000007c3 leaq (%rdi,%r13), %rsi + 0x49, 0x89, 0xf1, //0x000007c7 movq %rsi, %r9 + 0x4d, 0x39, 0xee, //0x000007ca cmpq %r13, %r14 + 0x0f, 0x84, 0xff, 0x09, 0x00, 0x00, //0x000007cd je LBB0_217 + //0x000007d3 LBB0_105 + 0x4e, 0x8d, 0x0c, 0x1e, //0x000007d3 leaq (%rsi,%r11), %r9 + 0x48, 0x89, 0xf7, //0x000007d7 movq %rsi, %rdi + 0x48, 0x2b, 0x7d, 0xc0, //0x000007da subq $-64(%rbp), %rdi + 0x4c, 0x29, 0xe7, //0x000007de subq %r12, %rdi + 0x48, 0x83, 0xc7, 0x01, //0x000007e1 addq $1, %rdi + 0x31, 0xd2, //0x000007e5 xorl %edx, %edx + 0x4c, 0x8d, 0x35, 0xd2, 0x37, 0x00, 0x00, //0x000007e7 leaq $14290(%rip), %r14 /* LJTI0_3+0(%rip) */ + 0xe9, 0x2a, 0x00, 0x00, 0x00, //0x000007ee jmp LBB0_109 + //0x000007f3 LBB0_106 + 0x49, 0x83, 0xfa, 0xff, //0x000007f3 cmpq $-1, %r10 + 0x0f, 0x85, 0xdc, 0x1e, 0x00, 0x00, //0x000007f7 jne LBB0_449 + 0x4c, 0x8d, 0x14, 0x17, //0x000007fd leaq (%rdi,%rdx), %r10 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000801 .p2align 4, 0x90 + //0x00000810 LBB0_108 + 0x48, 0x83, 0xc2, 0x01, //0x00000810 addq $1, %rdx + 0x49, 0x39, 0xd3, //0x00000814 cmpq %rdx, %r11 + 0x0f, 0x84, 0xb1, 0x09, 0x00, 0x00, //0x00000817 je LBB0_216 + //0x0000081d LBB0_109 + 0x0f, 0xbe, 0x0c, 0x16, //0x0000081d movsbl (%rsi,%rdx), %ecx + 0x8d, 0x59, 0xd0, //0x00000821 leal $-48(%rcx), %ebx + 0x83, 0xfb, 0x0a, //0x00000824 cmpl $10, %ebx + 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00000827 jb LBB0_108 + 0x8d, 0x59, 0xd5, //0x0000082d leal $-43(%rcx), %ebx + 0x83, 0xfb, 0x1a, //0x00000830 cmpl $26, %ebx + 0x0f, 0x87, 0x1c, 0x00, 0x00, 0x00, //0x00000833 ja LBB0_114 + 0x49, 0x63, 0x0c, 0x9e, //0x00000839 movslq (%r14,%rbx,4), %rcx + 0x4c, 0x01, 0xf1, //0x0000083d addq %r14, %rcx + 0xff, 0xe1, //0x00000840 jmpq *%rcx + //0x00000842 LBB0_112 + 0x49, 0x83, 0xf8, 0xff, //0x00000842 cmpq $-1, %r8 + 0x0f, 0x85, 0x8d, 0x1e, 0x00, 0x00, //0x00000846 jne LBB0_449 + 0x4c, 0x8d, 0x04, 0x17, //0x0000084c leaq (%rdi,%rdx), %r8 + 0xe9, 0xbb, 0xff, 0xff, 0xff, //0x00000850 jmp LBB0_108 + //0x00000855 LBB0_114 + 0x83, 0xf9, 0x65, //0x00000855 cmpl $101, %ecx + 0x0f, 0x85, 0x6a, 0x09, 0x00, 0x00, //0x00000858 jne LBB0_215 + //0x0000085e LBB0_115 + 0x49, 0x83, 0xff, 0xff, //0x0000085e cmpq $-1, %r15 + 0x0f, 0x85, 0x71, 0x1e, 0x00, 0x00, //0x00000862 jne LBB0_449 + 0x4c, 0x8d, 0x3c, 0x17, //0x00000868 leaq (%rdi,%rdx), %r15 + 0xe9, 0x9f, 0xff, 0xff, 0xff, //0x0000086c jmp LBB0_108 + //0x00000871 LBB0_117 + 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00000871 cmpq $4095, %r9 + 0x0f, 0x8f, 0xd2, 0x31, 0x00, 0x00, //0x00000878 jg LBB0_651 + 0x49, 0x8d, 0x41, 0x01, //0x0000087e leaq $1(%r9), %rax + 0x49, 0x89, 0x45, 0x00, //0x00000882 movq %rax, (%r13) + 0x4b, 0xc7, 0x44, 0xcd, 0x08, 0x00, 0x00, 0x00, 0x00, //0x00000886 movq $0, $8(%r13,%r9,8) + 0xe9, 0x3c, 0xf9, 0xff, 0xff, //0x0000088f jmp LBB0_4 + //0x00000894 LBB0_64 + 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x02, 0x00, 0x00, 0x00, //0x00000894 movq $2, (%r13,%r9,8) + 0x48, 0x8b, 0x4d, 0x98, //0x0000089d movq $-104(%rbp), %rcx + 0xf6, 0xc1, 0x40, //0x000008a1 testb $64, %cl + 0x0f, 0x85, 0xcb, 0x03, 0x00, 0x00, //0x000008a4 jne LBB0_152 + 0x49, 0x8b, 0x16, //0x000008aa movq (%r14), %rdx + 0x48, 0x8b, 0x45, 0xa8, //0x000008ad movq $-88(%rbp), %rax + 0x48, 0x8b, 0x40, 0x08, //0x000008b1 movq $8(%rax), %rax + 0xf6, 0xc1, 0x20, //0x000008b5 testb $32, %cl + 0x48, 0x89, 0x45, 0xa0, //0x000008b8 movq %rax, $-96(%rbp) + 0x48, 0x89, 0x55, 0xc0, //0x000008bc movq %rdx, $-64(%rbp) + 0x0f, 0x85, 0xf0, 0x06, 0x00, 0x00, //0x000008c0 jne LBB0_189 + 0x49, 0x89, 0xc1, //0x000008c6 movq %rax, %r9 + 0x49, 0x29, 0xd1, //0x000008c9 subq %rdx, %r9 + 0x0f, 0x84, 0xde, 0x33, 0x00, 0x00, //0x000008cc je LBB0_660 + 0x49, 0x83, 0xf9, 0x40, //0x000008d2 cmpq $64, %r9 + 0x0f, 0x82, 0xd9, 0x26, 0x00, 0x00, //0x000008d6 jb LBB0_510 + 0x49, 0x89, 0xd6, //0x000008dc movq %rdx, %r14 + 0x49, 0xf7, 0xd6, //0x000008df notq %r14 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000008e2 movq $-1, $-56(%rbp) + 0x48, 0x89, 0xd0, //0x000008ea movq %rdx, %rax + 0x45, 0x31, 0xc0, //0x000008ed xorl %r8d, %r8d + //0x000008f0 .p2align 4, 0x90 + //0x000008f0 LBB0_69 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x000008f0 movdqu (%r12,%rax), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x000008f6 movdqu $16(%r12,%rax), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x000008fd movdqu $32(%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000904 movdqu $48(%r12,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xfb, //0x0000090b movdqa %xmm3, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000090f pcmpeqb %xmm0, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00000913 pmovmskb %xmm7, %r10d + 0x66, 0x0f, 0x6f, 0xfc, //0x00000918 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000091c pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xdf, //0x00000920 pmovmskb %xmm7, %ebx + 0x66, 0x0f, 0x6f, 0xfd, //0x00000924 movdqa %xmm5, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00000928 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x0000092c pmovmskb %xmm7, %esi + 0x66, 0x0f, 0x6f, 0xfe, //0x00000930 movdqa %xmm6, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00000934 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xd7, //0x00000938 pmovmskb %xmm7, %edx + 0x66, 0x0f, 0x74, 0xd9, //0x0000093c pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000940 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x74, 0xe1, //0x00000945 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00000949 pmovmskb %xmm4, %ecx + 0x66, 0x0f, 0x74, 0xe9, //0x0000094d pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00000951 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x74, 0xf1, //0x00000955 pcmpeqb %xmm1, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00000959 pmovmskb %xmm6, %r15d + 0x48, 0xc1, 0xe2, 0x30, //0x0000095e shlq $48, %rdx + 0x48, 0xc1, 0xe6, 0x20, //0x00000962 shlq $32, %rsi + 0x48, 0x09, 0xd6, //0x00000966 orq %rdx, %rsi + 0x48, 0xc1, 0xe3, 0x10, //0x00000969 shlq $16, %rbx + 0x48, 0x09, 0xf3, //0x0000096d orq %rsi, %rbx + 0x49, 0x09, 0xda, //0x00000970 orq %rbx, %r10 + 0x49, 0xc1, 0xe7, 0x30, //0x00000973 shlq $48, %r15 + 0x48, 0xc1, 0xe7, 0x20, //0x00000977 shlq $32, %rdi + 0x4c, 0x09, 0xff, //0x0000097b orq %r15, %rdi + 0x48, 0xc1, 0xe1, 0x10, //0x0000097e shlq $16, %rcx + 0x48, 0x09, 0xf9, //0x00000982 orq %rdi, %rcx + 0x49, 0x09, 0xcb, //0x00000985 orq %rcx, %r11 + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x00000988 jne LBB0_121 + 0x4d, 0x85, 0xc0, //0x0000098e testq %r8, %r8 + 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x00000991 jne LBB0_123 + 0x45, 0x31, 0xc0, //0x00000997 xorl %r8d, %r8d + 0x4d, 0x85, 0xd2, //0x0000099a testq %r10, %r10 + 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x0000099d jne LBB0_124 + //0x000009a3 LBB0_72 + 0x49, 0x83, 0xc1, 0xc0, //0x000009a3 addq $-64, %r9 + 0x49, 0x83, 0xc6, 0xc0, //0x000009a7 addq $-64, %r14 + 0x48, 0x83, 0xc0, 0x40, //0x000009ab addq $64, %rax + 0x49, 0x83, 0xf9, 0x3f, //0x000009af cmpq $63, %r9 + 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x000009b3 ja LBB0_69 + 0xe9, 0x1e, 0x1f, 0x00, 0x00, //0x000009b9 jmp LBB0_73 + //0x000009be LBB0_121 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000009be cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000009c3 jne LBB0_123 + 0x49, 0x0f, 0xbc, 0xcb, //0x000009c9 bsfq %r11, %rcx + 0x48, 0x01, 0xc1, //0x000009cd addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x000009d0 movq %rcx, $-56(%rbp) + //0x000009d4 LBB0_123 + 0x4c, 0x89, 0xc1, //0x000009d4 movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x000009d7 notq %rcx + 0x4c, 0x21, 0xd9, //0x000009da andq %r11, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x000009dd leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xc2, //0x000009e1 orq %r8, %rdx + 0x48, 0x89, 0xd6, //0x000009e4 movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x000009e7 notq %rsi + 0x4c, 0x21, 0xde, //0x000009ea andq %r11, %rsi + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000009ed movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfe, //0x000009f7 andq %rdi, %rsi + 0x45, 0x31, 0xc0, //0x000009fa xorl %r8d, %r8d + 0x48, 0x01, 0xce, //0x000009fd addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc0, //0x00000a00 setb %r8b + 0x48, 0x01, 0xf6, //0x00000a04 addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000a07 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x00000a11 xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00000a14 andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000a17 notq %rsi + 0x49, 0x21, 0xf2, //0x00000a1a andq %rsi, %r10 + 0x4d, 0x85, 0xd2, //0x00000a1d testq %r10, %r10 + 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000a20 je LBB0_72 + //0x00000a26 LBB0_124 + 0x49, 0x0f, 0xbc, 0xc2, //0x00000a26 bsfq %r10, %rax + 0x4c, 0x29, 0xf0, //0x00000a2a subq %r14, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00000a2d movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000a31 movabsq $4294977024, %r11 + 0x48, 0x8b, 0x75, 0xc0, //0x00000a3b movq $-64(%rbp), %rsi + 0xe9, 0xb3, 0x0d, 0x00, 0x00, //0x00000a3f jmp LBB0_313 + //0x00000a44 LBB0_125 + 0x48, 0x8b, 0x4d, 0xa8, //0x00000a44 movq $-88(%rbp), %rcx + 0x4c, 0x8b, 0x49, 0x08, //0x00000a48 movq $8(%rcx), %r9 + 0x4d, 0x8b, 0x06, //0x00000a4c movq (%r14), %r8 + 0x4f, 0x8d, 0x14, 0x04, //0x00000a4f leaq (%r12,%r8), %r10 + 0x4d, 0x29, 0xc1, //0x00000a53 subq %r8, %r9 + 0x49, 0x83, 0xf9, 0x20, //0x00000a56 cmpq $32, %r9 + 0x0f, 0x8c, 0x3a, 0x1c, 0x00, 0x00, //0x00000a5a jl LBB0_133 + 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x00000a60 movl $32, %r14d + 0x31, 0xf6, //0x00000a66 xorl %esi, %esi + 0x45, 0x31, 0xdb, //0x00000a68 xorl %r11d, %r11d + 0xe9, 0x26, 0x00, 0x00, 0x00, //0x00000a6b jmp LBB0_127 + //0x00000a70 .p2align 4, 0x90 + //0x00000a70 LBB0_129 + 0x45, 0x31, 0xdb, //0x00000a70 xorl %r11d, %r11d + 0x48, 0x85, 0xdb, //0x00000a73 testq %rbx, %rbx + 0x0f, 0x85, 0x2b, 0xf7, 0xff, 0xff, //0x00000a76 jne LBB0_1 + //0x00000a7c LBB0_130 + 0x48, 0x83, 0xc6, 0x20, //0x00000a7c addq $32, %rsi + 0x4b, 0x8d, 0x0c, 0x31, //0x00000a80 leaq (%r9,%r14), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00000a84 addq $-32, %rcx + 0x49, 0x83, 0xc6, 0xe0, //0x00000a88 addq $-32, %r14 + 0x48, 0x83, 0xf9, 0x3f, //0x00000a8c cmpq $63, %rcx + 0x0f, 0x8e, 0xe7, 0x1b, 0x00, 0x00, //0x00000a90 jle LBB0_131 + //0x00000a96 LBB0_127 + 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x32, //0x00000a96 movdqu (%r10,%rsi), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x32, 0x10, //0x00000a9c movdqu $16(%r10,%rsi), %xmm5 + 0x66, 0x0f, 0x6f, 0xf4, //0x00000aa3 movdqa %xmm4, %xmm6 + 0x66, 0x0f, 0x74, 0xf0, //0x00000aa7 pcmpeqb %xmm0, %xmm6 + 0x66, 0x0f, 0xd7, 0xfe, //0x00000aab pmovmskb %xmm6, %edi + 0x66, 0x0f, 0x6f, 0xf5, //0x00000aaf movdqa %xmm5, %xmm6 + 0x66, 0x0f, 0x74, 0xf0, //0x00000ab3 pcmpeqb %xmm0, %xmm6 + 0x66, 0x0f, 0xd7, 0xde, //0x00000ab7 pmovmskb %xmm6, %ebx + 0x48, 0xc1, 0xe3, 0x10, //0x00000abb shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x00000abf orq %rdi, %rbx + 0x66, 0x0f, 0x74, 0xe1, //0x00000ac2 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00000ac6 pmovmskb %xmm4, %ecx + 0x66, 0x0f, 0x74, 0xe9, //0x00000aca pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00000ace pmovmskb %xmm5, %edi + 0x48, 0xc1, 0xe7, 0x10, //0x00000ad2 shlq $16, %rdi + 0x48, 0x09, 0xcf, //0x00000ad6 orq %rcx, %rdi + 0x48, 0x89, 0xf9, //0x00000ad9 movq %rdi, %rcx + 0x4c, 0x09, 0xd9, //0x00000adc orq %r11, %rcx + 0x0f, 0x84, 0x8b, 0xff, 0xff, 0xff, //0x00000adf je LBB0_129 + 0x44, 0x89, 0xd9, //0x00000ae5 movl %r11d, %ecx + 0xf7, 0xd1, //0x00000ae8 notl %ecx + 0x21, 0xf9, //0x00000aea andl %edi, %ecx + 0x44, 0x8d, 0x3c, 0x09, //0x00000aec leal (%rcx,%rcx), %r15d + 0x45, 0x09, 0xdf, //0x00000af0 orl %r11d, %r15d + 0x44, 0x89, 0xfa, //0x00000af3 movl %r15d, %edx + 0xf7, 0xd2, //0x00000af6 notl %edx + 0x21, 0xfa, //0x00000af8 andl %edi, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000afa andl $-1431655766, %edx + 0x45, 0x31, 0xdb, //0x00000b00 xorl %r11d, %r11d + 0x01, 0xca, //0x00000b03 addl %ecx, %edx + 0x41, 0x0f, 0x92, 0xc3, //0x00000b05 setb %r11b + 0x01, 0xd2, //0x00000b09 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x00000b0b xorl $1431655765, %edx + 0x44, 0x21, 0xfa, //0x00000b11 andl %r15d, %edx + 0xf7, 0xd2, //0x00000b14 notl %edx + 0x21, 0xd3, //0x00000b16 andl %edx, %ebx + 0x48, 0x85, 0xdb, //0x00000b18 testq %rbx, %rbx + 0x0f, 0x84, 0x5b, 0xff, 0xff, 0xff, //0x00000b1b je LBB0_130 + 0xe9, 0x81, 0xf6, 0xff, 0xff, //0x00000b21 jmp LBB0_1 + //0x00000b26 LBB0_134 + 0x4c, 0x89, 0xf1, //0x00000b26 movq %r14, %rcx + 0x4c, 0x29, 0xc1, //0x00000b29 subq %r8, %rcx + 0x48, 0x83, 0xf9, 0x10, //0x00000b2c cmpq $16, %rcx + 0x0f, 0x82, 0xc7, 0x22, 0x00, 0x00, //0x00000b30 jb LBB0_489 + 0x4c, 0x89, 0xc6, //0x00000b36 movq %r8, %rsi + 0x48, 0xf7, 0xde, //0x00000b39 negq %rsi + 0x49, 0x8d, 0x40, 0x01, //0x00000b3c leaq $1(%r8), %rax + 0x49, 0x8d, 0x48, 0xff, //0x00000b40 leaq $-1(%r8), %rcx + 0x4b, 0x8d, 0x14, 0x04, //0x00000b44 leaq (%r12,%r8), %rdx + 0x48, 0x83, 0xc2, 0xff, //0x00000b48 addq $-1, %rdx + 0x4c, 0x89, 0xc3, //0x00000b4c movq %r8, %rbx + 0x90, //0x00000b4f .p2align 4, 0x90 + //0x00000b50 LBB0_136 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x1c, //0x00000b50 movdqu (%r12,%rbx), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00000b56 movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0x74, 0xe6, //0x00000b5a pcmpeqb %xmm14, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xd9, //0x00000b5f pand %xmm9, %xmm3 + 0x66, 0x0f, 0x74, 0xda, //0x00000b64 pcmpeqb %xmm2, %xmm3 + 0x66, 0x0f, 0xeb, 0xdc, //0x00000b68 por %xmm4, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00000b6c pmovmskb %xmm3, %edi + 0x85, 0xff, //0x00000b70 testl %edi, %edi + 0x0f, 0x85, 0x94, 0x00, 0x00, 0x00, //0x00000b72 jne LBB0_147 + 0x48, 0x83, 0xc3, 0x10, //0x00000b78 addq $16, %rbx + 0x49, 0x8d, 0x3c, 0x36, //0x00000b7c leaq (%r14,%rsi), %rdi + 0x48, 0x83, 0xc7, 0xf0, //0x00000b80 addq $-16, %rdi + 0x48, 0x83, 0xc6, 0xf0, //0x00000b84 addq $-16, %rsi + 0x48, 0x83, 0xc0, 0x10, //0x00000b88 addq $16, %rax + 0x48, 0x83, 0xc1, 0x10, //0x00000b8c addq $16, %rcx + 0x48, 0x83, 0xc2, 0x10, //0x00000b90 addq $16, %rdx + 0x48, 0x83, 0xff, 0x0f, //0x00000b94 cmpq $15, %rdi + 0x0f, 0x87, 0xb2, 0xff, 0xff, 0xff, //0x00000b98 ja LBB0_136 + 0x4c, 0x89, 0xe0, //0x00000b9e movq %r12, %rax + 0x48, 0x29, 0xf0, //0x00000ba1 subq %rsi, %rax + 0x49, 0x01, 0xf6, //0x00000ba4 addq %rsi, %r14 + 0x4c, 0x89, 0xf1, //0x00000ba7 movq %r14, %rcx + 0x48, 0x85, 0xc9, //0x00000baa testq %rcx, %rcx + 0x4c, 0x8b, 0x75, 0xd0, //0x00000bad movq $-48(%rbp), %r14 + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00000bb1 movabsq $17596481021440, %rdi + 0x0f, 0x84, 0x40, 0x00, 0x00, 0x00, //0x00000bbb je LBB0_146 + //0x00000bc1 LBB0_139 + 0x48, 0x8d, 0x14, 0x08, //0x00000bc1 leaq (%rax,%rcx), %rdx + //0x00000bc5 LBB0_140 + 0x0f, 0xb6, 0x30, //0x00000bc5 movzbl (%rax), %esi + 0x48, 0x83, 0xfe, 0x2c, //0x00000bc8 cmpq $44, %rsi + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x00000bcc ja LBB0_142 + 0x48, 0x0f, 0xa3, 0xf7, //0x00000bd2 btq %rsi, %rdi + 0x0f, 0x82, 0x25, 0x00, 0x00, 0x00, //0x00000bd6 jb LBB0_146 + //0x00000bdc LBB0_142 + 0x40, 0x80, 0xfe, 0x5d, //0x00000bdc cmpb $93, %sil + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x00000be0 je LBB0_146 + 0x40, 0x80, 0xfe, 0x7d, //0x00000be6 cmpb $125, %sil + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00000bea je LBB0_146 + 0x48, 0x83, 0xc0, 0x01, //0x00000bf0 addq $1, %rax + 0x48, 0x83, 0xc1, 0xff, //0x00000bf4 addq $-1, %rcx + 0x0f, 0x85, 0xc7, 0xff, 0xff, 0xff, //0x00000bf8 jne LBB0_140 + 0x48, 0x89, 0xd0, //0x00000bfe movq %rdx, %rax + //0x00000c01 LBB0_146 + 0x4c, 0x29, 0xe0, //0x00000c01 subq %r12, %rax + 0x49, 0x89, 0x06, //0x00000c04 movq %rax, (%r14) + 0xe9, 0xba, 0xf5, 0xff, 0xff, //0x00000c07 jmp LBB0_3 + //0x00000c0c LBB0_147 + 0x66, 0x0f, 0xbc, 0xff, //0x00000c0c bsfw %di, %di + 0x0f, 0xb7, 0xdf, //0x00000c10 movzwl %di, %ebx + 0x48, 0x89, 0xdf, //0x00000c13 movq %rbx, %rdi + 0x48, 0x29, 0xf7, //0x00000c16 subq %rsi, %rdi + 0x4c, 0x8b, 0x75, 0xd0, //0x00000c19 movq $-48(%rbp), %r14 + 0x49, 0x89, 0x3e, //0x00000c1d movq %rdi, (%r14) + 0x48, 0x85, 0xff, //0x00000c20 testq %rdi, %rdi + 0x0f, 0x8e, 0x9d, 0xf5, 0xff, 0xff, //0x00000c23 jle LBB0_3 + 0x48, 0x01, 0xd8, //0x00000c29 addq %rbx, %rax + 0x48, 0x01, 0xd9, //0x00000c2c addq %rbx, %rcx + 0x48, 0x01, 0xda, //0x00000c2f addq %rbx, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000c32 .p2align 4, 0x90 + //0x00000c40 LBB0_149 + 0x0f, 0xb6, 0x32, //0x00000c40 movzbl (%rdx), %esi + 0x48, 0x83, 0xfe, 0x20, //0x00000c43 cmpq $32, %rsi + 0x0f, 0x87, 0x79, 0xf5, 0xff, 0xff, //0x00000c47 ja LBB0_3 + 0x49, 0x0f, 0xa3, 0xf3, //0x00000c4d btq %rsi, %r11 + 0x0f, 0x83, 0x6f, 0xf5, 0xff, 0xff, //0x00000c51 jae LBB0_3 + 0x49, 0x89, 0x0e, //0x00000c57 movq %rcx, (%r14) + 0x48, 0x83, 0xc0, 0xff, //0x00000c5a addq $-1, %rax + 0x48, 0x83, 0xc1, 0xff, //0x00000c5e addq $-1, %rcx + 0x48, 0x83, 0xc2, 0xff, //0x00000c62 addq $-1, %rdx + 0x48, 0x83, 0xf8, 0x01, //0x00000c66 cmpq $1, %rax + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x00000c6a jg LBB0_149 + 0xe9, 0x51, 0xf5, 0xff, 0xff, //0x00000c70 jmp LBB0_3 + //0x00000c75 LBB0_152 + 0x48, 0x8b, 0x4d, 0xa8, //0x00000c75 movq $-88(%rbp), %rcx + 0x4c, 0x8b, 0x49, 0x08, //0x00000c79 movq $8(%rcx), %r9 + 0x4d, 0x8b, 0x06, //0x00000c7d movq (%r14), %r8 + 0x4f, 0x8d, 0x14, 0x04, //0x00000c80 leaq (%r12,%r8), %r10 + 0x4d, 0x29, 0xc1, //0x00000c84 subq %r8, %r9 + 0x49, 0x83, 0xf9, 0x20, //0x00000c87 cmpq $32, %r9 + 0x0f, 0x8c, 0xa5, 0x1a, 0x00, 0x00, //0x00000c8b jl LBB0_161 + 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x00000c91 movl $32, %r14d + 0x31, 0xf6, //0x00000c97 xorl %esi, %esi + 0x45, 0x31, 0xdb, //0x00000c99 xorl %r11d, %r11d + 0xe9, 0x35, 0x00, 0x00, 0x00, //0x00000c9c jmp LBB0_154 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000ca1 .p2align 4, 0x90 + //0x00000cb0 LBB0_157 0x45, 0x31, 0xdb, //0x00000cb0 xorl %r11d, %r11d - 0x48, 0x85, 0xff, //0x00000cb3 testq %rdi, %rdi - 0x0f, 0x85, 0xa5, 0x00, 0x00, 0x00, //0x00000cb6 jne LBB0_151 - //0x00000cbc LBB0_153 - 0x48, 0x83, 0xc2, 0x20, //0x00000cbc addq $32, %rdx + 0x48, 0x85, 0xdb, //0x00000cb3 testq %rbx, %rbx + 0x0f, 0x85, 0xa5, 0x00, 0x00, 0x00, //0x00000cb6 jne LBB0_156 + //0x00000cbc LBB0_158 + 0x48, 0x83, 0xc6, 0x20, //0x00000cbc addq $32, %rsi 0x4b, 0x8d, 0x0c, 0x31, //0x00000cc0 leaq (%r9,%r14), %rcx 0x48, 0x83, 0xc1, 0xe0, //0x00000cc4 addq $-32, %rcx 0x49, 0x83, 0xc6, 0xe0, //0x00000cc8 addq $-32, %r14 0x48, 0x83, 0xf9, 0x3f, //0x00000ccc cmpq $63, %rcx - 0x0f, 0x8e, 0xfb, 0x19, 0x00, 0x00, //0x00000cd0 jle LBB0_154 - //0x00000cd6 LBB0_149 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x12, //0x00000cd6 movdqu (%r10,%rdx), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x12, 0x10, //0x00000cdc movdqu $16(%r10,%rdx), %xmm4 + 0x0f, 0x8e, 0x43, 0x1a, 0x00, 0x00, //0x00000cd0 jle LBB0_159 + //0x00000cd6 LBB0_154 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x32, //0x00000cd6 movdqu (%r10,%rsi), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x32, 0x10, //0x00000cdc movdqu $16(%r10,%rsi), %xmm4 0x66, 0x0f, 0x6f, 0xeb, //0x00000ce3 movdqa %xmm3, %xmm5 0x66, 0x0f, 0x74, 0xe8, //0x00000ce7 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00000ceb pmovmskb %xmm5, %esi + 0x66, 0x0f, 0xd7, 0xfd, //0x00000ceb pmovmskb %xmm5, %edi 0x66, 0x0f, 0x6f, 0xec, //0x00000cef movdqa %xmm4, %xmm5 0x66, 0x0f, 0x74, 0xe8, //0x00000cf3 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x00000cf7 pmovmskb %xmm5, %edi - 0x48, 0xc1, 0xe7, 0x10, //0x00000cfb shlq $16, %rdi - 0x48, 0x09, 0xf7, //0x00000cff orq %rsi, %rdi + 0x66, 0x0f, 0xd7, 0xdd, //0x00000cf7 pmovmskb %xmm5, %ebx + 0x48, 0xc1, 0xe3, 0x10, //0x00000cfb shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x00000cff orq %rdi, %rbx 0x66, 0x0f, 0x74, 0xd9, //0x00000d02 pcmpeqb %xmm1, %xmm3 0x66, 0x0f, 0xd7, 0xcb, //0x00000d06 pmovmskb %xmm3, %ecx 0x66, 0x0f, 0x74, 0xe1, //0x00000d0a pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xf4, //0x00000d0e pmovmskb %xmm4, %esi - 0x48, 0xc1, 0xe6, 0x10, //0x00000d12 shlq $16, %rsi - 0x48, 0x09, 0xce, //0x00000d16 orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00000d19 movq %rsi, %rcx + 0x66, 0x0f, 0xd7, 0xfc, //0x00000d0e pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe7, 0x10, //0x00000d12 shlq $16, %rdi + 0x48, 0x09, 0xcf, //0x00000d16 orq %rcx, %rdi + 0x48, 0x89, 0xf9, //0x00000d19 movq %rdi, %rcx 0x4c, 0x09, 0xd9, //0x00000d1c orq %r11, %rcx - 0x0f, 0x84, 0x8b, 0xff, 0xff, 0xff, //0x00000d1f je LBB0_152 + 0x0f, 0x84, 0x8b, 0xff, 0xff, 0xff, //0x00000d1f je LBB0_157 0x44, 0x89, 0xd9, //0x00000d25 movl %r11d, %ecx 0xf7, 0xd1, //0x00000d28 notl %ecx - 0x21, 0xf1, //0x00000d2a andl %esi, %ecx + 0x21, 0xf9, //0x00000d2a andl %edi, %ecx 0x44, 0x8d, 0x3c, 0x09, //0x00000d2c leal (%rcx,%rcx), %r15d 0x45, 0x09, 0xdf, //0x00000d30 orl %r11d, %r15d - 0x44, 0x89, 0xfb, //0x00000d33 movl %r15d, %ebx - 0xf7, 0xd3, //0x00000d36 notl %ebx - 0x21, 0xf3, //0x00000d38 andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000d3a andl $-1431655766, %ebx + 0x44, 0x89, 0xfa, //0x00000d33 movl %r15d, %edx + 0xf7, 0xd2, //0x00000d36 notl %edx + 0x21, 0xfa, //0x00000d38 andl %edi, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000d3a andl $-1431655766, %edx 0x45, 0x31, 0xdb, //0x00000d40 xorl %r11d, %r11d - 0x01, 0xcb, //0x00000d43 addl %ecx, %ebx + 0x01, 0xca, //0x00000d43 addl %ecx, %edx 0x41, 0x0f, 0x92, 0xc3, //0x00000d45 setb %r11b - 0x01, 0xdb, //0x00000d49 addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00000d4b xorl $1431655765, %ebx - 0x44, 0x21, 0xfb, //0x00000d51 andl %r15d, %ebx - 0xf7, 0xd3, //0x00000d54 notl %ebx - 0x21, 0xdf, //0x00000d56 andl %ebx, %edi - 0x48, 0x85, 0xff, //0x00000d58 testq %rdi, %rdi - 0x0f, 0x84, 0x5b, 0xff, 0xff, 0xff, //0x00000d5b je LBB0_153 - //0x00000d61 LBB0_151 - 0x0f, 0xbc, 0xc7, //0x00000d61 bsfl %edi, %eax + 0x01, 0xd2, //0x00000d49 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x00000d4b xorl $1431655765, %edx + 0x44, 0x21, 0xfa, //0x00000d51 andl %r15d, %edx + 0xf7, 0xd2, //0x00000d54 notl %edx + 0x21, 0xd3, //0x00000d56 andl %edx, %ebx + 0x48, 0x85, 0xdb, //0x00000d58 testq %rbx, %rbx + 0x0f, 0x84, 0x5b, 0xff, 0xff, 0xff, //0x00000d5b je LBB0_158 + //0x00000d61 LBB0_156 + 0x0f, 0xbc, 0xc3, //0x00000d61 bsfl %ebx, %eax 0x4c, 0x01, 0xc0, //0x00000d64 addq %r8, %rax - 0x4c, 0x8d, 0x14, 0x02, //0x00000d67 leaq (%rdx,%rax), %r10 + 0x4c, 0x8d, 0x14, 0x06, //0x00000d67 leaq (%rsi,%rax), %r10 0x49, 0x83, 0xc2, 0x01, //0x00000d6b addq $1, %r10 0x4c, 0x8b, 0x75, 0xd0, //0x00000d6f movq $-48(%rbp), %r14 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000d73 movabsq $4294977024, %r11 0x4d, 0x89, 0x16, //0x00000d7d movq %r10, (%r14) 0x4d, 0x85, 0xc0, //0x00000d80 testq %r8, %r8 - 0x0f, 0x8f, 0x93, 0x0a, 0x00, 0x00, //0x00000d83 jg LBB0_306 - 0xe9, 0x73, 0x2c, 0x00, 0x00, //0x00000d89 jmp LBB0_608 - //0x00000d8e LBB0_157 + 0x0f, 0x8f, 0x83, 0x0a, 0x00, 0x00, //0x00000d83 jg LBB0_315 + 0xe9, 0xce, 0x2c, 0x00, 0x00, //0x00000d89 jmp LBB0_622 + //0x00000d8e LBB0_162 0x49, 0x89, 0xc6, //0x00000d8e movq %rax, %r14 0x49, 0x29, 0xd6, //0x00000d91 subq %rdx, %r14 - 0x0f, 0x84, 0x71, 0x2e, 0x00, 0x00, //0x00000d94 je LBB0_643 + 0x0f, 0x84, 0xdc, 0x2e, 0x00, 0x00, //0x00000d94 je LBB0_657 0x49, 0x83, 0xfe, 0x40, //0x00000d9a cmpq $64, %r14 - 0x0f, 0x82, 0x17, 0x21, 0x00, 0x00, //0x00000d9e jb LBB0_486 - 0x4c, 0x89, 0x65, 0xc0, //0x00000da4 movq %r12, $-64(%rbp) + 0x0f, 0x82, 0x5e, 0x21, 0x00, 0x00, //0x00000d9e jb LBB0_504 + 0x4c, 0x89, 0x65, 0xb8, //0x00000da4 movq %r12, $-72(%rbp) 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000da8 movq $-1, $-56(%rbp) - 0x48, 0x8b, 0x45, 0xb0, //0x00000db0 movq $-80(%rbp), %rax + 0x48, 0x8b, 0x45, 0xc0, //0x00000db0 movq $-64(%rbp), %rax 0x31, 0xdb, //0x00000db4 xorl %ebx, %ebx 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000db6 .p2align 4, 0x90 - //0x00000dc0 LBB0_160 + //0x00000dc0 LBB0_165 0x49, 0x89, 0xdc, //0x00000dc0 movq %rbx, %r12 - 0x48, 0x8b, 0x4d, 0xc0, //0x00000dc3 movq $-64(%rbp), %rcx + 0x48, 0x8b, 0x4d, 0xb8, //0x00000dc3 movq $-72(%rbp), %rcx 0xf3, 0x0f, 0x6f, 0x1c, 0x01, //0x00000dc7 movdqu (%rcx,%rax), %xmm3 0xf3, 0x0f, 0x6f, 0x7c, 0x01, 0x10, //0x00000dcc movdqu $16(%rcx,%rax), %xmm7 0xf3, 0x0f, 0x6f, 0x74, 0x01, 0x20, //0x00000dd2 movdqu $32(%rcx,%rax), %xmm6 @@ -875,7 +878,7 @@ var _text_skip_object = []byte{ 0x66, 0x0f, 0xd7, 0xdd, //0x00000df3 pmovmskb %xmm5, %ebx 0x66, 0x0f, 0x6f, 0xee, //0x00000df7 movdqa %xmm6, %xmm5 0x66, 0x0f, 0x74, 0xe8, //0x00000dfb pcmpeqb %xmm0, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xd5, //0x00000dff pmovmskb %xmm5, %r10d + 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x00000dff pmovmskb %xmm5, %r9d 0x66, 0x0f, 0x6f, 0xec, //0x00000e04 movdqa %xmm4, %xmm5 0x66, 0x0f, 0x74, 0xe8, //0x00000e08 pcmpeqb %xmm0, %xmm5 0x66, 0x44, 0x0f, 0xd7, 0xfd, //0x00000e0c pmovmskb %xmm5, %r15d @@ -884,7 +887,7 @@ var _text_skip_object = []byte{ 0x66, 0x44, 0x0f, 0xd7, 0xed, //0x00000e19 pmovmskb %xmm5, %r13d 0x66, 0x0f, 0x6f, 0xef, //0x00000e1e movdqa %xmm7, %xmm5 0x66, 0x0f, 0x74, 0xe9, //0x00000e22 pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x00000e26 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0xd7, 0xd5, //0x00000e26 pmovmskb %xmm5, %edx 0x66, 0x0f, 0x6f, 0xee, //0x00000e2a movdqa %xmm6, %xmm5 0x66, 0x0f, 0x74, 0xe9, //0x00000e2e pcmpeqb %xmm1, %xmm5 0x66, 0x0f, 0xd7, 0xcd, //0x00000e32 pmovmskb %xmm5, %ecx @@ -895,3281 +898,3312 @@ var _text_skip_object = []byte{ 0x66, 0x0f, 0x64, 0xef, //0x00000e48 pcmpgtb %xmm7, %xmm5 0x66, 0x41, 0x0f, 0x64, 0xfa, //0x00000e4c pcmpgtb %xmm10, %xmm7 0x66, 0x0f, 0xdb, 0xfd, //0x00000e51 pand %xmm5, %xmm7 - 0x66, 0x0f, 0xd7, 0xf7, //0x00000e55 pmovmskb %xmm7, %esi + 0x66, 0x0f, 0xd7, 0xff, //0x00000e55 pmovmskb %xmm7, %edi 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x00000e59 movdqa %xmm12, %xmm5 0x66, 0x0f, 0x64, 0xee, //0x00000e5e pcmpgtb %xmm6, %xmm5 0x66, 0x41, 0x0f, 0x64, 0xf2, //0x00000e62 pcmpgtb %xmm10, %xmm6 0x66, 0x0f, 0xdb, 0xf5, //0x00000e67 pand %xmm5, %xmm6 - 0x66, 0x0f, 0xd7, 0xd6, //0x00000e6b pmovmskb %xmm6, %edx + 0x66, 0x0f, 0xd7, 0xf6, //0x00000e6b pmovmskb %xmm6, %esi 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x00000e6f movdqa %xmm12, %xmm5 0x66, 0x0f, 0x64, 0xec, //0x00000e74 pcmpgtb %xmm4, %xmm5 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00000e78 pcmpgtb %xmm10, %xmm4 0x66, 0x0f, 0xdb, 0xe5, //0x00000e7d pand %xmm5, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xcc, //0x00000e81 pmovmskb %xmm4, %r9d + 0x66, 0x44, 0x0f, 0xd7, 0xd4, //0x00000e81 pmovmskb %xmm4, %r10d 0x49, 0xc1, 0xe7, 0x30, //0x00000e86 shlq $48, %r15 - 0x49, 0xc1, 0xe2, 0x20, //0x00000e8a shlq $32, %r10 - 0x4d, 0x09, 0xfa, //0x00000e8e orq %r15, %r10 + 0x49, 0xc1, 0xe1, 0x20, //0x00000e8a shlq $32, %r9 + 0x4d, 0x09, 0xf9, //0x00000e8e orq %r15, %r9 0x48, 0xc1, 0xe3, 0x10, //0x00000e91 shlq $16, %rbx - 0x4c, 0x09, 0xd3, //0x00000e95 orq %r10, %rbx + 0x4c, 0x09, 0xcb, //0x00000e95 orq %r9, %rbx 0x49, 0x09, 0xdb, //0x00000e98 orq %rbx, %r11 0x49, 0xc1, 0xe0, 0x30, //0x00000e9b shlq $48, %r8 0x48, 0xc1, 0xe1, 0x20, //0x00000e9f shlq $32, %rcx 0x4c, 0x09, 0xc1, //0x00000ea3 orq %r8, %rcx - 0x48, 0xc1, 0xe7, 0x10, //0x00000ea6 shlq $16, %rdi - 0x48, 0x09, 0xcf, //0x00000eaa orq %rcx, %rdi - 0x49, 0xc1, 0xe1, 0x30, //0x00000ead shlq $48, %r9 - 0x48, 0xc1, 0xe2, 0x20, //0x00000eb1 shlq $32, %rdx - 0x4c, 0x09, 0xca, //0x00000eb5 orq %r9, %rdx - 0x48, 0xc1, 0xe6, 0x10, //0x00000eb8 shlq $16, %rsi - 0x48, 0x09, 0xd6, //0x00000ebc orq %rdx, %rsi - 0x49, 0x09, 0xfd, //0x00000ebf orq %rdi, %r13 - 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00000ec2 jne LBB0_177 + 0x48, 0xc1, 0xe2, 0x10, //0x00000ea6 shlq $16, %rdx + 0x48, 0x09, 0xca, //0x00000eaa orq %rcx, %rdx + 0x49, 0xc1, 0xe2, 0x30, //0x00000ead shlq $48, %r10 + 0x48, 0xc1, 0xe6, 0x20, //0x00000eb1 shlq $32, %rsi + 0x4c, 0x09, 0xd6, //0x00000eb5 orq %r10, %rsi + 0x48, 0xc1, 0xe7, 0x10, //0x00000eb8 shlq $16, %rdi + 0x48, 0x09, 0xf7, //0x00000ebc orq %rsi, %rdi + 0x49, 0x09, 0xd5, //0x00000ebf orq %rdx, %r13 + 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00000ec2 jne LBB0_182 0x4d, 0x85, 0xe4, //0x00000ec8 testq %r12, %r12 - 0x0f, 0x85, 0x5e, 0x00, 0x00, 0x00, //0x00000ecb jne LBB0_179 + 0x0f, 0x85, 0x5e, 0x00, 0x00, 0x00, //0x00000ecb jne LBB0_184 0x31, 0xdb, //0x00000ed1 xorl %ebx, %ebx - //0x00000ed3 LBB0_163 + //0x00000ed3 LBB0_168 0x66, 0x41, 0x0f, 0x6f, 0xe4, //0x00000ed3 movdqa %xmm12, %xmm4 0x66, 0x0f, 0x64, 0xe3, //0x00000ed8 pcmpgtb %xmm3, %xmm4 0x66, 0x41, 0x0f, 0x64, 0xda, //0x00000edc pcmpgtb %xmm10, %xmm3 0x66, 0x0f, 0xdb, 0xdc, //0x00000ee1 pand %xmm4, %xmm3 0x66, 0x0f, 0xd7, 0xcb, //0x00000ee5 pmovmskb %xmm3, %ecx - 0x48, 0x09, 0xce, //0x00000ee9 orq %rcx, %rsi + 0x48, 0x09, 0xcf, //0x00000ee9 orq %rcx, %rdi 0x4d, 0x85, 0xdb, //0x00000eec testq %r11, %r11 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00000eef movq $-72(%rbp), %r13 - 0x0f, 0x85, 0x82, 0x00, 0x00, 0x00, //0x00000ef3 jne LBB0_180 - 0x48, 0x85, 0xf6, //0x00000ef9 testq %rsi, %rsi - 0x0f, 0x85, 0x84, 0x2b, 0x00, 0x00, //0x00000efc jne LBB0_618 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00000eef movq $-80(%rbp), %r13 + 0x0f, 0x85, 0x82, 0x00, 0x00, 0x00, //0x00000ef3 jne LBB0_185 + 0x48, 0x85, 0xff, //0x00000ef9 testq %rdi, %rdi + 0x0f, 0x85, 0xec, 0x2b, 0x00, 0x00, //0x00000efc jne LBB0_631 0x49, 0x83, 0xc6, 0xc0, //0x00000f02 addq $-64, %r14 0x48, 0x83, 0xc0, 0x40, //0x00000f06 addq $64, %rax 0x49, 0x83, 0xfe, 0x3f, //0x00000f0a cmpq $63, %r14 - 0x0f, 0x87, 0xac, 0xfe, 0xff, 0xff, //0x00000f0e ja LBB0_160 - 0xe9, 0x6b, 0x18, 0x00, 0x00, //0x00000f14 jmp LBB0_166 - //0x00000f19 LBB0_177 + 0x0f, 0x87, 0xac, 0xfe, 0xff, 0xff, //0x00000f0e ja LBB0_165 + 0xe9, 0xb3, 0x18, 0x00, 0x00, //0x00000f14 jmp LBB0_171 + //0x00000f19 LBB0_182 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00000f19 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00000f1e jne LBB0_179 + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00000f1e jne LBB0_184 0x49, 0x0f, 0xbc, 0xcd, //0x00000f24 bsfq %r13, %rcx 0x48, 0x01, 0xc1, //0x00000f28 addq %rax, %rcx 0x48, 0x89, 0x4d, 0xc8, //0x00000f2b movq %rcx, $-56(%rbp) - //0x00000f2f LBB0_179 + //0x00000f2f LBB0_184 0x4c, 0x89, 0xe1, //0x00000f2f movq %r12, %rcx 0x48, 0xf7, 0xd1, //0x00000f32 notq %rcx 0x4c, 0x21, 0xe9, //0x00000f35 andq %r13, %rcx 0x48, 0x8d, 0x14, 0x09, //0x00000f38 leaq (%rcx,%rcx), %rdx 0x4c, 0x09, 0xe2, //0x00000f3c orq %r12, %rdx - 0x48, 0x89, 0xd7, //0x00000f3f movq %rdx, %rdi - 0x48, 0xf7, 0xd7, //0x00000f42 notq %rdi - 0x4c, 0x21, 0xef, //0x00000f45 andq %r13, %rdi + 0x48, 0x89, 0xd6, //0x00000f3f movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000f42 notq %rsi + 0x4c, 0x21, 0xee, //0x00000f45 andq %r13, %rsi 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000f48 movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xdf, //0x00000f52 andq %rbx, %rdi + 0x48, 0x21, 0xde, //0x00000f52 andq %rbx, %rsi 0x31, 0xdb, //0x00000f55 xorl %ebx, %ebx - 0x48, 0x01, 0xcf, //0x00000f57 addq %rcx, %rdi + 0x48, 0x01, 0xce, //0x00000f57 addq %rcx, %rsi 0x0f, 0x92, 0xc3, //0x00000f5a setb %bl - 0x48, 0x01, 0xff, //0x00000f5d addq %rdi, %rdi + 0x48, 0x01, 0xf6, //0x00000f5d addq %rsi, %rsi 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000f60 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xcf, //0x00000f6a xorq %rcx, %rdi - 0x48, 0x21, 0xd7, //0x00000f6d andq %rdx, %rdi - 0x48, 0xf7, 0xd7, //0x00000f70 notq %rdi - 0x49, 0x21, 0xfb, //0x00000f73 andq %rdi, %r11 - 0xe9, 0x58, 0xff, 0xff, 0xff, //0x00000f76 jmp LBB0_163 - //0x00000f7b LBB0_180 + 0x48, 0x31, 0xce, //0x00000f6a xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00000f6d andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000f70 notq %rsi + 0x49, 0x21, 0xf3, //0x00000f73 andq %rsi, %r11 + 0xe9, 0x58, 0xff, 0xff, 0xff, //0x00000f76 jmp LBB0_168 + //0x00000f7b LBB0_185 0x49, 0x0f, 0xbc, 0xcb, //0x00000f7b bsfq %r11, %rcx - 0x48, 0x85, 0xf6, //0x00000f7f testq %rsi, %rsi - 0x0f, 0x84, 0xdb, 0x02, 0x00, 0x00, //0x00000f82 je LBB0_221 - 0x48, 0x0f, 0xbc, 0xd6, //0x00000f88 bsfq %rsi, %rdx + 0x48, 0x85, 0xff, //0x00000f7f testq %rdi, %rdi + 0x0f, 0x84, 0xc4, 0x02, 0x00, 0x00, //0x00000f82 je LBB0_227 + 0x48, 0x0f, 0xbc, 0xd7, //0x00000f88 bsfq %rdi, %rdx 0x4c, 0x8b, 0x75, 0xd0, //0x00000f8c movq $-48(%rbp), %r14 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000f90 movabsq $4294977024, %r11 0x48, 0x39, 0xca, //0x00000f9a cmpq %rcx, %rdx - 0x0f, 0x83, 0xdc, 0x02, 0x00, 0x00, //0x00000f9d jae LBB0_222 - 0xe9, 0x74, 0x2c, 0x00, 0x00, //0x00000fa3 jmp LBB0_182 - //0x00000fa8 LBB0_183 - 0x41, 0x89, 0xcb, //0x00000fa8 movl %ecx, %r11d - 0x4d, 0x01, 0xf3, //0x00000fab addq %r14, %r11 - 0x4d, 0x01, 0xeb, //0x00000fae addq %r13, %r11 - //0x00000fb1 LBB0_184 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00000fb1 movq $-1, %r13 - 0x4d, 0x85, 0xc0, //0x00000fb8 testq %r8, %r8 - 0x0f, 0x85, 0x49, 0x02, 0x00, 0x00, //0x00000fbb jne LBB0_213 - 0xe9, 0x00, 0x2c, 0x00, 0x00, //0x00000fc1 jmp LBB0_185 - //0x00000fc6 LBB0_186 - 0x49, 0x29, 0xd1, //0x00000fc6 subq %rdx, %r9 - 0x48, 0x89, 0xd1, //0x00000fc9 movq %rdx, %rcx - 0x0f, 0x84, 0x73, 0x2c, 0x00, 0x00, //0x00000fcc je LBB0_644 - 0x4c, 0x89, 0x65, 0xc0, //0x00000fd2 movq %r12, $-64(%rbp) - 0x49, 0x83, 0xf9, 0x40, //0x00000fd6 cmpq $64, %r9 - 0x0f, 0x82, 0x9e, 0x1f, 0x00, 0x00, //0x00000fda jb LBB0_494 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000fe0 movq $-1, $-56(%rbp) - 0x48, 0x89, 0xc8, //0x00000fe8 movq %rcx, %rax - 0x45, 0x31, 0xe4, //0x00000feb xorl %r12d, %r12d - 0x90, 0x90, //0x00000fee .p2align 4, 0x90 - //0x00000ff0 LBB0_189 - 0x48, 0x8b, 0x4d, 0xc0, //0x00000ff0 movq $-64(%rbp), %rcx - 0xf3, 0x44, 0x0f, 0x6f, 0x2c, 0x01, //0x00000ff4 movdqu (%rcx,%rax), %xmm13 - 0xf3, 0x0f, 0x6f, 0x74, 0x01, 0x10, //0x00000ffa movdqu $16(%rcx,%rax), %xmm6 - 0xf3, 0x0f, 0x6f, 0x6c, 0x01, 0x20, //0x00001000 movdqu $32(%rcx,%rax), %xmm5 - 0xf3, 0x0f, 0x6f, 0x64, 0x01, 0x30, //0x00001006 movdqu $48(%rcx,%rax), %xmm4 - 0x66, 0x41, 0x0f, 0x6f, 0xdd, //0x0000100c movdqa %xmm13, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001011 pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00001015 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x6f, 0xde, //0x0000101a movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x0000101e pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xdb, //0x00001022 pmovmskb %xmm3, %ebx - 0x66, 0x0f, 0x6f, 0xdd, //0x00001026 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x0000102a pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xf3, //0x0000102e pmovmskb %xmm3, %r14d - 0x66, 0x0f, 0x6f, 0xdc, //0x00001033 movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001037 pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x0000103b pmovmskb %xmm3, %r15d - 0x66, 0x41, 0x0f, 0x6f, 0xdd, //0x00001040 movdqa %xmm13, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00001045 pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00001049 pmovmskb %xmm3, %r13d - 0x66, 0x0f, 0x6f, 0xde, //0x0000104e movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00001052 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001056 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xdd, //0x0000105a movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000105e pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001062 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdc, //0x00001066 movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000106a pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x0000106e pmovmskb %xmm3, %r10d - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00001073 movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xde, //0x00001078 pcmpgtb %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xf2, //0x0000107c pcmpgtb %xmm10, %xmm6 - 0x66, 0x0f, 0xdb, 0xf3, //0x00001081 pand %xmm3, %xmm6 - 0x66, 0x0f, 0xd7, 0xfe, //0x00001085 pmovmskb %xmm6, %edi - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00001089 movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdd, //0x0000108e pcmpgtb %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xea, //0x00001092 pcmpgtb %xmm10, %xmm5 - 0x66, 0x0f, 0xdb, 0xeb, //0x00001097 pand %xmm3, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x0000109b pmovmskb %xmm5, %edx - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x0000109f movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x000010a4 pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x000010a8 pcmpgtb %xmm10, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x000010ad pand %xmm3, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xc4, //0x000010b1 pmovmskb %xmm4, %r8d - 0x49, 0xc1, 0xe7, 0x30, //0x000010b6 shlq $48, %r15 - 0x49, 0xc1, 0xe6, 0x20, //0x000010ba shlq $32, %r14 - 0x4d, 0x09, 0xfe, //0x000010be orq %r15, %r14 - 0x48, 0xc1, 0xe3, 0x10, //0x000010c1 shlq $16, %rbx - 0x4c, 0x09, 0xf3, //0x000010c5 orq %r14, %rbx - 0x49, 0x09, 0xdb, //0x000010c8 orq %rbx, %r11 - 0x49, 0xc1, 0xe2, 0x30, //0x000010cb shlq $48, %r10 - 0x48, 0xc1, 0xe6, 0x20, //0x000010cf shlq $32, %rsi - 0x4c, 0x09, 0xd6, //0x000010d3 orq %r10, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x000010d6 shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x000010da orq %rsi, %rcx - 0x49, 0xc1, 0xe0, 0x30, //0x000010dd shlq $48, %r8 - 0x48, 0xc1, 0xe2, 0x20, //0x000010e1 shlq $32, %rdx - 0x4c, 0x09, 0xc2, //0x000010e5 orq %r8, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x000010e8 shlq $16, %rdi - 0x48, 0x09, 0xd7, //0x000010ec orq %rdx, %rdi - 0x49, 0x09, 0xcd, //0x000010ef orq %rcx, %r13 - 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x000010f2 jne LBB0_206 - 0x4d, 0x85, 0xe4, //0x000010f8 testq %r12, %r12 - 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x000010fb jne LBB0_208 - 0x45, 0x31, 0xe4, //0x00001101 xorl %r12d, %r12d - 0x4c, 0x8b, 0x75, 0xd0, //0x00001104 movq $-48(%rbp), %r14 - //0x00001108 LBB0_192 - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00001108 movdqa %xmm12, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xdd, //0x0000110d pcmpgtb %xmm13, %xmm3 - 0x66, 0x45, 0x0f, 0x64, 0xea, //0x00001112 pcmpgtb %xmm10, %xmm13 - 0x66, 0x44, 0x0f, 0xdb, 0xeb, //0x00001117 pand %xmm3, %xmm13 - 0x66, 0x41, 0x0f, 0xd7, 0xcd, //0x0000111c pmovmskb %xmm13, %ecx - 0x48, 0x09, 0xcf, //0x00001121 orq %rcx, %rdi - 0x4d, 0x85, 0xdb, //0x00001124 testq %r11, %r11 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00001127 movq $-72(%rbp), %r13 - 0x0f, 0x85, 0x91, 0x00, 0x00, 0x00, //0x0000112b jne LBB0_210 - 0x48, 0x85, 0xff, //0x00001131 testq %rdi, %rdi - 0x0f, 0x85, 0x6f, 0x2a, 0x00, 0x00, //0x00001134 jne LBB0_632 - 0x49, 0x83, 0xc1, 0xc0, //0x0000113a addq $-64, %r9 - 0x48, 0x83, 0xc0, 0x40, //0x0000113e addq $64, %rax - 0x49, 0x83, 0xf9, 0x3f, //0x00001142 cmpq $63, %r9 - 0x0f, 0x87, 0xa4, 0xfe, 0xff, 0xff, //0x00001146 ja LBB0_189 - 0xe9, 0xd2, 0x17, 0x00, 0x00, //0x0000114c jmp LBB0_195 - //0x00001151 LBB0_206 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00001151 cmpq $-1, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x00001156 movq $-48(%rbp), %r14 - 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x0000115a jne LBB0_209 - 0x49, 0x0f, 0xbc, 0xcd, //0x00001160 bsfq %r13, %rcx - 0x48, 0x01, 0xc1, //0x00001164 addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00001167 movq %rcx, $-56(%rbp) - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x0000116b jmp LBB0_209 - //0x00001170 LBB0_208 - 0x4c, 0x8b, 0x75, 0xd0, //0x00001170 movq $-48(%rbp), %r14 - //0x00001174 LBB0_209 - 0x4c, 0x89, 0xe1, //0x00001174 movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x00001177 notq %rcx - 0x4c, 0x21, 0xe9, //0x0000117a andq %r13, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x0000117d leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xe2, //0x00001181 orq %r12, %rdx - 0x48, 0x89, 0xd6, //0x00001184 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00001187 notq %rsi - 0x4c, 0x21, 0xee, //0x0000118a andq %r13, %rsi - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000118d movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xde, //0x00001197 andq %rbx, %rsi - 0x45, 0x31, 0xe4, //0x0000119a xorl %r12d, %r12d - 0x48, 0x01, 0xce, //0x0000119d addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc4, //0x000011a0 setb %r12b - 0x48, 0x01, 0xf6, //0x000011a4 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000011a7 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x000011b1 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x000011b4 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x000011b7 notq %rsi - 0x49, 0x21, 0xf3, //0x000011ba andq %rsi, %r11 - 0xe9, 0x46, 0xff, 0xff, 0xff, //0x000011bd jmp LBB0_192 - //0x000011c2 LBB0_210 - 0x49, 0x0f, 0xbc, 0xcb, //0x000011c2 bsfq %r11, %rcx - 0x48, 0x85, 0xff, //0x000011c6 testq %rdi, %rdi - 0x0f, 0x84, 0x0c, 0x06, 0x00, 0x00, //0x000011c9 je LBB0_302 - 0x48, 0x0f, 0xbc, 0xd7, //0x000011cf bsfq %rdi, %rdx - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000011d3 movabsq $4294977024, %r11 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x5a, 0xee, 0xff, 0xff, //0x000011dd movdqu $-4518(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x48, 0x39, 0xca, //0x000011e6 cmpq %rcx, %rdx - 0x0f, 0x83, 0x0d, 0x06, 0x00, 0x00, //0x000011e9 jae LBB0_303 - 0xe9, 0xf8, 0x29, 0x00, 0x00, //0x000011ef jmp LBB0_640 - //0x000011f4 LBB0_212 - 0x48, 0x01, 0xf9, //0x000011f4 addq %rdi, %rcx - 0x49, 0x89, 0xcb, //0x000011f7 movq %rcx, %r11 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000011fa movq $-1, %r13 - 0x4d, 0x85, 0xc0, //0x00001201 testq %r8, %r8 - 0x0f, 0x84, 0xbc, 0x29, 0x00, 0x00, //0x00001204 je LBB0_185 - //0x0000120a LBB0_213 - 0x4d, 0x85, 0xc9, //0x0000120a testq %r9, %r9 - 0x48, 0x8b, 0x75, 0xc0, //0x0000120d movq $-64(%rbp), %rsi - 0x0f, 0x84, 0x1b, 0x28, 0x00, 0x00, //0x00001211 je LBB0_612 - 0x4d, 0x85, 0xff, //0x00001217 testq %r15, %r15 - 0x0f, 0x84, 0x12, 0x28, 0x00, 0x00, //0x0000121a je LBB0_612 - 0x4d, 0x29, 0xf3, //0x00001220 subq %r14, %r11 - 0x49, 0x8d, 0x4b, 0xff, //0x00001223 leaq $-1(%r11), %rcx - 0x49, 0x39, 0xc8, //0x00001227 cmpq %rcx, %r8 - 0x0f, 0x84, 0xac, 0xef, 0xff, 0xff, //0x0000122a je LBB0_1 - 0x49, 0x39, 0xc9, //0x00001230 cmpq %rcx, %r9 - 0x0f, 0x84, 0xa3, 0xef, 0xff, 0xff, //0x00001233 je LBB0_1 - 0x49, 0x39, 0xcf, //0x00001239 cmpq %rcx, %r15 - 0x0f, 0x84, 0x9a, 0xef, 0xff, 0xff, //0x0000123c je LBB0_1 - 0x4d, 0x85, 0xc9, //0x00001242 testq %r9, %r9 - 0x0f, 0x8e, 0x6d, 0x05, 0x00, 0x00, //0x00001245 jle LBB0_299 - 0x49, 0x8d, 0x49, 0xff, //0x0000124b leaq $-1(%r9), %rcx - 0x49, 0x39, 0xcf, //0x0000124f cmpq %rcx, %r15 - 0x0f, 0x84, 0x60, 0x05, 0x00, 0x00, //0x00001252 je LBB0_299 - 0x49, 0xf7, 0xd1, //0x00001258 notq %r9 - 0x4d, 0x89, 0xcd, //0x0000125b movq %r9, %r13 - 0xe9, 0x7f, 0xef, 0xff, 0xff, //0x0000125e jmp LBB0_2 - //0x00001263 LBB0_221 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001263 movl $64, %edx - 0x4c, 0x8b, 0x75, 0xd0, //0x00001268 movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000126c movabsq $4294977024, %r11 - 0x48, 0x39, 0xca, //0x00001276 cmpq %rcx, %rdx - 0x0f, 0x82, 0x9d, 0x29, 0x00, 0x00, //0x00001279 jb LBB0_182 - //0x0000127f LBB0_222 - 0x48, 0x01, 0xc8, //0x0000127f addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00001282 addq $1, %rax - //0x00001286 LBB0_223 - 0x48, 0x85, 0xc0, //0x00001286 testq %rax, %rax - 0x0f, 0x88, 0x7e, 0x27, 0x00, 0x00, //0x00001289 js LBB0_609 - //0x0000128f LBB0_224 - 0x49, 0x89, 0x06, //0x0000128f movq %rax, (%r14) - 0x48, 0x8b, 0x45, 0xb0, //0x00001292 movq $-80(%rbp), %rax - 0x48, 0x85, 0xc0, //0x00001296 testq %rax, %rax - 0x0f, 0x8f, 0x21, 0xef, 0xff, 0xff, //0x00001299 jg LBB0_4 - 0xe9, 0x54, 0x27, 0x00, 0x00, //0x0000129f jmp LBB0_606 - //0x000012a4 LBB0_225 - 0x49, 0x8b, 0x0e, //0x000012a4 movq (%r14), %rcx - 0x48, 0x8b, 0x55, 0xa8, //0x000012a7 movq $-88(%rbp), %rdx - 0x48, 0x8b, 0x52, 0x08, //0x000012ab movq $8(%rdx), %rdx - 0x48, 0x8d, 0x72, 0xfc, //0x000012af leaq $-4(%rdx), %rsi - 0x48, 0x39, 0xf1, //0x000012b3 cmpq %rsi, %rcx - 0x0f, 0x87, 0xc2, 0x27, 0x00, 0x00, //0x000012b6 ja LBB0_617 - 0x41, 0x8b, 0x14, 0x0c, //0x000012bc movl (%r12,%rcx), %edx - 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x000012c0 cmpl $1702063201, %edx - 0x0f, 0x85, 0xe7, 0x27, 0x00, 0x00, //0x000012c6 jne LBB0_622 - 0x48, 0x8d, 0x41, 0x04, //0x000012cc leaq $4(%rcx), %rax - 0x49, 0x89, 0x06, //0x000012d0 movq %rax, (%r14) - 0x48, 0x85, 0xc9, //0x000012d3 testq %rcx, %rcx - 0x0f, 0x8f, 0xe4, 0xee, 0xff, 0xff, //0x000012d6 jg LBB0_4 - 0xe9, 0xbc, 0x28, 0x00, 0x00, //0x000012dc jmp LBB0_228 - //0x000012e1 LBB0_229 - 0xf6, 0x45, 0x98, 0x40, //0x000012e1 testb $64, $-104(%rbp) - 0x0f, 0x85, 0x57, 0x05, 0x00, 0x00, //0x000012e5 jne LBB0_308 - 0x49, 0x8b, 0x45, 0x00, //0x000012eb movq (%r13), %rax - 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x000012ef cmpq $4095, %rax - 0x0f, 0x8f, 0xf1, 0x26, 0x00, 0x00, //0x000012f5 jg LBB0_634 - 0x48, 0x8d, 0x48, 0x01, //0x000012fb leaq $1(%rax), %rcx - 0x49, 0x89, 0x4d, 0x00, //0x000012ff movq %rcx, (%r13) - 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x05, 0x00, 0x00, 0x00, //0x00001303 movq $5, $8(%r13,%rax,8) - 0xe9, 0xaf, 0xee, 0xff, 0xff, //0x0000130c jmp LBB0_4 - //0x00001311 LBB0_232 - 0x48, 0x8b, 0x4d, 0x98, //0x00001311 movq $-104(%rbp), %rcx - 0xf6, 0xc1, 0x40, //0x00001315 testb $64, %cl - 0x0f, 0x85, 0xa0, 0x09, 0x00, 0x00, //0x00001318 jne LBB0_334 - 0x49, 0x8b, 0x16, //0x0000131e movq (%r14), %rdx - 0x48, 0x8b, 0x45, 0xa8, //0x00001321 movq $-88(%rbp), %rax - 0x48, 0x8b, 0x40, 0x08, //0x00001325 movq $8(%rax), %rax - 0xf6, 0xc1, 0x20, //0x00001329 testb $32, %cl - 0x48, 0x89, 0xd1, //0x0000132c movq %rdx, %rcx - 0x48, 0x89, 0x55, 0xb0, //0x0000132f movq %rdx, $-80(%rbp) - 0x48, 0x89, 0x45, 0xa0, //0x00001333 movq %rax, $-96(%rbp) - 0x0f, 0x85, 0x45, 0x10, 0x00, 0x00, //0x00001337 jne LBB0_385 - 0x49, 0x89, 0xc1, //0x0000133d movq %rax, %r9 - 0x49, 0x29, 0xd1, //0x00001340 subq %rdx, %r9 - 0x0f, 0x84, 0xef, 0x28, 0x00, 0x00, //0x00001343 je LBB0_646 - 0x49, 0x83, 0xf9, 0x40, //0x00001349 cmpq $64, %r9 - 0x0f, 0x82, 0x05, 0x1d, 0x00, 0x00, //0x0000134d jb LBB0_501 - 0x48, 0x8b, 0x45, 0xb0, //0x00001353 movq $-80(%rbp), %rax - 0x49, 0x89, 0xc6, //0x00001357 movq %rax, %r14 - 0x49, 0xf7, 0xd6, //0x0000135a notq %r14 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000135d movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00001365 xorl %r8d, %r8d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001368 .p2align 4, 0x90 - //0x00001370 LBB0_237 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00001370 movdqu (%r12,%rax), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00001376 movdqu $16(%r12,%rax), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000137d movdqu $32(%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00001384 movdqu $48(%r12,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xfb, //0x0000138b movdqa %xmm3, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000138f pcmpeqb %xmm0, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00001393 pmovmskb %xmm7, %r10d - 0x66, 0x0f, 0x6f, 0xfc, //0x00001398 movdqa %xmm4, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000139c pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xcf, //0x000013a0 pmovmskb %xmm7, %ecx - 0x66, 0x0f, 0x6f, 0xfd, //0x000013a4 movdqa %xmm5, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000013a8 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x000013ac pmovmskb %xmm7, %edi - 0x66, 0x0f, 0x6f, 0xfe, //0x000013b0 movdqa %xmm6, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000013b4 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xd7, //0x000013b8 pmovmskb %xmm7, %edx - 0x66, 0x0f, 0x74, 0xd9, //0x000013bc pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x000013c0 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x74, 0xe1, //0x000013c5 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xdc, //0x000013c9 pmovmskb %xmm4, %ebx - 0x66, 0x0f, 0x74, 0xe9, //0x000013cd pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x000013d1 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x74, 0xf1, //0x000013d5 pcmpeqb %xmm1, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x000013d9 pmovmskb %xmm6, %r15d - 0x48, 0xc1, 0xe2, 0x30, //0x000013de shlq $48, %rdx - 0x48, 0xc1, 0xe7, 0x20, //0x000013e2 shlq $32, %rdi - 0x48, 0x09, 0xd7, //0x000013e6 orq %rdx, %rdi - 0x48, 0xc1, 0xe1, 0x10, //0x000013e9 shlq $16, %rcx - 0x48, 0x09, 0xf9, //0x000013ed orq %rdi, %rcx - 0x49, 0x09, 0xca, //0x000013f0 orq %rcx, %r10 - 0x49, 0xc1, 0xe7, 0x30, //0x000013f3 shlq $48, %r15 - 0x48, 0xc1, 0xe6, 0x20, //0x000013f7 shlq $32, %rsi - 0x4c, 0x09, 0xfe, //0x000013fb orq %r15, %rsi - 0x48, 0xc1, 0xe3, 0x10, //0x000013fe shlq $16, %rbx - 0x48, 0x09, 0xf3, //0x00001402 orq %rsi, %rbx - 0x49, 0x09, 0xdb, //0x00001405 orq %rbx, %r11 - 0x0f, 0x85, 0x3a, 0x00, 0x00, 0x00, //0x00001408 jne LBB0_246 - 0x4d, 0x85, 0xc0, //0x0000140e testq %r8, %r8 - 0x0f, 0x85, 0x47, 0x00, 0x00, 0x00, //0x00001411 jne LBB0_248 - 0x45, 0x31, 0xc0, //0x00001417 xorl %r8d, %r8d - 0x4d, 0x85, 0xd2, //0x0000141a testq %r10, %r10 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000141d movabsq $4294977024, %r11 - 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, //0x00001427 jne LBB0_249 - //0x0000142d LBB0_240 - 0x49, 0x83, 0xc1, 0xc0, //0x0000142d addq $-64, %r9 - 0x49, 0x83, 0xc6, 0xc0, //0x00001431 addq $-64, %r14 - 0x48, 0x83, 0xc0, 0x40, //0x00001435 addq $64, %rax - 0x49, 0x83, 0xf9, 0x3f, //0x00001439 cmpq $63, %r9 - 0x0f, 0x87, 0x2d, 0xff, 0xff, 0xff, //0x0000143d ja LBB0_237 - 0xe9, 0x06, 0x18, 0x00, 0x00, //0x00001443 jmp LBB0_241 - //0x00001448 LBB0_246 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00001448 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x0000144d jne LBB0_248 - 0x49, 0x0f, 0xbc, 0xcb, //0x00001453 bsfq %r11, %rcx - 0x48, 0x01, 0xc1, //0x00001457 addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x0000145a movq %rcx, $-56(%rbp) - //0x0000145e LBB0_248 - 0x4c, 0x89, 0xc1, //0x0000145e movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00001461 notq %rcx - 0x4c, 0x21, 0xd9, //0x00001464 andq %r11, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x00001467 leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xc2, //0x0000146b orq %r8, %rdx - 0x48, 0x89, 0xd6, //0x0000146e movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00001471 notq %rsi - 0x4c, 0x21, 0xde, //0x00001474 andq %r11, %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001477 movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfe, //0x00001481 andq %rdi, %rsi - 0x45, 0x31, 0xc0, //0x00001484 xorl %r8d, %r8d - 0x48, 0x01, 0xce, //0x00001487 addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc0, //0x0000148a setb %r8b - 0x48, 0x01, 0xf6, //0x0000148e addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001491 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x0000149b xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x0000149e andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x000014a1 notq %rsi - 0x49, 0x21, 0xf2, //0x000014a4 andq %rsi, %r10 - 0x4d, 0x85, 0xd2, //0x000014a7 testq %r10, %r10 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000014aa movabsq $4294977024, %r11 - 0x0f, 0x84, 0x73, 0xff, 0xff, 0xff, //0x000014b4 je LBB0_240 - //0x000014ba LBB0_249 - 0x49, 0x0f, 0xbc, 0xc2, //0x000014ba bsfq %r10, %rax - 0x4c, 0x29, 0xf0, //0x000014be subq %r14, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x000014c1 movq $-48(%rbp), %r14 - 0xe9, 0x73, 0x11, 0x00, 0x00, //0x000014c5 jmp LBB0_426 - //0x000014ca LBB0_250 - 0x48, 0x8b, 0x45, 0xa8, //0x000014ca movq $-88(%rbp), %rax - 0x48, 0x8b, 0x78, 0x08, //0x000014ce movq $8(%rax), %rdi - 0x49, 0x8b, 0x06, //0x000014d2 movq (%r14), %rax - 0xf6, 0x45, 0x98, 0x40, //0x000014d5 testb $64, $-104(%rbp) - 0x0f, 0x85, 0xf2, 0x08, 0x00, 0x00, //0x000014d9 jne LBB0_344 - 0x48, 0x29, 0xc7, //0x000014df subq %rax, %rdi - 0x0f, 0x84, 0xe7, 0x26, 0x00, 0x00, //0x000014e2 je LBB0_635 - 0x4d, 0x8d, 0x04, 0x04, //0x000014e8 leaq (%r12,%rax), %r8 - 0x41, 0x80, 0x38, 0x30, //0x000014ec cmpb $48, (%r8) - 0x0f, 0x85, 0x36, 0x00, 0x00, 0x00, //0x000014f0 jne LBB0_256 - 0xbb, 0x01, 0x00, 0x00, 0x00, //0x000014f6 movl $1, %ebx - 0x48, 0x83, 0xff, 0x01, //0x000014fb cmpq $1, %rdi - 0x0f, 0x84, 0x23, 0x17, 0x00, 0x00, //0x000014ff je LBB0_469 - 0x41, 0x8a, 0x48, 0x01, //0x00001505 movb $1(%r8), %cl - 0x80, 0xc1, 0xd2, //0x00001509 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x0000150c cmpb $55, %cl - 0x0f, 0x87, 0x13, 0x17, 0x00, 0x00, //0x0000150f ja LBB0_469 - 0x0f, 0xb6, 0xc9, //0x00001515 movzbl %cl, %ecx - 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00001518 movabsq $36028797027352577, %rdx - 0x48, 0x0f, 0xa3, 0xca, //0x00001522 btq %rcx, %rdx - 0x0f, 0x83, 0xfc, 0x16, 0x00, 0x00, //0x00001526 jae LBB0_469 - //0x0000152c LBB0_256 - 0x48, 0x83, 0xff, 0x10, //0x0000152c cmpq $16, %rdi - 0x0f, 0x82, 0x02, 0x1b, 0x00, 0x00, //0x00001530 jb LBB0_500 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00001536 movq $-1, %r13 - 0x31, 0xdb, //0x0000153d xorl %ebx, %ebx - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000153f movq $-1, %r10 - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00001546 movq $-1, %r14 - 0x49, 0x89, 0xf9, //0x0000154d movq %rdi, %r9 - //0x00001550 .p2align 4, 0x90 - //0x00001550 LBB0_258 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x18, //0x00001550 movdqu (%r8,%rbx), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x00001556 movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x64, 0x25, 0x3e, 0xeb, 0xff, 0xff, //0x0000155a pcmpgtb $-5314(%rip), %xmm4 /* LCPI0_10+0(%rip) */ - 0x66, 0x41, 0x0f, 0x6f, 0xef, //0x00001562 movdqa %xmm15, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x00001567 pcmpgtb %xmm3, %xmm5 - 0x66, 0x0f, 0xdb, 0xec, //0x0000156b pand %xmm4, %xmm5 - 0x66, 0x0f, 0x6f, 0xe3, //0x0000156f movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x74, 0x25, 0x45, 0xeb, 0xff, 0xff, //0x00001573 pcmpeqb $-5307(%rip), %xmm4 /* LCPI0_12+0(%rip) */ - 0x66, 0x0f, 0x6f, 0xf3, //0x0000157b movdqa %xmm3, %xmm6 - 0x66, 0x0f, 0x74, 0x35, 0x49, 0xeb, 0xff, 0xff, //0x0000157f pcmpeqb $-5303(%rip), %xmm6 /* LCPI0_13+0(%rip) */ - 0x66, 0x0f, 0xeb, 0xf4, //0x00001587 por %xmm4, %xmm6 - 0x66, 0x0f, 0x6f, 0xe3, //0x0000158b movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xe1, //0x0000158f pand %xmm9, %xmm4 - 0x66, 0x0f, 0x74, 0x1d, 0x44, 0xeb, 0xff, 0xff, //0x00001594 pcmpeqb $-5308(%rip), %xmm3 /* LCPI0_14+0(%rip) */ - 0x66, 0x41, 0x0f, 0x74, 0xe3, //0x0000159c pcmpeqb %xmm11, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xfc, //0x000015a1 pmovmskb %xmm4, %r15d - 0x66, 0x0f, 0xeb, 0xe3, //0x000015a6 por %xmm3, %xmm4 - 0x66, 0x0f, 0xeb, 0xee, //0x000015aa por %xmm6, %xmm5 - 0x66, 0x0f, 0xeb, 0xec, //0x000015ae por %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xd3, //0x000015b2 pmovmskb %xmm3, %edx - 0x66, 0x44, 0x0f, 0xd7, 0xde, //0x000015b6 pmovmskb %xmm6, %r11d - 0x66, 0x0f, 0xd7, 0xcd, //0x000015bb pmovmskb %xmm5, %ecx - 0xf7, 0xd1, //0x000015bf notl %ecx - 0x0f, 0xbc, 0xc9, //0x000015c1 bsfl %ecx, %ecx - 0x83, 0xf9, 0x10, //0x000015c4 cmpl $16, %ecx - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x000015c7 je LBB0_260 - 0xbe, 0xff, 0xff, 0xff, 0xff, //0x000015cd movl $-1, %esi - 0xd3, 0xe6, //0x000015d2 shll %cl, %esi - 0xf7, 0xd6, //0x000015d4 notl %esi - 0x21, 0xf2, //0x000015d6 andl %esi, %edx - 0x41, 0x21, 0xf7, //0x000015d8 andl %esi, %r15d - 0x44, 0x21, 0xde, //0x000015db andl %r11d, %esi - 0x41, 0x89, 0xf3, //0x000015de movl %esi, %r11d - //0x000015e1 LBB0_260 - 0x8d, 0x72, 0xff, //0x000015e1 leal $-1(%rdx), %esi - 0x21, 0xd6, //0x000015e4 andl %edx, %esi - 0x0f, 0x85, 0x06, 0x16, 0x00, 0x00, //0x000015e6 jne LBB0_463 - 0x41, 0x8d, 0x77, 0xff, //0x000015ec leal $-1(%r15), %esi - 0x44, 0x21, 0xfe, //0x000015f0 andl %r15d, %esi - 0x0f, 0x85, 0xf9, 0x15, 0x00, 0x00, //0x000015f3 jne LBB0_463 - 0x41, 0x8d, 0x73, 0xff, //0x000015f9 leal $-1(%r11), %esi - 0x44, 0x21, 0xde, //0x000015fd andl %r11d, %esi - 0x0f, 0x85, 0xec, 0x15, 0x00, 0x00, //0x00001600 jne LBB0_463 - 0x85, 0xd2, //0x00001606 testl %edx, %edx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00001608 je LBB0_266 - 0x0f, 0xbc, 0xd2, //0x0000160e bsfl %edx, %edx - 0x49, 0x83, 0xfe, 0xff, //0x00001611 cmpq $-1, %r14 - 0x0f, 0x85, 0xfc, 0x15, 0x00, 0x00, //0x00001615 jne LBB0_466 - 0x48, 0x01, 0xda, //0x0000161b addq %rbx, %rdx - 0x49, 0x89, 0xd6, //0x0000161e movq %rdx, %r14 - //0x00001621 LBB0_266 - 0x45, 0x85, 0xff, //0x00001621 testl %r15d, %r15d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00001624 je LBB0_269 - 0x41, 0x0f, 0xbc, 0xd7, //0x0000162a bsfl %r15d, %edx - 0x49, 0x83, 0xfa, 0xff, //0x0000162e cmpq $-1, %r10 - 0x0f, 0x85, 0xdf, 0x15, 0x00, 0x00, //0x00001632 jne LBB0_466 - 0x48, 0x01, 0xda, //0x00001638 addq %rbx, %rdx - 0x49, 0x89, 0xd2, //0x0000163b movq %rdx, %r10 - //0x0000163e LBB0_269 - 0x45, 0x85, 0xdb, //0x0000163e testl %r11d, %r11d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00001641 je LBB0_272 - 0x41, 0x0f, 0xbc, 0xd3, //0x00001647 bsfl %r11d, %edx - 0x49, 0x83, 0xfd, 0xff, //0x0000164b cmpq $-1, %r13 - 0x0f, 0x85, 0xc2, 0x15, 0x00, 0x00, //0x0000164f jne LBB0_466 - 0x48, 0x01, 0xda, //0x00001655 addq %rbx, %rdx - 0x49, 0x89, 0xd5, //0x00001658 movq %rdx, %r13 - //0x0000165b LBB0_272 - 0x83, 0xf9, 0x10, //0x0000165b cmpl $16, %ecx - 0x0f, 0x85, 0x36, 0x0f, 0x00, 0x00, //0x0000165e jne LBB0_411 - 0x49, 0x83, 0xc1, 0xf0, //0x00001664 addq $-16, %r9 - 0x48, 0x83, 0xc3, 0x10, //0x00001668 addq $16, %rbx - 0x49, 0x83, 0xf9, 0x0f, //0x0000166c cmpq $15, %r9 - 0x0f, 0x87, 0xda, 0xfe, 0xff, 0xff, //0x00001670 ja LBB0_258 - 0x49, 0x8d, 0x14, 0x18, //0x00001676 leaq (%r8,%rbx), %rdx - 0x49, 0x89, 0xd3, //0x0000167a movq %rdx, %r11 - 0x48, 0x39, 0xdf, //0x0000167d cmpq %rbx, %rdi - 0x0f, 0x84, 0x28, 0x0f, 0x00, 0x00, //0x00001680 je LBB0_413 - //0x00001686 LBB0_275 - 0x4e, 0x8d, 0x1c, 0x0a, //0x00001686 leaq (%rdx,%r9), %r11 - 0x49, 0x89, 0xd7, //0x0000168a movq %rdx, %r15 - 0x4d, 0x29, 0xc7, //0x0000168d subq %r8, %r15 - 0x31, 0xdb, //0x00001690 xorl %ebx, %ebx - 0xe9, 0x26, 0x00, 0x00, 0x00, //0x00001692 jmp LBB0_279 - //0x00001697 LBB0_276 - 0x49, 0x83, 0xfd, 0xff, //0x00001697 cmpq $-1, %r13 - 0x0f, 0x85, 0x65, 0x15, 0x00, 0x00, //0x0000169b jne LBB0_465 - 0x4d, 0x8d, 0x2c, 0x1f, //0x000016a1 leaq (%r15,%rbx), %r13 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000016a5 .p2align 4, 0x90 - //0x000016b0 LBB0_278 - 0x48, 0x83, 0xc3, 0x01, //0x000016b0 addq $1, %rbx - 0x49, 0x39, 0xd9, //0x000016b4 cmpq %rbx, %r9 - 0x0f, 0x84, 0xf1, 0x0e, 0x00, 0x00, //0x000016b7 je LBB0_413 - //0x000016bd LBB0_279 - 0x0f, 0xbe, 0x0c, 0x1a, //0x000016bd movsbl (%rdx,%rbx), %ecx - 0x8d, 0x71, 0xd0, //0x000016c1 leal $-48(%rcx), %esi - 0x83, 0xfe, 0x0a, //0x000016c4 cmpl $10, %esi - 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x000016c7 jb LBB0_278 - 0x8d, 0x71, 0xd5, //0x000016cd leal $-43(%rcx), %esi - 0x83, 0xfe, 0x1a, //0x000016d0 cmpl $26, %esi - 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x000016d3 ja LBB0_284 - 0x48, 0x8d, 0x3d, 0x08, 0x28, 0x00, 0x00, //0x000016d9 leaq $10248(%rip), %rdi /* LJTI0_2+0(%rip) */ - 0x48, 0x63, 0x0c, 0xb7, //0x000016e0 movslq (%rdi,%rsi,4), %rcx - 0x48, 0x01, 0xf9, //0x000016e4 addq %rdi, %rcx - 0xff, 0xe1, //0x000016e7 jmpq *%rcx - //0x000016e9 LBB0_282 - 0x49, 0x83, 0xfe, 0xff, //0x000016e9 cmpq $-1, %r14 - 0x0f, 0x85, 0x13, 0x15, 0x00, 0x00, //0x000016ed jne LBB0_465 - 0x4d, 0x8d, 0x34, 0x1f, //0x000016f3 leaq (%r15,%rbx), %r14 - 0xe9, 0xb4, 0xff, 0xff, 0xff, //0x000016f7 jmp LBB0_278 - //0x000016fc LBB0_284 - 0x83, 0xf9, 0x65, //0x000016fc cmpl $101, %ecx - 0x0f, 0x85, 0xa3, 0x0e, 0x00, 0x00, //0x000016ff jne LBB0_412 - //0x00001705 LBB0_285 - 0x49, 0x83, 0xfa, 0xff, //0x00001705 cmpq $-1, %r10 - 0x0f, 0x85, 0xf7, 0x14, 0x00, 0x00, //0x00001709 jne LBB0_465 - 0x4d, 0x8d, 0x14, 0x1f, //0x0000170f leaq (%r15,%rbx), %r10 - 0xe9, 0x98, 0xff, 0xff, 0xff, //0x00001713 jmp LBB0_278 - //0x00001718 LBB0_287 - 0x49, 0x8b, 0x0e, //0x00001718 movq (%r14), %rcx - 0x48, 0x8b, 0x55, 0xa8, //0x0000171b movq $-88(%rbp), %rdx - 0x48, 0x8b, 0x52, 0x08, //0x0000171f movq $8(%rdx), %rdx - 0x48, 0x8d, 0x72, 0xfd, //0x00001723 leaq $-3(%rdx), %rsi - 0x48, 0x39, 0xf1, //0x00001727 cmpq %rsi, %rcx - 0x0f, 0x87, 0x4e, 0x23, 0x00, 0x00, //0x0000172a ja LBB0_617 - 0x48, 0x8d, 0x41, 0xff, //0x00001730 leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x00001734 cmpl $1819047278, $-1(%r12,%rcx) - 0x0f, 0x84, 0x60, 0x00, 0x00, 0x00, //0x0000173d je LBB0_298 - 0xe9, 0x07, 0x24, 0x00, 0x00, //0x00001743 jmp LBB0_289 - //0x00001748 LBB0_293 - 0xf6, 0x45, 0x98, 0x40, //0x00001748 testb $64, $-104(%rbp) - 0x0f, 0x85, 0x62, 0x07, 0x00, 0x00, //0x0000174c jne LBB0_356 - 0x49, 0x8b, 0x45, 0x00, //0x00001752 movq (%r13), %rax - 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00001756 cmpq $4095, %rax - 0x0f, 0x8f, 0x8a, 0x22, 0x00, 0x00, //0x0000175c jg LBB0_634 - 0x48, 0x8d, 0x48, 0x01, //0x00001762 leaq $1(%rax), %rcx - 0x49, 0x89, 0x4d, 0x00, //0x00001766 movq %rcx, (%r13) - 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x06, 0x00, 0x00, 0x00, //0x0000176a movq $6, $8(%r13,%rax,8) - 0xe9, 0x48, 0xea, 0xff, 0xff, //0x00001773 jmp LBB0_4 - //0x00001778 LBB0_296 - 0x49, 0x8b, 0x0e, //0x00001778 movq (%r14), %rcx - 0x48, 0x8b, 0x55, 0xa8, //0x0000177b movq $-88(%rbp), %rdx - 0x48, 0x8b, 0x52, 0x08, //0x0000177f movq $8(%rdx), %rdx - 0x48, 0x8d, 0x72, 0xfd, //0x00001783 leaq $-3(%rdx), %rsi - 0x48, 0x39, 0xf1, //0x00001787 cmpq %rsi, %rcx - 0x0f, 0x87, 0xee, 0x22, 0x00, 0x00, //0x0000178a ja LBB0_617 - 0x48, 0x8d, 0x41, 0xff, //0x00001790 leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00001794 cmpl $1702195828, $-1(%r12,%rcx) - 0x0f, 0x85, 0x65, 0x23, 0x00, 0x00, //0x0000179d jne LBB0_627 - //0x000017a3 LBB0_298 - 0x48, 0x8d, 0x51, 0x03, //0x000017a3 leaq $3(%rcx), %rdx - 0x49, 0x89, 0x16, //0x000017a7 movq %rdx, (%r14) - 0x48, 0x85, 0xc9, //0x000017aa testq %rcx, %rcx - 0x0f, 0x8f, 0x0d, 0xea, 0xff, 0xff, //0x000017ad jg LBB0_4 - 0xe9, 0x8f, 0x22, 0x00, 0x00, //0x000017b3 jmp LBB0_638 - //0x000017b8 LBB0_299 - 0x4c, 0x89, 0xc1, //0x000017b8 movq %r8, %rcx - 0x4c, 0x09, 0xf9, //0x000017bb orq %r15, %rcx - 0x0f, 0x99, 0xc1, //0x000017be setns %cl - 0x0f, 0x88, 0x9f, 0x0b, 0x00, 0x00, //0x000017c1 js LBB0_384 - 0x4d, 0x39, 0xf8, //0x000017c7 cmpq %r15, %r8 - 0x0f, 0x8c, 0x96, 0x0b, 0x00, 0x00, //0x000017ca jl LBB0_384 - 0x49, 0xf7, 0xd0, //0x000017d0 notq %r8 - 0x4d, 0x89, 0xc5, //0x000017d3 movq %r8, %r13 - 0xe9, 0x07, 0xea, 0xff, 0xff, //0x000017d6 jmp LBB0_2 - //0x000017db LBB0_302 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x000017db movl $64, %edx - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000017e0 movabsq $4294977024, %r11 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x4d, 0xe8, 0xff, 0xff, //0x000017ea movdqu $-6067(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x48, 0x39, 0xca, //0x000017f3 cmpq %rcx, %rdx - 0x0f, 0x82, 0xf0, 0x23, 0x00, 0x00, //0x000017f6 jb LBB0_640 - //0x000017fc LBB0_303 - 0x48, 0x01, 0xc8, //0x000017fc addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x000017ff addq $1, %rax - //0x00001803 LBB0_304 - 0x48, 0x85, 0xc0, //0x00001803 testq %rax, %rax - 0x0f, 0x88, 0x59, 0x22, 0x00, 0x00, //0x00001806 js LBB0_615 - 0x49, 0x89, 0x06, //0x0000180c movq %rax, (%r14) - 0x48, 0x8b, 0x45, 0xb0, //0x0000180f movq $-80(%rbp), %rax - 0x48, 0x85, 0xc0, //0x00001813 testq %rax, %rax - 0x0f, 0x8e, 0xdc, 0x21, 0x00, 0x00, //0x00001816 jle LBB0_606 - //0x0000181c LBB0_306 - 0x49, 0x8b, 0x45, 0x00, //0x0000181c movq (%r13), %rax - 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00001820 cmpq $4095, %rax - 0x0f, 0x8f, 0xc0, 0x21, 0x00, 0x00, //0x00001826 jg LBB0_634 - 0x48, 0x8d, 0x48, 0x01, //0x0000182c leaq $1(%rax), %rcx - 0x49, 0x89, 0x4d, 0x00, //0x00001830 movq %rcx, (%r13) - 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x04, 0x00, 0x00, 0x00, //0x00001834 movq $4, $8(%r13,%rax,8) - 0xe9, 0x7e, 0xe9, 0xff, 0xff, //0x0000183d jmp LBB0_4 - //0x00001842 LBB0_308 - 0x48, 0x8b, 0x55, 0xa8, //0x00001842 movq $-88(%rbp), %rdx - 0x48, 0x8b, 0x52, 0x08, //0x00001846 movq $8(%rdx), %rdx - 0x49, 0x8b, 0x0e, //0x0000184a movq (%r14), %rcx - 0x48, 0x29, 0xca, //0x0000184d subq %rcx, %rdx - 0x48, 0x89, 0x4d, 0xb0, //0x00001850 movq %rcx, $-80(%rbp) - 0x49, 0x01, 0xcc, //0x00001854 addq %rcx, %r12 - 0x45, 0x31, 0xc0, //0x00001857 xorl %r8d, %r8d - 0x45, 0x31, 0xd2, //0x0000185a xorl %r10d, %r10d - 0x45, 0x31, 0xc9, //0x0000185d xorl %r9d, %r9d - 0x45, 0x31, 0xf6, //0x00001860 xorl %r14d, %r14d - 0x48, 0x83, 0xfa, 0x40, //0x00001863 cmpq $64, %rdx - 0x48, 0x89, 0x55, 0xc0, //0x00001867 movq %rdx, $-64(%rbp) - 0x0f, 0x8d, 0x4c, 0x01, 0x00, 0x00, //0x0000186b jge LBB0_309 - //0x00001871 LBB0_318 - 0x48, 0x85, 0xd2, //0x00001871 testq %rdx, %rdx - 0x0f, 0x8e, 0xdd, 0x23, 0x00, 0x00, //0x00001874 jle LBB0_648 - 0x66, 0x0f, 0x6f, 0xf2, //0x0000187a movdqa %xmm2, %xmm6 - 0x66, 0x0f, 0xef, 0xd2, //0x0000187e pxor %xmm2, %xmm2 - 0xf3, 0x0f, 0x7f, 0x55, 0x80, //0x00001882 movdqu %xmm2, $-128(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001887 movdqu %xmm2, $-144(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x0000188f movdqu %xmm2, $-160(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001897 movdqu %xmm2, $-176(%rbp) - 0x4c, 0x89, 0xe7, //0x0000189f movq %r12, %rdi - 0x44, 0x89, 0xe1, //0x000018a2 movl %r12d, %ecx - 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x000018a5 andl $4095, %ecx - 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x000018ab cmpl $4033, %ecx - 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x000018b1 jb LBB0_322 - 0x48, 0x83, 0x7d, 0xc0, 0x20, //0x000018b7 cmpq $32, $-64(%rbp) - 0x0f, 0x82, 0x3b, 0x00, 0x00, 0x00, //0x000018bc jb LBB0_323 - 0x0f, 0x10, 0x1f, //0x000018c2 movups (%rdi), %xmm3 - 0x0f, 0x11, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x000018c5 movups %xmm3, $-176(%rbp) - 0xf3, 0x0f, 0x6f, 0x5f, 0x10, //0x000018cc movdqu $16(%rdi), %xmm3 - 0xf3, 0x0f, 0x7f, 0x9d, 0x60, 0xff, 0xff, 0xff, //0x000018d1 movdqu %xmm3, $-160(%rbp) - 0x48, 0x83, 0xc7, 0x20, //0x000018d9 addq $32, %rdi - 0x48, 0x8b, 0x4d, 0xc0, //0x000018dd movq $-64(%rbp), %rcx - 0x48, 0x8d, 0x71, 0xe0, //0x000018e1 leaq $-32(%rcx), %rsi - 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x000018e5 leaq $-144(%rbp), %rdx - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x000018ec jmp LBB0_324 - //0x000018f1 LBB0_322 - 0x66, 0x0f, 0x6f, 0xd6, //0x000018f1 movdqa %xmm6, %xmm2 - 0x49, 0x89, 0xfc, //0x000018f5 movq %rdi, %r12 - 0xe9, 0xc0, 0x00, 0x00, 0x00, //0x000018f8 jmp LBB0_309 - //0x000018fd LBB0_323 - 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x000018fd leaq $-176(%rbp), %rdx - 0x48, 0x8b, 0x75, 0xc0, //0x00001904 movq $-64(%rbp), %rsi - //0x00001908 LBB0_324 - 0x48, 0x83, 0xfe, 0x10, //0x00001908 cmpq $16, %rsi - 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x0000190c jb LBB0_325 - 0xf3, 0x0f, 0x6f, 0x1f, //0x00001912 movdqu (%rdi), %xmm3 - 0xf3, 0x0f, 0x7f, 0x1a, //0x00001916 movdqu %xmm3, (%rdx) - 0x48, 0x83, 0xc7, 0x10, //0x0000191a addq $16, %rdi - 0x48, 0x83, 0xc2, 0x10, //0x0000191e addq $16, %rdx - 0x48, 0x83, 0xc6, 0xf0, //0x00001922 addq $-16, %rsi - 0x48, 0x83, 0xfe, 0x08, //0x00001926 cmpq $8, %rsi - 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x0000192a jae LBB0_332 - //0x00001930 LBB0_326 - 0x48, 0x83, 0xfe, 0x04, //0x00001930 cmpq $4, %rsi - 0x0f, 0x8c, 0x45, 0x00, 0x00, 0x00, //0x00001934 jl LBB0_327 - //0x0000193a LBB0_333 - 0x8b, 0x0f, //0x0000193a movl (%rdi), %ecx - 0x89, 0x0a, //0x0000193c movl %ecx, (%rdx) - 0x48, 0x83, 0xc7, 0x04, //0x0000193e addq $4, %rdi - 0x48, 0x83, 0xc2, 0x04, //0x00001942 addq $4, %rdx - 0x48, 0x83, 0xc6, 0xfc, //0x00001946 addq $-4, %rsi - 0x48, 0x83, 0xfe, 0x02, //0x0000194a cmpq $2, %rsi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x0000194e jae LBB0_328 - 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00001954 jmp LBB0_329 - //0x00001959 LBB0_325 - 0x48, 0x83, 0xfe, 0x08, //0x00001959 cmpq $8, %rsi - 0x0f, 0x82, 0xcd, 0xff, 0xff, 0xff, //0x0000195d jb LBB0_326 - //0x00001963 LBB0_332 - 0x48, 0x8b, 0x0f, //0x00001963 movq (%rdi), %rcx - 0x48, 0x89, 0x0a, //0x00001966 movq %rcx, (%rdx) - 0x48, 0x83, 0xc7, 0x08, //0x00001969 addq $8, %rdi - 0x48, 0x83, 0xc2, 0x08, //0x0000196d addq $8, %rdx - 0x48, 0x83, 0xc6, 0xf8, //0x00001971 addq $-8, %rsi - 0x48, 0x83, 0xfe, 0x04, //0x00001975 cmpq $4, %rsi - 0x0f, 0x8d, 0xbb, 0xff, 0xff, 0xff, //0x00001979 jge LBB0_333 - //0x0000197f LBB0_327 - 0x48, 0x83, 0xfe, 0x02, //0x0000197f cmpq $2, %rsi - 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00001983 jb LBB0_329 - //0x00001989 LBB0_328 - 0x0f, 0xb7, 0x0f, //0x00001989 movzwl (%rdi), %ecx - 0x66, 0x89, 0x0a, //0x0000198c movw %cx, (%rdx) - 0x48, 0x83, 0xc7, 0x02, //0x0000198f addq $2, %rdi - 0x48, 0x83, 0xc2, 0x02, //0x00001993 addq $2, %rdx - 0x48, 0x83, 0xc6, 0xfe, //0x00001997 addq $-2, %rsi - //0x0000199b LBB0_329 - 0x48, 0x89, 0xf9, //0x0000199b movq %rdi, %rcx - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x0000199e leaq $-176(%rbp), %r12 - 0x48, 0x85, 0xf6, //0x000019a5 testq %rsi, %rsi - 0x66, 0x0f, 0x6f, 0xd6, //0x000019a8 movdqa %xmm6, %xmm2 - 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x000019ac je LBB0_309 - 0x8a, 0x09, //0x000019b2 movb (%rcx), %cl - 0x88, 0x0a, //0x000019b4 movb %cl, (%rdx) - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x000019b6 leaq $-176(%rbp), %r12 - //0x000019bd LBB0_309 - 0x66, 0x44, 0x0f, 0x6f, 0xc2, //0x000019bd movdqa %xmm2, %xmm8 - 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x000019c2 movdqu (%r12), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x10, //0x000019c8 movdqu $16(%r12), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x20, //0x000019cf movdqu $32(%r12), %xmm6 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x30, //0x000019d6 movdqu $48(%r12), %xmm5 - 0x66, 0x0f, 0x6f, 0xdc, //0x000019dd movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x000019e1 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x000019e5 pmovmskb %xmm3, %edx - 0x66, 0x0f, 0x6f, 0xdf, //0x000019e9 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x000019ed pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x000019f1 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xde, //0x000019f5 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x000019f9 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x000019fd pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdd, //0x00001a01 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00001a05 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00001a09 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe7, 0x30, //0x00001a0d shlq $48, %rdi - 0x48, 0xc1, 0xe6, 0x20, //0x00001a11 shlq $32, %rsi - 0x48, 0x09, 0xfe, //0x00001a15 orq %rdi, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x00001a18 shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x00001a1c orq %rsi, %rcx - 0x48, 0x09, 0xca, //0x00001a1f orq %rcx, %rdx - 0x48, 0x89, 0xd1, //0x00001a22 movq %rdx, %rcx - 0x66, 0x45, 0x0f, 0x6f, 0xee, //0x00001a25 movdqa %xmm14, %xmm13 - 0x4c, 0x09, 0xd1, //0x00001a2a orq %r10, %rcx - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001a2d jne LBB0_311 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001a33 movq $-1, %rdx - 0x45, 0x31, 0xd2, //0x00001a3a xorl %r10d, %r10d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001a3d jmp LBB0_312 - //0x00001a42 LBB0_311 - 0x4c, 0x89, 0xd1, //0x00001a42 movq %r10, %rcx - 0x48, 0xf7, 0xd1, //0x00001a45 notq %rcx - 0x48, 0x21, 0xd1, //0x00001a48 andq %rdx, %rcx - 0x4c, 0x8d, 0x1c, 0x09, //0x00001a4b leaq (%rcx,%rcx), %r11 - 0x4d, 0x09, 0xd3, //0x00001a4f orq %r10, %r11 - 0x4c, 0x89, 0xdf, //0x00001a52 movq %r11, %rdi - 0x48, 0xf7, 0xd7, //0x00001a55 notq %rdi - 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001a58 movabsq $-6148914691236517206, %rsi - 0x48, 0x21, 0xf2, //0x00001a62 andq %rsi, %rdx - 0x48, 0x21, 0xfa, //0x00001a65 andq %rdi, %rdx - 0x45, 0x31, 0xd2, //0x00001a68 xorl %r10d, %r10d - 0x48, 0x01, 0xca, //0x00001a6b addq %rcx, %rdx - 0x41, 0x0f, 0x92, 0xc2, //0x00001a6e setb %r10b - 0x48, 0x01, 0xd2, //0x00001a72 addq %rdx, %rdx - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001a75 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xca, //0x00001a7f xorq %rcx, %rdx - 0x4c, 0x21, 0xda, //0x00001a82 andq %r11, %rdx - 0x48, 0xf7, 0xd2, //0x00001a85 notq %rdx - //0x00001a88 LBB0_312 - 0x66, 0x0f, 0x6f, 0xdd, //0x00001a88 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001a8c pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001a90 pmovmskb %xmm3, %ecx - 0x48, 0xc1, 0xe1, 0x30, //0x00001a94 shlq $48, %rcx - 0x66, 0x0f, 0x6f, 0xde, //0x00001a98 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001a9c pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001aa0 pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x20, //0x00001aa4 shlq $32, %rsi - 0x48, 0x09, 0xce, //0x00001aa8 orq %rcx, %rsi - 0x66, 0x0f, 0x6f, 0xdf, //0x00001aab movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001aaf pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001ab3 pmovmskb %xmm3, %ecx - 0x48, 0xc1, 0xe1, 0x10, //0x00001ab7 shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x00001abb orq %rsi, %rcx - 0x66, 0x0f, 0x6f, 0xdc, //0x00001abe movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001ac2 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001ac6 pmovmskb %xmm3, %esi - 0x48, 0x09, 0xce, //0x00001aca orq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00001acd andq %rdx, %rsi - 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x00001ad0 movq %rsi, %xmm3 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xda, 0x00, //0x00001ad5 pclmulqdq $0, %xmm10, %xmm3 - 0x66, 0x49, 0x0f, 0x7e, 0xdb, //0x00001adc movq %xmm3, %r11 - 0x4d, 0x31, 0xc3, //0x00001ae1 xorq %r8, %r11 - 0x66, 0x0f, 0x6f, 0xdc, //0x00001ae4 movdqa %xmm4, %xmm3 - 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x6f, 0xe5, 0xff, 0xff, //0x00001ae8 movdqu $-6801(%rip), %xmm11 /* LCPI0_6+0(%rip) */ - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001af1 pcmpeqb %xmm11, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00001af6 pmovmskb %xmm3, %r13d - 0x66, 0x0f, 0x6f, 0xdf, //0x00001afb movdqa %xmm7, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001aff pcmpeqb %xmm11, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001b04 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xde, //0x00001b08 movdqa %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001b0c pcmpeqb %xmm11, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x00001b11 pmovmskb %xmm3, %edx - 0x66, 0x0f, 0x6f, 0xdd, //0x00001b15 movdqa %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001b19 pcmpeqb %xmm11, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001b1e pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x30, //0x00001b22 shlq $48, %rsi - 0x48, 0xc1, 0xe2, 0x20, //0x00001b26 shlq $32, %rdx - 0x48, 0x09, 0xf2, //0x00001b2a orq %rsi, %rdx - 0x48, 0xc1, 0xe1, 0x10, //0x00001b2d shlq $16, %rcx - 0x48, 0x09, 0xd1, //0x00001b31 orq %rdx, %rcx - 0x49, 0x09, 0xcd, //0x00001b34 orq %rcx, %r13 - 0x4d, 0x89, 0xd8, //0x00001b37 movq %r11, %r8 - 0x49, 0xf7, 0xd0, //0x00001b3a notq %r8 - 0x4d, 0x21, 0xc5, //0x00001b3d andq %r8, %r13 - 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001b40 movdqa %xmm8, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xe0, //0x00001b45 pcmpeqb %xmm8, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x00001b4a pmovmskb %xmm4, %edx - 0x66, 0x41, 0x0f, 0x74, 0xf8, //0x00001b4e pcmpeqb %xmm8, %xmm7 - 0x66, 0x0f, 0xd7, 0xf7, //0x00001b53 pmovmskb %xmm7, %esi - 0x66, 0x41, 0x0f, 0x74, 0xf0, //0x00001b57 pcmpeqb %xmm8, %xmm6 - 0x66, 0x0f, 0xd7, 0xce, //0x00001b5c pmovmskb %xmm6, %ecx - 0x66, 0x41, 0x0f, 0x74, 0xe8, //0x00001b60 pcmpeqb %xmm8, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xfd, //0x00001b65 pmovmskb %xmm5, %r15d - 0x49, 0xc1, 0xe7, 0x30, //0x00001b6a shlq $48, %r15 - 0x48, 0xc1, 0xe1, 0x20, //0x00001b6e shlq $32, %rcx - 0x4c, 0x09, 0xf9, //0x00001b72 orq %r15, %rcx - 0x48, 0xc1, 0xe6, 0x10, //0x00001b75 shlq $16, %rsi - 0x48, 0x09, 0xce, //0x00001b79 orq %rcx, %rsi - 0x48, 0x09, 0xf2, //0x00001b7c orq %rsi, %rdx - 0x66, 0x45, 0x0f, 0x6f, 0xf5, //0x00001b7f movdqa %xmm13, %xmm14 - 0x4c, 0x21, 0xc2, //0x00001b84 andq %r8, %rdx - 0x0f, 0x84, 0xaa, 0x00, 0x00, 0x00, //0x00001b87 je LBB0_316 - 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x5a, 0xe5, 0xff, 0xff, //0x00001b8d movdqu $-6822(%rip), %xmm11 /* LCPI0_15+0(%rip) */ - 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001b96 movdqa %xmm8, %xmm2 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x9c, 0xe4, 0xff, 0xff, //0x00001b9b movdqu $-7012(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001ba4 movabsq $3689348814741910323, %r8 - 0xf3, 0x44, 0x0f, 0x6f, 0x05, 0x99, 0xe4, 0xff, 0xff, //0x00001bae movdqu $-7015(%rip), %xmm8 /* LCPI0_5+0(%rip) */ - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001bb7 .p2align 4, 0x90 - //0x00001bc0 LBB0_314 - 0x48, 0x8d, 0x7a, 0xff, //0x00001bc0 leaq $-1(%rdx), %rdi - 0x48, 0x89, 0xf9, //0x00001bc4 movq %rdi, %rcx - 0x4c, 0x21, 0xe9, //0x00001bc7 andq %r13, %rcx - 0x48, 0x89, 0xce, //0x00001bca movq %rcx, %rsi - 0x48, 0xd1, 0xee, //0x00001bcd shrq %rsi - 0x48, 0xbb, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001bd0 movabsq $6148914691236517205, %rbx - 0x48, 0x21, 0xde, //0x00001bda andq %rbx, %rsi - 0x48, 0x29, 0xf1, //0x00001bdd subq %rsi, %rcx - 0x48, 0x89, 0xce, //0x00001be0 movq %rcx, %rsi - 0x4c, 0x21, 0xc6, //0x00001be3 andq %r8, %rsi - 0x48, 0xc1, 0xe9, 0x02, //0x00001be6 shrq $2, %rcx - 0x4c, 0x21, 0xc1, //0x00001bea andq %r8, %rcx - 0x48, 0x01, 0xf1, //0x00001bed addq %rsi, %rcx - 0x48, 0x89, 0xce, //0x00001bf0 movq %rcx, %rsi - 0x48, 0xc1, 0xee, 0x04, //0x00001bf3 shrq $4, %rsi - 0x48, 0x01, 0xce, //0x00001bf7 addq %rcx, %rsi - 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001bfa movabsq $1085102592571150095, %rcx - 0x48, 0x21, 0xce, //0x00001c04 andq %rcx, %rsi - 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00001c07 movabsq $72340172838076673, %rcx - 0x48, 0x0f, 0xaf, 0xf1, //0x00001c11 imulq %rcx, %rsi - 0x48, 0xc1, 0xee, 0x38, //0x00001c15 shrq $56, %rsi - 0x4c, 0x01, 0xce, //0x00001c19 addq %r9, %rsi - 0x4c, 0x39, 0xf6, //0x00001c1c cmpq %r14, %rsi - 0x0f, 0x86, 0xd4, 0x06, 0x00, 0x00, //0x00001c1f jbe LBB0_382 - 0x49, 0x83, 0xc6, 0x01, //0x00001c25 addq $1, %r14 - 0x48, 0x21, 0xfa, //0x00001c29 andq %rdi, %rdx - 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x00001c2c jne LBB0_314 - 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00001c32 jmp LBB0_317 - //0x00001c37 LBB0_316 - 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001c37 movdqa %xmm8, %xmm2 - 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001c3c movabsq $3689348814741910323, %r8 - //0x00001c46 LBB0_317 - 0x49, 0xc1, 0xfb, 0x3f, //0x00001c46 sarq $63, %r11 - 0x4c, 0x89, 0xe9, //0x00001c4a movq %r13, %rcx - 0x48, 0xd1, 0xe9, //0x00001c4d shrq %rcx - 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001c50 movabsq $6148914691236517205, %rdx - 0x48, 0x21, 0xd1, //0x00001c5a andq %rdx, %rcx - 0x49, 0x29, 0xcd, //0x00001c5d subq %rcx, %r13 - 0x4c, 0x89, 0xe9, //0x00001c60 movq %r13, %rcx - 0x4c, 0x21, 0xc1, //0x00001c63 andq %r8, %rcx - 0x49, 0xc1, 0xed, 0x02, //0x00001c66 shrq $2, %r13 - 0x4d, 0x21, 0xc5, //0x00001c6a andq %r8, %r13 - 0x49, 0x01, 0xcd, //0x00001c6d addq %rcx, %r13 - 0x4c, 0x89, 0xe9, //0x00001c70 movq %r13, %rcx - 0x48, 0xc1, 0xe9, 0x04, //0x00001c73 shrq $4, %rcx - 0x4c, 0x01, 0xe9, //0x00001c77 addq %r13, %rcx - 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001c7a movabsq $1085102592571150095, %rdx - 0x48, 0x21, 0xd1, //0x00001c84 andq %rdx, %rcx - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00001c87 movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xca, //0x00001c91 imulq %rdx, %rcx - 0x48, 0xc1, 0xe9, 0x38, //0x00001c95 shrq $56, %rcx - 0x49, 0x01, 0xc9, //0x00001c99 addq %rcx, %r9 - 0x49, 0x83, 0xc4, 0x40, //0x00001c9c addq $64, %r12 - 0x48, 0x8b, 0x55, 0xc0, //0x00001ca0 movq $-64(%rbp), %rdx - 0x48, 0x83, 0xc2, 0xc0, //0x00001ca4 addq $-64, %rdx - 0x4d, 0x89, 0xd8, //0x00001ca8 movq %r11, %r8 - 0x48, 0x83, 0xfa, 0x40, //0x00001cab cmpq $64, %rdx - 0x48, 0x89, 0x55, 0xc0, //0x00001caf movq %rdx, $-64(%rbp) - 0x0f, 0x8d, 0x04, 0xfd, 0xff, 0xff, //0x00001cb3 jge LBB0_309 - 0xe9, 0xb3, 0xfb, 0xff, 0xff, //0x00001cb9 jmp LBB0_318 - //0x00001cbe LBB0_334 - 0x48, 0x8b, 0x4d, 0xa8, //0x00001cbe movq $-88(%rbp), %rcx - 0x4c, 0x8b, 0x49, 0x08, //0x00001cc2 movq $8(%rcx), %r9 - 0x4d, 0x8b, 0x06, //0x00001cc6 movq (%r14), %r8 - 0x4f, 0x8d, 0x14, 0x04, //0x00001cc9 leaq (%r12,%r8), %r10 - 0x4d, 0x29, 0xc1, //0x00001ccd subq %r8, %r9 - 0x49, 0x83, 0xf9, 0x20, //0x00001cd0 cmpq $32, %r9 - 0x0f, 0x8c, 0xdb, 0x00, 0x00, 0x00, //0x00001cd4 jl LBB0_343 - 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x00001cda movl $32, %r14d - 0x31, 0xd2, //0x00001ce0 xorl %edx, %edx - 0x45, 0x31, 0xdb, //0x00001ce2 xorl %r11d, %r11d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001ce5 .p2align 4, 0x90 - //0x00001cf0 LBB0_336 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x12, //0x00001cf0 movdqu (%r10,%rdx), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x12, 0x10, //0x00001cf6 movdqu $16(%r10,%rdx), %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x00001cfd movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00001d01 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00001d05 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x6f, 0xec, //0x00001d09 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00001d0d pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x00001d11 pmovmskb %xmm5, %edi - 0x48, 0xc1, 0xe7, 0x10, //0x00001d15 shlq $16, %rdi - 0x48, 0x09, 0xf7, //0x00001d19 orq %rsi, %rdi - 0x66, 0x0f, 0x74, 0xd9, //0x00001d1c pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001d20 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x74, 0xe1, //0x00001d24 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xf4, //0x00001d28 pmovmskb %xmm4, %esi - 0x48, 0xc1, 0xe6, 0x10, //0x00001d2c shlq $16, %rsi - 0x48, 0x09, 0xce, //0x00001d30 orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00001d33 movq %rsi, %rcx - 0x4c, 0x09, 0xd9, //0x00001d36 orq %r11, %rcx - 0x0f, 0x84, 0x41, 0x00, 0x00, 0x00, //0x00001d39 je LBB0_338 - 0x44, 0x89, 0xd9, //0x00001d3f movl %r11d, %ecx - 0xf7, 0xd1, //0x00001d42 notl %ecx - 0x21, 0xf1, //0x00001d44 andl %esi, %ecx - 0x44, 0x8d, 0x3c, 0x09, //0x00001d46 leal (%rcx,%rcx), %r15d - 0x45, 0x09, 0xdf, //0x00001d4a orl %r11d, %r15d - 0x44, 0x89, 0xfb, //0x00001d4d movl %r15d, %ebx - 0xf7, 0xd3, //0x00001d50 notl %ebx - 0x21, 0xf3, //0x00001d52 andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001d54 andl $-1431655766, %ebx - 0x45, 0x31, 0xdb, //0x00001d5a xorl %r11d, %r11d - 0x01, 0xcb, //0x00001d5d addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc3, //0x00001d5f setb %r11b - 0x01, 0xdb, //0x00001d63 addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00001d65 xorl $1431655765, %ebx - 0x44, 0x21, 0xfb, //0x00001d6b andl %r15d, %ebx - 0xf7, 0xd3, //0x00001d6e notl %ebx - 0x21, 0xdf, //0x00001d70 andl %ebx, %edi - 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x00001d72 jmp LBB0_339 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001d77 .p2align 4, 0x90 - //0x00001d80 LBB0_338 - 0x45, 0x31, 0xdb, //0x00001d80 xorl %r11d, %r11d - //0x00001d83 LBB0_339 - 0x48, 0x85, 0xff, //0x00001d83 testq %rdi, %rdi - 0x0f, 0x85, 0xe5, 0xed, 0xff, 0xff, //0x00001d86 jne LBB0_129 - 0x48, 0x83, 0xc2, 0x20, //0x00001d8c addq $32, %rdx - 0x4b, 0x8d, 0x0c, 0x31, //0x00001d90 leaq (%r9,%r14), %rcx - 0x48, 0x83, 0xc1, 0xe0, //0x00001d94 addq $-32, %rcx - 0x49, 0x83, 0xc6, 0xe0, //0x00001d98 addq $-32, %r14 - 0x48, 0x83, 0xf9, 0x3f, //0x00001d9c cmpq $63, %rcx - 0x0f, 0x8f, 0x4a, 0xff, 0xff, 0xff, //0x00001da0 jg LBB0_336 - 0x4d, 0x85, 0xdb, //0x00001da6 testq %r11, %r11 - 0x0f, 0x85, 0x4d, 0x19, 0x00, 0x00, //0x00001da9 jne LBB0_570 - 0x49, 0x01, 0xd2, //0x00001daf addq %rdx, %r10 - 0x49, 0x29, 0xd1, //0x00001db2 subq %rdx, %r9 - //0x00001db5 LBB0_343 - 0x4c, 0x8b, 0x75, 0xd0, //0x00001db5 movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001db9 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x00001dc3 testq %r9, %r9 - 0x0f, 0x8f, 0x8e, 0x19, 0x00, 0x00, //0x00001dc6 jg LBB0_574 - 0xe9, 0x76, 0x1c, 0x00, 0x00, //0x00001dcc jmp LBB0_638 - //0x00001dd1 LBB0_344 - 0x48, 0x89, 0xfa, //0x00001dd1 movq %rdi, %rdx - 0x48, 0x29, 0xc2, //0x00001dd4 subq %rax, %rdx - 0x48, 0x83, 0xfa, 0x10, //0x00001dd7 cmpq $16, %rdx - 0x0f, 0x82, 0x3c, 0x12, 0x00, 0x00, //0x00001ddb jb LBB0_498 - 0x48, 0x89, 0xc2, //0x00001de1 movq %rax, %rdx - 0x48, 0xf7, 0xda, //0x00001de4 negq %rdx - 0x48, 0x89, 0xc1, //0x00001de7 movq %rax, %rcx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001dea .p2align 4, 0x90 - //0x00001df0 LBB0_346 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x0c, //0x00001df0 movdqu (%r12,%rcx), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x00001df6 movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0x74, 0xe6, //0x00001dfa pcmpeqb %xmm14, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xd9, //0x00001dff pand %xmm9, %xmm3 - 0x66, 0x0f, 0x74, 0xda, //0x00001e04 pcmpeqb %xmm2, %xmm3 - 0x66, 0x0f, 0xeb, 0xdc, //0x00001e08 por %xmm4, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001e0c pmovmskb %xmm3, %esi - 0x85, 0xf6, //0x00001e10 testl %esi, %esi - 0x0f, 0x85, 0x33, 0x05, 0x00, 0x00, //0x00001e12 jne LBB0_605 - 0x48, 0x83, 0xc1, 0x10, //0x00001e18 addq $16, %rcx - 0x48, 0x8d, 0x34, 0x17, //0x00001e1c leaq (%rdi,%rdx), %rsi - 0x48, 0x83, 0xc6, 0xf0, //0x00001e20 addq $-16, %rsi - 0x48, 0x83, 0xc2, 0xf0, //0x00001e24 addq $-16, %rdx - 0x48, 0x83, 0xfe, 0x0f, //0x00001e28 cmpq $15, %rsi - 0x0f, 0x87, 0xbe, 0xff, 0xff, 0xff, //0x00001e2c ja LBB0_346 - 0x4c, 0x89, 0xe1, //0x00001e32 movq %r12, %rcx - 0x48, 0x29, 0xd1, //0x00001e35 subq %rdx, %rcx - 0x48, 0x01, 0xd7, //0x00001e38 addq %rdx, %rdi - 0x48, 0x89, 0xfa, //0x00001e3b movq %rdi, %rdx - 0x48, 0x85, 0xd2, //0x00001e3e testq %rdx, %rdx - 0x0f, 0x84, 0xe3, 0x11, 0x00, 0x00, //0x00001e41 je LBB0_499 - //0x00001e47 LBB0_349 - 0x48, 0x8d, 0x3c, 0x11, //0x00001e47 leaq (%rcx,%rdx), %rdi - 0x31, 0xf6, //0x00001e4b xorl %esi, %esi - //0x00001e4d LBB0_350 - 0x0f, 0xb6, 0x1c, 0x31, //0x00001e4d movzbl (%rcx,%rsi), %ebx - 0x80, 0xfb, 0x2c, //0x00001e51 cmpb $44, %bl - 0x0f, 0x84, 0x81, 0x0d, 0x00, 0x00, //0x00001e54 je LBB0_462 - 0x80, 0xfb, 0x7d, //0x00001e5a cmpb $125, %bl - 0x0f, 0x84, 0x78, 0x0d, 0x00, 0x00, //0x00001e5d je LBB0_462 - 0x80, 0xfb, 0x5d, //0x00001e63 cmpb $93, %bl - 0x0f, 0x84, 0x6f, 0x0d, 0x00, 0x00, //0x00001e66 je LBB0_462 - 0x48, 0x83, 0xc6, 0x01, //0x00001e6c addq $1, %rsi - 0x48, 0x39, 0xf2, //0x00001e70 cmpq %rsi, %rdx - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x00001e73 jne LBB0_350 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00001e79 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00001e7e movdqa %xmm2, %xmm5 - 0x48, 0x89, 0xf9, //0x00001e82 movq %rdi, %rcx - //0x00001e85 LBB0_355 - 0x4c, 0x29, 0xe1, //0x00001e85 subq %r12, %rcx - 0x4c, 0x8b, 0x75, 0xd0, //0x00001e88 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00001e8c movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001e90 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x00001e9a movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00001e9e movdqa %xmm6, %xmm13 - 0x49, 0x89, 0x0e, //0x00001ea3 movq %rcx, (%r14) - 0x48, 0x85, 0xc0, //0x00001ea6 testq %rax, %rax - 0x0f, 0x8f, 0x11, 0xe3, 0xff, 0xff, //0x00001ea9 jg LBB0_4 - 0xe9, 0x44, 0x1b, 0x00, 0x00, //0x00001eaf jmp LBB0_606 - //0x00001eb4 LBB0_356 - 0x48, 0x8b, 0x55, 0xa8, //0x00001eb4 movq $-88(%rbp), %rdx - 0x48, 0x8b, 0x52, 0x08, //0x00001eb8 movq $8(%rdx), %rdx - 0x49, 0x8b, 0x0e, //0x00001ebc movq (%r14), %rcx - 0x48, 0x29, 0xca, //0x00001ebf subq %rcx, %rdx - 0x48, 0x89, 0x4d, 0xb0, //0x00001ec2 movq %rcx, $-80(%rbp) - 0x49, 0x01, 0xcc, //0x00001ec6 addq %rcx, %r12 - 0x45, 0x31, 0xc0, //0x00001ec9 xorl %r8d, %r8d - 0x45, 0x31, 0xd2, //0x00001ecc xorl %r10d, %r10d - 0x45, 0x31, 0xc9, //0x00001ecf xorl %r9d, %r9d - 0x45, 0x31, 0xf6, //0x00001ed2 xorl %r14d, %r14d - 0x48, 0x83, 0xfa, 0x40, //0x00001ed5 cmpq $64, %rdx - 0x48, 0x89, 0x55, 0xc0, //0x00001ed9 movq %rdx, $-64(%rbp) - 0x0f, 0x8d, 0x5b, 0x01, 0x00, 0x00, //0x00001edd jge LBB0_357 - //0x00001ee3 LBB0_366 - 0x48, 0x85, 0xd2, //0x00001ee3 testq %rdx, %rdx - 0x0f, 0x8e, 0x6b, 0x1d, 0x00, 0x00, //0x00001ee6 jle LBB0_648 - 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00001eec movdqa %xmm13, %xmm7 - 0x66, 0x0f, 0x6f, 0xf2, //0x00001ef1 movdqa %xmm2, %xmm6 - 0x66, 0x0f, 0xef, 0xd2, //0x00001ef5 pxor %xmm2, %xmm2 - 0xf3, 0x0f, 0x7f, 0x55, 0x80, //0x00001ef9 movdqu %xmm2, $-128(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001efe movdqu %xmm2, $-144(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x00001f06 movdqu %xmm2, $-160(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001f0e movdqu %xmm2, $-176(%rbp) - 0x4c, 0x89, 0xe7, //0x00001f16 movq %r12, %rdi - 0x44, 0x89, 0xe1, //0x00001f19 movl %r12d, %ecx - 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00001f1c andl $4095, %ecx - 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00001f22 cmpl $4033, %ecx - 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x00001f28 jb LBB0_370 - 0x48, 0x83, 0x7d, 0xc0, 0x20, //0x00001f2e cmpq $32, $-64(%rbp) - 0x0f, 0x82, 0x40, 0x00, 0x00, 0x00, //0x00001f33 jb LBB0_371 - 0x0f, 0x10, 0x1f, //0x00001f39 movups (%rdi), %xmm3 - 0x0f, 0x11, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x00001f3c movups %xmm3, $-176(%rbp) - 0xf3, 0x0f, 0x6f, 0x5f, 0x10, //0x00001f43 movdqu $16(%rdi), %xmm3 - 0xf3, 0x0f, 0x7f, 0x9d, 0x60, 0xff, 0xff, 0xff, //0x00001f48 movdqu %xmm3, $-160(%rbp) - 0x48, 0x83, 0xc7, 0x20, //0x00001f50 addq $32, %rdi - 0x48, 0x8b, 0x4d, 0xc0, //0x00001f54 movq $-64(%rbp), %rcx - 0x48, 0x8d, 0x71, 0xe0, //0x00001f58 leaq $-32(%rcx), %rsi - 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001f5c leaq $-144(%rbp), %rdx - 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x00001f63 jmp LBB0_372 - //0x00001f68 LBB0_370 - 0x66, 0x0f, 0x6f, 0xd6, //0x00001f68 movdqa %xmm6, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x00001f6c movdqa %xmm7, %xmm13 - 0x49, 0x89, 0xfc, //0x00001f71 movq %rdi, %r12 - 0xe9, 0xc5, 0x00, 0x00, 0x00, //0x00001f74 jmp LBB0_357 - //0x00001f79 LBB0_371 - 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001f79 leaq $-176(%rbp), %rdx - 0x48, 0x8b, 0x75, 0xc0, //0x00001f80 movq $-64(%rbp), %rsi - //0x00001f84 LBB0_372 - 0x48, 0x83, 0xfe, 0x10, //0x00001f84 cmpq $16, %rsi - 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x00001f88 jb LBB0_373 - 0xf3, 0x0f, 0x6f, 0x1f, //0x00001f8e movdqu (%rdi), %xmm3 - 0xf3, 0x0f, 0x7f, 0x1a, //0x00001f92 movdqu %xmm3, (%rdx) - 0x48, 0x83, 0xc7, 0x10, //0x00001f96 addq $16, %rdi - 0x48, 0x83, 0xc2, 0x10, //0x00001f9a addq $16, %rdx - 0x48, 0x83, 0xc6, 0xf0, //0x00001f9e addq $-16, %rsi - 0x48, 0x83, 0xfe, 0x08, //0x00001fa2 cmpq $8, %rsi - 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x00001fa6 jae LBB0_380 - //0x00001fac LBB0_374 - 0x48, 0x83, 0xfe, 0x04, //0x00001fac cmpq $4, %rsi - 0x0f, 0x8c, 0x45, 0x00, 0x00, 0x00, //0x00001fb0 jl LBB0_375 - //0x00001fb6 LBB0_381 - 0x8b, 0x0f, //0x00001fb6 movl (%rdi), %ecx - 0x89, 0x0a, //0x00001fb8 movl %ecx, (%rdx) - 0x48, 0x83, 0xc7, 0x04, //0x00001fba addq $4, %rdi - 0x48, 0x83, 0xc2, 0x04, //0x00001fbe addq $4, %rdx - 0x48, 0x83, 0xc6, 0xfc, //0x00001fc2 addq $-4, %rsi - 0x48, 0x83, 0xfe, 0x02, //0x00001fc6 cmpq $2, %rsi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001fca jae LBB0_376 - 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00001fd0 jmp LBB0_377 - //0x00001fd5 LBB0_373 - 0x48, 0x83, 0xfe, 0x08, //0x00001fd5 cmpq $8, %rsi - 0x0f, 0x82, 0xcd, 0xff, 0xff, 0xff, //0x00001fd9 jb LBB0_374 - //0x00001fdf LBB0_380 - 0x48, 0x8b, 0x0f, //0x00001fdf movq (%rdi), %rcx - 0x48, 0x89, 0x0a, //0x00001fe2 movq %rcx, (%rdx) - 0x48, 0x83, 0xc7, 0x08, //0x00001fe5 addq $8, %rdi - 0x48, 0x83, 0xc2, 0x08, //0x00001fe9 addq $8, %rdx - 0x48, 0x83, 0xc6, 0xf8, //0x00001fed addq $-8, %rsi - 0x48, 0x83, 0xfe, 0x04, //0x00001ff1 cmpq $4, %rsi - 0x0f, 0x8d, 0xbb, 0xff, 0xff, 0xff, //0x00001ff5 jge LBB0_381 - //0x00001ffb LBB0_375 - 0x48, 0x83, 0xfe, 0x02, //0x00001ffb cmpq $2, %rsi - 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00001fff jb LBB0_377 - //0x00002005 LBB0_376 - 0x0f, 0xb7, 0x0f, //0x00002005 movzwl (%rdi), %ecx - 0x66, 0x89, 0x0a, //0x00002008 movw %cx, (%rdx) - 0x48, 0x83, 0xc7, 0x02, //0x0000200b addq $2, %rdi - 0x48, 0x83, 0xc2, 0x02, //0x0000200f addq $2, %rdx - 0x48, 0x83, 0xc6, 0xfe, //0x00002013 addq $-2, %rsi - //0x00002017 LBB0_377 - 0x48, 0x89, 0xf9, //0x00002017 movq %rdi, %rcx - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x0000201a leaq $-176(%rbp), %r12 - 0x48, 0x85, 0xf6, //0x00002021 testq %rsi, %rsi - 0x66, 0x0f, 0x6f, 0xd6, //0x00002024 movdqa %xmm6, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x00002028 movdqa %xmm7, %xmm13 - 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x0000202d je LBB0_357 - 0x8a, 0x09, //0x00002033 movb (%rcx), %cl - 0x88, 0x0a, //0x00002035 movb %cl, (%rdx) - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00002037 leaq $-176(%rbp), %r12 - //0x0000203e LBB0_357 - 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x0000203e movdqu (%r12), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x10, //0x00002044 movdqu $16(%r12), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x20, //0x0000204b movdqu $32(%r12), %xmm6 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x30, //0x00002052 movdqu $48(%r12), %xmm5 - 0x66, 0x0f, 0x6f, 0xdc, //0x00002059 movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000205d pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x00002061 pmovmskb %xmm3, %edx - 0x66, 0x0f, 0x6f, 0xdf, //0x00002065 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002069 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x0000206d pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xde, //0x00002071 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002075 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002079 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdd, //0x0000207d movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002081 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00002085 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe7, 0x30, //0x00002089 shlq $48, %rdi - 0x48, 0xc1, 0xe6, 0x20, //0x0000208d shlq $32, %rsi - 0x48, 0x09, 0xfe, //0x00002091 orq %rdi, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x00002094 shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x00002098 orq %rsi, %rcx - 0x48, 0x09, 0xca, //0x0000209b orq %rcx, %rdx - 0x48, 0x89, 0xd1, //0x0000209e movq %rdx, %rcx - 0x4c, 0x09, 0xd1, //0x000020a1 orq %r10, %rcx - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x000020a4 jne LBB0_359 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000020aa movq $-1, %rdx - 0x45, 0x31, 0xd2, //0x000020b1 xorl %r10d, %r10d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x000020b4 jmp LBB0_360 - //0x000020b9 LBB0_359 - 0x4c, 0x89, 0xd1, //0x000020b9 movq %r10, %rcx - 0x48, 0xf7, 0xd1, //0x000020bc notq %rcx - 0x48, 0x21, 0xd1, //0x000020bf andq %rdx, %rcx - 0x4c, 0x8d, 0x1c, 0x09, //0x000020c2 leaq (%rcx,%rcx), %r11 - 0x4d, 0x09, 0xd3, //0x000020c6 orq %r10, %r11 - 0x4c, 0x89, 0xdf, //0x000020c9 movq %r11, %rdi - 0x48, 0xf7, 0xd7, //0x000020cc notq %rdi - 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000020cf movabsq $-6148914691236517206, %rsi - 0x48, 0x21, 0xf2, //0x000020d9 andq %rsi, %rdx - 0x48, 0x21, 0xfa, //0x000020dc andq %rdi, %rdx - 0x45, 0x31, 0xd2, //0x000020df xorl %r10d, %r10d - 0x48, 0x01, 0xca, //0x000020e2 addq %rcx, %rdx - 0x41, 0x0f, 0x92, 0xc2, //0x000020e5 setb %r10b - 0x48, 0x01, 0xd2, //0x000020e9 addq %rdx, %rdx - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000020ec movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xca, //0x000020f6 xorq %rcx, %rdx - 0x4c, 0x21, 0xda, //0x000020f9 andq %r11, %rdx - 0x48, 0xf7, 0xd2, //0x000020fc notq %rdx - //0x000020ff LBB0_360 - 0x66, 0x0f, 0x6f, 0xdd, //0x000020ff movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00002103 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00002107 pmovmskb %xmm3, %ecx - 0x48, 0xc1, 0xe1, 0x30, //0x0000210b shlq $48, %rcx - 0x66, 0x0f, 0x6f, 0xde, //0x0000210f movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00002113 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002117 pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x20, //0x0000211b shlq $32, %rsi - 0x48, 0x09, 0xce, //0x0000211f orq %rcx, %rsi - 0x66, 0x0f, 0x6f, 0xdf, //0x00002122 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00002126 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x0000212a pmovmskb %xmm3, %ecx - 0x48, 0xc1, 0xe1, 0x10, //0x0000212e shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x00002132 orq %rsi, %rcx - 0x66, 0x0f, 0x6f, 0xdc, //0x00002135 movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00002139 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x0000213d pmovmskb %xmm3, %esi - 0x48, 0x09, 0xce, //0x00002141 orq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00002144 andq %rdx, %rsi - 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x00002147 movq %rsi, %xmm3 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xda, 0x00, //0x0000214c pclmulqdq $0, %xmm10, %xmm3 - 0x66, 0x49, 0x0f, 0x7e, 0xdb, //0x00002153 movq %xmm3, %r11 - 0x4d, 0x31, 0xc3, //0x00002158 xorq %r8, %r11 - 0x66, 0x0f, 0x6f, 0xdc, //0x0000215b movdqa %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x0000215f pcmpeqb %xmm13, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00002164 pmovmskb %xmm3, %r13d - 0x66, 0x0f, 0x6f, 0xdf, //0x00002169 movdqa %xmm7, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x0000216d pcmpeqb %xmm13, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00002172 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xde, //0x00002176 movdqa %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x0000217a pcmpeqb %xmm13, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x0000217f pmovmskb %xmm3, %edx - 0x66, 0x0f, 0x6f, 0xdd, //0x00002183 movdqa %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00002187 pcmpeqb %xmm13, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x0000218c pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x30, //0x00002190 shlq $48, %rsi - 0x48, 0xc1, 0xe2, 0x20, //0x00002194 shlq $32, %rdx - 0x48, 0x09, 0xf2, //0x00002198 orq %rsi, %rdx - 0x48, 0xc1, 0xe1, 0x10, //0x0000219b shlq $16, %rcx - 0x48, 0x09, 0xd1, //0x0000219f orq %rdx, %rcx - 0x49, 0x09, 0xcd, //0x000021a2 orq %rcx, %r13 - 0x4d, 0x89, 0xd8, //0x000021a5 movq %r11, %r8 - 0x49, 0xf7, 0xd0, //0x000021a8 notq %r8 - 0x4d, 0x21, 0xc5, //0x000021ab andq %r8, %r13 - 0x66, 0x41, 0x0f, 0x74, 0xe0, //0x000021ae pcmpeqb %xmm8, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x000021b3 pmovmskb %xmm4, %edx - 0x66, 0x41, 0x0f, 0x74, 0xf8, //0x000021b7 pcmpeqb %xmm8, %xmm7 - 0x66, 0x0f, 0xd7, 0xf7, //0x000021bc pmovmskb %xmm7, %esi - 0x66, 0x41, 0x0f, 0x74, 0xf0, //0x000021c0 pcmpeqb %xmm8, %xmm6 - 0x66, 0x0f, 0xd7, 0xce, //0x000021c5 pmovmskb %xmm6, %ecx - 0x66, 0x41, 0x0f, 0x74, 0xe8, //0x000021c9 pcmpeqb %xmm8, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xfd, //0x000021ce pmovmskb %xmm5, %r15d - 0x49, 0xc1, 0xe7, 0x30, //0x000021d3 shlq $48, %r15 - 0x48, 0xc1, 0xe1, 0x20, //0x000021d7 shlq $32, %rcx - 0x4c, 0x09, 0xf9, //0x000021db orq %r15, %rcx - 0x48, 0xc1, 0xe6, 0x10, //0x000021de shlq $16, %rsi - 0x48, 0x09, 0xce, //0x000021e2 orq %rcx, %rsi - 0x48, 0x09, 0xf2, //0x000021e5 orq %rsi, %rdx - 0x4c, 0x21, 0xc2, //0x000021e8 andq %r8, %rdx - 0x0f, 0x84, 0x86, 0x00, 0x00, 0x00, //0x000021eb je LBB0_364 - 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x000021f1 movabsq $3689348814741910323, %r8 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x000021fb .p2align 4, 0x90 - //0x00002200 LBB0_362 - 0x48, 0x8d, 0x7a, 0xff, //0x00002200 leaq $-1(%rdx), %rdi - 0x48, 0x89, 0xf9, //0x00002204 movq %rdi, %rcx - 0x4c, 0x21, 0xe9, //0x00002207 andq %r13, %rcx - 0x48, 0x89, 0xce, //0x0000220a movq %rcx, %rsi - 0x48, 0xd1, 0xee, //0x0000220d shrq %rsi - 0x48, 0xbb, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002210 movabsq $6148914691236517205, %rbx - 0x48, 0x21, 0xde, //0x0000221a andq %rbx, %rsi - 0x48, 0x29, 0xf1, //0x0000221d subq %rsi, %rcx + 0x0f, 0x83, 0xc5, 0x02, 0x00, 0x00, //0x00000f9d jae LBB0_228 + 0xe9, 0xdf, 0x2c, 0x00, 0x00, //0x00000fa3 jmp LBB0_187 + //0x00000fa8 LBB0_188 + 0x41, 0x89, 0xc9, //0x00000fa8 movl %ecx, %r9d + 0x49, 0x01, 0xf9, //0x00000fab addq %rdi, %r9 + 0x4d, 0x01, 0xe9, //0x00000fae addq %r13, %r9 + 0xe9, 0x1c, 0x02, 0x00, 0x00, //0x00000fb1 jmp LBB0_217 + //0x00000fb6 LBB0_189 + 0x49, 0x89, 0xc2, //0x00000fb6 movq %rax, %r10 + 0x49, 0x29, 0xd2, //0x00000fb9 subq %rdx, %r10 + 0x0f, 0x84, 0xe1, 0x2c, 0x00, 0x00, //0x00000fbc je LBB0_658 + 0x4c, 0x89, 0x65, 0xb8, //0x00000fc2 movq %r12, $-72(%rbp) + 0x49, 0x83, 0xfa, 0x40, //0x00000fc6 cmpq $64, %r10 + 0x0f, 0x82, 0x15, 0x20, 0x00, 0x00, //0x00000fca jb LBB0_512 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000fd0 movq $-1, $-56(%rbp) + 0x48, 0x8b, 0x45, 0xc0, //0x00000fd8 movq $-64(%rbp), %rax + 0x45, 0x31, 0xe4, //0x00000fdc xorl %r12d, %r12d + 0x90, //0x00000fdf .p2align 4, 0x90 + //0x00000fe0 LBB0_192 + 0x48, 0x8b, 0x4d, 0xb8, //0x00000fe0 movq $-72(%rbp), %rcx + 0xf3, 0x44, 0x0f, 0x6f, 0x2c, 0x01, //0x00000fe4 movdqu (%rcx,%rax), %xmm13 + 0xf3, 0x0f, 0x6f, 0x74, 0x01, 0x10, //0x00000fea movdqu $16(%rcx,%rax), %xmm6 + 0xf3, 0x0f, 0x6f, 0x6c, 0x01, 0x20, //0x00000ff0 movdqu $32(%rcx,%rax), %xmm5 + 0xf3, 0x0f, 0x6f, 0x64, 0x01, 0x30, //0x00000ff6 movdqu $48(%rcx,%rax), %xmm4 + 0x66, 0x41, 0x0f, 0x6f, 0xdd, //0x00000ffc movdqa %xmm13, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001001 pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00001005 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x6f, 0xde, //0x0000100a movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000100e pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x00001012 pmovmskb %xmm3, %ebx + 0x66, 0x0f, 0x6f, 0xdd, //0x00001016 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000101a pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xf3, //0x0000101e pmovmskb %xmm3, %r14d + 0x66, 0x0f, 0x6f, 0xdc, //0x00001023 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001027 pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x0000102b pmovmskb %xmm3, %r15d + 0x66, 0x41, 0x0f, 0x6f, 0xdd, //0x00001030 movdqa %xmm13, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001035 pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00001039 pmovmskb %xmm3, %r13d + 0x66, 0x0f, 0x6f, 0xde, //0x0000103e movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001042 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001046 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xdd, //0x0000104a movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000104e pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00001052 pmovmskb %xmm3, %edi + 0x66, 0x0f, 0x6f, 0xdc, //0x00001056 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000105a pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xcb, //0x0000105e pmovmskb %xmm3, %r9d + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00001063 movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xde, //0x00001068 pcmpgtb %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xf2, //0x0000106c pcmpgtb %xmm10, %xmm6 + 0x66, 0x0f, 0xdb, 0xf3, //0x00001071 pand %xmm3, %xmm6 + 0x66, 0x0f, 0xd7, 0xf6, //0x00001075 pmovmskb %xmm6, %esi + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00001079 movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdd, //0x0000107e pcmpgtb %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xea, //0x00001082 pcmpgtb %xmm10, %xmm5 + 0x66, 0x0f, 0xdb, 0xeb, //0x00001087 pand %xmm3, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x0000108b pmovmskb %xmm5, %edx + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x0000108f movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00001094 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00001098 pcmpgtb %xmm10, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x0000109d pand %xmm3, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xc4, //0x000010a1 pmovmskb %xmm4, %r8d + 0x49, 0xc1, 0xe7, 0x30, //0x000010a6 shlq $48, %r15 + 0x49, 0xc1, 0xe6, 0x20, //0x000010aa shlq $32, %r14 + 0x4d, 0x09, 0xfe, //0x000010ae orq %r15, %r14 + 0x48, 0xc1, 0xe3, 0x10, //0x000010b1 shlq $16, %rbx + 0x4c, 0x09, 0xf3, //0x000010b5 orq %r14, %rbx + 0x49, 0x09, 0xdb, //0x000010b8 orq %rbx, %r11 + 0x49, 0xc1, 0xe1, 0x30, //0x000010bb shlq $48, %r9 + 0x48, 0xc1, 0xe7, 0x20, //0x000010bf shlq $32, %rdi + 0x4c, 0x09, 0xcf, //0x000010c3 orq %r9, %rdi + 0x48, 0xc1, 0xe1, 0x10, //0x000010c6 shlq $16, %rcx + 0x48, 0x09, 0xf9, //0x000010ca orq %rdi, %rcx + 0x49, 0xc1, 0xe0, 0x30, //0x000010cd shlq $48, %r8 + 0x48, 0xc1, 0xe2, 0x20, //0x000010d1 shlq $32, %rdx + 0x4c, 0x09, 0xc2, //0x000010d5 orq %r8, %rdx + 0x48, 0xc1, 0xe6, 0x10, //0x000010d8 shlq $16, %rsi + 0x48, 0x09, 0xd6, //0x000010dc orq %rdx, %rsi + 0x49, 0x09, 0xcd, //0x000010df orq %rcx, %r13 + 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x000010e2 jne LBB0_209 + 0x4d, 0x85, 0xe4, //0x000010e8 testq %r12, %r12 + 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x000010eb jne LBB0_211 + 0x45, 0x31, 0xe4, //0x000010f1 xorl %r12d, %r12d + 0x4c, 0x8b, 0x75, 0xd0, //0x000010f4 movq $-48(%rbp), %r14 + //0x000010f8 LBB0_195 + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x000010f8 movdqa %xmm12, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xdd, //0x000010fd pcmpgtb %xmm13, %xmm3 + 0x66, 0x45, 0x0f, 0x64, 0xea, //0x00001102 pcmpgtb %xmm10, %xmm13 + 0x66, 0x44, 0x0f, 0xdb, 0xeb, //0x00001107 pand %xmm3, %xmm13 + 0x66, 0x41, 0x0f, 0xd7, 0xcd, //0x0000110c pmovmskb %xmm13, %ecx + 0x48, 0x09, 0xce, //0x00001111 orq %rcx, %rsi + 0x4d, 0x85, 0xdb, //0x00001114 testq %r11, %r11 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00001117 movq $-80(%rbp), %r13 + 0x0f, 0x85, 0x91, 0x00, 0x00, 0x00, //0x0000111b jne LBB0_213 + 0x48, 0x85, 0xf6, //0x00001121 testq %rsi, %rsi + 0x0f, 0x85, 0xe7, 0x2a, 0x00, 0x00, //0x00001124 jne LBB0_645 + 0x49, 0x83, 0xc2, 0xc0, //0x0000112a addq $-64, %r10 + 0x48, 0x83, 0xc0, 0x40, //0x0000112e addq $64, %rax + 0x49, 0x83, 0xfa, 0x3f, //0x00001132 cmpq $63, %r10 + 0x0f, 0x87, 0xa4, 0xfe, 0xff, 0xff, //0x00001136 ja LBB0_192 + 0xe9, 0x27, 0x18, 0x00, 0x00, //0x0000113c jmp LBB0_198 + //0x00001141 LBB0_209 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00001141 cmpq $-1, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x00001146 movq $-48(%rbp), %r14 + 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x0000114a jne LBB0_212 + 0x49, 0x0f, 0xbc, 0xcd, //0x00001150 bsfq %r13, %rcx + 0x48, 0x01, 0xc1, //0x00001154 addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00001157 movq %rcx, $-56(%rbp) + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x0000115b jmp LBB0_212 + //0x00001160 LBB0_211 + 0x4c, 0x8b, 0x75, 0xd0, //0x00001160 movq $-48(%rbp), %r14 + //0x00001164 LBB0_212 + 0x4c, 0x89, 0xe1, //0x00001164 movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x00001167 notq %rcx + 0x4c, 0x21, 0xe9, //0x0000116a andq %r13, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x0000116d leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xe2, //0x00001171 orq %r12, %rdx + 0x48, 0x89, 0xd7, //0x00001174 movq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x00001177 notq %rdi + 0x4c, 0x21, 0xef, //0x0000117a andq %r13, %rdi + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000117d movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xdf, //0x00001187 andq %rbx, %rdi + 0x45, 0x31, 0xe4, //0x0000118a xorl %r12d, %r12d + 0x48, 0x01, 0xcf, //0x0000118d addq %rcx, %rdi + 0x41, 0x0f, 0x92, 0xc4, //0x00001190 setb %r12b + 0x48, 0x01, 0xff, //0x00001194 addq %rdi, %rdi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001197 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcf, //0x000011a1 xorq %rcx, %rdi + 0x48, 0x21, 0xd7, //0x000011a4 andq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x000011a7 notq %rdi + 0x49, 0x21, 0xfb, //0x000011aa andq %rdi, %r11 + 0xe9, 0x46, 0xff, 0xff, 0xff, //0x000011ad jmp LBB0_195 + //0x000011b2 LBB0_213 + 0x49, 0x0f, 0xbc, 0xcb, //0x000011b2 bsfq %r11, %rcx + 0x48, 0x85, 0xf6, //0x000011b6 testq %rsi, %rsi + 0x0f, 0x84, 0x0c, 0x06, 0x00, 0x00, //0x000011b9 je LBB0_310 + 0x48, 0x0f, 0xbc, 0xd6, //0x000011bf bsfq %rsi, %rdx + 0xe9, 0x08, 0x06, 0x00, 0x00, //0x000011c3 jmp LBB0_311 + //0x000011c8 LBB0_215 + 0x48, 0x01, 0xd6, //0x000011c8 addq %rdx, %rsi + 0x49, 0x89, 0xf1, //0x000011cb movq %rsi, %r9 + //0x000011ce LBB0_216 + 0x48, 0x8b, 0x7d, 0xb8, //0x000011ce movq $-72(%rbp), %rdi + //0x000011d2 LBB0_217 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000011d2 movq $-1, %r13 + 0x4d, 0x85, 0xc0, //0x000011d9 testq %r8, %r8 + 0x0f, 0x84, 0xb4, 0x28, 0x00, 0x00, //0x000011dc je LBB0_626 + 0x4d, 0x85, 0xd2, //0x000011e2 testq %r10, %r10 + 0x0f, 0x84, 0xab, 0x28, 0x00, 0x00, //0x000011e5 je LBB0_626 + 0x4d, 0x85, 0xff, //0x000011eb testq %r15, %r15 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000011ee movabsq $4294977024, %r11 + 0x0f, 0x84, 0x98, 0x28, 0x00, 0x00, //0x000011f8 je LBB0_626 + 0x49, 0x29, 0xf9, //0x000011fe subq %rdi, %r9 + 0x49, 0x8d, 0x49, 0xff, //0x00001201 leaq $-1(%r9), %rcx + 0x49, 0x39, 0xc8, //0x00001205 cmpq %rcx, %r8 + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00001208 je LBB0_226 + 0x49, 0x39, 0xca, //0x0000120e cmpq %rcx, %r10 + 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x00001211 je LBB0_226 + 0x49, 0x39, 0xcf, //0x00001217 cmpq %rcx, %r15 + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x0000121a je LBB0_226 + 0x4d, 0x85, 0xd2, //0x00001220 testq %r10, %r10 + 0x0f, 0x8e, 0x7f, 0x05, 0x00, 0x00, //0x00001223 jle LBB0_307 + 0x49, 0x8d, 0x4a, 0xff, //0x00001229 leaq $-1(%r10), %rcx + 0x49, 0x39, 0xcf, //0x0000122d cmpq %rcx, %r15 + 0x0f, 0x84, 0x72, 0x05, 0x00, 0x00, //0x00001230 je LBB0_307 + 0x49, 0xf7, 0xd2, //0x00001236 notq %r10 + 0x4d, 0x89, 0xd5, //0x00001239 movq %r10, %r13 + 0xe9, 0xb3, 0x14, 0x00, 0x00, //0x0000123c jmp LBB0_451 + //0x00001241 LBB0_226 + 0x49, 0xf7, 0xd9, //0x00001241 negq %r9 + 0x4d, 0x89, 0xcd, //0x00001244 movq %r9, %r13 + 0xe9, 0xa8, 0x14, 0x00, 0x00, //0x00001247 jmp LBB0_451 + //0x0000124c LBB0_227 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000124c movl $64, %edx + 0x4c, 0x8b, 0x75, 0xd0, //0x00001251 movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001255 movabsq $4294977024, %r11 + 0x48, 0x39, 0xca, //0x0000125f cmpq %rcx, %rdx + 0x0f, 0x82, 0x1f, 0x2a, 0x00, 0x00, //0x00001262 jb LBB0_187 + //0x00001268 LBB0_228 + 0x48, 0x01, 0xc8, //0x00001268 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000126b addq $1, %rax + //0x0000126f LBB0_229 + 0x48, 0x85, 0xc0, //0x0000126f testq %rax, %rax + 0x0f, 0x88, 0xf9, 0x27, 0x00, 0x00, //0x00001272 js LBB0_623 + 0x49, 0x89, 0x06, //0x00001278 movq %rax, (%r14) + 0x48, 0x8b, 0x45, 0xc0, //0x0000127b movq $-64(%rbp), %rax + //0x0000127f LBB0_231 + 0x48, 0x85, 0xc0, //0x0000127f testq %rax, %rax + 0x0f, 0x8f, 0x48, 0xef, 0xff, 0xff, //0x00001282 jg LBB0_4 + 0xe9, 0xdb, 0x27, 0x00, 0x00, //0x00001288 jmp LBB0_232 + //0x0000128d LBB0_233 + 0x49, 0x8b, 0x0e, //0x0000128d movq (%r14), %rcx + 0x48, 0x8b, 0x55, 0xa8, //0x00001290 movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x00001294 movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfc, //0x00001298 leaq $-4(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x0000129c cmpq %rsi, %rcx + 0x0f, 0x87, 0x35, 0x28, 0x00, 0x00, //0x0000129f ja LBB0_629 + 0x41, 0x8b, 0x14, 0x0c, //0x000012a5 movl (%r12,%rcx), %edx + 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x000012a9 cmpl $1702063201, %edx + 0x0f, 0x85, 0xfb, 0x28, 0x00, 0x00, //0x000012af jne LBB0_640 + 0x48, 0x8d, 0x41, 0x04, //0x000012b5 leaq $4(%rcx), %rax + 0x49, 0x89, 0x06, //0x000012b9 movq %rax, (%r14) + 0x48, 0x85, 0xc9, //0x000012bc testq %rcx, %rcx + 0x0f, 0x8f, 0x0b, 0xef, 0xff, 0xff, //0x000012bf jg LBB0_4 + 0xe9, 0x3b, 0x29, 0x00, 0x00, //0x000012c5 jmp LBB0_236 + //0x000012ca LBB0_237 + 0x48, 0x8b, 0x4d, 0x98, //0x000012ca movq $-104(%rbp), %rcx + 0xf6, 0xc1, 0x40, //0x000012ce testb $64, %cl + 0x0f, 0x85, 0x5b, 0x05, 0x00, 0x00, //0x000012d1 jne LBB0_317 + 0x49, 0x8b, 0x16, //0x000012d7 movq (%r14), %rdx + 0x48, 0x8b, 0x45, 0xa8, //0x000012da movq $-88(%rbp), %rax + 0x48, 0x8b, 0x40, 0x08, //0x000012de movq $8(%rax), %rax + 0xf6, 0xc1, 0x20, //0x000012e2 testb $32, %cl + 0x48, 0x89, 0x45, 0xa0, //0x000012e5 movq %rax, $-96(%rbp) + 0x48, 0x89, 0x55, 0xc0, //0x000012e9 movq %rdx, $-64(%rbp) + 0x0f, 0x85, 0xae, 0x10, 0x00, 0x00, //0x000012ed jne LBB0_400 + 0x49, 0x89, 0xc1, //0x000012f3 movq %rax, %r9 + 0x49, 0x29, 0xd1, //0x000012f6 subq %rdx, %r9 + 0x0f, 0x84, 0xb1, 0x29, 0x00, 0x00, //0x000012f9 je LBB0_660 + 0x49, 0x83, 0xf9, 0x40, //0x000012ff cmpq $64, %r9 + 0x0f, 0x82, 0xb1, 0x1d, 0x00, 0x00, //0x00001303 jb LBB0_518 + 0x49, 0x89, 0xd6, //0x00001309 movq %rdx, %r14 + 0x49, 0xf7, 0xd6, //0x0000130c notq %r14 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000130f movq $-1, $-56(%rbp) + 0x48, 0x89, 0xd0, //0x00001317 movq %rdx, %rax + 0x45, 0x31, 0xc0, //0x0000131a xorl %r8d, %r8d + 0x90, 0x90, 0x90, //0x0000131d .p2align 4, 0x90 + //0x00001320 LBB0_242 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00001320 movdqu (%r12,%rax), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00001326 movdqu $16(%r12,%rax), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000132d movdqu $32(%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00001334 movdqu $48(%r12,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xfb, //0x0000133b movdqa %xmm3, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000133f pcmpeqb %xmm0, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00001343 pmovmskb %xmm7, %r10d + 0x66, 0x0f, 0x6f, 0xfc, //0x00001348 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000134c pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xcf, //0x00001350 pmovmskb %xmm7, %ecx + 0x66, 0x0f, 0x6f, 0xfd, //0x00001354 movdqa %xmm5, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00001358 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x0000135c pmovmskb %xmm7, %esi + 0x66, 0x0f, 0x6f, 0xfe, //0x00001360 movdqa %xmm6, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00001364 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xd7, //0x00001368 pmovmskb %xmm7, %edx + 0x66, 0x0f, 0x74, 0xd9, //0x0000136c pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00001370 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x74, 0xe1, //0x00001375 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xdc, //0x00001379 pmovmskb %xmm4, %ebx + 0x66, 0x0f, 0x74, 0xe9, //0x0000137d pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00001381 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x74, 0xf1, //0x00001385 pcmpeqb %xmm1, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00001389 pmovmskb %xmm6, %r15d + 0x48, 0xc1, 0xe2, 0x30, //0x0000138e shlq $48, %rdx + 0x48, 0xc1, 0xe6, 0x20, //0x00001392 shlq $32, %rsi + 0x48, 0x09, 0xd6, //0x00001396 orq %rdx, %rsi + 0x48, 0xc1, 0xe1, 0x10, //0x00001399 shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x0000139d orq %rsi, %rcx + 0x49, 0x09, 0xca, //0x000013a0 orq %rcx, %r10 + 0x49, 0xc1, 0xe7, 0x30, //0x000013a3 shlq $48, %r15 + 0x48, 0xc1, 0xe7, 0x20, //0x000013a7 shlq $32, %rdi + 0x4c, 0x09, 0xff, //0x000013ab orq %r15, %rdi + 0x48, 0xc1, 0xe3, 0x10, //0x000013ae shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x000013b2 orq %rdi, %rbx + 0x49, 0x09, 0xdb, //0x000013b5 orq %rbx, %r11 + 0x0f, 0x85, 0x3a, 0x00, 0x00, 0x00, //0x000013b8 jne LBB0_251 + 0x4d, 0x85, 0xc0, //0x000013be testq %r8, %r8 + 0x0f, 0x85, 0x47, 0x00, 0x00, 0x00, //0x000013c1 jne LBB0_253 + 0x45, 0x31, 0xc0, //0x000013c7 xorl %r8d, %r8d + 0x4d, 0x85, 0xd2, //0x000013ca testq %r10, %r10 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000013cd movabsq $4294977024, %r11 + 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, //0x000013d7 jne LBB0_254 + //0x000013dd LBB0_245 + 0x49, 0x83, 0xc1, 0xc0, //0x000013dd addq $-64, %r9 + 0x49, 0x83, 0xc6, 0xc0, //0x000013e1 addq $-64, %r14 + 0x48, 0x83, 0xc0, 0x40, //0x000013e5 addq $64, %rax + 0x49, 0x83, 0xf9, 0x3f, //0x000013e9 cmpq $63, %r9 + 0x0f, 0x87, 0x2d, 0xff, 0xff, 0xff, //0x000013ed ja LBB0_242 + 0xe9, 0x90, 0x18, 0x00, 0x00, //0x000013f3 jmp LBB0_246 + //0x000013f8 LBB0_251 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000013f8 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000013fd jne LBB0_253 + 0x49, 0x0f, 0xbc, 0xcb, //0x00001403 bsfq %r11, %rcx + 0x48, 0x01, 0xc1, //0x00001407 addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x0000140a movq %rcx, $-56(%rbp) + //0x0000140e LBB0_253 + 0x4c, 0x89, 0xc1, //0x0000140e movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00001411 notq %rcx + 0x4c, 0x21, 0xd9, //0x00001414 andq %r11, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x00001417 leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xc2, //0x0000141b orq %r8, %rdx + 0x48, 0x89, 0xd6, //0x0000141e movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00001421 notq %rsi + 0x4c, 0x21, 0xde, //0x00001424 andq %r11, %rsi + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001427 movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfe, //0x00001431 andq %rdi, %rsi + 0x45, 0x31, 0xc0, //0x00001434 xorl %r8d, %r8d + 0x48, 0x01, 0xce, //0x00001437 addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc0, //0x0000143a setb %r8b + 0x48, 0x01, 0xf6, //0x0000143e addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001441 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x0000144b xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x0000144e andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00001451 notq %rsi + 0x49, 0x21, 0xf2, //0x00001454 andq %rsi, %r10 + 0x4d, 0x85, 0xd2, //0x00001457 testq %r10, %r10 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000145a movabsq $4294977024, %r11 + 0x0f, 0x84, 0x73, 0xff, 0xff, 0xff, //0x00001464 je LBB0_245 + //0x0000146a LBB0_254 + 0x49, 0x0f, 0xbc, 0xc2, //0x0000146a bsfq %r10, %rax + 0x4c, 0x29, 0xf0, //0x0000146e subq %r14, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00001471 movq $-48(%rbp), %r14 + 0x48, 0x8b, 0x5d, 0xc0, //0x00001475 movq $-64(%rbp), %rbx + 0xe9, 0xe5, 0x11, 0x00, 0x00, //0x00001479 jmp LBB0_441 + //0x0000147e LBB0_255 + 0x48, 0x8b, 0x45, 0xa8, //0x0000147e movq $-88(%rbp), %rax + 0x4c, 0x8b, 0x48, 0x08, //0x00001482 movq $8(%rax), %r9 + 0x49, 0x8b, 0x06, //0x00001486 movq (%r14), %rax + 0xf6, 0x45, 0x98, 0x40, //0x00001489 testb $64, $-104(%rbp) + 0x0f, 0x85, 0xae, 0x04, 0x00, 0x00, //0x0000148d jne LBB0_327 + 0x49, 0x29, 0xc1, //0x00001493 subq %rax, %r9 + 0x0f, 0x84, 0x92, 0x27, 0x00, 0x00, //0x00001496 je LBB0_647 + 0x49, 0x8d, 0x0c, 0x04, //0x0000149c leaq (%r12,%rax), %rcx + 0x48, 0x89, 0x4d, 0xb8, //0x000014a0 movq %rcx, $-72(%rbp) + 0x80, 0x39, 0x30, //0x000014a4 cmpb $48, (%rcx) + 0x0f, 0x85, 0x39, 0x00, 0x00, 0x00, //0x000014a7 jne LBB0_261 + 0xbb, 0x01, 0x00, 0x00, 0x00, //0x000014ad movl $1, %ebx + 0x49, 0x83, 0xf9, 0x01, //0x000014b2 cmpq $1, %r9 + 0x0f, 0x84, 0xa6, 0x17, 0x00, 0x00, //0x000014b6 je LBB0_487 + 0x48, 0x8b, 0x4d, 0xb8, //0x000014bc movq $-72(%rbp), %rcx + 0x8a, 0x49, 0x01, //0x000014c0 movb $1(%rcx), %cl + 0x80, 0xc1, 0xd2, //0x000014c3 addb $-46, %cl + 0x80, 0xf9, 0x37, //0x000014c6 cmpb $55, %cl + 0x0f, 0x87, 0x93, 0x17, 0x00, 0x00, //0x000014c9 ja LBB0_487 + 0x0f, 0xb6, 0xc9, //0x000014cf movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x000014d2 movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x000014dc btq %rcx, %rdx + 0x0f, 0x83, 0x7c, 0x17, 0x00, 0x00, //0x000014e0 jae LBB0_487 + //0x000014e6 LBB0_261 + 0x49, 0x83, 0xf9, 0x10, //0x000014e6 cmpq $16, %r9 + 0x0f, 0x82, 0xa9, 0x1b, 0x00, 0x00, //0x000014ea jb LBB0_517 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000014f0 movq $-1, %r13 + 0x31, 0xdb, //0x000014f7 xorl %ebx, %ebx + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000014f9 movq $-1, %r8 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00001500 movq $-1, %r14 + 0x4d, 0x89, 0xca, //0x00001507 movq %r9, %r10 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000150a .p2align 4, 0x90 + //0x00001510 LBB0_263 + 0x48, 0x8b, 0x4d, 0xb8, //0x00001510 movq $-72(%rbp), %rcx + 0xf3, 0x0f, 0x6f, 0x1c, 0x19, //0x00001514 movdqu (%rcx,%rbx), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00001519 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x64, 0x25, 0x7b, 0xeb, 0xff, 0xff, //0x0000151d pcmpgtb $-5253(%rip), %xmm4 /* LCPI0_10+0(%rip) */ + 0x66, 0x41, 0x0f, 0x6f, 0xef, //0x00001525 movdqa %xmm15, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x0000152a pcmpgtb %xmm3, %xmm5 + 0x66, 0x0f, 0xdb, 0xec, //0x0000152e pand %xmm4, %xmm5 + 0x66, 0x0f, 0x6f, 0xe3, //0x00001532 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0x25, 0x82, 0xeb, 0xff, 0xff, //0x00001536 pcmpeqb $-5246(%rip), %xmm4 /* LCPI0_12+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xf3, //0x0000153e movdqa %xmm3, %xmm6 + 0x66, 0x0f, 0x74, 0x35, 0x86, 0xeb, 0xff, 0xff, //0x00001542 pcmpeqb $-5242(%rip), %xmm6 /* LCPI0_13+0(%rip) */ + 0x66, 0x0f, 0xeb, 0xf4, //0x0000154a por %xmm4, %xmm6 + 0x66, 0x0f, 0x6f, 0xe3, //0x0000154e movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xe1, //0x00001552 pand %xmm9, %xmm4 + 0x66, 0x0f, 0x74, 0x1d, 0x81, 0xeb, 0xff, 0xff, //0x00001557 pcmpeqb $-5247(%rip), %xmm3 /* LCPI0_14+0(%rip) */ + 0x66, 0x41, 0x0f, 0x74, 0xe3, //0x0000155f pcmpeqb %xmm11, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xfc, //0x00001564 pmovmskb %xmm4, %r15d + 0x66, 0x0f, 0xeb, 0xe3, //0x00001569 por %xmm3, %xmm4 + 0x66, 0x0f, 0xeb, 0xee, //0x0000156d por %xmm6, %xmm5 + 0x66, 0x0f, 0xeb, 0xec, //0x00001571 por %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xd3, //0x00001575 pmovmskb %xmm3, %edx + 0x66, 0x44, 0x0f, 0xd7, 0xde, //0x00001579 pmovmskb %xmm6, %r11d + 0x66, 0x0f, 0xd7, 0xcd, //0x0000157e pmovmskb %xmm5, %ecx + 0xf7, 0xd1, //0x00001582 notl %ecx + 0x0f, 0xbc, 0xc9, //0x00001584 bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x00001587 cmpl $16, %ecx + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x0000158a je LBB0_265 + 0xbe, 0xff, 0xff, 0xff, 0xff, //0x00001590 movl $-1, %esi + 0xd3, 0xe6, //0x00001595 shll %cl, %esi + 0xf7, 0xd6, //0x00001597 notl %esi + 0x21, 0xf2, //0x00001599 andl %esi, %edx + 0x41, 0x21, 0xf7, //0x0000159b andl %esi, %r15d + 0x44, 0x21, 0xde, //0x0000159e andl %r11d, %esi + 0x41, 0x89, 0xf3, //0x000015a1 movl %esi, %r11d + //0x000015a4 LBB0_265 + 0x8d, 0x72, 0xff, //0x000015a4 leal $-1(%rdx), %esi + 0x21, 0xd6, //0x000015a7 andl %edx, %esi + 0x0f, 0x85, 0x79, 0x16, 0x00, 0x00, //0x000015a9 jne LBB0_481 + 0x41, 0x8d, 0x77, 0xff, //0x000015af leal $-1(%r15), %esi + 0x44, 0x21, 0xfe, //0x000015b3 andl %r15d, %esi + 0x0f, 0x85, 0x6c, 0x16, 0x00, 0x00, //0x000015b6 jne LBB0_481 + 0x41, 0x8d, 0x73, 0xff, //0x000015bc leal $-1(%r11), %esi + 0x44, 0x21, 0xde, //0x000015c0 andl %r11d, %esi + 0x0f, 0x85, 0x5f, 0x16, 0x00, 0x00, //0x000015c3 jne LBB0_481 + 0x85, 0xd2, //0x000015c9 testl %edx, %edx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000015cb je LBB0_271 + 0x0f, 0xbc, 0xd2, //0x000015d1 bsfl %edx, %edx + 0x49, 0x83, 0xfe, 0xff, //0x000015d4 cmpq $-1, %r14 + 0x0f, 0x85, 0x73, 0x16, 0x00, 0x00, //0x000015d8 jne LBB0_484 + 0x48, 0x01, 0xda, //0x000015de addq %rbx, %rdx + 0x49, 0x89, 0xd6, //0x000015e1 movq %rdx, %r14 + //0x000015e4 LBB0_271 + 0x45, 0x85, 0xff, //0x000015e4 testl %r15d, %r15d + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x000015e7 je LBB0_274 + 0x41, 0x0f, 0xbc, 0xd7, //0x000015ed bsfl %r15d, %edx + 0x49, 0x83, 0xf8, 0xff, //0x000015f1 cmpq $-1, %r8 + 0x0f, 0x85, 0x56, 0x16, 0x00, 0x00, //0x000015f5 jne LBB0_484 + 0x48, 0x01, 0xda, //0x000015fb addq %rbx, %rdx + 0x49, 0x89, 0xd0, //0x000015fe movq %rdx, %r8 + //0x00001601 LBB0_274 + 0x45, 0x85, 0xdb, //0x00001601 testl %r11d, %r11d + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00001604 je LBB0_277 + 0x41, 0x0f, 0xbc, 0xd3, //0x0000160a bsfl %r11d, %edx + 0x49, 0x83, 0xfd, 0xff, //0x0000160e cmpq $-1, %r13 + 0x0f, 0x85, 0x39, 0x16, 0x00, 0x00, //0x00001612 jne LBB0_484 + 0x48, 0x01, 0xda, //0x00001618 addq %rbx, %rdx + 0x49, 0x89, 0xd5, //0x0000161b movq %rdx, %r13 + //0x0000161e LBB0_277 + 0x83, 0xf9, 0x10, //0x0000161e cmpl $16, %ecx + 0x0f, 0x85, 0x93, 0x0f, 0x00, 0x00, //0x00001621 jne LBB0_426 + 0x49, 0x83, 0xc2, 0xf0, //0x00001627 addq $-16, %r10 + 0x48, 0x83, 0xc3, 0x10, //0x0000162b addq $16, %rbx + 0x49, 0x83, 0xfa, 0x0f, //0x0000162f cmpq $15, %r10 + 0x0f, 0x87, 0xd7, 0xfe, 0xff, 0xff, //0x00001633 ja LBB0_263 + 0x48, 0x8b, 0x4d, 0xb8, //0x00001639 movq $-72(%rbp), %rcx + 0x48, 0x8d, 0x34, 0x19, //0x0000163d leaq (%rcx,%rbx), %rsi + 0x49, 0x89, 0xf3, //0x00001641 movq %rsi, %r11 + 0x49, 0x39, 0xd9, //0x00001644 cmpq %rbx, %r9 + 0x0f, 0x84, 0x82, 0x0f, 0x00, 0x00, //0x00001647 je LBB0_428 + //0x0000164d LBB0_280 + 0x4e, 0x8d, 0x1c, 0x16, //0x0000164d leaq (%rsi,%r10), %r11 + 0x49, 0x89, 0xf1, //0x00001651 movq %rsi, %r9 + 0x4c, 0x2b, 0x4d, 0xb8, //0x00001654 subq $-72(%rbp), %r9 + 0x31, 0xdb, //0x00001658 xorl %ebx, %ebx + 0xe9, 0x1e, 0x00, 0x00, 0x00, //0x0000165a jmp LBB0_284 + //0x0000165f LBB0_281 + 0x49, 0x83, 0xfd, 0xff, //0x0000165f cmpq $-1, %r13 + 0x0f, 0x85, 0xd7, 0x15, 0x00, 0x00, //0x00001663 jne LBB0_483 + 0x4d, 0x8d, 0x2c, 0x19, //0x00001669 leaq (%r9,%rbx), %r13 + 0x90, 0x90, 0x90, //0x0000166d .p2align 4, 0x90 + //0x00001670 LBB0_283 + 0x48, 0x83, 0xc3, 0x01, //0x00001670 addq $1, %rbx + 0x49, 0x39, 0xda, //0x00001674 cmpq %rbx, %r10 + 0x0f, 0x84, 0x52, 0x0f, 0x00, 0x00, //0x00001677 je LBB0_428 + //0x0000167d LBB0_284 + 0x0f, 0xbe, 0x0c, 0x1e, //0x0000167d movsbl (%rsi,%rbx), %ecx + 0x8d, 0x51, 0xd0, //0x00001681 leal $-48(%rcx), %edx + 0x83, 0xfa, 0x0a, //0x00001684 cmpl $10, %edx + 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00001687 jb LBB0_283 + 0x8d, 0x51, 0xd5, //0x0000168d leal $-43(%rcx), %edx + 0x83, 0xfa, 0x1a, //0x00001690 cmpl $26, %edx + 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00001693 ja LBB0_289 + 0x48, 0x8d, 0x3d, 0xb4, 0x28, 0x00, 0x00, //0x00001699 leaq $10420(%rip), %rdi /* LJTI0_2+0(%rip) */ + 0x48, 0x63, 0x0c, 0x97, //0x000016a0 movslq (%rdi,%rdx,4), %rcx + 0x48, 0x01, 0xf9, //0x000016a4 addq %rdi, %rcx + 0xff, 0xe1, //0x000016a7 jmpq *%rcx + //0x000016a9 LBB0_287 + 0x49, 0x83, 0xfe, 0xff, //0x000016a9 cmpq $-1, %r14 + 0x0f, 0x85, 0x8d, 0x15, 0x00, 0x00, //0x000016ad jne LBB0_483 + 0x4d, 0x8d, 0x34, 0x19, //0x000016b3 leaq (%r9,%rbx), %r14 + 0xe9, 0xb4, 0xff, 0xff, 0xff, //0x000016b7 jmp LBB0_283 + //0x000016bc LBB0_289 + 0x83, 0xf9, 0x65, //0x000016bc cmpl $101, %ecx + 0x0f, 0x85, 0x04, 0x0f, 0x00, 0x00, //0x000016bf jne LBB0_427 + //0x000016c5 LBB0_290 + 0x49, 0x83, 0xf8, 0xff, //0x000016c5 cmpq $-1, %r8 + 0x0f, 0x85, 0x71, 0x15, 0x00, 0x00, //0x000016c9 jne LBB0_483 + 0x4d, 0x8d, 0x04, 0x19, //0x000016cf leaq (%r9,%rbx), %r8 + 0xe9, 0x98, 0xff, 0xff, 0xff, //0x000016d3 jmp LBB0_283 + //0x000016d8 LBB0_292 + 0xf6, 0x45, 0x98, 0x40, //0x000016d8 testb $64, $-104(%rbp) + 0x0f, 0x85, 0x46, 0x03, 0x00, 0x00, //0x000016dc jne LBB0_340 + 0x49, 0x8b, 0x45, 0x00, //0x000016e2 movq (%r13), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x000016e6 cmpq $4095, %rax + 0x0f, 0x8f, 0x5e, 0x23, 0x00, 0x00, //0x000016ec jg LBB0_651 + 0x48, 0x8d, 0x48, 0x01, //0x000016f2 leaq $1(%rax), %rcx + 0x49, 0x89, 0x4d, 0x00, //0x000016f6 movq %rcx, (%r13) + 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x05, 0x00, 0x00, 0x00, //0x000016fa movq $5, $8(%r13,%rax,8) + 0xe9, 0xc8, 0xea, 0xff, 0xff, //0x00001703 jmp LBB0_4 + //0x00001708 LBB0_295 + 0x49, 0x8b, 0x0e, //0x00001708 movq (%r14), %rcx + 0x48, 0x8b, 0x55, 0xa8, //0x0000170b movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x0000170f movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x00001713 leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001717 cmpq %rsi, %rcx + 0x0f, 0x87, 0xba, 0x23, 0x00, 0x00, //0x0000171a ja LBB0_629 + 0x48, 0x8d, 0x41, 0xff, //0x00001720 leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x00001724 cmpl $1819047278, $-1(%r12,%rcx) + 0x0f, 0x84, 0x60, 0x00, 0x00, 0x00, //0x0000172d je LBB0_306 + 0xe9, 0x2a, 0x24, 0x00, 0x00, //0x00001733 jmp LBB0_297 + //0x00001738 LBB0_301 + 0xf6, 0x45, 0x98, 0x40, //0x00001738 testb $64, $-104(%rbp) + 0x0f, 0x85, 0x5c, 0x07, 0x00, 0x00, //0x0000173c jne LBB0_366 + 0x49, 0x8b, 0x45, 0x00, //0x00001742 movq (%r13), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00001746 cmpq $4095, %rax + 0x0f, 0x8f, 0xfe, 0x22, 0x00, 0x00, //0x0000174c jg LBB0_651 + 0x48, 0x8d, 0x48, 0x01, //0x00001752 leaq $1(%rax), %rcx + 0x49, 0x89, 0x4d, 0x00, //0x00001756 movq %rcx, (%r13) + 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x06, 0x00, 0x00, 0x00, //0x0000175a movq $6, $8(%r13,%rax,8) + 0xe9, 0x68, 0xea, 0xff, 0xff, //0x00001763 jmp LBB0_4 + //0x00001768 LBB0_304 + 0x49, 0x8b, 0x0e, //0x00001768 movq (%r14), %rcx + 0x48, 0x8b, 0x55, 0xa8, //0x0000176b movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x0000176f movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x00001773 leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001777 cmpq %rsi, %rcx + 0x0f, 0x87, 0x5a, 0x23, 0x00, 0x00, //0x0000177a ja LBB0_629 + 0x48, 0x8d, 0x41, 0xff, //0x00001780 leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00001784 cmpl $1702195828, $-1(%r12,%rcx) + 0x0f, 0x85, 0x88, 0x23, 0x00, 0x00, //0x0000178d jne LBB0_635 + //0x00001793 LBB0_306 + 0x48, 0x8d, 0x51, 0x03, //0x00001793 leaq $3(%rcx), %rdx + 0x49, 0x89, 0x16, //0x00001797 movq %rdx, (%r14) + 0x48, 0x85, 0xc9, //0x0000179a testq %rcx, %rcx + 0x0f, 0x8f, 0x2d, 0xea, 0xff, 0xff, //0x0000179d jg LBB0_4 + 0xe9, 0x07, 0x23, 0x00, 0x00, //0x000017a3 jmp LBB0_650 + //0x000017a8 LBB0_307 + 0x4c, 0x89, 0xc1, //0x000017a8 movq %r8, %rcx + 0x4c, 0x09, 0xf9, //0x000017ab orq %r15, %rcx + 0x0f, 0x99, 0xc2, //0x000017ae setns %dl + 0x0f, 0x88, 0xce, 0x0b, 0x00, 0x00, //0x000017b1 js LBB0_399 + 0x4d, 0x39, 0xf8, //0x000017b7 cmpq %r15, %r8 + 0x0f, 0x8c, 0xc5, 0x0b, 0x00, 0x00, //0x000017ba jl LBB0_399 + 0x49, 0xf7, 0xd0, //0x000017c0 notq %r8 + 0x4d, 0x89, 0xc5, //0x000017c3 movq %r8, %r13 + 0xe9, 0x29, 0x0f, 0x00, 0x00, //0x000017c6 jmp LBB0_451 + //0x000017cb LBB0_310 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x000017cb movl $64, %edx + //0x000017d0 LBB0_311 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000017d0 movabsq $4294977024, %r11 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x5d, 0xe8, 0xff, 0xff, //0x000017da movdqu $-6051(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x48, 0x8b, 0x75, 0xc0, //0x000017e3 movq $-64(%rbp), %rsi + 0x48, 0x39, 0xca, //0x000017e7 cmpq %rcx, %rdx + 0x0f, 0x82, 0x67, 0x24, 0x00, 0x00, //0x000017ea jb LBB0_654 + 0x48, 0x01, 0xc8, //0x000017f0 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000017f3 addq $1, %rax + //0x000017f7 LBB0_313 + 0x48, 0x85, 0xc0, //0x000017f7 testq %rax, %rax + 0x0f, 0x88, 0xc1, 0x22, 0x00, 0x00, //0x000017fa js LBB0_627 + 0x49, 0x89, 0x06, //0x00001800 movq %rax, (%r14) + 0x48, 0x85, 0xf6, //0x00001803 testq %rsi, %rsi + 0x0f, 0x8e, 0xd6, 0x22, 0x00, 0x00, //0x00001806 jle LBB0_630 + //0x0000180c LBB0_315 + 0x49, 0x8b, 0x45, 0x00, //0x0000180c movq (%r13), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00001810 cmpq $4095, %rax + 0x0f, 0x8f, 0x34, 0x22, 0x00, 0x00, //0x00001816 jg LBB0_651 + 0x48, 0x8d, 0x48, 0x01, //0x0000181c leaq $1(%rax), %rcx + 0x49, 0x89, 0x4d, 0x00, //0x00001820 movq %rcx, (%r13) + 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x04, 0x00, 0x00, 0x00, //0x00001824 movq $4, $8(%r13,%rax,8) + 0xe9, 0x9e, 0xe9, 0xff, 0xff, //0x0000182d jmp LBB0_4 + //0x00001832 LBB0_317 + 0x48, 0x8b, 0x4d, 0xa8, //0x00001832 movq $-88(%rbp), %rcx + 0x4c, 0x8b, 0x49, 0x08, //0x00001836 movq $8(%rcx), %r9 + 0x4d, 0x8b, 0x06, //0x0000183a movq (%r14), %r8 + 0x4f, 0x8d, 0x14, 0x04, //0x0000183d leaq (%r12,%r8), %r10 + 0x4d, 0x29, 0xc1, //0x00001841 subq %r8, %r9 + 0x49, 0x83, 0xf9, 0x20, //0x00001844 cmpq $32, %r9 + 0x0f, 0x8c, 0xd7, 0x00, 0x00, 0x00, //0x00001848 jl LBB0_326 + 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x0000184e movl $32, %r14d + 0x31, 0xf6, //0x00001854 xorl %esi, %esi + 0x45, 0x31, 0xdb, //0x00001856 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001859 .p2align 4, 0x90 + //0x00001860 LBB0_319 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x32, //0x00001860 movdqu (%r10,%rsi), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x32, 0x10, //0x00001866 movdqu $16(%r10,%rsi), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x0000186d movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00001871 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00001875 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x6f, 0xec, //0x00001879 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x0000187d pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xdd, //0x00001881 pmovmskb %xmm5, %ebx + 0x48, 0xc1, 0xe3, 0x10, //0x00001885 shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x00001889 orq %rdi, %rbx + 0x66, 0x0f, 0x74, 0xd9, //0x0000188c pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001890 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x74, 0xe1, //0x00001894 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00001898 pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe7, 0x10, //0x0000189c shlq $16, %rdi + 0x48, 0x09, 0xcf, //0x000018a0 orq %rcx, %rdi + 0x48, 0x89, 0xf9, //0x000018a3 movq %rdi, %rcx + 0x4c, 0x09, 0xd9, //0x000018a6 orq %r11, %rcx + 0x0f, 0x84, 0x41, 0x00, 0x00, 0x00, //0x000018a9 je LBB0_321 + 0x44, 0x89, 0xd9, //0x000018af movl %r11d, %ecx + 0xf7, 0xd1, //0x000018b2 notl %ecx + 0x21, 0xf9, //0x000018b4 andl %edi, %ecx + 0x44, 0x8d, 0x3c, 0x09, //0x000018b6 leal (%rcx,%rcx), %r15d + 0x45, 0x09, 0xdf, //0x000018ba orl %r11d, %r15d + 0x44, 0x89, 0xfa, //0x000018bd movl %r15d, %edx + 0xf7, 0xd2, //0x000018c0 notl %edx + 0x21, 0xfa, //0x000018c2 andl %edi, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x000018c4 andl $-1431655766, %edx + 0x45, 0x31, 0xdb, //0x000018ca xorl %r11d, %r11d + 0x01, 0xca, //0x000018cd addl %ecx, %edx + 0x41, 0x0f, 0x92, 0xc3, //0x000018cf setb %r11b + 0x01, 0xd2, //0x000018d3 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x000018d5 xorl $1431655765, %edx + 0x44, 0x21, 0xfa, //0x000018db andl %r15d, %edx + 0xf7, 0xd2, //0x000018de notl %edx + 0x21, 0xd3, //0x000018e0 andl %edx, %ebx + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x000018e2 jmp LBB0_322 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000018e7 .p2align 4, 0x90 + //0x000018f0 LBB0_321 + 0x45, 0x31, 0xdb, //0x000018f0 xorl %r11d, %r11d + //0x000018f3 LBB0_322 + 0x48, 0x85, 0xdb, //0x000018f3 testq %rbx, %rbx + 0x0f, 0x85, 0xab, 0xe8, 0xff, 0xff, //0x000018f6 jne LBB0_1 + 0x48, 0x83, 0xc6, 0x20, //0x000018fc addq $32, %rsi + 0x4b, 0x8d, 0x0c, 0x31, //0x00001900 leaq (%r9,%r14), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00001904 addq $-32, %rcx + 0x49, 0x83, 0xc6, 0xe0, //0x00001908 addq $-32, %r14 + 0x48, 0x83, 0xf9, 0x3f, //0x0000190c cmpq $63, %rcx + 0x0f, 0x8f, 0x4a, 0xff, 0xff, 0xff, //0x00001910 jg LBB0_319 + 0x4d, 0x85, 0xdb, //0x00001916 testq %r11, %r11 + 0x0f, 0x85, 0x44, 0x1e, 0x00, 0x00, //0x00001919 jne LBB0_587 + 0x49, 0x01, 0xf2, //0x0000191f addq %rsi, %r10 + 0x49, 0x29, 0xf1, //0x00001922 subq %rsi, %r9 + //0x00001925 LBB0_326 + 0x4c, 0x8b, 0x75, 0xd0, //0x00001925 movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001929 movabsq $4294977024, %r11 + 0x4d, 0x85, 0xc9, //0x00001933 testq %r9, %r9 + 0x0f, 0x8f, 0x85, 0x1e, 0x00, 0x00, //0x00001936 jg LBB0_591 + 0xe9, 0x6e, 0x21, 0x00, 0x00, //0x0000193c jmp LBB0_650 + //0x00001941 LBB0_327 + 0x4c, 0x89, 0xca, //0x00001941 movq %r9, %rdx + 0x48, 0x29, 0xc2, //0x00001944 subq %rax, %rdx + 0x48, 0x83, 0xfa, 0x10, //0x00001947 cmpq $16, %rdx + 0x0f, 0x82, 0x36, 0x17, 0x00, 0x00, //0x0000194b jb LBB0_516 + 0x48, 0x89, 0xc7, //0x00001951 movq %rax, %rdi + 0x48, 0xf7, 0xdf, //0x00001954 negq %rdi + 0x4c, 0x8d, 0x40, 0x01, //0x00001957 leaq $1(%rax), %r8 + 0x48, 0x8d, 0x50, 0xff, //0x0000195b leaq $-1(%rax), %rdx + 0x49, 0x8d, 0x34, 0x04, //0x0000195f leaq (%r12,%rax), %rsi + 0x48, 0x83, 0xc6, 0xff, //0x00001963 addq $-1, %rsi + 0x48, 0x89, 0xc3, //0x00001967 movq %rax, %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000196a .p2align 4, 0x90 + //0x00001970 LBB0_329 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x1c, //0x00001970 movdqu (%r12,%rbx), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00001976 movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0x74, 0xe6, //0x0000197a pcmpeqb %xmm14, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xd9, //0x0000197f pand %xmm9, %xmm3 + 0x66, 0x0f, 0x74, 0xda, //0x00001984 pcmpeqb %xmm2, %xmm3 + 0x66, 0x0f, 0xeb, 0xdc, //0x00001988 por %xmm4, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x0000198c pmovmskb %xmm3, %ecx + 0x85, 0xc9, //0x00001990 testl %ecx, %ecx + 0x0f, 0x85, 0x8c, 0x09, 0x00, 0x00, //0x00001992 jne LBB0_394 + 0x48, 0x83, 0xc3, 0x10, //0x00001998 addq $16, %rbx + 0x49, 0x8d, 0x0c, 0x39, //0x0000199c leaq (%r9,%rdi), %rcx + 0x48, 0x83, 0xc1, 0xf0, //0x000019a0 addq $-16, %rcx + 0x48, 0x83, 0xc7, 0xf0, //0x000019a4 addq $-16, %rdi + 0x49, 0x83, 0xc0, 0x10, //0x000019a8 addq $16, %r8 + 0x48, 0x83, 0xc2, 0x10, //0x000019ac addq $16, %rdx + 0x48, 0x83, 0xc6, 0x10, //0x000019b0 addq $16, %rsi + 0x48, 0x83, 0xf9, 0x0f, //0x000019b4 cmpq $15, %rcx + 0x0f, 0x87, 0xb2, 0xff, 0xff, 0xff, //0x000019b8 ja LBB0_329 + 0x4c, 0x89, 0xe1, //0x000019be movq %r12, %rcx + 0x48, 0x29, 0xf9, //0x000019c1 subq %rdi, %rcx + 0x49, 0x01, 0xf9, //0x000019c4 addq %rdi, %r9 + 0x4c, 0x89, 0xca, //0x000019c7 movq %r9, %rdx + 0x48, 0x85, 0xd2, //0x000019ca testq %rdx, %rdx + 0x0f, 0x84, 0x4a, 0x00, 0x00, 0x00, //0x000019cd je LBB0_339 + //0x000019d3 LBB0_332 + 0x48, 0x8d, 0x34, 0x11, //0x000019d3 leaq (%rcx,%rdx), %rsi + //0x000019d7 LBB0_333 + 0x0f, 0xb6, 0x39, //0x000019d7 movzbl (%rcx), %edi + 0x48, 0x83, 0xff, 0x2c, //0x000019da cmpq $44, %rdi + 0x0f, 0x87, 0x14, 0x00, 0x00, 0x00, //0x000019de ja LBB0_335 + 0x48, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x000019e4 movabsq $17596481021440, %rbx + 0x48, 0x0f, 0xa3, 0xfb, //0x000019ee btq %rdi, %rbx + 0x0f, 0x82, 0x25, 0x00, 0x00, 0x00, //0x000019f2 jb LBB0_339 + //0x000019f8 LBB0_335 + 0x40, 0x80, 0xff, 0x5d, //0x000019f8 cmpb $93, %dil + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x000019fc je LBB0_339 + 0x40, 0x80, 0xff, 0x7d, //0x00001a02 cmpb $125, %dil + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00001a06 je LBB0_339 + 0x48, 0x83, 0xc1, 0x01, //0x00001a0c addq $1, %rcx + 0x48, 0x83, 0xc2, 0xff, //0x00001a10 addq $-1, %rdx + 0x0f, 0x85, 0xbd, 0xff, 0xff, 0xff, //0x00001a14 jne LBB0_333 + 0x48, 0x89, 0xf1, //0x00001a1a movq %rsi, %rcx + //0x00001a1d LBB0_339 + 0x4c, 0x29, 0xe1, //0x00001a1d subq %r12, %rcx + 0x49, 0x89, 0x0e, //0x00001a20 movq %rcx, (%r14) + 0xe9, 0x57, 0xf8, 0xff, 0xff, //0x00001a23 jmp LBB0_231 + //0x00001a28 LBB0_340 + 0x48, 0x8b, 0x55, 0xa8, //0x00001a28 movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x00001a2c movq $8(%rdx), %rdx + 0x49, 0x8b, 0x0e, //0x00001a30 movq (%r14), %rcx + 0x48, 0x29, 0xca, //0x00001a33 subq %rcx, %rdx + 0x48, 0x89, 0x4d, 0xc0, //0x00001a36 movq %rcx, $-64(%rbp) + 0x49, 0x01, 0xcc, //0x00001a3a addq %rcx, %r12 + 0x45, 0x31, 0xc0, //0x00001a3d xorl %r8d, %r8d + 0x45, 0x31, 0xc9, //0x00001a40 xorl %r9d, %r9d + 0x45, 0x31, 0xd2, //0x00001a43 xorl %r10d, %r10d + 0x45, 0x31, 0xf6, //0x00001a46 xorl %r14d, %r14d + 0x48, 0x83, 0xfa, 0x40, //0x00001a49 cmpq $64, %rdx + 0x48, 0x89, 0x55, 0xb8, //0x00001a4d movq %rdx, $-72(%rbp) + 0x0f, 0x8d, 0x4c, 0x01, 0x00, 0x00, //0x00001a51 jge LBB0_341 + //0x00001a57 LBB0_350 + 0x48, 0x85, 0xd2, //0x00001a57 testq %rdx, %rdx + 0x0f, 0x8e, 0x62, 0x22, 0x00, 0x00, //0x00001a5a jle LBB0_662 + 0x66, 0x0f, 0x6f, 0xf2, //0x00001a60 movdqa %xmm2, %xmm6 + 0x66, 0x0f, 0xef, 0xd2, //0x00001a64 pxor %xmm2, %xmm2 + 0xf3, 0x0f, 0x7f, 0x55, 0x80, //0x00001a68 movdqu %xmm2, $-128(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001a6d movdqu %xmm2, $-144(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x00001a75 movdqu %xmm2, $-160(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001a7d movdqu %xmm2, $-176(%rbp) + 0x4c, 0x89, 0xe7, //0x00001a85 movq %r12, %rdi + 0x44, 0x89, 0xe1, //0x00001a88 movl %r12d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00001a8b andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00001a91 cmpl $4033, %ecx + 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x00001a97 jb LBB0_354 + 0x48, 0x83, 0x7d, 0xb8, 0x20, //0x00001a9d cmpq $32, $-72(%rbp) + 0x0f, 0x82, 0x3b, 0x00, 0x00, 0x00, //0x00001aa2 jb LBB0_355 + 0x0f, 0x10, 0x1f, //0x00001aa8 movups (%rdi), %xmm3 + 0x0f, 0x11, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x00001aab movups %xmm3, $-176(%rbp) + 0xf3, 0x0f, 0x6f, 0x5f, 0x10, //0x00001ab2 movdqu $16(%rdi), %xmm3 + 0xf3, 0x0f, 0x7f, 0x9d, 0x60, 0xff, 0xff, 0xff, //0x00001ab7 movdqu %xmm3, $-160(%rbp) + 0x48, 0x83, 0xc7, 0x20, //0x00001abf addq $32, %rdi + 0x48, 0x8b, 0x4d, 0xb8, //0x00001ac3 movq $-72(%rbp), %rcx + 0x48, 0x8d, 0x71, 0xe0, //0x00001ac7 leaq $-32(%rcx), %rsi + 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001acb leaq $-144(%rbp), %rdx + 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00001ad2 jmp LBB0_356 + //0x00001ad7 LBB0_354 + 0x66, 0x0f, 0x6f, 0xd6, //0x00001ad7 movdqa %xmm6, %xmm2 + 0x49, 0x89, 0xfc, //0x00001adb movq %rdi, %r12 + 0xe9, 0xc0, 0x00, 0x00, 0x00, //0x00001ade jmp LBB0_341 + //0x00001ae3 LBB0_355 + 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001ae3 leaq $-176(%rbp), %rdx + 0x48, 0x8b, 0x75, 0xb8, //0x00001aea movq $-72(%rbp), %rsi + //0x00001aee LBB0_356 + 0x48, 0x83, 0xfe, 0x10, //0x00001aee cmpq $16, %rsi + 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x00001af2 jb LBB0_357 + 0xf3, 0x0f, 0x6f, 0x1f, //0x00001af8 movdqu (%rdi), %xmm3 + 0xf3, 0x0f, 0x7f, 0x1a, //0x00001afc movdqu %xmm3, (%rdx) + 0x48, 0x83, 0xc7, 0x10, //0x00001b00 addq $16, %rdi + 0x48, 0x83, 0xc2, 0x10, //0x00001b04 addq $16, %rdx + 0x48, 0x83, 0xc6, 0xf0, //0x00001b08 addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x08, //0x00001b0c cmpq $8, %rsi + 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x00001b10 jae LBB0_364 + //0x00001b16 LBB0_358 + 0x48, 0x83, 0xfe, 0x04, //0x00001b16 cmpq $4, %rsi + 0x0f, 0x8c, 0x45, 0x00, 0x00, 0x00, //0x00001b1a jl LBB0_359 + //0x00001b20 LBB0_365 + 0x8b, 0x0f, //0x00001b20 movl (%rdi), %ecx + 0x89, 0x0a, //0x00001b22 movl %ecx, (%rdx) + 0x48, 0x83, 0xc7, 0x04, //0x00001b24 addq $4, %rdi + 0x48, 0x83, 0xc2, 0x04, //0x00001b28 addq $4, %rdx + 0x48, 0x83, 0xc6, 0xfc, //0x00001b2c addq $-4, %rsi + 0x48, 0x83, 0xfe, 0x02, //0x00001b30 cmpq $2, %rsi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001b34 jae LBB0_360 + 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00001b3a jmp LBB0_361 + //0x00001b3f LBB0_357 + 0x48, 0x83, 0xfe, 0x08, //0x00001b3f cmpq $8, %rsi + 0x0f, 0x82, 0xcd, 0xff, 0xff, 0xff, //0x00001b43 jb LBB0_358 + //0x00001b49 LBB0_364 + 0x48, 0x8b, 0x0f, //0x00001b49 movq (%rdi), %rcx + 0x48, 0x89, 0x0a, //0x00001b4c movq %rcx, (%rdx) + 0x48, 0x83, 0xc7, 0x08, //0x00001b4f addq $8, %rdi + 0x48, 0x83, 0xc2, 0x08, //0x00001b53 addq $8, %rdx + 0x48, 0x83, 0xc6, 0xf8, //0x00001b57 addq $-8, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x00001b5b cmpq $4, %rsi + 0x0f, 0x8d, 0xbb, 0xff, 0xff, 0xff, //0x00001b5f jge LBB0_365 + //0x00001b65 LBB0_359 + 0x48, 0x83, 0xfe, 0x02, //0x00001b65 cmpq $2, %rsi + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00001b69 jb LBB0_361 + //0x00001b6f LBB0_360 + 0x0f, 0xb7, 0x0f, //0x00001b6f movzwl (%rdi), %ecx + 0x66, 0x89, 0x0a, //0x00001b72 movw %cx, (%rdx) + 0x48, 0x83, 0xc7, 0x02, //0x00001b75 addq $2, %rdi + 0x48, 0x83, 0xc2, 0x02, //0x00001b79 addq $2, %rdx + 0x48, 0x83, 0xc6, 0xfe, //0x00001b7d addq $-2, %rsi + //0x00001b81 LBB0_361 + 0x48, 0x89, 0xf9, //0x00001b81 movq %rdi, %rcx + 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00001b84 leaq $-176(%rbp), %r12 + 0x48, 0x85, 0xf6, //0x00001b8b testq %rsi, %rsi + 0x66, 0x0f, 0x6f, 0xd6, //0x00001b8e movdqa %xmm6, %xmm2 + 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x00001b92 je LBB0_341 + 0x8a, 0x09, //0x00001b98 movb (%rcx), %cl + 0x88, 0x0a, //0x00001b9a movb %cl, (%rdx) + 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00001b9c leaq $-176(%rbp), %r12 + //0x00001ba3 LBB0_341 + 0x66, 0x44, 0x0f, 0x6f, 0xc2, //0x00001ba3 movdqa %xmm2, %xmm8 + 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x00001ba8 movdqu (%r12), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x10, //0x00001bae movdqu $16(%r12), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x20, //0x00001bb5 movdqu $32(%r12), %xmm6 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x30, //0x00001bbc movdqu $48(%r12), %xmm5 + 0x66, 0x0f, 0x6f, 0xdc, //0x00001bc3 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001bc7 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x00001bcb pmovmskb %xmm3, %edx + 0x66, 0x0f, 0x6f, 0xdf, //0x00001bcf movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001bd3 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001bd7 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xde, //0x00001bdb movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001bdf pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001be3 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x6f, 0xdd, //0x00001be7 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001beb pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00001bef pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe7, 0x30, //0x00001bf3 shlq $48, %rdi + 0x48, 0xc1, 0xe6, 0x20, //0x00001bf7 shlq $32, %rsi + 0x48, 0x09, 0xfe, //0x00001bfb orq %rdi, %rsi + 0x48, 0xc1, 0xe1, 0x10, //0x00001bfe shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x00001c02 orq %rsi, %rcx + 0x48, 0x09, 0xca, //0x00001c05 orq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x00001c08 movq %rdx, %rcx + 0x66, 0x45, 0x0f, 0x6f, 0xee, //0x00001c0b movdqa %xmm14, %xmm13 + 0x4c, 0x09, 0xc9, //0x00001c10 orq %r9, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001c13 jne LBB0_343 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001c19 movq $-1, %rdx + 0x45, 0x31, 0xc9, //0x00001c20 xorl %r9d, %r9d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001c23 jmp LBB0_344 + //0x00001c28 LBB0_343 + 0x4c, 0x89, 0xc9, //0x00001c28 movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x00001c2b notq %rcx + 0x48, 0x21, 0xd1, //0x00001c2e andq %rdx, %rcx + 0x4c, 0x8d, 0x1c, 0x09, //0x00001c31 leaq (%rcx,%rcx), %r11 + 0x4d, 0x09, 0xcb, //0x00001c35 orq %r9, %r11 + 0x4c, 0x89, 0xdf, //0x00001c38 movq %r11, %rdi + 0x48, 0xf7, 0xd7, //0x00001c3b notq %rdi + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001c3e movabsq $-6148914691236517206, %rsi + 0x48, 0x21, 0xf2, //0x00001c48 andq %rsi, %rdx + 0x48, 0x21, 0xfa, //0x00001c4b andq %rdi, %rdx + 0x45, 0x31, 0xc9, //0x00001c4e xorl %r9d, %r9d + 0x48, 0x01, 0xca, //0x00001c51 addq %rcx, %rdx + 0x41, 0x0f, 0x92, 0xc1, //0x00001c54 setb %r9b + 0x48, 0x01, 0xd2, //0x00001c58 addq %rdx, %rdx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001c5b movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xca, //0x00001c65 xorq %rcx, %rdx + 0x4c, 0x21, 0xda, //0x00001c68 andq %r11, %rdx + 0x48, 0xf7, 0xd2, //0x00001c6b notq %rdx + //0x00001c6e LBB0_344 + 0x66, 0x0f, 0x6f, 0xdd, //0x00001c6e movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001c72 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001c76 pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x30, //0x00001c7a shlq $48, %rcx + 0x66, 0x0f, 0x6f, 0xde, //0x00001c7e movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001c82 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001c86 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x20, //0x00001c8a shlq $32, %rsi + 0x48, 0x09, 0xce, //0x00001c8e orq %rcx, %rsi + 0x66, 0x0f, 0x6f, 0xdf, //0x00001c91 movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001c95 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001c99 pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x10, //0x00001c9d shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x00001ca1 orq %rsi, %rcx + 0x66, 0x0f, 0x6f, 0xdc, //0x00001ca4 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001ca8 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001cac pmovmskb %xmm3, %esi + 0x48, 0x09, 0xce, //0x00001cb0 orq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00001cb3 andq %rdx, %rsi + 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x00001cb6 movq %rsi, %xmm3 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xda, 0x00, //0x00001cbb pclmulqdq $0, %xmm10, %xmm3 + 0x66, 0x49, 0x0f, 0x7e, 0xdb, //0x00001cc2 movq %xmm3, %r11 + 0x4d, 0x31, 0xc3, //0x00001cc7 xorq %r8, %r11 + 0x66, 0x0f, 0x6f, 0xdc, //0x00001cca movdqa %xmm4, %xmm3 + 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x89, 0xe3, 0xff, 0xff, //0x00001cce movdqu $-7287(%rip), %xmm11 /* LCPI0_6+0(%rip) */ + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001cd7 pcmpeqb %xmm11, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00001cdc pmovmskb %xmm3, %r13d + 0x66, 0x0f, 0x6f, 0xdf, //0x00001ce1 movdqa %xmm7, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001ce5 pcmpeqb %xmm11, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001cea pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xde, //0x00001cee movdqa %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001cf2 pcmpeqb %xmm11, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x00001cf7 pmovmskb %xmm3, %edx + 0x66, 0x0f, 0x6f, 0xdd, //0x00001cfb movdqa %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001cff pcmpeqb %xmm11, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001d04 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x30, //0x00001d08 shlq $48, %rsi + 0x48, 0xc1, 0xe2, 0x20, //0x00001d0c shlq $32, %rdx + 0x48, 0x09, 0xf2, //0x00001d10 orq %rsi, %rdx + 0x48, 0xc1, 0xe1, 0x10, //0x00001d13 shlq $16, %rcx + 0x48, 0x09, 0xd1, //0x00001d17 orq %rdx, %rcx + 0x49, 0x09, 0xcd, //0x00001d1a orq %rcx, %r13 + 0x4d, 0x89, 0xd8, //0x00001d1d movq %r11, %r8 + 0x49, 0xf7, 0xd0, //0x00001d20 notq %r8 + 0x4d, 0x21, 0xc5, //0x00001d23 andq %r8, %r13 + 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001d26 movdqa %xmm8, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xe0, //0x00001d2b pcmpeqb %xmm8, %xmm4 + 0x66, 0x0f, 0xd7, 0xd4, //0x00001d30 pmovmskb %xmm4, %edx + 0x66, 0x41, 0x0f, 0x74, 0xf8, //0x00001d34 pcmpeqb %xmm8, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x00001d39 pmovmskb %xmm7, %esi + 0x66, 0x41, 0x0f, 0x74, 0xf0, //0x00001d3d pcmpeqb %xmm8, %xmm6 + 0x66, 0x0f, 0xd7, 0xce, //0x00001d42 pmovmskb %xmm6, %ecx + 0x66, 0x41, 0x0f, 0x74, 0xe8, //0x00001d46 pcmpeqb %xmm8, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xfd, //0x00001d4b pmovmskb %xmm5, %r15d + 0x49, 0xc1, 0xe7, 0x30, //0x00001d50 shlq $48, %r15 + 0x48, 0xc1, 0xe1, 0x20, //0x00001d54 shlq $32, %rcx + 0x4c, 0x09, 0xf9, //0x00001d58 orq %r15, %rcx + 0x48, 0xc1, 0xe6, 0x10, //0x00001d5b shlq $16, %rsi + 0x48, 0x09, 0xce, //0x00001d5f orq %rcx, %rsi + 0x48, 0x09, 0xf2, //0x00001d62 orq %rsi, %rdx + 0x66, 0x45, 0x0f, 0x6f, 0xf5, //0x00001d65 movdqa %xmm13, %xmm14 + 0x4c, 0x21, 0xc2, //0x00001d6a andq %r8, %rdx + 0x0f, 0x84, 0xa4, 0x00, 0x00, 0x00, //0x00001d6d je LBB0_348 + 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x74, 0xe3, 0xff, 0xff, //0x00001d73 movdqu $-7308(%rip), %xmm11 /* LCPI0_15+0(%rip) */ + 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001d7c movdqa %xmm8, %xmm2 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xb6, 0xe2, 0xff, 0xff, //0x00001d81 movdqu $-7498(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001d8a movabsq $3689348814741910323, %r8 + 0xf3, 0x44, 0x0f, 0x6f, 0x05, 0xb3, 0xe2, 0xff, 0xff, //0x00001d94 movdqu $-7501(%rip), %xmm8 /* LCPI0_5+0(%rip) */ + 0x90, 0x90, 0x90, //0x00001d9d .p2align 4, 0x90 + //0x00001da0 LBB0_346 + 0x48, 0x8d, 0x7a, 0xff, //0x00001da0 leaq $-1(%rdx), %rdi + 0x48, 0x89, 0xf9, //0x00001da4 movq %rdi, %rcx + 0x4c, 0x21, 0xe9, //0x00001da7 andq %r13, %rcx + 0x48, 0x89, 0xce, //0x00001daa movq %rcx, %rsi + 0x48, 0xd1, 0xee, //0x00001dad shrq %rsi + 0x48, 0xbb, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001db0 movabsq $6148914691236517205, %rbx + 0x48, 0x21, 0xde, //0x00001dba andq %rbx, %rsi + 0x48, 0x29, 0xf1, //0x00001dbd subq %rsi, %rcx + 0x48, 0x89, 0xce, //0x00001dc0 movq %rcx, %rsi + 0x4c, 0x21, 0xc6, //0x00001dc3 andq %r8, %rsi + 0x48, 0xc1, 0xe9, 0x02, //0x00001dc6 shrq $2, %rcx + 0x4c, 0x21, 0xc1, //0x00001dca andq %r8, %rcx + 0x48, 0x01, 0xf1, //0x00001dcd addq %rsi, %rcx + 0x48, 0x89, 0xce, //0x00001dd0 movq %rcx, %rsi + 0x48, 0xc1, 0xee, 0x04, //0x00001dd3 shrq $4, %rsi + 0x48, 0x01, 0xce, //0x00001dd7 addq %rcx, %rsi + 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001dda movabsq $1085102592571150095, %rcx + 0x48, 0x21, 0xce, //0x00001de4 andq %rcx, %rsi + 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00001de7 movabsq $72340172838076673, %rcx + 0x48, 0x0f, 0xaf, 0xf1, //0x00001df1 imulq %rcx, %rsi + 0x48, 0xc1, 0xee, 0x38, //0x00001df5 shrq $56, %rsi + 0x4c, 0x01, 0xd6, //0x00001df9 addq %r10, %rsi + 0x4c, 0x39, 0xf6, //0x00001dfc cmpq %r14, %rsi + 0x0f, 0x86, 0xe4, 0x04, 0x00, 0x00, //0x00001dff jbe LBB0_392 + 0x49, 0x83, 0xc6, 0x01, //0x00001e05 addq $1, %r14 + 0x48, 0x21, 0xfa, //0x00001e09 andq %rdi, %rdx + 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x00001e0c jne LBB0_346 + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00001e12 jmp LBB0_349 + //0x00001e17 LBB0_348 + 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001e17 movdqa %xmm8, %xmm2 + 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001e1c movabsq $3689348814741910323, %r8 + //0x00001e26 LBB0_349 + 0x49, 0xc1, 0xfb, 0x3f, //0x00001e26 sarq $63, %r11 + 0x4c, 0x89, 0xe9, //0x00001e2a movq %r13, %rcx + 0x48, 0xd1, 0xe9, //0x00001e2d shrq %rcx + 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001e30 movabsq $6148914691236517205, %rdx + 0x48, 0x21, 0xd1, //0x00001e3a andq %rdx, %rcx + 0x49, 0x29, 0xcd, //0x00001e3d subq %rcx, %r13 + 0x4c, 0x89, 0xe9, //0x00001e40 movq %r13, %rcx + 0x4c, 0x21, 0xc1, //0x00001e43 andq %r8, %rcx + 0x49, 0xc1, 0xed, 0x02, //0x00001e46 shrq $2, %r13 + 0x4d, 0x21, 0xc5, //0x00001e4a andq %r8, %r13 + 0x49, 0x01, 0xcd, //0x00001e4d addq %rcx, %r13 + 0x4c, 0x89, 0xe9, //0x00001e50 movq %r13, %rcx + 0x48, 0xc1, 0xe9, 0x04, //0x00001e53 shrq $4, %rcx + 0x4c, 0x01, 0xe9, //0x00001e57 addq %r13, %rcx + 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001e5a movabsq $1085102592571150095, %rdx + 0x48, 0x21, 0xd1, //0x00001e64 andq %rdx, %rcx + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00001e67 movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xca, //0x00001e71 imulq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x00001e75 shrq $56, %rcx + 0x49, 0x01, 0xca, //0x00001e79 addq %rcx, %r10 + 0x49, 0x83, 0xc4, 0x40, //0x00001e7c addq $64, %r12 + 0x48, 0x8b, 0x55, 0xb8, //0x00001e80 movq $-72(%rbp), %rdx + 0x48, 0x83, 0xc2, 0xc0, //0x00001e84 addq $-64, %rdx + 0x4d, 0x89, 0xd8, //0x00001e88 movq %r11, %r8 + 0x48, 0x83, 0xfa, 0x40, //0x00001e8b cmpq $64, %rdx + 0x48, 0x89, 0x55, 0xb8, //0x00001e8f movq %rdx, $-72(%rbp) + 0x0f, 0x8d, 0x0a, 0xfd, 0xff, 0xff, //0x00001e93 jge LBB0_341 + 0xe9, 0xb9, 0xfb, 0xff, 0xff, //0x00001e99 jmp LBB0_350 + //0x00001e9e LBB0_366 + 0x48, 0x8b, 0x55, 0xa8, //0x00001e9e movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x00001ea2 movq $8(%rdx), %rdx + 0x49, 0x8b, 0x0e, //0x00001ea6 movq (%r14), %rcx + 0x48, 0x29, 0xca, //0x00001ea9 subq %rcx, %rdx + 0x48, 0x89, 0x4d, 0xc0, //0x00001eac movq %rcx, $-64(%rbp) + 0x49, 0x01, 0xcc, //0x00001eb0 addq %rcx, %r12 + 0x45, 0x31, 0xc0, //0x00001eb3 xorl %r8d, %r8d + 0x45, 0x31, 0xc9, //0x00001eb6 xorl %r9d, %r9d + 0x45, 0x31, 0xd2, //0x00001eb9 xorl %r10d, %r10d + 0x45, 0x31, 0xf6, //0x00001ebc xorl %r14d, %r14d + 0x48, 0x83, 0xfa, 0x40, //0x00001ebf cmpq $64, %rdx + 0x48, 0x89, 0x55, 0xb8, //0x00001ec3 movq %rdx, $-72(%rbp) + 0x0f, 0x8d, 0x5b, 0x01, 0x00, 0x00, //0x00001ec7 jge LBB0_367 + //0x00001ecd LBB0_376 + 0x48, 0x85, 0xd2, //0x00001ecd testq %rdx, %rdx + 0x0f, 0x8e, 0xec, 0x1d, 0x00, 0x00, //0x00001ed0 jle LBB0_662 + 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00001ed6 movdqa %xmm13, %xmm7 + 0x66, 0x0f, 0x6f, 0xf2, //0x00001edb movdqa %xmm2, %xmm6 + 0x66, 0x0f, 0xef, 0xd2, //0x00001edf pxor %xmm2, %xmm2 + 0xf3, 0x0f, 0x7f, 0x55, 0x80, //0x00001ee3 movdqu %xmm2, $-128(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001ee8 movdqu %xmm2, $-144(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x00001ef0 movdqu %xmm2, $-160(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001ef8 movdqu %xmm2, $-176(%rbp) + 0x4c, 0x89, 0xe7, //0x00001f00 movq %r12, %rdi + 0x44, 0x89, 0xe1, //0x00001f03 movl %r12d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00001f06 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00001f0c cmpl $4033, %ecx + 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x00001f12 jb LBB0_380 + 0x48, 0x83, 0x7d, 0xb8, 0x20, //0x00001f18 cmpq $32, $-72(%rbp) + 0x0f, 0x82, 0x40, 0x00, 0x00, 0x00, //0x00001f1d jb LBB0_381 + 0x0f, 0x10, 0x1f, //0x00001f23 movups (%rdi), %xmm3 + 0x0f, 0x11, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x00001f26 movups %xmm3, $-176(%rbp) + 0xf3, 0x0f, 0x6f, 0x5f, 0x10, //0x00001f2d movdqu $16(%rdi), %xmm3 + 0xf3, 0x0f, 0x7f, 0x9d, 0x60, 0xff, 0xff, 0xff, //0x00001f32 movdqu %xmm3, $-160(%rbp) + 0x48, 0x83, 0xc7, 0x20, //0x00001f3a addq $32, %rdi + 0x48, 0x8b, 0x4d, 0xb8, //0x00001f3e movq $-72(%rbp), %rcx + 0x48, 0x8d, 0x71, 0xe0, //0x00001f42 leaq $-32(%rcx), %rsi + 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001f46 leaq $-144(%rbp), %rdx + 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x00001f4d jmp LBB0_382 + //0x00001f52 LBB0_380 + 0x66, 0x0f, 0x6f, 0xd6, //0x00001f52 movdqa %xmm6, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x00001f56 movdqa %xmm7, %xmm13 + 0x49, 0x89, 0xfc, //0x00001f5b movq %rdi, %r12 + 0xe9, 0xc5, 0x00, 0x00, 0x00, //0x00001f5e jmp LBB0_367 + //0x00001f63 LBB0_381 + 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001f63 leaq $-176(%rbp), %rdx + 0x48, 0x8b, 0x75, 0xb8, //0x00001f6a movq $-72(%rbp), %rsi + //0x00001f6e LBB0_382 + 0x48, 0x83, 0xfe, 0x10, //0x00001f6e cmpq $16, %rsi + 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x00001f72 jb LBB0_383 + 0xf3, 0x0f, 0x6f, 0x1f, //0x00001f78 movdqu (%rdi), %xmm3 + 0xf3, 0x0f, 0x7f, 0x1a, //0x00001f7c movdqu %xmm3, (%rdx) + 0x48, 0x83, 0xc7, 0x10, //0x00001f80 addq $16, %rdi + 0x48, 0x83, 0xc2, 0x10, //0x00001f84 addq $16, %rdx + 0x48, 0x83, 0xc6, 0xf0, //0x00001f88 addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x08, //0x00001f8c cmpq $8, %rsi + 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x00001f90 jae LBB0_390 + //0x00001f96 LBB0_384 + 0x48, 0x83, 0xfe, 0x04, //0x00001f96 cmpq $4, %rsi + 0x0f, 0x8c, 0x45, 0x00, 0x00, 0x00, //0x00001f9a jl LBB0_385 + //0x00001fa0 LBB0_391 + 0x8b, 0x0f, //0x00001fa0 movl (%rdi), %ecx + 0x89, 0x0a, //0x00001fa2 movl %ecx, (%rdx) + 0x48, 0x83, 0xc7, 0x04, //0x00001fa4 addq $4, %rdi + 0x48, 0x83, 0xc2, 0x04, //0x00001fa8 addq $4, %rdx + 0x48, 0x83, 0xc6, 0xfc, //0x00001fac addq $-4, %rsi + 0x48, 0x83, 0xfe, 0x02, //0x00001fb0 cmpq $2, %rsi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001fb4 jae LBB0_386 + 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00001fba jmp LBB0_387 + //0x00001fbf LBB0_383 + 0x48, 0x83, 0xfe, 0x08, //0x00001fbf cmpq $8, %rsi + 0x0f, 0x82, 0xcd, 0xff, 0xff, 0xff, //0x00001fc3 jb LBB0_384 + //0x00001fc9 LBB0_390 + 0x48, 0x8b, 0x0f, //0x00001fc9 movq (%rdi), %rcx + 0x48, 0x89, 0x0a, //0x00001fcc movq %rcx, (%rdx) + 0x48, 0x83, 0xc7, 0x08, //0x00001fcf addq $8, %rdi + 0x48, 0x83, 0xc2, 0x08, //0x00001fd3 addq $8, %rdx + 0x48, 0x83, 0xc6, 0xf8, //0x00001fd7 addq $-8, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x00001fdb cmpq $4, %rsi + 0x0f, 0x8d, 0xbb, 0xff, 0xff, 0xff, //0x00001fdf jge LBB0_391 + //0x00001fe5 LBB0_385 + 0x48, 0x83, 0xfe, 0x02, //0x00001fe5 cmpq $2, %rsi + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00001fe9 jb LBB0_387 + //0x00001fef LBB0_386 + 0x0f, 0xb7, 0x0f, //0x00001fef movzwl (%rdi), %ecx + 0x66, 0x89, 0x0a, //0x00001ff2 movw %cx, (%rdx) + 0x48, 0x83, 0xc7, 0x02, //0x00001ff5 addq $2, %rdi + 0x48, 0x83, 0xc2, 0x02, //0x00001ff9 addq $2, %rdx + 0x48, 0x83, 0xc6, 0xfe, //0x00001ffd addq $-2, %rsi + //0x00002001 LBB0_387 + 0x48, 0x89, 0xf9, //0x00002001 movq %rdi, %rcx + 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00002004 leaq $-176(%rbp), %r12 + 0x48, 0x85, 0xf6, //0x0000200b testq %rsi, %rsi + 0x66, 0x0f, 0x6f, 0xd6, //0x0000200e movdqa %xmm6, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x00002012 movdqa %xmm7, %xmm13 + 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x00002017 je LBB0_367 + 0x8a, 0x09, //0x0000201d movb (%rcx), %cl + 0x88, 0x0a, //0x0000201f movb %cl, (%rdx) + 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00002021 leaq $-176(%rbp), %r12 + //0x00002028 LBB0_367 + 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x00002028 movdqu (%r12), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x10, //0x0000202e movdqu $16(%r12), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x20, //0x00002035 movdqu $32(%r12), %xmm6 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x30, //0x0000203c movdqu $48(%r12), %xmm5 + 0x66, 0x0f, 0x6f, 0xdc, //0x00002043 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002047 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x0000204b pmovmskb %xmm3, %edx + 0x66, 0x0f, 0x6f, 0xdf, //0x0000204f movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002053 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00002057 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xde, //0x0000205b movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000205f pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002063 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x6f, 0xdd, //0x00002067 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000206b pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x0000206f pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe7, 0x30, //0x00002073 shlq $48, %rdi + 0x48, 0xc1, 0xe6, 0x20, //0x00002077 shlq $32, %rsi + 0x48, 0x09, 0xfe, //0x0000207b orq %rdi, %rsi + 0x48, 0xc1, 0xe1, 0x10, //0x0000207e shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x00002082 orq %rsi, %rcx + 0x48, 0x09, 0xca, //0x00002085 orq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x00002088 movq %rdx, %rcx + 0x4c, 0x09, 0xc9, //0x0000208b orq %r9, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x0000208e jne LBB0_369 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002094 movq $-1, %rdx + 0x45, 0x31, 0xc9, //0x0000209b xorl %r9d, %r9d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x0000209e jmp LBB0_370 + //0x000020a3 LBB0_369 + 0x4c, 0x89, 0xc9, //0x000020a3 movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x000020a6 notq %rcx + 0x48, 0x21, 0xd1, //0x000020a9 andq %rdx, %rcx + 0x4c, 0x8d, 0x1c, 0x09, //0x000020ac leaq (%rcx,%rcx), %r11 + 0x4d, 0x09, 0xcb, //0x000020b0 orq %r9, %r11 + 0x4c, 0x89, 0xdf, //0x000020b3 movq %r11, %rdi + 0x48, 0xf7, 0xd7, //0x000020b6 notq %rdi + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000020b9 movabsq $-6148914691236517206, %rsi + 0x48, 0x21, 0xf2, //0x000020c3 andq %rsi, %rdx + 0x48, 0x21, 0xfa, //0x000020c6 andq %rdi, %rdx + 0x45, 0x31, 0xc9, //0x000020c9 xorl %r9d, %r9d + 0x48, 0x01, 0xca, //0x000020cc addq %rcx, %rdx + 0x41, 0x0f, 0x92, 0xc1, //0x000020cf setb %r9b + 0x48, 0x01, 0xd2, //0x000020d3 addq %rdx, %rdx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000020d6 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xca, //0x000020e0 xorq %rcx, %rdx + 0x4c, 0x21, 0xda, //0x000020e3 andq %r11, %rdx + 0x48, 0xf7, 0xd2, //0x000020e6 notq %rdx + //0x000020e9 LBB0_370 + 0x66, 0x0f, 0x6f, 0xdd, //0x000020e9 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x000020ed pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x000020f1 pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x30, //0x000020f5 shlq $48, %rcx + 0x66, 0x0f, 0x6f, 0xde, //0x000020f9 movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x000020fd pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002101 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x20, //0x00002105 shlq $32, %rsi + 0x48, 0x09, 0xce, //0x00002109 orq %rcx, %rsi + 0x66, 0x0f, 0x6f, 0xdf, //0x0000210c movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002110 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00002114 pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x10, //0x00002118 shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x0000211c orq %rsi, %rcx + 0x66, 0x0f, 0x6f, 0xdc, //0x0000211f movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002123 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002127 pmovmskb %xmm3, %esi + 0x48, 0x09, 0xce, //0x0000212b orq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x0000212e andq %rdx, %rsi + 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x00002131 movq %rsi, %xmm3 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xda, 0x00, //0x00002136 pclmulqdq $0, %xmm10, %xmm3 + 0x66, 0x49, 0x0f, 0x7e, 0xdb, //0x0000213d movq %xmm3, %r11 + 0x4d, 0x31, 0xc3, //0x00002142 xorq %r8, %r11 + 0x66, 0x0f, 0x6f, 0xdc, //0x00002145 movdqa %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00002149 pcmpeqb %xmm13, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x0000214e pmovmskb %xmm3, %r13d + 0x66, 0x0f, 0x6f, 0xdf, //0x00002153 movdqa %xmm7, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00002157 pcmpeqb %xmm13, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x0000215c pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xde, //0x00002160 movdqa %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00002164 pcmpeqb %xmm13, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x00002169 pmovmskb %xmm3, %edx + 0x66, 0x0f, 0x6f, 0xdd, //0x0000216d movdqa %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00002171 pcmpeqb %xmm13, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002176 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x30, //0x0000217a shlq $48, %rsi + 0x48, 0xc1, 0xe2, 0x20, //0x0000217e shlq $32, %rdx + 0x48, 0x09, 0xf2, //0x00002182 orq %rsi, %rdx + 0x48, 0xc1, 0xe1, 0x10, //0x00002185 shlq $16, %rcx + 0x48, 0x09, 0xd1, //0x00002189 orq %rdx, %rcx + 0x49, 0x09, 0xcd, //0x0000218c orq %rcx, %r13 + 0x4d, 0x89, 0xd8, //0x0000218f movq %r11, %r8 + 0x49, 0xf7, 0xd0, //0x00002192 notq %r8 + 0x4d, 0x21, 0xc5, //0x00002195 andq %r8, %r13 + 0x66, 0x41, 0x0f, 0x74, 0xe0, //0x00002198 pcmpeqb %xmm8, %xmm4 + 0x66, 0x0f, 0xd7, 0xd4, //0x0000219d pmovmskb %xmm4, %edx + 0x66, 0x41, 0x0f, 0x74, 0xf8, //0x000021a1 pcmpeqb %xmm8, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x000021a6 pmovmskb %xmm7, %esi + 0x66, 0x41, 0x0f, 0x74, 0xf0, //0x000021aa pcmpeqb %xmm8, %xmm6 + 0x66, 0x0f, 0xd7, 0xce, //0x000021af pmovmskb %xmm6, %ecx + 0x66, 0x41, 0x0f, 0x74, 0xe8, //0x000021b3 pcmpeqb %xmm8, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xfd, //0x000021b8 pmovmskb %xmm5, %r15d + 0x49, 0xc1, 0xe7, 0x30, //0x000021bd shlq $48, %r15 + 0x48, 0xc1, 0xe1, 0x20, //0x000021c1 shlq $32, %rcx + 0x4c, 0x09, 0xf9, //0x000021c5 orq %r15, %rcx + 0x48, 0xc1, 0xe6, 0x10, //0x000021c8 shlq $16, %rsi + 0x48, 0x09, 0xce, //0x000021cc orq %rcx, %rsi + 0x48, 0x09, 0xf2, //0x000021cf orq %rsi, %rdx + 0x4c, 0x21, 0xc2, //0x000021d2 andq %r8, %rdx + 0x0f, 0x84, 0x8c, 0x00, 0x00, 0x00, //0x000021d5 je LBB0_374 + 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x000021db movabsq $3689348814741910323, %r8 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000021e5 .p2align 4, 0x90 + //0x000021f0 LBB0_372 + 0x48, 0x8d, 0x7a, 0xff, //0x000021f0 leaq $-1(%rdx), %rdi + 0x48, 0x89, 0xf9, //0x000021f4 movq %rdi, %rcx + 0x4c, 0x21, 0xe9, //0x000021f7 andq %r13, %rcx + 0x48, 0x89, 0xce, //0x000021fa movq %rcx, %rsi + 0x48, 0xd1, 0xee, //0x000021fd shrq %rsi + 0x48, 0xbb, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002200 movabsq $6148914691236517205, %rbx + 0x48, 0x21, 0xde, //0x0000220a andq %rbx, %rsi + 0x48, 0x29, 0xf1, //0x0000220d subq %rsi, %rcx + 0x48, 0x89, 0xce, //0x00002210 movq %rcx, %rsi + 0x4c, 0x21, 0xc6, //0x00002213 andq %r8, %rsi + 0x48, 0xc1, 0xe9, 0x02, //0x00002216 shrq $2, %rcx + 0x4c, 0x21, 0xc1, //0x0000221a andq %r8, %rcx + 0x48, 0x01, 0xf1, //0x0000221d addq %rsi, %rcx 0x48, 0x89, 0xce, //0x00002220 movq %rcx, %rsi - 0x4c, 0x21, 0xc6, //0x00002223 andq %r8, %rsi - 0x48, 0xc1, 0xe9, 0x02, //0x00002226 shrq $2, %rcx - 0x4c, 0x21, 0xc1, //0x0000222a andq %r8, %rcx - 0x48, 0x01, 0xf1, //0x0000222d addq %rsi, %rcx - 0x48, 0x89, 0xce, //0x00002230 movq %rcx, %rsi - 0x48, 0xc1, 0xee, 0x04, //0x00002233 shrq $4, %rsi - 0x48, 0x01, 0xce, //0x00002237 addq %rcx, %rsi - 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000223a movabsq $1085102592571150095, %rcx - 0x48, 0x21, 0xce, //0x00002244 andq %rcx, %rsi - 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002247 movabsq $72340172838076673, %rcx - 0x48, 0x0f, 0xaf, 0xf1, //0x00002251 imulq %rcx, %rsi - 0x48, 0xc1, 0xee, 0x38, //0x00002255 shrq $56, %rsi - 0x4c, 0x01, 0xce, //0x00002259 addq %r9, %rsi - 0x4c, 0x39, 0xf6, //0x0000225c cmpq %r14, %rsi - 0x0f, 0x86, 0x94, 0x00, 0x00, 0x00, //0x0000225f jbe LBB0_382 - 0x49, 0x83, 0xc6, 0x01, //0x00002265 addq $1, %r14 - 0x48, 0x21, 0xfa, //0x00002269 andq %rdi, %rdx - 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x0000226c jne LBB0_362 - 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00002272 jmp LBB0_365 - //0x00002277 LBB0_364 - 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00002277 movabsq $3689348814741910323, %r8 - //0x00002281 LBB0_365 - 0x49, 0xc1, 0xfb, 0x3f, //0x00002281 sarq $63, %r11 - 0x4c, 0x89, 0xe9, //0x00002285 movq %r13, %rcx - 0x48, 0xd1, 0xe9, //0x00002288 shrq %rcx - 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000228b movabsq $6148914691236517205, %rdx - 0x48, 0x21, 0xd1, //0x00002295 andq %rdx, %rcx - 0x49, 0x29, 0xcd, //0x00002298 subq %rcx, %r13 + 0x48, 0xc1, 0xee, 0x04, //0x00002223 shrq $4, %rsi + 0x48, 0x01, 0xce, //0x00002227 addq %rcx, %rsi + 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000222a movabsq $1085102592571150095, %rcx + 0x48, 0x21, 0xce, //0x00002234 andq %rcx, %rsi + 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002237 movabsq $72340172838076673, %rcx + 0x48, 0x0f, 0xaf, 0xf1, //0x00002241 imulq %rcx, %rsi + 0x48, 0xc1, 0xee, 0x38, //0x00002245 shrq $56, %rsi + 0x4c, 0x01, 0xd6, //0x00002249 addq %r10, %rsi + 0x4c, 0x39, 0xf6, //0x0000224c cmpq %r14, %rsi + 0x0f, 0x86, 0x94, 0x00, 0x00, 0x00, //0x0000224f jbe LBB0_392 + 0x49, 0x83, 0xc6, 0x01, //0x00002255 addq $1, %r14 + 0x48, 0x21, 0xfa, //0x00002259 andq %rdi, %rdx + 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x0000225c jne LBB0_372 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00002262 jmp LBB0_375 + //0x00002267 LBB0_374 + 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00002267 movabsq $3689348814741910323, %r8 + //0x00002271 LBB0_375 + 0x49, 0xc1, 0xfb, 0x3f, //0x00002271 sarq $63, %r11 + 0x4c, 0x89, 0xe9, //0x00002275 movq %r13, %rcx + 0x48, 0xd1, 0xe9, //0x00002278 shrq %rcx + 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000227b movabsq $6148914691236517205, %rdx + 0x48, 0x21, 0xd1, //0x00002285 andq %rdx, %rcx + 0x49, 0x29, 0xcd, //0x00002288 subq %rcx, %r13 + 0x4c, 0x89, 0xe9, //0x0000228b movq %r13, %rcx + 0x4c, 0x21, 0xc1, //0x0000228e andq %r8, %rcx + 0x49, 0xc1, 0xed, 0x02, //0x00002291 shrq $2, %r13 + 0x4d, 0x21, 0xc5, //0x00002295 andq %r8, %r13 + 0x49, 0x01, 0xcd, //0x00002298 addq %rcx, %r13 0x4c, 0x89, 0xe9, //0x0000229b movq %r13, %rcx - 0x4c, 0x21, 0xc1, //0x0000229e andq %r8, %rcx - 0x49, 0xc1, 0xed, 0x02, //0x000022a1 shrq $2, %r13 - 0x4d, 0x21, 0xc5, //0x000022a5 andq %r8, %r13 - 0x49, 0x01, 0xcd, //0x000022a8 addq %rcx, %r13 - 0x4c, 0x89, 0xe9, //0x000022ab movq %r13, %rcx - 0x48, 0xc1, 0xe9, 0x04, //0x000022ae shrq $4, %rcx - 0x4c, 0x01, 0xe9, //0x000022b2 addq %r13, %rcx - 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x000022b5 movabsq $1085102592571150095, %rdx - 0x48, 0x21, 0xd1, //0x000022bf andq %rdx, %rcx - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000022c2 movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xca, //0x000022cc imulq %rdx, %rcx - 0x48, 0xc1, 0xe9, 0x38, //0x000022d0 shrq $56, %rcx - 0x49, 0x01, 0xc9, //0x000022d4 addq %rcx, %r9 - 0x49, 0x83, 0xc4, 0x40, //0x000022d7 addq $64, %r12 - 0x48, 0x8b, 0x55, 0xc0, //0x000022db movq $-64(%rbp), %rdx - 0x48, 0x83, 0xc2, 0xc0, //0x000022df addq $-64, %rdx - 0x4d, 0x89, 0xd8, //0x000022e3 movq %r11, %r8 - 0x48, 0x83, 0xfa, 0x40, //0x000022e6 cmpq $64, %rdx - 0x48, 0x89, 0x55, 0xc0, //0x000022ea movq %rdx, $-64(%rbp) - 0x0f, 0x8d, 0x4a, 0xfd, 0xff, 0xff, //0x000022ee jge LBB0_357 - 0xe9, 0xea, 0xfb, 0xff, 0xff, //0x000022f4 jmp LBB0_366 - //0x000022f9 LBB0_382 - 0x48, 0x8b, 0x75, 0xa8, //0x000022f9 movq $-88(%rbp), %rsi - 0x48, 0x8b, 0x4e, 0x08, //0x000022fd movq $8(%rsi), %rcx - 0x48, 0x0f, 0xbc, 0xd2, //0x00002301 bsfq %rdx, %rdx - 0x48, 0x2b, 0x55, 0xc0, //0x00002305 subq $-64(%rbp), %rdx - 0x48, 0x01, 0xd1, //0x00002309 addq %rdx, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x0000230c addq $1, %rcx - 0x4c, 0x8b, 0x75, 0xd0, //0x00002310 movq $-48(%rbp), %r14 - 0x49, 0x89, 0x0e, //0x00002314 movq %rcx, (%r14) - 0x48, 0x8b, 0x56, 0x08, //0x00002317 movq $8(%rsi), %rdx - 0x48, 0x39, 0xd1, //0x0000231b cmpq %rdx, %rcx - 0x48, 0x0f, 0x47, 0xca, //0x0000231e cmovaq %rdx, %rcx - 0x49, 0x89, 0x0e, //0x00002322 movq %rcx, (%r14) - 0x0f, 0x87, 0x1c, 0x17, 0x00, 0x00, //0x00002325 ja LBB0_638 - 0x48, 0x8b, 0x45, 0xb0, //0x0000232b movq $-80(%rbp), %rax - 0x48, 0x85, 0xc0, //0x0000232f testq %rax, %rax - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002332 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002336 movabsq $4294977024, %r11 - 0x0f, 0x8f, 0x7a, 0xde, 0xff, 0xff, //0x00002340 jg LBB0_4 - 0xe9, 0xad, 0x16, 0x00, 0x00, //0x00002346 jmp LBB0_606 - //0x0000234b LBB0_605 - 0x66, 0x0f, 0xbc, 0xce, //0x0000234b bsfw %si, %cx - 0x0f, 0xb7, 0xc9, //0x0000234f movzwl %cx, %ecx - 0x48, 0x29, 0xd1, //0x00002352 subq %rdx, %rcx - 0x49, 0x89, 0x0e, //0x00002355 movq %rcx, (%r14) - 0x48, 0x85, 0xc0, //0x00002358 testq %rax, %rax - 0x0f, 0x8f, 0x5f, 0xde, 0xff, 0xff, //0x0000235b jg LBB0_4 - 0xe9, 0x92, 0x16, 0x00, 0x00, //0x00002361 jmp LBB0_606 - //0x00002366 LBB0_384 - 0x49, 0x8d, 0x57, 0xff, //0x00002366 leaq $-1(%r15), %rdx - 0x49, 0x39, 0xd0, //0x0000236a cmpq %rdx, %r8 - 0x49, 0xf7, 0xd7, //0x0000236d notq %r15 - 0x4d, 0x0f, 0x45, 0xfb, //0x00002370 cmovneq %r11, %r15 - 0x84, 0xc9, //0x00002374 testb %cl, %cl - 0x4d, 0x0f, 0x44, 0xfb, //0x00002376 cmoveq %r11, %r15 - 0x4d, 0x89, 0xfd, //0x0000237a movq %r15, %r13 - 0xe9, 0x60, 0xde, 0xff, 0xff, //0x0000237d jmp LBB0_2 - //0x00002382 LBB0_385 - 0x48, 0x89, 0xc6, //0x00002382 movq %rax, %rsi - 0x48, 0x29, 0xd6, //0x00002385 subq %rdx, %rsi - 0x48, 0x89, 0xd1, //0x00002388 movq %rdx, %rcx - 0x0f, 0x84, 0xb4, 0x18, 0x00, 0x00, //0x0000238b je LBB0_644 - 0x48, 0x83, 0xfe, 0x40, //0x00002391 cmpq $64, %rsi - 0x0f, 0x82, 0xeb, 0x0c, 0x00, 0x00, //0x00002395 jb LBB0_503 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000239b movq $-1, $-56(%rbp) - 0x48, 0x89, 0xc8, //0x000023a3 movq %rcx, %rax - 0x31, 0xdb, //0x000023a6 xorl %ebx, %ebx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000023a8 .p2align 4, 0x90 - //0x000023b0 LBB0_388 - 0x48, 0x89, 0x75, 0xc0, //0x000023b0 movq %rsi, $-64(%rbp) - 0x49, 0x89, 0xd9, //0x000023b4 movq %rbx, %r9 - 0xf3, 0x41, 0x0f, 0x6f, 0x2c, 0x04, //0x000023b7 movdqu (%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x04, 0x10, //0x000023bd movdqu $16(%r12,%rax), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x20, //0x000023c4 movdqu $32(%r12,%rax), %xmm6 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x30, //0x000023cb movdqu $48(%r12,%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xdd, //0x000023d2 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000023d6 pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x000023da pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x6f, 0xdf, //0x000023df movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000023e3 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x000023e7 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xde, //0x000023eb movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000023ef pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xf3, //0x000023f3 pmovmskb %xmm3, %r14d - 0x66, 0x0f, 0x6f, 0xdc, //0x000023f8 movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000023fc pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x00002400 pmovmskb %xmm3, %r15d - 0x66, 0x0f, 0x6f, 0xdd, //0x00002405 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002409 pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x0000240d pmovmskb %xmm3, %r13d - 0x66, 0x0f, 0x6f, 0xdf, //0x00002412 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002416 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xdb, //0x0000241a pmovmskb %xmm3, %ebx - 0x66, 0x0f, 0x6f, 0xde, //0x0000241e movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002422 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002426 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdc, //0x0000242a movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000242e pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x00002432 pmovmskb %xmm3, %r10d - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002437 movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdf, //0x0000243c pcmpgtb %xmm7, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xfa, //0x00002440 pcmpgtb %xmm10, %xmm7 - 0x66, 0x0f, 0xdb, 0xfb, //0x00002445 pand %xmm3, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x00002449 pmovmskb %xmm7, %edi - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x0000244d movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xde, //0x00002452 pcmpgtb %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xf2, //0x00002456 pcmpgtb %xmm10, %xmm6 - 0x66, 0x0f, 0xdb, 0xf3, //0x0000245b pand %xmm3, %xmm6 - 0x66, 0x0f, 0xd7, 0xd6, //0x0000245f pmovmskb %xmm6, %edx - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002463 movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x00002468 pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x0000246c pcmpgtb %xmm10, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x00002471 pand %xmm3, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xc4, //0x00002475 pmovmskb %xmm4, %r8d - 0x49, 0xc1, 0xe7, 0x30, //0x0000247a shlq $48, %r15 - 0x49, 0xc1, 0xe6, 0x20, //0x0000247e shlq $32, %r14 - 0x4d, 0x09, 0xfe, //0x00002482 orq %r15, %r14 - 0x48, 0xc1, 0xe1, 0x10, //0x00002485 shlq $16, %rcx - 0x4c, 0x09, 0xf1, //0x00002489 orq %r14, %rcx - 0x49, 0x09, 0xcb, //0x0000248c orq %rcx, %r11 - 0x49, 0xc1, 0xe2, 0x30, //0x0000248f shlq $48, %r10 - 0x48, 0xc1, 0xe6, 0x20, //0x00002493 shlq $32, %rsi - 0x4c, 0x09, 0xd6, //0x00002497 orq %r10, %rsi - 0x48, 0xc1, 0xe3, 0x10, //0x0000249a shlq $16, %rbx - 0x48, 0x09, 0xf3, //0x0000249e orq %rsi, %rbx - 0x49, 0xc1, 0xe0, 0x30, //0x000024a1 shlq $48, %r8 - 0x48, 0xc1, 0xe2, 0x20, //0x000024a5 shlq $32, %rdx - 0x4c, 0x09, 0xc2, //0x000024a9 orq %r8, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x000024ac shlq $16, %rdi - 0x48, 0x09, 0xd7, //0x000024b0 orq %rdx, %rdi - 0x49, 0x09, 0xdd, //0x000024b3 orq %rbx, %r13 - 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x000024b6 jne LBB0_405 - 0x4d, 0x85, 0xc9, //0x000024bc testq %r9, %r9 - 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x000024bf jne LBB0_407 - 0x31, 0xdb, //0x000024c5 xorl %ebx, %ebx - 0x4c, 0x8b, 0x75, 0xd0, //0x000024c7 movq $-48(%rbp), %r14 - //0x000024cb LBB0_391 - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x000024cb movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdd, //0x000024d0 pcmpgtb %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xea, //0x000024d4 pcmpgtb %xmm10, %xmm5 - 0x66, 0x0f, 0xdb, 0xeb, //0x000024d9 pand %xmm3, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x000024dd pmovmskb %xmm5, %ecx - 0x48, 0x09, 0xcf, //0x000024e1 orq %rcx, %rdi - 0x4d, 0x85, 0xdb, //0x000024e4 testq %r11, %r11 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000024e7 movq $-72(%rbp), %r13 - 0x0f, 0x85, 0x93, 0x00, 0x00, 0x00, //0x000024eb jne LBB0_409 - 0x48, 0x85, 0xff, //0x000024f1 testq %rdi, %rdi - 0x0f, 0x85, 0xaf, 0x16, 0x00, 0x00, //0x000024f4 jne LBB0_632 - 0x48, 0x8b, 0x75, 0xc0, //0x000024fa movq $-64(%rbp), %rsi - 0x48, 0x83, 0xc6, 0xc0, //0x000024fe addq $-64, %rsi - 0x48, 0x83, 0xc0, 0x40, //0x00002502 addq $64, %rax - 0x48, 0x83, 0xfe, 0x3f, //0x00002506 cmpq $63, %rsi - 0x0f, 0x87, 0xa0, 0xfe, 0xff, 0xff, //0x0000250a ja LBB0_388 - 0xe9, 0xb7, 0x07, 0x00, 0x00, //0x00002510 jmp LBB0_394 - //0x00002515 LBB0_405 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00002515 cmpq $-1, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x0000251a movq $-48(%rbp), %r14 - 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x0000251e jne LBB0_408 - 0x49, 0x0f, 0xbc, 0xcd, //0x00002524 bsfq %r13, %rcx - 0x48, 0x01, 0xc1, //0x00002528 addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x0000252b movq %rcx, $-56(%rbp) - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x0000252f jmp LBB0_408 - //0x00002534 LBB0_407 - 0x4c, 0x8b, 0x75, 0xd0, //0x00002534 movq $-48(%rbp), %r14 - //0x00002538 LBB0_408 - 0x4c, 0x89, 0xc9, //0x00002538 movq %r9, %rcx - 0x48, 0xf7, 0xd1, //0x0000253b notq %rcx - 0x4c, 0x21, 0xe9, //0x0000253e andq %r13, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x00002541 leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xca, //0x00002545 orq %r9, %rdx - 0x48, 0x89, 0xd6, //0x00002548 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x0000254b notq %rsi - 0x4c, 0x21, 0xee, //0x0000254e andq %r13, %rsi - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002551 movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xde, //0x0000255b andq %rbx, %rsi - 0x31, 0xdb, //0x0000255e xorl %ebx, %ebx - 0x48, 0x01, 0xce, //0x00002560 addq %rcx, %rsi - 0x0f, 0x92, 0xc3, //0x00002563 setb %bl - 0x48, 0x01, 0xf6, //0x00002566 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002569 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00002573 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00002576 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00002579 notq %rsi - 0x49, 0x21, 0xf3, //0x0000257c andq %rsi, %r11 - 0xe9, 0x47, 0xff, 0xff, 0xff, //0x0000257f jmp LBB0_391 - //0x00002584 LBB0_409 - 0x49, 0x0f, 0xbc, 0xcb, //0x00002584 bsfq %r11, %rcx - 0x48, 0x85, 0xff, //0x00002588 testq %rdi, %rdi - 0x0f, 0x84, 0x8d, 0x00, 0x00, 0x00, //0x0000258b je LBB0_423 - 0x48, 0x0f, 0xbc, 0xd7, //0x00002591 bsfq %rdi, %rdx - 0xe9, 0x89, 0x00, 0x00, 0x00, //0x00002595 jmp LBB0_424 - //0x0000259a LBB0_411 - 0x41, 0x89, 0xcb, //0x0000259a movl %ecx, %r11d - 0x4d, 0x01, 0xc3, //0x0000259d addq %r8, %r11 - 0x49, 0x01, 0xdb, //0x000025a0 addq %rbx, %r11 - 0xe9, 0x06, 0x00, 0x00, 0x00, //0x000025a3 jmp LBB0_413 - //0x000025a8 LBB0_412 - 0x48, 0x01, 0xda, //0x000025a8 addq %rbx, %rdx - 0x49, 0x89, 0xd3, //0x000025ab movq %rdx, %r11 - //0x000025ae LBB0_413 - 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x000025ae movq $-1, %rbx - 0x4d, 0x85, 0xf6, //0x000025b5 testq %r14, %r14 - 0x0f, 0x84, 0x18, 0x16, 0x00, 0x00, //0x000025b8 je LBB0_636 - 0x4d, 0x85, 0xed, //0x000025be testq %r13, %r13 - 0x0f, 0x84, 0x0f, 0x16, 0x00, 0x00, //0x000025c1 je LBB0_636 - 0x4d, 0x85, 0xd2, //0x000025c7 testq %r10, %r10 - 0x0f, 0x84, 0x06, 0x16, 0x00, 0x00, //0x000025ca je LBB0_636 - 0x4d, 0x29, 0xc3, //0x000025d0 subq %r8, %r11 - 0x49, 0x8d, 0x4b, 0xff, //0x000025d3 leaq $-1(%r11), %rcx - 0x49, 0x39, 0xce, //0x000025d7 cmpq %rcx, %r14 - 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x000025da je LBB0_422 - 0x49, 0x39, 0xcd, //0x000025e0 cmpq %rcx, %r13 - 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x000025e3 je LBB0_422 - 0x49, 0x39, 0xca, //0x000025e9 cmpq %rcx, %r10 - 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x000025ec je LBB0_422 - 0x4d, 0x85, 0xed, //0x000025f2 testq %r13, %r13 - 0x0f, 0x8e, 0x9a, 0x00, 0x00, 0x00, //0x000025f5 jle LBB0_430 - 0x49, 0x8d, 0x4d, 0xff, //0x000025fb leaq $-1(%r13), %rcx - 0x49, 0x39, 0xca, //0x000025ff cmpq %rcx, %r10 - 0x0f, 0x84, 0x8d, 0x00, 0x00, 0x00, //0x00002602 je LBB0_430 - 0x49, 0xf7, 0xd5, //0x00002608 notq %r13 - 0x4c, 0x89, 0xeb, //0x0000260b movq %r13, %rbx - 0xe9, 0x0c, 0x06, 0x00, 0x00, //0x0000260e jmp LBB0_468 - //0x00002613 LBB0_422 - 0x49, 0xf7, 0xdb, //0x00002613 negq %r11 - 0x4c, 0x89, 0xdb, //0x00002616 movq %r11, %rbx - 0xe9, 0x01, 0x06, 0x00, 0x00, //0x00002619 jmp LBB0_468 - //0x0000261e LBB0_423 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000261e movl $64, %edx - //0x00002623 LBB0_424 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002623 movabsq $4294977024, %r11 - 0x48, 0x39, 0xca, //0x0000262d cmpq %rcx, %rdx - 0x0f, 0x82, 0xb6, 0x15, 0x00, 0x00, //0x00002630 jb LBB0_640 - 0x48, 0x01, 0xc8, //0x00002636 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002639 addq $1, %rax - //0x0000263d LBB0_426 - 0x48, 0x85, 0xc0, //0x0000263d testq %rax, %rax - 0x0f, 0x89, 0x49, 0xec, 0xff, 0xff, //0x00002640 jns LBB0_224 - 0xe9, 0x1a, 0x14, 0x00, 0x00, //0x00002646 jmp LBB0_615 - //0x0000264b LBB0_132 - 0x4d, 0x85, 0xdb, //0x0000264b testq %r11, %r11 - 0x0f, 0x85, 0x9e, 0x0a, 0x00, 0x00, //0x0000264e jne LBB0_508 - 0x49, 0x01, 0xd2, //0x00002654 addq %rdx, %r10 - 0x49, 0x29, 0xd1, //0x00002657 subq %rdx, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x0000265a movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000265e movabsq $4294977024, %r11 - //0x00002668 LBB0_134 - 0x4d, 0x85, 0xc9, //0x00002668 testq %r9, %r9 - 0x0f, 0x8f, 0xee, 0x0a, 0x00, 0x00, //0x0000266b jg LBB0_512 - 0xe9, 0xd1, 0x13, 0x00, 0x00, //0x00002671 jmp LBB0_638 - //0x00002676 LBB0_428 - 0x4c, 0x29, 0xe0, //0x00002676 subq %r12, %rax - 0x48, 0x01, 0xd0, //0x00002679 addq %rdx, %rax - 0x49, 0x89, 0x06, //0x0000267c movq %rax, (%r14) - 0x48, 0x85, 0xf6, //0x0000267f testq %rsi, %rsi - 0x0f, 0x8f, 0x38, 0xdb, 0xff, 0xff, //0x00002682 jg LBB0_4 - 0xe9, 0xcc, 0x13, 0x00, 0x00, //0x00002688 jmp LBB0_614 - //0x0000268d LBB0_429 - 0x0f, 0xbc, 0xcb, //0x0000268d bsfl %ebx, %ecx - 0xe9, 0x8a, 0x03, 0x00, 0x00, //0x00002690 jmp LBB0_437 - //0x00002695 LBB0_430 - 0x4c, 0x89, 0xf1, //0x00002695 movq %r14, %rcx - 0x4c, 0x09, 0xd1, //0x00002698 orq %r10, %rcx - 0x0f, 0x99, 0xc2, //0x0000269b setns %dl - 0x0f, 0x88, 0xd4, 0x01, 0x00, 0x00, //0x0000269e js LBB0_434 - 0x4d, 0x39, 0xd6, //0x000026a4 cmpq %r10, %r14 - 0x0f, 0x8c, 0xcb, 0x01, 0x00, 0x00, //0x000026a7 jl LBB0_434 - 0x49, 0xf7, 0xd6, //0x000026ad notq %r14 - 0x4c, 0x89, 0xf3, //0x000026b0 movq %r14, %rbx - 0xe9, 0x67, 0x05, 0x00, 0x00, //0x000026b3 jmp LBB0_468 - //0x000026b8 LBB0_433 - 0x48, 0x8b, 0x75, 0xc0, //0x000026b8 movq $-64(%rbp), %rsi - 0x49, 0x01, 0xf4, //0x000026bc addq %rsi, %r12 - 0x49, 0x29, 0xcc, //0x000026bf subq %rcx, %r12 - 0x49, 0x29, 0xfc, //0x000026c2 subq %rdi, %r12 - 0x49, 0x83, 0xc4, 0xfe, //0x000026c5 addq $-2, %r12 - 0x4d, 0x89, 0xe5, //0x000026c9 movq %r12, %r13 - 0xe9, 0x11, 0xdb, 0xff, 0xff, //0x000026cc jmp LBB0_2 - //0x000026d1 LBB0_154 - 0x4d, 0x85, 0xdb, //0x000026d1 testq %r11, %r11 - 0x0f, 0x85, 0x66, 0x0c, 0x00, 0x00, //0x000026d4 jne LBB0_535 - 0x49, 0x01, 0xd2, //0x000026da addq %rdx, %r10 - 0x49, 0x29, 0xd1, //0x000026dd subq %rdx, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x000026e0 movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000026e4 movabsq $4294977024, %r11 - //0x000026ee LBB0_156 - 0x4d, 0x85, 0xc9, //0x000026ee testq %r9, %r9 - 0x0f, 0x8f, 0xa7, 0x0c, 0x00, 0x00, //0x000026f1 jg LBB0_539 - 0xe9, 0x4b, 0x13, 0x00, 0x00, //0x000026f7 jmp LBB0_638 - //0x000026fc LBB0_50 - 0x4c, 0x01, 0xe0, //0x000026fc addq %r12, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x000026ff movq $-48(%rbp), %r14 - 0x49, 0x83, 0xf9, 0x20, //0x00002703 cmpq $32, %r9 - 0x0f, 0x82, 0x9f, 0x07, 0x00, 0x00, //0x00002707 jb LBB0_485 - //0x0000270d LBB0_51 - 0xf3, 0x0f, 0x6f, 0x18, //0x0000270d movdqu (%rax), %xmm3 - 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00002711 movdqu $16(%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x00002716 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x0000271a pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x0000271e pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x00002722 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002726 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x0000272a pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x74, 0xd9, //0x0000272e pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002732 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x74, 0xe1, //0x00002736 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xfc, //0x0000273a pmovmskb %xmm4, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x0000273e shlq $16, %rcx - 0x48, 0x09, 0xca, //0x00002742 orq %rcx, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x00002745 shlq $16, %rdi - 0x48, 0x09, 0xfe, //0x00002749 orq %rdi, %rsi - 0x0f, 0x85, 0x45, 0x0a, 0x00, 0x00, //0x0000274c jne LBB0_515 - 0x4d, 0x85, 0xc0, //0x00002752 testq %r8, %r8 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002755 movabsq $4294977024, %r11 - 0x0f, 0x85, 0x5c, 0x0a, 0x00, 0x00, //0x0000275f jne LBB0_517 - 0x45, 0x31, 0xc0, //0x00002765 xorl %r8d, %r8d - 0x48, 0x85, 0xd2, //0x00002768 testq %rdx, %rdx - 0x0f, 0x84, 0xac, 0x0a, 0x00, 0x00, //0x0000276b je LBB0_519 - //0x00002771 LBB0_54 - 0x48, 0x0f, 0xbc, 0xca, //0x00002771 bsfq %rdx, %rcx - 0x4c, 0x29, 0xe0, //0x00002775 subq %r12, %rax - 0x48, 0x01, 0xc8, //0x00002778 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x0000277b addq $1, %rax - 0xe9, 0x02, 0xeb, 0xff, 0xff, //0x0000277f jmp LBB0_223 - //0x00002784 LBB0_166 - 0x4c, 0x8b, 0x65, 0xc0, //0x00002784 movq $-64(%rbp), %r12 - 0x4c, 0x01, 0xe0, //0x00002788 addq %r12, %rax - 0x49, 0x83, 0xfe, 0x20, //0x0000278b cmpq $32, %r14 - 0x0f, 0x82, 0x41, 0x07, 0x00, 0x00, //0x0000278f jb LBB0_487 - //0x00002795 LBB0_167 - 0xf3, 0x0f, 0x6f, 0x20, //0x00002795 movdqu (%rax), %xmm4 - 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00002799 movdqu $16(%rax), %xmm3 - 0x66, 0x0f, 0x6f, 0xec, //0x0000279e movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000027a2 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x000027a6 pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x6f, 0xeb, //0x000027aa movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000027ae pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x000027b2 pmovmskb %xmm5, %edi - 0x66, 0x0f, 0x6f, 0xec, //0x000027b6 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x000027ba pcmpeqb %xmm1, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x000027be pmovmskb %xmm5, %r9d - 0x66, 0x0f, 0x6f, 0xeb, //0x000027c3 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x000027c7 pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x000027cb pmovmskb %xmm5, %edx - 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x000027cf movdqa %xmm12, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x000027d4 pcmpgtb %xmm3, %xmm5 - 0x66, 0x41, 0x0f, 0x64, 0xda, //0x000027d8 pcmpgtb %xmm10, %xmm3 - 0x66, 0x0f, 0xdb, 0xdd, //0x000027dd pand %xmm5, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x000027e1 pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe7, 0x10, //0x000027e5 shlq $16, %rdi - 0x48, 0x09, 0xf9, //0x000027e9 orq %rdi, %rcx - 0x48, 0xc1, 0xe2, 0x10, //0x000027ec shlq $16, %rdx - 0x48, 0xc1, 0xe6, 0x10, //0x000027f0 shlq $16, %rsi - 0x49, 0x09, 0xd1, //0x000027f4 orq %rdx, %r9 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000027f7 movabsq $4294977024, %r11 - 0x0f, 0x85, 0x0c, 0x0b, 0x00, 0x00, //0x00002801 jne LBB0_533 - 0x48, 0x85, 0xdb, //0x00002807 testq %rbx, %rbx - 0x4c, 0x8b, 0x6d, 0xb8, //0x0000280a movq $-72(%rbp), %r13 - 0x0f, 0x85, 0xda, 0x0b, 0x00, 0x00, //0x0000280e jne LBB0_542 - 0x31, 0xdb, //0x00002814 xorl %ebx, %ebx - //0x00002816 LBB0_170 - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002816 movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x0000281b pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x0000281f pcmpgtb %xmm10, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x00002824 pand %xmm3, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x00002828 pmovmskb %xmm4, %edx - 0x48, 0x09, 0xd6, //0x0000282c orq %rdx, %rsi - 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000282f movl $64, %edx - 0xbf, 0x40, 0x00, 0x00, 0x00, //0x00002834 movl $64, %edi - 0x48, 0x85, 0xc9, //0x00002839 testq %rcx, %rcx - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x0000283c je LBB0_172 - 0x48, 0x0f, 0xbc, 0xf9, //0x00002842 bsfq %rcx, %rdi - //0x00002846 LBB0_172 - 0x48, 0x85, 0xf6, //0x00002846 testq %rsi, %rsi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002849 je LBB0_174 - 0x48, 0x0f, 0xbc, 0xd6, //0x0000284f bsfq %rsi, %rdx - //0x00002853 LBB0_174 - 0x48, 0x85, 0xc9, //0x00002853 testq %rcx, %rcx - 0x0f, 0x84, 0xd2, 0x01, 0x00, 0x00, //0x00002856 je LBB0_438 - 0x48, 0x39, 0xfa, //0x0000285c cmpq %rdi, %rdx - 0x0f, 0x82, 0x06, 0x14, 0x00, 0x00, //0x0000285f jb LBB0_649 - 0x4c, 0x29, 0xe0, //0x00002865 subq %r12, %rax - 0x48, 0x01, 0xf8, //0x00002868 addq %rdi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x0000286b addq $1, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x0000286f movq $-48(%rbp), %r14 - 0xe9, 0x0e, 0xea, 0xff, 0xff, //0x00002873 jmp LBB0_223 - //0x00002878 LBB0_434 - 0x49, 0x8d, 0x4a, 0xff, //0x00002878 leaq $-1(%r10), %rcx - 0x49, 0x39, 0xce, //0x0000287c cmpq %rcx, %r14 - 0x49, 0xf7, 0xd2, //0x0000287f notq %r10 - 0x4d, 0x0f, 0x45, 0xd3, //0x00002882 cmovneq %r11, %r10 - 0x84, 0xd2, //0x00002886 testb %dl, %dl - 0x4d, 0x0f, 0x44, 0xd3, //0x00002888 cmoveq %r11, %r10 - 0x4c, 0x89, 0xd3, //0x0000288c movq %r10, %rbx - 0xe9, 0x8b, 0x03, 0x00, 0x00, //0x0000288f jmp LBB0_468 - //0x00002894 LBB0_435 - 0x89, 0xd1, //0x00002894 movl %edx, %ecx - 0xe9, 0x84, 0x01, 0x00, 0x00, //0x00002896 jmp LBB0_437 - //0x0000289b LBB0_73 - 0x4c, 0x01, 0xe0, //0x0000289b addq %r12, %rax - 0x49, 0x83, 0xf9, 0x20, //0x0000289e cmpq $32, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x000028a2 movq $-48(%rbp), %r14 - 0x0f, 0x82, 0xc3, 0x06, 0x00, 0x00, //0x000028a6 jb LBB0_493 - //0x000028ac LBB0_74 - 0xf3, 0x0f, 0x6f, 0x18, //0x000028ac movdqu (%rax), %xmm3 - 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x000028b0 movdqu $16(%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x000028b5 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000028b9 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x000028bd pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x000028c1 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000028c5 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x000028c9 pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x74, 0xd9, //0x000028cd pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x000028d1 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x74, 0xe1, //0x000028d5 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xfc, //0x000028d9 pmovmskb %xmm4, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x000028dd shlq $16, %rcx - 0x48, 0x09, 0xca, //0x000028e1 orq %rcx, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x000028e4 shlq $16, %rdi - 0x48, 0x09, 0xfe, //0x000028e8 orq %rdi, %rsi - 0x0f, 0x85, 0x55, 0x0b, 0x00, 0x00, //0x000028eb jne LBB0_544 - 0x4d, 0x85, 0xc0, //0x000028f1 testq %r8, %r8 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000028f4 movabsq $4294977024, %r11 - 0x0f, 0x85, 0x6c, 0x0b, 0x00, 0x00, //0x000028fe jne LBB0_546 - 0x45, 0x31, 0xc0, //0x00002904 xorl %r8d, %r8d - 0x48, 0x85, 0xd2, //0x00002907 testq %rdx, %rdx - 0x0f, 0x84, 0xbc, 0x0b, 0x00, 0x00, //0x0000290a je LBB0_548 - //0x00002910 LBB0_77 - 0x48, 0x0f, 0xbc, 0xca, //0x00002910 bsfq %rdx, %rcx - 0x4c, 0x29, 0xe0, //0x00002914 subq %r12, %rax - 0x48, 0x01, 0xc8, //0x00002917 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x0000291a addq $1, %rax - 0xe9, 0xe0, 0xee, 0xff, 0xff, //0x0000291e jmp LBB0_304 - //0x00002923 LBB0_195 - 0x4c, 0x8b, 0x45, 0xc0, //0x00002923 movq $-64(%rbp), %r8 - 0x4c, 0x01, 0xc0, //0x00002927 addq %r8, %rax - 0x49, 0x83, 0xf9, 0x20, //0x0000292a cmpq $32, %r9 - 0x0f, 0x82, 0x67, 0x06, 0x00, 0x00, //0x0000292e jb LBB0_495 - //0x00002934 LBB0_196 - 0xf3, 0x0f, 0x6f, 0x20, //0x00002934 movdqu (%rax), %xmm4 - 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00002938 movdqu $16(%rax), %xmm3 - 0x66, 0x0f, 0x6f, 0xec, //0x0000293d movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002941 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00002945 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x6f, 0xeb, //0x00002949 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x0000294d pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00002951 pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x00002955 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00002959 pcmpeqb %xmm1, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xd5, //0x0000295d pmovmskb %xmm5, %r10d - 0x66, 0x0f, 0x6f, 0xeb, //0x00002962 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00002966 pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x0000296a pmovmskb %xmm5, %ecx - 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x0000296e movdqa %xmm12, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x00002973 pcmpgtb %xmm3, %xmm5 - 0x66, 0x41, 0x0f, 0x64, 0xda, //0x00002977 pcmpgtb %xmm10, %xmm3 - 0x66, 0x0f, 0xdb, 0xdd, //0x0000297c pand %xmm5, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00002980 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe2, 0x10, //0x00002984 shlq $16, %rdx - 0x48, 0x09, 0xd6, //0x00002988 orq %rdx, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x0000298b shlq $16, %rcx - 0x48, 0xc1, 0xe7, 0x10, //0x0000298f shlq $16, %rdi - 0x49, 0x09, 0xca, //0x00002993 orq %rcx, %r10 - 0x0f, 0x85, 0x26, 0x0c, 0x00, 0x00, //0x00002996 jne LBB0_562 - 0x4d, 0x85, 0xe4, //0x0000299c testq %r12, %r12 - 0x4c, 0x8b, 0x6d, 0xb8, //0x0000299f movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000029a3 movabsq $4294977024, %r11 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x8a, 0xd6, 0xff, 0xff, //0x000029ad movdqu $-10614(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x0f, 0x85, 0x2c, 0x0c, 0x00, 0x00, //0x000029b6 jne LBB0_564 - 0x45, 0x31, 0xe4, //0x000029bc xorl %r12d, %r12d - //0x000029bf LBB0_199 - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x000029bf movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x000029c4 pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x000029c8 pcmpgtb %xmm10, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x000029cd pand %xmm3, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x000029d1 pmovmskb %xmm4, %ecx - 0x48, 0x09, 0xcf, //0x000029d5 orq %rcx, %rdi - 0xb9, 0x40, 0x00, 0x00, 0x00, //0x000029d8 movl $64, %ecx - 0xba, 0x40, 0x00, 0x00, 0x00, //0x000029dd movl $64, %edx - 0x48, 0x85, 0xf6, //0x000029e2 testq %rsi, %rsi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x000029e5 je LBB0_201 - 0x48, 0x0f, 0xbc, 0xd6, //0x000029eb bsfq %rsi, %rdx - //0x000029ef LBB0_201 - 0x48, 0x85, 0xff, //0x000029ef testq %rdi, %rdi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x000029f2 je LBB0_203 - 0x48, 0x0f, 0xbc, 0xcf, //0x000029f8 bsfq %rdi, %rcx - //0x000029fc LBB0_203 - 0x48, 0x85, 0xf6, //0x000029fc testq %rsi, %rsi - 0x0f, 0x84, 0xf6, 0x00, 0x00, 0x00, //0x000029ff je LBB0_450 - 0x48, 0x39, 0xd1, //0x00002a05 cmpq %rdx, %rcx - 0x0f, 0x82, 0x6c, 0x12, 0x00, 0x00, //0x00002a08 jb LBB0_650 - 0x4c, 0x29, 0xc0, //0x00002a0e subq %r8, %rax - 0x48, 0x01, 0xd0, //0x00002a11 addq %rdx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002a14 addq $1, %rax - 0xe9, 0xe6, 0xed, 0xff, 0xff, //0x00002a18 jmp LBB0_304 - //0x00002a1d LBB0_436 - 0x89, 0xd9, //0x00002a1d movl %ebx, %ecx - //0x00002a1f LBB0_437 - 0x49, 0xf7, 0xd5, //0x00002a1f notq %r13 - 0x49, 0x29, 0xcd, //0x00002a22 subq %rcx, %r13 - 0x48, 0x8b, 0x75, 0xc0, //0x00002a25 movq $-64(%rbp), %rsi - 0xe9, 0xb4, 0xd7, 0xff, 0xff, //0x00002a29 jmp LBB0_2 - //0x00002a2e LBB0_438 - 0x48, 0x85, 0xf6, //0x00002a2e testq %rsi, %rsi - 0x0f, 0x85, 0x34, 0x12, 0x00, 0x00, //0x00002a31 jne LBB0_649 - 0x48, 0x83, 0xc0, 0x20, //0x00002a37 addq $32, %rax - 0x49, 0x83, 0xc6, 0xe0, //0x00002a3b addq $-32, %r14 - 0x48, 0x85, 0xdb, //0x00002a3f testq %rbx, %rbx - 0x0f, 0x85, 0xa5, 0x04, 0x00, 0x00, //0x00002a42 jne LBB0_488 - //0x00002a48 LBB0_440 - 0x48, 0x8b, 0x4d, 0xc8, //0x00002a48 movq $-56(%rbp), %rcx - 0x4d, 0x85, 0xf6, //0x00002a4c testq %r14, %r14 - 0x0f, 0x84, 0xda, 0x11, 0x00, 0x00, //0x00002a4f je LBB0_490 - //0x00002a55 LBB0_441 - 0x0f, 0xb6, 0x10, //0x00002a55 movzbl (%rax), %edx - 0x80, 0xfa, 0x22, //0x00002a58 cmpb $34, %dl - 0x0f, 0x84, 0x8a, 0x00, 0x00, 0x00, //0x00002a5b je LBB0_449 - 0x80, 0xfa, 0x5c, //0x00002a61 cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002a64 je LBB0_445 - 0x80, 0xfa, 0x1f, //0x00002a6a cmpb $31, %dl - 0x0f, 0x86, 0x12, 0x12, 0x00, 0x00, //0x00002a6d jbe LBB0_651 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002a73 movq $-1, %rdx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002a7a movl $1, %esi - 0x48, 0x01, 0xf0, //0x00002a7f addq %rsi, %rax - 0x49, 0x01, 0xd6, //0x00002a82 addq %rdx, %r14 - 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002a85 jne LBB0_441 - 0xe9, 0x9f, 0x11, 0x00, 0x00, //0x00002a8b jmp LBB0_490 - //0x00002a90 LBB0_445 - 0x49, 0x83, 0xfe, 0x01, //0x00002a90 cmpq $1, %r14 - 0x0f, 0x84, 0x95, 0x11, 0x00, 0x00, //0x00002a94 je LBB0_490 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002a9a movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00002a9f movdqa %xmm2, %xmm5 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00002aa3 movq $-2, %rdx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002aaa movl $2, %esi - 0x48, 0x83, 0xf9, 0xff, //0x00002aaf cmpq $-1, %rcx - 0x0f, 0x85, 0x0a, 0x00, 0x00, 0x00, //0x00002ab3 jne LBB0_448 - 0x48, 0x89, 0xc1, //0x00002ab9 movq %rax, %rcx - 0x4c, 0x29, 0xe1, //0x00002abc subq %r12, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00002abf movq %rcx, $-56(%rbp) - //0x00002ac3 LBB0_448 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002ac3 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002ac7 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x00002ad1 movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00002ad5 movdqa %xmm6, %xmm13 - 0x48, 0x01, 0xf0, //0x00002ada addq %rsi, %rax - 0x49, 0x01, 0xd6, //0x00002add addq %rdx, %r14 - 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x00002ae0 jne LBB0_441 - 0xe9, 0x44, 0x11, 0x00, 0x00, //0x00002ae6 jmp LBB0_490 - //0x00002aeb LBB0_449 - 0x4c, 0x29, 0xe0, //0x00002aeb subq %r12, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002aee addq $1, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x00002af2 movq $-48(%rbp), %r14 - 0xe9, 0x8b, 0xe7, 0xff, 0xff, //0x00002af6 jmp LBB0_223 - //0x00002afb LBB0_450 - 0x48, 0x85, 0xff, //0x00002afb testq %rdi, %rdi - 0x0f, 0x85, 0x76, 0x11, 0x00, 0x00, //0x00002afe jne LBB0_650 - 0x48, 0x83, 0xc0, 0x20, //0x00002b04 addq $32, %rax - 0x49, 0x83, 0xc1, 0xe0, //0x00002b08 addq $-32, %r9 - 0x4d, 0x85, 0xe4, //0x00002b0c testq %r12, %r12 - 0x0f, 0x85, 0xa6, 0x04, 0x00, 0x00, //0x00002b0f jne LBB0_496 - //0x00002b15 LBB0_452 - 0x48, 0x8b, 0x4d, 0xc8, //0x00002b15 movq $-56(%rbp), %rcx - 0x4d, 0x85, 0xc9, //0x00002b19 testq %r9, %r9 - 0x0f, 0x84, 0x51, 0x0f, 0x00, 0x00, //0x00002b1c je LBB0_616 - //0x00002b22 LBB0_453 - 0x0f, 0xb6, 0x10, //0x00002b22 movzbl (%rax), %edx - 0x80, 0xfa, 0x22, //0x00002b25 cmpb $34, %dl - 0x0f, 0x84, 0xcc, 0x00, 0x00, 0x00, //0x00002b28 je LBB0_464 - 0x80, 0xfa, 0x5c, //0x00002b2e cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002b31 je LBB0_458 - 0x80, 0xfa, 0x1f, //0x00002b37 cmpb $31, %dl - 0x0f, 0x86, 0x51, 0x11, 0x00, 0x00, //0x00002b3a jbe LBB0_652 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002b40 movq $-1, %rdx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002b47 movl $1, %esi - //0x00002b4c LBB0_457 - 0x48, 0x01, 0xf0, //0x00002b4c addq %rsi, %rax - 0x49, 0x01, 0xd1, //0x00002b4f addq %rdx, %r9 - 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002b52 jne LBB0_453 - 0xe9, 0x16, 0x0f, 0x00, 0x00, //0x00002b58 jmp LBB0_616 - //0x00002b5d LBB0_458 - 0x49, 0x83, 0xf9, 0x01, //0x00002b5d cmpq $1, %r9 - 0x0f, 0x84, 0xe7, 0x10, 0x00, 0x00, //0x00002b61 je LBB0_507 - 0x66, 0x0f, 0x6f, 0xea, //0x00002b67 movdqa %xmm2, %xmm5 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00002b6b movq $-2, %rdx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002b72 movl $2, %esi - 0x48, 0x83, 0xf9, 0xff, //0x00002b77 cmpq $-1, %rcx - 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x00002b7b je LBB0_461 - 0x4c, 0x8b, 0x75, 0xd0, //0x00002b81 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002b85 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002b89 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x00002b93 movdqa %xmm5, %xmm2 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xa0, 0xd4, 0xff, 0xff, //0x00002b97 movdqu $-11104(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x4c, 0x8b, 0x45, 0xc0, //0x00002ba0 movq $-64(%rbp), %r8 - 0xe9, 0xa3, 0xff, 0xff, 0xff, //0x00002ba4 jmp LBB0_457 - //0x00002ba9 LBB0_461 - 0x48, 0x89, 0xc1, //0x00002ba9 movq %rax, %rcx - 0x4c, 0x8b, 0x45, 0xc0, //0x00002bac movq $-64(%rbp), %r8 - 0x4c, 0x29, 0xc1, //0x00002bb0 subq %r8, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00002bb3 movq %rcx, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x00002bb7 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002bbb movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002bbf movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x00002bc9 movdqa %xmm5, %xmm2 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x6a, 0xd4, 0xff, 0xff, //0x00002bcd movdqu $-11158(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0xe9, 0x71, 0xff, 0xff, 0xff, //0x00002bd6 jmp LBB0_457 - //0x00002bdb LBB0_462 - 0x4c, 0x29, 0xe1, //0x00002bdb subq %r12, %rcx - 0x48, 0x01, 0xf1, //0x00002bde addq %rsi, %rcx - 0x49, 0x89, 0x0e, //0x00002be1 movq %rcx, (%r14) - 0x48, 0x85, 0xc0, //0x00002be4 testq %rax, %rax - 0x0f, 0x8f, 0xd3, 0xd5, 0xff, 0xff, //0x00002be7 jg LBB0_4 - 0xe9, 0x06, 0x0e, 0x00, 0x00, //0x00002bed jmp LBB0_606 - //0x00002bf2 LBB0_463 - 0x0f, 0xbc, 0xce, //0x00002bf2 bsfl %esi, %ecx - 0xe9, 0x1f, 0x00, 0x00, 0x00, //0x00002bf5 jmp LBB0_467 - //0x00002bfa LBB0_464 - 0x4c, 0x29, 0xc0, //0x00002bfa subq %r8, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002bfd addq $1, %rax - 0xe9, 0xfd, 0xeb, 0xff, 0xff, //0x00002c01 jmp LBB0_304 - //0x00002c06 LBB0_465 - 0x49, 0x01, 0xc4, //0x00002c06 addq %rax, %r12 - 0x49, 0x29, 0xd4, //0x00002c09 subq %rdx, %r12 - 0x48, 0xf7, 0xd3, //0x00002c0c notq %rbx - 0x4c, 0x01, 0xe3, //0x00002c0f addq %r12, %rbx - 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00002c12 jmp LBB0_468 - //0x00002c17 LBB0_466 - 0x89, 0xd1, //0x00002c17 movl %edx, %ecx - //0x00002c19 LBB0_467 - 0x48, 0xf7, 0xd3, //0x00002c19 notq %rbx - 0x48, 0x29, 0xcb, //0x00002c1c subq %rcx, %rbx - //0x00002c1f LBB0_468 - 0x48, 0x85, 0xdb, //0x00002c1f testq %rbx, %rbx - 0x0f, 0x88, 0xae, 0x0f, 0x00, 0x00, //0x00002c22 js LBB0_636 - //0x00002c28 LBB0_469 - 0x48, 0x01, 0xc3, //0x00002c28 addq %rax, %rbx - 0x4c, 0x8b, 0x75, 0xd0, //0x00002c2b movq $-48(%rbp), %r14 - 0x49, 0x89, 0x1e, //0x00002c2f movq %rbx, (%r14) - 0x48, 0x85, 0xc0, //0x00002c32 testq %rax, %rax - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002c35 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002c39 movabsq $4294977024, %r11 - 0x0f, 0x8f, 0x77, 0xd5, 0xff, 0xff, //0x00002c43 jg LBB0_4 - 0xe9, 0xaa, 0x0d, 0x00, 0x00, //0x00002c49 jmp LBB0_606 - //0x00002c4e LBB0_241 - 0x4c, 0x01, 0xe0, //0x00002c4e addq %r12, %rax - 0x49, 0x83, 0xf9, 0x20, //0x00002c51 cmpq $32, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x00002c55 movq $-48(%rbp), %r14 - 0x0f, 0x82, 0x19, 0x04, 0x00, 0x00, //0x00002c59 jb LBB0_502 - //0x00002c5f LBB0_242 - 0xf3, 0x0f, 0x6f, 0x18, //0x00002c5f movdqu (%rax), %xmm3 - 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00002c63 movdqu $16(%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x00002c68 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002c6c pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00002c70 pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x00002c74 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002c78 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x00002c7c pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x74, 0xd9, //0x00002c80 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002c84 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x74, 0xe1, //0x00002c88 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xfc, //0x00002c8c pmovmskb %xmm4, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x00002c90 shlq $16, %rcx - 0x48, 0x09, 0xca, //0x00002c94 orq %rcx, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x00002c97 shlq $16, %rdi - 0x48, 0x09, 0xfe, //0x00002c9b orq %rdi, %rsi - 0x0f, 0x85, 0x06, 0x0b, 0x00, 0x00, //0x00002c9e jne LBB0_578 - 0x4d, 0x85, 0xc0, //0x00002ca4 testq %r8, %r8 - 0x0f, 0x85, 0x27, 0x0b, 0x00, 0x00, //0x00002ca7 jne LBB0_580 - 0x45, 0x31, 0xc0, //0x00002cad xorl %r8d, %r8d - 0x48, 0x85, 0xd2, //0x00002cb0 testq %rdx, %rdx - 0x0f, 0x84, 0x77, 0x0b, 0x00, 0x00, //0x00002cb3 je LBB0_582 - //0x00002cb9 LBB0_245 - 0x48, 0x0f, 0xbc, 0xca, //0x00002cb9 bsfq %rdx, %rcx - 0x4c, 0x29, 0xe0, //0x00002cbd subq %r12, %rax - 0x48, 0x01, 0xc8, //0x00002cc0 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002cc3 addq $1, %rax - 0xe9, 0x71, 0xf9, 0xff, 0xff, //0x00002cc7 jmp LBB0_426 - //0x00002ccc LBB0_394 - 0x4c, 0x01, 0xe0, //0x00002ccc addq %r12, %rax - 0x49, 0x89, 0xf2, //0x00002ccf movq %rsi, %r10 - 0x48, 0x83, 0xfe, 0x20, //0x00002cd2 cmpq $32, %rsi - 0x0f, 0x82, 0xc5, 0x03, 0x00, 0x00, //0x00002cd6 jb LBB0_504 - //0x00002cdc LBB0_395 - 0xf3, 0x0f, 0x6f, 0x20, //0x00002cdc movdqu (%rax), %xmm4 - 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00002ce0 movdqu $16(%rax), %xmm3 - 0x66, 0x0f, 0x6f, 0xec, //0x00002ce5 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002ce9 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00002ced pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x6f, 0xeb, //0x00002cf1 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002cf5 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x00002cf9 pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x6f, 0xec, //0x00002cfd movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00002d01 pcmpeqb %xmm1, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x00002d05 pmovmskb %xmm5, %r9d - 0x66, 0x0f, 0x6f, 0xeb, //0x00002d0a movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00002d0e pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00002d12 pmovmskb %xmm5, %edx - 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x00002d16 movdqa %xmm12, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x00002d1b pcmpgtb %xmm3, %xmm5 - 0x66, 0x41, 0x0f, 0x64, 0xda, //0x00002d1f pcmpgtb %xmm10, %xmm3 - 0x66, 0x0f, 0xdb, 0xdd, //0x00002d24 pand %xmm5, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00002d28 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x00002d2c shlq $16, %rcx - 0x48, 0x09, 0xce, //0x00002d30 orq %rcx, %rsi - 0x48, 0xc1, 0xe2, 0x10, //0x00002d33 shlq $16, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x00002d37 shlq $16, %rdi - 0x49, 0x09, 0xd1, //0x00002d3b orq %rdx, %r9 - 0x0f, 0x85, 0xd0, 0x0b, 0x00, 0x00, //0x00002d3e jne LBB0_597 - 0x48, 0x85, 0xdb, //0x00002d44 testq %rbx, %rbx - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002d47 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002d4b movabsq $4294977024, %r11 - 0x0f, 0x85, 0xe6, 0x0b, 0x00, 0x00, //0x00002d55 jne LBB0_599 - 0x31, 0xdb, //0x00002d5b xorl %ebx, %ebx - //0x00002d5d LBB0_398 - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002d5d movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x00002d62 pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00002d66 pcmpgtb %xmm10, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x00002d6b pand %xmm3, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x00002d6f pmovmskb %xmm4, %ecx - 0x48, 0x09, 0xcf, //0x00002d73 orq %rcx, %rdi - 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00002d76 movl $64, %ecx - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002d7b movl $64, %edx - 0x48, 0x85, 0xf6, //0x00002d80 testq %rsi, %rsi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002d83 je LBB0_400 - 0x48, 0x0f, 0xbc, 0xd6, //0x00002d89 bsfq %rsi, %rdx - //0x00002d8d LBB0_400 - 0x48, 0x85, 0xff, //0x00002d8d testq %rdi, %rdi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002d90 je LBB0_402 - 0x48, 0x0f, 0xbc, 0xcf, //0x00002d96 bsfq %rdi, %rcx - //0x00002d9a LBB0_402 - 0x48, 0x85, 0xf6, //0x00002d9a testq %rsi, %rsi - 0x0f, 0x84, 0x53, 0x00, 0x00, 0x00, //0x00002d9d je LBB0_473 - 0x4c, 0x29, 0xe0, //0x00002da3 subq %r12, %rax - 0x48, 0x39, 0xd1, //0x00002da6 cmpq %rdx, %rcx - 0x0f, 0x82, 0xf7, 0x0e, 0x00, 0x00, //0x00002da9 jb LBB0_654 - 0x48, 0x01, 0xd0, //0x00002daf addq %rdx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002db2 addq $1, %rax - 0xe9, 0x82, 0xf8, 0xff, 0xff, //0x00002db6 jmp LBB0_426 - //0x00002dbb LBB0_470 - 0x49, 0x8d, 0x04, 0x34, //0x00002dbb leaq (%r12,%rsi), %rax - 0x48, 0x85, 0xc9, //0x00002dbf testq %rcx, %rcx - 0x0f, 0x85, 0x4f, 0xde, 0xff, 0xff, //0x00002dc2 jne LBB0_140 - //0x00002dc8 LBB0_471 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002dc8 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00002dcd movdqa %xmm2, %xmm5 - 0xe9, 0x7f, 0xde, 0xff, 0xff, //0x00002dd1 jmp LBB0_146 - //0x00002dd6 LBB0_472 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002dd6 movq $-1, %r8 - 0x4c, 0x89, 0xf1, //0x00002ddd movq %r14, %rcx - 0x49, 0x89, 0xfa, //0x00002de0 movq %rdi, %r10 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002de3 movq $-1, %r15 - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002dea movq $-1, %r9 - 0xe9, 0x19, 0xda, 0xff, 0xff, //0x00002df1 jmp LBB0_105 - //0x00002df6 LBB0_473 - 0x48, 0x85, 0xff, //0x00002df6 testq %rdi, %rdi - 0x0f, 0x85, 0xbc, 0x0e, 0x00, 0x00, //0x00002df9 jne LBB0_655 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002dff movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00002e04 movdqa %xmm2, %xmm5 - 0x48, 0x83, 0xc0, 0x20, //0x00002e08 addq $32, %rax - 0x49, 0x83, 0xc2, 0xe0, //0x00002e0c addq $-32, %r10 - 0x48, 0x85, 0xdb, //0x00002e10 testq %rbx, %rbx - 0x0f, 0x85, 0x9a, 0x02, 0x00, 0x00, //0x00002e13 jne LBB0_505 - //0x00002e19 LBB0_475 - 0x48, 0x8b, 0x55, 0xc8, //0x00002e19 movq $-56(%rbp), %rdx - 0x4d, 0x85, 0xd2, //0x00002e1d testq %r10, %r10 - 0x0f, 0x84, 0x28, 0x0e, 0x00, 0x00, //0x00002e20 je LBB0_507 - //0x00002e26 LBB0_476 - 0x0f, 0xb6, 0x08, //0x00002e26 movzbl (%rax), %ecx - 0x80, 0xf9, 0x22, //0x00002e29 cmpb $34, %cl - 0x0f, 0x84, 0x11, 0x01, 0x00, 0x00, //0x00002e2c je LBB0_491 - 0x80, 0xf9, 0x5c, //0x00002e32 cmpb $92, %cl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002e35 je LBB0_481 - 0x80, 0xf9, 0x1f, //0x00002e3b cmpb $31, %cl - 0x0f, 0x86, 0x82, 0x0e, 0x00, 0x00, //0x00002e3e jbe LBB0_656 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002e44 movq $-1, %rcx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002e4b movl $1, %esi - //0x00002e50 LBB0_480 - 0x48, 0x01, 0xf0, //0x00002e50 addq %rsi, %rax - 0x49, 0x01, 0xca, //0x00002e53 addq %rcx, %r10 - 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002e56 jne LBB0_476 - 0xe9, 0xed, 0x0d, 0x00, 0x00, //0x00002e5c jmp LBB0_507 - //0x00002e61 LBB0_481 - 0x49, 0x83, 0xfa, 0x01, //0x00002e61 cmpq $1, %r10 - 0x0f, 0x84, 0xe3, 0x0d, 0x00, 0x00, //0x00002e65 je LBB0_507 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002e6b movq $-2, %rcx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002e72 movl $2, %esi - 0x48, 0x83, 0xfa, 0xff, //0x00002e77 cmpq $-1, %rdx - 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00002e7b jne LBB0_480 - 0x48, 0x89, 0xc2, //0x00002e81 movq %rax, %rdx - 0x4c, 0x29, 0xe2, //0x00002e84 subq %r12, %rdx - 0x48, 0x89, 0x55, 0xc8, //0x00002e87 movq %rdx, $-56(%rbp) - 0xe9, 0xc0, 0xff, 0xff, 0xff, //0x00002e8b jmp LBB0_480 - //0x00002e90 LBB0_484 - 0x48, 0x8b, 0x45, 0xb0, //0x00002e90 movq $-80(%rbp), %rax - 0x4c, 0x01, 0xe0, //0x00002e94 addq %r12, %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002e97 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00002e9f xorl %r8d, %r8d - 0x49, 0x83, 0xf9, 0x20, //0x00002ea2 cmpq $32, %r9 - 0x0f, 0x83, 0x61, 0xf8, 0xff, 0xff, //0x00002ea6 jae LBB0_51 - //0x00002eac LBB0_485 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002eac movabsq $4294977024, %r11 - 0xe9, 0x6a, 0x03, 0x00, 0x00, //0x00002eb6 jmp LBB0_520 - //0x00002ebb LBB0_486 - 0x48, 0x8b, 0x45, 0xb0, //0x00002ebb movq $-80(%rbp), %rax - 0x4c, 0x01, 0xe0, //0x00002ebf addq %r12, %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002ec2 movq $-1, $-56(%rbp) - 0x31, 0xdb, //0x00002eca xorl %ebx, %ebx - 0x49, 0x83, 0xfe, 0x20, //0x00002ecc cmpq $32, %r14 - 0x0f, 0x83, 0xbf, 0xf8, 0xff, 0xff, //0x00002ed0 jae LBB0_167 - //0x00002ed6 LBB0_487 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002ed6 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002eda movabsq $4294977024, %r11 - 0x48, 0x85, 0xdb, //0x00002ee4 testq %rbx, %rbx - 0x0f, 0x84, 0x5b, 0xfb, 0xff, 0xff, //0x00002ee7 je LBB0_440 - //0x00002eed LBB0_488 - 0x4d, 0x85, 0xf6, //0x00002eed testq %r14, %r14 - 0x0f, 0x84, 0x39, 0x0d, 0x00, 0x00, //0x00002ef0 je LBB0_490 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002ef6 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00002efb movdqa %xmm2, %xmm5 - 0x4c, 0x89, 0xe1, //0x00002eff movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x00002f02 notq %rcx - 0x48, 0x01, 0xc1, //0x00002f05 addq %rax, %rcx - 0x48, 0x8b, 0x75, 0xc8, //0x00002f08 movq $-56(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x00002f0c cmpq $-1, %rsi - 0x48, 0x89, 0xf2, //0x00002f10 movq %rsi, %rdx - 0x48, 0x0f, 0x44, 0xd1, //0x00002f13 cmoveq %rcx, %rdx - 0x48, 0x0f, 0x45, 0xce, //0x00002f17 cmovneq %rsi, %rcx - 0x48, 0x83, 0xc0, 0x01, //0x00002f1b addq $1, %rax - 0x49, 0x83, 0xc6, 0xff, //0x00002f1f addq $-1, %r14 - 0x48, 0x89, 0x55, 0xc8, //0x00002f23 movq %rdx, $-56(%rbp) - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002f27 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f2b movabsq $4294977024, %r11 - 0x4d, 0x85, 0xf6, //0x00002f35 testq %r14, %r14 - 0x0f, 0x85, 0x17, 0xfb, 0xff, 0xff, //0x00002f38 jne LBB0_441 - 0xe9, 0xec, 0x0c, 0x00, 0x00, //0x00002f3e jmp LBB0_490 - //0x00002f43 LBB0_491 - 0x4c, 0x29, 0xe0, //0x00002f43 subq %r12, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002f46 addq $1, %rax - 0xe9, 0x94, 0x09, 0x00, 0x00, //0x00002f4a jmp LBB0_596 - //0x00002f4f LBB0_492 - 0x48, 0x8b, 0x45, 0xb0, //0x00002f4f movq $-80(%rbp), %rax - 0x4c, 0x01, 0xe0, //0x00002f53 addq %r12, %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002f56 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00002f5e xorl %r8d, %r8d - 0x49, 0x83, 0xf9, 0x20, //0x00002f61 cmpq $32, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x00002f65 movq $-48(%rbp), %r14 - 0x0f, 0x83, 0x3d, 0xf9, 0xff, 0xff, //0x00002f69 jae LBB0_74 - //0x00002f6f LBB0_493 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f6f movabsq $4294977024, %r11 - 0xe9, 0x56, 0x05, 0x00, 0x00, //0x00002f79 jmp LBB0_549 - //0x00002f7e LBB0_494 - 0x4c, 0x8b, 0x45, 0xc0, //0x00002f7e movq $-64(%rbp), %r8 - 0x49, 0x8d, 0x04, 0x08, //0x00002f82 leaq (%r8,%rcx), %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002f86 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xe4, //0x00002f8e xorl %r12d, %r12d - 0x49, 0x83, 0xf9, 0x20, //0x00002f91 cmpq $32, %r9 - 0x0f, 0x83, 0x99, 0xf9, 0xff, 0xff, //0x00002f95 jae LBB0_196 - //0x00002f9b LBB0_495 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002f9b movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f9f movabsq $4294977024, %r11 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x8e, 0xd0, 0xff, 0xff, //0x00002fa9 movdqu $-12146(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x4d, 0x85, 0xe4, //0x00002fb2 testq %r12, %r12 - 0x0f, 0x84, 0x5a, 0xfb, 0xff, 0xff, //0x00002fb5 je LBB0_452 - //0x00002fbb LBB0_496 - 0x4d, 0x85, 0xc9, //0x00002fbb testq %r9, %r9 - 0x0f, 0x84, 0x8a, 0x0c, 0x00, 0x00, //0x00002fbe je LBB0_507 - 0x66, 0x0f, 0x6f, 0xea, //0x00002fc4 movdqa %xmm2, %xmm5 - 0x4c, 0x8b, 0x45, 0xc0, //0x00002fc8 movq $-64(%rbp), %r8 - 0x4c, 0x89, 0xc1, //0x00002fcc movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00002fcf notq %rcx - 0x48, 0x01, 0xc1, //0x00002fd2 addq %rax, %rcx - 0x48, 0x8b, 0x75, 0xc8, //0x00002fd5 movq $-56(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x00002fd9 cmpq $-1, %rsi - 0x48, 0x89, 0xf2, //0x00002fdd movq %rsi, %rdx - 0x48, 0x0f, 0x44, 0xd1, //0x00002fe0 cmoveq %rcx, %rdx - 0x48, 0x0f, 0x45, 0xce, //0x00002fe4 cmovneq %rsi, %rcx - 0x48, 0x83, 0xc0, 0x01, //0x00002fe8 addq $1, %rax - 0x49, 0x83, 0xc1, 0xff, //0x00002fec addq $-1, %r9 - 0x48, 0x89, 0x55, 0xc8, //0x00002ff0 movq %rdx, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x00002ff4 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002ff8 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002ffc movabsq $4294977024, %r11 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x31, 0xd0, 0xff, 0xff, //0x00003006 movdqu $-12239(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x4d, 0x85, 0xc9, //0x0000300f testq %r9, %r9 - 0x0f, 0x85, 0x0a, 0xfb, 0xff, 0xff, //0x00003012 jne LBB0_453 - 0xe9, 0x56, 0x0a, 0x00, 0x00, //0x00003018 jmp LBB0_616 - //0x0000301d LBB0_498 - 0x49, 0x8d, 0x0c, 0x04, //0x0000301d leaq (%r12,%rax), %rcx - 0x48, 0x85, 0xd2, //0x00003021 testq %rdx, %rdx - 0x0f, 0x85, 0x1d, 0xee, 0xff, 0xff, //0x00003024 jne LBB0_349 - //0x0000302a LBB0_499 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000302a movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000302f movdqa %xmm2, %xmm5 - 0xe9, 0x4d, 0xee, 0xff, 0xff, //0x00003033 jmp LBB0_355 - //0x00003038 LBB0_500 - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003038 movq $-1, %r14 - 0x4c, 0x89, 0xc2, //0x0000303f movq %r8, %rdx - 0x49, 0x89, 0xf9, //0x00003042 movq %rdi, %r9 - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00003045 movq $-1, %r10 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x0000304c movq $-1, %r13 - 0xe9, 0x2e, 0xe6, 0xff, 0xff, //0x00003053 jmp LBB0_275 - //0x00003058 LBB0_501 - 0x48, 0x8b, 0x45, 0xb0, //0x00003058 movq $-80(%rbp), %rax - 0x4c, 0x01, 0xe0, //0x0000305c addq %r12, %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000305f movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00003067 xorl %r8d, %r8d - 0x49, 0x83, 0xf9, 0x20, //0x0000306a cmpq $32, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x0000306e movq $-48(%rbp), %r14 - 0x0f, 0x83, 0xe7, 0xfb, 0xff, 0xff, //0x00003072 jae LBB0_242 - //0x00003078 LBB0_502 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003078 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000307d movdqa %xmm2, %xmm5 - 0xe9, 0xbb, 0x07, 0x00, 0x00, //0x00003081 jmp LBB0_583 - //0x00003086 LBB0_503 - 0x49, 0x8d, 0x04, 0x0c, //0x00003086 leaq (%r12,%rcx), %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000308a movq $-1, $-56(%rbp) - 0x31, 0xdb, //0x00003092 xorl %ebx, %ebx - 0x49, 0x89, 0xf2, //0x00003094 movq %rsi, %r10 - 0x48, 0x83, 0xfe, 0x20, //0x00003097 cmpq $32, %rsi - 0x0f, 0x83, 0x3b, 0xfc, 0xff, 0xff, //0x0000309b jae LBB0_395 - //0x000030a1 LBB0_504 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000030a1 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000030a6 movdqa %xmm2, %xmm5 - 0x48, 0x85, 0xdb, //0x000030aa testq %rbx, %rbx - 0x0f, 0x84, 0x66, 0xfd, 0xff, 0xff, //0x000030ad je LBB0_475 - //0x000030b3 LBB0_505 - 0x4d, 0x85, 0xd2, //0x000030b3 testq %r10, %r10 - 0x0f, 0x84, 0x92, 0x0b, 0x00, 0x00, //0x000030b6 je LBB0_507 - 0x4c, 0x89, 0xe2, //0x000030bc movq %r12, %rdx - 0x48, 0xf7, 0xd2, //0x000030bf notq %rdx - 0x48, 0x01, 0xc2, //0x000030c2 addq %rax, %rdx - 0x48, 0x8b, 0x75, 0xc8, //0x000030c5 movq $-56(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x000030c9 cmpq $-1, %rsi - 0x48, 0x89, 0xf1, //0x000030cd movq %rsi, %rcx - 0x48, 0x0f, 0x44, 0xca, //0x000030d0 cmoveq %rdx, %rcx - 0x48, 0x0f, 0x45, 0xd6, //0x000030d4 cmovneq %rsi, %rdx - 0x48, 0x83, 0xc0, 0x01, //0x000030d8 addq $1, %rax - 0x49, 0x83, 0xc2, 0xff, //0x000030dc addq $-1, %r10 - 0x48, 0x89, 0x4d, 0xc8, //0x000030e0 movq %rcx, $-56(%rbp) - 0x4d, 0x85, 0xd2, //0x000030e4 testq %r10, %r10 - 0x0f, 0x85, 0x39, 0xfd, 0xff, 0xff, //0x000030e7 jne LBB0_476 - 0xe9, 0x5c, 0x0b, 0x00, 0x00, //0x000030ed jmp LBB0_507 - //0x000030f2 LBB0_508 - 0x49, 0x39, 0xd1, //0x000030f2 cmpq %rdx, %r9 - 0x0f, 0x84, 0x4c, 0x09, 0x00, 0x00, //0x000030f5 je LBB0_638 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000030fb movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003100 movdqa %xmm2, %xmm5 - 0x49, 0x01, 0xd2, //0x00003104 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003107 addq $1, %r10 - 0x48, 0xf7, 0xd2, //0x0000310b notq %rdx - 0x49, 0x01, 0xd1, //0x0000310e addq %rdx, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x00003111 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003115 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003119 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x00003123 testq %r9, %r9 - 0x0f, 0x8f, 0x33, 0x00, 0x00, 0x00, //0x00003126 jg LBB0_512 - 0xe9, 0x16, 0x09, 0x00, 0x00, //0x0000312c jmp LBB0_638 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003131 .p2align 4, 0x90 - //0x00003140 LBB0_510 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003140 movq $-2, %rcx - 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00003147 movl $2, %eax - 0x49, 0x01, 0xc2, //0x0000314c addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000314f movq $-1, %rax - 0x49, 0x01, 0xc9, //0x00003156 addq %rcx, %r9 - 0x0f, 0x8e, 0xe8, 0x08, 0x00, 0x00, //0x00003159 jle LBB0_638 - //0x0000315f LBB0_512 - 0x41, 0x0f, 0xb6, 0x02, //0x0000315f movzbl (%r10), %eax - 0x3c, 0x5c, //0x00003163 cmpb $92, %al - 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00003165 je LBB0_510 - 0x3c, 0x22, //0x0000316b cmpb $34, %al - 0x0f, 0x84, 0x1f, 0x06, 0x00, 0x00, //0x0000316d je LBB0_577 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003173 movq $-1, %rcx - 0xb8, 0x01, 0x00, 0x00, 0x00, //0x0000317a movl $1, %eax - 0x49, 0x01, 0xc2, //0x0000317f addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003182 movq $-1, %rax - 0x49, 0x01, 0xc9, //0x00003189 addq %rcx, %r9 - 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x0000318c jg LBB0_512 - 0xe9, 0xb0, 0x08, 0x00, 0x00, //0x00003192 jmp LBB0_638 - //0x00003197 LBB0_515 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003197 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000319c movdqa %xmm2, %xmm5 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000031a0 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x000031a5 jne LBB0_518 - 0x48, 0x89, 0xc1, //0x000031ab movq %rax, %rcx - 0x4c, 0x29, 0xe1, //0x000031ae subq %r12, %rcx - 0x48, 0x0f, 0xbc, 0xfe, //0x000031b1 bsfq %rsi, %rdi - 0x48, 0x01, 0xcf, //0x000031b5 addq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xc8, //0x000031b8 movq %rdi, $-56(%rbp) - 0xe9, 0x09, 0x00, 0x00, 0x00, //0x000031bc jmp LBB0_518 - //0x000031c1 LBB0_517 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000031c1 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000031c6 movdqa %xmm2, %xmm5 - //0x000031ca LBB0_518 - 0x44, 0x89, 0xc1, //0x000031ca movl %r8d, %ecx - 0xf7, 0xd1, //0x000031cd notl %ecx - 0x21, 0xf1, //0x000031cf andl %esi, %ecx - 0x41, 0x8d, 0x3c, 0x48, //0x000031d1 leal (%r8,%rcx,2), %edi - 0x8d, 0x1c, 0x09, //0x000031d5 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x000031d8 notl %ebx - 0x21, 0xf3, //0x000031da andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x000031dc andl $-1431655766, %ebx - 0x45, 0x31, 0xc0, //0x000031e2 xorl %r8d, %r8d - 0x01, 0xcb, //0x000031e5 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc0, //0x000031e7 setb %r8b - 0x01, 0xdb, //0x000031eb addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x000031ed xorl $1431655765, %ebx - 0x21, 0xfb, //0x000031f3 andl %edi, %ebx - 0xf7, 0xd3, //0x000031f5 notl %ebx - 0x21, 0xda, //0x000031f7 andl %ebx, %edx - 0x4c, 0x8b, 0x75, 0xd0, //0x000031f9 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000031fd movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003201 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x0000320b movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x0000320f movdqa %xmm6, %xmm13 - 0x48, 0x85, 0xd2, //0x00003214 testq %rdx, %rdx - 0x0f, 0x85, 0x54, 0xf5, 0xff, 0xff, //0x00003217 jne LBB0_54 - //0x0000321d LBB0_519 - 0x48, 0x83, 0xc0, 0x20, //0x0000321d addq $32, %rax - 0x49, 0x83, 0xc1, 0xe0, //0x00003221 addq $-32, %r9 - //0x00003225 LBB0_520 - 0x4d, 0x85, 0xc0, //0x00003225 testq %r8, %r8 - 0x0f, 0x85, 0x18, 0x04, 0x00, 0x00, //0x00003228 jne LBB0_566 - 0x4c, 0x89, 0xe1, //0x0000322e movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x00003231 notq %rcx - 0x48, 0x8b, 0x55, 0xc8, //0x00003234 movq $-56(%rbp), %rdx - 0x4d, 0x85, 0xc9, //0x00003238 testq %r9, %r9 - 0x0f, 0x84, 0x9e, 0x00, 0x00, 0x00, //0x0000323b je LBB0_532 - //0x00003241 LBB0_522 - 0x48, 0x83, 0xc1, 0x01, //0x00003241 addq $1, %rcx - //0x00003245 LBB0_523 - 0x31, 0xf6, //0x00003245 xorl %esi, %esi - //0x00003247 LBB0_524 - 0x0f, 0xb6, 0x1c, 0x30, //0x00003247 movzbl (%rax,%rsi), %ebx - 0x80, 0xfb, 0x22, //0x0000324b cmpb $34, %bl - 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x0000324e je LBB0_531 - 0x80, 0xfb, 0x5c, //0x00003254 cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003257 je LBB0_529 - 0x48, 0x83, 0xc6, 0x01, //0x0000325d addq $1, %rsi - 0x49, 0x39, 0xf1, //0x00003261 cmpq %rsi, %r9 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003264 jne LBB0_524 - 0xe9, 0x78, 0x00, 0x00, 0x00, //0x0000326a jmp LBB0_527 - //0x0000326f LBB0_529 - 0x49, 0x8d, 0x79, 0xff, //0x0000326f leaq $-1(%r9), %rdi - 0x48, 0x39, 0xf7, //0x00003273 cmpq %rsi, %rdi - 0x0f, 0x84, 0xb3, 0x09, 0x00, 0x00, //0x00003276 je LBB0_490 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000327c movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003281 movdqa %xmm2, %xmm5 - 0x48, 0x8d, 0x3c, 0x01, //0x00003285 leaq (%rcx,%rax), %rdi - 0x48, 0x01, 0xf7, //0x00003289 addq %rsi, %rdi - 0x48, 0x83, 0xfa, 0xff, //0x0000328c cmpq $-1, %rdx - 0x48, 0x8b, 0x5d, 0xc8, //0x00003290 movq $-56(%rbp), %rbx - 0x48, 0x0f, 0x44, 0xdf, //0x00003294 cmoveq %rdi, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x00003298 movq %rbx, $-56(%rbp) - 0x48, 0x0f, 0x44, 0xd7, //0x0000329c cmoveq %rdi, %rdx - 0x48, 0x01, 0xf0, //0x000032a0 addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x02, //0x000032a3 addq $2, %rax - 0x4c, 0x89, 0xcf, //0x000032a7 movq %r9, %rdi - 0x48, 0x29, 0xf7, //0x000032aa subq %rsi, %rdi - 0x48, 0x83, 0xc7, 0xfe, //0x000032ad addq $-2, %rdi - 0x49, 0x83, 0xc1, 0xfe, //0x000032b1 addq $-2, %r9 - 0x49, 0x39, 0xf1, //0x000032b5 cmpq %rsi, %r9 - 0x49, 0x89, 0xf9, //0x000032b8 movq %rdi, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x000032bb movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000032bf movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000032c3 movabsq $4294977024, %r11 - 0x0f, 0x85, 0x72, 0xff, 0xff, 0xff, //0x000032cd jne LBB0_523 - 0xe9, 0x3f, 0x07, 0x00, 0x00, //0x000032d3 jmp LBB0_610 - //0x000032d8 LBB0_531 - 0x48, 0x01, 0xf0, //0x000032d8 addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x000032db addq $1, %rax - //0x000032df LBB0_532 - 0x4c, 0x29, 0xe0, //0x000032df subq %r12, %rax - 0xe9, 0x9f, 0xdf, 0xff, 0xff, //0x000032e2 jmp LBB0_223 - //0x000032e7 LBB0_527 - 0x80, 0xfb, 0x22, //0x000032e7 cmpb $34, %bl - 0x0f, 0x85, 0x3f, 0x09, 0x00, 0x00, //0x000032ea jne LBB0_490 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000032f0 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000032f5 movdqa %xmm2, %xmm5 - 0x4c, 0x01, 0xc8, //0x000032f9 addq %r9, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x000032fc movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003300 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003304 movabsq $4294977024, %r11 - 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x0000330e jmp LBB0_532 - //0x00003313 LBB0_533 - 0x48, 0x89, 0xdf, //0x00003313 movq %rbx, %rdi - 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00003316 movdqa %xmm13, %xmm7 - 0x66, 0x0f, 0x6f, 0xf2, //0x0000331b movdqa %xmm2, %xmm6 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000331f cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0xd0, 0x00, 0x00, 0x00, //0x00003324 jne LBB0_543 - 0x49, 0x89, 0xc0, //0x0000332a movq %rax, %r8 - 0x4d, 0x29, 0xe0, //0x0000332d subq %r12, %r8 - 0x49, 0x0f, 0xbc, 0xd9, //0x00003330 bsfq %r9, %rbx - 0x4c, 0x01, 0xc3, //0x00003334 addq %r8, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x00003337 movq %rbx, $-56(%rbp) - 0xe9, 0xba, 0x00, 0x00, 0x00, //0x0000333b jmp LBB0_543 - //0x00003340 LBB0_535 - 0x49, 0x39, 0xd1, //0x00003340 cmpq %rdx, %r9 - 0x0f, 0x84, 0xfe, 0x06, 0x00, 0x00, //0x00003343 je LBB0_638 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003349 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000334e movdqa %xmm2, %xmm5 - 0x49, 0x01, 0xd2, //0x00003352 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003355 addq $1, %r10 - 0x48, 0xf7, 0xd2, //0x00003359 notq %rdx - 0x49, 0x01, 0xd1, //0x0000335c addq %rdx, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x0000335f movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003363 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003367 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x00003371 testq %r9, %r9 - 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00003374 jg LBB0_539 - 0xe9, 0xc8, 0x06, 0x00, 0x00, //0x0000337a jmp LBB0_638 - //0x0000337f LBB0_537 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x0000337f movq $-2, %rcx - 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00003386 movl $2, %eax - 0x49, 0x01, 0xc2, //0x0000338b addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000338e movq $-1, %rax - 0x49, 0x01, 0xc9, //0x00003395 addq %rcx, %r9 - 0x0f, 0x8e, 0xa9, 0x06, 0x00, 0x00, //0x00003398 jle LBB0_638 - //0x0000339e LBB0_539 - 0x41, 0x0f, 0xb6, 0x02, //0x0000339e movzbl (%r10), %eax - 0x3c, 0x5c, //0x000033a2 cmpb $92, %al - 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x000033a4 je LBB0_537 - 0x3c, 0x22, //0x000033aa cmpb $34, %al - 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x000033ac je LBB0_607 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000033b2 movq $-1, %rcx - 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000033b9 movl $1, %eax - 0x49, 0x01, 0xc2, //0x000033be addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000033c1 movq $-1, %rax - 0x49, 0x01, 0xc9, //0x000033c8 addq %rcx, %r9 - 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x000033cb jg LBB0_539 - 0xe9, 0x71, 0x06, 0x00, 0x00, //0x000033d1 jmp LBB0_638 - //0x000033d6 LBB0_607 - 0x4d, 0x29, 0xe2, //0x000033d6 subq %r12, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x000033d9 addq $1, %r10 - 0x4d, 0x89, 0x16, //0x000033dd movq %r10, (%r14) - 0x4d, 0x85, 0xc0, //0x000033e0 testq %r8, %r8 - 0x0f, 0x8f, 0x33, 0xe4, 0xff, 0xff, //0x000033e3 jg LBB0_306 - 0xe9, 0x13, 0x06, 0x00, 0x00, //0x000033e9 jmp LBB0_608 - //0x000033ee LBB0_542 - 0x48, 0x89, 0xdf, //0x000033ee movq %rbx, %rdi - 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x000033f1 movdqa %xmm13, %xmm7 - 0x66, 0x0f, 0x6f, 0xf2, //0x000033f6 movdqa %xmm2, %xmm6 - //0x000033fa LBB0_543 - 0x48, 0x89, 0xfb, //0x000033fa movq %rdi, %rbx - 0xf7, 0xd7, //0x000033fd notl %edi - 0x44, 0x21, 0xcf, //0x000033ff andl %r9d, %edi - 0x44, 0x8d, 0x04, 0x7b, //0x00003402 leal (%rbx,%rdi,2), %r8d - 0x8d, 0x14, 0x3f, //0x00003406 leal (%rdi,%rdi), %edx - 0xf7, 0xd2, //0x00003409 notl %edx - 0x44, 0x21, 0xca, //0x0000340b andl %r9d, %edx - 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000340e andl $-1431655766, %edx - 0x31, 0xdb, //0x00003414 xorl %ebx, %ebx - 0x01, 0xfa, //0x00003416 addl %edi, %edx - 0x0f, 0x92, 0xc3, //0x00003418 setb %bl - 0x01, 0xd2, //0x0000341b addl %edx, %edx - 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x0000341d xorl $1431655765, %edx - 0x44, 0x21, 0xc2, //0x00003423 andl %r8d, %edx - 0xf7, 0xd2, //0x00003426 notl %edx - 0x21, 0xd1, //0x00003428 andl %edx, %ecx - 0x4c, 0x8b, 0x6d, 0xb8, //0x0000342a movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000342e movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd6, //0x00003438 movdqa %xmm6, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x0000343c movdqa %xmm7, %xmm13 - 0xe9, 0xd0, 0xf3, 0xff, 0xff, //0x00003441 jmp LBB0_170 - //0x00003446 LBB0_544 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003446 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000344b movdqa %xmm2, %xmm5 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000344f cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x00003454 jne LBB0_547 - 0x48, 0x89, 0xc1, //0x0000345a movq %rax, %rcx - 0x4c, 0x29, 0xe1, //0x0000345d subq %r12, %rcx - 0x48, 0x0f, 0xbc, 0xfe, //0x00003460 bsfq %rsi, %rdi - 0x48, 0x01, 0xcf, //0x00003464 addq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xc8, //0x00003467 movq %rdi, $-56(%rbp) - 0xe9, 0x09, 0x00, 0x00, 0x00, //0x0000346b jmp LBB0_547 - //0x00003470 LBB0_546 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003470 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003475 movdqa %xmm2, %xmm5 - //0x00003479 LBB0_547 - 0x44, 0x89, 0xc1, //0x00003479 movl %r8d, %ecx - 0xf7, 0xd1, //0x0000347c notl %ecx - 0x21, 0xf1, //0x0000347e andl %esi, %ecx - 0x41, 0x8d, 0x3c, 0x48, //0x00003480 leal (%r8,%rcx,2), %edi - 0x8d, 0x1c, 0x09, //0x00003484 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x00003487 notl %ebx - 0x21, 0xf3, //0x00003489 andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000348b andl $-1431655766, %ebx - 0x45, 0x31, 0xc0, //0x00003491 xorl %r8d, %r8d - 0x01, 0xcb, //0x00003494 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc0, //0x00003496 setb %r8b - 0x01, 0xdb, //0x0000349a addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x0000349c xorl $1431655765, %ebx - 0x21, 0xfb, //0x000034a2 andl %edi, %ebx - 0xf7, 0xd3, //0x000034a4 notl %ebx - 0x21, 0xda, //0x000034a6 andl %ebx, %edx - 0x4c, 0x8b, 0x75, 0xd0, //0x000034a8 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000034ac movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000034b0 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x000034ba movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x000034be movdqa %xmm6, %xmm13 - 0x48, 0x85, 0xd2, //0x000034c3 testq %rdx, %rdx - 0x0f, 0x85, 0x44, 0xf4, 0xff, 0xff, //0x000034c6 jne LBB0_77 - //0x000034cc LBB0_548 - 0x48, 0x83, 0xc0, 0x20, //0x000034cc addq $32, %rax - 0x49, 0x83, 0xc1, 0xe0, //0x000034d0 addq $-32, %r9 - //0x000034d4 LBB0_549 - 0x4d, 0x85, 0xc0, //0x000034d4 testq %r8, %r8 - 0x0f, 0x85, 0xc4, 0x01, 0x00, 0x00, //0x000034d7 jne LBB0_568 - 0x4c, 0x89, 0xe1, //0x000034dd movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x000034e0 notq %rcx - 0x48, 0x8b, 0x55, 0xc8, //0x000034e3 movq $-56(%rbp), %rdx - 0x4d, 0x85, 0xc9, //0x000034e7 testq %r9, %r9 - 0x0f, 0x84, 0x9e, 0x00, 0x00, 0x00, //0x000034ea je LBB0_561 - //0x000034f0 LBB0_551 - 0x48, 0x83, 0xc1, 0x01, //0x000034f0 addq $1, %rcx - //0x000034f4 LBB0_552 - 0x31, 0xf6, //0x000034f4 xorl %esi, %esi - //0x000034f6 LBB0_553 - 0x0f, 0xb6, 0x1c, 0x30, //0x000034f6 movzbl (%rax,%rsi), %ebx - 0x80, 0xfb, 0x22, //0x000034fa cmpb $34, %bl - 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x000034fd je LBB0_560 - 0x80, 0xfb, 0x5c, //0x00003503 cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003506 je LBB0_558 - 0x48, 0x83, 0xc6, 0x01, //0x0000350c addq $1, %rsi - 0x49, 0x39, 0xf1, //0x00003510 cmpq %rsi, %r9 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003513 jne LBB0_553 - 0xe9, 0x78, 0x00, 0x00, 0x00, //0x00003519 jmp LBB0_556 - //0x0000351e LBB0_558 - 0x49, 0x8d, 0x79, 0xff, //0x0000351e leaq $-1(%r9), %rdi - 0x48, 0x39, 0xf7, //0x00003522 cmpq %rsi, %rdi - 0x0f, 0x84, 0x23, 0x07, 0x00, 0x00, //0x00003525 je LBB0_507 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000352b movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003530 movdqa %xmm2, %xmm5 - 0x48, 0x8d, 0x3c, 0x01, //0x00003534 leaq (%rcx,%rax), %rdi - 0x48, 0x01, 0xf7, //0x00003538 addq %rsi, %rdi - 0x48, 0x83, 0xfa, 0xff, //0x0000353b cmpq $-1, %rdx - 0x48, 0x8b, 0x5d, 0xc8, //0x0000353f movq $-56(%rbp), %rbx - 0x48, 0x0f, 0x44, 0xdf, //0x00003543 cmoveq %rdi, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x00003547 movq %rbx, $-56(%rbp) - 0x48, 0x0f, 0x44, 0xd7, //0x0000354b cmoveq %rdi, %rdx - 0x48, 0x01, 0xf0, //0x0000354f addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x02, //0x00003552 addq $2, %rax - 0x4c, 0x89, 0xcf, //0x00003556 movq %r9, %rdi - 0x48, 0x29, 0xf7, //0x00003559 subq %rsi, %rdi - 0x48, 0x83, 0xc7, 0xfe, //0x0000355c addq $-2, %rdi - 0x49, 0x83, 0xc1, 0xfe, //0x00003560 addq $-2, %r9 - 0x49, 0x39, 0xf1, //0x00003564 cmpq %rsi, %r9 - 0x49, 0x89, 0xf9, //0x00003567 movq %rdi, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x0000356a movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x0000356e movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003572 movabsq $4294977024, %r11 - 0x0f, 0x85, 0x72, 0xff, 0xff, 0xff, //0x0000357c jne LBB0_552 - 0xe9, 0xec, 0x04, 0x00, 0x00, //0x00003582 jmp LBB0_616 - //0x00003587 LBB0_560 - 0x48, 0x01, 0xf0, //0x00003587 addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x0000358a addq $1, %rax - //0x0000358e LBB0_561 - 0x4c, 0x29, 0xe0, //0x0000358e subq %r12, %rax - 0xe9, 0x6d, 0xe2, 0xff, 0xff, //0x00003591 jmp LBB0_304 - //0x00003596 LBB0_556 - 0x80, 0xfb, 0x22, //0x00003596 cmpb $34, %bl - 0x0f, 0x85, 0xaf, 0x06, 0x00, 0x00, //0x00003599 jne LBB0_507 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000359f movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000035a4 movdqa %xmm2, %xmm5 - 0x4c, 0x01, 0xc8, //0x000035a8 addq %r9, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x000035ab movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000035af movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000035b3 movabsq $4294977024, %r11 - 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x000035bd jmp LBB0_561 - //0x000035c2 LBB0_562 - 0x66, 0x0f, 0x6f, 0xf2, //0x000035c2 movdqa %xmm2, %xmm6 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000035c6 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x1b, 0x00, 0x00, 0x00, //0x000035cb jne LBB0_565 - 0x49, 0x89, 0xc0, //0x000035d1 movq %rax, %r8 - 0x4c, 0x2b, 0x45, 0xc0, //0x000035d4 subq $-64(%rbp), %r8 - 0x49, 0x0f, 0xbc, 0xda, //0x000035d8 bsfq %r10, %rbx - 0x4c, 0x01, 0xc3, //0x000035dc addq %r8, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x000035df movq %rbx, $-56(%rbp) - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x000035e3 jmp LBB0_565 - //0x000035e8 LBB0_564 - 0x66, 0x0f, 0x6f, 0xf2, //0x000035e8 movdqa %xmm2, %xmm6 - //0x000035ec LBB0_565 - 0x44, 0x89, 0xe2, //0x000035ec movl %r12d, %edx - 0xf7, 0xd2, //0x000035ef notl %edx - 0x44, 0x21, 0xd2, //0x000035f1 andl %r10d, %edx - 0x45, 0x8d, 0x04, 0x54, //0x000035f4 leal (%r12,%rdx,2), %r8d - 0x8d, 0x0c, 0x12, //0x000035f8 leal (%rdx,%rdx), %ecx - 0xf7, 0xd1, //0x000035fb notl %ecx - 0x44, 0x21, 0xd1, //0x000035fd andl %r10d, %ecx - 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003600 andl $-1431655766, %ecx - 0x45, 0x31, 0xe4, //0x00003606 xorl %r12d, %r12d - 0x01, 0xd1, //0x00003609 addl %edx, %ecx - 0x41, 0x0f, 0x92, 0xc4, //0x0000360b setb %r12b - 0x01, 0xc9, //0x0000360f addl %ecx, %ecx - 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00003611 xorl $1431655765, %ecx - 0x44, 0x21, 0xc1, //0x00003617 andl %r8d, %ecx - 0xf7, 0xd1, //0x0000361a notl %ecx - 0x21, 0xce, //0x0000361c andl %ecx, %esi - 0x4c, 0x8b, 0x75, 0xd0, //0x0000361e movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003622 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003626 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd6, //0x00003630 movdqa %xmm6, %xmm2 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x03, 0xca, 0xff, 0xff, //0x00003634 movdqu $-13821(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x4c, 0x8b, 0x45, 0xc0, //0x0000363d movq $-64(%rbp), %r8 - 0xe9, 0x79, 0xf3, 0xff, 0xff, //0x00003641 jmp LBB0_199 - //0x00003646 LBB0_566 - 0x4d, 0x85, 0xc9, //0x00003646 testq %r9, %r9 - 0x0f, 0x84, 0xe0, 0x05, 0x00, 0x00, //0x00003649 je LBB0_490 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000364f movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003654 movdqa %xmm2, %xmm5 - 0x4c, 0x89, 0xe1, //0x00003658 movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x0000365b notq %rcx - 0x48, 0x8d, 0x34, 0x08, //0x0000365e leaq (%rax,%rcx), %rsi - 0x48, 0x8b, 0x7d, 0xc8, //0x00003662 movq $-56(%rbp), %rdi - 0x48, 0x83, 0xff, 0xff, //0x00003666 cmpq $-1, %rdi - 0x48, 0x89, 0xfa, //0x0000366a movq %rdi, %rdx - 0x48, 0x0f, 0x44, 0xfe, //0x0000366d cmoveq %rsi, %rdi - 0x48, 0x0f, 0x44, 0xd6, //0x00003671 cmoveq %rsi, %rdx - 0x48, 0x83, 0xc0, 0x01, //0x00003675 addq $1, %rax - 0x49, 0x83, 0xc1, 0xff, //0x00003679 addq $-1, %r9 - 0x48, 0x89, 0x7d, 0xc8, //0x0000367d movq %rdi, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x00003681 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003685 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003689 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x00003693 testq %r9, %r9 - 0x0f, 0x85, 0xa5, 0xfb, 0xff, 0xff, //0x00003696 jne LBB0_522 - 0xe9, 0x3e, 0xfc, 0xff, 0xff, //0x0000369c jmp LBB0_532 - //0x000036a1 LBB0_568 - 0x4d, 0x85, 0xc9, //0x000036a1 testq %r9, %r9 - 0x0f, 0x84, 0xa4, 0x05, 0x00, 0x00, //0x000036a4 je LBB0_507 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000036aa movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000036af movdqa %xmm2, %xmm5 - 0x4c, 0x89, 0xe1, //0x000036b3 movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x000036b6 notq %rcx - 0x48, 0x8d, 0x34, 0x08, //0x000036b9 leaq (%rax,%rcx), %rsi - 0x48, 0x8b, 0x7d, 0xc8, //0x000036bd movq $-56(%rbp), %rdi - 0x48, 0x83, 0xff, 0xff, //0x000036c1 cmpq $-1, %rdi - 0x48, 0x89, 0xfa, //0x000036c5 movq %rdi, %rdx - 0x48, 0x0f, 0x44, 0xfe, //0x000036c8 cmoveq %rsi, %rdi - 0x48, 0x0f, 0x44, 0xd6, //0x000036cc cmoveq %rsi, %rdx - 0x48, 0x83, 0xc0, 0x01, //0x000036d0 addq $1, %rax - 0x49, 0x83, 0xc1, 0xff, //0x000036d4 addq $-1, %r9 - 0x48, 0x89, 0x7d, 0xc8, //0x000036d8 movq %rdi, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x000036dc movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000036e0 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000036e4 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x000036ee testq %r9, %r9 - 0x0f, 0x85, 0xf9, 0xfd, 0xff, 0xff, //0x000036f1 jne LBB0_551 - 0xe9, 0x92, 0xfe, 0xff, 0xff, //0x000036f7 jmp LBB0_561 - //0x000036fc LBB0_570 - 0x49, 0x39, 0xd1, //0x000036fc cmpq %rdx, %r9 - 0x0f, 0x84, 0x42, 0x03, 0x00, 0x00, //0x000036ff je LBB0_638 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003705 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000370a movdqa %xmm2, %xmm5 - 0x49, 0x01, 0xd2, //0x0000370e addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003711 addq $1, %r10 - 0x48, 0xf7, 0xd2, //0x00003715 notq %rdx - 0x49, 0x01, 0xd1, //0x00003718 addq %rdx, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x0000371b movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x0000371f movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003723 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x0000372d testq %r9, %r9 - 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00003730 jg LBB0_574 - 0xe9, 0x0c, 0x03, 0x00, 0x00, //0x00003736 jmp LBB0_638 - //0x0000373b LBB0_572 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x0000373b movq $-2, %rcx - 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00003742 movl $2, %eax - 0x49, 0x01, 0xc2, //0x00003747 addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000374a movq $-1, %rax - 0x49, 0x01, 0xc9, //0x00003751 addq %rcx, %r9 - 0x0f, 0x8e, 0xed, 0x02, 0x00, 0x00, //0x00003754 jle LBB0_638 - //0x0000375a LBB0_574 - 0x41, 0x0f, 0xb6, 0x02, //0x0000375a movzbl (%r10), %eax - 0x3c, 0x5c, //0x0000375e cmpb $92, %al - 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00003760 je LBB0_572 - 0x3c, 0x22, //0x00003766 cmpb $34, %al - 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x00003768 je LBB0_577 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000376e movq $-1, %rcx - 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00003775 movl $1, %eax - 0x49, 0x01, 0xc2, //0x0000377a addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000377d movq $-1, %rax - 0x49, 0x01, 0xc9, //0x00003784 addq %rcx, %r9 - 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x00003787 jg LBB0_574 - 0xe9, 0xb5, 0x02, 0x00, 0x00, //0x0000378d jmp LBB0_638 - //0x00003792 LBB0_577 - 0x4d, 0x29, 0xe2, //0x00003792 subq %r12, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003795 addq $1, %r10 - 0x4d, 0x89, 0x16, //0x00003799 movq %r10, (%r14) - 0x4d, 0x85, 0xc0, //0x0000379c testq %r8, %r8 - 0x0f, 0x8f, 0x1b, 0xca, 0xff, 0xff, //0x0000379f jg LBB0_4 - 0xe9, 0x57, 0x02, 0x00, 0x00, //0x000037a5 jmp LBB0_608 - //0x000037aa LBB0_578 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000037aa movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000037af movdqa %xmm2, %xmm5 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000037b3 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x000037b8 jne LBB0_581 - 0x48, 0x89, 0xc1, //0x000037be movq %rax, %rcx - 0x4c, 0x29, 0xe1, //0x000037c1 subq %r12, %rcx - 0x48, 0x0f, 0xbc, 0xfe, //0x000037c4 bsfq %rsi, %rdi - 0x48, 0x01, 0xcf, //0x000037c8 addq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xc8, //0x000037cb movq %rdi, $-56(%rbp) - 0xe9, 0x09, 0x00, 0x00, 0x00, //0x000037cf jmp LBB0_581 - //0x000037d4 LBB0_580 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000037d4 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000037d9 movdqa %xmm2, %xmm5 - //0x000037dd LBB0_581 - 0x44, 0x89, 0xc1, //0x000037dd movl %r8d, %ecx - 0xf7, 0xd1, //0x000037e0 notl %ecx - 0x21, 0xf1, //0x000037e2 andl %esi, %ecx - 0x41, 0x8d, 0x3c, 0x48, //0x000037e4 leal (%r8,%rcx,2), %edi - 0x8d, 0x1c, 0x09, //0x000037e8 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x000037eb notl %ebx - 0x21, 0xf3, //0x000037ed andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x000037ef andl $-1431655766, %ebx - 0x45, 0x31, 0xc0, //0x000037f5 xorl %r8d, %r8d - 0x01, 0xcb, //0x000037f8 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc0, //0x000037fa setb %r8b - 0x01, 0xdb, //0x000037fe addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00003800 xorl $1431655765, %ebx - 0x21, 0xfb, //0x00003806 andl %edi, %ebx - 0xf7, 0xd3, //0x00003808 notl %ebx - 0x21, 0xda, //0x0000380a andl %ebx, %edx - 0x4c, 0x8b, 0x75, 0xd0, //0x0000380c movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003810 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003814 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x0000381e movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00003822 movdqa %xmm6, %xmm13 - 0x48, 0x85, 0xd2, //0x00003827 testq %rdx, %rdx - 0x0f, 0x85, 0x89, 0xf4, 0xff, 0xff, //0x0000382a jne LBB0_245 - //0x00003830 LBB0_582 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003830 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003835 movdqa %xmm2, %xmm5 - 0x48, 0x83, 0xc0, 0x20, //0x00003839 addq $32, %rax - 0x49, 0x83, 0xc1, 0xe0, //0x0000383d addq $-32, %r9 - //0x00003841 LBB0_583 - 0x4d, 0x85, 0xc0, //0x00003841 testq %r8, %r8 - 0x0f, 0x85, 0x53, 0x01, 0x00, 0x00, //0x00003844 jne LBB0_601 - 0x4c, 0x89, 0xe2, //0x0000384a movq %r12, %rdx - 0x48, 0xf7, 0xd2, //0x0000384d notq %rdx - 0x48, 0x8b, 0x75, 0xc8, //0x00003850 movq $-56(%rbp), %rsi - 0x4d, 0x85, 0xc9, //0x00003854 testq %r9, %r9 - 0x0f, 0x84, 0x83, 0x00, 0x00, 0x00, //0x00003857 je LBB0_595 - //0x0000385d LBB0_585 - 0x48, 0x83, 0xc2, 0x01, //0x0000385d addq $1, %rdx - //0x00003861 LBB0_586 - 0x31, 0xff, //0x00003861 xorl %edi, %edi - //0x00003863 LBB0_587 - 0x0f, 0xb6, 0x0c, 0x38, //0x00003863 movzbl (%rax,%rdi), %ecx - 0x80, 0xf9, 0x22, //0x00003867 cmpb $34, %cl - 0x0f, 0x84, 0x69, 0x00, 0x00, 0x00, //0x0000386a je LBB0_594 - 0x80, 0xf9, 0x5c, //0x00003870 cmpb $92, %cl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003873 je LBB0_592 - 0x48, 0x83, 0xc7, 0x01, //0x00003879 addq $1, %rdi - 0x49, 0x39, 0xf9, //0x0000387d cmpq %rdi, %r9 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003880 jne LBB0_587 - 0xe9, 0x78, 0x00, 0x00, 0x00, //0x00003886 jmp LBB0_590 - //0x0000388b LBB0_592 - 0x49, 0x8d, 0x49, 0xff, //0x0000388b leaq $-1(%r9), %rcx - 0x48, 0x39, 0xf9, //0x0000388f cmpq %rdi, %rcx - 0x0f, 0x84, 0xb6, 0x03, 0x00, 0x00, //0x00003892 je LBB0_507 - 0x48, 0x8d, 0x0c, 0x02, //0x00003898 leaq (%rdx,%rax), %rcx - 0x48, 0x01, 0xf9, //0x0000389c addq %rdi, %rcx - 0x48, 0x83, 0xfe, 0xff, //0x0000389f cmpq $-1, %rsi - 0x48, 0x8b, 0x5d, 0xc8, //0x000038a3 movq $-56(%rbp), %rbx - 0x48, 0x0f, 0x44, 0xd9, //0x000038a7 cmoveq %rcx, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x000038ab movq %rbx, $-56(%rbp) - 0x48, 0x0f, 0x44, 0xf1, //0x000038af cmoveq %rcx, %rsi - 0x48, 0x01, 0xf8, //0x000038b3 addq %rdi, %rax - 0x48, 0x83, 0xc0, 0x02, //0x000038b6 addq $2, %rax - 0x4c, 0x89, 0xc9, //0x000038ba movq %r9, %rcx - 0x48, 0x29, 0xf9, //0x000038bd subq %rdi, %rcx - 0x48, 0x83, 0xc1, 0xfe, //0x000038c0 addq $-2, %rcx - 0x49, 0x83, 0xc1, 0xfe, //0x000038c4 addq $-2, %r9 - 0x49, 0x39, 0xf9, //0x000038c8 cmpq %rdi, %r9 - 0x49, 0x89, 0xc9, //0x000038cb movq %rcx, %r9 - 0x0f, 0x85, 0x8d, 0xff, 0xff, 0xff, //0x000038ce jne LBB0_586 - 0xe9, 0x75, 0x03, 0x00, 0x00, //0x000038d4 jmp LBB0_507 - //0x000038d9 LBB0_594 - 0x48, 0x01, 0xf8, //0x000038d9 addq %rdi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x000038dc addq $1, %rax - //0x000038e0 LBB0_595 - 0x4c, 0x29, 0xe0, //0x000038e0 subq %r12, %rax - //0x000038e3 LBB0_596 - 0x4c, 0x8b, 0x75, 0xd0, //0x000038e3 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000038e7 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000038eb movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x000038f5 movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x000038f9 movdqa %xmm6, %xmm13 - 0xe9, 0x3a, 0xed, 0xff, 0xff, //0x000038fe jmp LBB0_426 - //0x00003903 LBB0_590 - 0x80, 0xf9, 0x22, //0x00003903 cmpb $34, %cl - 0x0f, 0x85, 0x42, 0x03, 0x00, 0x00, //0x00003906 jne LBB0_507 - 0x4c, 0x01, 0xc8, //0x0000390c addq %r9, %rax - 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x0000390f jmp LBB0_595 - //0x00003914 LBB0_597 - 0x48, 0x89, 0xd9, //0x00003914 movq %rbx, %rcx - 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00003917 movdqa %xmm13, %xmm7 - 0x66, 0x0f, 0x6f, 0xf2, //0x0000391c movdqa %xmm2, %xmm6 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003920 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x22, 0x00, 0x00, 0x00, //0x00003925 jne LBB0_600 - 0x49, 0x89, 0xc0, //0x0000392b movq %rax, %r8 - 0x4d, 0x29, 0xe0, //0x0000392e subq %r12, %r8 - 0x49, 0x0f, 0xbc, 0xd9, //0x00003931 bsfq %r9, %rbx - 0x4c, 0x01, 0xc3, //0x00003935 addq %r8, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x00003938 movq %rbx, $-56(%rbp) - 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x0000393c jmp LBB0_600 - //0x00003941 LBB0_599 - 0x48, 0x89, 0xd9, //0x00003941 movq %rbx, %rcx - 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00003944 movdqa %xmm13, %xmm7 - 0x66, 0x0f, 0x6f, 0xf2, //0x00003949 movdqa %xmm2, %xmm6 - //0x0000394d LBB0_600 - 0x48, 0x89, 0xcb, //0x0000394d movq %rcx, %rbx - 0xf7, 0xd1, //0x00003950 notl %ecx - 0x44, 0x21, 0xc9, //0x00003952 andl %r9d, %ecx - 0x44, 0x8d, 0x04, 0x4b, //0x00003955 leal (%rbx,%rcx,2), %r8d - 0x8d, 0x14, 0x09, //0x00003959 leal (%rcx,%rcx), %edx - 0xf7, 0xd2, //0x0000395c notl %edx - 0x44, 0x21, 0xca, //0x0000395e andl %r9d, %edx - 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003961 andl $-1431655766, %edx - 0x31, 0xdb, //0x00003967 xorl %ebx, %ebx - 0x01, 0xca, //0x00003969 addl %ecx, %edx - 0x0f, 0x92, 0xc3, //0x0000396b setb %bl - 0x01, 0xd2, //0x0000396e addl %edx, %edx - 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x00003970 xorl $1431655765, %edx - 0x44, 0x21, 0xc2, //0x00003976 andl %r8d, %edx - 0xf7, 0xd2, //0x00003979 notl %edx - 0x21, 0xd6, //0x0000397b andl %edx, %esi - 0x4c, 0x8b, 0x75, 0xd0, //0x0000397d movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003981 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003985 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd6, //0x0000398f movdqa %xmm6, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x00003993 movdqa %xmm7, %xmm13 - 0xe9, 0xc0, 0xf3, 0xff, 0xff, //0x00003998 jmp LBB0_398 - //0x0000399d LBB0_601 - 0x4d, 0x85, 0xc9, //0x0000399d testq %r9, %r9 - 0x0f, 0x84, 0xa8, 0x02, 0x00, 0x00, //0x000039a0 je LBB0_507 - 0x4c, 0x89, 0xe2, //0x000039a6 movq %r12, %rdx - 0x48, 0xf7, 0xd2, //0x000039a9 notq %rdx - 0x48, 0x8d, 0x0c, 0x10, //0x000039ac leaq (%rax,%rdx), %rcx - 0x48, 0x8b, 0x7d, 0xc8, //0x000039b0 movq $-56(%rbp), %rdi - 0x48, 0x83, 0xff, 0xff, //0x000039b4 cmpq $-1, %rdi - 0x48, 0x89, 0xfe, //0x000039b8 movq %rdi, %rsi - 0x48, 0x0f, 0x44, 0xf9, //0x000039bb cmoveq %rcx, %rdi - 0x48, 0x0f, 0x44, 0xf1, //0x000039bf cmoveq %rcx, %rsi - 0x48, 0x83, 0xc0, 0x01, //0x000039c3 addq $1, %rax - 0x49, 0x83, 0xc1, 0xff, //0x000039c7 addq $-1, %r9 - 0x48, 0x89, 0x7d, 0xc8, //0x000039cb movq %rdi, $-56(%rbp) - 0x4d, 0x85, 0xc9, //0x000039cf testq %r9, %r9 - 0x0f, 0x85, 0x85, 0xfe, 0xff, 0xff, //0x000039d2 jne LBB0_585 - 0xe9, 0x03, 0xff, 0xff, 0xff, //0x000039d8 jmp LBB0_595 - //0x000039dd LBB0_603 - 0x49, 0x89, 0x16, //0x000039dd movq %rdx, (%r14) - //0x000039e0 LBB0_604 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000039e0 movq $-1, %rax - 0xe9, 0x5b, 0x00, 0x00, 0x00, //0x000039e7 jmp LBB0_638 - //0x000039ec LBB0_634 - 0x48, 0xc7, 0xc0, 0xf9, 0xff, 0xff, 0xff, //0x000039ec movq $-7, %rax - 0xe9, 0x4f, 0x00, 0x00, 0x00, //0x000039f3 jmp LBB0_638 - //0x000039f8 LBB0_606 - 0x48, 0x83, 0xc0, 0xff, //0x000039f8 addq $-1, %rax - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x000039fc jmp LBB0_638 - //0x00003a01 LBB0_608 - 0x49, 0x83, 0xc0, 0xff, //0x00003a01 addq $-1, %r8 - 0x4c, 0x89, 0xc0, //0x00003a05 movq %r8, %rax - 0xe9, 0x3a, 0x00, 0x00, 0x00, //0x00003a08 jmp LBB0_638 - //0x00003a0d LBB0_609 - 0x48, 0x83, 0xf8, 0xff, //0x00003a0d cmpq $-1, %rax - 0x0f, 0x85, 0x90, 0x00, 0x00, 0x00, //0x00003a11 jne LBB0_621 - //0x00003a17 LBB0_610 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003a17 movq $-1, %rax - 0x48, 0x8b, 0x4d, 0xa0, //0x00003a1e movq $-96(%rbp), %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00003a22 movq %rcx, $-56(%rbp) - 0xe9, 0x7c, 0x00, 0x00, 0x00, //0x00003a26 jmp LBB0_621 - //0x00003a2b LBB0_611 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00003a2b movq $-1, %r13 - //0x00003a32 LBB0_612 - 0x4c, 0x29, 0xee, //0x00003a32 subq %r13, %rsi - 0x48, 0x83, 0xc6, 0xfe, //0x00003a35 addq $-2, %rsi - 0x48, 0x8b, 0x45, 0xd0, //0x00003a39 movq $-48(%rbp), %rax - 0x48, 0x89, 0x30, //0x00003a3d movq %rsi, (%rax) - //0x00003a40 LBB0_637 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003a40 movq $-2, %rax - //0x00003a47 LBB0_638 - 0x48, 0x81, 0xc4, 0x88, 0x00, 0x00, 0x00, //0x00003a47 addq $136, %rsp - 0x5b, //0x00003a4e popq %rbx - 0x41, 0x5c, //0x00003a4f popq %r12 - 0x41, 0x5d, //0x00003a51 popq %r13 - 0x41, 0x5e, //0x00003a53 popq %r14 - 0x41, 0x5f, //0x00003a55 popq %r15 - 0x5d, //0x00003a57 popq %rbp - 0xc3, //0x00003a58 retq - //0x00003a59 LBB0_614 - 0x48, 0x83, 0xc6, 0xff, //0x00003a59 addq $-1, %rsi - 0x48, 0x89, 0xf0, //0x00003a5d movq %rsi, %rax - 0xe9, 0xe2, 0xff, 0xff, 0xff, //0x00003a60 jmp LBB0_638 - //0x00003a65 LBB0_615 - 0x48, 0x83, 0xf8, 0xff, //0x00003a65 cmpq $-1, %rax - 0x48, 0x8b, 0x55, 0xc8, //0x00003a69 movq $-56(%rbp), %rdx - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003a6d jne LBB0_617 - //0x00003a73 LBB0_616 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003a73 movq $-1, %rax - 0x48, 0x8b, 0x55, 0xa0, //0x00003a7a movq $-96(%rbp), %rdx - //0x00003a7e LBB0_617 - 0x49, 0x89, 0x16, //0x00003a7e movq %rdx, (%r14) - 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003a81 jmp LBB0_638 - //0x00003a86 LBB0_618 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003a86 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003a8b jne LBB0_620 - 0x48, 0x0f, 0xbc, 0xce, //0x00003a91 bsfq %rsi, %rcx - 0x48, 0x01, 0xc1, //0x00003a95 addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00003a98 movq %rcx, $-56(%rbp) - //0x00003a9c LBB0_620 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003a9c movq $-2, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x00003aa3 movq $-48(%rbp), %r14 - //0x00003aa7 LBB0_621 - 0x48, 0x8b, 0x4d, 0xc8, //0x00003aa7 movq $-56(%rbp), %rcx - 0x49, 0x89, 0x0e, //0x00003aab movq %rcx, (%r14) - 0xe9, 0x94, 0xff, 0xff, 0xff, //0x00003aae jmp LBB0_638 - //0x00003ab3 LBB0_622 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003ab3 movq $-2, %rax - 0x80, 0xfa, 0x61, //0x00003aba cmpb $97, %dl - 0x0f, 0x85, 0x84, 0xff, 0xff, 0xff, //0x00003abd jne LBB0_638 - 0x48, 0x8d, 0x51, 0x01, //0x00003ac3 leaq $1(%rcx), %rdx - 0x49, 0x89, 0x16, //0x00003ac7 movq %rdx, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x00003aca cmpb $108, $1(%r12,%rcx) - 0x0f, 0x85, 0x71, 0xff, 0xff, 0xff, //0x00003ad0 jne LBB0_638 - 0x48, 0x8d, 0x51, 0x02, //0x00003ad6 leaq $2(%rcx), %rdx + 0x48, 0xc1, 0xe9, 0x04, //0x0000229e shrq $4, %rcx + 0x4c, 0x01, 0xe9, //0x000022a2 addq %r13, %rcx + 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x000022a5 movabsq $1085102592571150095, %rdx + 0x48, 0x21, 0xd1, //0x000022af andq %rdx, %rcx + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000022b2 movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xca, //0x000022bc imulq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x000022c0 shrq $56, %rcx + 0x49, 0x01, 0xca, //0x000022c4 addq %rcx, %r10 + 0x49, 0x83, 0xc4, 0x40, //0x000022c7 addq $64, %r12 + 0x48, 0x8b, 0x55, 0xb8, //0x000022cb movq $-72(%rbp), %rdx + 0x48, 0x83, 0xc2, 0xc0, //0x000022cf addq $-64, %rdx + 0x4d, 0x89, 0xd8, //0x000022d3 movq %r11, %r8 + 0x48, 0x83, 0xfa, 0x40, //0x000022d6 cmpq $64, %rdx + 0x48, 0x89, 0x55, 0xb8, //0x000022da movq %rdx, $-72(%rbp) + 0x0f, 0x8d, 0x44, 0xfd, 0xff, 0xff, //0x000022de jge LBB0_367 + 0xe9, 0xe4, 0xfb, 0xff, 0xff, //0x000022e4 jmp LBB0_376 + //0x000022e9 LBB0_392 + 0x48, 0x8b, 0x75, 0xa8, //0x000022e9 movq $-88(%rbp), %rsi + 0x48, 0x8b, 0x4e, 0x08, //0x000022ed movq $8(%rsi), %rcx + 0x48, 0x0f, 0xbc, 0xd2, //0x000022f1 bsfq %rdx, %rdx + 0x48, 0x2b, 0x55, 0xb8, //0x000022f5 subq $-72(%rbp), %rdx + 0x48, 0x01, 0xd1, //0x000022f9 addq %rdx, %rcx + 0x48, 0x83, 0xc1, 0x01, //0x000022fc addq $1, %rcx + 0x4c, 0x8b, 0x75, 0xd0, //0x00002300 movq $-48(%rbp), %r14 + 0x49, 0x89, 0x0e, //0x00002304 movq %rcx, (%r14) + 0x48, 0x8b, 0x56, 0x08, //0x00002307 movq $8(%rsi), %rdx + 0x48, 0x39, 0xd1, //0x0000230b cmpq %rdx, %rcx + 0x48, 0x0f, 0x47, 0xca, //0x0000230e cmovaq %rdx, %rcx + 0x49, 0x89, 0x0e, //0x00002312 movq %rcx, (%r14) + 0x0f, 0x87, 0x94, 0x17, 0x00, 0x00, //0x00002315 ja LBB0_650 + 0x48, 0x8b, 0x45, 0xc0, //0x0000231b movq $-64(%rbp), %rax + 0xe9, 0x48, 0x09, 0x00, 0x00, //0x0000231f jmp LBB0_488 + //0x00002324 LBB0_394 + 0x66, 0x0f, 0xbc, 0xc9, //0x00002324 bsfw %cx, %cx + 0x0f, 0xb7, 0xd9, //0x00002328 movzwl %cx, %ebx + 0x48, 0x89, 0xd9, //0x0000232b movq %rbx, %rcx + 0x48, 0x29, 0xf9, //0x0000232e subq %rdi, %rcx + 0x49, 0x89, 0x0e, //0x00002331 movq %rcx, (%r14) + 0x48, 0x85, 0xc9, //0x00002334 testq %rcx, %rcx + 0x0f, 0x8e, 0x42, 0xef, 0xff, 0xff, //0x00002337 jle LBB0_231 + 0x49, 0x01, 0xd8, //0x0000233d addq %rbx, %r8 + 0x48, 0x01, 0xda, //0x00002340 addq %rbx, %rdx + 0x48, 0x01, 0xde, //0x00002343 addq %rbx, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002346 .p2align 4, 0x90 + //0x00002350 LBB0_396 + 0x0f, 0xb6, 0x0e, //0x00002350 movzbl (%rsi), %ecx + 0x48, 0x83, 0xf9, 0x20, //0x00002353 cmpq $32, %rcx + 0x0f, 0x87, 0x22, 0xef, 0xff, 0xff, //0x00002357 ja LBB0_231 + 0x49, 0x0f, 0xa3, 0xcb, //0x0000235d btq %rcx, %r11 + 0x0f, 0x83, 0x18, 0xef, 0xff, 0xff, //0x00002361 jae LBB0_231 + 0x49, 0x89, 0x16, //0x00002367 movq %rdx, (%r14) + 0x49, 0x83, 0xc0, 0xff, //0x0000236a addq $-1, %r8 + 0x48, 0x83, 0xc2, 0xff, //0x0000236e addq $-1, %rdx + 0x48, 0x83, 0xc6, 0xff, //0x00002372 addq $-1, %rsi + 0x49, 0x83, 0xf8, 0x01, //0x00002376 cmpq $1, %r8 + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x0000237a jg LBB0_396 + 0xe9, 0xfa, 0xee, 0xff, 0xff, //0x00002380 jmp LBB0_231 + //0x00002385 LBB0_399 + 0x49, 0x8d, 0x4f, 0xff, //0x00002385 leaq $-1(%r15), %rcx + 0x49, 0x39, 0xc8, //0x00002389 cmpq %rcx, %r8 + 0x49, 0xf7, 0xd7, //0x0000238c notq %r15 + 0x4d, 0x0f, 0x45, 0xf9, //0x0000238f cmovneq %r9, %r15 + 0x84, 0xd2, //0x00002393 testb %dl, %dl + 0x4d, 0x0f, 0x44, 0xf9, //0x00002395 cmoveq %r9, %r15 + 0x4d, 0x89, 0xfd, //0x00002399 movq %r15, %r13 + 0xe9, 0x53, 0x03, 0x00, 0x00, //0x0000239c jmp LBB0_451 + //0x000023a1 LBB0_400 + 0x48, 0x89, 0xc6, //0x000023a1 movq %rax, %rsi + 0x48, 0x29, 0xd6, //0x000023a4 subq %rdx, %rsi + 0x0f, 0x84, 0xf6, 0x18, 0x00, 0x00, //0x000023a7 je LBB0_658 + 0x48, 0x83, 0xfe, 0x40, //0x000023ad cmpq $64, %rsi + 0x0f, 0x82, 0x32, 0x0d, 0x00, 0x00, //0x000023b1 jb LBB0_520 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000023b7 movq $-1, $-56(%rbp) + 0x48, 0x8b, 0x45, 0xc0, //0x000023bf movq $-64(%rbp), %rax + 0x31, 0xdb, //0x000023c3 xorl %ebx, %ebx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000023c5 .p2align 4, 0x90 + //0x000023d0 LBB0_403 + 0x48, 0x89, 0x75, 0xb8, //0x000023d0 movq %rsi, $-72(%rbp) + 0x49, 0x89, 0xda, //0x000023d4 movq %rbx, %r10 + 0xf3, 0x41, 0x0f, 0x6f, 0x2c, 0x04, //0x000023d7 movdqu (%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x04, 0x10, //0x000023dd movdqu $16(%r12,%rax), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x20, //0x000023e4 movdqu $32(%r12,%rax), %xmm6 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x30, //0x000023eb movdqu $48(%r12,%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xdd, //0x000023f2 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x000023f6 pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x000023fa pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x6f, 0xdf, //0x000023ff movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002403 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00002407 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xde, //0x0000240b movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000240f pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xf3, //0x00002413 pmovmskb %xmm3, %r14d + 0x66, 0x0f, 0x6f, 0xdc, //0x00002418 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000241c pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x00002420 pmovmskb %xmm3, %r15d + 0x66, 0x0f, 0x6f, 0xdd, //0x00002425 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002429 pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x0000242d pmovmskb %xmm3, %r13d + 0x66, 0x0f, 0x6f, 0xdf, //0x00002432 movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002436 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x0000243a pmovmskb %xmm3, %ebx + 0x66, 0x0f, 0x6f, 0xde, //0x0000243e movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002442 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00002446 pmovmskb %xmm3, %edi + 0x66, 0x0f, 0x6f, 0xdc, //0x0000244a movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000244e pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xcb, //0x00002452 pmovmskb %xmm3, %r9d + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002457 movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdf, //0x0000245c pcmpgtb %xmm7, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xfa, //0x00002460 pcmpgtb %xmm10, %xmm7 + 0x66, 0x0f, 0xdb, 0xfb, //0x00002465 pand %xmm3, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x00002469 pmovmskb %xmm7, %esi + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x0000246d movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xde, //0x00002472 pcmpgtb %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xf2, //0x00002476 pcmpgtb %xmm10, %xmm6 + 0x66, 0x0f, 0xdb, 0xf3, //0x0000247b pand %xmm3, %xmm6 + 0x66, 0x0f, 0xd7, 0xd6, //0x0000247f pmovmskb %xmm6, %edx + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002483 movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00002488 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x0000248c pcmpgtb %xmm10, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x00002491 pand %xmm3, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xc4, //0x00002495 pmovmskb %xmm4, %r8d + 0x49, 0xc1, 0xe7, 0x30, //0x0000249a shlq $48, %r15 + 0x49, 0xc1, 0xe6, 0x20, //0x0000249e shlq $32, %r14 + 0x4d, 0x09, 0xfe, //0x000024a2 orq %r15, %r14 + 0x48, 0xc1, 0xe1, 0x10, //0x000024a5 shlq $16, %rcx + 0x4c, 0x09, 0xf1, //0x000024a9 orq %r14, %rcx + 0x49, 0x09, 0xcb, //0x000024ac orq %rcx, %r11 + 0x49, 0xc1, 0xe1, 0x30, //0x000024af shlq $48, %r9 + 0x48, 0xc1, 0xe7, 0x20, //0x000024b3 shlq $32, %rdi + 0x4c, 0x09, 0xcf, //0x000024b7 orq %r9, %rdi + 0x48, 0xc1, 0xe3, 0x10, //0x000024ba shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x000024be orq %rdi, %rbx + 0x49, 0xc1, 0xe0, 0x30, //0x000024c1 shlq $48, %r8 + 0x48, 0xc1, 0xe2, 0x20, //0x000024c5 shlq $32, %rdx + 0x4c, 0x09, 0xc2, //0x000024c9 orq %r8, %rdx + 0x48, 0xc1, 0xe6, 0x10, //0x000024cc shlq $16, %rsi + 0x48, 0x09, 0xd6, //0x000024d0 orq %rdx, %rsi + 0x49, 0x09, 0xdd, //0x000024d3 orq %rbx, %r13 + 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x000024d6 jne LBB0_420 + 0x4d, 0x85, 0xd2, //0x000024dc testq %r10, %r10 + 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x000024df jne LBB0_422 + 0x31, 0xdb, //0x000024e5 xorl %ebx, %ebx + 0x4c, 0x8b, 0x75, 0xd0, //0x000024e7 movq $-48(%rbp), %r14 + //0x000024eb LBB0_406 + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x000024eb movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdd, //0x000024f0 pcmpgtb %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xea, //0x000024f4 pcmpgtb %xmm10, %xmm5 + 0x66, 0x0f, 0xdb, 0xeb, //0x000024f9 pand %xmm3, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x000024fd pmovmskb %xmm5, %ecx + 0x48, 0x09, 0xce, //0x00002501 orq %rcx, %rsi + 0x4d, 0x85, 0xdb, //0x00002504 testq %r11, %r11 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002507 movq $-80(%rbp), %r13 + 0x0f, 0x85, 0x93, 0x00, 0x00, 0x00, //0x0000250b jne LBB0_424 + 0x48, 0x85, 0xf6, //0x00002511 testq %rsi, %rsi + 0x0f, 0x85, 0xf7, 0x16, 0x00, 0x00, //0x00002514 jne LBB0_645 + 0x48, 0x8b, 0x75, 0xb8, //0x0000251a movq $-72(%rbp), %rsi + 0x48, 0x83, 0xc6, 0xc0, //0x0000251e addq $-64, %rsi + 0x48, 0x83, 0xc0, 0x40, //0x00002522 addq $64, %rax + 0x48, 0x83, 0xfe, 0x3f, //0x00002526 cmpq $63, %rsi + 0x0f, 0x87, 0xa0, 0xfe, 0xff, 0xff, //0x0000252a ja LBB0_403 + 0xe9, 0xd5, 0x07, 0x00, 0x00, //0x00002530 jmp LBB0_409 + //0x00002535 LBB0_420 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00002535 cmpq $-1, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x0000253a movq $-48(%rbp), %r14 + 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x0000253e jne LBB0_423 + 0x49, 0x0f, 0xbc, 0xcd, //0x00002544 bsfq %r13, %rcx + 0x48, 0x01, 0xc1, //0x00002548 addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x0000254b movq %rcx, $-56(%rbp) + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x0000254f jmp LBB0_423 + //0x00002554 LBB0_422 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002554 movq $-48(%rbp), %r14 + //0x00002558 LBB0_423 + 0x4c, 0x89, 0xd1, //0x00002558 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x0000255b notq %rcx + 0x4c, 0x21, 0xe9, //0x0000255e andq %r13, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x00002561 leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xd2, //0x00002565 orq %r10, %rdx + 0x48, 0x89, 0xd7, //0x00002568 movq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x0000256b notq %rdi + 0x4c, 0x21, 0xef, //0x0000256e andq %r13, %rdi + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002571 movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xdf, //0x0000257b andq %rbx, %rdi + 0x31, 0xdb, //0x0000257e xorl %ebx, %ebx + 0x48, 0x01, 0xcf, //0x00002580 addq %rcx, %rdi + 0x0f, 0x92, 0xc3, //0x00002583 setb %bl + 0x48, 0x01, 0xff, //0x00002586 addq %rdi, %rdi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002589 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcf, //0x00002593 xorq %rcx, %rdi + 0x48, 0x21, 0xd7, //0x00002596 andq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x00002599 notq %rdi + 0x49, 0x21, 0xfb, //0x0000259c andq %rdi, %r11 + 0xe9, 0x47, 0xff, 0xff, 0xff, //0x0000259f jmp LBB0_406 + //0x000025a4 LBB0_424 + 0x49, 0x0f, 0xbc, 0xcb, //0x000025a4 bsfq %r11, %rcx + 0x48, 0x85, 0xf6, //0x000025a8 testq %rsi, %rsi + 0x0f, 0x84, 0x8f, 0x00, 0x00, 0x00, //0x000025ab je LBB0_438 + 0x48, 0x0f, 0xbc, 0xd6, //0x000025b1 bsfq %rsi, %rdx + 0xe9, 0x8b, 0x00, 0x00, 0x00, //0x000025b5 jmp LBB0_439 + //0x000025ba LBB0_426 + 0x41, 0x89, 0xcb, //0x000025ba movl %ecx, %r11d + 0x4c, 0x03, 0x5d, 0xb8, //0x000025bd addq $-72(%rbp), %r11 + 0x49, 0x01, 0xdb, //0x000025c1 addq %rbx, %r11 + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x000025c4 jmp LBB0_428 + //0x000025c9 LBB0_427 + 0x48, 0x01, 0xde, //0x000025c9 addq %rbx, %rsi + 0x49, 0x89, 0xf3, //0x000025cc movq %rsi, %r11 + //0x000025cf LBB0_428 + 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x000025cf movq $-1, %rbx + 0x4d, 0x85, 0xf6, //0x000025d6 testq %r14, %r14 + 0x0f, 0x84, 0x56, 0x16, 0x00, 0x00, //0x000025d9 je LBB0_648 + 0x4d, 0x85, 0xed, //0x000025df testq %r13, %r13 + 0x0f, 0x84, 0x4d, 0x16, 0x00, 0x00, //0x000025e2 je LBB0_648 + 0x4d, 0x85, 0xc0, //0x000025e8 testq %r8, %r8 + 0x0f, 0x84, 0x44, 0x16, 0x00, 0x00, //0x000025eb je LBB0_648 + 0x4c, 0x2b, 0x5d, 0xb8, //0x000025f1 subq $-72(%rbp), %r11 + 0x49, 0x8d, 0x4b, 0xff, //0x000025f5 leaq $-1(%r11), %rcx + 0x49, 0x39, 0xce, //0x000025f9 cmpq %rcx, %r14 + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x000025fc je LBB0_437 + 0x49, 0x39, 0xcd, //0x00002602 cmpq %rcx, %r13 + 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x00002605 je LBB0_437 + 0x49, 0x39, 0xc8, //0x0000260b cmpq %rcx, %r8 + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x0000260e je LBB0_437 + 0x4d, 0x85, 0xed, //0x00002614 testq %r13, %r13 + 0x0f, 0x8e, 0x99, 0x00, 0x00, 0x00, //0x00002617 jle LBB0_446 + 0x49, 0x8d, 0x4d, 0xff, //0x0000261d leaq $-1(%r13), %rcx + 0x49, 0x39, 0xc8, //0x00002621 cmpq %rcx, %r8 + 0x0f, 0x84, 0x8c, 0x00, 0x00, 0x00, //0x00002624 je LBB0_446 + 0x49, 0xf7, 0xd5, //0x0000262a notq %r13 + 0x4c, 0x89, 0xeb, //0x0000262d movq %r13, %rbx + 0xe9, 0x24, 0x06, 0x00, 0x00, //0x00002630 jmp LBB0_486 + //0x00002635 LBB0_437 + 0x49, 0xf7, 0xdb, //0x00002635 negq %r11 + 0x4c, 0x89, 0xdb, //0x00002638 movq %r11, %rbx + 0xe9, 0x19, 0x06, 0x00, 0x00, //0x0000263b jmp LBB0_486 + //0x00002640 LBB0_438 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002640 movl $64, %edx + //0x00002645 LBB0_439 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002645 movabsq $4294977024, %r11 + 0x48, 0x8b, 0x5d, 0xc0, //0x0000264f movq $-64(%rbp), %rbx + 0x48, 0x39, 0xca, //0x00002653 cmpq %rcx, %rdx + 0x0f, 0x82, 0xfb, 0x15, 0x00, 0x00, //0x00002656 jb LBB0_654 + 0x48, 0x01, 0xc8, //0x0000265c addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000265f addq $1, %rax + //0x00002663 LBB0_441 + 0x48, 0x85, 0xc0, //0x00002663 testq %rax, %rax + 0x0f, 0x88, 0x55, 0x14, 0x00, 0x00, //0x00002666 js LBB0_627 + 0x49, 0x89, 0x06, //0x0000266c movq %rax, (%r14) + 0x48, 0x85, 0xdb, //0x0000266f testq %rbx, %rbx + 0x0f, 0x8f, 0x58, 0xdb, 0xff, 0xff, //0x00002672 jg LBB0_4 + 0xe9, 0xca, 0x15, 0x00, 0x00, //0x00002678 jmp LBB0_443 + //0x0000267d LBB0_131 + 0x4d, 0x85, 0xdb, //0x0000267d testq %r11, %r11 + 0x0f, 0x85, 0xd2, 0x0a, 0x00, 0x00, //0x00002680 jne LBB0_525 + 0x49, 0x01, 0xf2, //0x00002686 addq %rsi, %r10 + 0x49, 0x29, 0xf1, //0x00002689 subq %rsi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x0000268c movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002690 movabsq $4294977024, %r11 + //0x0000269a LBB0_133 + 0x4d, 0x85, 0xc9, //0x0000269a testq %r9, %r9 + 0x0f, 0x8f, 0x1c, 0x0b, 0x00, 0x00, //0x0000269d jg LBB0_529 + 0xe9, 0x07, 0x14, 0x00, 0x00, //0x000026a3 jmp LBB0_650 + //0x000026a8 LBB0_444 + 0x0f, 0xbc, 0xcb, //0x000026a8 bsfl %ebx, %ecx + //0x000026ab LBB0_445 + 0x49, 0xf7, 0xd5, //0x000026ab notq %r13 + 0x49, 0x29, 0xcd, //0x000026ae subq %rcx, %r13 + 0xe9, 0x34, 0x00, 0x00, 0x00, //0x000026b1 jmp LBB0_450 + //0x000026b6 LBB0_446 + 0x4c, 0x89, 0xf1, //0x000026b6 movq %r14, %rcx + 0x4c, 0x09, 0xc1, //0x000026b9 orq %r8, %rcx + 0x0f, 0x99, 0xc2, //0x000026bc setns %dl + 0x0f, 0x88, 0xfb, 0x01, 0x00, 0x00, //0x000026bf js LBB0_453 + 0x4d, 0x39, 0xc6, //0x000026c5 cmpq %r8, %r14 + 0x0f, 0x8c, 0xf2, 0x01, 0x00, 0x00, //0x000026c8 jl LBB0_453 + 0x49, 0xf7, 0xd6, //0x000026ce notq %r14 + 0x4c, 0x89, 0xf3, //0x000026d1 movq %r14, %rbx + 0xe9, 0x80, 0x05, 0x00, 0x00, //0x000026d4 jmp LBB0_486 + //0x000026d9 LBB0_449 + 0x4c, 0x03, 0x65, 0xc0, //0x000026d9 addq $-64(%rbp), %r12 + 0x49, 0x29, 0xf4, //0x000026dd subq %rsi, %r12 + 0x49, 0x29, 0xd4, //0x000026e0 subq %rdx, %r12 + 0x49, 0x83, 0xc4, 0xfe, //0x000026e3 addq $-2, %r12 + 0x4d, 0x89, 0xe5, //0x000026e7 movq %r12, %r13 + //0x000026ea LBB0_450 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000026ea movabsq $4294977024, %r11 + //0x000026f4 LBB0_451 + 0x4d, 0x85, 0xed, //0x000026f4 testq %r13, %r13 + 0x0f, 0x88, 0x99, 0x13, 0x00, 0x00, //0x000026f7 js LBB0_626 + //0x000026fd LBB0_452 + 0x49, 0x01, 0xc5, //0x000026fd addq %rax, %r13 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002700 movq $-48(%rbp), %r14 + 0x4d, 0x89, 0x2e, //0x00002704 movq %r13, (%r14) + 0x48, 0x85, 0xc0, //0x00002707 testq %rax, %rax + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000270a movq $-80(%rbp), %r13 + 0x0f, 0x89, 0xbc, 0xda, 0xff, 0xff, //0x0000270e jns LBB0_4 + 0xe9, 0x96, 0x13, 0x00, 0x00, //0x00002714 jmp LBB0_650 + //0x00002719 LBB0_159 + 0x4d, 0x85, 0xdb, //0x00002719 testq %r11, %r11 + 0x0f, 0x85, 0x7e, 0x0c, 0x00, 0x00, //0x0000271c jne LBB0_552 + 0x49, 0x01, 0xf2, //0x00002722 addq %rsi, %r10 + 0x49, 0x29, 0xf1, //0x00002725 subq %rsi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002728 movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000272c movabsq $4294977024, %r11 + //0x00002736 LBB0_161 + 0x4d, 0x85, 0xc9, //0x00002736 testq %r9, %r9 + 0x0f, 0x8f, 0xbf, 0x0c, 0x00, 0x00, //0x00002739 jg LBB0_556 + 0xe9, 0x6b, 0x13, 0x00, 0x00, //0x0000273f jmp LBB0_650 + //0x00002744 LBB0_50 + 0x4c, 0x01, 0xe0, //0x00002744 addq %r12, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00002747 movq $-48(%rbp), %r14 + 0x49, 0x83, 0xf9, 0x20, //0x0000274b cmpq $32, %r9 + 0x0f, 0x82, 0x9e, 0x07, 0x00, 0x00, //0x0000274f jb LBB0_503 + //0x00002755 LBB0_51 + 0xf3, 0x0f, 0x6f, 0x18, //0x00002755 movdqu (%rax), %xmm3 + 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00002759 movdqu $16(%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x0000275e movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002762 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002766 pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x0000276a movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x0000276e pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00002772 pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x74, 0xd9, //0x00002776 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x0000277a pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x74, 0xe1, //0x0000277e pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00002782 pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x00002786 shlq $16, %rcx + 0x48, 0x09, 0xca, //0x0000278a orq %rcx, %rdx + 0x48, 0xc1, 0xe7, 0x10, //0x0000278d shlq $16, %rdi + 0x48, 0x09, 0xfe, //0x00002791 orq %rdi, %rsi + 0x0f, 0x85, 0x5d, 0x0a, 0x00, 0x00, //0x00002794 jne LBB0_532 + 0x4d, 0x85, 0xc0, //0x0000279a testq %r8, %r8 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000279d movabsq $4294977024, %r11 + 0x0f, 0x85, 0x74, 0x0a, 0x00, 0x00, //0x000027a7 jne LBB0_534 + 0x45, 0x31, 0xc0, //0x000027ad xorl %r8d, %r8d + 0x48, 0x85, 0xd2, //0x000027b0 testq %rdx, %rdx + 0x0f, 0x84, 0xc4, 0x0a, 0x00, 0x00, //0x000027b3 je LBB0_536 + //0x000027b9 LBB0_54 + 0x48, 0x0f, 0xbc, 0xca, //0x000027b9 bsfq %rdx, %rcx + 0x4c, 0x29, 0xe0, //0x000027bd subq %r12, %rax + 0x48, 0x01, 0xc8, //0x000027c0 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000027c3 addq $1, %rax + 0xe9, 0xa3, 0xea, 0xff, 0xff, //0x000027c7 jmp LBB0_229 + //0x000027cc LBB0_171 + 0x4c, 0x8b, 0x65, 0xb8, //0x000027cc movq $-72(%rbp), %r12 + 0x4c, 0x01, 0xe0, //0x000027d0 addq %r12, %rax + 0x49, 0x83, 0xfe, 0x20, //0x000027d3 cmpq $32, %r14 + 0x0f, 0x82, 0x40, 0x07, 0x00, 0x00, //0x000027d7 jb LBB0_505 + //0x000027dd LBB0_172 + 0xf3, 0x0f, 0x6f, 0x20, //0x000027dd movdqu (%rax), %xmm4 + 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x000027e1 movdqu $16(%rax), %xmm3 + 0x66, 0x0f, 0x6f, 0xec, //0x000027e6 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x000027ea pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x000027ee pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x6f, 0xeb, //0x000027f2 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x000027f6 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x000027fa pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x6f, 0xec, //0x000027fe movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x00002802 pcmpeqb %xmm1, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x00002806 pmovmskb %xmm5, %r9d + 0x66, 0x0f, 0x6f, 0xeb, //0x0000280b movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x0000280f pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002813 pmovmskb %xmm5, %edx + 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x00002817 movdqa %xmm12, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x0000281c pcmpgtb %xmm3, %xmm5 + 0x66, 0x41, 0x0f, 0x64, 0xda, //0x00002820 pcmpgtb %xmm10, %xmm3 + 0x66, 0x0f, 0xdb, 0xdd, //0x00002825 pand %xmm5, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002829 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe7, 0x10, //0x0000282d shlq $16, %rdi + 0x48, 0x09, 0xf9, //0x00002831 orq %rdi, %rcx + 0x48, 0xc1, 0xe2, 0x10, //0x00002834 shlq $16, %rdx + 0x48, 0xc1, 0xe6, 0x10, //0x00002838 shlq $16, %rsi + 0x49, 0x09, 0xd1, //0x0000283c orq %rdx, %r9 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000283f movabsq $4294977024, %r11 + 0x0f, 0x85, 0x24, 0x0b, 0x00, 0x00, //0x00002849 jne LBB0_550 + 0x48, 0x85, 0xdb, //0x0000284f testq %rbx, %rbx + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002852 movq $-80(%rbp), %r13 + 0x0f, 0x85, 0xf2, 0x0b, 0x00, 0x00, //0x00002856 jne LBB0_559 + 0x31, 0xdb, //0x0000285c xorl %ebx, %ebx + //0x0000285e LBB0_175 + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x0000285e movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00002863 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00002867 pcmpgtb %xmm10, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x0000286c pand %xmm3, %xmm4 + 0x66, 0x0f, 0xd7, 0xd4, //0x00002870 pmovmskb %xmm4, %edx + 0x48, 0x09, 0xd6, //0x00002874 orq %rdx, %rsi + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002877 movl $64, %edx + 0xbf, 0x40, 0x00, 0x00, 0x00, //0x0000287c movl $64, %edi + 0x48, 0x85, 0xc9, //0x00002881 testq %rcx, %rcx + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002884 je LBB0_177 + 0x48, 0x0f, 0xbc, 0xf9, //0x0000288a bsfq %rcx, %rdi + //0x0000288e LBB0_177 + 0x48, 0x85, 0xf6, //0x0000288e testq %rsi, %rsi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002891 je LBB0_179 + 0x48, 0x0f, 0xbc, 0xd6, //0x00002897 bsfq %rsi, %rdx + //0x0000289b LBB0_179 + 0x48, 0x85, 0xc9, //0x0000289b testq %rcx, %rcx + 0x0f, 0x84, 0xd7, 0x01, 0x00, 0x00, //0x0000289e je LBB0_457 + 0x48, 0x39, 0xfa, //0x000028a4 cmpq %rdi, %rdx + 0x0f, 0x82, 0x29, 0x14, 0x00, 0x00, //0x000028a7 jb LBB0_663 + 0x4c, 0x29, 0xe0, //0x000028ad subq %r12, %rax + 0x48, 0x01, 0xf8, //0x000028b0 addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000028b3 addq $1, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x000028b7 movq $-48(%rbp), %r14 + 0xe9, 0xaf, 0xe9, 0xff, 0xff, //0x000028bb jmp LBB0_229 + //0x000028c0 LBB0_453 + 0x49, 0x8d, 0x48, 0xff, //0x000028c0 leaq $-1(%r8), %rcx + 0x49, 0x39, 0xce, //0x000028c4 cmpq %rcx, %r14 + 0x49, 0xf7, 0xd0, //0x000028c7 notq %r8 + 0x4d, 0x0f, 0x45, 0xc3, //0x000028ca cmovneq %r11, %r8 + 0x84, 0xd2, //0x000028ce testb %dl, %dl + 0x4d, 0x0f, 0x44, 0xc3, //0x000028d0 cmoveq %r11, %r8 + 0x4c, 0x89, 0xc3, //0x000028d4 movq %r8, %rbx + 0xe9, 0x7d, 0x03, 0x00, 0x00, //0x000028d7 jmp LBB0_486 + //0x000028dc LBB0_73 + 0x4c, 0x01, 0xe0, //0x000028dc addq %r12, %rax + 0x49, 0x83, 0xf9, 0x20, //0x000028df cmpq $32, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x000028e3 movq $-48(%rbp), %r14 + 0x48, 0x8b, 0x75, 0xc0, //0x000028e7 movq $-64(%rbp), %rsi + 0x0f, 0x82, 0xe5, 0x06, 0x00, 0x00, //0x000028eb jb LBB0_511 + //0x000028f1 LBB0_74 + 0xf3, 0x0f, 0x6f, 0x18, //0x000028f1 movdqu (%rax), %xmm3 + 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x000028f5 movdqu $16(%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x000028fa movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x000028fe pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002902 pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x00002906 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x0000290a pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x0000290e pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x74, 0xd9, //0x00002912 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x00002916 pmovmskb %xmm3, %ebx + 0x66, 0x0f, 0x74, 0xe1, //0x0000291a pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x0000291e pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x00002922 shlq $16, %rcx + 0x48, 0x09, 0xca, //0x00002926 orq %rcx, %rdx + 0x48, 0xc1, 0xe7, 0x10, //0x00002929 shlq $16, %rdi + 0x48, 0x09, 0xfb, //0x0000292d orq %rdi, %rbx + 0x0f, 0x85, 0x70, 0x0b, 0x00, 0x00, //0x00002930 jne LBB0_561 + 0x4d, 0x85, 0xc0, //0x00002936 testq %r8, %r8 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002939 movabsq $4294977024, %r11 + 0x0f, 0x85, 0x87, 0x0b, 0x00, 0x00, //0x00002943 jne LBB0_563 + 0x45, 0x31, 0xc0, //0x00002949 xorl %r8d, %r8d + 0x48, 0x85, 0xd2, //0x0000294c testq %rdx, %rdx + 0x0f, 0x84, 0xd8, 0x0b, 0x00, 0x00, //0x0000294f je LBB0_565 + //0x00002955 LBB0_77 + 0x48, 0x0f, 0xbc, 0xca, //0x00002955 bsfq %rdx, %rcx + 0x4c, 0x29, 0xe0, //0x00002959 subq %r12, %rax + 0x48, 0x01, 0xc8, //0x0000295c addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000295f addq $1, %rax + 0xe9, 0x8f, 0xee, 0xff, 0xff, //0x00002963 jmp LBB0_313 + //0x00002968 LBB0_198 + 0x4c, 0x8b, 0x45, 0xb8, //0x00002968 movq $-72(%rbp), %r8 + 0x4c, 0x01, 0xc0, //0x0000296c addq %r8, %rax + 0x49, 0x83, 0xfa, 0x20, //0x0000296f cmpq $32, %r10 + 0x0f, 0x82, 0x8c, 0x06, 0x00, 0x00, //0x00002973 jb LBB0_513 + //0x00002979 LBB0_199 + 0xf3, 0x0f, 0x6f, 0x20, //0x00002979 movdqu (%rax), %xmm4 + 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x0000297d movdqu $16(%rax), %xmm3 + 0x66, 0x0f, 0x6f, 0xec, //0x00002982 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002986 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xf5, //0x0000298a pmovmskb %xmm5, %esi + 0x66, 0x0f, 0x6f, 0xeb, //0x0000298e movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002992 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002996 pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x0000299a movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x0000299e pcmpeqb %xmm1, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x000029a2 pmovmskb %xmm5, %r9d + 0x66, 0x0f, 0x6f, 0xeb, //0x000029a7 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x000029ab pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x000029af pmovmskb %xmm5, %ecx + 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x000029b3 movdqa %xmm12, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x000029b8 pcmpgtb %xmm3, %xmm5 + 0x66, 0x41, 0x0f, 0x64, 0xda, //0x000029bc pcmpgtb %xmm10, %xmm3 + 0x66, 0x0f, 0xdb, 0xdd, //0x000029c1 pand %xmm5, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x000029c5 pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe2, 0x10, //0x000029c9 shlq $16, %rdx + 0x48, 0x09, 0xd6, //0x000029cd orq %rdx, %rsi + 0x48, 0xc1, 0xe1, 0x10, //0x000029d0 shlq $16, %rcx + 0x48, 0xc1, 0xe7, 0x10, //0x000029d4 shlq $16, %rdi + 0x49, 0x09, 0xc9, //0x000029d8 orq %rcx, %r9 + 0x0f, 0x85, 0x42, 0x0c, 0x00, 0x00, //0x000029db jne LBB0_579 + 0x4d, 0x85, 0xe4, //0x000029e1 testq %r12, %r12 + 0x4c, 0x8b, 0x6d, 0xb0, //0x000029e4 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000029e8 movabsq $4294977024, %r11 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x45, 0xd6, 0xff, 0xff, //0x000029f2 movdqu $-10683(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x0f, 0x85, 0x48, 0x0c, 0x00, 0x00, //0x000029fb jne LBB0_581 + 0x45, 0x31, 0xe4, //0x00002a01 xorl %r12d, %r12d + //0x00002a04 LBB0_202 + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002a04 movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00002a09 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00002a0d pcmpgtb %xmm10, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x00002a12 pand %xmm3, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00002a16 pmovmskb %xmm4, %ecx + 0x48, 0x09, 0xcf, //0x00002a1a orq %rcx, %rdi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00002a1d movl $64, %ecx + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002a22 movl $64, %edx + 0x48, 0x85, 0xf6, //0x00002a27 testq %rsi, %rsi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002a2a je LBB0_204 + 0x48, 0x0f, 0xbc, 0xd6, //0x00002a30 bsfq %rsi, %rdx + //0x00002a34 LBB0_204 + 0x48, 0x85, 0xff, //0x00002a34 testq %rdi, %rdi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002a37 je LBB0_206 + 0x48, 0x0f, 0xbc, 0xcf, //0x00002a3d bsfq %rdi, %rcx + //0x00002a41 LBB0_206 + 0x48, 0x85, 0xf6, //0x00002a41 testq %rsi, %rsi + 0x0f, 0x84, 0xfe, 0x00, 0x00, 0x00, //0x00002a44 je LBB0_469 + 0x48, 0x39, 0xd1, //0x00002a4a cmpq %rdx, %rcx + 0x0f, 0x82, 0x92, 0x12, 0x00, 0x00, //0x00002a4d jb LBB0_664 + 0x4c, 0x29, 0xc0, //0x00002a53 subq %r8, %rax + 0x48, 0x01, 0xd0, //0x00002a56 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002a59 addq $1, %rax + 0x48, 0x8b, 0x75, 0xc0, //0x00002a5d movq $-64(%rbp), %rsi + 0xe9, 0x91, 0xed, 0xff, 0xff, //0x00002a61 jmp LBB0_313 + //0x00002a66 LBB0_454 + 0x89, 0xd9, //0x00002a66 movl %ebx, %ecx + 0xe9, 0x3e, 0xfc, 0xff, 0xff, //0x00002a68 jmp LBB0_445 + //0x00002a6d LBB0_455 + 0x89, 0xf1, //0x00002a6d movl %esi, %ecx + 0xe9, 0x37, 0xfc, 0xff, 0xff, //0x00002a6f jmp LBB0_445 + //0x00002a74 LBB0_456 + 0x89, 0xd1, //0x00002a74 movl %edx, %ecx + 0xe9, 0x30, 0xfc, 0xff, 0xff, //0x00002a76 jmp LBB0_445 + //0x00002a7b LBB0_457 + 0x48, 0x85, 0xf6, //0x00002a7b testq %rsi, %rsi + 0x0f, 0x85, 0x52, 0x12, 0x00, 0x00, //0x00002a7e jne LBB0_663 + 0x48, 0x83, 0xc0, 0x20, //0x00002a84 addq $32, %rax + 0x49, 0x83, 0xc6, 0xe0, //0x00002a88 addq $-32, %r14 + 0x48, 0x85, 0xdb, //0x00002a8c testq %rbx, %rbx + 0x0f, 0x85, 0x9f, 0x04, 0x00, 0x00, //0x00002a8f jne LBB0_506 + //0x00002a95 LBB0_459 + 0x48, 0x8b, 0x4d, 0xc8, //0x00002a95 movq $-56(%rbp), %rcx + 0x4d, 0x85, 0xf6, //0x00002a99 testq %r14, %r14 + 0x0f, 0x84, 0xf8, 0x11, 0x00, 0x00, //0x00002a9c je LBB0_508 + //0x00002aa2 LBB0_460 + 0x0f, 0xb6, 0x10, //0x00002aa2 movzbl (%rax), %edx + 0x80, 0xfa, 0x22, //0x00002aa5 cmpb $34, %dl + 0x0f, 0x84, 0x8a, 0x00, 0x00, 0x00, //0x00002aa8 je LBB0_468 + 0x80, 0xfa, 0x5c, //0x00002aae cmpb $92, %dl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002ab1 je LBB0_464 + 0x80, 0xfa, 0x1f, //0x00002ab7 cmpb $31, %dl + 0x0f, 0x86, 0x30, 0x12, 0x00, 0x00, //0x00002aba jbe LBB0_665 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002ac0 movq $-1, %rdx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002ac7 movl $1, %esi + 0x48, 0x01, 0xf0, //0x00002acc addq %rsi, %rax + 0x49, 0x01, 0xd6, //0x00002acf addq %rdx, %r14 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002ad2 jne LBB0_460 + 0xe9, 0xbd, 0x11, 0x00, 0x00, //0x00002ad8 jmp LBB0_508 + //0x00002add LBB0_464 + 0x49, 0x83, 0xfe, 0x01, //0x00002add cmpq $1, %r14 + 0x0f, 0x84, 0xb3, 0x11, 0x00, 0x00, //0x00002ae1 je LBB0_508 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002ae7 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00002aec movdqa %xmm2, %xmm5 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00002af0 movq $-2, %rdx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002af7 movl $2, %esi + 0x48, 0x83, 0xf9, 0xff, //0x00002afc cmpq $-1, %rcx + 0x0f, 0x85, 0x0a, 0x00, 0x00, 0x00, //0x00002b00 jne LBB0_467 + 0x48, 0x89, 0xc1, //0x00002b06 movq %rax, %rcx + 0x4c, 0x29, 0xe1, //0x00002b09 subq %r12, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00002b0c movq %rcx, $-56(%rbp) + //0x00002b10 LBB0_467 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002b10 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002b14 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x00002b1e movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00002b22 movdqa %xmm6, %xmm13 + 0x48, 0x01, 0xf0, //0x00002b27 addq %rsi, %rax + 0x49, 0x01, 0xd6, //0x00002b2a addq %rdx, %r14 + 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x00002b2d jne LBB0_460 + 0xe9, 0x62, 0x11, 0x00, 0x00, //0x00002b33 jmp LBB0_508 + //0x00002b38 LBB0_468 + 0x4c, 0x29, 0xe0, //0x00002b38 subq %r12, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002b3b addq $1, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00002b3f movq $-48(%rbp), %r14 + 0xe9, 0x27, 0xe7, 0xff, 0xff, //0x00002b43 jmp LBB0_229 + //0x00002b48 LBB0_469 + 0x48, 0x85, 0xff, //0x00002b48 testq %rdi, %rdi + 0x0f, 0x85, 0x94, 0x11, 0x00, 0x00, //0x00002b4b jne LBB0_664 + 0x48, 0x83, 0xc0, 0x20, //0x00002b51 addq $32, %rax + 0x49, 0x83, 0xc2, 0xe0, //0x00002b55 addq $-32, %r10 + 0x4d, 0x85, 0xe4, //0x00002b59 testq %r12, %r12 + 0x0f, 0x85, 0xc3, 0x04, 0x00, 0x00, //0x00002b5c jne LBB0_514 + //0x00002b62 LBB0_471 + 0x48, 0x8b, 0x4d, 0xc8, //0x00002b62 movq $-56(%rbp), %rcx + 0x4d, 0x85, 0xd2, //0x00002b66 testq %r10, %r10 + 0x0f, 0x84, 0x60, 0x0f, 0x00, 0x00, //0x00002b69 je LBB0_628 + //0x00002b6f LBB0_472 + 0x0f, 0xb6, 0x10, //0x00002b6f movzbl (%rax), %edx + 0x80, 0xfa, 0x22, //0x00002b72 cmpb $34, %dl + 0x0f, 0x84, 0xb5, 0x00, 0x00, 0x00, //0x00002b75 je LBB0_482 + 0x80, 0xfa, 0x5c, //0x00002b7b cmpb $92, %dl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002b7e je LBB0_477 + 0x80, 0xfa, 0x1f, //0x00002b84 cmpb $31, %dl + 0x0f, 0x86, 0x6f, 0x11, 0x00, 0x00, //0x00002b87 jbe LBB0_666 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002b8d movq $-1, %rdx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002b94 movl $1, %esi + //0x00002b99 LBB0_476 + 0x48, 0x01, 0xf0, //0x00002b99 addq %rsi, %rax + 0x49, 0x01, 0xd2, //0x00002b9c addq %rdx, %r10 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002b9f jne LBB0_472 + 0xe9, 0x25, 0x0f, 0x00, 0x00, //0x00002ba5 jmp LBB0_628 + //0x00002baa LBB0_477 + 0x49, 0x83, 0xfa, 0x01, //0x00002baa cmpq $1, %r10 + 0x0f, 0x84, 0x05, 0x11, 0x00, 0x00, //0x00002bae je LBB0_524 + 0x66, 0x0f, 0x6f, 0xea, //0x00002bb4 movdqa %xmm2, %xmm5 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00002bb8 movq $-2, %rdx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002bbf movl $2, %esi + 0x48, 0x83, 0xf9, 0xff, //0x00002bc4 cmpq $-1, %rcx + 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x00002bc8 je LBB0_480 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002bce movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002bd2 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002bd6 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x00002be0 movdqa %xmm5, %xmm2 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x53, 0xd4, 0xff, 0xff, //0x00002be4 movdqu $-11181(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x4c, 0x8b, 0x45, 0xb8, //0x00002bed movq $-72(%rbp), %r8 + 0xe9, 0xa3, 0xff, 0xff, 0xff, //0x00002bf1 jmp LBB0_476 + //0x00002bf6 LBB0_480 + 0x48, 0x89, 0xc1, //0x00002bf6 movq %rax, %rcx + 0x4c, 0x8b, 0x45, 0xb8, //0x00002bf9 movq $-72(%rbp), %r8 + 0x4c, 0x29, 0xc1, //0x00002bfd subq %r8, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00002c00 movq %rcx, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x00002c04 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002c08 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002c0c movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x00002c16 movdqa %xmm5, %xmm2 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x1d, 0xd4, 0xff, 0xff, //0x00002c1a movdqu $-11235(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0xe9, 0x71, 0xff, 0xff, 0xff, //0x00002c23 jmp LBB0_476 + //0x00002c28 LBB0_481 + 0x0f, 0xbc, 0xce, //0x00002c28 bsfl %esi, %ecx + 0xe9, 0x23, 0x00, 0x00, 0x00, //0x00002c2b jmp LBB0_485 + //0x00002c30 LBB0_482 + 0x4c, 0x29, 0xc0, //0x00002c30 subq %r8, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002c33 addq $1, %rax + 0x48, 0x8b, 0x75, 0xc0, //0x00002c37 movq $-64(%rbp), %rsi + 0xe9, 0xb7, 0xeb, 0xff, 0xff, //0x00002c3b jmp LBB0_313 + //0x00002c40 LBB0_483 + 0x49, 0x01, 0xc4, //0x00002c40 addq %rax, %r12 + 0x49, 0x29, 0xf4, //0x00002c43 subq %rsi, %r12 + 0x48, 0xf7, 0xd3, //0x00002c46 notq %rbx + 0x4c, 0x01, 0xe3, //0x00002c49 addq %r12, %rbx + 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00002c4c jmp LBB0_486 + //0x00002c51 LBB0_484 + 0x89, 0xd1, //0x00002c51 movl %edx, %ecx + //0x00002c53 LBB0_485 + 0x48, 0xf7, 0xd3, //0x00002c53 notq %rbx + 0x48, 0x29, 0xcb, //0x00002c56 subq %rcx, %rbx + //0x00002c59 LBB0_486 + 0x48, 0x85, 0xdb, //0x00002c59 testq %rbx, %rbx + 0x0f, 0x88, 0xd3, 0x0f, 0x00, 0x00, //0x00002c5c js LBB0_648 + //0x00002c62 LBB0_487 + 0x48, 0x01, 0xc3, //0x00002c62 addq %rax, %rbx + 0x4c, 0x8b, 0x75, 0xd0, //0x00002c65 movq $-48(%rbp), %r14 + 0x49, 0x89, 0x1e, //0x00002c69 movq %rbx, (%r14) + //0x00002c6c LBB0_488 + 0x48, 0x85, 0xc0, //0x00002c6c testq %rax, %rax + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002c6f movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002c73 movabsq $4294977024, %r11 + 0x0f, 0x8f, 0x4d, 0xd5, 0xff, 0xff, //0x00002c7d jg LBB0_4 + 0xe9, 0xe0, 0x0d, 0x00, 0x00, //0x00002c83 jmp LBB0_232 + //0x00002c88 LBB0_246 + 0x4c, 0x01, 0xe0, //0x00002c88 addq %r12, %rax + 0x49, 0x83, 0xf9, 0x20, //0x00002c8b cmpq $32, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002c8f movq $-48(%rbp), %r14 + 0x48, 0x8b, 0x5d, 0xc0, //0x00002c93 movq $-64(%rbp), %rbx + 0x0f, 0x82, 0x3e, 0x04, 0x00, 0x00, //0x00002c97 jb LBB0_519 + //0x00002c9d LBB0_247 + 0xf3, 0x0f, 0x6f, 0x18, //0x00002c9d movdqu (%rax), %xmm3 + 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00002ca1 movdqu $16(%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x00002ca6 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002caa pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002cae pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x00002cb2 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002cb6 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00002cba pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x74, 0xd9, //0x00002cbe pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002cc2 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x74, 0xe1, //0x00002cc6 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00002cca pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x00002cce shlq $16, %rcx + 0x48, 0x09, 0xca, //0x00002cd2 orq %rcx, %rdx + 0x48, 0xc1, 0xe7, 0x10, //0x00002cd5 shlq $16, %rdi + 0x48, 0x09, 0xfe, //0x00002cd9 orq %rdi, %rsi + 0x0f, 0x85, 0x23, 0x0b, 0x00, 0x00, //0x00002cdc jne LBB0_595 + 0x4d, 0x85, 0xc0, //0x00002ce2 testq %r8, %r8 + 0x0f, 0x85, 0x47, 0x0b, 0x00, 0x00, //0x00002ce5 jne LBB0_597 + 0x45, 0x31, 0xc0, //0x00002ceb xorl %r8d, %r8d + 0x48, 0x85, 0xd2, //0x00002cee testq %rdx, %rdx + 0x0f, 0x84, 0x9d, 0x0b, 0x00, 0x00, //0x00002cf1 je LBB0_599 + //0x00002cf7 LBB0_250 + 0x48, 0x0f, 0xbc, 0xca, //0x00002cf7 bsfq %rdx, %rcx + 0x4c, 0x29, 0xe0, //0x00002cfb subq %r12, %rax + 0x48, 0x01, 0xc8, //0x00002cfe addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002d01 addq $1, %rax + 0xe9, 0x59, 0xf9, 0xff, 0xff, //0x00002d05 jmp LBB0_441 + //0x00002d0a LBB0_409 + 0x4c, 0x01, 0xe0, //0x00002d0a addq %r12, %rax + 0x49, 0x89, 0xf2, //0x00002d0d movq %rsi, %r10 + 0x48, 0x83, 0xfe, 0x20, //0x00002d10 cmpq $32, %rsi + 0x0f, 0x82, 0xed, 0x03, 0x00, 0x00, //0x00002d14 jb LBB0_521 + //0x00002d1a LBB0_410 + 0xf3, 0x0f, 0x6f, 0x20, //0x00002d1a movdqu (%rax), %xmm4 + 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00002d1e movdqu $16(%rax), %xmm3 + 0x66, 0x0f, 0x6f, 0xec, //0x00002d23 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002d27 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xf5, //0x00002d2b pmovmskb %xmm5, %esi + 0x66, 0x0f, 0x6f, 0xeb, //0x00002d2f movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002d33 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00002d37 pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x6f, 0xec, //0x00002d3b movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x00002d3f pcmpeqb %xmm1, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x00002d43 pmovmskb %xmm5, %r9d + 0x66, 0x0f, 0x6f, 0xeb, //0x00002d48 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x00002d4c pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002d50 pmovmskb %xmm5, %edx + 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x00002d54 movdqa %xmm12, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x00002d59 pcmpgtb %xmm3, %xmm5 + 0x66, 0x41, 0x0f, 0x64, 0xda, //0x00002d5d pcmpgtb %xmm10, %xmm3 + 0x66, 0x0f, 0xdb, 0xdd, //0x00002d62 pand %xmm5, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00002d66 pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x00002d6a shlq $16, %rcx + 0x48, 0x09, 0xce, //0x00002d6e orq %rcx, %rsi + 0x48, 0xc1, 0xe2, 0x10, //0x00002d71 shlq $16, %rdx + 0x48, 0xc1, 0xe7, 0x10, //0x00002d75 shlq $16, %rdi + 0x49, 0x09, 0xd1, //0x00002d79 orq %rdx, %r9 + 0x0f, 0x85, 0xf6, 0x0b, 0x00, 0x00, //0x00002d7c jne LBB0_613 + 0x48, 0x85, 0xdb, //0x00002d82 testq %rbx, %rbx + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002d85 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002d89 movabsq $4294977024, %r11 + 0x0f, 0x85, 0x0c, 0x0c, 0x00, 0x00, //0x00002d93 jne LBB0_615 + 0x31, 0xdb, //0x00002d99 xorl %ebx, %ebx + //0x00002d9b LBB0_413 + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002d9b movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00002da0 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00002da4 pcmpgtb %xmm10, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x00002da9 pand %xmm3, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00002dad pmovmskb %xmm4, %ecx + 0x48, 0x09, 0xcf, //0x00002db1 orq %rcx, %rdi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00002db4 movl $64, %ecx + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002db9 movl $64, %edx + 0x48, 0x85, 0xf6, //0x00002dbe testq %rsi, %rsi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002dc1 je LBB0_415 + 0x48, 0x0f, 0xbc, 0xd6, //0x00002dc7 bsfq %rsi, %rdx + //0x00002dcb LBB0_415 + 0x48, 0x85, 0xff, //0x00002dcb testq %rdi, %rdi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002dce je LBB0_417 + 0x48, 0x0f, 0xbc, 0xcf, //0x00002dd4 bsfq %rdi, %rcx + //0x00002dd8 LBB0_417 + 0x48, 0x85, 0xf6, //0x00002dd8 testq %rsi, %rsi + 0x0f, 0x84, 0x5c, 0x00, 0x00, 0x00, //0x00002ddb je LBB0_491 + 0x4c, 0x29, 0xe0, //0x00002de1 subq %r12, %rax + 0x48, 0x39, 0xd1, //0x00002de4 cmpq %rdx, %rcx + 0x0f, 0x82, 0x24, 0x0f, 0x00, 0x00, //0x00002de7 jb LBB0_668 + 0x48, 0x01, 0xd0, //0x00002ded addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002df0 addq $1, %rax + 0x48, 0x8b, 0x5d, 0xc0, //0x00002df4 movq $-64(%rbp), %rbx + 0xe9, 0x66, 0xf8, 0xff, 0xff, //0x00002df8 jmp LBB0_441 + //0x00002dfd LBB0_489 + 0x4b, 0x8d, 0x04, 0x04, //0x00002dfd leaq (%r12,%r8), %rax + 0x48, 0x85, 0xc9, //0x00002e01 testq %rcx, %rcx + 0x4c, 0x8b, 0x75, 0xd0, //0x00002e04 movq $-48(%rbp), %r14 + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00002e08 movabsq $17596481021440, %rdi + 0x0f, 0x85, 0xa9, 0xdd, 0xff, 0xff, //0x00002e12 jne LBB0_139 + 0xe9, 0xe4, 0xdd, 0xff, 0xff, //0x00002e18 jmp LBB0_146 + //0x00002e1d LBB0_490 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002e1d movq $-1, %r8 + 0x48, 0x89, 0xfe, //0x00002e24 movq %rdi, %rsi + 0x4d, 0x89, 0xf3, //0x00002e27 movq %r14, %r11 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002e2a movq $-1, %r15 + 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002e31 movq $-1, %r10 + 0xe9, 0x96, 0xd9, 0xff, 0xff, //0x00002e38 jmp LBB0_105 + //0x00002e3d LBB0_491 + 0x48, 0x85, 0xff, //0x00002e3d testq %rdi, %rdi + 0x0f, 0x85, 0xe0, 0x0e, 0x00, 0x00, //0x00002e40 jne LBB0_669 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002e46 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00002e4b movdqa %xmm2, %xmm5 + 0x48, 0x83, 0xc0, 0x20, //0x00002e4f addq $32, %rax + 0x49, 0x83, 0xc2, 0xe0, //0x00002e53 addq $-32, %r10 + 0x48, 0x85, 0xdb, //0x00002e57 testq %rbx, %rbx + 0x0f, 0x85, 0xb9, 0x02, 0x00, 0x00, //0x00002e5a jne LBB0_522 + //0x00002e60 LBB0_493 + 0x48, 0x8b, 0x55, 0xc8, //0x00002e60 movq $-56(%rbp), %rdx + 0x4d, 0x85, 0xd2, //0x00002e64 testq %r10, %r10 + 0x0f, 0x84, 0x4c, 0x0e, 0x00, 0x00, //0x00002e67 je LBB0_524 + //0x00002e6d LBB0_494 + 0x0f, 0xb6, 0x08, //0x00002e6d movzbl (%rax), %ecx + 0x80, 0xf9, 0x22, //0x00002e70 cmpb $34, %cl + 0x0f, 0x84, 0x11, 0x01, 0x00, 0x00, //0x00002e73 je LBB0_509 + 0x80, 0xf9, 0x5c, //0x00002e79 cmpb $92, %cl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002e7c je LBB0_499 + 0x80, 0xf9, 0x1f, //0x00002e82 cmpb $31, %cl + 0x0f, 0x86, 0xa6, 0x0e, 0x00, 0x00, //0x00002e85 jbe LBB0_670 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002e8b movq $-1, %rcx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002e92 movl $1, %esi + //0x00002e97 LBB0_498 + 0x48, 0x01, 0xf0, //0x00002e97 addq %rsi, %rax + 0x49, 0x01, 0xca, //0x00002e9a addq %rcx, %r10 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002e9d jne LBB0_494 + 0xe9, 0x11, 0x0e, 0x00, 0x00, //0x00002ea3 jmp LBB0_524 + //0x00002ea8 LBB0_499 + 0x49, 0x83, 0xfa, 0x01, //0x00002ea8 cmpq $1, %r10 + 0x0f, 0x84, 0x07, 0x0e, 0x00, 0x00, //0x00002eac je LBB0_524 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002eb2 movq $-2, %rcx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002eb9 movl $2, %esi + 0x48, 0x83, 0xfa, 0xff, //0x00002ebe cmpq $-1, %rdx + 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00002ec2 jne LBB0_498 + 0x48, 0x89, 0xc2, //0x00002ec8 movq %rax, %rdx + 0x4c, 0x29, 0xe2, //0x00002ecb subq %r12, %rdx + 0x48, 0x89, 0x55, 0xc8, //0x00002ece movq %rdx, $-56(%rbp) + 0xe9, 0xc0, 0xff, 0xff, 0xff, //0x00002ed2 jmp LBB0_498 + //0x00002ed7 LBB0_502 + 0x48, 0x8b, 0x45, 0xc0, //0x00002ed7 movq $-64(%rbp), %rax + 0x4c, 0x01, 0xe0, //0x00002edb addq %r12, %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002ede movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x00002ee6 xorl %r8d, %r8d + 0x49, 0x83, 0xf9, 0x20, //0x00002ee9 cmpq $32, %r9 + 0x0f, 0x83, 0x62, 0xf8, 0xff, 0xff, //0x00002eed jae LBB0_51 + //0x00002ef3 LBB0_503 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002ef3 movabsq $4294977024, %r11 + 0xe9, 0x83, 0x03, 0x00, 0x00, //0x00002efd jmp LBB0_537 + //0x00002f02 LBB0_504 + 0x48, 0x8b, 0x45, 0xc0, //0x00002f02 movq $-64(%rbp), %rax + 0x4c, 0x01, 0xe0, //0x00002f06 addq %r12, %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002f09 movq $-1, $-56(%rbp) + 0x31, 0xdb, //0x00002f11 xorl %ebx, %ebx + 0x49, 0x83, 0xfe, 0x20, //0x00002f13 cmpq $32, %r14 + 0x0f, 0x83, 0xc0, 0xf8, 0xff, 0xff, //0x00002f17 jae LBB0_172 + //0x00002f1d LBB0_505 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002f1d movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f21 movabsq $4294977024, %r11 + 0x48, 0x85, 0xdb, //0x00002f2b testq %rbx, %rbx + 0x0f, 0x84, 0x61, 0xfb, 0xff, 0xff, //0x00002f2e je LBB0_459 + //0x00002f34 LBB0_506 + 0x4d, 0x85, 0xf6, //0x00002f34 testq %r14, %r14 + 0x0f, 0x84, 0x5d, 0x0d, 0x00, 0x00, //0x00002f37 je LBB0_508 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002f3d movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00002f42 movdqa %xmm2, %xmm5 + 0x4c, 0x89, 0xe1, //0x00002f46 movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x00002f49 notq %rcx + 0x48, 0x01, 0xc1, //0x00002f4c addq %rax, %rcx + 0x48, 0x8b, 0x75, 0xc8, //0x00002f4f movq $-56(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x00002f53 cmpq $-1, %rsi + 0x48, 0x89, 0xf2, //0x00002f57 movq %rsi, %rdx + 0x48, 0x0f, 0x44, 0xd1, //0x00002f5a cmoveq %rcx, %rdx + 0x48, 0x0f, 0x45, 0xce, //0x00002f5e cmovneq %rsi, %rcx + 0x48, 0x83, 0xc0, 0x01, //0x00002f62 addq $1, %rax + 0x49, 0x83, 0xc6, 0xff, //0x00002f66 addq $-1, %r14 + 0x48, 0x89, 0x55, 0xc8, //0x00002f6a movq %rdx, $-56(%rbp) + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002f6e movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f72 movabsq $4294977024, %r11 + 0x4d, 0x85, 0xf6, //0x00002f7c testq %r14, %r14 + 0x0f, 0x85, 0x1d, 0xfb, 0xff, 0xff, //0x00002f7f jne LBB0_460 + 0xe9, 0x10, 0x0d, 0x00, 0x00, //0x00002f85 jmp LBB0_508 + //0x00002f8a LBB0_509 + 0x4c, 0x29, 0xe0, //0x00002f8a subq %r12, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002f8d addq $1, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00002f91 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002f95 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f99 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x00002fa3 movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00002fa7 movdqa %xmm6, %xmm13 + 0x48, 0x8b, 0x5d, 0xc0, //0x00002fac movq $-64(%rbp), %rbx + 0xe9, 0xae, 0xf6, 0xff, 0xff, //0x00002fb0 jmp LBB0_441 + //0x00002fb5 LBB0_510 + 0x49, 0x8d, 0x04, 0x14, //0x00002fb5 leaq (%r12,%rdx), %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002fb9 movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x00002fc1 xorl %r8d, %r8d + 0x49, 0x83, 0xf9, 0x20, //0x00002fc4 cmpq $32, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002fc8 movq $-48(%rbp), %r14 + 0x48, 0x8b, 0x75, 0xc0, //0x00002fcc movq $-64(%rbp), %rsi + 0x0f, 0x83, 0x1b, 0xf9, 0xff, 0xff, //0x00002fd0 jae LBB0_74 + //0x00002fd6 LBB0_511 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002fd6 movabsq $4294977024, %r11 + 0xe9, 0x50, 0x05, 0x00, 0x00, //0x00002fe0 jmp LBB0_566 + //0x00002fe5 LBB0_512 + 0x48, 0x8b, 0x45, 0xc0, //0x00002fe5 movq $-64(%rbp), %rax + 0x4c, 0x8b, 0x45, 0xb8, //0x00002fe9 movq $-72(%rbp), %r8 + 0x4c, 0x01, 0xc0, //0x00002fed addq %r8, %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002ff0 movq $-1, $-56(%rbp) + 0x45, 0x31, 0xe4, //0x00002ff8 xorl %r12d, %r12d + 0x49, 0x83, 0xfa, 0x20, //0x00002ffb cmpq $32, %r10 + 0x0f, 0x83, 0x74, 0xf9, 0xff, 0xff, //0x00002fff jae LBB0_199 + //0x00003005 LBB0_513 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003005 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003009 movabsq $4294977024, %r11 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x24, 0xd0, 0xff, 0xff, //0x00003013 movdqu $-12252(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x4d, 0x85, 0xe4, //0x0000301c testq %r12, %r12 + 0x0f, 0x84, 0x3d, 0xfb, 0xff, 0xff, //0x0000301f je LBB0_471 + //0x00003025 LBB0_514 + 0x4d, 0x85, 0xd2, //0x00003025 testq %r10, %r10 + 0x0f, 0x84, 0x8b, 0x0c, 0x00, 0x00, //0x00003028 je LBB0_524 + 0x66, 0x0f, 0x6f, 0xea, //0x0000302e movdqa %xmm2, %xmm5 + 0x4c, 0x8b, 0x45, 0xb8, //0x00003032 movq $-72(%rbp), %r8 + 0x4c, 0x89, 0xc1, //0x00003036 movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00003039 notq %rcx + 0x48, 0x01, 0xc1, //0x0000303c addq %rax, %rcx + 0x48, 0x8b, 0x75, 0xc8, //0x0000303f movq $-56(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x00003043 cmpq $-1, %rsi + 0x48, 0x89, 0xf2, //0x00003047 movq %rsi, %rdx + 0x48, 0x0f, 0x44, 0xd1, //0x0000304a cmoveq %rcx, %rdx + 0x48, 0x0f, 0x45, 0xce, //0x0000304e cmovneq %rsi, %rcx + 0x48, 0x83, 0xc0, 0x01, //0x00003052 addq $1, %rax + 0x49, 0x83, 0xc2, 0xff, //0x00003056 addq $-1, %r10 + 0x48, 0x89, 0x55, 0xc8, //0x0000305a movq %rdx, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x0000305e movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003062 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003066 movabsq $4294977024, %r11 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xc7, 0xcf, 0xff, 0xff, //0x00003070 movdqu $-12345(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x4d, 0x85, 0xd2, //0x00003079 testq %r10, %r10 + 0x0f, 0x85, 0xed, 0xfa, 0xff, 0xff, //0x0000307c jne LBB0_472 + 0xe9, 0x48, 0x0a, 0x00, 0x00, //0x00003082 jmp LBB0_628 + //0x00003087 LBB0_516 + 0x49, 0x8d, 0x0c, 0x04, //0x00003087 leaq (%r12,%rax), %rcx + 0x48, 0x85, 0xd2, //0x0000308b testq %rdx, %rdx + 0x0f, 0x85, 0x3f, 0xe9, 0xff, 0xff, //0x0000308e jne LBB0_332 + 0xe9, 0x84, 0xe9, 0xff, 0xff, //0x00003094 jmp LBB0_339 + //0x00003099 LBB0_517 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003099 movq $-1, %r14 + 0x48, 0x8b, 0x75, 0xb8, //0x000030a0 movq $-72(%rbp), %rsi + 0x4d, 0x89, 0xca, //0x000030a4 movq %r9, %r10 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000030a7 movq $-1, %r8 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000030ae movq $-1, %r13 + 0xe9, 0x93, 0xe5, 0xff, 0xff, //0x000030b5 jmp LBB0_280 + //0x000030ba LBB0_518 + 0x49, 0x8d, 0x04, 0x14, //0x000030ba leaq (%r12,%rdx), %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000030be movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x000030c6 xorl %r8d, %r8d + 0x49, 0x83, 0xf9, 0x20, //0x000030c9 cmpq $32, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x000030cd movq $-48(%rbp), %r14 + 0x48, 0x8b, 0x5d, 0xc0, //0x000030d1 movq $-64(%rbp), %rbx + 0x0f, 0x83, 0xc2, 0xfb, 0xff, 0xff, //0x000030d5 jae LBB0_247 + //0x000030db LBB0_519 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000030db movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000030e0 movdqa %xmm2, %xmm5 + 0xe9, 0xbc, 0x07, 0x00, 0x00, //0x000030e4 jmp LBB0_600 + //0x000030e9 LBB0_520 + 0x48, 0x8b, 0x45, 0xc0, //0x000030e9 movq $-64(%rbp), %rax + 0x4c, 0x01, 0xe0, //0x000030ed addq %r12, %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000030f0 movq $-1, $-56(%rbp) + 0x31, 0xdb, //0x000030f8 xorl %ebx, %ebx + 0x49, 0x89, 0xf2, //0x000030fa movq %rsi, %r10 + 0x48, 0x83, 0xfe, 0x20, //0x000030fd cmpq $32, %rsi + 0x0f, 0x83, 0x13, 0xfc, 0xff, 0xff, //0x00003101 jae LBB0_410 + //0x00003107 LBB0_521 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003107 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x0000310c movdqa %xmm2, %xmm5 + 0x48, 0x85, 0xdb, //0x00003110 testq %rbx, %rbx + 0x0f, 0x84, 0x47, 0xfd, 0xff, 0xff, //0x00003113 je LBB0_493 + //0x00003119 LBB0_522 + 0x4d, 0x85, 0xd2, //0x00003119 testq %r10, %r10 + 0x0f, 0x84, 0x97, 0x0b, 0x00, 0x00, //0x0000311c je LBB0_524 + 0x4c, 0x89, 0xe2, //0x00003122 movq %r12, %rdx + 0x48, 0xf7, 0xd2, //0x00003125 notq %rdx + 0x48, 0x01, 0xc2, //0x00003128 addq %rax, %rdx + 0x48, 0x8b, 0x75, 0xc8, //0x0000312b movq $-56(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x0000312f cmpq $-1, %rsi + 0x48, 0x89, 0xf1, //0x00003133 movq %rsi, %rcx + 0x48, 0x0f, 0x44, 0xca, //0x00003136 cmoveq %rdx, %rcx + 0x48, 0x0f, 0x45, 0xd6, //0x0000313a cmovneq %rsi, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x0000313e addq $1, %rax + 0x49, 0x83, 0xc2, 0xff, //0x00003142 addq $-1, %r10 + 0x48, 0x89, 0x4d, 0xc8, //0x00003146 movq %rcx, $-56(%rbp) + 0x4d, 0x85, 0xd2, //0x0000314a testq %r10, %r10 + 0x0f, 0x85, 0x1a, 0xfd, 0xff, 0xff, //0x0000314d jne LBB0_494 + 0xe9, 0x61, 0x0b, 0x00, 0x00, //0x00003153 jmp LBB0_524 + //0x00003158 LBB0_525 + 0x49, 0x39, 0xf1, //0x00003158 cmpq %rsi, %r9 + 0x0f, 0x84, 0x4e, 0x09, 0x00, 0x00, //0x0000315b je LBB0_650 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003161 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003166 movdqa %xmm2, %xmm5 + 0x49, 0x01, 0xf2, //0x0000316a addq %rsi, %r10 + 0x49, 0x83, 0xc2, 0x01, //0x0000316d addq $1, %r10 + 0x48, 0xf7, 0xd6, //0x00003171 notq %rsi + 0x49, 0x01, 0xf1, //0x00003174 addq %rsi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x00003177 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000317b movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000317f movabsq $4294977024, %r11 + 0x4d, 0x85, 0xc9, //0x00003189 testq %r9, %r9 + 0x0f, 0x8f, 0x2d, 0x00, 0x00, 0x00, //0x0000318c jg LBB0_529 + 0xe9, 0x18, 0x09, 0x00, 0x00, //0x00003192 jmp LBB0_650 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003197 .p2align 4, 0x90 + //0x000031a0 LBB0_527 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000031a0 movq $-2, %rcx + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x000031a7 movl $2, %eax + 0x49, 0x01, 0xc2, //0x000031ac addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000031af movq $-1, %rax + 0x49, 0x01, 0xc9, //0x000031b6 addq %rcx, %r9 + 0x0f, 0x8e, 0xf0, 0x08, 0x00, 0x00, //0x000031b9 jle LBB0_650 + //0x000031bf LBB0_529 + 0x41, 0x0f, 0xb6, 0x02, //0x000031bf movzbl (%r10), %eax + 0x3c, 0x5c, //0x000031c3 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x000031c5 je LBB0_527 + 0x3c, 0x22, //0x000031cb cmpb $34, %al + 0x0f, 0x84, 0x26, 0x06, 0x00, 0x00, //0x000031cd je LBB0_594 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000031d3 movq $-1, %rcx + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000031da movl $1, %eax + 0x49, 0x01, 0xc2, //0x000031df addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000031e2 movq $-1, %rax + 0x49, 0x01, 0xc9, //0x000031e9 addq %rcx, %r9 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x000031ec jg LBB0_529 + 0xe9, 0xb8, 0x08, 0x00, 0x00, //0x000031f2 jmp LBB0_650 + //0x000031f7 LBB0_532 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000031f7 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000031fc movdqa %xmm2, %xmm5 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003200 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x00003205 jne LBB0_535 + 0x48, 0x89, 0xc1, //0x0000320b movq %rax, %rcx + 0x4c, 0x29, 0xe1, //0x0000320e subq %r12, %rcx + 0x48, 0x0f, 0xbc, 0xfe, //0x00003211 bsfq %rsi, %rdi + 0x48, 0x01, 0xcf, //0x00003215 addq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xc8, //0x00003218 movq %rdi, $-56(%rbp) + 0xe9, 0x09, 0x00, 0x00, 0x00, //0x0000321c jmp LBB0_535 + //0x00003221 LBB0_534 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003221 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003226 movdqa %xmm2, %xmm5 + //0x0000322a LBB0_535 + 0x44, 0x89, 0xc1, //0x0000322a movl %r8d, %ecx + 0xf7, 0xd1, //0x0000322d notl %ecx + 0x21, 0xf1, //0x0000322f andl %esi, %ecx + 0x41, 0x8d, 0x3c, 0x48, //0x00003231 leal (%r8,%rcx,2), %edi + 0x8d, 0x1c, 0x09, //0x00003235 leal (%rcx,%rcx), %ebx + 0xf7, 0xd3, //0x00003238 notl %ebx + 0x21, 0xf3, //0x0000323a andl %esi, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000323c andl $-1431655766, %ebx + 0x45, 0x31, 0xc0, //0x00003242 xorl %r8d, %r8d + 0x01, 0xcb, //0x00003245 addl %ecx, %ebx + 0x41, 0x0f, 0x92, 0xc0, //0x00003247 setb %r8b + 0x01, 0xdb, //0x0000324b addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x0000324d xorl $1431655765, %ebx + 0x21, 0xfb, //0x00003253 andl %edi, %ebx + 0xf7, 0xd3, //0x00003255 notl %ebx + 0x21, 0xda, //0x00003257 andl %ebx, %edx + 0x4c, 0x8b, 0x75, 0xd0, //0x00003259 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000325d movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003261 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x0000326b movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x0000326f movdqa %xmm6, %xmm13 + 0x48, 0x85, 0xd2, //0x00003274 testq %rdx, %rdx + 0x0f, 0x85, 0x3c, 0xf5, 0xff, 0xff, //0x00003277 jne LBB0_54 + //0x0000327d LBB0_536 + 0x48, 0x83, 0xc0, 0x20, //0x0000327d addq $32, %rax + 0x49, 0x83, 0xc1, 0xe0, //0x00003281 addq $-32, %r9 + //0x00003285 LBB0_537 + 0x4d, 0x85, 0xc0, //0x00003285 testq %r8, %r8 + 0x0f, 0x85, 0x19, 0x04, 0x00, 0x00, //0x00003288 jne LBB0_583 + 0x4c, 0x89, 0xe1, //0x0000328e movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x00003291 notq %rcx + 0x48, 0x8b, 0x55, 0xc8, //0x00003294 movq $-56(%rbp), %rdx + 0x4d, 0x85, 0xc9, //0x00003298 testq %r9, %r9 + 0x0f, 0x84, 0x9e, 0x00, 0x00, 0x00, //0x0000329b je LBB0_549 + //0x000032a1 LBB0_539 + 0x48, 0x83, 0xc1, 0x01, //0x000032a1 addq $1, %rcx + //0x000032a5 LBB0_540 + 0x31, 0xf6, //0x000032a5 xorl %esi, %esi + //0x000032a7 LBB0_541 + 0x0f, 0xb6, 0x1c, 0x30, //0x000032a7 movzbl (%rax,%rsi), %ebx + 0x80, 0xfb, 0x22, //0x000032ab cmpb $34, %bl + 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x000032ae je LBB0_548 + 0x80, 0xfb, 0x5c, //0x000032b4 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000032b7 je LBB0_546 + 0x48, 0x83, 0xc6, 0x01, //0x000032bd addq $1, %rsi + 0x49, 0x39, 0xf1, //0x000032c1 cmpq %rsi, %r9 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000032c4 jne LBB0_541 + 0xe9, 0x78, 0x00, 0x00, 0x00, //0x000032ca jmp LBB0_544 + //0x000032cf LBB0_546 + 0x49, 0x8d, 0x79, 0xff, //0x000032cf leaq $-1(%r9), %rdi + 0x48, 0x39, 0xf7, //0x000032d3 cmpq %rsi, %rdi + 0x0f, 0x84, 0xbe, 0x09, 0x00, 0x00, //0x000032d6 je LBB0_508 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000032dc movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000032e1 movdqa %xmm2, %xmm5 + 0x48, 0x8d, 0x3c, 0x01, //0x000032e5 leaq (%rcx,%rax), %rdi + 0x48, 0x01, 0xf7, //0x000032e9 addq %rsi, %rdi + 0x48, 0x83, 0xfa, 0xff, //0x000032ec cmpq $-1, %rdx + 0x48, 0x8b, 0x5d, 0xc8, //0x000032f0 movq $-56(%rbp), %rbx + 0x48, 0x0f, 0x44, 0xdf, //0x000032f4 cmoveq %rdi, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x000032f8 movq %rbx, $-56(%rbp) + 0x48, 0x0f, 0x44, 0xd7, //0x000032fc cmoveq %rdi, %rdx + 0x48, 0x01, 0xf0, //0x00003300 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00003303 addq $2, %rax + 0x4c, 0x89, 0xcf, //0x00003307 movq %r9, %rdi + 0x48, 0x29, 0xf7, //0x0000330a subq %rsi, %rdi + 0x48, 0x83, 0xc7, 0xfe, //0x0000330d addq $-2, %rdi + 0x49, 0x83, 0xc1, 0xfe, //0x00003311 addq $-2, %r9 + 0x49, 0x39, 0xf1, //0x00003315 cmpq %rsi, %r9 + 0x49, 0x89, 0xf9, //0x00003318 movq %rdi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x0000331b movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000331f movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003323 movabsq $4294977024, %r11 + 0x0f, 0x85, 0x72, 0xff, 0xff, 0xff, //0x0000332d jne LBB0_540 + 0xe9, 0x43, 0x07, 0x00, 0x00, //0x00003333 jmp LBB0_624 + //0x00003338 LBB0_548 + 0x48, 0x01, 0xf0, //0x00003338 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000333b addq $1, %rax + //0x0000333f LBB0_549 + 0x4c, 0x29, 0xe0, //0x0000333f subq %r12, %rax + 0xe9, 0x28, 0xdf, 0xff, 0xff, //0x00003342 jmp LBB0_229 + //0x00003347 LBB0_544 + 0x80, 0xfb, 0x22, //0x00003347 cmpb $34, %bl + 0x0f, 0x85, 0x4a, 0x09, 0x00, 0x00, //0x0000334a jne LBB0_508 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003350 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003355 movdqa %xmm2, %xmm5 + 0x4c, 0x01, 0xc8, //0x00003359 addq %r9, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x0000335c movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003360 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003364 movabsq $4294977024, %r11 + 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x0000336e jmp LBB0_549 + //0x00003373 LBB0_550 + 0x48, 0x89, 0xdf, //0x00003373 movq %rbx, %rdi + 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00003376 movdqa %xmm13, %xmm7 + 0x66, 0x0f, 0x6f, 0xf2, //0x0000337b movdqa %xmm2, %xmm6 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000337f cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0xd0, 0x00, 0x00, 0x00, //0x00003384 jne LBB0_560 + 0x49, 0x89, 0xc0, //0x0000338a movq %rax, %r8 + 0x4d, 0x29, 0xe0, //0x0000338d subq %r12, %r8 + 0x49, 0x0f, 0xbc, 0xd9, //0x00003390 bsfq %r9, %rbx + 0x4c, 0x01, 0xc3, //0x00003394 addq %r8, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x00003397 movq %rbx, $-56(%rbp) + 0xe9, 0xba, 0x00, 0x00, 0x00, //0x0000339b jmp LBB0_560 + //0x000033a0 LBB0_552 + 0x49, 0x39, 0xf1, //0x000033a0 cmpq %rsi, %r9 + 0x0f, 0x84, 0x06, 0x07, 0x00, 0x00, //0x000033a3 je LBB0_650 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000033a9 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000033ae movdqa %xmm2, %xmm5 + 0x49, 0x01, 0xf2, //0x000033b2 addq %rsi, %r10 + 0x49, 0x83, 0xc2, 0x01, //0x000033b5 addq $1, %r10 + 0x48, 0xf7, 0xd6, //0x000033b9 notq %rsi + 0x49, 0x01, 0xf1, //0x000033bc addq %rsi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x000033bf movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x000033c3 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000033c7 movabsq $4294977024, %r11 + 0x4d, 0x85, 0xc9, //0x000033d1 testq %r9, %r9 + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x000033d4 jg LBB0_556 + 0xe9, 0xd0, 0x06, 0x00, 0x00, //0x000033da jmp LBB0_650 + //0x000033df LBB0_554 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000033df movq $-2, %rcx + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x000033e6 movl $2, %eax + 0x49, 0x01, 0xc2, //0x000033eb addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000033ee movq $-1, %rax + 0x49, 0x01, 0xc9, //0x000033f5 addq %rcx, %r9 + 0x0f, 0x8e, 0xb1, 0x06, 0x00, 0x00, //0x000033f8 jle LBB0_650 + //0x000033fe LBB0_556 + 0x41, 0x0f, 0xb6, 0x02, //0x000033fe movzbl (%r10), %eax + 0x3c, 0x5c, //0x00003402 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00003404 je LBB0_554 + 0x3c, 0x22, //0x0000340a cmpb $34, %al + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x0000340c je LBB0_621 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003412 movq $-1, %rcx + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00003419 movl $1, %eax + 0x49, 0x01, 0xc2, //0x0000341e addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003421 movq $-1, %rax + 0x49, 0x01, 0xc9, //0x00003428 addq %rcx, %r9 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x0000342b jg LBB0_556 + 0xe9, 0x79, 0x06, 0x00, 0x00, //0x00003431 jmp LBB0_650 + //0x00003436 LBB0_621 + 0x4d, 0x29, 0xe2, //0x00003436 subq %r12, %r10 + 0x49, 0x83, 0xc2, 0x01, //0x00003439 addq $1, %r10 + 0x4d, 0x89, 0x16, //0x0000343d movq %r10, (%r14) + 0x4d, 0x85, 0xc0, //0x00003440 testq %r8, %r8 + 0x0f, 0x8f, 0xc3, 0xe3, 0xff, 0xff, //0x00003443 jg LBB0_315 + 0xe9, 0x0e, 0x06, 0x00, 0x00, //0x00003449 jmp LBB0_622 + //0x0000344e LBB0_559 + 0x48, 0x89, 0xdf, //0x0000344e movq %rbx, %rdi + 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00003451 movdqa %xmm13, %xmm7 + 0x66, 0x0f, 0x6f, 0xf2, //0x00003456 movdqa %xmm2, %xmm6 + //0x0000345a LBB0_560 + 0x48, 0x89, 0xfb, //0x0000345a movq %rdi, %rbx + 0xf7, 0xd7, //0x0000345d notl %edi + 0x44, 0x21, 0xcf, //0x0000345f andl %r9d, %edi + 0x44, 0x8d, 0x04, 0x7b, //0x00003462 leal (%rbx,%rdi,2), %r8d + 0x8d, 0x14, 0x3f, //0x00003466 leal (%rdi,%rdi), %edx + 0xf7, 0xd2, //0x00003469 notl %edx + 0x44, 0x21, 0xca, //0x0000346b andl %r9d, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000346e andl $-1431655766, %edx + 0x31, 0xdb, //0x00003474 xorl %ebx, %ebx + 0x01, 0xfa, //0x00003476 addl %edi, %edx + 0x0f, 0x92, 0xc3, //0x00003478 setb %bl + 0x01, 0xd2, //0x0000347b addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x0000347d xorl $1431655765, %edx + 0x44, 0x21, 0xc2, //0x00003483 andl %r8d, %edx + 0xf7, 0xd2, //0x00003486 notl %edx + 0x21, 0xd1, //0x00003488 andl %edx, %ecx + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000348a movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000348e movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd6, //0x00003498 movdqa %xmm6, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x0000349c movdqa %xmm7, %xmm13 + 0xe9, 0xb8, 0xf3, 0xff, 0xff, //0x000034a1 jmp LBB0_175 + //0x000034a6 LBB0_561 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000034a6 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000034ab movdqa %xmm2, %xmm5 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000034af cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x000034b4 jne LBB0_564 + 0x48, 0x89, 0xc1, //0x000034ba movq %rax, %rcx + 0x4c, 0x29, 0xe1, //0x000034bd subq %r12, %rcx + 0x48, 0x0f, 0xbc, 0xfb, //0x000034c0 bsfq %rbx, %rdi + 0x48, 0x01, 0xcf, //0x000034c4 addq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xc8, //0x000034c7 movq %rdi, $-56(%rbp) + 0xe9, 0x09, 0x00, 0x00, 0x00, //0x000034cb jmp LBB0_564 + //0x000034d0 LBB0_563 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000034d0 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000034d5 movdqa %xmm2, %xmm5 + //0x000034d9 LBB0_564 + 0x44, 0x89, 0xc1, //0x000034d9 movl %r8d, %ecx + 0xf7, 0xd1, //0x000034dc notl %ecx + 0x21, 0xd9, //0x000034de andl %ebx, %ecx + 0x45, 0x8d, 0x14, 0x48, //0x000034e0 leal (%r8,%rcx,2), %r10d + 0x8d, 0x3c, 0x09, //0x000034e4 leal (%rcx,%rcx), %edi + 0xf7, 0xd7, //0x000034e7 notl %edi + 0x21, 0xdf, //0x000034e9 andl %ebx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x000034eb andl $-1431655766, %edi + 0x45, 0x31, 0xc0, //0x000034f1 xorl %r8d, %r8d + 0x01, 0xcf, //0x000034f4 addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc0, //0x000034f6 setb %r8b + 0x01, 0xff, //0x000034fa addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x000034fc xorl $1431655765, %edi + 0x44, 0x21, 0xd7, //0x00003502 andl %r10d, %edi + 0xf7, 0xd7, //0x00003505 notl %edi + 0x21, 0xfa, //0x00003507 andl %edi, %edx + 0x4c, 0x8b, 0x75, 0xd0, //0x00003509 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000350d movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003511 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x0000351b movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x0000351f movdqa %xmm6, %xmm13 + 0x48, 0x85, 0xd2, //0x00003524 testq %rdx, %rdx + 0x0f, 0x85, 0x28, 0xf4, 0xff, 0xff, //0x00003527 jne LBB0_77 + //0x0000352d LBB0_565 + 0x48, 0x83, 0xc0, 0x20, //0x0000352d addq $32, %rax + 0x49, 0x83, 0xc1, 0xe0, //0x00003531 addq $-32, %r9 + //0x00003535 LBB0_566 + 0x4d, 0x85, 0xc0, //0x00003535 testq %r8, %r8 + 0x0f, 0x85, 0xc4, 0x01, 0x00, 0x00, //0x00003538 jne LBB0_585 + 0x4c, 0x89, 0xe1, //0x0000353e movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x00003541 notq %rcx + 0x4c, 0x8b, 0x45, 0xc8, //0x00003544 movq $-56(%rbp), %r8 + 0x4d, 0x85, 0xc9, //0x00003548 testq %r9, %r9 + 0x0f, 0x84, 0x9e, 0x00, 0x00, 0x00, //0x0000354b je LBB0_578 + //0x00003551 LBB0_568 + 0x48, 0x83, 0xc1, 0x01, //0x00003551 addq $1, %rcx + //0x00003555 LBB0_569 + 0x31, 0xd2, //0x00003555 xorl %edx, %edx + //0x00003557 LBB0_570 + 0x0f, 0xb6, 0x1c, 0x10, //0x00003557 movzbl (%rax,%rdx), %ebx + 0x80, 0xfb, 0x22, //0x0000355b cmpb $34, %bl + 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x0000355e je LBB0_577 + 0x80, 0xfb, 0x5c, //0x00003564 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003567 je LBB0_575 + 0x48, 0x83, 0xc2, 0x01, //0x0000356d addq $1, %rdx + 0x49, 0x39, 0xd1, //0x00003571 cmpq %rdx, %r9 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003574 jne LBB0_570 + 0xe9, 0x78, 0x00, 0x00, 0x00, //0x0000357a jmp LBB0_573 + //0x0000357f LBB0_575 + 0x49, 0x8d, 0x79, 0xff, //0x0000357f leaq $-1(%r9), %rdi + 0x48, 0x39, 0xd7, //0x00003583 cmpq %rdx, %rdi + 0x0f, 0x84, 0x2d, 0x07, 0x00, 0x00, //0x00003586 je LBB0_524 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000358c movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003591 movdqa %xmm2, %xmm5 + 0x48, 0x8d, 0x3c, 0x01, //0x00003595 leaq (%rcx,%rax), %rdi + 0x48, 0x01, 0xd7, //0x00003599 addq %rdx, %rdi + 0x49, 0x83, 0xf8, 0xff, //0x0000359c cmpq $-1, %r8 + 0x48, 0x8b, 0x5d, 0xc8, //0x000035a0 movq $-56(%rbp), %rbx + 0x48, 0x0f, 0x44, 0xdf, //0x000035a4 cmoveq %rdi, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x000035a8 movq %rbx, $-56(%rbp) + 0x4c, 0x0f, 0x44, 0xc7, //0x000035ac cmoveq %rdi, %r8 + 0x48, 0x01, 0xd0, //0x000035b0 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x02, //0x000035b3 addq $2, %rax + 0x4c, 0x89, 0xcf, //0x000035b7 movq %r9, %rdi + 0x48, 0x29, 0xd7, //0x000035ba subq %rdx, %rdi + 0x48, 0x83, 0xc7, 0xfe, //0x000035bd addq $-2, %rdi + 0x49, 0x83, 0xc1, 0xfe, //0x000035c1 addq $-2, %r9 + 0x49, 0x39, 0xd1, //0x000035c5 cmpq %rdx, %r9 + 0x49, 0x89, 0xf9, //0x000035c8 movq %rdi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x000035cb movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x000035cf movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000035d3 movabsq $4294977024, %r11 + 0x0f, 0x85, 0x72, 0xff, 0xff, 0xff, //0x000035dd jne LBB0_569 + 0xe9, 0xe7, 0x04, 0x00, 0x00, //0x000035e3 jmp LBB0_628 + //0x000035e8 LBB0_577 + 0x48, 0x01, 0xd0, //0x000035e8 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000035eb addq $1, %rax + //0x000035ef LBB0_578 + 0x4c, 0x29, 0xe0, //0x000035ef subq %r12, %rax + 0xe9, 0x00, 0xe2, 0xff, 0xff, //0x000035f2 jmp LBB0_313 + //0x000035f7 LBB0_573 + 0x80, 0xfb, 0x22, //0x000035f7 cmpb $34, %bl + 0x0f, 0x85, 0xb9, 0x06, 0x00, 0x00, //0x000035fa jne LBB0_524 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003600 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003605 movdqa %xmm2, %xmm5 + 0x4c, 0x01, 0xc8, //0x00003609 addq %r9, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x0000360c movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003610 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003614 movabsq $4294977024, %r11 + 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x0000361e jmp LBB0_578 + //0x00003623 LBB0_579 + 0x66, 0x0f, 0x6f, 0xf2, //0x00003623 movdqa %xmm2, %xmm6 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003627 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x1b, 0x00, 0x00, 0x00, //0x0000362c jne LBB0_582 + 0x49, 0x89, 0xc0, //0x00003632 movq %rax, %r8 + 0x4c, 0x2b, 0x45, 0xb8, //0x00003635 subq $-72(%rbp), %r8 + 0x49, 0x0f, 0xbc, 0xd9, //0x00003639 bsfq %r9, %rbx + 0x4c, 0x01, 0xc3, //0x0000363d addq %r8, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x00003640 movq %rbx, $-56(%rbp) + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00003644 jmp LBB0_582 + //0x00003649 LBB0_581 + 0x66, 0x0f, 0x6f, 0xf2, //0x00003649 movdqa %xmm2, %xmm6 + //0x0000364d LBB0_582 + 0x44, 0x89, 0xe2, //0x0000364d movl %r12d, %edx + 0xf7, 0xd2, //0x00003650 notl %edx + 0x44, 0x21, 0xca, //0x00003652 andl %r9d, %edx + 0x45, 0x8d, 0x04, 0x54, //0x00003655 leal (%r12,%rdx,2), %r8d + 0x8d, 0x0c, 0x12, //0x00003659 leal (%rdx,%rdx), %ecx + 0xf7, 0xd1, //0x0000365c notl %ecx + 0x44, 0x21, 0xc9, //0x0000365e andl %r9d, %ecx + 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003661 andl $-1431655766, %ecx + 0x45, 0x31, 0xe4, //0x00003667 xorl %r12d, %r12d + 0x01, 0xd1, //0x0000366a addl %edx, %ecx + 0x41, 0x0f, 0x92, 0xc4, //0x0000366c setb %r12b + 0x01, 0xc9, //0x00003670 addl %ecx, %ecx + 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00003672 xorl $1431655765, %ecx + 0x44, 0x21, 0xc1, //0x00003678 andl %r8d, %ecx + 0xf7, 0xd1, //0x0000367b notl %ecx + 0x21, 0xce, //0x0000367d andl %ecx, %esi + 0x4c, 0x8b, 0x75, 0xd0, //0x0000367f movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003683 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003687 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd6, //0x00003691 movdqa %xmm6, %xmm2 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xa2, 0xc9, 0xff, 0xff, //0x00003695 movdqu $-13918(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x4c, 0x8b, 0x45, 0xb8, //0x0000369e movq $-72(%rbp), %r8 + 0xe9, 0x5d, 0xf3, 0xff, 0xff, //0x000036a2 jmp LBB0_202 + //0x000036a7 LBB0_583 + 0x4d, 0x85, 0xc9, //0x000036a7 testq %r9, %r9 + 0x0f, 0x84, 0xea, 0x05, 0x00, 0x00, //0x000036aa je LBB0_508 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000036b0 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000036b5 movdqa %xmm2, %xmm5 + 0x4c, 0x89, 0xe1, //0x000036b9 movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x000036bc notq %rcx + 0x48, 0x8d, 0x34, 0x08, //0x000036bf leaq (%rax,%rcx), %rsi + 0x48, 0x8b, 0x7d, 0xc8, //0x000036c3 movq $-56(%rbp), %rdi + 0x48, 0x83, 0xff, 0xff, //0x000036c7 cmpq $-1, %rdi + 0x48, 0x89, 0xfa, //0x000036cb movq %rdi, %rdx + 0x48, 0x0f, 0x44, 0xfe, //0x000036ce cmoveq %rsi, %rdi + 0x48, 0x0f, 0x44, 0xd6, //0x000036d2 cmoveq %rsi, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x000036d6 addq $1, %rax + 0x49, 0x83, 0xc1, 0xff, //0x000036da addq $-1, %r9 + 0x48, 0x89, 0x7d, 0xc8, //0x000036de movq %rdi, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x000036e2 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x000036e6 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000036ea movabsq $4294977024, %r11 + 0x4d, 0x85, 0xc9, //0x000036f4 testq %r9, %r9 + 0x0f, 0x85, 0xa4, 0xfb, 0xff, 0xff, //0x000036f7 jne LBB0_539 + 0xe9, 0x3d, 0xfc, 0xff, 0xff, //0x000036fd jmp LBB0_549 + //0x00003702 LBB0_585 + 0x4d, 0x85, 0xc9, //0x00003702 testq %r9, %r9 + 0x0f, 0x84, 0xae, 0x05, 0x00, 0x00, //0x00003705 je LBB0_524 + 0x48, 0x89, 0xf2, //0x0000370b movq %rsi, %rdx + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000370e movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003713 movdqa %xmm2, %xmm5 + 0x4c, 0x89, 0xe1, //0x00003717 movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x0000371a notq %rcx + 0x48, 0x8d, 0x34, 0x08, //0x0000371d leaq (%rax,%rcx), %rsi + 0x48, 0x8b, 0x7d, 0xc8, //0x00003721 movq $-56(%rbp), %rdi + 0x48, 0x83, 0xff, 0xff, //0x00003725 cmpq $-1, %rdi + 0x49, 0x89, 0xf8, //0x00003729 movq %rdi, %r8 + 0x48, 0x0f, 0x44, 0xfe, //0x0000372c cmoveq %rsi, %rdi + 0x4c, 0x0f, 0x44, 0xc6, //0x00003730 cmoveq %rsi, %r8 + 0x48, 0x83, 0xc0, 0x01, //0x00003734 addq $1, %rax + 0x49, 0x83, 0xc1, 0xff, //0x00003738 addq $-1, %r9 + 0x48, 0x89, 0x7d, 0xc8, //0x0000373c movq %rdi, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x00003740 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003744 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003748 movabsq $4294977024, %r11 + 0x48, 0x89, 0xd6, //0x00003752 movq %rdx, %rsi + 0x4d, 0x85, 0xc9, //0x00003755 testq %r9, %r9 + 0x0f, 0x85, 0xf3, 0xfd, 0xff, 0xff, //0x00003758 jne LBB0_568 + 0xe9, 0x8c, 0xfe, 0xff, 0xff, //0x0000375e jmp LBB0_578 + //0x00003763 LBB0_587 + 0x49, 0x39, 0xf1, //0x00003763 cmpq %rsi, %r9 + 0x0f, 0x84, 0x43, 0x03, 0x00, 0x00, //0x00003766 je LBB0_650 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000376c movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003771 movdqa %xmm2, %xmm5 + 0x49, 0x01, 0xf2, //0x00003775 addq %rsi, %r10 + 0x49, 0x83, 0xc2, 0x01, //0x00003778 addq $1, %r10 + 0x48, 0xf7, 0xd6, //0x0000377c notq %rsi + 0x49, 0x01, 0xf1, //0x0000377f addq %rsi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x00003782 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003786 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000378a movabsq $4294977024, %r11 + 0x4d, 0x85, 0xc9, //0x00003794 testq %r9, %r9 + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00003797 jg LBB0_591 + 0xe9, 0x0d, 0x03, 0x00, 0x00, //0x0000379d jmp LBB0_650 + //0x000037a2 LBB0_589 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000037a2 movq $-2, %rcx + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x000037a9 movl $2, %eax + 0x49, 0x01, 0xc2, //0x000037ae addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000037b1 movq $-1, %rax + 0x49, 0x01, 0xc9, //0x000037b8 addq %rcx, %r9 + 0x0f, 0x8e, 0xee, 0x02, 0x00, 0x00, //0x000037bb jle LBB0_650 + //0x000037c1 LBB0_591 + 0x41, 0x0f, 0xb6, 0x02, //0x000037c1 movzbl (%r10), %eax + 0x3c, 0x5c, //0x000037c5 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x000037c7 je LBB0_589 + 0x3c, 0x22, //0x000037cd cmpb $34, %al + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x000037cf je LBB0_594 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000037d5 movq $-1, %rcx + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000037dc movl $1, %eax + 0x49, 0x01, 0xc2, //0x000037e1 addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000037e4 movq $-1, %rax + 0x49, 0x01, 0xc9, //0x000037eb addq %rcx, %r9 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x000037ee jg LBB0_591 + 0xe9, 0xb6, 0x02, 0x00, 0x00, //0x000037f4 jmp LBB0_650 + //0x000037f9 LBB0_594 + 0x4d, 0x29, 0xe2, //0x000037f9 subq %r12, %r10 + 0x49, 0x83, 0xc2, 0x01, //0x000037fc addq $1, %r10 + 0xe9, 0xbe, 0xc9, 0xff, 0xff, //0x00003800 jmp LBB0_2 + //0x00003805 LBB0_595 + 0x49, 0x89, 0xda, //0x00003805 movq %rbx, %r10 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003808 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x0000380d movdqa %xmm2, %xmm5 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003811 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x22, 0x00, 0x00, 0x00, //0x00003816 jne LBB0_598 + 0x48, 0x89, 0xc1, //0x0000381c movq %rax, %rcx + 0x4c, 0x29, 0xe1, //0x0000381f subq %r12, %rcx + 0x48, 0x0f, 0xbc, 0xfe, //0x00003822 bsfq %rsi, %rdi + 0x48, 0x01, 0xcf, //0x00003826 addq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xc8, //0x00003829 movq %rdi, $-56(%rbp) + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x0000382d jmp LBB0_598 + //0x00003832 LBB0_597 + 0x49, 0x89, 0xda, //0x00003832 movq %rbx, %r10 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003835 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x0000383a movdqa %xmm2, %xmm5 + //0x0000383e LBB0_598 + 0x44, 0x89, 0xc1, //0x0000383e movl %r8d, %ecx + 0xf7, 0xd1, //0x00003841 notl %ecx + 0x21, 0xf1, //0x00003843 andl %esi, %ecx + 0x41, 0x8d, 0x3c, 0x48, //0x00003845 leal (%r8,%rcx,2), %edi + 0x8d, 0x1c, 0x09, //0x00003849 leal (%rcx,%rcx), %ebx + 0xf7, 0xd3, //0x0000384c notl %ebx + 0x21, 0xf3, //0x0000384e andl %esi, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003850 andl $-1431655766, %ebx + 0x45, 0x31, 0xc0, //0x00003856 xorl %r8d, %r8d + 0x01, 0xcb, //0x00003859 addl %ecx, %ebx + 0x41, 0x0f, 0x92, 0xc0, //0x0000385b setb %r8b + 0x01, 0xdb, //0x0000385f addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00003861 xorl $1431655765, %ebx + 0x21, 0xfb, //0x00003867 andl %edi, %ebx + 0xf7, 0xd3, //0x00003869 notl %ebx + 0x21, 0xda, //0x0000386b andl %ebx, %edx + 0x4c, 0x8b, 0x75, 0xd0, //0x0000386d movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003871 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003875 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x0000387f movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00003883 movdqa %xmm6, %xmm13 + 0x4c, 0x89, 0xd3, //0x00003888 movq %r10, %rbx + 0x48, 0x85, 0xd2, //0x0000388b testq %rdx, %rdx + 0x0f, 0x85, 0x63, 0xf4, 0xff, 0xff, //0x0000388e jne LBB0_250 + //0x00003894 LBB0_599 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003894 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003899 movdqa %xmm2, %xmm5 + 0x48, 0x83, 0xc0, 0x20, //0x0000389d addq $32, %rax + 0x49, 0x83, 0xc1, 0xe0, //0x000038a1 addq $-32, %r9 + //0x000038a5 LBB0_600 + 0x4d, 0x85, 0xc0, //0x000038a5 testq %r8, %r8 + 0x0f, 0x85, 0x53, 0x01, 0x00, 0x00, //0x000038a8 jne LBB0_617 + 0x4c, 0x89, 0xe2, //0x000038ae movq %r12, %rdx + 0x48, 0xf7, 0xd2, //0x000038b1 notq %rdx + 0x48, 0x8b, 0x75, 0xc8, //0x000038b4 movq $-56(%rbp), %rsi + 0x4d, 0x85, 0xc9, //0x000038b8 testq %r9, %r9 + 0x0f, 0x84, 0x83, 0x00, 0x00, 0x00, //0x000038bb je LBB0_612 + //0x000038c1 LBB0_602 + 0x48, 0x83, 0xc2, 0x01, //0x000038c1 addq $1, %rdx + //0x000038c5 LBB0_603 + 0x31, 0xff, //0x000038c5 xorl %edi, %edi + //0x000038c7 LBB0_604 + 0x0f, 0xb6, 0x0c, 0x38, //0x000038c7 movzbl (%rax,%rdi), %ecx + 0x80, 0xf9, 0x22, //0x000038cb cmpb $34, %cl + 0x0f, 0x84, 0x69, 0x00, 0x00, 0x00, //0x000038ce je LBB0_611 + 0x80, 0xf9, 0x5c, //0x000038d4 cmpb $92, %cl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000038d7 je LBB0_609 + 0x48, 0x83, 0xc7, 0x01, //0x000038dd addq $1, %rdi + 0x49, 0x39, 0xf9, //0x000038e1 cmpq %rdi, %r9 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000038e4 jne LBB0_604 + 0xe9, 0x78, 0x00, 0x00, 0x00, //0x000038ea jmp LBB0_607 + //0x000038ef LBB0_609 + 0x49, 0x8d, 0x49, 0xff, //0x000038ef leaq $-1(%r9), %rcx + 0x48, 0x39, 0xf9, //0x000038f3 cmpq %rdi, %rcx + 0x0f, 0x84, 0xbd, 0x03, 0x00, 0x00, //0x000038f6 je LBB0_524 + 0x4c, 0x8d, 0x04, 0x02, //0x000038fc leaq (%rdx,%rax), %r8 + 0x49, 0x01, 0xf8, //0x00003900 addq %rdi, %r8 + 0x48, 0x83, 0xfe, 0xff, //0x00003903 cmpq $-1, %rsi + 0x48, 0x8b, 0x4d, 0xc8, //0x00003907 movq $-56(%rbp), %rcx + 0x49, 0x0f, 0x44, 0xc8, //0x0000390b cmoveq %r8, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x0000390f movq %rcx, $-56(%rbp) + 0x49, 0x0f, 0x44, 0xf0, //0x00003913 cmoveq %r8, %rsi + 0x48, 0x01, 0xf8, //0x00003917 addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x0000391a addq $2, %rax + 0x4c, 0x89, 0xc9, //0x0000391e movq %r9, %rcx + 0x48, 0x29, 0xf9, //0x00003921 subq %rdi, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x00003924 addq $-2, %rcx + 0x49, 0x83, 0xc1, 0xfe, //0x00003928 addq $-2, %r9 + 0x49, 0x39, 0xf9, //0x0000392c cmpq %rdi, %r9 + 0x49, 0x89, 0xc9, //0x0000392f movq %rcx, %r9 + 0x0f, 0x85, 0x8d, 0xff, 0xff, 0xff, //0x00003932 jne LBB0_603 + 0xe9, 0x7c, 0x03, 0x00, 0x00, //0x00003938 jmp LBB0_524 + //0x0000393d LBB0_611 + 0x48, 0x01, 0xf8, //0x0000393d addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003940 addq $1, %rax + //0x00003944 LBB0_612 + 0x4c, 0x29, 0xe0, //0x00003944 subq %r12, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00003947 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000394b movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000394f movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x00003959 movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x0000395d movdqa %xmm6, %xmm13 + 0xe9, 0xfc, 0xec, 0xff, 0xff, //0x00003962 jmp LBB0_441 + //0x00003967 LBB0_607 + 0x80, 0xf9, 0x22, //0x00003967 cmpb $34, %cl + 0x0f, 0x85, 0x49, 0x03, 0x00, 0x00, //0x0000396a jne LBB0_524 + 0x4c, 0x01, 0xc8, //0x00003970 addq %r9, %rax + 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x00003973 jmp LBB0_612 + //0x00003978 LBB0_613 + 0x48, 0x89, 0xd9, //0x00003978 movq %rbx, %rcx + 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x0000397b movdqa %xmm13, %xmm7 + 0x66, 0x0f, 0x6f, 0xf2, //0x00003980 movdqa %xmm2, %xmm6 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003984 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x22, 0x00, 0x00, 0x00, //0x00003989 jne LBB0_616 + 0x49, 0x89, 0xc0, //0x0000398f movq %rax, %r8 + 0x4d, 0x29, 0xe0, //0x00003992 subq %r12, %r8 + 0x49, 0x0f, 0xbc, 0xd9, //0x00003995 bsfq %r9, %rbx + 0x4c, 0x01, 0xc3, //0x00003999 addq %r8, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x0000399c movq %rbx, $-56(%rbp) + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x000039a0 jmp LBB0_616 + //0x000039a5 LBB0_615 + 0x48, 0x89, 0xd9, //0x000039a5 movq %rbx, %rcx + 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x000039a8 movdqa %xmm13, %xmm7 + 0x66, 0x0f, 0x6f, 0xf2, //0x000039ad movdqa %xmm2, %xmm6 + //0x000039b1 LBB0_616 + 0x48, 0x89, 0xcb, //0x000039b1 movq %rcx, %rbx + 0xf7, 0xd1, //0x000039b4 notl %ecx + 0x44, 0x21, 0xc9, //0x000039b6 andl %r9d, %ecx + 0x44, 0x8d, 0x04, 0x4b, //0x000039b9 leal (%rbx,%rcx,2), %r8d + 0x8d, 0x14, 0x09, //0x000039bd leal (%rcx,%rcx), %edx + 0xf7, 0xd2, //0x000039c0 notl %edx + 0x44, 0x21, 0xca, //0x000039c2 andl %r9d, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x000039c5 andl $-1431655766, %edx + 0x31, 0xdb, //0x000039cb xorl %ebx, %ebx + 0x01, 0xca, //0x000039cd addl %ecx, %edx + 0x0f, 0x92, 0xc3, //0x000039cf setb %bl + 0x01, 0xd2, //0x000039d2 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x000039d4 xorl $1431655765, %edx + 0x44, 0x21, 0xc2, //0x000039da andl %r8d, %edx + 0xf7, 0xd2, //0x000039dd notl %edx + 0x21, 0xd6, //0x000039df andl %edx, %esi + 0x4c, 0x8b, 0x75, 0xd0, //0x000039e1 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x000039e5 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000039e9 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd6, //0x000039f3 movdqa %xmm6, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x000039f7 movdqa %xmm7, %xmm13 + 0xe9, 0x9a, 0xf3, 0xff, 0xff, //0x000039fc jmp LBB0_413 + //0x00003a01 LBB0_617 + 0x4d, 0x85, 0xc9, //0x00003a01 testq %r9, %r9 + 0x0f, 0x84, 0xaf, 0x02, 0x00, 0x00, //0x00003a04 je LBB0_524 + 0x4c, 0x89, 0xe2, //0x00003a0a movq %r12, %rdx + 0x48, 0xf7, 0xd2, //0x00003a0d notq %rdx + 0x48, 0x8d, 0x0c, 0x10, //0x00003a10 leaq (%rax,%rdx), %rcx + 0x48, 0x8b, 0x7d, 0xc8, //0x00003a14 movq $-56(%rbp), %rdi + 0x48, 0x83, 0xff, 0xff, //0x00003a18 cmpq $-1, %rdi + 0x48, 0x89, 0xfe, //0x00003a1c movq %rdi, %rsi + 0x48, 0x0f, 0x44, 0xf9, //0x00003a1f cmoveq %rcx, %rdi + 0x48, 0x0f, 0x44, 0xf1, //0x00003a23 cmoveq %rcx, %rsi + 0x48, 0x83, 0xc0, 0x01, //0x00003a27 addq $1, %rax + 0x49, 0x83, 0xc1, 0xff, //0x00003a2b addq $-1, %r9 + 0x48, 0x89, 0x7d, 0xc8, //0x00003a2f movq %rdi, $-56(%rbp) + 0x4d, 0x85, 0xc9, //0x00003a33 testq %r9, %r9 + 0x0f, 0x85, 0x85, 0xfe, 0xff, 0xff, //0x00003a36 jne LBB0_602 + 0xe9, 0x03, 0xff, 0xff, 0xff, //0x00003a3c jmp LBB0_612 + //0x00003a41 LBB0_619 + 0x49, 0x89, 0x36, //0x00003a41 movq %rsi, (%r14) + //0x00003a44 LBB0_620 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003a44 movq $-1, %rax + 0xe9, 0x5f, 0x00, 0x00, 0x00, //0x00003a4b jmp LBB0_650 + //0x00003a50 LBB0_651 + 0x48, 0xc7, 0xc0, 0xf9, 0xff, 0xff, 0xff, //0x00003a50 movq $-7, %rax + 0xe9, 0x53, 0x00, 0x00, 0x00, //0x00003a57 jmp LBB0_650 + //0x00003a5c LBB0_622 + 0x49, 0x83, 0xc0, 0xff, //0x00003a5c addq $-1, %r8 + 0x4c, 0x89, 0xc0, //0x00003a60 movq %r8, %rax + 0xe9, 0x47, 0x00, 0x00, 0x00, //0x00003a63 jmp LBB0_650 + //0x00003a68 LBB0_232 + 0x48, 0x83, 0xc0, 0xff, //0x00003a68 addq $-1, %rax + 0xe9, 0x3e, 0x00, 0x00, 0x00, //0x00003a6c jmp LBB0_650 + //0x00003a71 LBB0_623 + 0x48, 0x83, 0xf8, 0xff, //0x00003a71 cmpq $-1, %rax + 0x0f, 0x85, 0x94, 0x00, 0x00, 0x00, //0x00003a75 jne LBB0_634 + //0x00003a7b LBB0_624 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003a7b movq $-1, %rax + 0x48, 0x8b, 0x4d, 0xa0, //0x00003a82 movq $-96(%rbp), %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00003a86 movq %rcx, $-56(%rbp) + 0xe9, 0x80, 0x00, 0x00, 0x00, //0x00003a8a jmp LBB0_634 + //0x00003a8f LBB0_625 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00003a8f movq $-1, %r13 + //0x00003a96 LBB0_626 + 0x48, 0x8b, 0x4d, 0xc0, //0x00003a96 movq $-64(%rbp), %rcx + 0x4c, 0x29, 0xe9, //0x00003a9a subq %r13, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x00003a9d addq $-2, %rcx + 0x48, 0x8b, 0x45, 0xd0, //0x00003aa1 movq $-48(%rbp), %rax + 0x48, 0x89, 0x08, //0x00003aa5 movq %rcx, (%rax) + //0x00003aa8 LBB0_649 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003aa8 movq $-2, %rax + //0x00003aaf LBB0_650 + 0x48, 0x81, 0xc4, 0x88, 0x00, 0x00, 0x00, //0x00003aaf addq $136, %rsp + 0x5b, //0x00003ab6 popq %rbx + 0x41, 0x5c, //0x00003ab7 popq %r12 + 0x41, 0x5d, //0x00003ab9 popq %r13 + 0x41, 0x5e, //0x00003abb popq %r14 + 0x41, 0x5f, //0x00003abd popq %r15 + 0x5d, //0x00003abf popq %rbp + 0xc3, //0x00003ac0 retq + //0x00003ac1 LBB0_627 + 0x48, 0x83, 0xf8, 0xff, //0x00003ac1 cmpq $-1, %rax + 0x48, 0x8b, 0x55, 0xc8, //0x00003ac5 movq $-56(%rbp), %rdx + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003ac9 jne LBB0_629 + //0x00003acf LBB0_628 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003acf movq $-1, %rax + 0x48, 0x8b, 0x55, 0xa0, //0x00003ad6 movq $-96(%rbp), %rdx + //0x00003ada LBB0_629 0x49, 0x89, 0x16, //0x00003ada movq %rdx, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x73, //0x00003add cmpb $115, $2(%r12,%rcx) - 0x0f, 0x85, 0x5e, 0xff, 0xff, 0xff, //0x00003ae3 jne LBB0_638 - 0x48, 0x8d, 0x51, 0x03, //0x00003ae9 leaq $3(%rcx), %rdx - 0x49, 0x89, 0x16, //0x00003aed movq %rdx, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x03, 0x65, //0x00003af0 cmpb $101, $3(%r12,%rcx) - 0x0f, 0x85, 0x4b, 0xff, 0xff, 0xff, //0x00003af6 jne LBB0_638 - 0x48, 0x83, 0xc1, 0x04, //0x00003afc addq $4, %rcx - 0x49, 0x89, 0x0e, //0x00003b00 movq %rcx, (%r14) - 0xe9, 0x3f, 0xff, 0xff, 0xff, //0x00003b03 jmp LBB0_638 - //0x00003b08 LBB0_627 - 0x49, 0x89, 0x06, //0x00003b08 movq %rax, (%r14) - 0x41, 0x80, 0x3c, 0x04, 0x74, //0x00003b0b cmpb $116, (%r12,%rax) - 0x0f, 0x85, 0x2a, 0xff, 0xff, 0xff, //0x00003b10 jne LBB0_637 - 0x49, 0x89, 0x0e, //0x00003b16 movq %rcx, (%r14) - 0x41, 0x80, 0x3c, 0x0c, 0x72, //0x00003b19 cmpb $114, (%r12,%rcx) - 0x0f, 0x85, 0x1c, 0xff, 0xff, 0xff, //0x00003b1e jne LBB0_637 - 0x48, 0x8d, 0x41, 0x01, //0x00003b24 leaq $1(%rcx), %rax - 0x49, 0x89, 0x06, //0x00003b28 movq %rax, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x75, //0x00003b2b cmpb $117, $1(%r12,%rcx) - 0x0f, 0x85, 0x09, 0xff, 0xff, 0xff, //0x00003b31 jne LBB0_637 - 0x48, 0x8d, 0x41, 0x02, //0x00003b37 leaq $2(%rcx), %rax + 0xe9, 0xcd, 0xff, 0xff, 0xff, //0x00003add jmp LBB0_650 + //0x00003ae2 LBB0_630 + 0x48, 0x83, 0xc6, 0xff, //0x00003ae2 addq $-1, %rsi + 0x48, 0x89, 0xf0, //0x00003ae6 movq %rsi, %rax + 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003ae9 jmp LBB0_650 + //0x00003aee LBB0_631 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003aee cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003af3 jne LBB0_633 + 0x48, 0x0f, 0xbc, 0xcf, //0x00003af9 bsfq %rdi, %rcx + 0x48, 0x01, 0xc1, //0x00003afd addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00003b00 movq %rcx, $-56(%rbp) + //0x00003b04 LBB0_633 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003b04 movq $-2, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00003b0b movq $-48(%rbp), %r14 + //0x00003b0f LBB0_634 + 0x48, 0x8b, 0x4d, 0xc8, //0x00003b0f movq $-56(%rbp), %rcx + 0x49, 0x89, 0x0e, //0x00003b13 movq %rcx, (%r14) + 0xe9, 0x94, 0xff, 0xff, 0xff, //0x00003b16 jmp LBB0_650 + //0x00003b1b LBB0_635 + 0x49, 0x89, 0x06, //0x00003b1b movq %rax, (%r14) + 0x41, 0x80, 0x3c, 0x04, 0x74, //0x00003b1e cmpb $116, (%r12,%rax) + 0x0f, 0x85, 0x7f, 0xff, 0xff, 0xff, //0x00003b23 jne LBB0_649 + 0x49, 0x89, 0x0e, //0x00003b29 movq %rcx, (%r14) + 0x41, 0x80, 0x3c, 0x0c, 0x72, //0x00003b2c cmpb $114, (%r12,%rcx) + 0x0f, 0x85, 0x71, 0xff, 0xff, 0xff, //0x00003b31 jne LBB0_649 + 0x48, 0x8d, 0x41, 0x01, //0x00003b37 leaq $1(%rcx), %rax 0x49, 0x89, 0x06, //0x00003b3b movq %rax, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x65, //0x00003b3e cmpb $101, $2(%r12,%rcx) - 0x0f, 0x85, 0xf6, 0xfe, 0xff, 0xff, //0x00003b44 jne LBB0_637 - 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00003b4a jmp LBB0_631 - //0x00003b4f LBB0_289 - 0x49, 0x89, 0x06, //0x00003b4f movq %rax, (%r14) - 0x41, 0x80, 0x3c, 0x04, 0x6e, //0x00003b52 cmpb $110, (%r12,%rax) - 0x0f, 0x85, 0xe3, 0xfe, 0xff, 0xff, //0x00003b57 jne LBB0_637 - 0x49, 0x89, 0x0e, //0x00003b5d movq %rcx, (%r14) - 0x41, 0x80, 0x3c, 0x0c, 0x75, //0x00003b60 cmpb $117, (%r12,%rcx) - 0x0f, 0x85, 0xd5, 0xfe, 0xff, 0xff, //0x00003b65 jne LBB0_637 - 0x48, 0x8d, 0x41, 0x01, //0x00003b6b leaq $1(%rcx), %rax - 0x49, 0x89, 0x06, //0x00003b6f movq %rax, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x00003b72 cmpb $108, $1(%r12,%rcx) - 0x0f, 0x85, 0xc2, 0xfe, 0xff, 0xff, //0x00003b78 jne LBB0_637 - 0x48, 0x8d, 0x41, 0x02, //0x00003b7e leaq $2(%rcx), %rax + 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x75, //0x00003b3e cmpb $117, $1(%r12,%rcx) + 0x0f, 0x85, 0x5e, 0xff, 0xff, 0xff, //0x00003b44 jne LBB0_649 + 0x48, 0x8d, 0x41, 0x02, //0x00003b4a leaq $2(%rcx), %rax + 0x49, 0x89, 0x06, //0x00003b4e movq %rax, (%r14) + 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x65, //0x00003b51 cmpb $101, $2(%r12,%rcx) + 0x0f, 0x85, 0x4b, 0xff, 0xff, 0xff, //0x00003b57 jne LBB0_649 + 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00003b5d jmp LBB0_639 + //0x00003b62 LBB0_297 + 0x49, 0x89, 0x06, //0x00003b62 movq %rax, (%r14) + 0x41, 0x80, 0x3c, 0x04, 0x6e, //0x00003b65 cmpb $110, (%r12,%rax) + 0x0f, 0x85, 0x38, 0xff, 0xff, 0xff, //0x00003b6a jne LBB0_649 + 0x49, 0x89, 0x0e, //0x00003b70 movq %rcx, (%r14) + 0x41, 0x80, 0x3c, 0x0c, 0x75, //0x00003b73 cmpb $117, (%r12,%rcx) + 0x0f, 0x85, 0x2a, 0xff, 0xff, 0xff, //0x00003b78 jne LBB0_649 + 0x48, 0x8d, 0x41, 0x01, //0x00003b7e leaq $1(%rcx), %rax 0x49, 0x89, 0x06, //0x00003b82 movq %rax, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x6c, //0x00003b85 cmpb $108, $2(%r12,%rcx) - 0x0f, 0x85, 0xaf, 0xfe, 0xff, 0xff, //0x00003b8b jne LBB0_637 - //0x00003b91 LBB0_631 - 0x48, 0x83, 0xc1, 0x03, //0x00003b91 addq $3, %rcx - 0x49, 0x89, 0x0e, //0x00003b95 movq %rcx, (%r14) - 0xe9, 0xa3, 0xfe, 0xff, 0xff, //0x00003b98 jmp LBB0_637 - //0x00003b9d LBB0_228 - 0x48, 0x83, 0xc1, 0xff, //0x00003b9d addq $-1, %rcx - 0x48, 0x89, 0xc8, //0x00003ba1 movq %rcx, %rax - 0xe9, 0x9e, 0xfe, 0xff, 0xff, //0x00003ba4 jmp LBB0_638 - //0x00003ba9 LBB0_632 - 0x48, 0x8b, 0x55, 0xc8, //0x00003ba9 movq $-56(%rbp), %rdx - 0x48, 0x83, 0xfa, 0xff, //0x00003bad cmpq $-1, %rdx - 0x0f, 0x84, 0x31, 0x00, 0x00, 0x00, //0x00003bb1 je LBB0_639 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003bb7 movq $-2, %rax - 0x49, 0x89, 0x16, //0x00003bbe movq %rdx, (%r14) - 0xe9, 0x81, 0xfe, 0xff, 0xff, //0x00003bc1 jmp LBB0_638 - //0x00003bc6 LBB0_185 - 0x48, 0x8b, 0x75, 0xc0, //0x00003bc6 movq $-64(%rbp), %rsi - 0xe9, 0x63, 0xfe, 0xff, 0xff, //0x00003bca jmp LBB0_612 - //0x00003bcf LBB0_635 - 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00003bcf movq $-1, %rbx - //0x00003bd6 LBB0_636 - 0x48, 0xf7, 0xd3, //0x00003bd6 notq %rbx - 0x48, 0x01, 0xd8, //0x00003bd9 addq %rbx, %rax - 0x48, 0x8b, 0x4d, 0xd0, //0x00003bdc movq $-48(%rbp), %rcx - 0x48, 0x89, 0x01, //0x00003be0 movq %rax, (%rcx) - 0xe9, 0x58, 0xfe, 0xff, 0xff, //0x00003be3 jmp LBB0_637 - //0x00003be8 LBB0_639 - 0x48, 0x0f, 0xbc, 0xd7, //0x00003be8 bsfq %rdi, %rdx - //0x00003bec LBB0_640 - 0x48, 0x01, 0xc2, //0x00003bec addq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003bef movq $-2, %rax - 0x49, 0x89, 0x16, //0x00003bf6 movq %rdx, (%r14) - 0xe9, 0x49, 0xfe, 0xff, 0xff, //0x00003bf9 jmp LBB0_638 - //0x00003bfe LBB0_642 - 0x48, 0x8b, 0x45, 0xb0, //0x00003bfe movq $-80(%rbp), %rax - 0x48, 0x89, 0x45, 0xa0, //0x00003c02 movq %rax, $-96(%rbp) - 0xe9, 0x0c, 0xfe, 0xff, 0xff, //0x00003c06 jmp LBB0_610 - //0x00003c0b LBB0_643 - 0x48, 0x8b, 0x45, 0xb0, //0x00003c0b movq $-80(%rbp), %rax - 0x48, 0x89, 0x45, 0xa0, //0x00003c0f movq %rax, $-96(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x00003c13 movq $-48(%rbp), %r14 - 0xe9, 0xfb, 0xfd, 0xff, 0xff, //0x00003c17 jmp LBB0_610 - //0x00003c1c LBB0_182 - 0x48, 0x01, 0xc2, //0x00003c1c addq %rax, %rdx + 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x00003b85 cmpb $108, $1(%r12,%rcx) + 0x0f, 0x85, 0x17, 0xff, 0xff, 0xff, //0x00003b8b jne LBB0_649 + 0x48, 0x8d, 0x41, 0x02, //0x00003b91 leaq $2(%rcx), %rax + 0x49, 0x89, 0x06, //0x00003b95 movq %rax, (%r14) + 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x6c, //0x00003b98 cmpb $108, $2(%r12,%rcx) + 0x0f, 0x85, 0x04, 0xff, 0xff, 0xff, //0x00003b9e jne LBB0_649 + //0x00003ba4 LBB0_639 + 0x48, 0x83, 0xc1, 0x03, //0x00003ba4 addq $3, %rcx + 0x49, 0x89, 0x0e, //0x00003ba8 movq %rcx, (%r14) + 0xe9, 0xf8, 0xfe, 0xff, 0xff, //0x00003bab jmp LBB0_649 + //0x00003bb0 LBB0_640 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003bb0 movq $-2, %rax + 0x80, 0xfa, 0x61, //0x00003bb7 cmpb $97, %dl + 0x0f, 0x85, 0xef, 0xfe, 0xff, 0xff, //0x00003bba jne LBB0_650 + 0x48, 0x8d, 0x51, 0x01, //0x00003bc0 leaq $1(%rcx), %rdx + 0x49, 0x89, 0x16, //0x00003bc4 movq %rdx, (%r14) + 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x00003bc7 cmpb $108, $1(%r12,%rcx) + 0x0f, 0x85, 0xdc, 0xfe, 0xff, 0xff, //0x00003bcd jne LBB0_650 + 0x48, 0x8d, 0x51, 0x02, //0x00003bd3 leaq $2(%rcx), %rdx + 0x49, 0x89, 0x16, //0x00003bd7 movq %rdx, (%r14) + 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x73, //0x00003bda cmpb $115, $2(%r12,%rcx) + 0x0f, 0x85, 0xc9, 0xfe, 0xff, 0xff, //0x00003be0 jne LBB0_650 + 0x48, 0x8d, 0x51, 0x03, //0x00003be6 leaq $3(%rcx), %rdx + 0x49, 0x89, 0x16, //0x00003bea movq %rdx, (%r14) + 0x41, 0x80, 0x7c, 0x0c, 0x03, 0x65, //0x00003bed cmpb $101, $3(%r12,%rcx) + 0x0f, 0x85, 0xb6, 0xfe, 0xff, 0xff, //0x00003bf3 jne LBB0_650 + 0x48, 0x83, 0xc1, 0x04, //0x00003bf9 addq $4, %rcx + 0x49, 0x89, 0x0e, //0x00003bfd movq %rcx, (%r14) + 0xe9, 0xaa, 0xfe, 0xff, 0xff, //0x00003c00 jmp LBB0_650 + //0x00003c05 LBB0_236 + 0x48, 0x83, 0xc1, 0xff, //0x00003c05 addq $-1, %rcx + 0x48, 0x89, 0xc8, //0x00003c09 movq %rcx, %rax + 0xe9, 0x9e, 0xfe, 0xff, 0xff, //0x00003c0c jmp LBB0_650 + //0x00003c11 LBB0_645 + 0x48, 0x8b, 0x55, 0xc8, //0x00003c11 movq $-56(%rbp), %rdx + 0x48, 0x83, 0xfa, 0xff, //0x00003c15 cmpq $-1, %rdx + 0x0f, 0x84, 0x34, 0x00, 0x00, 0x00, //0x00003c19 je LBB0_653 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003c1f movq $-2, %rax - 0x48, 0x89, 0x55, 0xc8, //0x00003c26 movq %rdx, $-56(%rbp) - 0xe9, 0x78, 0xfe, 0xff, 0xff, //0x00003c2a jmp LBB0_621 - //0x00003c2f LBB0_490 - 0x4c, 0x8b, 0x75, 0xd0, //0x00003c2f movq $-48(%rbp), %r14 - 0xe9, 0xdf, 0xfd, 0xff, 0xff, //0x00003c33 jmp LBB0_610 - //0x00003c38 LBB0_646 - 0x48, 0x8b, 0x45, 0xb0, //0x00003c38 movq $-80(%rbp), %rax - 0x48, 0x89, 0x45, 0xa0, //0x00003c3c movq %rax, $-96(%rbp) - 0xe9, 0x2e, 0xfe, 0xff, 0xff, //0x00003c40 jmp LBB0_616 - //0x00003c45 LBB0_644 - 0x48, 0x89, 0x4d, 0xa0, //0x00003c45 movq %rcx, $-96(%rbp) - 0xe9, 0x25, 0xfe, 0xff, 0xff, //0x00003c49 jmp LBB0_616 - //0x00003c4e LBB0_507 - 0x4c, 0x8b, 0x75, 0xd0, //0x00003c4e movq $-48(%rbp), %r14 - 0xe9, 0x1c, 0xfe, 0xff, 0xff, //0x00003c52 jmp LBB0_616 - //0x00003c57 LBB0_648 - 0x48, 0x8b, 0x4d, 0xa8, //0x00003c57 movq $-88(%rbp), %rcx - 0x48, 0x8b, 0x49, 0x08, //0x00003c5b movq $8(%rcx), %rcx - 0x48, 0x8b, 0x55, 0xd0, //0x00003c5f movq $-48(%rbp), %rdx - 0x48, 0x89, 0x0a, //0x00003c63 movq %rcx, (%rdx) - 0xe9, 0xdc, 0xfd, 0xff, 0xff, //0x00003c66 jmp LBB0_638 - //0x00003c6b LBB0_649 - 0x4c, 0x29, 0xe0, //0x00003c6b subq %r12, %rax - 0x48, 0x01, 0xd0, //0x00003c6e addq %rdx, %rax - 0x48, 0x89, 0x45, 0xc8, //0x00003c71 movq %rax, $-56(%rbp) - 0xe9, 0x22, 0xfe, 0xff, 0xff, //0x00003c75 jmp LBB0_620 - //0x00003c7a LBB0_650 - 0x4c, 0x29, 0xc0, //0x00003c7a subq %r8, %rax - 0x48, 0x01, 0xc8, //0x00003c7d addq %rcx, %rax - 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00003c80 jmp LBB0_653 - //0x00003c85 LBB0_651 - 0x4c, 0x29, 0xe0, //0x00003c85 subq %r12, %rax - 0x48, 0x89, 0x45, 0xc8, //0x00003c88 movq %rax, $-56(%rbp) - 0xe9, 0x0b, 0xfe, 0xff, 0xff, //0x00003c8c jmp LBB0_620 - //0x00003c91 LBB0_652 - 0x4c, 0x29, 0xc0, //0x00003c91 subq %r8, %rax - //0x00003c94 LBB0_653 - 0x48, 0x89, 0xc2, //0x00003c94 movq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003c97 movq $-2, %rax - 0x49, 0x89, 0x16, //0x00003c9e movq %rdx, (%r14) - 0xe9, 0xa1, 0xfd, 0xff, 0xff, //0x00003ca1 jmp LBB0_638 - //0x00003ca6 LBB0_654 - 0x48, 0x01, 0xc8, //0x00003ca6 addq %rcx, %rax - 0x48, 0x89, 0xc2, //0x00003ca9 movq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003cac movq $-2, %rax - 0x49, 0x89, 0x16, //0x00003cb3 movq %rdx, (%r14) - 0xe9, 0x8c, 0xfd, 0xff, 0xff, //0x00003cb6 jmp LBB0_638 - //0x00003cbb LBB0_655 - 0x4c, 0x29, 0xe0, //0x00003cbb subq %r12, %rax - 0x48, 0x01, 0xc8, //0x00003cbe addq %rcx, %rax - 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00003cc1 jmp LBB0_657 - //0x00003cc6 LBB0_656 - 0x4c, 0x29, 0xe0, //0x00003cc6 subq %r12, %rax - //0x00003cc9 LBB0_657 - 0x48, 0x89, 0xc2, //0x00003cc9 movq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003ccc movq $-2, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x00003cd3 movq $-48(%rbp), %r14 - 0x49, 0x89, 0x16, //0x00003cd7 movq %rdx, (%r14) - 0xe9, 0x68, 0xfd, 0xff, 0xff, //0x00003cda jmp LBB0_638 - 0x90, //0x00003cdf .p2align 2, 0x90 + 0x49, 0x89, 0x16, //0x00003c26 movq %rdx, (%r14) + 0xe9, 0x81, 0xfe, 0xff, 0xff, //0x00003c29 jmp LBB0_650 + //0x00003c2e LBB0_647 + 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00003c2e movq $-1, %rbx + //0x00003c35 LBB0_648 + 0x48, 0xf7, 0xd3, //0x00003c35 notq %rbx + 0x48, 0x01, 0xd8, //0x00003c38 addq %rbx, %rax + 0x48, 0x8b, 0x4d, 0xd0, //0x00003c3b movq $-48(%rbp), %rcx + 0x48, 0x89, 0x01, //0x00003c3f movq %rax, (%rcx) + 0xe9, 0x61, 0xfe, 0xff, 0xff, //0x00003c42 jmp LBB0_649 + //0x00003c47 LBB0_443 + 0x48, 0x83, 0xc3, 0xff, //0x00003c47 addq $-1, %rbx + 0x48, 0x89, 0xd8, //0x00003c4b movq %rbx, %rax + 0xe9, 0x5c, 0xfe, 0xff, 0xff, //0x00003c4e jmp LBB0_650 + //0x00003c53 LBB0_653 + 0x48, 0x0f, 0xbc, 0xd6, //0x00003c53 bsfq %rsi, %rdx + //0x00003c57 LBB0_654 + 0x48, 0x01, 0xc2, //0x00003c57 addq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003c5a movq $-2, %rax + 0x49, 0x89, 0x16, //0x00003c61 movq %rdx, (%r14) + 0xe9, 0x46, 0xfe, 0xff, 0xff, //0x00003c64 jmp LBB0_650 + //0x00003c69 LBB0_656 + 0x48, 0x8b, 0x45, 0xc0, //0x00003c69 movq $-64(%rbp), %rax + 0x48, 0x89, 0x45, 0xa0, //0x00003c6d movq %rax, $-96(%rbp) + 0xe9, 0x05, 0xfe, 0xff, 0xff, //0x00003c71 jmp LBB0_624 + //0x00003c76 LBB0_657 + 0x48, 0x8b, 0x45, 0xc0, //0x00003c76 movq $-64(%rbp), %rax + 0x48, 0x89, 0x45, 0xa0, //0x00003c7a movq %rax, $-96(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x00003c7e movq $-48(%rbp), %r14 + 0xe9, 0xf4, 0xfd, 0xff, 0xff, //0x00003c82 jmp LBB0_624 + //0x00003c87 LBB0_187 + 0x48, 0x01, 0xc2, //0x00003c87 addq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003c8a movq $-2, %rax + 0x48, 0x89, 0x55, 0xc8, //0x00003c91 movq %rdx, $-56(%rbp) + 0xe9, 0x75, 0xfe, 0xff, 0xff, //0x00003c95 jmp LBB0_634 + //0x00003c9a LBB0_508 + 0x4c, 0x8b, 0x75, 0xd0, //0x00003c9a movq $-48(%rbp), %r14 + 0xe9, 0xd8, 0xfd, 0xff, 0xff, //0x00003c9e jmp LBB0_624 + //0x00003ca3 LBB0_658 + 0x48, 0x8b, 0x45, 0xc0, //0x00003ca3 movq $-64(%rbp), %rax + 0x48, 0x89, 0x45, 0xa0, //0x00003ca7 movq %rax, $-96(%rbp) + 0xe9, 0x1f, 0xfe, 0xff, 0xff, //0x00003cab jmp LBB0_628 + //0x00003cb0 LBB0_660 + 0x48, 0x89, 0x55, 0xa0, //0x00003cb0 movq %rdx, $-96(%rbp) + 0xe9, 0x16, 0xfe, 0xff, 0xff, //0x00003cb4 jmp LBB0_628 + //0x00003cb9 LBB0_524 + 0x4c, 0x8b, 0x75, 0xd0, //0x00003cb9 movq $-48(%rbp), %r14 + 0xe9, 0x0d, 0xfe, 0xff, 0xff, //0x00003cbd jmp LBB0_628 + //0x00003cc2 LBB0_662 + 0x48, 0x8b, 0x4d, 0xa8, //0x00003cc2 movq $-88(%rbp), %rcx + 0x48, 0x8b, 0x49, 0x08, //0x00003cc6 movq $8(%rcx), %rcx + 0x48, 0x8b, 0x55, 0xd0, //0x00003cca movq $-48(%rbp), %rdx + 0x48, 0x89, 0x0a, //0x00003cce movq %rcx, (%rdx) + 0xe9, 0xd9, 0xfd, 0xff, 0xff, //0x00003cd1 jmp LBB0_650 + //0x00003cd6 LBB0_663 + 0x4c, 0x29, 0xe0, //0x00003cd6 subq %r12, %rax + 0x48, 0x01, 0xd0, //0x00003cd9 addq %rdx, %rax + 0x48, 0x89, 0x45, 0xc8, //0x00003cdc movq %rax, $-56(%rbp) + 0xe9, 0x1f, 0xfe, 0xff, 0xff, //0x00003ce0 jmp LBB0_633 + //0x00003ce5 LBB0_664 + 0x4c, 0x29, 0xc0, //0x00003ce5 subq %r8, %rax + 0x48, 0x01, 0xc8, //0x00003ce8 addq %rcx, %rax + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00003ceb jmp LBB0_667 + //0x00003cf0 LBB0_665 + 0x4c, 0x29, 0xe0, //0x00003cf0 subq %r12, %rax + 0x48, 0x89, 0x45, 0xc8, //0x00003cf3 movq %rax, $-56(%rbp) + 0xe9, 0x08, 0xfe, 0xff, 0xff, //0x00003cf7 jmp LBB0_633 + //0x00003cfc LBB0_666 + 0x4c, 0x29, 0xc0, //0x00003cfc subq %r8, %rax + //0x00003cff LBB0_667 + 0x48, 0x89, 0xc2, //0x00003cff movq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d02 movq $-2, %rax + 0x49, 0x89, 0x16, //0x00003d09 movq %rdx, (%r14) + 0xe9, 0x9e, 0xfd, 0xff, 0xff, //0x00003d0c jmp LBB0_650 + //0x00003d11 LBB0_668 + 0x48, 0x01, 0xc8, //0x00003d11 addq %rcx, %rax + 0x48, 0x89, 0xc2, //0x00003d14 movq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d17 movq $-2, %rax + 0x49, 0x89, 0x16, //0x00003d1e movq %rdx, (%r14) + 0xe9, 0x89, 0xfd, 0xff, 0xff, //0x00003d21 jmp LBB0_650 + //0x00003d26 LBB0_669 + 0x4c, 0x29, 0xe0, //0x00003d26 subq %r12, %rax + 0x48, 0x01, 0xc8, //0x00003d29 addq %rcx, %rax + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00003d2c jmp LBB0_671 + //0x00003d31 LBB0_670 + 0x4c, 0x29, 0xe0, //0x00003d31 subq %r12, %rax + //0x00003d34 LBB0_671 + 0x48, 0x89, 0xc2, //0x00003d34 movq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d37 movq $-2, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00003d3e movq $-48(%rbp), %r14 + 0x49, 0x89, 0x16, //0x00003d42 movq %rdx, (%r14) + 0xe9, 0x65, 0xfd, 0xff, 0xff, //0x00003d45 jmp LBB0_650 + 0x90, 0x90, //0x00003d4a .p2align 2, 0x90 // // .set L0_0_set_35, LBB0_35-LJTI0_0 // // .set L0_0_set_61, LBB0_61-LJTI0_0 // // .set L0_0_set_40, LBB0_40-LJTI0_0 // // .set L0_0_set_59, LBB0_59-LJTI0_0 // // .set L0_0_set_38, LBB0_38-LJTI0_0 // // .set L0_0_set_63, LBB0_63-LJTI0_0 - //0x00003ce0 LJTI0_0 - 0xd4, 0xc6, 0xff, 0xff, //0x00003ce0 .long L0_0_set_35 - 0xec, 0xc8, 0xff, 0xff, //0x00003ce4 .long L0_0_set_61 - 0x10, 0xc7, 0xff, 0xff, //0x00003ce8 .long L0_0_set_40 - 0xd0, 0xc8, 0xff, 0xff, //0x00003cec .long L0_0_set_59 - 0xeb, 0xc6, 0xff, 0xff, //0x00003cf0 .long L0_0_set_38 - 0x1c, 0xc9, 0xff, 0xff, //0x00003cf4 .long L0_0_set_63 - // // .set L0_1_set_638, LBB0_638-LJTI0_1 - // // .set L0_1_set_637, LBB0_637-LJTI0_1 - // // .set L0_1_set_232, LBB0_232-LJTI0_1 - // // .set L0_1_set_250, LBB0_250-LJTI0_1 + //0x00003d4c LJTI0_0 + 0x2c, 0xc6, 0xff, 0xff, //0x00003d4c .long L0_0_set_35 + 0x3c, 0xc8, 0xff, 0xff, //0x00003d50 .long L0_0_set_61 + 0x64, 0xc6, 0xff, 0xff, //0x00003d54 .long L0_0_set_40 + 0x24, 0xc8, 0xff, 0xff, //0x00003d58 .long L0_0_set_59 + 0x43, 0xc6, 0xff, 0xff, //0x00003d5c .long L0_0_set_38 + 0x68, 0xc8, 0xff, 0xff, //0x00003d60 .long L0_0_set_63 + // // .set L0_1_set_650, LBB0_650-LJTI0_1 + // // .set L0_1_set_649, LBB0_649-LJTI0_1 + // // .set L0_1_set_237, LBB0_237-LJTI0_1 + // // .set L0_1_set_255, LBB0_255-LJTI0_1 // // .set L0_1_set_80, LBB0_80-LJTI0_1 - // // .set L0_1_set_229, LBB0_229-LJTI0_1 - // // .set L0_1_set_225, LBB0_225-LJTI0_1 - // // .set L0_1_set_287, LBB0_287-LJTI0_1 - // // .set L0_1_set_296, LBB0_296-LJTI0_1 - // // .set L0_1_set_293, LBB0_293-LJTI0_1 - //0x00003cf8 LJTI0_1 - 0x4f, 0xfd, 0xff, 0xff, //0x00003cf8 .long L0_1_set_638 - 0x48, 0xfd, 0xff, 0xff, //0x00003cfc .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d00 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d04 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d08 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d0c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d10 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d14 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d18 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d1c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d20 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d24 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d28 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d2c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d30 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d34 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d38 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d3c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d40 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d44 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d48 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d4c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d50 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d54 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d58 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d5c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d60 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d64 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d68 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d6c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d70 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d74 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d78 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d7c .long L0_1_set_637 - 0x19, 0xd6, 0xff, 0xff, //0x00003d80 .long L0_1_set_232 - 0x48, 0xfd, 0xff, 0xff, //0x00003d84 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d88 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d8c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d90 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d94 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d98 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d9c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003da0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003da4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003da8 .long L0_1_set_637 - 0xd2, 0xd7, 0xff, 0xff, //0x00003dac .long L0_1_set_250 - 0x48, 0xfd, 0xff, 0xff, //0x00003db0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003db4 .long L0_1_set_637 - 0x51, 0xc9, 0xff, 0xff, //0x00003db8 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dbc .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dc0 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dc4 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dc8 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dcc .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dd0 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dd4 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dd8 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003ddc .long L0_1_set_80 - 0x48, 0xfd, 0xff, 0xff, //0x00003de0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003de4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003de8 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003dec .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003df0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003df4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003df8 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003dfc .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e00 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e04 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e08 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e0c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e10 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e14 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e18 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e1c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e20 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e24 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e28 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e2c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e30 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e34 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e38 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e3c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e40 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e44 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e48 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e4c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e50 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e54 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e58 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e5c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e60 .long L0_1_set_637 - 0xe9, 0xd5, 0xff, 0xff, //0x00003e64 .long L0_1_set_229 - 0x48, 0xfd, 0xff, 0xff, //0x00003e68 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e6c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e70 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e74 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e78 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e7c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e80 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e84 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e88 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e8c .long L0_1_set_637 - 0xac, 0xd5, 0xff, 0xff, //0x00003e90 .long L0_1_set_225 - 0x48, 0xfd, 0xff, 0xff, //0x00003e94 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e98 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e9c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ea0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ea4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ea8 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003eac .long L0_1_set_637 - 0x20, 0xda, 0xff, 0xff, //0x00003eb0 .long L0_1_set_287 - 0x48, 0xfd, 0xff, 0xff, //0x00003eb4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003eb8 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ebc .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ec0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ec4 .long L0_1_set_637 - 0x80, 0xda, 0xff, 0xff, //0x00003ec8 .long L0_1_set_296 - 0x48, 0xfd, 0xff, 0xff, //0x00003ecc .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ed0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ed4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ed8 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003edc .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ee0 .long L0_1_set_637 - 0x50, 0xda, 0xff, 0xff, //0x00003ee4 .long L0_1_set_293 - // // .set L0_2_set_276, LBB0_276-LJTI0_2 - // // .set L0_2_set_412, LBB0_412-LJTI0_2 - // // .set L0_2_set_282, LBB0_282-LJTI0_2 - // // .set L0_2_set_285, LBB0_285-LJTI0_2 - //0x00003ee8 LJTI0_2 - 0xaf, 0xd7, 0xff, 0xff, //0x00003ee8 .long L0_2_set_276 - 0xc0, 0xe6, 0xff, 0xff, //0x00003eec .long L0_2_set_412 - 0xaf, 0xd7, 0xff, 0xff, //0x00003ef0 .long L0_2_set_276 - 0x01, 0xd8, 0xff, 0xff, //0x00003ef4 .long L0_2_set_282 - 0xc0, 0xe6, 0xff, 0xff, //0x00003ef8 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003efc .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f00 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f04 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f08 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f0c .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f10 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f14 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f18 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f1c .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f20 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f24 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f28 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f2c .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f30 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f34 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f38 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f3c .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f40 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f44 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f48 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f4c .long L0_2_set_412 - 0x1d, 0xd8, 0xff, 0xff, //0x00003f50 .long L0_2_set_285 - // // .set L0_3_set_113, LBB0_113-LJTI0_3 - // // .set L0_3_set_212, LBB0_212-LJTI0_3 + // // .set L0_1_set_292, LBB0_292-LJTI0_1 + // // .set L0_1_set_233, LBB0_233-LJTI0_1 + // // .set L0_1_set_295, LBB0_295-LJTI0_1 + // // .set L0_1_set_304, LBB0_304-LJTI0_1 + // // .set L0_1_set_301, LBB0_301-LJTI0_1 + //0x00003d64 LJTI0_1 + 0x4b, 0xfd, 0xff, 0xff, //0x00003d64 .long L0_1_set_650 + 0x44, 0xfd, 0xff, 0xff, //0x00003d68 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d6c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d70 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d74 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d78 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d7c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d80 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d84 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d88 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d8c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d90 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d94 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d98 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d9c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003da0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003da4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003da8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dac .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003db0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003db4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003db8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dbc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dc0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dc4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dc8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dcc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dd0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dd4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dd8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ddc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003de0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003de4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003de8 .long L0_1_set_649 + 0x66, 0xd5, 0xff, 0xff, //0x00003dec .long L0_1_set_237 + 0x44, 0xfd, 0xff, 0xff, //0x00003df0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003df4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003df8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dfc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e00 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e04 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e08 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e0c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e10 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e14 .long L0_1_set_649 + 0x1a, 0xd7, 0xff, 0xff, //0x00003e18 .long L0_1_set_255 + 0x44, 0xfd, 0xff, 0xff, //0x00003e1c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e20 .long L0_1_set_649 + 0x96, 0xc8, 0xff, 0xff, //0x00003e24 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e28 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e2c .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e30 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e34 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e38 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e3c .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e40 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e44 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e48 .long L0_1_set_80 + 0x44, 0xfd, 0xff, 0xff, //0x00003e4c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e50 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e54 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e58 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e5c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e60 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e64 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e68 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e6c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e70 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e74 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e78 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e7c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e80 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e84 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e88 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e8c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e90 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e94 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e98 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e9c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ea0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ea4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ea8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003eac .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003eb0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003eb4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003eb8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ebc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ec0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ec4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ec8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ecc .long L0_1_set_649 + 0x74, 0xd9, 0xff, 0xff, //0x00003ed0 .long L0_1_set_292 + 0x44, 0xfd, 0xff, 0xff, //0x00003ed4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ed8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003edc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ee0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ee4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ee8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003eec .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ef0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ef4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ef8 .long L0_1_set_649 + 0x29, 0xd5, 0xff, 0xff, //0x00003efc .long L0_1_set_233 + 0x44, 0xfd, 0xff, 0xff, //0x00003f00 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f04 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f08 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f0c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f10 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f14 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f18 .long L0_1_set_649 + 0xa4, 0xd9, 0xff, 0xff, //0x00003f1c .long L0_1_set_295 + 0x44, 0xfd, 0xff, 0xff, //0x00003f20 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f24 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f28 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f2c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f30 .long L0_1_set_649 + 0x04, 0xda, 0xff, 0xff, //0x00003f34 .long L0_1_set_304 + 0x44, 0xfd, 0xff, 0xff, //0x00003f38 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f3c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f40 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f44 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f48 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f4c .long L0_1_set_649 + 0xd4, 0xd9, 0xff, 0xff, //0x00003f50 .long L0_1_set_301 + // // .set L0_2_set_281, LBB0_281-LJTI0_2 + // // .set L0_2_set_427, LBB0_427-LJTI0_2 + // // .set L0_2_set_287, LBB0_287-LJTI0_2 + // // .set L0_2_set_290, LBB0_290-LJTI0_2 + //0x00003f54 LJTI0_2 + 0x0b, 0xd7, 0xff, 0xff, //0x00003f54 .long L0_2_set_281 + 0x75, 0xe6, 0xff, 0xff, //0x00003f58 .long L0_2_set_427 + 0x0b, 0xd7, 0xff, 0xff, //0x00003f5c .long L0_2_set_281 + 0x55, 0xd7, 0xff, 0xff, //0x00003f60 .long L0_2_set_287 + 0x75, 0xe6, 0xff, 0xff, //0x00003f64 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f68 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f6c .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f70 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f74 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f78 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f7c .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f80 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f84 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f88 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f8c .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f90 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f94 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f98 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f9c .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fa0 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fa4 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fa8 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fac .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fb0 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fb4 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fb8 .long L0_2_set_427 + 0x71, 0xd7, 0xff, 0xff, //0x00003fbc .long L0_2_set_290 + // // .set L0_3_set_106, LBB0_106-LJTI0_3 + // // .set L0_3_set_215, LBB0_215-LJTI0_3 + // // .set L0_3_set_112, LBB0_112-LJTI0_3 // // .set L0_3_set_115, LBB0_115-LJTI0_3 - // // .set L0_3_set_107, LBB0_107-LJTI0_3 - //0x00003f54 LJTI0_3 - 0x2f, 0xc9, 0xff, 0xff, //0x00003f54 .long L0_3_set_113 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f58 .long L0_3_set_212 - 0x2f, 0xc9, 0xff, 0xff, //0x00003f5c .long L0_3_set_113 - 0x42, 0xc9, 0xff, 0xff, //0x00003f60 .long L0_3_set_115 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f64 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f68 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f6c .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f70 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f74 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f78 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f7c .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f80 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f84 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f88 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f8c .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f90 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f94 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f98 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f9c .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fa0 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fa4 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fa8 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fac .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fb0 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fb4 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fb8 .long L0_3_set_212 - 0xe4, 0xc8, 0xff, 0xff, //0x00003fbc .long L0_3_set_107 - //0x00003fc0 .p2align 2, 0x00 - //0x00003fc0 _MASK_USE_NUMBER - 0x02, 0x00, 0x00, 0x00, //0x00003fc0 .long 2 + //0x00003fc0 LJTI0_3 + 0x33, 0xc8, 0xff, 0xff, //0x00003fc0 .long L0_3_set_106 + 0x08, 0xd2, 0xff, 0xff, //0x00003fc4 .long L0_3_set_215 + 0x33, 0xc8, 0xff, 0xff, //0x00003fc8 .long L0_3_set_106 + 0x82, 0xc8, 0xff, 0xff, //0x00003fcc .long L0_3_set_112 + 0x08, 0xd2, 0xff, 0xff, //0x00003fd0 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fd4 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fd8 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fdc .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fe0 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fe4 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fe8 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fec .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003ff0 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003ff4 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003ff8 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003ffc .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004000 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004004 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004008 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x0000400c .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004010 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004014 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004018 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x0000401c .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004020 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004024 .long L0_3_set_215 + 0x9e, 0xc8, 0xff, 0xff, //0x00004028 .long L0_3_set_115 + //0x0000402c .p2align 2, 0x00 + //0x0000402c _MASK_USE_NUMBER + 0x02, 0x00, 0x00, 0x00, //0x0000402c .long 2 } diff --git a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_fast_subr.go b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_fast_subr.go index bb2f481..73e0f10 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_fast_subr.go +++ b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_fast_subr.go @@ -16,7 +16,7 @@ const ( ) const ( - _size__skip_one_fast = 3348 + _size__skip_one_fast = 3460 ) var ( @@ -28,15 +28,15 @@ var ( {0xc, 32}, {0xd, 40}, {0x11, 48}, - {0x25c, 136}, - {0x25d, 48}, - {0x25f, 40}, - {0x261, 32}, - {0x263, 24}, - {0x265, 16}, - {0x266, 8}, - {0x267, 0}, - {0xd14, 136}, + {0xcd6, 136}, + {0xcd7, 48}, + {0xcd9, 40}, + {0xcdb, 32}, + {0xcdd, 24}, + {0xcdf, 16}, + {0xce0, 8}, + {0xce1, 0}, + {0xd84, 136}, } ) diff --git a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_fast_text_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_fast_text_amd64.go index 50a6ed6..c0f00fe 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_fast_text_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_fast_text_amd64.go @@ -31,12 +31,12 @@ var _text_skip_one_fast = []byte{ 0x41, 0x54, //0x0000008a pushq %r12 0x53, //0x0000008c pushq %rbx 0x48, 0x83, 0xec, 0x58, //0x0000008d subq $88, %rsp - 0x4c, 0x8b, 0x0f, //0x00000091 movq (%rdi), %r9 - 0x48, 0x8b, 0x57, 0x08, //0x00000094 movq $8(%rdi), %rdx + 0x4c, 0x8b, 0x37, //0x00000091 movq (%rdi), %r14 + 0x48, 0x8b, 0x5f, 0x08, //0x00000094 movq $8(%rdi), %rbx 0x48, 0x8b, 0x0e, //0x00000098 movq (%rsi), %rcx - 0x48, 0x39, 0xd1, //0x0000009b cmpq %rdx, %rcx + 0x48, 0x39, 0xd9, //0x0000009b cmpq %rbx, %rcx 0x0f, 0x83, 0x26, 0x00, 0x00, 0x00, //0x0000009e jae LBB0_5 - 0x41, 0x8a, 0x04, 0x09, //0x000000a4 movb (%r9,%rcx), %al + 0x41, 0x8a, 0x04, 0x0e, //0x000000a4 movb (%r14,%rcx), %al 0x3c, 0x0d, //0x000000a8 cmpb $13, %al 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x000000aa je LBB0_5 0x3c, 0x20, //0x000000b0 cmpb $32, %al @@ -48,9 +48,9 @@ var _text_skip_one_fast = []byte{ 0xe9, 0xfe, 0x00, 0x00, 0x00, //0x000000c5 jmp LBB0_27 //0x000000ca LBB0_5 0x4c, 0x8d, 0x61, 0x01, //0x000000ca leaq $1(%rcx), %r12 - 0x49, 0x39, 0xd4, //0x000000ce cmpq %rdx, %r12 + 0x49, 0x39, 0xdc, //0x000000ce cmpq %rbx, %r12 0x0f, 0x83, 0x1e, 0x00, 0x00, 0x00, //0x000000d1 jae LBB0_9 - 0x43, 0x8a, 0x04, 0x21, //0x000000d7 movb (%r9,%r12), %al + 0x43, 0x8a, 0x04, 0x26, //0x000000d7 movb (%r14,%r12), %al 0x3c, 0x0d, //0x000000db cmpb $13, %al 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000000dd je LBB0_9 0x3c, 0x20, //0x000000e3 cmpb $32, %al @@ -60,9 +60,9 @@ var _text_skip_one_fast = []byte{ 0x0f, 0x87, 0xd3, 0x00, 0x00, 0x00, //0x000000ef ja LBB0_27 //0x000000f5 LBB0_9 0x4c, 0x8d, 0x61, 0x02, //0x000000f5 leaq $2(%rcx), %r12 - 0x49, 0x39, 0xd4, //0x000000f9 cmpq %rdx, %r12 + 0x49, 0x39, 0xdc, //0x000000f9 cmpq %rbx, %r12 0x0f, 0x83, 0x1e, 0x00, 0x00, 0x00, //0x000000fc jae LBB0_13 - 0x43, 0x8a, 0x04, 0x21, //0x00000102 movb (%r9,%r12), %al + 0x43, 0x8a, 0x04, 0x26, //0x00000102 movb (%r14,%r12), %al 0x3c, 0x0d, //0x00000106 cmpb $13, %al 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00000108 je LBB0_13 0x3c, 0x20, //0x0000010e cmpb $32, %al @@ -72,9 +72,9 @@ var _text_skip_one_fast = []byte{ 0x0f, 0x87, 0xa8, 0x00, 0x00, 0x00, //0x0000011a ja LBB0_27 //0x00000120 LBB0_13 0x4c, 0x8d, 0x61, 0x03, //0x00000120 leaq $3(%rcx), %r12 - 0x49, 0x39, 0xd4, //0x00000124 cmpq %rdx, %r12 + 0x49, 0x39, 0xdc, //0x00000124 cmpq %rbx, %r12 0x0f, 0x83, 0x1e, 0x00, 0x00, 0x00, //0x00000127 jae LBB0_17 - 0x43, 0x8a, 0x04, 0x21, //0x0000012d movb (%r9,%r12), %al + 0x43, 0x8a, 0x04, 0x26, //0x0000012d movb (%r14,%r12), %al 0x3c, 0x0d, //0x00000131 cmpb $13, %al 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00000133 je LBB0_17 0x3c, 0x20, //0x00000139 cmpb $32, %al @@ -84,955 +84,975 @@ var _text_skip_one_fast = []byte{ 0x0f, 0x87, 0x7d, 0x00, 0x00, 0x00, //0x00000145 ja LBB0_27 //0x0000014b LBB0_17 0x48, 0x83, 0xc1, 0x04, //0x0000014b addq $4, %rcx - 0x48, 0x39, 0xca, //0x0000014f cmpq %rcx, %rdx + 0x48, 0x39, 0xcb, //0x0000014f cmpq %rcx, %rbx 0x0f, 0x86, 0x42, 0x00, 0x00, 0x00, //0x00000152 jbe LBB0_23 - 0x48, 0x39, 0xca, //0x00000158 cmpq %rcx, %rdx + 0x48, 0x39, 0xcb, //0x00000158 cmpq %rcx, %rbx 0x0f, 0x84, 0x48, 0x00, 0x00, 0x00, //0x0000015b je LBB0_24 - 0x4d, 0x8d, 0x04, 0x11, //0x00000161 leaq (%r9,%rdx), %r8 - 0x48, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000165 movabsq $4294977024, %rbx + 0x4d, 0x8d, 0x04, 0x1e, //0x00000161 leaq (%r14,%rbx), %r8 + 0x48, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000165 movabsq $4294977024, %rdx 0x90, //0x0000016f .p2align 4, 0x90 //0x00000170 LBB0_20 - 0x41, 0x0f, 0xbe, 0x04, 0x09, //0x00000170 movsbl (%r9,%rcx), %eax + 0x41, 0x0f, 0xbe, 0x04, 0x0e, //0x00000170 movsbl (%r14,%rcx), %eax 0x83, 0xf8, 0x20, //0x00000175 cmpl $32, %eax 0x0f, 0x87, 0x37, 0x00, 0x00, 0x00, //0x00000178 ja LBB0_26 - 0x48, 0x0f, 0xa3, 0xc3, //0x0000017e btq %rax, %rbx + 0x48, 0x0f, 0xa3, 0xc2, //0x0000017e btq %rax, %rdx 0x0f, 0x83, 0x2d, 0x00, 0x00, 0x00, //0x00000182 jae LBB0_26 0x48, 0x83, 0xc1, 0x01, //0x00000188 addq $1, %rcx - 0x48, 0x39, 0xca, //0x0000018c cmpq %rcx, %rdx + 0x48, 0x39, 0xcb, //0x0000018c cmpq %rcx, %rbx 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x0000018f jne LBB0_20 0xe9, 0x15, 0x00, 0x00, 0x00, //0x00000195 jmp LBB0_25 //0x0000019a LBB0_23 0x48, 0x89, 0x0e, //0x0000019a movq %rcx, (%rsi) - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x0000019d movq $-1, %r14 - 0xe9, 0x2c, 0x01, 0x00, 0x00, //0x000001a4 jmp LBB0_44 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x0000019d movq $-1, %r15 + 0xe9, 0xa6, 0x0b, 0x00, 0x00, //0x000001a4 jmp LBB0_115 //0x000001a9 LBB0_24 - 0x4c, 0x01, 0xc9, //0x000001a9 addq %r9, %rcx + 0x4c, 0x01, 0xf1, //0x000001a9 addq %r14, %rcx 0x49, 0x89, 0xc8, //0x000001ac movq %rcx, %r8 //0x000001af LBB0_25 - 0x4d, 0x29, 0xc8, //0x000001af subq %r9, %r8 + 0x4d, 0x29, 0xf0, //0x000001af subq %r14, %r8 0x4c, 0x89, 0xc1, //0x000001b2 movq %r8, %rcx //0x000001b5 LBB0_26 - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x000001b5 movq $-1, %r14 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000001b5 movq $-1, %r15 0x49, 0x89, 0xcc, //0x000001bc movq %rcx, %r12 - 0x48, 0x39, 0xd1, //0x000001bf cmpq %rdx, %rcx - 0x0f, 0x83, 0x0d, 0x01, 0x00, 0x00, //0x000001c2 jae LBB0_44 + 0x48, 0x39, 0xd9, //0x000001bf cmpq %rbx, %rcx + 0x0f, 0x83, 0x87, 0x0b, 0x00, 0x00, //0x000001c2 jae LBB0_115 //0x000001c8 LBB0_27 - 0x49, 0x8d, 0x54, 0x24, 0x01, //0x000001c8 leaq $1(%r12), %rdx - 0x48, 0x89, 0x16, //0x000001cd movq %rdx, (%rsi) - 0x43, 0x0f, 0xbe, 0x04, 0x21, //0x000001d0 movsbl (%r9,%r12), %eax + 0x49, 0x8d, 0x5c, 0x24, 0x01, //0x000001c8 leaq $1(%r12), %rbx + 0x48, 0x89, 0x1e, //0x000001cd movq %rbx, (%rsi) + 0x43, 0x0f, 0xbe, 0x04, 0x26, //0x000001d0 movsbl (%r14,%r12), %eax 0x83, 0xf8, 0x7b, //0x000001d5 cmpl $123, %eax - 0x0f, 0x87, 0x1d, 0x01, 0x00, 0x00, //0x000001d8 ja LBB0_46 - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x000001de movq $-1, %r14 - 0x48, 0x8d, 0x0d, 0xa8, 0x0b, 0x00, 0x00, //0x000001e5 leaq $2984(%rip), %rcx /* LJTI0_0+0(%rip) */ + 0x0f, 0x87, 0x7b, 0x01, 0x00, 0x00, //0x000001d8 ja LBB0_48 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000001de movq $-1, %r15 + 0x48, 0x8d, 0x0d, 0x18, 0x0c, 0x00, 0x00, //0x000001e5 leaq $3096(%rip), %rcx /* LJTI0_0+0(%rip) */ 0x48, 0x63, 0x04, 0x81, //0x000001ec movslq (%rcx,%rax,4), %rax 0x48, 0x01, 0xc8, //0x000001f0 addq %rcx, %rax 0xff, 0xe0, //0x000001f3 jmpq *%rax //0x000001f5 LBB0_29 - 0x48, 0x8b, 0x47, 0x08, //0x000001f5 movq $8(%rdi), %rax - 0x48, 0x89, 0xc1, //0x000001f9 movq %rax, %rcx - 0x48, 0x29, 0xd1, //0x000001fc subq %rdx, %rcx - 0x48, 0x83, 0xf9, 0x10, //0x000001ff cmpq $16, %rcx - 0x0f, 0x82, 0x40, 0x0b, 0x00, 0x00, //0x00000203 jb LBB0_117 - 0x4c, 0x89, 0xe1, //0x00000209 movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x0000020c notq %rcx - 0xf3, 0x0f, 0x6f, 0x05, 0xe9, 0xfd, 0xff, 0xff, //0x0000020f movdqu $-535(%rip), %xmm0 /* LCPI0_0+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0xf1, 0xfd, 0xff, 0xff, //0x00000217 movdqu $-527(%rip), %xmm1 /* LCPI0_1+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x15, 0xf9, 0xfd, 0xff, 0xff, //0x0000021f movdqu $-519(%rip), %xmm2 /* LCPI0_2+0(%rip) */ - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000227 .p2align 4, 0x90 + 0x48, 0x8b, 0x4f, 0x08, //0x000001f5 movq $8(%rdi), %rcx + 0x48, 0x29, 0xd9, //0x000001f9 subq %rbx, %rcx + 0x48, 0x83, 0xf9, 0x10, //0x000001fc cmpq $16, %rcx + 0x0f, 0x82, 0xb2, 0x0b, 0x00, 0x00, //0x00000200 jb LBB0_121 + 0x31, 0xff, //0x00000206 xorl %edi, %edi + 0xf3, 0x0f, 0x6f, 0x05, 0xf0, 0xfd, 0xff, 0xff, //0x00000208 movdqu $-528(%rip), %xmm0 /* LCPI0_0+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0xf8, 0xfd, 0xff, 0xff, //0x00000210 movdqu $-520(%rip), %xmm1 /* LCPI0_1+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x15, 0x00, 0xfe, 0xff, 0xff, //0x00000218 movdqu $-512(%rip), %xmm2 /* LCPI0_2+0(%rip) */ + 0x4c, 0x89, 0xf2, //0x00000220 movq %r14, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000223 .p2align 4, 0x90 //0x00000230 LBB0_31 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x11, //0x00000230 movdqu (%r9,%rdx), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x00000236 movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x0000023a pcmpeqb %xmm0, %xmm4 - 0x66, 0x0f, 0xdb, 0xd9, //0x0000023e pand %xmm1, %xmm3 - 0x66, 0x0f, 0x74, 0xda, //0x00000242 pcmpeqb %xmm2, %xmm3 - 0x66, 0x0f, 0xeb, 0xdc, //0x00000246 por %xmm4, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x0000024a pmovmskb %xmm3, %edi - 0x85, 0xff, //0x0000024e testl %edi, %edi - 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x00000250 jne LBB0_41 - 0x48, 0x83, 0xc2, 0x10, //0x00000256 addq $16, %rdx - 0x48, 0x8d, 0x3c, 0x08, //0x0000025a leaq (%rax,%rcx), %rdi - 0x48, 0x83, 0xc7, 0xf0, //0x0000025e addq $-16, %rdi - 0x48, 0x83, 0xc1, 0xf0, //0x00000262 addq $-16, %rcx - 0x48, 0x83, 0xff, 0x0f, //0x00000266 cmpq $15, %rdi - 0x0f, 0x87, 0xc0, 0xff, 0xff, 0xff, //0x0000026a ja LBB0_31 - 0x4c, 0x89, 0xca, //0x00000270 movq %r9, %rdx - 0x48, 0x29, 0xca, //0x00000273 subq %rcx, %rdx - 0x48, 0x01, 0xc8, //0x00000276 addq %rcx, %rax - 0x48, 0x89, 0xc1, //0x00000279 movq %rax, %rcx + 0xf3, 0x42, 0x0f, 0x6f, 0x5c, 0x22, 0x01, //0x00000230 movdqu $1(%rdx,%r12), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00000237 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x0000023b pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xdb, 0xd9, //0x0000023f pand %xmm1, %xmm3 + 0x66, 0x0f, 0x74, 0xda, //0x00000243 pcmpeqb %xmm2, %xmm3 + 0x66, 0x0f, 0xeb, 0xdc, //0x00000247 por %xmm4, %xmm3 + 0x66, 0x0f, 0xd7, 0xc3, //0x0000024b pmovmskb %xmm3, %eax + 0x85, 0xc0, //0x0000024f testl %eax, %eax + 0x0f, 0x85, 0x7f, 0x00, 0x00, 0x00, //0x00000251 jne LBB0_42 + 0x48, 0x83, 0xc2, 0x10, //0x00000257 addq $16, %rdx + 0x48, 0x8d, 0x04, 0x39, //0x0000025b leaq (%rcx,%rdi), %rax + 0x48, 0x83, 0xc0, 0xf0, //0x0000025f addq $-16, %rax + 0x48, 0x83, 0xc7, 0xf0, //0x00000263 addq $-16, %rdi + 0x48, 0x83, 0xf8, 0x0f, //0x00000267 cmpq $15, %rax + 0x0f, 0x87, 0xbf, 0xff, 0xff, 0xff, //0x0000026b ja LBB0_31 + 0x4a, 0x8d, 0x1c, 0x22, //0x00000271 leaq (%rdx,%r12), %rbx + 0x48, 0x83, 0xc3, 0x01, //0x00000275 addq $1, %rbx + 0x48, 0x01, 0xf9, //0x00000279 addq %rdi, %rcx 0x48, 0x85, 0xc9, //0x0000027c testq %rcx, %rcx - 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x0000027f je LBB0_40 + 0x0f, 0x84, 0x46, 0x00, 0x00, 0x00, //0x0000027f je LBB0_41 //0x00000285 LBB0_34 - 0x48, 0x8d, 0x3c, 0x0a, //0x00000285 leaq (%rdx,%rcx), %rdi - 0x31, 0xc0, //0x00000289 xorl %eax, %eax - //0x0000028b LBB0_35 - 0x0f, 0xb6, 0x1c, 0x02, //0x0000028b movzbl (%rdx,%rax), %ebx - 0x80, 0xfb, 0x2c, //0x0000028f cmpb $44, %bl - 0x0f, 0x84, 0x94, 0x0a, 0x00, 0x00, //0x00000292 je LBB0_115 - 0x80, 0xfb, 0x7d, //0x00000298 cmpb $125, %bl - 0x0f, 0x84, 0x8b, 0x0a, 0x00, 0x00, //0x0000029b je LBB0_115 - 0x80, 0xfb, 0x5d, //0x000002a1 cmpb $93, %bl - 0x0f, 0x84, 0x82, 0x0a, 0x00, 0x00, //0x000002a4 je LBB0_115 - 0x48, 0x83, 0xc0, 0x01, //0x000002aa addq $1, %rax - 0x48, 0x39, 0xc1, //0x000002ae cmpq %rax, %rcx - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x000002b1 jne LBB0_35 - 0x48, 0x89, 0xfa, //0x000002b7 movq %rdi, %rdx - //0x000002ba LBB0_40 - 0x4c, 0x29, 0xca, //0x000002ba subq %r9, %rdx - 0x48, 0x89, 0x16, //0x000002bd movq %rdx, (%rsi) - 0xe9, 0x0d, 0x00, 0x00, 0x00, //0x000002c0 jmp LBB0_43 - //0x000002c5 LBB0_41 - 0x66, 0x0f, 0xbc, 0xc7, //0x000002c5 bsfw %di, %ax - 0x0f, 0xb7, 0xc0, //0x000002c9 movzwl %ax, %eax - 0x48, 0x29, 0xc8, //0x000002cc subq %rcx, %rax - //0x000002cf LBB0_42 - 0x48, 0x89, 0x06, //0x000002cf movq %rax, (%rsi) - //0x000002d2 LBB0_43 - 0x4d, 0x89, 0xe6, //0x000002d2 movq %r12, %r14 - //0x000002d5 LBB0_44 - 0x4c, 0x89, 0xf0, //0x000002d5 movq %r14, %rax - 0x48, 0x83, 0xc4, 0x58, //0x000002d8 addq $88, %rsp - 0x5b, //0x000002dc popq %rbx - 0x41, 0x5c, //0x000002dd popq %r12 - 0x41, 0x5d, //0x000002df popq %r13 - 0x41, 0x5e, //0x000002e1 popq %r14 - 0x41, 0x5f, //0x000002e3 popq %r15 - 0x5d, //0x000002e5 popq %rbp - 0xc3, //0x000002e6 retq - //0x000002e7 LBB0_45 - 0x49, 0x8d, 0x44, 0x24, 0x04, //0x000002e7 leaq $4(%r12), %rax - 0x48, 0x3b, 0x47, 0x08, //0x000002ec cmpq $8(%rdi), %rax - 0x0f, 0x86, 0xd9, 0xff, 0xff, 0xff, //0x000002f0 jbe LBB0_42 - 0xe9, 0xda, 0xff, 0xff, 0xff, //0x000002f6 jmp LBB0_44 - //0x000002fb LBB0_46 - 0x4c, 0x89, 0x26, //0x000002fb movq %r12, (%rsi) - 0x49, 0xc7, 0xc6, 0xfe, 0xff, 0xff, 0xff, //0x000002fe movq $-2, %r14 - 0xe9, 0xcb, 0xff, 0xff, 0xff, //0x00000305 jmp LBB0_44 - //0x0000030a LBB0_47 - 0x4c, 0x8b, 0x47, 0x08, //0x0000030a movq $8(%rdi), %r8 - 0x4d, 0x89, 0xc7, //0x0000030e movq %r8, %r15 - 0x49, 0x29, 0xd7, //0x00000311 subq %rdx, %r15 - 0x49, 0x83, 0xff, 0x20, //0x00000314 cmpq $32, %r15 - 0x0f, 0x8c, 0x3c, 0x0a, 0x00, 0x00, //0x00000318 jl LBB0_118 - 0x4f, 0x8d, 0x14, 0x21, //0x0000031e leaq (%r9,%r12), %r10 - 0x4d, 0x29, 0xe0, //0x00000322 subq %r12, %r8 - 0x41, 0xbd, 0x1f, 0x00, 0x00, 0x00, //0x00000325 movl $31, %r13d - 0x45, 0x31, 0xff, //0x0000032b xorl %r15d, %r15d - 0xf3, 0x0f, 0x6f, 0x05, 0xfa, 0xfc, 0xff, 0xff, //0x0000032e movdqu $-774(%rip), %xmm0 /* LCPI0_3+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0x02, 0xfd, 0xff, 0xff, //0x00000336 movdqu $-766(%rip), %xmm1 /* LCPI0_4+0(%rip) */ - 0x45, 0x31, 0xdb, //0x0000033e xorl %r11d, %r11d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000341 .p2align 4, 0x90 - //0x00000350 LBB0_49 - 0xf3, 0x43, 0x0f, 0x6f, 0x54, 0x3a, 0x01, //0x00000350 movdqu $1(%r10,%r15), %xmm2 - 0xf3, 0x43, 0x0f, 0x6f, 0x5c, 0x3a, 0x11, //0x00000357 movdqu $17(%r10,%r15), %xmm3 - 0x66, 0x0f, 0x6f, 0xe2, //0x0000035e movdqa %xmm2, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x00000362 pcmpeqb %xmm0, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x00000366 pmovmskb %xmm4, %ecx - 0x66, 0x0f, 0x6f, 0xe3, //0x0000036a movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x0000036e pcmpeqb %xmm0, %xmm4 - 0x66, 0x0f, 0xd7, 0xc4, //0x00000372 pmovmskb %xmm4, %eax - 0x48, 0xc1, 0xe0, 0x10, //0x00000376 shlq $16, %rax - 0x48, 0x09, 0xc8, //0x0000037a orq %rcx, %rax - 0x66, 0x0f, 0x74, 0xd1, //0x0000037d pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xda, //0x00000381 pmovmskb %xmm2, %ebx - 0x66, 0x0f, 0x74, 0xd9, //0x00000385 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00000389 pmovmskb %xmm3, %ecx - 0x48, 0xc1, 0xe1, 0x10, //0x0000038d shlq $16, %rcx - 0x48, 0x09, 0xd9, //0x00000391 orq %rbx, %rcx - 0x48, 0x89, 0xcb, //0x00000394 movq %rcx, %rbx - 0x4c, 0x09, 0xdb, //0x00000397 orq %r11, %rbx - 0x0f, 0x84, 0x40, 0x00, 0x00, 0x00, //0x0000039a je LBB0_51 - 0x44, 0x89, 0xdb, //0x000003a0 movl %r11d, %ebx - 0xf7, 0xd3, //0x000003a3 notl %ebx - 0x21, 0xcb, //0x000003a5 andl %ecx, %ebx - 0x8d, 0x14, 0x1b, //0x000003a7 leal (%rbx,%rbx), %edx - 0x44, 0x09, 0xda, //0x000003aa orl %r11d, %edx - 0x89, 0xd7, //0x000003ad movl %edx, %edi - 0xf7, 0xd7, //0x000003af notl %edi - 0x21, 0xcf, //0x000003b1 andl %ecx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x000003b3 andl $-1431655766, %edi - 0x45, 0x31, 0xdb, //0x000003b9 xorl %r11d, %r11d - 0x01, 0xdf, //0x000003bc addl %ebx, %edi - 0x41, 0x0f, 0x92, 0xc3, //0x000003be setb %r11b - 0x01, 0xff, //0x000003c2 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x000003c4 xorl $1431655765, %edi - 0x21, 0xd7, //0x000003ca andl %edx, %edi - 0xf7, 0xd7, //0x000003cc notl %edi - 0x21, 0xf8, //0x000003ce andl %edi, %eax - 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x000003d0 jmp LBB0_52 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000003d5 .p2align 4, 0x90 - //0x000003e0 LBB0_51 - 0x45, 0x31, 0xdb, //0x000003e0 xorl %r11d, %r11d - //0x000003e3 LBB0_52 - 0x48, 0x85, 0xc0, //0x000003e3 testq %rax, %rax - 0x0f, 0x85, 0xe6, 0x08, 0x00, 0x00, //0x000003e6 jne LBB0_110 - 0x49, 0x83, 0xc7, 0x20, //0x000003ec addq $32, %r15 - 0x4b, 0x8d, 0x04, 0x28, //0x000003f0 leaq (%r8,%r13), %rax - 0x48, 0x83, 0xc0, 0xe0, //0x000003f4 addq $-32, %rax - 0x49, 0x83, 0xc5, 0xe0, //0x000003f8 addq $-32, %r13 - 0x48, 0x83, 0xf8, 0x3f, //0x000003fc cmpq $63, %rax - 0x0f, 0x8f, 0x4a, 0xff, 0xff, 0xff, //0x00000400 jg LBB0_49 - 0x4d, 0x85, 0xdb, //0x00000406 testq %r11, %r11 - 0x0f, 0x85, 0x5f, 0x09, 0x00, 0x00, //0x00000409 jne LBB0_120 - 0x4b, 0x8d, 0x14, 0x17, //0x0000040f leaq (%r15,%r10), %rdx - 0x48, 0x83, 0xc2, 0x01, //0x00000413 addq $1, %rdx - 0x49, 0xf7, 0xd7, //0x00000417 notq %r15 - 0x4d, 0x01, 0xc7, //0x0000041a addq %r8, %r15 - //0x0000041d LBB0_56 - 0x4d, 0x85, 0xff, //0x0000041d testq %r15, %r15 - 0x0f, 0x8e, 0xaf, 0xfe, 0xff, 0xff, //0x00000420 jle LBB0_44 - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00000426 movq $-1, %r14 - 0xe9, 0xca, 0x08, 0x00, 0x00, //0x0000042d jmp LBB0_112 - //0x00000432 LBB0_58 - 0x49, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000432 movabsq $6148914691236517205, %r10 - 0x48, 0x8b, 0x47, 0x08, //0x0000043c movq $8(%rdi), %rax - 0x48, 0x29, 0xd0, //0x00000440 subq %rdx, %rax - 0x49, 0x01, 0xd1, //0x00000443 addq %rdx, %r9 - 0x45, 0x31, 0xed, //0x00000446 xorl %r13d, %r13d - 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0xee, 0xfb, 0xff, 0xff, //0x00000449 movdqu $-1042(%rip), %xmm10 /* LCPI0_4+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0xd6, 0xfb, 0xff, 0xff, //0x00000452 movdqu $-1066(%rip), %xmm1 /* LCPI0_3+0(%rip) */ - 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x0000045a pcmpeqd %xmm9, %xmm9 - 0xf3, 0x0f, 0x6f, 0x1d, 0x09, 0xfc, 0xff, 0xff, //0x0000045f movdqu $-1015(%rip), %xmm3 /* LCPI0_7+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x25, 0xb1, 0xfb, 0xff, 0xff, //0x00000467 movdqu $-1103(%rip), %xmm4 /* LCPI0_2+0(%rip) */ - 0x45, 0x0f, 0x57, 0xc0, //0x0000046f xorps %xmm8, %xmm8 - 0x45, 0x31, 0xff, //0x00000473 xorl %r15d, %r15d - 0x31, 0xc9, //0x00000476 xorl %ecx, %ecx - 0x48, 0x89, 0x4d, 0xc0, //0x00000478 movq %rcx, $-64(%rbp) - 0x45, 0x31, 0xdb, //0x0000047c xorl %r11d, %r11d - 0xe9, 0x60, 0x00, 0x00, 0x00, //0x0000047f jmp LBB0_60 - //0x00000484 LBB0_59 - 0x49, 0xc1, 0xff, 0x3f, //0x00000484 sarq $63, %r15 - 0x4c, 0x89, 0xc0, //0x00000488 movq %r8, %rax - 0x48, 0xd1, 0xe8, //0x0000048b shrq %rax - 0x4c, 0x21, 0xd0, //0x0000048e andq %r10, %rax - 0x49, 0x29, 0xc0, //0x00000491 subq %rax, %r8 - 0x4c, 0x89, 0xc0, //0x00000494 movq %r8, %rax - 0x4c, 0x21, 0xe8, //0x00000497 andq %r13, %rax - 0x49, 0xc1, 0xe8, 0x02, //0x0000049a shrq $2, %r8 - 0x4d, 0x21, 0xe8, //0x0000049e andq %r13, %r8 - 0x49, 0x01, 0xc0, //0x000004a1 addq %rax, %r8 - 0x4c, 0x89, 0xc0, //0x000004a4 movq %r8, %rax - 0x48, 0xc1, 0xe8, 0x04, //0x000004a7 shrq $4, %rax - 0x4c, 0x01, 0xc0, //0x000004ab addq %r8, %rax - 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x000004ae movabsq $1085102592571150095, %rcx - 0x48, 0x21, 0xc8, //0x000004b8 andq %rcx, %rax - 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000004bb movabsq $72340172838076673, %rcx - 0x48, 0x0f, 0xaf, 0xc1, //0x000004c5 imulq %rcx, %rax - 0x48, 0xc1, 0xe8, 0x38, //0x000004c9 shrq $56, %rax - 0x48, 0x01, 0x45, 0xc0, //0x000004cd addq %rax, $-64(%rbp) - 0x49, 0x83, 0xc1, 0x40, //0x000004d1 addq $64, %r9 - 0x48, 0x8b, 0x45, 0xd0, //0x000004d5 movq $-48(%rbp), %rax - 0x48, 0x83, 0xc0, 0xc0, //0x000004d9 addq $-64, %rax - 0x4d, 0x89, 0xfd, //0x000004dd movq %r15, %r13 - 0x4c, 0x8b, 0x7d, 0xc8, //0x000004e0 movq $-56(%rbp), %r15 - //0x000004e4 LBB0_60 - 0x48, 0x83, 0xf8, 0x40, //0x000004e4 cmpq $64, %rax - 0x48, 0x89, 0x45, 0xd0, //0x000004e8 movq %rax, $-48(%rbp) - 0x0f, 0x8c, 0x2c, 0x02, 0x00, 0x00, //0x000004ec jl LBB0_67 - //0x000004f2 LBB0_61 - 0xf3, 0x41, 0x0f, 0x6f, 0x01, //0x000004f2 movdqu (%r9), %xmm0 - 0xf3, 0x41, 0x0f, 0x6f, 0x69, 0x10, //0x000004f7 movdqu $16(%r9), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x79, 0x20, //0x000004fd movdqu $32(%r9), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x71, 0x30, //0x00000503 movdqu $48(%r9), %xmm6 - 0x66, 0x0f, 0x6f, 0xd0, //0x00000509 movdqa %xmm0, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x0000050d pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xd2, //0x00000512 pmovmskb %xmm2, %edx - 0x66, 0x0f, 0x6f, 0xd5, //0x00000516 movdqa %xmm5, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x0000051a pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xc2, //0x0000051f pmovmskb %xmm2, %eax - 0x66, 0x0f, 0x6f, 0xd7, //0x00000523 movdqa %xmm7, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00000527 pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x0000052c pmovmskb %xmm2, %ecx - 0x66, 0x0f, 0x6f, 0xd6, //0x00000530 movdqa %xmm6, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00000534 pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xda, //0x00000539 pmovmskb %xmm2, %ebx - 0x48, 0xc1, 0xe3, 0x30, //0x0000053d shlq $48, %rbx - 0x48, 0xc1, 0xe1, 0x20, //0x00000541 shlq $32, %rcx - 0x48, 0x09, 0xd9, //0x00000545 orq %rbx, %rcx - 0x48, 0xc1, 0xe0, 0x10, //0x00000548 shlq $16, %rax - 0x48, 0x09, 0xc8, //0x0000054c orq %rcx, %rax - 0x48, 0x09, 0xc2, //0x0000054f orq %rax, %rdx - 0x48, 0x89, 0xd0, //0x00000552 movq %rdx, %rax - 0x4c, 0x09, 0xf8, //0x00000555 orq %r15, %rax - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00000558 jne LBB0_63 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000055e movq $-1, %rdx - 0x31, 0xc0, //0x00000565 xorl %eax, %eax - 0x48, 0x89, 0x45, 0xc8, //0x00000567 movq %rax, $-56(%rbp) - 0xe9, 0x3e, 0x00, 0x00, 0x00, //0x0000056b jmp LBB0_64 - //0x00000570 LBB0_63 - 0x4c, 0x89, 0xf8, //0x00000570 movq %r15, %rax - 0x48, 0xf7, 0xd0, //0x00000573 notq %rax - 0x48, 0x21, 0xd0, //0x00000576 andq %rdx, %rax - 0x4c, 0x8d, 0x04, 0x00, //0x00000579 leaq (%rax,%rax), %r8 - 0x4d, 0x09, 0xf8, //0x0000057d orq %r15, %r8 - 0x4c, 0x89, 0xc1, //0x00000580 movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00000583 notq %rcx - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000586 movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xda, //0x00000590 andq %rbx, %rdx - 0x48, 0x21, 0xca, //0x00000593 andq %rcx, %rdx - 0x31, 0xc9, //0x00000596 xorl %ecx, %ecx - 0x48, 0x01, 0xc2, //0x00000598 addq %rax, %rdx - 0x0f, 0x92, 0xc1, //0x0000059b setb %cl - 0x48, 0x89, 0x4d, 0xc8, //0x0000059e movq %rcx, $-56(%rbp) - 0x48, 0x01, 0xd2, //0x000005a2 addq %rdx, %rdx - 0x4c, 0x31, 0xd2, //0x000005a5 xorq %r10, %rdx - 0x4c, 0x21, 0xc2, //0x000005a8 andq %r8, %rdx - 0x48, 0xf7, 0xd2, //0x000005ab notq %rdx - //0x000005ae LBB0_64 - 0x66, 0x0f, 0x6f, 0xd6, //0x000005ae movdqa %xmm6, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x000005b2 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xc2, //0x000005b6 pmovmskb %xmm2, %eax - 0x48, 0xc1, 0xe0, 0x30, //0x000005ba shlq $48, %rax - 0x66, 0x0f, 0x6f, 0xd7, //0x000005be movdqa %xmm7, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x000005c2 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x000005c6 pmovmskb %xmm2, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x000005ca shlq $32, %rcx - 0x48, 0x09, 0xc1, //0x000005ce orq %rax, %rcx - 0x66, 0x0f, 0x6f, 0xd5, //0x000005d1 movdqa %xmm5, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x000005d5 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xc2, //0x000005d9 pmovmskb %xmm2, %eax - 0x48, 0xc1, 0xe0, 0x10, //0x000005dd shlq $16, %rax - 0x48, 0x09, 0xc8, //0x000005e1 orq %rcx, %rax - 0x66, 0x0f, 0x6f, 0xd0, //0x000005e4 movdqa %xmm0, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x000005e8 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x000005ec pmovmskb %xmm2, %ecx - 0x48, 0x09, 0xc1, //0x000005f0 orq %rax, %rcx - 0x48, 0x21, 0xd1, //0x000005f3 andq %rdx, %rcx - 0x66, 0x48, 0x0f, 0x6e, 0xd1, //0x000005f6 movq %rcx, %xmm2 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd1, 0x00, //0x000005fb pclmulqdq $0, %xmm9, %xmm2 - 0x66, 0x49, 0x0f, 0x7e, 0xd7, //0x00000602 movq %xmm2, %r15 - 0x4d, 0x31, 0xef, //0x00000607 xorq %r13, %r15 - 0x66, 0x0f, 0x6f, 0xd0, //0x0000060a movdqa %xmm0, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x0000060e pcmpeqb %xmm3, %xmm2 - 0x66, 0x44, 0x0f, 0xd7, 0xc2, //0x00000612 pmovmskb %xmm2, %r8d - 0x66, 0x0f, 0x6f, 0xd5, //0x00000617 movdqa %xmm5, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x0000061b pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xc2, //0x0000061f pmovmskb %xmm2, %eax - 0x66, 0x0f, 0x6f, 0xd7, //0x00000623 movdqa %xmm7, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00000627 pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x0000062b pmovmskb %xmm2, %ecx - 0x66, 0x0f, 0x6f, 0xd6, //0x0000062f movdqa %xmm6, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00000633 pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xda, //0x00000637 pmovmskb %xmm2, %ebx - 0x48, 0xc1, 0xe3, 0x30, //0x0000063b shlq $48, %rbx - 0x48, 0xc1, 0xe1, 0x20, //0x0000063f shlq $32, %rcx - 0x48, 0x09, 0xd9, //0x00000643 orq %rbx, %rcx - 0x48, 0xc1, 0xe0, 0x10, //0x00000646 shlq $16, %rax - 0x48, 0x09, 0xc8, //0x0000064a orq %rcx, %rax - 0x49, 0x09, 0xc0, //0x0000064d orq %rax, %r8 - 0x4c, 0x89, 0xf8, //0x00000650 movq %r15, %rax - 0x48, 0xf7, 0xd0, //0x00000653 notq %rax - 0x49, 0x21, 0xc0, //0x00000656 andq %rax, %r8 - 0x66, 0x0f, 0x74, 0xc4, //0x00000659 pcmpeqb %xmm4, %xmm0 - 0x66, 0x0f, 0xd7, 0xc8, //0x0000065d pmovmskb %xmm0, %ecx - 0x66, 0x0f, 0x74, 0xec, //0x00000661 pcmpeqb %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xdd, //0x00000665 pmovmskb %xmm5, %ebx - 0x66, 0x0f, 0x74, 0xfc, //0x00000669 pcmpeqb %xmm4, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x0000066d pmovmskb %xmm7, %r10d - 0x66, 0x0f, 0x74, 0xf4, //0x00000672 pcmpeqb %xmm4, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xee, //0x00000676 pmovmskb %xmm6, %r13d - 0x49, 0xc1, 0xe5, 0x30, //0x0000067b shlq $48, %r13 - 0x49, 0xc1, 0xe2, 0x20, //0x0000067f shlq $32, %r10 - 0x4d, 0x09, 0xea, //0x00000683 orq %r13, %r10 - 0x48, 0xc1, 0xe3, 0x10, //0x00000686 shlq $16, %rbx - 0x4c, 0x09, 0xd3, //0x0000068a orq %r10, %rbx - 0x48, 0x09, 0xd9, //0x0000068d orq %rbx, %rcx - 0x49, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000690 movabsq $6148914691236517205, %r10 - 0x49, 0xbd, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x0000069a movabsq $3689348814741910323, %r13 - 0x48, 0x21, 0xc1, //0x000006a4 andq %rax, %rcx - 0x0f, 0x84, 0xd7, 0xfd, 0xff, 0xff, //0x000006a7 je LBB0_59 - 0x90, 0x90, 0x90, //0x000006ad .p2align 4, 0x90 - //0x000006b0 LBB0_65 - 0x48, 0x8d, 0x51, 0xff, //0x000006b0 leaq $-1(%rcx), %rdx - 0x48, 0x89, 0xd3, //0x000006b4 movq %rdx, %rbx - 0x4c, 0x21, 0xc3, //0x000006b7 andq %r8, %rbx - 0x48, 0x89, 0xd8, //0x000006ba movq %rbx, %rax - 0x48, 0xd1, 0xe8, //0x000006bd shrq %rax - 0x4c, 0x21, 0xd0, //0x000006c0 andq %r10, %rax - 0x48, 0x29, 0xc3, //0x000006c3 subq %rax, %rbx - 0x48, 0x89, 0xd8, //0x000006c6 movq %rbx, %rax - 0x4c, 0x21, 0xe8, //0x000006c9 andq %r13, %rax - 0x48, 0xc1, 0xeb, 0x02, //0x000006cc shrq $2, %rbx - 0x4c, 0x21, 0xeb, //0x000006d0 andq %r13, %rbx - 0x48, 0x01, 0xc3, //0x000006d3 addq %rax, %rbx - 0x48, 0x89, 0xd8, //0x000006d6 movq %rbx, %rax - 0x48, 0xc1, 0xe8, 0x04, //0x000006d9 shrq $4, %rax - 0x48, 0x01, 0xd8, //0x000006dd addq %rbx, %rax - 0x48, 0xbb, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x000006e0 movabsq $1085102592571150095, %rbx - 0x48, 0x21, 0xd8, //0x000006ea andq %rbx, %rax - 0x48, 0xbb, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000006ed movabsq $72340172838076673, %rbx - 0x48, 0x0f, 0xaf, 0xc3, //0x000006f7 imulq %rbx, %rax - 0x48, 0xc1, 0xe8, 0x38, //0x000006fb shrq $56, %rax - 0x48, 0x03, 0x45, 0xc0, //0x000006ff addq $-64(%rbp), %rax - 0x4c, 0x39, 0xd8, //0x00000703 cmpq %r11, %rax - 0x0f, 0x86, 0x92, 0x05, 0x00, 0x00, //0x00000706 jbe LBB0_109 - 0x49, 0x83, 0xc3, 0x01, //0x0000070c addq $1, %r11 - 0x48, 0x21, 0xd1, //0x00000710 andq %rdx, %rcx - 0x0f, 0x85, 0x97, 0xff, 0xff, 0xff, //0x00000713 jne LBB0_65 - 0xe9, 0x66, 0xfd, 0xff, 0xff, //0x00000719 jmp LBB0_59 - //0x0000071e LBB0_67 - 0x48, 0x85, 0xc0, //0x0000071e testq %rax, %rax - 0x0f, 0x8e, 0x3b, 0x06, 0x00, 0x00, //0x00000721 jle LBB0_119 - 0x4c, 0x89, 0xf9, //0x00000727 movq %r15, %rcx - 0x44, 0x0f, 0x11, 0x45, 0xb0, //0x0000072a movups %xmm8, $-80(%rbp) - 0x44, 0x0f, 0x11, 0x45, 0xa0, //0x0000072f movups %xmm8, $-96(%rbp) - 0x44, 0x0f, 0x11, 0x45, 0x90, //0x00000734 movups %xmm8, $-112(%rbp) - 0x44, 0x0f, 0x11, 0x45, 0x80, //0x00000739 movups %xmm8, $-128(%rbp) - 0x44, 0x89, 0xc8, //0x0000073e movl %r9d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00000741 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00000746 cmpl $4033, %eax - 0x0f, 0x82, 0x31, 0x00, 0x00, 0x00, //0x0000074b jb LBB0_71 - 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x00000751 cmpq $32, $-48(%rbp) - 0x0f, 0x82, 0x38, 0x00, 0x00, 0x00, //0x00000756 jb LBB0_72 - 0x41, 0x0f, 0x10, 0x01, //0x0000075c movups (%r9), %xmm0 - 0x0f, 0x11, 0x45, 0x80, //0x00000760 movups %xmm0, $-128(%rbp) - 0x41, 0x0f, 0x10, 0x41, 0x10, //0x00000764 movups $16(%r9), %xmm0 - 0x0f, 0x11, 0x45, 0x90, //0x00000769 movups %xmm0, $-112(%rbp) - 0x49, 0x83, 0xc1, 0x20, //0x0000076d addq $32, %r9 - 0x48, 0x8b, 0x45, 0xd0, //0x00000771 movq $-48(%rbp), %rax - 0x48, 0x8d, 0x50, 0xe0, //0x00000775 leaq $-32(%rax), %rdx - 0x4c, 0x8d, 0x45, 0xa0, //0x00000779 leaq $-96(%rbp), %r8 - 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x0000077d jmp LBB0_73 - //0x00000782 LBB0_71 - 0x49, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000782 movabsq $6148914691236517205, %r10 - 0x49, 0x89, 0xcf, //0x0000078c movq %rcx, %r15 - 0xe9, 0x5e, 0xfd, 0xff, 0xff, //0x0000078f jmp LBB0_61 - //0x00000794 LBB0_72 - 0x4c, 0x8d, 0x45, 0x80, //0x00000794 leaq $-128(%rbp), %r8 - 0x48, 0x8b, 0x55, 0xd0, //0x00000798 movq $-48(%rbp), %rdx - //0x0000079c LBB0_73 - 0x48, 0x83, 0xfa, 0x10, //0x0000079c cmpq $16, %rdx - 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x000007a0 jb LBB0_74 - 0x41, 0x0f, 0x10, 0x01, //0x000007a6 movups (%r9), %xmm0 - 0x41, 0x0f, 0x11, 0x00, //0x000007aa movups %xmm0, (%r8) - 0x49, 0x83, 0xc1, 0x10, //0x000007ae addq $16, %r9 - 0x49, 0x83, 0xc0, 0x10, //0x000007b2 addq $16, %r8 - 0x48, 0x83, 0xc2, 0xf0, //0x000007b6 addq $-16, %rdx - 0x48, 0x83, 0xfa, 0x08, //0x000007ba cmpq $8, %rdx - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x000007be jae LBB0_81 - //0x000007c4 LBB0_75 - 0x48, 0x83, 0xfa, 0x04, //0x000007c4 cmpq $4, %rdx - 0x0f, 0x8c, 0x47, 0x00, 0x00, 0x00, //0x000007c8 jl LBB0_76 - //0x000007ce LBB0_82 - 0x41, 0x8b, 0x01, //0x000007ce movl (%r9), %eax - 0x41, 0x89, 0x00, //0x000007d1 movl %eax, (%r8) - 0x49, 0x83, 0xc1, 0x04, //0x000007d4 addq $4, %r9 - 0x49, 0x83, 0xc0, 0x04, //0x000007d8 addq $4, %r8 - 0x48, 0x83, 0xc2, 0xfc, //0x000007dc addq $-4, %rdx - 0x48, 0x83, 0xfa, 0x02, //0x000007e0 cmpq $2, %rdx - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x000007e4 jae LBB0_77 - 0xe9, 0x44, 0x00, 0x00, 0x00, //0x000007ea jmp LBB0_78 - //0x000007ef LBB0_74 - 0x48, 0x83, 0xfa, 0x08, //0x000007ef cmpq $8, %rdx - 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x000007f3 jb LBB0_75 - //0x000007f9 LBB0_81 - 0x49, 0x8b, 0x01, //0x000007f9 movq (%r9), %rax - 0x49, 0x89, 0x00, //0x000007fc movq %rax, (%r8) - 0x49, 0x83, 0xc1, 0x08, //0x000007ff addq $8, %r9 - 0x49, 0x83, 0xc0, 0x08, //0x00000803 addq $8, %r8 - 0x48, 0x83, 0xc2, 0xf8, //0x00000807 addq $-8, %rdx - 0x48, 0x83, 0xfa, 0x04, //0x0000080b cmpq $4, %rdx - 0x0f, 0x8d, 0xb9, 0xff, 0xff, 0xff, //0x0000080f jge LBB0_82 - //0x00000815 LBB0_76 - 0x48, 0x83, 0xfa, 0x02, //0x00000815 cmpq $2, %rdx - 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00000819 jb LBB0_78 - //0x0000081f LBB0_77 - 0x41, 0x0f, 0xb7, 0x01, //0x0000081f movzwl (%r9), %eax - 0x66, 0x41, 0x89, 0x00, //0x00000823 movw %ax, (%r8) - 0x49, 0x83, 0xc1, 0x02, //0x00000827 addq $2, %r9 - 0x49, 0x83, 0xc0, 0x02, //0x0000082b addq $2, %r8 - 0x48, 0x83, 0xc2, 0xfe, //0x0000082f addq $-2, %rdx - //0x00000833 LBB0_78 - 0x4c, 0x89, 0xc8, //0x00000833 movq %r9, %rax - 0x4c, 0x8d, 0x4d, 0x80, //0x00000836 leaq $-128(%rbp), %r9 - 0x48, 0x85, 0xd2, //0x0000083a testq %rdx, %rdx - 0x49, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000083d movabsq $6148914691236517205, %r10 - 0x49, 0x89, 0xcf, //0x00000847 movq %rcx, %r15 - 0x0f, 0x84, 0xa2, 0xfc, 0xff, 0xff, //0x0000084a je LBB0_61 - 0x8a, 0x00, //0x00000850 movb (%rax), %al - 0x41, 0x88, 0x00, //0x00000852 movb %al, (%r8) - 0x4c, 0x8d, 0x4d, 0x80, //0x00000855 leaq $-128(%rbp), %r9 - 0xe9, 0x94, 0xfc, 0xff, 0xff, //0x00000859 jmp LBB0_61 - //0x0000085e LBB0_83 - 0x49, 0x8d, 0x44, 0x24, 0x05, //0x0000085e leaq $5(%r12), %rax - 0x48, 0x3b, 0x47, 0x08, //0x00000863 cmpq $8(%rdi), %rax - 0x0f, 0x86, 0x62, 0xfa, 0xff, 0xff, //0x00000867 jbe LBB0_42 - 0xe9, 0x63, 0xfa, 0xff, 0xff, //0x0000086d jmp LBB0_44 - //0x00000872 LBB0_84 - 0x49, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000872 movabsq $6148914691236517205, %r10 - 0x48, 0x8b, 0x47, 0x08, //0x0000087c movq $8(%rdi), %rax - 0x48, 0x29, 0xd0, //0x00000880 subq %rdx, %rax - 0x49, 0x01, 0xd1, //0x00000883 addq %rdx, %r9 - 0x45, 0x31, 0xed, //0x00000886 xorl %r13d, %r13d - 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0xae, 0xf7, 0xff, 0xff, //0x00000889 movdqu $-2130(%rip), %xmm10 /* LCPI0_4+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0x96, 0xf7, 0xff, 0xff, //0x00000892 movdqu $-2154(%rip), %xmm1 /* LCPI0_3+0(%rip) */ - 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x0000089a pcmpeqd %xmm9, %xmm9 - 0xf3, 0x0f, 0x6f, 0x1d, 0xa9, 0xf7, 0xff, 0xff, //0x0000089f movdqu $-2135(%rip), %xmm3 /* LCPI0_5+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x25, 0xb1, 0xf7, 0xff, 0xff, //0x000008a7 movdqu $-2127(%rip), %xmm4 /* LCPI0_6+0(%rip) */ - 0x45, 0x0f, 0x57, 0xc0, //0x000008af xorps %xmm8, %xmm8 - 0x45, 0x31, 0xff, //0x000008b3 xorl %r15d, %r15d - 0x31, 0xc9, //0x000008b6 xorl %ecx, %ecx - 0x48, 0x89, 0x4d, 0xc0, //0x000008b8 movq %rcx, $-64(%rbp) - 0x45, 0x31, 0xdb, //0x000008bc xorl %r11d, %r11d - 0xe9, 0x60, 0x00, 0x00, 0x00, //0x000008bf jmp LBB0_86 - //0x000008c4 LBB0_85 - 0x49, 0xc1, 0xff, 0x3f, //0x000008c4 sarq $63, %r15 - 0x4c, 0x89, 0xc0, //0x000008c8 movq %r8, %rax - 0x48, 0xd1, 0xe8, //0x000008cb shrq %rax - 0x4c, 0x21, 0xd0, //0x000008ce andq %r10, %rax - 0x49, 0x29, 0xc0, //0x000008d1 subq %rax, %r8 - 0x4c, 0x89, 0xc0, //0x000008d4 movq %r8, %rax - 0x4c, 0x21, 0xe8, //0x000008d7 andq %r13, %rax - 0x49, 0xc1, 0xe8, 0x02, //0x000008da shrq $2, %r8 - 0x4d, 0x21, 0xe8, //0x000008de andq %r13, %r8 - 0x49, 0x01, 0xc0, //0x000008e1 addq %rax, %r8 - 0x4c, 0x89, 0xc0, //0x000008e4 movq %r8, %rax - 0x48, 0xc1, 0xe8, 0x04, //0x000008e7 shrq $4, %rax - 0x4c, 0x01, 0xc0, //0x000008eb addq %r8, %rax - 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x000008ee movabsq $1085102592571150095, %rcx - 0x48, 0x21, 0xc8, //0x000008f8 andq %rcx, %rax - 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000008fb movabsq $72340172838076673, %rcx - 0x48, 0x0f, 0xaf, 0xc1, //0x00000905 imulq %rcx, %rax - 0x48, 0xc1, 0xe8, 0x38, //0x00000909 shrq $56, %rax - 0x48, 0x01, 0x45, 0xc0, //0x0000090d addq %rax, $-64(%rbp) - 0x49, 0x83, 0xc1, 0x40, //0x00000911 addq $64, %r9 - 0x48, 0x8b, 0x45, 0xd0, //0x00000915 movq $-48(%rbp), %rax - 0x48, 0x83, 0xc0, 0xc0, //0x00000919 addq $-64, %rax - 0x4d, 0x89, 0xfd, //0x0000091d movq %r15, %r13 - 0x4c, 0x8b, 0x7d, 0xc8, //0x00000920 movq $-56(%rbp), %r15 - //0x00000924 LBB0_86 - 0x48, 0x83, 0xf8, 0x40, //0x00000924 cmpq $64, %rax - 0x48, 0x89, 0x45, 0xd0, //0x00000928 movq %rax, $-48(%rbp) - 0x0f, 0x8c, 0x2c, 0x02, 0x00, 0x00, //0x0000092c jl LBB0_93 - //0x00000932 LBB0_87 - 0xf3, 0x41, 0x0f, 0x6f, 0x01, //0x00000932 movdqu (%r9), %xmm0 - 0xf3, 0x41, 0x0f, 0x6f, 0x69, 0x10, //0x00000937 movdqu $16(%r9), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x79, 0x20, //0x0000093d movdqu $32(%r9), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x71, 0x30, //0x00000943 movdqu $48(%r9), %xmm6 - 0x66, 0x0f, 0x6f, 0xd0, //0x00000949 movdqa %xmm0, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x0000094d pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xd2, //0x00000952 pmovmskb %xmm2, %edx - 0x66, 0x0f, 0x6f, 0xd5, //0x00000956 movdqa %xmm5, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x0000095a pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xc2, //0x0000095f pmovmskb %xmm2, %eax - 0x66, 0x0f, 0x6f, 0xd7, //0x00000963 movdqa %xmm7, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00000967 pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x0000096c pmovmskb %xmm2, %ecx - 0x66, 0x0f, 0x6f, 0xd6, //0x00000970 movdqa %xmm6, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00000974 pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xda, //0x00000979 pmovmskb %xmm2, %ebx - 0x48, 0xc1, 0xe3, 0x30, //0x0000097d shlq $48, %rbx - 0x48, 0xc1, 0xe1, 0x20, //0x00000981 shlq $32, %rcx - 0x48, 0x09, 0xd9, //0x00000985 orq %rbx, %rcx - 0x48, 0xc1, 0xe0, 0x10, //0x00000988 shlq $16, %rax - 0x48, 0x09, 0xc8, //0x0000098c orq %rcx, %rax - 0x48, 0x09, 0xc2, //0x0000098f orq %rax, %rdx - 0x48, 0x89, 0xd0, //0x00000992 movq %rdx, %rax - 0x4c, 0x09, 0xf8, //0x00000995 orq %r15, %rax - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00000998 jne LBB0_89 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000099e movq $-1, %rdx - 0x31, 0xc0, //0x000009a5 xorl %eax, %eax - 0x48, 0x89, 0x45, 0xc8, //0x000009a7 movq %rax, $-56(%rbp) - 0xe9, 0x3e, 0x00, 0x00, 0x00, //0x000009ab jmp LBB0_90 - //0x000009b0 LBB0_89 - 0x4c, 0x89, 0xf8, //0x000009b0 movq %r15, %rax - 0x48, 0xf7, 0xd0, //0x000009b3 notq %rax - 0x48, 0x21, 0xd0, //0x000009b6 andq %rdx, %rax - 0x4c, 0x8d, 0x04, 0x00, //0x000009b9 leaq (%rax,%rax), %r8 - 0x4d, 0x09, 0xf8, //0x000009bd orq %r15, %r8 - 0x4c, 0x89, 0xc1, //0x000009c0 movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x000009c3 notq %rcx - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000009c6 movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xda, //0x000009d0 andq %rbx, %rdx - 0x48, 0x21, 0xca, //0x000009d3 andq %rcx, %rdx - 0x31, 0xc9, //0x000009d6 xorl %ecx, %ecx - 0x48, 0x01, 0xc2, //0x000009d8 addq %rax, %rdx - 0x0f, 0x92, 0xc1, //0x000009db setb %cl - 0x48, 0x89, 0x4d, 0xc8, //0x000009de movq %rcx, $-56(%rbp) - 0x48, 0x01, 0xd2, //0x000009e2 addq %rdx, %rdx - 0x4c, 0x31, 0xd2, //0x000009e5 xorq %r10, %rdx - 0x4c, 0x21, 0xc2, //0x000009e8 andq %r8, %rdx - 0x48, 0xf7, 0xd2, //0x000009eb notq %rdx - //0x000009ee LBB0_90 - 0x66, 0x0f, 0x6f, 0xd6, //0x000009ee movdqa %xmm6, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x000009f2 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xc2, //0x000009f6 pmovmskb %xmm2, %eax - 0x48, 0xc1, 0xe0, 0x30, //0x000009fa shlq $48, %rax - 0x66, 0x0f, 0x6f, 0xd7, //0x000009fe movdqa %xmm7, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x00000a02 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x00000a06 pmovmskb %xmm2, %ecx - 0x48, 0xc1, 0xe1, 0x20, //0x00000a0a shlq $32, %rcx - 0x48, 0x09, 0xc1, //0x00000a0e orq %rax, %rcx - 0x66, 0x0f, 0x6f, 0xd5, //0x00000a11 movdqa %xmm5, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x00000a15 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xc2, //0x00000a19 pmovmskb %xmm2, %eax - 0x48, 0xc1, 0xe0, 0x10, //0x00000a1d shlq $16, %rax - 0x48, 0x09, 0xc8, //0x00000a21 orq %rcx, %rax - 0x66, 0x0f, 0x6f, 0xd0, //0x00000a24 movdqa %xmm0, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x00000a28 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x00000a2c pmovmskb %xmm2, %ecx - 0x48, 0x09, 0xc1, //0x00000a30 orq %rax, %rcx - 0x48, 0x21, 0xd1, //0x00000a33 andq %rdx, %rcx - 0x66, 0x48, 0x0f, 0x6e, 0xd1, //0x00000a36 movq %rcx, %xmm2 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd1, 0x00, //0x00000a3b pclmulqdq $0, %xmm9, %xmm2 - 0x66, 0x49, 0x0f, 0x7e, 0xd7, //0x00000a42 movq %xmm2, %r15 - 0x4d, 0x31, 0xef, //0x00000a47 xorq %r13, %r15 - 0x66, 0x0f, 0x6f, 0xd0, //0x00000a4a movdqa %xmm0, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00000a4e pcmpeqb %xmm3, %xmm2 - 0x66, 0x44, 0x0f, 0xd7, 0xc2, //0x00000a52 pmovmskb %xmm2, %r8d - 0x66, 0x0f, 0x6f, 0xd5, //0x00000a57 movdqa %xmm5, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00000a5b pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xc2, //0x00000a5f pmovmskb %xmm2, %eax - 0x66, 0x0f, 0x6f, 0xd7, //0x00000a63 movdqa %xmm7, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00000a67 pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x00000a6b pmovmskb %xmm2, %ecx - 0x66, 0x0f, 0x6f, 0xd6, //0x00000a6f movdqa %xmm6, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00000a73 pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xda, //0x00000a77 pmovmskb %xmm2, %ebx - 0x48, 0xc1, 0xe3, 0x30, //0x00000a7b shlq $48, %rbx - 0x48, 0xc1, 0xe1, 0x20, //0x00000a7f shlq $32, %rcx - 0x48, 0x09, 0xd9, //0x00000a83 orq %rbx, %rcx - 0x48, 0xc1, 0xe0, 0x10, //0x00000a86 shlq $16, %rax - 0x48, 0x09, 0xc8, //0x00000a8a orq %rcx, %rax - 0x49, 0x09, 0xc0, //0x00000a8d orq %rax, %r8 - 0x4c, 0x89, 0xf8, //0x00000a90 movq %r15, %rax - 0x48, 0xf7, 0xd0, //0x00000a93 notq %rax - 0x49, 0x21, 0xc0, //0x00000a96 andq %rax, %r8 - 0x66, 0x0f, 0x74, 0xc4, //0x00000a99 pcmpeqb %xmm4, %xmm0 - 0x66, 0x0f, 0xd7, 0xc8, //0x00000a9d pmovmskb %xmm0, %ecx - 0x66, 0x0f, 0x74, 0xec, //0x00000aa1 pcmpeqb %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xdd, //0x00000aa5 pmovmskb %xmm5, %ebx - 0x66, 0x0f, 0x74, 0xfc, //0x00000aa9 pcmpeqb %xmm4, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00000aad pmovmskb %xmm7, %r10d - 0x66, 0x0f, 0x74, 0xf4, //0x00000ab2 pcmpeqb %xmm4, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xee, //0x00000ab6 pmovmskb %xmm6, %r13d - 0x49, 0xc1, 0xe5, 0x30, //0x00000abb shlq $48, %r13 - 0x49, 0xc1, 0xe2, 0x20, //0x00000abf shlq $32, %r10 - 0x4d, 0x09, 0xea, //0x00000ac3 orq %r13, %r10 - 0x48, 0xc1, 0xe3, 0x10, //0x00000ac6 shlq $16, %rbx - 0x4c, 0x09, 0xd3, //0x00000aca orq %r10, %rbx - 0x48, 0x09, 0xd9, //0x00000acd orq %rbx, %rcx - 0x49, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000ad0 movabsq $6148914691236517205, %r10 - 0x49, 0xbd, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00000ada movabsq $3689348814741910323, %r13 - 0x48, 0x21, 0xc1, //0x00000ae4 andq %rax, %rcx - 0x0f, 0x84, 0xd7, 0xfd, 0xff, 0xff, //0x00000ae7 je LBB0_85 - 0x90, 0x90, 0x90, //0x00000aed .p2align 4, 0x90 - //0x00000af0 LBB0_91 - 0x48, 0x8d, 0x51, 0xff, //0x00000af0 leaq $-1(%rcx), %rdx - 0x48, 0x89, 0xd3, //0x00000af4 movq %rdx, %rbx - 0x4c, 0x21, 0xc3, //0x00000af7 andq %r8, %rbx - 0x48, 0x89, 0xd8, //0x00000afa movq %rbx, %rax - 0x48, 0xd1, 0xe8, //0x00000afd shrq %rax - 0x4c, 0x21, 0xd0, //0x00000b00 andq %r10, %rax - 0x48, 0x29, 0xc3, //0x00000b03 subq %rax, %rbx - 0x48, 0x89, 0xd8, //0x00000b06 movq %rbx, %rax - 0x4c, 0x21, 0xe8, //0x00000b09 andq %r13, %rax - 0x48, 0xc1, 0xeb, 0x02, //0x00000b0c shrq $2, %rbx - 0x4c, 0x21, 0xeb, //0x00000b10 andq %r13, %rbx - 0x48, 0x01, 0xc3, //0x00000b13 addq %rax, %rbx - 0x48, 0x89, 0xd8, //0x00000b16 movq %rbx, %rax - 0x48, 0xc1, 0xe8, 0x04, //0x00000b19 shrq $4, %rax - 0x48, 0x01, 0xd8, //0x00000b1d addq %rbx, %rax - 0x48, 0xbb, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00000b20 movabsq $1085102592571150095, %rbx - 0x48, 0x21, 0xd8, //0x00000b2a andq %rbx, %rax - 0x48, 0xbb, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00000b2d movabsq $72340172838076673, %rbx - 0x48, 0x0f, 0xaf, 0xc3, //0x00000b37 imulq %rbx, %rax - 0x48, 0xc1, 0xe8, 0x38, //0x00000b3b shrq $56, %rax - 0x48, 0x03, 0x45, 0xc0, //0x00000b3f addq $-64(%rbp), %rax - 0x4c, 0x39, 0xd8, //0x00000b43 cmpq %r11, %rax - 0x0f, 0x86, 0x52, 0x01, 0x00, 0x00, //0x00000b46 jbe LBB0_109 - 0x49, 0x83, 0xc3, 0x01, //0x00000b4c addq $1, %r11 - 0x48, 0x21, 0xd1, //0x00000b50 andq %rdx, %rcx - 0x0f, 0x85, 0x97, 0xff, 0xff, 0xff, //0x00000b53 jne LBB0_91 - 0xe9, 0x66, 0xfd, 0xff, 0xff, //0x00000b59 jmp LBB0_85 - //0x00000b5e LBB0_93 - 0x48, 0x85, 0xc0, //0x00000b5e testq %rax, %rax - 0x0f, 0x8e, 0xfb, 0x01, 0x00, 0x00, //0x00000b61 jle LBB0_119 - 0x4c, 0x89, 0xf9, //0x00000b67 movq %r15, %rcx - 0x44, 0x0f, 0x11, 0x45, 0xb0, //0x00000b6a movups %xmm8, $-80(%rbp) - 0x44, 0x0f, 0x11, 0x45, 0xa0, //0x00000b6f movups %xmm8, $-96(%rbp) - 0x44, 0x0f, 0x11, 0x45, 0x90, //0x00000b74 movups %xmm8, $-112(%rbp) - 0x44, 0x0f, 0x11, 0x45, 0x80, //0x00000b79 movups %xmm8, $-128(%rbp) - 0x44, 0x89, 0xc8, //0x00000b7e movl %r9d, %eax - 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00000b81 andl $4095, %eax - 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00000b86 cmpl $4033, %eax - 0x0f, 0x82, 0x31, 0x00, 0x00, 0x00, //0x00000b8b jb LBB0_97 - 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x00000b91 cmpq $32, $-48(%rbp) - 0x0f, 0x82, 0x38, 0x00, 0x00, 0x00, //0x00000b96 jb LBB0_98 - 0x41, 0x0f, 0x10, 0x01, //0x00000b9c movups (%r9), %xmm0 - 0x0f, 0x11, 0x45, 0x80, //0x00000ba0 movups %xmm0, $-128(%rbp) - 0x41, 0x0f, 0x10, 0x41, 0x10, //0x00000ba4 movups $16(%r9), %xmm0 - 0x0f, 0x11, 0x45, 0x90, //0x00000ba9 movups %xmm0, $-112(%rbp) - 0x49, 0x83, 0xc1, 0x20, //0x00000bad addq $32, %r9 - 0x48, 0x8b, 0x45, 0xd0, //0x00000bb1 movq $-48(%rbp), %rax - 0x48, 0x8d, 0x50, 0xe0, //0x00000bb5 leaq $-32(%rax), %rdx - 0x4c, 0x8d, 0x45, 0xa0, //0x00000bb9 leaq $-96(%rbp), %r8 - 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x00000bbd jmp LBB0_99 - //0x00000bc2 LBB0_97 - 0x49, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000bc2 movabsq $6148914691236517205, %r10 - 0x49, 0x89, 0xcf, //0x00000bcc movq %rcx, %r15 - 0xe9, 0x5e, 0xfd, 0xff, 0xff, //0x00000bcf jmp LBB0_87 - //0x00000bd4 LBB0_98 - 0x4c, 0x8d, 0x45, 0x80, //0x00000bd4 leaq $-128(%rbp), %r8 - 0x48, 0x8b, 0x55, 0xd0, //0x00000bd8 movq $-48(%rbp), %rdx - //0x00000bdc LBB0_99 - 0x48, 0x83, 0xfa, 0x10, //0x00000bdc cmpq $16, %rdx - 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00000be0 jb LBB0_100 - 0x41, 0x0f, 0x10, 0x01, //0x00000be6 movups (%r9), %xmm0 - 0x41, 0x0f, 0x11, 0x00, //0x00000bea movups %xmm0, (%r8) - 0x49, 0x83, 0xc1, 0x10, //0x00000bee addq $16, %r9 - 0x49, 0x83, 0xc0, 0x10, //0x00000bf2 addq $16, %r8 - 0x48, 0x83, 0xc2, 0xf0, //0x00000bf6 addq $-16, %rdx - 0x48, 0x83, 0xfa, 0x08, //0x00000bfa cmpq $8, %rdx - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00000bfe jae LBB0_107 - //0x00000c04 LBB0_101 - 0x48, 0x83, 0xfa, 0x04, //0x00000c04 cmpq $4, %rdx - 0x0f, 0x8c, 0x47, 0x00, 0x00, 0x00, //0x00000c08 jl LBB0_102 - //0x00000c0e LBB0_108 - 0x41, 0x8b, 0x01, //0x00000c0e movl (%r9), %eax - 0x41, 0x89, 0x00, //0x00000c11 movl %eax, (%r8) - 0x49, 0x83, 0xc1, 0x04, //0x00000c14 addq $4, %r9 - 0x49, 0x83, 0xc0, 0x04, //0x00000c18 addq $4, %r8 - 0x48, 0x83, 0xc2, 0xfc, //0x00000c1c addq $-4, %rdx - 0x48, 0x83, 0xfa, 0x02, //0x00000c20 cmpq $2, %rdx - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00000c24 jae LBB0_103 - 0xe9, 0x44, 0x00, 0x00, 0x00, //0x00000c2a jmp LBB0_104 - //0x00000c2f LBB0_100 - 0x48, 0x83, 0xfa, 0x08, //0x00000c2f cmpq $8, %rdx - 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x00000c33 jb LBB0_101 - //0x00000c39 LBB0_107 - 0x49, 0x8b, 0x01, //0x00000c39 movq (%r9), %rax - 0x49, 0x89, 0x00, //0x00000c3c movq %rax, (%r8) - 0x49, 0x83, 0xc1, 0x08, //0x00000c3f addq $8, %r9 - 0x49, 0x83, 0xc0, 0x08, //0x00000c43 addq $8, %r8 - 0x48, 0x83, 0xc2, 0xf8, //0x00000c47 addq $-8, %rdx - 0x48, 0x83, 0xfa, 0x04, //0x00000c4b cmpq $4, %rdx - 0x0f, 0x8d, 0xb9, 0xff, 0xff, 0xff, //0x00000c4f jge LBB0_108 - //0x00000c55 LBB0_102 - 0x48, 0x83, 0xfa, 0x02, //0x00000c55 cmpq $2, %rdx - 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00000c59 jb LBB0_104 - //0x00000c5f LBB0_103 - 0x41, 0x0f, 0xb7, 0x01, //0x00000c5f movzwl (%r9), %eax - 0x66, 0x41, 0x89, 0x00, //0x00000c63 movw %ax, (%r8) - 0x49, 0x83, 0xc1, 0x02, //0x00000c67 addq $2, %r9 - 0x49, 0x83, 0xc0, 0x02, //0x00000c6b addq $2, %r8 - 0x48, 0x83, 0xc2, 0xfe, //0x00000c6f addq $-2, %rdx - //0x00000c73 LBB0_104 - 0x4c, 0x89, 0xc8, //0x00000c73 movq %r9, %rax - 0x4c, 0x8d, 0x4d, 0x80, //0x00000c76 leaq $-128(%rbp), %r9 - 0x48, 0x85, 0xd2, //0x00000c7a testq %rdx, %rdx - 0x49, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000c7d movabsq $6148914691236517205, %r10 - 0x49, 0x89, 0xcf, //0x00000c87 movq %rcx, %r15 - 0x0f, 0x84, 0xa2, 0xfc, 0xff, 0xff, //0x00000c8a je LBB0_87 - 0x8a, 0x00, //0x00000c90 movb (%rax), %al - 0x41, 0x88, 0x00, //0x00000c92 movb %al, (%r8) - 0x4c, 0x8d, 0x4d, 0x80, //0x00000c95 leaq $-128(%rbp), %r9 - 0xe9, 0x94, 0xfc, 0xff, 0xff, //0x00000c99 jmp LBB0_87 - //0x00000c9e LBB0_109 - 0x48, 0x8b, 0x47, 0x08, //0x00000c9e movq $8(%rdi), %rax - 0x48, 0x0f, 0xbc, 0xc9, //0x00000ca2 bsfq %rcx, %rcx - 0x48, 0x2b, 0x4d, 0xd0, //0x00000ca6 subq $-48(%rbp), %rcx - 0x48, 0x01, 0xc8, //0x00000caa addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00000cad addq $1, %rax - 0x48, 0x89, 0x06, //0x00000cb1 movq %rax, (%rsi) - 0x48, 0x8b, 0x4f, 0x08, //0x00000cb4 movq $8(%rdi), %rcx - 0x48, 0x39, 0xc8, //0x00000cb8 cmpq %rcx, %rax - 0x48, 0x0f, 0x47, 0xc1, //0x00000cbb cmovaq %rcx, %rax - 0x48, 0x89, 0x06, //0x00000cbf movq %rax, (%rsi) - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000cc2 movq $-1, %rax - 0x4c, 0x0f, 0x47, 0xe0, //0x00000cc9 cmovaq %rax, %r12 - 0xe9, 0x00, 0xf6, 0xff, 0xff, //0x00000ccd jmp LBB0_43 - //0x00000cd2 LBB0_110 - 0x0f, 0xbc, 0xc0, //0x00000cd2 bsfl %eax, %eax - 0x4c, 0x01, 0xe0, //0x00000cd5 addq %r12, %rax - 0x4c, 0x01, 0xf8, //0x00000cd8 addq %r15, %rax - 0x48, 0x83, 0xc0, 0x02, //0x00000cdb addq $2, %rax - 0xe9, 0xeb, 0xf5, 0xff, 0xff, //0x00000cdf jmp LBB0_42 - //0x00000ce4 LBB0_111 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00000ce4 movq $-2, %rax - 0xb9, 0x02, 0x00, 0x00, 0x00, //0x00000ceb movl $2, %ecx - 0x48, 0x01, 0xca, //0x00000cf0 addq %rcx, %rdx - 0x49, 0x01, 0xc7, //0x00000cf3 addq %rax, %r15 - 0x0f, 0x8e, 0xd9, 0xf5, 0xff, 0xff, //0x00000cf6 jle LBB0_44 - //0x00000cfc LBB0_112 - 0x0f, 0xb6, 0x02, //0x00000cfc movzbl (%rdx), %eax - 0x3c, 0x5c, //0x00000cff cmpb $92, %al - 0x0f, 0x84, 0xdd, 0xff, 0xff, 0xff, //0x00000d01 je LBB0_111 - 0x3c, 0x22, //0x00000d07 cmpb $34, %al - 0x0f, 0x84, 0x2b, 0x00, 0x00, 0x00, //0x00000d09 je LBB0_116 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000d0f movq $-1, %rax - 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00000d16 movl $1, %ecx - 0x48, 0x01, 0xca, //0x00000d1b addq %rcx, %rdx - 0x49, 0x01, 0xc7, //0x00000d1e addq %rax, %r15 - 0x0f, 0x8f, 0xd5, 0xff, 0xff, 0xff, //0x00000d21 jg LBB0_112 - 0xe9, 0xa9, 0xf5, 0xff, 0xff, //0x00000d27 jmp LBB0_44 - //0x00000d2c LBB0_115 - 0x4c, 0x29, 0xca, //0x00000d2c subq %r9, %rdx - 0x48, 0x01, 0xc2, //0x00000d2f addq %rax, %rdx - 0x48, 0x89, 0x16, //0x00000d32 movq %rdx, (%rsi) - 0xe9, 0x98, 0xf5, 0xff, 0xff, //0x00000d35 jmp LBB0_43 - //0x00000d3a LBB0_116 - 0x4c, 0x29, 0xca, //0x00000d3a subq %r9, %rdx - 0x48, 0x83, 0xc2, 0x01, //0x00000d3d addq $1, %rdx - 0x48, 0x89, 0x16, //0x00000d41 movq %rdx, (%rsi) - 0xe9, 0x89, 0xf5, 0xff, 0xff, //0x00000d44 jmp LBB0_43 - //0x00000d49 LBB0_117 - 0x4c, 0x01, 0xca, //0x00000d49 addq %r9, %rdx - 0x48, 0x85, 0xc9, //0x00000d4c testq %rcx, %rcx - 0x0f, 0x85, 0x30, 0xf5, 0xff, 0xff, //0x00000d4f jne LBB0_34 - 0xe9, 0x60, 0xf5, 0xff, 0xff, //0x00000d55 jmp LBB0_40 - //0x00000d5a LBB0_118 - 0x4c, 0x01, 0xca, //0x00000d5a addq %r9, %rdx - 0xe9, 0xbb, 0xf6, 0xff, 0xff, //0x00000d5d jmp LBB0_56 - //0x00000d62 LBB0_119 - 0x48, 0x8b, 0x47, 0x08, //0x00000d62 movq $8(%rdi), %rax - 0x48, 0x89, 0x06, //0x00000d66 movq %rax, (%rsi) - 0xe9, 0x67, 0xf5, 0xff, 0xff, //0x00000d69 jmp LBB0_44 - //0x00000d6e LBB0_120 - 0x49, 0x8d, 0x40, 0xff, //0x00000d6e leaq $-1(%r8), %rax - 0x4c, 0x39, 0xf8, //0x00000d72 cmpq %r15, %rax - 0x0f, 0x84, 0x5a, 0xf5, 0xff, 0xff, //0x00000d75 je LBB0_44 - 0x4b, 0x8d, 0x14, 0x17, //0x00000d7b leaq (%r15,%r10), %rdx - 0x48, 0x83, 0xc2, 0x02, //0x00000d7f addq $2, %rdx - 0x4d, 0x29, 0xf8, //0x00000d83 subq %r15, %r8 - 0x49, 0x83, 0xc0, 0xfe, //0x00000d86 addq $-2, %r8 - 0x4d, 0x89, 0xc7, //0x00000d8a movq %r8, %r15 - 0xe9, 0x8b, 0xf6, 0xff, 0xff, //0x00000d8d jmp LBB0_56 - 0x90, 0x90, //0x00000d92 .p2align 2, 0x90 - // // .set L0_0_set_44, LBB0_44-LJTI0_0 - // // .set L0_0_set_46, LBB0_46-LJTI0_0 - // // .set L0_0_set_47, LBB0_47-LJTI0_0 + 0x48, 0x8d, 0x14, 0x0b, //0x00000285 leaq (%rbx,%rcx), %rdx + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00000289 movabsq $17596481021440, %rdi + //0x00000293 LBB0_35 + 0x0f, 0xb6, 0x03, //0x00000293 movzbl (%rbx), %eax + 0x48, 0x83, 0xf8, 0x2c, //0x00000296 cmpq $44, %rax + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x0000029a ja LBB0_37 + 0x48, 0x0f, 0xa3, 0xc7, //0x000002a0 btq %rax, %rdi + 0x0f, 0x82, 0x21, 0x00, 0x00, 0x00, //0x000002a4 jb LBB0_41 + //0x000002aa LBB0_37 + 0x3c, 0x5d, //0x000002aa cmpb $93, %al + 0x0f, 0x84, 0x19, 0x00, 0x00, 0x00, //0x000002ac je LBB0_41 + 0x3c, 0x7d, //0x000002b2 cmpb $125, %al + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x000002b4 je LBB0_41 + 0x48, 0x83, 0xc3, 0x01, //0x000002ba addq $1, %rbx + 0x48, 0x83, 0xc1, 0xff, //0x000002be addq $-1, %rcx + 0x0f, 0x85, 0xcb, 0xff, 0xff, 0xff, //0x000002c2 jne LBB0_35 + 0x48, 0x89, 0xd3, //0x000002c8 movq %rdx, %rbx + //0x000002cb LBB0_41 + 0x4c, 0x29, 0xf3, //0x000002cb subq %r14, %rbx + 0x48, 0x89, 0x1e, //0x000002ce movq %rbx, (%rsi) + 0xe9, 0x76, 0x0a, 0x00, 0x00, //0x000002d1 jmp LBB0_114 + //0x000002d6 LBB0_42 + 0x66, 0x0f, 0xbc, 0xc0, //0x000002d6 bsfw %ax, %ax + 0x0f, 0xb7, 0xc0, //0x000002da movzwl %ax, %eax + 0x4c, 0x01, 0xe0, //0x000002dd addq %r12, %rax + 0x48, 0x89, 0xc1, //0x000002e0 movq %rax, %rcx + 0x48, 0x29, 0xf9, //0x000002e3 subq %rdi, %rcx + 0x48, 0x8d, 0x79, 0x01, //0x000002e6 leaq $1(%rcx), %rdi + 0x48, 0x89, 0x3e, //0x000002ea movq %rdi, (%rsi) + 0x48, 0x85, 0xff, //0x000002ed testq %rdi, %rdi + 0x0f, 0x8e, 0x56, 0x0a, 0x00, 0x00, //0x000002f0 jle LBB0_114 + 0x48, 0x8d, 0x79, 0x02, //0x000002f6 leaq $2(%rcx), %rdi + 0x48, 0x01, 0xc2, //0x000002fa addq %rax, %rdx + 0x48, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000002fd movabsq $4294977024, %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000307 .p2align 4, 0x90 + //0x00000310 LBB0_44 + 0x0f, 0xb6, 0x02, //0x00000310 movzbl (%rdx), %eax + 0x48, 0x83, 0xf8, 0x20, //0x00000313 cmpq $32, %rax + 0x0f, 0x87, 0x2f, 0x0a, 0x00, 0x00, //0x00000317 ja LBB0_114 + 0x48, 0x0f, 0xa3, 0xc3, //0x0000031d btq %rax, %rbx + 0x0f, 0x83, 0x25, 0x0a, 0x00, 0x00, //0x00000321 jae LBB0_114 + 0x48, 0x89, 0x0e, //0x00000327 movq %rcx, (%rsi) + 0x48, 0x83, 0xc7, 0xff, //0x0000032a addq $-1, %rdi + 0x48, 0x83, 0xc1, 0xff, //0x0000032e addq $-1, %rcx + 0x48, 0x83, 0xc2, 0xff, //0x00000332 addq $-1, %rdx + 0x48, 0x83, 0xff, 0x01, //0x00000336 cmpq $1, %rdi + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x0000033a jg LBB0_44 + 0xe9, 0x07, 0x0a, 0x00, 0x00, //0x00000340 jmp LBB0_114 + //0x00000345 LBB0_47 + 0x49, 0x8d, 0x44, 0x24, 0x04, //0x00000345 leaq $4(%r12), %rax + 0x48, 0x3b, 0x47, 0x08, //0x0000034a cmpq $8(%rdi), %rax + 0x0f, 0x86, 0xf5, 0x09, 0x00, 0x00, //0x0000034e jbe LBB0_113 + 0xe9, 0xf6, 0x09, 0x00, 0x00, //0x00000354 jmp LBB0_115 + //0x00000359 LBB0_48 + 0x4c, 0x89, 0x26, //0x00000359 movq %r12, (%rsi) + 0x49, 0xc7, 0xc7, 0xfe, 0xff, 0xff, 0xff, //0x0000035c movq $-2, %r15 + 0xe9, 0xe7, 0x09, 0x00, 0x00, //0x00000363 jmp LBB0_115 + //0x00000368 LBB0_49 + 0x4c, 0x8b, 0x47, 0x08, //0x00000368 movq $8(%rdi), %r8 + 0x4d, 0x89, 0xc3, //0x0000036c movq %r8, %r11 + 0x49, 0x29, 0xdb, //0x0000036f subq %rbx, %r11 + 0x49, 0x83, 0xfb, 0x20, //0x00000372 cmpq $32, %r11 + 0x0f, 0x8c, 0x4d, 0x0a, 0x00, 0x00, //0x00000376 jl LBB0_122 + 0x4f, 0x8d, 0x0c, 0x26, //0x0000037c leaq (%r14,%r12), %r9 + 0x4d, 0x29, 0xe0, //0x00000380 subq %r12, %r8 + 0x41, 0xbd, 0x1f, 0x00, 0x00, 0x00, //0x00000383 movl $31, %r13d + 0x45, 0x31, 0xdb, //0x00000389 xorl %r11d, %r11d + 0xf3, 0x0f, 0x6f, 0x05, 0x9c, 0xfc, 0xff, 0xff, //0x0000038c movdqu $-868(%rip), %xmm0 /* LCPI0_3+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0xa4, 0xfc, 0xff, 0xff, //0x00000394 movdqu $-860(%rip), %xmm1 /* LCPI0_4+0(%rip) */ + 0x45, 0x31, 0xd2, //0x0000039c xorl %r10d, %r10d + 0x90, //0x0000039f .p2align 4, 0x90 + //0x000003a0 LBB0_51 + 0xf3, 0x43, 0x0f, 0x6f, 0x54, 0x19, 0x01, //0x000003a0 movdqu $1(%r9,%r11), %xmm2 + 0xf3, 0x43, 0x0f, 0x6f, 0x5c, 0x19, 0x11, //0x000003a7 movdqu $17(%r9,%r11), %xmm3 + 0x66, 0x0f, 0x6f, 0xe2, //0x000003ae movdqa %xmm2, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x000003b2 pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xd7, 0xc4, //0x000003b6 pmovmskb %xmm4, %eax + 0x66, 0x0f, 0x6f, 0xe3, //0x000003ba movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x000003be pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x000003c2 pmovmskb %xmm4, %ecx + 0x48, 0xc1, 0xe1, 0x10, //0x000003c6 shlq $16, %rcx + 0x48, 0x09, 0xc1, //0x000003ca orq %rax, %rcx + 0x66, 0x0f, 0x74, 0xd1, //0x000003cd pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x000003d1 pmovmskb %xmm2, %edx + 0x66, 0x0f, 0x74, 0xd9, //0x000003d5 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xc3, //0x000003d9 pmovmskb %xmm3, %eax + 0x48, 0xc1, 0xe0, 0x10, //0x000003dd shlq $16, %rax + 0x48, 0x09, 0xd0, //0x000003e1 orq %rdx, %rax + 0x48, 0x89, 0xc2, //0x000003e4 movq %rax, %rdx + 0x4c, 0x09, 0xd2, //0x000003e7 orq %r10, %rdx + 0x0f, 0x84, 0x40, 0x00, 0x00, 0x00, //0x000003ea je LBB0_53 + 0x44, 0x89, 0xd2, //0x000003f0 movl %r10d, %edx + 0xf7, 0xd2, //0x000003f3 notl %edx + 0x21, 0xc2, //0x000003f5 andl %eax, %edx + 0x8d, 0x1c, 0x12, //0x000003f7 leal (%rdx,%rdx), %ebx + 0x44, 0x09, 0xd3, //0x000003fa orl %r10d, %ebx + 0x89, 0xdf, //0x000003fd movl %ebx, %edi + 0xf7, 0xd7, //0x000003ff notl %edi + 0x21, 0xc7, //0x00000401 andl %eax, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000403 andl $-1431655766, %edi + 0x45, 0x31, 0xd2, //0x00000409 xorl %r10d, %r10d + 0x01, 0xd7, //0x0000040c addl %edx, %edi + 0x41, 0x0f, 0x92, 0xc2, //0x0000040e setb %r10b + 0x01, 0xff, //0x00000412 addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00000414 xorl $1431655765, %edi + 0x21, 0xdf, //0x0000041a andl %ebx, %edi + 0xf7, 0xd7, //0x0000041c notl %edi + 0x21, 0xf9, //0x0000041e andl %edi, %ecx + 0xe9, 0x0e, 0x00, 0x00, 0x00, //0x00000420 jmp LBB0_54 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000425 .p2align 4, 0x90 + //0x00000430 LBB0_53 + 0x45, 0x31, 0xd2, //0x00000430 xorl %r10d, %r10d + //0x00000433 LBB0_54 + 0x48, 0x85, 0xc9, //0x00000433 testq %rcx, %rcx + 0x0f, 0x85, 0x00, 0x09, 0x00, 0x00, //0x00000436 jne LBB0_112 + 0x49, 0x83, 0xc3, 0x20, //0x0000043c addq $32, %r11 + 0x4b, 0x8d, 0x04, 0x28, //0x00000440 leaq (%r8,%r13), %rax + 0x48, 0x83, 0xc0, 0xe0, //0x00000444 addq $-32, %rax + 0x49, 0x83, 0xc5, 0xe0, //0x00000448 addq $-32, %r13 + 0x48, 0x83, 0xf8, 0x3f, //0x0000044c cmpq $63, %rax + 0x0f, 0x8f, 0x4a, 0xff, 0xff, 0xff, //0x00000450 jg LBB0_51 + 0x4d, 0x85, 0xd2, //0x00000456 testq %r10, %r10 + 0x0f, 0x85, 0x7e, 0x09, 0x00, 0x00, //0x00000459 jne LBB0_124 + 0x4b, 0x8d, 0x1c, 0x0b, //0x0000045f leaq (%r11,%r9), %rbx + 0x48, 0x83, 0xc3, 0x01, //0x00000463 addq $1, %rbx + 0x49, 0xf7, 0xd3, //0x00000467 notq %r11 + 0x4d, 0x01, 0xc3, //0x0000046a addq %r8, %r11 + //0x0000046d LBB0_58 + 0x4d, 0x85, 0xdb, //0x0000046d testq %r11, %r11 + 0x0f, 0x8e, 0xd9, 0x08, 0x00, 0x00, //0x00000470 jle LBB0_115 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00000476 movq $-1, %r15 + 0xe9, 0xf7, 0x08, 0x00, 0x00, //0x0000047d jmp LBB0_117 + //0x00000482 LBB0_60 + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000482 movabsq $6148914691236517205, %r13 + 0x48, 0x8b, 0x47, 0x08, //0x0000048c movq $8(%rdi), %rax + 0x48, 0x29, 0xd8, //0x00000490 subq %rbx, %rax + 0x49, 0x01, 0xde, //0x00000493 addq %rbx, %r14 + 0x45, 0x31, 0xd2, //0x00000496 xorl %r10d, %r10d + 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0x9e, 0xfb, 0xff, 0xff, //0x00000499 movdqu $-1122(%rip), %xmm10 /* LCPI0_4+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0x86, 0xfb, 0xff, 0xff, //0x000004a2 movdqu $-1146(%rip), %xmm1 /* LCPI0_3+0(%rip) */ + 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x000004aa pcmpeqd %xmm9, %xmm9 + 0xf3, 0x0f, 0x6f, 0x1d, 0xb9, 0xfb, 0xff, 0xff, //0x000004af movdqu $-1095(%rip), %xmm3 /* LCPI0_7+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x25, 0x61, 0xfb, 0xff, 0xff, //0x000004b7 movdqu $-1183(%rip), %xmm4 /* LCPI0_2+0(%rip) */ + 0x45, 0x0f, 0x57, 0xc0, //0x000004bf xorps %xmm8, %xmm8 + 0x45, 0x31, 0xc9, //0x000004c3 xorl %r9d, %r9d + 0x31, 0xc9, //0x000004c6 xorl %ecx, %ecx + 0x48, 0x89, 0x4d, 0xc0, //0x000004c8 movq %rcx, $-64(%rbp) + 0x45, 0x31, 0xdb, //0x000004cc xorl %r11d, %r11d + 0xe9, 0x6a, 0x00, 0x00, 0x00, //0x000004cf jmp LBB0_62 + //0x000004d4 LBB0_61 + 0x49, 0xc1, 0xf9, 0x3f, //0x000004d4 sarq $63, %r9 + 0x4c, 0x89, 0xc0, //0x000004d8 movq %r8, %rax + 0x48, 0xd1, 0xe8, //0x000004db shrq %rax + 0x4c, 0x21, 0xe8, //0x000004de andq %r13, %rax + 0x49, 0x29, 0xc0, //0x000004e1 subq %rax, %r8 + 0x4c, 0x89, 0xc0, //0x000004e4 movq %r8, %rax + 0x48, 0xb9, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x000004e7 movabsq $3689348814741910323, %rcx + 0x48, 0x21, 0xc8, //0x000004f1 andq %rcx, %rax + 0x49, 0xc1, 0xe8, 0x02, //0x000004f4 shrq $2, %r8 + 0x49, 0x21, 0xc8, //0x000004f8 andq %rcx, %r8 + 0x49, 0x01, 0xc0, //0x000004fb addq %rax, %r8 + 0x4c, 0x89, 0xc0, //0x000004fe movq %r8, %rax + 0x48, 0xc1, 0xe8, 0x04, //0x00000501 shrq $4, %rax + 0x4c, 0x01, 0xc0, //0x00000505 addq %r8, %rax + 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00000508 movabsq $1085102592571150095, %rcx + 0x48, 0x21, 0xc8, //0x00000512 andq %rcx, %rax + 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00000515 movabsq $72340172838076673, %rcx + 0x48, 0x0f, 0xaf, 0xc1, //0x0000051f imulq %rcx, %rax + 0x48, 0xc1, 0xe8, 0x38, //0x00000523 shrq $56, %rax + 0x48, 0x01, 0x45, 0xc0, //0x00000527 addq %rax, $-64(%rbp) + 0x49, 0x83, 0xc6, 0x40, //0x0000052b addq $64, %r14 + 0x48, 0x8b, 0x45, 0xd0, //0x0000052f movq $-48(%rbp), %rax + 0x48, 0x83, 0xc0, 0xc0, //0x00000533 addq $-64, %rax + 0x4d, 0x89, 0xca, //0x00000537 movq %r9, %r10 + 0x4c, 0x8b, 0x4d, 0xc8, //0x0000053a movq $-56(%rbp), %r9 + //0x0000053e LBB0_62 + 0x48, 0x83, 0xf8, 0x40, //0x0000053e cmpq $64, %rax + 0x48, 0x89, 0x45, 0xd0, //0x00000542 movq %rax, $-48(%rbp) + 0x0f, 0x8c, 0x2c, 0x02, 0x00, 0x00, //0x00000546 jl LBB0_69 + //0x0000054c LBB0_63 + 0xf3, 0x41, 0x0f, 0x6f, 0x06, //0x0000054c movdqu (%r14), %xmm0 + 0xf3, 0x41, 0x0f, 0x6f, 0x6e, 0x10, //0x00000551 movdqu $16(%r14), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x7e, 0x20, //0x00000557 movdqu $32(%r14), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x76, 0x30, //0x0000055d movdqu $48(%r14), %xmm6 + 0x66, 0x0f, 0x6f, 0xd0, //0x00000563 movdqa %xmm0, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00000567 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xca, //0x0000056c pmovmskb %xmm2, %ecx + 0x66, 0x0f, 0x6f, 0xd5, //0x00000570 movdqa %xmm5, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00000574 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00000579 pmovmskb %xmm2, %edx + 0x66, 0x0f, 0x6f, 0xd7, //0x0000057d movdqa %xmm7, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00000581 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xc2, //0x00000586 pmovmskb %xmm2, %eax + 0x66, 0x0f, 0x6f, 0xd6, //0x0000058a movdqa %xmm6, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x0000058e pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x00000593 pmovmskb %xmm2, %ebx + 0x48, 0xc1, 0xe3, 0x30, //0x00000597 shlq $48, %rbx + 0x48, 0xc1, 0xe0, 0x20, //0x0000059b shlq $32, %rax + 0x48, 0x09, 0xd8, //0x0000059f orq %rbx, %rax + 0x48, 0xc1, 0xe2, 0x10, //0x000005a2 shlq $16, %rdx + 0x48, 0x09, 0xc2, //0x000005a6 orq %rax, %rdx + 0x48, 0x09, 0xd1, //0x000005a9 orq %rdx, %rcx + 0x48, 0x89, 0xc8, //0x000005ac movq %rcx, %rax + 0x4c, 0x09, 0xc8, //0x000005af orq %r9, %rax + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x000005b2 jne LBB0_65 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000005b8 movq $-1, %rcx + 0x31, 0xc0, //0x000005bf xorl %eax, %eax + 0x48, 0x89, 0x45, 0xc8, //0x000005c1 movq %rax, $-56(%rbp) + 0xe9, 0x3e, 0x00, 0x00, 0x00, //0x000005c5 jmp LBB0_66 + //0x000005ca LBB0_65 + 0x4c, 0x89, 0xc8, //0x000005ca movq %r9, %rax + 0x48, 0xf7, 0xd0, //0x000005cd notq %rax + 0x48, 0x21, 0xc8, //0x000005d0 andq %rcx, %rax + 0x4c, 0x8d, 0x04, 0x00, //0x000005d3 leaq (%rax,%rax), %r8 + 0x4d, 0x09, 0xc8, //0x000005d7 orq %r9, %r8 + 0x4c, 0x89, 0xc2, //0x000005da movq %r8, %rdx + 0x48, 0xf7, 0xd2, //0x000005dd notq %rdx + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000005e0 movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xd9, //0x000005ea andq %rbx, %rcx + 0x48, 0x21, 0xd1, //0x000005ed andq %rdx, %rcx + 0x31, 0xd2, //0x000005f0 xorl %edx, %edx + 0x48, 0x01, 0xc1, //0x000005f2 addq %rax, %rcx + 0x0f, 0x92, 0xc2, //0x000005f5 setb %dl + 0x48, 0x89, 0x55, 0xc8, //0x000005f8 movq %rdx, $-56(%rbp) + 0x48, 0x01, 0xc9, //0x000005fc addq %rcx, %rcx + 0x4c, 0x31, 0xe9, //0x000005ff xorq %r13, %rcx + 0x4c, 0x21, 0xc1, //0x00000602 andq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00000605 notq %rcx + //0x00000608 LBB0_66 + 0x66, 0x0f, 0x6f, 0xd6, //0x00000608 movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x0000060c pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xc2, //0x00000610 pmovmskb %xmm2, %eax + 0x48, 0xc1, 0xe0, 0x30, //0x00000614 shlq $48, %rax + 0x66, 0x0f, 0x6f, 0xd7, //0x00000618 movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x0000061c pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00000620 pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x00000624 shlq $32, %rdx + 0x48, 0x09, 0xc2, //0x00000628 orq %rax, %rdx + 0x66, 0x0f, 0x6f, 0xd5, //0x0000062b movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x0000062f pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xc2, //0x00000633 pmovmskb %xmm2, %eax + 0x48, 0xc1, 0xe0, 0x10, //0x00000637 shlq $16, %rax + 0x48, 0x09, 0xd0, //0x0000063b orq %rdx, %rax + 0x66, 0x0f, 0x6f, 0xd0, //0x0000063e movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00000642 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00000646 pmovmskb %xmm2, %edx + 0x48, 0x09, 0xc2, //0x0000064a orq %rax, %rdx + 0x48, 0x21, 0xca, //0x0000064d andq %rcx, %rdx + 0x66, 0x48, 0x0f, 0x6e, 0xd2, //0x00000650 movq %rdx, %xmm2 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd1, 0x00, //0x00000655 pclmulqdq $0, %xmm9, %xmm2 + 0x66, 0x49, 0x0f, 0x7e, 0xd1, //0x0000065c movq %xmm2, %r9 + 0x4d, 0x31, 0xd1, //0x00000661 xorq %r10, %r9 + 0x66, 0x0f, 0x6f, 0xd0, //0x00000664 movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00000668 pcmpeqb %xmm3, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xc2, //0x0000066c pmovmskb %xmm2, %r8d + 0x66, 0x0f, 0x6f, 0xd5, //0x00000671 movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00000675 pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xc2, //0x00000679 pmovmskb %xmm2, %eax + 0x66, 0x0f, 0x6f, 0xd7, //0x0000067d movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00000681 pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xca, //0x00000685 pmovmskb %xmm2, %ecx + 0x66, 0x0f, 0x6f, 0xd6, //0x00000689 movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x0000068d pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00000691 pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x30, //0x00000695 shlq $48, %rdx + 0x48, 0xc1, 0xe1, 0x20, //0x00000699 shlq $32, %rcx + 0x48, 0x09, 0xd1, //0x0000069d orq %rdx, %rcx + 0x48, 0xc1, 0xe0, 0x10, //0x000006a0 shlq $16, %rax + 0x48, 0x09, 0xc8, //0x000006a4 orq %rcx, %rax + 0x49, 0x09, 0xc0, //0x000006a7 orq %rax, %r8 + 0x4c, 0x89, 0xc8, //0x000006aa movq %r9, %rax + 0x48, 0xf7, 0xd0, //0x000006ad notq %rax + 0x49, 0x21, 0xc0, //0x000006b0 andq %rax, %r8 + 0x66, 0x0f, 0x74, 0xc4, //0x000006b3 pcmpeqb %xmm4, %xmm0 + 0x66, 0x0f, 0xd7, 0xc8, //0x000006b7 pmovmskb %xmm0, %ecx + 0x66, 0x0f, 0x74, 0xec, //0x000006bb pcmpeqb %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x000006bf pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x74, 0xfc, //0x000006c3 pcmpeqb %xmm4, %xmm7 + 0x66, 0x0f, 0xd7, 0xdf, //0x000006c7 pmovmskb %xmm7, %ebx + 0x66, 0x0f, 0x74, 0xf4, //0x000006cb pcmpeqb %xmm4, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xee, //0x000006cf pmovmskb %xmm6, %r13d + 0x49, 0xc1, 0xe5, 0x30, //0x000006d4 shlq $48, %r13 + 0x48, 0xc1, 0xe3, 0x20, //0x000006d8 shlq $32, %rbx + 0x4c, 0x09, 0xeb, //0x000006dc orq %r13, %rbx + 0x48, 0xc1, 0xe2, 0x10, //0x000006df shlq $16, %rdx + 0x48, 0x09, 0xda, //0x000006e3 orq %rbx, %rdx + 0x48, 0x09, 0xd1, //0x000006e6 orq %rdx, %rcx + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000006e9 movabsq $6148914691236517205, %r13 + 0x48, 0x21, 0xc1, //0x000006f3 andq %rax, %rcx + 0x0f, 0x84, 0xd8, 0xfd, 0xff, 0xff, //0x000006f6 je LBB0_61 + 0x90, 0x90, 0x90, 0x90, //0x000006fc .p2align 4, 0x90 + //0x00000700 LBB0_67 + 0x48, 0x8d, 0x51, 0xff, //0x00000700 leaq $-1(%rcx), %rdx + 0x48, 0x89, 0xd0, //0x00000704 movq %rdx, %rax + 0x4c, 0x21, 0xc0, //0x00000707 andq %r8, %rax + 0x48, 0x89, 0xc3, //0x0000070a movq %rax, %rbx + 0x48, 0xd1, 0xeb, //0x0000070d shrq %rbx + 0x4c, 0x21, 0xeb, //0x00000710 andq %r13, %rbx + 0x48, 0x29, 0xd8, //0x00000713 subq %rbx, %rax + 0x48, 0x89, 0xc3, //0x00000716 movq %rax, %rbx + 0x49, 0xba, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00000719 movabsq $3689348814741910323, %r10 + 0x4c, 0x21, 0xd3, //0x00000723 andq %r10, %rbx + 0x48, 0xc1, 0xe8, 0x02, //0x00000726 shrq $2, %rax + 0x4c, 0x21, 0xd0, //0x0000072a andq %r10, %rax + 0x48, 0x01, 0xd8, //0x0000072d addq %rbx, %rax + 0x48, 0x89, 0xc3, //0x00000730 movq %rax, %rbx + 0x48, 0xc1, 0xeb, 0x04, //0x00000733 shrq $4, %rbx + 0x48, 0x01, 0xc3, //0x00000737 addq %rax, %rbx + 0x48, 0xb8, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000073a movabsq $1085102592571150095, %rax + 0x48, 0x21, 0xc3, //0x00000744 andq %rax, %rbx + 0x48, 0xb8, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00000747 movabsq $72340172838076673, %rax + 0x48, 0x0f, 0xaf, 0xd8, //0x00000751 imulq %rax, %rbx + 0x48, 0xc1, 0xeb, 0x38, //0x00000755 shrq $56, %rbx + 0x48, 0x03, 0x5d, 0xc0, //0x00000759 addq $-64(%rbp), %rbx + 0x4c, 0x39, 0xdb, //0x0000075d cmpq %r11, %rbx + 0x0f, 0x86, 0xa2, 0x05, 0x00, 0x00, //0x00000760 jbe LBB0_111 + 0x49, 0x83, 0xc3, 0x01, //0x00000766 addq $1, %r11 + 0x48, 0x21, 0xd1, //0x0000076a andq %rdx, %rcx + 0x0f, 0x85, 0x8d, 0xff, 0xff, 0xff, //0x0000076d jne LBB0_67 + 0xe9, 0x5c, 0xfd, 0xff, 0xff, //0x00000773 jmp LBB0_61 + //0x00000778 LBB0_69 + 0x48, 0x85, 0xc0, //0x00000778 testq %rax, %rax + 0x0f, 0x8e, 0x50, 0x06, 0x00, 0x00, //0x0000077b jle LBB0_123 + 0x4c, 0x89, 0xca, //0x00000781 movq %r9, %rdx + 0x44, 0x0f, 0x11, 0x45, 0xb0, //0x00000784 movups %xmm8, $-80(%rbp) + 0x44, 0x0f, 0x11, 0x45, 0xa0, //0x00000789 movups %xmm8, $-96(%rbp) + 0x44, 0x0f, 0x11, 0x45, 0x90, //0x0000078e movups %xmm8, $-112(%rbp) + 0x44, 0x0f, 0x11, 0x45, 0x80, //0x00000793 movups %xmm8, $-128(%rbp) + 0x44, 0x89, 0xf0, //0x00000798 movl %r14d, %eax + 0x25, 0xff, 0x0f, 0x00, 0x00, //0x0000079b andl $4095, %eax + 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x000007a0 cmpl $4033, %eax + 0x0f, 0x82, 0x31, 0x00, 0x00, 0x00, //0x000007a5 jb LBB0_73 + 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x000007ab cmpq $32, $-48(%rbp) + 0x0f, 0x82, 0x38, 0x00, 0x00, 0x00, //0x000007b0 jb LBB0_74 + 0x41, 0x0f, 0x10, 0x06, //0x000007b6 movups (%r14), %xmm0 + 0x0f, 0x11, 0x45, 0x80, //0x000007ba movups %xmm0, $-128(%rbp) + 0x41, 0x0f, 0x10, 0x46, 0x10, //0x000007be movups $16(%r14), %xmm0 + 0x0f, 0x11, 0x45, 0x90, //0x000007c3 movups %xmm0, $-112(%rbp) + 0x49, 0x83, 0xc6, 0x20, //0x000007c7 addq $32, %r14 + 0x48, 0x8b, 0x45, 0xd0, //0x000007cb movq $-48(%rbp), %rax + 0x4c, 0x8d, 0x48, 0xe0, //0x000007cf leaq $-32(%rax), %r9 + 0x4c, 0x8d, 0x45, 0xa0, //0x000007d3 leaq $-96(%rbp), %r8 + 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x000007d7 jmp LBB0_75 + //0x000007dc LBB0_73 + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000007dc movabsq $6148914691236517205, %r13 + 0x49, 0x89, 0xd1, //0x000007e6 movq %rdx, %r9 + 0xe9, 0x5e, 0xfd, 0xff, 0xff, //0x000007e9 jmp LBB0_63 + //0x000007ee LBB0_74 + 0x4c, 0x8d, 0x45, 0x80, //0x000007ee leaq $-128(%rbp), %r8 + 0x4c, 0x8b, 0x4d, 0xd0, //0x000007f2 movq $-48(%rbp), %r9 + //0x000007f6 LBB0_75 + 0x49, 0x83, 0xf9, 0x10, //0x000007f6 cmpq $16, %r9 + 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x000007fa jb LBB0_76 + 0x41, 0x0f, 0x10, 0x06, //0x00000800 movups (%r14), %xmm0 + 0x41, 0x0f, 0x11, 0x00, //0x00000804 movups %xmm0, (%r8) + 0x49, 0x83, 0xc6, 0x10, //0x00000808 addq $16, %r14 + 0x49, 0x83, 0xc0, 0x10, //0x0000080c addq $16, %r8 + 0x49, 0x83, 0xc1, 0xf0, //0x00000810 addq $-16, %r9 + 0x49, 0x83, 0xf9, 0x08, //0x00000814 cmpq $8, %r9 + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00000818 jae LBB0_83 + //0x0000081e LBB0_77 + 0x49, 0x83, 0xf9, 0x04, //0x0000081e cmpq $4, %r9 + 0x0f, 0x8c, 0x47, 0x00, 0x00, 0x00, //0x00000822 jl LBB0_78 + //0x00000828 LBB0_84 + 0x41, 0x8b, 0x06, //0x00000828 movl (%r14), %eax + 0x41, 0x89, 0x00, //0x0000082b movl %eax, (%r8) + 0x49, 0x83, 0xc6, 0x04, //0x0000082e addq $4, %r14 + 0x49, 0x83, 0xc0, 0x04, //0x00000832 addq $4, %r8 + 0x49, 0x83, 0xc1, 0xfc, //0x00000836 addq $-4, %r9 + 0x49, 0x83, 0xf9, 0x02, //0x0000083a cmpq $2, %r9 + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x0000083e jae LBB0_79 + 0xe9, 0x44, 0x00, 0x00, 0x00, //0x00000844 jmp LBB0_80 + //0x00000849 LBB0_76 + 0x49, 0x83, 0xf9, 0x08, //0x00000849 cmpq $8, %r9 + 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x0000084d jb LBB0_77 + //0x00000853 LBB0_83 + 0x49, 0x8b, 0x06, //0x00000853 movq (%r14), %rax + 0x49, 0x89, 0x00, //0x00000856 movq %rax, (%r8) + 0x49, 0x83, 0xc6, 0x08, //0x00000859 addq $8, %r14 + 0x49, 0x83, 0xc0, 0x08, //0x0000085d addq $8, %r8 + 0x49, 0x83, 0xc1, 0xf8, //0x00000861 addq $-8, %r9 + 0x49, 0x83, 0xf9, 0x04, //0x00000865 cmpq $4, %r9 + 0x0f, 0x8d, 0xb9, 0xff, 0xff, 0xff, //0x00000869 jge LBB0_84 + //0x0000086f LBB0_78 + 0x49, 0x83, 0xf9, 0x02, //0x0000086f cmpq $2, %r9 + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00000873 jb LBB0_80 + //0x00000879 LBB0_79 + 0x41, 0x0f, 0xb7, 0x06, //0x00000879 movzwl (%r14), %eax + 0x66, 0x41, 0x89, 0x00, //0x0000087d movw %ax, (%r8) + 0x49, 0x83, 0xc6, 0x02, //0x00000881 addq $2, %r14 + 0x49, 0x83, 0xc0, 0x02, //0x00000885 addq $2, %r8 + 0x49, 0x83, 0xc1, 0xfe, //0x00000889 addq $-2, %r9 + //0x0000088d LBB0_80 + 0x4c, 0x89, 0xf1, //0x0000088d movq %r14, %rcx + 0x4c, 0x8d, 0x75, 0x80, //0x00000890 leaq $-128(%rbp), %r14 + 0x4d, 0x85, 0xc9, //0x00000894 testq %r9, %r9 + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000897 movabsq $6148914691236517205, %r13 + 0x49, 0x89, 0xd1, //0x000008a1 movq %rdx, %r9 + 0x0f, 0x84, 0xa2, 0xfc, 0xff, 0xff, //0x000008a4 je LBB0_63 + 0x8a, 0x01, //0x000008aa movb (%rcx), %al + 0x41, 0x88, 0x00, //0x000008ac movb %al, (%r8) + 0x4c, 0x8d, 0x75, 0x80, //0x000008af leaq $-128(%rbp), %r14 + 0xe9, 0x94, 0xfc, 0xff, 0xff, //0x000008b3 jmp LBB0_63 + //0x000008b8 LBB0_85 + 0x49, 0x8d, 0x44, 0x24, 0x05, //0x000008b8 leaq $5(%r12), %rax + 0x48, 0x3b, 0x47, 0x08, //0x000008bd cmpq $8(%rdi), %rax + 0x0f, 0x86, 0x82, 0x04, 0x00, 0x00, //0x000008c1 jbe LBB0_113 + 0xe9, 0x83, 0x04, 0x00, 0x00, //0x000008c7 jmp LBB0_115 + //0x000008cc LBB0_86 + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000008cc movabsq $6148914691236517205, %r13 + 0x48, 0x8b, 0x47, 0x08, //0x000008d6 movq $8(%rdi), %rax + 0x48, 0x29, 0xd8, //0x000008da subq %rbx, %rax + 0x49, 0x01, 0xde, //0x000008dd addq %rbx, %r14 + 0x45, 0x31, 0xd2, //0x000008e0 xorl %r10d, %r10d + 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0x54, 0xf7, 0xff, 0xff, //0x000008e3 movdqu $-2220(%rip), %xmm10 /* LCPI0_4+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0x3c, 0xf7, 0xff, 0xff, //0x000008ec movdqu $-2244(%rip), %xmm1 /* LCPI0_3+0(%rip) */ + 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x000008f4 pcmpeqd %xmm9, %xmm9 + 0xf3, 0x0f, 0x6f, 0x1d, 0x4f, 0xf7, 0xff, 0xff, //0x000008f9 movdqu $-2225(%rip), %xmm3 /* LCPI0_5+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x25, 0x57, 0xf7, 0xff, 0xff, //0x00000901 movdqu $-2217(%rip), %xmm4 /* LCPI0_6+0(%rip) */ + 0x45, 0x0f, 0x57, 0xc0, //0x00000909 xorps %xmm8, %xmm8 + 0x45, 0x31, 0xc9, //0x0000090d xorl %r9d, %r9d + 0x31, 0xc9, //0x00000910 xorl %ecx, %ecx + 0x48, 0x89, 0x4d, 0xc0, //0x00000912 movq %rcx, $-64(%rbp) + 0x45, 0x31, 0xdb, //0x00000916 xorl %r11d, %r11d + 0xe9, 0x6a, 0x00, 0x00, 0x00, //0x00000919 jmp LBB0_88 + //0x0000091e LBB0_87 + 0x49, 0xc1, 0xf9, 0x3f, //0x0000091e sarq $63, %r9 + 0x4c, 0x89, 0xc0, //0x00000922 movq %r8, %rax + 0x48, 0xd1, 0xe8, //0x00000925 shrq %rax + 0x4c, 0x21, 0xe8, //0x00000928 andq %r13, %rax + 0x49, 0x29, 0xc0, //0x0000092b subq %rax, %r8 + 0x4c, 0x89, 0xc0, //0x0000092e movq %r8, %rax + 0x48, 0xb9, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00000931 movabsq $3689348814741910323, %rcx + 0x48, 0x21, 0xc8, //0x0000093b andq %rcx, %rax + 0x49, 0xc1, 0xe8, 0x02, //0x0000093e shrq $2, %r8 + 0x49, 0x21, 0xc8, //0x00000942 andq %rcx, %r8 + 0x49, 0x01, 0xc0, //0x00000945 addq %rax, %r8 + 0x4c, 0x89, 0xc0, //0x00000948 movq %r8, %rax + 0x48, 0xc1, 0xe8, 0x04, //0x0000094b shrq $4, %rax + 0x4c, 0x01, 0xc0, //0x0000094f addq %r8, %rax + 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00000952 movabsq $1085102592571150095, %rcx + 0x48, 0x21, 0xc8, //0x0000095c andq %rcx, %rax + 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x0000095f movabsq $72340172838076673, %rcx + 0x48, 0x0f, 0xaf, 0xc1, //0x00000969 imulq %rcx, %rax + 0x48, 0xc1, 0xe8, 0x38, //0x0000096d shrq $56, %rax + 0x48, 0x01, 0x45, 0xc0, //0x00000971 addq %rax, $-64(%rbp) + 0x49, 0x83, 0xc6, 0x40, //0x00000975 addq $64, %r14 + 0x48, 0x8b, 0x45, 0xd0, //0x00000979 movq $-48(%rbp), %rax + 0x48, 0x83, 0xc0, 0xc0, //0x0000097d addq $-64, %rax + 0x4d, 0x89, 0xca, //0x00000981 movq %r9, %r10 + 0x4c, 0x8b, 0x4d, 0xc8, //0x00000984 movq $-56(%rbp), %r9 + //0x00000988 LBB0_88 + 0x48, 0x83, 0xf8, 0x40, //0x00000988 cmpq $64, %rax + 0x48, 0x89, 0x45, 0xd0, //0x0000098c movq %rax, $-48(%rbp) + 0x0f, 0x8c, 0x32, 0x02, 0x00, 0x00, //0x00000990 jl LBB0_95 + //0x00000996 LBB0_89 + 0xf3, 0x41, 0x0f, 0x6f, 0x06, //0x00000996 movdqu (%r14), %xmm0 + 0xf3, 0x41, 0x0f, 0x6f, 0x6e, 0x10, //0x0000099b movdqu $16(%r14), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x7e, 0x20, //0x000009a1 movdqu $32(%r14), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x76, 0x30, //0x000009a7 movdqu $48(%r14), %xmm6 + 0x66, 0x0f, 0x6f, 0xd0, //0x000009ad movdqa %xmm0, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x000009b1 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xca, //0x000009b6 pmovmskb %xmm2, %ecx + 0x66, 0x0f, 0x6f, 0xd5, //0x000009ba movdqa %xmm5, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x000009be pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x000009c3 pmovmskb %xmm2, %edx + 0x66, 0x0f, 0x6f, 0xd7, //0x000009c7 movdqa %xmm7, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x000009cb pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xc2, //0x000009d0 pmovmskb %xmm2, %eax + 0x66, 0x0f, 0x6f, 0xd6, //0x000009d4 movdqa %xmm6, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x000009d8 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x000009dd pmovmskb %xmm2, %ebx + 0x48, 0xc1, 0xe3, 0x30, //0x000009e1 shlq $48, %rbx + 0x48, 0xc1, 0xe0, 0x20, //0x000009e5 shlq $32, %rax + 0x48, 0x09, 0xd8, //0x000009e9 orq %rbx, %rax + 0x48, 0xc1, 0xe2, 0x10, //0x000009ec shlq $16, %rdx + 0x48, 0x09, 0xc2, //0x000009f0 orq %rax, %rdx + 0x48, 0x09, 0xd1, //0x000009f3 orq %rdx, %rcx + 0x48, 0x89, 0xc8, //0x000009f6 movq %rcx, %rax + 0x4c, 0x09, 0xc8, //0x000009f9 orq %r9, %rax + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x000009fc jne LBB0_91 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00000a02 movq $-1, %rcx + 0x31, 0xc0, //0x00000a09 xorl %eax, %eax + 0x48, 0x89, 0x45, 0xc8, //0x00000a0b movq %rax, $-56(%rbp) + 0xe9, 0x3e, 0x00, 0x00, 0x00, //0x00000a0f jmp LBB0_92 + //0x00000a14 LBB0_91 + 0x4c, 0x89, 0xc8, //0x00000a14 movq %r9, %rax + 0x48, 0xf7, 0xd0, //0x00000a17 notq %rax + 0x48, 0x21, 0xc8, //0x00000a1a andq %rcx, %rax + 0x4c, 0x8d, 0x04, 0x00, //0x00000a1d leaq (%rax,%rax), %r8 + 0x4d, 0x09, 0xc8, //0x00000a21 orq %r9, %r8 + 0x4c, 0x89, 0xc2, //0x00000a24 movq %r8, %rdx + 0x48, 0xf7, 0xd2, //0x00000a27 notq %rdx + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000a2a movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xd9, //0x00000a34 andq %rbx, %rcx + 0x48, 0x21, 0xd1, //0x00000a37 andq %rdx, %rcx + 0x31, 0xd2, //0x00000a3a xorl %edx, %edx + 0x48, 0x01, 0xc1, //0x00000a3c addq %rax, %rcx + 0x0f, 0x92, 0xc2, //0x00000a3f setb %dl + 0x48, 0x89, 0x55, 0xc8, //0x00000a42 movq %rdx, $-56(%rbp) + 0x48, 0x01, 0xc9, //0x00000a46 addq %rcx, %rcx + 0x4c, 0x31, 0xe9, //0x00000a49 xorq %r13, %rcx + 0x4c, 0x21, 0xc1, //0x00000a4c andq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00000a4f notq %rcx + //0x00000a52 LBB0_92 + 0x66, 0x0f, 0x6f, 0xd6, //0x00000a52 movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00000a56 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xc2, //0x00000a5a pmovmskb %xmm2, %eax + 0x48, 0xc1, 0xe0, 0x30, //0x00000a5e shlq $48, %rax + 0x66, 0x0f, 0x6f, 0xd7, //0x00000a62 movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00000a66 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00000a6a pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x20, //0x00000a6e shlq $32, %rdx + 0x48, 0x09, 0xc2, //0x00000a72 orq %rax, %rdx + 0x66, 0x0f, 0x6f, 0xd5, //0x00000a75 movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00000a79 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xc2, //0x00000a7d pmovmskb %xmm2, %eax + 0x48, 0xc1, 0xe0, 0x10, //0x00000a81 shlq $16, %rax + 0x48, 0x09, 0xd0, //0x00000a85 orq %rdx, %rax + 0x66, 0x0f, 0x6f, 0xd0, //0x00000a88 movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00000a8c pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00000a90 pmovmskb %xmm2, %edx + 0x48, 0x09, 0xc2, //0x00000a94 orq %rax, %rdx + 0x48, 0x21, 0xca, //0x00000a97 andq %rcx, %rdx + 0x66, 0x48, 0x0f, 0x6e, 0xd2, //0x00000a9a movq %rdx, %xmm2 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd1, 0x00, //0x00000a9f pclmulqdq $0, %xmm9, %xmm2 + 0x66, 0x49, 0x0f, 0x7e, 0xd1, //0x00000aa6 movq %xmm2, %r9 + 0x4d, 0x31, 0xd1, //0x00000aab xorq %r10, %r9 + 0x66, 0x0f, 0x6f, 0xd0, //0x00000aae movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00000ab2 pcmpeqb %xmm3, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xc2, //0x00000ab6 pmovmskb %xmm2, %r8d + 0x66, 0x0f, 0x6f, 0xd5, //0x00000abb movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00000abf pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xc2, //0x00000ac3 pmovmskb %xmm2, %eax + 0x66, 0x0f, 0x6f, 0xd7, //0x00000ac7 movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00000acb pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xca, //0x00000acf pmovmskb %xmm2, %ecx + 0x66, 0x0f, 0x6f, 0xd6, //0x00000ad3 movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00000ad7 pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00000adb pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x30, //0x00000adf shlq $48, %rdx + 0x48, 0xc1, 0xe1, 0x20, //0x00000ae3 shlq $32, %rcx + 0x48, 0x09, 0xd1, //0x00000ae7 orq %rdx, %rcx + 0x48, 0xc1, 0xe0, 0x10, //0x00000aea shlq $16, %rax + 0x48, 0x09, 0xc8, //0x00000aee orq %rcx, %rax + 0x49, 0x09, 0xc0, //0x00000af1 orq %rax, %r8 + 0x4c, 0x89, 0xc8, //0x00000af4 movq %r9, %rax + 0x48, 0xf7, 0xd0, //0x00000af7 notq %rax + 0x49, 0x21, 0xc0, //0x00000afa andq %rax, %r8 + 0x66, 0x0f, 0x74, 0xc4, //0x00000afd pcmpeqb %xmm4, %xmm0 + 0x66, 0x0f, 0xd7, 0xc8, //0x00000b01 pmovmskb %xmm0, %ecx + 0x66, 0x0f, 0x74, 0xec, //0x00000b05 pcmpeqb %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00000b09 pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x74, 0xfc, //0x00000b0d pcmpeqb %xmm4, %xmm7 + 0x66, 0x0f, 0xd7, 0xdf, //0x00000b11 pmovmskb %xmm7, %ebx + 0x66, 0x0f, 0x74, 0xf4, //0x00000b15 pcmpeqb %xmm4, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xee, //0x00000b19 pmovmskb %xmm6, %r13d + 0x49, 0xc1, 0xe5, 0x30, //0x00000b1e shlq $48, %r13 + 0x48, 0xc1, 0xe3, 0x20, //0x00000b22 shlq $32, %rbx + 0x4c, 0x09, 0xeb, //0x00000b26 orq %r13, %rbx + 0x48, 0xc1, 0xe2, 0x10, //0x00000b29 shlq $16, %rdx + 0x48, 0x09, 0xda, //0x00000b2d orq %rbx, %rdx + 0x48, 0x09, 0xd1, //0x00000b30 orq %rdx, %rcx + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000b33 movabsq $6148914691236517205, %r13 + 0x48, 0x21, 0xc1, //0x00000b3d andq %rax, %rcx + 0x0f, 0x84, 0xd8, 0xfd, 0xff, 0xff, //0x00000b40 je LBB0_87 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000b46 .p2align 4, 0x90 + //0x00000b50 LBB0_93 + 0x48, 0x8d, 0x51, 0xff, //0x00000b50 leaq $-1(%rcx), %rdx + 0x48, 0x89, 0xd0, //0x00000b54 movq %rdx, %rax + 0x4c, 0x21, 0xc0, //0x00000b57 andq %r8, %rax + 0x48, 0x89, 0xc3, //0x00000b5a movq %rax, %rbx + 0x48, 0xd1, 0xeb, //0x00000b5d shrq %rbx + 0x4c, 0x21, 0xeb, //0x00000b60 andq %r13, %rbx + 0x48, 0x29, 0xd8, //0x00000b63 subq %rbx, %rax + 0x48, 0x89, 0xc3, //0x00000b66 movq %rax, %rbx + 0x49, 0xba, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00000b69 movabsq $3689348814741910323, %r10 + 0x4c, 0x21, 0xd3, //0x00000b73 andq %r10, %rbx + 0x48, 0xc1, 0xe8, 0x02, //0x00000b76 shrq $2, %rax + 0x4c, 0x21, 0xd0, //0x00000b7a andq %r10, %rax + 0x48, 0x01, 0xd8, //0x00000b7d addq %rbx, %rax + 0x48, 0x89, 0xc3, //0x00000b80 movq %rax, %rbx + 0x48, 0xc1, 0xeb, 0x04, //0x00000b83 shrq $4, %rbx + 0x48, 0x01, 0xc3, //0x00000b87 addq %rax, %rbx + 0x48, 0xb8, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00000b8a movabsq $1085102592571150095, %rax + 0x48, 0x21, 0xc3, //0x00000b94 andq %rax, %rbx + 0x48, 0xb8, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00000b97 movabsq $72340172838076673, %rax + 0x48, 0x0f, 0xaf, 0xd8, //0x00000ba1 imulq %rax, %rbx + 0x48, 0xc1, 0xeb, 0x38, //0x00000ba5 shrq $56, %rbx + 0x48, 0x03, 0x5d, 0xc0, //0x00000ba9 addq $-64(%rbp), %rbx + 0x4c, 0x39, 0xdb, //0x00000bad cmpq %r11, %rbx + 0x0f, 0x86, 0x52, 0x01, 0x00, 0x00, //0x00000bb0 jbe LBB0_111 + 0x49, 0x83, 0xc3, 0x01, //0x00000bb6 addq $1, %r11 + 0x48, 0x21, 0xd1, //0x00000bba andq %rdx, %rcx + 0x0f, 0x85, 0x8d, 0xff, 0xff, 0xff, //0x00000bbd jne LBB0_93 + 0xe9, 0x56, 0xfd, 0xff, 0xff, //0x00000bc3 jmp LBB0_87 + //0x00000bc8 LBB0_95 + 0x48, 0x85, 0xc0, //0x00000bc8 testq %rax, %rax + 0x0f, 0x8e, 0x00, 0x02, 0x00, 0x00, //0x00000bcb jle LBB0_123 + 0x4c, 0x89, 0xca, //0x00000bd1 movq %r9, %rdx + 0x44, 0x0f, 0x11, 0x45, 0xb0, //0x00000bd4 movups %xmm8, $-80(%rbp) + 0x44, 0x0f, 0x11, 0x45, 0xa0, //0x00000bd9 movups %xmm8, $-96(%rbp) + 0x44, 0x0f, 0x11, 0x45, 0x90, //0x00000bde movups %xmm8, $-112(%rbp) + 0x44, 0x0f, 0x11, 0x45, 0x80, //0x00000be3 movups %xmm8, $-128(%rbp) + 0x44, 0x89, 0xf0, //0x00000be8 movl %r14d, %eax + 0x25, 0xff, 0x0f, 0x00, 0x00, //0x00000beb andl $4095, %eax + 0x3d, 0xc1, 0x0f, 0x00, 0x00, //0x00000bf0 cmpl $4033, %eax + 0x0f, 0x82, 0x31, 0x00, 0x00, 0x00, //0x00000bf5 jb LBB0_99 + 0x48, 0x83, 0x7d, 0xd0, 0x20, //0x00000bfb cmpq $32, $-48(%rbp) + 0x0f, 0x82, 0x38, 0x00, 0x00, 0x00, //0x00000c00 jb LBB0_100 + 0x41, 0x0f, 0x10, 0x06, //0x00000c06 movups (%r14), %xmm0 + 0x0f, 0x11, 0x45, 0x80, //0x00000c0a movups %xmm0, $-128(%rbp) + 0x41, 0x0f, 0x10, 0x46, 0x10, //0x00000c0e movups $16(%r14), %xmm0 + 0x0f, 0x11, 0x45, 0x90, //0x00000c13 movups %xmm0, $-112(%rbp) + 0x49, 0x83, 0xc6, 0x20, //0x00000c17 addq $32, %r14 + 0x48, 0x8b, 0x45, 0xd0, //0x00000c1b movq $-48(%rbp), %rax + 0x4c, 0x8d, 0x48, 0xe0, //0x00000c1f leaq $-32(%rax), %r9 + 0x4c, 0x8d, 0x45, 0xa0, //0x00000c23 leaq $-96(%rbp), %r8 + 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x00000c27 jmp LBB0_101 + //0x00000c2c LBB0_99 + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000c2c movabsq $6148914691236517205, %r13 + 0x49, 0x89, 0xd1, //0x00000c36 movq %rdx, %r9 + 0xe9, 0x58, 0xfd, 0xff, 0xff, //0x00000c39 jmp LBB0_89 + //0x00000c3e LBB0_100 + 0x4c, 0x8d, 0x45, 0x80, //0x00000c3e leaq $-128(%rbp), %r8 + 0x4c, 0x8b, 0x4d, 0xd0, //0x00000c42 movq $-48(%rbp), %r9 + //0x00000c46 LBB0_101 + 0x49, 0x83, 0xf9, 0x10, //0x00000c46 cmpq $16, %r9 + 0x0f, 0x82, 0x49, 0x00, 0x00, 0x00, //0x00000c4a jb LBB0_102 + 0x41, 0x0f, 0x10, 0x06, //0x00000c50 movups (%r14), %xmm0 + 0x41, 0x0f, 0x11, 0x00, //0x00000c54 movups %xmm0, (%r8) + 0x49, 0x83, 0xc6, 0x10, //0x00000c58 addq $16, %r14 + 0x49, 0x83, 0xc0, 0x10, //0x00000c5c addq $16, %r8 + 0x49, 0x83, 0xc1, 0xf0, //0x00000c60 addq $-16, %r9 + 0x49, 0x83, 0xf9, 0x08, //0x00000c64 cmpq $8, %r9 + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00000c68 jae LBB0_109 + //0x00000c6e LBB0_103 + 0x49, 0x83, 0xf9, 0x04, //0x00000c6e cmpq $4, %r9 + 0x0f, 0x8c, 0x47, 0x00, 0x00, 0x00, //0x00000c72 jl LBB0_104 + //0x00000c78 LBB0_110 + 0x41, 0x8b, 0x06, //0x00000c78 movl (%r14), %eax + 0x41, 0x89, 0x00, //0x00000c7b movl %eax, (%r8) + 0x49, 0x83, 0xc6, 0x04, //0x00000c7e addq $4, %r14 + 0x49, 0x83, 0xc0, 0x04, //0x00000c82 addq $4, %r8 + 0x49, 0x83, 0xc1, 0xfc, //0x00000c86 addq $-4, %r9 + 0x49, 0x83, 0xf9, 0x02, //0x00000c8a cmpq $2, %r9 + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00000c8e jae LBB0_105 + 0xe9, 0x44, 0x00, 0x00, 0x00, //0x00000c94 jmp LBB0_106 + //0x00000c99 LBB0_102 + 0x49, 0x83, 0xf9, 0x08, //0x00000c99 cmpq $8, %r9 + 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x00000c9d jb LBB0_103 + //0x00000ca3 LBB0_109 + 0x49, 0x8b, 0x06, //0x00000ca3 movq (%r14), %rax + 0x49, 0x89, 0x00, //0x00000ca6 movq %rax, (%r8) + 0x49, 0x83, 0xc6, 0x08, //0x00000ca9 addq $8, %r14 + 0x49, 0x83, 0xc0, 0x08, //0x00000cad addq $8, %r8 + 0x49, 0x83, 0xc1, 0xf8, //0x00000cb1 addq $-8, %r9 + 0x49, 0x83, 0xf9, 0x04, //0x00000cb5 cmpq $4, %r9 + 0x0f, 0x8d, 0xb9, 0xff, 0xff, 0xff, //0x00000cb9 jge LBB0_110 + //0x00000cbf LBB0_104 + 0x49, 0x83, 0xf9, 0x02, //0x00000cbf cmpq $2, %r9 + 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00000cc3 jb LBB0_106 + //0x00000cc9 LBB0_105 + 0x41, 0x0f, 0xb7, 0x06, //0x00000cc9 movzwl (%r14), %eax + 0x66, 0x41, 0x89, 0x00, //0x00000ccd movw %ax, (%r8) + 0x49, 0x83, 0xc6, 0x02, //0x00000cd1 addq $2, %r14 + 0x49, 0x83, 0xc0, 0x02, //0x00000cd5 addq $2, %r8 + 0x49, 0x83, 0xc1, 0xfe, //0x00000cd9 addq $-2, %r9 + //0x00000cdd LBB0_106 + 0x4c, 0x89, 0xf1, //0x00000cdd movq %r14, %rcx + 0x4c, 0x8d, 0x75, 0x80, //0x00000ce0 leaq $-128(%rbp), %r14 + 0x4d, 0x85, 0xc9, //0x00000ce4 testq %r9, %r9 + 0x49, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000ce7 movabsq $6148914691236517205, %r13 + 0x49, 0x89, 0xd1, //0x00000cf1 movq %rdx, %r9 + 0x0f, 0x84, 0x9c, 0xfc, 0xff, 0xff, //0x00000cf4 je LBB0_89 + 0x8a, 0x01, //0x00000cfa movb (%rcx), %al + 0x41, 0x88, 0x00, //0x00000cfc movb %al, (%r8) + 0x4c, 0x8d, 0x75, 0x80, //0x00000cff leaq $-128(%rbp), %r14 + 0xe9, 0x8e, 0xfc, 0xff, 0xff, //0x00000d03 jmp LBB0_89 + //0x00000d08 LBB0_111 + 0x48, 0x8b, 0x47, 0x08, //0x00000d08 movq $8(%rdi), %rax + 0x48, 0x0f, 0xbc, 0xc9, //0x00000d0c bsfq %rcx, %rcx + 0x48, 0x2b, 0x4d, 0xd0, //0x00000d10 subq $-48(%rbp), %rcx + 0x48, 0x01, 0xc8, //0x00000d14 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00000d17 addq $1, %rax + 0x48, 0x89, 0x06, //0x00000d1b movq %rax, (%rsi) + 0x48, 0x8b, 0x4f, 0x08, //0x00000d1e movq $8(%rdi), %rcx + 0x48, 0x39, 0xc8, //0x00000d22 cmpq %rcx, %rax + 0x48, 0x0f, 0x47, 0xc1, //0x00000d25 cmovaq %rcx, %rax + 0x48, 0x89, 0x06, //0x00000d29 movq %rax, (%rsi) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000d2c movq $-1, %rax + 0x4c, 0x0f, 0x47, 0xe0, //0x00000d33 cmovaq %rax, %r12 + 0xe9, 0x10, 0x00, 0x00, 0x00, //0x00000d37 jmp LBB0_114 + //0x00000d3c LBB0_112 + 0x0f, 0xbc, 0xc1, //0x00000d3c bsfl %ecx, %eax + 0x4c, 0x01, 0xe0, //0x00000d3f addq %r12, %rax + 0x4c, 0x01, 0xd8, //0x00000d42 addq %r11, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00000d45 addq $2, %rax + //0x00000d49 LBB0_113 + 0x48, 0x89, 0x06, //0x00000d49 movq %rax, (%rsi) + //0x00000d4c LBB0_114 + 0x4d, 0x89, 0xe7, //0x00000d4c movq %r12, %r15 + //0x00000d4f LBB0_115 + 0x4c, 0x89, 0xf8, //0x00000d4f movq %r15, %rax + 0x48, 0x83, 0xc4, 0x58, //0x00000d52 addq $88, %rsp + 0x5b, //0x00000d56 popq %rbx + 0x41, 0x5c, //0x00000d57 popq %r12 + 0x41, 0x5d, //0x00000d59 popq %r13 + 0x41, 0x5e, //0x00000d5b popq %r14 + 0x41, 0x5f, //0x00000d5d popq %r15 + 0x5d, //0x00000d5f popq %rbp + 0xc3, //0x00000d60 retq + //0x00000d61 LBB0_116 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00000d61 movq $-2, %rax + 0xb9, 0x02, 0x00, 0x00, 0x00, //0x00000d68 movl $2, %ecx + 0x48, 0x01, 0xcb, //0x00000d6d addq %rcx, %rbx + 0x49, 0x01, 0xc3, //0x00000d70 addq %rax, %r11 + 0x0f, 0x8e, 0xd6, 0xff, 0xff, 0xff, //0x00000d73 jle LBB0_115 + //0x00000d79 LBB0_117 + 0x0f, 0xb6, 0x03, //0x00000d79 movzbl (%rbx), %eax + 0x3c, 0x5c, //0x00000d7c cmpb $92, %al + 0x0f, 0x84, 0xdd, 0xff, 0xff, 0xff, //0x00000d7e je LBB0_116 + 0x3c, 0x22, //0x00000d84 cmpb $34, %al + 0x0f, 0x84, 0x1d, 0x00, 0x00, 0x00, //0x00000d86 je LBB0_120 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000d8c movq $-1, %rax + 0xb9, 0x01, 0x00, 0x00, 0x00, //0x00000d93 movl $1, %ecx + 0x48, 0x01, 0xcb, //0x00000d98 addq %rcx, %rbx + 0x49, 0x01, 0xc3, //0x00000d9b addq %rax, %r11 + 0x0f, 0x8f, 0xd5, 0xff, 0xff, 0xff, //0x00000d9e jg LBB0_117 + 0xe9, 0xa6, 0xff, 0xff, 0xff, //0x00000da4 jmp LBB0_115 + //0x00000da9 LBB0_120 + 0x4c, 0x29, 0xf3, //0x00000da9 subq %r14, %rbx + 0x48, 0x83, 0xc3, 0x01, //0x00000dac addq $1, %rbx + 0x48, 0x89, 0x1e, //0x00000db0 movq %rbx, (%rsi) + 0xe9, 0x94, 0xff, 0xff, 0xff, //0x00000db3 jmp LBB0_114 + //0x00000db8 LBB0_121 + 0x4c, 0x01, 0xf3, //0x00000db8 addq %r14, %rbx + 0x48, 0x85, 0xc9, //0x00000dbb testq %rcx, %rcx + 0x0f, 0x85, 0xc1, 0xf4, 0xff, 0xff, //0x00000dbe jne LBB0_34 + 0xe9, 0x02, 0xf5, 0xff, 0xff, //0x00000dc4 jmp LBB0_41 + //0x00000dc9 LBB0_122 + 0x4c, 0x01, 0xf3, //0x00000dc9 addq %r14, %rbx + 0xe9, 0x9c, 0xf6, 0xff, 0xff, //0x00000dcc jmp LBB0_58 + //0x00000dd1 LBB0_123 + 0x48, 0x8b, 0x47, 0x08, //0x00000dd1 movq $8(%rdi), %rax + 0x48, 0x89, 0x06, //0x00000dd5 movq %rax, (%rsi) + 0xe9, 0x72, 0xff, 0xff, 0xff, //0x00000dd8 jmp LBB0_115 + //0x00000ddd LBB0_124 + 0x49, 0x8d, 0x40, 0xff, //0x00000ddd leaq $-1(%r8), %rax + 0x4c, 0x39, 0xd8, //0x00000de1 cmpq %r11, %rax + 0x0f, 0x84, 0x65, 0xff, 0xff, 0xff, //0x00000de4 je LBB0_115 + 0x4b, 0x8d, 0x1c, 0x0b, //0x00000dea leaq (%r11,%r9), %rbx + 0x48, 0x83, 0xc3, 0x02, //0x00000dee addq $2, %rbx + 0x4d, 0x29, 0xd8, //0x00000df2 subq %r11, %r8 + 0x49, 0x83, 0xc0, 0xfe, //0x00000df5 addq $-2, %r8 + 0x4d, 0x89, 0xc3, //0x00000df9 movq %r8, %r11 + 0xe9, 0x6c, 0xf6, 0xff, 0xff, //0x00000dfc jmp LBB0_58 + 0x90, 0x90, 0x90, //0x00000e01 .p2align 2, 0x90 + // // .set L0_0_set_115, LBB0_115-LJTI0_0 + // // .set L0_0_set_48, LBB0_48-LJTI0_0 + // // .set L0_0_set_49, LBB0_49-LJTI0_0 // // .set L0_0_set_29, LBB0_29-LJTI0_0 - // // .set L0_0_set_58, LBB0_58-LJTI0_0 - // // .set L0_0_set_83, LBB0_83-LJTI0_0 - // // .set L0_0_set_45, LBB0_45-LJTI0_0 - // // .set L0_0_set_84, LBB0_84-LJTI0_0 - //0x00000d94 LJTI0_0 - 0x41, 0xf5, 0xff, 0xff, //0x00000d94 .long L0_0_set_44 - 0x67, 0xf5, 0xff, 0xff, //0x00000d98 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000d9c .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000da0 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000da4 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000da8 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000dac .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000db0 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000db4 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000db8 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000dbc .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000dc0 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000dc4 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000dc8 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000dcc .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000dd0 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000dd4 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000dd8 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ddc .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000de0 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000de4 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000de8 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000dec .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000df0 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000df4 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000df8 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000dfc .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e00 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e04 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e08 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e0c .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e10 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e14 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e18 .long L0_0_set_46 - 0x76, 0xf5, 0xff, 0xff, //0x00000e1c .long L0_0_set_47 - 0x67, 0xf5, 0xff, 0xff, //0x00000e20 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e24 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e28 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e2c .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e30 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e34 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e38 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e3c .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e40 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e44 .long L0_0_set_46 - 0x61, 0xf4, 0xff, 0xff, //0x00000e48 .long L0_0_set_29 - 0x67, 0xf5, 0xff, 0xff, //0x00000e4c .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e50 .long L0_0_set_46 - 0x61, 0xf4, 0xff, 0xff, //0x00000e54 .long L0_0_set_29 - 0x61, 0xf4, 0xff, 0xff, //0x00000e58 .long L0_0_set_29 - 0x61, 0xf4, 0xff, 0xff, //0x00000e5c .long L0_0_set_29 - 0x61, 0xf4, 0xff, 0xff, //0x00000e60 .long L0_0_set_29 - 0x61, 0xf4, 0xff, 0xff, //0x00000e64 .long L0_0_set_29 - 0x61, 0xf4, 0xff, 0xff, //0x00000e68 .long L0_0_set_29 - 0x61, 0xf4, 0xff, 0xff, //0x00000e6c .long L0_0_set_29 - 0x61, 0xf4, 0xff, 0xff, //0x00000e70 .long L0_0_set_29 - 0x61, 0xf4, 0xff, 0xff, //0x00000e74 .long L0_0_set_29 - 0x61, 0xf4, 0xff, 0xff, //0x00000e78 .long L0_0_set_29 - 0x67, 0xf5, 0xff, 0xff, //0x00000e7c .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e80 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e84 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e88 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e8c .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e90 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e94 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e98 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000e9c .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ea0 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ea4 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ea8 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000eac .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000eb0 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000eb4 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000eb8 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ebc .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ec0 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ec4 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ec8 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ecc .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ed0 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ed4 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ed8 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000edc .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ee0 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ee4 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ee8 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000eec .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ef0 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ef4 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000ef8 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000efc .long L0_0_set_46 - 0x9e, 0xf6, 0xff, 0xff, //0x00000f00 .long L0_0_set_58 - 0x67, 0xf5, 0xff, 0xff, //0x00000f04 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f08 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f0c .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f10 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f14 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f18 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f1c .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f20 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f24 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f28 .long L0_0_set_46 - 0xca, 0xfa, 0xff, 0xff, //0x00000f2c .long L0_0_set_83 - 0x67, 0xf5, 0xff, 0xff, //0x00000f30 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f34 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f38 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f3c .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f40 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f44 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f48 .long L0_0_set_46 - 0x53, 0xf5, 0xff, 0xff, //0x00000f4c .long L0_0_set_45 - 0x67, 0xf5, 0xff, 0xff, //0x00000f50 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f54 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f58 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f5c .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f60 .long L0_0_set_46 - 0x53, 0xf5, 0xff, 0xff, //0x00000f64 .long L0_0_set_45 - 0x67, 0xf5, 0xff, 0xff, //0x00000f68 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f6c .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f70 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f74 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f78 .long L0_0_set_46 - 0x67, 0xf5, 0xff, 0xff, //0x00000f7c .long L0_0_set_46 - 0xde, 0xfa, 0xff, 0xff, //0x00000f80 .long L0_0_set_84 - //0x00000f84 .p2align 2, 0x00 - //0x00000f84 _MASK_USE_NUMBER - 0x02, 0x00, 0x00, 0x00, //0x00000f84 .long 2 + // // .set L0_0_set_60, LBB0_60-LJTI0_0 + // // .set L0_0_set_85, LBB0_85-LJTI0_0 + // // .set L0_0_set_47, LBB0_47-LJTI0_0 + // // .set L0_0_set_86, LBB0_86-LJTI0_0 + //0x00000e04 LJTI0_0 + 0x4b, 0xff, 0xff, 0xff, //0x00000e04 .long L0_0_set_115 + 0x55, 0xf5, 0xff, 0xff, //0x00000e08 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e0c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e10 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e14 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e18 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e1c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e20 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e24 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e28 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e2c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e30 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e34 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e38 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e3c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e40 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e44 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e48 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e4c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e50 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e54 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e58 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e5c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e60 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e64 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e68 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e6c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e70 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e74 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e78 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e7c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e80 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e84 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e88 .long L0_0_set_48 + 0x64, 0xf5, 0xff, 0xff, //0x00000e8c .long L0_0_set_49 + 0x55, 0xf5, 0xff, 0xff, //0x00000e90 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e94 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e98 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000e9c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000ea0 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000ea4 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000ea8 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000eac .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000eb0 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000eb4 .long L0_0_set_48 + 0xf1, 0xf3, 0xff, 0xff, //0x00000eb8 .long L0_0_set_29 + 0x55, 0xf5, 0xff, 0xff, //0x00000ebc .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000ec0 .long L0_0_set_48 + 0xf1, 0xf3, 0xff, 0xff, //0x00000ec4 .long L0_0_set_29 + 0xf1, 0xf3, 0xff, 0xff, //0x00000ec8 .long L0_0_set_29 + 0xf1, 0xf3, 0xff, 0xff, //0x00000ecc .long L0_0_set_29 + 0xf1, 0xf3, 0xff, 0xff, //0x00000ed0 .long L0_0_set_29 + 0xf1, 0xf3, 0xff, 0xff, //0x00000ed4 .long L0_0_set_29 + 0xf1, 0xf3, 0xff, 0xff, //0x00000ed8 .long L0_0_set_29 + 0xf1, 0xf3, 0xff, 0xff, //0x00000edc .long L0_0_set_29 + 0xf1, 0xf3, 0xff, 0xff, //0x00000ee0 .long L0_0_set_29 + 0xf1, 0xf3, 0xff, 0xff, //0x00000ee4 .long L0_0_set_29 + 0xf1, 0xf3, 0xff, 0xff, //0x00000ee8 .long L0_0_set_29 + 0x55, 0xf5, 0xff, 0xff, //0x00000eec .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000ef0 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000ef4 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000ef8 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000efc .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f00 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f04 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f08 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f0c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f10 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f14 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f18 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f1c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f20 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f24 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f28 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f2c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f30 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f34 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f38 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f3c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f40 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f44 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f48 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f4c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f50 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f54 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f58 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f5c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f60 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f64 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f68 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f6c .long L0_0_set_48 + 0x7e, 0xf6, 0xff, 0xff, //0x00000f70 .long L0_0_set_60 + 0x55, 0xf5, 0xff, 0xff, //0x00000f74 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f78 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f7c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f80 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f84 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f88 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f8c .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f90 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f94 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000f98 .long L0_0_set_48 + 0xb4, 0xfa, 0xff, 0xff, //0x00000f9c .long L0_0_set_85 + 0x55, 0xf5, 0xff, 0xff, //0x00000fa0 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000fa4 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000fa8 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000fac .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000fb0 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000fb4 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000fb8 .long L0_0_set_48 + 0x41, 0xf5, 0xff, 0xff, //0x00000fbc .long L0_0_set_47 + 0x55, 0xf5, 0xff, 0xff, //0x00000fc0 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000fc4 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000fc8 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000fcc .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000fd0 .long L0_0_set_48 + 0x41, 0xf5, 0xff, 0xff, //0x00000fd4 .long L0_0_set_47 + 0x55, 0xf5, 0xff, 0xff, //0x00000fd8 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000fdc .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000fe0 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000fe4 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000fe8 .long L0_0_set_48 + 0x55, 0xf5, 0xff, 0xff, //0x00000fec .long L0_0_set_48 + 0xc8, 0xfa, 0xff, 0xff, //0x00000ff0 .long L0_0_set_86 + //0x00000ff4 .p2align 2, 0x00 + //0x00000ff4 _MASK_USE_NUMBER + 0x02, 0x00, 0x00, 0x00, //0x00000ff4 .long 2 } diff --git a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_subr.go b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_subr.go index f9ab46a..373625d 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_subr.go +++ b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_subr.go @@ -16,7 +16,7 @@ const ( ) const ( - _size__skip_one = 13880 + _size__skip_one = 14016 ) var ( @@ -28,15 +28,15 @@ var ( {0xc, 32}, {0xd, 40}, {0x14, 48}, - {0x3330, 232}, - {0x3331, 48}, - {0x3333, 40}, - {0x3335, 32}, - {0x3337, 24}, - {0x3339, 16}, - {0x333a, 8}, - {0x333b, 0}, - {0x3638, 232}, + {0x33c1, 232}, + {0x33c2, 48}, + {0x33c4, 40}, + {0x33c6, 32}, + {0x33c8, 24}, + {0x33ca, 16}, + {0x33cb, 8}, + {0x33cc, 0}, + {0x36c0, 232}, } ) diff --git a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_text_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_text_amd64.go index 05499b4..7119607 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_text_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/sse/skip_one_text_amd64.go @@ -49,28 +49,28 @@ var _text_skip_one = []byte{ 0x53, //0x0000010c pushq %rbx 0x48, 0x81, 0xec, 0xb8, 0x00, 0x00, 0x00, //0x0000010d subq $184, %rsp 0x49, 0x89, 0xf0, //0x00000114 movq %rsi, %r8 - 0x48, 0x89, 0x8d, 0x68, 0xff, 0xff, 0xff, //0x00000117 movq %rcx, $-152(%rbp) - 0xf6, 0xc1, 0x40, //0x0000011e testb $64, %cl - 0x48, 0x89, 0x75, 0xd0, //0x00000121 movq %rsi, $-48(%rbp) - 0x48, 0x89, 0x7d, 0xb0, //0x00000125 movq %rdi, $-80(%rbp) - 0x0f, 0x85, 0xc2, 0x00, 0x00, 0x00, //0x00000129 jne LBB0_2 - 0x49, 0x89, 0xd3, //0x0000012f movq %rdx, %r11 - 0x0f, 0x10, 0x05, 0x47, 0xff, 0xff, 0xff, //0x00000132 movups $-185(%rip), %xmm0 /* LCPI0_8+0(%rip) */ - 0x0f, 0x11, 0x02, //0x00000139 movups %xmm0, (%rdx) - 0x4c, 0x8b, 0x27, //0x0000013c movq (%rdi), %r12 - 0x4c, 0x89, 0xe0, //0x0000013f movq %r12, %rax - 0x48, 0xf7, 0xd0, //0x00000142 notq %rax - 0x48, 0x89, 0x45, 0x88, //0x00000145 movq %rax, $-120(%rbp) - 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00000149 movl $1, %eax - 0x4c, 0x29, 0xe0, //0x0000014e subq %r12, %rax - 0x48, 0x89, 0x45, 0x98, //0x00000151 movq %rax, $-104(%rbp) - 0x4c, 0x89, 0xe0, //0x00000155 movq %r12, %rax - 0x48, 0xf7, 0xd8, //0x00000158 negq %rax - 0x48, 0x89, 0x45, 0x80, //0x0000015b movq %rax, $-128(%rbp) + 0x48, 0x89, 0x4d, 0x88, //0x00000117 movq %rcx, $-120(%rbp) + 0xf6, 0xc1, 0x40, //0x0000011b testb $64, %cl + 0x48, 0x89, 0x75, 0xd0, //0x0000011e movq %rsi, $-48(%rbp) + 0x48, 0x89, 0x7d, 0xb0, //0x00000122 movq %rdi, $-80(%rbp) + 0x0f, 0x85, 0xc5, 0x00, 0x00, 0x00, //0x00000126 jne LBB0_2 + 0x49, 0x89, 0xd3, //0x0000012c movq %rdx, %r11 + 0x0f, 0x10, 0x05, 0x4a, 0xff, 0xff, 0xff, //0x0000012f movups $-182(%rip), %xmm0 /* LCPI0_8+0(%rip) */ + 0x0f, 0x11, 0x02, //0x00000136 movups %xmm0, (%rdx) + 0x4c, 0x8b, 0x27, //0x00000139 movq (%rdi), %r12 + 0x4c, 0x89, 0xe0, //0x0000013c movq %r12, %rax + 0x48, 0xf7, 0xd0, //0x0000013f notq %rax + 0x48, 0x89, 0x45, 0x80, //0x00000142 movq %rax, $-128(%rbp) + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00000146 movl $1, %eax + 0x4c, 0x29, 0xe0, //0x0000014b subq %r12, %rax + 0x48, 0x89, 0x45, 0x90, //0x0000014e movq %rax, $-112(%rbp) + 0x4c, 0x89, 0xe0, //0x00000152 movq %r12, %rax + 0x48, 0xf7, 0xd8, //0x00000155 negq %rax + 0x48, 0x89, 0x85, 0x78, 0xff, 0xff, 0xff, //0x00000158 movq %rax, $-136(%rbp) 0x49, 0x8d, 0x44, 0x24, 0xff, //0x0000015f leaq $-1(%r12), %rax - 0x48, 0x89, 0x85, 0x78, 0xff, 0xff, 0xff, //0x00000164 movq %rax, $-136(%rbp) + 0x48, 0x89, 0x85, 0x70, 0xff, 0xff, 0xff, //0x00000164 movq %rax, $-144(%rbp) 0x49, 0x8d, 0x44, 0x24, 0xfe, //0x0000016b leaq $-2(%r12), %rax - 0x48, 0x89, 0x85, 0x70, 0xff, 0xff, 0xff, //0x00000170 movq %rax, $-144(%rbp) + 0x48, 0x89, 0x85, 0x68, 0xff, 0xff, 0xff, //0x00000170 movq %rax, $-152(%rbp) 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00000177 movq $-1, %r10 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000017e movabsq $4294977024, %r14 0xf3, 0x0f, 0x6f, 0x05, 0xa0, 0xfe, 0xff, 0xff, //0x00000188 movdqu $-352(%rip), %xmm0 /* LCPI0_3+0(%rip) */ @@ -88,12 +88,12 @@ var _text_skip_one = []byte{ 0x48, 0x89, 0x55, 0xa8, //0x000001e8 movq %rdx, $-88(%rbp) 0xe9, 0x39, 0x01, 0x00, 0x00, //0x000001ec jmp LBB0_29 //0x000001f1 LBB0_2 - 0x4c, 0x8b, 0x27, //0x000001f1 movq (%rdi), %r12 + 0x4c, 0x8b, 0x0f, //0x000001f1 movq (%rdi), %r9 0x48, 0x8b, 0x77, 0x08, //0x000001f4 movq $8(%rdi), %rsi 0x49, 0x8b, 0x18, //0x000001f8 movq (%r8), %rbx 0x48, 0x39, 0xf3, //0x000001fb cmpq %rsi, %rbx 0x0f, 0x83, 0x26, 0x00, 0x00, 0x00, //0x000001fe jae LBB0_7 - 0x41, 0x8a, 0x04, 0x1c, //0x00000204 movb (%r12,%rbx), %al + 0x41, 0x8a, 0x04, 0x19, //0x00000204 movb (%r9,%rbx), %al 0x3c, 0x0d, //0x00000208 cmpb $13, %al 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x0000020a je LBB0_7 0x3c, 0x20, //0x00000210 cmpb $32, %al @@ -101,66 +101,66 @@ var _text_skip_one = []byte{ 0x04, 0xf7, //0x00000218 addb $-9, %al 0x3c, 0x01, //0x0000021a cmpb $1, %al 0x0f, 0x86, 0x08, 0x00, 0x00, 0x00, //0x0000021c jbe LBB0_7 - 0x49, 0x89, 0xd9, //0x00000222 movq %rbx, %r9 - 0xe9, 0x46, 0x26, 0x00, 0x00, //0x00000225 jmp LBB0_492 + 0x49, 0x89, 0xdc, //0x00000222 movq %rbx, %r12 + 0xe9, 0x84, 0x26, 0x00, 0x00, //0x00000225 jmp LBB0_492 //0x0000022a LBB0_7 - 0x4c, 0x8d, 0x4b, 0x01, //0x0000022a leaq $1(%rbx), %r9 - 0x49, 0x39, 0xf1, //0x0000022e cmpq %rsi, %r9 + 0x4c, 0x8d, 0x63, 0x01, //0x0000022a leaq $1(%rbx), %r12 + 0x49, 0x39, 0xf4, //0x0000022e cmpq %rsi, %r12 0x0f, 0x83, 0x1e, 0x00, 0x00, 0x00, //0x00000231 jae LBB0_11 - 0x43, 0x8a, 0x04, 0x0c, //0x00000237 movb (%r12,%r9), %al + 0x43, 0x8a, 0x04, 0x21, //0x00000237 movb (%r9,%r12), %al 0x3c, 0x0d, //0x0000023b cmpb $13, %al 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x0000023d je LBB0_11 0x3c, 0x20, //0x00000243 cmpb $32, %al 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x00000245 je LBB0_11 0x04, 0xf7, //0x0000024b addb $-9, %al 0x3c, 0x01, //0x0000024d cmpb $1, %al - 0x0f, 0x87, 0x1b, 0x26, 0x00, 0x00, //0x0000024f ja LBB0_492 + 0x0f, 0x87, 0x59, 0x26, 0x00, 0x00, //0x0000024f ja LBB0_492 //0x00000255 LBB0_11 - 0x4c, 0x8d, 0x4b, 0x02, //0x00000255 leaq $2(%rbx), %r9 - 0x49, 0x39, 0xf1, //0x00000259 cmpq %rsi, %r9 + 0x4c, 0x8d, 0x63, 0x02, //0x00000255 leaq $2(%rbx), %r12 + 0x49, 0x39, 0xf4, //0x00000259 cmpq %rsi, %r12 0x0f, 0x83, 0x1e, 0x00, 0x00, 0x00, //0x0000025c jae LBB0_15 - 0x43, 0x8a, 0x04, 0x0c, //0x00000262 movb (%r12,%r9), %al + 0x43, 0x8a, 0x04, 0x21, //0x00000262 movb (%r9,%r12), %al 0x3c, 0x0d, //0x00000266 cmpb $13, %al 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00000268 je LBB0_15 0x3c, 0x20, //0x0000026e cmpb $32, %al 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x00000270 je LBB0_15 0x04, 0xf7, //0x00000276 addb $-9, %al 0x3c, 0x01, //0x00000278 cmpb $1, %al - 0x0f, 0x87, 0xf0, 0x25, 0x00, 0x00, //0x0000027a ja LBB0_492 + 0x0f, 0x87, 0x2e, 0x26, 0x00, 0x00, //0x0000027a ja LBB0_492 //0x00000280 LBB0_15 - 0x4c, 0x8d, 0x4b, 0x03, //0x00000280 leaq $3(%rbx), %r9 - 0x49, 0x39, 0xf1, //0x00000284 cmpq %rsi, %r9 + 0x4c, 0x8d, 0x63, 0x03, //0x00000280 leaq $3(%rbx), %r12 + 0x49, 0x39, 0xf4, //0x00000284 cmpq %rsi, %r12 0x0f, 0x83, 0x1e, 0x00, 0x00, 0x00, //0x00000287 jae LBB0_19 - 0x43, 0x8a, 0x04, 0x0c, //0x0000028d movb (%r12,%r9), %al + 0x43, 0x8a, 0x04, 0x21, //0x0000028d movb (%r9,%r12), %al 0x3c, 0x0d, //0x00000291 cmpb $13, %al 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00000293 je LBB0_19 0x3c, 0x20, //0x00000299 cmpb $32, %al 0x0f, 0x84, 0x0a, 0x00, 0x00, 0x00, //0x0000029b je LBB0_19 0x04, 0xf7, //0x000002a1 addb $-9, %al 0x3c, 0x01, //0x000002a3 cmpb $1, %al - 0x0f, 0x87, 0xc5, 0x25, 0x00, 0x00, //0x000002a5 ja LBB0_492 + 0x0f, 0x87, 0x03, 0x26, 0x00, 0x00, //0x000002a5 ja LBB0_492 //0x000002ab LBB0_19 0x48, 0x83, 0xc3, 0x04, //0x000002ab addq $4, %rbx 0x48, 0x39, 0xde, //0x000002af cmpq %rbx, %rsi - 0x0f, 0x86, 0x7b, 0x25, 0x00, 0x00, //0x000002b2 jbe LBB0_486 + 0x0f, 0x86, 0xb9, 0x25, 0x00, 0x00, //0x000002b2 jbe LBB0_486 0x48, 0x39, 0xde, //0x000002b8 cmpq %rbx, %rsi - 0x0f, 0x84, 0x90, 0x25, 0x00, 0x00, //0x000002bb je LBB0_489 - 0x49, 0x8d, 0x04, 0x34, //0x000002c1 leaq (%r12,%rsi), %rax + 0x0f, 0x84, 0xce, 0x25, 0x00, 0x00, //0x000002bb je LBB0_489 + 0x49, 0x8d, 0x04, 0x31, //0x000002c1 leaq (%r9,%rsi), %rax 0x48, 0xb9, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000002c5 movabsq $4294977024, %rcx 0x90, //0x000002cf .p2align 4, 0x90 //0x000002d0 LBB0_22 - 0x41, 0x0f, 0xbe, 0x14, 0x1c, //0x000002d0 movsbl (%r12,%rbx), %edx + 0x41, 0x0f, 0xbe, 0x14, 0x19, //0x000002d0 movsbl (%r9,%rbx), %edx 0x83, 0xfa, 0x20, //0x000002d5 cmpl $32, %edx - 0x0f, 0x87, 0x7f, 0x25, 0x00, 0x00, //0x000002d8 ja LBB0_491 + 0x0f, 0x87, 0xbd, 0x25, 0x00, 0x00, //0x000002d8 ja LBB0_491 0x48, 0x0f, 0xa3, 0xd1, //0x000002de btq %rdx, %rcx - 0x0f, 0x83, 0x75, 0x25, 0x00, 0x00, //0x000002e2 jae LBB0_491 + 0x0f, 0x83, 0xb3, 0x25, 0x00, 0x00, //0x000002e2 jae LBB0_491 0x48, 0x83, 0xc3, 0x01, //0x000002e8 addq $1, %rbx 0x48, 0x39, 0xde, //0x000002ec cmpq %rbx, %rsi 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x000002ef jne LBB0_22 - 0xe9, 0x5d, 0x25, 0x00, 0x00, //0x000002f5 jmp LBB0_490 + 0xe9, 0x9b, 0x25, 0x00, 0x00, //0x000002f5 jmp LBB0_490 //0x000002fa LBB0_25 0x49, 0x81, 0xfa, 0xff, 0x0f, 0x00, 0x00, //0x000002fa cmpq $4095, %r10 - 0x0f, 0x8f, 0x83, 0x26, 0x00, 0x00, //0x00000301 jg LBB0_597 + 0x0f, 0x8f, 0x2b, 0x27, 0x00, 0x00, //0x00000301 jg LBB0_602 0x49, 0x8d, 0x42, 0x01, //0x00000307 leaq $1(%r10), %rax 0x49, 0x89, 0x03, //0x0000030b movq %rax, (%r11) 0x4b, 0xc7, 0x44, 0xd3, 0x08, 0x00, 0x00, 0x00, 0x00, //0x0000030e movq $0, $8(%r11,%r10,8) @@ -170,7 +170,7 @@ var _text_skip_one = []byte{ 0x4d, 0x8b, 0x0b, //0x0000031b movq (%r11), %r9 0x4c, 0x89, 0xd0, //0x0000031e movq %r10, %rax 0x4d, 0x85, 0xc9, //0x00000321 testq %r9, %r9 - 0x0f, 0x84, 0xff, 0x30, 0x00, 0x00, //0x00000324 je LBB0_580 + 0x0f, 0x84, 0x90, 0x31, 0x00, 0x00, //0x00000324 je LBB0_586 //0x0000032a LBB0_29 0x4c, 0x89, 0xd1, //0x0000032a movq %r10, %rcx 0x48, 0x8b, 0x47, 0x08, //0x0000032d movq $8(%rdi), %rax @@ -230,7 +230,7 @@ var _text_skip_one = []byte{ //0x00000400 LBB0_46 0x48, 0x83, 0xc6, 0x04, //0x00000400 addq $4, %rsi 0x48, 0x39, 0xf0, //0x00000404 cmpq %rsi, %rax - 0x0f, 0x86, 0x35, 0x24, 0x00, 0x00, //0x00000407 jbe LBB0_487 + 0x0f, 0x86, 0x73, 0x24, 0x00, 0x00, //0x00000407 jbe LBB0_487 0x48, 0x39, 0xf0, //0x0000040d cmpq %rsi, %rax 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00000410 je LBB0_52 0x49, 0x8d, 0x14, 0x04, //0x00000416 leaq (%r12,%rax), %rdx @@ -255,14 +255,14 @@ var _text_skip_one = []byte{ //0x0000045c LBB0_54 0x48, 0x89, 0xf3, //0x0000045c movq %rsi, %rbx 0x48, 0x39, 0xc6, //0x0000045f cmpq %rax, %rsi - 0x0f, 0x83, 0xdd, 0x23, 0x00, 0x00, //0x00000462 jae LBB0_488 + 0x0f, 0x83, 0x1b, 0x24, 0x00, 0x00, //0x00000462 jae LBB0_488 //0x00000468 LBB0_55 0x48, 0x8d, 0x43, 0x01, //0x00000468 leaq $1(%rbx), %rax 0x49, 0x89, 0x00, //0x0000046c movq %rax, (%r8) 0x41, 0x0f, 0xbe, 0x14, 0x1c, //0x0000046f movsbl (%r12,%rbx), %edx 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000474 movq $-1, %rax 0x85, 0xd2, //0x0000047b testl %edx, %edx - 0x0f, 0x84, 0xa6, 0x2f, 0x00, 0x00, //0x0000047d je LBB0_580 + 0x0f, 0x84, 0x37, 0x30, 0x00, 0x00, //0x0000047d je LBB0_586 0x48, 0x89, 0xde, //0x00000483 movq %rbx, %rsi 0x4d, 0x8b, 0x13, //0x00000486 movq (%r11), %r10 0x4d, 0x8d, 0x4a, 0xff, //0x00000489 leaq $-1(%r10), %r9 @@ -272,8 +272,8 @@ var _text_skip_one = []byte{ 0x48, 0x89, 0x75, 0xb8, //0x00000499 movq %rsi, $-72(%rbp) 0x83, 0xc3, 0xff, //0x0000049d addl $-1, %ebx 0x83, 0xfb, 0x05, //0x000004a0 cmpl $5, %ebx - 0x0f, 0x87, 0x5e, 0x02, 0x00, 0x00, //0x000004a3 ja LBB0_88 - 0x48, 0x8d, 0x35, 0x78, 0x34, 0x00, 0x00, //0x000004a9 leaq $13432(%rip), %rsi /* LJTI0_1+0(%rip) */ + 0x0f, 0x87, 0x34, 0x02, 0x00, 0x00, //0x000004a3 ja LBB0_85 + 0x48, 0x8d, 0x35, 0x00, 0x35, 0x00, 0x00, //0x000004a9 leaq $13568(%rip), %rsi /* LJTI0_1+0(%rip) */ 0x48, 0x63, 0x0c, 0x9e, //0x000004b0 movslq (%rsi,%rbx,4), %rcx 0x48, 0x01, 0xf1, //0x000004b4 addq %rsi, %rcx 0xff, 0xe1, //0x000004b7 jmpq *%rcx @@ -281,34 +281,34 @@ var _text_skip_one = []byte{ 0x83, 0xfa, 0x2c, //0x000004b9 cmpl $44, %edx 0x0f, 0x84, 0x38, 0xfe, 0xff, 0xff, //0x000004bc je LBB0_25 0x83, 0xfa, 0x5d, //0x000004c2 cmpl $93, %edx - 0x0f, 0x84, 0x24, 0x02, 0x00, 0x00, //0x000004c5 je LBB0_87 - 0xe9, 0x32, 0x2f, 0x00, 0x00, //0x000004cb jmp LBB0_579 + 0x0f, 0x84, 0x8f, 0x04, 0x00, 0x00, //0x000004c5 je LBB0_126 + 0xe9, 0xc3, 0x2f, 0x00, 0x00, //0x000004cb jmp LBB0_585 //0x000004d0 LBB0_60 0x80, 0xfa, 0x5d, //0x000004d0 cmpb $93, %dl - 0x0f, 0x84, 0x16, 0x02, 0x00, 0x00, //0x000004d3 je LBB0_87 + 0x0f, 0x84, 0x81, 0x04, 0x00, 0x00, //0x000004d3 je LBB0_126 0x4b, 0xc7, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x00, //0x000004d9 movq $1, (%r11,%r10,8) - 0xe9, 0x24, 0x02, 0x00, 0x00, //0x000004e1 jmp LBB0_89 + 0xe9, 0xfa, 0x01, 0x00, 0x00, //0x000004e1 jmp LBB0_86 //0x000004e6 LBB0_62 0x80, 0xfa, 0x22, //0x000004e6 cmpb $34, %dl - 0x0f, 0x85, 0x13, 0x2f, 0x00, 0x00, //0x000004e9 jne LBB0_579 + 0x0f, 0x85, 0xa4, 0x2f, 0x00, 0x00, //0x000004e9 jne LBB0_585 0x4b, 0xc7, 0x04, 0xd3, 0x04, 0x00, 0x00, 0x00, //0x000004ef movq $4, (%r11,%r10,8) 0x49, 0x8b, 0x08, //0x000004f7 movq (%r8), %rcx 0x48, 0x8b, 0x47, 0x08, //0x000004fa movq $8(%rdi), %rax - 0xf6, 0x85, 0x68, 0xff, 0xff, 0xff, 0x20, //0x000004fe testb $32, $-152(%rbp) - 0x48, 0x89, 0x45, 0xa0, //0x00000505 movq %rax, $-96(%rbp) - 0x48, 0x89, 0x4d, 0x90, //0x00000509 movq %rcx, $-112(%rbp) - 0x0f, 0x85, 0xf9, 0x05, 0x00, 0x00, //0x0000050d jne LBB0_145 - 0x49, 0x89, 0xc1, //0x00000513 movq %rax, %r9 - 0x49, 0x29, 0xc9, //0x00000516 subq %rcx, %r9 - 0x0f, 0x84, 0x23, 0x31, 0x00, 0x00, //0x00000519 je LBB0_614 - 0x49, 0x83, 0xf9, 0x40, //0x0000051f cmpq $64, %r9 - 0x0f, 0x82, 0x1a, 0x1b, 0x00, 0x00, //0x00000523 jb LBB0_406 - 0x49, 0x89, 0xce, //0x00000529 movq %rcx, %r14 - 0x49, 0xf7, 0xd6, //0x0000052c notq %r14 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000052f movq $-1, $-56(%rbp) - 0x48, 0x89, 0xc8, //0x00000537 movq %rcx, %rax - 0x45, 0x31, 0xc0, //0x0000053a xorl %r8d, %r8d - 0x90, 0x90, 0x90, //0x0000053d .p2align 4, 0x90 + 0xf6, 0x45, 0x88, 0x20, //0x000004fe testb $32, $-120(%rbp) + 0x48, 0x89, 0x45, 0x98, //0x00000502 movq %rax, $-104(%rbp) + 0x48, 0x89, 0x4d, 0xa0, //0x00000506 movq %rcx, $-96(%rbp) + 0x0f, 0x85, 0x0c, 0x06, 0x00, 0x00, //0x0000050a jne LBB0_145 + 0x49, 0x89, 0xc1, //0x00000510 movq %rax, %r9 + 0x49, 0x29, 0xc9, //0x00000513 subq %rcx, %r9 + 0x0f, 0x84, 0xaf, 0x31, 0x00, 0x00, //0x00000516 je LBB0_619 + 0x49, 0x83, 0xf9, 0x40, //0x0000051c cmpq $64, %r9 + 0x0f, 0x82, 0x52, 0x1b, 0x00, 0x00, //0x00000520 jb LBB0_406 + 0x49, 0x89, 0xce, //0x00000526 movq %rcx, %r14 + 0x49, 0xf7, 0xd6, //0x00000529 notq %r14 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000052c movq $-1, $-56(%rbp) + 0x48, 0x89, 0xc8, //0x00000534 movq %rcx, %rax + 0x45, 0x31, 0xc0, //0x00000537 xorl %r8d, %r8d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000053a .p2align 4, 0x90 //0x00000540 LBB0_67 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00000540 movdqu (%r12,%rax), %xmm3 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00000546 movdqu $16(%r12,%rax), %xmm4 @@ -322,7 +322,7 @@ var _text_skip_one = []byte{ 0x66, 0x0f, 0xd7, 0xdf, //0x00000570 pmovmskb %xmm7, %ebx 0x66, 0x0f, 0x6f, 0xfd, //0x00000574 movdqa %xmm5, %xmm7 0x66, 0x0f, 0x74, 0xf8, //0x00000578 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x0000057c pmovmskb %xmm7, %edi + 0x66, 0x0f, 0xd7, 0xf7, //0x0000057c pmovmskb %xmm7, %esi 0x66, 0x0f, 0x6f, 0xfe, //0x00000580 movdqa %xmm6, %xmm7 0x66, 0x0f, 0x74, 0xf8, //0x00000584 pcmpeqb %xmm0, %xmm7 0x66, 0x0f, 0xd7, 0xd7, //0x00000588 pmovmskb %xmm7, %edx @@ -331,20 +331,20 @@ var _text_skip_one = []byte{ 0x66, 0x0f, 0x74, 0xe1, //0x00000595 pcmpeqb %xmm1, %xmm4 0x66, 0x0f, 0xd7, 0xcc, //0x00000599 pmovmskb %xmm4, %ecx 0x66, 0x0f, 0x74, 0xe9, //0x0000059d pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x000005a1 pmovmskb %xmm5, %esi + 0x66, 0x0f, 0xd7, 0xfd, //0x000005a1 pmovmskb %xmm5, %edi 0x66, 0x0f, 0x74, 0xf1, //0x000005a5 pcmpeqb %xmm1, %xmm6 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x000005a9 pmovmskb %xmm6, %r15d 0x48, 0xc1, 0xe2, 0x30, //0x000005ae shlq $48, %rdx - 0x48, 0xc1, 0xe7, 0x20, //0x000005b2 shlq $32, %rdi - 0x48, 0x09, 0xd7, //0x000005b6 orq %rdx, %rdi + 0x48, 0xc1, 0xe6, 0x20, //0x000005b2 shlq $32, %rsi + 0x48, 0x09, 0xd6, //0x000005b6 orq %rdx, %rsi 0x48, 0xc1, 0xe3, 0x10, //0x000005b9 shlq $16, %rbx - 0x48, 0x09, 0xfb, //0x000005bd orq %rdi, %rbx + 0x48, 0x09, 0xf3, //0x000005bd orq %rsi, %rbx 0x49, 0x09, 0xda, //0x000005c0 orq %rbx, %r10 0x49, 0xc1, 0xe7, 0x30, //0x000005c3 shlq $48, %r15 - 0x48, 0xc1, 0xe6, 0x20, //0x000005c7 shlq $32, %rsi - 0x4c, 0x09, 0xfe, //0x000005cb orq %r15, %rsi + 0x48, 0xc1, 0xe7, 0x20, //0x000005c7 shlq $32, %rdi + 0x4c, 0x09, 0xff, //0x000005cb orq %r15, %rdi 0x48, 0xc1, 0xe1, 0x10, //0x000005ce shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x000005d2 orq %rsi, %rcx + 0x48, 0x09, 0xf9, //0x000005d2 orq %rdi, %rcx 0x49, 0x09, 0xcb, //0x000005d5 orq %rcx, %r11 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000005d8 jne LBB0_76 0x4d, 0x85, 0xc0, //0x000005de testq %r8, %r8 @@ -358,7 +358,7 @@ var _text_skip_one = []byte{ 0x48, 0x83, 0xc0, 0x40, //0x000005fb addq $64, %rax 0x49, 0x83, 0xf9, 0x3f, //0x000005ff cmpq $63, %r9 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x00000603 ja LBB0_67 - 0xe9, 0xf3, 0x12, 0x00, 0x00, //0x00000609 jmp LBB0_71 + 0xe9, 0x28, 0x13, 0x00, 0x00, //0x00000609 jmp LBB0_71 //0x0000060e LBB0_76 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000060e cmpq $-1, $-56(%rbp) 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00000613 jne LBB0_78 @@ -395,3595 +395,3623 @@ var _text_skip_one = []byte{ 0x4c, 0x8b, 0x5d, 0xa8, //0x00000685 movq $-88(%rbp), %r11 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000689 movabsq $4294977024, %r14 0x4c, 0x8b, 0x55, 0xb8, //0x00000693 movq $-72(%rbp), %r10 - 0xe9, 0x80, 0x09, 0x00, 0x00, //0x00000697 jmp LBB0_215 + 0xe9, 0xa1, 0x09, 0x00, 0x00, //0x00000697 jmp LBB0_215 //0x0000069c LBB0_80 - 0x83, 0xfa, 0x2c, //0x0000069c cmpl $44, %edx - 0x0f, 0x85, 0x41, 0x00, 0x00, 0x00, //0x0000069f jne LBB0_86 - 0x49, 0x81, 0xfa, 0xff, 0x0f, 0x00, 0x00, //0x000006a5 cmpq $4095, %r10 - 0x0f, 0x8f, 0xd8, 0x22, 0x00, 0x00, //0x000006ac jg LBB0_597 - 0x49, 0x8d, 0x42, 0x01, //0x000006b2 leaq $1(%r10), %rax - 0x49, 0x89, 0x03, //0x000006b6 movq %rax, (%r11) - 0x4b, 0xc7, 0x44, 0xd3, 0x08, 0x03, 0x00, 0x00, 0x00, //0x000006b9 movq $3, $8(%r11,%r10,8) - 0xe9, 0x50, 0xfc, 0xff, 0xff, //0x000006c2 jmp LBB0_27 - //0x000006c7 LBB0_83 - 0x80, 0xfa, 0x3a, //0x000006c7 cmpb $58, %dl - 0x0f, 0x85, 0x32, 0x2d, 0x00, 0x00, //0x000006ca jne LBB0_579 - 0x4b, 0xc7, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x00, //0x000006d0 movq $0, (%r11,%r10,8) + 0x80, 0xfa, 0x3a, //0x0000069c cmpb $58, %dl + 0x0f, 0x85, 0xee, 0x2d, 0x00, 0x00, //0x0000069f jne LBB0_585 + 0x4b, 0xc7, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x00, //0x000006a5 movq $0, (%r11,%r10,8) + 0xe9, 0x65, 0xfc, 0xff, 0xff, //0x000006ad jmp LBB0_27 + //0x000006b2 LBB0_82 + 0x83, 0xfa, 0x2c, //0x000006b2 cmpl $44, %edx + 0x0f, 0x85, 0x96, 0x02, 0x00, 0x00, //0x000006b5 jne LBB0_125 + 0x49, 0x81, 0xfa, 0xff, 0x0f, 0x00, 0x00, //0x000006bb cmpq $4095, %r10 + 0x0f, 0x8f, 0x6a, 0x23, 0x00, 0x00, //0x000006c2 jg LBB0_602 + 0x49, 0x8d, 0x42, 0x01, //0x000006c8 leaq $1(%r10), %rax + 0x49, 0x89, 0x03, //0x000006cc movq %rax, (%r11) + 0x4b, 0xc7, 0x44, 0xd3, 0x08, 0x03, 0x00, 0x00, 0x00, //0x000006cf movq $3, $8(%r11,%r10,8) 0xe9, 0x3a, 0xfc, 0xff, 0xff, //0x000006d8 jmp LBB0_27 //0x000006dd LBB0_85 - 0x83, 0xfa, 0x22, //0x000006dd cmpl $34, %edx - 0x0f, 0x84, 0x82, 0x02, 0x00, 0x00, //0x000006e0 je LBB0_127 - //0x000006e6 LBB0_86 - 0x83, 0xfa, 0x7d, //0x000006e6 cmpl $125, %edx - 0x0f, 0x85, 0x13, 0x2d, 0x00, 0x00, //0x000006e9 jne LBB0_579 - //0x000006ef LBB0_87 - 0x4d, 0x89, 0x0b, //0x000006ef movq %r9, (%r11) - 0x4c, 0x8b, 0x55, 0xb8, //0x000006f2 movq $-72(%rbp), %r10 - 0x4c, 0x89, 0xd0, //0x000006f6 movq %r10, %rax - 0x4d, 0x85, 0xc9, //0x000006f9 testq %r9, %r9 - 0x0f, 0x85, 0x28, 0xfc, 0xff, 0xff, //0x000006fc jne LBB0_29 - 0xe9, 0x22, 0x2d, 0x00, 0x00, //0x00000702 jmp LBB0_580 - //0x00000707 LBB0_88 - 0x4d, 0x89, 0x0b, //0x00000707 movq %r9, (%r11) - //0x0000070a LBB0_89 - 0x83, 0xfa, 0x7b, //0x0000070a cmpl $123, %edx - 0x4c, 0x8b, 0x55, 0xb8, //0x0000070d movq $-72(%rbp), %r10 - 0x0f, 0x87, 0xeb, 0x2c, 0x00, 0x00, //0x00000711 ja LBB0_579 - 0x89, 0xd1, //0x00000717 movl %edx, %ecx - 0x48, 0x8d, 0x15, 0x20, 0x32, 0x00, 0x00, //0x00000719 leaq $12832(%rip), %rdx /* LJTI0_2+0(%rip) */ - 0x48, 0x63, 0x0c, 0x8a, //0x00000720 movslq (%rdx,%rcx,4), %rcx - 0x48, 0x01, 0xd1, //0x00000724 addq %rdx, %rcx - 0xff, 0xe1, //0x00000727 jmpq *%rcx - //0x00000729 LBB0_91 - 0x4c, 0x8b, 0x57, 0x08, //0x00000729 movq $8(%rdi), %r10 - 0x4d, 0x8b, 0x08, //0x0000072d movq (%r8), %r9 - 0x49, 0x8d, 0x41, 0xff, //0x00000730 leaq $-1(%r9), %rax - 0x49, 0x29, 0xc2, //0x00000734 subq %rax, %r10 - 0x0f, 0x84, 0xb0, 0x2c, 0x00, 0x00, //0x00000737 je LBB0_577 - 0x4f, 0x8d, 0x1c, 0x0c, //0x0000073d leaq (%r12,%r9), %r11 - 0x49, 0x83, 0xc3, 0xff, //0x00000741 addq $-1, %r11 - 0x41, 0x80, 0x3b, 0x30, //0x00000745 cmpb $48, (%r11) - 0x0f, 0x85, 0x3b, 0x00, 0x00, 0x00, //0x00000749 jne LBB0_96 - 0x41, 0xbd, 0x01, 0x00, 0x00, 0x00, //0x0000074f movl $1, %r13d - 0x49, 0x83, 0xfa, 0x01, //0x00000755 cmpq $1, %r10 - 0x0f, 0x84, 0x5c, 0x08, 0x00, 0x00, //0x00000759 je LBB0_211 - 0x48, 0x8b, 0x4d, 0xc0, //0x0000075f movq $-64(%rbp), %rcx - 0x42, 0x8a, 0x0c, 0x09, //0x00000763 movb (%rcx,%r9), %cl - 0x80, 0xc1, 0xd2, //0x00000767 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x0000076a cmpb $55, %cl - 0x0f, 0x87, 0x48, 0x08, 0x00, 0x00, //0x0000076d ja LBB0_211 - 0x0f, 0xb6, 0xc9, //0x00000773 movzbl %cl, %ecx - 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00000776 movabsq $36028797027352577, %rdx - 0x48, 0x0f, 0xa3, 0xca, //0x00000780 btq %rcx, %rdx - 0x0f, 0x83, 0x31, 0x08, 0x00, 0x00, //0x00000784 jae LBB0_211 - //0x0000078a LBB0_96 - 0x49, 0x83, 0xfa, 0x10, //0x0000078a cmpq $16, %r10 - 0x0f, 0x82, 0xe8, 0x17, 0x00, 0x00, //0x0000078e jb LBB0_390 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00000794 movq $-1, %r15 - 0x45, 0x31, 0xed, //0x0000079b xorl %r13d, %r13d - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x0000079e movq $-1, %r14 - 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x000007a5 movq $-1, %r12 - 0x4c, 0x89, 0xd7, //0x000007ac movq %r10, %rdi - 0x90, //0x000007af .p2align 4, 0x90 - //0x000007b0 LBB0_98 - 0xf3, 0x43, 0x0f, 0x6f, 0x1c, 0x2b, //0x000007b0 movdqu (%r11,%r13), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x000007b6 movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0x64, 0xe0, //0x000007ba pcmpgtb %xmm8, %xmm4 - 0x66, 0x41, 0x0f, 0x6f, 0xee, //0x000007bf movdqa %xmm14, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x000007c4 pcmpgtb %xmm3, %xmm5 - 0x66, 0x0f, 0xdb, 0xec, //0x000007c8 pand %xmm4, %xmm5 - 0x66, 0x0f, 0x6f, 0xe3, //0x000007cc movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0x74, 0xe1, //0x000007d0 pcmpeqb %xmm9, %xmm4 - 0x66, 0x0f, 0x6f, 0xf3, //0x000007d5 movdqa %xmm3, %xmm6 - 0x66, 0x41, 0x0f, 0x74, 0xf2, //0x000007d9 pcmpeqb %xmm10, %xmm6 - 0x66, 0x0f, 0xeb, 0xf4, //0x000007de por %xmm4, %xmm6 - 0x66, 0x0f, 0x6f, 0xe3, //0x000007e2 movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xe3, //0x000007e6 pand %xmm11, %xmm4 - 0x66, 0x41, 0x0f, 0x74, 0xdc, //0x000007eb pcmpeqb %xmm12, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xe5, //0x000007f0 pcmpeqb %xmm13, %xmm4 - 0x66, 0x0f, 0xd7, 0xf4, //0x000007f5 pmovmskb %xmm4, %esi - 0x66, 0x0f, 0xeb, 0xe3, //0x000007f9 por %xmm3, %xmm4 - 0x66, 0x0f, 0xeb, 0xee, //0x000007fd por %xmm6, %xmm5 - 0x66, 0x0f, 0xeb, 0xec, //0x00000801 por %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xdb, //0x00000805 pmovmskb %xmm3, %ebx - 0x66, 0x44, 0x0f, 0xd7, 0xc6, //0x00000809 pmovmskb %xmm6, %r8d - 0x66, 0x0f, 0xd7, 0xcd, //0x0000080e pmovmskb %xmm5, %ecx - 0xf7, 0xd1, //0x00000812 notl %ecx - 0x0f, 0xbc, 0xc9, //0x00000814 bsfl %ecx, %ecx - 0x83, 0xf9, 0x10, //0x00000817 cmpl $16, %ecx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000081a je LBB0_100 - 0xba, 0xff, 0xff, 0xff, 0xff, //0x00000820 movl $-1, %edx - 0xd3, 0xe2, //0x00000825 shll %cl, %edx - 0xf7, 0xd2, //0x00000827 notl %edx - 0x21, 0xd3, //0x00000829 andl %edx, %ebx - 0x21, 0xd6, //0x0000082b andl %edx, %esi - 0x44, 0x21, 0xc2, //0x0000082d andl %r8d, %edx - 0x41, 0x89, 0xd0, //0x00000830 movl %edx, %r8d - //0x00000833 LBB0_100 - 0x8d, 0x53, 0xff, //0x00000833 leal $-1(%rbx), %edx - 0x21, 0xda, //0x00000836 andl %ebx, %edx - 0x0f, 0x85, 0x79, 0x10, 0x00, 0x00, //0x00000838 jne LBB0_349 - 0x8d, 0x56, 0xff, //0x0000083e leal $-1(%rsi), %edx - 0x21, 0xf2, //0x00000841 andl %esi, %edx - 0x0f, 0x85, 0x6e, 0x10, 0x00, 0x00, //0x00000843 jne LBB0_349 - 0x41, 0x8d, 0x50, 0xff, //0x00000849 leal $-1(%r8), %edx - 0x44, 0x21, 0xc2, //0x0000084d andl %r8d, %edx - 0x0f, 0x85, 0x61, 0x10, 0x00, 0x00, //0x00000850 jne LBB0_349 - 0x85, 0xdb, //0x00000856 testl %ebx, %ebx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000858 je LBB0_106 - 0x0f, 0xbc, 0xdb, //0x0000085e bsfl %ebx, %ebx - 0x49, 0x83, 0xfc, 0xff, //0x00000861 cmpq $-1, %r12 - 0x0f, 0x85, 0xa6, 0x13, 0x00, 0x00, //0x00000865 jne LBB0_356 - 0x4c, 0x01, 0xeb, //0x0000086b addq %r13, %rbx - 0x49, 0x89, 0xdc, //0x0000086e movq %rbx, %r12 - //0x00000871 LBB0_106 - 0x85, 0xf6, //0x00000871 testl %esi, %esi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000873 je LBB0_109 - 0x0f, 0xbc, 0xf6, //0x00000879 bsfl %esi, %esi - 0x49, 0x83, 0xfe, 0xff, //0x0000087c cmpq $-1, %r14 - 0x0f, 0x85, 0x92, 0x13, 0x00, 0x00, //0x00000880 jne LBB0_357 - 0x4c, 0x01, 0xee, //0x00000886 addq %r13, %rsi - 0x49, 0x89, 0xf6, //0x00000889 movq %rsi, %r14 - //0x0000088c LBB0_109 - 0x45, 0x85, 0xc0, //0x0000088c testl %r8d, %r8d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x0000088f je LBB0_112 - 0x41, 0x0f, 0xbc, 0xd0, //0x00000895 bsfl %r8d, %edx - 0x49, 0x83, 0xff, 0xff, //0x00000899 cmpq $-1, %r15 - 0x0f, 0x85, 0x7c, 0x13, 0x00, 0x00, //0x0000089d jne LBB0_358 - 0x4c, 0x01, 0xea, //0x000008a3 addq %r13, %rdx - 0x49, 0x89, 0xd7, //0x000008a6 movq %rdx, %r15 - //0x000008a9 LBB0_112 - 0x83, 0xf9, 0x10, //0x000008a9 cmpl $16, %ecx - 0x0f, 0x85, 0x68, 0x04, 0x00, 0x00, //0x000008ac jne LBB0_171 - 0x48, 0x83, 0xc7, 0xf0, //0x000008b2 addq $-16, %rdi - 0x49, 0x83, 0xc5, 0x10, //0x000008b6 addq $16, %r13 - 0x48, 0x83, 0xff, 0x0f, //0x000008ba cmpq $15, %rdi - 0x0f, 0x87, 0xec, 0xfe, 0xff, 0xff, //0x000008be ja LBB0_98 - 0x4b, 0x8d, 0x0c, 0x2b, //0x000008c4 leaq (%r11,%r13), %rcx - 0x49, 0x89, 0xc8, //0x000008c8 movq %rcx, %r8 - 0x4d, 0x39, 0xea, //0x000008cb cmpq %r13, %r10 - 0x0f, 0x84, 0x73, 0x06, 0x00, 0x00, //0x000008ce je LBB0_200 - //0x000008d4 LBB0_115 - 0x4c, 0x8d, 0x04, 0x39, //0x000008d4 leaq (%rcx,%rdi), %r8 - 0x48, 0x8b, 0x55, 0x98, //0x000008d8 movq $-104(%rbp), %rdx - 0x4c, 0x89, 0xce, //0x000008dc movq %r9, %rsi - 0x4c, 0x8d, 0x0c, 0x0a, //0x000008df leaq (%rdx,%rcx), %r9 - 0x49, 0x89, 0xf2, //0x000008e3 movq %rsi, %r10 - 0x49, 0x29, 0xf1, //0x000008e6 subq %rsi, %r9 - 0x31, 0xd2, //0x000008e9 xorl %edx, %edx - 0xe9, 0x1d, 0x00, 0x00, 0x00, //0x000008eb jmp LBB0_119 - //0x000008f0 LBB0_116 - 0x49, 0x83, 0xff, 0xff, //0x000008f0 cmpq $-1, %r15 - 0x0f, 0x85, 0xee, 0x0f, 0x00, 0x00, //0x000008f4 jne LBB0_354 - 0x4d, 0x8d, 0x3c, 0x11, //0x000008fa leaq (%r9,%rdx), %r15 - 0x90, 0x90, //0x000008fe .p2align 4, 0x90 - //0x00000900 LBB0_118 - 0x48, 0x83, 0xc2, 0x01, //0x00000900 addq $1, %rdx - 0x48, 0x39, 0xd7, //0x00000904 cmpq %rdx, %rdi - 0x0f, 0x84, 0x37, 0x06, 0x00, 0x00, //0x00000907 je LBB0_199 - //0x0000090d LBB0_119 - 0x0f, 0xbe, 0x1c, 0x11, //0x0000090d movsbl (%rcx,%rdx), %ebx - 0x8d, 0x73, 0xd0, //0x00000911 leal $-48(%rbx), %esi - 0x83, 0xfe, 0x0a, //0x00000914 cmpl $10, %esi - 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00000917 jb LBB0_118 - 0x8d, 0x73, 0xd5, //0x0000091d leal $-43(%rbx), %esi - 0x83, 0xfe, 0x1a, //0x00000920 cmpl $26, %esi - 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00000923 ja LBB0_124 - 0x48, 0x8d, 0x1d, 0x6c, 0x32, 0x00, 0x00, //0x00000929 leaq $12908(%rip), %rbx /* LJTI0_4+0(%rip) */ - 0x48, 0x63, 0x34, 0xb3, //0x00000930 movslq (%rbx,%rsi,4), %rsi - 0x48, 0x01, 0xde, //0x00000934 addq %rbx, %rsi - 0xff, 0xe6, //0x00000937 jmpq *%rsi - //0x00000939 LBB0_122 - 0x49, 0x83, 0xfc, 0xff, //0x00000939 cmpq $-1, %r12 - 0x0f, 0x85, 0xa5, 0x0f, 0x00, 0x00, //0x0000093d jne LBB0_354 - 0x4d, 0x8d, 0x24, 0x11, //0x00000943 leaq (%r9,%rdx), %r12 - 0xe9, 0xb4, 0xff, 0xff, 0xff, //0x00000947 jmp LBB0_118 - //0x0000094c LBB0_124 - 0x83, 0xfb, 0x65, //0x0000094c cmpl $101, %ebx - 0x0f, 0x85, 0xe9, 0x05, 0x00, 0x00, //0x0000094f jne LBB0_198 - //0x00000955 LBB0_125 - 0x49, 0x83, 0xfe, 0xff, //0x00000955 cmpq $-1, %r14 - 0x0f, 0x85, 0x89, 0x0f, 0x00, 0x00, //0x00000959 jne LBB0_354 - 0x4d, 0x8d, 0x34, 0x11, //0x0000095f leaq (%r9,%rdx), %r14 - 0xe9, 0x98, 0xff, 0xff, 0xff, //0x00000963 jmp LBB0_118 - //0x00000968 LBB0_127 - 0x4b, 0xc7, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x00, //0x00000968 movq $2, (%r11,%r10,8) - 0x49, 0x8b, 0x00, //0x00000970 movq (%r8), %rax - 0x4c, 0x8b, 0x4f, 0x08, //0x00000973 movq $8(%rdi), %r9 - 0xf6, 0x85, 0x68, 0xff, 0xff, 0xff, 0x20, //0x00000977 testb $32, $-152(%rbp) - 0x48, 0x89, 0x45, 0x90, //0x0000097e movq %rax, $-112(%rbp) - 0x0f, 0x85, 0xa0, 0x03, 0x00, 0x00, //0x00000982 jne LBB0_172 - 0x4d, 0x89, 0xcd, //0x00000988 movq %r9, %r13 - 0x49, 0x29, 0xc1, //0x0000098b subq %rax, %r9 - 0x0f, 0x84, 0xb7, 0x2c, 0x00, 0x00, //0x0000098e je LBB0_617 - 0x49, 0x83, 0xf9, 0x40, //0x00000994 cmpq $64, %r9 - 0x0f, 0x82, 0x6b, 0x17, 0x00, 0x00, //0x00000998 jb LBB0_412 - 0x49, 0x89, 0xc6, //0x0000099e movq %rax, %r14 - 0x49, 0xf7, 0xd6, //0x000009a1 notq %r14 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000009a4 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x000009ac xorl %r8d, %r8d - 0x90, //0x000009af .p2align 4, 0x90 - //0x000009b0 LBB0_131 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x000009b0 movdqu (%r12,%rax), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x000009b6 movdqu $16(%r12,%rax), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x000009bd movdqu $32(%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x000009c4 movdqu $48(%r12,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xfb, //0x000009cb movdqa %xmm3, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000009cf pcmpeqb %xmm0, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x000009d3 pmovmskb %xmm7, %r10d - 0x66, 0x0f, 0x6f, 0xfc, //0x000009d8 movdqa %xmm4, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000009dc pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xcf, //0x000009e0 pmovmskb %xmm7, %ecx - 0x66, 0x0f, 0x6f, 0xfd, //0x000009e4 movdqa %xmm5, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000009e8 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x000009ec pmovmskb %xmm7, %edi - 0x66, 0x0f, 0x6f, 0xfe, //0x000009f0 movdqa %xmm6, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000009f4 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xd7, //0x000009f8 pmovmskb %xmm7, %edx - 0x66, 0x0f, 0x74, 0xd9, //0x000009fc pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000a00 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x74, 0xe1, //0x00000a05 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xdc, //0x00000a09 pmovmskb %xmm4, %ebx - 0x66, 0x0f, 0x74, 0xe9, //0x00000a0d pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00000a11 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x74, 0xf1, //0x00000a15 pcmpeqb %xmm1, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00000a19 pmovmskb %xmm6, %r15d - 0x48, 0xc1, 0xe2, 0x30, //0x00000a1e shlq $48, %rdx - 0x48, 0xc1, 0xe7, 0x20, //0x00000a22 shlq $32, %rdi - 0x48, 0x09, 0xd7, //0x00000a26 orq %rdx, %rdi - 0x48, 0xc1, 0xe1, 0x10, //0x00000a29 shlq $16, %rcx - 0x48, 0x09, 0xf9, //0x00000a2d orq %rdi, %rcx - 0x49, 0x09, 0xca, //0x00000a30 orq %rcx, %r10 - 0x49, 0xc1, 0xe7, 0x30, //0x00000a33 shlq $48, %r15 - 0x48, 0xc1, 0xe6, 0x20, //0x00000a37 shlq $32, %rsi - 0x4c, 0x09, 0xfe, //0x00000a3b orq %r15, %rsi - 0x48, 0xc1, 0xe3, 0x10, //0x00000a3e shlq $16, %rbx - 0x48, 0x09, 0xf3, //0x00000a42 orq %rsi, %rbx - 0x49, 0x09, 0xdb, //0x00000a45 orq %rbx, %r11 - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x00000a48 jne LBB0_141 - 0x4d, 0x85, 0xc0, //0x00000a4e testq %r8, %r8 - 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x00000a51 jne LBB0_143 - 0x45, 0x31, 0xc0, //0x00000a57 xorl %r8d, %r8d - 0x4d, 0x85, 0xd2, //0x00000a5a testq %r10, %r10 - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x00000a5d jne LBB0_144 - //0x00000a63 LBB0_134 - 0x49, 0x83, 0xc1, 0xc0, //0x00000a63 addq $-64, %r9 - 0x49, 0x83, 0xc6, 0xc0, //0x00000a67 addq $-64, %r14 - 0x48, 0x83, 0xc0, 0x40, //0x00000a6b addq $64, %rax - 0x49, 0x83, 0xf9, 0x3f, //0x00000a6f cmpq $63, %r9 - 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x00000a73 ja LBB0_131 - 0xe9, 0x24, 0x10, 0x00, 0x00, //0x00000a79 jmp LBB0_135 - //0x00000a7e LBB0_141 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00000a7e cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00000a83 jne LBB0_143 - 0x49, 0x0f, 0xbc, 0xcb, //0x00000a89 bsfq %r11, %rcx - 0x48, 0x01, 0xc1, //0x00000a8d addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00000a90 movq %rcx, $-56(%rbp) - //0x00000a94 LBB0_143 - 0x4c, 0x89, 0xc1, //0x00000a94 movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00000a97 notq %rcx - 0x4c, 0x21, 0xd9, //0x00000a9a andq %r11, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x00000a9d leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xc2, //0x00000aa1 orq %r8, %rdx - 0x48, 0x89, 0xd6, //0x00000aa4 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000aa7 notq %rsi - 0x4c, 0x21, 0xde, //0x00000aaa andq %r11, %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000aad movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfe, //0x00000ab7 andq %rdi, %rsi - 0x45, 0x31, 0xc0, //0x00000aba xorl %r8d, %r8d - 0x48, 0x01, 0xce, //0x00000abd addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc0, //0x00000ac0 setb %r8b - 0x48, 0x01, 0xf6, //0x00000ac4 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000ac7 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00000ad1 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00000ad4 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000ad7 notq %rsi - 0x49, 0x21, 0xf2, //0x00000ada andq %rsi, %r10 - 0x4d, 0x85, 0xd2, //0x00000add testq %r10, %r10 - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000ae0 je LBB0_134 - //0x00000ae6 LBB0_144 - 0x49, 0x0f, 0xbc, 0xc2, //0x00000ae6 bsfq %r10, %rax - 0x4c, 0x29, 0xf0, //0x00000aea subq %r14, %rax - 0x4c, 0x8b, 0x45, 0xd0, //0x00000aed movq $-48(%rbp), %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x00000af1 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x5d, 0xa8, //0x00000af5 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000af9 movabsq $4294977024, %r14 - 0x4c, 0x8b, 0x55, 0xb8, //0x00000b03 movq $-72(%rbp), %r10 - 0xe9, 0x7c, 0x05, 0x00, 0x00, //0x00000b07 jmp LBB0_225 - //0x00000b0c LBB0_145 - 0x48, 0x89, 0xca, //0x00000b0c movq %rcx, %rdx - 0x49, 0x89, 0xc2, //0x00000b0f movq %rax, %r10 - 0x49, 0x29, 0xca, //0x00000b12 subq %rcx, %r10 - 0x0f, 0x84, 0x38, 0x2b, 0x00, 0x00, //0x00000b15 je LBB0_615 - 0x49, 0x83, 0xfa, 0x40, //0x00000b1b cmpq $64, %r10 - 0x0f, 0x82, 0x40, 0x15, 0x00, 0x00, //0x00000b1f jb LBB0_407 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000b25 movq $-1, $-56(%rbp) - 0x48, 0x8b, 0x45, 0x90, //0x00000b2d movq $-112(%rbp), %rax - 0x45, 0x31, 0xc0, //0x00000b31 xorl %r8d, %r8d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000b34 .p2align 4, 0x90 - //0x00000b40 LBB0_148 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00000b40 movdqu (%r12,%rax), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x10, //0x00000b46 movdqu $16(%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x04, 0x20, //0x00000b4d movdqu $32(%r12,%rax), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000b54 movdqu $48(%r12,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xe3, //0x00000b5b movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x00000b5f pcmpeqb %xmm0, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xf4, //0x00000b63 pmovmskb %xmm4, %r14d - 0x66, 0x0f, 0x6f, 0xe5, //0x00000b68 movdqa %xmm5, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x00000b6c pcmpeqb %xmm0, %xmm4 - 0x66, 0x0f, 0xd7, 0xdc, //0x00000b70 pmovmskb %xmm4, %ebx - 0x66, 0x0f, 0x6f, 0xe7, //0x00000b74 movdqa %xmm7, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x00000b78 pcmpeqb %xmm0, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xdc, //0x00000b7c pmovmskb %xmm4, %r11d - 0x66, 0x0f, 0x6f, 0xe6, //0x00000b81 movdqa %xmm6, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x00000b85 pcmpeqb %xmm0, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xfc, //0x00000b89 pmovmskb %xmm4, %r15d - 0x66, 0x0f, 0x6f, 0xe3, //0x00000b8e movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x74, 0xe1, //0x00000b92 pcmpeqb %xmm1, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xec, //0x00000b96 pmovmskb %xmm4, %r13d - 0x66, 0x0f, 0x6f, 0xe5, //0x00000b9b movdqa %xmm5, %xmm4 - 0x66, 0x0f, 0x74, 0xe1, //0x00000b9f pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x00000ba3 pmovmskb %xmm4, %edx - 0x66, 0x0f, 0x6f, 0xe7, //0x00000ba7 movdqa %xmm7, %xmm4 - 0x66, 0x0f, 0x74, 0xe1, //0x00000bab pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x00000baf pmovmskb %xmm4, %ecx - 0x66, 0x0f, 0x6f, 0xe6, //0x00000bb3 movdqa %xmm6, %xmm4 - 0x66, 0x0f, 0x74, 0xe1, //0x00000bb7 pcmpeqb %xmm1, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xe4, //0x00000bbb pmovmskb %xmm4, %r12d - 0x66, 0x0f, 0x6f, 0xe2, //0x00000bc0 movdqa %xmm2, %xmm4 - 0x66, 0x0f, 0x64, 0xe5, //0x00000bc4 pcmpgtb %xmm5, %xmm4 - 0x66, 0x41, 0x0f, 0x64, 0xef, //0x00000bc8 pcmpgtb %xmm15, %xmm5 - 0x66, 0x0f, 0xdb, 0xec, //0x00000bcd pand %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00000bd1 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x6f, 0xe2, //0x00000bd5 movdqa %xmm2, %xmm4 - 0x66, 0x0f, 0x64, 0xe7, //0x00000bd9 pcmpgtb %xmm7, %xmm4 - 0x66, 0x41, 0x0f, 0x64, 0xff, //0x00000bdd pcmpgtb %xmm15, %xmm7 - 0x66, 0x0f, 0xdb, 0xfc, //0x00000be2 pand %xmm4, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x00000be6 pmovmskb %xmm7, %edi - 0x66, 0x0f, 0x6f, 0xe2, //0x00000bea movdqa %xmm2, %xmm4 - 0x66, 0x0f, 0x64, 0xe6, //0x00000bee pcmpgtb %xmm6, %xmm4 - 0x66, 0x41, 0x0f, 0x64, 0xf7, //0x00000bf2 pcmpgtb %xmm15, %xmm6 - 0x66, 0x0f, 0xdb, 0xf4, //0x00000bf7 pand %xmm4, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xce, //0x00000bfb pmovmskb %xmm6, %r9d - 0x49, 0xc1, 0xe7, 0x30, //0x00000c00 shlq $48, %r15 - 0x49, 0xc1, 0xe3, 0x20, //0x00000c04 shlq $32, %r11 - 0x4d, 0x09, 0xfb, //0x00000c08 orq %r15, %r11 - 0x48, 0xc1, 0xe3, 0x10, //0x00000c0b shlq $16, %rbx - 0x4c, 0x09, 0xdb, //0x00000c0f orq %r11, %rbx - 0x49, 0x09, 0xde, //0x00000c12 orq %rbx, %r14 - 0x49, 0xc1, 0xe4, 0x30, //0x00000c15 shlq $48, %r12 - 0x48, 0xc1, 0xe1, 0x20, //0x00000c19 shlq $32, %rcx - 0x4c, 0x09, 0xe1, //0x00000c1d orq %r12, %rcx - 0x48, 0xc1, 0xe2, 0x10, //0x00000c20 shlq $16, %rdx - 0x48, 0x09, 0xca, //0x00000c24 orq %rcx, %rdx - 0x49, 0xc1, 0xe1, 0x30, //0x00000c27 shlq $48, %r9 - 0x48, 0xc1, 0xe7, 0x20, //0x00000c2b shlq $32, %rdi - 0x4c, 0x09, 0xcf, //0x00000c2f orq %r9, %rdi - 0x48, 0xc1, 0xe6, 0x10, //0x00000c32 shlq $16, %rsi - 0x48, 0x09, 0xfe, //0x00000c36 orq %rdi, %rsi - 0x49, 0x09, 0xd5, //0x00000c39 orq %rdx, %r13 - 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00000c3c jne LBB0_165 - 0x4d, 0x85, 0xc0, //0x00000c42 testq %r8, %r8 - 0x0f, 0x85, 0x67, 0x00, 0x00, 0x00, //0x00000c45 jne LBB0_167 - 0x45, 0x31, 0xc0, //0x00000c4b xorl %r8d, %r8d - 0x4c, 0x8b, 0x65, 0xc0, //0x00000c4e movq $-64(%rbp), %r12 - //0x00000c52 LBB0_151 - 0x66, 0x0f, 0x6f, 0xe2, //0x00000c52 movdqa %xmm2, %xmm4 - 0x66, 0x0f, 0x64, 0xe3, //0x00000c56 pcmpgtb %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0x64, 0xdf, //0x00000c5a pcmpgtb %xmm15, %xmm3 - 0x66, 0x0f, 0xdb, 0xdc, //0x00000c5f pand %xmm4, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00000c63 pmovmskb %xmm3, %ecx - 0x48, 0x09, 0xce, //0x00000c67 orq %rcx, %rsi - 0x4d, 0x85, 0xf6, //0x00000c6a testq %r14, %r14 - 0x0f, 0x85, 0x91, 0x00, 0x00, 0x00, //0x00000c6d jne LBB0_169 - 0x48, 0x85, 0xf6, //0x00000c73 testq %rsi, %rsi - 0x0f, 0x85, 0x15, 0x28, 0x00, 0x00, //0x00000c76 jne LBB0_588 - 0x49, 0x83, 0xc2, 0xc0, //0x00000c7c addq $-64, %r10 - 0x48, 0x83, 0xc0, 0x40, //0x00000c80 addq $64, %rax - 0x49, 0x83, 0xfa, 0x3f, //0x00000c84 cmpq $63, %r10 - 0x0f, 0x87, 0xb2, 0xfe, 0xff, 0xff, //0x00000c88 ja LBB0_148 - 0xe9, 0xff, 0x0c, 0x00, 0x00, //0x00000c8e jmp LBB0_154 - //0x00000c93 LBB0_165 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00000c93 cmpq $-1, $-56(%rbp) - 0x4c, 0x8b, 0x65, 0xc0, //0x00000c98 movq $-64(%rbp), %r12 - 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x00000c9c jne LBB0_168 - 0x49, 0x0f, 0xbc, 0xcd, //0x00000ca2 bsfq %r13, %rcx - 0x48, 0x01, 0xc1, //0x00000ca6 addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00000ca9 movq %rcx, $-56(%rbp) - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00000cad jmp LBB0_168 - //0x00000cb2 LBB0_167 - 0x4c, 0x8b, 0x65, 0xc0, //0x00000cb2 movq $-64(%rbp), %r12 - //0x00000cb6 LBB0_168 - 0x4c, 0x89, 0xc1, //0x00000cb6 movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00000cb9 notq %rcx - 0x4c, 0x21, 0xe9, //0x00000cbc andq %r13, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x00000cbf leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xc2, //0x00000cc3 orq %r8, %rdx - 0x48, 0x89, 0xd7, //0x00000cc6 movq %rdx, %rdi - 0x48, 0xf7, 0xd7, //0x00000cc9 notq %rdi - 0x4c, 0x21, 0xef, //0x00000ccc andq %r13, %rdi - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000ccf movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xdf, //0x00000cd9 andq %rbx, %rdi - 0x45, 0x31, 0xc0, //0x00000cdc xorl %r8d, %r8d - 0x48, 0x01, 0xcf, //0x00000cdf addq %rcx, %rdi - 0x41, 0x0f, 0x92, 0xc0, //0x00000ce2 setb %r8b - 0x48, 0x01, 0xff, //0x00000ce6 addq %rdi, %rdi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000ce9 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xcf, //0x00000cf3 xorq %rcx, %rdi - 0x48, 0x21, 0xd7, //0x00000cf6 andq %rdx, %rdi - 0x48, 0xf7, 0xd7, //0x00000cf9 notq %rdi - 0x49, 0x21, 0xfe, //0x00000cfc andq %rdi, %r14 - 0xe9, 0x4e, 0xff, 0xff, 0xff, //0x00000cff jmp LBB0_151 - //0x00000d04 LBB0_169 - 0x49, 0x0f, 0xbc, 0xce, //0x00000d04 bsfq %r14, %rcx - 0x48, 0x85, 0xf6, //0x00000d08 testq %rsi, %rsi - 0x0f, 0x84, 0xdc, 0x02, 0x00, 0x00, //0x00000d0b je LBB0_212 - 0x48, 0x0f, 0xbc, 0xd6, //0x00000d11 bsfq %rsi, %rdx - 0xe9, 0xd8, 0x02, 0x00, 0x00, //0x00000d15 jmp LBB0_213 - //0x00000d1a LBB0_171 - 0x41, 0x89, 0xc8, //0x00000d1a movl %ecx, %r8d - 0x4d, 0x01, 0xd8, //0x00000d1d addq %r11, %r8 - 0x4d, 0x01, 0xe8, //0x00000d20 addq %r13, %r8 - 0xe9, 0x1f, 0x02, 0x00, 0x00, //0x00000d23 jmp LBB0_200 - //0x00000d28 LBB0_172 - 0x4d, 0x89, 0xce, //0x00000d28 movq %r9, %r14 - 0x49, 0x29, 0xc6, //0x00000d2b subq %rax, %r14 - 0x0f, 0x84, 0x17, 0x29, 0x00, 0x00, //0x00000d2e je LBB0_617 - 0x4c, 0x89, 0x4d, 0xa0, //0x00000d34 movq %r9, $-96(%rbp) - 0x49, 0x83, 0xfe, 0x40, //0x00000d38 cmpq $64, %r14 - 0x0f, 0x82, 0xda, 0x13, 0x00, 0x00, //0x00000d3c jb LBB0_413 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000d42 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc9, //0x00000d4a xorl %r9d, %r9d - 0x90, 0x90, 0x90, //0x00000d4d .p2align 4, 0x90 - //0x00000d50 LBB0_175 - 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x04, //0x00000d50 movdqu (%r12,%rax), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x10, //0x00000d56 movdqu $16(%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x04, 0x20, //0x00000d5d movdqu $32(%r12,%rax), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000d64 movdqu $48(%r12,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xdc, //0x00000d6b movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00000d6f pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x00000d73 pmovmskb %xmm3, %r15d - 0x66, 0x0f, 0x6f, 0xdd, //0x00000d78 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00000d7c pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00000d80 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xdf, //0x00000d84 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00000d88 pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xe3, //0x00000d8c pmovmskb %xmm3, %r12d - 0x66, 0x0f, 0x6f, 0xde, //0x00000d91 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00000d95 pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000d99 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x6f, 0xdc, //0x00000d9e movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00000da2 pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00000da6 pmovmskb %xmm3, %r13d - 0x66, 0x0f, 0x6f, 0xdd, //0x00000dab movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00000daf pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xdb, //0x00000db3 pmovmskb %xmm3, %ebx - 0x66, 0x0f, 0x6f, 0xdf, //0x00000db7 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00000dbb pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00000dbf pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xde, //0x00000dc3 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00000dc7 pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x00000dcb pmovmskb %xmm3, %r10d - 0x66, 0x0f, 0x6f, 0xda, //0x00000dd0 movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x64, 0xdd, //0x00000dd4 pcmpgtb %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xef, //0x00000dd8 pcmpgtb %xmm15, %xmm5 - 0x66, 0x0f, 0xdb, 0xeb, //0x00000ddd pand %xmm3, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x00000de1 pmovmskb %xmm5, %edi - 0x66, 0x0f, 0x6f, 0xda, //0x00000de5 movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x64, 0xdf, //0x00000de9 pcmpgtb %xmm7, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xff, //0x00000ded pcmpgtb %xmm15, %xmm7 - 0x66, 0x0f, 0xdb, 0xfb, //0x00000df2 pand %xmm3, %xmm7 - 0x66, 0x0f, 0xd7, 0xd7, //0x00000df6 pmovmskb %xmm7, %edx - 0x66, 0x0f, 0x6f, 0xda, //0x00000dfa movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x64, 0xde, //0x00000dfe pcmpgtb %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xf7, //0x00000e02 pcmpgtb %xmm15, %xmm6 - 0x66, 0x0f, 0xdb, 0xf3, //0x00000e07 pand %xmm3, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xc6, //0x00000e0b pmovmskb %xmm6, %r8d - 0x49, 0xc1, 0xe3, 0x30, //0x00000e10 shlq $48, %r11 - 0x49, 0xc1, 0xe4, 0x20, //0x00000e14 shlq $32, %r12 - 0x4d, 0x09, 0xdc, //0x00000e18 orq %r11, %r12 - 0x48, 0xc1, 0xe1, 0x10, //0x00000e1b shlq $16, %rcx - 0x4c, 0x09, 0xe1, //0x00000e1f orq %r12, %rcx - 0x49, 0x09, 0xcf, //0x00000e22 orq %rcx, %r15 - 0x49, 0xc1, 0xe2, 0x30, //0x00000e25 shlq $48, %r10 - 0x48, 0xc1, 0xe6, 0x20, //0x00000e29 shlq $32, %rsi - 0x4c, 0x09, 0xd6, //0x00000e2d orq %r10, %rsi - 0x48, 0xc1, 0xe3, 0x10, //0x00000e30 shlq $16, %rbx - 0x48, 0x09, 0xf3, //0x00000e34 orq %rsi, %rbx - 0x49, 0xc1, 0xe0, 0x30, //0x00000e37 shlq $48, %r8 - 0x48, 0xc1, 0xe2, 0x20, //0x00000e3b shlq $32, %rdx - 0x4c, 0x09, 0xc2, //0x00000e3f orq %r8, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x00000e42 shlq $16, %rdi - 0x48, 0x09, 0xd7, //0x00000e46 orq %rdx, %rdi - 0x49, 0x09, 0xdd, //0x00000e49 orq %rbx, %r13 - 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x00000e4c jne LBB0_192 - 0x4d, 0x85, 0xc9, //0x00000e52 testq %r9, %r9 - 0x4c, 0x8b, 0x55, 0xb8, //0x00000e55 movq $-72(%rbp), %r10 - 0x0f, 0x85, 0x73, 0x00, 0x00, 0x00, //0x00000e59 jne LBB0_194 - 0x45, 0x31, 0xc9, //0x00000e5f xorl %r9d, %r9d - 0x4c, 0x8b, 0x45, 0xd0, //0x00000e62 movq $-48(%rbp), %r8 - 0x4c, 0x8b, 0x65, 0xc0, //0x00000e66 movq $-64(%rbp), %r12 - //0x00000e6a LBB0_178 - 0x66, 0x0f, 0x6f, 0xda, //0x00000e6a movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x00000e6e pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe7, //0x00000e72 pcmpgtb %xmm15, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x00000e77 pand %xmm3, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x00000e7b pmovmskb %xmm4, %ecx - 0x48, 0x09, 0xcf, //0x00000e7f orq %rcx, %rdi - 0x4d, 0x85, 0xff, //0x00000e82 testq %r15, %r15 - 0x0f, 0x85, 0x9d, 0x00, 0x00, 0x00, //0x00000e85 jne LBB0_196 - 0x48, 0x85, 0xff, //0x00000e8b testq %rdi, %rdi - 0x0f, 0x85, 0x36, 0x26, 0x00, 0x00, //0x00000e8e jne LBB0_593 - 0x49, 0x83, 0xc6, 0xc0, //0x00000e94 addq $-64, %r14 - 0x48, 0x83, 0xc0, 0x40, //0x00000e98 addq $64, %rax - 0x49, 0x83, 0xfe, 0x3f, //0x00000e9c cmpq $63, %r14 - 0x0f, 0x87, 0xaa, 0xfe, 0xff, 0xff, //0x00000ea0 ja LBB0_175 - 0xe9, 0x88, 0x0c, 0x00, 0x00, //0x00000ea6 jmp LBB0_181 - //0x00000eab LBB0_192 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00000eab cmpq $-1, $-56(%rbp) - 0x4c, 0x8b, 0x45, 0xd0, //0x00000eb0 movq $-48(%rbp), %r8 - 0x4c, 0x8b, 0x65, 0xc0, //0x00000eb4 movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x55, 0xb8, //0x00000eb8 movq $-72(%rbp), %r10 - 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x00000ebc jne LBB0_195 - 0x49, 0x0f, 0xbc, 0xcd, //0x00000ec2 bsfq %r13, %rcx - 0x48, 0x01, 0xc1, //0x00000ec6 addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00000ec9 movq %rcx, $-56(%rbp) - 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00000ecd jmp LBB0_195 - //0x00000ed2 LBB0_194 - 0x4c, 0x8b, 0x45, 0xd0, //0x00000ed2 movq $-48(%rbp), %r8 - 0x4c, 0x8b, 0x65, 0xc0, //0x00000ed6 movq $-64(%rbp), %r12 - //0x00000eda LBB0_195 - 0x4c, 0x89, 0xc9, //0x00000eda movq %r9, %rcx - 0x48, 0xf7, 0xd1, //0x00000edd notq %rcx - 0x4c, 0x21, 0xe9, //0x00000ee0 andq %r13, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x00000ee3 leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xca, //0x00000ee7 orq %r9, %rdx - 0x48, 0x89, 0xd6, //0x00000eea movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000eed notq %rsi - 0x4c, 0x21, 0xee, //0x00000ef0 andq %r13, %rsi - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000ef3 movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xde, //0x00000efd andq %rbx, %rsi - 0x45, 0x31, 0xc9, //0x00000f00 xorl %r9d, %r9d - 0x48, 0x01, 0xce, //0x00000f03 addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc1, //0x00000f06 setb %r9b - 0x48, 0x01, 0xf6, //0x00000f0a addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000f0d movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00000f17 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00000f1a andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000f1d notq %rsi - 0x49, 0x21, 0xf7, //0x00000f20 andq %rsi, %r15 - 0xe9, 0x42, 0xff, 0xff, 0xff, //0x00000f23 jmp LBB0_178 - //0x00000f28 LBB0_196 - 0x49, 0x0f, 0xbc, 0xcf, //0x00000f28 bsfq %r15, %rcx - 0x48, 0x85, 0xff, //0x00000f2c testq %rdi, %rdi - 0x0f, 0x84, 0x28, 0x01, 0x00, 0x00, //0x00000f2f je LBB0_221 - 0x48, 0x0f, 0xbc, 0xd7, //0x00000f35 bsfq %rdi, %rdx - 0xe9, 0x24, 0x01, 0x00, 0x00, //0x00000f39 jmp LBB0_222 - //0x00000f3e LBB0_198 - 0x48, 0x01, 0xd1, //0x00000f3e addq %rdx, %rcx - 0x49, 0x89, 0xc8, //0x00000f41 movq %rcx, %r8 - //0x00000f44 LBB0_199 - 0x4d, 0x89, 0xd1, //0x00000f44 movq %r10, %r9 - //0x00000f47 LBB0_200 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00000f47 movq $-1, %r13 - 0x4d, 0x85, 0xe4, //0x00000f4e testq %r12, %r12 - 0x0f, 0x84, 0x9d, 0x24, 0x00, 0x00, //0x00000f51 je LBB0_578 - 0x4d, 0x85, 0xff, //0x00000f57 testq %r15, %r15 - 0x0f, 0x84, 0x94, 0x24, 0x00, 0x00, //0x00000f5a je LBB0_578 - 0x4d, 0x85, 0xf6, //0x00000f60 testq %r14, %r14 - 0x0f, 0x84, 0x8b, 0x24, 0x00, 0x00, //0x00000f63 je LBB0_578 - 0x4d, 0x29, 0xd8, //0x00000f69 subq %r11, %r8 - 0x49, 0x8d, 0x48, 0xff, //0x00000f6c leaq $-1(%r8), %rcx - 0x49, 0x39, 0xcc, //0x00000f70 cmpq %rcx, %r12 - 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00000f73 je LBB0_209 - 0x49, 0x39, 0xcf, //0x00000f79 cmpq %rcx, %r15 - 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x00000f7c je LBB0_209 - 0x49, 0x39, 0xce, //0x00000f82 cmpq %rcx, %r14 - 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00000f85 je LBB0_209 - 0x4d, 0x85, 0xff, //0x00000f8b testq %r15, %r15 - 0x0f, 0x8e, 0xa6, 0x00, 0x00, 0x00, //0x00000f8e jle LBB0_218 - 0x49, 0x8d, 0x4f, 0xff, //0x00000f94 leaq $-1(%r15), %rcx - 0x49, 0x39, 0xce, //0x00000f98 cmpq %rcx, %r14 - 0x0f, 0x84, 0x99, 0x00, 0x00, 0x00, //0x00000f9b je LBB0_218 - 0x49, 0xf7, 0xd7, //0x00000fa1 notq %r15 - 0x4d, 0x89, 0xfd, //0x00000fa4 movq %r15, %r13 - 0xe9, 0x06, 0x00, 0x00, 0x00, //0x00000fa7 jmp LBB0_210 - //0x00000fac LBB0_209 - 0x49, 0xf7, 0xd8, //0x00000fac negq %r8 - 0x4d, 0x89, 0xc5, //0x00000faf movq %r8, %r13 - //0x00000fb2 LBB0_210 - 0x4d, 0x85, 0xed, //0x00000fb2 testq %r13, %r13 - 0x0f, 0x88, 0x39, 0x24, 0x00, 0x00, //0x00000fb5 js LBB0_578 - //0x00000fbb LBB0_211 - 0x49, 0x01, 0xc5, //0x00000fbb addq %rax, %r13 - 0x4c, 0x8b, 0x45, 0xd0, //0x00000fbe movq $-48(%rbp), %r8 - 0x4d, 0x89, 0x28, //0x00000fc2 movq %r13, (%r8) - 0x48, 0x85, 0xc0, //0x00000fc5 testq %rax, %rax - 0x48, 0x8b, 0x7d, 0xb0, //0x00000fc8 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x65, 0xc0, //0x00000fcc movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x00000fd0 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000fd4 movabsq $4294977024, %r14 - 0x4c, 0x8b, 0x55, 0xb8, //0x00000fde movq $-72(%rbp), %r10 - 0x0f, 0x89, 0x33, 0xf3, 0xff, 0xff, //0x00000fe2 jns LBB0_28 - 0xe9, 0x3c, 0x24, 0x00, 0x00, //0x00000fe8 jmp LBB0_580 - //0x00000fed LBB0_212 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00000fed movl $64, %edx - //0x00000ff2 LBB0_213 - 0x4c, 0x8b, 0x45, 0xd0, //0x00000ff2 movq $-48(%rbp), %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x00000ff6 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x5d, 0xa8, //0x00000ffa movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000ffe movabsq $4294977024, %r14 - 0x4c, 0x8b, 0x55, 0xb8, //0x00001008 movq $-72(%rbp), %r10 - 0x48, 0x39, 0xca, //0x0000100c cmpq %rcx, %rdx - 0x0f, 0x82, 0xf2, 0x25, 0x00, 0x00, //0x0000100f jb LBB0_610 - 0x48, 0x01, 0xc8, //0x00001015 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00001018 addq $1, %rax - //0x0000101c LBB0_215 - 0x48, 0x85, 0xc0, //0x0000101c testq %rax, %rax - 0x0f, 0x88, 0x7a, 0x19, 0x00, 0x00, //0x0000101f js LBB0_508 - 0x49, 0x89, 0x00, //0x00001025 movq %rax, (%r8) - 0x48, 0x8b, 0x45, 0x90, //0x00001028 movq $-112(%rbp), %rax - 0x48, 0x85, 0xc0, //0x0000102c testq %rax, %rax - 0x0f, 0x8f, 0xe6, 0xf2, 0xff, 0xff, //0x0000102f jg LBB0_28 - 0xe9, 0x5c, 0x19, 0x00, 0x00, //0x00001035 jmp LBB0_217 - //0x0000103a LBB0_218 - 0x4c, 0x89, 0xe1, //0x0000103a movq %r12, %rcx - 0x4c, 0x09, 0xf1, //0x0000103d orq %r14, %rcx - 0x0f, 0x99, 0xc1, //0x00001040 setns %cl - 0x0f, 0x88, 0x41, 0x05, 0x00, 0x00, //0x00001043 js LBB0_302 - 0x4d, 0x39, 0xf4, //0x00001049 cmpq %r14, %r12 - 0x0f, 0x8c, 0x38, 0x05, 0x00, 0x00, //0x0000104c jl LBB0_302 - 0x49, 0xf7, 0xd4, //0x00001052 notq %r12 - 0x4d, 0x89, 0xe5, //0x00001055 movq %r12, %r13 - 0xe9, 0x55, 0xff, 0xff, 0xff, //0x00001058 jmp LBB0_210 - //0x0000105d LBB0_221 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000105d movl $64, %edx - //0x00001062 LBB0_222 - 0x48, 0x8b, 0x7d, 0xb0, //0x00001062 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x5d, 0xa8, //0x00001066 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000106a movabsq $4294977024, %r14 - 0x48, 0x39, 0xca, //0x00001074 cmpq %rcx, %rdx - 0x0f, 0x82, 0x8a, 0x25, 0x00, 0x00, //0x00001077 jb LBB0_610 - 0x48, 0x01, 0xc8, //0x0000107d addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00001080 addq $1, %rax - //0x00001084 LBB0_224 - 0x4c, 0x8b, 0x6d, 0xa0, //0x00001084 movq $-96(%rbp), %r13 - //0x00001088 LBB0_225 - 0x48, 0x85, 0xc0, //0x00001088 testq %rax, %rax - 0x0f, 0x88, 0x7d, 0x23, 0x00, 0x00, //0x0000108b js LBB0_581 - 0x49, 0x89, 0x00, //0x00001091 movq %rax, (%r8) - 0x48, 0x8b, 0x45, 0x90, //0x00001094 movq $-112(%rbp), %rax - 0x48, 0x85, 0xc0, //0x00001098 testq %rax, %rax - 0x0f, 0x8e, 0xf5, 0x18, 0x00, 0x00, //0x0000109b jle LBB0_217 - 0x49, 0x8b, 0x03, //0x000010a1 movq (%r11), %rax - 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x000010a4 cmpq $4095, %rax - 0x0f, 0x8f, 0xda, 0x18, 0x00, 0x00, //0x000010aa jg LBB0_597 - 0x48, 0x8d, 0x48, 0x01, //0x000010b0 leaq $1(%rax), %rcx - 0x49, 0x89, 0x0b, //0x000010b4 movq %rcx, (%r11) - 0x49, 0xc7, 0x44, 0xc3, 0x08, 0x04, 0x00, 0x00, 0x00, //0x000010b7 movq $4, $8(%r11,%rax,8) - 0xe9, 0x56, 0xf2, 0xff, 0xff, //0x000010c0 jmp LBB0_28 - //0x000010c5 LBB0_229 - 0x49, 0x8b, 0x08, //0x000010c5 movq (%r8), %rcx - 0x48, 0x8b, 0x47, 0x08, //0x000010c8 movq $8(%rdi), %rax - 0xf6, 0x85, 0x68, 0xff, 0xff, 0xff, 0x20, //0x000010cc testb $32, $-152(%rbp) - 0x48, 0x89, 0x45, 0xa0, //0x000010d3 movq %rax, $-96(%rbp) - 0x48, 0x89, 0x4d, 0x90, //0x000010d7 movq %rcx, $-112(%rbp) - 0x0f, 0x85, 0xc5, 0x04, 0x00, 0x00, //0x000010db jne LBB0_303 - 0x49, 0x89, 0xc1, //0x000010e1 movq %rax, %r9 - 0x49, 0x29, 0xc9, //0x000010e4 subq %rcx, %r9 - 0x0f, 0x84, 0x55, 0x25, 0x00, 0x00, //0x000010e7 je LBB0_614 - 0x49, 0x83, 0xf9, 0x40, //0x000010ed cmpq $64, %r9 - 0x0f, 0x82, 0xb7, 0x10, 0x00, 0x00, //0x000010f1 jb LBB0_418 - 0x49, 0x89, 0xce, //0x000010f7 movq %rcx, %r14 - 0x49, 0xf7, 0xd6, //0x000010fa notq %r14 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000010fd movq $-1, $-56(%rbp) - 0x48, 0x89, 0xc8, //0x00001105 movq %rcx, %rax - 0x45, 0x31, 0xc0, //0x00001108 xorl %r8d, %r8d - 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000110b .p2align 4, 0x90 - //0x00001110 LBB0_233 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00001110 movdqu (%r12,%rax), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00001116 movdqu $16(%r12,%rax), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000111d movdqu $32(%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00001124 movdqu $48(%r12,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xfb, //0x0000112b movdqa %xmm3, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000112f pcmpeqb %xmm0, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00001133 pmovmskb %xmm7, %r10d - 0x66, 0x0f, 0x6f, 0xfc, //0x00001138 movdqa %xmm4, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000113c pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xcf, //0x00001140 pmovmskb %xmm7, %ecx - 0x66, 0x0f, 0x6f, 0xfd, //0x00001144 movdqa %xmm5, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x00001148 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x0000114c pmovmskb %xmm7, %edi - 0x66, 0x0f, 0x6f, 0xfe, //0x00001150 movdqa %xmm6, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x00001154 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xd7, //0x00001158 pmovmskb %xmm7, %edx - 0x66, 0x0f, 0x74, 0xd9, //0x0000115c pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00001160 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x74, 0xe1, //0x00001165 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xdc, //0x00001169 pmovmskb %xmm4, %ebx - 0x66, 0x0f, 0x74, 0xe9, //0x0000116d pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00001171 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x74, 0xf1, //0x00001175 pcmpeqb %xmm1, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00001179 pmovmskb %xmm6, %r15d - 0x48, 0xc1, 0xe2, 0x30, //0x0000117e shlq $48, %rdx - 0x48, 0xc1, 0xe7, 0x20, //0x00001182 shlq $32, %rdi - 0x48, 0x09, 0xd7, //0x00001186 orq %rdx, %rdi - 0x48, 0xc1, 0xe1, 0x10, //0x00001189 shlq $16, %rcx - 0x48, 0x09, 0xf9, //0x0000118d orq %rdi, %rcx - 0x49, 0x09, 0xca, //0x00001190 orq %rcx, %r10 - 0x49, 0xc1, 0xe7, 0x30, //0x00001193 shlq $48, %r15 - 0x48, 0xc1, 0xe6, 0x20, //0x00001197 shlq $32, %rsi - 0x4c, 0x09, 0xfe, //0x0000119b orq %r15, %rsi - 0x48, 0xc1, 0xe3, 0x10, //0x0000119e shlq $16, %rbx - 0x48, 0x09, 0xf3, //0x000011a2 orq %rsi, %rbx - 0x49, 0x09, 0xdb, //0x000011a5 orq %rbx, %r11 - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000011a8 jne LBB0_243 - 0x4d, 0x85, 0xc0, //0x000011ae testq %r8, %r8 - 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x000011b1 jne LBB0_245 - 0x45, 0x31, 0xc0, //0x000011b7 xorl %r8d, %r8d - 0x4d, 0x85, 0xd2, //0x000011ba testq %r10, %r10 - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x000011bd jne LBB0_246 - //0x000011c3 LBB0_236 - 0x49, 0x83, 0xc1, 0xc0, //0x000011c3 addq $-64, %r9 - 0x49, 0x83, 0xc6, 0xc0, //0x000011c7 addq $-64, %r14 - 0x48, 0x83, 0xc0, 0x40, //0x000011cb addq $64, %rax - 0x49, 0x83, 0xf9, 0x3f, //0x000011cf cmpq $63, %r9 - 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x000011d3 ja LBB0_233 - 0xe9, 0x1a, 0x0c, 0x00, 0x00, //0x000011d9 jmp LBB0_237 - //0x000011de LBB0_243 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000011de cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000011e3 jne LBB0_245 - 0x49, 0x0f, 0xbc, 0xcb, //0x000011e9 bsfq %r11, %rcx - 0x48, 0x01, 0xc1, //0x000011ed addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x000011f0 movq %rcx, $-56(%rbp) - //0x000011f4 LBB0_245 - 0x4c, 0x89, 0xc1, //0x000011f4 movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x000011f7 notq %rcx - 0x4c, 0x21, 0xd9, //0x000011fa andq %r11, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x000011fd leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xc2, //0x00001201 orq %r8, %rdx - 0x48, 0x89, 0xd6, //0x00001204 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00001207 notq %rsi - 0x4c, 0x21, 0xde, //0x0000120a andq %r11, %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000120d movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfe, //0x00001217 andq %rdi, %rsi - 0x45, 0x31, 0xc0, //0x0000121a xorl %r8d, %r8d - 0x48, 0x01, 0xce, //0x0000121d addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc0, //0x00001220 setb %r8b - 0x48, 0x01, 0xf6, //0x00001224 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001227 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00001231 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00001234 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00001237 notq %rsi - 0x49, 0x21, 0xf2, //0x0000123a andq %rsi, %r10 - 0x4d, 0x85, 0xd2, //0x0000123d testq %r10, %r10 - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00001240 je LBB0_236 - //0x00001246 LBB0_246 - 0x49, 0x0f, 0xbc, 0xc2, //0x00001246 bsfq %r10, %rax - 0x4c, 0x29, 0xf0, //0x0000124a subq %r14, %rax - //0x0000124d LBB0_247 - 0x4c, 0x8b, 0x45, 0xd0, //0x0000124d movq $-48(%rbp), %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x00001251 movq $-80(%rbp), %rdi - //0x00001255 LBB0_248 - 0x4c, 0x8b, 0x5d, 0xa8, //0x00001255 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001259 movabsq $4294977024, %r14 - 0x4c, 0x8b, 0x55, 0xb8, //0x00001263 movq $-72(%rbp), %r10 - 0xe9, 0x2f, 0x06, 0x00, 0x00, //0x00001267 jmp LBB0_346 - //0x0000126c LBB0_249 - 0x4c, 0x8b, 0x7f, 0x08, //0x0000126c movq $8(%rdi), %r15 - 0x49, 0x8b, 0x00, //0x00001270 movq (%r8), %rax - 0x49, 0x29, 0xc7, //0x00001273 subq %rax, %r15 - 0x0f, 0x84, 0x6b, 0x22, 0x00, 0x00, //0x00001276 je LBB0_595 - 0x4d, 0x8d, 0x14, 0x04, //0x0000127c leaq (%r12,%rax), %r10 - 0x41, 0x80, 0x3a, 0x30, //0x00001280 cmpb $48, (%r10) - 0x0f, 0x85, 0x37, 0x00, 0x00, 0x00, //0x00001284 jne LBB0_254 - 0x41, 0xbe, 0x01, 0x00, 0x00, 0x00, //0x0000128a movl $1, %r14d - 0x49, 0x83, 0xff, 0x01, //0x00001290 cmpq $1, %r15 - 0x0f, 0x84, 0xa4, 0x05, 0x00, 0x00, //0x00001294 je LBB0_342 - 0x41, 0x8a, 0x4a, 0x01, //0x0000129a movb $1(%r10), %cl - 0x80, 0xc1, 0xd2, //0x0000129e addb $-46, %cl - 0x80, 0xf9, 0x37, //0x000012a1 cmpb $55, %cl - 0x0f, 0x87, 0x94, 0x05, 0x00, 0x00, //0x000012a4 ja LBB0_342 - 0x0f, 0xb6, 0xc9, //0x000012aa movzbl %cl, %ecx - 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x000012ad movabsq $36028797027352577, %rdx - 0x48, 0x0f, 0xa3, 0xca, //0x000012b7 btq %rcx, %rdx - 0x0f, 0x83, 0x7d, 0x05, 0x00, 0x00, //0x000012bb jae LBB0_342 - //0x000012c1 LBB0_254 - 0x49, 0x83, 0xff, 0x10, //0x000012c1 cmpq $16, %r15 - 0x0f, 0x82, 0xc3, 0x0e, 0x00, 0x00, //0x000012c5 jb LBB0_417 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000012cb movq $-1, %r13 - 0x45, 0x31, 0xf6, //0x000012d2 xorl %r14d, %r14d - 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x000012d5 movq $-1, %r12 - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x000012dc movq $-1, %r11 - 0x4c, 0x89, 0xff, //0x000012e3 movq %r15, %rdi - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000012e6 .p2align 4, 0x90 - //0x000012f0 LBB0_256 - 0xf3, 0x43, 0x0f, 0x6f, 0x1c, 0x32, //0x000012f0 movdqu (%r10,%r14), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x000012f6 movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0x64, 0xe0, //0x000012fa pcmpgtb %xmm8, %xmm4 - 0x66, 0x41, 0x0f, 0x6f, 0xee, //0x000012ff movdqa %xmm14, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x00001304 pcmpgtb %xmm3, %xmm5 - 0x66, 0x0f, 0xdb, 0xec, //0x00001308 pand %xmm4, %xmm5 - 0x66, 0x0f, 0x6f, 0xe3, //0x0000130c movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0x74, 0xe1, //0x00001310 pcmpeqb %xmm9, %xmm4 - 0x66, 0x0f, 0x6f, 0xf3, //0x00001315 movdqa %xmm3, %xmm6 - 0x66, 0x41, 0x0f, 0x74, 0xf2, //0x00001319 pcmpeqb %xmm10, %xmm6 - 0x66, 0x0f, 0xeb, 0xf4, //0x0000131e por %xmm4, %xmm6 - 0x66, 0x0f, 0x6f, 0xe3, //0x00001322 movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xe3, //0x00001326 pand %xmm11, %xmm4 - 0x66, 0x41, 0x0f, 0x74, 0xdc, //0x0000132b pcmpeqb %xmm12, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xe5, //0x00001330 pcmpeqb %xmm13, %xmm4 - 0x66, 0x0f, 0xd7, 0xf4, //0x00001335 pmovmskb %xmm4, %esi - 0x66, 0x0f, 0xeb, 0xe3, //0x00001339 por %xmm3, %xmm4 - 0x66, 0x0f, 0xeb, 0xee, //0x0000133d por %xmm6, %xmm5 - 0x66, 0x0f, 0xeb, 0xec, //0x00001341 por %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xdb, //0x00001345 pmovmskb %xmm3, %ebx - 0x66, 0x44, 0x0f, 0xd7, 0xc6, //0x00001349 pmovmskb %xmm6, %r8d - 0x66, 0x0f, 0xd7, 0xcd, //0x0000134e pmovmskb %xmm5, %ecx - 0xf7, 0xd1, //0x00001352 notl %ecx - 0x0f, 0xbc, 0xc9, //0x00001354 bsfl %ecx, %ecx - 0x83, 0xf9, 0x10, //0x00001357 cmpl $16, %ecx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000135a je LBB0_258 - 0xba, 0xff, 0xff, 0xff, 0xff, //0x00001360 movl $-1, %edx - 0xd3, 0xe2, //0x00001365 shll %cl, %edx - 0xf7, 0xd2, //0x00001367 notl %edx - 0x21, 0xd3, //0x00001369 andl %edx, %ebx - 0x21, 0xd6, //0x0000136b andl %edx, %esi - 0x44, 0x21, 0xc2, //0x0000136d andl %r8d, %edx - 0x41, 0x89, 0xd0, //0x00001370 movl %edx, %r8d - //0x00001373 LBB0_258 - 0x8d, 0x53, 0xff, //0x00001373 leal $-1(%rbx), %edx - 0x21, 0xda, //0x00001376 andl %ebx, %edx - 0x0f, 0x85, 0x3b, 0x0a, 0x00, 0x00, //0x00001378 jne LBB0_385 - 0x8d, 0x56, 0xff, //0x0000137e leal $-1(%rsi), %edx - 0x21, 0xf2, //0x00001381 andl %esi, %edx - 0x0f, 0x85, 0x30, 0x0a, 0x00, 0x00, //0x00001383 jne LBB0_385 - 0x41, 0x8d, 0x50, 0xff, //0x00001389 leal $-1(%r8), %edx - 0x44, 0x21, 0xc2, //0x0000138d andl %r8d, %edx - 0x0f, 0x85, 0x23, 0x0a, 0x00, 0x00, //0x00001390 jne LBB0_385 - 0x85, 0xdb, //0x00001396 testl %ebx, %ebx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00001398 je LBB0_264 - 0x0f, 0xbc, 0xdb, //0x0000139e bsfl %ebx, %ebx - 0x49, 0x83, 0xfb, 0xff, //0x000013a1 cmpq $-1, %r11 - 0x0f, 0x85, 0xf1, 0x0b, 0x00, 0x00, //0x000013a5 jne LBB0_391 - 0x4c, 0x01, 0xf3, //0x000013ab addq %r14, %rbx - 0x49, 0x89, 0xdb, //0x000013ae movq %rbx, %r11 - //0x000013b1 LBB0_264 - 0x85, 0xf6, //0x000013b1 testl %esi, %esi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000013b3 je LBB0_267 - 0x0f, 0xbc, 0xf6, //0x000013b9 bsfl %esi, %esi - 0x49, 0x83, 0xfc, 0xff, //0x000013bc cmpq $-1, %r12 - 0x0f, 0x85, 0xdd, 0x0b, 0x00, 0x00, //0x000013c0 jne LBB0_392 - 0x4c, 0x01, 0xf6, //0x000013c6 addq %r14, %rsi - 0x49, 0x89, 0xf4, //0x000013c9 movq %rsi, %r12 - //0x000013cc LBB0_267 - 0x45, 0x85, 0xc0, //0x000013cc testl %r8d, %r8d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x000013cf je LBB0_270 - 0x41, 0x0f, 0xbc, 0xd0, //0x000013d5 bsfl %r8d, %edx - 0x49, 0x83, 0xfd, 0xff, //0x000013d9 cmpq $-1, %r13 - 0x0f, 0x85, 0xc7, 0x0b, 0x00, 0x00, //0x000013dd jne LBB0_393 - 0x4c, 0x01, 0xf2, //0x000013e3 addq %r14, %rdx - 0x49, 0x89, 0xd5, //0x000013e6 movq %rdx, %r13 - //0x000013e9 LBB0_270 - 0x83, 0xf9, 0x10, //0x000013e9 cmpl $16, %ecx - 0x0f, 0x85, 0xc4, 0x03, 0x00, 0x00, //0x000013ec jne LBB0_329 - 0x48, 0x83, 0xc7, 0xf0, //0x000013f2 addq $-16, %rdi - 0x49, 0x83, 0xc6, 0x10, //0x000013f6 addq $16, %r14 - 0x48, 0x83, 0xff, 0x0f, //0x000013fa cmpq $15, %rdi - 0x0f, 0x87, 0xec, 0xfe, 0xff, 0xff, //0x000013fe ja LBB0_256 - 0x4b, 0x8d, 0x0c, 0x32, //0x00001404 leaq (%r10,%r14), %rcx - 0x49, 0x89, 0xc8, //0x00001408 movq %rcx, %r8 - 0x4d, 0x39, 0xf7, //0x0000140b cmpq %r14, %r15 - 0x0f, 0x84, 0xb6, 0x03, 0x00, 0x00, //0x0000140e je LBB0_331 - //0x00001414 LBB0_273 - 0x4c, 0x8d, 0x04, 0x39, //0x00001414 leaq (%rcx,%rdi), %r8 - 0x49, 0x89, 0xc9, //0x00001418 movq %rcx, %r9 - 0x4d, 0x29, 0xd1, //0x0000141b subq %r10, %r9 - 0x31, 0xd2, //0x0000141e xorl %edx, %edx - 0x4c, 0x8d, 0x35, 0x09, 0x27, 0x00, 0x00, //0x00001420 leaq $9993(%rip), %r14 /* LJTI0_3+0(%rip) */ - 0xe9, 0x21, 0x00, 0x00, 0x00, //0x00001427 jmp LBB0_277 - //0x0000142c LBB0_274 - 0x49, 0x83, 0xfd, 0xff, //0x0000142c cmpq $-1, %r13 - 0x0f, 0x85, 0xac, 0x09, 0x00, 0x00, //0x00001430 jne LBB0_389 - 0x4d, 0x8d, 0x2c, 0x11, //0x00001436 leaq (%r9,%rdx), %r13 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000143a .p2align 4, 0x90 - //0x00001440 LBB0_276 - 0x48, 0x83, 0xc2, 0x01, //0x00001440 addq $1, %rdx - 0x48, 0x39, 0xd7, //0x00001444 cmpq %rdx, %rdi - 0x0f, 0x84, 0x7d, 0x03, 0x00, 0x00, //0x00001447 je LBB0_331 - //0x0000144d LBB0_277 - 0x0f, 0xbe, 0x1c, 0x11, //0x0000144d movsbl (%rcx,%rdx), %ebx - 0x8d, 0x73, 0xd0, //0x00001451 leal $-48(%rbx), %esi - 0x83, 0xfe, 0x0a, //0x00001454 cmpl $10, %esi - 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00001457 jb LBB0_276 - 0x8d, 0x73, 0xd5, //0x0000145d leal $-43(%rbx), %esi - 0x83, 0xfe, 0x1a, //0x00001460 cmpl $26, %esi - 0x0f, 0x87, 0x1c, 0x00, 0x00, 0x00, //0x00001463 ja LBB0_282 - 0x49, 0x63, 0x34, 0xb6, //0x00001469 movslq (%r14,%rsi,4), %rsi - 0x4c, 0x01, 0xf6, //0x0000146d addq %r14, %rsi - 0xff, 0xe6, //0x00001470 jmpq *%rsi - //0x00001472 LBB0_280 - 0x49, 0x83, 0xfb, 0xff, //0x00001472 cmpq $-1, %r11 - 0x0f, 0x85, 0x66, 0x09, 0x00, 0x00, //0x00001476 jne LBB0_389 - 0x4d, 0x8d, 0x1c, 0x11, //0x0000147c leaq (%r9,%rdx), %r11 - 0xe9, 0xbb, 0xff, 0xff, 0xff, //0x00001480 jmp LBB0_276 - //0x00001485 LBB0_282 - 0x83, 0xfb, 0x65, //0x00001485 cmpl $101, %ebx - 0x0f, 0x85, 0x36, 0x03, 0x00, 0x00, //0x00001488 jne LBB0_330 - //0x0000148e LBB0_283 - 0x49, 0x83, 0xfc, 0xff, //0x0000148e cmpq $-1, %r12 - 0x0f, 0x85, 0x4a, 0x09, 0x00, 0x00, //0x00001492 jne LBB0_389 - 0x4d, 0x8d, 0x24, 0x11, //0x00001498 leaq (%r9,%rdx), %r12 - 0xe9, 0x9f, 0xff, 0xff, 0xff, //0x0000149c jmp LBB0_276 - //0x000014a1 LBB0_285 - 0x49, 0x8b, 0x03, //0x000014a1 movq (%r11), %rax - 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x000014a4 cmpq $4095, %rax - 0x0f, 0x8f, 0xda, 0x14, 0x00, 0x00, //0x000014aa jg LBB0_597 - 0x48, 0x8d, 0x48, 0x01, //0x000014b0 leaq $1(%rax), %rcx - 0x49, 0x89, 0x0b, //0x000014b4 movq %rcx, (%r11) - 0x49, 0xc7, 0x44, 0xc3, 0x08, 0x05, 0x00, 0x00, 0x00, //0x000014b7 movq $5, $8(%r11,%rax,8) - 0xe9, 0x56, 0xee, 0xff, 0xff, //0x000014c0 jmp LBB0_28 - //0x000014c5 LBB0_287 - 0x49, 0x8b, 0x08, //0x000014c5 movq (%r8), %rcx - 0x48, 0x8b, 0x57, 0x08, //0x000014c8 movq $8(%rdi), %rdx - 0x48, 0x8d, 0x72, 0xfc, //0x000014cc leaq $-4(%rdx), %rsi - 0x48, 0x39, 0xf1, //0x000014d0 cmpq %rsi, %rcx - 0x0f, 0x87, 0x4d, 0x1f, 0x00, 0x00, //0x000014d3 ja LBB0_510 - 0x41, 0x8b, 0x14, 0x0c, //0x000014d9 movl (%r12,%rcx), %edx - 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x000014dd cmpl $1702063201, %edx - 0x0f, 0x85, 0x17, 0x20, 0x00, 0x00, //0x000014e3 jne LBB0_599 - 0x48, 0x8d, 0x41, 0x04, //0x000014e9 leaq $4(%rcx), %rax - 0x49, 0x89, 0x00, //0x000014ed movq %rax, (%r8) - 0x48, 0x85, 0xc9, //0x000014f0 testq %rcx, %rcx - 0x0f, 0x8f, 0x22, 0xee, 0xff, 0xff, //0x000014f3 jg LBB0_28 - 0xe9, 0xf9, 0x20, 0x00, 0x00, //0x000014f9 jmp LBB0_290 - //0x000014fe LBB0_291 - 0x49, 0x8b, 0x08, //0x000014fe movq (%r8), %rcx - 0x48, 0x8b, 0x57, 0x08, //0x00001501 movq $8(%rdi), %rdx - 0x48, 0x8d, 0x72, 0xfd, //0x00001505 leaq $-3(%rdx), %rsi - 0x48, 0x39, 0xf1, //0x00001509 cmpq %rsi, %rcx - 0x0f, 0x87, 0x14, 0x1f, 0x00, 0x00, //0x0000150c ja LBB0_510 - 0x48, 0x8d, 0x41, 0xff, //0x00001512 leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x00001516 cmpl $1819047278, $-1(%r12,%rcx) - 0x0f, 0x84, 0x2c, 0x00, 0x00, 0x00, //0x0000151f je LBB0_299 - 0xe9, 0x2b, 0x20, 0x00, 0x00, //0x00001525 jmp LBB0_293 - //0x0000152a LBB0_297 - 0x49, 0x8b, 0x08, //0x0000152a movq (%r8), %rcx - 0x48, 0x8b, 0x57, 0x08, //0x0000152d movq $8(%rdi), %rdx - 0x48, 0x8d, 0x72, 0xfd, //0x00001531 leaq $-3(%rdx), %rsi - 0x48, 0x39, 0xf1, //0x00001535 cmpq %rsi, %rcx - 0x0f, 0x87, 0xe8, 0x1e, 0x00, 0x00, //0x00001538 ja LBB0_510 - 0x48, 0x8d, 0x41, 0xff, //0x0000153e leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00001542 cmpl $1702195828, $-1(%r12,%rcx) - 0x0f, 0x85, 0x4b, 0x20, 0x00, 0x00, //0x0000154b jne LBB0_604 - //0x00001551 LBB0_299 - 0x48, 0x8d, 0x51, 0x03, //0x00001551 leaq $3(%rcx), %rdx - 0x49, 0x89, 0x10, //0x00001555 movq %rdx, (%r8) - 0x48, 0x85, 0xc9, //0x00001558 testq %rcx, %rcx - 0x0f, 0x8f, 0xba, 0xed, 0xff, 0xff, //0x0000155b jg LBB0_28 - 0xe9, 0xc3, 0x1e, 0x00, 0x00, //0x00001561 jmp LBB0_580 - //0x00001566 LBB0_300 - 0x49, 0x8b, 0x03, //0x00001566 movq (%r11), %rax - 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00001569 cmpq $4095, %rax - 0x0f, 0x8f, 0x15, 0x14, 0x00, 0x00, //0x0000156f jg LBB0_597 - 0x48, 0x8d, 0x48, 0x01, //0x00001575 leaq $1(%rax), %rcx - 0x49, 0x89, 0x0b, //0x00001579 movq %rcx, (%r11) - 0x49, 0xc7, 0x44, 0xc3, 0x08, 0x06, 0x00, 0x00, 0x00, //0x0000157c movq $6, $8(%r11,%rax,8) - 0xe9, 0x91, 0xed, 0xff, 0xff, //0x00001585 jmp LBB0_28 - //0x0000158a LBB0_302 - 0x49, 0x8d, 0x56, 0xff, //0x0000158a leaq $-1(%r14), %rdx - 0x49, 0x39, 0xd4, //0x0000158e cmpq %rdx, %r12 - 0x49, 0xf7, 0xd6, //0x00001591 notq %r14 - 0x4d, 0x0f, 0x45, 0xf0, //0x00001594 cmovneq %r8, %r14 - 0x84, 0xc9, //0x00001598 testb %cl, %cl - 0x4d, 0x0f, 0x44, 0xf0, //0x0000159a cmoveq %r8, %r14 - 0x4d, 0x89, 0xf5, //0x0000159e movq %r14, %r13 - 0xe9, 0x0c, 0xfa, 0xff, 0xff, //0x000015a1 jmp LBB0_210 - //0x000015a6 LBB0_303 - 0x49, 0x89, 0xc6, //0x000015a6 movq %rax, %r14 - 0x49, 0x29, 0xce, //0x000015a9 subq %rcx, %r14 - 0x0f, 0x84, 0x90, 0x20, 0x00, 0x00, //0x000015ac je LBB0_614 - 0x49, 0x83, 0xfe, 0x40, //0x000015b2 cmpq $64, %r14 - 0x0f, 0x82, 0x06, 0x0c, 0x00, 0x00, //0x000015b6 jb LBB0_419 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000015bc movq $-1, $-56(%rbp) - 0x48, 0x89, 0xc8, //0x000015c4 movq %rcx, %rax - 0x45, 0x31, 0xc0, //0x000015c7 xorl %r8d, %r8d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000015ca .p2align 4, 0x90 - //0x000015d0 LBB0_306 - 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x04, //0x000015d0 movdqu (%r12,%rax), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x10, //0x000015d6 movdqu $16(%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x04, 0x20, //0x000015dd movdqu $32(%r12,%rax), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x000015e4 movdqu $48(%r12,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xdc, //0x000015eb movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000015ef pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x000015f3 pmovmskb %xmm3, %r15d - 0x66, 0x0f, 0x6f, 0xdd, //0x000015f8 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000015fc pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001600 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xdf, //0x00001604 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001608 pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xe3, //0x0000160c pmovmskb %xmm3, %r12d - 0x66, 0x0f, 0x6f, 0xde, //0x00001611 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001615 pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00001619 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x6f, 0xdc, //0x0000161e movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00001622 pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00001626 pmovmskb %xmm3, %r13d - 0x66, 0x0f, 0x6f, 0xdd, //0x0000162b movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000162f pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xcb, //0x00001633 pmovmskb %xmm3, %r9d - 0x66, 0x0f, 0x6f, 0xdf, //0x00001638 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000163c pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001640 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xde, //0x00001644 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00001648 pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x0000164c pmovmskb %xmm3, %r10d - 0x66, 0x0f, 0x6f, 0xda, //0x00001651 movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x64, 0xdd, //0x00001655 pcmpgtb %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xef, //0x00001659 pcmpgtb %xmm15, %xmm5 - 0x66, 0x0f, 0xdb, 0xeb, //0x0000165e pand %xmm3, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x00001662 pmovmskb %xmm5, %edi - 0x66, 0x0f, 0x6f, 0xda, //0x00001666 movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x64, 0xdf, //0x0000166a pcmpgtb %xmm7, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xff, //0x0000166e pcmpgtb %xmm15, %xmm7 - 0x66, 0x0f, 0xdb, 0xfb, //0x00001673 pand %xmm3, %xmm7 - 0x66, 0x0f, 0xd7, 0xd7, //0x00001677 pmovmskb %xmm7, %edx - 0x66, 0x0f, 0x6f, 0xda, //0x0000167b movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x64, 0xde, //0x0000167f pcmpgtb %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xf7, //0x00001683 pcmpgtb %xmm15, %xmm6 - 0x66, 0x0f, 0xdb, 0xf3, //0x00001688 pand %xmm3, %xmm6 - 0x66, 0x0f, 0xd7, 0xde, //0x0000168c pmovmskb %xmm6, %ebx - 0x49, 0xc1, 0xe3, 0x30, //0x00001690 shlq $48, %r11 - 0x49, 0xc1, 0xe4, 0x20, //0x00001694 shlq $32, %r12 - 0x4d, 0x09, 0xdc, //0x00001698 orq %r11, %r12 - 0x48, 0xc1, 0xe1, 0x10, //0x0000169b shlq $16, %rcx - 0x4c, 0x09, 0xe1, //0x0000169f orq %r12, %rcx - 0x49, 0x09, 0xcf, //0x000016a2 orq %rcx, %r15 - 0x49, 0xc1, 0xe2, 0x30, //0x000016a5 shlq $48, %r10 - 0x48, 0xc1, 0xe6, 0x20, //0x000016a9 shlq $32, %rsi - 0x4c, 0x09, 0xd6, //0x000016ad orq %r10, %rsi - 0x49, 0xc1, 0xe1, 0x10, //0x000016b0 shlq $16, %r9 - 0x49, 0x09, 0xf1, //0x000016b4 orq %rsi, %r9 - 0x48, 0xc1, 0xe3, 0x30, //0x000016b7 shlq $48, %rbx - 0x48, 0xc1, 0xe2, 0x20, //0x000016bb shlq $32, %rdx - 0x48, 0x09, 0xda, //0x000016bf orq %rbx, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x000016c2 shlq $16, %rdi - 0x48, 0x09, 0xd7, //0x000016c6 orq %rdx, %rdi - 0x4d, 0x09, 0xcd, //0x000016c9 orq %r9, %r13 - 0x0f, 0x85, 0x55, 0x00, 0x00, 0x00, //0x000016cc jne LBB0_323 - 0x4d, 0x85, 0xc0, //0x000016d2 testq %r8, %r8 - 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x000016d5 jne LBB0_325 - 0x45, 0x31, 0xc0, //0x000016db xorl %r8d, %r8d - 0x4c, 0x8b, 0x65, 0xc0, //0x000016de movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x55, 0xb8, //0x000016e2 movq $-72(%rbp), %r10 - //0x000016e6 LBB0_309 - 0x66, 0x0f, 0x6f, 0xda, //0x000016e6 movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x000016ea pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe7, //0x000016ee pcmpgtb %xmm15, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x000016f3 pand %xmm3, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x000016f7 pmovmskb %xmm4, %ecx - 0x48, 0x09, 0xcf, //0x000016fb orq %rcx, %rdi - 0x4d, 0x85, 0xff, //0x000016fe testq %r15, %r15 - 0x0f, 0x85, 0x99, 0x00, 0x00, 0x00, //0x00001701 jne LBB0_327 - 0x48, 0x85, 0xff, //0x00001707 testq %rdi, %rdi - 0x0f, 0x85, 0x09, 0x1f, 0x00, 0x00, //0x0000170a jne LBB0_611 - 0x49, 0x83, 0xc6, 0xc0, //0x00001710 addq $-64, %r14 - 0x48, 0x83, 0xc0, 0x40, //0x00001714 addq $64, %rax - 0x49, 0x83, 0xfe, 0x3f, //0x00001718 cmpq $63, %r14 - 0x0f, 0x87, 0xae, 0xfe, 0xff, 0xff, //0x0000171c ja LBB0_306 - 0xe9, 0x62, 0x07, 0x00, 0x00, //0x00001722 jmp LBB0_312 - //0x00001727 LBB0_323 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00001727 cmpq $-1, $-56(%rbp) - 0x4c, 0x8b, 0x65, 0xc0, //0x0000172c movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x55, 0xb8, //0x00001730 movq $-72(%rbp), %r10 - 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x00001734 jne LBB0_326 - 0x49, 0x0f, 0xbc, 0xcd, //0x0000173a bsfq %r13, %rcx - 0x48, 0x01, 0xc1, //0x0000173e addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00001741 movq %rcx, $-56(%rbp) - 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00001745 jmp LBB0_326 - //0x0000174a LBB0_325 - 0x4c, 0x8b, 0x65, 0xc0, //0x0000174a movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x55, 0xb8, //0x0000174e movq $-72(%rbp), %r10 - //0x00001752 LBB0_326 - 0x4c, 0x89, 0xc1, //0x00001752 movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00001755 notq %rcx - 0x4c, 0x21, 0xe9, //0x00001758 andq %r13, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x0000175b leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xc2, //0x0000175f orq %r8, %rdx - 0x48, 0x89, 0xd6, //0x00001762 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00001765 notq %rsi - 0x4c, 0x21, 0xee, //0x00001768 andq %r13, %rsi - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000176b movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xde, //0x00001775 andq %rbx, %rsi - 0x45, 0x31, 0xc0, //0x00001778 xorl %r8d, %r8d - 0x48, 0x01, 0xce, //0x0000177b addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc0, //0x0000177e setb %r8b - 0x48, 0x01, 0xf6, //0x00001782 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001785 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x0000178f xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00001792 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00001795 notq %rsi - 0x49, 0x21, 0xf7, //0x00001798 andq %rsi, %r15 - 0xe9, 0x46, 0xff, 0xff, 0xff, //0x0000179b jmp LBB0_309 - //0x000017a0 LBB0_327 - 0x49, 0x0f, 0xbc, 0xcf, //0x000017a0 bsfq %r15, %rcx - 0x48, 0x85, 0xff, //0x000017a4 testq %rdi, %rdi - 0x0f, 0x84, 0xc3, 0x00, 0x00, 0x00, //0x000017a7 je LBB0_343 - 0x48, 0x0f, 0xbc, 0xd7, //0x000017ad bsfq %rdi, %rdx - 0xe9, 0xbf, 0x00, 0x00, 0x00, //0x000017b1 jmp LBB0_344 - //0x000017b6 LBB0_329 - 0x41, 0x89, 0xc8, //0x000017b6 movl %ecx, %r8d - 0x4d, 0x01, 0xd0, //0x000017b9 addq %r10, %r8 - 0x4d, 0x01, 0xf0, //0x000017bc addq %r14, %r8 - 0xe9, 0x06, 0x00, 0x00, 0x00, //0x000017bf jmp LBB0_331 - //0x000017c4 LBB0_330 - 0x48, 0x01, 0xd1, //0x000017c4 addq %rdx, %rcx - 0x49, 0x89, 0xc8, //0x000017c7 movq %rcx, %r8 - //0x000017ca LBB0_331 - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x000017ca movq $-1, %r14 - 0x4d, 0x85, 0xdb, //0x000017d1 testq %r11, %r11 - 0x0f, 0x84, 0x14, 0x1d, 0x00, 0x00, //0x000017d4 je LBB0_596 - 0x4d, 0x85, 0xed, //0x000017da testq %r13, %r13 - 0x0f, 0x84, 0x0b, 0x1d, 0x00, 0x00, //0x000017dd je LBB0_596 - 0x4d, 0x85, 0xe4, //0x000017e3 testq %r12, %r12 - 0x0f, 0x84, 0x02, 0x1d, 0x00, 0x00, //0x000017e6 je LBB0_596 - 0x4d, 0x29, 0xd0, //0x000017ec subq %r10, %r8 - 0x49, 0x8d, 0x48, 0xff, //0x000017ef leaq $-1(%r8), %rcx - 0x49, 0x39, 0xcb, //0x000017f3 cmpq %rcx, %r11 - 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x000017f6 je LBB0_340 - 0x49, 0x39, 0xcd, //0x000017fc cmpq %rcx, %r13 - 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x000017ff je LBB0_340 - 0x49, 0x39, 0xcc, //0x00001805 cmpq %rcx, %r12 - 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00001808 je LBB0_340 - 0x4d, 0x85, 0xed, //0x0000180e testq %r13, %r13 - 0x0f, 0x8e, 0xae, 0x00, 0x00, 0x00, //0x00001811 jle LBB0_351 - 0x49, 0x8d, 0x4d, 0xff, //0x00001817 leaq $-1(%r13), %rcx - 0x49, 0x39, 0xcc, //0x0000181b cmpq %rcx, %r12 - 0x0f, 0x84, 0xa1, 0x00, 0x00, 0x00, //0x0000181e je LBB0_351 - 0x49, 0xf7, 0xd5, //0x00001824 notq %r13 - 0x4d, 0x89, 0xee, //0x00001827 movq %r13, %r14 - 0xe9, 0x06, 0x00, 0x00, 0x00, //0x0000182a jmp LBB0_341 - //0x0000182f LBB0_340 - 0x49, 0xf7, 0xd8, //0x0000182f negq %r8 - 0x4d, 0x89, 0xc6, //0x00001832 movq %r8, %r14 - //0x00001835 LBB0_341 - 0x4d, 0x85, 0xf6, //0x00001835 testq %r14, %r14 - 0x0f, 0x88, 0xb0, 0x1c, 0x00, 0x00, //0x00001838 js LBB0_596 - //0x0000183e LBB0_342 - 0x49, 0x01, 0xc6, //0x0000183e addq %rax, %r14 - 0x4c, 0x8b, 0x45, 0xd0, //0x00001841 movq $-48(%rbp), %r8 - 0x4d, 0x89, 0x30, //0x00001845 movq %r14, (%r8) - 0x48, 0x85, 0xc0, //0x00001848 testq %rax, %rax - 0x48, 0x8b, 0x7d, 0xb0, //0x0000184b movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x65, 0xc0, //0x0000184f movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x00001853 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001857 movabsq $4294977024, %r14 - 0x4c, 0x8b, 0x55, 0xb8, //0x00001861 movq $-72(%rbp), %r10 - 0x0f, 0x8f, 0xb0, 0xea, 0xff, 0xff, //0x00001865 jg LBB0_28 - 0xe9, 0x26, 0x11, 0x00, 0x00, //0x0000186b jmp LBB0_217 - //0x00001870 LBB0_343 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001870 movl $64, %edx - //0x00001875 LBB0_344 - 0x4c, 0x8b, 0x45, 0xd0, //0x00001875 movq $-48(%rbp), %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x00001879 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x5d, 0xa8, //0x0000187d movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001881 movabsq $4294977024, %r14 - 0x48, 0x39, 0xca, //0x0000188b cmpq %rcx, %rdx - 0x0f, 0x82, 0x73, 0x1d, 0x00, 0x00, //0x0000188e jb LBB0_610 - 0x48, 0x01, 0xc8, //0x00001894 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00001897 addq $1, %rax - //0x0000189b LBB0_346 - 0x48, 0x85, 0xc0, //0x0000189b testq %rax, %rax - 0x0f, 0x88, 0xfb, 0x10, 0x00, 0x00, //0x0000189e js LBB0_508 - 0x49, 0x89, 0x00, //0x000018a4 movq %rax, (%r8) - 0x48, 0x83, 0x7d, 0x90, 0x00, //0x000018a7 cmpq $0, $-112(%rbp) - 0x0f, 0x8f, 0x69, 0xea, 0xff, 0xff, //0x000018ac jg LBB0_28 - 0xe9, 0x33, 0x1d, 0x00, 0x00, //0x000018b2 jmp LBB0_348 - //0x000018b7 LBB0_349 - 0x0f, 0xbc, 0xca, //0x000018b7 bsfl %edx, %ecx - //0x000018ba LBB0_350 - 0x49, 0xf7, 0xd5, //0x000018ba notq %r13 - 0x49, 0x29, 0xcd, //0x000018bd subq %rcx, %r13 - 0xe9, 0xed, 0xf6, 0xff, 0xff, //0x000018c0 jmp LBB0_210 - //0x000018c5 LBB0_351 - 0x4c, 0x89, 0xd9, //0x000018c5 movq %r11, %rcx - 0x4c, 0x09, 0xe1, //0x000018c8 orq %r12, %rcx - 0x0f, 0x99, 0xc1, //0x000018cb setns %cl - 0x0f, 0x88, 0xb1, 0x01, 0x00, 0x00, //0x000018ce js LBB0_355 - 0x4d, 0x39, 0xe3, //0x000018d4 cmpq %r12, %r11 - 0x0f, 0x8c, 0xa8, 0x01, 0x00, 0x00, //0x000018d7 jl LBB0_355 - 0x49, 0xf7, 0xd3, //0x000018dd notq %r11 - 0x4d, 0x89, 0xde, //0x000018e0 movq %r11, %r14 - 0xe9, 0x4d, 0xff, 0xff, 0xff, //0x000018e3 jmp LBB0_341 - //0x000018e8 LBB0_354 - 0x48, 0x8b, 0xb5, 0x70, 0xff, 0xff, 0xff, //0x000018e8 movq $-144(%rbp), %rsi - 0x4d, 0x89, 0xd1, //0x000018ef movq %r10, %r9 - 0x4e, 0x8d, 0x2c, 0x16, //0x000018f2 leaq (%rsi,%r10), %r13 - 0x49, 0x29, 0xcd, //0x000018f6 subq %rcx, %r13 - 0x49, 0x29, 0xd5, //0x000018f9 subq %rdx, %r13 - 0xe9, 0xb1, 0xf6, 0xff, 0xff, //0x000018fc jmp LBB0_210 - //0x00001901 LBB0_71 - 0x4c, 0x01, 0xe0, //0x00001901 addq %r12, %rax - 0x48, 0x8b, 0x7d, 0xb0, //0x00001904 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x5d, 0xa8, //0x00001908 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000190c movabsq $4294977024, %r14 - 0x49, 0x83, 0xf9, 0x20, //0x00001916 cmpq $32, %r9 - 0x4c, 0x8b, 0x55, 0xb8, //0x0000191a movq $-72(%rbp), %r10 - 0x0f, 0x82, 0x33, 0x09, 0x00, 0x00, //0x0000191e jb LBB0_424 - //0x00001924 LBB0_72 - 0xf3, 0x0f, 0x6f, 0x18, //0x00001924 movdqu (%rax), %xmm3 - 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00001928 movdqu $16(%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x0000192d movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00001931 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00001935 pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x00001939 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x0000193d pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x00001941 pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x74, 0xd9, //0x00001945 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001949 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x74, 0xe1, //0x0000194d pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xdc, //0x00001951 pmovmskb %xmm4, %ebx - 0x48, 0xc1, 0xe1, 0x10, //0x00001955 shlq $16, %rcx - 0x48, 0x09, 0xca, //0x00001959 orq %rcx, %rdx - 0x48, 0xc1, 0xe3, 0x10, //0x0000195c shlq $16, %rbx - 0x48, 0x09, 0xde, //0x00001960 orq %rbx, %rsi - 0x0f, 0x85, 0x77, 0x08, 0x00, 0x00, //0x00001963 jne LBB0_420 - 0x4d, 0x85, 0xc0, //0x00001969 testq %r8, %r8 - 0x0f, 0x85, 0x8b, 0x08, 0x00, 0x00, //0x0000196c jne LBB0_422 - 0x45, 0x31, 0xc0, //0x00001972 xorl %r8d, %r8d - 0x48, 0x85, 0xd2, //0x00001975 testq %rdx, %rdx - 0x0f, 0x84, 0xd1, 0x08, 0x00, 0x00, //0x00001978 je LBB0_423 - //0x0000197e LBB0_75 - 0x48, 0x0f, 0xbc, 0xca, //0x0000197e bsfq %rdx, %rcx - 0x48, 0x03, 0x45, 0x98, //0x00001982 addq $-104(%rbp), %rax - 0x48, 0x01, 0xc8, //0x00001986 addq %rcx, %rax - 0x4c, 0x8b, 0x45, 0xd0, //0x00001989 movq $-48(%rbp), %r8 - 0xe9, 0x8a, 0xf6, 0xff, 0xff, //0x0000198d jmp LBB0_215 - //0x00001992 LBB0_154 - 0x4c, 0x01, 0xe0, //0x00001992 addq %r12, %rax - 0x49, 0x83, 0xfa, 0x20, //0x00001995 cmpq $32, %r10 - 0x0f, 0x82, 0xe2, 0x06, 0x00, 0x00, //0x00001999 jb LBB0_408 - //0x0000199f LBB0_155 - 0xf3, 0x0f, 0x6f, 0x20, //0x0000199f movdqu (%rax), %xmm4 - 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x000019a3 movdqu $16(%rax), %xmm3 - 0x66, 0x0f, 0x6f, 0xec, //0x000019a8 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000019ac pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x000019b0 pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x6f, 0xeb, //0x000019b4 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000019b8 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x000019bc pmovmskb %xmm5, %edi - 0x66, 0x0f, 0x6f, 0xec, //0x000019c0 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x000019c4 pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x000019c8 pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xeb, //0x000019cc movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x000019d0 pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xdd, //0x000019d4 pmovmskb %xmm5, %ebx - 0x66, 0x0f, 0x6f, 0xea, //0x000019d8 movdqa %xmm2, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x000019dc pcmpgtb %xmm3, %xmm5 - 0x66, 0x41, 0x0f, 0x64, 0xdf, //0x000019e0 pcmpgtb %xmm15, %xmm3 - 0x66, 0x0f, 0xdb, 0xdd, //0x000019e5 pand %xmm5, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x000019e9 pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe7, 0x10, //0x000019ed shlq $16, %rdi - 0x48, 0x09, 0xf9, //0x000019f1 orq %rdi, %rcx - 0x48, 0xc1, 0xe3, 0x10, //0x000019f4 shlq $16, %rbx - 0x48, 0xc1, 0xe6, 0x10, //0x000019f8 shlq $16, %rsi - 0x48, 0x09, 0xda, //0x000019fc orq %rbx, %rdx - 0x0f, 0x85, 0x43, 0x09, 0x00, 0x00, //0x000019ff jne LBB0_436 - 0x4d, 0x85, 0xc0, //0x00001a05 testq %r8, %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x00001a08 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x5d, 0xa8, //0x00001a0c movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001a10 movabsq $4294977024, %r14 - 0x0f, 0x85, 0x45, 0x09, 0x00, 0x00, //0x00001a1a jne LBB0_438 - 0x45, 0x31, 0xc0, //0x00001a20 xorl %r8d, %r8d - //0x00001a23 LBB0_158 - 0x66, 0x0f, 0x6f, 0xda, //0x00001a23 movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x00001a27 pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe7, //0x00001a2b pcmpgtb %xmm15, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x00001a30 pand %xmm3, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x00001a34 pmovmskb %xmm4, %edx - 0x48, 0x09, 0xd6, //0x00001a38 orq %rdx, %rsi - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001a3b movl $64, %edx - 0xbb, 0x40, 0x00, 0x00, 0x00, //0x00001a40 movl $64, %ebx - 0x48, 0x85, 0xc9, //0x00001a45 testq %rcx, %rcx - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00001a48 je LBB0_160 - 0x48, 0x0f, 0xbc, 0xd9, //0x00001a4e bsfq %rcx, %rbx - //0x00001a52 LBB0_160 - 0x48, 0x85, 0xf6, //0x00001a52 testq %rsi, %rsi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00001a55 je LBB0_162 - 0x48, 0x0f, 0xbc, 0xd6, //0x00001a5b bsfq %rsi, %rdx - //0x00001a5f LBB0_162 - 0x48, 0x85, 0xc9, //0x00001a5f testq %rcx, %rcx - 0x0f, 0x84, 0xbe, 0x01, 0x00, 0x00, //0x00001a62 je LBB0_359 - 0x48, 0x39, 0xda, //0x00001a68 cmpq %rbx, %rdx - 0x0f, 0x82, 0x11, 0x1c, 0x00, 0x00, //0x00001a6b jb LBB0_620 - 0x48, 0x03, 0x45, 0x98, //0x00001a71 addq $-104(%rbp), %rax - 0x48, 0x01, 0xd8, //0x00001a75 addq %rbx, %rax - 0x4c, 0x8b, 0x45, 0xd0, //0x00001a78 movq $-48(%rbp), %r8 - 0x4c, 0x8b, 0x55, 0xb8, //0x00001a7c movq $-72(%rbp), %r10 - 0xe9, 0x97, 0xf5, 0xff, 0xff, //0x00001a80 jmp LBB0_215 - //0x00001a85 LBB0_355 - 0x49, 0x8d, 0x54, 0x24, 0xff, //0x00001a85 leaq $-1(%r12), %rdx - 0x49, 0x39, 0xd3, //0x00001a8a cmpq %rdx, %r11 - 0x49, 0xf7, 0xd4, //0x00001a8d notq %r12 - 0x4d, 0x0f, 0x45, 0xe0, //0x00001a90 cmovneq %r8, %r12 - 0x84, 0xc9, //0x00001a94 testb %cl, %cl - 0x4d, 0x0f, 0x44, 0xe0, //0x00001a96 cmoveq %r8, %r12 - 0x4d, 0x89, 0xe6, //0x00001a9a movq %r12, %r14 - 0xe9, 0x93, 0xfd, 0xff, 0xff, //0x00001a9d jmp LBB0_341 - //0x00001aa2 LBB0_135 - 0x4c, 0x01, 0xe0, //0x00001aa2 addq %r12, %rax - //0x00001aa5 LBB0_136 - 0x49, 0x83, 0xf9, 0x20, //0x00001aa5 cmpq $32, %r9 - 0x48, 0x8b, 0x7d, 0xb0, //0x00001aa9 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x5d, 0xa8, //0x00001aad movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001ab1 movabsq $4294977024, %r14 - 0x4c, 0x8b, 0x55, 0xb8, //0x00001abb movq $-72(%rbp), %r10 - 0x0f, 0x82, 0x62, 0x09, 0x00, 0x00, //0x00001abf jb LBB0_443 - 0xf3, 0x0f, 0x6f, 0x18, //0x00001ac5 movdqu (%rax), %xmm3 - 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00001ac9 movdqu $16(%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x00001ace movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00001ad2 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00001ad6 pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x00001ada movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00001ade pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x00001ae2 pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x74, 0xd9, //0x00001ae6 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001aea pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x74, 0xe1, //0x00001aee pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xdc, //0x00001af2 pmovmskb %xmm4, %ebx - 0x48, 0xc1, 0xe1, 0x10, //0x00001af6 shlq $16, %rcx - 0x48, 0x09, 0xca, //0x00001afa orq %rcx, %rdx - 0x48, 0xc1, 0xe3, 0x10, //0x00001afd shlq $16, %rbx - 0x48, 0x09, 0xde, //0x00001b01 orq %rbx, %rsi - 0x0f, 0x85, 0xa6, 0x08, 0x00, 0x00, //0x00001b04 jne LBB0_439 - 0x4d, 0x85, 0xc0, //0x00001b0a testq %r8, %r8 - 0x0f, 0x85, 0xba, 0x08, 0x00, 0x00, //0x00001b0d jne LBB0_441 - 0x45, 0x31, 0xc0, //0x00001b13 xorl %r8d, %r8d - 0x48, 0x85, 0xd2, //0x00001b16 testq %rdx, %rdx - 0x0f, 0x84, 0x00, 0x09, 0x00, 0x00, //0x00001b19 je LBB0_442 - //0x00001b1f LBB0_140 - 0x48, 0x0f, 0xbc, 0xca, //0x00001b1f bsfq %rdx, %rcx - 0x48, 0x03, 0x45, 0x98, //0x00001b23 addq $-104(%rbp), %rax - 0x48, 0x01, 0xc8, //0x00001b27 addq %rcx, %rax - 0x4c, 0x8b, 0x45, 0xd0, //0x00001b2a movq $-48(%rbp), %r8 - 0xe9, 0x55, 0xf5, 0xff, 0xff, //0x00001b2e jmp LBB0_225 - //0x00001b33 LBB0_181 - 0x4c, 0x01, 0xe0, //0x00001b33 addq %r12, %rax - 0x49, 0x83, 0xfe, 0x20, //0x00001b36 cmpq $32, %r14 - 0x0f, 0x82, 0xf4, 0x05, 0x00, 0x00, //0x00001b3a jb LBB0_414 - //0x00001b40 LBB0_182 - 0xf3, 0x0f, 0x6f, 0x20, //0x00001b40 movdqu (%rax), %xmm4 - 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00001b44 movdqu $16(%rax), %xmm3 - 0x66, 0x0f, 0x6f, 0xec, //0x00001b49 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00001b4d pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00001b51 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x6f, 0xeb, //0x00001b55 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00001b59 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x00001b5d pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x6f, 0xec, //0x00001b61 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00001b65 pcmpeqb %xmm1, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xdd, //0x00001b69 pmovmskb %xmm5, %r11d - 0x66, 0x0f, 0x6f, 0xeb, //0x00001b6e movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00001b72 pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00001b76 pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xea, //0x00001b7a movdqa %xmm2, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x00001b7e pcmpgtb %xmm3, %xmm5 - 0x66, 0x41, 0x0f, 0x64, 0xdf, //0x00001b82 pcmpgtb %xmm15, %xmm3 - 0x66, 0x0f, 0xdb, 0xdd, //0x00001b87 pand %xmm5, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00001b8b pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x00001b8f shlq $16, %rcx - 0x48, 0x09, 0xce, //0x00001b93 orq %rcx, %rsi - 0x48, 0xc1, 0xe2, 0x10, //0x00001b96 shlq $16, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x00001b9a shlq $16, %rdi - 0x49, 0x09, 0xd3, //0x00001b9e orq %rdx, %r11 - 0x4c, 0x8b, 0x55, 0xb8, //0x00001ba1 movq $-72(%rbp), %r10 - 0x0f, 0x85, 0x6d, 0x09, 0x00, 0x00, //0x00001ba5 jne LBB0_455 - 0x4d, 0x85, 0xc9, //0x00001bab testq %r9, %r9 - 0x0f, 0x85, 0x81, 0x09, 0x00, 0x00, //0x00001bae jne LBB0_457 - 0x45, 0x31, 0xc9, //0x00001bb4 xorl %r9d, %r9d - //0x00001bb7 LBB0_185 - 0x66, 0x0f, 0x6f, 0xda, //0x00001bb7 movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x00001bbb pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe7, //0x00001bbf pcmpgtb %xmm15, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x00001bc4 pand %xmm3, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x00001bc8 pmovmskb %xmm4, %ecx - 0x48, 0x09, 0xcf, //0x00001bcc orq %rcx, %rdi - 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00001bcf movl $64, %ecx - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001bd4 movl $64, %edx - 0x48, 0x85, 0xf6, //0x00001bd9 testq %rsi, %rsi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00001bdc je LBB0_187 - 0x48, 0x0f, 0xbc, 0xd6, //0x00001be2 bsfq %rsi, %rdx - //0x00001be6 LBB0_187 - 0x48, 0x85, 0xff, //0x00001be6 testq %rdi, %rdi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00001be9 je LBB0_189 - 0x48, 0x0f, 0xbc, 0xcf, //0x00001bef bsfq %rdi, %rcx - //0x00001bf3 LBB0_189 - 0x48, 0x85, 0xf6, //0x00001bf3 testq %rsi, %rsi - 0x0f, 0x84, 0x03, 0x01, 0x00, 0x00, //0x00001bf6 je LBB0_372 - 0x48, 0x39, 0xd1, //0x00001bfc cmpq %rdx, %rcx - 0x0f, 0x82, 0x9f, 0x1a, 0x00, 0x00, //0x00001bff jb LBB0_622 - 0x48, 0x03, 0x45, 0x98, //0x00001c05 addq $-104(%rbp), %rax - 0x48, 0x01, 0xd0, //0x00001c09 addq %rdx, %rax - 0xe9, 0xba, 0x01, 0x00, 0x00, //0x00001c0c jmp LBB0_388 - //0x00001c11 LBB0_356 - 0x89, 0xd9, //0x00001c11 movl %ebx, %ecx - 0xe9, 0xa2, 0xfc, 0xff, 0xff, //0x00001c13 jmp LBB0_350 - //0x00001c18 LBB0_357 - 0x89, 0xf1, //0x00001c18 movl %esi, %ecx - 0xe9, 0x9b, 0xfc, 0xff, 0xff, //0x00001c1a jmp LBB0_350 - //0x00001c1f LBB0_358 - 0x89, 0xd1, //0x00001c1f movl %edx, %ecx - 0xe9, 0x94, 0xfc, 0xff, 0xff, //0x00001c21 jmp LBB0_350 - //0x00001c26 LBB0_359 - 0x48, 0x85, 0xf6, //0x00001c26 testq %rsi, %rsi - 0x0f, 0x85, 0x53, 0x1a, 0x00, 0x00, //0x00001c29 jne LBB0_620 - 0x48, 0x83, 0xc0, 0x20, //0x00001c2f addq $32, %rax - 0x49, 0x83, 0xc2, 0xe0, //0x00001c33 addq $-32, %r10 - 0x4d, 0x85, 0xc0, //0x00001c37 testq %r8, %r8 - 0x0f, 0x85, 0x5c, 0x04, 0x00, 0x00, //0x00001c3a jne LBB0_409 - //0x00001c40 LBB0_361 - 0x48, 0x8b, 0x4d, 0xc8, //0x00001c40 movq $-56(%rbp), %rcx - 0x4c, 0x8b, 0x45, 0xd0, //0x00001c44 movq $-48(%rbp), %r8 - 0x4d, 0x85, 0xd2, //0x00001c48 testq %r10, %r10 - 0x0f, 0x84, 0x5c, 0x0d, 0x00, 0x00, //0x00001c4b je LBB0_509 - //0x00001c51 LBB0_362 - 0x0f, 0xb6, 0x10, //0x00001c51 movzbl (%rax), %edx - 0x80, 0xfa, 0x22, //0x00001c54 cmpb $34, %dl - 0x0f, 0x84, 0x95, 0x00, 0x00, 0x00, //0x00001c57 je LBB0_371 - 0x80, 0xfa, 0x5c, //0x00001c5d cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00001c60 je LBB0_366 - 0x80, 0xfa, 0x1f, //0x00001c66 cmpb $31, %dl - 0x0f, 0x86, 0x40, 0x1a, 0x00, 0x00, //0x00001c69 jbe LBB0_623 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001c6f movq $-1, %rdx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00001c76 movl $1, %esi - 0x48, 0x01, 0xf0, //0x00001c7b addq %rsi, %rax - 0x49, 0x01, 0xd2, //0x00001c7e addq %rdx, %r10 - 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00001c81 jne LBB0_362 - 0xe9, 0x21, 0x0d, 0x00, 0x00, //0x00001c87 jmp LBB0_509 - //0x00001c8c LBB0_366 - 0x49, 0x83, 0xfa, 0x01, //0x00001c8c cmpq $1, %r10 - 0x0f, 0x84, 0x94, 0x0b, 0x00, 0x00, //0x00001c90 je LBB0_485 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00001c96 movq $-2, %rdx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00001c9d movl $2, %esi - 0x48, 0x83, 0xf9, 0xff, //0x00001ca2 cmpq $-1, %rcx - 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00001ca6 je LBB0_369 - 0x4c, 0x8b, 0x45, 0xd0, //0x00001cac movq $-48(%rbp), %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x00001cb0 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x65, 0xc0, //0x00001cb4 movq $-64(%rbp), %r12 - 0xe9, 0x16, 0x00, 0x00, 0x00, //0x00001cb8 jmp LBB0_370 - //0x00001cbd LBB0_369 - 0x48, 0x89, 0xc1, //0x00001cbd movq %rax, %rcx - 0x4c, 0x8b, 0x65, 0xc0, //0x00001cc0 movq $-64(%rbp), %r12 - 0x4c, 0x29, 0xe1, //0x00001cc4 subq %r12, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00001cc7 movq %rcx, $-56(%rbp) - 0x4c, 0x8b, 0x45, 0xd0, //0x00001ccb movq $-48(%rbp), %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x00001ccf movq $-80(%rbp), %rdi - //0x00001cd3 LBB0_370 - 0x4c, 0x8b, 0x5d, 0xa8, //0x00001cd3 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001cd7 movabsq $4294977024, %r14 - 0x48, 0x01, 0xf0, //0x00001ce1 addq %rsi, %rax - 0x49, 0x01, 0xd2, //0x00001ce4 addq %rdx, %r10 - 0x0f, 0x85, 0x64, 0xff, 0xff, 0xff, //0x00001ce7 jne LBB0_362 - 0xe9, 0xbb, 0x0c, 0x00, 0x00, //0x00001ced jmp LBB0_509 - //0x00001cf2 LBB0_371 - 0x48, 0x03, 0x45, 0x98, //0x00001cf2 addq $-104(%rbp), %rax - 0x4c, 0x8b, 0x55, 0xb8, //0x00001cf6 movq $-72(%rbp), %r10 - 0xe9, 0x1d, 0xf3, 0xff, 0xff, //0x00001cfa jmp LBB0_215 - //0x00001cff LBB0_372 - 0x48, 0x85, 0xff, //0x00001cff testq %rdi, %rdi - 0x0f, 0x85, 0x9c, 0x19, 0x00, 0x00, //0x00001d02 jne LBB0_622 - 0x48, 0x83, 0xc0, 0x20, //0x00001d08 addq $32, %rax - 0x49, 0x83, 0xc6, 0xe0, //0x00001d0c addq $-32, %r14 - 0x4d, 0x85, 0xc9, //0x00001d10 testq %r9, %r9 - 0x0f, 0x85, 0x28, 0x04, 0x00, 0x00, //0x00001d13 jne LBB0_415 - //0x00001d19 LBB0_374 - 0x48, 0x8b, 0x55, 0xc8, //0x00001d19 movq $-56(%rbp), %rdx - 0x4d, 0x85, 0xf6, //0x00001d1d testq %r14, %r14 - 0x0f, 0x84, 0x4b, 0x19, 0x00, 0x00, //0x00001d20 je LBB0_384 - //0x00001d26 LBB0_375 - 0x0f, 0xb6, 0x08, //0x00001d26 movzbl (%rax), %ecx - 0x80, 0xf9, 0x22, //0x00001d29 cmpb $34, %cl - 0x0f, 0x84, 0x95, 0x00, 0x00, 0x00, //0x00001d2c je LBB0_387 - 0x80, 0xf9, 0x5c, //0x00001d32 cmpb $92, %cl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00001d35 je LBB0_379 - 0x80, 0xf9, 0x1f, //0x00001d3b cmpb $31, %cl - 0x0f, 0x86, 0x89, 0x19, 0x00, 0x00, //0x00001d3e jbe LBB0_624 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00001d44 movq $-1, %rcx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00001d4b movl $1, %esi - 0x48, 0x01, 0xf0, //0x00001d50 addq %rsi, %rax - 0x49, 0x01, 0xce, //0x00001d53 addq %rcx, %r14 - 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00001d56 jne LBB0_375 - 0xe9, 0x10, 0x19, 0x00, 0x00, //0x00001d5c jmp LBB0_384 - //0x00001d61 LBB0_379 - 0x48, 0x8b, 0x4d, 0xa0, //0x00001d61 movq $-96(%rbp), %rcx - 0x49, 0x83, 0xfe, 0x01, //0x00001d65 cmpq $1, %r14 - 0x0f, 0x84, 0xba, 0x19, 0x00, 0x00, //0x00001d69 je LBB0_632 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00001d6f movq $-2, %rcx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00001d76 movl $2, %esi - 0x48, 0x83, 0xfa, 0xff, //0x00001d7b cmpq $-1, %rdx - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00001d7f je LBB0_382 - 0x4c, 0x8b, 0x45, 0xd0, //0x00001d85 movq $-48(%rbp), %r8 - 0x4c, 0x8b, 0x65, 0xc0, //0x00001d89 movq $-64(%rbp), %r12 - 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00001d8d jmp LBB0_383 - //0x00001d92 LBB0_382 - 0x48, 0x89, 0xc2, //0x00001d92 movq %rax, %rdx - 0x4c, 0x8b, 0x65, 0xc0, //0x00001d95 movq $-64(%rbp), %r12 - 0x4c, 0x29, 0xe2, //0x00001d99 subq %r12, %rdx - 0x48, 0x89, 0x55, 0xc8, //0x00001d9c movq %rdx, $-56(%rbp) - 0x4c, 0x8b, 0x45, 0xd0, //0x00001da0 movq $-48(%rbp), %r8 - //0x00001da4 LBB0_383 - 0x4c, 0x8b, 0x55, 0xb8, //0x00001da4 movq $-72(%rbp), %r10 - 0x48, 0x01, 0xf0, //0x00001da8 addq %rsi, %rax - 0x49, 0x01, 0xce, //0x00001dab addq %rcx, %r14 - 0x0f, 0x85, 0x72, 0xff, 0xff, 0xff, //0x00001dae jne LBB0_375 - 0xe9, 0xb8, 0x18, 0x00, 0x00, //0x00001db4 jmp LBB0_384 - //0x00001db9 LBB0_385 - 0x0f, 0xbc, 0xca, //0x00001db9 bsfl %edx, %ecx - //0x00001dbc LBB0_386 - 0x49, 0xf7, 0xd6, //0x00001dbc notq %r14 - 0x49, 0x29, 0xce, //0x00001dbf subq %rcx, %r14 - 0xe9, 0x6e, 0xfa, 0xff, 0xff, //0x00001dc2 jmp LBB0_341 - //0x00001dc7 LBB0_387 - 0x48, 0x03, 0x45, 0x98, //0x00001dc7 addq $-104(%rbp), %rax - //0x00001dcb LBB0_388 - 0x48, 0x8b, 0x7d, 0xb0, //0x00001dcb movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x5d, 0xa8, //0x00001dcf movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001dd3 movabsq $4294977024, %r14 - 0xe9, 0xa2, 0xf2, 0xff, 0xff, //0x00001ddd jmp LBB0_224 - //0x00001de2 LBB0_389 - 0x48, 0x8b, 0xb5, 0x78, 0xff, 0xff, 0xff, //0x00001de2 movq $-136(%rbp), %rsi - 0x4c, 0x8d, 0x34, 0x06, //0x00001de9 leaq (%rsi,%rax), %r14 - 0x49, 0x29, 0xce, //0x00001ded subq %rcx, %r14 - 0x49, 0x29, 0xd6, //0x00001df0 subq %rdx, %r14 - 0xe9, 0x3d, 0xfa, 0xff, 0xff, //0x00001df3 jmp LBB0_341 - //0x00001df8 LBB0_237 - 0x4c, 0x01, 0xe0, //0x00001df8 addq %r12, %rax - //0x00001dfb LBB0_238 - 0x49, 0x83, 0xf9, 0x20, //0x00001dfb cmpq $32, %r9 - 0x48, 0x8b, 0x7d, 0xb0, //0x00001dff movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x5d, 0xa8, //0x00001e03 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001e07 movabsq $4294977024, %r14 - 0x0f, 0x82, 0x8f, 0x08, 0x00, 0x00, //0x00001e11 jb LBB0_466 - 0xf3, 0x0f, 0x6f, 0x18, //0x00001e17 movdqu (%rax), %xmm3 - 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00001e1b movdqu $16(%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x00001e20 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00001e24 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00001e28 pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x00001e2c movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00001e30 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x00001e34 pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x74, 0xd9, //0x00001e38 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001e3c pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x74, 0xe1, //0x00001e40 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xdc, //0x00001e44 pmovmskb %xmm4, %ebx - 0x48, 0xc1, 0xe1, 0x10, //0x00001e48 shlq $16, %rcx - 0x48, 0x09, 0xca, //0x00001e4c orq %rcx, %rdx - 0x48, 0xc1, 0xe3, 0x10, //0x00001e4f shlq $16, %rbx - 0x48, 0x09, 0xde, //0x00001e53 orq %rbx, %rsi - 0x0f, 0x85, 0xd3, 0x07, 0x00, 0x00, //0x00001e56 jne LBB0_462 - 0x4d, 0x85, 0xc0, //0x00001e5c testq %r8, %r8 - 0x4c, 0x8b, 0x55, 0xb8, //0x00001e5f movq $-72(%rbp), %r10 - 0x0f, 0x85, 0xe3, 0x07, 0x00, 0x00, //0x00001e63 jne LBB0_464 - 0x45, 0x31, 0xc0, //0x00001e69 xorl %r8d, %r8d - 0x48, 0x85, 0xd2, //0x00001e6c testq %rdx, %rdx - 0x0f, 0x84, 0x29, 0x08, 0x00, 0x00, //0x00001e6f je LBB0_465 - //0x00001e75 LBB0_242 - 0x48, 0x0f, 0xbc, 0xca, //0x00001e75 bsfq %rdx, %rcx - 0x48, 0x03, 0x45, 0x98, //0x00001e79 addq $-104(%rbp), %rax - 0x48, 0x01, 0xc8, //0x00001e7d addq %rcx, %rax - 0x4c, 0x8b, 0x45, 0xd0, //0x00001e80 movq $-48(%rbp), %r8 - 0xe9, 0x12, 0xfa, 0xff, 0xff, //0x00001e84 jmp LBB0_346 - //0x00001e89 LBB0_312 - 0x4c, 0x01, 0xe0, //0x00001e89 addq %r12, %rax - 0x49, 0x83, 0xfe, 0x20, //0x00001e8c cmpq $32, %r14 - 0x0f, 0x82, 0x2c, 0x01, 0x00, 0x00, //0x00001e90 jb LBB0_396 - //0x00001e96 LBB0_313 - 0xf3, 0x0f, 0x6f, 0x20, //0x00001e96 movdqu (%rax), %xmm4 - 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00001e9a movdqu $16(%rax), %xmm3 - 0x66, 0x0f, 0x6f, 0xec, //0x00001e9f movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00001ea3 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00001ea7 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x6f, 0xeb, //0x00001eab movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00001eaf pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x00001eb3 pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x6f, 0xec, //0x00001eb7 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00001ebb pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00001ebf pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xeb, //0x00001ec3 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00001ec7 pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xdd, //0x00001ecb pmovmskb %xmm5, %ebx - 0x66, 0x0f, 0x6f, 0xea, //0x00001ecf movdqa %xmm2, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x00001ed3 pcmpgtb %xmm3, %xmm5 - 0x66, 0x41, 0x0f, 0x64, 0xdf, //0x00001ed7 pcmpgtb %xmm15, %xmm3 - 0x66, 0x0f, 0xdb, 0xdd, //0x00001edc pand %xmm5, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00001ee0 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x00001ee4 shlq $16, %rcx - 0x48, 0x09, 0xce, //0x00001ee8 orq %rcx, %rsi - 0x48, 0xc1, 0xe3, 0x10, //0x00001eeb shlq $16, %rbx - 0x48, 0xc1, 0xe7, 0x10, //0x00001eef shlq $16, %rdi - 0x48, 0x09, 0xda, //0x00001ef3 orq %rbx, %rdx - 0x0f, 0x85, 0x5f, 0x08, 0x00, 0x00, //0x00001ef6 jne LBB0_478 - 0x4d, 0x85, 0xc0, //0x00001efc testq %r8, %r8 - 0x4c, 0x8b, 0x55, 0xb8, //0x00001eff movq $-72(%rbp), %r10 - 0x0f, 0x85, 0x6f, 0x08, 0x00, 0x00, //0x00001f03 jne LBB0_480 - 0x45, 0x31, 0xc0, //0x00001f09 xorl %r8d, %r8d - //0x00001f0c LBB0_316 - 0x66, 0x0f, 0x6f, 0xda, //0x00001f0c movdqa %xmm2, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x00001f10 pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe7, //0x00001f14 pcmpgtb %xmm15, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x00001f19 pand %xmm3, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x00001f1d pmovmskb %xmm4, %ecx - 0x48, 0x09, 0xcf, //0x00001f21 orq %rcx, %rdi - 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00001f24 movl $64, %ecx - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001f29 movl $64, %edx - 0x48, 0x85, 0xf6, //0x00001f2e testq %rsi, %rsi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00001f31 je LBB0_318 - 0x48, 0x0f, 0xbc, 0xd6, //0x00001f37 bsfq %rsi, %rdx - //0x00001f3b LBB0_318 - 0x48, 0x85, 0xff, //0x00001f3b testq %rdi, %rdi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00001f3e je LBB0_320 - 0x48, 0x0f, 0xbc, 0xcf, //0x00001f44 bsfq %rdi, %rcx - //0x00001f48 LBB0_320 - 0x48, 0x85, 0xf6, //0x00001f48 testq %rsi, %rsi - 0x0f, 0x84, 0x60, 0x00, 0x00, 0x00, //0x00001f4b je LBB0_394 - 0x48, 0x39, 0xd1, //0x00001f51 cmpq %rdx, %rcx - 0x0f, 0x82, 0xac, 0x17, 0x00, 0x00, //0x00001f54 jb LBB0_628 - 0x48, 0x03, 0x45, 0x98, //0x00001f5a addq $-104(%rbp), %rax - 0x48, 0x01, 0xd0, //0x00001f5e addq %rdx, %rax - 0x4c, 0x8b, 0x45, 0xd0, //0x00001f61 movq $-48(%rbp), %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x00001f65 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x5d, 0xa8, //0x00001f69 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001f6d movabsq $4294977024, %r14 - 0xe9, 0x1f, 0xf9, 0xff, 0xff, //0x00001f77 jmp LBB0_346 - //0x00001f7c LBB0_390 - 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x00001f7c movq $-1, %r12 - 0x4c, 0x89, 0xd9, //0x00001f83 movq %r11, %rcx - 0x4c, 0x89, 0xd7, //0x00001f86 movq %r10, %rdi - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00001f89 movq $-1, %r14 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00001f90 movq $-1, %r15 - 0xe9, 0x38, 0xe9, 0xff, 0xff, //0x00001f97 jmp LBB0_115 - //0x00001f9c LBB0_391 - 0x89, 0xd9, //0x00001f9c movl %ebx, %ecx - 0xe9, 0x19, 0xfe, 0xff, 0xff, //0x00001f9e jmp LBB0_386 - //0x00001fa3 LBB0_392 - 0x89, 0xf1, //0x00001fa3 movl %esi, %ecx - 0xe9, 0x12, 0xfe, 0xff, 0xff, //0x00001fa5 jmp LBB0_386 - //0x00001faa LBB0_393 - 0x89, 0xd1, //0x00001faa movl %edx, %ecx - 0xe9, 0x0b, 0xfe, 0xff, 0xff, //0x00001fac jmp LBB0_386 - //0x00001fb1 LBB0_394 - 0x48, 0x85, 0xff, //0x00001fb1 testq %rdi, %rdi - 0x0f, 0x85, 0x54, 0x17, 0x00, 0x00, //0x00001fb4 jne LBB0_629 - 0x48, 0x83, 0xc0, 0x20, //0x00001fba addq $32, %rax - 0x49, 0x83, 0xc6, 0xe0, //0x00001fbe addq $-32, %r14 - //0x00001fc2 LBB0_396 - 0x4d, 0x85, 0xc0, //0x00001fc2 testq %r8, %r8 - 0x0f, 0x85, 0x27, 0x08, 0x00, 0x00, //0x00001fc5 jne LBB0_483 - 0x48, 0x8b, 0x55, 0xc8, //0x00001fcb movq $-56(%rbp), %rdx - 0x4d, 0x85, 0xf6, //0x00001fcf testq %r14, %r14 - 0x0f, 0x84, 0x52, 0x08, 0x00, 0x00, //0x00001fd2 je LBB0_485 - //0x00001fd8 LBB0_398 - 0x0f, 0xb6, 0x08, //0x00001fd8 movzbl (%rax), %ecx - 0x80, 0xf9, 0x22, //0x00001fdb cmpb $34, %cl - 0x0f, 0x84, 0x10, 0x01, 0x00, 0x00, //0x00001fde je LBB0_411 - 0x80, 0xf9, 0x5c, //0x00001fe4 cmpb $92, %cl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00001fe7 je LBB0_403 - 0x80, 0xf9, 0x1f, //0x00001fed cmpb $31, %cl - 0x0f, 0x86, 0x27, 0x17, 0x00, 0x00, //0x00001ff0 jbe LBB0_631 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00001ff6 movq $-1, %rcx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00001ffd movl $1, %esi - //0x00002002 LBB0_402 - 0x48, 0x01, 0xf0, //0x00002002 addq %rsi, %rax - 0x49, 0x01, 0xce, //0x00002005 addq %rcx, %r14 - 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002008 jne LBB0_398 - 0xe9, 0x17, 0x08, 0x00, 0x00, //0x0000200e jmp LBB0_485 - //0x00002013 LBB0_403 - 0x49, 0x83, 0xfe, 0x01, //0x00002013 cmpq $1, %r14 - 0x0f, 0x84, 0x0d, 0x08, 0x00, 0x00, //0x00002017 je LBB0_485 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x0000201d movq $-2, %rcx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002024 movl $2, %esi - 0x48, 0x83, 0xfa, 0xff, //0x00002029 cmpq $-1, %rdx - 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x0000202d jne LBB0_402 - 0x48, 0x89, 0xc2, //0x00002033 movq %rax, %rdx - 0x48, 0x2b, 0x55, 0xc0, //0x00002036 subq $-64(%rbp), %rdx - 0x48, 0x89, 0x55, 0xc8, //0x0000203a movq %rdx, $-56(%rbp) - 0xe9, 0xbf, 0xff, 0xff, 0xff, //0x0000203e jmp LBB0_402 - //0x00002043 LBB0_406 - 0x49, 0x8d, 0x04, 0x0c, //0x00002043 leaq (%r12,%rcx), %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002047 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x0000204f xorl %r8d, %r8d - 0x49, 0x83, 0xf9, 0x20, //0x00002052 cmpq $32, %r9 - 0x4c, 0x8b, 0x55, 0xb8, //0x00002056 movq $-72(%rbp), %r10 - 0x0f, 0x83, 0xc4, 0xf8, 0xff, 0xff, //0x0000205a jae LBB0_72 - 0xe9, 0xf2, 0x01, 0x00, 0x00, //0x00002060 jmp LBB0_424 - //0x00002065 LBB0_407 - 0x48, 0x8b, 0x45, 0x90, //0x00002065 movq $-112(%rbp), %rax - 0x4c, 0x01, 0xe0, //0x00002069 addq %r12, %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000206c movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00002074 xorl %r8d, %r8d - 0x49, 0x83, 0xfa, 0x20, //0x00002077 cmpq $32, %r10 - 0x0f, 0x83, 0x1e, 0xf9, 0xff, 0xff, //0x0000207b jae LBB0_155 - //0x00002081 LBB0_408 - 0x48, 0x8b, 0x7d, 0xb0, //0x00002081 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x5d, 0xa8, //0x00002085 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002089 movabsq $4294977024, %r14 - 0x4d, 0x85, 0xc0, //0x00002093 testq %r8, %r8 - 0x0f, 0x84, 0xa4, 0xfb, 0xff, 0xff, //0x00002096 je LBB0_361 - //0x0000209c LBB0_409 - 0x4d, 0x85, 0xd2, //0x0000209c testq %r10, %r10 - 0x0f, 0x84, 0x85, 0x07, 0x00, 0x00, //0x0000209f je LBB0_485 - 0x48, 0x8b, 0x4d, 0x88, //0x000020a5 movq $-120(%rbp), %rcx - 0x48, 0x8d, 0x14, 0x08, //0x000020a9 leaq (%rax,%rcx), %rdx - 0x48, 0x8b, 0x75, 0xc8, //0x000020ad movq $-56(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x000020b1 cmpq $-1, %rsi - 0x48, 0x89, 0xf1, //0x000020b5 movq %rsi, %rcx - 0x48, 0x0f, 0x44, 0xf2, //0x000020b8 cmoveq %rdx, %rsi - 0x48, 0x0f, 0x44, 0xca, //0x000020bc cmoveq %rdx, %rcx - 0x48, 0x83, 0xc0, 0x01, //0x000020c0 addq $1, %rax - 0x49, 0x83, 0xc2, 0xff, //0x000020c4 addq $-1, %r10 - 0x48, 0x89, 0x75, 0xc8, //0x000020c8 movq %rsi, $-56(%rbp) - 0x4c, 0x8b, 0x45, 0xd0, //0x000020cc movq $-48(%rbp), %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x000020d0 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x65, 0xc0, //0x000020d4 movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x000020d8 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000020dc movabsq $4294977024, %r14 - 0x4d, 0x85, 0xd2, //0x000020e6 testq %r10, %r10 - 0x0f, 0x85, 0x62, 0xfb, 0xff, 0xff, //0x000020e9 jne LBB0_362 - 0xe9, 0xb9, 0x08, 0x00, 0x00, //0x000020ef jmp LBB0_509 - //0x000020f4 LBB0_411 - 0x48, 0x03, 0x45, 0x98, //0x000020f4 addq $-104(%rbp), %rax - 0x4c, 0x8b, 0x45, 0xd0, //0x000020f8 movq $-48(%rbp), %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x000020fc movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x65, 0xc0, //0x00002100 movq $-64(%rbp), %r12 - 0xe9, 0x4c, 0xf1, 0xff, 0xff, //0x00002104 jmp LBB0_248 - //0x00002109 LBB0_412 - 0x4c, 0x01, 0xe0, //0x00002109 addq %r12, %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000210c movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00002114 xorl %r8d, %r8d - 0xe9, 0x89, 0xf9, 0xff, 0xff, //0x00002117 jmp LBB0_136 - //0x0000211c LBB0_413 - 0x4c, 0x01, 0xe0, //0x0000211c addq %r12, %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000211f movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc9, //0x00002127 xorl %r9d, %r9d - 0x49, 0x83, 0xfe, 0x20, //0x0000212a cmpq $32, %r14 - 0x0f, 0x83, 0x0c, 0xfa, 0xff, 0xff, //0x0000212e jae LBB0_182 - //0x00002134 LBB0_414 - 0x4c, 0x8b, 0x55, 0xb8, //0x00002134 movq $-72(%rbp), %r10 - 0x4d, 0x85, 0xc9, //0x00002138 testq %r9, %r9 - 0x0f, 0x84, 0xd8, 0xfb, 0xff, 0xff, //0x0000213b je LBB0_374 - //0x00002141 LBB0_415 - 0x48, 0x8b, 0x4d, 0xa0, //0x00002141 movq $-96(%rbp), %rcx - 0x4d, 0x85, 0xf6, //0x00002145 testq %r14, %r14 - 0x0f, 0x84, 0xdb, 0x15, 0x00, 0x00, //0x00002148 je LBB0_632 - 0x48, 0x8b, 0x4d, 0x88, //0x0000214e movq $-120(%rbp), %rcx - 0x48, 0x01, 0xc1, //0x00002152 addq %rax, %rcx - 0x48, 0x8b, 0x75, 0xc8, //0x00002155 movq $-56(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x00002159 cmpq $-1, %rsi - 0x48, 0x89, 0xf2, //0x0000215d movq %rsi, %rdx - 0x48, 0x0f, 0x44, 0xf1, //0x00002160 cmoveq %rcx, %rsi - 0x48, 0x0f, 0x44, 0xd1, //0x00002164 cmoveq %rcx, %rdx - 0x48, 0x83, 0xc0, 0x01, //0x00002168 addq $1, %rax - 0x49, 0x83, 0xc6, 0xff, //0x0000216c addq $-1, %r14 - 0x48, 0x89, 0x75, 0xc8, //0x00002170 movq %rsi, $-56(%rbp) - 0x4c, 0x8b, 0x45, 0xd0, //0x00002174 movq $-48(%rbp), %r8 - 0x4c, 0x8b, 0x65, 0xc0, //0x00002178 movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x55, 0xb8, //0x0000217c movq $-72(%rbp), %r10 - 0x4d, 0x85, 0xf6, //0x00002180 testq %r14, %r14 - 0x0f, 0x85, 0x9d, 0xfb, 0xff, 0xff, //0x00002183 jne LBB0_375 - 0xe9, 0xe3, 0x14, 0x00, 0x00, //0x00002189 jmp LBB0_384 - //0x0000218e LBB0_417 - 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x0000218e movq $-1, %r11 - 0x4c, 0x89, 0xd1, //0x00002195 movq %r10, %rcx - 0x4c, 0x89, 0xff, //0x00002198 movq %r15, %rdi - 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x0000219b movq $-1, %r12 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000021a2 movq $-1, %r13 - 0xe9, 0x66, 0xf2, 0xff, 0xff, //0x000021a9 jmp LBB0_273 - //0x000021ae LBB0_418 - 0x49, 0x8d, 0x04, 0x0c, //0x000021ae leaq (%r12,%rcx), %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000021b2 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x000021ba xorl %r8d, %r8d - 0xe9, 0x39, 0xfc, 0xff, 0xff, //0x000021bd jmp LBB0_238 - //0x000021c2 LBB0_419 - 0x49, 0x8d, 0x04, 0x0c, //0x000021c2 leaq (%r12,%rcx), %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000021c6 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x000021ce xorl %r8d, %r8d - 0x49, 0x83, 0xfe, 0x20, //0x000021d1 cmpq $32, %r14 - 0x0f, 0x83, 0xbb, 0xfc, 0xff, 0xff, //0x000021d5 jae LBB0_313 - 0xe9, 0xe2, 0xfd, 0xff, 0xff, //0x000021db jmp LBB0_396 - //0x000021e0 LBB0_420 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000021e0 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x000021e5 jne LBB0_422 - 0x48, 0x89, 0xc1, //0x000021eb movq %rax, %rcx - 0x48, 0x2b, 0x4d, 0xc0, //0x000021ee subq $-64(%rbp), %rcx - 0x48, 0x0f, 0xbc, 0xfe, //0x000021f2 bsfq %rsi, %rdi - 0x48, 0x01, 0xcf, //0x000021f6 addq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xc8, //0x000021f9 movq %rdi, $-56(%rbp) - //0x000021fd LBB0_422 - 0x44, 0x89, 0xc1, //0x000021fd movl %r8d, %ecx - 0xf7, 0xd1, //0x00002200 notl %ecx - 0x21, 0xf1, //0x00002202 andl %esi, %ecx - 0x41, 0x8d, 0x3c, 0x48, //0x00002204 leal (%r8,%rcx,2), %edi - 0x8d, 0x1c, 0x09, //0x00002208 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x0000220b notl %ebx - 0x21, 0xf3, //0x0000220d andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000220f andl $-1431655766, %ebx - 0x45, 0x31, 0xc0, //0x00002215 xorl %r8d, %r8d - 0x01, 0xcb, //0x00002218 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc0, //0x0000221a setb %r8b - 0x01, 0xdb, //0x0000221e addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00002220 xorl $1431655765, %ebx - 0x21, 0xfb, //0x00002226 andl %edi, %ebx - 0xf7, 0xd3, //0x00002228 notl %ebx - 0x21, 0xda, //0x0000222a andl %ebx, %edx - 0x48, 0x8b, 0x7d, 0xb0, //0x0000222c movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x65, 0xc0, //0x00002230 movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x00002234 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002238 movabsq $4294977024, %r14 - 0x4c, 0x8b, 0x55, 0xb8, //0x00002242 movq $-72(%rbp), %r10 - 0x48, 0x85, 0xd2, //0x00002246 testq %rdx, %rdx - 0x0f, 0x85, 0x2f, 0xf7, 0xff, 0xff, //0x00002249 jne LBB0_75 - //0x0000224f LBB0_423 - 0x48, 0x83, 0xc0, 0x20, //0x0000224f addq $32, %rax - 0x49, 0x83, 0xc1, 0xe0, //0x00002253 addq $-32, %r9 - //0x00002257 LBB0_424 - 0x4d, 0x85, 0xc0, //0x00002257 testq %r8, %r8 - 0x0f, 0x85, 0x18, 0x03, 0x00, 0x00, //0x0000225a jne LBB0_458 - 0x48, 0x8b, 0x4d, 0xc8, //0x00002260 movq $-56(%rbp), %rcx - 0x4c, 0x8b, 0x45, 0xd0, //0x00002264 movq $-48(%rbp), %r8 - 0x4d, 0x85, 0xc9, //0x00002268 testq %r9, %r9 - 0x0f, 0x84, 0xa0, 0x00, 0x00, 0x00, //0x0000226b je LBB0_435 - //0x00002271 LBB0_426 - 0x31, 0xd2, //0x00002271 xorl %edx, %edx - //0x00002273 LBB0_427 - 0x0f, 0xb6, 0x1c, 0x10, //0x00002273 movzbl (%rax,%rdx), %ebx - 0x80, 0xfb, 0x22, //0x00002277 cmpb $34, %bl - 0x0f, 0x84, 0x8a, 0x00, 0x00, 0x00, //0x0000227a je LBB0_434 - 0x80, 0xfb, 0x5c, //0x00002280 cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002283 je LBB0_432 - 0x48, 0x83, 0xc2, 0x01, //0x00002289 addq $1, %rdx - 0x49, 0x39, 0xd1, //0x0000228d cmpq %rdx, %r9 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00002290 jne LBB0_427 - 0xe9, 0x7e, 0x00, 0x00, 0x00, //0x00002296 jmp LBB0_430 - //0x0000229b LBB0_432 - 0x49, 0x8d, 0x71, 0xff, //0x0000229b leaq $-1(%r9), %rsi - 0x48, 0x39, 0xd6, //0x0000229f cmpq %rdx, %rsi - 0x0f, 0x84, 0x82, 0x05, 0x00, 0x00, //0x000022a2 je LBB0_485 - 0x48, 0x8b, 0x75, 0x80, //0x000022a8 movq $-128(%rbp), %rsi - 0x48, 0x01, 0xc6, //0x000022ac addq %rax, %rsi - 0x48, 0x01, 0xd6, //0x000022af addq %rdx, %rsi - 0x48, 0x83, 0xf9, 0xff, //0x000022b2 cmpq $-1, %rcx - 0x48, 0x8b, 0x7d, 0xc8, //0x000022b6 movq $-56(%rbp), %rdi - 0x48, 0x0f, 0x44, 0xfe, //0x000022ba cmoveq %rsi, %rdi - 0x48, 0x89, 0x7d, 0xc8, //0x000022be movq %rdi, $-56(%rbp) - 0x48, 0x0f, 0x44, 0xce, //0x000022c2 cmoveq %rsi, %rcx - 0x48, 0x01, 0xd0, //0x000022c6 addq %rdx, %rax - 0x48, 0x83, 0xc0, 0x02, //0x000022c9 addq $2, %rax - 0x4c, 0x89, 0xce, //0x000022cd movq %r9, %rsi - 0x48, 0x29, 0xd6, //0x000022d0 subq %rdx, %rsi - 0x48, 0x83, 0xc6, 0xfe, //0x000022d3 addq $-2, %rsi - 0x49, 0x83, 0xc1, 0xfe, //0x000022d7 addq $-2, %r9 - 0x49, 0x39, 0xd1, //0x000022db cmpq %rdx, %r9 - 0x49, 0x89, 0xf1, //0x000022de movq %rsi, %r9 - 0x4c, 0x8b, 0x45, 0xd0, //0x000022e1 movq $-48(%rbp), %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x000022e5 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x65, 0xc0, //0x000022e9 movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x000022ed movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000022f1 movabsq $4294977024, %r14 - 0x4c, 0x8b, 0x55, 0xb8, //0x000022fb movq $-72(%rbp), %r10 - 0x0f, 0x85, 0x6c, 0xff, 0xff, 0xff, //0x000022ff jne LBB0_426 - 0xe9, 0xa3, 0x06, 0x00, 0x00, //0x00002305 jmp LBB0_509 - //0x0000230a LBB0_434 - 0x48, 0x01, 0xd0, //0x0000230a addq %rdx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x0000230d addq $1, %rax - //0x00002311 LBB0_435 - 0x4c, 0x29, 0xe0, //0x00002311 subq %r12, %rax - 0xe9, 0x03, 0xed, 0xff, 0xff, //0x00002314 jmp LBB0_215 - //0x00002319 LBB0_430 - 0x80, 0xfb, 0x22, //0x00002319 cmpb $34, %bl - 0x0f, 0x85, 0x08, 0x05, 0x00, 0x00, //0x0000231c jne LBB0_485 - 0x4c, 0x01, 0xc8, //0x00002322 addq %r9, %rax - 0x4c, 0x8b, 0x45, 0xd0, //0x00002325 movq $-48(%rbp), %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x00002329 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x65, 0xc0, //0x0000232d movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x00002331 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002335 movabsq $4294977024, %r14 - 0x4c, 0x8b, 0x55, 0xb8, //0x0000233f movq $-72(%rbp), %r10 - 0xe9, 0xc9, 0xff, 0xff, 0xff, //0x00002343 jmp LBB0_435 - //0x00002348 LBB0_436 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00002348 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x0000234d jne LBB0_438 - 0x48, 0x89, 0xc7, //0x00002353 movq %rax, %rdi - 0x48, 0x2b, 0x7d, 0xc0, //0x00002356 subq $-64(%rbp), %rdi - 0x48, 0x0f, 0xbc, 0xda, //0x0000235a bsfq %rdx, %rbx - 0x48, 0x01, 0xfb, //0x0000235e addq %rdi, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x00002361 movq %rbx, $-56(%rbp) - //0x00002365 LBB0_438 - 0x44, 0x89, 0xc7, //0x00002365 movl %r8d, %edi - 0xf7, 0xd7, //0x00002368 notl %edi - 0x21, 0xd7, //0x0000236a andl %edx, %edi - 0x45, 0x8d, 0x0c, 0x78, //0x0000236c leal (%r8,%rdi,2), %r9d - 0x8d, 0x1c, 0x3f, //0x00002370 leal (%rdi,%rdi), %ebx - 0xf7, 0xd3, //0x00002373 notl %ebx - 0x21, 0xd3, //0x00002375 andl %edx, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002377 andl $-1431655766, %ebx - 0x45, 0x31, 0xc0, //0x0000237d xorl %r8d, %r8d - 0x01, 0xfb, //0x00002380 addl %edi, %ebx - 0x41, 0x0f, 0x92, 0xc0, //0x00002382 setb %r8b - 0x01, 0xdb, //0x00002386 addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00002388 xorl $1431655765, %ebx - 0x44, 0x21, 0xcb, //0x0000238e andl %r9d, %ebx - 0xf7, 0xd3, //0x00002391 notl %ebx - 0x21, 0xd9, //0x00002393 andl %ebx, %ecx - 0x48, 0x8b, 0x7d, 0xb0, //0x00002395 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x65, 0xc0, //0x00002399 movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x0000239d movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000023a1 movabsq $4294977024, %r14 - 0xe9, 0x73, 0xf6, 0xff, 0xff, //0x000023ab jmp LBB0_158 - //0x000023b0 LBB0_439 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000023b0 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x000023b5 jne LBB0_441 - 0x48, 0x89, 0xc1, //0x000023bb movq %rax, %rcx - 0x48, 0x2b, 0x4d, 0xc0, //0x000023be subq $-64(%rbp), %rcx - 0x48, 0x0f, 0xbc, 0xfe, //0x000023c2 bsfq %rsi, %rdi - 0x48, 0x01, 0xcf, //0x000023c6 addq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xc8, //0x000023c9 movq %rdi, $-56(%rbp) - //0x000023cd LBB0_441 - 0x44, 0x89, 0xc1, //0x000023cd movl %r8d, %ecx - 0xf7, 0xd1, //0x000023d0 notl %ecx - 0x21, 0xf1, //0x000023d2 andl %esi, %ecx - 0x41, 0x8d, 0x3c, 0x48, //0x000023d4 leal (%r8,%rcx,2), %edi - 0x8d, 0x1c, 0x09, //0x000023d8 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x000023db notl %ebx - 0x21, 0xf3, //0x000023dd andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x000023df andl $-1431655766, %ebx - 0x45, 0x31, 0xc0, //0x000023e5 xorl %r8d, %r8d - 0x01, 0xcb, //0x000023e8 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc0, //0x000023ea setb %r8b - 0x01, 0xdb, //0x000023ee addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x000023f0 xorl $1431655765, %ebx - 0x21, 0xfb, //0x000023f6 andl %edi, %ebx - 0xf7, 0xd3, //0x000023f8 notl %ebx - 0x21, 0xda, //0x000023fa andl %ebx, %edx - 0x48, 0x8b, 0x7d, 0xb0, //0x000023fc movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x65, 0xc0, //0x00002400 movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x00002404 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002408 movabsq $4294977024, %r14 - 0x4c, 0x8b, 0x55, 0xb8, //0x00002412 movq $-72(%rbp), %r10 - 0x48, 0x85, 0xd2, //0x00002416 testq %rdx, %rdx - 0x0f, 0x85, 0x00, 0xf7, 0xff, 0xff, //0x00002419 jne LBB0_140 - //0x0000241f LBB0_442 - 0x48, 0x83, 0xc0, 0x20, //0x0000241f addq $32, %rax - 0x49, 0x83, 0xc1, 0xe0, //0x00002423 addq $-32, %r9 - //0x00002427 LBB0_443 - 0x4d, 0x85, 0xc0, //0x00002427 testq %r8, %r8 - 0x0f, 0x85, 0xa4, 0x01, 0x00, 0x00, //0x0000242a jne LBB0_460 - 0x48, 0x8b, 0x55, 0xc8, //0x00002430 movq $-56(%rbp), %rdx - 0x4c, 0x8b, 0x45, 0xd0, //0x00002434 movq $-48(%rbp), %r8 - 0x4d, 0x85, 0xc9, //0x00002438 testq %r9, %r9 - 0x0f, 0x84, 0xa0, 0x00, 0x00, 0x00, //0x0000243b je LBB0_454 - //0x00002441 LBB0_445 - 0x31, 0xf6, //0x00002441 xorl %esi, %esi - //0x00002443 LBB0_446 - 0x0f, 0xb6, 0x0c, 0x30, //0x00002443 movzbl (%rax,%rsi), %ecx - 0x80, 0xf9, 0x22, //0x00002447 cmpb $34, %cl - 0x0f, 0x84, 0x8a, 0x00, 0x00, 0x00, //0x0000244a je LBB0_453 - 0x80, 0xf9, 0x5c, //0x00002450 cmpb $92, %cl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002453 je LBB0_451 - 0x48, 0x83, 0xc6, 0x01, //0x00002459 addq $1, %rsi - 0x49, 0x39, 0xf1, //0x0000245d cmpq %rsi, %r9 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00002460 jne LBB0_446 - 0xe9, 0x7e, 0x00, 0x00, 0x00, //0x00002466 jmp LBB0_449 - //0x0000246b LBB0_451 - 0x49, 0x8d, 0x49, 0xff, //0x0000246b leaq $-1(%r9), %rcx - 0x48, 0x39, 0xf1, //0x0000246f cmpq %rsi, %rcx - 0x0f, 0x84, 0x4c, 0x12, 0x00, 0x00, //0x00002472 je LBB0_634 - 0x48, 0x8b, 0x4d, 0x80, //0x00002478 movq $-128(%rbp), %rcx - 0x48, 0x01, 0xc1, //0x0000247c addq %rax, %rcx - 0x48, 0x01, 0xf1, //0x0000247f addq %rsi, %rcx - 0x48, 0x83, 0xfa, 0xff, //0x00002482 cmpq $-1, %rdx - 0x48, 0x8b, 0x7d, 0xc8, //0x00002486 movq $-56(%rbp), %rdi - 0x48, 0x0f, 0x44, 0xf9, //0x0000248a cmoveq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xc8, //0x0000248e movq %rdi, $-56(%rbp) - 0x48, 0x0f, 0x44, 0xd1, //0x00002492 cmoveq %rcx, %rdx - 0x48, 0x01, 0xf0, //0x00002496 addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x02, //0x00002499 addq $2, %rax - 0x4c, 0x89, 0xc9, //0x0000249d movq %r9, %rcx - 0x48, 0x29, 0xf1, //0x000024a0 subq %rsi, %rcx - 0x48, 0x83, 0xc1, 0xfe, //0x000024a3 addq $-2, %rcx - 0x49, 0x83, 0xc1, 0xfe, //0x000024a7 addq $-2, %r9 - 0x49, 0x39, 0xf1, //0x000024ab cmpq %rsi, %r9 - 0x49, 0x89, 0xc9, //0x000024ae movq %rcx, %r9 - 0x4c, 0x8b, 0x45, 0xd0, //0x000024b1 movq $-48(%rbp), %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x000024b5 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x65, 0xc0, //0x000024b9 movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x000024bd movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000024c1 movabsq $4294977024, %r14 - 0x4c, 0x8b, 0x55, 0xb8, //0x000024cb movq $-72(%rbp), %r10 - 0x0f, 0x85, 0x6c, 0xff, 0xff, 0xff, //0x000024cf jne LBB0_445 - 0xe9, 0x42, 0x0f, 0x00, 0x00, //0x000024d5 jmp LBB0_582 - //0x000024da LBB0_453 - 0x48, 0x01, 0xf0, //0x000024da addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x000024dd addq $1, %rax - //0x000024e1 LBB0_454 - 0x4c, 0x29, 0xe0, //0x000024e1 subq %r12, %rax - 0xe9, 0x9f, 0xeb, 0xff, 0xff, //0x000024e4 jmp LBB0_225 - //0x000024e9 LBB0_449 - 0x80, 0xf9, 0x22, //0x000024e9 cmpb $34, %cl - 0x0f, 0x85, 0xd2, 0x11, 0x00, 0x00, //0x000024ec jne LBB0_634 - 0x4c, 0x01, 0xc8, //0x000024f2 addq %r9, %rax - 0x4c, 0x8b, 0x45, 0xd0, //0x000024f5 movq $-48(%rbp), %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x000024f9 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x65, 0xc0, //0x000024fd movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x00002501 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002505 movabsq $4294977024, %r14 - 0x4c, 0x8b, 0x55, 0xb8, //0x0000250f movq $-72(%rbp), %r10 - 0xe9, 0xc9, 0xff, 0xff, 0xff, //0x00002513 jmp LBB0_454 - //0x00002518 LBB0_455 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00002518 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x0000251d jne LBB0_457 - 0x49, 0x89, 0xc0, //0x00002523 movq %rax, %r8 - 0x4c, 0x2b, 0x45, 0xc0, //0x00002526 subq $-64(%rbp), %r8 - 0x49, 0x0f, 0xbc, 0xdb, //0x0000252a bsfq %r11, %rbx - 0x4c, 0x01, 0xc3, //0x0000252e addq %r8, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x00002531 movq %rbx, $-56(%rbp) - //0x00002535 LBB0_457 - 0x44, 0x89, 0xc9, //0x00002535 movl %r9d, %ecx - 0xf7, 0xd1, //0x00002538 notl %ecx - 0x44, 0x21, 0xd9, //0x0000253a andl %r11d, %ecx - 0x45, 0x8d, 0x04, 0x49, //0x0000253d leal (%r9,%rcx,2), %r8d - 0x8d, 0x14, 0x09, //0x00002541 leal (%rcx,%rcx), %edx - 0xf7, 0xd2, //0x00002544 notl %edx - 0x44, 0x21, 0xda, //0x00002546 andl %r11d, %edx - 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002549 andl $-1431655766, %edx - 0x45, 0x31, 0xc9, //0x0000254f xorl %r9d, %r9d - 0x01, 0xca, //0x00002552 addl %ecx, %edx - 0x41, 0x0f, 0x92, 0xc1, //0x00002554 setb %r9b - 0x01, 0xd2, //0x00002558 addl %edx, %edx - 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x0000255a xorl $1431655765, %edx - 0x44, 0x21, 0xc2, //0x00002560 andl %r8d, %edx - 0xf7, 0xd2, //0x00002563 notl %edx - 0x21, 0xd6, //0x00002565 andl %edx, %esi - 0x4c, 0x8b, 0x45, 0xd0, //0x00002567 movq $-48(%rbp), %r8 - 0x4c, 0x8b, 0x65, 0xc0, //0x0000256b movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x55, 0xb8, //0x0000256f movq $-72(%rbp), %r10 - 0xe9, 0x3f, 0xf6, 0xff, 0xff, //0x00002573 jmp LBB0_185 - //0x00002578 LBB0_458 - 0x4d, 0x85, 0xc9, //0x00002578 testq %r9, %r9 - 0x0f, 0x84, 0xa9, 0x02, 0x00, 0x00, //0x0000257b je LBB0_485 - 0x48, 0x8b, 0x4d, 0x88, //0x00002581 movq $-120(%rbp), %rcx - 0x48, 0x8d, 0x14, 0x08, //0x00002585 leaq (%rax,%rcx), %rdx - 0x48, 0x8b, 0x75, 0xc8, //0x00002589 movq $-56(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x0000258d cmpq $-1, %rsi - 0x48, 0x89, 0xf1, //0x00002591 movq %rsi, %rcx - 0x48, 0x0f, 0x44, 0xf2, //0x00002594 cmoveq %rdx, %rsi - 0x48, 0x0f, 0x44, 0xca, //0x00002598 cmoveq %rdx, %rcx - 0x48, 0x83, 0xc0, 0x01, //0x0000259c addq $1, %rax - 0x49, 0x83, 0xc1, 0xff, //0x000025a0 addq $-1, %r9 - 0x48, 0x89, 0x75, 0xc8, //0x000025a4 movq %rsi, $-56(%rbp) - 0x4c, 0x8b, 0x45, 0xd0, //0x000025a8 movq $-48(%rbp), %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x000025ac movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x65, 0xc0, //0x000025b0 movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x000025b4 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000025b8 movabsq $4294977024, %r14 - 0x4c, 0x8b, 0x55, 0xb8, //0x000025c2 movq $-72(%rbp), %r10 - 0x4d, 0x85, 0xc9, //0x000025c6 testq %r9, %r9 - 0x0f, 0x85, 0xa2, 0xfc, 0xff, 0xff, //0x000025c9 jne LBB0_426 - 0xe9, 0x3d, 0xfd, 0xff, 0xff, //0x000025cf jmp LBB0_435 - //0x000025d4 LBB0_460 - 0x4d, 0x85, 0xc9, //0x000025d4 testq %r9, %r9 - 0x0f, 0x84, 0xe7, 0x10, 0x00, 0x00, //0x000025d7 je LBB0_634 - 0x48, 0x8b, 0x4d, 0x88, //0x000025dd movq $-120(%rbp), %rcx - 0x48, 0x01, 0xc1, //0x000025e1 addq %rax, %rcx - 0x48, 0x8b, 0x75, 0xc8, //0x000025e4 movq $-56(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x000025e8 cmpq $-1, %rsi - 0x48, 0x89, 0xf2, //0x000025ec movq %rsi, %rdx - 0x48, 0x0f, 0x44, 0xf1, //0x000025ef cmoveq %rcx, %rsi - 0x48, 0x0f, 0x44, 0xd1, //0x000025f3 cmoveq %rcx, %rdx - 0x48, 0x83, 0xc0, 0x01, //0x000025f7 addq $1, %rax - 0x49, 0x83, 0xc1, 0xff, //0x000025fb addq $-1, %r9 - 0x48, 0x89, 0x75, 0xc8, //0x000025ff movq %rsi, $-56(%rbp) - 0x4c, 0x8b, 0x45, 0xd0, //0x00002603 movq $-48(%rbp), %r8 - 0x48, 0x8b, 0x7d, 0xb0, //0x00002607 movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x65, 0xc0, //0x0000260b movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x0000260f movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002613 movabsq $4294977024, %r14 - 0x4c, 0x8b, 0x55, 0xb8, //0x0000261d movq $-72(%rbp), %r10 - 0x4d, 0x85, 0xc9, //0x00002621 testq %r9, %r9 - 0x0f, 0x85, 0x17, 0xfe, 0xff, 0xff, //0x00002624 jne LBB0_445 - 0xe9, 0xb2, 0xfe, 0xff, 0xff, //0x0000262a jmp LBB0_454 - //0x0000262f LBB0_462 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000262f cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00002634 jne LBB0_464 - 0x48, 0x89, 0xc1, //0x0000263a movq %rax, %rcx - 0x48, 0x2b, 0x4d, 0xc0, //0x0000263d subq $-64(%rbp), %rcx - 0x48, 0x0f, 0xbc, 0xfe, //0x00002641 bsfq %rsi, %rdi - 0x48, 0x01, 0xcf, //0x00002645 addq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xc8, //0x00002648 movq %rdi, $-56(%rbp) - //0x0000264c LBB0_464 - 0x44, 0x89, 0xc1, //0x0000264c movl %r8d, %ecx - 0xf7, 0xd1, //0x0000264f notl %ecx - 0x21, 0xf1, //0x00002651 andl %esi, %ecx - 0x41, 0x8d, 0x3c, 0x48, //0x00002653 leal (%r8,%rcx,2), %edi - 0x8d, 0x1c, 0x09, //0x00002657 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x0000265a notl %ebx - 0x21, 0xf3, //0x0000265c andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000265e andl $-1431655766, %ebx - 0x45, 0x31, 0xc0, //0x00002664 xorl %r8d, %r8d - 0x01, 0xcb, //0x00002667 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc0, //0x00002669 setb %r8b - 0x01, 0xdb, //0x0000266d addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x0000266f xorl $1431655765, %ebx - 0x21, 0xfb, //0x00002675 andl %edi, %ebx - 0xf7, 0xd3, //0x00002677 notl %ebx - 0x21, 0xda, //0x00002679 andl %ebx, %edx - 0x48, 0x8b, 0x7d, 0xb0, //0x0000267b movq $-80(%rbp), %rdi - 0x4c, 0x8b, 0x65, 0xc0, //0x0000267f movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x5d, 0xa8, //0x00002683 movq $-88(%rbp), %r11 - 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002687 movabsq $4294977024, %r14 - 0x4c, 0x8b, 0x55, 0xb8, //0x00002691 movq $-72(%rbp), %r10 - 0x48, 0x85, 0xd2, //0x00002695 testq %rdx, %rdx - 0x0f, 0x85, 0xd7, 0xf7, 0xff, 0xff, //0x00002698 jne LBB0_242 - //0x0000269e LBB0_465 - 0x48, 0x83, 0xc0, 0x20, //0x0000269e addq $32, %rax - 0x49, 0x83, 0xc1, 0xe0, //0x000026a2 addq $-32, %r9 - //0x000026a6 LBB0_466 - 0x4d, 0x85, 0xc0, //0x000026a6 testq %r8, %r8 - 0x0f, 0x85, 0x06, 0x01, 0x00, 0x00, //0x000026a9 jne LBB0_481 - 0x48, 0x8b, 0x55, 0xc8, //0x000026af movq $-56(%rbp), %rdx - 0x4d, 0x85, 0xc9, //0x000026b3 testq %r9, %r9 - 0x0f, 0x84, 0x82, 0x00, 0x00, 0x00, //0x000026b6 je LBB0_477 - //0x000026bc LBB0_468 - 0x31, 0xf6, //0x000026bc xorl %esi, %esi - //0x000026be LBB0_469 - 0x0f, 0xb6, 0x0c, 0x30, //0x000026be movzbl (%rax,%rsi), %ecx - 0x80, 0xf9, 0x22, //0x000026c2 cmpb $34, %cl - 0x0f, 0x84, 0x6c, 0x00, 0x00, 0x00, //0x000026c5 je LBB0_476 - 0x80, 0xf9, 0x5c, //0x000026cb cmpb $92, %cl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000026ce je LBB0_474 - 0x48, 0x83, 0xc6, 0x01, //0x000026d4 addq $1, %rsi - 0x49, 0x39, 0xf1, //0x000026d8 cmpq %rsi, %r9 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000026db jne LBB0_469 - 0xe9, 0x64, 0x00, 0x00, 0x00, //0x000026e1 jmp LBB0_472 - //0x000026e6 LBB0_474 - 0x49, 0x8d, 0x49, 0xff, //0x000026e6 leaq $-1(%r9), %rcx - 0x48, 0x39, 0xf1, //0x000026ea cmpq %rsi, %rcx - 0x0f, 0x84, 0x37, 0x01, 0x00, 0x00, //0x000026ed je LBB0_485 - 0x48, 0x8b, 0x4d, 0x80, //0x000026f3 movq $-128(%rbp), %rcx - 0x48, 0x01, 0xc1, //0x000026f7 addq %rax, %rcx - 0x48, 0x01, 0xf1, //0x000026fa addq %rsi, %rcx - 0x48, 0x83, 0xfa, 0xff, //0x000026fd cmpq $-1, %rdx - 0x48, 0x8b, 0x7d, 0xc8, //0x00002701 movq $-56(%rbp), %rdi - 0x48, 0x0f, 0x44, 0xf9, //0x00002705 cmoveq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xc8, //0x00002709 movq %rdi, $-56(%rbp) - 0x48, 0x0f, 0x44, 0xd1, //0x0000270d cmoveq %rcx, %rdx - 0x48, 0x01, 0xf0, //0x00002711 addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x02, //0x00002714 addq $2, %rax - 0x4c, 0x89, 0xc9, //0x00002718 movq %r9, %rcx - 0x48, 0x29, 0xf1, //0x0000271b subq %rsi, %rcx - 0x48, 0x83, 0xc1, 0xfe, //0x0000271e addq $-2, %rcx - 0x49, 0x83, 0xc1, 0xfe, //0x00002722 addq $-2, %r9 - 0x49, 0x39, 0xf1, //0x00002726 cmpq %rsi, %r9 - 0x49, 0x89, 0xc9, //0x00002729 movq %rcx, %r9 - 0x0f, 0x85, 0x8a, 0xff, 0xff, 0xff, //0x0000272c jne LBB0_468 - 0xe9, 0xf3, 0x00, 0x00, 0x00, //0x00002732 jmp LBB0_485 - //0x00002737 LBB0_476 - 0x48, 0x01, 0xf0, //0x00002737 addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x0000273a addq $1, %rax - //0x0000273e LBB0_477 - 0x4c, 0x8b, 0x65, 0xc0, //0x0000273e movq $-64(%rbp), %r12 - 0x4c, 0x29, 0xe0, //0x00002742 subq %r12, %rax - 0xe9, 0x03, 0xeb, 0xff, 0xff, //0x00002745 jmp LBB0_247 - //0x0000274a LBB0_472 - 0x80, 0xf9, 0x22, //0x0000274a cmpb $34, %cl - 0x0f, 0x85, 0xd7, 0x00, 0x00, 0x00, //0x0000274d jne LBB0_485 - 0x4c, 0x01, 0xc8, //0x00002753 addq %r9, %rax - 0xe9, 0xe3, 0xff, 0xff, 0xff, //0x00002756 jmp LBB0_477 - //0x0000275b LBB0_478 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000275b cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00002760 jne LBB0_480 - 0x48, 0x89, 0xc1, //0x00002766 movq %rax, %rcx - 0x48, 0x2b, 0x4d, 0xc0, //0x00002769 subq $-64(%rbp), %rcx - 0x48, 0x0f, 0xbc, 0xda, //0x0000276d bsfq %rdx, %rbx - 0x48, 0x01, 0xcb, //0x00002771 addq %rcx, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x00002774 movq %rbx, $-56(%rbp) - //0x00002778 LBB0_480 - 0x44, 0x89, 0xc1, //0x00002778 movl %r8d, %ecx - 0xf7, 0xd1, //0x0000277b notl %ecx - 0x21, 0xd1, //0x0000277d andl %edx, %ecx - 0x45, 0x8d, 0x0c, 0x48, //0x0000277f leal (%r8,%rcx,2), %r9d - 0x8d, 0x1c, 0x09, //0x00002783 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x00002786 notl %ebx - 0x21, 0xd3, //0x00002788 andl %edx, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000278a andl $-1431655766, %ebx - 0x45, 0x31, 0xc0, //0x00002790 xorl %r8d, %r8d - 0x01, 0xcb, //0x00002793 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc0, //0x00002795 setb %r8b - 0x01, 0xdb, //0x00002799 addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x0000279b xorl $1431655765, %ebx - 0x44, 0x21, 0xcb, //0x000027a1 andl %r9d, %ebx - 0xf7, 0xd3, //0x000027a4 notl %ebx - 0x21, 0xde, //0x000027a6 andl %ebx, %esi - 0x4c, 0x8b, 0x65, 0xc0, //0x000027a8 movq $-64(%rbp), %r12 - 0x4c, 0x8b, 0x55, 0xb8, //0x000027ac movq $-72(%rbp), %r10 - 0xe9, 0x57, 0xf7, 0xff, 0xff, //0x000027b0 jmp LBB0_316 - //0x000027b5 LBB0_481 - 0x4d, 0x85, 0xc9, //0x000027b5 testq %r9, %r9 - 0x0f, 0x84, 0x6c, 0x00, 0x00, 0x00, //0x000027b8 je LBB0_485 - 0x48, 0x8b, 0x4d, 0x88, //0x000027be movq $-120(%rbp), %rcx - 0x48, 0x01, 0xc1, //0x000027c2 addq %rax, %rcx - 0x48, 0x8b, 0x75, 0xc8, //0x000027c5 movq $-56(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x000027c9 cmpq $-1, %rsi - 0x48, 0x89, 0xf2, //0x000027cd movq %rsi, %rdx - 0x48, 0x0f, 0x44, 0xf1, //0x000027d0 cmoveq %rcx, %rsi - 0x48, 0x0f, 0x44, 0xd1, //0x000027d4 cmoveq %rcx, %rdx - 0x48, 0x83, 0xc0, 0x01, //0x000027d8 addq $1, %rax - 0x49, 0x83, 0xc1, 0xff, //0x000027dc addq $-1, %r9 - 0x48, 0x89, 0x75, 0xc8, //0x000027e0 movq %rsi, $-56(%rbp) - 0x4d, 0x85, 0xc9, //0x000027e4 testq %r9, %r9 - 0x0f, 0x85, 0xcf, 0xfe, 0xff, 0xff, //0x000027e7 jne LBB0_468 - 0xe9, 0x4c, 0xff, 0xff, 0xff, //0x000027ed jmp LBB0_477 - //0x000027f2 LBB0_483 - 0x4d, 0x85, 0xf6, //0x000027f2 testq %r14, %r14 - 0x0f, 0x84, 0x2f, 0x00, 0x00, 0x00, //0x000027f5 je LBB0_485 - 0x48, 0x8b, 0x4d, 0x88, //0x000027fb movq $-120(%rbp), %rcx - 0x48, 0x01, 0xc1, //0x000027ff addq %rax, %rcx - 0x48, 0x8b, 0x75, 0xc8, //0x00002802 movq $-56(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x00002806 cmpq $-1, %rsi - 0x48, 0x89, 0xf2, //0x0000280a movq %rsi, %rdx - 0x48, 0x0f, 0x44, 0xf1, //0x0000280d cmoveq %rcx, %rsi - 0x48, 0x0f, 0x44, 0xd1, //0x00002811 cmoveq %rcx, %rdx - 0x48, 0x83, 0xc0, 0x01, //0x00002815 addq $1, %rax - 0x49, 0x83, 0xc6, 0xff, //0x00002819 addq $-1, %r14 - 0x48, 0x89, 0x75, 0xc8, //0x0000281d movq %rsi, $-56(%rbp) - 0x4d, 0x85, 0xf6, //0x00002821 testq %r14, %r14 - 0x0f, 0x85, 0xae, 0xf7, 0xff, 0xff, //0x00002824 jne LBB0_398 - //0x0000282a LBB0_485 - 0x4c, 0x8b, 0x45, 0xd0, //0x0000282a movq $-48(%rbp), %r8 - 0xe9, 0x7a, 0x01, 0x00, 0x00, //0x0000282e jmp LBB0_509 - //0x00002833 LBB0_486 - 0x49, 0x89, 0x18, //0x00002833 movq %rbx, (%r8) - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002836 movq $-1, %rax - 0xe9, 0xe7, 0x0b, 0x00, 0x00, //0x0000283d jmp LBB0_580 - //0x00002842 LBB0_487 - 0x49, 0x89, 0x30, //0x00002842 movq %rsi, (%r8) - //0x00002845 LBB0_488 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002845 movq $-1, %rax - 0xe9, 0xd8, 0x0b, 0x00, 0x00, //0x0000284c jmp LBB0_580 - //0x00002851 LBB0_489 - 0x4c, 0x01, 0xe3, //0x00002851 addq %r12, %rbx - 0x48, 0x89, 0xd8, //0x00002854 movq %rbx, %rax - //0x00002857 LBB0_490 - 0x4c, 0x29, 0xe0, //0x00002857 subq %r12, %rax - 0x48, 0x89, 0xc3, //0x0000285a movq %rax, %rbx - //0x0000285d LBB0_491 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000285d movq $-1, %rax - 0x49, 0x89, 0xd9, //0x00002864 movq %rbx, %r9 - 0x48, 0x39, 0xf3, //0x00002867 cmpq %rsi, %rbx - 0x0f, 0x83, 0xb9, 0x0b, 0x00, 0x00, //0x0000286a jae LBB0_580 - //0x00002870 LBB0_492 - 0x49, 0x8d, 0x71, 0x01, //0x00002870 leaq $1(%r9), %rsi - 0x49, 0x89, 0x30, //0x00002874 movq %rsi, (%r8) - 0x43, 0x0f, 0xbe, 0x0c, 0x0c, //0x00002877 movsbl (%r12,%r9), %ecx - 0x83, 0xf9, 0x7b, //0x0000287c cmpl $123, %ecx - 0x0f, 0x87, 0x38, 0x01, 0x00, 0x00, //0x0000287f ja LBB0_511 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002885 movq $-1, %rax - 0x48, 0x8d, 0x15, 0xa5, 0x0e, 0x00, 0x00, //0x0000288c leaq $3749(%rip), %rdx /* LJTI0_0+0(%rip) */ - 0x48, 0x63, 0x0c, 0x8a, //0x00002893 movslq (%rdx,%rcx,4), %rcx - 0x48, 0x01, 0xd1, //0x00002897 addq %rdx, %rcx - 0xff, 0xe1, //0x0000289a jmpq *%rcx - //0x0000289c LBB0_494 - 0x48, 0x8b, 0x47, 0x08, //0x0000289c movq $8(%rdi), %rax - 0x48, 0x89, 0xc1, //0x000028a0 movq %rax, %rcx - 0x48, 0x29, 0xf1, //0x000028a3 subq %rsi, %rcx - 0x48, 0x83, 0xf9, 0x10, //0x000028a6 cmpq $16, %rcx - 0x0f, 0x82, 0xb0, 0x0d, 0x00, 0x00, //0x000028aa jb LBB0_616 - 0x4c, 0x89, 0xc9, //0x000028b0 movq %r9, %rcx - 0x48, 0xf7, 0xd1, //0x000028b3 notq %rcx - 0xf3, 0x0f, 0x6f, 0x05, 0x42, 0xd7, 0xff, 0xff, //0x000028b6 movdqu $-10430(%rip), %xmm0 /* LCPI0_0+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0x4a, 0xd7, 0xff, 0xff, //0x000028be movdqu $-10422(%rip), %xmm1 /* LCPI0_1+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x15, 0x52, 0xd7, 0xff, 0xff, //0x000028c6 movdqu $-10414(%rip), %xmm2 /* LCPI0_2+0(%rip) */ - 0x90, 0x90, //0x000028ce .p2align 4, 0x90 - //0x000028d0 LBB0_496 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x34, //0x000028d0 movdqu (%r12,%rsi), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x000028d6 movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x000028da pcmpeqb %xmm0, %xmm4 - 0x66, 0x0f, 0xdb, 0xd9, //0x000028de pand %xmm1, %xmm3 - 0x66, 0x0f, 0x74, 0xda, //0x000028e2 pcmpeqb %xmm2, %xmm3 - 0x66, 0x0f, 0xeb, 0xdc, //0x000028e6 por %xmm4, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x000028ea pmovmskb %xmm3, %edx - 0x85, 0xd2, //0x000028ee testl %edx, %edx - 0x0f, 0x85, 0x76, 0x00, 0x00, 0x00, //0x000028f0 jne LBB0_506 - 0x48, 0x83, 0xc6, 0x10, //0x000028f6 addq $16, %rsi - 0x48, 0x8d, 0x14, 0x08, //0x000028fa leaq (%rax,%rcx), %rdx - 0x48, 0x83, 0xc2, 0xf0, //0x000028fe addq $-16, %rdx - 0x48, 0x83, 0xc1, 0xf0, //0x00002902 addq $-16, %rcx - 0x48, 0x83, 0xfa, 0x0f, //0x00002906 cmpq $15, %rdx - 0x0f, 0x87, 0xc0, 0xff, 0xff, 0xff, //0x0000290a ja LBB0_496 - 0x4c, 0x89, 0xe6, //0x00002910 movq %r12, %rsi - 0x48, 0x29, 0xce, //0x00002913 subq %rcx, %rsi - 0x48, 0x01, 0xc8, //0x00002916 addq %rcx, %rax - 0x48, 0x89, 0xc1, //0x00002919 movq %rax, %rcx - 0x48, 0x85, 0xc9, //0x0000291c testq %rcx, %rcx - 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x0000291f je LBB0_505 - //0x00002925 LBB0_499 - 0x48, 0x8d, 0x3c, 0x0e, //0x00002925 leaq (%rsi,%rcx), %rdi - 0x31, 0xc0, //0x00002929 xorl %eax, %eax - //0x0000292b LBB0_500 - 0x0f, 0xb6, 0x14, 0x06, //0x0000292b movzbl (%rsi,%rax), %edx - 0x80, 0xfa, 0x2c, //0x0000292f cmpb $44, %dl - 0x0f, 0x84, 0x81, 0x0b, 0x00, 0x00, //0x00002932 je LBB0_592 - 0x80, 0xfa, 0x7d, //0x00002938 cmpb $125, %dl - 0x0f, 0x84, 0x78, 0x0b, 0x00, 0x00, //0x0000293b je LBB0_592 - 0x80, 0xfa, 0x5d, //0x00002941 cmpb $93, %dl - 0x0f, 0x84, 0x6f, 0x0b, 0x00, 0x00, //0x00002944 je LBB0_592 - 0x48, 0x83, 0xc0, 0x01, //0x0000294a addq $1, %rax - 0x48, 0x39, 0xc1, //0x0000294e cmpq %rax, %rcx - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x00002951 jne LBB0_500 - 0x48, 0x89, 0xfe, //0x00002957 movq %rdi, %rsi - //0x0000295a LBB0_505 - 0x4c, 0x29, 0xe6, //0x0000295a subq %r12, %rsi - 0x48, 0x8b, 0x45, 0xd0, //0x0000295d movq $-48(%rbp), %rax - 0x48, 0x89, 0x30, //0x00002961 movq %rsi, (%rax) - 0x4c, 0x89, 0xc8, //0x00002964 movq %r9, %rax - 0xe9, 0xbd, 0x0a, 0x00, 0x00, //0x00002967 jmp LBB0_580 - //0x0000296c LBB0_506 - 0x66, 0x0f, 0xbc, 0xc2, //0x0000296c bsfw %dx, %ax - 0x0f, 0xb7, 0xc0, //0x00002970 movzwl %ax, %eax - 0x48, 0x29, 0xc8, //0x00002973 subq %rcx, %rax - 0x49, 0x89, 0x00, //0x00002976 movq %rax, (%r8) - 0x4c, 0x89, 0xc8, //0x00002979 movq %r9, %rax - 0xe9, 0xa8, 0x0a, 0x00, 0x00, //0x0000297c jmp LBB0_580 - //0x00002981 LBB0_507 - 0x49, 0x8d, 0x49, 0x04, //0x00002981 leaq $4(%r9), %rcx - 0xe9, 0x9c, 0x05, 0x00, 0x00, //0x00002985 jmp LBB0_548 - //0x0000298a LBB0_597 - 0x48, 0xc7, 0xc0, 0xf9, 0xff, 0xff, 0xff, //0x0000298a movq $-7, %rax - 0xe9, 0x93, 0x0a, 0x00, 0x00, //0x00002991 jmp LBB0_580 - //0x00002996 LBB0_217 - 0x48, 0x83, 0xc0, 0xff, //0x00002996 addq $-1, %rax - 0xe9, 0x8a, 0x0a, 0x00, 0x00, //0x0000299a jmp LBB0_580 - //0x0000299f LBB0_508 - 0x48, 0x83, 0xf8, 0xff, //0x0000299f cmpq $-1, %rax - 0x48, 0x8b, 0x55, 0xc8, //0x000029a3 movq $-56(%rbp), %rdx - 0x0f, 0x85, 0x79, 0x0a, 0x00, 0x00, //0x000029a7 jne LBB0_510 - //0x000029ad LBB0_509 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000029ad movq $-1, %rax - 0x48, 0x8b, 0x55, 0xa0, //0x000029b4 movq $-96(%rbp), %rdx - 0xe9, 0x69, 0x0a, 0x00, 0x00, //0x000029b8 jmp LBB0_510 - //0x000029bd LBB0_511 - 0x4d, 0x89, 0x08, //0x000029bd movq %r9, (%r8) - 0xe9, 0x3d, 0x0a, 0x00, 0x00, //0x000029c0 jmp LBB0_579 - //0x000029c5 LBB0_512 - 0x4c, 0x8b, 0x47, 0x08, //0x000029c5 movq $8(%rdi), %r8 - 0x4d, 0x89, 0xc6, //0x000029c9 movq %r8, %r14 - 0x49, 0x29, 0xf6, //0x000029cc subq %rsi, %r14 - 0x49, 0x83, 0xfe, 0x20, //0x000029cf cmpq $32, %r14 - 0x0f, 0x8c, 0xa1, 0x0c, 0x00, 0x00, //0x000029d3 jl LBB0_619 - 0x4f, 0x8d, 0x14, 0x0c, //0x000029d9 leaq (%r12,%r9), %r10 - 0x4d, 0x29, 0xc8, //0x000029dd subq %r9, %r8 - 0x41, 0xbf, 0x1f, 0x00, 0x00, 0x00, //0x000029e0 movl $31, %r15d - 0x45, 0x31, 0xf6, //0x000029e6 xorl %r14d, %r14d - 0xf3, 0x0f, 0x6f, 0x05, 0x3f, 0xd6, 0xff, 0xff, //0x000029e9 movdqu $-10689(%rip), %xmm0 /* LCPI0_3+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0x47, 0xd6, 0xff, 0xff, //0x000029f1 movdqu $-10681(%rip), %xmm1 /* LCPI0_4+0(%rip) */ - 0x45, 0x31, 0xdb, //0x000029f9 xorl %r11d, %r11d - 0x90, 0x90, 0x90, 0x90, //0x000029fc .p2align 4, 0x90 - //0x00002a00 LBB0_514 - 0xf3, 0x43, 0x0f, 0x6f, 0x54, 0x32, 0x01, //0x00002a00 movdqu $1(%r10,%r14), %xmm2 - 0xf3, 0x43, 0x0f, 0x6f, 0x5c, 0x32, 0x11, //0x00002a07 movdqu $17(%r10,%r14), %xmm3 - 0x66, 0x0f, 0x6f, 0xe2, //0x00002a0e movdqa %xmm2, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x00002a12 pcmpeqb %xmm0, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x00002a16 pmovmskb %xmm4, %edx - 0x66, 0x0f, 0x6f, 0xe3, //0x00002a1a movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x74, 0xe0, //0x00002a1e pcmpeqb %xmm0, %xmm4 - 0x66, 0x0f, 0xd7, 0xf4, //0x00002a22 pmovmskb %xmm4, %esi - 0x48, 0xc1, 0xe6, 0x10, //0x00002a26 shlq $16, %rsi - 0x48, 0x09, 0xd6, //0x00002a2a orq %rdx, %rsi - 0x66, 0x0f, 0x74, 0xd1, //0x00002a2d pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x00002a31 pmovmskb %xmm2, %ecx - 0x66, 0x0f, 0x74, 0xd9, //0x00002a35 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x00002a39 pmovmskb %xmm3, %edx - 0x48, 0xc1, 0xe2, 0x10, //0x00002a3d shlq $16, %rdx - 0x48, 0x09, 0xca, //0x00002a41 orq %rcx, %rdx - 0x48, 0x89, 0xd1, //0x00002a44 movq %rdx, %rcx - 0x4c, 0x09, 0xd9, //0x00002a47 orq %r11, %rcx - 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00002a4a je LBB0_516 - 0x44, 0x89, 0xd9, //0x00002a50 movl %r11d, %ecx - 0xf7, 0xd1, //0x00002a53 notl %ecx - 0x21, 0xd1, //0x00002a55 andl %edx, %ecx - 0x8d, 0x1c, 0x09, //0x00002a57 leal (%rcx,%rcx), %ebx - 0x44, 0x09, 0xdb, //0x00002a5a orl %r11d, %ebx - 0x89, 0xdf, //0x00002a5d movl %ebx, %edi - 0xf7, 0xd7, //0x00002a5f notl %edi - 0x21, 0xd7, //0x00002a61 andl %edx, %edi - 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002a63 andl $-1431655766, %edi - 0x45, 0x31, 0xdb, //0x00002a69 xorl %r11d, %r11d - 0x01, 0xcf, //0x00002a6c addl %ecx, %edi - 0x41, 0x0f, 0x92, 0xc3, //0x00002a6e setb %r11b - 0x01, 0xff, //0x00002a72 addl %edi, %edi - 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x00002a74 xorl $1431655765, %edi - 0x21, 0xdf, //0x00002a7a andl %ebx, %edi - 0xf7, 0xd7, //0x00002a7c notl %edi - 0x21, 0xfe, //0x00002a7e andl %edi, %esi - 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00002a80 jmp LBB0_517 - //0x00002a85 LBB0_516 - 0x45, 0x31, 0xdb, //0x00002a85 xorl %r11d, %r11d - //0x00002a88 LBB0_517 - 0x48, 0x85, 0xf6, //0x00002a88 testq %rsi, %rsi - 0x0f, 0x85, 0x40, 0x09, 0x00, 0x00, //0x00002a8b jne LBB0_576 - 0x49, 0x83, 0xc6, 0x20, //0x00002a91 addq $32, %r14 - 0x4b, 0x8d, 0x0c, 0x38, //0x00002a95 leaq (%r8,%r15), %rcx - 0x48, 0x83, 0xc1, 0xe0, //0x00002a99 addq $-32, %rcx - 0x49, 0x83, 0xc7, 0xe0, //0x00002a9d addq $-32, %r15 - 0x48, 0x83, 0xf9, 0x3f, //0x00002aa1 cmpq $63, %rcx - 0x0f, 0x8f, 0x55, 0xff, 0xff, 0xff, //0x00002aa5 jg LBB0_514 - 0x4d, 0x85, 0xdb, //0x00002aab testq %r11, %r11 - 0x0f, 0x85, 0x2e, 0x0c, 0x00, 0x00, //0x00002aae jne LBB0_626 - 0x4b, 0x8d, 0x34, 0x16, //0x00002ab4 leaq (%r14,%r10), %rsi - 0x48, 0x83, 0xc6, 0x01, //0x00002ab8 addq $1, %rsi - 0x49, 0xf7, 0xd6, //0x00002abc notq %r14 - 0x4d, 0x01, 0xc6, //0x00002abf addq %r8, %r14 - //0x00002ac2 LBB0_521 - 0x4d, 0x85, 0xf6, //0x00002ac2 testq %r14, %r14 - 0x48, 0x8b, 0x55, 0xd0, //0x00002ac5 movq $-48(%rbp), %rdx - 0x0f, 0x8f, 0x8b, 0x09, 0x00, 0x00, //0x00002ac9 jg LBB0_585 - 0xe9, 0x55, 0x09, 0x00, 0x00, //0x00002acf jmp LBB0_580 - //0x00002ad4 LBB0_522 - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002ad4 movabsq $6148914691236517205, %r15 - 0x48, 0x8b, 0x4f, 0x08, //0x00002ade movq $8(%rdi), %rcx - 0x48, 0x29, 0xf1, //0x00002ae2 subq %rsi, %rcx - 0x49, 0x01, 0xf4, //0x00002ae5 addq %rsi, %r12 - 0x31, 0xdb, //0x00002ae8 xorl %ebx, %ebx - 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0x4d, 0xd5, 0xff, 0xff, //0x00002aea movdqu $-10931(%rip), %xmm10 /* LCPI0_4+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0x35, 0xd5, 0xff, 0xff, //0x00002af3 movdqu $-10955(%rip), %xmm1 /* LCPI0_3+0(%rip) */ - 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x00002afb pcmpeqd %xmm9, %xmm9 - 0xf3, 0x0f, 0x6f, 0x1d, 0x68, 0xd5, 0xff, 0xff, //0x00002b00 movdqu $-10904(%rip), %xmm3 /* LCPI0_7+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x25, 0x10, 0xd5, 0xff, 0xff, //0x00002b08 movdqu $-10992(%rip), %xmm4 /* LCPI0_2+0(%rip) */ - 0x49, 0xbd, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00002b10 movabsq $3689348814741910323, %r13 - 0x66, 0x45, 0x0f, 0xef, 0xc0, //0x00002b1a pxor %xmm8, %xmm8 - 0x31, 0xd2, //0x00002b1f xorl %edx, %edx - 0x45, 0x31, 0xf6, //0x00002b21 xorl %r14d, %r14d - 0x45, 0x31, 0xd2, //0x00002b24 xorl %r10d, %r10d - 0x48, 0x83, 0xf9, 0x40, //0x00002b27 cmpq $64, %rcx - 0x48, 0x89, 0x4d, 0xc0, //0x00002b2b movq %rcx, $-64(%rbp) - 0x0f, 0x8c, 0x8c, 0x02, 0x00, 0x00, //0x00002b2f jl LBB0_531 - //0x00002b35 LBB0_525 - 0xf3, 0x41, 0x0f, 0x6f, 0x04, 0x24, //0x00002b35 movdqu (%r12), %xmm0 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x10, //0x00002b3b movdqu $16(%r12), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x20, //0x00002b42 movdqu $32(%r12), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x30, //0x00002b49 movdqu $48(%r12), %xmm6 - 0x66, 0x0f, 0x6f, 0xd0, //0x00002b50 movdqa %xmm0, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00002b54 pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xf2, //0x00002b59 pmovmskb %xmm2, %esi - 0x66, 0x0f, 0x6f, 0xd5, //0x00002b5d movdqa %xmm5, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00002b61 pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x00002b66 pmovmskb %xmm2, %ecx - 0x66, 0x0f, 0x6f, 0xd7, //0x00002b6a movdqa %xmm7, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00002b6e pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xfa, //0x00002b73 pmovmskb %xmm2, %edi - 0x66, 0x0f, 0x6f, 0xd6, //0x00002b77 movdqa %xmm6, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00002b7b pcmpeqb %xmm10, %xmm2 - 0x66, 0x44, 0x0f, 0xd7, 0xc2, //0x00002b80 pmovmskb %xmm2, %r8d - 0x49, 0xc1, 0xe0, 0x30, //0x00002b85 shlq $48, %r8 - 0x48, 0xc1, 0xe7, 0x20, //0x00002b89 shlq $32, %rdi - 0x4c, 0x09, 0xc7, //0x00002b8d orq %r8, %rdi - 0x48, 0xc1, 0xe1, 0x10, //0x00002b90 shlq $16, %rcx - 0x48, 0x09, 0xf9, //0x00002b94 orq %rdi, %rcx - 0x48, 0x09, 0xce, //0x00002b97 orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00002b9a movq %rsi, %rcx - 0x48, 0x09, 0xd1, //0x00002b9d orq %rdx, %rcx - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00002ba0 jne LBB0_527 - 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00002ba6 movq $-1, %rsi - 0x31, 0xc9, //0x00002bad xorl %ecx, %ecx - 0x48, 0x89, 0x4d, 0xb8, //0x00002baf movq %rcx, $-72(%rbp) - 0xe9, 0x44, 0x00, 0x00, 0x00, //0x00002bb3 jmp LBB0_528 - //0x00002bb8 LBB0_527 - 0x48, 0x89, 0xd1, //0x00002bb8 movq %rdx, %rcx - 0x48, 0xf7, 0xd1, //0x00002bbb notq %rcx - 0x48, 0x21, 0xf1, //0x00002bbe andq %rsi, %rcx - 0x48, 0x8d, 0x3c, 0x09, //0x00002bc1 leaq (%rcx,%rcx), %rdi - 0x48, 0x09, 0xd7, //0x00002bc5 orq %rdx, %rdi - 0x48, 0x89, 0xfa, //0x00002bc8 movq %rdi, %rdx - 0x48, 0xf7, 0xd2, //0x00002bcb notq %rdx - 0x49, 0x89, 0xd8, //0x00002bce movq %rbx, %r8 - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002bd1 movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xde, //0x00002bdb andq %rbx, %rsi - 0x4c, 0x89, 0xc3, //0x00002bde movq %r8, %rbx - 0x48, 0x21, 0xd6, //0x00002be1 andq %rdx, %rsi - 0x31, 0xd2, //0x00002be4 xorl %edx, %edx - 0x48, 0x01, 0xce, //0x00002be6 addq %rcx, %rsi - 0x0f, 0x92, 0xc2, //0x00002be9 setb %dl - 0x48, 0x89, 0x55, 0xb8, //0x00002bec movq %rdx, $-72(%rbp) - 0x48, 0x01, 0xf6, //0x00002bf0 addq %rsi, %rsi - 0x4c, 0x31, 0xfe, //0x00002bf3 xorq %r15, %rsi - 0x48, 0x21, 0xfe, //0x00002bf6 andq %rdi, %rsi - 0x48, 0xf7, 0xd6, //0x00002bf9 notq %rsi - //0x00002bfc LBB0_528 - 0x66, 0x0f, 0x6f, 0xd6, //0x00002bfc movdqa %xmm6, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x00002c00 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x00002c04 pmovmskb %xmm2, %ecx - 0x48, 0xc1, 0xe1, 0x30, //0x00002c08 shlq $48, %rcx - 0x66, 0x0f, 0x6f, 0xd7, //0x00002c0c movdqa %xmm7, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x00002c10 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xfa, //0x00002c14 pmovmskb %xmm2, %edi - 0x48, 0xc1, 0xe7, 0x20, //0x00002c18 shlq $32, %rdi - 0x48, 0x09, 0xcf, //0x00002c1c orq %rcx, %rdi - 0x66, 0x0f, 0x6f, 0xd5, //0x00002c1f movdqa %xmm5, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x00002c23 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x00002c27 pmovmskb %xmm2, %ecx - 0x48, 0xc1, 0xe1, 0x10, //0x00002c2b shlq $16, %rcx - 0x48, 0x09, 0xf9, //0x00002c2f orq %rdi, %rcx - 0x66, 0x0f, 0x6f, 0xd0, //0x00002c32 movdqa %xmm0, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x00002c36 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xfa, //0x00002c3a pmovmskb %xmm2, %edi - 0x48, 0x09, 0xcf, //0x00002c3e orq %rcx, %rdi - 0x48, 0x21, 0xf7, //0x00002c41 andq %rsi, %rdi - 0x66, 0x48, 0x0f, 0x6e, 0xd7, //0x00002c44 movq %rdi, %xmm2 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd1, 0x00, //0x00002c49 pclmulqdq $0, %xmm9, %xmm2 - 0x66, 0x49, 0x0f, 0x7e, 0xd3, //0x00002c50 movq %xmm2, %r11 - 0x49, 0x31, 0xdb, //0x00002c55 xorq %rbx, %r11 - 0x66, 0x0f, 0x6f, 0xd0, //0x00002c58 movdqa %xmm0, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00002c5c pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xfa, //0x00002c60 pmovmskb %xmm2, %edi - 0x66, 0x0f, 0x6f, 0xd5, //0x00002c64 movdqa %xmm5, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00002c68 pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x00002c6c pmovmskb %xmm2, %ecx - 0x66, 0x0f, 0x6f, 0xd7, //0x00002c70 movdqa %xmm7, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00002c74 pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xd2, //0x00002c78 pmovmskb %xmm2, %edx - 0x66, 0x0f, 0x6f, 0xd6, //0x00002c7c movdqa %xmm6, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x00002c80 pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xda, //0x00002c84 pmovmskb %xmm2, %ebx - 0x48, 0xc1, 0xe3, 0x30, //0x00002c88 shlq $48, %rbx - 0x48, 0xc1, 0xe2, 0x20, //0x00002c8c shlq $32, %rdx - 0x48, 0x09, 0xda, //0x00002c90 orq %rbx, %rdx - 0x48, 0xc1, 0xe1, 0x10, //0x00002c93 shlq $16, %rcx - 0x48, 0x09, 0xd1, //0x00002c97 orq %rdx, %rcx - 0x48, 0x09, 0xcf, //0x00002c9a orq %rcx, %rdi - 0x4c, 0x89, 0xd9, //0x00002c9d movq %r11, %rcx - 0x48, 0xf7, 0xd1, //0x00002ca0 notq %rcx - 0x48, 0x21, 0xcf, //0x00002ca3 andq %rcx, %rdi - 0x66, 0x0f, 0x74, 0xc4, //0x00002ca6 pcmpeqb %xmm4, %xmm0 - 0x66, 0x44, 0x0f, 0xd7, 0xc0, //0x00002caa pmovmskb %xmm0, %r8d - 0x66, 0x0f, 0x74, 0xec, //0x00002caf pcmpeqb %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00002cb3 pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x74, 0xfc, //0x00002cb7 pcmpeqb %xmm4, %xmm7 - 0x66, 0x0f, 0xd7, 0xdf, //0x00002cbb pmovmskb %xmm7, %ebx - 0x66, 0x0f, 0x74, 0xf4, //0x00002cbf pcmpeqb %xmm4, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00002cc3 pmovmskb %xmm6, %r15d - 0x49, 0xc1, 0xe7, 0x30, //0x00002cc8 shlq $48, %r15 - 0x48, 0xc1, 0xe3, 0x20, //0x00002ccc shlq $32, %rbx - 0x4c, 0x09, 0xfb, //0x00002cd0 orq %r15, %rbx - 0x48, 0xc1, 0xe2, 0x10, //0x00002cd3 shlq $16, %rdx - 0x48, 0x09, 0xda, //0x00002cd7 orq %rbx, %rdx - 0x49, 0x09, 0xd0, //0x00002cda orq %rdx, %r8 - 0x48, 0xbe, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00002cdd movabsq $1085102592571150095, %rsi - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002ce7 movabsq $6148914691236517205, %r15 - 0x49, 0x21, 0xc8, //0x00002cf1 andq %rcx, %r8 - 0x0f, 0x84, 0x64, 0x00, 0x00, 0x00, //0x00002cf4 je LBB0_523 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002cfa .p2align 4, 0x90 - //0x00002d00 LBB0_529 - 0x49, 0x8d, 0x48, 0xff, //0x00002d00 leaq $-1(%r8), %rcx - 0x48, 0x89, 0xca, //0x00002d04 movq %rcx, %rdx - 0x48, 0x21, 0xfa, //0x00002d07 andq %rdi, %rdx - 0x48, 0x89, 0xd3, //0x00002d0a movq %rdx, %rbx - 0x48, 0xd1, 0xeb, //0x00002d0d shrq %rbx - 0x4c, 0x21, 0xfb, //0x00002d10 andq %r15, %rbx - 0x48, 0x29, 0xda, //0x00002d13 subq %rbx, %rdx - 0x48, 0x89, 0xd3, //0x00002d16 movq %rdx, %rbx - 0x4c, 0x21, 0xeb, //0x00002d19 andq %r13, %rbx - 0x48, 0xc1, 0xea, 0x02, //0x00002d1c shrq $2, %rdx - 0x4c, 0x21, 0xea, //0x00002d20 andq %r13, %rdx - 0x48, 0x01, 0xda, //0x00002d23 addq %rbx, %rdx - 0x48, 0x89, 0xd3, //0x00002d26 movq %rdx, %rbx - 0x48, 0xc1, 0xeb, 0x04, //0x00002d29 shrq $4, %rbx - 0x48, 0x01, 0xd3, //0x00002d2d addq %rdx, %rbx - 0x48, 0x21, 0xf3, //0x00002d30 andq %rsi, %rbx - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002d33 movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xda, //0x00002d3d imulq %rdx, %rbx - 0x48, 0xc1, 0xeb, 0x38, //0x00002d41 shrq $56, %rbx - 0x4c, 0x01, 0xf3, //0x00002d45 addq %r14, %rbx - 0x4c, 0x39, 0xd3, //0x00002d48 cmpq %r10, %rbx - 0x0f, 0x86, 0x41, 0x06, 0x00, 0x00, //0x00002d4b jbe LBB0_575 - 0x49, 0x83, 0xc2, 0x01, //0x00002d51 addq $1, %r10 - 0x49, 0x21, 0xc8, //0x00002d55 andq %rcx, %r8 - 0x0f, 0x85, 0xa2, 0xff, 0xff, 0xff, //0x00002d58 jne LBB0_529 - //0x00002d5e LBB0_523 - 0x49, 0xc1, 0xfb, 0x3f, //0x00002d5e sarq $63, %r11 - 0x48, 0x89, 0xf9, //0x00002d62 movq %rdi, %rcx - 0x48, 0xd1, 0xe9, //0x00002d65 shrq %rcx - 0x4c, 0x21, 0xf9, //0x00002d68 andq %r15, %rcx - 0x48, 0x29, 0xcf, //0x00002d6b subq %rcx, %rdi - 0x48, 0x89, 0xf9, //0x00002d6e movq %rdi, %rcx - 0x4c, 0x21, 0xe9, //0x00002d71 andq %r13, %rcx - 0x48, 0xc1, 0xef, 0x02, //0x00002d74 shrq $2, %rdi - 0x4c, 0x21, 0xef, //0x00002d78 andq %r13, %rdi - 0x48, 0x01, 0xcf, //0x00002d7b addq %rcx, %rdi - 0x48, 0x89, 0xf9, //0x00002d7e movq %rdi, %rcx - 0x48, 0xc1, 0xe9, 0x04, //0x00002d81 shrq $4, %rcx - 0x48, 0x01, 0xf9, //0x00002d85 addq %rdi, %rcx - 0x48, 0x21, 0xf1, //0x00002d88 andq %rsi, %rcx - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002d8b movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xca, //0x00002d95 imulq %rdx, %rcx - 0x48, 0xc1, 0xe9, 0x38, //0x00002d99 shrq $56, %rcx - 0x49, 0x01, 0xce, //0x00002d9d addq %rcx, %r14 - 0x49, 0x83, 0xc4, 0x40, //0x00002da0 addq $64, %r12 - 0x48, 0x8b, 0x4d, 0xc0, //0x00002da4 movq $-64(%rbp), %rcx - 0x48, 0x83, 0xc1, 0xc0, //0x00002da8 addq $-64, %rcx - 0x4c, 0x89, 0xdb, //0x00002dac movq %r11, %rbx - 0x48, 0x8b, 0x55, 0xb8, //0x00002daf movq $-72(%rbp), %rdx - 0x48, 0x83, 0xf9, 0x40, //0x00002db3 cmpq $64, %rcx - 0x48, 0x89, 0x4d, 0xc0, //0x00002db7 movq %rcx, $-64(%rbp) - 0x0f, 0x8d, 0x74, 0xfd, 0xff, 0xff, //0x00002dbb jge LBB0_525 - //0x00002dc1 LBB0_531 - 0x48, 0x85, 0xc9, //0x00002dc1 testq %rcx, %rcx - 0x0f, 0x8e, 0xc6, 0x08, 0x00, 0x00, //0x00002dc4 jle LBB0_621 - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x00002dca movdqu %xmm8, $-176(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x40, 0xff, 0xff, 0xff, //0x00002dd3 movdqu %xmm8, $-192(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x30, 0xff, 0xff, 0xff, //0x00002ddc movdqu %xmm8, $-208(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x20, 0xff, 0xff, 0xff, //0x00002de5 movdqu %xmm8, $-224(%rbp) - 0x44, 0x89, 0xe1, //0x00002dee movl %r12d, %ecx - 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00002df1 andl $4095, %ecx - 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00002df7 cmpl $4033, %ecx - 0x0f, 0x82, 0x3e, 0x00, 0x00, 0x00, //0x00002dfd jb LBB0_535 - 0x48, 0x83, 0x7d, 0xc0, 0x20, //0x00002e03 cmpq $32, $-64(%rbp) - 0x0f, 0x82, 0x42, 0x00, 0x00, 0x00, //0x00002e08 jb LBB0_536 - 0x41, 0x0f, 0x10, 0x04, 0x24, //0x00002e0e movups (%r12), %xmm0 - 0x0f, 0x11, 0x85, 0x20, 0xff, 0xff, 0xff, //0x00002e13 movups %xmm0, $-224(%rbp) - 0xf3, 0x41, 0x0f, 0x6f, 0x44, 0x24, 0x10, //0x00002e1a movdqu $16(%r12), %xmm0 - 0xf3, 0x0f, 0x7f, 0x85, 0x30, 0xff, 0xff, 0xff, //0x00002e21 movdqu %xmm0, $-208(%rbp) - 0x49, 0x83, 0xc4, 0x20, //0x00002e29 addq $32, %r12 - 0x48, 0x8b, 0x4d, 0xc0, //0x00002e2d movq $-64(%rbp), %rcx - 0x48, 0x8d, 0x71, 0xe0, //0x00002e31 leaq $-32(%rcx), %rsi - 0x48, 0x8d, 0xbd, 0x40, 0xff, 0xff, 0xff, //0x00002e35 leaq $-192(%rbp), %rdi - 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x00002e3c jmp LBB0_537 - //0x00002e41 LBB0_535 - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002e41 movabsq $6148914691236517205, %r15 - 0xe9, 0xe5, 0xfc, 0xff, 0xff, //0x00002e4b jmp LBB0_525 - //0x00002e50 LBB0_536 - 0x48, 0x8d, 0xbd, 0x20, 0xff, 0xff, 0xff, //0x00002e50 leaq $-224(%rbp), %rdi - 0x48, 0x8b, 0x75, 0xc0, //0x00002e57 movq $-64(%rbp), %rsi - //0x00002e5b LBB0_537 - 0x48, 0x83, 0xfe, 0x10, //0x00002e5b cmpq $16, %rsi - 0x0f, 0x82, 0x4b, 0x00, 0x00, 0x00, //0x00002e5f jb LBB0_538 - 0xf3, 0x41, 0x0f, 0x6f, 0x04, 0x24, //0x00002e65 movdqu (%r12), %xmm0 - 0xf3, 0x0f, 0x7f, 0x07, //0x00002e6b movdqu %xmm0, (%rdi) - 0x49, 0x83, 0xc4, 0x10, //0x00002e6f addq $16, %r12 - 0x48, 0x83, 0xc7, 0x10, //0x00002e73 addq $16, %rdi - 0x48, 0x83, 0xc6, 0xf0, //0x00002e77 addq $-16, %rsi - 0x48, 0x83, 0xfe, 0x08, //0x00002e7b cmpq $8, %rsi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00002e7f jae LBB0_545 - //0x00002e85 LBB0_539 - 0x48, 0x83, 0xfe, 0x04, //0x00002e85 cmpq $4, %rsi - 0x0f, 0x8c, 0x48, 0x00, 0x00, 0x00, //0x00002e89 jl LBB0_540 - //0x00002e8f LBB0_546 - 0x41, 0x8b, 0x0c, 0x24, //0x00002e8f movl (%r12), %ecx - 0x89, 0x0f, //0x00002e93 movl %ecx, (%rdi) - 0x49, 0x83, 0xc4, 0x04, //0x00002e95 addq $4, %r12 - 0x48, 0x83, 0xc7, 0x04, //0x00002e99 addq $4, %rdi - 0x48, 0x83, 0xc6, 0xfc, //0x00002e9d addq $-4, %rsi - 0x48, 0x83, 0xfe, 0x02, //0x00002ea1 cmpq $2, %rsi - 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x00002ea5 jae LBB0_541 - 0xe9, 0x45, 0x00, 0x00, 0x00, //0x00002eab jmp LBB0_542 - //0x00002eb0 LBB0_538 - 0x48, 0x83, 0xfe, 0x08, //0x00002eb0 cmpq $8, %rsi - 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x00002eb4 jb LBB0_539 - //0x00002eba LBB0_545 - 0x49, 0x8b, 0x0c, 0x24, //0x00002eba movq (%r12), %rcx - 0x48, 0x89, 0x0f, //0x00002ebe movq %rcx, (%rdi) - 0x49, 0x83, 0xc4, 0x08, //0x00002ec1 addq $8, %r12 - 0x48, 0x83, 0xc7, 0x08, //0x00002ec5 addq $8, %rdi - 0x48, 0x83, 0xc6, 0xf8, //0x00002ec9 addq $-8, %rsi - 0x48, 0x83, 0xfe, 0x04, //0x00002ecd cmpq $4, %rsi - 0x0f, 0x8d, 0xb8, 0xff, 0xff, 0xff, //0x00002ed1 jge LBB0_546 - //0x00002ed7 LBB0_540 - 0x48, 0x83, 0xfe, 0x02, //0x00002ed7 cmpq $2, %rsi - 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x00002edb jb LBB0_542 - //0x00002ee1 LBB0_541 - 0x41, 0x0f, 0xb7, 0x0c, 0x24, //0x00002ee1 movzwl (%r12), %ecx - 0x66, 0x89, 0x0f, //0x00002ee6 movw %cx, (%rdi) - 0x49, 0x83, 0xc4, 0x02, //0x00002ee9 addq $2, %r12 - 0x48, 0x83, 0xc7, 0x02, //0x00002eed addq $2, %rdi - 0x48, 0x83, 0xc6, 0xfe, //0x00002ef1 addq $-2, %rsi - //0x00002ef5 LBB0_542 - 0x4c, 0x89, 0xe1, //0x00002ef5 movq %r12, %rcx - 0x4c, 0x8d, 0xa5, 0x20, 0xff, 0xff, 0xff, //0x00002ef8 leaq $-224(%rbp), %r12 - 0x48, 0x85, 0xf6, //0x00002eff testq %rsi, %rsi - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002f02 movabsq $6148914691236517205, %r15 - 0x0f, 0x84, 0x23, 0xfc, 0xff, 0xff, //0x00002f0c je LBB0_525 - 0x8a, 0x09, //0x00002f12 movb (%rcx), %cl - 0x88, 0x0f, //0x00002f14 movb %cl, (%rdi) - 0x4c, 0x8d, 0xa5, 0x20, 0xff, 0xff, 0xff, //0x00002f16 leaq $-224(%rbp), %r12 - 0xe9, 0x13, 0xfc, 0xff, 0xff, //0x00002f1d jmp LBB0_525 - //0x00002f22 LBB0_547 - 0x49, 0x8d, 0x49, 0x05, //0x00002f22 leaq $5(%r9), %rcx - //0x00002f26 LBB0_548 - 0x48, 0x3b, 0x4f, 0x08, //0x00002f26 cmpq $8(%rdi), %rcx - 0x0f, 0x87, 0xf9, 0x04, 0x00, 0x00, //0x00002f2a ja LBB0_580 - 0x49, 0x89, 0x08, //0x00002f30 movq %rcx, (%r8) - 0x4c, 0x89, 0xc8, //0x00002f33 movq %r9, %rax - 0xe9, 0xee, 0x04, 0x00, 0x00, //0x00002f36 jmp LBB0_580 - //0x00002f3b LBB0_550 - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002f3b movabsq $6148914691236517205, %r15 - 0x48, 0x8b, 0x4f, 0x08, //0x00002f45 movq $8(%rdi), %rcx - 0x48, 0x29, 0xf1, //0x00002f49 subq %rsi, %rcx - 0x49, 0x01, 0xf4, //0x00002f4c addq %rsi, %r12 - 0x31, 0xdb, //0x00002f4f xorl %ebx, %ebx - 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0xe6, 0xd0, 0xff, 0xff, //0x00002f51 movdqu $-12058(%rip), %xmm10 /* LCPI0_4+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0xce, 0xd0, 0xff, 0xff, //0x00002f5a movdqu $-12082(%rip), %xmm1 /* LCPI0_3+0(%rip) */ - 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x00002f62 pcmpeqd %xmm9, %xmm9 - 0xf3, 0x0f, 0x6f, 0x1d, 0xe1, 0xd0, 0xff, 0xff, //0x00002f67 movdqu $-12063(%rip), %xmm3 /* LCPI0_5+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x25, 0xe9, 0xd0, 0xff, 0xff, //0x00002f6f movdqu $-12055(%rip), %xmm4 /* LCPI0_6+0(%rip) */ - 0x49, 0xbd, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00002f77 movabsq $3689348814741910323, %r13 - 0x66, 0x45, 0x0f, 0xef, 0xc0, //0x00002f81 pxor %xmm8, %xmm8 - 0x31, 0xd2, //0x00002f86 xorl %edx, %edx - 0x45, 0x31, 0xf6, //0x00002f88 xorl %r14d, %r14d - 0x45, 0x31, 0xd2, //0x00002f8b xorl %r10d, %r10d - 0x48, 0x83, 0xf9, 0x40, //0x00002f8e cmpq $64, %rcx - 0x48, 0x89, 0x4d, 0xc0, //0x00002f92 movq %rcx, $-64(%rbp) - 0x0f, 0x8c, 0x95, 0x02, 0x00, 0x00, //0x00002f96 jl LBB0_559 - //0x00002f9c LBB0_553 - 0xf3, 0x41, 0x0f, 0x6f, 0x04, 0x24, //0x00002f9c movdqu (%r12), %xmm0 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x10, //0x00002fa2 movdqu $16(%r12), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x20, //0x00002fa9 movdqu $32(%r12), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x30, //0x00002fb0 movdqu $48(%r12), %xmm6 - 0x66, 0x0f, 0x6f, 0xd0, //0x00002fb7 movdqa %xmm0, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00002fbb pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xf2, //0x00002fc0 pmovmskb %xmm2, %esi - 0x66, 0x0f, 0x6f, 0xd5, //0x00002fc4 movdqa %xmm5, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00002fc8 pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x00002fcd pmovmskb %xmm2, %ecx - 0x66, 0x0f, 0x6f, 0xd7, //0x00002fd1 movdqa %xmm7, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00002fd5 pcmpeqb %xmm10, %xmm2 - 0x66, 0x0f, 0xd7, 0xfa, //0x00002fda pmovmskb %xmm2, %edi - 0x66, 0x0f, 0x6f, 0xd6, //0x00002fde movdqa %xmm6, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00002fe2 pcmpeqb %xmm10, %xmm2 - 0x66, 0x44, 0x0f, 0xd7, 0xc2, //0x00002fe7 pmovmskb %xmm2, %r8d - 0x49, 0xc1, 0xe0, 0x30, //0x00002fec shlq $48, %r8 - 0x48, 0xc1, 0xe7, 0x20, //0x00002ff0 shlq $32, %rdi - 0x4c, 0x09, 0xc7, //0x00002ff4 orq %r8, %rdi - 0x48, 0xc1, 0xe1, 0x10, //0x00002ff7 shlq $16, %rcx - 0x48, 0x09, 0xf9, //0x00002ffb orq %rdi, %rcx - 0x48, 0x09, 0xce, //0x00002ffe orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00003001 movq %rsi, %rcx - 0x48, 0x09, 0xd1, //0x00003004 orq %rdx, %rcx - 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00003007 jne LBB0_555 - 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x0000300d movq $-1, %rsi - 0x31, 0xc9, //0x00003014 xorl %ecx, %ecx - 0x48, 0x89, 0x4d, 0xb8, //0x00003016 movq %rcx, $-72(%rbp) - 0xe9, 0x44, 0x00, 0x00, 0x00, //0x0000301a jmp LBB0_556 - //0x0000301f LBB0_555 - 0x48, 0x89, 0xd1, //0x0000301f movq %rdx, %rcx - 0x48, 0xf7, 0xd1, //0x00003022 notq %rcx - 0x48, 0x21, 0xf1, //0x00003025 andq %rsi, %rcx - 0x48, 0x8d, 0x3c, 0x09, //0x00003028 leaq (%rcx,%rcx), %rdi - 0x48, 0x09, 0xd7, //0x0000302c orq %rdx, %rdi - 0x48, 0x89, 0xfa, //0x0000302f movq %rdi, %rdx - 0x48, 0xf7, 0xd2, //0x00003032 notq %rdx - 0x49, 0x89, 0xd8, //0x00003035 movq %rbx, %r8 - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003038 movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xde, //0x00003042 andq %rbx, %rsi - 0x4c, 0x89, 0xc3, //0x00003045 movq %r8, %rbx - 0x48, 0x21, 0xd6, //0x00003048 andq %rdx, %rsi - 0x31, 0xd2, //0x0000304b xorl %edx, %edx - 0x48, 0x01, 0xce, //0x0000304d addq %rcx, %rsi - 0x0f, 0x92, 0xc2, //0x00003050 setb %dl - 0x48, 0x89, 0x55, 0xb8, //0x00003053 movq %rdx, $-72(%rbp) - 0x48, 0x01, 0xf6, //0x00003057 addq %rsi, %rsi - 0x4c, 0x31, 0xfe, //0x0000305a xorq %r15, %rsi - 0x48, 0x21, 0xfe, //0x0000305d andq %rdi, %rsi - 0x48, 0xf7, 0xd6, //0x00003060 notq %rsi - //0x00003063 LBB0_556 - 0x66, 0x0f, 0x6f, 0xd6, //0x00003063 movdqa %xmm6, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x00003067 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x0000306b pmovmskb %xmm2, %ecx - 0x48, 0xc1, 0xe1, 0x30, //0x0000306f shlq $48, %rcx - 0x66, 0x0f, 0x6f, 0xd7, //0x00003073 movdqa %xmm7, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x00003077 pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xfa, //0x0000307b pmovmskb %xmm2, %edi - 0x48, 0xc1, 0xe7, 0x20, //0x0000307f shlq $32, %rdi - 0x48, 0x09, 0xcf, //0x00003083 orq %rcx, %rdi - 0x66, 0x0f, 0x6f, 0xd5, //0x00003086 movdqa %xmm5, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x0000308a pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x0000308e pmovmskb %xmm2, %ecx - 0x48, 0xc1, 0xe1, 0x10, //0x00003092 shlq $16, %rcx - 0x48, 0x09, 0xf9, //0x00003096 orq %rdi, %rcx - 0x66, 0x0f, 0x6f, 0xd0, //0x00003099 movdqa %xmm0, %xmm2 - 0x66, 0x0f, 0x74, 0xd1, //0x0000309d pcmpeqb %xmm1, %xmm2 - 0x66, 0x0f, 0xd7, 0xfa, //0x000030a1 pmovmskb %xmm2, %edi - 0x48, 0x09, 0xcf, //0x000030a5 orq %rcx, %rdi - 0x48, 0x21, 0xf7, //0x000030a8 andq %rsi, %rdi - 0x66, 0x48, 0x0f, 0x6e, 0xd7, //0x000030ab movq %rdi, %xmm2 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd1, 0x00, //0x000030b0 pclmulqdq $0, %xmm9, %xmm2 - 0x66, 0x49, 0x0f, 0x7e, 0xd3, //0x000030b7 movq %xmm2, %r11 - 0x49, 0x31, 0xdb, //0x000030bc xorq %rbx, %r11 - 0x66, 0x0f, 0x6f, 0xd0, //0x000030bf movdqa %xmm0, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x000030c3 pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xfa, //0x000030c7 pmovmskb %xmm2, %edi - 0x66, 0x0f, 0x6f, 0xd5, //0x000030cb movdqa %xmm5, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x000030cf pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xca, //0x000030d3 pmovmskb %xmm2, %ecx - 0x66, 0x0f, 0x6f, 0xd7, //0x000030d7 movdqa %xmm7, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x000030db pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xd2, //0x000030df pmovmskb %xmm2, %edx - 0x66, 0x0f, 0x6f, 0xd6, //0x000030e3 movdqa %xmm6, %xmm2 - 0x66, 0x0f, 0x74, 0xd3, //0x000030e7 pcmpeqb %xmm3, %xmm2 - 0x66, 0x0f, 0xd7, 0xda, //0x000030eb pmovmskb %xmm2, %ebx - 0x48, 0xc1, 0xe3, 0x30, //0x000030ef shlq $48, %rbx - 0x48, 0xc1, 0xe2, 0x20, //0x000030f3 shlq $32, %rdx - 0x48, 0x09, 0xda, //0x000030f7 orq %rbx, %rdx - 0x48, 0xc1, 0xe1, 0x10, //0x000030fa shlq $16, %rcx - 0x48, 0x09, 0xd1, //0x000030fe orq %rdx, %rcx - 0x48, 0x09, 0xcf, //0x00003101 orq %rcx, %rdi - 0x4c, 0x89, 0xd9, //0x00003104 movq %r11, %rcx - 0x48, 0xf7, 0xd1, //0x00003107 notq %rcx - 0x48, 0x21, 0xcf, //0x0000310a andq %rcx, %rdi - 0x66, 0x0f, 0x74, 0xc4, //0x0000310d pcmpeqb %xmm4, %xmm0 - 0x66, 0x44, 0x0f, 0xd7, 0xc0, //0x00003111 pmovmskb %xmm0, %r8d - 0x66, 0x0f, 0x74, 0xec, //0x00003116 pcmpeqb %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x0000311a pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x74, 0xfc, //0x0000311e pcmpeqb %xmm4, %xmm7 - 0x66, 0x0f, 0xd7, 0xdf, //0x00003122 pmovmskb %xmm7, %ebx - 0x66, 0x0f, 0x74, 0xf4, //0x00003126 pcmpeqb %xmm4, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x0000312a pmovmskb %xmm6, %r15d - 0x49, 0xc1, 0xe7, 0x30, //0x0000312f shlq $48, %r15 - 0x48, 0xc1, 0xe3, 0x20, //0x00003133 shlq $32, %rbx - 0x4c, 0x09, 0xfb, //0x00003137 orq %r15, %rbx - 0x48, 0xc1, 0xe2, 0x10, //0x0000313a shlq $16, %rdx - 0x48, 0x09, 0xda, //0x0000313e orq %rbx, %rdx - 0x49, 0x09, 0xd0, //0x00003141 orq %rdx, %r8 - 0x48, 0xbe, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00003144 movabsq $1085102592571150095, %rsi - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000314e movabsq $6148914691236517205, %r15 - 0x49, 0x21, 0xc8, //0x00003158 andq %rcx, %r8 - 0x0f, 0x84, 0x6d, 0x00, 0x00, 0x00, //0x0000315b je LBB0_551 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003161 .p2align 4, 0x90 - //0x00003170 LBB0_557 - 0x49, 0x8d, 0x48, 0xff, //0x00003170 leaq $-1(%r8), %rcx - 0x48, 0x89, 0xca, //0x00003174 movq %rcx, %rdx - 0x48, 0x21, 0xfa, //0x00003177 andq %rdi, %rdx - 0x48, 0x89, 0xd3, //0x0000317a movq %rdx, %rbx - 0x48, 0xd1, 0xeb, //0x0000317d shrq %rbx - 0x4c, 0x21, 0xfb, //0x00003180 andq %r15, %rbx - 0x48, 0x29, 0xda, //0x00003183 subq %rbx, %rdx - 0x48, 0x89, 0xd3, //0x00003186 movq %rdx, %rbx - 0x4c, 0x21, 0xeb, //0x00003189 andq %r13, %rbx - 0x48, 0xc1, 0xea, 0x02, //0x0000318c shrq $2, %rdx - 0x4c, 0x21, 0xea, //0x00003190 andq %r13, %rdx - 0x48, 0x01, 0xda, //0x00003193 addq %rbx, %rdx - 0x48, 0x89, 0xd3, //0x00003196 movq %rdx, %rbx - 0x48, 0xc1, 0xeb, 0x04, //0x00003199 shrq $4, %rbx - 0x48, 0x01, 0xd3, //0x0000319d addq %rdx, %rbx - 0x48, 0x21, 0xf3, //0x000031a0 andq %rsi, %rbx - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000031a3 movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xda, //0x000031ad imulq %rdx, %rbx - 0x48, 0xc1, 0xeb, 0x38, //0x000031b1 shrq $56, %rbx - 0x4c, 0x01, 0xf3, //0x000031b5 addq %r14, %rbx - 0x4c, 0x39, 0xd3, //0x000031b8 cmpq %r10, %rbx - 0x0f, 0x86, 0xd1, 0x01, 0x00, 0x00, //0x000031bb jbe LBB0_575 - 0x49, 0x83, 0xc2, 0x01, //0x000031c1 addq $1, %r10 - 0x49, 0x21, 0xc8, //0x000031c5 andq %rcx, %r8 - 0x0f, 0x85, 0xa2, 0xff, 0xff, 0xff, //0x000031c8 jne LBB0_557 - //0x000031ce LBB0_551 - 0x49, 0xc1, 0xfb, 0x3f, //0x000031ce sarq $63, %r11 - 0x48, 0x89, 0xf9, //0x000031d2 movq %rdi, %rcx - 0x48, 0xd1, 0xe9, //0x000031d5 shrq %rcx - 0x4c, 0x21, 0xf9, //0x000031d8 andq %r15, %rcx - 0x48, 0x29, 0xcf, //0x000031db subq %rcx, %rdi - 0x48, 0x89, 0xf9, //0x000031de movq %rdi, %rcx - 0x4c, 0x21, 0xe9, //0x000031e1 andq %r13, %rcx - 0x48, 0xc1, 0xef, 0x02, //0x000031e4 shrq $2, %rdi - 0x4c, 0x21, 0xef, //0x000031e8 andq %r13, %rdi - 0x48, 0x01, 0xcf, //0x000031eb addq %rcx, %rdi - 0x48, 0x89, 0xf9, //0x000031ee movq %rdi, %rcx - 0x48, 0xc1, 0xe9, 0x04, //0x000031f1 shrq $4, %rcx - 0x48, 0x01, 0xf9, //0x000031f5 addq %rdi, %rcx - 0x48, 0x21, 0xf1, //0x000031f8 andq %rsi, %rcx - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000031fb movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xca, //0x00003205 imulq %rdx, %rcx - 0x48, 0xc1, 0xe9, 0x38, //0x00003209 shrq $56, %rcx - 0x49, 0x01, 0xce, //0x0000320d addq %rcx, %r14 - 0x49, 0x83, 0xc4, 0x40, //0x00003210 addq $64, %r12 - 0x48, 0x8b, 0x4d, 0xc0, //0x00003214 movq $-64(%rbp), %rcx - 0x48, 0x83, 0xc1, 0xc0, //0x00003218 addq $-64, %rcx - 0x4c, 0x89, 0xdb, //0x0000321c movq %r11, %rbx - 0x48, 0x8b, 0x55, 0xb8, //0x0000321f movq $-72(%rbp), %rdx - 0x48, 0x83, 0xf9, 0x40, //0x00003223 cmpq $64, %rcx - 0x48, 0x89, 0x4d, 0xc0, //0x00003227 movq %rcx, $-64(%rbp) - 0x0f, 0x8d, 0x6b, 0xfd, 0xff, 0xff, //0x0000322b jge LBB0_553 - //0x00003231 LBB0_559 - 0x48, 0x85, 0xc9, //0x00003231 testq %rcx, %rcx - 0x0f, 0x8e, 0x56, 0x04, 0x00, 0x00, //0x00003234 jle LBB0_621 - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x0000323a movdqu %xmm8, $-176(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x40, 0xff, 0xff, 0xff, //0x00003243 movdqu %xmm8, $-192(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x30, 0xff, 0xff, 0xff, //0x0000324c movdqu %xmm8, $-208(%rbp) - 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x20, 0xff, 0xff, 0xff, //0x00003255 movdqu %xmm8, $-224(%rbp) - 0x44, 0x89, 0xe1, //0x0000325e movl %r12d, %ecx - 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00003261 andl $4095, %ecx - 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00003267 cmpl $4033, %ecx - 0x0f, 0x82, 0x3e, 0x00, 0x00, 0x00, //0x0000326d jb LBB0_563 - 0x48, 0x83, 0x7d, 0xc0, 0x20, //0x00003273 cmpq $32, $-64(%rbp) - 0x0f, 0x82, 0x42, 0x00, 0x00, 0x00, //0x00003278 jb LBB0_564 - 0x41, 0x0f, 0x10, 0x04, 0x24, //0x0000327e movups (%r12), %xmm0 - 0x0f, 0x11, 0x85, 0x20, 0xff, 0xff, 0xff, //0x00003283 movups %xmm0, $-224(%rbp) - 0xf3, 0x41, 0x0f, 0x6f, 0x44, 0x24, 0x10, //0x0000328a movdqu $16(%r12), %xmm0 - 0xf3, 0x0f, 0x7f, 0x85, 0x30, 0xff, 0xff, 0xff, //0x00003291 movdqu %xmm0, $-208(%rbp) - 0x49, 0x83, 0xc4, 0x20, //0x00003299 addq $32, %r12 - 0x48, 0x8b, 0x4d, 0xc0, //0x0000329d movq $-64(%rbp), %rcx - 0x48, 0x8d, 0x71, 0xe0, //0x000032a1 leaq $-32(%rcx), %rsi - 0x48, 0x8d, 0xbd, 0x40, 0xff, 0xff, 0xff, //0x000032a5 leaq $-192(%rbp), %rdi - 0xe9, 0x1a, 0x00, 0x00, 0x00, //0x000032ac jmp LBB0_565 - //0x000032b1 LBB0_563 - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000032b1 movabsq $6148914691236517205, %r15 - 0xe9, 0xdc, 0xfc, 0xff, 0xff, //0x000032bb jmp LBB0_553 - //0x000032c0 LBB0_564 - 0x48, 0x8d, 0xbd, 0x20, 0xff, 0xff, 0xff, //0x000032c0 leaq $-224(%rbp), %rdi - 0x48, 0x8b, 0x75, 0xc0, //0x000032c7 movq $-64(%rbp), %rsi - //0x000032cb LBB0_565 - 0x48, 0x83, 0xfe, 0x10, //0x000032cb cmpq $16, %rsi - 0x0f, 0x82, 0x4b, 0x00, 0x00, 0x00, //0x000032cf jb LBB0_566 - 0xf3, 0x41, 0x0f, 0x6f, 0x04, 0x24, //0x000032d5 movdqu (%r12), %xmm0 - 0xf3, 0x0f, 0x7f, 0x07, //0x000032db movdqu %xmm0, (%rdi) - 0x49, 0x83, 0xc4, 0x10, //0x000032df addq $16, %r12 - 0x48, 0x83, 0xc7, 0x10, //0x000032e3 addq $16, %rdi - 0x48, 0x83, 0xc6, 0xf0, //0x000032e7 addq $-16, %rsi - 0x48, 0x83, 0xfe, 0x08, //0x000032eb cmpq $8, %rsi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x000032ef jae LBB0_573 - //0x000032f5 LBB0_567 - 0x48, 0x83, 0xfe, 0x04, //0x000032f5 cmpq $4, %rsi - 0x0f, 0x8c, 0x48, 0x00, 0x00, 0x00, //0x000032f9 jl LBB0_568 - //0x000032ff LBB0_574 - 0x41, 0x8b, 0x0c, 0x24, //0x000032ff movl (%r12), %ecx - 0x89, 0x0f, //0x00003303 movl %ecx, (%rdi) - 0x49, 0x83, 0xc4, 0x04, //0x00003305 addq $4, %r12 - 0x48, 0x83, 0xc7, 0x04, //0x00003309 addq $4, %rdi - 0x48, 0x83, 0xc6, 0xfc, //0x0000330d addq $-4, %rsi - 0x48, 0x83, 0xfe, 0x02, //0x00003311 cmpq $2, %rsi - 0x0f, 0x83, 0x36, 0x00, 0x00, 0x00, //0x00003315 jae LBB0_569 - 0xe9, 0x45, 0x00, 0x00, 0x00, //0x0000331b jmp LBB0_570 - //0x00003320 LBB0_566 - 0x48, 0x83, 0xfe, 0x08, //0x00003320 cmpq $8, %rsi - 0x0f, 0x82, 0xcb, 0xff, 0xff, 0xff, //0x00003324 jb LBB0_567 - //0x0000332a LBB0_573 - 0x49, 0x8b, 0x0c, 0x24, //0x0000332a movq (%r12), %rcx - 0x48, 0x89, 0x0f, //0x0000332e movq %rcx, (%rdi) - 0x49, 0x83, 0xc4, 0x08, //0x00003331 addq $8, %r12 - 0x48, 0x83, 0xc7, 0x08, //0x00003335 addq $8, %rdi - 0x48, 0x83, 0xc6, 0xf8, //0x00003339 addq $-8, %rsi - 0x48, 0x83, 0xfe, 0x04, //0x0000333d cmpq $4, %rsi - 0x0f, 0x8d, 0xb8, 0xff, 0xff, 0xff, //0x00003341 jge LBB0_574 - //0x00003347 LBB0_568 - 0x48, 0x83, 0xfe, 0x02, //0x00003347 cmpq $2, %rsi - 0x0f, 0x82, 0x14, 0x00, 0x00, 0x00, //0x0000334b jb LBB0_570 - //0x00003351 LBB0_569 - 0x41, 0x0f, 0xb7, 0x0c, 0x24, //0x00003351 movzwl (%r12), %ecx - 0x66, 0x89, 0x0f, //0x00003356 movw %cx, (%rdi) - 0x49, 0x83, 0xc4, 0x02, //0x00003359 addq $2, %r12 - 0x48, 0x83, 0xc7, 0x02, //0x0000335d addq $2, %rdi - 0x48, 0x83, 0xc6, 0xfe, //0x00003361 addq $-2, %rsi - //0x00003365 LBB0_570 - 0x4c, 0x89, 0xe1, //0x00003365 movq %r12, %rcx - 0x4c, 0x8d, 0xa5, 0x20, 0xff, 0xff, 0xff, //0x00003368 leaq $-224(%rbp), %r12 - 0x48, 0x85, 0xf6, //0x0000336f testq %rsi, %rsi - 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00003372 movabsq $6148914691236517205, %r15 - 0x0f, 0x84, 0x1a, 0xfc, 0xff, 0xff, //0x0000337c je LBB0_553 - 0x8a, 0x09, //0x00003382 movb (%rcx), %cl - 0x88, 0x0f, //0x00003384 movb %cl, (%rdi) - 0x4c, 0x8d, 0xa5, 0x20, 0xff, 0xff, 0xff, //0x00003386 leaq $-224(%rbp), %r12 - 0xe9, 0x0a, 0xfc, 0xff, 0xff, //0x0000338d jmp LBB0_553 - //0x00003392 LBB0_575 - 0x48, 0x8b, 0x75, 0xb0, //0x00003392 movq $-80(%rbp), %rsi - 0x48, 0x8b, 0x46, 0x08, //0x00003396 movq $8(%rsi), %rax - 0x49, 0x0f, 0xbc, 0xc8, //0x0000339a bsfq %r8, %rcx - 0x48, 0x2b, 0x4d, 0xc0, //0x0000339e subq $-64(%rbp), %rcx - 0x48, 0x01, 0xc8, //0x000033a2 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x000033a5 addq $1, %rax - 0x48, 0x8b, 0x55, 0xd0, //0x000033a9 movq $-48(%rbp), %rdx - 0x48, 0x89, 0x02, //0x000033ad movq %rax, (%rdx) - 0x48, 0x8b, 0x4e, 0x08, //0x000033b0 movq $8(%rsi), %rcx - 0x48, 0x39, 0xc8, //0x000033b4 cmpq %rcx, %rax - 0x48, 0x0f, 0x47, 0xc1, //0x000033b7 cmovaq %rcx, %rax - 0x48, 0x89, 0x02, //0x000033bb movq %rax, (%rdx) - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000033be movq $-1, %rax - 0x4c, 0x0f, 0x47, 0xc8, //0x000033c5 cmovaq %rax, %r9 - 0x4c, 0x89, 0xc8, //0x000033c9 movq %r9, %rax - 0xe9, 0x58, 0x00, 0x00, 0x00, //0x000033cc jmp LBB0_580 - //0x000033d1 LBB0_576 - 0x0f, 0xbc, 0xc6, //0x000033d1 bsfl %esi, %eax - 0x4c, 0x01, 0xc8, //0x000033d4 addq %r9, %rax - 0x4c, 0x01, 0xf0, //0x000033d7 addq %r14, %rax - 0x48, 0x83, 0xc0, 0x02, //0x000033da addq $2, %rax - 0x48, 0x8b, 0x4d, 0xd0, //0x000033de movq $-48(%rbp), %rcx - 0x48, 0x89, 0x01, //0x000033e2 movq %rax, (%rcx) - 0x4c, 0x89, 0xc8, //0x000033e5 movq %r9, %rax - 0xe9, 0x3c, 0x00, 0x00, 0x00, //0x000033e8 jmp LBB0_580 - //0x000033ed LBB0_577 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000033ed movq $-1, %r13 - //0x000033f4 LBB0_578 - 0x4d, 0x29, 0xe9, //0x000033f4 subq %r13, %r9 - 0x49, 0x83, 0xc1, 0xfe, //0x000033f7 addq $-2, %r9 - 0x48, 0x8b, 0x45, 0xd0, //0x000033fb movq $-48(%rbp), %rax - 0x4c, 0x89, 0x08, //0x000033ff movq %r9, (%rax) - //0x00003402 LBB0_579 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003402 movq $-2, %rax - 0xe9, 0x1b, 0x00, 0x00, 0x00, //0x00003409 jmp LBB0_580 - //0x0000340e LBB0_581 - 0x48, 0x83, 0xf8, 0xff, //0x0000340e cmpq $-1, %rax - 0x48, 0x8b, 0x55, 0xc8, //0x00003412 movq $-56(%rbp), %rdx - 0x0f, 0x85, 0x0a, 0x00, 0x00, 0x00, //0x00003416 jne LBB0_510 - //0x0000341c LBB0_582 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000341c movq $-1, %rax - 0x4c, 0x89, 0xea, //0x00003423 movq %r13, %rdx - //0x00003426 LBB0_510 - 0x49, 0x89, 0x10, //0x00003426 movq %rdx, (%r8) - //0x00003429 LBB0_580 - 0x48, 0x81, 0xc4, 0xb8, 0x00, 0x00, 0x00, //0x00003429 addq $184, %rsp - 0x5b, //0x00003430 popq %rbx - 0x41, 0x5c, //0x00003431 popq %r12 - 0x41, 0x5d, //0x00003433 popq %r13 - 0x41, 0x5e, //0x00003435 popq %r14 - 0x41, 0x5f, //0x00003437 popq %r15 - 0x5d, //0x00003439 popq %rbp - 0xc3, //0x0000343a retq - //0x0000343b LBB0_583 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x0000343b movq $-2, %rcx - 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00003442 movl $2, %eax - 0x48, 0x01, 0xc6, //0x00003447 addq %rax, %rsi - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000344a movq $-1, %rax - 0x49, 0x01, 0xce, //0x00003451 addq %rcx, %r14 - 0x0f, 0x8e, 0xcf, 0xff, 0xff, 0xff, //0x00003454 jle LBB0_580 - //0x0000345a LBB0_585 - 0x0f, 0xb6, 0x06, //0x0000345a movzbl (%rsi), %eax - 0x3c, 0x5c, //0x0000345d cmpb $92, %al - 0x0f, 0x84, 0xd6, 0xff, 0xff, 0xff, //0x0000345f je LBB0_583 - 0x3c, 0x22, //0x00003465 cmpb $34, %al - 0x0f, 0x84, 0xc3, 0x01, 0x00, 0x00, //0x00003467 je LBB0_613 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000346d movq $-1, %rcx - 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00003474 movl $1, %eax - 0x48, 0x01, 0xc6, //0x00003479 addq %rax, %rsi - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000347c movq $-1, %rax - 0x49, 0x01, 0xce, //0x00003483 addq %rcx, %r14 - 0x0f, 0x8f, 0xce, 0xff, 0xff, 0xff, //0x00003486 jg LBB0_585 - 0xe9, 0x98, 0xff, 0xff, 0xff, //0x0000348c jmp LBB0_580 - //0x00003491 LBB0_588 - 0x48, 0x8b, 0x55, 0xc8, //0x00003491 movq $-56(%rbp), %rdx - 0x48, 0x83, 0xfa, 0xff, //0x00003495 cmpq $-1, %rdx - 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x00003499 jne LBB0_591 - 0x48, 0x0f, 0xbc, 0xd6, //0x0000349f bsfq %rsi, %rdx - //0x000034a3 LBB0_590 - 0x48, 0x01, 0xc2, //0x000034a3 addq %rax, %rdx - //0x000034a6 LBB0_591 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x000034a6 movq $-2, %rax - 0x4c, 0x8b, 0x45, 0xd0, //0x000034ad movq $-48(%rbp), %r8 - 0x49, 0x89, 0x10, //0x000034b1 movq %rdx, (%r8) - 0xe9, 0x70, 0xff, 0xff, 0xff, //0x000034b4 jmp LBB0_580 - //0x000034b9 LBB0_592 - 0x4c, 0x29, 0xe6, //0x000034b9 subq %r12, %rsi - 0x48, 0x01, 0xc6, //0x000034bc addq %rax, %rsi - 0x49, 0x89, 0x30, //0x000034bf movq %rsi, (%r8) - 0x4c, 0x89, 0xc8, //0x000034c2 movq %r9, %rax - 0xe9, 0x5f, 0xff, 0xff, 0xff, //0x000034c5 jmp LBB0_580 - //0x000034ca LBB0_593 - 0x48, 0x8b, 0x55, 0xc8, //0x000034ca movq $-56(%rbp), %rdx - 0x48, 0x83, 0xfa, 0xff, //0x000034ce cmpq $-1, %rdx - 0x0f, 0x84, 0x2b, 0x01, 0x00, 0x00, //0x000034d2 je LBB0_609 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x000034d8 movq $-2, %rax - 0x49, 0x89, 0x10, //0x000034df movq %rdx, (%r8) - 0xe9, 0x42, 0xff, 0xff, 0xff, //0x000034e2 jmp LBB0_580 - //0x000034e7 LBB0_595 - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x000034e7 movq $-1, %r14 - //0x000034ee LBB0_596 - 0x49, 0xf7, 0xd6, //0x000034ee notq %r14 - 0x4c, 0x01, 0xf0, //0x000034f1 addq %r14, %rax - 0x48, 0x8b, 0x4d, 0xd0, //0x000034f4 movq $-48(%rbp), %rcx - 0x48, 0x89, 0x01, //0x000034f8 movq %rax, (%rcx) - 0xe9, 0x02, 0xff, 0xff, 0xff, //0x000034fb jmp LBB0_579 - //0x00003500 LBB0_599 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003500 movq $-2, %rax - 0x80, 0xfa, 0x61, //0x00003507 cmpb $97, %dl - 0x0f, 0x85, 0x19, 0xff, 0xff, 0xff, //0x0000350a jne LBB0_580 - 0x48, 0x8d, 0x51, 0x01, //0x00003510 leaq $1(%rcx), %rdx - 0x49, 0x89, 0x10, //0x00003514 movq %rdx, (%r8) - 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x00003517 cmpb $108, $1(%r12,%rcx) - 0x0f, 0x85, 0x06, 0xff, 0xff, 0xff, //0x0000351d jne LBB0_580 - 0x48, 0x8d, 0x51, 0x02, //0x00003523 leaq $2(%rcx), %rdx - 0x49, 0x89, 0x10, //0x00003527 movq %rdx, (%r8) - 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x73, //0x0000352a cmpb $115, $2(%r12,%rcx) - 0x0f, 0x85, 0xf3, 0xfe, 0xff, 0xff, //0x00003530 jne LBB0_580 - 0x48, 0x8d, 0x51, 0x03, //0x00003536 leaq $3(%rcx), %rdx - 0x49, 0x89, 0x10, //0x0000353a movq %rdx, (%r8) - 0x41, 0x80, 0x7c, 0x0c, 0x03, 0x65, //0x0000353d cmpb $101, $3(%r12,%rcx) - 0x0f, 0x85, 0xe0, 0xfe, 0xff, 0xff, //0x00003543 jne LBB0_580 - 0x48, 0x83, 0xc1, 0x04, //0x00003549 addq $4, %rcx - 0x49, 0x89, 0x08, //0x0000354d movq %rcx, (%r8) - 0xe9, 0xd4, 0xfe, 0xff, 0xff, //0x00003550 jmp LBB0_580 - //0x00003555 LBB0_293 - 0x49, 0x89, 0x00, //0x00003555 movq %rax, (%r8) - 0x41, 0x80, 0x3c, 0x04, 0x6e, //0x00003558 cmpb $110, (%r12,%rax) - 0x0f, 0x85, 0x9f, 0xfe, 0xff, 0xff, //0x0000355d jne LBB0_579 - 0x49, 0x89, 0x08, //0x00003563 movq %rcx, (%r8) - 0x41, 0x80, 0x3c, 0x0c, 0x75, //0x00003566 cmpb $117, (%r12,%rcx) - 0x0f, 0x85, 0x91, 0xfe, 0xff, 0xff, //0x0000356b jne LBB0_579 - 0x48, 0x8d, 0x41, 0x01, //0x00003571 leaq $1(%rcx), %rax - 0x49, 0x89, 0x00, //0x00003575 movq %rax, (%r8) - 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x00003578 cmpb $108, $1(%r12,%rcx) - 0x0f, 0x85, 0x7e, 0xfe, 0xff, 0xff, //0x0000357e jne LBB0_579 - 0x48, 0x8d, 0x41, 0x02, //0x00003584 leaq $2(%rcx), %rax - 0x49, 0x89, 0x00, //0x00003588 movq %rax, (%r8) - 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x6c, //0x0000358b cmpb $108, $2(%r12,%rcx) - 0x0f, 0x85, 0x6b, 0xfe, 0xff, 0xff, //0x00003591 jne LBB0_579 - 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00003597 jmp LBB0_608 - //0x0000359c LBB0_604 - 0x49, 0x89, 0x00, //0x0000359c movq %rax, (%r8) - 0x41, 0x80, 0x3c, 0x04, 0x74, //0x0000359f cmpb $116, (%r12,%rax) - 0x0f, 0x85, 0x58, 0xfe, 0xff, 0xff, //0x000035a4 jne LBB0_579 - 0x49, 0x89, 0x08, //0x000035aa movq %rcx, (%r8) - 0x41, 0x80, 0x3c, 0x0c, 0x72, //0x000035ad cmpb $114, (%r12,%rcx) - 0x0f, 0x85, 0x4a, 0xfe, 0xff, 0xff, //0x000035b2 jne LBB0_579 - 0x48, 0x8d, 0x41, 0x01, //0x000035b8 leaq $1(%rcx), %rax - 0x49, 0x89, 0x00, //0x000035bc movq %rax, (%r8) - 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x75, //0x000035bf cmpb $117, $1(%r12,%rcx) - 0x0f, 0x85, 0x37, 0xfe, 0xff, 0xff, //0x000035c5 jne LBB0_579 - 0x48, 0x8d, 0x41, 0x02, //0x000035cb leaq $2(%rcx), %rax - 0x49, 0x89, 0x00, //0x000035cf movq %rax, (%r8) - 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x65, //0x000035d2 cmpb $101, $2(%r12,%rcx) - 0x0f, 0x85, 0x24, 0xfe, 0xff, 0xff, //0x000035d8 jne LBB0_579 - //0x000035de LBB0_608 - 0x48, 0x83, 0xc1, 0x03, //0x000035de addq $3, %rcx - 0x49, 0x89, 0x08, //0x000035e2 movq %rcx, (%r8) - 0xe9, 0x18, 0xfe, 0xff, 0xff, //0x000035e5 jmp LBB0_579 - //0x000035ea LBB0_348 - 0x48, 0x8b, 0x45, 0x90, //0x000035ea movq $-112(%rbp), %rax - 0x48, 0x83, 0xc0, 0xff, //0x000035ee addq $-1, %rax - 0xe9, 0x32, 0xfe, 0xff, 0xff, //0x000035f2 jmp LBB0_580 - //0x000035f7 LBB0_290 - 0x48, 0x83, 0xc1, 0xff, //0x000035f7 addq $-1, %rcx - 0x48, 0x89, 0xc8, //0x000035fb movq %rcx, %rax - 0xe9, 0x26, 0xfe, 0xff, 0xff, //0x000035fe jmp LBB0_580 - //0x00003603 LBB0_609 - 0x48, 0x0f, 0xbc, 0xd7, //0x00003603 bsfq %rdi, %rdx - //0x00003607 LBB0_610 - 0x48, 0x01, 0xc2, //0x00003607 addq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x0000360a movq $-2, %rax - 0x49, 0x89, 0x10, //0x00003611 movq %rdx, (%r8) - 0xe9, 0x10, 0xfe, 0xff, 0xff, //0x00003614 jmp LBB0_580 - //0x00003619 LBB0_611 - 0x48, 0x8b, 0x55, 0xc8, //0x00003619 movq $-56(%rbp), %rdx - 0x48, 0x83, 0xfa, 0xff, //0x0000361d cmpq $-1, %rdx - 0x0f, 0x85, 0x7f, 0xfe, 0xff, 0xff, //0x00003621 jne LBB0_591 - 0x48, 0x0f, 0xbc, 0xd7, //0x00003627 bsfq %rdi, %rdx - 0xe9, 0x73, 0xfe, 0xff, 0xff, //0x0000362b jmp LBB0_590 - //0x00003630 LBB0_613 - 0x4c, 0x29, 0xe6, //0x00003630 subq %r12, %rsi - 0x48, 0x83, 0xc6, 0x01, //0x00003633 addq $1, %rsi - 0x48, 0x89, 0x32, //0x00003637 movq %rsi, (%rdx) - 0x4c, 0x89, 0xc8, //0x0000363a movq %r9, %rax - 0xe9, 0xe7, 0xfd, 0xff, 0xff, //0x0000363d jmp LBB0_580 - //0x00003642 LBB0_614 - 0x48, 0x89, 0x4d, 0xa0, //0x00003642 movq %rcx, $-96(%rbp) - 0xe9, 0x62, 0xf3, 0xff, 0xff, //0x00003646 jmp LBB0_509 - //0x0000364b LBB0_617 - 0x49, 0x89, 0xc5, //0x0000364b movq %rax, %r13 - 0xe9, 0xc9, 0xfd, 0xff, 0xff, //0x0000364e jmp LBB0_582 - //0x00003653 LBB0_615 - 0x48, 0x8b, 0x45, 0x90, //0x00003653 movq $-112(%rbp), %rax - 0x48, 0x89, 0x45, 0xa0, //0x00003657 movq %rax, $-96(%rbp) - 0xe9, 0x4d, 0xf3, 0xff, 0xff, //0x0000365b jmp LBB0_509 - //0x00003660 LBB0_616 - 0x4c, 0x01, 0xe6, //0x00003660 addq %r12, %rsi - 0x48, 0x85, 0xc9, //0x00003663 testq %rcx, %rcx - 0x0f, 0x85, 0xb9, 0xf2, 0xff, 0xff, //0x00003666 jne LBB0_499 - 0xe9, 0xe9, 0xf2, 0xff, 0xff, //0x0000366c jmp LBB0_505 - //0x00003671 LBB0_384 - 0x4c, 0x8b, 0x6d, 0xa0, //0x00003671 movq $-96(%rbp), %r13 - 0xe9, 0xa2, 0xfd, 0xff, 0xff, //0x00003675 jmp LBB0_582 - //0x0000367a LBB0_619 - 0x4c, 0x01, 0xe6, //0x0000367a addq %r12, %rsi - 0xe9, 0x40, 0xf4, 0xff, 0xff, //0x0000367d jmp LBB0_521 - //0x00003682 LBB0_620 - 0x4c, 0x29, 0xe0, //0x00003682 subq %r12, %rax - 0x48, 0x01, 0xd0, //0x00003685 addq %rdx, %rax - 0x48, 0x89, 0xc2, //0x00003688 movq %rax, %rdx - 0xe9, 0x16, 0xfe, 0xff, 0xff, //0x0000368b jmp LBB0_591 - //0x00003690 LBB0_621 - 0x48, 0x8b, 0x4d, 0xb0, //0x00003690 movq $-80(%rbp), %rcx - 0x48, 0x8b, 0x49, 0x08, //0x00003694 movq $8(%rcx), %rcx - 0x48, 0x8b, 0x55, 0xd0, //0x00003698 movq $-48(%rbp), %rdx - 0x48, 0x89, 0x0a, //0x0000369c movq %rcx, (%rdx) - 0xe9, 0x85, 0xfd, 0xff, 0xff, //0x0000369f jmp LBB0_580 - //0x000036a4 LBB0_622 - 0x4c, 0x29, 0xe0, //0x000036a4 subq %r12, %rax - 0x48, 0x01, 0xc8, //0x000036a7 addq %rcx, %rax - 0xe9, 0x21, 0x00, 0x00, 0x00, //0x000036aa jmp LBB0_625 - //0x000036af LBB0_623 - 0x4c, 0x29, 0xe0, //0x000036af subq %r12, %rax - 0x48, 0x89, 0xc2, //0x000036b2 movq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x000036b5 movq $-2, %rax - 0x49, 0x89, 0x10, //0x000036bc movq %rdx, (%r8) - 0xe9, 0x65, 0xfd, 0xff, 0xff, //0x000036bf jmp LBB0_580 - //0x000036c4 LBB0_634 - 0x4c, 0x8b, 0x45, 0xd0, //0x000036c4 movq $-48(%rbp), %r8 - 0xe9, 0x4f, 0xfd, 0xff, 0xff, //0x000036c8 jmp LBB0_582 - //0x000036cd LBB0_624 - 0x4c, 0x29, 0xe0, //0x000036cd subq %r12, %rax - //0x000036d0 LBB0_625 - 0x48, 0x89, 0xc2, //0x000036d0 movq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x000036d3 movq $-2, %rax - 0x49, 0x89, 0x10, //0x000036da movq %rdx, (%r8) - 0xe9, 0x47, 0xfd, 0xff, 0xff, //0x000036dd jmp LBB0_580 - //0x000036e2 LBB0_626 - 0x49, 0x8d, 0x48, 0xff, //0x000036e2 leaq $-1(%r8), %rcx - 0x4c, 0x39, 0xf1, //0x000036e6 cmpq %r14, %rcx - 0x0f, 0x84, 0x3a, 0xfd, 0xff, 0xff, //0x000036e9 je LBB0_580 - 0x4b, 0x8d, 0x34, 0x16, //0x000036ef leaq (%r14,%r10), %rsi - 0x48, 0x83, 0xc6, 0x02, //0x000036f3 addq $2, %rsi - 0x4d, 0x29, 0xf0, //0x000036f7 subq %r14, %r8 - 0x49, 0x83, 0xc0, 0xfe, //0x000036fa addq $-2, %r8 - 0x4d, 0x89, 0xc6, //0x000036fe movq %r8, %r14 - 0xe9, 0xbc, 0xf3, 0xff, 0xff, //0x00003701 jmp LBB0_521 - //0x00003706 LBB0_628 - 0x4c, 0x29, 0xe0, //0x00003706 subq %r12, %rax - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00003709 jmp LBB0_630 - //0x0000370e LBB0_629 - 0x48, 0x2b, 0x45, 0xc0, //0x0000370e subq $-64(%rbp), %rax - //0x00003712 LBB0_630 - 0x48, 0x01, 0xc8, //0x00003712 addq %rcx, %rax - 0x48, 0x89, 0xc2, //0x00003715 movq %rax, %rdx - 0xe9, 0x89, 0xfd, 0xff, 0xff, //0x00003718 jmp LBB0_591 - //0x0000371d LBB0_631 - 0x48, 0x2b, 0x45, 0xc0, //0x0000371d subq $-64(%rbp), %rax - 0x48, 0x89, 0xc2, //0x00003721 movq %rax, %rdx - 0xe9, 0x7d, 0xfd, 0xff, 0xff, //0x00003724 jmp LBB0_591 - //0x00003729 LBB0_632 - 0x4c, 0x8b, 0x45, 0xd0, //0x00003729 movq $-48(%rbp), %r8 - 0x49, 0x89, 0xcd, //0x0000372d movq %rcx, %r13 - 0xe9, 0xe7, 0xfc, 0xff, 0xff, //0x00003730 jmp LBB0_582 - 0x90, 0x90, 0x90, //0x00003735 .p2align 2, 0x90 - // // .set L0_0_set_580, LBB0_580-LJTI0_0 - // // .set L0_0_set_511, LBB0_511-LJTI0_0 - // // .set L0_0_set_512, LBB0_512-LJTI0_0 + 0x4d, 0x89, 0x0b, //0x000006dd movq %r9, (%r11) + //0x000006e0 LBB0_86 + 0x83, 0xfa, 0x7b, //0x000006e0 cmpl $123, %edx + 0x4c, 0x8b, 0x55, 0xb8, //0x000006e3 movq $-72(%rbp), %r10 + 0x0f, 0x87, 0xa6, 0x2d, 0x00, 0x00, //0x000006e7 ja LBB0_585 + 0x89, 0xd1, //0x000006ed movl %edx, %ecx + 0x48, 0x8d, 0x15, 0xd2, 0x32, 0x00, 0x00, //0x000006ef leaq $13010(%rip), %rdx /* LJTI0_2+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8a, //0x000006f6 movslq (%rdx,%rcx,4), %rcx + 0x48, 0x01, 0xd1, //0x000006fa addq %rdx, %rcx + 0xff, 0xe1, //0x000006fd jmpq *%rcx + //0x000006ff LBB0_88 + 0x4c, 0x89, 0xc0, //0x000006ff movq %r8, %rax + 0x4c, 0x8b, 0x47, 0x08, //0x00000702 movq $8(%rdi), %r8 + 0x48, 0x8b, 0x38, //0x00000706 movq (%rax), %rdi + 0x48, 0x8d, 0x47, 0xff, //0x00000709 leaq $-1(%rdi), %rax + 0x49, 0x29, 0xc0, //0x0000070d subq %rax, %r8 + 0x0f, 0x84, 0x68, 0x2d, 0x00, 0x00, //0x00000710 je LBB0_583 + 0x4d, 0x8d, 0x1c, 0x3c, //0x00000716 leaq (%r12,%rdi), %r11 + 0x49, 0x83, 0xc3, 0xff, //0x0000071a addq $-1, %r11 + 0x41, 0x80, 0x3b, 0x30, //0x0000071e cmpb $48, (%r11) + 0x0f, 0x85, 0x3a, 0x00, 0x00, 0x00, //0x00000722 jne LBB0_93 + 0x41, 0xbd, 0x01, 0x00, 0x00, 0x00, //0x00000728 movl $1, %r13d + 0x49, 0x83, 0xf8, 0x01, //0x0000072e cmpq $1, %r8 + 0x0f, 0x84, 0xa4, 0x08, 0x00, 0x00, //0x00000732 je LBB0_211 + 0x48, 0x8b, 0x4d, 0xc0, //0x00000738 movq $-64(%rbp), %rcx + 0x8a, 0x0c, 0x39, //0x0000073c movb (%rcx,%rdi), %cl + 0x80, 0xc1, 0xd2, //0x0000073f addb $-46, %cl + 0x80, 0xf9, 0x37, //0x00000742 cmpb $55, %cl + 0x0f, 0x87, 0x91, 0x08, 0x00, 0x00, //0x00000745 ja LBB0_211 + 0x0f, 0xb6, 0xc9, //0x0000074b movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x0000074e movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x00000758 btq %rcx, %rdx + 0x0f, 0x83, 0x7a, 0x08, 0x00, 0x00, //0x0000075c jae LBB0_211 + //0x00000762 LBB0_93 + 0x48, 0x89, 0x7d, 0xa0, //0x00000762 movq %rdi, $-96(%rbp) + 0x49, 0x83, 0xf8, 0x10, //0x00000766 cmpq $16, %r8 + 0x0f, 0x82, 0x41, 0x18, 0x00, 0x00, //0x0000076a jb LBB0_390 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00000770 movq $-1, %r15 + 0x45, 0x31, 0xed, //0x00000777 xorl %r13d, %r13d + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x0000077a movq $-1, %r14 + 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x00000781 movq $-1, %r12 + 0x4c, 0x89, 0xc7, //0x00000788 movq %r8, %rdi + 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000078b .p2align 4, 0x90 + //0x00000790 LBB0_95 + 0xf3, 0x43, 0x0f, 0x6f, 0x1c, 0x2b, //0x00000790 movdqu (%r11,%r13), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00000796 movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0x64, 0xe0, //0x0000079a pcmpgtb %xmm8, %xmm4 + 0x66, 0x41, 0x0f, 0x6f, 0xee, //0x0000079f movdqa %xmm14, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x000007a4 pcmpgtb %xmm3, %xmm5 + 0x66, 0x0f, 0xdb, 0xec, //0x000007a8 pand %xmm4, %xmm5 + 0x66, 0x0f, 0x6f, 0xe3, //0x000007ac movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0x74, 0xe1, //0x000007b0 pcmpeqb %xmm9, %xmm4 + 0x66, 0x0f, 0x6f, 0xf3, //0x000007b5 movdqa %xmm3, %xmm6 + 0x66, 0x41, 0x0f, 0x74, 0xf2, //0x000007b9 pcmpeqb %xmm10, %xmm6 + 0x66, 0x0f, 0xeb, 0xf4, //0x000007be por %xmm4, %xmm6 + 0x66, 0x0f, 0x6f, 0xe3, //0x000007c2 movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xe3, //0x000007c6 pand %xmm11, %xmm4 + 0x66, 0x41, 0x0f, 0x74, 0xdc, //0x000007cb pcmpeqb %xmm12, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xe5, //0x000007d0 pcmpeqb %xmm13, %xmm4 + 0x66, 0x0f, 0xd7, 0xf4, //0x000007d5 pmovmskb %xmm4, %esi + 0x66, 0x0f, 0xeb, 0xe3, //0x000007d9 por %xmm3, %xmm4 + 0x66, 0x0f, 0xeb, 0xee, //0x000007dd por %xmm6, %xmm5 + 0x66, 0x0f, 0xeb, 0xec, //0x000007e1 por %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xdb, //0x000007e5 pmovmskb %xmm3, %ebx + 0x66, 0x44, 0x0f, 0xd7, 0xce, //0x000007e9 pmovmskb %xmm6, %r9d + 0x66, 0x0f, 0xd7, 0xcd, //0x000007ee pmovmskb %xmm5, %ecx + 0xf7, 0xd1, //0x000007f2 notl %ecx + 0x0f, 0xbc, 0xc9, //0x000007f4 bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x000007f7 cmpl $16, %ecx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000007fa je LBB0_97 + 0xba, 0xff, 0xff, 0xff, 0xff, //0x00000800 movl $-1, %edx + 0xd3, 0xe2, //0x00000805 shll %cl, %edx + 0xf7, 0xd2, //0x00000807 notl %edx + 0x21, 0xd3, //0x00000809 andl %edx, %ebx + 0x21, 0xd6, //0x0000080b andl %edx, %esi + 0x44, 0x21, 0xca, //0x0000080d andl %r9d, %edx + 0x41, 0x89, 0xd1, //0x00000810 movl %edx, %r9d + //0x00000813 LBB0_97 + 0x8d, 0x53, 0xff, //0x00000813 leal $-1(%rbx), %edx + 0x21, 0xda, //0x00000816 andl %ebx, %edx + 0x0f, 0x85, 0xc9, 0x10, 0x00, 0x00, //0x00000818 jne LBB0_349 + 0x8d, 0x56, 0xff, //0x0000081e leal $-1(%rsi), %edx + 0x21, 0xf2, //0x00000821 andl %esi, %edx + 0x0f, 0x85, 0xbe, 0x10, 0x00, 0x00, //0x00000823 jne LBB0_349 + 0x41, 0x8d, 0x51, 0xff, //0x00000829 leal $-1(%r9), %edx + 0x44, 0x21, 0xca, //0x0000082d andl %r9d, %edx + 0x0f, 0x85, 0xb1, 0x10, 0x00, 0x00, //0x00000830 jne LBB0_349 + 0x85, 0xdb, //0x00000836 testl %ebx, %ebx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000838 je LBB0_103 + 0x0f, 0xbc, 0xdb, //0x0000083e bsfl %ebx, %ebx + 0x49, 0x83, 0xfc, 0xff, //0x00000841 cmpq $-1, %r12 + 0x0f, 0x85, 0xfb, 0x13, 0x00, 0x00, //0x00000845 jne LBB0_356 + 0x4c, 0x01, 0xeb, //0x0000084b addq %r13, %rbx + 0x49, 0x89, 0xdc, //0x0000084e movq %rbx, %r12 + //0x00000851 LBB0_103 + 0x85, 0xf6, //0x00000851 testl %esi, %esi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000853 je LBB0_106 + 0x0f, 0xbc, 0xf6, //0x00000859 bsfl %esi, %esi + 0x49, 0x83, 0xfe, 0xff, //0x0000085c cmpq $-1, %r14 + 0x0f, 0x85, 0xe7, 0x13, 0x00, 0x00, //0x00000860 jne LBB0_357 + 0x4c, 0x01, 0xee, //0x00000866 addq %r13, %rsi + 0x49, 0x89, 0xf6, //0x00000869 movq %rsi, %r14 + //0x0000086c LBB0_106 + 0x45, 0x85, 0xc9, //0x0000086c testl %r9d, %r9d + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x0000086f je LBB0_109 + 0x41, 0x0f, 0xbc, 0xd1, //0x00000875 bsfl %r9d, %edx + 0x49, 0x83, 0xff, 0xff, //0x00000879 cmpq $-1, %r15 + 0x0f, 0x85, 0xd1, 0x13, 0x00, 0x00, //0x0000087d jne LBB0_358 + 0x4c, 0x01, 0xea, //0x00000883 addq %r13, %rdx + 0x49, 0x89, 0xd7, //0x00000886 movq %rdx, %r15 + //0x00000889 LBB0_109 + 0x83, 0xf9, 0x10, //0x00000889 cmpl $16, %ecx + 0x0f, 0x85, 0x98, 0x04, 0x00, 0x00, //0x0000088c jne LBB0_171 + 0x48, 0x83, 0xc7, 0xf0, //0x00000892 addq $-16, %rdi + 0x49, 0x83, 0xc5, 0x10, //0x00000896 addq $16, %r13 + 0x48, 0x83, 0xff, 0x0f, //0x0000089a cmpq $15, %rdi + 0x0f, 0x87, 0xec, 0xfe, 0xff, 0xff, //0x0000089e ja LBB0_95 + 0x4b, 0x8d, 0x34, 0x2b, //0x000008a4 leaq (%r11,%r13), %rsi + 0x49, 0x89, 0xf2, //0x000008a8 movq %rsi, %r10 + 0x4d, 0x39, 0xe8, //0x000008ab cmpq %r13, %r8 + 0x0f, 0x84, 0x7f, 0x04, 0x00, 0x00, //0x000008ae je LBB0_172 + //0x000008b4 LBB0_112 + 0x4c, 0x8d, 0x14, 0x3e, //0x000008b4 leaq (%rsi,%rdi), %r10 + 0x48, 0x8b, 0x4d, 0x90, //0x000008b8 movq $-112(%rbp), %rcx + 0x4c, 0x8d, 0x04, 0x31, //0x000008bc leaq (%rcx,%rsi), %r8 + 0x4c, 0x2b, 0x45, 0xa0, //0x000008c0 subq $-96(%rbp), %r8 + 0x31, 0xd2, //0x000008c4 xorl %edx, %edx + 0xe9, 0x22, 0x00, 0x00, 0x00, //0x000008c6 jmp LBB0_116 + //0x000008cb LBB0_113 + 0x49, 0x83, 0xff, 0xff, //0x000008cb cmpq $-1, %r15 + 0x0f, 0x85, 0x47, 0x10, 0x00, 0x00, //0x000008cf jne LBB0_354 + 0x4d, 0x8d, 0x3c, 0x10, //0x000008d5 leaq (%r8,%rdx), %r15 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000008d9 .p2align 4, 0x90 + //0x000008e0 LBB0_115 + 0x48, 0x83, 0xc2, 0x01, //0x000008e0 addq $1, %rdx + 0x48, 0x39, 0xd7, //0x000008e4 cmpq %rdx, %rdi + 0x0f, 0x84, 0x46, 0x04, 0x00, 0x00, //0x000008e7 je LBB0_172 + //0x000008ed LBB0_116 + 0x0f, 0xbe, 0x1c, 0x16, //0x000008ed movsbl (%rsi,%rdx), %ebx + 0x8d, 0x4b, 0xd0, //0x000008f1 leal $-48(%rbx), %ecx + 0x83, 0xf9, 0x0a, //0x000008f4 cmpl $10, %ecx + 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x000008f7 jb LBB0_115 + 0x8d, 0x4b, 0xd5, //0x000008fd leal $-43(%rbx), %ecx + 0x83, 0xf9, 0x1a, //0x00000900 cmpl $26, %ecx + 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00000903 ja LBB0_121 + 0x48, 0x8d, 0x1d, 0x14, 0x33, 0x00, 0x00, //0x00000909 leaq $13076(%rip), %rbx /* LJTI0_4+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8b, //0x00000910 movslq (%rbx,%rcx,4), %rcx + 0x48, 0x01, 0xd9, //0x00000914 addq %rbx, %rcx + 0xff, 0xe1, //0x00000917 jmpq *%rcx + //0x00000919 LBB0_119 + 0x49, 0x83, 0xfc, 0xff, //0x00000919 cmpq $-1, %r12 + 0x0f, 0x85, 0xf9, 0x0f, 0x00, 0x00, //0x0000091d jne LBB0_354 + 0x4d, 0x8d, 0x24, 0x10, //0x00000923 leaq (%r8,%rdx), %r12 + 0xe9, 0xb4, 0xff, 0xff, 0xff, //0x00000927 jmp LBB0_115 + //0x0000092c LBB0_121 + 0x83, 0xfb, 0x65, //0x0000092c cmpl $101, %ebx + 0x0f, 0x85, 0x29, 0x06, 0x00, 0x00, //0x0000092f jne LBB0_200 + //0x00000935 LBB0_122 + 0x49, 0x83, 0xfe, 0xff, //0x00000935 cmpq $-1, %r14 + 0x0f, 0x85, 0xdd, 0x0f, 0x00, 0x00, //0x00000939 jne LBB0_354 + 0x4d, 0x8d, 0x34, 0x10, //0x0000093f leaq (%r8,%rdx), %r14 + 0xe9, 0x98, 0xff, 0xff, 0xff, //0x00000943 jmp LBB0_115 + //0x00000948 LBB0_124 + 0x83, 0xfa, 0x22, //0x00000948 cmpl $34, %edx + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x0000094b je LBB0_127 + //0x00000951 LBB0_125 + 0x83, 0xfa, 0x7d, //0x00000951 cmpl $125, %edx + 0x0f, 0x85, 0x39, 0x2b, 0x00, 0x00, //0x00000954 jne LBB0_585 + //0x0000095a LBB0_126 + 0x4d, 0x89, 0x0b, //0x0000095a movq %r9, (%r11) + 0x4c, 0x8b, 0x55, 0xb8, //0x0000095d movq $-72(%rbp), %r10 + 0x4c, 0x89, 0xd0, //0x00000961 movq %r10, %rax + 0x4d, 0x85, 0xc9, //0x00000964 testq %r9, %r9 + 0x0f, 0x85, 0xbd, 0xf9, 0xff, 0xff, //0x00000967 jne LBB0_29 + 0xe9, 0x48, 0x2b, 0x00, 0x00, //0x0000096d jmp LBB0_586 + //0x00000972 LBB0_127 + 0x4b, 0xc7, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x00, //0x00000972 movq $2, (%r11,%r10,8) + 0x49, 0x8b, 0x00, //0x0000097a movq (%r8), %rax + 0x4c, 0x8b, 0x4f, 0x08, //0x0000097d movq $8(%rdi), %r9 + 0xf6, 0x45, 0x88, 0x20, //0x00000981 testb $32, $-120(%rbp) + 0x48, 0x89, 0x45, 0xa0, //0x00000985 movq %rax, $-96(%rbp) + 0x0f, 0x85, 0xb9, 0x03, 0x00, 0x00, //0x00000989 jne LBB0_174 + 0x4d, 0x89, 0xcd, //0x0000098f movq %r9, %r13 + 0x49, 0x29, 0xc1, //0x00000992 subq %rax, %r9 + 0x0f, 0x84, 0x39, 0x2d, 0x00, 0x00, //0x00000995 je LBB0_622 + 0x49, 0x83, 0xf9, 0x40, //0x0000099b cmpq $64, %r9 + 0x0f, 0x82, 0x99, 0x17, 0x00, 0x00, //0x0000099f jb LBB0_412 + 0x49, 0x89, 0xc6, //0x000009a5 movq %rax, %r14 + 0x49, 0xf7, 0xd6, //0x000009a8 notq %r14 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000009ab movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x000009b3 xorl %r8d, %r8d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000009b6 .p2align 4, 0x90 + //0x000009c0 LBB0_131 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x000009c0 movdqu (%r12,%rax), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x000009c6 movdqu $16(%r12,%rax), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x000009cd movdqu $32(%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x000009d4 movdqu $48(%r12,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xfb, //0x000009db movdqa %xmm3, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x000009df pcmpeqb %xmm0, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x000009e3 pmovmskb %xmm7, %r10d + 0x66, 0x0f, 0x6f, 0xfc, //0x000009e8 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x000009ec pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xcf, //0x000009f0 pmovmskb %xmm7, %ecx + 0x66, 0x0f, 0x6f, 0xfd, //0x000009f4 movdqa %xmm5, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x000009f8 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x000009fc pmovmskb %xmm7, %esi + 0x66, 0x0f, 0x6f, 0xfe, //0x00000a00 movdqa %xmm6, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00000a04 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xd7, //0x00000a08 pmovmskb %xmm7, %edx + 0x66, 0x0f, 0x74, 0xd9, //0x00000a0c pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000a10 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x74, 0xe1, //0x00000a15 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xdc, //0x00000a19 pmovmskb %xmm4, %ebx + 0x66, 0x0f, 0x74, 0xe9, //0x00000a1d pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00000a21 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x74, 0xf1, //0x00000a25 pcmpeqb %xmm1, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00000a29 pmovmskb %xmm6, %r15d + 0x48, 0xc1, 0xe2, 0x30, //0x00000a2e shlq $48, %rdx + 0x48, 0xc1, 0xe6, 0x20, //0x00000a32 shlq $32, %rsi + 0x48, 0x09, 0xd6, //0x00000a36 orq %rdx, %rsi + 0x48, 0xc1, 0xe1, 0x10, //0x00000a39 shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x00000a3d orq %rsi, %rcx + 0x49, 0x09, 0xca, //0x00000a40 orq %rcx, %r10 + 0x49, 0xc1, 0xe7, 0x30, //0x00000a43 shlq $48, %r15 + 0x48, 0xc1, 0xe7, 0x20, //0x00000a47 shlq $32, %rdi + 0x4c, 0x09, 0xff, //0x00000a4b orq %r15, %rdi + 0x48, 0xc1, 0xe3, 0x10, //0x00000a4e shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x00000a52 orq %rdi, %rbx + 0x49, 0x09, 0xdb, //0x00000a55 orq %rbx, %r11 + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x00000a58 jne LBB0_141 + 0x4d, 0x85, 0xc0, //0x00000a5e testq %r8, %r8 + 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x00000a61 jne LBB0_143 + 0x45, 0x31, 0xc0, //0x00000a67 xorl %r8d, %r8d + 0x4d, 0x85, 0xd2, //0x00000a6a testq %r10, %r10 + 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x00000a6d jne LBB0_144 + //0x00000a73 LBB0_134 + 0x49, 0x83, 0xc1, 0xc0, //0x00000a73 addq $-64, %r9 + 0x49, 0x83, 0xc6, 0xc0, //0x00000a77 addq $-64, %r14 + 0x48, 0x83, 0xc0, 0x40, //0x00000a7b addq $64, %rax + 0x49, 0x83, 0xf9, 0x3f, //0x00000a7f cmpq $63, %r9 + 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x00000a83 ja LBB0_131 + 0xe9, 0x49, 0x10, 0x00, 0x00, //0x00000a89 jmp LBB0_135 + //0x00000a8e LBB0_141 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00000a8e cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00000a93 jne LBB0_143 + 0x49, 0x0f, 0xbc, 0xcb, //0x00000a99 bsfq %r11, %rcx + 0x48, 0x01, 0xc1, //0x00000a9d addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00000aa0 movq %rcx, $-56(%rbp) + //0x00000aa4 LBB0_143 + 0x4c, 0x89, 0xc1, //0x00000aa4 movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00000aa7 notq %rcx + 0x4c, 0x21, 0xd9, //0x00000aaa andq %r11, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x00000aad leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xc2, //0x00000ab1 orq %r8, %rdx + 0x48, 0x89, 0xd6, //0x00000ab4 movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000ab7 notq %rsi + 0x4c, 0x21, 0xde, //0x00000aba andq %r11, %rsi + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000abd movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfe, //0x00000ac7 andq %rdi, %rsi + 0x45, 0x31, 0xc0, //0x00000aca xorl %r8d, %r8d + 0x48, 0x01, 0xce, //0x00000acd addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc0, //0x00000ad0 setb %r8b + 0x48, 0x01, 0xf6, //0x00000ad4 addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000ad7 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x00000ae1 xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00000ae4 andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000ae7 notq %rsi + 0x49, 0x21, 0xf2, //0x00000aea andq %rsi, %r10 + 0x4d, 0x85, 0xd2, //0x00000aed testq %r10, %r10 + 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000af0 je LBB0_134 + //0x00000af6 LBB0_144 + 0x49, 0x0f, 0xbc, 0xc2, //0x00000af6 bsfq %r10, %rax + 0x4c, 0x29, 0xf0, //0x00000afa subq %r14, %rax + 0x4c, 0x8b, 0x45, 0xd0, //0x00000afd movq $-48(%rbp), %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x00000b01 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x5d, 0xa8, //0x00000b05 movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000b09 movabsq $4294977024, %r14 + 0x4c, 0x8b, 0x55, 0xb8, //0x00000b13 movq $-72(%rbp), %r10 + 0xe9, 0x8d, 0x05, 0x00, 0x00, //0x00000b17 jmp LBB0_225 + //0x00000b1c LBB0_145 + 0x48, 0x89, 0xca, //0x00000b1c movq %rcx, %rdx + 0x49, 0x89, 0xc2, //0x00000b1f movq %rax, %r10 + 0x49, 0x29, 0xca, //0x00000b22 subq %rcx, %r10 + 0x0f, 0x84, 0xb1, 0x2b, 0x00, 0x00, //0x00000b25 je LBB0_620 + 0x49, 0x83, 0xfa, 0x40, //0x00000b2b cmpq $64, %r10 + 0x0f, 0x82, 0x65, 0x15, 0x00, 0x00, //0x00000b2f jb LBB0_407 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000b35 movq $-1, $-56(%rbp) + 0x48, 0x8b, 0x45, 0xa0, //0x00000b3d movq $-96(%rbp), %rax + 0x45, 0x31, 0xc0, //0x00000b41 xorl %r8d, %r8d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000b44 .p2align 4, 0x90 + //0x00000b50 LBB0_148 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00000b50 movdqu (%r12,%rax), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x10, //0x00000b56 movdqu $16(%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x04, 0x20, //0x00000b5d movdqu $32(%r12,%rax), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000b64 movdqu $48(%r12,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xe3, //0x00000b6b movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x00000b6f pcmpeqb %xmm0, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xf4, //0x00000b73 pmovmskb %xmm4, %r14d + 0x66, 0x0f, 0x6f, 0xe5, //0x00000b78 movdqa %xmm5, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x00000b7c pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xd7, 0xdc, //0x00000b80 pmovmskb %xmm4, %ebx + 0x66, 0x0f, 0x6f, 0xe7, //0x00000b84 movdqa %xmm7, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x00000b88 pcmpeqb %xmm0, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xdc, //0x00000b8c pmovmskb %xmm4, %r11d + 0x66, 0x0f, 0x6f, 0xe6, //0x00000b91 movdqa %xmm6, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x00000b95 pcmpeqb %xmm0, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xfc, //0x00000b99 pmovmskb %xmm4, %r15d + 0x66, 0x0f, 0x6f, 0xe3, //0x00000b9e movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0xe1, //0x00000ba2 pcmpeqb %xmm1, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xec, //0x00000ba6 pmovmskb %xmm4, %r13d + 0x66, 0x0f, 0x6f, 0xe5, //0x00000bab movdqa %xmm5, %xmm4 + 0x66, 0x0f, 0x74, 0xe1, //0x00000baf pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xd4, //0x00000bb3 pmovmskb %xmm4, %edx + 0x66, 0x0f, 0x6f, 0xe7, //0x00000bb7 movdqa %xmm7, %xmm4 + 0x66, 0x0f, 0x74, 0xe1, //0x00000bbb pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00000bbf pmovmskb %xmm4, %ecx + 0x66, 0x0f, 0x6f, 0xe6, //0x00000bc3 movdqa %xmm6, %xmm4 + 0x66, 0x0f, 0x74, 0xe1, //0x00000bc7 pcmpeqb %xmm1, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xe4, //0x00000bcb pmovmskb %xmm4, %r12d + 0x66, 0x0f, 0x6f, 0xe2, //0x00000bd0 movdqa %xmm2, %xmm4 + 0x66, 0x0f, 0x64, 0xe5, //0x00000bd4 pcmpgtb %xmm5, %xmm4 + 0x66, 0x41, 0x0f, 0x64, 0xef, //0x00000bd8 pcmpgtb %xmm15, %xmm5 + 0x66, 0x0f, 0xdb, 0xec, //0x00000bdd pand %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00000be1 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x6f, 0xe2, //0x00000be5 movdqa %xmm2, %xmm4 + 0x66, 0x0f, 0x64, 0xe7, //0x00000be9 pcmpgtb %xmm7, %xmm4 + 0x66, 0x41, 0x0f, 0x64, 0xff, //0x00000bed pcmpgtb %xmm15, %xmm7 + 0x66, 0x0f, 0xdb, 0xfc, //0x00000bf2 pand %xmm4, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x00000bf6 pmovmskb %xmm7, %esi + 0x66, 0x0f, 0x6f, 0xe2, //0x00000bfa movdqa %xmm2, %xmm4 + 0x66, 0x0f, 0x64, 0xe6, //0x00000bfe pcmpgtb %xmm6, %xmm4 + 0x66, 0x41, 0x0f, 0x64, 0xf7, //0x00000c02 pcmpgtb %xmm15, %xmm6 + 0x66, 0x0f, 0xdb, 0xf4, //0x00000c07 pand %xmm4, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xce, //0x00000c0b pmovmskb %xmm6, %r9d + 0x49, 0xc1, 0xe7, 0x30, //0x00000c10 shlq $48, %r15 + 0x49, 0xc1, 0xe3, 0x20, //0x00000c14 shlq $32, %r11 + 0x4d, 0x09, 0xfb, //0x00000c18 orq %r15, %r11 + 0x48, 0xc1, 0xe3, 0x10, //0x00000c1b shlq $16, %rbx + 0x4c, 0x09, 0xdb, //0x00000c1f orq %r11, %rbx + 0x49, 0x09, 0xde, //0x00000c22 orq %rbx, %r14 + 0x49, 0xc1, 0xe4, 0x30, //0x00000c25 shlq $48, %r12 + 0x48, 0xc1, 0xe1, 0x20, //0x00000c29 shlq $32, %rcx + 0x4c, 0x09, 0xe1, //0x00000c2d orq %r12, %rcx + 0x48, 0xc1, 0xe2, 0x10, //0x00000c30 shlq $16, %rdx + 0x48, 0x09, 0xca, //0x00000c34 orq %rcx, %rdx + 0x49, 0xc1, 0xe1, 0x30, //0x00000c37 shlq $48, %r9 + 0x48, 0xc1, 0xe6, 0x20, //0x00000c3b shlq $32, %rsi + 0x4c, 0x09, 0xce, //0x00000c3f orq %r9, %rsi + 0x48, 0xc1, 0xe7, 0x10, //0x00000c42 shlq $16, %rdi + 0x48, 0x09, 0xf7, //0x00000c46 orq %rsi, %rdi + 0x49, 0x09, 0xd5, //0x00000c49 orq %rdx, %r13 + 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00000c4c jne LBB0_165 + 0x4d, 0x85, 0xc0, //0x00000c52 testq %r8, %r8 + 0x0f, 0x85, 0x67, 0x00, 0x00, 0x00, //0x00000c55 jne LBB0_167 + 0x45, 0x31, 0xc0, //0x00000c5b xorl %r8d, %r8d + 0x4c, 0x8b, 0x65, 0xc0, //0x00000c5e movq $-64(%rbp), %r12 + //0x00000c62 LBB0_151 + 0x66, 0x0f, 0x6f, 0xe2, //0x00000c62 movdqa %xmm2, %xmm4 + 0x66, 0x0f, 0x64, 0xe3, //0x00000c66 pcmpgtb %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0x64, 0xdf, //0x00000c6a pcmpgtb %xmm15, %xmm3 + 0x66, 0x0f, 0xdb, 0xdc, //0x00000c6f pand %xmm4, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00000c73 pmovmskb %xmm3, %ecx + 0x48, 0x09, 0xcf, //0x00000c77 orq %rcx, %rdi + 0x4d, 0x85, 0xf6, //0x00000c7a testq %r14, %r14 + 0x0f, 0x85, 0x91, 0x00, 0x00, 0x00, //0x00000c7d jne LBB0_169 + 0x48, 0x85, 0xff, //0x00000c83 testq %rdi, %rdi + 0x0f, 0x85, 0x96, 0x28, 0x00, 0x00, //0x00000c86 jne LBB0_594 + 0x49, 0x83, 0xc2, 0xc0, //0x00000c8c addq $-64, %r10 + 0x48, 0x83, 0xc0, 0x40, //0x00000c90 addq $64, %rax + 0x49, 0x83, 0xfa, 0x3f, //0x00000c94 cmpq $63, %r10 + 0x0f, 0x87, 0xb2, 0xfe, 0xff, 0xff, //0x00000c98 ja LBB0_148 + 0xe9, 0x24, 0x0d, 0x00, 0x00, //0x00000c9e jmp LBB0_154 + //0x00000ca3 LBB0_165 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00000ca3 cmpq $-1, $-56(%rbp) + 0x4c, 0x8b, 0x65, 0xc0, //0x00000ca8 movq $-64(%rbp), %r12 + 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x00000cac jne LBB0_168 + 0x49, 0x0f, 0xbc, 0xcd, //0x00000cb2 bsfq %r13, %rcx + 0x48, 0x01, 0xc1, //0x00000cb6 addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00000cb9 movq %rcx, $-56(%rbp) + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00000cbd jmp LBB0_168 + //0x00000cc2 LBB0_167 + 0x4c, 0x8b, 0x65, 0xc0, //0x00000cc2 movq $-64(%rbp), %r12 + //0x00000cc6 LBB0_168 + 0x4c, 0x89, 0xc1, //0x00000cc6 movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00000cc9 notq %rcx + 0x4c, 0x21, 0xe9, //0x00000ccc andq %r13, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x00000ccf leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xc2, //0x00000cd3 orq %r8, %rdx + 0x48, 0x89, 0xd6, //0x00000cd6 movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000cd9 notq %rsi + 0x4c, 0x21, 0xee, //0x00000cdc andq %r13, %rsi + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000cdf movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xde, //0x00000ce9 andq %rbx, %rsi + 0x45, 0x31, 0xc0, //0x00000cec xorl %r8d, %r8d + 0x48, 0x01, 0xce, //0x00000cef addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc0, //0x00000cf2 setb %r8b + 0x48, 0x01, 0xf6, //0x00000cf6 addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000cf9 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x00000d03 xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00000d06 andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000d09 notq %rsi + 0x49, 0x21, 0xf6, //0x00000d0c andq %rsi, %r14 + 0xe9, 0x4e, 0xff, 0xff, 0xff, //0x00000d0f jmp LBB0_151 + //0x00000d14 LBB0_169 + 0x49, 0x0f, 0xbc, 0xce, //0x00000d14 bsfq %r14, %rcx + 0x48, 0x85, 0xff, //0x00000d18 testq %rdi, %rdi + 0x0f, 0x84, 0xed, 0x02, 0x00, 0x00, //0x00000d1b je LBB0_212 + 0x48, 0x0f, 0xbc, 0xd7, //0x00000d21 bsfq %rdi, %rdx + 0xe9, 0xe9, 0x02, 0x00, 0x00, //0x00000d25 jmp LBB0_213 + //0x00000d2a LBB0_171 + 0x41, 0x89, 0xca, //0x00000d2a movl %ecx, %r10d + 0x4d, 0x01, 0xda, //0x00000d2d addq %r11, %r10 + 0x4d, 0x01, 0xea, //0x00000d30 addq %r13, %r10 + //0x00000d33 LBB0_172 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00000d33 movq $-1, %r13 + 0x4d, 0x85, 0xe4, //0x00000d3a testq %r12, %r12 + 0x0f, 0x85, 0x31, 0x02, 0x00, 0x00, //0x00000d3d jne LBB0_201 + 0xe9, 0x02, 0x28, 0x00, 0x00, //0x00000d43 jmp LBB0_173 + //0x00000d48 LBB0_174 + 0x4d, 0x89, 0xce, //0x00000d48 movq %r9, %r14 + 0x49, 0x29, 0xc6, //0x00000d4b subq %rax, %r14 + 0x0f, 0x84, 0x80, 0x29, 0x00, 0x00, //0x00000d4e je LBB0_622 + 0x4c, 0x89, 0x4d, 0x98, //0x00000d54 movq %r9, $-104(%rbp) + 0x49, 0x83, 0xfe, 0x40, //0x00000d58 cmpq $64, %r14 + 0x0f, 0x82, 0xef, 0x13, 0x00, 0x00, //0x00000d5c jb LBB0_413 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000d62 movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc9, //0x00000d6a xorl %r9d, %r9d + 0x90, 0x90, 0x90, //0x00000d6d .p2align 4, 0x90 + //0x00000d70 LBB0_177 + 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x04, //0x00000d70 movdqu (%r12,%rax), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x10, //0x00000d76 movdqu $16(%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x04, 0x20, //0x00000d7d movdqu $32(%r12,%rax), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000d84 movdqu $48(%r12,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xdc, //0x00000d8b movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00000d8f pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x00000d93 pmovmskb %xmm3, %r15d + 0x66, 0x0f, 0x6f, 0xdd, //0x00000d98 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00000d9c pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00000da0 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xdf, //0x00000da4 movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00000da8 pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xe3, //0x00000dac pmovmskb %xmm3, %r12d + 0x66, 0x0f, 0x6f, 0xde, //0x00000db1 movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00000db5 pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000db9 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x6f, 0xdc, //0x00000dbe movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00000dc2 pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00000dc6 pmovmskb %xmm3, %r13d + 0x66, 0x0f, 0x6f, 0xdd, //0x00000dcb movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00000dcf pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x00000dd3 pmovmskb %xmm3, %ebx + 0x66, 0x0f, 0x6f, 0xdf, //0x00000dd7 movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00000ddb pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00000ddf pmovmskb %xmm3, %edi + 0x66, 0x0f, 0x6f, 0xde, //0x00000de3 movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00000de7 pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x00000deb pmovmskb %xmm3, %r10d + 0x66, 0x0f, 0x6f, 0xda, //0x00000df0 movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x64, 0xdd, //0x00000df4 pcmpgtb %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xef, //0x00000df8 pcmpgtb %xmm15, %xmm5 + 0x66, 0x0f, 0xdb, 0xeb, //0x00000dfd pand %xmm3, %xmm5 + 0x66, 0x0f, 0xd7, 0xf5, //0x00000e01 pmovmskb %xmm5, %esi + 0x66, 0x0f, 0x6f, 0xda, //0x00000e05 movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x64, 0xdf, //0x00000e09 pcmpgtb %xmm7, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xff, //0x00000e0d pcmpgtb %xmm15, %xmm7 + 0x66, 0x0f, 0xdb, 0xfb, //0x00000e12 pand %xmm3, %xmm7 + 0x66, 0x0f, 0xd7, 0xd7, //0x00000e16 pmovmskb %xmm7, %edx + 0x66, 0x0f, 0x6f, 0xda, //0x00000e1a movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x64, 0xde, //0x00000e1e pcmpgtb %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xf7, //0x00000e22 pcmpgtb %xmm15, %xmm6 + 0x66, 0x0f, 0xdb, 0xf3, //0x00000e27 pand %xmm3, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xc6, //0x00000e2b pmovmskb %xmm6, %r8d + 0x49, 0xc1, 0xe3, 0x30, //0x00000e30 shlq $48, %r11 + 0x49, 0xc1, 0xe4, 0x20, //0x00000e34 shlq $32, %r12 + 0x4d, 0x09, 0xdc, //0x00000e38 orq %r11, %r12 + 0x48, 0xc1, 0xe1, 0x10, //0x00000e3b shlq $16, %rcx + 0x4c, 0x09, 0xe1, //0x00000e3f orq %r12, %rcx + 0x49, 0x09, 0xcf, //0x00000e42 orq %rcx, %r15 + 0x49, 0xc1, 0xe2, 0x30, //0x00000e45 shlq $48, %r10 + 0x48, 0xc1, 0xe7, 0x20, //0x00000e49 shlq $32, %rdi + 0x4c, 0x09, 0xd7, //0x00000e4d orq %r10, %rdi + 0x48, 0xc1, 0xe3, 0x10, //0x00000e50 shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x00000e54 orq %rdi, %rbx + 0x49, 0xc1, 0xe0, 0x30, //0x00000e57 shlq $48, %r8 + 0x48, 0xc1, 0xe2, 0x20, //0x00000e5b shlq $32, %rdx + 0x4c, 0x09, 0xc2, //0x00000e5f orq %r8, %rdx + 0x48, 0xc1, 0xe6, 0x10, //0x00000e62 shlq $16, %rsi + 0x48, 0x09, 0xd6, //0x00000e66 orq %rdx, %rsi + 0x49, 0x09, 0xdd, //0x00000e69 orq %rbx, %r13 + 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x00000e6c jne LBB0_194 + 0x4d, 0x85, 0xc9, //0x00000e72 testq %r9, %r9 + 0x4c, 0x8b, 0x55, 0xb8, //0x00000e75 movq $-72(%rbp), %r10 + 0x0f, 0x85, 0x73, 0x00, 0x00, 0x00, //0x00000e79 jne LBB0_196 + 0x45, 0x31, 0xc9, //0x00000e7f xorl %r9d, %r9d + 0x4c, 0x8b, 0x45, 0xd0, //0x00000e82 movq $-48(%rbp), %r8 + 0x4c, 0x8b, 0x65, 0xc0, //0x00000e86 movq $-64(%rbp), %r12 + //0x00000e8a LBB0_180 + 0x66, 0x0f, 0x6f, 0xda, //0x00000e8a movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00000e8e pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe7, //0x00000e92 pcmpgtb %xmm15, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x00000e97 pand %xmm3, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00000e9b pmovmskb %xmm4, %ecx + 0x48, 0x09, 0xce, //0x00000e9f orq %rcx, %rsi + 0x4d, 0x85, 0xff, //0x00000ea2 testq %r15, %r15 + 0x0f, 0x85, 0x9d, 0x00, 0x00, 0x00, //0x00000ea5 jne LBB0_198 + 0x48, 0x85, 0xf6, //0x00000eab testq %rsi, %rsi + 0x0f, 0x85, 0x9f, 0x26, 0x00, 0x00, //0x00000eae jne LBB0_598 + 0x49, 0x83, 0xc6, 0xc0, //0x00000eb4 addq $-64, %r14 + 0x48, 0x83, 0xc0, 0x40, //0x00000eb8 addq $64, %rax + 0x49, 0x83, 0xfe, 0x3f, //0x00000ebc cmpq $63, %r14 + 0x0f, 0x87, 0xaa, 0xfe, 0xff, 0xff, //0x00000ec0 ja LBB0_177 + 0xe9, 0x9d, 0x0c, 0x00, 0x00, //0x00000ec6 jmp LBB0_183 + //0x00000ecb LBB0_194 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00000ecb cmpq $-1, $-56(%rbp) + 0x4c, 0x8b, 0x45, 0xd0, //0x00000ed0 movq $-48(%rbp), %r8 + 0x4c, 0x8b, 0x65, 0xc0, //0x00000ed4 movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x55, 0xb8, //0x00000ed8 movq $-72(%rbp), %r10 + 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x00000edc jne LBB0_197 + 0x49, 0x0f, 0xbc, 0xcd, //0x00000ee2 bsfq %r13, %rcx + 0x48, 0x01, 0xc1, //0x00000ee6 addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00000ee9 movq %rcx, $-56(%rbp) + 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00000eed jmp LBB0_197 + //0x00000ef2 LBB0_196 + 0x4c, 0x8b, 0x45, 0xd0, //0x00000ef2 movq $-48(%rbp), %r8 + 0x4c, 0x8b, 0x65, 0xc0, //0x00000ef6 movq $-64(%rbp), %r12 + //0x00000efa LBB0_197 + 0x4c, 0x89, 0xc9, //0x00000efa movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x00000efd notq %rcx + 0x4c, 0x21, 0xe9, //0x00000f00 andq %r13, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x00000f03 leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xca, //0x00000f07 orq %r9, %rdx + 0x48, 0x89, 0xd7, //0x00000f0a movq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x00000f0d notq %rdi + 0x4c, 0x21, 0xef, //0x00000f10 andq %r13, %rdi + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000f13 movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xdf, //0x00000f1d andq %rbx, %rdi + 0x45, 0x31, 0xc9, //0x00000f20 xorl %r9d, %r9d + 0x48, 0x01, 0xcf, //0x00000f23 addq %rcx, %rdi + 0x41, 0x0f, 0x92, 0xc1, //0x00000f26 setb %r9b + 0x48, 0x01, 0xff, //0x00000f2a addq %rdi, %rdi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000f2d movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcf, //0x00000f37 xorq %rcx, %rdi + 0x48, 0x21, 0xd7, //0x00000f3a andq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x00000f3d notq %rdi + 0x49, 0x21, 0xff, //0x00000f40 andq %rdi, %r15 + 0xe9, 0x42, 0xff, 0xff, 0xff, //0x00000f43 jmp LBB0_180 + //0x00000f48 LBB0_198 + 0x49, 0x0f, 0xbc, 0xcf, //0x00000f48 bsfq %r15, %rcx + 0x48, 0x85, 0xf6, //0x00000f4c testq %rsi, %rsi + 0x0f, 0x84, 0x29, 0x01, 0x00, 0x00, //0x00000f4f je LBB0_221 + 0x48, 0x0f, 0xbc, 0xd6, //0x00000f55 bsfq %rsi, %rdx + 0xe9, 0x25, 0x01, 0x00, 0x00, //0x00000f59 jmp LBB0_222 + //0x00000f5e LBB0_200 + 0x48, 0x01, 0xd6, //0x00000f5e addq %rdx, %rsi + 0x49, 0x89, 0xf2, //0x00000f61 movq %rsi, %r10 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00000f64 movq $-1, %r13 + 0x4d, 0x85, 0xe4, //0x00000f6b testq %r12, %r12 + 0x0f, 0x84, 0xd6, 0x25, 0x00, 0x00, //0x00000f6e je LBB0_173 + //0x00000f74 LBB0_201 + 0x4d, 0x85, 0xff, //0x00000f74 testq %r15, %r15 + 0x48, 0x8b, 0x7d, 0xa0, //0x00000f77 movq $-96(%rbp), %rdi + 0x0f, 0x84, 0x04, 0x25, 0x00, 0x00, //0x00000f7b je LBB0_584 + 0x4d, 0x85, 0xf6, //0x00000f81 testq %r14, %r14 + 0x0f, 0x84, 0xfb, 0x24, 0x00, 0x00, //0x00000f84 je LBB0_584 + 0x4d, 0x29, 0xda, //0x00000f8a subq %r11, %r10 + 0x49, 0x8d, 0x4a, 0xff, //0x00000f8d leaq $-1(%r10), %rcx + 0x49, 0x39, 0xcc, //0x00000f91 cmpq %rcx, %r12 + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00000f94 je LBB0_209 + 0x49, 0x39, 0xcf, //0x00000f9a cmpq %rcx, %r15 + 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x00000f9d je LBB0_209 + 0x49, 0x39, 0xce, //0x00000fa3 cmpq %rcx, %r14 + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00000fa6 je LBB0_209 + 0x4d, 0x85, 0xff, //0x00000fac testq %r15, %r15 + 0x0f, 0x8e, 0xa6, 0x00, 0x00, 0x00, //0x00000faf jle LBB0_218 + 0x49, 0x8d, 0x4f, 0xff, //0x00000fb5 leaq $-1(%r15), %rcx + 0x49, 0x39, 0xce, //0x00000fb9 cmpq %rcx, %r14 + 0x0f, 0x84, 0x99, 0x00, 0x00, 0x00, //0x00000fbc je LBB0_218 + 0x49, 0xf7, 0xd7, //0x00000fc2 notq %r15 + 0x4d, 0x89, 0xfd, //0x00000fc5 movq %r15, %r13 + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x00000fc8 jmp LBB0_210 + //0x00000fcd LBB0_209 + 0x49, 0xf7, 0xda, //0x00000fcd negq %r10 + 0x4d, 0x89, 0xd5, //0x00000fd0 movq %r10, %r13 + //0x00000fd3 LBB0_210 + 0x4d, 0x85, 0xed, //0x00000fd3 testq %r13, %r13 + 0x0f, 0x88, 0xa9, 0x24, 0x00, 0x00, //0x00000fd6 js LBB0_584 + //0x00000fdc LBB0_211 + 0x49, 0x01, 0xc5, //0x00000fdc addq %rax, %r13 + 0x4c, 0x8b, 0x45, 0xd0, //0x00000fdf movq $-48(%rbp), %r8 + 0x4d, 0x89, 0x28, //0x00000fe3 movq %r13, (%r8) + 0x48, 0x85, 0xc0, //0x00000fe6 testq %rax, %rax + 0x48, 0x8b, 0x7d, 0xb0, //0x00000fe9 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x65, 0xc0, //0x00000fed movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x5d, 0xa8, //0x00000ff1 movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000ff5 movabsq $4294977024, %r14 + 0x4c, 0x8b, 0x55, 0xb8, //0x00000fff movq $-72(%rbp), %r10 + 0x0f, 0x89, 0x12, 0xf3, 0xff, 0xff, //0x00001003 jns LBB0_28 + 0xe9, 0xac, 0x24, 0x00, 0x00, //0x00001009 jmp LBB0_586 + //0x0000100e LBB0_212 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000100e movl $64, %edx + //0x00001013 LBB0_213 + 0x4c, 0x8b, 0x45, 0xd0, //0x00001013 movq $-48(%rbp), %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x00001017 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x5d, 0xa8, //0x0000101b movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000101f movabsq $4294977024, %r14 + 0x4c, 0x8b, 0x55, 0xb8, //0x00001029 movq $-72(%rbp), %r10 + 0x48, 0x39, 0xca, //0x0000102d cmpq %rcx, %rdx + 0x0f, 0x82, 0x5a, 0x26, 0x00, 0x00, //0x00001030 jb LBB0_615 + 0x48, 0x01, 0xc8, //0x00001036 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00001039 addq $1, %rax + //0x0000103d LBB0_215 + 0x48, 0x85, 0xc0, //0x0000103d testq %rax, %rax + 0x0f, 0x88, 0x01, 0x1a, 0x00, 0x00, //0x00001040 js LBB0_514 + 0x49, 0x89, 0x00, //0x00001046 movq %rax, (%r8) + 0x48, 0x8b, 0x45, 0xa0, //0x00001049 movq $-96(%rbp), %rax + 0x48, 0x85, 0xc0, //0x0000104d testq %rax, %rax + 0x0f, 0x8f, 0xc5, 0xf2, 0xff, 0xff, //0x00001050 jg LBB0_28 + 0xe9, 0xe3, 0x19, 0x00, 0x00, //0x00001056 jmp LBB0_217 + //0x0000105b LBB0_218 + 0x4c, 0x89, 0xe1, //0x0000105b movq %r12, %rcx + 0x4c, 0x09, 0xf1, //0x0000105e orq %r14, %rcx + 0x0f, 0x99, 0xc1, //0x00001061 setns %cl + 0x0f, 0x88, 0x47, 0x05, 0x00, 0x00, //0x00001064 js LBB0_302 + 0x4d, 0x39, 0xf4, //0x0000106a cmpq %r14, %r12 + 0x0f, 0x8c, 0x3e, 0x05, 0x00, 0x00, //0x0000106d jl LBB0_302 + 0x49, 0xf7, 0xd4, //0x00001073 notq %r12 + 0x4d, 0x89, 0xe5, //0x00001076 movq %r12, %r13 + 0xe9, 0x55, 0xff, 0xff, 0xff, //0x00001079 jmp LBB0_210 + //0x0000107e LBB0_221 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000107e movl $64, %edx + //0x00001083 LBB0_222 + 0x48, 0x8b, 0x7d, 0xb0, //0x00001083 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x5d, 0xa8, //0x00001087 movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000108b movabsq $4294977024, %r14 + 0x48, 0x39, 0xca, //0x00001095 cmpq %rcx, %rdx + 0x0f, 0x82, 0xf2, 0x25, 0x00, 0x00, //0x00001098 jb LBB0_615 + 0x48, 0x01, 0xc8, //0x0000109e addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000010a1 addq $1, %rax + //0x000010a5 LBB0_224 + 0x4c, 0x8b, 0x6d, 0x98, //0x000010a5 movq $-104(%rbp), %r13 + //0x000010a9 LBB0_225 + 0x48, 0x85, 0xc0, //0x000010a9 testq %rax, %rax + 0x0f, 0x88, 0xed, 0x23, 0x00, 0x00, //0x000010ac js LBB0_587 + 0x49, 0x89, 0x00, //0x000010b2 movq %rax, (%r8) + 0x48, 0x8b, 0x45, 0xa0, //0x000010b5 movq $-96(%rbp), %rax + 0x48, 0x85, 0xc0, //0x000010b9 testq %rax, %rax + 0x0f, 0x8e, 0x7c, 0x19, 0x00, 0x00, //0x000010bc jle LBB0_217 + 0x49, 0x8b, 0x03, //0x000010c2 movq (%r11), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x000010c5 cmpq $4095, %rax + 0x0f, 0x8f, 0x61, 0x19, 0x00, 0x00, //0x000010cb jg LBB0_602 + 0x48, 0x8d, 0x48, 0x01, //0x000010d1 leaq $1(%rax), %rcx + 0x49, 0x89, 0x0b, //0x000010d5 movq %rcx, (%r11) + 0x49, 0xc7, 0x44, 0xc3, 0x08, 0x04, 0x00, 0x00, 0x00, //0x000010d8 movq $4, $8(%r11,%rax,8) + 0xe9, 0x35, 0xf2, 0xff, 0xff, //0x000010e1 jmp LBB0_28 + //0x000010e6 LBB0_229 + 0x49, 0x8b, 0x08, //0x000010e6 movq (%r8), %rcx + 0x48, 0x8b, 0x47, 0x08, //0x000010e9 movq $8(%rdi), %rax + 0xf6, 0x45, 0x88, 0x20, //0x000010ed testb $32, $-120(%rbp) + 0x48, 0x89, 0x45, 0x98, //0x000010f1 movq %rax, $-104(%rbp) + 0x48, 0x89, 0x4d, 0xa0, //0x000010f5 movq %rcx, $-96(%rbp) + 0x0f, 0x85, 0xce, 0x04, 0x00, 0x00, //0x000010f9 jne LBB0_303 + 0x49, 0x89, 0xc1, //0x000010ff movq %rax, %r9 + 0x49, 0x29, 0xc9, //0x00001102 subq %rcx, %r9 + 0x0f, 0x84, 0xc0, 0x25, 0x00, 0x00, //0x00001105 je LBB0_619 + 0x49, 0x83, 0xf9, 0x40, //0x0000110b cmpq $64, %r9 + 0x0f, 0x82, 0xce, 0x10, 0x00, 0x00, //0x0000110f jb LBB0_418 + 0x49, 0x89, 0xce, //0x00001115 movq %rcx, %r14 + 0x49, 0xf7, 0xd6, //0x00001118 notq %r14 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000111b movq $-1, $-56(%rbp) + 0x48, 0x89, 0xc8, //0x00001123 movq %rcx, %rax + 0x45, 0x31, 0xc0, //0x00001126 xorl %r8d, %r8d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001129 .p2align 4, 0x90 + //0x00001130 LBB0_233 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00001130 movdqu (%r12,%rax), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00001136 movdqu $16(%r12,%rax), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000113d movdqu $32(%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00001144 movdqu $48(%r12,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xfb, //0x0000114b movdqa %xmm3, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000114f pcmpeqb %xmm0, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00001153 pmovmskb %xmm7, %r10d + 0x66, 0x0f, 0x6f, 0xfc, //0x00001158 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000115c pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xcf, //0x00001160 pmovmskb %xmm7, %ecx + 0x66, 0x0f, 0x6f, 0xfd, //0x00001164 movdqa %xmm5, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00001168 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x0000116c pmovmskb %xmm7, %esi + 0x66, 0x0f, 0x6f, 0xfe, //0x00001170 movdqa %xmm6, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00001174 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xd7, //0x00001178 pmovmskb %xmm7, %edx + 0x66, 0x0f, 0x74, 0xd9, //0x0000117c pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00001180 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x74, 0xe1, //0x00001185 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xdc, //0x00001189 pmovmskb %xmm4, %ebx + 0x66, 0x0f, 0x74, 0xe9, //0x0000118d pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00001191 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x74, 0xf1, //0x00001195 pcmpeqb %xmm1, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00001199 pmovmskb %xmm6, %r15d + 0x48, 0xc1, 0xe2, 0x30, //0x0000119e shlq $48, %rdx + 0x48, 0xc1, 0xe6, 0x20, //0x000011a2 shlq $32, %rsi + 0x48, 0x09, 0xd6, //0x000011a6 orq %rdx, %rsi + 0x48, 0xc1, 0xe1, 0x10, //0x000011a9 shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x000011ad orq %rsi, %rcx + 0x49, 0x09, 0xca, //0x000011b0 orq %rcx, %r10 + 0x49, 0xc1, 0xe7, 0x30, //0x000011b3 shlq $48, %r15 + 0x48, 0xc1, 0xe7, 0x20, //0x000011b7 shlq $32, %rdi + 0x4c, 0x09, 0xff, //0x000011bb orq %r15, %rdi + 0x48, 0xc1, 0xe3, 0x10, //0x000011be shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x000011c2 orq %rdi, %rbx + 0x49, 0x09, 0xdb, //0x000011c5 orq %rbx, %r11 + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000011c8 jne LBB0_243 + 0x4d, 0x85, 0xc0, //0x000011ce testq %r8, %r8 + 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x000011d1 jne LBB0_245 + 0x45, 0x31, 0xc0, //0x000011d7 xorl %r8d, %r8d + 0x4d, 0x85, 0xd2, //0x000011da testq %r10, %r10 + 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x000011dd jne LBB0_246 + //0x000011e3 LBB0_236 + 0x49, 0x83, 0xc1, 0xc0, //0x000011e3 addq $-64, %r9 + 0x49, 0x83, 0xc6, 0xc0, //0x000011e7 addq $-64, %r14 + 0x48, 0x83, 0xc0, 0x40, //0x000011eb addq $64, %rax + 0x49, 0x83, 0xf9, 0x3f, //0x000011ef cmpq $63, %r9 + 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x000011f3 ja LBB0_233 + 0xe9, 0x2f, 0x0c, 0x00, 0x00, //0x000011f9 jmp LBB0_237 + //0x000011fe LBB0_243 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000011fe cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00001203 jne LBB0_245 + 0x49, 0x0f, 0xbc, 0xcb, //0x00001209 bsfq %r11, %rcx + 0x48, 0x01, 0xc1, //0x0000120d addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00001210 movq %rcx, $-56(%rbp) + //0x00001214 LBB0_245 + 0x4c, 0x89, 0xc1, //0x00001214 movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00001217 notq %rcx + 0x4c, 0x21, 0xd9, //0x0000121a andq %r11, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x0000121d leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xc2, //0x00001221 orq %r8, %rdx + 0x48, 0x89, 0xd6, //0x00001224 movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00001227 notq %rsi + 0x4c, 0x21, 0xde, //0x0000122a andq %r11, %rsi + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000122d movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfe, //0x00001237 andq %rdi, %rsi + 0x45, 0x31, 0xc0, //0x0000123a xorl %r8d, %r8d + 0x48, 0x01, 0xce, //0x0000123d addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc0, //0x00001240 setb %r8b + 0x48, 0x01, 0xf6, //0x00001244 addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001247 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x00001251 xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00001254 andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00001257 notq %rsi + 0x49, 0x21, 0xf2, //0x0000125a andq %rsi, %r10 + 0x4d, 0x85, 0xd2, //0x0000125d testq %r10, %r10 + 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00001260 je LBB0_236 + //0x00001266 LBB0_246 + 0x49, 0x0f, 0xbc, 0xc2, //0x00001266 bsfq %r10, %rax + 0x4c, 0x29, 0xf0, //0x0000126a subq %r14, %rax + //0x0000126d LBB0_247 + 0x4c, 0x8b, 0x45, 0xd0, //0x0000126d movq $-48(%rbp), %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x00001271 movq $-80(%rbp), %rdi + //0x00001275 LBB0_248 + 0x4c, 0x8b, 0x5d, 0xa8, //0x00001275 movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001279 movabsq $4294977024, %r14 + 0x4c, 0x8b, 0x55, 0xb8, //0x00001283 movq $-72(%rbp), %r10 + 0xe9, 0x3f, 0x06, 0x00, 0x00, //0x00001287 jmp LBB0_346 + //0x0000128c LBB0_249 + 0x4c, 0x89, 0xc0, //0x0000128c movq %r8, %rax + 0x4c, 0x8b, 0x47, 0x08, //0x0000128f movq $8(%rdi), %r8 + 0x48, 0x8b, 0x00, //0x00001293 movq (%rax), %rax + 0x49, 0x29, 0xc0, //0x00001296 subq %rax, %r8 + 0x0f, 0x84, 0xd1, 0x22, 0x00, 0x00, //0x00001299 je LBB0_600 + 0x4d, 0x8d, 0x14, 0x04, //0x0000129f leaq (%r12,%rax), %r10 + 0x41, 0x80, 0x3a, 0x30, //0x000012a3 cmpb $48, (%r10) + 0x0f, 0x85, 0x37, 0x00, 0x00, 0x00, //0x000012a7 jne LBB0_254 + 0x41, 0xbe, 0x01, 0x00, 0x00, 0x00, //0x000012ad movl $1, %r14d + 0x49, 0x83, 0xf8, 0x01, //0x000012b3 cmpq $1, %r8 + 0x0f, 0x84, 0xb1, 0x05, 0x00, 0x00, //0x000012b7 je LBB0_342 + 0x41, 0x8a, 0x4a, 0x01, //0x000012bd movb $1(%r10), %cl + 0x80, 0xc1, 0xd2, //0x000012c1 addb $-46, %cl + 0x80, 0xf9, 0x37, //0x000012c4 cmpb $55, %cl + 0x0f, 0x87, 0xa1, 0x05, 0x00, 0x00, //0x000012c7 ja LBB0_342 + 0x0f, 0xb6, 0xc9, //0x000012cd movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x000012d0 movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x000012da btq %rcx, %rdx + 0x0f, 0x83, 0x8a, 0x05, 0x00, 0x00, //0x000012de jae LBB0_342 + //0x000012e4 LBB0_254 + 0x49, 0x83, 0xf8, 0x10, //0x000012e4 cmpq $16, %r8 + 0x0f, 0x82, 0xd5, 0x0e, 0x00, 0x00, //0x000012e8 jb LBB0_417 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000012ee movq $-1, %r13 + 0x45, 0x31, 0xf6, //0x000012f5 xorl %r14d, %r14d + 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x000012f8 movq $-1, %r12 + 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x000012ff movq $-1, %r11 + 0x4c, 0x89, 0xc7, //0x00001306 movq %r8, %rdi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001309 .p2align 4, 0x90 + //0x00001310 LBB0_256 + 0xf3, 0x43, 0x0f, 0x6f, 0x1c, 0x32, //0x00001310 movdqu (%r10,%r14), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00001316 movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0x64, 0xe0, //0x0000131a pcmpgtb %xmm8, %xmm4 + 0x66, 0x41, 0x0f, 0x6f, 0xee, //0x0000131f movdqa %xmm14, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x00001324 pcmpgtb %xmm3, %xmm5 + 0x66, 0x0f, 0xdb, 0xec, //0x00001328 pand %xmm4, %xmm5 + 0x66, 0x0f, 0x6f, 0xe3, //0x0000132c movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0x74, 0xe1, //0x00001330 pcmpeqb %xmm9, %xmm4 + 0x66, 0x0f, 0x6f, 0xf3, //0x00001335 movdqa %xmm3, %xmm6 + 0x66, 0x41, 0x0f, 0x74, 0xf2, //0x00001339 pcmpeqb %xmm10, %xmm6 + 0x66, 0x0f, 0xeb, 0xf4, //0x0000133e por %xmm4, %xmm6 + 0x66, 0x0f, 0x6f, 0xe3, //0x00001342 movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xe3, //0x00001346 pand %xmm11, %xmm4 + 0x66, 0x41, 0x0f, 0x74, 0xdc, //0x0000134b pcmpeqb %xmm12, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xe5, //0x00001350 pcmpeqb %xmm13, %xmm4 + 0x66, 0x0f, 0xd7, 0xf4, //0x00001355 pmovmskb %xmm4, %esi + 0x66, 0x0f, 0xeb, 0xe3, //0x00001359 por %xmm3, %xmm4 + 0x66, 0x0f, 0xeb, 0xee, //0x0000135d por %xmm6, %xmm5 + 0x66, 0x0f, 0xeb, 0xec, //0x00001361 por %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xdb, //0x00001365 pmovmskb %xmm3, %ebx + 0x66, 0x44, 0x0f, 0xd7, 0xce, //0x00001369 pmovmskb %xmm6, %r9d + 0x66, 0x0f, 0xd7, 0xcd, //0x0000136e pmovmskb %xmm5, %ecx + 0xf7, 0xd1, //0x00001372 notl %ecx + 0x0f, 0xbc, 0xc9, //0x00001374 bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x00001377 cmpl $16, %ecx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000137a je LBB0_258 + 0xba, 0xff, 0xff, 0xff, 0xff, //0x00001380 movl $-1, %edx + 0xd3, 0xe2, //0x00001385 shll %cl, %edx + 0xf7, 0xd2, //0x00001387 notl %edx + 0x21, 0xd3, //0x00001389 andl %edx, %ebx + 0x21, 0xd6, //0x0000138b andl %edx, %esi + 0x44, 0x21, 0xca, //0x0000138d andl %r9d, %edx + 0x41, 0x89, 0xd1, //0x00001390 movl %edx, %r9d + //0x00001393 LBB0_258 + 0x8d, 0x53, 0xff, //0x00001393 leal $-1(%rbx), %edx + 0x21, 0xda, //0x00001396 andl %ebx, %edx + 0x0f, 0x85, 0x50, 0x0a, 0x00, 0x00, //0x00001398 jne LBB0_385 + 0x8d, 0x56, 0xff, //0x0000139e leal $-1(%rsi), %edx + 0x21, 0xf2, //0x000013a1 andl %esi, %edx + 0x0f, 0x85, 0x45, 0x0a, 0x00, 0x00, //0x000013a3 jne LBB0_385 + 0x41, 0x8d, 0x51, 0xff, //0x000013a9 leal $-1(%r9), %edx + 0x44, 0x21, 0xca, //0x000013ad andl %r9d, %edx + 0x0f, 0x85, 0x38, 0x0a, 0x00, 0x00, //0x000013b0 jne LBB0_385 + 0x85, 0xdb, //0x000013b6 testl %ebx, %ebx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000013b8 je LBB0_264 + 0x0f, 0xbc, 0xdb, //0x000013be bsfl %ebx, %ebx + 0x49, 0x83, 0xfb, 0xff, //0x000013c1 cmpq $-1, %r11 + 0x0f, 0x85, 0x06, 0x0c, 0x00, 0x00, //0x000013c5 jne LBB0_391 + 0x4c, 0x01, 0xf3, //0x000013cb addq %r14, %rbx + 0x49, 0x89, 0xdb, //0x000013ce movq %rbx, %r11 + //0x000013d1 LBB0_264 + 0x85, 0xf6, //0x000013d1 testl %esi, %esi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000013d3 je LBB0_267 + 0x0f, 0xbc, 0xf6, //0x000013d9 bsfl %esi, %esi + 0x49, 0x83, 0xfc, 0xff, //0x000013dc cmpq $-1, %r12 + 0x0f, 0x85, 0xf2, 0x0b, 0x00, 0x00, //0x000013e0 jne LBB0_392 + 0x4c, 0x01, 0xf6, //0x000013e6 addq %r14, %rsi + 0x49, 0x89, 0xf4, //0x000013e9 movq %rsi, %r12 + //0x000013ec LBB0_267 + 0x45, 0x85, 0xc9, //0x000013ec testl %r9d, %r9d + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x000013ef je LBB0_270 + 0x41, 0x0f, 0xbc, 0xd1, //0x000013f5 bsfl %r9d, %edx + 0x49, 0x83, 0xfd, 0xff, //0x000013f9 cmpq $-1, %r13 + 0x0f, 0x85, 0xdc, 0x0b, 0x00, 0x00, //0x000013fd jne LBB0_393 + 0x4c, 0x01, 0xf2, //0x00001403 addq %r14, %rdx + 0x49, 0x89, 0xd5, //0x00001406 movq %rdx, %r13 + //0x00001409 LBB0_270 + 0x83, 0xf9, 0x10, //0x00001409 cmpl $16, %ecx + 0x0f, 0x85, 0xd4, 0x03, 0x00, 0x00, //0x0000140c jne LBB0_329 + 0x48, 0x83, 0xc7, 0xf0, //0x00001412 addq $-16, %rdi + 0x49, 0x83, 0xc6, 0x10, //0x00001416 addq $16, %r14 + 0x48, 0x83, 0xff, 0x0f, //0x0000141a cmpq $15, %rdi + 0x0f, 0x87, 0xec, 0xfe, 0xff, 0xff, //0x0000141e ja LBB0_256 + 0x4b, 0x8d, 0x34, 0x32, //0x00001424 leaq (%r10,%r14), %rsi + 0x49, 0x89, 0xf1, //0x00001428 movq %rsi, %r9 + 0x4d, 0x39, 0xf0, //0x0000142b cmpq %r14, %r8 + 0x0f, 0x84, 0xc6, 0x03, 0x00, 0x00, //0x0000142e je LBB0_331 + //0x00001434 LBB0_273 + 0x4c, 0x8d, 0x0c, 0x3e, //0x00001434 leaq (%rsi,%rdi), %r9 + 0x49, 0x89, 0xf0, //0x00001438 movq %rsi, %r8 + 0x4d, 0x29, 0xd0, //0x0000143b subq %r10, %r8 + 0x31, 0xd2, //0x0000143e xorl %edx, %edx + 0x4c, 0x8d, 0x35, 0x71, 0x27, 0x00, 0x00, //0x00001440 leaq $10097(%rip), %r14 /* LJTI0_3+0(%rip) */ + 0xe9, 0x31, 0x00, 0x00, 0x00, //0x00001447 jmp LBB0_278 + //0x0000144c LBB0_274 + 0x83, 0xf9, 0x65, //0x0000144c cmpl $101, %ecx + 0x0f, 0x85, 0x9f, 0x03, 0x00, 0x00, //0x0000144f jne LBB0_330 + //0x00001455 LBB0_275 + 0x49, 0x83, 0xfc, 0xff, //0x00001455 cmpq $-1, %r12 + 0x0f, 0x85, 0xb8, 0x09, 0x00, 0x00, //0x00001459 jne LBB0_389 + 0x4d, 0x8d, 0x24, 0x10, //0x0000145f leaq (%r8,%rdx), %r12 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001463 .p2align 4, 0x90 + //0x00001470 LBB0_277 + 0x48, 0x83, 0xc2, 0x01, //0x00001470 addq $1, %rdx + 0x48, 0x39, 0xd7, //0x00001474 cmpq %rdx, %rdi + 0x0f, 0x84, 0x7d, 0x03, 0x00, 0x00, //0x00001477 je LBB0_331 + //0x0000147d LBB0_278 + 0x0f, 0xbe, 0x0c, 0x16, //0x0000147d movsbl (%rsi,%rdx), %ecx + 0x8d, 0x59, 0xd0, //0x00001481 leal $-48(%rcx), %ebx + 0x83, 0xfb, 0x0a, //0x00001484 cmpl $10, %ebx + 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00001487 jb LBB0_277 + 0x8d, 0x59, 0xd5, //0x0000148d leal $-43(%rcx), %ebx + 0x83, 0xfb, 0x1a, //0x00001490 cmpl $26, %ebx + 0x0f, 0x87, 0xb3, 0xff, 0xff, 0xff, //0x00001493 ja LBB0_274 + 0x49, 0x63, 0x0c, 0x9e, //0x00001499 movslq (%r14,%rbx,4), %rcx + 0x4c, 0x01, 0xf1, //0x0000149d addq %r14, %rcx + 0xff, 0xe1, //0x000014a0 jmpq *%rcx + //0x000014a2 LBB0_281 + 0x49, 0x83, 0xfd, 0xff, //0x000014a2 cmpq $-1, %r13 + 0x0f, 0x85, 0x6b, 0x09, 0x00, 0x00, //0x000014a6 jne LBB0_389 + 0x4d, 0x8d, 0x2c, 0x10, //0x000014ac leaq (%r8,%rdx), %r13 + 0xe9, 0xbb, 0xff, 0xff, 0xff, //0x000014b0 jmp LBB0_277 + //0x000014b5 LBB0_283 + 0x49, 0x83, 0xfb, 0xff, //0x000014b5 cmpq $-1, %r11 + 0x0f, 0x85, 0x58, 0x09, 0x00, 0x00, //0x000014b9 jne LBB0_389 + 0x4d, 0x8d, 0x1c, 0x10, //0x000014bf leaq (%r8,%rdx), %r11 + 0xe9, 0xa8, 0xff, 0xff, 0xff, //0x000014c3 jmp LBB0_277 + //0x000014c8 LBB0_285 + 0x49, 0x8b, 0x03, //0x000014c8 movq (%r11), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x000014cb cmpq $4095, %rax + 0x0f, 0x8f, 0x5b, 0x15, 0x00, 0x00, //0x000014d1 jg LBB0_602 + 0x48, 0x8d, 0x48, 0x01, //0x000014d7 leaq $1(%rax), %rcx + 0x49, 0x89, 0x0b, //0x000014db movq %rcx, (%r11) + 0x49, 0xc7, 0x44, 0xc3, 0x08, 0x05, 0x00, 0x00, 0x00, //0x000014de movq $5, $8(%r11,%rax,8) + 0xe9, 0x2f, 0xee, 0xff, 0xff, //0x000014e7 jmp LBB0_28 + //0x000014ec LBB0_287 + 0x49, 0x8b, 0x08, //0x000014ec movq (%r8), %rcx + 0x48, 0x8b, 0x57, 0x08, //0x000014ef movq $8(%rdi), %rdx + 0x48, 0x8d, 0x72, 0xfc, //0x000014f3 leaq $-4(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x000014f7 cmpq %rsi, %rcx + 0x0f, 0x87, 0xb7, 0x1f, 0x00, 0x00, //0x000014fa ja LBB0_516 + 0x41, 0x8b, 0x14, 0x0c, //0x00001500 movl (%r12,%rcx), %edx + 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x00001504 cmpl $1702063201, %edx + 0x0f, 0x85, 0x79, 0x20, 0x00, 0x00, //0x0000150a jne LBB0_604 + 0x48, 0x8d, 0x41, 0x04, //0x00001510 leaq $4(%rcx), %rax + 0x49, 0x89, 0x00, //0x00001514 movq %rax, (%r8) + 0x48, 0x85, 0xc9, //0x00001517 testq %rcx, %rcx + 0x0f, 0x8f, 0xfb, 0xed, 0xff, 0xff, //0x0000151a jg LBB0_28 + 0xe9, 0x5b, 0x21, 0x00, 0x00, //0x00001520 jmp LBB0_290 + //0x00001525 LBB0_291 + 0x49, 0x8b, 0x08, //0x00001525 movq (%r8), %rcx + 0x48, 0x8b, 0x57, 0x08, //0x00001528 movq $8(%rdi), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x0000152c leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001530 cmpq %rsi, %rcx + 0x0f, 0x87, 0x7e, 0x1f, 0x00, 0x00, //0x00001533 ja LBB0_516 + 0x48, 0x8d, 0x41, 0xff, //0x00001539 leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x0000153d cmpl $1819047278, $-1(%r12,%rcx) + 0x0f, 0x84, 0x2c, 0x00, 0x00, 0x00, //0x00001546 je LBB0_299 + 0xe9, 0x8d, 0x20, 0x00, 0x00, //0x0000154c jmp LBB0_293 + //0x00001551 LBB0_297 + 0x49, 0x8b, 0x08, //0x00001551 movq (%r8), %rcx + 0x48, 0x8b, 0x57, 0x08, //0x00001554 movq $8(%rdi), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x00001558 leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x0000155c cmpq %rsi, %rcx + 0x0f, 0x87, 0x52, 0x1f, 0x00, 0x00, //0x0000155f ja LBB0_516 + 0x48, 0x8d, 0x41, 0xff, //0x00001565 leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00001569 cmpl $1702195828, $-1(%r12,%rcx) + 0x0f, 0x85, 0xad, 0x20, 0x00, 0x00, //0x00001572 jne LBB0_609 + //0x00001578 LBB0_299 + 0x48, 0x8d, 0x51, 0x03, //0x00001578 leaq $3(%rcx), %rdx + 0x49, 0x89, 0x10, //0x0000157c movq %rdx, (%r8) + 0x48, 0x85, 0xc9, //0x0000157f testq %rcx, %rcx + 0x0f, 0x8f, 0x93, 0xed, 0xff, 0xff, //0x00001582 jg LBB0_28 + 0xe9, 0x2d, 0x1f, 0x00, 0x00, //0x00001588 jmp LBB0_586 + //0x0000158d LBB0_300 + 0x49, 0x8b, 0x03, //0x0000158d movq (%r11), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00001590 cmpq $4095, %rax + 0x0f, 0x8f, 0x96, 0x14, 0x00, 0x00, //0x00001596 jg LBB0_602 + 0x48, 0x8d, 0x48, 0x01, //0x0000159c leaq $1(%rax), %rcx + 0x49, 0x89, 0x0b, //0x000015a0 movq %rcx, (%r11) + 0x49, 0xc7, 0x44, 0xc3, 0x08, 0x06, 0x00, 0x00, 0x00, //0x000015a3 movq $6, $8(%r11,%rax,8) + 0xe9, 0x6a, 0xed, 0xff, 0xff, //0x000015ac jmp LBB0_28 + //0x000015b1 LBB0_302 + 0x49, 0x8d, 0x56, 0xff, //0x000015b1 leaq $-1(%r14), %rdx + 0x49, 0x39, 0xd4, //0x000015b5 cmpq %rdx, %r12 + 0x49, 0xf7, 0xd6, //0x000015b8 notq %r14 + 0x4d, 0x0f, 0x45, 0xf2, //0x000015bb cmovneq %r10, %r14 + 0x84, 0xc9, //0x000015bf testb %cl, %cl + 0x4d, 0x0f, 0x44, 0xf2, //0x000015c1 cmoveq %r10, %r14 + 0x4d, 0x89, 0xf5, //0x000015c5 movq %r14, %r13 + 0xe9, 0x06, 0xfa, 0xff, 0xff, //0x000015c8 jmp LBB0_210 + //0x000015cd LBB0_303 + 0x49, 0x89, 0xc6, //0x000015cd movq %rax, %r14 + 0x49, 0x29, 0xce, //0x000015d0 subq %rcx, %r14 + 0x0f, 0x84, 0xf2, 0x20, 0x00, 0x00, //0x000015d3 je LBB0_619 + 0x49, 0x83, 0xfe, 0x40, //0x000015d9 cmpq $64, %r14 + 0x0f, 0x82, 0x14, 0x0c, 0x00, 0x00, //0x000015dd jb LBB0_419 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000015e3 movq $-1, $-56(%rbp) + 0x48, 0x89, 0xc8, //0x000015eb movq %rcx, %rax + 0x45, 0x31, 0xc0, //0x000015ee xorl %r8d, %r8d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000015f1 .p2align 4, 0x90 + //0x00001600 LBB0_306 + 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x04, //0x00001600 movdqu (%r12,%rax), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x10, //0x00001606 movdqu $16(%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x04, 0x20, //0x0000160d movdqu $32(%r12,%rax), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00001614 movdqu $48(%r12,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xdc, //0x0000161b movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000161f pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x00001623 pmovmskb %xmm3, %r15d + 0x66, 0x0f, 0x6f, 0xdd, //0x00001628 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000162c pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001630 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xdf, //0x00001634 movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001638 pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xe3, //0x0000163c pmovmskb %xmm3, %r12d + 0x66, 0x0f, 0x6f, 0xde, //0x00001641 movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001645 pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00001649 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x6f, 0xdc, //0x0000164e movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001652 pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00001656 pmovmskb %xmm3, %r13d + 0x66, 0x0f, 0x6f, 0xdd, //0x0000165b movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000165f pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xcb, //0x00001663 pmovmskb %xmm3, %r9d + 0x66, 0x0f, 0x6f, 0xdf, //0x00001668 movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000166c pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00001670 pmovmskb %xmm3, %edi + 0x66, 0x0f, 0x6f, 0xde, //0x00001674 movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001678 pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x0000167c pmovmskb %xmm3, %r10d + 0x66, 0x0f, 0x6f, 0xda, //0x00001681 movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x64, 0xdd, //0x00001685 pcmpgtb %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xef, //0x00001689 pcmpgtb %xmm15, %xmm5 + 0x66, 0x0f, 0xdb, 0xeb, //0x0000168e pand %xmm3, %xmm5 + 0x66, 0x0f, 0xd7, 0xf5, //0x00001692 pmovmskb %xmm5, %esi + 0x66, 0x0f, 0x6f, 0xda, //0x00001696 movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x64, 0xdf, //0x0000169a pcmpgtb %xmm7, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xff, //0x0000169e pcmpgtb %xmm15, %xmm7 + 0x66, 0x0f, 0xdb, 0xfb, //0x000016a3 pand %xmm3, %xmm7 + 0x66, 0x0f, 0xd7, 0xd7, //0x000016a7 pmovmskb %xmm7, %edx + 0x66, 0x0f, 0x6f, 0xda, //0x000016ab movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x64, 0xde, //0x000016af pcmpgtb %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xf7, //0x000016b3 pcmpgtb %xmm15, %xmm6 + 0x66, 0x0f, 0xdb, 0xf3, //0x000016b8 pand %xmm3, %xmm6 + 0x66, 0x0f, 0xd7, 0xde, //0x000016bc pmovmskb %xmm6, %ebx + 0x49, 0xc1, 0xe3, 0x30, //0x000016c0 shlq $48, %r11 + 0x49, 0xc1, 0xe4, 0x20, //0x000016c4 shlq $32, %r12 + 0x4d, 0x09, 0xdc, //0x000016c8 orq %r11, %r12 + 0x48, 0xc1, 0xe1, 0x10, //0x000016cb shlq $16, %rcx + 0x4c, 0x09, 0xe1, //0x000016cf orq %r12, %rcx + 0x49, 0x09, 0xcf, //0x000016d2 orq %rcx, %r15 + 0x49, 0xc1, 0xe2, 0x30, //0x000016d5 shlq $48, %r10 + 0x48, 0xc1, 0xe7, 0x20, //0x000016d9 shlq $32, %rdi + 0x4c, 0x09, 0xd7, //0x000016dd orq %r10, %rdi + 0x49, 0xc1, 0xe1, 0x10, //0x000016e0 shlq $16, %r9 + 0x49, 0x09, 0xf9, //0x000016e4 orq %rdi, %r9 + 0x48, 0xc1, 0xe3, 0x30, //0x000016e7 shlq $48, %rbx + 0x48, 0xc1, 0xe2, 0x20, //0x000016eb shlq $32, %rdx + 0x48, 0x09, 0xda, //0x000016ef orq %rbx, %rdx + 0x48, 0xc1, 0xe6, 0x10, //0x000016f2 shlq $16, %rsi + 0x48, 0x09, 0xd6, //0x000016f6 orq %rdx, %rsi + 0x4d, 0x09, 0xcd, //0x000016f9 orq %r9, %r13 + 0x0f, 0x85, 0x55, 0x00, 0x00, 0x00, //0x000016fc jne LBB0_323 + 0x4d, 0x85, 0xc0, //0x00001702 testq %r8, %r8 + 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x00001705 jne LBB0_325 + 0x45, 0x31, 0xc0, //0x0000170b xorl %r8d, %r8d + 0x4c, 0x8b, 0x65, 0xc0, //0x0000170e movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x55, 0xb8, //0x00001712 movq $-72(%rbp), %r10 + //0x00001716 LBB0_309 + 0x66, 0x0f, 0x6f, 0xda, //0x00001716 movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x0000171a pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe7, //0x0000171e pcmpgtb %xmm15, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x00001723 pand %xmm3, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00001727 pmovmskb %xmm4, %ecx + 0x48, 0x09, 0xce, //0x0000172b orq %rcx, %rsi + 0x4d, 0x85, 0xff, //0x0000172e testq %r15, %r15 + 0x0f, 0x85, 0x99, 0x00, 0x00, 0x00, //0x00001731 jne LBB0_327 + 0x48, 0x85, 0xf6, //0x00001737 testq %rsi, %rsi + 0x0f, 0x85, 0x62, 0x1f, 0x00, 0x00, //0x0000173a jne LBB0_616 + 0x49, 0x83, 0xc6, 0xc0, //0x00001740 addq $-64, %r14 + 0x48, 0x83, 0xc0, 0x40, //0x00001744 addq $64, %rax + 0x49, 0x83, 0xfe, 0x3f, //0x00001748 cmpq $63, %r14 + 0x0f, 0x87, 0xae, 0xfe, 0xff, 0xff, //0x0000174c ja LBB0_306 + 0xe9, 0x67, 0x07, 0x00, 0x00, //0x00001752 jmp LBB0_312 + //0x00001757 LBB0_323 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00001757 cmpq $-1, $-56(%rbp) + 0x4c, 0x8b, 0x65, 0xc0, //0x0000175c movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x55, 0xb8, //0x00001760 movq $-72(%rbp), %r10 + 0x0f, 0x85, 0x18, 0x00, 0x00, 0x00, //0x00001764 jne LBB0_326 + 0x49, 0x0f, 0xbc, 0xcd, //0x0000176a bsfq %r13, %rcx + 0x48, 0x01, 0xc1, //0x0000176e addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00001771 movq %rcx, $-56(%rbp) + 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00001775 jmp LBB0_326 + //0x0000177a LBB0_325 + 0x4c, 0x8b, 0x65, 0xc0, //0x0000177a movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x55, 0xb8, //0x0000177e movq $-72(%rbp), %r10 + //0x00001782 LBB0_326 + 0x4c, 0x89, 0xc1, //0x00001782 movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00001785 notq %rcx + 0x4c, 0x21, 0xe9, //0x00001788 andq %r13, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x0000178b leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xc2, //0x0000178f orq %r8, %rdx + 0x48, 0x89, 0xd7, //0x00001792 movq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x00001795 notq %rdi + 0x4c, 0x21, 0xef, //0x00001798 andq %r13, %rdi + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000179b movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xdf, //0x000017a5 andq %rbx, %rdi + 0x45, 0x31, 0xc0, //0x000017a8 xorl %r8d, %r8d + 0x48, 0x01, 0xcf, //0x000017ab addq %rcx, %rdi + 0x41, 0x0f, 0x92, 0xc0, //0x000017ae setb %r8b + 0x48, 0x01, 0xff, //0x000017b2 addq %rdi, %rdi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000017b5 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcf, //0x000017bf xorq %rcx, %rdi + 0x48, 0x21, 0xd7, //0x000017c2 andq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x000017c5 notq %rdi + 0x49, 0x21, 0xff, //0x000017c8 andq %rdi, %r15 + 0xe9, 0x46, 0xff, 0xff, 0xff, //0x000017cb jmp LBB0_309 + //0x000017d0 LBB0_327 + 0x49, 0x0f, 0xbc, 0xcf, //0x000017d0 bsfq %r15, %rcx + 0x48, 0x85, 0xf6, //0x000017d4 testq %rsi, %rsi + 0x0f, 0x84, 0xc3, 0x00, 0x00, 0x00, //0x000017d7 je LBB0_343 + 0x48, 0x0f, 0xbc, 0xd6, //0x000017dd bsfq %rsi, %rdx + 0xe9, 0xbf, 0x00, 0x00, 0x00, //0x000017e1 jmp LBB0_344 + //0x000017e6 LBB0_329 + 0x41, 0x89, 0xc9, //0x000017e6 movl %ecx, %r9d + 0x4d, 0x01, 0xd1, //0x000017e9 addq %r10, %r9 + 0x4d, 0x01, 0xf1, //0x000017ec addq %r14, %r9 + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x000017ef jmp LBB0_331 + //0x000017f4 LBB0_330 + 0x48, 0x01, 0xd6, //0x000017f4 addq %rdx, %rsi + 0x49, 0x89, 0xf1, //0x000017f7 movq %rsi, %r9 + //0x000017fa LBB0_331 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x000017fa movq $-1, %r14 + 0x4d, 0x85, 0xdb, //0x00001801 testq %r11, %r11 + 0x0f, 0x84, 0x6d, 0x1d, 0x00, 0x00, //0x00001804 je LBB0_601 + 0x4d, 0x85, 0xed, //0x0000180a testq %r13, %r13 + 0x0f, 0x84, 0x64, 0x1d, 0x00, 0x00, //0x0000180d je LBB0_601 + 0x4d, 0x85, 0xe4, //0x00001813 testq %r12, %r12 + 0x0f, 0x84, 0x5b, 0x1d, 0x00, 0x00, //0x00001816 je LBB0_601 + 0x4d, 0x29, 0xd1, //0x0000181c subq %r10, %r9 + 0x49, 0x8d, 0x49, 0xff, //0x0000181f leaq $-1(%r9), %rcx + 0x49, 0x39, 0xcb, //0x00001823 cmpq %rcx, %r11 + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00001826 je LBB0_340 + 0x49, 0x39, 0xcd, //0x0000182c cmpq %rcx, %r13 + 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x0000182f je LBB0_340 + 0x49, 0x39, 0xcc, //0x00001835 cmpq %rcx, %r12 + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x00001838 je LBB0_340 + 0x4d, 0x85, 0xed, //0x0000183e testq %r13, %r13 + 0x0f, 0x8e, 0xb2, 0x00, 0x00, 0x00, //0x00001841 jle LBB0_351 + 0x49, 0x8d, 0x4d, 0xff, //0x00001847 leaq $-1(%r13), %rcx + 0x49, 0x39, 0xcc, //0x0000184b cmpq %rcx, %r12 + 0x0f, 0x84, 0xa5, 0x00, 0x00, 0x00, //0x0000184e je LBB0_351 + 0x49, 0xf7, 0xd5, //0x00001854 notq %r13 + 0x4d, 0x89, 0xee, //0x00001857 movq %r13, %r14 + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x0000185a jmp LBB0_341 + //0x0000185f LBB0_340 + 0x49, 0xf7, 0xd9, //0x0000185f negq %r9 + 0x4d, 0x89, 0xce, //0x00001862 movq %r9, %r14 + //0x00001865 LBB0_341 + 0x4d, 0x85, 0xf6, //0x00001865 testq %r14, %r14 + 0x0f, 0x88, 0x09, 0x1d, 0x00, 0x00, //0x00001868 js LBB0_601 + //0x0000186e LBB0_342 + 0x49, 0x01, 0xc6, //0x0000186e addq %rax, %r14 + 0x4c, 0x8b, 0x45, 0xd0, //0x00001871 movq $-48(%rbp), %r8 + 0x4d, 0x89, 0x30, //0x00001875 movq %r14, (%r8) + 0x48, 0x85, 0xc0, //0x00001878 testq %rax, %rax + 0x48, 0x8b, 0x7d, 0xb0, //0x0000187b movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x65, 0xc0, //0x0000187f movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x5d, 0xa8, //0x00001883 movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001887 movabsq $4294977024, %r14 + 0x4c, 0x8b, 0x55, 0xb8, //0x00001891 movq $-72(%rbp), %r10 + 0x0f, 0x8f, 0x80, 0xea, 0xff, 0xff, //0x00001895 jg LBB0_28 + 0xe9, 0x9e, 0x11, 0x00, 0x00, //0x0000189b jmp LBB0_217 + //0x000018a0 LBB0_343 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x000018a0 movl $64, %edx + //0x000018a5 LBB0_344 + 0x4c, 0x8b, 0x45, 0xd0, //0x000018a5 movq $-48(%rbp), %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x000018a9 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x5d, 0xa8, //0x000018ad movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000018b1 movabsq $4294977024, %r14 + 0x48, 0x39, 0xca, //0x000018bb cmpq %rcx, %rdx + 0x0f, 0x82, 0xcc, 0x1d, 0x00, 0x00, //0x000018be jb LBB0_615 + 0x48, 0x01, 0xc8, //0x000018c4 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000018c7 addq $1, %rax + //0x000018cb LBB0_346 + 0x48, 0x85, 0xc0, //0x000018cb testq %rax, %rax + 0x0f, 0x88, 0x73, 0x11, 0x00, 0x00, //0x000018ce js LBB0_514 + 0x49, 0x89, 0x00, //0x000018d4 movq %rax, (%r8) + 0x48, 0x83, 0x7d, 0xa0, 0x00, //0x000018d7 cmpq $0, $-96(%rbp) + 0x0f, 0x8f, 0x39, 0xea, 0xff, 0xff, //0x000018dc jg LBB0_28 + 0xe9, 0x8c, 0x1d, 0x00, 0x00, //0x000018e2 jmp LBB0_348 + //0x000018e7 LBB0_349 + 0x0f, 0xbc, 0xca, //0x000018e7 bsfl %edx, %ecx + //0x000018ea LBB0_350 + 0x49, 0xf7, 0xd5, //0x000018ea notq %r13 + 0x49, 0x29, 0xcd, //0x000018ed subq %rcx, %r13 + 0x48, 0x8b, 0x7d, 0xa0, //0x000018f0 movq $-96(%rbp), %rdi + 0xe9, 0xda, 0xf6, 0xff, 0xff, //0x000018f4 jmp LBB0_210 + //0x000018f9 LBB0_351 + 0x4c, 0x89, 0xd9, //0x000018f9 movq %r11, %rcx + 0x4c, 0x09, 0xe1, //0x000018fc orq %r12, %rcx + 0x0f, 0x99, 0xc2, //0x000018ff setns %dl + 0x0f, 0x88, 0xb2, 0x01, 0x00, 0x00, //0x00001902 js LBB0_355 + 0x4d, 0x39, 0xe3, //0x00001908 cmpq %r12, %r11 + 0x0f, 0x8c, 0xa9, 0x01, 0x00, 0x00, //0x0000190b jl LBB0_355 + 0x49, 0xf7, 0xd3, //0x00001911 notq %r11 + 0x4d, 0x89, 0xde, //0x00001914 movq %r11, %r14 + 0xe9, 0x49, 0xff, 0xff, 0xff, //0x00001917 jmp LBB0_341 + //0x0000191c LBB0_354 + 0x48, 0x8b, 0x8d, 0x68, 0xff, 0xff, 0xff, //0x0000191c movq $-152(%rbp), %rcx + 0x48, 0x8b, 0x7d, 0xa0, //0x00001923 movq $-96(%rbp), %rdi + 0x4c, 0x8d, 0x2c, 0x39, //0x00001927 leaq (%rcx,%rdi), %r13 + 0x49, 0x29, 0xf5, //0x0000192b subq %rsi, %r13 + 0x49, 0x29, 0xd5, //0x0000192e subq %rdx, %r13 + 0xe9, 0x9d, 0xf6, 0xff, 0xff, //0x00001931 jmp LBB0_210 + //0x00001936 LBB0_71 + 0x4c, 0x01, 0xe0, //0x00001936 addq %r12, %rax + 0x48, 0x8b, 0x7d, 0xb0, //0x00001939 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x5d, 0xa8, //0x0000193d movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001941 movabsq $4294977024, %r14 + 0x49, 0x83, 0xf9, 0x20, //0x0000194b cmpq $32, %r9 + 0x4c, 0x8b, 0x55, 0xb8, //0x0000194f movq $-72(%rbp), %r10 + 0x0f, 0x82, 0x33, 0x09, 0x00, 0x00, //0x00001953 jb LBB0_424 + //0x00001959 LBB0_72 + 0xf3, 0x0f, 0x6f, 0x18, //0x00001959 movdqu (%rax), %xmm3 + 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x0000195d movdqu $16(%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x00001962 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00001966 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x0000196a pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x0000196e movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00001972 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00001976 pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x74, 0xd9, //0x0000197a pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x0000197e pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x74, 0xe1, //0x00001982 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xdc, //0x00001986 pmovmskb %xmm4, %ebx + 0x48, 0xc1, 0xe1, 0x10, //0x0000198a shlq $16, %rcx + 0x48, 0x09, 0xca, //0x0000198e orq %rcx, %rdx + 0x48, 0xc1, 0xe3, 0x10, //0x00001991 shlq $16, %rbx + 0x48, 0x09, 0xde, //0x00001995 orq %rbx, %rsi + 0x0f, 0x85, 0x77, 0x08, 0x00, 0x00, //0x00001998 jne LBB0_420 + 0x4d, 0x85, 0xc0, //0x0000199e testq %r8, %r8 + 0x0f, 0x85, 0x8b, 0x08, 0x00, 0x00, //0x000019a1 jne LBB0_422 + 0x45, 0x31, 0xc0, //0x000019a7 xorl %r8d, %r8d + 0x48, 0x85, 0xd2, //0x000019aa testq %rdx, %rdx + 0x0f, 0x84, 0xd1, 0x08, 0x00, 0x00, //0x000019ad je LBB0_423 + //0x000019b3 LBB0_75 + 0x48, 0x0f, 0xbc, 0xca, //0x000019b3 bsfq %rdx, %rcx + 0x48, 0x03, 0x45, 0x90, //0x000019b7 addq $-112(%rbp), %rax + 0x48, 0x01, 0xc8, //0x000019bb addq %rcx, %rax + 0x4c, 0x8b, 0x45, 0xd0, //0x000019be movq $-48(%rbp), %r8 + 0xe9, 0x76, 0xf6, 0xff, 0xff, //0x000019c2 jmp LBB0_215 + //0x000019c7 LBB0_154 + 0x4c, 0x01, 0xe0, //0x000019c7 addq %r12, %rax + 0x49, 0x83, 0xfa, 0x20, //0x000019ca cmpq $32, %r10 + 0x0f, 0x82, 0xe2, 0x06, 0x00, 0x00, //0x000019ce jb LBB0_408 + //0x000019d4 LBB0_155 + 0xf3, 0x0f, 0x6f, 0x20, //0x000019d4 movdqu (%rax), %xmm4 + 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x000019d8 movdqu $16(%rax), %xmm3 + 0x66, 0x0f, 0x6f, 0xec, //0x000019dd movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x000019e1 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x000019e5 pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x6f, 0xeb, //0x000019e9 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x000019ed pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x000019f1 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x6f, 0xec, //0x000019f5 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x000019f9 pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x000019fd pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xeb, //0x00001a01 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x00001a05 pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xdd, //0x00001a09 pmovmskb %xmm5, %ebx + 0x66, 0x0f, 0x6f, 0xea, //0x00001a0d movdqa %xmm2, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x00001a11 pcmpgtb %xmm3, %xmm5 + 0x66, 0x41, 0x0f, 0x64, 0xdf, //0x00001a15 pcmpgtb %xmm15, %xmm3 + 0x66, 0x0f, 0xdb, 0xdd, //0x00001a1a pand %xmm5, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001a1e pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe7, 0x10, //0x00001a22 shlq $16, %rdi + 0x48, 0x09, 0xf9, //0x00001a26 orq %rdi, %rcx + 0x48, 0xc1, 0xe3, 0x10, //0x00001a29 shlq $16, %rbx + 0x48, 0xc1, 0xe6, 0x10, //0x00001a2d shlq $16, %rsi + 0x48, 0x09, 0xda, //0x00001a31 orq %rbx, %rdx + 0x0f, 0x85, 0x46, 0x09, 0x00, 0x00, //0x00001a34 jne LBB0_436 + 0x4d, 0x85, 0xc0, //0x00001a3a testq %r8, %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x00001a3d movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x5d, 0xa8, //0x00001a41 movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001a45 movabsq $4294977024, %r14 + 0x0f, 0x85, 0x48, 0x09, 0x00, 0x00, //0x00001a4f jne LBB0_438 + 0x45, 0x31, 0xc0, //0x00001a55 xorl %r8d, %r8d + //0x00001a58 LBB0_158 + 0x66, 0x0f, 0x6f, 0xda, //0x00001a58 movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00001a5c pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe7, //0x00001a60 pcmpgtb %xmm15, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x00001a65 pand %xmm3, %xmm4 + 0x66, 0x0f, 0xd7, 0xd4, //0x00001a69 pmovmskb %xmm4, %edx + 0x48, 0x09, 0xd6, //0x00001a6d orq %rdx, %rsi + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001a70 movl $64, %edx + 0xbb, 0x40, 0x00, 0x00, 0x00, //0x00001a75 movl $64, %ebx + 0x48, 0x85, 0xc9, //0x00001a7a testq %rcx, %rcx + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00001a7d je LBB0_160 + 0x48, 0x0f, 0xbc, 0xd9, //0x00001a83 bsfq %rcx, %rbx + //0x00001a87 LBB0_160 + 0x48, 0x85, 0xf6, //0x00001a87 testq %rsi, %rsi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00001a8a je LBB0_162 + 0x48, 0x0f, 0xbc, 0xd6, //0x00001a90 bsfq %rsi, %rdx + //0x00001a94 LBB0_162 + 0x48, 0x85, 0xc9, //0x00001a94 testq %rcx, %rcx + 0x0f, 0x84, 0xbe, 0x01, 0x00, 0x00, //0x00001a97 je LBB0_359 + 0x48, 0x39, 0xda, //0x00001a9d cmpq %rbx, %rdx + 0x0f, 0x82, 0x65, 0x1c, 0x00, 0x00, //0x00001aa0 jb LBB0_625 + 0x48, 0x03, 0x45, 0x90, //0x00001aa6 addq $-112(%rbp), %rax + 0x48, 0x01, 0xd8, //0x00001aaa addq %rbx, %rax + 0x4c, 0x8b, 0x45, 0xd0, //0x00001aad movq $-48(%rbp), %r8 + 0x4c, 0x8b, 0x55, 0xb8, //0x00001ab1 movq $-72(%rbp), %r10 + 0xe9, 0x83, 0xf5, 0xff, 0xff, //0x00001ab5 jmp LBB0_215 + //0x00001aba LBB0_355 + 0x49, 0x8d, 0x4c, 0x24, 0xff, //0x00001aba leaq $-1(%r12), %rcx + 0x49, 0x39, 0xcb, //0x00001abf cmpq %rcx, %r11 + 0x49, 0xf7, 0xd4, //0x00001ac2 notq %r12 + 0x4d, 0x0f, 0x45, 0xe1, //0x00001ac5 cmovneq %r9, %r12 + 0x84, 0xd2, //0x00001ac9 testb %dl, %dl + 0x4d, 0x0f, 0x44, 0xe1, //0x00001acb cmoveq %r9, %r12 + 0x4d, 0x89, 0xe6, //0x00001acf movq %r12, %r14 + 0xe9, 0x8e, 0xfd, 0xff, 0xff, //0x00001ad2 jmp LBB0_341 + //0x00001ad7 LBB0_135 + 0x4c, 0x01, 0xe0, //0x00001ad7 addq %r12, %rax + //0x00001ada LBB0_136 + 0x49, 0x83, 0xf9, 0x20, //0x00001ada cmpq $32, %r9 + 0x48, 0x8b, 0x7d, 0xb0, //0x00001ade movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x5d, 0xa8, //0x00001ae2 movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001ae6 movabsq $4294977024, %r14 + 0x4c, 0x8b, 0x55, 0xb8, //0x00001af0 movq $-72(%rbp), %r10 + 0x0f, 0x82, 0x65, 0x09, 0x00, 0x00, //0x00001af4 jb LBB0_443 + 0xf3, 0x0f, 0x6f, 0x18, //0x00001afa movdqu (%rax), %xmm3 + 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00001afe movdqu $16(%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x00001b03 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00001b07 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00001b0b pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x00001b0f movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00001b13 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00001b17 pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x74, 0xd9, //0x00001b1b pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001b1f pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x74, 0xe1, //0x00001b23 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xdc, //0x00001b27 pmovmskb %xmm4, %ebx + 0x48, 0xc1, 0xe1, 0x10, //0x00001b2b shlq $16, %rcx + 0x48, 0x09, 0xca, //0x00001b2f orq %rcx, %rdx + 0x48, 0xc1, 0xe3, 0x10, //0x00001b32 shlq $16, %rbx + 0x48, 0x09, 0xde, //0x00001b36 orq %rbx, %rsi + 0x0f, 0x85, 0xa9, 0x08, 0x00, 0x00, //0x00001b39 jne LBB0_439 + 0x4d, 0x85, 0xc0, //0x00001b3f testq %r8, %r8 + 0x0f, 0x85, 0xbd, 0x08, 0x00, 0x00, //0x00001b42 jne LBB0_441 + 0x45, 0x31, 0xc0, //0x00001b48 xorl %r8d, %r8d + 0x48, 0x85, 0xd2, //0x00001b4b testq %rdx, %rdx + 0x0f, 0x84, 0x03, 0x09, 0x00, 0x00, //0x00001b4e je LBB0_442 + //0x00001b54 LBB0_140 + 0x48, 0x0f, 0xbc, 0xca, //0x00001b54 bsfq %rdx, %rcx + 0x48, 0x03, 0x45, 0x90, //0x00001b58 addq $-112(%rbp), %rax + 0x48, 0x01, 0xc8, //0x00001b5c addq %rcx, %rax + 0x4c, 0x8b, 0x45, 0xd0, //0x00001b5f movq $-48(%rbp), %r8 + 0xe9, 0x41, 0xf5, 0xff, 0xff, //0x00001b63 jmp LBB0_225 + //0x00001b68 LBB0_183 + 0x4c, 0x01, 0xe0, //0x00001b68 addq %r12, %rax + 0x49, 0x83, 0xfe, 0x20, //0x00001b6b cmpq $32, %r14 + 0x0f, 0x82, 0xf4, 0x05, 0x00, 0x00, //0x00001b6f jb LBB0_414 + //0x00001b75 LBB0_184 + 0xf3, 0x0f, 0x6f, 0x20, //0x00001b75 movdqu (%rax), %xmm4 + 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00001b79 movdqu $16(%rax), %xmm3 + 0x66, 0x0f, 0x6f, 0xec, //0x00001b7e movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00001b82 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xf5, //0x00001b86 pmovmskb %xmm5, %esi + 0x66, 0x0f, 0x6f, 0xeb, //0x00001b8a movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00001b8e pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00001b92 pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x6f, 0xec, //0x00001b96 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x00001b9a pcmpeqb %xmm1, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xdd, //0x00001b9e pmovmskb %xmm5, %r11d + 0x66, 0x0f, 0x6f, 0xeb, //0x00001ba3 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x00001ba7 pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00001bab pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xea, //0x00001baf movdqa %xmm2, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x00001bb3 pcmpgtb %xmm3, %xmm5 + 0x66, 0x41, 0x0f, 0x64, 0xdf, //0x00001bb7 pcmpgtb %xmm15, %xmm3 + 0x66, 0x0f, 0xdb, 0xdd, //0x00001bbc pand %xmm5, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00001bc0 pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x00001bc4 shlq $16, %rcx + 0x48, 0x09, 0xce, //0x00001bc8 orq %rcx, %rsi + 0x48, 0xc1, 0xe2, 0x10, //0x00001bcb shlq $16, %rdx + 0x48, 0xc1, 0xe7, 0x10, //0x00001bcf shlq $16, %rdi + 0x49, 0x09, 0xd3, //0x00001bd3 orq %rdx, %r11 + 0x4c, 0x8b, 0x55, 0xb8, //0x00001bd6 movq $-72(%rbp), %r10 + 0x0f, 0x85, 0x73, 0x09, 0x00, 0x00, //0x00001bda jne LBB0_455 + 0x4d, 0x85, 0xc9, //0x00001be0 testq %r9, %r9 + 0x0f, 0x85, 0x87, 0x09, 0x00, 0x00, //0x00001be3 jne LBB0_457 + 0x45, 0x31, 0xc9, //0x00001be9 xorl %r9d, %r9d + //0x00001bec LBB0_187 + 0x66, 0x0f, 0x6f, 0xda, //0x00001bec movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00001bf0 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe7, //0x00001bf4 pcmpgtb %xmm15, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x00001bf9 pand %xmm3, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00001bfd pmovmskb %xmm4, %ecx + 0x48, 0x09, 0xcf, //0x00001c01 orq %rcx, %rdi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00001c04 movl $64, %ecx + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001c09 movl $64, %edx + 0x48, 0x85, 0xf6, //0x00001c0e testq %rsi, %rsi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00001c11 je LBB0_189 + 0x48, 0x0f, 0xbc, 0xd6, //0x00001c17 bsfq %rsi, %rdx + //0x00001c1b LBB0_189 + 0x48, 0x85, 0xff, //0x00001c1b testq %rdi, %rdi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00001c1e je LBB0_191 + 0x48, 0x0f, 0xbc, 0xcf, //0x00001c24 bsfq %rdi, %rcx + //0x00001c28 LBB0_191 + 0x48, 0x85, 0xf6, //0x00001c28 testq %rsi, %rsi + 0x0f, 0x84, 0x03, 0x01, 0x00, 0x00, //0x00001c2b je LBB0_372 + 0x48, 0x39, 0xd1, //0x00001c31 cmpq %rdx, %rcx + 0x0f, 0x82, 0xf3, 0x1a, 0x00, 0x00, //0x00001c34 jb LBB0_627 + 0x48, 0x03, 0x45, 0x90, //0x00001c3a addq $-112(%rbp), %rax + 0x48, 0x01, 0xd0, //0x00001c3e addq %rdx, %rax + 0xe9, 0xba, 0x01, 0x00, 0x00, //0x00001c41 jmp LBB0_388 + //0x00001c46 LBB0_356 + 0x89, 0xd9, //0x00001c46 movl %ebx, %ecx + 0xe9, 0x9d, 0xfc, 0xff, 0xff, //0x00001c48 jmp LBB0_350 + //0x00001c4d LBB0_357 + 0x89, 0xf1, //0x00001c4d movl %esi, %ecx + 0xe9, 0x96, 0xfc, 0xff, 0xff, //0x00001c4f jmp LBB0_350 + //0x00001c54 LBB0_358 + 0x89, 0xd1, //0x00001c54 movl %edx, %ecx + 0xe9, 0x8f, 0xfc, 0xff, 0xff, //0x00001c56 jmp LBB0_350 + //0x00001c5b LBB0_359 + 0x48, 0x85, 0xf6, //0x00001c5b testq %rsi, %rsi + 0x0f, 0x85, 0xa7, 0x1a, 0x00, 0x00, //0x00001c5e jne LBB0_625 + 0x48, 0x83, 0xc0, 0x20, //0x00001c64 addq $32, %rax + 0x49, 0x83, 0xc2, 0xe0, //0x00001c68 addq $-32, %r10 + 0x4d, 0x85, 0xc0, //0x00001c6c testq %r8, %r8 + 0x0f, 0x85, 0x5c, 0x04, 0x00, 0x00, //0x00001c6f jne LBB0_409 + //0x00001c75 LBB0_361 + 0x48, 0x8b, 0x4d, 0xc8, //0x00001c75 movq $-56(%rbp), %rcx + 0x4c, 0x8b, 0x45, 0xd0, //0x00001c79 movq $-48(%rbp), %r8 + 0x4d, 0x85, 0xd2, //0x00001c7d testq %r10, %r10 + 0x0f, 0x84, 0xcf, 0x0d, 0x00, 0x00, //0x00001c80 je LBB0_515 + //0x00001c86 LBB0_362 + 0x0f, 0xb6, 0x10, //0x00001c86 movzbl (%rax), %edx + 0x80, 0xfa, 0x22, //0x00001c89 cmpb $34, %dl + 0x0f, 0x84, 0x95, 0x00, 0x00, 0x00, //0x00001c8c je LBB0_371 + 0x80, 0xfa, 0x5c, //0x00001c92 cmpb $92, %dl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00001c95 je LBB0_366 + 0x80, 0xfa, 0x1f, //0x00001c9b cmpb $31, %dl + 0x0f, 0x86, 0x94, 0x1a, 0x00, 0x00, //0x00001c9e jbe LBB0_628 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001ca4 movq $-1, %rdx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00001cab movl $1, %esi + 0x48, 0x01, 0xf0, //0x00001cb0 addq %rsi, %rax + 0x49, 0x01, 0xd2, //0x00001cb3 addq %rdx, %r10 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00001cb6 jne LBB0_362 + 0xe9, 0x94, 0x0d, 0x00, 0x00, //0x00001cbc jmp LBB0_515 + //0x00001cc1 LBB0_366 + 0x49, 0x83, 0xfa, 0x01, //0x00001cc1 cmpq $1, %r10 + 0x0f, 0x84, 0x9d, 0x0b, 0x00, 0x00, //0x00001cc5 je LBB0_485 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00001ccb movq $-2, %rdx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00001cd2 movl $2, %esi + 0x48, 0x83, 0xf9, 0xff, //0x00001cd7 cmpq $-1, %rcx + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00001cdb je LBB0_369 + 0x4c, 0x8b, 0x45, 0xd0, //0x00001ce1 movq $-48(%rbp), %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x00001ce5 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x65, 0xc0, //0x00001ce9 movq $-64(%rbp), %r12 + 0xe9, 0x16, 0x00, 0x00, 0x00, //0x00001ced jmp LBB0_370 + //0x00001cf2 LBB0_369 + 0x48, 0x89, 0xc1, //0x00001cf2 movq %rax, %rcx + 0x4c, 0x8b, 0x65, 0xc0, //0x00001cf5 movq $-64(%rbp), %r12 + 0x4c, 0x29, 0xe1, //0x00001cf9 subq %r12, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00001cfc movq %rcx, $-56(%rbp) + 0x4c, 0x8b, 0x45, 0xd0, //0x00001d00 movq $-48(%rbp), %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x00001d04 movq $-80(%rbp), %rdi + //0x00001d08 LBB0_370 + 0x4c, 0x8b, 0x5d, 0xa8, //0x00001d08 movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001d0c movabsq $4294977024, %r14 + 0x48, 0x01, 0xf0, //0x00001d16 addq %rsi, %rax + 0x49, 0x01, 0xd2, //0x00001d19 addq %rdx, %r10 + 0x0f, 0x85, 0x64, 0xff, 0xff, 0xff, //0x00001d1c jne LBB0_362 + 0xe9, 0x2e, 0x0d, 0x00, 0x00, //0x00001d22 jmp LBB0_515 + //0x00001d27 LBB0_371 + 0x48, 0x03, 0x45, 0x90, //0x00001d27 addq $-112(%rbp), %rax + 0x4c, 0x8b, 0x55, 0xb8, //0x00001d2b movq $-72(%rbp), %r10 + 0xe9, 0x09, 0xf3, 0xff, 0xff, //0x00001d2f jmp LBB0_215 + //0x00001d34 LBB0_372 + 0x48, 0x85, 0xff, //0x00001d34 testq %rdi, %rdi + 0x0f, 0x85, 0xf0, 0x19, 0x00, 0x00, //0x00001d37 jne LBB0_627 + 0x48, 0x83, 0xc0, 0x20, //0x00001d3d addq $32, %rax + 0x49, 0x83, 0xc6, 0xe0, //0x00001d41 addq $-32, %r14 + 0x4d, 0x85, 0xc9, //0x00001d45 testq %r9, %r9 + 0x0f, 0x85, 0x28, 0x04, 0x00, 0x00, //0x00001d48 jne LBB0_415 + //0x00001d4e LBB0_374 + 0x48, 0x8b, 0x55, 0xc8, //0x00001d4e movq $-56(%rbp), %rdx + 0x4d, 0x85, 0xf6, //0x00001d52 testq %r14, %r14 + 0x0f, 0x84, 0x9f, 0x19, 0x00, 0x00, //0x00001d55 je LBB0_384 + //0x00001d5b LBB0_375 + 0x0f, 0xb6, 0x08, //0x00001d5b movzbl (%rax), %ecx + 0x80, 0xf9, 0x22, //0x00001d5e cmpb $34, %cl + 0x0f, 0x84, 0x95, 0x00, 0x00, 0x00, //0x00001d61 je LBB0_387 + 0x80, 0xf9, 0x5c, //0x00001d67 cmpb $92, %cl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00001d6a je LBB0_379 + 0x80, 0xf9, 0x1f, //0x00001d70 cmpb $31, %cl + 0x0f, 0x86, 0xdd, 0x19, 0x00, 0x00, //0x00001d73 jbe LBB0_629 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00001d79 movq $-1, %rcx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00001d80 movl $1, %esi + 0x48, 0x01, 0xf0, //0x00001d85 addq %rsi, %rax + 0x49, 0x01, 0xce, //0x00001d88 addq %rcx, %r14 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00001d8b jne LBB0_375 + 0xe9, 0x64, 0x19, 0x00, 0x00, //0x00001d91 jmp LBB0_384 + //0x00001d96 LBB0_379 + 0x48, 0x8b, 0x4d, 0x98, //0x00001d96 movq $-104(%rbp), %rcx + 0x49, 0x83, 0xfe, 0x01, //0x00001d9a cmpq $1, %r14 + 0x0f, 0x84, 0x0e, 0x1a, 0x00, 0x00, //0x00001d9e je LBB0_637 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00001da4 movq $-2, %rcx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00001dab movl $2, %esi + 0x48, 0x83, 0xfa, 0xff, //0x00001db0 cmpq $-1, %rdx + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x00001db4 je LBB0_382 + 0x4c, 0x8b, 0x45, 0xd0, //0x00001dba movq $-48(%rbp), %r8 + 0x4c, 0x8b, 0x65, 0xc0, //0x00001dbe movq $-64(%rbp), %r12 + 0xe9, 0x12, 0x00, 0x00, 0x00, //0x00001dc2 jmp LBB0_383 + //0x00001dc7 LBB0_382 + 0x48, 0x89, 0xc2, //0x00001dc7 movq %rax, %rdx + 0x4c, 0x8b, 0x65, 0xc0, //0x00001dca movq $-64(%rbp), %r12 + 0x4c, 0x29, 0xe2, //0x00001dce subq %r12, %rdx + 0x48, 0x89, 0x55, 0xc8, //0x00001dd1 movq %rdx, $-56(%rbp) + 0x4c, 0x8b, 0x45, 0xd0, //0x00001dd5 movq $-48(%rbp), %r8 + //0x00001dd9 LBB0_383 + 0x4c, 0x8b, 0x55, 0xb8, //0x00001dd9 movq $-72(%rbp), %r10 + 0x48, 0x01, 0xf0, //0x00001ddd addq %rsi, %rax + 0x49, 0x01, 0xce, //0x00001de0 addq %rcx, %r14 + 0x0f, 0x85, 0x72, 0xff, 0xff, 0xff, //0x00001de3 jne LBB0_375 + 0xe9, 0x0c, 0x19, 0x00, 0x00, //0x00001de9 jmp LBB0_384 + //0x00001dee LBB0_385 + 0x0f, 0xbc, 0xca, //0x00001dee bsfl %edx, %ecx + //0x00001df1 LBB0_386 + 0x49, 0xf7, 0xd6, //0x00001df1 notq %r14 + 0x49, 0x29, 0xce, //0x00001df4 subq %rcx, %r14 + 0xe9, 0x69, 0xfa, 0xff, 0xff, //0x00001df7 jmp LBB0_341 + //0x00001dfc LBB0_387 + 0x48, 0x03, 0x45, 0x90, //0x00001dfc addq $-112(%rbp), %rax + //0x00001e00 LBB0_388 + 0x48, 0x8b, 0x7d, 0xb0, //0x00001e00 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x5d, 0xa8, //0x00001e04 movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001e08 movabsq $4294977024, %r14 + 0xe9, 0x8e, 0xf2, 0xff, 0xff, //0x00001e12 jmp LBB0_224 + //0x00001e17 LBB0_389 + 0x48, 0x8b, 0x8d, 0x70, 0xff, 0xff, 0xff, //0x00001e17 movq $-144(%rbp), %rcx + 0x4c, 0x8d, 0x34, 0x01, //0x00001e1e leaq (%rcx,%rax), %r14 + 0x49, 0x29, 0xf6, //0x00001e22 subq %rsi, %r14 + 0x49, 0x29, 0xd6, //0x00001e25 subq %rdx, %r14 + 0xe9, 0x38, 0xfa, 0xff, 0xff, //0x00001e28 jmp LBB0_341 + //0x00001e2d LBB0_237 + 0x4c, 0x01, 0xe0, //0x00001e2d addq %r12, %rax + //0x00001e30 LBB0_238 + 0x49, 0x83, 0xf9, 0x20, //0x00001e30 cmpq $32, %r9 + 0x48, 0x8b, 0x7d, 0xb0, //0x00001e34 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x5d, 0xa8, //0x00001e38 movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001e3c movabsq $4294977024, %r14 + 0x0f, 0x82, 0x95, 0x08, 0x00, 0x00, //0x00001e46 jb LBB0_466 + 0xf3, 0x0f, 0x6f, 0x18, //0x00001e4c movdqu (%rax), %xmm3 + 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00001e50 movdqu $16(%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x00001e55 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00001e59 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00001e5d pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x00001e61 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00001e65 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00001e69 pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x74, 0xd9, //0x00001e6d pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001e71 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x74, 0xe1, //0x00001e75 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xdc, //0x00001e79 pmovmskb %xmm4, %ebx + 0x48, 0xc1, 0xe1, 0x10, //0x00001e7d shlq $16, %rcx + 0x48, 0x09, 0xca, //0x00001e81 orq %rcx, %rdx + 0x48, 0xc1, 0xe3, 0x10, //0x00001e84 shlq $16, %rbx + 0x48, 0x09, 0xde, //0x00001e88 orq %rbx, %rsi + 0x0f, 0x85, 0xd9, 0x07, 0x00, 0x00, //0x00001e8b jne LBB0_462 + 0x4d, 0x85, 0xc0, //0x00001e91 testq %r8, %r8 + 0x4c, 0x8b, 0x55, 0xb8, //0x00001e94 movq $-72(%rbp), %r10 + 0x0f, 0x85, 0xe9, 0x07, 0x00, 0x00, //0x00001e98 jne LBB0_464 + 0x45, 0x31, 0xc0, //0x00001e9e xorl %r8d, %r8d + 0x48, 0x85, 0xd2, //0x00001ea1 testq %rdx, %rdx + 0x0f, 0x84, 0x2f, 0x08, 0x00, 0x00, //0x00001ea4 je LBB0_465 + //0x00001eaa LBB0_242 + 0x48, 0x0f, 0xbc, 0xca, //0x00001eaa bsfq %rdx, %rcx + 0x48, 0x03, 0x45, 0x90, //0x00001eae addq $-112(%rbp), %rax + 0x48, 0x01, 0xc8, //0x00001eb2 addq %rcx, %rax + 0x4c, 0x8b, 0x45, 0xd0, //0x00001eb5 movq $-48(%rbp), %r8 + 0xe9, 0x0d, 0xfa, 0xff, 0xff, //0x00001eb9 jmp LBB0_346 + //0x00001ebe LBB0_312 + 0x4c, 0x01, 0xe0, //0x00001ebe addq %r12, %rax + 0x49, 0x83, 0xfe, 0x20, //0x00001ec1 cmpq $32, %r14 + 0x0f, 0x82, 0x2c, 0x01, 0x00, 0x00, //0x00001ec5 jb LBB0_396 + //0x00001ecb LBB0_313 + 0xf3, 0x0f, 0x6f, 0x20, //0x00001ecb movdqu (%rax), %xmm4 + 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00001ecf movdqu $16(%rax), %xmm3 + 0x66, 0x0f, 0x6f, 0xec, //0x00001ed4 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00001ed8 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xf5, //0x00001edc pmovmskb %xmm5, %esi + 0x66, 0x0f, 0x6f, 0xeb, //0x00001ee0 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00001ee4 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00001ee8 pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x6f, 0xec, //0x00001eec movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x00001ef0 pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00001ef4 pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xeb, //0x00001ef8 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x00001efc pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xdd, //0x00001f00 pmovmskb %xmm5, %ebx + 0x66, 0x0f, 0x6f, 0xea, //0x00001f04 movdqa %xmm2, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x00001f08 pcmpgtb %xmm3, %xmm5 + 0x66, 0x41, 0x0f, 0x64, 0xdf, //0x00001f0c pcmpgtb %xmm15, %xmm3 + 0x66, 0x0f, 0xdb, 0xdd, //0x00001f11 pand %xmm5, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00001f15 pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x00001f19 shlq $16, %rcx + 0x48, 0x09, 0xce, //0x00001f1d orq %rcx, %rsi + 0x48, 0xc1, 0xe3, 0x10, //0x00001f20 shlq $16, %rbx + 0x48, 0xc1, 0xe7, 0x10, //0x00001f24 shlq $16, %rdi + 0x48, 0x09, 0xda, //0x00001f28 orq %rbx, %rdx + 0x0f, 0x85, 0x68, 0x08, 0x00, 0x00, //0x00001f2b jne LBB0_478 + 0x4d, 0x85, 0xc0, //0x00001f31 testq %r8, %r8 + 0x4c, 0x8b, 0x55, 0xb8, //0x00001f34 movq $-72(%rbp), %r10 + 0x0f, 0x85, 0x78, 0x08, 0x00, 0x00, //0x00001f38 jne LBB0_480 + 0x45, 0x31, 0xc0, //0x00001f3e xorl %r8d, %r8d + //0x00001f41 LBB0_316 + 0x66, 0x0f, 0x6f, 0xda, //0x00001f41 movdqa %xmm2, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00001f45 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe7, //0x00001f49 pcmpgtb %xmm15, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x00001f4e pand %xmm3, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00001f52 pmovmskb %xmm4, %ecx + 0x48, 0x09, 0xcf, //0x00001f56 orq %rcx, %rdi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00001f59 movl $64, %ecx + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001f5e movl $64, %edx + 0x48, 0x85, 0xf6, //0x00001f63 testq %rsi, %rsi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00001f66 je LBB0_318 + 0x48, 0x0f, 0xbc, 0xd6, //0x00001f6c bsfq %rsi, %rdx + //0x00001f70 LBB0_318 + 0x48, 0x85, 0xff, //0x00001f70 testq %rdi, %rdi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00001f73 je LBB0_320 + 0x48, 0x0f, 0xbc, 0xcf, //0x00001f79 bsfq %rdi, %rcx + //0x00001f7d LBB0_320 + 0x48, 0x85, 0xf6, //0x00001f7d testq %rsi, %rsi + 0x0f, 0x84, 0x60, 0x00, 0x00, 0x00, //0x00001f80 je LBB0_394 + 0x48, 0x39, 0xd1, //0x00001f86 cmpq %rdx, %rcx + 0x0f, 0x82, 0x00, 0x18, 0x00, 0x00, //0x00001f89 jb LBB0_633 + 0x48, 0x03, 0x45, 0x90, //0x00001f8f addq $-112(%rbp), %rax + 0x48, 0x01, 0xd0, //0x00001f93 addq %rdx, %rax + 0x4c, 0x8b, 0x45, 0xd0, //0x00001f96 movq $-48(%rbp), %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x00001f9a movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x5d, 0xa8, //0x00001f9e movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001fa2 movabsq $4294977024, %r14 + 0xe9, 0x1a, 0xf9, 0xff, 0xff, //0x00001fac jmp LBB0_346 + //0x00001fb1 LBB0_390 + 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x00001fb1 movq $-1, %r12 + 0x4c, 0x89, 0xde, //0x00001fb8 movq %r11, %rsi + 0x4c, 0x89, 0xc7, //0x00001fbb movq %r8, %rdi + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00001fbe movq $-1, %r14 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00001fc5 movq $-1, %r15 + 0xe9, 0xe3, 0xe8, 0xff, 0xff, //0x00001fcc jmp LBB0_112 + //0x00001fd1 LBB0_391 + 0x89, 0xd9, //0x00001fd1 movl %ebx, %ecx + 0xe9, 0x19, 0xfe, 0xff, 0xff, //0x00001fd3 jmp LBB0_386 + //0x00001fd8 LBB0_392 + 0x89, 0xf1, //0x00001fd8 movl %esi, %ecx + 0xe9, 0x12, 0xfe, 0xff, 0xff, //0x00001fda jmp LBB0_386 + //0x00001fdf LBB0_393 + 0x89, 0xd1, //0x00001fdf movl %edx, %ecx + 0xe9, 0x0b, 0xfe, 0xff, 0xff, //0x00001fe1 jmp LBB0_386 + //0x00001fe6 LBB0_394 + 0x48, 0x85, 0xff, //0x00001fe6 testq %rdi, %rdi + 0x0f, 0x85, 0xa8, 0x17, 0x00, 0x00, //0x00001fe9 jne LBB0_634 + 0x48, 0x83, 0xc0, 0x20, //0x00001fef addq $32, %rax + 0x49, 0x83, 0xc6, 0xe0, //0x00001ff3 addq $-32, %r14 + //0x00001ff7 LBB0_396 + 0x4d, 0x85, 0xc0, //0x00001ff7 testq %r8, %r8 + 0x0f, 0x85, 0x30, 0x08, 0x00, 0x00, //0x00001ffa jne LBB0_483 + 0x48, 0x8b, 0x55, 0xc8, //0x00002000 movq $-56(%rbp), %rdx + 0x4d, 0x85, 0xf6, //0x00002004 testq %r14, %r14 + 0x0f, 0x84, 0x5b, 0x08, 0x00, 0x00, //0x00002007 je LBB0_485 + //0x0000200d LBB0_398 + 0x0f, 0xb6, 0x08, //0x0000200d movzbl (%rax), %ecx + 0x80, 0xf9, 0x22, //0x00002010 cmpb $34, %cl + 0x0f, 0x84, 0x10, 0x01, 0x00, 0x00, //0x00002013 je LBB0_411 + 0x80, 0xf9, 0x5c, //0x00002019 cmpb $92, %cl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x0000201c je LBB0_403 + 0x80, 0xf9, 0x1f, //0x00002022 cmpb $31, %cl + 0x0f, 0x86, 0x7b, 0x17, 0x00, 0x00, //0x00002025 jbe LBB0_636 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000202b movq $-1, %rcx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002032 movl $1, %esi + //0x00002037 LBB0_402 + 0x48, 0x01, 0xf0, //0x00002037 addq %rsi, %rax + 0x49, 0x01, 0xce, //0x0000203a addq %rcx, %r14 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x0000203d jne LBB0_398 + 0xe9, 0x20, 0x08, 0x00, 0x00, //0x00002043 jmp LBB0_485 + //0x00002048 LBB0_403 + 0x49, 0x83, 0xfe, 0x01, //0x00002048 cmpq $1, %r14 + 0x0f, 0x84, 0x16, 0x08, 0x00, 0x00, //0x0000204c je LBB0_485 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002052 movq $-2, %rcx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002059 movl $2, %esi + 0x48, 0x83, 0xfa, 0xff, //0x0000205e cmpq $-1, %rdx + 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00002062 jne LBB0_402 + 0x48, 0x89, 0xc2, //0x00002068 movq %rax, %rdx + 0x48, 0x2b, 0x55, 0xc0, //0x0000206b subq $-64(%rbp), %rdx + 0x48, 0x89, 0x55, 0xc8, //0x0000206f movq %rdx, $-56(%rbp) + 0xe9, 0xbf, 0xff, 0xff, 0xff, //0x00002073 jmp LBB0_402 + //0x00002078 LBB0_406 + 0x49, 0x8d, 0x04, 0x0c, //0x00002078 leaq (%r12,%rcx), %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000207c movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x00002084 xorl %r8d, %r8d + 0x49, 0x83, 0xf9, 0x20, //0x00002087 cmpq $32, %r9 + 0x4c, 0x8b, 0x55, 0xb8, //0x0000208b movq $-72(%rbp), %r10 + 0x0f, 0x83, 0xc4, 0xf8, 0xff, 0xff, //0x0000208f jae LBB0_72 + 0xe9, 0xf2, 0x01, 0x00, 0x00, //0x00002095 jmp LBB0_424 + //0x0000209a LBB0_407 + 0x48, 0x8b, 0x45, 0xa0, //0x0000209a movq $-96(%rbp), %rax + 0x4c, 0x01, 0xe0, //0x0000209e addq %r12, %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000020a1 movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x000020a9 xorl %r8d, %r8d + 0x49, 0x83, 0xfa, 0x20, //0x000020ac cmpq $32, %r10 + 0x0f, 0x83, 0x1e, 0xf9, 0xff, 0xff, //0x000020b0 jae LBB0_155 + //0x000020b6 LBB0_408 + 0x48, 0x8b, 0x7d, 0xb0, //0x000020b6 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x5d, 0xa8, //0x000020ba movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000020be movabsq $4294977024, %r14 + 0x4d, 0x85, 0xc0, //0x000020c8 testq %r8, %r8 + 0x0f, 0x84, 0xa4, 0xfb, 0xff, 0xff, //0x000020cb je LBB0_361 + //0x000020d1 LBB0_409 + 0x4d, 0x85, 0xd2, //0x000020d1 testq %r10, %r10 + 0x0f, 0x84, 0x8e, 0x07, 0x00, 0x00, //0x000020d4 je LBB0_485 + 0x48, 0x8b, 0x4d, 0x80, //0x000020da movq $-128(%rbp), %rcx + 0x48, 0x8d, 0x14, 0x08, //0x000020de leaq (%rax,%rcx), %rdx + 0x48, 0x8b, 0x75, 0xc8, //0x000020e2 movq $-56(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x000020e6 cmpq $-1, %rsi + 0x48, 0x89, 0xf1, //0x000020ea movq %rsi, %rcx + 0x48, 0x0f, 0x44, 0xf2, //0x000020ed cmoveq %rdx, %rsi + 0x48, 0x0f, 0x44, 0xca, //0x000020f1 cmoveq %rdx, %rcx + 0x48, 0x83, 0xc0, 0x01, //0x000020f5 addq $1, %rax + 0x49, 0x83, 0xc2, 0xff, //0x000020f9 addq $-1, %r10 + 0x48, 0x89, 0x75, 0xc8, //0x000020fd movq %rsi, $-56(%rbp) + 0x4c, 0x8b, 0x45, 0xd0, //0x00002101 movq $-48(%rbp), %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x00002105 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x65, 0xc0, //0x00002109 movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x5d, 0xa8, //0x0000210d movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002111 movabsq $4294977024, %r14 + 0x4d, 0x85, 0xd2, //0x0000211b testq %r10, %r10 + 0x0f, 0x85, 0x62, 0xfb, 0xff, 0xff, //0x0000211e jne LBB0_362 + 0xe9, 0x2c, 0x09, 0x00, 0x00, //0x00002124 jmp LBB0_515 + //0x00002129 LBB0_411 + 0x48, 0x03, 0x45, 0x90, //0x00002129 addq $-112(%rbp), %rax + 0x4c, 0x8b, 0x45, 0xd0, //0x0000212d movq $-48(%rbp), %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x00002131 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x65, 0xc0, //0x00002135 movq $-64(%rbp), %r12 + 0xe9, 0x37, 0xf1, 0xff, 0xff, //0x00002139 jmp LBB0_248 + //0x0000213e LBB0_412 + 0x4c, 0x01, 0xe0, //0x0000213e addq %r12, %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002141 movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x00002149 xorl %r8d, %r8d + 0xe9, 0x89, 0xf9, 0xff, 0xff, //0x0000214c jmp LBB0_136 + //0x00002151 LBB0_413 + 0x4c, 0x01, 0xe0, //0x00002151 addq %r12, %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002154 movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc9, //0x0000215c xorl %r9d, %r9d + 0x49, 0x83, 0xfe, 0x20, //0x0000215f cmpq $32, %r14 + 0x0f, 0x83, 0x0c, 0xfa, 0xff, 0xff, //0x00002163 jae LBB0_184 + //0x00002169 LBB0_414 + 0x4c, 0x8b, 0x55, 0xb8, //0x00002169 movq $-72(%rbp), %r10 + 0x4d, 0x85, 0xc9, //0x0000216d testq %r9, %r9 + 0x0f, 0x84, 0xd8, 0xfb, 0xff, 0xff, //0x00002170 je LBB0_374 + //0x00002176 LBB0_415 + 0x48, 0x8b, 0x4d, 0x98, //0x00002176 movq $-104(%rbp), %rcx + 0x4d, 0x85, 0xf6, //0x0000217a testq %r14, %r14 + 0x0f, 0x84, 0x2f, 0x16, 0x00, 0x00, //0x0000217d je LBB0_637 + 0x48, 0x8b, 0x4d, 0x80, //0x00002183 movq $-128(%rbp), %rcx + 0x48, 0x01, 0xc1, //0x00002187 addq %rax, %rcx + 0x48, 0x8b, 0x75, 0xc8, //0x0000218a movq $-56(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x0000218e cmpq $-1, %rsi + 0x48, 0x89, 0xf2, //0x00002192 movq %rsi, %rdx + 0x48, 0x0f, 0x44, 0xf1, //0x00002195 cmoveq %rcx, %rsi + 0x48, 0x0f, 0x44, 0xd1, //0x00002199 cmoveq %rcx, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x0000219d addq $1, %rax + 0x49, 0x83, 0xc6, 0xff, //0x000021a1 addq $-1, %r14 + 0x48, 0x89, 0x75, 0xc8, //0x000021a5 movq %rsi, $-56(%rbp) + 0x4c, 0x8b, 0x45, 0xd0, //0x000021a9 movq $-48(%rbp), %r8 + 0x4c, 0x8b, 0x65, 0xc0, //0x000021ad movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x55, 0xb8, //0x000021b1 movq $-72(%rbp), %r10 + 0x4d, 0x85, 0xf6, //0x000021b5 testq %r14, %r14 + 0x0f, 0x85, 0x9d, 0xfb, 0xff, 0xff, //0x000021b8 jne LBB0_375 + 0xe9, 0x37, 0x15, 0x00, 0x00, //0x000021be jmp LBB0_384 + //0x000021c3 LBB0_417 + 0x49, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x000021c3 movq $-1, %r11 + 0x4c, 0x89, 0xd6, //0x000021ca movq %r10, %rsi + 0x4c, 0x89, 0xc7, //0x000021cd movq %r8, %rdi + 0x49, 0xc7, 0xc4, 0xff, 0xff, 0xff, 0xff, //0x000021d0 movq $-1, %r12 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000021d7 movq $-1, %r13 + 0xe9, 0x51, 0xf2, 0xff, 0xff, //0x000021de jmp LBB0_273 + //0x000021e3 LBB0_418 + 0x49, 0x8d, 0x04, 0x0c, //0x000021e3 leaq (%r12,%rcx), %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000021e7 movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x000021ef xorl %r8d, %r8d + 0xe9, 0x39, 0xfc, 0xff, 0xff, //0x000021f2 jmp LBB0_238 + //0x000021f7 LBB0_419 + 0x49, 0x8d, 0x04, 0x0c, //0x000021f7 leaq (%r12,%rcx), %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000021fb movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x00002203 xorl %r8d, %r8d + 0x49, 0x83, 0xfe, 0x20, //0x00002206 cmpq $32, %r14 + 0x0f, 0x83, 0xbb, 0xfc, 0xff, 0xff, //0x0000220a jae LBB0_313 + 0xe9, 0xe2, 0xfd, 0xff, 0xff, //0x00002210 jmp LBB0_396 + //0x00002215 LBB0_420 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00002215 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x0000221a jne LBB0_422 + 0x48, 0x89, 0xc1, //0x00002220 movq %rax, %rcx + 0x48, 0x2b, 0x4d, 0xc0, //0x00002223 subq $-64(%rbp), %rcx + 0x48, 0x0f, 0xbc, 0xfe, //0x00002227 bsfq %rsi, %rdi + 0x48, 0x01, 0xcf, //0x0000222b addq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xc8, //0x0000222e movq %rdi, $-56(%rbp) + //0x00002232 LBB0_422 + 0x44, 0x89, 0xc1, //0x00002232 movl %r8d, %ecx + 0xf7, 0xd1, //0x00002235 notl %ecx + 0x21, 0xf1, //0x00002237 andl %esi, %ecx + 0x41, 0x8d, 0x3c, 0x48, //0x00002239 leal (%r8,%rcx,2), %edi + 0x8d, 0x1c, 0x09, //0x0000223d leal (%rcx,%rcx), %ebx + 0xf7, 0xd3, //0x00002240 notl %ebx + 0x21, 0xf3, //0x00002242 andl %esi, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002244 andl $-1431655766, %ebx + 0x45, 0x31, 0xc0, //0x0000224a xorl %r8d, %r8d + 0x01, 0xcb, //0x0000224d addl %ecx, %ebx + 0x41, 0x0f, 0x92, 0xc0, //0x0000224f setb %r8b + 0x01, 0xdb, //0x00002253 addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00002255 xorl $1431655765, %ebx + 0x21, 0xfb, //0x0000225b andl %edi, %ebx + 0xf7, 0xd3, //0x0000225d notl %ebx + 0x21, 0xda, //0x0000225f andl %ebx, %edx + 0x48, 0x8b, 0x7d, 0xb0, //0x00002261 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x65, 0xc0, //0x00002265 movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x5d, 0xa8, //0x00002269 movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000226d movabsq $4294977024, %r14 + 0x4c, 0x8b, 0x55, 0xb8, //0x00002277 movq $-72(%rbp), %r10 + 0x48, 0x85, 0xd2, //0x0000227b testq %rdx, %rdx + 0x0f, 0x85, 0x2f, 0xf7, 0xff, 0xff, //0x0000227e jne LBB0_75 + //0x00002284 LBB0_423 + 0x48, 0x83, 0xc0, 0x20, //0x00002284 addq $32, %rax + 0x49, 0x83, 0xc1, 0xe0, //0x00002288 addq $-32, %r9 + //0x0000228c LBB0_424 + 0x4d, 0x85, 0xc0, //0x0000228c testq %r8, %r8 + 0x0f, 0x85, 0x1e, 0x03, 0x00, 0x00, //0x0000228f jne LBB0_458 + 0x48, 0x8b, 0x4d, 0xc8, //0x00002295 movq $-56(%rbp), %rcx + 0x4c, 0x8b, 0x45, 0xd0, //0x00002299 movq $-48(%rbp), %r8 + 0x4d, 0x85, 0xc9, //0x0000229d testq %r9, %r9 + 0x0f, 0x84, 0xa3, 0x00, 0x00, 0x00, //0x000022a0 je LBB0_435 + //0x000022a6 LBB0_426 + 0x31, 0xd2, //0x000022a6 xorl %edx, %edx + //0x000022a8 LBB0_427 + 0x0f, 0xb6, 0x1c, 0x10, //0x000022a8 movzbl (%rax,%rdx), %ebx + 0x80, 0xfb, 0x22, //0x000022ac cmpb $34, %bl + 0x0f, 0x84, 0x8d, 0x00, 0x00, 0x00, //0x000022af je LBB0_434 + 0x80, 0xfb, 0x5c, //0x000022b5 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000022b8 je LBB0_432 + 0x48, 0x83, 0xc2, 0x01, //0x000022be addq $1, %rdx + 0x49, 0x39, 0xd1, //0x000022c2 cmpq %rdx, %r9 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000022c5 jne LBB0_427 + 0xe9, 0x81, 0x00, 0x00, 0x00, //0x000022cb jmp LBB0_430 + //0x000022d0 LBB0_432 + 0x49, 0x8d, 0x71, 0xff, //0x000022d0 leaq $-1(%r9), %rsi + 0x48, 0x39, 0xd6, //0x000022d4 cmpq %rdx, %rsi + 0x0f, 0x84, 0x8b, 0x05, 0x00, 0x00, //0x000022d7 je LBB0_485 + 0x48, 0x8b, 0xb5, 0x78, 0xff, 0xff, 0xff, //0x000022dd movq $-136(%rbp), %rsi + 0x48, 0x01, 0xc6, //0x000022e4 addq %rax, %rsi + 0x48, 0x01, 0xd6, //0x000022e7 addq %rdx, %rsi + 0x48, 0x83, 0xf9, 0xff, //0x000022ea cmpq $-1, %rcx + 0x48, 0x8b, 0x7d, 0xc8, //0x000022ee movq $-56(%rbp), %rdi + 0x48, 0x0f, 0x44, 0xfe, //0x000022f2 cmoveq %rsi, %rdi + 0x48, 0x89, 0x7d, 0xc8, //0x000022f6 movq %rdi, $-56(%rbp) + 0x48, 0x0f, 0x44, 0xce, //0x000022fa cmoveq %rsi, %rcx + 0x48, 0x01, 0xd0, //0x000022fe addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00002301 addq $2, %rax + 0x4c, 0x89, 0xce, //0x00002305 movq %r9, %rsi + 0x48, 0x29, 0xd6, //0x00002308 subq %rdx, %rsi + 0x48, 0x83, 0xc6, 0xfe, //0x0000230b addq $-2, %rsi + 0x49, 0x83, 0xc1, 0xfe, //0x0000230f addq $-2, %r9 + 0x49, 0x39, 0xd1, //0x00002313 cmpq %rdx, %r9 + 0x49, 0x89, 0xf1, //0x00002316 movq %rsi, %r9 + 0x4c, 0x8b, 0x45, 0xd0, //0x00002319 movq $-48(%rbp), %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x0000231d movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x65, 0xc0, //0x00002321 movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x5d, 0xa8, //0x00002325 movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002329 movabsq $4294977024, %r14 + 0x4c, 0x8b, 0x55, 0xb8, //0x00002333 movq $-72(%rbp), %r10 + 0x0f, 0x85, 0x69, 0xff, 0xff, 0xff, //0x00002337 jne LBB0_426 + 0xe9, 0x13, 0x07, 0x00, 0x00, //0x0000233d jmp LBB0_515 + //0x00002342 LBB0_434 + 0x48, 0x01, 0xd0, //0x00002342 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002345 addq $1, %rax + //0x00002349 LBB0_435 + 0x4c, 0x29, 0xe0, //0x00002349 subq %r12, %rax + 0xe9, 0xec, 0xec, 0xff, 0xff, //0x0000234c jmp LBB0_215 + //0x00002351 LBB0_430 + 0x80, 0xfb, 0x22, //0x00002351 cmpb $34, %bl + 0x0f, 0x85, 0x0e, 0x05, 0x00, 0x00, //0x00002354 jne LBB0_485 + 0x4c, 0x01, 0xc8, //0x0000235a addq %r9, %rax + 0x4c, 0x8b, 0x45, 0xd0, //0x0000235d movq $-48(%rbp), %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x00002361 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x65, 0xc0, //0x00002365 movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x5d, 0xa8, //0x00002369 movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000236d movabsq $4294977024, %r14 + 0x4c, 0x8b, 0x55, 0xb8, //0x00002377 movq $-72(%rbp), %r10 + 0xe9, 0xc9, 0xff, 0xff, 0xff, //0x0000237b jmp LBB0_435 + //0x00002380 LBB0_436 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00002380 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00002385 jne LBB0_438 + 0x48, 0x89, 0xc7, //0x0000238b movq %rax, %rdi + 0x48, 0x2b, 0x7d, 0xc0, //0x0000238e subq $-64(%rbp), %rdi + 0x48, 0x0f, 0xbc, 0xda, //0x00002392 bsfq %rdx, %rbx + 0x48, 0x01, 0xfb, //0x00002396 addq %rdi, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x00002399 movq %rbx, $-56(%rbp) + //0x0000239d LBB0_438 + 0x44, 0x89, 0xc7, //0x0000239d movl %r8d, %edi + 0xf7, 0xd7, //0x000023a0 notl %edi + 0x21, 0xd7, //0x000023a2 andl %edx, %edi + 0x45, 0x8d, 0x0c, 0x78, //0x000023a4 leal (%r8,%rdi,2), %r9d + 0x8d, 0x1c, 0x3f, //0x000023a8 leal (%rdi,%rdi), %ebx + 0xf7, 0xd3, //0x000023ab notl %ebx + 0x21, 0xd3, //0x000023ad andl %edx, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x000023af andl $-1431655766, %ebx + 0x45, 0x31, 0xc0, //0x000023b5 xorl %r8d, %r8d + 0x01, 0xfb, //0x000023b8 addl %edi, %ebx + 0x41, 0x0f, 0x92, 0xc0, //0x000023ba setb %r8b + 0x01, 0xdb, //0x000023be addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x000023c0 xorl $1431655765, %ebx + 0x44, 0x21, 0xcb, //0x000023c6 andl %r9d, %ebx + 0xf7, 0xd3, //0x000023c9 notl %ebx + 0x21, 0xd9, //0x000023cb andl %ebx, %ecx + 0x48, 0x8b, 0x7d, 0xb0, //0x000023cd movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x65, 0xc0, //0x000023d1 movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x5d, 0xa8, //0x000023d5 movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000023d9 movabsq $4294977024, %r14 + 0xe9, 0x70, 0xf6, 0xff, 0xff, //0x000023e3 jmp LBB0_158 + //0x000023e8 LBB0_439 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000023e8 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x000023ed jne LBB0_441 + 0x48, 0x89, 0xc1, //0x000023f3 movq %rax, %rcx + 0x48, 0x2b, 0x4d, 0xc0, //0x000023f6 subq $-64(%rbp), %rcx + 0x48, 0x0f, 0xbc, 0xfe, //0x000023fa bsfq %rsi, %rdi + 0x48, 0x01, 0xcf, //0x000023fe addq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xc8, //0x00002401 movq %rdi, $-56(%rbp) + //0x00002405 LBB0_441 + 0x44, 0x89, 0xc1, //0x00002405 movl %r8d, %ecx + 0xf7, 0xd1, //0x00002408 notl %ecx + 0x21, 0xf1, //0x0000240a andl %esi, %ecx + 0x41, 0x8d, 0x3c, 0x48, //0x0000240c leal (%r8,%rcx,2), %edi + 0x8d, 0x1c, 0x09, //0x00002410 leal (%rcx,%rcx), %ebx + 0xf7, 0xd3, //0x00002413 notl %ebx + 0x21, 0xf3, //0x00002415 andl %esi, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002417 andl $-1431655766, %ebx + 0x45, 0x31, 0xc0, //0x0000241d xorl %r8d, %r8d + 0x01, 0xcb, //0x00002420 addl %ecx, %ebx + 0x41, 0x0f, 0x92, 0xc0, //0x00002422 setb %r8b + 0x01, 0xdb, //0x00002426 addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00002428 xorl $1431655765, %ebx + 0x21, 0xfb, //0x0000242e andl %edi, %ebx + 0xf7, 0xd3, //0x00002430 notl %ebx + 0x21, 0xda, //0x00002432 andl %ebx, %edx + 0x48, 0x8b, 0x7d, 0xb0, //0x00002434 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x65, 0xc0, //0x00002438 movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x5d, 0xa8, //0x0000243c movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002440 movabsq $4294977024, %r14 + 0x4c, 0x8b, 0x55, 0xb8, //0x0000244a movq $-72(%rbp), %r10 + 0x48, 0x85, 0xd2, //0x0000244e testq %rdx, %rdx + 0x0f, 0x85, 0xfd, 0xf6, 0xff, 0xff, //0x00002451 jne LBB0_140 + //0x00002457 LBB0_442 + 0x48, 0x83, 0xc0, 0x20, //0x00002457 addq $32, %rax + 0x49, 0x83, 0xc1, 0xe0, //0x0000245b addq $-32, %r9 + //0x0000245f LBB0_443 + 0x4d, 0x85, 0xc0, //0x0000245f testq %r8, %r8 + 0x0f, 0x85, 0xa7, 0x01, 0x00, 0x00, //0x00002462 jne LBB0_460 + 0x48, 0x8b, 0x55, 0xc8, //0x00002468 movq $-56(%rbp), %rdx + 0x4c, 0x8b, 0x45, 0xd0, //0x0000246c movq $-48(%rbp), %r8 + 0x4d, 0x85, 0xc9, //0x00002470 testq %r9, %r9 + 0x0f, 0x84, 0xa3, 0x00, 0x00, 0x00, //0x00002473 je LBB0_454 + //0x00002479 LBB0_445 + 0x31, 0xf6, //0x00002479 xorl %esi, %esi + //0x0000247b LBB0_446 + 0x0f, 0xb6, 0x0c, 0x30, //0x0000247b movzbl (%rax,%rsi), %ecx + 0x80, 0xf9, 0x22, //0x0000247f cmpb $34, %cl + 0x0f, 0x84, 0x8d, 0x00, 0x00, 0x00, //0x00002482 je LBB0_453 + 0x80, 0xf9, 0x5c, //0x00002488 cmpb $92, %cl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x0000248b je LBB0_451 + 0x48, 0x83, 0xc6, 0x01, //0x00002491 addq $1, %rsi + 0x49, 0x39, 0xf1, //0x00002495 cmpq %rsi, %r9 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00002498 jne LBB0_446 + 0xe9, 0x81, 0x00, 0x00, 0x00, //0x0000249e jmp LBB0_449 + //0x000024a3 LBB0_451 + 0x49, 0x8d, 0x49, 0xff, //0x000024a3 leaq $-1(%r9), %rcx + 0x48, 0x39, 0xf1, //0x000024a7 cmpq %rsi, %rcx + 0x0f, 0x84, 0x9d, 0x12, 0x00, 0x00, //0x000024aa je LBB0_639 + 0x48, 0x8b, 0x8d, 0x78, 0xff, 0xff, 0xff, //0x000024b0 movq $-136(%rbp), %rcx + 0x48, 0x01, 0xc1, //0x000024b7 addq %rax, %rcx + 0x48, 0x01, 0xf1, //0x000024ba addq %rsi, %rcx + 0x48, 0x83, 0xfa, 0xff, //0x000024bd cmpq $-1, %rdx + 0x48, 0x8b, 0x7d, 0xc8, //0x000024c1 movq $-56(%rbp), %rdi + 0x48, 0x0f, 0x44, 0xf9, //0x000024c5 cmoveq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xc8, //0x000024c9 movq %rdi, $-56(%rbp) + 0x48, 0x0f, 0x44, 0xd1, //0x000024cd cmoveq %rcx, %rdx + 0x48, 0x01, 0xf0, //0x000024d1 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x000024d4 addq $2, %rax + 0x4c, 0x89, 0xc9, //0x000024d8 movq %r9, %rcx + 0x48, 0x29, 0xf1, //0x000024db subq %rsi, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x000024de addq $-2, %rcx + 0x49, 0x83, 0xc1, 0xfe, //0x000024e2 addq $-2, %r9 + 0x49, 0x39, 0xf1, //0x000024e6 cmpq %rsi, %r9 + 0x49, 0x89, 0xc9, //0x000024e9 movq %rcx, %r9 + 0x4c, 0x8b, 0x45, 0xd0, //0x000024ec movq $-48(%rbp), %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x000024f0 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x65, 0xc0, //0x000024f4 movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x5d, 0xa8, //0x000024f8 movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000024fc movabsq $4294977024, %r14 + 0x4c, 0x8b, 0x55, 0xb8, //0x00002506 movq $-72(%rbp), %r10 + 0x0f, 0x85, 0x69, 0xff, 0xff, 0xff, //0x0000250a jne LBB0_445 + 0xe9, 0x98, 0x0f, 0x00, 0x00, //0x00002510 jmp LBB0_588 + //0x00002515 LBB0_453 + 0x48, 0x01, 0xf0, //0x00002515 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002518 addq $1, %rax + //0x0000251c LBB0_454 + 0x4c, 0x29, 0xe0, //0x0000251c subq %r12, %rax + 0xe9, 0x85, 0xeb, 0xff, 0xff, //0x0000251f jmp LBB0_225 + //0x00002524 LBB0_449 + 0x80, 0xf9, 0x22, //0x00002524 cmpb $34, %cl + 0x0f, 0x85, 0x20, 0x12, 0x00, 0x00, //0x00002527 jne LBB0_639 + 0x4c, 0x01, 0xc8, //0x0000252d addq %r9, %rax + 0x4c, 0x8b, 0x45, 0xd0, //0x00002530 movq $-48(%rbp), %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x00002534 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x65, 0xc0, //0x00002538 movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x5d, 0xa8, //0x0000253c movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002540 movabsq $4294977024, %r14 + 0x4c, 0x8b, 0x55, 0xb8, //0x0000254a movq $-72(%rbp), %r10 + 0xe9, 0xc9, 0xff, 0xff, 0xff, //0x0000254e jmp LBB0_454 + //0x00002553 LBB0_455 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00002553 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00002558 jne LBB0_457 + 0x49, 0x89, 0xc0, //0x0000255e movq %rax, %r8 + 0x4c, 0x2b, 0x45, 0xc0, //0x00002561 subq $-64(%rbp), %r8 + 0x49, 0x0f, 0xbc, 0xdb, //0x00002565 bsfq %r11, %rbx + 0x4c, 0x01, 0xc3, //0x00002569 addq %r8, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x0000256c movq %rbx, $-56(%rbp) + //0x00002570 LBB0_457 + 0x44, 0x89, 0xc9, //0x00002570 movl %r9d, %ecx + 0xf7, 0xd1, //0x00002573 notl %ecx + 0x44, 0x21, 0xd9, //0x00002575 andl %r11d, %ecx + 0x45, 0x8d, 0x04, 0x49, //0x00002578 leal (%r9,%rcx,2), %r8d + 0x8d, 0x14, 0x09, //0x0000257c leal (%rcx,%rcx), %edx + 0xf7, 0xd2, //0x0000257f notl %edx + 0x44, 0x21, 0xda, //0x00002581 andl %r11d, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002584 andl $-1431655766, %edx + 0x45, 0x31, 0xc9, //0x0000258a xorl %r9d, %r9d + 0x01, 0xca, //0x0000258d addl %ecx, %edx + 0x41, 0x0f, 0x92, 0xc1, //0x0000258f setb %r9b + 0x01, 0xd2, //0x00002593 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x00002595 xorl $1431655765, %edx + 0x44, 0x21, 0xc2, //0x0000259b andl %r8d, %edx + 0xf7, 0xd2, //0x0000259e notl %edx + 0x21, 0xd6, //0x000025a0 andl %edx, %esi + 0x4c, 0x8b, 0x45, 0xd0, //0x000025a2 movq $-48(%rbp), %r8 + 0x4c, 0x8b, 0x65, 0xc0, //0x000025a6 movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x55, 0xb8, //0x000025aa movq $-72(%rbp), %r10 + 0xe9, 0x39, 0xf6, 0xff, 0xff, //0x000025ae jmp LBB0_187 + //0x000025b3 LBB0_458 + 0x4d, 0x85, 0xc9, //0x000025b3 testq %r9, %r9 + 0x0f, 0x84, 0xac, 0x02, 0x00, 0x00, //0x000025b6 je LBB0_485 + 0x48, 0x8b, 0x4d, 0x80, //0x000025bc movq $-128(%rbp), %rcx + 0x48, 0x8d, 0x14, 0x08, //0x000025c0 leaq (%rax,%rcx), %rdx + 0x48, 0x8b, 0x75, 0xc8, //0x000025c4 movq $-56(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x000025c8 cmpq $-1, %rsi + 0x48, 0x89, 0xf1, //0x000025cc movq %rsi, %rcx + 0x48, 0x0f, 0x44, 0xf2, //0x000025cf cmoveq %rdx, %rsi + 0x48, 0x0f, 0x44, 0xca, //0x000025d3 cmoveq %rdx, %rcx + 0x48, 0x83, 0xc0, 0x01, //0x000025d7 addq $1, %rax + 0x49, 0x83, 0xc1, 0xff, //0x000025db addq $-1, %r9 + 0x48, 0x89, 0x75, 0xc8, //0x000025df movq %rsi, $-56(%rbp) + 0x4c, 0x8b, 0x45, 0xd0, //0x000025e3 movq $-48(%rbp), %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x000025e7 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x65, 0xc0, //0x000025eb movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x5d, 0xa8, //0x000025ef movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000025f3 movabsq $4294977024, %r14 + 0x4c, 0x8b, 0x55, 0xb8, //0x000025fd movq $-72(%rbp), %r10 + 0x4d, 0x85, 0xc9, //0x00002601 testq %r9, %r9 + 0x0f, 0x85, 0x9c, 0xfc, 0xff, 0xff, //0x00002604 jne LBB0_426 + 0xe9, 0x3a, 0xfd, 0xff, 0xff, //0x0000260a jmp LBB0_435 + //0x0000260f LBB0_460 + 0x4d, 0x85, 0xc9, //0x0000260f testq %r9, %r9 + 0x0f, 0x84, 0x35, 0x11, 0x00, 0x00, //0x00002612 je LBB0_639 + 0x48, 0x8b, 0x4d, 0x80, //0x00002618 movq $-128(%rbp), %rcx + 0x48, 0x01, 0xc1, //0x0000261c addq %rax, %rcx + 0x48, 0x8b, 0x75, 0xc8, //0x0000261f movq $-56(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x00002623 cmpq $-1, %rsi + 0x48, 0x89, 0xf2, //0x00002627 movq %rsi, %rdx + 0x48, 0x0f, 0x44, 0xf1, //0x0000262a cmoveq %rcx, %rsi + 0x48, 0x0f, 0x44, 0xd1, //0x0000262e cmoveq %rcx, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x00002632 addq $1, %rax + 0x49, 0x83, 0xc1, 0xff, //0x00002636 addq $-1, %r9 + 0x48, 0x89, 0x75, 0xc8, //0x0000263a movq %rsi, $-56(%rbp) + 0x4c, 0x8b, 0x45, 0xd0, //0x0000263e movq $-48(%rbp), %r8 + 0x48, 0x8b, 0x7d, 0xb0, //0x00002642 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x65, 0xc0, //0x00002646 movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x5d, 0xa8, //0x0000264a movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000264e movabsq $4294977024, %r14 + 0x4c, 0x8b, 0x55, 0xb8, //0x00002658 movq $-72(%rbp), %r10 + 0x4d, 0x85, 0xc9, //0x0000265c testq %r9, %r9 + 0x0f, 0x85, 0x14, 0xfe, 0xff, 0xff, //0x0000265f jne LBB0_445 + 0xe9, 0xb2, 0xfe, 0xff, 0xff, //0x00002665 jmp LBB0_454 + //0x0000266a LBB0_462 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000266a cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x0000266f jne LBB0_464 + 0x48, 0x89, 0xc1, //0x00002675 movq %rax, %rcx + 0x48, 0x2b, 0x4d, 0xc0, //0x00002678 subq $-64(%rbp), %rcx + 0x48, 0x0f, 0xbc, 0xfe, //0x0000267c bsfq %rsi, %rdi + 0x48, 0x01, 0xcf, //0x00002680 addq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xc8, //0x00002683 movq %rdi, $-56(%rbp) + //0x00002687 LBB0_464 + 0x44, 0x89, 0xc1, //0x00002687 movl %r8d, %ecx + 0xf7, 0xd1, //0x0000268a notl %ecx + 0x21, 0xf1, //0x0000268c andl %esi, %ecx + 0x41, 0x8d, 0x3c, 0x48, //0x0000268e leal (%r8,%rcx,2), %edi + 0x8d, 0x1c, 0x09, //0x00002692 leal (%rcx,%rcx), %ebx + 0xf7, 0xd3, //0x00002695 notl %ebx + 0x21, 0xf3, //0x00002697 andl %esi, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002699 andl $-1431655766, %ebx + 0x45, 0x31, 0xc0, //0x0000269f xorl %r8d, %r8d + 0x01, 0xcb, //0x000026a2 addl %ecx, %ebx + 0x41, 0x0f, 0x92, 0xc0, //0x000026a4 setb %r8b + 0x01, 0xdb, //0x000026a8 addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x000026aa xorl $1431655765, %ebx + 0x21, 0xfb, //0x000026b0 andl %edi, %ebx + 0xf7, 0xd3, //0x000026b2 notl %ebx + 0x21, 0xda, //0x000026b4 andl %ebx, %edx + 0x48, 0x8b, 0x7d, 0xb0, //0x000026b6 movq $-80(%rbp), %rdi + 0x4c, 0x8b, 0x65, 0xc0, //0x000026ba movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x5d, 0xa8, //0x000026be movq $-88(%rbp), %r11 + 0x49, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000026c2 movabsq $4294977024, %r14 + 0x4c, 0x8b, 0x55, 0xb8, //0x000026cc movq $-72(%rbp), %r10 + 0x48, 0x85, 0xd2, //0x000026d0 testq %rdx, %rdx + 0x0f, 0x85, 0xd1, 0xf7, 0xff, 0xff, //0x000026d3 jne LBB0_242 + //0x000026d9 LBB0_465 + 0x48, 0x83, 0xc0, 0x20, //0x000026d9 addq $32, %rax + 0x49, 0x83, 0xc1, 0xe0, //0x000026dd addq $-32, %r9 + //0x000026e1 LBB0_466 + 0x4d, 0x85, 0xc0, //0x000026e1 testq %r8, %r8 + 0x0f, 0x85, 0x09, 0x01, 0x00, 0x00, //0x000026e4 jne LBB0_481 + 0x48, 0x8b, 0x55, 0xc8, //0x000026ea movq $-56(%rbp), %rdx + 0x4d, 0x85, 0xc9, //0x000026ee testq %r9, %r9 + 0x0f, 0x84, 0x85, 0x00, 0x00, 0x00, //0x000026f1 je LBB0_477 + //0x000026f7 LBB0_468 + 0x31, 0xf6, //0x000026f7 xorl %esi, %esi + //0x000026f9 LBB0_469 + 0x0f, 0xb6, 0x0c, 0x30, //0x000026f9 movzbl (%rax,%rsi), %ecx + 0x80, 0xf9, 0x22, //0x000026fd cmpb $34, %cl + 0x0f, 0x84, 0x6f, 0x00, 0x00, 0x00, //0x00002700 je LBB0_476 + 0x80, 0xf9, 0x5c, //0x00002706 cmpb $92, %cl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00002709 je LBB0_474 + 0x48, 0x83, 0xc6, 0x01, //0x0000270f addq $1, %rsi + 0x49, 0x39, 0xf1, //0x00002713 cmpq %rsi, %r9 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00002716 jne LBB0_469 + 0xe9, 0x67, 0x00, 0x00, 0x00, //0x0000271c jmp LBB0_472 + //0x00002721 LBB0_474 + 0x49, 0x8d, 0x49, 0xff, //0x00002721 leaq $-1(%r9), %rcx + 0x48, 0x39, 0xf1, //0x00002725 cmpq %rsi, %rcx + 0x0f, 0x84, 0x3a, 0x01, 0x00, 0x00, //0x00002728 je LBB0_485 + 0x48, 0x8b, 0x8d, 0x78, 0xff, 0xff, 0xff, //0x0000272e movq $-136(%rbp), %rcx + 0x48, 0x01, 0xc1, //0x00002735 addq %rax, %rcx + 0x48, 0x01, 0xf1, //0x00002738 addq %rsi, %rcx + 0x48, 0x83, 0xfa, 0xff, //0x0000273b cmpq $-1, %rdx + 0x48, 0x8b, 0x7d, 0xc8, //0x0000273f movq $-56(%rbp), %rdi + 0x48, 0x0f, 0x44, 0xf9, //0x00002743 cmoveq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xc8, //0x00002747 movq %rdi, $-56(%rbp) + 0x48, 0x0f, 0x44, 0xd1, //0x0000274b cmoveq %rcx, %rdx + 0x48, 0x01, 0xf0, //0x0000274f addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00002752 addq $2, %rax + 0x4c, 0x89, 0xc9, //0x00002756 movq %r9, %rcx + 0x48, 0x29, 0xf1, //0x00002759 subq %rsi, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x0000275c addq $-2, %rcx + 0x49, 0x83, 0xc1, 0xfe, //0x00002760 addq $-2, %r9 + 0x49, 0x39, 0xf1, //0x00002764 cmpq %rsi, %r9 + 0x49, 0x89, 0xc9, //0x00002767 movq %rcx, %r9 + 0x0f, 0x85, 0x87, 0xff, 0xff, 0xff, //0x0000276a jne LBB0_468 + 0xe9, 0xf3, 0x00, 0x00, 0x00, //0x00002770 jmp LBB0_485 + //0x00002775 LBB0_476 + 0x48, 0x01, 0xf0, //0x00002775 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002778 addq $1, %rax + //0x0000277c LBB0_477 + 0x4c, 0x8b, 0x65, 0xc0, //0x0000277c movq $-64(%rbp), %r12 + 0x4c, 0x29, 0xe0, //0x00002780 subq %r12, %rax + 0xe9, 0xe5, 0xea, 0xff, 0xff, //0x00002783 jmp LBB0_247 + //0x00002788 LBB0_472 + 0x80, 0xf9, 0x22, //0x00002788 cmpb $34, %cl + 0x0f, 0x85, 0xd7, 0x00, 0x00, 0x00, //0x0000278b jne LBB0_485 + 0x4c, 0x01, 0xc8, //0x00002791 addq %r9, %rax + 0xe9, 0xe3, 0xff, 0xff, 0xff, //0x00002794 jmp LBB0_477 + //0x00002799 LBB0_478 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00002799 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x0000279e jne LBB0_480 + 0x48, 0x89, 0xc1, //0x000027a4 movq %rax, %rcx + 0x48, 0x2b, 0x4d, 0xc0, //0x000027a7 subq $-64(%rbp), %rcx + 0x48, 0x0f, 0xbc, 0xda, //0x000027ab bsfq %rdx, %rbx + 0x48, 0x01, 0xcb, //0x000027af addq %rcx, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x000027b2 movq %rbx, $-56(%rbp) + //0x000027b6 LBB0_480 + 0x44, 0x89, 0xc1, //0x000027b6 movl %r8d, %ecx + 0xf7, 0xd1, //0x000027b9 notl %ecx + 0x21, 0xd1, //0x000027bb andl %edx, %ecx + 0x45, 0x8d, 0x0c, 0x48, //0x000027bd leal (%r8,%rcx,2), %r9d + 0x8d, 0x1c, 0x09, //0x000027c1 leal (%rcx,%rcx), %ebx + 0xf7, 0xd3, //0x000027c4 notl %ebx + 0x21, 0xd3, //0x000027c6 andl %edx, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x000027c8 andl $-1431655766, %ebx + 0x45, 0x31, 0xc0, //0x000027ce xorl %r8d, %r8d + 0x01, 0xcb, //0x000027d1 addl %ecx, %ebx + 0x41, 0x0f, 0x92, 0xc0, //0x000027d3 setb %r8b + 0x01, 0xdb, //0x000027d7 addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x000027d9 xorl $1431655765, %ebx + 0x44, 0x21, 0xcb, //0x000027df andl %r9d, %ebx + 0xf7, 0xd3, //0x000027e2 notl %ebx + 0x21, 0xde, //0x000027e4 andl %ebx, %esi + 0x4c, 0x8b, 0x65, 0xc0, //0x000027e6 movq $-64(%rbp), %r12 + 0x4c, 0x8b, 0x55, 0xb8, //0x000027ea movq $-72(%rbp), %r10 + 0xe9, 0x4e, 0xf7, 0xff, 0xff, //0x000027ee jmp LBB0_316 + //0x000027f3 LBB0_481 + 0x4d, 0x85, 0xc9, //0x000027f3 testq %r9, %r9 + 0x0f, 0x84, 0x6c, 0x00, 0x00, 0x00, //0x000027f6 je LBB0_485 + 0x48, 0x8b, 0x4d, 0x80, //0x000027fc movq $-128(%rbp), %rcx + 0x48, 0x01, 0xc1, //0x00002800 addq %rax, %rcx + 0x48, 0x8b, 0x75, 0xc8, //0x00002803 movq $-56(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x00002807 cmpq $-1, %rsi + 0x48, 0x89, 0xf2, //0x0000280b movq %rsi, %rdx + 0x48, 0x0f, 0x44, 0xf1, //0x0000280e cmoveq %rcx, %rsi + 0x48, 0x0f, 0x44, 0xd1, //0x00002812 cmoveq %rcx, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x00002816 addq $1, %rax + 0x49, 0x83, 0xc1, 0xff, //0x0000281a addq $-1, %r9 + 0x48, 0x89, 0x75, 0xc8, //0x0000281e movq %rsi, $-56(%rbp) + 0x4d, 0x85, 0xc9, //0x00002822 testq %r9, %r9 + 0x0f, 0x85, 0xcc, 0xfe, 0xff, 0xff, //0x00002825 jne LBB0_468 + 0xe9, 0x4c, 0xff, 0xff, 0xff, //0x0000282b jmp LBB0_477 + //0x00002830 LBB0_483 + 0x4d, 0x85, 0xf6, //0x00002830 testq %r14, %r14 + 0x0f, 0x84, 0x2f, 0x00, 0x00, 0x00, //0x00002833 je LBB0_485 + 0x48, 0x8b, 0x4d, 0x80, //0x00002839 movq $-128(%rbp), %rcx + 0x48, 0x01, 0xc1, //0x0000283d addq %rax, %rcx + 0x48, 0x8b, 0x75, 0xc8, //0x00002840 movq $-56(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x00002844 cmpq $-1, %rsi + 0x48, 0x89, 0xf2, //0x00002848 movq %rsi, %rdx + 0x48, 0x0f, 0x44, 0xf1, //0x0000284b cmoveq %rcx, %rsi + 0x48, 0x0f, 0x44, 0xd1, //0x0000284f cmoveq %rcx, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x00002853 addq $1, %rax + 0x49, 0x83, 0xc6, 0xff, //0x00002857 addq $-1, %r14 + 0x48, 0x89, 0x75, 0xc8, //0x0000285b movq %rsi, $-56(%rbp) + 0x4d, 0x85, 0xf6, //0x0000285f testq %r14, %r14 + 0x0f, 0x85, 0xa5, 0xf7, 0xff, 0xff, //0x00002862 jne LBB0_398 + //0x00002868 LBB0_485 + 0x4c, 0x8b, 0x45, 0xd0, //0x00002868 movq $-48(%rbp), %r8 + 0xe9, 0xe4, 0x01, 0x00, 0x00, //0x0000286c jmp LBB0_515 + //0x00002871 LBB0_486 + 0x49, 0x89, 0x18, //0x00002871 movq %rbx, (%r8) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002874 movq $-1, %rax + 0xe9, 0x3a, 0x0c, 0x00, 0x00, //0x0000287b jmp LBB0_586 + //0x00002880 LBB0_487 + 0x49, 0x89, 0x30, //0x00002880 movq %rsi, (%r8) + //0x00002883 LBB0_488 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002883 movq $-1, %rax + 0xe9, 0x2b, 0x0c, 0x00, 0x00, //0x0000288a jmp LBB0_586 + //0x0000288f LBB0_489 + 0x4c, 0x01, 0xcb, //0x0000288f addq %r9, %rbx + 0x48, 0x89, 0xd8, //0x00002892 movq %rbx, %rax + //0x00002895 LBB0_490 + 0x4c, 0x29, 0xc8, //0x00002895 subq %r9, %rax + 0x48, 0x89, 0xc3, //0x00002898 movq %rax, %rbx + //0x0000289b LBB0_491 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000289b movq $-1, %rax + 0x49, 0x89, 0xdc, //0x000028a2 movq %rbx, %r12 + 0x48, 0x39, 0xf3, //0x000028a5 cmpq %rsi, %rbx + 0x0f, 0x83, 0x0c, 0x0c, 0x00, 0x00, //0x000028a8 jae LBB0_586 + //0x000028ae LBB0_492 + 0x49, 0x8d, 0x5c, 0x24, 0x01, //0x000028ae leaq $1(%r12), %rbx + 0x49, 0x89, 0x18, //0x000028b3 movq %rbx, (%r8) + 0x43, 0x0f, 0xbe, 0x0c, 0x21, //0x000028b6 movsbl (%r9,%r12), %ecx + 0x83, 0xf9, 0x7b, //0x000028bb cmpl $123, %ecx + 0x0f, 0x87, 0xa1, 0x01, 0x00, 0x00, //0x000028be ja LBB0_517 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000028c4 movq $-1, %rax + 0x48, 0x8d, 0x15, 0xee, 0x0e, 0x00, 0x00, //0x000028cb leaq $3822(%rip), %rdx /* LJTI0_0+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8a, //0x000028d2 movslq (%rdx,%rcx,4), %rcx + 0x48, 0x01, 0xd1, //0x000028d6 addq %rdx, %rcx + 0xff, 0xe1, //0x000028d9 jmpq *%rcx + //0x000028db LBB0_494 + 0x48, 0x8b, 0x47, 0x08, //0x000028db movq $8(%rdi), %rax + 0x48, 0x29, 0xd8, //0x000028df subq %rbx, %rax + 0x48, 0x83, 0xf8, 0x10, //0x000028e2 cmpq $16, %rax + 0x0f, 0x82, 0xfd, 0x0d, 0x00, 0x00, //0x000028e6 jb LBB0_621 + 0x31, 0xf6, //0x000028ec xorl %esi, %esi + 0xf3, 0x0f, 0x6f, 0x05, 0x0a, 0xd7, 0xff, 0xff, //0x000028ee movdqu $-10486(%rip), %xmm0 /* LCPI0_0+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0x12, 0xd7, 0xff, 0xff, //0x000028f6 movdqu $-10478(%rip), %xmm1 /* LCPI0_1+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x15, 0x1a, 0xd7, 0xff, 0xff, //0x000028fe movdqu $-10470(%rip), %xmm2 /* LCPI0_2+0(%rip) */ + 0x4c, 0x89, 0xca, //0x00002906 movq %r9, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002909 .p2align 4, 0x90 + //0x00002910 LBB0_496 + 0xf3, 0x42, 0x0f, 0x6f, 0x5c, 0x22, 0x01, //0x00002910 movdqu $1(%rdx,%r12), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00002917 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x0000291b pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xdb, 0xd9, //0x0000291f pand %xmm1, %xmm3 + 0x66, 0x0f, 0x74, 0xda, //0x00002923 pcmpeqb %xmm2, %xmm3 + 0x66, 0x0f, 0xeb, 0xdc, //0x00002927 por %xmm4, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x0000292b pmovmskb %xmm3, %ecx + 0x85, 0xc9, //0x0000292f testl %ecx, %ecx + 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, //0x00002931 jne LBB0_507 + 0x48, 0x83, 0xc2, 0x10, //0x00002937 addq $16, %rdx + 0x48, 0x8d, 0x0c, 0x30, //0x0000293b leaq (%rax,%rsi), %rcx + 0x48, 0x83, 0xc1, 0xf0, //0x0000293f addq $-16, %rcx + 0x48, 0x83, 0xc6, 0xf0, //0x00002943 addq $-16, %rsi + 0x48, 0x83, 0xf9, 0x0f, //0x00002947 cmpq $15, %rcx + 0x0f, 0x87, 0xbf, 0xff, 0xff, 0xff, //0x0000294b ja LBB0_496 + 0x4a, 0x8d, 0x1c, 0x22, //0x00002951 leaq (%rdx,%r12), %rbx + 0x48, 0x83, 0xc3, 0x01, //0x00002955 addq $1, %rbx + 0x48, 0x01, 0xf0, //0x00002959 addq %rsi, %rax + 0x48, 0x85, 0xc0, //0x0000295c testq %rax, %rax + 0x0f, 0x84, 0x48, 0x00, 0x00, 0x00, //0x0000295f je LBB0_506 + //0x00002965 LBB0_499 + 0x48, 0x8d, 0x14, 0x03, //0x00002965 leaq (%rbx,%rax), %rdx + 0x48, 0xbe, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00002969 movabsq $17596481021440, %rsi + //0x00002973 LBB0_500 + 0x0f, 0xb6, 0x0b, //0x00002973 movzbl (%rbx), %ecx + 0x48, 0x83, 0xf9, 0x2c, //0x00002976 cmpq $44, %rcx + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x0000297a ja LBB0_502 + 0x48, 0x0f, 0xa3, 0xce, //0x00002980 btq %rcx, %rsi + 0x0f, 0x82, 0x23, 0x00, 0x00, 0x00, //0x00002984 jb LBB0_506 + //0x0000298a LBB0_502 + 0x80, 0xf9, 0x5d, //0x0000298a cmpb $93, %cl + 0x0f, 0x84, 0x1a, 0x00, 0x00, 0x00, //0x0000298d je LBB0_506 + 0x80, 0xf9, 0x7d, //0x00002993 cmpb $125, %cl + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00002996 je LBB0_506 + 0x48, 0x83, 0xc3, 0x01, //0x0000299c addq $1, %rbx + 0x48, 0x83, 0xc0, 0xff, //0x000029a0 addq $-1, %rax + 0x0f, 0x85, 0xc9, 0xff, 0xff, 0xff, //0x000029a4 jne LBB0_500 + 0x48, 0x89, 0xd3, //0x000029aa movq %rdx, %rbx + //0x000029ad LBB0_506 + 0x4c, 0x29, 0xcb, //0x000029ad subq %r9, %rbx + 0x49, 0x89, 0x18, //0x000029b0 movq %rbx, (%r8) + 0x4c, 0x89, 0xe0, //0x000029b3 movq %r12, %rax + 0xe9, 0xff, 0x0a, 0x00, 0x00, //0x000029b6 jmp LBB0_586 + //0x000029bb LBB0_507 + 0x66, 0x0f, 0xbc, 0xc1, //0x000029bb bsfw %cx, %ax + 0x0f, 0xb7, 0xc8, //0x000029bf movzwl %ax, %ecx + 0x4c, 0x01, 0xe1, //0x000029c2 addq %r12, %rcx + 0x48, 0x89, 0xc8, //0x000029c5 movq %rcx, %rax + 0x48, 0x29, 0xf0, //0x000029c8 subq %rsi, %rax + 0x48, 0x8d, 0x70, 0x01, //0x000029cb leaq $1(%rax), %rsi + 0x49, 0x89, 0x30, //0x000029cf movq %rsi, (%r8) + 0x48, 0x85, 0xf6, //0x000029d2 testq %rsi, %rsi + 0x0f, 0x8e, 0x45, 0x00, 0x00, 0x00, //0x000029d5 jle LBB0_512 + 0x48, 0x8d, 0x70, 0x02, //0x000029db leaq $2(%rax), %rsi + 0x48, 0x01, 0xca, //0x000029df addq %rcx, %rdx + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000029e2 movabsq $4294977024, %rdi + 0x90, 0x90, 0x90, 0x90, //0x000029ec .p2align 4, 0x90 + //0x000029f0 LBB0_509 + 0x0f, 0xb6, 0x0a, //0x000029f0 movzbl (%rdx), %ecx + 0x48, 0x83, 0xf9, 0x20, //0x000029f3 cmpq $32, %rcx + 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x000029f7 ja LBB0_512 + 0x48, 0x0f, 0xa3, 0xcf, //0x000029fd btq %rcx, %rdi + 0x0f, 0x83, 0x19, 0x00, 0x00, 0x00, //0x00002a01 jae LBB0_512 + 0x49, 0x89, 0x00, //0x00002a07 movq %rax, (%r8) + 0x48, 0x83, 0xc6, 0xff, //0x00002a0a addq $-1, %rsi + 0x48, 0x83, 0xc0, 0xff, //0x00002a0e addq $-1, %rax + 0x48, 0x83, 0xc2, 0xff, //0x00002a12 addq $-1, %rdx + 0x48, 0x83, 0xfe, 0x01, //0x00002a16 cmpq $1, %rsi + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x00002a1a jg LBB0_509 + //0x00002a20 LBB0_512 + 0x4c, 0x89, 0xe0, //0x00002a20 movq %r12, %rax + 0xe9, 0x92, 0x0a, 0x00, 0x00, //0x00002a23 jmp LBB0_586 + //0x00002a28 LBB0_513 + 0x49, 0x8d, 0x4c, 0x24, 0x04, //0x00002a28 leaq $4(%r12), %rcx + 0xe9, 0x96, 0x05, 0x00, 0x00, //0x00002a2d jmp LBB0_554 + //0x00002a32 LBB0_602 + 0x48, 0xc7, 0xc0, 0xf9, 0xff, 0xff, 0xff, //0x00002a32 movq $-7, %rax + 0xe9, 0x7c, 0x0a, 0x00, 0x00, //0x00002a39 jmp LBB0_586 + //0x00002a3e LBB0_217 + 0x48, 0x83, 0xc0, 0xff, //0x00002a3e addq $-1, %rax + 0xe9, 0x73, 0x0a, 0x00, 0x00, //0x00002a42 jmp LBB0_586 + //0x00002a47 LBB0_514 + 0x48, 0x83, 0xf8, 0xff, //0x00002a47 cmpq $-1, %rax + 0x48, 0x8b, 0x55, 0xc8, //0x00002a4b movq $-56(%rbp), %rdx + 0x0f, 0x85, 0x62, 0x0a, 0x00, 0x00, //0x00002a4f jne LBB0_516 + //0x00002a55 LBB0_515 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002a55 movq $-1, %rax + 0x48, 0x8b, 0x55, 0x98, //0x00002a5c movq $-104(%rbp), %rdx + 0xe9, 0x52, 0x0a, 0x00, 0x00, //0x00002a60 jmp LBB0_516 + //0x00002a65 LBB0_517 + 0x4d, 0x89, 0x20, //0x00002a65 movq %r12, (%r8) + 0xe9, 0x26, 0x0a, 0x00, 0x00, //0x00002a68 jmp LBB0_585 + //0x00002a6d LBB0_518 + 0x4c, 0x8b, 0x47, 0x08, //0x00002a6d movq $8(%rdi), %r8 + 0x4d, 0x89, 0xc6, //0x00002a71 movq %r8, %r14 + 0x49, 0x29, 0xde, //0x00002a74 subq %rbx, %r14 + 0x49, 0x83, 0xfe, 0x20, //0x00002a77 cmpq $32, %r14 + 0x0f, 0x8c, 0x82, 0x0c, 0x00, 0x00, //0x00002a7b jl LBB0_624 + 0x4f, 0x8d, 0x14, 0x21, //0x00002a81 leaq (%r9,%r12), %r10 + 0x4d, 0x29, 0xe0, //0x00002a85 subq %r12, %r8 + 0x41, 0xbf, 0x1f, 0x00, 0x00, 0x00, //0x00002a88 movl $31, %r15d + 0x45, 0x31, 0xf6, //0x00002a8e xorl %r14d, %r14d + 0xf3, 0x0f, 0x6f, 0x05, 0x97, 0xd5, 0xff, 0xff, //0x00002a91 movdqu $-10857(%rip), %xmm0 /* LCPI0_3+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0x9f, 0xd5, 0xff, 0xff, //0x00002a99 movdqu $-10849(%rip), %xmm1 /* LCPI0_4+0(%rip) */ + 0x45, 0x31, 0xdb, //0x00002aa1 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002aa4 .p2align 4, 0x90 + //0x00002ab0 LBB0_520 + 0xf3, 0x43, 0x0f, 0x6f, 0x54, 0x32, 0x01, //0x00002ab0 movdqu $1(%r10,%r14), %xmm2 + 0xf3, 0x43, 0x0f, 0x6f, 0x5c, 0x32, 0x11, //0x00002ab7 movdqu $17(%r10,%r14), %xmm3 + 0x66, 0x0f, 0x6f, 0xe2, //0x00002abe movdqa %xmm2, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x00002ac2 pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00002ac6 pmovmskb %xmm4, %ecx + 0x66, 0x0f, 0x6f, 0xe3, //0x00002aca movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0xe0, //0x00002ace pcmpeqb %xmm0, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00002ad2 pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe7, 0x10, //0x00002ad6 shlq $16, %rdi + 0x48, 0x09, 0xcf, //0x00002ada orq %rcx, %rdi + 0x66, 0x0f, 0x74, 0xd1, //0x00002add pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00002ae1 pmovmskb %xmm2, %edx + 0x66, 0x0f, 0x74, 0xd9, //0x00002ae5 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00002ae9 pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x10, //0x00002aed shlq $16, %rcx + 0x48, 0x09, 0xd1, //0x00002af1 orq %rdx, %rcx + 0x48, 0x89, 0xca, //0x00002af4 movq %rcx, %rdx + 0x4c, 0x09, 0xda, //0x00002af7 orq %r11, %rdx + 0x0f, 0x84, 0x35, 0x00, 0x00, 0x00, //0x00002afa je LBB0_522 + 0x44, 0x89, 0xda, //0x00002b00 movl %r11d, %edx + 0xf7, 0xd2, //0x00002b03 notl %edx + 0x21, 0xca, //0x00002b05 andl %ecx, %edx + 0x8d, 0x1c, 0x12, //0x00002b07 leal (%rdx,%rdx), %ebx + 0x44, 0x09, 0xdb, //0x00002b0a orl %r11d, %ebx + 0x89, 0xde, //0x00002b0d movl %ebx, %esi + 0xf7, 0xd6, //0x00002b0f notl %esi + 0x21, 0xce, //0x00002b11 andl %ecx, %esi + 0x81, 0xe6, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002b13 andl $-1431655766, %esi + 0x45, 0x31, 0xdb, //0x00002b19 xorl %r11d, %r11d + 0x01, 0xd6, //0x00002b1c addl %edx, %esi + 0x41, 0x0f, 0x92, 0xc3, //0x00002b1e setb %r11b + 0x01, 0xf6, //0x00002b22 addl %esi, %esi + 0x81, 0xf6, 0x55, 0x55, 0x55, 0x55, //0x00002b24 xorl $1431655765, %esi + 0x21, 0xde, //0x00002b2a andl %ebx, %esi + 0xf7, 0xd6, //0x00002b2c notl %esi + 0x21, 0xf7, //0x00002b2e andl %esi, %edi + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00002b30 jmp LBB0_523 + //0x00002b35 LBB0_522 + 0x45, 0x31, 0xdb, //0x00002b35 xorl %r11d, %r11d + //0x00002b38 LBB0_523 + 0x48, 0x85, 0xff, //0x00002b38 testq %rdi, %rdi + 0x0f, 0x85, 0x21, 0x09, 0x00, 0x00, //0x00002b3b jne LBB0_582 + 0x49, 0x83, 0xc6, 0x20, //0x00002b41 addq $32, %r14 + 0x4b, 0x8d, 0x0c, 0x38, //0x00002b45 leaq (%r8,%r15), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00002b49 addq $-32, %rcx + 0x49, 0x83, 0xc7, 0xe0, //0x00002b4d addq $-32, %r15 + 0x48, 0x83, 0xf9, 0x3f, //0x00002b51 cmpq $63, %rcx + 0x0f, 0x8f, 0x55, 0xff, 0xff, 0xff, //0x00002b55 jg LBB0_520 + 0x4d, 0x85, 0xdb, //0x00002b5b testq %r11, %r11 + 0x0f, 0x85, 0x07, 0x0c, 0x00, 0x00, //0x00002b5e jne LBB0_631 + 0x4b, 0x8d, 0x1c, 0x16, //0x00002b64 leaq (%r14,%r10), %rbx + 0x48, 0x83, 0xc3, 0x01, //0x00002b68 addq $1, %rbx + 0x49, 0xf7, 0xd6, //0x00002b6c notq %r14 + 0x4d, 0x01, 0xc6, //0x00002b6f addq %r8, %r14 + //0x00002b72 LBB0_527 + 0x4d, 0x85, 0xf6, //0x00002b72 testq %r14, %r14 + 0x48, 0x8b, 0x55, 0xd0, //0x00002b75 movq $-48(%rbp), %rdx + 0x0f, 0x8f, 0x6c, 0x09, 0x00, 0x00, //0x00002b79 jg LBB0_591 + 0xe9, 0x36, 0x09, 0x00, 0x00, //0x00002b7f jmp LBB0_586 + //0x00002b84 LBB0_528 + 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002b84 movabsq $6148914691236517205, %r15 + 0x48, 0x8b, 0x4f, 0x08, //0x00002b8e movq $8(%rdi), %rcx + 0x48, 0x29, 0xd9, //0x00002b92 subq %rbx, %rcx + 0x49, 0x01, 0xd9, //0x00002b95 addq %rbx, %r9 + 0x31, 0xd2, //0x00002b98 xorl %edx, %edx + 0x48, 0x89, 0x55, 0xb8, //0x00002b9a movq %rdx, $-72(%rbp) + 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0x99, 0xd4, 0xff, 0xff, //0x00002b9e movdqu $-11111(%rip), %xmm10 /* LCPI0_4+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0x81, 0xd4, 0xff, 0xff, //0x00002ba7 movdqu $-11135(%rip), %xmm1 /* LCPI0_3+0(%rip) */ + 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x00002baf pcmpeqd %xmm9, %xmm9 + 0xf3, 0x0f, 0x6f, 0x1d, 0xb4, 0xd4, 0xff, 0xff, //0x00002bb4 movdqu $-11084(%rip), %xmm3 /* LCPI0_7+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x25, 0x5c, 0xd4, 0xff, 0xff, //0x00002bbc movdqu $-11172(%rip), %xmm4 /* LCPI0_2+0(%rip) */ + 0x49, 0xbd, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00002bc4 movabsq $3689348814741910323, %r13 + 0x66, 0x45, 0x0f, 0xef, 0xc0, //0x00002bce pxor %xmm8, %xmm8 + 0x31, 0xdb, //0x00002bd3 xorl %ebx, %ebx + 0x45, 0x31, 0xf6, //0x00002bd5 xorl %r14d, %r14d + 0x45, 0x31, 0xd2, //0x00002bd8 xorl %r10d, %r10d + 0xe9, 0x56, 0x00, 0x00, 0x00, //0x00002bdb jmp LBB0_530 + //0x00002be0 LBB0_529 + 0x49, 0xc1, 0xfb, 0x3f, //0x00002be0 sarq $63, %r11 + 0x48, 0x89, 0xf9, //0x00002be4 movq %rdi, %rcx + 0x48, 0xd1, 0xe9, //0x00002be7 shrq %rcx + 0x4c, 0x21, 0xf9, //0x00002bea andq %r15, %rcx + 0x48, 0x29, 0xcf, //0x00002bed subq %rcx, %rdi + 0x48, 0x89, 0xf9, //0x00002bf0 movq %rdi, %rcx + 0x4c, 0x21, 0xe9, //0x00002bf3 andq %r13, %rcx + 0x48, 0xc1, 0xef, 0x02, //0x00002bf6 shrq $2, %rdi + 0x4c, 0x21, 0xef, //0x00002bfa andq %r13, %rdi + 0x48, 0x01, 0xcf, //0x00002bfd addq %rcx, %rdi + 0x48, 0x89, 0xf9, //0x00002c00 movq %rdi, %rcx + 0x48, 0xc1, 0xe9, 0x04, //0x00002c03 shrq $4, %rcx + 0x48, 0x01, 0xf9, //0x00002c07 addq %rdi, %rcx + 0x48, 0x21, 0xf1, //0x00002c0a andq %rsi, %rcx + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002c0d movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xca, //0x00002c17 imulq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x00002c1b shrq $56, %rcx + 0x49, 0x01, 0xce, //0x00002c1f addq %rcx, %r14 + 0x49, 0x83, 0xc1, 0x40, //0x00002c22 addq $64, %r9 + 0x48, 0x8b, 0x4d, 0xc0, //0x00002c26 movq $-64(%rbp), %rcx + 0x48, 0x83, 0xc1, 0xc0, //0x00002c2a addq $-64, %rcx + 0x4c, 0x89, 0x5d, 0xb8, //0x00002c2e movq %r11, $-72(%rbp) + 0x48, 0x8b, 0x5d, 0x88, //0x00002c32 movq $-120(%rbp), %rbx + //0x00002c36 LBB0_530 + 0x48, 0x83, 0xf9, 0x40, //0x00002c36 cmpq $64, %rcx + 0x48, 0x89, 0x4d, 0xc0, //0x00002c3a movq %rcx, $-64(%rbp) + 0x0f, 0x8c, 0x1f, 0x02, 0x00, 0x00, //0x00002c3e jl LBB0_537 + //0x00002c44 LBB0_531 + 0xf3, 0x41, 0x0f, 0x6f, 0x01, //0x00002c44 movdqu (%r9), %xmm0 + 0xf3, 0x41, 0x0f, 0x6f, 0x69, 0x10, //0x00002c49 movdqu $16(%r9), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x79, 0x20, //0x00002c4f movdqu $32(%r9), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x71, 0x30, //0x00002c55 movdqu $48(%r9), %xmm6 + 0x66, 0x0f, 0x6f, 0xd0, //0x00002c5b movdqa %xmm0, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00002c5f pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xf2, //0x00002c64 pmovmskb %xmm2, %esi + 0x66, 0x0f, 0x6f, 0xd5, //0x00002c68 movdqa %xmm5, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00002c6c pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00002c71 pmovmskb %xmm2, %edx + 0x66, 0x0f, 0x6f, 0xd7, //0x00002c75 movdqa %xmm7, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00002c79 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x00002c7e pmovmskb %xmm2, %edi + 0x66, 0x0f, 0x6f, 0xd6, //0x00002c82 movdqa %xmm6, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x00002c86 pcmpeqb %xmm10, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xc2, //0x00002c8b pmovmskb %xmm2, %r8d + 0x49, 0xc1, 0xe0, 0x30, //0x00002c90 shlq $48, %r8 + 0x48, 0xc1, 0xe7, 0x20, //0x00002c94 shlq $32, %rdi + 0x4c, 0x09, 0xc7, //0x00002c98 orq %r8, %rdi + 0x48, 0xc1, 0xe2, 0x10, //0x00002c9b shlq $16, %rdx + 0x48, 0x09, 0xfa, //0x00002c9f orq %rdi, %rdx + 0x48, 0x09, 0xd6, //0x00002ca2 orq %rdx, %rsi + 0x48, 0x89, 0xf2, //0x00002ca5 movq %rsi, %rdx + 0x48, 0x09, 0xda, //0x00002ca8 orq %rbx, %rdx + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00002cab jne LBB0_533 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00002cb1 movq $-1, %rsi + 0x31, 0xc9, //0x00002cb8 xorl %ecx, %ecx + 0x48, 0x89, 0x4d, 0x88, //0x00002cba movq %rcx, $-120(%rbp) + 0xe9, 0x3e, 0x00, 0x00, 0x00, //0x00002cbe jmp LBB0_534 + //0x00002cc3 LBB0_533 + 0x48, 0x89, 0xda, //0x00002cc3 movq %rbx, %rdx + 0x48, 0xf7, 0xd2, //0x00002cc6 notq %rdx + 0x48, 0x21, 0xf2, //0x00002cc9 andq %rsi, %rdx + 0x48, 0x8d, 0x3c, 0x12, //0x00002ccc leaq (%rdx,%rdx), %rdi + 0x48, 0x09, 0xdf, //0x00002cd0 orq %rbx, %rdi + 0x48, 0x89, 0xf9, //0x00002cd3 movq %rdi, %rcx + 0x48, 0xf7, 0xd1, //0x00002cd6 notq %rcx + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002cd9 movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xde, //0x00002ce3 andq %rbx, %rsi + 0x48, 0x21, 0xce, //0x00002ce6 andq %rcx, %rsi + 0x31, 0xc9, //0x00002ce9 xorl %ecx, %ecx + 0x48, 0x01, 0xd6, //0x00002ceb addq %rdx, %rsi + 0x0f, 0x92, 0xc1, //0x00002cee setb %cl + 0x48, 0x89, 0x4d, 0x88, //0x00002cf1 movq %rcx, $-120(%rbp) + 0x48, 0x01, 0xf6, //0x00002cf5 addq %rsi, %rsi + 0x4c, 0x31, 0xfe, //0x00002cf8 xorq %r15, %rsi + 0x48, 0x21, 0xfe, //0x00002cfb andq %rdi, %rsi + 0x48, 0xf7, 0xd6, //0x00002cfe notq %rsi + //0x00002d01 LBB0_534 + 0x66, 0x0f, 0x6f, 0xd6, //0x00002d01 movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00002d05 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00002d09 pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x30, //0x00002d0d shlq $48, %rdx + 0x66, 0x0f, 0x6f, 0xd7, //0x00002d11 movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00002d15 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x00002d19 pmovmskb %xmm2, %edi + 0x48, 0xc1, 0xe7, 0x20, //0x00002d1d shlq $32, %rdi + 0x48, 0x09, 0xd7, //0x00002d21 orq %rdx, %rdi + 0x66, 0x0f, 0x6f, 0xd5, //0x00002d24 movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00002d28 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00002d2c pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x10, //0x00002d30 shlq $16, %rdx + 0x48, 0x09, 0xfa, //0x00002d34 orq %rdi, %rdx + 0x66, 0x0f, 0x6f, 0xd0, //0x00002d37 movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00002d3b pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x00002d3f pmovmskb %xmm2, %edi + 0x48, 0x09, 0xd7, //0x00002d43 orq %rdx, %rdi + 0x48, 0x21, 0xf7, //0x00002d46 andq %rsi, %rdi + 0x66, 0x48, 0x0f, 0x6e, 0xd7, //0x00002d49 movq %rdi, %xmm2 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd1, 0x00, //0x00002d4e pclmulqdq $0, %xmm9, %xmm2 + 0x66, 0x49, 0x0f, 0x7e, 0xd3, //0x00002d55 movq %xmm2, %r11 + 0x4c, 0x33, 0x5d, 0xb8, //0x00002d5a xorq $-72(%rbp), %r11 + 0x66, 0x0f, 0x6f, 0xd0, //0x00002d5e movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00002d62 pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x00002d66 pmovmskb %xmm2, %edi + 0x66, 0x0f, 0x6f, 0xd5, //0x00002d6a movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00002d6e pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00002d72 pmovmskb %xmm2, %edx + 0x66, 0x0f, 0x6f, 0xd7, //0x00002d76 movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00002d7a pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xca, //0x00002d7e pmovmskb %xmm2, %ecx + 0x66, 0x0f, 0x6f, 0xd6, //0x00002d82 movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x00002d86 pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x00002d8a pmovmskb %xmm2, %ebx + 0x48, 0xc1, 0xe3, 0x30, //0x00002d8e shlq $48, %rbx + 0x48, 0xc1, 0xe1, 0x20, //0x00002d92 shlq $32, %rcx + 0x48, 0x09, 0xd9, //0x00002d96 orq %rbx, %rcx + 0x48, 0xc1, 0xe2, 0x10, //0x00002d99 shlq $16, %rdx + 0x48, 0x09, 0xca, //0x00002d9d orq %rcx, %rdx + 0x48, 0x09, 0xd7, //0x00002da0 orq %rdx, %rdi + 0x4c, 0x89, 0xd9, //0x00002da3 movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x00002da6 notq %rcx + 0x48, 0x21, 0xcf, //0x00002da9 andq %rcx, %rdi + 0x66, 0x0f, 0x74, 0xc4, //0x00002dac pcmpeqb %xmm4, %xmm0 + 0x66, 0x44, 0x0f, 0xd7, 0xc0, //0x00002db0 pmovmskb %xmm0, %r8d + 0x66, 0x0f, 0x74, 0xec, //0x00002db5 pcmpeqb %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002db9 pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x74, 0xfc, //0x00002dbd pcmpeqb %xmm4, %xmm7 + 0x66, 0x0f, 0xd7, 0xdf, //0x00002dc1 pmovmskb %xmm7, %ebx + 0x66, 0x0f, 0x74, 0xf4, //0x00002dc5 pcmpeqb %xmm4, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00002dc9 pmovmskb %xmm6, %r15d + 0x49, 0xc1, 0xe7, 0x30, //0x00002dce shlq $48, %r15 + 0x48, 0xc1, 0xe3, 0x20, //0x00002dd2 shlq $32, %rbx + 0x4c, 0x09, 0xfb, //0x00002dd6 orq %r15, %rbx + 0x48, 0xc1, 0xe2, 0x10, //0x00002dd9 shlq $16, %rdx + 0x48, 0x09, 0xda, //0x00002ddd orq %rbx, %rdx + 0x49, 0x09, 0xd0, //0x00002de0 orq %rdx, %r8 + 0x48, 0xbe, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00002de3 movabsq $1085102592571150095, %rsi + 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002ded movabsq $6148914691236517205, %r15 + 0x49, 0x21, 0xc8, //0x00002df7 andq %rcx, %r8 + 0x0f, 0x84, 0xe0, 0xfd, 0xff, 0xff, //0x00002dfa je LBB0_529 + //0x00002e00 .p2align 4, 0x90 + //0x00002e00 LBB0_535 + 0x49, 0x8d, 0x50, 0xff, //0x00002e00 leaq $-1(%r8), %rdx + 0x48, 0x89, 0xd1, //0x00002e04 movq %rdx, %rcx + 0x48, 0x21, 0xf9, //0x00002e07 andq %rdi, %rcx + 0x48, 0x89, 0xcb, //0x00002e0a movq %rcx, %rbx + 0x48, 0xd1, 0xeb, //0x00002e0d shrq %rbx + 0x4c, 0x21, 0xfb, //0x00002e10 andq %r15, %rbx + 0x48, 0x29, 0xd9, //0x00002e13 subq %rbx, %rcx + 0x48, 0x89, 0xcb, //0x00002e16 movq %rcx, %rbx + 0x4c, 0x21, 0xeb, //0x00002e19 andq %r13, %rbx + 0x48, 0xc1, 0xe9, 0x02, //0x00002e1c shrq $2, %rcx + 0x4c, 0x21, 0xe9, //0x00002e20 andq %r13, %rcx + 0x48, 0x01, 0xd9, //0x00002e23 addq %rbx, %rcx + 0x48, 0x89, 0xcb, //0x00002e26 movq %rcx, %rbx + 0x48, 0xc1, 0xeb, 0x04, //0x00002e29 shrq $4, %rbx + 0x48, 0x01, 0xcb, //0x00002e2d addq %rcx, %rbx + 0x48, 0x21, 0xf3, //0x00002e30 andq %rsi, %rbx + 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002e33 movabsq $72340172838076673, %rcx + 0x48, 0x0f, 0xaf, 0xd9, //0x00002e3d imulq %rcx, %rbx + 0x48, 0xc1, 0xeb, 0x38, //0x00002e41 shrq $56, %rbx + 0x4c, 0x01, 0xf3, //0x00002e45 addq %r14, %rbx + 0x4c, 0x39, 0xd3, //0x00002e48 cmpq %r10, %rbx + 0x0f, 0x86, 0xd2, 0x05, 0x00, 0x00, //0x00002e4b jbe LBB0_581 + 0x49, 0x83, 0xc2, 0x01, //0x00002e51 addq $1, %r10 + 0x49, 0x21, 0xd0, //0x00002e55 andq %rdx, %r8 + 0x0f, 0x85, 0xa2, 0xff, 0xff, 0xff, //0x00002e58 jne LBB0_535 + 0xe9, 0x7d, 0xfd, 0xff, 0xff, //0x00002e5e jmp LBB0_529 + //0x00002e63 LBB0_537 + 0x48, 0x85, 0xc9, //0x00002e63 testq %rcx, %rcx + 0x0f, 0x8e, 0xad, 0x08, 0x00, 0x00, //0x00002e66 jle LBB0_626 + 0x48, 0x89, 0xdf, //0x00002e6c movq %rbx, %rdi + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x00002e6f movdqu %xmm8, $-176(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x40, 0xff, 0xff, 0xff, //0x00002e78 movdqu %xmm8, $-192(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x30, 0xff, 0xff, 0xff, //0x00002e81 movdqu %xmm8, $-208(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x20, 0xff, 0xff, 0xff, //0x00002e8a movdqu %xmm8, $-224(%rbp) + 0x44, 0x89, 0xc9, //0x00002e93 movl %r9d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00002e96 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00002e9c cmpl $4033, %ecx + 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x00002ea2 jb LBB0_541 + 0x48, 0x83, 0x7d, 0xc0, 0x20, //0x00002ea8 cmpq $32, $-64(%rbp) + 0x0f, 0x82, 0x41, 0x00, 0x00, 0x00, //0x00002ead jb LBB0_542 + 0x41, 0x0f, 0x10, 0x01, //0x00002eb3 movups (%r9), %xmm0 + 0x0f, 0x11, 0x85, 0x20, 0xff, 0xff, 0xff, //0x00002eb7 movups %xmm0, $-224(%rbp) + 0x41, 0x0f, 0x10, 0x41, 0x10, //0x00002ebe movups $16(%r9), %xmm0 + 0x0f, 0x11, 0x85, 0x30, 0xff, 0xff, 0xff, //0x00002ec3 movups %xmm0, $-208(%rbp) + 0x49, 0x83, 0xc1, 0x20, //0x00002eca addq $32, %r9 + 0x48, 0x8b, 0x4d, 0xc0, //0x00002ece movq $-64(%rbp), %rcx + 0x48, 0x8d, 0x71, 0xe0, //0x00002ed2 leaq $-32(%rcx), %rsi + 0x48, 0x8d, 0x95, 0x40, 0xff, 0xff, 0xff, //0x00002ed6 leaq $-192(%rbp), %rdx + 0xe9, 0x1d, 0x00, 0x00, 0x00, //0x00002edd jmp LBB0_543 + //0x00002ee2 LBB0_541 + 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002ee2 movabsq $6148914691236517205, %r15 + 0x48, 0x89, 0xfb, //0x00002eec movq %rdi, %rbx + 0xe9, 0x50, 0xfd, 0xff, 0xff, //0x00002eef jmp LBB0_531 + //0x00002ef4 LBB0_542 + 0x48, 0x8d, 0x95, 0x20, 0xff, 0xff, 0xff, //0x00002ef4 leaq $-224(%rbp), %rdx + 0x48, 0x8b, 0x75, 0xc0, //0x00002efb movq $-64(%rbp), %rsi + //0x00002eff LBB0_543 + 0x48, 0x83, 0xfe, 0x10, //0x00002eff cmpq $16, %rsi + 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x00002f03 jb LBB0_544 + 0x41, 0x0f, 0x10, 0x01, //0x00002f09 movups (%r9), %xmm0 + 0x0f, 0x11, 0x02, //0x00002f0d movups %xmm0, (%rdx) + 0x49, 0x83, 0xc1, 0x10, //0x00002f10 addq $16, %r9 + 0x48, 0x83, 0xc2, 0x10, //0x00002f14 addq $16, %rdx + 0x48, 0x83, 0xc6, 0xf0, //0x00002f18 addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x08, //0x00002f1c cmpq $8, %rsi + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00002f20 jae LBB0_551 + //0x00002f26 LBB0_545 + 0x48, 0x83, 0xfe, 0x04, //0x00002f26 cmpq $4, %rsi + 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x00002f2a jl LBB0_546 + //0x00002f30 LBB0_552 + 0x41, 0x8b, 0x09, //0x00002f30 movl (%r9), %ecx + 0x89, 0x0a, //0x00002f33 movl %ecx, (%rdx) + 0x49, 0x83, 0xc1, 0x04, //0x00002f35 addq $4, %r9 + 0x48, 0x83, 0xc2, 0x04, //0x00002f39 addq $4, %rdx + 0x48, 0x83, 0xc6, 0xfc, //0x00002f3d addq $-4, %rsi + 0x48, 0x83, 0xfe, 0x02, //0x00002f41 cmpq $2, %rsi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00002f45 jae LBB0_547 + 0xe9, 0x43, 0x00, 0x00, 0x00, //0x00002f4b jmp LBB0_548 + //0x00002f50 LBB0_544 + 0x48, 0x83, 0xfe, 0x08, //0x00002f50 cmpq $8, %rsi + 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x00002f54 jb LBB0_545 + //0x00002f5a LBB0_551 + 0x49, 0x8b, 0x09, //0x00002f5a movq (%r9), %rcx + 0x48, 0x89, 0x0a, //0x00002f5d movq %rcx, (%rdx) + 0x49, 0x83, 0xc1, 0x08, //0x00002f60 addq $8, %r9 + 0x48, 0x83, 0xc2, 0x08, //0x00002f64 addq $8, %rdx + 0x48, 0x83, 0xc6, 0xf8, //0x00002f68 addq $-8, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x00002f6c cmpq $4, %rsi + 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x00002f70 jge LBB0_552 + //0x00002f76 LBB0_546 + 0x48, 0x83, 0xfe, 0x02, //0x00002f76 cmpq $2, %rsi + 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x00002f7a jb LBB0_548 + //0x00002f80 LBB0_547 + 0x41, 0x0f, 0xb7, 0x09, //0x00002f80 movzwl (%r9), %ecx + 0x66, 0x89, 0x0a, //0x00002f84 movw %cx, (%rdx) + 0x49, 0x83, 0xc1, 0x02, //0x00002f87 addq $2, %r9 + 0x48, 0x83, 0xc2, 0x02, //0x00002f8b addq $2, %rdx + 0x48, 0x83, 0xc6, 0xfe, //0x00002f8f addq $-2, %rsi + //0x00002f93 LBB0_548 + 0x4c, 0x89, 0xc9, //0x00002f93 movq %r9, %rcx + 0x4c, 0x8d, 0x8d, 0x20, 0xff, 0xff, 0xff, //0x00002f96 leaq $-224(%rbp), %r9 + 0x48, 0x85, 0xf6, //0x00002f9d testq %rsi, %rsi + 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002fa0 movabsq $6148914691236517205, %r15 + 0x48, 0x89, 0xfb, //0x00002faa movq %rdi, %rbx + 0x0f, 0x84, 0x91, 0xfc, 0xff, 0xff, //0x00002fad je LBB0_531 + 0x8a, 0x09, //0x00002fb3 movb (%rcx), %cl + 0x88, 0x0a, //0x00002fb5 movb %cl, (%rdx) + 0x4c, 0x8d, 0x8d, 0x20, 0xff, 0xff, 0xff, //0x00002fb7 leaq $-224(%rbp), %r9 + 0xe9, 0x81, 0xfc, 0xff, 0xff, //0x00002fbe jmp LBB0_531 + //0x00002fc3 LBB0_553 + 0x49, 0x8d, 0x4c, 0x24, 0x05, //0x00002fc3 leaq $5(%r12), %rcx + //0x00002fc8 LBB0_554 + 0x48, 0x3b, 0x4f, 0x08, //0x00002fc8 cmpq $8(%rdi), %rcx + 0x0f, 0x87, 0xe8, 0x04, 0x00, 0x00, //0x00002fcc ja LBB0_586 + 0x49, 0x89, 0x08, //0x00002fd2 movq %rcx, (%r8) + 0x4c, 0x89, 0xe0, //0x00002fd5 movq %r12, %rax + 0xe9, 0xdd, 0x04, 0x00, 0x00, //0x00002fd8 jmp LBB0_586 + //0x00002fdd LBB0_556 + 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002fdd movabsq $6148914691236517205, %r15 + 0x48, 0x8b, 0x4f, 0x08, //0x00002fe7 movq $8(%rdi), %rcx + 0x48, 0x29, 0xd9, //0x00002feb subq %rbx, %rcx + 0x49, 0x01, 0xd9, //0x00002fee addq %rbx, %r9 + 0x31, 0xd2, //0x00002ff1 xorl %edx, %edx + 0x48, 0x89, 0x55, 0xb8, //0x00002ff3 movq %rdx, $-72(%rbp) + 0xf3, 0x44, 0x0f, 0x6f, 0x15, 0x40, 0xd0, 0xff, 0xff, //0x00002ff7 movdqu $-12224(%rip), %xmm10 /* LCPI0_4+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0x28, 0xd0, 0xff, 0xff, //0x00003000 movdqu $-12248(%rip), %xmm1 /* LCPI0_3+0(%rip) */ + 0x66, 0x45, 0x0f, 0x76, 0xc9, //0x00003008 pcmpeqd %xmm9, %xmm9 + 0xf3, 0x0f, 0x6f, 0x1d, 0x3b, 0xd0, 0xff, 0xff, //0x0000300d movdqu $-12229(%rip), %xmm3 /* LCPI0_5+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x25, 0x43, 0xd0, 0xff, 0xff, //0x00003015 movdqu $-12221(%rip), %xmm4 /* LCPI0_6+0(%rip) */ + 0x49, 0xbd, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x0000301d movabsq $3689348814741910323, %r13 + 0x66, 0x45, 0x0f, 0xef, 0xc0, //0x00003027 pxor %xmm8, %xmm8 + 0x31, 0xdb, //0x0000302c xorl %ebx, %ebx + 0x45, 0x31, 0xf6, //0x0000302e xorl %r14d, %r14d + 0x45, 0x31, 0xd2, //0x00003031 xorl %r10d, %r10d + 0xe9, 0x56, 0x00, 0x00, 0x00, //0x00003034 jmp LBB0_558 + //0x00003039 LBB0_557 + 0x49, 0xc1, 0xfb, 0x3f, //0x00003039 sarq $63, %r11 + 0x48, 0x89, 0xf9, //0x0000303d movq %rdi, %rcx + 0x48, 0xd1, 0xe9, //0x00003040 shrq %rcx + 0x4c, 0x21, 0xf9, //0x00003043 andq %r15, %rcx + 0x48, 0x29, 0xcf, //0x00003046 subq %rcx, %rdi + 0x48, 0x89, 0xf9, //0x00003049 movq %rdi, %rcx + 0x4c, 0x21, 0xe9, //0x0000304c andq %r13, %rcx + 0x48, 0xc1, 0xef, 0x02, //0x0000304f shrq $2, %rdi + 0x4c, 0x21, 0xef, //0x00003053 andq %r13, %rdi + 0x48, 0x01, 0xcf, //0x00003056 addq %rcx, %rdi + 0x48, 0x89, 0xf9, //0x00003059 movq %rdi, %rcx + 0x48, 0xc1, 0xe9, 0x04, //0x0000305c shrq $4, %rcx + 0x48, 0x01, 0xf9, //0x00003060 addq %rdi, %rcx + 0x48, 0x21, 0xf1, //0x00003063 andq %rsi, %rcx + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00003066 movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xca, //0x00003070 imulq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x00003074 shrq $56, %rcx + 0x49, 0x01, 0xce, //0x00003078 addq %rcx, %r14 + 0x49, 0x83, 0xc1, 0x40, //0x0000307b addq $64, %r9 + 0x48, 0x8b, 0x4d, 0xc0, //0x0000307f movq $-64(%rbp), %rcx + 0x48, 0x83, 0xc1, 0xc0, //0x00003083 addq $-64, %rcx + 0x4c, 0x89, 0x5d, 0xb8, //0x00003087 movq %r11, $-72(%rbp) + 0x48, 0x8b, 0x5d, 0x88, //0x0000308b movq $-120(%rbp), %rbx + //0x0000308f LBB0_558 + 0x48, 0x83, 0xf9, 0x40, //0x0000308f cmpq $64, %rcx + 0x48, 0x89, 0x4d, 0xc0, //0x00003093 movq %rcx, $-64(%rbp) + 0x0f, 0x8c, 0x26, 0x02, 0x00, 0x00, //0x00003097 jl LBB0_565 + //0x0000309d LBB0_559 + 0xf3, 0x41, 0x0f, 0x6f, 0x01, //0x0000309d movdqu (%r9), %xmm0 + 0xf3, 0x41, 0x0f, 0x6f, 0x69, 0x10, //0x000030a2 movdqu $16(%r9), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x79, 0x20, //0x000030a8 movdqu $32(%r9), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x71, 0x30, //0x000030ae movdqu $48(%r9), %xmm6 + 0x66, 0x0f, 0x6f, 0xd0, //0x000030b4 movdqa %xmm0, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x000030b8 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xf2, //0x000030bd pmovmskb %xmm2, %esi + 0x66, 0x0f, 0x6f, 0xd5, //0x000030c1 movdqa %xmm5, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x000030c5 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x000030ca pmovmskb %xmm2, %edx + 0x66, 0x0f, 0x6f, 0xd7, //0x000030ce movdqa %xmm7, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x000030d2 pcmpeqb %xmm10, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x000030d7 pmovmskb %xmm2, %edi + 0x66, 0x0f, 0x6f, 0xd6, //0x000030db movdqa %xmm6, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xd2, //0x000030df pcmpeqb %xmm10, %xmm2 + 0x66, 0x44, 0x0f, 0xd7, 0xc2, //0x000030e4 pmovmskb %xmm2, %r8d + 0x49, 0xc1, 0xe0, 0x30, //0x000030e9 shlq $48, %r8 + 0x48, 0xc1, 0xe7, 0x20, //0x000030ed shlq $32, %rdi + 0x4c, 0x09, 0xc7, //0x000030f1 orq %r8, %rdi + 0x48, 0xc1, 0xe2, 0x10, //0x000030f4 shlq $16, %rdx + 0x48, 0x09, 0xfa, //0x000030f8 orq %rdi, %rdx + 0x48, 0x09, 0xd6, //0x000030fb orq %rdx, %rsi + 0x48, 0x89, 0xf2, //0x000030fe movq %rsi, %rdx + 0x48, 0x09, 0xda, //0x00003101 orq %rbx, %rdx + 0x0f, 0x85, 0x12, 0x00, 0x00, 0x00, //0x00003104 jne LBB0_561 + 0x48, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x0000310a movq $-1, %rsi + 0x31, 0xc9, //0x00003111 xorl %ecx, %ecx + 0x48, 0x89, 0x4d, 0x88, //0x00003113 movq %rcx, $-120(%rbp) + 0xe9, 0x3e, 0x00, 0x00, 0x00, //0x00003117 jmp LBB0_562 + //0x0000311c LBB0_561 + 0x48, 0x89, 0xda, //0x0000311c movq %rbx, %rdx + 0x48, 0xf7, 0xd2, //0x0000311f notq %rdx + 0x48, 0x21, 0xf2, //0x00003122 andq %rsi, %rdx + 0x48, 0x8d, 0x3c, 0x12, //0x00003125 leaq (%rdx,%rdx), %rdi + 0x48, 0x09, 0xdf, //0x00003129 orq %rbx, %rdi + 0x48, 0x89, 0xf9, //0x0000312c movq %rdi, %rcx + 0x48, 0xf7, 0xd1, //0x0000312f notq %rcx + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003132 movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xde, //0x0000313c andq %rbx, %rsi + 0x48, 0x21, 0xce, //0x0000313f andq %rcx, %rsi + 0x31, 0xc9, //0x00003142 xorl %ecx, %ecx + 0x48, 0x01, 0xd6, //0x00003144 addq %rdx, %rsi + 0x0f, 0x92, 0xc1, //0x00003147 setb %cl + 0x48, 0x89, 0x4d, 0x88, //0x0000314a movq %rcx, $-120(%rbp) + 0x48, 0x01, 0xf6, //0x0000314e addq %rsi, %rsi + 0x4c, 0x31, 0xfe, //0x00003151 xorq %r15, %rsi + 0x48, 0x21, 0xfe, //0x00003154 andq %rdi, %rsi + 0x48, 0xf7, 0xd6, //0x00003157 notq %rsi + //0x0000315a LBB0_562 + 0x66, 0x0f, 0x6f, 0xd6, //0x0000315a movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x0000315e pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00003162 pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x30, //0x00003166 shlq $48, %rdx + 0x66, 0x0f, 0x6f, 0xd7, //0x0000316a movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x0000316e pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x00003172 pmovmskb %xmm2, %edi + 0x48, 0xc1, 0xe7, 0x20, //0x00003176 shlq $32, %rdi + 0x48, 0x09, 0xd7, //0x0000317a orq %rdx, %rdi + 0x66, 0x0f, 0x6f, 0xd5, //0x0000317d movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00003181 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x00003185 pmovmskb %xmm2, %edx + 0x48, 0xc1, 0xe2, 0x10, //0x00003189 shlq $16, %rdx + 0x48, 0x09, 0xfa, //0x0000318d orq %rdi, %rdx + 0x66, 0x0f, 0x6f, 0xd0, //0x00003190 movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd1, //0x00003194 pcmpeqb %xmm1, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x00003198 pmovmskb %xmm2, %edi + 0x48, 0x09, 0xd7, //0x0000319c orq %rdx, %rdi + 0x48, 0x21, 0xf7, //0x0000319f andq %rsi, %rdi + 0x66, 0x48, 0x0f, 0x6e, 0xd7, //0x000031a2 movq %rdi, %xmm2 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xd1, 0x00, //0x000031a7 pclmulqdq $0, %xmm9, %xmm2 + 0x66, 0x49, 0x0f, 0x7e, 0xd3, //0x000031ae movq %xmm2, %r11 + 0x4c, 0x33, 0x5d, 0xb8, //0x000031b3 xorq $-72(%rbp), %r11 + 0x66, 0x0f, 0x6f, 0xd0, //0x000031b7 movdqa %xmm0, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x000031bb pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xfa, //0x000031bf pmovmskb %xmm2, %edi + 0x66, 0x0f, 0x6f, 0xd5, //0x000031c3 movdqa %xmm5, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x000031c7 pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xd2, //0x000031cb pmovmskb %xmm2, %edx + 0x66, 0x0f, 0x6f, 0xd7, //0x000031cf movdqa %xmm7, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x000031d3 pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xca, //0x000031d7 pmovmskb %xmm2, %ecx + 0x66, 0x0f, 0x6f, 0xd6, //0x000031db movdqa %xmm6, %xmm2 + 0x66, 0x0f, 0x74, 0xd3, //0x000031df pcmpeqb %xmm3, %xmm2 + 0x66, 0x0f, 0xd7, 0xda, //0x000031e3 pmovmskb %xmm2, %ebx + 0x48, 0xc1, 0xe3, 0x30, //0x000031e7 shlq $48, %rbx + 0x48, 0xc1, 0xe1, 0x20, //0x000031eb shlq $32, %rcx + 0x48, 0x09, 0xd9, //0x000031ef orq %rbx, %rcx + 0x48, 0xc1, 0xe2, 0x10, //0x000031f2 shlq $16, %rdx + 0x48, 0x09, 0xca, //0x000031f6 orq %rcx, %rdx + 0x48, 0x09, 0xd7, //0x000031f9 orq %rdx, %rdi + 0x4c, 0x89, 0xd9, //0x000031fc movq %r11, %rcx + 0x48, 0xf7, 0xd1, //0x000031ff notq %rcx + 0x48, 0x21, 0xcf, //0x00003202 andq %rcx, %rdi + 0x66, 0x0f, 0x74, 0xc4, //0x00003205 pcmpeqb %xmm4, %xmm0 + 0x66, 0x44, 0x0f, 0xd7, 0xc0, //0x00003209 pmovmskb %xmm0, %r8d + 0x66, 0x0f, 0x74, 0xec, //0x0000320e pcmpeqb %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00003212 pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x74, 0xfc, //0x00003216 pcmpeqb %xmm4, %xmm7 + 0x66, 0x0f, 0xd7, 0xdf, //0x0000321a pmovmskb %xmm7, %ebx + 0x66, 0x0f, 0x74, 0xf4, //0x0000321e pcmpeqb %xmm4, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00003222 pmovmskb %xmm6, %r15d + 0x49, 0xc1, 0xe7, 0x30, //0x00003227 shlq $48, %r15 + 0x48, 0xc1, 0xe3, 0x20, //0x0000322b shlq $32, %rbx + 0x4c, 0x09, 0xfb, //0x0000322f orq %r15, %rbx + 0x48, 0xc1, 0xe2, 0x10, //0x00003232 shlq $16, %rdx + 0x48, 0x09, 0xda, //0x00003236 orq %rbx, %rdx + 0x49, 0x09, 0xd0, //0x00003239 orq %rdx, %r8 + 0x48, 0xbe, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000323c movabsq $1085102592571150095, %rsi + 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00003246 movabsq $6148914691236517205, %r15 + 0x49, 0x21, 0xc8, //0x00003250 andq %rcx, %r8 + 0x0f, 0x84, 0xe0, 0xfd, 0xff, 0xff, //0x00003253 je LBB0_557 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003259 .p2align 4, 0x90 + //0x00003260 LBB0_563 + 0x49, 0x8d, 0x50, 0xff, //0x00003260 leaq $-1(%r8), %rdx + 0x48, 0x89, 0xd1, //0x00003264 movq %rdx, %rcx + 0x48, 0x21, 0xf9, //0x00003267 andq %rdi, %rcx + 0x48, 0x89, 0xcb, //0x0000326a movq %rcx, %rbx + 0x48, 0xd1, 0xeb, //0x0000326d shrq %rbx + 0x4c, 0x21, 0xfb, //0x00003270 andq %r15, %rbx + 0x48, 0x29, 0xd9, //0x00003273 subq %rbx, %rcx + 0x48, 0x89, 0xcb, //0x00003276 movq %rcx, %rbx + 0x4c, 0x21, 0xeb, //0x00003279 andq %r13, %rbx + 0x48, 0xc1, 0xe9, 0x02, //0x0000327c shrq $2, %rcx + 0x4c, 0x21, 0xe9, //0x00003280 andq %r13, %rcx + 0x48, 0x01, 0xd9, //0x00003283 addq %rbx, %rcx + 0x48, 0x89, 0xcb, //0x00003286 movq %rcx, %rbx + 0x48, 0xc1, 0xeb, 0x04, //0x00003289 shrq $4, %rbx + 0x48, 0x01, 0xcb, //0x0000328d addq %rcx, %rbx + 0x48, 0x21, 0xf3, //0x00003290 andq %rsi, %rbx + 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00003293 movabsq $72340172838076673, %rcx + 0x48, 0x0f, 0xaf, 0xd9, //0x0000329d imulq %rcx, %rbx + 0x48, 0xc1, 0xeb, 0x38, //0x000032a1 shrq $56, %rbx + 0x4c, 0x01, 0xf3, //0x000032a5 addq %r14, %rbx + 0x4c, 0x39, 0xd3, //0x000032a8 cmpq %r10, %rbx + 0x0f, 0x86, 0x72, 0x01, 0x00, 0x00, //0x000032ab jbe LBB0_581 + 0x49, 0x83, 0xc2, 0x01, //0x000032b1 addq $1, %r10 + 0x49, 0x21, 0xd0, //0x000032b5 andq %rdx, %r8 + 0x0f, 0x85, 0xa2, 0xff, 0xff, 0xff, //0x000032b8 jne LBB0_563 + 0xe9, 0x76, 0xfd, 0xff, 0xff, //0x000032be jmp LBB0_557 + //0x000032c3 LBB0_565 + 0x48, 0x85, 0xc9, //0x000032c3 testq %rcx, %rcx + 0x0f, 0x8e, 0x4d, 0x04, 0x00, 0x00, //0x000032c6 jle LBB0_626 + 0x48, 0x89, 0xdf, //0x000032cc movq %rbx, %rdi + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x50, 0xff, 0xff, 0xff, //0x000032cf movdqu %xmm8, $-176(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x40, 0xff, 0xff, 0xff, //0x000032d8 movdqu %xmm8, $-192(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x30, 0xff, 0xff, 0xff, //0x000032e1 movdqu %xmm8, $-208(%rbp) + 0xf3, 0x44, 0x0f, 0x7f, 0x85, 0x20, 0xff, 0xff, 0xff, //0x000032ea movdqu %xmm8, $-224(%rbp) + 0x44, 0x89, 0xc9, //0x000032f3 movl %r9d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x000032f6 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x000032fc cmpl $4033, %ecx + 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x00003302 jb LBB0_569 + 0x48, 0x83, 0x7d, 0xc0, 0x20, //0x00003308 cmpq $32, $-64(%rbp) + 0x0f, 0x82, 0x41, 0x00, 0x00, 0x00, //0x0000330d jb LBB0_570 + 0x41, 0x0f, 0x10, 0x01, //0x00003313 movups (%r9), %xmm0 + 0x0f, 0x11, 0x85, 0x20, 0xff, 0xff, 0xff, //0x00003317 movups %xmm0, $-224(%rbp) + 0x41, 0x0f, 0x10, 0x41, 0x10, //0x0000331e movups $16(%r9), %xmm0 + 0x0f, 0x11, 0x85, 0x30, 0xff, 0xff, 0xff, //0x00003323 movups %xmm0, $-208(%rbp) + 0x49, 0x83, 0xc1, 0x20, //0x0000332a addq $32, %r9 + 0x48, 0x8b, 0x4d, 0xc0, //0x0000332e movq $-64(%rbp), %rcx + 0x48, 0x8d, 0x71, 0xe0, //0x00003332 leaq $-32(%rcx), %rsi + 0x48, 0x8d, 0x95, 0x40, 0xff, 0xff, 0xff, //0x00003336 leaq $-192(%rbp), %rdx + 0xe9, 0x1d, 0x00, 0x00, 0x00, //0x0000333d jmp LBB0_571 + //0x00003342 LBB0_569 + 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00003342 movabsq $6148914691236517205, %r15 + 0x48, 0x89, 0xfb, //0x0000334c movq %rdi, %rbx + 0xe9, 0x49, 0xfd, 0xff, 0xff, //0x0000334f jmp LBB0_559 + //0x00003354 LBB0_570 + 0x48, 0x8d, 0x95, 0x20, 0xff, 0xff, 0xff, //0x00003354 leaq $-224(%rbp), %rdx + 0x48, 0x8b, 0x75, 0xc0, //0x0000335b movq $-64(%rbp), %rsi + //0x0000335f LBB0_571 + 0x48, 0x83, 0xfe, 0x10, //0x0000335f cmpq $16, %rsi + 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x00003363 jb LBB0_572 + 0x41, 0x0f, 0x10, 0x01, //0x00003369 movups (%r9), %xmm0 + 0x0f, 0x11, 0x02, //0x0000336d movups %xmm0, (%rdx) + 0x49, 0x83, 0xc1, 0x10, //0x00003370 addq $16, %r9 + 0x48, 0x83, 0xc2, 0x10, //0x00003374 addq $16, %rdx + 0x48, 0x83, 0xc6, 0xf0, //0x00003378 addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x08, //0x0000337c cmpq $8, %rsi + 0x0f, 0x83, 0x34, 0x00, 0x00, 0x00, //0x00003380 jae LBB0_579 + //0x00003386 LBB0_573 + 0x48, 0x83, 0xfe, 0x04, //0x00003386 cmpq $4, %rsi + 0x0f, 0x8c, 0x46, 0x00, 0x00, 0x00, //0x0000338a jl LBB0_574 + //0x00003390 LBB0_580 + 0x41, 0x8b, 0x09, //0x00003390 movl (%r9), %ecx + 0x89, 0x0a, //0x00003393 movl %ecx, (%rdx) + 0x49, 0x83, 0xc1, 0x04, //0x00003395 addq $4, %r9 + 0x48, 0x83, 0xc2, 0x04, //0x00003399 addq $4, %rdx + 0x48, 0x83, 0xc6, 0xfc, //0x0000339d addq $-4, %rsi + 0x48, 0x83, 0xfe, 0x02, //0x000033a1 cmpq $2, %rsi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x000033a5 jae LBB0_575 + 0xe9, 0x43, 0x00, 0x00, 0x00, //0x000033ab jmp LBB0_576 + //0x000033b0 LBB0_572 + 0x48, 0x83, 0xfe, 0x08, //0x000033b0 cmpq $8, %rsi + 0x0f, 0x82, 0xcc, 0xff, 0xff, 0xff, //0x000033b4 jb LBB0_573 + //0x000033ba LBB0_579 + 0x49, 0x8b, 0x09, //0x000033ba movq (%r9), %rcx + 0x48, 0x89, 0x0a, //0x000033bd movq %rcx, (%rdx) + 0x49, 0x83, 0xc1, 0x08, //0x000033c0 addq $8, %r9 + 0x48, 0x83, 0xc2, 0x08, //0x000033c4 addq $8, %rdx + 0x48, 0x83, 0xc6, 0xf8, //0x000033c8 addq $-8, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x000033cc cmpq $4, %rsi + 0x0f, 0x8d, 0xba, 0xff, 0xff, 0xff, //0x000033d0 jge LBB0_580 + //0x000033d6 LBB0_574 + 0x48, 0x83, 0xfe, 0x02, //0x000033d6 cmpq $2, %rsi + 0x0f, 0x82, 0x13, 0x00, 0x00, 0x00, //0x000033da jb LBB0_576 + //0x000033e0 LBB0_575 + 0x41, 0x0f, 0xb7, 0x09, //0x000033e0 movzwl (%r9), %ecx + 0x66, 0x89, 0x0a, //0x000033e4 movw %cx, (%rdx) + 0x49, 0x83, 0xc1, 0x02, //0x000033e7 addq $2, %r9 + 0x48, 0x83, 0xc2, 0x02, //0x000033eb addq $2, %rdx + 0x48, 0x83, 0xc6, 0xfe, //0x000033ef addq $-2, %rsi + //0x000033f3 LBB0_576 + 0x4c, 0x89, 0xc9, //0x000033f3 movq %r9, %rcx + 0x4c, 0x8d, 0x8d, 0x20, 0xff, 0xff, 0xff, //0x000033f6 leaq $-224(%rbp), %r9 + 0x48, 0x85, 0xf6, //0x000033fd testq %rsi, %rsi + 0x49, 0xbf, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00003400 movabsq $6148914691236517205, %r15 + 0x48, 0x89, 0xfb, //0x0000340a movq %rdi, %rbx + 0x0f, 0x84, 0x8a, 0xfc, 0xff, 0xff, //0x0000340d je LBB0_559 + 0x8a, 0x09, //0x00003413 movb (%rcx), %cl + 0x88, 0x0a, //0x00003415 movb %cl, (%rdx) + 0x4c, 0x8d, 0x8d, 0x20, 0xff, 0xff, 0xff, //0x00003417 leaq $-224(%rbp), %r9 + 0xe9, 0x7a, 0xfc, 0xff, 0xff, //0x0000341e jmp LBB0_559 + //0x00003423 LBB0_581 + 0x48, 0x8b, 0x75, 0xb0, //0x00003423 movq $-80(%rbp), %rsi + 0x48, 0x8b, 0x46, 0x08, //0x00003427 movq $8(%rsi), %rax + 0x49, 0x0f, 0xbc, 0xc8, //0x0000342b bsfq %r8, %rcx + 0x48, 0x2b, 0x4d, 0xc0, //0x0000342f subq $-64(%rbp), %rcx + 0x48, 0x01, 0xc8, //0x00003433 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003436 addq $1, %rax + 0x48, 0x8b, 0x55, 0xd0, //0x0000343a movq $-48(%rbp), %rdx + 0x48, 0x89, 0x02, //0x0000343e movq %rax, (%rdx) + 0x48, 0x8b, 0x4e, 0x08, //0x00003441 movq $8(%rsi), %rcx + 0x48, 0x39, 0xc8, //0x00003445 cmpq %rcx, %rax + 0x48, 0x0f, 0x47, 0xc1, //0x00003448 cmovaq %rcx, %rax + 0x48, 0x89, 0x02, //0x0000344c movq %rax, (%rdx) + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000344f movq $-1, %rax + 0x4c, 0x0f, 0x47, 0xe0, //0x00003456 cmovaq %rax, %r12 + 0x4c, 0x89, 0xe0, //0x0000345a movq %r12, %rax + 0xe9, 0x58, 0x00, 0x00, 0x00, //0x0000345d jmp LBB0_586 + //0x00003462 LBB0_582 + 0x0f, 0xbc, 0xc7, //0x00003462 bsfl %edi, %eax + 0x4c, 0x01, 0xe0, //0x00003465 addq %r12, %rax + 0x4c, 0x01, 0xf0, //0x00003468 addq %r14, %rax + 0x48, 0x83, 0xc0, 0x02, //0x0000346b addq $2, %rax + 0x48, 0x8b, 0x4d, 0xd0, //0x0000346f movq $-48(%rbp), %rcx + 0x48, 0x89, 0x01, //0x00003473 movq %rax, (%rcx) + 0x4c, 0x89, 0xe0, //0x00003476 movq %r12, %rax + 0xe9, 0x3c, 0x00, 0x00, 0x00, //0x00003479 jmp LBB0_586 + //0x0000347e LBB0_583 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x0000347e movq $-1, %r13 + //0x00003485 LBB0_584 + 0x4c, 0x29, 0xef, //0x00003485 subq %r13, %rdi + 0x48, 0x83, 0xc7, 0xfe, //0x00003488 addq $-2, %rdi + 0x48, 0x8b, 0x45, 0xd0, //0x0000348c movq $-48(%rbp), %rax + 0x48, 0x89, 0x38, //0x00003490 movq %rdi, (%rax) + //0x00003493 LBB0_585 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003493 movq $-2, %rax + 0xe9, 0x1b, 0x00, 0x00, 0x00, //0x0000349a jmp LBB0_586 + //0x0000349f LBB0_587 + 0x48, 0x83, 0xf8, 0xff, //0x0000349f cmpq $-1, %rax + 0x48, 0x8b, 0x55, 0xc8, //0x000034a3 movq $-56(%rbp), %rdx + 0x0f, 0x85, 0x0a, 0x00, 0x00, 0x00, //0x000034a7 jne LBB0_516 + //0x000034ad LBB0_588 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000034ad movq $-1, %rax + 0x4c, 0x89, 0xea, //0x000034b4 movq %r13, %rdx + //0x000034b7 LBB0_516 + 0x49, 0x89, 0x10, //0x000034b7 movq %rdx, (%r8) + //0x000034ba LBB0_586 + 0x48, 0x81, 0xc4, 0xb8, 0x00, 0x00, 0x00, //0x000034ba addq $184, %rsp + 0x5b, //0x000034c1 popq %rbx + 0x41, 0x5c, //0x000034c2 popq %r12 + 0x41, 0x5d, //0x000034c4 popq %r13 + 0x41, 0x5e, //0x000034c6 popq %r14 + 0x41, 0x5f, //0x000034c8 popq %r15 + 0x5d, //0x000034ca popq %rbp + 0xc3, //0x000034cb retq + //0x000034cc LBB0_589 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000034cc movq $-2, %rcx + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x000034d3 movl $2, %eax + 0x48, 0x01, 0xc3, //0x000034d8 addq %rax, %rbx + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000034db movq $-1, %rax + 0x49, 0x01, 0xce, //0x000034e2 addq %rcx, %r14 + 0x0f, 0x8e, 0xcf, 0xff, 0xff, 0xff, //0x000034e5 jle LBB0_586 + //0x000034eb LBB0_591 + 0x0f, 0xb6, 0x03, //0x000034eb movzbl (%rbx), %eax + 0x3c, 0x5c, //0x000034ee cmpb $92, %al + 0x0f, 0x84, 0xd6, 0xff, 0xff, 0xff, //0x000034f0 je LBB0_589 + 0x3c, 0x22, //0x000034f6 cmpb $34, %al + 0x0f, 0x84, 0xbb, 0x01, 0x00, 0x00, //0x000034f8 je LBB0_618 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000034fe movq $-1, %rcx + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00003505 movl $1, %eax + 0x48, 0x01, 0xc3, //0x0000350a addq %rax, %rbx + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000350d movq $-1, %rax + 0x49, 0x01, 0xce, //0x00003514 addq %rcx, %r14 + 0x0f, 0x8f, 0xce, 0xff, 0xff, 0xff, //0x00003517 jg LBB0_591 + 0xe9, 0x98, 0xff, 0xff, 0xff, //0x0000351d jmp LBB0_586 + //0x00003522 LBB0_594 + 0x48, 0x8b, 0x55, 0xc8, //0x00003522 movq $-56(%rbp), %rdx + 0x48, 0x83, 0xfa, 0xff, //0x00003526 cmpq $-1, %rdx + 0x0f, 0x85, 0x07, 0x00, 0x00, 0x00, //0x0000352a jne LBB0_597 + 0x48, 0x0f, 0xbc, 0xd7, //0x00003530 bsfq %rdi, %rdx + //0x00003534 LBB0_596 + 0x48, 0x01, 0xc2, //0x00003534 addq %rax, %rdx + //0x00003537 LBB0_597 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003537 movq $-2, %rax + 0x4c, 0x8b, 0x45, 0xd0, //0x0000353e movq $-48(%rbp), %r8 + 0x49, 0x89, 0x10, //0x00003542 movq %rdx, (%r8) + 0xe9, 0x70, 0xff, 0xff, 0xff, //0x00003545 jmp LBB0_586 + //0x0000354a LBB0_173 + 0x48, 0x8b, 0x7d, 0xa0, //0x0000354a movq $-96(%rbp), %rdi + 0xe9, 0x32, 0xff, 0xff, 0xff, //0x0000354e jmp LBB0_584 + //0x00003553 LBB0_598 + 0x48, 0x8b, 0x55, 0xc8, //0x00003553 movq $-56(%rbp), %rdx + 0x48, 0x83, 0xfa, 0xff, //0x00003557 cmpq $-1, %rdx + 0x0f, 0x84, 0x2b, 0x01, 0x00, 0x00, //0x0000355b je LBB0_614 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003561 movq $-2, %rax + 0x49, 0x89, 0x10, //0x00003568 movq %rdx, (%r8) + 0xe9, 0x4a, 0xff, 0xff, 0xff, //0x0000356b jmp LBB0_586 + //0x00003570 LBB0_600 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003570 movq $-1, %r14 + //0x00003577 LBB0_601 + 0x49, 0xf7, 0xd6, //0x00003577 notq %r14 + 0x4c, 0x01, 0xf0, //0x0000357a addq %r14, %rax + 0x48, 0x8b, 0x4d, 0xd0, //0x0000357d movq $-48(%rbp), %rcx + 0x48, 0x89, 0x01, //0x00003581 movq %rax, (%rcx) + 0xe9, 0x0a, 0xff, 0xff, 0xff, //0x00003584 jmp LBB0_585 + //0x00003589 LBB0_604 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003589 movq $-2, %rax + 0x80, 0xfa, 0x61, //0x00003590 cmpb $97, %dl + 0x0f, 0x85, 0x21, 0xff, 0xff, 0xff, //0x00003593 jne LBB0_586 + 0x48, 0x8d, 0x51, 0x01, //0x00003599 leaq $1(%rcx), %rdx + 0x49, 0x89, 0x10, //0x0000359d movq %rdx, (%r8) + 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x000035a0 cmpb $108, $1(%r12,%rcx) + 0x0f, 0x85, 0x0e, 0xff, 0xff, 0xff, //0x000035a6 jne LBB0_586 + 0x48, 0x8d, 0x51, 0x02, //0x000035ac leaq $2(%rcx), %rdx + 0x49, 0x89, 0x10, //0x000035b0 movq %rdx, (%r8) + 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x73, //0x000035b3 cmpb $115, $2(%r12,%rcx) + 0x0f, 0x85, 0xfb, 0xfe, 0xff, 0xff, //0x000035b9 jne LBB0_586 + 0x48, 0x8d, 0x51, 0x03, //0x000035bf leaq $3(%rcx), %rdx + 0x49, 0x89, 0x10, //0x000035c3 movq %rdx, (%r8) + 0x41, 0x80, 0x7c, 0x0c, 0x03, 0x65, //0x000035c6 cmpb $101, $3(%r12,%rcx) + 0x0f, 0x85, 0xe8, 0xfe, 0xff, 0xff, //0x000035cc jne LBB0_586 + 0x48, 0x83, 0xc1, 0x04, //0x000035d2 addq $4, %rcx + 0x49, 0x89, 0x08, //0x000035d6 movq %rcx, (%r8) + 0xe9, 0xdc, 0xfe, 0xff, 0xff, //0x000035d9 jmp LBB0_586 + //0x000035de LBB0_293 + 0x49, 0x89, 0x00, //0x000035de movq %rax, (%r8) + 0x41, 0x80, 0x3c, 0x04, 0x6e, //0x000035e1 cmpb $110, (%r12,%rax) + 0x0f, 0x85, 0xa7, 0xfe, 0xff, 0xff, //0x000035e6 jne LBB0_585 + 0x49, 0x89, 0x08, //0x000035ec movq %rcx, (%r8) + 0x41, 0x80, 0x3c, 0x0c, 0x75, //0x000035ef cmpb $117, (%r12,%rcx) + 0x0f, 0x85, 0x99, 0xfe, 0xff, 0xff, //0x000035f4 jne LBB0_585 + 0x48, 0x8d, 0x41, 0x01, //0x000035fa leaq $1(%rcx), %rax + 0x49, 0x89, 0x00, //0x000035fe movq %rax, (%r8) + 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x00003601 cmpb $108, $1(%r12,%rcx) + 0x0f, 0x85, 0x86, 0xfe, 0xff, 0xff, //0x00003607 jne LBB0_585 + 0x48, 0x8d, 0x41, 0x02, //0x0000360d leaq $2(%rcx), %rax + 0x49, 0x89, 0x00, //0x00003611 movq %rax, (%r8) + 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x6c, //0x00003614 cmpb $108, $2(%r12,%rcx) + 0x0f, 0x85, 0x73, 0xfe, 0xff, 0xff, //0x0000361a jne LBB0_585 + 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00003620 jmp LBB0_613 + //0x00003625 LBB0_609 + 0x49, 0x89, 0x00, //0x00003625 movq %rax, (%r8) + 0x41, 0x80, 0x3c, 0x04, 0x74, //0x00003628 cmpb $116, (%r12,%rax) + 0x0f, 0x85, 0x60, 0xfe, 0xff, 0xff, //0x0000362d jne LBB0_585 + 0x49, 0x89, 0x08, //0x00003633 movq %rcx, (%r8) + 0x41, 0x80, 0x3c, 0x0c, 0x72, //0x00003636 cmpb $114, (%r12,%rcx) + 0x0f, 0x85, 0x52, 0xfe, 0xff, 0xff, //0x0000363b jne LBB0_585 + 0x48, 0x8d, 0x41, 0x01, //0x00003641 leaq $1(%rcx), %rax + 0x49, 0x89, 0x00, //0x00003645 movq %rax, (%r8) + 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x75, //0x00003648 cmpb $117, $1(%r12,%rcx) + 0x0f, 0x85, 0x3f, 0xfe, 0xff, 0xff, //0x0000364e jne LBB0_585 + 0x48, 0x8d, 0x41, 0x02, //0x00003654 leaq $2(%rcx), %rax + 0x49, 0x89, 0x00, //0x00003658 movq %rax, (%r8) + 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x65, //0x0000365b cmpb $101, $2(%r12,%rcx) + 0x0f, 0x85, 0x2c, 0xfe, 0xff, 0xff, //0x00003661 jne LBB0_585 + //0x00003667 LBB0_613 + 0x48, 0x83, 0xc1, 0x03, //0x00003667 addq $3, %rcx + 0x49, 0x89, 0x08, //0x0000366b movq %rcx, (%r8) + 0xe9, 0x20, 0xfe, 0xff, 0xff, //0x0000366e jmp LBB0_585 + //0x00003673 LBB0_348 + 0x48, 0x8b, 0x45, 0xa0, //0x00003673 movq $-96(%rbp), %rax + 0x48, 0x83, 0xc0, 0xff, //0x00003677 addq $-1, %rax + 0xe9, 0x3a, 0xfe, 0xff, 0xff, //0x0000367b jmp LBB0_586 + //0x00003680 LBB0_290 + 0x48, 0x83, 0xc1, 0xff, //0x00003680 addq $-1, %rcx + 0x48, 0x89, 0xc8, //0x00003684 movq %rcx, %rax + 0xe9, 0x2e, 0xfe, 0xff, 0xff, //0x00003687 jmp LBB0_586 + //0x0000368c LBB0_614 + 0x48, 0x0f, 0xbc, 0xd6, //0x0000368c bsfq %rsi, %rdx + //0x00003690 LBB0_615 + 0x48, 0x01, 0xc2, //0x00003690 addq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003693 movq $-2, %rax + 0x49, 0x89, 0x10, //0x0000369a movq %rdx, (%r8) + 0xe9, 0x18, 0xfe, 0xff, 0xff, //0x0000369d jmp LBB0_586 + //0x000036a2 LBB0_616 + 0x48, 0x8b, 0x55, 0xc8, //0x000036a2 movq $-56(%rbp), %rdx + 0x48, 0x83, 0xfa, 0xff, //0x000036a6 cmpq $-1, %rdx + 0x0f, 0x85, 0x87, 0xfe, 0xff, 0xff, //0x000036aa jne LBB0_597 + 0x48, 0x0f, 0xbc, 0xd6, //0x000036b0 bsfq %rsi, %rdx + 0xe9, 0x7b, 0xfe, 0xff, 0xff, //0x000036b4 jmp LBB0_596 + //0x000036b9 LBB0_618 + 0x4c, 0x29, 0xcb, //0x000036b9 subq %r9, %rbx + 0x48, 0x83, 0xc3, 0x01, //0x000036bc addq $1, %rbx + 0x48, 0x89, 0x1a, //0x000036c0 movq %rbx, (%rdx) + 0x4c, 0x89, 0xe0, //0x000036c3 movq %r12, %rax + 0xe9, 0xef, 0xfd, 0xff, 0xff, //0x000036c6 jmp LBB0_586 + //0x000036cb LBB0_619 + 0x48, 0x89, 0x4d, 0x98, //0x000036cb movq %rcx, $-104(%rbp) + 0xe9, 0x81, 0xf3, 0xff, 0xff, //0x000036cf jmp LBB0_515 + //0x000036d4 LBB0_622 + 0x49, 0x89, 0xc5, //0x000036d4 movq %rax, %r13 + 0xe9, 0xd1, 0xfd, 0xff, 0xff, //0x000036d7 jmp LBB0_588 + //0x000036dc LBB0_620 + 0x48, 0x8b, 0x45, 0xa0, //0x000036dc movq $-96(%rbp), %rax + 0x48, 0x89, 0x45, 0x98, //0x000036e0 movq %rax, $-104(%rbp) + 0xe9, 0x6c, 0xf3, 0xff, 0xff, //0x000036e4 jmp LBB0_515 + //0x000036e9 LBB0_621 + 0x4c, 0x01, 0xcb, //0x000036e9 addq %r9, %rbx + 0x48, 0x85, 0xc0, //0x000036ec testq %rax, %rax + 0x0f, 0x85, 0x70, 0xf2, 0xff, 0xff, //0x000036ef jne LBB0_499 + 0xe9, 0xb3, 0xf2, 0xff, 0xff, //0x000036f5 jmp LBB0_506 + //0x000036fa LBB0_384 + 0x4c, 0x8b, 0x6d, 0x98, //0x000036fa movq $-104(%rbp), %r13 + 0xe9, 0xaa, 0xfd, 0xff, 0xff, //0x000036fe jmp LBB0_588 + //0x00003703 LBB0_624 + 0x4c, 0x01, 0xcb, //0x00003703 addq %r9, %rbx + 0xe9, 0x67, 0xf4, 0xff, 0xff, //0x00003706 jmp LBB0_527 + //0x0000370b LBB0_625 + 0x4c, 0x29, 0xe0, //0x0000370b subq %r12, %rax + 0x48, 0x01, 0xd0, //0x0000370e addq %rdx, %rax + 0x48, 0x89, 0xc2, //0x00003711 movq %rax, %rdx + 0xe9, 0x1e, 0xfe, 0xff, 0xff, //0x00003714 jmp LBB0_597 + //0x00003719 LBB0_626 + 0x48, 0x8b, 0x4d, 0xb0, //0x00003719 movq $-80(%rbp), %rcx + 0x48, 0x8b, 0x49, 0x08, //0x0000371d movq $8(%rcx), %rcx + 0x48, 0x8b, 0x55, 0xd0, //0x00003721 movq $-48(%rbp), %rdx + 0x48, 0x89, 0x0a, //0x00003725 movq %rcx, (%rdx) + 0xe9, 0x8d, 0xfd, 0xff, 0xff, //0x00003728 jmp LBB0_586 + //0x0000372d LBB0_627 + 0x4c, 0x29, 0xe0, //0x0000372d subq %r12, %rax + 0x48, 0x01, 0xc8, //0x00003730 addq %rcx, %rax + 0xe9, 0x21, 0x00, 0x00, 0x00, //0x00003733 jmp LBB0_630 + //0x00003738 LBB0_628 + 0x4c, 0x29, 0xe0, //0x00003738 subq %r12, %rax + 0x48, 0x89, 0xc2, //0x0000373b movq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x0000373e movq $-2, %rax + 0x49, 0x89, 0x10, //0x00003745 movq %rdx, (%r8) + 0xe9, 0x6d, 0xfd, 0xff, 0xff, //0x00003748 jmp LBB0_586 + //0x0000374d LBB0_639 + 0x4c, 0x8b, 0x45, 0xd0, //0x0000374d movq $-48(%rbp), %r8 + 0xe9, 0x57, 0xfd, 0xff, 0xff, //0x00003751 jmp LBB0_588 + //0x00003756 LBB0_629 + 0x4c, 0x29, 0xe0, //0x00003756 subq %r12, %rax + //0x00003759 LBB0_630 + 0x48, 0x89, 0xc2, //0x00003759 movq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x0000375c movq $-2, %rax + 0x49, 0x89, 0x10, //0x00003763 movq %rdx, (%r8) + 0xe9, 0x4f, 0xfd, 0xff, 0xff, //0x00003766 jmp LBB0_586 + //0x0000376b LBB0_631 + 0x49, 0x8d, 0x48, 0xff, //0x0000376b leaq $-1(%r8), %rcx + 0x4c, 0x39, 0xf1, //0x0000376f cmpq %r14, %rcx + 0x0f, 0x84, 0x42, 0xfd, 0xff, 0xff, //0x00003772 je LBB0_586 + 0x4b, 0x8d, 0x1c, 0x16, //0x00003778 leaq (%r14,%r10), %rbx + 0x48, 0x83, 0xc3, 0x02, //0x0000377c addq $2, %rbx + 0x4d, 0x29, 0xf0, //0x00003780 subq %r14, %r8 + 0x49, 0x83, 0xc0, 0xfe, //0x00003783 addq $-2, %r8 + 0x4d, 0x89, 0xc6, //0x00003787 movq %r8, %r14 + 0xe9, 0xe3, 0xf3, 0xff, 0xff, //0x0000378a jmp LBB0_527 + //0x0000378f LBB0_633 + 0x4c, 0x29, 0xe0, //0x0000378f subq %r12, %rax + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00003792 jmp LBB0_635 + //0x00003797 LBB0_634 + 0x48, 0x2b, 0x45, 0xc0, //0x00003797 subq $-64(%rbp), %rax + //0x0000379b LBB0_635 + 0x48, 0x01, 0xc8, //0x0000379b addq %rcx, %rax + 0x48, 0x89, 0xc2, //0x0000379e movq %rax, %rdx + 0xe9, 0x91, 0xfd, 0xff, 0xff, //0x000037a1 jmp LBB0_597 + //0x000037a6 LBB0_636 + 0x48, 0x2b, 0x45, 0xc0, //0x000037a6 subq $-64(%rbp), %rax + 0x48, 0x89, 0xc2, //0x000037aa movq %rax, %rdx + 0xe9, 0x85, 0xfd, 0xff, 0xff, //0x000037ad jmp LBB0_597 + //0x000037b2 LBB0_637 + 0x4c, 0x8b, 0x45, 0xd0, //0x000037b2 movq $-48(%rbp), %r8 + 0x49, 0x89, 0xcd, //0x000037b6 movq %rcx, %r13 + 0xe9, 0xef, 0xfc, 0xff, 0xff, //0x000037b9 jmp LBB0_588 + 0x90, 0x90, //0x000037be .p2align 2, 0x90 + // // .set L0_0_set_586, LBB0_586-LJTI0_0 + // // .set L0_0_set_517, LBB0_517-LJTI0_0 + // // .set L0_0_set_518, LBB0_518-LJTI0_0 // // .set L0_0_set_494, LBB0_494-LJTI0_0 - // // .set L0_0_set_522, LBB0_522-LJTI0_0 - // // .set L0_0_set_547, LBB0_547-LJTI0_0 - // // .set L0_0_set_507, LBB0_507-LJTI0_0 - // // .set L0_0_set_550, LBB0_550-LJTI0_0 - //0x00003738 LJTI0_0 - 0xf1, 0xfc, 0xff, 0xff, //0x00003738 .long L0_0_set_580 - 0x85, 0xf2, 0xff, 0xff, //0x0000373c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003740 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003744 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003748 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x0000374c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003750 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003754 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003758 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x0000375c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003760 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003764 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003768 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x0000376c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003770 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003774 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003778 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x0000377c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003780 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003784 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003788 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x0000378c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003790 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003794 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003798 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x0000379c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037a0 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037a4 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037a8 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037ac .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037b0 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037b4 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037b8 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037bc .long L0_0_set_511 - 0x8d, 0xf2, 0xff, 0xff, //0x000037c0 .long L0_0_set_512 - 0x85, 0xf2, 0xff, 0xff, //0x000037c4 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037c8 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037cc .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037d0 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037d4 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037d8 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037dc .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037e0 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037e4 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037e8 .long L0_0_set_511 - 0x64, 0xf1, 0xff, 0xff, //0x000037ec .long L0_0_set_494 - 0x85, 0xf2, 0xff, 0xff, //0x000037f0 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000037f4 .long L0_0_set_511 - 0x64, 0xf1, 0xff, 0xff, //0x000037f8 .long L0_0_set_494 - 0x64, 0xf1, 0xff, 0xff, //0x000037fc .long L0_0_set_494 - 0x64, 0xf1, 0xff, 0xff, //0x00003800 .long L0_0_set_494 - 0x64, 0xf1, 0xff, 0xff, //0x00003804 .long L0_0_set_494 - 0x64, 0xf1, 0xff, 0xff, //0x00003808 .long L0_0_set_494 - 0x64, 0xf1, 0xff, 0xff, //0x0000380c .long L0_0_set_494 - 0x64, 0xf1, 0xff, 0xff, //0x00003810 .long L0_0_set_494 - 0x64, 0xf1, 0xff, 0xff, //0x00003814 .long L0_0_set_494 - 0x64, 0xf1, 0xff, 0xff, //0x00003818 .long L0_0_set_494 - 0x64, 0xf1, 0xff, 0xff, //0x0000381c .long L0_0_set_494 - 0x85, 0xf2, 0xff, 0xff, //0x00003820 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003824 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003828 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x0000382c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003830 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003834 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003838 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x0000383c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003840 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003844 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003848 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x0000384c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003850 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003854 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003858 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x0000385c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003860 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003864 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003868 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x0000386c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003870 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003874 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003878 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x0000387c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003880 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003884 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003888 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x0000388c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003890 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003894 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003898 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x0000389c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038a0 .long L0_0_set_511 - 0x9c, 0xf3, 0xff, 0xff, //0x000038a4 .long L0_0_set_522 - 0x85, 0xf2, 0xff, 0xff, //0x000038a8 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038ac .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038b0 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038b4 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038b8 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038bc .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038c0 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038c4 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038c8 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038cc .long L0_0_set_511 - 0xea, 0xf7, 0xff, 0xff, //0x000038d0 .long L0_0_set_547 - 0x85, 0xf2, 0xff, 0xff, //0x000038d4 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038d8 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038dc .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038e0 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038e4 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038e8 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038ec .long L0_0_set_511 - 0x49, 0xf2, 0xff, 0xff, //0x000038f0 .long L0_0_set_507 - 0x85, 0xf2, 0xff, 0xff, //0x000038f4 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038f8 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x000038fc .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003900 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003904 .long L0_0_set_511 - 0x49, 0xf2, 0xff, 0xff, //0x00003908 .long L0_0_set_507 - 0x85, 0xf2, 0xff, 0xff, //0x0000390c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003910 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003914 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003918 .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x0000391c .long L0_0_set_511 - 0x85, 0xf2, 0xff, 0xff, //0x00003920 .long L0_0_set_511 - 0x03, 0xf8, 0xff, 0xff, //0x00003924 .long L0_0_set_550 + // // .set L0_0_set_528, LBB0_528-LJTI0_0 + // // .set L0_0_set_553, LBB0_553-LJTI0_0 + // // .set L0_0_set_513, LBB0_513-LJTI0_0 + // // .set L0_0_set_556, LBB0_556-LJTI0_0 + //0x000037c0 LJTI0_0 + 0xfa, 0xfc, 0xff, 0xff, //0x000037c0 .long L0_0_set_586 + 0xa5, 0xf2, 0xff, 0xff, //0x000037c4 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000037c8 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000037cc .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000037d0 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000037d4 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000037d8 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000037dc .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000037e0 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000037e4 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000037e8 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000037ec .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000037f0 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000037f4 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000037f8 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000037fc .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003800 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003804 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003808 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x0000380c .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003810 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003814 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003818 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x0000381c .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003820 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003824 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003828 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x0000382c .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003830 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003834 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003838 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x0000383c .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003840 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003844 .long L0_0_set_517 + 0xad, 0xf2, 0xff, 0xff, //0x00003848 .long L0_0_set_518 + 0xa5, 0xf2, 0xff, 0xff, //0x0000384c .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003850 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003854 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003858 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x0000385c .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003860 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003864 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003868 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x0000386c .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003870 .long L0_0_set_517 + 0x1b, 0xf1, 0xff, 0xff, //0x00003874 .long L0_0_set_494 + 0xa5, 0xf2, 0xff, 0xff, //0x00003878 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x0000387c .long L0_0_set_517 + 0x1b, 0xf1, 0xff, 0xff, //0x00003880 .long L0_0_set_494 + 0x1b, 0xf1, 0xff, 0xff, //0x00003884 .long L0_0_set_494 + 0x1b, 0xf1, 0xff, 0xff, //0x00003888 .long L0_0_set_494 + 0x1b, 0xf1, 0xff, 0xff, //0x0000388c .long L0_0_set_494 + 0x1b, 0xf1, 0xff, 0xff, //0x00003890 .long L0_0_set_494 + 0x1b, 0xf1, 0xff, 0xff, //0x00003894 .long L0_0_set_494 + 0x1b, 0xf1, 0xff, 0xff, //0x00003898 .long L0_0_set_494 + 0x1b, 0xf1, 0xff, 0xff, //0x0000389c .long L0_0_set_494 + 0x1b, 0xf1, 0xff, 0xff, //0x000038a0 .long L0_0_set_494 + 0x1b, 0xf1, 0xff, 0xff, //0x000038a4 .long L0_0_set_494 + 0xa5, 0xf2, 0xff, 0xff, //0x000038a8 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038ac .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038b0 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038b4 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038b8 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038bc .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038c0 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038c4 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038c8 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038cc .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038d0 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038d4 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038d8 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038dc .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038e0 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038e4 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038e8 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038ec .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038f0 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038f4 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038f8 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000038fc .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003900 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003904 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003908 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x0000390c .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003910 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003914 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003918 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x0000391c .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003920 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003924 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003928 .long L0_0_set_517 + 0xc4, 0xf3, 0xff, 0xff, //0x0000392c .long L0_0_set_528 + 0xa5, 0xf2, 0xff, 0xff, //0x00003930 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003934 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003938 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x0000393c .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003940 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003944 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003948 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x0000394c .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003950 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003954 .long L0_0_set_517 + 0x03, 0xf8, 0xff, 0xff, //0x00003958 .long L0_0_set_553 + 0xa5, 0xf2, 0xff, 0xff, //0x0000395c .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003960 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003964 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003968 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x0000396c .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003970 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003974 .long L0_0_set_517 + 0x68, 0xf2, 0xff, 0xff, //0x00003978 .long L0_0_set_513 + 0xa5, 0xf2, 0xff, 0xff, //0x0000397c .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003980 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003984 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003988 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x0000398c .long L0_0_set_517 + 0x68, 0xf2, 0xff, 0xff, //0x00003990 .long L0_0_set_513 + 0xa5, 0xf2, 0xff, 0xff, //0x00003994 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x00003998 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x0000399c .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000039a0 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000039a4 .long L0_0_set_517 + 0xa5, 0xf2, 0xff, 0xff, //0x000039a8 .long L0_0_set_517 + 0x1d, 0xf8, 0xff, 0xff, //0x000039ac .long L0_0_set_556 // // .set L0_1_set_58, LBB0_58-LJTI0_1 - // // .set L0_1_set_80, LBB0_80-LJTI0_1 + // // .set L0_1_set_82, LBB0_82-LJTI0_1 // // .set L0_1_set_62, LBB0_62-LJTI0_1 - // // .set L0_1_set_83, LBB0_83-LJTI0_1 + // // .set L0_1_set_80, LBB0_80-LJTI0_1 // // .set L0_1_set_60, LBB0_60-LJTI0_1 - // // .set L0_1_set_85, LBB0_85-LJTI0_1 - //0x00003928 LJTI0_1 - 0x91, 0xcb, 0xff, 0xff, //0x00003928 .long L0_1_set_58 - 0x74, 0xcd, 0xff, 0xff, //0x0000392c .long L0_1_set_80 - 0xbe, 0xcb, 0xff, 0xff, //0x00003930 .long L0_1_set_62 - 0x9f, 0xcd, 0xff, 0xff, //0x00003934 .long L0_1_set_83 - 0xa8, 0xcb, 0xff, 0xff, //0x00003938 .long L0_1_set_60 - 0xb5, 0xcd, 0xff, 0xff, //0x0000393c .long L0_1_set_85 - // // .set L0_2_set_580, LBB0_580-LJTI0_2 - // // .set L0_2_set_579, LBB0_579-LJTI0_2 + // // .set L0_1_set_124, LBB0_124-LJTI0_1 + //0x000039b0 LJTI0_1 + 0x09, 0xcb, 0xff, 0xff, //0x000039b0 .long L0_1_set_58 + 0x02, 0xcd, 0xff, 0xff, //0x000039b4 .long L0_1_set_82 + 0x36, 0xcb, 0xff, 0xff, //0x000039b8 .long L0_1_set_62 + 0xec, 0xcc, 0xff, 0xff, //0x000039bc .long L0_1_set_80 + 0x20, 0xcb, 0xff, 0xff, //0x000039c0 .long L0_1_set_60 + 0x98, 0xcf, 0xff, 0xff, //0x000039c4 .long L0_1_set_124 + // // .set L0_2_set_586, LBB0_586-LJTI0_2 + // // .set L0_2_set_585, LBB0_585-LJTI0_2 // // .set L0_2_set_229, LBB0_229-LJTI0_2 // // .set L0_2_set_249, LBB0_249-LJTI0_2 - // // .set L0_2_set_91, LBB0_91-LJTI0_2 + // // .set L0_2_set_88, LBB0_88-LJTI0_2 // // .set L0_2_set_285, LBB0_285-LJTI0_2 // // .set L0_2_set_287, LBB0_287-LJTI0_2 // // .set L0_2_set_291, LBB0_291-LJTI0_2 // // .set L0_2_set_297, LBB0_297-LJTI0_2 // // .set L0_2_set_300, LBB0_300-LJTI0_2 - //0x00003940 LJTI0_2 - 0xe9, 0xfa, 0xff, 0xff, //0x00003940 .long L0_2_set_580 - 0xc2, 0xfa, 0xff, 0xff, //0x00003944 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003948 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x0000394c .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003950 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003954 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003958 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x0000395c .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003960 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003964 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003968 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x0000396c .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003970 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003974 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003978 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x0000397c .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003980 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003984 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003988 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x0000398c .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003990 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003994 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003998 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x0000399c .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039a0 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039a4 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039a8 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039ac .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039b0 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039b4 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039b8 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039bc .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039c0 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039c4 .long L0_2_set_579 - 0x85, 0xd7, 0xff, 0xff, //0x000039c8 .long L0_2_set_229 - 0xc2, 0xfa, 0xff, 0xff, //0x000039cc .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039d0 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039d4 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039d8 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039dc .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039e0 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039e4 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039e8 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039ec .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039f0 .long L0_2_set_579 - 0x2c, 0xd9, 0xff, 0xff, //0x000039f4 .long L0_2_set_249 - 0xc2, 0xfa, 0xff, 0xff, //0x000039f8 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x000039fc .long L0_2_set_579 - 0xe9, 0xcd, 0xff, 0xff, //0x00003a00 .long L0_2_set_91 - 0xe9, 0xcd, 0xff, 0xff, //0x00003a04 .long L0_2_set_91 - 0xe9, 0xcd, 0xff, 0xff, //0x00003a08 .long L0_2_set_91 - 0xe9, 0xcd, 0xff, 0xff, //0x00003a0c .long L0_2_set_91 - 0xe9, 0xcd, 0xff, 0xff, //0x00003a10 .long L0_2_set_91 - 0xe9, 0xcd, 0xff, 0xff, //0x00003a14 .long L0_2_set_91 - 0xe9, 0xcd, 0xff, 0xff, //0x00003a18 .long L0_2_set_91 - 0xe9, 0xcd, 0xff, 0xff, //0x00003a1c .long L0_2_set_91 - 0xe9, 0xcd, 0xff, 0xff, //0x00003a20 .long L0_2_set_91 - 0xe9, 0xcd, 0xff, 0xff, //0x00003a24 .long L0_2_set_91 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a28 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a2c .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a30 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a34 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a38 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a3c .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a40 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a44 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a48 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a4c .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a50 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a54 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a58 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a5c .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a60 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a64 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a68 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a6c .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a70 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a74 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a78 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a7c .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a80 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a84 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a88 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a8c .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a90 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a94 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a98 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003a9c .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003aa0 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003aa4 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003aa8 .long L0_2_set_579 - 0x61, 0xdb, 0xff, 0xff, //0x00003aac .long L0_2_set_285 - 0xc2, 0xfa, 0xff, 0xff, //0x00003ab0 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003ab4 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003ab8 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003abc .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003ac0 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003ac4 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003ac8 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003acc .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003ad0 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003ad4 .long L0_2_set_579 - 0x85, 0xdb, 0xff, 0xff, //0x00003ad8 .long L0_2_set_287 - 0xc2, 0xfa, 0xff, 0xff, //0x00003adc .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003ae0 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003ae4 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003ae8 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003aec .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003af0 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003af4 .long L0_2_set_579 - 0xbe, 0xdb, 0xff, 0xff, //0x00003af8 .long L0_2_set_291 - 0xc2, 0xfa, 0xff, 0xff, //0x00003afc .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003b00 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003b04 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003b08 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003b0c .long L0_2_set_579 - 0xea, 0xdb, 0xff, 0xff, //0x00003b10 .long L0_2_set_297 - 0xc2, 0xfa, 0xff, 0xff, //0x00003b14 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003b18 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003b1c .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003b20 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003b24 .long L0_2_set_579 - 0xc2, 0xfa, 0xff, 0xff, //0x00003b28 .long L0_2_set_579 - 0x26, 0xdc, 0xff, 0xff, //0x00003b2c .long L0_2_set_300 - // // .set L0_3_set_274, LBB0_274-LJTI0_3 + //0x000039c8 LJTI0_2 + 0xf2, 0xfa, 0xff, 0xff, //0x000039c8 .long L0_2_set_586 + 0xcb, 0xfa, 0xff, 0xff, //0x000039cc .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x000039d0 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x000039d4 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x000039d8 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x000039dc .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x000039e0 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x000039e4 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x000039e8 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x000039ec .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x000039f0 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x000039f4 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x000039f8 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x000039fc .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a00 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a04 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a08 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a0c .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a10 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a14 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a18 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a1c .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a20 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a24 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a28 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a2c .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a30 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a34 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a38 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a3c .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a40 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a44 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a48 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a4c .long L0_2_set_585 + 0x1e, 0xd7, 0xff, 0xff, //0x00003a50 .long L0_2_set_229 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a54 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a58 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a5c .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a60 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a64 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a68 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a6c .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a70 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a74 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a78 .long L0_2_set_585 + 0xc4, 0xd8, 0xff, 0xff, //0x00003a7c .long L0_2_set_249 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a80 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003a84 .long L0_2_set_585 + 0x37, 0xcd, 0xff, 0xff, //0x00003a88 .long L0_2_set_88 + 0x37, 0xcd, 0xff, 0xff, //0x00003a8c .long L0_2_set_88 + 0x37, 0xcd, 0xff, 0xff, //0x00003a90 .long L0_2_set_88 + 0x37, 0xcd, 0xff, 0xff, //0x00003a94 .long L0_2_set_88 + 0x37, 0xcd, 0xff, 0xff, //0x00003a98 .long L0_2_set_88 + 0x37, 0xcd, 0xff, 0xff, //0x00003a9c .long L0_2_set_88 + 0x37, 0xcd, 0xff, 0xff, //0x00003aa0 .long L0_2_set_88 + 0x37, 0xcd, 0xff, 0xff, //0x00003aa4 .long L0_2_set_88 + 0x37, 0xcd, 0xff, 0xff, //0x00003aa8 .long L0_2_set_88 + 0x37, 0xcd, 0xff, 0xff, //0x00003aac .long L0_2_set_88 + 0xcb, 0xfa, 0xff, 0xff, //0x00003ab0 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003ab4 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003ab8 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003abc .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003ac0 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003ac4 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003ac8 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003acc .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003ad0 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003ad4 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003ad8 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003adc .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003ae0 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003ae4 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003ae8 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003aec .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003af0 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003af4 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003af8 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003afc .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b00 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b04 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b08 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b0c .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b10 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b14 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b18 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b1c .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b20 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b24 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b28 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b2c .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b30 .long L0_2_set_585 + 0x00, 0xdb, 0xff, 0xff, //0x00003b34 .long L0_2_set_285 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b38 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b3c .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b40 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b44 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b48 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b4c .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b50 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b54 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b58 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b5c .long L0_2_set_585 + 0x24, 0xdb, 0xff, 0xff, //0x00003b60 .long L0_2_set_287 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b64 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b68 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b6c .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b70 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b74 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b78 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b7c .long L0_2_set_585 + 0x5d, 0xdb, 0xff, 0xff, //0x00003b80 .long L0_2_set_291 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b84 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b88 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b8c .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b90 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b94 .long L0_2_set_585 + 0x89, 0xdb, 0xff, 0xff, //0x00003b98 .long L0_2_set_297 + 0xcb, 0xfa, 0xff, 0xff, //0x00003b9c .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003ba0 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003ba4 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003ba8 .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003bac .long L0_2_set_585 + 0xcb, 0xfa, 0xff, 0xff, //0x00003bb0 .long L0_2_set_585 + 0xc5, 0xdb, 0xff, 0xff, //0x00003bb4 .long L0_2_set_300 + // // .set L0_3_set_281, LBB0_281-LJTI0_3 // // .set L0_3_set_330, LBB0_330-LJTI0_3 - // // .set L0_3_set_280, LBB0_280-LJTI0_3 // // .set L0_3_set_283, LBB0_283-LJTI0_3 - //0x00003b30 LJTI0_3 - 0xfc, 0xd8, 0xff, 0xff, //0x00003b30 .long L0_3_set_274 - 0x94, 0xdc, 0xff, 0xff, //0x00003b34 .long L0_3_set_330 - 0xfc, 0xd8, 0xff, 0xff, //0x00003b38 .long L0_3_set_274 - 0x42, 0xd9, 0xff, 0xff, //0x00003b3c .long L0_3_set_280 - 0x94, 0xdc, 0xff, 0xff, //0x00003b40 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b44 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b48 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b4c .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b50 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b54 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b58 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b5c .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b60 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b64 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b68 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b6c .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b70 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b74 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b78 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b7c .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b80 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b84 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b88 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b8c .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b90 .long L0_3_set_330 - 0x94, 0xdc, 0xff, 0xff, //0x00003b94 .long L0_3_set_330 - 0x5e, 0xd9, 0xff, 0xff, //0x00003b98 .long L0_3_set_283 - // // .set L0_4_set_116, LBB0_116-LJTI0_4 - // // .set L0_4_set_198, LBB0_198-LJTI0_4 + // // .set L0_3_set_275, LBB0_275-LJTI0_3 + //0x00003bb8 LJTI0_3 + 0xea, 0xd8, 0xff, 0xff, //0x00003bb8 .long L0_3_set_281 + 0x3c, 0xdc, 0xff, 0xff, //0x00003bbc .long L0_3_set_330 + 0xea, 0xd8, 0xff, 0xff, //0x00003bc0 .long L0_3_set_281 + 0xfd, 0xd8, 0xff, 0xff, //0x00003bc4 .long L0_3_set_283 + 0x3c, 0xdc, 0xff, 0xff, //0x00003bc8 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003bcc .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003bd0 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003bd4 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003bd8 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003bdc .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003be0 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003be4 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003be8 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003bec .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003bf0 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003bf4 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003bf8 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003bfc .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003c00 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003c04 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003c08 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003c0c .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003c10 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003c14 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003c18 .long L0_3_set_330 + 0x3c, 0xdc, 0xff, 0xff, //0x00003c1c .long L0_3_set_330 + 0x9d, 0xd8, 0xff, 0xff, //0x00003c20 .long L0_3_set_275 + // // .set L0_4_set_113, LBB0_113-LJTI0_4 + // // .set L0_4_set_200, LBB0_200-LJTI0_4 + // // .set L0_4_set_119, LBB0_119-LJTI0_4 // // .set L0_4_set_122, LBB0_122-LJTI0_4 - // // .set L0_4_set_125, LBB0_125-LJTI0_4 - //0x00003b9c LJTI0_4 - 0x54, 0xcd, 0xff, 0xff, //0x00003b9c .long L0_4_set_116 - 0xa2, 0xd3, 0xff, 0xff, //0x00003ba0 .long L0_4_set_198 - 0x54, 0xcd, 0xff, 0xff, //0x00003ba4 .long L0_4_set_116 - 0x9d, 0xcd, 0xff, 0xff, //0x00003ba8 .long L0_4_set_122 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bac .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bb0 .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bb4 .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bb8 .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bbc .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bc0 .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bc4 .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bc8 .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bcc .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bd0 .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bd4 .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bd8 .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bdc .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003be0 .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003be4 .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003be8 .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bec .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bf0 .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bf4 .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bf8 .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003bfc .long L0_4_set_198 - 0xa2, 0xd3, 0xff, 0xff, //0x00003c00 .long L0_4_set_198 - 0xb9, 0xcd, 0xff, 0xff, //0x00003c04 .long L0_4_set_125 - //0x00003c08 .p2align 2, 0x00 - //0x00003c08 _MASK_USE_NUMBER - 0x02, 0x00, 0x00, 0x00, //0x00003c08 .long 2 + //0x00003c24 LJTI0_4 + 0xa7, 0xcc, 0xff, 0xff, //0x00003c24 .long L0_4_set_113 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c28 .long L0_4_set_200 + 0xa7, 0xcc, 0xff, 0xff, //0x00003c2c .long L0_4_set_113 + 0xf5, 0xcc, 0xff, 0xff, //0x00003c30 .long L0_4_set_119 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c34 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c38 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c3c .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c40 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c44 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c48 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c4c .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c50 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c54 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c58 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c5c .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c60 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c64 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c68 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c6c .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c70 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c74 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c78 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c7c .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c80 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c84 .long L0_4_set_200 + 0x3a, 0xd3, 0xff, 0xff, //0x00003c88 .long L0_4_set_200 + 0x11, 0xcd, 0xff, 0xff, //0x00003c8c .long L0_4_set_122 + //0x00003c90 .p2align 2, 0x00 + //0x00003c90 _MASK_USE_NUMBER + 0x02, 0x00, 0x00, 0x00, //0x00003c90 .long 2 } diff --git a/vendor/github.com/bytedance/sonic/internal/native/sse/validate_one_subr.go b/vendor/github.com/bytedance/sonic/internal/native/sse/validate_one_subr.go index 564b17e..3208df2 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/sse/validate_one_subr.go +++ b/vendor/github.com/bytedance/sonic/internal/native/sse/validate_one_subr.go @@ -16,7 +16,7 @@ const ( ) const ( - _size__validate_one = 15328 + _size__validate_one = 15436 ) var ( @@ -28,15 +28,15 @@ var ( {0xc, 32}, {0xd, 40}, {0x14, 48}, - {0x394e, 184}, - {0x394f, 48}, - {0x3951, 40}, - {0x3953, 32}, - {0x3955, 24}, - {0x3957, 16}, - {0x3958, 8}, - {0x3959, 0}, - {0x3be0, 184}, + {0x39b6, 184}, + {0x39b7, 48}, + {0x39b9, 40}, + {0x39bb, 32}, + {0x39bd, 24}, + {0x39bf, 16}, + {0x39c0, 8}, + {0x39c1, 0}, + {0x3c4c, 184}, } ) diff --git a/vendor/github.com/bytedance/sonic/internal/native/sse/validate_one_text_amd64.go b/vendor/github.com/bytedance/sonic/internal/native/sse/validate_one_text_amd64.go index f19e406..30ab755 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/sse/validate_one_text_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/native/sse/validate_one_text_amd64.go @@ -56,815 +56,818 @@ var _text_validate_one = []byte{ 0x48, 0x89, 0x7d, 0xa8, //0x0000011e movq %rdi, $-88(%rbp) 0x0f, 0x10, 0x05, 0xd7, 0xfe, 0xff, 0xff, //0x00000122 movups $-297(%rip), %xmm0 /* LCPI0_0+0(%rip) */ 0x0f, 0x11, 0x02, //0x00000129 movups %xmm0, (%rdx) - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000012c movq $-1, %rcx - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000133 movabsq $4294977024, %r11 - 0xf3, 0x0f, 0x6f, 0x05, 0xcb, 0xfe, 0xff, 0xff, //0x0000013d movdqu $-309(%rip), %xmm0 /* LCPI0_1+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x0d, 0xd3, 0xfe, 0xff, 0xff, //0x00000145 movdqu $-301(%rip), %xmm1 /* LCPI0_2+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x25, 0xda, 0xfe, 0xff, 0xff, //0x0000014d movdqu $-294(%rip), %xmm12 /* LCPI0_3+0(%rip) */ - 0x66, 0x45, 0x0f, 0x76, 0xd2, //0x00000156 pcmpeqd %xmm10, %xmm10 - 0xf3, 0x44, 0x0f, 0x6f, 0x3d, 0x4c, 0xff, 0xff, 0xff, //0x0000015b movdqu $-180(%rip), %xmm15 /* LCPI0_11+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x0d, 0x23, 0xff, 0xff, 0xff, //0x00000164 movdqu $-221(%rip), %xmm9 /* LCPI0_9+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x7a, 0xff, 0xff, 0xff, //0x0000016d movdqu $-134(%rip), %xmm11 /* LCPI0_15+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x35, 0x01, 0xff, 0xff, 0xff, //0x00000176 movdqu $-255(%rip), %xmm14 /* LCPI0_8+0(%rip) */ - 0xf3, 0x0f, 0x6f, 0x15, 0xe9, 0xfe, 0xff, 0xff, //0x0000017f movdqu $-279(%rip), %xmm2 /* LCPI0_7+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xb0, 0xfe, 0xff, 0xff, //0x00000187 movdqu $-336(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0xf3, 0x44, 0x0f, 0x6f, 0x05, 0xb7, 0xfe, 0xff, 0xff, //0x00000190 movdqu $-329(%rip), %xmm8 /* LCPI0_5+0(%rip) */ - 0x48, 0x89, 0x75, 0xd0, //0x00000199 movq %rsi, $-48(%rbp) - 0x48, 0x89, 0x55, 0xb8, //0x0000019d movq %rdx, $-72(%rbp) - 0xe9, 0x7a, 0x00, 0x00, 0x00, //0x000001a1 jmp LBB0_6 - //0x000001a6 LBB0_613 - 0x66, 0x0f, 0xbc, 0xc2, //0x000001a6 bsfw %dx, %ax - 0x0f, 0xb7, 0xc0, //0x000001aa movzwl %ax, %eax - 0x48, 0x29, 0xc8, //0x000001ad subq %rcx, %rax - 0x49, 0x89, 0x06, //0x000001b0 movq %rax, (%r14) - 0x48, 0x85, 0xf6, //0x000001b3 testq %rsi, %rsi - 0x0f, 0x8e, 0x9d, 0x38, 0x00, 0x00, //0x000001b6 jle LBB0_614 - 0x90, 0x90, 0x90, 0x90, //0x000001bc .p2align 4, 0x90 - //0x000001c0 LBB0_4 - 0x4d, 0x8b, 0x45, 0x00, //0x000001c0 movq (%r13), %r8 - 0x48, 0x8b, 0x75, 0x90, //0x000001c4 movq $-112(%rbp), %rsi - 0x48, 0x89, 0xf1, //0x000001c8 movq %rsi, %rcx - 0x48, 0x89, 0xf0, //0x000001cb movq %rsi, %rax - 0x4d, 0x85, 0xc0, //0x000001ce testq %r8, %r8 - 0x0f, 0x85, 0x49, 0x00, 0x00, 0x00, //0x000001d1 jne LBB0_6 - 0xe9, 0x6b, 0x38, 0x00, 0x00, //0x000001d7 jmp LBB0_638 - //0x000001dc LBB0_1 - 0x49, 0xf7, 0xdb, //0x000001dc negq %r11 - 0x4d, 0x89, 0xdd, //0x000001df movq %r11, %r13 - //0x000001e2 LBB0_2 - 0x4d, 0x85, 0xed, //0x000001e2 testq %r13, %r13 - 0x0f, 0x88, 0x47, 0x38, 0x00, 0x00, //0x000001e5 js LBB0_612 - //0x000001eb LBB0_3 - 0x49, 0x01, 0xc5, //0x000001eb addq %rax, %r13 - 0x4c, 0x8b, 0x75, 0xd0, //0x000001ee movq $-48(%rbp), %r14 - 0x4d, 0x89, 0x2e, //0x000001f2 movq %r13, (%r14) - 0x48, 0x85, 0xc0, //0x000001f5 testq %rax, %rax - 0x4c, 0x8b, 0x6d, 0xb8, //0x000001f8 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000001fc movabsq $4294977024, %r11 - 0x0f, 0x89, 0xb4, 0xff, 0xff, 0xff, //0x00000206 jns LBB0_4 - 0xe9, 0x36, 0x38, 0x00, 0x00, //0x0000020c jmp LBB0_638 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000211 .p2align 4, 0x90 - //0x00000220 LBB0_6 - 0x48, 0x8b, 0x45, 0xa8, //0x00000220 movq $-88(%rbp), %rax - 0x4c, 0x8b, 0x20, //0x00000224 movq (%rax), %r12 - 0x48, 0x8b, 0x40, 0x08, //0x00000227 movq $8(%rax), %rax - 0x49, 0x8b, 0x16, //0x0000022b movq (%r14), %rdx - 0x48, 0x39, 0xc2, //0x0000022e cmpq %rax, %rdx - 0x0f, 0x83, 0x39, 0x00, 0x00, 0x00, //0x00000231 jae LBB0_11 - 0x41, 0x8a, 0x1c, 0x14, //0x00000237 movb (%r12,%rdx), %bl - 0x80, 0xfb, 0x0d, //0x0000023b cmpb $13, %bl - 0x0f, 0x84, 0x2c, 0x00, 0x00, 0x00, //0x0000023e je LBB0_11 - 0x80, 0xfb, 0x20, //0x00000244 cmpb $32, %bl - 0x0f, 0x84, 0x23, 0x00, 0x00, 0x00, //0x00000247 je LBB0_11 - 0x80, 0xc3, 0xf7, //0x0000024d addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000250 cmpb $1, %bl - 0x0f, 0x86, 0x17, 0x00, 0x00, 0x00, //0x00000253 jbe LBB0_11 - 0x48, 0x89, 0xd6, //0x00000259 movq %rdx, %rsi - 0xe9, 0x07, 0x01, 0x00, 0x00, //0x0000025c jmp LBB0_32 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000261 .p2align 4, 0x90 - //0x00000270 LBB0_11 - 0x48, 0x8d, 0x72, 0x01, //0x00000270 leaq $1(%rdx), %rsi - 0x48, 0x39, 0xc6, //0x00000274 cmpq %rax, %rsi - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000277 jae LBB0_15 - 0x41, 0x8a, 0x1c, 0x34, //0x0000027d movb (%r12,%rsi), %bl - 0x80, 0xfb, 0x0d, //0x00000281 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000284 je LBB0_15 - 0x80, 0xfb, 0x20, //0x0000028a cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000028d je LBB0_15 - 0x80, 0xc3, 0xf7, //0x00000293 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x00000296 cmpb $1, %bl - 0x0f, 0x87, 0xc9, 0x00, 0x00, 0x00, //0x00000299 ja LBB0_32 - 0x90, //0x0000029f .p2align 4, 0x90 - //0x000002a0 LBB0_15 - 0x48, 0x8d, 0x72, 0x02, //0x000002a0 leaq $2(%rdx), %rsi - 0x48, 0x39, 0xc6, //0x000002a4 cmpq %rax, %rsi - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000002a7 jae LBB0_19 - 0x41, 0x8a, 0x1c, 0x34, //0x000002ad movb (%r12,%rsi), %bl - 0x80, 0xfb, 0x0d, //0x000002b1 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000002b4 je LBB0_19 - 0x80, 0xfb, 0x20, //0x000002ba cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000002bd je LBB0_19 - 0x80, 0xc3, 0xf7, //0x000002c3 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x000002c6 cmpb $1, %bl - 0x0f, 0x87, 0x99, 0x00, 0x00, 0x00, //0x000002c9 ja LBB0_32 - 0x90, //0x000002cf .p2align 4, 0x90 - //0x000002d0 LBB0_19 - 0x48, 0x8d, 0x72, 0x03, //0x000002d0 leaq $3(%rdx), %rsi - 0x48, 0x39, 0xc6, //0x000002d4 cmpq %rax, %rsi - 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x000002d7 jae LBB0_23 - 0x41, 0x8a, 0x1c, 0x34, //0x000002dd movb (%r12,%rsi), %bl - 0x80, 0xfb, 0x0d, //0x000002e1 cmpb $13, %bl - 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000002e4 je LBB0_23 - 0x80, 0xfb, 0x20, //0x000002ea cmpb $32, %bl - 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000002ed je LBB0_23 - 0x80, 0xc3, 0xf7, //0x000002f3 addb $-9, %bl - 0x80, 0xfb, 0x01, //0x000002f6 cmpb $1, %bl - 0x0f, 0x87, 0x69, 0x00, 0x00, 0x00, //0x000002f9 ja LBB0_32 - 0x90, //0x000002ff .p2align 4, 0x90 - //0x00000300 LBB0_23 - 0x48, 0x83, 0xc2, 0x04, //0x00000300 addq $4, %rdx - 0x48, 0x39, 0xd0, //0x00000304 cmpq %rdx, %rax - 0x0f, 0x86, 0xd0, 0x36, 0x00, 0x00, //0x00000307 jbe LBB0_603 - 0x48, 0x39, 0xd0, //0x0000030d cmpq %rdx, %rax - 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x00000310 je LBB0_29 - 0x49, 0x8d, 0x34, 0x04, //0x00000316 leaq (%r12,%rax), %rsi - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000031a .p2align 4, 0x90 - //0x00000320 LBB0_26 - 0x41, 0x0f, 0xbe, 0x3c, 0x14, //0x00000320 movsbl (%r12,%rdx), %edi - 0x83, 0xff, 0x20, //0x00000325 cmpl $32, %edi - 0x0f, 0x87, 0x2e, 0x00, 0x00, 0x00, //0x00000328 ja LBB0_31 - 0x49, 0x0f, 0xa3, 0xfb, //0x0000032e btq %rdi, %r11 - 0x0f, 0x83, 0x24, 0x00, 0x00, 0x00, //0x00000332 jae LBB0_31 - 0x48, 0x83, 0xc2, 0x01, //0x00000338 addq $1, %rdx - 0x48, 0x39, 0xd0, //0x0000033c cmpq %rdx, %rax - 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x0000033f jne LBB0_26 - 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x00000345 jmp LBB0_30 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000034a .p2align 4, 0x90 - //0x00000350 LBB0_29 - 0x4c, 0x01, 0xe2, //0x00000350 addq %r12, %rdx - 0x48, 0x89, 0xd6, //0x00000353 movq %rdx, %rsi - //0x00000356 LBB0_30 - 0x4c, 0x29, 0xe6, //0x00000356 subq %r12, %rsi - 0x48, 0x89, 0xf2, //0x00000359 movq %rsi, %rdx - //0x0000035c LBB0_31 - 0x48, 0x89, 0xd6, //0x0000035c movq %rdx, %rsi - 0x48, 0x39, 0xc2, //0x0000035f cmpq %rax, %rdx - 0x0f, 0x83, 0x78, 0x36, 0x00, 0x00, //0x00000362 jae LBB0_604 - //0x00000368 LBB0_32 - 0x48, 0x8d, 0x46, 0x01, //0x00000368 leaq $1(%rsi), %rax - 0x49, 0x89, 0x06, //0x0000036c movq %rax, (%r14) - 0x41, 0x0f, 0xbe, 0x3c, 0x34, //0x0000036f movsbl (%r12,%rsi), %edi - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000374 movq $-1, %rax - 0x85, 0xff, //0x0000037b testl %edi, %edi - 0x0f, 0x84, 0xc4, 0x36, 0x00, 0x00, //0x0000037d je LBB0_638 - 0x4d, 0x8b, 0x4d, 0x00, //0x00000383 movq (%r13), %r9 - 0x4d, 0x8d, 0x41, 0xff, //0x00000387 leaq $-1(%r9), %r8 - 0x43, 0x8b, 0x5c, 0xcd, 0x00, //0x0000038b movl (%r13,%r9,8), %ebx - 0x48, 0x83, 0xf9, 0xff, //0x00000390 cmpq $-1, %rcx - 0x48, 0x0f, 0x45, 0xf1, //0x00000394 cmovneq %rcx, %rsi - 0x83, 0xc3, 0xff, //0x00000398 addl $-1, %ebx - 0x83, 0xfb, 0x05, //0x0000039b cmpl $5, %ebx - 0x0f, 0x87, 0x82, 0x02, 0x00, 0x00, //0x0000039e ja LBB0_78 - 0x48, 0x8d, 0x15, 0x35, 0x39, 0x00, 0x00, //0x000003a4 leaq $14645(%rip), %rdx /* LJTI0_0+0(%rip) */ - 0x48, 0x63, 0x0c, 0x9a, //0x000003ab movslq (%rdx,%rbx,4), %rcx - 0x48, 0x01, 0xd1, //0x000003af addq %rdx, %rcx - 0xff, 0xe1, //0x000003b2 jmpq *%rcx - //0x000003b4 LBB0_35 - 0x83, 0xff, 0x2c, //0x000003b4 cmpl $44, %edi - 0x0f, 0x84, 0xec, 0x04, 0x00, 0x00, //0x000003b7 je LBB0_117 - 0x83, 0xff, 0x5d, //0x000003bd cmpl $93, %edi - 0x0f, 0x84, 0x48, 0x02, 0x00, 0x00, //0x000003c0 je LBB0_37 - 0xe9, 0x75, 0x36, 0x00, 0x00, //0x000003c6 jmp LBB0_637 - //0x000003cb LBB0_38 - 0x40, 0x80, 0xff, 0x5d, //0x000003cb cmpb $93, %dil - 0x0f, 0x84, 0x39, 0x02, 0x00, 0x00, //0x000003cf je LBB0_37 - 0x48, 0x89, 0x75, 0x90, //0x000003d5 movq %rsi, $-112(%rbp) - 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000003d9 movq $1, (%r13,%r9,8) - 0x83, 0xff, 0x7b, //0x000003e2 cmpl $123, %edi - 0x0f, 0x86, 0x4c, 0x02, 0x00, 0x00, //0x000003e5 jbe LBB0_79 - 0xe9, 0x50, 0x36, 0x00, 0x00, //0x000003eb jmp LBB0_637 - //0x000003f0 LBB0_40 - 0x40, 0x80, 0xff, 0x22, //0x000003f0 cmpb $34, %dil - 0x0f, 0x85, 0x46, 0x36, 0x00, 0x00, //0x000003f4 jne LBB0_637 - 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x04, 0x00, 0x00, 0x00, //0x000003fa movq $4, (%r13,%r9,8) - 0x48, 0x8b, 0x4d, 0x98, //0x00000403 movq $-104(%rbp), %rcx - 0xf6, 0xc1, 0x40, //0x00000407 testb $64, %cl - 0x48, 0x89, 0x75, 0x90, //0x0000040a movq %rsi, $-112(%rbp) - 0x0f, 0x85, 0x7c, 0x06, 0x00, 0x00, //0x0000040e jne LBB0_125 - 0x49, 0x8b, 0x16, //0x00000414 movq (%r14), %rdx - 0x48, 0x8b, 0x45, 0xa8, //0x00000417 movq $-88(%rbp), %rax - 0x48, 0x8b, 0x40, 0x08, //0x0000041b movq $8(%rax), %rax - 0xf6, 0xc1, 0x20, //0x0000041f testb $32, %cl - 0x48, 0x89, 0x45, 0xa0, //0x00000422 movq %rax, $-96(%rbp) - 0x48, 0x89, 0x55, 0xb0, //0x00000426 movq %rdx, $-80(%rbp) - 0x0f, 0x85, 0x5e, 0x09, 0x00, 0x00, //0x0000042a jne LBB0_157 - 0x49, 0x89, 0xc1, //0x00000430 movq %rax, %r9 - 0x49, 0x29, 0xd1, //0x00000433 subq %rdx, %r9 - 0x0f, 0x84, 0xc2, 0x37, 0x00, 0x00, //0x00000436 je LBB0_642 - 0x49, 0x83, 0xf9, 0x40, //0x0000043c cmpq $64, %r9 - 0x0f, 0x82, 0x4a, 0x2a, 0x00, 0x00, //0x00000440 jb LBB0_484 - 0x48, 0x8b, 0x45, 0xb0, //0x00000446 movq $-80(%rbp), %rax - 0x49, 0x89, 0xc6, //0x0000044a movq %rax, %r14 - 0x49, 0xf7, 0xd6, //0x0000044d notq %r14 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000450 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00000458 xorl %r8d, %r8d - 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000045b .p2align 4, 0x90 - //0x00000460 LBB0_46 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00000460 movdqu (%r12,%rax), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00000466 movdqu $16(%r12,%rax), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000046d movdqu $32(%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000474 movdqu $48(%r12,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xfb, //0x0000047b movdqa %xmm3, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000047f pcmpeqb %xmm0, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00000483 pmovmskb %xmm7, %r10d - 0x66, 0x0f, 0x6f, 0xfc, //0x00000488 movdqa %xmm4, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000048c pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xdf, //0x00000490 pmovmskb %xmm7, %ebx - 0x66, 0x0f, 0x6f, 0xfd, //0x00000494 movdqa %xmm5, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x00000498 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x0000049c pmovmskb %xmm7, %edi - 0x66, 0x0f, 0x6f, 0xfe, //0x000004a0 movdqa %xmm6, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000004a4 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xd7, //0x000004a8 pmovmskb %xmm7, %edx - 0x66, 0x0f, 0x74, 0xd9, //0x000004ac pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x000004b0 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x74, 0xe1, //0x000004b5 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x000004b9 pmovmskb %xmm4, %ecx - 0x66, 0x0f, 0x74, 0xe9, //0x000004bd pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x000004c1 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x74, 0xf1, //0x000004c5 pcmpeqb %xmm1, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x000004c9 pmovmskb %xmm6, %r15d - 0x48, 0xc1, 0xe2, 0x30, //0x000004ce shlq $48, %rdx - 0x48, 0xc1, 0xe7, 0x20, //0x000004d2 shlq $32, %rdi - 0x48, 0x09, 0xd7, //0x000004d6 orq %rdx, %rdi - 0x48, 0xc1, 0xe3, 0x10, //0x000004d9 shlq $16, %rbx - 0x48, 0x09, 0xfb, //0x000004dd orq %rdi, %rbx - 0x49, 0x09, 0xda, //0x000004e0 orq %rbx, %r10 - 0x49, 0xc1, 0xe7, 0x30, //0x000004e3 shlq $48, %r15 - 0x48, 0xc1, 0xe6, 0x20, //0x000004e7 shlq $32, %rsi - 0x4c, 0x09, 0xfe, //0x000004eb orq %r15, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x000004ee shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x000004f2 orq %rsi, %rcx - 0x49, 0x09, 0xcb, //0x000004f5 orq %rcx, %r11 - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000004f8 jne LBB0_55 - 0x4d, 0x85, 0xc0, //0x000004fe testq %r8, %r8 - 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x00000501 jne LBB0_57 - 0x45, 0x31, 0xc0, //0x00000507 xorl %r8d, %r8d - 0x4d, 0x85, 0xd2, //0x0000050a testq %r10, %r10 - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x0000050d jne LBB0_58 - //0x00000513 LBB0_49 - 0x49, 0x83, 0xc1, 0xc0, //0x00000513 addq $-64, %r9 - 0x49, 0x83, 0xc6, 0xc0, //0x00000517 addq $-64, %r14 - 0x48, 0x83, 0xc0, 0x40, //0x0000051b addq $64, %rax - 0x49, 0x83, 0xf9, 0x3f, //0x0000051f cmpq $63, %r9 - 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x00000523 ja LBB0_46 - 0xe9, 0xce, 0x21, 0x00, 0x00, //0x00000529 jmp LBB0_50 - //0x0000052e LBB0_55 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000052e cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00000533 jne LBB0_57 - 0x49, 0x0f, 0xbc, 0xcb, //0x00000539 bsfq %r11, %rcx - 0x48, 0x01, 0xc1, //0x0000053d addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00000540 movq %rcx, $-56(%rbp) - //0x00000544 LBB0_57 - 0x4c, 0x89, 0xc1, //0x00000544 movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00000547 notq %rcx - 0x4c, 0x21, 0xd9, //0x0000054a andq %r11, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x0000054d leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xc2, //0x00000551 orq %r8, %rdx - 0x48, 0x89, 0xd6, //0x00000554 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000557 notq %rsi - 0x4c, 0x21, 0xde, //0x0000055a andq %r11, %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000055d movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfe, //0x00000567 andq %rdi, %rsi - 0x45, 0x31, 0xc0, //0x0000056a xorl %r8d, %r8d - 0x48, 0x01, 0xce, //0x0000056d addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc0, //0x00000570 setb %r8b - 0x48, 0x01, 0xf6, //0x00000574 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000577 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00000581 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00000584 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000587 notq %rsi - 0x49, 0x21, 0xf2, //0x0000058a andq %rsi, %r10 - 0x4d, 0x85, 0xd2, //0x0000058d testq %r10, %r10 - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000590 je LBB0_49 - //0x00000596 LBB0_58 - 0x49, 0x0f, 0xbc, 0xc2, //0x00000596 bsfq %r10, %rax - 0x4c, 0x29, 0xf0, //0x0000059a subq %r14, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x0000059d movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000005a1 movabsq $4294977024, %r11 - 0xe9, 0xd6, 0x0c, 0x00, 0x00, //0x000005ab jmp LBB0_223 - //0x000005b0 LBB0_59 - 0x40, 0x80, 0xff, 0x3a, //0x000005b0 cmpb $58, %dil - 0x0f, 0x85, 0x86, 0x34, 0x00, 0x00, //0x000005b4 jne LBB0_637 - 0x48, 0x89, 0x75, 0x90, //0x000005ba movq %rsi, $-112(%rbp) - 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, //0x000005be movq $0, (%r13,%r9,8) - 0xe9, 0xf4, 0xfb, 0xff, 0xff, //0x000005c7 jmp LBB0_4 - //0x000005cc LBB0_61 - 0x83, 0xff, 0x2c, //0x000005cc cmpl $44, %edi - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000005cf jne LBB0_62 - 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000005d5 cmpq $4095, %r9 - 0x0f, 0x8f, 0x0a, 0x34, 0x00, 0x00, //0x000005dc jg LBB0_634 - 0x48, 0x89, 0x75, 0x90, //0x000005e2 movq %rsi, $-112(%rbp) - 0x49, 0x8d, 0x41, 0x01, //0x000005e6 leaq $1(%r9), %rax - 0x49, 0x89, 0x45, 0x00, //0x000005ea movq %rax, (%r13) - 0x4b, 0xc7, 0x44, 0xcd, 0x08, 0x03, 0x00, 0x00, 0x00, //0x000005ee movq $3, $8(%r13,%r9,8) - 0xe9, 0xc4, 0xfb, 0xff, 0xff, //0x000005f7 jmp LBB0_4 - //0x000005fc LBB0_63 - 0x83, 0xff, 0x22, //0x000005fc cmpl $34, %edi - 0x0f, 0x84, 0xcb, 0x02, 0x00, 0x00, //0x000005ff je LBB0_64 - //0x00000605 LBB0_62 - 0x83, 0xff, 0x7d, //0x00000605 cmpl $125, %edi - 0x0f, 0x85, 0x32, 0x34, 0x00, 0x00, //0x00000608 jne LBB0_637 - //0x0000060e LBB0_37 - 0x4d, 0x89, 0x45, 0x00, //0x0000060e movq %r8, (%r13) - 0x48, 0x89, 0xf1, //0x00000612 movq %rsi, %rcx - 0x48, 0x89, 0xf0, //0x00000615 movq %rsi, %rax - 0x4d, 0x85, 0xc0, //0x00000618 testq %r8, %r8 - 0x0f, 0x85, 0xff, 0xfb, 0xff, 0xff, //0x0000061b jne LBB0_6 - 0xe9, 0x21, 0x34, 0x00, 0x00, //0x00000621 jmp LBB0_638 - //0x00000626 LBB0_78 - 0x48, 0x89, 0x75, 0x90, //0x00000626 movq %rsi, $-112(%rbp) - 0x4d, 0x89, 0x45, 0x00, //0x0000062a movq %r8, (%r13) - 0x83, 0xff, 0x7b, //0x0000062e cmpl $123, %edi - 0x0f, 0x87, 0x09, 0x34, 0x00, 0x00, //0x00000631 ja LBB0_637 - //0x00000637 LBB0_79 - 0x89, 0xf9, //0x00000637 movl %edi, %ecx - 0x48, 0x8d, 0x15, 0xb8, 0x36, 0x00, 0x00, //0x00000639 leaq $14008(%rip), %rdx /* LJTI0_1+0(%rip) */ - 0x48, 0x63, 0x0c, 0x8a, //0x00000640 movslq (%rdx,%rcx,4), %rcx - 0x48, 0x01, 0xd1, //0x00000644 addq %rdx, %rcx - 0xff, 0xe1, //0x00000647 jmpq *%rcx - //0x00000649 LBB0_80 - 0x48, 0x8b, 0x45, 0xa8, //0x00000649 movq $-88(%rbp), %rax - 0x48, 0x8b, 0x78, 0x08, //0x0000064d movq $8(%rax), %rdi - 0x49, 0x8b, 0x36, //0x00000651 movq (%r14), %rsi - 0xf6, 0x45, 0x98, 0x40, //0x00000654 testb $64, $-104(%rbp) - 0x0f, 0x85, 0x40, 0x05, 0x00, 0x00, //0x00000658 jne LBB0_135 - 0x48, 0x8d, 0x46, 0xff, //0x0000065e leaq $-1(%rsi), %rax - 0x48, 0x29, 0xc7, //0x00000662 subq %rax, %rdi - 0x0f, 0x84, 0xc0, 0x33, 0x00, 0x00, //0x00000665 je LBB0_611 - 0x4d, 0x8d, 0x34, 0x34, //0x0000066b leaq (%r12,%rsi), %r14 - 0x49, 0x83, 0xc6, 0xff, //0x0000066f addq $-1, %r14 - 0x41, 0x80, 0x3e, 0x30, //0x00000673 cmpb $48, (%r14) - 0x0f, 0x85, 0x37, 0x00, 0x00, 0x00, //0x00000677 jne LBB0_86 - 0x41, 0xbd, 0x01, 0x00, 0x00, 0x00, //0x0000067d movl $1, %r13d - 0x48, 0x83, 0xff, 0x01, //0x00000683 cmpq $1, %rdi - 0x0f, 0x84, 0x5e, 0xfb, 0xff, 0xff, //0x00000687 je LBB0_3 - 0x41, 0x8a, 0x0c, 0x34, //0x0000068d movb (%r12,%rsi), %cl - 0x80, 0xc1, 0xd2, //0x00000691 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x00000694 cmpb $55, %cl - 0x0f, 0x87, 0x4e, 0xfb, 0xff, 0xff, //0x00000697 ja LBB0_3 - 0x0f, 0xb6, 0xc9, //0x0000069d movzbl %cl, %ecx - 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x000006a0 movabsq $36028797027352577, %rdx - 0x48, 0x0f, 0xa3, 0xca, //0x000006aa btq %rcx, %rdx - 0x0f, 0x83, 0x37, 0xfb, 0xff, 0xff, //0x000006ae jae LBB0_3 - //0x000006b4 LBB0_86 - 0x48, 0x89, 0x75, 0xc0, //0x000006b4 movq %rsi, $-64(%rbp) - 0x48, 0x83, 0xff, 0x10, //0x000006b8 cmpq $16, %rdi - 0x0f, 0x82, 0x14, 0x27, 0x00, 0x00, //0x000006bc jb LBB0_472 - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000006c2 movq $-1, %r9 - 0x45, 0x31, 0xed, //0x000006c9 xorl %r13d, %r13d - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x000006cc movq $-1, %r15 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000006d3 movq $-1, %r8 - 0x49, 0x89, 0xfa, //0x000006da movq %rdi, %r10 - 0x90, 0x90, 0x90, //0x000006dd .p2align 4, 0x90 - //0x000006e0 LBB0_88 - 0xf3, 0x43, 0x0f, 0x6f, 0x1c, 0x2e, //0x000006e0 movdqu (%r14,%r13), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x000006e6 movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x64, 0x25, 0xae, 0xf9, 0xff, 0xff, //0x000006ea pcmpgtb $-1618(%rip), %xmm4 /* LCPI0_10+0(%rip) */ - 0x66, 0x41, 0x0f, 0x6f, 0xef, //0x000006f2 movdqa %xmm15, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x000006f7 pcmpgtb %xmm3, %xmm5 - 0x66, 0x0f, 0xdb, 0xec, //0x000006fb pand %xmm4, %xmm5 - 0x66, 0x0f, 0x6f, 0xe3, //0x000006ff movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x74, 0x25, 0xb5, 0xf9, 0xff, 0xff, //0x00000703 pcmpeqb $-1611(%rip), %xmm4 /* LCPI0_12+0(%rip) */ - 0x66, 0x0f, 0x6f, 0xf3, //0x0000070b movdqa %xmm3, %xmm6 - 0x66, 0x0f, 0x74, 0x35, 0xb9, 0xf9, 0xff, 0xff, //0x0000070f pcmpeqb $-1607(%rip), %xmm6 /* LCPI0_13+0(%rip) */ - 0x66, 0x0f, 0xeb, 0xf4, //0x00000717 por %xmm4, %xmm6 - 0x66, 0x0f, 0x6f, 0xe3, //0x0000071b movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xe1, //0x0000071f pand %xmm9, %xmm4 - 0x66, 0x0f, 0x74, 0x1d, 0xb4, 0xf9, 0xff, 0xff, //0x00000724 pcmpeqb $-1612(%rip), %xmm3 /* LCPI0_14+0(%rip) */ - 0x66, 0x41, 0x0f, 0x74, 0xe3, //0x0000072c pcmpeqb %xmm11, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x00000731 pmovmskb %xmm4, %edx - 0x66, 0x0f, 0xeb, 0xe3, //0x00000735 por %xmm3, %xmm4 - 0x66, 0x0f, 0xeb, 0xee, //0x00000739 por %xmm6, %xmm5 - 0x66, 0x0f, 0xeb, 0xec, //0x0000073d por %xmm4, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000741 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0xd7, 0xf6, //0x00000746 pmovmskb %xmm6, %esi - 0x66, 0x0f, 0xd7, 0xcd, //0x0000074a pmovmskb %xmm5, %ecx - 0xf7, 0xd1, //0x0000074e notl %ecx - 0x0f, 0xbc, 0xc9, //0x00000750 bsfl %ecx, %ecx - 0x83, 0xf9, 0x10, //0x00000753 cmpl $16, %ecx - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00000756 je LBB0_90 - 0xbb, 0xff, 0xff, 0xff, 0xff, //0x0000075c movl $-1, %ebx - 0xd3, 0xe3, //0x00000761 shll %cl, %ebx - 0xf7, 0xd3, //0x00000763 notl %ebx - 0x41, 0x21, 0xdb, //0x00000765 andl %ebx, %r11d - 0x21, 0xda, //0x00000768 andl %ebx, %edx - 0x21, 0xf3, //0x0000076a andl %esi, %ebx - 0x89, 0xde, //0x0000076c movl %ebx, %esi - //0x0000076e LBB0_90 - 0x41, 0x8d, 0x5b, 0xff, //0x0000076e leal $-1(%r11), %ebx - 0x44, 0x21, 0xdb, //0x00000772 andl %r11d, %ebx - 0x0f, 0x85, 0x12, 0x1f, 0x00, 0x00, //0x00000775 jne LBB0_429 - 0x8d, 0x5a, 0xff, //0x0000077b leal $-1(%rdx), %ebx - 0x21, 0xd3, //0x0000077e andl %edx, %ebx - 0x0f, 0x85, 0x07, 0x1f, 0x00, 0x00, //0x00000780 jne LBB0_429 - 0x8d, 0x5e, 0xff, //0x00000786 leal $-1(%rsi), %ebx - 0x21, 0xf3, //0x00000789 andl %esi, %ebx - 0x0f, 0x85, 0xfc, 0x1e, 0x00, 0x00, //0x0000078b jne LBB0_429 - 0x45, 0x85, 0xdb, //0x00000791 testl %r11d, %r11d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00000794 je LBB0_96 - 0x41, 0x0f, 0xbc, 0xdb, //0x0000079a bsfl %r11d, %ebx - 0x49, 0x83, 0xf8, 0xff, //0x0000079e cmpq $-1, %r8 - 0x0f, 0x85, 0x75, 0x22, 0x00, 0x00, //0x000007a2 jne LBB0_436 - 0x4c, 0x01, 0xeb, //0x000007a8 addq %r13, %rbx - 0x49, 0x89, 0xd8, //0x000007ab movq %rbx, %r8 - //0x000007ae LBB0_96 - 0x85, 0xd2, //0x000007ae testl %edx, %edx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000007b0 je LBB0_99 - 0x0f, 0xbc, 0xd2, //0x000007b6 bsfl %edx, %edx - 0x49, 0x83, 0xff, 0xff, //0x000007b9 cmpq $-1, %r15 - 0x0f, 0x85, 0xd1, 0x20, 0x00, 0x00, //0x000007bd jne LBB0_435 - 0x4c, 0x01, 0xea, //0x000007c3 addq %r13, %rdx - 0x49, 0x89, 0xd7, //0x000007c6 movq %rdx, %r15 - //0x000007c9 LBB0_99 - 0x85, 0xf6, //0x000007c9 testl %esi, %esi - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000007cb je LBB0_102 - 0x0f, 0xbc, 0xd6, //0x000007d1 bsfl %esi, %edx - 0x49, 0x83, 0xf9, 0xff, //0x000007d4 cmpq $-1, %r9 - 0x0f, 0x85, 0xb6, 0x20, 0x00, 0x00, //0x000007d8 jne LBB0_435 - 0x4c, 0x01, 0xea, //0x000007de addq %r13, %rdx - 0x49, 0x89, 0xd1, //0x000007e1 movq %rdx, %r9 - //0x000007e4 LBB0_102 - 0x83, 0xf9, 0x10, //0x000007e4 cmpl $16, %ecx - 0x0f, 0x85, 0xbb, 0x07, 0x00, 0x00, //0x000007e7 jne LBB0_183 - 0x49, 0x83, 0xc2, 0xf0, //0x000007ed addq $-16, %r10 - 0x49, 0x83, 0xc5, 0x10, //0x000007f1 addq $16, %r13 - 0x49, 0x83, 0xfa, 0x0f, //0x000007f5 cmpq $15, %r10 - 0x0f, 0x87, 0xe1, 0xfe, 0xff, 0xff, //0x000007f9 ja LBB0_88 - 0x4b, 0x8d, 0x0c, 0x2e, //0x000007ff leaq (%r14,%r13), %rcx - 0x49, 0x89, 0xcb, //0x00000803 movq %rcx, %r11 - 0x4c, 0x39, 0xef, //0x00000806 cmpq %r13, %rdi - 0x0f, 0x84, 0xa2, 0x07, 0x00, 0x00, //0x00000809 je LBB0_184 - //0x0000080f LBB0_105 - 0x4e, 0x8d, 0x1c, 0x11, //0x0000080f leaq (%rcx,%r10), %r11 - 0x48, 0x89, 0xca, //0x00000813 movq %rcx, %rdx - 0x48, 0x2b, 0x55, 0xc0, //0x00000816 subq $-64(%rbp), %rdx - 0x4c, 0x29, 0xe2, //0x0000081a subq %r12, %rdx - 0x48, 0x83, 0xc2, 0x01, //0x0000081d addq $1, %rdx - 0x31, 0xff, //0x00000821 xorl %edi, %edi - 0x4c, 0x8d, 0x2d, 0x2a, 0x37, 0x00, 0x00, //0x00000823 leaq $14122(%rip), %r13 /* LJTI0_3+0(%rip) */ - 0xe9, 0x2e, 0x00, 0x00, 0x00, //0x0000082a jmp LBB0_110 - //0x0000082f LBB0_106 - 0x83, 0xfe, 0x65, //0x0000082f cmpl $101, %esi - 0x0f, 0x85, 0xbc, 0x09, 0x00, 0x00, //0x00000832 jne LBB0_212 - //0x00000838 LBB0_107 - 0x49, 0x83, 0xff, 0xff, //0x00000838 cmpq $-1, %r15 - 0x0f, 0x85, 0x76, 0x1e, 0x00, 0x00, //0x0000083c jne LBB0_433 - 0x4c, 0x8d, 0x3c, 0x3a, //0x00000842 leaq (%rdx,%rdi), %r15 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000846 .p2align 4, 0x90 - //0x00000850 LBB0_109 - 0x48, 0x83, 0xc7, 0x01, //0x00000850 addq $1, %rdi - 0x49, 0x39, 0xfa, //0x00000854 cmpq %rdi, %r10 - 0x0f, 0x84, 0x54, 0x07, 0x00, 0x00, //0x00000857 je LBB0_184 - //0x0000085d LBB0_110 - 0x0f, 0xbe, 0x34, 0x39, //0x0000085d movsbl (%rcx,%rdi), %esi - 0x8d, 0x5e, 0xd0, //0x00000861 leal $-48(%rsi), %ebx - 0x83, 0xfb, 0x0a, //0x00000864 cmpl $10, %ebx - 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00000867 jb LBB0_109 - 0x8d, 0x5e, 0xd5, //0x0000086d leal $-43(%rsi), %ebx - 0x83, 0xfb, 0x1a, //0x00000870 cmpl $26, %ebx - 0x0f, 0x87, 0xb6, 0xff, 0xff, 0xff, //0x00000873 ja LBB0_106 - 0x49, 0x63, 0x74, 0x9d, 0x00, //0x00000879 movslq (%r13,%rbx,4), %rsi - 0x4c, 0x01, 0xee, //0x0000087e addq %r13, %rsi - 0xff, 0xe6, //0x00000881 jmpq *%rsi - //0x00000883 LBB0_113 - 0x49, 0x83, 0xf9, 0xff, //0x00000883 cmpq $-1, %r9 - 0x0f, 0x85, 0x2b, 0x1e, 0x00, 0x00, //0x00000887 jne LBB0_433 - 0x4c, 0x8d, 0x0c, 0x3a, //0x0000088d leaq (%rdx,%rdi), %r9 - 0xe9, 0xba, 0xff, 0xff, 0xff, //0x00000891 jmp LBB0_109 - //0x00000896 LBB0_115 - 0x49, 0x83, 0xf8, 0xff, //0x00000896 cmpq $-1, %r8 - 0x0f, 0x85, 0x18, 0x1e, 0x00, 0x00, //0x0000089a jne LBB0_433 - 0x4c, 0x8d, 0x04, 0x3a, //0x000008a0 leaq (%rdx,%rdi), %r8 - 0xe9, 0xa7, 0xff, 0xff, 0xff, //0x000008a4 jmp LBB0_109 - //0x000008a9 LBB0_117 - 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x000008a9 cmpq $4095, %r9 - 0x0f, 0x8f, 0x36, 0x31, 0x00, 0x00, //0x000008b0 jg LBB0_634 - 0x48, 0x89, 0x75, 0x90, //0x000008b6 movq %rsi, $-112(%rbp) - 0x49, 0x8d, 0x41, 0x01, //0x000008ba leaq $1(%r9), %rax - 0x49, 0x89, 0x45, 0x00, //0x000008be movq %rax, (%r13) - 0x4b, 0xc7, 0x44, 0xcd, 0x08, 0x00, 0x00, 0x00, 0x00, //0x000008c2 movq $0, $8(%r13,%r9,8) - 0xe9, 0xf0, 0xf8, 0xff, 0xff, //0x000008cb jmp LBB0_4 - //0x000008d0 LBB0_64 - 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x02, 0x00, 0x00, 0x00, //0x000008d0 movq $2, (%r13,%r9,8) - 0x48, 0x8b, 0x4d, 0x98, //0x000008d9 movq $-104(%rbp), %rcx - 0xf6, 0xc1, 0x40, //0x000008dd testb $64, %cl - 0x48, 0x89, 0x75, 0x90, //0x000008e0 movq %rsi, $-112(%rbp) - 0x0f, 0x85, 0x9a, 0x03, 0x00, 0x00, //0x000008e4 jne LBB0_147 - 0x49, 0x8b, 0x16, //0x000008ea movq (%r14), %rdx - 0x48, 0x8b, 0x45, 0xa8, //0x000008ed movq $-88(%rbp), %rax - 0x48, 0x8b, 0x40, 0x08, //0x000008f1 movq $8(%rax), %rax - 0xf6, 0xc1, 0x20, //0x000008f5 testb $32, %cl - 0x48, 0x89, 0xd1, //0x000008f8 movq %rdx, %rcx - 0x48, 0x89, 0x55, 0xb0, //0x000008fb movq %rdx, $-80(%rbp) - 0x48, 0x89, 0x45, 0xa0, //0x000008ff movq %rax, $-96(%rbp) - 0x49, 0x89, 0xc1, //0x00000903 movq %rax, %r9 - 0x0f, 0x85, 0xba, 0x06, 0x00, 0x00, //0x00000906 jne LBB0_186 - 0x49, 0x29, 0xd1, //0x0000090c subq %rdx, %r9 - 0x0f, 0x84, 0x23, 0x33, 0x00, 0x00, //0x0000090f je LBB0_646 - 0x49, 0x83, 0xf9, 0x40, //0x00000915 cmpq $64, %r9 - 0x0f, 0x82, 0x30, 0x26, 0x00, 0x00, //0x00000919 jb LBB0_492 - 0x48, 0x8b, 0x45, 0xb0, //0x0000091f movq $-80(%rbp), %rax - 0x49, 0x89, 0xc6, //0x00000923 movq %rax, %r14 - 0x49, 0xf7, 0xd6, //0x00000926 notq %r14 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000929 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00000931 xorl %r8d, %r8d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000934 .p2align 4, 0x90 - //0x00000940 LBB0_69 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00000940 movdqu (%r12,%rax), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00000946 movdqu $16(%r12,%rax), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000094d movdqu $32(%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000954 movdqu $48(%r12,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xfb, //0x0000095b movdqa %xmm3, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000095f pcmpeqb %xmm0, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00000963 pmovmskb %xmm7, %r10d - 0x66, 0x0f, 0x6f, 0xfc, //0x00000968 movdqa %xmm4, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000096c pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xdf, //0x00000970 pmovmskb %xmm7, %ebx - 0x66, 0x0f, 0x6f, 0xfd, //0x00000974 movdqa %xmm5, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x00000978 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x0000097c pmovmskb %xmm7, %edi - 0x66, 0x0f, 0x6f, 0xfe, //0x00000980 movdqa %xmm6, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x00000984 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xd7, //0x00000988 pmovmskb %xmm7, %edx - 0x66, 0x0f, 0x74, 0xd9, //0x0000098c pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000990 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x74, 0xe1, //0x00000995 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x00000999 pmovmskb %xmm4, %ecx - 0x66, 0x0f, 0x74, 0xe9, //0x0000099d pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x000009a1 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x74, 0xf1, //0x000009a5 pcmpeqb %xmm1, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x000009a9 pmovmskb %xmm6, %r15d - 0x48, 0xc1, 0xe2, 0x30, //0x000009ae shlq $48, %rdx - 0x48, 0xc1, 0xe7, 0x20, //0x000009b2 shlq $32, %rdi - 0x48, 0x09, 0xd7, //0x000009b6 orq %rdx, %rdi - 0x48, 0xc1, 0xe3, 0x10, //0x000009b9 shlq $16, %rbx - 0x48, 0x09, 0xfb, //0x000009bd orq %rdi, %rbx - 0x49, 0x09, 0xda, //0x000009c0 orq %rbx, %r10 - 0x49, 0xc1, 0xe7, 0x30, //0x000009c3 shlq $48, %r15 - 0x48, 0xc1, 0xe6, 0x20, //0x000009c7 shlq $32, %rsi - 0x4c, 0x09, 0xfe, //0x000009cb orq %r15, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x000009ce shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x000009d2 orq %rsi, %rcx - 0x49, 0x09, 0xcb, //0x000009d5 orq %rcx, %r11 - 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000009d8 jne LBB0_121 - 0x4d, 0x85, 0xc0, //0x000009de testq %r8, %r8 - 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x000009e1 jne LBB0_123 - 0x45, 0x31, 0xc0, //0x000009e7 xorl %r8d, %r8d - 0x4d, 0x85, 0xd2, //0x000009ea testq %r10, %r10 - 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x000009ed jne LBB0_124 - //0x000009f3 LBB0_72 - 0x49, 0x83, 0xc1, 0xc0, //0x000009f3 addq $-64, %r9 - 0x49, 0x83, 0xc6, 0xc0, //0x000009f7 addq $-64, %r14 - 0x48, 0x83, 0xc0, 0x40, //0x000009fb addq $64, %rax - 0x49, 0x83, 0xf9, 0x3f, //0x000009ff cmpq $63, %r9 - 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x00000a03 ja LBB0_69 - 0xe9, 0x8d, 0x1e, 0x00, 0x00, //0x00000a09 jmp LBB0_73 - //0x00000a0e LBB0_121 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00000a0e cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00000a13 jne LBB0_123 - 0x49, 0x0f, 0xbc, 0xcb, //0x00000a19 bsfq %r11, %rcx - 0x48, 0x01, 0xc1, //0x00000a1d addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00000a20 movq %rcx, $-56(%rbp) - //0x00000a24 LBB0_123 - 0x4c, 0x89, 0xc1, //0x00000a24 movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00000a27 notq %rcx - 0x4c, 0x21, 0xd9, //0x00000a2a andq %r11, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x00000a2d leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xc2, //0x00000a31 orq %r8, %rdx - 0x48, 0x89, 0xd6, //0x00000a34 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000a37 notq %rsi - 0x4c, 0x21, 0xde, //0x00000a3a andq %r11, %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000a3d movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfe, //0x00000a47 andq %rdi, %rsi - 0x45, 0x31, 0xc0, //0x00000a4a xorl %r8d, %r8d - 0x48, 0x01, 0xce, //0x00000a4d addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc0, //0x00000a50 setb %r8b - 0x48, 0x01, 0xf6, //0x00000a54 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000a57 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00000a61 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00000a64 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00000a67 notq %rsi - 0x49, 0x21, 0xf2, //0x00000a6a andq %rsi, %r10 - 0x4d, 0x85, 0xd2, //0x00000a6d testq %r10, %r10 - 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000a70 je LBB0_72 - //0x00000a76 LBB0_124 - 0x49, 0x0f, 0xbc, 0xc2, //0x00000a76 bsfq %r10, %rax - 0x4c, 0x29, 0xf0, //0x00000a7a subq %r14, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x00000a7d movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000a81 movabsq $4294977024, %r11 - 0xe9, 0x73, 0x0d, 0x00, 0x00, //0x00000a8b jmp LBB0_304 - //0x00000a90 LBB0_125 - 0x48, 0x8b, 0x4d, 0xa8, //0x00000a90 movq $-88(%rbp), %rcx - 0x4c, 0x8b, 0x49, 0x08, //0x00000a94 movq $8(%rcx), %r9 - 0x4d, 0x8b, 0x06, //0x00000a98 movq (%r14), %r8 - 0x4f, 0x8d, 0x14, 0x04, //0x00000a9b leaq (%r12,%r8), %r10 - 0x4d, 0x29, 0xc1, //0x00000a9f subq %r8, %r9 - 0x49, 0x83, 0xf9, 0x20, //0x00000aa2 cmpq $32, %r9 - 0x0f, 0x8c, 0xbc, 0x1b, 0x00, 0x00, //0x00000aa6 jl LBB0_134 - 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x00000aac movl $32, %r14d - 0x31, 0xd2, //0x00000ab2 xorl %edx, %edx - 0x45, 0x31, 0xdb, //0x00000ab4 xorl %r11d, %r11d - 0xe9, 0x2a, 0x00, 0x00, 0x00, //0x00000ab7 jmp LBB0_127 - 0x90, 0x90, 0x90, 0x90, //0x00000abc .p2align 4, 0x90 - //0x00000ac0 LBB0_130 - 0x45, 0x31, 0xdb, //0x00000ac0 xorl %r11d, %r11d - 0x48, 0x85, 0xff, //0x00000ac3 testq %rdi, %rdi - 0x0f, 0x85, 0xa5, 0x00, 0x00, 0x00, //0x00000ac6 jne LBB0_129 - //0x00000acc LBB0_131 - 0x48, 0x83, 0xc2, 0x20, //0x00000acc addq $32, %rdx - 0x4b, 0x8d, 0x0c, 0x31, //0x00000ad0 leaq (%r9,%r14), %rcx - 0x48, 0x83, 0xc1, 0xe0, //0x00000ad4 addq $-32, %rcx - 0x49, 0x83, 0xc6, 0xe0, //0x00000ad8 addq $-32, %r14 - 0x48, 0x83, 0xf9, 0x3f, //0x00000adc cmpq $63, %rcx - 0x0f, 0x8e, 0x65, 0x1b, 0x00, 0x00, //0x00000ae0 jle LBB0_132 - //0x00000ae6 LBB0_127 - 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x12, //0x00000ae6 movdqu (%r10,%rdx), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x12, 0x10, //0x00000aec movdqu $16(%r10,%rdx), %xmm5 - 0x66, 0x0f, 0x6f, 0xf4, //0x00000af3 movdqa %xmm4, %xmm6 - 0x66, 0x0f, 0x74, 0xf0, //0x00000af7 pcmpeqb %xmm0, %xmm6 - 0x66, 0x0f, 0xd7, 0xf6, //0x00000afb pmovmskb %xmm6, %esi - 0x66, 0x0f, 0x6f, 0xf5, //0x00000aff movdqa %xmm5, %xmm6 - 0x66, 0x0f, 0x74, 0xf0, //0x00000b03 pcmpeqb %xmm0, %xmm6 - 0x66, 0x0f, 0xd7, 0xfe, //0x00000b07 pmovmskb %xmm6, %edi - 0x48, 0xc1, 0xe7, 0x10, //0x00000b0b shlq $16, %rdi - 0x48, 0x09, 0xf7, //0x00000b0f orq %rsi, %rdi - 0x66, 0x0f, 0x74, 0xe1, //0x00000b12 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x00000b16 pmovmskb %xmm4, %ecx - 0x66, 0x0f, 0x74, 0xe9, //0x00000b1a pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00000b1e pmovmskb %xmm5, %esi - 0x48, 0xc1, 0xe6, 0x10, //0x00000b22 shlq $16, %rsi - 0x48, 0x09, 0xce, //0x00000b26 orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00000b29 movq %rsi, %rcx - 0x4c, 0x09, 0xd9, //0x00000b2c orq %r11, %rcx - 0x0f, 0x84, 0x8b, 0xff, 0xff, 0xff, //0x00000b2f je LBB0_130 - 0x44, 0x89, 0xd9, //0x00000b35 movl %r11d, %ecx - 0xf7, 0xd1, //0x00000b38 notl %ecx - 0x21, 0xf1, //0x00000b3a andl %esi, %ecx - 0x44, 0x8d, 0x3c, 0x09, //0x00000b3c leal (%rcx,%rcx), %r15d - 0x45, 0x09, 0xdf, //0x00000b40 orl %r11d, %r15d - 0x44, 0x89, 0xfb, //0x00000b43 movl %r15d, %ebx - 0xf7, 0xd3, //0x00000b46 notl %ebx - 0x21, 0xf3, //0x00000b48 andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000b4a andl $-1431655766, %ebx - 0x45, 0x31, 0xdb, //0x00000b50 xorl %r11d, %r11d - 0x01, 0xcb, //0x00000b53 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc3, //0x00000b55 setb %r11b - 0x01, 0xdb, //0x00000b59 addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00000b5b xorl $1431655765, %ebx - 0x44, 0x21, 0xfb, //0x00000b61 andl %r15d, %ebx - 0xf7, 0xd3, //0x00000b64 notl %ebx - 0x21, 0xdf, //0x00000b66 andl %ebx, %edi - 0x48, 0x85, 0xff, //0x00000b68 testq %rdi, %rdi - 0x0f, 0x84, 0x5b, 0xff, 0xff, 0xff, //0x00000b6b je LBB0_131 - //0x00000b71 LBB0_129 - 0x0f, 0xbc, 0xc7, //0x00000b71 bsfl %edi, %eax - 0x4c, 0x01, 0xc0, //0x00000b74 addq %r8, %rax - 0x4c, 0x8d, 0x14, 0x02, //0x00000b77 leaq (%rdx,%rax), %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00000b7b addq $1, %r10 - 0x4c, 0x8b, 0x75, 0xd0, //0x00000b7f movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000b83 movabsq $4294977024, %r11 - 0x4d, 0x89, 0x16, //0x00000b8d movq %r10, (%r14) - 0x4d, 0x85, 0xc0, //0x00000b90 testq %r8, %r8 - 0x0f, 0x8f, 0x27, 0xf6, 0xff, 0xff, //0x00000b93 jg LBB0_4 - 0xe9, 0x63, 0x2e, 0x00, 0x00, //0x00000b99 jmp LBB0_608 - //0x00000b9e LBB0_135 - 0x48, 0x89, 0xf9, //0x00000b9e movq %rdi, %rcx - 0x48, 0x29, 0xf1, //0x00000ba1 subq %rsi, %rcx - 0x48, 0x83, 0xf9, 0x10, //0x00000ba4 cmpq $16, %rcx - 0x0f, 0x82, 0x0d, 0x22, 0x00, 0x00, //0x00000ba8 jb LBB0_470 - 0x48, 0x89, 0xf1, //0x00000bae movq %rsi, %rcx - 0x48, 0xf7, 0xd9, //0x00000bb1 negq %rcx - 0x48, 0x89, 0xf0, //0x00000bb4 movq %rsi, %rax - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000bb7 .p2align 4, 0x90 - //0x00000bc0 LBB0_137 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00000bc0 movdqu (%r12,%rax), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x00000bc6 movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0x74, 0xe6, //0x00000bca pcmpeqb %xmm14, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xd9, //0x00000bcf pand %xmm9, %xmm3 - 0x66, 0x0f, 0x74, 0xda, //0x00000bd4 pcmpeqb %xmm2, %xmm3 - 0x66, 0x0f, 0xeb, 0xdc, //0x00000bd8 por %xmm4, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x00000bdc pmovmskb %xmm3, %edx - 0x85, 0xd2, //0x00000be0 testl %edx, %edx - 0x0f, 0x85, 0xbe, 0xf5, 0xff, 0xff, //0x00000be2 jne LBB0_613 - 0x48, 0x83, 0xc0, 0x10, //0x00000be8 addq $16, %rax - 0x48, 0x8d, 0x14, 0x0f, //0x00000bec leaq (%rdi,%rcx), %rdx - 0x48, 0x83, 0xc2, 0xf0, //0x00000bf0 addq $-16, %rdx - 0x48, 0x83, 0xc1, 0xf0, //0x00000bf4 addq $-16, %rcx - 0x48, 0x83, 0xfa, 0x0f, //0x00000bf8 cmpq $15, %rdx - 0x0f, 0x87, 0xbe, 0xff, 0xff, 0xff, //0x00000bfc ja LBB0_137 - 0x4c, 0x89, 0xe0, //0x00000c02 movq %r12, %rax - 0x48, 0x29, 0xc8, //0x00000c05 subq %rcx, %rax - 0x48, 0x01, 0xcf, //0x00000c08 addq %rcx, %rdi - 0x48, 0x89, 0xf9, //0x00000c0b movq %rdi, %rcx - 0x48, 0x85, 0xc9, //0x00000c0e testq %rcx, %rcx - 0x0f, 0x84, 0xb1, 0x21, 0x00, 0x00, //0x00000c11 je LBB0_471 - //0x00000c17 LBB0_140 - 0x48, 0x8d, 0x3c, 0x08, //0x00000c17 leaq (%rax,%rcx), %rdi - 0x31, 0xd2, //0x00000c1b xorl %edx, %edx - //0x00000c1d LBB0_141 - 0x0f, 0xb6, 0x1c, 0x10, //0x00000c1d movzbl (%rax,%rdx), %ebx - 0x80, 0xfb, 0x2c, //0x00000c21 cmpb $44, %bl - 0x0f, 0x84, 0x4c, 0x1a, 0x00, 0x00, //0x00000c24 je LBB0_428 - 0x80, 0xfb, 0x7d, //0x00000c2a cmpb $125, %bl - 0x0f, 0x84, 0x43, 0x1a, 0x00, 0x00, //0x00000c2d je LBB0_428 - 0x80, 0xfb, 0x5d, //0x00000c33 cmpb $93, %bl - 0x0f, 0x84, 0x3a, 0x1a, 0x00, 0x00, //0x00000c36 je LBB0_428 - 0x48, 0x83, 0xc2, 0x01, //0x00000c3c addq $1, %rdx - 0x48, 0x39, 0xd1, //0x00000c40 cmpq %rdx, %rcx - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x00000c43 jne LBB0_141 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00000c49 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00000c4e movdqa %xmm2, %xmm5 - 0x48, 0x89, 0xf8, //0x00000c52 movq %rdi, %rax - //0x00000c55 LBB0_146 - 0x4c, 0x29, 0xe0, //0x00000c55 subq %r12, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x00000c58 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00000c5c movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000c60 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x00000c6a movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00000c6e movdqa %xmm6, %xmm13 - 0x49, 0x89, 0x06, //0x00000c73 movq %rax, (%r14) - 0x48, 0x85, 0xf6, //0x00000c76 testq %rsi, %rsi - 0x0f, 0x8f, 0x41, 0xf5, 0xff, 0xff, //0x00000c79 jg LBB0_4 - 0xe9, 0xd5, 0x2d, 0x00, 0x00, //0x00000c7f jmp LBB0_614 - //0x00000c84 LBB0_147 - 0x48, 0x8b, 0x4d, 0xa8, //0x00000c84 movq $-88(%rbp), %rcx - 0x4c, 0x8b, 0x49, 0x08, //0x00000c88 movq $8(%rcx), %r9 - 0x4d, 0x8b, 0x06, //0x00000c8c movq (%r14), %r8 - 0x4f, 0x8d, 0x14, 0x04, //0x00000c8f leaq (%r12,%r8), %r10 - 0x4d, 0x29, 0xc1, //0x00000c93 subq %r8, %r9 - 0x49, 0x83, 0xf9, 0x20, //0x00000c96 cmpq $32, %r9 - 0x0f, 0x8c, 0x4e, 0x1a, 0x00, 0x00, //0x00000c9a jl LBB0_156 - 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x00000ca0 movl $32, %r14d - 0x31, 0xd2, //0x00000ca6 xorl %edx, %edx - 0x45, 0x31, 0xdb, //0x00000ca8 xorl %r11d, %r11d - 0xe9, 0x26, 0x00, 0x00, 0x00, //0x00000cab jmp LBB0_149 - //0x00000cb0 .p2align 4, 0x90 - //0x00000cb0 LBB0_152 + 0x48, 0xc7, 0x45, 0x90, 0xff, 0xff, 0xff, 0xff, //0x0000012c movq $-1, $-112(%rbp) + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000134 movabsq $4294977024, %r11 + 0xf3, 0x0f, 0x6f, 0x05, 0xca, 0xfe, 0xff, 0xff, //0x0000013e movdqu $-310(%rip), %xmm0 /* LCPI0_1+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x0d, 0xd2, 0xfe, 0xff, 0xff, //0x00000146 movdqu $-302(%rip), %xmm1 /* LCPI0_2+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x25, 0xd9, 0xfe, 0xff, 0xff, //0x0000014e movdqu $-295(%rip), %xmm12 /* LCPI0_3+0(%rip) */ + 0x66, 0x45, 0x0f, 0x76, 0xd2, //0x00000157 pcmpeqd %xmm10, %xmm10 + 0xf3, 0x44, 0x0f, 0x6f, 0x3d, 0x4b, 0xff, 0xff, 0xff, //0x0000015c movdqu $-181(%rip), %xmm15 /* LCPI0_11+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x0d, 0x22, 0xff, 0xff, 0xff, //0x00000165 movdqu $-222(%rip), %xmm9 /* LCPI0_9+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x79, 0xff, 0xff, 0xff, //0x0000016e movdqu $-135(%rip), %xmm11 /* LCPI0_15+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x35, 0x00, 0xff, 0xff, 0xff, //0x00000177 movdqu $-256(%rip), %xmm14 /* LCPI0_8+0(%rip) */ + 0xf3, 0x0f, 0x6f, 0x15, 0xe8, 0xfe, 0xff, 0xff, //0x00000180 movdqu $-280(%rip), %xmm2 /* LCPI0_7+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xaf, 0xfe, 0xff, 0xff, //0x00000188 movdqu $-337(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0xf3, 0x44, 0x0f, 0x6f, 0x05, 0xb6, 0xfe, 0xff, 0xff, //0x00000191 movdqu $-330(%rip), %xmm8 /* LCPI0_5+0(%rip) */ + 0x48, 0x89, 0x75, 0xd0, //0x0000019a movq %rsi, $-48(%rbp) + 0x48, 0x89, 0x55, 0xb0, //0x0000019e movq %rdx, $-80(%rbp) + 0xe9, 0x3d, 0x00, 0x00, 0x00, //0x000001a2 jmp LBB0_6 + //0x000001a7 LBB0_1 + 0x0f, 0xbc, 0xc3, //0x000001a7 bsfl %ebx, %eax + 0x4c, 0x01, 0xc0, //0x000001aa addq %r8, %rax + 0x4c, 0x8d, 0x14, 0x06, //0x000001ad leaq (%rsi,%rax), %r10 + 0x49, 0x83, 0xc2, 0x01, //0x000001b1 addq $1, %r10 + 0x4c, 0x8b, 0x75, 0xd0, //0x000001b5 movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000001b9 movabsq $4294977024, %r11 + //0x000001c3 LBB0_2 + 0x4d, 0x89, 0x16, //0x000001c3 movq %r10, (%r14) + //0x000001c6 LBB0_3 + 0x4d, 0x85, 0xc0, //0x000001c6 testq %r8, %r8 + 0x0f, 0x8e, 0x8d, 0x38, 0x00, 0x00, //0x000001c9 jle LBB0_622 + 0x90, //0x000001cf .p2align 4, 0x90 + //0x000001d0 LBB0_4 + 0x4d, 0x8b, 0x45, 0x00, //0x000001d0 movq (%r13), %r8 + 0x48, 0x8b, 0x55, 0x90, //0x000001d4 movq $-112(%rbp), %rdx + 0x48, 0x89, 0xd0, //0x000001d8 movq %rdx, %rax + 0x4d, 0x85, 0xc0, //0x000001db testq %r8, %r8 + 0x0f, 0x84, 0xcb, 0x38, 0x00, 0x00, //0x000001de je LBB0_650 + //0x000001e4 LBB0_6 + 0x48, 0x8b, 0x4d, 0x90, //0x000001e4 movq $-112(%rbp), %rcx + 0x48, 0x8b, 0x45, 0xa8, //0x000001e8 movq $-88(%rbp), %rax + 0x4c, 0x8b, 0x20, //0x000001ec movq (%rax), %r12 + 0x48, 0x8b, 0x40, 0x08, //0x000001ef movq $8(%rax), %rax + 0x49, 0x8b, 0x36, //0x000001f3 movq (%r14), %rsi + 0x48, 0x39, 0xc6, //0x000001f6 cmpq %rax, %rsi + 0x0f, 0x83, 0x31, 0x00, 0x00, 0x00, //0x000001f9 jae LBB0_11 + 0x41, 0x8a, 0x14, 0x34, //0x000001ff movb (%r12,%rsi), %dl + 0x80, 0xfa, 0x0d, //0x00000203 cmpb $13, %dl + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x00000206 je LBB0_11 + 0x80, 0xfa, 0x20, //0x0000020c cmpb $32, %dl + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x0000020f je LBB0_11 + 0x80, 0xc2, 0xf7, //0x00000215 addb $-9, %dl + 0x80, 0xfa, 0x01, //0x00000218 cmpb $1, %dl + 0x0f, 0x86, 0x0f, 0x00, 0x00, 0x00, //0x0000021b jbe LBB0_11 + 0x48, 0x89, 0xf2, //0x00000221 movq %rsi, %rdx + 0xe9, 0xff, 0x00, 0x00, 0x00, //0x00000224 jmp LBB0_32 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000229 .p2align 4, 0x90 + //0x00000230 LBB0_11 + 0x48, 0x8d, 0x56, 0x01, //0x00000230 leaq $1(%rsi), %rdx + 0x48, 0x39, 0xc2, //0x00000234 cmpq %rax, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000237 jae LBB0_15 + 0x41, 0x8a, 0x1c, 0x14, //0x0000023d movb (%r12,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x00000241 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000244 je LBB0_15 + 0x80, 0xfb, 0x20, //0x0000024a cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000024d je LBB0_15 + 0x80, 0xc3, 0xf7, //0x00000253 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000256 cmpb $1, %bl + 0x0f, 0x87, 0xc9, 0x00, 0x00, 0x00, //0x00000259 ja LBB0_32 + 0x90, //0x0000025f .p2align 4, 0x90 + //0x00000260 LBB0_15 + 0x48, 0x8d, 0x56, 0x02, //0x00000260 leaq $2(%rsi), %rdx + 0x48, 0x39, 0xc2, //0x00000264 cmpq %rax, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000267 jae LBB0_19 + 0x41, 0x8a, 0x1c, 0x14, //0x0000026d movb (%r12,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x00000271 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000274 je LBB0_19 + 0x80, 0xfb, 0x20, //0x0000027a cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x0000027d je LBB0_19 + 0x80, 0xc3, 0xf7, //0x00000283 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x00000286 cmpb $1, %bl + 0x0f, 0x87, 0x99, 0x00, 0x00, 0x00, //0x00000289 ja LBB0_32 + 0x90, //0x0000028f .p2align 4, 0x90 + //0x00000290 LBB0_19 + 0x48, 0x8d, 0x56, 0x03, //0x00000290 leaq $3(%rsi), %rdx + 0x48, 0x39, 0xc2, //0x00000294 cmpq %rax, %rdx + 0x0f, 0x83, 0x23, 0x00, 0x00, 0x00, //0x00000297 jae LBB0_23 + 0x41, 0x8a, 0x1c, 0x14, //0x0000029d movb (%r12,%rdx), %bl + 0x80, 0xfb, 0x0d, //0x000002a1 cmpb $13, %bl + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x000002a4 je LBB0_23 + 0x80, 0xfb, 0x20, //0x000002aa cmpb $32, %bl + 0x0f, 0x84, 0x0d, 0x00, 0x00, 0x00, //0x000002ad je LBB0_23 + 0x80, 0xc3, 0xf7, //0x000002b3 addb $-9, %bl + 0x80, 0xfb, 0x01, //0x000002b6 cmpb $1, %bl + 0x0f, 0x87, 0x69, 0x00, 0x00, 0x00, //0x000002b9 ja LBB0_32 + 0x90, //0x000002bf .p2align 4, 0x90 + //0x000002c0 LBB0_23 + 0x48, 0x83, 0xc6, 0x04, //0x000002c0 addq $4, %rsi + 0x48, 0x39, 0xf0, //0x000002c4 cmpq %rsi, %rax + 0x0f, 0x86, 0x74, 0x37, 0x00, 0x00, //0x000002c7 jbe LBB0_619 + 0x48, 0x39, 0xf0, //0x000002cd cmpq %rsi, %rax + 0x0f, 0x84, 0x3a, 0x00, 0x00, 0x00, //0x000002d0 je LBB0_29 + 0x49, 0x8d, 0x14, 0x04, //0x000002d6 leaq (%r12,%rax), %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000002da .p2align 4, 0x90 + //0x000002e0 LBB0_26 + 0x41, 0x0f, 0xbe, 0x3c, 0x34, //0x000002e0 movsbl (%r12,%rsi), %edi + 0x83, 0xff, 0x20, //0x000002e5 cmpl $32, %edi + 0x0f, 0x87, 0x2e, 0x00, 0x00, 0x00, //0x000002e8 ja LBB0_31 + 0x49, 0x0f, 0xa3, 0xfb, //0x000002ee btq %rdi, %r11 + 0x0f, 0x83, 0x24, 0x00, 0x00, 0x00, //0x000002f2 jae LBB0_31 + 0x48, 0x83, 0xc6, 0x01, //0x000002f8 addq $1, %rsi + 0x48, 0x39, 0xf0, //0x000002fc cmpq %rsi, %rax + 0x0f, 0x85, 0xdb, 0xff, 0xff, 0xff, //0x000002ff jne LBB0_26 + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x00000305 jmp LBB0_30 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000030a .p2align 4, 0x90 + //0x00000310 LBB0_29 + 0x4c, 0x01, 0xe6, //0x00000310 addq %r12, %rsi + 0x48, 0x89, 0xf2, //0x00000313 movq %rsi, %rdx + //0x00000316 LBB0_30 + 0x4c, 0x29, 0xe2, //0x00000316 subq %r12, %rdx + 0x48, 0x89, 0xd6, //0x00000319 movq %rdx, %rsi + //0x0000031c LBB0_31 + 0x48, 0x89, 0xf2, //0x0000031c movq %rsi, %rdx + 0x48, 0x39, 0xc6, //0x0000031f cmpq %rax, %rsi + 0x0f, 0x83, 0x1c, 0x37, 0x00, 0x00, //0x00000322 jae LBB0_620 + //0x00000328 LBB0_32 + 0x48, 0x8d, 0x42, 0x01, //0x00000328 leaq $1(%rdx), %rax + 0x49, 0x89, 0x06, //0x0000032c movq %rax, (%r14) + 0x41, 0x0f, 0xbe, 0x3c, 0x14, //0x0000032f movsbl (%r12,%rdx), %edi + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00000334 movq $-1, %rax + 0x85, 0xff, //0x0000033b testl %edi, %edi + 0x0f, 0x84, 0x6c, 0x37, 0x00, 0x00, //0x0000033d je LBB0_650 + 0x4d, 0x8b, 0x4d, 0x00, //0x00000343 movq (%r13), %r9 + 0x4d, 0x8d, 0x41, 0xff, //0x00000347 leaq $-1(%r9), %r8 + 0x43, 0x8b, 0x5c, 0xcd, 0x00, //0x0000034b movl (%r13,%r9,8), %ebx + 0x48, 0x83, 0xf9, 0xff, //0x00000350 cmpq $-1, %rcx + 0x48, 0x0f, 0x45, 0xd1, //0x00000354 cmovneq %rcx, %rdx + 0x83, 0xc3, 0xff, //0x00000358 addl $-1, %ebx + 0x83, 0xfb, 0x05, //0x0000035b cmpl $5, %ebx + 0x48, 0x89, 0x55, 0x90, //0x0000035e movq %rdx, $-112(%rbp) + 0x0f, 0x87, 0x73, 0x02, 0x00, 0x00, //0x00000362 ja LBB0_78 + 0x48, 0x8d, 0x35, 0xdd, 0x39, 0x00, 0x00, //0x00000368 leaq $14813(%rip), %rsi /* LJTI0_0+0(%rip) */ + 0x48, 0x63, 0x0c, 0x9e, //0x0000036f movslq (%rsi,%rbx,4), %rcx + 0x48, 0x01, 0xf1, //0x00000373 addq %rsi, %rcx + 0xff, 0xe1, //0x00000376 jmpq *%rcx + //0x00000378 LBB0_35 + 0x83, 0xff, 0x2c, //0x00000378 cmpl $44, %edi + 0x0f, 0x84, 0xf0, 0x04, 0x00, 0x00, //0x0000037b je LBB0_117 + 0x83, 0xff, 0x5d, //0x00000381 cmpl $93, %edi + 0x0f, 0x84, 0x3c, 0x02, 0x00, 0x00, //0x00000384 je LBB0_37 + 0xe9, 0x19, 0x37, 0x00, 0x00, //0x0000038a jmp LBB0_649 + //0x0000038f LBB0_38 + 0x40, 0x80, 0xff, 0x5d, //0x0000038f cmpb $93, %dil + 0x0f, 0x84, 0x2d, 0x02, 0x00, 0x00, //0x00000393 je LBB0_37 + 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000399 movq $1, (%r13,%r9,8) + 0x83, 0xff, 0x7b, //0x000003a2 cmpl $123, %edi + 0x0f, 0x86, 0x3d, 0x02, 0x00, 0x00, //0x000003a5 jbe LBB0_79 + 0xe9, 0xf8, 0x36, 0x00, 0x00, //0x000003ab jmp LBB0_649 + //0x000003b0 LBB0_40 + 0x40, 0x80, 0xff, 0x22, //0x000003b0 cmpb $34, %dil + 0x0f, 0x85, 0xee, 0x36, 0x00, 0x00, //0x000003b4 jne LBB0_649 + 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x04, 0x00, 0x00, 0x00, //0x000003ba movq $4, (%r13,%r9,8) + 0x48, 0x8b, 0x4d, 0x98, //0x000003c3 movq $-104(%rbp), %rcx + 0xf6, 0xc1, 0x40, //0x000003c7 testb $64, %cl + 0x0f, 0x85, 0x74, 0x06, 0x00, 0x00, //0x000003ca jne LBB0_125 + 0x49, 0x8b, 0x16, //0x000003d0 movq (%r14), %rdx + 0x48, 0x8b, 0x45, 0xa8, //0x000003d3 movq $-88(%rbp), %rax + 0x48, 0x8b, 0x40, 0x08, //0x000003d7 movq $8(%rax), %rax + 0xf6, 0xc1, 0x20, //0x000003db testb $32, %cl + 0x48, 0x89, 0x45, 0xa0, //0x000003de movq %rax, $-96(%rbp) + 0x48, 0x89, 0x55, 0xc0, //0x000003e2 movq %rdx, $-64(%rbp) + 0x0f, 0x85, 0xa2, 0x09, 0x00, 0x00, //0x000003e6 jne LBB0_162 + 0x49, 0x89, 0xc1, //0x000003ec movq %rax, %r9 + 0x49, 0x29, 0xd1, //0x000003ef subq %rdx, %r9 + 0x0f, 0x84, 0x71, 0x38, 0x00, 0x00, //0x000003f2 je LBB0_656 + 0x49, 0x83, 0xf9, 0x40, //0x000003f8 cmpq $64, %r9 + 0x0f, 0x82, 0xd5, 0x2a, 0x00, 0x00, //0x000003fc jb LBB0_502 + 0x48, 0x8b, 0x45, 0xc0, //0x00000402 movq $-64(%rbp), %rax + 0x49, 0x89, 0xc6, //0x00000406 movq %rax, %r14 + 0x49, 0xf7, 0xd6, //0x00000409 notq %r14 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000040c movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x00000414 xorl %r8d, %r8d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000417 .p2align 4, 0x90 + //0x00000420 LBB0_46 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00000420 movdqu (%r12,%rax), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00000426 movdqu $16(%r12,%rax), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000042d movdqu $32(%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000434 movdqu $48(%r12,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xfb, //0x0000043b movdqa %xmm3, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000043f pcmpeqb %xmm0, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00000443 pmovmskb %xmm7, %r10d + 0x66, 0x0f, 0x6f, 0xfc, //0x00000448 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000044c pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xdf, //0x00000450 pmovmskb %xmm7, %ebx + 0x66, 0x0f, 0x6f, 0xfd, //0x00000454 movdqa %xmm5, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00000458 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x0000045c pmovmskb %xmm7, %esi + 0x66, 0x0f, 0x6f, 0xfe, //0x00000460 movdqa %xmm6, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00000464 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xd7, //0x00000468 pmovmskb %xmm7, %edx + 0x66, 0x0f, 0x74, 0xd9, //0x0000046c pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000470 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x74, 0xe1, //0x00000475 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00000479 pmovmskb %xmm4, %ecx + 0x66, 0x0f, 0x74, 0xe9, //0x0000047d pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00000481 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x74, 0xf1, //0x00000485 pcmpeqb %xmm1, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00000489 pmovmskb %xmm6, %r15d + 0x48, 0xc1, 0xe2, 0x30, //0x0000048e shlq $48, %rdx + 0x48, 0xc1, 0xe6, 0x20, //0x00000492 shlq $32, %rsi + 0x48, 0x09, 0xd6, //0x00000496 orq %rdx, %rsi + 0x48, 0xc1, 0xe3, 0x10, //0x00000499 shlq $16, %rbx + 0x48, 0x09, 0xf3, //0x0000049d orq %rsi, %rbx + 0x49, 0x09, 0xda, //0x000004a0 orq %rbx, %r10 + 0x49, 0xc1, 0xe7, 0x30, //0x000004a3 shlq $48, %r15 + 0x48, 0xc1, 0xe7, 0x20, //0x000004a7 shlq $32, %rdi + 0x4c, 0x09, 0xff, //0x000004ab orq %r15, %rdi + 0x48, 0xc1, 0xe1, 0x10, //0x000004ae shlq $16, %rcx + 0x48, 0x09, 0xf9, //0x000004b2 orq %rdi, %rcx + 0x49, 0x09, 0xcb, //0x000004b5 orq %rcx, %r11 + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x000004b8 jne LBB0_55 + 0x4d, 0x85, 0xc0, //0x000004be testq %r8, %r8 + 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x000004c1 jne LBB0_57 + 0x45, 0x31, 0xc0, //0x000004c7 xorl %r8d, %r8d + 0x4d, 0x85, 0xd2, //0x000004ca testq %r10, %r10 + 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x000004cd jne LBB0_58 + //0x000004d3 LBB0_49 + 0x49, 0x83, 0xc1, 0xc0, //0x000004d3 addq $-64, %r9 + 0x49, 0x83, 0xc6, 0xc0, //0x000004d7 addq $-64, %r14 + 0x48, 0x83, 0xc0, 0x40, //0x000004db addq $64, %rax + 0x49, 0x83, 0xf9, 0x3f, //0x000004df cmpq $63, %r9 + 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x000004e3 ja LBB0_46 + 0xe9, 0x56, 0x22, 0x00, 0x00, //0x000004e9 jmp LBB0_50 + //0x000004ee LBB0_55 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000004ee cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000004f3 jne LBB0_57 + 0x49, 0x0f, 0xbc, 0xcb, //0x000004f9 bsfq %r11, %rcx + 0x48, 0x01, 0xc1, //0x000004fd addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00000500 movq %rcx, $-56(%rbp) + //0x00000504 LBB0_57 + 0x4c, 0x89, 0xc1, //0x00000504 movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00000507 notq %rcx + 0x4c, 0x21, 0xd9, //0x0000050a andq %r11, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x0000050d leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xc2, //0x00000511 orq %r8, %rdx + 0x48, 0x89, 0xd6, //0x00000514 movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000517 notq %rsi + 0x4c, 0x21, 0xde, //0x0000051a andq %r11, %rsi + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000051d movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfe, //0x00000527 andq %rdi, %rsi + 0x45, 0x31, 0xc0, //0x0000052a xorl %r8d, %r8d + 0x48, 0x01, 0xce, //0x0000052d addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc0, //0x00000530 setb %r8b + 0x48, 0x01, 0xf6, //0x00000534 addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000537 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x00000541 xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00000544 andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000547 notq %rsi + 0x49, 0x21, 0xf2, //0x0000054a andq %rsi, %r10 + 0x4d, 0x85, 0xd2, //0x0000054d testq %r10, %r10 + 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000550 je LBB0_49 + //0x00000556 LBB0_58 + 0x49, 0x0f, 0xbc, 0xc2, //0x00000556 bsfq %r10, %rax + 0x4c, 0x29, 0xf0, //0x0000055a subq %r14, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x0000055d movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000561 movabsq $4294977024, %r11 + 0xe9, 0xff, 0x0c, 0x00, 0x00, //0x0000056b jmp LBB0_229 + //0x00000570 LBB0_59 + 0x40, 0x80, 0xff, 0x3a, //0x00000570 cmpb $58, %dil + 0x0f, 0x85, 0x2e, 0x35, 0x00, 0x00, //0x00000574 jne LBB0_649 + 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, //0x0000057a movq $0, (%r13,%r9,8) + 0xe9, 0x48, 0xfc, 0xff, 0xff, //0x00000583 jmp LBB0_4 + //0x00000588 LBB0_61 + 0x83, 0xff, 0x2c, //0x00000588 cmpl $44, %edi + 0x0f, 0x85, 0x2c, 0x00, 0x00, 0x00, //0x0000058b jne LBB0_62 + 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00000591 cmpq $4095, %r9 + 0x0f, 0x8f, 0xb2, 0x34, 0x00, 0x00, //0x00000598 jg LBB0_651 + 0x49, 0x8d, 0x41, 0x01, //0x0000059e leaq $1(%r9), %rax + 0x49, 0x89, 0x45, 0x00, //0x000005a2 movq %rax, (%r13) + 0x4b, 0xc7, 0x44, 0xcd, 0x08, 0x03, 0x00, 0x00, 0x00, //0x000005a6 movq $3, $8(%r13,%r9,8) + 0xe9, 0x1c, 0xfc, 0xff, 0xff, //0x000005af jmp LBB0_4 + //0x000005b4 LBB0_63 + 0x83, 0xff, 0x22, //0x000005b4 cmpl $34, %edi + 0x0f, 0x84, 0xd7, 0x02, 0x00, 0x00, //0x000005b7 je LBB0_64 + //0x000005bd LBB0_62 + 0x83, 0xff, 0x7d, //0x000005bd cmpl $125, %edi + 0x0f, 0x85, 0xe2, 0x34, 0x00, 0x00, //0x000005c0 jne LBB0_649 + //0x000005c6 LBB0_37 + 0x4d, 0x89, 0x45, 0x00, //0x000005c6 movq %r8, (%r13) + 0x48, 0x89, 0xd0, //0x000005ca movq %rdx, %rax + 0x4d, 0x85, 0xc0, //0x000005cd testq %r8, %r8 + 0x0f, 0x85, 0x0e, 0xfc, 0xff, 0xff, //0x000005d0 jne LBB0_6 + 0xe9, 0xd4, 0x34, 0x00, 0x00, //0x000005d6 jmp LBB0_650 + //0x000005db LBB0_78 + 0x4d, 0x89, 0x45, 0x00, //0x000005db movq %r8, (%r13) + 0x83, 0xff, 0x7b, //0x000005df cmpl $123, %edi + 0x0f, 0x87, 0xc0, 0x34, 0x00, 0x00, //0x000005e2 ja LBB0_649 + //0x000005e8 LBB0_79 + 0x89, 0xf9, //0x000005e8 movl %edi, %ecx + 0x48, 0x8d, 0x15, 0x73, 0x37, 0x00, 0x00, //0x000005ea leaq $14195(%rip), %rdx /* LJTI0_1+0(%rip) */ + 0x48, 0x63, 0x0c, 0x8a, //0x000005f1 movslq (%rdx,%rcx,4), %rcx + 0x48, 0x01, 0xd1, //0x000005f5 addq %rdx, %rcx + 0xff, 0xe1, //0x000005f8 jmpq *%rcx + //0x000005fa LBB0_80 + 0x4c, 0x89, 0xf0, //0x000005fa movq %r14, %rax + 0x48, 0x8b, 0x4d, 0xa8, //0x000005fd movq $-88(%rbp), %rcx + 0x4c, 0x8b, 0x71, 0x08, //0x00000601 movq $8(%rcx), %r14 + 0x4c, 0x8b, 0x00, //0x00000605 movq (%rax), %r8 + 0xf6, 0x45, 0x98, 0x40, //0x00000608 testb $64, $-104(%rbp) + 0x0f, 0x85, 0x14, 0x05, 0x00, 0x00, //0x0000060c jne LBB0_134 + 0x49, 0x8d, 0x40, 0xff, //0x00000612 leaq $-1(%r8), %rax + 0x49, 0x29, 0xc6, //0x00000616 subq %rax, %r14 + 0x4c, 0x89, 0x45, 0xc0, //0x00000619 movq %r8, $-64(%rbp) + 0x0f, 0x84, 0x6c, 0x34, 0x00, 0x00, //0x0000061d je LBB0_625 + 0x4b, 0x8d, 0x3c, 0x04, //0x00000623 leaq (%r12,%r8), %rdi + 0x48, 0x83, 0xc7, 0xff, //0x00000627 addq $-1, %rdi + 0x80, 0x3f, 0x30, //0x0000062b cmpb $48, (%rdi) + 0x0f, 0x85, 0x3b, 0x00, 0x00, 0x00, //0x0000062e jne LBB0_86 + 0x41, 0xbd, 0x01, 0x00, 0x00, 0x00, //0x00000634 movl $1, %r13d + 0x49, 0x83, 0xfe, 0x01, //0x0000063a cmpq $1, %r14 + 0x0f, 0x84, 0xb9, 0x20, 0x00, 0x00, //0x0000063e je LBB0_452 + 0x48, 0x8b, 0x4d, 0xc0, //0x00000644 movq $-64(%rbp), %rcx + 0x41, 0x8a, 0x0c, 0x0c, //0x00000648 movb (%r12,%rcx), %cl + 0x80, 0xc1, 0xd2, //0x0000064c addb $-46, %cl + 0x80, 0xf9, 0x37, //0x0000064f cmpb $55, %cl + 0x0f, 0x87, 0xa5, 0x20, 0x00, 0x00, //0x00000652 ja LBB0_452 + 0x0f, 0xb6, 0xc9, //0x00000658 movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x0000065b movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x00000665 btq %rcx, %rdx + 0x0f, 0x83, 0x8e, 0x20, 0x00, 0x00, //0x00000669 jae LBB0_452 + //0x0000066f LBB0_86 + 0x49, 0x83, 0xfe, 0x10, //0x0000066f cmpq $16, %r14 + 0x48, 0x89, 0x7d, 0xb8, //0x00000673 movq %rdi, $-72(%rbp) + 0x0f, 0x82, 0xa0, 0x27, 0x00, 0x00, //0x00000677 jb LBB0_490 + 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000067d movq $-1, %r10 + 0x45, 0x31, 0xed, //0x00000684 xorl %r13d, %r13d + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00000687 movq $-1, %r15 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000068e movq $-1, %r8 + 0x4d, 0x89, 0xf3, //0x00000695 movq %r14, %r11 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000698 .p2align 4, 0x90 + //0x000006a0 LBB0_88 + 0xf3, 0x42, 0x0f, 0x6f, 0x1c, 0x2f, //0x000006a0 movdqu (%rdi,%r13), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x000006a6 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x64, 0x25, 0xee, 0xf9, 0xff, 0xff, //0x000006aa pcmpgtb $-1554(%rip), %xmm4 /* LCPI0_10+0(%rip) */ + 0x66, 0x41, 0x0f, 0x6f, 0xef, //0x000006b2 movdqa %xmm15, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x000006b7 pcmpgtb %xmm3, %xmm5 + 0x66, 0x0f, 0xdb, 0xec, //0x000006bb pand %xmm4, %xmm5 + 0x66, 0x0f, 0x6f, 0xe3, //0x000006bf movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0x25, 0xf5, 0xf9, 0xff, 0xff, //0x000006c3 pcmpeqb $-1547(%rip), %xmm4 /* LCPI0_12+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xf3, //0x000006cb movdqa %xmm3, %xmm6 + 0x66, 0x0f, 0x74, 0x35, 0xf9, 0xf9, 0xff, 0xff, //0x000006cf pcmpeqb $-1543(%rip), %xmm6 /* LCPI0_13+0(%rip) */ + 0x66, 0x0f, 0xeb, 0xf4, //0x000006d7 por %xmm4, %xmm6 + 0x66, 0x0f, 0x6f, 0xe3, //0x000006db movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xe1, //0x000006df pand %xmm9, %xmm4 + 0x66, 0x0f, 0x74, 0x1d, 0xf4, 0xf9, 0xff, 0xff, //0x000006e4 pcmpeqb $-1548(%rip), %xmm3 /* LCPI0_14+0(%rip) */ + 0x66, 0x41, 0x0f, 0x74, 0xe3, //0x000006ec pcmpeqb %xmm11, %xmm4 + 0x66, 0x0f, 0xd7, 0xf4, //0x000006f1 pmovmskb %xmm4, %esi + 0x66, 0x0f, 0xeb, 0xe3, //0x000006f5 por %xmm3, %xmm4 + 0x66, 0x0f, 0xeb, 0xee, //0x000006f9 por %xmm6, %xmm5 + 0x66, 0x0f, 0xeb, 0xec, //0x000006fd por %xmm4, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xcb, //0x00000701 pmovmskb %xmm3, %r9d + 0x66, 0x0f, 0xd7, 0xd6, //0x00000706 pmovmskb %xmm6, %edx + 0x66, 0x0f, 0xd7, 0xcd, //0x0000070a pmovmskb %xmm5, %ecx + 0xf7, 0xd1, //0x0000070e notl %ecx + 0x0f, 0xbc, 0xc9, //0x00000710 bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x00000713 cmpl $16, %ecx + 0x0f, 0x84, 0x16, 0x00, 0x00, 0x00, //0x00000716 je LBB0_90 + 0xbf, 0xff, 0xff, 0xff, 0xff, //0x0000071c movl $-1, %edi + 0xd3, 0xe7, //0x00000721 shll %cl, %edi + 0xf7, 0xd7, //0x00000723 notl %edi + 0x41, 0x21, 0xf9, //0x00000725 andl %edi, %r9d + 0x21, 0xfe, //0x00000728 andl %edi, %esi + 0x21, 0xd7, //0x0000072a andl %edx, %edi + 0x89, 0xfa, //0x0000072c movl %edi, %edx + 0x48, 0x8b, 0x7d, 0xb8, //0x0000072e movq $-72(%rbp), %rdi + //0x00000732 LBB0_90 + 0x41, 0x8d, 0x59, 0xff, //0x00000732 leal $-1(%r9), %ebx + 0x44, 0x21, 0xcb, //0x00000736 andl %r9d, %ebx + 0x0f, 0x85, 0x69, 0x1f, 0x00, 0x00, //0x00000739 jne LBB0_444 + 0x8d, 0x5e, 0xff, //0x0000073f leal $-1(%rsi), %ebx + 0x21, 0xf3, //0x00000742 andl %esi, %ebx + 0x0f, 0x85, 0x5e, 0x1f, 0x00, 0x00, //0x00000744 jne LBB0_444 + 0x8d, 0x5a, 0xff, //0x0000074a leal $-1(%rdx), %ebx + 0x21, 0xd3, //0x0000074d andl %edx, %ebx + 0x0f, 0x85, 0x53, 0x1f, 0x00, 0x00, //0x0000074f jne LBB0_444 + 0x45, 0x85, 0xc9, //0x00000755 testl %r9d, %r9d + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00000758 je LBB0_96 + 0x41, 0x0f, 0xbc, 0xd9, //0x0000075e bsfl %r9d, %ebx + 0x49, 0x83, 0xf8, 0xff, //0x00000762 cmpq $-1, %r8 + 0x0f, 0x85, 0xfa, 0x22, 0x00, 0x00, //0x00000766 jne LBB0_454 + 0x4c, 0x01, 0xeb, //0x0000076c addq %r13, %rbx + 0x49, 0x89, 0xd8, //0x0000076f movq %rbx, %r8 + //0x00000772 LBB0_96 + 0x85, 0xf6, //0x00000772 testl %esi, %esi + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00000774 je LBB0_99 + 0x0f, 0xbc, 0xf6, //0x0000077a bsfl %esi, %esi + 0x49, 0x83, 0xff, 0xff, //0x0000077d cmpq $-1, %r15 + 0x0f, 0x85, 0xe6, 0x22, 0x00, 0x00, //0x00000781 jne LBB0_455 + 0x4c, 0x01, 0xee, //0x00000787 addq %r13, %rsi + 0x49, 0x89, 0xf7, //0x0000078a movq %rsi, %r15 + //0x0000078d LBB0_99 + 0x85, 0xd2, //0x0000078d testl %edx, %edx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x0000078f je LBB0_102 + 0x0f, 0xbc, 0xd2, //0x00000795 bsfl %edx, %edx + 0x49, 0x83, 0xfa, 0xff, //0x00000798 cmpq $-1, %r10 + 0x0f, 0x85, 0xd2, 0x22, 0x00, 0x00, //0x0000079c jne LBB0_456 + 0x4c, 0x01, 0xea, //0x000007a2 addq %r13, %rdx + 0x49, 0x89, 0xd2, //0x000007a5 movq %rdx, %r10 + //0x000007a8 LBB0_102 + 0x83, 0xf9, 0x10, //0x000007a8 cmpl $16, %ecx + 0x0f, 0x85, 0xf7, 0x07, 0x00, 0x00, //0x000007ab jne LBB0_188 + 0x49, 0x83, 0xc3, 0xf0, //0x000007b1 addq $-16, %r11 + 0x49, 0x83, 0xc5, 0x10, //0x000007b5 addq $16, %r13 + 0x49, 0x83, 0xfb, 0x0f, //0x000007b9 cmpq $15, %r11 + 0x0f, 0x87, 0xdd, 0xfe, 0xff, 0xff, //0x000007bd ja LBB0_88 + 0x4a, 0x8d, 0x34, 0x2f, //0x000007c3 leaq (%rdi,%r13), %rsi + 0x49, 0x89, 0xf1, //0x000007c7 movq %rsi, %r9 + 0x4d, 0x39, 0xee, //0x000007ca cmpq %r13, %r14 + 0x0f, 0x84, 0xff, 0x09, 0x00, 0x00, //0x000007cd je LBB0_217 + //0x000007d3 LBB0_105 + 0x4e, 0x8d, 0x0c, 0x1e, //0x000007d3 leaq (%rsi,%r11), %r9 + 0x48, 0x89, 0xf7, //0x000007d7 movq %rsi, %rdi + 0x48, 0x2b, 0x7d, 0xc0, //0x000007da subq $-64(%rbp), %rdi + 0x4c, 0x29, 0xe7, //0x000007de subq %r12, %rdi + 0x48, 0x83, 0xc7, 0x01, //0x000007e1 addq $1, %rdi + 0x31, 0xd2, //0x000007e5 xorl %edx, %edx + 0x4c, 0x8d, 0x35, 0xd2, 0x37, 0x00, 0x00, //0x000007e7 leaq $14290(%rip), %r14 /* LJTI0_3+0(%rip) */ + 0xe9, 0x2a, 0x00, 0x00, 0x00, //0x000007ee jmp LBB0_109 + //0x000007f3 LBB0_106 + 0x49, 0x83, 0xfa, 0xff, //0x000007f3 cmpq $-1, %r10 + 0x0f, 0x85, 0xdc, 0x1e, 0x00, 0x00, //0x000007f7 jne LBB0_449 + 0x4c, 0x8d, 0x14, 0x17, //0x000007fd leaq (%rdi,%rdx), %r10 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000801 .p2align 4, 0x90 + //0x00000810 LBB0_108 + 0x48, 0x83, 0xc2, 0x01, //0x00000810 addq $1, %rdx + 0x49, 0x39, 0xd3, //0x00000814 cmpq %rdx, %r11 + 0x0f, 0x84, 0xb1, 0x09, 0x00, 0x00, //0x00000817 je LBB0_216 + //0x0000081d LBB0_109 + 0x0f, 0xbe, 0x0c, 0x16, //0x0000081d movsbl (%rsi,%rdx), %ecx + 0x8d, 0x59, 0xd0, //0x00000821 leal $-48(%rcx), %ebx + 0x83, 0xfb, 0x0a, //0x00000824 cmpl $10, %ebx + 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00000827 jb LBB0_108 + 0x8d, 0x59, 0xd5, //0x0000082d leal $-43(%rcx), %ebx + 0x83, 0xfb, 0x1a, //0x00000830 cmpl $26, %ebx + 0x0f, 0x87, 0x1c, 0x00, 0x00, 0x00, //0x00000833 ja LBB0_114 + 0x49, 0x63, 0x0c, 0x9e, //0x00000839 movslq (%r14,%rbx,4), %rcx + 0x4c, 0x01, 0xf1, //0x0000083d addq %r14, %rcx + 0xff, 0xe1, //0x00000840 jmpq *%rcx + //0x00000842 LBB0_112 + 0x49, 0x83, 0xf8, 0xff, //0x00000842 cmpq $-1, %r8 + 0x0f, 0x85, 0x8d, 0x1e, 0x00, 0x00, //0x00000846 jne LBB0_449 + 0x4c, 0x8d, 0x04, 0x17, //0x0000084c leaq (%rdi,%rdx), %r8 + 0xe9, 0xbb, 0xff, 0xff, 0xff, //0x00000850 jmp LBB0_108 + //0x00000855 LBB0_114 + 0x83, 0xf9, 0x65, //0x00000855 cmpl $101, %ecx + 0x0f, 0x85, 0x6a, 0x09, 0x00, 0x00, //0x00000858 jne LBB0_215 + //0x0000085e LBB0_115 + 0x49, 0x83, 0xff, 0xff, //0x0000085e cmpq $-1, %r15 + 0x0f, 0x85, 0x71, 0x1e, 0x00, 0x00, //0x00000862 jne LBB0_449 + 0x4c, 0x8d, 0x3c, 0x17, //0x00000868 leaq (%rdi,%rdx), %r15 + 0xe9, 0x9f, 0xff, 0xff, 0xff, //0x0000086c jmp LBB0_108 + //0x00000871 LBB0_117 + 0x49, 0x81, 0xf9, 0xff, 0x0f, 0x00, 0x00, //0x00000871 cmpq $4095, %r9 + 0x0f, 0x8f, 0xd2, 0x31, 0x00, 0x00, //0x00000878 jg LBB0_651 + 0x49, 0x8d, 0x41, 0x01, //0x0000087e leaq $1(%r9), %rax + 0x49, 0x89, 0x45, 0x00, //0x00000882 movq %rax, (%r13) + 0x4b, 0xc7, 0x44, 0xcd, 0x08, 0x00, 0x00, 0x00, 0x00, //0x00000886 movq $0, $8(%r13,%r9,8) + 0xe9, 0x3c, 0xf9, 0xff, 0xff, //0x0000088f jmp LBB0_4 + //0x00000894 LBB0_64 + 0x4b, 0xc7, 0x44, 0xcd, 0x00, 0x02, 0x00, 0x00, 0x00, //0x00000894 movq $2, (%r13,%r9,8) + 0x48, 0x8b, 0x4d, 0x98, //0x0000089d movq $-104(%rbp), %rcx + 0xf6, 0xc1, 0x40, //0x000008a1 testb $64, %cl + 0x0f, 0x85, 0xcb, 0x03, 0x00, 0x00, //0x000008a4 jne LBB0_152 + 0x49, 0x8b, 0x16, //0x000008aa movq (%r14), %rdx + 0x48, 0x8b, 0x45, 0xa8, //0x000008ad movq $-88(%rbp), %rax + 0x48, 0x8b, 0x40, 0x08, //0x000008b1 movq $8(%rax), %rax + 0xf6, 0xc1, 0x20, //0x000008b5 testb $32, %cl + 0x48, 0x89, 0x45, 0xa0, //0x000008b8 movq %rax, $-96(%rbp) + 0x48, 0x89, 0x55, 0xc0, //0x000008bc movq %rdx, $-64(%rbp) + 0x0f, 0x85, 0xf0, 0x06, 0x00, 0x00, //0x000008c0 jne LBB0_189 + 0x49, 0x89, 0xc1, //0x000008c6 movq %rax, %r9 + 0x49, 0x29, 0xd1, //0x000008c9 subq %rdx, %r9 + 0x0f, 0x84, 0xde, 0x33, 0x00, 0x00, //0x000008cc je LBB0_660 + 0x49, 0x83, 0xf9, 0x40, //0x000008d2 cmpq $64, %r9 + 0x0f, 0x82, 0xd9, 0x26, 0x00, 0x00, //0x000008d6 jb LBB0_510 + 0x49, 0x89, 0xd6, //0x000008dc movq %rdx, %r14 + 0x49, 0xf7, 0xd6, //0x000008df notq %r14 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000008e2 movq $-1, $-56(%rbp) + 0x48, 0x89, 0xd0, //0x000008ea movq %rdx, %rax + 0x45, 0x31, 0xc0, //0x000008ed xorl %r8d, %r8d + //0x000008f0 .p2align 4, 0x90 + //0x000008f0 LBB0_69 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x000008f0 movdqu (%r12,%rax), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x000008f6 movdqu $16(%r12,%rax), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x000008fd movdqu $32(%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00000904 movdqu $48(%r12,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xfb, //0x0000090b movdqa %xmm3, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000090f pcmpeqb %xmm0, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00000913 pmovmskb %xmm7, %r10d + 0x66, 0x0f, 0x6f, 0xfc, //0x00000918 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000091c pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xdf, //0x00000920 pmovmskb %xmm7, %ebx + 0x66, 0x0f, 0x6f, 0xfd, //0x00000924 movdqa %xmm5, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00000928 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x0000092c pmovmskb %xmm7, %esi + 0x66, 0x0f, 0x6f, 0xfe, //0x00000930 movdqa %xmm6, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00000934 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xd7, //0x00000938 pmovmskb %xmm7, %edx + 0x66, 0x0f, 0x74, 0xd9, //0x0000093c pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00000940 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x74, 0xe1, //0x00000945 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00000949 pmovmskb %xmm4, %ecx + 0x66, 0x0f, 0x74, 0xe9, //0x0000094d pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00000951 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x74, 0xf1, //0x00000955 pcmpeqb %xmm1, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00000959 pmovmskb %xmm6, %r15d + 0x48, 0xc1, 0xe2, 0x30, //0x0000095e shlq $48, %rdx + 0x48, 0xc1, 0xe6, 0x20, //0x00000962 shlq $32, %rsi + 0x48, 0x09, 0xd6, //0x00000966 orq %rdx, %rsi + 0x48, 0xc1, 0xe3, 0x10, //0x00000969 shlq $16, %rbx + 0x48, 0x09, 0xf3, //0x0000096d orq %rsi, %rbx + 0x49, 0x09, 0xda, //0x00000970 orq %rbx, %r10 + 0x49, 0xc1, 0xe7, 0x30, //0x00000973 shlq $48, %r15 + 0x48, 0xc1, 0xe7, 0x20, //0x00000977 shlq $32, %rdi + 0x4c, 0x09, 0xff, //0x0000097b orq %r15, %rdi + 0x48, 0xc1, 0xe1, 0x10, //0x0000097e shlq $16, %rcx + 0x48, 0x09, 0xf9, //0x00000982 orq %rdi, %rcx + 0x49, 0x09, 0xcb, //0x00000985 orq %rcx, %r11 + 0x0f, 0x85, 0x30, 0x00, 0x00, 0x00, //0x00000988 jne LBB0_121 + 0x4d, 0x85, 0xc0, //0x0000098e testq %r8, %r8 + 0x0f, 0x85, 0x3d, 0x00, 0x00, 0x00, //0x00000991 jne LBB0_123 + 0x45, 0x31, 0xc0, //0x00000997 xorl %r8d, %r8d + 0x4d, 0x85, 0xd2, //0x0000099a testq %r10, %r10 + 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, //0x0000099d jne LBB0_124 + //0x000009a3 LBB0_72 + 0x49, 0x83, 0xc1, 0xc0, //0x000009a3 addq $-64, %r9 + 0x49, 0x83, 0xc6, 0xc0, //0x000009a7 addq $-64, %r14 + 0x48, 0x83, 0xc0, 0x40, //0x000009ab addq $64, %rax + 0x49, 0x83, 0xf9, 0x3f, //0x000009af cmpq $63, %r9 + 0x0f, 0x87, 0x37, 0xff, 0xff, 0xff, //0x000009b3 ja LBB0_69 + 0xe9, 0x1e, 0x1f, 0x00, 0x00, //0x000009b9 jmp LBB0_73 + //0x000009be LBB0_121 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000009be cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000009c3 jne LBB0_123 + 0x49, 0x0f, 0xbc, 0xcb, //0x000009c9 bsfq %r11, %rcx + 0x48, 0x01, 0xc1, //0x000009cd addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x000009d0 movq %rcx, $-56(%rbp) + //0x000009d4 LBB0_123 + 0x4c, 0x89, 0xc1, //0x000009d4 movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x000009d7 notq %rcx + 0x4c, 0x21, 0xd9, //0x000009da andq %r11, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x000009dd leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xc2, //0x000009e1 orq %r8, %rdx + 0x48, 0x89, 0xd6, //0x000009e4 movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x000009e7 notq %rsi + 0x4c, 0x21, 0xde, //0x000009ea andq %r11, %rsi + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000009ed movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfe, //0x000009f7 andq %rdi, %rsi + 0x45, 0x31, 0xc0, //0x000009fa xorl %r8d, %r8d + 0x48, 0x01, 0xce, //0x000009fd addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc0, //0x00000a00 setb %r8b + 0x48, 0x01, 0xf6, //0x00000a04 addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000a07 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x00000a11 xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00000a14 andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000a17 notq %rsi + 0x49, 0x21, 0xf2, //0x00000a1a andq %rsi, %r10 + 0x4d, 0x85, 0xd2, //0x00000a1d testq %r10, %r10 + 0x0f, 0x84, 0x7d, 0xff, 0xff, 0xff, //0x00000a20 je LBB0_72 + //0x00000a26 LBB0_124 + 0x49, 0x0f, 0xbc, 0xc2, //0x00000a26 bsfq %r10, %rax + 0x4c, 0x29, 0xf0, //0x00000a2a subq %r14, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00000a2d movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000a31 movabsq $4294977024, %r11 + 0x48, 0x8b, 0x75, 0xc0, //0x00000a3b movq $-64(%rbp), %rsi + 0xe9, 0xb3, 0x0d, 0x00, 0x00, //0x00000a3f jmp LBB0_313 + //0x00000a44 LBB0_125 + 0x48, 0x8b, 0x4d, 0xa8, //0x00000a44 movq $-88(%rbp), %rcx + 0x4c, 0x8b, 0x49, 0x08, //0x00000a48 movq $8(%rcx), %r9 + 0x4d, 0x8b, 0x06, //0x00000a4c movq (%r14), %r8 + 0x4f, 0x8d, 0x14, 0x04, //0x00000a4f leaq (%r12,%r8), %r10 + 0x4d, 0x29, 0xc1, //0x00000a53 subq %r8, %r9 + 0x49, 0x83, 0xf9, 0x20, //0x00000a56 cmpq $32, %r9 + 0x0f, 0x8c, 0x3a, 0x1c, 0x00, 0x00, //0x00000a5a jl LBB0_133 + 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x00000a60 movl $32, %r14d + 0x31, 0xf6, //0x00000a66 xorl %esi, %esi + 0x45, 0x31, 0xdb, //0x00000a68 xorl %r11d, %r11d + 0xe9, 0x26, 0x00, 0x00, 0x00, //0x00000a6b jmp LBB0_127 + //0x00000a70 .p2align 4, 0x90 + //0x00000a70 LBB0_129 + 0x45, 0x31, 0xdb, //0x00000a70 xorl %r11d, %r11d + 0x48, 0x85, 0xdb, //0x00000a73 testq %rbx, %rbx + 0x0f, 0x85, 0x2b, 0xf7, 0xff, 0xff, //0x00000a76 jne LBB0_1 + //0x00000a7c LBB0_130 + 0x48, 0x83, 0xc6, 0x20, //0x00000a7c addq $32, %rsi + 0x4b, 0x8d, 0x0c, 0x31, //0x00000a80 leaq (%r9,%r14), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00000a84 addq $-32, %rcx + 0x49, 0x83, 0xc6, 0xe0, //0x00000a88 addq $-32, %r14 + 0x48, 0x83, 0xf9, 0x3f, //0x00000a8c cmpq $63, %rcx + 0x0f, 0x8e, 0xe7, 0x1b, 0x00, 0x00, //0x00000a90 jle LBB0_131 + //0x00000a96 LBB0_127 + 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x32, //0x00000a96 movdqu (%r10,%rsi), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x32, 0x10, //0x00000a9c movdqu $16(%r10,%rsi), %xmm5 + 0x66, 0x0f, 0x6f, 0xf4, //0x00000aa3 movdqa %xmm4, %xmm6 + 0x66, 0x0f, 0x74, 0xf0, //0x00000aa7 pcmpeqb %xmm0, %xmm6 + 0x66, 0x0f, 0xd7, 0xfe, //0x00000aab pmovmskb %xmm6, %edi + 0x66, 0x0f, 0x6f, 0xf5, //0x00000aaf movdqa %xmm5, %xmm6 + 0x66, 0x0f, 0x74, 0xf0, //0x00000ab3 pcmpeqb %xmm0, %xmm6 + 0x66, 0x0f, 0xd7, 0xde, //0x00000ab7 pmovmskb %xmm6, %ebx + 0x48, 0xc1, 0xe3, 0x10, //0x00000abb shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x00000abf orq %rdi, %rbx + 0x66, 0x0f, 0x74, 0xe1, //0x00000ac2 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00000ac6 pmovmskb %xmm4, %ecx + 0x66, 0x0f, 0x74, 0xe9, //0x00000aca pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00000ace pmovmskb %xmm5, %edi + 0x48, 0xc1, 0xe7, 0x10, //0x00000ad2 shlq $16, %rdi + 0x48, 0x09, 0xcf, //0x00000ad6 orq %rcx, %rdi + 0x48, 0x89, 0xf9, //0x00000ad9 movq %rdi, %rcx + 0x4c, 0x09, 0xd9, //0x00000adc orq %r11, %rcx + 0x0f, 0x84, 0x8b, 0xff, 0xff, 0xff, //0x00000adf je LBB0_129 + 0x44, 0x89, 0xd9, //0x00000ae5 movl %r11d, %ecx + 0xf7, 0xd1, //0x00000ae8 notl %ecx + 0x21, 0xf9, //0x00000aea andl %edi, %ecx + 0x44, 0x8d, 0x3c, 0x09, //0x00000aec leal (%rcx,%rcx), %r15d + 0x45, 0x09, 0xdf, //0x00000af0 orl %r11d, %r15d + 0x44, 0x89, 0xfa, //0x00000af3 movl %r15d, %edx + 0xf7, 0xd2, //0x00000af6 notl %edx + 0x21, 0xfa, //0x00000af8 andl %edi, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000afa andl $-1431655766, %edx + 0x45, 0x31, 0xdb, //0x00000b00 xorl %r11d, %r11d + 0x01, 0xca, //0x00000b03 addl %ecx, %edx + 0x41, 0x0f, 0x92, 0xc3, //0x00000b05 setb %r11b + 0x01, 0xd2, //0x00000b09 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x00000b0b xorl $1431655765, %edx + 0x44, 0x21, 0xfa, //0x00000b11 andl %r15d, %edx + 0xf7, 0xd2, //0x00000b14 notl %edx + 0x21, 0xd3, //0x00000b16 andl %edx, %ebx + 0x48, 0x85, 0xdb, //0x00000b18 testq %rbx, %rbx + 0x0f, 0x84, 0x5b, 0xff, 0xff, 0xff, //0x00000b1b je LBB0_130 + 0xe9, 0x81, 0xf6, 0xff, 0xff, //0x00000b21 jmp LBB0_1 + //0x00000b26 LBB0_134 + 0x4c, 0x89, 0xf1, //0x00000b26 movq %r14, %rcx + 0x4c, 0x29, 0xc1, //0x00000b29 subq %r8, %rcx + 0x48, 0x83, 0xf9, 0x10, //0x00000b2c cmpq $16, %rcx + 0x0f, 0x82, 0xc7, 0x22, 0x00, 0x00, //0x00000b30 jb LBB0_489 + 0x4c, 0x89, 0xc6, //0x00000b36 movq %r8, %rsi + 0x48, 0xf7, 0xde, //0x00000b39 negq %rsi + 0x49, 0x8d, 0x40, 0x01, //0x00000b3c leaq $1(%r8), %rax + 0x49, 0x8d, 0x48, 0xff, //0x00000b40 leaq $-1(%r8), %rcx + 0x4b, 0x8d, 0x14, 0x04, //0x00000b44 leaq (%r12,%r8), %rdx + 0x48, 0x83, 0xc2, 0xff, //0x00000b48 addq $-1, %rdx + 0x4c, 0x89, 0xc3, //0x00000b4c movq %r8, %rbx + 0x90, //0x00000b4f .p2align 4, 0x90 + //0x00000b50 LBB0_136 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x1c, //0x00000b50 movdqu (%r12,%rbx), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00000b56 movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0x74, 0xe6, //0x00000b5a pcmpeqb %xmm14, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xd9, //0x00000b5f pand %xmm9, %xmm3 + 0x66, 0x0f, 0x74, 0xda, //0x00000b64 pcmpeqb %xmm2, %xmm3 + 0x66, 0x0f, 0xeb, 0xdc, //0x00000b68 por %xmm4, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00000b6c pmovmskb %xmm3, %edi + 0x85, 0xff, //0x00000b70 testl %edi, %edi + 0x0f, 0x85, 0x94, 0x00, 0x00, 0x00, //0x00000b72 jne LBB0_147 + 0x48, 0x83, 0xc3, 0x10, //0x00000b78 addq $16, %rbx + 0x49, 0x8d, 0x3c, 0x36, //0x00000b7c leaq (%r14,%rsi), %rdi + 0x48, 0x83, 0xc7, 0xf0, //0x00000b80 addq $-16, %rdi + 0x48, 0x83, 0xc6, 0xf0, //0x00000b84 addq $-16, %rsi + 0x48, 0x83, 0xc0, 0x10, //0x00000b88 addq $16, %rax + 0x48, 0x83, 0xc1, 0x10, //0x00000b8c addq $16, %rcx + 0x48, 0x83, 0xc2, 0x10, //0x00000b90 addq $16, %rdx + 0x48, 0x83, 0xff, 0x0f, //0x00000b94 cmpq $15, %rdi + 0x0f, 0x87, 0xb2, 0xff, 0xff, 0xff, //0x00000b98 ja LBB0_136 + 0x4c, 0x89, 0xe0, //0x00000b9e movq %r12, %rax + 0x48, 0x29, 0xf0, //0x00000ba1 subq %rsi, %rax + 0x49, 0x01, 0xf6, //0x00000ba4 addq %rsi, %r14 + 0x4c, 0x89, 0xf1, //0x00000ba7 movq %r14, %rcx + 0x48, 0x85, 0xc9, //0x00000baa testq %rcx, %rcx + 0x4c, 0x8b, 0x75, 0xd0, //0x00000bad movq $-48(%rbp), %r14 + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00000bb1 movabsq $17596481021440, %rdi + 0x0f, 0x84, 0x40, 0x00, 0x00, 0x00, //0x00000bbb je LBB0_146 + //0x00000bc1 LBB0_139 + 0x48, 0x8d, 0x14, 0x08, //0x00000bc1 leaq (%rax,%rcx), %rdx + //0x00000bc5 LBB0_140 + 0x0f, 0xb6, 0x30, //0x00000bc5 movzbl (%rax), %esi + 0x48, 0x83, 0xfe, 0x2c, //0x00000bc8 cmpq $44, %rsi + 0x0f, 0x87, 0x0a, 0x00, 0x00, 0x00, //0x00000bcc ja LBB0_142 + 0x48, 0x0f, 0xa3, 0xf7, //0x00000bd2 btq %rsi, %rdi + 0x0f, 0x82, 0x25, 0x00, 0x00, 0x00, //0x00000bd6 jb LBB0_146 + //0x00000bdc LBB0_142 + 0x40, 0x80, 0xfe, 0x5d, //0x00000bdc cmpb $93, %sil + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x00000be0 je LBB0_146 + 0x40, 0x80, 0xfe, 0x7d, //0x00000be6 cmpb $125, %sil + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00000bea je LBB0_146 + 0x48, 0x83, 0xc0, 0x01, //0x00000bf0 addq $1, %rax + 0x48, 0x83, 0xc1, 0xff, //0x00000bf4 addq $-1, %rcx + 0x0f, 0x85, 0xc7, 0xff, 0xff, 0xff, //0x00000bf8 jne LBB0_140 + 0x48, 0x89, 0xd0, //0x00000bfe movq %rdx, %rax + //0x00000c01 LBB0_146 + 0x4c, 0x29, 0xe0, //0x00000c01 subq %r12, %rax + 0x49, 0x89, 0x06, //0x00000c04 movq %rax, (%r14) + 0xe9, 0xba, 0xf5, 0xff, 0xff, //0x00000c07 jmp LBB0_3 + //0x00000c0c LBB0_147 + 0x66, 0x0f, 0xbc, 0xff, //0x00000c0c bsfw %di, %di + 0x0f, 0xb7, 0xdf, //0x00000c10 movzwl %di, %ebx + 0x48, 0x89, 0xdf, //0x00000c13 movq %rbx, %rdi + 0x48, 0x29, 0xf7, //0x00000c16 subq %rsi, %rdi + 0x4c, 0x8b, 0x75, 0xd0, //0x00000c19 movq $-48(%rbp), %r14 + 0x49, 0x89, 0x3e, //0x00000c1d movq %rdi, (%r14) + 0x48, 0x85, 0xff, //0x00000c20 testq %rdi, %rdi + 0x0f, 0x8e, 0x9d, 0xf5, 0xff, 0xff, //0x00000c23 jle LBB0_3 + 0x48, 0x01, 0xd8, //0x00000c29 addq %rbx, %rax + 0x48, 0x01, 0xd9, //0x00000c2c addq %rbx, %rcx + 0x48, 0x01, 0xda, //0x00000c2f addq %rbx, %rdx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000c32 .p2align 4, 0x90 + //0x00000c40 LBB0_149 + 0x0f, 0xb6, 0x32, //0x00000c40 movzbl (%rdx), %esi + 0x48, 0x83, 0xfe, 0x20, //0x00000c43 cmpq $32, %rsi + 0x0f, 0x87, 0x79, 0xf5, 0xff, 0xff, //0x00000c47 ja LBB0_3 + 0x49, 0x0f, 0xa3, 0xf3, //0x00000c4d btq %rsi, %r11 + 0x0f, 0x83, 0x6f, 0xf5, 0xff, 0xff, //0x00000c51 jae LBB0_3 + 0x49, 0x89, 0x0e, //0x00000c57 movq %rcx, (%r14) + 0x48, 0x83, 0xc0, 0xff, //0x00000c5a addq $-1, %rax + 0x48, 0x83, 0xc1, 0xff, //0x00000c5e addq $-1, %rcx + 0x48, 0x83, 0xc2, 0xff, //0x00000c62 addq $-1, %rdx + 0x48, 0x83, 0xf8, 0x01, //0x00000c66 cmpq $1, %rax + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x00000c6a jg LBB0_149 + 0xe9, 0x51, 0xf5, 0xff, 0xff, //0x00000c70 jmp LBB0_3 + //0x00000c75 LBB0_152 + 0x48, 0x8b, 0x4d, 0xa8, //0x00000c75 movq $-88(%rbp), %rcx + 0x4c, 0x8b, 0x49, 0x08, //0x00000c79 movq $8(%rcx), %r9 + 0x4d, 0x8b, 0x06, //0x00000c7d movq (%r14), %r8 + 0x4f, 0x8d, 0x14, 0x04, //0x00000c80 leaq (%r12,%r8), %r10 + 0x4d, 0x29, 0xc1, //0x00000c84 subq %r8, %r9 + 0x49, 0x83, 0xf9, 0x20, //0x00000c87 cmpq $32, %r9 + 0x0f, 0x8c, 0xa5, 0x1a, 0x00, 0x00, //0x00000c8b jl LBB0_161 + 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x00000c91 movl $32, %r14d + 0x31, 0xf6, //0x00000c97 xorl %esi, %esi + 0x45, 0x31, 0xdb, //0x00000c99 xorl %r11d, %r11d + 0xe9, 0x35, 0x00, 0x00, 0x00, //0x00000c9c jmp LBB0_154 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000ca1 .p2align 4, 0x90 + //0x00000cb0 LBB0_157 0x45, 0x31, 0xdb, //0x00000cb0 xorl %r11d, %r11d - 0x48, 0x85, 0xff, //0x00000cb3 testq %rdi, %rdi - 0x0f, 0x85, 0xa5, 0x00, 0x00, 0x00, //0x00000cb6 jne LBB0_151 - //0x00000cbc LBB0_153 - 0x48, 0x83, 0xc2, 0x20, //0x00000cbc addq $32, %rdx + 0x48, 0x85, 0xdb, //0x00000cb3 testq %rbx, %rbx + 0x0f, 0x85, 0xa5, 0x00, 0x00, 0x00, //0x00000cb6 jne LBB0_156 + //0x00000cbc LBB0_158 + 0x48, 0x83, 0xc6, 0x20, //0x00000cbc addq $32, %rsi 0x4b, 0x8d, 0x0c, 0x31, //0x00000cc0 leaq (%r9,%r14), %rcx 0x48, 0x83, 0xc1, 0xe0, //0x00000cc4 addq $-32, %rcx 0x49, 0x83, 0xc6, 0xe0, //0x00000cc8 addq $-32, %r14 0x48, 0x83, 0xf9, 0x3f, //0x00000ccc cmpq $63, %rcx - 0x0f, 0x8e, 0xfb, 0x19, 0x00, 0x00, //0x00000cd0 jle LBB0_154 - //0x00000cd6 LBB0_149 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x12, //0x00000cd6 movdqu (%r10,%rdx), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x12, 0x10, //0x00000cdc movdqu $16(%r10,%rdx), %xmm4 + 0x0f, 0x8e, 0x43, 0x1a, 0x00, 0x00, //0x00000cd0 jle LBB0_159 + //0x00000cd6 LBB0_154 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x32, //0x00000cd6 movdqu (%r10,%rsi), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x32, 0x10, //0x00000cdc movdqu $16(%r10,%rsi), %xmm4 0x66, 0x0f, 0x6f, 0xeb, //0x00000ce3 movdqa %xmm3, %xmm5 0x66, 0x0f, 0x74, 0xe8, //0x00000ce7 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00000ceb pmovmskb %xmm5, %esi + 0x66, 0x0f, 0xd7, 0xfd, //0x00000ceb pmovmskb %xmm5, %edi 0x66, 0x0f, 0x6f, 0xec, //0x00000cef movdqa %xmm4, %xmm5 0x66, 0x0f, 0x74, 0xe8, //0x00000cf3 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x00000cf7 pmovmskb %xmm5, %edi - 0x48, 0xc1, 0xe7, 0x10, //0x00000cfb shlq $16, %rdi - 0x48, 0x09, 0xf7, //0x00000cff orq %rsi, %rdi + 0x66, 0x0f, 0xd7, 0xdd, //0x00000cf7 pmovmskb %xmm5, %ebx + 0x48, 0xc1, 0xe3, 0x10, //0x00000cfb shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x00000cff orq %rdi, %rbx 0x66, 0x0f, 0x74, 0xd9, //0x00000d02 pcmpeqb %xmm1, %xmm3 0x66, 0x0f, 0xd7, 0xcb, //0x00000d06 pmovmskb %xmm3, %ecx 0x66, 0x0f, 0x74, 0xe1, //0x00000d0a pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xf4, //0x00000d0e pmovmskb %xmm4, %esi - 0x48, 0xc1, 0xe6, 0x10, //0x00000d12 shlq $16, %rsi - 0x48, 0x09, 0xce, //0x00000d16 orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00000d19 movq %rsi, %rcx + 0x66, 0x0f, 0xd7, 0xfc, //0x00000d0e pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe7, 0x10, //0x00000d12 shlq $16, %rdi + 0x48, 0x09, 0xcf, //0x00000d16 orq %rcx, %rdi + 0x48, 0x89, 0xf9, //0x00000d19 movq %rdi, %rcx 0x4c, 0x09, 0xd9, //0x00000d1c orq %r11, %rcx - 0x0f, 0x84, 0x8b, 0xff, 0xff, 0xff, //0x00000d1f je LBB0_152 + 0x0f, 0x84, 0x8b, 0xff, 0xff, 0xff, //0x00000d1f je LBB0_157 0x44, 0x89, 0xd9, //0x00000d25 movl %r11d, %ecx 0xf7, 0xd1, //0x00000d28 notl %ecx - 0x21, 0xf1, //0x00000d2a andl %esi, %ecx + 0x21, 0xf9, //0x00000d2a andl %edi, %ecx 0x44, 0x8d, 0x3c, 0x09, //0x00000d2c leal (%rcx,%rcx), %r15d 0x45, 0x09, 0xdf, //0x00000d30 orl %r11d, %r15d - 0x44, 0x89, 0xfb, //0x00000d33 movl %r15d, %ebx - 0xf7, 0xd3, //0x00000d36 notl %ebx - 0x21, 0xf3, //0x00000d38 andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000d3a andl $-1431655766, %ebx + 0x44, 0x89, 0xfa, //0x00000d33 movl %r15d, %edx + 0xf7, 0xd2, //0x00000d36 notl %edx + 0x21, 0xfa, //0x00000d38 andl %edi, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000d3a andl $-1431655766, %edx 0x45, 0x31, 0xdb, //0x00000d40 xorl %r11d, %r11d - 0x01, 0xcb, //0x00000d43 addl %ecx, %ebx + 0x01, 0xca, //0x00000d43 addl %ecx, %edx 0x41, 0x0f, 0x92, 0xc3, //0x00000d45 setb %r11b - 0x01, 0xdb, //0x00000d49 addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00000d4b xorl $1431655765, %ebx - 0x44, 0x21, 0xfb, //0x00000d51 andl %r15d, %ebx - 0xf7, 0xd3, //0x00000d54 notl %ebx - 0x21, 0xdf, //0x00000d56 andl %ebx, %edi - 0x48, 0x85, 0xff, //0x00000d58 testq %rdi, %rdi - 0x0f, 0x84, 0x5b, 0xff, 0xff, 0xff, //0x00000d5b je LBB0_153 - //0x00000d61 LBB0_151 - 0x0f, 0xbc, 0xc7, //0x00000d61 bsfl %edi, %eax + 0x01, 0xd2, //0x00000d49 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x00000d4b xorl $1431655765, %edx + 0x44, 0x21, 0xfa, //0x00000d51 andl %r15d, %edx + 0xf7, 0xd2, //0x00000d54 notl %edx + 0x21, 0xd3, //0x00000d56 andl %edx, %ebx + 0x48, 0x85, 0xdb, //0x00000d58 testq %rbx, %rbx + 0x0f, 0x84, 0x5b, 0xff, 0xff, 0xff, //0x00000d5b je LBB0_158 + //0x00000d61 LBB0_156 + 0x0f, 0xbc, 0xc3, //0x00000d61 bsfl %ebx, %eax 0x4c, 0x01, 0xc0, //0x00000d64 addq %r8, %rax - 0x4c, 0x8d, 0x14, 0x02, //0x00000d67 leaq (%rdx,%rax), %r10 + 0x4c, 0x8d, 0x14, 0x06, //0x00000d67 leaq (%rsi,%rax), %r10 0x49, 0x83, 0xc2, 0x01, //0x00000d6b addq $1, %r10 0x4c, 0x8b, 0x75, 0xd0, //0x00000d6f movq $-48(%rbp), %r14 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000d73 movabsq $4294977024, %r11 0x4d, 0x89, 0x16, //0x00000d7d movq %r10, (%r14) 0x4d, 0x85, 0xc0, //0x00000d80 testq %r8, %r8 - 0x0f, 0x8f, 0x93, 0x0a, 0x00, 0x00, //0x00000d83 jg LBB0_306 - 0xe9, 0x73, 0x2c, 0x00, 0x00, //0x00000d89 jmp LBB0_608 - //0x00000d8e LBB0_157 + 0x0f, 0x8f, 0x83, 0x0a, 0x00, 0x00, //0x00000d83 jg LBB0_315 + 0xe9, 0xce, 0x2c, 0x00, 0x00, //0x00000d89 jmp LBB0_622 + //0x00000d8e LBB0_162 0x49, 0x89, 0xc6, //0x00000d8e movq %rax, %r14 0x49, 0x29, 0xd6, //0x00000d91 subq %rdx, %r14 - 0x0f, 0x84, 0x71, 0x2e, 0x00, 0x00, //0x00000d94 je LBB0_643 + 0x0f, 0x84, 0xdc, 0x2e, 0x00, 0x00, //0x00000d94 je LBB0_657 0x49, 0x83, 0xfe, 0x40, //0x00000d9a cmpq $64, %r14 - 0x0f, 0x82, 0x17, 0x21, 0x00, 0x00, //0x00000d9e jb LBB0_486 - 0x4c, 0x89, 0x65, 0xc0, //0x00000da4 movq %r12, $-64(%rbp) + 0x0f, 0x82, 0x5e, 0x21, 0x00, 0x00, //0x00000d9e jb LBB0_504 + 0x4c, 0x89, 0x65, 0xb8, //0x00000da4 movq %r12, $-72(%rbp) 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000da8 movq $-1, $-56(%rbp) - 0x48, 0x8b, 0x45, 0xb0, //0x00000db0 movq $-80(%rbp), %rax + 0x48, 0x8b, 0x45, 0xc0, //0x00000db0 movq $-64(%rbp), %rax 0x31, 0xdb, //0x00000db4 xorl %ebx, %ebx 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00000db6 .p2align 4, 0x90 - //0x00000dc0 LBB0_160 + //0x00000dc0 LBB0_165 0x49, 0x89, 0xdc, //0x00000dc0 movq %rbx, %r12 - 0x48, 0x8b, 0x4d, 0xc0, //0x00000dc3 movq $-64(%rbp), %rcx + 0x48, 0x8b, 0x4d, 0xb8, //0x00000dc3 movq $-72(%rbp), %rcx 0xf3, 0x0f, 0x6f, 0x1c, 0x01, //0x00000dc7 movdqu (%rcx,%rax), %xmm3 0xf3, 0x0f, 0x6f, 0x7c, 0x01, 0x10, //0x00000dcc movdqu $16(%rcx,%rax), %xmm7 0xf3, 0x0f, 0x6f, 0x74, 0x01, 0x20, //0x00000dd2 movdqu $32(%rcx,%rax), %xmm6 @@ -877,7 +880,7 @@ var _text_validate_one = []byte{ 0x66, 0x0f, 0xd7, 0xdd, //0x00000df3 pmovmskb %xmm5, %ebx 0x66, 0x0f, 0x6f, 0xee, //0x00000df7 movdqa %xmm6, %xmm5 0x66, 0x0f, 0x74, 0xe8, //0x00000dfb pcmpeqb %xmm0, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xd5, //0x00000dff pmovmskb %xmm5, %r10d + 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x00000dff pmovmskb %xmm5, %r9d 0x66, 0x0f, 0x6f, 0xec, //0x00000e04 movdqa %xmm4, %xmm5 0x66, 0x0f, 0x74, 0xe8, //0x00000e08 pcmpeqb %xmm0, %xmm5 0x66, 0x44, 0x0f, 0xd7, 0xfd, //0x00000e0c pmovmskb %xmm5, %r15d @@ -886,7 +889,7 @@ var _text_validate_one = []byte{ 0x66, 0x44, 0x0f, 0xd7, 0xed, //0x00000e19 pmovmskb %xmm5, %r13d 0x66, 0x0f, 0x6f, 0xef, //0x00000e1e movdqa %xmm7, %xmm5 0x66, 0x0f, 0x74, 0xe9, //0x00000e22 pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x00000e26 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0xd7, 0xd5, //0x00000e26 pmovmskb %xmm5, %edx 0x66, 0x0f, 0x6f, 0xee, //0x00000e2a movdqa %xmm6, %xmm5 0x66, 0x0f, 0x74, 0xe9, //0x00000e2e pcmpeqb %xmm1, %xmm5 0x66, 0x0f, 0xd7, 0xcd, //0x00000e32 pmovmskb %xmm5, %ecx @@ -897,3281 +900,3312 @@ var _text_validate_one = []byte{ 0x66, 0x0f, 0x64, 0xef, //0x00000e48 pcmpgtb %xmm7, %xmm5 0x66, 0x41, 0x0f, 0x64, 0xfa, //0x00000e4c pcmpgtb %xmm10, %xmm7 0x66, 0x0f, 0xdb, 0xfd, //0x00000e51 pand %xmm5, %xmm7 - 0x66, 0x0f, 0xd7, 0xf7, //0x00000e55 pmovmskb %xmm7, %esi + 0x66, 0x0f, 0xd7, 0xff, //0x00000e55 pmovmskb %xmm7, %edi 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x00000e59 movdqa %xmm12, %xmm5 0x66, 0x0f, 0x64, 0xee, //0x00000e5e pcmpgtb %xmm6, %xmm5 0x66, 0x41, 0x0f, 0x64, 0xf2, //0x00000e62 pcmpgtb %xmm10, %xmm6 0x66, 0x0f, 0xdb, 0xf5, //0x00000e67 pand %xmm5, %xmm6 - 0x66, 0x0f, 0xd7, 0xd6, //0x00000e6b pmovmskb %xmm6, %edx + 0x66, 0x0f, 0xd7, 0xf6, //0x00000e6b pmovmskb %xmm6, %esi 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x00000e6f movdqa %xmm12, %xmm5 0x66, 0x0f, 0x64, 0xec, //0x00000e74 pcmpgtb %xmm4, %xmm5 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00000e78 pcmpgtb %xmm10, %xmm4 0x66, 0x0f, 0xdb, 0xe5, //0x00000e7d pand %xmm5, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xcc, //0x00000e81 pmovmskb %xmm4, %r9d + 0x66, 0x44, 0x0f, 0xd7, 0xd4, //0x00000e81 pmovmskb %xmm4, %r10d 0x49, 0xc1, 0xe7, 0x30, //0x00000e86 shlq $48, %r15 - 0x49, 0xc1, 0xe2, 0x20, //0x00000e8a shlq $32, %r10 - 0x4d, 0x09, 0xfa, //0x00000e8e orq %r15, %r10 + 0x49, 0xc1, 0xe1, 0x20, //0x00000e8a shlq $32, %r9 + 0x4d, 0x09, 0xf9, //0x00000e8e orq %r15, %r9 0x48, 0xc1, 0xe3, 0x10, //0x00000e91 shlq $16, %rbx - 0x4c, 0x09, 0xd3, //0x00000e95 orq %r10, %rbx + 0x4c, 0x09, 0xcb, //0x00000e95 orq %r9, %rbx 0x49, 0x09, 0xdb, //0x00000e98 orq %rbx, %r11 0x49, 0xc1, 0xe0, 0x30, //0x00000e9b shlq $48, %r8 0x48, 0xc1, 0xe1, 0x20, //0x00000e9f shlq $32, %rcx 0x4c, 0x09, 0xc1, //0x00000ea3 orq %r8, %rcx - 0x48, 0xc1, 0xe7, 0x10, //0x00000ea6 shlq $16, %rdi - 0x48, 0x09, 0xcf, //0x00000eaa orq %rcx, %rdi - 0x49, 0xc1, 0xe1, 0x30, //0x00000ead shlq $48, %r9 - 0x48, 0xc1, 0xe2, 0x20, //0x00000eb1 shlq $32, %rdx - 0x4c, 0x09, 0xca, //0x00000eb5 orq %r9, %rdx - 0x48, 0xc1, 0xe6, 0x10, //0x00000eb8 shlq $16, %rsi - 0x48, 0x09, 0xd6, //0x00000ebc orq %rdx, %rsi - 0x49, 0x09, 0xfd, //0x00000ebf orq %rdi, %r13 - 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00000ec2 jne LBB0_177 + 0x48, 0xc1, 0xe2, 0x10, //0x00000ea6 shlq $16, %rdx + 0x48, 0x09, 0xca, //0x00000eaa orq %rcx, %rdx + 0x49, 0xc1, 0xe2, 0x30, //0x00000ead shlq $48, %r10 + 0x48, 0xc1, 0xe6, 0x20, //0x00000eb1 shlq $32, %rsi + 0x4c, 0x09, 0xd6, //0x00000eb5 orq %r10, %rsi + 0x48, 0xc1, 0xe7, 0x10, //0x00000eb8 shlq $16, %rdi + 0x48, 0x09, 0xf7, //0x00000ebc orq %rsi, %rdi + 0x49, 0x09, 0xd5, //0x00000ebf orq %rdx, %r13 + 0x0f, 0x85, 0x51, 0x00, 0x00, 0x00, //0x00000ec2 jne LBB0_182 0x4d, 0x85, 0xe4, //0x00000ec8 testq %r12, %r12 - 0x0f, 0x85, 0x5e, 0x00, 0x00, 0x00, //0x00000ecb jne LBB0_179 + 0x0f, 0x85, 0x5e, 0x00, 0x00, 0x00, //0x00000ecb jne LBB0_184 0x31, 0xdb, //0x00000ed1 xorl %ebx, %ebx - //0x00000ed3 LBB0_163 + //0x00000ed3 LBB0_168 0x66, 0x41, 0x0f, 0x6f, 0xe4, //0x00000ed3 movdqa %xmm12, %xmm4 0x66, 0x0f, 0x64, 0xe3, //0x00000ed8 pcmpgtb %xmm3, %xmm4 0x66, 0x41, 0x0f, 0x64, 0xda, //0x00000edc pcmpgtb %xmm10, %xmm3 0x66, 0x0f, 0xdb, 0xdc, //0x00000ee1 pand %xmm4, %xmm3 0x66, 0x0f, 0xd7, 0xcb, //0x00000ee5 pmovmskb %xmm3, %ecx - 0x48, 0x09, 0xce, //0x00000ee9 orq %rcx, %rsi + 0x48, 0x09, 0xcf, //0x00000ee9 orq %rcx, %rdi 0x4d, 0x85, 0xdb, //0x00000eec testq %r11, %r11 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00000eef movq $-72(%rbp), %r13 - 0x0f, 0x85, 0x82, 0x00, 0x00, 0x00, //0x00000ef3 jne LBB0_180 - 0x48, 0x85, 0xf6, //0x00000ef9 testq %rsi, %rsi - 0x0f, 0x85, 0x84, 0x2b, 0x00, 0x00, //0x00000efc jne LBB0_618 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00000eef movq $-80(%rbp), %r13 + 0x0f, 0x85, 0x82, 0x00, 0x00, 0x00, //0x00000ef3 jne LBB0_185 + 0x48, 0x85, 0xff, //0x00000ef9 testq %rdi, %rdi + 0x0f, 0x85, 0xec, 0x2b, 0x00, 0x00, //0x00000efc jne LBB0_631 0x49, 0x83, 0xc6, 0xc0, //0x00000f02 addq $-64, %r14 0x48, 0x83, 0xc0, 0x40, //0x00000f06 addq $64, %rax 0x49, 0x83, 0xfe, 0x3f, //0x00000f0a cmpq $63, %r14 - 0x0f, 0x87, 0xac, 0xfe, 0xff, 0xff, //0x00000f0e ja LBB0_160 - 0xe9, 0x6b, 0x18, 0x00, 0x00, //0x00000f14 jmp LBB0_166 - //0x00000f19 LBB0_177 + 0x0f, 0x87, 0xac, 0xfe, 0xff, 0xff, //0x00000f0e ja LBB0_165 + 0xe9, 0xb3, 0x18, 0x00, 0x00, //0x00000f14 jmp LBB0_171 + //0x00000f19 LBB0_182 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00000f19 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00000f1e jne LBB0_179 + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00000f1e jne LBB0_184 0x49, 0x0f, 0xbc, 0xcd, //0x00000f24 bsfq %r13, %rcx 0x48, 0x01, 0xc1, //0x00000f28 addq %rax, %rcx 0x48, 0x89, 0x4d, 0xc8, //0x00000f2b movq %rcx, $-56(%rbp) - //0x00000f2f LBB0_179 + //0x00000f2f LBB0_184 0x4c, 0x89, 0xe1, //0x00000f2f movq %r12, %rcx 0x48, 0xf7, 0xd1, //0x00000f32 notq %rcx 0x4c, 0x21, 0xe9, //0x00000f35 andq %r13, %rcx 0x48, 0x8d, 0x14, 0x09, //0x00000f38 leaq (%rcx,%rcx), %rdx 0x4c, 0x09, 0xe2, //0x00000f3c orq %r12, %rdx - 0x48, 0x89, 0xd7, //0x00000f3f movq %rdx, %rdi - 0x48, 0xf7, 0xd7, //0x00000f42 notq %rdi - 0x4c, 0x21, 0xef, //0x00000f45 andq %r13, %rdi + 0x48, 0x89, 0xd6, //0x00000f3f movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000f42 notq %rsi + 0x4c, 0x21, 0xee, //0x00000f45 andq %r13, %rsi 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00000f48 movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xdf, //0x00000f52 andq %rbx, %rdi + 0x48, 0x21, 0xde, //0x00000f52 andq %rbx, %rsi 0x31, 0xdb, //0x00000f55 xorl %ebx, %ebx - 0x48, 0x01, 0xcf, //0x00000f57 addq %rcx, %rdi + 0x48, 0x01, 0xce, //0x00000f57 addq %rcx, %rsi 0x0f, 0x92, 0xc3, //0x00000f5a setb %bl - 0x48, 0x01, 0xff, //0x00000f5d addq %rdi, %rdi + 0x48, 0x01, 0xf6, //0x00000f5d addq %rsi, %rsi 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00000f60 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xcf, //0x00000f6a xorq %rcx, %rdi - 0x48, 0x21, 0xd7, //0x00000f6d andq %rdx, %rdi - 0x48, 0xf7, 0xd7, //0x00000f70 notq %rdi - 0x49, 0x21, 0xfb, //0x00000f73 andq %rdi, %r11 - 0xe9, 0x58, 0xff, 0xff, 0xff, //0x00000f76 jmp LBB0_163 - //0x00000f7b LBB0_180 + 0x48, 0x31, 0xce, //0x00000f6a xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00000f6d andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00000f70 notq %rsi + 0x49, 0x21, 0xf3, //0x00000f73 andq %rsi, %r11 + 0xe9, 0x58, 0xff, 0xff, 0xff, //0x00000f76 jmp LBB0_168 + //0x00000f7b LBB0_185 0x49, 0x0f, 0xbc, 0xcb, //0x00000f7b bsfq %r11, %rcx - 0x48, 0x85, 0xf6, //0x00000f7f testq %rsi, %rsi - 0x0f, 0x84, 0xdb, 0x02, 0x00, 0x00, //0x00000f82 je LBB0_221 - 0x48, 0x0f, 0xbc, 0xd6, //0x00000f88 bsfq %rsi, %rdx + 0x48, 0x85, 0xff, //0x00000f7f testq %rdi, %rdi + 0x0f, 0x84, 0xc4, 0x02, 0x00, 0x00, //0x00000f82 je LBB0_227 + 0x48, 0x0f, 0xbc, 0xd7, //0x00000f88 bsfq %rdi, %rdx 0x4c, 0x8b, 0x75, 0xd0, //0x00000f8c movq $-48(%rbp), %r14 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00000f90 movabsq $4294977024, %r11 0x48, 0x39, 0xca, //0x00000f9a cmpq %rcx, %rdx - 0x0f, 0x83, 0xdc, 0x02, 0x00, 0x00, //0x00000f9d jae LBB0_222 - 0xe9, 0x74, 0x2c, 0x00, 0x00, //0x00000fa3 jmp LBB0_182 - //0x00000fa8 LBB0_183 - 0x41, 0x89, 0xcb, //0x00000fa8 movl %ecx, %r11d - 0x4d, 0x01, 0xf3, //0x00000fab addq %r14, %r11 - 0x4d, 0x01, 0xeb, //0x00000fae addq %r13, %r11 - //0x00000fb1 LBB0_184 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00000fb1 movq $-1, %r13 - 0x4d, 0x85, 0xc0, //0x00000fb8 testq %r8, %r8 - 0x0f, 0x85, 0x49, 0x02, 0x00, 0x00, //0x00000fbb jne LBB0_213 - 0xe9, 0x00, 0x2c, 0x00, 0x00, //0x00000fc1 jmp LBB0_185 - //0x00000fc6 LBB0_186 - 0x49, 0x29, 0xd1, //0x00000fc6 subq %rdx, %r9 - 0x48, 0x89, 0xd1, //0x00000fc9 movq %rdx, %rcx - 0x0f, 0x84, 0x73, 0x2c, 0x00, 0x00, //0x00000fcc je LBB0_644 - 0x4c, 0x89, 0x65, 0xc0, //0x00000fd2 movq %r12, $-64(%rbp) - 0x49, 0x83, 0xf9, 0x40, //0x00000fd6 cmpq $64, %r9 - 0x0f, 0x82, 0x9e, 0x1f, 0x00, 0x00, //0x00000fda jb LBB0_494 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000fe0 movq $-1, $-56(%rbp) - 0x48, 0x89, 0xc8, //0x00000fe8 movq %rcx, %rax - 0x45, 0x31, 0xe4, //0x00000feb xorl %r12d, %r12d - 0x90, 0x90, //0x00000fee .p2align 4, 0x90 - //0x00000ff0 LBB0_189 - 0x48, 0x8b, 0x4d, 0xc0, //0x00000ff0 movq $-64(%rbp), %rcx - 0xf3, 0x44, 0x0f, 0x6f, 0x2c, 0x01, //0x00000ff4 movdqu (%rcx,%rax), %xmm13 - 0xf3, 0x0f, 0x6f, 0x74, 0x01, 0x10, //0x00000ffa movdqu $16(%rcx,%rax), %xmm6 - 0xf3, 0x0f, 0x6f, 0x6c, 0x01, 0x20, //0x00001000 movdqu $32(%rcx,%rax), %xmm5 - 0xf3, 0x0f, 0x6f, 0x64, 0x01, 0x30, //0x00001006 movdqu $48(%rcx,%rax), %xmm4 - 0x66, 0x41, 0x0f, 0x6f, 0xdd, //0x0000100c movdqa %xmm13, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001011 pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00001015 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x6f, 0xde, //0x0000101a movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x0000101e pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xdb, //0x00001022 pmovmskb %xmm3, %ebx - 0x66, 0x0f, 0x6f, 0xdd, //0x00001026 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x0000102a pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xf3, //0x0000102e pmovmskb %xmm3, %r14d - 0x66, 0x0f, 0x6f, 0xdc, //0x00001033 movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001037 pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x0000103b pmovmskb %xmm3, %r15d - 0x66, 0x41, 0x0f, 0x6f, 0xdd, //0x00001040 movdqa %xmm13, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00001045 pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00001049 pmovmskb %xmm3, %r13d - 0x66, 0x0f, 0x6f, 0xde, //0x0000104e movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00001052 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001056 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xdd, //0x0000105a movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000105e pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001062 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdc, //0x00001066 movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000106a pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x0000106e pmovmskb %xmm3, %r10d - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00001073 movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xde, //0x00001078 pcmpgtb %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xf2, //0x0000107c pcmpgtb %xmm10, %xmm6 - 0x66, 0x0f, 0xdb, 0xf3, //0x00001081 pand %xmm3, %xmm6 - 0x66, 0x0f, 0xd7, 0xfe, //0x00001085 pmovmskb %xmm6, %edi - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00001089 movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdd, //0x0000108e pcmpgtb %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xea, //0x00001092 pcmpgtb %xmm10, %xmm5 - 0x66, 0x0f, 0xdb, 0xeb, //0x00001097 pand %xmm3, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x0000109b pmovmskb %xmm5, %edx - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x0000109f movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x000010a4 pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x000010a8 pcmpgtb %xmm10, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x000010ad pand %xmm3, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xc4, //0x000010b1 pmovmskb %xmm4, %r8d - 0x49, 0xc1, 0xe7, 0x30, //0x000010b6 shlq $48, %r15 - 0x49, 0xc1, 0xe6, 0x20, //0x000010ba shlq $32, %r14 - 0x4d, 0x09, 0xfe, //0x000010be orq %r15, %r14 - 0x48, 0xc1, 0xe3, 0x10, //0x000010c1 shlq $16, %rbx - 0x4c, 0x09, 0xf3, //0x000010c5 orq %r14, %rbx - 0x49, 0x09, 0xdb, //0x000010c8 orq %rbx, %r11 - 0x49, 0xc1, 0xe2, 0x30, //0x000010cb shlq $48, %r10 - 0x48, 0xc1, 0xe6, 0x20, //0x000010cf shlq $32, %rsi - 0x4c, 0x09, 0xd6, //0x000010d3 orq %r10, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x000010d6 shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x000010da orq %rsi, %rcx - 0x49, 0xc1, 0xe0, 0x30, //0x000010dd shlq $48, %r8 - 0x48, 0xc1, 0xe2, 0x20, //0x000010e1 shlq $32, %rdx - 0x4c, 0x09, 0xc2, //0x000010e5 orq %r8, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x000010e8 shlq $16, %rdi - 0x48, 0x09, 0xd7, //0x000010ec orq %rdx, %rdi - 0x49, 0x09, 0xcd, //0x000010ef orq %rcx, %r13 - 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x000010f2 jne LBB0_206 - 0x4d, 0x85, 0xe4, //0x000010f8 testq %r12, %r12 - 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x000010fb jne LBB0_208 - 0x45, 0x31, 0xe4, //0x00001101 xorl %r12d, %r12d - 0x4c, 0x8b, 0x75, 0xd0, //0x00001104 movq $-48(%rbp), %r14 - //0x00001108 LBB0_192 - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00001108 movdqa %xmm12, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xdd, //0x0000110d pcmpgtb %xmm13, %xmm3 - 0x66, 0x45, 0x0f, 0x64, 0xea, //0x00001112 pcmpgtb %xmm10, %xmm13 - 0x66, 0x44, 0x0f, 0xdb, 0xeb, //0x00001117 pand %xmm3, %xmm13 - 0x66, 0x41, 0x0f, 0xd7, 0xcd, //0x0000111c pmovmskb %xmm13, %ecx - 0x48, 0x09, 0xcf, //0x00001121 orq %rcx, %rdi - 0x4d, 0x85, 0xdb, //0x00001124 testq %r11, %r11 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00001127 movq $-72(%rbp), %r13 - 0x0f, 0x85, 0x91, 0x00, 0x00, 0x00, //0x0000112b jne LBB0_210 - 0x48, 0x85, 0xff, //0x00001131 testq %rdi, %rdi - 0x0f, 0x85, 0x6f, 0x2a, 0x00, 0x00, //0x00001134 jne LBB0_632 - 0x49, 0x83, 0xc1, 0xc0, //0x0000113a addq $-64, %r9 - 0x48, 0x83, 0xc0, 0x40, //0x0000113e addq $64, %rax - 0x49, 0x83, 0xf9, 0x3f, //0x00001142 cmpq $63, %r9 - 0x0f, 0x87, 0xa4, 0xfe, 0xff, 0xff, //0x00001146 ja LBB0_189 - 0xe9, 0xd2, 0x17, 0x00, 0x00, //0x0000114c jmp LBB0_195 - //0x00001151 LBB0_206 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00001151 cmpq $-1, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x00001156 movq $-48(%rbp), %r14 - 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x0000115a jne LBB0_209 - 0x49, 0x0f, 0xbc, 0xcd, //0x00001160 bsfq %r13, %rcx - 0x48, 0x01, 0xc1, //0x00001164 addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00001167 movq %rcx, $-56(%rbp) - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x0000116b jmp LBB0_209 - //0x00001170 LBB0_208 - 0x4c, 0x8b, 0x75, 0xd0, //0x00001170 movq $-48(%rbp), %r14 - //0x00001174 LBB0_209 - 0x4c, 0x89, 0xe1, //0x00001174 movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x00001177 notq %rcx - 0x4c, 0x21, 0xe9, //0x0000117a andq %r13, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x0000117d leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xe2, //0x00001181 orq %r12, %rdx - 0x48, 0x89, 0xd6, //0x00001184 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00001187 notq %rsi - 0x4c, 0x21, 0xee, //0x0000118a andq %r13, %rsi - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000118d movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xde, //0x00001197 andq %rbx, %rsi - 0x45, 0x31, 0xe4, //0x0000119a xorl %r12d, %r12d - 0x48, 0x01, 0xce, //0x0000119d addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc4, //0x000011a0 setb %r12b - 0x48, 0x01, 0xf6, //0x000011a4 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000011a7 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x000011b1 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x000011b4 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x000011b7 notq %rsi - 0x49, 0x21, 0xf3, //0x000011ba andq %rsi, %r11 - 0xe9, 0x46, 0xff, 0xff, 0xff, //0x000011bd jmp LBB0_192 - //0x000011c2 LBB0_210 - 0x49, 0x0f, 0xbc, 0xcb, //0x000011c2 bsfq %r11, %rcx - 0x48, 0x85, 0xff, //0x000011c6 testq %rdi, %rdi - 0x0f, 0x84, 0x0c, 0x06, 0x00, 0x00, //0x000011c9 je LBB0_302 - 0x48, 0x0f, 0xbc, 0xd7, //0x000011cf bsfq %rdi, %rdx - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000011d3 movabsq $4294977024, %r11 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x5a, 0xee, 0xff, 0xff, //0x000011dd movdqu $-4518(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x48, 0x39, 0xca, //0x000011e6 cmpq %rcx, %rdx - 0x0f, 0x83, 0x0d, 0x06, 0x00, 0x00, //0x000011e9 jae LBB0_303 - 0xe9, 0xf8, 0x29, 0x00, 0x00, //0x000011ef jmp LBB0_640 - //0x000011f4 LBB0_212 - 0x48, 0x01, 0xf9, //0x000011f4 addq %rdi, %rcx - 0x49, 0x89, 0xcb, //0x000011f7 movq %rcx, %r11 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000011fa movq $-1, %r13 - 0x4d, 0x85, 0xc0, //0x00001201 testq %r8, %r8 - 0x0f, 0x84, 0xbc, 0x29, 0x00, 0x00, //0x00001204 je LBB0_185 - //0x0000120a LBB0_213 - 0x4d, 0x85, 0xc9, //0x0000120a testq %r9, %r9 - 0x48, 0x8b, 0x75, 0xc0, //0x0000120d movq $-64(%rbp), %rsi - 0x0f, 0x84, 0x1b, 0x28, 0x00, 0x00, //0x00001211 je LBB0_612 - 0x4d, 0x85, 0xff, //0x00001217 testq %r15, %r15 - 0x0f, 0x84, 0x12, 0x28, 0x00, 0x00, //0x0000121a je LBB0_612 - 0x4d, 0x29, 0xf3, //0x00001220 subq %r14, %r11 - 0x49, 0x8d, 0x4b, 0xff, //0x00001223 leaq $-1(%r11), %rcx - 0x49, 0x39, 0xc8, //0x00001227 cmpq %rcx, %r8 - 0x0f, 0x84, 0xac, 0xef, 0xff, 0xff, //0x0000122a je LBB0_1 - 0x49, 0x39, 0xc9, //0x00001230 cmpq %rcx, %r9 - 0x0f, 0x84, 0xa3, 0xef, 0xff, 0xff, //0x00001233 je LBB0_1 - 0x49, 0x39, 0xcf, //0x00001239 cmpq %rcx, %r15 - 0x0f, 0x84, 0x9a, 0xef, 0xff, 0xff, //0x0000123c je LBB0_1 - 0x4d, 0x85, 0xc9, //0x00001242 testq %r9, %r9 - 0x0f, 0x8e, 0x6d, 0x05, 0x00, 0x00, //0x00001245 jle LBB0_299 - 0x49, 0x8d, 0x49, 0xff, //0x0000124b leaq $-1(%r9), %rcx - 0x49, 0x39, 0xcf, //0x0000124f cmpq %rcx, %r15 - 0x0f, 0x84, 0x60, 0x05, 0x00, 0x00, //0x00001252 je LBB0_299 - 0x49, 0xf7, 0xd1, //0x00001258 notq %r9 - 0x4d, 0x89, 0xcd, //0x0000125b movq %r9, %r13 - 0xe9, 0x7f, 0xef, 0xff, 0xff, //0x0000125e jmp LBB0_2 - //0x00001263 LBB0_221 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00001263 movl $64, %edx - 0x4c, 0x8b, 0x75, 0xd0, //0x00001268 movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000126c movabsq $4294977024, %r11 - 0x48, 0x39, 0xca, //0x00001276 cmpq %rcx, %rdx - 0x0f, 0x82, 0x9d, 0x29, 0x00, 0x00, //0x00001279 jb LBB0_182 - //0x0000127f LBB0_222 - 0x48, 0x01, 0xc8, //0x0000127f addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00001282 addq $1, %rax - //0x00001286 LBB0_223 - 0x48, 0x85, 0xc0, //0x00001286 testq %rax, %rax - 0x0f, 0x88, 0x7e, 0x27, 0x00, 0x00, //0x00001289 js LBB0_609 - //0x0000128f LBB0_224 - 0x49, 0x89, 0x06, //0x0000128f movq %rax, (%r14) - 0x48, 0x8b, 0x45, 0xb0, //0x00001292 movq $-80(%rbp), %rax - 0x48, 0x85, 0xc0, //0x00001296 testq %rax, %rax - 0x0f, 0x8f, 0x21, 0xef, 0xff, 0xff, //0x00001299 jg LBB0_4 - 0xe9, 0x54, 0x27, 0x00, 0x00, //0x0000129f jmp LBB0_606 - //0x000012a4 LBB0_225 - 0x49, 0x8b, 0x0e, //0x000012a4 movq (%r14), %rcx - 0x48, 0x8b, 0x55, 0xa8, //0x000012a7 movq $-88(%rbp), %rdx - 0x48, 0x8b, 0x52, 0x08, //0x000012ab movq $8(%rdx), %rdx - 0x48, 0x8d, 0x72, 0xfc, //0x000012af leaq $-4(%rdx), %rsi - 0x48, 0x39, 0xf1, //0x000012b3 cmpq %rsi, %rcx - 0x0f, 0x87, 0xc2, 0x27, 0x00, 0x00, //0x000012b6 ja LBB0_617 - 0x41, 0x8b, 0x14, 0x0c, //0x000012bc movl (%r12,%rcx), %edx - 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x000012c0 cmpl $1702063201, %edx - 0x0f, 0x85, 0xe7, 0x27, 0x00, 0x00, //0x000012c6 jne LBB0_622 - 0x48, 0x8d, 0x41, 0x04, //0x000012cc leaq $4(%rcx), %rax - 0x49, 0x89, 0x06, //0x000012d0 movq %rax, (%r14) - 0x48, 0x85, 0xc9, //0x000012d3 testq %rcx, %rcx - 0x0f, 0x8f, 0xe4, 0xee, 0xff, 0xff, //0x000012d6 jg LBB0_4 - 0xe9, 0xbc, 0x28, 0x00, 0x00, //0x000012dc jmp LBB0_228 - //0x000012e1 LBB0_229 - 0xf6, 0x45, 0x98, 0x40, //0x000012e1 testb $64, $-104(%rbp) - 0x0f, 0x85, 0x57, 0x05, 0x00, 0x00, //0x000012e5 jne LBB0_308 - 0x49, 0x8b, 0x45, 0x00, //0x000012eb movq (%r13), %rax - 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x000012ef cmpq $4095, %rax - 0x0f, 0x8f, 0xf1, 0x26, 0x00, 0x00, //0x000012f5 jg LBB0_634 - 0x48, 0x8d, 0x48, 0x01, //0x000012fb leaq $1(%rax), %rcx - 0x49, 0x89, 0x4d, 0x00, //0x000012ff movq %rcx, (%r13) - 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x05, 0x00, 0x00, 0x00, //0x00001303 movq $5, $8(%r13,%rax,8) - 0xe9, 0xaf, 0xee, 0xff, 0xff, //0x0000130c jmp LBB0_4 - //0x00001311 LBB0_232 - 0x48, 0x8b, 0x4d, 0x98, //0x00001311 movq $-104(%rbp), %rcx - 0xf6, 0xc1, 0x40, //0x00001315 testb $64, %cl - 0x0f, 0x85, 0xa0, 0x09, 0x00, 0x00, //0x00001318 jne LBB0_334 - 0x49, 0x8b, 0x16, //0x0000131e movq (%r14), %rdx - 0x48, 0x8b, 0x45, 0xa8, //0x00001321 movq $-88(%rbp), %rax - 0x48, 0x8b, 0x40, 0x08, //0x00001325 movq $8(%rax), %rax - 0xf6, 0xc1, 0x20, //0x00001329 testb $32, %cl - 0x48, 0x89, 0xd1, //0x0000132c movq %rdx, %rcx - 0x48, 0x89, 0x55, 0xb0, //0x0000132f movq %rdx, $-80(%rbp) - 0x48, 0x89, 0x45, 0xa0, //0x00001333 movq %rax, $-96(%rbp) - 0x0f, 0x85, 0x45, 0x10, 0x00, 0x00, //0x00001337 jne LBB0_385 - 0x49, 0x89, 0xc1, //0x0000133d movq %rax, %r9 - 0x49, 0x29, 0xd1, //0x00001340 subq %rdx, %r9 - 0x0f, 0x84, 0xef, 0x28, 0x00, 0x00, //0x00001343 je LBB0_646 - 0x49, 0x83, 0xf9, 0x40, //0x00001349 cmpq $64, %r9 - 0x0f, 0x82, 0x05, 0x1d, 0x00, 0x00, //0x0000134d jb LBB0_501 - 0x48, 0x8b, 0x45, 0xb0, //0x00001353 movq $-80(%rbp), %rax - 0x49, 0x89, 0xc6, //0x00001357 movq %rax, %r14 - 0x49, 0xf7, 0xd6, //0x0000135a notq %r14 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000135d movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00001365 xorl %r8d, %r8d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001368 .p2align 4, 0x90 - //0x00001370 LBB0_237 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00001370 movdqu (%r12,%rax), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00001376 movdqu $16(%r12,%rax), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000137d movdqu $32(%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00001384 movdqu $48(%r12,%rax), %xmm6 - 0x66, 0x0f, 0x6f, 0xfb, //0x0000138b movdqa %xmm3, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000138f pcmpeqb %xmm0, %xmm7 - 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00001393 pmovmskb %xmm7, %r10d - 0x66, 0x0f, 0x6f, 0xfc, //0x00001398 movdqa %xmm4, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x0000139c pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xcf, //0x000013a0 pmovmskb %xmm7, %ecx - 0x66, 0x0f, 0x6f, 0xfd, //0x000013a4 movdqa %xmm5, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000013a8 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x000013ac pmovmskb %xmm7, %edi - 0x66, 0x0f, 0x6f, 0xfe, //0x000013b0 movdqa %xmm6, %xmm7 - 0x66, 0x0f, 0x74, 0xf8, //0x000013b4 pcmpeqb %xmm0, %xmm7 - 0x66, 0x0f, 0xd7, 0xd7, //0x000013b8 pmovmskb %xmm7, %edx - 0x66, 0x0f, 0x74, 0xd9, //0x000013bc pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x000013c0 pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x74, 0xe1, //0x000013c5 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xdc, //0x000013c9 pmovmskb %xmm4, %ebx - 0x66, 0x0f, 0x74, 0xe9, //0x000013cd pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x000013d1 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x74, 0xf1, //0x000013d5 pcmpeqb %xmm1, %xmm6 - 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x000013d9 pmovmskb %xmm6, %r15d - 0x48, 0xc1, 0xe2, 0x30, //0x000013de shlq $48, %rdx - 0x48, 0xc1, 0xe7, 0x20, //0x000013e2 shlq $32, %rdi - 0x48, 0x09, 0xd7, //0x000013e6 orq %rdx, %rdi - 0x48, 0xc1, 0xe1, 0x10, //0x000013e9 shlq $16, %rcx - 0x48, 0x09, 0xf9, //0x000013ed orq %rdi, %rcx - 0x49, 0x09, 0xca, //0x000013f0 orq %rcx, %r10 - 0x49, 0xc1, 0xe7, 0x30, //0x000013f3 shlq $48, %r15 - 0x48, 0xc1, 0xe6, 0x20, //0x000013f7 shlq $32, %rsi - 0x4c, 0x09, 0xfe, //0x000013fb orq %r15, %rsi - 0x48, 0xc1, 0xe3, 0x10, //0x000013fe shlq $16, %rbx - 0x48, 0x09, 0xf3, //0x00001402 orq %rsi, %rbx - 0x49, 0x09, 0xdb, //0x00001405 orq %rbx, %r11 - 0x0f, 0x85, 0x3a, 0x00, 0x00, 0x00, //0x00001408 jne LBB0_246 - 0x4d, 0x85, 0xc0, //0x0000140e testq %r8, %r8 - 0x0f, 0x85, 0x47, 0x00, 0x00, 0x00, //0x00001411 jne LBB0_248 - 0x45, 0x31, 0xc0, //0x00001417 xorl %r8d, %r8d - 0x4d, 0x85, 0xd2, //0x0000141a testq %r10, %r10 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000141d movabsq $4294977024, %r11 - 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, //0x00001427 jne LBB0_249 - //0x0000142d LBB0_240 - 0x49, 0x83, 0xc1, 0xc0, //0x0000142d addq $-64, %r9 - 0x49, 0x83, 0xc6, 0xc0, //0x00001431 addq $-64, %r14 - 0x48, 0x83, 0xc0, 0x40, //0x00001435 addq $64, %rax - 0x49, 0x83, 0xf9, 0x3f, //0x00001439 cmpq $63, %r9 - 0x0f, 0x87, 0x2d, 0xff, 0xff, 0xff, //0x0000143d ja LBB0_237 - 0xe9, 0x06, 0x18, 0x00, 0x00, //0x00001443 jmp LBB0_241 - //0x00001448 LBB0_246 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00001448 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x0000144d jne LBB0_248 - 0x49, 0x0f, 0xbc, 0xcb, //0x00001453 bsfq %r11, %rcx - 0x48, 0x01, 0xc1, //0x00001457 addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x0000145a movq %rcx, $-56(%rbp) - //0x0000145e LBB0_248 - 0x4c, 0x89, 0xc1, //0x0000145e movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00001461 notq %rcx - 0x4c, 0x21, 0xd9, //0x00001464 andq %r11, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x00001467 leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xc2, //0x0000146b orq %r8, %rdx - 0x48, 0x89, 0xd6, //0x0000146e movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00001471 notq %rsi - 0x4c, 0x21, 0xde, //0x00001474 andq %r11, %rsi - 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001477 movabsq $-6148914691236517206, %rdi - 0x48, 0x21, 0xfe, //0x00001481 andq %rdi, %rsi - 0x45, 0x31, 0xc0, //0x00001484 xorl %r8d, %r8d - 0x48, 0x01, 0xce, //0x00001487 addq %rcx, %rsi - 0x41, 0x0f, 0x92, 0xc0, //0x0000148a setb %r8b - 0x48, 0x01, 0xf6, //0x0000148e addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001491 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x0000149b xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x0000149e andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x000014a1 notq %rsi - 0x49, 0x21, 0xf2, //0x000014a4 andq %rsi, %r10 - 0x4d, 0x85, 0xd2, //0x000014a7 testq %r10, %r10 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000014aa movabsq $4294977024, %r11 - 0x0f, 0x84, 0x73, 0xff, 0xff, 0xff, //0x000014b4 je LBB0_240 - //0x000014ba LBB0_249 - 0x49, 0x0f, 0xbc, 0xc2, //0x000014ba bsfq %r10, %rax - 0x4c, 0x29, 0xf0, //0x000014be subq %r14, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x000014c1 movq $-48(%rbp), %r14 - 0xe9, 0x73, 0x11, 0x00, 0x00, //0x000014c5 jmp LBB0_426 - //0x000014ca LBB0_250 - 0x48, 0x8b, 0x45, 0xa8, //0x000014ca movq $-88(%rbp), %rax - 0x48, 0x8b, 0x78, 0x08, //0x000014ce movq $8(%rax), %rdi - 0x49, 0x8b, 0x06, //0x000014d2 movq (%r14), %rax - 0xf6, 0x45, 0x98, 0x40, //0x000014d5 testb $64, $-104(%rbp) - 0x0f, 0x85, 0xf2, 0x08, 0x00, 0x00, //0x000014d9 jne LBB0_344 - 0x48, 0x29, 0xc7, //0x000014df subq %rax, %rdi - 0x0f, 0x84, 0xe7, 0x26, 0x00, 0x00, //0x000014e2 je LBB0_635 - 0x4d, 0x8d, 0x04, 0x04, //0x000014e8 leaq (%r12,%rax), %r8 - 0x41, 0x80, 0x38, 0x30, //0x000014ec cmpb $48, (%r8) - 0x0f, 0x85, 0x36, 0x00, 0x00, 0x00, //0x000014f0 jne LBB0_256 - 0xbb, 0x01, 0x00, 0x00, 0x00, //0x000014f6 movl $1, %ebx - 0x48, 0x83, 0xff, 0x01, //0x000014fb cmpq $1, %rdi - 0x0f, 0x84, 0x23, 0x17, 0x00, 0x00, //0x000014ff je LBB0_469 - 0x41, 0x8a, 0x48, 0x01, //0x00001505 movb $1(%r8), %cl - 0x80, 0xc1, 0xd2, //0x00001509 addb $-46, %cl - 0x80, 0xf9, 0x37, //0x0000150c cmpb $55, %cl - 0x0f, 0x87, 0x13, 0x17, 0x00, 0x00, //0x0000150f ja LBB0_469 - 0x0f, 0xb6, 0xc9, //0x00001515 movzbl %cl, %ecx - 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x00001518 movabsq $36028797027352577, %rdx - 0x48, 0x0f, 0xa3, 0xca, //0x00001522 btq %rcx, %rdx - 0x0f, 0x83, 0xfc, 0x16, 0x00, 0x00, //0x00001526 jae LBB0_469 - //0x0000152c LBB0_256 - 0x48, 0x83, 0xff, 0x10, //0x0000152c cmpq $16, %rdi - 0x0f, 0x82, 0x02, 0x1b, 0x00, 0x00, //0x00001530 jb LBB0_500 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00001536 movq $-1, %r13 - 0x31, 0xdb, //0x0000153d xorl %ebx, %ebx - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x0000153f movq $-1, %r10 - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00001546 movq $-1, %r14 - 0x49, 0x89, 0xf9, //0x0000154d movq %rdi, %r9 - //0x00001550 .p2align 4, 0x90 - //0x00001550 LBB0_258 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x18, //0x00001550 movdqu (%r8,%rbx), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x00001556 movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x64, 0x25, 0x3e, 0xeb, 0xff, 0xff, //0x0000155a pcmpgtb $-5314(%rip), %xmm4 /* LCPI0_10+0(%rip) */ - 0x66, 0x41, 0x0f, 0x6f, 0xef, //0x00001562 movdqa %xmm15, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x00001567 pcmpgtb %xmm3, %xmm5 - 0x66, 0x0f, 0xdb, 0xec, //0x0000156b pand %xmm4, %xmm5 - 0x66, 0x0f, 0x6f, 0xe3, //0x0000156f movdqa %xmm3, %xmm4 - 0x66, 0x0f, 0x74, 0x25, 0x45, 0xeb, 0xff, 0xff, //0x00001573 pcmpeqb $-5307(%rip), %xmm4 /* LCPI0_12+0(%rip) */ - 0x66, 0x0f, 0x6f, 0xf3, //0x0000157b movdqa %xmm3, %xmm6 - 0x66, 0x0f, 0x74, 0x35, 0x49, 0xeb, 0xff, 0xff, //0x0000157f pcmpeqb $-5303(%rip), %xmm6 /* LCPI0_13+0(%rip) */ - 0x66, 0x0f, 0xeb, 0xf4, //0x00001587 por %xmm4, %xmm6 - 0x66, 0x0f, 0x6f, 0xe3, //0x0000158b movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xe1, //0x0000158f pand %xmm9, %xmm4 - 0x66, 0x0f, 0x74, 0x1d, 0x44, 0xeb, 0xff, 0xff, //0x00001594 pcmpeqb $-5308(%rip), %xmm3 /* LCPI0_14+0(%rip) */ - 0x66, 0x41, 0x0f, 0x74, 0xe3, //0x0000159c pcmpeqb %xmm11, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xfc, //0x000015a1 pmovmskb %xmm4, %r15d - 0x66, 0x0f, 0xeb, 0xe3, //0x000015a6 por %xmm3, %xmm4 - 0x66, 0x0f, 0xeb, 0xee, //0x000015aa por %xmm6, %xmm5 - 0x66, 0x0f, 0xeb, 0xec, //0x000015ae por %xmm4, %xmm5 - 0x66, 0x0f, 0xd7, 0xd3, //0x000015b2 pmovmskb %xmm3, %edx - 0x66, 0x44, 0x0f, 0xd7, 0xde, //0x000015b6 pmovmskb %xmm6, %r11d - 0x66, 0x0f, 0xd7, 0xcd, //0x000015bb pmovmskb %xmm5, %ecx - 0xf7, 0xd1, //0x000015bf notl %ecx - 0x0f, 0xbc, 0xc9, //0x000015c1 bsfl %ecx, %ecx - 0x83, 0xf9, 0x10, //0x000015c4 cmpl $16, %ecx - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x000015c7 je LBB0_260 - 0xbe, 0xff, 0xff, 0xff, 0xff, //0x000015cd movl $-1, %esi - 0xd3, 0xe6, //0x000015d2 shll %cl, %esi - 0xf7, 0xd6, //0x000015d4 notl %esi - 0x21, 0xf2, //0x000015d6 andl %esi, %edx - 0x41, 0x21, 0xf7, //0x000015d8 andl %esi, %r15d - 0x44, 0x21, 0xde, //0x000015db andl %r11d, %esi - 0x41, 0x89, 0xf3, //0x000015de movl %esi, %r11d - //0x000015e1 LBB0_260 - 0x8d, 0x72, 0xff, //0x000015e1 leal $-1(%rdx), %esi - 0x21, 0xd6, //0x000015e4 andl %edx, %esi - 0x0f, 0x85, 0x06, 0x16, 0x00, 0x00, //0x000015e6 jne LBB0_463 - 0x41, 0x8d, 0x77, 0xff, //0x000015ec leal $-1(%r15), %esi - 0x44, 0x21, 0xfe, //0x000015f0 andl %r15d, %esi - 0x0f, 0x85, 0xf9, 0x15, 0x00, 0x00, //0x000015f3 jne LBB0_463 - 0x41, 0x8d, 0x73, 0xff, //0x000015f9 leal $-1(%r11), %esi - 0x44, 0x21, 0xde, //0x000015fd andl %r11d, %esi - 0x0f, 0x85, 0xec, 0x15, 0x00, 0x00, //0x00001600 jne LBB0_463 - 0x85, 0xd2, //0x00001606 testl %edx, %edx - 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x00001608 je LBB0_266 - 0x0f, 0xbc, 0xd2, //0x0000160e bsfl %edx, %edx - 0x49, 0x83, 0xfe, 0xff, //0x00001611 cmpq $-1, %r14 - 0x0f, 0x85, 0xfc, 0x15, 0x00, 0x00, //0x00001615 jne LBB0_466 - 0x48, 0x01, 0xda, //0x0000161b addq %rbx, %rdx - 0x49, 0x89, 0xd6, //0x0000161e movq %rdx, %r14 - //0x00001621 LBB0_266 - 0x45, 0x85, 0xff, //0x00001621 testl %r15d, %r15d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00001624 je LBB0_269 - 0x41, 0x0f, 0xbc, 0xd7, //0x0000162a bsfl %r15d, %edx - 0x49, 0x83, 0xfa, 0xff, //0x0000162e cmpq $-1, %r10 - 0x0f, 0x85, 0xdf, 0x15, 0x00, 0x00, //0x00001632 jne LBB0_466 - 0x48, 0x01, 0xda, //0x00001638 addq %rbx, %rdx - 0x49, 0x89, 0xd2, //0x0000163b movq %rdx, %r10 - //0x0000163e LBB0_269 - 0x45, 0x85, 0xdb, //0x0000163e testl %r11d, %r11d - 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00001641 je LBB0_272 - 0x41, 0x0f, 0xbc, 0xd3, //0x00001647 bsfl %r11d, %edx - 0x49, 0x83, 0xfd, 0xff, //0x0000164b cmpq $-1, %r13 - 0x0f, 0x85, 0xc2, 0x15, 0x00, 0x00, //0x0000164f jne LBB0_466 - 0x48, 0x01, 0xda, //0x00001655 addq %rbx, %rdx - 0x49, 0x89, 0xd5, //0x00001658 movq %rdx, %r13 - //0x0000165b LBB0_272 - 0x83, 0xf9, 0x10, //0x0000165b cmpl $16, %ecx - 0x0f, 0x85, 0x36, 0x0f, 0x00, 0x00, //0x0000165e jne LBB0_411 - 0x49, 0x83, 0xc1, 0xf0, //0x00001664 addq $-16, %r9 - 0x48, 0x83, 0xc3, 0x10, //0x00001668 addq $16, %rbx - 0x49, 0x83, 0xf9, 0x0f, //0x0000166c cmpq $15, %r9 - 0x0f, 0x87, 0xda, 0xfe, 0xff, 0xff, //0x00001670 ja LBB0_258 - 0x49, 0x8d, 0x14, 0x18, //0x00001676 leaq (%r8,%rbx), %rdx - 0x49, 0x89, 0xd3, //0x0000167a movq %rdx, %r11 - 0x48, 0x39, 0xdf, //0x0000167d cmpq %rbx, %rdi - 0x0f, 0x84, 0x28, 0x0f, 0x00, 0x00, //0x00001680 je LBB0_413 - //0x00001686 LBB0_275 - 0x4e, 0x8d, 0x1c, 0x0a, //0x00001686 leaq (%rdx,%r9), %r11 - 0x49, 0x89, 0xd7, //0x0000168a movq %rdx, %r15 - 0x4d, 0x29, 0xc7, //0x0000168d subq %r8, %r15 - 0x31, 0xdb, //0x00001690 xorl %ebx, %ebx - 0xe9, 0x26, 0x00, 0x00, 0x00, //0x00001692 jmp LBB0_279 - //0x00001697 LBB0_276 - 0x49, 0x83, 0xfd, 0xff, //0x00001697 cmpq $-1, %r13 - 0x0f, 0x85, 0x65, 0x15, 0x00, 0x00, //0x0000169b jne LBB0_465 - 0x4d, 0x8d, 0x2c, 0x1f, //0x000016a1 leaq (%r15,%rbx), %r13 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000016a5 .p2align 4, 0x90 - //0x000016b0 LBB0_278 - 0x48, 0x83, 0xc3, 0x01, //0x000016b0 addq $1, %rbx - 0x49, 0x39, 0xd9, //0x000016b4 cmpq %rbx, %r9 - 0x0f, 0x84, 0xf1, 0x0e, 0x00, 0x00, //0x000016b7 je LBB0_413 - //0x000016bd LBB0_279 - 0x0f, 0xbe, 0x0c, 0x1a, //0x000016bd movsbl (%rdx,%rbx), %ecx - 0x8d, 0x71, 0xd0, //0x000016c1 leal $-48(%rcx), %esi - 0x83, 0xfe, 0x0a, //0x000016c4 cmpl $10, %esi - 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x000016c7 jb LBB0_278 - 0x8d, 0x71, 0xd5, //0x000016cd leal $-43(%rcx), %esi - 0x83, 0xfe, 0x1a, //0x000016d0 cmpl $26, %esi - 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x000016d3 ja LBB0_284 - 0x48, 0x8d, 0x3d, 0x08, 0x28, 0x00, 0x00, //0x000016d9 leaq $10248(%rip), %rdi /* LJTI0_2+0(%rip) */ - 0x48, 0x63, 0x0c, 0xb7, //0x000016e0 movslq (%rdi,%rsi,4), %rcx - 0x48, 0x01, 0xf9, //0x000016e4 addq %rdi, %rcx - 0xff, 0xe1, //0x000016e7 jmpq *%rcx - //0x000016e9 LBB0_282 - 0x49, 0x83, 0xfe, 0xff, //0x000016e9 cmpq $-1, %r14 - 0x0f, 0x85, 0x13, 0x15, 0x00, 0x00, //0x000016ed jne LBB0_465 - 0x4d, 0x8d, 0x34, 0x1f, //0x000016f3 leaq (%r15,%rbx), %r14 - 0xe9, 0xb4, 0xff, 0xff, 0xff, //0x000016f7 jmp LBB0_278 - //0x000016fc LBB0_284 - 0x83, 0xf9, 0x65, //0x000016fc cmpl $101, %ecx - 0x0f, 0x85, 0xa3, 0x0e, 0x00, 0x00, //0x000016ff jne LBB0_412 - //0x00001705 LBB0_285 - 0x49, 0x83, 0xfa, 0xff, //0x00001705 cmpq $-1, %r10 - 0x0f, 0x85, 0xf7, 0x14, 0x00, 0x00, //0x00001709 jne LBB0_465 - 0x4d, 0x8d, 0x14, 0x1f, //0x0000170f leaq (%r15,%rbx), %r10 - 0xe9, 0x98, 0xff, 0xff, 0xff, //0x00001713 jmp LBB0_278 - //0x00001718 LBB0_287 - 0x49, 0x8b, 0x0e, //0x00001718 movq (%r14), %rcx - 0x48, 0x8b, 0x55, 0xa8, //0x0000171b movq $-88(%rbp), %rdx - 0x48, 0x8b, 0x52, 0x08, //0x0000171f movq $8(%rdx), %rdx - 0x48, 0x8d, 0x72, 0xfd, //0x00001723 leaq $-3(%rdx), %rsi - 0x48, 0x39, 0xf1, //0x00001727 cmpq %rsi, %rcx - 0x0f, 0x87, 0x4e, 0x23, 0x00, 0x00, //0x0000172a ja LBB0_617 - 0x48, 0x8d, 0x41, 0xff, //0x00001730 leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x00001734 cmpl $1819047278, $-1(%r12,%rcx) - 0x0f, 0x84, 0x60, 0x00, 0x00, 0x00, //0x0000173d je LBB0_298 - 0xe9, 0x07, 0x24, 0x00, 0x00, //0x00001743 jmp LBB0_289 - //0x00001748 LBB0_293 - 0xf6, 0x45, 0x98, 0x40, //0x00001748 testb $64, $-104(%rbp) - 0x0f, 0x85, 0x62, 0x07, 0x00, 0x00, //0x0000174c jne LBB0_356 - 0x49, 0x8b, 0x45, 0x00, //0x00001752 movq (%r13), %rax - 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00001756 cmpq $4095, %rax - 0x0f, 0x8f, 0x8a, 0x22, 0x00, 0x00, //0x0000175c jg LBB0_634 - 0x48, 0x8d, 0x48, 0x01, //0x00001762 leaq $1(%rax), %rcx - 0x49, 0x89, 0x4d, 0x00, //0x00001766 movq %rcx, (%r13) - 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x06, 0x00, 0x00, 0x00, //0x0000176a movq $6, $8(%r13,%rax,8) - 0xe9, 0x48, 0xea, 0xff, 0xff, //0x00001773 jmp LBB0_4 - //0x00001778 LBB0_296 - 0x49, 0x8b, 0x0e, //0x00001778 movq (%r14), %rcx - 0x48, 0x8b, 0x55, 0xa8, //0x0000177b movq $-88(%rbp), %rdx - 0x48, 0x8b, 0x52, 0x08, //0x0000177f movq $8(%rdx), %rdx - 0x48, 0x8d, 0x72, 0xfd, //0x00001783 leaq $-3(%rdx), %rsi - 0x48, 0x39, 0xf1, //0x00001787 cmpq %rsi, %rcx - 0x0f, 0x87, 0xee, 0x22, 0x00, 0x00, //0x0000178a ja LBB0_617 - 0x48, 0x8d, 0x41, 0xff, //0x00001790 leaq $-1(%rcx), %rax - 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00001794 cmpl $1702195828, $-1(%r12,%rcx) - 0x0f, 0x85, 0x65, 0x23, 0x00, 0x00, //0x0000179d jne LBB0_627 - //0x000017a3 LBB0_298 - 0x48, 0x8d, 0x51, 0x03, //0x000017a3 leaq $3(%rcx), %rdx - 0x49, 0x89, 0x16, //0x000017a7 movq %rdx, (%r14) - 0x48, 0x85, 0xc9, //0x000017aa testq %rcx, %rcx - 0x0f, 0x8f, 0x0d, 0xea, 0xff, 0xff, //0x000017ad jg LBB0_4 - 0xe9, 0x8f, 0x22, 0x00, 0x00, //0x000017b3 jmp LBB0_638 - //0x000017b8 LBB0_299 - 0x4c, 0x89, 0xc1, //0x000017b8 movq %r8, %rcx - 0x4c, 0x09, 0xf9, //0x000017bb orq %r15, %rcx - 0x0f, 0x99, 0xc1, //0x000017be setns %cl - 0x0f, 0x88, 0x9f, 0x0b, 0x00, 0x00, //0x000017c1 js LBB0_384 - 0x4d, 0x39, 0xf8, //0x000017c7 cmpq %r15, %r8 - 0x0f, 0x8c, 0x96, 0x0b, 0x00, 0x00, //0x000017ca jl LBB0_384 - 0x49, 0xf7, 0xd0, //0x000017d0 notq %r8 - 0x4d, 0x89, 0xc5, //0x000017d3 movq %r8, %r13 - 0xe9, 0x07, 0xea, 0xff, 0xff, //0x000017d6 jmp LBB0_2 - //0x000017db LBB0_302 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x000017db movl $64, %edx - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000017e0 movabsq $4294977024, %r11 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x4d, 0xe8, 0xff, 0xff, //0x000017ea movdqu $-6067(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x48, 0x39, 0xca, //0x000017f3 cmpq %rcx, %rdx - 0x0f, 0x82, 0xf0, 0x23, 0x00, 0x00, //0x000017f6 jb LBB0_640 - //0x000017fc LBB0_303 - 0x48, 0x01, 0xc8, //0x000017fc addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x000017ff addq $1, %rax - //0x00001803 LBB0_304 - 0x48, 0x85, 0xc0, //0x00001803 testq %rax, %rax - 0x0f, 0x88, 0x59, 0x22, 0x00, 0x00, //0x00001806 js LBB0_615 - 0x49, 0x89, 0x06, //0x0000180c movq %rax, (%r14) - 0x48, 0x8b, 0x45, 0xb0, //0x0000180f movq $-80(%rbp), %rax - 0x48, 0x85, 0xc0, //0x00001813 testq %rax, %rax - 0x0f, 0x8e, 0xdc, 0x21, 0x00, 0x00, //0x00001816 jle LBB0_606 - //0x0000181c LBB0_306 - 0x49, 0x8b, 0x45, 0x00, //0x0000181c movq (%r13), %rax - 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00001820 cmpq $4095, %rax - 0x0f, 0x8f, 0xc0, 0x21, 0x00, 0x00, //0x00001826 jg LBB0_634 - 0x48, 0x8d, 0x48, 0x01, //0x0000182c leaq $1(%rax), %rcx - 0x49, 0x89, 0x4d, 0x00, //0x00001830 movq %rcx, (%r13) - 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x04, 0x00, 0x00, 0x00, //0x00001834 movq $4, $8(%r13,%rax,8) - 0xe9, 0x7e, 0xe9, 0xff, 0xff, //0x0000183d jmp LBB0_4 - //0x00001842 LBB0_308 - 0x48, 0x8b, 0x55, 0xa8, //0x00001842 movq $-88(%rbp), %rdx - 0x48, 0x8b, 0x52, 0x08, //0x00001846 movq $8(%rdx), %rdx - 0x49, 0x8b, 0x0e, //0x0000184a movq (%r14), %rcx - 0x48, 0x29, 0xca, //0x0000184d subq %rcx, %rdx - 0x48, 0x89, 0x4d, 0xb0, //0x00001850 movq %rcx, $-80(%rbp) - 0x49, 0x01, 0xcc, //0x00001854 addq %rcx, %r12 - 0x45, 0x31, 0xc0, //0x00001857 xorl %r8d, %r8d - 0x45, 0x31, 0xd2, //0x0000185a xorl %r10d, %r10d - 0x45, 0x31, 0xc9, //0x0000185d xorl %r9d, %r9d - 0x45, 0x31, 0xf6, //0x00001860 xorl %r14d, %r14d - 0x48, 0x83, 0xfa, 0x40, //0x00001863 cmpq $64, %rdx - 0x48, 0x89, 0x55, 0xc0, //0x00001867 movq %rdx, $-64(%rbp) - 0x0f, 0x8d, 0x4c, 0x01, 0x00, 0x00, //0x0000186b jge LBB0_309 - //0x00001871 LBB0_318 - 0x48, 0x85, 0xd2, //0x00001871 testq %rdx, %rdx - 0x0f, 0x8e, 0xdd, 0x23, 0x00, 0x00, //0x00001874 jle LBB0_648 - 0x66, 0x0f, 0x6f, 0xf2, //0x0000187a movdqa %xmm2, %xmm6 - 0x66, 0x0f, 0xef, 0xd2, //0x0000187e pxor %xmm2, %xmm2 - 0xf3, 0x0f, 0x7f, 0x55, 0x80, //0x00001882 movdqu %xmm2, $-128(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001887 movdqu %xmm2, $-144(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x0000188f movdqu %xmm2, $-160(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001897 movdqu %xmm2, $-176(%rbp) - 0x4c, 0x89, 0xe7, //0x0000189f movq %r12, %rdi - 0x44, 0x89, 0xe1, //0x000018a2 movl %r12d, %ecx - 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x000018a5 andl $4095, %ecx - 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x000018ab cmpl $4033, %ecx - 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x000018b1 jb LBB0_322 - 0x48, 0x83, 0x7d, 0xc0, 0x20, //0x000018b7 cmpq $32, $-64(%rbp) - 0x0f, 0x82, 0x3b, 0x00, 0x00, 0x00, //0x000018bc jb LBB0_323 - 0x0f, 0x10, 0x1f, //0x000018c2 movups (%rdi), %xmm3 - 0x0f, 0x11, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x000018c5 movups %xmm3, $-176(%rbp) - 0xf3, 0x0f, 0x6f, 0x5f, 0x10, //0x000018cc movdqu $16(%rdi), %xmm3 - 0xf3, 0x0f, 0x7f, 0x9d, 0x60, 0xff, 0xff, 0xff, //0x000018d1 movdqu %xmm3, $-160(%rbp) - 0x48, 0x83, 0xc7, 0x20, //0x000018d9 addq $32, %rdi - 0x48, 0x8b, 0x4d, 0xc0, //0x000018dd movq $-64(%rbp), %rcx - 0x48, 0x8d, 0x71, 0xe0, //0x000018e1 leaq $-32(%rcx), %rsi - 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x000018e5 leaq $-144(%rbp), %rdx - 0xe9, 0x17, 0x00, 0x00, 0x00, //0x000018ec jmp LBB0_324 - //0x000018f1 LBB0_322 - 0x66, 0x0f, 0x6f, 0xd6, //0x000018f1 movdqa %xmm6, %xmm2 - 0x49, 0x89, 0xfc, //0x000018f5 movq %rdi, %r12 - 0xe9, 0xc0, 0x00, 0x00, 0x00, //0x000018f8 jmp LBB0_309 - //0x000018fd LBB0_323 - 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x000018fd leaq $-176(%rbp), %rdx - 0x48, 0x8b, 0x75, 0xc0, //0x00001904 movq $-64(%rbp), %rsi - //0x00001908 LBB0_324 - 0x48, 0x83, 0xfe, 0x10, //0x00001908 cmpq $16, %rsi - 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x0000190c jb LBB0_325 - 0xf3, 0x0f, 0x6f, 0x1f, //0x00001912 movdqu (%rdi), %xmm3 - 0xf3, 0x0f, 0x7f, 0x1a, //0x00001916 movdqu %xmm3, (%rdx) - 0x48, 0x83, 0xc7, 0x10, //0x0000191a addq $16, %rdi - 0x48, 0x83, 0xc2, 0x10, //0x0000191e addq $16, %rdx - 0x48, 0x83, 0xc6, 0xf0, //0x00001922 addq $-16, %rsi - 0x48, 0x83, 0xfe, 0x08, //0x00001926 cmpq $8, %rsi - 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x0000192a jae LBB0_332 - //0x00001930 LBB0_326 - 0x48, 0x83, 0xfe, 0x04, //0x00001930 cmpq $4, %rsi - 0x0f, 0x8c, 0x45, 0x00, 0x00, 0x00, //0x00001934 jl LBB0_327 - //0x0000193a LBB0_333 - 0x8b, 0x0f, //0x0000193a movl (%rdi), %ecx - 0x89, 0x0a, //0x0000193c movl %ecx, (%rdx) - 0x48, 0x83, 0xc7, 0x04, //0x0000193e addq $4, %rdi - 0x48, 0x83, 0xc2, 0x04, //0x00001942 addq $4, %rdx - 0x48, 0x83, 0xc6, 0xfc, //0x00001946 addq $-4, %rsi - 0x48, 0x83, 0xfe, 0x02, //0x0000194a cmpq $2, %rsi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x0000194e jae LBB0_328 - 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00001954 jmp LBB0_329 - //0x00001959 LBB0_325 - 0x48, 0x83, 0xfe, 0x08, //0x00001959 cmpq $8, %rsi - 0x0f, 0x82, 0xcd, 0xff, 0xff, 0xff, //0x0000195d jb LBB0_326 - //0x00001963 LBB0_332 - 0x48, 0x8b, 0x0f, //0x00001963 movq (%rdi), %rcx - 0x48, 0x89, 0x0a, //0x00001966 movq %rcx, (%rdx) - 0x48, 0x83, 0xc7, 0x08, //0x00001969 addq $8, %rdi - 0x48, 0x83, 0xc2, 0x08, //0x0000196d addq $8, %rdx - 0x48, 0x83, 0xc6, 0xf8, //0x00001971 addq $-8, %rsi - 0x48, 0x83, 0xfe, 0x04, //0x00001975 cmpq $4, %rsi - 0x0f, 0x8d, 0xbb, 0xff, 0xff, 0xff, //0x00001979 jge LBB0_333 - //0x0000197f LBB0_327 - 0x48, 0x83, 0xfe, 0x02, //0x0000197f cmpq $2, %rsi - 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00001983 jb LBB0_329 - //0x00001989 LBB0_328 - 0x0f, 0xb7, 0x0f, //0x00001989 movzwl (%rdi), %ecx - 0x66, 0x89, 0x0a, //0x0000198c movw %cx, (%rdx) - 0x48, 0x83, 0xc7, 0x02, //0x0000198f addq $2, %rdi - 0x48, 0x83, 0xc2, 0x02, //0x00001993 addq $2, %rdx - 0x48, 0x83, 0xc6, 0xfe, //0x00001997 addq $-2, %rsi - //0x0000199b LBB0_329 - 0x48, 0x89, 0xf9, //0x0000199b movq %rdi, %rcx - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x0000199e leaq $-176(%rbp), %r12 - 0x48, 0x85, 0xf6, //0x000019a5 testq %rsi, %rsi - 0x66, 0x0f, 0x6f, 0xd6, //0x000019a8 movdqa %xmm6, %xmm2 - 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x000019ac je LBB0_309 - 0x8a, 0x09, //0x000019b2 movb (%rcx), %cl - 0x88, 0x0a, //0x000019b4 movb %cl, (%rdx) - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x000019b6 leaq $-176(%rbp), %r12 - //0x000019bd LBB0_309 - 0x66, 0x44, 0x0f, 0x6f, 0xc2, //0x000019bd movdqa %xmm2, %xmm8 - 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x000019c2 movdqu (%r12), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x10, //0x000019c8 movdqu $16(%r12), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x20, //0x000019cf movdqu $32(%r12), %xmm6 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x30, //0x000019d6 movdqu $48(%r12), %xmm5 - 0x66, 0x0f, 0x6f, 0xdc, //0x000019dd movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x000019e1 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x000019e5 pmovmskb %xmm3, %edx - 0x66, 0x0f, 0x6f, 0xdf, //0x000019e9 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x000019ed pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x000019f1 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xde, //0x000019f5 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x000019f9 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x000019fd pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdd, //0x00001a01 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00001a05 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00001a09 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe7, 0x30, //0x00001a0d shlq $48, %rdi - 0x48, 0xc1, 0xe6, 0x20, //0x00001a11 shlq $32, %rsi - 0x48, 0x09, 0xfe, //0x00001a15 orq %rdi, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x00001a18 shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x00001a1c orq %rsi, %rcx - 0x48, 0x09, 0xca, //0x00001a1f orq %rcx, %rdx - 0x48, 0x89, 0xd1, //0x00001a22 movq %rdx, %rcx - 0x66, 0x45, 0x0f, 0x6f, 0xee, //0x00001a25 movdqa %xmm14, %xmm13 - 0x4c, 0x09, 0xd1, //0x00001a2a orq %r10, %rcx - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001a2d jne LBB0_311 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001a33 movq $-1, %rdx - 0x45, 0x31, 0xd2, //0x00001a3a xorl %r10d, %r10d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001a3d jmp LBB0_312 - //0x00001a42 LBB0_311 - 0x4c, 0x89, 0xd1, //0x00001a42 movq %r10, %rcx - 0x48, 0xf7, 0xd1, //0x00001a45 notq %rcx - 0x48, 0x21, 0xd1, //0x00001a48 andq %rdx, %rcx - 0x4c, 0x8d, 0x1c, 0x09, //0x00001a4b leaq (%rcx,%rcx), %r11 - 0x4d, 0x09, 0xd3, //0x00001a4f orq %r10, %r11 - 0x4c, 0x89, 0xdf, //0x00001a52 movq %r11, %rdi - 0x48, 0xf7, 0xd7, //0x00001a55 notq %rdi - 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001a58 movabsq $-6148914691236517206, %rsi - 0x48, 0x21, 0xf2, //0x00001a62 andq %rsi, %rdx - 0x48, 0x21, 0xfa, //0x00001a65 andq %rdi, %rdx - 0x45, 0x31, 0xd2, //0x00001a68 xorl %r10d, %r10d - 0x48, 0x01, 0xca, //0x00001a6b addq %rcx, %rdx - 0x41, 0x0f, 0x92, 0xc2, //0x00001a6e setb %r10b - 0x48, 0x01, 0xd2, //0x00001a72 addq %rdx, %rdx - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001a75 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xca, //0x00001a7f xorq %rcx, %rdx - 0x4c, 0x21, 0xda, //0x00001a82 andq %r11, %rdx - 0x48, 0xf7, 0xd2, //0x00001a85 notq %rdx - //0x00001a88 LBB0_312 - 0x66, 0x0f, 0x6f, 0xdd, //0x00001a88 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001a8c pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001a90 pmovmskb %xmm3, %ecx - 0x48, 0xc1, 0xe1, 0x30, //0x00001a94 shlq $48, %rcx - 0x66, 0x0f, 0x6f, 0xde, //0x00001a98 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001a9c pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001aa0 pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x20, //0x00001aa4 shlq $32, %rsi - 0x48, 0x09, 0xce, //0x00001aa8 orq %rcx, %rsi - 0x66, 0x0f, 0x6f, 0xdf, //0x00001aab movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001aaf pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001ab3 pmovmskb %xmm3, %ecx - 0x48, 0xc1, 0xe1, 0x10, //0x00001ab7 shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x00001abb orq %rsi, %rcx - 0x66, 0x0f, 0x6f, 0xdc, //0x00001abe movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00001ac2 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001ac6 pmovmskb %xmm3, %esi - 0x48, 0x09, 0xce, //0x00001aca orq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00001acd andq %rdx, %rsi - 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x00001ad0 movq %rsi, %xmm3 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xda, 0x00, //0x00001ad5 pclmulqdq $0, %xmm10, %xmm3 - 0x66, 0x49, 0x0f, 0x7e, 0xdb, //0x00001adc movq %xmm3, %r11 - 0x4d, 0x31, 0xc3, //0x00001ae1 xorq %r8, %r11 - 0x66, 0x0f, 0x6f, 0xdc, //0x00001ae4 movdqa %xmm4, %xmm3 - 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x6f, 0xe5, 0xff, 0xff, //0x00001ae8 movdqu $-6801(%rip), %xmm11 /* LCPI0_6+0(%rip) */ - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001af1 pcmpeqb %xmm11, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00001af6 pmovmskb %xmm3, %r13d - 0x66, 0x0f, 0x6f, 0xdf, //0x00001afb movdqa %xmm7, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001aff pcmpeqb %xmm11, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001b04 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xde, //0x00001b08 movdqa %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001b0c pcmpeqb %xmm11, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x00001b11 pmovmskb %xmm3, %edx - 0x66, 0x0f, 0x6f, 0xdd, //0x00001b15 movdqa %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001b19 pcmpeqb %xmm11, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001b1e pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x30, //0x00001b22 shlq $48, %rsi - 0x48, 0xc1, 0xe2, 0x20, //0x00001b26 shlq $32, %rdx - 0x48, 0x09, 0xf2, //0x00001b2a orq %rsi, %rdx - 0x48, 0xc1, 0xe1, 0x10, //0x00001b2d shlq $16, %rcx - 0x48, 0x09, 0xd1, //0x00001b31 orq %rdx, %rcx - 0x49, 0x09, 0xcd, //0x00001b34 orq %rcx, %r13 - 0x4d, 0x89, 0xd8, //0x00001b37 movq %r11, %r8 - 0x49, 0xf7, 0xd0, //0x00001b3a notq %r8 - 0x4d, 0x21, 0xc5, //0x00001b3d andq %r8, %r13 - 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001b40 movdqa %xmm8, %xmm2 - 0x66, 0x41, 0x0f, 0x74, 0xe0, //0x00001b45 pcmpeqb %xmm8, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x00001b4a pmovmskb %xmm4, %edx - 0x66, 0x41, 0x0f, 0x74, 0xf8, //0x00001b4e pcmpeqb %xmm8, %xmm7 - 0x66, 0x0f, 0xd7, 0xf7, //0x00001b53 pmovmskb %xmm7, %esi - 0x66, 0x41, 0x0f, 0x74, 0xf0, //0x00001b57 pcmpeqb %xmm8, %xmm6 - 0x66, 0x0f, 0xd7, 0xce, //0x00001b5c pmovmskb %xmm6, %ecx - 0x66, 0x41, 0x0f, 0x74, 0xe8, //0x00001b60 pcmpeqb %xmm8, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xfd, //0x00001b65 pmovmskb %xmm5, %r15d - 0x49, 0xc1, 0xe7, 0x30, //0x00001b6a shlq $48, %r15 - 0x48, 0xc1, 0xe1, 0x20, //0x00001b6e shlq $32, %rcx - 0x4c, 0x09, 0xf9, //0x00001b72 orq %r15, %rcx - 0x48, 0xc1, 0xe6, 0x10, //0x00001b75 shlq $16, %rsi - 0x48, 0x09, 0xce, //0x00001b79 orq %rcx, %rsi - 0x48, 0x09, 0xf2, //0x00001b7c orq %rsi, %rdx - 0x66, 0x45, 0x0f, 0x6f, 0xf5, //0x00001b7f movdqa %xmm13, %xmm14 - 0x4c, 0x21, 0xc2, //0x00001b84 andq %r8, %rdx - 0x0f, 0x84, 0xaa, 0x00, 0x00, 0x00, //0x00001b87 je LBB0_316 - 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x5a, 0xe5, 0xff, 0xff, //0x00001b8d movdqu $-6822(%rip), %xmm11 /* LCPI0_15+0(%rip) */ - 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001b96 movdqa %xmm8, %xmm2 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x9c, 0xe4, 0xff, 0xff, //0x00001b9b movdqu $-7012(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001ba4 movabsq $3689348814741910323, %r8 - 0xf3, 0x44, 0x0f, 0x6f, 0x05, 0x99, 0xe4, 0xff, 0xff, //0x00001bae movdqu $-7015(%rip), %xmm8 /* LCPI0_5+0(%rip) */ - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001bb7 .p2align 4, 0x90 - //0x00001bc0 LBB0_314 - 0x48, 0x8d, 0x7a, 0xff, //0x00001bc0 leaq $-1(%rdx), %rdi - 0x48, 0x89, 0xf9, //0x00001bc4 movq %rdi, %rcx - 0x4c, 0x21, 0xe9, //0x00001bc7 andq %r13, %rcx - 0x48, 0x89, 0xce, //0x00001bca movq %rcx, %rsi - 0x48, 0xd1, 0xee, //0x00001bcd shrq %rsi - 0x48, 0xbb, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001bd0 movabsq $6148914691236517205, %rbx - 0x48, 0x21, 0xde, //0x00001bda andq %rbx, %rsi - 0x48, 0x29, 0xf1, //0x00001bdd subq %rsi, %rcx - 0x48, 0x89, 0xce, //0x00001be0 movq %rcx, %rsi - 0x4c, 0x21, 0xc6, //0x00001be3 andq %r8, %rsi - 0x48, 0xc1, 0xe9, 0x02, //0x00001be6 shrq $2, %rcx - 0x4c, 0x21, 0xc1, //0x00001bea andq %r8, %rcx - 0x48, 0x01, 0xf1, //0x00001bed addq %rsi, %rcx - 0x48, 0x89, 0xce, //0x00001bf0 movq %rcx, %rsi - 0x48, 0xc1, 0xee, 0x04, //0x00001bf3 shrq $4, %rsi - 0x48, 0x01, 0xce, //0x00001bf7 addq %rcx, %rsi - 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001bfa movabsq $1085102592571150095, %rcx - 0x48, 0x21, 0xce, //0x00001c04 andq %rcx, %rsi - 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00001c07 movabsq $72340172838076673, %rcx - 0x48, 0x0f, 0xaf, 0xf1, //0x00001c11 imulq %rcx, %rsi - 0x48, 0xc1, 0xee, 0x38, //0x00001c15 shrq $56, %rsi - 0x4c, 0x01, 0xce, //0x00001c19 addq %r9, %rsi - 0x4c, 0x39, 0xf6, //0x00001c1c cmpq %r14, %rsi - 0x0f, 0x86, 0xd4, 0x06, 0x00, 0x00, //0x00001c1f jbe LBB0_382 - 0x49, 0x83, 0xc6, 0x01, //0x00001c25 addq $1, %r14 - 0x48, 0x21, 0xfa, //0x00001c29 andq %rdi, %rdx - 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x00001c2c jne LBB0_314 - 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00001c32 jmp LBB0_317 - //0x00001c37 LBB0_316 - 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001c37 movdqa %xmm8, %xmm2 - 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001c3c movabsq $3689348814741910323, %r8 - //0x00001c46 LBB0_317 - 0x49, 0xc1, 0xfb, 0x3f, //0x00001c46 sarq $63, %r11 - 0x4c, 0x89, 0xe9, //0x00001c4a movq %r13, %rcx - 0x48, 0xd1, 0xe9, //0x00001c4d shrq %rcx - 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001c50 movabsq $6148914691236517205, %rdx - 0x48, 0x21, 0xd1, //0x00001c5a andq %rdx, %rcx - 0x49, 0x29, 0xcd, //0x00001c5d subq %rcx, %r13 - 0x4c, 0x89, 0xe9, //0x00001c60 movq %r13, %rcx - 0x4c, 0x21, 0xc1, //0x00001c63 andq %r8, %rcx - 0x49, 0xc1, 0xed, 0x02, //0x00001c66 shrq $2, %r13 - 0x4d, 0x21, 0xc5, //0x00001c6a andq %r8, %r13 - 0x49, 0x01, 0xcd, //0x00001c6d addq %rcx, %r13 - 0x4c, 0x89, 0xe9, //0x00001c70 movq %r13, %rcx - 0x48, 0xc1, 0xe9, 0x04, //0x00001c73 shrq $4, %rcx - 0x4c, 0x01, 0xe9, //0x00001c77 addq %r13, %rcx - 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001c7a movabsq $1085102592571150095, %rdx - 0x48, 0x21, 0xd1, //0x00001c84 andq %rdx, %rcx - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00001c87 movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xca, //0x00001c91 imulq %rdx, %rcx - 0x48, 0xc1, 0xe9, 0x38, //0x00001c95 shrq $56, %rcx - 0x49, 0x01, 0xc9, //0x00001c99 addq %rcx, %r9 - 0x49, 0x83, 0xc4, 0x40, //0x00001c9c addq $64, %r12 - 0x48, 0x8b, 0x55, 0xc0, //0x00001ca0 movq $-64(%rbp), %rdx - 0x48, 0x83, 0xc2, 0xc0, //0x00001ca4 addq $-64, %rdx - 0x4d, 0x89, 0xd8, //0x00001ca8 movq %r11, %r8 - 0x48, 0x83, 0xfa, 0x40, //0x00001cab cmpq $64, %rdx - 0x48, 0x89, 0x55, 0xc0, //0x00001caf movq %rdx, $-64(%rbp) - 0x0f, 0x8d, 0x04, 0xfd, 0xff, 0xff, //0x00001cb3 jge LBB0_309 - 0xe9, 0xb3, 0xfb, 0xff, 0xff, //0x00001cb9 jmp LBB0_318 - //0x00001cbe LBB0_334 - 0x48, 0x8b, 0x4d, 0xa8, //0x00001cbe movq $-88(%rbp), %rcx - 0x4c, 0x8b, 0x49, 0x08, //0x00001cc2 movq $8(%rcx), %r9 - 0x4d, 0x8b, 0x06, //0x00001cc6 movq (%r14), %r8 - 0x4f, 0x8d, 0x14, 0x04, //0x00001cc9 leaq (%r12,%r8), %r10 - 0x4d, 0x29, 0xc1, //0x00001ccd subq %r8, %r9 - 0x49, 0x83, 0xf9, 0x20, //0x00001cd0 cmpq $32, %r9 - 0x0f, 0x8c, 0xdb, 0x00, 0x00, 0x00, //0x00001cd4 jl LBB0_343 - 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x00001cda movl $32, %r14d - 0x31, 0xd2, //0x00001ce0 xorl %edx, %edx - 0x45, 0x31, 0xdb, //0x00001ce2 xorl %r11d, %r11d - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001ce5 .p2align 4, 0x90 - //0x00001cf0 LBB0_336 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x12, //0x00001cf0 movdqu (%r10,%rdx), %xmm3 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x12, 0x10, //0x00001cf6 movdqu $16(%r10,%rdx), %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x00001cfd movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00001d01 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00001d05 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x6f, 0xec, //0x00001d09 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00001d0d pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x00001d11 pmovmskb %xmm5, %edi - 0x48, 0xc1, 0xe7, 0x10, //0x00001d15 shlq $16, %rdi - 0x48, 0x09, 0xf7, //0x00001d19 orq %rsi, %rdi - 0x66, 0x0f, 0x74, 0xd9, //0x00001d1c pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00001d20 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x74, 0xe1, //0x00001d24 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xf4, //0x00001d28 pmovmskb %xmm4, %esi - 0x48, 0xc1, 0xe6, 0x10, //0x00001d2c shlq $16, %rsi - 0x48, 0x09, 0xce, //0x00001d30 orq %rcx, %rsi - 0x48, 0x89, 0xf1, //0x00001d33 movq %rsi, %rcx - 0x4c, 0x09, 0xd9, //0x00001d36 orq %r11, %rcx - 0x0f, 0x84, 0x41, 0x00, 0x00, 0x00, //0x00001d39 je LBB0_338 - 0x44, 0x89, 0xd9, //0x00001d3f movl %r11d, %ecx - 0xf7, 0xd1, //0x00001d42 notl %ecx - 0x21, 0xf1, //0x00001d44 andl %esi, %ecx - 0x44, 0x8d, 0x3c, 0x09, //0x00001d46 leal (%rcx,%rcx), %r15d - 0x45, 0x09, 0xdf, //0x00001d4a orl %r11d, %r15d - 0x44, 0x89, 0xfb, //0x00001d4d movl %r15d, %ebx - 0xf7, 0xd3, //0x00001d50 notl %ebx - 0x21, 0xf3, //0x00001d52 andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001d54 andl $-1431655766, %ebx - 0x45, 0x31, 0xdb, //0x00001d5a xorl %r11d, %r11d - 0x01, 0xcb, //0x00001d5d addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc3, //0x00001d5f setb %r11b - 0x01, 0xdb, //0x00001d63 addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00001d65 xorl $1431655765, %ebx - 0x44, 0x21, 0xfb, //0x00001d6b andl %r15d, %ebx - 0xf7, 0xd3, //0x00001d6e notl %ebx - 0x21, 0xdf, //0x00001d70 andl %ebx, %edi - 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x00001d72 jmp LBB0_339 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001d77 .p2align 4, 0x90 - //0x00001d80 LBB0_338 - 0x45, 0x31, 0xdb, //0x00001d80 xorl %r11d, %r11d - //0x00001d83 LBB0_339 - 0x48, 0x85, 0xff, //0x00001d83 testq %rdi, %rdi - 0x0f, 0x85, 0xe5, 0xed, 0xff, 0xff, //0x00001d86 jne LBB0_129 - 0x48, 0x83, 0xc2, 0x20, //0x00001d8c addq $32, %rdx - 0x4b, 0x8d, 0x0c, 0x31, //0x00001d90 leaq (%r9,%r14), %rcx - 0x48, 0x83, 0xc1, 0xe0, //0x00001d94 addq $-32, %rcx - 0x49, 0x83, 0xc6, 0xe0, //0x00001d98 addq $-32, %r14 - 0x48, 0x83, 0xf9, 0x3f, //0x00001d9c cmpq $63, %rcx - 0x0f, 0x8f, 0x4a, 0xff, 0xff, 0xff, //0x00001da0 jg LBB0_336 - 0x4d, 0x85, 0xdb, //0x00001da6 testq %r11, %r11 - 0x0f, 0x85, 0x4d, 0x19, 0x00, 0x00, //0x00001da9 jne LBB0_570 - 0x49, 0x01, 0xd2, //0x00001daf addq %rdx, %r10 - 0x49, 0x29, 0xd1, //0x00001db2 subq %rdx, %r9 - //0x00001db5 LBB0_343 - 0x4c, 0x8b, 0x75, 0xd0, //0x00001db5 movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001db9 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x00001dc3 testq %r9, %r9 - 0x0f, 0x8f, 0x8e, 0x19, 0x00, 0x00, //0x00001dc6 jg LBB0_574 - 0xe9, 0x76, 0x1c, 0x00, 0x00, //0x00001dcc jmp LBB0_638 - //0x00001dd1 LBB0_344 - 0x48, 0x89, 0xfa, //0x00001dd1 movq %rdi, %rdx - 0x48, 0x29, 0xc2, //0x00001dd4 subq %rax, %rdx - 0x48, 0x83, 0xfa, 0x10, //0x00001dd7 cmpq $16, %rdx - 0x0f, 0x82, 0x3c, 0x12, 0x00, 0x00, //0x00001ddb jb LBB0_498 - 0x48, 0x89, 0xc2, //0x00001de1 movq %rax, %rdx - 0x48, 0xf7, 0xda, //0x00001de4 negq %rdx - 0x48, 0x89, 0xc1, //0x00001de7 movq %rax, %rcx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001dea .p2align 4, 0x90 - //0x00001df0 LBB0_346 - 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x0c, //0x00001df0 movdqu (%r12,%rcx), %xmm3 - 0x66, 0x0f, 0x6f, 0xe3, //0x00001df6 movdqa %xmm3, %xmm4 - 0x66, 0x41, 0x0f, 0x74, 0xe6, //0x00001dfa pcmpeqb %xmm14, %xmm4 - 0x66, 0x41, 0x0f, 0xdb, 0xd9, //0x00001dff pand %xmm9, %xmm3 - 0x66, 0x0f, 0x74, 0xda, //0x00001e04 pcmpeqb %xmm2, %xmm3 - 0x66, 0x0f, 0xeb, 0xdc, //0x00001e08 por %xmm4, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00001e0c pmovmskb %xmm3, %esi - 0x85, 0xf6, //0x00001e10 testl %esi, %esi - 0x0f, 0x85, 0x33, 0x05, 0x00, 0x00, //0x00001e12 jne LBB0_605 - 0x48, 0x83, 0xc1, 0x10, //0x00001e18 addq $16, %rcx - 0x48, 0x8d, 0x34, 0x17, //0x00001e1c leaq (%rdi,%rdx), %rsi - 0x48, 0x83, 0xc6, 0xf0, //0x00001e20 addq $-16, %rsi - 0x48, 0x83, 0xc2, 0xf0, //0x00001e24 addq $-16, %rdx - 0x48, 0x83, 0xfe, 0x0f, //0x00001e28 cmpq $15, %rsi - 0x0f, 0x87, 0xbe, 0xff, 0xff, 0xff, //0x00001e2c ja LBB0_346 - 0x4c, 0x89, 0xe1, //0x00001e32 movq %r12, %rcx - 0x48, 0x29, 0xd1, //0x00001e35 subq %rdx, %rcx - 0x48, 0x01, 0xd7, //0x00001e38 addq %rdx, %rdi - 0x48, 0x89, 0xfa, //0x00001e3b movq %rdi, %rdx - 0x48, 0x85, 0xd2, //0x00001e3e testq %rdx, %rdx - 0x0f, 0x84, 0xe3, 0x11, 0x00, 0x00, //0x00001e41 je LBB0_499 - //0x00001e47 LBB0_349 - 0x48, 0x8d, 0x3c, 0x11, //0x00001e47 leaq (%rcx,%rdx), %rdi - 0x31, 0xf6, //0x00001e4b xorl %esi, %esi - //0x00001e4d LBB0_350 - 0x0f, 0xb6, 0x1c, 0x31, //0x00001e4d movzbl (%rcx,%rsi), %ebx - 0x80, 0xfb, 0x2c, //0x00001e51 cmpb $44, %bl - 0x0f, 0x84, 0x81, 0x0d, 0x00, 0x00, //0x00001e54 je LBB0_462 - 0x80, 0xfb, 0x7d, //0x00001e5a cmpb $125, %bl - 0x0f, 0x84, 0x78, 0x0d, 0x00, 0x00, //0x00001e5d je LBB0_462 - 0x80, 0xfb, 0x5d, //0x00001e63 cmpb $93, %bl - 0x0f, 0x84, 0x6f, 0x0d, 0x00, 0x00, //0x00001e66 je LBB0_462 - 0x48, 0x83, 0xc6, 0x01, //0x00001e6c addq $1, %rsi - 0x48, 0x39, 0xf2, //0x00001e70 cmpq %rsi, %rdx - 0x0f, 0x85, 0xd4, 0xff, 0xff, 0xff, //0x00001e73 jne LBB0_350 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00001e79 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00001e7e movdqa %xmm2, %xmm5 - 0x48, 0x89, 0xf9, //0x00001e82 movq %rdi, %rcx - //0x00001e85 LBB0_355 - 0x4c, 0x29, 0xe1, //0x00001e85 subq %r12, %rcx - 0x4c, 0x8b, 0x75, 0xd0, //0x00001e88 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00001e8c movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001e90 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x00001e9a movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00001e9e movdqa %xmm6, %xmm13 - 0x49, 0x89, 0x0e, //0x00001ea3 movq %rcx, (%r14) - 0x48, 0x85, 0xc0, //0x00001ea6 testq %rax, %rax - 0x0f, 0x8f, 0x11, 0xe3, 0xff, 0xff, //0x00001ea9 jg LBB0_4 - 0xe9, 0x44, 0x1b, 0x00, 0x00, //0x00001eaf jmp LBB0_606 - //0x00001eb4 LBB0_356 - 0x48, 0x8b, 0x55, 0xa8, //0x00001eb4 movq $-88(%rbp), %rdx - 0x48, 0x8b, 0x52, 0x08, //0x00001eb8 movq $8(%rdx), %rdx - 0x49, 0x8b, 0x0e, //0x00001ebc movq (%r14), %rcx - 0x48, 0x29, 0xca, //0x00001ebf subq %rcx, %rdx - 0x48, 0x89, 0x4d, 0xb0, //0x00001ec2 movq %rcx, $-80(%rbp) - 0x49, 0x01, 0xcc, //0x00001ec6 addq %rcx, %r12 - 0x45, 0x31, 0xc0, //0x00001ec9 xorl %r8d, %r8d - 0x45, 0x31, 0xd2, //0x00001ecc xorl %r10d, %r10d - 0x45, 0x31, 0xc9, //0x00001ecf xorl %r9d, %r9d - 0x45, 0x31, 0xf6, //0x00001ed2 xorl %r14d, %r14d - 0x48, 0x83, 0xfa, 0x40, //0x00001ed5 cmpq $64, %rdx - 0x48, 0x89, 0x55, 0xc0, //0x00001ed9 movq %rdx, $-64(%rbp) - 0x0f, 0x8d, 0x5b, 0x01, 0x00, 0x00, //0x00001edd jge LBB0_357 - //0x00001ee3 LBB0_366 - 0x48, 0x85, 0xd2, //0x00001ee3 testq %rdx, %rdx - 0x0f, 0x8e, 0x6b, 0x1d, 0x00, 0x00, //0x00001ee6 jle LBB0_648 - 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00001eec movdqa %xmm13, %xmm7 - 0x66, 0x0f, 0x6f, 0xf2, //0x00001ef1 movdqa %xmm2, %xmm6 - 0x66, 0x0f, 0xef, 0xd2, //0x00001ef5 pxor %xmm2, %xmm2 - 0xf3, 0x0f, 0x7f, 0x55, 0x80, //0x00001ef9 movdqu %xmm2, $-128(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001efe movdqu %xmm2, $-144(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x00001f06 movdqu %xmm2, $-160(%rbp) - 0xf3, 0x0f, 0x7f, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001f0e movdqu %xmm2, $-176(%rbp) - 0x4c, 0x89, 0xe7, //0x00001f16 movq %r12, %rdi - 0x44, 0x89, 0xe1, //0x00001f19 movl %r12d, %ecx - 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00001f1c andl $4095, %ecx - 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00001f22 cmpl $4033, %ecx - 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x00001f28 jb LBB0_370 - 0x48, 0x83, 0x7d, 0xc0, 0x20, //0x00001f2e cmpq $32, $-64(%rbp) - 0x0f, 0x82, 0x40, 0x00, 0x00, 0x00, //0x00001f33 jb LBB0_371 - 0x0f, 0x10, 0x1f, //0x00001f39 movups (%rdi), %xmm3 - 0x0f, 0x11, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x00001f3c movups %xmm3, $-176(%rbp) - 0xf3, 0x0f, 0x6f, 0x5f, 0x10, //0x00001f43 movdqu $16(%rdi), %xmm3 - 0xf3, 0x0f, 0x7f, 0x9d, 0x60, 0xff, 0xff, 0xff, //0x00001f48 movdqu %xmm3, $-160(%rbp) - 0x48, 0x83, 0xc7, 0x20, //0x00001f50 addq $32, %rdi - 0x48, 0x8b, 0x4d, 0xc0, //0x00001f54 movq $-64(%rbp), %rcx - 0x48, 0x8d, 0x71, 0xe0, //0x00001f58 leaq $-32(%rcx), %rsi - 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001f5c leaq $-144(%rbp), %rdx - 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x00001f63 jmp LBB0_372 - //0x00001f68 LBB0_370 - 0x66, 0x0f, 0x6f, 0xd6, //0x00001f68 movdqa %xmm6, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x00001f6c movdqa %xmm7, %xmm13 - 0x49, 0x89, 0xfc, //0x00001f71 movq %rdi, %r12 - 0xe9, 0xc5, 0x00, 0x00, 0x00, //0x00001f74 jmp LBB0_357 - //0x00001f79 LBB0_371 - 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001f79 leaq $-176(%rbp), %rdx - 0x48, 0x8b, 0x75, 0xc0, //0x00001f80 movq $-64(%rbp), %rsi - //0x00001f84 LBB0_372 - 0x48, 0x83, 0xfe, 0x10, //0x00001f84 cmpq $16, %rsi - 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x00001f88 jb LBB0_373 - 0xf3, 0x0f, 0x6f, 0x1f, //0x00001f8e movdqu (%rdi), %xmm3 - 0xf3, 0x0f, 0x7f, 0x1a, //0x00001f92 movdqu %xmm3, (%rdx) - 0x48, 0x83, 0xc7, 0x10, //0x00001f96 addq $16, %rdi - 0x48, 0x83, 0xc2, 0x10, //0x00001f9a addq $16, %rdx - 0x48, 0x83, 0xc6, 0xf0, //0x00001f9e addq $-16, %rsi - 0x48, 0x83, 0xfe, 0x08, //0x00001fa2 cmpq $8, %rsi - 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x00001fa6 jae LBB0_380 - //0x00001fac LBB0_374 - 0x48, 0x83, 0xfe, 0x04, //0x00001fac cmpq $4, %rsi - 0x0f, 0x8c, 0x45, 0x00, 0x00, 0x00, //0x00001fb0 jl LBB0_375 - //0x00001fb6 LBB0_381 - 0x8b, 0x0f, //0x00001fb6 movl (%rdi), %ecx - 0x89, 0x0a, //0x00001fb8 movl %ecx, (%rdx) - 0x48, 0x83, 0xc7, 0x04, //0x00001fba addq $4, %rdi - 0x48, 0x83, 0xc2, 0x04, //0x00001fbe addq $4, %rdx - 0x48, 0x83, 0xc6, 0xfc, //0x00001fc2 addq $-4, %rsi - 0x48, 0x83, 0xfe, 0x02, //0x00001fc6 cmpq $2, %rsi - 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001fca jae LBB0_376 - 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00001fd0 jmp LBB0_377 - //0x00001fd5 LBB0_373 - 0x48, 0x83, 0xfe, 0x08, //0x00001fd5 cmpq $8, %rsi - 0x0f, 0x82, 0xcd, 0xff, 0xff, 0xff, //0x00001fd9 jb LBB0_374 - //0x00001fdf LBB0_380 - 0x48, 0x8b, 0x0f, //0x00001fdf movq (%rdi), %rcx - 0x48, 0x89, 0x0a, //0x00001fe2 movq %rcx, (%rdx) - 0x48, 0x83, 0xc7, 0x08, //0x00001fe5 addq $8, %rdi - 0x48, 0x83, 0xc2, 0x08, //0x00001fe9 addq $8, %rdx - 0x48, 0x83, 0xc6, 0xf8, //0x00001fed addq $-8, %rsi - 0x48, 0x83, 0xfe, 0x04, //0x00001ff1 cmpq $4, %rsi - 0x0f, 0x8d, 0xbb, 0xff, 0xff, 0xff, //0x00001ff5 jge LBB0_381 - //0x00001ffb LBB0_375 - 0x48, 0x83, 0xfe, 0x02, //0x00001ffb cmpq $2, %rsi - 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00001fff jb LBB0_377 - //0x00002005 LBB0_376 - 0x0f, 0xb7, 0x0f, //0x00002005 movzwl (%rdi), %ecx - 0x66, 0x89, 0x0a, //0x00002008 movw %cx, (%rdx) - 0x48, 0x83, 0xc7, 0x02, //0x0000200b addq $2, %rdi - 0x48, 0x83, 0xc2, 0x02, //0x0000200f addq $2, %rdx - 0x48, 0x83, 0xc6, 0xfe, //0x00002013 addq $-2, %rsi - //0x00002017 LBB0_377 - 0x48, 0x89, 0xf9, //0x00002017 movq %rdi, %rcx - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x0000201a leaq $-176(%rbp), %r12 - 0x48, 0x85, 0xf6, //0x00002021 testq %rsi, %rsi - 0x66, 0x0f, 0x6f, 0xd6, //0x00002024 movdqa %xmm6, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x00002028 movdqa %xmm7, %xmm13 - 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x0000202d je LBB0_357 - 0x8a, 0x09, //0x00002033 movb (%rcx), %cl - 0x88, 0x0a, //0x00002035 movb %cl, (%rdx) - 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00002037 leaq $-176(%rbp), %r12 - //0x0000203e LBB0_357 - 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x0000203e movdqu (%r12), %xmm4 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x10, //0x00002044 movdqu $16(%r12), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x20, //0x0000204b movdqu $32(%r12), %xmm6 - 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x30, //0x00002052 movdqu $48(%r12), %xmm5 - 0x66, 0x0f, 0x6f, 0xdc, //0x00002059 movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000205d pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x00002061 pmovmskb %xmm3, %edx - 0x66, 0x0f, 0x6f, 0xdf, //0x00002065 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002069 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x0000206d pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xde, //0x00002071 movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002075 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002079 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdd, //0x0000207d movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002081 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00002085 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe7, 0x30, //0x00002089 shlq $48, %rdi - 0x48, 0xc1, 0xe6, 0x20, //0x0000208d shlq $32, %rsi - 0x48, 0x09, 0xfe, //0x00002091 orq %rdi, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x00002094 shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x00002098 orq %rsi, %rcx - 0x48, 0x09, 0xca, //0x0000209b orq %rcx, %rdx - 0x48, 0x89, 0xd1, //0x0000209e movq %rdx, %rcx - 0x4c, 0x09, 0xd1, //0x000020a1 orq %r10, %rcx - 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x000020a4 jne LBB0_359 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x000020aa movq $-1, %rdx - 0x45, 0x31, 0xd2, //0x000020b1 xorl %r10d, %r10d - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x000020b4 jmp LBB0_360 - //0x000020b9 LBB0_359 - 0x4c, 0x89, 0xd1, //0x000020b9 movq %r10, %rcx - 0x48, 0xf7, 0xd1, //0x000020bc notq %rcx - 0x48, 0x21, 0xd1, //0x000020bf andq %rdx, %rcx - 0x4c, 0x8d, 0x1c, 0x09, //0x000020c2 leaq (%rcx,%rcx), %r11 - 0x4d, 0x09, 0xd3, //0x000020c6 orq %r10, %r11 - 0x4c, 0x89, 0xdf, //0x000020c9 movq %r11, %rdi - 0x48, 0xf7, 0xd7, //0x000020cc notq %rdi - 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000020cf movabsq $-6148914691236517206, %rsi - 0x48, 0x21, 0xf2, //0x000020d9 andq %rsi, %rdx - 0x48, 0x21, 0xfa, //0x000020dc andq %rdi, %rdx - 0x45, 0x31, 0xd2, //0x000020df xorl %r10d, %r10d - 0x48, 0x01, 0xca, //0x000020e2 addq %rcx, %rdx - 0x41, 0x0f, 0x92, 0xc2, //0x000020e5 setb %r10b - 0x48, 0x01, 0xd2, //0x000020e9 addq %rdx, %rdx - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000020ec movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xca, //0x000020f6 xorq %rcx, %rdx - 0x4c, 0x21, 0xda, //0x000020f9 andq %r11, %rdx - 0x48, 0xf7, 0xd2, //0x000020fc notq %rdx - //0x000020ff LBB0_360 - 0x66, 0x0f, 0x6f, 0xdd, //0x000020ff movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00002103 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00002107 pmovmskb %xmm3, %ecx - 0x48, 0xc1, 0xe1, 0x30, //0x0000210b shlq $48, %rcx - 0x66, 0x0f, 0x6f, 0xde, //0x0000210f movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00002113 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002117 pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x20, //0x0000211b shlq $32, %rsi - 0x48, 0x09, 0xce, //0x0000211f orq %rcx, %rsi - 0x66, 0x0f, 0x6f, 0xdf, //0x00002122 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00002126 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x0000212a pmovmskb %xmm3, %ecx - 0x48, 0xc1, 0xe1, 0x10, //0x0000212e shlq $16, %rcx - 0x48, 0x09, 0xf1, //0x00002132 orq %rsi, %rcx - 0x66, 0x0f, 0x6f, 0xdc, //0x00002135 movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x00002139 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x0000213d pmovmskb %xmm3, %esi - 0x48, 0x09, 0xce, //0x00002141 orq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00002144 andq %rdx, %rsi - 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x00002147 movq %rsi, %xmm3 - 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xda, 0x00, //0x0000214c pclmulqdq $0, %xmm10, %xmm3 - 0x66, 0x49, 0x0f, 0x7e, 0xdb, //0x00002153 movq %xmm3, %r11 - 0x4d, 0x31, 0xc3, //0x00002158 xorq %r8, %r11 - 0x66, 0x0f, 0x6f, 0xdc, //0x0000215b movdqa %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x0000215f pcmpeqb %xmm13, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00002164 pmovmskb %xmm3, %r13d - 0x66, 0x0f, 0x6f, 0xdf, //0x00002169 movdqa %xmm7, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x0000216d pcmpeqb %xmm13, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x00002172 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xde, //0x00002176 movdqa %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x0000217a pcmpeqb %xmm13, %xmm3 - 0x66, 0x0f, 0xd7, 0xd3, //0x0000217f pmovmskb %xmm3, %edx - 0x66, 0x0f, 0x6f, 0xdd, //0x00002183 movdqa %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00002187 pcmpeqb %xmm13, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x0000218c pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe6, 0x30, //0x00002190 shlq $48, %rsi - 0x48, 0xc1, 0xe2, 0x20, //0x00002194 shlq $32, %rdx - 0x48, 0x09, 0xf2, //0x00002198 orq %rsi, %rdx - 0x48, 0xc1, 0xe1, 0x10, //0x0000219b shlq $16, %rcx - 0x48, 0x09, 0xd1, //0x0000219f orq %rdx, %rcx - 0x49, 0x09, 0xcd, //0x000021a2 orq %rcx, %r13 - 0x4d, 0x89, 0xd8, //0x000021a5 movq %r11, %r8 - 0x49, 0xf7, 0xd0, //0x000021a8 notq %r8 - 0x4d, 0x21, 0xc5, //0x000021ab andq %r8, %r13 - 0x66, 0x41, 0x0f, 0x74, 0xe0, //0x000021ae pcmpeqb %xmm8, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x000021b3 pmovmskb %xmm4, %edx - 0x66, 0x41, 0x0f, 0x74, 0xf8, //0x000021b7 pcmpeqb %xmm8, %xmm7 - 0x66, 0x0f, 0xd7, 0xf7, //0x000021bc pmovmskb %xmm7, %esi - 0x66, 0x41, 0x0f, 0x74, 0xf0, //0x000021c0 pcmpeqb %xmm8, %xmm6 - 0x66, 0x0f, 0xd7, 0xce, //0x000021c5 pmovmskb %xmm6, %ecx - 0x66, 0x41, 0x0f, 0x74, 0xe8, //0x000021c9 pcmpeqb %xmm8, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xfd, //0x000021ce pmovmskb %xmm5, %r15d - 0x49, 0xc1, 0xe7, 0x30, //0x000021d3 shlq $48, %r15 - 0x48, 0xc1, 0xe1, 0x20, //0x000021d7 shlq $32, %rcx - 0x4c, 0x09, 0xf9, //0x000021db orq %r15, %rcx - 0x48, 0xc1, 0xe6, 0x10, //0x000021de shlq $16, %rsi - 0x48, 0x09, 0xce, //0x000021e2 orq %rcx, %rsi - 0x48, 0x09, 0xf2, //0x000021e5 orq %rsi, %rdx - 0x4c, 0x21, 0xc2, //0x000021e8 andq %r8, %rdx - 0x0f, 0x84, 0x86, 0x00, 0x00, 0x00, //0x000021eb je LBB0_364 - 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x000021f1 movabsq $3689348814741910323, %r8 - 0x90, 0x90, 0x90, 0x90, 0x90, //0x000021fb .p2align 4, 0x90 - //0x00002200 LBB0_362 - 0x48, 0x8d, 0x7a, 0xff, //0x00002200 leaq $-1(%rdx), %rdi - 0x48, 0x89, 0xf9, //0x00002204 movq %rdi, %rcx - 0x4c, 0x21, 0xe9, //0x00002207 andq %r13, %rcx - 0x48, 0x89, 0xce, //0x0000220a movq %rcx, %rsi - 0x48, 0xd1, 0xee, //0x0000220d shrq %rsi - 0x48, 0xbb, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002210 movabsq $6148914691236517205, %rbx - 0x48, 0x21, 0xde, //0x0000221a andq %rbx, %rsi - 0x48, 0x29, 0xf1, //0x0000221d subq %rsi, %rcx + 0x0f, 0x83, 0xc5, 0x02, 0x00, 0x00, //0x00000f9d jae LBB0_228 + 0xe9, 0xdf, 0x2c, 0x00, 0x00, //0x00000fa3 jmp LBB0_187 + //0x00000fa8 LBB0_188 + 0x41, 0x89, 0xc9, //0x00000fa8 movl %ecx, %r9d + 0x49, 0x01, 0xf9, //0x00000fab addq %rdi, %r9 + 0x4d, 0x01, 0xe9, //0x00000fae addq %r13, %r9 + 0xe9, 0x1c, 0x02, 0x00, 0x00, //0x00000fb1 jmp LBB0_217 + //0x00000fb6 LBB0_189 + 0x49, 0x89, 0xc2, //0x00000fb6 movq %rax, %r10 + 0x49, 0x29, 0xd2, //0x00000fb9 subq %rdx, %r10 + 0x0f, 0x84, 0xe1, 0x2c, 0x00, 0x00, //0x00000fbc je LBB0_658 + 0x4c, 0x89, 0x65, 0xb8, //0x00000fc2 movq %r12, $-72(%rbp) + 0x49, 0x83, 0xfa, 0x40, //0x00000fc6 cmpq $64, %r10 + 0x0f, 0x82, 0x15, 0x20, 0x00, 0x00, //0x00000fca jb LBB0_512 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00000fd0 movq $-1, $-56(%rbp) + 0x48, 0x8b, 0x45, 0xc0, //0x00000fd8 movq $-64(%rbp), %rax + 0x45, 0x31, 0xe4, //0x00000fdc xorl %r12d, %r12d + 0x90, //0x00000fdf .p2align 4, 0x90 + //0x00000fe0 LBB0_192 + 0x48, 0x8b, 0x4d, 0xb8, //0x00000fe0 movq $-72(%rbp), %rcx + 0xf3, 0x44, 0x0f, 0x6f, 0x2c, 0x01, //0x00000fe4 movdqu (%rcx,%rax), %xmm13 + 0xf3, 0x0f, 0x6f, 0x74, 0x01, 0x10, //0x00000fea movdqu $16(%rcx,%rax), %xmm6 + 0xf3, 0x0f, 0x6f, 0x6c, 0x01, 0x20, //0x00000ff0 movdqu $32(%rcx,%rax), %xmm5 + 0xf3, 0x0f, 0x6f, 0x64, 0x01, 0x30, //0x00000ff6 movdqu $48(%rcx,%rax), %xmm4 + 0x66, 0x41, 0x0f, 0x6f, 0xdd, //0x00000ffc movdqa %xmm13, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001001 pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00001005 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x6f, 0xde, //0x0000100a movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000100e pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x00001012 pmovmskb %xmm3, %ebx + 0x66, 0x0f, 0x6f, 0xdd, //0x00001016 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000101a pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xf3, //0x0000101e pmovmskb %xmm3, %r14d + 0x66, 0x0f, 0x6f, 0xdc, //0x00001023 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001027 pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x0000102b pmovmskb %xmm3, %r15d + 0x66, 0x41, 0x0f, 0x6f, 0xdd, //0x00001030 movdqa %xmm13, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001035 pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00001039 pmovmskb %xmm3, %r13d + 0x66, 0x0f, 0x6f, 0xde, //0x0000103e movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001042 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001046 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xdd, //0x0000104a movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000104e pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00001052 pmovmskb %xmm3, %edi + 0x66, 0x0f, 0x6f, 0xdc, //0x00001056 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000105a pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xcb, //0x0000105e pmovmskb %xmm3, %r9d + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00001063 movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xde, //0x00001068 pcmpgtb %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xf2, //0x0000106c pcmpgtb %xmm10, %xmm6 + 0x66, 0x0f, 0xdb, 0xf3, //0x00001071 pand %xmm3, %xmm6 + 0x66, 0x0f, 0xd7, 0xf6, //0x00001075 pmovmskb %xmm6, %esi + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00001079 movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdd, //0x0000107e pcmpgtb %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xea, //0x00001082 pcmpgtb %xmm10, %xmm5 + 0x66, 0x0f, 0xdb, 0xeb, //0x00001087 pand %xmm3, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x0000108b pmovmskb %xmm5, %edx + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x0000108f movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00001094 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00001098 pcmpgtb %xmm10, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x0000109d pand %xmm3, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xc4, //0x000010a1 pmovmskb %xmm4, %r8d + 0x49, 0xc1, 0xe7, 0x30, //0x000010a6 shlq $48, %r15 + 0x49, 0xc1, 0xe6, 0x20, //0x000010aa shlq $32, %r14 + 0x4d, 0x09, 0xfe, //0x000010ae orq %r15, %r14 + 0x48, 0xc1, 0xe3, 0x10, //0x000010b1 shlq $16, %rbx + 0x4c, 0x09, 0xf3, //0x000010b5 orq %r14, %rbx + 0x49, 0x09, 0xdb, //0x000010b8 orq %rbx, %r11 + 0x49, 0xc1, 0xe1, 0x30, //0x000010bb shlq $48, %r9 + 0x48, 0xc1, 0xe7, 0x20, //0x000010bf shlq $32, %rdi + 0x4c, 0x09, 0xcf, //0x000010c3 orq %r9, %rdi + 0x48, 0xc1, 0xe1, 0x10, //0x000010c6 shlq $16, %rcx + 0x48, 0x09, 0xf9, //0x000010ca orq %rdi, %rcx + 0x49, 0xc1, 0xe0, 0x30, //0x000010cd shlq $48, %r8 + 0x48, 0xc1, 0xe2, 0x20, //0x000010d1 shlq $32, %rdx + 0x4c, 0x09, 0xc2, //0x000010d5 orq %r8, %rdx + 0x48, 0xc1, 0xe6, 0x10, //0x000010d8 shlq $16, %rsi + 0x48, 0x09, 0xd6, //0x000010dc orq %rdx, %rsi + 0x49, 0x09, 0xcd, //0x000010df orq %rcx, %r13 + 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x000010e2 jne LBB0_209 + 0x4d, 0x85, 0xe4, //0x000010e8 testq %r12, %r12 + 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x000010eb jne LBB0_211 + 0x45, 0x31, 0xe4, //0x000010f1 xorl %r12d, %r12d + 0x4c, 0x8b, 0x75, 0xd0, //0x000010f4 movq $-48(%rbp), %r14 + //0x000010f8 LBB0_195 + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x000010f8 movdqa %xmm12, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xdd, //0x000010fd pcmpgtb %xmm13, %xmm3 + 0x66, 0x45, 0x0f, 0x64, 0xea, //0x00001102 pcmpgtb %xmm10, %xmm13 + 0x66, 0x44, 0x0f, 0xdb, 0xeb, //0x00001107 pand %xmm3, %xmm13 + 0x66, 0x41, 0x0f, 0xd7, 0xcd, //0x0000110c pmovmskb %xmm13, %ecx + 0x48, 0x09, 0xce, //0x00001111 orq %rcx, %rsi + 0x4d, 0x85, 0xdb, //0x00001114 testq %r11, %r11 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00001117 movq $-80(%rbp), %r13 + 0x0f, 0x85, 0x91, 0x00, 0x00, 0x00, //0x0000111b jne LBB0_213 + 0x48, 0x85, 0xf6, //0x00001121 testq %rsi, %rsi + 0x0f, 0x85, 0xe7, 0x2a, 0x00, 0x00, //0x00001124 jne LBB0_645 + 0x49, 0x83, 0xc2, 0xc0, //0x0000112a addq $-64, %r10 + 0x48, 0x83, 0xc0, 0x40, //0x0000112e addq $64, %rax + 0x49, 0x83, 0xfa, 0x3f, //0x00001132 cmpq $63, %r10 + 0x0f, 0x87, 0xa4, 0xfe, 0xff, 0xff, //0x00001136 ja LBB0_192 + 0xe9, 0x27, 0x18, 0x00, 0x00, //0x0000113c jmp LBB0_198 + //0x00001141 LBB0_209 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00001141 cmpq $-1, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x00001146 movq $-48(%rbp), %r14 + 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x0000114a jne LBB0_212 + 0x49, 0x0f, 0xbc, 0xcd, //0x00001150 bsfq %r13, %rcx + 0x48, 0x01, 0xc1, //0x00001154 addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00001157 movq %rcx, $-56(%rbp) + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x0000115b jmp LBB0_212 + //0x00001160 LBB0_211 + 0x4c, 0x8b, 0x75, 0xd0, //0x00001160 movq $-48(%rbp), %r14 + //0x00001164 LBB0_212 + 0x4c, 0x89, 0xe1, //0x00001164 movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x00001167 notq %rcx + 0x4c, 0x21, 0xe9, //0x0000116a andq %r13, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x0000116d leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xe2, //0x00001171 orq %r12, %rdx + 0x48, 0x89, 0xd7, //0x00001174 movq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x00001177 notq %rdi + 0x4c, 0x21, 0xef, //0x0000117a andq %r13, %rdi + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000117d movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xdf, //0x00001187 andq %rbx, %rdi + 0x45, 0x31, 0xe4, //0x0000118a xorl %r12d, %r12d + 0x48, 0x01, 0xcf, //0x0000118d addq %rcx, %rdi + 0x41, 0x0f, 0x92, 0xc4, //0x00001190 setb %r12b + 0x48, 0x01, 0xff, //0x00001194 addq %rdi, %rdi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001197 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcf, //0x000011a1 xorq %rcx, %rdi + 0x48, 0x21, 0xd7, //0x000011a4 andq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x000011a7 notq %rdi + 0x49, 0x21, 0xfb, //0x000011aa andq %rdi, %r11 + 0xe9, 0x46, 0xff, 0xff, 0xff, //0x000011ad jmp LBB0_195 + //0x000011b2 LBB0_213 + 0x49, 0x0f, 0xbc, 0xcb, //0x000011b2 bsfq %r11, %rcx + 0x48, 0x85, 0xf6, //0x000011b6 testq %rsi, %rsi + 0x0f, 0x84, 0x0c, 0x06, 0x00, 0x00, //0x000011b9 je LBB0_310 + 0x48, 0x0f, 0xbc, 0xd6, //0x000011bf bsfq %rsi, %rdx + 0xe9, 0x08, 0x06, 0x00, 0x00, //0x000011c3 jmp LBB0_311 + //0x000011c8 LBB0_215 + 0x48, 0x01, 0xd6, //0x000011c8 addq %rdx, %rsi + 0x49, 0x89, 0xf1, //0x000011cb movq %rsi, %r9 + //0x000011ce LBB0_216 + 0x48, 0x8b, 0x7d, 0xb8, //0x000011ce movq $-72(%rbp), %rdi + //0x000011d2 LBB0_217 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000011d2 movq $-1, %r13 + 0x4d, 0x85, 0xc0, //0x000011d9 testq %r8, %r8 + 0x0f, 0x84, 0xb4, 0x28, 0x00, 0x00, //0x000011dc je LBB0_626 + 0x4d, 0x85, 0xd2, //0x000011e2 testq %r10, %r10 + 0x0f, 0x84, 0xab, 0x28, 0x00, 0x00, //0x000011e5 je LBB0_626 + 0x4d, 0x85, 0xff, //0x000011eb testq %r15, %r15 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000011ee movabsq $4294977024, %r11 + 0x0f, 0x84, 0x98, 0x28, 0x00, 0x00, //0x000011f8 je LBB0_626 + 0x49, 0x29, 0xf9, //0x000011fe subq %rdi, %r9 + 0x49, 0x8d, 0x49, 0xff, //0x00001201 leaq $-1(%r9), %rcx + 0x49, 0x39, 0xc8, //0x00001205 cmpq %rcx, %r8 + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x00001208 je LBB0_226 + 0x49, 0x39, 0xca, //0x0000120e cmpq %rcx, %r10 + 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x00001211 je LBB0_226 + 0x49, 0x39, 0xcf, //0x00001217 cmpq %rcx, %r15 + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x0000121a je LBB0_226 + 0x4d, 0x85, 0xd2, //0x00001220 testq %r10, %r10 + 0x0f, 0x8e, 0x7f, 0x05, 0x00, 0x00, //0x00001223 jle LBB0_307 + 0x49, 0x8d, 0x4a, 0xff, //0x00001229 leaq $-1(%r10), %rcx + 0x49, 0x39, 0xcf, //0x0000122d cmpq %rcx, %r15 + 0x0f, 0x84, 0x72, 0x05, 0x00, 0x00, //0x00001230 je LBB0_307 + 0x49, 0xf7, 0xd2, //0x00001236 notq %r10 + 0x4d, 0x89, 0xd5, //0x00001239 movq %r10, %r13 + 0xe9, 0xb3, 0x14, 0x00, 0x00, //0x0000123c jmp LBB0_451 + //0x00001241 LBB0_226 + 0x49, 0xf7, 0xd9, //0x00001241 negq %r9 + 0x4d, 0x89, 0xcd, //0x00001244 movq %r9, %r13 + 0xe9, 0xa8, 0x14, 0x00, 0x00, //0x00001247 jmp LBB0_451 + //0x0000124c LBB0_227 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000124c movl $64, %edx + 0x4c, 0x8b, 0x75, 0xd0, //0x00001251 movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001255 movabsq $4294977024, %r11 + 0x48, 0x39, 0xca, //0x0000125f cmpq %rcx, %rdx + 0x0f, 0x82, 0x1f, 0x2a, 0x00, 0x00, //0x00001262 jb LBB0_187 + //0x00001268 LBB0_228 + 0x48, 0x01, 0xc8, //0x00001268 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000126b addq $1, %rax + //0x0000126f LBB0_229 + 0x48, 0x85, 0xc0, //0x0000126f testq %rax, %rax + 0x0f, 0x88, 0xf9, 0x27, 0x00, 0x00, //0x00001272 js LBB0_623 + 0x49, 0x89, 0x06, //0x00001278 movq %rax, (%r14) + 0x48, 0x8b, 0x45, 0xc0, //0x0000127b movq $-64(%rbp), %rax + //0x0000127f LBB0_231 + 0x48, 0x85, 0xc0, //0x0000127f testq %rax, %rax + 0x0f, 0x8f, 0x48, 0xef, 0xff, 0xff, //0x00001282 jg LBB0_4 + 0xe9, 0xdb, 0x27, 0x00, 0x00, //0x00001288 jmp LBB0_232 + //0x0000128d LBB0_233 + 0x49, 0x8b, 0x0e, //0x0000128d movq (%r14), %rcx + 0x48, 0x8b, 0x55, 0xa8, //0x00001290 movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x00001294 movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfc, //0x00001298 leaq $-4(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x0000129c cmpq %rsi, %rcx + 0x0f, 0x87, 0x35, 0x28, 0x00, 0x00, //0x0000129f ja LBB0_629 + 0x41, 0x8b, 0x14, 0x0c, //0x000012a5 movl (%r12,%rcx), %edx + 0x81, 0xfa, 0x61, 0x6c, 0x73, 0x65, //0x000012a9 cmpl $1702063201, %edx + 0x0f, 0x85, 0xfb, 0x28, 0x00, 0x00, //0x000012af jne LBB0_640 + 0x48, 0x8d, 0x41, 0x04, //0x000012b5 leaq $4(%rcx), %rax + 0x49, 0x89, 0x06, //0x000012b9 movq %rax, (%r14) + 0x48, 0x85, 0xc9, //0x000012bc testq %rcx, %rcx + 0x0f, 0x8f, 0x0b, 0xef, 0xff, 0xff, //0x000012bf jg LBB0_4 + 0xe9, 0x3b, 0x29, 0x00, 0x00, //0x000012c5 jmp LBB0_236 + //0x000012ca LBB0_237 + 0x48, 0x8b, 0x4d, 0x98, //0x000012ca movq $-104(%rbp), %rcx + 0xf6, 0xc1, 0x40, //0x000012ce testb $64, %cl + 0x0f, 0x85, 0x5b, 0x05, 0x00, 0x00, //0x000012d1 jne LBB0_317 + 0x49, 0x8b, 0x16, //0x000012d7 movq (%r14), %rdx + 0x48, 0x8b, 0x45, 0xa8, //0x000012da movq $-88(%rbp), %rax + 0x48, 0x8b, 0x40, 0x08, //0x000012de movq $8(%rax), %rax + 0xf6, 0xc1, 0x20, //0x000012e2 testb $32, %cl + 0x48, 0x89, 0x45, 0xa0, //0x000012e5 movq %rax, $-96(%rbp) + 0x48, 0x89, 0x55, 0xc0, //0x000012e9 movq %rdx, $-64(%rbp) + 0x0f, 0x85, 0xae, 0x10, 0x00, 0x00, //0x000012ed jne LBB0_400 + 0x49, 0x89, 0xc1, //0x000012f3 movq %rax, %r9 + 0x49, 0x29, 0xd1, //0x000012f6 subq %rdx, %r9 + 0x0f, 0x84, 0xb1, 0x29, 0x00, 0x00, //0x000012f9 je LBB0_660 + 0x49, 0x83, 0xf9, 0x40, //0x000012ff cmpq $64, %r9 + 0x0f, 0x82, 0xb1, 0x1d, 0x00, 0x00, //0x00001303 jb LBB0_518 + 0x49, 0x89, 0xd6, //0x00001309 movq %rdx, %r14 + 0x49, 0xf7, 0xd6, //0x0000130c notq %r14 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000130f movq $-1, $-56(%rbp) + 0x48, 0x89, 0xd0, //0x00001317 movq %rdx, %rax + 0x45, 0x31, 0xc0, //0x0000131a xorl %r8d, %r8d + 0x90, 0x90, 0x90, //0x0000131d .p2align 4, 0x90 + //0x00001320 LBB0_242 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x04, //0x00001320 movdqu (%r12,%rax), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x10, //0x00001326 movdqu $16(%r12,%rax), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x04, 0x20, //0x0000132d movdqu $32(%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x30, //0x00001334 movdqu $48(%r12,%rax), %xmm6 + 0x66, 0x0f, 0x6f, 0xfb, //0x0000133b movdqa %xmm3, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000133f pcmpeqb %xmm0, %xmm7 + 0x66, 0x44, 0x0f, 0xd7, 0xd7, //0x00001343 pmovmskb %xmm7, %r10d + 0x66, 0x0f, 0x6f, 0xfc, //0x00001348 movdqa %xmm4, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x0000134c pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xcf, //0x00001350 pmovmskb %xmm7, %ecx + 0x66, 0x0f, 0x6f, 0xfd, //0x00001354 movdqa %xmm5, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00001358 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x0000135c pmovmskb %xmm7, %esi + 0x66, 0x0f, 0x6f, 0xfe, //0x00001360 movdqa %xmm6, %xmm7 + 0x66, 0x0f, 0x74, 0xf8, //0x00001364 pcmpeqb %xmm0, %xmm7 + 0x66, 0x0f, 0xd7, 0xd7, //0x00001368 pmovmskb %xmm7, %edx + 0x66, 0x0f, 0x74, 0xd9, //0x0000136c pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x00001370 pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x74, 0xe1, //0x00001375 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xdc, //0x00001379 pmovmskb %xmm4, %ebx + 0x66, 0x0f, 0x74, 0xe9, //0x0000137d pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00001381 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x74, 0xf1, //0x00001385 pcmpeqb %xmm1, %xmm6 + 0x66, 0x44, 0x0f, 0xd7, 0xfe, //0x00001389 pmovmskb %xmm6, %r15d + 0x48, 0xc1, 0xe2, 0x30, //0x0000138e shlq $48, %rdx + 0x48, 0xc1, 0xe6, 0x20, //0x00001392 shlq $32, %rsi + 0x48, 0x09, 0xd6, //0x00001396 orq %rdx, %rsi + 0x48, 0xc1, 0xe1, 0x10, //0x00001399 shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x0000139d orq %rsi, %rcx + 0x49, 0x09, 0xca, //0x000013a0 orq %rcx, %r10 + 0x49, 0xc1, 0xe7, 0x30, //0x000013a3 shlq $48, %r15 + 0x48, 0xc1, 0xe7, 0x20, //0x000013a7 shlq $32, %rdi + 0x4c, 0x09, 0xff, //0x000013ab orq %r15, %rdi + 0x48, 0xc1, 0xe3, 0x10, //0x000013ae shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x000013b2 orq %rdi, %rbx + 0x49, 0x09, 0xdb, //0x000013b5 orq %rbx, %r11 + 0x0f, 0x85, 0x3a, 0x00, 0x00, 0x00, //0x000013b8 jne LBB0_251 + 0x4d, 0x85, 0xc0, //0x000013be testq %r8, %r8 + 0x0f, 0x85, 0x47, 0x00, 0x00, 0x00, //0x000013c1 jne LBB0_253 + 0x45, 0x31, 0xc0, //0x000013c7 xorl %r8d, %r8d + 0x4d, 0x85, 0xd2, //0x000013ca testq %r10, %r10 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000013cd movabsq $4294977024, %r11 + 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, //0x000013d7 jne LBB0_254 + //0x000013dd LBB0_245 + 0x49, 0x83, 0xc1, 0xc0, //0x000013dd addq $-64, %r9 + 0x49, 0x83, 0xc6, 0xc0, //0x000013e1 addq $-64, %r14 + 0x48, 0x83, 0xc0, 0x40, //0x000013e5 addq $64, %rax + 0x49, 0x83, 0xf9, 0x3f, //0x000013e9 cmpq $63, %r9 + 0x0f, 0x87, 0x2d, 0xff, 0xff, 0xff, //0x000013ed ja LBB0_242 + 0xe9, 0x90, 0x18, 0x00, 0x00, //0x000013f3 jmp LBB0_246 + //0x000013f8 LBB0_251 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000013f8 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x000013fd jne LBB0_253 + 0x49, 0x0f, 0xbc, 0xcb, //0x00001403 bsfq %r11, %rcx + 0x48, 0x01, 0xc1, //0x00001407 addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x0000140a movq %rcx, $-56(%rbp) + //0x0000140e LBB0_253 + 0x4c, 0x89, 0xc1, //0x0000140e movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00001411 notq %rcx + 0x4c, 0x21, 0xd9, //0x00001414 andq %r11, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x00001417 leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xc2, //0x0000141b orq %r8, %rdx + 0x48, 0x89, 0xd6, //0x0000141e movq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00001421 notq %rsi + 0x4c, 0x21, 0xde, //0x00001424 andq %r11, %rsi + 0x48, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001427 movabsq $-6148914691236517206, %rdi + 0x48, 0x21, 0xfe, //0x00001431 andq %rdi, %rsi + 0x45, 0x31, 0xc0, //0x00001434 xorl %r8d, %r8d + 0x48, 0x01, 0xce, //0x00001437 addq %rcx, %rsi + 0x41, 0x0f, 0x92, 0xc0, //0x0000143a setb %r8b + 0x48, 0x01, 0xf6, //0x0000143e addq %rsi, %rsi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001441 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xce, //0x0000144b xorq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x0000144e andq %rdx, %rsi + 0x48, 0xf7, 0xd6, //0x00001451 notq %rsi + 0x49, 0x21, 0xf2, //0x00001454 andq %rsi, %r10 + 0x4d, 0x85, 0xd2, //0x00001457 testq %r10, %r10 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000145a movabsq $4294977024, %r11 + 0x0f, 0x84, 0x73, 0xff, 0xff, 0xff, //0x00001464 je LBB0_245 + //0x0000146a LBB0_254 + 0x49, 0x0f, 0xbc, 0xc2, //0x0000146a bsfq %r10, %rax + 0x4c, 0x29, 0xf0, //0x0000146e subq %r14, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00001471 movq $-48(%rbp), %r14 + 0x48, 0x8b, 0x5d, 0xc0, //0x00001475 movq $-64(%rbp), %rbx + 0xe9, 0xe5, 0x11, 0x00, 0x00, //0x00001479 jmp LBB0_441 + //0x0000147e LBB0_255 + 0x48, 0x8b, 0x45, 0xa8, //0x0000147e movq $-88(%rbp), %rax + 0x4c, 0x8b, 0x48, 0x08, //0x00001482 movq $8(%rax), %r9 + 0x49, 0x8b, 0x06, //0x00001486 movq (%r14), %rax + 0xf6, 0x45, 0x98, 0x40, //0x00001489 testb $64, $-104(%rbp) + 0x0f, 0x85, 0xae, 0x04, 0x00, 0x00, //0x0000148d jne LBB0_327 + 0x49, 0x29, 0xc1, //0x00001493 subq %rax, %r9 + 0x0f, 0x84, 0x92, 0x27, 0x00, 0x00, //0x00001496 je LBB0_647 + 0x49, 0x8d, 0x0c, 0x04, //0x0000149c leaq (%r12,%rax), %rcx + 0x48, 0x89, 0x4d, 0xb8, //0x000014a0 movq %rcx, $-72(%rbp) + 0x80, 0x39, 0x30, //0x000014a4 cmpb $48, (%rcx) + 0x0f, 0x85, 0x39, 0x00, 0x00, 0x00, //0x000014a7 jne LBB0_261 + 0xbb, 0x01, 0x00, 0x00, 0x00, //0x000014ad movl $1, %ebx + 0x49, 0x83, 0xf9, 0x01, //0x000014b2 cmpq $1, %r9 + 0x0f, 0x84, 0xa6, 0x17, 0x00, 0x00, //0x000014b6 je LBB0_487 + 0x48, 0x8b, 0x4d, 0xb8, //0x000014bc movq $-72(%rbp), %rcx + 0x8a, 0x49, 0x01, //0x000014c0 movb $1(%rcx), %cl + 0x80, 0xc1, 0xd2, //0x000014c3 addb $-46, %cl + 0x80, 0xf9, 0x37, //0x000014c6 cmpb $55, %cl + 0x0f, 0x87, 0x93, 0x17, 0x00, 0x00, //0x000014c9 ja LBB0_487 + 0x0f, 0xb6, 0xc9, //0x000014cf movzbl %cl, %ecx + 0x48, 0xba, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, //0x000014d2 movabsq $36028797027352577, %rdx + 0x48, 0x0f, 0xa3, 0xca, //0x000014dc btq %rcx, %rdx + 0x0f, 0x83, 0x7c, 0x17, 0x00, 0x00, //0x000014e0 jae LBB0_487 + //0x000014e6 LBB0_261 + 0x49, 0x83, 0xf9, 0x10, //0x000014e6 cmpq $16, %r9 + 0x0f, 0x82, 0xa9, 0x1b, 0x00, 0x00, //0x000014ea jb LBB0_517 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000014f0 movq $-1, %r13 + 0x31, 0xdb, //0x000014f7 xorl %ebx, %ebx + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000014f9 movq $-1, %r8 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00001500 movq $-1, %r14 + 0x4d, 0x89, 0xca, //0x00001507 movq %r9, %r10 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000150a .p2align 4, 0x90 + //0x00001510 LBB0_263 + 0x48, 0x8b, 0x4d, 0xb8, //0x00001510 movq $-72(%rbp), %rcx + 0xf3, 0x0f, 0x6f, 0x1c, 0x19, //0x00001514 movdqu (%rcx,%rbx), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00001519 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x64, 0x25, 0x7b, 0xeb, 0xff, 0xff, //0x0000151d pcmpgtb $-5253(%rip), %xmm4 /* LCPI0_10+0(%rip) */ + 0x66, 0x41, 0x0f, 0x6f, 0xef, //0x00001525 movdqa %xmm15, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x0000152a pcmpgtb %xmm3, %xmm5 + 0x66, 0x0f, 0xdb, 0xec, //0x0000152e pand %xmm4, %xmm5 + 0x66, 0x0f, 0x6f, 0xe3, //0x00001532 movdqa %xmm3, %xmm4 + 0x66, 0x0f, 0x74, 0x25, 0x82, 0xeb, 0xff, 0xff, //0x00001536 pcmpeqb $-5246(%rip), %xmm4 /* LCPI0_12+0(%rip) */ + 0x66, 0x0f, 0x6f, 0xf3, //0x0000153e movdqa %xmm3, %xmm6 + 0x66, 0x0f, 0x74, 0x35, 0x86, 0xeb, 0xff, 0xff, //0x00001542 pcmpeqb $-5242(%rip), %xmm6 /* LCPI0_13+0(%rip) */ + 0x66, 0x0f, 0xeb, 0xf4, //0x0000154a por %xmm4, %xmm6 + 0x66, 0x0f, 0x6f, 0xe3, //0x0000154e movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xe1, //0x00001552 pand %xmm9, %xmm4 + 0x66, 0x0f, 0x74, 0x1d, 0x81, 0xeb, 0xff, 0xff, //0x00001557 pcmpeqb $-5247(%rip), %xmm3 /* LCPI0_14+0(%rip) */ + 0x66, 0x41, 0x0f, 0x74, 0xe3, //0x0000155f pcmpeqb %xmm11, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xfc, //0x00001564 pmovmskb %xmm4, %r15d + 0x66, 0x0f, 0xeb, 0xe3, //0x00001569 por %xmm3, %xmm4 + 0x66, 0x0f, 0xeb, 0xee, //0x0000156d por %xmm6, %xmm5 + 0x66, 0x0f, 0xeb, 0xec, //0x00001571 por %xmm4, %xmm5 + 0x66, 0x0f, 0xd7, 0xd3, //0x00001575 pmovmskb %xmm3, %edx + 0x66, 0x44, 0x0f, 0xd7, 0xde, //0x00001579 pmovmskb %xmm6, %r11d + 0x66, 0x0f, 0xd7, 0xcd, //0x0000157e pmovmskb %xmm5, %ecx + 0xf7, 0xd1, //0x00001582 notl %ecx + 0x0f, 0xbc, 0xc9, //0x00001584 bsfl %ecx, %ecx + 0x83, 0xf9, 0x10, //0x00001587 cmpl $16, %ecx + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x0000158a je LBB0_265 + 0xbe, 0xff, 0xff, 0xff, 0xff, //0x00001590 movl $-1, %esi + 0xd3, 0xe6, //0x00001595 shll %cl, %esi + 0xf7, 0xd6, //0x00001597 notl %esi + 0x21, 0xf2, //0x00001599 andl %esi, %edx + 0x41, 0x21, 0xf7, //0x0000159b andl %esi, %r15d + 0x44, 0x21, 0xde, //0x0000159e andl %r11d, %esi + 0x41, 0x89, 0xf3, //0x000015a1 movl %esi, %r11d + //0x000015a4 LBB0_265 + 0x8d, 0x72, 0xff, //0x000015a4 leal $-1(%rdx), %esi + 0x21, 0xd6, //0x000015a7 andl %edx, %esi + 0x0f, 0x85, 0x79, 0x16, 0x00, 0x00, //0x000015a9 jne LBB0_481 + 0x41, 0x8d, 0x77, 0xff, //0x000015af leal $-1(%r15), %esi + 0x44, 0x21, 0xfe, //0x000015b3 andl %r15d, %esi + 0x0f, 0x85, 0x6c, 0x16, 0x00, 0x00, //0x000015b6 jne LBB0_481 + 0x41, 0x8d, 0x73, 0xff, //0x000015bc leal $-1(%r11), %esi + 0x44, 0x21, 0xde, //0x000015c0 andl %r11d, %esi + 0x0f, 0x85, 0x5f, 0x16, 0x00, 0x00, //0x000015c3 jne LBB0_481 + 0x85, 0xd2, //0x000015c9 testl %edx, %edx + 0x0f, 0x84, 0x13, 0x00, 0x00, 0x00, //0x000015cb je LBB0_271 + 0x0f, 0xbc, 0xd2, //0x000015d1 bsfl %edx, %edx + 0x49, 0x83, 0xfe, 0xff, //0x000015d4 cmpq $-1, %r14 + 0x0f, 0x85, 0x73, 0x16, 0x00, 0x00, //0x000015d8 jne LBB0_484 + 0x48, 0x01, 0xda, //0x000015de addq %rbx, %rdx + 0x49, 0x89, 0xd6, //0x000015e1 movq %rdx, %r14 + //0x000015e4 LBB0_271 + 0x45, 0x85, 0xff, //0x000015e4 testl %r15d, %r15d + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x000015e7 je LBB0_274 + 0x41, 0x0f, 0xbc, 0xd7, //0x000015ed bsfl %r15d, %edx + 0x49, 0x83, 0xf8, 0xff, //0x000015f1 cmpq $-1, %r8 + 0x0f, 0x85, 0x56, 0x16, 0x00, 0x00, //0x000015f5 jne LBB0_484 + 0x48, 0x01, 0xda, //0x000015fb addq %rbx, %rdx + 0x49, 0x89, 0xd0, //0x000015fe movq %rdx, %r8 + //0x00001601 LBB0_274 + 0x45, 0x85, 0xdb, //0x00001601 testl %r11d, %r11d + 0x0f, 0x84, 0x14, 0x00, 0x00, 0x00, //0x00001604 je LBB0_277 + 0x41, 0x0f, 0xbc, 0xd3, //0x0000160a bsfl %r11d, %edx + 0x49, 0x83, 0xfd, 0xff, //0x0000160e cmpq $-1, %r13 + 0x0f, 0x85, 0x39, 0x16, 0x00, 0x00, //0x00001612 jne LBB0_484 + 0x48, 0x01, 0xda, //0x00001618 addq %rbx, %rdx + 0x49, 0x89, 0xd5, //0x0000161b movq %rdx, %r13 + //0x0000161e LBB0_277 + 0x83, 0xf9, 0x10, //0x0000161e cmpl $16, %ecx + 0x0f, 0x85, 0x93, 0x0f, 0x00, 0x00, //0x00001621 jne LBB0_426 + 0x49, 0x83, 0xc2, 0xf0, //0x00001627 addq $-16, %r10 + 0x48, 0x83, 0xc3, 0x10, //0x0000162b addq $16, %rbx + 0x49, 0x83, 0xfa, 0x0f, //0x0000162f cmpq $15, %r10 + 0x0f, 0x87, 0xd7, 0xfe, 0xff, 0xff, //0x00001633 ja LBB0_263 + 0x48, 0x8b, 0x4d, 0xb8, //0x00001639 movq $-72(%rbp), %rcx + 0x48, 0x8d, 0x34, 0x19, //0x0000163d leaq (%rcx,%rbx), %rsi + 0x49, 0x89, 0xf3, //0x00001641 movq %rsi, %r11 + 0x49, 0x39, 0xd9, //0x00001644 cmpq %rbx, %r9 + 0x0f, 0x84, 0x82, 0x0f, 0x00, 0x00, //0x00001647 je LBB0_428 + //0x0000164d LBB0_280 + 0x4e, 0x8d, 0x1c, 0x16, //0x0000164d leaq (%rsi,%r10), %r11 + 0x49, 0x89, 0xf1, //0x00001651 movq %rsi, %r9 + 0x4c, 0x2b, 0x4d, 0xb8, //0x00001654 subq $-72(%rbp), %r9 + 0x31, 0xdb, //0x00001658 xorl %ebx, %ebx + 0xe9, 0x1e, 0x00, 0x00, 0x00, //0x0000165a jmp LBB0_284 + //0x0000165f LBB0_281 + 0x49, 0x83, 0xfd, 0xff, //0x0000165f cmpq $-1, %r13 + 0x0f, 0x85, 0xd7, 0x15, 0x00, 0x00, //0x00001663 jne LBB0_483 + 0x4d, 0x8d, 0x2c, 0x19, //0x00001669 leaq (%r9,%rbx), %r13 + 0x90, 0x90, 0x90, //0x0000166d .p2align 4, 0x90 + //0x00001670 LBB0_283 + 0x48, 0x83, 0xc3, 0x01, //0x00001670 addq $1, %rbx + 0x49, 0x39, 0xda, //0x00001674 cmpq %rbx, %r10 + 0x0f, 0x84, 0x52, 0x0f, 0x00, 0x00, //0x00001677 je LBB0_428 + //0x0000167d LBB0_284 + 0x0f, 0xbe, 0x0c, 0x1e, //0x0000167d movsbl (%rsi,%rbx), %ecx + 0x8d, 0x51, 0xd0, //0x00001681 leal $-48(%rcx), %edx + 0x83, 0xfa, 0x0a, //0x00001684 cmpl $10, %edx + 0x0f, 0x82, 0xe3, 0xff, 0xff, 0xff, //0x00001687 jb LBB0_283 + 0x8d, 0x51, 0xd5, //0x0000168d leal $-43(%rcx), %edx + 0x83, 0xfa, 0x1a, //0x00001690 cmpl $26, %edx + 0x0f, 0x87, 0x23, 0x00, 0x00, 0x00, //0x00001693 ja LBB0_289 + 0x48, 0x8d, 0x3d, 0xb4, 0x28, 0x00, 0x00, //0x00001699 leaq $10420(%rip), %rdi /* LJTI0_2+0(%rip) */ + 0x48, 0x63, 0x0c, 0x97, //0x000016a0 movslq (%rdi,%rdx,4), %rcx + 0x48, 0x01, 0xf9, //0x000016a4 addq %rdi, %rcx + 0xff, 0xe1, //0x000016a7 jmpq *%rcx + //0x000016a9 LBB0_287 + 0x49, 0x83, 0xfe, 0xff, //0x000016a9 cmpq $-1, %r14 + 0x0f, 0x85, 0x8d, 0x15, 0x00, 0x00, //0x000016ad jne LBB0_483 + 0x4d, 0x8d, 0x34, 0x19, //0x000016b3 leaq (%r9,%rbx), %r14 + 0xe9, 0xb4, 0xff, 0xff, 0xff, //0x000016b7 jmp LBB0_283 + //0x000016bc LBB0_289 + 0x83, 0xf9, 0x65, //0x000016bc cmpl $101, %ecx + 0x0f, 0x85, 0x04, 0x0f, 0x00, 0x00, //0x000016bf jne LBB0_427 + //0x000016c5 LBB0_290 + 0x49, 0x83, 0xf8, 0xff, //0x000016c5 cmpq $-1, %r8 + 0x0f, 0x85, 0x71, 0x15, 0x00, 0x00, //0x000016c9 jne LBB0_483 + 0x4d, 0x8d, 0x04, 0x19, //0x000016cf leaq (%r9,%rbx), %r8 + 0xe9, 0x98, 0xff, 0xff, 0xff, //0x000016d3 jmp LBB0_283 + //0x000016d8 LBB0_292 + 0xf6, 0x45, 0x98, 0x40, //0x000016d8 testb $64, $-104(%rbp) + 0x0f, 0x85, 0x46, 0x03, 0x00, 0x00, //0x000016dc jne LBB0_340 + 0x49, 0x8b, 0x45, 0x00, //0x000016e2 movq (%r13), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x000016e6 cmpq $4095, %rax + 0x0f, 0x8f, 0x5e, 0x23, 0x00, 0x00, //0x000016ec jg LBB0_651 + 0x48, 0x8d, 0x48, 0x01, //0x000016f2 leaq $1(%rax), %rcx + 0x49, 0x89, 0x4d, 0x00, //0x000016f6 movq %rcx, (%r13) + 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x05, 0x00, 0x00, 0x00, //0x000016fa movq $5, $8(%r13,%rax,8) + 0xe9, 0xc8, 0xea, 0xff, 0xff, //0x00001703 jmp LBB0_4 + //0x00001708 LBB0_295 + 0x49, 0x8b, 0x0e, //0x00001708 movq (%r14), %rcx + 0x48, 0x8b, 0x55, 0xa8, //0x0000170b movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x0000170f movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x00001713 leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001717 cmpq %rsi, %rcx + 0x0f, 0x87, 0xba, 0x23, 0x00, 0x00, //0x0000171a ja LBB0_629 + 0x48, 0x8d, 0x41, 0xff, //0x00001720 leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x6e, 0x75, 0x6c, 0x6c, //0x00001724 cmpl $1819047278, $-1(%r12,%rcx) + 0x0f, 0x84, 0x60, 0x00, 0x00, 0x00, //0x0000172d je LBB0_306 + 0xe9, 0x2a, 0x24, 0x00, 0x00, //0x00001733 jmp LBB0_297 + //0x00001738 LBB0_301 + 0xf6, 0x45, 0x98, 0x40, //0x00001738 testb $64, $-104(%rbp) + 0x0f, 0x85, 0x5c, 0x07, 0x00, 0x00, //0x0000173c jne LBB0_366 + 0x49, 0x8b, 0x45, 0x00, //0x00001742 movq (%r13), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00001746 cmpq $4095, %rax + 0x0f, 0x8f, 0xfe, 0x22, 0x00, 0x00, //0x0000174c jg LBB0_651 + 0x48, 0x8d, 0x48, 0x01, //0x00001752 leaq $1(%rax), %rcx + 0x49, 0x89, 0x4d, 0x00, //0x00001756 movq %rcx, (%r13) + 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x06, 0x00, 0x00, 0x00, //0x0000175a movq $6, $8(%r13,%rax,8) + 0xe9, 0x68, 0xea, 0xff, 0xff, //0x00001763 jmp LBB0_4 + //0x00001768 LBB0_304 + 0x49, 0x8b, 0x0e, //0x00001768 movq (%r14), %rcx + 0x48, 0x8b, 0x55, 0xa8, //0x0000176b movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x0000176f movq $8(%rdx), %rdx + 0x48, 0x8d, 0x72, 0xfd, //0x00001773 leaq $-3(%rdx), %rsi + 0x48, 0x39, 0xf1, //0x00001777 cmpq %rsi, %rcx + 0x0f, 0x87, 0x5a, 0x23, 0x00, 0x00, //0x0000177a ja LBB0_629 + 0x48, 0x8d, 0x41, 0xff, //0x00001780 leaq $-1(%rcx), %rax + 0x41, 0x81, 0x7c, 0x0c, 0xff, 0x74, 0x72, 0x75, 0x65, //0x00001784 cmpl $1702195828, $-1(%r12,%rcx) + 0x0f, 0x85, 0x88, 0x23, 0x00, 0x00, //0x0000178d jne LBB0_635 + //0x00001793 LBB0_306 + 0x48, 0x8d, 0x51, 0x03, //0x00001793 leaq $3(%rcx), %rdx + 0x49, 0x89, 0x16, //0x00001797 movq %rdx, (%r14) + 0x48, 0x85, 0xc9, //0x0000179a testq %rcx, %rcx + 0x0f, 0x8f, 0x2d, 0xea, 0xff, 0xff, //0x0000179d jg LBB0_4 + 0xe9, 0x07, 0x23, 0x00, 0x00, //0x000017a3 jmp LBB0_650 + //0x000017a8 LBB0_307 + 0x4c, 0x89, 0xc1, //0x000017a8 movq %r8, %rcx + 0x4c, 0x09, 0xf9, //0x000017ab orq %r15, %rcx + 0x0f, 0x99, 0xc2, //0x000017ae setns %dl + 0x0f, 0x88, 0xce, 0x0b, 0x00, 0x00, //0x000017b1 js LBB0_399 + 0x4d, 0x39, 0xf8, //0x000017b7 cmpq %r15, %r8 + 0x0f, 0x8c, 0xc5, 0x0b, 0x00, 0x00, //0x000017ba jl LBB0_399 + 0x49, 0xf7, 0xd0, //0x000017c0 notq %r8 + 0x4d, 0x89, 0xc5, //0x000017c3 movq %r8, %r13 + 0xe9, 0x29, 0x0f, 0x00, 0x00, //0x000017c6 jmp LBB0_451 + //0x000017cb LBB0_310 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x000017cb movl $64, %edx + //0x000017d0 LBB0_311 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000017d0 movabsq $4294977024, %r11 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x5d, 0xe8, 0xff, 0xff, //0x000017da movdqu $-6051(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x48, 0x8b, 0x75, 0xc0, //0x000017e3 movq $-64(%rbp), %rsi + 0x48, 0x39, 0xca, //0x000017e7 cmpq %rcx, %rdx + 0x0f, 0x82, 0x67, 0x24, 0x00, 0x00, //0x000017ea jb LBB0_654 + 0x48, 0x01, 0xc8, //0x000017f0 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000017f3 addq $1, %rax + //0x000017f7 LBB0_313 + 0x48, 0x85, 0xc0, //0x000017f7 testq %rax, %rax + 0x0f, 0x88, 0xc1, 0x22, 0x00, 0x00, //0x000017fa js LBB0_627 + 0x49, 0x89, 0x06, //0x00001800 movq %rax, (%r14) + 0x48, 0x85, 0xf6, //0x00001803 testq %rsi, %rsi + 0x0f, 0x8e, 0xd6, 0x22, 0x00, 0x00, //0x00001806 jle LBB0_630 + //0x0000180c LBB0_315 + 0x49, 0x8b, 0x45, 0x00, //0x0000180c movq (%r13), %rax + 0x48, 0x3d, 0xff, 0x0f, 0x00, 0x00, //0x00001810 cmpq $4095, %rax + 0x0f, 0x8f, 0x34, 0x22, 0x00, 0x00, //0x00001816 jg LBB0_651 + 0x48, 0x8d, 0x48, 0x01, //0x0000181c leaq $1(%rax), %rcx + 0x49, 0x89, 0x4d, 0x00, //0x00001820 movq %rcx, (%r13) + 0x49, 0xc7, 0x44, 0xc5, 0x08, 0x04, 0x00, 0x00, 0x00, //0x00001824 movq $4, $8(%r13,%rax,8) + 0xe9, 0x9e, 0xe9, 0xff, 0xff, //0x0000182d jmp LBB0_4 + //0x00001832 LBB0_317 + 0x48, 0x8b, 0x4d, 0xa8, //0x00001832 movq $-88(%rbp), %rcx + 0x4c, 0x8b, 0x49, 0x08, //0x00001836 movq $8(%rcx), %r9 + 0x4d, 0x8b, 0x06, //0x0000183a movq (%r14), %r8 + 0x4f, 0x8d, 0x14, 0x04, //0x0000183d leaq (%r12,%r8), %r10 + 0x4d, 0x29, 0xc1, //0x00001841 subq %r8, %r9 + 0x49, 0x83, 0xf9, 0x20, //0x00001844 cmpq $32, %r9 + 0x0f, 0x8c, 0xd7, 0x00, 0x00, 0x00, //0x00001848 jl LBB0_326 + 0x41, 0xbe, 0x20, 0x00, 0x00, 0x00, //0x0000184e movl $32, %r14d + 0x31, 0xf6, //0x00001854 xorl %esi, %esi + 0x45, 0x31, 0xdb, //0x00001856 xorl %r11d, %r11d + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00001859 .p2align 4, 0x90 + //0x00001860 LBB0_319 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x32, //0x00001860 movdqu (%r10,%rsi), %xmm3 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x32, 0x10, //0x00001866 movdqu $16(%r10,%rsi), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x0000186d movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00001871 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x00001875 pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x6f, 0xec, //0x00001879 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x0000187d pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xdd, //0x00001881 pmovmskb %xmm5, %ebx + 0x48, 0xc1, 0xe3, 0x10, //0x00001885 shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x00001889 orq %rdi, %rbx + 0x66, 0x0f, 0x74, 0xd9, //0x0000188c pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001890 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x74, 0xe1, //0x00001894 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00001898 pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe7, 0x10, //0x0000189c shlq $16, %rdi + 0x48, 0x09, 0xcf, //0x000018a0 orq %rcx, %rdi + 0x48, 0x89, 0xf9, //0x000018a3 movq %rdi, %rcx + 0x4c, 0x09, 0xd9, //0x000018a6 orq %r11, %rcx + 0x0f, 0x84, 0x41, 0x00, 0x00, 0x00, //0x000018a9 je LBB0_321 + 0x44, 0x89, 0xd9, //0x000018af movl %r11d, %ecx + 0xf7, 0xd1, //0x000018b2 notl %ecx + 0x21, 0xf9, //0x000018b4 andl %edi, %ecx + 0x44, 0x8d, 0x3c, 0x09, //0x000018b6 leal (%rcx,%rcx), %r15d + 0x45, 0x09, 0xdf, //0x000018ba orl %r11d, %r15d + 0x44, 0x89, 0xfa, //0x000018bd movl %r15d, %edx + 0xf7, 0xd2, //0x000018c0 notl %edx + 0x21, 0xfa, //0x000018c2 andl %edi, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x000018c4 andl $-1431655766, %edx + 0x45, 0x31, 0xdb, //0x000018ca xorl %r11d, %r11d + 0x01, 0xca, //0x000018cd addl %ecx, %edx + 0x41, 0x0f, 0x92, 0xc3, //0x000018cf setb %r11b + 0x01, 0xd2, //0x000018d3 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x000018d5 xorl $1431655765, %edx + 0x44, 0x21, 0xfa, //0x000018db andl %r15d, %edx + 0xf7, 0xd2, //0x000018de notl %edx + 0x21, 0xd3, //0x000018e0 andl %edx, %ebx + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x000018e2 jmp LBB0_322 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000018e7 .p2align 4, 0x90 + //0x000018f0 LBB0_321 + 0x45, 0x31, 0xdb, //0x000018f0 xorl %r11d, %r11d + //0x000018f3 LBB0_322 + 0x48, 0x85, 0xdb, //0x000018f3 testq %rbx, %rbx + 0x0f, 0x85, 0xab, 0xe8, 0xff, 0xff, //0x000018f6 jne LBB0_1 + 0x48, 0x83, 0xc6, 0x20, //0x000018fc addq $32, %rsi + 0x4b, 0x8d, 0x0c, 0x31, //0x00001900 leaq (%r9,%r14), %rcx + 0x48, 0x83, 0xc1, 0xe0, //0x00001904 addq $-32, %rcx + 0x49, 0x83, 0xc6, 0xe0, //0x00001908 addq $-32, %r14 + 0x48, 0x83, 0xf9, 0x3f, //0x0000190c cmpq $63, %rcx + 0x0f, 0x8f, 0x4a, 0xff, 0xff, 0xff, //0x00001910 jg LBB0_319 + 0x4d, 0x85, 0xdb, //0x00001916 testq %r11, %r11 + 0x0f, 0x85, 0x44, 0x1e, 0x00, 0x00, //0x00001919 jne LBB0_587 + 0x49, 0x01, 0xf2, //0x0000191f addq %rsi, %r10 + 0x49, 0x29, 0xf1, //0x00001922 subq %rsi, %r9 + //0x00001925 LBB0_326 + 0x4c, 0x8b, 0x75, 0xd0, //0x00001925 movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00001929 movabsq $4294977024, %r11 + 0x4d, 0x85, 0xc9, //0x00001933 testq %r9, %r9 + 0x0f, 0x8f, 0x85, 0x1e, 0x00, 0x00, //0x00001936 jg LBB0_591 + 0xe9, 0x6e, 0x21, 0x00, 0x00, //0x0000193c jmp LBB0_650 + //0x00001941 LBB0_327 + 0x4c, 0x89, 0xca, //0x00001941 movq %r9, %rdx + 0x48, 0x29, 0xc2, //0x00001944 subq %rax, %rdx + 0x48, 0x83, 0xfa, 0x10, //0x00001947 cmpq $16, %rdx + 0x0f, 0x82, 0x36, 0x17, 0x00, 0x00, //0x0000194b jb LBB0_516 + 0x48, 0x89, 0xc7, //0x00001951 movq %rax, %rdi + 0x48, 0xf7, 0xdf, //0x00001954 negq %rdi + 0x4c, 0x8d, 0x40, 0x01, //0x00001957 leaq $1(%rax), %r8 + 0x48, 0x8d, 0x50, 0xff, //0x0000195b leaq $-1(%rax), %rdx + 0x49, 0x8d, 0x34, 0x04, //0x0000195f leaq (%r12,%rax), %rsi + 0x48, 0x83, 0xc6, 0xff, //0x00001963 addq $-1, %rsi + 0x48, 0x89, 0xc3, //0x00001967 movq %rax, %rbx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x0000196a .p2align 4, 0x90 + //0x00001970 LBB0_329 + 0xf3, 0x41, 0x0f, 0x6f, 0x1c, 0x1c, //0x00001970 movdqu (%r12,%rbx), %xmm3 + 0x66, 0x0f, 0x6f, 0xe3, //0x00001976 movdqa %xmm3, %xmm4 + 0x66, 0x41, 0x0f, 0x74, 0xe6, //0x0000197a pcmpeqb %xmm14, %xmm4 + 0x66, 0x41, 0x0f, 0xdb, 0xd9, //0x0000197f pand %xmm9, %xmm3 + 0x66, 0x0f, 0x74, 0xda, //0x00001984 pcmpeqb %xmm2, %xmm3 + 0x66, 0x0f, 0xeb, 0xdc, //0x00001988 por %xmm4, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x0000198c pmovmskb %xmm3, %ecx + 0x85, 0xc9, //0x00001990 testl %ecx, %ecx + 0x0f, 0x85, 0x8c, 0x09, 0x00, 0x00, //0x00001992 jne LBB0_394 + 0x48, 0x83, 0xc3, 0x10, //0x00001998 addq $16, %rbx + 0x49, 0x8d, 0x0c, 0x39, //0x0000199c leaq (%r9,%rdi), %rcx + 0x48, 0x83, 0xc1, 0xf0, //0x000019a0 addq $-16, %rcx + 0x48, 0x83, 0xc7, 0xf0, //0x000019a4 addq $-16, %rdi + 0x49, 0x83, 0xc0, 0x10, //0x000019a8 addq $16, %r8 + 0x48, 0x83, 0xc2, 0x10, //0x000019ac addq $16, %rdx + 0x48, 0x83, 0xc6, 0x10, //0x000019b0 addq $16, %rsi + 0x48, 0x83, 0xf9, 0x0f, //0x000019b4 cmpq $15, %rcx + 0x0f, 0x87, 0xb2, 0xff, 0xff, 0xff, //0x000019b8 ja LBB0_329 + 0x4c, 0x89, 0xe1, //0x000019be movq %r12, %rcx + 0x48, 0x29, 0xf9, //0x000019c1 subq %rdi, %rcx + 0x49, 0x01, 0xf9, //0x000019c4 addq %rdi, %r9 + 0x4c, 0x89, 0xca, //0x000019c7 movq %r9, %rdx + 0x48, 0x85, 0xd2, //0x000019ca testq %rdx, %rdx + 0x0f, 0x84, 0x4a, 0x00, 0x00, 0x00, //0x000019cd je LBB0_339 + //0x000019d3 LBB0_332 + 0x48, 0x8d, 0x34, 0x11, //0x000019d3 leaq (%rcx,%rdx), %rsi + //0x000019d7 LBB0_333 + 0x0f, 0xb6, 0x39, //0x000019d7 movzbl (%rcx), %edi + 0x48, 0x83, 0xff, 0x2c, //0x000019da cmpq $44, %rdi + 0x0f, 0x87, 0x14, 0x00, 0x00, 0x00, //0x000019de ja LBB0_335 + 0x48, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x000019e4 movabsq $17596481021440, %rbx + 0x48, 0x0f, 0xa3, 0xfb, //0x000019ee btq %rdi, %rbx + 0x0f, 0x82, 0x25, 0x00, 0x00, 0x00, //0x000019f2 jb LBB0_339 + //0x000019f8 LBB0_335 + 0x40, 0x80, 0xff, 0x5d, //0x000019f8 cmpb $93, %dil + 0x0f, 0x84, 0x1b, 0x00, 0x00, 0x00, //0x000019fc je LBB0_339 + 0x40, 0x80, 0xff, 0x7d, //0x00001a02 cmpb $125, %dil + 0x0f, 0x84, 0x11, 0x00, 0x00, 0x00, //0x00001a06 je LBB0_339 + 0x48, 0x83, 0xc1, 0x01, //0x00001a0c addq $1, %rcx + 0x48, 0x83, 0xc2, 0xff, //0x00001a10 addq $-1, %rdx + 0x0f, 0x85, 0xbd, 0xff, 0xff, 0xff, //0x00001a14 jne LBB0_333 + 0x48, 0x89, 0xf1, //0x00001a1a movq %rsi, %rcx + //0x00001a1d LBB0_339 + 0x4c, 0x29, 0xe1, //0x00001a1d subq %r12, %rcx + 0x49, 0x89, 0x0e, //0x00001a20 movq %rcx, (%r14) + 0xe9, 0x57, 0xf8, 0xff, 0xff, //0x00001a23 jmp LBB0_231 + //0x00001a28 LBB0_340 + 0x48, 0x8b, 0x55, 0xa8, //0x00001a28 movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x00001a2c movq $8(%rdx), %rdx + 0x49, 0x8b, 0x0e, //0x00001a30 movq (%r14), %rcx + 0x48, 0x29, 0xca, //0x00001a33 subq %rcx, %rdx + 0x48, 0x89, 0x4d, 0xc0, //0x00001a36 movq %rcx, $-64(%rbp) + 0x49, 0x01, 0xcc, //0x00001a3a addq %rcx, %r12 + 0x45, 0x31, 0xc0, //0x00001a3d xorl %r8d, %r8d + 0x45, 0x31, 0xc9, //0x00001a40 xorl %r9d, %r9d + 0x45, 0x31, 0xd2, //0x00001a43 xorl %r10d, %r10d + 0x45, 0x31, 0xf6, //0x00001a46 xorl %r14d, %r14d + 0x48, 0x83, 0xfa, 0x40, //0x00001a49 cmpq $64, %rdx + 0x48, 0x89, 0x55, 0xb8, //0x00001a4d movq %rdx, $-72(%rbp) + 0x0f, 0x8d, 0x4c, 0x01, 0x00, 0x00, //0x00001a51 jge LBB0_341 + //0x00001a57 LBB0_350 + 0x48, 0x85, 0xd2, //0x00001a57 testq %rdx, %rdx + 0x0f, 0x8e, 0x62, 0x22, 0x00, 0x00, //0x00001a5a jle LBB0_662 + 0x66, 0x0f, 0x6f, 0xf2, //0x00001a60 movdqa %xmm2, %xmm6 + 0x66, 0x0f, 0xef, 0xd2, //0x00001a64 pxor %xmm2, %xmm2 + 0xf3, 0x0f, 0x7f, 0x55, 0x80, //0x00001a68 movdqu %xmm2, $-128(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001a6d movdqu %xmm2, $-144(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x00001a75 movdqu %xmm2, $-160(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001a7d movdqu %xmm2, $-176(%rbp) + 0x4c, 0x89, 0xe7, //0x00001a85 movq %r12, %rdi + 0x44, 0x89, 0xe1, //0x00001a88 movl %r12d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00001a8b andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00001a91 cmpl $4033, %ecx + 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x00001a97 jb LBB0_354 + 0x48, 0x83, 0x7d, 0xb8, 0x20, //0x00001a9d cmpq $32, $-72(%rbp) + 0x0f, 0x82, 0x3b, 0x00, 0x00, 0x00, //0x00001aa2 jb LBB0_355 + 0x0f, 0x10, 0x1f, //0x00001aa8 movups (%rdi), %xmm3 + 0x0f, 0x11, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x00001aab movups %xmm3, $-176(%rbp) + 0xf3, 0x0f, 0x6f, 0x5f, 0x10, //0x00001ab2 movdqu $16(%rdi), %xmm3 + 0xf3, 0x0f, 0x7f, 0x9d, 0x60, 0xff, 0xff, 0xff, //0x00001ab7 movdqu %xmm3, $-160(%rbp) + 0x48, 0x83, 0xc7, 0x20, //0x00001abf addq $32, %rdi + 0x48, 0x8b, 0x4d, 0xb8, //0x00001ac3 movq $-72(%rbp), %rcx + 0x48, 0x8d, 0x71, 0xe0, //0x00001ac7 leaq $-32(%rcx), %rsi + 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001acb leaq $-144(%rbp), %rdx + 0xe9, 0x17, 0x00, 0x00, 0x00, //0x00001ad2 jmp LBB0_356 + //0x00001ad7 LBB0_354 + 0x66, 0x0f, 0x6f, 0xd6, //0x00001ad7 movdqa %xmm6, %xmm2 + 0x49, 0x89, 0xfc, //0x00001adb movq %rdi, %r12 + 0xe9, 0xc0, 0x00, 0x00, 0x00, //0x00001ade jmp LBB0_341 + //0x00001ae3 LBB0_355 + 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001ae3 leaq $-176(%rbp), %rdx + 0x48, 0x8b, 0x75, 0xb8, //0x00001aea movq $-72(%rbp), %rsi + //0x00001aee LBB0_356 + 0x48, 0x83, 0xfe, 0x10, //0x00001aee cmpq $16, %rsi + 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x00001af2 jb LBB0_357 + 0xf3, 0x0f, 0x6f, 0x1f, //0x00001af8 movdqu (%rdi), %xmm3 + 0xf3, 0x0f, 0x7f, 0x1a, //0x00001afc movdqu %xmm3, (%rdx) + 0x48, 0x83, 0xc7, 0x10, //0x00001b00 addq $16, %rdi + 0x48, 0x83, 0xc2, 0x10, //0x00001b04 addq $16, %rdx + 0x48, 0x83, 0xc6, 0xf0, //0x00001b08 addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x08, //0x00001b0c cmpq $8, %rsi + 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x00001b10 jae LBB0_364 + //0x00001b16 LBB0_358 + 0x48, 0x83, 0xfe, 0x04, //0x00001b16 cmpq $4, %rsi + 0x0f, 0x8c, 0x45, 0x00, 0x00, 0x00, //0x00001b1a jl LBB0_359 + //0x00001b20 LBB0_365 + 0x8b, 0x0f, //0x00001b20 movl (%rdi), %ecx + 0x89, 0x0a, //0x00001b22 movl %ecx, (%rdx) + 0x48, 0x83, 0xc7, 0x04, //0x00001b24 addq $4, %rdi + 0x48, 0x83, 0xc2, 0x04, //0x00001b28 addq $4, %rdx + 0x48, 0x83, 0xc6, 0xfc, //0x00001b2c addq $-4, %rsi + 0x48, 0x83, 0xfe, 0x02, //0x00001b30 cmpq $2, %rsi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001b34 jae LBB0_360 + 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00001b3a jmp LBB0_361 + //0x00001b3f LBB0_357 + 0x48, 0x83, 0xfe, 0x08, //0x00001b3f cmpq $8, %rsi + 0x0f, 0x82, 0xcd, 0xff, 0xff, 0xff, //0x00001b43 jb LBB0_358 + //0x00001b49 LBB0_364 + 0x48, 0x8b, 0x0f, //0x00001b49 movq (%rdi), %rcx + 0x48, 0x89, 0x0a, //0x00001b4c movq %rcx, (%rdx) + 0x48, 0x83, 0xc7, 0x08, //0x00001b4f addq $8, %rdi + 0x48, 0x83, 0xc2, 0x08, //0x00001b53 addq $8, %rdx + 0x48, 0x83, 0xc6, 0xf8, //0x00001b57 addq $-8, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x00001b5b cmpq $4, %rsi + 0x0f, 0x8d, 0xbb, 0xff, 0xff, 0xff, //0x00001b5f jge LBB0_365 + //0x00001b65 LBB0_359 + 0x48, 0x83, 0xfe, 0x02, //0x00001b65 cmpq $2, %rsi + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00001b69 jb LBB0_361 + //0x00001b6f LBB0_360 + 0x0f, 0xb7, 0x0f, //0x00001b6f movzwl (%rdi), %ecx + 0x66, 0x89, 0x0a, //0x00001b72 movw %cx, (%rdx) + 0x48, 0x83, 0xc7, 0x02, //0x00001b75 addq $2, %rdi + 0x48, 0x83, 0xc2, 0x02, //0x00001b79 addq $2, %rdx + 0x48, 0x83, 0xc6, 0xfe, //0x00001b7d addq $-2, %rsi + //0x00001b81 LBB0_361 + 0x48, 0x89, 0xf9, //0x00001b81 movq %rdi, %rcx + 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00001b84 leaq $-176(%rbp), %r12 + 0x48, 0x85, 0xf6, //0x00001b8b testq %rsi, %rsi + 0x66, 0x0f, 0x6f, 0xd6, //0x00001b8e movdqa %xmm6, %xmm2 + 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x00001b92 je LBB0_341 + 0x8a, 0x09, //0x00001b98 movb (%rcx), %cl + 0x88, 0x0a, //0x00001b9a movb %cl, (%rdx) + 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00001b9c leaq $-176(%rbp), %r12 + //0x00001ba3 LBB0_341 + 0x66, 0x44, 0x0f, 0x6f, 0xc2, //0x00001ba3 movdqa %xmm2, %xmm8 + 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x00001ba8 movdqu (%r12), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x10, //0x00001bae movdqu $16(%r12), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x20, //0x00001bb5 movdqu $32(%r12), %xmm6 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x30, //0x00001bbc movdqu $48(%r12), %xmm5 + 0x66, 0x0f, 0x6f, 0xdc, //0x00001bc3 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001bc7 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x00001bcb pmovmskb %xmm3, %edx + 0x66, 0x0f, 0x6f, 0xdf, //0x00001bcf movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001bd3 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001bd7 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xde, //0x00001bdb movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001bdf pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001be3 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x6f, 0xdd, //0x00001be7 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00001beb pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00001bef pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe7, 0x30, //0x00001bf3 shlq $48, %rdi + 0x48, 0xc1, 0xe6, 0x20, //0x00001bf7 shlq $32, %rsi + 0x48, 0x09, 0xfe, //0x00001bfb orq %rdi, %rsi + 0x48, 0xc1, 0xe1, 0x10, //0x00001bfe shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x00001c02 orq %rsi, %rcx + 0x48, 0x09, 0xca, //0x00001c05 orq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x00001c08 movq %rdx, %rcx + 0x66, 0x45, 0x0f, 0x6f, 0xee, //0x00001c0b movdqa %xmm14, %xmm13 + 0x4c, 0x09, 0xc9, //0x00001c10 orq %r9, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x00001c13 jne LBB0_343 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00001c19 movq $-1, %rdx + 0x45, 0x31, 0xc9, //0x00001c20 xorl %r9d, %r9d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x00001c23 jmp LBB0_344 + //0x00001c28 LBB0_343 + 0x4c, 0x89, 0xc9, //0x00001c28 movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x00001c2b notq %rcx + 0x48, 0x21, 0xd1, //0x00001c2e andq %rdx, %rcx + 0x4c, 0x8d, 0x1c, 0x09, //0x00001c31 leaq (%rcx,%rcx), %r11 + 0x4d, 0x09, 0xcb, //0x00001c35 orq %r9, %r11 + 0x4c, 0x89, 0xdf, //0x00001c38 movq %r11, %rdi + 0x48, 0xf7, 0xd7, //0x00001c3b notq %rdi + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00001c3e movabsq $-6148914691236517206, %rsi + 0x48, 0x21, 0xf2, //0x00001c48 andq %rsi, %rdx + 0x48, 0x21, 0xfa, //0x00001c4b andq %rdi, %rdx + 0x45, 0x31, 0xc9, //0x00001c4e xorl %r9d, %r9d + 0x48, 0x01, 0xca, //0x00001c51 addq %rcx, %rdx + 0x41, 0x0f, 0x92, 0xc1, //0x00001c54 setb %r9b + 0x48, 0x01, 0xd2, //0x00001c58 addq %rdx, %rdx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001c5b movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xca, //0x00001c65 xorq %rcx, %rdx + 0x4c, 0x21, 0xda, //0x00001c68 andq %r11, %rdx + 0x48, 0xf7, 0xd2, //0x00001c6b notq %rdx + //0x00001c6e LBB0_344 + 0x66, 0x0f, 0x6f, 0xdd, //0x00001c6e movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001c72 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001c76 pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x30, //0x00001c7a shlq $48, %rcx + 0x66, 0x0f, 0x6f, 0xde, //0x00001c7e movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001c82 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001c86 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x20, //0x00001c8a shlq $32, %rsi + 0x48, 0x09, 0xce, //0x00001c8e orq %rcx, %rsi + 0x66, 0x0f, 0x6f, 0xdf, //0x00001c91 movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001c95 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001c99 pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x10, //0x00001c9d shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x00001ca1 orq %rsi, %rcx + 0x66, 0x0f, 0x6f, 0xdc, //0x00001ca4 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00001ca8 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001cac pmovmskb %xmm3, %esi + 0x48, 0x09, 0xce, //0x00001cb0 orq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x00001cb3 andq %rdx, %rsi + 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x00001cb6 movq %rsi, %xmm3 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xda, 0x00, //0x00001cbb pclmulqdq $0, %xmm10, %xmm3 + 0x66, 0x49, 0x0f, 0x7e, 0xdb, //0x00001cc2 movq %xmm3, %r11 + 0x4d, 0x31, 0xc3, //0x00001cc7 xorq %r8, %r11 + 0x66, 0x0f, 0x6f, 0xdc, //0x00001cca movdqa %xmm4, %xmm3 + 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x89, 0xe3, 0xff, 0xff, //0x00001cce movdqu $-7287(%rip), %xmm11 /* LCPI0_6+0(%rip) */ + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001cd7 pcmpeqb %xmm11, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x00001cdc pmovmskb %xmm3, %r13d + 0x66, 0x0f, 0x6f, 0xdf, //0x00001ce1 movdqa %xmm7, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001ce5 pcmpeqb %xmm11, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00001cea pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xde, //0x00001cee movdqa %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001cf2 pcmpeqb %xmm11, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x00001cf7 pmovmskb %xmm3, %edx + 0x66, 0x0f, 0x6f, 0xdd, //0x00001cfb movdqa %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdb, //0x00001cff pcmpeqb %xmm11, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00001d04 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x30, //0x00001d08 shlq $48, %rsi + 0x48, 0xc1, 0xe2, 0x20, //0x00001d0c shlq $32, %rdx + 0x48, 0x09, 0xf2, //0x00001d10 orq %rsi, %rdx + 0x48, 0xc1, 0xe1, 0x10, //0x00001d13 shlq $16, %rcx + 0x48, 0x09, 0xd1, //0x00001d17 orq %rdx, %rcx + 0x49, 0x09, 0xcd, //0x00001d1a orq %rcx, %r13 + 0x4d, 0x89, 0xd8, //0x00001d1d movq %r11, %r8 + 0x49, 0xf7, 0xd0, //0x00001d20 notq %r8 + 0x4d, 0x21, 0xc5, //0x00001d23 andq %r8, %r13 + 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001d26 movdqa %xmm8, %xmm2 + 0x66, 0x41, 0x0f, 0x74, 0xe0, //0x00001d2b pcmpeqb %xmm8, %xmm4 + 0x66, 0x0f, 0xd7, 0xd4, //0x00001d30 pmovmskb %xmm4, %edx + 0x66, 0x41, 0x0f, 0x74, 0xf8, //0x00001d34 pcmpeqb %xmm8, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x00001d39 pmovmskb %xmm7, %esi + 0x66, 0x41, 0x0f, 0x74, 0xf0, //0x00001d3d pcmpeqb %xmm8, %xmm6 + 0x66, 0x0f, 0xd7, 0xce, //0x00001d42 pmovmskb %xmm6, %ecx + 0x66, 0x41, 0x0f, 0x74, 0xe8, //0x00001d46 pcmpeqb %xmm8, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xfd, //0x00001d4b pmovmskb %xmm5, %r15d + 0x49, 0xc1, 0xe7, 0x30, //0x00001d50 shlq $48, %r15 + 0x48, 0xc1, 0xe1, 0x20, //0x00001d54 shlq $32, %rcx + 0x4c, 0x09, 0xf9, //0x00001d58 orq %r15, %rcx + 0x48, 0xc1, 0xe6, 0x10, //0x00001d5b shlq $16, %rsi + 0x48, 0x09, 0xce, //0x00001d5f orq %rcx, %rsi + 0x48, 0x09, 0xf2, //0x00001d62 orq %rsi, %rdx + 0x66, 0x45, 0x0f, 0x6f, 0xf5, //0x00001d65 movdqa %xmm13, %xmm14 + 0x4c, 0x21, 0xc2, //0x00001d6a andq %r8, %rdx + 0x0f, 0x84, 0xa4, 0x00, 0x00, 0x00, //0x00001d6d je LBB0_348 + 0xf3, 0x44, 0x0f, 0x6f, 0x1d, 0x74, 0xe3, 0xff, 0xff, //0x00001d73 movdqu $-7308(%rip), %xmm11 /* LCPI0_15+0(%rip) */ + 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001d7c movdqa %xmm8, %xmm2 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xb6, 0xe2, 0xff, 0xff, //0x00001d81 movdqu $-7498(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001d8a movabsq $3689348814741910323, %r8 + 0xf3, 0x44, 0x0f, 0x6f, 0x05, 0xb3, 0xe2, 0xff, 0xff, //0x00001d94 movdqu $-7501(%rip), %xmm8 /* LCPI0_5+0(%rip) */ + 0x90, 0x90, 0x90, //0x00001d9d .p2align 4, 0x90 + //0x00001da0 LBB0_346 + 0x48, 0x8d, 0x7a, 0xff, //0x00001da0 leaq $-1(%rdx), %rdi + 0x48, 0x89, 0xf9, //0x00001da4 movq %rdi, %rcx + 0x4c, 0x21, 0xe9, //0x00001da7 andq %r13, %rcx + 0x48, 0x89, 0xce, //0x00001daa movq %rcx, %rsi + 0x48, 0xd1, 0xee, //0x00001dad shrq %rsi + 0x48, 0xbb, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001db0 movabsq $6148914691236517205, %rbx + 0x48, 0x21, 0xde, //0x00001dba andq %rbx, %rsi + 0x48, 0x29, 0xf1, //0x00001dbd subq %rsi, %rcx + 0x48, 0x89, 0xce, //0x00001dc0 movq %rcx, %rsi + 0x4c, 0x21, 0xc6, //0x00001dc3 andq %r8, %rsi + 0x48, 0xc1, 0xe9, 0x02, //0x00001dc6 shrq $2, %rcx + 0x4c, 0x21, 0xc1, //0x00001dca andq %r8, %rcx + 0x48, 0x01, 0xf1, //0x00001dcd addq %rsi, %rcx + 0x48, 0x89, 0xce, //0x00001dd0 movq %rcx, %rsi + 0x48, 0xc1, 0xee, 0x04, //0x00001dd3 shrq $4, %rsi + 0x48, 0x01, 0xce, //0x00001dd7 addq %rcx, %rsi + 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001dda movabsq $1085102592571150095, %rcx + 0x48, 0x21, 0xce, //0x00001de4 andq %rcx, %rsi + 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00001de7 movabsq $72340172838076673, %rcx + 0x48, 0x0f, 0xaf, 0xf1, //0x00001df1 imulq %rcx, %rsi + 0x48, 0xc1, 0xee, 0x38, //0x00001df5 shrq $56, %rsi + 0x4c, 0x01, 0xd6, //0x00001df9 addq %r10, %rsi + 0x4c, 0x39, 0xf6, //0x00001dfc cmpq %r14, %rsi + 0x0f, 0x86, 0xe4, 0x04, 0x00, 0x00, //0x00001dff jbe LBB0_392 + 0x49, 0x83, 0xc6, 0x01, //0x00001e05 addq $1, %r14 + 0x48, 0x21, 0xfa, //0x00001e09 andq %rdi, %rdx + 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x00001e0c jne LBB0_346 + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00001e12 jmp LBB0_349 + //0x00001e17 LBB0_348 + 0x66, 0x41, 0x0f, 0x6f, 0xd0, //0x00001e17 movdqa %xmm8, %xmm2 + 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00001e1c movabsq $3689348814741910323, %r8 + //0x00001e26 LBB0_349 + 0x49, 0xc1, 0xfb, 0x3f, //0x00001e26 sarq $63, %r11 + 0x4c, 0x89, 0xe9, //0x00001e2a movq %r13, %rcx + 0x48, 0xd1, 0xe9, //0x00001e2d shrq %rcx + 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00001e30 movabsq $6148914691236517205, %rdx + 0x48, 0x21, 0xd1, //0x00001e3a andq %rdx, %rcx + 0x49, 0x29, 0xcd, //0x00001e3d subq %rcx, %r13 + 0x4c, 0x89, 0xe9, //0x00001e40 movq %r13, %rcx + 0x4c, 0x21, 0xc1, //0x00001e43 andq %r8, %rcx + 0x49, 0xc1, 0xed, 0x02, //0x00001e46 shrq $2, %r13 + 0x4d, 0x21, 0xc5, //0x00001e4a andq %r8, %r13 + 0x49, 0x01, 0xcd, //0x00001e4d addq %rcx, %r13 + 0x4c, 0x89, 0xe9, //0x00001e50 movq %r13, %rcx + 0x48, 0xc1, 0xe9, 0x04, //0x00001e53 shrq $4, %rcx + 0x4c, 0x01, 0xe9, //0x00001e57 addq %r13, %rcx + 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x00001e5a movabsq $1085102592571150095, %rdx + 0x48, 0x21, 0xd1, //0x00001e64 andq %rdx, %rcx + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00001e67 movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xca, //0x00001e71 imulq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x00001e75 shrq $56, %rcx + 0x49, 0x01, 0xca, //0x00001e79 addq %rcx, %r10 + 0x49, 0x83, 0xc4, 0x40, //0x00001e7c addq $64, %r12 + 0x48, 0x8b, 0x55, 0xb8, //0x00001e80 movq $-72(%rbp), %rdx + 0x48, 0x83, 0xc2, 0xc0, //0x00001e84 addq $-64, %rdx + 0x4d, 0x89, 0xd8, //0x00001e88 movq %r11, %r8 + 0x48, 0x83, 0xfa, 0x40, //0x00001e8b cmpq $64, %rdx + 0x48, 0x89, 0x55, 0xb8, //0x00001e8f movq %rdx, $-72(%rbp) + 0x0f, 0x8d, 0x0a, 0xfd, 0xff, 0xff, //0x00001e93 jge LBB0_341 + 0xe9, 0xb9, 0xfb, 0xff, 0xff, //0x00001e99 jmp LBB0_350 + //0x00001e9e LBB0_366 + 0x48, 0x8b, 0x55, 0xa8, //0x00001e9e movq $-88(%rbp), %rdx + 0x48, 0x8b, 0x52, 0x08, //0x00001ea2 movq $8(%rdx), %rdx + 0x49, 0x8b, 0x0e, //0x00001ea6 movq (%r14), %rcx + 0x48, 0x29, 0xca, //0x00001ea9 subq %rcx, %rdx + 0x48, 0x89, 0x4d, 0xc0, //0x00001eac movq %rcx, $-64(%rbp) + 0x49, 0x01, 0xcc, //0x00001eb0 addq %rcx, %r12 + 0x45, 0x31, 0xc0, //0x00001eb3 xorl %r8d, %r8d + 0x45, 0x31, 0xc9, //0x00001eb6 xorl %r9d, %r9d + 0x45, 0x31, 0xd2, //0x00001eb9 xorl %r10d, %r10d + 0x45, 0x31, 0xf6, //0x00001ebc xorl %r14d, %r14d + 0x48, 0x83, 0xfa, 0x40, //0x00001ebf cmpq $64, %rdx + 0x48, 0x89, 0x55, 0xb8, //0x00001ec3 movq %rdx, $-72(%rbp) + 0x0f, 0x8d, 0x5b, 0x01, 0x00, 0x00, //0x00001ec7 jge LBB0_367 + //0x00001ecd LBB0_376 + 0x48, 0x85, 0xd2, //0x00001ecd testq %rdx, %rdx + 0x0f, 0x8e, 0xec, 0x1d, 0x00, 0x00, //0x00001ed0 jle LBB0_662 + 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00001ed6 movdqa %xmm13, %xmm7 + 0x66, 0x0f, 0x6f, 0xf2, //0x00001edb movdqa %xmm2, %xmm6 + 0x66, 0x0f, 0xef, 0xd2, //0x00001edf pxor %xmm2, %xmm2 + 0xf3, 0x0f, 0x7f, 0x55, 0x80, //0x00001ee3 movdqu %xmm2, $-128(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001ee8 movdqu %xmm2, $-144(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x60, 0xff, 0xff, 0xff, //0x00001ef0 movdqu %xmm2, $-160(%rbp) + 0xf3, 0x0f, 0x7f, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001ef8 movdqu %xmm2, $-176(%rbp) + 0x4c, 0x89, 0xe7, //0x00001f00 movq %r12, %rdi + 0x44, 0x89, 0xe1, //0x00001f03 movl %r12d, %ecx + 0x81, 0xe1, 0xff, 0x0f, 0x00, 0x00, //0x00001f06 andl $4095, %ecx + 0x81, 0xf9, 0xc1, 0x0f, 0x00, 0x00, //0x00001f0c cmpl $4033, %ecx + 0x0f, 0x82, 0x3a, 0x00, 0x00, 0x00, //0x00001f12 jb LBB0_380 + 0x48, 0x83, 0x7d, 0xb8, 0x20, //0x00001f18 cmpq $32, $-72(%rbp) + 0x0f, 0x82, 0x40, 0x00, 0x00, 0x00, //0x00001f1d jb LBB0_381 + 0x0f, 0x10, 0x1f, //0x00001f23 movups (%rdi), %xmm3 + 0x0f, 0x11, 0x9d, 0x50, 0xff, 0xff, 0xff, //0x00001f26 movups %xmm3, $-176(%rbp) + 0xf3, 0x0f, 0x6f, 0x5f, 0x10, //0x00001f2d movdqu $16(%rdi), %xmm3 + 0xf3, 0x0f, 0x7f, 0x9d, 0x60, 0xff, 0xff, 0xff, //0x00001f32 movdqu %xmm3, $-160(%rbp) + 0x48, 0x83, 0xc7, 0x20, //0x00001f3a addq $32, %rdi + 0x48, 0x8b, 0x4d, 0xb8, //0x00001f3e movq $-72(%rbp), %rcx + 0x48, 0x8d, 0x71, 0xe0, //0x00001f42 leaq $-32(%rcx), %rsi + 0x48, 0x8d, 0x95, 0x70, 0xff, 0xff, 0xff, //0x00001f46 leaq $-144(%rbp), %rdx + 0xe9, 0x1c, 0x00, 0x00, 0x00, //0x00001f4d jmp LBB0_382 + //0x00001f52 LBB0_380 + 0x66, 0x0f, 0x6f, 0xd6, //0x00001f52 movdqa %xmm6, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x00001f56 movdqa %xmm7, %xmm13 + 0x49, 0x89, 0xfc, //0x00001f5b movq %rdi, %r12 + 0xe9, 0xc5, 0x00, 0x00, 0x00, //0x00001f5e jmp LBB0_367 + //0x00001f63 LBB0_381 + 0x48, 0x8d, 0x95, 0x50, 0xff, 0xff, 0xff, //0x00001f63 leaq $-176(%rbp), %rdx + 0x48, 0x8b, 0x75, 0xb8, //0x00001f6a movq $-72(%rbp), %rsi + //0x00001f6e LBB0_382 + 0x48, 0x83, 0xfe, 0x10, //0x00001f6e cmpq $16, %rsi + 0x0f, 0x82, 0x47, 0x00, 0x00, 0x00, //0x00001f72 jb LBB0_383 + 0xf3, 0x0f, 0x6f, 0x1f, //0x00001f78 movdqu (%rdi), %xmm3 + 0xf3, 0x0f, 0x7f, 0x1a, //0x00001f7c movdqu %xmm3, (%rdx) + 0x48, 0x83, 0xc7, 0x10, //0x00001f80 addq $16, %rdi + 0x48, 0x83, 0xc2, 0x10, //0x00001f84 addq $16, %rdx + 0x48, 0x83, 0xc6, 0xf0, //0x00001f88 addq $-16, %rsi + 0x48, 0x83, 0xfe, 0x08, //0x00001f8c cmpq $8, %rsi + 0x0f, 0x83, 0x33, 0x00, 0x00, 0x00, //0x00001f90 jae LBB0_390 + //0x00001f96 LBB0_384 + 0x48, 0x83, 0xfe, 0x04, //0x00001f96 cmpq $4, %rsi + 0x0f, 0x8c, 0x45, 0x00, 0x00, 0x00, //0x00001f9a jl LBB0_385 + //0x00001fa0 LBB0_391 + 0x8b, 0x0f, //0x00001fa0 movl (%rdi), %ecx + 0x89, 0x0a, //0x00001fa2 movl %ecx, (%rdx) + 0x48, 0x83, 0xc7, 0x04, //0x00001fa4 addq $4, %rdi + 0x48, 0x83, 0xc2, 0x04, //0x00001fa8 addq $4, %rdx + 0x48, 0x83, 0xc6, 0xfc, //0x00001fac addq $-4, %rsi + 0x48, 0x83, 0xfe, 0x02, //0x00001fb0 cmpq $2, %rsi + 0x0f, 0x83, 0x35, 0x00, 0x00, 0x00, //0x00001fb4 jae LBB0_386 + 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00001fba jmp LBB0_387 + //0x00001fbf LBB0_383 + 0x48, 0x83, 0xfe, 0x08, //0x00001fbf cmpq $8, %rsi + 0x0f, 0x82, 0xcd, 0xff, 0xff, 0xff, //0x00001fc3 jb LBB0_384 + //0x00001fc9 LBB0_390 + 0x48, 0x8b, 0x0f, //0x00001fc9 movq (%rdi), %rcx + 0x48, 0x89, 0x0a, //0x00001fcc movq %rcx, (%rdx) + 0x48, 0x83, 0xc7, 0x08, //0x00001fcf addq $8, %rdi + 0x48, 0x83, 0xc2, 0x08, //0x00001fd3 addq $8, %rdx + 0x48, 0x83, 0xc6, 0xf8, //0x00001fd7 addq $-8, %rsi + 0x48, 0x83, 0xfe, 0x04, //0x00001fdb cmpq $4, %rsi + 0x0f, 0x8d, 0xbb, 0xff, 0xff, 0xff, //0x00001fdf jge LBB0_391 + //0x00001fe5 LBB0_385 + 0x48, 0x83, 0xfe, 0x02, //0x00001fe5 cmpq $2, %rsi + 0x0f, 0x82, 0x12, 0x00, 0x00, 0x00, //0x00001fe9 jb LBB0_387 + //0x00001fef LBB0_386 + 0x0f, 0xb7, 0x0f, //0x00001fef movzwl (%rdi), %ecx + 0x66, 0x89, 0x0a, //0x00001ff2 movw %cx, (%rdx) + 0x48, 0x83, 0xc7, 0x02, //0x00001ff5 addq $2, %rdi + 0x48, 0x83, 0xc2, 0x02, //0x00001ff9 addq $2, %rdx + 0x48, 0x83, 0xc6, 0xfe, //0x00001ffd addq $-2, %rsi + //0x00002001 LBB0_387 + 0x48, 0x89, 0xf9, //0x00002001 movq %rdi, %rcx + 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00002004 leaq $-176(%rbp), %r12 + 0x48, 0x85, 0xf6, //0x0000200b testq %rsi, %rsi + 0x66, 0x0f, 0x6f, 0xd6, //0x0000200e movdqa %xmm6, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x00002012 movdqa %xmm7, %xmm13 + 0x0f, 0x84, 0x0b, 0x00, 0x00, 0x00, //0x00002017 je LBB0_367 + 0x8a, 0x09, //0x0000201d movb (%rcx), %cl + 0x88, 0x0a, //0x0000201f movb %cl, (%rdx) + 0x4c, 0x8d, 0xa5, 0x50, 0xff, 0xff, 0xff, //0x00002021 leaq $-176(%rbp), %r12 + //0x00002028 LBB0_367 + 0xf3, 0x41, 0x0f, 0x6f, 0x24, 0x24, //0x00002028 movdqu (%r12), %xmm4 + 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x24, 0x10, //0x0000202e movdqu $16(%r12), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x24, 0x20, //0x00002035 movdqu $32(%r12), %xmm6 + 0xf3, 0x41, 0x0f, 0x6f, 0x6c, 0x24, 0x30, //0x0000203c movdqu $48(%r12), %xmm5 + 0x66, 0x0f, 0x6f, 0xdc, //0x00002043 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002047 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x0000204b pmovmskb %xmm3, %edx + 0x66, 0x0f, 0x6f, 0xdf, //0x0000204f movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002053 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00002057 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xde, //0x0000205b movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000205f pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002063 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x6f, 0xdd, //0x00002067 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000206b pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x0000206f pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe7, 0x30, //0x00002073 shlq $48, %rdi + 0x48, 0xc1, 0xe6, 0x20, //0x00002077 shlq $32, %rsi + 0x48, 0x09, 0xfe, //0x0000207b orq %rdi, %rsi + 0x48, 0xc1, 0xe1, 0x10, //0x0000207e shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x00002082 orq %rsi, %rcx + 0x48, 0x09, 0xca, //0x00002085 orq %rcx, %rdx + 0x48, 0x89, 0xd1, //0x00002088 movq %rdx, %rcx + 0x4c, 0x09, 0xc9, //0x0000208b orq %r9, %rcx + 0x0f, 0x85, 0x0f, 0x00, 0x00, 0x00, //0x0000208e jne LBB0_369 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002094 movq $-1, %rdx + 0x45, 0x31, 0xc9, //0x0000209b xorl %r9d, %r9d + 0xe9, 0x46, 0x00, 0x00, 0x00, //0x0000209e jmp LBB0_370 + //0x000020a3 LBB0_369 + 0x4c, 0x89, 0xc9, //0x000020a3 movq %r9, %rcx + 0x48, 0xf7, 0xd1, //0x000020a6 notq %rcx + 0x48, 0x21, 0xd1, //0x000020a9 andq %rdx, %rcx + 0x4c, 0x8d, 0x1c, 0x09, //0x000020ac leaq (%rcx,%rcx), %r11 + 0x4d, 0x09, 0xcb, //0x000020b0 orq %r9, %r11 + 0x4c, 0x89, 0xdf, //0x000020b3 movq %r11, %rdi + 0x48, 0xf7, 0xd7, //0x000020b6 notq %rdi + 0x48, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x000020b9 movabsq $-6148914691236517206, %rsi + 0x48, 0x21, 0xf2, //0x000020c3 andq %rsi, %rdx + 0x48, 0x21, 0xfa, //0x000020c6 andq %rdi, %rdx + 0x45, 0x31, 0xc9, //0x000020c9 xorl %r9d, %r9d + 0x48, 0x01, 0xca, //0x000020cc addq %rcx, %rdx + 0x41, 0x0f, 0x92, 0xc1, //0x000020cf setb %r9b + 0x48, 0x01, 0xd2, //0x000020d3 addq %rdx, %rdx + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x000020d6 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xca, //0x000020e0 xorq %rcx, %rdx + 0x4c, 0x21, 0xda, //0x000020e3 andq %r11, %rdx + 0x48, 0xf7, 0xd2, //0x000020e6 notq %rdx + //0x000020e9 LBB0_370 + 0x66, 0x0f, 0x6f, 0xdd, //0x000020e9 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x000020ed pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x000020f1 pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x30, //0x000020f5 shlq $48, %rcx + 0x66, 0x0f, 0x6f, 0xde, //0x000020f9 movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x000020fd pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002101 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x20, //0x00002105 shlq $32, %rsi + 0x48, 0x09, 0xce, //0x00002109 orq %rcx, %rsi + 0x66, 0x0f, 0x6f, 0xdf, //0x0000210c movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002110 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00002114 pmovmskb %xmm3, %ecx + 0x48, 0xc1, 0xe1, 0x10, //0x00002118 shlq $16, %rcx + 0x48, 0x09, 0xf1, //0x0000211c orq %rsi, %rcx + 0x66, 0x0f, 0x6f, 0xdc, //0x0000211f movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002123 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002127 pmovmskb %xmm3, %esi + 0x48, 0x09, 0xce, //0x0000212b orq %rcx, %rsi + 0x48, 0x21, 0xd6, //0x0000212e andq %rdx, %rsi + 0x66, 0x48, 0x0f, 0x6e, 0xde, //0x00002131 movq %rsi, %xmm3 + 0x66, 0x41, 0x0f, 0x3a, 0x44, 0xda, 0x00, //0x00002136 pclmulqdq $0, %xmm10, %xmm3 + 0x66, 0x49, 0x0f, 0x7e, 0xdb, //0x0000213d movq %xmm3, %r11 + 0x4d, 0x31, 0xc3, //0x00002142 xorq %r8, %r11 + 0x66, 0x0f, 0x6f, 0xdc, //0x00002145 movdqa %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00002149 pcmpeqb %xmm13, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x0000214e pmovmskb %xmm3, %r13d + 0x66, 0x0f, 0x6f, 0xdf, //0x00002153 movdqa %xmm7, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00002157 pcmpeqb %xmm13, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x0000215c pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xde, //0x00002160 movdqa %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00002164 pcmpeqb %xmm13, %xmm3 + 0x66, 0x0f, 0xd7, 0xd3, //0x00002169 pmovmskb %xmm3, %edx + 0x66, 0x0f, 0x6f, 0xdd, //0x0000216d movdqa %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x74, 0xdd, //0x00002171 pcmpeqb %xmm13, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002176 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe6, 0x30, //0x0000217a shlq $48, %rsi + 0x48, 0xc1, 0xe2, 0x20, //0x0000217e shlq $32, %rdx + 0x48, 0x09, 0xf2, //0x00002182 orq %rsi, %rdx + 0x48, 0xc1, 0xe1, 0x10, //0x00002185 shlq $16, %rcx + 0x48, 0x09, 0xd1, //0x00002189 orq %rdx, %rcx + 0x49, 0x09, 0xcd, //0x0000218c orq %rcx, %r13 + 0x4d, 0x89, 0xd8, //0x0000218f movq %r11, %r8 + 0x49, 0xf7, 0xd0, //0x00002192 notq %r8 + 0x4d, 0x21, 0xc5, //0x00002195 andq %r8, %r13 + 0x66, 0x41, 0x0f, 0x74, 0xe0, //0x00002198 pcmpeqb %xmm8, %xmm4 + 0x66, 0x0f, 0xd7, 0xd4, //0x0000219d pmovmskb %xmm4, %edx + 0x66, 0x41, 0x0f, 0x74, 0xf8, //0x000021a1 pcmpeqb %xmm8, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x000021a6 pmovmskb %xmm7, %esi + 0x66, 0x41, 0x0f, 0x74, 0xf0, //0x000021aa pcmpeqb %xmm8, %xmm6 + 0x66, 0x0f, 0xd7, 0xce, //0x000021af pmovmskb %xmm6, %ecx + 0x66, 0x41, 0x0f, 0x74, 0xe8, //0x000021b3 pcmpeqb %xmm8, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xfd, //0x000021b8 pmovmskb %xmm5, %r15d + 0x49, 0xc1, 0xe7, 0x30, //0x000021bd shlq $48, %r15 + 0x48, 0xc1, 0xe1, 0x20, //0x000021c1 shlq $32, %rcx + 0x4c, 0x09, 0xf9, //0x000021c5 orq %r15, %rcx + 0x48, 0xc1, 0xe6, 0x10, //0x000021c8 shlq $16, %rsi + 0x48, 0x09, 0xce, //0x000021cc orq %rcx, %rsi + 0x48, 0x09, 0xf2, //0x000021cf orq %rsi, %rdx + 0x4c, 0x21, 0xc2, //0x000021d2 andq %r8, %rdx + 0x0f, 0x84, 0x8c, 0x00, 0x00, 0x00, //0x000021d5 je LBB0_374 + 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x000021db movabsq $3689348814741910323, %r8 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000021e5 .p2align 4, 0x90 + //0x000021f0 LBB0_372 + 0x48, 0x8d, 0x7a, 0xff, //0x000021f0 leaq $-1(%rdx), %rdi + 0x48, 0x89, 0xf9, //0x000021f4 movq %rdi, %rcx + 0x4c, 0x21, 0xe9, //0x000021f7 andq %r13, %rcx + 0x48, 0x89, 0xce, //0x000021fa movq %rcx, %rsi + 0x48, 0xd1, 0xee, //0x000021fd shrq %rsi + 0x48, 0xbb, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002200 movabsq $6148914691236517205, %rbx + 0x48, 0x21, 0xde, //0x0000220a andq %rbx, %rsi + 0x48, 0x29, 0xf1, //0x0000220d subq %rsi, %rcx + 0x48, 0x89, 0xce, //0x00002210 movq %rcx, %rsi + 0x4c, 0x21, 0xc6, //0x00002213 andq %r8, %rsi + 0x48, 0xc1, 0xe9, 0x02, //0x00002216 shrq $2, %rcx + 0x4c, 0x21, 0xc1, //0x0000221a andq %r8, %rcx + 0x48, 0x01, 0xf1, //0x0000221d addq %rsi, %rcx 0x48, 0x89, 0xce, //0x00002220 movq %rcx, %rsi - 0x4c, 0x21, 0xc6, //0x00002223 andq %r8, %rsi - 0x48, 0xc1, 0xe9, 0x02, //0x00002226 shrq $2, %rcx - 0x4c, 0x21, 0xc1, //0x0000222a andq %r8, %rcx - 0x48, 0x01, 0xf1, //0x0000222d addq %rsi, %rcx - 0x48, 0x89, 0xce, //0x00002230 movq %rcx, %rsi - 0x48, 0xc1, 0xee, 0x04, //0x00002233 shrq $4, %rsi - 0x48, 0x01, 0xce, //0x00002237 addq %rcx, %rsi - 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000223a movabsq $1085102592571150095, %rcx - 0x48, 0x21, 0xce, //0x00002244 andq %rcx, %rsi - 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002247 movabsq $72340172838076673, %rcx - 0x48, 0x0f, 0xaf, 0xf1, //0x00002251 imulq %rcx, %rsi - 0x48, 0xc1, 0xee, 0x38, //0x00002255 shrq $56, %rsi - 0x4c, 0x01, 0xce, //0x00002259 addq %r9, %rsi - 0x4c, 0x39, 0xf6, //0x0000225c cmpq %r14, %rsi - 0x0f, 0x86, 0x94, 0x00, 0x00, 0x00, //0x0000225f jbe LBB0_382 - 0x49, 0x83, 0xc6, 0x01, //0x00002265 addq $1, %r14 - 0x48, 0x21, 0xfa, //0x00002269 andq %rdi, %rdx - 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x0000226c jne LBB0_362 - 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00002272 jmp LBB0_365 - //0x00002277 LBB0_364 - 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00002277 movabsq $3689348814741910323, %r8 - //0x00002281 LBB0_365 - 0x49, 0xc1, 0xfb, 0x3f, //0x00002281 sarq $63, %r11 - 0x4c, 0x89, 0xe9, //0x00002285 movq %r13, %rcx - 0x48, 0xd1, 0xe9, //0x00002288 shrq %rcx - 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000228b movabsq $6148914691236517205, %rdx - 0x48, 0x21, 0xd1, //0x00002295 andq %rdx, %rcx - 0x49, 0x29, 0xcd, //0x00002298 subq %rcx, %r13 + 0x48, 0xc1, 0xee, 0x04, //0x00002223 shrq $4, %rsi + 0x48, 0x01, 0xce, //0x00002227 addq %rcx, %rsi + 0x48, 0xb9, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x0000222a movabsq $1085102592571150095, %rcx + 0x48, 0x21, 0xce, //0x00002234 andq %rcx, %rsi + 0x48, 0xb9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x00002237 movabsq $72340172838076673, %rcx + 0x48, 0x0f, 0xaf, 0xf1, //0x00002241 imulq %rcx, %rsi + 0x48, 0xc1, 0xee, 0x38, //0x00002245 shrq $56, %rsi + 0x4c, 0x01, 0xd6, //0x00002249 addq %r10, %rsi + 0x4c, 0x39, 0xf6, //0x0000224c cmpq %r14, %rsi + 0x0f, 0x86, 0x94, 0x00, 0x00, 0x00, //0x0000224f jbe LBB0_392 + 0x49, 0x83, 0xc6, 0x01, //0x00002255 addq $1, %r14 + 0x48, 0x21, 0xfa, //0x00002259 andq %rdi, %rdx + 0x0f, 0x85, 0x8e, 0xff, 0xff, 0xff, //0x0000225c jne LBB0_372 + 0xe9, 0x0a, 0x00, 0x00, 0x00, //0x00002262 jmp LBB0_375 + //0x00002267 LBB0_374 + 0x49, 0xb8, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, //0x00002267 movabsq $3689348814741910323, %r8 + //0x00002271 LBB0_375 + 0x49, 0xc1, 0xfb, 0x3f, //0x00002271 sarq $63, %r11 + 0x4c, 0x89, 0xe9, //0x00002275 movq %r13, %rcx + 0x48, 0xd1, 0xe9, //0x00002278 shrq %rcx + 0x48, 0xba, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x0000227b movabsq $6148914691236517205, %rdx + 0x48, 0x21, 0xd1, //0x00002285 andq %rdx, %rcx + 0x49, 0x29, 0xcd, //0x00002288 subq %rcx, %r13 + 0x4c, 0x89, 0xe9, //0x0000228b movq %r13, %rcx + 0x4c, 0x21, 0xc1, //0x0000228e andq %r8, %rcx + 0x49, 0xc1, 0xed, 0x02, //0x00002291 shrq $2, %r13 + 0x4d, 0x21, 0xc5, //0x00002295 andq %r8, %r13 + 0x49, 0x01, 0xcd, //0x00002298 addq %rcx, %r13 0x4c, 0x89, 0xe9, //0x0000229b movq %r13, %rcx - 0x4c, 0x21, 0xc1, //0x0000229e andq %r8, %rcx - 0x49, 0xc1, 0xed, 0x02, //0x000022a1 shrq $2, %r13 - 0x4d, 0x21, 0xc5, //0x000022a5 andq %r8, %r13 - 0x49, 0x01, 0xcd, //0x000022a8 addq %rcx, %r13 - 0x4c, 0x89, 0xe9, //0x000022ab movq %r13, %rcx - 0x48, 0xc1, 0xe9, 0x04, //0x000022ae shrq $4, %rcx - 0x4c, 0x01, 0xe9, //0x000022b2 addq %r13, %rcx - 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x000022b5 movabsq $1085102592571150095, %rdx - 0x48, 0x21, 0xd1, //0x000022bf andq %rdx, %rcx - 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000022c2 movabsq $72340172838076673, %rdx - 0x48, 0x0f, 0xaf, 0xca, //0x000022cc imulq %rdx, %rcx - 0x48, 0xc1, 0xe9, 0x38, //0x000022d0 shrq $56, %rcx - 0x49, 0x01, 0xc9, //0x000022d4 addq %rcx, %r9 - 0x49, 0x83, 0xc4, 0x40, //0x000022d7 addq $64, %r12 - 0x48, 0x8b, 0x55, 0xc0, //0x000022db movq $-64(%rbp), %rdx - 0x48, 0x83, 0xc2, 0xc0, //0x000022df addq $-64, %rdx - 0x4d, 0x89, 0xd8, //0x000022e3 movq %r11, %r8 - 0x48, 0x83, 0xfa, 0x40, //0x000022e6 cmpq $64, %rdx - 0x48, 0x89, 0x55, 0xc0, //0x000022ea movq %rdx, $-64(%rbp) - 0x0f, 0x8d, 0x4a, 0xfd, 0xff, 0xff, //0x000022ee jge LBB0_357 - 0xe9, 0xea, 0xfb, 0xff, 0xff, //0x000022f4 jmp LBB0_366 - //0x000022f9 LBB0_382 - 0x48, 0x8b, 0x75, 0xa8, //0x000022f9 movq $-88(%rbp), %rsi - 0x48, 0x8b, 0x4e, 0x08, //0x000022fd movq $8(%rsi), %rcx - 0x48, 0x0f, 0xbc, 0xd2, //0x00002301 bsfq %rdx, %rdx - 0x48, 0x2b, 0x55, 0xc0, //0x00002305 subq $-64(%rbp), %rdx - 0x48, 0x01, 0xd1, //0x00002309 addq %rdx, %rcx - 0x48, 0x83, 0xc1, 0x01, //0x0000230c addq $1, %rcx - 0x4c, 0x8b, 0x75, 0xd0, //0x00002310 movq $-48(%rbp), %r14 - 0x49, 0x89, 0x0e, //0x00002314 movq %rcx, (%r14) - 0x48, 0x8b, 0x56, 0x08, //0x00002317 movq $8(%rsi), %rdx - 0x48, 0x39, 0xd1, //0x0000231b cmpq %rdx, %rcx - 0x48, 0x0f, 0x47, 0xca, //0x0000231e cmovaq %rdx, %rcx - 0x49, 0x89, 0x0e, //0x00002322 movq %rcx, (%r14) - 0x0f, 0x87, 0x1c, 0x17, 0x00, 0x00, //0x00002325 ja LBB0_638 - 0x48, 0x8b, 0x45, 0xb0, //0x0000232b movq $-80(%rbp), %rax - 0x48, 0x85, 0xc0, //0x0000232f testq %rax, %rax - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002332 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002336 movabsq $4294977024, %r11 - 0x0f, 0x8f, 0x7a, 0xde, 0xff, 0xff, //0x00002340 jg LBB0_4 - 0xe9, 0xad, 0x16, 0x00, 0x00, //0x00002346 jmp LBB0_606 - //0x0000234b LBB0_605 - 0x66, 0x0f, 0xbc, 0xce, //0x0000234b bsfw %si, %cx - 0x0f, 0xb7, 0xc9, //0x0000234f movzwl %cx, %ecx - 0x48, 0x29, 0xd1, //0x00002352 subq %rdx, %rcx - 0x49, 0x89, 0x0e, //0x00002355 movq %rcx, (%r14) - 0x48, 0x85, 0xc0, //0x00002358 testq %rax, %rax - 0x0f, 0x8f, 0x5f, 0xde, 0xff, 0xff, //0x0000235b jg LBB0_4 - 0xe9, 0x92, 0x16, 0x00, 0x00, //0x00002361 jmp LBB0_606 - //0x00002366 LBB0_384 - 0x49, 0x8d, 0x57, 0xff, //0x00002366 leaq $-1(%r15), %rdx - 0x49, 0x39, 0xd0, //0x0000236a cmpq %rdx, %r8 - 0x49, 0xf7, 0xd7, //0x0000236d notq %r15 - 0x4d, 0x0f, 0x45, 0xfb, //0x00002370 cmovneq %r11, %r15 - 0x84, 0xc9, //0x00002374 testb %cl, %cl - 0x4d, 0x0f, 0x44, 0xfb, //0x00002376 cmoveq %r11, %r15 - 0x4d, 0x89, 0xfd, //0x0000237a movq %r15, %r13 - 0xe9, 0x60, 0xde, 0xff, 0xff, //0x0000237d jmp LBB0_2 - //0x00002382 LBB0_385 - 0x48, 0x89, 0xc6, //0x00002382 movq %rax, %rsi - 0x48, 0x29, 0xd6, //0x00002385 subq %rdx, %rsi - 0x48, 0x89, 0xd1, //0x00002388 movq %rdx, %rcx - 0x0f, 0x84, 0xb4, 0x18, 0x00, 0x00, //0x0000238b je LBB0_644 - 0x48, 0x83, 0xfe, 0x40, //0x00002391 cmpq $64, %rsi - 0x0f, 0x82, 0xeb, 0x0c, 0x00, 0x00, //0x00002395 jb LBB0_503 - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000239b movq $-1, $-56(%rbp) - 0x48, 0x89, 0xc8, //0x000023a3 movq %rcx, %rax - 0x31, 0xdb, //0x000023a6 xorl %ebx, %ebx - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000023a8 .p2align 4, 0x90 - //0x000023b0 LBB0_388 - 0x48, 0x89, 0x75, 0xc0, //0x000023b0 movq %rsi, $-64(%rbp) - 0x49, 0x89, 0xd9, //0x000023b4 movq %rbx, %r9 - 0xf3, 0x41, 0x0f, 0x6f, 0x2c, 0x04, //0x000023b7 movdqu (%r12,%rax), %xmm5 - 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x04, 0x10, //0x000023bd movdqu $16(%r12,%rax), %xmm7 - 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x20, //0x000023c4 movdqu $32(%r12,%rax), %xmm6 - 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x30, //0x000023cb movdqu $48(%r12,%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xdd, //0x000023d2 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000023d6 pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x000023da pmovmskb %xmm3, %r11d - 0x66, 0x0f, 0x6f, 0xdf, //0x000023df movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000023e3 pcmpeqb %xmm0, %xmm3 - 0x66, 0x0f, 0xd7, 0xcb, //0x000023e7 pmovmskb %xmm3, %ecx - 0x66, 0x0f, 0x6f, 0xde, //0x000023eb movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000023ef pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xf3, //0x000023f3 pmovmskb %xmm3, %r14d - 0x66, 0x0f, 0x6f, 0xdc, //0x000023f8 movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd8, //0x000023fc pcmpeqb %xmm0, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x00002400 pmovmskb %xmm3, %r15d - 0x66, 0x0f, 0x6f, 0xdd, //0x00002405 movdqa %xmm5, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002409 pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x0000240d pmovmskb %xmm3, %r13d - 0x66, 0x0f, 0x6f, 0xdf, //0x00002412 movdqa %xmm7, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002416 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xdb, //0x0000241a pmovmskb %xmm3, %ebx - 0x66, 0x0f, 0x6f, 0xde, //0x0000241e movdqa %xmm6, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x00002422 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002426 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x6f, 0xdc, //0x0000242a movdqa %xmm4, %xmm3 - 0x66, 0x0f, 0x74, 0xd9, //0x0000242e pcmpeqb %xmm1, %xmm3 - 0x66, 0x44, 0x0f, 0xd7, 0xd3, //0x00002432 pmovmskb %xmm3, %r10d - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002437 movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdf, //0x0000243c pcmpgtb %xmm7, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xfa, //0x00002440 pcmpgtb %xmm10, %xmm7 - 0x66, 0x0f, 0xdb, 0xfb, //0x00002445 pand %xmm3, %xmm7 - 0x66, 0x0f, 0xd7, 0xff, //0x00002449 pmovmskb %xmm7, %edi - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x0000244d movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xde, //0x00002452 pcmpgtb %xmm6, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xf2, //0x00002456 pcmpgtb %xmm10, %xmm6 - 0x66, 0x0f, 0xdb, 0xf3, //0x0000245b pand %xmm3, %xmm6 - 0x66, 0x0f, 0xd7, 0xd6, //0x0000245f pmovmskb %xmm6, %edx - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002463 movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x00002468 pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x0000246c pcmpgtb %xmm10, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x00002471 pand %xmm3, %xmm4 - 0x66, 0x44, 0x0f, 0xd7, 0xc4, //0x00002475 pmovmskb %xmm4, %r8d - 0x49, 0xc1, 0xe7, 0x30, //0x0000247a shlq $48, %r15 - 0x49, 0xc1, 0xe6, 0x20, //0x0000247e shlq $32, %r14 - 0x4d, 0x09, 0xfe, //0x00002482 orq %r15, %r14 - 0x48, 0xc1, 0xe1, 0x10, //0x00002485 shlq $16, %rcx - 0x4c, 0x09, 0xf1, //0x00002489 orq %r14, %rcx - 0x49, 0x09, 0xcb, //0x0000248c orq %rcx, %r11 - 0x49, 0xc1, 0xe2, 0x30, //0x0000248f shlq $48, %r10 - 0x48, 0xc1, 0xe6, 0x20, //0x00002493 shlq $32, %rsi - 0x4c, 0x09, 0xd6, //0x00002497 orq %r10, %rsi - 0x48, 0xc1, 0xe3, 0x10, //0x0000249a shlq $16, %rbx - 0x48, 0x09, 0xf3, //0x0000249e orq %rsi, %rbx - 0x49, 0xc1, 0xe0, 0x30, //0x000024a1 shlq $48, %r8 - 0x48, 0xc1, 0xe2, 0x20, //0x000024a5 shlq $32, %rdx - 0x4c, 0x09, 0xc2, //0x000024a9 orq %r8, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x000024ac shlq $16, %rdi - 0x48, 0x09, 0xd7, //0x000024b0 orq %rdx, %rdi - 0x49, 0x09, 0xdd, //0x000024b3 orq %rbx, %r13 - 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x000024b6 jne LBB0_405 - 0x4d, 0x85, 0xc9, //0x000024bc testq %r9, %r9 - 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x000024bf jne LBB0_407 - 0x31, 0xdb, //0x000024c5 xorl %ebx, %ebx - 0x4c, 0x8b, 0x75, 0xd0, //0x000024c7 movq $-48(%rbp), %r14 - //0x000024cb LBB0_391 - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x000024cb movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdd, //0x000024d0 pcmpgtb %xmm5, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xea, //0x000024d4 pcmpgtb %xmm10, %xmm5 - 0x66, 0x0f, 0xdb, 0xeb, //0x000024d9 pand %xmm3, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x000024dd pmovmskb %xmm5, %ecx - 0x48, 0x09, 0xcf, //0x000024e1 orq %rcx, %rdi - 0x4d, 0x85, 0xdb, //0x000024e4 testq %r11, %r11 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000024e7 movq $-72(%rbp), %r13 - 0x0f, 0x85, 0x93, 0x00, 0x00, 0x00, //0x000024eb jne LBB0_409 - 0x48, 0x85, 0xff, //0x000024f1 testq %rdi, %rdi - 0x0f, 0x85, 0xaf, 0x16, 0x00, 0x00, //0x000024f4 jne LBB0_632 - 0x48, 0x8b, 0x75, 0xc0, //0x000024fa movq $-64(%rbp), %rsi - 0x48, 0x83, 0xc6, 0xc0, //0x000024fe addq $-64, %rsi - 0x48, 0x83, 0xc0, 0x40, //0x00002502 addq $64, %rax - 0x48, 0x83, 0xfe, 0x3f, //0x00002506 cmpq $63, %rsi - 0x0f, 0x87, 0xa0, 0xfe, 0xff, 0xff, //0x0000250a ja LBB0_388 - 0xe9, 0xb7, 0x07, 0x00, 0x00, //0x00002510 jmp LBB0_394 - //0x00002515 LBB0_405 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00002515 cmpq $-1, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x0000251a movq $-48(%rbp), %r14 - 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x0000251e jne LBB0_408 - 0x49, 0x0f, 0xbc, 0xcd, //0x00002524 bsfq %r13, %rcx - 0x48, 0x01, 0xc1, //0x00002528 addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x0000252b movq %rcx, $-56(%rbp) - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x0000252f jmp LBB0_408 - //0x00002534 LBB0_407 - 0x4c, 0x8b, 0x75, 0xd0, //0x00002534 movq $-48(%rbp), %r14 - //0x00002538 LBB0_408 - 0x4c, 0x89, 0xc9, //0x00002538 movq %r9, %rcx - 0x48, 0xf7, 0xd1, //0x0000253b notq %rcx - 0x4c, 0x21, 0xe9, //0x0000253e andq %r13, %rcx - 0x48, 0x8d, 0x14, 0x09, //0x00002541 leaq (%rcx,%rcx), %rdx - 0x4c, 0x09, 0xca, //0x00002545 orq %r9, %rdx - 0x48, 0x89, 0xd6, //0x00002548 movq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x0000254b notq %rsi - 0x4c, 0x21, 0xee, //0x0000254e andq %r13, %rsi - 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002551 movabsq $-6148914691236517206, %rbx - 0x48, 0x21, 0xde, //0x0000255b andq %rbx, %rsi - 0x31, 0xdb, //0x0000255e xorl %ebx, %ebx - 0x48, 0x01, 0xce, //0x00002560 addq %rcx, %rsi - 0x0f, 0x92, 0xc3, //0x00002563 setb %bl - 0x48, 0x01, 0xf6, //0x00002566 addq %rsi, %rsi - 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002569 movabsq $6148914691236517205, %rcx - 0x48, 0x31, 0xce, //0x00002573 xorq %rcx, %rsi - 0x48, 0x21, 0xd6, //0x00002576 andq %rdx, %rsi - 0x48, 0xf7, 0xd6, //0x00002579 notq %rsi - 0x49, 0x21, 0xf3, //0x0000257c andq %rsi, %r11 - 0xe9, 0x47, 0xff, 0xff, 0xff, //0x0000257f jmp LBB0_391 - //0x00002584 LBB0_409 - 0x49, 0x0f, 0xbc, 0xcb, //0x00002584 bsfq %r11, %rcx - 0x48, 0x85, 0xff, //0x00002588 testq %rdi, %rdi - 0x0f, 0x84, 0x8d, 0x00, 0x00, 0x00, //0x0000258b je LBB0_423 - 0x48, 0x0f, 0xbc, 0xd7, //0x00002591 bsfq %rdi, %rdx - 0xe9, 0x89, 0x00, 0x00, 0x00, //0x00002595 jmp LBB0_424 - //0x0000259a LBB0_411 - 0x41, 0x89, 0xcb, //0x0000259a movl %ecx, %r11d - 0x4d, 0x01, 0xc3, //0x0000259d addq %r8, %r11 - 0x49, 0x01, 0xdb, //0x000025a0 addq %rbx, %r11 - 0xe9, 0x06, 0x00, 0x00, 0x00, //0x000025a3 jmp LBB0_413 - //0x000025a8 LBB0_412 - 0x48, 0x01, 0xda, //0x000025a8 addq %rbx, %rdx - 0x49, 0x89, 0xd3, //0x000025ab movq %rdx, %r11 - //0x000025ae LBB0_413 - 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x000025ae movq $-1, %rbx - 0x4d, 0x85, 0xf6, //0x000025b5 testq %r14, %r14 - 0x0f, 0x84, 0x18, 0x16, 0x00, 0x00, //0x000025b8 je LBB0_636 - 0x4d, 0x85, 0xed, //0x000025be testq %r13, %r13 - 0x0f, 0x84, 0x0f, 0x16, 0x00, 0x00, //0x000025c1 je LBB0_636 - 0x4d, 0x85, 0xd2, //0x000025c7 testq %r10, %r10 - 0x0f, 0x84, 0x06, 0x16, 0x00, 0x00, //0x000025ca je LBB0_636 - 0x4d, 0x29, 0xc3, //0x000025d0 subq %r8, %r11 - 0x49, 0x8d, 0x4b, 0xff, //0x000025d3 leaq $-1(%r11), %rcx - 0x49, 0x39, 0xce, //0x000025d7 cmpq %rcx, %r14 - 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x000025da je LBB0_422 - 0x49, 0x39, 0xcd, //0x000025e0 cmpq %rcx, %r13 - 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x000025e3 je LBB0_422 - 0x49, 0x39, 0xca, //0x000025e9 cmpq %rcx, %r10 - 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x000025ec je LBB0_422 - 0x4d, 0x85, 0xed, //0x000025f2 testq %r13, %r13 - 0x0f, 0x8e, 0x9a, 0x00, 0x00, 0x00, //0x000025f5 jle LBB0_430 - 0x49, 0x8d, 0x4d, 0xff, //0x000025fb leaq $-1(%r13), %rcx - 0x49, 0x39, 0xca, //0x000025ff cmpq %rcx, %r10 - 0x0f, 0x84, 0x8d, 0x00, 0x00, 0x00, //0x00002602 je LBB0_430 - 0x49, 0xf7, 0xd5, //0x00002608 notq %r13 - 0x4c, 0x89, 0xeb, //0x0000260b movq %r13, %rbx - 0xe9, 0x0c, 0x06, 0x00, 0x00, //0x0000260e jmp LBB0_468 - //0x00002613 LBB0_422 - 0x49, 0xf7, 0xdb, //0x00002613 negq %r11 - 0x4c, 0x89, 0xdb, //0x00002616 movq %r11, %rbx - 0xe9, 0x01, 0x06, 0x00, 0x00, //0x00002619 jmp LBB0_468 - //0x0000261e LBB0_423 - 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000261e movl $64, %edx - //0x00002623 LBB0_424 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002623 movabsq $4294977024, %r11 - 0x48, 0x39, 0xca, //0x0000262d cmpq %rcx, %rdx - 0x0f, 0x82, 0xb6, 0x15, 0x00, 0x00, //0x00002630 jb LBB0_640 - 0x48, 0x01, 0xc8, //0x00002636 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002639 addq $1, %rax - //0x0000263d LBB0_426 - 0x48, 0x85, 0xc0, //0x0000263d testq %rax, %rax - 0x0f, 0x89, 0x49, 0xec, 0xff, 0xff, //0x00002640 jns LBB0_224 - 0xe9, 0x1a, 0x14, 0x00, 0x00, //0x00002646 jmp LBB0_615 - //0x0000264b LBB0_132 - 0x4d, 0x85, 0xdb, //0x0000264b testq %r11, %r11 - 0x0f, 0x85, 0x9e, 0x0a, 0x00, 0x00, //0x0000264e jne LBB0_508 - 0x49, 0x01, 0xd2, //0x00002654 addq %rdx, %r10 - 0x49, 0x29, 0xd1, //0x00002657 subq %rdx, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x0000265a movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000265e movabsq $4294977024, %r11 - //0x00002668 LBB0_134 - 0x4d, 0x85, 0xc9, //0x00002668 testq %r9, %r9 - 0x0f, 0x8f, 0xee, 0x0a, 0x00, 0x00, //0x0000266b jg LBB0_512 - 0xe9, 0xd1, 0x13, 0x00, 0x00, //0x00002671 jmp LBB0_638 - //0x00002676 LBB0_428 - 0x4c, 0x29, 0xe0, //0x00002676 subq %r12, %rax - 0x48, 0x01, 0xd0, //0x00002679 addq %rdx, %rax - 0x49, 0x89, 0x06, //0x0000267c movq %rax, (%r14) - 0x48, 0x85, 0xf6, //0x0000267f testq %rsi, %rsi - 0x0f, 0x8f, 0x38, 0xdb, 0xff, 0xff, //0x00002682 jg LBB0_4 - 0xe9, 0xcc, 0x13, 0x00, 0x00, //0x00002688 jmp LBB0_614 - //0x0000268d LBB0_429 - 0x0f, 0xbc, 0xcb, //0x0000268d bsfl %ebx, %ecx - 0xe9, 0x8a, 0x03, 0x00, 0x00, //0x00002690 jmp LBB0_437 - //0x00002695 LBB0_430 - 0x4c, 0x89, 0xf1, //0x00002695 movq %r14, %rcx - 0x4c, 0x09, 0xd1, //0x00002698 orq %r10, %rcx - 0x0f, 0x99, 0xc2, //0x0000269b setns %dl - 0x0f, 0x88, 0xd4, 0x01, 0x00, 0x00, //0x0000269e js LBB0_434 - 0x4d, 0x39, 0xd6, //0x000026a4 cmpq %r10, %r14 - 0x0f, 0x8c, 0xcb, 0x01, 0x00, 0x00, //0x000026a7 jl LBB0_434 - 0x49, 0xf7, 0xd6, //0x000026ad notq %r14 - 0x4c, 0x89, 0xf3, //0x000026b0 movq %r14, %rbx - 0xe9, 0x67, 0x05, 0x00, 0x00, //0x000026b3 jmp LBB0_468 - //0x000026b8 LBB0_433 - 0x48, 0x8b, 0x75, 0xc0, //0x000026b8 movq $-64(%rbp), %rsi - 0x49, 0x01, 0xf4, //0x000026bc addq %rsi, %r12 - 0x49, 0x29, 0xcc, //0x000026bf subq %rcx, %r12 - 0x49, 0x29, 0xfc, //0x000026c2 subq %rdi, %r12 - 0x49, 0x83, 0xc4, 0xfe, //0x000026c5 addq $-2, %r12 - 0x4d, 0x89, 0xe5, //0x000026c9 movq %r12, %r13 - 0xe9, 0x11, 0xdb, 0xff, 0xff, //0x000026cc jmp LBB0_2 - //0x000026d1 LBB0_154 - 0x4d, 0x85, 0xdb, //0x000026d1 testq %r11, %r11 - 0x0f, 0x85, 0x66, 0x0c, 0x00, 0x00, //0x000026d4 jne LBB0_535 - 0x49, 0x01, 0xd2, //0x000026da addq %rdx, %r10 - 0x49, 0x29, 0xd1, //0x000026dd subq %rdx, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x000026e0 movq $-48(%rbp), %r14 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000026e4 movabsq $4294977024, %r11 - //0x000026ee LBB0_156 - 0x4d, 0x85, 0xc9, //0x000026ee testq %r9, %r9 - 0x0f, 0x8f, 0xa7, 0x0c, 0x00, 0x00, //0x000026f1 jg LBB0_539 - 0xe9, 0x4b, 0x13, 0x00, 0x00, //0x000026f7 jmp LBB0_638 - //0x000026fc LBB0_50 - 0x4c, 0x01, 0xe0, //0x000026fc addq %r12, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x000026ff movq $-48(%rbp), %r14 - 0x49, 0x83, 0xf9, 0x20, //0x00002703 cmpq $32, %r9 - 0x0f, 0x82, 0x9f, 0x07, 0x00, 0x00, //0x00002707 jb LBB0_485 - //0x0000270d LBB0_51 - 0xf3, 0x0f, 0x6f, 0x18, //0x0000270d movdqu (%rax), %xmm3 - 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00002711 movdqu $16(%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x00002716 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x0000271a pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x0000271e pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x00002722 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002726 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x0000272a pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x74, 0xd9, //0x0000272e pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002732 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x74, 0xe1, //0x00002736 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xfc, //0x0000273a pmovmskb %xmm4, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x0000273e shlq $16, %rcx - 0x48, 0x09, 0xca, //0x00002742 orq %rcx, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x00002745 shlq $16, %rdi - 0x48, 0x09, 0xfe, //0x00002749 orq %rdi, %rsi - 0x0f, 0x85, 0x45, 0x0a, 0x00, 0x00, //0x0000274c jne LBB0_515 - 0x4d, 0x85, 0xc0, //0x00002752 testq %r8, %r8 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002755 movabsq $4294977024, %r11 - 0x0f, 0x85, 0x5c, 0x0a, 0x00, 0x00, //0x0000275f jne LBB0_517 - 0x45, 0x31, 0xc0, //0x00002765 xorl %r8d, %r8d - 0x48, 0x85, 0xd2, //0x00002768 testq %rdx, %rdx - 0x0f, 0x84, 0xac, 0x0a, 0x00, 0x00, //0x0000276b je LBB0_519 - //0x00002771 LBB0_54 - 0x48, 0x0f, 0xbc, 0xca, //0x00002771 bsfq %rdx, %rcx - 0x4c, 0x29, 0xe0, //0x00002775 subq %r12, %rax - 0x48, 0x01, 0xc8, //0x00002778 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x0000277b addq $1, %rax - 0xe9, 0x02, 0xeb, 0xff, 0xff, //0x0000277f jmp LBB0_223 - //0x00002784 LBB0_166 - 0x4c, 0x8b, 0x65, 0xc0, //0x00002784 movq $-64(%rbp), %r12 - 0x4c, 0x01, 0xe0, //0x00002788 addq %r12, %rax - 0x49, 0x83, 0xfe, 0x20, //0x0000278b cmpq $32, %r14 - 0x0f, 0x82, 0x41, 0x07, 0x00, 0x00, //0x0000278f jb LBB0_487 - //0x00002795 LBB0_167 - 0xf3, 0x0f, 0x6f, 0x20, //0x00002795 movdqu (%rax), %xmm4 - 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00002799 movdqu $16(%rax), %xmm3 - 0x66, 0x0f, 0x6f, 0xec, //0x0000279e movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000027a2 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x000027a6 pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x6f, 0xeb, //0x000027aa movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000027ae pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xfd, //0x000027b2 pmovmskb %xmm5, %edi - 0x66, 0x0f, 0x6f, 0xec, //0x000027b6 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x000027ba pcmpeqb %xmm1, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x000027be pmovmskb %xmm5, %r9d - 0x66, 0x0f, 0x6f, 0xeb, //0x000027c3 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x000027c7 pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x000027cb pmovmskb %xmm5, %edx - 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x000027cf movdqa %xmm12, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x000027d4 pcmpgtb %xmm3, %xmm5 - 0x66, 0x41, 0x0f, 0x64, 0xda, //0x000027d8 pcmpgtb %xmm10, %xmm3 - 0x66, 0x0f, 0xdb, 0xdd, //0x000027dd pand %xmm5, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x000027e1 pmovmskb %xmm3, %esi - 0x48, 0xc1, 0xe7, 0x10, //0x000027e5 shlq $16, %rdi - 0x48, 0x09, 0xf9, //0x000027e9 orq %rdi, %rcx - 0x48, 0xc1, 0xe2, 0x10, //0x000027ec shlq $16, %rdx - 0x48, 0xc1, 0xe6, 0x10, //0x000027f0 shlq $16, %rsi - 0x49, 0x09, 0xd1, //0x000027f4 orq %rdx, %r9 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000027f7 movabsq $4294977024, %r11 - 0x0f, 0x85, 0x0c, 0x0b, 0x00, 0x00, //0x00002801 jne LBB0_533 - 0x48, 0x85, 0xdb, //0x00002807 testq %rbx, %rbx - 0x4c, 0x8b, 0x6d, 0xb8, //0x0000280a movq $-72(%rbp), %r13 - 0x0f, 0x85, 0xda, 0x0b, 0x00, 0x00, //0x0000280e jne LBB0_542 - 0x31, 0xdb, //0x00002814 xorl %ebx, %ebx - //0x00002816 LBB0_170 - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002816 movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x0000281b pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x0000281f pcmpgtb %xmm10, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x00002824 pand %xmm3, %xmm4 - 0x66, 0x0f, 0xd7, 0xd4, //0x00002828 pmovmskb %xmm4, %edx - 0x48, 0x09, 0xd6, //0x0000282c orq %rdx, %rsi - 0xba, 0x40, 0x00, 0x00, 0x00, //0x0000282f movl $64, %edx - 0xbf, 0x40, 0x00, 0x00, 0x00, //0x00002834 movl $64, %edi - 0x48, 0x85, 0xc9, //0x00002839 testq %rcx, %rcx - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x0000283c je LBB0_172 - 0x48, 0x0f, 0xbc, 0xf9, //0x00002842 bsfq %rcx, %rdi - //0x00002846 LBB0_172 - 0x48, 0x85, 0xf6, //0x00002846 testq %rsi, %rsi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002849 je LBB0_174 - 0x48, 0x0f, 0xbc, 0xd6, //0x0000284f bsfq %rsi, %rdx - //0x00002853 LBB0_174 - 0x48, 0x85, 0xc9, //0x00002853 testq %rcx, %rcx - 0x0f, 0x84, 0xd2, 0x01, 0x00, 0x00, //0x00002856 je LBB0_438 - 0x48, 0x39, 0xfa, //0x0000285c cmpq %rdi, %rdx - 0x0f, 0x82, 0x06, 0x14, 0x00, 0x00, //0x0000285f jb LBB0_649 - 0x4c, 0x29, 0xe0, //0x00002865 subq %r12, %rax - 0x48, 0x01, 0xf8, //0x00002868 addq %rdi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x0000286b addq $1, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x0000286f movq $-48(%rbp), %r14 - 0xe9, 0x0e, 0xea, 0xff, 0xff, //0x00002873 jmp LBB0_223 - //0x00002878 LBB0_434 - 0x49, 0x8d, 0x4a, 0xff, //0x00002878 leaq $-1(%r10), %rcx - 0x49, 0x39, 0xce, //0x0000287c cmpq %rcx, %r14 - 0x49, 0xf7, 0xd2, //0x0000287f notq %r10 - 0x4d, 0x0f, 0x45, 0xd3, //0x00002882 cmovneq %r11, %r10 - 0x84, 0xd2, //0x00002886 testb %dl, %dl - 0x4d, 0x0f, 0x44, 0xd3, //0x00002888 cmoveq %r11, %r10 - 0x4c, 0x89, 0xd3, //0x0000288c movq %r10, %rbx - 0xe9, 0x8b, 0x03, 0x00, 0x00, //0x0000288f jmp LBB0_468 - //0x00002894 LBB0_435 - 0x89, 0xd1, //0x00002894 movl %edx, %ecx - 0xe9, 0x84, 0x01, 0x00, 0x00, //0x00002896 jmp LBB0_437 - //0x0000289b LBB0_73 - 0x4c, 0x01, 0xe0, //0x0000289b addq %r12, %rax - 0x49, 0x83, 0xf9, 0x20, //0x0000289e cmpq $32, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x000028a2 movq $-48(%rbp), %r14 - 0x0f, 0x82, 0xc3, 0x06, 0x00, 0x00, //0x000028a6 jb LBB0_493 - //0x000028ac LBB0_74 - 0xf3, 0x0f, 0x6f, 0x18, //0x000028ac movdqu (%rax), %xmm3 - 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x000028b0 movdqu $16(%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x000028b5 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000028b9 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x000028bd pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x000028c1 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x000028c5 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x000028c9 pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x74, 0xd9, //0x000028cd pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x000028d1 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x74, 0xe1, //0x000028d5 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xfc, //0x000028d9 pmovmskb %xmm4, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x000028dd shlq $16, %rcx - 0x48, 0x09, 0xca, //0x000028e1 orq %rcx, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x000028e4 shlq $16, %rdi - 0x48, 0x09, 0xfe, //0x000028e8 orq %rdi, %rsi - 0x0f, 0x85, 0x55, 0x0b, 0x00, 0x00, //0x000028eb jne LBB0_544 - 0x4d, 0x85, 0xc0, //0x000028f1 testq %r8, %r8 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000028f4 movabsq $4294977024, %r11 - 0x0f, 0x85, 0x6c, 0x0b, 0x00, 0x00, //0x000028fe jne LBB0_546 - 0x45, 0x31, 0xc0, //0x00002904 xorl %r8d, %r8d - 0x48, 0x85, 0xd2, //0x00002907 testq %rdx, %rdx - 0x0f, 0x84, 0xbc, 0x0b, 0x00, 0x00, //0x0000290a je LBB0_548 - //0x00002910 LBB0_77 - 0x48, 0x0f, 0xbc, 0xca, //0x00002910 bsfq %rdx, %rcx - 0x4c, 0x29, 0xe0, //0x00002914 subq %r12, %rax - 0x48, 0x01, 0xc8, //0x00002917 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x0000291a addq $1, %rax - 0xe9, 0xe0, 0xee, 0xff, 0xff, //0x0000291e jmp LBB0_304 - //0x00002923 LBB0_195 - 0x4c, 0x8b, 0x45, 0xc0, //0x00002923 movq $-64(%rbp), %r8 - 0x4c, 0x01, 0xc0, //0x00002927 addq %r8, %rax - 0x49, 0x83, 0xf9, 0x20, //0x0000292a cmpq $32, %r9 - 0x0f, 0x82, 0x67, 0x06, 0x00, 0x00, //0x0000292e jb LBB0_495 - //0x00002934 LBB0_196 - 0xf3, 0x0f, 0x6f, 0x20, //0x00002934 movdqu (%rax), %xmm4 - 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00002938 movdqu $16(%rax), %xmm3 - 0x66, 0x0f, 0x6f, 0xec, //0x0000293d movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002941 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00002945 pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x6f, 0xeb, //0x00002949 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x0000294d pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00002951 pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x00002955 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00002959 pcmpeqb %xmm1, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xd5, //0x0000295d pmovmskb %xmm5, %r10d - 0x66, 0x0f, 0x6f, 0xeb, //0x00002962 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00002966 pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x0000296a pmovmskb %xmm5, %ecx - 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x0000296e movdqa %xmm12, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x00002973 pcmpgtb %xmm3, %xmm5 - 0x66, 0x41, 0x0f, 0x64, 0xda, //0x00002977 pcmpgtb %xmm10, %xmm3 - 0x66, 0x0f, 0xdb, 0xdd, //0x0000297c pand %xmm5, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00002980 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe2, 0x10, //0x00002984 shlq $16, %rdx - 0x48, 0x09, 0xd6, //0x00002988 orq %rdx, %rsi - 0x48, 0xc1, 0xe1, 0x10, //0x0000298b shlq $16, %rcx - 0x48, 0xc1, 0xe7, 0x10, //0x0000298f shlq $16, %rdi - 0x49, 0x09, 0xca, //0x00002993 orq %rcx, %r10 - 0x0f, 0x85, 0x26, 0x0c, 0x00, 0x00, //0x00002996 jne LBB0_562 - 0x4d, 0x85, 0xe4, //0x0000299c testq %r12, %r12 - 0x4c, 0x8b, 0x6d, 0xb8, //0x0000299f movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000029a3 movabsq $4294977024, %r11 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x8a, 0xd6, 0xff, 0xff, //0x000029ad movdqu $-10614(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x0f, 0x85, 0x2c, 0x0c, 0x00, 0x00, //0x000029b6 jne LBB0_564 - 0x45, 0x31, 0xe4, //0x000029bc xorl %r12d, %r12d - //0x000029bf LBB0_199 - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x000029bf movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x000029c4 pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x000029c8 pcmpgtb %xmm10, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x000029cd pand %xmm3, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x000029d1 pmovmskb %xmm4, %ecx - 0x48, 0x09, 0xcf, //0x000029d5 orq %rcx, %rdi - 0xb9, 0x40, 0x00, 0x00, 0x00, //0x000029d8 movl $64, %ecx - 0xba, 0x40, 0x00, 0x00, 0x00, //0x000029dd movl $64, %edx - 0x48, 0x85, 0xf6, //0x000029e2 testq %rsi, %rsi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x000029e5 je LBB0_201 - 0x48, 0x0f, 0xbc, 0xd6, //0x000029eb bsfq %rsi, %rdx - //0x000029ef LBB0_201 - 0x48, 0x85, 0xff, //0x000029ef testq %rdi, %rdi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x000029f2 je LBB0_203 - 0x48, 0x0f, 0xbc, 0xcf, //0x000029f8 bsfq %rdi, %rcx - //0x000029fc LBB0_203 - 0x48, 0x85, 0xf6, //0x000029fc testq %rsi, %rsi - 0x0f, 0x84, 0xf6, 0x00, 0x00, 0x00, //0x000029ff je LBB0_450 - 0x48, 0x39, 0xd1, //0x00002a05 cmpq %rdx, %rcx - 0x0f, 0x82, 0x6c, 0x12, 0x00, 0x00, //0x00002a08 jb LBB0_650 - 0x4c, 0x29, 0xc0, //0x00002a0e subq %r8, %rax - 0x48, 0x01, 0xd0, //0x00002a11 addq %rdx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002a14 addq $1, %rax - 0xe9, 0xe6, 0xed, 0xff, 0xff, //0x00002a18 jmp LBB0_304 - //0x00002a1d LBB0_436 - 0x89, 0xd9, //0x00002a1d movl %ebx, %ecx - //0x00002a1f LBB0_437 - 0x49, 0xf7, 0xd5, //0x00002a1f notq %r13 - 0x49, 0x29, 0xcd, //0x00002a22 subq %rcx, %r13 - 0x48, 0x8b, 0x75, 0xc0, //0x00002a25 movq $-64(%rbp), %rsi - 0xe9, 0xb4, 0xd7, 0xff, 0xff, //0x00002a29 jmp LBB0_2 - //0x00002a2e LBB0_438 - 0x48, 0x85, 0xf6, //0x00002a2e testq %rsi, %rsi - 0x0f, 0x85, 0x34, 0x12, 0x00, 0x00, //0x00002a31 jne LBB0_649 - 0x48, 0x83, 0xc0, 0x20, //0x00002a37 addq $32, %rax - 0x49, 0x83, 0xc6, 0xe0, //0x00002a3b addq $-32, %r14 - 0x48, 0x85, 0xdb, //0x00002a3f testq %rbx, %rbx - 0x0f, 0x85, 0xa5, 0x04, 0x00, 0x00, //0x00002a42 jne LBB0_488 - //0x00002a48 LBB0_440 - 0x48, 0x8b, 0x4d, 0xc8, //0x00002a48 movq $-56(%rbp), %rcx - 0x4d, 0x85, 0xf6, //0x00002a4c testq %r14, %r14 - 0x0f, 0x84, 0xda, 0x11, 0x00, 0x00, //0x00002a4f je LBB0_490 - //0x00002a55 LBB0_441 - 0x0f, 0xb6, 0x10, //0x00002a55 movzbl (%rax), %edx - 0x80, 0xfa, 0x22, //0x00002a58 cmpb $34, %dl - 0x0f, 0x84, 0x8a, 0x00, 0x00, 0x00, //0x00002a5b je LBB0_449 - 0x80, 0xfa, 0x5c, //0x00002a61 cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002a64 je LBB0_445 - 0x80, 0xfa, 0x1f, //0x00002a6a cmpb $31, %dl - 0x0f, 0x86, 0x12, 0x12, 0x00, 0x00, //0x00002a6d jbe LBB0_651 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002a73 movq $-1, %rdx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002a7a movl $1, %esi - 0x48, 0x01, 0xf0, //0x00002a7f addq %rsi, %rax - 0x49, 0x01, 0xd6, //0x00002a82 addq %rdx, %r14 - 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002a85 jne LBB0_441 - 0xe9, 0x9f, 0x11, 0x00, 0x00, //0x00002a8b jmp LBB0_490 - //0x00002a90 LBB0_445 - 0x49, 0x83, 0xfe, 0x01, //0x00002a90 cmpq $1, %r14 - 0x0f, 0x84, 0x95, 0x11, 0x00, 0x00, //0x00002a94 je LBB0_490 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002a9a movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00002a9f movdqa %xmm2, %xmm5 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00002aa3 movq $-2, %rdx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002aaa movl $2, %esi - 0x48, 0x83, 0xf9, 0xff, //0x00002aaf cmpq $-1, %rcx - 0x0f, 0x85, 0x0a, 0x00, 0x00, 0x00, //0x00002ab3 jne LBB0_448 - 0x48, 0x89, 0xc1, //0x00002ab9 movq %rax, %rcx - 0x4c, 0x29, 0xe1, //0x00002abc subq %r12, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00002abf movq %rcx, $-56(%rbp) - //0x00002ac3 LBB0_448 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002ac3 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002ac7 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x00002ad1 movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00002ad5 movdqa %xmm6, %xmm13 - 0x48, 0x01, 0xf0, //0x00002ada addq %rsi, %rax - 0x49, 0x01, 0xd6, //0x00002add addq %rdx, %r14 - 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x00002ae0 jne LBB0_441 - 0xe9, 0x44, 0x11, 0x00, 0x00, //0x00002ae6 jmp LBB0_490 - //0x00002aeb LBB0_449 - 0x4c, 0x29, 0xe0, //0x00002aeb subq %r12, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002aee addq $1, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x00002af2 movq $-48(%rbp), %r14 - 0xe9, 0x8b, 0xe7, 0xff, 0xff, //0x00002af6 jmp LBB0_223 - //0x00002afb LBB0_450 - 0x48, 0x85, 0xff, //0x00002afb testq %rdi, %rdi - 0x0f, 0x85, 0x76, 0x11, 0x00, 0x00, //0x00002afe jne LBB0_650 - 0x48, 0x83, 0xc0, 0x20, //0x00002b04 addq $32, %rax - 0x49, 0x83, 0xc1, 0xe0, //0x00002b08 addq $-32, %r9 - 0x4d, 0x85, 0xe4, //0x00002b0c testq %r12, %r12 - 0x0f, 0x85, 0xa6, 0x04, 0x00, 0x00, //0x00002b0f jne LBB0_496 - //0x00002b15 LBB0_452 - 0x48, 0x8b, 0x4d, 0xc8, //0x00002b15 movq $-56(%rbp), %rcx - 0x4d, 0x85, 0xc9, //0x00002b19 testq %r9, %r9 - 0x0f, 0x84, 0x51, 0x0f, 0x00, 0x00, //0x00002b1c je LBB0_616 - //0x00002b22 LBB0_453 - 0x0f, 0xb6, 0x10, //0x00002b22 movzbl (%rax), %edx - 0x80, 0xfa, 0x22, //0x00002b25 cmpb $34, %dl - 0x0f, 0x84, 0xcc, 0x00, 0x00, 0x00, //0x00002b28 je LBB0_464 - 0x80, 0xfa, 0x5c, //0x00002b2e cmpb $92, %dl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002b31 je LBB0_458 - 0x80, 0xfa, 0x1f, //0x00002b37 cmpb $31, %dl - 0x0f, 0x86, 0x51, 0x11, 0x00, 0x00, //0x00002b3a jbe LBB0_652 - 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002b40 movq $-1, %rdx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002b47 movl $1, %esi - //0x00002b4c LBB0_457 - 0x48, 0x01, 0xf0, //0x00002b4c addq %rsi, %rax - 0x49, 0x01, 0xd1, //0x00002b4f addq %rdx, %r9 - 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002b52 jne LBB0_453 - 0xe9, 0x16, 0x0f, 0x00, 0x00, //0x00002b58 jmp LBB0_616 - //0x00002b5d LBB0_458 - 0x49, 0x83, 0xf9, 0x01, //0x00002b5d cmpq $1, %r9 - 0x0f, 0x84, 0xe7, 0x10, 0x00, 0x00, //0x00002b61 je LBB0_507 - 0x66, 0x0f, 0x6f, 0xea, //0x00002b67 movdqa %xmm2, %xmm5 - 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00002b6b movq $-2, %rdx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002b72 movl $2, %esi - 0x48, 0x83, 0xf9, 0xff, //0x00002b77 cmpq $-1, %rcx - 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x00002b7b je LBB0_461 - 0x4c, 0x8b, 0x75, 0xd0, //0x00002b81 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002b85 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002b89 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x00002b93 movdqa %xmm5, %xmm2 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xa0, 0xd4, 0xff, 0xff, //0x00002b97 movdqu $-11104(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x4c, 0x8b, 0x45, 0xc0, //0x00002ba0 movq $-64(%rbp), %r8 - 0xe9, 0xa3, 0xff, 0xff, 0xff, //0x00002ba4 jmp LBB0_457 - //0x00002ba9 LBB0_461 - 0x48, 0x89, 0xc1, //0x00002ba9 movq %rax, %rcx - 0x4c, 0x8b, 0x45, 0xc0, //0x00002bac movq $-64(%rbp), %r8 - 0x4c, 0x29, 0xc1, //0x00002bb0 subq %r8, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00002bb3 movq %rcx, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x00002bb7 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002bbb movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002bbf movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x00002bc9 movdqa %xmm5, %xmm2 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x6a, 0xd4, 0xff, 0xff, //0x00002bcd movdqu $-11158(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0xe9, 0x71, 0xff, 0xff, 0xff, //0x00002bd6 jmp LBB0_457 - //0x00002bdb LBB0_462 - 0x4c, 0x29, 0xe1, //0x00002bdb subq %r12, %rcx - 0x48, 0x01, 0xf1, //0x00002bde addq %rsi, %rcx - 0x49, 0x89, 0x0e, //0x00002be1 movq %rcx, (%r14) - 0x48, 0x85, 0xc0, //0x00002be4 testq %rax, %rax - 0x0f, 0x8f, 0xd3, 0xd5, 0xff, 0xff, //0x00002be7 jg LBB0_4 - 0xe9, 0x06, 0x0e, 0x00, 0x00, //0x00002bed jmp LBB0_606 - //0x00002bf2 LBB0_463 - 0x0f, 0xbc, 0xce, //0x00002bf2 bsfl %esi, %ecx - 0xe9, 0x1f, 0x00, 0x00, 0x00, //0x00002bf5 jmp LBB0_467 - //0x00002bfa LBB0_464 - 0x4c, 0x29, 0xc0, //0x00002bfa subq %r8, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002bfd addq $1, %rax - 0xe9, 0xfd, 0xeb, 0xff, 0xff, //0x00002c01 jmp LBB0_304 - //0x00002c06 LBB0_465 - 0x49, 0x01, 0xc4, //0x00002c06 addq %rax, %r12 - 0x49, 0x29, 0xd4, //0x00002c09 subq %rdx, %r12 - 0x48, 0xf7, 0xd3, //0x00002c0c notq %rbx - 0x4c, 0x01, 0xe3, //0x00002c0f addq %r12, %rbx - 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00002c12 jmp LBB0_468 - //0x00002c17 LBB0_466 - 0x89, 0xd1, //0x00002c17 movl %edx, %ecx - //0x00002c19 LBB0_467 - 0x48, 0xf7, 0xd3, //0x00002c19 notq %rbx - 0x48, 0x29, 0xcb, //0x00002c1c subq %rcx, %rbx - //0x00002c1f LBB0_468 - 0x48, 0x85, 0xdb, //0x00002c1f testq %rbx, %rbx - 0x0f, 0x88, 0xae, 0x0f, 0x00, 0x00, //0x00002c22 js LBB0_636 - //0x00002c28 LBB0_469 - 0x48, 0x01, 0xc3, //0x00002c28 addq %rax, %rbx - 0x4c, 0x8b, 0x75, 0xd0, //0x00002c2b movq $-48(%rbp), %r14 - 0x49, 0x89, 0x1e, //0x00002c2f movq %rbx, (%r14) - 0x48, 0x85, 0xc0, //0x00002c32 testq %rax, %rax - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002c35 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002c39 movabsq $4294977024, %r11 - 0x0f, 0x8f, 0x77, 0xd5, 0xff, 0xff, //0x00002c43 jg LBB0_4 - 0xe9, 0xaa, 0x0d, 0x00, 0x00, //0x00002c49 jmp LBB0_606 - //0x00002c4e LBB0_241 - 0x4c, 0x01, 0xe0, //0x00002c4e addq %r12, %rax - 0x49, 0x83, 0xf9, 0x20, //0x00002c51 cmpq $32, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x00002c55 movq $-48(%rbp), %r14 - 0x0f, 0x82, 0x19, 0x04, 0x00, 0x00, //0x00002c59 jb LBB0_502 - //0x00002c5f LBB0_242 - 0xf3, 0x0f, 0x6f, 0x18, //0x00002c5f movdqu (%rax), %xmm3 - 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00002c63 movdqu $16(%rax), %xmm4 - 0x66, 0x0f, 0x6f, 0xeb, //0x00002c68 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002c6c pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00002c70 pmovmskb %xmm5, %edx - 0x66, 0x0f, 0x6f, 0xec, //0x00002c74 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002c78 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x00002c7c pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x74, 0xd9, //0x00002c80 pcmpeqb %xmm1, %xmm3 - 0x66, 0x0f, 0xd7, 0xf3, //0x00002c84 pmovmskb %xmm3, %esi - 0x66, 0x0f, 0x74, 0xe1, //0x00002c88 pcmpeqb %xmm1, %xmm4 - 0x66, 0x0f, 0xd7, 0xfc, //0x00002c8c pmovmskb %xmm4, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x00002c90 shlq $16, %rcx - 0x48, 0x09, 0xca, //0x00002c94 orq %rcx, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x00002c97 shlq $16, %rdi - 0x48, 0x09, 0xfe, //0x00002c9b orq %rdi, %rsi - 0x0f, 0x85, 0x06, 0x0b, 0x00, 0x00, //0x00002c9e jne LBB0_578 - 0x4d, 0x85, 0xc0, //0x00002ca4 testq %r8, %r8 - 0x0f, 0x85, 0x27, 0x0b, 0x00, 0x00, //0x00002ca7 jne LBB0_580 - 0x45, 0x31, 0xc0, //0x00002cad xorl %r8d, %r8d - 0x48, 0x85, 0xd2, //0x00002cb0 testq %rdx, %rdx - 0x0f, 0x84, 0x77, 0x0b, 0x00, 0x00, //0x00002cb3 je LBB0_582 - //0x00002cb9 LBB0_245 - 0x48, 0x0f, 0xbc, 0xca, //0x00002cb9 bsfq %rdx, %rcx - 0x4c, 0x29, 0xe0, //0x00002cbd subq %r12, %rax - 0x48, 0x01, 0xc8, //0x00002cc0 addq %rcx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002cc3 addq $1, %rax - 0xe9, 0x71, 0xf9, 0xff, 0xff, //0x00002cc7 jmp LBB0_426 - //0x00002ccc LBB0_394 - 0x4c, 0x01, 0xe0, //0x00002ccc addq %r12, %rax - 0x49, 0x89, 0xf2, //0x00002ccf movq %rsi, %r10 - 0x48, 0x83, 0xfe, 0x20, //0x00002cd2 cmpq $32, %rsi - 0x0f, 0x82, 0xc5, 0x03, 0x00, 0x00, //0x00002cd6 jb LBB0_504 - //0x00002cdc LBB0_395 - 0xf3, 0x0f, 0x6f, 0x20, //0x00002cdc movdqu (%rax), %xmm4 - 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00002ce0 movdqu $16(%rax), %xmm3 - 0x66, 0x0f, 0x6f, 0xec, //0x00002ce5 movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002ce9 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xf5, //0x00002ced pmovmskb %xmm5, %esi - 0x66, 0x0f, 0x6f, 0xeb, //0x00002cf1 movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe8, //0x00002cf5 pcmpeqb %xmm0, %xmm5 - 0x66, 0x0f, 0xd7, 0xcd, //0x00002cf9 pmovmskb %xmm5, %ecx - 0x66, 0x0f, 0x6f, 0xec, //0x00002cfd movdqa %xmm4, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00002d01 pcmpeqb %xmm1, %xmm5 - 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x00002d05 pmovmskb %xmm5, %r9d - 0x66, 0x0f, 0x6f, 0xeb, //0x00002d0a movdqa %xmm3, %xmm5 - 0x66, 0x0f, 0x74, 0xe9, //0x00002d0e pcmpeqb %xmm1, %xmm5 - 0x66, 0x0f, 0xd7, 0xd5, //0x00002d12 pmovmskb %xmm5, %edx - 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x00002d16 movdqa %xmm12, %xmm5 - 0x66, 0x0f, 0x64, 0xeb, //0x00002d1b pcmpgtb %xmm3, %xmm5 - 0x66, 0x41, 0x0f, 0x64, 0xda, //0x00002d1f pcmpgtb %xmm10, %xmm3 - 0x66, 0x0f, 0xdb, 0xdd, //0x00002d24 pand %xmm5, %xmm3 - 0x66, 0x0f, 0xd7, 0xfb, //0x00002d28 pmovmskb %xmm3, %edi - 0x48, 0xc1, 0xe1, 0x10, //0x00002d2c shlq $16, %rcx - 0x48, 0x09, 0xce, //0x00002d30 orq %rcx, %rsi - 0x48, 0xc1, 0xe2, 0x10, //0x00002d33 shlq $16, %rdx - 0x48, 0xc1, 0xe7, 0x10, //0x00002d37 shlq $16, %rdi - 0x49, 0x09, 0xd1, //0x00002d3b orq %rdx, %r9 - 0x0f, 0x85, 0xd0, 0x0b, 0x00, 0x00, //0x00002d3e jne LBB0_597 - 0x48, 0x85, 0xdb, //0x00002d44 testq %rbx, %rbx - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002d47 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002d4b movabsq $4294977024, %r11 - 0x0f, 0x85, 0xe6, 0x0b, 0x00, 0x00, //0x00002d55 jne LBB0_599 - 0x31, 0xdb, //0x00002d5b xorl %ebx, %ebx - //0x00002d5d LBB0_398 - 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002d5d movdqa %xmm12, %xmm3 - 0x66, 0x0f, 0x64, 0xdc, //0x00002d62 pcmpgtb %xmm4, %xmm3 - 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00002d66 pcmpgtb %xmm10, %xmm4 - 0x66, 0x0f, 0xdb, 0xe3, //0x00002d6b pand %xmm3, %xmm4 - 0x66, 0x0f, 0xd7, 0xcc, //0x00002d6f pmovmskb %xmm4, %ecx - 0x48, 0x09, 0xcf, //0x00002d73 orq %rcx, %rdi - 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00002d76 movl $64, %ecx - 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002d7b movl $64, %edx - 0x48, 0x85, 0xf6, //0x00002d80 testq %rsi, %rsi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002d83 je LBB0_400 - 0x48, 0x0f, 0xbc, 0xd6, //0x00002d89 bsfq %rsi, %rdx - //0x00002d8d LBB0_400 - 0x48, 0x85, 0xff, //0x00002d8d testq %rdi, %rdi - 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002d90 je LBB0_402 - 0x48, 0x0f, 0xbc, 0xcf, //0x00002d96 bsfq %rdi, %rcx - //0x00002d9a LBB0_402 - 0x48, 0x85, 0xf6, //0x00002d9a testq %rsi, %rsi - 0x0f, 0x84, 0x53, 0x00, 0x00, 0x00, //0x00002d9d je LBB0_473 - 0x4c, 0x29, 0xe0, //0x00002da3 subq %r12, %rax - 0x48, 0x39, 0xd1, //0x00002da6 cmpq %rdx, %rcx - 0x0f, 0x82, 0xf7, 0x0e, 0x00, 0x00, //0x00002da9 jb LBB0_654 - 0x48, 0x01, 0xd0, //0x00002daf addq %rdx, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002db2 addq $1, %rax - 0xe9, 0x82, 0xf8, 0xff, 0xff, //0x00002db6 jmp LBB0_426 - //0x00002dbb LBB0_470 - 0x49, 0x8d, 0x04, 0x34, //0x00002dbb leaq (%r12,%rsi), %rax - 0x48, 0x85, 0xc9, //0x00002dbf testq %rcx, %rcx - 0x0f, 0x85, 0x4f, 0xde, 0xff, 0xff, //0x00002dc2 jne LBB0_140 - //0x00002dc8 LBB0_471 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002dc8 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00002dcd movdqa %xmm2, %xmm5 - 0xe9, 0x7f, 0xde, 0xff, 0xff, //0x00002dd1 jmp LBB0_146 - //0x00002dd6 LBB0_472 - 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002dd6 movq $-1, %r8 - 0x4c, 0x89, 0xf1, //0x00002ddd movq %r14, %rcx - 0x49, 0x89, 0xfa, //0x00002de0 movq %rdi, %r10 - 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002de3 movq $-1, %r15 - 0x49, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002dea movq $-1, %r9 - 0xe9, 0x19, 0xda, 0xff, 0xff, //0x00002df1 jmp LBB0_105 - //0x00002df6 LBB0_473 - 0x48, 0x85, 0xff, //0x00002df6 testq %rdi, %rdi - 0x0f, 0x85, 0xbc, 0x0e, 0x00, 0x00, //0x00002df9 jne LBB0_655 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002dff movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00002e04 movdqa %xmm2, %xmm5 - 0x48, 0x83, 0xc0, 0x20, //0x00002e08 addq $32, %rax - 0x49, 0x83, 0xc2, 0xe0, //0x00002e0c addq $-32, %r10 - 0x48, 0x85, 0xdb, //0x00002e10 testq %rbx, %rbx - 0x0f, 0x85, 0x9a, 0x02, 0x00, 0x00, //0x00002e13 jne LBB0_505 - //0x00002e19 LBB0_475 - 0x48, 0x8b, 0x55, 0xc8, //0x00002e19 movq $-56(%rbp), %rdx - 0x4d, 0x85, 0xd2, //0x00002e1d testq %r10, %r10 - 0x0f, 0x84, 0x28, 0x0e, 0x00, 0x00, //0x00002e20 je LBB0_507 - //0x00002e26 LBB0_476 - 0x0f, 0xb6, 0x08, //0x00002e26 movzbl (%rax), %ecx - 0x80, 0xf9, 0x22, //0x00002e29 cmpb $34, %cl - 0x0f, 0x84, 0x11, 0x01, 0x00, 0x00, //0x00002e2c je LBB0_491 - 0x80, 0xf9, 0x5c, //0x00002e32 cmpb $92, %cl - 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002e35 je LBB0_481 - 0x80, 0xf9, 0x1f, //0x00002e3b cmpb $31, %cl - 0x0f, 0x86, 0x82, 0x0e, 0x00, 0x00, //0x00002e3e jbe LBB0_656 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002e44 movq $-1, %rcx - 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002e4b movl $1, %esi - //0x00002e50 LBB0_480 - 0x48, 0x01, 0xf0, //0x00002e50 addq %rsi, %rax - 0x49, 0x01, 0xca, //0x00002e53 addq %rcx, %r10 - 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002e56 jne LBB0_476 - 0xe9, 0xed, 0x0d, 0x00, 0x00, //0x00002e5c jmp LBB0_507 - //0x00002e61 LBB0_481 - 0x49, 0x83, 0xfa, 0x01, //0x00002e61 cmpq $1, %r10 - 0x0f, 0x84, 0xe3, 0x0d, 0x00, 0x00, //0x00002e65 je LBB0_507 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002e6b movq $-2, %rcx - 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002e72 movl $2, %esi - 0x48, 0x83, 0xfa, 0xff, //0x00002e77 cmpq $-1, %rdx - 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00002e7b jne LBB0_480 - 0x48, 0x89, 0xc2, //0x00002e81 movq %rax, %rdx - 0x4c, 0x29, 0xe2, //0x00002e84 subq %r12, %rdx - 0x48, 0x89, 0x55, 0xc8, //0x00002e87 movq %rdx, $-56(%rbp) - 0xe9, 0xc0, 0xff, 0xff, 0xff, //0x00002e8b jmp LBB0_480 - //0x00002e90 LBB0_484 - 0x48, 0x8b, 0x45, 0xb0, //0x00002e90 movq $-80(%rbp), %rax - 0x4c, 0x01, 0xe0, //0x00002e94 addq %r12, %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002e97 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00002e9f xorl %r8d, %r8d - 0x49, 0x83, 0xf9, 0x20, //0x00002ea2 cmpq $32, %r9 - 0x0f, 0x83, 0x61, 0xf8, 0xff, 0xff, //0x00002ea6 jae LBB0_51 - //0x00002eac LBB0_485 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002eac movabsq $4294977024, %r11 - 0xe9, 0x6a, 0x03, 0x00, 0x00, //0x00002eb6 jmp LBB0_520 - //0x00002ebb LBB0_486 - 0x48, 0x8b, 0x45, 0xb0, //0x00002ebb movq $-80(%rbp), %rax - 0x4c, 0x01, 0xe0, //0x00002ebf addq %r12, %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002ec2 movq $-1, $-56(%rbp) - 0x31, 0xdb, //0x00002eca xorl %ebx, %ebx - 0x49, 0x83, 0xfe, 0x20, //0x00002ecc cmpq $32, %r14 - 0x0f, 0x83, 0xbf, 0xf8, 0xff, 0xff, //0x00002ed0 jae LBB0_167 - //0x00002ed6 LBB0_487 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002ed6 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002eda movabsq $4294977024, %r11 - 0x48, 0x85, 0xdb, //0x00002ee4 testq %rbx, %rbx - 0x0f, 0x84, 0x5b, 0xfb, 0xff, 0xff, //0x00002ee7 je LBB0_440 - //0x00002eed LBB0_488 - 0x4d, 0x85, 0xf6, //0x00002eed testq %r14, %r14 - 0x0f, 0x84, 0x39, 0x0d, 0x00, 0x00, //0x00002ef0 je LBB0_490 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002ef6 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00002efb movdqa %xmm2, %xmm5 - 0x4c, 0x89, 0xe1, //0x00002eff movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x00002f02 notq %rcx - 0x48, 0x01, 0xc1, //0x00002f05 addq %rax, %rcx - 0x48, 0x8b, 0x75, 0xc8, //0x00002f08 movq $-56(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x00002f0c cmpq $-1, %rsi - 0x48, 0x89, 0xf2, //0x00002f10 movq %rsi, %rdx - 0x48, 0x0f, 0x44, 0xd1, //0x00002f13 cmoveq %rcx, %rdx - 0x48, 0x0f, 0x45, 0xce, //0x00002f17 cmovneq %rsi, %rcx - 0x48, 0x83, 0xc0, 0x01, //0x00002f1b addq $1, %rax - 0x49, 0x83, 0xc6, 0xff, //0x00002f1f addq $-1, %r14 - 0x48, 0x89, 0x55, 0xc8, //0x00002f23 movq %rdx, $-56(%rbp) - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002f27 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f2b movabsq $4294977024, %r11 - 0x4d, 0x85, 0xf6, //0x00002f35 testq %r14, %r14 - 0x0f, 0x85, 0x17, 0xfb, 0xff, 0xff, //0x00002f38 jne LBB0_441 - 0xe9, 0xec, 0x0c, 0x00, 0x00, //0x00002f3e jmp LBB0_490 - //0x00002f43 LBB0_491 - 0x4c, 0x29, 0xe0, //0x00002f43 subq %r12, %rax - 0x48, 0x83, 0xc0, 0x01, //0x00002f46 addq $1, %rax - 0xe9, 0x94, 0x09, 0x00, 0x00, //0x00002f4a jmp LBB0_596 - //0x00002f4f LBB0_492 - 0x48, 0x8b, 0x45, 0xb0, //0x00002f4f movq $-80(%rbp), %rax - 0x4c, 0x01, 0xe0, //0x00002f53 addq %r12, %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002f56 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00002f5e xorl %r8d, %r8d - 0x49, 0x83, 0xf9, 0x20, //0x00002f61 cmpq $32, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x00002f65 movq $-48(%rbp), %r14 - 0x0f, 0x83, 0x3d, 0xf9, 0xff, 0xff, //0x00002f69 jae LBB0_74 - //0x00002f6f LBB0_493 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f6f movabsq $4294977024, %r11 - 0xe9, 0x56, 0x05, 0x00, 0x00, //0x00002f79 jmp LBB0_549 - //0x00002f7e LBB0_494 - 0x4c, 0x8b, 0x45, 0xc0, //0x00002f7e movq $-64(%rbp), %r8 - 0x49, 0x8d, 0x04, 0x08, //0x00002f82 leaq (%r8,%rcx), %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002f86 movq $-1, $-56(%rbp) - 0x45, 0x31, 0xe4, //0x00002f8e xorl %r12d, %r12d - 0x49, 0x83, 0xf9, 0x20, //0x00002f91 cmpq $32, %r9 - 0x0f, 0x83, 0x99, 0xf9, 0xff, 0xff, //0x00002f95 jae LBB0_196 - //0x00002f9b LBB0_495 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002f9b movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f9f movabsq $4294977024, %r11 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x8e, 0xd0, 0xff, 0xff, //0x00002fa9 movdqu $-12146(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x4d, 0x85, 0xe4, //0x00002fb2 testq %r12, %r12 - 0x0f, 0x84, 0x5a, 0xfb, 0xff, 0xff, //0x00002fb5 je LBB0_452 - //0x00002fbb LBB0_496 - 0x4d, 0x85, 0xc9, //0x00002fbb testq %r9, %r9 - 0x0f, 0x84, 0x8a, 0x0c, 0x00, 0x00, //0x00002fbe je LBB0_507 - 0x66, 0x0f, 0x6f, 0xea, //0x00002fc4 movdqa %xmm2, %xmm5 - 0x4c, 0x8b, 0x45, 0xc0, //0x00002fc8 movq $-64(%rbp), %r8 - 0x4c, 0x89, 0xc1, //0x00002fcc movq %r8, %rcx - 0x48, 0xf7, 0xd1, //0x00002fcf notq %rcx - 0x48, 0x01, 0xc1, //0x00002fd2 addq %rax, %rcx - 0x48, 0x8b, 0x75, 0xc8, //0x00002fd5 movq $-56(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x00002fd9 cmpq $-1, %rsi - 0x48, 0x89, 0xf2, //0x00002fdd movq %rsi, %rdx - 0x48, 0x0f, 0x44, 0xd1, //0x00002fe0 cmoveq %rcx, %rdx - 0x48, 0x0f, 0x45, 0xce, //0x00002fe4 cmovneq %rsi, %rcx - 0x48, 0x83, 0xc0, 0x01, //0x00002fe8 addq $1, %rax - 0x49, 0x83, 0xc1, 0xff, //0x00002fec addq $-1, %r9 - 0x48, 0x89, 0x55, 0xc8, //0x00002ff0 movq %rdx, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x00002ff4 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00002ff8 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002ffc movabsq $4294977024, %r11 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x31, 0xd0, 0xff, 0xff, //0x00003006 movdqu $-12239(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x4d, 0x85, 0xc9, //0x0000300f testq %r9, %r9 - 0x0f, 0x85, 0x0a, 0xfb, 0xff, 0xff, //0x00003012 jne LBB0_453 - 0xe9, 0x56, 0x0a, 0x00, 0x00, //0x00003018 jmp LBB0_616 - //0x0000301d LBB0_498 - 0x49, 0x8d, 0x0c, 0x04, //0x0000301d leaq (%r12,%rax), %rcx - 0x48, 0x85, 0xd2, //0x00003021 testq %rdx, %rdx - 0x0f, 0x85, 0x1d, 0xee, 0xff, 0xff, //0x00003024 jne LBB0_349 - //0x0000302a LBB0_499 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000302a movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000302f movdqa %xmm2, %xmm5 - 0xe9, 0x4d, 0xee, 0xff, 0xff, //0x00003033 jmp LBB0_355 - //0x00003038 LBB0_500 - 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003038 movq $-1, %r14 - 0x4c, 0x89, 0xc2, //0x0000303f movq %r8, %rdx - 0x49, 0x89, 0xf9, //0x00003042 movq %rdi, %r9 - 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00003045 movq $-1, %r10 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x0000304c movq $-1, %r13 - 0xe9, 0x2e, 0xe6, 0xff, 0xff, //0x00003053 jmp LBB0_275 - //0x00003058 LBB0_501 - 0x48, 0x8b, 0x45, 0xb0, //0x00003058 movq $-80(%rbp), %rax - 0x4c, 0x01, 0xe0, //0x0000305c addq %r12, %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000305f movq $-1, $-56(%rbp) - 0x45, 0x31, 0xc0, //0x00003067 xorl %r8d, %r8d - 0x49, 0x83, 0xf9, 0x20, //0x0000306a cmpq $32, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x0000306e movq $-48(%rbp), %r14 - 0x0f, 0x83, 0xe7, 0xfb, 0xff, 0xff, //0x00003072 jae LBB0_242 - //0x00003078 LBB0_502 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003078 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000307d movdqa %xmm2, %xmm5 - 0xe9, 0xbb, 0x07, 0x00, 0x00, //0x00003081 jmp LBB0_583 - //0x00003086 LBB0_503 - 0x49, 0x8d, 0x04, 0x0c, //0x00003086 leaq (%r12,%rcx), %rax - 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x0000308a movq $-1, $-56(%rbp) - 0x31, 0xdb, //0x00003092 xorl %ebx, %ebx - 0x49, 0x89, 0xf2, //0x00003094 movq %rsi, %r10 - 0x48, 0x83, 0xfe, 0x20, //0x00003097 cmpq $32, %rsi - 0x0f, 0x83, 0x3b, 0xfc, 0xff, 0xff, //0x0000309b jae LBB0_395 - //0x000030a1 LBB0_504 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000030a1 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000030a6 movdqa %xmm2, %xmm5 - 0x48, 0x85, 0xdb, //0x000030aa testq %rbx, %rbx - 0x0f, 0x84, 0x66, 0xfd, 0xff, 0xff, //0x000030ad je LBB0_475 - //0x000030b3 LBB0_505 - 0x4d, 0x85, 0xd2, //0x000030b3 testq %r10, %r10 - 0x0f, 0x84, 0x92, 0x0b, 0x00, 0x00, //0x000030b6 je LBB0_507 - 0x4c, 0x89, 0xe2, //0x000030bc movq %r12, %rdx - 0x48, 0xf7, 0xd2, //0x000030bf notq %rdx - 0x48, 0x01, 0xc2, //0x000030c2 addq %rax, %rdx - 0x48, 0x8b, 0x75, 0xc8, //0x000030c5 movq $-56(%rbp), %rsi - 0x48, 0x83, 0xfe, 0xff, //0x000030c9 cmpq $-1, %rsi - 0x48, 0x89, 0xf1, //0x000030cd movq %rsi, %rcx - 0x48, 0x0f, 0x44, 0xca, //0x000030d0 cmoveq %rdx, %rcx - 0x48, 0x0f, 0x45, 0xd6, //0x000030d4 cmovneq %rsi, %rdx - 0x48, 0x83, 0xc0, 0x01, //0x000030d8 addq $1, %rax - 0x49, 0x83, 0xc2, 0xff, //0x000030dc addq $-1, %r10 - 0x48, 0x89, 0x4d, 0xc8, //0x000030e0 movq %rcx, $-56(%rbp) - 0x4d, 0x85, 0xd2, //0x000030e4 testq %r10, %r10 - 0x0f, 0x85, 0x39, 0xfd, 0xff, 0xff, //0x000030e7 jne LBB0_476 - 0xe9, 0x5c, 0x0b, 0x00, 0x00, //0x000030ed jmp LBB0_507 - //0x000030f2 LBB0_508 - 0x49, 0x39, 0xd1, //0x000030f2 cmpq %rdx, %r9 - 0x0f, 0x84, 0x4c, 0x09, 0x00, 0x00, //0x000030f5 je LBB0_638 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000030fb movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003100 movdqa %xmm2, %xmm5 - 0x49, 0x01, 0xd2, //0x00003104 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003107 addq $1, %r10 - 0x48, 0xf7, 0xd2, //0x0000310b notq %rdx - 0x49, 0x01, 0xd1, //0x0000310e addq %rdx, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x00003111 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003115 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003119 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x00003123 testq %r9, %r9 - 0x0f, 0x8f, 0x33, 0x00, 0x00, 0x00, //0x00003126 jg LBB0_512 - 0xe9, 0x16, 0x09, 0x00, 0x00, //0x0000312c jmp LBB0_638 - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003131 .p2align 4, 0x90 - //0x00003140 LBB0_510 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00003140 movq $-2, %rcx - 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00003147 movl $2, %eax - 0x49, 0x01, 0xc2, //0x0000314c addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000314f movq $-1, %rax - 0x49, 0x01, 0xc9, //0x00003156 addq %rcx, %r9 - 0x0f, 0x8e, 0xe8, 0x08, 0x00, 0x00, //0x00003159 jle LBB0_638 - //0x0000315f LBB0_512 - 0x41, 0x0f, 0xb6, 0x02, //0x0000315f movzbl (%r10), %eax - 0x3c, 0x5c, //0x00003163 cmpb $92, %al - 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00003165 je LBB0_510 - 0x3c, 0x22, //0x0000316b cmpb $34, %al - 0x0f, 0x84, 0x1f, 0x06, 0x00, 0x00, //0x0000316d je LBB0_577 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003173 movq $-1, %rcx - 0xb8, 0x01, 0x00, 0x00, 0x00, //0x0000317a movl $1, %eax - 0x49, 0x01, 0xc2, //0x0000317f addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003182 movq $-1, %rax - 0x49, 0x01, 0xc9, //0x00003189 addq %rcx, %r9 - 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x0000318c jg LBB0_512 - 0xe9, 0xb0, 0x08, 0x00, 0x00, //0x00003192 jmp LBB0_638 - //0x00003197 LBB0_515 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003197 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000319c movdqa %xmm2, %xmm5 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000031a0 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x000031a5 jne LBB0_518 - 0x48, 0x89, 0xc1, //0x000031ab movq %rax, %rcx - 0x4c, 0x29, 0xe1, //0x000031ae subq %r12, %rcx - 0x48, 0x0f, 0xbc, 0xfe, //0x000031b1 bsfq %rsi, %rdi - 0x48, 0x01, 0xcf, //0x000031b5 addq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xc8, //0x000031b8 movq %rdi, $-56(%rbp) - 0xe9, 0x09, 0x00, 0x00, 0x00, //0x000031bc jmp LBB0_518 - //0x000031c1 LBB0_517 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000031c1 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000031c6 movdqa %xmm2, %xmm5 - //0x000031ca LBB0_518 - 0x44, 0x89, 0xc1, //0x000031ca movl %r8d, %ecx - 0xf7, 0xd1, //0x000031cd notl %ecx - 0x21, 0xf1, //0x000031cf andl %esi, %ecx - 0x41, 0x8d, 0x3c, 0x48, //0x000031d1 leal (%r8,%rcx,2), %edi - 0x8d, 0x1c, 0x09, //0x000031d5 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x000031d8 notl %ebx - 0x21, 0xf3, //0x000031da andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x000031dc andl $-1431655766, %ebx - 0x45, 0x31, 0xc0, //0x000031e2 xorl %r8d, %r8d - 0x01, 0xcb, //0x000031e5 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc0, //0x000031e7 setb %r8b - 0x01, 0xdb, //0x000031eb addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x000031ed xorl $1431655765, %ebx - 0x21, 0xfb, //0x000031f3 andl %edi, %ebx - 0xf7, 0xd3, //0x000031f5 notl %ebx - 0x21, 0xda, //0x000031f7 andl %ebx, %edx - 0x4c, 0x8b, 0x75, 0xd0, //0x000031f9 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000031fd movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003201 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x0000320b movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x0000320f movdqa %xmm6, %xmm13 - 0x48, 0x85, 0xd2, //0x00003214 testq %rdx, %rdx - 0x0f, 0x85, 0x54, 0xf5, 0xff, 0xff, //0x00003217 jne LBB0_54 - //0x0000321d LBB0_519 - 0x48, 0x83, 0xc0, 0x20, //0x0000321d addq $32, %rax - 0x49, 0x83, 0xc1, 0xe0, //0x00003221 addq $-32, %r9 - //0x00003225 LBB0_520 - 0x4d, 0x85, 0xc0, //0x00003225 testq %r8, %r8 - 0x0f, 0x85, 0x18, 0x04, 0x00, 0x00, //0x00003228 jne LBB0_566 - 0x4c, 0x89, 0xe1, //0x0000322e movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x00003231 notq %rcx - 0x48, 0x8b, 0x55, 0xc8, //0x00003234 movq $-56(%rbp), %rdx - 0x4d, 0x85, 0xc9, //0x00003238 testq %r9, %r9 - 0x0f, 0x84, 0x9e, 0x00, 0x00, 0x00, //0x0000323b je LBB0_532 - //0x00003241 LBB0_522 - 0x48, 0x83, 0xc1, 0x01, //0x00003241 addq $1, %rcx - //0x00003245 LBB0_523 - 0x31, 0xf6, //0x00003245 xorl %esi, %esi - //0x00003247 LBB0_524 - 0x0f, 0xb6, 0x1c, 0x30, //0x00003247 movzbl (%rax,%rsi), %ebx - 0x80, 0xfb, 0x22, //0x0000324b cmpb $34, %bl - 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x0000324e je LBB0_531 - 0x80, 0xfb, 0x5c, //0x00003254 cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003257 je LBB0_529 - 0x48, 0x83, 0xc6, 0x01, //0x0000325d addq $1, %rsi - 0x49, 0x39, 0xf1, //0x00003261 cmpq %rsi, %r9 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003264 jne LBB0_524 - 0xe9, 0x78, 0x00, 0x00, 0x00, //0x0000326a jmp LBB0_527 - //0x0000326f LBB0_529 - 0x49, 0x8d, 0x79, 0xff, //0x0000326f leaq $-1(%r9), %rdi - 0x48, 0x39, 0xf7, //0x00003273 cmpq %rsi, %rdi - 0x0f, 0x84, 0xb3, 0x09, 0x00, 0x00, //0x00003276 je LBB0_490 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000327c movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003281 movdqa %xmm2, %xmm5 - 0x48, 0x8d, 0x3c, 0x01, //0x00003285 leaq (%rcx,%rax), %rdi - 0x48, 0x01, 0xf7, //0x00003289 addq %rsi, %rdi - 0x48, 0x83, 0xfa, 0xff, //0x0000328c cmpq $-1, %rdx - 0x48, 0x8b, 0x5d, 0xc8, //0x00003290 movq $-56(%rbp), %rbx - 0x48, 0x0f, 0x44, 0xdf, //0x00003294 cmoveq %rdi, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x00003298 movq %rbx, $-56(%rbp) - 0x48, 0x0f, 0x44, 0xd7, //0x0000329c cmoveq %rdi, %rdx - 0x48, 0x01, 0xf0, //0x000032a0 addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x02, //0x000032a3 addq $2, %rax - 0x4c, 0x89, 0xcf, //0x000032a7 movq %r9, %rdi - 0x48, 0x29, 0xf7, //0x000032aa subq %rsi, %rdi - 0x48, 0x83, 0xc7, 0xfe, //0x000032ad addq $-2, %rdi - 0x49, 0x83, 0xc1, 0xfe, //0x000032b1 addq $-2, %r9 - 0x49, 0x39, 0xf1, //0x000032b5 cmpq %rsi, %r9 - 0x49, 0x89, 0xf9, //0x000032b8 movq %rdi, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x000032bb movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000032bf movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000032c3 movabsq $4294977024, %r11 - 0x0f, 0x85, 0x72, 0xff, 0xff, 0xff, //0x000032cd jne LBB0_523 - 0xe9, 0x3f, 0x07, 0x00, 0x00, //0x000032d3 jmp LBB0_610 - //0x000032d8 LBB0_531 - 0x48, 0x01, 0xf0, //0x000032d8 addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x000032db addq $1, %rax - //0x000032df LBB0_532 - 0x4c, 0x29, 0xe0, //0x000032df subq %r12, %rax - 0xe9, 0x9f, 0xdf, 0xff, 0xff, //0x000032e2 jmp LBB0_223 - //0x000032e7 LBB0_527 - 0x80, 0xfb, 0x22, //0x000032e7 cmpb $34, %bl - 0x0f, 0x85, 0x3f, 0x09, 0x00, 0x00, //0x000032ea jne LBB0_490 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000032f0 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000032f5 movdqa %xmm2, %xmm5 - 0x4c, 0x01, 0xc8, //0x000032f9 addq %r9, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x000032fc movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003300 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003304 movabsq $4294977024, %r11 - 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x0000330e jmp LBB0_532 - //0x00003313 LBB0_533 - 0x48, 0x89, 0xdf, //0x00003313 movq %rbx, %rdi - 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00003316 movdqa %xmm13, %xmm7 - 0x66, 0x0f, 0x6f, 0xf2, //0x0000331b movdqa %xmm2, %xmm6 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000331f cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0xd0, 0x00, 0x00, 0x00, //0x00003324 jne LBB0_543 - 0x49, 0x89, 0xc0, //0x0000332a movq %rax, %r8 - 0x4d, 0x29, 0xe0, //0x0000332d subq %r12, %r8 - 0x49, 0x0f, 0xbc, 0xd9, //0x00003330 bsfq %r9, %rbx - 0x4c, 0x01, 0xc3, //0x00003334 addq %r8, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x00003337 movq %rbx, $-56(%rbp) - 0xe9, 0xba, 0x00, 0x00, 0x00, //0x0000333b jmp LBB0_543 - //0x00003340 LBB0_535 - 0x49, 0x39, 0xd1, //0x00003340 cmpq %rdx, %r9 - 0x0f, 0x84, 0xfe, 0x06, 0x00, 0x00, //0x00003343 je LBB0_638 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003349 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000334e movdqa %xmm2, %xmm5 - 0x49, 0x01, 0xd2, //0x00003352 addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003355 addq $1, %r10 - 0x48, 0xf7, 0xd2, //0x00003359 notq %rdx - 0x49, 0x01, 0xd1, //0x0000335c addq %rdx, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x0000335f movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003363 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003367 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x00003371 testq %r9, %r9 - 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00003374 jg LBB0_539 - 0xe9, 0xc8, 0x06, 0x00, 0x00, //0x0000337a jmp LBB0_638 - //0x0000337f LBB0_537 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x0000337f movq $-2, %rcx - 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00003386 movl $2, %eax - 0x49, 0x01, 0xc2, //0x0000338b addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000338e movq $-1, %rax - 0x49, 0x01, 0xc9, //0x00003395 addq %rcx, %r9 - 0x0f, 0x8e, 0xa9, 0x06, 0x00, 0x00, //0x00003398 jle LBB0_638 - //0x0000339e LBB0_539 - 0x41, 0x0f, 0xb6, 0x02, //0x0000339e movzbl (%r10), %eax - 0x3c, 0x5c, //0x000033a2 cmpb $92, %al - 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x000033a4 je LBB0_537 - 0x3c, 0x22, //0x000033aa cmpb $34, %al - 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x000033ac je LBB0_607 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000033b2 movq $-1, %rcx - 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000033b9 movl $1, %eax - 0x49, 0x01, 0xc2, //0x000033be addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000033c1 movq $-1, %rax - 0x49, 0x01, 0xc9, //0x000033c8 addq %rcx, %r9 - 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x000033cb jg LBB0_539 - 0xe9, 0x71, 0x06, 0x00, 0x00, //0x000033d1 jmp LBB0_638 - //0x000033d6 LBB0_607 - 0x4d, 0x29, 0xe2, //0x000033d6 subq %r12, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x000033d9 addq $1, %r10 - 0x4d, 0x89, 0x16, //0x000033dd movq %r10, (%r14) - 0x4d, 0x85, 0xc0, //0x000033e0 testq %r8, %r8 - 0x0f, 0x8f, 0x33, 0xe4, 0xff, 0xff, //0x000033e3 jg LBB0_306 - 0xe9, 0x13, 0x06, 0x00, 0x00, //0x000033e9 jmp LBB0_608 - //0x000033ee LBB0_542 - 0x48, 0x89, 0xdf, //0x000033ee movq %rbx, %rdi - 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x000033f1 movdqa %xmm13, %xmm7 - 0x66, 0x0f, 0x6f, 0xf2, //0x000033f6 movdqa %xmm2, %xmm6 - //0x000033fa LBB0_543 - 0x48, 0x89, 0xfb, //0x000033fa movq %rdi, %rbx - 0xf7, 0xd7, //0x000033fd notl %edi - 0x44, 0x21, 0xcf, //0x000033ff andl %r9d, %edi - 0x44, 0x8d, 0x04, 0x7b, //0x00003402 leal (%rbx,%rdi,2), %r8d - 0x8d, 0x14, 0x3f, //0x00003406 leal (%rdi,%rdi), %edx - 0xf7, 0xd2, //0x00003409 notl %edx - 0x44, 0x21, 0xca, //0x0000340b andl %r9d, %edx - 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000340e andl $-1431655766, %edx - 0x31, 0xdb, //0x00003414 xorl %ebx, %ebx - 0x01, 0xfa, //0x00003416 addl %edi, %edx - 0x0f, 0x92, 0xc3, //0x00003418 setb %bl - 0x01, 0xd2, //0x0000341b addl %edx, %edx - 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x0000341d xorl $1431655765, %edx - 0x44, 0x21, 0xc2, //0x00003423 andl %r8d, %edx - 0xf7, 0xd2, //0x00003426 notl %edx - 0x21, 0xd1, //0x00003428 andl %edx, %ecx - 0x4c, 0x8b, 0x6d, 0xb8, //0x0000342a movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000342e movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd6, //0x00003438 movdqa %xmm6, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x0000343c movdqa %xmm7, %xmm13 - 0xe9, 0xd0, 0xf3, 0xff, 0xff, //0x00003441 jmp LBB0_170 - //0x00003446 LBB0_544 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003446 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000344b movdqa %xmm2, %xmm5 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000344f cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x00003454 jne LBB0_547 - 0x48, 0x89, 0xc1, //0x0000345a movq %rax, %rcx - 0x4c, 0x29, 0xe1, //0x0000345d subq %r12, %rcx - 0x48, 0x0f, 0xbc, 0xfe, //0x00003460 bsfq %rsi, %rdi - 0x48, 0x01, 0xcf, //0x00003464 addq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xc8, //0x00003467 movq %rdi, $-56(%rbp) - 0xe9, 0x09, 0x00, 0x00, 0x00, //0x0000346b jmp LBB0_547 - //0x00003470 LBB0_546 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003470 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003475 movdqa %xmm2, %xmm5 - //0x00003479 LBB0_547 - 0x44, 0x89, 0xc1, //0x00003479 movl %r8d, %ecx - 0xf7, 0xd1, //0x0000347c notl %ecx - 0x21, 0xf1, //0x0000347e andl %esi, %ecx - 0x41, 0x8d, 0x3c, 0x48, //0x00003480 leal (%r8,%rcx,2), %edi - 0x8d, 0x1c, 0x09, //0x00003484 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x00003487 notl %ebx - 0x21, 0xf3, //0x00003489 andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000348b andl $-1431655766, %ebx - 0x45, 0x31, 0xc0, //0x00003491 xorl %r8d, %r8d - 0x01, 0xcb, //0x00003494 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc0, //0x00003496 setb %r8b - 0x01, 0xdb, //0x0000349a addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x0000349c xorl $1431655765, %ebx - 0x21, 0xfb, //0x000034a2 andl %edi, %ebx - 0xf7, 0xd3, //0x000034a4 notl %ebx - 0x21, 0xda, //0x000034a6 andl %ebx, %edx - 0x4c, 0x8b, 0x75, 0xd0, //0x000034a8 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000034ac movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000034b0 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x000034ba movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x000034be movdqa %xmm6, %xmm13 - 0x48, 0x85, 0xd2, //0x000034c3 testq %rdx, %rdx - 0x0f, 0x85, 0x44, 0xf4, 0xff, 0xff, //0x000034c6 jne LBB0_77 - //0x000034cc LBB0_548 - 0x48, 0x83, 0xc0, 0x20, //0x000034cc addq $32, %rax - 0x49, 0x83, 0xc1, 0xe0, //0x000034d0 addq $-32, %r9 - //0x000034d4 LBB0_549 - 0x4d, 0x85, 0xc0, //0x000034d4 testq %r8, %r8 - 0x0f, 0x85, 0xc4, 0x01, 0x00, 0x00, //0x000034d7 jne LBB0_568 - 0x4c, 0x89, 0xe1, //0x000034dd movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x000034e0 notq %rcx - 0x48, 0x8b, 0x55, 0xc8, //0x000034e3 movq $-56(%rbp), %rdx - 0x4d, 0x85, 0xc9, //0x000034e7 testq %r9, %r9 - 0x0f, 0x84, 0x9e, 0x00, 0x00, 0x00, //0x000034ea je LBB0_561 - //0x000034f0 LBB0_551 - 0x48, 0x83, 0xc1, 0x01, //0x000034f0 addq $1, %rcx - //0x000034f4 LBB0_552 - 0x31, 0xf6, //0x000034f4 xorl %esi, %esi - //0x000034f6 LBB0_553 - 0x0f, 0xb6, 0x1c, 0x30, //0x000034f6 movzbl (%rax,%rsi), %ebx - 0x80, 0xfb, 0x22, //0x000034fa cmpb $34, %bl - 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x000034fd je LBB0_560 - 0x80, 0xfb, 0x5c, //0x00003503 cmpb $92, %bl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003506 je LBB0_558 - 0x48, 0x83, 0xc6, 0x01, //0x0000350c addq $1, %rsi - 0x49, 0x39, 0xf1, //0x00003510 cmpq %rsi, %r9 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003513 jne LBB0_553 - 0xe9, 0x78, 0x00, 0x00, 0x00, //0x00003519 jmp LBB0_556 - //0x0000351e LBB0_558 - 0x49, 0x8d, 0x79, 0xff, //0x0000351e leaq $-1(%r9), %rdi - 0x48, 0x39, 0xf7, //0x00003522 cmpq %rsi, %rdi - 0x0f, 0x84, 0x23, 0x07, 0x00, 0x00, //0x00003525 je LBB0_507 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000352b movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003530 movdqa %xmm2, %xmm5 - 0x48, 0x8d, 0x3c, 0x01, //0x00003534 leaq (%rcx,%rax), %rdi - 0x48, 0x01, 0xf7, //0x00003538 addq %rsi, %rdi - 0x48, 0x83, 0xfa, 0xff, //0x0000353b cmpq $-1, %rdx - 0x48, 0x8b, 0x5d, 0xc8, //0x0000353f movq $-56(%rbp), %rbx - 0x48, 0x0f, 0x44, 0xdf, //0x00003543 cmoveq %rdi, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x00003547 movq %rbx, $-56(%rbp) - 0x48, 0x0f, 0x44, 0xd7, //0x0000354b cmoveq %rdi, %rdx - 0x48, 0x01, 0xf0, //0x0000354f addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x02, //0x00003552 addq $2, %rax - 0x4c, 0x89, 0xcf, //0x00003556 movq %r9, %rdi - 0x48, 0x29, 0xf7, //0x00003559 subq %rsi, %rdi - 0x48, 0x83, 0xc7, 0xfe, //0x0000355c addq $-2, %rdi - 0x49, 0x83, 0xc1, 0xfe, //0x00003560 addq $-2, %r9 - 0x49, 0x39, 0xf1, //0x00003564 cmpq %rsi, %r9 - 0x49, 0x89, 0xf9, //0x00003567 movq %rdi, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x0000356a movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x0000356e movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003572 movabsq $4294977024, %r11 - 0x0f, 0x85, 0x72, 0xff, 0xff, 0xff, //0x0000357c jne LBB0_552 - 0xe9, 0xec, 0x04, 0x00, 0x00, //0x00003582 jmp LBB0_616 - //0x00003587 LBB0_560 - 0x48, 0x01, 0xf0, //0x00003587 addq %rsi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x0000358a addq $1, %rax - //0x0000358e LBB0_561 - 0x4c, 0x29, 0xe0, //0x0000358e subq %r12, %rax - 0xe9, 0x6d, 0xe2, 0xff, 0xff, //0x00003591 jmp LBB0_304 - //0x00003596 LBB0_556 - 0x80, 0xfb, 0x22, //0x00003596 cmpb $34, %bl - 0x0f, 0x85, 0xaf, 0x06, 0x00, 0x00, //0x00003599 jne LBB0_507 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000359f movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000035a4 movdqa %xmm2, %xmm5 - 0x4c, 0x01, 0xc8, //0x000035a8 addq %r9, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x000035ab movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000035af movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000035b3 movabsq $4294977024, %r11 - 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x000035bd jmp LBB0_561 - //0x000035c2 LBB0_562 - 0x66, 0x0f, 0x6f, 0xf2, //0x000035c2 movdqa %xmm2, %xmm6 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000035c6 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x1b, 0x00, 0x00, 0x00, //0x000035cb jne LBB0_565 - 0x49, 0x89, 0xc0, //0x000035d1 movq %rax, %r8 - 0x4c, 0x2b, 0x45, 0xc0, //0x000035d4 subq $-64(%rbp), %r8 - 0x49, 0x0f, 0xbc, 0xda, //0x000035d8 bsfq %r10, %rbx - 0x4c, 0x01, 0xc3, //0x000035dc addq %r8, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x000035df movq %rbx, $-56(%rbp) - 0xe9, 0x04, 0x00, 0x00, 0x00, //0x000035e3 jmp LBB0_565 - //0x000035e8 LBB0_564 - 0x66, 0x0f, 0x6f, 0xf2, //0x000035e8 movdqa %xmm2, %xmm6 - //0x000035ec LBB0_565 - 0x44, 0x89, 0xe2, //0x000035ec movl %r12d, %edx - 0xf7, 0xd2, //0x000035ef notl %edx - 0x44, 0x21, 0xd2, //0x000035f1 andl %r10d, %edx - 0x45, 0x8d, 0x04, 0x54, //0x000035f4 leal (%r12,%rdx,2), %r8d - 0x8d, 0x0c, 0x12, //0x000035f8 leal (%rdx,%rdx), %ecx - 0xf7, 0xd1, //0x000035fb notl %ecx - 0x44, 0x21, 0xd1, //0x000035fd andl %r10d, %ecx - 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003600 andl $-1431655766, %ecx - 0x45, 0x31, 0xe4, //0x00003606 xorl %r12d, %r12d - 0x01, 0xd1, //0x00003609 addl %edx, %ecx - 0x41, 0x0f, 0x92, 0xc4, //0x0000360b setb %r12b - 0x01, 0xc9, //0x0000360f addl %ecx, %ecx - 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00003611 xorl $1431655765, %ecx - 0x44, 0x21, 0xc1, //0x00003617 andl %r8d, %ecx - 0xf7, 0xd1, //0x0000361a notl %ecx - 0x21, 0xce, //0x0000361c andl %ecx, %esi - 0x4c, 0x8b, 0x75, 0xd0, //0x0000361e movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003622 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003626 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd6, //0x00003630 movdqa %xmm6, %xmm2 - 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x03, 0xca, 0xff, 0xff, //0x00003634 movdqu $-13821(%rip), %xmm13 /* LCPI0_4+0(%rip) */ - 0x4c, 0x8b, 0x45, 0xc0, //0x0000363d movq $-64(%rbp), %r8 - 0xe9, 0x79, 0xf3, 0xff, 0xff, //0x00003641 jmp LBB0_199 - //0x00003646 LBB0_566 - 0x4d, 0x85, 0xc9, //0x00003646 testq %r9, %r9 - 0x0f, 0x84, 0xe0, 0x05, 0x00, 0x00, //0x00003649 je LBB0_490 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000364f movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003654 movdqa %xmm2, %xmm5 - 0x4c, 0x89, 0xe1, //0x00003658 movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x0000365b notq %rcx - 0x48, 0x8d, 0x34, 0x08, //0x0000365e leaq (%rax,%rcx), %rsi - 0x48, 0x8b, 0x7d, 0xc8, //0x00003662 movq $-56(%rbp), %rdi - 0x48, 0x83, 0xff, 0xff, //0x00003666 cmpq $-1, %rdi - 0x48, 0x89, 0xfa, //0x0000366a movq %rdi, %rdx - 0x48, 0x0f, 0x44, 0xfe, //0x0000366d cmoveq %rsi, %rdi - 0x48, 0x0f, 0x44, 0xd6, //0x00003671 cmoveq %rsi, %rdx - 0x48, 0x83, 0xc0, 0x01, //0x00003675 addq $1, %rax - 0x49, 0x83, 0xc1, 0xff, //0x00003679 addq $-1, %r9 - 0x48, 0x89, 0x7d, 0xc8, //0x0000367d movq %rdi, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x00003681 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003685 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003689 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x00003693 testq %r9, %r9 - 0x0f, 0x85, 0xa5, 0xfb, 0xff, 0xff, //0x00003696 jne LBB0_522 - 0xe9, 0x3e, 0xfc, 0xff, 0xff, //0x0000369c jmp LBB0_532 - //0x000036a1 LBB0_568 - 0x4d, 0x85, 0xc9, //0x000036a1 testq %r9, %r9 - 0x0f, 0x84, 0xa4, 0x05, 0x00, 0x00, //0x000036a4 je LBB0_507 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000036aa movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000036af movdqa %xmm2, %xmm5 - 0x4c, 0x89, 0xe1, //0x000036b3 movq %r12, %rcx - 0x48, 0xf7, 0xd1, //0x000036b6 notq %rcx - 0x48, 0x8d, 0x34, 0x08, //0x000036b9 leaq (%rax,%rcx), %rsi - 0x48, 0x8b, 0x7d, 0xc8, //0x000036bd movq $-56(%rbp), %rdi - 0x48, 0x83, 0xff, 0xff, //0x000036c1 cmpq $-1, %rdi - 0x48, 0x89, 0xfa, //0x000036c5 movq %rdi, %rdx - 0x48, 0x0f, 0x44, 0xfe, //0x000036c8 cmoveq %rsi, %rdi - 0x48, 0x0f, 0x44, 0xd6, //0x000036cc cmoveq %rsi, %rdx - 0x48, 0x83, 0xc0, 0x01, //0x000036d0 addq $1, %rax - 0x49, 0x83, 0xc1, 0xff, //0x000036d4 addq $-1, %r9 - 0x48, 0x89, 0x7d, 0xc8, //0x000036d8 movq %rdi, $-56(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x000036dc movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000036e0 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000036e4 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x000036ee testq %r9, %r9 - 0x0f, 0x85, 0xf9, 0xfd, 0xff, 0xff, //0x000036f1 jne LBB0_551 - 0xe9, 0x92, 0xfe, 0xff, 0xff, //0x000036f7 jmp LBB0_561 - //0x000036fc LBB0_570 - 0x49, 0x39, 0xd1, //0x000036fc cmpq %rdx, %r9 - 0x0f, 0x84, 0x42, 0x03, 0x00, 0x00, //0x000036ff je LBB0_638 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003705 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x0000370a movdqa %xmm2, %xmm5 - 0x49, 0x01, 0xd2, //0x0000370e addq %rdx, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003711 addq $1, %r10 - 0x48, 0xf7, 0xd2, //0x00003715 notq %rdx - 0x49, 0x01, 0xd1, //0x00003718 addq %rdx, %r9 - 0x4c, 0x8b, 0x75, 0xd0, //0x0000371b movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x0000371f movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003723 movabsq $4294977024, %r11 - 0x4d, 0x85, 0xc9, //0x0000372d testq %r9, %r9 - 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00003730 jg LBB0_574 - 0xe9, 0x0c, 0x03, 0x00, 0x00, //0x00003736 jmp LBB0_638 - //0x0000373b LBB0_572 - 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x0000373b movq $-2, %rcx - 0xb8, 0x02, 0x00, 0x00, 0x00, //0x00003742 movl $2, %eax - 0x49, 0x01, 0xc2, //0x00003747 addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000374a movq $-1, %rax - 0x49, 0x01, 0xc9, //0x00003751 addq %rcx, %r9 - 0x0f, 0x8e, 0xed, 0x02, 0x00, 0x00, //0x00003754 jle LBB0_638 - //0x0000375a LBB0_574 - 0x41, 0x0f, 0xb6, 0x02, //0x0000375a movzbl (%r10), %eax - 0x3c, 0x5c, //0x0000375e cmpb $92, %al - 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00003760 je LBB0_572 - 0x3c, 0x22, //0x00003766 cmpb $34, %al - 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x00003768 je LBB0_577 - 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x0000376e movq $-1, %rcx - 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00003775 movl $1, %eax - 0x49, 0x01, 0xc2, //0x0000377a addq %rax, %r10 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x0000377d movq $-1, %rax - 0x49, 0x01, 0xc9, //0x00003784 addq %rcx, %r9 - 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x00003787 jg LBB0_574 - 0xe9, 0xb5, 0x02, 0x00, 0x00, //0x0000378d jmp LBB0_638 - //0x00003792 LBB0_577 - 0x4d, 0x29, 0xe2, //0x00003792 subq %r12, %r10 - 0x49, 0x83, 0xc2, 0x01, //0x00003795 addq $1, %r10 - 0x4d, 0x89, 0x16, //0x00003799 movq %r10, (%r14) - 0x4d, 0x85, 0xc0, //0x0000379c testq %r8, %r8 - 0x0f, 0x8f, 0x1b, 0xca, 0xff, 0xff, //0x0000379f jg LBB0_4 - 0xe9, 0x57, 0x02, 0x00, 0x00, //0x000037a5 jmp LBB0_608 - //0x000037aa LBB0_578 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000037aa movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000037af movdqa %xmm2, %xmm5 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000037b3 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x000037b8 jne LBB0_581 - 0x48, 0x89, 0xc1, //0x000037be movq %rax, %rcx - 0x4c, 0x29, 0xe1, //0x000037c1 subq %r12, %rcx - 0x48, 0x0f, 0xbc, 0xfe, //0x000037c4 bsfq %rsi, %rdi - 0x48, 0x01, 0xcf, //0x000037c8 addq %rcx, %rdi - 0x48, 0x89, 0x7d, 0xc8, //0x000037cb movq %rdi, $-56(%rbp) - 0xe9, 0x09, 0x00, 0x00, 0x00, //0x000037cf jmp LBB0_581 - //0x000037d4 LBB0_580 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000037d4 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x000037d9 movdqa %xmm2, %xmm5 - //0x000037dd LBB0_581 - 0x44, 0x89, 0xc1, //0x000037dd movl %r8d, %ecx - 0xf7, 0xd1, //0x000037e0 notl %ecx - 0x21, 0xf1, //0x000037e2 andl %esi, %ecx - 0x41, 0x8d, 0x3c, 0x48, //0x000037e4 leal (%r8,%rcx,2), %edi - 0x8d, 0x1c, 0x09, //0x000037e8 leal (%rcx,%rcx), %ebx - 0xf7, 0xd3, //0x000037eb notl %ebx - 0x21, 0xf3, //0x000037ed andl %esi, %ebx - 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x000037ef andl $-1431655766, %ebx - 0x45, 0x31, 0xc0, //0x000037f5 xorl %r8d, %r8d - 0x01, 0xcb, //0x000037f8 addl %ecx, %ebx - 0x41, 0x0f, 0x92, 0xc0, //0x000037fa setb %r8b - 0x01, 0xdb, //0x000037fe addl %ebx, %ebx - 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00003800 xorl $1431655765, %ebx - 0x21, 0xfb, //0x00003806 andl %edi, %ebx - 0xf7, 0xd3, //0x00003808 notl %ebx - 0x21, 0xda, //0x0000380a andl %ebx, %edx - 0x4c, 0x8b, 0x75, 0xd0, //0x0000380c movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003810 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003814 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x0000381e movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00003822 movdqa %xmm6, %xmm13 - 0x48, 0x85, 0xd2, //0x00003827 testq %rdx, %rdx - 0x0f, 0x85, 0x89, 0xf4, 0xff, 0xff, //0x0000382a jne LBB0_245 - //0x00003830 LBB0_582 - 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003830 movdqa %xmm13, %xmm6 - 0x66, 0x0f, 0x6f, 0xea, //0x00003835 movdqa %xmm2, %xmm5 - 0x48, 0x83, 0xc0, 0x20, //0x00003839 addq $32, %rax - 0x49, 0x83, 0xc1, 0xe0, //0x0000383d addq $-32, %r9 - //0x00003841 LBB0_583 - 0x4d, 0x85, 0xc0, //0x00003841 testq %r8, %r8 - 0x0f, 0x85, 0x53, 0x01, 0x00, 0x00, //0x00003844 jne LBB0_601 - 0x4c, 0x89, 0xe2, //0x0000384a movq %r12, %rdx - 0x48, 0xf7, 0xd2, //0x0000384d notq %rdx - 0x48, 0x8b, 0x75, 0xc8, //0x00003850 movq $-56(%rbp), %rsi - 0x4d, 0x85, 0xc9, //0x00003854 testq %r9, %r9 - 0x0f, 0x84, 0x83, 0x00, 0x00, 0x00, //0x00003857 je LBB0_595 - //0x0000385d LBB0_585 - 0x48, 0x83, 0xc2, 0x01, //0x0000385d addq $1, %rdx - //0x00003861 LBB0_586 - 0x31, 0xff, //0x00003861 xorl %edi, %edi - //0x00003863 LBB0_587 - 0x0f, 0xb6, 0x0c, 0x38, //0x00003863 movzbl (%rax,%rdi), %ecx - 0x80, 0xf9, 0x22, //0x00003867 cmpb $34, %cl - 0x0f, 0x84, 0x69, 0x00, 0x00, 0x00, //0x0000386a je LBB0_594 - 0x80, 0xf9, 0x5c, //0x00003870 cmpb $92, %cl - 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003873 je LBB0_592 - 0x48, 0x83, 0xc7, 0x01, //0x00003879 addq $1, %rdi - 0x49, 0x39, 0xf9, //0x0000387d cmpq %rdi, %r9 - 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003880 jne LBB0_587 - 0xe9, 0x78, 0x00, 0x00, 0x00, //0x00003886 jmp LBB0_590 - //0x0000388b LBB0_592 - 0x49, 0x8d, 0x49, 0xff, //0x0000388b leaq $-1(%r9), %rcx - 0x48, 0x39, 0xf9, //0x0000388f cmpq %rdi, %rcx - 0x0f, 0x84, 0xb6, 0x03, 0x00, 0x00, //0x00003892 je LBB0_507 - 0x48, 0x8d, 0x0c, 0x02, //0x00003898 leaq (%rdx,%rax), %rcx - 0x48, 0x01, 0xf9, //0x0000389c addq %rdi, %rcx - 0x48, 0x83, 0xfe, 0xff, //0x0000389f cmpq $-1, %rsi - 0x48, 0x8b, 0x5d, 0xc8, //0x000038a3 movq $-56(%rbp), %rbx - 0x48, 0x0f, 0x44, 0xd9, //0x000038a7 cmoveq %rcx, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x000038ab movq %rbx, $-56(%rbp) - 0x48, 0x0f, 0x44, 0xf1, //0x000038af cmoveq %rcx, %rsi - 0x48, 0x01, 0xf8, //0x000038b3 addq %rdi, %rax - 0x48, 0x83, 0xc0, 0x02, //0x000038b6 addq $2, %rax - 0x4c, 0x89, 0xc9, //0x000038ba movq %r9, %rcx - 0x48, 0x29, 0xf9, //0x000038bd subq %rdi, %rcx - 0x48, 0x83, 0xc1, 0xfe, //0x000038c0 addq $-2, %rcx - 0x49, 0x83, 0xc1, 0xfe, //0x000038c4 addq $-2, %r9 - 0x49, 0x39, 0xf9, //0x000038c8 cmpq %rdi, %r9 - 0x49, 0x89, 0xc9, //0x000038cb movq %rcx, %r9 - 0x0f, 0x85, 0x8d, 0xff, 0xff, 0xff, //0x000038ce jne LBB0_586 - 0xe9, 0x75, 0x03, 0x00, 0x00, //0x000038d4 jmp LBB0_507 - //0x000038d9 LBB0_594 - 0x48, 0x01, 0xf8, //0x000038d9 addq %rdi, %rax - 0x48, 0x83, 0xc0, 0x01, //0x000038dc addq $1, %rax - //0x000038e0 LBB0_595 - 0x4c, 0x29, 0xe0, //0x000038e0 subq %r12, %rax - //0x000038e3 LBB0_596 - 0x4c, 0x8b, 0x75, 0xd0, //0x000038e3 movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x000038e7 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000038eb movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd5, //0x000038f5 movdqa %xmm5, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x000038f9 movdqa %xmm6, %xmm13 - 0xe9, 0x3a, 0xed, 0xff, 0xff, //0x000038fe jmp LBB0_426 - //0x00003903 LBB0_590 - 0x80, 0xf9, 0x22, //0x00003903 cmpb $34, %cl - 0x0f, 0x85, 0x42, 0x03, 0x00, 0x00, //0x00003906 jne LBB0_507 - 0x4c, 0x01, 0xc8, //0x0000390c addq %r9, %rax - 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x0000390f jmp LBB0_595 - //0x00003914 LBB0_597 - 0x48, 0x89, 0xd9, //0x00003914 movq %rbx, %rcx - 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00003917 movdqa %xmm13, %xmm7 - 0x66, 0x0f, 0x6f, 0xf2, //0x0000391c movdqa %xmm2, %xmm6 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003920 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x22, 0x00, 0x00, 0x00, //0x00003925 jne LBB0_600 - 0x49, 0x89, 0xc0, //0x0000392b movq %rax, %r8 - 0x4d, 0x29, 0xe0, //0x0000392e subq %r12, %r8 - 0x49, 0x0f, 0xbc, 0xd9, //0x00003931 bsfq %r9, %rbx - 0x4c, 0x01, 0xc3, //0x00003935 addq %r8, %rbx - 0x48, 0x89, 0x5d, 0xc8, //0x00003938 movq %rbx, $-56(%rbp) - 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x0000393c jmp LBB0_600 - //0x00003941 LBB0_599 - 0x48, 0x89, 0xd9, //0x00003941 movq %rbx, %rcx - 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00003944 movdqa %xmm13, %xmm7 - 0x66, 0x0f, 0x6f, 0xf2, //0x00003949 movdqa %xmm2, %xmm6 - //0x0000394d LBB0_600 - 0x48, 0x89, 0xcb, //0x0000394d movq %rcx, %rbx - 0xf7, 0xd1, //0x00003950 notl %ecx - 0x44, 0x21, 0xc9, //0x00003952 andl %r9d, %ecx - 0x44, 0x8d, 0x04, 0x4b, //0x00003955 leal (%rbx,%rcx,2), %r8d - 0x8d, 0x14, 0x09, //0x00003959 leal (%rcx,%rcx), %edx - 0xf7, 0xd2, //0x0000395c notl %edx - 0x44, 0x21, 0xca, //0x0000395e andl %r9d, %edx - 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003961 andl $-1431655766, %edx - 0x31, 0xdb, //0x00003967 xorl %ebx, %ebx - 0x01, 0xca, //0x00003969 addl %ecx, %edx - 0x0f, 0x92, 0xc3, //0x0000396b setb %bl - 0x01, 0xd2, //0x0000396e addl %edx, %edx - 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x00003970 xorl $1431655765, %edx - 0x44, 0x21, 0xc2, //0x00003976 andl %r8d, %edx - 0xf7, 0xd2, //0x00003979 notl %edx - 0x21, 0xd6, //0x0000397b andl %edx, %esi - 0x4c, 0x8b, 0x75, 0xd0, //0x0000397d movq $-48(%rbp), %r14 - 0x4c, 0x8b, 0x6d, 0xb8, //0x00003981 movq $-72(%rbp), %r13 - 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003985 movabsq $4294977024, %r11 - 0x66, 0x0f, 0x6f, 0xd6, //0x0000398f movdqa %xmm6, %xmm2 - 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x00003993 movdqa %xmm7, %xmm13 - 0xe9, 0xc0, 0xf3, 0xff, 0xff, //0x00003998 jmp LBB0_398 - //0x0000399d LBB0_601 - 0x4d, 0x85, 0xc9, //0x0000399d testq %r9, %r9 - 0x0f, 0x84, 0xa8, 0x02, 0x00, 0x00, //0x000039a0 je LBB0_507 - 0x4c, 0x89, 0xe2, //0x000039a6 movq %r12, %rdx - 0x48, 0xf7, 0xd2, //0x000039a9 notq %rdx - 0x48, 0x8d, 0x0c, 0x10, //0x000039ac leaq (%rax,%rdx), %rcx - 0x48, 0x8b, 0x7d, 0xc8, //0x000039b0 movq $-56(%rbp), %rdi - 0x48, 0x83, 0xff, 0xff, //0x000039b4 cmpq $-1, %rdi - 0x48, 0x89, 0xfe, //0x000039b8 movq %rdi, %rsi - 0x48, 0x0f, 0x44, 0xf9, //0x000039bb cmoveq %rcx, %rdi - 0x48, 0x0f, 0x44, 0xf1, //0x000039bf cmoveq %rcx, %rsi - 0x48, 0x83, 0xc0, 0x01, //0x000039c3 addq $1, %rax - 0x49, 0x83, 0xc1, 0xff, //0x000039c7 addq $-1, %r9 - 0x48, 0x89, 0x7d, 0xc8, //0x000039cb movq %rdi, $-56(%rbp) - 0x4d, 0x85, 0xc9, //0x000039cf testq %r9, %r9 - 0x0f, 0x85, 0x85, 0xfe, 0xff, 0xff, //0x000039d2 jne LBB0_585 - 0xe9, 0x03, 0xff, 0xff, 0xff, //0x000039d8 jmp LBB0_595 - //0x000039dd LBB0_603 - 0x49, 0x89, 0x16, //0x000039dd movq %rdx, (%r14) - //0x000039e0 LBB0_604 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000039e0 movq $-1, %rax - 0xe9, 0x5b, 0x00, 0x00, 0x00, //0x000039e7 jmp LBB0_638 - //0x000039ec LBB0_634 - 0x48, 0xc7, 0xc0, 0xf9, 0xff, 0xff, 0xff, //0x000039ec movq $-7, %rax - 0xe9, 0x4f, 0x00, 0x00, 0x00, //0x000039f3 jmp LBB0_638 - //0x000039f8 LBB0_606 - 0x48, 0x83, 0xc0, 0xff, //0x000039f8 addq $-1, %rax - 0xe9, 0x46, 0x00, 0x00, 0x00, //0x000039fc jmp LBB0_638 - //0x00003a01 LBB0_608 - 0x49, 0x83, 0xc0, 0xff, //0x00003a01 addq $-1, %r8 - 0x4c, 0x89, 0xc0, //0x00003a05 movq %r8, %rax - 0xe9, 0x3a, 0x00, 0x00, 0x00, //0x00003a08 jmp LBB0_638 - //0x00003a0d LBB0_609 - 0x48, 0x83, 0xf8, 0xff, //0x00003a0d cmpq $-1, %rax - 0x0f, 0x85, 0x90, 0x00, 0x00, 0x00, //0x00003a11 jne LBB0_621 - //0x00003a17 LBB0_610 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003a17 movq $-1, %rax - 0x48, 0x8b, 0x4d, 0xa0, //0x00003a1e movq $-96(%rbp), %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00003a22 movq %rcx, $-56(%rbp) - 0xe9, 0x7c, 0x00, 0x00, 0x00, //0x00003a26 jmp LBB0_621 - //0x00003a2b LBB0_611 - 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00003a2b movq $-1, %r13 - //0x00003a32 LBB0_612 - 0x4c, 0x29, 0xee, //0x00003a32 subq %r13, %rsi - 0x48, 0x83, 0xc6, 0xfe, //0x00003a35 addq $-2, %rsi - 0x48, 0x8b, 0x45, 0xd0, //0x00003a39 movq $-48(%rbp), %rax - 0x48, 0x89, 0x30, //0x00003a3d movq %rsi, (%rax) - //0x00003a40 LBB0_637 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003a40 movq $-2, %rax - //0x00003a47 LBB0_638 - 0x48, 0x81, 0xc4, 0x88, 0x00, 0x00, 0x00, //0x00003a47 addq $136, %rsp - 0x5b, //0x00003a4e popq %rbx - 0x41, 0x5c, //0x00003a4f popq %r12 - 0x41, 0x5d, //0x00003a51 popq %r13 - 0x41, 0x5e, //0x00003a53 popq %r14 - 0x41, 0x5f, //0x00003a55 popq %r15 - 0x5d, //0x00003a57 popq %rbp - 0xc3, //0x00003a58 retq - //0x00003a59 LBB0_614 - 0x48, 0x83, 0xc6, 0xff, //0x00003a59 addq $-1, %rsi - 0x48, 0x89, 0xf0, //0x00003a5d movq %rsi, %rax - 0xe9, 0xe2, 0xff, 0xff, 0xff, //0x00003a60 jmp LBB0_638 - //0x00003a65 LBB0_615 - 0x48, 0x83, 0xf8, 0xff, //0x00003a65 cmpq $-1, %rax - 0x48, 0x8b, 0x55, 0xc8, //0x00003a69 movq $-56(%rbp), %rdx - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003a6d jne LBB0_617 - //0x00003a73 LBB0_616 - 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003a73 movq $-1, %rax - 0x48, 0x8b, 0x55, 0xa0, //0x00003a7a movq $-96(%rbp), %rdx - //0x00003a7e LBB0_617 - 0x49, 0x89, 0x16, //0x00003a7e movq %rdx, (%r14) - 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003a81 jmp LBB0_638 - //0x00003a86 LBB0_618 - 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003a86 cmpq $-1, $-56(%rbp) - 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003a8b jne LBB0_620 - 0x48, 0x0f, 0xbc, 0xce, //0x00003a91 bsfq %rsi, %rcx - 0x48, 0x01, 0xc1, //0x00003a95 addq %rax, %rcx - 0x48, 0x89, 0x4d, 0xc8, //0x00003a98 movq %rcx, $-56(%rbp) - //0x00003a9c LBB0_620 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003a9c movq $-2, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x00003aa3 movq $-48(%rbp), %r14 - //0x00003aa7 LBB0_621 - 0x48, 0x8b, 0x4d, 0xc8, //0x00003aa7 movq $-56(%rbp), %rcx - 0x49, 0x89, 0x0e, //0x00003aab movq %rcx, (%r14) - 0xe9, 0x94, 0xff, 0xff, 0xff, //0x00003aae jmp LBB0_638 - //0x00003ab3 LBB0_622 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003ab3 movq $-2, %rax - 0x80, 0xfa, 0x61, //0x00003aba cmpb $97, %dl - 0x0f, 0x85, 0x84, 0xff, 0xff, 0xff, //0x00003abd jne LBB0_638 - 0x48, 0x8d, 0x51, 0x01, //0x00003ac3 leaq $1(%rcx), %rdx - 0x49, 0x89, 0x16, //0x00003ac7 movq %rdx, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x00003aca cmpb $108, $1(%r12,%rcx) - 0x0f, 0x85, 0x71, 0xff, 0xff, 0xff, //0x00003ad0 jne LBB0_638 - 0x48, 0x8d, 0x51, 0x02, //0x00003ad6 leaq $2(%rcx), %rdx + 0x48, 0xc1, 0xe9, 0x04, //0x0000229e shrq $4, %rcx + 0x4c, 0x01, 0xe9, //0x000022a2 addq %r13, %rcx + 0x48, 0xba, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, //0x000022a5 movabsq $1085102592571150095, %rdx + 0x48, 0x21, 0xd1, //0x000022af andq %rdx, %rcx + 0x48, 0xba, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x000022b2 movabsq $72340172838076673, %rdx + 0x48, 0x0f, 0xaf, 0xca, //0x000022bc imulq %rdx, %rcx + 0x48, 0xc1, 0xe9, 0x38, //0x000022c0 shrq $56, %rcx + 0x49, 0x01, 0xca, //0x000022c4 addq %rcx, %r10 + 0x49, 0x83, 0xc4, 0x40, //0x000022c7 addq $64, %r12 + 0x48, 0x8b, 0x55, 0xb8, //0x000022cb movq $-72(%rbp), %rdx + 0x48, 0x83, 0xc2, 0xc0, //0x000022cf addq $-64, %rdx + 0x4d, 0x89, 0xd8, //0x000022d3 movq %r11, %r8 + 0x48, 0x83, 0xfa, 0x40, //0x000022d6 cmpq $64, %rdx + 0x48, 0x89, 0x55, 0xb8, //0x000022da movq %rdx, $-72(%rbp) + 0x0f, 0x8d, 0x44, 0xfd, 0xff, 0xff, //0x000022de jge LBB0_367 + 0xe9, 0xe4, 0xfb, 0xff, 0xff, //0x000022e4 jmp LBB0_376 + //0x000022e9 LBB0_392 + 0x48, 0x8b, 0x75, 0xa8, //0x000022e9 movq $-88(%rbp), %rsi + 0x48, 0x8b, 0x4e, 0x08, //0x000022ed movq $8(%rsi), %rcx + 0x48, 0x0f, 0xbc, 0xd2, //0x000022f1 bsfq %rdx, %rdx + 0x48, 0x2b, 0x55, 0xb8, //0x000022f5 subq $-72(%rbp), %rdx + 0x48, 0x01, 0xd1, //0x000022f9 addq %rdx, %rcx + 0x48, 0x83, 0xc1, 0x01, //0x000022fc addq $1, %rcx + 0x4c, 0x8b, 0x75, 0xd0, //0x00002300 movq $-48(%rbp), %r14 + 0x49, 0x89, 0x0e, //0x00002304 movq %rcx, (%r14) + 0x48, 0x8b, 0x56, 0x08, //0x00002307 movq $8(%rsi), %rdx + 0x48, 0x39, 0xd1, //0x0000230b cmpq %rdx, %rcx + 0x48, 0x0f, 0x47, 0xca, //0x0000230e cmovaq %rdx, %rcx + 0x49, 0x89, 0x0e, //0x00002312 movq %rcx, (%r14) + 0x0f, 0x87, 0x94, 0x17, 0x00, 0x00, //0x00002315 ja LBB0_650 + 0x48, 0x8b, 0x45, 0xc0, //0x0000231b movq $-64(%rbp), %rax + 0xe9, 0x48, 0x09, 0x00, 0x00, //0x0000231f jmp LBB0_488 + //0x00002324 LBB0_394 + 0x66, 0x0f, 0xbc, 0xc9, //0x00002324 bsfw %cx, %cx + 0x0f, 0xb7, 0xd9, //0x00002328 movzwl %cx, %ebx + 0x48, 0x89, 0xd9, //0x0000232b movq %rbx, %rcx + 0x48, 0x29, 0xf9, //0x0000232e subq %rdi, %rcx + 0x49, 0x89, 0x0e, //0x00002331 movq %rcx, (%r14) + 0x48, 0x85, 0xc9, //0x00002334 testq %rcx, %rcx + 0x0f, 0x8e, 0x42, 0xef, 0xff, 0xff, //0x00002337 jle LBB0_231 + 0x49, 0x01, 0xd8, //0x0000233d addq %rbx, %r8 + 0x48, 0x01, 0xda, //0x00002340 addq %rbx, %rdx + 0x48, 0x01, 0xde, //0x00002343 addq %rbx, %rsi + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00002346 .p2align 4, 0x90 + //0x00002350 LBB0_396 + 0x0f, 0xb6, 0x0e, //0x00002350 movzbl (%rsi), %ecx + 0x48, 0x83, 0xf9, 0x20, //0x00002353 cmpq $32, %rcx + 0x0f, 0x87, 0x22, 0xef, 0xff, 0xff, //0x00002357 ja LBB0_231 + 0x49, 0x0f, 0xa3, 0xcb, //0x0000235d btq %rcx, %r11 + 0x0f, 0x83, 0x18, 0xef, 0xff, 0xff, //0x00002361 jae LBB0_231 + 0x49, 0x89, 0x16, //0x00002367 movq %rdx, (%r14) + 0x49, 0x83, 0xc0, 0xff, //0x0000236a addq $-1, %r8 + 0x48, 0x83, 0xc2, 0xff, //0x0000236e addq $-1, %rdx + 0x48, 0x83, 0xc6, 0xff, //0x00002372 addq $-1, %rsi + 0x49, 0x83, 0xf8, 0x01, //0x00002376 cmpq $1, %r8 + 0x0f, 0x8f, 0xd0, 0xff, 0xff, 0xff, //0x0000237a jg LBB0_396 + 0xe9, 0xfa, 0xee, 0xff, 0xff, //0x00002380 jmp LBB0_231 + //0x00002385 LBB0_399 + 0x49, 0x8d, 0x4f, 0xff, //0x00002385 leaq $-1(%r15), %rcx + 0x49, 0x39, 0xc8, //0x00002389 cmpq %rcx, %r8 + 0x49, 0xf7, 0xd7, //0x0000238c notq %r15 + 0x4d, 0x0f, 0x45, 0xf9, //0x0000238f cmovneq %r9, %r15 + 0x84, 0xd2, //0x00002393 testb %dl, %dl + 0x4d, 0x0f, 0x44, 0xf9, //0x00002395 cmoveq %r9, %r15 + 0x4d, 0x89, 0xfd, //0x00002399 movq %r15, %r13 + 0xe9, 0x53, 0x03, 0x00, 0x00, //0x0000239c jmp LBB0_451 + //0x000023a1 LBB0_400 + 0x48, 0x89, 0xc6, //0x000023a1 movq %rax, %rsi + 0x48, 0x29, 0xd6, //0x000023a4 subq %rdx, %rsi + 0x0f, 0x84, 0xf6, 0x18, 0x00, 0x00, //0x000023a7 je LBB0_658 + 0x48, 0x83, 0xfe, 0x40, //0x000023ad cmpq $64, %rsi + 0x0f, 0x82, 0x32, 0x0d, 0x00, 0x00, //0x000023b1 jb LBB0_520 + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000023b7 movq $-1, $-56(%rbp) + 0x48, 0x8b, 0x45, 0xc0, //0x000023bf movq $-64(%rbp), %rax + 0x31, 0xdb, //0x000023c3 xorl %ebx, %ebx + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x000023c5 .p2align 4, 0x90 + //0x000023d0 LBB0_403 + 0x48, 0x89, 0x75, 0xb8, //0x000023d0 movq %rsi, $-72(%rbp) + 0x49, 0x89, 0xda, //0x000023d4 movq %rbx, %r10 + 0xf3, 0x41, 0x0f, 0x6f, 0x2c, 0x04, //0x000023d7 movdqu (%r12,%rax), %xmm5 + 0xf3, 0x41, 0x0f, 0x6f, 0x7c, 0x04, 0x10, //0x000023dd movdqu $16(%r12,%rax), %xmm7 + 0xf3, 0x41, 0x0f, 0x6f, 0x74, 0x04, 0x20, //0x000023e4 movdqu $32(%r12,%rax), %xmm6 + 0xf3, 0x41, 0x0f, 0x6f, 0x64, 0x04, 0x30, //0x000023eb movdqu $48(%r12,%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xdd, //0x000023f2 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x000023f6 pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xdb, //0x000023fa pmovmskb %xmm3, %r11d + 0x66, 0x0f, 0x6f, 0xdf, //0x000023ff movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x00002403 pcmpeqb %xmm0, %xmm3 + 0x66, 0x0f, 0xd7, 0xcb, //0x00002407 pmovmskb %xmm3, %ecx + 0x66, 0x0f, 0x6f, 0xde, //0x0000240b movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000240f pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xf3, //0x00002413 pmovmskb %xmm3, %r14d + 0x66, 0x0f, 0x6f, 0xdc, //0x00002418 movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd8, //0x0000241c pcmpeqb %xmm0, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xfb, //0x00002420 pmovmskb %xmm3, %r15d + 0x66, 0x0f, 0x6f, 0xdd, //0x00002425 movdqa %xmm5, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002429 pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xeb, //0x0000242d pmovmskb %xmm3, %r13d + 0x66, 0x0f, 0x6f, 0xdf, //0x00002432 movdqa %xmm7, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002436 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x0000243a pmovmskb %xmm3, %ebx + 0x66, 0x0f, 0x6f, 0xde, //0x0000243e movdqa %xmm6, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x00002442 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00002446 pmovmskb %xmm3, %edi + 0x66, 0x0f, 0x6f, 0xdc, //0x0000244a movdqa %xmm4, %xmm3 + 0x66, 0x0f, 0x74, 0xd9, //0x0000244e pcmpeqb %xmm1, %xmm3 + 0x66, 0x44, 0x0f, 0xd7, 0xcb, //0x00002452 pmovmskb %xmm3, %r9d + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002457 movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdf, //0x0000245c pcmpgtb %xmm7, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xfa, //0x00002460 pcmpgtb %xmm10, %xmm7 + 0x66, 0x0f, 0xdb, 0xfb, //0x00002465 pand %xmm3, %xmm7 + 0x66, 0x0f, 0xd7, 0xf7, //0x00002469 pmovmskb %xmm7, %esi + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x0000246d movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xde, //0x00002472 pcmpgtb %xmm6, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xf2, //0x00002476 pcmpgtb %xmm10, %xmm6 + 0x66, 0x0f, 0xdb, 0xf3, //0x0000247b pand %xmm3, %xmm6 + 0x66, 0x0f, 0xd7, 0xd6, //0x0000247f pmovmskb %xmm6, %edx + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002483 movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00002488 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x0000248c pcmpgtb %xmm10, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x00002491 pand %xmm3, %xmm4 + 0x66, 0x44, 0x0f, 0xd7, 0xc4, //0x00002495 pmovmskb %xmm4, %r8d + 0x49, 0xc1, 0xe7, 0x30, //0x0000249a shlq $48, %r15 + 0x49, 0xc1, 0xe6, 0x20, //0x0000249e shlq $32, %r14 + 0x4d, 0x09, 0xfe, //0x000024a2 orq %r15, %r14 + 0x48, 0xc1, 0xe1, 0x10, //0x000024a5 shlq $16, %rcx + 0x4c, 0x09, 0xf1, //0x000024a9 orq %r14, %rcx + 0x49, 0x09, 0xcb, //0x000024ac orq %rcx, %r11 + 0x49, 0xc1, 0xe1, 0x30, //0x000024af shlq $48, %r9 + 0x48, 0xc1, 0xe7, 0x20, //0x000024b3 shlq $32, %rdi + 0x4c, 0x09, 0xcf, //0x000024b7 orq %r9, %rdi + 0x48, 0xc1, 0xe3, 0x10, //0x000024ba shlq $16, %rbx + 0x48, 0x09, 0xfb, //0x000024be orq %rdi, %rbx + 0x49, 0xc1, 0xe0, 0x30, //0x000024c1 shlq $48, %r8 + 0x48, 0xc1, 0xe2, 0x20, //0x000024c5 shlq $32, %rdx + 0x4c, 0x09, 0xc2, //0x000024c9 orq %r8, %rdx + 0x48, 0xc1, 0xe6, 0x10, //0x000024cc shlq $16, %rsi + 0x48, 0x09, 0xd6, //0x000024d0 orq %rdx, %rsi + 0x49, 0x09, 0xdd, //0x000024d3 orq %rbx, %r13 + 0x0f, 0x85, 0x59, 0x00, 0x00, 0x00, //0x000024d6 jne LBB0_420 + 0x4d, 0x85, 0xd2, //0x000024dc testq %r10, %r10 + 0x0f, 0x85, 0x6f, 0x00, 0x00, 0x00, //0x000024df jne LBB0_422 + 0x31, 0xdb, //0x000024e5 xorl %ebx, %ebx + 0x4c, 0x8b, 0x75, 0xd0, //0x000024e7 movq $-48(%rbp), %r14 + //0x000024eb LBB0_406 + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x000024eb movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdd, //0x000024f0 pcmpgtb %xmm5, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xea, //0x000024f4 pcmpgtb %xmm10, %xmm5 + 0x66, 0x0f, 0xdb, 0xeb, //0x000024f9 pand %xmm3, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x000024fd pmovmskb %xmm5, %ecx + 0x48, 0x09, 0xce, //0x00002501 orq %rcx, %rsi + 0x4d, 0x85, 0xdb, //0x00002504 testq %r11, %r11 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002507 movq $-80(%rbp), %r13 + 0x0f, 0x85, 0x93, 0x00, 0x00, 0x00, //0x0000250b jne LBB0_424 + 0x48, 0x85, 0xf6, //0x00002511 testq %rsi, %rsi + 0x0f, 0x85, 0xf7, 0x16, 0x00, 0x00, //0x00002514 jne LBB0_645 + 0x48, 0x8b, 0x75, 0xb8, //0x0000251a movq $-72(%rbp), %rsi + 0x48, 0x83, 0xc6, 0xc0, //0x0000251e addq $-64, %rsi + 0x48, 0x83, 0xc0, 0x40, //0x00002522 addq $64, %rax + 0x48, 0x83, 0xfe, 0x3f, //0x00002526 cmpq $63, %rsi + 0x0f, 0x87, 0xa0, 0xfe, 0xff, 0xff, //0x0000252a ja LBB0_403 + 0xe9, 0xd5, 0x07, 0x00, 0x00, //0x00002530 jmp LBB0_409 + //0x00002535 LBB0_420 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00002535 cmpq $-1, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x0000253a movq $-48(%rbp), %r14 + 0x0f, 0x85, 0x14, 0x00, 0x00, 0x00, //0x0000253e jne LBB0_423 + 0x49, 0x0f, 0xbc, 0xcd, //0x00002544 bsfq %r13, %rcx + 0x48, 0x01, 0xc1, //0x00002548 addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x0000254b movq %rcx, $-56(%rbp) + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x0000254f jmp LBB0_423 + //0x00002554 LBB0_422 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002554 movq $-48(%rbp), %r14 + //0x00002558 LBB0_423 + 0x4c, 0x89, 0xd1, //0x00002558 movq %r10, %rcx + 0x48, 0xf7, 0xd1, //0x0000255b notq %rcx + 0x4c, 0x21, 0xe9, //0x0000255e andq %r13, %rcx + 0x48, 0x8d, 0x14, 0x09, //0x00002561 leaq (%rcx,%rcx), %rdx + 0x4c, 0x09, 0xd2, //0x00002565 orq %r10, %rdx + 0x48, 0x89, 0xd7, //0x00002568 movq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x0000256b notq %rdi + 0x4c, 0x21, 0xef, //0x0000256e andq %r13, %rdi + 0x48, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, //0x00002571 movabsq $-6148914691236517206, %rbx + 0x48, 0x21, 0xdf, //0x0000257b andq %rbx, %rdi + 0x31, 0xdb, //0x0000257e xorl %ebx, %ebx + 0x48, 0x01, 0xcf, //0x00002580 addq %rcx, %rdi + 0x0f, 0x92, 0xc3, //0x00002583 setb %bl + 0x48, 0x01, 0xff, //0x00002586 addq %rdi, %rdi + 0x48, 0xb9, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, //0x00002589 movabsq $6148914691236517205, %rcx + 0x48, 0x31, 0xcf, //0x00002593 xorq %rcx, %rdi + 0x48, 0x21, 0xd7, //0x00002596 andq %rdx, %rdi + 0x48, 0xf7, 0xd7, //0x00002599 notq %rdi + 0x49, 0x21, 0xfb, //0x0000259c andq %rdi, %r11 + 0xe9, 0x47, 0xff, 0xff, 0xff, //0x0000259f jmp LBB0_406 + //0x000025a4 LBB0_424 + 0x49, 0x0f, 0xbc, 0xcb, //0x000025a4 bsfq %r11, %rcx + 0x48, 0x85, 0xf6, //0x000025a8 testq %rsi, %rsi + 0x0f, 0x84, 0x8f, 0x00, 0x00, 0x00, //0x000025ab je LBB0_438 + 0x48, 0x0f, 0xbc, 0xd6, //0x000025b1 bsfq %rsi, %rdx + 0xe9, 0x8b, 0x00, 0x00, 0x00, //0x000025b5 jmp LBB0_439 + //0x000025ba LBB0_426 + 0x41, 0x89, 0xcb, //0x000025ba movl %ecx, %r11d + 0x4c, 0x03, 0x5d, 0xb8, //0x000025bd addq $-72(%rbp), %r11 + 0x49, 0x01, 0xdb, //0x000025c1 addq %rbx, %r11 + 0xe9, 0x06, 0x00, 0x00, 0x00, //0x000025c4 jmp LBB0_428 + //0x000025c9 LBB0_427 + 0x48, 0x01, 0xde, //0x000025c9 addq %rbx, %rsi + 0x49, 0x89, 0xf3, //0x000025cc movq %rsi, %r11 + //0x000025cf LBB0_428 + 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x000025cf movq $-1, %rbx + 0x4d, 0x85, 0xf6, //0x000025d6 testq %r14, %r14 + 0x0f, 0x84, 0x56, 0x16, 0x00, 0x00, //0x000025d9 je LBB0_648 + 0x4d, 0x85, 0xed, //0x000025df testq %r13, %r13 + 0x0f, 0x84, 0x4d, 0x16, 0x00, 0x00, //0x000025e2 je LBB0_648 + 0x4d, 0x85, 0xc0, //0x000025e8 testq %r8, %r8 + 0x0f, 0x84, 0x44, 0x16, 0x00, 0x00, //0x000025eb je LBB0_648 + 0x4c, 0x2b, 0x5d, 0xb8, //0x000025f1 subq $-72(%rbp), %r11 + 0x49, 0x8d, 0x4b, 0xff, //0x000025f5 leaq $-1(%r11), %rcx + 0x49, 0x39, 0xce, //0x000025f9 cmpq %rcx, %r14 + 0x0f, 0x84, 0x33, 0x00, 0x00, 0x00, //0x000025fc je LBB0_437 + 0x49, 0x39, 0xcd, //0x00002602 cmpq %rcx, %r13 + 0x0f, 0x84, 0x2a, 0x00, 0x00, 0x00, //0x00002605 je LBB0_437 + 0x49, 0x39, 0xc8, //0x0000260b cmpq %rcx, %r8 + 0x0f, 0x84, 0x21, 0x00, 0x00, 0x00, //0x0000260e je LBB0_437 + 0x4d, 0x85, 0xed, //0x00002614 testq %r13, %r13 + 0x0f, 0x8e, 0x99, 0x00, 0x00, 0x00, //0x00002617 jle LBB0_446 + 0x49, 0x8d, 0x4d, 0xff, //0x0000261d leaq $-1(%r13), %rcx + 0x49, 0x39, 0xc8, //0x00002621 cmpq %rcx, %r8 + 0x0f, 0x84, 0x8c, 0x00, 0x00, 0x00, //0x00002624 je LBB0_446 + 0x49, 0xf7, 0xd5, //0x0000262a notq %r13 + 0x4c, 0x89, 0xeb, //0x0000262d movq %r13, %rbx + 0xe9, 0x24, 0x06, 0x00, 0x00, //0x00002630 jmp LBB0_486 + //0x00002635 LBB0_437 + 0x49, 0xf7, 0xdb, //0x00002635 negq %r11 + 0x4c, 0x89, 0xdb, //0x00002638 movq %r11, %rbx + 0xe9, 0x19, 0x06, 0x00, 0x00, //0x0000263b jmp LBB0_486 + //0x00002640 LBB0_438 + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002640 movl $64, %edx + //0x00002645 LBB0_439 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002645 movabsq $4294977024, %r11 + 0x48, 0x8b, 0x5d, 0xc0, //0x0000264f movq $-64(%rbp), %rbx + 0x48, 0x39, 0xca, //0x00002653 cmpq %rcx, %rdx + 0x0f, 0x82, 0xfb, 0x15, 0x00, 0x00, //0x00002656 jb LBB0_654 + 0x48, 0x01, 0xc8, //0x0000265c addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000265f addq $1, %rax + //0x00002663 LBB0_441 + 0x48, 0x85, 0xc0, //0x00002663 testq %rax, %rax + 0x0f, 0x88, 0x55, 0x14, 0x00, 0x00, //0x00002666 js LBB0_627 + 0x49, 0x89, 0x06, //0x0000266c movq %rax, (%r14) + 0x48, 0x85, 0xdb, //0x0000266f testq %rbx, %rbx + 0x0f, 0x8f, 0x58, 0xdb, 0xff, 0xff, //0x00002672 jg LBB0_4 + 0xe9, 0xca, 0x15, 0x00, 0x00, //0x00002678 jmp LBB0_443 + //0x0000267d LBB0_131 + 0x4d, 0x85, 0xdb, //0x0000267d testq %r11, %r11 + 0x0f, 0x85, 0xd2, 0x0a, 0x00, 0x00, //0x00002680 jne LBB0_525 + 0x49, 0x01, 0xf2, //0x00002686 addq %rsi, %r10 + 0x49, 0x29, 0xf1, //0x00002689 subq %rsi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x0000268c movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002690 movabsq $4294977024, %r11 + //0x0000269a LBB0_133 + 0x4d, 0x85, 0xc9, //0x0000269a testq %r9, %r9 + 0x0f, 0x8f, 0x1c, 0x0b, 0x00, 0x00, //0x0000269d jg LBB0_529 + 0xe9, 0x07, 0x14, 0x00, 0x00, //0x000026a3 jmp LBB0_650 + //0x000026a8 LBB0_444 + 0x0f, 0xbc, 0xcb, //0x000026a8 bsfl %ebx, %ecx + //0x000026ab LBB0_445 + 0x49, 0xf7, 0xd5, //0x000026ab notq %r13 + 0x49, 0x29, 0xcd, //0x000026ae subq %rcx, %r13 + 0xe9, 0x34, 0x00, 0x00, 0x00, //0x000026b1 jmp LBB0_450 + //0x000026b6 LBB0_446 + 0x4c, 0x89, 0xf1, //0x000026b6 movq %r14, %rcx + 0x4c, 0x09, 0xc1, //0x000026b9 orq %r8, %rcx + 0x0f, 0x99, 0xc2, //0x000026bc setns %dl + 0x0f, 0x88, 0xfb, 0x01, 0x00, 0x00, //0x000026bf js LBB0_453 + 0x4d, 0x39, 0xc6, //0x000026c5 cmpq %r8, %r14 + 0x0f, 0x8c, 0xf2, 0x01, 0x00, 0x00, //0x000026c8 jl LBB0_453 + 0x49, 0xf7, 0xd6, //0x000026ce notq %r14 + 0x4c, 0x89, 0xf3, //0x000026d1 movq %r14, %rbx + 0xe9, 0x80, 0x05, 0x00, 0x00, //0x000026d4 jmp LBB0_486 + //0x000026d9 LBB0_449 + 0x4c, 0x03, 0x65, 0xc0, //0x000026d9 addq $-64(%rbp), %r12 + 0x49, 0x29, 0xf4, //0x000026dd subq %rsi, %r12 + 0x49, 0x29, 0xd4, //0x000026e0 subq %rdx, %r12 + 0x49, 0x83, 0xc4, 0xfe, //0x000026e3 addq $-2, %r12 + 0x4d, 0x89, 0xe5, //0x000026e7 movq %r12, %r13 + //0x000026ea LBB0_450 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000026ea movabsq $4294977024, %r11 + //0x000026f4 LBB0_451 + 0x4d, 0x85, 0xed, //0x000026f4 testq %r13, %r13 + 0x0f, 0x88, 0x99, 0x13, 0x00, 0x00, //0x000026f7 js LBB0_626 + //0x000026fd LBB0_452 + 0x49, 0x01, 0xc5, //0x000026fd addq %rax, %r13 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002700 movq $-48(%rbp), %r14 + 0x4d, 0x89, 0x2e, //0x00002704 movq %r13, (%r14) + 0x48, 0x85, 0xc0, //0x00002707 testq %rax, %rax + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000270a movq $-80(%rbp), %r13 + 0x0f, 0x89, 0xbc, 0xda, 0xff, 0xff, //0x0000270e jns LBB0_4 + 0xe9, 0x96, 0x13, 0x00, 0x00, //0x00002714 jmp LBB0_650 + //0x00002719 LBB0_159 + 0x4d, 0x85, 0xdb, //0x00002719 testq %r11, %r11 + 0x0f, 0x85, 0x7e, 0x0c, 0x00, 0x00, //0x0000271c jne LBB0_552 + 0x49, 0x01, 0xf2, //0x00002722 addq %rsi, %r10 + 0x49, 0x29, 0xf1, //0x00002725 subq %rsi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002728 movq $-48(%rbp), %r14 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000272c movabsq $4294977024, %r11 + //0x00002736 LBB0_161 + 0x4d, 0x85, 0xc9, //0x00002736 testq %r9, %r9 + 0x0f, 0x8f, 0xbf, 0x0c, 0x00, 0x00, //0x00002739 jg LBB0_556 + 0xe9, 0x6b, 0x13, 0x00, 0x00, //0x0000273f jmp LBB0_650 + //0x00002744 LBB0_50 + 0x4c, 0x01, 0xe0, //0x00002744 addq %r12, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00002747 movq $-48(%rbp), %r14 + 0x49, 0x83, 0xf9, 0x20, //0x0000274b cmpq $32, %r9 + 0x0f, 0x82, 0x9e, 0x07, 0x00, 0x00, //0x0000274f jb LBB0_503 + //0x00002755 LBB0_51 + 0xf3, 0x0f, 0x6f, 0x18, //0x00002755 movdqu (%rax), %xmm3 + 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00002759 movdqu $16(%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x0000275e movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002762 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002766 pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x0000276a movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x0000276e pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00002772 pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x74, 0xd9, //0x00002776 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x0000277a pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x74, 0xe1, //0x0000277e pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00002782 pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x00002786 shlq $16, %rcx + 0x48, 0x09, 0xca, //0x0000278a orq %rcx, %rdx + 0x48, 0xc1, 0xe7, 0x10, //0x0000278d shlq $16, %rdi + 0x48, 0x09, 0xfe, //0x00002791 orq %rdi, %rsi + 0x0f, 0x85, 0x5d, 0x0a, 0x00, 0x00, //0x00002794 jne LBB0_532 + 0x4d, 0x85, 0xc0, //0x0000279a testq %r8, %r8 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000279d movabsq $4294977024, %r11 + 0x0f, 0x85, 0x74, 0x0a, 0x00, 0x00, //0x000027a7 jne LBB0_534 + 0x45, 0x31, 0xc0, //0x000027ad xorl %r8d, %r8d + 0x48, 0x85, 0xd2, //0x000027b0 testq %rdx, %rdx + 0x0f, 0x84, 0xc4, 0x0a, 0x00, 0x00, //0x000027b3 je LBB0_536 + //0x000027b9 LBB0_54 + 0x48, 0x0f, 0xbc, 0xca, //0x000027b9 bsfq %rdx, %rcx + 0x4c, 0x29, 0xe0, //0x000027bd subq %r12, %rax + 0x48, 0x01, 0xc8, //0x000027c0 addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000027c3 addq $1, %rax + 0xe9, 0xa3, 0xea, 0xff, 0xff, //0x000027c7 jmp LBB0_229 + //0x000027cc LBB0_171 + 0x4c, 0x8b, 0x65, 0xb8, //0x000027cc movq $-72(%rbp), %r12 + 0x4c, 0x01, 0xe0, //0x000027d0 addq %r12, %rax + 0x49, 0x83, 0xfe, 0x20, //0x000027d3 cmpq $32, %r14 + 0x0f, 0x82, 0x40, 0x07, 0x00, 0x00, //0x000027d7 jb LBB0_505 + //0x000027dd LBB0_172 + 0xf3, 0x0f, 0x6f, 0x20, //0x000027dd movdqu (%rax), %xmm4 + 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x000027e1 movdqu $16(%rax), %xmm3 + 0x66, 0x0f, 0x6f, 0xec, //0x000027e6 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x000027ea pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x000027ee pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x6f, 0xeb, //0x000027f2 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x000027f6 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xfd, //0x000027fa pmovmskb %xmm5, %edi + 0x66, 0x0f, 0x6f, 0xec, //0x000027fe movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x00002802 pcmpeqb %xmm1, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x00002806 pmovmskb %xmm5, %r9d + 0x66, 0x0f, 0x6f, 0xeb, //0x0000280b movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x0000280f pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002813 pmovmskb %xmm5, %edx + 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x00002817 movdqa %xmm12, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x0000281c pcmpgtb %xmm3, %xmm5 + 0x66, 0x41, 0x0f, 0x64, 0xda, //0x00002820 pcmpgtb %xmm10, %xmm3 + 0x66, 0x0f, 0xdb, 0xdd, //0x00002825 pand %xmm5, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002829 pmovmskb %xmm3, %esi + 0x48, 0xc1, 0xe7, 0x10, //0x0000282d shlq $16, %rdi + 0x48, 0x09, 0xf9, //0x00002831 orq %rdi, %rcx + 0x48, 0xc1, 0xe2, 0x10, //0x00002834 shlq $16, %rdx + 0x48, 0xc1, 0xe6, 0x10, //0x00002838 shlq $16, %rsi + 0x49, 0x09, 0xd1, //0x0000283c orq %rdx, %r9 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000283f movabsq $4294977024, %r11 + 0x0f, 0x85, 0x24, 0x0b, 0x00, 0x00, //0x00002849 jne LBB0_550 + 0x48, 0x85, 0xdb, //0x0000284f testq %rbx, %rbx + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002852 movq $-80(%rbp), %r13 + 0x0f, 0x85, 0xf2, 0x0b, 0x00, 0x00, //0x00002856 jne LBB0_559 + 0x31, 0xdb, //0x0000285c xorl %ebx, %ebx + //0x0000285e LBB0_175 + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x0000285e movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00002863 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00002867 pcmpgtb %xmm10, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x0000286c pand %xmm3, %xmm4 + 0x66, 0x0f, 0xd7, 0xd4, //0x00002870 pmovmskb %xmm4, %edx + 0x48, 0x09, 0xd6, //0x00002874 orq %rdx, %rsi + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002877 movl $64, %edx + 0xbf, 0x40, 0x00, 0x00, 0x00, //0x0000287c movl $64, %edi + 0x48, 0x85, 0xc9, //0x00002881 testq %rcx, %rcx + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002884 je LBB0_177 + 0x48, 0x0f, 0xbc, 0xf9, //0x0000288a bsfq %rcx, %rdi + //0x0000288e LBB0_177 + 0x48, 0x85, 0xf6, //0x0000288e testq %rsi, %rsi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002891 je LBB0_179 + 0x48, 0x0f, 0xbc, 0xd6, //0x00002897 bsfq %rsi, %rdx + //0x0000289b LBB0_179 + 0x48, 0x85, 0xc9, //0x0000289b testq %rcx, %rcx + 0x0f, 0x84, 0xd7, 0x01, 0x00, 0x00, //0x0000289e je LBB0_457 + 0x48, 0x39, 0xfa, //0x000028a4 cmpq %rdi, %rdx + 0x0f, 0x82, 0x29, 0x14, 0x00, 0x00, //0x000028a7 jb LBB0_663 + 0x4c, 0x29, 0xe0, //0x000028ad subq %r12, %rax + 0x48, 0x01, 0xf8, //0x000028b0 addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000028b3 addq $1, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x000028b7 movq $-48(%rbp), %r14 + 0xe9, 0xaf, 0xe9, 0xff, 0xff, //0x000028bb jmp LBB0_229 + //0x000028c0 LBB0_453 + 0x49, 0x8d, 0x48, 0xff, //0x000028c0 leaq $-1(%r8), %rcx + 0x49, 0x39, 0xce, //0x000028c4 cmpq %rcx, %r14 + 0x49, 0xf7, 0xd0, //0x000028c7 notq %r8 + 0x4d, 0x0f, 0x45, 0xc3, //0x000028ca cmovneq %r11, %r8 + 0x84, 0xd2, //0x000028ce testb %dl, %dl + 0x4d, 0x0f, 0x44, 0xc3, //0x000028d0 cmoveq %r11, %r8 + 0x4c, 0x89, 0xc3, //0x000028d4 movq %r8, %rbx + 0xe9, 0x7d, 0x03, 0x00, 0x00, //0x000028d7 jmp LBB0_486 + //0x000028dc LBB0_73 + 0x4c, 0x01, 0xe0, //0x000028dc addq %r12, %rax + 0x49, 0x83, 0xf9, 0x20, //0x000028df cmpq $32, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x000028e3 movq $-48(%rbp), %r14 + 0x48, 0x8b, 0x75, 0xc0, //0x000028e7 movq $-64(%rbp), %rsi + 0x0f, 0x82, 0xe5, 0x06, 0x00, 0x00, //0x000028eb jb LBB0_511 + //0x000028f1 LBB0_74 + 0xf3, 0x0f, 0x6f, 0x18, //0x000028f1 movdqu (%rax), %xmm3 + 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x000028f5 movdqu $16(%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x000028fa movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x000028fe pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002902 pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x00002906 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x0000290a pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x0000290e pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x74, 0xd9, //0x00002912 pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xdb, //0x00002916 pmovmskb %xmm3, %ebx + 0x66, 0x0f, 0x74, 0xe1, //0x0000291a pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x0000291e pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x00002922 shlq $16, %rcx + 0x48, 0x09, 0xca, //0x00002926 orq %rcx, %rdx + 0x48, 0xc1, 0xe7, 0x10, //0x00002929 shlq $16, %rdi + 0x48, 0x09, 0xfb, //0x0000292d orq %rdi, %rbx + 0x0f, 0x85, 0x70, 0x0b, 0x00, 0x00, //0x00002930 jne LBB0_561 + 0x4d, 0x85, 0xc0, //0x00002936 testq %r8, %r8 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002939 movabsq $4294977024, %r11 + 0x0f, 0x85, 0x87, 0x0b, 0x00, 0x00, //0x00002943 jne LBB0_563 + 0x45, 0x31, 0xc0, //0x00002949 xorl %r8d, %r8d + 0x48, 0x85, 0xd2, //0x0000294c testq %rdx, %rdx + 0x0f, 0x84, 0xd8, 0x0b, 0x00, 0x00, //0x0000294f je LBB0_565 + //0x00002955 LBB0_77 + 0x48, 0x0f, 0xbc, 0xca, //0x00002955 bsfq %rdx, %rcx + 0x4c, 0x29, 0xe0, //0x00002959 subq %r12, %rax + 0x48, 0x01, 0xc8, //0x0000295c addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000295f addq $1, %rax + 0xe9, 0x8f, 0xee, 0xff, 0xff, //0x00002963 jmp LBB0_313 + //0x00002968 LBB0_198 + 0x4c, 0x8b, 0x45, 0xb8, //0x00002968 movq $-72(%rbp), %r8 + 0x4c, 0x01, 0xc0, //0x0000296c addq %r8, %rax + 0x49, 0x83, 0xfa, 0x20, //0x0000296f cmpq $32, %r10 + 0x0f, 0x82, 0x8c, 0x06, 0x00, 0x00, //0x00002973 jb LBB0_513 + //0x00002979 LBB0_199 + 0xf3, 0x0f, 0x6f, 0x20, //0x00002979 movdqu (%rax), %xmm4 + 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x0000297d movdqu $16(%rax), %xmm3 + 0x66, 0x0f, 0x6f, 0xec, //0x00002982 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002986 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xf5, //0x0000298a pmovmskb %xmm5, %esi + 0x66, 0x0f, 0x6f, 0xeb, //0x0000298e movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002992 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002996 pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x0000299a movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x0000299e pcmpeqb %xmm1, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x000029a2 pmovmskb %xmm5, %r9d + 0x66, 0x0f, 0x6f, 0xeb, //0x000029a7 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x000029ab pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x000029af pmovmskb %xmm5, %ecx + 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x000029b3 movdqa %xmm12, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x000029b8 pcmpgtb %xmm3, %xmm5 + 0x66, 0x41, 0x0f, 0x64, 0xda, //0x000029bc pcmpgtb %xmm10, %xmm3 + 0x66, 0x0f, 0xdb, 0xdd, //0x000029c1 pand %xmm5, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x000029c5 pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe2, 0x10, //0x000029c9 shlq $16, %rdx + 0x48, 0x09, 0xd6, //0x000029cd orq %rdx, %rsi + 0x48, 0xc1, 0xe1, 0x10, //0x000029d0 shlq $16, %rcx + 0x48, 0xc1, 0xe7, 0x10, //0x000029d4 shlq $16, %rdi + 0x49, 0x09, 0xc9, //0x000029d8 orq %rcx, %r9 + 0x0f, 0x85, 0x42, 0x0c, 0x00, 0x00, //0x000029db jne LBB0_579 + 0x4d, 0x85, 0xe4, //0x000029e1 testq %r12, %r12 + 0x4c, 0x8b, 0x6d, 0xb0, //0x000029e4 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000029e8 movabsq $4294977024, %r11 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x45, 0xd6, 0xff, 0xff, //0x000029f2 movdqu $-10683(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x0f, 0x85, 0x48, 0x0c, 0x00, 0x00, //0x000029fb jne LBB0_581 + 0x45, 0x31, 0xe4, //0x00002a01 xorl %r12d, %r12d + //0x00002a04 LBB0_202 + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002a04 movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00002a09 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00002a0d pcmpgtb %xmm10, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x00002a12 pand %xmm3, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00002a16 pmovmskb %xmm4, %ecx + 0x48, 0x09, 0xcf, //0x00002a1a orq %rcx, %rdi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00002a1d movl $64, %ecx + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002a22 movl $64, %edx + 0x48, 0x85, 0xf6, //0x00002a27 testq %rsi, %rsi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002a2a je LBB0_204 + 0x48, 0x0f, 0xbc, 0xd6, //0x00002a30 bsfq %rsi, %rdx + //0x00002a34 LBB0_204 + 0x48, 0x85, 0xff, //0x00002a34 testq %rdi, %rdi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002a37 je LBB0_206 + 0x48, 0x0f, 0xbc, 0xcf, //0x00002a3d bsfq %rdi, %rcx + //0x00002a41 LBB0_206 + 0x48, 0x85, 0xf6, //0x00002a41 testq %rsi, %rsi + 0x0f, 0x84, 0xfe, 0x00, 0x00, 0x00, //0x00002a44 je LBB0_469 + 0x48, 0x39, 0xd1, //0x00002a4a cmpq %rdx, %rcx + 0x0f, 0x82, 0x92, 0x12, 0x00, 0x00, //0x00002a4d jb LBB0_664 + 0x4c, 0x29, 0xc0, //0x00002a53 subq %r8, %rax + 0x48, 0x01, 0xd0, //0x00002a56 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002a59 addq $1, %rax + 0x48, 0x8b, 0x75, 0xc0, //0x00002a5d movq $-64(%rbp), %rsi + 0xe9, 0x91, 0xed, 0xff, 0xff, //0x00002a61 jmp LBB0_313 + //0x00002a66 LBB0_454 + 0x89, 0xd9, //0x00002a66 movl %ebx, %ecx + 0xe9, 0x3e, 0xfc, 0xff, 0xff, //0x00002a68 jmp LBB0_445 + //0x00002a6d LBB0_455 + 0x89, 0xf1, //0x00002a6d movl %esi, %ecx + 0xe9, 0x37, 0xfc, 0xff, 0xff, //0x00002a6f jmp LBB0_445 + //0x00002a74 LBB0_456 + 0x89, 0xd1, //0x00002a74 movl %edx, %ecx + 0xe9, 0x30, 0xfc, 0xff, 0xff, //0x00002a76 jmp LBB0_445 + //0x00002a7b LBB0_457 + 0x48, 0x85, 0xf6, //0x00002a7b testq %rsi, %rsi + 0x0f, 0x85, 0x52, 0x12, 0x00, 0x00, //0x00002a7e jne LBB0_663 + 0x48, 0x83, 0xc0, 0x20, //0x00002a84 addq $32, %rax + 0x49, 0x83, 0xc6, 0xe0, //0x00002a88 addq $-32, %r14 + 0x48, 0x85, 0xdb, //0x00002a8c testq %rbx, %rbx + 0x0f, 0x85, 0x9f, 0x04, 0x00, 0x00, //0x00002a8f jne LBB0_506 + //0x00002a95 LBB0_459 + 0x48, 0x8b, 0x4d, 0xc8, //0x00002a95 movq $-56(%rbp), %rcx + 0x4d, 0x85, 0xf6, //0x00002a99 testq %r14, %r14 + 0x0f, 0x84, 0xf8, 0x11, 0x00, 0x00, //0x00002a9c je LBB0_508 + //0x00002aa2 LBB0_460 + 0x0f, 0xb6, 0x10, //0x00002aa2 movzbl (%rax), %edx + 0x80, 0xfa, 0x22, //0x00002aa5 cmpb $34, %dl + 0x0f, 0x84, 0x8a, 0x00, 0x00, 0x00, //0x00002aa8 je LBB0_468 + 0x80, 0xfa, 0x5c, //0x00002aae cmpb $92, %dl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002ab1 je LBB0_464 + 0x80, 0xfa, 0x1f, //0x00002ab7 cmpb $31, %dl + 0x0f, 0x86, 0x30, 0x12, 0x00, 0x00, //0x00002aba jbe LBB0_665 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002ac0 movq $-1, %rdx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002ac7 movl $1, %esi + 0x48, 0x01, 0xf0, //0x00002acc addq %rsi, %rax + 0x49, 0x01, 0xd6, //0x00002acf addq %rdx, %r14 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002ad2 jne LBB0_460 + 0xe9, 0xbd, 0x11, 0x00, 0x00, //0x00002ad8 jmp LBB0_508 + //0x00002add LBB0_464 + 0x49, 0x83, 0xfe, 0x01, //0x00002add cmpq $1, %r14 + 0x0f, 0x84, 0xb3, 0x11, 0x00, 0x00, //0x00002ae1 je LBB0_508 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002ae7 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00002aec movdqa %xmm2, %xmm5 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00002af0 movq $-2, %rdx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002af7 movl $2, %esi + 0x48, 0x83, 0xf9, 0xff, //0x00002afc cmpq $-1, %rcx + 0x0f, 0x85, 0x0a, 0x00, 0x00, 0x00, //0x00002b00 jne LBB0_467 + 0x48, 0x89, 0xc1, //0x00002b06 movq %rax, %rcx + 0x4c, 0x29, 0xe1, //0x00002b09 subq %r12, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00002b0c movq %rcx, $-56(%rbp) + //0x00002b10 LBB0_467 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002b10 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002b14 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x00002b1e movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00002b22 movdqa %xmm6, %xmm13 + 0x48, 0x01, 0xf0, //0x00002b27 addq %rsi, %rax + 0x49, 0x01, 0xd6, //0x00002b2a addq %rdx, %r14 + 0x0f, 0x85, 0x6f, 0xff, 0xff, 0xff, //0x00002b2d jne LBB0_460 + 0xe9, 0x62, 0x11, 0x00, 0x00, //0x00002b33 jmp LBB0_508 + //0x00002b38 LBB0_468 + 0x4c, 0x29, 0xe0, //0x00002b38 subq %r12, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002b3b addq $1, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00002b3f movq $-48(%rbp), %r14 + 0xe9, 0x27, 0xe7, 0xff, 0xff, //0x00002b43 jmp LBB0_229 + //0x00002b48 LBB0_469 + 0x48, 0x85, 0xff, //0x00002b48 testq %rdi, %rdi + 0x0f, 0x85, 0x94, 0x11, 0x00, 0x00, //0x00002b4b jne LBB0_664 + 0x48, 0x83, 0xc0, 0x20, //0x00002b51 addq $32, %rax + 0x49, 0x83, 0xc2, 0xe0, //0x00002b55 addq $-32, %r10 + 0x4d, 0x85, 0xe4, //0x00002b59 testq %r12, %r12 + 0x0f, 0x85, 0xc3, 0x04, 0x00, 0x00, //0x00002b5c jne LBB0_514 + //0x00002b62 LBB0_471 + 0x48, 0x8b, 0x4d, 0xc8, //0x00002b62 movq $-56(%rbp), %rcx + 0x4d, 0x85, 0xd2, //0x00002b66 testq %r10, %r10 + 0x0f, 0x84, 0x60, 0x0f, 0x00, 0x00, //0x00002b69 je LBB0_628 + //0x00002b6f LBB0_472 + 0x0f, 0xb6, 0x10, //0x00002b6f movzbl (%rax), %edx + 0x80, 0xfa, 0x22, //0x00002b72 cmpb $34, %dl + 0x0f, 0x84, 0xb5, 0x00, 0x00, 0x00, //0x00002b75 je LBB0_482 + 0x80, 0xfa, 0x5c, //0x00002b7b cmpb $92, %dl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002b7e je LBB0_477 + 0x80, 0xfa, 0x1f, //0x00002b84 cmpb $31, %dl + 0x0f, 0x86, 0x6f, 0x11, 0x00, 0x00, //0x00002b87 jbe LBB0_666 + 0x48, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002b8d movq $-1, %rdx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002b94 movl $1, %esi + //0x00002b99 LBB0_476 + 0x48, 0x01, 0xf0, //0x00002b99 addq %rsi, %rax + 0x49, 0x01, 0xd2, //0x00002b9c addq %rdx, %r10 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002b9f jne LBB0_472 + 0xe9, 0x25, 0x0f, 0x00, 0x00, //0x00002ba5 jmp LBB0_628 + //0x00002baa LBB0_477 + 0x49, 0x83, 0xfa, 0x01, //0x00002baa cmpq $1, %r10 + 0x0f, 0x84, 0x05, 0x11, 0x00, 0x00, //0x00002bae je LBB0_524 + 0x66, 0x0f, 0x6f, 0xea, //0x00002bb4 movdqa %xmm2, %xmm5 + 0x48, 0xc7, 0xc2, 0xfe, 0xff, 0xff, 0xff, //0x00002bb8 movq $-2, %rdx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002bbf movl $2, %esi + 0x48, 0x83, 0xf9, 0xff, //0x00002bc4 cmpq $-1, %rcx + 0x0f, 0x84, 0x28, 0x00, 0x00, 0x00, //0x00002bc8 je LBB0_480 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002bce movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002bd2 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002bd6 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x00002be0 movdqa %xmm5, %xmm2 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x53, 0xd4, 0xff, 0xff, //0x00002be4 movdqu $-11181(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x4c, 0x8b, 0x45, 0xb8, //0x00002bed movq $-72(%rbp), %r8 + 0xe9, 0xa3, 0xff, 0xff, 0xff, //0x00002bf1 jmp LBB0_476 + //0x00002bf6 LBB0_480 + 0x48, 0x89, 0xc1, //0x00002bf6 movq %rax, %rcx + 0x4c, 0x8b, 0x45, 0xb8, //0x00002bf9 movq $-72(%rbp), %r8 + 0x4c, 0x29, 0xc1, //0x00002bfd subq %r8, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00002c00 movq %rcx, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x00002c04 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002c08 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002c0c movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x00002c16 movdqa %xmm5, %xmm2 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x1d, 0xd4, 0xff, 0xff, //0x00002c1a movdqu $-11235(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0xe9, 0x71, 0xff, 0xff, 0xff, //0x00002c23 jmp LBB0_476 + //0x00002c28 LBB0_481 + 0x0f, 0xbc, 0xce, //0x00002c28 bsfl %esi, %ecx + 0xe9, 0x23, 0x00, 0x00, 0x00, //0x00002c2b jmp LBB0_485 + //0x00002c30 LBB0_482 + 0x4c, 0x29, 0xc0, //0x00002c30 subq %r8, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002c33 addq $1, %rax + 0x48, 0x8b, 0x75, 0xc0, //0x00002c37 movq $-64(%rbp), %rsi + 0xe9, 0xb7, 0xeb, 0xff, 0xff, //0x00002c3b jmp LBB0_313 + //0x00002c40 LBB0_483 + 0x49, 0x01, 0xc4, //0x00002c40 addq %rax, %r12 + 0x49, 0x29, 0xf4, //0x00002c43 subq %rsi, %r12 + 0x48, 0xf7, 0xd3, //0x00002c46 notq %rbx + 0x4c, 0x01, 0xe3, //0x00002c49 addq %r12, %rbx + 0xe9, 0x08, 0x00, 0x00, 0x00, //0x00002c4c jmp LBB0_486 + //0x00002c51 LBB0_484 + 0x89, 0xd1, //0x00002c51 movl %edx, %ecx + //0x00002c53 LBB0_485 + 0x48, 0xf7, 0xd3, //0x00002c53 notq %rbx + 0x48, 0x29, 0xcb, //0x00002c56 subq %rcx, %rbx + //0x00002c59 LBB0_486 + 0x48, 0x85, 0xdb, //0x00002c59 testq %rbx, %rbx + 0x0f, 0x88, 0xd3, 0x0f, 0x00, 0x00, //0x00002c5c js LBB0_648 + //0x00002c62 LBB0_487 + 0x48, 0x01, 0xc3, //0x00002c62 addq %rax, %rbx + 0x4c, 0x8b, 0x75, 0xd0, //0x00002c65 movq $-48(%rbp), %r14 + 0x49, 0x89, 0x1e, //0x00002c69 movq %rbx, (%r14) + //0x00002c6c LBB0_488 + 0x48, 0x85, 0xc0, //0x00002c6c testq %rax, %rax + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002c6f movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002c73 movabsq $4294977024, %r11 + 0x0f, 0x8f, 0x4d, 0xd5, 0xff, 0xff, //0x00002c7d jg LBB0_4 + 0xe9, 0xe0, 0x0d, 0x00, 0x00, //0x00002c83 jmp LBB0_232 + //0x00002c88 LBB0_246 + 0x4c, 0x01, 0xe0, //0x00002c88 addq %r12, %rax + 0x49, 0x83, 0xf9, 0x20, //0x00002c8b cmpq $32, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002c8f movq $-48(%rbp), %r14 + 0x48, 0x8b, 0x5d, 0xc0, //0x00002c93 movq $-64(%rbp), %rbx + 0x0f, 0x82, 0x3e, 0x04, 0x00, 0x00, //0x00002c97 jb LBB0_519 + //0x00002c9d LBB0_247 + 0xf3, 0x0f, 0x6f, 0x18, //0x00002c9d movdqu (%rax), %xmm3 + 0xf3, 0x0f, 0x6f, 0x60, 0x10, //0x00002ca1 movdqu $16(%rax), %xmm4 + 0x66, 0x0f, 0x6f, 0xeb, //0x00002ca6 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002caa pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002cae pmovmskb %xmm5, %edx + 0x66, 0x0f, 0x6f, 0xec, //0x00002cb2 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002cb6 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00002cba pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x74, 0xd9, //0x00002cbe pcmpeqb %xmm1, %xmm3 + 0x66, 0x0f, 0xd7, 0xf3, //0x00002cc2 pmovmskb %xmm3, %esi + 0x66, 0x0f, 0x74, 0xe1, //0x00002cc6 pcmpeqb %xmm1, %xmm4 + 0x66, 0x0f, 0xd7, 0xfc, //0x00002cca pmovmskb %xmm4, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x00002cce shlq $16, %rcx + 0x48, 0x09, 0xca, //0x00002cd2 orq %rcx, %rdx + 0x48, 0xc1, 0xe7, 0x10, //0x00002cd5 shlq $16, %rdi + 0x48, 0x09, 0xfe, //0x00002cd9 orq %rdi, %rsi + 0x0f, 0x85, 0x23, 0x0b, 0x00, 0x00, //0x00002cdc jne LBB0_595 + 0x4d, 0x85, 0xc0, //0x00002ce2 testq %r8, %r8 + 0x0f, 0x85, 0x47, 0x0b, 0x00, 0x00, //0x00002ce5 jne LBB0_597 + 0x45, 0x31, 0xc0, //0x00002ceb xorl %r8d, %r8d + 0x48, 0x85, 0xd2, //0x00002cee testq %rdx, %rdx + 0x0f, 0x84, 0x9d, 0x0b, 0x00, 0x00, //0x00002cf1 je LBB0_599 + //0x00002cf7 LBB0_250 + 0x48, 0x0f, 0xbc, 0xca, //0x00002cf7 bsfq %rdx, %rcx + 0x4c, 0x29, 0xe0, //0x00002cfb subq %r12, %rax + 0x48, 0x01, 0xc8, //0x00002cfe addq %rcx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002d01 addq $1, %rax + 0xe9, 0x59, 0xf9, 0xff, 0xff, //0x00002d05 jmp LBB0_441 + //0x00002d0a LBB0_409 + 0x4c, 0x01, 0xe0, //0x00002d0a addq %r12, %rax + 0x49, 0x89, 0xf2, //0x00002d0d movq %rsi, %r10 + 0x48, 0x83, 0xfe, 0x20, //0x00002d10 cmpq $32, %rsi + 0x0f, 0x82, 0xed, 0x03, 0x00, 0x00, //0x00002d14 jb LBB0_521 + //0x00002d1a LBB0_410 + 0xf3, 0x0f, 0x6f, 0x20, //0x00002d1a movdqu (%rax), %xmm4 + 0xf3, 0x0f, 0x6f, 0x58, 0x10, //0x00002d1e movdqu $16(%rax), %xmm3 + 0x66, 0x0f, 0x6f, 0xec, //0x00002d23 movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002d27 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xf5, //0x00002d2b pmovmskb %xmm5, %esi + 0x66, 0x0f, 0x6f, 0xeb, //0x00002d2f movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe8, //0x00002d33 pcmpeqb %xmm0, %xmm5 + 0x66, 0x0f, 0xd7, 0xcd, //0x00002d37 pmovmskb %xmm5, %ecx + 0x66, 0x0f, 0x6f, 0xec, //0x00002d3b movdqa %xmm4, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x00002d3f pcmpeqb %xmm1, %xmm5 + 0x66, 0x44, 0x0f, 0xd7, 0xcd, //0x00002d43 pmovmskb %xmm5, %r9d + 0x66, 0x0f, 0x6f, 0xeb, //0x00002d48 movdqa %xmm3, %xmm5 + 0x66, 0x0f, 0x74, 0xe9, //0x00002d4c pcmpeqb %xmm1, %xmm5 + 0x66, 0x0f, 0xd7, 0xd5, //0x00002d50 pmovmskb %xmm5, %edx + 0x66, 0x41, 0x0f, 0x6f, 0xec, //0x00002d54 movdqa %xmm12, %xmm5 + 0x66, 0x0f, 0x64, 0xeb, //0x00002d59 pcmpgtb %xmm3, %xmm5 + 0x66, 0x41, 0x0f, 0x64, 0xda, //0x00002d5d pcmpgtb %xmm10, %xmm3 + 0x66, 0x0f, 0xdb, 0xdd, //0x00002d62 pand %xmm5, %xmm3 + 0x66, 0x0f, 0xd7, 0xfb, //0x00002d66 pmovmskb %xmm3, %edi + 0x48, 0xc1, 0xe1, 0x10, //0x00002d6a shlq $16, %rcx + 0x48, 0x09, 0xce, //0x00002d6e orq %rcx, %rsi + 0x48, 0xc1, 0xe2, 0x10, //0x00002d71 shlq $16, %rdx + 0x48, 0xc1, 0xe7, 0x10, //0x00002d75 shlq $16, %rdi + 0x49, 0x09, 0xd1, //0x00002d79 orq %rdx, %r9 + 0x0f, 0x85, 0xf6, 0x0b, 0x00, 0x00, //0x00002d7c jne LBB0_613 + 0x48, 0x85, 0xdb, //0x00002d82 testq %rbx, %rbx + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002d85 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002d89 movabsq $4294977024, %r11 + 0x0f, 0x85, 0x0c, 0x0c, 0x00, 0x00, //0x00002d93 jne LBB0_615 + 0x31, 0xdb, //0x00002d99 xorl %ebx, %ebx + //0x00002d9b LBB0_413 + 0x66, 0x41, 0x0f, 0x6f, 0xdc, //0x00002d9b movdqa %xmm12, %xmm3 + 0x66, 0x0f, 0x64, 0xdc, //0x00002da0 pcmpgtb %xmm4, %xmm3 + 0x66, 0x41, 0x0f, 0x64, 0xe2, //0x00002da4 pcmpgtb %xmm10, %xmm4 + 0x66, 0x0f, 0xdb, 0xe3, //0x00002da9 pand %xmm3, %xmm4 + 0x66, 0x0f, 0xd7, 0xcc, //0x00002dad pmovmskb %xmm4, %ecx + 0x48, 0x09, 0xcf, //0x00002db1 orq %rcx, %rdi + 0xb9, 0x40, 0x00, 0x00, 0x00, //0x00002db4 movl $64, %ecx + 0xba, 0x40, 0x00, 0x00, 0x00, //0x00002db9 movl $64, %edx + 0x48, 0x85, 0xf6, //0x00002dbe testq %rsi, %rsi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002dc1 je LBB0_415 + 0x48, 0x0f, 0xbc, 0xd6, //0x00002dc7 bsfq %rsi, %rdx + //0x00002dcb LBB0_415 + 0x48, 0x85, 0xff, //0x00002dcb testq %rdi, %rdi + 0x0f, 0x84, 0x04, 0x00, 0x00, 0x00, //0x00002dce je LBB0_417 + 0x48, 0x0f, 0xbc, 0xcf, //0x00002dd4 bsfq %rdi, %rcx + //0x00002dd8 LBB0_417 + 0x48, 0x85, 0xf6, //0x00002dd8 testq %rsi, %rsi + 0x0f, 0x84, 0x5c, 0x00, 0x00, 0x00, //0x00002ddb je LBB0_491 + 0x4c, 0x29, 0xe0, //0x00002de1 subq %r12, %rax + 0x48, 0x39, 0xd1, //0x00002de4 cmpq %rdx, %rcx + 0x0f, 0x82, 0x24, 0x0f, 0x00, 0x00, //0x00002de7 jb LBB0_668 + 0x48, 0x01, 0xd0, //0x00002ded addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002df0 addq $1, %rax + 0x48, 0x8b, 0x5d, 0xc0, //0x00002df4 movq $-64(%rbp), %rbx + 0xe9, 0x66, 0xf8, 0xff, 0xff, //0x00002df8 jmp LBB0_441 + //0x00002dfd LBB0_489 + 0x4b, 0x8d, 0x04, 0x04, //0x00002dfd leaq (%r12,%r8), %rax + 0x48, 0x85, 0xc9, //0x00002e01 testq %rcx, %rcx + 0x4c, 0x8b, 0x75, 0xd0, //0x00002e04 movq $-48(%rbp), %r14 + 0x48, 0xbf, 0x00, 0x26, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, //0x00002e08 movabsq $17596481021440, %rdi + 0x0f, 0x85, 0xa9, 0xdd, 0xff, 0xff, //0x00002e12 jne LBB0_139 + 0xe9, 0xe4, 0xdd, 0xff, 0xff, //0x00002e18 jmp LBB0_146 + //0x00002e1d LBB0_490 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00002e1d movq $-1, %r8 + 0x48, 0x89, 0xfe, //0x00002e24 movq %rdi, %rsi + 0x4d, 0x89, 0xf3, //0x00002e27 movq %r14, %r11 + 0x49, 0xc7, 0xc7, 0xff, 0xff, 0xff, 0xff, //0x00002e2a movq $-1, %r15 + 0x49, 0xc7, 0xc2, 0xff, 0xff, 0xff, 0xff, //0x00002e31 movq $-1, %r10 + 0xe9, 0x96, 0xd9, 0xff, 0xff, //0x00002e38 jmp LBB0_105 + //0x00002e3d LBB0_491 + 0x48, 0x85, 0xff, //0x00002e3d testq %rdi, %rdi + 0x0f, 0x85, 0xe0, 0x0e, 0x00, 0x00, //0x00002e40 jne LBB0_669 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002e46 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00002e4b movdqa %xmm2, %xmm5 + 0x48, 0x83, 0xc0, 0x20, //0x00002e4f addq $32, %rax + 0x49, 0x83, 0xc2, 0xe0, //0x00002e53 addq $-32, %r10 + 0x48, 0x85, 0xdb, //0x00002e57 testq %rbx, %rbx + 0x0f, 0x85, 0xb9, 0x02, 0x00, 0x00, //0x00002e5a jne LBB0_522 + //0x00002e60 LBB0_493 + 0x48, 0x8b, 0x55, 0xc8, //0x00002e60 movq $-56(%rbp), %rdx + 0x4d, 0x85, 0xd2, //0x00002e64 testq %r10, %r10 + 0x0f, 0x84, 0x4c, 0x0e, 0x00, 0x00, //0x00002e67 je LBB0_524 + //0x00002e6d LBB0_494 + 0x0f, 0xb6, 0x08, //0x00002e6d movzbl (%rax), %ecx + 0x80, 0xf9, 0x22, //0x00002e70 cmpb $34, %cl + 0x0f, 0x84, 0x11, 0x01, 0x00, 0x00, //0x00002e73 je LBB0_509 + 0x80, 0xf9, 0x5c, //0x00002e79 cmpb $92, %cl + 0x0f, 0x84, 0x26, 0x00, 0x00, 0x00, //0x00002e7c je LBB0_499 + 0x80, 0xf9, 0x1f, //0x00002e82 cmpb $31, %cl + 0x0f, 0x86, 0xa6, 0x0e, 0x00, 0x00, //0x00002e85 jbe LBB0_670 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00002e8b movq $-1, %rcx + 0xbe, 0x01, 0x00, 0x00, 0x00, //0x00002e92 movl $1, %esi + //0x00002e97 LBB0_498 + 0x48, 0x01, 0xf0, //0x00002e97 addq %rsi, %rax + 0x49, 0x01, 0xca, //0x00002e9a addq %rcx, %r10 + 0x0f, 0x85, 0xca, 0xff, 0xff, 0xff, //0x00002e9d jne LBB0_494 + 0xe9, 0x11, 0x0e, 0x00, 0x00, //0x00002ea3 jmp LBB0_524 + //0x00002ea8 LBB0_499 + 0x49, 0x83, 0xfa, 0x01, //0x00002ea8 cmpq $1, %r10 + 0x0f, 0x84, 0x07, 0x0e, 0x00, 0x00, //0x00002eac je LBB0_524 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x00002eb2 movq $-2, %rcx + 0xbe, 0x02, 0x00, 0x00, 0x00, //0x00002eb9 movl $2, %esi + 0x48, 0x83, 0xfa, 0xff, //0x00002ebe cmpq $-1, %rdx + 0x0f, 0x85, 0xcf, 0xff, 0xff, 0xff, //0x00002ec2 jne LBB0_498 + 0x48, 0x89, 0xc2, //0x00002ec8 movq %rax, %rdx + 0x4c, 0x29, 0xe2, //0x00002ecb subq %r12, %rdx + 0x48, 0x89, 0x55, 0xc8, //0x00002ece movq %rdx, $-56(%rbp) + 0xe9, 0xc0, 0xff, 0xff, 0xff, //0x00002ed2 jmp LBB0_498 + //0x00002ed7 LBB0_502 + 0x48, 0x8b, 0x45, 0xc0, //0x00002ed7 movq $-64(%rbp), %rax + 0x4c, 0x01, 0xe0, //0x00002edb addq %r12, %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002ede movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x00002ee6 xorl %r8d, %r8d + 0x49, 0x83, 0xf9, 0x20, //0x00002ee9 cmpq $32, %r9 + 0x0f, 0x83, 0x62, 0xf8, 0xff, 0xff, //0x00002eed jae LBB0_51 + //0x00002ef3 LBB0_503 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002ef3 movabsq $4294977024, %r11 + 0xe9, 0x83, 0x03, 0x00, 0x00, //0x00002efd jmp LBB0_537 + //0x00002f02 LBB0_504 + 0x48, 0x8b, 0x45, 0xc0, //0x00002f02 movq $-64(%rbp), %rax + 0x4c, 0x01, 0xe0, //0x00002f06 addq %r12, %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002f09 movq $-1, $-56(%rbp) + 0x31, 0xdb, //0x00002f11 xorl %ebx, %ebx + 0x49, 0x83, 0xfe, 0x20, //0x00002f13 cmpq $32, %r14 + 0x0f, 0x83, 0xc0, 0xf8, 0xff, 0xff, //0x00002f17 jae LBB0_172 + //0x00002f1d LBB0_505 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002f1d movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f21 movabsq $4294977024, %r11 + 0x48, 0x85, 0xdb, //0x00002f2b testq %rbx, %rbx + 0x0f, 0x84, 0x61, 0xfb, 0xff, 0xff, //0x00002f2e je LBB0_459 + //0x00002f34 LBB0_506 + 0x4d, 0x85, 0xf6, //0x00002f34 testq %r14, %r14 + 0x0f, 0x84, 0x5d, 0x0d, 0x00, 0x00, //0x00002f37 je LBB0_508 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00002f3d movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00002f42 movdqa %xmm2, %xmm5 + 0x4c, 0x89, 0xe1, //0x00002f46 movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x00002f49 notq %rcx + 0x48, 0x01, 0xc1, //0x00002f4c addq %rax, %rcx + 0x48, 0x8b, 0x75, 0xc8, //0x00002f4f movq $-56(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x00002f53 cmpq $-1, %rsi + 0x48, 0x89, 0xf2, //0x00002f57 movq %rsi, %rdx + 0x48, 0x0f, 0x44, 0xd1, //0x00002f5a cmoveq %rcx, %rdx + 0x48, 0x0f, 0x45, 0xce, //0x00002f5e cmovneq %rsi, %rcx + 0x48, 0x83, 0xc0, 0x01, //0x00002f62 addq $1, %rax + 0x49, 0x83, 0xc6, 0xff, //0x00002f66 addq $-1, %r14 + 0x48, 0x89, 0x55, 0xc8, //0x00002f6a movq %rdx, $-56(%rbp) + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002f6e movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f72 movabsq $4294977024, %r11 + 0x4d, 0x85, 0xf6, //0x00002f7c testq %r14, %r14 + 0x0f, 0x85, 0x1d, 0xfb, 0xff, 0xff, //0x00002f7f jne LBB0_460 + 0xe9, 0x10, 0x0d, 0x00, 0x00, //0x00002f85 jmp LBB0_508 + //0x00002f8a LBB0_509 + 0x4c, 0x29, 0xe0, //0x00002f8a subq %r12, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00002f8d addq $1, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00002f91 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00002f95 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002f99 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x00002fa3 movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00002fa7 movdqa %xmm6, %xmm13 + 0x48, 0x8b, 0x5d, 0xc0, //0x00002fac movq $-64(%rbp), %rbx + 0xe9, 0xae, 0xf6, 0xff, 0xff, //0x00002fb0 jmp LBB0_441 + //0x00002fb5 LBB0_510 + 0x49, 0x8d, 0x04, 0x14, //0x00002fb5 leaq (%r12,%rdx), %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002fb9 movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x00002fc1 xorl %r8d, %r8d + 0x49, 0x83, 0xf9, 0x20, //0x00002fc4 cmpq $32, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x00002fc8 movq $-48(%rbp), %r14 + 0x48, 0x8b, 0x75, 0xc0, //0x00002fcc movq $-64(%rbp), %rsi + 0x0f, 0x83, 0x1b, 0xf9, 0xff, 0xff, //0x00002fd0 jae LBB0_74 + //0x00002fd6 LBB0_511 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00002fd6 movabsq $4294977024, %r11 + 0xe9, 0x50, 0x05, 0x00, 0x00, //0x00002fe0 jmp LBB0_566 + //0x00002fe5 LBB0_512 + 0x48, 0x8b, 0x45, 0xc0, //0x00002fe5 movq $-64(%rbp), %rax + 0x4c, 0x8b, 0x45, 0xb8, //0x00002fe9 movq $-72(%rbp), %r8 + 0x4c, 0x01, 0xc0, //0x00002fed addq %r8, %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x00002ff0 movq $-1, $-56(%rbp) + 0x45, 0x31, 0xe4, //0x00002ff8 xorl %r12d, %r12d + 0x49, 0x83, 0xfa, 0x20, //0x00002ffb cmpq $32, %r10 + 0x0f, 0x83, 0x74, 0xf9, 0xff, 0xff, //0x00002fff jae LBB0_199 + //0x00003005 LBB0_513 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003005 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003009 movabsq $4294977024, %r11 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0x24, 0xd0, 0xff, 0xff, //0x00003013 movdqu $-12252(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x4d, 0x85, 0xe4, //0x0000301c testq %r12, %r12 + 0x0f, 0x84, 0x3d, 0xfb, 0xff, 0xff, //0x0000301f je LBB0_471 + //0x00003025 LBB0_514 + 0x4d, 0x85, 0xd2, //0x00003025 testq %r10, %r10 + 0x0f, 0x84, 0x8b, 0x0c, 0x00, 0x00, //0x00003028 je LBB0_524 + 0x66, 0x0f, 0x6f, 0xea, //0x0000302e movdqa %xmm2, %xmm5 + 0x4c, 0x8b, 0x45, 0xb8, //0x00003032 movq $-72(%rbp), %r8 + 0x4c, 0x89, 0xc1, //0x00003036 movq %r8, %rcx + 0x48, 0xf7, 0xd1, //0x00003039 notq %rcx + 0x48, 0x01, 0xc1, //0x0000303c addq %rax, %rcx + 0x48, 0x8b, 0x75, 0xc8, //0x0000303f movq $-56(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x00003043 cmpq $-1, %rsi + 0x48, 0x89, 0xf2, //0x00003047 movq %rsi, %rdx + 0x48, 0x0f, 0x44, 0xd1, //0x0000304a cmoveq %rcx, %rdx + 0x48, 0x0f, 0x45, 0xce, //0x0000304e cmovneq %rsi, %rcx + 0x48, 0x83, 0xc0, 0x01, //0x00003052 addq $1, %rax + 0x49, 0x83, 0xc2, 0xff, //0x00003056 addq $-1, %r10 + 0x48, 0x89, 0x55, 0xc8, //0x0000305a movq %rdx, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x0000305e movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003062 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003066 movabsq $4294977024, %r11 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xc7, 0xcf, 0xff, 0xff, //0x00003070 movdqu $-12345(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x4d, 0x85, 0xd2, //0x00003079 testq %r10, %r10 + 0x0f, 0x85, 0xed, 0xfa, 0xff, 0xff, //0x0000307c jne LBB0_472 + 0xe9, 0x48, 0x0a, 0x00, 0x00, //0x00003082 jmp LBB0_628 + //0x00003087 LBB0_516 + 0x49, 0x8d, 0x0c, 0x04, //0x00003087 leaq (%r12,%rax), %rcx + 0x48, 0x85, 0xd2, //0x0000308b testq %rdx, %rdx + 0x0f, 0x85, 0x3f, 0xe9, 0xff, 0xff, //0x0000308e jne LBB0_332 + 0xe9, 0x84, 0xe9, 0xff, 0xff, //0x00003094 jmp LBB0_339 + //0x00003099 LBB0_517 + 0x49, 0xc7, 0xc6, 0xff, 0xff, 0xff, 0xff, //0x00003099 movq $-1, %r14 + 0x48, 0x8b, 0x75, 0xb8, //0x000030a0 movq $-72(%rbp), %rsi + 0x4d, 0x89, 0xca, //0x000030a4 movq %r9, %r10 + 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000030a7 movq $-1, %r8 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x000030ae movq $-1, %r13 + 0xe9, 0x93, 0xe5, 0xff, 0xff, //0x000030b5 jmp LBB0_280 + //0x000030ba LBB0_518 + 0x49, 0x8d, 0x04, 0x14, //0x000030ba leaq (%r12,%rdx), %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000030be movq $-1, $-56(%rbp) + 0x45, 0x31, 0xc0, //0x000030c6 xorl %r8d, %r8d + 0x49, 0x83, 0xf9, 0x20, //0x000030c9 cmpq $32, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x000030cd movq $-48(%rbp), %r14 + 0x48, 0x8b, 0x5d, 0xc0, //0x000030d1 movq $-64(%rbp), %rbx + 0x0f, 0x83, 0xc2, 0xfb, 0xff, 0xff, //0x000030d5 jae LBB0_247 + //0x000030db LBB0_519 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000030db movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000030e0 movdqa %xmm2, %xmm5 + 0xe9, 0xbc, 0x07, 0x00, 0x00, //0x000030e4 jmp LBB0_600 + //0x000030e9 LBB0_520 + 0x48, 0x8b, 0x45, 0xc0, //0x000030e9 movq $-64(%rbp), %rax + 0x4c, 0x01, 0xe0, //0x000030ed addq %r12, %rax + 0x48, 0xc7, 0x45, 0xc8, 0xff, 0xff, 0xff, 0xff, //0x000030f0 movq $-1, $-56(%rbp) + 0x31, 0xdb, //0x000030f8 xorl %ebx, %ebx + 0x49, 0x89, 0xf2, //0x000030fa movq %rsi, %r10 + 0x48, 0x83, 0xfe, 0x20, //0x000030fd cmpq $32, %rsi + 0x0f, 0x83, 0x13, 0xfc, 0xff, 0xff, //0x00003101 jae LBB0_410 + //0x00003107 LBB0_521 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003107 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x0000310c movdqa %xmm2, %xmm5 + 0x48, 0x85, 0xdb, //0x00003110 testq %rbx, %rbx + 0x0f, 0x84, 0x47, 0xfd, 0xff, 0xff, //0x00003113 je LBB0_493 + //0x00003119 LBB0_522 + 0x4d, 0x85, 0xd2, //0x00003119 testq %r10, %r10 + 0x0f, 0x84, 0x97, 0x0b, 0x00, 0x00, //0x0000311c je LBB0_524 + 0x4c, 0x89, 0xe2, //0x00003122 movq %r12, %rdx + 0x48, 0xf7, 0xd2, //0x00003125 notq %rdx + 0x48, 0x01, 0xc2, //0x00003128 addq %rax, %rdx + 0x48, 0x8b, 0x75, 0xc8, //0x0000312b movq $-56(%rbp), %rsi + 0x48, 0x83, 0xfe, 0xff, //0x0000312f cmpq $-1, %rsi + 0x48, 0x89, 0xf1, //0x00003133 movq %rsi, %rcx + 0x48, 0x0f, 0x44, 0xca, //0x00003136 cmoveq %rdx, %rcx + 0x48, 0x0f, 0x45, 0xd6, //0x0000313a cmovneq %rsi, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x0000313e addq $1, %rax + 0x49, 0x83, 0xc2, 0xff, //0x00003142 addq $-1, %r10 + 0x48, 0x89, 0x4d, 0xc8, //0x00003146 movq %rcx, $-56(%rbp) + 0x4d, 0x85, 0xd2, //0x0000314a testq %r10, %r10 + 0x0f, 0x85, 0x1a, 0xfd, 0xff, 0xff, //0x0000314d jne LBB0_494 + 0xe9, 0x61, 0x0b, 0x00, 0x00, //0x00003153 jmp LBB0_524 + //0x00003158 LBB0_525 + 0x49, 0x39, 0xf1, //0x00003158 cmpq %rsi, %r9 + 0x0f, 0x84, 0x4e, 0x09, 0x00, 0x00, //0x0000315b je LBB0_650 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003161 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003166 movdqa %xmm2, %xmm5 + 0x49, 0x01, 0xf2, //0x0000316a addq %rsi, %r10 + 0x49, 0x83, 0xc2, 0x01, //0x0000316d addq $1, %r10 + 0x48, 0xf7, 0xd6, //0x00003171 notq %rsi + 0x49, 0x01, 0xf1, //0x00003174 addq %rsi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x00003177 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000317b movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000317f movabsq $4294977024, %r11 + 0x4d, 0x85, 0xc9, //0x00003189 testq %r9, %r9 + 0x0f, 0x8f, 0x2d, 0x00, 0x00, 0x00, //0x0000318c jg LBB0_529 + 0xe9, 0x18, 0x09, 0x00, 0x00, //0x00003192 jmp LBB0_650 + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, //0x00003197 .p2align 4, 0x90 + //0x000031a0 LBB0_527 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000031a0 movq $-2, %rcx + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x000031a7 movl $2, %eax + 0x49, 0x01, 0xc2, //0x000031ac addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000031af movq $-1, %rax + 0x49, 0x01, 0xc9, //0x000031b6 addq %rcx, %r9 + 0x0f, 0x8e, 0xf0, 0x08, 0x00, 0x00, //0x000031b9 jle LBB0_650 + //0x000031bf LBB0_529 + 0x41, 0x0f, 0xb6, 0x02, //0x000031bf movzbl (%r10), %eax + 0x3c, 0x5c, //0x000031c3 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x000031c5 je LBB0_527 + 0x3c, 0x22, //0x000031cb cmpb $34, %al + 0x0f, 0x84, 0x26, 0x06, 0x00, 0x00, //0x000031cd je LBB0_594 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000031d3 movq $-1, %rcx + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000031da movl $1, %eax + 0x49, 0x01, 0xc2, //0x000031df addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000031e2 movq $-1, %rax + 0x49, 0x01, 0xc9, //0x000031e9 addq %rcx, %r9 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x000031ec jg LBB0_529 + 0xe9, 0xb8, 0x08, 0x00, 0x00, //0x000031f2 jmp LBB0_650 + //0x000031f7 LBB0_532 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000031f7 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000031fc movdqa %xmm2, %xmm5 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003200 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x00003205 jne LBB0_535 + 0x48, 0x89, 0xc1, //0x0000320b movq %rax, %rcx + 0x4c, 0x29, 0xe1, //0x0000320e subq %r12, %rcx + 0x48, 0x0f, 0xbc, 0xfe, //0x00003211 bsfq %rsi, %rdi + 0x48, 0x01, 0xcf, //0x00003215 addq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xc8, //0x00003218 movq %rdi, $-56(%rbp) + 0xe9, 0x09, 0x00, 0x00, 0x00, //0x0000321c jmp LBB0_535 + //0x00003221 LBB0_534 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003221 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003226 movdqa %xmm2, %xmm5 + //0x0000322a LBB0_535 + 0x44, 0x89, 0xc1, //0x0000322a movl %r8d, %ecx + 0xf7, 0xd1, //0x0000322d notl %ecx + 0x21, 0xf1, //0x0000322f andl %esi, %ecx + 0x41, 0x8d, 0x3c, 0x48, //0x00003231 leal (%r8,%rcx,2), %edi + 0x8d, 0x1c, 0x09, //0x00003235 leal (%rcx,%rcx), %ebx + 0xf7, 0xd3, //0x00003238 notl %ebx + 0x21, 0xf3, //0x0000323a andl %esi, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000323c andl $-1431655766, %ebx + 0x45, 0x31, 0xc0, //0x00003242 xorl %r8d, %r8d + 0x01, 0xcb, //0x00003245 addl %ecx, %ebx + 0x41, 0x0f, 0x92, 0xc0, //0x00003247 setb %r8b + 0x01, 0xdb, //0x0000324b addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x0000324d xorl $1431655765, %ebx + 0x21, 0xfb, //0x00003253 andl %edi, %ebx + 0xf7, 0xd3, //0x00003255 notl %ebx + 0x21, 0xda, //0x00003257 andl %ebx, %edx + 0x4c, 0x8b, 0x75, 0xd0, //0x00003259 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000325d movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003261 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x0000326b movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x0000326f movdqa %xmm6, %xmm13 + 0x48, 0x85, 0xd2, //0x00003274 testq %rdx, %rdx + 0x0f, 0x85, 0x3c, 0xf5, 0xff, 0xff, //0x00003277 jne LBB0_54 + //0x0000327d LBB0_536 + 0x48, 0x83, 0xc0, 0x20, //0x0000327d addq $32, %rax + 0x49, 0x83, 0xc1, 0xe0, //0x00003281 addq $-32, %r9 + //0x00003285 LBB0_537 + 0x4d, 0x85, 0xc0, //0x00003285 testq %r8, %r8 + 0x0f, 0x85, 0x19, 0x04, 0x00, 0x00, //0x00003288 jne LBB0_583 + 0x4c, 0x89, 0xe1, //0x0000328e movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x00003291 notq %rcx + 0x48, 0x8b, 0x55, 0xc8, //0x00003294 movq $-56(%rbp), %rdx + 0x4d, 0x85, 0xc9, //0x00003298 testq %r9, %r9 + 0x0f, 0x84, 0x9e, 0x00, 0x00, 0x00, //0x0000329b je LBB0_549 + //0x000032a1 LBB0_539 + 0x48, 0x83, 0xc1, 0x01, //0x000032a1 addq $1, %rcx + //0x000032a5 LBB0_540 + 0x31, 0xf6, //0x000032a5 xorl %esi, %esi + //0x000032a7 LBB0_541 + 0x0f, 0xb6, 0x1c, 0x30, //0x000032a7 movzbl (%rax,%rsi), %ebx + 0x80, 0xfb, 0x22, //0x000032ab cmpb $34, %bl + 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x000032ae je LBB0_548 + 0x80, 0xfb, 0x5c, //0x000032b4 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000032b7 je LBB0_546 + 0x48, 0x83, 0xc6, 0x01, //0x000032bd addq $1, %rsi + 0x49, 0x39, 0xf1, //0x000032c1 cmpq %rsi, %r9 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000032c4 jne LBB0_541 + 0xe9, 0x78, 0x00, 0x00, 0x00, //0x000032ca jmp LBB0_544 + //0x000032cf LBB0_546 + 0x49, 0x8d, 0x79, 0xff, //0x000032cf leaq $-1(%r9), %rdi + 0x48, 0x39, 0xf7, //0x000032d3 cmpq %rsi, %rdi + 0x0f, 0x84, 0xbe, 0x09, 0x00, 0x00, //0x000032d6 je LBB0_508 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000032dc movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000032e1 movdqa %xmm2, %xmm5 + 0x48, 0x8d, 0x3c, 0x01, //0x000032e5 leaq (%rcx,%rax), %rdi + 0x48, 0x01, 0xf7, //0x000032e9 addq %rsi, %rdi + 0x48, 0x83, 0xfa, 0xff, //0x000032ec cmpq $-1, %rdx + 0x48, 0x8b, 0x5d, 0xc8, //0x000032f0 movq $-56(%rbp), %rbx + 0x48, 0x0f, 0x44, 0xdf, //0x000032f4 cmoveq %rdi, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x000032f8 movq %rbx, $-56(%rbp) + 0x48, 0x0f, 0x44, 0xd7, //0x000032fc cmoveq %rdi, %rdx + 0x48, 0x01, 0xf0, //0x00003300 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x00003303 addq $2, %rax + 0x4c, 0x89, 0xcf, //0x00003307 movq %r9, %rdi + 0x48, 0x29, 0xf7, //0x0000330a subq %rsi, %rdi + 0x48, 0x83, 0xc7, 0xfe, //0x0000330d addq $-2, %rdi + 0x49, 0x83, 0xc1, 0xfe, //0x00003311 addq $-2, %r9 + 0x49, 0x39, 0xf1, //0x00003315 cmpq %rsi, %r9 + 0x49, 0x89, 0xf9, //0x00003318 movq %rdi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x0000331b movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000331f movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003323 movabsq $4294977024, %r11 + 0x0f, 0x85, 0x72, 0xff, 0xff, 0xff, //0x0000332d jne LBB0_540 + 0xe9, 0x43, 0x07, 0x00, 0x00, //0x00003333 jmp LBB0_624 + //0x00003338 LBB0_548 + 0x48, 0x01, 0xf0, //0x00003338 addq %rsi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x0000333b addq $1, %rax + //0x0000333f LBB0_549 + 0x4c, 0x29, 0xe0, //0x0000333f subq %r12, %rax + 0xe9, 0x28, 0xdf, 0xff, 0xff, //0x00003342 jmp LBB0_229 + //0x00003347 LBB0_544 + 0x80, 0xfb, 0x22, //0x00003347 cmpb $34, %bl + 0x0f, 0x85, 0x4a, 0x09, 0x00, 0x00, //0x0000334a jne LBB0_508 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003350 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003355 movdqa %xmm2, %xmm5 + 0x4c, 0x01, 0xc8, //0x00003359 addq %r9, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x0000335c movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003360 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003364 movabsq $4294977024, %r11 + 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x0000336e jmp LBB0_549 + //0x00003373 LBB0_550 + 0x48, 0x89, 0xdf, //0x00003373 movq %rbx, %rdi + 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00003376 movdqa %xmm13, %xmm7 + 0x66, 0x0f, 0x6f, 0xf2, //0x0000337b movdqa %xmm2, %xmm6 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x0000337f cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0xd0, 0x00, 0x00, 0x00, //0x00003384 jne LBB0_560 + 0x49, 0x89, 0xc0, //0x0000338a movq %rax, %r8 + 0x4d, 0x29, 0xe0, //0x0000338d subq %r12, %r8 + 0x49, 0x0f, 0xbc, 0xd9, //0x00003390 bsfq %r9, %rbx + 0x4c, 0x01, 0xc3, //0x00003394 addq %r8, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x00003397 movq %rbx, $-56(%rbp) + 0xe9, 0xba, 0x00, 0x00, 0x00, //0x0000339b jmp LBB0_560 + //0x000033a0 LBB0_552 + 0x49, 0x39, 0xf1, //0x000033a0 cmpq %rsi, %r9 + 0x0f, 0x84, 0x06, 0x07, 0x00, 0x00, //0x000033a3 je LBB0_650 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000033a9 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000033ae movdqa %xmm2, %xmm5 + 0x49, 0x01, 0xf2, //0x000033b2 addq %rsi, %r10 + 0x49, 0x83, 0xc2, 0x01, //0x000033b5 addq $1, %r10 + 0x48, 0xf7, 0xd6, //0x000033b9 notq %rsi + 0x49, 0x01, 0xf1, //0x000033bc addq %rsi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x000033bf movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x000033c3 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000033c7 movabsq $4294977024, %r11 + 0x4d, 0x85, 0xc9, //0x000033d1 testq %r9, %r9 + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x000033d4 jg LBB0_556 + 0xe9, 0xd0, 0x06, 0x00, 0x00, //0x000033da jmp LBB0_650 + //0x000033df LBB0_554 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000033df movq $-2, %rcx + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x000033e6 movl $2, %eax + 0x49, 0x01, 0xc2, //0x000033eb addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000033ee movq $-1, %rax + 0x49, 0x01, 0xc9, //0x000033f5 addq %rcx, %r9 + 0x0f, 0x8e, 0xb1, 0x06, 0x00, 0x00, //0x000033f8 jle LBB0_650 + //0x000033fe LBB0_556 + 0x41, 0x0f, 0xb6, 0x02, //0x000033fe movzbl (%r10), %eax + 0x3c, 0x5c, //0x00003402 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x00003404 je LBB0_554 + 0x3c, 0x22, //0x0000340a cmpb $34, %al + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x0000340c je LBB0_621 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x00003412 movq $-1, %rcx + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x00003419 movl $1, %eax + 0x49, 0x01, 0xc2, //0x0000341e addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003421 movq $-1, %rax + 0x49, 0x01, 0xc9, //0x00003428 addq %rcx, %r9 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x0000342b jg LBB0_556 + 0xe9, 0x79, 0x06, 0x00, 0x00, //0x00003431 jmp LBB0_650 + //0x00003436 LBB0_621 + 0x4d, 0x29, 0xe2, //0x00003436 subq %r12, %r10 + 0x49, 0x83, 0xc2, 0x01, //0x00003439 addq $1, %r10 + 0x4d, 0x89, 0x16, //0x0000343d movq %r10, (%r14) + 0x4d, 0x85, 0xc0, //0x00003440 testq %r8, %r8 + 0x0f, 0x8f, 0xc3, 0xe3, 0xff, 0xff, //0x00003443 jg LBB0_315 + 0xe9, 0x0e, 0x06, 0x00, 0x00, //0x00003449 jmp LBB0_622 + //0x0000344e LBB0_559 + 0x48, 0x89, 0xdf, //0x0000344e movq %rbx, %rdi + 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x00003451 movdqa %xmm13, %xmm7 + 0x66, 0x0f, 0x6f, 0xf2, //0x00003456 movdqa %xmm2, %xmm6 + //0x0000345a LBB0_560 + 0x48, 0x89, 0xfb, //0x0000345a movq %rdi, %rbx + 0xf7, 0xd7, //0x0000345d notl %edi + 0x44, 0x21, 0xcf, //0x0000345f andl %r9d, %edi + 0x44, 0x8d, 0x04, 0x7b, //0x00003462 leal (%rbx,%rdi,2), %r8d + 0x8d, 0x14, 0x3f, //0x00003466 leal (%rdi,%rdi), %edx + 0xf7, 0xd2, //0x00003469 notl %edx + 0x44, 0x21, 0xca, //0x0000346b andl %r9d, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x0000346e andl $-1431655766, %edx + 0x31, 0xdb, //0x00003474 xorl %ebx, %ebx + 0x01, 0xfa, //0x00003476 addl %edi, %edx + 0x0f, 0x92, 0xc3, //0x00003478 setb %bl + 0x01, 0xd2, //0x0000347b addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x0000347d xorl $1431655765, %edx + 0x44, 0x21, 0xc2, //0x00003483 andl %r8d, %edx + 0xf7, 0xd2, //0x00003486 notl %edx + 0x21, 0xd1, //0x00003488 andl %edx, %ecx + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000348a movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000348e movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd6, //0x00003498 movdqa %xmm6, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x0000349c movdqa %xmm7, %xmm13 + 0xe9, 0xb8, 0xf3, 0xff, 0xff, //0x000034a1 jmp LBB0_175 + //0x000034a6 LBB0_561 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000034a6 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000034ab movdqa %xmm2, %xmm5 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x000034af cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x1f, 0x00, 0x00, 0x00, //0x000034b4 jne LBB0_564 + 0x48, 0x89, 0xc1, //0x000034ba movq %rax, %rcx + 0x4c, 0x29, 0xe1, //0x000034bd subq %r12, %rcx + 0x48, 0x0f, 0xbc, 0xfb, //0x000034c0 bsfq %rbx, %rdi + 0x48, 0x01, 0xcf, //0x000034c4 addq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xc8, //0x000034c7 movq %rdi, $-56(%rbp) + 0xe9, 0x09, 0x00, 0x00, 0x00, //0x000034cb jmp LBB0_564 + //0x000034d0 LBB0_563 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000034d0 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000034d5 movdqa %xmm2, %xmm5 + //0x000034d9 LBB0_564 + 0x44, 0x89, 0xc1, //0x000034d9 movl %r8d, %ecx + 0xf7, 0xd1, //0x000034dc notl %ecx + 0x21, 0xd9, //0x000034de andl %ebx, %ecx + 0x45, 0x8d, 0x14, 0x48, //0x000034e0 leal (%r8,%rcx,2), %r10d + 0x8d, 0x3c, 0x09, //0x000034e4 leal (%rcx,%rcx), %edi + 0xf7, 0xd7, //0x000034e7 notl %edi + 0x21, 0xdf, //0x000034e9 andl %ebx, %edi + 0x81, 0xe7, 0xaa, 0xaa, 0xaa, 0xaa, //0x000034eb andl $-1431655766, %edi + 0x45, 0x31, 0xc0, //0x000034f1 xorl %r8d, %r8d + 0x01, 0xcf, //0x000034f4 addl %ecx, %edi + 0x41, 0x0f, 0x92, 0xc0, //0x000034f6 setb %r8b + 0x01, 0xff, //0x000034fa addl %edi, %edi + 0x81, 0xf7, 0x55, 0x55, 0x55, 0x55, //0x000034fc xorl $1431655765, %edi + 0x44, 0x21, 0xd7, //0x00003502 andl %r10d, %edi + 0xf7, 0xd7, //0x00003505 notl %edi + 0x21, 0xfa, //0x00003507 andl %edi, %edx + 0x4c, 0x8b, 0x75, 0xd0, //0x00003509 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000350d movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003511 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x0000351b movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x0000351f movdqa %xmm6, %xmm13 + 0x48, 0x85, 0xd2, //0x00003524 testq %rdx, %rdx + 0x0f, 0x85, 0x28, 0xf4, 0xff, 0xff, //0x00003527 jne LBB0_77 + //0x0000352d LBB0_565 + 0x48, 0x83, 0xc0, 0x20, //0x0000352d addq $32, %rax + 0x49, 0x83, 0xc1, 0xe0, //0x00003531 addq $-32, %r9 + //0x00003535 LBB0_566 + 0x4d, 0x85, 0xc0, //0x00003535 testq %r8, %r8 + 0x0f, 0x85, 0xc4, 0x01, 0x00, 0x00, //0x00003538 jne LBB0_585 + 0x4c, 0x89, 0xe1, //0x0000353e movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x00003541 notq %rcx + 0x4c, 0x8b, 0x45, 0xc8, //0x00003544 movq $-56(%rbp), %r8 + 0x4d, 0x85, 0xc9, //0x00003548 testq %r9, %r9 + 0x0f, 0x84, 0x9e, 0x00, 0x00, 0x00, //0x0000354b je LBB0_578 + //0x00003551 LBB0_568 + 0x48, 0x83, 0xc1, 0x01, //0x00003551 addq $1, %rcx + //0x00003555 LBB0_569 + 0x31, 0xd2, //0x00003555 xorl %edx, %edx + //0x00003557 LBB0_570 + 0x0f, 0xb6, 0x1c, 0x10, //0x00003557 movzbl (%rax,%rdx), %ebx + 0x80, 0xfb, 0x22, //0x0000355b cmpb $34, %bl + 0x0f, 0x84, 0x84, 0x00, 0x00, 0x00, //0x0000355e je LBB0_577 + 0x80, 0xfb, 0x5c, //0x00003564 cmpb $92, %bl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x00003567 je LBB0_575 + 0x48, 0x83, 0xc2, 0x01, //0x0000356d addq $1, %rdx + 0x49, 0x39, 0xd1, //0x00003571 cmpq %rdx, %r9 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x00003574 jne LBB0_570 + 0xe9, 0x78, 0x00, 0x00, 0x00, //0x0000357a jmp LBB0_573 + //0x0000357f LBB0_575 + 0x49, 0x8d, 0x79, 0xff, //0x0000357f leaq $-1(%r9), %rdi + 0x48, 0x39, 0xd7, //0x00003583 cmpq %rdx, %rdi + 0x0f, 0x84, 0x2d, 0x07, 0x00, 0x00, //0x00003586 je LBB0_524 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000358c movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003591 movdqa %xmm2, %xmm5 + 0x48, 0x8d, 0x3c, 0x01, //0x00003595 leaq (%rcx,%rax), %rdi + 0x48, 0x01, 0xd7, //0x00003599 addq %rdx, %rdi + 0x49, 0x83, 0xf8, 0xff, //0x0000359c cmpq $-1, %r8 + 0x48, 0x8b, 0x5d, 0xc8, //0x000035a0 movq $-56(%rbp), %rbx + 0x48, 0x0f, 0x44, 0xdf, //0x000035a4 cmoveq %rdi, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x000035a8 movq %rbx, $-56(%rbp) + 0x4c, 0x0f, 0x44, 0xc7, //0x000035ac cmoveq %rdi, %r8 + 0x48, 0x01, 0xd0, //0x000035b0 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x02, //0x000035b3 addq $2, %rax + 0x4c, 0x89, 0xcf, //0x000035b7 movq %r9, %rdi + 0x48, 0x29, 0xd7, //0x000035ba subq %rdx, %rdi + 0x48, 0x83, 0xc7, 0xfe, //0x000035bd addq $-2, %rdi + 0x49, 0x83, 0xc1, 0xfe, //0x000035c1 addq $-2, %r9 + 0x49, 0x39, 0xd1, //0x000035c5 cmpq %rdx, %r9 + 0x49, 0x89, 0xf9, //0x000035c8 movq %rdi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x000035cb movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x000035cf movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000035d3 movabsq $4294977024, %r11 + 0x0f, 0x85, 0x72, 0xff, 0xff, 0xff, //0x000035dd jne LBB0_569 + 0xe9, 0xe7, 0x04, 0x00, 0x00, //0x000035e3 jmp LBB0_628 + //0x000035e8 LBB0_577 + 0x48, 0x01, 0xd0, //0x000035e8 addq %rdx, %rax + 0x48, 0x83, 0xc0, 0x01, //0x000035eb addq $1, %rax + //0x000035ef LBB0_578 + 0x4c, 0x29, 0xe0, //0x000035ef subq %r12, %rax + 0xe9, 0x00, 0xe2, 0xff, 0xff, //0x000035f2 jmp LBB0_313 + //0x000035f7 LBB0_573 + 0x80, 0xfb, 0x22, //0x000035f7 cmpb $34, %bl + 0x0f, 0x85, 0xb9, 0x06, 0x00, 0x00, //0x000035fa jne LBB0_524 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003600 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003605 movdqa %xmm2, %xmm5 + 0x4c, 0x01, 0xc8, //0x00003609 addq %r9, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x0000360c movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003610 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003614 movabsq $4294977024, %r11 + 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x0000361e jmp LBB0_578 + //0x00003623 LBB0_579 + 0x66, 0x0f, 0x6f, 0xf2, //0x00003623 movdqa %xmm2, %xmm6 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003627 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x1b, 0x00, 0x00, 0x00, //0x0000362c jne LBB0_582 + 0x49, 0x89, 0xc0, //0x00003632 movq %rax, %r8 + 0x4c, 0x2b, 0x45, 0xb8, //0x00003635 subq $-72(%rbp), %r8 + 0x49, 0x0f, 0xbc, 0xd9, //0x00003639 bsfq %r9, %rbx + 0x4c, 0x01, 0xc3, //0x0000363d addq %r8, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x00003640 movq %rbx, $-56(%rbp) + 0xe9, 0x04, 0x00, 0x00, 0x00, //0x00003644 jmp LBB0_582 + //0x00003649 LBB0_581 + 0x66, 0x0f, 0x6f, 0xf2, //0x00003649 movdqa %xmm2, %xmm6 + //0x0000364d LBB0_582 + 0x44, 0x89, 0xe2, //0x0000364d movl %r12d, %edx + 0xf7, 0xd2, //0x00003650 notl %edx + 0x44, 0x21, 0xca, //0x00003652 andl %r9d, %edx + 0x45, 0x8d, 0x04, 0x54, //0x00003655 leal (%r12,%rdx,2), %r8d + 0x8d, 0x0c, 0x12, //0x00003659 leal (%rdx,%rdx), %ecx + 0xf7, 0xd1, //0x0000365c notl %ecx + 0x44, 0x21, 0xc9, //0x0000365e andl %r9d, %ecx + 0x81, 0xe1, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003661 andl $-1431655766, %ecx + 0x45, 0x31, 0xe4, //0x00003667 xorl %r12d, %r12d + 0x01, 0xd1, //0x0000366a addl %edx, %ecx + 0x41, 0x0f, 0x92, 0xc4, //0x0000366c setb %r12b + 0x01, 0xc9, //0x00003670 addl %ecx, %ecx + 0x81, 0xf1, 0x55, 0x55, 0x55, 0x55, //0x00003672 xorl $1431655765, %ecx + 0x44, 0x21, 0xc1, //0x00003678 andl %r8d, %ecx + 0xf7, 0xd1, //0x0000367b notl %ecx + 0x21, 0xce, //0x0000367d andl %ecx, %esi + 0x4c, 0x8b, 0x75, 0xd0, //0x0000367f movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003683 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003687 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd6, //0x00003691 movdqa %xmm6, %xmm2 + 0xf3, 0x44, 0x0f, 0x6f, 0x2d, 0xa2, 0xc9, 0xff, 0xff, //0x00003695 movdqu $-13918(%rip), %xmm13 /* LCPI0_4+0(%rip) */ + 0x4c, 0x8b, 0x45, 0xb8, //0x0000369e movq $-72(%rbp), %r8 + 0xe9, 0x5d, 0xf3, 0xff, 0xff, //0x000036a2 jmp LBB0_202 + //0x000036a7 LBB0_583 + 0x4d, 0x85, 0xc9, //0x000036a7 testq %r9, %r9 + 0x0f, 0x84, 0xea, 0x05, 0x00, 0x00, //0x000036aa je LBB0_508 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x000036b0 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x000036b5 movdqa %xmm2, %xmm5 + 0x4c, 0x89, 0xe1, //0x000036b9 movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x000036bc notq %rcx + 0x48, 0x8d, 0x34, 0x08, //0x000036bf leaq (%rax,%rcx), %rsi + 0x48, 0x8b, 0x7d, 0xc8, //0x000036c3 movq $-56(%rbp), %rdi + 0x48, 0x83, 0xff, 0xff, //0x000036c7 cmpq $-1, %rdi + 0x48, 0x89, 0xfa, //0x000036cb movq %rdi, %rdx + 0x48, 0x0f, 0x44, 0xfe, //0x000036ce cmoveq %rsi, %rdi + 0x48, 0x0f, 0x44, 0xd6, //0x000036d2 cmoveq %rsi, %rdx + 0x48, 0x83, 0xc0, 0x01, //0x000036d6 addq $1, %rax + 0x49, 0x83, 0xc1, 0xff, //0x000036da addq $-1, %r9 + 0x48, 0x89, 0x7d, 0xc8, //0x000036de movq %rdi, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x000036e2 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x000036e6 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000036ea movabsq $4294977024, %r11 + 0x4d, 0x85, 0xc9, //0x000036f4 testq %r9, %r9 + 0x0f, 0x85, 0xa4, 0xfb, 0xff, 0xff, //0x000036f7 jne LBB0_539 + 0xe9, 0x3d, 0xfc, 0xff, 0xff, //0x000036fd jmp LBB0_549 + //0x00003702 LBB0_585 + 0x4d, 0x85, 0xc9, //0x00003702 testq %r9, %r9 + 0x0f, 0x84, 0xae, 0x05, 0x00, 0x00, //0x00003705 je LBB0_524 + 0x48, 0x89, 0xf2, //0x0000370b movq %rsi, %rdx + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000370e movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003713 movdqa %xmm2, %xmm5 + 0x4c, 0x89, 0xe1, //0x00003717 movq %r12, %rcx + 0x48, 0xf7, 0xd1, //0x0000371a notq %rcx + 0x48, 0x8d, 0x34, 0x08, //0x0000371d leaq (%rax,%rcx), %rsi + 0x48, 0x8b, 0x7d, 0xc8, //0x00003721 movq $-56(%rbp), %rdi + 0x48, 0x83, 0xff, 0xff, //0x00003725 cmpq $-1, %rdi + 0x49, 0x89, 0xf8, //0x00003729 movq %rdi, %r8 + 0x48, 0x0f, 0x44, 0xfe, //0x0000372c cmoveq %rsi, %rdi + 0x4c, 0x0f, 0x44, 0xc6, //0x00003730 cmoveq %rsi, %r8 + 0x48, 0x83, 0xc0, 0x01, //0x00003734 addq $1, %rax + 0x49, 0x83, 0xc1, 0xff, //0x00003738 addq $-1, %r9 + 0x48, 0x89, 0x7d, 0xc8, //0x0000373c movq %rdi, $-56(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x00003740 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003744 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003748 movabsq $4294977024, %r11 + 0x48, 0x89, 0xd6, //0x00003752 movq %rdx, %rsi + 0x4d, 0x85, 0xc9, //0x00003755 testq %r9, %r9 + 0x0f, 0x85, 0xf3, 0xfd, 0xff, 0xff, //0x00003758 jne LBB0_568 + 0xe9, 0x8c, 0xfe, 0xff, 0xff, //0x0000375e jmp LBB0_578 + //0x00003763 LBB0_587 + 0x49, 0x39, 0xf1, //0x00003763 cmpq %rsi, %r9 + 0x0f, 0x84, 0x43, 0x03, 0x00, 0x00, //0x00003766 je LBB0_650 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x0000376c movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003771 movdqa %xmm2, %xmm5 + 0x49, 0x01, 0xf2, //0x00003775 addq %rsi, %r10 + 0x49, 0x83, 0xc2, 0x01, //0x00003778 addq $1, %r10 + 0x48, 0xf7, 0xd6, //0x0000377c notq %rsi + 0x49, 0x01, 0xf1, //0x0000377f addq %rsi, %r9 + 0x4c, 0x8b, 0x75, 0xd0, //0x00003782 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003786 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000378a movabsq $4294977024, %r11 + 0x4d, 0x85, 0xc9, //0x00003794 testq %r9, %r9 + 0x0f, 0x8f, 0x24, 0x00, 0x00, 0x00, //0x00003797 jg LBB0_591 + 0xe9, 0x0d, 0x03, 0x00, 0x00, //0x0000379d jmp LBB0_650 + //0x000037a2 LBB0_589 + 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, //0x000037a2 movq $-2, %rcx + 0xb8, 0x02, 0x00, 0x00, 0x00, //0x000037a9 movl $2, %eax + 0x49, 0x01, 0xc2, //0x000037ae addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000037b1 movq $-1, %rax + 0x49, 0x01, 0xc9, //0x000037b8 addq %rcx, %r9 + 0x0f, 0x8e, 0xee, 0x02, 0x00, 0x00, //0x000037bb jle LBB0_650 + //0x000037c1 LBB0_591 + 0x41, 0x0f, 0xb6, 0x02, //0x000037c1 movzbl (%r10), %eax + 0x3c, 0x5c, //0x000037c5 cmpb $92, %al + 0x0f, 0x84, 0xd5, 0xff, 0xff, 0xff, //0x000037c7 je LBB0_589 + 0x3c, 0x22, //0x000037cd cmpb $34, %al + 0x0f, 0x84, 0x24, 0x00, 0x00, 0x00, //0x000037cf je LBB0_594 + 0x48, 0xc7, 0xc1, 0xff, 0xff, 0xff, 0xff, //0x000037d5 movq $-1, %rcx + 0xb8, 0x01, 0x00, 0x00, 0x00, //0x000037dc movl $1, %eax + 0x49, 0x01, 0xc2, //0x000037e1 addq %rax, %r10 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x000037e4 movq $-1, %rax + 0x49, 0x01, 0xc9, //0x000037eb addq %rcx, %r9 + 0x0f, 0x8f, 0xcd, 0xff, 0xff, 0xff, //0x000037ee jg LBB0_591 + 0xe9, 0xb6, 0x02, 0x00, 0x00, //0x000037f4 jmp LBB0_650 + //0x000037f9 LBB0_594 + 0x4d, 0x29, 0xe2, //0x000037f9 subq %r12, %r10 + 0x49, 0x83, 0xc2, 0x01, //0x000037fc addq $1, %r10 + 0xe9, 0xbe, 0xc9, 0xff, 0xff, //0x00003800 jmp LBB0_2 + //0x00003805 LBB0_595 + 0x49, 0x89, 0xda, //0x00003805 movq %rbx, %r10 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003808 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x0000380d movdqa %xmm2, %xmm5 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003811 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x22, 0x00, 0x00, 0x00, //0x00003816 jne LBB0_598 + 0x48, 0x89, 0xc1, //0x0000381c movq %rax, %rcx + 0x4c, 0x29, 0xe1, //0x0000381f subq %r12, %rcx + 0x48, 0x0f, 0xbc, 0xfe, //0x00003822 bsfq %rsi, %rdi + 0x48, 0x01, 0xcf, //0x00003826 addq %rcx, %rdi + 0x48, 0x89, 0x7d, 0xc8, //0x00003829 movq %rdi, $-56(%rbp) + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x0000382d jmp LBB0_598 + //0x00003832 LBB0_597 + 0x49, 0x89, 0xda, //0x00003832 movq %rbx, %r10 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003835 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x0000383a movdqa %xmm2, %xmm5 + //0x0000383e LBB0_598 + 0x44, 0x89, 0xc1, //0x0000383e movl %r8d, %ecx + 0xf7, 0xd1, //0x00003841 notl %ecx + 0x21, 0xf1, //0x00003843 andl %esi, %ecx + 0x41, 0x8d, 0x3c, 0x48, //0x00003845 leal (%r8,%rcx,2), %edi + 0x8d, 0x1c, 0x09, //0x00003849 leal (%rcx,%rcx), %ebx + 0xf7, 0xd3, //0x0000384c notl %ebx + 0x21, 0xf3, //0x0000384e andl %esi, %ebx + 0x81, 0xe3, 0xaa, 0xaa, 0xaa, 0xaa, //0x00003850 andl $-1431655766, %ebx + 0x45, 0x31, 0xc0, //0x00003856 xorl %r8d, %r8d + 0x01, 0xcb, //0x00003859 addl %ecx, %ebx + 0x41, 0x0f, 0x92, 0xc0, //0x0000385b setb %r8b + 0x01, 0xdb, //0x0000385f addl %ebx, %ebx + 0x81, 0xf3, 0x55, 0x55, 0x55, 0x55, //0x00003861 xorl $1431655765, %ebx + 0x21, 0xfb, //0x00003867 andl %edi, %ebx + 0xf7, 0xd3, //0x00003869 notl %ebx + 0x21, 0xda, //0x0000386b andl %ebx, %edx + 0x4c, 0x8b, 0x75, 0xd0, //0x0000386d movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x00003871 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x00003875 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x0000387f movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x00003883 movdqa %xmm6, %xmm13 + 0x4c, 0x89, 0xd3, //0x00003888 movq %r10, %rbx + 0x48, 0x85, 0xd2, //0x0000388b testq %rdx, %rdx + 0x0f, 0x85, 0x63, 0xf4, 0xff, 0xff, //0x0000388e jne LBB0_250 + //0x00003894 LBB0_599 + 0x66, 0x41, 0x0f, 0x6f, 0xf5, //0x00003894 movdqa %xmm13, %xmm6 + 0x66, 0x0f, 0x6f, 0xea, //0x00003899 movdqa %xmm2, %xmm5 + 0x48, 0x83, 0xc0, 0x20, //0x0000389d addq $32, %rax + 0x49, 0x83, 0xc1, 0xe0, //0x000038a1 addq $-32, %r9 + //0x000038a5 LBB0_600 + 0x4d, 0x85, 0xc0, //0x000038a5 testq %r8, %r8 + 0x0f, 0x85, 0x53, 0x01, 0x00, 0x00, //0x000038a8 jne LBB0_617 + 0x4c, 0x89, 0xe2, //0x000038ae movq %r12, %rdx + 0x48, 0xf7, 0xd2, //0x000038b1 notq %rdx + 0x48, 0x8b, 0x75, 0xc8, //0x000038b4 movq $-56(%rbp), %rsi + 0x4d, 0x85, 0xc9, //0x000038b8 testq %r9, %r9 + 0x0f, 0x84, 0x83, 0x00, 0x00, 0x00, //0x000038bb je LBB0_612 + //0x000038c1 LBB0_602 + 0x48, 0x83, 0xc2, 0x01, //0x000038c1 addq $1, %rdx + //0x000038c5 LBB0_603 + 0x31, 0xff, //0x000038c5 xorl %edi, %edi + //0x000038c7 LBB0_604 + 0x0f, 0xb6, 0x0c, 0x38, //0x000038c7 movzbl (%rax,%rdi), %ecx + 0x80, 0xf9, 0x22, //0x000038cb cmpb $34, %cl + 0x0f, 0x84, 0x69, 0x00, 0x00, 0x00, //0x000038ce je LBB0_611 + 0x80, 0xf9, 0x5c, //0x000038d4 cmpb $92, %cl + 0x0f, 0x84, 0x12, 0x00, 0x00, 0x00, //0x000038d7 je LBB0_609 + 0x48, 0x83, 0xc7, 0x01, //0x000038dd addq $1, %rdi + 0x49, 0x39, 0xf9, //0x000038e1 cmpq %rdi, %r9 + 0x0f, 0x85, 0xdd, 0xff, 0xff, 0xff, //0x000038e4 jne LBB0_604 + 0xe9, 0x78, 0x00, 0x00, 0x00, //0x000038ea jmp LBB0_607 + //0x000038ef LBB0_609 + 0x49, 0x8d, 0x49, 0xff, //0x000038ef leaq $-1(%r9), %rcx + 0x48, 0x39, 0xf9, //0x000038f3 cmpq %rdi, %rcx + 0x0f, 0x84, 0xbd, 0x03, 0x00, 0x00, //0x000038f6 je LBB0_524 + 0x4c, 0x8d, 0x04, 0x02, //0x000038fc leaq (%rdx,%rax), %r8 + 0x49, 0x01, 0xf8, //0x00003900 addq %rdi, %r8 + 0x48, 0x83, 0xfe, 0xff, //0x00003903 cmpq $-1, %rsi + 0x48, 0x8b, 0x4d, 0xc8, //0x00003907 movq $-56(%rbp), %rcx + 0x49, 0x0f, 0x44, 0xc8, //0x0000390b cmoveq %r8, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x0000390f movq %rcx, $-56(%rbp) + 0x49, 0x0f, 0x44, 0xf0, //0x00003913 cmoveq %r8, %rsi + 0x48, 0x01, 0xf8, //0x00003917 addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x02, //0x0000391a addq $2, %rax + 0x4c, 0x89, 0xc9, //0x0000391e movq %r9, %rcx + 0x48, 0x29, 0xf9, //0x00003921 subq %rdi, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x00003924 addq $-2, %rcx + 0x49, 0x83, 0xc1, 0xfe, //0x00003928 addq $-2, %r9 + 0x49, 0x39, 0xf9, //0x0000392c cmpq %rdi, %r9 + 0x49, 0x89, 0xc9, //0x0000392f movq %rcx, %r9 + 0x0f, 0x85, 0x8d, 0xff, 0xff, 0xff, //0x00003932 jne LBB0_603 + 0xe9, 0x7c, 0x03, 0x00, 0x00, //0x00003938 jmp LBB0_524 + //0x0000393d LBB0_611 + 0x48, 0x01, 0xf8, //0x0000393d addq %rdi, %rax + 0x48, 0x83, 0xc0, 0x01, //0x00003940 addq $1, %rax + //0x00003944 LBB0_612 + 0x4c, 0x29, 0xe0, //0x00003944 subq %r12, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00003947 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x0000394b movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x0000394f movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd5, //0x00003959 movdqa %xmm5, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xee, //0x0000395d movdqa %xmm6, %xmm13 + 0xe9, 0xfc, 0xec, 0xff, 0xff, //0x00003962 jmp LBB0_441 + //0x00003967 LBB0_607 + 0x80, 0xf9, 0x22, //0x00003967 cmpb $34, %cl + 0x0f, 0x85, 0x49, 0x03, 0x00, 0x00, //0x0000396a jne LBB0_524 + 0x4c, 0x01, 0xc8, //0x00003970 addq %r9, %rax + 0xe9, 0xcc, 0xff, 0xff, 0xff, //0x00003973 jmp LBB0_612 + //0x00003978 LBB0_613 + 0x48, 0x89, 0xd9, //0x00003978 movq %rbx, %rcx + 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x0000397b movdqa %xmm13, %xmm7 + 0x66, 0x0f, 0x6f, 0xf2, //0x00003980 movdqa %xmm2, %xmm6 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003984 cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x22, 0x00, 0x00, 0x00, //0x00003989 jne LBB0_616 + 0x49, 0x89, 0xc0, //0x0000398f movq %rax, %r8 + 0x4d, 0x29, 0xe0, //0x00003992 subq %r12, %r8 + 0x49, 0x0f, 0xbc, 0xd9, //0x00003995 bsfq %r9, %rbx + 0x4c, 0x01, 0xc3, //0x00003999 addq %r8, %rbx + 0x48, 0x89, 0x5d, 0xc8, //0x0000399c movq %rbx, $-56(%rbp) + 0xe9, 0x0c, 0x00, 0x00, 0x00, //0x000039a0 jmp LBB0_616 + //0x000039a5 LBB0_615 + 0x48, 0x89, 0xd9, //0x000039a5 movq %rbx, %rcx + 0x66, 0x41, 0x0f, 0x6f, 0xfd, //0x000039a8 movdqa %xmm13, %xmm7 + 0x66, 0x0f, 0x6f, 0xf2, //0x000039ad movdqa %xmm2, %xmm6 + //0x000039b1 LBB0_616 + 0x48, 0x89, 0xcb, //0x000039b1 movq %rcx, %rbx + 0xf7, 0xd1, //0x000039b4 notl %ecx + 0x44, 0x21, 0xc9, //0x000039b6 andl %r9d, %ecx + 0x44, 0x8d, 0x04, 0x4b, //0x000039b9 leal (%rbx,%rcx,2), %r8d + 0x8d, 0x14, 0x09, //0x000039bd leal (%rcx,%rcx), %edx + 0xf7, 0xd2, //0x000039c0 notl %edx + 0x44, 0x21, 0xca, //0x000039c2 andl %r9d, %edx + 0x81, 0xe2, 0xaa, 0xaa, 0xaa, 0xaa, //0x000039c5 andl $-1431655766, %edx + 0x31, 0xdb, //0x000039cb xorl %ebx, %ebx + 0x01, 0xca, //0x000039cd addl %ecx, %edx + 0x0f, 0x92, 0xc3, //0x000039cf setb %bl + 0x01, 0xd2, //0x000039d2 addl %edx, %edx + 0x81, 0xf2, 0x55, 0x55, 0x55, 0x55, //0x000039d4 xorl $1431655765, %edx + 0x44, 0x21, 0xc2, //0x000039da andl %r8d, %edx + 0xf7, 0xd2, //0x000039dd notl %edx + 0x21, 0xd6, //0x000039df andl %edx, %esi + 0x4c, 0x8b, 0x75, 0xd0, //0x000039e1 movq $-48(%rbp), %r14 + 0x4c, 0x8b, 0x6d, 0xb0, //0x000039e5 movq $-80(%rbp), %r13 + 0x49, 0xbb, 0x00, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, //0x000039e9 movabsq $4294977024, %r11 + 0x66, 0x0f, 0x6f, 0xd6, //0x000039f3 movdqa %xmm6, %xmm2 + 0x66, 0x44, 0x0f, 0x6f, 0xef, //0x000039f7 movdqa %xmm7, %xmm13 + 0xe9, 0x9a, 0xf3, 0xff, 0xff, //0x000039fc jmp LBB0_413 + //0x00003a01 LBB0_617 + 0x4d, 0x85, 0xc9, //0x00003a01 testq %r9, %r9 + 0x0f, 0x84, 0xaf, 0x02, 0x00, 0x00, //0x00003a04 je LBB0_524 + 0x4c, 0x89, 0xe2, //0x00003a0a movq %r12, %rdx + 0x48, 0xf7, 0xd2, //0x00003a0d notq %rdx + 0x48, 0x8d, 0x0c, 0x10, //0x00003a10 leaq (%rax,%rdx), %rcx + 0x48, 0x8b, 0x7d, 0xc8, //0x00003a14 movq $-56(%rbp), %rdi + 0x48, 0x83, 0xff, 0xff, //0x00003a18 cmpq $-1, %rdi + 0x48, 0x89, 0xfe, //0x00003a1c movq %rdi, %rsi + 0x48, 0x0f, 0x44, 0xf9, //0x00003a1f cmoveq %rcx, %rdi + 0x48, 0x0f, 0x44, 0xf1, //0x00003a23 cmoveq %rcx, %rsi + 0x48, 0x83, 0xc0, 0x01, //0x00003a27 addq $1, %rax + 0x49, 0x83, 0xc1, 0xff, //0x00003a2b addq $-1, %r9 + 0x48, 0x89, 0x7d, 0xc8, //0x00003a2f movq %rdi, $-56(%rbp) + 0x4d, 0x85, 0xc9, //0x00003a33 testq %r9, %r9 + 0x0f, 0x85, 0x85, 0xfe, 0xff, 0xff, //0x00003a36 jne LBB0_602 + 0xe9, 0x03, 0xff, 0xff, 0xff, //0x00003a3c jmp LBB0_612 + //0x00003a41 LBB0_619 + 0x49, 0x89, 0x36, //0x00003a41 movq %rsi, (%r14) + //0x00003a44 LBB0_620 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003a44 movq $-1, %rax + 0xe9, 0x5f, 0x00, 0x00, 0x00, //0x00003a4b jmp LBB0_650 + //0x00003a50 LBB0_651 + 0x48, 0xc7, 0xc0, 0xf9, 0xff, 0xff, 0xff, //0x00003a50 movq $-7, %rax + 0xe9, 0x53, 0x00, 0x00, 0x00, //0x00003a57 jmp LBB0_650 + //0x00003a5c LBB0_622 + 0x49, 0x83, 0xc0, 0xff, //0x00003a5c addq $-1, %r8 + 0x4c, 0x89, 0xc0, //0x00003a60 movq %r8, %rax + 0xe9, 0x47, 0x00, 0x00, 0x00, //0x00003a63 jmp LBB0_650 + //0x00003a68 LBB0_232 + 0x48, 0x83, 0xc0, 0xff, //0x00003a68 addq $-1, %rax + 0xe9, 0x3e, 0x00, 0x00, 0x00, //0x00003a6c jmp LBB0_650 + //0x00003a71 LBB0_623 + 0x48, 0x83, 0xf8, 0xff, //0x00003a71 cmpq $-1, %rax + 0x0f, 0x85, 0x94, 0x00, 0x00, 0x00, //0x00003a75 jne LBB0_634 + //0x00003a7b LBB0_624 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003a7b movq $-1, %rax + 0x48, 0x8b, 0x4d, 0xa0, //0x00003a82 movq $-96(%rbp), %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00003a86 movq %rcx, $-56(%rbp) + 0xe9, 0x80, 0x00, 0x00, 0x00, //0x00003a8a jmp LBB0_634 + //0x00003a8f LBB0_625 + 0x49, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, //0x00003a8f movq $-1, %r13 + //0x00003a96 LBB0_626 + 0x48, 0x8b, 0x4d, 0xc0, //0x00003a96 movq $-64(%rbp), %rcx + 0x4c, 0x29, 0xe9, //0x00003a9a subq %r13, %rcx + 0x48, 0x83, 0xc1, 0xfe, //0x00003a9d addq $-2, %rcx + 0x48, 0x8b, 0x45, 0xd0, //0x00003aa1 movq $-48(%rbp), %rax + 0x48, 0x89, 0x08, //0x00003aa5 movq %rcx, (%rax) + //0x00003aa8 LBB0_649 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003aa8 movq $-2, %rax + //0x00003aaf LBB0_650 + 0x48, 0x81, 0xc4, 0x88, 0x00, 0x00, 0x00, //0x00003aaf addq $136, %rsp + 0x5b, //0x00003ab6 popq %rbx + 0x41, 0x5c, //0x00003ab7 popq %r12 + 0x41, 0x5d, //0x00003ab9 popq %r13 + 0x41, 0x5e, //0x00003abb popq %r14 + 0x41, 0x5f, //0x00003abd popq %r15 + 0x5d, //0x00003abf popq %rbp + 0xc3, //0x00003ac0 retq + //0x00003ac1 LBB0_627 + 0x48, 0x83, 0xf8, 0xff, //0x00003ac1 cmpq $-1, %rax + 0x48, 0x8b, 0x55, 0xc8, //0x00003ac5 movq $-56(%rbp), %rdx + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003ac9 jne LBB0_629 + //0x00003acf LBB0_628 + 0x48, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, //0x00003acf movq $-1, %rax + 0x48, 0x8b, 0x55, 0xa0, //0x00003ad6 movq $-96(%rbp), %rdx + //0x00003ada LBB0_629 0x49, 0x89, 0x16, //0x00003ada movq %rdx, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x73, //0x00003add cmpb $115, $2(%r12,%rcx) - 0x0f, 0x85, 0x5e, 0xff, 0xff, 0xff, //0x00003ae3 jne LBB0_638 - 0x48, 0x8d, 0x51, 0x03, //0x00003ae9 leaq $3(%rcx), %rdx - 0x49, 0x89, 0x16, //0x00003aed movq %rdx, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x03, 0x65, //0x00003af0 cmpb $101, $3(%r12,%rcx) - 0x0f, 0x85, 0x4b, 0xff, 0xff, 0xff, //0x00003af6 jne LBB0_638 - 0x48, 0x83, 0xc1, 0x04, //0x00003afc addq $4, %rcx - 0x49, 0x89, 0x0e, //0x00003b00 movq %rcx, (%r14) - 0xe9, 0x3f, 0xff, 0xff, 0xff, //0x00003b03 jmp LBB0_638 - //0x00003b08 LBB0_627 - 0x49, 0x89, 0x06, //0x00003b08 movq %rax, (%r14) - 0x41, 0x80, 0x3c, 0x04, 0x74, //0x00003b0b cmpb $116, (%r12,%rax) - 0x0f, 0x85, 0x2a, 0xff, 0xff, 0xff, //0x00003b10 jne LBB0_637 - 0x49, 0x89, 0x0e, //0x00003b16 movq %rcx, (%r14) - 0x41, 0x80, 0x3c, 0x0c, 0x72, //0x00003b19 cmpb $114, (%r12,%rcx) - 0x0f, 0x85, 0x1c, 0xff, 0xff, 0xff, //0x00003b1e jne LBB0_637 - 0x48, 0x8d, 0x41, 0x01, //0x00003b24 leaq $1(%rcx), %rax - 0x49, 0x89, 0x06, //0x00003b28 movq %rax, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x75, //0x00003b2b cmpb $117, $1(%r12,%rcx) - 0x0f, 0x85, 0x09, 0xff, 0xff, 0xff, //0x00003b31 jne LBB0_637 - 0x48, 0x8d, 0x41, 0x02, //0x00003b37 leaq $2(%rcx), %rax + 0xe9, 0xcd, 0xff, 0xff, 0xff, //0x00003add jmp LBB0_650 + //0x00003ae2 LBB0_630 + 0x48, 0x83, 0xc6, 0xff, //0x00003ae2 addq $-1, %rsi + 0x48, 0x89, 0xf0, //0x00003ae6 movq %rsi, %rax + 0xe9, 0xc1, 0xff, 0xff, 0xff, //0x00003ae9 jmp LBB0_650 + //0x00003aee LBB0_631 + 0x48, 0x83, 0x7d, 0xc8, 0xff, //0x00003aee cmpq $-1, $-56(%rbp) + 0x0f, 0x85, 0x0b, 0x00, 0x00, 0x00, //0x00003af3 jne LBB0_633 + 0x48, 0x0f, 0xbc, 0xcf, //0x00003af9 bsfq %rdi, %rcx + 0x48, 0x01, 0xc1, //0x00003afd addq %rax, %rcx + 0x48, 0x89, 0x4d, 0xc8, //0x00003b00 movq %rcx, $-56(%rbp) + //0x00003b04 LBB0_633 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003b04 movq $-2, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00003b0b movq $-48(%rbp), %r14 + //0x00003b0f LBB0_634 + 0x48, 0x8b, 0x4d, 0xc8, //0x00003b0f movq $-56(%rbp), %rcx + 0x49, 0x89, 0x0e, //0x00003b13 movq %rcx, (%r14) + 0xe9, 0x94, 0xff, 0xff, 0xff, //0x00003b16 jmp LBB0_650 + //0x00003b1b LBB0_635 + 0x49, 0x89, 0x06, //0x00003b1b movq %rax, (%r14) + 0x41, 0x80, 0x3c, 0x04, 0x74, //0x00003b1e cmpb $116, (%r12,%rax) + 0x0f, 0x85, 0x7f, 0xff, 0xff, 0xff, //0x00003b23 jne LBB0_649 + 0x49, 0x89, 0x0e, //0x00003b29 movq %rcx, (%r14) + 0x41, 0x80, 0x3c, 0x0c, 0x72, //0x00003b2c cmpb $114, (%r12,%rcx) + 0x0f, 0x85, 0x71, 0xff, 0xff, 0xff, //0x00003b31 jne LBB0_649 + 0x48, 0x8d, 0x41, 0x01, //0x00003b37 leaq $1(%rcx), %rax 0x49, 0x89, 0x06, //0x00003b3b movq %rax, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x65, //0x00003b3e cmpb $101, $2(%r12,%rcx) - 0x0f, 0x85, 0xf6, 0xfe, 0xff, 0xff, //0x00003b44 jne LBB0_637 - 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00003b4a jmp LBB0_631 - //0x00003b4f LBB0_289 - 0x49, 0x89, 0x06, //0x00003b4f movq %rax, (%r14) - 0x41, 0x80, 0x3c, 0x04, 0x6e, //0x00003b52 cmpb $110, (%r12,%rax) - 0x0f, 0x85, 0xe3, 0xfe, 0xff, 0xff, //0x00003b57 jne LBB0_637 - 0x49, 0x89, 0x0e, //0x00003b5d movq %rcx, (%r14) - 0x41, 0x80, 0x3c, 0x0c, 0x75, //0x00003b60 cmpb $117, (%r12,%rcx) - 0x0f, 0x85, 0xd5, 0xfe, 0xff, 0xff, //0x00003b65 jne LBB0_637 - 0x48, 0x8d, 0x41, 0x01, //0x00003b6b leaq $1(%rcx), %rax - 0x49, 0x89, 0x06, //0x00003b6f movq %rax, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x00003b72 cmpb $108, $1(%r12,%rcx) - 0x0f, 0x85, 0xc2, 0xfe, 0xff, 0xff, //0x00003b78 jne LBB0_637 - 0x48, 0x8d, 0x41, 0x02, //0x00003b7e leaq $2(%rcx), %rax + 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x75, //0x00003b3e cmpb $117, $1(%r12,%rcx) + 0x0f, 0x85, 0x5e, 0xff, 0xff, 0xff, //0x00003b44 jne LBB0_649 + 0x48, 0x8d, 0x41, 0x02, //0x00003b4a leaq $2(%rcx), %rax + 0x49, 0x89, 0x06, //0x00003b4e movq %rax, (%r14) + 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x65, //0x00003b51 cmpb $101, $2(%r12,%rcx) + 0x0f, 0x85, 0x4b, 0xff, 0xff, 0xff, //0x00003b57 jne LBB0_649 + 0xe9, 0x42, 0x00, 0x00, 0x00, //0x00003b5d jmp LBB0_639 + //0x00003b62 LBB0_297 + 0x49, 0x89, 0x06, //0x00003b62 movq %rax, (%r14) + 0x41, 0x80, 0x3c, 0x04, 0x6e, //0x00003b65 cmpb $110, (%r12,%rax) + 0x0f, 0x85, 0x38, 0xff, 0xff, 0xff, //0x00003b6a jne LBB0_649 + 0x49, 0x89, 0x0e, //0x00003b70 movq %rcx, (%r14) + 0x41, 0x80, 0x3c, 0x0c, 0x75, //0x00003b73 cmpb $117, (%r12,%rcx) + 0x0f, 0x85, 0x2a, 0xff, 0xff, 0xff, //0x00003b78 jne LBB0_649 + 0x48, 0x8d, 0x41, 0x01, //0x00003b7e leaq $1(%rcx), %rax 0x49, 0x89, 0x06, //0x00003b82 movq %rax, (%r14) - 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x6c, //0x00003b85 cmpb $108, $2(%r12,%rcx) - 0x0f, 0x85, 0xaf, 0xfe, 0xff, 0xff, //0x00003b8b jne LBB0_637 - //0x00003b91 LBB0_631 - 0x48, 0x83, 0xc1, 0x03, //0x00003b91 addq $3, %rcx - 0x49, 0x89, 0x0e, //0x00003b95 movq %rcx, (%r14) - 0xe9, 0xa3, 0xfe, 0xff, 0xff, //0x00003b98 jmp LBB0_637 - //0x00003b9d LBB0_228 - 0x48, 0x83, 0xc1, 0xff, //0x00003b9d addq $-1, %rcx - 0x48, 0x89, 0xc8, //0x00003ba1 movq %rcx, %rax - 0xe9, 0x9e, 0xfe, 0xff, 0xff, //0x00003ba4 jmp LBB0_638 - //0x00003ba9 LBB0_632 - 0x48, 0x8b, 0x55, 0xc8, //0x00003ba9 movq $-56(%rbp), %rdx - 0x48, 0x83, 0xfa, 0xff, //0x00003bad cmpq $-1, %rdx - 0x0f, 0x84, 0x31, 0x00, 0x00, 0x00, //0x00003bb1 je LBB0_639 - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003bb7 movq $-2, %rax - 0x49, 0x89, 0x16, //0x00003bbe movq %rdx, (%r14) - 0xe9, 0x81, 0xfe, 0xff, 0xff, //0x00003bc1 jmp LBB0_638 - //0x00003bc6 LBB0_185 - 0x48, 0x8b, 0x75, 0xc0, //0x00003bc6 movq $-64(%rbp), %rsi - 0xe9, 0x63, 0xfe, 0xff, 0xff, //0x00003bca jmp LBB0_612 - //0x00003bcf LBB0_635 - 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00003bcf movq $-1, %rbx - //0x00003bd6 LBB0_636 - 0x48, 0xf7, 0xd3, //0x00003bd6 notq %rbx - 0x48, 0x01, 0xd8, //0x00003bd9 addq %rbx, %rax - 0x48, 0x8b, 0x4d, 0xd0, //0x00003bdc movq $-48(%rbp), %rcx - 0x48, 0x89, 0x01, //0x00003be0 movq %rax, (%rcx) - 0xe9, 0x58, 0xfe, 0xff, 0xff, //0x00003be3 jmp LBB0_637 - //0x00003be8 LBB0_639 - 0x48, 0x0f, 0xbc, 0xd7, //0x00003be8 bsfq %rdi, %rdx - //0x00003bec LBB0_640 - 0x48, 0x01, 0xc2, //0x00003bec addq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003bef movq $-2, %rax - 0x49, 0x89, 0x16, //0x00003bf6 movq %rdx, (%r14) - 0xe9, 0x49, 0xfe, 0xff, 0xff, //0x00003bf9 jmp LBB0_638 - //0x00003bfe LBB0_642 - 0x48, 0x8b, 0x45, 0xb0, //0x00003bfe movq $-80(%rbp), %rax - 0x48, 0x89, 0x45, 0xa0, //0x00003c02 movq %rax, $-96(%rbp) - 0xe9, 0x0c, 0xfe, 0xff, 0xff, //0x00003c06 jmp LBB0_610 - //0x00003c0b LBB0_643 - 0x48, 0x8b, 0x45, 0xb0, //0x00003c0b movq $-80(%rbp), %rax - 0x48, 0x89, 0x45, 0xa0, //0x00003c0f movq %rax, $-96(%rbp) - 0x4c, 0x8b, 0x75, 0xd0, //0x00003c13 movq $-48(%rbp), %r14 - 0xe9, 0xfb, 0xfd, 0xff, 0xff, //0x00003c17 jmp LBB0_610 - //0x00003c1c LBB0_182 - 0x48, 0x01, 0xc2, //0x00003c1c addq %rax, %rdx + 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x00003b85 cmpb $108, $1(%r12,%rcx) + 0x0f, 0x85, 0x17, 0xff, 0xff, 0xff, //0x00003b8b jne LBB0_649 + 0x48, 0x8d, 0x41, 0x02, //0x00003b91 leaq $2(%rcx), %rax + 0x49, 0x89, 0x06, //0x00003b95 movq %rax, (%r14) + 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x6c, //0x00003b98 cmpb $108, $2(%r12,%rcx) + 0x0f, 0x85, 0x04, 0xff, 0xff, 0xff, //0x00003b9e jne LBB0_649 + //0x00003ba4 LBB0_639 + 0x48, 0x83, 0xc1, 0x03, //0x00003ba4 addq $3, %rcx + 0x49, 0x89, 0x0e, //0x00003ba8 movq %rcx, (%r14) + 0xe9, 0xf8, 0xfe, 0xff, 0xff, //0x00003bab jmp LBB0_649 + //0x00003bb0 LBB0_640 + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003bb0 movq $-2, %rax + 0x80, 0xfa, 0x61, //0x00003bb7 cmpb $97, %dl + 0x0f, 0x85, 0xef, 0xfe, 0xff, 0xff, //0x00003bba jne LBB0_650 + 0x48, 0x8d, 0x51, 0x01, //0x00003bc0 leaq $1(%rcx), %rdx + 0x49, 0x89, 0x16, //0x00003bc4 movq %rdx, (%r14) + 0x41, 0x80, 0x7c, 0x0c, 0x01, 0x6c, //0x00003bc7 cmpb $108, $1(%r12,%rcx) + 0x0f, 0x85, 0xdc, 0xfe, 0xff, 0xff, //0x00003bcd jne LBB0_650 + 0x48, 0x8d, 0x51, 0x02, //0x00003bd3 leaq $2(%rcx), %rdx + 0x49, 0x89, 0x16, //0x00003bd7 movq %rdx, (%r14) + 0x41, 0x80, 0x7c, 0x0c, 0x02, 0x73, //0x00003bda cmpb $115, $2(%r12,%rcx) + 0x0f, 0x85, 0xc9, 0xfe, 0xff, 0xff, //0x00003be0 jne LBB0_650 + 0x48, 0x8d, 0x51, 0x03, //0x00003be6 leaq $3(%rcx), %rdx + 0x49, 0x89, 0x16, //0x00003bea movq %rdx, (%r14) + 0x41, 0x80, 0x7c, 0x0c, 0x03, 0x65, //0x00003bed cmpb $101, $3(%r12,%rcx) + 0x0f, 0x85, 0xb6, 0xfe, 0xff, 0xff, //0x00003bf3 jne LBB0_650 + 0x48, 0x83, 0xc1, 0x04, //0x00003bf9 addq $4, %rcx + 0x49, 0x89, 0x0e, //0x00003bfd movq %rcx, (%r14) + 0xe9, 0xaa, 0xfe, 0xff, 0xff, //0x00003c00 jmp LBB0_650 + //0x00003c05 LBB0_236 + 0x48, 0x83, 0xc1, 0xff, //0x00003c05 addq $-1, %rcx + 0x48, 0x89, 0xc8, //0x00003c09 movq %rcx, %rax + 0xe9, 0x9e, 0xfe, 0xff, 0xff, //0x00003c0c jmp LBB0_650 + //0x00003c11 LBB0_645 + 0x48, 0x8b, 0x55, 0xc8, //0x00003c11 movq $-56(%rbp), %rdx + 0x48, 0x83, 0xfa, 0xff, //0x00003c15 cmpq $-1, %rdx + 0x0f, 0x84, 0x34, 0x00, 0x00, 0x00, //0x00003c19 je LBB0_653 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003c1f movq $-2, %rax - 0x48, 0x89, 0x55, 0xc8, //0x00003c26 movq %rdx, $-56(%rbp) - 0xe9, 0x78, 0xfe, 0xff, 0xff, //0x00003c2a jmp LBB0_621 - //0x00003c2f LBB0_490 - 0x4c, 0x8b, 0x75, 0xd0, //0x00003c2f movq $-48(%rbp), %r14 - 0xe9, 0xdf, 0xfd, 0xff, 0xff, //0x00003c33 jmp LBB0_610 - //0x00003c38 LBB0_646 - 0x48, 0x8b, 0x45, 0xb0, //0x00003c38 movq $-80(%rbp), %rax - 0x48, 0x89, 0x45, 0xa0, //0x00003c3c movq %rax, $-96(%rbp) - 0xe9, 0x2e, 0xfe, 0xff, 0xff, //0x00003c40 jmp LBB0_616 - //0x00003c45 LBB0_644 - 0x48, 0x89, 0x4d, 0xa0, //0x00003c45 movq %rcx, $-96(%rbp) - 0xe9, 0x25, 0xfe, 0xff, 0xff, //0x00003c49 jmp LBB0_616 - //0x00003c4e LBB0_507 - 0x4c, 0x8b, 0x75, 0xd0, //0x00003c4e movq $-48(%rbp), %r14 - 0xe9, 0x1c, 0xfe, 0xff, 0xff, //0x00003c52 jmp LBB0_616 - //0x00003c57 LBB0_648 - 0x48, 0x8b, 0x4d, 0xa8, //0x00003c57 movq $-88(%rbp), %rcx - 0x48, 0x8b, 0x49, 0x08, //0x00003c5b movq $8(%rcx), %rcx - 0x48, 0x8b, 0x55, 0xd0, //0x00003c5f movq $-48(%rbp), %rdx - 0x48, 0x89, 0x0a, //0x00003c63 movq %rcx, (%rdx) - 0xe9, 0xdc, 0xfd, 0xff, 0xff, //0x00003c66 jmp LBB0_638 - //0x00003c6b LBB0_649 - 0x4c, 0x29, 0xe0, //0x00003c6b subq %r12, %rax - 0x48, 0x01, 0xd0, //0x00003c6e addq %rdx, %rax - 0x48, 0x89, 0x45, 0xc8, //0x00003c71 movq %rax, $-56(%rbp) - 0xe9, 0x22, 0xfe, 0xff, 0xff, //0x00003c75 jmp LBB0_620 - //0x00003c7a LBB0_650 - 0x4c, 0x29, 0xc0, //0x00003c7a subq %r8, %rax - 0x48, 0x01, 0xc8, //0x00003c7d addq %rcx, %rax - 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00003c80 jmp LBB0_653 - //0x00003c85 LBB0_651 - 0x4c, 0x29, 0xe0, //0x00003c85 subq %r12, %rax - 0x48, 0x89, 0x45, 0xc8, //0x00003c88 movq %rax, $-56(%rbp) - 0xe9, 0x0b, 0xfe, 0xff, 0xff, //0x00003c8c jmp LBB0_620 - //0x00003c91 LBB0_652 - 0x4c, 0x29, 0xc0, //0x00003c91 subq %r8, %rax - //0x00003c94 LBB0_653 - 0x48, 0x89, 0xc2, //0x00003c94 movq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003c97 movq $-2, %rax - 0x49, 0x89, 0x16, //0x00003c9e movq %rdx, (%r14) - 0xe9, 0xa1, 0xfd, 0xff, 0xff, //0x00003ca1 jmp LBB0_638 - //0x00003ca6 LBB0_654 - 0x48, 0x01, 0xc8, //0x00003ca6 addq %rcx, %rax - 0x48, 0x89, 0xc2, //0x00003ca9 movq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003cac movq $-2, %rax - 0x49, 0x89, 0x16, //0x00003cb3 movq %rdx, (%r14) - 0xe9, 0x8c, 0xfd, 0xff, 0xff, //0x00003cb6 jmp LBB0_638 - //0x00003cbb LBB0_655 - 0x4c, 0x29, 0xe0, //0x00003cbb subq %r12, %rax - 0x48, 0x01, 0xc8, //0x00003cbe addq %rcx, %rax - 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00003cc1 jmp LBB0_657 - //0x00003cc6 LBB0_656 - 0x4c, 0x29, 0xe0, //0x00003cc6 subq %r12, %rax - //0x00003cc9 LBB0_657 - 0x48, 0x89, 0xc2, //0x00003cc9 movq %rax, %rdx - 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003ccc movq $-2, %rax - 0x4c, 0x8b, 0x75, 0xd0, //0x00003cd3 movq $-48(%rbp), %r14 - 0x49, 0x89, 0x16, //0x00003cd7 movq %rdx, (%r14) - 0xe9, 0x68, 0xfd, 0xff, 0xff, //0x00003cda jmp LBB0_638 - 0x90, //0x00003cdf .p2align 2, 0x90 + 0x49, 0x89, 0x16, //0x00003c26 movq %rdx, (%r14) + 0xe9, 0x81, 0xfe, 0xff, 0xff, //0x00003c29 jmp LBB0_650 + //0x00003c2e LBB0_647 + 0x48, 0xc7, 0xc3, 0xff, 0xff, 0xff, 0xff, //0x00003c2e movq $-1, %rbx + //0x00003c35 LBB0_648 + 0x48, 0xf7, 0xd3, //0x00003c35 notq %rbx + 0x48, 0x01, 0xd8, //0x00003c38 addq %rbx, %rax + 0x48, 0x8b, 0x4d, 0xd0, //0x00003c3b movq $-48(%rbp), %rcx + 0x48, 0x89, 0x01, //0x00003c3f movq %rax, (%rcx) + 0xe9, 0x61, 0xfe, 0xff, 0xff, //0x00003c42 jmp LBB0_649 + //0x00003c47 LBB0_443 + 0x48, 0x83, 0xc3, 0xff, //0x00003c47 addq $-1, %rbx + 0x48, 0x89, 0xd8, //0x00003c4b movq %rbx, %rax + 0xe9, 0x5c, 0xfe, 0xff, 0xff, //0x00003c4e jmp LBB0_650 + //0x00003c53 LBB0_653 + 0x48, 0x0f, 0xbc, 0xd6, //0x00003c53 bsfq %rsi, %rdx + //0x00003c57 LBB0_654 + 0x48, 0x01, 0xc2, //0x00003c57 addq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003c5a movq $-2, %rax + 0x49, 0x89, 0x16, //0x00003c61 movq %rdx, (%r14) + 0xe9, 0x46, 0xfe, 0xff, 0xff, //0x00003c64 jmp LBB0_650 + //0x00003c69 LBB0_656 + 0x48, 0x8b, 0x45, 0xc0, //0x00003c69 movq $-64(%rbp), %rax + 0x48, 0x89, 0x45, 0xa0, //0x00003c6d movq %rax, $-96(%rbp) + 0xe9, 0x05, 0xfe, 0xff, 0xff, //0x00003c71 jmp LBB0_624 + //0x00003c76 LBB0_657 + 0x48, 0x8b, 0x45, 0xc0, //0x00003c76 movq $-64(%rbp), %rax + 0x48, 0x89, 0x45, 0xa0, //0x00003c7a movq %rax, $-96(%rbp) + 0x4c, 0x8b, 0x75, 0xd0, //0x00003c7e movq $-48(%rbp), %r14 + 0xe9, 0xf4, 0xfd, 0xff, 0xff, //0x00003c82 jmp LBB0_624 + //0x00003c87 LBB0_187 + 0x48, 0x01, 0xc2, //0x00003c87 addq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003c8a movq $-2, %rax + 0x48, 0x89, 0x55, 0xc8, //0x00003c91 movq %rdx, $-56(%rbp) + 0xe9, 0x75, 0xfe, 0xff, 0xff, //0x00003c95 jmp LBB0_634 + //0x00003c9a LBB0_508 + 0x4c, 0x8b, 0x75, 0xd0, //0x00003c9a movq $-48(%rbp), %r14 + 0xe9, 0xd8, 0xfd, 0xff, 0xff, //0x00003c9e jmp LBB0_624 + //0x00003ca3 LBB0_658 + 0x48, 0x8b, 0x45, 0xc0, //0x00003ca3 movq $-64(%rbp), %rax + 0x48, 0x89, 0x45, 0xa0, //0x00003ca7 movq %rax, $-96(%rbp) + 0xe9, 0x1f, 0xfe, 0xff, 0xff, //0x00003cab jmp LBB0_628 + //0x00003cb0 LBB0_660 + 0x48, 0x89, 0x55, 0xa0, //0x00003cb0 movq %rdx, $-96(%rbp) + 0xe9, 0x16, 0xfe, 0xff, 0xff, //0x00003cb4 jmp LBB0_628 + //0x00003cb9 LBB0_524 + 0x4c, 0x8b, 0x75, 0xd0, //0x00003cb9 movq $-48(%rbp), %r14 + 0xe9, 0x0d, 0xfe, 0xff, 0xff, //0x00003cbd jmp LBB0_628 + //0x00003cc2 LBB0_662 + 0x48, 0x8b, 0x4d, 0xa8, //0x00003cc2 movq $-88(%rbp), %rcx + 0x48, 0x8b, 0x49, 0x08, //0x00003cc6 movq $8(%rcx), %rcx + 0x48, 0x8b, 0x55, 0xd0, //0x00003cca movq $-48(%rbp), %rdx + 0x48, 0x89, 0x0a, //0x00003cce movq %rcx, (%rdx) + 0xe9, 0xd9, 0xfd, 0xff, 0xff, //0x00003cd1 jmp LBB0_650 + //0x00003cd6 LBB0_663 + 0x4c, 0x29, 0xe0, //0x00003cd6 subq %r12, %rax + 0x48, 0x01, 0xd0, //0x00003cd9 addq %rdx, %rax + 0x48, 0x89, 0x45, 0xc8, //0x00003cdc movq %rax, $-56(%rbp) + 0xe9, 0x1f, 0xfe, 0xff, 0xff, //0x00003ce0 jmp LBB0_633 + //0x00003ce5 LBB0_664 + 0x4c, 0x29, 0xc0, //0x00003ce5 subq %r8, %rax + 0x48, 0x01, 0xc8, //0x00003ce8 addq %rcx, %rax + 0xe9, 0x0f, 0x00, 0x00, 0x00, //0x00003ceb jmp LBB0_667 + //0x00003cf0 LBB0_665 + 0x4c, 0x29, 0xe0, //0x00003cf0 subq %r12, %rax + 0x48, 0x89, 0x45, 0xc8, //0x00003cf3 movq %rax, $-56(%rbp) + 0xe9, 0x08, 0xfe, 0xff, 0xff, //0x00003cf7 jmp LBB0_633 + //0x00003cfc LBB0_666 + 0x4c, 0x29, 0xc0, //0x00003cfc subq %r8, %rax + //0x00003cff LBB0_667 + 0x48, 0x89, 0xc2, //0x00003cff movq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d02 movq $-2, %rax + 0x49, 0x89, 0x16, //0x00003d09 movq %rdx, (%r14) + 0xe9, 0x9e, 0xfd, 0xff, 0xff, //0x00003d0c jmp LBB0_650 + //0x00003d11 LBB0_668 + 0x48, 0x01, 0xc8, //0x00003d11 addq %rcx, %rax + 0x48, 0x89, 0xc2, //0x00003d14 movq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d17 movq $-2, %rax + 0x49, 0x89, 0x16, //0x00003d1e movq %rdx, (%r14) + 0xe9, 0x89, 0xfd, 0xff, 0xff, //0x00003d21 jmp LBB0_650 + //0x00003d26 LBB0_669 + 0x4c, 0x29, 0xe0, //0x00003d26 subq %r12, %rax + 0x48, 0x01, 0xc8, //0x00003d29 addq %rcx, %rax + 0xe9, 0x03, 0x00, 0x00, 0x00, //0x00003d2c jmp LBB0_671 + //0x00003d31 LBB0_670 + 0x4c, 0x29, 0xe0, //0x00003d31 subq %r12, %rax + //0x00003d34 LBB0_671 + 0x48, 0x89, 0xc2, //0x00003d34 movq %rax, %rdx + 0x48, 0xc7, 0xc0, 0xfe, 0xff, 0xff, 0xff, //0x00003d37 movq $-2, %rax + 0x4c, 0x8b, 0x75, 0xd0, //0x00003d3e movq $-48(%rbp), %r14 + 0x49, 0x89, 0x16, //0x00003d42 movq %rdx, (%r14) + 0xe9, 0x65, 0xfd, 0xff, 0xff, //0x00003d45 jmp LBB0_650 + 0x90, 0x90, //0x00003d4a .p2align 2, 0x90 // // .set L0_0_set_35, LBB0_35-LJTI0_0 // // .set L0_0_set_61, LBB0_61-LJTI0_0 // // .set L0_0_set_40, LBB0_40-LJTI0_0 // // .set L0_0_set_59, LBB0_59-LJTI0_0 // // .set L0_0_set_38, LBB0_38-LJTI0_0 // // .set L0_0_set_63, LBB0_63-LJTI0_0 - //0x00003ce0 LJTI0_0 - 0xd4, 0xc6, 0xff, 0xff, //0x00003ce0 .long L0_0_set_35 - 0xec, 0xc8, 0xff, 0xff, //0x00003ce4 .long L0_0_set_61 - 0x10, 0xc7, 0xff, 0xff, //0x00003ce8 .long L0_0_set_40 - 0xd0, 0xc8, 0xff, 0xff, //0x00003cec .long L0_0_set_59 - 0xeb, 0xc6, 0xff, 0xff, //0x00003cf0 .long L0_0_set_38 - 0x1c, 0xc9, 0xff, 0xff, //0x00003cf4 .long L0_0_set_63 - // // .set L0_1_set_638, LBB0_638-LJTI0_1 - // // .set L0_1_set_637, LBB0_637-LJTI0_1 - // // .set L0_1_set_232, LBB0_232-LJTI0_1 - // // .set L0_1_set_250, LBB0_250-LJTI0_1 + //0x00003d4c LJTI0_0 + 0x2c, 0xc6, 0xff, 0xff, //0x00003d4c .long L0_0_set_35 + 0x3c, 0xc8, 0xff, 0xff, //0x00003d50 .long L0_0_set_61 + 0x64, 0xc6, 0xff, 0xff, //0x00003d54 .long L0_0_set_40 + 0x24, 0xc8, 0xff, 0xff, //0x00003d58 .long L0_0_set_59 + 0x43, 0xc6, 0xff, 0xff, //0x00003d5c .long L0_0_set_38 + 0x68, 0xc8, 0xff, 0xff, //0x00003d60 .long L0_0_set_63 + // // .set L0_1_set_650, LBB0_650-LJTI0_1 + // // .set L0_1_set_649, LBB0_649-LJTI0_1 + // // .set L0_1_set_237, LBB0_237-LJTI0_1 + // // .set L0_1_set_255, LBB0_255-LJTI0_1 // // .set L0_1_set_80, LBB0_80-LJTI0_1 - // // .set L0_1_set_229, LBB0_229-LJTI0_1 - // // .set L0_1_set_225, LBB0_225-LJTI0_1 - // // .set L0_1_set_287, LBB0_287-LJTI0_1 - // // .set L0_1_set_296, LBB0_296-LJTI0_1 - // // .set L0_1_set_293, LBB0_293-LJTI0_1 - //0x00003cf8 LJTI0_1 - 0x4f, 0xfd, 0xff, 0xff, //0x00003cf8 .long L0_1_set_638 - 0x48, 0xfd, 0xff, 0xff, //0x00003cfc .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d00 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d04 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d08 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d0c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d10 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d14 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d18 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d1c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d20 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d24 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d28 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d2c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d30 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d34 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d38 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d3c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d40 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d44 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d48 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d4c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d50 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d54 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d58 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d5c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d60 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d64 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d68 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d6c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d70 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d74 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d78 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d7c .long L0_1_set_637 - 0x19, 0xd6, 0xff, 0xff, //0x00003d80 .long L0_1_set_232 - 0x48, 0xfd, 0xff, 0xff, //0x00003d84 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d88 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d8c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d90 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d94 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d98 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003d9c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003da0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003da4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003da8 .long L0_1_set_637 - 0xd2, 0xd7, 0xff, 0xff, //0x00003dac .long L0_1_set_250 - 0x48, 0xfd, 0xff, 0xff, //0x00003db0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003db4 .long L0_1_set_637 - 0x51, 0xc9, 0xff, 0xff, //0x00003db8 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dbc .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dc0 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dc4 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dc8 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dcc .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dd0 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dd4 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003dd8 .long L0_1_set_80 - 0x51, 0xc9, 0xff, 0xff, //0x00003ddc .long L0_1_set_80 - 0x48, 0xfd, 0xff, 0xff, //0x00003de0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003de4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003de8 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003dec .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003df0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003df4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003df8 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003dfc .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e00 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e04 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e08 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e0c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e10 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e14 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e18 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e1c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e20 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e24 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e28 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e2c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e30 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e34 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e38 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e3c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e40 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e44 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e48 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e4c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e50 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e54 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e58 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e5c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e60 .long L0_1_set_637 - 0xe9, 0xd5, 0xff, 0xff, //0x00003e64 .long L0_1_set_229 - 0x48, 0xfd, 0xff, 0xff, //0x00003e68 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e6c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e70 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e74 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e78 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e7c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e80 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e84 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e88 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e8c .long L0_1_set_637 - 0xac, 0xd5, 0xff, 0xff, //0x00003e90 .long L0_1_set_225 - 0x48, 0xfd, 0xff, 0xff, //0x00003e94 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e98 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003e9c .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ea0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ea4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ea8 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003eac .long L0_1_set_637 - 0x20, 0xda, 0xff, 0xff, //0x00003eb0 .long L0_1_set_287 - 0x48, 0xfd, 0xff, 0xff, //0x00003eb4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003eb8 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ebc .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ec0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ec4 .long L0_1_set_637 - 0x80, 0xda, 0xff, 0xff, //0x00003ec8 .long L0_1_set_296 - 0x48, 0xfd, 0xff, 0xff, //0x00003ecc .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ed0 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ed4 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ed8 .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003edc .long L0_1_set_637 - 0x48, 0xfd, 0xff, 0xff, //0x00003ee0 .long L0_1_set_637 - 0x50, 0xda, 0xff, 0xff, //0x00003ee4 .long L0_1_set_293 - // // .set L0_2_set_276, LBB0_276-LJTI0_2 - // // .set L0_2_set_412, LBB0_412-LJTI0_2 - // // .set L0_2_set_282, LBB0_282-LJTI0_2 - // // .set L0_2_set_285, LBB0_285-LJTI0_2 - //0x00003ee8 LJTI0_2 - 0xaf, 0xd7, 0xff, 0xff, //0x00003ee8 .long L0_2_set_276 - 0xc0, 0xe6, 0xff, 0xff, //0x00003eec .long L0_2_set_412 - 0xaf, 0xd7, 0xff, 0xff, //0x00003ef0 .long L0_2_set_276 - 0x01, 0xd8, 0xff, 0xff, //0x00003ef4 .long L0_2_set_282 - 0xc0, 0xe6, 0xff, 0xff, //0x00003ef8 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003efc .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f00 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f04 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f08 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f0c .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f10 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f14 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f18 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f1c .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f20 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f24 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f28 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f2c .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f30 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f34 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f38 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f3c .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f40 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f44 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f48 .long L0_2_set_412 - 0xc0, 0xe6, 0xff, 0xff, //0x00003f4c .long L0_2_set_412 - 0x1d, 0xd8, 0xff, 0xff, //0x00003f50 .long L0_2_set_285 - // // .set L0_3_set_113, LBB0_113-LJTI0_3 - // // .set L0_3_set_212, LBB0_212-LJTI0_3 + // // .set L0_1_set_292, LBB0_292-LJTI0_1 + // // .set L0_1_set_233, LBB0_233-LJTI0_1 + // // .set L0_1_set_295, LBB0_295-LJTI0_1 + // // .set L0_1_set_304, LBB0_304-LJTI0_1 + // // .set L0_1_set_301, LBB0_301-LJTI0_1 + //0x00003d64 LJTI0_1 + 0x4b, 0xfd, 0xff, 0xff, //0x00003d64 .long L0_1_set_650 + 0x44, 0xfd, 0xff, 0xff, //0x00003d68 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d6c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d70 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d74 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d78 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d7c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d80 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d84 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d88 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d8c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d90 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d94 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d98 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003d9c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003da0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003da4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003da8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dac .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003db0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003db4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003db8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dbc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dc0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dc4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dc8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dcc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dd0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dd4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dd8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ddc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003de0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003de4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003de8 .long L0_1_set_649 + 0x66, 0xd5, 0xff, 0xff, //0x00003dec .long L0_1_set_237 + 0x44, 0xfd, 0xff, 0xff, //0x00003df0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003df4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003df8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003dfc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e00 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e04 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e08 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e0c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e10 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e14 .long L0_1_set_649 + 0x1a, 0xd7, 0xff, 0xff, //0x00003e18 .long L0_1_set_255 + 0x44, 0xfd, 0xff, 0xff, //0x00003e1c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e20 .long L0_1_set_649 + 0x96, 0xc8, 0xff, 0xff, //0x00003e24 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e28 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e2c .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e30 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e34 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e38 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e3c .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e40 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e44 .long L0_1_set_80 + 0x96, 0xc8, 0xff, 0xff, //0x00003e48 .long L0_1_set_80 + 0x44, 0xfd, 0xff, 0xff, //0x00003e4c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e50 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e54 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e58 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e5c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e60 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e64 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e68 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e6c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e70 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e74 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e78 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e7c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e80 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e84 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e88 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e8c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e90 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e94 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e98 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003e9c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ea0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ea4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ea8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003eac .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003eb0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003eb4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003eb8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ebc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ec0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ec4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ec8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ecc .long L0_1_set_649 + 0x74, 0xd9, 0xff, 0xff, //0x00003ed0 .long L0_1_set_292 + 0x44, 0xfd, 0xff, 0xff, //0x00003ed4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ed8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003edc .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ee0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ee4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ee8 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003eec .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ef0 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ef4 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003ef8 .long L0_1_set_649 + 0x29, 0xd5, 0xff, 0xff, //0x00003efc .long L0_1_set_233 + 0x44, 0xfd, 0xff, 0xff, //0x00003f00 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f04 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f08 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f0c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f10 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f14 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f18 .long L0_1_set_649 + 0xa4, 0xd9, 0xff, 0xff, //0x00003f1c .long L0_1_set_295 + 0x44, 0xfd, 0xff, 0xff, //0x00003f20 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f24 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f28 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f2c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f30 .long L0_1_set_649 + 0x04, 0xda, 0xff, 0xff, //0x00003f34 .long L0_1_set_304 + 0x44, 0xfd, 0xff, 0xff, //0x00003f38 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f3c .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f40 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f44 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f48 .long L0_1_set_649 + 0x44, 0xfd, 0xff, 0xff, //0x00003f4c .long L0_1_set_649 + 0xd4, 0xd9, 0xff, 0xff, //0x00003f50 .long L0_1_set_301 + // // .set L0_2_set_281, LBB0_281-LJTI0_2 + // // .set L0_2_set_427, LBB0_427-LJTI0_2 + // // .set L0_2_set_287, LBB0_287-LJTI0_2 + // // .set L0_2_set_290, LBB0_290-LJTI0_2 + //0x00003f54 LJTI0_2 + 0x0b, 0xd7, 0xff, 0xff, //0x00003f54 .long L0_2_set_281 + 0x75, 0xe6, 0xff, 0xff, //0x00003f58 .long L0_2_set_427 + 0x0b, 0xd7, 0xff, 0xff, //0x00003f5c .long L0_2_set_281 + 0x55, 0xd7, 0xff, 0xff, //0x00003f60 .long L0_2_set_287 + 0x75, 0xe6, 0xff, 0xff, //0x00003f64 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f68 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f6c .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f70 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f74 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f78 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f7c .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f80 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f84 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f88 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f8c .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f90 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f94 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f98 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003f9c .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fa0 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fa4 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fa8 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fac .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fb0 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fb4 .long L0_2_set_427 + 0x75, 0xe6, 0xff, 0xff, //0x00003fb8 .long L0_2_set_427 + 0x71, 0xd7, 0xff, 0xff, //0x00003fbc .long L0_2_set_290 + // // .set L0_3_set_106, LBB0_106-LJTI0_3 + // // .set L0_3_set_215, LBB0_215-LJTI0_3 + // // .set L0_3_set_112, LBB0_112-LJTI0_3 // // .set L0_3_set_115, LBB0_115-LJTI0_3 - // // .set L0_3_set_107, LBB0_107-LJTI0_3 - //0x00003f54 LJTI0_3 - 0x2f, 0xc9, 0xff, 0xff, //0x00003f54 .long L0_3_set_113 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f58 .long L0_3_set_212 - 0x2f, 0xc9, 0xff, 0xff, //0x00003f5c .long L0_3_set_113 - 0x42, 0xc9, 0xff, 0xff, //0x00003f60 .long L0_3_set_115 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f64 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f68 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f6c .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f70 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f74 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f78 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f7c .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f80 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f84 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f88 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f8c .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f90 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f94 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f98 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003f9c .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fa0 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fa4 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fa8 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fac .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fb0 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fb4 .long L0_3_set_212 - 0xa0, 0xd2, 0xff, 0xff, //0x00003fb8 .long L0_3_set_212 - 0xe4, 0xc8, 0xff, 0xff, //0x00003fbc .long L0_3_set_107 - //0x00003fc0 .p2align 2, 0x00 - //0x00003fc0 _MASK_USE_NUMBER - 0x02, 0x00, 0x00, 0x00, //0x00003fc0 .long 2 + //0x00003fc0 LJTI0_3 + 0x33, 0xc8, 0xff, 0xff, //0x00003fc0 .long L0_3_set_106 + 0x08, 0xd2, 0xff, 0xff, //0x00003fc4 .long L0_3_set_215 + 0x33, 0xc8, 0xff, 0xff, //0x00003fc8 .long L0_3_set_106 + 0x82, 0xc8, 0xff, 0xff, //0x00003fcc .long L0_3_set_112 + 0x08, 0xd2, 0xff, 0xff, //0x00003fd0 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fd4 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fd8 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fdc .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fe0 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fe4 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fe8 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003fec .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003ff0 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003ff4 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003ff8 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00003ffc .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004000 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004004 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004008 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x0000400c .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004010 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004014 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004018 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x0000401c .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004020 .long L0_3_set_215 + 0x08, 0xd2, 0xff, 0xff, //0x00004024 .long L0_3_set_215 + 0x9e, 0xc8, 0xff, 0xff, //0x00004028 .long L0_3_set_115 + //0x0000402c .p2align 2, 0x00 + //0x0000402c _MASK_USE_NUMBER + 0x02, 0x00, 0x00, 0x00, //0x0000402c .long 2 } diff --git a/vendor/github.com/bytedance/sonic/internal/native/traceback_test.mock_tmpl b/vendor/github.com/bytedance/sonic/internal/native/traceback_test.mock_tmpl index c608878..25df4bf 100644 --- a/vendor/github.com/bytedance/sonic/internal/native/traceback_test.mock_tmpl +++ b/vendor/github.com/bytedance/sonic/internal/native/traceback_test.mock_tmpl @@ -1,5 +1,5 @@ -// +build !race,amd64,go1.16,!go1.25 +// +build !race,amd64,go1.16,!go1.26 // Code generated by Makefile, DO NOT EDIT. diff --git a/vendor/github.com/bytedance/sonic/internal/optcaching/fcache.go b/vendor/github.com/bytedance/sonic/internal/optcaching/fcache.go index 0100282..f207b4b 100644 --- a/vendor/github.com/bytedance/sonic/internal/optcaching/fcache.go +++ b/vendor/github.com/bytedance/sonic/internal/optcaching/fcache.go @@ -324,7 +324,7 @@ func (self *NormalFieldMap) Set(fields []resolver.FieldMeta) { } -// use hashnap +// use hashmap type FallbackFieldMap struct { oders []string inner map[string]int diff --git a/vendor/github.com/bytedance/sonic/internal/rt/base64_amd64.go b/vendor/github.com/bytedance/sonic/internal/rt/base64_amd64.go index ec5ea88..9b0cfca 100644 --- a/vendor/github.com/bytedance/sonic/internal/rt/base64_amd64.go +++ b/vendor/github.com/bytedance/sonic/internal/rt/base64_amd64.go @@ -1,4 +1,4 @@ -// +build amd64,go1.17,!go1.25 +// +build amd64,go1.17,!go1.26 package rt diff --git a/vendor/github.com/bytedance/sonic/internal/rt/base64_compat.go b/vendor/github.com/bytedance/sonic/internal/rt/base64_compat.go index bd3150f..e6abcb5 100644 --- a/vendor/github.com/bytedance/sonic/internal/rt/base64_compat.go +++ b/vendor/github.com/bytedance/sonic/internal/rt/base64_compat.go @@ -1,4 +1,4 @@ -// +build !amd64 !go1.17 go1.25 +// +build !amd64 !go1.17 go1.26 package rt diff --git a/vendor/github.com/bytedance/sonic/internal/rt/gcwb.go b/vendor/github.com/bytedance/sonic/internal/rt/gcwb.go index bd3e4ef..c9ad5fb 100644 --- a/vendor/github.com/bytedance/sonic/internal/rt/gcwb.go +++ b/vendor/github.com/bytedance/sonic/internal/rt/gcwb.go @@ -1,4 +1,4 @@ -// +build go1.21,!go1.25 +// +build go1.21,!go1.26 /* * Copyright 2021 ByteDance Inc. diff --git a/vendor/github.com/bytedance/sonic/internal/rt/map_nosiwss_go124.go b/vendor/github.com/bytedance/sonic/internal/rt/map_nosiwss_go124.go index 8ecb987..8dda15b 100644 --- a/vendor/github.com/bytedance/sonic/internal/rt/map_nosiwss_go124.go +++ b/vendor/github.com/bytedance/sonic/internal/rt/map_nosiwss_go124.go @@ -1,5 +1,5 @@ -//go:build go1.24 && !go1.25 && !goexperiment.swissmap -// +build go1.24,!go1.25,!goexperiment.swissmap +//go:build go1.24 && !go1.26 && !goexperiment.swissmap +// +build go1.24,!go1.26,!goexperiment.swissmap package rt diff --git a/vendor/github.com/bytedance/sonic/internal/rt/map_siwss_go124.go b/vendor/github.com/bytedance/sonic/internal/rt/map_siwss_go124.go index b5bf780..6a79076 100644 --- a/vendor/github.com/bytedance/sonic/internal/rt/map_siwss_go124.go +++ b/vendor/github.com/bytedance/sonic/internal/rt/map_siwss_go124.go @@ -1,5 +1,5 @@ -//go:build go1.24 && !go1.25 && goexperiment.swissmap -// +build go1.24,!go1.25,goexperiment.swissmap +//go:build go1.24 && !go1.26 && goexperiment.swissmap +// +build go1.24,!go1.26,goexperiment.swissmap package rt diff --git a/vendor/github.com/bytedance/sonic/internal/utils/skip.go b/vendor/github.com/bytedance/sonic/internal/utils/skip.go index e42bfe7..1ae7719 100644 --- a/vendor/github.com/bytedance/sonic/internal/utils/skip.go +++ b/vendor/github.com/bytedance/sonic/internal/utils/skip.go @@ -76,4 +76,12 @@ func SkipNumber(src string, pos int) (ret int) { runtime.KeepAlive(src) return int(uintptr(sp) - uintptr((*rt.GoString)(unsafe.Pointer(&src)).Ptr)) -} \ No newline at end of file +} + +// Hack: this is used for both checking space and cause friendly compile errors in 32-bit arch. +const _Sonic_Not_Support_32Bit_Arch__Checking_32Bit_Arch_Here = (1 << ' ') | (1 << '\t') | (1 << '\r') | (1 << '\n') + + +func IsSpace(c byte) bool { + return (int(1< len(xregOrderC) { diff --git a/vendor/github.com/bytedance/sonic/loader/internal/iasm/expr/errors.go b/vendor/github.com/bytedance/sonic/loader/internal/iasm/expr/errors.go index 791c18b..ca27b04 100644 --- a/vendor/github.com/bytedance/sonic/loader/internal/iasm/expr/errors.go +++ b/vendor/github.com/bytedance/sonic/loader/internal/iasm/expr/errors.go @@ -37,7 +37,7 @@ func (self *SyntaxError) Error() string { return fmt.Sprintf("Syntax error at position %d: %s", self.Pos, self.Reason) } -// RuntimeError is an error which would occure at run time. +// RuntimeError is an error which would occur at run time. type RuntimeError struct { Reason string } diff --git a/vendor/github.com/bytedance/sonic/loader/internal/iasm/x86_64/program.go b/vendor/github.com/bytedance/sonic/loader/internal/iasm/x86_64/program.go index bf7d3a1..1c0c7cc 100644 --- a/vendor/github.com/bytedance/sonic/loader/internal/iasm/x86_64/program.go +++ b/vendor/github.com/bytedance/sonic/loader/internal/iasm/x86_64/program.go @@ -112,7 +112,7 @@ func (self *_Pseudo) evalExpr(low int64, high int64) int64 { func (self *_Pseudo) alignSize(pc uintptr) int { if !ispow2(self.uint) { - panic(fmt.Sprintf("aligment should be a power of 2, not %d", self.uint)) + panic(fmt.Sprintf("alignment should be a power of 2, not %d", self.uint)) } else { return align(int(pc), bits.TrailingZeros64(self.uint)) - int(pc) } @@ -469,7 +469,7 @@ func (self *Program) Free() { // Link pins a label at the current position. func (self *Program) Link(p *Label) { if p.Dest != nil { - panic("lable was alreay linked") + panic("label was already linked") } else { p.Dest = self.pseudo(_PseudoNop) } diff --git a/vendor/github.com/bytedance/sonic/sonic.go b/vendor/github.com/bytedance/sonic/sonic.go index 3957303..1b2f6d7 100644 --- a/vendor/github.com/bytedance/sonic/sonic.go +++ b/vendor/github.com/bytedance/sonic/sonic.go @@ -1,5 +1,5 @@ -//go:build (amd64 && go1.17 && !go1.25) || (arm64 && go1.20 && !go1.25) -// +build amd64,go1.17,!go1.25 arm64,go1.20,!go1.25 +//go:build (amd64 && go1.17 && !go1.26) || (arm64 && go1.20 && !go1.26) +// +build amd64,go1.17,!go1.26 arm64,go1.20,!go1.26 /* * Copyright 2021 ByteDance Inc. @@ -90,6 +90,9 @@ func (cfg Config) Froze() API { if cfg.ValidateString { api.decoderOpts |= decoder.OptionValidateString } + if cfg.CaseSensitive { + api.decoderOpts |= decoder.OptionCaseSensitive + } return api } diff --git a/vendor/github.com/bytedance/sonic/utf8/utf8.go b/vendor/github.com/bytedance/sonic/utf8/utf8.go index 9d8bcc9..c1403fd 100644 --- a/vendor/github.com/bytedance/sonic/utf8/utf8.go +++ b/vendor/github.com/bytedance/sonic/utf8/utf8.go @@ -62,7 +62,7 @@ func CorrectWith(dst []byte, src []byte, repl string) []byte { return dst } -// Validate is a simd-accelereated drop-in replacement for the standard library's utf8.Valid. +// Validate is a simd-accelerated drop-in replacement for the standard library's utf8.Valid. func Validate(src []byte) bool { if src == nil { return true diff --git a/vendor/github.com/cespare/xxhash/v2/README.md b/vendor/github.com/cespare/xxhash/v2/README.md index 792b4a6..8bf0e5b 100644 --- a/vendor/github.com/cespare/xxhash/v2/README.md +++ b/vendor/github.com/cespare/xxhash/v2/README.md @@ -3,8 +3,7 @@ [![Go Reference](https://pkg.go.dev/badge/github.com/cespare/xxhash/v2.svg)](https://pkg.go.dev/github.com/cespare/xxhash/v2) [![Test](https://github.com/cespare/xxhash/actions/workflows/test.yml/badge.svg)](https://github.com/cespare/xxhash/actions/workflows/test.yml) -xxhash is a Go implementation of the 64-bit -[xxHash](http://cyan4973.github.io/xxHash/) algorithm, XXH64. This is a +xxhash is a Go implementation of the 64-bit [xxHash] algorithm, XXH64. This is a high-quality hashing algorithm that is much faster than anything in the Go standard library. @@ -25,8 +24,11 @@ func (*Digest) WriteString(string) (int, error) func (*Digest) Sum64() uint64 ``` -This implementation provides a fast pure-Go implementation and an even faster -assembly implementation for amd64. +The package is written with optimized pure Go and also contains even faster +assembly implementations for amd64 and arm64. If desired, the `purego` build tag +opts into using the Go code even on those architectures. + +[xxHash]: http://cyan4973.github.io/xxHash/ ## Compatibility @@ -45,19 +47,20 @@ I recommend using the latest release of Go. Here are some quick benchmarks comparing the pure-Go and assembly implementations of Sum64. -| input size | purego | asm | -| --- | --- | --- | -| 5 B | 979.66 MB/s | 1291.17 MB/s | -| 100 B | 7475.26 MB/s | 7973.40 MB/s | -| 4 KB | 17573.46 MB/s | 17602.65 MB/s | -| 10 MB | 17131.46 MB/s | 17142.16 MB/s | +| input size | purego | asm | +| ---------- | --------- | --------- | +| 4 B | 1.3 GB/s | 1.2 GB/s | +| 16 B | 2.9 GB/s | 3.5 GB/s | +| 100 B | 6.9 GB/s | 8.1 GB/s | +| 4 KB | 11.7 GB/s | 16.7 GB/s | +| 10 MB | 12.0 GB/s | 17.3 GB/s | -These numbers were generated on Ubuntu 18.04 with an Intel i7-8700K CPU using -the following commands under Go 1.11.2: +These numbers were generated on Ubuntu 20.04 with an Intel Xeon Platinum 8252C +CPU using the following commands under Go 1.19.2: ``` -$ go test -tags purego -benchtime 10s -bench '/xxhash,direct,bytes' -$ go test -benchtime 10s -bench '/xxhash,direct,bytes' +benchstat <(go test -tags purego -benchtime 500ms -count 15 -bench 'Sum64$') +benchstat <(go test -benchtime 500ms -count 15 -bench 'Sum64$') ``` ## Projects using this package diff --git a/vendor/github.com/cespare/xxhash/v2/testall.sh b/vendor/github.com/cespare/xxhash/v2/testall.sh new file mode 100644 index 0000000..94b9c44 --- /dev/null +++ b/vendor/github.com/cespare/xxhash/v2/testall.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -eu -o pipefail + +# Small convenience script for running the tests with various combinations of +# arch/tags. This assumes we're running on amd64 and have qemu available. + +go test ./... +go test -tags purego ./... +GOARCH=arm64 go test +GOARCH=arm64 go test -tags purego diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash.go b/vendor/github.com/cespare/xxhash/v2/xxhash.go index 15c835d..a9e0d45 100644 --- a/vendor/github.com/cespare/xxhash/v2/xxhash.go +++ b/vendor/github.com/cespare/xxhash/v2/xxhash.go @@ -16,19 +16,11 @@ const ( prime5 uint64 = 2870177450012600261 ) -// NOTE(caleb): I'm using both consts and vars of the primes. Using consts where -// possible in the Go code is worth a small (but measurable) performance boost -// by avoiding some MOVQs. Vars are needed for the asm and also are useful for -// convenience in the Go code in a few places where we need to intentionally -// avoid constant arithmetic (e.g., v1 := prime1 + prime2 fails because the -// result overflows a uint64). -var ( - prime1v = prime1 - prime2v = prime2 - prime3v = prime3 - prime4v = prime4 - prime5v = prime5 -) +// Store the primes in an array as well. +// +// The consts are used when possible in Go code to avoid MOVs but we need a +// contiguous array of the assembly code. +var primes = [...]uint64{prime1, prime2, prime3, prime4, prime5} // Digest implements hash.Hash64. type Digest struct { @@ -50,10 +42,10 @@ func New() *Digest { // Reset clears the Digest's state so that it can be reused. func (d *Digest) Reset() { - d.v1 = prime1v + prime2 + d.v1 = primes[0] + prime2 d.v2 = prime2 d.v3 = 0 - d.v4 = -prime1v + d.v4 = -primes[0] d.total = 0 d.n = 0 } @@ -69,21 +61,23 @@ func (d *Digest) Write(b []byte) (n int, err error) { n = len(b) d.total += uint64(n) + memleft := d.mem[d.n&(len(d.mem)-1):] + if d.n+n < 32 { // This new data doesn't even fill the current block. - copy(d.mem[d.n:], b) + copy(memleft, b) d.n += n return } if d.n > 0 { // Finish off the partial block. - copy(d.mem[d.n:], b) + c := copy(memleft, b) d.v1 = round(d.v1, u64(d.mem[0:8])) d.v2 = round(d.v2, u64(d.mem[8:16])) d.v3 = round(d.v3, u64(d.mem[16:24])) d.v4 = round(d.v4, u64(d.mem[24:32])) - b = b[32-d.n:] + b = b[c:] d.n = 0 } @@ -133,21 +127,20 @@ func (d *Digest) Sum64() uint64 { h += d.total - i, end := 0, d.n - for ; i+8 <= end; i += 8 { - k1 := round(0, u64(d.mem[i:i+8])) + b := d.mem[:d.n&(len(d.mem)-1)] + for ; len(b) >= 8; b = b[8:] { + k1 := round(0, u64(b[:8])) h ^= k1 h = rol27(h)*prime1 + prime4 } - if i+4 <= end { - h ^= uint64(u32(d.mem[i:i+4])) * prime1 + if len(b) >= 4 { + h ^= uint64(u32(b[:4])) * prime1 h = rol23(h)*prime2 + prime3 - i += 4 + b = b[4:] } - for i < end { - h ^= uint64(d.mem[i]) * prime5 + for ; len(b) > 0; b = b[1:] { + h ^= uint64(b[0]) * prime5 h = rol11(h) * prime1 - i++ } h ^= h >> 33 diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s b/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s index be8db5b..3e8b132 100644 --- a/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s +++ b/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s @@ -1,215 +1,209 @@ +//go:build !appengine && gc && !purego // +build !appengine // +build gc // +build !purego #include "textflag.h" -// Register allocation: -// AX h -// SI pointer to advance through b -// DX n -// BX loop end -// R8 v1, k1 -// R9 v2 -// R10 v3 -// R11 v4 -// R12 tmp -// R13 prime1v -// R14 prime2v -// DI prime4v - -// round reads from and advances the buffer pointer in SI. -// It assumes that R13 has prime1v and R14 has prime2v. -#define round(r) \ - MOVQ (SI), R12 \ - ADDQ $8, SI \ - IMULQ R14, R12 \ - ADDQ R12, r \ - ROLQ $31, r \ - IMULQ R13, r - -// mergeRound applies a merge round on the two registers acc and val. -// It assumes that R13 has prime1v, R14 has prime2v, and DI has prime4v. -#define mergeRound(acc, val) \ - IMULQ R14, val \ - ROLQ $31, val \ - IMULQ R13, val \ - XORQ val, acc \ - IMULQ R13, acc \ - ADDQ DI, acc +// Registers: +#define h AX +#define d AX +#define p SI // pointer to advance through b +#define n DX +#define end BX // loop end +#define v1 R8 +#define v2 R9 +#define v3 R10 +#define v4 R11 +#define x R12 +#define prime1 R13 +#define prime2 R14 +#define prime4 DI + +#define round(acc, x) \ + IMULQ prime2, x \ + ADDQ x, acc \ + ROLQ $31, acc \ + IMULQ prime1, acc + +// round0 performs the operation x = round(0, x). +#define round0(x) \ + IMULQ prime2, x \ + ROLQ $31, x \ + IMULQ prime1, x + +// mergeRound applies a merge round on the two registers acc and x. +// It assumes that prime1, prime2, and prime4 have been loaded. +#define mergeRound(acc, x) \ + round0(x) \ + XORQ x, acc \ + IMULQ prime1, acc \ + ADDQ prime4, acc + +// blockLoop processes as many 32-byte blocks as possible, +// updating v1, v2, v3, and v4. It assumes that there is at least one block +// to process. +#define blockLoop() \ +loop: \ + MOVQ +0(p), x \ + round(v1, x) \ + MOVQ +8(p), x \ + round(v2, x) \ + MOVQ +16(p), x \ + round(v3, x) \ + MOVQ +24(p), x \ + round(v4, x) \ + ADDQ $32, p \ + CMPQ p, end \ + JLE loop // func Sum64(b []byte) uint64 -TEXT ·Sum64(SB), NOSPLIT, $0-32 +TEXT ·Sum64(SB), NOSPLIT|NOFRAME, $0-32 // Load fixed primes. - MOVQ ·prime1v(SB), R13 - MOVQ ·prime2v(SB), R14 - MOVQ ·prime4v(SB), DI + MOVQ ·primes+0(SB), prime1 + MOVQ ·primes+8(SB), prime2 + MOVQ ·primes+24(SB), prime4 // Load slice. - MOVQ b_base+0(FP), SI - MOVQ b_len+8(FP), DX - LEAQ (SI)(DX*1), BX + MOVQ b_base+0(FP), p + MOVQ b_len+8(FP), n + LEAQ (p)(n*1), end // The first loop limit will be len(b)-32. - SUBQ $32, BX + SUBQ $32, end // Check whether we have at least one block. - CMPQ DX, $32 + CMPQ n, $32 JLT noBlocks // Set up initial state (v1, v2, v3, v4). - MOVQ R13, R8 - ADDQ R14, R8 - MOVQ R14, R9 - XORQ R10, R10 - XORQ R11, R11 - SUBQ R13, R11 - - // Loop until SI > BX. -blockLoop: - round(R8) - round(R9) - round(R10) - round(R11) - - CMPQ SI, BX - JLE blockLoop - - MOVQ R8, AX - ROLQ $1, AX - MOVQ R9, R12 - ROLQ $7, R12 - ADDQ R12, AX - MOVQ R10, R12 - ROLQ $12, R12 - ADDQ R12, AX - MOVQ R11, R12 - ROLQ $18, R12 - ADDQ R12, AX - - mergeRound(AX, R8) - mergeRound(AX, R9) - mergeRound(AX, R10) - mergeRound(AX, R11) + MOVQ prime1, v1 + ADDQ prime2, v1 + MOVQ prime2, v2 + XORQ v3, v3 + XORQ v4, v4 + SUBQ prime1, v4 + + blockLoop() + + MOVQ v1, h + ROLQ $1, h + MOVQ v2, x + ROLQ $7, x + ADDQ x, h + MOVQ v3, x + ROLQ $12, x + ADDQ x, h + MOVQ v4, x + ROLQ $18, x + ADDQ x, h + + mergeRound(h, v1) + mergeRound(h, v2) + mergeRound(h, v3) + mergeRound(h, v4) JMP afterBlocks noBlocks: - MOVQ ·prime5v(SB), AX + MOVQ ·primes+32(SB), h afterBlocks: - ADDQ DX, AX - - // Right now BX has len(b)-32, and we want to loop until SI > len(b)-8. - ADDQ $24, BX - - CMPQ SI, BX - JG fourByte - -wordLoop: - // Calculate k1. - MOVQ (SI), R8 - ADDQ $8, SI - IMULQ R14, R8 - ROLQ $31, R8 - IMULQ R13, R8 - - XORQ R8, AX - ROLQ $27, AX - IMULQ R13, AX - ADDQ DI, AX - - CMPQ SI, BX - JLE wordLoop - -fourByte: - ADDQ $4, BX - CMPQ SI, BX - JG singles - - MOVL (SI), R8 - ADDQ $4, SI - IMULQ R13, R8 - XORQ R8, AX - - ROLQ $23, AX - IMULQ R14, AX - ADDQ ·prime3v(SB), AX - -singles: - ADDQ $4, BX - CMPQ SI, BX + ADDQ n, h + + ADDQ $24, end + CMPQ p, end + JG try4 + +loop8: + MOVQ (p), x + ADDQ $8, p + round0(x) + XORQ x, h + ROLQ $27, h + IMULQ prime1, h + ADDQ prime4, h + + CMPQ p, end + JLE loop8 + +try4: + ADDQ $4, end + CMPQ p, end + JG try1 + + MOVL (p), x + ADDQ $4, p + IMULQ prime1, x + XORQ x, h + + ROLQ $23, h + IMULQ prime2, h + ADDQ ·primes+16(SB), h + +try1: + ADDQ $4, end + CMPQ p, end JGE finalize -singlesLoop: - MOVBQZX (SI), R12 - ADDQ $1, SI - IMULQ ·prime5v(SB), R12 - XORQ R12, AX +loop1: + MOVBQZX (p), x + ADDQ $1, p + IMULQ ·primes+32(SB), x + XORQ x, h + ROLQ $11, h + IMULQ prime1, h - ROLQ $11, AX - IMULQ R13, AX - - CMPQ SI, BX - JL singlesLoop + CMPQ p, end + JL loop1 finalize: - MOVQ AX, R12 - SHRQ $33, R12 - XORQ R12, AX - IMULQ R14, AX - MOVQ AX, R12 - SHRQ $29, R12 - XORQ R12, AX - IMULQ ·prime3v(SB), AX - MOVQ AX, R12 - SHRQ $32, R12 - XORQ R12, AX - - MOVQ AX, ret+24(FP) + MOVQ h, x + SHRQ $33, x + XORQ x, h + IMULQ prime2, h + MOVQ h, x + SHRQ $29, x + XORQ x, h + IMULQ ·primes+16(SB), h + MOVQ h, x + SHRQ $32, x + XORQ x, h + + MOVQ h, ret+24(FP) RET -// writeBlocks uses the same registers as above except that it uses AX to store -// the d pointer. - // func writeBlocks(d *Digest, b []byte) int -TEXT ·writeBlocks(SB), NOSPLIT, $0-40 +TEXT ·writeBlocks(SB), NOSPLIT|NOFRAME, $0-40 // Load fixed primes needed for round. - MOVQ ·prime1v(SB), R13 - MOVQ ·prime2v(SB), R14 + MOVQ ·primes+0(SB), prime1 + MOVQ ·primes+8(SB), prime2 // Load slice. - MOVQ b_base+8(FP), SI - MOVQ b_len+16(FP), DX - LEAQ (SI)(DX*1), BX - SUBQ $32, BX + MOVQ b_base+8(FP), p + MOVQ b_len+16(FP), n + LEAQ (p)(n*1), end + SUBQ $32, end // Load vN from d. - MOVQ d+0(FP), AX - MOVQ 0(AX), R8 // v1 - MOVQ 8(AX), R9 // v2 - MOVQ 16(AX), R10 // v3 - MOVQ 24(AX), R11 // v4 + MOVQ s+0(FP), d + MOVQ 0(d), v1 + MOVQ 8(d), v2 + MOVQ 16(d), v3 + MOVQ 24(d), v4 // We don't need to check the loop condition here; this function is // always called with at least one block of data to process. -blockLoop: - round(R8) - round(R9) - round(R10) - round(R11) - - CMPQ SI, BX - JLE blockLoop + blockLoop() // Copy vN back to d. - MOVQ R8, 0(AX) - MOVQ R9, 8(AX) - MOVQ R10, 16(AX) - MOVQ R11, 24(AX) - - // The number of bytes written is SI minus the old base pointer. - SUBQ b_base+8(FP), SI - MOVQ SI, ret+32(FP) + MOVQ v1, 0(d) + MOVQ v2, 8(d) + MOVQ v3, 16(d) + MOVQ v4, 24(d) + + // The number of bytes written is p minus the old base pointer. + SUBQ b_base+8(FP), p + MOVQ p, ret+32(FP) RET diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s b/vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s new file mode 100644 index 0000000..7e3145a --- /dev/null +++ b/vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s @@ -0,0 +1,183 @@ +//go:build !appengine && gc && !purego +// +build !appengine +// +build gc +// +build !purego + +#include "textflag.h" + +// Registers: +#define digest R1 +#define h R2 // return value +#define p R3 // input pointer +#define n R4 // input length +#define nblocks R5 // n / 32 +#define prime1 R7 +#define prime2 R8 +#define prime3 R9 +#define prime4 R10 +#define prime5 R11 +#define v1 R12 +#define v2 R13 +#define v3 R14 +#define v4 R15 +#define x1 R20 +#define x2 R21 +#define x3 R22 +#define x4 R23 + +#define round(acc, x) \ + MADD prime2, acc, x, acc \ + ROR $64-31, acc \ + MUL prime1, acc + +// round0 performs the operation x = round(0, x). +#define round0(x) \ + MUL prime2, x \ + ROR $64-31, x \ + MUL prime1, x + +#define mergeRound(acc, x) \ + round0(x) \ + EOR x, acc \ + MADD acc, prime4, prime1, acc + +// blockLoop processes as many 32-byte blocks as possible, +// updating v1, v2, v3, and v4. It assumes that n >= 32. +#define blockLoop() \ + LSR $5, n, nblocks \ + PCALIGN $16 \ + loop: \ + LDP.P 16(p), (x1, x2) \ + LDP.P 16(p), (x3, x4) \ + round(v1, x1) \ + round(v2, x2) \ + round(v3, x3) \ + round(v4, x4) \ + SUB $1, nblocks \ + CBNZ nblocks, loop + +// func Sum64(b []byte) uint64 +TEXT ·Sum64(SB), NOSPLIT|NOFRAME, $0-32 + LDP b_base+0(FP), (p, n) + + LDP ·primes+0(SB), (prime1, prime2) + LDP ·primes+16(SB), (prime3, prime4) + MOVD ·primes+32(SB), prime5 + + CMP $32, n + CSEL LT, prime5, ZR, h // if n < 32 { h = prime5 } else { h = 0 } + BLT afterLoop + + ADD prime1, prime2, v1 + MOVD prime2, v2 + MOVD $0, v3 + NEG prime1, v4 + + blockLoop() + + ROR $64-1, v1, x1 + ROR $64-7, v2, x2 + ADD x1, x2 + ROR $64-12, v3, x3 + ROR $64-18, v4, x4 + ADD x3, x4 + ADD x2, x4, h + + mergeRound(h, v1) + mergeRound(h, v2) + mergeRound(h, v3) + mergeRound(h, v4) + +afterLoop: + ADD n, h + + TBZ $4, n, try8 + LDP.P 16(p), (x1, x2) + + round0(x1) + + // NOTE: here and below, sequencing the EOR after the ROR (using a + // rotated register) is worth a small but measurable speedup for small + // inputs. + ROR $64-27, h + EOR x1 @> 64-27, h, h + MADD h, prime4, prime1, h + + round0(x2) + ROR $64-27, h + EOR x2 @> 64-27, h, h + MADD h, prime4, prime1, h + +try8: + TBZ $3, n, try4 + MOVD.P 8(p), x1 + + round0(x1) + ROR $64-27, h + EOR x1 @> 64-27, h, h + MADD h, prime4, prime1, h + +try4: + TBZ $2, n, try2 + MOVWU.P 4(p), x2 + + MUL prime1, x2 + ROR $64-23, h + EOR x2 @> 64-23, h, h + MADD h, prime3, prime2, h + +try2: + TBZ $1, n, try1 + MOVHU.P 2(p), x3 + AND $255, x3, x1 + LSR $8, x3, x2 + + MUL prime5, x1 + ROR $64-11, h + EOR x1 @> 64-11, h, h + MUL prime1, h + + MUL prime5, x2 + ROR $64-11, h + EOR x2 @> 64-11, h, h + MUL prime1, h + +try1: + TBZ $0, n, finalize + MOVBU (p), x4 + + MUL prime5, x4 + ROR $64-11, h + EOR x4 @> 64-11, h, h + MUL prime1, h + +finalize: + EOR h >> 33, h + MUL prime2, h + EOR h >> 29, h + MUL prime3, h + EOR h >> 32, h + + MOVD h, ret+24(FP) + RET + +// func writeBlocks(d *Digest, b []byte) int +TEXT ·writeBlocks(SB), NOSPLIT|NOFRAME, $0-40 + LDP ·primes+0(SB), (prime1, prime2) + + // Load state. Assume v[1-4] are stored contiguously. + MOVD d+0(FP), digest + LDP 0(digest), (v1, v2) + LDP 16(digest), (v3, v4) + + LDP b_base+8(FP), (p, n) + + blockLoop() + + // Store updated state. + STP (v1, v2), 0(digest) + STP (v3, v4), 16(digest) + + BIC $31, n + MOVD n, ret+32(FP) + RET diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.go b/vendor/github.com/cespare/xxhash/v2/xxhash_asm.go similarity index 73% rename from vendor/github.com/cespare/xxhash/v2/xxhash_amd64.go rename to vendor/github.com/cespare/xxhash/v2/xxhash_asm.go index ad14b80..9216e0a 100644 --- a/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.go +++ b/vendor/github.com/cespare/xxhash/v2/xxhash_asm.go @@ -1,3 +1,5 @@ +//go:build (amd64 || arm64) && !appengine && gc && !purego +// +build amd64 arm64 // +build !appengine // +build gc // +build !purego diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_other.go b/vendor/github.com/cespare/xxhash/v2/xxhash_other.go index 4a5a821..26df13b 100644 --- a/vendor/github.com/cespare/xxhash/v2/xxhash_other.go +++ b/vendor/github.com/cespare/xxhash/v2/xxhash_other.go @@ -1,4 +1,5 @@ -// +build !amd64 appengine !gc purego +//go:build (!amd64 && !arm64) || appengine || !gc || purego +// +build !amd64,!arm64 appengine !gc purego package xxhash @@ -14,10 +15,10 @@ func Sum64(b []byte) uint64 { var h uint64 if n >= 32 { - v1 := prime1v + prime2 + v1 := primes[0] + prime2 v2 := prime2 v3 := uint64(0) - v4 := -prime1v + v4 := -primes[0] for len(b) >= 32 { v1 = round(v1, u64(b[0:8:len(b)])) v2 = round(v2, u64(b[8:16:len(b)])) @@ -36,19 +37,18 @@ func Sum64(b []byte) uint64 { h += uint64(n) - i, end := 0, len(b) - for ; i+8 <= end; i += 8 { - k1 := round(0, u64(b[i:i+8:len(b)])) + for ; len(b) >= 8; b = b[8:] { + k1 := round(0, u64(b[:8])) h ^= k1 h = rol27(h)*prime1 + prime4 } - if i+4 <= end { - h ^= uint64(u32(b[i:i+4:len(b)])) * prime1 + if len(b) >= 4 { + h ^= uint64(u32(b[:4])) * prime1 h = rol23(h)*prime2 + prime3 - i += 4 + b = b[4:] } - for ; i < end; i++ { - h ^= uint64(b[i]) * prime5 + for ; len(b) > 0; b = b[1:] { + h ^= uint64(b[0]) * prime5 h = rol11(h) * prime1 } diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go b/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go index fc9bea7..e86f1b5 100644 --- a/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go +++ b/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go @@ -1,3 +1,4 @@ +//go:build appengine // +build appengine // This file contains the safe implementations of otherwise unsafe-using code. diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go b/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go index 376e0ca..1c1638f 100644 --- a/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go +++ b/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go @@ -1,3 +1,4 @@ +//go:build !appengine // +build !appengine // This file encapsulates usage of unsafe. @@ -11,7 +12,7 @@ import ( // In the future it's possible that compiler optimizations will make these // XxxString functions unnecessary by realizing that calls such as -// Sum64([]byte(s)) don't need to copy s. See https://golang.org/issue/2205. +// Sum64([]byte(s)) don't need to copy s. See https://go.dev/issue/2205. // If that happens, even if we keep these functions they can be replaced with // the trivial safe code. diff --git a/vendor/github.com/cloudwego/base64x/.licenserc.yaml b/vendor/github.com/cloudwego/base64x/.licenserc.yaml index f969fec..8f65d8f 100644 --- a/vendor/github.com/cloudwego/base64x/.licenserc.yaml +++ b/vendor/github.com/cloudwego/base64x/.licenserc.yaml @@ -8,7 +8,7 @@ header: - '**/*.s' paths-ignore: - - 'native_subr_amd64.go' - - 'native_text_amd64.go' + - 'internal/native/avx2/*.go' + - 'internal/native/sse/*.go' comment: on-failure diff --git a/vendor/github.com/gin-contrib/sse/.golangci.yml b/vendor/github.com/gin-contrib/sse/.golangci.yml index 4c44c5f..47094ac 100644 --- a/vendor/github.com/gin-contrib/sse/.golangci.yml +++ b/vendor/github.com/gin-contrib/sse/.golangci.yml @@ -1,3 +1,50 @@ +version: "2" linters: - disable: + default: none + enable: + - bodyclose + - dogsled + - dupl - errcheck + - exhaustive + - gochecknoinits + - goconst + - gocritic + - gocyclo + - goprintffuncname + - gosec + - govet + - ineffassign + - lll + - misspell + - nakedret + - noctx + - nolintlint + - rowserrcheck + - staticcheck + - unconvert + - unparam + - unused + - whitespace + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + enable: + - gofmt + - gofumpt + - goimports + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/vendor/github.com/gin-contrib/sse/sse-decoder.go b/vendor/github.com/gin-contrib/sse/sse-decoder.go index fd49b9c..da2c2d4 100644 --- a/vendor/github.com/gin-contrib/sse/sse-decoder.go +++ b/vendor/github.com/gin-contrib/sse/sse-decoder.go @@ -7,7 +7,6 @@ package sse import ( "bytes" "io" - "io/ioutil" ) type decoder struct { @@ -22,7 +21,8 @@ func Decode(r io.Reader) ([]Event, error) { func (d *decoder) dispatchEvent(event Event, data string) { dataLength := len(data) if dataLength > 0 { - //If the data buffer's last character is a U+000A LINE FEED (LF) character, then remove the last character from the data buffer. + // If the data buffer's last character is a U+000A LINE FEED (LF) character, + // then remove the last character from the data buffer. data = data[:dataLength-1] dataLength-- } @@ -37,13 +37,13 @@ func (d *decoder) dispatchEvent(event Event, data string) { } func (d *decoder) decode(r io.Reader) ([]Event, error) { - buf, err := ioutil.ReadAll(r) + buf, err := io.ReadAll(r) if err != nil { return nil, err } var currentEvent Event - var dataBuffer *bytes.Buffer = new(bytes.Buffer) + dataBuffer := new(bytes.Buffer) // TODO (and unit tests) // Lines must be separated by either a U+000D CARRIAGE RETURN U+000A LINE FEED (CRLF) character pair, // a single U+000A LINE FEED (LF) character, @@ -96,7 +96,8 @@ func (d *decoder) decode(r io.Reader) ([]Event, error) { currentEvent.Id = string(value) case "retry": // If the field value consists of only characters in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), - // then interpret the field value as an integer in base ten, and set the event stream's reconnection time to that integer. + // then interpret the field value as an integer in base ten, and set the event stream's + // reconnection time to that integer. // Otherwise, ignore the field. currentEvent.Id = string(value) case "data": @@ -105,7 +106,7 @@ func (d *decoder) decode(r io.Reader) ([]Event, error) { // then append a single U+000A LINE FEED (LF) character to the data buffer. dataBuffer.WriteString("\n") default: - //Otherwise. The field is ignored. + // Otherwise. The field is ignored. continue } } diff --git a/vendor/github.com/gin-contrib/sse/sse-encoder.go b/vendor/github.com/gin-contrib/sse/sse-encoder.go index 0d26c82..9ebb49f 100644 --- a/vendor/github.com/gin-contrib/sse/sse-encoder.go +++ b/vendor/github.com/gin-contrib/sse/sse-encoder.go @@ -20,8 +20,10 @@ import ( const ContentType = "text/event-stream;charset=utf-8" -var contentType = []string{ContentType} -var noCache = []string{"no-cache"} +var ( + contentType = []string{ContentType} + noCache = []string{"no-cache"} +) var fieldReplacer = strings.NewReplacer( "\n", "\\n", @@ -48,48 +50,48 @@ func Encode(writer io.Writer, event Event) error { func writeId(w stringWriter, id string) { if len(id) > 0 { - w.WriteString("id:") - fieldReplacer.WriteString(w, id) - w.WriteString("\n") + _, _ = w.WriteString("id:") + _, _ = fieldReplacer.WriteString(w, id) + _, _ = w.WriteString("\n") } } func writeEvent(w stringWriter, event string) { if len(event) > 0 { - w.WriteString("event:") - fieldReplacer.WriteString(w, event) - w.WriteString("\n") + _, _ = w.WriteString("event:") + _, _ = fieldReplacer.WriteString(w, event) + _, _ = w.WriteString("\n") } } func writeRetry(w stringWriter, retry uint) { if retry > 0 { - w.WriteString("retry:") - w.WriteString(strconv.FormatUint(uint64(retry), 10)) - w.WriteString("\n") + _, _ = w.WriteString("retry:") + _, _ = w.WriteString(strconv.FormatUint(uint64(retry), 10)) + _, _ = w.WriteString("\n") } } func writeData(w stringWriter, data interface{}) error { - w.WriteString("data:") + _, _ = w.WriteString("data:") bData, ok := data.([]byte) if ok { - dataReplacer.WriteString(w, string(bData)) - w.WriteString("\n\n") + _, _ = dataReplacer.WriteString(w, string(bData)) + _, _ = w.WriteString("\n\n") return nil } - switch kindOfData(data) { + switch kindOfData(data) { //nolint:exhaustive case reflect.Struct, reflect.Slice, reflect.Map: err := json.NewEncoder(w).Encode(data) if err != nil { return err } - w.WriteString("\n") + _, _ = w.WriteString("\n") default: - dataReplacer.WriteString(w, fmt.Sprint(data)) - w.WriteString("\n\n") + _, _ = dataReplacer.WriteString(w, fmt.Sprint(data)) + _, _ = w.WriteString("\n\n") } return nil } diff --git a/vendor/github.com/gin-contrib/sse/writer.go b/vendor/github.com/gin-contrib/sse/writer.go index 6f9806c..724d9d0 100644 --- a/vendor/github.com/gin-contrib/sse/writer.go +++ b/vendor/github.com/gin-contrib/sse/writer.go @@ -12,7 +12,7 @@ type stringWrapper struct { } func (w stringWrapper) WriteString(str string) (int, error) { - return w.Writer.Write([]byte(str)) + return w.Write([]byte(str)) } func checkWriter(writer io.Writer) stringWriter { diff --git a/vendor/github.com/gin-gonic/gin/.golangci.yml b/vendor/github.com/gin-gonic/gin/.golangci.yml index 4a72f73..d888706 100644 --- a/vendor/github.com/gin-gonic/gin/.golangci.yml +++ b/vendor/github.com/gin-gonic/gin/.golangci.yml @@ -1,57 +1,86 @@ -run: - timeout: 5m +version: "2" linters: enable: - asciicheck + - copyloopvar - dogsled - durationcheck - - errcheck - errorlint - - exportloopref - - gci - - gofmt - - goimports - gosec - misspell - nakedret - nilerr - nolintlint + - perfsprint - revive + - testifylint + - usestdlibvars - wastedassign - -linters-settings: - gosec: - # To select a subset of rules to run. - # Available rules: https://github.com/securego/gosec#available-rules - # Default: [] - means include all rules - includes: - - G102 - - G106 - - G108 - - G109 - - G111 - - G112 - - G201 - - G203 - -issues: - exclude-rules: - - linters: - - structcheck - - unused - text: "`data` is unused" - - linters: - - staticcheck - text: "SA1019:" - - linters: - - revive - text: "var-naming:" - - linters: - - revive - text: "exported:" - - path: _test\.go - linters: - - gosec # security is not make sense in tests - - linters: - - revive - path: _test\.go + settings: + gosec: + includes: + - G102 + - G106 + - G108 + - G109 + - G111 + - G112 + - G201 + - G203 + perfsprint: + int-conversion: true + err-error: true + errorf: true + sprintf1: true + strconcat: true + testifylint: + enable-all: true + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + rules: + - linters: + - structcheck + - unused + text: '`data` is unused' + - linters: + - staticcheck + text: 'SA1019:' + - linters: + - revive + text: 'var-naming:' + - linters: + - revive + text: 'exported:' + - linters: + - gosec + path: _test\.go + - linters: + - revive + path: _test\.go + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + enable: + - gci + - gofmt + - gofumpt + - goimports + settings: + gofmt: + rewrite-rules: + - pattern: 'interface{}' + replacement: 'any' + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ + - gin.go diff --git a/vendor/github.com/gin-gonic/gin/CHANGELOG.md b/vendor/github.com/gin-gonic/gin/CHANGELOG.md index 7968520..9451db3 100644 --- a/vendor/github.com/gin-gonic/gin/CHANGELOG.md +++ b/vendor/github.com/gin-gonic/gin/CHANGELOG.md @@ -1,8 +1,176 @@ # Gin ChangeLog +## Gin v1.11.0 + +### Features + +* feat(gin): Experimental support for HTTP/3 using quic-go/quic-go ([#3210](https://github.com/gin-gonic/gin/pull/3210)) +* feat(form): add array collection format in form binding ([#3986](https://github.com/gin-gonic/gin/pull/3986)), add custom string slice for form tag unmarshal ([#3970](https://github.com/gin-gonic/gin/pull/3970)) +* feat(binding): add BindPlain ([#3904](https://github.com/gin-gonic/gin/pull/3904)) +* feat(fs): Export, test and document OnlyFilesFS ([#3939](https://github.com/gin-gonic/gin/pull/3939)) +* feat(binding): add support for unixMilli and unixMicro ([#4190](https://github.com/gin-gonic/gin/pull/4190)) +* feat(form): Support default values for collections in form binding ([#4048](https://github.com/gin-gonic/gin/pull/4048)) +* feat(context): GetXxx added support for more go native types ([#3633](https://github.com/gin-gonic/gin/pull/3633)) + +### Enhancements + +* perf(context): optimize getMapFromFormData performance ([#4339](https://github.com/gin-gonic/gin/pull/4339)) +* refactor(tree): replace string(/) with "/" in node.insertChild ([#4354](https://github.com/gin-gonic/gin/pull/4354)) +* refactor(render): remove headers parameter from writeHeader ([#4353](https://github.com/gin-gonic/gin/pull/4353)) +* refactor(context): simplify "GetType()" functions ([#4080](https://github.com/gin-gonic/gin/pull/4080)) +* refactor(slice): simplify SliceValidationError Error method ([#3910](https://github.com/gin-gonic/gin/pull/3910)) +* refactor(context):Avoid using filepath.Dir twice in SaveUploadedFile ([#4181](https://github.com/gin-gonic/gin/pull/4181)) +* refactor(context): refactor context handling and improve test robustness ([#4066](https://github.com/gin-gonic/gin/pull/4066)) +* refactor(binding): use strings.Cut to replace strings.Index ([#3522](https://github.com/gin-gonic/gin/pull/3522)) +* refactor(context): add an optional permission parameter to SaveUploadedFile ([#4068](https://github.com/gin-gonic/gin/pull/4068)) +* refactor(context): verify URL is Non-nil in initQueryCache() ([#3969](https://github.com/gin-gonic/gin/pull/3969)) +* refactor(context): YAML judgment logic in Negotiate ([#3966](https://github.com/gin-gonic/gin/pull/3966)) +* tree: replace the self-defined 'min' to official one ([#3975](https://github.com/gin-gonic/gin/pull/3975)) +* context: Remove redundant filepath.Dir usage ([#4181](https://github.com/gin-gonic/gin/pull/4181)) + +### Bug Fixes + +* fix: prevent middleware re-entry issue in HandleContext ([#3987](https://github.com/gin-gonic/gin/pull/3987)) +* fix(binding): prevent duplicate decoding and add validation in decodeToml ([#4193](https://github.com/gin-gonic/gin/pull/4193)) +* fix(gin): Do not panic when handling method not allowed on empty tree ([#4003](https://github.com/gin-gonic/gin/pull/4003)) +* fix(gin): data race warning for gin mode ([#1580](https://github.com/gin-gonic/gin/pull/1580)) +* fix(context): verify URL is Non-nil in initQueryCache() ([#3969](https://github.com/gin-gonic/gin/pull/3969)) +* fix(context): YAML judgment logic in Negotiate ([#3966](https://github.com/gin-gonic/gin/pull/3966)) +* fix(context): check handler is nil ([#3413](https://github.com/gin-gonic/gin/pull/3413)) +* fix(readme): fix broken link to English documentation ([#4222](https://github.com/gin-gonic/gin/pull/4222)) +* fix(tree): Keep panic infos consistent when wildcard type build faild ([#4077](https://github.com/gin-gonic/gin/pull/4077)) + +### Build process updates / CI + +* ci: integrate Trivy vulnerability scanning into CI workflow ([#4359](https://github.com/gin-gonic/gin/pull/4359)) +* ci: support Go 1.25 in CI/CD ([#4341](https://github.com/gin-gonic/gin/pull/4341)) +* build(deps): upgrade github.com/bytedance/sonic from v1.13.2 to v1.14.0 ([#4342](https://github.com/gin-gonic/gin/pull/4342)) +* ci: add Go version 1.24 to GitHub Actions ([#4154](https://github.com/gin-gonic/gin/pull/4154)) +* build: update Gin minimum Go version to 1.21 ([#3960](https://github.com/gin-gonic/gin/pull/3960)) +* ci(lint): enable new linters (testifylint, usestdlibvars, perfsprint, etc.) ([#4010](https://github.com/gin-gonic/gin/pull/4010), [#4091](https://github.com/gin-gonic/gin/pull/4091), [#4090](https://github.com/gin-gonic/gin/pull/4090)) +* ci(lint): update workflows and improve test request consistency ([#4126](https://github.com/gin-gonic/gin/pull/4126)) + +### Dependency updates + +* chore(deps): bump google.golang.org/protobuf from 1.36.6 to 1.36.9 ([#4346](https://github.com/gin-gonic/gin/pull/4346), [#4356](https://github.com/gin-gonic/gin/pull/4356)) +* chore(deps): bump github.com/stretchr/testify from 1.10.0 to 1.11.1 ([#4347](https://github.com/gin-gonic/gin/pull/4347)) +* chore(deps): bump actions/setup-go from 5 to 6 ([#4351](https://github.com/gin-gonic/gin/pull/4351)) +* chore(deps): bump github.com/quic-go/quic-go from 0.53.0 to 0.54.0 ([#4328](https://github.com/gin-gonic/gin/pull/4328)) +* chore(deps): bump golang.org/x/net from 0.33.0 to 0.38.0 ([#4178](https://github.com/gin-gonic/gin/pull/4178), [#4221](https://github.com/gin-gonic/gin/pull/4221)) +* chore(deps): bump github.com/go-playground/validator/v10 from 10.20.0 to 10.22.1 ([#4052](https://github.com/gin-gonic/gin/pull/4052)) + +### Documentation updates + +* docs(changelog): update release notes for Gin v1.10.1 ([#4360](https://github.com/gin-gonic/gin/pull/4360)) +* docs: Fixing English grammar mistakes and awkward sentence structure in doc/doc.md ([#4207](https://github.com/gin-gonic/gin/pull/4207)) +* docs: update documentation and release notes for Gin v1.10.0 ([#3953](https://github.com/gin-gonic/gin/pull/3953)) +* docs: fix typo in Gin Quick Start ([#3997](https://github.com/gin-gonic/gin/pull/3997)) +* docs: fix comment and link issues ([#4205](https://github.com/gin-gonic/gin/pull/4205), [#3938](https://github.com/gin-gonic/gin/pull/3938)) +* docs: fix route group example code ([#4020](https://github.com/gin-gonic/gin/pull/4020)) +* docs(readme): add Portuguese documentation ([#4078](https://github.com/gin-gonic/gin/pull/4078)) +* docs(context): fix some function names in comment ([#4079](https://github.com/gin-gonic/gin/pull/4079)) + +--- + +## Gin v1.10.1 + +### Features + +* refactor: strengthen HTTPS security and improve code organization +* feat(binding): Support custom BindUnmarshaler for binding. (#3933) + +### Enhancements + +* chore(deps): bump github.com/bytedance/sonic from 1.11.3 to 1.11.6 (#3940) +* chore(deps): bump golangci/golangci-lint-action from 4 to 5 (#3941) +* chore: update external dependencies to latest versions (#3950) +* chore: update various Go dependencies to latest versions (#3901) +* chore: refactor configuration files for better readability (#3951) +* chore: update changelog categories and improve documentation (#3917) +* feat: update version constant to v1.10.0 (#3952) + +### Build process updates + +* ci(release): refactor changelog regex patterns and exclusions (#3914) +* ci(Makefile): vet command add .PHONY (#3915) + +## Gin v1.10.0 + +### Features + +* feat(auth): add proxy-server authentication (#3877) (@EndlessParadox1) +* feat(bind): ShouldBindBodyWith shortcut and change doc (#3871) (@RedCrazyGhost) +* feat(binding): Support custom BindUnmarshaler for binding. (#3933) (@dkkb) +* feat(binding): support override default binding implement (#3514) (@ssfyn) +* feat(engine): Added `OptionFunc` and `With` (#3572) (@flc1125) +* feat(logger): ability to skip logs based on user-defined logic (#3593) (@palvaneh) + +### Bug fixes + +* Revert "fix(uri): query binding bug (#3236)" (#3899) (@appleboy) +* fix(binding): binding error while not upload file (#3819) (#3820) (@clearcodecn) +* fix(binding): dereference pointer to struct (#3199) (@echovl) +* fix(context): make context Value method adhere to Go standards (#3897) (@FarmerChillax) +* fix(engine): fix unit test (#3878) (@flc1125) +* fix(header): Allow header according to RFC 7231 (HTTP 405) (#3759) (@Crocmagnon) +* fix(route): Add fullPath in context copy (#3784) (@KarthikReddyPuli) +* fix(router): catch-all conflicting wildcard (#3812) (@FirePing32) +* fix(sec): upgrade golang.org/x/crypto to 0.17.0 (#3832) (@chncaption) +* fix(tree): correctly expand the capacity of params (#3502) (@georgijd-form3) +* fix(uri): query binding bug (#3236) (@illiafox) +* fix: Add pointer support for url query params (#3659) (#3666) (@omkar-foss) +* fix: protect Context.Keys map when call Copy method (#3873) (@kingcanfish) + +### Enhancements + +* chore(CI): update release args (#3595) (@qloog) +* chore(IP): add TrustedPlatform constant for Fly.io. (#3839) (@ab) +* chore(debug): add ability to override the debugPrint statement (#2337) (@josegonzalez) +* chore(deps): update dependencies to latest versions (#3835) (@appleboy) +* chore(header): Add support for RFC 9512: application/yaml (#3851) (@vincentbernat) +* chore(http): use white color for HTTP 1XX (#3741) (@viralparmarme) +* chore(optimize): the ShouldBindUri method of the Context struct (#3911) (@1911860538) +* chore(perf): Optimize the Copy method of the Context struct (#3859) (@1911860538) +* chore(refactor): modify interface check way (#3855) (@demoManito) +* chore(request): check reader if it's nil before reading (#3419) (@noahyao1024) +* chore(security): upgrade Protobuf for CVE-2024-24786 (#3893) (@Fotkurz) +* chore: refactor CI and update dependencies (#3848) (@appleboy) +* chore: refactor configuration files for better readability (#3951) (@appleboy) +* chore: update GitHub Actions configuration (#3792) (@appleboy) +* chore: update changelog categories and improve documentation (#3917) (@appleboy) +* chore: update dependencies to latest versions (#3694) (@appleboy) +* chore: update external dependencies to latest versions (#3950) (@appleboy) +* chore: update various Go dependencies to latest versions (#3901) (@appleboy) + +### Build process updates + +* build(codecov): Added a codecov configuration (#3891) (@flc1125) +* ci(Makefile): vet command add .PHONY (#3915) (@imalasong) +* ci(lint): update tooling and workflows for consistency (#3834) (@appleboy) +* ci(release): refactor changelog regex patterns and exclusions (#3914) (@appleboy) +* ci(testing): add go1.22 version (#3842) (@appleboy) + +### Documentation updates + +* docs(context): Added deprecation comments to BindWith (#3880) (@flc1125) +* docs(middleware): comments to function `BasicAuthForProxy` (#3881) (@EndlessParadox1) +* docs: Add document to constant `AuthProxyUserKey` and `BasicAuthForProxy`. (#3887) (@EndlessParadox1) +* docs: fix typo in comment (#3868) (@testwill) +* docs: fix typo in function documentation (#3872) (@TotomiEcio) +* docs: remove redundant comments (#3765) (@WeiTheShinobi) +* feat: update version constant to v1.10.0 (#3952) (@appleboy) + +### Others + +* Upgrade golang.org/x/net -> v0.13.0 (#3684) (@cpcf) +* test(git): gitignore add develop tools (#3370) (@demoManito) +* test(http): use constant instead of numeric literal (#3863) (@testwill) +* test(path): Optimize unit test execution results (#3883) (@flc1125) +* test(render): increased unit tests coverage (#3691) (@araujo88) + ## Gin v1.9.1 -### BUG FIXES +### BUG FIXES * fix Request.Context() checks [#3512](https://github.com/gin-gonic/gin/pull/3512) @@ -414,7 +582,7 @@ - [FIX] Refactor render - [FIX] Reworked tests - [FIX] logger now supports cygwin -- [FIX] Use X-Forwarded-For before X-Real-Ip +- [FIX] Use X-Forwarded-For before X-Real-IP - [FIX] time.Time binding (#904) ## Gin 1.1.4 diff --git a/vendor/github.com/gin-gonic/gin/Makefile b/vendor/github.com/gin-gonic/gin/Makefile index b58f24f..1a7de86 100644 --- a/vendor/github.com/gin-gonic/gin/Makefile +++ b/vendor/github.com/gin-gonic/gin/Makefile @@ -8,6 +8,7 @@ TESTFOLDER := $(shell $(GO) list ./... | grep -E 'gin$$|binding$$|render$$' | gr TESTTAGS ?= "" .PHONY: test +# Run tests to verify code functionality. test: echo "mode: count" > coverage.out for d in $(TESTFOLDER); do \ @@ -30,10 +31,12 @@ test: done .PHONY: fmt +# Ensure consistent code formatting. fmt: $(GOFMT) -w $(GOFILES) .PHONY: fmt-check +# format (check only). fmt-check: @diff=$$($(GOFMT) -d $(GOFILES)); \ if [ -n "$$diff" ]; then \ @@ -43,31 +46,36 @@ fmt-check: fi; .PHONY: vet +# Examine packages and report suspicious constructs if any. vet: $(GO) vet $(VETPACKAGES) .PHONY: lint +# Inspect source code for stylistic errors or potential bugs. lint: @hash golint > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ $(GO) get -u golang.org/x/lint/golint; \ fi for PKG in $(PACKAGES); do golint -set_exit_status $$PKG || exit 1; done; -.PHONY: misspell-check -misspell-check: +.PHONY: misspell +# Correct commonly misspelled English words in source code. +misspell: @hash misspell > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ $(GO) get -u github.com/client9/misspell/cmd/misspell; \ fi - misspell -error $(GOFILES) + misspell -w $(GOFILES) -.PHONY: misspell -misspell: +.PHONY: misspell-check +# misspell (check only). +misspell-check: @hash misspell > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ $(GO) get -u github.com/client9/misspell/cmd/misspell; \ fi - misspell -w $(GOFILES) + misspell -error $(GOFILES) .PHONY: tools +# Install tools (golint and misspell). tools: @if [ $(GO_VERSION) -gt 15 ]; then \ $(GO) install golang.org/x/lint/golint@latest; \ @@ -76,3 +84,23 @@ tools: $(GO) install golang.org/x/lint/golint; \ $(GO) install github.com/client9/misspell/cmd/misspell; \ fi + +.PHONY: help +# Help. +help: + @echo '' + @echo 'Usage:' + @echo ' make [target]' + @echo '' + @echo 'Targets:' + @awk '/^[a-zA-Z\-\0-9]+:/ { \ + helpMessage = match(lastLine, /^# (.*)/); \ + if (helpMessage) { \ + helpCommand = substr($$1, 0, index($$1, ":")-1); \ + helpMessage = substr(lastLine, RSTART + 2, RLENGTH); \ + printf " - \033[36m%-20s\033[0m %s\n", helpCommand, helpMessage; \ + } \ + } \ + { lastLine = $$0 }' $(MAKEFILE_LIST) + +.DEFAULT_GOAL := help diff --git a/vendor/github.com/gin-gonic/gin/README.md b/vendor/github.com/gin-gonic/gin/README.md index e007bf2..94e08a7 100644 --- a/vendor/github.com/gin-gonic/gin/README.md +++ b/vendor/github.com/gin-gonic/gin/README.md @@ -2,55 +2,53 @@ -[![Build Status](https://github.com/gin-gonic/gin/workflows/Run%20Tests/badge.svg?branch=master)](https://github.com/gin-gonic/gin/actions?query=branch%3Amaster) +[![Build Status](https://github.com/gin-gonic/gin/actions/workflows/gin.yml/badge.svg?branch=master)](https://github.com/gin-gonic/gin/actions/workflows/gin.yml) [![codecov](https://codecov.io/gh/gin-gonic/gin/branch/master/graph/badge.svg)](https://codecov.io/gh/gin-gonic/gin) [![Go Report Card](https://goreportcard.com/badge/github.com/gin-gonic/gin)](https://goreportcard.com/report/github.com/gin-gonic/gin) -[![GoDoc](https://pkg.go.dev/badge/github.com/gin-gonic/gin?status.svg)](https://pkg.go.dev/github.com/gin-gonic/gin?tab=doc) +[![Go Reference](https://pkg.go.dev/badge/github.com/gin-gonic/gin?status.svg)](https://pkg.go.dev/github.com/gin-gonic/gin?tab=doc) [![Sourcegraph](https://sourcegraph.com/github.com/gin-gonic/gin/-/badge.svg)](https://sourcegraph.com/github.com/gin-gonic/gin?badge) [![Open Source Helpers](https://www.codetriage.com/gin-gonic/gin/badges/users.svg)](https://www.codetriage.com/gin-gonic/gin) [![Release](https://img.shields.io/github/release/gin-gonic/gin.svg?style=flat-square)](https://github.com/gin-gonic/gin/releases) [![TODOs](https://badgen.net/https/api.tickgit.com/badgen/github.com/gin-gonic/gin)](https://www.tickgit.com/browse?repo=github.com/gin-gonic/gin) -Gin is a web framework written in [Go](https://go.dev/). It features a martini-like API with performance that is up to 40 times faster thanks to [httprouter](https://github.com/julienschmidt/httprouter). If you need performance and good productivity, you will love Gin. +Gin is a web framework written in [Go](https://go.dev/). It features a martini-like API with performance that is up to 40 times faster thanks to [httprouter](https://github.com/julienschmidt/httprouter). +If you need performance and good productivity, you will love Gin. -**The key features of Gin are:** +**Gin's key features are:** - Zero allocation router -- Fast +- Speed - Middleware support - Crash-free - JSON validation -- Routes grouping +- Route grouping - Error management -- Rendering built-in -- Extendable - +- Built-in rendering +- Extensible ## Getting started ### Prerequisites -- **[Go](https://go.dev/)**: any one of the **three latest major** [releases](https://go.dev/doc/devel/release) (we test it with these). +Gin requires [Go](https://go.dev/) version [1.23](https://go.dev/doc/devel/release#go1.23.0) or above. ### Getting Gin -With [Go module](https://github.com/golang/go/wiki/Modules) support, simply add the following import +With [Go's module support](https://go.dev/wiki/Modules#how-to-use-modules), `go [build|run|test]` automatically fetches the necessary dependencies when you add the import in your code: -``` +```sh import "github.com/gin-gonic/gin" ``` -to your code, and then `go [build|run|test]` will automatically fetch the necessary dependencies. - -Otherwise, run the following Go command to install the `gin` package: +Alternatively, use `go get`: ```sh -$ go get -u github.com/gin-gonic/gin +go get -u github.com/gin-gonic/gin ``` ### Running Gin -First you need to import Gin package for using Gin, one simplest example likes the follow `example.go`: +A basic example: ```go package main @@ -72,31 +70,31 @@ func main() { } ``` -And use the Go command to run the demo: +To run the code, use the `go run` command, like: -``` -# run example.go and visit 0.0.0.0:8080/ping on browser -$ go run example.go +```sh +go run example.go ``` -### Learn more examples +Then visit [`0.0.0.0:8080/ping`](http://0.0.0.0:8080/ping) in your browser to see the response! + +### See more examples #### Quick Start -Learn and practice more examples, please read the [Gin Quick Start](docs/doc.md) which includes API examples and builds tag. +Learn and practice with the [Gin Quick Start](docs/doc.md), which includes API examples and builds tag. #### Examples -A number of ready-to-run examples demonstrating various use cases of Gin on the [Gin examples](https://github.com/gin-gonic/examples) repository. - +A number of ready-to-run examples demonstrating various use cases of Gin are available in the [Gin examples](https://github.com/gin-gonic/examples) repository. ## Documentation -See [API documentation and descriptions](https://godoc.org/github.com/gin-gonic/gin) for package. +See the [API documentation on go.dev](https://pkg.go.dev/github.com/gin-gonic/gin). -All documentation is available on the Gin website. +The documentation is also available on [gin-gonic.com](https://gin-gonic.com) in several languages: -- [English](https://gin-gonic.com/docs/) +- [English](https://gin-gonic.com/en/docs/) - [简体中文](https://gin-gonic.com/zh-cn/docs/) - [繁體中文](https://gin-gonic.com/zh-tw/docs/) - [日本語](https://gin-gonic.com/ja/docs/) @@ -104,19 +102,20 @@ All documentation is available on the Gin website. - [한국어](https://gin-gonic.com/ko-kr/docs/) - [Turkish](https://gin-gonic.com/tr/docs/) - [Persian](https://gin-gonic.com/fa/docs/) +- [Português](https://gin-gonic.com/pt/docs/) +- [Russian](https://gin-gonic.com/ru/docs/) +- [Indonesian](https://gin-gonic.com/id/docs/) -### Articles about Gin - -A curated list of awesome Gin framework. +### Articles - [Tutorial: Developing a RESTful API with Go and Gin](https://go.dev/doc/tutorial/web-service-gin) ## Benchmarks -Gin uses a custom version of [HttpRouter](https://github.com/julienschmidt/httprouter), [see all benchmarks details](/BENCHMARKS.md). +Gin uses a custom version of [HttpRouter](https://github.com/julienschmidt/httprouter), [see all benchmarks](/BENCHMARKS.md). | Benchmark name | (1) | (2) | (3) | (4) | -| ------------------------------ | ---------:| ---------------:| ------------:| ---------------:| +| ------------------------------ | --------: | --------------: | -----------: | --------------: | | BenchmarkGin_GithubAll | **43550** | **27364 ns/op** | **0 B/op** | **0 allocs/op** | | BenchmarkAce_GithubAll | 40543 | 29670 ns/op | 0 B/op | 0 allocs/op | | BenchmarkAero_GithubAll | 57632 | 20648 ns/op | 0 B/op | 0 allocs/op | @@ -153,26 +152,23 @@ Gin uses a custom version of [HttpRouter](https://github.com/julienschmidt/httpr - (3): Heap Memory (B/op), lower is better - (4): Average Allocations per Repetition (allocs/op), lower is better +## Middleware -## Middlewares - -You can find many useful Gin middlewares at [gin-contrib](https://github.com/gin-contrib). - - -## Users +You can find many useful Gin middlewares at [gin-contrib](https://github.com/gin-contrib) and [gin-gonic/contrib](https://github.com/gin-gonic/contrib). -Awesome project lists using [Gin](https://github.com/gin-gonic/gin) web framework. +## Uses -* [gorush](https://github.com/appleboy/gorush): A push notification server written in Go. -* [fnproject](https://github.com/fnproject/fn): The container native, cloud agnostic serverless platform. -* [photoprism](https://github.com/photoprism/photoprism): Personal photo management powered by Go and Google TensorFlow. -* [lura](https://github.com/luraproject/lura): Ultra performant API Gateway with middlewares. -* [picfit](https://github.com/thoas/picfit): An image resizing server written in Go. -* [dkron](https://github.com/distribworks/dkron): Distributed, fault tolerant job scheduling system. +Here are some awesome projects that are using the [Gin](https://github.com/gin-gonic/gin) web framework. +- [gorush](https://github.com/appleboy/gorush): A push notification server. +- [fnproject](https://github.com/fnproject/fn): A container native, cloud agnostic serverless platform. +- [photoprism](https://github.com/photoprism/photoprism): Personal photo management powered by Google TensorFlow. +- [lura](https://github.com/luraproject/lura): Ultra performant API Gateway with middleware. +- [picfit](https://github.com/thoas/picfit): An image resizing server. +- [dkron](https://github.com/distribworks/dkron): Distributed, fault tolerant job scheduling system. ## Contributing Gin is the work of hundreds of contributors. We appreciate your help! -Please see [CONTRIBUTING](CONTRIBUTING.md) for details on submitting patches and the contribution workflow. +Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details on submitting patches and the contribution workflow. diff --git a/vendor/github.com/gin-gonic/gin/binding/binding.go b/vendor/github.com/gin-gonic/gin/binding/binding.go index 9472387..702d0e8 100644 --- a/vendor/github.com/gin-gonic/gin/binding/binding.go +++ b/vendor/github.com/gin-gonic/gin/binding/binding.go @@ -84,6 +84,7 @@ var ( YAML BindingBody = yamlBinding{} Uri BindingUri = uriBinding{} Header Binding = headerBinding{} + Plain BindingBody = plainBinding{} TOML BindingBody = tomlBinding{} ) diff --git a/vendor/github.com/gin-gonic/gin/binding/binding_nomsgpack.go b/vendor/github.com/gin-gonic/gin/binding/binding_nomsgpack.go index 552a86b..c8e6131 100644 --- a/vendor/github.com/gin-gonic/gin/binding/binding_nomsgpack.go +++ b/vendor/github.com/gin-gonic/gin/binding/binding_nomsgpack.go @@ -81,6 +81,7 @@ var ( Uri = uriBinding{} Header = headerBinding{} TOML = tomlBinding{} + Plain = plainBinding{} ) // Default returns the appropriate Binding instance based on the HTTP method diff --git a/vendor/github.com/gin-gonic/gin/binding/default_validator.go b/vendor/github.com/gin-gonic/gin/binding/default_validator.go index ac43d7c..44b7a2a 100644 --- a/vendor/github.com/gin-gonic/gin/binding/default_validator.go +++ b/vendor/github.com/gin-gonic/gin/binding/default_validator.go @@ -5,8 +5,8 @@ package binding import ( - "fmt" "reflect" + "strconv" "strings" "sync" @@ -22,25 +22,20 @@ type SliceValidationError []error // Error concatenates all error elements in SliceValidationError into a single string separated by \n. func (err SliceValidationError) Error() string { - n := len(err) - switch n { - case 0: + if len(err) == 0 { return "" - default: - var b strings.Builder - if err[0] != nil { - fmt.Fprintf(&b, "[%d]: %s", 0, err[0].Error()) - } - if n > 1 { - for i := 1; i < n; i++ { - if err[i] != nil { - b.WriteString("\n") - fmt.Fprintf(&b, "[%d]: %s", i, err[i].Error()) - } + } + + var b strings.Builder + for i := 0; i < len(err); i++ { + if err[i] != nil { + if b.Len() > 0 { + b.WriteString("\n") } + b.WriteString("[" + strconv.Itoa(i) + "]: " + err[i].Error()) } - return b.String() } + return b.String() } var _ StructValidator = (*defaultValidator)(nil) diff --git a/vendor/github.com/gin-gonic/gin/binding/form.go b/vendor/github.com/gin-gonic/gin/binding/form.go index b17352b..06732e9 100644 --- a/vendor/github.com/gin-gonic/gin/binding/form.go +++ b/vendor/github.com/gin-gonic/gin/binding/form.go @@ -11,9 +11,11 @@ import ( const defaultMemory = 32 << 20 -type formBinding struct{} -type formPostBinding struct{} -type formMultipartBinding struct{} +type ( + formBinding struct{} + formPostBinding struct{} + formMultipartBinding struct{} +) func (formBinding) Name() string { return "form" diff --git a/vendor/github.com/gin-gonic/gin/binding/form_mapping.go b/vendor/github.com/gin-gonic/gin/binding/form_mapping.go index db235e5..45a39e1 100644 --- a/vendor/github.com/gin-gonic/gin/binding/form_mapping.go +++ b/vendor/github.com/gin-gonic/gin/binding/form_mapping.go @@ -13,8 +13,8 @@ import ( "strings" "time" + "github.com/gin-gonic/gin/codec/json" "github.com/gin-gonic/gin/internal/bytesconv" - "github.com/gin-gonic/gin/internal/json" ) var ( @@ -159,6 +159,14 @@ func tryToSetValue(value reflect.Value, field reflect.StructField, setter setter if k, v := head(opt, "="); k == "default" { setOpt.isDefaultExists = true setOpt.defaultValue = v + + // convert semicolon-separated default values to csv-separated values for processing in setByForm + if field.Type.Kind() == reflect.Slice || field.Type.Kind() == reflect.Array { + cfTag := field.Tag.Get("collection_format") + if cfTag == "" || cfTag == "multi" || cfTag == "csv" { + setOpt.defaultValue = strings.ReplaceAll(v, ";", ",") + } + } } } @@ -167,7 +175,7 @@ func tryToSetValue(value reflect.Value, field reflect.StructField, setter setter // BindUnmarshaler is the interface used to wrap the UnmarshalParam method. type BindUnmarshaler interface { - // UnmarshalParam decodes and assigns a value from an form or query param. + // UnmarshalParam decodes and assigns a value from a form or query param. UnmarshalParam(param string) error } @@ -182,6 +190,38 @@ func trySetCustom(val string, value reflect.Value) (isSet bool, err error) { return false, nil } +func trySplit(vs []string, field reflect.StructField) (newVs []string, err error) { + cfTag := field.Tag.Get("collection_format") + if cfTag == "" || cfTag == "multi" { + return vs, nil + } + + var sep string + switch cfTag { + case "csv": + sep = "," + case "ssv": + sep = " " + case "tsv": + sep = "\t" + case "pipes": + sep = "|" + default: + return vs, fmt.Errorf("%s is not supported in the collection_format. (csv, ssv, pipes)", cfTag) + } + + totalLength := 0 + for _, v := range vs { + totalLength += strings.Count(v, sep) + 1 + } + newVs = make([]string, 0, totalLength) + for _, v := range vs { + newVs = append(newVs, strings.Split(v, sep)...) + } + + return newVs, nil +} + func setByForm(value reflect.Value, field reflect.StructField, form map[string][]string, tagValue string, opt setOptions) (isSet bool, err error) { vs, ok := form[tagValue] if !ok && !opt.isDefaultExists { @@ -192,15 +232,46 @@ func setByForm(value reflect.Value, field reflect.StructField, form map[string][ case reflect.Slice: if !ok { vs = []string{opt.defaultValue} + + // pre-process the default value for multi if present + cfTag := field.Tag.Get("collection_format") + if cfTag == "" || cfTag == "multi" { + vs = strings.Split(opt.defaultValue, ",") + } } + + if ok, err = trySetCustom(vs[0], value); ok { + return ok, err + } + + if vs, err = trySplit(vs, field); err != nil { + return false, err + } + return true, setSlice(vs, value, field) case reflect.Array: if !ok { vs = []string{opt.defaultValue} + + // pre-process the default value for multi if present + cfTag := field.Tag.Get("collection_format") + if cfTag == "" || cfTag == "multi" { + vs = strings.Split(opt.defaultValue, ",") + } + } + + if ok, err = trySetCustom(vs[0], value); ok { + return ok, err } + + if vs, err = trySplit(vs, field); err != nil { + return false, err + } + if len(vs) != value.Len() { return false, fmt.Errorf("%q is not valid value for %s", vs, value.Type().String()) } + return true, setArray(vs, value, field) default: var val string @@ -210,6 +281,9 @@ func setByForm(value reflect.Value, field reflect.StructField, form map[string][ if len(vs) > 0 { val = vs[0] + if val == "" { + val = opt.defaultValue + } } if ok, err := trySetCustom(val, value); ok { return ok, err @@ -259,9 +333,9 @@ func setWithProperType(val string, value reflect.Value, field reflect.StructFiel case multipart.FileHeader: return nil } - return json.Unmarshal(bytesconv.StringToBytes(val), value.Addr().Interface()) + return json.API.Unmarshal(bytesconv.StringToBytes(val), value.Addr().Interface()) case reflect.Map: - return json.Unmarshal(bytesconv.StringToBytes(val), value.Addr().Interface()) + return json.API.Unmarshal(bytesconv.StringToBytes(val), value.Addr().Interface()) case reflect.Ptr: if !value.Elem().IsValid() { value.Set(reflect.New(value.Type().Elem())) @@ -324,18 +398,24 @@ func setTimeField(val string, structField reflect.StructField, value reflect.Val } switch tf := strings.ToLower(timeFormat); tf { - case "unix", "unixnano": + case "unix", "unixmilli", "unixmicro", "unixnano": tv, err := strconv.ParseInt(val, 10, 64) if err != nil { return err } - d := time.Duration(1) - if tf == "unixnano" { - d = time.Second + var t time.Time + switch tf { + case "unix": + t = time.Unix(tv, 0) + case "unixmilli": + t = time.UnixMilli(tv) + case "unixmicro": + t = time.UnixMicro(tv) + default: + t = time.Unix(0, tv) } - t := time.Unix(tv/int64(d), tv%int64(d)) value.Set(reflect.ValueOf(t)) return nil } @@ -397,11 +477,8 @@ func setTimeDuration(val string, value reflect.Value) error { } func head(str, sep string) (head string, tail string) { - idx := strings.Index(str, sep) - if idx < 0 { - return str, "" - } - return str[:idx], str[idx+len(sep):] + head, tail, _ = strings.Cut(str, sep) + return head, tail } func setFormMap(ptr any, form map[string][]string) error { diff --git a/vendor/github.com/gin-gonic/gin/binding/header.go b/vendor/github.com/gin-gonic/gin/binding/header.go index 03bc78d..6ed8c0c 100644 --- a/vendor/github.com/gin-gonic/gin/binding/header.go +++ b/vendor/github.com/gin-gonic/gin/binding/header.go @@ -17,7 +17,6 @@ func (headerBinding) Name() string { } func (headerBinding) Bind(req *http.Request, obj any) error { - if err := mapHeader(obj, req.Header); err != nil { return err } diff --git a/vendor/github.com/gin-gonic/gin/binding/json.go b/vendor/github.com/gin-gonic/gin/binding/json.go index e21c2ee..f4ae921 100644 --- a/vendor/github.com/gin-gonic/gin/binding/json.go +++ b/vendor/github.com/gin-gonic/gin/binding/json.go @@ -10,7 +10,7 @@ import ( "io" "net/http" - "github.com/gin-gonic/gin/internal/json" + "github.com/gin-gonic/gin/codec/json" ) // EnableDecoderUseNumber is used to call the UseNumber method on the JSON @@ -42,7 +42,7 @@ func (jsonBinding) BindBody(body []byte, obj any) error { } func decodeJSON(r io.Reader, obj any) error { - decoder := json.NewDecoder(r) + decoder := json.API.NewDecoder(r) if EnableDecoderUseNumber { decoder.UseNumber() } diff --git a/vendor/github.com/gin-gonic/gin/binding/plain.go b/vendor/github.com/gin-gonic/gin/binding/plain.go new file mode 100644 index 0000000..5d466bd --- /dev/null +++ b/vendor/github.com/gin-gonic/gin/binding/plain.go @@ -0,0 +1,56 @@ +package binding + +import ( + "fmt" + "io" + "net/http" + "reflect" + + "github.com/gin-gonic/gin/internal/bytesconv" +) + +type plainBinding struct{} + +func (plainBinding) Name() string { + return "plain" +} + +func (plainBinding) Bind(req *http.Request, obj any) error { + all, err := io.ReadAll(req.Body) + if err != nil { + return err + } + + return decodePlain(all, obj) +} + +func (plainBinding) BindBody(body []byte, obj any) error { + return decodePlain(body, obj) +} + +func decodePlain(data []byte, obj any) error { + if obj == nil { + return nil + } + + v := reflect.ValueOf(obj) + + for v.Kind() == reflect.Ptr { + if v.IsNil() { + return nil + } + v = v.Elem() + } + + if v.Kind() == reflect.String { + v.SetString(bytesconv.BytesToString(data)) + return nil + } + + if _, ok := v.Interface().([]byte); ok { + v.SetBytes(data) + return nil + } + + return fmt.Errorf("type (%T) unknown type", v) +} diff --git a/vendor/github.com/gin-gonic/gin/binding/protobuf.go b/vendor/github.com/gin-gonic/gin/binding/protobuf.go index 57721fc..259ae8e 100644 --- a/vendor/github.com/gin-gonic/gin/binding/protobuf.go +++ b/vendor/github.com/gin-gonic/gin/binding/protobuf.go @@ -34,7 +34,7 @@ func (protobufBinding) BindBody(body []byte, obj any) error { if err := proto.Unmarshal(body, msg); err != nil { return err } - // Here it's same to return validate(obj), but util now we can't add + // Here it's same to return validate(obj), but until now we can't add // `binding:""` to the struct which automatically generate by gen-proto return nil // return validate(obj) diff --git a/vendor/github.com/gin-gonic/gin/binding/toml.go b/vendor/github.com/gin-gonic/gin/binding/toml.go index a66b93a..2681231 100644 --- a/vendor/github.com/gin-gonic/gin/binding/toml.go +++ b/vendor/github.com/gin-gonic/gin/binding/toml.go @@ -31,5 +31,5 @@ func decodeToml(r io.Reader, obj any) error { if err := decoder.Decode(obj); err != nil { return err } - return decoder.Decode(obj) + return validate(obj) } diff --git a/vendor/github.com/gin-gonic/gin/binding/xml.go b/vendor/github.com/gin-gonic/gin/binding/xml.go index a70f4ad..acd6f94 100644 --- a/vendor/github.com/gin-gonic/gin/binding/xml.go +++ b/vendor/github.com/gin-gonic/gin/binding/xml.go @@ -24,6 +24,7 @@ func (xmlBinding) Bind(req *http.Request, obj any) error { func (xmlBinding) BindBody(body []byte, obj any) error { return decodeXML(bytes.NewReader(body), obj) } + func decodeXML(r io.Reader, obj any) error { decoder := xml.NewDecoder(r) if err := decoder.Decode(obj); err != nil { diff --git a/vendor/github.com/gin-gonic/gin/binding/yaml.go b/vendor/github.com/gin-gonic/gin/binding/yaml.go index 2535f8c..6638e73 100644 --- a/vendor/github.com/gin-gonic/gin/binding/yaml.go +++ b/vendor/github.com/gin-gonic/gin/binding/yaml.go @@ -9,7 +9,7 @@ import ( "io" "net/http" - "gopkg.in/yaml.v3" + "github.com/goccy/go-yaml" ) type yamlBinding struct{} diff --git a/vendor/github.com/gin-gonic/gin/codec/json/api.go b/vendor/github.com/gin-gonic/gin/codec/json/api.go new file mode 100644 index 0000000..f213568 --- /dev/null +++ b/vendor/github.com/gin-gonic/gin/codec/json/api.go @@ -0,0 +1,57 @@ +// Copyright 2025 Gin Core Team. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package json + +import "io" + +// API the json codec in use. +var API Core + +// Core the api for json codec. +type Core interface { + Marshal(v any) ([]byte, error) + Unmarshal(data []byte, v any) error + MarshalIndent(v any, prefix, indent string) ([]byte, error) + NewEncoder(writer io.Writer) Encoder + NewDecoder(reader io.Reader) Decoder +} + +// Encoder an interface writes JSON values to an output stream. +type Encoder interface { + // SetEscapeHTML specifies whether problematic HTML characters + // should be escaped inside JSON quoted strings. + // The default behavior is to escape &, <, and > to \u0026, \u003c, and \u003e + // to avoid certain safety problems that can arise when embedding JSON in HTML. + // + // In non-HTML settings where the escaping interferes with the readability + // of the output, SetEscapeHTML(false) disables this behavior. + SetEscapeHTML(on bool) + + // Encode writes the JSON encoding of v to the stream, + // followed by a newline character. + // + // See the documentation for Marshal for details about the + // conversion of Go values to JSON. + Encode(v any) error +} + +// Decoder an interface reads and decodes JSON values from an input stream. +type Decoder interface { + // UseNumber causes the Decoder to unmarshal a number into an any as a + // Number instead of as a float64. + UseNumber() + + // DisallowUnknownFields causes the Decoder to return an error when the destination + // is a struct and the input contains object keys which do not match any + // non-ignored, exported fields in the destination. + DisallowUnknownFields() + + // Decode reads the next JSON-encoded value from its + // input and stores it in the value pointed to by v. + // + // See the documentation for Unmarshal for details about + // the conversion of JSON into a Go value. + Decode(v any) error +} diff --git a/vendor/github.com/gin-gonic/gin/codec/json/go_json.go b/vendor/github.com/gin-gonic/gin/codec/json/go_json.go new file mode 100644 index 0000000..42a476a --- /dev/null +++ b/vendor/github.com/gin-gonic/gin/codec/json/go_json.go @@ -0,0 +1,42 @@ +// Copyright 2025 Gin Core Team. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +//go:build go_json + +package json + +import ( + "io" + + "github.com/goccy/go-json" +) + +// Package indicates what library is being used for JSON encoding. +const Package = "github.com/goccy/go-json" + +func init() { + API = gojsonApi{} +} + +type gojsonApi struct{} + +func (j gojsonApi) Marshal(v any) ([]byte, error) { + return json.Marshal(v) +} + +func (j gojsonApi) Unmarshal(data []byte, v any) error { + return json.Unmarshal(data, v) +} + +func (j gojsonApi) MarshalIndent(v any, prefix, indent string) ([]byte, error) { + return json.MarshalIndent(v, prefix, indent) +} + +func (j gojsonApi) NewEncoder(writer io.Writer) Encoder { + return json.NewEncoder(writer) +} + +func (j gojsonApi) NewDecoder(reader io.Reader) Decoder { + return json.NewDecoder(reader) +} diff --git a/vendor/github.com/gin-gonic/gin/codec/json/json.go b/vendor/github.com/gin-gonic/gin/codec/json/json.go new file mode 100644 index 0000000..2971f42 --- /dev/null +++ b/vendor/github.com/gin-gonic/gin/codec/json/json.go @@ -0,0 +1,41 @@ +// Copyright 2025 Gin Core Team. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +//go:build !jsoniter && !go_json && !(sonic && (linux || windows || darwin)) + +package json + +import ( + "encoding/json" + "io" +) + +// Package indicates what library is being used for JSON encoding. +const Package = "encoding/json" + +func init() { + API = jsonApi{} +} + +type jsonApi struct{} + +func (j jsonApi) Marshal(v any) ([]byte, error) { + return json.Marshal(v) +} + +func (j jsonApi) Unmarshal(data []byte, v any) error { + return json.Unmarshal(data, v) +} + +func (j jsonApi) MarshalIndent(v any, prefix, indent string) ([]byte, error) { + return json.MarshalIndent(v, prefix, indent) +} + +func (j jsonApi) NewEncoder(writer io.Writer) Encoder { + return json.NewEncoder(writer) +} + +func (j jsonApi) NewDecoder(reader io.Reader) Decoder { + return json.NewDecoder(reader) +} diff --git a/vendor/github.com/gin-gonic/gin/codec/json/jsoniter.go b/vendor/github.com/gin-gonic/gin/codec/json/jsoniter.go new file mode 100644 index 0000000..ea624e7 --- /dev/null +++ b/vendor/github.com/gin-gonic/gin/codec/json/jsoniter.go @@ -0,0 +1,44 @@ +// Copyright 2025 Gin Core Team. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +//go:build jsoniter + +package json + +import ( + "io" + + jsoniter "github.com/json-iterator/go" +) + +// Package indicates what library is being used for JSON encoding. +const Package = "github.com/json-iterator/go" + +func init() { + API = jsoniterApi{} +} + +var json = jsoniter.ConfigCompatibleWithStandardLibrary + +type jsoniterApi struct{} + +func (j jsoniterApi) Marshal(v any) ([]byte, error) { + return json.Marshal(v) +} + +func (j jsoniterApi) Unmarshal(data []byte, v any) error { + return json.Unmarshal(data, v) +} + +func (j jsoniterApi) MarshalIndent(v any, prefix, indent string) ([]byte, error) { + return json.MarshalIndent(v, prefix, indent) +} + +func (j jsoniterApi) NewEncoder(writer io.Writer) Encoder { + return json.NewEncoder(writer) +} + +func (j jsoniterApi) NewDecoder(reader io.Reader) Decoder { + return json.NewDecoder(reader) +} diff --git a/vendor/github.com/gin-gonic/gin/codec/json/sonic.go b/vendor/github.com/gin-gonic/gin/codec/json/sonic.go new file mode 100644 index 0000000..6949656 --- /dev/null +++ b/vendor/github.com/gin-gonic/gin/codec/json/sonic.go @@ -0,0 +1,44 @@ +// Copyright 2025 Gin Core Team. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +//go:build sonic && (linux || windows || darwin) + +package json + +import ( + "io" + + "github.com/bytedance/sonic" +) + +// Package indicates what library is being used for JSON encoding. +const Package = "github.com/bytedance/sonic" + +func init() { + API = sonicApi{} +} + +var json = sonic.ConfigStd + +type sonicApi struct{} + +func (j sonicApi) Marshal(v any) ([]byte, error) { + return json.Marshal(v) +} + +func (j sonicApi) Unmarshal(data []byte, v any) error { + return json.Unmarshal(data, v) +} + +func (j sonicApi) MarshalIndent(v any, prefix, indent string) ([]byte, error) { + return json.MarshalIndent(v, prefix, indent) +} + +func (j sonicApi) NewEncoder(writer io.Writer) Encoder { + return json.NewEncoder(writer) +} + +func (j sonicApi) NewDecoder(reader io.Reader) Decoder { + return json.NewDecoder(reader) +} diff --git a/vendor/github.com/gin-gonic/gin/context.go b/vendor/github.com/gin-gonic/gin/context.go index 391adaf..422c2df 100644 --- a/vendor/github.com/gin-gonic/gin/context.go +++ b/vendor/github.com/gin-gonic/gin/context.go @@ -6,7 +6,9 @@ package gin import ( "errors" + "fmt" "io" + "io/fs" "log" "math" "mime/multipart" @@ -34,6 +36,7 @@ const ( MIMEPOSTForm = binding.MIMEPOSTForm MIMEMultipartPOSTForm = binding.MIMEMultipartPOSTForm MIMEYAML = binding.MIMEYAML + MIMEYAML2 = binding.MIMEYAML2 MIMETOML = binding.MIMETOML ) @@ -70,7 +73,7 @@ type Context struct { mu sync.RWMutex // Keys is a key/value pair exclusively for the context of each request. - Keys map[string]any + Keys map[any]any // Errors is a list of errors attached to all the handlers/middlewares who used this context. Errors errorMsgs @@ -127,7 +130,7 @@ func (c *Context) Copy() *Context { cp.fullPath = c.fullPath cKeys := c.Keys - cp.Keys = make(map[string]any, len(cKeys)) + cp.Keys = make(map[any]any, len(cKeys)) c.mu.RLock() for k, v := range cKeys { cp.Keys[k] = v @@ -152,6 +155,9 @@ func (c *Context) HandlerName() string { func (c *Context) HandlerNames() []string { hn := make([]string, 0, len(c.handlers)) for _, val := range c.handlers { + if val == nil { + continue + } hn = append(hn, nameOfFunction(val)) } return hn @@ -182,7 +188,9 @@ func (c *Context) FullPath() string { func (c *Context) Next() { c.index++ for c.index < int8(len(c.handlers)) { - c.handlers[c.index](c) + if c.handlers[c.index] != nil { + c.handlers[c.index](c) + } c.index++ } } @@ -208,6 +216,14 @@ func (c *Context) AbortWithStatus(code int) { c.Abort() } +// AbortWithStatusPureJSON calls `Abort()` and then `PureJSON` internally. +// This method stops the chain, writes the status code and return a JSON body without escaping. +// It also sets the Content-Type as "application/json". +func (c *Context) AbortWithStatusPureJSON(code int, jsonObj any) { + c.Abort() + c.PureJSON(code, jsonObj) +} + // AbortWithStatusJSON calls `Abort()` and then `JSON` internally. // This method stops the chain, writes the status code and return a JSON body. // It also sets the Content-Type as "application/json". @@ -257,11 +273,11 @@ func (c *Context) Error(err error) *Error { // Set is used to store a new key/value pair exclusively for this context. // It also lazy initializes c.Keys if it was not used previously. -func (c *Context) Set(key string, value any) { +func (c *Context) Set(key any, value any) { c.mu.Lock() defer c.mu.Unlock() if c.Keys == nil { - c.Keys = make(map[string]any) + c.Keys = make(map[any]any) } c.Keys[key] = value @@ -269,7 +285,7 @@ func (c *Context) Set(key string, value any) { // Get returns the value for the given key, ie: (value, true). // If the value does not exist it returns (nil, false) -func (c *Context) Get(key string) (value any, exists bool) { +func (c *Context) Get(key any) (value any, exists bool) { c.mu.RLock() defer c.mu.RUnlock() value, exists = c.Keys[key] @@ -277,115 +293,178 @@ func (c *Context) Get(key string) (value any, exists bool) { } // MustGet returns the value for the given key if it exists, otherwise it panics. -func (c *Context) MustGet(key string) any { +func (c *Context) MustGet(key any) any { if value, exists := c.Get(key); exists { return value } - panic("Key \"" + key + "\" does not exist") + panic(fmt.Sprintf("key %v does not exist", key)) } -// GetString returns the value associated with the key as a string. -func (c *Context) GetString(key string) (s string) { +func getTyped[T any](c *Context, key any) (res T) { if val, ok := c.Get(key); ok && val != nil { - s, _ = val.(string) + res, _ = val.(T) } return } +// GetString returns the value associated with the key as a string. +func (c *Context) GetString(key any) (s string) { + return getTyped[string](c, key) +} + // GetBool returns the value associated with the key as a boolean. -func (c *Context) GetBool(key string) (b bool) { - if val, ok := c.Get(key); ok && val != nil { - b, _ = val.(bool) - } - return +func (c *Context) GetBool(key any) (b bool) { + return getTyped[bool](c, key) } // GetInt returns the value associated with the key as an integer. -func (c *Context) GetInt(key string) (i int) { - if val, ok := c.Get(key); ok && val != nil { - i, _ = val.(int) - } - return +func (c *Context) GetInt(key any) (i int) { + return getTyped[int](c, key) } -// GetInt64 returns the value associated with the key as an integer. -func (c *Context) GetInt64(key string) (i64 int64) { - if val, ok := c.Get(key); ok && val != nil { - i64, _ = val.(int64) - } - return +// GetInt8 returns the value associated with the key as an integer 8. +func (c *Context) GetInt8(key any) (i8 int8) { + return getTyped[int8](c, key) +} + +// GetInt16 returns the value associated with the key as an integer 16. +func (c *Context) GetInt16(key any) (i16 int16) { + return getTyped[int16](c, key) +} + +// GetInt32 returns the value associated with the key as an integer 32. +func (c *Context) GetInt32(key any) (i32 int32) { + return getTyped[int32](c, key) +} + +// GetInt64 returns the value associated with the key as an integer 64. +func (c *Context) GetInt64(key any) (i64 int64) { + return getTyped[int64](c, key) } // GetUint returns the value associated with the key as an unsigned integer. -func (c *Context) GetUint(key string) (ui uint) { - if val, ok := c.Get(key); ok && val != nil { - ui, _ = val.(uint) - } - return +func (c *Context) GetUint(key any) (ui uint) { + return getTyped[uint](c, key) } -// GetUint64 returns the value associated with the key as an unsigned integer. -func (c *Context) GetUint64(key string) (ui64 uint64) { - if val, ok := c.Get(key); ok && val != nil { - ui64, _ = val.(uint64) - } - return +// GetUint8 returns the value associated with the key as an unsigned integer 8. +func (c *Context) GetUint8(key any) (ui8 uint8) { + return getTyped[uint8](c, key) +} + +// GetUint16 returns the value associated with the key as an unsigned integer 16. +func (c *Context) GetUint16(key any) (ui16 uint16) { + return getTyped[uint16](c, key) +} + +// GetUint32 returns the value associated with the key as an unsigned integer 32. +func (c *Context) GetUint32(key any) (ui32 uint32) { + return getTyped[uint32](c, key) +} + +// GetUint64 returns the value associated with the key as an unsigned integer 64. +func (c *Context) GetUint64(key any) (ui64 uint64) { + return getTyped[uint64](c, key) +} + +// GetFloat32 returns the value associated with the key as a float32. +func (c *Context) GetFloat32(key any) (f32 float32) { + return getTyped[float32](c, key) } // GetFloat64 returns the value associated with the key as a float64. -func (c *Context) GetFloat64(key string) (f64 float64) { - if val, ok := c.Get(key); ok && val != nil { - f64, _ = val.(float64) - } - return +func (c *Context) GetFloat64(key any) (f64 float64) { + return getTyped[float64](c, key) } // GetTime returns the value associated with the key as time. -func (c *Context) GetTime(key string) (t time.Time) { - if val, ok := c.Get(key); ok && val != nil { - t, _ = val.(time.Time) - } - return +func (c *Context) GetTime(key any) (t time.Time) { + return getTyped[time.Time](c, key) } // GetDuration returns the value associated with the key as a duration. -func (c *Context) GetDuration(key string) (d time.Duration) { - if val, ok := c.Get(key); ok && val != nil { - d, _ = val.(time.Duration) - } - return +func (c *Context) GetDuration(key any) (d time.Duration) { + return getTyped[time.Duration](c, key) +} + +// GetIntSlice returns the value associated with the key as a slice of integers. +func (c *Context) GetIntSlice(key any) (is []int) { + return getTyped[[]int](c, key) +} + +// GetInt8Slice returns the value associated with the key as a slice of int8 integers. +func (c *Context) GetInt8Slice(key any) (i8s []int8) { + return getTyped[[]int8](c, key) +} + +// GetInt16Slice returns the value associated with the key as a slice of int16 integers. +func (c *Context) GetInt16Slice(key any) (i16s []int16) { + return getTyped[[]int16](c, key) +} + +// GetInt32Slice returns the value associated with the key as a slice of int32 integers. +func (c *Context) GetInt32Slice(key any) (i32s []int32) { + return getTyped[[]int32](c, key) +} + +// GetInt64Slice returns the value associated with the key as a slice of int64 integers. +func (c *Context) GetInt64Slice(key any) (i64s []int64) { + return getTyped[[]int64](c, key) +} + +// GetUintSlice returns the value associated with the key as a slice of unsigned integers. +func (c *Context) GetUintSlice(key any) (uis []uint) { + return getTyped[[]uint](c, key) +} + +// GetUint8Slice returns the value associated with the key as a slice of uint8 integers. +func (c *Context) GetUint8Slice(key any) (ui8s []uint8) { + return getTyped[[]uint8](c, key) +} + +// GetUint16Slice returns the value associated with the key as a slice of uint16 integers. +func (c *Context) GetUint16Slice(key any) (ui16s []uint16) { + return getTyped[[]uint16](c, key) +} + +// GetUint32Slice returns the value associated with the key as a slice of uint32 integers. +func (c *Context) GetUint32Slice(key any) (ui32s []uint32) { + return getTyped[[]uint32](c, key) +} + +// GetUint64Slice returns the value associated with the key as a slice of uint64 integers. +func (c *Context) GetUint64Slice(key any) (ui64s []uint64) { + return getTyped[[]uint64](c, key) +} + +// GetFloat32Slice returns the value associated with the key as a slice of float32 numbers. +func (c *Context) GetFloat32Slice(key any) (f32s []float32) { + return getTyped[[]float32](c, key) +} + +// GetFloat64Slice returns the value associated with the key as a slice of float64 numbers. +func (c *Context) GetFloat64Slice(key any) (f64s []float64) { + return getTyped[[]float64](c, key) } // GetStringSlice returns the value associated with the key as a slice of strings. -func (c *Context) GetStringSlice(key string) (ss []string) { - if val, ok := c.Get(key); ok && val != nil { - ss, _ = val.([]string) - } - return +func (c *Context) GetStringSlice(key any) (ss []string) { + return getTyped[[]string](c, key) } // GetStringMap returns the value associated with the key as a map of interfaces. -func (c *Context) GetStringMap(key string) (sm map[string]any) { - if val, ok := c.Get(key); ok && val != nil { - sm, _ = val.(map[string]any) - } - return +func (c *Context) GetStringMap(key any) (sm map[string]any) { + return getTyped[map[string]any](c, key) } // GetStringMapString returns the value associated with the key as a map of strings. -func (c *Context) GetStringMapString(key string) (sms map[string]string) { - if val, ok := c.Get(key); ok && val != nil { - sms, _ = val.(map[string]string) - } - return +func (c *Context) GetStringMapString(key any) (sms map[string]string) { + return getTyped[map[string]string](c, key) } // GetStringMapStringSlice returns the value associated with the key as a map to a slice of strings. -func (c *Context) GetStringMapStringSlice(key string) (smss map[string][]string) { - if val, ok := c.Get(key); ok && val != nil { - smss, _ = val.(map[string][]string) - } - return +func (c *Context) GetStringMapStringSlice(key any) (smss map[string][]string) { + return getTyped[map[string][]string](c, key) } /************************************/ @@ -468,7 +547,7 @@ func (c *Context) QueryArray(key string) (values []string) { func (c *Context) initQueryCache() { if c.queryCache == nil { - if c.Request != nil { + if c.Request != nil && c.Request.URL != nil { c.queryCache = c.Request.URL.Query() } else { c.queryCache = url.Values{} @@ -494,7 +573,7 @@ func (c *Context) QueryMap(key string) (dicts map[string]string) { // whether at least one value exists for the given key. func (c *Context) GetQueryMap(key string) (map[string]string, bool) { c.initQueryCache() - return c.get(c.queryCache, key) + return getMapFromFormData(c.queryCache, key) } // PostForm returns the specified key from a POST urlencoded form or multipart form @@ -567,22 +646,32 @@ func (c *Context) PostFormMap(key string) (dicts map[string]string) { // whether at least one value exists for the given key. func (c *Context) GetPostFormMap(key string) (map[string]string, bool) { c.initFormCache() - return c.get(c.formCache, key) + return getMapFromFormData(c.formCache, key) } -// get is an internal method and returns a map which satisfies conditions. -func (c *Context) get(m map[string][]string, key string) (map[string]string, bool) { - dicts := make(map[string]string) - exist := false +// getMapFromFormData return a map which satisfies conditions. +// It parses from data with bracket notation like "key[subkey]=value" into a map. +func getMapFromFormData(m map[string][]string, key string) (map[string]string, bool) { + d := make(map[string]string) + found := false + keyLen := len(key) + for k, v := range m { - if i := strings.IndexByte(k, '['); i >= 1 && k[0:i] == key { - if j := strings.IndexByte(k[i+1:], ']'); j >= 1 { - exist = true - dicts[k[i+1:][:j]] = v[0] - } + if len(k) < keyLen+3 { // key + "[" + at least one char + "]" + continue + } + + if k[:keyLen] != key || k[keyLen] != '[' { + continue + } + + if j := strings.IndexByte(k[keyLen+1:], ']'); j > 0 { + found = true + d[k[keyLen+1:keyLen+1+j]] = v[0] } } - return dicts, exist + + return d, found } // FormFile returns the first file for the provided form key. @@ -607,14 +696,22 @@ func (c *Context) MultipartForm() (*multipart.Form, error) { } // SaveUploadedFile uploads the form file to specific dst. -func (c *Context) SaveUploadedFile(file *multipart.FileHeader, dst string) error { +func (c *Context) SaveUploadedFile(file *multipart.FileHeader, dst string, perm ...fs.FileMode) error { src, err := file.Open() if err != nil { return err } defer src.Close() - if err = os.MkdirAll(filepath.Dir(dst), 0750); err != nil { + var mode os.FileMode = 0o750 + if len(perm) > 0 { + mode = perm[0] + } + dir := filepath.Dir(dst) + if err = os.MkdirAll(dir, mode); err != nil { + return err + } + if err = os.Chmod(dir, mode); err != nil { return err } @@ -667,6 +764,11 @@ func (c *Context) BindTOML(obj any) error { return c.MustBindWith(obj, binding.TOML) } +// BindPlain is a shortcut for c.MustBindWith(obj, binding.Plain). +func (c *Context) BindPlain(obj any) error { + return c.MustBindWith(obj, binding.Plain) +} + // BindHeader is a shortcut for c.MustBindWith(obj, binding.Header). func (c *Context) BindHeader(obj any) error { return c.MustBindWith(obj, binding.Header) @@ -686,8 +788,19 @@ func (c *Context) BindUri(obj any) error { // It will abort the request with HTTP 400 if any error occurs. // See the binding package. func (c *Context) MustBindWith(obj any, b binding.Binding) error { - if err := c.ShouldBindWith(obj, b); err != nil { - c.AbortWithError(http.StatusBadRequest, err).SetType(ErrorTypeBind) //nolint: errcheck + err := c.ShouldBindWith(obj, b) + if err != nil { + var maxBytesErr *http.MaxBytesError + + // Note: When using sonic or go-json as JSON encoder, they do not propagate the http.MaxBytesError error + // https://github.com/goccy/go-json/issues/485 + // https://github.com/bytedance/sonic/issues/800 + switch { + case errors.As(err, &maxBytesErr): + c.AbortWithError(http.StatusRequestEntityTooLarge, err).SetType(ErrorTypeBind) //nolint: errcheck + default: + c.AbortWithError(http.StatusBadRequest, err).SetType(ErrorTypeBind) //nolint: errcheck + } return err } return nil @@ -732,6 +845,11 @@ func (c *Context) ShouldBindTOML(obj any) error { return c.ShouldBindWith(obj, binding.TOML) } +// ShouldBindPlain is a shortcut for c.ShouldBindWith(obj, binding.Plain). +func (c *Context) ShouldBindPlain(obj any) error { + return c.ShouldBindWith(obj, binding.Plain) +} + // ShouldBindHeader is a shortcut for c.ShouldBindWith(obj, binding.Header). func (c *Context) ShouldBindHeader(obj any) error { return c.ShouldBindWith(obj, binding.Header) @@ -794,9 +912,14 @@ func (c *Context) ShouldBindBodyWithTOML(obj any) error { return c.ShouldBindBodyWith(obj, binding.TOML) } +// ShouldBindBodyWithPlain is a shortcut for c.ShouldBindBodyWith(obj, binding.Plain). +func (c *Context) ShouldBindBodyWithPlain(obj any) error { + return c.ShouldBindBodyWith(obj, binding.Plain) +} + // ClientIP implements one best effort algorithm to return the real client IP. // It calls c.RemoteIP() under the hood, to check if the remote IP is a trusted proxy or not. -// If it is it will then try to parse the headers defined in Engine.RemoteIPHeaders (defaulting to [X-Forwarded-For, X-Real-Ip]). +// If it is it will then try to parse the headers defined in Engine.RemoteIPHeaders (defaulting to [X-Forwarded-For, X-Real-IP]). // If the headers are not syntactically valid OR the remote IP does not correspond to a trusted proxy, // the remote IP (coming from Request.RemoteAddr) is returned. func (c *Context) ClientIP() string { @@ -934,6 +1057,19 @@ func (c *Context) SetCookie(name, value string, maxAge int, path, domain string, }) } +// SetCookieData adds a Set-Cookie header to the ResponseWriter's headers. +// It accepts a pointer to http.Cookie structure for more flexibility in setting cookie attributes. +// The provided cookie must have a valid Name. Invalid cookies may be silently dropped. +func (c *Context) SetCookieData(cookie *http.Cookie) { + if cookie.Path == "" { + cookie.Path = "/" + } + if cookie.SameSite == http.SameSiteDefaultMode { + cookie.SameSite = c.sameSite + } + http.SetCookie(c.Writer, cookie) +} + // Cookie returns the named cookie provided in the request or // ErrNoCookie if not found. And return the named cookie is unescaped. // If multiple cookies match the given name, only one cookie will @@ -1161,7 +1297,7 @@ func (c *Context) Negotiate(code int, config Negotiate) { data := chooseData(config.XMLData, config.Data) c.XML(code, data) - case binding.MIMEYAML: + case binding.MIMEYAML, binding.MIMEYAML2: data := chooseData(config.YAMLData, config.Data) c.YAML(code, data) diff --git a/vendor/github.com/gin-gonic/gin/debug.go b/vendor/github.com/gin-gonic/gin/debug.go index 1761fe3..7fe2762 100644 --- a/vendor/github.com/gin-gonic/gin/debug.go +++ b/vendor/github.com/gin-gonic/gin/debug.go @@ -10,21 +10,22 @@ import ( "runtime" "strconv" "strings" + "sync/atomic" ) -const ginSupportMinGoVer = 18 +const ginSupportMinGoVer = 23 // IsDebugging returns true if the framework is running in debug mode. // Use SetMode(gin.ReleaseMode) to disable debug mode. func IsDebugging() bool { - return ginMode == debugCode + return atomic.LoadInt32(&ginMode) == debugCode } // DebugPrintRouteFunc indicates debug log output format. var DebugPrintRouteFunc func(httpMethod, absolutePath, handlerName string, nuHandlers int) // DebugPrintFunc indicates debug log output format. -var DebugPrintFunc func(format string, values ...interface{}) +var DebugPrintFunc func(format string, values ...any) func debugPrintRoute(httpMethod, absolutePath string, handlers HandlersChain) { if IsDebugging() { @@ -77,7 +78,7 @@ func getMinVer(v string) (uint64, error) { func debugPrintWARNINGDefault() { if v, e := getMinVer(runtime.Version()); e == nil && v < ginSupportMinGoVer { - debugPrint(`[WARNING] Now Gin requires Go 1.18+. + debugPrint(`[WARNING] Now Gin requires Go 1.23+. `) } diff --git a/vendor/github.com/gin-gonic/gin/doc.go b/vendor/github.com/gin-gonic/gin/doc.go index 1bd0386..9442aa7 100644 --- a/vendor/github.com/gin-gonic/gin/doc.go +++ b/vendor/github.com/gin-gonic/gin/doc.go @@ -2,5 +2,21 @@ Package gin implements a HTTP web framework called gin. See https://gin-gonic.com/ for more information about gin. + +Example: + + package main + + import "github.com/gin-gonic/gin" + + func main() { + r := gin.Default() + r.GET("/ping", func(c *gin.Context) { + c.JSON(200, gin.H{ + "message": "pong", + }) + }) + r.Run() // listen and serve on 0.0.0.0:8080 + } */ package gin // import "github.com/gin-gonic/gin" diff --git a/vendor/github.com/gin-gonic/gin/errors.go b/vendor/github.com/gin-gonic/gin/errors.go index 06b53c2..829e9d2 100644 --- a/vendor/github.com/gin-gonic/gin/errors.go +++ b/vendor/github.com/gin-gonic/gin/errors.go @@ -9,7 +9,7 @@ import ( "reflect" "strings" - "github.com/gin-gonic/gin/internal/json" + "github.com/gin-gonic/gin/codec/json" ) // ErrorType is an unsigned 64-bit error code as defined in the gin spec. @@ -77,7 +77,7 @@ func (msg *Error) JSON() any { // MarshalJSON implements the json.Marshaller interface. func (msg *Error) MarshalJSON() ([]byte, error) { - return json.Marshal(msg.JSON()) + return json.API.Marshal(msg.JSON()) } // Error implements the error interface. @@ -91,7 +91,7 @@ func (msg *Error) IsType(flags ErrorType) bool { } // Unwrap returns the wrapped error, to allow interoperability with errors.Is(), errors.As() and errors.Unwrap() -func (msg *Error) Unwrap() error { +func (msg Error) Unwrap() error { return msg.Err } @@ -157,7 +157,7 @@ func (a errorMsgs) JSON() any { // MarshalJSON implements the json.Marshaller interface. func (a errorMsgs) MarshalJSON() ([]byte, error) { - return json.Marshal(a.JSON()) + return json.API.Marshal(a.JSON()) } func (a errorMsgs) String() string { diff --git a/vendor/github.com/gin-gonic/gin/fs.go b/vendor/github.com/gin-gonic/gin/fs.go index f17d743..ab18adb 100644 --- a/vendor/github.com/gin-gonic/gin/fs.go +++ b/vendor/github.com/gin-gonic/gin/fs.go @@ -9,37 +9,42 @@ import ( "os" ) -type onlyFilesFS struct { - fs http.FileSystem +// OnlyFilesFS implements an http.FileSystem without `Readdir` functionality. +type OnlyFilesFS struct { + FileSystem http.FileSystem } -type neuteredReaddirFile struct { +// Open passes `Open` to the upstream implementation without `Readdir` functionality. +func (o OnlyFilesFS) Open(name string) (http.File, error) { + f, err := o.FileSystem.Open(name) + if err != nil { + return nil, err + } + + return neutralizedReaddirFile{f}, nil +} + +// neutralizedReaddirFile wraps http.File with a specific implementation of `Readdir`. +type neutralizedReaddirFile struct { http.File } -// Dir returns a http.FileSystem that can be used by http.FileServer(). It is used internally -// in router.Static(). -// if listDirectory == true, then it works the same as http.Dir() otherwise it returns -// a filesystem that prevents http.FileServer() to list the directory files. +// Readdir overrides the http.File default implementation and always returns nil. +func (n neutralizedReaddirFile) Readdir(_ int) ([]os.FileInfo, error) { + // this disables directory listing + return nil, nil +} + +// Dir returns an http.FileSystem that can be used by http.FileServer(). +// It is used internally in router.Static(). +// if listDirectory == true, then it works the same as http.Dir(), +// otherwise it returns a filesystem that prevents http.FileServer() to list the directory files. func Dir(root string, listDirectory bool) http.FileSystem { fs := http.Dir(root) + if listDirectory { return fs } - return &onlyFilesFS{fs} -} -// Open conforms to http.Filesystem. -func (fs onlyFilesFS) Open(name string) (http.File, error) { - f, err := fs.fs.Open(name) - if err != nil { - return nil, err - } - return neuteredReaddirFile{f}, nil -} - -// Readdir overrides the http.File default implementation. -func (f neuteredReaddirFile) Readdir(_ int) ([]os.FileInfo, error) { - // this disables directory listing - return nil, nil + return &OnlyFilesFS{FileSystem: fs} } diff --git a/vendor/github.com/gin-gonic/gin/gin.go b/vendor/github.com/gin-gonic/gin/gin.go index 1633fe1..1965a42 100644 --- a/vendor/github.com/gin-gonic/gin/gin.go +++ b/vendor/github.com/gin-gonic/gin/gin.go @@ -16,12 +16,17 @@ import ( "sync" "github.com/gin-gonic/gin/internal/bytesconv" + filesystem "github.com/gin-gonic/gin/internal/fs" "github.com/gin-gonic/gin/render" + "github.com/quic-go/quic-go/http3" "golang.org/x/net/http2" "golang.org/x/net/http2/h2c" ) const defaultMultipartMemory = 32 << 20 // 32 MB +const escapedColon = "\\:" +const colon = ":" +const backslash = "\\" var ( default404Body = []byte("404 page not found") @@ -210,7 +215,7 @@ func New(opts ...OptionFunc) *Engine { trustedProxies: []string{"0.0.0.0/0", "::/0"}, trustedCIDRs: defaultTrustedCIDRs, } - engine.RouterGroup.engine = engine + engine.engine = engine engine.pool.New = func() any { return engine.allocateContext(engine.maxParams) } @@ -280,6 +285,19 @@ func (engine *Engine) LoadHTMLFiles(files ...string) { engine.SetHTMLTemplate(templ) } +// LoadHTMLFS loads an http.FileSystem and a slice of patterns +// and associates the result with HTML renderer. +func (engine *Engine) LoadHTMLFS(fs http.FileSystem, patterns ...string) { + if IsDebugging() { + engine.HTMLRender = render.HTMLDebug{FileSystem: fs, Patterns: patterns, FuncMap: engine.FuncMap, Delims: engine.delims} + return + } + + templ := template.Must(template.New("").Delims(engine.delims.Left, engine.delims.Right).Funcs(engine.FuncMap).ParseFS( + filesystem.FileSystem{FileSystem: fs}, patterns...)) + engine.SetHTMLTemplate(templ) +} + // SetHTMLTemplate associate a template with HTML renderer. func (engine *Engine) SetHTMLTemplate(templ *template.Template) { if len(engine.trees) > 0 { @@ -316,7 +334,7 @@ func (engine *Engine) Use(middleware ...HandlerFunc) IRoutes { return engine } -// With returns a new Engine instance with the provided options. +// With returns an Engine with the configuration set in the OptionFunc. func (engine *Engine) With(opts ...OptionFunc) *Engine { for _, opt := range opts { opt(engine) @@ -358,7 +376,7 @@ func (engine *Engine) addRoute(method, path string, handlers HandlersChain) { } // Routes returns a slice of registered routes, including some useful information, such as: -// the http method, path and the handler name. +// the http method, path, and the handler name. func (engine *Engine) Routes() (routes RoutesInfo) { for _, tree := range engine.trees { routes = iterate("", tree.method, routes, tree.root) @@ -383,23 +401,6 @@ func iterate(path, method string, routes RoutesInfo, root *node) RoutesInfo { return routes } -// Run attaches the router to a http.Server and starts listening and serving HTTP requests. -// It is a shortcut for http.ListenAndServe(addr, router) -// Note: this method will block the calling goroutine indefinitely unless an error happens. -func (engine *Engine) Run(addr ...string) (err error) { - defer func() { debugPrintError(err) }() - - if engine.isUnsafeTrustedProxies() { - debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" + - "Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.") - } - - address := resolveAddress(addr) - debugPrint("Listening and serving HTTP on %s\n", address) - err = http.ListenAndServe(address, engine.Handler()) - return -} - func (engine *Engine) prepareTrustedCIDRs() ([]*net.IPNet, error) { if engine.trustedProxies == nil { return nil, nil @@ -489,6 +490,26 @@ func (engine *Engine) validateHeader(header string) (clientIP string, valid bool return "", false } +// updateRouteTree do update to the route tree recursively +func updateRouteTree(n *node) { + n.path = strings.ReplaceAll(n.path, escapedColon, colon) + n.fullPath = strings.ReplaceAll(n.fullPath, escapedColon, colon) + n.indices = strings.ReplaceAll(n.indices, backslash, colon) + if n.children == nil { + return + } + for _, child := range n.children { + updateRouteTree(child) + } +} + +// updateRouteTrees do update to the route trees +func (engine *Engine) updateRouteTrees() { + for _, tree := range engine.trees { + updateRouteTree(tree.root) + } +} + // parseIP parse a string representation of an IP and returns a net.IP with the // minimum byte representation or nil if input is invalid. func parseIP(ip string) net.IP { @@ -503,6 +524,23 @@ func parseIP(ip string) net.IP { return parsedIP } +// Run attaches the router to a http.Server and starts listening and serving HTTP requests. +// It is a shortcut for http.ListenAndServe(addr, router) +// Note: this method will block the calling goroutine indefinitely unless an error happens. +func (engine *Engine) Run(addr ...string) (err error) { + defer func() { debugPrintError(err) }() + + if engine.isUnsafeTrustedProxies() { + debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" + + "Please check https://github.com/gin-gonic/gin/blob/master/docs/doc.md#dont-trust-all-proxies for details.") + } + engine.updateRouteTrees() + address := resolveAddress(addr) + debugPrint("Listening and serving HTTP on %s\n", address) + err = http.ListenAndServe(address, engine.Handler()) + return +} + // RunTLS attaches the router to a http.Server and starts listening and serving HTTPS (secure) requests. // It is a shortcut for http.ListenAndServeTLS(addr, certFile, keyFile, router) // Note: this method will block the calling goroutine indefinitely unless an error happens. @@ -512,7 +550,7 @@ func (engine *Engine) RunTLS(addr, certFile, keyFile string) (err error) { if engine.isUnsafeTrustedProxies() { debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" + - "Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.") + "Please check https://github.com/gin-gonic/gin/blob/master/docs/doc.md#dont-trust-all-proxies for details.") } err = http.ListenAndServeTLS(addr, certFile, keyFile, engine.Handler()) @@ -564,6 +602,22 @@ func (engine *Engine) RunFd(fd int) (err error) { return } +// RunQUIC attaches the router to a http.Server and starts listening and serving QUIC requests. +// It is a shortcut for http3.ListenAndServeQUIC(addr, certFile, keyFile, router) +// Note: this method will block the calling goroutine indefinitely unless an error happens. +func (engine *Engine) RunQUIC(addr, certFile, keyFile string) (err error) { + debugPrint("Listening and serving QUIC on %s\n", addr) + defer func() { debugPrintError(err) }() + + if engine.isUnsafeTrustedProxies() { + debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" + + "Please check https://github.com/gin-gonic/gin/blob/master/docs/doc.md#dont-trust-all-proxies for details.") + } + + err = http3.ListenAndServeQUIC(addr, certFile, keyFile, engine.Handler()) + return +} + // RunListener attaches the router to a http.Server and starts listening and serving HTTP requests // through the specified net.Listener func (engine *Engine) RunListener(listener net.Listener) (err error) { @@ -596,10 +650,12 @@ func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) { // Disclaimer: You can loop yourself to deal with this, use wisely. func (engine *Engine) HandleContext(c *Context) { oldIndexValue := c.index + oldHandlers := c.handlers c.reset() engine.handleHTTPRequest(c) c.index = oldIndexValue + c.handlers = oldHandlers } func (engine *Engine) handleHTTPRequest(c *Context) { @@ -646,7 +702,7 @@ func (engine *Engine) handleHTTPRequest(c *Context) { break } - if engine.HandleMethodNotAllowed { + if engine.HandleMethodNotAllowed && len(t) > 0 { // According to RFC 7231 section 6.5.5, MUST generate an Allow header field in response // containing a list of the target resource's currently supported methods. allowed := make([]string, 0, len(t)-1) diff --git a/vendor/github.com/gin-gonic/gin/internal/bytesconv/bytesconv_1.20.go b/vendor/github.com/gin-gonic/gin/internal/bytesconv/bytesconv.go similarity index 97% rename from vendor/github.com/gin-gonic/gin/internal/bytesconv/bytesconv_1.20.go rename to vendor/github.com/gin-gonic/gin/internal/bytesconv/bytesconv.go index 5b6040a..a02c53c 100644 --- a/vendor/github.com/gin-gonic/gin/internal/bytesconv/bytesconv_1.20.go +++ b/vendor/github.com/gin-gonic/gin/internal/bytesconv/bytesconv.go @@ -2,8 +2,6 @@ // Use of this source code is governed by a MIT style // license that can be found in the LICENSE file. -//go:build go1.20 - package bytesconv import ( diff --git a/vendor/github.com/gin-gonic/gin/internal/bytesconv/bytesconv_1.19.go b/vendor/github.com/gin-gonic/gin/internal/bytesconv/bytesconv_1.19.go deleted file mode 100644 index 669c9c9..0000000 --- a/vendor/github.com/gin-gonic/gin/internal/bytesconv/bytesconv_1.19.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2020 Gin Core Team. All rights reserved. -// Use of this source code is governed by a MIT style -// license that can be found in the LICENSE file. - -//go:build !go1.20 - -package bytesconv - -import ( - "unsafe" -) - -// StringToBytes converts string to byte slice without a memory allocation. -func StringToBytes(s string) []byte { - return *(*[]byte)(unsafe.Pointer( - &struct { - string - Cap int - }{s, len(s)}, - )) -} - -// BytesToString converts byte slice to string without a memory allocation. -func BytesToString(b []byte) string { - return *(*string)(unsafe.Pointer(&b)) -} diff --git a/vendor/github.com/gin-gonic/gin/internal/fs/fs.go b/vendor/github.com/gin-gonic/gin/internal/fs/fs.go new file mode 100644 index 0000000..c253038 --- /dev/null +++ b/vendor/github.com/gin-gonic/gin/internal/fs/fs.go @@ -0,0 +1,21 @@ +package fs + +import ( + "io/fs" + "net/http" +) + +// FileSystem implements an [fs.FS]. +type FileSystem struct { + http.FileSystem +} + +// Open passes `Open` to the upstream implementation and return an [fs.File]. +func (o FileSystem) Open(name string) (fs.File, error) { + f, err := o.FileSystem.Open(name) + if err != nil { + return nil, err + } + + return fs.File(f), nil +} diff --git a/vendor/github.com/gin-gonic/gin/internal/json/go_json.go b/vendor/github.com/gin-gonic/gin/internal/json/go_json.go deleted file mode 100644 index 47c3559..0000000 --- a/vendor/github.com/gin-gonic/gin/internal/json/go_json.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2017 Bo-Yi Wu. All rights reserved. -// Use of this source code is governed by a MIT style -// license that can be found in the LICENSE file. - -//go:build go_json - -package json - -import json "github.com/goccy/go-json" - -var ( - // Marshal is exported by gin/json package. - Marshal = json.Marshal - // Unmarshal is exported by gin/json package. - Unmarshal = json.Unmarshal - // MarshalIndent is exported by gin/json package. - MarshalIndent = json.MarshalIndent - // NewDecoder is exported by gin/json package. - NewDecoder = json.NewDecoder - // NewEncoder is exported by gin/json package. - NewEncoder = json.NewEncoder -) diff --git a/vendor/github.com/gin-gonic/gin/internal/json/json.go b/vendor/github.com/gin-gonic/gin/internal/json/json.go deleted file mode 100644 index c7ee83e..0000000 --- a/vendor/github.com/gin-gonic/gin/internal/json/json.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2017 Bo-Yi Wu. All rights reserved. -// Use of this source code is governed by a MIT style -// license that can be found in the LICENSE file. - -//go:build !jsoniter && !go_json && !(sonic && avx && (linux || windows || darwin) && amd64) - -package json - -import "encoding/json" - -var ( - // Marshal is exported by gin/json package. - Marshal = json.Marshal - // Unmarshal is exported by gin/json package. - Unmarshal = json.Unmarshal - // MarshalIndent is exported by gin/json package. - MarshalIndent = json.MarshalIndent - // NewDecoder is exported by gin/json package. - NewDecoder = json.NewDecoder - // NewEncoder is exported by gin/json package. - NewEncoder = json.NewEncoder -) diff --git a/vendor/github.com/gin-gonic/gin/internal/json/jsoniter.go b/vendor/github.com/gin-gonic/gin/internal/json/jsoniter.go deleted file mode 100644 index 45ed16b..0000000 --- a/vendor/github.com/gin-gonic/gin/internal/json/jsoniter.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2017 Bo-Yi Wu. All rights reserved. -// Use of this source code is governed by a MIT style -// license that can be found in the LICENSE file. - -//go:build jsoniter - -package json - -import jsoniter "github.com/json-iterator/go" - -var ( - json = jsoniter.ConfigCompatibleWithStandardLibrary - // Marshal is exported by gin/json package. - Marshal = json.Marshal - // Unmarshal is exported by gin/json package. - Unmarshal = json.Unmarshal - // MarshalIndent is exported by gin/json package. - MarshalIndent = json.MarshalIndent - // NewDecoder is exported by gin/json package. - NewDecoder = json.NewDecoder - // NewEncoder is exported by gin/json package. - NewEncoder = json.NewEncoder -) diff --git a/vendor/github.com/gin-gonic/gin/internal/json/sonic.go b/vendor/github.com/gin-gonic/gin/internal/json/sonic.go deleted file mode 100644 index 529e16d..0000000 --- a/vendor/github.com/gin-gonic/gin/internal/json/sonic.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2022 Gin Core Team. All rights reserved. -// Use of this source code is governed by a MIT style -// license that can be found in the LICENSE file. - -//go:build sonic && avx && (linux || windows || darwin) && amd64 - -package json - -import "github.com/bytedance/sonic" - -var ( - json = sonic.ConfigStd - // Marshal is exported by gin/json package. - Marshal = json.Marshal - // Unmarshal is exported by gin/json package. - Unmarshal = json.Unmarshal - // MarshalIndent is exported by gin/json package. - MarshalIndent = json.MarshalIndent - // NewDecoder is exported by gin/json package. - NewDecoder = json.NewDecoder - // NewEncoder is exported by gin/json package. - NewEncoder = json.NewEncoder -) diff --git a/vendor/github.com/gin-gonic/gin/logger.go b/vendor/github.com/gin-gonic/gin/logger.go index db2c683..4782778 100644 --- a/vendor/github.com/gin-gonic/gin/logger.go +++ b/vendor/github.com/gin-gonic/gin/logger.go @@ -44,7 +44,7 @@ type LoggerConfig struct { // Optional. Default value is gin.DefaultWriter. Output io.Writer - // SkipPaths is an url path array which logs are not written. + // SkipPaths is a URL path array which logs are not written. // Optional. SkipPaths []string @@ -82,7 +82,7 @@ type LogFormatterParams struct { // BodySize is the size of the Response Body BodySize int // Keys are the keys set on the request's context. - Keys map[string]any + Keys map[any]any } // StatusCodeColor is the ANSI color for appropriately logging http status code to a terminal. diff --git a/vendor/github.com/gin-gonic/gin/mode.go b/vendor/github.com/gin-gonic/gin/mode.go index fd26d90..dfef07d 100644 --- a/vendor/github.com/gin-gonic/gin/mode.go +++ b/vendor/github.com/gin-gonic/gin/mode.go @@ -8,6 +8,7 @@ import ( "flag" "io" "os" + "sync/atomic" "github.com/gin-gonic/gin/binding" ) @@ -44,8 +45,8 @@ var DefaultWriter io.Writer = os.Stdout var DefaultErrorWriter io.Writer = os.Stderr var ( - ginMode = debugCode - modeName = DebugMode + ginMode int32 = debugCode + modeName atomic.Value ) func init() { @@ -65,16 +66,15 @@ func SetMode(value string) { switch value { case DebugMode: - ginMode = debugCode + atomic.StoreInt32(&ginMode, debugCode) case ReleaseMode: - ginMode = releaseCode + atomic.StoreInt32(&ginMode, releaseCode) case TestMode: - ginMode = testCode + atomic.StoreInt32(&ginMode, testCode) default: panic("gin mode unknown: " + value + " (available mode: debug release test)") } - - modeName = value + modeName.Store(value) } // DisableBindValidation closes the default validator. @@ -96,5 +96,5 @@ func EnableJsonDecoderDisallowUnknownFields() { // Mode returns current gin mode. func Mode() string { - return modeName + return modeName.Load().(string) } diff --git a/vendor/github.com/gin-gonic/gin/recovery.go b/vendor/github.com/gin-gonic/gin/recovery.go index 515f9d2..fdd463f 100644 --- a/vendor/github.com/gin-gonic/gin/recovery.go +++ b/vendor/github.com/gin-gonic/gin/recovery.go @@ -17,15 +17,14 @@ import ( "runtime" "strings" "time" -) -var ( - dunno = []byte("???") - centerDot = []byte("·") - dot = []byte(".") - slash = []byte("/") + "github.com/gin-gonic/gin/internal/bytesconv" ) +const dunno = "???" + +var dunnoBytes = []byte(dunno) + // RecoveryFunc defines the function passable to CustomRecovery. type RecoveryFunc func(c *Context, err any) @@ -70,24 +69,15 @@ func CustomRecoveryWithWriter(out io.Writer, handle RecoveryFunc) HandlerFunc { } } if logger != nil { - stack := stack(3) - httpRequest, _ := httputil.DumpRequest(c.Request, false) - headers := strings.Split(string(httpRequest), "\r\n") - for idx, header := range headers { - current := strings.Split(header, ":") - if current[0] == "Authorization" { - headers[idx] = current[0] + ": *" - } - } - headersToStr := strings.Join(headers, "\r\n") + const stackSkip = 3 if brokenPipe { - logger.Printf("%s\n%s%s", err, headersToStr, reset) + logger.Printf("%s\n%s%s", err, secureRequestDump(c.Request), reset) } else if IsDebugging() { logger.Printf("[Recovery] %s panic recovered:\n%s\n%s\n%s%s", - timeFormat(time.Now()), headersToStr, err, stack, reset) + timeFormat(time.Now()), secureRequestDump(c.Request), err, stack(stackSkip), reset) } else { logger.Printf("[Recovery] %s panic recovered:\n%s\n%s%s", - timeFormat(time.Now()), err, stack, reset) + timeFormat(time.Now()), err, stack(stackSkip), reset) } } if brokenPipe { @@ -103,6 +93,21 @@ func CustomRecoveryWithWriter(out io.Writer, handle RecoveryFunc) HandlerFunc { } } +// secureRequestDump returns a sanitized HTTP request dump where the Authorization header, +// if present, is replaced with a masked value ("Authorization: *") to avoid leaking sensitive credentials. +// +// Currently, only the Authorization header is sanitized. All other headers and request data remain unchanged. +func secureRequestDump(r *http.Request) string { + httpRequest, _ := httputil.DumpRequest(r, false) + lines := strings.Split(bytesconv.BytesToString(httpRequest), "\r\n") + for i, line := range lines { + if strings.HasPrefix(line, "Authorization:") { + lines[i] = "Authorization: *" + } + } + return strings.Join(lines, "\r\n") +} + func defaultHandleRecovery(c *Context, _ any) { c.AbortWithStatus(http.StatusInternalServerError) } @@ -138,18 +143,18 @@ func stack(skip int) []byte { func source(lines [][]byte, n int) []byte { n-- // in stack trace, lines are 1-indexed but our array is 0-indexed if n < 0 || n >= len(lines) { - return dunno + return dunnoBytes } return bytes.TrimSpace(lines[n]) } // function returns, if possible, the name of the function containing the PC. -func function(pc uintptr) []byte { +func function(pc uintptr) string { fn := runtime.FuncForPC(pc) if fn == nil { return dunno } - name := []byte(fn.Name()) + name := fn.Name() // The name includes the path name to the package, which is unnecessary // since the file name is already included. Plus, it has center dots. // That is, we see @@ -158,13 +163,13 @@ func function(pc uintptr) []byte { // *T.ptrmethod // Also the package path might contain dot (e.g. code.google.com/...), // so first eliminate the path prefix - if lastSlash := bytes.LastIndex(name, slash); lastSlash >= 0 { + if lastSlash := strings.LastIndexByte(name, '/'); lastSlash >= 0 { name = name[lastSlash+1:] } - if period := bytes.Index(name, dot); period >= 0 { + if period := strings.IndexByte(name, '.'); period >= 0 { name = name[period+1:] } - name = bytes.ReplaceAll(name, centerDot, dot) + name = strings.ReplaceAll(name, "·", ".") return name } diff --git a/vendor/github.com/gin-gonic/gin/render/html.go b/vendor/github.com/gin-gonic/gin/render/html.go index c308408..965d84c 100644 --- a/vendor/github.com/gin-gonic/gin/render/html.go +++ b/vendor/github.com/gin-gonic/gin/render/html.go @@ -7,6 +7,8 @@ package render import ( "html/template" "net/http" + + "github.com/gin-gonic/gin/internal/fs" ) // Delims represents a set of Left and Right delimiters for HTML template rendering. @@ -31,10 +33,12 @@ type HTMLProduction struct { // HTMLDebug contains template delims and pattern and function with file list. type HTMLDebug struct { - Files []string - Glob string - Delims Delims - FuncMap template.FuncMap + Files []string + Glob string + FileSystem http.FileSystem + Patterns []string + Delims Delims + FuncMap template.FuncMap } // HTML contains template reference and its name with given interface object. @@ -63,6 +67,7 @@ func (r HTMLDebug) Instance(name string, data any) Render { Data: data, } } + func (r HTMLDebug) loadTemplate() *template.Template { if r.FuncMap == nil { r.FuncMap = template.FuncMap{} @@ -73,7 +78,11 @@ func (r HTMLDebug) loadTemplate() *template.Template { if r.Glob != "" { return template.Must(template.New("").Delims(r.Delims.Left, r.Delims.Right).Funcs(r.FuncMap).ParseGlob(r.Glob)) } - panic("the HTML debug render was created without files or glob pattern") + if r.FileSystem != nil && len(r.Patterns) > 0 { + return template.Must(template.New("").Delims(r.Delims.Left, r.Delims.Right).Funcs(r.FuncMap).ParseFS( + fs.FileSystem{FileSystem: r.FileSystem}, r.Patterns...)) + } + panic("the HTML debug render was created without files or glob pattern or file system with patterns") } // Render (HTML) executes template and writes its result with custom ContentType for response. diff --git a/vendor/github.com/gin-gonic/gin/render/json.go b/vendor/github.com/gin-gonic/gin/render/json.go index fc8dea4..2f98676 100644 --- a/vendor/github.com/gin-gonic/gin/render/json.go +++ b/vendor/github.com/gin-gonic/gin/render/json.go @@ -9,9 +9,10 @@ import ( "fmt" "html/template" "net/http" + "unicode" + "github.com/gin-gonic/gin/codec/json" "github.com/gin-gonic/gin/internal/bytesconv" - "github.com/gin-gonic/gin/internal/json" ) // JSON contains the given interface object. @@ -65,7 +66,7 @@ func (r JSON) WriteContentType(w http.ResponseWriter) { // WriteJSON marshals the given interface object and writes it with custom ContentType. func WriteJSON(w http.ResponseWriter, obj any) error { writeContentType(w, jsonContentType) - jsonBytes, err := json.Marshal(obj) + jsonBytes, err := json.API.Marshal(obj) if err != nil { return err } @@ -76,7 +77,7 @@ func WriteJSON(w http.ResponseWriter, obj any) error { // Render (IndentedJSON) marshals the given interface object and writes it with custom ContentType. func (r IndentedJSON) Render(w http.ResponseWriter) error { r.WriteContentType(w) - jsonBytes, err := json.MarshalIndent(r.Data, "", " ") + jsonBytes, err := json.API.MarshalIndent(r.Data, "", " ") if err != nil { return err } @@ -92,7 +93,7 @@ func (r IndentedJSON) WriteContentType(w http.ResponseWriter) { // Render (SecureJSON) marshals the given interface object and writes it with custom ContentType. func (r SecureJSON) Render(w http.ResponseWriter) error { r.WriteContentType(w) - jsonBytes, err := json.Marshal(r.Data) + jsonBytes, err := json.API.Marshal(r.Data) if err != nil { return err } @@ -115,7 +116,7 @@ func (r SecureJSON) WriteContentType(w http.ResponseWriter) { // Render (JsonpJSON) marshals the given interface object and writes it and its callback with custom ContentType. func (r JsonpJSON) Render(w http.ResponseWriter) (err error) { r.WriteContentType(w) - ret, err := json.Marshal(r.Data) + ret, err := json.API.Marshal(r.Data) if err != nil { return err } @@ -151,20 +152,23 @@ func (r JsonpJSON) WriteContentType(w http.ResponseWriter) { } // Render (AsciiJSON) marshals the given interface object and writes it with custom ContentType. -func (r AsciiJSON) Render(w http.ResponseWriter) (err error) { +func (r AsciiJSON) Render(w http.ResponseWriter) error { r.WriteContentType(w) - ret, err := json.Marshal(r.Data) + ret, err := json.API.Marshal(r.Data) if err != nil { return err } var buffer bytes.Buffer + escapeBuf := make([]byte, 0, 6) // Preallocate 6 bytes for Unicode escape sequences + for _, r := range bytesconv.BytesToString(ret) { - cvt := string(r) - if r >= 128 { - cvt = fmt.Sprintf("\\u%04x", int64(r)) + if r > unicode.MaxASCII { + escapeBuf = fmt.Appendf(escapeBuf[:0], "\\u%04x", r) // Reuse escapeBuf + buffer.Write(escapeBuf) + } else { + buffer.WriteByte(byte(r)) } - buffer.WriteString(cvt) } _, err = w.Write(buffer.Bytes()) @@ -179,7 +183,7 @@ func (r AsciiJSON) WriteContentType(w http.ResponseWriter) { // Render (PureJSON) writes custom ContentType and encodes the given interface object. func (r PureJSON) Render(w http.ResponseWriter) error { r.WriteContentType(w) - encoder := json.NewEncoder(w) + encoder := json.API.NewEncoder(w) encoder.SetEscapeHTML(false) return encoder.Encode(r.Data) } diff --git a/vendor/github.com/gin-gonic/gin/render/reader.go b/vendor/github.com/gin-gonic/gin/render/reader.go index 5752d8d..ae1a7b5 100644 --- a/vendor/github.com/gin-gonic/gin/render/reader.go +++ b/vendor/github.com/gin-gonic/gin/render/reader.go @@ -27,7 +27,7 @@ func (r Reader) Render(w http.ResponseWriter) (err error) { } r.Headers["Content-Length"] = strconv.FormatInt(r.ContentLength, 10) } - r.writeHeaders(w, r.Headers) + r.writeHeaders(w) _, err = io.Copy(w, r.Reader) return } @@ -37,10 +37,10 @@ func (r Reader) WriteContentType(w http.ResponseWriter) { writeContentType(w, []string{r.ContentType}) } -// writeHeaders writes custom Header. -func (r Reader) writeHeaders(w http.ResponseWriter, headers map[string]string) { +// writeHeaders writes headers from r.Headers into response. +func (r Reader) writeHeaders(w http.ResponseWriter) { header := w.Header() - for k, v := range headers { + for k, v := range r.Headers { if header.Get(k) == "" { header.Set(k, v) } diff --git a/vendor/github.com/gin-gonic/gin/render/toml.go b/vendor/github.com/gin-gonic/gin/render/toml.go index 40f044c..379ac72 100644 --- a/vendor/github.com/gin-gonic/gin/render/toml.go +++ b/vendor/github.com/gin-gonic/gin/render/toml.go @@ -15,7 +15,7 @@ type TOML struct { Data any } -var TOMLContentType = []string{"application/toml; charset=utf-8"} +var tomlContentType = []string{"application/toml; charset=utf-8"} // Render (TOML) marshals the given interface object and writes data with custom ContentType. func (r TOML) Render(w http.ResponseWriter) error { @@ -32,5 +32,5 @@ func (r TOML) Render(w http.ResponseWriter) error { // WriteContentType (TOML) writes TOML ContentType for response. func (r TOML) WriteContentType(w http.ResponseWriter) { - writeContentType(w, TOMLContentType) + writeContentType(w, tomlContentType) } diff --git a/vendor/github.com/gin-gonic/gin/render/yaml.go b/vendor/github.com/gin-gonic/gin/render/yaml.go index 042bb82..98b0644 100644 --- a/vendor/github.com/gin-gonic/gin/render/yaml.go +++ b/vendor/github.com/gin-gonic/gin/render/yaml.go @@ -7,7 +7,7 @@ package render import ( "net/http" - "gopkg.in/yaml.v3" + "github.com/goccy/go-yaml" ) // YAML contains the given interface object. diff --git a/vendor/github.com/gin-gonic/gin/response_writer.go b/vendor/github.com/gin-gonic/gin/response_writer.go index 753a0b0..ab2f5fe 100644 --- a/vendor/github.com/gin-gonic/gin/response_writer.go +++ b/vendor/github.com/gin-gonic/gin/response_writer.go @@ -6,6 +6,7 @@ package gin import ( "bufio" + "errors" "io" "net" "net/http" @@ -16,6 +17,8 @@ const ( defaultStatus = http.StatusOK ) +var errHijackAlreadyWritten = errors.New("gin: response already written") + // ResponseWriter ... type ResponseWriter interface { http.ResponseWriter @@ -106,6 +109,9 @@ func (w *responseWriter) Written() bool { // Hijack implements the http.Hijacker interface. func (w *responseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { + if w.Written() { + return nil, nil, errHijackAlreadyWritten + } if w.size < 0 { w.size = 0 } diff --git a/vendor/github.com/gin-gonic/gin/routergroup.go b/vendor/github.com/gin-gonic/gin/routergroup.go index c833fe8..b2540ec 100644 --- a/vendor/github.com/gin-gonic/gin/routergroup.go +++ b/vendor/github.com/gin-gonic/gin/routergroup.go @@ -218,7 +218,7 @@ func (group *RouterGroup) createStaticHandler(relativePath string, fs http.FileS fileServer := http.StripPrefix(absolutePath, http.FileServer(fs)) return func(c *Context) { - if _, noListing := fs.(*onlyFilesFS); noListing { + if _, noListing := fs.(*OnlyFilesFS); noListing { c.Writer.WriteHeader(http.StatusNotFound) } diff --git a/vendor/github.com/gin-gonic/gin/test_helpers.go b/vendor/github.com/gin-gonic/gin/test_helpers.go index 7508c5c..a1a7c56 100644 --- a/vendor/github.com/gin-gonic/gin/test_helpers.go +++ b/vendor/github.com/gin-gonic/gin/test_helpers.go @@ -6,7 +6,10 @@ package gin import "net/http" -// CreateTestContext returns a fresh engine and context for testing purposes +// CreateTestContext returns a fresh Engine and a Context associated with it. +// This is useful for tests that need to set up a new Gin engine instance +// along with a context, for example, to test middleware that doesn't depend on +// specific routes. The ResponseWriter `w` is used to initialize the context's writer. func CreateTestContext(w http.ResponseWriter) (c *Context, r *Engine) { r = New() c = r.allocateContext(0) @@ -15,7 +18,11 @@ func CreateTestContext(w http.ResponseWriter) (c *Context, r *Engine) { return } -// CreateTestContextOnly returns a fresh context base on the engine for testing purposes +// CreateTestContextOnly returns a fresh Context associated with the provided Engine `r`. +// This is useful for tests that operate on an existing, possibly pre-configured, +// Gin engine instance and need a new context for it. +// The ResponseWriter `w` is used to initialize the context's writer. +// The context is allocated with the `maxParams` setting from the provided engine. func CreateTestContextOnly(w http.ResponseWriter, r *Engine) (c *Context) { c = r.allocateContext(r.maxParams) c.reset() diff --git a/vendor/github.com/gin-gonic/gin/tree.go b/vendor/github.com/gin-gonic/gin/tree.go index 878023d..78479b6 100644 --- a/vendor/github.com/gin-gonic/gin/tree.go +++ b/vendor/github.com/gin-gonic/gin/tree.go @@ -65,17 +65,10 @@ func (trees methodTrees) get(method string) *node { return nil } -func min(a, b int) int { - if a <= b { - return a - } - return b -} - func longestCommonPrefix(a, b string) int { i := 0 - max := min(len(a), len(b)) - for i < max && a[i] == b[i] { + max_ := min(len(a), len(b)) + for i < max_ && a[i] == b[i] { i++ } return i @@ -205,7 +198,7 @@ walk: } // Check if a child with the next path byte exists - for i, max := 0, len(n.indices); i < max; i++ { + for i, max_ := 0, len(n.indices); i < max_; i++ { if c == n.indices[i] { parentFullPathIndex += len(n.path) i = n.incrementChildPrio(i) @@ -241,7 +234,7 @@ walk: // Wildcard conflict pathSeg := path if n.nType != catchAll { - pathSeg = strings.SplitN(pathSeg, "/", 2)[0] + pathSeg, _, _ = strings.Cut(pathSeg, "/") } prefix := fullPath[:strings.Index(fullPath, pathSeg)] + n.path panic("'" + pathSeg + @@ -269,7 +262,19 @@ walk: // Returns -1 as index, if no wildcard was found. func findWildcard(path string) (wildcard string, i int, valid bool) { // Find start + escapeColon := false for start, c := range []byte(path) { + if escapeColon { + escapeColon = false + if c == ':' { + continue + } + panic("invalid escape string in path '" + path + "'") + } + if c == '\\' { + escapeColon = true + continue + } // A wildcard starts with ':' (param) or '*' (catch-all) if c != ':' && c != '*' { continue @@ -353,7 +358,7 @@ func (n *node) insertChild(path string, fullPath string, handlers HandlersChain) if len(n.path) > 0 && n.path[len(n.path)-1] == '/' { pathSeg := "" if len(n.children) != 0 { - pathSeg = strings.SplitN(n.children[0].path, "/", 2)[0] + pathSeg, _, _ = strings.Cut(n.children[0].path, "/") } panic("catch-all wildcard '" + path + "' in new path '" + fullPath + @@ -364,7 +369,7 @@ func (n *node) insertChild(path string, fullPath string, handlers HandlersChain) // currently fixed width 1 for '/' i-- - if path[i] != '/' { + if i < 0 || path[i] != '/' { panic("no / before catch-all in path '" + fullPath + "'") } @@ -378,7 +383,7 @@ func (n *node) insertChild(path string, fullPath string, handlers HandlersChain) } n.addChild(child) - n.indices = string('/') + n.indices = "/" n = child n.priority++ @@ -770,7 +775,7 @@ walk: // Outer loop for walking the tree // Runes are up to 4 byte long, // -4 would definitely be another rune. var off int - for max := min(npLen, 3); off < max; off++ { + for max_ := min(npLen, 3); off < max_; off++ { if i := npLen - off; utf8.RuneStart(oldPath[i]) { // read rune from cached path rv, _ = utf8.DecodeRuneInString(oldPath[i:]) diff --git a/vendor/github.com/gin-gonic/gin/version.go b/vendor/github.com/gin-gonic/gin/version.go index 93ad965..8049058 100644 --- a/vendor/github.com/gin-gonic/gin/version.go +++ b/vendor/github.com/gin-gonic/gin/version.go @@ -5,4 +5,4 @@ package gin // Version is the current gin framework's version. -const Version = "v1.10.0" +const Version = "v1.11.0" diff --git a/vendor/github.com/go-playground/validator/v10/.golangci.yaml b/vendor/github.com/go-playground/validator/v10/.golangci.yaml index eab557e..dd9c05c 100644 --- a/vendor/github.com/go-playground/validator/v10/.golangci.yaml +++ b/vendor/github.com/go-playground/validator/v10/.golangci.yaml @@ -2,101 +2,53 @@ version: "2" linters: default: all disable: - - asasalint - - asciicheck - - bidichk - - bodyclose - - canonicalheader - - containedctx - - contextcheck + - noinlineerr + - wsl_v5 - copyloopvar - cyclop - - decorder - depguard - dogsled - dupl - dupword - - durationcheck - err113 - - errcheck - - errchkjson - - errname - errorlint - exhaustive - exhaustruct - - exptostd - - fatcontext - forbidigo - forcetypeassert - funlen - - ginkgolinter - - gocheckcompilerdirectives - gochecknoglobals - - gochecknoinits - - gochecksumtype - gocognit - goconst - gocritic - gocyclo - godot - - godox - - goheader - - gomoddirectives - - gomodguard - - goprintffuncname - gosec - gosmopolitan - - govet - - grouper - - iface - - importas - - inamedparam - - ineffassign - interfacebloat - intrange - ireturn - lll - - loggercheck - maintidx - - makezero - - mirror - misspell - mnd - - musttag - nakedret - nestif - - nilerr - - nilnesserr - nilnil - nlreturn - - noctx - - nolintlint - nonamedreturns - - nosprintfhostport - paralleltest - perfsprint - prealloc - - predeclared - - promlinter - - protogetter - - reassign - recvcheck - revive - - rowserrcheck - - sloglint - - spancheck - - sqlclosecheck - staticcheck - tagalign - tagliatelle - - testableexamples - - testifylint - testpackage - thelper - tparallel - unparam - varnamelen - - whitespace - wrapcheck - wsl - - zerologlint \ No newline at end of file diff --git a/vendor/github.com/go-playground/validator/v10/README.md b/vendor/github.com/go-playground/validator/v10/README.md index 368b966..28f7e15 100644 --- a/vendor/github.com/go-playground/validator/v10/README.md +++ b/vendor/github.com/go-playground/validator/v10/README.md @@ -1,6 +1,6 @@ Package validator ================= -![Project status](https://img.shields.io/badge/version-10.25.0-green.svg) +[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/go-playground/validator)](https://github.com/go-playground/validator/releases) [![Build Status](https://github.com/go-playground/validator/actions/workflows/workflow.yml/badge.svg)](https://github.com/go-playground/validator/actions) [![Coverage Status](https://coveralls.io/repos/go-playground/validator/badge.svg?branch=master&service=github)](https://coveralls.io/github/go-playground/validator?branch=master) [![Go Report Card](https://goreportcard.com/badge/github.com/go-playground/validator)](https://goreportcard.com/report/github.com/go-playground/validator) @@ -262,6 +262,8 @@ validate := validator.New(validator.WithRequiredStructEnabled()) | excluded_without | Excluded Without | | excluded_without_all | Excluded Without All | | unique | Unique | +| validateFn | Verify if the method `Validate() error` does not return an error (or any specified method) | + #### Aliases: | Tag | Description | diff --git a/vendor/github.com/go-playground/validator/v10/baked_in.go b/vendor/github.com/go-playground/validator/v10/baked_in.go index 5332cf3..c968ad4 100644 --- a/vendor/github.com/go-playground/validator/v10/baked_in.go +++ b/vendor/github.com/go-playground/validator/v10/baked_in.go @@ -2,10 +2,12 @@ package validator import ( "bytes" + "cmp" "context" "crypto/sha256" "encoding/hex" "encoding/json" + "errors" "fmt" "io/fs" "net" @@ -244,6 +246,7 @@ var ( "cron": isCron, "spicedb": isSpiceDB, "ein": isEIN, + "validateFn": isValidateFn, } ) @@ -294,7 +297,7 @@ func isOneOf(fl FieldLevel) bool { case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: v = strconv.FormatUint(field.Uint(), 10) default: - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } for i := 0; i < len(vals); i++ { if vals[i] == v { @@ -310,7 +313,7 @@ func isOneOfCI(fl FieldLevel) bool { field := fl.Field() if field.Kind() != reflect.String { - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } v := field.String() for _, val := range vals { @@ -384,13 +387,13 @@ func isUnique(fl FieldLevel) bool { } if uniqueField.Kind() != field.Kind() { - panic(fmt.Sprintf("Bad field type %T:%T", field.Interface(), uniqueField.Interface())) + panic(fmt.Sprintf("Bad field type %s:%s", field.Type(), uniqueField.Type())) } - return field.Interface() != uniqueField.Interface() + return getValue(field) != getValue(uniqueField) } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } } @@ -471,7 +474,7 @@ func isLongitude(fl FieldLevel) bool { case reflect.Float64: v = strconv.FormatFloat(field.Float(), 'f', -1, 64) default: - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } return longitudeRegex().MatchString(v) @@ -494,7 +497,7 @@ func isLatitude(fl FieldLevel) bool { case reflect.Float64: v = strconv.FormatFloat(field.Float(), 'f', -1, 64) default: - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } return latitudeRegex().MatchString(v) @@ -945,7 +948,6 @@ func isNeField(fl FieldLevel) bool { } switch kind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return field.Int() != currentField.Int() @@ -966,9 +968,8 @@ func isNeField(fl FieldLevel) bool { fieldType := field.Type() if fieldType.ConvertibleTo(timeType) && currentField.Type().ConvertibleTo(timeType) { - - t := currentField.Interface().(time.Time) - fieldTime := field.Interface().(time.Time) + t := getValue(currentField).(time.Time) + fieldTime := getValue(field).(time.Time) return !fieldTime.Equal(t) } @@ -1005,7 +1006,6 @@ func isLteCrossStructField(fl FieldLevel) bool { } switch kind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return field.Int() <= topField.Int() @@ -1023,9 +1023,8 @@ func isLteCrossStructField(fl FieldLevel) bool { fieldType := field.Type() if fieldType.ConvertibleTo(timeType) && topField.Type().ConvertibleTo(timeType) { - - fieldTime := field.Convert(timeType).Interface().(time.Time) - topTime := topField.Convert(timeType).Interface().(time.Time) + fieldTime := getValue(field.Convert(timeType)).(time.Time) + topTime := getValue(topField.Convert(timeType)).(time.Time) return fieldTime.Before(topTime) || fieldTime.Equal(topTime) } @@ -1052,7 +1051,6 @@ func isLtCrossStructField(fl FieldLevel) bool { } switch kind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return field.Int() < topField.Int() @@ -1070,9 +1068,8 @@ func isLtCrossStructField(fl FieldLevel) bool { fieldType := field.Type() if fieldType.ConvertibleTo(timeType) && topField.Type().ConvertibleTo(timeType) { - - fieldTime := field.Convert(timeType).Interface().(time.Time) - topTime := topField.Convert(timeType).Interface().(time.Time) + fieldTime := getValue(field.Convert(timeType)).(time.Time) + topTime := getValue(topField.Convert(timeType)).(time.Time) return fieldTime.Before(topTime) } @@ -1098,7 +1095,6 @@ func isGteCrossStructField(fl FieldLevel) bool { } switch kind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return field.Int() >= topField.Int() @@ -1116,9 +1112,8 @@ func isGteCrossStructField(fl FieldLevel) bool { fieldType := field.Type() if fieldType.ConvertibleTo(timeType) && topField.Type().ConvertibleTo(timeType) { - - fieldTime := field.Convert(timeType).Interface().(time.Time) - topTime := topField.Convert(timeType).Interface().(time.Time) + fieldTime := getValue(field.Convert(timeType)).(time.Time) + topTime := getValue(topField.Convert(timeType)).(time.Time) return fieldTime.After(topTime) || fieldTime.Equal(topTime) } @@ -1144,7 +1139,6 @@ func isGtCrossStructField(fl FieldLevel) bool { } switch kind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return field.Int() > topField.Int() @@ -1162,9 +1156,8 @@ func isGtCrossStructField(fl FieldLevel) bool { fieldType := field.Type() if fieldType.ConvertibleTo(timeType) && topField.Type().ConvertibleTo(timeType) { - - fieldTime := field.Convert(timeType).Interface().(time.Time) - topTime := topField.Convert(timeType).Interface().(time.Time) + fieldTime := getValue(field.Convert(timeType)).(time.Time) + topTime := getValue(topField.Convert(timeType)).(time.Time) return fieldTime.After(topTime) } @@ -1190,7 +1183,6 @@ func isNeCrossStructField(fl FieldLevel) bool { } switch kind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return topField.Int() != field.Int() @@ -1211,9 +1203,8 @@ func isNeCrossStructField(fl FieldLevel) bool { fieldType := field.Type() if fieldType.ConvertibleTo(timeType) && topField.Type().ConvertibleTo(timeType) { - - t := field.Convert(timeType).Interface().(time.Time) - fieldTime := topField.Convert(timeType).Interface().(time.Time) + t := getValue(field.Convert(timeType)).(time.Time) + fieldTime := getValue(topField.Convert(timeType)).(time.Time) return !fieldTime.Equal(t) } @@ -1239,7 +1230,6 @@ func isEqCrossStructField(fl FieldLevel) bool { } switch kind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return topField.Int() == field.Int() @@ -1260,9 +1250,8 @@ func isEqCrossStructField(fl FieldLevel) bool { fieldType := field.Type() if fieldType.ConvertibleTo(timeType) && topField.Type().ConvertibleTo(timeType) { - - t := field.Convert(timeType).Interface().(time.Time) - fieldTime := topField.Convert(timeType).Interface().(time.Time) + t := getValue(field.Convert(timeType)).(time.Time) + fieldTime := getValue(topField.Convert(timeType)).(time.Time) return fieldTime.Equal(t) } @@ -1288,7 +1277,6 @@ func isEqField(fl FieldLevel) bool { } switch kind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return field.Int() == currentField.Int() @@ -1309,9 +1297,8 @@ func isEqField(fl FieldLevel) bool { fieldType := field.Type() if fieldType.ConvertibleTo(timeType) && currentField.Type().ConvertibleTo(timeType) { - - t := currentField.Convert(timeType).Interface().(time.Time) - fieldTime := field.Convert(timeType).Interface().(time.Time) + t := getValue(currentField.Convert(timeType)).(time.Time) + fieldTime := getValue(field.Convert(timeType)).(time.Time) return fieldTime.Equal(t) } @@ -1332,7 +1319,6 @@ func isEq(fl FieldLevel) bool { param := fl.Param() switch field.Kind() { - case reflect.String: return field.String() == param @@ -1367,7 +1353,7 @@ func isEq(fl FieldLevel) bool { return field.Bool() == p } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isEqIgnoreCase is the validation function for validating if the current field's string value is @@ -1382,7 +1368,7 @@ func isEqIgnoreCase(fl FieldLevel) bool { return strings.EqualFold(field.String(), param) } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isPostcodeByIso3166Alpha2 validates by value which is country code in iso 3166 alpha 2 @@ -1416,7 +1402,7 @@ func isPostcodeByIso3166Alpha2Field(fl FieldLevel) bool { } if kind != reflect.String { - panic(fmt.Sprintf("Bad field type %T", currentField.Interface())) + panic(fmt.Sprintf("Bad field type %s", currentField.Type())) } postcodeRegexInit.Do(initPostcodes) @@ -1472,16 +1458,7 @@ func isURI(fl FieldLevel) bool { return err == nil } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) -} - -// isFileURL is the helper function for validating if the `path` valid file URL as per RFC8089 -func isFileURL(path string) bool { - if !strings.HasPrefix(path, "file:/") { - return false - } - _, err := url.ParseRequestURI(path) - return err == nil + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isURL is the validation function for validating if the current field's value is a valid URL. @@ -1497,23 +1474,20 @@ func isURL(fl FieldLevel) bool { return false } - if isFileURL(s) { - return true - } - url, err := url.Parse(s) if err != nil || url.Scheme == "" { return false } + isFileScheme := url.Scheme == "file" - if url.Host == "" && url.Fragment == "" && url.Opaque == "" { + if (isFileScheme && (len(url.Path) == 0 || url.Path == "/")) || (!isFileScheme && len(url.Host) == 0 && len(url.Fragment) == 0 && len(url.Opaque) == 0) { return false } return true } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isHttpURL is the validation function for validating if the current field's value is a valid HTTP(s) URL. @@ -1536,7 +1510,7 @@ func isHttpURL(fl FieldLevel) bool { return url.Scheme == "http" || url.Scheme == "https" } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isUrnRFC2141 is the validation function for validating if the current field's value is a valid URN as per RFC 2141. @@ -1553,7 +1527,7 @@ func isUrnRFC2141(fl FieldLevel) bool { return match } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isFile is the validation function for validating if the current field's value is a valid existing file path. @@ -1570,7 +1544,7 @@ func isFile(fl FieldLevel) bool { return !fileInfo.IsDir() } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isImage is the validation function for validating if the current field's value contains the path to a valid image file @@ -1632,7 +1606,8 @@ func isImage(fl FieldLevel) bool { return true } } - return false + + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isFilePath is the validation function for validating if the current field's value is a valid file path. @@ -1686,7 +1661,7 @@ func isFilePath(fl FieldLevel) bool { } } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isE164 is the validation function for validating if the current field's value is a valid e.164 formatted phone number. @@ -1796,7 +1771,7 @@ func hasValue(fl FieldLevel) bool { case reflect.Slice, reflect.Map, reflect.Ptr, reflect.Interface, reflect.Chan, reflect.Func: return !field.IsNil() default: - if fl.(*validate).fldIsPointer && field.Interface() != nil { + if fl.(*validate).fldIsPointer && getValue(field) != nil { return true } return field.IsValid() && !field.IsZero() @@ -1807,10 +1782,13 @@ func hasValue(fl FieldLevel) bool { func hasNotZeroValue(fl FieldLevel) bool { field := fl.Field() switch field.Kind() { - case reflect.Slice, reflect.Map, reflect.Ptr, reflect.Interface, reflect.Chan, reflect.Func: + case reflect.Slice, reflect.Map: + // For slices and maps, consider them "not zero" only if they're both non-nil AND have elements + return !field.IsNil() && field.Len() > 0 + case reflect.Ptr, reflect.Interface, reflect.Chan, reflect.Func: return !field.IsNil() default: - if fl.(*validate).fldIsPointer && field.Interface() != nil { + if fl.(*validate).fldIsPointer && getValue(field) != nil { return !field.IsZero() } return field.IsValid() && !field.IsZero() @@ -1834,7 +1812,7 @@ func requireCheckFieldKind(fl FieldLevel, param string, defaultNotFoundValue boo case reflect.Slice, reflect.Map, reflect.Ptr, reflect.Interface, reflect.Chan, reflect.Func: return field.IsNil() default: - if nullable && field.Interface() != nil { + if nullable && getValue(field) != nil { return false } return field.IsValid() && field.IsZero() @@ -1851,7 +1829,6 @@ func requireCheckFieldValue( } switch kind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return field.Int() == asInt(value) @@ -1864,7 +1841,13 @@ func requireCheckFieldValue( case reflect.Float64: return field.Float() == asFloat64(value) - case reflect.Slice, reflect.Map, reflect.Array: + case reflect.Slice, reflect.Map: + if value == "nil" { + return field.IsNil() + } + return int64(field.Len()) == asInt(value) + case reflect.Array: + // Arrays can't be nil, so only compare lengths return int64(field.Len()) == asInt(value) case reflect.Bool: @@ -2019,8 +2002,11 @@ func excludedWithout(fl FieldLevel) bool { // requiredWithout is the validation function // The field under validation must be present and not empty only when any of the other specified fields are not present. func requiredWithout(fl FieldLevel) bool { - if requireCheckFieldKind(fl, strings.TrimSpace(fl.Param()), true) { - return hasValue(fl) + params := parseOneOfParam2(fl.Param()) + for _, param := range params { + if requireCheckFieldKind(fl, param, true) { + return hasValue(fl) + } } return true } @@ -2060,7 +2046,6 @@ func isGteField(fl FieldLevel) bool { } switch kind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return field.Int() >= currentField.Int() @@ -2078,9 +2063,8 @@ func isGteField(fl FieldLevel) bool { fieldType := field.Type() if fieldType.ConvertibleTo(timeType) && currentField.Type().ConvertibleTo(timeType) { - - t := currentField.Convert(timeType).Interface().(time.Time) - fieldTime := field.Convert(timeType).Interface().(time.Time) + t := getValue(currentField.Convert(timeType)).(time.Time) + fieldTime := getValue(field.Convert(timeType)).(time.Time) return fieldTime.After(t) || fieldTime.Equal(t) } @@ -2106,7 +2090,6 @@ func isGtField(fl FieldLevel) bool { } switch kind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return field.Int() > currentField.Int() @@ -2124,9 +2107,8 @@ func isGtField(fl FieldLevel) bool { fieldType := field.Type() if fieldType.ConvertibleTo(timeType) && currentField.Type().ConvertibleTo(timeType) { - - t := currentField.Convert(timeType).Interface().(time.Time) - fieldTime := field.Convert(timeType).Interface().(time.Time) + t := getValue(currentField.Convert(timeType)).(time.Time) + fieldTime := getValue(field.Convert(timeType)).(time.Time) return fieldTime.After(t) } @@ -2147,7 +2129,6 @@ func isGte(fl FieldLevel) bool { param := fl.Param() switch field.Kind() { - case reflect.String: p := asInt(param) @@ -2181,15 +2162,14 @@ func isGte(fl FieldLevel) bool { case reflect.Struct: if field.Type().ConvertibleTo(timeType) { - now := time.Now().UTC() - t := field.Convert(timeType).Interface().(time.Time) + t := getValue(field.Convert(timeType)).(time.Time) return t.After(now) || t.Equal(now) } } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isGt is the validation function for validating if the current field's value is greater than the param's value. @@ -2198,7 +2178,6 @@ func isGt(fl FieldLevel) bool { param := fl.Param() switch field.Kind() { - case reflect.String: p := asInt(param) @@ -2232,11 +2211,11 @@ func isGt(fl FieldLevel) bool { case reflect.Struct: if field.Type().ConvertibleTo(timeType) { - return field.Convert(timeType).Interface().(time.Time).After(time.Now().UTC()) + return getValue(field.Convert(timeType)).(time.Time).After(time.Now().UTC()) } } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // hasLengthOf is the validation function for validating if the current field's value is equal to the param's value. @@ -2245,7 +2224,6 @@ func hasLengthOf(fl FieldLevel) bool { param := fl.Param() switch field.Kind() { - case reflect.String: p := asInt(param) @@ -2277,7 +2255,7 @@ func hasLengthOf(fl FieldLevel) bool { return field.Float() == p } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // hasMinOf is the validation function for validating if the current field's value is greater than or equal to the param's value. @@ -2296,7 +2274,6 @@ func isLteField(fl FieldLevel) bool { } switch kind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return field.Int() <= currentField.Int() @@ -2314,9 +2291,8 @@ func isLteField(fl FieldLevel) bool { fieldType := field.Type() if fieldType.ConvertibleTo(timeType) && currentField.Type().ConvertibleTo(timeType) { - - t := currentField.Convert(timeType).Interface().(time.Time) - fieldTime := field.Convert(timeType).Interface().(time.Time) + t := getValue(currentField.Convert(timeType)).(time.Time) + fieldTime := getValue(field.Convert(timeType)).(time.Time) return fieldTime.Before(t) || fieldTime.Equal(t) } @@ -2342,7 +2318,6 @@ func isLtField(fl FieldLevel) bool { } switch kind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return field.Int() < currentField.Int() @@ -2360,9 +2335,8 @@ func isLtField(fl FieldLevel) bool { fieldType := field.Type() if fieldType.ConvertibleTo(timeType) && currentField.Type().ConvertibleTo(timeType) { - - t := currentField.Convert(timeType).Interface().(time.Time) - fieldTime := field.Convert(timeType).Interface().(time.Time) + t := getValue(currentField.Convert(timeType)).(time.Time) + fieldTime := getValue(field.Convert(timeType)).(time.Time) return fieldTime.Before(t) } @@ -2383,7 +2357,6 @@ func isLte(fl FieldLevel) bool { param := fl.Param() switch field.Kind() { - case reflect.String: p := asInt(param) @@ -2417,15 +2390,14 @@ func isLte(fl FieldLevel) bool { case reflect.Struct: if field.Type().ConvertibleTo(timeType) { - now := time.Now().UTC() - t := field.Convert(timeType).Interface().(time.Time) + t := getValue(field.Convert(timeType)).(time.Time) return t.Before(now) || t.Equal(now) } } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isLt is the validation function for validating if the current field's value is less than the param's value. @@ -2434,7 +2406,6 @@ func isLt(fl FieldLevel) bool { param := fl.Param() switch field.Kind() { - case reflect.String: p := asInt(param) @@ -2468,11 +2439,11 @@ func isLt(fl FieldLevel) bool { case reflect.Struct: if field.Type().ConvertibleTo(timeType) { - return field.Convert(timeType).Interface().(time.Time).Before(time.Now().UTC()) + return getValue(field.Convert(timeType)).(time.Time).Before(time.Now().UTC()) } } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // hasMaxOf is the validation function for validating if the current field's value is less than or equal to the param's value. @@ -2642,7 +2613,7 @@ func isDir(fl FieldLevel) bool { return fileInfo.IsDir() } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isDirPath is the validation function for validating if the current field's value is a valid directory. @@ -2699,7 +2670,7 @@ func isDirPath(fl FieldLevel) bool { } } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isJSON is the validation function for validating if the current field's value is a valid json string. @@ -2714,12 +2685,12 @@ func isJSON(fl FieldLevel) bool { fieldType := field.Type() if fieldType.ConvertibleTo(byteSliceType) { - b := field.Convert(byteSliceType).Interface().([]byte) + b := getValue(field.Convert(byteSliceType)).([]byte) return json.Valid(b) } } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isJWT is the validation function for validating if the current field's value is a valid JWT string. @@ -2766,7 +2737,7 @@ func isLowercase(fl FieldLevel) bool { return field.String() == strings.ToLower(field.String()) } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isUppercase is the validation function for validating if the current field's value is an uppercase string. @@ -2780,7 +2751,7 @@ func isUppercase(fl FieldLevel) bool { return field.String() == strings.ToUpper(field.String()) } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isDatetime is the validation function for validating if the current field's value is a valid datetime string. @@ -2794,7 +2765,7 @@ func isDatetime(fl FieldLevel) bool { return err == nil } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isTimeZone is the validation function for validating if the current field's value is a valid time zone string. @@ -2816,7 +2787,7 @@ func isTimeZone(fl FieldLevel) bool { return err == nil } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isIso3166Alpha2 is the validation function for validating if the current field's value is a valid iso3166-1 alpha-2 country code. @@ -2860,7 +2831,7 @@ func isIso3166AlphaNumeric(fl FieldLevel) bool { case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: code = int(field.Uint() % 1000) default: - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } _, ok := iso3166_1_alpha_numeric[code] @@ -2884,7 +2855,7 @@ func isIso3166AlphaNumericEU(fl FieldLevel) bool { case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: code = int(field.Uint() % 1000) default: - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } _, ok := iso3166_1_alpha_numeric_eu[code] @@ -2914,7 +2885,7 @@ func isIso4217Numeric(fl FieldLevel) bool { case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: code = int(field.Uint()) default: - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } _, ok := iso4217_numeric[code] @@ -2930,7 +2901,7 @@ func isBCP47LanguageTag(fl FieldLevel) bool { return err == nil } - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } // isIsoBicFormat is the validation function for validating if the current field's value is a valid Business Identifier Code (SWIFT code), defined in ISO 9362 @@ -3053,7 +3024,7 @@ func hasLuhnChecksum(fl FieldLevel) bool { case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: str = strconv.FormatUint(field.Uint(), 10) default: - panic(fmt.Sprintf("Bad field type %T", field.Interface())) + panic(fmt.Sprintf("Bad field type %s", field.Type())) } size := len(str) if size < 2 { // there has to be at least one digit that carries a meaning + the checksum @@ -3079,3 +3050,60 @@ func isEIN(fl FieldLevel) bool { return einRegex().MatchString(field.String()) } + +func isValidateFn(fl FieldLevel) bool { + const defaultParam = `Validate` + + field := fl.Field() + validateFn := cmp.Or(fl.Param(), defaultParam) + + ok, err := tryCallValidateFn(field, validateFn) + if err != nil { + return false + } + + return ok +} + +var ( + errMethodNotFound = errors.New(`method not found`) + errMethodReturnNoValues = errors.New(`method return o values (void)`) + errMethodReturnInvalidType = errors.New(`method should return invalid type`) +) + +func tryCallValidateFn(field reflect.Value, validateFn string) (bool, error) { + method := field.MethodByName(validateFn) + if field.CanAddr() && !method.IsValid() { + method = field.Addr().MethodByName(validateFn) + } + + if !method.IsValid() { + return false, fmt.Errorf("unable to call %q on type %q: %w", + validateFn, field.Type().String(), errMethodNotFound) + } + + returnValues := method.Call([]reflect.Value{}) + if len(returnValues) == 0 { + return false, fmt.Errorf("unable to use result of method %q on type %q: %w", + validateFn, field.Type().String(), errMethodReturnNoValues) + } + + firstReturnValue := returnValues[0] + + switch firstReturnValue.Kind() { + case reflect.Bool: + return firstReturnValue.Bool(), nil + case reflect.Interface: + errorType := reflect.TypeOf((*error)(nil)).Elem() + + if firstReturnValue.Type().Implements(errorType) { + return firstReturnValue.IsNil(), nil + } + + return false, fmt.Errorf("unable to use result of method %q on type %q: %w (got interface %v expect error)", + validateFn, field.Type().String(), errMethodReturnInvalidType, firstReturnValue.Type().String()) + default: + return false, fmt.Errorf("unable to use result of method %q on type %q: %w (got %v expect error or bool)", + validateFn, field.Type().String(), errMethodReturnInvalidType, firstReturnValue.Type().String()) + } +} diff --git a/vendor/github.com/go-playground/validator/v10/cache.go b/vendor/github.com/go-playground/validator/v10/cache.go index 41d40bf..fb101b0 100644 --- a/vendor/github.com/go-playground/validator/v10/cache.go +++ b/vendor/github.com/go-playground/validator/v10/cache.go @@ -124,7 +124,6 @@ func (v *Validate) extractStructCache(current reflect.Value, sName string) *cStr var customName string for i := 0; i < numFields; i++ { - fld = typ.Field(i) if !v.privateFieldValidation && !fld.Anonymous && len(fld.PkgPath) > 0 { @@ -191,7 +190,6 @@ func (v *Validate) parseFieldTagsRecursive(tag string, fieldName string, alias s } else { next, curr := v.parseFieldTagsRecursive(tagsVal, fieldName, t, true) current.next, current = next, curr - } continue } @@ -210,7 +208,6 @@ func (v *Validate) parseFieldTagsRecursive(tag string, fieldName string, alias s switch t { case diveTag: current.typeof = typeDive - continue case keysTag: current.typeof = typeKeys @@ -219,8 +216,6 @@ func (v *Validate) parseFieldTagsRecursive(tag string, fieldName string, alias s panic(fmt.Sprintf("'%s' tag must be immediately preceded by the '%s' tag", keysTag, diveTag)) } - current.typeof = typeKeys - // need to pass along only keys tag // need to increment i to skip over the keys tags b := make([]byte, 0, 64) @@ -228,7 +223,6 @@ func (v *Validate) parseFieldTagsRecursive(tag string, fieldName string, alias s i++ for ; i < len(tags); i++ { - b = append(b, tags[i]...) b = append(b, ',') @@ -238,7 +232,6 @@ func (v *Validate) parseFieldTagsRecursive(tag string, fieldName string, alias s } current.keys, _ = v.parseFieldTagsRecursive(string(b[:len(b)-1]), fieldName, "", false) - continue case endKeysTag: current.typeof = typeEndKeys @@ -256,19 +249,15 @@ func (v *Validate) parseFieldTagsRecursive(tag string, fieldName string, alias s case omitempty: current.typeof = typeOmitEmpty - continue case omitnil: current.typeof = typeOmitNil - continue case structOnlyTag: current.typeof = typeStructOnly - continue case noStructLevelTag: current.typeof = typeNoStructLevel - continue default: if t == isdefault { diff --git a/vendor/github.com/go-playground/validator/v10/doc.go b/vendor/github.com/go-playground/validator/v10/doc.go index e7a241f..23cce99 100644 --- a/vendor/github.com/go-playground/validator/v10/doc.go +++ b/vendor/github.com/go-playground/validator/v10/doc.go @@ -188,7 +188,7 @@ Same as structonly tag except that any struct level validations will not run. # Omit Empty -Allows conditional validation, for example if a field is not set with +Allows conditional validation, for example, if a field is not set with a value (Determined by the "required" validator) then other validation such as min or max won't run, but if a value is set validation will run. @@ -756,6 +756,20 @@ in a field of the struct specified via a parameter. // For slices of struct: Usage: unique=field +# ValidateFn + +This validates that an object responds to a method that can return error or bool. +By default it expects an interface `Validate() error` and check that the method +does not return an error. Other methods can be specified using two signatures: +If the method returns an error, it check if the return value is nil. +If the method returns a boolean, it checks if the value is true. + + // to use the default method Validate() error + Usage: validateFn + + // to use the custom method IsValid() bool (or error) + Usage: validateFn=IsValid + # Alpha Only This validates that a string value contains ASCII alpha characters only diff --git a/vendor/github.com/go-playground/validator/v10/errors.go b/vendor/github.com/go-playground/validator/v10/errors.go index be2676e..fd90625 100644 --- a/vendor/github.com/go-playground/validator/v10/errors.go +++ b/vendor/github.com/go-playground/validator/v10/errors.go @@ -24,7 +24,6 @@ type InvalidValidationError struct { // Error returns InvalidValidationError message func (e *InvalidValidationError) Error() string { - if e.Type == nil { return "validator: (nil)" } @@ -41,11 +40,9 @@ type ValidationErrors []FieldError // All information to create an error message specific to your application is contained within // the FieldError found within the ValidationErrors array func (ve ValidationErrors) Error() string { - buff := bytes.NewBufferString("") for i := 0; i < len(ve); i++ { - buff.WriteString(ve[i].Error()) buff.WriteString("\n") } @@ -55,7 +52,6 @@ func (ve ValidationErrors) Error() string { // Translate translates all of the ValidationErrors func (ve ValidationErrors) Translate(ut ut.Translator) ValidationErrorsTranslations { - trans := make(ValidationErrorsTranslations) var fe *fieldError @@ -109,22 +105,24 @@ type FieldError interface { // StructNamespace returns the namespace for the field error, with the field's // actual name. // - // eq. "User.FirstName" see Namespace for comparison + // eg. "User.FirstName" see Namespace for comparison // // NOTE: this field can be blank when validating a single primitive field // using validate.Field(...) as there is no way to extract its name StructNamespace() string - // Field returns the fields name with the tag name taking precedence over the + // Field returns the field's name with the tag name taking precedence over the // field's actual name. // - // eq. JSON name "fname" + // `RegisterTagNameFunc` must be registered to get tag value. + // + // eg. JSON name "fname" // see StructField for comparison Field() string // StructField returns the field's actual name from the struct, when able to determine. // - // eq. "FirstName" + // eg. "FirstName" // see Field for comparison StructField() string @@ -204,7 +202,6 @@ func (fe *fieldError) StructNamespace() string { // Field returns the field's name with the tag name taking precedence over the // field's actual name. func (fe *fieldError) Field() string { - return fe.ns[len(fe.ns)-int(fe.fieldLen):] // // return fe.field // fld := fe.ns[len(fe.ns)-int(fe.fieldLen):] diff --git a/vendor/github.com/go-playground/validator/v10/struct_level.go b/vendor/github.com/go-playground/validator/v10/struct_level.go index fa7af9d..129b287 100644 --- a/vendor/github.com/go-playground/validator/v10/struct_level.go +++ b/vendor/github.com/go-playground/validator/v10/struct_level.go @@ -107,7 +107,6 @@ func (v *validate) ExtractType(field reflect.Value) (reflect.Value, reflect.Kind // ReportError reports an error just by passing the field and tag information func (v *validate) ReportError(field interface{}, fieldName, structFieldName, tag, param string) { - fv, kind, _ := v.extractTypeInternal(reflect.ValueOf(field), false) if len(structFieldName) == 0 { @@ -123,7 +122,6 @@ func (v *validate) ReportError(field interface{}, fieldName, structFieldName, ta } if kind == reflect.Invalid { - v.errs = append(v.errs, &fieldError{ v: v.v, @@ -149,7 +147,7 @@ func (v *validate) ReportError(field interface{}, fieldName, structFieldName, ta structNs: v.str2, fieldLen: uint8(len(fieldName)), structfieldLen: uint8(len(structFieldName)), - value: fv.Interface(), + value: getValue(fv), param: param, kind: kind, typ: fv.Type(), @@ -161,11 +159,9 @@ func (v *validate) ReportError(field interface{}, fieldName, structFieldName, ta // // NOTE: this function prepends the current namespace to the relative ones. func (v *validate) ReportValidationErrors(relativeNamespace, relativeStructNamespace string, errs ValidationErrors) { - var err *fieldError for i := 0; i < len(errs); i++ { - err = errs[i].(*fieldError) err.ns = string(append(append(v.ns, relativeNamespace...), err.ns...)) err.structNs = string(append(append(v.actualNs, relativeStructNamespace...), err.structNs...)) diff --git a/vendor/github.com/go-playground/validator/v10/util.go b/vendor/github.com/go-playground/validator/v10/util.go index 9285223..b1fd8cc 100644 --- a/vendor/github.com/go-playground/validator/v10/util.go +++ b/vendor/github.com/go-playground/validator/v10/util.go @@ -13,7 +13,6 @@ import ( // It will dive into pointers, customTypes and return you the // underlying value and it's kind. func (v *validate) extractTypeInternal(current reflect.Value, nullable bool) (reflect.Value, reflect.Kind, bool) { - BEGIN: switch current.Kind() { case reflect.Ptr: @@ -44,7 +43,6 @@ BEGIN: default: if v.v.hasCustomFuncs { - if fn, ok := v.v.customFuncs[current.Type()]; ok { current = reflect.ValueOf(fn(current)) goto BEGIN @@ -61,7 +59,6 @@ BEGIN: // NOTE: when not successful ok will be false, this can happen when a nested struct is nil and so the field // could not be retrieved because it didn't exist. func (v *validate) getStructFieldOKInternal(val reflect.Value, namespace string) (current reflect.Value, kind reflect.Kind, nullable bool, found bool) { - BEGIN: current, kind, nullable = v.ExtractType(val) if kind == reflect.Invalid { @@ -74,7 +71,6 @@ BEGIN: } switch kind { - case reflect.Ptr, reflect.Interface: return @@ -85,7 +81,6 @@ BEGIN: var ns string if !typ.ConvertibleTo(timeType) { - idx := strings.Index(namespace, namespaceSeparator) if idx != -1 { @@ -222,7 +217,7 @@ BEGIN: panic("Invalid field namespace") } -// asInt returns the parameter as a int64 +// asInt returns the parameter as an int64 // or panics if it can't convert func asInt(param string) int64 { i, err := strconv.ParseInt(param, 0, 64) @@ -256,7 +251,6 @@ func asIntFromType(t reflect.Type, param string) int64 { // asUint returns the parameter as a uint64 // or panics if it can't convert func asUint(param string) uint64 { - i, err := strconv.ParseUint(param, 0, 64) panicIf(err) @@ -282,7 +276,6 @@ func asFloat32(param string) float64 { // asBool returns the parameter as a bool // or panics if it can't convert func asBool(param string) bool { - i, err := strconv.ParseBool(param) panicIf(err) @@ -303,7 +296,7 @@ func fieldMatchesRegexByStringerValOrString(regexFn func() *regexp.Regexp, fl Fi case reflect.String: return regex.MatchString(fl.Field().String()) default: - if stringer, ok := fl.Field().Interface().(fmt.Stringer); ok { + if stringer, ok := getValue(fl.Field()).(fmt.Stringer); ok { return regex.MatchString(stringer.String()) } else { return regex.MatchString(fl.Field().String()) diff --git a/vendor/github.com/go-playground/validator/v10/validator.go b/vendor/github.com/go-playground/validator/v10/validator.go index d7c2e65..995b0e1 100644 --- a/vendor/github.com/go-playground/validator/v10/validator.go +++ b/vendor/github.com/go-playground/validator/v10/validator.go @@ -32,14 +32,12 @@ type validate struct { // parent and current will be the same the first run of validateStruct func (v *validate) validateStruct(ctx context.Context, parent reflect.Value, current reflect.Value, typ reflect.Type, ns []byte, structNs []byte, ct *cTag) { - cs, ok := v.v.structCache.Get(typ) if !ok { cs = v.v.extractStructCache(current, typ.Name()) } if len(ns) == 0 && len(cs.name) != 0 { - ns = append(ns, cs.name...) ns = append(ns, '.') @@ -50,21 +48,17 @@ func (v *validate) validateStruct(ctx context.Context, parent reflect.Value, cur // ct is nil on top level struct, and structs as fields that have no tag info // so if nil or if not nil and the structonly tag isn't present if ct == nil || ct.typeof != typeStructOnly { - var f *cField for i := 0; i < len(cs.fields); i++ { - f = cs.fields[i] if v.isPartial { - if v.ffn != nil { // used with StructFiltered if v.ffn(append(structNs, f.name...)) { continue } - } else { // used with StructPartial & StructExcept _, ok = v.includeExclude[string(append(structNs, f.name...))] @@ -83,7 +77,6 @@ func (v *validate) validateStruct(ctx context.Context, parent reflect.Value, cur // first iteration will have no info about nostructlevel tag, and is checked prior to // calling the next iteration of validateStruct called from traverseField. if cs.fn != nil { - v.slflParent = parent v.slCurrent = current v.ns = ns @@ -267,7 +260,7 @@ OUTER: return } default: - if v.fldIsPointer && field.Interface() == nil { + if v.fldIsPointer && getValue(field) == nil { return } } @@ -291,7 +284,6 @@ OUTER: reusableCF := &cField{} for i := 0; i < current.Len(); i++ { - i64 = int64(i) v.misc = append(v.misc[0:0], cf.name...) @@ -304,7 +296,6 @@ OUTER: if cf.namesEqual { reusableCF.altName = reusableCF.name } else { - v.misc = append(v.misc[0:0], cf.altName...) v.misc = append(v.misc, '[') v.misc = strconv.AppendInt(v.misc, i64, 10) @@ -321,8 +312,7 @@ OUTER: reusableCF := &cField{} for _, key := range current.MapKeys() { - - pv = fmt.Sprintf("%v", key.Interface()) + pv = fmt.Sprintf("%v", key) v.misc = append(v.misc[0:0], cf.name...) v.misc = append(v.misc, '[') @@ -347,6 +337,18 @@ OUTER: // can be nil when just keys being validated if ct.next != nil { v.traverseField(ctx, parent, current.MapIndex(key), ns, structNs, reusableCF, ct.next) + } else { + // Struct fallback when map values are structs + val := current.MapIndex(key) + switch val.Kind() { + case reflect.Ptr: + if val.Elem().Kind() == reflect.Struct { + // Dive into the struct so its own tags run + v.traverseField(ctx, parent, val, ns, structNs, reusableCF, nil) + } + case reflect.Struct: + v.traverseField(ctx, parent, val, ns, structNs, reusableCF, nil) + } } } else { v.traverseField(ctx, parent, current.MapIndex(key), ns, structNs, reusableCF, ct) @@ -366,7 +368,6 @@ OUTER: v.misc = v.misc[0:0] for { - // set Field Level fields v.slflParent = parent v.flField = current @@ -381,7 +382,6 @@ OUTER: // drain rest of the 'or' values, then continue or leave for { - ct = ct.next if ct == nil { @@ -418,7 +418,6 @@ OUTER: } if ct.hasAlias { - v.errs = append(v.errs, &fieldError{ v: v.v, @@ -434,9 +433,7 @@ OUTER: typ: typ, }, ) - } else { - tVal := string(v.misc)[1:] v.errs = append(v.errs, @@ -500,7 +497,6 @@ OUTER: ct = ct.next } } - } func getValue(val reflect.Value) interface{} { diff --git a/vendor/github.com/go-playground/validator/v10/validator_instance.go b/vendor/github.com/go-playground/validator/v10/validator_instance.go index 779f689..9362cd7 100644 --- a/vendor/github.com/go-playground/validator/v10/validator_instance.go +++ b/vendor/github.com/go-playground/validator/v10/validator_instance.go @@ -104,7 +104,6 @@ type Validate struct { // in essence only parsing your validation tags once per struct type. // Using multiple instances neglects the benefit of caching. func New(options ...Option) *Validate { - tc := new(tagCache) tc.m.Store(make(map[string]*cTag)) @@ -126,7 +125,6 @@ func New(options ...Option) *Validate { // must copy validators for separate validations to be used in each instance for k, val := range bakedInValidators { - switch k { // these require that even if the value is nil that the validation should run, omitempty still overrides this behaviour case requiredIfTag, requiredUnlessTag, requiredWithTag, requiredWithAllTag, requiredWithoutTag, requiredWithoutAllTag, @@ -233,30 +231,12 @@ func (v *Validate) RegisterValidationCtx(tag string, fn FuncCtx, callValidationE return v.registerValidation(tag, fn, false, nilCheckable) } -func (v *Validate) registerValidation(tag string, fn FuncCtx, bakedIn bool, nilCheckable bool) error { - if len(tag) == 0 { - return errors.New("function Key cannot be empty") - } - - if fn == nil { - return errors.New("function cannot be empty") - } - - _, ok := restrictedTags[tag] - if !bakedIn && (ok || strings.ContainsAny(tag, restrictedTagChars)) { - panic(fmt.Sprintf(restrictedTagErr, tag)) - } - v.validations[tag] = internalValidationFuncWrapper{fn: fn, runValidationOnNil: nilCheckable} - return nil -} - // RegisterAlias registers a mapping of a single validation tag that // defines a common or complex set of validation(s) to simplify adding validation // to structs. // // NOTE: this function is not thread-safe it is intended that these all be registered prior to any validation func (v *Validate) RegisterAlias(alias, tags string) { - _, ok := restrictedTags[alias] if ok || strings.ContainsAny(alias, restrictedTagChars) { @@ -280,7 +260,6 @@ func (v *Validate) RegisterStructValidation(fn StructLevelFunc, types ...interfa // NOTE: // - this method is not thread-safe it is intended that these all be registered prior to any validation func (v *Validate) RegisterStructValidationCtx(fn StructLevelFuncCtx, types ...interface{}) { - if v.structLevelFuncs == nil { v.structLevelFuncs = make(map[reflect.Type]StructLevelFuncCtx) } @@ -327,7 +306,6 @@ func (v *Validate) RegisterStructValidationMapRules(rules map[string]string, typ // // NOTE: this method is not thread-safe it is intended that these all be registered prior to any validation func (v *Validate) RegisterCustomTypeFunc(fn CustomTypeFunc, types ...interface{}) { - if v.customFuncs == nil { v.customFuncs = make(map[reflect.Type]CustomTypeFunc) } @@ -341,7 +319,6 @@ func (v *Validate) RegisterCustomTypeFunc(fn CustomTypeFunc, types ...interface{ // RegisterTranslation registers translations against the provided tag. func (v *Validate) RegisterTranslation(tag string, trans ut.Translator, registerFn RegisterTranslationsFunc, translationFn TranslationFunc) (err error) { - if v.transTagFunc == nil { v.transTagFunc = make(map[ut.Translator]map[string]TranslationFunc) } @@ -375,7 +352,6 @@ func (v *Validate) Struct(s interface{}) error { // It returns InvalidValidationError for bad values passed in and nil or ValidationErrors as error otherwise. // You will need to assert the error if it's not nil eg. err.(validator.ValidationErrors) to access the array of errors. func (v *Validate) StructCtx(ctx context.Context, s interface{}) (err error) { - val := reflect.ValueOf(s) top := val @@ -492,10 +468,8 @@ func (v *Validate) StructPartialCtx(ctx context.Context, s interface{}, fields . name := typ.Name() for _, k := range fields { - flds := strings.Split(k, namespaceSeparator) if len(flds) > 0 { - vd.misc = append(vd.misc[0:0], name...) // Don't append empty name for unnamed structs if len(vd.misc) != 0 { @@ -503,7 +477,6 @@ func (v *Validate) StructPartialCtx(ctx context.Context, s interface{}, fields . } for _, s := range flds { - idx := strings.Index(s, leftBracket) if idx != -1 { @@ -519,7 +492,6 @@ func (v *Validate) StructPartialCtx(ctx context.Context, s interface{}, fields . idx = strings.Index(s, leftBracket) } } else { - vd.misc = append(vd.misc, s...) vd.includeExclude[string(vd.misc)] = struct{}{} } @@ -582,7 +554,6 @@ func (v *Validate) StructExceptCtx(ctx context.Context, s interface{}, fields .. name := typ.Name() for _, key := range fields { - vd.misc = vd.misc[0:0] if len(name) > 0 { @@ -709,3 +680,20 @@ func (v *Validate) VarWithValueCtx(ctx context.Context, field interface{}, other v.pool.Put(vd) return } + +func (v *Validate) registerValidation(tag string, fn FuncCtx, bakedIn bool, nilCheckable bool) error { + if len(tag) == 0 { + return errors.New("function Key cannot be empty") + } + + if fn == nil { + return errors.New("function cannot be empty") + } + + _, ok := restrictedTags[tag] + if !bakedIn && (ok || strings.ContainsAny(tag, restrictedTagChars)) { + panic(fmt.Sprintf(restrictedTagErr, tag)) + } + v.validations[tag] = internalValidationFuncWrapper{fn: fn, runValidationOnNil: nilCheckable} + return nil +} diff --git a/vendor/github.com/goccy/go-yaml/.codecov.yml b/vendor/github.com/goccy/go-yaml/.codecov.yml new file mode 100644 index 0000000..8364eea --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/.codecov.yml @@ -0,0 +1,31 @@ +codecov: + require_ci_to_pass: yes + +coverage: + precision: 2 + round: down + range: "70...100" + + status: + project: + default: + target: 75% + threshold: 2% + patch: off + changes: no + +parsers: + gcov: + branch_detection: + conditional: yes + loop: yes + method: no + macro: no + +comment: + layout: "header,diff" + behavior: default + require_changes: no + +ignore: + - ast diff --git a/vendor/github.com/goccy/go-yaml/.gitignore b/vendor/github.com/goccy/go-yaml/.gitignore new file mode 100644 index 0000000..47952bd --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/.gitignore @@ -0,0 +1,3 @@ +bin/ +.idea/ +cover.out diff --git a/vendor/github.com/goccy/go-yaml/.golangci.yml b/vendor/github.com/goccy/go-yaml/.golangci.yml new file mode 100644 index 0000000..05675c8 --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/.golangci.yml @@ -0,0 +1,65 @@ +version: "2" +linters: + default: none + enable: + - errcheck + - govet + - ineffassign + - misspell + - perfsprint + - staticcheck + - unused + settings: + errcheck: + without_tests: true + govet: + disable: + - tests + misspell: + locale: US + perfsprint: + int-conversion: false + err-error: false + errorf: true + sprintf1: false + strconcat: false + staticcheck: + checks: + - -ST1000 + - -ST1005 + - all + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + rules: + - linters: + - staticcheck + path: _test\.go + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + enable: + - gci + - gofmt + settings: + gci: + sections: + - standard + - default + - prefix(github.com/goccy/go-yaml) + - blank + - dot + gofmt: + simplify: true + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/vendor/github.com/goccy/go-yaml/CHANGELOG.md b/vendor/github.com/goccy/go-yaml/CHANGELOG.md new file mode 100644 index 0000000..c8f820d --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/CHANGELOG.md @@ -0,0 +1,186 @@ +# 1.11.2 - 2023-09-15 + +### Fix bugs + +- Fix quoted comments ( #370 ) +- Fix handle of space at start or last ( #376 ) +- Fix sequence with comment ( #390 ) + +# 1.11.1 - 2023-09-14 + +### Fix bugs + +- Handle `\r` in a double-quoted string the same as `\n` ( #372 ) +- Replace loop with n.Values = append(n.Values, target.Values...) ( #380 ) +- Skip encoding an inline field if it is null ( #386 ) +- Fix comment parsing with null value ( #388 ) + +# 1.11.0 - 2023-04-03 + +### Features + +- Supports dynamically switch encode and decode processing for a given type + +# 1.10.1 - 2023-03-28 + +### Features + +- Quote YAML 1.1 bools at encoding time for compatibility with other legacy parsers +- Add support of 32-bit architecture + +### Fix bugs + +- Don't trim all space characters in block style sequence +- Support strings starting with `@` + +# 1.10.0 - 2023-03-01 + +### Fix bugs + +Reversible conversion of comments was not working in various cases, which has been corrected. +**Breaking Change** exists in the comment map interface. However, if you are dealing with CommentMap directly, there is no problem. + + +# 1.9.8 - 2022-12-19 + +### Fix feature + +- Append new line at the end of file ( #329 ) + +### Fix bugs + +- Fix custom marshaler ( #333, #334 ) +- Fix behavior when struct fields conflicted( #335 ) +- Fix position calculation for literal, folded and raw folded strings ( #330 ) + +# 1.9.7 - 2022-12-03 + +### Fix bugs + +- Fix handling of quoted map key ( #328 ) +- Fix resusing process of scanning context ( #322 ) + +## v1.9.6 - 2022-10-26 + +### New Features + +- Introduce MapKeyNode interface to limit node types for map key ( #312 ) + +### Fix bugs + +- Quote strings with special characters in flow mode ( #270 ) +- typeError implements PrettyPrinter interface ( #280 ) +- Fix incorrect const type ( #284 ) +- Fix large literals type inference on 32 bits ( #293 ) +- Fix UTF-8 characters ( #294 ) +- Fix decoding of unknown aliases ( #317 ) +- Fix stream encoder for insert a separator between each encoded document ( #318 ) + +### Update + +- Update golang.org/x/sys ( #289 ) +- Update Go version in CI ( #295 ) +- Add test cases for missing keys to struct literals ( #300 ) + +## v1.9.5 - 2022-01-12 + +### New Features + +* Add UseSingleQuote option ( #265 ) + +### Fix bugs + +* Preserve defaults while decoding nested structs ( #260 ) +* Fix minor typo in decodeInit error ( #264 ) +* Handle empty sequence entries ( #275 ) +* Fix encoding of sequence with multiline string ( #276 ) +* Fix encoding of BytesMarshaler type ( #277 ) +* Fix indentState logic for multi-line value ( #278 ) + +## v1.9.4 - 2021-10-12 + +### Fix bugs + +* Keep prev/next reference between tokens containing comments when filtering comment tokens ( #257 ) +* Supports escaping reserved keywords in PathBuilder ( #258 ) + +## v1.9.3 - 2021-09-07 + +### New Features + +* Support encoding and decoding `time.Duration` fields ( #246 ) +* Allow reserved characters for key name in YAMLPath ( #251 ) +* Support getting YAMLPath from ast.Node ( #252 ) +* Support CommentToMap option ( #253 ) + +### Fix bugs + +* Fix encoding nested sequences with `yaml.IndentSequence` ( #241 ) +* Fix error reporting on inline structs in strict mode ( #244, #245 ) +* Fix encoding of large floats ( #247 ) + +### Improve workflow + +* Migrate CI from CircleCI to GitHub Action ( #249 ) +* Add workflow for ycat ( #250 ) + +## v1.9.2 - 2021-07-26 + +### Support WithComment option ( #238 ) + +`yaml.WithComment` is a option for encoding with comment. +The position where you want to add a comment is represented by YAMLPath, and it is the key of `yaml.CommentMap`. +Also, you can select `Head` comment or `Line` comment as the comment type. + +## v1.9.1 - 2021-07-20 + +### Fix DecodeFromNode ( #237 ) + +- Fix YAML handling where anchor exists + +## v1.9.0 - 2021-07-19 + +### New features + +- Support encoding of comment node ( #233 ) +- Support `yaml.NodeToValue(ast.Node, interface{}, ...DecodeOption) error` ( #236 ) + - Can convert a AST node to a value directly + +### Fix decoder for comment + +- Fix parsing of literal with comment ( #234 ) + +### Rename API ( #235 ) + +- Rename `MarshalWithContext` to `MarshalContext` +- Rename `UnmarshalWithContext` to `UnmarshalContext` + +## v1.8.10 - 2021-07-02 + +### Fixed bugs + +- Fix searching anchor by alias name ( #212 ) +- Fixing Issue 186, scanner should account for newline characters when processing multi-line text. Without this source annotations line/column number (for this and all subsequent tokens) is inconsistent with plain text editors. e.g. https://github.com/goccy/go-yaml/issues/186. This addresses the issue specifically for single and double quote text only. ( #210 ) +- Add error for unterminated flow mapping node ( #213 ) +- Handle missing required field validation ( #221 ) +- Nicely format unexpected node type errors ( #229 ) +- Support to encode map which has defined type key ( #231 ) + +### New features + +- Support sequence indentation by EncodeOption ( #232 ) + +## v1.8.9 - 2021-03-01 + +### Fixed bugs + +- Fix origin buffer for DocumentHeader and DocumentEnd and Directive +- Fix origin buffer for anchor value +- Fix syntax error about map value +- Fix parsing MergeKey ('<<') characters +- Fix encoding of float value +- Fix incorrect column annotation when single or double quotes are used + +### New features + +- Support to encode/decode of ast.Node directly diff --git a/vendor/github.com/goccy/go-yaml/LICENSE b/vendor/github.com/goccy/go-yaml/LICENSE new file mode 100644 index 0000000..04485ce --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Masaaki Goshima + +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/goccy/go-yaml/Makefile b/vendor/github.com/goccy/go-yaml/Makefile new file mode 100644 index 0000000..5993616 --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/Makefile @@ -0,0 +1,55 @@ +## Location to install dependencies to +LOCALBIN ?= $(shell pwd)/bin +TESTMOD := testdata/go_test.mod + +$(LOCALBIN): + mkdir -p $(LOCALBIN) + +.PHONY: test +test: + go test -v -race ./... + go test -v -race ./testdata -modfile=$(TESTMOD) + +.PHONY: simple-test +simple-test: + go test -v ./... + go test -v ./testdata -modfile=$(TESTMOD) + +.PHONY: fuzz +fuzz: + go test -fuzz=Fuzz -fuzztime 60s + +.PHONY: cover +cover: + go test -coverpkg=.,./ast,./lexer,./parser,./printer,./scanner,./token -coverprofile=cover.out -modfile=$(TESTMOD) ./... ./testdata + +.PHONY: cover-html +cover-html: cover + go tool cover -html=cover.out + +.PHONY: ycat/build +ycat/build: $(LOCALBIN) + cd ./cmd/ycat && go build -o $(LOCALBIN)/ycat . + +.PHONY: lint +lint: golangci-lint ## Run golangci-lint + @$(GOLANGCI_LINT) run + +.PHONY: fmt +fmt: golangci-lint ## Ensure consistent code style + @go mod tidy + @go fmt ./... + @$(GOLANGCI_LINT) run --fix + +## Tool Binaries +GOLANGCI_LINT ?= $(LOCALBIN)/golangci-lint + +## Tool Versions +GOLANGCI_VERSION := 2.1.2 + +.PHONY: golangci-lint +.PHONY: $(GOLANGCI_LINT) +golangci-lint: $(GOLANGCI_LINT) ## Download golangci-lint locally if necessary. +$(GOLANGCI_LINT): $(LOCALBIN) + @test -s $(LOCALBIN)/golangci-lint && $(LOCALBIN)/golangci-lint version --short | grep -q $(GOLANGCI_VERSION) || \ + curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(LOCALBIN) v$(GOLANGCI_VERSION) diff --git a/vendor/github.com/goccy/go-yaml/README.md b/vendor/github.com/goccy/go-yaml/README.md new file mode 100644 index 0000000..d5ac5b7 --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/README.md @@ -0,0 +1,420 @@ +# YAML support for the Go language + +[![PkgGoDev](https://pkg.go.dev/badge/github.com/goccy/go-yaml)](https://pkg.go.dev/github.com/goccy/go-yaml) +![Go](https://github.com/goccy/go-yaml/workflows/Go/badge.svg) +[![codecov](https://codecov.io/gh/goccy/go-yaml/branch/master/graph/badge.svg)](https://codecov.io/gh/goccy/go-yaml) +[![Go Report Card](https://goreportcard.com/badge/github.com/goccy/go-yaml)](https://goreportcard.com/report/github.com/goccy/go-yaml) + + + +## This library has **NO** relation to the go-yaml/yaml library + +> [!IMPORTANT] +> This library is developed from scratch to replace [`go-yaml/yaml`](https://github.com/go-yaml/yaml). +> If you're looking for a better YAML library, this one should be helpful. + +# Why a new library? + +As of this writing, there already exists a de facto standard library for YAML processing for Go: [https://github.com/go-yaml/yaml](https://github.com/go-yaml/yaml). However, we believe that a new YAML library is necessary for the following reasons: + +- Not actively maintained +- `go-yaml/yaml` has ported the libyaml written in C to Go, so the source code is not written in Go style +- There is a lot of content that cannot be parsed +- YAML is often used for configuration, and it is common to include validation along with it. However, the errors in `go-yaml/yaml` are not intuitive, and it is difficult to provide meaningful validation errors +- When creating tools that use YAML, there are cases where reversible transformation of YAML is required. However, to perform reversible transformations of content that includes Comments or Anchors/Aliases, manipulating the AST is the only option +- Non-intuitive [Marshaler](https://pkg.go.dev/gopkg.in/yaml.v3#Marshaler) / [Unmarshaler](https://pkg.go.dev/gopkg.in/yaml.v3#Unmarshaler) + +By the way, libraries such as [ghodss/yaml](https://github.com/ghodss/yaml) and [sigs.k8s.io/yaml](https://github.com/kubernetes-sigs/yaml) also depend on go-yaml/yaml, so if you are using these libraries, the same issues apply: they cannot parse things that go-yaml/yaml cannot parse, and they inherit many of the problems that go-yaml/yaml has. + +# Features + +- No dependencies +- A better parser than `go-yaml/yaml`. + - [Support recursive processing](https://github.com/apple/device-management/blob/release/docs/schema.yaml) + - Higher coverage in the [YAML Test Suite](https://github.com/yaml/yaml-test-suite?tab=readme-ov-file) + - YAML Test Suite consists of 402 cases in total, of which `gopkg.in/yaml.v3` passes `295`. In addition to passing all those test cases, `goccy/go-yaml` successfully passes nearly 60 additional test cases ( 2024/12/15 ) + - The test code is [here](https://github.com/goccy/go-yaml/blob/master/yaml_test_suite_test.go#L77) +- Ease and sustainability of maintenance + - The main maintainer is [@goccy](https://github.com/goccy), but we are also building a system to develop as a team with trusted developers + - Since it is written from scratch, the code is easy to read for Gophers +- An API structure that allows the use of not only `Encoder`/`Decoder` but also `Tokenizer` and `Parser` functionalities. + - [lexer.Tokenize](https://pkg.go.dev/github.com/goccy/go-yaml@v1.15.4/lexer#Tokenize) + - [parser.Parse](https://pkg.go.dev/github.com/goccy/go-yaml@v1.15.4/parser#Parse) +- Filtering, replacing, and merging YAML content using YAML Path +- Reversible transformation without using the AST for YAML that includes Anchors, Aliases, and Comments +- Customize the Marshal/Unmarshal behavior for primitive types and third-party library types ([RegisterCustomMarshaler](https://pkg.go.dev/github.com/goccy/go-yaml#RegisterCustomMarshaler), [RegisterCustomUnmarshaler](https://pkg.go.dev/github.com/goccy/go-yaml#RegisterCustomUnmarshaler)) +- Respects `encoding/json` behavior + - Accept the `json` tag. Note that not all options from the `json` tag will have significance when parsing YAML documents. If both tags exist, `yaml` tag will take precedence. + - [json.Marshaler](https://pkg.go.dev/encoding/json#Marshaler) style [marshaler](https://pkg.go.dev/github.com/goccy/go-yaml#BytesMarshaler) + - [json.Unmarshaler](https://pkg.go.dev/encoding/json#Unmarshaler) style [unmarshaler](https://pkg.go.dev/github.com/goccy/go-yaml#BytesUnmarshaler) + - Options for using `MarshalJSON` and `UnmarshalJSON` ([UseJSONMarshaler](https://pkg.go.dev/github.com/goccy/go-yaml#UseJSONMarshaler), [UseJSONUnmarshaler](https://pkg.go.dev/github.com/goccy/go-yaml#UseJSONUnmarshaler)) +- Pretty format for error notifications +- Smart validation processing combined with [go-playground/validator](https://github.com/go-playground/validator) + - [example test code is here](https://github.com/goccy/go-yaml/blob/45889c98b0a0967240eb595a1bd6896e2f575106/testdata/validate_test.go#L12) +- Allow referencing elements declared in another file via anchors + +# Users + +The repositories that use goccy/go-yaml are listed here. + +- https://github.com/goccy/go-yaml/wiki/Users + +The source data is [here](https://github.com/goccy/go-yaml/network/dependents). +It is already being used in many repositories. Now it's your turn 😄 + +# Playground + +The Playground visualizes how go-yaml processes YAML text. Use it to assist with your debugging or issue reporting. + +https://goccy.github.io/go-yaml + +# Installation + +```sh +go get github.com/goccy/go-yaml +``` + +# Synopsis + +## 1. Simple Encode/Decode + +Has an interface like `go-yaml/yaml` using `reflect` + +```go +var v struct { + A int + B string +} +v.A = 1 +v.B = "hello" +bytes, err := yaml.Marshal(v) +if err != nil { + //... +} +fmt.Println(string(bytes)) // "a: 1\nb: hello\n" +``` + +```go + yml := ` +%YAML 1.2 +--- +a: 1 +b: c +` +var v struct { + A int + B string +} +if err := yaml.Unmarshal([]byte(yml), &v); err != nil { + //... +} +``` + +To control marshal/unmarshal behavior, you can use the `yaml` tag. + +```go + yml := `--- +foo: 1 +bar: c +` +var v struct { + A int `yaml:"foo"` + B string `yaml:"bar"` +} +if err := yaml.Unmarshal([]byte(yml), &v); err != nil { + //... +} +``` + +For convenience, we also accept the `json` tag. Note that not all options from +the `json` tag will have significance when parsing YAML documents. If both +tags exist, `yaml` tag will take precedence. + +```go + yml := `--- +foo: 1 +bar: c +` +var v struct { + A int `json:"foo"` + B string `json:"bar"` +} +if err := yaml.Unmarshal([]byte(yml), &v); err != nil { + //... +} +``` + +For custom marshal/unmarshaling, implement either `Bytes` or `Interface` variant of marshaler/unmarshaler. The difference is that while `BytesMarshaler`/`BytesUnmarshaler` behaves like [`encoding/json`](https://pkg.go.dev/encoding/json) and `InterfaceMarshaler`/`InterfaceUnmarshaler` behaves like [`gopkg.in/yaml.v2`](https://pkg.go.dev/gopkg.in/yaml.v2). + +Semantically both are the same, but they differ in performance. Because indentation matters in YAML, you cannot simply accept a valid YAML fragment from a Marshaler, and expect it to work when it is attached to the parent container's serialized form. Therefore when we receive use the `BytesMarshaler`, which returns `[]byte`, we must decode it once to figure out how to make it work in the given context. If you use the `InterfaceMarshaler`, we can skip the decoding. + +If you are repeatedly marshaling complex objects, the latter is always better +performance wise. But if you are, for example, just providing a choice between +a config file format that is read only once, the former is probably easier to +code. + +## 2. Reference elements declared in another file + +`testdata` directory contains `anchor.yml` file: + +```shell +├── testdata +   └── anchor.yml +``` + +And `anchor.yml` is defined as follows: + +```yaml +a: &a + b: 1 + c: hello +``` + +Then, if `yaml.ReferenceDirs("testdata")` option is passed to `yaml.Decoder`, + `Decoder` tries to find the anchor definition from YAML files the under `testdata` directory. + +```go +buf := bytes.NewBufferString("a: *a\n") +dec := yaml.NewDecoder(buf, yaml.ReferenceDirs("testdata")) +var v struct { + A struct { + B int + C string + } +} +if err := dec.Decode(&v); err != nil { + //... +} +fmt.Printf("%+v\n", v) // {A:{B:1 C:hello}} +``` + +## 3. Encode with `Anchor` and `Alias` + +### 3.1. Explicitly declared `Anchor` name and `Alias` name + +If you want to use `anchor`, you can define it as a struct tag. +If the value specified for an anchor is a pointer type and the same address as the pointer is found, the value is automatically set to alias. +If an explicit alias name is specified, an error is raised if its value is different from the value specified in the anchor. + +```go +type T struct { + A int + B string +} +var v struct { + C *T `yaml:"c,anchor=x"` + D *T `yaml:"d,alias=x"` +} +v.C = &T{A: 1, B: "hello"} +v.D = v.C +bytes, err := yaml.Marshal(v) +if err != nil { + panic(err) +} +fmt.Println(string(bytes)) +/* +c: &x + a: 1 + b: hello +d: *x +*/ +``` + +### 3.2. Implicitly declared `Anchor` and `Alias` names + +If you do not explicitly declare the anchor name, the default behavior is to +use the equivalent of `strings.ToLower($FieldName)` as the name of the anchor. +If the value specified for an anchor is a pointer type and the same address as the pointer is found, the value is automatically set to alias. + +```go +type T struct { + I int + S string +} +var v struct { + A *T `yaml:"a,anchor"` + B *T `yaml:"b,anchor"` + C *T `yaml:"c"` + D *T `yaml:"d"` +} +v.A = &T{I: 1, S: "hello"} +v.B = &T{I: 2, S: "world"} +v.C = v.A // C has same pointer address to A +v.D = v.B // D has same pointer address to B +bytes, err := yaml.Marshal(v) +if err != nil { + //... +} +fmt.Println(string(bytes)) +/* +a: &a + i: 1 + s: hello +b: &b + i: 2 + s: world +c: *a +d: *b +*/ +``` + +### 3.3 MergeKey and Alias + +Merge key and alias ( `<<: *alias` ) can be used by embedding a structure with the `inline,alias` tag. + +```go +type Person struct { + *Person `yaml:",omitempty,inline,alias"` // embed Person type for default value + Name string `yaml:",omitempty"` + Age int `yaml:",omitempty"` +} +defaultPerson := &Person{ + Name: "John Smith", + Age: 20, +} +people := []*Person{ + { + Person: defaultPerson, // assign default value + Name: "Ken", // override Name property + Age: 10, // override Age property + }, + { + Person: defaultPerson, // assign default value only + }, +} +var doc struct { + Default *Person `yaml:"default,anchor"` + People []*Person `yaml:"people"` +} +doc.Default = defaultPerson +doc.People = people +bytes, err := yaml.Marshal(doc) +if err != nil { + //... +} +fmt.Println(string(bytes)) +/* +default: &default + name: John Smith + age: 20 +people: +- <<: *default + name: Ken + age: 10 +- <<: *default +*/ +``` + +## 4. Pretty Formatted Errors + +Error values produced during parsing have two extra features over regular +error values. + +First, by default, they contain extra information on the location of the error +from the source YAML document, to make it easier to find the error location. + +Second, the error messages can optionally be colorized. + +If you would like to control exactly how the output looks like, consider +using `yaml.FormatError`, which accepts two boolean values to +control turning these features on or off. + + + +## 5. Use YAMLPath + +```go +yml := ` +store: + book: + - author: john + price: 10 + - author: ken + price: 12 + bicycle: + color: red + price: 19.95 +` +path, err := yaml.PathString("$.store.book[*].author") +if err != nil { + //... +} +var authors []string +if err := path.Read(strings.NewReader(yml), &authors); err != nil { + //... +} +fmt.Println(authors) +// [john ken] +``` + +### 5.1 Print customized error with YAML source code + +```go +package main + +import ( + "fmt" + + "github.com/goccy/go-yaml" +) + +func main() { + yml := ` +a: 1 +b: "hello" +` + var v struct { + A int + B string + } + if err := yaml.Unmarshal([]byte(yml), &v); err != nil { + panic(err) + } + if v.A != 2 { + // output error with YAML source + path, err := yaml.PathString("$.a") + if err != nil { + panic(err) + } + source, err := path.AnnotateSource([]byte(yml), true) + if err != nil { + panic(err) + } + fmt.Printf("a value expected 2 but actual %d:\n%s\n", v.A, string(source)) + } +} +``` + +output result is the following: + + + + +# Tools + +## ycat + +print yaml file with color + +ycat + +### Installation + +```sh +git clone https://github.com/goccy/go-yaml.git +cd go-yaml/cmd/ycat && go install . +``` + + +# For Developers + +> [!NOTE] +> In this project, we manage such test code under the `testdata` directory to avoid adding dependencies on libraries that are only needed for testing to the top `go.mod` file. Therefore, if you want to add test cases that use 3rd party libraries, please add the test code to the `testdata` directory. + +# Looking for Sponsors + +I'm looking for sponsors this library. This library is being developed as a personal project in my spare time. If you want a quick response or problem resolution when using this library in your project, please register as a [sponsor](https://github.com/sponsors/goccy). I will cooperate as much as possible. Of course, this library is developed as an MIT license, so you can use it freely for free. + +# License + +MIT diff --git a/vendor/github.com/goccy/go-yaml/ast/ast.go b/vendor/github.com/goccy/go-yaml/ast/ast.go new file mode 100644 index 0000000..a1a7de1 --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/ast/ast.go @@ -0,0 +1,2368 @@ +package ast + +import ( + "errors" + "fmt" + "io" + "math" + "strconv" + "strings" + + "github.com/goccy/go-yaml/token" +) + +var ( + ErrInvalidTokenType = errors.New("invalid token type") + ErrInvalidAnchorName = errors.New("invalid anchor name") + ErrInvalidAliasName = errors.New("invalid alias name") +) + +// NodeType type identifier of node +type NodeType int + +const ( + // UnknownNodeType type identifier for default + UnknownNodeType NodeType = iota + // DocumentType type identifier for document node + DocumentType + // NullType type identifier for null node + NullType + // BoolType type identifier for boolean node + BoolType + // IntegerType type identifier for integer node + IntegerType + // FloatType type identifier for float node + FloatType + // InfinityType type identifier for infinity node + InfinityType + // NanType type identifier for nan node + NanType + // StringType type identifier for string node + StringType + // MergeKeyType type identifier for merge key node + MergeKeyType + // LiteralType type identifier for literal node + LiteralType + // MappingType type identifier for mapping node + MappingType + // MappingKeyType type identifier for mapping key node + MappingKeyType + // MappingValueType type identifier for mapping value node + MappingValueType + // SequenceType type identifier for sequence node + SequenceType + // SequenceEntryType type identifier for sequence entry node + SequenceEntryType + // AnchorType type identifier for anchor node + AnchorType + // AliasType type identifier for alias node + AliasType + // DirectiveType type identifier for directive node + DirectiveType + // TagType type identifier for tag node + TagType + // CommentType type identifier for comment node + CommentType + // CommentGroupType type identifier for comment group node + CommentGroupType +) + +// String node type identifier to text +func (t NodeType) String() string { + switch t { + case UnknownNodeType: + return "UnknownNode" + case DocumentType: + return "Document" + case NullType: + return "Null" + case BoolType: + return "Bool" + case IntegerType: + return "Integer" + case FloatType: + return "Float" + case InfinityType: + return "Infinity" + case NanType: + return "Nan" + case StringType: + return "String" + case MergeKeyType: + return "MergeKey" + case LiteralType: + return "Literal" + case MappingType: + return "Mapping" + case MappingKeyType: + return "MappingKey" + case MappingValueType: + return "MappingValue" + case SequenceType: + return "Sequence" + case SequenceEntryType: + return "SequenceEntry" + case AnchorType: + return "Anchor" + case AliasType: + return "Alias" + case DirectiveType: + return "Directive" + case TagType: + return "Tag" + case CommentType: + return "Comment" + case CommentGroupType: + return "CommentGroup" + } + return "" +} + +// String node type identifier to YAML Structure name +// based on https://yaml.org/spec/1.2/spec.html +func (t NodeType) YAMLName() string { + switch t { + case UnknownNodeType: + return "unknown" + case DocumentType: + return "document" + case NullType: + return "null" + case BoolType: + return "boolean" + case IntegerType: + return "int" + case FloatType: + return "float" + case InfinityType: + return "inf" + case NanType: + return "nan" + case StringType: + return "string" + case MergeKeyType: + return "merge key" + case LiteralType: + return "scalar" + case MappingType: + return "mapping" + case MappingKeyType: + return "key" + case MappingValueType: + return "value" + case SequenceType: + return "sequence" + case SequenceEntryType: + return "value" + case AnchorType: + return "anchor" + case AliasType: + return "alias" + case DirectiveType: + return "directive" + case TagType: + return "tag" + case CommentType: + return "comment" + case CommentGroupType: + return "comment" + } + return "" +} + +// Node type of node +type Node interface { + io.Reader + // String node to text + String() string + // GetToken returns token instance + GetToken() *token.Token + // Type returns type of node + Type() NodeType + // AddColumn add column number to child nodes recursively + AddColumn(int) + // SetComment set comment token to node + SetComment(*CommentGroupNode) error + // Comment returns comment token instance + GetComment() *CommentGroupNode + // GetPath returns YAMLPath for the current node + GetPath() string + // SetPath set YAMLPath for the current node + SetPath(string) + // MarshalYAML + MarshalYAML() ([]byte, error) + // already read length + readLen() int + // append read length + addReadLen(int) + // clean read length + clearLen() +} + +// MapKeyNode type for map key node +type MapKeyNode interface { + Node + IsMergeKey() bool + // String node to text without comment + stringWithoutComment() string +} + +// ScalarNode type for scalar node +type ScalarNode interface { + MapKeyNode + GetValue() interface{} +} + +type BaseNode struct { + Path string + Comment *CommentGroupNode + read int +} + +func addCommentString(base string, node *CommentGroupNode) string { + return fmt.Sprintf("%s %s", base, node.String()) +} + +func (n *BaseNode) readLen() int { + return n.read +} + +func (n *BaseNode) clearLen() { + n.read = 0 +} + +func (n *BaseNode) addReadLen(len int) { + n.read += len +} + +// GetPath returns YAMLPath for the current node. +func (n *BaseNode) GetPath() string { + if n == nil { + return "" + } + return n.Path +} + +// SetPath set YAMLPath for the current node. +func (n *BaseNode) SetPath(path string) { + if n == nil { + return + } + n.Path = path +} + +// GetComment returns comment token instance +func (n *BaseNode) GetComment() *CommentGroupNode { + return n.Comment +} + +// SetComment set comment token +func (n *BaseNode) SetComment(node *CommentGroupNode) error { + n.Comment = node + return nil +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} + +func readNode(p []byte, node Node) (int, error) { + s := node.String() + readLen := node.readLen() + remain := len(s) - readLen + if remain == 0 { + node.clearLen() + return 0, io.EOF + } + size := min(remain, len(p)) + for idx, b := range []byte(s[readLen : readLen+size]) { + p[idx] = byte(b) + } + node.addReadLen(size) + return size, nil +} + +func checkLineBreak(t *token.Token) bool { + if t.Prev != nil { + lbc := "\n" + prev := t.Prev + var adjustment int + // if the previous type is sequence entry use the previous type for that + if prev.Type == token.SequenceEntryType { + // as well as switching to previous type count any new lines in origin to account for: + // - + // b: c + adjustment = strings.Count(strings.TrimRight(t.Origin, lbc), lbc) + if prev.Prev != nil { + prev = prev.Prev + } + } + lineDiff := t.Position.Line - prev.Position.Line - 1 + if lineDiff > 0 { + if prev.Type == token.StringType { + // Remove any line breaks included in multiline string + adjustment += strings.Count(strings.TrimRight(strings.TrimSpace(prev.Origin), lbc), lbc) + } + // Due to the way that comment parsing works its assumed that when a null value does not have new line in origin + // it was squashed therefore difference is ignored. + // foo: + // bar: + // # comment + // baz: 1 + // becomes + // foo: + // bar: null # comment + // + // baz: 1 + if prev.Type == token.NullType || prev.Type == token.ImplicitNullType { + return strings.Count(prev.Origin, lbc) > 0 + } + if lineDiff-adjustment > 0 { + return true + } + } + } + return false +} + +// Null create node for null value +func Null(tk *token.Token) *NullNode { + return &NullNode{ + BaseNode: &BaseNode{}, + Token: tk, + } +} + +// Bool create node for boolean value +func Bool(tk *token.Token) *BoolNode { + b, _ := strconv.ParseBool(tk.Value) + return &BoolNode{ + BaseNode: &BaseNode{}, + Token: tk, + Value: b, + } +} + +// Integer create node for integer value +func Integer(tk *token.Token) *IntegerNode { + var v any + if num := token.ToNumber(tk.Value); num != nil { + v = num.Value + } + return &IntegerNode{ + BaseNode: &BaseNode{}, + Token: tk, + Value: v, + } +} + +// Float create node for float value +func Float(tk *token.Token) *FloatNode { + var v float64 + if num := token.ToNumber(tk.Value); num != nil && num.Type == token.NumberTypeFloat { + value, ok := num.Value.(float64) + if ok { + v = value + } + } + return &FloatNode{ + BaseNode: &BaseNode{}, + Token: tk, + Value: v, + } +} + +// Infinity create node for .inf or -.inf value +func Infinity(tk *token.Token) *InfinityNode { + node := &InfinityNode{ + BaseNode: &BaseNode{}, + Token: tk, + } + switch tk.Value { + case ".inf", ".Inf", ".INF": + node.Value = math.Inf(0) + case "-.inf", "-.Inf", "-.INF": + node.Value = math.Inf(-1) + } + return node +} + +// Nan create node for .nan value +func Nan(tk *token.Token) *NanNode { + return &NanNode{ + BaseNode: &BaseNode{}, + Token: tk, + } +} + +// String create node for string value +func String(tk *token.Token) *StringNode { + return &StringNode{ + BaseNode: &BaseNode{}, + Token: tk, + Value: tk.Value, + } +} + +// Comment create node for comment +func Comment(tk *token.Token) *CommentNode { + return &CommentNode{ + BaseNode: &BaseNode{}, + Token: tk, + } +} + +func CommentGroup(comments []*token.Token) *CommentGroupNode { + nodes := []*CommentNode{} + for _, comment := range comments { + nodes = append(nodes, Comment(comment)) + } + return &CommentGroupNode{ + BaseNode: &BaseNode{}, + Comments: nodes, + } +} + +// MergeKey create node for merge key ( << ) +func MergeKey(tk *token.Token) *MergeKeyNode { + return &MergeKeyNode{ + BaseNode: &BaseNode{}, + Token: tk, + } +} + +// Mapping create node for map +func Mapping(tk *token.Token, isFlowStyle bool, values ...*MappingValueNode) *MappingNode { + node := &MappingNode{ + BaseNode: &BaseNode{}, + Start: tk, + IsFlowStyle: isFlowStyle, + Values: []*MappingValueNode{}, + } + node.Values = append(node.Values, values...) + return node +} + +// MappingValue create node for mapping value +func MappingValue(tk *token.Token, key MapKeyNode, value Node) *MappingValueNode { + return &MappingValueNode{ + BaseNode: &BaseNode{}, + Start: tk, + Key: key, + Value: value, + } +} + +// MappingKey create node for map key ( '?' ). +func MappingKey(tk *token.Token) *MappingKeyNode { + return &MappingKeyNode{ + BaseNode: &BaseNode{}, + Start: tk, + } +} + +// Sequence create node for sequence +func Sequence(tk *token.Token, isFlowStyle bool) *SequenceNode { + return &SequenceNode{ + BaseNode: &BaseNode{}, + Start: tk, + IsFlowStyle: isFlowStyle, + Values: []Node{}, + } +} + +func Anchor(tk *token.Token) *AnchorNode { + return &AnchorNode{ + BaseNode: &BaseNode{}, + Start: tk, + } +} + +func Alias(tk *token.Token) *AliasNode { + return &AliasNode{ + BaseNode: &BaseNode{}, + Start: tk, + } +} + +func Document(tk *token.Token, body Node) *DocumentNode { + return &DocumentNode{ + BaseNode: &BaseNode{}, + Start: tk, + Body: body, + } +} + +func Directive(tk *token.Token) *DirectiveNode { + return &DirectiveNode{ + BaseNode: &BaseNode{}, + Start: tk, + } +} + +func Literal(tk *token.Token) *LiteralNode { + return &LiteralNode{ + BaseNode: &BaseNode{}, + Start: tk, + } +} + +func Tag(tk *token.Token) *TagNode { + return &TagNode{ + BaseNode: &BaseNode{}, + Start: tk, + } +} + +// File contains all documents in YAML file +type File struct { + Name string + Docs []*DocumentNode +} + +// Read implements (io.Reader).Read +func (f *File) Read(p []byte) (int, error) { + for _, doc := range f.Docs { + n, err := doc.Read(p) + if err == io.EOF { + continue + } + return n, nil + } + return 0, io.EOF +} + +// String all documents to text +func (f *File) String() string { + docs := []string{} + for _, doc := range f.Docs { + docs = append(docs, doc.String()) + } + if len(docs) > 0 { + return strings.Join(docs, "\n") + "\n" + } else { + return "" + } +} + +// DocumentNode type of Document +type DocumentNode struct { + *BaseNode + Start *token.Token // position of DocumentHeader ( `---` ) + End *token.Token // position of DocumentEnd ( `...` ) + Body Node +} + +// Read implements (io.Reader).Read +func (d *DocumentNode) Read(p []byte) (int, error) { + return readNode(p, d) +} + +// Type returns DocumentNodeType +func (d *DocumentNode) Type() NodeType { return DocumentType } + +// GetToken returns token instance +func (d *DocumentNode) GetToken() *token.Token { + return d.Body.GetToken() +} + +// AddColumn add column number to child nodes recursively +func (d *DocumentNode) AddColumn(col int) { + if d.Body != nil { + d.Body.AddColumn(col) + } +} + +// String document to text +func (d *DocumentNode) String() string { + doc := []string{} + if d.Start != nil { + doc = append(doc, d.Start.Value) + } + if d.Body != nil { + doc = append(doc, d.Body.String()) + } + if d.End != nil { + doc = append(doc, d.End.Value) + } + return strings.Join(doc, "\n") +} + +// MarshalYAML encodes to a YAML text +func (d *DocumentNode) MarshalYAML() ([]byte, error) { + return []byte(d.String()), nil +} + +// NullNode type of null node +type NullNode struct { + *BaseNode + Token *token.Token +} + +// Read implements (io.Reader).Read +func (n *NullNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns NullType +func (n *NullNode) Type() NodeType { return NullType } + +// GetToken returns token instance +func (n *NullNode) GetToken() *token.Token { + return n.Token +} + +// AddColumn add column number to child nodes recursively +func (n *NullNode) AddColumn(col int) { + n.Token.AddColumn(col) +} + +// GetValue returns nil value +func (n *NullNode) GetValue() interface{} { + return nil +} + +// String returns `null` text +func (n *NullNode) String() string { + if n.Token.Type == token.ImplicitNullType { + if n.Comment != nil { + return n.Comment.String() + } + return "" + } + if n.Comment != nil { + return addCommentString("null", n.Comment) + } + return n.stringWithoutComment() +} + +func (n *NullNode) stringWithoutComment() string { + return "null" +} + +// MarshalYAML encodes to a YAML text +func (n *NullNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// IsMergeKey returns whether it is a MergeKey node. +func (n *NullNode) IsMergeKey() bool { + return false +} + +// IntegerNode type of integer node +type IntegerNode struct { + *BaseNode + Token *token.Token + Value interface{} // int64 or uint64 value +} + +// Read implements (io.Reader).Read +func (n *IntegerNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns IntegerType +func (n *IntegerNode) Type() NodeType { return IntegerType } + +// GetToken returns token instance +func (n *IntegerNode) GetToken() *token.Token { + return n.Token +} + +// AddColumn add column number to child nodes recursively +func (n *IntegerNode) AddColumn(col int) { + n.Token.AddColumn(col) +} + +// GetValue returns int64 value +func (n *IntegerNode) GetValue() interface{} { + return n.Value +} + +// String int64 to text +func (n *IntegerNode) String() string { + if n.Comment != nil { + return addCommentString(n.Token.Value, n.Comment) + } + return n.stringWithoutComment() +} + +func (n *IntegerNode) stringWithoutComment() string { + return n.Token.Value +} + +// MarshalYAML encodes to a YAML text +func (n *IntegerNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// IsMergeKey returns whether it is a MergeKey node. +func (n *IntegerNode) IsMergeKey() bool { + return false +} + +// FloatNode type of float node +type FloatNode struct { + *BaseNode + Token *token.Token + Precision int + Value float64 +} + +// Read implements (io.Reader).Read +func (n *FloatNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns FloatType +func (n *FloatNode) Type() NodeType { return FloatType } + +// GetToken returns token instance +func (n *FloatNode) GetToken() *token.Token { + return n.Token +} + +// AddColumn add column number to child nodes recursively +func (n *FloatNode) AddColumn(col int) { + n.Token.AddColumn(col) +} + +// GetValue returns float64 value +func (n *FloatNode) GetValue() interface{} { + return n.Value +} + +// String float64 to text +func (n *FloatNode) String() string { + if n.Comment != nil { + return addCommentString(n.Token.Value, n.Comment) + } + return n.stringWithoutComment() +} + +func (n *FloatNode) stringWithoutComment() string { + return n.Token.Value +} + +// MarshalYAML encodes to a YAML text +func (n *FloatNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// IsMergeKey returns whether it is a MergeKey node. +func (n *FloatNode) IsMergeKey() bool { + return false +} + +// StringNode type of string node +type StringNode struct { + *BaseNode + Token *token.Token + Value string +} + +// Read implements (io.Reader).Read +func (n *StringNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns StringType +func (n *StringNode) Type() NodeType { return StringType } + +// GetToken returns token instance +func (n *StringNode) GetToken() *token.Token { + return n.Token +} + +// AddColumn add column number to child nodes recursively +func (n *StringNode) AddColumn(col int) { + n.Token.AddColumn(col) +} + +// GetValue returns string value +func (n *StringNode) GetValue() interface{} { + return n.Value +} + +// IsMergeKey returns whether it is a MergeKey node. +func (n *StringNode) IsMergeKey() bool { + return false +} + +// escapeSingleQuote escapes s to a single quoted scalar. +// https://yaml.org/spec/1.2.2/#732-single-quoted-style +func escapeSingleQuote(s string) string { + var sb strings.Builder + growLen := len(s) + // s includes also one ' from the doubled pair + 2 + // opening and closing ' + strings.Count(s, "'") // ' added by ReplaceAll + sb.Grow(growLen) + sb.WriteString("'") + sb.WriteString(strings.ReplaceAll(s, "'", "''")) + sb.WriteString("'") + return sb.String() +} + +// String string value to text with quote or literal header if required +func (n *StringNode) String() string { + switch n.Token.Type { + case token.SingleQuoteType: + quoted := escapeSingleQuote(n.Value) + if n.Comment != nil { + return addCommentString(quoted, n.Comment) + } + return quoted + case token.DoubleQuoteType: + quoted := strconv.Quote(n.Value) + if n.Comment != nil { + return addCommentString(quoted, n.Comment) + } + return quoted + } + + lbc := token.DetectLineBreakCharacter(n.Value) + if strings.Contains(n.Value, lbc) { + // This block assumes that the line breaks in this inside scalar content and the Outside scalar content are the same. + // It works mostly, but inconsistencies occur if line break characters are mixed. + header := token.LiteralBlockHeader(n.Value) + space := strings.Repeat(" ", n.Token.Position.Column-1) + indent := strings.Repeat(" ", n.Token.Position.IndentNum) + values := []string{} + for _, v := range strings.Split(n.Value, lbc) { + values = append(values, fmt.Sprintf("%s%s%s", space, indent, v)) + } + block := strings.TrimSuffix(strings.TrimSuffix(strings.Join(values, lbc), fmt.Sprintf("%s%s%s", lbc, indent, space)), fmt.Sprintf("%s%s", indent, space)) + return fmt.Sprintf("%s%s%s", header, lbc, block) + } else if len(n.Value) > 0 && (n.Value[0] == '{' || n.Value[0] == '[') { + return fmt.Sprintf(`'%s'`, n.Value) + } + if n.Comment != nil { + return addCommentString(n.Value, n.Comment) + } + return n.Value +} + +func (n *StringNode) stringWithoutComment() string { + switch n.Token.Type { + case token.SingleQuoteType: + quoted := fmt.Sprintf(`'%s'`, n.Value) + return quoted + case token.DoubleQuoteType: + quoted := strconv.Quote(n.Value) + return quoted + } + + lbc := token.DetectLineBreakCharacter(n.Value) + if strings.Contains(n.Value, lbc) { + // This block assumes that the line breaks in this inside scalar content and the Outside scalar content are the same. + // It works mostly, but inconsistencies occur if line break characters are mixed. + header := token.LiteralBlockHeader(n.Value) + space := strings.Repeat(" ", n.Token.Position.Column-1) + indent := strings.Repeat(" ", n.Token.Position.IndentNum) + values := []string{} + for _, v := range strings.Split(n.Value, lbc) { + values = append(values, fmt.Sprintf("%s%s%s", space, indent, v)) + } + block := strings.TrimSuffix(strings.TrimSuffix(strings.Join(values, lbc), fmt.Sprintf("%s%s%s", lbc, indent, space)), fmt.Sprintf(" %s", space)) + return fmt.Sprintf("%s%s%s", header, lbc, block) + } else if len(n.Value) > 0 && (n.Value[0] == '{' || n.Value[0] == '[') { + return fmt.Sprintf(`'%s'`, n.Value) + } + return n.Value +} + +// MarshalYAML encodes to a YAML text +func (n *StringNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// LiteralNode type of literal node +type LiteralNode struct { + *BaseNode + Start *token.Token + Value *StringNode +} + +// Read implements (io.Reader).Read +func (n *LiteralNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns LiteralType +func (n *LiteralNode) Type() NodeType { return LiteralType } + +// GetToken returns token instance +func (n *LiteralNode) GetToken() *token.Token { + return n.Start +} + +// AddColumn add column number to child nodes recursively +func (n *LiteralNode) AddColumn(col int) { + n.Start.AddColumn(col) + if n.Value != nil { + n.Value.AddColumn(col) + } +} + +// GetValue returns string value +func (n *LiteralNode) GetValue() interface{} { + return n.String() +} + +// String literal to text +func (n *LiteralNode) String() string { + origin := n.Value.GetToken().Origin + lit := strings.TrimRight(strings.TrimRight(origin, " "), "\n") + if n.Comment != nil { + return fmt.Sprintf("%s %s\n%s", n.Start.Value, n.Comment.String(), lit) + } + return fmt.Sprintf("%s\n%s", n.Start.Value, lit) +} + +func (n *LiteralNode) stringWithoutComment() string { + return n.String() +} + +// MarshalYAML encodes to a YAML text +func (n *LiteralNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// IsMergeKey returns whether it is a MergeKey node. +func (n *LiteralNode) IsMergeKey() bool { + return false +} + +// MergeKeyNode type of merge key node +type MergeKeyNode struct { + *BaseNode + Token *token.Token +} + +// Read implements (io.Reader).Read +func (n *MergeKeyNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns MergeKeyType +func (n *MergeKeyNode) Type() NodeType { return MergeKeyType } + +// GetToken returns token instance +func (n *MergeKeyNode) GetToken() *token.Token { + return n.Token +} + +// GetValue returns '<<' value +func (n *MergeKeyNode) GetValue() interface{} { + return n.Token.Value +} + +// String returns '<<' value +func (n *MergeKeyNode) String() string { + return n.stringWithoutComment() +} + +func (n *MergeKeyNode) stringWithoutComment() string { + return n.Token.Value +} + +// AddColumn add column number to child nodes recursively +func (n *MergeKeyNode) AddColumn(col int) { + n.Token.AddColumn(col) +} + +// MarshalYAML encodes to a YAML text +func (n *MergeKeyNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// IsMergeKey returns whether it is a MergeKey node. +func (n *MergeKeyNode) IsMergeKey() bool { + return true +} + +// BoolNode type of boolean node +type BoolNode struct { + *BaseNode + Token *token.Token + Value bool +} + +// Read implements (io.Reader).Read +func (n *BoolNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns BoolType +func (n *BoolNode) Type() NodeType { return BoolType } + +// GetToken returns token instance +func (n *BoolNode) GetToken() *token.Token { + return n.Token +} + +// AddColumn add column number to child nodes recursively +func (n *BoolNode) AddColumn(col int) { + n.Token.AddColumn(col) +} + +// GetValue returns boolean value +func (n *BoolNode) GetValue() interface{} { + return n.Value +} + +// String boolean to text +func (n *BoolNode) String() string { + if n.Comment != nil { + return addCommentString(n.Token.Value, n.Comment) + } + return n.stringWithoutComment() +} + +func (n *BoolNode) stringWithoutComment() string { + return n.Token.Value +} + +// MarshalYAML encodes to a YAML text +func (n *BoolNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// IsMergeKey returns whether it is a MergeKey node. +func (n *BoolNode) IsMergeKey() bool { + return false +} + +// InfinityNode type of infinity node +type InfinityNode struct { + *BaseNode + Token *token.Token + Value float64 +} + +// Read implements (io.Reader).Read +func (n *InfinityNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns InfinityType +func (n *InfinityNode) Type() NodeType { return InfinityType } + +// GetToken returns token instance +func (n *InfinityNode) GetToken() *token.Token { + return n.Token +} + +// AddColumn add column number to child nodes recursively +func (n *InfinityNode) AddColumn(col int) { + n.Token.AddColumn(col) +} + +// GetValue returns math.Inf(0) or math.Inf(-1) +func (n *InfinityNode) GetValue() interface{} { + return n.Value +} + +// String infinity to text +func (n *InfinityNode) String() string { + if n.Comment != nil { + return addCommentString(n.Token.Value, n.Comment) + } + return n.stringWithoutComment() +} + +func (n *InfinityNode) stringWithoutComment() string { + return n.Token.Value +} + +// MarshalYAML encodes to a YAML text +func (n *InfinityNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// IsMergeKey returns whether it is a MergeKey node. +func (n *InfinityNode) IsMergeKey() bool { + return false +} + +// NanNode type of nan node +type NanNode struct { + *BaseNode + Token *token.Token +} + +// Read implements (io.Reader).Read +func (n *NanNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns NanType +func (n *NanNode) Type() NodeType { return NanType } + +// GetToken returns token instance +func (n *NanNode) GetToken() *token.Token { + return n.Token +} + +// AddColumn add column number to child nodes recursively +func (n *NanNode) AddColumn(col int) { + n.Token.AddColumn(col) +} + +// GetValue returns math.NaN() +func (n *NanNode) GetValue() interface{} { + return math.NaN() +} + +// String returns .nan +func (n *NanNode) String() string { + if n.Comment != nil { + return addCommentString(n.Token.Value, n.Comment) + } + return n.stringWithoutComment() +} + +func (n *NanNode) stringWithoutComment() string { + return n.Token.Value +} + +// MarshalYAML encodes to a YAML text +func (n *NanNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// IsMergeKey returns whether it is a MergeKey node. +func (n *NanNode) IsMergeKey() bool { + return false +} + +// MapNode interface of MappingValueNode / MappingNode +type MapNode interface { + MapRange() *MapNodeIter +} + +// MapNodeIter is an iterator for ranging over a MapNode +type MapNodeIter struct { + values []*MappingValueNode + idx int +} + +const ( + startRangeIndex = -1 +) + +// Next advances the map iterator and reports whether there is another entry. +// It returns false when the iterator is exhausted. +func (m *MapNodeIter) Next() bool { + m.idx++ + next := m.idx < len(m.values) + return next +} + +// Key returns the key of the iterator's current map node entry. +func (m *MapNodeIter) Key() MapKeyNode { + return m.values[m.idx].Key +} + +// Value returns the value of the iterator's current map node entry. +func (m *MapNodeIter) Value() Node { + return m.values[m.idx].Value +} + +// KeyValue returns the MappingValueNode of the iterator's current map node entry. +func (m *MapNodeIter) KeyValue() *MappingValueNode { + return m.values[m.idx] +} + +// MappingNode type of mapping node +type MappingNode struct { + *BaseNode + Start *token.Token + End *token.Token + IsFlowStyle bool + Values []*MappingValueNode + FootComment *CommentGroupNode +} + +func (n *MappingNode) startPos() *token.Position { + if len(n.Values) == 0 { + return n.Start.Position + } + return n.Values[0].Key.GetToken().Position +} + +// Merge merge key/value of map. +func (n *MappingNode) Merge(target *MappingNode) { + keyToMapValueMap := map[string]*MappingValueNode{} + for _, value := range n.Values { + key := value.Key.String() + keyToMapValueMap[key] = value + } + column := n.startPos().Column - target.startPos().Column + target.AddColumn(column) + for _, value := range target.Values { + mapValue, exists := keyToMapValueMap[value.Key.String()] + if exists { + mapValue.Value = value.Value + } else { + n.Values = append(n.Values, value) + } + } +} + +// SetIsFlowStyle set value to IsFlowStyle field recursively. +func (n *MappingNode) SetIsFlowStyle(isFlow bool) { + n.IsFlowStyle = isFlow + for _, value := range n.Values { + value.SetIsFlowStyle(isFlow) + } +} + +// Read implements (io.Reader).Read +func (n *MappingNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns MappingType +func (n *MappingNode) Type() NodeType { return MappingType } + +// GetToken returns token instance +func (n *MappingNode) GetToken() *token.Token { + return n.Start +} + +// AddColumn add column number to child nodes recursively +func (n *MappingNode) AddColumn(col int) { + n.Start.AddColumn(col) + n.End.AddColumn(col) + for _, value := range n.Values { + value.AddColumn(col) + } +} + +func (n *MappingNode) flowStyleString(commentMode bool) string { + values := []string{} + for _, value := range n.Values { + values = append(values, strings.TrimLeft(value.String(), " ")) + } + mapText := fmt.Sprintf("{%s}", strings.Join(values, ", ")) + if commentMode && n.Comment != nil { + return addCommentString(mapText, n.Comment) + } + return mapText +} + +func (n *MappingNode) blockStyleString(commentMode bool) string { + values := []string{} + for _, value := range n.Values { + values = append(values, value.String()) + } + mapText := strings.Join(values, "\n") + if commentMode && n.Comment != nil { + value := values[0] + var spaceNum int + for i := 0; i < len(value); i++ { + if value[i] != ' ' { + break + } + spaceNum++ + } + comment := n.Comment.StringWithSpace(spaceNum) + return fmt.Sprintf("%s\n%s", comment, mapText) + } + return mapText +} + +// String mapping values to text +func (n *MappingNode) String() string { + if len(n.Values) == 0 { + if n.Comment != nil { + return addCommentString("{}", n.Comment) + } + return "{}" + } + + commentMode := true + if n.IsFlowStyle || len(n.Values) == 0 { + return n.flowStyleString(commentMode) + } + return n.blockStyleString(commentMode) +} + +// MapRange implements MapNode protocol +func (n *MappingNode) MapRange() *MapNodeIter { + return &MapNodeIter{ + idx: startRangeIndex, + values: n.Values, + } +} + +// MarshalYAML encodes to a YAML text +func (n *MappingNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// MappingKeyNode type of tag node +type MappingKeyNode struct { + *BaseNode + Start *token.Token + Value Node +} + +// Read implements (io.Reader).Read +func (n *MappingKeyNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns MappingKeyType +func (n *MappingKeyNode) Type() NodeType { return MappingKeyType } + +// GetToken returns token instance +func (n *MappingKeyNode) GetToken() *token.Token { + return n.Start +} + +// AddColumn add column number to child nodes recursively +func (n *MappingKeyNode) AddColumn(col int) { + n.Start.AddColumn(col) + if n.Value != nil { + n.Value.AddColumn(col) + } +} + +// String tag to text +func (n *MappingKeyNode) String() string { + return n.stringWithoutComment() +} + +func (n *MappingKeyNode) stringWithoutComment() string { + return fmt.Sprintf("%s %s", n.Start.Value, n.Value.String()) +} + +// MarshalYAML encodes to a YAML text +func (n *MappingKeyNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// IsMergeKey returns whether it is a MergeKey node. +func (n *MappingKeyNode) IsMergeKey() bool { + if n.Value == nil { + return false + } + key, ok := n.Value.(MapKeyNode) + if !ok { + return false + } + return key.IsMergeKey() +} + +// MappingValueNode type of mapping value +type MappingValueNode struct { + *BaseNode + Start *token.Token // delimiter token ':'. + CollectEntry *token.Token // collect entry token ','. + Key MapKeyNode + Value Node + FootComment *CommentGroupNode + IsFlowStyle bool +} + +// Replace replace value node. +func (n *MappingValueNode) Replace(value Node) error { + column := n.Value.GetToken().Position.Column - value.GetToken().Position.Column + value.AddColumn(column) + n.Value = value + return nil +} + +// Read implements (io.Reader).Read +func (n *MappingValueNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns MappingValueType +func (n *MappingValueNode) Type() NodeType { return MappingValueType } + +// GetToken returns token instance +func (n *MappingValueNode) GetToken() *token.Token { + return n.Start +} + +// AddColumn add column number to child nodes recursively +func (n *MappingValueNode) AddColumn(col int) { + n.Start.AddColumn(col) + if n.Key != nil { + n.Key.AddColumn(col) + } + if n.Value != nil { + n.Value.AddColumn(col) + } +} + +// SetIsFlowStyle set value to IsFlowStyle field recursively. +func (n *MappingValueNode) SetIsFlowStyle(isFlow bool) { + n.IsFlowStyle = isFlow + switch value := n.Value.(type) { + case *MappingNode: + value.SetIsFlowStyle(isFlow) + case *MappingValueNode: + value.SetIsFlowStyle(isFlow) + case *SequenceNode: + value.SetIsFlowStyle(isFlow) + } +} + +// String mapping value to text +func (n *MappingValueNode) String() string { + var text string + if n.Comment != nil { + text = fmt.Sprintf( + "%s\n%s", + n.Comment.StringWithSpace(n.Key.GetToken().Position.Column-1), + n.toString(), + ) + } else { + text = n.toString() + } + if n.FootComment != nil { + text += fmt.Sprintf("\n%s", n.FootComment.StringWithSpace(n.Key.GetToken().Position.Column-1)) + } + return text +} + +func (n *MappingValueNode) toString() string { + space := strings.Repeat(" ", n.Key.GetToken().Position.Column-1) + if checkLineBreak(n.Key.GetToken()) { + space = fmt.Sprintf("%s%s", "\n", space) + } + keyIndentLevel := n.Key.GetToken().Position.IndentLevel + valueIndentLevel := n.Value.GetToken().Position.IndentLevel + keyComment := n.Key.GetComment() + if _, ok := n.Value.(ScalarNode); ok { + value := n.Value.String() + if value == "" { + // implicit null value. + return fmt.Sprintf("%s%s:", space, n.Key.String()) + } + return fmt.Sprintf("%s%s: %s", space, n.Key.String(), value) + } else if keyIndentLevel < valueIndentLevel && !n.IsFlowStyle { + if keyComment != nil { + return fmt.Sprintf( + "%s%s: %s\n%s", + space, + n.Key.stringWithoutComment(), + keyComment.String(), + n.Value.String(), + ) + } + return fmt.Sprintf("%s%s:\n%s", space, n.Key.String(), n.Value.String()) + } else if m, ok := n.Value.(*MappingNode); ok && (m.IsFlowStyle || len(m.Values) == 0) { + return fmt.Sprintf("%s%s: %s", space, n.Key.String(), n.Value.String()) + } else if s, ok := n.Value.(*SequenceNode); ok && (s.IsFlowStyle || len(s.Values) == 0) { + return fmt.Sprintf("%s%s: %s", space, n.Key.String(), n.Value.String()) + } else if _, ok := n.Value.(*AnchorNode); ok { + return fmt.Sprintf("%s%s: %s", space, n.Key.String(), n.Value.String()) + } else if _, ok := n.Value.(*AliasNode); ok { + return fmt.Sprintf("%s%s: %s", space, n.Key.String(), n.Value.String()) + } else if _, ok := n.Value.(*TagNode); ok { + return fmt.Sprintf("%s%s: %s", space, n.Key.String(), n.Value.String()) + } + + if keyComment != nil { + return fmt.Sprintf( + "%s%s: %s\n%s", + space, + n.Key.stringWithoutComment(), + keyComment.String(), + n.Value.String(), + ) + } + if m, ok := n.Value.(*MappingNode); ok && m.Comment != nil { + return fmt.Sprintf( + "%s%s: %s", + space, + n.Key.String(), + strings.TrimLeft(n.Value.String(), " "), + ) + } + return fmt.Sprintf("%s%s:\n%s", space, n.Key.String(), n.Value.String()) +} + +// MapRange implements MapNode protocol +func (n *MappingValueNode) MapRange() *MapNodeIter { + return &MapNodeIter{ + idx: startRangeIndex, + values: []*MappingValueNode{n}, + } +} + +// MarshalYAML encodes to a YAML text +func (n *MappingValueNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// ArrayNode interface of SequenceNode +type ArrayNode interface { + ArrayRange() *ArrayNodeIter +} + +// ArrayNodeIter is an iterator for ranging over a ArrayNode +type ArrayNodeIter struct { + values []Node + idx int +} + +// Next advances the array iterator and reports whether there is another entry. +// It returns false when the iterator is exhausted. +func (m *ArrayNodeIter) Next() bool { + m.idx++ + next := m.idx < len(m.values) + return next +} + +// Value returns the value of the iterator's current array entry. +func (m *ArrayNodeIter) Value() Node { + return m.values[m.idx] +} + +// Len returns length of array +func (m *ArrayNodeIter) Len() int { + return len(m.values) +} + +// SequenceNode type of sequence node +type SequenceNode struct { + *BaseNode + Start *token.Token + End *token.Token + IsFlowStyle bool + Values []Node + ValueHeadComments []*CommentGroupNode + Entries []*SequenceEntryNode + FootComment *CommentGroupNode +} + +// Replace replace value node. +func (n *SequenceNode) Replace(idx int, value Node) error { + if len(n.Values) <= idx { + return fmt.Errorf( + "invalid index for sequence: sequence length is %d, but specified %d index", + len(n.Values), idx, + ) + } + column := n.Values[idx].GetToken().Position.Column - value.GetToken().Position.Column + value.AddColumn(column) + n.Values[idx] = value + return nil +} + +// Merge merge sequence value. +func (n *SequenceNode) Merge(target *SequenceNode) { + column := n.Start.Position.Column - target.Start.Position.Column + target.AddColumn(column) + n.Values = append(n.Values, target.Values...) + if len(target.ValueHeadComments) == 0 { + n.ValueHeadComments = append(n.ValueHeadComments, make([]*CommentGroupNode, len(target.Values))...) + return + } + n.ValueHeadComments = append(n.ValueHeadComments, target.ValueHeadComments...) +} + +// SetIsFlowStyle set value to IsFlowStyle field recursively. +func (n *SequenceNode) SetIsFlowStyle(isFlow bool) { + n.IsFlowStyle = isFlow + for _, value := range n.Values { + switch value := value.(type) { + case *MappingNode: + value.SetIsFlowStyle(isFlow) + case *MappingValueNode: + value.SetIsFlowStyle(isFlow) + case *SequenceNode: + value.SetIsFlowStyle(isFlow) + } + } +} + +// Read implements (io.Reader).Read +func (n *SequenceNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns SequenceType +func (n *SequenceNode) Type() NodeType { return SequenceType } + +// GetToken returns token instance +func (n *SequenceNode) GetToken() *token.Token { + return n.Start +} + +// AddColumn add column number to child nodes recursively +func (n *SequenceNode) AddColumn(col int) { + n.Start.AddColumn(col) + n.End.AddColumn(col) + for _, value := range n.Values { + value.AddColumn(col) + } +} + +func (n *SequenceNode) flowStyleString() string { + values := []string{} + for _, value := range n.Values { + values = append(values, value.String()) + } + return fmt.Sprintf("[%s]", strings.Join(values, ", ")) +} + +func (n *SequenceNode) blockStyleString() string { + space := strings.Repeat(" ", n.Start.Position.Column-1) + values := []string{} + if n.Comment != nil { + values = append(values, n.Comment.StringWithSpace(n.Start.Position.Column-1)) + } + + for idx, value := range n.Values { + if value == nil { + continue + } + valueStr := value.String() + newLinePrefix := "" + if strings.HasPrefix(valueStr, "\n") { + valueStr = valueStr[1:] + newLinePrefix = "\n" + } + splittedValues := strings.Split(valueStr, "\n") + trimmedFirstValue := strings.TrimLeft(splittedValues[0], " ") + diffLength := len(splittedValues[0]) - len(trimmedFirstValue) + if len(splittedValues) > 1 && value.Type() == StringType || value.Type() == LiteralType { + // If multi-line string, the space characters for indent have already been added, so delete them. + prefix := space + " " + for i := 1; i < len(splittedValues); i++ { + splittedValues[i] = strings.TrimPrefix(splittedValues[i], prefix) + } + } + newValues := []string{trimmedFirstValue} + for i := 1; i < len(splittedValues); i++ { + if len(splittedValues[i]) <= diffLength { + // this line is \n or white space only + newValues = append(newValues, "") + continue + } + trimmed := splittedValues[i][diffLength:] + newValues = append(newValues, fmt.Sprintf("%s %s", space, trimmed)) + } + newValue := strings.Join(newValues, "\n") + if len(n.ValueHeadComments) == len(n.Values) && n.ValueHeadComments[idx] != nil { + values = append(values, fmt.Sprintf("%s%s", newLinePrefix, n.ValueHeadComments[idx].StringWithSpace(n.Start.Position.Column-1))) + newLinePrefix = "" + } + values = append(values, fmt.Sprintf("%s%s- %s", newLinePrefix, space, newValue)) + } + if n.FootComment != nil { + values = append(values, n.FootComment.StringWithSpace(n.Start.Position.Column-1)) + } + return strings.Join(values, "\n") +} + +// String sequence to text +func (n *SequenceNode) String() string { + if n.IsFlowStyle || len(n.Values) == 0 { + return n.flowStyleString() + } + return n.blockStyleString() +} + +// ArrayRange implements ArrayNode protocol +func (n *SequenceNode) ArrayRange() *ArrayNodeIter { + return &ArrayNodeIter{ + idx: startRangeIndex, + values: n.Values, + } +} + +// MarshalYAML encodes to a YAML text +func (n *SequenceNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// SequenceEntryNode is the sequence entry. +type SequenceEntryNode struct { + *BaseNode + HeadComment *CommentGroupNode // head comment. + LineComment *CommentGroupNode // line comment e.g.) - # comment. + Start *token.Token // entry token. + Value Node // value node. +} + +// String node to text +func (n *SequenceEntryNode) String() string { + return "" // TODO +} + +// GetToken returns token instance +func (n *SequenceEntryNode) GetToken() *token.Token { + return n.Start +} + +// Type returns type of node +func (n *SequenceEntryNode) Type() NodeType { + return SequenceEntryType +} + +// AddColumn add column number to child nodes recursively +func (n *SequenceEntryNode) AddColumn(col int) { + n.Start.AddColumn(col) +} + +// SetComment set line comment. +func (n *SequenceEntryNode) SetComment(cm *CommentGroupNode) error { + n.LineComment = cm + return nil +} + +// Comment returns comment token instance +func (n *SequenceEntryNode) GetComment() *CommentGroupNode { + return n.LineComment +} + +// MarshalYAML +func (n *SequenceEntryNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +func (n *SequenceEntryNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// SequenceEntry creates SequenceEntryNode instance. +func SequenceEntry(start *token.Token, value Node, headComment *CommentGroupNode) *SequenceEntryNode { + return &SequenceEntryNode{ + BaseNode: &BaseNode{}, + HeadComment: headComment, + Start: start, + Value: value, + } +} + +// SequenceMergeValue creates SequenceMergeValueNode instance. +func SequenceMergeValue(values ...MapNode) *SequenceMergeValueNode { + return &SequenceMergeValueNode{ + values: values, + } +} + +// SequenceMergeValueNode is used to convert the Sequence node specified for the merge key into a MapNode format. +type SequenceMergeValueNode struct { + values []MapNode +} + +// MapRange returns MapNodeIter instance. +func (n *SequenceMergeValueNode) MapRange() *MapNodeIter { + ret := &MapNodeIter{idx: startRangeIndex} + for _, value := range n.values { + iter := value.MapRange() + ret.values = append(ret.values, iter.values...) + } + return ret +} + +// AnchorNode type of anchor node +type AnchorNode struct { + *BaseNode + Start *token.Token + Name Node + Value Node +} + +func (n *AnchorNode) stringWithoutComment() string { + return n.Value.String() +} + +func (n *AnchorNode) SetName(name string) error { + if n.Name == nil { + return ErrInvalidAnchorName + } + s, ok := n.Name.(*StringNode) + if !ok { + return ErrInvalidAnchorName + } + s.Value = name + return nil +} + +// Read implements (io.Reader).Read +func (n *AnchorNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns AnchorType +func (n *AnchorNode) Type() NodeType { return AnchorType } + +// GetToken returns token instance +func (n *AnchorNode) GetToken() *token.Token { + return n.Start +} + +func (n *AnchorNode) GetValue() any { + return n.Value.GetToken().Value +} + +// AddColumn add column number to child nodes recursively +func (n *AnchorNode) AddColumn(col int) { + n.Start.AddColumn(col) + if n.Name != nil { + n.Name.AddColumn(col) + } + if n.Value != nil { + n.Value.AddColumn(col) + } +} + +// String anchor to text +func (n *AnchorNode) String() string { + anchor := "&" + n.Name.String() + value := n.Value.String() + if s, ok := n.Value.(*SequenceNode); ok && !s.IsFlowStyle { + return fmt.Sprintf("%s\n%s", anchor, value) + } else if m, ok := n.Value.(*MappingNode); ok && !m.IsFlowStyle { + return fmt.Sprintf("%s\n%s", anchor, value) + } + if value == "" { + // implicit null value. + return anchor + } + return fmt.Sprintf("%s %s", anchor, value) +} + +// MarshalYAML encodes to a YAML text +func (n *AnchorNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// IsMergeKey returns whether it is a MergeKey node. +func (n *AnchorNode) IsMergeKey() bool { + if n.Value == nil { + return false + } + key, ok := n.Value.(MapKeyNode) + if !ok { + return false + } + return key.IsMergeKey() +} + +// AliasNode type of alias node +type AliasNode struct { + *BaseNode + Start *token.Token + Value Node +} + +func (n *AliasNode) stringWithoutComment() string { + return n.Value.String() +} + +func (n *AliasNode) SetName(name string) error { + if n.Value == nil { + return ErrInvalidAliasName + } + s, ok := n.Value.(*StringNode) + if !ok { + return ErrInvalidAliasName + } + s.Value = name + return nil +} + +// Read implements (io.Reader).Read +func (n *AliasNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns AliasType +func (n *AliasNode) Type() NodeType { return AliasType } + +// GetToken returns token instance +func (n *AliasNode) GetToken() *token.Token { + return n.Start +} + +func (n *AliasNode) GetValue() any { + return n.Value.GetToken().Value +} + +// AddColumn add column number to child nodes recursively +func (n *AliasNode) AddColumn(col int) { + n.Start.AddColumn(col) + if n.Value != nil { + n.Value.AddColumn(col) + } +} + +// String alias to text +func (n *AliasNode) String() string { + return fmt.Sprintf("*%s", n.Value.String()) +} + +// MarshalYAML encodes to a YAML text +func (n *AliasNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// IsMergeKey returns whether it is a MergeKey node. +func (n *AliasNode) IsMergeKey() bool { + return false +} + +// DirectiveNode type of directive node +type DirectiveNode struct { + *BaseNode + // Start is '%' token. + Start *token.Token + // Name is directive name e.g.) "YAML" or "TAG". + Name Node + // Values is directive values e.g.) "1.2" or "!!" and "tag:clarkevans.com,2002:app/". + Values []Node +} + +// Read implements (io.Reader).Read +func (n *DirectiveNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns DirectiveType +func (n *DirectiveNode) Type() NodeType { return DirectiveType } + +// GetToken returns token instance +func (n *DirectiveNode) GetToken() *token.Token { + return n.Start +} + +// AddColumn add column number to child nodes recursively +func (n *DirectiveNode) AddColumn(col int) { + if n.Name != nil { + n.Name.AddColumn(col) + } + for _, value := range n.Values { + value.AddColumn(col) + } +} + +// String directive to text +func (n *DirectiveNode) String() string { + values := make([]string, 0, len(n.Values)) + for _, val := range n.Values { + values = append(values, val.String()) + } + return strings.Join(append([]string{"%" + n.Name.String()}, values...), " ") +} + +// MarshalYAML encodes to a YAML text +func (n *DirectiveNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// TagNode type of tag node +type TagNode struct { + *BaseNode + Directive *DirectiveNode + Start *token.Token + Value Node +} + +func (n *TagNode) GetValue() any { + scalar, ok := n.Value.(ScalarNode) + if !ok { + return nil + } + return scalar.GetValue() +} + +func (n *TagNode) stringWithoutComment() string { + return n.Value.String() +} + +// Read implements (io.Reader).Read +func (n *TagNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns TagType +func (n *TagNode) Type() NodeType { return TagType } + +// GetToken returns token instance +func (n *TagNode) GetToken() *token.Token { + return n.Start +} + +// AddColumn add column number to child nodes recursively +func (n *TagNode) AddColumn(col int) { + n.Start.AddColumn(col) + if n.Value != nil { + n.Value.AddColumn(col) + } +} + +// String tag to text +func (n *TagNode) String() string { + value := n.Value.String() + if s, ok := n.Value.(*SequenceNode); ok && !s.IsFlowStyle { + return fmt.Sprintf("%s\n%s", n.Start.Value, value) + } else if m, ok := n.Value.(*MappingNode); ok && !m.IsFlowStyle { + return fmt.Sprintf("%s\n%s", n.Start.Value, value) + } + + return fmt.Sprintf("%s %s", n.Start.Value, value) +} + +// MarshalYAML encodes to a YAML text +func (n *TagNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// IsMergeKey returns whether it is a MergeKey node. +func (n *TagNode) IsMergeKey() bool { + if n.Value == nil { + return false + } + key, ok := n.Value.(MapKeyNode) + if !ok { + return false + } + return key.IsMergeKey() +} + +func (n *TagNode) ArrayRange() *ArrayNodeIter { + arr, ok := n.Value.(ArrayNode) + if !ok { + return nil + } + return arr.ArrayRange() +} + +// CommentNode type of comment node +type CommentNode struct { + *BaseNode + Token *token.Token +} + +// Read implements (io.Reader).Read +func (n *CommentNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns TagType +func (n *CommentNode) Type() NodeType { return CommentType } + +// GetToken returns token instance +func (n *CommentNode) GetToken() *token.Token { return n.Token } + +// AddColumn add column number to child nodes recursively +func (n *CommentNode) AddColumn(col int) { + if n.Token == nil { + return + } + n.Token.AddColumn(col) +} + +// String comment to text +func (n *CommentNode) String() string { + return fmt.Sprintf("#%s", n.Token.Value) +} + +// MarshalYAML encodes to a YAML text +func (n *CommentNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// CommentGroupNode type of comment node +type CommentGroupNode struct { + *BaseNode + Comments []*CommentNode +} + +// Read implements (io.Reader).Read +func (n *CommentGroupNode) Read(p []byte) (int, error) { + return readNode(p, n) +} + +// Type returns TagType +func (n *CommentGroupNode) Type() NodeType { return CommentType } + +// GetToken returns token instance +func (n *CommentGroupNode) GetToken() *token.Token { + if len(n.Comments) > 0 { + return n.Comments[0].Token + } + return nil +} + +// AddColumn add column number to child nodes recursively +func (n *CommentGroupNode) AddColumn(col int) { + for _, comment := range n.Comments { + comment.AddColumn(col) + } +} + +// String comment to text +func (n *CommentGroupNode) String() string { + values := []string{} + for _, comment := range n.Comments { + values = append(values, comment.String()) + } + return strings.Join(values, "\n") +} + +func (n *CommentGroupNode) StringWithSpace(col int) string { + values := []string{} + space := strings.Repeat(" ", col) + for _, comment := range n.Comments { + space := space + if checkLineBreak(comment.Token) { + space = fmt.Sprintf("%s%s", "\n", space) + } + values = append(values, space+comment.String()) + } + return strings.Join(values, "\n") +} + +// MarshalYAML encodes to a YAML text +func (n *CommentGroupNode) MarshalYAML() ([]byte, error) { + return []byte(n.String()), nil +} + +// Visitor has Visit method that is invokded for each node encountered by Walk. +// If the result visitor w is not nil, Walk visits each of the children of node with the visitor w, +// followed by a call of w.Visit(nil). +type Visitor interface { + Visit(Node) Visitor +} + +// Walk traverses an AST in depth-first order: It starts by calling v.Visit(node); node must not be nil. +// If the visitor w returned by v.Visit(node) is not nil, +// Walk is invoked recursively with visitor w for each of the non-nil children of node, +// followed by a call of w.Visit(nil). +func Walk(v Visitor, node Node) { + if v = v.Visit(node); v == nil { + return + } + + switch n := node.(type) { + case *CommentNode: + case *NullNode: + walkComment(v, n.BaseNode) + case *IntegerNode: + walkComment(v, n.BaseNode) + case *FloatNode: + walkComment(v, n.BaseNode) + case *StringNode: + walkComment(v, n.BaseNode) + case *MergeKeyNode: + walkComment(v, n.BaseNode) + case *BoolNode: + walkComment(v, n.BaseNode) + case *InfinityNode: + walkComment(v, n.BaseNode) + case *NanNode: + walkComment(v, n.BaseNode) + case *LiteralNode: + walkComment(v, n.BaseNode) + Walk(v, n.Value) + case *DirectiveNode: + walkComment(v, n.BaseNode) + Walk(v, n.Name) + for _, value := range n.Values { + Walk(v, value) + } + case *TagNode: + walkComment(v, n.BaseNode) + Walk(v, n.Value) + case *DocumentNode: + walkComment(v, n.BaseNode) + Walk(v, n.Body) + case *MappingNode: + walkComment(v, n.BaseNode) + for _, value := range n.Values { + Walk(v, value) + } + case *MappingKeyNode: + walkComment(v, n.BaseNode) + Walk(v, n.Value) + case *MappingValueNode: + walkComment(v, n.BaseNode) + Walk(v, n.Key) + Walk(v, n.Value) + case *SequenceNode: + walkComment(v, n.BaseNode) + for _, value := range n.Values { + Walk(v, value) + } + case *AnchorNode: + walkComment(v, n.BaseNode) + Walk(v, n.Name) + Walk(v, n.Value) + case *AliasNode: + walkComment(v, n.BaseNode) + Walk(v, n.Value) + } +} + +func walkComment(v Visitor, base *BaseNode) { + if base == nil { + return + } + if base.Comment == nil { + return + } + Walk(v, base.Comment) +} + +type filterWalker struct { + typ NodeType + results []Node +} + +func (v *filterWalker) Visit(n Node) Visitor { + if v.typ == n.Type() { + v.results = append(v.results, n) + } + return v +} + +type parentFinder struct { + target Node +} + +func (f *parentFinder) walk(parent, node Node) Node { + if f.target == node { + return parent + } + switch n := node.(type) { + case *CommentNode: + return nil + case *NullNode: + return nil + case *IntegerNode: + return nil + case *FloatNode: + return nil + case *StringNode: + return nil + case *MergeKeyNode: + return nil + case *BoolNode: + return nil + case *InfinityNode: + return nil + case *NanNode: + return nil + case *LiteralNode: + return f.walk(node, n.Value) + case *DirectiveNode: + if found := f.walk(node, n.Name); found != nil { + return found + } + for _, value := range n.Values { + if found := f.walk(node, value); found != nil { + return found + } + } + case *TagNode: + return f.walk(node, n.Value) + case *DocumentNode: + return f.walk(node, n.Body) + case *MappingNode: + for _, value := range n.Values { + if found := f.walk(node, value); found != nil { + return found + } + } + case *MappingKeyNode: + return f.walk(node, n.Value) + case *MappingValueNode: + if found := f.walk(node, n.Key); found != nil { + return found + } + return f.walk(node, n.Value) + case *SequenceNode: + for _, value := range n.Values { + if found := f.walk(node, value); found != nil { + return found + } + } + case *AnchorNode: + if found := f.walk(node, n.Name); found != nil { + return found + } + return f.walk(node, n.Value) + case *AliasNode: + return f.walk(node, n.Value) + } + return nil +} + +// Parent get parent node from child node. +func Parent(root, child Node) Node { + finder := &parentFinder{target: child} + return finder.walk(root, root) +} + +// Filter returns a list of nodes that match the given type. +func Filter(typ NodeType, node Node) []Node { + walker := &filterWalker{typ: typ} + Walk(walker, node) + return walker.results +} + +// FilterFile returns a list of nodes that match the given type. +func FilterFile(typ NodeType, file *File) []Node { + results := []Node{} + for _, doc := range file.Docs { + walker := &filterWalker{typ: typ} + Walk(walker, doc) + results = append(results, walker.results...) + } + return results +} + +type ErrInvalidMergeType struct { + dst Node + src Node +} + +func (e *ErrInvalidMergeType) Error() string { + return fmt.Sprintf("cannot merge %s into %s", e.src.Type(), e.dst.Type()) +} + +// Merge merge document, map, sequence node. +func Merge(dst Node, src Node) error { + if doc, ok := src.(*DocumentNode); ok { + src = doc.Body + } + err := &ErrInvalidMergeType{dst: dst, src: src} + switch dst.Type() { + case DocumentType: + node, _ := dst.(*DocumentNode) + return Merge(node.Body, src) + case MappingType: + node, _ := dst.(*MappingNode) + target, ok := src.(*MappingNode) + if !ok { + return err + } + node.Merge(target) + return nil + case SequenceType: + node, _ := dst.(*SequenceNode) + target, ok := src.(*SequenceNode) + if !ok { + return err + } + node.Merge(target) + return nil + } + return err +} diff --git a/vendor/github.com/goccy/go-yaml/context.go b/vendor/github.com/goccy/go-yaml/context.go new file mode 100644 index 0000000..133f05e --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/context.go @@ -0,0 +1,37 @@ +package yaml + +import "context" + +type ( + ctxMergeKey struct{} + ctxAnchorKey struct{} +) + +func withMerge(ctx context.Context) context.Context { + return context.WithValue(ctx, ctxMergeKey{}, true) +} + +func isMerge(ctx context.Context) bool { + v, ok := ctx.Value(ctxMergeKey{}).(bool) + if !ok { + return false + } + return v +} + +func withAnchor(ctx context.Context, name string) context.Context { + anchorMap := getAnchorMap(ctx) + if anchorMap == nil { + anchorMap = make(map[string]struct{}) + } + anchorMap[name] = struct{}{} + return context.WithValue(ctx, ctxAnchorKey{}, anchorMap) +} + +func getAnchorMap(ctx context.Context) map[string]struct{} { + v, ok := ctx.Value(ctxAnchorKey{}).(map[string]struct{}) + if !ok { + return nil + } + return v +} diff --git a/vendor/github.com/goccy/go-yaml/decode.go b/vendor/github.com/goccy/go-yaml/decode.go new file mode 100644 index 0000000..19414dd --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/decode.go @@ -0,0 +1,2026 @@ +package yaml + +import ( + "bytes" + "context" + "encoding" + "encoding/base64" + "fmt" + "io" + "maps" + "math" + "os" + "path/filepath" + "reflect" + "sort" + "strconv" + "strings" + "time" + + "github.com/goccy/go-yaml/ast" + "github.com/goccy/go-yaml/internal/errors" + "github.com/goccy/go-yaml/internal/format" + "github.com/goccy/go-yaml/parser" + "github.com/goccy/go-yaml/token" +) + +// Decoder reads and decodes YAML values from an input stream. +type Decoder struct { + reader io.Reader + referenceReaders []io.Reader + anchorNodeMap map[string]ast.Node + anchorValueMap map[string]reflect.Value + customUnmarshalerMap map[reflect.Type]func(context.Context, interface{}, []byte) error + commentMaps []CommentMap + toCommentMap CommentMap + opts []DecodeOption + referenceFiles []string + referenceDirs []string + isRecursiveDir bool + isResolvedReference bool + validator StructValidator + disallowUnknownField bool + allowDuplicateMapKey bool + useOrderedMap bool + useJSONUnmarshaler bool + parsedFile *ast.File + streamIndex int + decodeDepth int +} + +// NewDecoder returns a new decoder that reads from r. +func NewDecoder(r io.Reader, opts ...DecodeOption) *Decoder { + return &Decoder{ + reader: r, + anchorNodeMap: map[string]ast.Node{}, + anchorValueMap: map[string]reflect.Value{}, + customUnmarshalerMap: map[reflect.Type]func(context.Context, interface{}, []byte) error{}, + opts: opts, + referenceReaders: []io.Reader{}, + referenceFiles: []string{}, + referenceDirs: []string{}, + isRecursiveDir: false, + isResolvedReference: false, + disallowUnknownField: false, + allowDuplicateMapKey: false, + useOrderedMap: false, + } +} + +const maxDecodeDepth = 10000 + +func (d *Decoder) stepIn() { + d.decodeDepth++ +} + +func (d *Decoder) stepOut() { + d.decodeDepth-- +} + +func (d *Decoder) isExceededMaxDepth() bool { + return d.decodeDepth > maxDecodeDepth +} + +func (d *Decoder) castToFloat(v interface{}) interface{} { + switch vv := v.(type) { + case int: + return float64(vv) + case int8: + return float64(vv) + case int16: + return float64(vv) + case int32: + return float64(vv) + case int64: + return float64(vv) + case uint: + return float64(vv) + case uint8: + return float64(vv) + case uint16: + return float64(vv) + case uint32: + return float64(vv) + case uint64: + return float64(vv) + case float32: + return float64(vv) + case float64: + return vv + case string: + // if error occurred, return zero value + f, _ := strconv.ParseFloat(vv, 64) + return f + } + return 0 +} + +func (d *Decoder) mapKeyNodeToString(ctx context.Context, node ast.MapKeyNode) (string, error) { + key, err := d.nodeToValue(ctx, node) + if err != nil { + return "", err + } + if key == nil { + return "null", nil + } + if k, ok := key.(string); ok { + return k, nil + } + return fmt.Sprint(key), nil +} + +func (d *Decoder) setToMapValue(ctx context.Context, node ast.Node, m map[string]interface{}) error { + d.stepIn() + defer d.stepOut() + if d.isExceededMaxDepth() { + return ErrExceededMaxDepth + } + + d.setPathToCommentMap(node) + switch n := node.(type) { + case *ast.MappingValueNode: + if n.Key.IsMergeKey() { + value, err := d.getMapNode(n.Value, true) + if err != nil { + return err + } + iter := value.MapRange() + for iter.Next() { + if err := d.setToMapValue(ctx, iter.KeyValue(), m); err != nil { + return err + } + } + } else { + key, err := d.mapKeyNodeToString(ctx, n.Key) + if err != nil { + return err + } + v, err := d.nodeToValue(ctx, n.Value) + if err != nil { + return err + } + m[key] = v + } + case *ast.MappingNode: + for _, value := range n.Values { + if err := d.setToMapValue(ctx, value, m); err != nil { + return err + } + } + case *ast.AnchorNode: + anchorName := n.Name.GetToken().Value + d.anchorNodeMap[anchorName] = n.Value + } + return nil +} + +func (d *Decoder) setToOrderedMapValue(ctx context.Context, node ast.Node, m *MapSlice) error { + d.stepIn() + defer d.stepOut() + if d.isExceededMaxDepth() { + return ErrExceededMaxDepth + } + + d.setPathToCommentMap(node) + switch n := node.(type) { + case *ast.MappingValueNode: + if n.Key.IsMergeKey() { + value, err := d.getMapNode(n.Value, true) + if err != nil { + return err + } + iter := value.MapRange() + for iter.Next() { + if err := d.setToOrderedMapValue(ctx, iter.KeyValue(), m); err != nil { + return err + } + } + } else { + key, err := d.mapKeyNodeToString(ctx, n.Key) + if err != nil { + return err + } + value, err := d.nodeToValue(ctx, n.Value) + if err != nil { + return err + } + *m = append(*m, MapItem{Key: key, Value: value}) + } + case *ast.MappingNode: + for _, value := range n.Values { + if err := d.setToOrderedMapValue(ctx, value, m); err != nil { + return err + } + } + } + return nil +} + +func (d *Decoder) setPathToCommentMap(node ast.Node) { + if node == nil { + return + } + if d.toCommentMap == nil { + return + } + d.addHeadOrLineCommentToMap(node) + d.addFootCommentToMap(node) +} + +func (d *Decoder) addHeadOrLineCommentToMap(node ast.Node) { + sequence, ok := node.(*ast.SequenceNode) + if ok { + d.addSequenceNodeCommentToMap(sequence) + return + } + commentGroup := node.GetComment() + if commentGroup == nil { + return + } + texts := []string{} + targetLine := node.GetToken().Position.Line + minCommentLine := math.MaxInt + for _, comment := range commentGroup.Comments { + if minCommentLine > comment.Token.Position.Line { + minCommentLine = comment.Token.Position.Line + } + texts = append(texts, comment.Token.Value) + } + if len(texts) == 0 { + return + } + commentPath := node.GetPath() + if minCommentLine < targetLine { + switch n := node.(type) { + case *ast.MappingNode: + if len(n.Values) != 0 { + commentPath = n.Values[0].Key.GetPath() + } + case *ast.MappingValueNode: + commentPath = n.Key.GetPath() + } + d.addCommentToMap(commentPath, HeadComment(texts...)) + } else { + d.addCommentToMap(commentPath, LineComment(texts[0])) + } +} + +func (d *Decoder) addSequenceNodeCommentToMap(node *ast.SequenceNode) { + if len(node.ValueHeadComments) != 0 { + for idx, headComment := range node.ValueHeadComments { + if headComment == nil { + continue + } + texts := make([]string, 0, len(headComment.Comments)) + for _, comment := range headComment.Comments { + texts = append(texts, comment.Token.Value) + } + if len(texts) != 0 { + d.addCommentToMap(node.Values[idx].GetPath(), HeadComment(texts...)) + } + } + } + firstElemHeadComment := node.GetComment() + if firstElemHeadComment != nil { + texts := make([]string, 0, len(firstElemHeadComment.Comments)) + for _, comment := range firstElemHeadComment.Comments { + texts = append(texts, comment.Token.Value) + } + if len(texts) != 0 { + d.addCommentToMap(node.Values[0].GetPath(), HeadComment(texts...)) + } + } +} + +func (d *Decoder) addFootCommentToMap(node ast.Node) { + var ( + footComment *ast.CommentGroupNode + footCommentPath = node.GetPath() + ) + switch n := node.(type) { + case *ast.SequenceNode: + footComment = n.FootComment + if n.FootComment != nil { + footCommentPath = n.FootComment.GetPath() + } + case *ast.MappingNode: + footComment = n.FootComment + if n.FootComment != nil { + footCommentPath = n.FootComment.GetPath() + } + case *ast.MappingValueNode: + footComment = n.FootComment + if n.FootComment != nil { + footCommentPath = n.FootComment.GetPath() + } + } + if footComment == nil { + return + } + var texts []string + for _, comment := range footComment.Comments { + texts = append(texts, comment.Token.Value) + } + if len(texts) != 0 { + d.addCommentToMap(footCommentPath, FootComment(texts...)) + } +} + +func (d *Decoder) addCommentToMap(path string, comment *Comment) { + for _, c := range d.toCommentMap[path] { + if c.Position == comment.Position { + // already added same comment + return + } + } + d.toCommentMap[path] = append(d.toCommentMap[path], comment) + sort.Slice(d.toCommentMap[path], func(i, j int) bool { + return d.toCommentMap[path][i].Position < d.toCommentMap[path][j].Position + }) +} + +func (d *Decoder) nodeToValue(ctx context.Context, node ast.Node) (any, error) { + d.stepIn() + defer d.stepOut() + if d.isExceededMaxDepth() { + return nil, ErrExceededMaxDepth + } + + d.setPathToCommentMap(node) + switch n := node.(type) { + case *ast.NullNode: + return nil, nil + case *ast.StringNode: + return n.GetValue(), nil + case *ast.IntegerNode: + return n.GetValue(), nil + case *ast.FloatNode: + return n.GetValue(), nil + case *ast.BoolNode: + return n.GetValue(), nil + case *ast.InfinityNode: + return n.GetValue(), nil + case *ast.NanNode: + return n.GetValue(), nil + case *ast.TagNode: + if n.Directive != nil { + v, err := d.nodeToValue(ctx, n.Value) + if err != nil { + return nil, err + } + if v == nil { + return "", nil + } + return fmt.Sprint(v), nil + } + switch token.ReservedTagKeyword(n.Start.Value) { + case token.TimestampTag: + t, _ := d.castToTime(ctx, n.Value) + return t, nil + case token.IntegerTag: + v, err := d.nodeToValue(ctx, n.Value) + if err != nil { + return nil, err + } + i, _ := strconv.Atoi(fmt.Sprint(v)) + return i, nil + case token.FloatTag: + v, err := d.nodeToValue(ctx, n.Value) + if err != nil { + return nil, err + } + return d.castToFloat(v), nil + case token.NullTag: + return nil, nil + case token.BinaryTag: + v, err := d.nodeToValue(ctx, n.Value) + if err != nil { + return nil, err + } + str, ok := v.(string) + if !ok { + return nil, errors.ErrSyntax( + fmt.Sprintf("cannot convert %q to string", fmt.Sprint(v)), + n.Value.GetToken(), + ) + } + b, _ := base64.StdEncoding.DecodeString(str) + return b, nil + case token.BooleanTag: + v, err := d.nodeToValue(ctx, n.Value) + if err != nil { + return nil, err + } + str := strings.ToLower(fmt.Sprint(v)) + b, err := strconv.ParseBool(str) + if err == nil { + return b, nil + } + switch str { + case "yes": + return true, nil + case "no": + return false, nil + } + return nil, errors.ErrSyntax(fmt.Sprintf("cannot convert %q to boolean", fmt.Sprint(v)), n.Value.GetToken()) + case token.StringTag: + v, err := d.nodeToValue(ctx, n.Value) + if err != nil { + return nil, err + } + if v == nil { + return "", nil + } + return fmt.Sprint(v), nil + case token.MappingTag: + return d.nodeToValue(ctx, n.Value) + default: + return d.nodeToValue(ctx, n.Value) + } + case *ast.AnchorNode: + anchorName := n.Name.GetToken().Value + + // To handle the case where alias is processed recursively, the result of alias can be set to nil in advance. + d.anchorNodeMap[anchorName] = nil + anchorValue, err := d.nodeToValue(withAnchor(ctx, anchorName), n.Value) + if err != nil { + delete(d.anchorNodeMap, anchorName) + return nil, err + } + d.anchorNodeMap[anchorName] = n.Value + d.anchorValueMap[anchorName] = reflect.ValueOf(anchorValue) + return anchorValue, nil + case *ast.AliasNode: + text := n.Value.String() + if _, exists := getAnchorMap(ctx)[text]; exists { + // self recursion. + return nil, nil + } + if v, exists := d.anchorValueMap[text]; exists { + if !v.IsValid() { + return nil, nil + } + return v.Interface(), nil + } + aliasName := n.Value.GetToken().Value + return nil, errors.ErrSyntax(fmt.Sprintf("could not find alias %q", aliasName), n.Value.GetToken()) + case *ast.LiteralNode: + return n.Value.GetValue(), nil + case *ast.MappingKeyNode: + return d.nodeToValue(ctx, n.Value) + case *ast.MappingValueNode: + if n.Key.IsMergeKey() { + value, err := d.getMapNode(n.Value, true) + if err != nil { + return nil, err + } + iter := value.MapRange() + if d.useOrderedMap { + m := MapSlice{} + for iter.Next() { + if err := d.setToOrderedMapValue(ctx, iter.KeyValue(), &m); err != nil { + return nil, err + } + } + return m, nil + } + m := make(map[string]any) + for iter.Next() { + if err := d.setToMapValue(ctx, iter.KeyValue(), m); err != nil { + return nil, err + } + } + return m, nil + } + key, err := d.mapKeyNodeToString(ctx, n.Key) + if err != nil { + return nil, err + } + if d.useOrderedMap { + v, err := d.nodeToValue(ctx, n.Value) + if err != nil { + return nil, err + } + return MapSlice{{Key: key, Value: v}}, nil + } + v, err := d.nodeToValue(ctx, n.Value) + if err != nil { + return nil, err + } + return map[string]interface{}{key: v}, nil + case *ast.MappingNode: + if d.useOrderedMap { + m := make(MapSlice, 0, len(n.Values)) + for _, value := range n.Values { + if err := d.setToOrderedMapValue(ctx, value, &m); err != nil { + return nil, err + } + } + return m, nil + } + m := make(map[string]interface{}, len(n.Values)) + for _, value := range n.Values { + if err := d.setToMapValue(ctx, value, m); err != nil { + return nil, err + } + } + return m, nil + case *ast.SequenceNode: + v := make([]interface{}, 0, len(n.Values)) + for _, value := range n.Values { + vv, err := d.nodeToValue(ctx, value) + if err != nil { + return nil, err + } + v = append(v, vv) + } + return v, nil + } + return nil, nil +} + +func (d *Decoder) getMapNode(node ast.Node, isMerge bool) (ast.MapNode, error) { + d.stepIn() + defer d.stepOut() + if d.isExceededMaxDepth() { + return nil, ErrExceededMaxDepth + } + + switch n := node.(type) { + case ast.MapNode: + return n, nil + case *ast.AnchorNode: + anchorName := n.Name.GetToken().Value + d.anchorNodeMap[anchorName] = n.Value + return d.getMapNode(n.Value, isMerge) + case *ast.AliasNode: + aliasName := n.Value.GetToken().Value + node := d.anchorNodeMap[aliasName] + if node == nil { + return nil, fmt.Errorf("cannot find anchor by alias name %s", aliasName) + } + return d.getMapNode(node, isMerge) + case *ast.SequenceNode: + if !isMerge { + return nil, errors.ErrUnexpectedNodeType(node.Type(), ast.MappingType, node.GetToken()) + } + var mapNodes []ast.MapNode + for _, value := range n.Values { + mapNode, err := d.getMapNode(value, false) + if err != nil { + return nil, err + } + mapNodes = append(mapNodes, mapNode) + } + return ast.SequenceMergeValue(mapNodes...), nil + } + return nil, errors.ErrUnexpectedNodeType(node.Type(), ast.MappingType, node.GetToken()) +} + +func (d *Decoder) getArrayNode(node ast.Node) (ast.ArrayNode, error) { + d.stepIn() + defer d.stepOut() + if d.isExceededMaxDepth() { + return nil, ErrExceededMaxDepth + } + + if _, ok := node.(*ast.NullNode); ok { + return nil, nil + } + if anchor, ok := node.(*ast.AnchorNode); ok { + arrayNode, ok := anchor.Value.(ast.ArrayNode) + if ok { + return arrayNode, nil + } + + return nil, errors.ErrUnexpectedNodeType(anchor.Value.Type(), ast.SequenceType, node.GetToken()) + } + if alias, ok := node.(*ast.AliasNode); ok { + aliasName := alias.Value.GetToken().Value + node := d.anchorNodeMap[aliasName] + if node == nil { + return nil, fmt.Errorf("cannot find anchor by alias name %s", aliasName) + } + arrayNode, ok := node.(ast.ArrayNode) + if ok { + return arrayNode, nil + } + return nil, errors.ErrUnexpectedNodeType(node.Type(), ast.SequenceType, node.GetToken()) + } + arrayNode, ok := node.(ast.ArrayNode) + if !ok { + return nil, errors.ErrUnexpectedNodeType(node.Type(), ast.SequenceType, node.GetToken()) + } + return arrayNode, nil +} + +func (d *Decoder) convertValue(v reflect.Value, typ reflect.Type, src ast.Node) (reflect.Value, error) { + if typ.Kind() != reflect.String { + if !v.Type().ConvertibleTo(typ) { + + // Special case for "strings -> floats" aka scientific notation + // If the destination type is a float and the source type is a string, check if we can + // use strconv.ParseFloat to convert the string to a float. + if (typ.Kind() == reflect.Float32 || typ.Kind() == reflect.Float64) && + v.Type().Kind() == reflect.String { + if f, err := strconv.ParseFloat(v.String(), 64); err == nil { + if typ.Kind() == reflect.Float32 { + return reflect.ValueOf(float32(f)), nil + } else if typ.Kind() == reflect.Float64 { + return reflect.ValueOf(f), nil + } + // else, fall through to the error below + } + } + return reflect.Zero(typ), errors.ErrTypeMismatch(typ, v.Type(), src.GetToken()) + } + return v.Convert(typ), nil + } + // cast value to string + var strVal string + switch v.Type().Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + strVal = strconv.FormatInt(v.Int(), 10) + case reflect.Float32, reflect.Float64: + strVal = fmt.Sprint(v.Float()) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + strVal = strconv.FormatUint(v.Uint(), 10) + case reflect.Bool: + strVal = strconv.FormatBool(v.Bool()) + default: + if !v.Type().ConvertibleTo(typ) { + return reflect.Zero(typ), errors.ErrTypeMismatch(typ, v.Type(), src.GetToken()) + } + return v.Convert(typ), nil + } + + val := reflect.ValueOf(strVal) + if val.Type() != typ { + // Handle named types, e.g., `type MyString string` + val = val.Convert(typ) + } + return val, nil +} + +func (d *Decoder) deleteStructKeys(structType reflect.Type, unknownFields map[string]ast.Node) error { + if structType.Kind() == reflect.Ptr { + structType = structType.Elem() + } + structFieldMap, err := structFieldMap(structType) + if err != nil { + return err + } + + for j := 0; j < structType.NumField(); j++ { + field := structType.Field(j) + if isIgnoredStructField(field) { + continue + } + + structField, exists := structFieldMap[field.Name] + if !exists { + continue + } + + if structField.IsInline { + _ = d.deleteStructKeys(field.Type, unknownFields) + } else { + delete(unknownFields, structField.RenderName) + } + } + return nil +} + +func (d *Decoder) unmarshalableDocument(node ast.Node) ([]byte, error) { + doc := format.FormatNodeWithResolvedAlias(node, d.anchorNodeMap) + return []byte(doc), nil +} + +func (d *Decoder) unmarshalableText(node ast.Node) ([]byte, bool) { + doc := format.FormatNodeWithResolvedAlias(node, d.anchorNodeMap) + var v string + if err := Unmarshal([]byte(doc), &v); err != nil { + return nil, false + } + return []byte(v), true +} + +type jsonUnmarshaler interface { + UnmarshalJSON([]byte) error +} + +func (d *Decoder) existsTypeInCustomUnmarshalerMap(t reflect.Type) bool { + if _, exists := d.customUnmarshalerMap[t]; exists { + return true + } + + globalCustomUnmarshalerMu.Lock() + defer globalCustomUnmarshalerMu.Unlock() + if _, exists := globalCustomUnmarshalerMap[t]; exists { + return true + } + return false +} + +func (d *Decoder) unmarshalerFromCustomUnmarshalerMap(t reflect.Type) (func(context.Context, interface{}, []byte) error, bool) { + if unmarshaler, exists := d.customUnmarshalerMap[t]; exists { + return unmarshaler, exists + } + + globalCustomUnmarshalerMu.Lock() + defer globalCustomUnmarshalerMu.Unlock() + if unmarshaler, exists := globalCustomUnmarshalerMap[t]; exists { + return unmarshaler, exists + } + return nil, false +} + +func (d *Decoder) canDecodeByUnmarshaler(dst reflect.Value) bool { + ptrValue := dst.Addr() + if d.existsTypeInCustomUnmarshalerMap(ptrValue.Type()) { + return true + } + iface := ptrValue.Interface() + switch iface.(type) { + case BytesUnmarshalerContext, + BytesUnmarshaler, + InterfaceUnmarshalerContext, + InterfaceUnmarshaler, + NodeUnmarshaler, + NodeUnmarshalerContext, + *time.Time, + *time.Duration, + encoding.TextUnmarshaler: + return true + case jsonUnmarshaler: + return d.useJSONUnmarshaler + } + return false +} + +func (d *Decoder) decodeByUnmarshaler(ctx context.Context, dst reflect.Value, src ast.Node) error { + ptrValue := dst.Addr() + if unmarshaler, exists := d.unmarshalerFromCustomUnmarshalerMap(ptrValue.Type()); exists { + b, err := d.unmarshalableDocument(src) + if err != nil { + return err + } + if err := unmarshaler(ctx, ptrValue.Interface(), b); err != nil { + return err + } + return nil + } + iface := ptrValue.Interface() + + if unmarshaler, ok := iface.(BytesUnmarshalerContext); ok { + b, err := d.unmarshalableDocument(src) + if err != nil { + return err + } + if err := unmarshaler.UnmarshalYAML(ctx, b); err != nil { + return err + } + return nil + } + + if unmarshaler, ok := iface.(BytesUnmarshaler); ok { + b, err := d.unmarshalableDocument(src) + if err != nil { + return err + } + if err := unmarshaler.UnmarshalYAML(b); err != nil { + return err + } + return nil + } + + if unmarshaler, ok := iface.(InterfaceUnmarshalerContext); ok { + if err := unmarshaler.UnmarshalYAML(ctx, func(v interface{}) error { + rv := reflect.ValueOf(v) + if rv.Type().Kind() != reflect.Ptr { + return ErrDecodeRequiredPointerType + } + if err := d.decodeValue(ctx, rv.Elem(), src); err != nil { + return err + } + return nil + }); err != nil { + return err + } + return nil + } + + if unmarshaler, ok := iface.(InterfaceUnmarshaler); ok { + if err := unmarshaler.UnmarshalYAML(func(v interface{}) error { + rv := reflect.ValueOf(v) + if rv.Type().Kind() != reflect.Ptr { + return ErrDecodeRequiredPointerType + } + if err := d.decodeValue(ctx, rv.Elem(), src); err != nil { + return err + } + return nil + }); err != nil { + return err + } + return nil + } + + if unmarshaler, ok := iface.(NodeUnmarshaler); ok { + if err := unmarshaler.UnmarshalYAML(src); err != nil { + return err + } + + return nil + } + + if unmarshaler, ok := iface.(NodeUnmarshalerContext); ok { + if err := unmarshaler.UnmarshalYAML(ctx, src); err != nil { + return err + } + + return nil + } + + if _, ok := iface.(*time.Time); ok { + return d.decodeTime(ctx, dst, src) + } + + if _, ok := iface.(*time.Duration); ok { + return d.decodeDuration(ctx, dst, src) + } + + if unmarshaler, isText := iface.(encoding.TextUnmarshaler); isText { + b, ok := d.unmarshalableText(src) + if ok { + if err := unmarshaler.UnmarshalText(b); err != nil { + return err + } + return nil + } + } + + if d.useJSONUnmarshaler { + if unmarshaler, ok := iface.(jsonUnmarshaler); ok { + b, err := d.unmarshalableDocument(src) + if err != nil { + return err + } + jsonBytes, err := YAMLToJSON(b) + if err != nil { + return err + } + jsonBytes = bytes.TrimRight(jsonBytes, "\n") + if err := unmarshaler.UnmarshalJSON(jsonBytes); err != nil { + return err + } + return nil + } + } + + return errors.New("does not implemented Unmarshaler") +} + +var ( + astNodeType = reflect.TypeOf((*ast.Node)(nil)).Elem() +) + +func (d *Decoder) decodeValue(ctx context.Context, dst reflect.Value, src ast.Node) error { + d.stepIn() + defer d.stepOut() + if d.isExceededMaxDepth() { + return ErrExceededMaxDepth + } + if !dst.IsValid() { + return nil + } + + if src.Type() == ast.AnchorType { + anchor, _ := src.(*ast.AnchorNode) + anchorName := anchor.Name.GetToken().Value + if err := d.decodeValue(withAnchor(ctx, anchorName), dst, anchor.Value); err != nil { + return err + } + d.anchorValueMap[anchorName] = dst + return nil + } + if d.canDecodeByUnmarshaler(dst) { + if err := d.decodeByUnmarshaler(ctx, dst, src); err != nil { + return err + } + return nil + } + valueType := dst.Type() + switch valueType.Kind() { + case reflect.Ptr: + if dst.IsNil() { + return nil + } + if src.Type() == ast.NullType { + // set nil value to pointer + dst.Set(reflect.Zero(valueType)) + return nil + } + v := d.createDecodableValue(dst.Type()) + if err := d.decodeValue(ctx, v, src); err != nil { + return err + } + castedValue, err := d.castToAssignableValue(v, dst.Type(), src) + if err != nil { + return err + } + dst.Set(castedValue) + case reflect.Interface: + if dst.Type() == astNodeType { + dst.Set(reflect.ValueOf(src)) + return nil + } + srcVal, err := d.nodeToValue(ctx, src) + if err != nil { + return err + } + v := reflect.ValueOf(srcVal) + if v.IsValid() { + dst.Set(v) + } else { + dst.Set(reflect.Zero(valueType)) + } + case reflect.Map: + return d.decodeMap(ctx, dst, src) + case reflect.Array: + return d.decodeArray(ctx, dst, src) + case reflect.Slice: + if mapSlice, ok := dst.Addr().Interface().(*MapSlice); ok { + return d.decodeMapSlice(ctx, mapSlice, src) + } + return d.decodeSlice(ctx, dst, src) + case reflect.Struct: + if mapItem, ok := dst.Addr().Interface().(*MapItem); ok { + return d.decodeMapItem(ctx, mapItem, src) + } + return d.decodeStruct(ctx, dst, src) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + v, err := d.nodeToValue(ctx, src) + if err != nil { + return err + } + switch vv := v.(type) { + case int64: + if !dst.OverflowInt(vv) { + dst.SetInt(vv) + return nil + } + case uint64: + if vv <= math.MaxInt64 && !dst.OverflowInt(int64(vv)) { + dst.SetInt(int64(vv)) + return nil + } + case float64: + if vv <= math.MaxInt64 && !dst.OverflowInt(int64(vv)) { + dst.SetInt(int64(vv)) + return nil + } + case string: // handle scientific notation + if i, err := strconv.ParseFloat(vv, 64); err == nil { + if 0 <= i && i <= math.MaxUint64 && !dst.OverflowInt(int64(i)) { + dst.SetInt(int64(i)) + return nil + } + } else { // couldn't be parsed as float + return errors.ErrTypeMismatch(valueType, reflect.TypeOf(v), src.GetToken()) + } + default: + return errors.ErrTypeMismatch(valueType, reflect.TypeOf(v), src.GetToken()) + } + return errors.ErrOverflow(valueType, fmt.Sprint(v), src.GetToken()) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + v, err := d.nodeToValue(ctx, src) + if err != nil { + return err + } + switch vv := v.(type) { + case int64: + if 0 <= vv && !dst.OverflowUint(uint64(vv)) { + dst.SetUint(uint64(vv)) + return nil + } + case uint64: + if !dst.OverflowUint(vv) { + dst.SetUint(vv) + return nil + } + case float64: + if 0 <= vv && vv <= math.MaxUint64 && !dst.OverflowUint(uint64(vv)) { + dst.SetUint(uint64(vv)) + return nil + } + case string: // handle scientific notation + if i, err := strconv.ParseFloat(vv, 64); err == nil { + if 0 <= i && i <= math.MaxUint64 && !dst.OverflowUint(uint64(i)) { + dst.SetUint(uint64(i)) + return nil + } + } else { // couldn't be parsed as float + return errors.ErrTypeMismatch(valueType, reflect.TypeOf(v), src.GetToken()) + } + + default: + return errors.ErrTypeMismatch(valueType, reflect.TypeOf(v), src.GetToken()) + } + return errors.ErrOverflow(valueType, fmt.Sprint(v), src.GetToken()) + } + srcVal, err := d.nodeToValue(ctx, src) + if err != nil { + return err + } + v := reflect.ValueOf(srcVal) + if v.IsValid() { + convertedValue, err := d.convertValue(v, dst.Type(), src) + if err != nil { + return err + } + dst.Set(convertedValue) + } + return nil +} + +func (d *Decoder) createDecodableValue(typ reflect.Type) reflect.Value { + for { + if typ.Kind() == reflect.Ptr { + typ = typ.Elem() + continue + } + break + } + return reflect.New(typ).Elem() +} + +func (d *Decoder) castToAssignableValue(value reflect.Value, target reflect.Type, src ast.Node) (reflect.Value, error) { + if target.Kind() != reflect.Ptr { + if !value.Type().AssignableTo(target) { + return reflect.Value{}, errors.ErrTypeMismatch(target, value.Type(), src.GetToken()) + } + return value, nil + } + + const maxAddrCount = 5 + + for i := 0; i < maxAddrCount; i++ { + if value.Type().AssignableTo(target) { + break + } + if !value.CanAddr() { + break + } + value = value.Addr() + } + if !value.Type().AssignableTo(target) { + return reflect.Value{}, errors.ErrTypeMismatch(target, value.Type(), src.GetToken()) + } + return value, nil +} + +func (d *Decoder) createDecodedNewValue( + ctx context.Context, typ reflect.Type, defaultVal reflect.Value, node ast.Node, +) (reflect.Value, error) { + if node.Type() == ast.AliasType { + aliasName := node.(*ast.AliasNode).Value.GetToken().Value + value := d.anchorValueMap[aliasName] + if value.IsValid() { + v, err := d.castToAssignableValue(value, typ, node) + if err == nil { + return v, nil + } + } + anchor, exists := d.anchorNodeMap[aliasName] + if exists { + node = anchor + } + } + var newValue reflect.Value + if node.Type() == ast.NullType { + newValue = reflect.New(typ).Elem() + } else { + newValue = d.createDecodableValue(typ) + } + for defaultVal.Kind() == reflect.Ptr { + defaultVal = defaultVal.Elem() + } + if defaultVal.IsValid() && defaultVal.Type().AssignableTo(newValue.Type()) { + newValue.Set(defaultVal) + } + if node.Type() != ast.NullType { + if err := d.decodeValue(ctx, newValue, node); err != nil { + return reflect.Value{}, err + } + } + return d.castToAssignableValue(newValue, typ, node) +} + +func (d *Decoder) keyToNodeMap(ctx context.Context, node ast.Node, ignoreMergeKey bool, getKeyOrValueNode func(*ast.MapNodeIter) ast.Node) (map[string]ast.Node, error) { + d.stepIn() + defer d.stepOut() + if d.isExceededMaxDepth() { + return nil, ErrExceededMaxDepth + } + + mapNode, err := d.getMapNode(node, false) + if err != nil { + return nil, err + } + keyMap := map[string]struct{}{} + keyToNodeMap := map[string]ast.Node{} + mapIter := mapNode.MapRange() + for mapIter.Next() { + keyNode := mapIter.Key() + if keyNode.IsMergeKey() { + if ignoreMergeKey { + continue + } + mergeMap, err := d.keyToNodeMap(ctx, mapIter.Value(), ignoreMergeKey, getKeyOrValueNode) + if err != nil { + return nil, err + } + for k, v := range mergeMap { + if err := d.validateDuplicateKey(keyMap, k, v); err != nil { + return nil, err + } + keyToNodeMap[k] = v + } + } else { + keyVal, err := d.nodeToValue(ctx, keyNode) + if err != nil { + return nil, err + } + key, ok := keyVal.(string) + if !ok { + return nil, err + } + if err := d.validateDuplicateKey(keyMap, key, keyNode); err != nil { + return nil, err + } + keyToNodeMap[key] = getKeyOrValueNode(mapIter) + } + } + return keyToNodeMap, nil +} + +func (d *Decoder) keyToKeyNodeMap(ctx context.Context, node ast.Node, ignoreMergeKey bool) (map[string]ast.Node, error) { + m, err := d.keyToNodeMap(ctx, node, ignoreMergeKey, func(nodeMap *ast.MapNodeIter) ast.Node { return nodeMap.Key() }) + if err != nil { + return nil, err + } + return m, nil +} + +func (d *Decoder) keyToValueNodeMap(ctx context.Context, node ast.Node, ignoreMergeKey bool) (map[string]ast.Node, error) { + m, err := d.keyToNodeMap(ctx, node, ignoreMergeKey, func(nodeMap *ast.MapNodeIter) ast.Node { return nodeMap.Value() }) + if err != nil { + return nil, err + } + return m, nil +} + +func (d *Decoder) setDefaultValueIfConflicted(v reflect.Value, fieldMap StructFieldMap) error { + for v.Type().Kind() == reflect.Ptr { + v = v.Elem() + } + typ := v.Type() + if typ.Kind() != reflect.Struct { + return nil + } + embeddedStructFieldMap, err := structFieldMap(typ) + if err != nil { + return err + } + for i := 0; i < typ.NumField(); i++ { + field := typ.Field(i) + if isIgnoredStructField(field) { + continue + } + structField := embeddedStructFieldMap[field.Name] + if !fieldMap.isIncludedRenderName(structField.RenderName) { + continue + } + // if declared same key name, set default value + fieldValue := v.Field(i) + if fieldValue.CanSet() { + fieldValue.Set(reflect.Zero(fieldValue.Type())) + } + } + return nil +} + +// This is a subset of the formats allowed by the regular expression +// defined at http://yaml.org/type/timestamp.html. +var allowedTimestampFormats = []string{ + "2006-1-2T15:4:5.999999999Z07:00", // RCF3339Nano with short date fields. + "2006-1-2t15:4:5.999999999Z07:00", // RFC3339Nano with short date fields and lower-case "t". + "2006-1-2 15:4:5.999999999", // space separated with no time zone + "2006-1-2", // date only +} + +func (d *Decoder) castToTime(ctx context.Context, src ast.Node) (time.Time, error) { + if src == nil { + return time.Time{}, nil + } + v, err := d.nodeToValue(ctx, src) + if err != nil { + return time.Time{}, err + } + if t, ok := v.(time.Time); ok { + return t, nil + } + s, ok := v.(string) + if !ok { + return time.Time{}, errors.ErrTypeMismatch(reflect.TypeOf(time.Time{}), reflect.TypeOf(v), src.GetToken()) + } + for _, format := range allowedTimestampFormats { + t, err := time.Parse(format, s) + if err != nil { + // invalid format + continue + } + return t, nil + } + return time.Time{}, nil +} + +func (d *Decoder) decodeTime(ctx context.Context, dst reflect.Value, src ast.Node) error { + t, err := d.castToTime(ctx, src) + if err != nil { + return err + } + dst.Set(reflect.ValueOf(t)) + return nil +} + +func (d *Decoder) castToDuration(ctx context.Context, src ast.Node) (time.Duration, error) { + if src == nil { + return 0, nil + } + v, err := d.nodeToValue(ctx, src) + if err != nil { + return 0, err + } + if t, ok := v.(time.Duration); ok { + return t, nil + } + s, ok := v.(string) + if !ok { + return 0, errors.ErrTypeMismatch(reflect.TypeOf(time.Duration(0)), reflect.TypeOf(v), src.GetToken()) + } + t, err := time.ParseDuration(s) + if err != nil { + return 0, err + } + return t, nil +} + +func (d *Decoder) decodeDuration(ctx context.Context, dst reflect.Value, src ast.Node) error { + t, err := d.castToDuration(ctx, src) + if err != nil { + return err + } + dst.Set(reflect.ValueOf(t)) + return nil +} + +// getMergeAliasName support single alias only +func (d *Decoder) getMergeAliasName(src ast.Node) string { + mapNode, err := d.getMapNode(src, true) + if err != nil { + return "" + } + mapIter := mapNode.MapRange() + for mapIter.Next() { + key := mapIter.Key() + value := mapIter.Value() + if key.IsMergeKey() && value.Type() == ast.AliasType { + return value.(*ast.AliasNode).Value.GetToken().Value + } + } + return "" +} + +func (d *Decoder) decodeStruct(ctx context.Context, dst reflect.Value, src ast.Node) error { + if src == nil { + return nil + } + d.stepIn() + defer d.stepOut() + if d.isExceededMaxDepth() { + return ErrExceededMaxDepth + } + + structType := dst.Type() + srcValue := reflect.ValueOf(src) + srcType := srcValue.Type() + if srcType.Kind() == reflect.Ptr { + srcType = srcType.Elem() + srcValue = srcValue.Elem() + } + if structType == srcType { + // dst value implements ast.Node + dst.Set(srcValue) + return nil + } + structFieldMap, err := structFieldMap(structType) + if err != nil { + return err + } + ignoreMergeKey := structFieldMap.hasMergeProperty() + keyToNodeMap, err := d.keyToValueNodeMap(ctx, src, ignoreMergeKey) + if err != nil { + return err + } + var unknownFields map[string]ast.Node + if d.disallowUnknownField { + unknownFields, err = d.keyToKeyNodeMap(ctx, src, ignoreMergeKey) + if err != nil { + return err + } + } + + aliasName := d.getMergeAliasName(src) + var foundErr error + + for i := 0; i < structType.NumField(); i++ { + field := structType.Field(i) + if isIgnoredStructField(field) { + continue + } + structField := structFieldMap[field.Name] + if structField.IsInline { + fieldValue := dst.FieldByName(field.Name) + if structField.IsAutoAlias { + if aliasName != "" { + newFieldValue := d.anchorValueMap[aliasName] + if newFieldValue.IsValid() { + value, err := d.castToAssignableValue(newFieldValue, fieldValue.Type(), d.anchorNodeMap[aliasName]) + if err != nil { + return err + } + fieldValue.Set(value) + } + } + continue + } + if !fieldValue.CanSet() { + return fmt.Errorf("cannot set embedded type as unexported field %s.%s", field.PkgPath, field.Name) + } + if fieldValue.Type().Kind() == reflect.Ptr && src.Type() == ast.NullType { + // set nil value to pointer + fieldValue.Set(reflect.Zero(fieldValue.Type())) + continue + } + mapNode := ast.Mapping(nil, false) + for k, v := range keyToNodeMap { + key := &ast.StringNode{BaseNode: &ast.BaseNode{}, Value: k} + mapNode.Values = append(mapNode.Values, ast.MappingValue(nil, key, v)) + } + newFieldValue, err := d.createDecodedNewValue(ctx, fieldValue.Type(), fieldValue, mapNode) + if d.disallowUnknownField { + if err := d.deleteStructKeys(fieldValue.Type(), unknownFields); err != nil { + return err + } + } + + if err != nil { + if foundErr != nil { + continue + } + var te *errors.TypeError + if errors.As(err, &te) { + if te.StructFieldName != nil { + fieldName := fmt.Sprintf("%s.%s", structType.Name(), *te.StructFieldName) + te.StructFieldName = &fieldName + } else { + fieldName := fmt.Sprintf("%s.%s", structType.Name(), field.Name) + te.StructFieldName = &fieldName + } + foundErr = te + continue + } else { + foundErr = err + } + continue + } + _ = d.setDefaultValueIfConflicted(newFieldValue, structFieldMap) + fieldValue.Set(newFieldValue) + continue + } + v, exists := keyToNodeMap[structField.RenderName] + if !exists { + continue + } + delete(unknownFields, structField.RenderName) + fieldValue := dst.FieldByName(field.Name) + if fieldValue.Type().Kind() == reflect.Ptr && src.Type() == ast.NullType { + // set nil value to pointer + fieldValue.Set(reflect.Zero(fieldValue.Type())) + continue + } + newFieldValue, err := d.createDecodedNewValue(ctx, fieldValue.Type(), fieldValue, v) + if err != nil { + if foundErr != nil { + continue + } + var te *errors.TypeError + if errors.As(err, &te) { + fieldName := fmt.Sprintf("%s.%s", structType.Name(), field.Name) + te.StructFieldName = &fieldName + foundErr = te + } else { + foundErr = err + } + continue + } + fieldValue.Set(newFieldValue) + } + if foundErr != nil { + return foundErr + } + + // Ignore unknown fields when parsing an inline struct (recognized by a nil token). + // Unknown fields are expected (they could be fields from the parent struct). + if len(unknownFields) != 0 && d.disallowUnknownField && src.GetToken() != nil { + for key, node := range unknownFields { + return errors.ErrUnknownField(fmt.Sprintf(`unknown field "%s"`, key), node.GetToken()) + } + } + + if d.validator != nil { + if err := d.validator.Struct(dst.Addr().Interface()); err != nil { + ev := reflect.ValueOf(err) + if ev.Type().Kind() == reflect.Slice { + for i := 0; i < ev.Len(); i++ { + fieldErr, ok := ev.Index(i).Interface().(FieldError) + if !ok { + continue + } + fieldName := fieldErr.StructField() + structField, exists := structFieldMap[fieldName] + if !exists { + continue + } + node, exists := keyToNodeMap[structField.RenderName] + if exists { + // TODO: to make FieldError message cutomizable + return errors.ErrSyntax( + fmt.Sprintf("%s", err), + d.getParentMapTokenIfExistsForValidationError(node.Type(), node.GetToken()), + ) + } else if t := src.GetToken(); t != nil && t.Prev != nil && t.Prev.Prev != nil { + // A missing required field will not be in the keyToNodeMap + // the error needs to be associated with the parent of the source node + return errors.ErrSyntax(fmt.Sprintf("%s", err), t.Prev.Prev) + } + } + } + return err + } + } + return nil +} + +// getParentMapTokenIfExists if the NodeType is a container type such as MappingType or SequenceType, +// it is necessary to return the parent MapNode's colon token to represent the entire container. +func (d *Decoder) getParentMapTokenIfExistsForValidationError(typ ast.NodeType, tk *token.Token) *token.Token { + if tk == nil { + return nil + } + if typ == ast.MappingType { + // map: + // key: value + // ^ current token ( colon ) + if tk.Prev == nil { + return tk + } + key := tk.Prev + if key.Prev == nil { + return tk + } + return key.Prev + } + if typ == ast.SequenceType { + // map: + // - value + // ^ current token ( sequence entry ) + if tk.Prev == nil { + return tk + } + return tk.Prev + } + return tk +} + +func (d *Decoder) decodeArray(ctx context.Context, dst reflect.Value, src ast.Node) error { + d.stepIn() + defer d.stepOut() + if d.isExceededMaxDepth() { + return ErrExceededMaxDepth + } + + arrayNode, err := d.getArrayNode(src) + if err != nil { + return err + } + if arrayNode == nil { + return nil + } + iter := arrayNode.ArrayRange() + arrayValue := reflect.New(dst.Type()).Elem() + arrayType := dst.Type() + elemType := arrayType.Elem() + idx := 0 + + var foundErr error + for iter.Next() { + v := iter.Value() + if elemType.Kind() == reflect.Ptr && v.Type() == ast.NullType { + // set nil value to pointer + arrayValue.Index(idx).Set(reflect.Zero(elemType)) + } else { + dstValue, err := d.createDecodedNewValue(ctx, elemType, reflect.Value{}, v) + if err != nil { + if foundErr == nil { + foundErr = err + } + continue + } + arrayValue.Index(idx).Set(dstValue) + } + idx++ + } + dst.Set(arrayValue) + if foundErr != nil { + return foundErr + } + return nil +} + +func (d *Decoder) decodeSlice(ctx context.Context, dst reflect.Value, src ast.Node) error { + d.stepIn() + defer d.stepOut() + if d.isExceededMaxDepth() { + return ErrExceededMaxDepth + } + + arrayNode, err := d.getArrayNode(src) + if err != nil { + return err + } + if arrayNode == nil { + return nil + } + iter := arrayNode.ArrayRange() + sliceType := dst.Type() + sliceValue := reflect.MakeSlice(sliceType, 0, iter.Len()) + elemType := sliceType.Elem() + + var foundErr error + for iter.Next() { + v := iter.Value() + if elemType.Kind() == reflect.Ptr && v.Type() == ast.NullType { + // set nil value to pointer + sliceValue = reflect.Append(sliceValue, reflect.Zero(elemType)) + continue + } + dstValue, err := d.createDecodedNewValue(ctx, elemType, reflect.Value{}, v) + if err != nil { + if foundErr == nil { + foundErr = err + } + continue + } + sliceValue = reflect.Append(sliceValue, dstValue) + } + dst.Set(sliceValue) + if foundErr != nil { + return foundErr + } + return nil +} + +func (d *Decoder) decodeMapItem(ctx context.Context, dst *MapItem, src ast.Node) error { + d.stepIn() + defer d.stepOut() + if d.isExceededMaxDepth() { + return ErrExceededMaxDepth + } + + mapNode, err := d.getMapNode(src, isMerge(ctx)) + if err != nil { + return err + } + mapIter := mapNode.MapRange() + if !mapIter.Next() { + return nil + } + key := mapIter.Key() + value := mapIter.Value() + if key.IsMergeKey() { + if err := d.decodeMapItem(withMerge(ctx), dst, value); err != nil { + return err + } + return nil + } + k, err := d.nodeToValue(ctx, key) + if err != nil { + return err + } + v, err := d.nodeToValue(ctx, value) + if err != nil { + return err + } + *dst = MapItem{Key: k, Value: v} + return nil +} + +func (d *Decoder) validateDuplicateKey(keyMap map[string]struct{}, key interface{}, keyNode ast.Node) error { + k, ok := key.(string) + if !ok { + return nil + } + if !d.allowDuplicateMapKey { + if _, exists := keyMap[k]; exists { + return errors.ErrDuplicateKey(fmt.Sprintf(`duplicate key "%s"`, k), keyNode.GetToken()) + } + } + keyMap[k] = struct{}{} + return nil +} + +func (d *Decoder) decodeMapSlice(ctx context.Context, dst *MapSlice, src ast.Node) error { + d.stepIn() + defer d.stepOut() + if d.isExceededMaxDepth() { + return ErrExceededMaxDepth + } + + mapNode, err := d.getMapNode(src, isMerge(ctx)) + if err != nil { + return err + } + mapSlice := MapSlice{} + mapIter := mapNode.MapRange() + keyMap := map[string]struct{}{} + for mapIter.Next() { + key := mapIter.Key() + value := mapIter.Value() + if key.IsMergeKey() { + var m MapSlice + if err := d.decodeMapSlice(withMerge(ctx), &m, value); err != nil { + return err + } + for _, v := range m { + if err := d.validateDuplicateKey(keyMap, v.Key, value); err != nil { + return err + } + mapSlice = append(mapSlice, v) + } + continue + } + k, err := d.nodeToValue(ctx, key) + if err != nil { + return err + } + if err := d.validateDuplicateKey(keyMap, k, key); err != nil { + return err + } + v, err := d.nodeToValue(ctx, value) + if err != nil { + return err + } + mapSlice = append(mapSlice, MapItem{Key: k, Value: v}) + } + *dst = mapSlice + return nil +} + +func (d *Decoder) decodeMap(ctx context.Context, dst reflect.Value, src ast.Node) error { + d.stepIn() + defer d.stepOut() + if d.isExceededMaxDepth() { + return ErrExceededMaxDepth + } + + mapNode, err := d.getMapNode(src, isMerge(ctx)) + if err != nil { + return err + } + mapType := dst.Type() + mapValue := reflect.MakeMap(mapType) + keyType := mapValue.Type().Key() + valueType := mapValue.Type().Elem() + mapIter := mapNode.MapRange() + keyMap := map[string]struct{}{} + var foundErr error + for mapIter.Next() { + key := mapIter.Key() + value := mapIter.Value() + if key.IsMergeKey() { + if err := d.decodeMap(withMerge(ctx), dst, value); err != nil { + return err + } + iter := dst.MapRange() + for iter.Next() { + if err := d.validateDuplicateKey(keyMap, iter.Key(), value); err != nil { + return err + } + mapValue.SetMapIndex(iter.Key(), iter.Value()) + } + continue + } + + k := d.createDecodableValue(keyType) + if d.canDecodeByUnmarshaler(k) { + if err := d.decodeByUnmarshaler(ctx, k, key); err != nil { + return err + } + } else { + keyVal, err := d.nodeToValue(ctx, key) + if err != nil { + return err + } + k = reflect.ValueOf(keyVal) + if k.IsValid() && k.Type().ConvertibleTo(keyType) { + k = k.Convert(keyType) + } + } + + if k.IsValid() { + if err := d.validateDuplicateKey(keyMap, k.Interface(), key); err != nil { + return err + } + } + if valueType.Kind() == reflect.Ptr && value.Type() == ast.NullType { + // set nil value to pointer + mapValue.SetMapIndex(k, reflect.Zero(valueType)) + continue + } + dstValue, err := d.createDecodedNewValue(ctx, valueType, reflect.Value{}, value) + if err != nil { + if foundErr == nil { + foundErr = err + } + } + if !k.IsValid() { + // expect nil key + mapValue.SetMapIndex(d.createDecodableValue(keyType), dstValue) + continue + } + if keyType.Kind() != k.Kind() { + return errors.ErrSyntax( + fmt.Sprintf("cannot convert %q type to %q type", k.Kind(), keyType.Kind()), + key.GetToken(), + ) + } + mapValue.SetMapIndex(k, dstValue) + } + dst.Set(mapValue) + if foundErr != nil { + return foundErr + } + return nil +} + +func (d *Decoder) fileToReader(file string) (io.Reader, error) { + reader, err := os.Open(file) + if err != nil { + return nil, err + } + return reader, nil +} + +func (d *Decoder) isYAMLFile(file string) bool { + ext := filepath.Ext(file) + if ext == ".yml" { + return true + } + if ext == ".yaml" { + return true + } + return false +} + +func (d *Decoder) readersUnderDir(dir string) ([]io.Reader, error) { + pattern := fmt.Sprintf("%s/*", dir) + matches, err := filepath.Glob(pattern) + if err != nil { + return nil, err + } + readers := []io.Reader{} + for _, match := range matches { + if !d.isYAMLFile(match) { + continue + } + reader, err := d.fileToReader(match) + if err != nil { + return nil, err + } + readers = append(readers, reader) + } + return readers, nil +} + +func (d *Decoder) readersUnderDirRecursive(dir string) ([]io.Reader, error) { + readers := []io.Reader{} + if err := filepath.Walk(dir, func(path string, info os.FileInfo, _ error) error { + if !d.isYAMLFile(path) { + return nil + } + reader, readerErr := d.fileToReader(path) + if readerErr != nil { + return readerErr + } + readers = append(readers, reader) + return nil + }); err != nil { + return nil, err + } + return readers, nil +} + +func (d *Decoder) resolveReference(ctx context.Context) error { + for _, opt := range d.opts { + if err := opt(d); err != nil { + return err + } + } + for _, file := range d.referenceFiles { + reader, err := d.fileToReader(file) + if err != nil { + return err + } + d.referenceReaders = append(d.referenceReaders, reader) + } + for _, dir := range d.referenceDirs { + if !d.isRecursiveDir { + readers, err := d.readersUnderDir(dir) + if err != nil { + return err + } + d.referenceReaders = append(d.referenceReaders, readers...) + } else { + readers, err := d.readersUnderDirRecursive(dir) + if err != nil { + return err + } + d.referenceReaders = append(d.referenceReaders, readers...) + } + } + for _, reader := range d.referenceReaders { + bytes, err := io.ReadAll(reader) + if err != nil { + return err + } + + // assign new anchor definition to anchorMap + if _, err := d.parse(ctx, bytes); err != nil { + return err + } + } + d.isResolvedReference = true + return nil +} + +func (d *Decoder) parse(ctx context.Context, bytes []byte) (*ast.File, error) { + var parseMode parser.Mode + if d.toCommentMap != nil { + parseMode = parser.ParseComments + } + var opts []parser.Option + if d.allowDuplicateMapKey { + opts = append(opts, parser.AllowDuplicateMapKey()) + } + f, err := parser.ParseBytes(bytes, parseMode, opts...) + if err != nil { + return nil, err + } + normalizedFile := &ast.File{} + for _, doc := range f.Docs { + // try to decode ast.Node to value and map anchor value to anchorMap + v, err := d.nodeToValue(ctx, doc.Body) + if err != nil { + return nil, err + } + if v != nil || (doc.Body != nil && doc.Body.Type() == ast.NullType) { + normalizedFile.Docs = append(normalizedFile.Docs, doc) + cm := CommentMap{} + maps.Copy(cm, d.toCommentMap) + d.commentMaps = append(d.commentMaps, cm) + } + for k := range d.toCommentMap { + delete(d.toCommentMap, k) + } + } + return normalizedFile, nil +} + +func (d *Decoder) isInitialized() bool { + return d.parsedFile != nil +} + +func (d *Decoder) decodeInit(ctx context.Context) error { + if !d.isResolvedReference { + if err := d.resolveReference(ctx); err != nil { + return err + } + } + var buf bytes.Buffer + if _, err := io.Copy(&buf, d.reader); err != nil { + return err + } + file, err := d.parse(ctx, buf.Bytes()) + if err != nil { + return err + } + d.parsedFile = file + return nil +} + +func (d *Decoder) decode(ctx context.Context, v reflect.Value) error { + d.decodeDepth = 0 + d.anchorValueMap = make(map[string]reflect.Value) + if len(d.parsedFile.Docs) == 0 { + // empty document. + dst := v.Elem() + if dst.IsValid() { + dst.Set(reflect.Zero(dst.Type())) + } + } + if len(d.parsedFile.Docs) <= d.streamIndex { + return io.EOF + } + body := d.parsedFile.Docs[d.streamIndex].Body + if body == nil { + return nil + } + if len(d.commentMaps) > d.streamIndex { + maps.Copy(d.toCommentMap, d.commentMaps[d.streamIndex]) + } + if err := d.decodeValue(ctx, v.Elem(), body); err != nil { + return err + } + d.streamIndex++ + return nil +} + +// Decode reads the next YAML-encoded value from its input +// and stores it in the value pointed to by v. +// +// See the documentation for Unmarshal for details about the +// conversion of YAML into a Go value. +func (d *Decoder) Decode(v interface{}) error { + return d.DecodeContext(context.Background(), v) +} + +// DecodeContext reads the next YAML-encoded value from its input +// and stores it in the value pointed to by v with context.Context. +func (d *Decoder) DecodeContext(ctx context.Context, v interface{}) error { + rv := reflect.ValueOf(v) + if !rv.IsValid() || rv.Type().Kind() != reflect.Ptr { + return ErrDecodeRequiredPointerType + } + if d.isInitialized() { + if err := d.decode(ctx, rv); err != nil { + return err + } + return nil + } + if err := d.decodeInit(ctx); err != nil { + return err + } + if err := d.decode(ctx, rv); err != nil { + return err + } + return nil +} + +// DecodeFromNode decodes node into the value pointed to by v. +func (d *Decoder) DecodeFromNode(node ast.Node, v interface{}) error { + return d.DecodeFromNodeContext(context.Background(), node, v) +} + +// DecodeFromNodeContext decodes node into the value pointed to by v with context.Context. +func (d *Decoder) DecodeFromNodeContext(ctx context.Context, node ast.Node, v interface{}) error { + rv := reflect.ValueOf(v) + if rv.Type().Kind() != reflect.Ptr { + return ErrDecodeRequiredPointerType + } + if !d.isInitialized() { + if err := d.decodeInit(ctx); err != nil { + return err + } + } + // resolve references to the anchor on the same file + if _, err := d.nodeToValue(ctx, node); err != nil { + return err + } + if err := d.decodeValue(ctx, rv.Elem(), node); err != nil { + return err + } + return nil +} diff --git a/vendor/github.com/goccy/go-yaml/encode.go b/vendor/github.com/goccy/go-yaml/encode.go new file mode 100644 index 0000000..a686f28 --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/encode.go @@ -0,0 +1,1068 @@ +package yaml + +import ( + "context" + "encoding" + "fmt" + "io" + "math" + "reflect" + "sort" + "strconv" + "strings" + "time" + + "github.com/goccy/go-yaml/ast" + "github.com/goccy/go-yaml/internal/errors" + "github.com/goccy/go-yaml/parser" + "github.com/goccy/go-yaml/printer" + "github.com/goccy/go-yaml/token" +) + +const ( + // DefaultIndentSpaces default number of space for indent + DefaultIndentSpaces = 2 +) + +// Encoder writes YAML values to an output stream. +type Encoder struct { + writer io.Writer + opts []EncodeOption + singleQuote bool + isFlowStyle bool + isJSONStyle bool + useJSONMarshaler bool + enableSmartAnchor bool + aliasRefToName map[uintptr]string + anchorRefToName map[uintptr]string + anchorNameMap map[string]struct{} + anchorCallback func(*ast.AnchorNode, interface{}) error + customMarshalerMap map[reflect.Type]func(context.Context, interface{}) ([]byte, error) + omitZero bool + omitEmpty bool + autoInt bool + useLiteralStyleIfMultiline bool + commentMap map[*Path][]*Comment + written bool + + line int + column int + offset int + indentNum int + indentLevel int + indentSequence bool +} + +// NewEncoder returns a new encoder that writes to w. +// The Encoder should be closed after use to flush all data to w. +func NewEncoder(w io.Writer, opts ...EncodeOption) *Encoder { + return &Encoder{ + writer: w, + opts: opts, + customMarshalerMap: map[reflect.Type]func(context.Context, interface{}) ([]byte, error){}, + line: 1, + column: 1, + offset: 0, + indentNum: DefaultIndentSpaces, + anchorRefToName: make(map[uintptr]string), + anchorNameMap: make(map[string]struct{}), + aliasRefToName: make(map[uintptr]string), + } +} + +// Close closes the encoder by writing any remaining data. +// It does not write a stream terminating string "...". +func (e *Encoder) Close() error { + return nil +} + +// Encode writes the YAML encoding of v to the stream. +// If multiple items are encoded to the stream, +// the second and subsequent document will be preceded with a "---" document separator, +// but the first will not. +// +// See the documentation for Marshal for details about the conversion of Go values to YAML. +func (e *Encoder) Encode(v interface{}) error { + return e.EncodeContext(context.Background(), v) +} + +// EncodeContext writes the YAML encoding of v to the stream with context.Context. +func (e *Encoder) EncodeContext(ctx context.Context, v interface{}) error { + node, err := e.EncodeToNodeContext(ctx, v) + if err != nil { + return err + } + if err := e.setCommentByCommentMap(node); err != nil { + return err + } + if !e.written { + e.written = true + } else { + // write document separator + _, _ = e.writer.Write([]byte("---\n")) + } + var p printer.Printer + _, _ = e.writer.Write(p.PrintNode(node)) + return nil +} + +// EncodeToNode convert v to ast.Node. +func (e *Encoder) EncodeToNode(v interface{}) (ast.Node, error) { + return e.EncodeToNodeContext(context.Background(), v) +} + +// EncodeToNodeContext convert v to ast.Node with context.Context. +func (e *Encoder) EncodeToNodeContext(ctx context.Context, v interface{}) (ast.Node, error) { + for _, opt := range e.opts { + if err := opt(e); err != nil { + return nil, err + } + } + if e.enableSmartAnchor { + // during the first encoding, store all mappings between alias addresses and their names. + if _, err := e.encodeValue(ctx, reflect.ValueOf(v), 1); err != nil { + return nil, err + } + e.clearSmartAnchorRef() + } + node, err := e.encodeValue(ctx, reflect.ValueOf(v), 1) + if err != nil { + return nil, err + } + return node, nil +} + +func (e *Encoder) setCommentByCommentMap(node ast.Node) error { + if e.commentMap == nil { + return nil + } + for path, comments := range e.commentMap { + n, err := path.FilterNode(node) + if err != nil { + return err + } + if n == nil { + continue + } + for _, comment := range comments { + commentTokens := []*token.Token{} + for _, text := range comment.Texts { + commentTokens = append(commentTokens, token.New(text, text, nil)) + } + commentGroup := ast.CommentGroup(commentTokens) + switch comment.Position { + case CommentHeadPosition: + if err := e.setHeadComment(node, n, commentGroup); err != nil { + return err + } + case CommentLinePosition: + if err := e.setLineComment(node, n, commentGroup); err != nil { + return err + } + case CommentFootPosition: + if err := e.setFootComment(node, n, commentGroup); err != nil { + return err + } + default: + return ErrUnknownCommentPositionType + } + } + } + return nil +} + +func (e *Encoder) setHeadComment(node ast.Node, filtered ast.Node, comment *ast.CommentGroupNode) error { + parent := ast.Parent(node, filtered) + if parent == nil { + return ErrUnsupportedHeadPositionType(node) + } + switch p := parent.(type) { + case *ast.MappingValueNode: + if err := p.SetComment(comment); err != nil { + return err + } + case *ast.MappingNode: + if err := p.SetComment(comment); err != nil { + return err + } + case *ast.SequenceNode: + if len(p.ValueHeadComments) == 0 { + p.ValueHeadComments = make([]*ast.CommentGroupNode, len(p.Values)) + } + var foundIdx int + for idx, v := range p.Values { + if v == filtered { + foundIdx = idx + break + } + } + p.ValueHeadComments[foundIdx] = comment + default: + return ErrUnsupportedHeadPositionType(node) + } + return nil +} + +func (e *Encoder) setLineComment(node ast.Node, filtered ast.Node, comment *ast.CommentGroupNode) error { + switch filtered.(type) { + case *ast.MappingValueNode, *ast.SequenceNode: + // Line comment cannot be set for mapping value node. + // It should probably be set for the parent map node + if err := e.setLineCommentToParentMapNode(node, filtered, comment); err != nil { + return err + } + default: + if err := filtered.SetComment(comment); err != nil { + return err + } + } + return nil +} + +func (e *Encoder) setLineCommentToParentMapNode(node ast.Node, filtered ast.Node, comment *ast.CommentGroupNode) error { + parent := ast.Parent(node, filtered) + if parent == nil { + return ErrUnsupportedLinePositionType(node) + } + switch p := parent.(type) { + case *ast.MappingValueNode: + if err := p.Key.SetComment(comment); err != nil { + return err + } + case *ast.MappingNode: + if err := p.SetComment(comment); err != nil { + return err + } + default: + return ErrUnsupportedLinePositionType(parent) + } + return nil +} + +func (e *Encoder) setFootComment(node ast.Node, filtered ast.Node, comment *ast.CommentGroupNode) error { + parent := ast.Parent(node, filtered) + if parent == nil { + return ErrUnsupportedFootPositionType(node) + } + switch n := parent.(type) { + case *ast.MappingValueNode: + n.FootComment = comment + case *ast.MappingNode: + n.FootComment = comment + case *ast.SequenceNode: + n.FootComment = comment + default: + return ErrUnsupportedFootPositionType(n) + } + return nil +} + +func (e *Encoder) encodeDocument(doc []byte) (ast.Node, error) { + f, err := parser.ParseBytes(doc, 0) + if err != nil { + return nil, err + } + for _, docNode := range f.Docs { + if docNode.Body != nil { + return docNode.Body, nil + } + } + return nil, nil +} + +func (e *Encoder) isInvalidValue(v reflect.Value) bool { + if !v.IsValid() { + return true + } + kind := v.Type().Kind() + if kind == reflect.Ptr && v.IsNil() { + return true + } + if kind == reflect.Interface && v.IsNil() { + return true + } + return false +} + +type jsonMarshaler interface { + MarshalJSON() ([]byte, error) +} + +func (e *Encoder) existsTypeInCustomMarshalerMap(t reflect.Type) bool { + if _, exists := e.customMarshalerMap[t]; exists { + return true + } + + globalCustomMarshalerMu.Lock() + defer globalCustomMarshalerMu.Unlock() + if _, exists := globalCustomMarshalerMap[t]; exists { + return true + } + return false +} + +func (e *Encoder) marshalerFromCustomMarshalerMap(t reflect.Type) (func(context.Context, interface{}) ([]byte, error), bool) { + if marshaler, exists := e.customMarshalerMap[t]; exists { + return marshaler, exists + } + + globalCustomMarshalerMu.Lock() + defer globalCustomMarshalerMu.Unlock() + if marshaler, exists := globalCustomMarshalerMap[t]; exists { + return marshaler, exists + } + return nil, false +} + +func (e *Encoder) canEncodeByMarshaler(v reflect.Value) bool { + if !v.CanInterface() { + return false + } + if e.existsTypeInCustomMarshalerMap(v.Type()) { + return true + } + iface := v.Interface() + switch iface.(type) { + case BytesMarshalerContext: + return true + case BytesMarshaler: + return true + case InterfaceMarshalerContext: + return true + case InterfaceMarshaler: + return true + case time.Time, *time.Time: + return true + case time.Duration: + return true + case encoding.TextMarshaler: + return true + case jsonMarshaler: + return e.useJSONMarshaler + } + return false +} + +func (e *Encoder) encodeByMarshaler(ctx context.Context, v reflect.Value, column int) (ast.Node, error) { + iface := v.Interface() + + if marshaler, exists := e.marshalerFromCustomMarshalerMap(v.Type()); exists { + doc, err := marshaler(ctx, iface) + if err != nil { + return nil, err + } + node, err := e.encodeDocument(doc) + if err != nil { + return nil, err + } + return node, nil + } + + if marshaler, ok := iface.(BytesMarshalerContext); ok { + doc, err := marshaler.MarshalYAML(ctx) + if err != nil { + return nil, err + } + node, err := e.encodeDocument(doc) + if err != nil { + return nil, err + } + return node, nil + } + + if marshaler, ok := iface.(BytesMarshaler); ok { + doc, err := marshaler.MarshalYAML() + if err != nil { + return nil, err + } + node, err := e.encodeDocument(doc) + if err != nil { + return nil, err + } + return node, nil + } + + if marshaler, ok := iface.(InterfaceMarshalerContext); ok { + marshalV, err := marshaler.MarshalYAML(ctx) + if err != nil { + return nil, err + } + return e.encodeValue(ctx, reflect.ValueOf(marshalV), column) + } + + if marshaler, ok := iface.(InterfaceMarshaler); ok { + marshalV, err := marshaler.MarshalYAML() + if err != nil { + return nil, err + } + return e.encodeValue(ctx, reflect.ValueOf(marshalV), column) + } + + if t, ok := iface.(time.Time); ok { + return e.encodeTime(t, column), nil + } + // Handle *time.Time explicitly since it implements TextMarshaler and shouldn't be treated as plain text + if t, ok := iface.(*time.Time); ok && t != nil { + return e.encodeTime(*t, column), nil + } + + if t, ok := iface.(time.Duration); ok { + return e.encodeDuration(t, column), nil + } + + if marshaler, ok := iface.(encoding.TextMarshaler); ok { + text, err := marshaler.MarshalText() + if err != nil { + return nil, err + } + node := e.encodeString(string(text), column) + return node, nil + } + + if e.useJSONMarshaler { + if marshaler, ok := iface.(jsonMarshaler); ok { + jsonBytes, err := marshaler.MarshalJSON() + if err != nil { + return nil, err + } + doc, err := JSONToYAML(jsonBytes) + if err != nil { + return nil, err + } + node, err := e.encodeDocument(doc) + if err != nil { + return nil, err + } + return node, nil + } + } + + return nil, errors.New("does not implemented Marshaler") +} + +func (e *Encoder) encodeValue(ctx context.Context, v reflect.Value, column int) (ast.Node, error) { + if e.isInvalidValue(v) { + return e.encodeNil(), nil + } + if e.canEncodeByMarshaler(v) { + node, err := e.encodeByMarshaler(ctx, v, column) + if err != nil { + return nil, err + } + return node, nil + } + switch v.Type().Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return e.encodeInt(v.Int()), nil + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + return e.encodeUint(v.Uint()), nil + case reflect.Float32: + return e.encodeFloat(v.Float(), 32), nil + case reflect.Float64: + return e.encodeFloat(v.Float(), 64), nil + case reflect.Ptr: + if value := e.encodePtrAnchor(v, column); value != nil { + return value, nil + } + return e.encodeValue(ctx, v.Elem(), column) + case reflect.Interface: + return e.encodeValue(ctx, v.Elem(), column) + case reflect.String: + return e.encodeString(v.String(), column), nil + case reflect.Bool: + return e.encodeBool(v.Bool()), nil + case reflect.Slice: + if mapSlice, ok := v.Interface().(MapSlice); ok { + return e.encodeMapSlice(ctx, mapSlice, column) + } + if value := e.encodePtrAnchor(v, column); value != nil { + return value, nil + } + return e.encodeSlice(ctx, v) + case reflect.Array: + return e.encodeArray(ctx, v) + case reflect.Struct: + if v.CanInterface() { + if mapItem, ok := v.Interface().(MapItem); ok { + return e.encodeMapItem(ctx, mapItem, column) + } + if t, ok := v.Interface().(time.Time); ok { + return e.encodeTime(t, column), nil + } + } + return e.encodeStruct(ctx, v, column) + case reflect.Map: + if value := e.encodePtrAnchor(v, column); value != nil { + return value, nil + } + return e.encodeMap(ctx, v, column) + default: + return nil, fmt.Errorf("unknown value type %s", v.Type().String()) + } +} + +func (e *Encoder) encodePtrAnchor(v reflect.Value, column int) ast.Node { + anchorName, exists := e.getAnchor(v.Pointer()) + if !exists { + return nil + } + aliasName := anchorName + alias := ast.Alias(token.New("*", "*", e.pos(column))) + alias.Value = ast.String(token.New(aliasName, aliasName, e.pos(column))) + e.setSmartAlias(aliasName, v.Pointer()) + return alias +} + +func (e *Encoder) pos(column int) *token.Position { + return &token.Position{ + Line: e.line, + Column: column, + Offset: e.offset, + IndentNum: e.indentNum, + IndentLevel: e.indentLevel, + } +} + +func (e *Encoder) encodeNil() *ast.NullNode { + value := "null" + return ast.Null(token.New(value, value, e.pos(e.column))) +} + +func (e *Encoder) encodeInt(v int64) *ast.IntegerNode { + value := strconv.FormatInt(v, 10) + return ast.Integer(token.New(value, value, e.pos(e.column))) +} + +func (e *Encoder) encodeUint(v uint64) *ast.IntegerNode { + value := strconv.FormatUint(v, 10) + return ast.Integer(token.New(value, value, e.pos(e.column))) +} + +func (e *Encoder) encodeFloat(v float64, bitSize int) ast.Node { + if v == math.Inf(0) { + value := ".inf" + return ast.Infinity(token.New(value, value, e.pos(e.column))) + } else if v == math.Inf(-1) { + value := "-.inf" + return ast.Infinity(token.New(value, value, e.pos(e.column))) + } else if math.IsNaN(v) { + value := ".nan" + return ast.Nan(token.New(value, value, e.pos(e.column))) + } + value := strconv.FormatFloat(v, 'g', -1, bitSize) + if !strings.Contains(value, ".") && !strings.Contains(value, "e") { + if e.autoInt { + return ast.Integer(token.New(value, value, e.pos(e.column))) + } + // append x.0 suffix to keep float value context + value = fmt.Sprintf("%s.0", value) + } + return ast.Float(token.New(value, value, e.pos(e.column))) +} + +func (e *Encoder) isNeedQuoted(v string) bool { + if e.isJSONStyle { + return true + } + if e.useLiteralStyleIfMultiline && strings.ContainsAny(v, "\n\r") { + return false + } + if e.isFlowStyle && strings.ContainsAny(v, `]},'"`) { + return true + } + if e.isFlowStyle { + for i := 0; i < len(v); i++ { + if v[i] != ':' { + continue + } + if i+1 < len(v) && v[i+1] == '/' { + continue + } + return true + } + } + if token.IsNeedQuoted(v) { + return true + } + return false +} + +func (e *Encoder) encodeString(v string, column int) *ast.StringNode { + if e.isNeedQuoted(v) { + if e.singleQuote { + v = quoteWith(v, '\'') + } else { + v = strconv.Quote(v) + } + } + return ast.String(token.New(v, v, e.pos(column))) +} + +func (e *Encoder) encodeBool(v bool) *ast.BoolNode { + value := strconv.FormatBool(v) + return ast.Bool(token.New(value, value, e.pos(e.column))) +} + +func (e *Encoder) encodeSlice(ctx context.Context, value reflect.Value) (*ast.SequenceNode, error) { + if e.indentSequence { + e.column += e.indentNum + defer func() { e.column -= e.indentNum }() + } + column := e.column + sequence := ast.Sequence(token.New("-", "-", e.pos(column)), e.isFlowStyle) + for i := 0; i < value.Len(); i++ { + node, err := e.encodeValue(ctx, value.Index(i), column) + if err != nil { + return nil, err + } + sequence.Values = append(sequence.Values, node) + } + return sequence, nil +} + +func (e *Encoder) encodeArray(ctx context.Context, value reflect.Value) (*ast.SequenceNode, error) { + if e.indentSequence { + e.column += e.indentNum + defer func() { e.column -= e.indentNum }() + } + column := e.column + sequence := ast.Sequence(token.New("-", "-", e.pos(column)), e.isFlowStyle) + for i := 0; i < value.Len(); i++ { + node, err := e.encodeValue(ctx, value.Index(i), column) + if err != nil { + return nil, err + } + sequence.Values = append(sequence.Values, node) + } + return sequence, nil +} + +func (e *Encoder) encodeMapItem(ctx context.Context, item MapItem, column int) (*ast.MappingValueNode, error) { + k := reflect.ValueOf(item.Key) + v := reflect.ValueOf(item.Value) + value, err := e.encodeValue(ctx, v, column) + if err != nil { + return nil, err + } + if e.isMapNode(value) { + value.AddColumn(e.indentNum) + } + if e.isTagAndMapNode(value) { + value.AddColumn(e.indentNum) + } + return ast.MappingValue( + token.New("", "", e.pos(column)), + e.encodeString(k.Interface().(string), column), + value, + ), nil +} + +func (e *Encoder) encodeMapSlice(ctx context.Context, value MapSlice, column int) (*ast.MappingNode, error) { + node := ast.Mapping(token.New("", "", e.pos(column)), e.isFlowStyle) + for _, item := range value { + encoded, err := e.encodeMapItem(ctx, item, column) + if err != nil { + return nil, err + } + node.Values = append(node.Values, encoded) + } + return node, nil +} + +func (e *Encoder) isMapNode(node ast.Node) bool { + _, ok := node.(ast.MapNode) + return ok +} + +func (e *Encoder) isTagAndMapNode(node ast.Node) bool { + tn, ok := node.(*ast.TagNode) + return ok && e.isMapNode(tn.Value) +} + +func (e *Encoder) encodeMap(ctx context.Context, value reflect.Value, column int) (ast.Node, error) { + node := ast.Mapping(token.New("", "", e.pos(column)), e.isFlowStyle) + keys := make([]interface{}, len(value.MapKeys())) + for i, k := range value.MapKeys() { + keys[i] = k.Interface() + } + sort.Slice(keys, func(i, j int) bool { + return fmt.Sprint(keys[i]) < fmt.Sprint(keys[j]) + }) + for _, key := range keys { + k := reflect.ValueOf(key) + v := value.MapIndex(k) + encoded, err := e.encodeValue(ctx, v, column) + if err != nil { + return nil, err + } + if e.isMapNode(encoded) { + encoded.AddColumn(e.indentNum) + } + if e.isTagAndMapNode(encoded) { + encoded.AddColumn(e.indentNum) + } + keyText := fmt.Sprint(key) + vRef := e.toPointer(v) + + // during the second encoding, an anchor is assigned if it is found to be used by an alias. + if aliasName, exists := e.getSmartAlias(vRef); exists { + anchorName := aliasName + anchorNode := ast.Anchor(token.New("&", "&", e.pos(column))) + anchorNode.Name = ast.String(token.New(anchorName, anchorName, e.pos(column))) + anchorNode.Value = encoded + encoded = anchorNode + } + node.Values = append(node.Values, ast.MappingValue( + nil, + e.encodeString(keyText, column), + encoded, + )) + e.setSmartAnchor(vRef, keyText) + } + return node, nil +} + +// IsZeroer is used to check whether an object is zero to determine +// whether it should be omitted when marshaling with the omitempty flag. +// One notable implementation is time.Time. +type IsZeroer interface { + IsZero() bool +} + +func (e *Encoder) isOmittedByOmitZero(v reflect.Value) bool { + kind := v.Kind() + if z, ok := v.Interface().(IsZeroer); ok { + if (kind == reflect.Ptr || kind == reflect.Interface) && v.IsNil() { + return true + } + return z.IsZero() + } + switch kind { + case reflect.String: + return len(v.String()) == 0 + case reflect.Interface, reflect.Ptr, reflect.Slice, reflect.Map: + return v.IsNil() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Struct: + vt := v.Type() + for i := v.NumField() - 1; i >= 0; i-- { + if vt.Field(i).PkgPath != "" { + continue // private field + } + if !e.isOmittedByOmitZero(v.Field(i)) { + return false + } + } + return true + } + return false +} + +func (e *Encoder) isOmittedByOmitEmptyOption(v reflect.Value) bool { + switch v.Kind() { + case reflect.String: + return len(v.String()) == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + case reflect.Slice, reflect.Map: + return v.Len() == 0 + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Bool: + return !v.Bool() + } + return false +} + +// The current implementation of the omitempty tag combines the functionality of encoding/json's omitempty and omitzero tags. +// This stems from a historical decision to respect the implementation of gopkg.in/yaml.v2, but it has caused confusion, +// so we are working to integrate it into the functionality of encoding/json. (However, this will take some time.) +// In the current implementation, in addition to the exclusion conditions of omitempty, +// if a type implements IsZero, that implementation will be used. +// Furthermore, for non-pointer structs, if all fields are eligible for exclusion, +// the struct itself will also be excluded. These behaviors are originally the functionality of omitzero. +func (e *Encoder) isOmittedByOmitEmptyTag(v reflect.Value) bool { + kind := v.Kind() + if z, ok := v.Interface().(IsZeroer); ok { + if (kind == reflect.Ptr || kind == reflect.Interface) && v.IsNil() { + return true + } + return z.IsZero() + } + switch kind { + case reflect.String: + return len(v.String()) == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + case reflect.Slice, reflect.Map: + return v.Len() == 0 + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Struct: + vt := v.Type() + for i := v.NumField() - 1; i >= 0; i-- { + if vt.Field(i).PkgPath != "" { + continue // private field + } + if !e.isOmittedByOmitEmptyTag(v.Field(i)) { + return false + } + } + return true + } + return false +} + +func (e *Encoder) encodeTime(v time.Time, column int) *ast.StringNode { + value := v.Format(time.RFC3339Nano) + if e.isJSONStyle { + value = strconv.Quote(value) + } + return ast.String(token.New(value, value, e.pos(column))) +} + +func (e *Encoder) encodeDuration(v time.Duration, column int) *ast.StringNode { + value := v.String() + if e.isJSONStyle { + value = strconv.Quote(value) + } + return ast.String(token.New(value, value, e.pos(column))) +} + +func (e *Encoder) encodeAnchor(anchorName string, value ast.Node, fieldValue reflect.Value, column int) (*ast.AnchorNode, error) { + anchorNode := ast.Anchor(token.New("&", "&", e.pos(column))) + anchorNode.Name = ast.String(token.New(anchorName, anchorName, e.pos(column))) + anchorNode.Value = value + if e.anchorCallback != nil { + if err := e.anchorCallback(anchorNode, fieldValue.Interface()); err != nil { + return nil, err + } + if snode, ok := anchorNode.Name.(*ast.StringNode); ok { + anchorName = snode.Value + } + } + if fieldValue.Kind() == reflect.Ptr { + e.setAnchor(fieldValue.Pointer(), anchorName) + } + return anchorNode, nil +} + +func (e *Encoder) encodeStruct(ctx context.Context, value reflect.Value, column int) (ast.Node, error) { + node := ast.Mapping(token.New("", "", e.pos(column)), e.isFlowStyle) + structType := value.Type() + fieldMap, err := structFieldMap(structType) + if err != nil { + return nil, err + } + hasInlineAnchorField := false + var inlineAnchorValue reflect.Value + for i := 0; i < value.NumField(); i++ { + field := structType.Field(i) + if isIgnoredStructField(field) { + continue + } + fieldValue := value.FieldByName(field.Name) + sf := fieldMap[field.Name] + if (e.omitZero || sf.IsOmitZero) && e.isOmittedByOmitZero(fieldValue) { + // omit encoding by omitzero tag or OmitZero option. + continue + } + if e.omitEmpty && e.isOmittedByOmitEmptyOption(fieldValue) { + // omit encoding by OmitEmpty option. + continue + } + if sf.IsOmitEmpty && e.isOmittedByOmitEmptyTag(fieldValue) { + // omit encoding by omitempty tag. + continue + } + ve := e + if !e.isFlowStyle && sf.IsFlow { + ve = &Encoder{} + *ve = *e + ve.isFlowStyle = true + } + encoded, err := ve.encodeValue(ctx, fieldValue, column) + if err != nil { + return nil, err + } + if e.isMapNode(encoded) { + encoded.AddColumn(e.indentNum) + } + var key ast.MapKeyNode = e.encodeString(sf.RenderName, column) + switch { + case encoded.Type() == ast.AliasType: + if aliasName := sf.AliasName; aliasName != "" { + alias, ok := encoded.(*ast.AliasNode) + if !ok { + return nil, errors.ErrUnexpectedNodeType(encoded.Type(), ast.AliasType, encoded.GetToken()) + } + got := alias.Value.String() + if aliasName != got { + return nil, fmt.Errorf("expected alias name is %q but got %q", aliasName, got) + } + } + if sf.IsInline { + // if both used alias and inline, output `<<: *alias` + key = ast.MergeKey(token.New("<<", "<<", e.pos(column))) + } + case sf.AnchorName != "": + anchorNode, err := e.encodeAnchor(sf.AnchorName, encoded, fieldValue, column) + if err != nil { + return nil, err + } + encoded = anchorNode + case sf.IsInline: + isAutoAnchor := sf.IsAutoAnchor + if !hasInlineAnchorField { + hasInlineAnchorField = isAutoAnchor + } + if isAutoAnchor { + inlineAnchorValue = fieldValue + } + mapNode, ok := encoded.(ast.MapNode) + if !ok { + // if an inline field is null, skip encoding it + if _, ok := encoded.(*ast.NullNode); ok { + continue + } + return nil, errors.New("inline value is must be map or struct type") + } + mapIter := mapNode.MapRange() + for mapIter.Next() { + mapKey := mapIter.Key() + mapValue := mapIter.Value() + keyName := mapKey.GetToken().Value + if fieldMap.isIncludedRenderName(keyName) { + // if declared the same key name, skip encoding this field + continue + } + mapKey.AddColumn(-e.indentNum) + mapValue.AddColumn(-e.indentNum) + node.Values = append(node.Values, ast.MappingValue(nil, mapKey, mapValue)) + } + continue + case sf.IsAutoAnchor: + anchorNode, err := e.encodeAnchor(sf.RenderName, encoded, fieldValue, column) + if err != nil { + return nil, err + } + encoded = anchorNode + } + node.Values = append(node.Values, ast.MappingValue(nil, key, encoded)) + } + if hasInlineAnchorField { + node.AddColumn(e.indentNum) + anchorName := "anchor" + anchorNode := ast.Anchor(token.New("&", "&", e.pos(column))) + anchorNode.Name = ast.String(token.New(anchorName, anchorName, e.pos(column))) + anchorNode.Value = node + if e.anchorCallback != nil { + if err := e.anchorCallback(anchorNode, value.Addr().Interface()); err != nil { + return nil, err + } + if snode, ok := anchorNode.Name.(*ast.StringNode); ok { + anchorName = snode.Value + } + } + if inlineAnchorValue.Kind() == reflect.Ptr { + e.setAnchor(inlineAnchorValue.Pointer(), anchorName) + } + return anchorNode, nil + } + return node, nil +} + +func (e *Encoder) toPointer(v reflect.Value) uintptr { + if e.isInvalidValue(v) { + return 0 + } + + switch v.Type().Kind() { + case reflect.Ptr: + return v.Pointer() + case reflect.Interface: + return e.toPointer(v.Elem()) + case reflect.Slice: + return v.Pointer() + case reflect.Map: + return v.Pointer() + } + return 0 +} + +func (e *Encoder) clearSmartAnchorRef() { + if !e.enableSmartAnchor { + return + } + e.anchorRefToName = make(map[uintptr]string) + e.anchorNameMap = make(map[string]struct{}) +} + +func (e *Encoder) setSmartAnchor(ptr uintptr, name string) { + if !e.enableSmartAnchor { + return + } + e.setAnchor(ptr, e.generateAnchorName(name)) +} + +func (e *Encoder) setAnchor(ptr uintptr, name string) { + if ptr == 0 { + return + } + if name == "" { + return + } + e.anchorRefToName[ptr] = name + e.anchorNameMap[name] = struct{}{} +} + +func (e *Encoder) generateAnchorName(base string) string { + if _, exists := e.anchorNameMap[base]; !exists { + return base + } + for i := 1; i < 100; i++ { + name := base + strconv.Itoa(i) + if _, exists := e.anchorNameMap[name]; exists { + continue + } + return name + } + return "" +} + +func (e *Encoder) getAnchor(ref uintptr) (string, bool) { + anchorName, exists := e.anchorRefToName[ref] + return anchorName, exists +} + +func (e *Encoder) setSmartAlias(name string, ref uintptr) { + if !e.enableSmartAnchor { + return + } + e.aliasRefToName[ref] = name +} + +func (e *Encoder) getSmartAlias(ref uintptr) (string, bool) { + if !e.enableSmartAnchor { + return "", false + } + aliasName, exists := e.aliasRefToName[ref] + return aliasName, exists +} diff --git a/vendor/github.com/goccy/go-yaml/error.go b/vendor/github.com/goccy/go-yaml/error.go new file mode 100644 index 0000000..52d3e7e --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/error.go @@ -0,0 +1,77 @@ +package yaml + +import ( + "fmt" + + "github.com/goccy/go-yaml/ast" + "github.com/goccy/go-yaml/internal/errors" +) + +var ( + ErrInvalidQuery = errors.New("invalid query") + ErrInvalidPath = errors.New("invalid path instance") + ErrInvalidPathString = errors.New("invalid path string") + ErrNotFoundNode = errors.New("node not found") + ErrUnknownCommentPositionType = errors.New("unknown comment position type") + ErrInvalidCommentMapValue = errors.New("invalid comment map value. it must be not nil value") + ErrDecodeRequiredPointerType = errors.New("required pointer type value") + ErrExceededMaxDepth = errors.New("exceeded max depth") + FormatErrorWithToken = errors.FormatError +) + +type ( + SyntaxError = errors.SyntaxError + TypeError = errors.TypeError + OverflowError = errors.OverflowError + DuplicateKeyError = errors.DuplicateKeyError + UnknownFieldError = errors.UnknownFieldError + UnexpectedNodeTypeError = errors.UnexpectedNodeTypeError + Error = errors.Error +) + +func ErrUnsupportedHeadPositionType(node ast.Node) error { + return fmt.Errorf("unsupported comment head position for %s", node.Type()) +} + +func ErrUnsupportedLinePositionType(node ast.Node) error { + return fmt.Errorf("unsupported comment line position for %s", node.Type()) +} + +func ErrUnsupportedFootPositionType(node ast.Node) error { + return fmt.Errorf("unsupported comment foot position for %s", node.Type()) +} + +// IsInvalidQueryError whether err is ErrInvalidQuery or not. +func IsInvalidQueryError(err error) bool { + return errors.Is(err, ErrInvalidQuery) +} + +// IsInvalidPathError whether err is ErrInvalidPath or not. +func IsInvalidPathError(err error) bool { + return errors.Is(err, ErrInvalidPath) +} + +// IsInvalidPathStringError whether err is ErrInvalidPathString or not. +func IsInvalidPathStringError(err error) bool { + return errors.Is(err, ErrInvalidPathString) +} + +// IsNotFoundNodeError whether err is ErrNotFoundNode or not. +func IsNotFoundNodeError(err error) bool { + return errors.Is(err, ErrNotFoundNode) +} + +// IsInvalidTokenTypeError whether err is ast.ErrInvalidTokenType or not. +func IsInvalidTokenTypeError(err error) bool { + return errors.Is(err, ast.ErrInvalidTokenType) +} + +// IsInvalidAnchorNameError whether err is ast.ErrInvalidAnchorName or not. +func IsInvalidAnchorNameError(err error) bool { + return errors.Is(err, ast.ErrInvalidAnchorName) +} + +// IsInvalidAliasNameError whether err is ast.ErrInvalidAliasName or not. +func IsInvalidAliasNameError(err error) bool { + return errors.Is(err, ast.ErrInvalidAliasName) +} diff --git a/vendor/github.com/goccy/go-yaml/internal/errors/error.go b/vendor/github.com/goccy/go-yaml/internal/errors/error.go new file mode 100644 index 0000000..b08a3fc --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/internal/errors/error.go @@ -0,0 +1,246 @@ +package errors + +import ( + "errors" + "fmt" + "reflect" + + "github.com/goccy/go-yaml/ast" + "github.com/goccy/go-yaml/printer" + "github.com/goccy/go-yaml/token" +) + +var ( + As = errors.As + Is = errors.Is + New = errors.New +) + +const ( + defaultFormatColor = false + defaultIncludeSource = true +) + +type Error interface { + error + GetToken() *token.Token + GetMessage() string + FormatError(bool, bool) string +} + +var ( + _ Error = new(SyntaxError) + _ Error = new(TypeError) + _ Error = new(OverflowError) + _ Error = new(DuplicateKeyError) + _ Error = new(UnknownFieldError) + _ Error = new(UnexpectedNodeTypeError) +) + +type SyntaxError struct { + Message string + Token *token.Token +} + +type TypeError struct { + DstType reflect.Type + SrcType reflect.Type + StructFieldName *string + Token *token.Token +} + +type OverflowError struct { + DstType reflect.Type + SrcNum string + Token *token.Token +} + +type DuplicateKeyError struct { + Message string + Token *token.Token +} + +type UnknownFieldError struct { + Message string + Token *token.Token +} + +type UnexpectedNodeTypeError struct { + Actual ast.NodeType + Expected ast.NodeType + Token *token.Token +} + +// ErrSyntax create syntax error instance with message and token +func ErrSyntax(msg string, tk *token.Token) *SyntaxError { + return &SyntaxError{ + Message: msg, + Token: tk, + } +} + +// ErrOverflow creates an overflow error instance with message and a token. +func ErrOverflow(dstType reflect.Type, num string, tk *token.Token) *OverflowError { + return &OverflowError{ + DstType: dstType, + SrcNum: num, + Token: tk, + } +} + +// ErrTypeMismatch cerates an type mismatch error instance with token. +func ErrTypeMismatch(dstType, srcType reflect.Type, token *token.Token) *TypeError { + return &TypeError{ + DstType: dstType, + SrcType: srcType, + Token: token, + } +} + +// ErrDuplicateKey creates an duplicate key error instance with token. +func ErrDuplicateKey(msg string, tk *token.Token) *DuplicateKeyError { + return &DuplicateKeyError{ + Message: msg, + Token: tk, + } +} + +// ErrUnknownField creates an unknown field error instance with token. +func ErrUnknownField(msg string, tk *token.Token) *UnknownFieldError { + return &UnknownFieldError{ + Message: msg, + Token: tk, + } +} + +func ErrUnexpectedNodeType(actual, expected ast.NodeType, tk *token.Token) *UnexpectedNodeTypeError { + return &UnexpectedNodeTypeError{ + Actual: actual, + Expected: expected, + Token: tk, + } +} + +func (e *SyntaxError) GetMessage() string { + return e.Message +} + +func (e *SyntaxError) GetToken() *token.Token { + return e.Token +} + +func (e *SyntaxError) Error() string { + return e.FormatError(defaultFormatColor, defaultIncludeSource) +} + +func (e *SyntaxError) FormatError(colored, inclSource bool) string { + return FormatError(e.Message, e.Token, colored, inclSource) +} + +func (e *OverflowError) GetMessage() string { + return e.msg() +} + +func (e *OverflowError) GetToken() *token.Token { + return e.Token +} + +func (e *OverflowError) Error() string { + return e.FormatError(defaultFormatColor, defaultIncludeSource) +} + +func (e *OverflowError) FormatError(colored, inclSource bool) string { + return FormatError(e.msg(), e.Token, colored, inclSource) +} + +func (e *OverflowError) msg() string { + return fmt.Sprintf("cannot unmarshal %s into Go value of type %s ( overflow )", e.SrcNum, e.DstType) +} + +func (e *TypeError) msg() string { + if e.StructFieldName != nil { + return fmt.Sprintf("cannot unmarshal %s into Go struct field %s of type %s", e.SrcType, *e.StructFieldName, e.DstType) + } + return fmt.Sprintf("cannot unmarshal %s into Go value of type %s", e.SrcType, e.DstType) +} + +func (e *TypeError) GetMessage() string { + return e.msg() +} + +func (e *TypeError) GetToken() *token.Token { + return e.Token +} + +func (e *TypeError) Error() string { + return e.FormatError(defaultFormatColor, defaultIncludeSource) +} + +func (e *TypeError) FormatError(colored, inclSource bool) string { + return FormatError(e.msg(), e.Token, colored, inclSource) +} + +func (e *DuplicateKeyError) GetMessage() string { + return e.Message +} + +func (e *DuplicateKeyError) GetToken() *token.Token { + return e.Token +} + +func (e *DuplicateKeyError) Error() string { + return e.FormatError(defaultFormatColor, defaultIncludeSource) +} + +func (e *DuplicateKeyError) FormatError(colored, inclSource bool) string { + return FormatError(e.Message, e.Token, colored, inclSource) +} + +func (e *UnknownFieldError) GetMessage() string { + return e.Message +} + +func (e *UnknownFieldError) GetToken() *token.Token { + return e.Token +} + +func (e *UnknownFieldError) Error() string { + return e.FormatError(defaultFormatColor, defaultIncludeSource) +} + +func (e *UnknownFieldError) FormatError(colored, inclSource bool) string { + return FormatError(e.Message, e.Token, colored, inclSource) +} + +func (e *UnexpectedNodeTypeError) GetMessage() string { + return e.msg() +} + +func (e *UnexpectedNodeTypeError) GetToken() *token.Token { + return e.Token +} + +func (e *UnexpectedNodeTypeError) Error() string { + return e.FormatError(defaultFormatColor, defaultIncludeSource) +} + +func (e *UnexpectedNodeTypeError) FormatError(colored, inclSource bool) string { + return FormatError(e.msg(), e.Token, colored, inclSource) +} + +func (e *UnexpectedNodeTypeError) msg() string { + return fmt.Sprintf("%s was used where %s is expected", e.Actual.YAMLName(), e.Expected.YAMLName()) +} + +func FormatError(errMsg string, token *token.Token, colored, inclSource bool) string { + var pp printer.Printer + if token == nil { + return pp.PrintErrorMessage(errMsg, colored) + } + pos := fmt.Sprintf("[%d:%d] ", token.Position.Line, token.Position.Column) + msg := pp.PrintErrorMessage(fmt.Sprintf("%s%s", pos, errMsg), colored) + if inclSource { + msg += "\n" + pp.PrintErrorToken(token, colored) + } + return msg +} diff --git a/vendor/github.com/goccy/go-yaml/internal/format/format.go b/vendor/github.com/goccy/go-yaml/internal/format/format.go new file mode 100644 index 0000000..2d55652 --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/internal/format/format.go @@ -0,0 +1,539 @@ +package format + +import ( + "strings" + + "github.com/goccy/go-yaml/ast" + "github.com/goccy/go-yaml/token" +) + +func FormatNodeWithResolvedAlias(n ast.Node, anchorNodeMap map[string]ast.Node) string { + tk := getFirstToken(n) + if tk == nil { + return "" + } + formatter := newFormatter(tk, hasComment(n)) + formatter.anchorNodeMap = anchorNodeMap + return formatter.format(n) +} + +func FormatNode(n ast.Node) string { + tk := getFirstToken(n) + if tk == nil { + return "" + } + return newFormatter(tk, hasComment(n)).format(n) +} + +func FormatFile(file *ast.File) string { + if len(file.Docs) == 0 { + return "" + } + tk := getFirstToken(file.Docs[0]) + if tk == nil { + return "" + } + return newFormatter(tk, hasCommentFile(file)).formatFile(file) +} + +func hasCommentFile(f *ast.File) bool { + for _, doc := range f.Docs { + if hasComment(doc.Body) { + return true + } + } + return false +} + +func hasComment(n ast.Node) bool { + if n == nil { + return false + } + switch nn := n.(type) { + case *ast.DocumentNode: + return hasComment(nn.Body) + case *ast.NullNode: + return nn.Comment != nil + case *ast.BoolNode: + return nn.Comment != nil + case *ast.IntegerNode: + return nn.Comment != nil + case *ast.FloatNode: + return nn.Comment != nil + case *ast.StringNode: + return nn.Comment != nil + case *ast.InfinityNode: + return nn.Comment != nil + case *ast.NanNode: + return nn.Comment != nil + case *ast.LiteralNode: + return nn.Comment != nil + case *ast.DirectiveNode: + if nn.Comment != nil { + return true + } + for _, value := range nn.Values { + if hasComment(value) { + return true + } + } + case *ast.TagNode: + if nn.Comment != nil { + return true + } + return hasComment(nn.Value) + case *ast.MappingNode: + if nn.Comment != nil || nn.FootComment != nil { + return true + } + for _, value := range nn.Values { + if value.Comment != nil || value.FootComment != nil { + return true + } + if hasComment(value.Key) { + return true + } + if hasComment(value.Value) { + return true + } + } + case *ast.MappingKeyNode: + return nn.Comment != nil + case *ast.MergeKeyNode: + return nn.Comment != nil + case *ast.SequenceNode: + if nn.Comment != nil || nn.FootComment != nil { + return true + } + for _, entry := range nn.Entries { + if entry.Comment != nil || entry.HeadComment != nil || entry.LineComment != nil { + return true + } + if hasComment(entry.Value) { + return true + } + } + case *ast.AnchorNode: + if nn.Comment != nil { + return true + } + if hasComment(nn.Name) || hasComment(nn.Value) { + return true + } + case *ast.AliasNode: + if nn.Comment != nil { + return true + } + if hasComment(nn.Value) { + return true + } + } + return false +} + +func getFirstToken(n ast.Node) *token.Token { + if n == nil { + return nil + } + switch nn := n.(type) { + case *ast.DocumentNode: + if nn.Start != nil { + return nn.Start + } + return getFirstToken(nn.Body) + case *ast.NullNode: + return nn.Token + case *ast.BoolNode: + return nn.Token + case *ast.IntegerNode: + return nn.Token + case *ast.FloatNode: + return nn.Token + case *ast.StringNode: + return nn.Token + case *ast.InfinityNode: + return nn.Token + case *ast.NanNode: + return nn.Token + case *ast.LiteralNode: + return nn.Start + case *ast.DirectiveNode: + return nn.Start + case *ast.TagNode: + return nn.Start + case *ast.MappingNode: + if nn.IsFlowStyle { + return nn.Start + } + if len(nn.Values) == 0 { + return nn.Start + } + return getFirstToken(nn.Values[0].Key) + case *ast.MappingKeyNode: + return nn.Start + case *ast.MergeKeyNode: + return nn.Token + case *ast.SequenceNode: + return nn.Start + case *ast.AnchorNode: + return nn.Start + case *ast.AliasNode: + return nn.Start + } + return nil +} + +type Formatter struct { + existsComment bool + tokenToOriginMap map[*token.Token]string + anchorNodeMap map[string]ast.Node +} + +func newFormatter(tk *token.Token, existsComment bool) *Formatter { + tokenToOriginMap := make(map[*token.Token]string) + for tk.Prev != nil { + tk = tk.Prev + } + tokenToOriginMap[tk] = tk.Origin + + var origin string + for tk.Next != nil { + tk = tk.Next + if tk.Type == token.CommentType { + origin += strings.Repeat("\n", strings.Count(normalizeNewLineChars(tk.Origin), "\n")) + continue + } + origin += tk.Origin + tokenToOriginMap[tk] = origin + origin = "" + } + return &Formatter{ + existsComment: existsComment, + tokenToOriginMap: tokenToOriginMap, + } +} + +func getIndentNumByFirstLineToken(tk *token.Token) int { + defaultIndent := tk.Position.Column - 1 + + // key: value + // ^ + // next + if tk.Type == token.SequenceEntryType { + // If the current token is the sequence entry. + // the indent is calculated from the column value of the current token. + return defaultIndent + } + + // key: value + // ^ + // next + if tk.Next != nil && tk.Next.Type == token.MappingValueType { + // If the current token is the key in the mapping-value, + // the indent is calculated from the column value of the current token. + return defaultIndent + } + + if tk.Prev == nil { + return defaultIndent + } + prev := tk.Prev + + // key: value + // ^ + // prev + if prev.Type == token.MappingValueType { + // If the current token is the value in the mapping-value, + // the indent is calculated from the column value of the key two steps back. + if prev.Prev == nil { + return defaultIndent + } + return prev.Prev.Position.Column - 1 + } + + // - value + // ^ + // prev + if prev.Type == token.SequenceEntryType { + // If the value is not a mapping-value and the previous token was a sequence entry, + // the indent is calculated using the column value of the sequence entry token. + return prev.Position.Column - 1 + } + + return defaultIndent +} + +func (f *Formatter) format(n ast.Node) string { + return f.trimSpacePrefix( + f.trimIndentSpace( + getIndentNumByFirstLineToken(getFirstToken(n)), + f.trimNewLineCharPrefix(f.formatNode(n)), + ), + ) +} + +func (f *Formatter) formatFile(file *ast.File) string { + if len(file.Docs) == 0 { + return "" + } + var ret string + for _, doc := range file.Docs { + ret += f.formatDocument(doc) + } + return ret +} + +func (f *Formatter) origin(tk *token.Token) string { + if tk == nil { + return "" + } + if f.existsComment { + return tk.Origin + } + return f.tokenToOriginMap[tk] +} + +func (f *Formatter) formatDocument(n *ast.DocumentNode) string { + return f.origin(n.Start) + f.formatNode(n.Body) + f.origin(n.End) +} + +func (f *Formatter) formatNull(n *ast.NullNode) string { + return f.origin(n.Token) + f.formatCommentGroup(n.Comment) +} + +func (f *Formatter) formatString(n *ast.StringNode) string { + return f.origin(n.Token) + f.formatCommentGroup(n.Comment) +} + +func (f *Formatter) formatInteger(n *ast.IntegerNode) string { + return f.origin(n.Token) + f.formatCommentGroup(n.Comment) +} + +func (f *Formatter) formatFloat(n *ast.FloatNode) string { + return f.origin(n.Token) + f.formatCommentGroup(n.Comment) +} + +func (f *Formatter) formatBool(n *ast.BoolNode) string { + return f.origin(n.Token) + f.formatCommentGroup(n.Comment) +} + +func (f *Formatter) formatInfinity(n *ast.InfinityNode) string { + return f.origin(n.Token) + f.formatCommentGroup(n.Comment) +} + +func (f *Formatter) formatNan(n *ast.NanNode) string { + return f.origin(n.Token) + f.formatCommentGroup(n.Comment) +} + +func (f *Formatter) formatLiteral(n *ast.LiteralNode) string { + return f.origin(n.Start) + f.formatCommentGroup(n.Comment) + f.origin(n.Value.Token) +} + +func (f *Formatter) formatMergeKey(n *ast.MergeKeyNode) string { + return f.origin(n.Token) +} + +func (f *Formatter) formatMappingValue(n *ast.MappingValueNode) string { + return f.formatCommentGroup(n.Comment) + + f.origin(n.Key.GetToken()) + ":" + f.formatCommentGroup(n.Key.GetComment()) + f.formatNode(n.Value) + + f.formatCommentGroup(n.FootComment) +} + +func (f *Formatter) formatDirective(n *ast.DirectiveNode) string { + ret := f.origin(n.Start) + f.formatNode(n.Name) + for _, val := range n.Values { + ret += f.formatNode(val) + } + return ret +} + +func (f *Formatter) formatMapping(n *ast.MappingNode) string { + var ret string + if n.IsFlowStyle { + ret = f.origin(n.Start) + } + ret += f.formatCommentGroup(n.Comment) + for _, value := range n.Values { + if value.CollectEntry != nil { + ret += f.origin(value.CollectEntry) + } + ret += f.formatMappingValue(value) + } + if n.IsFlowStyle { + ret += f.origin(n.End) + } + return ret +} + +func (f *Formatter) formatTag(n *ast.TagNode) string { + return f.origin(n.Start) + f.formatNode(n.Value) +} + +func (f *Formatter) formatMappingKey(n *ast.MappingKeyNode) string { + return f.origin(n.Start) + f.formatNode(n.Value) +} + +func (f *Formatter) formatSequence(n *ast.SequenceNode) string { + var ret string + if n.IsFlowStyle { + ret = f.origin(n.Start) + } + if n.Comment != nil { + // add head comment. + ret += f.formatCommentGroup(n.Comment) + } + for _, entry := range n.Entries { + ret += f.formatNode(entry) + } + if n.IsFlowStyle { + ret += f.origin(n.End) + } + ret += f.formatCommentGroup(n.FootComment) + return ret +} + +func (f *Formatter) formatSequenceEntry(n *ast.SequenceEntryNode) string { + return f.formatCommentGroup(n.HeadComment) + f.origin(n.Start) + f.formatCommentGroup(n.LineComment) + f.formatNode(n.Value) +} + +func (f *Formatter) formatAnchor(n *ast.AnchorNode) string { + return f.origin(n.Start) + f.formatNode(n.Name) + f.formatNode(n.Value) +} + +func (f *Formatter) formatAlias(n *ast.AliasNode) string { + if f.anchorNodeMap != nil { + anchorName := n.Value.GetToken().Value + node := f.anchorNodeMap[anchorName] + if node != nil { + formatted := f.formatNode(node) + // If formatted text contains newline characters, indentation needs to be considered. + if strings.Contains(formatted, "\n") { + // If the first character is not a newline, the first line should be output without indentation. + isIgnoredFirstLine := !strings.HasPrefix(formatted, "\n") + formatted = f.addIndentSpace(n.GetToken().Position.IndentNum, formatted, isIgnoredFirstLine) + } + return formatted + } + } + return f.origin(n.Start) + f.formatNode(n.Value) +} + +func (f *Formatter) formatNode(n ast.Node) string { + switch nn := n.(type) { + case *ast.DocumentNode: + return f.formatDocument(nn) + case *ast.NullNode: + return f.formatNull(nn) + case *ast.BoolNode: + return f.formatBool(nn) + case *ast.IntegerNode: + return f.formatInteger(nn) + case *ast.FloatNode: + return f.formatFloat(nn) + case *ast.StringNode: + return f.formatString(nn) + case *ast.InfinityNode: + return f.formatInfinity(nn) + case *ast.NanNode: + return f.formatNan(nn) + case *ast.LiteralNode: + return f.formatLiteral(nn) + case *ast.DirectiveNode: + return f.formatDirective(nn) + case *ast.TagNode: + return f.formatTag(nn) + case *ast.MappingNode: + return f.formatMapping(nn) + case *ast.MappingKeyNode: + return f.formatMappingKey(nn) + case *ast.MappingValueNode: + return f.formatMappingValue(nn) + case *ast.MergeKeyNode: + return f.formatMergeKey(nn) + case *ast.SequenceNode: + return f.formatSequence(nn) + case *ast.SequenceEntryNode: + return f.formatSequenceEntry(nn) + case *ast.AnchorNode: + return f.formatAnchor(nn) + case *ast.AliasNode: + return f.formatAlias(nn) + } + return "" +} + +func (f *Formatter) formatCommentGroup(g *ast.CommentGroupNode) string { + if g == nil { + return "" + } + var ret string + for _, cm := range g.Comments { + ret += f.formatComment(cm) + } + return ret +} + +func (f *Formatter) formatComment(n *ast.CommentNode) string { + if n == nil { + return "" + } + return n.Token.Origin +} + +// nolint: unused +func (f *Formatter) formatIndent(col int) string { + if col <= 1 { + return "" + } + return strings.Repeat(" ", col-1) +} + +func (f *Formatter) trimNewLineCharPrefix(v string) string { + return strings.TrimLeftFunc(v, func(r rune) bool { + return r == '\n' || r == '\r' + }) +} + +func (f *Formatter) trimSpacePrefix(v string) string { + return strings.TrimLeftFunc(v, func(r rune) bool { + return r == ' ' + }) +} + +func (f *Formatter) trimIndentSpace(trimIndentNum int, v string) string { + if trimIndentNum == 0 { + return v + } + lines := strings.Split(normalizeNewLineChars(v), "\n") + out := make([]string, 0, len(lines)) + for _, line := range lines { + var cnt int + out = append(out, strings.TrimLeftFunc(line, func(r rune) bool { + cnt++ + return r == ' ' && cnt <= trimIndentNum + })) + } + return strings.Join(out, "\n") +} + +func (f *Formatter) addIndentSpace(indentNum int, v string, isIgnoredFirstLine bool) string { + if indentNum == 0 { + return v + } + indent := strings.Repeat(" ", indentNum) + lines := strings.Split(normalizeNewLineChars(v), "\n") + out := make([]string, 0, len(lines)) + for idx, line := range lines { + if line == "" || (isIgnoredFirstLine && idx == 0) { + out = append(out, line) + continue + } + out = append(out, indent+line) + } + return strings.Join(out, "\n") +} + +// normalizeNewLineChars normalize CRLF and CR to LF. +func normalizeNewLineChars(v string) string { + return strings.ReplaceAll(strings.ReplaceAll(v, "\r\n", "\n"), "\r", "\n") +} diff --git a/vendor/github.com/goccy/go-yaml/lexer/lexer.go b/vendor/github.com/goccy/go-yaml/lexer/lexer.go new file mode 100644 index 0000000..3207f4f --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/lexer/lexer.go @@ -0,0 +1,23 @@ +package lexer + +import ( + "io" + + "github.com/goccy/go-yaml/scanner" + "github.com/goccy/go-yaml/token" +) + +// Tokenize split to token instances from string +func Tokenize(src string) token.Tokens { + var s scanner.Scanner + s.Init(src) + var tokens token.Tokens + for { + subTokens, err := s.Scan() + if err == io.EOF { + break + } + tokens.Add(subTokens...) + } + return tokens +} diff --git a/vendor/github.com/goccy/go-yaml/option.go b/vendor/github.com/goccy/go-yaml/option.go new file mode 100644 index 0000000..32dbe23 --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/option.go @@ -0,0 +1,343 @@ +package yaml + +import ( + "context" + "io" + "reflect" + + "github.com/goccy/go-yaml/ast" +) + +// DecodeOption functional option type for Decoder +type DecodeOption func(d *Decoder) error + +// ReferenceReaders pass to Decoder that reference to anchor defined by passed readers +func ReferenceReaders(readers ...io.Reader) DecodeOption { + return func(d *Decoder) error { + d.referenceReaders = append(d.referenceReaders, readers...) + return nil + } +} + +// ReferenceFiles pass to Decoder that reference to anchor defined by passed files +func ReferenceFiles(files ...string) DecodeOption { + return func(d *Decoder) error { + d.referenceFiles = files + return nil + } +} + +// ReferenceDirs pass to Decoder that reference to anchor defined by files under the passed dirs +func ReferenceDirs(dirs ...string) DecodeOption { + return func(d *Decoder) error { + d.referenceDirs = dirs + return nil + } +} + +// RecursiveDir search yaml file recursively from passed dirs by ReferenceDirs option +func RecursiveDir(isRecursive bool) DecodeOption { + return func(d *Decoder) error { + d.isRecursiveDir = isRecursive + return nil + } +} + +// Validator set StructValidator instance to Decoder +func Validator(v StructValidator) DecodeOption { + return func(d *Decoder) error { + d.validator = v + return nil + } +} + +// Strict enable DisallowUnknownField +func Strict() DecodeOption { + return func(d *Decoder) error { + d.disallowUnknownField = true + return nil + } +} + +// DisallowUnknownField causes the Decoder to return an error when the destination +// is a struct and the input contains object keys which do not match any +// non-ignored, exported fields in the destination. +func DisallowUnknownField() DecodeOption { + return func(d *Decoder) error { + d.disallowUnknownField = true + return nil + } +} + +// AllowDuplicateMapKey ignore syntax error when mapping keys that are duplicates. +func AllowDuplicateMapKey() DecodeOption { + return func(d *Decoder) error { + d.allowDuplicateMapKey = true + return nil + } +} + +// UseOrderedMap can be interpreted as a map, +// and uses MapSlice ( ordered map ) aggressively if there is no type specification +func UseOrderedMap() DecodeOption { + return func(d *Decoder) error { + d.useOrderedMap = true + return nil + } +} + +// UseJSONUnmarshaler if neither `BytesUnmarshaler` nor `InterfaceUnmarshaler` is implemented +// and `UnmashalJSON([]byte)error` is implemented, convert the argument from `YAML` to `JSON` and then call it. +func UseJSONUnmarshaler() DecodeOption { + return func(d *Decoder) error { + d.useJSONUnmarshaler = true + return nil + } +} + +// CustomUnmarshaler overrides any decoding process for the type specified in generics. +// +// NOTE: If RegisterCustomUnmarshaler and CustomUnmarshaler of DecodeOption are specified for the same type, +// the CustomUnmarshaler specified in DecodeOption takes precedence. +func CustomUnmarshaler[T any](unmarshaler func(*T, []byte) error) DecodeOption { + return func(d *Decoder) error { + var typ *T + d.customUnmarshalerMap[reflect.TypeOf(typ)] = func(ctx context.Context, v interface{}, b []byte) error { + return unmarshaler(v.(*T), b) + } + return nil + } +} + +// CustomUnmarshalerContext overrides any decoding process for the type specified in generics. +// Similar to CustomUnmarshaler, but allows passing a context to the unmarshaler function. +func CustomUnmarshalerContext[T any](unmarshaler func(context.Context, *T, []byte) error) DecodeOption { + return func(d *Decoder) error { + var typ *T + d.customUnmarshalerMap[reflect.TypeOf(typ)] = func(ctx context.Context, v interface{}, b []byte) error { + return unmarshaler(ctx, v.(*T), b) + } + return nil + } +} + +// EncodeOption functional option type for Encoder +type EncodeOption func(e *Encoder) error + +// Indent change indent number +func Indent(spaces int) EncodeOption { + return func(e *Encoder) error { + e.indentNum = spaces + return nil + } +} + +// IndentSequence causes sequence values to be indented the same value as Indent +func IndentSequence(indent bool) EncodeOption { + return func(e *Encoder) error { + e.indentSequence = indent + return nil + } +} + +// UseSingleQuote determines if single or double quotes should be preferred for strings. +func UseSingleQuote(sq bool) EncodeOption { + return func(e *Encoder) error { + e.singleQuote = sq + return nil + } +} + +// Flow encoding by flow style +func Flow(isFlowStyle bool) EncodeOption { + return func(e *Encoder) error { + e.isFlowStyle = isFlowStyle + return nil + } +} + +// WithSmartAnchor when multiple map values share the same pointer, +// an anchor is automatically assigned to the first occurrence, and aliases are used for subsequent elements. +// The map key name is used as the anchor name by default. +// If key names conflict, a suffix is automatically added to avoid collisions. +// This is an experimental feature and cannot be used simultaneously with anchor tags. +func WithSmartAnchor() EncodeOption { + return func(e *Encoder) error { + e.enableSmartAnchor = true + return nil + } +} + +// UseLiteralStyleIfMultiline causes encoding multiline strings with a literal syntax, +// no matter what characters they include +func UseLiteralStyleIfMultiline(useLiteralStyleIfMultiline bool) EncodeOption { + return func(e *Encoder) error { + e.useLiteralStyleIfMultiline = useLiteralStyleIfMultiline + return nil + } +} + +// JSON encode in JSON format +func JSON() EncodeOption { + return func(e *Encoder) error { + e.isJSONStyle = true + e.isFlowStyle = true + return nil + } +} + +// MarshalAnchor call back if encoder find an anchor during encoding +func MarshalAnchor(callback func(*ast.AnchorNode, interface{}) error) EncodeOption { + return func(e *Encoder) error { + e.anchorCallback = callback + return nil + } +} + +// UseJSONMarshaler if neither `BytesMarshaler` nor `InterfaceMarshaler` +// nor `encoding.TextMarshaler` is implemented and `MarshalJSON()([]byte, error)` is implemented, +// call `MarshalJSON` to convert the returned `JSON` to `YAML` for processing. +func UseJSONMarshaler() EncodeOption { + return func(e *Encoder) error { + e.useJSONMarshaler = true + return nil + } +} + +// CustomMarshaler overrides any encoding process for the type specified in generics. +// +// NOTE: If type T implements MarshalYAML for pointer receiver, the type specified in CustomMarshaler must be *T. +// If RegisterCustomMarshaler and CustomMarshaler of EncodeOption are specified for the same type, +// the CustomMarshaler specified in EncodeOption takes precedence. +func CustomMarshaler[T any](marshaler func(T) ([]byte, error)) EncodeOption { + return func(e *Encoder) error { + var typ T + e.customMarshalerMap[reflect.TypeOf(typ)] = func(ctx context.Context, v interface{}) ([]byte, error) { + return marshaler(v.(T)) + } + return nil + } +} + +// CustomMarshalerContext overrides any encoding process for the type specified in generics. +// Similar to CustomMarshaler, but allows passing a context to the marshaler function. +func CustomMarshalerContext[T any](marshaler func(context.Context, T) ([]byte, error)) EncodeOption { + return func(e *Encoder) error { + var typ T + e.customMarshalerMap[reflect.TypeOf(typ)] = func(ctx context.Context, v interface{}) ([]byte, error) { + return marshaler(ctx, v.(T)) + } + return nil + } +} + +// AutoInt automatically converts floating-point numbers to integers when the fractional part is zero. +// For example, a value of 1.0 will be encoded as 1. +func AutoInt() EncodeOption { + return func(e *Encoder) error { + e.autoInt = true + return nil + } +} + +// OmitEmpty behaves in the same way as the interpretation of the omitempty tag in the encoding/json library. +// set on all the fields. +// In the current implementation, the omitempty tag is not implemented in the same way as encoding/json, +// so please specify this option if you expect the same behavior. +func OmitEmpty() EncodeOption { + return func(e *Encoder) error { + e.omitEmpty = true + return nil + } +} + +// OmitZero forces the encoder to assume an `omitzero` struct tag is +// set on all the fields. See `Marshal` commentary for the `omitzero` tag logic. +func OmitZero() EncodeOption { + return func(e *Encoder) error { + e.omitZero = true + return nil + } +} + +// CommentPosition type of the position for comment. +type CommentPosition int + +const ( + CommentHeadPosition CommentPosition = CommentPosition(iota) + CommentLinePosition + CommentFootPosition +) + +func (p CommentPosition) String() string { + switch p { + case CommentHeadPosition: + return "Head" + case CommentLinePosition: + return "Line" + case CommentFootPosition: + return "Foot" + default: + return "" + } +} + +// LineComment create a one-line comment for CommentMap. +func LineComment(text string) *Comment { + return &Comment{ + Texts: []string{text}, + Position: CommentLinePosition, + } +} + +// HeadComment create a multiline comment for CommentMap. +func HeadComment(texts ...string) *Comment { + return &Comment{ + Texts: texts, + Position: CommentHeadPosition, + } +} + +// FootComment create a multiline comment for CommentMap. +func FootComment(texts ...string) *Comment { + return &Comment{ + Texts: texts, + Position: CommentFootPosition, + } +} + +// Comment raw data for comment. +type Comment struct { + Texts []string + Position CommentPosition +} + +// CommentMap map of the position of the comment and the comment information. +type CommentMap map[string][]*Comment + +// WithComment add a comment using the location and text information given in the CommentMap. +func WithComment(cm CommentMap) EncodeOption { + return func(e *Encoder) error { + commentMap := map[*Path][]*Comment{} + for k, v := range cm { + path, err := PathString(k) + if err != nil { + return err + } + commentMap[path] = v + } + e.commentMap = commentMap + return nil + } +} + +// CommentToMap apply the position and content of comments in a YAML document to a CommentMap. +func CommentToMap(cm CommentMap) DecodeOption { + return func(d *Decoder) error { + if cm == nil { + return ErrInvalidCommentMapValue + } + d.toCommentMap = cm + return nil + } +} diff --git a/vendor/github.com/goccy/go-yaml/parser/color.go b/vendor/github.com/goccy/go-yaml/parser/color.go new file mode 100644 index 0000000..aeee0dc --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/parser/color.go @@ -0,0 +1,28 @@ +package parser + +import "fmt" + +const ( + colorFgHiBlack int = iota + 90 + colorFgHiRed + colorFgHiGreen + colorFgHiYellow + colorFgHiBlue + colorFgHiMagenta + colorFgHiCyan +) + +var colorTable = []int{ + colorFgHiRed, + colorFgHiGreen, + colorFgHiYellow, + colorFgHiBlue, + colorFgHiMagenta, + colorFgHiCyan, +} + +func colorize(idx int, content string) string { + colorIdx := idx % len(colorTable) + color := colorTable[colorIdx] + return fmt.Sprintf("\x1b[1;%dm", color) + content + "\x1b[22;0m" +} diff --git a/vendor/github.com/goccy/go-yaml/parser/context.go b/vendor/github.com/goccy/go-yaml/parser/context.go new file mode 100644 index 0000000..1584b3e --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/parser/context.go @@ -0,0 +1,187 @@ +package parser + +import ( + "fmt" + "strings" + + "github.com/goccy/go-yaml/token" +) + +// context context at parsing +type context struct { + tokenRef *tokenRef + path string + isFlow bool +} + +type tokenRef struct { + tokens []*Token + size int + idx int +} + +var pathSpecialChars = []string{ + "$", "*", ".", "[", "]", +} + +func containsPathSpecialChar(path string) bool { + for _, char := range pathSpecialChars { + if strings.Contains(path, char) { + return true + } + } + return false +} + +func normalizePath(path string) string { + if containsPathSpecialChar(path) { + return fmt.Sprintf("'%s'", path) + } + return path +} + +func (c *context) currentToken() *Token { + if c.tokenRef.idx >= c.tokenRef.size { + return nil + } + return c.tokenRef.tokens[c.tokenRef.idx] +} + +func (c *context) isComment() bool { + return c.currentToken().Type() == token.CommentType +} + +func (c *context) nextToken() *Token { + if c.tokenRef.idx+1 >= c.tokenRef.size { + return nil + } + return c.tokenRef.tokens[c.tokenRef.idx+1] +} + +func (c *context) nextNotCommentToken() *Token { + for i := c.tokenRef.idx + 1; i < c.tokenRef.size; i++ { + tk := c.tokenRef.tokens[i] + if tk.Type() == token.CommentType { + continue + } + return tk + } + return nil +} + +func (c *context) isTokenNotFound() bool { + return c.currentToken() == nil +} + +func (c *context) withGroup(g *TokenGroup) *context { + ctx := *c + ctx.tokenRef = &tokenRef{ + tokens: g.Tokens, + size: len(g.Tokens), + } + return &ctx +} + +func (c *context) withChild(path string) *context { + ctx := *c + ctx.path = c.path + "." + normalizePath(path) + return &ctx +} + +func (c *context) withIndex(idx uint) *context { + ctx := *c + ctx.path = c.path + "[" + fmt.Sprint(idx) + "]" + return &ctx +} + +func (c *context) withFlow(isFlow bool) *context { + ctx := *c + ctx.isFlow = isFlow + return &ctx +} + +func newContext() *context { + return &context{ + path: "$", + } +} + +func (c *context) goNext() { + ref := c.tokenRef + if ref.size <= ref.idx+1 { + ref.idx = ref.size + } else { + ref.idx++ + } +} + +func (c *context) next() bool { + return c.tokenRef.idx < c.tokenRef.size +} + +func (c *context) insertNullToken(tk *Token) *Token { + nullToken := c.createImplicitNullToken(tk) + c.insertToken(nullToken) + c.goNext() + + return nullToken +} + +func (c *context) addNullValueToken(tk *Token) *Token { + nullToken := c.createImplicitNullToken(tk) + rawTk := nullToken.RawToken() + + // add space for map or sequence value. + rawTk.Position.Column++ + + c.addToken(nullToken) + c.goNext() + + return nullToken +} + +func (c *context) createImplicitNullToken(base *Token) *Token { + pos := *(base.RawToken().Position) + pos.Column++ + tk := token.New("null", " null", &pos) + tk.Type = token.ImplicitNullType + return &Token{Token: tk} +} + +func (c *context) insertToken(tk *Token) { + ref := c.tokenRef + idx := ref.idx + if ref.size < idx { + return + } + if ref.size == idx { + curToken := ref.tokens[ref.size-1] + tk.RawToken().Next = curToken.RawToken() + curToken.RawToken().Prev = tk.RawToken() + + ref.tokens = append(ref.tokens, tk) + ref.size = len(ref.tokens) + return + } + + curToken := ref.tokens[idx] + tk.RawToken().Next = curToken.RawToken() + curToken.RawToken().Prev = tk.RawToken() + + ref.tokens = append(ref.tokens[:idx+1], ref.tokens[idx:]...) + ref.tokens[idx] = tk + ref.size = len(ref.tokens) +} + +func (c *context) addToken(tk *Token) { + ref := c.tokenRef + lastTk := ref.tokens[ref.size-1] + if lastTk.Group != nil { + lastTk = lastTk.Group.Last() + } + lastTk.RawToken().Next = tk.RawToken() + tk.RawToken().Prev = lastTk.RawToken() + + ref.tokens = append(ref.tokens, tk) + ref.size = len(ref.tokens) +} diff --git a/vendor/github.com/goccy/go-yaml/parser/node.go b/vendor/github.com/goccy/go-yaml/parser/node.go new file mode 100644 index 0000000..8d35554 --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/parser/node.go @@ -0,0 +1,257 @@ +package parser + +import ( + "fmt" + + "github.com/goccy/go-yaml/ast" + "github.com/goccy/go-yaml/internal/errors" + "github.com/goccy/go-yaml/token" +) + +func newMappingNode(ctx *context, tk *Token, isFlow bool, values ...*ast.MappingValueNode) (*ast.MappingNode, error) { + node := ast.Mapping(tk.RawToken(), isFlow, values...) + node.SetPath(ctx.path) + return node, nil +} + +func newMappingValueNode(ctx *context, colonTk, entryTk *Token, key ast.MapKeyNode, value ast.Node) (*ast.MappingValueNode, error) { + node := ast.MappingValue(colonTk.RawToken(), key, value) + node.SetPath(ctx.path) + node.CollectEntry = entryTk.RawToken() + if key.GetToken().Position.Line == value.GetToken().Position.Line { + // originally key was commented, but now that null value has been added, value must be commented. + if err := setLineComment(ctx, value, colonTk); err != nil { + return nil, err + } + // set line comment by colonTk or entryTk. + if err := setLineComment(ctx, value, entryTk); err != nil { + return nil, err + } + } else { + if err := setLineComment(ctx, key, colonTk); err != nil { + return nil, err + } + // set line comment by colonTk or entryTk. + if err := setLineComment(ctx, key, entryTk); err != nil { + return nil, err + } + } + return node, nil +} + +func newMappingKeyNode(ctx *context, tk *Token) (*ast.MappingKeyNode, error) { + node := ast.MappingKey(tk.RawToken()) + node.SetPath(ctx.path) + if err := setLineComment(ctx, node, tk); err != nil { + return nil, err + } + return node, nil +} + +func newAnchorNode(ctx *context, tk *Token) (*ast.AnchorNode, error) { + node := ast.Anchor(tk.RawToken()) + node.SetPath(ctx.path) + if err := setLineComment(ctx, node, tk); err != nil { + return nil, err + } + return node, nil +} + +func newAliasNode(ctx *context, tk *Token) (*ast.AliasNode, error) { + node := ast.Alias(tk.RawToken()) + node.SetPath(ctx.path) + if err := setLineComment(ctx, node, tk); err != nil { + return nil, err + } + return node, nil +} + +func newDirectiveNode(ctx *context, tk *Token) (*ast.DirectiveNode, error) { + node := ast.Directive(tk.RawToken()) + node.SetPath(ctx.path) + if err := setLineComment(ctx, node, tk); err != nil { + return nil, err + } + return node, nil +} + +func newMergeKeyNode(ctx *context, tk *Token) (*ast.MergeKeyNode, error) { + node := ast.MergeKey(tk.RawToken()) + node.SetPath(ctx.path) + if err := setLineComment(ctx, node, tk); err != nil { + return nil, err + } + return node, nil +} + +func newNullNode(ctx *context, tk *Token) (*ast.NullNode, error) { + node := ast.Null(tk.RawToken()) + node.SetPath(ctx.path) + if err := setLineComment(ctx, node, tk); err != nil { + return nil, err + } + return node, nil +} + +func newBoolNode(ctx *context, tk *Token) (*ast.BoolNode, error) { + node := ast.Bool(tk.RawToken()) + node.SetPath(ctx.path) + if err := setLineComment(ctx, node, tk); err != nil { + return nil, err + } + return node, nil +} + +func newIntegerNode(ctx *context, tk *Token) (*ast.IntegerNode, error) { + node := ast.Integer(tk.RawToken()) + node.SetPath(ctx.path) + if err := setLineComment(ctx, node, tk); err != nil { + return nil, err + } + return node, nil +} + +func newFloatNode(ctx *context, tk *Token) (*ast.FloatNode, error) { + node := ast.Float(tk.RawToken()) + node.SetPath(ctx.path) + if err := setLineComment(ctx, node, tk); err != nil { + return nil, err + } + return node, nil +} + +func newInfinityNode(ctx *context, tk *Token) (*ast.InfinityNode, error) { + node := ast.Infinity(tk.RawToken()) + node.SetPath(ctx.path) + if err := setLineComment(ctx, node, tk); err != nil { + return nil, err + } + return node, nil +} + +func newNanNode(ctx *context, tk *Token) (*ast.NanNode, error) { + node := ast.Nan(tk.RawToken()) + node.SetPath(ctx.path) + if err := setLineComment(ctx, node, tk); err != nil { + return nil, err + } + return node, nil +} + +func newStringNode(ctx *context, tk *Token) (*ast.StringNode, error) { + node := ast.String(tk.RawToken()) + node.SetPath(ctx.path) + if err := setLineComment(ctx, node, tk); err != nil { + return nil, err + } + return node, nil +} + +func newLiteralNode(ctx *context, tk *Token) (*ast.LiteralNode, error) { + node := ast.Literal(tk.RawToken()) + node.SetPath(ctx.path) + if err := setLineComment(ctx, node, tk); err != nil { + return nil, err + } + return node, nil +} + +func newTagNode(ctx *context, tk *Token) (*ast.TagNode, error) { + node := ast.Tag(tk.RawToken()) + node.SetPath(ctx.path) + if err := setLineComment(ctx, node, tk); err != nil { + return nil, err + } + return node, nil +} + +func newSequenceNode(ctx *context, tk *Token, isFlow bool) (*ast.SequenceNode, error) { + node := ast.Sequence(tk.RawToken(), isFlow) + node.SetPath(ctx.path) + if err := setLineComment(ctx, node, tk); err != nil { + return nil, err + } + return node, nil +} + +func newTagDefaultScalarValueNode(ctx *context, tag *token.Token) (ast.ScalarNode, error) { + pos := *(tag.Position) + pos.Column++ + + var ( + tk *Token + node ast.ScalarNode + ) + switch token.ReservedTagKeyword(tag.Value) { + case token.IntegerTag: + tk = &Token{Token: token.New("0", "0", &pos)} + n, err := newIntegerNode(ctx, tk) + if err != nil { + return nil, err + } + node = n + case token.FloatTag: + tk = &Token{Token: token.New("0", "0", &pos)} + n, err := newFloatNode(ctx, tk) + if err != nil { + return nil, err + } + node = n + case token.StringTag, token.BinaryTag, token.TimestampTag: + tk = &Token{Token: token.New("", "", &pos)} + n, err := newStringNode(ctx, tk) + if err != nil { + return nil, err + } + node = n + case token.BooleanTag: + tk = &Token{Token: token.New("false", "false", &pos)} + n, err := newBoolNode(ctx, tk) + if err != nil { + return nil, err + } + node = n + case token.NullTag: + tk = &Token{Token: token.New("null", "null", &pos)} + n, err := newNullNode(ctx, tk) + if err != nil { + return nil, err + } + node = n + default: + return nil, errors.ErrSyntax(fmt.Sprintf("cannot assign default value for %q tag", tag.Value), tag) + } + ctx.insertToken(tk) + ctx.goNext() + return node, nil +} + +func setLineComment(ctx *context, node ast.Node, tk *Token) error { + if tk == nil || tk.LineComment == nil { + return nil + } + comment := ast.CommentGroup([]*token.Token{tk.LineComment}) + comment.SetPath(ctx.path) + if err := node.SetComment(comment); err != nil { + return err + } + return nil +} + +func setHeadComment(cm *ast.CommentGroupNode, value ast.Node) error { + if cm == nil { + return nil + } + switch n := value.(type) { + case *ast.MappingNode: + if len(n.Values) != 0 && value.GetComment() == nil { + cm.SetPath(n.Values[0].GetPath()) + return n.Values[0].SetComment(cm) + } + case *ast.MappingValueNode: + cm.SetPath(n.GetPath()) + return n.SetComment(cm) + } + cm.SetPath(value.GetPath()) + return value.SetComment(cm) +} diff --git a/vendor/github.com/goccy/go-yaml/parser/option.go b/vendor/github.com/goccy/go-yaml/parser/option.go new file mode 100644 index 0000000..3121a64 --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/parser/option.go @@ -0,0 +1,12 @@ +package parser + +// Option represents parser's option. +type Option func(p *parser) + +// AllowDuplicateMapKey allow the use of keys with the same name in the same map, +// but by default, this is not permitted. +func AllowDuplicateMapKey() Option { + return func(p *parser) { + p.allowDuplicateMapKey = true + } +} diff --git a/vendor/github.com/goccy/go-yaml/parser/parser.go b/vendor/github.com/goccy/go-yaml/parser/parser.go new file mode 100644 index 0000000..2c79d36 --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/parser/parser.go @@ -0,0 +1,1320 @@ +package parser + +import ( + "fmt" + "os" + "strings" + + "github.com/goccy/go-yaml/ast" + "github.com/goccy/go-yaml/internal/errors" + "github.com/goccy/go-yaml/lexer" + "github.com/goccy/go-yaml/token" +) + +type Mode uint + +const ( + ParseComments Mode = 1 << iota // parse comments and add them to AST +) + +// ParseBytes parse from byte slice, and returns ast.File +func ParseBytes(bytes []byte, mode Mode, opts ...Option) (*ast.File, error) { + tokens := lexer.Tokenize(string(bytes)) + f, err := Parse(tokens, mode, opts...) + if err != nil { + return nil, err + } + return f, nil +} + +// Parse parse from token instances, and returns ast.File +func Parse(tokens token.Tokens, mode Mode, opts ...Option) (*ast.File, error) { + if tk := tokens.InvalidToken(); tk != nil { + return nil, errors.ErrSyntax(tk.Error, tk) + } + p, err := newParser(tokens, mode, opts) + if err != nil { + return nil, err + } + f, err := p.parse(newContext()) + if err != nil { + return nil, err + } + return f, nil +} + +// Parse parse from filename, and returns ast.File +func ParseFile(filename string, mode Mode, opts ...Option) (*ast.File, error) { + file, err := os.ReadFile(filename) + if err != nil { + return nil, err + } + f, err := ParseBytes(file, mode, opts...) + if err != nil { + return nil, err + } + f.Name = filename + return f, nil +} + +type YAMLVersion string + +const ( + YAML10 YAMLVersion = "1.0" + YAML11 YAMLVersion = "1.1" + YAML12 YAMLVersion = "1.2" + YAML13 YAMLVersion = "1.3" +) + +var yamlVersionMap = map[string]YAMLVersion{ + "1.0": YAML10, + "1.1": YAML11, + "1.2": YAML12, + "1.3": YAML13, +} + +type parser struct { + tokens []*Token + pathMap map[string]ast.Node + yamlVersion YAMLVersion + allowDuplicateMapKey bool + secondaryTagDirective *ast.DirectiveNode +} + +func newParser(tokens token.Tokens, mode Mode, opts []Option) (*parser, error) { + filteredTokens := []*token.Token{} + if mode&ParseComments != 0 { + filteredTokens = tokens + } else { + for _, tk := range tokens { + if tk.Type == token.CommentType { + continue + } + // keep prev/next reference between tokens containing comments + // https://github.com/goccy/go-yaml/issues/254 + filteredTokens = append(filteredTokens, tk) + } + } + tks, err := CreateGroupedTokens(token.Tokens(filteredTokens)) + if err != nil { + return nil, err + } + p := &parser{ + tokens: tks, + pathMap: make(map[string]ast.Node), + } + for _, opt := range opts { + opt(p) + } + return p, nil +} + +func (p *parser) parse(ctx *context) (*ast.File, error) { + file := &ast.File{Docs: []*ast.DocumentNode{}} + for _, token := range p.tokens { + doc, err := p.parseDocument(ctx, token.Group) + if err != nil { + return nil, err + } + file.Docs = append(file.Docs, doc) + } + return file, nil +} + +func (p *parser) parseDocument(ctx *context, docGroup *TokenGroup) (*ast.DocumentNode, error) { + if len(docGroup.Tokens) == 0 { + return ast.Document(docGroup.RawToken(), nil), nil + } + + p.pathMap = make(map[string]ast.Node) + + var ( + tokens = docGroup.Tokens + start *token.Token + end *token.Token + ) + if docGroup.First().Type() == token.DocumentHeaderType { + start = docGroup.First().RawToken() + tokens = tokens[1:] + } + if docGroup.Last().Type() == token.DocumentEndType { + end = docGroup.Last().RawToken() + tokens = tokens[:len(tokens)-1] + defer func() { + // clear yaml version value if DocumentEnd token (...) is specified. + p.yamlVersion = "" + }() + } + + if len(tokens) == 0 { + return ast.Document(docGroup.RawToken(), nil), nil + } + + body, err := p.parseDocumentBody(ctx.withGroup(&TokenGroup{ + Type: TokenGroupDocumentBody, + Tokens: tokens, + })) + if err != nil { + return nil, err + } + node := ast.Document(start, body) + node.End = end + return node, nil +} + +func (p *parser) parseDocumentBody(ctx *context) (ast.Node, error) { + node, err := p.parseToken(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + if ctx.next() { + return nil, errors.ErrSyntax("value is not allowed in this context", ctx.currentToken().RawToken()) + } + return node, nil +} + +func (p *parser) parseToken(ctx *context, tk *Token) (ast.Node, error) { + switch tk.GroupType() { + case TokenGroupMapKey, TokenGroupMapKeyValue: + return p.parseMap(ctx) + case TokenGroupDirective: + node, err := p.parseDirective(ctx.withGroup(tk.Group), tk.Group) + if err != nil { + return nil, err + } + ctx.goNext() + return node, nil + case TokenGroupDirectiveName: + node, err := p.parseDirectiveName(ctx.withGroup(tk.Group)) + if err != nil { + return nil, err + } + ctx.goNext() + return node, nil + case TokenGroupAnchor: + node, err := p.parseAnchor(ctx.withGroup(tk.Group), tk.Group) + if err != nil { + return nil, err + } + ctx.goNext() + return node, nil + case TokenGroupAnchorName: + anchor, err := p.parseAnchorName(ctx.withGroup(tk.Group)) + if err != nil { + return nil, err + } + ctx.goNext() + if ctx.isTokenNotFound() { + return nil, errors.ErrSyntax("could not find anchor value", tk.RawToken()) + } + value, err := p.parseToken(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + if _, ok := value.(*ast.AnchorNode); ok { + return nil, errors.ErrSyntax("anchors cannot be used consecutively", value.GetToken()) + } + anchor.Value = value + return anchor, nil + case TokenGroupAlias: + node, err := p.parseAlias(ctx.withGroup(tk.Group)) + if err != nil { + return nil, err + } + ctx.goNext() + return node, nil + case TokenGroupLiteral, TokenGroupFolded: + node, err := p.parseLiteral(ctx.withGroup(tk.Group)) + if err != nil { + return nil, err + } + ctx.goNext() + return node, nil + case TokenGroupScalarTag: + node, err := p.parseTag(ctx.withGroup(tk.Group)) + if err != nil { + return nil, err + } + ctx.goNext() + return node, nil + } + switch tk.Type() { + case token.CommentType: + return p.parseComment(ctx) + case token.TagType: + return p.parseTag(ctx) + case token.MappingStartType: + return p.parseFlowMap(ctx.withFlow(true)) + case token.SequenceStartType: + return p.parseFlowSequence(ctx.withFlow(true)) + case token.SequenceEntryType: + return p.parseSequence(ctx) + case token.SequenceEndType: + // SequenceEndType is always validated in parseFlowSequence. + // Therefore, if this is found in other cases, it is treated as a syntax error. + return nil, errors.ErrSyntax("could not find '[' character corresponding to ']'", tk.RawToken()) + case token.MappingEndType: + // MappingEndType is always validated in parseFlowMap. + // Therefore, if this is found in other cases, it is treated as a syntax error. + return nil, errors.ErrSyntax("could not find '{' character corresponding to '}'", tk.RawToken()) + case token.MappingValueType: + return nil, errors.ErrSyntax("found an invalid key for this map", tk.RawToken()) + } + node, err := p.parseScalarValue(ctx, tk) + if err != nil { + return nil, err + } + ctx.goNext() + return node, nil +} + +func (p *parser) parseScalarValue(ctx *context, tk *Token) (ast.ScalarNode, error) { + if tk.Group != nil { + switch tk.GroupType() { + case TokenGroupAnchor: + return p.parseAnchor(ctx.withGroup(tk.Group), tk.Group) + case TokenGroupAnchorName: + anchor, err := p.parseAnchorName(ctx.withGroup(tk.Group)) + if err != nil { + return nil, err + } + ctx.goNext() + if ctx.isTokenNotFound() { + return nil, errors.ErrSyntax("could not find anchor value", tk.RawToken()) + } + value, err := p.parseToken(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + if _, ok := value.(*ast.AnchorNode); ok { + return nil, errors.ErrSyntax("anchors cannot be used consecutively", value.GetToken()) + } + anchor.Value = value + return anchor, nil + case TokenGroupAlias: + return p.parseAlias(ctx.withGroup(tk.Group)) + case TokenGroupLiteral, TokenGroupFolded: + return p.parseLiteral(ctx.withGroup(tk.Group)) + case TokenGroupScalarTag: + return p.parseTag(ctx.withGroup(tk.Group)) + default: + return nil, errors.ErrSyntax("unexpected scalar value", tk.RawToken()) + } + } + switch tk.Type() { + case token.MergeKeyType: + return newMergeKeyNode(ctx, tk) + case token.NullType, token.ImplicitNullType: + return newNullNode(ctx, tk) + case token.BoolType: + return newBoolNode(ctx, tk) + case token.IntegerType, token.BinaryIntegerType, token.OctetIntegerType, token.HexIntegerType: + return newIntegerNode(ctx, tk) + case token.FloatType: + return newFloatNode(ctx, tk) + case token.InfinityType: + return newInfinityNode(ctx, tk) + case token.NanType: + return newNanNode(ctx, tk) + case token.StringType, token.SingleQuoteType, token.DoubleQuoteType: + return newStringNode(ctx, tk) + case token.TagType: + // this case applies when it is a scalar tag and its value does not exist. + // Examples of cases where the value does not exist include cases like `key: !!str,` or `!!str : value`. + return p.parseScalarTag(ctx) + } + return nil, errors.ErrSyntax("unexpected scalar value type", tk.RawToken()) +} + +func (p *parser) parseFlowMap(ctx *context) (*ast.MappingNode, error) { + node, err := newMappingNode(ctx, ctx.currentToken(), true) + if err != nil { + return nil, err + } + ctx.goNext() // skip MappingStart token + + isFirst := true + for ctx.next() { + tk := ctx.currentToken() + if tk.Type() == token.MappingEndType { + node.End = tk.RawToken() + break + } + + var entryTk *Token + if tk.Type() == token.CollectEntryType { + entryTk = tk + ctx.goNext() + } else if !isFirst { + return nil, errors.ErrSyntax("',' or '}' must be specified", tk.RawToken()) + } + + if tk := ctx.currentToken(); tk.Type() == token.MappingEndType { + // this case is here: "{ elem, }". + // In this case, ignore the last element and break mapping parsing. + node.End = tk.RawToken() + break + } + + mapKeyTk := ctx.currentToken() + switch mapKeyTk.GroupType() { + case TokenGroupMapKeyValue: + value, err := p.parseMapKeyValue(ctx.withGroup(mapKeyTk.Group), mapKeyTk.Group, entryTk) + if err != nil { + return nil, err + } + node.Values = append(node.Values, value) + ctx.goNext() + case TokenGroupMapKey: + key, err := p.parseMapKey(ctx.withGroup(mapKeyTk.Group), mapKeyTk.Group) + if err != nil { + return nil, err + } + ctx := ctx.withChild(p.mapKeyText(key)) + colonTk := mapKeyTk.Group.Last() + if p.isFlowMapDelim(ctx.nextToken()) { + value, err := newNullNode(ctx, ctx.insertNullToken(colonTk)) + if err != nil { + return nil, err + } + mapValue, err := newMappingValueNode(ctx, colonTk, entryTk, key, value) + if err != nil { + return nil, err + } + node.Values = append(node.Values, mapValue) + ctx.goNext() + } else { + ctx.goNext() + if ctx.isTokenNotFound() { + return nil, errors.ErrSyntax("could not find map value", colonTk.RawToken()) + } + value, err := p.parseToken(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + mapValue, err := newMappingValueNode(ctx, colonTk, entryTk, key, value) + if err != nil { + return nil, err + } + node.Values = append(node.Values, mapValue) + } + default: + if !p.isFlowMapDelim(ctx.nextToken()) { + errTk := mapKeyTk + if errTk == nil { + errTk = tk + } + return nil, errors.ErrSyntax("could not find flow map content", errTk.RawToken()) + } + key, err := p.parseScalarValue(ctx, mapKeyTk) + if err != nil { + return nil, err + } + value, err := newNullNode(ctx, ctx.insertNullToken(mapKeyTk)) + if err != nil { + return nil, err + } + mapValue, err := newMappingValueNode(ctx, mapKeyTk, entryTk, key, value) + if err != nil { + return nil, err + } + node.Values = append(node.Values, mapValue) + ctx.goNext() + } + isFirst = false + } + if node.End == nil { + return nil, errors.ErrSyntax("could not find flow mapping end token '}'", node.Start) + } + ctx.goNext() // skip mapping end token. + return node, nil +} + +func (p *parser) isFlowMapDelim(tk *Token) bool { + return tk.Type() == token.MappingEndType || tk.Type() == token.CollectEntryType +} + +func (p *parser) parseMap(ctx *context) (*ast.MappingNode, error) { + keyTk := ctx.currentToken() + if keyTk.Group == nil { + return nil, errors.ErrSyntax("unexpected map key", keyTk.RawToken()) + } + var keyValueNode *ast.MappingValueNode + if keyTk.GroupType() == TokenGroupMapKeyValue { + node, err := p.parseMapKeyValue(ctx.withGroup(keyTk.Group), keyTk.Group, nil) + if err != nil { + return nil, err + } + keyValueNode = node + ctx.goNext() + if err := p.validateMapKeyValueNextToken(ctx, keyTk, ctx.currentToken()); err != nil { + return nil, err + } + } else { + key, err := p.parseMapKey(ctx.withGroup(keyTk.Group), keyTk.Group) + if err != nil { + return nil, err + } + ctx.goNext() + + valueTk := ctx.currentToken() + if keyTk.Line() == valueTk.Line() && valueTk.Type() == token.SequenceEntryType { + return nil, errors.ErrSyntax("block sequence entries are not allowed in this context", valueTk.RawToken()) + } + ctx := ctx.withChild(p.mapKeyText(key)) + value, err := p.parseMapValue(ctx, key, keyTk.Group.Last()) + if err != nil { + return nil, err + } + node, err := newMappingValueNode(ctx, keyTk.Group.Last(), nil, key, value) + if err != nil { + return nil, err + } + keyValueNode = node + } + mapNode, err := newMappingNode(ctx, &Token{Token: keyValueNode.GetToken()}, false, keyValueNode) + if err != nil { + return nil, err + } + var tk *Token + if ctx.isComment() { + tk = ctx.nextNotCommentToken() + } else { + tk = ctx.currentToken() + } + for tk.Column() == keyTk.Column() { + typ := tk.Type() + if ctx.isFlow && typ == token.SequenceEndType { + // [ + // key: value + // ] <= + break + } + if !p.isMapToken(tk) { + return nil, errors.ErrSyntax("non-map value is specified", tk.RawToken()) + } + cm := p.parseHeadComment(ctx) + if typ == token.MappingEndType { + // a: { + // b: c + // } <= + ctx.goNext() + break + } + node, err := p.parseMap(ctx) + if err != nil { + return nil, err + } + if len(node.Values) != 0 { + if err := setHeadComment(cm, node.Values[0]); err != nil { + return nil, err + } + } + mapNode.Values = append(mapNode.Values, node.Values...) + if node.FootComment != nil { + mapNode.Values[len(mapNode.Values)-1].FootComment = node.FootComment + } + tk = ctx.currentToken() + } + if ctx.isComment() { + if keyTk.Column() <= ctx.currentToken().Column() { + // If the comment is in the same or deeper column as the last element column in map value, + // treat it as a footer comment for the last element. + if len(mapNode.Values) == 1 { + mapNode.Values[0].FootComment = p.parseFootComment(ctx, keyTk.Column()) + mapNode.Values[0].FootComment.SetPath(mapNode.Values[0].Key.GetPath()) + } else { + mapNode.FootComment = p.parseFootComment(ctx, keyTk.Column()) + mapNode.FootComment.SetPath(mapNode.GetPath()) + } + } + } + return mapNode, nil +} + +func (p *parser) validateMapKeyValueNextToken(ctx *context, keyTk, tk *Token) error { + if tk == nil { + return nil + } + if tk.Column() <= keyTk.Column() { + return nil + } + if ctx.isComment() { + return nil + } + if ctx.isFlow && (tk.Type() == token.CollectEntryType || tk.Type() == token.SequenceEndType) { + return nil + } + // a: b + // c <= this token is invalid. + return errors.ErrSyntax("value is not allowed in this context. map key-value is pre-defined", tk.RawToken()) +} + +func (p *parser) isMapToken(tk *Token) bool { + if tk.Group == nil { + return tk.Type() == token.MappingStartType || tk.Type() == token.MappingEndType + } + g := tk.Group + return g.Type == TokenGroupMapKey || g.Type == TokenGroupMapKeyValue +} + +func (p *parser) parseMapKeyValue(ctx *context, g *TokenGroup, entryTk *Token) (*ast.MappingValueNode, error) { + if g.Type != TokenGroupMapKeyValue { + return nil, errors.ErrSyntax("unexpected map key-value pair", g.RawToken()) + } + if g.First().Group == nil { + return nil, errors.ErrSyntax("unexpected map key", g.RawToken()) + } + keyGroup := g.First().Group + key, err := p.parseMapKey(ctx.withGroup(keyGroup), keyGroup) + if err != nil { + return nil, err + } + + c := ctx.withChild(p.mapKeyText(key)) + value, err := p.parseToken(c, g.Last()) + if err != nil { + return nil, err + } + return newMappingValueNode(c, keyGroup.Last(), entryTk, key, value) +} + +func (p *parser) parseMapKey(ctx *context, g *TokenGroup) (ast.MapKeyNode, error) { + if g.Type != TokenGroupMapKey { + return nil, errors.ErrSyntax("unexpected map key", g.RawToken()) + } + if g.First().Type() == token.MappingKeyType { + mapKeyTk := g.First() + if mapKeyTk.Group != nil { + ctx = ctx.withGroup(mapKeyTk.Group) + } + key, err := newMappingKeyNode(ctx, mapKeyTk) + if err != nil { + return nil, err + } + ctx.goNext() // skip mapping key token + if ctx.isTokenNotFound() { + return nil, errors.ErrSyntax("could not find value for mapping key", mapKeyTk.RawToken()) + } + + scalar, err := p.parseScalarValue(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + key.Value = scalar + keyText := p.mapKeyText(scalar) + keyPath := ctx.withChild(keyText).path + key.SetPath(keyPath) + if err := p.validateMapKey(ctx, key.GetToken(), keyPath, g.Last()); err != nil { + return nil, err + } + p.pathMap[keyPath] = key + return key, nil + } + if g.Last().Type() != token.MappingValueType { + return nil, errors.ErrSyntax("expected map key-value delimiter ':'", g.Last().RawToken()) + } + + scalar, err := p.parseScalarValue(ctx, g.First()) + if err != nil { + return nil, err + } + key, ok := scalar.(ast.MapKeyNode) + if !ok { + return nil, errors.ErrSyntax("cannot take map-key node", scalar.GetToken()) + } + keyText := p.mapKeyText(key) + keyPath := ctx.withChild(keyText).path + key.SetPath(keyPath) + if err := p.validateMapKey(ctx, key.GetToken(), keyPath, g.Last()); err != nil { + return nil, err + } + p.pathMap[keyPath] = key + return key, nil +} + +func (p *parser) validateMapKey(ctx *context, tk *token.Token, keyPath string, colonTk *Token) error { + if !p.allowDuplicateMapKey { + if n, exists := p.pathMap[keyPath]; exists { + pos := n.GetToken().Position + return errors.ErrSyntax( + fmt.Sprintf("mapping key %q already defined at [%d:%d]", tk.Value, pos.Line, pos.Column), + tk, + ) + } + } + origin := p.removeLeftWhiteSpace(tk.Origin) + if ctx.isFlow { + if tk.Type == token.StringType { + origin = p.removeRightWhiteSpace(origin) + if tk.Position.Line+p.newLineCharacterNum(origin) != colonTk.Line() { + return errors.ErrSyntax("map key definition includes an implicit line break", tk) + } + } + return nil + } + if tk.Type != token.StringType && tk.Type != token.SingleQuoteType && tk.Type != token.DoubleQuoteType { + return nil + } + if p.existsNewLineCharacter(origin) { + return errors.ErrSyntax("unexpected key name", tk) + } + return nil +} + +func (p *parser) removeLeftWhiteSpace(src string) string { + // CR or LF or CRLF + return strings.TrimLeftFunc(src, func(r rune) bool { + return r == ' ' || r == '\r' || r == '\n' + }) +} + +func (p *parser) removeRightWhiteSpace(src string) string { + // CR or LF or CRLF + return strings.TrimRightFunc(src, func(r rune) bool { + return r == ' ' || r == '\r' || r == '\n' + }) +} + +func (p *parser) existsNewLineCharacter(src string) bool { + return p.newLineCharacterNum(src) > 0 +} + +func (p *parser) newLineCharacterNum(src string) int { + var num int + for i := 0; i < len(src); i++ { + switch src[i] { + case '\r': + if len(src) > i+1 && src[i+1] == '\n' { + i++ + } + num++ + case '\n': + num++ + } + } + return num +} + +func (p *parser) mapKeyText(n ast.Node) string { + if n == nil { + return "" + } + switch nn := n.(type) { + case *ast.MappingKeyNode: + return p.mapKeyText(nn.Value) + case *ast.TagNode: + return p.mapKeyText(nn.Value) + case *ast.AnchorNode: + return p.mapKeyText(nn.Value) + case *ast.AliasNode: + return "" + } + return n.GetToken().Value +} + +func (p *parser) parseMapValue(ctx *context, key ast.MapKeyNode, colonTk *Token) (ast.Node, error) { + tk := ctx.currentToken() + if tk == nil { + return newNullNode(ctx, ctx.addNullValueToken(colonTk)) + } + + if ctx.isComment() { + tk = ctx.nextNotCommentToken() + } + keyCol := key.GetToken().Position.Column + keyLine := key.GetToken().Position.Line + + if tk.Column() != keyCol && tk.Line() == keyLine && (tk.GroupType() == TokenGroupMapKey || tk.GroupType() == TokenGroupMapKeyValue) { + // a: b: + // ^ + // + // a: b: c + // ^ + return nil, errors.ErrSyntax("mapping value is not allowed in this context", tk.RawToken()) + } + + if tk.Column() == keyCol && p.isMapToken(tk) { + // in this case, + // ---- + // key: + // next + return newNullNode(ctx, ctx.insertNullToken(colonTk)) + } + + if tk.Line() == keyLine && tk.GroupType() == TokenGroupAnchorName && + ctx.nextToken().Column() == keyCol && p.isMapToken(ctx.nextToken()) { + // in this case, + // ---- + // key: &anchor + // next + group := &TokenGroup{ + Type: TokenGroupAnchor, + Tokens: []*Token{tk, ctx.createImplicitNullToken(tk)}, + } + anchor, err := p.parseAnchor(ctx.withGroup(group), group) + if err != nil { + return nil, err + } + ctx.goNext() + return anchor, nil + } + + if tk.Column() <= keyCol && tk.GroupType() == TokenGroupAnchorName { + // key: + // &anchor + return nil, errors.ErrSyntax("anchor is not allowed in this context", tk.RawToken()) + } + if tk.Column() <= keyCol && tk.Type() == token.TagType { + // key: + // !!tag + return nil, errors.ErrSyntax("tag is not allowed in this context", tk.RawToken()) + } + + if tk.Column() < keyCol { + // in this case, + // ---- + // key: + // next + return newNullNode(ctx, ctx.insertNullToken(colonTk)) + } + + if tk.Line() == keyLine && tk.GroupType() == TokenGroupAnchorName && + ctx.nextToken().Column() < keyCol { + // in this case, + // ---- + // key: &anchor + // next + group := &TokenGroup{ + Type: TokenGroupAnchor, + Tokens: []*Token{tk, ctx.createImplicitNullToken(tk)}, + } + anchor, err := p.parseAnchor(ctx.withGroup(group), group) + if err != nil { + return nil, err + } + ctx.goNext() + return anchor, nil + } + + value, err := p.parseToken(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + if err := p.validateAnchorValueInMapOrSeq(value, keyCol); err != nil { + return nil, err + } + return value, nil +} + +func (p *parser) validateAnchorValueInMapOrSeq(value ast.Node, col int) error { + anchor, ok := value.(*ast.AnchorNode) + if !ok { + return nil + } + tag, ok := anchor.Value.(*ast.TagNode) + if !ok { + return nil + } + anchorTk := anchor.GetToken() + tagTk := tag.GetToken() + + if anchorTk.Position.Line == tagTk.Position.Line { + // key: + // &anchor !!tag + // + // - &anchor !!tag + return nil + } + + if tagTk.Position.Column <= col { + // key: &anchor + // !!tag + // + // - &anchor + // !!tag + return errors.ErrSyntax("tag is not allowed in this context", tagTk) + } + return nil +} + +func (p *parser) parseAnchor(ctx *context, g *TokenGroup) (*ast.AnchorNode, error) { + anchorNameGroup := g.First().Group + anchor, err := p.parseAnchorName(ctx.withGroup(anchorNameGroup)) + if err != nil { + return nil, err + } + ctx.goNext() + if ctx.isTokenNotFound() { + return nil, errors.ErrSyntax("could not find anchor value", anchor.GetToken()) + } + + value, err := p.parseToken(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + if _, ok := value.(*ast.AnchorNode); ok { + return nil, errors.ErrSyntax("anchors cannot be used consecutively", value.GetToken()) + } + anchor.Value = value + return anchor, nil +} + +func (p *parser) parseAnchorName(ctx *context) (*ast.AnchorNode, error) { + anchor, err := newAnchorNode(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + ctx.goNext() + if ctx.isTokenNotFound() { + return nil, errors.ErrSyntax("could not find anchor value", anchor.GetToken()) + } + + anchorName, err := p.parseScalarValue(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + if anchorName == nil { + return nil, errors.ErrSyntax("unexpected anchor. anchor name is not scalar value", ctx.currentToken().RawToken()) + } + anchor.Name = anchorName + return anchor, nil +} + +func (p *parser) parseAlias(ctx *context) (*ast.AliasNode, error) { + alias, err := newAliasNode(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + ctx.goNext() + if ctx.isTokenNotFound() { + return nil, errors.ErrSyntax("could not find alias value", alias.GetToken()) + } + + aliasName, err := p.parseScalarValue(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + if aliasName == nil { + return nil, errors.ErrSyntax("unexpected alias. alias name is not scalar value", ctx.currentToken().RawToken()) + } + alias.Value = aliasName + return alias, nil +} + +func (p *parser) parseLiteral(ctx *context) (*ast.LiteralNode, error) { + node, err := newLiteralNode(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + ctx.goNext() // skip literal/folded token + + tk := ctx.currentToken() + if tk == nil { + value, err := newStringNode(ctx, &Token{Token: token.New("", "", node.Start.Position)}) + if err != nil { + return nil, err + } + node.Value = value + return node, nil + } + value, err := p.parseToken(ctx, tk) + if err != nil { + return nil, err + } + str, ok := value.(*ast.StringNode) + if !ok { + return nil, errors.ErrSyntax("unexpected token. required string token", value.GetToken()) + } + node.Value = str + return node, nil +} + +func (p *parser) parseScalarTag(ctx *context) (*ast.TagNode, error) { + tag, err := p.parseTag(ctx) + if err != nil { + return nil, err + } + if tag.Value == nil { + return nil, errors.ErrSyntax("specified not scalar tag", tag.GetToken()) + } + if _, ok := tag.Value.(ast.ScalarNode); !ok { + return nil, errors.ErrSyntax("specified not scalar tag", tag.GetToken()) + } + return tag, nil +} + +func (p *parser) parseTag(ctx *context) (*ast.TagNode, error) { + tagTk := ctx.currentToken() + tagRawTk := tagTk.RawToken() + node, err := newTagNode(ctx, tagTk) + if err != nil { + return nil, err + } + ctx.goNext() + + comment := p.parseHeadComment(ctx) + + var tagValue ast.Node + if p.secondaryTagDirective != nil { + value, err := newStringNode(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + tagValue = value + node.Directive = p.secondaryTagDirective + } else { + value, err := p.parseTagValue(ctx, tagRawTk, ctx.currentToken()) + if err != nil { + return nil, err + } + tagValue = value + } + if err := setHeadComment(comment, tagValue); err != nil { + return nil, err + } + node.Value = tagValue + return node, nil +} + +func (p *parser) parseTagValue(ctx *context, tagRawTk *token.Token, tk *Token) (ast.Node, error) { + if tk == nil { + return newNullNode(ctx, ctx.createImplicitNullToken(&Token{Token: tagRawTk})) + } + switch token.ReservedTagKeyword(tagRawTk.Value) { + case token.MappingTag, token.SetTag: + if !p.isMapToken(tk) { + return nil, errors.ErrSyntax("could not find map", tk.RawToken()) + } + if tk.Type() == token.MappingStartType { + return p.parseFlowMap(ctx.withFlow(true)) + } + return p.parseMap(ctx) + case token.IntegerTag, token.FloatTag, token.StringTag, token.BinaryTag, token.TimestampTag, token.BooleanTag, token.NullTag: + if tk.GroupType() == TokenGroupLiteral || tk.GroupType() == TokenGroupFolded { + return p.parseLiteral(ctx.withGroup(tk.Group)) + } else if tk.Type() == token.CollectEntryType || tk.Type() == token.MappingValueType { + return newTagDefaultScalarValueNode(ctx, tagRawTk) + } + scalar, err := p.parseScalarValue(ctx, tk) + if err != nil { + return nil, err + } + ctx.goNext() + return scalar, nil + case token.SequenceTag, token.OrderedMapTag: + if tk.Type() == token.SequenceStartType { + return p.parseFlowSequence(ctx.withFlow(true)) + } + return p.parseSequence(ctx) + } + return p.parseToken(ctx, tk) +} + +func (p *parser) parseFlowSequence(ctx *context) (*ast.SequenceNode, error) { + node, err := newSequenceNode(ctx, ctx.currentToken(), true) + if err != nil { + return nil, err + } + ctx.goNext() // skip SequenceStart token + + isFirst := true + for ctx.next() { + tk := ctx.currentToken() + if tk.Type() == token.SequenceEndType { + node.End = tk.RawToken() + break + } + + var entryTk *Token + if tk.Type() == token.CollectEntryType { + if isFirst { + return nil, errors.ErrSyntax("expected sequence element, but found ','", tk.RawToken()) + } + entryTk = tk + ctx.goNext() + } else if !isFirst { + return nil, errors.ErrSyntax("',' or ']' must be specified", tk.RawToken()) + } + + if tk := ctx.currentToken(); tk.Type() == token.SequenceEndType { + // this case is here: "[ elem, ]". + // In this case, ignore the last element and break sequence parsing. + node.End = tk.RawToken() + break + } + + if ctx.isTokenNotFound() { + break + } + + ctx := ctx.withIndex(uint(len(node.Values))) + value, err := p.parseToken(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + node.Values = append(node.Values, value) + seqEntry := ast.SequenceEntry(entryTk.RawToken(), value, nil) + if err := setLineComment(ctx, seqEntry, entryTk); err != nil { + return nil, err + } + seqEntry.SetPath(ctx.path) + node.Entries = append(node.Entries, seqEntry) + + isFirst = false + } + if node.End == nil { + return nil, errors.ErrSyntax("sequence end token ']' not found", node.Start) + } + ctx.goNext() // skip sequence end token. + return node, nil +} + +func (p *parser) parseSequence(ctx *context) (*ast.SequenceNode, error) { + seqTk := ctx.currentToken() + seqNode, err := newSequenceNode(ctx, seqTk, false) + if err != nil { + return nil, err + } + + tk := seqTk + for tk.Type() == token.SequenceEntryType && tk.Column() == seqTk.Column() { + seqTk := tk + headComment := p.parseHeadComment(ctx) + ctx.goNext() // skip sequence entry token + + ctx := ctx.withIndex(uint(len(seqNode.Values))) + value, err := p.parseSequenceValue(ctx, seqTk) + if err != nil { + return nil, err + } + seqEntry := ast.SequenceEntry(seqTk.RawToken(), value, headComment) + if err := setLineComment(ctx, seqEntry, seqTk); err != nil { + return nil, err + } + seqEntry.SetPath(ctx.path) + seqNode.ValueHeadComments = append(seqNode.ValueHeadComments, headComment) + seqNode.Values = append(seqNode.Values, value) + seqNode.Entries = append(seqNode.Entries, seqEntry) + + if ctx.isComment() { + tk = ctx.nextNotCommentToken() + } else { + tk = ctx.currentToken() + } + } + if ctx.isComment() { + if seqTk.Column() <= ctx.currentToken().Column() { + // If the comment is in the same or deeper column as the last element column in sequence value, + // treat it as a footer comment for the last element. + seqNode.FootComment = p.parseFootComment(ctx, seqTk.Column()) + if len(seqNode.Values) != 0 { + seqNode.FootComment.SetPath(seqNode.Values[len(seqNode.Values)-1].GetPath()) + } + } + } + return seqNode, nil +} + +func (p *parser) parseSequenceValue(ctx *context, seqTk *Token) (ast.Node, error) { + tk := ctx.currentToken() + if tk == nil { + return newNullNode(ctx, ctx.addNullValueToken(seqTk)) + } + + if ctx.isComment() { + tk = ctx.nextNotCommentToken() + } + seqCol := seqTk.Column() + seqLine := seqTk.Line() + + if tk.Column() == seqCol && tk.Type() == token.SequenceEntryType { + // in this case, + // ---- + // - + // - + return newNullNode(ctx, ctx.insertNullToken(seqTk)) + } + + if tk.Line() == seqLine && tk.GroupType() == TokenGroupAnchorName && + ctx.nextToken().Column() == seqCol && ctx.nextToken().Type() == token.SequenceEntryType { + // in this case, + // ---- + // - &anchor + // - + group := &TokenGroup{ + Type: TokenGroupAnchor, + Tokens: []*Token{tk, ctx.createImplicitNullToken(tk)}, + } + anchor, err := p.parseAnchor(ctx.withGroup(group), group) + if err != nil { + return nil, err + } + ctx.goNext() + return anchor, nil + } + + if tk.Column() <= seqCol && tk.GroupType() == TokenGroupAnchorName { + // - + // &anchor + return nil, errors.ErrSyntax("anchor is not allowed in this sequence context", tk.RawToken()) + } + if tk.Column() <= seqCol && tk.Type() == token.TagType { + // - + // !!tag + return nil, errors.ErrSyntax("tag is not allowed in this sequence context", tk.RawToken()) + } + + if tk.Column() < seqCol { + // in this case, + // ---- + // - + // next + return newNullNode(ctx, ctx.insertNullToken(seqTk)) + } + + if tk.Line() == seqLine && tk.GroupType() == TokenGroupAnchorName && + ctx.nextToken().Column() < seqCol { + // in this case, + // ---- + // - &anchor + // next + group := &TokenGroup{ + Type: TokenGroupAnchor, + Tokens: []*Token{tk, ctx.createImplicitNullToken(tk)}, + } + anchor, err := p.parseAnchor(ctx.withGroup(group), group) + if err != nil { + return nil, err + } + ctx.goNext() + return anchor, nil + } + + value, err := p.parseToken(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + if err := p.validateAnchorValueInMapOrSeq(value, seqCol); err != nil { + return nil, err + } + return value, nil +} + +func (p *parser) parseDirective(ctx *context, g *TokenGroup) (*ast.DirectiveNode, error) { + directiveNameGroup := g.First().Group + directive, err := p.parseDirectiveName(ctx.withGroup(directiveNameGroup)) + if err != nil { + return nil, err + } + + switch directive.Name.String() { + case "YAML": + if len(g.Tokens) != 2 { + return nil, errors.ErrSyntax("unexpected format YAML directive", g.First().RawToken()) + } + valueTk := g.Tokens[1] + valueRawTk := valueTk.RawToken() + value := valueRawTk.Value + ver, exists := yamlVersionMap[value] + if !exists { + return nil, errors.ErrSyntax(fmt.Sprintf("unknown YAML version %q", value), valueRawTk) + } + if p.yamlVersion != "" { + return nil, errors.ErrSyntax("YAML version has already been specified", valueRawTk) + } + p.yamlVersion = ver + versionNode, err := newStringNode(ctx, valueTk) + if err != nil { + return nil, err + } + directive.Values = append(directive.Values, versionNode) + case "TAG": + if len(g.Tokens) != 3 { + return nil, errors.ErrSyntax("unexpected format TAG directive", g.First().RawToken()) + } + tagKey, err := newStringNode(ctx, g.Tokens[1]) + if err != nil { + return nil, err + } + if tagKey.Value == "!!" { + p.secondaryTagDirective = directive + } + tagValue, err := newStringNode(ctx, g.Tokens[2]) + if err != nil { + return nil, err + } + directive.Values = append(directive.Values, tagKey, tagValue) + default: + if len(g.Tokens) > 1 { + for _, tk := range g.Tokens[1:] { + value, err := newStringNode(ctx, tk) + if err != nil { + return nil, err + } + directive.Values = append(directive.Values, value) + } + } + } + return directive, nil +} + +func (p *parser) parseDirectiveName(ctx *context) (*ast.DirectiveNode, error) { + directive, err := newDirectiveNode(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + ctx.goNext() + if ctx.isTokenNotFound() { + return nil, errors.ErrSyntax("could not find directive value", directive.GetToken()) + } + + directiveName, err := p.parseScalarValue(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + if directiveName == nil { + return nil, errors.ErrSyntax("unexpected directive. directive name is not scalar value", ctx.currentToken().RawToken()) + } + directive.Name = directiveName + return directive, nil +} + +func (p *parser) parseComment(ctx *context) (ast.Node, error) { + cm := p.parseHeadComment(ctx) + if ctx.isTokenNotFound() { + return cm, nil + } + node, err := p.parseToken(ctx, ctx.currentToken()) + if err != nil { + return nil, err + } + if err := setHeadComment(cm, node); err != nil { + return nil, err + } + return node, nil +} + +func (p *parser) parseHeadComment(ctx *context) *ast.CommentGroupNode { + tks := []*token.Token{} + for ctx.isComment() { + tks = append(tks, ctx.currentToken().RawToken()) + ctx.goNext() + } + if len(tks) == 0 { + return nil + } + return ast.CommentGroup(tks) +} + +func (p *parser) parseFootComment(ctx *context, col int) *ast.CommentGroupNode { + tks := []*token.Token{} + for ctx.isComment() && col <= ctx.currentToken().Column() { + tks = append(tks, ctx.currentToken().RawToken()) + ctx.goNext() + } + if len(tks) == 0 { + return nil + } + return ast.CommentGroup(tks) +} diff --git a/vendor/github.com/goccy/go-yaml/parser/token.go b/vendor/github.com/goccy/go-yaml/parser/token.go new file mode 100644 index 0000000..b07c018 --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/parser/token.go @@ -0,0 +1,746 @@ +package parser + +import ( + "fmt" + "os" + "strings" + + "github.com/goccy/go-yaml/internal/errors" + "github.com/goccy/go-yaml/token" +) + +type TokenGroupType int + +const ( + TokenGroupNone TokenGroupType = iota + TokenGroupDirective + TokenGroupDirectiveName + TokenGroupDocument + TokenGroupDocumentBody + TokenGroupAnchor + TokenGroupAnchorName + TokenGroupAlias + TokenGroupLiteral + TokenGroupFolded + TokenGroupScalarTag + TokenGroupMapKey + TokenGroupMapKeyValue +) + +func (t TokenGroupType) String() string { + switch t { + case TokenGroupNone: + return "none" + case TokenGroupDirective: + return "directive" + case TokenGroupDirectiveName: + return "directive_name" + case TokenGroupDocument: + return "document" + case TokenGroupDocumentBody: + return "document_body" + case TokenGroupAnchor: + return "anchor" + case TokenGroupAnchorName: + return "anchor_name" + case TokenGroupAlias: + return "alias" + case TokenGroupLiteral: + return "literal" + case TokenGroupFolded: + return "folded" + case TokenGroupScalarTag: + return "scalar_tag" + case TokenGroupMapKey: + return "map_key" + case TokenGroupMapKeyValue: + return "map_key_value" + } + return "none" +} + +type Token struct { + Token *token.Token + Group *TokenGroup + LineComment *token.Token +} + +func (t *Token) RawToken() *token.Token { + if t == nil { + return nil + } + if t.Token != nil { + return t.Token + } + return t.Group.RawToken() +} + +func (t *Token) Type() token.Type { + if t == nil { + return 0 + } + if t.Token != nil { + return t.Token.Type + } + return t.Group.TokenType() +} + +func (t *Token) GroupType() TokenGroupType { + if t == nil { + return TokenGroupNone + } + if t.Token != nil { + return TokenGroupNone + } + return t.Group.Type +} + +func (t *Token) Line() int { + if t == nil { + return 0 + } + if t.Token != nil { + return t.Token.Position.Line + } + return t.Group.Line() +} + +func (t *Token) Column() int { + if t == nil { + return 0 + } + if t.Token != nil { + return t.Token.Position.Column + } + return t.Group.Column() +} + +func (t *Token) SetGroupType(typ TokenGroupType) { + if t.Group == nil { + return + } + t.Group.Type = typ +} + +func (t *Token) Dump() { + ctx := new(groupTokenRenderContext) + if t.Token != nil { + fmt.Fprint(os.Stdout, t.Token.Value) + return + } + t.Group.dump(ctx) + fmt.Fprintf(os.Stdout, "\n") +} + +func (t *Token) dump(ctx *groupTokenRenderContext) { + if t.Token != nil { + fmt.Fprint(os.Stdout, t.Token.Value) + return + } + t.Group.dump(ctx) +} + +type groupTokenRenderContext struct { + num int +} + +type TokenGroup struct { + Type TokenGroupType + Tokens []*Token +} + +func (g *TokenGroup) First() *Token { + if len(g.Tokens) == 0 { + return nil + } + return g.Tokens[0] +} + +func (g *TokenGroup) Last() *Token { + if len(g.Tokens) == 0 { + return nil + } + return g.Tokens[len(g.Tokens)-1] +} + +func (g *TokenGroup) dump(ctx *groupTokenRenderContext) { + num := ctx.num + fmt.Fprint(os.Stdout, colorize(num, "(")) + ctx.num++ + for _, tk := range g.Tokens { + tk.dump(ctx) + } + fmt.Fprint(os.Stdout, colorize(num, ")")) +} + +func (g *TokenGroup) RawToken() *token.Token { + if len(g.Tokens) == 0 { + return nil + } + return g.Tokens[0].RawToken() +} + +func (g *TokenGroup) Line() int { + if len(g.Tokens) == 0 { + return 0 + } + return g.Tokens[0].Line() +} + +func (g *TokenGroup) Column() int { + if len(g.Tokens) == 0 { + return 0 + } + return g.Tokens[0].Column() +} + +func (g *TokenGroup) TokenType() token.Type { + if len(g.Tokens) == 0 { + return 0 + } + return g.Tokens[0].Type() +} + +func CreateGroupedTokens(tokens token.Tokens) ([]*Token, error) { + var err error + tks := newTokens(tokens) + tks = createLineCommentTokenGroups(tks) + tks, err = createLiteralAndFoldedTokenGroups(tks) + if err != nil { + return nil, err + } + tks, err = createAnchorAndAliasTokenGroups(tks) + if err != nil { + return nil, err + } + tks, err = createScalarTagTokenGroups(tks) + if err != nil { + return nil, err + } + tks, err = createAnchorWithScalarTagTokenGroups(tks) + if err != nil { + return nil, err + } + tks, err = createMapKeyTokenGroups(tks) + if err != nil { + return nil, err + } + tks = createMapKeyValueTokenGroups(tks) + tks, err = createDirectiveTokenGroups(tks) + if err != nil { + return nil, err + } + tks, err = createDocumentTokens(tks) + if err != nil { + return nil, err + } + return tks, nil +} + +func newTokens(tks token.Tokens) []*Token { + ret := make([]*Token, 0, len(tks)) + for _, tk := range tks { + ret = append(ret, &Token{Token: tk}) + } + return ret +} + +func createLineCommentTokenGroups(tokens []*Token) []*Token { + ret := make([]*Token, 0, len(tokens)) + for i := 0; i < len(tokens); i++ { + tk := tokens[i] + switch tk.Type() { + case token.CommentType: + if i > 0 && tokens[i-1].Line() == tk.Line() { + tokens[i-1].LineComment = tk.RawToken() + } else { + ret = append(ret, tk) + } + default: + ret = append(ret, tk) + } + } + return ret +} + +func createLiteralAndFoldedTokenGroups(tokens []*Token) ([]*Token, error) { + ret := make([]*Token, 0, len(tokens)) + for i := 0; i < len(tokens); i++ { + tk := tokens[i] + switch tk.Type() { + case token.LiteralType: + tks := []*Token{tk} + if i+1 < len(tokens) { + tks = append(tks, tokens[i+1]) + } + ret = append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupLiteral, + Tokens: tks, + }, + }) + i++ + case token.FoldedType: + tks := []*Token{tk} + if i+1 < len(tokens) { + tks = append(tks, tokens[i+1]) + } + ret = append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupFolded, + Tokens: tks, + }, + }) + i++ + default: + ret = append(ret, tk) + } + } + return ret, nil +} + +func createAnchorAndAliasTokenGroups(tokens []*Token) ([]*Token, error) { + ret := make([]*Token, 0, len(tokens)) + for i := 0; i < len(tokens); i++ { + tk := tokens[i] + switch tk.Type() { + case token.AnchorType: + if i+1 >= len(tokens) { + return nil, errors.ErrSyntax("undefined anchor name", tk.RawToken()) + } + if i+2 >= len(tokens) { + return nil, errors.ErrSyntax("undefined anchor value", tk.RawToken()) + } + anchorName := &Token{ + Group: &TokenGroup{ + Type: TokenGroupAnchorName, + Tokens: []*Token{tk, tokens[i+1]}, + }, + } + valueTk := tokens[i+2] + if tk.Line() == valueTk.Line() && valueTk.Type() == token.SequenceEntryType { + return nil, errors.ErrSyntax("sequence entries are not allowed after anchor on the same line", valueTk.RawToken()) + } + if tk.Line() == valueTk.Line() && isScalarType(valueTk) { + ret = append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupAnchor, + Tokens: []*Token{anchorName, valueTk}, + }, + }) + i++ + } else { + ret = append(ret, anchorName) + } + i++ + case token.AliasType: + if i+1 == len(tokens) { + return nil, errors.ErrSyntax("undefined alias name", tk.RawToken()) + } + ret = append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupAlias, + Tokens: []*Token{tk, tokens[i+1]}, + }, + }) + i++ + default: + ret = append(ret, tk) + } + } + return ret, nil +} + +func createScalarTagTokenGroups(tokens []*Token) ([]*Token, error) { + ret := make([]*Token, 0, len(tokens)) + for i := 0; i < len(tokens); i++ { + tk := tokens[i] + if tk.Type() != token.TagType { + ret = append(ret, tk) + continue + } + tag := tk.RawToken() + if strings.HasPrefix(tag.Value, "!!") { + // secondary tag. + switch token.ReservedTagKeyword(tag.Value) { + case token.IntegerTag, token.FloatTag, token.StringTag, token.BinaryTag, token.TimestampTag, token.BooleanTag, token.NullTag: + if len(tokens) <= i+1 { + ret = append(ret, tk) + continue + } + if tk.Line() != tokens[i+1].Line() { + ret = append(ret, tk) + continue + } + if tokens[i+1].GroupType() == TokenGroupAnchorName { + ret = append(ret, tk) + continue + } + if isScalarType(tokens[i+1]) { + ret = append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupScalarTag, + Tokens: []*Token{tk, tokens[i+1]}, + }, + }) + i++ + } else { + ret = append(ret, tk) + } + case token.MergeTag: + if len(tokens) <= i+1 { + ret = append(ret, tk) + continue + } + if tk.Line() != tokens[i+1].Line() { + ret = append(ret, tk) + continue + } + if tokens[i+1].GroupType() == TokenGroupAnchorName { + ret = append(ret, tk) + continue + } + if tokens[i+1].Type() != token.MergeKeyType { + return nil, errors.ErrSyntax("could not find merge key", tokens[i+1].RawToken()) + } + ret = append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupScalarTag, + Tokens: []*Token{tk, tokens[i+1]}, + }, + }) + i++ + default: + ret = append(ret, tk) + } + } else { + if len(tokens) <= i+1 { + ret = append(ret, tk) + continue + } + if tk.Line() != tokens[i+1].Line() { + ret = append(ret, tk) + continue + } + if tokens[i+1].GroupType() == TokenGroupAnchorName { + ret = append(ret, tk) + continue + } + if isFlowType(tokens[i+1]) { + ret = append(ret, tk) + continue + } + ret = append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupScalarTag, + Tokens: []*Token{tk, tokens[i+1]}, + }, + }) + i++ + } + } + return ret, nil +} + +func createAnchorWithScalarTagTokenGroups(tokens []*Token) ([]*Token, error) { + ret := make([]*Token, 0, len(tokens)) + for i := 0; i < len(tokens); i++ { + tk := tokens[i] + switch tk.GroupType() { + case TokenGroupAnchorName: + if i+1 >= len(tokens) { + return nil, errors.ErrSyntax("undefined anchor value", tk.RawToken()) + } + valueTk := tokens[i+1] + if tk.Line() == valueTk.Line() && valueTk.GroupType() == TokenGroupScalarTag { + ret = append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupAnchor, + Tokens: []*Token{tk, tokens[i+1]}, + }, + }) + i++ + } else { + ret = append(ret, tk) + } + default: + ret = append(ret, tk) + } + } + return ret, nil +} + +func createMapKeyTokenGroups(tokens []*Token) ([]*Token, error) { + tks, err := createMapKeyByMappingKey(tokens) + if err != nil { + return nil, err + } + return createMapKeyByMappingValue(tks) +} + +func createMapKeyByMappingKey(tokens []*Token) ([]*Token, error) { + ret := make([]*Token, 0, len(tokens)) + for i := 0; i < len(tokens); i++ { + tk := tokens[i] + switch tk.Type() { + case token.MappingKeyType: + if i+1 >= len(tokens) { + return nil, errors.ErrSyntax("undefined map key", tk.RawToken()) + } + ret = append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupMapKey, + Tokens: []*Token{tk, tokens[i+1]}, + }, + }) + i++ + default: + ret = append(ret, tk) + } + } + return ret, nil +} + +func createMapKeyByMappingValue(tokens []*Token) ([]*Token, error) { + ret := make([]*Token, 0, len(tokens)) + for i := 0; i < len(tokens); i++ { + tk := tokens[i] + switch tk.Type() { + case token.MappingValueType: + if i == 0 { + return nil, errors.ErrSyntax("unexpected key name", tk.RawToken()) + } + mapKeyTk := tokens[i-1] + if isNotMapKeyType(mapKeyTk) { + return nil, errors.ErrSyntax("found an invalid key for this map", tokens[i].RawToken()) + } + newTk := &Token{Token: mapKeyTk.Token, Group: mapKeyTk.Group} + mapKeyTk.Token = nil + mapKeyTk.Group = &TokenGroup{ + Type: TokenGroupMapKey, + Tokens: []*Token{newTk, tk}, + } + default: + ret = append(ret, tk) + } + } + return ret, nil +} + +func createMapKeyValueTokenGroups(tokens []*Token) []*Token { + ret := make([]*Token, 0, len(tokens)) + for i := 0; i < len(tokens); i++ { + tk := tokens[i] + switch tk.GroupType() { + case TokenGroupMapKey: + if len(tokens) <= i+1 { + ret = append(ret, tk) + continue + } + valueTk := tokens[i+1] + if tk.Line() != valueTk.Line() { + ret = append(ret, tk) + continue + } + if valueTk.GroupType() == TokenGroupAnchorName { + ret = append(ret, tk) + continue + } + if valueTk.Type() == token.TagType && valueTk.GroupType() != TokenGroupScalarTag { + ret = append(ret, tk) + continue + } + + if isScalarType(valueTk) || valueTk.Type() == token.TagType { + ret = append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupMapKeyValue, + Tokens: []*Token{tk, valueTk}, + }, + }) + i++ + } else { + ret = append(ret, tk) + continue + } + default: + ret = append(ret, tk) + } + } + return ret +} + +func createDirectiveTokenGroups(tokens []*Token) ([]*Token, error) { + ret := make([]*Token, 0, len(tokens)) + for i := 0; i < len(tokens); i++ { + tk := tokens[i] + switch tk.Type() { + case token.DirectiveType: + if i+1 >= len(tokens) { + return nil, errors.ErrSyntax("undefined directive value", tk.RawToken()) + } + directiveName := &Token{ + Group: &TokenGroup{ + Type: TokenGroupDirectiveName, + Tokens: []*Token{tk, tokens[i+1]}, + }, + } + i++ + var valueTks []*Token + for j := i + 1; j < len(tokens); j++ { + if tokens[j].Line() != tk.Line() { + break + } + valueTks = append(valueTks, tokens[j]) + i++ + } + if i+1 >= len(tokens) || tokens[i+1].Type() != token.DocumentHeaderType { + return nil, errors.ErrSyntax("unexpected directive value. document not started", tk.RawToken()) + } + if len(valueTks) != 0 { + ret = append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupDirective, + Tokens: append([]*Token{directiveName}, valueTks...), + }, + }) + } else { + ret = append(ret, directiveName) + } + default: + ret = append(ret, tk) + } + } + return ret, nil +} + +func createDocumentTokens(tokens []*Token) ([]*Token, error) { + var ret []*Token + for i := 0; i < len(tokens); i++ { + tk := tokens[i] + switch tk.Type() { + case token.DocumentHeaderType: + if i != 0 { + ret = append(ret, &Token{ + Group: &TokenGroup{Tokens: tokens[:i]}, + }) + } + if i+1 == len(tokens) { + // if current token is last token, add DocumentHeader only tokens to ret. + return append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupDocument, + Tokens: []*Token{tk}, + }, + }), nil + } + if tokens[i+1].Type() == token.DocumentHeaderType { + return append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupDocument, + Tokens: []*Token{tk}, + }, + }), nil + } + if tokens[i].Line() == tokens[i+1].Line() { + switch tokens[i+1].GroupType() { + case TokenGroupMapKey, TokenGroupMapKeyValue: + return nil, errors.ErrSyntax("value cannot be placed after document separator", tokens[i+1].RawToken()) + } + switch tokens[i+1].Type() { + case token.SequenceEntryType: + return nil, errors.ErrSyntax("value cannot be placed after document separator", tokens[i+1].RawToken()) + } + } + tks, err := createDocumentTokens(tokens[i+1:]) + if err != nil { + return nil, err + } + if len(tks) != 0 { + tks[0].SetGroupType(TokenGroupDocument) + tks[0].Group.Tokens = append([]*Token{tk}, tks[0].Group.Tokens...) + return append(ret, tks...), nil + } + return append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupDocument, + Tokens: []*Token{tk}, + }, + }), nil + case token.DocumentEndType: + if i != 0 { + ret = append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupDocument, + Tokens: tokens[0 : i+1], + }, + }) + } + if i+1 == len(tokens) { + return ret, nil + } + if isScalarType(tokens[i+1]) { + return nil, errors.ErrSyntax("unexpected end content", tokens[i+1].RawToken()) + } + + tks, err := createDocumentTokens(tokens[i+1:]) + if err != nil { + return nil, err + } + return append(ret, tks...), nil + } + } + return append(ret, &Token{ + Group: &TokenGroup{ + Type: TokenGroupDocument, + Tokens: tokens, + }, + }), nil +} + +func isScalarType(tk *Token) bool { + switch tk.GroupType() { + case TokenGroupMapKey, TokenGroupMapKeyValue: + return false + } + typ := tk.Type() + return typ == token.AnchorType || + typ == token.AliasType || + typ == token.LiteralType || + typ == token.FoldedType || + typ == token.NullType || + typ == token.ImplicitNullType || + typ == token.BoolType || + typ == token.IntegerType || + typ == token.BinaryIntegerType || + typ == token.OctetIntegerType || + typ == token.HexIntegerType || + typ == token.FloatType || + typ == token.InfinityType || + typ == token.NanType || + typ == token.StringType || + typ == token.SingleQuoteType || + typ == token.DoubleQuoteType +} + +func isNotMapKeyType(tk *Token) bool { + typ := tk.Type() + return typ == token.DirectiveType || + typ == token.DocumentHeaderType || + typ == token.DocumentEndType || + typ == token.CollectEntryType || + typ == token.MappingStartType || + typ == token.MappingValueType || + typ == token.MappingEndType || + typ == token.SequenceStartType || + typ == token.SequenceEntryType || + typ == token.SequenceEndType +} + +func isFlowType(tk *Token) bool { + typ := tk.Type() + return typ == token.MappingStartType || + typ == token.MappingEndType || + typ == token.SequenceStartType || + typ == token.SequenceEntryType +} diff --git a/vendor/github.com/goccy/go-yaml/path.go b/vendor/github.com/goccy/go-yaml/path.go new file mode 100644 index 0000000..4d2cbba --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/path.go @@ -0,0 +1,827 @@ +package yaml + +import ( + "bytes" + "fmt" + "io" + "strconv" + "strings" + + "github.com/goccy/go-yaml/ast" + "github.com/goccy/go-yaml/parser" + "github.com/goccy/go-yaml/printer" +) + +// PathString create Path from string +// +// YAMLPath rule +// $ : the root object/element +// . : child operator +// .. : recursive descent +// [num] : object/element of array by number +// [*] : all objects/elements for array. +// +// If you want to use reserved characters such as `.` and `*` as a key name, +// enclose them in single quotation as follows ( $.foo.'bar.baz-*'.hoge ). +// If you want to use a single quote with reserved characters, escape it with `\` ( $.foo.'bar.baz\'s value'.hoge ). +func PathString(s string) (*Path, error) { + buf := []rune(s) + length := len(buf) + cursor := 0 + builder := &PathBuilder{} + for cursor < length { + c := buf[cursor] + switch c { + case '$': + builder = builder.Root() + cursor++ + case '.': + b, buf, c, err := parsePathDot(builder, buf, cursor) + if err != nil { + return nil, err + } + length = len(buf) + builder = b + cursor = c + case '[': + b, buf, c, err := parsePathIndex(builder, buf, cursor) + if err != nil { + return nil, err + } + length = len(buf) + builder = b + cursor = c + default: + return nil, fmt.Errorf("invalid path at %d: %w", cursor, ErrInvalidPathString) + } + } + return builder.Build(), nil +} + +func parsePathRecursive(b *PathBuilder, buf []rune, cursor int) (*PathBuilder, []rune, int, error) { + length := len(buf) + cursor += 2 // skip .. characters + start := cursor + for ; cursor < length; cursor++ { + c := buf[cursor] + switch c { + case '$': + return nil, nil, 0, fmt.Errorf("specified '$' after '..' character: %w", ErrInvalidPathString) + case '*': + return nil, nil, 0, fmt.Errorf("specified '*' after '..' character: %w", ErrInvalidPathString) + case '.', '[': + goto end + case ']': + return nil, nil, 0, fmt.Errorf("specified ']' after '..' character: %w", ErrInvalidPathString) + } + } +end: + if start == cursor { + return nil, nil, 0, fmt.Errorf("not found recursive selector: %w", ErrInvalidPathString) + } + return b.Recursive(string(buf[start:cursor])), buf, cursor, nil +} + +func parsePathDot(b *PathBuilder, buf []rune, cursor int) (*PathBuilder, []rune, int, error) { + if b.root == nil || b.node == nil { + return nil, nil, 0, fmt.Errorf("required '$' character at first: %w", ErrInvalidPathString) + } + length := len(buf) + if cursor+1 < length && buf[cursor+1] == '.' { + b, buf, c, err := parsePathRecursive(b, buf, cursor) + if err != nil { + return nil, nil, 0, err + } + return b, buf, c, nil + } + cursor++ // skip . character + start := cursor + + // if started single quote, looking for end single quote char + if cursor < length && buf[cursor] == '\'' { + return parseQuotedKey(b, buf, cursor) + } + for ; cursor < length; cursor++ { + c := buf[cursor] + switch c { + case '$': + return nil, nil, 0, fmt.Errorf("specified '$' after '.' character: %w", ErrInvalidPathString) + case '*': + return nil, nil, 0, fmt.Errorf("specified '*' after '.' character: %w", ErrInvalidPathString) + case '.', '[': + goto end + case ']': + return nil, nil, 0, fmt.Errorf("specified ']' after '.' character: %w", ErrInvalidPathString) + } + } +end: + if start == cursor { + return nil, nil, 0, fmt.Errorf("could not find by empty key: %w", ErrInvalidPathString) + } + return b.child(string(buf[start:cursor])), buf, cursor, nil +} + +func parseQuotedKey(b *PathBuilder, buf []rune, cursor int) (*PathBuilder, []rune, int, error) { + if b.root == nil || b.node == nil { + return nil, nil, 0, fmt.Errorf("required '$' character at first: %w", ErrInvalidPathString) + } + + cursor++ // skip single quote + start := cursor + length := len(buf) + var foundEndDelim bool + for ; cursor < length; cursor++ { + switch buf[cursor] { + case '\\': + buf = append(append([]rune{}, buf[:cursor]...), buf[cursor+1:]...) + length = len(buf) + case '\'': + foundEndDelim = true + goto end + } + } +end: + if !foundEndDelim { + return nil, nil, 0, fmt.Errorf("could not find end delimiter for key: %w", ErrInvalidPathString) + } + if start == cursor { + return nil, nil, 0, fmt.Errorf("could not find by empty key: %w", ErrInvalidPathString) + } + selector := buf[start:cursor] + cursor++ + if cursor < length { + switch buf[cursor] { + case '$': + return nil, nil, 0, fmt.Errorf("specified '$' after '.' character: %w", ErrInvalidPathString) + case '*': + return nil, nil, 0, fmt.Errorf("specified '*' after '.' character: %w", ErrInvalidPathString) + case ']': + return nil, nil, 0, fmt.Errorf("specified ']' after '.' character: %w", ErrInvalidPathString) + } + } + return b.child(string(selector)), buf, cursor, nil +} + +func parsePathIndex(b *PathBuilder, buf []rune, cursor int) (*PathBuilder, []rune, int, error) { + if b.root == nil || b.node == nil { + return nil, nil, 0, fmt.Errorf("required '$' character at first: %w", ErrInvalidPathString) + } + + length := len(buf) + cursor++ // skip '[' character + if length <= cursor { + return nil, nil, 0, fmt.Errorf("unexpected end of YAML Path: %w", ErrInvalidPathString) + } + c := buf[cursor] + switch c { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '*': + start := cursor + cursor++ + for ; cursor < length; cursor++ { + c := buf[cursor] + switch c { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + continue + } + break + } + if buf[cursor] != ']' { + return nil, nil, 0, fmt.Errorf("invalid character %s at %d: %w", string(buf[cursor]), cursor, ErrInvalidPathString) + } + numOrAll := string(buf[start:cursor]) + if numOrAll == "*" { + return b.IndexAll(), buf, cursor + 1, nil + } + num, err := strconv.ParseInt(numOrAll, 10, 64) + if err != nil { + return nil, nil, 0, err + } + return b.Index(uint(num)), buf, cursor + 1, nil + } + return nil, nil, 0, fmt.Errorf("invalid character %q at %d: %w", c, cursor, ErrInvalidPathString) +} + +// Path represent YAMLPath ( like a JSONPath ). +type Path struct { + node pathNode +} + +// String path to text. +func (p *Path) String() string { + return p.node.String() +} + +// Read decode from r and set extracted value by YAMLPath to v. +func (p *Path) Read(r io.Reader, v interface{}) error { + node, err := p.ReadNode(r) + if err != nil { + return err + } + if err := Unmarshal([]byte(node.String()), v); err != nil { + return err + } + return nil +} + +// ReadNode create AST from r and extract node by YAMLPath. +func (p *Path) ReadNode(r io.Reader) (ast.Node, error) { + if p.node == nil { + return nil, ErrInvalidPath + } + var buf bytes.Buffer + if _, err := io.Copy(&buf, r); err != nil { + return nil, err + } + f, err := parser.ParseBytes(buf.Bytes(), 0) + if err != nil { + return nil, err + } + node, err := p.FilterFile(f) + if err != nil { + return nil, err + } + return node, nil +} + +// Filter filter from target by YAMLPath and set it to v. +func (p *Path) Filter(target, v interface{}) error { + b, err := Marshal(target) + if err != nil { + return err + } + if err := p.Read(bytes.NewBuffer(b), v); err != nil { + return err + } + return nil +} + +// FilterFile filter from ast.File by YAMLPath. +func (p *Path) FilterFile(f *ast.File) (ast.Node, error) { + for _, doc := range f.Docs { + node, err := p.FilterNode(doc.Body) + if err != nil { + return nil, err + } + if node != nil { + return node, nil + } + } + return nil, fmt.Errorf("failed to find path ( %s ): %w", p.node, ErrNotFoundNode) +} + +// FilterNode filter from node by YAMLPath. +func (p *Path) FilterNode(node ast.Node) (ast.Node, error) { + if node == nil { + return nil, nil + } + n, err := p.node.filter(node) + if err != nil { + return nil, err + } + return n, nil +} + +// MergeFromReader merge YAML text into ast.File. +func (p *Path) MergeFromReader(dst *ast.File, src io.Reader) error { + var buf bytes.Buffer + if _, err := io.Copy(&buf, src); err != nil { + return err + } + file, err := parser.ParseBytes(buf.Bytes(), 0) + if err != nil { + return err + } + if err := p.MergeFromFile(dst, file); err != nil { + return err + } + return nil +} + +// MergeFromFile merge ast.File into ast.File. +func (p *Path) MergeFromFile(dst *ast.File, src *ast.File) error { + base, err := p.FilterFile(dst) + if err != nil { + return err + } + for _, doc := range src.Docs { + if err := ast.Merge(base, doc); err != nil { + return err + } + } + return nil +} + +// MergeFromNode merge ast.Node into ast.File. +func (p *Path) MergeFromNode(dst *ast.File, src ast.Node) error { + base, err := p.FilterFile(dst) + if err != nil { + return err + } + if err := ast.Merge(base, src); err != nil { + return err + } + return nil +} + +// ReplaceWithReader replace ast.File with io.Reader. +func (p *Path) ReplaceWithReader(dst *ast.File, src io.Reader) error { + var buf bytes.Buffer + if _, err := io.Copy(&buf, src); err != nil { + return err + } + file, err := parser.ParseBytes(buf.Bytes(), 0) + if err != nil { + return err + } + if err := p.ReplaceWithFile(dst, file); err != nil { + return err + } + return nil +} + +// ReplaceWithFile replace ast.File with ast.File. +func (p *Path) ReplaceWithFile(dst *ast.File, src *ast.File) error { + for _, doc := range src.Docs { + if err := p.ReplaceWithNode(dst, doc); err != nil { + return err + } + } + return nil +} + +// ReplaceNode replace ast.File with ast.Node. +func (p *Path) ReplaceWithNode(dst *ast.File, node ast.Node) error { + for _, doc := range dst.Docs { + if node.Type() == ast.DocumentType { + node = node.(*ast.DocumentNode).Body + } + if err := p.node.replace(doc.Body, node); err != nil { + return err + } + } + return nil +} + +// AnnotateSource add annotation to passed source ( see section 5.1 in README.md ). +func (p *Path) AnnotateSource(source []byte, colored bool) ([]byte, error) { + file, err := parser.ParseBytes([]byte(source), 0) + if err != nil { + return nil, err + } + node, err := p.FilterFile(file) + if err != nil { + return nil, err + } + var pp printer.Printer + return []byte(pp.PrintErrorToken(node.GetToken(), colored)), nil +} + +// PathBuilder represent builder for YAMLPath. +type PathBuilder struct { + root *rootNode + node pathNode +} + +// Root add '$' to current path. +func (b *PathBuilder) Root() *PathBuilder { + root := newRootNode() + return &PathBuilder{root: root, node: root} +} + +// IndexAll add '[*]' to current path. +func (b *PathBuilder) IndexAll() *PathBuilder { + b.node = b.node.chain(newIndexAllNode()) + return b +} + +// Recursive add '..selector' to current path. +func (b *PathBuilder) Recursive(selector string) *PathBuilder { + b.node = b.node.chain(newRecursiveNode(selector)) + return b +} + +func (b *PathBuilder) containsReservedPathCharacters(path string) bool { + if strings.Contains(path, ".") { + return true + } + if strings.Contains(path, "*") { + return true + } + return false +} + +func (b *PathBuilder) enclosedSingleQuote(name string) bool { + return strings.HasPrefix(name, "'") && strings.HasSuffix(name, "'") +} + +func (b *PathBuilder) normalizeSelectorName(name string) string { + if b.enclosedSingleQuote(name) { + // already escaped name + return name + } + if b.containsReservedPathCharacters(name) { + escapedName := strings.ReplaceAll(name, `'`, `\'`) + return "'" + escapedName + "'" + } + return name +} + +func (b *PathBuilder) child(name string) *PathBuilder { + b.node = b.node.chain(newSelectorNode(name)) + return b +} + +// Child add '.name' to current path. +func (b *PathBuilder) Child(name string) *PathBuilder { + return b.child(b.normalizeSelectorName(name)) +} + +// Index add '[idx]' to current path. +func (b *PathBuilder) Index(idx uint) *PathBuilder { + b.node = b.node.chain(newIndexNode(idx)) + return b +} + +// Build build YAMLPath. +func (b *PathBuilder) Build() *Path { + return &Path{node: b.root} +} + +type pathNode interface { + fmt.Stringer + chain(pathNode) pathNode + filter(ast.Node) (ast.Node, error) + replace(ast.Node, ast.Node) error +} + +type basePathNode struct { + child pathNode +} + +func (n *basePathNode) chain(node pathNode) pathNode { + n.child = node + return node +} + +type rootNode struct { + *basePathNode +} + +func newRootNode() *rootNode { + return &rootNode{basePathNode: &basePathNode{}} +} + +func (n *rootNode) String() string { + s := "$" + if n.child != nil { + s += n.child.String() + } + return s +} + +func (n *rootNode) filter(node ast.Node) (ast.Node, error) { + if n.child == nil { + return node, nil + } + filtered, err := n.child.filter(node) + if err != nil { + return nil, err + } + return filtered, nil +} + +func (n *rootNode) replace(node ast.Node, target ast.Node) error { + if n.child == nil { + return nil + } + if err := n.child.replace(node, target); err != nil { + return err + } + return nil +} + +type selectorNode struct { + *basePathNode + selector string +} + +func newSelectorNode(selector string) *selectorNode { + return &selectorNode{ + basePathNode: &basePathNode{}, + selector: selector, + } +} + +func (n *selectorNode) filter(node ast.Node) (ast.Node, error) { + selector := n.selector + if len(selector) > 1 && selector[0] == '\'' && selector[len(selector)-1] == '\'' { + selector = selector[1 : len(selector)-1] + } + switch node.Type() { + case ast.MappingType: + for _, value := range node.(*ast.MappingNode).Values { + key := value.Key.GetToken().Value + if len(key) > 0 { + switch key[0] { + case '"': + var err error + key, err = strconv.Unquote(key) + if err != nil { + return nil, err + } + case '\'': + if len(key) > 1 && key[len(key)-1] == '\'' { + key = key[1 : len(key)-1] + } + } + } + if key == selector { + if n.child == nil { + return value.Value, nil + } + filtered, err := n.child.filter(value.Value) + if err != nil { + return nil, err + } + return filtered, nil + } + } + case ast.MappingValueType: + value, _ := node.(*ast.MappingValueNode) + key := value.Key.GetToken().Value + if key == selector { + if n.child == nil { + return value.Value, nil + } + filtered, err := n.child.filter(value.Value) + if err != nil { + return nil, err + } + return filtered, nil + } + default: + return nil, fmt.Errorf("expected node type is map or map value. but got %s: %w", node.Type(), ErrInvalidQuery) + } + return nil, nil +} + +func (n *selectorNode) replaceMapValue(value *ast.MappingValueNode, target ast.Node) error { + key := value.Key.GetToken().Value + if key != n.selector { + return nil + } + if n.child == nil { + if err := value.Replace(target); err != nil { + return err + } + } else { + if err := n.child.replace(value.Value, target); err != nil { + return err + } + } + return nil +} + +func (n *selectorNode) replace(node ast.Node, target ast.Node) error { + switch node.Type() { + case ast.MappingType: + for _, value := range node.(*ast.MappingNode).Values { + if err := n.replaceMapValue(value, target); err != nil { + return err + } + } + case ast.MappingValueType: + value, _ := node.(*ast.MappingValueNode) + if err := n.replaceMapValue(value, target); err != nil { + return err + } + default: + return fmt.Errorf("expected node type is map or map value. but got %s: %w", node.Type(), ErrInvalidQuery) + } + return nil +} + +func (n *selectorNode) String() string { + var builder PathBuilder + selector := builder.normalizeSelectorName(n.selector) + s := fmt.Sprintf(".%s", selector) + if n.child != nil { + s += n.child.String() + } + return s +} + +type indexNode struct { + *basePathNode + selector uint +} + +func newIndexNode(selector uint) *indexNode { + return &indexNode{ + basePathNode: &basePathNode{}, + selector: selector, + } +} + +func (n *indexNode) filter(node ast.Node) (ast.Node, error) { + if node.Type() != ast.SequenceType { + return nil, fmt.Errorf("expected sequence type node. but got %s: %w", node.Type(), ErrInvalidQuery) + } + sequence, _ := node.(*ast.SequenceNode) + if n.selector >= uint(len(sequence.Values)) { + return nil, fmt.Errorf("expected index is %d. but got sequences has %d items: %w", n.selector, len(sequence.Values), ErrInvalidQuery) + } + value := sequence.Values[n.selector] + if n.child == nil { + return value, nil + } + filtered, err := n.child.filter(value) + if err != nil { + return nil, err + } + return filtered, nil +} + +func (n *indexNode) replace(node ast.Node, target ast.Node) error { + if node.Type() != ast.SequenceType { + return fmt.Errorf("expected sequence type node. but got %s: %w", node.Type(), ErrInvalidQuery) + } + sequence, _ := node.(*ast.SequenceNode) + if n.selector >= uint(len(sequence.Values)) { + return fmt.Errorf("expected index is %d. but got sequences has %d items: %w", n.selector, len(sequence.Values), ErrInvalidQuery) + } + if n.child == nil { + if err := sequence.Replace(int(n.selector), target); err != nil { + return err + } + return nil + } + if err := n.child.replace(sequence.Values[n.selector], target); err != nil { + return err + } + return nil +} + +func (n *indexNode) String() string { + s := fmt.Sprintf("[%d]", n.selector) + if n.child != nil { + s += n.child.String() + } + return s +} + +type indexAllNode struct { + *basePathNode +} + +func newIndexAllNode() *indexAllNode { + return &indexAllNode{ + basePathNode: &basePathNode{}, + } +} + +func (n *indexAllNode) String() string { + s := "[*]" + if n.child != nil { + s += n.child.String() + } + return s +} + +func (n *indexAllNode) filter(node ast.Node) (ast.Node, error) { + if node.Type() != ast.SequenceType { + return nil, fmt.Errorf("expected sequence type node. but got %s: %w", node.Type(), ErrInvalidQuery) + } + sequence, _ := node.(*ast.SequenceNode) + if n.child == nil { + return sequence, nil + } + out := *sequence + out.Values = []ast.Node{} + for _, value := range sequence.Values { + filtered, err := n.child.filter(value) + if err != nil { + return nil, err + } + out.Values = append(out.Values, filtered) + } + return &out, nil +} + +func (n *indexAllNode) replace(node ast.Node, target ast.Node) error { + if node.Type() != ast.SequenceType { + return fmt.Errorf("expected sequence type node. but got %s: %w", node.Type(), ErrInvalidQuery) + } + sequence, _ := node.(*ast.SequenceNode) + if n.child == nil { + for idx := range sequence.Values { + if err := sequence.Replace(idx, target); err != nil { + return err + } + } + return nil + } + for _, value := range sequence.Values { + if err := n.child.replace(value, target); err != nil { + return err + } + } + return nil +} + +type recursiveNode struct { + *basePathNode + selector string +} + +func newRecursiveNode(selector string) *recursiveNode { + return &recursiveNode{ + basePathNode: &basePathNode{}, + selector: selector, + } +} + +func (n *recursiveNode) String() string { + s := fmt.Sprintf("..%s", n.selector) + if n.child != nil { + s += n.child.String() + } + return s +} + +func (n *recursiveNode) filterNode(node ast.Node) (*ast.SequenceNode, error) { + sequence := &ast.SequenceNode{BaseNode: &ast.BaseNode{}} + switch typedNode := node.(type) { + case *ast.MappingNode: + for _, value := range typedNode.Values { + seq, err := n.filterNode(value) + if err != nil { + return nil, err + } + sequence.Values = append(sequence.Values, seq.Values...) + } + case *ast.MappingValueNode: + key := typedNode.Key.GetToken().Value + if n.selector == key { + sequence.Values = append(sequence.Values, typedNode.Value) + } + seq, err := n.filterNode(typedNode.Value) + if err != nil { + return nil, err + } + sequence.Values = append(sequence.Values, seq.Values...) + case *ast.SequenceNode: + for _, value := range typedNode.Values { + seq, err := n.filterNode(value) + if err != nil { + return nil, err + } + sequence.Values = append(sequence.Values, seq.Values...) + } + } + return sequence, nil +} + +func (n *recursiveNode) filter(node ast.Node) (ast.Node, error) { + sequence, err := n.filterNode(node) + if err != nil { + return nil, err + } + sequence.Start = node.GetToken() + return sequence, nil +} + +func (n *recursiveNode) replaceNode(node ast.Node, target ast.Node) error { + switch typedNode := node.(type) { + case *ast.MappingNode: + for _, value := range typedNode.Values { + if err := n.replaceNode(value, target); err != nil { + return err + } + } + case *ast.MappingValueNode: + key := typedNode.Key.GetToken().Value + if n.selector == key { + if err := typedNode.Replace(target); err != nil { + return err + } + } + if err := n.replaceNode(typedNode.Value, target); err != nil { + return err + } + case *ast.SequenceNode: + for _, value := range typedNode.Values { + if err := n.replaceNode(value, target); err != nil { + return err + } + } + } + return nil +} + +func (n *recursiveNode) replace(node ast.Node, target ast.Node) error { + if err := n.replaceNode(node, target); err != nil { + return err + } + return nil +} diff --git a/vendor/github.com/goccy/go-yaml/printer/color.go b/vendor/github.com/goccy/go-yaml/printer/color.go new file mode 100644 index 0000000..79d7d7c --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/printer/color.go @@ -0,0 +1,83 @@ +// This source inspired by https://github.com/fatih/color. +package printer + +import ( + "fmt" + "strings" +) + +type ColorAttribute int + +const ( + ColorReset ColorAttribute = iota + ColorBold + ColorFaint + ColorItalic + ColorUnderline + ColorBlinkSlow + ColorBlinkRapid + ColorReverseVideo + ColorConcealed + ColorCrossedOut +) + +const ( + ColorFgHiBlack ColorAttribute = iota + 90 + ColorFgHiRed + ColorFgHiGreen + ColorFgHiYellow + ColorFgHiBlue + ColorFgHiMagenta + ColorFgHiCyan + ColorFgHiWhite +) + +const ( + ColorResetBold ColorAttribute = iota + 22 + ColorResetItalic + ColorResetUnderline + ColorResetBlinking + + ColorResetReversed + ColorResetConcealed + ColorResetCrossedOut +) + +const escape = "\x1b" + +var colorResetMap = map[ColorAttribute]ColorAttribute{ + ColorBold: ColorResetBold, + ColorFaint: ColorResetBold, + ColorItalic: ColorResetItalic, + ColorUnderline: ColorResetUnderline, + ColorBlinkSlow: ColorResetBlinking, + ColorBlinkRapid: ColorResetBlinking, + ColorReverseVideo: ColorResetReversed, + ColorConcealed: ColorResetConcealed, + ColorCrossedOut: ColorResetCrossedOut, +} + +func format(attrs ...ColorAttribute) string { + format := make([]string, 0, len(attrs)) + for _, attr := range attrs { + format = append(format, fmt.Sprint(attr)) + } + return fmt.Sprintf("%s[%sm", escape, strings.Join(format, ";")) +} + +func unformat(attrs ...ColorAttribute) string { + format := make([]string, len(attrs)) + for _, attr := range attrs { + v := fmt.Sprint(ColorReset) + reset, exists := colorResetMap[attr] + if exists { + v = fmt.Sprint(reset) + } + format = append(format, v) + } + return fmt.Sprintf("%s[%sm", escape, strings.Join(format, ";")) +} + +func colorize(msg string, attrs ...ColorAttribute) string { + return format(attrs...) + msg + unformat(attrs...) +} diff --git a/vendor/github.com/goccy/go-yaml/printer/printer.go b/vendor/github.com/goccy/go-yaml/printer/printer.go new file mode 100644 index 0000000..9346983 --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/printer/printer.go @@ -0,0 +1,353 @@ +package printer + +import ( + "fmt" + "math" + "strings" + + "github.com/goccy/go-yaml/ast" + "github.com/goccy/go-yaml/token" +) + +// Property additional property set for each the token +type Property struct { + Prefix string + Suffix string +} + +// PrintFunc returns property instance +type PrintFunc func() *Property + +// Printer create text from token collection or ast +type Printer struct { + LineNumber bool + LineNumberFormat func(num int) string + MapKey PrintFunc + Anchor PrintFunc + Alias PrintFunc + Bool PrintFunc + String PrintFunc + Number PrintFunc + Comment PrintFunc +} + +func defaultLineNumberFormat(num int) string { + return fmt.Sprintf("%2d | ", num) +} + +func (p *Printer) property(tk *token.Token) *Property { + prop := &Property{} + switch tk.PreviousType() { + case token.AnchorType: + if p.Anchor != nil { + return p.Anchor() + } + return prop + case token.AliasType: + if p.Alias != nil { + return p.Alias() + } + return prop + } + switch tk.NextType() { + case token.MappingValueType: + if p.MapKey != nil { + return p.MapKey() + } + return prop + } + switch tk.Type { + case token.BoolType: + if p.Bool != nil { + return p.Bool() + } + return prop + case token.AnchorType: + if p.Anchor != nil { + return p.Anchor() + } + return prop + case token.AliasType: + if p.Anchor != nil { + return p.Alias() + } + return prop + case token.StringType, token.SingleQuoteType, token.DoubleQuoteType: + if p.String != nil { + return p.String() + } + return prop + case token.IntegerType, token.FloatType: + if p.Number != nil { + return p.Number() + } + return prop + case token.CommentType: + if p.Comment != nil { + return p.Comment() + } + return prop + default: + } + return prop +} + +// PrintTokens create text from token collection +func (p *Printer) PrintTokens(tokens token.Tokens) string { + if len(tokens) == 0 { + return "" + } + if p.LineNumber { + if p.LineNumberFormat == nil { + p.LineNumberFormat = defaultLineNumberFormat + } + } + texts := []string{} + lineNumber := tokens[0].Position.Line + for _, tk := range tokens { + lines := strings.Split(tk.Origin, "\n") + prop := p.property(tk) + header := "" + if p.LineNumber { + header = p.LineNumberFormat(lineNumber) + } + if len(lines) == 1 { + line := prop.Prefix + lines[0] + prop.Suffix + if len(texts) == 0 { + texts = append(texts, header+line) + lineNumber++ + } else { + text := texts[len(texts)-1] + texts[len(texts)-1] = text + line + } + } else { + for idx, src := range lines { + if p.LineNumber { + header = p.LineNumberFormat(lineNumber) + } + line := prop.Prefix + src + prop.Suffix + if idx == 0 { + if len(texts) == 0 { + texts = append(texts, header+line) + lineNumber++ + } else { + text := texts[len(texts)-1] + texts[len(texts)-1] = text + line + } + } else { + texts = append(texts, fmt.Sprintf("%s%s", header, line)) + lineNumber++ + } + } + } + } + return strings.Join(texts, "\n") +} + +// PrintNode create text from ast.Node +func (p *Printer) PrintNode(node ast.Node) []byte { + return []byte(fmt.Sprintf("%+v\n", node)) +} + +func (p *Printer) setDefaultColorSet() { + p.Bool = func() *Property { + return &Property{ + Prefix: format(ColorFgHiMagenta), + Suffix: format(ColorReset), + } + } + p.Number = func() *Property { + return &Property{ + Prefix: format(ColorFgHiMagenta), + Suffix: format(ColorReset), + } + } + p.MapKey = func() *Property { + return &Property{ + Prefix: format(ColorFgHiCyan), + Suffix: format(ColorReset), + } + } + p.Anchor = func() *Property { + return &Property{ + Prefix: format(ColorFgHiYellow), + Suffix: format(ColorReset), + } + } + p.Alias = func() *Property { + return &Property{ + Prefix: format(ColorFgHiYellow), + Suffix: format(ColorReset), + } + } + p.String = func() *Property { + return &Property{ + Prefix: format(ColorFgHiGreen), + Suffix: format(ColorReset), + } + } + p.Comment = func() *Property { + return &Property{ + Prefix: format(ColorFgHiBlack), + Suffix: format(ColorReset), + } + } +} + +func (p *Printer) PrintErrorMessage(msg string, isColored bool) string { + if isColored { + return fmt.Sprintf("%s%s%s", + format(ColorFgHiRed), + msg, + format(ColorReset), + ) + } + return msg +} + +func (p *Printer) removeLeftSideNewLineChar(src string) string { + return strings.TrimLeft(strings.TrimLeft(strings.TrimLeft(src, "\r"), "\n"), "\r\n") +} + +func (p *Printer) removeRightSideNewLineChar(src string) string { + return strings.TrimRight(strings.TrimRight(strings.TrimRight(src, "\r"), "\n"), "\r\n") +} + +func (p *Printer) removeRightSideWhiteSpaceChar(src string) string { + return p.removeRightSideNewLineChar(strings.TrimRight(src, " ")) +} + +func (p *Printer) newLineCount(s string) int { + src := []rune(s) + size := len(src) + cnt := 0 + for i := 0; i < size; i++ { + c := src[i] + switch c { + case '\r': + if i+1 < size && src[i+1] == '\n' { + i++ + } + cnt++ + case '\n': + cnt++ + } + } + return cnt +} + +func (p *Printer) isNewLineLastChar(s string) bool { + for i := len(s) - 1; i > 0; i-- { + c := s[i] + switch c { + case ' ': + continue + case '\n', '\r': + return true + } + break + } + return false +} + +func (p *Printer) printBeforeTokens(tk *token.Token, minLine, extLine int) token.Tokens { + for tk.Prev != nil { + if tk.Prev.Position.Line < minLine { + break + } + tk = tk.Prev + } + minTk := tk.Clone() + if minTk.Prev != nil { + // add white spaces to minTk by prev token + prev := minTk.Prev + whiteSpaceLen := len(prev.Origin) - len(strings.TrimRight(prev.Origin, " ")) + minTk.Origin = strings.Repeat(" ", whiteSpaceLen) + minTk.Origin + } + minTk.Origin = p.removeLeftSideNewLineChar(minTk.Origin) + tokens := token.Tokens{minTk} + tk = minTk.Next + for tk != nil && tk.Position.Line <= extLine { + clonedTk := tk.Clone() + tokens.Add(clonedTk) + tk = clonedTk.Next + } + lastTk := tokens[len(tokens)-1] + trimmedOrigin := p.removeRightSideWhiteSpaceChar(lastTk.Origin) + suffix := lastTk.Origin[len(trimmedOrigin):] + lastTk.Origin = trimmedOrigin + + if lastTk.Next != nil && len(suffix) > 1 { + next := lastTk.Next.Clone() + // add suffix to header of next token + if suffix[0] == '\n' || suffix[0] == '\r' { + suffix = suffix[1:] + } + next.Origin = suffix + next.Origin + lastTk.Next = next + } + return tokens +} + +func (p *Printer) printAfterTokens(tk *token.Token, maxLine int) token.Tokens { + tokens := token.Tokens{} + if tk == nil { + return tokens + } + if tk.Position.Line > maxLine { + return tokens + } + minTk := tk.Clone() + minTk.Origin = p.removeLeftSideNewLineChar(minTk.Origin) + tokens.Add(minTk) + tk = minTk.Next + for tk != nil && tk.Position.Line <= maxLine { + clonedTk := tk.Clone() + tokens.Add(clonedTk) + tk = clonedTk.Next + } + return tokens +} + +func (p *Printer) setupErrorTokenFormat(annotateLine int, isColored bool) { + prefix := func(annotateLine, num int) string { + if annotateLine == num { + return fmt.Sprintf("> %2d | ", num) + } + return fmt.Sprintf(" %2d | ", num) + } + p.LineNumber = true + p.LineNumberFormat = func(num int) string { + if isColored { + return colorize(prefix(annotateLine, num), ColorBold, ColorFgHiWhite) + } + return prefix(annotateLine, num) + } + if isColored { + p.setDefaultColorSet() + } +} + +func (p *Printer) PrintErrorToken(tk *token.Token, isColored bool) string { + errToken := tk + curLine := tk.Position.Line + curExtLine := curLine + p.newLineCount(p.removeLeftSideNewLineChar(tk.Origin)) + if p.isNewLineLastChar(tk.Origin) { + // if last character ( exclude white space ) is new line character, ignore it. + curExtLine-- + } + + minLine := int(math.Max(float64(curLine-3), 1)) + maxLine := curExtLine + 3 + p.setupErrorTokenFormat(curLine, isColored) + + beforeTokens := p.printBeforeTokens(tk, minLine, curExtLine) + lastTk := beforeTokens[len(beforeTokens)-1] + afterTokens := p.printAfterTokens(lastTk.Next, maxLine) + + beforeSource := p.PrintTokens(beforeTokens) + prefixSpaceNum := len(fmt.Sprintf(" %2d | ", curLine)) + annotateLine := strings.Repeat(" ", prefixSpaceNum+errToken.Position.Column-1) + "^" + afterSource := p.PrintTokens(afterTokens) + return fmt.Sprintf("%s\n%s\n%s", beforeSource, annotateLine, afterSource) +} diff --git a/vendor/github.com/goccy/go-yaml/scanner/context.go b/vendor/github.com/goccy/go-yaml/scanner/context.go new file mode 100644 index 0000000..4f3250b --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/scanner/context.go @@ -0,0 +1,452 @@ +package scanner + +import ( + "errors" + "strconv" + "strings" + "sync" + + "github.com/goccy/go-yaml/token" +) + +// Context context at scanning +type Context struct { + idx int + size int + notSpaceCharPos int + notSpaceOrgCharPos int + src []rune + buf []rune + obuf []rune + tokens token.Tokens + mstate *MultiLineState +} + +type MultiLineState struct { + opt string + firstLineIndentColumn int + prevLineIndentColumn int + lineIndentColumn int + lastNotSpaceOnlyLineIndentColumn int + spaceOnlyIndentColumn int + foldedNewLine bool + isRawFolded bool + isLiteral bool + isFolded bool +} + +var ( + ctxPool = sync.Pool{ + New: func() interface{} { + return createContext() + }, + } +) + +func createContext() *Context { + return &Context{ + idx: 0, + tokens: token.Tokens{}, + } +} + +func newContext(src []rune) *Context { + ctx, _ := ctxPool.Get().(*Context) + ctx.reset(src) + return ctx +} + +func (c *Context) release() { + ctxPool.Put(c) +} + +func (c *Context) clear() { + c.resetBuffer() + c.mstate = nil +} + +func (c *Context) reset(src []rune) { + c.idx = 0 + c.size = len(src) + c.src = src + c.tokens = c.tokens[:0] + c.resetBuffer() + c.mstate = nil +} + +func (c *Context) resetBuffer() { + c.buf = c.buf[:0] + c.obuf = c.obuf[:0] + c.notSpaceCharPos = 0 + c.notSpaceOrgCharPos = 0 +} + +func (c *Context) breakMultiLine() { + c.mstate = nil +} + +func (c *Context) getMultiLineState() *MultiLineState { + return c.mstate +} + +func (c *Context) setLiteral(lastDelimColumn int, opt string) { + mstate := &MultiLineState{ + isLiteral: true, + opt: opt, + } + indent := firstLineIndentColumnByOpt(opt) + if indent > 0 { + mstate.firstLineIndentColumn = lastDelimColumn + indent + } + c.mstate = mstate +} + +func (c *Context) setFolded(lastDelimColumn int, opt string) { + mstate := &MultiLineState{ + isFolded: true, + opt: opt, + } + indent := firstLineIndentColumnByOpt(opt) + if indent > 0 { + mstate.firstLineIndentColumn = lastDelimColumn + indent + } + c.mstate = mstate +} + +func (c *Context) setRawFolded(column int) { + mstate := &MultiLineState{ + isRawFolded: true, + } + mstate.updateIndentColumn(column) + c.mstate = mstate +} + +func firstLineIndentColumnByOpt(opt string) int { + opt = strings.TrimPrefix(opt, "-") + opt = strings.TrimPrefix(opt, "+") + opt = strings.TrimSuffix(opt, "-") + opt = strings.TrimSuffix(opt, "+") + i, _ := strconv.ParseInt(opt, 10, 64) + return int(i) +} + +func (s *MultiLineState) lastDelimColumn() int { + if s.firstLineIndentColumn == 0 { + return 0 + } + return s.firstLineIndentColumn - 1 +} + +func (s *MultiLineState) updateIndentColumn(column int) { + if s.firstLineIndentColumn == 0 { + s.firstLineIndentColumn = column + } + if s.lineIndentColumn == 0 { + s.lineIndentColumn = column + } +} + +func (s *MultiLineState) updateSpaceOnlyIndentColumn(column int) { + if s.firstLineIndentColumn != 0 { + return + } + s.spaceOnlyIndentColumn = column +} + +func (s *MultiLineState) validateIndentAfterSpaceOnly(column int) error { + if s.firstLineIndentColumn != 0 { + return nil + } + if s.spaceOnlyIndentColumn > column { + return errors.New("invalid number of indent is specified after space only") + } + return nil +} + +func (s *MultiLineState) validateIndentColumn() error { + if firstLineIndentColumnByOpt(s.opt) == 0 { + return nil + } + if s.firstLineIndentColumn > s.lineIndentColumn { + return errors.New("invalid number of indent is specified in the multi-line header") + } + return nil +} + +func (s *MultiLineState) updateNewLineState() { + s.prevLineIndentColumn = s.lineIndentColumn + if s.lineIndentColumn != 0 { + s.lastNotSpaceOnlyLineIndentColumn = s.lineIndentColumn + } + s.foldedNewLine = true + s.lineIndentColumn = 0 +} + +func (s *MultiLineState) isIndentColumn(column int) bool { + if s.firstLineIndentColumn == 0 { + return column == 1 + } + return s.firstLineIndentColumn > column +} + +func (s *MultiLineState) addIndent(ctx *Context, column int) { + if s.firstLineIndentColumn == 0 { + return + } + + // If the first line of the document has already been evaluated, the number is treated as the threshold, since the `firstLineIndentColumn` is a positive number. + if column < s.firstLineIndentColumn { + return + } + + // `c.foldedNewLine` is a variable that is set to true for every newline. + if !s.isLiteral && s.foldedNewLine { + s.foldedNewLine = false + } + // Since addBuf ignore space character, add to the buffer directly. + ctx.buf = append(ctx.buf, ' ') + ctx.notSpaceCharPos = len(ctx.buf) +} + +// updateNewLineInFolded if Folded or RawFolded context and the content on the current line starts at the same column as the previous line, +// treat the new-line-char as a space. +func (s *MultiLineState) updateNewLineInFolded(ctx *Context, column int) { + if s.isLiteral { + return + } + + // Folded or RawFolded. + + if !s.foldedNewLine { + return + } + var ( + lastChar rune + prevLastChar rune + ) + if len(ctx.buf) != 0 { + lastChar = ctx.buf[len(ctx.buf)-1] + } + if len(ctx.buf) > 1 { + prevLastChar = ctx.buf[len(ctx.buf)-2] + } + if s.lineIndentColumn == s.prevLineIndentColumn { + // --- + // > + // a + // b + if lastChar == '\n' { + ctx.buf[len(ctx.buf)-1] = ' ' + } + } else if s.prevLineIndentColumn == 0 && s.lastNotSpaceOnlyLineIndentColumn == column { + // if previous line is indent-space and new-line-char only, prevLineIndentColumn is zero. + // In this case, last new-line-char is removed. + // --- + // > + // a + // + // b + if lastChar == '\n' && prevLastChar == '\n' { + ctx.buf = ctx.buf[:len(ctx.buf)-1] + ctx.notSpaceCharPos = len(ctx.buf) + } + } + s.foldedNewLine = false +} + +func (s *MultiLineState) hasTrimAllEndNewlineOpt() bool { + return strings.HasPrefix(s.opt, "-") || strings.HasSuffix(s.opt, "-") || s.isRawFolded +} + +func (s *MultiLineState) hasKeepAllEndNewlineOpt() bool { + return strings.HasPrefix(s.opt, "+") || strings.HasSuffix(s.opt, "+") +} + +func (c *Context) addToken(tk *token.Token) { + if tk == nil { + return + } + c.tokens = append(c.tokens, tk) +} + +func (c *Context) addBuf(r rune) { + if len(c.buf) == 0 && (r == ' ' || r == '\t') { + return + } + c.buf = append(c.buf, r) + if r != ' ' && r != '\t' { + c.notSpaceCharPos = len(c.buf) + } +} + +func (c *Context) addBufWithTab(r rune) { + if len(c.buf) == 0 && r == ' ' { + return + } + c.buf = append(c.buf, r) + if r != ' ' { + c.notSpaceCharPos = len(c.buf) + } +} + +func (c *Context) addOriginBuf(r rune) { + c.obuf = append(c.obuf, r) + if r != ' ' && r != '\t' { + c.notSpaceOrgCharPos = len(c.obuf) + } +} + +func (c *Context) removeRightSpaceFromBuf() { + trimmedBuf := c.obuf[:c.notSpaceOrgCharPos] + buflen := len(trimmedBuf) + diff := len(c.obuf) - buflen + if diff > 0 { + c.obuf = c.obuf[:buflen] + c.buf = c.bufferedSrc() + } +} + +func (c *Context) isEOS() bool { + return len(c.src)-1 <= c.idx +} + +func (c *Context) isNextEOS() bool { + return len(c.src) <= c.idx+1 +} + +func (c *Context) next() bool { + return c.idx < c.size +} + +func (c *Context) source(s, e int) string { + return string(c.src[s:e]) +} + +func (c *Context) previousChar() rune { + if c.idx > 0 { + return c.src[c.idx-1] + } + return rune(0) +} + +func (c *Context) currentChar() rune { + if c.size > c.idx { + return c.src[c.idx] + } + return rune(0) +} + +func (c *Context) nextChar() rune { + if c.size > c.idx+1 { + return c.src[c.idx+1] + } + return rune(0) +} + +func (c *Context) repeatNum(r rune) int { + cnt := 0 + for i := c.idx; i < c.size; i++ { + if c.src[i] == r { + cnt++ + } else { + break + } + } + return cnt +} + +func (c *Context) progress(num int) { + c.idx += num +} + +func (c *Context) existsBuffer() bool { + return len(c.bufferedSrc()) != 0 +} + +func (c *Context) isMultiLine() bool { + return c.mstate != nil +} + +func (c *Context) bufferedSrc() []rune { + src := c.buf[:c.notSpaceCharPos] + if c.isMultiLine() { + mstate := c.getMultiLineState() + // remove end '\n' character and trailing empty lines. + // https://yaml.org/spec/1.2.2/#8112-block-chomping-indicator + if mstate.hasTrimAllEndNewlineOpt() { + // If the '-' flag is specified, all trailing newline characters will be removed. + src = []rune(strings.TrimRight(string(src), "\n")) + } else if !mstate.hasKeepAllEndNewlineOpt() { + // Normally, all but one of the trailing newline characters are removed. + var newLineCharCount int + for i := len(src) - 1; i >= 0; i-- { + if src[i] == '\n' { + newLineCharCount++ + continue + } + break + } + removedNewLineCharCount := newLineCharCount - 1 + for removedNewLineCharCount > 0 { + src = []rune(strings.TrimSuffix(string(src), "\n")) + removedNewLineCharCount-- + } + } + + // If the text ends with a space character, remove all of them. + if mstate.hasTrimAllEndNewlineOpt() { + src = []rune(strings.TrimRight(string(src), " ")) + } + if string(src) == "\n" { + // If the content consists only of a newline, + // it can be considered as the document ending without any specified value, + // so it is treated as an empty string. + src = []rune{} + } + if mstate.hasKeepAllEndNewlineOpt() && len(src) == 0 { + src = []rune{'\n'} + } + } + return src +} + +func (c *Context) bufferedToken(pos *token.Position) *token.Token { + if c.idx == 0 { + return nil + } + source := c.bufferedSrc() + if len(source) == 0 { + c.buf = c.buf[:0] // clear value's buffer only. + return nil + } + var tk *token.Token + if c.isMultiLine() { + tk = token.String(string(source), string(c.obuf), pos) + } else { + tk = token.New(string(source), string(c.obuf), pos) + } + c.setTokenTypeByPrevTag(tk) + c.resetBuffer() + return tk +} + +func (c *Context) setTokenTypeByPrevTag(tk *token.Token) { + lastTk := c.lastToken() + if lastTk == nil { + return + } + if lastTk.Type != token.TagType { + return + } + tag := token.ReservedTagKeyword(lastTk.Value) + if _, exists := token.ReservedTagKeywordMap[tag]; !exists { + tk.Type = token.StringType + } +} + +func (c *Context) lastToken() *token.Token { + if len(c.tokens) != 0 { + return c.tokens[len(c.tokens)-1] + } + return nil +} diff --git a/vendor/github.com/goccy/go-yaml/scanner/error.go b/vendor/github.com/goccy/go-yaml/scanner/error.go new file mode 100644 index 0000000..3f5419a --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/scanner/error.go @@ -0,0 +1,17 @@ +package scanner + +import "github.com/goccy/go-yaml/token" + +type InvalidTokenError struct { + Token *token.Token +} + +func (e *InvalidTokenError) Error() string { + return e.Token.Error +} + +func ErrInvalidToken(tk *token.Token) *InvalidTokenError { + return &InvalidTokenError{ + Token: tk, + } +} diff --git a/vendor/github.com/goccy/go-yaml/scanner/scanner.go b/vendor/github.com/goccy/go-yaml/scanner/scanner.go new file mode 100644 index 0000000..13a7ecc --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/scanner/scanner.go @@ -0,0 +1,1516 @@ +package scanner + +import ( + "errors" + "fmt" + "io" + "strconv" + "strings" + + "github.com/goccy/go-yaml/token" +) + +// IndentState state for indent +type IndentState int + +const ( + // IndentStateEqual equals previous indent + IndentStateEqual IndentState = iota + // IndentStateUp more indent than previous + IndentStateUp + // IndentStateDown less indent than previous + IndentStateDown + // IndentStateKeep uses not indent token + IndentStateKeep +) + +// Scanner holds the scanner's internal state while processing a given text. +// It can be allocated as part of another data structure but must be initialized via Init before use. +type Scanner struct { + source []rune + sourcePos int + sourceSize int + // line number. This number starts from 1. + line int + // column number. This number starts from 1. + column int + // offset represents the offset from the beginning of the source. + offset int + // lastDelimColumn is the last column needed to compare indent is retained. + lastDelimColumn int + // indentNum indicates the number of spaces used for indentation. + indentNum int + // prevLineIndentNum indicates the number of spaces used for indentation at previous line. + prevLineIndentNum int + // indentLevel indicates the level of indent depth. This value does not match the column value. + indentLevel int + isFirstCharAtLine bool + isAnchor bool + isAlias bool + isDirective bool + startedFlowSequenceNum int + startedFlowMapNum int + indentState IndentState + savedPos *token.Position +} + +func (s *Scanner) pos() *token.Position { + return &token.Position{ + Line: s.line, + Column: s.column, + Offset: s.offset, + IndentNum: s.indentNum, + IndentLevel: s.indentLevel, + } +} + +func (s *Scanner) bufferedToken(ctx *Context) *token.Token { + if s.savedPos != nil { + tk := ctx.bufferedToken(s.savedPos) + s.savedPos = nil + return tk + } + line := s.line + column := s.column - len(ctx.buf) + level := s.indentLevel + if ctx.isMultiLine() { + line -= s.newLineCount(ctx.buf) + column = strings.Index(string(ctx.obuf), string(ctx.buf)) + 1 + // Since we are in a literal, folded or raw folded + // we can use the indent level from the last token. + last := ctx.lastToken() + if last != nil { // The last token should never be nil here. + level = last.Position.IndentLevel + 1 + } + } + return ctx.bufferedToken(&token.Position{ + Line: line, + Column: column, + Offset: s.offset - len(ctx.buf), + IndentNum: s.indentNum, + IndentLevel: level, + }) +} + +func (s *Scanner) progressColumn(ctx *Context, num int) { + s.column += num + s.offset += num + s.progress(ctx, num) +} + +func (s *Scanner) progressOnly(ctx *Context, num int) { + s.offset += num + s.progress(ctx, num) +} + +func (s *Scanner) progressLine(ctx *Context) { + s.prevLineIndentNum = s.indentNum + s.column = 1 + s.line++ + s.offset++ + s.indentNum = 0 + s.isFirstCharAtLine = true + s.isAnchor = false + s.isAlias = false + s.isDirective = false + s.progress(ctx, 1) +} + +func (s *Scanner) progress(ctx *Context, num int) { + ctx.progress(num) + s.sourcePos += num +} + +func (s *Scanner) isNewLineChar(c rune) bool { + if c == '\n' { + return true + } + if c == '\r' { + return true + } + return false +} + +func (s *Scanner) newLineCount(src []rune) int { + size := len(src) + cnt := 0 + for i := 0; i < size; i++ { + c := src[i] + switch c { + case '\r': + if i+1 < size && src[i+1] == '\n' { + i++ + } + cnt++ + case '\n': + cnt++ + } + } + return cnt +} + +func (s *Scanner) updateIndentLevel() { + if s.prevLineIndentNum < s.indentNum { + s.indentLevel++ + } else if s.prevLineIndentNum > s.indentNum { + if s.indentLevel > 0 { + s.indentLevel-- + } + } +} + +func (s *Scanner) updateIndentState(ctx *Context) { + if s.lastDelimColumn == 0 { + return + } + + if s.lastDelimColumn < s.column { + s.indentState = IndentStateUp + } else { + // If lastDelimColumn and s.column are the same, + // treat as Down state since it is the same column as delimiter. + s.indentState = IndentStateDown + } +} + +func (s *Scanner) updateIndent(ctx *Context, c rune) { + if s.isFirstCharAtLine && s.isNewLineChar(c) { + return + } + if s.isFirstCharAtLine && c == ' ' { + s.indentNum++ + return + } + if s.isFirstCharAtLine && c == '\t' { + // found tab indent. + // In this case, scanTab returns error. + return + } + if !s.isFirstCharAtLine { + s.indentState = IndentStateKeep + return + } + s.updateIndentLevel() + s.updateIndentState(ctx) + s.isFirstCharAtLine = false +} + +func (s *Scanner) isChangedToIndentStateDown() bool { + return s.indentState == IndentStateDown +} + +func (s *Scanner) isChangedToIndentStateUp() bool { + return s.indentState == IndentStateUp +} + +func (s *Scanner) addBufferedTokenIfExists(ctx *Context) { + ctx.addToken(s.bufferedToken(ctx)) +} + +func (s *Scanner) breakMultiLine(ctx *Context) { + ctx.breakMultiLine() +} + +func (s *Scanner) scanSingleQuote(ctx *Context) (*token.Token, error) { + ctx.addOriginBuf('\'') + srcpos := s.pos() + startIndex := ctx.idx + 1 + src := ctx.src + size := len(src) + value := []rune{} + isFirstLineChar := false + isNewLine := false + + for idx := startIndex; idx < size; idx++ { + if !isNewLine { + s.progressColumn(ctx, 1) + } else { + isNewLine = false + } + c := src[idx] + ctx.addOriginBuf(c) + if s.isNewLineChar(c) { + notSpaceIdx := -1 + for i := len(value) - 1; i >= 0; i-- { + if value[i] == ' ' { + continue + } + notSpaceIdx = i + break + } + if len(value) > notSpaceIdx { + value = value[:notSpaceIdx+1] + } + if isFirstLineChar { + value = append(value, '\n') + } else { + value = append(value, ' ') + } + isFirstLineChar = true + isNewLine = true + s.progressLine(ctx) + if idx+1 < size { + if err := s.validateDocumentSeparatorMarker(ctx, src[idx+1:]); err != nil { + return nil, err + } + } + continue + } else if isFirstLineChar && c == ' ' { + continue + } else if isFirstLineChar && c == '\t' { + if s.lastDelimColumn >= s.column { + return nil, ErrInvalidToken( + token.Invalid( + "tab character cannot be used for indentation in single-quoted text", + string(ctx.obuf), s.pos(), + ), + ) + } + continue + } else if c != '\'' { + value = append(value, c) + isFirstLineChar = false + continue + } else if idx+1 < len(ctx.src) && ctx.src[idx+1] == '\'' { + // '' handle as ' character + value = append(value, c) + ctx.addOriginBuf(c) + idx++ + s.progressColumn(ctx, 1) + continue + } + s.progressColumn(ctx, 1) + return token.SingleQuote(string(value), string(ctx.obuf), srcpos), nil + } + s.progressColumn(ctx, 1) + return nil, ErrInvalidToken( + token.Invalid( + "could not find end character of single-quoted text", + string(ctx.obuf), srcpos, + ), + ) +} + +func hexToInt(b rune) int { + if b >= 'A' && b <= 'F' { + return int(b) - 'A' + 10 + } + if b >= 'a' && b <= 'f' { + return int(b) - 'a' + 10 + } + return int(b) - '0' +} + +func hexRunesToInt(b []rune) int { + sum := 0 + for i := 0; i < len(b); i++ { + sum += hexToInt(b[i]) << (uint(len(b)-i-1) * 4) + } + return sum +} + +func (s *Scanner) scanDoubleQuote(ctx *Context) (*token.Token, error) { + ctx.addOriginBuf('"') + srcpos := s.pos() + startIndex := ctx.idx + 1 + src := ctx.src + size := len(src) + value := []rune{} + isFirstLineChar := false + isNewLine := false + + for idx := startIndex; idx < size; idx++ { + if !isNewLine { + s.progressColumn(ctx, 1) + } else { + isNewLine = false + } + c := src[idx] + ctx.addOriginBuf(c) + if s.isNewLineChar(c) { + notSpaceIdx := -1 + for i := len(value) - 1; i >= 0; i-- { + if value[i] == ' ' { + continue + } + notSpaceIdx = i + break + } + if len(value) > notSpaceIdx { + value = value[:notSpaceIdx+1] + } + if isFirstLineChar { + value = append(value, '\n') + } else { + value = append(value, ' ') + } + isFirstLineChar = true + isNewLine = true + s.progressLine(ctx) + if idx+1 < size { + if err := s.validateDocumentSeparatorMarker(ctx, src[idx+1:]); err != nil { + return nil, err + } + } + continue + } else if isFirstLineChar && c == ' ' { + continue + } else if isFirstLineChar && c == '\t' { + if s.lastDelimColumn >= s.column { + return nil, ErrInvalidToken( + token.Invalid( + "tab character cannot be used for indentation in double-quoted text", + string(ctx.obuf), s.pos(), + ), + ) + } + continue + } else if c == '\\' { + isFirstLineChar = false + if idx+1 >= size { + value = append(value, c) + continue + } + nextChar := src[idx+1] + progress := 0 + switch nextChar { + case '0': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x00) + case 'a': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x07) + case 'b': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x08) + case 't': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x09) + case 'n': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x0A) + case 'v': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x0B) + case 'f': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x0C) + case 'r': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x0D) + case 'e': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x1B) + case ' ': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x20) + case '"': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x22) + case '/': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x2F) + case '\\': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x5C) + case 'N': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x85) + case '_': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0xA0) + case 'L': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x2028) + case 'P': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, 0x2029) + case 'x': + if idx+3 >= size { + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, nextChar) + } else { + progress = 3 + codeNum := hexRunesToInt(src[idx+2 : idx+progress+1]) + value = append(value, rune(codeNum)) + } + case 'u': + // \u0000 style must have 5 characters at least. + if idx+5 >= size { + return nil, ErrInvalidToken( + token.Invalid( + "not enough length for escaped UTF-16 character", + string(ctx.obuf), s.pos(), + ), + ) + } + progress = 5 + codeNum := hexRunesToInt(src[idx+2 : idx+6]) + + // handle surrogate pairs. + if codeNum >= 0xD800 && codeNum <= 0xDBFF { + high := codeNum + + // \u0000\u0000 style must have 11 characters at least. + if idx+11 >= size { + return nil, ErrInvalidToken( + token.Invalid( + "not enough length for escaped UTF-16 surrogate pair", + string(ctx.obuf), s.pos(), + ), + ) + } + + if src[idx+6] != '\\' || src[idx+7] != 'u' { + return nil, ErrInvalidToken( + token.Invalid( + "found unexpected character after high surrogate for UTF-16 surrogate pair", + string(ctx.obuf), s.pos(), + ), + ) + } + + low := hexRunesToInt(src[idx+8 : idx+12]) + if low < 0xDC00 || low > 0xDFFF { + return nil, ErrInvalidToken( + token.Invalid( + "found unexpected low surrogate after high surrogate", + string(ctx.obuf), s.pos(), + ), + ) + } + codeNum = ((high - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000 + progress += 6 + } + value = append(value, rune(codeNum)) + case 'U': + // \U00000000 style must have 9 characters at least. + if idx+9 >= size { + return nil, ErrInvalidToken( + token.Invalid( + "not enough length for escaped UTF-32 character", + string(ctx.obuf), s.pos(), + ), + ) + } + progress = 9 + codeNum := hexRunesToInt(src[idx+2 : idx+10]) + value = append(value, rune(codeNum)) + case '\n': + isFirstLineChar = true + isNewLine = true + ctx.addOriginBuf(nextChar) + s.progressColumn(ctx, 1) + s.progressLine(ctx) + idx++ + continue + case '\r': + isFirstLineChar = true + isNewLine = true + ctx.addOriginBuf(nextChar) + s.progressLine(ctx) + progress = 1 + // Skip \n after \r in CRLF sequences + if idx+2 < size && src[idx+2] == '\n' { + ctx.addOriginBuf('\n') + progress = 2 + } + case '\t': + progress = 1 + ctx.addOriginBuf(nextChar) + value = append(value, nextChar) + default: + s.progressColumn(ctx, 1) + return nil, ErrInvalidToken( + token.Invalid( + fmt.Sprintf("found unknown escape character %q", nextChar), + string(ctx.obuf), s.pos(), + ), + ) + } + idx += progress + s.progressColumn(ctx, progress) + continue + } else if c == '\t' { + var ( + foundNotSpaceChar bool + progress int + ) + for i := idx + 1; i < size; i++ { + if src[i] == ' ' || src[i] == '\t' { + progress++ + continue + } + if s.isNewLineChar(src[i]) { + break + } + foundNotSpaceChar = true + } + if foundNotSpaceChar { + value = append(value, c) + if src[idx+1] != '"' { + s.progressColumn(ctx, 1) + } + } else { + idx += progress + s.progressColumn(ctx, progress) + } + continue + } else if c != '"' { + value = append(value, c) + isFirstLineChar = false + continue + } + s.progressColumn(ctx, 1) + return token.DoubleQuote(string(value), string(ctx.obuf), srcpos), nil + } + s.progressColumn(ctx, 1) + return nil, ErrInvalidToken( + token.Invalid( + "could not find end character of double-quoted text", + string(ctx.obuf), srcpos, + ), + ) +} + +func (s *Scanner) validateDocumentSeparatorMarker(ctx *Context, src []rune) error { + if s.foundDocumentSeparatorMarker(src) { + return ErrInvalidToken( + token.Invalid("found unexpected document separator", string(ctx.obuf), s.pos()), + ) + } + return nil +} + +func (s *Scanner) foundDocumentSeparatorMarker(src []rune) bool { + if len(src) < 3 { + return false + } + var marker string + if len(src) == 3 { + marker = string(src) + } else { + marker = strings.TrimRightFunc(string(src[:4]), func(r rune) bool { + return r == ' ' || r == '\t' || r == '\n' || r == '\r' + }) + } + return marker == "---" || marker == "..." +} + +func (s *Scanner) scanQuote(ctx *Context, ch rune) (bool, error) { + if ctx.existsBuffer() { + return false, nil + } + if ch == '\'' { + tk, err := s.scanSingleQuote(ctx) + if err != nil { + return false, err + } + ctx.addToken(tk) + } else { + tk, err := s.scanDoubleQuote(ctx) + if err != nil { + return false, err + } + ctx.addToken(tk) + } + ctx.clear() + return true, nil +} + +func (s *Scanner) scanWhiteSpace(ctx *Context) bool { + if ctx.isMultiLine() { + return false + } + if !s.isAnchor && !s.isDirective && !s.isAlias && !s.isFirstCharAtLine { + return false + } + + if s.isFirstCharAtLine { + s.progressColumn(ctx, 1) + ctx.addOriginBuf(' ') + return true + } + if s.isDirective { + s.addBufferedTokenIfExists(ctx) + s.progressColumn(ctx, 1) + ctx.addOriginBuf(' ') + return true + } + + s.addBufferedTokenIfExists(ctx) + s.isAnchor = false + s.isAlias = false + return true +} + +func (s *Scanner) isMergeKey(ctx *Context) bool { + if ctx.repeatNum('<') != 2 { + return false + } + src := ctx.src + size := len(src) + for idx := ctx.idx + 2; idx < size; idx++ { + c := src[idx] + if c == ' ' { + continue + } + if c != ':' { + return false + } + if idx+1 < size { + nc := src[idx+1] + if nc == ' ' || s.isNewLineChar(nc) { + return true + } + } + } + return false +} + +func (s *Scanner) scanTag(ctx *Context) (bool, error) { + if ctx.existsBuffer() || s.isDirective { + return false, nil + } + + ctx.addOriginBuf('!') + s.progress(ctx, 1) // skip '!' character + + var progress int + for idx, c := range ctx.src[ctx.idx:] { + progress = idx + 1 + switch c { + case ' ': + ctx.addOriginBuf(c) + value := ctx.source(ctx.idx-1, ctx.idx+idx) + ctx.addToken(token.Tag(value, string(ctx.obuf), s.pos())) + s.progressColumn(ctx, len([]rune(value))) + ctx.clear() + return true, nil + case ',': + if s.startedFlowSequenceNum > 0 || s.startedFlowMapNum > 0 { + value := ctx.source(ctx.idx-1, ctx.idx+idx) + ctx.addToken(token.Tag(value, string(ctx.obuf), s.pos())) + s.progressColumn(ctx, len([]rune(value))-1) // progress column before collect-entry for scanning it at scanFlowEntry function. + ctx.clear() + return true, nil + } else { + ctx.addOriginBuf(c) + } + case '\n', '\r': + ctx.addOriginBuf(c) + value := ctx.source(ctx.idx-1, ctx.idx+idx) + ctx.addToken(token.Tag(value, string(ctx.obuf), s.pos())) + s.progressColumn(ctx, len([]rune(value))-1) // progress column before new-line-char for scanning new-line-char at scanNewLine function. + ctx.clear() + return true, nil + case '{', '}': + ctx.addOriginBuf(c) + s.progressColumn(ctx, progress) + invalidTk := token.Invalid(fmt.Sprintf("found invalid tag character %q", c), string(ctx.obuf), s.pos()) + return false, ErrInvalidToken(invalidTk) + default: + ctx.addOriginBuf(c) + } + } + s.progressColumn(ctx, progress) + ctx.clear() + return true, nil +} + +func (s *Scanner) scanComment(ctx *Context) bool { + if ctx.existsBuffer() { + c := ctx.previousChar() + if c != ' ' && c != '\t' && !s.isNewLineChar(c) { + return false + } + } + + s.addBufferedTokenIfExists(ctx) + ctx.addOriginBuf('#') + s.progress(ctx, 1) // skip '#' character + + for idx, c := range ctx.src[ctx.idx:] { + ctx.addOriginBuf(c) + if !s.isNewLineChar(c) { + continue + } + if ctx.previousChar() == '\\' { + continue + } + value := ctx.source(ctx.idx, ctx.idx+idx) + progress := len([]rune(value)) + ctx.addToken(token.Comment(value, string(ctx.obuf), s.pos())) + s.progressColumn(ctx, progress) + s.progressLine(ctx) + ctx.clear() + return true + } + // document ends with comment. + value := string(ctx.src[ctx.idx:]) + ctx.addToken(token.Comment(value, string(ctx.obuf), s.pos())) + progress := len([]rune(value)) + s.progressColumn(ctx, progress) + s.progressLine(ctx) + ctx.clear() + return true +} + +func (s *Scanner) scanMultiLine(ctx *Context, c rune) error { + state := ctx.getMultiLineState() + ctx.addOriginBuf(c) + if ctx.isEOS() { + if s.isFirstCharAtLine && c == ' ' { + state.addIndent(ctx, s.column) + } else { + ctx.addBuf(c) + } + state.updateIndentColumn(s.column) + if err := state.validateIndentColumn(); err != nil { + invalidTk := token.Invalid(err.Error(), string(ctx.obuf), s.pos()) + s.progressColumn(ctx, 1) + return ErrInvalidToken(invalidTk) + } + value := ctx.bufferedSrc() + ctx.addToken(token.String(string(value), string(ctx.obuf), s.pos())) + ctx.clear() + s.progressColumn(ctx, 1) + } else if s.isNewLineChar(c) { + ctx.addBuf(c) + state.updateSpaceOnlyIndentColumn(s.column - 1) + state.updateNewLineState() + s.progressLine(ctx) + if ctx.next() { + if s.foundDocumentSeparatorMarker(ctx.src[ctx.idx:]) { + value := ctx.bufferedSrc() + ctx.addToken(token.String(string(value), string(ctx.obuf), s.pos())) + ctx.clear() + s.breakMultiLine(ctx) + } + } + } else if s.isFirstCharAtLine && c == ' ' { + state.addIndent(ctx, s.column) + s.progressColumn(ctx, 1) + } else if s.isFirstCharAtLine && c == '\t' && state.isIndentColumn(s.column) { + err := ErrInvalidToken( + token.Invalid( + "found a tab character where an indentation space is expected", + string(ctx.obuf), s.pos(), + ), + ) + s.progressColumn(ctx, 1) + return err + } else if c == '\t' && !state.isIndentColumn(s.column) { + ctx.addBufWithTab(c) + s.progressColumn(ctx, 1) + } else { + if err := state.validateIndentAfterSpaceOnly(s.column); err != nil { + invalidTk := token.Invalid(err.Error(), string(ctx.obuf), s.pos()) + s.progressColumn(ctx, 1) + return ErrInvalidToken(invalidTk) + } + state.updateIndentColumn(s.column) + if err := state.validateIndentColumn(); err != nil { + invalidTk := token.Invalid(err.Error(), string(ctx.obuf), s.pos()) + s.progressColumn(ctx, 1) + return ErrInvalidToken(invalidTk) + } + if col := state.lastDelimColumn(); col > 0 { + s.lastDelimColumn = col + } + state.updateNewLineInFolded(ctx, s.column) + ctx.addBufWithTab(c) + s.progressColumn(ctx, 1) + } + return nil +} + +func (s *Scanner) scanNewLine(ctx *Context, c rune) { + if len(ctx.buf) > 0 && s.savedPos == nil { + bufLen := len(ctx.bufferedSrc()) + s.savedPos = s.pos() + s.savedPos.Column -= bufLen + s.savedPos.Offset -= bufLen + } + + // if the following case, origin buffer has unnecessary two spaces. + // So, `removeRightSpaceFromOriginBuf` remove them, also fix column number too. + // --- + // a:[space][space] + // b: c + ctx.removeRightSpaceFromBuf() + + // There is no problem that we ignore CR which followed by LF and normalize it to LF, because of following YAML1.2 spec. + // > Line breaks inside scalar content must be normalized by the YAML processor. Each such line break must be parsed into a single line feed character. + // > Outside scalar content, YAML allows any line break to be used to terminate lines. + // > -- https://yaml.org/spec/1.2/spec.html + if c == '\r' && ctx.nextChar() == '\n' { + ctx.addOriginBuf('\r') + s.progress(ctx, 1) + s.offset++ + c = '\n' + } + + if ctx.isEOS() { + s.addBufferedTokenIfExists(ctx) + } else if s.isAnchor || s.isAlias || s.isDirective { + s.addBufferedTokenIfExists(ctx) + } + if ctx.existsBuffer() && s.isFirstCharAtLine { + if ctx.buf[len(ctx.buf)-1] == ' ' { + ctx.buf[len(ctx.buf)-1] = '\n' + } else { + ctx.buf = append(ctx.buf, '\n') + } + } else { + ctx.addBuf(' ') + } + ctx.addOriginBuf(c) + s.progressLine(ctx) +} + +func (s *Scanner) isFlowMode() bool { + if s.startedFlowSequenceNum > 0 { + return true + } + if s.startedFlowMapNum > 0 { + return true + } + return false +} + +func (s *Scanner) scanFlowMapStart(ctx *Context) bool { + if ctx.existsBuffer() && !s.isFlowMode() { + return false + } + + s.addBufferedTokenIfExists(ctx) + ctx.addOriginBuf('{') + ctx.addToken(token.MappingStart(string(ctx.obuf), s.pos())) + s.startedFlowMapNum++ + s.progressColumn(ctx, 1) + ctx.clear() + return true +} + +func (s *Scanner) scanFlowMapEnd(ctx *Context) bool { + if s.startedFlowMapNum <= 0 { + return false + } + + s.addBufferedTokenIfExists(ctx) + ctx.addOriginBuf('}') + ctx.addToken(token.MappingEnd(string(ctx.obuf), s.pos())) + s.startedFlowMapNum-- + s.progressColumn(ctx, 1) + ctx.clear() + return true +} + +func (s *Scanner) scanFlowArrayStart(ctx *Context) bool { + if ctx.existsBuffer() && !s.isFlowMode() { + return false + } + + s.addBufferedTokenIfExists(ctx) + ctx.addOriginBuf('[') + ctx.addToken(token.SequenceStart(string(ctx.obuf), s.pos())) + s.startedFlowSequenceNum++ + s.progressColumn(ctx, 1) + ctx.clear() + return true +} + +func (s *Scanner) scanFlowArrayEnd(ctx *Context) bool { + if ctx.existsBuffer() && s.startedFlowSequenceNum <= 0 { + return false + } + + s.addBufferedTokenIfExists(ctx) + ctx.addOriginBuf(']') + ctx.addToken(token.SequenceEnd(string(ctx.obuf), s.pos())) + s.startedFlowSequenceNum-- + s.progressColumn(ctx, 1) + ctx.clear() + return true +} + +func (s *Scanner) scanFlowEntry(ctx *Context, c rune) bool { + if s.startedFlowSequenceNum <= 0 && s.startedFlowMapNum <= 0 { + return false + } + + s.addBufferedTokenIfExists(ctx) + ctx.addOriginBuf(c) + ctx.addToken(token.CollectEntry(string(ctx.obuf), s.pos())) + s.progressColumn(ctx, 1) + ctx.clear() + return true +} + +func (s *Scanner) scanMapDelim(ctx *Context) (bool, error) { + nc := ctx.nextChar() + if s.isDirective || s.isAnchor || s.isAlias { + return false, nil + } + if s.startedFlowMapNum <= 0 && nc != ' ' && nc != '\t' && !s.isNewLineChar(nc) && !ctx.isNextEOS() { + return false, nil + } + if s.startedFlowMapNum > 0 && nc == '/' { + // like http:// + return false, nil + } + if s.startedFlowMapNum > 0 { + tk := ctx.lastToken() + if tk != nil && tk.Type == token.MappingValueType { + return false, nil + } + } + + if strings.HasPrefix(strings.TrimPrefix(string(ctx.obuf), " "), "\t") && !strings.HasPrefix(string(ctx.buf), "\t") { + invalidTk := token.Invalid("tab character cannot use as a map key directly", string(ctx.obuf), s.pos()) + s.progressColumn(ctx, 1) + return false, ErrInvalidToken(invalidTk) + } + + // mapping value + tk := s.bufferedToken(ctx) + if tk != nil { + s.lastDelimColumn = tk.Position.Column + ctx.addToken(tk) + } else if tk := ctx.lastToken(); tk != nil { + // If the map key is quote, the buffer does not exist because it has already been cut into tokens. + // Therefore, we need to check the last token. + if tk.Indicator == token.QuotedScalarIndicator { + s.lastDelimColumn = tk.Position.Column + } + } + ctx.addToken(token.MappingValue(s.pos())) + s.progressColumn(ctx, 1) + ctx.clear() + return true, nil +} + +func (s *Scanner) scanDocumentStart(ctx *Context) bool { + if s.indentNum != 0 { + return false + } + if s.column != 1 { + return false + } + if ctx.repeatNum('-') != 3 { + return false + } + if ctx.size > ctx.idx+3 { + c := ctx.src[ctx.idx+3] + if c != ' ' && c != '\t' && c != '\n' && c != '\r' { + return false + } + } + + s.addBufferedTokenIfExists(ctx) + ctx.addToken(token.DocumentHeader(string(ctx.obuf)+"---", s.pos())) + s.progressColumn(ctx, 3) + ctx.clear() + s.clearState() + return true +} + +func (s *Scanner) scanDocumentEnd(ctx *Context) bool { + if s.indentNum != 0 { + return false + } + if s.column != 1 { + return false + } + if ctx.repeatNum('.') != 3 { + return false + } + + s.addBufferedTokenIfExists(ctx) + ctx.addToken(token.DocumentEnd(string(ctx.obuf)+"...", s.pos())) + s.progressColumn(ctx, 3) + ctx.clear() + return true +} + +func (s *Scanner) scanMergeKey(ctx *Context) bool { + if !s.isMergeKey(ctx) { + return false + } + + s.lastDelimColumn = s.column + ctx.addToken(token.MergeKey(string(ctx.obuf)+"<<", s.pos())) + s.progressColumn(ctx, 2) + ctx.clear() + return true +} + +func (s *Scanner) scanRawFoldedChar(ctx *Context) bool { + if !ctx.existsBuffer() { + return false + } + if !s.isChangedToIndentStateUp() { + return false + } + + ctx.setRawFolded(s.column) + ctx.addBuf('-') + ctx.addOriginBuf('-') + s.progressColumn(ctx, 1) + return true +} + +func (s *Scanner) scanSequence(ctx *Context) (bool, error) { + if ctx.existsBuffer() { + return false, nil + } + + nc := ctx.nextChar() + if nc != 0 && nc != ' ' && nc != '\t' && !s.isNewLineChar(nc) { + return false, nil + } + + if strings.HasPrefix(strings.TrimPrefix(string(ctx.obuf), " "), "\t") { + invalidTk := token.Invalid("tab character cannot use as a sequence delimiter", string(ctx.obuf), s.pos()) + s.progressColumn(ctx, 1) + return false, ErrInvalidToken(invalidTk) + } + + s.addBufferedTokenIfExists(ctx) + ctx.addOriginBuf('-') + tk := token.SequenceEntry(string(ctx.obuf), s.pos()) + s.lastDelimColumn = tk.Position.Column + ctx.addToken(tk) + s.progressColumn(ctx, 1) + ctx.clear() + return true, nil +} + +func (s *Scanner) scanMultiLineHeader(ctx *Context) (bool, error) { + if ctx.existsBuffer() { + return false, nil + } + + if err := s.scanMultiLineHeaderOption(ctx); err != nil { + return false, err + } + s.progressLine(ctx) + return true, nil +} + +func (s *Scanner) validateMultiLineHeaderOption(opt string) error { + if len(opt) == 0 { + return nil + } + orgOpt := opt + opt = strings.TrimPrefix(opt, "-") + opt = strings.TrimPrefix(opt, "+") + opt = strings.TrimSuffix(opt, "-") + opt = strings.TrimSuffix(opt, "+") + if len(opt) == 0 { + return nil + } + if opt == "0" { + return fmt.Errorf("invalid header option: %q", orgOpt) + } + i, err := strconv.ParseInt(opt, 10, 64) + if err != nil { + return fmt.Errorf("invalid header option: %q", orgOpt) + } + if i > 9 { + return fmt.Errorf("invalid header option: %q", orgOpt) + } + return nil +} + +func (s *Scanner) scanMultiLineHeaderOption(ctx *Context) error { + header := ctx.currentChar() + ctx.addOriginBuf(header) + s.progress(ctx, 1) // skip '|' or '>' character + + var progress int + for idx, c := range ctx.src[ctx.idx:] { + progress = idx + ctx.addOriginBuf(c) + if s.isNewLineChar(c) { + break + } + } + value := strings.TrimRight(ctx.source(ctx.idx, ctx.idx+progress), " ") + commentValueIndex := strings.Index(value, "#") + opt := value + if commentValueIndex > 0 { + opt = value[:commentValueIndex] + } + opt = strings.TrimRightFunc(opt, func(r rune) bool { + return r == ' ' || r == '\t' + }) + if len(opt) != 0 { + if err := s.validateMultiLineHeaderOption(opt); err != nil { + invalidTk := token.Invalid(err.Error(), string(ctx.obuf), s.pos()) + s.progressColumn(ctx, progress) + return ErrInvalidToken(invalidTk) + } + } + if s.column == 1 { + s.lastDelimColumn = 1 + } + + commentIndex := strings.Index(string(ctx.obuf), "#") + headerBuf := string(ctx.obuf) + if commentIndex > 0 { + headerBuf = headerBuf[:commentIndex] + } + switch header { + case '|': + ctx.addToken(token.Literal("|"+opt, headerBuf, s.pos())) + ctx.setLiteral(s.lastDelimColumn, opt) + case '>': + ctx.addToken(token.Folded(">"+opt, headerBuf, s.pos())) + ctx.setFolded(s.lastDelimColumn, opt) + } + if commentIndex > 0 { + comment := string(value[commentValueIndex+1:]) + s.offset += len(headerBuf) + s.column += len(headerBuf) + ctx.addToken(token.Comment(comment, string(ctx.obuf[len(headerBuf):]), s.pos())) + } + s.indentState = IndentStateKeep + ctx.resetBuffer() + s.progressColumn(ctx, progress) + return nil +} + +func (s *Scanner) scanMapKey(ctx *Context) bool { + if ctx.existsBuffer() { + return false + } + + nc := ctx.nextChar() + if nc != ' ' && nc != '\t' { + return false + } + + tk := token.MappingKey(s.pos()) + s.lastDelimColumn = tk.Position.Column + ctx.addToken(tk) + s.progressColumn(ctx, 1) + ctx.clear() + return true +} + +func (s *Scanner) scanDirective(ctx *Context) bool { + if ctx.existsBuffer() { + return false + } + if s.indentNum != 0 { + return false + } + + s.addBufferedTokenIfExists(ctx) + ctx.addOriginBuf('%') + ctx.addToken(token.Directive(string(ctx.obuf), s.pos())) + s.progressColumn(ctx, 1) + ctx.clear() + s.isDirective = true + return true +} + +func (s *Scanner) scanAnchor(ctx *Context) bool { + if ctx.existsBuffer() { + return false + } + + s.addBufferedTokenIfExists(ctx) + ctx.addOriginBuf('&') + ctx.addToken(token.Anchor(string(ctx.obuf), s.pos())) + s.progressColumn(ctx, 1) + s.isAnchor = true + ctx.clear() + return true +} + +func (s *Scanner) scanAlias(ctx *Context) bool { + if ctx.existsBuffer() { + return false + } + + s.addBufferedTokenIfExists(ctx) + ctx.addOriginBuf('*') + ctx.addToken(token.Alias(string(ctx.obuf), s.pos())) + s.progressColumn(ctx, 1) + s.isAlias = true + ctx.clear() + return true +} + +func (s *Scanner) scanReservedChar(ctx *Context, c rune) error { + if ctx.existsBuffer() { + return nil + } + + ctx.addBuf(c) + ctx.addOriginBuf(c) + err := ErrInvalidToken( + token.Invalid( + fmt.Sprintf("%q is a reserved character", c), + string(ctx.obuf), s.pos(), + ), + ) + s.progressColumn(ctx, 1) + ctx.clear() + return err +} + +func (s *Scanner) scanTab(ctx *Context, c rune) error { + if s.startedFlowSequenceNum > 0 || s.startedFlowMapNum > 0 { + // tabs character is allowed in flow mode. + return nil + } + + if !s.isFirstCharAtLine { + return nil + } + + ctx.addBuf(c) + ctx.addOriginBuf(c) + err := ErrInvalidToken( + token.Invalid("found character '\t' that cannot start any token", + string(ctx.obuf), s.pos(), + ), + ) + s.progressColumn(ctx, 1) + ctx.clear() + return err +} + +func (s *Scanner) scan(ctx *Context) error { + for ctx.next() { + c := ctx.currentChar() + // First, change the IndentState. + // If the target character is the first character in a line, IndentState is Up/Down/Equal state. + // The second and subsequent letters are Keep. + s.updateIndent(ctx, c) + + // If IndentState is down, tokens are split, so the buffer accumulated until that point needs to be cutted as a token. + if s.isChangedToIndentStateDown() { + s.addBufferedTokenIfExists(ctx) + } + if ctx.isMultiLine() { + if s.isChangedToIndentStateDown() { + if tk := ctx.lastToken(); tk != nil { + // If literal/folded content is empty, no string token is added. + // Therefore, add an empty string token. + // But if literal/folded token column is 1, it is invalid at down state. + if tk.Position.Column == 1 { + return ErrInvalidToken( + token.Invalid( + "could not find multi-line content", + string(ctx.obuf), s.pos(), + ), + ) + } + if tk.Type != token.StringType { + ctx.addToken(token.String("", "", s.pos())) + } + } + s.breakMultiLine(ctx) + } else { + if err := s.scanMultiLine(ctx, c); err != nil { + return err + } + continue + } + } + switch c { + case '{': + if s.scanFlowMapStart(ctx) { + continue + } + case '}': + if s.scanFlowMapEnd(ctx) { + continue + } + case '.': + if s.scanDocumentEnd(ctx) { + continue + } + case '<': + if s.scanMergeKey(ctx) { + continue + } + case '-': + if s.scanDocumentStart(ctx) { + continue + } + if s.scanRawFoldedChar(ctx) { + continue + } + scanned, err := s.scanSequence(ctx) + if err != nil { + return err + } + if scanned { + continue + } + case '[': + if s.scanFlowArrayStart(ctx) { + continue + } + case ']': + if s.scanFlowArrayEnd(ctx) { + continue + } + case ',': + if s.scanFlowEntry(ctx, c) { + continue + } + case ':': + scanned, err := s.scanMapDelim(ctx) + if err != nil { + return err + } + if scanned { + continue + } + case '|', '>': + scanned, err := s.scanMultiLineHeader(ctx) + if err != nil { + return err + } + if scanned { + continue + } + case '!': + scanned, err := s.scanTag(ctx) + if err != nil { + return err + } + if scanned { + continue + } + case '%': + if s.scanDirective(ctx) { + continue + } + case '?': + if s.scanMapKey(ctx) { + continue + } + case '&': + if s.scanAnchor(ctx) { + continue + } + case '*': + if s.scanAlias(ctx) { + continue + } + case '#': + if s.scanComment(ctx) { + continue + } + case '\'', '"': + scanned, err := s.scanQuote(ctx, c) + if err != nil { + return err + } + if scanned { + continue + } + case '\r', '\n': + s.scanNewLine(ctx, c) + continue + case ' ': + if s.scanWhiteSpace(ctx) { + continue + } + case '@', '`': + if err := s.scanReservedChar(ctx, c); err != nil { + return err + } + case '\t': + if ctx.existsBuffer() && s.lastDelimColumn == 0 { + // tab indent for plain text (yaml-test-suite's spec-example-7-12-plain-lines). + s.indentNum++ + ctx.addOriginBuf(c) + s.progressOnly(ctx, 1) + continue + } + if s.lastDelimColumn < s.column { + s.indentNum++ + ctx.addOriginBuf(c) + s.progressOnly(ctx, 1) + continue + } + if err := s.scanTab(ctx, c); err != nil { + return err + } + } + ctx.addBuf(c) + ctx.addOriginBuf(c) + s.progressColumn(ctx, 1) + } + s.addBufferedTokenIfExists(ctx) + return nil +} + +// Init prepares the scanner s to tokenize the text src by setting the scanner at the beginning of src. +func (s *Scanner) Init(text string) { + src := []rune(text) + s.source = src + s.sourcePos = 0 + s.sourceSize = len(src) + s.line = 1 + s.column = 1 + s.offset = 1 + s.isFirstCharAtLine = true + s.clearState() +} + +func (s *Scanner) clearState() { + s.prevLineIndentNum = 0 + s.lastDelimColumn = 0 + s.indentLevel = 0 + s.indentNum = 0 +} + +// Scan scans the next token and returns the token collection. The source end is indicated by io.EOF. +func (s *Scanner) Scan() (token.Tokens, error) { + if s.sourcePos >= s.sourceSize { + return nil, io.EOF + } + ctx := newContext(s.source[s.sourcePos:]) + defer ctx.release() + + var tokens token.Tokens + err := s.scan(ctx) + tokens = append(tokens, ctx.tokens...) + + if err != nil { + var invalidTokenErr *InvalidTokenError + if errors.As(err, &invalidTokenErr) { + tokens = append(tokens, invalidTokenErr.Token) + } + return tokens, err + } + return tokens, nil +} diff --git a/vendor/github.com/goccy/go-yaml/stdlib_quote.go b/vendor/github.com/goccy/go-yaml/stdlib_quote.go new file mode 100644 index 0000000..120448d --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/stdlib_quote.go @@ -0,0 +1,113 @@ +// Copied and trimmed down from https://github.com/golang/go/blob/e3769299cd3484e018e0e2a6e1b95c2b18ce4f41/src/strconv/quote.go +// We want to use the standard library's private "quoteWith" function rather than write our own so that we get robust unicode support. +// Every private function called by quoteWith was copied. +// There are 2 modifications to simplify the code: +// 1. The unicode.IsPrint function was substituted for the custom implementation of IsPrint +// 2. All code paths reachable only when ASCIIonly or grphicOnly are set to true were removed. + +// 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 yaml + +import ( + "unicode" + "unicode/utf8" +) + +const ( + lowerhex = "0123456789abcdef" +) + +func quoteWith(s string, quote byte) string { + return string(appendQuotedWith(make([]byte, 0, 3*len(s)/2), s, quote)) +} + +func appendQuotedWith(buf []byte, s string, quote byte) []byte { + // Often called with big strings, so preallocate. If there's quoting, + // this is conservative but still helps a lot. + if cap(buf)-len(buf) < len(s) { + nBuf := make([]byte, len(buf), len(buf)+1+len(s)+1) + copy(nBuf, buf) + buf = nBuf + } + buf = append(buf, quote) + for width := 0; len(s) > 0; s = s[width:] { + r := rune(s[0]) + width = 1 + if r >= utf8.RuneSelf { + r, width = utf8.DecodeRuneInString(s) + } + if width == 1 && r == utf8.RuneError { + buf = append(buf, `\x`...) + buf = append(buf, lowerhex[s[0]>>4]) + buf = append(buf, lowerhex[s[0]&0xF]) + continue + } + buf = appendEscapedRune(buf, r, quote) + } + buf = append(buf, quote) + return buf +} + +func appendEscapedRune(buf []byte, r rune, quote byte) []byte { + var runeTmp [utf8.UTFMax]byte + // goccy/go-yaml patch on top of the standard library's appendEscapedRune function. + // + // We use this to implement the YAML single-quoted string, where the only escape sequence is '', which represents a single quote. + // The below snippet from the standard library is for escaping e.g. \ with \\, which is not what we want for the single-quoted string. + // + // if r == rune(quote) || r == '\\' { // always backslashed + // buf = append(buf, '\\') + // buf = append(buf, byte(r)) + // return buf + // } + if r == rune(quote) { + buf = append(buf, byte(r)) + buf = append(buf, byte(r)) + return buf + } + if unicode.IsPrint(r) { + n := utf8.EncodeRune(runeTmp[:], r) + buf = append(buf, runeTmp[:n]...) + return buf + } + switch r { + case '\a': + buf = append(buf, `\a`...) + case '\b': + buf = append(buf, `\b`...) + case '\f': + buf = append(buf, `\f`...) + case '\n': + buf = append(buf, `\n`...) + case '\r': + buf = append(buf, `\r`...) + case '\t': + buf = append(buf, `\t`...) + case '\v': + buf = append(buf, `\v`...) + default: + switch { + case r < ' ': + buf = append(buf, `\x`...) + buf = append(buf, lowerhex[byte(r)>>4]) + buf = append(buf, lowerhex[byte(r)&0xF]) + case r > utf8.MaxRune: + r = 0xFFFD + fallthrough + case r < 0x10000: + buf = append(buf, `\u`...) + for s := 12; s >= 0; s -= 4 { + buf = append(buf, lowerhex[r>>uint(s)&0xF]) + } + default: + buf = append(buf, `\U`...) + for s := 28; s >= 0; s -= 4 { + buf = append(buf, lowerhex[r>>uint(s)&0xF]) + } + } + } + return buf +} diff --git a/vendor/github.com/goccy/go-yaml/struct.go b/vendor/github.com/goccy/go-yaml/struct.go new file mode 100644 index 0000000..ece77f5 --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/struct.go @@ -0,0 +1,128 @@ +package yaml + +import ( + "fmt" + "reflect" + "strings" +) + +const ( + // StructTagName tag keyword for Marshal/Unmarshal + StructTagName = "yaml" +) + +// StructField information for each the field in structure +type StructField struct { + FieldName string + RenderName string + AnchorName string + AliasName string + IsAutoAnchor bool + IsAutoAlias bool + IsOmitEmpty bool + IsOmitZero bool + IsFlow bool + IsInline bool +} + +func getTag(field reflect.StructField) string { + // If struct tag `yaml` exist, use that. If no `yaml` + // exists, but `json` does, use that and try the best to + // adhere to its rules + tag := field.Tag.Get(StructTagName) + if tag == "" { + tag = field.Tag.Get(`json`) + } + return tag +} + +func structField(field reflect.StructField) *StructField { + tag := getTag(field) + fieldName := strings.ToLower(field.Name) + options := strings.Split(tag, ",") + if len(options) > 0 { + if options[0] != "" { + fieldName = options[0] + } + } + sf := &StructField{ + FieldName: field.Name, + RenderName: fieldName, + } + if len(options) > 1 { + for _, opt := range options[1:] { + switch { + case opt == "omitempty": + sf.IsOmitEmpty = true + case opt == "omitzero": + sf.IsOmitZero = true + case opt == "flow": + sf.IsFlow = true + case opt == "inline": + sf.IsInline = true + case strings.HasPrefix(opt, "anchor"): + anchor := strings.Split(opt, "=") + if len(anchor) > 1 { + sf.AnchorName = anchor[1] + } else { + sf.IsAutoAnchor = true + } + case strings.HasPrefix(opt, "alias"): + alias := strings.Split(opt, "=") + if len(alias) > 1 { + sf.AliasName = alias[1] + } else { + sf.IsAutoAlias = true + } + default: + } + } + } + return sf +} + +func isIgnoredStructField(field reflect.StructField) bool { + if field.PkgPath != "" && !field.Anonymous { + // private field + return true + } + return getTag(field) == "-" +} + +type StructFieldMap map[string]*StructField + +func (m StructFieldMap) isIncludedRenderName(name string) bool { + for _, v := range m { + if !v.IsInline && v.RenderName == name { + return true + } + } + return false +} + +func (m StructFieldMap) hasMergeProperty() bool { + for _, v := range m { + if v.IsOmitEmpty && v.IsInline && v.IsAutoAlias { + return true + } + } + return false +} + +func structFieldMap(structType reflect.Type) (StructFieldMap, error) { + fieldMap := StructFieldMap{} + renderNameMap := map[string]struct{}{} + for i := 0; i < structType.NumField(); i++ { + field := structType.Field(i) + if isIgnoredStructField(field) { + continue + } + sf := structField(field) + if _, exists := renderNameMap[sf.RenderName]; exists { + return nil, fmt.Errorf("duplicated struct field name %s", sf.RenderName) + } + fieldMap[sf.FieldName] = sf + renderNameMap[sf.RenderName] = struct{}{} + } + return fieldMap, nil +} diff --git a/vendor/github.com/goccy/go-yaml/token/token.go b/vendor/github.com/goccy/go-yaml/token/token.go new file mode 100644 index 0000000..e887356 --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/token/token.go @@ -0,0 +1,1177 @@ +package token + +import ( + "errors" + "fmt" + "strconv" + "strings" + "time" +) + +// Character type for character +type Character byte + +const ( + // SequenceEntryCharacter character for sequence entry + SequenceEntryCharacter Character = '-' + // MappingKeyCharacter character for mapping key + MappingKeyCharacter Character = '?' + // MappingValueCharacter character for mapping value + MappingValueCharacter Character = ':' + // CollectEntryCharacter character for collect entry + CollectEntryCharacter Character = ',' + // SequenceStartCharacter character for sequence start + SequenceStartCharacter Character = '[' + // SequenceEndCharacter character for sequence end + SequenceEndCharacter Character = ']' + // MappingStartCharacter character for mapping start + MappingStartCharacter Character = '{' + // MappingEndCharacter character for mapping end + MappingEndCharacter Character = '}' + // CommentCharacter character for comment + CommentCharacter Character = '#' + // AnchorCharacter character for anchor + AnchorCharacter Character = '&' + // AliasCharacter character for alias + AliasCharacter Character = '*' + // TagCharacter character for tag + TagCharacter Character = '!' + // LiteralCharacter character for literal + LiteralCharacter Character = '|' + // FoldedCharacter character for folded + FoldedCharacter Character = '>' + // SingleQuoteCharacter character for single quote + SingleQuoteCharacter Character = '\'' + // DoubleQuoteCharacter character for double quote + DoubleQuoteCharacter Character = '"' + // DirectiveCharacter character for directive + DirectiveCharacter Character = '%' + // SpaceCharacter character for space + SpaceCharacter Character = ' ' + // LineBreakCharacter character for line break + LineBreakCharacter Character = '\n' +) + +// Type type identifier for token +type Type int + +const ( + // UnknownType reserve for invalid type + UnknownType Type = iota + // DocumentHeaderType type for DocumentHeader token + DocumentHeaderType + // DocumentEndType type for DocumentEnd token + DocumentEndType + // SequenceEntryType type for SequenceEntry token + SequenceEntryType + // MappingKeyType type for MappingKey token + MappingKeyType + // MappingValueType type for MappingValue token + MappingValueType + // MergeKeyType type for MergeKey token + MergeKeyType + // CollectEntryType type for CollectEntry token + CollectEntryType + // SequenceStartType type for SequenceStart token + SequenceStartType + // SequenceEndType type for SequenceEnd token + SequenceEndType + // MappingStartType type for MappingStart token + MappingStartType + // MappingEndType type for MappingEnd token + MappingEndType + // CommentType type for Comment token + CommentType + // AnchorType type for Anchor token + AnchorType + // AliasType type for Alias token + AliasType + // TagType type for Tag token + TagType + // LiteralType type for Literal token + LiteralType + // FoldedType type for Folded token + FoldedType + // SingleQuoteType type for SingleQuote token + SingleQuoteType + // DoubleQuoteType type for DoubleQuote token + DoubleQuoteType + // DirectiveType type for Directive token + DirectiveType + // SpaceType type for Space token + SpaceType + // NullType type for Null token + NullType + // ImplicitNullType type for implicit Null token. + // This is used when explicit keywords such as null or ~ are not specified. + // It is distinguished during encoding and output as an empty string. + ImplicitNullType + // InfinityType type for Infinity token + InfinityType + // NanType type for Nan token + NanType + // IntegerType type for Integer token + IntegerType + // BinaryIntegerType type for BinaryInteger token + BinaryIntegerType + // OctetIntegerType type for OctetInteger token + OctetIntegerType + // HexIntegerType type for HexInteger token + HexIntegerType + // FloatType type for Float token + FloatType + // StringType type for String token + StringType + // BoolType type for Bool token + BoolType + // InvalidType type for invalid token + InvalidType +) + +// String type identifier to text +func (t Type) String() string { + switch t { + case UnknownType: + return "Unknown" + case DocumentHeaderType: + return "DocumentHeader" + case DocumentEndType: + return "DocumentEnd" + case SequenceEntryType: + return "SequenceEntry" + case MappingKeyType: + return "MappingKey" + case MappingValueType: + return "MappingValue" + case MergeKeyType: + return "MergeKey" + case CollectEntryType: + return "CollectEntry" + case SequenceStartType: + return "SequenceStart" + case SequenceEndType: + return "SequenceEnd" + case MappingStartType: + return "MappingStart" + case MappingEndType: + return "MappingEnd" + case CommentType: + return "Comment" + case AnchorType: + return "Anchor" + case AliasType: + return "Alias" + case TagType: + return "Tag" + case LiteralType: + return "Literal" + case FoldedType: + return "Folded" + case SingleQuoteType: + return "SingleQuote" + case DoubleQuoteType: + return "DoubleQuote" + case DirectiveType: + return "Directive" + case SpaceType: + return "Space" + case StringType: + return "String" + case BoolType: + return "Bool" + case IntegerType: + return "Integer" + case BinaryIntegerType: + return "BinaryInteger" + case OctetIntegerType: + return "OctetInteger" + case HexIntegerType: + return "HexInteger" + case FloatType: + return "Float" + case NullType: + return "Null" + case ImplicitNullType: + return "ImplicitNull" + case InfinityType: + return "Infinity" + case NanType: + return "Nan" + case InvalidType: + return "Invalid" + } + return "" +} + +// CharacterType type for character category +type CharacterType int + +const ( + // CharacterTypeIndicator type of indicator character + CharacterTypeIndicator CharacterType = iota + // CharacterTypeWhiteSpace type of white space character + CharacterTypeWhiteSpace + // CharacterTypeMiscellaneous type of miscellaneous character + CharacterTypeMiscellaneous + // CharacterTypeEscaped type of escaped character + CharacterTypeEscaped + // CharacterTypeInvalid type for a invalid token. + CharacterTypeInvalid +) + +// String character type identifier to text +func (c CharacterType) String() string { + switch c { + case CharacterTypeIndicator: + return "Indicator" + case CharacterTypeWhiteSpace: + return "WhiteSpace" + case CharacterTypeMiscellaneous: + return "Miscellaneous" + case CharacterTypeEscaped: + return "Escaped" + } + return "" +} + +// Indicator type for indicator +type Indicator int + +const ( + // NotIndicator not indicator + NotIndicator Indicator = iota + // BlockStructureIndicator indicator for block structure ( '-', '?', ':' ) + BlockStructureIndicator + // FlowCollectionIndicator indicator for flow collection ( '[', ']', '{', '}', ',' ) + FlowCollectionIndicator + // CommentIndicator indicator for comment ( '#' ) + CommentIndicator + // NodePropertyIndicator indicator for node property ( '!', '&', '*' ) + NodePropertyIndicator + // BlockScalarIndicator indicator for block scalar ( '|', '>' ) + BlockScalarIndicator + // QuotedScalarIndicator indicator for quoted scalar ( ''', '"' ) + QuotedScalarIndicator + // DirectiveIndicator indicator for directive ( '%' ) + DirectiveIndicator + // InvalidUseOfReservedIndicator indicator for invalid use of reserved keyword ( '@', '`' ) + InvalidUseOfReservedIndicator +) + +// String indicator to text +func (i Indicator) String() string { + switch i { + case NotIndicator: + return "NotIndicator" + case BlockStructureIndicator: + return "BlockStructure" + case FlowCollectionIndicator: + return "FlowCollection" + case CommentIndicator: + return "Comment" + case NodePropertyIndicator: + return "NodeProperty" + case BlockScalarIndicator: + return "BlockScalar" + case QuotedScalarIndicator: + return "QuotedScalar" + case DirectiveIndicator: + return "Directive" + case InvalidUseOfReservedIndicator: + return "InvalidUseOfReserved" + } + return "" +} + +var ( + reservedNullKeywords = []string{ + "null", + "Null", + "NULL", + "~", + } + reservedBoolKeywords = []string{ + "true", + "True", + "TRUE", + "false", + "False", + "FALSE", + } + // For compatibility with other YAML 1.1 parsers + // Note that we use these solely for encoding the bool value with quotes. + // go-yaml should not treat these as reserved keywords at parsing time. + // as go-yaml is supposed to be compliant only with YAML 1.2. + reservedLegacyBoolKeywords = []string{ + "y", + "Y", + "yes", + "Yes", + "YES", + "n", + "N", + "no", + "No", + "NO", + "on", + "On", + "ON", + "off", + "Off", + "OFF", + } + reservedInfKeywords = []string{ + ".inf", + ".Inf", + ".INF", + "-.inf", + "-.Inf", + "-.INF", + } + reservedNanKeywords = []string{ + ".nan", + ".NaN", + ".NAN", + } + reservedKeywordMap = map[string]func(string, string, *Position) *Token{} + // reservedEncKeywordMap contains is the keyword map used at encoding time. + // This is supposed to be a superset of reservedKeywordMap, + // and used to quote legacy keywords present in YAML 1.1 or lesser for compatibility reasons, + // even though this library is supposed to be YAML 1.2-compliant. + reservedEncKeywordMap = map[string]func(string, string, *Position) *Token{} +) + +func reservedKeywordToken(typ Type, value, org string, pos *Position) *Token { + return &Token{ + Type: typ, + CharacterType: CharacterTypeMiscellaneous, + Indicator: NotIndicator, + Value: value, + Origin: org, + Position: pos, + } +} + +func init() { + for _, keyword := range reservedNullKeywords { + f := func(value, org string, pos *Position) *Token { + return reservedKeywordToken(NullType, value, org, pos) + } + + reservedKeywordMap[keyword] = f + reservedEncKeywordMap[keyword] = f + } + for _, keyword := range reservedBoolKeywords { + f := func(value, org string, pos *Position) *Token { + return reservedKeywordToken(BoolType, value, org, pos) + } + reservedKeywordMap[keyword] = f + reservedEncKeywordMap[keyword] = f + } + for _, keyword := range reservedLegacyBoolKeywords { + reservedEncKeywordMap[keyword] = func(value, org string, pos *Position) *Token { + return reservedKeywordToken(BoolType, value, org, pos) + } + } + for _, keyword := range reservedInfKeywords { + reservedKeywordMap[keyword] = func(value, org string, pos *Position) *Token { + return reservedKeywordToken(InfinityType, value, org, pos) + } + } + for _, keyword := range reservedNanKeywords { + reservedKeywordMap[keyword] = func(value, org string, pos *Position) *Token { + return reservedKeywordToken(NanType, value, org, pos) + } + } +} + +// ReservedTagKeyword type of reserved tag keyword +type ReservedTagKeyword string + +const ( + // IntegerTag `!!int` tag + IntegerTag ReservedTagKeyword = "!!int" + // FloatTag `!!float` tag + FloatTag ReservedTagKeyword = "!!float" + // NullTag `!!null` tag + NullTag ReservedTagKeyword = "!!null" + // SequenceTag `!!seq` tag + SequenceTag ReservedTagKeyword = "!!seq" + // MappingTag `!!map` tag + MappingTag ReservedTagKeyword = "!!map" + // StringTag `!!str` tag + StringTag ReservedTagKeyword = "!!str" + // BinaryTag `!!binary` tag + BinaryTag ReservedTagKeyword = "!!binary" + // OrderedMapTag `!!omap` tag + OrderedMapTag ReservedTagKeyword = "!!omap" + // SetTag `!!set` tag + SetTag ReservedTagKeyword = "!!set" + // TimestampTag `!!timestamp` tag + TimestampTag ReservedTagKeyword = "!!timestamp" + // BooleanTag `!!bool` tag + BooleanTag ReservedTagKeyword = "!!bool" + // MergeTag `!!merge` tag + MergeTag ReservedTagKeyword = "!!merge" +) + +var ( + // ReservedTagKeywordMap map for reserved tag keywords + ReservedTagKeywordMap = map[ReservedTagKeyword]func(string, string, *Position) *Token{ + IntegerTag: func(value, org string, pos *Position) *Token { + return &Token{ + Type: TagType, + CharacterType: CharacterTypeIndicator, + Indicator: NodePropertyIndicator, + Value: value, + Origin: org, + Position: pos, + } + }, + FloatTag: func(value, org string, pos *Position) *Token { + return &Token{ + Type: TagType, + CharacterType: CharacterTypeIndicator, + Indicator: NodePropertyIndicator, + Value: value, + Origin: org, + Position: pos, + } + }, + NullTag: func(value, org string, pos *Position) *Token { + return &Token{ + Type: TagType, + CharacterType: CharacterTypeIndicator, + Indicator: NodePropertyIndicator, + Value: value, + Origin: org, + Position: pos, + } + }, + SequenceTag: func(value, org string, pos *Position) *Token { + return &Token{ + Type: TagType, + CharacterType: CharacterTypeIndicator, + Indicator: NodePropertyIndicator, + Value: value, + Origin: org, + Position: pos, + } + }, + MappingTag: func(value, org string, pos *Position) *Token { + return &Token{ + Type: TagType, + CharacterType: CharacterTypeIndicator, + Indicator: NodePropertyIndicator, + Value: value, + Origin: org, + Position: pos, + } + }, + StringTag: func(value, org string, pos *Position) *Token { + return &Token{ + Type: TagType, + CharacterType: CharacterTypeIndicator, + Indicator: NodePropertyIndicator, + Value: value, + Origin: org, + Position: pos, + } + }, + BinaryTag: func(value, org string, pos *Position) *Token { + return &Token{ + Type: TagType, + CharacterType: CharacterTypeIndicator, + Indicator: NodePropertyIndicator, + Value: value, + Origin: org, + Position: pos, + } + }, + OrderedMapTag: func(value, org string, pos *Position) *Token { + return &Token{ + Type: TagType, + CharacterType: CharacterTypeIndicator, + Indicator: NodePropertyIndicator, + Value: value, + Origin: org, + Position: pos, + } + }, + SetTag: func(value, org string, pos *Position) *Token { + return &Token{ + Type: TagType, + CharacterType: CharacterTypeIndicator, + Indicator: NodePropertyIndicator, + Value: value, + Origin: org, + Position: pos, + } + }, + TimestampTag: func(value, org string, pos *Position) *Token { + return &Token{ + Type: TagType, + CharacterType: CharacterTypeIndicator, + Indicator: NodePropertyIndicator, + Value: value, + Origin: org, + Position: pos, + } + }, + BooleanTag: func(value, org string, pos *Position) *Token { + return &Token{ + Type: TagType, + CharacterType: CharacterTypeIndicator, + Indicator: NodePropertyIndicator, + Value: value, + Origin: org, + Position: pos, + } + }, + MergeTag: func(value, org string, pos *Position) *Token { + return &Token{ + Type: TagType, + CharacterType: CharacterTypeIndicator, + Indicator: NodePropertyIndicator, + Value: value, + Origin: org, + Position: pos, + } + }, + } +) + +type NumberType string + +const ( + NumberTypeDecimal NumberType = "decimal" + NumberTypeBinary NumberType = "binary" + NumberTypeOctet NumberType = "octet" + NumberTypeHex NumberType = "hex" + NumberTypeFloat NumberType = "float" +) + +type NumberValue struct { + Type NumberType + Value any + Text string +} + +func ToNumber(value string) *NumberValue { + num, err := toNumber(value) + if err != nil { + return nil + } + return num +} + +func isNumber(value string) bool { + num, err := toNumber(value) + if err != nil { + var numErr *strconv.NumError + if errors.As(err, &numErr) && errors.Is(numErr.Err, strconv.ErrRange) { + return true + } + return false + } + return num != nil +} + +func toNumber(value string) (*NumberValue, error) { + if len(value) == 0 { + return nil, nil + } + if strings.HasPrefix(value, "_") { + return nil, nil + } + dotCount := strings.Count(value, ".") + if dotCount > 1 { + return nil, nil + } + + isNegative := strings.HasPrefix(value, "-") + normalized := strings.ReplaceAll(strings.TrimPrefix(strings.TrimPrefix(value, "+"), "-"), "_", "") + + var ( + typ NumberType + base int + ) + switch { + case strings.HasPrefix(normalized, "0x"): + normalized = strings.TrimPrefix(normalized, "0x") + base = 16 + typ = NumberTypeHex + case strings.HasPrefix(normalized, "0o"): + normalized = strings.TrimPrefix(normalized, "0o") + base = 8 + typ = NumberTypeOctet + case strings.HasPrefix(normalized, "0b"): + normalized = strings.TrimPrefix(normalized, "0b") + base = 2 + typ = NumberTypeBinary + case strings.HasPrefix(normalized, "0") && len(normalized) > 1 && dotCount == 0: + base = 8 + typ = NumberTypeOctet + case dotCount == 1: + typ = NumberTypeFloat + default: + typ = NumberTypeDecimal + base = 10 + } + + text := normalized + if isNegative { + text = "-" + text + } + + var v any + if typ == NumberTypeFloat { + f, err := strconv.ParseFloat(text, 64) + if err != nil { + return nil, err + } + v = f + } else if isNegative { + i, err := strconv.ParseInt(text, base, 64) + if err != nil { + return nil, err + } + v = i + } else { + u, err := strconv.ParseUint(text, base, 64) + if err != nil { + return nil, err + } + v = u + } + + return &NumberValue{ + Type: typ, + Value: v, + Text: text, + }, nil +} + +// This is a subset of the formats permitted by the regular expression +// defined at http://yaml.org/type/timestamp.html. Note that time.Parse +// cannot handle: "2001-12-14 21:59:43.10 -5" from the examples. +var timestampFormats = []string{ + time.RFC3339Nano, + "2006-01-02t15:04:05.999999999Z07:00", // RFC3339Nano with lower-case "t". + time.DateTime, + time.DateOnly, + + // Not in examples, but to preserve backward compatibility by quoting time values. + "15:4", +} + +func isTimestamp(value string) bool { + for _, format := range timestampFormats { + if _, err := time.Parse(format, value); err == nil { + return true + } + } + return false +} + +// IsNeedQuoted checks whether the value needs quote for passed string or not +func IsNeedQuoted(value string) bool { + if value == "" { + return true + } + if _, exists := reservedEncKeywordMap[value]; exists { + return true + } + if isNumber(value) { + return true + } + if value == "-" { + return true + } + first := value[0] + switch first { + case '*', '&', '[', '{', '}', ']', ',', '!', '|', '>', '%', '\'', '"', '@', ' ', '`': + return true + } + last := value[len(value)-1] + switch last { + case ':', ' ': + return true + } + if isTimestamp(value) { + return true + } + for i, c := range value { + switch c { + case '#', '\\': + return true + case ':', '-': + if i+1 < len(value) && value[i+1] == ' ' { + return true + } + } + } + return false +} + +// LiteralBlockHeader detect literal block scalar header +func LiteralBlockHeader(value string) string { + lbc := DetectLineBreakCharacter(value) + + switch { + case !strings.Contains(value, lbc): + return "" + case strings.HasSuffix(value, fmt.Sprintf("%s%s", lbc, lbc)): + return "|+" + case strings.HasSuffix(value, lbc): + return "|" + default: + return "|-" + } +} + +// New create reserved keyword token or number token and other string token. +func New(value string, org string, pos *Position) *Token { + fn := reservedKeywordMap[value] + if fn != nil { + return fn(value, org, pos) + } + if num := ToNumber(value); num != nil { + tk := &Token{ + Type: IntegerType, + CharacterType: CharacterTypeMiscellaneous, + Indicator: NotIndicator, + Value: value, + Origin: org, + Position: pos, + } + switch num.Type { + case NumberTypeFloat: + tk.Type = FloatType + case NumberTypeBinary: + tk.Type = BinaryIntegerType + case NumberTypeOctet: + tk.Type = OctetIntegerType + case NumberTypeHex: + tk.Type = HexIntegerType + } + return tk + } + return String(value, org, pos) +} + +// Position type for position in YAML document +type Position struct { + Line int + Column int + Offset int + IndentNum int + IndentLevel int +} + +// String position to text +func (p *Position) String() string { + return fmt.Sprintf("[level:%d,line:%d,column:%d,offset:%d]", p.IndentLevel, p.Line, p.Column, p.Offset) +} + +// Token type for token +type Token struct { + // Type is a token type. + Type Type + // CharacterType is a character type. + CharacterType CharacterType + // Indicator is a indicator type. + Indicator Indicator + // Value is a string extracted with only meaningful characters, with spaces and such removed. + Value string + // Origin is a string that stores the original text as-is. + Origin string + // Error keeps error message for InvalidToken. + Error string + // Position is a token position. + Position *Position + // Next is a next token reference. + Next *Token + // Prev is a previous token reference. + Prev *Token +} + +// PreviousType previous token type +func (t *Token) PreviousType() Type { + if t.Prev != nil { + return t.Prev.Type + } + return UnknownType +} + +// NextType next token type +func (t *Token) NextType() Type { + if t.Next != nil { + return t.Next.Type + } + return UnknownType +} + +// AddColumn append column number to current position of column +func (t *Token) AddColumn(col int) { + if t == nil { + return + } + t.Position.Column += col +} + +// Clone copy token ( preserve Prev/Next reference ) +func (t *Token) Clone() *Token { + if t == nil { + return nil + } + copied := *t + if t.Position != nil { + pos := *(t.Position) + copied.Position = &pos + } + return &copied +} + +// Dump outputs token information to stdout for debugging. +func (t *Token) Dump() { + fmt.Printf( + "[TYPE]:%q [CHARTYPE]:%q [INDICATOR]:%q [VALUE]:%q [ORG]:%q [POS(line:column:level:offset)]: %d:%d:%d:%d\n", + t.Type, t.CharacterType, t.Indicator, t.Value, t.Origin, t.Position.Line, t.Position.Column, t.Position.IndentLevel, t.Position.Offset, + ) +} + +// Tokens type of token collection +type Tokens []*Token + +func (t Tokens) InvalidToken() *Token { + for _, tt := range t { + if tt.Type == InvalidType { + return tt + } + } + return nil +} + +func (t *Tokens) add(tk *Token) { + tokens := *t + if len(tokens) == 0 { + tokens = append(tokens, tk) + } else { + last := tokens[len(tokens)-1] + last.Next = tk + tk.Prev = last + tokens = append(tokens, tk) + } + *t = tokens +} + +// Add append new some tokens +func (t *Tokens) Add(tks ...*Token) { + for _, tk := range tks { + t.add(tk) + } +} + +// Dump dump all token structures for debugging +func (t Tokens) Dump() { + for _, tk := range t { + fmt.Print("- ") + tk.Dump() + } +} + +// String create token for String +func String(value string, org string, pos *Position) *Token { + return &Token{ + Type: StringType, + CharacterType: CharacterTypeMiscellaneous, + Indicator: NotIndicator, + Value: value, + Origin: org, + Position: pos, + } +} + +// SequenceEntry create token for SequenceEntry +func SequenceEntry(org string, pos *Position) *Token { + return &Token{ + Type: SequenceEntryType, + CharacterType: CharacterTypeIndicator, + Indicator: BlockStructureIndicator, + Value: string(SequenceEntryCharacter), + Origin: org, + Position: pos, + } +} + +// MappingKey create token for MappingKey +func MappingKey(pos *Position) *Token { + return &Token{ + Type: MappingKeyType, + CharacterType: CharacterTypeIndicator, + Indicator: BlockStructureIndicator, + Value: string(MappingKeyCharacter), + Origin: string(MappingKeyCharacter), + Position: pos, + } +} + +// MappingValue create token for MappingValue +func MappingValue(pos *Position) *Token { + return &Token{ + Type: MappingValueType, + CharacterType: CharacterTypeIndicator, + Indicator: BlockStructureIndicator, + Value: string(MappingValueCharacter), + Origin: string(MappingValueCharacter), + Position: pos, + } +} + +// CollectEntry create token for CollectEntry +func CollectEntry(org string, pos *Position) *Token { + return &Token{ + Type: CollectEntryType, + CharacterType: CharacterTypeIndicator, + Indicator: FlowCollectionIndicator, + Value: string(CollectEntryCharacter), + Origin: org, + Position: pos, + } +} + +// SequenceStart create token for SequenceStart +func SequenceStart(org string, pos *Position) *Token { + return &Token{ + Type: SequenceStartType, + CharacterType: CharacterTypeIndicator, + Indicator: FlowCollectionIndicator, + Value: string(SequenceStartCharacter), + Origin: org, + Position: pos, + } +} + +// SequenceEnd create token for SequenceEnd +func SequenceEnd(org string, pos *Position) *Token { + return &Token{ + Type: SequenceEndType, + CharacterType: CharacterTypeIndicator, + Indicator: FlowCollectionIndicator, + Value: string(SequenceEndCharacter), + Origin: org, + Position: pos, + } +} + +// MappingStart create token for MappingStart +func MappingStart(org string, pos *Position) *Token { + return &Token{ + Type: MappingStartType, + CharacterType: CharacterTypeIndicator, + Indicator: FlowCollectionIndicator, + Value: string(MappingStartCharacter), + Origin: org, + Position: pos, + } +} + +// MappingEnd create token for MappingEnd +func MappingEnd(org string, pos *Position) *Token { + return &Token{ + Type: MappingEndType, + CharacterType: CharacterTypeIndicator, + Indicator: FlowCollectionIndicator, + Value: string(MappingEndCharacter), + Origin: org, + Position: pos, + } +} + +// Comment create token for Comment +func Comment(value string, org string, pos *Position) *Token { + return &Token{ + Type: CommentType, + CharacterType: CharacterTypeIndicator, + Indicator: CommentIndicator, + Value: value, + Origin: org, + Position: pos, + } +} + +// Anchor create token for Anchor +func Anchor(org string, pos *Position) *Token { + return &Token{ + Type: AnchorType, + CharacterType: CharacterTypeIndicator, + Indicator: NodePropertyIndicator, + Value: string(AnchorCharacter), + Origin: org, + Position: pos, + } +} + +// Alias create token for Alias +func Alias(org string, pos *Position) *Token { + return &Token{ + Type: AliasType, + CharacterType: CharacterTypeIndicator, + Indicator: NodePropertyIndicator, + Value: string(AliasCharacter), + Origin: org, + Position: pos, + } +} + +// Tag create token for Tag +func Tag(value string, org string, pos *Position) *Token { + fn := ReservedTagKeywordMap[ReservedTagKeyword(value)] + if fn != nil { + return fn(value, org, pos) + } + return &Token{ + Type: TagType, + CharacterType: CharacterTypeIndicator, + Indicator: NodePropertyIndicator, + Value: value, + Origin: org, + Position: pos, + } +} + +// Literal create token for Literal +func Literal(value string, org string, pos *Position) *Token { + return &Token{ + Type: LiteralType, + CharacterType: CharacterTypeIndicator, + Indicator: BlockScalarIndicator, + Value: value, + Origin: org, + Position: pos, + } +} + +// Folded create token for Folded +func Folded(value string, org string, pos *Position) *Token { + return &Token{ + Type: FoldedType, + CharacterType: CharacterTypeIndicator, + Indicator: BlockScalarIndicator, + Value: value, + Origin: org, + Position: pos, + } +} + +// SingleQuote create token for SingleQuote +func SingleQuote(value string, org string, pos *Position) *Token { + return &Token{ + Type: SingleQuoteType, + CharacterType: CharacterTypeIndicator, + Indicator: QuotedScalarIndicator, + Value: value, + Origin: org, + Position: pos, + } +} + +// DoubleQuote create token for DoubleQuote +func DoubleQuote(value string, org string, pos *Position) *Token { + return &Token{ + Type: DoubleQuoteType, + CharacterType: CharacterTypeIndicator, + Indicator: QuotedScalarIndicator, + Value: value, + Origin: org, + Position: pos, + } +} + +// Directive create token for Directive +func Directive(org string, pos *Position) *Token { + return &Token{ + Type: DirectiveType, + CharacterType: CharacterTypeIndicator, + Indicator: DirectiveIndicator, + Value: string(DirectiveCharacter), + Origin: org, + Position: pos, + } +} + +// Space create token for Space +func Space(pos *Position) *Token { + return &Token{ + Type: SpaceType, + CharacterType: CharacterTypeWhiteSpace, + Indicator: NotIndicator, + Value: string(SpaceCharacter), + Origin: string(SpaceCharacter), + Position: pos, + } +} + +// MergeKey create token for MergeKey +func MergeKey(org string, pos *Position) *Token { + return &Token{ + Type: MergeKeyType, + CharacterType: CharacterTypeMiscellaneous, + Indicator: NotIndicator, + Value: "<<", + Origin: org, + Position: pos, + } +} + +// DocumentHeader create token for DocumentHeader +func DocumentHeader(org string, pos *Position) *Token { + return &Token{ + Type: DocumentHeaderType, + CharacterType: CharacterTypeMiscellaneous, + Indicator: NotIndicator, + Value: "---", + Origin: org, + Position: pos, + } +} + +// DocumentEnd create token for DocumentEnd +func DocumentEnd(org string, pos *Position) *Token { + return &Token{ + Type: DocumentEndType, + CharacterType: CharacterTypeMiscellaneous, + Indicator: NotIndicator, + Value: "...", + Origin: org, + Position: pos, + } +} + +func Invalid(err string, org string, pos *Position) *Token { + return &Token{ + Type: InvalidType, + CharacterType: CharacterTypeInvalid, + Indicator: NotIndicator, + Value: org, + Origin: org, + Error: err, + Position: pos, + } +} + +// DetectLineBreakCharacter detect line break character in only one inside scalar content scope. +func DetectLineBreakCharacter(src string) string { + nc := strings.Count(src, "\n") + rc := strings.Count(src, "\r") + rnc := strings.Count(src, "\r\n") + switch { + case nc == rnc && rc == rnc: + return "\r\n" + case rc > nc: + return "\r" + default: + return "\n" + } +} diff --git a/vendor/github.com/goccy/go-yaml/validate.go b/vendor/github.com/goccy/go-yaml/validate.go new file mode 100644 index 0000000..20a2d6d --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/validate.go @@ -0,0 +1,13 @@ +package yaml + +// StructValidator need to implement Struct method only +// ( see https://pkg.go.dev/github.com/go-playground/validator/v10#Validate.Struct ) +type StructValidator interface { + Struct(interface{}) error +} + +// FieldError need to implement StructField method only +// ( see https://pkg.go.dev/github.com/go-playground/validator/v10#FieldError ) +type FieldError interface { + StructField() string +} diff --git a/vendor/github.com/goccy/go-yaml/yaml.go b/vendor/github.com/goccy/go-yaml/yaml.go new file mode 100644 index 0000000..f9a9f83 --- /dev/null +++ b/vendor/github.com/goccy/go-yaml/yaml.go @@ -0,0 +1,326 @@ +package yaml + +import ( + "bytes" + "context" + "io" + "reflect" + "sync" + + "github.com/goccy/go-yaml/ast" + "github.com/goccy/go-yaml/internal/errors" +) + +// BytesMarshaler interface may be implemented by types to customize their +// behavior when being marshaled into a YAML document. The returned value +// is marshaled in place of the original value implementing Marshaler. +// +// If an error is returned by MarshalYAML, the marshaling procedure stops +// and returns with the provided error. +type BytesMarshaler interface { + MarshalYAML() ([]byte, error) +} + +// BytesMarshalerContext interface use BytesMarshaler with context.Context. +type BytesMarshalerContext interface { + MarshalYAML(context.Context) ([]byte, error) +} + +// InterfaceMarshaler interface has MarshalYAML compatible with github.com/go-yaml/yaml package. +type InterfaceMarshaler interface { + MarshalYAML() (interface{}, error) +} + +// InterfaceMarshalerContext interface use InterfaceMarshaler with context.Context. +type InterfaceMarshalerContext interface { + MarshalYAML(context.Context) (interface{}, error) +} + +// BytesUnmarshaler interface may be implemented by types to customize their +// behavior when being unmarshaled from a YAML document. +type BytesUnmarshaler interface { + UnmarshalYAML([]byte) error +} + +// BytesUnmarshalerContext interface use BytesUnmarshaler with context.Context. +type BytesUnmarshalerContext interface { + UnmarshalYAML(context.Context, []byte) error +} + +// InterfaceUnmarshaler interface has UnmarshalYAML compatible with github.com/go-yaml/yaml package. +type InterfaceUnmarshaler interface { + UnmarshalYAML(func(interface{}) error) error +} + +// InterfaceUnmarshalerContext interface use InterfaceUnmarshaler with context.Context. +type InterfaceUnmarshalerContext interface { + UnmarshalYAML(context.Context, func(interface{}) error) error +} + +// NodeUnmarshaler interface is similar to BytesUnmarshaler but provide related AST node instead of raw YAML source. +type NodeUnmarshaler interface { + UnmarshalYAML(ast.Node) error +} + +// NodeUnmarshalerContext interface is similar to BytesUnmarshaler but provide related AST node instead of raw YAML source. +type NodeUnmarshalerContext interface { + UnmarshalYAML(context.Context, ast.Node) error +} + +// MapItem is an item in a MapSlice. +type MapItem struct { + Key, Value interface{} +} + +// MapSlice encodes and decodes as a YAML map. +// The order of keys is preserved when encoding and decoding. +type MapSlice []MapItem + +// ToMap convert to map[interface{}]interface{}. +func (s MapSlice) ToMap() map[interface{}]interface{} { + v := map[interface{}]interface{}{} + for _, item := range s { + v[item.Key] = item.Value + } + return v +} + +// Marshal serializes the value provided into a YAML document. The structure +// of the generated document will reflect the structure of the value itself. +// Maps and pointers (to struct, string, int, etc) are accepted as the in value. +// +// Struct fields are only marshaled if they are exported (have an upper case +// first letter), and are marshaled using the field name lowercased as the +// default key. Custom keys may be defined via the "yaml" name in the field +// tag: the content preceding the first comma is used as the key, and the +// following comma-separated options are used to tweak the marshaling process. +// Conflicting names result in a runtime error. +// +// The field tag format accepted is: +// +// `(...) yaml:"[][,[,]]" (...)` +// +// The following flags are currently supported: +// +// omitempty Only include the field if it's not set to the zero +// value for the type or to empty slices or maps. +// Zero valued structs will be omitted if all their public +// fields are zero, unless they implement an IsZero +// method (see the IsZeroer interface type), in which +// case the field will be included if that method returns true. +// Note that this definition is slightly different from the Go's +// encoding/json 'omitempty' definition. It combines some elements +// of 'omitempty' and 'omitzero'. See https://github.com/goccy/go-yaml/issues/695. +// +// omitzero The omitzero tag behaves in the same way as the interpretation of the omitzero tag in the encoding/json library. +// 1) If the field type has an "IsZero() bool" method, that will be used to determine whether the value is zero. +// 2) Otherwise, the value is zero if it is the zero value for its type. +// +// flow Marshal using a flow style (useful for structs, +// sequences and maps). +// +// inline Inline the field, which must be a struct or a map, +// causing all of its fields or keys to be processed as if +// they were part of the outer struct. For maps, keys must +// not conflict with the yaml keys of other struct fields. +// +// anchor Marshal with anchor. If want to define anchor name explicitly, use anchor=name style. +// Otherwise, if used 'anchor' name only, used the field name lowercased as the anchor name +// +// alias Marshal with alias. If want to define alias name explicitly, use alias=name style. +// Otherwise, If omitted alias name and the field type is pointer type, +// assigned anchor name automatically from same pointer address. +// +// In addition, if the key is "-", the field is ignored. +// +// For example: +// +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n" +// yaml.Marshal(&T{F: 1}) // Returns "a: 1\nb: 0\n" +func Marshal(v interface{}) ([]byte, error) { + return MarshalWithOptions(v) +} + +// MarshalWithOptions serializes the value provided into a YAML document with EncodeOptions. +func MarshalWithOptions(v interface{}, opts ...EncodeOption) ([]byte, error) { + return MarshalContext(context.Background(), v, opts...) +} + +// MarshalContext serializes the value provided into a YAML document with context.Context and EncodeOptions. +func MarshalContext(ctx context.Context, v interface{}, opts ...EncodeOption) ([]byte, error) { + var buf bytes.Buffer + if err := NewEncoder(&buf, opts...).EncodeContext(ctx, v); err != nil { + return nil, err + } + return buf.Bytes(), nil +} + +// ValueToNode convert from value to ast.Node. +func ValueToNode(v interface{}, opts ...EncodeOption) (ast.Node, error) { + var buf bytes.Buffer + node, err := NewEncoder(&buf, opts...).EncodeToNode(v) + if err != nil { + return nil, err + } + return node, nil +} + +// Unmarshal decodes the first document found within the in byte slice +// and assigns decoded values into the out value. +// +// Struct fields are only unmarshalled if they are exported (have an +// upper case first letter), and are unmarshalled using the field name +// lowercased as the default key. Custom keys may be defined via the +// "yaml" name in the field tag: the content preceding the first comma +// is used as the key, and the following comma-separated options are +// used to tweak the marshaling process (see Marshal). +// Conflicting names result in a runtime error. +// +// For example: +// +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// var t T +// yaml.Unmarshal([]byte("a: 1\nb: 2"), &t) +// +// See the documentation of Marshal for the format of tags and a list of +// supported tag options. +func Unmarshal(data []byte, v interface{}) error { + return UnmarshalWithOptions(data, v) +} + +// UnmarshalWithOptions decodes with DecodeOptions the first document found within the in byte slice +// and assigns decoded values into the out value. +func UnmarshalWithOptions(data []byte, v interface{}, opts ...DecodeOption) error { + return UnmarshalContext(context.Background(), data, v, opts...) +} + +// UnmarshalContext decodes with context.Context and DecodeOptions. +func UnmarshalContext(ctx context.Context, data []byte, v interface{}, opts ...DecodeOption) error { + dec := NewDecoder(bytes.NewBuffer(data), opts...) + if err := dec.DecodeContext(ctx, v); err != nil { + if err == io.EOF { + return nil + } + return err + } + return nil +} + +// NodeToValue converts node to the value pointed to by v. +func NodeToValue(node ast.Node, v interface{}, opts ...DecodeOption) error { + var buf bytes.Buffer + if err := NewDecoder(&buf, opts...).DecodeFromNode(node, v); err != nil { + return err + } + return nil +} + +// FormatError is a utility function that takes advantage of the metadata +// stored in the errors returned by this package's parser. +// +// If the second argument `colored` is true, the error message is colorized. +// If the third argument `inclSource` is true, the error message will +// contain snippets of the YAML source that was used. +func FormatError(e error, colored, inclSource bool) string { + var yamlErr Error + if errors.As(e, &yamlErr) { + return yamlErr.FormatError(colored, inclSource) + } + + return e.Error() +} + +// YAMLToJSON convert YAML bytes to JSON. +func YAMLToJSON(bytes []byte) ([]byte, error) { + var v interface{} + if err := UnmarshalWithOptions(bytes, &v, UseOrderedMap()); err != nil { + return nil, err + } + out, err := MarshalWithOptions(v, JSON()) + if err != nil { + return nil, err + } + return out, nil +} + +// JSONToYAML convert JSON bytes to YAML. +func JSONToYAML(bytes []byte) ([]byte, error) { + var v interface{} + if err := UnmarshalWithOptions(bytes, &v, UseOrderedMap()); err != nil { + return nil, err + } + out, err := Marshal(v) + if err != nil { + return nil, err + } + return out, nil +} + +var ( + globalCustomMarshalerMu sync.Mutex + globalCustomUnmarshalerMu sync.Mutex + globalCustomMarshalerMap = map[reflect.Type]func(context.Context, interface{}) ([]byte, error){} + globalCustomUnmarshalerMap = map[reflect.Type]func(context.Context, interface{}, []byte) error{} +) + +// RegisterCustomMarshaler overrides any encoding process for the type specified in generics. +// If you want to switch the behavior for each encoder, use `CustomMarshaler` defined as EncodeOption. +// +// NOTE: If type T implements MarshalYAML for pointer receiver, the type specified in RegisterCustomMarshaler must be *T. +// If RegisterCustomMarshaler and CustomMarshaler of EncodeOption are specified for the same type, +// the CustomMarshaler specified in EncodeOption takes precedence. +func RegisterCustomMarshaler[T any](marshaler func(T) ([]byte, error)) { + globalCustomMarshalerMu.Lock() + defer globalCustomMarshalerMu.Unlock() + + var typ T + globalCustomMarshalerMap[reflect.TypeOf(typ)] = func(ctx context.Context, v interface{}) ([]byte, error) { + return marshaler(v.(T)) + } +} + +// RegisterCustomMarshalerContext overrides any encoding process for the type specified in generics. +// Similar to RegisterCustomMarshalerContext, but allows passing a context to the unmarshaler function. +func RegisterCustomMarshalerContext[T any](marshaler func(context.Context, T) ([]byte, error)) { + globalCustomMarshalerMu.Lock() + defer globalCustomMarshalerMu.Unlock() + + var typ T + globalCustomMarshalerMap[reflect.TypeOf(typ)] = func(ctx context.Context, v interface{}) ([]byte, error) { + return marshaler(ctx, v.(T)) + } +} + +// RegisterCustomUnmarshaler overrides any decoding process for the type specified in generics. +// If you want to switch the behavior for each decoder, use `CustomUnmarshaler` defined as DecodeOption. +// +// NOTE: If RegisterCustomUnmarshaler and CustomUnmarshaler of DecodeOption are specified for the same type, +// the CustomUnmarshaler specified in DecodeOption takes precedence. +func RegisterCustomUnmarshaler[T any](unmarshaler func(*T, []byte) error) { + globalCustomUnmarshalerMu.Lock() + defer globalCustomUnmarshalerMu.Unlock() + + var typ *T + globalCustomUnmarshalerMap[reflect.TypeOf(typ)] = func(ctx context.Context, v interface{}, b []byte) error { + return unmarshaler(v.(*T), b) + } +} + +// RegisterCustomUnmarshalerContext overrides any decoding process for the type specified in generics. +// Similar to RegisterCustomUnmarshalerContext, but allows passing a context to the unmarshaler function. +func RegisterCustomUnmarshalerContext[T any](unmarshaler func(context.Context, *T, []byte) error) { + globalCustomUnmarshalerMu.Lock() + defer globalCustomUnmarshalerMu.Unlock() + + var typ *T + globalCustomUnmarshalerMap[reflect.TypeOf(typ)] = func(ctx context.Context, v interface{}, b []byte) error { + return unmarshaler(ctx, v.(*T), b) + } +} diff --git a/vendor/github.com/klauspost/cpuid/v2/README.md b/vendor/github.com/klauspost/cpuid/v2/README.md index e59d3d0..88d68d5 100644 --- a/vendor/github.com/klauspost/cpuid/v2/README.md +++ b/vendor/github.com/klauspost/cpuid/v2/README.md @@ -281,10 +281,11 @@ Exit Code 1 | AMXBF16 | Tile computational operations on BFLOAT16 numbers | | AMXINT8 | Tile computational operations on 8-bit integers | | AMXFP16 | Tile computational operations on FP16 numbers | -| AMXFP8 | Tile computational operations on FP8 numbers | +| AMXFP8 | Tile computational operations on FP8 numbers | | AMXCOMPLEX | Tile computational operations on complex numbers | | AMXTILE | Tile architecture | | AMXTF32 | Matrix Multiplication of TF32 Tiles into Packed Single Precision Tile | +| AMXTRANSPOSE | Tile multiply where the first operand is transposed | | APX_F | Intel APX | | AVX | AVX functions | | AVX10 | If set the Intel AVX10 Converged Vector ISA is supported | @@ -417,9 +418,12 @@ Exit Code 1 | SEV_SNP | AMD SEV Secure Nested Paging supported | | SGX | Software Guard Extensions | | SGXLC | Software Guard Extensions Launch Control | +| SGXPQC | Software Guard Extensions 256-bit Encryption | | SHA | Intel SHA Extensions | | SME | AMD Secure Memory Encryption supported | | SME_COHERENT | AMD Hardware cache coherency across encryption domains enforced | +| SM3_X86 | SM3 instructions | +| SM4_X86 | SM4 instructions | | SPEC_CTRL_SSBD | Speculative Store Bypass Disable | | SRBDS_CTRL | SRBDS mitigation MSR available | | SSE | SSE functions | @@ -447,6 +451,9 @@ Exit Code 1 | TLB_FLUSH_NESTED | AMD: Flushing includes all the nested translations for guest translations | | TME | Intel Total Memory Encryption. The following MSRs are supported: IA32_TME_CAPABILITY, IA32_TME_ACTIVATE, IA32_TME_EXCLUDE_MASK, and IA32_TME_EXCLUDE_BASE. | | TOPEXT | TopologyExtensions: topology extensions support. Indicates support for CPUID Fn8000_001D_EAX_x[N:0]-CPUID Fn8000_001E_EDX. | +| TSA_L1_NO | AMD only: Not vulnerable to TSA-L1 | +| TSA_SQ_NO | AMD only: Not vulnerable to TSA-SQ | +| TSA_VERW_CLEAR | AMD: If set, the memory form of the VERW instruction may be used to help mitigate TSA | | TSCRATEMSR | MSR based TSC rate control. Indicates support for MSR TSC ratio MSRC000_0104 | | TSXLDTRK | Intel TSX Suspend Load Address Tracking | | VAES | Vector AES. AVX(512) versions requires additional checks. | diff --git a/vendor/github.com/klauspost/cpuid/v2/cpuid.go b/vendor/github.com/klauspost/cpuid/v2/cpuid.go index 8103fb3..9cf7738 100644 --- a/vendor/github.com/klauspost/cpuid/v2/cpuid.go +++ b/vendor/github.com/klauspost/cpuid/v2/cpuid.go @@ -85,6 +85,7 @@ const ( AMXTILE // Tile architecture AMXTF32 // Tile architecture AMXCOMPLEX // Matrix Multiplication of TF32 Tiles into Packed Single Precision Tile + AMXTRANSPOSE // Tile multiply where the first operand is transposed APX_F // Intel APX AVX // AVX functions AVX10 // If set the Intel AVX10 Converged Vector ISA is supported @@ -219,9 +220,12 @@ const ( SEV_SNP // AMD SEV Secure Nested Paging supported SGX // Software Guard Extensions SGXLC // Software Guard Extensions Launch Control + SGXPQC // Software Guard Extensions 256-bit Encryption SHA // Intel SHA Extensions SME // AMD Secure Memory Encryption supported SME_COHERENT // AMD Hardware cache coherency across encryption domains enforced + SM3_X86 // SM3 instructions + SM4_X86 // SM4 instructions SPEC_CTRL_SSBD // Speculative Store Bypass Disable SRBDS_CTRL // SRBDS mitigation MSR available SRSO_MSR_FIX // Indicates that software may use MSR BP_CFG[BpSpecReduce] to mitigate SRSO. @@ -252,6 +256,9 @@ const ( TLB_FLUSH_NESTED // AMD: Flushing includes all the nested translations for guest translations TME // Intel Total Memory Encryption. The following MSRs are supported: IA32_TME_CAPABILITY, IA32_TME_ACTIVATE, IA32_TME_EXCLUDE_MASK, and IA32_TME_EXCLUDE_BASE. TOPEXT // TopologyExtensions: topology extensions support. Indicates support for CPUID Fn8000_001D_EAX_x[N:0]-CPUID Fn8000_001E_EDX. + TSA_L1_NO // AMD only: Not vulnerable to TSA-L1 + TSA_SQ_NO // AM onlyD: Not vulnerable to TSA-SQ + TSA_VERW_CLEAR // If set, the memory form of the VERW instruction may be used to help mitigate TSA TSCRATEMSR // MSR based TSC rate control. Indicates support for MSR TSC ratio MSRC000_0104 TSXLDTRK // Intel TSX Suspend Load Address Tracking VAES // Vector AES. AVX(512) versions requires additional checks. @@ -283,7 +290,7 @@ const ( CRC32 // CRC32/CRC32C instructions DCPOP // Data cache clean to Point of Persistence (DC CVAP) EVTSTRM // Generic timer - FCMA // Floatin point complex number addition and multiplication + FCMA // Floating point complex number addition and multiplication FHM // FMLAL and FMLSL instructions FP // Single-precision and double-precision floating point FPHP // Half-precision floating point @@ -301,6 +308,13 @@ const ( SM3 // SM3 instructions SM4 // SM4 instructions SVE // Scalable Vector Extension + + // PMU + PMU_FIXEDCOUNTER_CYCLES + PMU_FIXEDCOUNTER_REFCYCLES + PMU_FIXEDCOUNTER_INSTRUCTIONS + PMU_FIXEDCOUNTER_TOPDOWN_SLOTS + // Keep it last. It automatically defines the size of []flagSet lastID @@ -333,11 +347,36 @@ type CPUInfo struct { SGX SGXSupport AMDMemEncryption AMDMemEncryptionSupport AVX10Level uint8 + PMU PerformanceMonitoringInfo // holds information about the PMU maxFunc uint32 maxExFunc uint32 } +// PerformanceMonitoringInfo holds information about CPU performance monitoring capabilities. +// This is primarily populated from CPUID leaf 0xAh on x86 +type PerformanceMonitoringInfo struct { + // VersionID (x86 only): Version ID of architectural performance monitoring. + // A value of 0 means architectural performance monitoring is not supported or information is unavailable. + VersionID uint8 + // NumGPPMC: Number of General-Purpose Performance Monitoring Counters per logical processor. + // On ARM, this is derived from PMCR_EL0.N (number of event counters). + NumGPCounters uint8 + // GPPMCWidth: Bit width of General-Purpose Performance Monitoring Counters. + // On ARM, typically 64 for PMU event counters. + GPPMCWidth uint8 + // NumFixedPMC: Number of Fixed-Function Performance Counters. + // Valid on x86 if VersionID > 1. On ARM, this typically includes at least the cycle counter (PMCCNTR_EL0). + NumFixedPMC uint8 + // FixedPMCWidth: Bit width of Fixed-Function Performance Counters. + // Valid on x86 if VersionID > 1. On ARM, the cycle counter (PMCCNTR_EL0) is 64-bit. + FixedPMCWidth uint8 + // Raw register output from CPUID leaf 0xAh. + RawEBX uint32 + RawEAX uint32 + RawEDX uint32 +} + var cpuid func(op uint32) (eax, ebx, ecx, edx uint32) var cpuidex func(op, op2 uint32) (eax, ebx, ecx, edx uint32) var xgetbv func(index uint32) (eax, edx uint32) @@ -878,7 +917,12 @@ func physicalCores() int { v, _ := vendorID() switch v { case Intel: - return logicalCores() / threadsPerCore() + lc := logicalCores() + tpc := threadsPerCore() + if lc > 0 && tpc > 0 { + return lc / tpc + } + return 0 case AMD, Hygon: lc := logicalCores() tpc := threadsPerCore() @@ -1279,6 +1323,8 @@ func support() flagSet { // CPUID.(EAX=7, ECX=1).EAX eax1, _, _, edx1 := cpuidex(7, 1) fs.setIf(fs.inSet(AVX) && eax1&(1<<4) != 0, AVXVNNI) + fs.setIf(eax1&(1<<1) != 0, SM3_X86) + fs.setIf(eax1&(1<<2) != 0, SM4_X86) fs.setIf(eax1&(1<<7) != 0, CMPCCXADD) fs.setIf(eax1&(1<<10) != 0, MOVSB_ZL) fs.setIf(eax1&(1<<11) != 0, STOSB_SHORT) @@ -1290,6 +1336,7 @@ func support() flagSet { // CPUID.(EAX=7, ECX=1).EDX fs.setIf(edx1&(1<<4) != 0, AVXVNNIINT8) fs.setIf(edx1&(1<<5) != 0, AVXNECONVERT) + fs.setIf(edx1&(1<<6) != 0, AMXTRANSPOSE) fs.setIf(edx1&(1<<7) != 0, AMXTF32) fs.setIf(edx1&(1<<8) != 0, AMXCOMPLEX) fs.setIf(edx1&(1<<10) != 0, AVXVNNIINT16) @@ -1347,6 +1394,11 @@ func support() flagSet { fs.setIf(edx&(1<<4) != 0, BHI_CTRL) fs.setIf(edx&(1<<5) != 0, MCDT_NO) + if fs.inSet(SGX) { + eax, _, _, _ := cpuidex(0x12, 0) + fs.setIf(eax&(1<<12) != 0, SGXPQC) + } + // Add keylocker features. if fs.inSet(KEYLOCKER) && mfi >= 0x19 { _, ebx, _, _ := cpuidex(0x19, 0) @@ -1360,6 +1412,7 @@ func support() flagSet { fs.setIf(ebx&(1<<17) != 0, AVX10_256) fs.setIf(ebx&(1<<18) != 0, AVX10_512) } + } // Processor Extended State Enumeration Sub-leaf (EAX = 0DH, ECX = 1) @@ -1503,12 +1556,28 @@ func support() flagSet { } if maxExtendedFunction() >= 0x80000021 && vend == AMD { - a, _, _, _ := cpuid(0x80000021) + a, _, c, _ := cpuid(0x80000021) fs.setIf((a>>31)&1 == 1, SRSO_MSR_FIX) fs.setIf((a>>30)&1 == 1, SRSO_USER_KERNEL_NO) fs.setIf((a>>29)&1 == 1, SRSO_NO) fs.setIf((a>>28)&1 == 1, IBPB_BRTYPE) fs.setIf((a>>27)&1 == 1, SBPB) + fs.setIf((c>>1)&1 == 1, TSA_L1_NO) + fs.setIf((c>>2)&1 == 1, TSA_SQ_NO) + fs.setIf((a>>5)&1 == 1, TSA_VERW_CLEAR) + } + if vend == AMD { + if family < 0x19 { + // AMD CPUs that are older than Family 19h are not vulnerable to TSA but do not set TSA_L1_NO or TSA_SQ_NO. + // Source: https://www.amd.com/content/dam/amd/en/documents/resources/bulletin/technical-guidance-for-mitigating-transient-scheduler-attacks.pdf + fs.set(TSA_L1_NO) + fs.set(TSA_SQ_NO) + } else if family == 0x1a { + // AMD Family 1Ah models 00h-4Fh and 60h-7Fh are also not vulnerable to TSA but do not set TSA_L1_NO or TSA_SQ_NO. + // Future AMD CPUs will set these CPUID bits if appropriate. CPUs will be designed to set these CPUID bits if appropriate. + notVuln := model <= 0x4f || (model >= 0x60 && model <= 0x7f) + fs.setIf(notVuln, TSA_L1_NO, TSA_SQ_NO) + } } if mfi >= 0x20 { @@ -1564,3 +1633,47 @@ func valAsString(values ...uint32) []byte { } return r } + +func parseLeaf0AH(c *CPUInfo, eax, ebx, edx uint32) (info PerformanceMonitoringInfo) { + info.VersionID = uint8(eax & 0xFF) + info.NumGPCounters = uint8((eax >> 8) & 0xFF) + info.GPPMCWidth = uint8((eax >> 16) & 0xFF) + + info.RawEBX = ebx + info.RawEAX = eax + info.RawEDX = edx + + if info.VersionID > 1 { // This information is only valid if VersionID > 1 + info.NumFixedPMC = uint8(edx & 0x1F) // Bits 4:0 + info.FixedPMCWidth = uint8((edx >> 5) & 0xFF) // Bits 12:5 + } + if info.VersionID > 0 { + // first 4 fixed events are always instructions retired, cycles, ref cycles and topdown slots + if ebx == 0x0 && info.NumFixedPMC == 3 { + c.featureSet.set(PMU_FIXEDCOUNTER_INSTRUCTIONS) + c.featureSet.set(PMU_FIXEDCOUNTER_CYCLES) + c.featureSet.set(PMU_FIXEDCOUNTER_REFCYCLES) + } + if ebx == 0x0 && info.NumFixedPMC == 4 { + c.featureSet.set(PMU_FIXEDCOUNTER_INSTRUCTIONS) + c.featureSet.set(PMU_FIXEDCOUNTER_CYCLES) + c.featureSet.set(PMU_FIXEDCOUNTER_REFCYCLES) + c.featureSet.set(PMU_FIXEDCOUNTER_TOPDOWN_SLOTS) + } + if ebx != 0x0 { + if ((ebx >> 0) & 1) == 0 { + c.featureSet.set(PMU_FIXEDCOUNTER_INSTRUCTIONS) + } + if ((ebx >> 1) & 1) == 0 { + c.featureSet.set(PMU_FIXEDCOUNTER_CYCLES) + } + if ((ebx >> 2) & 1) == 0 { + c.featureSet.set(PMU_FIXEDCOUNTER_REFCYCLES) + } + if ((ebx >> 3) & 1) == 0 { + c.featureSet.set(PMU_FIXEDCOUNTER_TOPDOWN_SLOTS) + } + } + } + return info +} diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_x86.go b/vendor/github.com/klauspost/cpuid/v2/detect_x86.go index f924c9d..14a56b9 100644 --- a/vendor/github.com/klauspost/cpuid/v2/detect_x86.go +++ b/vendor/github.com/klauspost/cpuid/v2/detect_x86.go @@ -36,6 +36,10 @@ func addInfo(c *CPUInfo, safe bool) { c.AVX10Level = c.supportAVX10() c.cacheSize() c.frequencies() + if c.maxFunc >= 0x0A { + eax, ebx, _, edx := cpuid(0x0A) + c.PMU = parseLeaf0AH(c, eax, ebx, edx) + } } func getVectorLength() (vl, pl uint64) { return 0, 0 } diff --git a/vendor/github.com/klauspost/cpuid/v2/featureid_string.go b/vendor/github.com/klauspost/cpuid/v2/featureid_string.go index 04760c1..2888bae 100644 --- a/vendor/github.com/klauspost/cpuid/v2/featureid_string.go +++ b/vendor/github.com/klauspost/cpuid/v2/featureid_string.go @@ -19,227 +19,238 @@ func _() { _ = x[AMXTILE-9] _ = x[AMXTF32-10] _ = x[AMXCOMPLEX-11] - _ = x[APX_F-12] - _ = x[AVX-13] - _ = x[AVX10-14] - _ = x[AVX10_128-15] - _ = x[AVX10_256-16] - _ = x[AVX10_512-17] - _ = x[AVX2-18] - _ = x[AVX512BF16-19] - _ = x[AVX512BITALG-20] - _ = x[AVX512BW-21] - _ = x[AVX512CD-22] - _ = x[AVX512DQ-23] - _ = x[AVX512ER-24] - _ = x[AVX512F-25] - _ = x[AVX512FP16-26] - _ = x[AVX512IFMA-27] - _ = x[AVX512PF-28] - _ = x[AVX512VBMI-29] - _ = x[AVX512VBMI2-30] - _ = x[AVX512VL-31] - _ = x[AVX512VNNI-32] - _ = x[AVX512VP2INTERSECT-33] - _ = x[AVX512VPOPCNTDQ-34] - _ = x[AVXIFMA-35] - _ = x[AVXNECONVERT-36] - _ = x[AVXSLOW-37] - _ = x[AVXVNNI-38] - _ = x[AVXVNNIINT8-39] - _ = x[AVXVNNIINT16-40] - _ = x[BHI_CTRL-41] - _ = x[BMI1-42] - _ = x[BMI2-43] - _ = x[CETIBT-44] - _ = x[CETSS-45] - _ = x[CLDEMOTE-46] - _ = x[CLMUL-47] - _ = x[CLZERO-48] - _ = x[CMOV-49] - _ = x[CMPCCXADD-50] - _ = x[CMPSB_SCADBS_SHORT-51] - _ = x[CMPXCHG8-52] - _ = x[CPBOOST-53] - _ = x[CPPC-54] - _ = x[CX16-55] - _ = x[EFER_LMSLE_UNS-56] - _ = x[ENQCMD-57] - _ = x[ERMS-58] - _ = x[F16C-59] - _ = x[FLUSH_L1D-60] - _ = x[FMA3-61] - _ = x[FMA4-62] - _ = x[FP128-63] - _ = x[FP256-64] - _ = x[FSRM-65] - _ = x[FXSR-66] - _ = x[FXSROPT-67] - _ = x[GFNI-68] - _ = x[HLE-69] - _ = x[HRESET-70] - _ = x[HTT-71] - _ = x[HWA-72] - _ = x[HYBRID_CPU-73] - _ = x[HYPERVISOR-74] - _ = x[IA32_ARCH_CAP-75] - _ = x[IA32_CORE_CAP-76] - _ = x[IBPB-77] - _ = x[IBPB_BRTYPE-78] - _ = x[IBRS-79] - _ = x[IBRS_PREFERRED-80] - _ = x[IBRS_PROVIDES_SMP-81] - _ = x[IBS-82] - _ = x[IBSBRNTRGT-83] - _ = x[IBSFETCHSAM-84] - _ = x[IBSFFV-85] - _ = x[IBSOPCNT-86] - _ = x[IBSOPCNTEXT-87] - _ = x[IBSOPSAM-88] - _ = x[IBSRDWROPCNT-89] - _ = x[IBSRIPINVALIDCHK-90] - _ = x[IBS_FETCH_CTLX-91] - _ = x[IBS_OPDATA4-92] - _ = x[IBS_OPFUSE-93] - _ = x[IBS_PREVENTHOST-94] - _ = x[IBS_ZEN4-95] - _ = x[IDPRED_CTRL-96] - _ = x[INT_WBINVD-97] - _ = x[INVLPGB-98] - _ = x[KEYLOCKER-99] - _ = x[KEYLOCKERW-100] - _ = x[LAHF-101] - _ = x[LAM-102] - _ = x[LBRVIRT-103] - _ = x[LZCNT-104] - _ = x[MCAOVERFLOW-105] - _ = x[MCDT_NO-106] - _ = x[MCOMMIT-107] - _ = x[MD_CLEAR-108] - _ = x[MMX-109] - _ = x[MMXEXT-110] - _ = x[MOVBE-111] - _ = x[MOVDIR64B-112] - _ = x[MOVDIRI-113] - _ = x[MOVSB_ZL-114] - _ = x[MOVU-115] - _ = x[MPX-116] - _ = x[MSRIRC-117] - _ = x[MSRLIST-118] - _ = x[MSR_PAGEFLUSH-119] - _ = x[NRIPS-120] - _ = x[NX-121] - _ = x[OSXSAVE-122] - _ = x[PCONFIG-123] - _ = x[POPCNT-124] - _ = x[PPIN-125] - _ = x[PREFETCHI-126] - _ = x[PSFD-127] - _ = x[RDPRU-128] - _ = x[RDRAND-129] - _ = x[RDSEED-130] - _ = x[RDTSCP-131] - _ = x[RRSBA_CTRL-132] - _ = x[RTM-133] - _ = x[RTM_ALWAYS_ABORT-134] - _ = x[SBPB-135] - _ = x[SERIALIZE-136] - _ = x[SEV-137] - _ = x[SEV_64BIT-138] - _ = x[SEV_ALTERNATIVE-139] - _ = x[SEV_DEBUGSWAP-140] - _ = x[SEV_ES-141] - _ = x[SEV_RESTRICTED-142] - _ = x[SEV_SNP-143] - _ = x[SGX-144] - _ = x[SGXLC-145] - _ = x[SHA-146] - _ = x[SME-147] - _ = x[SME_COHERENT-148] - _ = x[SPEC_CTRL_SSBD-149] - _ = x[SRBDS_CTRL-150] - _ = x[SRSO_MSR_FIX-151] - _ = x[SRSO_NO-152] - _ = x[SRSO_USER_KERNEL_NO-153] - _ = x[SSE-154] - _ = x[SSE2-155] - _ = x[SSE3-156] - _ = x[SSE4-157] - _ = x[SSE42-158] - _ = x[SSE4A-159] - _ = x[SSSE3-160] - _ = x[STIBP-161] - _ = x[STIBP_ALWAYSON-162] - _ = x[STOSB_SHORT-163] - _ = x[SUCCOR-164] - _ = x[SVM-165] - _ = x[SVMDA-166] - _ = x[SVMFBASID-167] - _ = x[SVML-168] - _ = x[SVMNP-169] - _ = x[SVMPF-170] - _ = x[SVMPFT-171] - _ = x[SYSCALL-172] - _ = x[SYSEE-173] - _ = x[TBM-174] - _ = x[TDX_GUEST-175] - _ = x[TLB_FLUSH_NESTED-176] - _ = x[TME-177] - _ = x[TOPEXT-178] - _ = x[TSCRATEMSR-179] - _ = x[TSXLDTRK-180] - _ = x[VAES-181] - _ = x[VMCBCLEAN-182] - _ = x[VMPL-183] - _ = x[VMSA_REGPROT-184] - _ = x[VMX-185] - _ = x[VPCLMULQDQ-186] - _ = x[VTE-187] - _ = x[WAITPKG-188] - _ = x[WBNOINVD-189] - _ = x[WRMSRNS-190] - _ = x[X87-191] - _ = x[XGETBV1-192] - _ = x[XOP-193] - _ = x[XSAVE-194] - _ = x[XSAVEC-195] - _ = x[XSAVEOPT-196] - _ = x[XSAVES-197] - _ = x[AESARM-198] - _ = x[ARMCPUID-199] - _ = x[ASIMD-200] - _ = x[ASIMDDP-201] - _ = x[ASIMDHP-202] - _ = x[ASIMDRDM-203] - _ = x[ATOMICS-204] - _ = x[CRC32-205] - _ = x[DCPOP-206] - _ = x[EVTSTRM-207] - _ = x[FCMA-208] - _ = x[FHM-209] - _ = x[FP-210] - _ = x[FPHP-211] - _ = x[GPA-212] - _ = x[JSCVT-213] - _ = x[LRCPC-214] - _ = x[PMULL-215] - _ = x[RNDR-216] - _ = x[TLB-217] - _ = x[TS-218] - _ = x[SHA1-219] - _ = x[SHA2-220] - _ = x[SHA3-221] - _ = x[SHA512-222] - _ = x[SM3-223] - _ = x[SM4-224] - _ = x[SVE-225] - _ = x[lastID-226] + _ = x[AMXTRANSPOSE-12] + _ = x[APX_F-13] + _ = x[AVX-14] + _ = x[AVX10-15] + _ = x[AVX10_128-16] + _ = x[AVX10_256-17] + _ = x[AVX10_512-18] + _ = x[AVX2-19] + _ = x[AVX512BF16-20] + _ = x[AVX512BITALG-21] + _ = x[AVX512BW-22] + _ = x[AVX512CD-23] + _ = x[AVX512DQ-24] + _ = x[AVX512ER-25] + _ = x[AVX512F-26] + _ = x[AVX512FP16-27] + _ = x[AVX512IFMA-28] + _ = x[AVX512PF-29] + _ = x[AVX512VBMI-30] + _ = x[AVX512VBMI2-31] + _ = x[AVX512VL-32] + _ = x[AVX512VNNI-33] + _ = x[AVX512VP2INTERSECT-34] + _ = x[AVX512VPOPCNTDQ-35] + _ = x[AVXIFMA-36] + _ = x[AVXNECONVERT-37] + _ = x[AVXSLOW-38] + _ = x[AVXVNNI-39] + _ = x[AVXVNNIINT8-40] + _ = x[AVXVNNIINT16-41] + _ = x[BHI_CTRL-42] + _ = x[BMI1-43] + _ = x[BMI2-44] + _ = x[CETIBT-45] + _ = x[CETSS-46] + _ = x[CLDEMOTE-47] + _ = x[CLMUL-48] + _ = x[CLZERO-49] + _ = x[CMOV-50] + _ = x[CMPCCXADD-51] + _ = x[CMPSB_SCADBS_SHORT-52] + _ = x[CMPXCHG8-53] + _ = x[CPBOOST-54] + _ = x[CPPC-55] + _ = x[CX16-56] + _ = x[EFER_LMSLE_UNS-57] + _ = x[ENQCMD-58] + _ = x[ERMS-59] + _ = x[F16C-60] + _ = x[FLUSH_L1D-61] + _ = x[FMA3-62] + _ = x[FMA4-63] + _ = x[FP128-64] + _ = x[FP256-65] + _ = x[FSRM-66] + _ = x[FXSR-67] + _ = x[FXSROPT-68] + _ = x[GFNI-69] + _ = x[HLE-70] + _ = x[HRESET-71] + _ = x[HTT-72] + _ = x[HWA-73] + _ = x[HYBRID_CPU-74] + _ = x[HYPERVISOR-75] + _ = x[IA32_ARCH_CAP-76] + _ = x[IA32_CORE_CAP-77] + _ = x[IBPB-78] + _ = x[IBPB_BRTYPE-79] + _ = x[IBRS-80] + _ = x[IBRS_PREFERRED-81] + _ = x[IBRS_PROVIDES_SMP-82] + _ = x[IBS-83] + _ = x[IBSBRNTRGT-84] + _ = x[IBSFETCHSAM-85] + _ = x[IBSFFV-86] + _ = x[IBSOPCNT-87] + _ = x[IBSOPCNTEXT-88] + _ = x[IBSOPSAM-89] + _ = x[IBSRDWROPCNT-90] + _ = x[IBSRIPINVALIDCHK-91] + _ = x[IBS_FETCH_CTLX-92] + _ = x[IBS_OPDATA4-93] + _ = x[IBS_OPFUSE-94] + _ = x[IBS_PREVENTHOST-95] + _ = x[IBS_ZEN4-96] + _ = x[IDPRED_CTRL-97] + _ = x[INT_WBINVD-98] + _ = x[INVLPGB-99] + _ = x[KEYLOCKER-100] + _ = x[KEYLOCKERW-101] + _ = x[LAHF-102] + _ = x[LAM-103] + _ = x[LBRVIRT-104] + _ = x[LZCNT-105] + _ = x[MCAOVERFLOW-106] + _ = x[MCDT_NO-107] + _ = x[MCOMMIT-108] + _ = x[MD_CLEAR-109] + _ = x[MMX-110] + _ = x[MMXEXT-111] + _ = x[MOVBE-112] + _ = x[MOVDIR64B-113] + _ = x[MOVDIRI-114] + _ = x[MOVSB_ZL-115] + _ = x[MOVU-116] + _ = x[MPX-117] + _ = x[MSRIRC-118] + _ = x[MSRLIST-119] + _ = x[MSR_PAGEFLUSH-120] + _ = x[NRIPS-121] + _ = x[NX-122] + _ = x[OSXSAVE-123] + _ = x[PCONFIG-124] + _ = x[POPCNT-125] + _ = x[PPIN-126] + _ = x[PREFETCHI-127] + _ = x[PSFD-128] + _ = x[RDPRU-129] + _ = x[RDRAND-130] + _ = x[RDSEED-131] + _ = x[RDTSCP-132] + _ = x[RRSBA_CTRL-133] + _ = x[RTM-134] + _ = x[RTM_ALWAYS_ABORT-135] + _ = x[SBPB-136] + _ = x[SERIALIZE-137] + _ = x[SEV-138] + _ = x[SEV_64BIT-139] + _ = x[SEV_ALTERNATIVE-140] + _ = x[SEV_DEBUGSWAP-141] + _ = x[SEV_ES-142] + _ = x[SEV_RESTRICTED-143] + _ = x[SEV_SNP-144] + _ = x[SGX-145] + _ = x[SGXLC-146] + _ = x[SGXPQC-147] + _ = x[SHA-148] + _ = x[SME-149] + _ = x[SME_COHERENT-150] + _ = x[SM3_X86-151] + _ = x[SM4_X86-152] + _ = x[SPEC_CTRL_SSBD-153] + _ = x[SRBDS_CTRL-154] + _ = x[SRSO_MSR_FIX-155] + _ = x[SRSO_NO-156] + _ = x[SRSO_USER_KERNEL_NO-157] + _ = x[SSE-158] + _ = x[SSE2-159] + _ = x[SSE3-160] + _ = x[SSE4-161] + _ = x[SSE42-162] + _ = x[SSE4A-163] + _ = x[SSSE3-164] + _ = x[STIBP-165] + _ = x[STIBP_ALWAYSON-166] + _ = x[STOSB_SHORT-167] + _ = x[SUCCOR-168] + _ = x[SVM-169] + _ = x[SVMDA-170] + _ = x[SVMFBASID-171] + _ = x[SVML-172] + _ = x[SVMNP-173] + _ = x[SVMPF-174] + _ = x[SVMPFT-175] + _ = x[SYSCALL-176] + _ = x[SYSEE-177] + _ = x[TBM-178] + _ = x[TDX_GUEST-179] + _ = x[TLB_FLUSH_NESTED-180] + _ = x[TME-181] + _ = x[TOPEXT-182] + _ = x[TSA_L1_NO-183] + _ = x[TSA_SQ_NO-184] + _ = x[TSA_VERW_CLEAR-185] + _ = x[TSCRATEMSR-186] + _ = x[TSXLDTRK-187] + _ = x[VAES-188] + _ = x[VMCBCLEAN-189] + _ = x[VMPL-190] + _ = x[VMSA_REGPROT-191] + _ = x[VMX-192] + _ = x[VPCLMULQDQ-193] + _ = x[VTE-194] + _ = x[WAITPKG-195] + _ = x[WBNOINVD-196] + _ = x[WRMSRNS-197] + _ = x[X87-198] + _ = x[XGETBV1-199] + _ = x[XOP-200] + _ = x[XSAVE-201] + _ = x[XSAVEC-202] + _ = x[XSAVEOPT-203] + _ = x[XSAVES-204] + _ = x[AESARM-205] + _ = x[ARMCPUID-206] + _ = x[ASIMD-207] + _ = x[ASIMDDP-208] + _ = x[ASIMDHP-209] + _ = x[ASIMDRDM-210] + _ = x[ATOMICS-211] + _ = x[CRC32-212] + _ = x[DCPOP-213] + _ = x[EVTSTRM-214] + _ = x[FCMA-215] + _ = x[FHM-216] + _ = x[FP-217] + _ = x[FPHP-218] + _ = x[GPA-219] + _ = x[JSCVT-220] + _ = x[LRCPC-221] + _ = x[PMULL-222] + _ = x[RNDR-223] + _ = x[TLB-224] + _ = x[TS-225] + _ = x[SHA1-226] + _ = x[SHA2-227] + _ = x[SHA3-228] + _ = x[SHA512-229] + _ = x[SM3-230] + _ = x[SM4-231] + _ = x[SVE-232] + _ = x[PMU_FIXEDCOUNTER_CYCLES-233] + _ = x[PMU_FIXEDCOUNTER_REFCYCLES-234] + _ = x[PMU_FIXEDCOUNTER_INSTRUCTIONS-235] + _ = x[PMU_FIXEDCOUNTER_TOPDOWN_SLOTS-236] + _ = x[lastID-237] _ = x[firstID-0] } -const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXFP16AMXINT8AMXFP8AMXTILEAMXTF32AMXCOMPLEXAPX_FAVXAVX10AVX10_128AVX10_256AVX10_512AVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXIFMAAVXNECONVERTAVXSLOWAVXVNNIAVXVNNIINT8AVXVNNIINT16BHI_CTRLBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPCCXADDCMPSB_SCADBS_SHORTCMPXCHG8CPBOOSTCPPCCX16EFER_LMSLE_UNSENQCMDERMSF16CFLUSH_L1DFMA3FMA4FP128FP256FSRMFXSRFXSROPTGFNIHLEHRESETHTTHWAHYBRID_CPUHYPERVISORIA32_ARCH_CAPIA32_CORE_CAPIBPBIBPB_BRTYPEIBRSIBRS_PREFERREDIBRS_PROVIDES_SMPIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKIBS_FETCH_CTLXIBS_OPDATA4IBS_OPFUSEIBS_PREVENTHOSTIBS_ZEN4IDPRED_CTRLINT_WBINVDINVLPGBKEYLOCKERKEYLOCKERWLAHFLAMLBRVIRTLZCNTMCAOVERFLOWMCDT_NOMCOMMITMD_CLEARMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMOVSB_ZLMOVUMPXMSRIRCMSRLISTMSR_PAGEFLUSHNRIPSNXOSXSAVEPCONFIGPOPCNTPPINPREFETCHIPSFDRDPRURDRANDRDSEEDRDTSCPRRSBA_CTRLRTMRTM_ALWAYS_ABORTSBPBSERIALIZESEVSEV_64BITSEV_ALTERNATIVESEV_DEBUGSWAPSEV_ESSEV_RESTRICTEDSEV_SNPSGXSGXLCSHASMESME_COHERENTSPEC_CTRL_SSBDSRBDS_CTRLSRSO_MSR_FIXSRSO_NOSRSO_USER_KERNEL_NOSSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSTIBP_ALWAYSONSTOSB_SHORTSUCCORSVMSVMDASVMFBASIDSVMLSVMNPSVMPFSVMPFTSYSCALLSYSEETBMTDX_GUESTTLB_FLUSH_NESTEDTMETOPEXTTSCRATEMSRTSXLDTRKVAESVMCBCLEANVMPLVMSA_REGPROTVMXVPCLMULQDQVTEWAITPKGWBNOINVDWRMSRNSX87XGETBV1XOPXSAVEXSAVECXSAVEOPTXSAVESAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFHMFPFPHPGPAJSCVTLRCPCPMULLRNDRTLBTSSHA1SHA2SHA3SHA512SM3SM4SVElastID" +const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXFP16AMXINT8AMXFP8AMXTILEAMXTF32AMXCOMPLEXAMXTRANSPOSEAPX_FAVXAVX10AVX10_128AVX10_256AVX10_512AVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXIFMAAVXNECONVERTAVXSLOWAVXVNNIAVXVNNIINT8AVXVNNIINT16BHI_CTRLBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPCCXADDCMPSB_SCADBS_SHORTCMPXCHG8CPBOOSTCPPCCX16EFER_LMSLE_UNSENQCMDERMSF16CFLUSH_L1DFMA3FMA4FP128FP256FSRMFXSRFXSROPTGFNIHLEHRESETHTTHWAHYBRID_CPUHYPERVISORIA32_ARCH_CAPIA32_CORE_CAPIBPBIBPB_BRTYPEIBRSIBRS_PREFERREDIBRS_PROVIDES_SMPIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKIBS_FETCH_CTLXIBS_OPDATA4IBS_OPFUSEIBS_PREVENTHOSTIBS_ZEN4IDPRED_CTRLINT_WBINVDINVLPGBKEYLOCKERKEYLOCKERWLAHFLAMLBRVIRTLZCNTMCAOVERFLOWMCDT_NOMCOMMITMD_CLEARMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMOVSB_ZLMOVUMPXMSRIRCMSRLISTMSR_PAGEFLUSHNRIPSNXOSXSAVEPCONFIGPOPCNTPPINPREFETCHIPSFDRDPRURDRANDRDSEEDRDTSCPRRSBA_CTRLRTMRTM_ALWAYS_ABORTSBPBSERIALIZESEVSEV_64BITSEV_ALTERNATIVESEV_DEBUGSWAPSEV_ESSEV_RESTRICTEDSEV_SNPSGXSGXLCSGXPQCSHASMESME_COHERENTSM3_X86SM4_X86SPEC_CTRL_SSBDSRBDS_CTRLSRSO_MSR_FIXSRSO_NOSRSO_USER_KERNEL_NOSSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSTIBP_ALWAYSONSTOSB_SHORTSUCCORSVMSVMDASVMFBASIDSVMLSVMNPSVMPFSVMPFTSYSCALLSYSEETBMTDX_GUESTTLB_FLUSH_NESTEDTMETOPEXTTSA_L1_NOTSA_SQ_NOTSA_VERW_CLEARTSCRATEMSRTSXLDTRKVAESVMCBCLEANVMPLVMSA_REGPROTVMXVPCLMULQDQVTEWAITPKGWBNOINVDWRMSRNSX87XGETBV1XOPXSAVEXSAVECXSAVEOPTXSAVESAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFHMFPFPHPGPAJSCVTLRCPCPMULLRNDRTLBTSSHA1SHA2SHA3SHA512SM3SM4SVEPMU_FIXEDCOUNTER_CYCLESPMU_FIXEDCOUNTER_REFCYCLESPMU_FIXEDCOUNTER_INSTRUCTIONSPMU_FIXEDCOUNTER_TOPDOWN_SLOTSlastID" -var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 61, 68, 75, 85, 90, 93, 98, 107, 116, 125, 129, 139, 151, 159, 167, 175, 183, 190, 200, 210, 218, 228, 239, 247, 257, 275, 290, 297, 309, 316, 323, 334, 346, 354, 358, 362, 368, 373, 381, 386, 392, 396, 405, 423, 431, 438, 442, 446, 460, 466, 470, 474, 483, 487, 491, 496, 501, 505, 509, 516, 520, 523, 529, 532, 535, 545, 555, 568, 581, 585, 596, 600, 614, 631, 634, 644, 655, 661, 669, 680, 688, 700, 716, 730, 741, 751, 766, 774, 785, 795, 802, 811, 821, 825, 828, 835, 840, 851, 858, 865, 873, 876, 882, 887, 896, 903, 911, 915, 918, 924, 931, 944, 949, 951, 958, 965, 971, 975, 984, 988, 993, 999, 1005, 1011, 1021, 1024, 1040, 1044, 1053, 1056, 1065, 1080, 1093, 1099, 1113, 1120, 1123, 1128, 1131, 1134, 1146, 1160, 1170, 1182, 1189, 1208, 1211, 1215, 1219, 1223, 1228, 1233, 1238, 1243, 1257, 1268, 1274, 1277, 1282, 1291, 1295, 1300, 1305, 1311, 1318, 1323, 1326, 1335, 1351, 1354, 1360, 1370, 1378, 1382, 1391, 1395, 1407, 1410, 1420, 1423, 1430, 1438, 1445, 1448, 1455, 1458, 1463, 1469, 1477, 1483, 1489, 1497, 1502, 1509, 1516, 1524, 1531, 1536, 1541, 1548, 1552, 1555, 1557, 1561, 1564, 1569, 1574, 1579, 1583, 1586, 1588, 1592, 1596, 1600, 1606, 1609, 1612, 1615, 1621} +var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 61, 68, 75, 85, 97, 102, 105, 110, 119, 128, 137, 141, 151, 163, 171, 179, 187, 195, 202, 212, 222, 230, 240, 251, 259, 269, 287, 302, 309, 321, 328, 335, 346, 358, 366, 370, 374, 380, 385, 393, 398, 404, 408, 417, 435, 443, 450, 454, 458, 472, 478, 482, 486, 495, 499, 503, 508, 513, 517, 521, 528, 532, 535, 541, 544, 547, 557, 567, 580, 593, 597, 608, 612, 626, 643, 646, 656, 667, 673, 681, 692, 700, 712, 728, 742, 753, 763, 778, 786, 797, 807, 814, 823, 833, 837, 840, 847, 852, 863, 870, 877, 885, 888, 894, 899, 908, 915, 923, 927, 930, 936, 943, 956, 961, 963, 970, 977, 983, 987, 996, 1000, 1005, 1011, 1017, 1023, 1033, 1036, 1052, 1056, 1065, 1068, 1077, 1092, 1105, 1111, 1125, 1132, 1135, 1140, 1146, 1149, 1152, 1164, 1171, 1178, 1192, 1202, 1214, 1221, 1240, 1243, 1247, 1251, 1255, 1260, 1265, 1270, 1275, 1289, 1300, 1306, 1309, 1314, 1323, 1327, 1332, 1337, 1343, 1350, 1355, 1358, 1367, 1383, 1386, 1392, 1401, 1410, 1424, 1434, 1442, 1446, 1455, 1459, 1471, 1474, 1484, 1487, 1494, 1502, 1509, 1512, 1519, 1522, 1527, 1533, 1541, 1547, 1553, 1561, 1566, 1573, 1580, 1588, 1595, 1600, 1605, 1612, 1616, 1619, 1621, 1625, 1628, 1633, 1638, 1643, 1647, 1650, 1652, 1656, 1660, 1664, 1670, 1673, 1676, 1679, 1702, 1728, 1757, 1787, 1793} func (i FeatureID) String() string { if i < 0 || i >= FeatureID(len(_FeatureID_index)-1) { diff --git a/vendor/github.com/klauspost/cpuid/v2/os_darwin_arm64.go b/vendor/github.com/klauspost/cpuid/v2/os_darwin_arm64.go index 6f0b33c..da07522 100644 --- a/vendor/github.com/klauspost/cpuid/v2/os_darwin_arm64.go +++ b/vendor/github.com/klauspost/cpuid/v2/os_darwin_arm64.go @@ -65,9 +65,16 @@ func sysctlGetInt64(unknown int, names ...string) int { return unknown } -func setFeature(c *CPUInfo, name string, feature FeatureID) { - c.featureSet.setIf(sysctlGetBool(name), feature) +func setFeature(c *CPUInfo, feature FeatureID, aliases ...string) { + for _, alias := range aliases { + set := sysctlGetBool(alias) + c.featureSet.setIf(set, feature) + if set { + break + } + } } + func tryToFillCPUInfoFomSysctl(c *CPUInfo) { c.BrandName = sysctlGetString("machdep.cpu.brand_string") @@ -87,41 +94,36 @@ func tryToFillCPUInfoFomSysctl(c *CPUInfo) { c.Cache.L2 = sysctlGetInt64(-1, "hw.l2cachesize") c.Cache.L3 = sysctlGetInt64(-1, "hw.l3cachesize") - // from https://developer.arm.com/downloads/-/exploration-tools/feature-names-for-a-profile - setFeature(c, "hw.optional.arm.FEAT_AES", AESARM) - setFeature(c, "hw.optional.AdvSIMD", ASIMD) - setFeature(c, "hw.optional.arm.FEAT_DotProd", ASIMDDP) - setFeature(c, "hw.optional.arm.FEAT_RDM", ASIMDRDM) - setFeature(c, "hw.optional.FEAT_CRC32", CRC32) - setFeature(c, "hw.optional.arm.FEAT_DPB", DCPOP) - // setFeature(c, "", EVTSTRM) - setFeature(c, "hw.optional.arm.FEAT_FCMA", FCMA) - setFeature(c, "hw.optional.arm.FEAT_FHM", FHM) - setFeature(c, "hw.optional.arm.FEAT_FP", FP) - setFeature(c, "hw.optional.arm.FEAT_FP16", FPHP) - setFeature(c, "hw.optional.arm.FEAT_PAuth", GPA) - setFeature(c, "hw.optional.arm.FEAT_RNG", RNDR) - setFeature(c, "hw.optional.arm.FEAT_JSCVT", JSCVT) - setFeature(c, "hw.optional.arm.FEAT_LRCPC", LRCPC) - setFeature(c, "hw.optional.arm.FEAT_PMULL", PMULL) - setFeature(c, "hw.optional.arm.FEAT_SHA1", SHA1) - setFeature(c, "hw.optional.arm.FEAT_SHA256", SHA2) - setFeature(c, "hw.optional.arm.FEAT_SHA3", SHA3) - setFeature(c, "hw.optional.arm.FEAT_SHA512", SHA512) - setFeature(c, "hw.optional.arm.FEAT_TLBIOS", TLB) - setFeature(c, "hw.optional.arm.FEAT_TLBIRANGE", TLB) - setFeature(c, "hw.optional.arm.FEAT_FlagM", TS) - setFeature(c, "hw.optional.arm.FEAT_FlagM2", TS) - // setFeature(c, "", SM3) - // setFeature(c, "", SM4) - setFeature(c, "hw.optional.arm.FEAT_SVE", SVE) - - // from empirical observation - setFeature(c, "hw.optional.AdvSIMD_HPFPCvt", ASIMDHP) - setFeature(c, "hw.optional.armv8_1_atomics", ATOMICS) - setFeature(c, "hw.optional.floatingpoint", FP) - setFeature(c, "hw.optional.armv8_2_sha3", SHA3) - setFeature(c, "hw.optional.armv8_2_sha512", SHA512) - setFeature(c, "hw.optional.armv8_3_compnum", FCMA) - setFeature(c, "hw.optional.armv8_crc32", CRC32) + // ARM features: + // + // Note: On some Apple Silicon system, some feats have aliases. See: + // https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics + // When so, we look at all aliases and consider a feature available when at least one identifier matches. + setFeature(c, AESARM, "hw.optional.arm.FEAT_AES") // AES instructions + setFeature(c, ASIMD, "hw.optional.arm.AdvSIMD", "hw.optional.neon") // Advanced SIMD + setFeature(c, ASIMDDP, "hw.optional.arm.FEAT_DotProd") // SIMD Dot Product + setFeature(c, ASIMDHP, "hw.optional.arm.AdvSIMD_HPFPCvt", "hw.optional.neon_hpfp") // Advanced SIMD half-precision floating point + setFeature(c, ASIMDRDM, "hw.optional.arm.FEAT_RDM") // Rounding Double Multiply Accumulate/Subtract + setFeature(c, ATOMICS, "hw.optional.arm.FEAT_LSE", "hw.optional.armv8_1_atomics") // Large System Extensions (LSE) + setFeature(c, CRC32, "hw.optional.arm.FEAT_CRC32", "hw.optional.armv8_crc32") // CRC32/CRC32C instructions + setFeature(c, DCPOP, "hw.optional.arm.FEAT_DPB") // Data cache clean to Point of Persistence (DC CVAP) + setFeature(c, EVTSTRM, "hw.optional.arm.FEAT_ECV") // Generic timer + setFeature(c, FCMA, "hw.optional.arm.FEAT_FCMA", "hw.optional.armv8_3_compnum") // Floating point complex number addition and multiplication + setFeature(c, FHM, "hw.optional.armv8_2_fhm", "hw.optional.arm.FEAT_FHM") // FMLAL and FMLSL instructions + setFeature(c, FP, "hw.optional.floatingpoint") // Single-precision and double-precision floating point + setFeature(c, FPHP, "hw.optional.arm.FEAT_FP16", "hw.optional.neon_fp16") // Half-precision floating point + setFeature(c, GPA, "hw.optional.arm.FEAT_PAuth") // Generic Pointer Authentication + setFeature(c, JSCVT, "hw.optional.arm.FEAT_JSCVT") // Javascript-style double->int convert (FJCVTZS) + setFeature(c, LRCPC, "hw.optional.arm.FEAT_LRCPC") // Weaker release consistency (LDAPR, etc) + setFeature(c, PMULL, "hw.optional.arm.FEAT_PMULL") // Polynomial Multiply instructions (PMULL/PMULL2) + setFeature(c, RNDR, "hw.optional.arm.FEAT_RNG") // Random Number instructions + setFeature(c, TLB, "hw.optional.arm.FEAT_TLBIOS", "hw.optional.arm.FEAT_TLBIRANGE") // Outer Shareable and TLB range maintenance instructions + setFeature(c, TS, "hw.optional.arm.FEAT_FlagM", "hw.optional.arm.FEAT_FlagM2") // Flag manipulation instructions + setFeature(c, SHA1, "hw.optional.arm.FEAT_SHA1") // SHA-1 instructions (SHA1C, etc) + setFeature(c, SHA2, "hw.optional.arm.FEAT_SHA256") // SHA-2 instructions (SHA256H, etc) + setFeature(c, SHA3, "hw.optional.arm.FEAT_SHA3") // SHA-3 instructions (EOR3, RAXI, XAR, BCAX) + setFeature(c, SHA512, "hw.optional.arm.FEAT_SHA512") // SHA512 instructions + setFeature(c, SM3, "hw.optional.arm.FEAT_SM3") // SM3 instructions + setFeature(c, SM4, "hw.optional.arm.FEAT_SM4") // SM4 instructions + setFeature(c, SVE, "hw.optional.arm.FEAT_SVE") // Scalable Vector Extension } diff --git a/vendor/github.com/pelletier/go-toml/v2/.goreleaser.yaml b/vendor/github.com/pelletier/go-toml/v2/.goreleaser.yaml index ec52857..47f0f59 100644 --- a/vendor/github.com/pelletier/go-toml/v2/.goreleaser.yaml +++ b/vendor/github.com/pelletier/go-toml/v2/.goreleaser.yaml @@ -113,7 +113,7 @@ dockers: checksum: name_template: 'sha256sums.txt' snapshot: - name_template: "{{ incpatch .Version }}-next" + version_template: "{{ incpatch .Version }}-next" release: github: owner: pelletier diff --git a/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go b/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go index c3df8be..189be52 100644 --- a/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go +++ b/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go @@ -59,7 +59,7 @@ func (d *Decoder) DisallowUnknownFields() *Decoder { // // With this feature enabled, types implementing the unstable/Unmarshaler // interface can be decoded from any structure of the document. It allows types -// that don't have a straightfoward TOML representation to provide their own +// that don't have a straightforward TOML representation to provide their own // decoding logic. // // Currently, types can only decode from a single value. Tables and array tables diff --git a/vendor/github.com/quic-go/qpack/.codecov.yml b/vendor/github.com/quic-go/qpack/.codecov.yml new file mode 100644 index 0000000..00064af --- /dev/null +++ b/vendor/github.com/quic-go/qpack/.codecov.yml @@ -0,0 +1,7 @@ +coverage: + round: nearest + status: + project: + default: + threshold: 1 + patch: false diff --git a/vendor/github.com/quic-go/qpack/.gitignore b/vendor/github.com/quic-go/qpack/.gitignore new file mode 100644 index 0000000..66c189a --- /dev/null +++ b/vendor/github.com/quic-go/qpack/.gitignore @@ -0,0 +1,6 @@ +fuzzing/*.zip +fuzzing/coverprofile +fuzzing/crashers +fuzzing/sonarprofile +fuzzing/suppressions +fuzzing/corpus/ diff --git a/vendor/github.com/quic-go/qpack/.gitmodules b/vendor/github.com/quic-go/qpack/.gitmodules new file mode 100644 index 0000000..5ac16f0 --- /dev/null +++ b/vendor/github.com/quic-go/qpack/.gitmodules @@ -0,0 +1,3 @@ +[submodule "integrationtests/interop/qifs"] + path = integrationtests/interop/qifs + url = https://github.com/qpackers/qifs.git diff --git a/vendor/github.com/quic-go/qpack/.golangci.yml b/vendor/github.com/quic-go/qpack/.golangci.yml new file mode 100644 index 0000000..e6b574e --- /dev/null +++ b/vendor/github.com/quic-go/qpack/.golangci.yml @@ -0,0 +1,23 @@ +run: +linters-settings: +linters: + disable-all: true + enable: + - asciicheck + - copyloopvar + - exhaustive + - goconst + - gofmt # redundant, since gofmt *should* be a no-op after gofumpt + - gofumpt + - goimports + - gosimple + - govet + - ineffassign + - misspell + - prealloc + - staticcheck + - stylecheck + - unconvert + - unparam + - unused + diff --git a/vendor/github.com/quic-go/qpack/LICENSE.md b/vendor/github.com/quic-go/qpack/LICENSE.md new file mode 100644 index 0000000..1ac5a2d --- /dev/null +++ b/vendor/github.com/quic-go/qpack/LICENSE.md @@ -0,0 +1,7 @@ +Copyright 2019 Marten Seemann + +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/quic-go/qpack/README.md b/vendor/github.com/quic-go/qpack/README.md new file mode 100644 index 0000000..5bf1f77 --- /dev/null +++ b/vendor/github.com/quic-go/qpack/README.md @@ -0,0 +1,21 @@ +# QPACK + +[![PkgGoDev](https://pkg.go.dev/badge/github.com/quic-go/qpack)](https://pkg.go.dev/github.com/quic-go/qpack) +[![Code Coverage](https://img.shields.io/codecov/c/github/quic-go/qpack/master.svg?style=flat-square)](https://codecov.io/gh/quic-go/qpack) +[![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/quic-go.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:quic-go) + +This is a minimal QPACK ([RFC 9204](https://datatracker.ietf.org/doc/html/rfc9204)) implementation in Go. It is minimal in the sense that it doesn't use the dynamic table at all, but just the static table and (Huffman encoded) string literals. Wherever possible, it reuses code from the [HPACK implementation in the Go standard library](https://github.com/golang/net/tree/master/http2/hpack). + +It is interoperable with other QPACK implementations (both encoders and decoders), however it won't achieve a high compression efficiency. If you're interested in dynamic table support, please comment on [the issue](https://github.com/quic-go/qpack/issues/33). + +## Running the Interop Tests + +Install the [QPACK interop files](https://github.com/qpackers/qifs/) by running +```bash +git submodule update --init --recursive +``` + +Then run the tests: +```bash +go test -v ./integrationtests/interop/ +``` diff --git a/vendor/github.com/quic-go/qpack/decoder.go b/vendor/github.com/quic-go/qpack/decoder.go new file mode 100644 index 0000000..88ea8eb --- /dev/null +++ b/vendor/github.com/quic-go/qpack/decoder.go @@ -0,0 +1,275 @@ +package qpack + +import ( + "bytes" + "errors" + "fmt" + "sync" + + "golang.org/x/net/http2/hpack" +) + +// A decodingError is something the spec defines as a decoding error. +type decodingError struct { + err error +} + +func (de decodingError) Error() string { + return fmt.Sprintf("decoding error: %v", de.err) +} + +// An invalidIndexError is returned when an encoder references a table +// entry before the static table or after the end of the dynamic table. +type invalidIndexError int + +func (e invalidIndexError) Error() string { + return fmt.Sprintf("invalid indexed representation index %d", int(e)) +} + +var errNoDynamicTable = decodingError{errors.New("no dynamic table")} + +// errNeedMore is an internal sentinel error value that means the +// buffer is truncated and we need to read more data before we can +// continue parsing. +var errNeedMore = errors.New("need more data") + +// A Decoder is the decoding context for incremental processing of +// header blocks. +type Decoder struct { + mutex sync.Mutex + + emitFunc func(f HeaderField) + + readRequiredInsertCount bool + readDeltaBase bool + + // buf is the unparsed buffer. It's only written to + // saveBuf if it was truncated in the middle of a header + // block. Because it's usually not owned, we can only + // process it under Write. + buf []byte // not owned; only valid during Write + + // saveBuf is previous data passed to Write which we weren't able + // to fully parse before. Unlike buf, we own this data. + saveBuf bytes.Buffer +} + +// NewDecoder returns a new decoder +// The emitFunc will be called for each valid field parsed, +// in the same goroutine as calls to Write, before Write returns. +func NewDecoder(emitFunc func(f HeaderField)) *Decoder { + return &Decoder{emitFunc: emitFunc} +} + +func (d *Decoder) Write(p []byte) (int, error) { + if len(p) == 0 { + return 0, nil + } + + d.mutex.Lock() + n, err := d.writeLocked(p) + d.mutex.Unlock() + return n, err +} + +func (d *Decoder) writeLocked(p []byte) (int, error) { + // Only copy the data if we have to. Optimistically assume + // that p will contain a complete header block. + if d.saveBuf.Len() == 0 { + d.buf = p + } else { + d.saveBuf.Write(p) + d.buf = d.saveBuf.Bytes() + d.saveBuf.Reset() + } + + if err := d.decode(); err != nil { + if err != errNeedMore { + return 0, err + } + // TODO: limit the size of the buffer + d.saveBuf.Write(d.buf) + } + return len(p), nil +} + +// DecodeFull decodes an entire block. +func (d *Decoder) DecodeFull(p []byte) ([]HeaderField, error) { + if len(p) == 0 { + return []HeaderField{}, nil + } + + d.mutex.Lock() + defer d.mutex.Unlock() + + saveFunc := d.emitFunc + defer func() { d.emitFunc = saveFunc }() + + var hf []HeaderField + d.emitFunc = func(f HeaderField) { hf = append(hf, f) } + if _, err := d.writeLocked(p); err != nil { + return nil, err + } + if err := d.Close(); err != nil { + return nil, err + } + return hf, nil +} + +// Close declares that the decoding is complete and resets the Decoder +// to be reused again for a new header block. If there is any remaining +// data in the decoder's buffer, Close returns an error. +func (d *Decoder) Close() error { + if d.saveBuf.Len() > 0 { + d.saveBuf.Reset() + return decodingError{errors.New("truncated headers")} + } + d.readRequiredInsertCount = false + d.readDeltaBase = false + return nil +} + +func (d *Decoder) decode() error { + if !d.readRequiredInsertCount { + requiredInsertCount, rest, err := readVarInt(8, d.buf) + if err != nil { + return err + } + d.readRequiredInsertCount = true + if requiredInsertCount != 0 { + return decodingError{errors.New("expected Required Insert Count to be zero")} + } + d.buf = rest + } + if !d.readDeltaBase { + base, rest, err := readVarInt(7, d.buf) + if err != nil { + return err + } + d.readDeltaBase = true + if base != 0 { + return decodingError{errors.New("expected Base to be zero")} + } + d.buf = rest + } + if len(d.buf) == 0 { + return errNeedMore + } + + for len(d.buf) > 0 { + b := d.buf[0] + var err error + switch { + case b&0x80 > 0: // 1xxxxxxx + err = d.parseIndexedHeaderField() + case b&0xc0 == 0x40: // 01xxxxxx + err = d.parseLiteralHeaderField() + case b&0xe0 == 0x20: // 001xxxxx + err = d.parseLiteralHeaderFieldWithoutNameReference() + default: + err = fmt.Errorf("unexpected type byte: %#x", b) + } + if err != nil { + return err + } + } + return nil +} + +func (d *Decoder) parseIndexedHeaderField() error { + buf := d.buf + if buf[0]&0x40 == 0 { + return errNoDynamicTable + } + index, buf, err := readVarInt(6, buf) + if err != nil { + return err + } + hf, ok := d.at(index) + if !ok { + return decodingError{invalidIndexError(index)} + } + d.emitFunc(hf) + d.buf = buf + return nil +} + +func (d *Decoder) parseLiteralHeaderField() error { + buf := d.buf + if buf[0]&0x10 == 0 { + return errNoDynamicTable + } + // We don't need to check the value of the N-bit here. + // It's only relevant when re-encoding header fields, + // and determines whether the header field can be added to the dynamic table. + // Since we don't support the dynamic table, we can ignore it. + index, buf, err := readVarInt(4, buf) + if err != nil { + return err + } + hf, ok := d.at(index) + if !ok { + return decodingError{invalidIndexError(index)} + } + if len(buf) == 0 { + return errNeedMore + } + usesHuffman := buf[0]&0x80 > 0 + val, buf, err := d.readString(buf, 7, usesHuffman) + if err != nil { + return err + } + hf.Value = val + d.emitFunc(hf) + d.buf = buf + return nil +} + +func (d *Decoder) parseLiteralHeaderFieldWithoutNameReference() error { + buf := d.buf + usesHuffmanForName := buf[0]&0x8 > 0 + name, buf, err := d.readString(buf, 3, usesHuffmanForName) + if err != nil { + return err + } + if len(buf) == 0 { + return errNeedMore + } + usesHuffmanForVal := buf[0]&0x80 > 0 + val, buf, err := d.readString(buf, 7, usesHuffmanForVal) + if err != nil { + return err + } + d.emitFunc(HeaderField{Name: name, Value: val}) + d.buf = buf + return nil +} + +func (d *Decoder) readString(buf []byte, n uint8, usesHuffman bool) (string, []byte, error) { + l, buf, err := readVarInt(n, buf) + if err != nil { + return "", nil, err + } + if uint64(len(buf)) < l { + return "", nil, errNeedMore + } + var val string + if usesHuffman { + var err error + val, err = hpack.HuffmanDecodeToString(buf[:l]) + if err != nil { + return "", nil, err + } + } else { + val = string(buf[:l]) + } + buf = buf[l:] + return val, buf, nil +} + +func (d *Decoder) at(i uint64) (hf HeaderField, ok bool) { + if i >= uint64(len(staticTableEntries)) { + return + } + return staticTableEntries[i], true +} diff --git a/vendor/github.com/quic-go/qpack/encoder.go b/vendor/github.com/quic-go/qpack/encoder.go new file mode 100644 index 0000000..ad69535 --- /dev/null +++ b/vendor/github.com/quic-go/qpack/encoder.go @@ -0,0 +1,95 @@ +package qpack + +import ( + "io" + + "golang.org/x/net/http2/hpack" +) + +// An Encoder performs QPACK encoding. +type Encoder struct { + wrotePrefix bool + + w io.Writer + buf []byte +} + +// NewEncoder returns a new Encoder which performs QPACK encoding. An +// encoded data is written to w. +func NewEncoder(w io.Writer) *Encoder { + return &Encoder{w: w} +} + +// WriteField encodes f into a single Write to e's underlying Writer. +// This function may also produce bytes for the Header Block Prefix +// if necessary. If produced, it is done before encoding f. +func (e *Encoder) WriteField(f HeaderField) error { + // write the Header Block Prefix + if !e.wrotePrefix { + e.buf = appendVarInt(e.buf, 8, 0) + e.buf = appendVarInt(e.buf, 7, 0) + e.wrotePrefix = true + } + + idxAndVals, nameFound := encoderMap[f.Name] + if nameFound { + if idxAndVals.values == nil { + if len(f.Value) == 0 { + e.writeIndexedField(idxAndVals.idx) + } else { + e.writeLiteralFieldWithNameReference(&f, idxAndVals.idx) + } + } else { + valIdx, valueFound := idxAndVals.values[f.Value] + if valueFound { + e.writeIndexedField(valIdx) + } else { + e.writeLiteralFieldWithNameReference(&f, idxAndVals.idx) + } + } + } else { + e.writeLiteralFieldWithoutNameReference(f) + } + + _, err := e.w.Write(e.buf) + e.buf = e.buf[:0] + return err +} + +// Close declares that the encoding is complete and resets the Encoder +// to be reused again for a new header block. +func (e *Encoder) Close() error { + e.wrotePrefix = false + return nil +} + +func (e *Encoder) writeLiteralFieldWithoutNameReference(f HeaderField) { + offset := len(e.buf) + e.buf = appendVarInt(e.buf, 3, hpack.HuffmanEncodeLength(f.Name)) + e.buf[offset] ^= 0x20 ^ 0x8 + e.buf = hpack.AppendHuffmanString(e.buf, f.Name) + offset = len(e.buf) + e.buf = appendVarInt(e.buf, 7, hpack.HuffmanEncodeLength(f.Value)) + e.buf[offset] ^= 0x80 + e.buf = hpack.AppendHuffmanString(e.buf, f.Value) +} + +// Encodes a header field whose name is present in one of the tables. +func (e *Encoder) writeLiteralFieldWithNameReference(f *HeaderField, id uint8) { + offset := len(e.buf) + e.buf = appendVarInt(e.buf, 4, uint64(id)) + // Set the 01NTxxxx pattern, forcing N to 0 and T to 1 + e.buf[offset] ^= 0x50 + offset = len(e.buf) + e.buf = appendVarInt(e.buf, 7, hpack.HuffmanEncodeLength(f.Value)) + e.buf[offset] ^= 0x80 + e.buf = hpack.AppendHuffmanString(e.buf, f.Value) +} + +// Encodes an indexed field, meaning it's entirely defined in one of the tables. +func (e *Encoder) writeIndexedField(id uint8) { + offset := len(e.buf) + e.buf = appendVarInt(e.buf, 6, uint64(id)) + // Set the 1Txxxxxx pattern, forcing T to 1 + e.buf[offset] ^= 0xc0 +} diff --git a/vendor/github.com/quic-go/qpack/header_field.go b/vendor/github.com/quic-go/qpack/header_field.go new file mode 100644 index 0000000..4c043a9 --- /dev/null +++ b/vendor/github.com/quic-go/qpack/header_field.go @@ -0,0 +1,16 @@ +package qpack + +// A HeaderField is a name-value pair. Both the name and value are +// treated as opaque sequences of octets. +type HeaderField struct { + Name string + Value string +} + +// IsPseudo reports whether the header field is an HTTP3 pseudo header. +// That is, it reports whether it starts with a colon. +// It is not otherwise guaranteed to be a valid pseudo header field, +// though. +func (hf HeaderField) IsPseudo() bool { + return len(hf.Name) != 0 && hf.Name[0] == ':' +} diff --git a/vendor/github.com/quic-go/qpack/static_table.go b/vendor/github.com/quic-go/qpack/static_table.go new file mode 100644 index 0000000..73c365e --- /dev/null +++ b/vendor/github.com/quic-go/qpack/static_table.go @@ -0,0 +1,255 @@ +package qpack + +var staticTableEntries = [...]HeaderField{ + {Name: ":authority"}, + {Name: ":path", Value: "/"}, + {Name: "age", Value: "0"}, + {Name: "content-disposition"}, + {Name: "content-length", Value: "0"}, + {Name: "cookie"}, + {Name: "date"}, + {Name: "etag"}, + {Name: "if-modified-since"}, + {Name: "if-none-match"}, + {Name: "last-modified"}, + {Name: "link"}, + {Name: "location"}, + {Name: "referer"}, + {Name: "set-cookie"}, + {Name: ":method", Value: "CONNECT"}, + {Name: ":method", Value: "DELETE"}, + {Name: ":method", Value: "GET"}, + {Name: ":method", Value: "HEAD"}, + {Name: ":method", Value: "OPTIONS"}, + {Name: ":method", Value: "POST"}, + {Name: ":method", Value: "PUT"}, + {Name: ":scheme", Value: "http"}, + {Name: ":scheme", Value: "https"}, + {Name: ":status", Value: "103"}, + {Name: ":status", Value: "200"}, + {Name: ":status", Value: "304"}, + {Name: ":status", Value: "404"}, + {Name: ":status", Value: "503"}, + {Name: "accept", Value: "*/*"}, + {Name: "accept", Value: "application/dns-message"}, + {Name: "accept-encoding", Value: "gzip, deflate, br"}, + {Name: "accept-ranges", Value: "bytes"}, + {Name: "access-control-allow-headers", Value: "cache-control"}, + {Name: "access-control-allow-headers", Value: "content-type"}, + {Name: "access-control-allow-origin", Value: "*"}, + {Name: "cache-control", Value: "max-age=0"}, + {Name: "cache-control", Value: "max-age=2592000"}, + {Name: "cache-control", Value: "max-age=604800"}, + {Name: "cache-control", Value: "no-cache"}, + {Name: "cache-control", Value: "no-store"}, + {Name: "cache-control", Value: "public, max-age=31536000"}, + {Name: "content-encoding", Value: "br"}, + {Name: "content-encoding", Value: "gzip"}, + {Name: "content-type", Value: "application/dns-message"}, + {Name: "content-type", Value: "application/javascript"}, + {Name: "content-type", Value: "application/json"}, + {Name: "content-type", Value: "application/x-www-form-urlencoded"}, + {Name: "content-type", Value: "image/gif"}, + {Name: "content-type", Value: "image/jpeg"}, + {Name: "content-type", Value: "image/png"}, + {Name: "content-type", Value: "text/css"}, + {Name: "content-type", Value: "text/html; charset=utf-8"}, + {Name: "content-type", Value: "text/plain"}, + {Name: "content-type", Value: "text/plain;charset=utf-8"}, + {Name: "range", Value: "bytes=0-"}, + {Name: "strict-transport-security", Value: "max-age=31536000"}, + {Name: "strict-transport-security", Value: "max-age=31536000; includesubdomains"}, + {Name: "strict-transport-security", Value: "max-age=31536000; includesubdomains; preload"}, + {Name: "vary", Value: "accept-encoding"}, + {Name: "vary", Value: "origin"}, + {Name: "x-content-type-options", Value: "nosniff"}, + {Name: "x-xss-protection", Value: "1; mode=block"}, + {Name: ":status", Value: "100"}, + {Name: ":status", Value: "204"}, + {Name: ":status", Value: "206"}, + {Name: ":status", Value: "302"}, + {Name: ":status", Value: "400"}, + {Name: ":status", Value: "403"}, + {Name: ":status", Value: "421"}, + {Name: ":status", Value: "425"}, + {Name: ":status", Value: "500"}, + {Name: "accept-language"}, + {Name: "access-control-allow-credentials", Value: "FALSE"}, + {Name: "access-control-allow-credentials", Value: "TRUE"}, + {Name: "access-control-allow-headers", Value: "*"}, + {Name: "access-control-allow-methods", Value: "get"}, + {Name: "access-control-allow-methods", Value: "get, post, options"}, + {Name: "access-control-allow-methods", Value: "options"}, + {Name: "access-control-expose-headers", Value: "content-length"}, + {Name: "access-control-request-headers", Value: "content-type"}, + {Name: "access-control-request-method", Value: "get"}, + {Name: "access-control-request-method", Value: "post"}, + {Name: "alt-svc", Value: "clear"}, + {Name: "authorization"}, + {Name: "content-security-policy", Value: "script-src 'none'; object-src 'none'; base-uri 'none'"}, + {Name: "early-data", Value: "1"}, + {Name: "expect-ct"}, + {Name: "forwarded"}, + {Name: "if-range"}, + {Name: "origin"}, + {Name: "purpose", Value: "prefetch"}, + {Name: "server"}, + {Name: "timing-allow-origin", Value: "*"}, + {Name: "upgrade-insecure-requests", Value: "1"}, + {Name: "user-agent"}, + {Name: "x-forwarded-for"}, + {Name: "x-frame-options", Value: "deny"}, + {Name: "x-frame-options", Value: "sameorigin"}, +} + +// Only needed for tests. +// use go:linkname to retrieve the static table. +// +//nolint:deadcode,unused +func getStaticTable() []HeaderField { + return staticTableEntries[:] +} + +type indexAndValues struct { + idx uint8 + values map[string]uint8 +} + +// A map of the header names from the static table to their index in the table. +// This is used by the encoder to quickly find if a header is in the static table +// and what value should be used to encode it. +// There's a second level of mapping for the headers that have some predefined +// values in the static table. +var encoderMap = map[string]indexAndValues{ + ":authority": {0, nil}, + ":path": {1, map[string]uint8{"/": 1}}, + "age": {2, map[string]uint8{"0": 2}}, + "content-disposition": {3, nil}, + "content-length": {4, map[string]uint8{"0": 4}}, + "cookie": {5, nil}, + "date": {6, nil}, + "etag": {7, nil}, + "if-modified-since": {8, nil}, + "if-none-match": {9, nil}, + "last-modified": {10, nil}, + "link": {11, nil}, + "location": {12, nil}, + "referer": {13, nil}, + "set-cookie": {14, nil}, + ":method": {15, map[string]uint8{ + "CONNECT": 15, + "DELETE": 16, + "GET": 17, + "HEAD": 18, + "OPTIONS": 19, + "POST": 20, + "PUT": 21, + }}, + ":scheme": {22, map[string]uint8{ + "http": 22, + "https": 23, + }}, + ":status": {24, map[string]uint8{ + "103": 24, + "200": 25, + "304": 26, + "404": 27, + "503": 28, + "100": 63, + "204": 64, + "206": 65, + "302": 66, + "400": 67, + "403": 68, + "421": 69, + "425": 70, + "500": 71, + }}, + "accept": {29, map[string]uint8{ + "*/*": 29, + "application/dns-message": 30, + }}, + "accept-encoding": {31, map[string]uint8{"gzip, deflate, br": 31}}, + "accept-ranges": {32, map[string]uint8{"bytes": 32}}, + "access-control-allow-headers": {33, map[string]uint8{ + "cache-control": 33, + "content-type": 34, + "*": 75, + }}, + "access-control-allow-origin": {35, map[string]uint8{"*": 35}}, + "cache-control": {36, map[string]uint8{ + "max-age=0": 36, + "max-age=2592000": 37, + "max-age=604800": 38, + "no-cache": 39, + "no-store": 40, + "public, max-age=31536000": 41, + }}, + "content-encoding": {42, map[string]uint8{ + "br": 42, + "gzip": 43, + }}, + "content-type": {44, map[string]uint8{ + "application/dns-message": 44, + "application/javascript": 45, + "application/json": 46, + "application/x-www-form-urlencoded": 47, + "image/gif": 48, + "image/jpeg": 49, + "image/png": 50, + "text/css": 51, + "text/html; charset=utf-8": 52, + "text/plain": 53, + "text/plain;charset=utf-8": 54, + }}, + "range": {55, map[string]uint8{"bytes=0-": 55}}, + "strict-transport-security": {56, map[string]uint8{ + "max-age=31536000": 56, + "max-age=31536000; includesubdomains": 57, + "max-age=31536000; includesubdomains; preload": 58, + }}, + "vary": {59, map[string]uint8{ + "accept-encoding": 59, + "origin": 60, + }}, + "x-content-type-options": {61, map[string]uint8{"nosniff": 61}}, + "x-xss-protection": {62, map[string]uint8{"1; mode=block": 62}}, + // ":status" is duplicated and takes index 63 to 71 + "accept-language": {72, nil}, + "access-control-allow-credentials": {73, map[string]uint8{ + "FALSE": 73, + "TRUE": 74, + }}, + // "access-control-allow-headers" is duplicated and takes index 75 + "access-control-allow-methods": {76, map[string]uint8{ + "get": 76, + "get, post, options": 77, + "options": 78, + }}, + "access-control-expose-headers": {79, map[string]uint8{"content-length": 79}}, + "access-control-request-headers": {80, map[string]uint8{"content-type": 80}}, + "access-control-request-method": {81, map[string]uint8{ + "get": 81, + "post": 82, + }}, + "alt-svc": {83, map[string]uint8{"clear": 83}}, + "authorization": {84, nil}, + "content-security-policy": {85, map[string]uint8{ + "script-src 'none'; object-src 'none'; base-uri 'none'": 85, + }}, + "early-data": {86, map[string]uint8{"1": 86}}, + "expect-ct": {87, nil}, + "forwarded": {88, nil}, + "if-range": {89, nil}, + "origin": {90, nil}, + "purpose": {91, map[string]uint8{"prefetch": 91}}, + "server": {92, nil}, + "timing-allow-origin": {93, map[string]uint8{"*": 93}}, + "upgrade-insecure-requests": {94, map[string]uint8{"1": 94}}, + "user-agent": {95, nil}, + "x-forwarded-for": {96, nil}, + "x-frame-options": {97, map[string]uint8{ + "deny": 97, + "sameorigin": 98, + }}, +} diff --git a/vendor/github.com/quic-go/qpack/varint.go b/vendor/github.com/quic-go/qpack/varint.go new file mode 100644 index 0000000..28d7112 --- /dev/null +++ b/vendor/github.com/quic-go/qpack/varint.go @@ -0,0 +1,66 @@ +package qpack + +// copied from the Go standard library HPACK implementation + +import "errors" + +var errVarintOverflow = errors.New("varint integer overflow") + +// appendVarInt appends i, as encoded in variable integer form using n +// bit prefix, to dst and returns the extended buffer. +// +// See +// http://http2.github.io/http2-spec/compression.html#integer.representation +func appendVarInt(dst []byte, n byte, i uint64) []byte { + k := uint64((1 << n) - 1) + if i < k { + return append(dst, byte(i)) + } + dst = append(dst, byte(k)) + i -= k + for ; i >= 128; i >>= 7 { + dst = append(dst, byte(0x80|(i&0x7f))) + } + return append(dst, byte(i)) +} + +// readVarInt reads an unsigned variable length integer off the +// beginning of p. n is the parameter as described in +// http://http2.github.io/http2-spec/compression.html#rfc.section.5.1. +// +// n must always be between 1 and 8. +// +// The returned remain buffer is either a smaller suffix of p, or err != nil. +// The error is errNeedMore if p doesn't contain a complete integer. +func readVarInt(n byte, p []byte) (i uint64, remain []byte, err error) { + if n < 1 || n > 8 { + panic("bad n") + } + if len(p) == 0 { + return 0, p, errNeedMore + } + i = uint64(p[0]) + if n < 8 { + i &= (1 << uint64(n)) - 1 + } + if i < (1< 0 { + b := p[0] + p = p[1:] + i += uint64(b&127) << m + if b&128 == 0 { + return i, p, nil + } + m += 7 + if m >= 63 { // TODO: proper overflow check. making this up. + return 0, origP, errVarintOverflow + } + } + return 0, origP, errNeedMore +} diff --git a/vendor/github.com/quic-go/quic-go/.gitignore b/vendor/github.com/quic-go/quic-go/.gitignore new file mode 100644 index 0000000..b454729 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/.gitignore @@ -0,0 +1,18 @@ +debug +debug.test +main +mockgen_tmp.go +*.qtr +*.qlog +*.sqlog +*.txt +race.[0-9]* + +fuzzing/*/*.zip +fuzzing/*/coverprofile +fuzzing/*/crashers +fuzzing/*/sonarprofile +fuzzing/*/suppressions +fuzzing/*/corpus/ + +gomock_reflect_*/ diff --git a/vendor/github.com/quic-go/quic-go/.golangci.yml b/vendor/github.com/quic-go/quic-go/.golangci.yml new file mode 100644 index 0000000..4a97047 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/.golangci.yml @@ -0,0 +1,107 @@ +version: "2" +linters: + default: none + enable: + - asciicheck + - copyloopvar + - depguard + - exhaustive + - govet + - ineffassign + - misspell + - nolintlint + - prealloc + - staticcheck + - unconvert + - unparam + - unused + - usetesting + settings: + depguard: + rules: + random: + deny: + - pkg: "math/rand$" + desc: use math/rand/v2 + - pkg: "golang.org/x/exp/rand" + desc: use math/rand/v2 + quicvarint: + list-mode: strict + files: + - '**/github.com/quic-go/quic-go/quicvarint/*' + - '!$test' + allow: + - $gostd + rsa: + list-mode: original + deny: + - pkg: crypto/rsa + desc: "use crypto/ed25519 instead" + ginkgo: + list-mode: original + deny: + - pkg: github.com/onsi/ginkgo + desc: "use standard Go tests" + - pkg: github.com/onsi/ginkgo/v2 + desc: "use standard Go tests" + - pkg: github.com/onsi/gomega + desc: "use standard Go tests" + http3-internal: + list-mode: lax + files: + - '**/http3/**' + deny: + - pkg: 'github.com/quic-go/quic-go/internal' + desc: 'no dependency on quic-go/internal' + misspell: + ignore-rules: + - ect + # see https://github.com/ldez/usetesting/issues/10 + usetesting: + context-background: false + context-todo: false + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + rules: + - linters: + - depguard + path: internal/qtls + - linters: + - exhaustive + - prealloc + - unparam + path: _test\.go + - linters: + - staticcheck + path: _test\.go + text: 'SA1029:' # inappropriate key in call to context.WithValue + # WebTransport still relies on the ConnectionTracingID and ConnectionTracingKey. + # See https://github.com/quic-go/quic-go/issues/4405 for more details. + - linters: + - staticcheck + paths: + - http3/ + - integrationtests/self/http_test.go + text: 'SA1019:.+quic\.ConnectionTracing(ID|Key)' + paths: + - internal/handshake/cipher_suite.go + - third_party$ + - builtin$ + - examples$ +formatters: + enable: + - gofmt + - gofumpt + - goimports + exclusions: + generated: lax + paths: + - internal/handshake/cipher_suite.go + - third_party$ + - builtin$ + - examples$ diff --git a/vendor/github.com/quic-go/quic-go/LICENSE b/vendor/github.com/quic-go/quic-go/LICENSE new file mode 100644 index 0000000..51378be --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 the quic-go authors & Google, Inc. + +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/quic-go/quic-go/README.md b/vendor/github.com/quic-go/quic-go/README.md new file mode 100644 index 0000000..246c330 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/README.md @@ -0,0 +1,53 @@ +# A QUIC implementation in pure Go + + + +[![Documentation](https://img.shields.io/badge/docs-quic--go.net-red?style=flat)](https://quic-go.net/docs/) +[![PkgGoDev](https://pkg.go.dev/badge/github.com/quic-go/quic-go)](https://pkg.go.dev/github.com/quic-go/quic-go) +[![Code Coverage](https://img.shields.io/codecov/c/github/quic-go/quic-go/master.svg?style=flat-square)](https://codecov.io/gh/quic-go/quic-go/) +[![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/quic-go.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:quic-go) + +quic-go is an implementation of the QUIC protocol ([RFC 9000](https://datatracker.ietf.org/doc/html/rfc9000), [RFC 9001](https://datatracker.ietf.org/doc/html/rfc9001), [RFC 9002](https://datatracker.ietf.org/doc/html/rfc9002)) in Go. It has support for HTTP/3 ([RFC 9114](https://datatracker.ietf.org/doc/html/rfc9114)), including QPACK ([RFC 9204](https://datatracker.ietf.org/doc/html/rfc9204)) and HTTP Datagrams ([RFC 9297](https://datatracker.ietf.org/doc/html/rfc9297)). + +In addition to these base RFCs, it also implements the following RFCs: + +* Unreliable Datagram Extension ([RFC 9221](https://datatracker.ietf.org/doc/html/rfc9221)) +* Datagram Packetization Layer Path MTU Discovery (DPLPMTUD, [RFC 8899](https://datatracker.ietf.org/doc/html/rfc8899)) +* QUIC Version 2 ([RFC 9369](https://datatracker.ietf.org/doc/html/rfc9369)) +* QUIC Event Logging using qlog ([draft-ietf-quic-qlog-main-schema](https://datatracker.ietf.org/doc/draft-ietf-quic-qlog-main-schema/) and [draft-ietf-quic-qlog-quic-events](https://datatracker.ietf.org/doc/draft-ietf-quic-qlog-quic-events/)) +* QUIC Stream Resets with Partial Delivery ([draft-ietf-quic-reliable-stream-reset](https://datatracker.ietf.org/doc/html/draft-ietf-quic-reliable-stream-reset-07)) + +Support for WebTransport over HTTP/3 ([draft-ietf-webtrans-http3](https://datatracker.ietf.org/doc/draft-ietf-webtrans-http3/)) is implemented in [webtransport-go](https://github.com/quic-go/webtransport-go). + +Detailed documentation can be found on [quic-go.net](https://quic-go.net/docs/). + +## Projects using quic-go + +| Project | Description | Stars | +| ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | +| [AdGuardHome](https://github.com/AdguardTeam/AdGuardHome) | Free and open source, powerful network-wide ads & trackers blocking DNS server. | ![GitHub Repo stars](https://img.shields.io/github/stars/AdguardTeam/AdGuardHome?style=flat-square) | +| [algernon](https://github.com/xyproto/algernon) | Small self-contained pure-Go web server with Lua, Markdown, HTTP/2, QUIC, Redis and PostgreSQL support | ![GitHub Repo stars](https://img.shields.io/github/stars/xyproto/algernon?style=flat-square) | +| [caddy](https://github.com/caddyserver/caddy/) | Fast, multi-platform web server with automatic HTTPS | ![GitHub Repo stars](https://img.shields.io/github/stars/caddyserver/caddy?style=flat-square) | +| [cloudflared](https://github.com/cloudflare/cloudflared) | A tunneling daemon that proxies traffic from the Cloudflare network to your origins | ![GitHub Repo stars](https://img.shields.io/github/stars/cloudflare/cloudflared?style=flat-square) | +| [frp](https://github.com/fatedier/frp) | A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet | ![GitHub Repo stars](https://img.shields.io/github/stars/fatedier/frp?style=flat-square) | +| [go-libp2p](https://github.com/libp2p/go-libp2p) | libp2p implementation in Go, powering [Kubo](https://github.com/ipfs/kubo) (IPFS) and [Lotus](https://github.com/filecoin-project/lotus) (Filecoin), among others | ![GitHub Repo stars](https://img.shields.io/github/stars/libp2p/go-libp2p?style=flat-square) | +| [gost](https://github.com/go-gost/gost) | A simple security tunnel written in Go | ![GitHub Repo stars](https://img.shields.io/github/stars/go-gost/gost?style=flat-square) | +| [Hysteria](https://github.com/apernet/hysteria) | A powerful, lightning fast and censorship resistant proxy | ![GitHub Repo stars](https://img.shields.io/github/stars/apernet/hysteria?style=flat-square) | +| [Mercure](https://github.com/dunglas/mercure) | An open, easy, fast, reliable and battery-efficient solution for real-time communications | ![GitHub Repo stars](https://img.shields.io/github/stars/dunglas/mercure?style=flat-square) | +| [OONI Probe](https://github.com/ooni/probe-cli) | Next generation OONI Probe. Library and CLI tool. | ![GitHub Repo stars](https://img.shields.io/github/stars/ooni/probe-cli?style=flat-square) | +| [reverst](https://github.com/flipt-io/reverst) | Reverse Tunnels in Go over HTTP/3 and QUIC | ![GitHub Repo stars](https://img.shields.io/github/stars/flipt-io/reverst?style=flat-square) | +| [RoadRunner](https://github.com/roadrunner-server/roadrunner) | High-performance PHP application server, process manager written in Go and powered with plugins | ![GitHub Repo stars](https://img.shields.io/github/stars/roadrunner-server/roadrunner?style=flat-square) | +| [syncthing](https://github.com/syncthing/syncthing/) | Open Source Continuous File Synchronization | ![GitHub Repo stars](https://img.shields.io/github/stars/syncthing/syncthing?style=flat-square) | +| [traefik](https://github.com/traefik/traefik) | The Cloud Native Application Proxy | ![GitHub Repo stars](https://img.shields.io/github/stars/traefik/traefik?style=flat-square) | +| [v2ray-core](https://github.com/v2fly/v2ray-core) | A platform for building proxies to bypass network restrictions | ![GitHub Repo stars](https://img.shields.io/github/stars/v2fly/v2ray-core?style=flat-square) | +| [YoMo](https://github.com/yomorun/yomo) | Streaming Serverless Framework for Geo-distributed System | ![GitHub Repo stars](https://img.shields.io/github/stars/yomorun/yomo?style=flat-square) | + +If you'd like to see your project added to this list, please send us a PR. + +## Release Policy + +quic-go always aims to support the latest two Go releases. + +## Contributing + +We are always happy to welcome new contributors! We have a number of self-contained issues that are suitable for first-time contributors, they are tagged with [help wanted](https://github.com/quic-go/quic-go/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22). If you have any questions, please feel free to reach out by opening an issue or leaving a comment. diff --git a/vendor/github.com/quic-go/quic-go/SECURITY.md b/vendor/github.com/quic-go/quic-go/SECURITY.md new file mode 100644 index 0000000..c24c08f --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/SECURITY.md @@ -0,0 +1,19 @@ +# Security Policy + +quic-go still in development. This means that there may be problems in our protocols, +or there may be mistakes in our implementations. +We take security vulnerabilities very seriously. If you discover a security issue, +please bring it to our attention right away! + +## Reporting a Vulnerability + +If you find a vulnerability that may affect live deployments -- for example, by exposing +a remote execution exploit -- please [**report privately**](https://github.com/quic-go/quic-go/security/advisories/new). +Please **DO NOT file a public issue**. + +If the issue is an implementation weakness that cannot be immediately exploited or +something not yet deployed, just discuss it openly. + +## Reporting a non security bug + +For non-security bugs, please simply file a GitHub [issue](https://github.com/quic-go/quic-go/issues/new). diff --git a/vendor/github.com/quic-go/quic-go/buffer_pool.go b/vendor/github.com/quic-go/quic-go/buffer_pool.go new file mode 100644 index 0000000..48589e1 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/buffer_pool.go @@ -0,0 +1,92 @@ +package quic + +import ( + "sync" + + "github.com/quic-go/quic-go/internal/protocol" +) + +type packetBuffer struct { + Data []byte + + // refCount counts how many packets Data is used in. + // It doesn't support concurrent use. + // It is > 1 when used for coalesced packet. + refCount int +} + +// Split increases the refCount. +// It must be called when a packet buffer is used for more than one packet, +// e.g. when splitting coalesced packets. +func (b *packetBuffer) Split() { + b.refCount++ +} + +// Decrement decrements the reference counter. +// It doesn't put the buffer back into the pool. +func (b *packetBuffer) Decrement() { + b.refCount-- + if b.refCount < 0 { + panic("negative packetBuffer refCount") + } +} + +// MaybeRelease puts the packet buffer back into the pool, +// if the reference counter already reached 0. +func (b *packetBuffer) MaybeRelease() { + // only put the packetBuffer back if it's not used any more + if b.refCount == 0 { + b.putBack() + } +} + +// Release puts back the packet buffer into the pool. +// It should be called when processing is definitely finished. +func (b *packetBuffer) Release() { + b.Decrement() + if b.refCount != 0 { + panic("packetBuffer refCount not zero") + } + b.putBack() +} + +// Len returns the length of Data +func (b *packetBuffer) Len() protocol.ByteCount { return protocol.ByteCount(len(b.Data)) } +func (b *packetBuffer) Cap() protocol.ByteCount { return protocol.ByteCount(cap(b.Data)) } + +func (b *packetBuffer) putBack() { + if cap(b.Data) == protocol.MaxPacketBufferSize { + bufferPool.Put(b) + return + } + if cap(b.Data) == protocol.MaxLargePacketBufferSize { + largeBufferPool.Put(b) + return + } + panic("putPacketBuffer called with packet of wrong size!") +} + +var bufferPool, largeBufferPool sync.Pool + +func getPacketBuffer() *packetBuffer { + buf := bufferPool.Get().(*packetBuffer) + buf.refCount = 1 + buf.Data = buf.Data[:0] + return buf +} + +func getLargePacketBuffer() *packetBuffer { + buf := largeBufferPool.Get().(*packetBuffer) + buf.refCount = 1 + buf.Data = buf.Data[:0] + return buf +} + +func init() { + bufferPool.New = func() any { + return &packetBuffer{Data: make([]byte, 0, protocol.MaxPacketBufferSize)} + } + largeBufferPool.New = func() any { + return &packetBuffer{Data: make([]byte, 0, protocol.MaxLargePacketBufferSize)} + } +} diff --git a/vendor/github.com/quic-go/quic-go/client.go b/vendor/github.com/quic-go/quic-go/client.go new file mode 100644 index 0000000..63132f2 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/client.go @@ -0,0 +1,109 @@ +package quic + +import ( + "context" + "crypto/tls" + "errors" + "net" + + "github.com/quic-go/quic-go/internal/protocol" +) + +// make it possible to mock connection ID for initial generation in the tests +var generateConnectionIDForInitial = protocol.GenerateConnectionIDForInitial + +// DialAddr establishes a new QUIC connection to a server. +// It resolves the address, and then creates a new UDP connection to dial the QUIC server. +// When the QUIC connection is closed, this UDP connection is closed. +// See [Dial] for more details. +func DialAddr(ctx context.Context, addr string, tlsConf *tls.Config, conf *Config) (*Conn, error) { + udpConn, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4zero, Port: 0}) + if err != nil { + return nil, err + } + udpAddr, err := net.ResolveUDPAddr("udp", addr) + if err != nil { + return nil, err + } + tr, err := setupTransport(udpConn, tlsConf, true) + if err != nil { + return nil, err + } + conn, err := tr.dial(ctx, udpAddr, addr, tlsConf, conf, false) + if err != nil { + tr.Close() + return nil, err + } + return conn, nil +} + +// DialAddrEarly establishes a new 0-RTT QUIC connection to a server. +// See [DialAddr] for more details. +func DialAddrEarly(ctx context.Context, addr string, tlsConf *tls.Config, conf *Config) (*Conn, error) { + udpConn, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4zero, Port: 0}) + if err != nil { + return nil, err + } + udpAddr, err := net.ResolveUDPAddr("udp", addr) + if err != nil { + return nil, err + } + tr, err := setupTransport(udpConn, tlsConf, true) + if err != nil { + return nil, err + } + conn, err := tr.dial(ctx, udpAddr, addr, tlsConf, conf, true) + if err != nil { + tr.Close() + return nil, err + } + return conn, nil +} + +// DialEarly establishes a new 0-RTT QUIC connection to a server using a net.PacketConn. +// See [Dial] for more details. +func DialEarly(ctx context.Context, c net.PacketConn, addr net.Addr, tlsConf *tls.Config, conf *Config) (*Conn, error) { + dl, err := setupTransport(c, tlsConf, false) + if err != nil { + return nil, err + } + conn, err := dl.DialEarly(ctx, addr, tlsConf, conf) + if err != nil { + dl.Close() + return nil, err + } + return conn, nil +} + +// Dial establishes a new QUIC connection to a server using a net.PacketConn. +// If the PacketConn satisfies the [OOBCapablePacketConn] interface (as a [net.UDPConn] does), +// ECN and packet info support will be enabled. In this case, ReadMsgUDP and WriteMsgUDP +// will be used instead of ReadFrom and WriteTo to read/write packets. +// The [tls.Config] must define an application protocol (using tls.Config.NextProtos). +// +// This is a convenience function. More advanced use cases should instantiate a [Transport], +// which offers configuration options for a more fine-grained control of the connection establishment, +// including reusing the underlying UDP socket for multiple QUIC connections. +func Dial(ctx context.Context, c net.PacketConn, addr net.Addr, tlsConf *tls.Config, conf *Config) (*Conn, error) { + dl, err := setupTransport(c, tlsConf, false) + if err != nil { + return nil, err + } + conn, err := dl.Dial(ctx, addr, tlsConf, conf) + if err != nil { + dl.Close() + return nil, err + } + return conn, nil +} + +func setupTransport(c net.PacketConn, tlsConf *tls.Config, createdPacketConn bool) (*Transport, error) { + if tlsConf == nil { + return nil, errors.New("quic: tls.Config not set") + } + return &Transport{ + Conn: c, + createdConn: createdPacketConn, + isSingleUse: true, + }, nil +} diff --git a/vendor/github.com/quic-go/quic-go/closed_conn.go b/vendor/github.com/quic-go/quic-go/closed_conn.go new file mode 100644 index 0000000..6486ea6 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/closed_conn.go @@ -0,0 +1,58 @@ +package quic + +import ( + "math/bits" + "net" + "sync/atomic" + + "github.com/quic-go/quic-go/internal/utils" +) + +// A closedLocalConn is a connection that we closed locally. +// When receiving packets for such a connection, we need to retransmit the packet containing the CONNECTION_CLOSE frame, +// with an exponential backoff. +type closedLocalConn struct { + counter atomic.Uint32 + logger utils.Logger + + sendPacket func(net.Addr, packetInfo) +} + +var _ packetHandler = &closedLocalConn{} + +// newClosedLocalConn creates a new closedLocalConn and runs it. +func newClosedLocalConn(sendPacket func(net.Addr, packetInfo), logger utils.Logger) packetHandler { + return &closedLocalConn{ + sendPacket: sendPacket, + logger: logger, + } +} + +func (c *closedLocalConn) handlePacket(p receivedPacket) { + n := c.counter.Add(1) + // exponential backoff + // only send a CONNECTION_CLOSE for the 1st, 2nd, 4th, 8th, 16th, ... packet arriving + if bits.OnesCount32(n) != 1 { + return + } + c.logger.Debugf("Received %d packets after sending CONNECTION_CLOSE. Retransmitting.", n) + c.sendPacket(p.remoteAddr, p.info) +} + +func (c *closedLocalConn) destroy(error) {} +func (c *closedLocalConn) closeWithTransportError(TransportErrorCode) {} + +// A closedRemoteConn is a connection that was closed remotely. +// For such a connection, we might receive reordered packets that were sent before the CONNECTION_CLOSE. +// We can just ignore those packets. +type closedRemoteConn struct{} + +var _ packetHandler = &closedRemoteConn{} + +func newClosedRemoteConn() packetHandler { + return &closedRemoteConn{} +} + +func (c *closedRemoteConn) handlePacket(receivedPacket) {} +func (c *closedRemoteConn) destroy(error) {} +func (c *closedRemoteConn) closeWithTransportError(TransportErrorCode) {} diff --git a/vendor/github.com/quic-go/quic-go/codecov.yml b/vendor/github.com/quic-go/quic-go/codecov.yml new file mode 100644 index 0000000..86ee596 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/codecov.yml @@ -0,0 +1,20 @@ +coverage: + round: nearest + ignore: + - http3/gzip_reader.go + - example/ + - interop/ + - internal/handshake/cipher_suite.go + - internal/mocks/ + - internal/utils/linkedlist/linkedlist.go + - internal/testdata + - logging/connection_tracer_multiplexer.go + - logging/tracer_multiplexer.go + - testutils/ + - fuzzing/ + - metrics/ + status: + project: + default: + threshold: 0.5 + patch: false diff --git a/vendor/github.com/quic-go/quic-go/config.go b/vendor/github.com/quic-go/quic-go/config.go new file mode 100644 index 0000000..74c2054 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/config.go @@ -0,0 +1,129 @@ +package quic + +import ( + "fmt" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +// Clone clones a Config. +func (c *Config) Clone() *Config { + copy := *c + return © +} + +func (c *Config) handshakeTimeout() time.Duration { + return 2 * c.HandshakeIdleTimeout +} + +func (c *Config) maxRetryTokenAge() time.Duration { + return c.handshakeTimeout() +} + +func validateConfig(config *Config) error { + if config == nil { + return nil + } + const maxStreams = 1 << 60 + if config.MaxIncomingStreams > maxStreams { + config.MaxIncomingStreams = maxStreams + } + if config.MaxIncomingUniStreams > maxStreams { + config.MaxIncomingUniStreams = maxStreams + } + if config.MaxStreamReceiveWindow > quicvarint.Max { + config.MaxStreamReceiveWindow = quicvarint.Max + } + if config.MaxConnectionReceiveWindow > quicvarint.Max { + config.MaxConnectionReceiveWindow = quicvarint.Max + } + if config.InitialPacketSize > 0 && config.InitialPacketSize < protocol.MinInitialPacketSize { + config.InitialPacketSize = protocol.MinInitialPacketSize + } + if config.InitialPacketSize > protocol.MaxPacketBufferSize { + config.InitialPacketSize = protocol.MaxPacketBufferSize + } + // check that all QUIC versions are actually supported + for _, v := range config.Versions { + if !protocol.IsValidVersion(v) { + return fmt.Errorf("invalid QUIC version: %s", v) + } + } + return nil +} + +// populateConfig populates fields in the quic.Config with their default values, if none are set +// it may be called with nil +func populateConfig(config *Config) *Config { + if config == nil { + config = &Config{} + } + versions := config.Versions + if len(versions) == 0 { + versions = protocol.SupportedVersions + } + handshakeIdleTimeout := protocol.DefaultHandshakeIdleTimeout + if config.HandshakeIdleTimeout != 0 { + handshakeIdleTimeout = config.HandshakeIdleTimeout + } + idleTimeout := protocol.DefaultIdleTimeout + if config.MaxIdleTimeout != 0 { + idleTimeout = config.MaxIdleTimeout + } + initialStreamReceiveWindow := config.InitialStreamReceiveWindow + if initialStreamReceiveWindow == 0 { + initialStreamReceiveWindow = protocol.DefaultInitialMaxStreamData + } + maxStreamReceiveWindow := config.MaxStreamReceiveWindow + if maxStreamReceiveWindow == 0 { + maxStreamReceiveWindow = protocol.DefaultMaxReceiveStreamFlowControlWindow + } + initialConnectionReceiveWindow := config.InitialConnectionReceiveWindow + if initialConnectionReceiveWindow == 0 { + initialConnectionReceiveWindow = protocol.DefaultInitialMaxData + } + maxConnectionReceiveWindow := config.MaxConnectionReceiveWindow + if maxConnectionReceiveWindow == 0 { + maxConnectionReceiveWindow = protocol.DefaultMaxReceiveConnectionFlowControlWindow + } + maxIncomingStreams := config.MaxIncomingStreams + if maxIncomingStreams == 0 { + maxIncomingStreams = protocol.DefaultMaxIncomingStreams + } else if maxIncomingStreams < 0 { + maxIncomingStreams = 0 + } + maxIncomingUniStreams := config.MaxIncomingUniStreams + if maxIncomingUniStreams == 0 { + maxIncomingUniStreams = protocol.DefaultMaxIncomingUniStreams + } else if maxIncomingUniStreams < 0 { + maxIncomingUniStreams = 0 + } + initialPacketSize := config.InitialPacketSize + if initialPacketSize == 0 { + initialPacketSize = protocol.InitialPacketSize + } + + return &Config{ + GetConfigForClient: config.GetConfigForClient, + Versions: versions, + HandshakeIdleTimeout: handshakeIdleTimeout, + MaxIdleTimeout: idleTimeout, + KeepAlivePeriod: config.KeepAlivePeriod, + InitialStreamReceiveWindow: initialStreamReceiveWindow, + MaxStreamReceiveWindow: maxStreamReceiveWindow, + InitialConnectionReceiveWindow: initialConnectionReceiveWindow, + MaxConnectionReceiveWindow: maxConnectionReceiveWindow, + AllowConnectionWindowIncrease: config.AllowConnectionWindowIncrease, + MaxIncomingStreams: maxIncomingStreams, + MaxIncomingUniStreams: maxIncomingUniStreams, + TokenStore: config.TokenStore, + EnableDatagrams: config.EnableDatagrams, + InitialPacketSize: initialPacketSize, + DisablePathMTUDiscovery: config.DisablePathMTUDiscovery, + EnableStreamResetPartialDelivery: config.EnableStreamResetPartialDelivery, + Allow0RTT: config.Allow0RTT, + Tracer: config.Tracer, + } +} diff --git a/vendor/github.com/quic-go/quic-go/conn_id_generator.go b/vendor/github.com/quic-go/quic-go/conn_id_generator.go new file mode 100644 index 0000000..f1a0c92 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/conn_id_generator.go @@ -0,0 +1,218 @@ +package quic + +import ( + "fmt" + "slices" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/wire" +) + +type connRunnerCallbacks struct { + AddConnectionID func(protocol.ConnectionID) + RemoveConnectionID func(protocol.ConnectionID) + ReplaceWithClosed func([]protocol.ConnectionID, []byte, time.Duration) +} + +// The memory address of the Transport is used as the key. +type connRunners map[connRunner]connRunnerCallbacks + +func (cr connRunners) AddConnectionID(id protocol.ConnectionID) { + for _, c := range cr { + c.AddConnectionID(id) + } +} + +func (cr connRunners) RemoveConnectionID(id protocol.ConnectionID) { + for _, c := range cr { + c.RemoveConnectionID(id) + } +} + +func (cr connRunners) ReplaceWithClosed(ids []protocol.ConnectionID, b []byte, expiry time.Duration) { + for _, c := range cr { + c.ReplaceWithClosed(ids, b, expiry) + } +} + +type connIDToRetire struct { + t time.Time + connID protocol.ConnectionID +} + +type connIDGenerator struct { + generator ConnectionIDGenerator + highestSeq uint64 + connRunners connRunners + + activeSrcConnIDs map[uint64]protocol.ConnectionID + connIDsToRetire []connIDToRetire // sorted by t + initialClientDestConnID *protocol.ConnectionID // nil for the client + + statelessResetter *statelessResetter + + queueControlFrame func(wire.Frame) +} + +func newConnIDGenerator( + runner connRunner, + initialConnectionID protocol.ConnectionID, + initialClientDestConnID *protocol.ConnectionID, // nil for the client + statelessResetter *statelessResetter, + callbacks connRunnerCallbacks, + queueControlFrame func(wire.Frame), + generator ConnectionIDGenerator, +) *connIDGenerator { + m := &connIDGenerator{ + generator: generator, + activeSrcConnIDs: make(map[uint64]protocol.ConnectionID), + statelessResetter: statelessResetter, + connRunners: map[connRunner]connRunnerCallbacks{runner: callbacks}, + queueControlFrame: queueControlFrame, + } + m.activeSrcConnIDs[0] = initialConnectionID + m.initialClientDestConnID = initialClientDestConnID + return m +} + +func (m *connIDGenerator) SetMaxActiveConnIDs(limit uint64) error { + if m.generator.ConnectionIDLen() == 0 { + return nil + } + // The active_connection_id_limit transport parameter is the number of + // connection IDs the peer will store. This limit includes the connection ID + // used during the handshake, and the one sent in the preferred_address + // transport parameter. + // We currently don't send the preferred_address transport parameter, + // so we can issue (limit - 1) connection IDs. + for i := uint64(len(m.activeSrcConnIDs)); i < min(limit, protocol.MaxIssuedConnectionIDs); i++ { + if err := m.issueNewConnID(); err != nil { + return err + } + } + return nil +} + +func (m *connIDGenerator) Retire(seq uint64, sentWithDestConnID protocol.ConnectionID, expiry time.Time) error { + if seq > m.highestSeq { + return &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: fmt.Sprintf("retired connection ID %d (highest issued: %d)", seq, m.highestSeq), + } + } + connID, ok := m.activeSrcConnIDs[seq] + // We might already have deleted this connection ID, if this is a duplicate frame. + if !ok { + return nil + } + if connID == sentWithDestConnID { + return &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: fmt.Sprintf("retired connection ID %d (%s), which was used as the Destination Connection ID on this packet", seq, connID), + } + } + m.queueConnIDForRetiring(connID, expiry) + + delete(m.activeSrcConnIDs, seq) + // Don't issue a replacement for the initial connection ID. + if seq == 0 { + return nil + } + return m.issueNewConnID() +} + +func (m *connIDGenerator) queueConnIDForRetiring(connID protocol.ConnectionID, expiry time.Time) { + idx := slices.IndexFunc(m.connIDsToRetire, func(c connIDToRetire) bool { + return c.t.After(expiry) + }) + if idx == -1 { + idx = len(m.connIDsToRetire) + } + m.connIDsToRetire = slices.Insert(m.connIDsToRetire, idx, connIDToRetire{t: expiry, connID: connID}) +} + +func (m *connIDGenerator) issueNewConnID() error { + connID, err := m.generator.GenerateConnectionID() + if err != nil { + return err + } + m.activeSrcConnIDs[m.highestSeq+1] = connID + m.connRunners.AddConnectionID(connID) + m.queueControlFrame(&wire.NewConnectionIDFrame{ + SequenceNumber: m.highestSeq + 1, + ConnectionID: connID, + StatelessResetToken: m.statelessResetter.GetStatelessResetToken(connID), + }) + m.highestSeq++ + return nil +} + +func (m *connIDGenerator) SetHandshakeComplete(connIDExpiry time.Time) { + if m.initialClientDestConnID != nil { + m.queueConnIDForRetiring(*m.initialClientDestConnID, connIDExpiry) + m.initialClientDestConnID = nil + } +} + +func (m *connIDGenerator) NextRetireTime() time.Time { + if len(m.connIDsToRetire) == 0 { + return time.Time{} + } + return m.connIDsToRetire[0].t +} + +func (m *connIDGenerator) RemoveRetiredConnIDs(now time.Time) { + if len(m.connIDsToRetire) == 0 { + return + } + for _, c := range m.connIDsToRetire { + if c.t.After(now) { + break + } + m.connRunners.RemoveConnectionID(c.connID) + m.connIDsToRetire = m.connIDsToRetire[1:] + } +} + +func (m *connIDGenerator) RemoveAll() { + if m.initialClientDestConnID != nil { + m.connRunners.RemoveConnectionID(*m.initialClientDestConnID) + } + for _, connID := range m.activeSrcConnIDs { + m.connRunners.RemoveConnectionID(connID) + } + for _, c := range m.connIDsToRetire { + m.connRunners.RemoveConnectionID(c.connID) + } +} + +func (m *connIDGenerator) ReplaceWithClosed(connClose []byte, expiry time.Duration) { + connIDs := make([]protocol.ConnectionID, 0, len(m.activeSrcConnIDs)+len(m.connIDsToRetire)+1) + if m.initialClientDestConnID != nil { + connIDs = append(connIDs, *m.initialClientDestConnID) + } + for _, connID := range m.activeSrcConnIDs { + connIDs = append(connIDs, connID) + } + for _, c := range m.connIDsToRetire { + connIDs = append(connIDs, c.connID) + } + m.connRunners.ReplaceWithClosed(connIDs, connClose, expiry) +} + +func (m *connIDGenerator) AddConnRunner(runner connRunner, r connRunnerCallbacks) { + // The transport might have already been added earlier. + // This happens if the application migrates back to and old path. + if _, ok := m.connRunners[runner]; ok { + return + } + m.connRunners[runner] = r + if m.initialClientDestConnID != nil { + r.AddConnectionID(*m.initialClientDestConnID) + } + for _, connID := range m.activeSrcConnIDs { + r.AddConnectionID(connID) + } +} diff --git a/vendor/github.com/quic-go/quic-go/conn_id_manager.go b/vendor/github.com/quic-go/quic-go/conn_id_manager.go new file mode 100644 index 0000000..5513b64 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/conn_id_manager.go @@ -0,0 +1,321 @@ +package quic + +import ( + "fmt" + "slices" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/internal/wire" +) + +type newConnID struct { + SequenceNumber uint64 + ConnectionID protocol.ConnectionID + StatelessResetToken protocol.StatelessResetToken +} + +type connIDManager struct { + queue []newConnID + + highestProbingID uint64 + pathProbing map[pathID]newConnID // initialized lazily + + handshakeComplete bool + activeSequenceNumber uint64 + highestRetired uint64 + activeConnectionID protocol.ConnectionID + activeStatelessResetToken *protocol.StatelessResetToken + + // We change the connection ID after sending on average + // protocol.PacketsPerConnectionID packets. The actual value is randomized + // hide the packet loss rate from on-path observers. + rand utils.Rand + packetsSinceLastChange uint32 + packetsPerConnectionID uint32 + + addStatelessResetToken func(protocol.StatelessResetToken) + removeStatelessResetToken func(protocol.StatelessResetToken) + queueControlFrame func(wire.Frame) + + closed bool +} + +func newConnIDManager( + initialDestConnID protocol.ConnectionID, + addStatelessResetToken func(protocol.StatelessResetToken), + removeStatelessResetToken func(protocol.StatelessResetToken), + queueControlFrame func(wire.Frame), +) *connIDManager { + return &connIDManager{ + activeConnectionID: initialDestConnID, + addStatelessResetToken: addStatelessResetToken, + removeStatelessResetToken: removeStatelessResetToken, + queueControlFrame: queueControlFrame, + queue: make([]newConnID, 0, protocol.MaxActiveConnectionIDs), + } +} + +func (h *connIDManager) AddFromPreferredAddress(connID protocol.ConnectionID, resetToken protocol.StatelessResetToken) error { + return h.addConnectionID(1, connID, resetToken) +} + +func (h *connIDManager) Add(f *wire.NewConnectionIDFrame) error { + if err := h.add(f); err != nil { + return err + } + if len(h.queue) >= protocol.MaxActiveConnectionIDs { + return &qerr.TransportError{ErrorCode: qerr.ConnectionIDLimitError} + } + return nil +} + +func (h *connIDManager) add(f *wire.NewConnectionIDFrame) error { + if h.activeConnectionID.Len() == 0 { + return &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: "received NEW_CONNECTION_ID frame but zero-length connection IDs are in use", + } + } + // If the NEW_CONNECTION_ID frame is reordered, such that its sequence number is smaller than the currently active + // connection ID or if it was already retired, send the RETIRE_CONNECTION_ID frame immediately. + if f.SequenceNumber < max(h.activeSequenceNumber, h.highestProbingID) || f.SequenceNumber < h.highestRetired { + h.queueControlFrame(&wire.RetireConnectionIDFrame{ + SequenceNumber: f.SequenceNumber, + }) + return nil + } + + if f.RetirePriorTo != 0 && h.pathProbing != nil { + for id, entry := range h.pathProbing { + if entry.SequenceNumber < f.RetirePriorTo { + h.queueControlFrame(&wire.RetireConnectionIDFrame{ + SequenceNumber: entry.SequenceNumber, + }) + h.removeStatelessResetToken(entry.StatelessResetToken) + delete(h.pathProbing, id) + } + } + } + // Retire elements in the queue. + // Doesn't retire the active connection ID. + if f.RetirePriorTo > h.highestRetired { + var newQueue []newConnID + for _, entry := range h.queue { + if entry.SequenceNumber >= f.RetirePriorTo { + newQueue = append(newQueue, entry) + } else { + h.queueControlFrame(&wire.RetireConnectionIDFrame{SequenceNumber: entry.SequenceNumber}) + } + } + h.queue = newQueue + h.highestRetired = f.RetirePriorTo + } + + if f.SequenceNumber == h.activeSequenceNumber { + return nil + } + + if err := h.addConnectionID(f.SequenceNumber, f.ConnectionID, f.StatelessResetToken); err != nil { + return err + } + + // Retire the active connection ID, if necessary. + if h.activeSequenceNumber < f.RetirePriorTo { + // The queue is guaranteed to have at least one element at this point. + h.updateConnectionID() + } + return nil +} + +func (h *connIDManager) addConnectionID(seq uint64, connID protocol.ConnectionID, resetToken protocol.StatelessResetToken) error { + // fast path: add to the end of the queue + if len(h.queue) == 0 || h.queue[len(h.queue)-1].SequenceNumber < seq { + h.queue = append(h.queue, newConnID{ + SequenceNumber: seq, + ConnectionID: connID, + StatelessResetToken: resetToken, + }) + return nil + } + + // slow path: insert in the middle + for i, entry := range h.queue { + if entry.SequenceNumber == seq { + if entry.ConnectionID != connID { + return fmt.Errorf("received conflicting connection IDs for sequence number %d", seq) + } + if entry.StatelessResetToken != resetToken { + return fmt.Errorf("received conflicting stateless reset tokens for sequence number %d", seq) + } + return nil + } + + // insert at the correct position to maintain sorted order + if entry.SequenceNumber > seq { + h.queue = slices.Insert(h.queue, i, newConnID{ + SequenceNumber: seq, + ConnectionID: connID, + StatelessResetToken: resetToken, + }) + return nil + } + } + return nil // unreachable +} + +func (h *connIDManager) updateConnectionID() { + h.assertNotClosed() + h.queueControlFrame(&wire.RetireConnectionIDFrame{ + SequenceNumber: h.activeSequenceNumber, + }) + h.highestRetired = max(h.highestRetired, h.activeSequenceNumber) + if h.activeStatelessResetToken != nil { + h.removeStatelessResetToken(*h.activeStatelessResetToken) + } + + front := h.queue[0] + h.queue = h.queue[1:] + h.activeSequenceNumber = front.SequenceNumber + h.activeConnectionID = front.ConnectionID + h.activeStatelessResetToken = &front.StatelessResetToken + h.packetsSinceLastChange = 0 + h.packetsPerConnectionID = protocol.PacketsPerConnectionID/2 + uint32(h.rand.Int31n(protocol.PacketsPerConnectionID)) + h.addStatelessResetToken(*h.activeStatelessResetToken) +} + +func (h *connIDManager) Close() { + h.closed = true + if h.activeStatelessResetToken != nil { + h.removeStatelessResetToken(*h.activeStatelessResetToken) + } + if h.pathProbing != nil { + for _, entry := range h.pathProbing { + h.removeStatelessResetToken(entry.StatelessResetToken) + } + } +} + +// is called when the server performs a Retry +// and when the server changes the connection ID in the first Initial sent +func (h *connIDManager) ChangeInitialConnID(newConnID protocol.ConnectionID) { + if h.activeSequenceNumber != 0 { + panic("expected first connection ID to have sequence number 0") + } + h.activeConnectionID = newConnID +} + +// is called when the server provides a stateless reset token in the transport parameters +func (h *connIDManager) SetStatelessResetToken(token protocol.StatelessResetToken) { + h.assertNotClosed() + if h.activeSequenceNumber != 0 { + panic("expected first connection ID to have sequence number 0") + } + h.activeStatelessResetToken = &token + h.addStatelessResetToken(token) +} + +func (h *connIDManager) SentPacket() { + h.packetsSinceLastChange++ +} + +func (h *connIDManager) shouldUpdateConnID() bool { + if !h.handshakeComplete { + return false + } + // initiate the first change as early as possible (after handshake completion) + if len(h.queue) > 0 && h.activeSequenceNumber == 0 { + return true + } + // For later changes, only change if + // 1. The queue of connection IDs is filled more than 50%. + // 2. We sent at least PacketsPerConnectionID packets + return 2*len(h.queue) >= protocol.MaxActiveConnectionIDs && + h.packetsSinceLastChange >= h.packetsPerConnectionID +} + +func (h *connIDManager) Get() protocol.ConnectionID { + h.assertNotClosed() + if h.shouldUpdateConnID() { + h.updateConnectionID() + } + return h.activeConnectionID +} + +func (h *connIDManager) SetHandshakeComplete() { + h.handshakeComplete = true +} + +// GetConnIDForPath retrieves a connection ID for a new path (i.e. not the active one). +// Once a connection ID is allocated for a path, it cannot be used for a different path. +// When called with the same pathID, it will return the same connection ID, +// unless the peer requested that this connection ID be retired. +func (h *connIDManager) GetConnIDForPath(id pathID) (protocol.ConnectionID, bool) { + h.assertNotClosed() + // if we're using zero-length connection IDs, we don't need to change the connection ID + if h.activeConnectionID.Len() == 0 { + return protocol.ConnectionID{}, true + } + + if h.pathProbing == nil { + h.pathProbing = make(map[pathID]newConnID) + } + entry, ok := h.pathProbing[id] + if ok { + return entry.ConnectionID, true + } + if len(h.queue) == 0 { + return protocol.ConnectionID{}, false + } + front := h.queue[0] + h.queue = h.queue[1:] + h.pathProbing[id] = front + h.highestProbingID = front.SequenceNumber + h.addStatelessResetToken(front.StatelessResetToken) + return front.ConnectionID, true +} + +func (h *connIDManager) RetireConnIDForPath(pathID pathID) { + h.assertNotClosed() + // if we're using zero-length connection IDs, we don't need to change the connection ID + if h.activeConnectionID.Len() == 0 { + return + } + + entry, ok := h.pathProbing[pathID] + if !ok { + return + } + h.queueControlFrame(&wire.RetireConnectionIDFrame{ + SequenceNumber: entry.SequenceNumber, + }) + h.removeStatelessResetToken(entry.StatelessResetToken) + delete(h.pathProbing, pathID) +} + +func (h *connIDManager) IsActiveStatelessResetToken(token protocol.StatelessResetToken) bool { + if h.activeStatelessResetToken != nil { + if *h.activeStatelessResetToken == token { + return true + } + } + if h.pathProbing != nil { + for _, entry := range h.pathProbing { + if entry.StatelessResetToken == token { + return true + } + } + } + return false +} + +// Using the connIDManager after it has been closed can have disastrous effects: +// If the connection ID is rotated, a new entry would be inserted into the packet handler map, +// leading to a memory leak of the connection struct. +// See https://github.com/quic-go/quic-go/pull/4852 for more details. +func (h *connIDManager) assertNotClosed() { + if h.closed { + panic("connection ID manager is closed") + } +} diff --git a/vendor/github.com/quic-go/quic-go/connection.go b/vendor/github.com/quic-go/quic-go/connection.go new file mode 100644 index 0000000..2251af0 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/connection.go @@ -0,0 +1,2710 @@ +package quic + +import ( + "bytes" + "context" + "crypto/tls" + "errors" + "fmt" + "io" + "net" + "reflect" + "slices" + "sync" + "sync/atomic" + "time" + + "github.com/quic-go/quic-go/internal/ackhandler" + "github.com/quic-go/quic-go/internal/flowcontrol" + "github.com/quic-go/quic-go/internal/handshake" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/internal/utils/ringbuffer" + "github.com/quic-go/quic-go/internal/wire" + "github.com/quic-go/quic-go/logging" +) + +type unpacker interface { + UnpackLongHeader(hdr *wire.Header, data []byte) (*unpackedPacket, error) + UnpackShortHeader(rcvTime time.Time, data []byte) (protocol.PacketNumber, protocol.PacketNumberLen, protocol.KeyPhaseBit, []byte, error) +} + +type cryptoStreamHandler interface { + StartHandshake(context.Context) error + ChangeConnectionID(protocol.ConnectionID) + SetLargest1RTTAcked(protocol.PacketNumber) error + SetHandshakeConfirmed() + GetSessionTicket() ([]byte, error) + NextEvent() handshake.Event + DiscardInitialKeys() + HandleMessage([]byte, protocol.EncryptionLevel) error + io.Closer + ConnectionState() handshake.ConnectionState +} + +type receivedPacket struct { + buffer *packetBuffer + + remoteAddr net.Addr + rcvTime time.Time + data []byte + + ecn protocol.ECN + + info packetInfo // only valid if the contained IP address is valid +} + +func (p *receivedPacket) Size() protocol.ByteCount { return protocol.ByteCount(len(p.data)) } + +func (p *receivedPacket) Clone() *receivedPacket { + return &receivedPacket{ + remoteAddr: p.remoteAddr, + rcvTime: p.rcvTime, + data: p.data, + buffer: p.buffer, + ecn: p.ecn, + info: p.info, + } +} + +type connRunner interface { + Add(protocol.ConnectionID, packetHandler) bool + Remove(protocol.ConnectionID) + ReplaceWithClosed([]protocol.ConnectionID, []byte, time.Duration) + AddResetToken(protocol.StatelessResetToken, packetHandler) + RemoveResetToken(protocol.StatelessResetToken) +} + +type closeError struct { + err error + immediate bool +} + +type errCloseForRecreating struct { + nextPacketNumber protocol.PacketNumber + nextVersion protocol.Version +} + +func (e *errCloseForRecreating) Error() string { + return "closing connection in order to recreate it" +} + +var connTracingID atomic.Uint64 // to be accessed atomically +func nextConnTracingID() ConnectionTracingID { return ConnectionTracingID(connTracingID.Add(1)) } + +// A Conn is a QUIC connection between two peers. +// Calls to the connection (and to streams) can return the following types of errors: +// - [ApplicationError]: for errors triggered by the application running on top of QUIC +// - [TransportError]: for errors triggered by the QUIC transport (in many cases a misbehaving peer) +// - [IdleTimeoutError]: when the peer goes away unexpectedly (this is a [net.Error] timeout error) +// - [HandshakeTimeoutError]: when the cryptographic handshake takes too long (this is a [net.Error] timeout error) +// - [StatelessResetError]: when we receive a stateless reset +// - [VersionNegotiationError]: returned by the client, when there's no version overlap between the peers +type Conn struct { + // Destination connection ID used during the handshake. + // Used to check source connection ID on incoming packets. + handshakeDestConnID protocol.ConnectionID + // Set for the client. Destination connection ID used on the first Initial sent. + origDestConnID protocol.ConnectionID + retrySrcConnID *protocol.ConnectionID // only set for the client (and if a Retry was performed) + + srcConnIDLen int + + perspective protocol.Perspective + version protocol.Version + config *Config + + conn sendConn + sendQueue sender + + // lazily initialzed: most connections never migrate + pathManager *pathManager + largestRcvdAppData protocol.PacketNumber + pathManagerOutgoing atomic.Pointer[pathManagerOutgoing] + + streamsMap *streamsMap + connIDManager *connIDManager + connIDGenerator *connIDGenerator + + rttStats *utils.RTTStats + + cryptoStreamManager *cryptoStreamManager + sentPacketHandler ackhandler.SentPacketHandler + receivedPacketHandler ackhandler.ReceivedPacketHandler + retransmissionQueue *retransmissionQueue + framer *framer + connFlowController flowcontrol.ConnectionFlowController + tokenStoreKey string // only set for the client + tokenGenerator *handshake.TokenGenerator // only set for the server + + unpacker unpacker + frameParser wire.FrameParser + packer packer + mtuDiscoverer mtuDiscoverer // initialized when the transport parameters are received + + currentMTUEstimate atomic.Uint32 + + initialStream *initialCryptoStream + handshakeStream *cryptoStream + oneRTTStream *cryptoStream // only set for the server + cryptoStreamHandler cryptoStreamHandler + + notifyReceivedPacket chan struct{} + sendingScheduled chan struct{} + receivedPacketMx sync.Mutex + receivedPackets ringbuffer.RingBuffer[receivedPacket] + + // closeChan is used to notify the run loop that it should terminate + closeChan chan struct{} + closeErr atomic.Pointer[closeError] + + ctx context.Context + ctxCancel context.CancelCauseFunc + handshakeCompleteChan chan struct{} + + undecryptablePackets []receivedPacket // undecryptable packets, waiting for a change in encryption level + undecryptablePacketsToProcess []receivedPacket + + earlyConnReadyChan chan struct{} + sentFirstPacket bool + droppedInitialKeys bool + handshakeComplete bool + handshakeConfirmed bool + + receivedRetry bool + versionNegotiated bool + receivedFirstPacket bool + + // the minimum of the max_idle_timeout values advertised by both endpoints + idleTimeout time.Duration + creationTime time.Time + // The idle timeout is set based on the max of the time we received the last packet... + lastPacketReceivedTime time.Time + // ... and the time we sent a new ack-eliciting packet after receiving a packet. + firstAckElicitingPacketAfterIdleSentTime time.Time + // pacingDeadline is the time when the next packet should be sent + pacingDeadline time.Time + + peerParams *wire.TransportParameters + + timer connectionTimer + // keepAlivePingSent stores whether a keep alive PING is in flight. + // It is reset as soon as we receive a packet from the peer. + keepAlivePingSent bool + keepAliveInterval time.Duration + + datagramQueue *datagramQueue + + connStateMutex sync.Mutex + connState ConnectionState + + logID string + tracer *logging.ConnectionTracer + logger utils.Logger +} + +var _ streamSender = &Conn{} + +type connTestHooks struct { + run func() error + earlyConnReady func() <-chan struct{} + context func() context.Context + handshakeComplete func() <-chan struct{} + closeWithTransportError func(TransportErrorCode) + destroy func(error) + handlePacket func(receivedPacket) +} + +type wrappedConn struct { + testHooks *connTestHooks + *Conn +} + +var newConnection = func( + ctx context.Context, + ctxCancel context.CancelCauseFunc, + conn sendConn, + runner connRunner, + origDestConnID protocol.ConnectionID, + retrySrcConnID *protocol.ConnectionID, + clientDestConnID protocol.ConnectionID, + destConnID protocol.ConnectionID, + srcConnID protocol.ConnectionID, + connIDGenerator ConnectionIDGenerator, + statelessResetter *statelessResetter, + conf *Config, + tlsConf *tls.Config, + tokenGenerator *handshake.TokenGenerator, + clientAddressValidated bool, + rtt time.Duration, + tracer *logging.ConnectionTracer, + logger utils.Logger, + v protocol.Version, +) *wrappedConn { + s := &Conn{ + ctx: ctx, + ctxCancel: ctxCancel, + conn: conn, + config: conf, + handshakeDestConnID: destConnID, + srcConnIDLen: srcConnID.Len(), + tokenGenerator: tokenGenerator, + oneRTTStream: newCryptoStream(), + perspective: protocol.PerspectiveServer, + tracer: tracer, + logger: logger, + version: v, + } + if origDestConnID.Len() > 0 { + s.logID = origDestConnID.String() + } else { + s.logID = destConnID.String() + } + s.connIDManager = newConnIDManager( + destConnID, + func(token protocol.StatelessResetToken) { runner.AddResetToken(token, s) }, + runner.RemoveResetToken, + s.queueControlFrame, + ) + s.connIDGenerator = newConnIDGenerator( + runner, + srcConnID, + &clientDestConnID, + statelessResetter, + connRunnerCallbacks{ + AddConnectionID: func(connID protocol.ConnectionID) { runner.Add(connID, s) }, + RemoveConnectionID: runner.Remove, + ReplaceWithClosed: runner.ReplaceWithClosed, + }, + s.queueControlFrame, + connIDGenerator, + ) + s.preSetup() + s.rttStats.SetInitialRTT(rtt) + s.sentPacketHandler, s.receivedPacketHandler = ackhandler.NewAckHandler( + 0, + protocol.ByteCount(s.config.InitialPacketSize), + s.rttStats, + clientAddressValidated, + s.conn.capabilities().ECN, + s.perspective, + s.tracer, + s.logger, + ) + s.currentMTUEstimate.Store(uint32(estimateMaxPayloadSize(protocol.ByteCount(s.config.InitialPacketSize)))) + statelessResetToken := statelessResetter.GetStatelessResetToken(srcConnID) + params := &wire.TransportParameters{ + InitialMaxStreamDataBidiLocal: protocol.ByteCount(s.config.InitialStreamReceiveWindow), + InitialMaxStreamDataBidiRemote: protocol.ByteCount(s.config.InitialStreamReceiveWindow), + InitialMaxStreamDataUni: protocol.ByteCount(s.config.InitialStreamReceiveWindow), + InitialMaxData: protocol.ByteCount(s.config.InitialConnectionReceiveWindow), + MaxIdleTimeout: s.config.MaxIdleTimeout, + MaxBidiStreamNum: protocol.StreamNum(s.config.MaxIncomingStreams), + MaxUniStreamNum: protocol.StreamNum(s.config.MaxIncomingUniStreams), + MaxAckDelay: protocol.MaxAckDelayInclGranularity, + AckDelayExponent: protocol.AckDelayExponent, + MaxUDPPayloadSize: protocol.MaxPacketBufferSize, + StatelessResetToken: &statelessResetToken, + OriginalDestinationConnectionID: origDestConnID, + // For interoperability with quic-go versions before May 2023, this value must be set to a value + // different from protocol.DefaultActiveConnectionIDLimit. + // If set to the default value, it will be omitted from the transport parameters, which will make + // old quic-go versions interpret it as 0, instead of the default value of 2. + // See https://github.com/quic-go/quic-go/pull/3806. + ActiveConnectionIDLimit: protocol.MaxActiveConnectionIDs, + InitialSourceConnectionID: srcConnID, + RetrySourceConnectionID: retrySrcConnID, + EnableResetStreamAt: conf.EnableStreamResetPartialDelivery, + } + if s.config.EnableDatagrams { + params.MaxDatagramFrameSize = wire.MaxDatagramSize + } else { + params.MaxDatagramFrameSize = protocol.InvalidByteCount + } + if s.tracer != nil && s.tracer.SentTransportParameters != nil { + s.tracer.SentTransportParameters(params) + } + cs := handshake.NewCryptoSetupServer( + clientDestConnID, + conn.LocalAddr(), + conn.RemoteAddr(), + params, + tlsConf, + conf.Allow0RTT, + s.rttStats, + tracer, + logger, + s.version, + ) + s.cryptoStreamHandler = cs + s.packer = newPacketPacker(srcConnID, s.connIDManager.Get, s.initialStream, s.handshakeStream, s.sentPacketHandler, s.retransmissionQueue, cs, s.framer, s.receivedPacketHandler, s.datagramQueue, s.perspective) + s.unpacker = newPacketUnpacker(cs, s.srcConnIDLen) + s.cryptoStreamManager = newCryptoStreamManager(s.initialStream, s.handshakeStream, s.oneRTTStream) + return &wrappedConn{Conn: s} +} + +// declare this as a variable, such that we can it mock it in the tests +var newClientConnection = func( + ctx context.Context, + conn sendConn, + runner connRunner, + destConnID protocol.ConnectionID, + srcConnID protocol.ConnectionID, + connIDGenerator ConnectionIDGenerator, + statelessResetter *statelessResetter, + conf *Config, + tlsConf *tls.Config, + initialPacketNumber protocol.PacketNumber, + enable0RTT bool, + hasNegotiatedVersion bool, + tracer *logging.ConnectionTracer, + logger utils.Logger, + v protocol.Version, +) *wrappedConn { + s := &Conn{ + conn: conn, + config: conf, + origDestConnID: destConnID, + handshakeDestConnID: destConnID, + srcConnIDLen: srcConnID.Len(), + perspective: protocol.PerspectiveClient, + logID: destConnID.String(), + logger: logger, + tracer: tracer, + versionNegotiated: hasNegotiatedVersion, + version: v, + } + s.connIDManager = newConnIDManager( + destConnID, + func(token protocol.StatelessResetToken) { runner.AddResetToken(token, s) }, + runner.RemoveResetToken, + s.queueControlFrame, + ) + s.connIDGenerator = newConnIDGenerator( + runner, + srcConnID, + nil, + statelessResetter, + connRunnerCallbacks{ + AddConnectionID: func(connID protocol.ConnectionID) { runner.Add(connID, s) }, + RemoveConnectionID: runner.Remove, + ReplaceWithClosed: runner.ReplaceWithClosed, + }, + s.queueControlFrame, + connIDGenerator, + ) + s.ctx, s.ctxCancel = context.WithCancelCause(ctx) + s.preSetup() + s.sentPacketHandler, s.receivedPacketHandler = ackhandler.NewAckHandler( + initialPacketNumber, + protocol.ByteCount(s.config.InitialPacketSize), + s.rttStats, + false, // has no effect + s.conn.capabilities().ECN, + s.perspective, + s.tracer, + s.logger, + ) + s.currentMTUEstimate.Store(uint32(estimateMaxPayloadSize(protocol.ByteCount(s.config.InitialPacketSize)))) + oneRTTStream := newCryptoStream() + params := &wire.TransportParameters{ + InitialMaxStreamDataBidiRemote: protocol.ByteCount(s.config.InitialStreamReceiveWindow), + InitialMaxStreamDataBidiLocal: protocol.ByteCount(s.config.InitialStreamReceiveWindow), + InitialMaxStreamDataUni: protocol.ByteCount(s.config.InitialStreamReceiveWindow), + InitialMaxData: protocol.ByteCount(s.config.InitialConnectionReceiveWindow), + MaxIdleTimeout: s.config.MaxIdleTimeout, + MaxBidiStreamNum: protocol.StreamNum(s.config.MaxIncomingStreams), + MaxUniStreamNum: protocol.StreamNum(s.config.MaxIncomingUniStreams), + MaxAckDelay: protocol.MaxAckDelayInclGranularity, + MaxUDPPayloadSize: protocol.MaxPacketBufferSize, + AckDelayExponent: protocol.AckDelayExponent, + // For interoperability with quic-go versions before May 2023, this value must be set to a value + // different from protocol.DefaultActiveConnectionIDLimit. + // If set to the default value, it will be omitted from the transport parameters, which will make + // old quic-go versions interpret it as 0, instead of the default value of 2. + // See https://github.com/quic-go/quic-go/pull/3806. + ActiveConnectionIDLimit: protocol.MaxActiveConnectionIDs, + InitialSourceConnectionID: srcConnID, + EnableResetStreamAt: conf.EnableStreamResetPartialDelivery, + } + if s.config.EnableDatagrams { + params.MaxDatagramFrameSize = wire.MaxDatagramSize + } else { + params.MaxDatagramFrameSize = protocol.InvalidByteCount + } + if s.tracer != nil && s.tracer.SentTransportParameters != nil { + s.tracer.SentTransportParameters(params) + } + cs := handshake.NewCryptoSetupClient( + destConnID, + params, + tlsConf, + enable0RTT, + s.rttStats, + tracer, + logger, + s.version, + ) + s.cryptoStreamHandler = cs + s.cryptoStreamManager = newCryptoStreamManager(s.initialStream, s.handshakeStream, oneRTTStream) + s.unpacker = newPacketUnpacker(cs, s.srcConnIDLen) + s.packer = newPacketPacker(srcConnID, s.connIDManager.Get, s.initialStream, s.handshakeStream, s.sentPacketHandler, s.retransmissionQueue, cs, s.framer, s.receivedPacketHandler, s.datagramQueue, s.perspective) + if len(tlsConf.ServerName) > 0 { + s.tokenStoreKey = tlsConf.ServerName + } else { + s.tokenStoreKey = conn.RemoteAddr().String() + } + if s.config.TokenStore != nil { + if token := s.config.TokenStore.Pop(s.tokenStoreKey); token != nil { + s.packer.SetToken(token.data) + s.rttStats.SetInitialRTT(token.rtt) + } + } + return &wrappedConn{Conn: s} +} + +func (c *Conn) preSetup() { + c.largestRcvdAppData = protocol.InvalidPacketNumber + c.initialStream = newInitialCryptoStream(c.perspective == protocol.PerspectiveClient) + c.handshakeStream = newCryptoStream() + c.sendQueue = newSendQueue(c.conn) + c.retransmissionQueue = newRetransmissionQueue() + c.frameParser = *wire.NewFrameParser( + c.config.EnableDatagrams, + c.config.EnableStreamResetPartialDelivery, + ) + c.rttStats = &utils.RTTStats{} + c.connFlowController = flowcontrol.NewConnectionFlowController( + protocol.ByteCount(c.config.InitialConnectionReceiveWindow), + protocol.ByteCount(c.config.MaxConnectionReceiveWindow), + func(size protocol.ByteCount) bool { + if c.config.AllowConnectionWindowIncrease == nil { + return true + } + return c.config.AllowConnectionWindowIncrease(c, uint64(size)) + }, + c.rttStats, + c.logger, + ) + c.earlyConnReadyChan = make(chan struct{}) + c.streamsMap = newStreamsMap( + c.ctx, + c, + c.queueControlFrame, + c.newFlowController, + uint64(c.config.MaxIncomingStreams), + uint64(c.config.MaxIncomingUniStreams), + c.perspective, + ) + c.framer = newFramer(c.connFlowController) + c.receivedPackets.Init(8) + c.notifyReceivedPacket = make(chan struct{}, 1) + c.closeChan = make(chan struct{}, 1) + c.sendingScheduled = make(chan struct{}, 1) + c.handshakeCompleteChan = make(chan struct{}) + + now := time.Now() + c.lastPacketReceivedTime = now + c.creationTime = now + + c.datagramQueue = newDatagramQueue(c.scheduleSending, c.logger) + c.connState.Version = c.version +} + +// run the connection main loop +func (c *Conn) run() (err error) { + defer func() { c.ctxCancel(err) }() + + defer func() { + // drain queued packets that will never be processed + c.receivedPacketMx.Lock() + defer c.receivedPacketMx.Unlock() + + for !c.receivedPackets.Empty() { + p := c.receivedPackets.PopFront() + p.buffer.Decrement() + p.buffer.MaybeRelease() + } + }() + + c.timer = *newTimer() + + if err := c.cryptoStreamHandler.StartHandshake(c.ctx); err != nil { + return err + } + if err := c.handleHandshakeEvents(time.Now()); err != nil { + return err + } + go func() { + if err := c.sendQueue.Run(); err != nil { + c.destroyImpl(err) + } + }() + + if c.perspective == protocol.PerspectiveClient { + c.scheduleSending() // so the ClientHello actually gets sent + } + + var sendQueueAvailable <-chan struct{} + +runLoop: + for { + if c.framer.QueuedTooManyControlFrames() { + c.setCloseError(&closeError{err: &qerr.TransportError{ErrorCode: InternalError}}) + break runLoop + } + // Close immediately if requested + select { + case <-c.closeChan: + break runLoop + default: + } + + // no need to set a timer if we can send packets immediately + if c.pacingDeadline != deadlineSendImmediately { + c.maybeResetTimer() + } + + // 1st: handle undecryptable packets, if any. + // This can only occur before completion of the handshake. + if len(c.undecryptablePacketsToProcess) > 0 { + var processedUndecryptablePacket bool + queue := c.undecryptablePacketsToProcess + c.undecryptablePacketsToProcess = nil + for _, p := range queue { + processed, err := c.handleOnePacket(p) + if err != nil { + c.setCloseError(&closeError{err: err}) + break runLoop + } + if processed { + processedUndecryptablePacket = true + } + } + if processedUndecryptablePacket { + // if we processed any undecryptable packets, jump to the resetting of the timers directly + continue + } + } + + // 2nd: receive packets. + processed, err := c.handlePackets() // don't check receivedPackets.Len() in the run loop to avoid locking the mutex + if err != nil { + c.setCloseError(&closeError{err: err}) + break runLoop + } + + // We don't need to wait for new events if: + // * we processed packets: we probably need to send an ACK, and potentially more data + // * the pacer allows us to send more packets immediately + shouldProceedImmediately := sendQueueAvailable == nil && (processed || c.pacingDeadline.Equal(deadlineSendImmediately)) + if !shouldProceedImmediately { + // 3rd: wait for something to happen: + // * closing of the connection + // * timer firing + // * sending scheduled + // * send queue available + // * received packets + select { + case <-c.closeChan: + break runLoop + case <-c.timer.Chan(): + c.timer.SetRead() + case <-c.sendingScheduled: + case <-sendQueueAvailable: + case <-c.notifyReceivedPacket: + wasProcessed, err := c.handlePackets() + if err != nil { + c.setCloseError(&closeError{err: err}) + break runLoop + } + // if we processed any undecryptable packets, jump to the resetting of the timers directly + if !wasProcessed { + continue + } + } + } + + // Check for loss detection timeout. + // This could cause packets to be declared lost, and retransmissions to be enqueued. + now := time.Now() + if timeout := c.sentPacketHandler.GetLossDetectionTimeout(); !timeout.IsZero() && timeout.Before(now) { + if err := c.sentPacketHandler.OnLossDetectionTimeout(now); err != nil { + c.setCloseError(&closeError{err: err}) + break runLoop + } + } + + if keepAliveTime := c.nextKeepAliveTime(); !keepAliveTime.IsZero() && !now.Before(keepAliveTime) { + // send a PING frame since there is no activity in the connection + c.logger.Debugf("Sending a keep-alive PING to keep the connection alive.") + c.framer.QueueControlFrame(&wire.PingFrame{}) + c.keepAlivePingSent = true + } else if !c.handshakeComplete && now.Sub(c.creationTime) >= c.config.handshakeTimeout() { + c.destroyImpl(qerr.ErrHandshakeTimeout) + break runLoop + } else { + idleTimeoutStartTime := c.idleTimeoutStartTime() + if (!c.handshakeComplete && now.Sub(idleTimeoutStartTime) >= c.config.HandshakeIdleTimeout) || + (c.handshakeComplete && now.After(c.nextIdleTimeoutTime())) { + c.destroyImpl(qerr.ErrIdleTimeout) + break runLoop + } + } + + c.connIDGenerator.RemoveRetiredConnIDs(now) + + if c.perspective == protocol.PerspectiveClient { + pm := c.pathManagerOutgoing.Load() + if pm != nil { + tr, ok := pm.ShouldSwitchPath() + if ok { + c.switchToNewPath(tr, now) + } + } + } + + if c.sendQueue.WouldBlock() { + // The send queue is still busy sending out packets. Wait until there's space to enqueue new packets. + sendQueueAvailable = c.sendQueue.Available() + // Cancel the pacing timer, as we can't send any more packets until the send queue is available again. + c.pacingDeadline = time.Time{} + continue + } + + if c.closeErr.Load() != nil { + break runLoop + } + + if err := c.triggerSending(now); err != nil { + c.setCloseError(&closeError{err: err}) + break runLoop + } + if c.sendQueue.WouldBlock() { + // The send queue is still busy sending out packets. Wait until there's space to enqueue new packets. + sendQueueAvailable = c.sendQueue.Available() + // Cancel the pacing timer, as we can't send any more packets until the send queue is available again. + c.pacingDeadline = time.Time{} + } else { + sendQueueAvailable = nil + } + } + + closeErr := c.closeErr.Load() + c.cryptoStreamHandler.Close() + c.sendQueue.Close() // close the send queue before sending the CONNECTION_CLOSE + c.handleCloseError(closeErr) + if c.tracer != nil && c.tracer.Close != nil { + if e := (&errCloseForRecreating{}); !errors.As(closeErr.err, &e) { + c.tracer.Close() + } + } + c.logger.Infof("Connection %s closed.", c.logID) + c.timer.Stop() + return closeErr.err +} + +// blocks until the early connection can be used +func (c *Conn) earlyConnReady() <-chan struct{} { + return c.earlyConnReadyChan +} + +// Context returns a context that is cancelled when the connection is closed. +// The cancellation cause is set to the error that caused the connection to close. +func (c *Conn) Context() context.Context { + return c.ctx +} + +func (c *Conn) supportsDatagrams() bool { + return c.peerParams.MaxDatagramFrameSize > 0 +} + +// ConnectionState returns basic details about the QUIC connection. +func (c *Conn) ConnectionState() ConnectionState { + c.connStateMutex.Lock() + defer c.connStateMutex.Unlock() + cs := c.cryptoStreamHandler.ConnectionState() + c.connState.TLS = cs.ConnectionState + c.connState.Used0RTT = cs.Used0RTT + c.connState.SupportsStreamResetPartialDelivery = c.peerParams.EnableResetStreamAt + c.connState.GSO = c.conn.capabilities().GSO + return c.connState +} + +// Time when the connection should time out +func (c *Conn) nextIdleTimeoutTime() time.Time { + idleTimeout := max(c.idleTimeout, c.rttStats.PTO(true)*3) + return c.idleTimeoutStartTime().Add(idleTimeout) +} + +// Time when the next keep-alive packet should be sent. +// It returns a zero time if no keep-alive should be sent. +func (c *Conn) nextKeepAliveTime() time.Time { + if c.config.KeepAlivePeriod == 0 || c.keepAlivePingSent { + return time.Time{} + } + keepAliveInterval := max(c.keepAliveInterval, c.rttStats.PTO(true)*3/2) + return c.lastPacketReceivedTime.Add(keepAliveInterval) +} + +func (c *Conn) maybeResetTimer() { + var deadline time.Time + if !c.handshakeComplete { + deadline = c.creationTime.Add(c.config.handshakeTimeout()) + if t := c.idleTimeoutStartTime().Add(c.config.HandshakeIdleTimeout); t.Before(deadline) { + deadline = t + } + } else { + if keepAliveTime := c.nextKeepAliveTime(); !keepAliveTime.IsZero() { + deadline = keepAliveTime + } else { + deadline = c.nextIdleTimeoutTime() + } + } + + c.timer.SetTimer( + deadline, + c.connIDGenerator.NextRetireTime(), + c.receivedPacketHandler.GetAlarmTimeout(), + c.sentPacketHandler.GetLossDetectionTimeout(), + c.pacingDeadline, + ) +} + +func (c *Conn) idleTimeoutStartTime() time.Time { + startTime := c.lastPacketReceivedTime + if t := c.firstAckElicitingPacketAfterIdleSentTime; t.After(startTime) { + startTime = t + } + return startTime +} + +func (c *Conn) switchToNewPath(tr *Transport, now time.Time) { + initialPacketSize := protocol.ByteCount(c.config.InitialPacketSize) + c.sentPacketHandler.MigratedPath(now, initialPacketSize) + maxPacketSize := protocol.ByteCount(protocol.MaxPacketBufferSize) + if c.peerParams.MaxUDPPayloadSize > 0 && c.peerParams.MaxUDPPayloadSize < maxPacketSize { + maxPacketSize = c.peerParams.MaxUDPPayloadSize + } + c.mtuDiscoverer.Reset(now, initialPacketSize, maxPacketSize) + c.conn = newSendConn(tr.conn, c.conn.RemoteAddr(), packetInfo{}, utils.DefaultLogger) // TODO: find a better way + c.sendQueue.Close() + c.sendQueue = newSendQueue(c.conn) + go func() { + if err := c.sendQueue.Run(); err != nil { + c.destroyImpl(err) + } + }() +} + +func (c *Conn) handleHandshakeComplete(now time.Time) error { + defer close(c.handshakeCompleteChan) + // Once the handshake completes, we have derived 1-RTT keys. + // There's no point in queueing undecryptable packets for later decryption anymore. + c.undecryptablePackets = nil + + c.connIDManager.SetHandshakeComplete() + c.connIDGenerator.SetHandshakeComplete(now.Add(3 * c.rttStats.PTO(false))) + + if c.tracer != nil && c.tracer.ChoseALPN != nil { + c.tracer.ChoseALPN(c.cryptoStreamHandler.ConnectionState().NegotiatedProtocol) + } + + // The server applies transport parameters right away, but the client side has to wait for handshake completion. + // During a 0-RTT connection, the client is only allowed to use the new transport parameters for 1-RTT packets. + if c.perspective == protocol.PerspectiveClient { + c.applyTransportParameters() + return nil + } + + // All these only apply to the server side. + if err := c.handleHandshakeConfirmed(now); err != nil { + return err + } + + ticket, err := c.cryptoStreamHandler.GetSessionTicket() + if err != nil { + return err + } + if ticket != nil { // may be nil if session tickets are disabled via tls.Config.SessionTicketsDisabled + c.oneRTTStream.Write(ticket) + for c.oneRTTStream.HasData() { + if cf := c.oneRTTStream.PopCryptoFrame(protocol.MaxPostHandshakeCryptoFrameSize); cf != nil { + c.queueControlFrame(cf) + } + } + } + token, err := c.tokenGenerator.NewToken(c.conn.RemoteAddr(), c.rttStats.SmoothedRTT()) + if err != nil { + return err + } + c.queueControlFrame(&wire.NewTokenFrame{Token: token}) + c.queueControlFrame(&wire.HandshakeDoneFrame{}) + return nil +} + +func (c *Conn) handleHandshakeConfirmed(now time.Time) error { + if err := c.dropEncryptionLevel(protocol.EncryptionHandshake, now); err != nil { + return err + } + + c.handshakeConfirmed = true + c.cryptoStreamHandler.SetHandshakeConfirmed() + + if !c.config.DisablePathMTUDiscovery && c.conn.capabilities().DF { + c.mtuDiscoverer.Start(now) + } + return nil +} + +func (c *Conn) handlePackets() (wasProcessed bool, _ error) { + // Now process all packets in the receivedPackets channel. + // Limit the number of packets to the length of the receivedPackets channel, + // so we eventually get a chance to send out an ACK when receiving a lot of packets. + c.receivedPacketMx.Lock() + numPackets := c.receivedPackets.Len() + if numPackets == 0 { + c.receivedPacketMx.Unlock() + return false, nil + } + + var hasMorePackets bool + for i := 0; i < numPackets; i++ { + if i > 0 { + c.receivedPacketMx.Lock() + } + p := c.receivedPackets.PopFront() + hasMorePackets = !c.receivedPackets.Empty() + c.receivedPacketMx.Unlock() + + processed, err := c.handleOnePacket(p) + if err != nil { + return false, err + } + if processed { + wasProcessed = true + } + if !hasMorePackets { + break + } + // only process a single packet at a time before handshake completion + if !c.handshakeComplete { + break + } + } + if hasMorePackets { + select { + case c.notifyReceivedPacket <- struct{}{}: + default: + } + } + return wasProcessed, nil +} + +func (c *Conn) handleOnePacket(rp receivedPacket) (wasProcessed bool, _ error) { + c.sentPacketHandler.ReceivedBytes(rp.Size(), rp.rcvTime) + + if wire.IsVersionNegotiationPacket(rp.data) { + c.handleVersionNegotiationPacket(rp) + return false, nil + } + + var counter uint8 + var lastConnID protocol.ConnectionID + data := rp.data + p := rp + for len(data) > 0 { + if counter > 0 { + p = *(p.Clone()) + p.data = data + + destConnID, err := wire.ParseConnectionID(p.data, c.srcConnIDLen) + if err != nil { + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(logging.PacketTypeNotDetermined, protocol.InvalidPacketNumber, protocol.ByteCount(len(data)), logging.PacketDropHeaderParseError) + } + c.logger.Debugf("error parsing packet, couldn't parse connection ID: %s", err) + break + } + if destConnID != lastConnID { + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(logging.PacketTypeNotDetermined, protocol.InvalidPacketNumber, protocol.ByteCount(len(data)), logging.PacketDropUnknownConnectionID) + } + c.logger.Debugf("coalesced packet has different destination connection ID: %s, expected %s", destConnID, lastConnID) + break + } + } + + if wire.IsLongHeaderPacket(p.data[0]) { + hdr, packetData, rest, err := wire.ParsePacket(p.data) + if err != nil { + if c.tracer != nil && c.tracer.DroppedPacket != nil { + dropReason := logging.PacketDropHeaderParseError + if err == wire.ErrUnsupportedVersion { + dropReason = logging.PacketDropUnsupportedVersion + } + c.tracer.DroppedPacket(logging.PacketTypeNotDetermined, protocol.InvalidPacketNumber, protocol.ByteCount(len(data)), dropReason) + } + c.logger.Debugf("error parsing packet: %s", err) + break + } + lastConnID = hdr.DestConnectionID + + if hdr.Version != c.version { + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(logging.PacketTypeFromHeader(hdr), protocol.InvalidPacketNumber, protocol.ByteCount(len(data)), logging.PacketDropUnexpectedVersion) + } + c.logger.Debugf("Dropping packet with version %x. Expected %x.", hdr.Version, c.version) + break + } + + if counter > 0 { + p.buffer.Split() + } + counter++ + + // only log if this actually a coalesced packet + if c.logger.Debug() && (counter > 1 || len(rest) > 0) { + c.logger.Debugf("Parsed a coalesced packet. Part %d: %d bytes. Remaining: %d bytes.", counter, len(packetData), len(rest)) + } + + p.data = packetData + + processed, err := c.handleLongHeaderPacket(p, hdr) + if err != nil { + return false, err + } + if processed { + wasProcessed = true + } + data = rest + } else { + if counter > 0 { + p.buffer.Split() + } + processed, err := c.handleShortHeaderPacket(p, counter > 0) + if err != nil { + return false, err + } + if processed { + wasProcessed = true + } + break + } + } + + p.buffer.MaybeRelease() + return wasProcessed, nil +} + +func (c *Conn) handleShortHeaderPacket(p receivedPacket, isCoalesced bool) (wasProcessed bool, _ error) { + var wasQueued bool + + defer func() { + // Put back the packet buffer if the packet wasn't queued for later decryption. + if !wasQueued { + p.buffer.Decrement() + } + }() + + destConnID, err := wire.ParseConnectionID(p.data, c.srcConnIDLen) + if err != nil { + c.tracer.DroppedPacket(logging.PacketType1RTT, protocol.InvalidPacketNumber, protocol.ByteCount(len(p.data)), logging.PacketDropHeaderParseError) + return false, nil + } + pn, pnLen, keyPhase, data, err := c.unpacker.UnpackShortHeader(p.rcvTime, p.data) + if err != nil { + // Stateless reset packets (see RFC 9000, section 10.3): + // * fill the entire UDP datagram (i.e. they cannot be part of a coalesced packet) + // * are short header packets (first bit is 0) + // * have the QUIC bit set (second bit is 1) + // * are at least 21 bytes long + if !isCoalesced && len(p.data) >= protocol.MinReceivedStatelessResetSize && p.data[0]&0b11000000 == 0b01000000 { + token := protocol.StatelessResetToken(p.data[len(p.data)-16:]) + if c.connIDManager.IsActiveStatelessResetToken(token) { + return false, &StatelessResetError{} + } + } + wasQueued, err = c.handleUnpackError(err, p, logging.PacketType1RTT) + return false, err + } + c.largestRcvdAppData = max(c.largestRcvdAppData, pn) + + if c.logger.Debug() { + c.logger.Debugf("<- Reading packet %d (%d bytes) for connection %s, 1-RTT", pn, p.Size(), destConnID) + wire.LogShortHeader(c.logger, destConnID, pn, pnLen, keyPhase) + } + + if c.receivedPacketHandler.IsPotentiallyDuplicate(pn, protocol.Encryption1RTT) { + c.logger.Debugf("Dropping (potentially) duplicate packet.") + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(logging.PacketType1RTT, pn, p.Size(), logging.PacketDropDuplicate) + } + return false, nil + } + + var log func([]logging.Frame) + if c.tracer != nil && c.tracer.ReceivedShortHeaderPacket != nil { + log = func(frames []logging.Frame) { + c.tracer.ReceivedShortHeaderPacket( + &logging.ShortHeader{ + DestConnectionID: destConnID, + PacketNumber: pn, + PacketNumberLen: pnLen, + KeyPhase: keyPhase, + }, + p.Size(), + p.ecn, + frames, + ) + } + } + isNonProbing, pathChallenge, err := c.handleUnpackedShortHeaderPacket(destConnID, pn, data, p.ecn, p.rcvTime, log) + if err != nil { + return false, err + } + + // In RFC 9000, only the client can migrate between paths. + if c.perspective == protocol.PerspectiveClient { + return true, nil + } + if addrsEqual(p.remoteAddr, c.RemoteAddr()) { + return true, nil + } + + var shouldSwitchPath bool + if c.pathManager == nil { + c.pathManager = newPathManager( + c.connIDManager.GetConnIDForPath, + c.connIDManager.RetireConnIDForPath, + c.logger, + ) + } + destConnID, frames, shouldSwitchPath := c.pathManager.HandlePacket(p.remoteAddr, p.rcvTime, pathChallenge, isNonProbing) + if len(frames) > 0 { + probe, buf, err := c.packer.PackPathProbePacket(destConnID, frames, c.version) + if err != nil { + return true, err + } + c.logger.Debugf("sending path probe packet to %s", p.remoteAddr) + c.logShortHeaderPacket(probe.DestConnID, probe.Ack, probe.Frames, probe.StreamFrames, probe.PacketNumber, probe.PacketNumberLen, probe.KeyPhase, protocol.ECNNon, buf.Len(), false) + c.registerPackedShortHeaderPacket(probe, protocol.ECNNon, p.rcvTime) + c.sendQueue.SendProbe(buf, p.remoteAddr) + } + // We only switch paths in response to the highest-numbered non-probing packet, + // see section 9.3 of RFC 9000. + if !shouldSwitchPath || pn != c.largestRcvdAppData { + return true, nil + } + c.pathManager.SwitchToPath(p.remoteAddr) + c.sentPacketHandler.MigratedPath(p.rcvTime, protocol.ByteCount(c.config.InitialPacketSize)) + maxPacketSize := protocol.ByteCount(protocol.MaxPacketBufferSize) + if c.peerParams.MaxUDPPayloadSize > 0 && c.peerParams.MaxUDPPayloadSize < maxPacketSize { + maxPacketSize = c.peerParams.MaxUDPPayloadSize + } + c.mtuDiscoverer.Reset( + p.rcvTime, + protocol.ByteCount(c.config.InitialPacketSize), + maxPacketSize, + ) + c.conn.ChangeRemoteAddr(p.remoteAddr, p.info) + return true, nil +} + +func (c *Conn) handleLongHeaderPacket(p receivedPacket, hdr *wire.Header) (wasProcessed bool, _ error) { + var wasQueued bool + + defer func() { + // Put back the packet buffer if the packet wasn't queued for later decryption. + if !wasQueued { + p.buffer.Decrement() + } + }() + + if hdr.Type == protocol.PacketTypeRetry { + return c.handleRetryPacket(hdr, p.data, p.rcvTime), nil + } + + // The server can change the source connection ID with the first Handshake packet. + // After this, all packets with a different source connection have to be ignored. + if c.receivedFirstPacket && hdr.Type == protocol.PacketTypeInitial && hdr.SrcConnectionID != c.handshakeDestConnID { + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(logging.PacketTypeInitial, protocol.InvalidPacketNumber, p.Size(), logging.PacketDropUnknownConnectionID) + } + c.logger.Debugf("Dropping Initial packet (%d bytes) with unexpected source connection ID: %s (expected %s)", p.Size(), hdr.SrcConnectionID, c.handshakeDestConnID) + return false, nil + } + // drop 0-RTT packets, if we are a client + if c.perspective == protocol.PerspectiveClient && hdr.Type == protocol.PacketType0RTT { + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(logging.PacketType0RTT, protocol.InvalidPacketNumber, p.Size(), logging.PacketDropUnexpectedPacket) + } + return false, nil + } + + packet, err := c.unpacker.UnpackLongHeader(hdr, p.data) + if err != nil { + wasQueued, err = c.handleUnpackError(err, p, logging.PacketTypeFromHeader(hdr)) + return false, err + } + + if c.logger.Debug() { + c.logger.Debugf("<- Reading packet %d (%d bytes) for connection %s, %s", packet.hdr.PacketNumber, p.Size(), hdr.DestConnectionID, packet.encryptionLevel) + packet.hdr.Log(c.logger) + } + + if pn := packet.hdr.PacketNumber; c.receivedPacketHandler.IsPotentiallyDuplicate(pn, packet.encryptionLevel) { + c.logger.Debugf("Dropping (potentially) duplicate packet.") + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(logging.PacketTypeFromHeader(hdr), pn, p.Size(), logging.PacketDropDuplicate) + } + return false, nil + } + + if err := c.handleUnpackedLongHeaderPacket(packet, p.ecn, p.rcvTime, p.Size()); err != nil { + return false, err + } + return true, nil +} + +func (c *Conn) handleUnpackError(err error, p receivedPacket, pt logging.PacketType) (wasQueued bool, _ error) { + switch err { + case handshake.ErrKeysDropped: + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(pt, protocol.InvalidPacketNumber, p.Size(), logging.PacketDropKeyUnavailable) + } + c.logger.Debugf("Dropping %s packet (%d bytes) because we already dropped the keys.", pt, p.Size()) + return false, nil + case handshake.ErrKeysNotYetAvailable: + // Sealer for this encryption level not yet available. + // Try again later. + c.tryQueueingUndecryptablePacket(p, pt) + return true, nil + case wire.ErrInvalidReservedBits: + return false, &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: err.Error(), + } + case handshake.ErrDecryptionFailed: + // This might be a packet injected by an attacker. Drop it. + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(pt, protocol.InvalidPacketNumber, p.Size(), logging.PacketDropPayloadDecryptError) + } + c.logger.Debugf("Dropping %s packet (%d bytes) that could not be unpacked. Error: %s", pt, p.Size(), err) + return false, nil + default: + var headerErr *headerParseError + if errors.As(err, &headerErr) { + // This might be a packet injected by an attacker. Drop it. + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(pt, protocol.InvalidPacketNumber, p.Size(), logging.PacketDropHeaderParseError) + } + c.logger.Debugf("Dropping %s packet (%d bytes) for which we couldn't unpack the header. Error: %s", pt, p.Size(), err) + return false, nil + } + // This is an error returned by the AEAD (other than ErrDecryptionFailed). + // For example, a PROTOCOL_VIOLATION due to key updates. + return false, err + } +} + +func (c *Conn) handleRetryPacket(hdr *wire.Header, data []byte, rcvTime time.Time) bool /* was this a valid Retry */ { + if c.perspective == protocol.PerspectiveServer { + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(logging.PacketTypeRetry, protocol.InvalidPacketNumber, protocol.ByteCount(len(data)), logging.PacketDropUnexpectedPacket) + } + c.logger.Debugf("Ignoring Retry.") + return false + } + if c.receivedFirstPacket { + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(logging.PacketTypeRetry, protocol.InvalidPacketNumber, protocol.ByteCount(len(data)), logging.PacketDropUnexpectedPacket) + } + c.logger.Debugf("Ignoring Retry, since we already received a packet.") + return false + } + destConnID := c.connIDManager.Get() + if hdr.SrcConnectionID == destConnID { + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(logging.PacketTypeRetry, protocol.InvalidPacketNumber, protocol.ByteCount(len(data)), logging.PacketDropUnexpectedPacket) + } + c.logger.Debugf("Ignoring Retry, since the server didn't change the Source Connection ID.") + return false + } + // If a token is already set, this means that we already received a Retry from the server. + // Ignore this Retry packet. + if c.receivedRetry { + c.logger.Debugf("Ignoring Retry, since a Retry was already received.") + return false + } + + tag := handshake.GetRetryIntegrityTag(data[:len(data)-16], destConnID, hdr.Version) + if !bytes.Equal(data[len(data)-16:], tag[:]) { + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(logging.PacketTypeRetry, protocol.InvalidPacketNumber, protocol.ByteCount(len(data)), logging.PacketDropPayloadDecryptError) + } + c.logger.Debugf("Ignoring spoofed Retry. Integrity Tag doesn't match.") + return false + } + + newDestConnID := hdr.SrcConnectionID + c.receivedRetry = true + c.sentPacketHandler.ResetForRetry(rcvTime) + c.handshakeDestConnID = newDestConnID + c.retrySrcConnID = &newDestConnID + c.cryptoStreamHandler.ChangeConnectionID(newDestConnID) + c.packer.SetToken(hdr.Token) + c.connIDManager.ChangeInitialConnID(newDestConnID) + + if c.logger.Debug() { + c.logger.Debugf("<- Received Retry:") + (&wire.ExtendedHeader{Header: *hdr}).Log(c.logger) + c.logger.Debugf("Switching destination connection ID to: %s", hdr.SrcConnectionID) + } + if c.tracer != nil && c.tracer.ReceivedRetry != nil { + c.tracer.ReceivedRetry(hdr) + } + + c.scheduleSending() + return true +} + +func (c *Conn) handleVersionNegotiationPacket(p receivedPacket) { + if c.perspective == protocol.PerspectiveServer || // servers never receive version negotiation packets + c.receivedFirstPacket || c.versionNegotiated { // ignore delayed / duplicated version negotiation packets + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(logging.PacketTypeVersionNegotiation, protocol.InvalidPacketNumber, p.Size(), logging.PacketDropUnexpectedPacket) + } + return + } + + src, dest, supportedVersions, err := wire.ParseVersionNegotiationPacket(p.data) + if err != nil { + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(logging.PacketTypeVersionNegotiation, protocol.InvalidPacketNumber, p.Size(), logging.PacketDropHeaderParseError) + } + c.logger.Debugf("Error parsing Version Negotiation packet: %s", err) + return + } + + if slices.Contains(supportedVersions, c.version) { + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(logging.PacketTypeVersionNegotiation, protocol.InvalidPacketNumber, p.Size(), logging.PacketDropUnexpectedVersion) + } + // The Version Negotiation packet contains the version that we offered. + // This might be a packet sent by an attacker, or it was corrupted. + return + } + + c.logger.Infof("Received a Version Negotiation packet. Supported Versions: %s", supportedVersions) + if c.tracer != nil && c.tracer.ReceivedVersionNegotiationPacket != nil { + c.tracer.ReceivedVersionNegotiationPacket(dest, src, supportedVersions) + } + newVersion, ok := protocol.ChooseSupportedVersion(c.config.Versions, supportedVersions) + if !ok { + c.destroyImpl(&VersionNegotiationError{ + Ours: c.config.Versions, + Theirs: supportedVersions, + }) + c.logger.Infof("No compatible QUIC version found.") + return + } + if c.tracer != nil && c.tracer.NegotiatedVersion != nil { + c.tracer.NegotiatedVersion(newVersion, c.config.Versions, supportedVersions) + } + + c.logger.Infof("Switching to QUIC version %s.", newVersion) + nextPN, _ := c.sentPacketHandler.PeekPacketNumber(protocol.EncryptionInitial) + c.destroyImpl(&errCloseForRecreating{ + nextPacketNumber: nextPN, + nextVersion: newVersion, + }) +} + +func (c *Conn) handleUnpackedLongHeaderPacket( + packet *unpackedPacket, + ecn protocol.ECN, + rcvTime time.Time, + packetSize protocol.ByteCount, // only for logging +) error { + if !c.receivedFirstPacket { + c.receivedFirstPacket = true + if !c.versionNegotiated && c.tracer != nil && c.tracer.NegotiatedVersion != nil { + var clientVersions, serverVersions []protocol.Version + switch c.perspective { + case protocol.PerspectiveClient: + clientVersions = c.config.Versions + case protocol.PerspectiveServer: + serverVersions = c.config.Versions + } + c.tracer.NegotiatedVersion(c.version, clientVersions, serverVersions) + } + // The server can change the source connection ID with the first Handshake packet. + if c.perspective == protocol.PerspectiveClient && packet.hdr.SrcConnectionID != c.handshakeDestConnID { + cid := packet.hdr.SrcConnectionID + c.logger.Debugf("Received first packet. Switching destination connection ID to: %s", cid) + c.handshakeDestConnID = cid + c.connIDManager.ChangeInitialConnID(cid) + } + // We create the connection as soon as we receive the first packet from the client. + // We do that before authenticating the packet. + // That means that if the source connection ID was corrupted, + // we might have created a connection with an incorrect source connection ID. + // Once we authenticate the first packet, we need to update it. + if c.perspective == protocol.PerspectiveServer { + if packet.hdr.SrcConnectionID != c.handshakeDestConnID { + c.handshakeDestConnID = packet.hdr.SrcConnectionID + c.connIDManager.ChangeInitialConnID(packet.hdr.SrcConnectionID) + } + if c.tracer != nil && c.tracer.StartedConnection != nil { + c.tracer.StartedConnection( + c.conn.LocalAddr(), + c.conn.RemoteAddr(), + packet.hdr.SrcConnectionID, + packet.hdr.DestConnectionID, + ) + } + } + } + + if c.perspective == protocol.PerspectiveServer && packet.encryptionLevel == protocol.EncryptionHandshake && + !c.droppedInitialKeys { + // On the server side, Initial keys are dropped as soon as the first Handshake packet is received. + // See Section 4.9.1 of RFC 9001. + if err := c.dropEncryptionLevel(protocol.EncryptionInitial, rcvTime); err != nil { + return err + } + } + + c.lastPacketReceivedTime = rcvTime + c.firstAckElicitingPacketAfterIdleSentTime = time.Time{} + c.keepAlivePingSent = false + + if packet.hdr.Type == protocol.PacketType0RTT { + c.largestRcvdAppData = max(c.largestRcvdAppData, packet.hdr.PacketNumber) + } + + var log func([]logging.Frame) + if c.tracer != nil && c.tracer.ReceivedLongHeaderPacket != nil { + log = func(frames []logging.Frame) { + c.tracer.ReceivedLongHeaderPacket(packet.hdr, packetSize, ecn, frames) + } + } + isAckEliciting, _, _, err := c.handleFrames(packet.data, packet.hdr.DestConnectionID, packet.encryptionLevel, log, rcvTime) + if err != nil { + return err + } + return c.receivedPacketHandler.ReceivedPacket(packet.hdr.PacketNumber, ecn, packet.encryptionLevel, rcvTime, isAckEliciting) +} + +func (c *Conn) handleUnpackedShortHeaderPacket( + destConnID protocol.ConnectionID, + pn protocol.PacketNumber, + data []byte, + ecn protocol.ECN, + rcvTime time.Time, + log func([]logging.Frame), +) (isNonProbing bool, pathChallenge *wire.PathChallengeFrame, _ error) { + c.lastPacketReceivedTime = rcvTime + c.firstAckElicitingPacketAfterIdleSentTime = time.Time{} + c.keepAlivePingSent = false + + isAckEliciting, isNonProbing, pathChallenge, err := c.handleFrames(data, destConnID, protocol.Encryption1RTT, log, rcvTime) + if err != nil { + return false, nil, err + } + if err := c.receivedPacketHandler.ReceivedPacket(pn, ecn, protocol.Encryption1RTT, rcvTime, isAckEliciting); err != nil { + return false, nil, err + } + return isNonProbing, pathChallenge, nil +} + +// handleFrames parses the frames, one after the other, and handles them. +// It returns the last PATH_CHALLENGE frame contained in the packet, if any. +func (c *Conn) handleFrames( + data []byte, + destConnID protocol.ConnectionID, + encLevel protocol.EncryptionLevel, + log func([]logging.Frame), + rcvTime time.Time, +) (isAckEliciting, isNonProbing bool, pathChallenge *wire.PathChallengeFrame, _ error) { + // Only used for tracing. + // If we're not tracing, this slice will always remain empty. + var frames []logging.Frame + if log != nil { + frames = make([]logging.Frame, 0, 4) + } + handshakeWasComplete := c.handshakeComplete + var handleErr error + var skipHandling bool + + for len(data) > 0 { + frameType, l, err := c.frameParser.ParseType(data, encLevel) + if err != nil { + // The frame parser skips over PADDING frames, and returns an io.EOF if the PADDING + // frames were the last frames in this packet. + if err == io.EOF { + break + } + return false, false, nil, err + } + data = data[l:] + + if ackhandler.IsFrameTypeAckEliciting(frameType) { + isAckEliciting = true + } + if !wire.IsProbingFrameType(frameType) { + isNonProbing = true + } + + // We're inlining common cases, to avoid using interfaces + // Fast path: STREAM, DATAGRAM and ACK + if frameType.IsStreamFrameType() { + streamFrame, l, err := c.frameParser.ParseStreamFrame(frameType, data, c.version) + if err != nil { + return false, false, nil, err + } + data = data[l:] + + if log != nil { + frames = append(frames, toLoggingFrame(streamFrame)) + } + // an error occurred handling a previous frame, don't handle the current frame + if skipHandling { + continue + } + handleErr = c.streamsMap.HandleStreamFrame(streamFrame, rcvTime) + } else if frameType.IsAckFrameType() { + ackFrame, l, err := c.frameParser.ParseAckFrame(frameType, data, encLevel, c.version) + if err != nil { + return false, false, nil, err + } + data = data[l:] + if log != nil { + frames = append(frames, toLoggingFrame(ackFrame)) + } + // an error occurred handling a previous frame, don't handle the current frame + if skipHandling { + continue + } + handleErr = c.handleAckFrame(ackFrame, encLevel, rcvTime) + } else if frameType.IsDatagramFrameType() { + datagramFrame, l, err := c.frameParser.ParseDatagramFrame(frameType, data, c.version) + if err != nil { + return false, false, nil, err + } + data = data[l:] + + if log != nil { + frames = append(frames, toLoggingFrame(datagramFrame)) + } + // an error occurred handling a previous frame, don't handle the current frame + if skipHandling { + continue + } + handleErr = c.handleDatagramFrame(datagramFrame) + } else { + frame, l, err := c.frameParser.ParseLessCommonFrame(frameType, data, c.version) + if err != nil { + return false, false, nil, err + } + data = data[l:] + + if log != nil { + frames = append(frames, toLoggingFrame(frame)) + } + // an error occurred handling a previous frame, don't handle the current frame + if skipHandling { + continue + } + pc, err := c.handleFrame(frame, encLevel, destConnID, rcvTime) + if pc != nil { + pathChallenge = pc + } + handleErr = err + } + + if handleErr != nil { + // if we're logging, we need to keep parsing (but not handling) all frames + skipHandling = true + if log == nil { + return false, false, nil, handleErr + } + } + } + + if log != nil { + log(frames) + if handleErr != nil { + return false, false, nil, handleErr + } + } + + // Handle completion of the handshake after processing all the frames. + // This ensures that we correctly handle the following case on the server side: + // We receive a Handshake packet that contains the CRYPTO frame that allows us to complete the handshake, + // and an ACK serialized after that CRYPTO frame. In this case, we still want to process the ACK frame. + if !handshakeWasComplete && c.handshakeComplete { + if err := c.handleHandshakeComplete(rcvTime); err != nil { + return false, false, nil, err + } + } + return +} + +func (c *Conn) handleFrame( + f wire.Frame, + encLevel protocol.EncryptionLevel, + destConnID protocol.ConnectionID, + rcvTime time.Time, +) (pathChallenge *wire.PathChallengeFrame, _ error) { + var err error + wire.LogFrame(c.logger, f, false) + switch frame := f.(type) { + case *wire.CryptoFrame: + err = c.handleCryptoFrame(frame, encLevel, rcvTime) + case *wire.ConnectionCloseFrame: + err = c.handleConnectionCloseFrame(frame) + case *wire.ResetStreamFrame: + err = c.streamsMap.HandleResetStreamFrame(frame, rcvTime) + case *wire.MaxDataFrame: + c.connFlowController.UpdateSendWindow(frame.MaximumData) + case *wire.MaxStreamDataFrame: + err = c.streamsMap.HandleMaxStreamDataFrame(frame) + case *wire.MaxStreamsFrame: + c.streamsMap.HandleMaxStreamsFrame(frame) + case *wire.DataBlockedFrame: + case *wire.StreamDataBlockedFrame: + err = c.streamsMap.HandleStreamDataBlockedFrame(frame) + case *wire.StreamsBlockedFrame: + case *wire.StopSendingFrame: + err = c.streamsMap.HandleStopSendingFrame(frame) + case *wire.PingFrame: + case *wire.PathChallengeFrame: + c.handlePathChallengeFrame(frame) + pathChallenge = frame + case *wire.PathResponseFrame: + err = c.handlePathResponseFrame(frame) + case *wire.NewTokenFrame: + err = c.handleNewTokenFrame(frame) + case *wire.NewConnectionIDFrame: + err = c.connIDManager.Add(frame) + case *wire.RetireConnectionIDFrame: + err = c.connIDGenerator.Retire(frame.SequenceNumber, destConnID, rcvTime.Add(3*c.rttStats.PTO(false))) + case *wire.HandshakeDoneFrame: + err = c.handleHandshakeDoneFrame(rcvTime) + default: + err = fmt.Errorf("unexpected frame type: %s", reflect.ValueOf(&frame).Elem().Type().Name()) + } + return pathChallenge, err +} + +// handlePacket is called by the server with a new packet +func (c *Conn) handlePacket(p receivedPacket) { + c.receivedPacketMx.Lock() + // Discard packets once the amount of queued packets is larger than + // the channel size, protocol.MaxConnUnprocessedPackets + if c.receivedPackets.Len() >= protocol.MaxConnUnprocessedPackets { + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(logging.PacketTypeNotDetermined, protocol.InvalidPacketNumber, p.Size(), logging.PacketDropDOSPrevention) + } + c.receivedPacketMx.Unlock() + return + } + c.receivedPackets.PushBack(p) + c.receivedPacketMx.Unlock() + + select { + case c.notifyReceivedPacket <- struct{}{}: + default: + } +} + +func (c *Conn) handleConnectionCloseFrame(frame *wire.ConnectionCloseFrame) error { + if frame.IsApplicationError { + return &qerr.ApplicationError{ + Remote: true, + ErrorCode: qerr.ApplicationErrorCode(frame.ErrorCode), + ErrorMessage: frame.ReasonPhrase, + } + } + return &qerr.TransportError{ + Remote: true, + ErrorCode: qerr.TransportErrorCode(frame.ErrorCode), + FrameType: frame.FrameType, + ErrorMessage: frame.ReasonPhrase, + } +} + +func (c *Conn) handleCryptoFrame(frame *wire.CryptoFrame, encLevel protocol.EncryptionLevel, rcvTime time.Time) error { + if err := c.cryptoStreamManager.HandleCryptoFrame(frame, encLevel); err != nil { + return err + } + for { + data := c.cryptoStreamManager.GetCryptoData(encLevel) + if data == nil { + break + } + if err := c.cryptoStreamHandler.HandleMessage(data, encLevel); err != nil { + return err + } + } + return c.handleHandshakeEvents(rcvTime) +} + +func (c *Conn) handleHandshakeEvents(now time.Time) error { + for { + ev := c.cryptoStreamHandler.NextEvent() + var err error + switch ev.Kind { + case handshake.EventNoEvent: + return nil + case handshake.EventHandshakeComplete: + // Don't call handleHandshakeComplete yet. + // It's advantageous to process ACK frames that might be serialized after the CRYPTO frame first. + c.handshakeComplete = true + case handshake.EventReceivedTransportParameters: + err = c.handleTransportParameters(ev.TransportParameters) + case handshake.EventRestoredTransportParameters: + c.restoreTransportParameters(ev.TransportParameters) + close(c.earlyConnReadyChan) + case handshake.EventReceivedReadKeys: + // queue all previously undecryptable packets + c.undecryptablePacketsToProcess = append(c.undecryptablePacketsToProcess, c.undecryptablePackets...) + c.undecryptablePackets = nil + case handshake.EventDiscard0RTTKeys: + err = c.dropEncryptionLevel(protocol.Encryption0RTT, now) + case handshake.EventWriteInitialData: + _, err = c.initialStream.Write(ev.Data) + case handshake.EventWriteHandshakeData: + _, err = c.handshakeStream.Write(ev.Data) + } + if err != nil { + return err + } + } +} + +func (c *Conn) handlePathChallengeFrame(f *wire.PathChallengeFrame) { + if c.perspective == protocol.PerspectiveClient { + c.queueControlFrame(&wire.PathResponseFrame{Data: f.Data}) + } +} + +func (c *Conn) handlePathResponseFrame(f *wire.PathResponseFrame) error { + switch c.perspective { + case protocol.PerspectiveClient: + return c.handlePathResponseFrameClient(f) + case protocol.PerspectiveServer: + return c.handlePathResponseFrameServer(f) + default: + panic("unreachable") + } +} + +func (c *Conn) handlePathResponseFrameClient(f *wire.PathResponseFrame) error { + pm := c.pathManagerOutgoing.Load() + if pm == nil { + return &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: "unexpected PATH_RESPONSE frame", + } + } + pm.HandlePathResponseFrame(f) + return nil +} + +func (c *Conn) handlePathResponseFrameServer(f *wire.PathResponseFrame) error { + if c.pathManager == nil { + // since we didn't send PATH_CHALLENGEs yet, we don't expect PATH_RESPONSEs + return &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: "unexpected PATH_RESPONSE frame", + } + } + c.pathManager.HandlePathResponseFrame(f) + return nil +} + +func (c *Conn) handleNewTokenFrame(frame *wire.NewTokenFrame) error { + if c.perspective == protocol.PerspectiveServer { + return &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: "received NEW_TOKEN frame from the client", + } + } + if c.config.TokenStore != nil { + c.config.TokenStore.Put(c.tokenStoreKey, &ClientToken{data: frame.Token, rtt: c.rttStats.SmoothedRTT()}) + } + return nil +} + +func (c *Conn) handleHandshakeDoneFrame(rcvTime time.Time) error { + if c.perspective == protocol.PerspectiveServer { + return &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: "received a HANDSHAKE_DONE frame", + } + } + if !c.handshakeConfirmed { + return c.handleHandshakeConfirmed(rcvTime) + } + return nil +} + +func (c *Conn) handleAckFrame(frame *wire.AckFrame, encLevel protocol.EncryptionLevel, rcvTime time.Time) error { + acked1RTTPacket, err := c.sentPacketHandler.ReceivedAck(frame, encLevel, c.lastPacketReceivedTime) + if err != nil { + return err + } + if !acked1RTTPacket { + return nil + } + // On the client side: If the packet acknowledged a 1-RTT packet, this confirms the handshake. + // This is only possible if the ACK was sent in a 1-RTT packet. + // This is an optimization over simply waiting for a HANDSHAKE_DONE frame, see section 4.1.2 of RFC 9001. + if c.perspective == protocol.PerspectiveClient && !c.handshakeConfirmed { + if err := c.handleHandshakeConfirmed(rcvTime); err != nil { + return err + } + } + // If one of the acknowledged packets was a Path MTU probe packet, this might have increased the Path MTU estimate. + if c.mtuDiscoverer != nil { + if mtu := c.mtuDiscoverer.CurrentSize(); mtu > protocol.ByteCount(c.currentMTUEstimate.Load()) { + c.currentMTUEstimate.Store(uint32(mtu)) + c.sentPacketHandler.SetMaxDatagramSize(mtu) + } + } + return c.cryptoStreamHandler.SetLargest1RTTAcked(frame.LargestAcked()) +} + +func (c *Conn) handleDatagramFrame(f *wire.DatagramFrame) error { + if f.Length(c.version) > wire.MaxDatagramSize { + return &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: "DATAGRAM frame too large", + } + } + c.datagramQueue.HandleDatagramFrame(f) + return nil +} + +func (c *Conn) setCloseError(e *closeError) { + c.closeErr.CompareAndSwap(nil, e) + select { + case c.closeChan <- struct{}{}: + default: + } +} + +// closeLocal closes the connection and send a CONNECTION_CLOSE containing the error +func (c *Conn) closeLocal(e error) { + c.setCloseError(&closeError{err: e, immediate: false}) +} + +// destroy closes the connection without sending the error on the wire +func (c *Conn) destroy(e error) { + c.destroyImpl(e) + <-c.ctx.Done() +} + +func (c *Conn) destroyImpl(e error) { + c.setCloseError(&closeError{err: e, immediate: true}) +} + +// CloseWithError closes the connection with an error. +// The error string will be sent to the peer. +func (c *Conn) CloseWithError(code ApplicationErrorCode, desc string) error { + c.closeLocal(&qerr.ApplicationError{ + ErrorCode: code, + ErrorMessage: desc, + }) + <-c.ctx.Done() + return nil +} + +func (c *Conn) closeWithTransportError(code TransportErrorCode) { + c.closeLocal(&qerr.TransportError{ErrorCode: code}) + <-c.ctx.Done() +} + +func (c *Conn) handleCloseError(closeErr *closeError) { + if closeErr.immediate { + if nerr, ok := closeErr.err.(net.Error); ok && nerr.Timeout() { + c.logger.Errorf("Destroying connection: %s", closeErr.err) + } else { + c.logger.Errorf("Destroying connection with error: %s", closeErr.err) + } + } else { + if closeErr.err == nil { + c.logger.Infof("Closing connection.") + } else { + c.logger.Errorf("Closing connection with error: %s", closeErr.err) + } + } + + e := closeErr.err + if e == nil { + e = &qerr.ApplicationError{} + } else { + defer func() { closeErr.err = e }() + } + + var ( + statelessResetErr *StatelessResetError + versionNegotiationErr *VersionNegotiationError + recreateErr *errCloseForRecreating + applicationErr *ApplicationError + transportErr *TransportError + ) + var isRemoteClose bool + switch { + case errors.Is(e, qerr.ErrIdleTimeout), + errors.Is(e, qerr.ErrHandshakeTimeout), + errors.As(e, &statelessResetErr), + errors.As(e, &versionNegotiationErr), + errors.As(e, &recreateErr): + case errors.As(e, &applicationErr): + isRemoteClose = applicationErr.Remote + case errors.As(e, &transportErr): + isRemoteClose = transportErr.Remote + case closeErr.immediate: + e = closeErr.err + default: + e = &qerr.TransportError{ + ErrorCode: qerr.InternalError, + ErrorMessage: e.Error(), + } + } + + c.streamsMap.CloseWithError(e) + if c.datagramQueue != nil { + c.datagramQueue.CloseWithError(e) + } + + // In rare instances, the connection ID manager might switch to a new connection ID + // when sending the CONNECTION_CLOSE frame. + // The connection ID manager removes the active stateless reset token from the packet + // handler map when it is closed, so we need to make sure that this happens last. + defer c.connIDManager.Close() + + if c.tracer != nil && c.tracer.ClosedConnection != nil && !errors.As(e, &recreateErr) { + c.tracer.ClosedConnection(e) + } + + // If this is a remote close we're done here + if isRemoteClose { + c.connIDGenerator.ReplaceWithClosed(nil, 3*c.rttStats.PTO(false)) + return + } + if closeErr.immediate { + c.connIDGenerator.RemoveAll() + return + } + // Don't send out any CONNECTION_CLOSE if this is an error that occurred + // before we even sent out the first packet. + if c.perspective == protocol.PerspectiveClient && !c.sentFirstPacket { + c.connIDGenerator.RemoveAll() + return + } + connClosePacket, err := c.sendConnectionClose(e) + if err != nil { + c.logger.Debugf("Error sending CONNECTION_CLOSE: %s", err) + } + c.connIDGenerator.ReplaceWithClosed(connClosePacket, 3*c.rttStats.PTO(false)) +} + +func (c *Conn) dropEncryptionLevel(encLevel protocol.EncryptionLevel, now time.Time) error { + if c.tracer != nil && c.tracer.DroppedEncryptionLevel != nil { + c.tracer.DroppedEncryptionLevel(encLevel) + } + c.sentPacketHandler.DropPackets(encLevel, now) + c.receivedPacketHandler.DropPackets(encLevel) + //nolint:exhaustive // only Initial and 0-RTT need special treatment + switch encLevel { + case protocol.EncryptionInitial: + c.droppedInitialKeys = true + c.cryptoStreamHandler.DiscardInitialKeys() + case protocol.Encryption0RTT: + c.streamsMap.ResetFor0RTT() + c.framer.Handle0RTTRejection() + return c.connFlowController.Reset() + } + return c.cryptoStreamManager.Drop(encLevel) +} + +// is called for the client, when restoring transport parameters saved for 0-RTT +func (c *Conn) restoreTransportParameters(params *wire.TransportParameters) { + if c.logger.Debug() { + c.logger.Debugf("Restoring Transport Parameters: %s", params) + } + + c.peerParams = params + c.connIDGenerator.SetMaxActiveConnIDs(params.ActiveConnectionIDLimit) + c.connFlowController.UpdateSendWindow(params.InitialMaxData) + c.streamsMap.HandleTransportParameters(params) + c.connStateMutex.Lock() + c.connState.SupportsDatagrams = c.supportsDatagrams() + c.connStateMutex.Unlock() +} + +func (c *Conn) handleTransportParameters(params *wire.TransportParameters) error { + if c.tracer != nil && c.tracer.ReceivedTransportParameters != nil { + c.tracer.ReceivedTransportParameters(params) + } + if err := c.checkTransportParameters(params); err != nil { + return &qerr.TransportError{ + ErrorCode: qerr.TransportParameterError, + ErrorMessage: err.Error(), + } + } + + if c.perspective == protocol.PerspectiveClient && c.peerParams != nil && c.ConnectionState().Used0RTT && !params.ValidForUpdate(c.peerParams) { + return &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: "server sent reduced limits after accepting 0-RTT data", + } + } + + c.peerParams = params + // On the client side we have to wait for handshake completion. + // During a 0-RTT connection, we are only allowed to use the new transport parameters for 1-RTT packets. + if c.perspective == protocol.PerspectiveServer { + c.applyTransportParameters() + // On the server side, the early connection is ready as soon as we processed + // the client's transport parameters. + close(c.earlyConnReadyChan) + } + + c.connStateMutex.Lock() + c.connState.SupportsDatagrams = c.supportsDatagrams() + c.connStateMutex.Unlock() + return nil +} + +func (c *Conn) checkTransportParameters(params *wire.TransportParameters) error { + if c.logger.Debug() { + c.logger.Debugf("Processed Transport Parameters: %s", params) + } + + // check the initial_source_connection_id + if params.InitialSourceConnectionID != c.handshakeDestConnID { + return fmt.Errorf("expected initial_source_connection_id to equal %s, is %s", c.handshakeDestConnID, params.InitialSourceConnectionID) + } + + if c.perspective == protocol.PerspectiveServer { + return nil + } + // check the original_destination_connection_id + if params.OriginalDestinationConnectionID != c.origDestConnID { + return fmt.Errorf("expected original_destination_connection_id to equal %s, is %s", c.origDestConnID, params.OriginalDestinationConnectionID) + } + if c.retrySrcConnID != nil { // a Retry was performed + if params.RetrySourceConnectionID == nil { + return errors.New("missing retry_source_connection_id") + } + if *params.RetrySourceConnectionID != *c.retrySrcConnID { + return fmt.Errorf("expected retry_source_connection_id to equal %s, is %s", c.retrySrcConnID, *params.RetrySourceConnectionID) + } + } else if params.RetrySourceConnectionID != nil { + return errors.New("received retry_source_connection_id, although no Retry was performed") + } + return nil +} + +func (c *Conn) applyTransportParameters() { + params := c.peerParams + // Our local idle timeout will always be > 0. + c.idleTimeout = c.config.MaxIdleTimeout + // If the peer advertised an idle timeout, take the minimum of the values. + if params.MaxIdleTimeout > 0 { + c.idleTimeout = min(c.idleTimeout, params.MaxIdleTimeout) + } + c.keepAliveInterval = min(c.config.KeepAlivePeriod, c.idleTimeout/2) + c.streamsMap.HandleTransportParameters(params) + c.frameParser.SetAckDelayExponent(params.AckDelayExponent) + c.connFlowController.UpdateSendWindow(params.InitialMaxData) + c.rttStats.SetMaxAckDelay(params.MaxAckDelay) + c.connIDGenerator.SetMaxActiveConnIDs(params.ActiveConnectionIDLimit) + if params.StatelessResetToken != nil { + c.connIDManager.SetStatelessResetToken(*params.StatelessResetToken) + } + // We don't support connection migration yet, so we don't have any use for the preferred_address. + if params.PreferredAddress != nil { + // Retire the connection ID. + c.connIDManager.AddFromPreferredAddress(params.PreferredAddress.ConnectionID, params.PreferredAddress.StatelessResetToken) + } + maxPacketSize := protocol.ByteCount(protocol.MaxPacketBufferSize) + if params.MaxUDPPayloadSize > 0 && params.MaxUDPPayloadSize < maxPacketSize { + maxPacketSize = params.MaxUDPPayloadSize + } + c.mtuDiscoverer = newMTUDiscoverer( + c.rttStats, + protocol.ByteCount(c.config.InitialPacketSize), + maxPacketSize, + c.tracer, + ) +} + +func (c *Conn) triggerSending(now time.Time) error { + c.pacingDeadline = time.Time{} + + sendMode := c.sentPacketHandler.SendMode(now) + switch sendMode { + case ackhandler.SendAny: + return c.sendPackets(now) + case ackhandler.SendNone: + return nil + case ackhandler.SendPacingLimited: + deadline := c.sentPacketHandler.TimeUntilSend() + if deadline.IsZero() { + deadline = deadlineSendImmediately + } + c.pacingDeadline = deadline + // Allow sending of an ACK if we're pacing limit. + // This makes sure that a peer that is mostly receiving data (and thus has an inaccurate cwnd estimate) + // sends enough ACKs to allow its peer to utilize the bandwidth. + fallthrough + case ackhandler.SendAck: + // We can at most send a single ACK only packet. + // There will only be a new ACK after receiving new packets. + // SendAck is only returned when we're congestion limited, so we don't need to set the pacing timer. + return c.maybeSendAckOnlyPacket(now) + case ackhandler.SendPTOInitial, ackhandler.SendPTOHandshake, ackhandler.SendPTOAppData: + if err := c.sendProbePacket(sendMode, now); err != nil { + return err + } + if c.sendQueue.WouldBlock() { + c.scheduleSending() + return nil + } + return c.triggerSending(now) + default: + return fmt.Errorf("BUG: invalid send mode %d", sendMode) + } +} + +func (c *Conn) sendPackets(now time.Time) error { + if c.perspective == protocol.PerspectiveClient && c.handshakeConfirmed { + if pm := c.pathManagerOutgoing.Load(); pm != nil { + connID, frame, tr, ok := pm.NextPathToProbe() + if ok { + probe, buf, err := c.packer.PackPathProbePacket(connID, []ackhandler.Frame{frame}, c.version) + if err != nil { + return err + } + c.logger.Debugf("sending path probe packet from %s", c.LocalAddr()) + c.logShortHeaderPacket(probe.DestConnID, probe.Ack, probe.Frames, probe.StreamFrames, probe.PacketNumber, probe.PacketNumberLen, probe.KeyPhase, protocol.ECNNon, buf.Len(), false) + c.registerPackedShortHeaderPacket(probe, protocol.ECNNon, now) + tr.WriteTo(buf.Data, c.conn.RemoteAddr()) + // There's (likely) more data to send. Loop around again. + c.scheduleSending() + return nil + } + } + } + + // Path MTU Discovery + // Can't use GSO, since we need to send a single packet that's larger than our current maximum size. + // Performance-wise, this doesn't matter, since we only send a very small (<10) number of + // MTU probe packets per connection. + if c.handshakeConfirmed && c.mtuDiscoverer != nil && c.mtuDiscoverer.ShouldSendProbe(now) { + ping, size := c.mtuDiscoverer.GetPing(now) + p, buf, err := c.packer.PackMTUProbePacket(ping, size, c.version) + if err != nil { + return err + } + ecn := c.sentPacketHandler.ECNMode(true) + c.logShortHeaderPacket(p.DestConnID, p.Ack, p.Frames, p.StreamFrames, p.PacketNumber, p.PacketNumberLen, p.KeyPhase, ecn, buf.Len(), false) + c.registerPackedShortHeaderPacket(p, ecn, now) + c.sendQueue.Send(buf, 0, ecn) + // There's (likely) more data to send. Loop around again. + c.scheduleSending() + return nil + } + + if offset := c.connFlowController.GetWindowUpdate(now); offset > 0 { + c.framer.QueueControlFrame(&wire.MaxDataFrame{MaximumData: offset}) + } + if cf := c.cryptoStreamManager.GetPostHandshakeData(protocol.MaxPostHandshakeCryptoFrameSize); cf != nil { + c.queueControlFrame(cf) + } + + if !c.handshakeConfirmed { + packet, err := c.packer.PackCoalescedPacket(false, c.maxPacketSize(), now, c.version) + if err != nil || packet == nil { + return err + } + c.sentFirstPacket = true + if err := c.sendPackedCoalescedPacket(packet, c.sentPacketHandler.ECNMode(packet.IsOnlyShortHeaderPacket()), now); err != nil { + return err + } + //nolint:exhaustive // only need to handle pacing-related events here + switch c.sentPacketHandler.SendMode(now) { + case ackhandler.SendPacingLimited: + c.resetPacingDeadline() + case ackhandler.SendAny: + c.pacingDeadline = deadlineSendImmediately + } + return nil + } + + if c.conn.capabilities().GSO { + return c.sendPacketsWithGSO(now) + } + return c.sendPacketsWithoutGSO(now) +} + +func (c *Conn) sendPacketsWithoutGSO(now time.Time) error { + for { + buf := getPacketBuffer() + ecn := c.sentPacketHandler.ECNMode(true) + if _, err := c.appendOneShortHeaderPacket(buf, c.maxPacketSize(), ecn, now); err != nil { + if err == errNothingToPack { + buf.Release() + return nil + } + return err + } + + c.sendQueue.Send(buf, 0, ecn) + + if c.sendQueue.WouldBlock() { + return nil + } + sendMode := c.sentPacketHandler.SendMode(now) + if sendMode == ackhandler.SendPacingLimited { + c.resetPacingDeadline() + return nil + } + if sendMode != ackhandler.SendAny { + return nil + } + // Prioritize receiving of packets over sending out more packets. + c.receivedPacketMx.Lock() + hasPackets := !c.receivedPackets.Empty() + c.receivedPacketMx.Unlock() + if hasPackets { + c.pacingDeadline = deadlineSendImmediately + return nil + } + } +} + +func (c *Conn) sendPacketsWithGSO(now time.Time) error { + buf := getLargePacketBuffer() + maxSize := c.maxPacketSize() + + ecn := c.sentPacketHandler.ECNMode(true) + for { + var dontSendMore bool + size, err := c.appendOneShortHeaderPacket(buf, maxSize, ecn, now) + if err != nil { + if err != errNothingToPack { + return err + } + if buf.Len() == 0 { + buf.Release() + return nil + } + dontSendMore = true + } + + if !dontSendMore { + sendMode := c.sentPacketHandler.SendMode(now) + if sendMode == ackhandler.SendPacingLimited { + c.resetPacingDeadline() + } + if sendMode != ackhandler.SendAny { + dontSendMore = true + } + } + + // Don't send more packets in this batch if they require a different ECN marking than the previous ones. + nextECN := c.sentPacketHandler.ECNMode(true) + + // Append another packet if + // 1. The congestion controller and pacer allow sending more + // 2. The last packet appended was a full-size packet + // 3. The next packet will have the same ECN marking + // 4. We still have enough space for another full-size packet in the buffer + if !dontSendMore && size == maxSize && nextECN == ecn && buf.Len()+maxSize <= buf.Cap() { + continue + } + + c.sendQueue.Send(buf, uint16(maxSize), ecn) + + if dontSendMore { + return nil + } + if c.sendQueue.WouldBlock() { + return nil + } + + // Prioritize receiving of packets over sending out more packets. + c.receivedPacketMx.Lock() + hasPackets := !c.receivedPackets.Empty() + c.receivedPacketMx.Unlock() + if hasPackets { + c.pacingDeadline = deadlineSendImmediately + return nil + } + + ecn = nextECN + buf = getLargePacketBuffer() + } +} + +func (c *Conn) resetPacingDeadline() { + deadline := c.sentPacketHandler.TimeUntilSend() + if deadline.IsZero() { + deadline = deadlineSendImmediately + } + c.pacingDeadline = deadline +} + +func (c *Conn) maybeSendAckOnlyPacket(now time.Time) error { + if !c.handshakeConfirmed { + ecn := c.sentPacketHandler.ECNMode(false) + packet, err := c.packer.PackCoalescedPacket(true, c.maxPacketSize(), now, c.version) + if err != nil { + return err + } + if packet == nil { + return nil + } + return c.sendPackedCoalescedPacket(packet, ecn, now) + } + + ecn := c.sentPacketHandler.ECNMode(true) + p, buf, err := c.packer.PackAckOnlyPacket(c.maxPacketSize(), now, c.version) + if err != nil { + if err == errNothingToPack { + return nil + } + return err + } + c.logShortHeaderPacket(p.DestConnID, p.Ack, p.Frames, p.StreamFrames, p.PacketNumber, p.PacketNumberLen, p.KeyPhase, ecn, buf.Len(), false) + c.registerPackedShortHeaderPacket(p, ecn, now) + c.sendQueue.Send(buf, 0, ecn) + return nil +} + +func (c *Conn) sendProbePacket(sendMode ackhandler.SendMode, now time.Time) error { + var encLevel protocol.EncryptionLevel + //nolint:exhaustive // We only need to handle the PTO send modes here. + switch sendMode { + case ackhandler.SendPTOInitial: + encLevel = protocol.EncryptionInitial + case ackhandler.SendPTOHandshake: + encLevel = protocol.EncryptionHandshake + case ackhandler.SendPTOAppData: + encLevel = protocol.Encryption1RTT + default: + return fmt.Errorf("connection BUG: unexpected send mode: %d", sendMode) + } + // Queue probe packets until we actually send out a packet, + // or until there are no more packets to queue. + var packet *coalescedPacket + for packet == nil { + if wasQueued := c.sentPacketHandler.QueueProbePacket(encLevel); !wasQueued { + break + } + var err error + packet, err = c.packer.PackPTOProbePacket(encLevel, c.maxPacketSize(), false, now, c.version) + if err != nil { + return err + } + } + if packet == nil { + var err error + packet, err = c.packer.PackPTOProbePacket(encLevel, c.maxPacketSize(), true, now, c.version) + if err != nil { + return err + } + } + if packet == nil || (len(packet.longHdrPackets) == 0 && packet.shortHdrPacket == nil) { + return fmt.Errorf("connection BUG: couldn't pack %s probe packet: %v", encLevel, packet) + } + return c.sendPackedCoalescedPacket(packet, c.sentPacketHandler.ECNMode(packet.IsOnlyShortHeaderPacket()), now) +} + +// appendOneShortHeaderPacket appends a new packet to the given packetBuffer. +// If there was nothing to pack, the returned size is 0. +func (c *Conn) appendOneShortHeaderPacket(buf *packetBuffer, maxSize protocol.ByteCount, ecn protocol.ECN, now time.Time) (protocol.ByteCount, error) { + startLen := buf.Len() + p, err := c.packer.AppendPacket(buf, maxSize, now, c.version) + if err != nil { + return 0, err + } + size := buf.Len() - startLen + c.logShortHeaderPacket(p.DestConnID, p.Ack, p.Frames, p.StreamFrames, p.PacketNumber, p.PacketNumberLen, p.KeyPhase, ecn, size, false) + c.registerPackedShortHeaderPacket(p, ecn, now) + return size, nil +} + +func (c *Conn) registerPackedShortHeaderPacket(p shortHeaderPacket, ecn protocol.ECN, now time.Time) { + if p.IsPathProbePacket { + c.sentPacketHandler.SentPacket( + now, + p.PacketNumber, + protocol.InvalidPacketNumber, + p.StreamFrames, + p.Frames, + protocol.Encryption1RTT, + ecn, + p.Length, + p.IsPathMTUProbePacket, + true, + ) + return + } + if c.firstAckElicitingPacketAfterIdleSentTime.IsZero() && (len(p.StreamFrames) > 0 || ackhandler.HasAckElicitingFrames(p.Frames)) { + c.firstAckElicitingPacketAfterIdleSentTime = now + } + + largestAcked := protocol.InvalidPacketNumber + if p.Ack != nil { + largestAcked = p.Ack.LargestAcked() + } + c.sentPacketHandler.SentPacket( + now, + p.PacketNumber, + largestAcked, + p.StreamFrames, + p.Frames, + protocol.Encryption1RTT, + ecn, + p.Length, + p.IsPathMTUProbePacket, + false, + ) + c.connIDManager.SentPacket() +} + +func (c *Conn) sendPackedCoalescedPacket(packet *coalescedPacket, ecn protocol.ECN, now time.Time) error { + c.logCoalescedPacket(packet, ecn) + for _, p := range packet.longHdrPackets { + if c.firstAckElicitingPacketAfterIdleSentTime.IsZero() && p.IsAckEliciting() { + c.firstAckElicitingPacketAfterIdleSentTime = now + } + largestAcked := protocol.InvalidPacketNumber + if p.ack != nil { + largestAcked = p.ack.LargestAcked() + } + c.sentPacketHandler.SentPacket( + now, + p.header.PacketNumber, + largestAcked, + p.streamFrames, + p.frames, + p.EncryptionLevel(), + ecn, + p.length, + false, + false, + ) + if c.perspective == protocol.PerspectiveClient && p.EncryptionLevel() == protocol.EncryptionHandshake && + !c.droppedInitialKeys { + // On the client side, Initial keys are dropped as soon as the first Handshake packet is sent. + // See Section 4.9.1 of RFC 9001. + if err := c.dropEncryptionLevel(protocol.EncryptionInitial, now); err != nil { + return err + } + } + } + if p := packet.shortHdrPacket; p != nil { + if c.firstAckElicitingPacketAfterIdleSentTime.IsZero() && p.IsAckEliciting() { + c.firstAckElicitingPacketAfterIdleSentTime = now + } + largestAcked := protocol.InvalidPacketNumber + if p.Ack != nil { + largestAcked = p.Ack.LargestAcked() + } + c.sentPacketHandler.SentPacket( + now, + p.PacketNumber, + largestAcked, + p.StreamFrames, + p.Frames, + protocol.Encryption1RTT, + ecn, + p.Length, + p.IsPathMTUProbePacket, + false, + ) + } + c.connIDManager.SentPacket() + c.sendQueue.Send(packet.buffer, 0, ecn) + return nil +} + +func (c *Conn) sendConnectionClose(e error) ([]byte, error) { + var packet *coalescedPacket + var err error + var transportErr *qerr.TransportError + var applicationErr *qerr.ApplicationError + if errors.As(e, &transportErr) { + packet, err = c.packer.PackConnectionClose(transportErr, c.maxPacketSize(), c.version) + } else if errors.As(e, &applicationErr) { + packet, err = c.packer.PackApplicationClose(applicationErr, c.maxPacketSize(), c.version) + } else { + packet, err = c.packer.PackConnectionClose(&qerr.TransportError{ + ErrorCode: qerr.InternalError, + ErrorMessage: fmt.Sprintf("connection BUG: unspecified error type (msg: %s)", e.Error()), + }, c.maxPacketSize(), c.version) + } + if err != nil { + return nil, err + } + ecn := c.sentPacketHandler.ECNMode(packet.IsOnlyShortHeaderPacket()) + c.logCoalescedPacket(packet, ecn) + return packet.buffer.Data, c.conn.Write(packet.buffer.Data, 0, ecn) +} + +func (c *Conn) maxPacketSize() protocol.ByteCount { + if c.mtuDiscoverer == nil { + // Use the configured packet size on the client side. + // If the server sends a max_udp_payload_size that's smaller than this size, we can ignore this: + // Apparently the server still processed the (fully padded) Initial packet anyway. + if c.perspective == protocol.PerspectiveClient { + return protocol.ByteCount(c.config.InitialPacketSize) + } + // On the server side, there's no downside to using 1200 bytes until we received the client's transport + // parameters: + // * If the first packet didn't contain the entire ClientHello, all we can do is ACK that packet. We don't + // need a lot of bytes for that. + // * If it did, we will have processed the transport parameters and initialized the MTU discoverer. + return protocol.MinInitialPacketSize + } + return c.mtuDiscoverer.CurrentSize() +} + +// AcceptStream returns the next stream opened by the peer, blocking until one is available. +func (c *Conn) AcceptStream(ctx context.Context) (*Stream, error) { + return c.streamsMap.AcceptStream(ctx) +} + +// AcceptUniStream returns the next unidirectional stream opened by the peer, blocking until one is available. +func (c *Conn) AcceptUniStream(ctx context.Context) (*ReceiveStream, error) { + return c.streamsMap.AcceptUniStream(ctx) +} + +// OpenStream opens a new bidirectional QUIC stream. +// There is no signaling to the peer about new streams: +// The peer can only accept the stream after data has been sent on the stream, +// or the stream has been reset or closed. +// When reaching the peer's stream limit, it is not possible to open a new stream until the +// peer raises the stream limit. In that case, a [StreamLimitReachedError] is returned. +func (c *Conn) OpenStream() (*Stream, error) { + return c.streamsMap.OpenStream() +} + +// OpenStreamSync opens a new bidirectional QUIC stream. +// It blocks until a new stream can be opened. +// There is no signaling to the peer about new streams: +// The peer can only accept the stream after data has been sent on the stream, +// or the stream has been reset or closed. +func (c *Conn) OpenStreamSync(ctx context.Context) (*Stream, error) { + return c.streamsMap.OpenStreamSync(ctx) +} + +// OpenUniStream opens a new outgoing unidirectional QUIC stream. +// There is no signaling to the peer about new streams: +// The peer can only accept the stream after data has been sent on the stream, +// or the stream has been reset or closed. +// When reaching the peer's stream limit, it is not possible to open a new stream until the +// peer raises the stream limit. In that case, a [StreamLimitReachedError] is returned. +func (c *Conn) OpenUniStream() (*SendStream, error) { + return c.streamsMap.OpenUniStream() +} + +// OpenUniStreamSync opens a new outgoing unidirectional QUIC stream. +// It blocks until a new stream can be opened. +// There is no signaling to the peer about new streams: +// The peer can only accept the stream after data has been sent on the stream, +// or the stream has been reset or closed. +func (c *Conn) OpenUniStreamSync(ctx context.Context) (*SendStream, error) { + return c.streamsMap.OpenUniStreamSync(ctx) +} + +func (c *Conn) newFlowController(id protocol.StreamID) flowcontrol.StreamFlowController { + initialSendWindow := c.peerParams.InitialMaxStreamDataUni + if id.Type() == protocol.StreamTypeBidi { + if id.InitiatedBy() == c.perspective { + initialSendWindow = c.peerParams.InitialMaxStreamDataBidiRemote + } else { + initialSendWindow = c.peerParams.InitialMaxStreamDataBidiLocal + } + } + return flowcontrol.NewStreamFlowController( + id, + c.connFlowController, + protocol.ByteCount(c.config.InitialStreamReceiveWindow), + protocol.ByteCount(c.config.MaxStreamReceiveWindow), + initialSendWindow, + c.rttStats, + c.logger, + ) +} + +// scheduleSending signals that we have data for sending +func (c *Conn) scheduleSending() { + select { + case c.sendingScheduled <- struct{}{}: + default: + } +} + +// tryQueueingUndecryptablePacket queues a packet for which we're missing the decryption keys. +// The logging.PacketType is only used for logging purposes. +func (c *Conn) tryQueueingUndecryptablePacket(p receivedPacket, pt logging.PacketType) { + if c.handshakeComplete { + panic("shouldn't queue undecryptable packets after handshake completion") + } + if len(c.undecryptablePackets)+1 > protocol.MaxUndecryptablePackets { + if c.tracer != nil && c.tracer.DroppedPacket != nil { + c.tracer.DroppedPacket(pt, protocol.InvalidPacketNumber, p.Size(), logging.PacketDropDOSPrevention) + } + c.logger.Infof("Dropping undecryptable packet (%d bytes). Undecryptable packet queue full.", p.Size()) + return + } + c.logger.Infof("Queueing packet (%d bytes) for later decryption", p.Size()) + if c.tracer != nil && c.tracer.BufferedPacket != nil { + c.tracer.BufferedPacket(pt, p.Size()) + } + c.undecryptablePackets = append(c.undecryptablePackets, p) +} + +func (c *Conn) queueControlFrame(f wire.Frame) { + c.framer.QueueControlFrame(f) + c.scheduleSending() +} + +func (c *Conn) onHasConnectionData() { c.scheduleSending() } + +func (c *Conn) onHasStreamData(id protocol.StreamID, str *SendStream) { + c.framer.AddActiveStream(id, str) + c.scheduleSending() +} + +func (c *Conn) onHasStreamControlFrame(id protocol.StreamID, str streamControlFrameGetter) { + c.framer.AddStreamWithControlFrames(id, str) + c.scheduleSending() +} + +func (c *Conn) onStreamCompleted(id protocol.StreamID) { + if err := c.streamsMap.DeleteStream(id); err != nil { + c.closeLocal(err) + } + c.framer.RemoveActiveStream(id) +} + +// SendDatagram sends a message using a QUIC datagram, as specified in RFC 9221, +// if the peer enabled datagram support. +// There is no delivery guarantee for DATAGRAM frames, they are not retransmitted if lost. +// The payload of the datagram needs to fit into a single QUIC packet. +// In addition, a datagram may be dropped before being sent out if the available packet size suddenly decreases. +// If the payload is too large to be sent at the current time, a DatagramTooLargeError is returned. +func (c *Conn) SendDatagram(p []byte) error { + if !c.supportsDatagrams() { + return errors.New("datagram support disabled") + } + + f := &wire.DatagramFrame{DataLenPresent: true} + // The payload size estimate is conservative. + // Under many circumstances we could send a few more bytes. + maxDataLen := min( + f.MaxDataLen(c.peerParams.MaxDatagramFrameSize, c.version), + protocol.ByteCount(c.currentMTUEstimate.Load()), + ) + if protocol.ByteCount(len(p)) > maxDataLen { + return &DatagramTooLargeError{MaxDatagramPayloadSize: int64(maxDataLen)} + } + f.Data = make([]byte, len(p)) + copy(f.Data, p) + return c.datagramQueue.Add(f) +} + +// ReceiveDatagram gets a message received in a QUIC datagram, as specified in RFC 9221. +func (c *Conn) ReceiveDatagram(ctx context.Context) ([]byte, error) { + if !c.config.EnableDatagrams { + return nil, errors.New("datagram support disabled") + } + return c.datagramQueue.Receive(ctx) +} + +// LocalAddr returns the local address of the QUIC connection. +func (c *Conn) LocalAddr() net.Addr { return c.conn.LocalAddr() } + +// RemoteAddr returns the remote address of the QUIC connection. +func (c *Conn) RemoteAddr() net.Addr { return c.conn.RemoteAddr() } + +func (c *Conn) getPathManager() *pathManagerOutgoing { + c.pathManagerOutgoing.CompareAndSwap(nil, + func() *pathManagerOutgoing { // this function is only called if a swap is performed + return newPathManagerOutgoing( + c.connIDManager.GetConnIDForPath, + c.connIDManager.RetireConnIDForPath, + c.scheduleSending, + ) + }(), + ) + return c.pathManagerOutgoing.Load() +} + +func (c *Conn) AddPath(t *Transport) (*Path, error) { + if c.perspective == protocol.PerspectiveServer { + return nil, errors.New("server cannot initiate connection migration") + } + if c.peerParams.DisableActiveMigration { + return nil, errors.New("server disabled connection migration") + } + if err := t.init(false); err != nil { + return nil, err + } + return c.getPathManager().NewPath( + t, + 200*time.Millisecond, // initial RTT estimate + func() { + runner := (*packetHandlerMap)(t) + c.connIDGenerator.AddConnRunner( + runner, + connRunnerCallbacks{ + AddConnectionID: func(connID protocol.ConnectionID) { runner.Add(connID, c) }, + RemoveConnectionID: runner.Remove, + ReplaceWithClosed: runner.ReplaceWithClosed, + }, + ) + }, + ), nil +} + +// HandshakeComplete blocks until the handshake completes (or fails). +// For the client, data sent before completion of the handshake is encrypted with 0-RTT keys. +// For the server, data sent before completion of the handshake is encrypted with 1-RTT keys, +// however the client's identity is only verified once the handshake completes. +func (c *Conn) HandshakeComplete() <-chan struct{} { + return c.handshakeCompleteChan +} + +func (c *Conn) NextConnection(ctx context.Context) (*Conn, error) { + // The handshake might fail after the server rejected 0-RTT. + // This could happen if the Finished message is malformed or never received. + select { + case <-ctx.Done(): + return nil, context.Cause(ctx) + case <-c.Context().Done(): + case <-c.HandshakeComplete(): + c.streamsMap.UseResetMaps() + } + return c, nil +} + +// estimateMaxPayloadSize estimates the maximum payload size for short header packets. +// It is not very sophisticated: it just subtracts the size of header (assuming the maximum +// connection ID length), and the size of the encryption tag. +func estimateMaxPayloadSize(mtu protocol.ByteCount) protocol.ByteCount { + return mtu - 1 /* type byte */ - 20 /* maximum connection ID length */ - 16 /* tag size */ +} diff --git a/vendor/github.com/quic-go/quic-go/connection_logging.go b/vendor/github.com/quic-go/quic-go/connection_logging.go new file mode 100644 index 0000000..5ea12d1 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/connection_logging.go @@ -0,0 +1,168 @@ +package quic + +import ( + "slices" + + "github.com/quic-go/quic-go/internal/ackhandler" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/wire" + "github.com/quic-go/quic-go/logging" +) + +// ConvertFrame converts a wire.Frame into a logging.Frame. +// This makes it possible for external packages to access the frames. +// Furthermore, it removes the data slices from CRYPTO and STREAM frames. +func toLoggingFrame(frame wire.Frame) logging.Frame { + switch f := frame.(type) { + case *wire.AckFrame: + // We use a pool for ACK frames. + // Implementations of the tracer interface may hold on to frames, so we need to make a copy here. + return toLoggingAckFrame(f) + case *wire.CryptoFrame: + return &logging.CryptoFrame{ + Offset: f.Offset, + Length: protocol.ByteCount(len(f.Data)), + } + case *wire.StreamFrame: + return &logging.StreamFrame{ + StreamID: f.StreamID, + Offset: f.Offset, + Length: f.DataLen(), + Fin: f.Fin, + } + case *wire.DatagramFrame: + return &logging.DatagramFrame{ + Length: logging.ByteCount(len(f.Data)), + } + default: + return logging.Frame(frame) + } +} + +func toLoggingAckFrame(f *wire.AckFrame) *logging.AckFrame { + ack := &logging.AckFrame{ + AckRanges: slices.Clone(f.AckRanges), + DelayTime: f.DelayTime, + ECNCE: f.ECNCE, + ECT0: f.ECT0, + ECT1: f.ECT1, + } + return ack +} + +func (c *Conn) logLongHeaderPacket(p *longHeaderPacket, ecn protocol.ECN) { + // quic-go logging + if c.logger.Debug() { + p.header.Log(c.logger) + if p.ack != nil { + wire.LogFrame(c.logger, p.ack, true) + } + for _, frame := range p.frames { + wire.LogFrame(c.logger, frame.Frame, true) + } + for _, frame := range p.streamFrames { + wire.LogFrame(c.logger, frame.Frame, true) + } + } + + // tracing + if c.tracer != nil && c.tracer.SentLongHeaderPacket != nil { + frames := make([]logging.Frame, 0, len(p.frames)) + for _, f := range p.frames { + frames = append(frames, toLoggingFrame(f.Frame)) + } + for _, f := range p.streamFrames { + frames = append(frames, toLoggingFrame(f.Frame)) + } + var ack *logging.AckFrame + if p.ack != nil { + ack = toLoggingAckFrame(p.ack) + } + c.tracer.SentLongHeaderPacket(p.header, p.length, ecn, ack, frames) + } +} + +func (c *Conn) logShortHeaderPacket( + destConnID protocol.ConnectionID, + ackFrame *wire.AckFrame, + frames []ackhandler.Frame, + streamFrames []ackhandler.StreamFrame, + pn protocol.PacketNumber, + pnLen protocol.PacketNumberLen, + kp protocol.KeyPhaseBit, + ecn protocol.ECN, + size protocol.ByteCount, + isCoalesced bool, +) { + if c.logger.Debug() && !isCoalesced { + c.logger.Debugf("-> Sending packet %d (%d bytes) for connection %s, 1-RTT (ECN: %s)", pn, size, c.logID, ecn) + } + // quic-go logging + if c.logger.Debug() { + wire.LogShortHeader(c.logger, destConnID, pn, pnLen, kp) + if ackFrame != nil { + wire.LogFrame(c.logger, ackFrame, true) + } + for _, f := range frames { + wire.LogFrame(c.logger, f.Frame, true) + } + for _, f := range streamFrames { + wire.LogFrame(c.logger, f.Frame, true) + } + } + + // tracing + if c.tracer != nil && c.tracer.SentShortHeaderPacket != nil { + fs := make([]logging.Frame, 0, len(frames)+len(streamFrames)) + for _, f := range frames { + fs = append(fs, toLoggingFrame(f.Frame)) + } + for _, f := range streamFrames { + fs = append(fs, toLoggingFrame(f.Frame)) + } + var ack *logging.AckFrame + if ackFrame != nil { + ack = toLoggingAckFrame(ackFrame) + } + c.tracer.SentShortHeaderPacket( + &logging.ShortHeader{DestConnectionID: destConnID, PacketNumber: pn, PacketNumberLen: pnLen, KeyPhase: kp}, + size, + ecn, + ack, + fs, + ) + } +} + +func (c *Conn) logCoalescedPacket(packet *coalescedPacket, ecn protocol.ECN) { + if c.logger.Debug() { + // There's a short period between dropping both Initial and Handshake keys and completion of the handshake, + // during which we might call PackCoalescedPacket but just pack a short header packet. + if len(packet.longHdrPackets) == 0 && packet.shortHdrPacket != nil { + c.logShortHeaderPacket( + packet.shortHdrPacket.DestConnID, + packet.shortHdrPacket.Ack, + packet.shortHdrPacket.Frames, + packet.shortHdrPacket.StreamFrames, + packet.shortHdrPacket.PacketNumber, + packet.shortHdrPacket.PacketNumberLen, + packet.shortHdrPacket.KeyPhase, + ecn, + packet.shortHdrPacket.Length, + false, + ) + return + } + if len(packet.longHdrPackets) > 1 { + c.logger.Debugf("-> Sending coalesced packet (%d parts, %d bytes) for connection %s", len(packet.longHdrPackets), packet.buffer.Len(), c.logID) + } else { + c.logger.Debugf("-> Sending packet %d (%d bytes) for connection %s, %s", packet.longHdrPackets[0].header.PacketNumber, packet.buffer.Len(), c.logID, packet.longHdrPackets[0].EncryptionLevel()) + } + } + for _, p := range packet.longHdrPackets { + c.logLongHeaderPacket(p, ecn) + } + if p := packet.shortHdrPacket; p != nil { + c.logShortHeaderPacket(p.DestConnID, p.Ack, p.Frames, p.StreamFrames, p.PacketNumber, p.PacketNumberLen, p.KeyPhase, ecn, p.Length, true) + } +} diff --git a/vendor/github.com/quic-go/quic-go/connection_timer.go b/vendor/github.com/quic-go/quic-go/connection_timer.go new file mode 100644 index 0000000..0fdc8cb --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/connection_timer.go @@ -0,0 +1,54 @@ +package quic + +import ( + "time" + + "github.com/quic-go/quic-go/internal/utils" +) + +var deadlineSendImmediately = time.Time{}.Add(42 * time.Millisecond) // any value > time.Time{} and before time.Now() is fine + +type connectionTimer struct { + timer *utils.Timer + last time.Time +} + +func newTimer() *connectionTimer { + return &connectionTimer{timer: utils.NewTimer()} +} + +func (t *connectionTimer) SetRead() { + if deadline := t.timer.Deadline(); deadline != deadlineSendImmediately { + t.last = deadline + } + t.timer.SetRead() +} + +func (t *connectionTimer) Chan() <-chan time.Time { + return t.timer.Chan() +} + +// SetTimer resets the timer. +// It makes sure that the deadline is strictly increasing. +// This prevents busy-looping in cases where the timer fires, but we can't actually send out a packet. +// This doesn't apply to the pacing deadline, which can be set multiple times to deadlineSendImmediately. +func (t *connectionTimer) SetTimer(idleTimeoutOrKeepAlive, connIDRetirement, ackAlarm, lossTime, pacing time.Time) { + deadline := idleTimeoutOrKeepAlive + if !connIDRetirement.IsZero() && connIDRetirement.Before(deadline) && connIDRetirement.After(t.last) { + deadline = connIDRetirement + } + if !ackAlarm.IsZero() && ackAlarm.Before(deadline) && ackAlarm.After(t.last) { + deadline = ackAlarm + } + if !lossTime.IsZero() && lossTime.Before(deadline) && lossTime.After(t.last) { + deadline = lossTime + } + if !pacing.IsZero() && pacing.Before(deadline) { + deadline = pacing + } + t.timer.Reset(deadline) +} + +func (t *connectionTimer) Stop() { + t.timer.Stop() +} diff --git a/vendor/github.com/quic-go/quic-go/crypto_stream.go b/vendor/github.com/quic-go/quic-go/crypto_stream.go new file mode 100644 index 0000000..6d39aa0 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/crypto_stream.go @@ -0,0 +1,249 @@ +package quic + +import ( + "errors" + "fmt" + "io" + "os" + "slices" + "strconv" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/wire" +) + +const disableClientHelloScramblingEnv = "QUIC_GO_DISABLE_CLIENTHELLO_SCRAMBLING" + +// The baseCryptoStream is used by the cryptoStream and the initialCryptoStream. +// This allows us to implement different logic for PopCryptoFrame for the two streams. +type baseCryptoStream struct { + queue frameSorter + + highestOffset protocol.ByteCount + finished bool + + writeOffset protocol.ByteCount + writeBuf []byte +} + +func newCryptoStream() *cryptoStream { + return &cryptoStream{baseCryptoStream{queue: *newFrameSorter()}} +} + +func (s *baseCryptoStream) HandleCryptoFrame(f *wire.CryptoFrame) error { + highestOffset := f.Offset + protocol.ByteCount(len(f.Data)) + if maxOffset := highestOffset; maxOffset > protocol.MaxCryptoStreamOffset { + return &qerr.TransportError{ + ErrorCode: qerr.CryptoBufferExceeded, + ErrorMessage: fmt.Sprintf("received invalid offset %d on crypto stream, maximum allowed %d", maxOffset, protocol.MaxCryptoStreamOffset), + } + } + if s.finished { + if highestOffset > s.highestOffset { + // reject crypto data received after this stream was already finished + return &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: "received crypto data after change of encryption level", + } + } + // ignore data with a smaller offset than the highest received + // could e.g. be a retransmission + return nil + } + s.highestOffset = max(s.highestOffset, highestOffset) + return s.queue.Push(f.Data, f.Offset, nil) +} + +// GetCryptoData retrieves data that was received in CRYPTO frames +func (s *baseCryptoStream) GetCryptoData() []byte { + _, data, _ := s.queue.Pop() + return data +} + +func (s *baseCryptoStream) Finish() error { + if s.queue.HasMoreData() { + return &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: "encryption level changed, but crypto stream has more data to read", + } + } + s.finished = true + return nil +} + +// Writes writes data that should be sent out in CRYPTO frames +func (s *baseCryptoStream) Write(p []byte) (int, error) { + s.writeBuf = append(s.writeBuf, p...) + return len(p), nil +} + +func (s *baseCryptoStream) HasData() bool { + return len(s.writeBuf) > 0 +} + +func (s *baseCryptoStream) PopCryptoFrame(maxLen protocol.ByteCount) *wire.CryptoFrame { + f := &wire.CryptoFrame{Offset: s.writeOffset} + n := min(f.MaxDataLen(maxLen), protocol.ByteCount(len(s.writeBuf))) + if n <= 0 { + return nil + } + f.Data = s.writeBuf[:n] + s.writeBuf = s.writeBuf[n:] + s.writeOffset += n + return f +} + +type cryptoStream struct { + baseCryptoStream +} + +type clientHelloCut struct { + start protocol.ByteCount + end protocol.ByteCount +} + +type initialCryptoStream struct { + baseCryptoStream + + scramble bool + end protocol.ByteCount + cuts [2]clientHelloCut +} + +func newInitialCryptoStream(isClient bool) *initialCryptoStream { + var scramble bool + if isClient { + disabled, err := strconv.ParseBool(os.Getenv(disableClientHelloScramblingEnv)) + scramble = err != nil || !disabled + } + s := &initialCryptoStream{ + baseCryptoStream: baseCryptoStream{queue: *newFrameSorter()}, + scramble: scramble, + } + for i := range len(s.cuts) { + s.cuts[i].start = protocol.InvalidByteCount + s.cuts[i].end = protocol.InvalidByteCount + } + return s +} + +func (s *initialCryptoStream) HasData() bool { + // The ClientHello might be written in multiple parts. + // In order to correctly split the ClientHello, we need the entire ClientHello has been queued. + if s.scramble && s.writeOffset == 0 && s.cuts[0].start == protocol.InvalidByteCount { + return false + } + return s.baseCryptoStream.HasData() +} + +func (s *initialCryptoStream) Write(p []byte) (int, error) { + s.writeBuf = append(s.writeBuf, p...) + if !s.scramble { + return len(p), nil + } + if s.cuts[0].start == protocol.InvalidByteCount { + sniPos, sniLen, echPos, err := findSNIAndECH(s.writeBuf) + if errors.Is(err, io.ErrUnexpectedEOF) { + return len(p), nil + } + if err != nil { + return len(p), err + } + if sniPos == -1 && echPos == -1 { + // Neither SNI nor ECH found. + // There's nothing to scramble. + s.scramble = false + return len(p), nil + } + s.end = protocol.ByteCount(len(s.writeBuf)) + s.cuts[0].start = protocol.ByteCount(sniPos + sniLen/2) // right in the middle + s.cuts[0].end = protocol.ByteCount(sniPos + sniLen) + if echPos > 0 { + // ECH extension found, cut the ECH extension type value (a uint16) in half + start := protocol.ByteCount(echPos + 1) + s.cuts[1].start = start + // cut somewhere (16 bytes), most likely in the ECH extension value + s.cuts[1].end = min(start+16, s.end) + } + slices.SortFunc(s.cuts[:], func(a, b clientHelloCut) int { + if a.start == protocol.InvalidByteCount { + return 1 + } + if a.start > b.start { + return 1 + } + return -1 + }) + } + return len(p), nil +} + +func (s *initialCryptoStream) PopCryptoFrame(maxLen protocol.ByteCount) *wire.CryptoFrame { + if !s.scramble { + return s.baseCryptoStream.PopCryptoFrame(maxLen) + } + + // send out the skipped parts + if s.writeOffset == s.end { + var foundCuts bool + var f *wire.CryptoFrame + for i, c := range s.cuts { + if c.start == protocol.InvalidByteCount { + continue + } + foundCuts = true + if f != nil { + break + } + f = &wire.CryptoFrame{Offset: c.start} + n := min(f.MaxDataLen(maxLen), c.end-c.start) + if n <= 0 { + return nil + } + f.Data = s.writeBuf[c.start : c.start+n] + s.cuts[i].start += n + if s.cuts[i].start == c.end { + s.cuts[i].start = protocol.InvalidByteCount + s.cuts[i].end = protocol.InvalidByteCount + foundCuts = false + } + } + if !foundCuts { + // no more cuts found, we're done sending out everything up until s.end + s.writeBuf = s.writeBuf[s.end:] + s.end = protocol.InvalidByteCount + s.scramble = false + } + return f + } + + nextCut := clientHelloCut{start: protocol.InvalidByteCount, end: protocol.InvalidByteCount} + for _, c := range s.cuts { + if c.start == protocol.InvalidByteCount { + continue + } + if c.start > s.writeOffset { + nextCut = c + break + } + } + f := &wire.CryptoFrame{Offset: s.writeOffset} + maxOffset := nextCut.start + if maxOffset == protocol.InvalidByteCount { + maxOffset = s.end + } + n := min(f.MaxDataLen(maxLen), maxOffset-s.writeOffset) + if n <= 0 { + return nil + } + f.Data = s.writeBuf[s.writeOffset : s.writeOffset+n] + // Don't reslice the writeBuf yet. + // This is done once all parts have been sent out. + s.writeOffset += n + if s.writeOffset == nextCut.start { + s.writeOffset = nextCut.end + } + + return f +} diff --git a/vendor/github.com/quic-go/quic-go/crypto_stream_manager.go b/vendor/github.com/quic-go/quic-go/crypto_stream_manager.go new file mode 100644 index 0000000..1e7dbf7 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/crypto_stream_manager.go @@ -0,0 +1,73 @@ +package quic + +import ( + "fmt" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/wire" +) + +type cryptoStreamManager struct { + initialStream *initialCryptoStream + handshakeStream *cryptoStream + oneRTTStream *cryptoStream +} + +func newCryptoStreamManager( + initialStream *initialCryptoStream, + handshakeStream *cryptoStream, + oneRTTStream *cryptoStream, +) *cryptoStreamManager { + return &cryptoStreamManager{ + initialStream: initialStream, + handshakeStream: handshakeStream, + oneRTTStream: oneRTTStream, + } +} + +func (m *cryptoStreamManager) HandleCryptoFrame(frame *wire.CryptoFrame, encLevel protocol.EncryptionLevel) error { + //nolint:exhaustive // CRYPTO frames cannot be sent in 0-RTT packets. + switch encLevel { + case protocol.EncryptionInitial: + return m.initialStream.HandleCryptoFrame(frame) + case protocol.EncryptionHandshake: + return m.handshakeStream.HandleCryptoFrame(frame) + case protocol.Encryption1RTT: + return m.oneRTTStream.HandleCryptoFrame(frame) + default: + return fmt.Errorf("received CRYPTO frame with unexpected encryption level: %s", encLevel) + } +} + +func (m *cryptoStreamManager) GetCryptoData(encLevel protocol.EncryptionLevel) []byte { + //nolint:exhaustive // CRYPTO frames cannot be sent in 0-RTT packets. + switch encLevel { + case protocol.EncryptionInitial: + return m.initialStream.GetCryptoData() + case protocol.EncryptionHandshake: + return m.handshakeStream.GetCryptoData() + case protocol.Encryption1RTT: + return m.oneRTTStream.GetCryptoData() + default: + panic(fmt.Sprintf("received CRYPTO frame with unexpected encryption level: %s", encLevel)) + } +} + +func (m *cryptoStreamManager) GetPostHandshakeData(maxSize protocol.ByteCount) *wire.CryptoFrame { + if !m.oneRTTStream.HasData() { + return nil + } + return m.oneRTTStream.PopCryptoFrame(maxSize) +} + +func (m *cryptoStreamManager) Drop(encLevel protocol.EncryptionLevel) error { + //nolint:exhaustive // 1-RTT keys should never get dropped. + switch encLevel { + case protocol.EncryptionInitial: + return m.initialStream.Finish() + case protocol.EncryptionHandshake: + return m.handshakeStream.Finish() + default: + panic(fmt.Sprintf("dropped unexpected encryption level: %s", encLevel)) + } +} diff --git a/vendor/github.com/quic-go/quic-go/datagram_queue.go b/vendor/github.com/quic-go/quic-go/datagram_queue.go new file mode 100644 index 0000000..e26285b --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/datagram_queue.go @@ -0,0 +1,137 @@ +package quic + +import ( + "context" + "sync" + + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/internal/utils/ringbuffer" + "github.com/quic-go/quic-go/internal/wire" +) + +const ( + maxDatagramSendQueueLen = 32 + maxDatagramRcvQueueLen = 128 +) + +type datagramQueue struct { + sendMx sync.Mutex + sendQueue ringbuffer.RingBuffer[*wire.DatagramFrame] + sent chan struct{} // used to notify Add that a datagram was dequeued + + rcvMx sync.Mutex + rcvQueue [][]byte + rcvd chan struct{} // used to notify Receive that a new datagram was received + + closeErr error + closed chan struct{} + + hasData func() + + logger utils.Logger +} + +func newDatagramQueue(hasData func(), logger utils.Logger) *datagramQueue { + return &datagramQueue{ + hasData: hasData, + rcvd: make(chan struct{}, 1), + sent: make(chan struct{}, 1), + closed: make(chan struct{}), + logger: logger, + } +} + +// Add queues a new DATAGRAM frame for sending. +// Up to 32 DATAGRAM frames will be queued. +// Once that limit is reached, Add blocks until the queue size has reduced. +func (h *datagramQueue) Add(f *wire.DatagramFrame) error { + h.sendMx.Lock() + + for { + if h.sendQueue.Len() < maxDatagramSendQueueLen { + h.sendQueue.PushBack(f) + h.sendMx.Unlock() + h.hasData() + return nil + } + select { + case <-h.sent: // drain the queue so we don't loop immediately + default: + } + h.sendMx.Unlock() + select { + case <-h.closed: + return h.closeErr + case <-h.sent: + } + h.sendMx.Lock() + } +} + +// Peek gets the next DATAGRAM frame for sending. +// If actually sent out, Pop needs to be called before the next call to Peek. +func (h *datagramQueue) Peek() *wire.DatagramFrame { + h.sendMx.Lock() + defer h.sendMx.Unlock() + if h.sendQueue.Empty() { + return nil + } + return h.sendQueue.PeekFront() +} + +func (h *datagramQueue) Pop() { + h.sendMx.Lock() + defer h.sendMx.Unlock() + _ = h.sendQueue.PopFront() + select { + case h.sent <- struct{}{}: + default: + } +} + +// HandleDatagramFrame handles a received DATAGRAM frame. +func (h *datagramQueue) HandleDatagramFrame(f *wire.DatagramFrame) { + data := make([]byte, len(f.Data)) + copy(data, f.Data) + var queued bool + h.rcvMx.Lock() + if len(h.rcvQueue) < maxDatagramRcvQueueLen { + h.rcvQueue = append(h.rcvQueue, data) + queued = true + select { + case h.rcvd <- struct{}{}: + default: + } + } + h.rcvMx.Unlock() + if !queued && h.logger.Debug() { + h.logger.Debugf("Discarding received DATAGRAM frame (%d bytes payload)", len(f.Data)) + } +} + +// Receive gets a received DATAGRAM frame. +func (h *datagramQueue) Receive(ctx context.Context) ([]byte, error) { + for { + h.rcvMx.Lock() + if len(h.rcvQueue) > 0 { + data := h.rcvQueue[0] + h.rcvQueue = h.rcvQueue[1:] + h.rcvMx.Unlock() + return data, nil + } + h.rcvMx.Unlock() + select { + case <-h.rcvd: + continue + case <-h.closed: + return nil, h.closeErr + case <-ctx.Done(): + return nil, ctx.Err() + } + } +} + +func (h *datagramQueue) CloseWithError(e error) { + h.closeErr = e + close(h.closed) +} diff --git a/vendor/github.com/quic-go/quic-go/errors.go b/vendor/github.com/quic-go/quic-go/errors.go new file mode 100644 index 0000000..829730f --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/errors.go @@ -0,0 +1,105 @@ +package quic + +import ( + "fmt" + + "github.com/quic-go/quic-go/internal/qerr" +) + +type ( + // TransportError indicates an error that occurred on the QUIC transport layer. + // Every transport error other than CONNECTION_REFUSED and APPLICATION_ERROR is + // likely a bug in the implementation. + TransportError = qerr.TransportError + // ApplicationError is an application-defined error. + ApplicationError = qerr.ApplicationError + // VersionNegotiationError indicates a failure to negotiate a QUIC version. + VersionNegotiationError = qerr.VersionNegotiationError + // StatelessResetError indicates a stateless reset was received. + // This can happen when the peer reboots, or when packets are misrouted. + // See section 10.3 of RFC 9000 for details. + StatelessResetError = qerr.StatelessResetError + // IdleTimeoutError indicates that the connection timed out because it was inactive for too long. + IdleTimeoutError = qerr.IdleTimeoutError + // HandshakeTimeoutError indicates that the connection timed out before completing the handshake. + HandshakeTimeoutError = qerr.HandshakeTimeoutError +) + +type ( + // TransportErrorCode is a QUIC transport error code, see section 20 of RFC 9000. + TransportErrorCode = qerr.TransportErrorCode + // ApplicationErrorCode is an QUIC application error code. + ApplicationErrorCode = qerr.ApplicationErrorCode + // StreamErrorCode is a QUIC stream error code. The meaning of the value is defined by the application. + StreamErrorCode = qerr.StreamErrorCode +) + +const ( + // NoError is the NO_ERROR transport error code. + NoError = qerr.NoError + // InternalError is the INTERNAL_ERROR transport error code. + InternalError = qerr.InternalError + // ConnectionRefused is the CONNECTION_REFUSED transport error code. + ConnectionRefused = qerr.ConnectionRefused + // FlowControlError is the FLOW_CONTROL_ERROR transport error code. + FlowControlError = qerr.FlowControlError + // StreamLimitError is the STREAM_LIMIT_ERROR transport error code. + StreamLimitError = qerr.StreamLimitError + // StreamStateError is the STREAM_STATE_ERROR transport error code. + StreamStateError = qerr.StreamStateError + // FinalSizeError is the FINAL_SIZE_ERROR transport error code. + FinalSizeError = qerr.FinalSizeError + // FrameEncodingError is the FRAME_ENCODING_ERROR transport error code. + FrameEncodingError = qerr.FrameEncodingError + // TransportParameterError is the TRANSPORT_PARAMETER_ERROR transport error code. + TransportParameterError = qerr.TransportParameterError + // ConnectionIDLimitError is the CONNECTION_ID_LIMIT_ERROR transport error code. + ConnectionIDLimitError = qerr.ConnectionIDLimitError + // ProtocolViolation is the PROTOCOL_VIOLATION transport error code. + ProtocolViolation = qerr.ProtocolViolation + // InvalidToken is the INVALID_TOKEN transport error code. + InvalidToken = qerr.InvalidToken + // ApplicationErrorErrorCode is the APPLICATION_ERROR transport error code. + ApplicationErrorErrorCode = qerr.ApplicationErrorErrorCode + // CryptoBufferExceeded is the CRYPTO_BUFFER_EXCEEDED transport error code. + CryptoBufferExceeded = qerr.CryptoBufferExceeded + // KeyUpdateError is the KEY_UPDATE_ERROR transport error code. + KeyUpdateError = qerr.KeyUpdateError + // AEADLimitReached is the AEAD_LIMIT_REACHED transport error code. + AEADLimitReached = qerr.AEADLimitReached + // NoViablePathError is the NO_VIABLE_PATH_ERROR transport error code. + NoViablePathError = qerr.NoViablePathError +) + +// A StreamError is used to signal stream cancellations. +// It is returned from the Read and Write methods of the [ReceiveStream], [SendStream] and [Stream]. +type StreamError struct { + StreamID StreamID + ErrorCode StreamErrorCode + Remote bool +} + +func (e *StreamError) Is(target error) bool { + t, ok := target.(*StreamError) + return ok && e.StreamID == t.StreamID && e.ErrorCode == t.ErrorCode && e.Remote == t.Remote +} + +func (e *StreamError) Error() string { + pers := "local" + if e.Remote { + pers = "remote" + } + return fmt.Sprintf("stream %d canceled by %s with error code %d", e.StreamID, pers, e.ErrorCode) +} + +// DatagramTooLargeError is returned from Conn.SendDatagram if the payload is too large to be sent. +type DatagramTooLargeError struct { + MaxDatagramPayloadSize int64 +} + +func (e *DatagramTooLargeError) Is(target error) bool { + t, ok := target.(*DatagramTooLargeError) + return ok && e.MaxDatagramPayloadSize == t.MaxDatagramPayloadSize +} + +func (e *DatagramTooLargeError) Error() string { return "DATAGRAM frame too large" } diff --git a/vendor/github.com/quic-go/quic-go/frame_sorter.go b/vendor/github.com/quic-go/quic-go/frame_sorter.go new file mode 100644 index 0000000..bee0aba --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/frame_sorter.go @@ -0,0 +1,237 @@ +package quic + +import ( + "errors" + "sync" + + "github.com/quic-go/quic-go/internal/protocol" + list "github.com/quic-go/quic-go/internal/utils/linkedlist" +) + +// byteInterval is an interval from one ByteCount to the other +type byteInterval struct { + Start protocol.ByteCount + End protocol.ByteCount +} + +var byteIntervalElementPool sync.Pool + +func init() { + byteIntervalElementPool = *list.NewPool[byteInterval]() +} + +type frameSorterEntry struct { + Data []byte + DoneCb func() +} + +type frameSorter struct { + queue map[protocol.ByteCount]frameSorterEntry + readPos protocol.ByteCount + gaps *list.List[byteInterval] +} + +var errDuplicateStreamData = errors.New("duplicate stream data") + +func newFrameSorter() *frameSorter { + s := frameSorter{ + gaps: list.NewWithPool[byteInterval](&byteIntervalElementPool), + queue: make(map[protocol.ByteCount]frameSorterEntry), + } + s.gaps.PushFront(byteInterval{Start: 0, End: protocol.MaxByteCount}) + return &s +} + +func (s *frameSorter) Push(data []byte, offset protocol.ByteCount, doneCb func()) error { + err := s.push(data, offset, doneCb) + if err == errDuplicateStreamData { + if doneCb != nil { + doneCb() + } + return nil + } + return err +} + +func (s *frameSorter) push(data []byte, offset protocol.ByteCount, doneCb func()) error { + if len(data) == 0 { + return errDuplicateStreamData + } + + start := offset + end := offset + protocol.ByteCount(len(data)) + + if end <= s.gaps.Front().Value.Start { + return errDuplicateStreamData + } + + startGap, startsInGap := s.findStartGap(start) + endGap, endsInGap := s.findEndGap(startGap, end) + + startGapEqualsEndGap := startGap == endGap + + if (startGapEqualsEndGap && end <= startGap.Value.Start) || + (!startGapEqualsEndGap && startGap.Value.End >= endGap.Value.Start && end <= startGap.Value.Start) { + return errDuplicateStreamData + } + + startGapNext := startGap.Next() + startGapEnd := startGap.Value.End // save it, in case startGap is modified + endGapStart := endGap.Value.Start // save it, in case endGap is modified + endGapEnd := endGap.Value.End // save it, in case endGap is modified + var adjustedStartGapEnd bool + var wasCut bool + + pos := start + var hasReplacedAtLeastOne bool + for { + oldEntry, ok := s.queue[pos] + if !ok { + break + } + oldEntryLen := protocol.ByteCount(len(oldEntry.Data)) + if end-pos > oldEntryLen || (hasReplacedAtLeastOne && end-pos == oldEntryLen) { + // The existing frame is shorter than the new frame. Replace it. + delete(s.queue, pos) + pos += oldEntryLen + hasReplacedAtLeastOne = true + if oldEntry.DoneCb != nil { + oldEntry.DoneCb() + } + } else { + if !hasReplacedAtLeastOne { + return errDuplicateStreamData + } + // The existing frame is longer than the new frame. + // Cut the new frame such that the end aligns with the start of the existing frame. + data = data[:pos-start] + end = pos + wasCut = true + break + } + } + + if !startsInGap && !hasReplacedAtLeastOne { + // cut the frame, such that it starts at the start of the gap + data = data[startGap.Value.Start-start:] + start = startGap.Value.Start + wasCut = true + } + if start <= startGap.Value.Start { + if end >= startGap.Value.End { + // The frame covers the whole startGap. Delete the gap. + s.gaps.Remove(startGap) + } else { + startGap.Value.Start = end + } + } else if !hasReplacedAtLeastOne { + startGap.Value.End = start + adjustedStartGapEnd = true + } + + if !startGapEqualsEndGap { + s.deleteConsecutive(startGapEnd) + var nextGap *list.Element[byteInterval] + for gap := startGapNext; gap.Value.End < endGapStart; gap = nextGap { + nextGap = gap.Next() + s.deleteConsecutive(gap.Value.End) + s.gaps.Remove(gap) + } + } + + if !endsInGap && start != endGapEnd && end > endGapEnd { + // cut the frame, such that it ends at the end of the gap + data = data[:endGapEnd-start] + end = endGapEnd + wasCut = true + } + if end == endGapEnd { + if !startGapEqualsEndGap { + // The frame covers the whole endGap. Delete the gap. + s.gaps.Remove(endGap) + } + } else { + if startGapEqualsEndGap && adjustedStartGapEnd { + // The frame split the existing gap into two. + s.gaps.InsertAfter(byteInterval{Start: end, End: startGapEnd}, startGap) + } else if !startGapEqualsEndGap { + endGap.Value.Start = end + } + } + + if wasCut && len(data) < protocol.MinStreamFrameBufferSize { + newData := make([]byte, len(data)) + copy(newData, data) + data = newData + if doneCb != nil { + doneCb() + doneCb = nil + } + } + + if s.gaps.Len() > protocol.MaxStreamFrameSorterGaps { + return errors.New("too many gaps in received data") + } + + s.queue[start] = frameSorterEntry{Data: data, DoneCb: doneCb} + return nil +} + +func (s *frameSorter) findStartGap(offset protocol.ByteCount) (*list.Element[byteInterval], bool) { + for gap := s.gaps.Front(); gap != nil; gap = gap.Next() { + if offset >= gap.Value.Start && offset <= gap.Value.End { + return gap, true + } + if offset < gap.Value.Start { + return gap, false + } + } + panic("no gap found") +} + +func (s *frameSorter) findEndGap(startGap *list.Element[byteInterval], offset protocol.ByteCount) (*list.Element[byteInterval], bool) { + for gap := startGap; gap != nil; gap = gap.Next() { + if offset >= gap.Value.Start && offset < gap.Value.End { + return gap, true + } + if offset < gap.Value.Start { + return gap.Prev(), false + } + } + panic("no gap found") +} + +// deleteConsecutive deletes consecutive frames from the queue, starting at pos +func (s *frameSorter) deleteConsecutive(pos protocol.ByteCount) { + for { + oldEntry, ok := s.queue[pos] + if !ok { + break + } + oldEntryLen := protocol.ByteCount(len(oldEntry.Data)) + delete(s.queue, pos) + if oldEntry.DoneCb != nil { + oldEntry.DoneCb() + } + pos += oldEntryLen + } +} + +func (s *frameSorter) Pop() (protocol.ByteCount, []byte, func()) { + entry, ok := s.queue[s.readPos] + if !ok { + return s.readPos, nil, nil + } + delete(s.queue, s.readPos) + offset := s.readPos + s.readPos += protocol.ByteCount(len(entry.Data)) + if s.gaps.Front().Value.End <= s.readPos { + panic("frame sorter BUG: read position higher than a gap") + } + return offset, entry.Data, entry.DoneCb +} + +// HasMoreData says if there is any more data queued at *any* offset. +func (s *frameSorter) HasMoreData() bool { + return len(s.queue) > 0 +} diff --git a/vendor/github.com/quic-go/quic-go/framer.go b/vendor/github.com/quic-go/quic-go/framer.go new file mode 100644 index 0000000..a331202 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/framer.go @@ -0,0 +1,295 @@ +package quic + +import ( + "slices" + "sync" + "time" + + "github.com/quic-go/quic-go/internal/ackhandler" + "github.com/quic-go/quic-go/internal/flowcontrol" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils/ringbuffer" + "github.com/quic-go/quic-go/internal/wire" + "github.com/quic-go/quic-go/quicvarint" +) + +const ( + maxPathResponses = 256 + maxControlFrames = 16 << 10 +) + +// This is the largest possible size of a stream-related control frame +// (which is the RESET_STREAM frame). +const maxStreamControlFrameSize = 25 + +type streamFrameGetter interface { + popStreamFrame(protocol.ByteCount, protocol.Version) (ackhandler.StreamFrame, *wire.StreamDataBlockedFrame, bool) +} + +type streamControlFrameGetter interface { + getControlFrame(time.Time) (_ ackhandler.Frame, ok, hasMore bool) +} + +type framer struct { + mutex sync.Mutex + + activeStreams map[protocol.StreamID]streamFrameGetter + streamQueue ringbuffer.RingBuffer[protocol.StreamID] + streamsWithControlFrames map[protocol.StreamID]streamControlFrameGetter + + controlFrameMutex sync.Mutex + controlFrames []wire.Frame + pathResponses []*wire.PathResponseFrame + connFlowController flowcontrol.ConnectionFlowController + queuedTooManyControlFrames bool +} + +func newFramer(connFlowController flowcontrol.ConnectionFlowController) *framer { + return &framer{ + activeStreams: make(map[protocol.StreamID]streamFrameGetter), + streamsWithControlFrames: make(map[protocol.StreamID]streamControlFrameGetter), + connFlowController: connFlowController, + } +} + +func (f *framer) HasData() bool { + f.mutex.Lock() + hasData := !f.streamQueue.Empty() + f.mutex.Unlock() + if hasData { + return true + } + f.controlFrameMutex.Lock() + defer f.controlFrameMutex.Unlock() + return len(f.streamsWithControlFrames) > 0 || len(f.controlFrames) > 0 || len(f.pathResponses) > 0 +} + +func (f *framer) QueueControlFrame(frame wire.Frame) { + f.controlFrameMutex.Lock() + defer f.controlFrameMutex.Unlock() + + if pr, ok := frame.(*wire.PathResponseFrame); ok { + // Only queue up to maxPathResponses PATH_RESPONSE frames. + // This limit should be high enough to never be hit in practice, + // unless the peer is doing something malicious. + if len(f.pathResponses) >= maxPathResponses { + return + } + f.pathResponses = append(f.pathResponses, pr) + return + } + // This is a hack. + if len(f.controlFrames) >= maxControlFrames { + f.queuedTooManyControlFrames = true + return + } + f.controlFrames = append(f.controlFrames, frame) +} + +func (f *framer) Append( + frames []ackhandler.Frame, + streamFrames []ackhandler.StreamFrame, + maxLen protocol.ByteCount, + now time.Time, + v protocol.Version, +) ([]ackhandler.Frame, []ackhandler.StreamFrame, protocol.ByteCount) { + f.controlFrameMutex.Lock() + frames, controlFrameLen := f.appendControlFrames(frames, maxLen, now, v) + maxLen -= controlFrameLen + + var lastFrame ackhandler.StreamFrame + var streamFrameLen protocol.ByteCount + f.mutex.Lock() + // pop STREAM frames, until less than 128 bytes are left in the packet + numActiveStreams := f.streamQueue.Len() + for i := 0; i < numActiveStreams; i++ { + if protocol.MinStreamFrameSize > maxLen { + break + } + sf, blocked := f.getNextStreamFrame(maxLen, v) + if sf.Frame != nil { + streamFrames = append(streamFrames, sf) + maxLen -= sf.Frame.Length(v) + lastFrame = sf + streamFrameLen += sf.Frame.Length(v) + } + // If the stream just became blocked on stream flow control, attempt to pack the + // STREAM_DATA_BLOCKED into the same packet. + if blocked != nil { + l := blocked.Length(v) + // In case it doesn't fit, queue it for the next packet. + if maxLen < l { + f.controlFrames = append(f.controlFrames, blocked) + break + } + frames = append(frames, ackhandler.Frame{Frame: blocked}) + maxLen -= l + controlFrameLen += l + } + } + + // The only way to become blocked on connection-level flow control is by sending STREAM frames. + if isBlocked, offset := f.connFlowController.IsNewlyBlocked(); isBlocked { + blocked := &wire.DataBlockedFrame{MaximumData: offset} + l := blocked.Length(v) + // In case it doesn't fit, queue it for the next packet. + if maxLen >= l { + frames = append(frames, ackhandler.Frame{Frame: blocked}) + controlFrameLen += l + } else { + f.controlFrames = append(f.controlFrames, blocked) + } + } + + f.mutex.Unlock() + f.controlFrameMutex.Unlock() + + if lastFrame.Frame != nil { + // account for the smaller size of the last STREAM frame + streamFrameLen -= lastFrame.Frame.Length(v) + lastFrame.Frame.DataLenPresent = false + streamFrameLen += lastFrame.Frame.Length(v) + } + + return frames, streamFrames, controlFrameLen + streamFrameLen +} + +func (f *framer) appendControlFrames( + frames []ackhandler.Frame, + maxLen protocol.ByteCount, + now time.Time, + v protocol.Version, +) ([]ackhandler.Frame, protocol.ByteCount) { + var length protocol.ByteCount + // add a PATH_RESPONSE first, but only pack a single PATH_RESPONSE per packet + if len(f.pathResponses) > 0 { + frame := f.pathResponses[0] + frameLen := frame.Length(v) + if frameLen <= maxLen { + frames = append(frames, ackhandler.Frame{Frame: frame}) + length += frameLen + f.pathResponses = f.pathResponses[1:] + } + } + + // add stream-related control frames + for id, str := range f.streamsWithControlFrames { + start: + remainingLen := maxLen - length + if remainingLen <= maxStreamControlFrameSize { + break + } + fr, ok, hasMore := str.getControlFrame(now) + if !hasMore { + delete(f.streamsWithControlFrames, id) + } + if !ok { + continue + } + frames = append(frames, fr) + length += fr.Frame.Length(v) + if hasMore { + // It is rare that a stream has more than one control frame to queue. + // We don't want to spawn another loop for just to cover that case. + goto start + } + } + + for len(f.controlFrames) > 0 { + frame := f.controlFrames[len(f.controlFrames)-1] + frameLen := frame.Length(v) + if length+frameLen > maxLen { + break + } + frames = append(frames, ackhandler.Frame{Frame: frame}) + length += frameLen + f.controlFrames = f.controlFrames[:len(f.controlFrames)-1] + } + + return frames, length +} + +// QueuedTooManyControlFrames says if the control frame queue exceeded its maximum queue length. +// This is a hack. +// It is easier to implement than propagating an error return value in QueueControlFrame. +// The correct solution would be to queue frames with their respective structs. +// See https://github.com/quic-go/quic-go/issues/4271 for the queueing of stream-related control frames. +func (f *framer) QueuedTooManyControlFrames() bool { + return f.queuedTooManyControlFrames +} + +func (f *framer) AddActiveStream(id protocol.StreamID, str streamFrameGetter) { + f.mutex.Lock() + if _, ok := f.activeStreams[id]; !ok { + f.streamQueue.PushBack(id) + f.activeStreams[id] = str + } + f.mutex.Unlock() +} + +func (f *framer) AddStreamWithControlFrames(id protocol.StreamID, str streamControlFrameGetter) { + f.controlFrameMutex.Lock() + if _, ok := f.streamsWithControlFrames[id]; !ok { + f.streamsWithControlFrames[id] = str + } + f.controlFrameMutex.Unlock() +} + +// RemoveActiveStream is called when a stream completes. +func (f *framer) RemoveActiveStream(id protocol.StreamID) { + f.mutex.Lock() + delete(f.activeStreams, id) + // We don't delete the stream from the streamQueue, + // since we'd have to iterate over the ringbuffer. + // Instead, we check if the stream is still in activeStreams when appending STREAM frames. + f.mutex.Unlock() +} + +func (f *framer) getNextStreamFrame(maxLen protocol.ByteCount, v protocol.Version) (ackhandler.StreamFrame, *wire.StreamDataBlockedFrame) { + id := f.streamQueue.PopFront() + // This should never return an error. Better check it anyway. + // The stream will only be in the streamQueue, if it enqueued itself there. + str, ok := f.activeStreams[id] + // The stream might have been removed after being enqueued. + if !ok { + return ackhandler.StreamFrame{}, nil + } + // For the last STREAM frame, we'll remove the DataLen field later. + // Therefore, we can pretend to have more bytes available when popping + // the STREAM frame (which will always have the DataLen set). + maxLen += protocol.ByteCount(quicvarint.Len(uint64(maxLen))) + frame, blocked, hasMoreData := str.popStreamFrame(maxLen, v) + if hasMoreData { // put the stream back in the queue (at the end) + f.streamQueue.PushBack(id) + } else { // no more data to send. Stream is not active + delete(f.activeStreams, id) + } + // Note that the frame.Frame can be nil: + // * if the stream was canceled after it said it had data + // * the remaining size doesn't allow us to add another STREAM frame + return frame, blocked +} + +func (f *framer) Handle0RTTRejection() { + f.mutex.Lock() + defer f.mutex.Unlock() + f.controlFrameMutex.Lock() + defer f.controlFrameMutex.Unlock() + + f.streamQueue.Clear() + for id := range f.activeStreams { + delete(f.activeStreams, id) + } + var j int + for i, frame := range f.controlFrames { + switch frame.(type) { + case *wire.MaxDataFrame, *wire.MaxStreamDataFrame, *wire.MaxStreamsFrame, + *wire.DataBlockedFrame, *wire.StreamDataBlockedFrame, *wire.StreamsBlockedFrame: + continue + default: + f.controlFrames[j] = f.controlFrames[i] + j++ + } + } + f.controlFrames = slices.Delete(f.controlFrames, j, len(f.controlFrames)) +} diff --git a/vendor/github.com/quic-go/quic-go/http3/README.md b/vendor/github.com/quic-go/quic-go/http3/README.md new file mode 100644 index 0000000..0e2ed4c --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/README.md @@ -0,0 +1,9 @@ +# HTTP/3 + +[![Documentation](https://img.shields.io/badge/docs-quic--go.net-red?style=flat)](https://quic-go.net/docs/) +[![PkgGoDev](https://pkg.go.dev/badge/github.com/quic-go/quic-go/http3)](https://pkg.go.dev/github.com/quic-go/quic-go/http3) + +This package implements HTTP/3 ([RFC 9114](https://datatracker.ietf.org/doc/html/rfc9114)), including QPACK ([RFC 9204](https://datatracker.ietf.org/doc/html/rfc9204)) and HTTP Datagrams ([RFC 9297](https://datatracker.ietf.org/doc/html/rfc9297)). +It aims to provide feature parity with the standard library's HTTP/1.1 and HTTP/2 implementation. + +Detailed documentation can be found on [quic-go.net](https://quic-go.net/docs/). diff --git a/vendor/github.com/quic-go/quic-go/http3/body.go b/vendor/github.com/quic-go/quic-go/http3/body.go new file mode 100644 index 0000000..356f726 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/body.go @@ -0,0 +1,133 @@ +package http3 + +import ( + "context" + "errors" + "io" + "sync" + + "github.com/quic-go/quic-go" +) + +// A Hijacker allows hijacking of the stream creating part of a quic.Conn from a http.ResponseWriter. +// It is used by WebTransport to create WebTransport streams after a session has been established. +type Hijacker interface { + Connection() *Conn +} + +var errTooMuchData = errors.New("peer sent too much data") + +// The body is used in the requestBody (for a http.Request) and the responseBody (for a http.Response). +type body struct { + str *Stream + + remainingContentLength int64 + violatedContentLength bool + hasContentLength bool +} + +func newBody(str *Stream, contentLength int64) *body { + b := &body{str: str} + if contentLength >= 0 { + b.hasContentLength = true + b.remainingContentLength = contentLength + } + return b +} + +func (r *body) StreamID() quic.StreamID { return r.str.StreamID() } + +func (r *body) checkContentLengthViolation() error { + if !r.hasContentLength { + return nil + } + if r.remainingContentLength < 0 || r.remainingContentLength == 0 && r.str.hasMoreData() { + if !r.violatedContentLength { + r.str.CancelRead(quic.StreamErrorCode(ErrCodeMessageError)) + r.str.CancelWrite(quic.StreamErrorCode(ErrCodeMessageError)) + r.violatedContentLength = true + } + return errTooMuchData + } + return nil +} + +func (r *body) Read(b []byte) (int, error) { + if err := r.checkContentLengthViolation(); err != nil { + return 0, err + } + if r.hasContentLength { + b = b[:min(int64(len(b)), r.remainingContentLength)] + } + n, err := r.str.Read(b) + r.remainingContentLength -= int64(n) + if err := r.checkContentLengthViolation(); err != nil { + return n, err + } + return n, maybeReplaceError(err) +} + +func (r *body) Close() error { + r.str.CancelRead(quic.StreamErrorCode(ErrCodeRequestCanceled)) + return nil +} + +type requestBody struct { + body + connCtx context.Context + rcvdSettings <-chan struct{} + getSettings func() *Settings +} + +var _ io.ReadCloser = &requestBody{} + +func newRequestBody(str *Stream, contentLength int64, connCtx context.Context, rcvdSettings <-chan struct{}, getSettings func() *Settings) *requestBody { + return &requestBody{ + body: *newBody(str, contentLength), + connCtx: connCtx, + rcvdSettings: rcvdSettings, + getSettings: getSettings, + } +} + +type hijackableBody struct { + body body + + // only set for the http.Response + // The channel is closed when the user is done with this response: + // either when Read() errors, or when Close() is called. + reqDone chan<- struct{} + reqDoneOnce sync.Once +} + +var _ io.ReadCloser = &hijackableBody{} + +func newResponseBody(str *Stream, contentLength int64, done chan<- struct{}) *hijackableBody { + return &hijackableBody{ + body: *newBody(str, contentLength), + reqDone: done, + } +} + +func (r *hijackableBody) Read(b []byte) (int, error) { + n, err := r.body.Read(b) + if err != nil { + r.requestDone() + } + return n, maybeReplaceError(err) +} + +func (r *hijackableBody) requestDone() { + if r.reqDone != nil { + r.reqDoneOnce.Do(func() { + close(r.reqDone) + }) + } +} + +func (r *hijackableBody) Close() error { + r.requestDone() + // If the EOF was read, CancelRead() is a no-op. + r.body.str.CancelRead(quic.StreamErrorCode(ErrCodeRequestCanceled)) + return nil +} diff --git a/vendor/github.com/quic-go/quic-go/http3/capsule.go b/vendor/github.com/quic-go/quic-go/http3/capsule.go new file mode 100644 index 0000000..132e6c3 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/capsule.go @@ -0,0 +1,74 @@ +package http3 + +import ( + "io" + + "github.com/quic-go/quic-go/quicvarint" +) + +// CapsuleType is the type of the capsule +type CapsuleType uint64 + +// CapsuleProtocolHeader is the header value used to advertise support for the capsule protocol +const CapsuleProtocolHeader = "Capsule-Protocol" + +type exactReader struct { + R io.LimitedReader +} + +func (r *exactReader) Read(b []byte) (int, error) { + n, err := r.R.Read(b) + if err == io.EOF && r.R.N > 0 { + return n, io.ErrUnexpectedEOF + } + return n, err +} + +type countingByteReader struct { + io.ByteReader + Read int +} + +func (r *countingByteReader) ReadByte() (byte, error) { + b, err := r.ByteReader.ReadByte() + if err == nil { + r.Read++ + } + return b, err +} + +// ParseCapsule parses the header of a Capsule. +// It returns an io.Reader that can be used to read the Capsule value. +// The Capsule value must be read entirely (i.e. until the io.EOF) before using r again. +func ParseCapsule(r quicvarint.Reader) (CapsuleType, io.Reader, error) { + cbr := countingByteReader{ByteReader: r} + ct, err := quicvarint.Read(&cbr) + if err != nil { + // If an io.EOF is returned without consuming any bytes, return it unmodified. + // Otherwise, return an io.ErrUnexpectedEOF. + if err == io.EOF && cbr.Read > 0 { + return 0, nil, io.ErrUnexpectedEOF + } + return 0, nil, err + } + l, err := quicvarint.Read(r) + if err != nil { + if err == io.EOF { + return 0, nil, io.ErrUnexpectedEOF + } + return 0, nil, err + } + return CapsuleType(ct), &exactReader{R: io.LimitedReader{R: r, N: int64(l)}}, nil +} + +// WriteCapsule writes a capsule +func WriteCapsule(w quicvarint.Writer, ct CapsuleType, value []byte) error { + b := make([]byte, 0, 16) + b = quicvarint.Append(b, uint64(ct)) + b = quicvarint.Append(b, uint64(len(value))) + if _, err := w.Write(b); err != nil { + return err + } + _, err := w.Write(value) + return err +} diff --git a/vendor/github.com/quic-go/quic-go/http3/client.go b/vendor/github.com/quic-go/quic-go/http3/client.go new file mode 100644 index 0000000..678f5bc --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/client.go @@ -0,0 +1,386 @@ +package http3 + +import ( + "context" + "errors" + "fmt" + "io" + "log/slog" + "net/http" + "net/http/httptrace" + "net/textproto" + "time" + + "github.com/quic-go/quic-go" + "github.com/quic-go/quic-go/quicvarint" + + "github.com/quic-go/qpack" +) + +const ( + // MethodGet0RTT allows a GET request to be sent using 0-RTT. + // Note that 0-RTT doesn't provide replay protection and should only be used for idempotent requests. + MethodGet0RTT = "GET_0RTT" + // MethodHead0RTT allows a HEAD request to be sent using 0-RTT. + // Note that 0-RTT doesn't provide replay protection and should only be used for idempotent requests. + MethodHead0RTT = "HEAD_0RTT" +) + +const ( + defaultUserAgent = "quic-go HTTP/3" + defaultMaxResponseHeaderBytes = 10 * 1 << 20 // 10 MB +) + +type errConnUnusable struct{ e error } + +func (e *errConnUnusable) Unwrap() error { return e.e } +func (e *errConnUnusable) Error() string { return fmt.Sprintf("http3: conn unusable: %s", e.e.Error()) } + +const max1xxResponses = 5 // arbitrary bound on number of informational responses + +var defaultQuicConfig = &quic.Config{ + MaxIncomingStreams: -1, // don't allow the server to create bidirectional streams + KeepAlivePeriod: 10 * time.Second, +} + +// ClientConn is an HTTP/3 client doing requests to a single remote server. +type ClientConn struct { + conn *Conn + + // Enable support for HTTP/3 datagrams (RFC 9297). + // If a QUICConfig is set, datagram support also needs to be enabled on the QUIC layer by setting enableDatagrams. + enableDatagrams bool + + // Additional HTTP/3 settings. + // It is invalid to specify any settings defined by RFC 9114 (HTTP/3) and RFC 9297 (HTTP Datagrams). + additionalSettings map[uint64]uint64 + + // maxResponseHeaderBytes specifies a limit on how many response bytes are + // allowed in the server's response header. + maxResponseHeaderBytes uint64 + + // disableCompression, if true, prevents the Transport from requesting compression with an + // "Accept-Encoding: gzip" request header when the Request contains no existing Accept-Encoding value. + // If the Transport requests gzip on its own and gets a gzipped response, it's transparently + // decoded in the Response.Body. + // However, if the user explicitly requested gzip it is not automatically uncompressed. + disableCompression bool + + logger *slog.Logger + + requestWriter *requestWriter + decoder *qpack.Decoder +} + +var _ http.RoundTripper = &ClientConn{} + +func newClientConn( + conn *quic.Conn, + enableDatagrams bool, + additionalSettings map[uint64]uint64, + streamHijacker func(FrameType, quic.ConnectionTracingID, *quic.Stream, error) (hijacked bool, err error), + uniStreamHijacker func(StreamType, quic.ConnectionTracingID, *quic.ReceiveStream, error) (hijacked bool), + maxResponseHeaderBytes int64, + disableCompression bool, + logger *slog.Logger, +) *ClientConn { + c := &ClientConn{ + enableDatagrams: enableDatagrams, + additionalSettings: additionalSettings, + disableCompression: disableCompression, + logger: logger, + } + if maxResponseHeaderBytes <= 0 { + c.maxResponseHeaderBytes = defaultMaxResponseHeaderBytes + } else { + c.maxResponseHeaderBytes = uint64(maxResponseHeaderBytes) + } + c.decoder = qpack.NewDecoder(func(hf qpack.HeaderField) {}) + c.requestWriter = newRequestWriter() + c.conn = newConnection( + conn.Context(), + conn, + c.enableDatagrams, + false, // client + c.logger, + 0, + ) + // send the SETTINGs frame, using 0-RTT data, if possible + go func() { + if err := c.setupConn(); err != nil { + if c.logger != nil { + c.logger.Debug("Setting up connection failed", "error", err) + } + c.conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeInternalError), "") + } + }() + if streamHijacker != nil { + go c.handleBidirectionalStreams(streamHijacker) + } + go c.conn.handleUnidirectionalStreams(uniStreamHijacker) + return c +} + +// OpenRequestStream opens a new request stream on the HTTP/3 connection. +func (c *ClientConn) OpenRequestStream(ctx context.Context) (*RequestStream, error) { + return c.conn.openRequestStream(ctx, c.requestWriter, nil, c.disableCompression, c.maxResponseHeaderBytes) +} + +func (c *ClientConn) setupConn() error { + // open the control stream + str, err := c.conn.OpenUniStream() + if err != nil { + return err + } + b := make([]byte, 0, 64) + b = quicvarint.Append(b, streamTypeControlStream) + // send the SETTINGS frame + b = (&settingsFrame{Datagram: c.enableDatagrams, Other: c.additionalSettings}).Append(b) + _, err = str.Write(b) + return err +} + +func (c *ClientConn) handleBidirectionalStreams(streamHijacker func(FrameType, quic.ConnectionTracingID, *quic.Stream, error) (hijacked bool, err error)) { + for { + str, err := c.conn.conn.AcceptStream(context.Background()) + if err != nil { + if c.logger != nil { + c.logger.Debug("accepting bidirectional stream failed", "error", err) + } + return + } + fp := &frameParser{ + r: str, + closeConn: c.conn.CloseWithError, + unknownFrameHandler: func(ft FrameType, e error) (processed bool, err error) { + id := c.conn.Context().Value(quic.ConnectionTracingKey).(quic.ConnectionTracingID) + return streamHijacker(ft, id, str, e) + }, + } + go func() { + if _, err := fp.ParseNext(); err == errHijacked { + return + } + if err != nil { + if c.logger != nil { + c.logger.Debug("error handling stream", "error", err) + } + } + c.conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeFrameUnexpected), "received HTTP/3 frame on bidirectional stream") + }() + } +} + +// RoundTrip executes a request and returns a response +func (c *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { + rsp, err := c.roundTrip(req) + if err != nil && req.Context().Err() != nil { + // if the context was canceled, return the context cancellation error + err = req.Context().Err() + } + return rsp, err +} + +func (c *ClientConn) roundTrip(req *http.Request) (*http.Response, error) { + // Immediately send out this request, if this is a 0-RTT request. + switch req.Method { + case MethodGet0RTT: + // don't modify the original request + reqCopy := *req + req = &reqCopy + req.Method = http.MethodGet + case MethodHead0RTT: + // don't modify the original request + reqCopy := *req + req = &reqCopy + req.Method = http.MethodHead + default: + // wait for the handshake to complete + select { + case <-c.conn.HandshakeComplete(): + case <-req.Context().Done(): + return nil, req.Context().Err() + } + } + + // It is only possible to send an Extended CONNECT request once the SETTINGS were received. + // See section 3 of RFC 8441. + if isExtendedConnectRequest(req) { + connCtx := c.conn.Context() + // wait for the server's SETTINGS frame to arrive + select { + case <-c.conn.ReceivedSettings(): + case <-connCtx.Done(): + return nil, context.Cause(connCtx) + } + if !c.conn.Settings().EnableExtendedConnect { + return nil, errors.New("http3: server didn't enable Extended CONNECT") + } + } + + reqDone := make(chan struct{}) + str, err := c.conn.openRequestStream( + req.Context(), + c.requestWriter, + reqDone, + c.disableCompression, + c.maxResponseHeaderBytes, + ) + if err != nil { + return nil, &errConnUnusable{e: err} + } + + // Request Cancellation: + // This go routine keeps running even after RoundTripOpt() returns. + // It is shut down when the application is done processing the body. + done := make(chan struct{}) + go func() { + defer close(done) + select { + case <-req.Context().Done(): + str.CancelWrite(quic.StreamErrorCode(ErrCodeRequestCanceled)) + str.CancelRead(quic.StreamErrorCode(ErrCodeRequestCanceled)) + case <-reqDone: + } + }() + + rsp, err := c.doRequest(req, str) + if err != nil { // if any error occurred + close(reqDone) + <-done + return nil, maybeReplaceError(err) + } + return rsp, maybeReplaceError(err) +} + +// ReceivedSettings returns a channel that is closed once the server's HTTP/3 settings were received. +// Settings can be obtained from the Settings method after the channel was closed. +func (c *ClientConn) ReceivedSettings() <-chan struct{} { + return c.conn.ReceivedSettings() +} + +// Settings returns the HTTP/3 settings for this connection. +// It is only valid to call this function after the channel returned by ReceivedSettings was closed. +func (c *ClientConn) Settings() *Settings { + return c.conn.Settings() +} + +// CloseWithError closes the connection with the given error code and message. +// It is invalid to call this function after the connection was closed. +func (c *ClientConn) CloseWithError(code ErrCode, msg string) error { + return c.conn.CloseWithError(quic.ApplicationErrorCode(code), msg) +} + +// Context returns a context that is cancelled when the connection is closed. +func (c *ClientConn) Context() context.Context { + return c.conn.Context() +} + +// cancelingReader reads from the io.Reader. +// It cancels writing on the stream if any error other than io.EOF occurs. +type cancelingReader struct { + r io.Reader + str *RequestStream +} + +func (r *cancelingReader) Read(b []byte) (int, error) { + n, err := r.r.Read(b) + if err != nil && err != io.EOF { + r.str.CancelWrite(quic.StreamErrorCode(ErrCodeRequestCanceled)) + } + return n, err +} + +func (c *ClientConn) sendRequestBody(str *RequestStream, body io.ReadCloser, contentLength int64) error { + defer body.Close() + buf := make([]byte, bodyCopyBufferSize) + sr := &cancelingReader{str: str, r: body} + if contentLength == -1 { + _, err := io.CopyBuffer(str, sr, buf) + return err + } + + // make sure we don't send more bytes than the content length + n, err := io.CopyBuffer(str, io.LimitReader(sr, contentLength), buf) + if err != nil { + return err + } + var extra int64 + extra, err = io.CopyBuffer(io.Discard, sr, buf) + n += extra + if n > contentLength { + str.CancelWrite(quic.StreamErrorCode(ErrCodeRequestCanceled)) + return fmt.Errorf("http: ContentLength=%d with Body length %d", contentLength, n) + } + return err +} + +func (c *ClientConn) doRequest(req *http.Request, str *RequestStream) (*http.Response, error) { + trace := httptrace.ContextClientTrace(req.Context()) + if err := str.sendRequestHeader(req); err != nil { + traceWroteRequest(trace, err) + return nil, err + } + if req.Body == nil { + traceWroteRequest(trace, nil) + str.Close() + } else { + // send the request body asynchronously + go func() { + contentLength := int64(-1) + // According to the documentation for http.Request.ContentLength, + // a value of 0 with a non-nil Body is also treated as unknown content length. + if req.ContentLength > 0 { + contentLength = req.ContentLength + } + err := c.sendRequestBody(str, req.Body, contentLength) + traceWroteRequest(trace, err) + if err != nil { + if c.logger != nil { + c.logger.Debug("error writing request", "error", err) + } + } + str.Close() + }() + } + + // copy from net/http: support 1xx responses + var num1xx int // number of informational 1xx headers received + var res *http.Response + for { + var err error + res, err = str.ReadResponse() + if err != nil { + return nil, err + } + resCode := res.StatusCode + is1xx := 100 <= resCode && resCode <= 199 + // treat 101 as a terminal status, see https://github.com/golang/go/issues/26161 + is1xxNonTerminal := is1xx && resCode != http.StatusSwitchingProtocols + if is1xxNonTerminal { + num1xx++ + if num1xx > max1xxResponses { + str.CancelRead(quic.StreamErrorCode(ErrCodeExcessiveLoad)) + str.CancelWrite(quic.StreamErrorCode(ErrCodeExcessiveLoad)) + return nil, errors.New("http3: too many 1xx informational responses") + } + traceGot1xxResponse(trace, resCode, textproto.MIMEHeader(res.Header)) + if resCode == http.StatusContinue { + traceGot100Continue(trace) + } + continue + } + break + } + connState := c.conn.ConnectionState().TLS + res.TLS = &connState + res.Request = req + return res, nil +} + +// Conn returns the underlying HTTP/3 connection. +// This method is only useful for advanced use cases, such as when the application needs to +// open streams on the HTTP/3 connection (e.g. WebTransport). +func (c *ClientConn) Conn() *Conn { + return c.conn +} diff --git a/vendor/github.com/quic-go/quic-go/http3/conn.go b/vendor/github.com/quic-go/quic-go/http3/conn.go new file mode 100644 index 0000000..8426649 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/conn.go @@ -0,0 +1,434 @@ +package http3 + +import ( + "context" + "errors" + "fmt" + "io" + "log/slog" + "net" + "net/http" + "net/http/httptrace" + "sync" + "sync/atomic" + "time" + + "github.com/quic-go/quic-go" + "github.com/quic-go/quic-go/quicvarint" + + "github.com/quic-go/qpack" +) + +const maxQuarterStreamID = 1<<60 - 1 + +var errGoAway = errors.New("connection in graceful shutdown") + +// invalidStreamID is a stream ID that is invalid. The first valid stream ID in QUIC is 0. +const invalidStreamID = quic.StreamID(-1) + +// Conn is an HTTP/3 connection. +// It has all methods from the quic.Conn expect for AcceptStream, AcceptUniStream, +// SendDatagram and ReceiveDatagram. +type Conn struct { + conn *quic.Conn + + ctx context.Context + + isServer bool + logger *slog.Logger + + enableDatagrams bool + + decoder *qpack.Decoder + + streamMx sync.Mutex + streams map[quic.StreamID]*stateTrackingStream + lastStreamID quic.StreamID + maxStreamID quic.StreamID + + settings *Settings + receivedSettings chan struct{} + + idleTimeout time.Duration + idleTimer *time.Timer +} + +func newConnection( + ctx context.Context, + quicConn *quic.Conn, + enableDatagrams bool, + isServer bool, + logger *slog.Logger, + idleTimeout time.Duration, +) *Conn { + c := &Conn{ + ctx: ctx, + conn: quicConn, + isServer: isServer, + logger: logger, + idleTimeout: idleTimeout, + enableDatagrams: enableDatagrams, + decoder: qpack.NewDecoder(func(hf qpack.HeaderField) {}), + receivedSettings: make(chan struct{}), + streams: make(map[quic.StreamID]*stateTrackingStream), + maxStreamID: invalidStreamID, + lastStreamID: invalidStreamID, + } + if idleTimeout > 0 { + c.idleTimer = time.AfterFunc(idleTimeout, c.onIdleTimer) + } + return c +} + +func (c *Conn) OpenStream() (*quic.Stream, error) { + return c.conn.OpenStream() +} + +func (c *Conn) OpenStreamSync(ctx context.Context) (*quic.Stream, error) { + return c.conn.OpenStreamSync(ctx) +} + +func (c *Conn) OpenUniStream() (*quic.SendStream, error) { + return c.conn.OpenUniStream() +} + +func (c *Conn) OpenUniStreamSync(ctx context.Context) (*quic.SendStream, error) { + return c.conn.OpenUniStreamSync(ctx) +} + +func (c *Conn) LocalAddr() net.Addr { + return c.conn.LocalAddr() +} + +func (c *Conn) RemoteAddr() net.Addr { + return c.conn.RemoteAddr() +} + +func (c *Conn) HandshakeComplete() <-chan struct{} { + return c.conn.HandshakeComplete() +} + +func (c *Conn) ConnectionState() quic.ConnectionState { + return c.conn.ConnectionState() +} + +func (c *Conn) onIdleTimer() { + c.CloseWithError(quic.ApplicationErrorCode(ErrCodeNoError), "idle timeout") +} + +func (c *Conn) clearStream(id quic.StreamID) { + c.streamMx.Lock() + defer c.streamMx.Unlock() + + delete(c.streams, id) + if c.idleTimeout > 0 && len(c.streams) == 0 { + c.idleTimer.Reset(c.idleTimeout) + } + // The server is performing a graceful shutdown. + // If no more streams are remaining, close the connection. + if c.maxStreamID != invalidStreamID { + if len(c.streams) == 0 { + c.CloseWithError(quic.ApplicationErrorCode(ErrCodeNoError), "") + } + } +} + +func (c *Conn) openRequestStream( + ctx context.Context, + requestWriter *requestWriter, + reqDone chan<- struct{}, + disableCompression bool, + maxHeaderBytes uint64, +) (*RequestStream, error) { + c.streamMx.Lock() + maxStreamID := c.maxStreamID + var nextStreamID quic.StreamID + if c.lastStreamID == invalidStreamID { + nextStreamID = 0 + } else { + nextStreamID = c.lastStreamID + 4 + } + c.streamMx.Unlock() + // Streams with stream ID equal to or greater than the stream ID carried in the GOAWAY frame + // will be rejected, see section 5.2 of RFC 9114. + if maxStreamID != invalidStreamID && nextStreamID >= maxStreamID { + return nil, errGoAway + } + + str, err := c.OpenStreamSync(ctx) + if err != nil { + return nil, err + } + hstr := newStateTrackingStream(str, c, func(b []byte) error { return c.sendDatagram(str.StreamID(), b) }) + c.streamMx.Lock() + c.streams[str.StreamID()] = hstr + c.lastStreamID = str.StreamID() + c.streamMx.Unlock() + rsp := &http.Response{} + trace := httptrace.ContextClientTrace(ctx) + return newRequestStream( + newStream(hstr, c, trace, func(r io.Reader, l uint64) error { + hdr, err := c.decodeTrailers(r, l, maxHeaderBytes) + if err != nil { + return err + } + rsp.Trailer = hdr + return nil + }), + requestWriter, + reqDone, + c.decoder, + disableCompression, + maxHeaderBytes, + rsp, + ), nil +} + +func (c *Conn) decodeTrailers(r io.Reader, l, maxHeaderBytes uint64) (http.Header, error) { + if l > maxHeaderBytes { + return nil, fmt.Errorf("HEADERS frame too large: %d bytes (max: %d)", l, maxHeaderBytes) + } + + b := make([]byte, l) + if _, err := io.ReadFull(r, b); err != nil { + return nil, err + } + fields, err := c.decoder.DecodeFull(b) + if err != nil { + return nil, err + } + return parseTrailers(fields) +} + +// only used by the server +func (c *Conn) acceptStream(ctx context.Context) (*stateTrackingStream, error) { + str, err := c.conn.AcceptStream(ctx) + if err != nil { + return nil, err + } + strID := str.StreamID() + hstr := newStateTrackingStream(str, c, func(b []byte) error { return c.sendDatagram(strID, b) }) + c.streamMx.Lock() + c.streams[strID] = hstr + if c.idleTimeout > 0 { + if len(c.streams) == 1 { + c.idleTimer.Stop() + } + } + c.streamMx.Unlock() + return hstr, nil +} + +func (c *Conn) CloseWithError(code quic.ApplicationErrorCode, msg string) error { + if c.idleTimer != nil { + c.idleTimer.Stop() + } + return c.conn.CloseWithError(code, msg) +} + +func (c *Conn) handleUnidirectionalStreams(hijack func(StreamType, quic.ConnectionTracingID, *quic.ReceiveStream, error) (hijacked bool)) { + var ( + rcvdControlStr atomic.Bool + rcvdQPACKEncoderStr atomic.Bool + rcvdQPACKDecoderStr atomic.Bool + ) + + for { + str, err := c.conn.AcceptUniStream(context.Background()) + if err != nil { + if c.logger != nil { + c.logger.Debug("accepting unidirectional stream failed", "error", err) + } + return + } + + go func(str *quic.ReceiveStream) { + streamType, err := quicvarint.Read(quicvarint.NewReader(str)) + if err != nil { + id := c.Context().Value(quic.ConnectionTracingKey).(quic.ConnectionTracingID) + if hijack != nil && hijack(StreamType(streamType), id, str, err) { + return + } + if c.logger != nil { + c.logger.Debug("reading stream type on stream failed", "stream ID", str.StreamID(), "error", err) + } + return + } + // We're only interested in the control stream here. + switch streamType { + case streamTypeControlStream: + case streamTypeQPACKEncoderStream: + if isFirst := rcvdQPACKEncoderStr.CompareAndSwap(false, true); !isFirst { + c.CloseWithError(quic.ApplicationErrorCode(ErrCodeStreamCreationError), "duplicate QPACK encoder stream") + } + // Our QPACK implementation doesn't use the dynamic table yet. + return + case streamTypeQPACKDecoderStream: + if isFirst := rcvdQPACKDecoderStr.CompareAndSwap(false, true); !isFirst { + c.CloseWithError(quic.ApplicationErrorCode(ErrCodeStreamCreationError), "duplicate QPACK decoder stream") + } + // Our QPACK implementation doesn't use the dynamic table yet. + return + case streamTypePushStream: + if c.isServer { + // only the server can push + c.CloseWithError(quic.ApplicationErrorCode(ErrCodeStreamCreationError), "") + } else { + // we never increased the Push ID, so we don't expect any push streams + c.CloseWithError(quic.ApplicationErrorCode(ErrCodeIDError), "") + } + return + default: + if hijack != nil { + if hijack( + StreamType(streamType), + c.Context().Value(quic.ConnectionTracingKey).(quic.ConnectionTracingID), + str, + nil, + ) { + return + } + } + str.CancelRead(quic.StreamErrorCode(ErrCodeStreamCreationError)) + return + } + // Only a single control stream is allowed. + if isFirstControlStr := rcvdControlStr.CompareAndSwap(false, true); !isFirstControlStr { + c.conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeStreamCreationError), "duplicate control stream") + return + } + c.handleControlStream(str) + }(str) + } +} + +func (c *Conn) handleControlStream(str *quic.ReceiveStream) { + fp := &frameParser{closeConn: c.conn.CloseWithError, r: str} + f, err := fp.ParseNext() + if err != nil { + var serr *quic.StreamError + if err == io.EOF || errors.As(err, &serr) { + c.conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeClosedCriticalStream), "") + return + } + c.conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeFrameError), "") + return + } + sf, ok := f.(*settingsFrame) + if !ok { + c.conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeMissingSettings), "") + return + } + c.settings = &Settings{ + EnableDatagrams: sf.Datagram, + EnableExtendedConnect: sf.ExtendedConnect, + Other: sf.Other, + } + close(c.receivedSettings) + if sf.Datagram { + // If datagram support was enabled on our side as well as on the server side, + // we can expect it to have been negotiated both on the transport and on the HTTP/3 layer. + // Note: ConnectionState() will block until the handshake is complete (relevant when using 0-RTT). + if c.enableDatagrams && !c.ConnectionState().SupportsDatagrams { + c.CloseWithError(quic.ApplicationErrorCode(ErrCodeSettingsError), "missing QUIC Datagram support") + return + } + go func() { + if err := c.receiveDatagrams(); err != nil { + if c.logger != nil { + c.logger.Debug("receiving datagrams failed", "error", err) + } + } + }() + } + + // we don't support server push, hence we don't expect any GOAWAY frames from the client + if c.isServer { + return + } + + for { + f, err := fp.ParseNext() + if err != nil { + var serr *quic.StreamError + if err == io.EOF || errors.As(err, &serr) { + c.conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeClosedCriticalStream), "") + return + } + c.conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeFrameError), "") + return + } + // GOAWAY is the only frame allowed at this point: + // * unexpected frames are ignored by the frame parser + // * we don't support any extension that might add support for more frames + goaway, ok := f.(*goAwayFrame) + if !ok { + c.conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeFrameUnexpected), "") + return + } + if goaway.StreamID%4 != 0 { // client-initiated, bidirectional streams + c.conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeIDError), "") + return + } + c.streamMx.Lock() + if c.maxStreamID != invalidStreamID && goaway.StreamID > c.maxStreamID { + c.streamMx.Unlock() + c.conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeIDError), "") + return + } + c.maxStreamID = goaway.StreamID + hasActiveStreams := len(c.streams) > 0 + c.streamMx.Unlock() + + // immediately close the connection if there are currently no active requests + if !hasActiveStreams { + c.CloseWithError(quic.ApplicationErrorCode(ErrCodeNoError), "") + return + } + } +} + +func (c *Conn) sendDatagram(streamID quic.StreamID, b []byte) error { + // TODO: this creates a lot of garbage and an additional copy + data := make([]byte, 0, len(b)+8) + data = quicvarint.Append(data, uint64(streamID/4)) + data = append(data, b...) + return c.conn.SendDatagram(data) +} + +func (c *Conn) receiveDatagrams() error { + for { + b, err := c.conn.ReceiveDatagram(context.Background()) + if err != nil { + return err + } + quarterStreamID, n, err := quicvarint.Parse(b) + if err != nil { + c.CloseWithError(quic.ApplicationErrorCode(ErrCodeDatagramError), "") + return fmt.Errorf("could not read quarter stream id: %w", err) + } + if quarterStreamID > maxQuarterStreamID { + c.CloseWithError(quic.ApplicationErrorCode(ErrCodeDatagramError), "") + return fmt.Errorf("invalid quarter stream id: %w", err) + } + streamID := quic.StreamID(4 * quarterStreamID) + c.streamMx.Lock() + dg, ok := c.streams[streamID] + c.streamMx.Unlock() + if !ok { + continue + } + dg.enqueueDatagram(b[n:]) + } +} + +// ReceivedSettings returns a channel that is closed once the peer's SETTINGS frame was received. +// Settings can be optained from the Settings method after the channel was closed. +func (c *Conn) ReceivedSettings() <-chan struct{} { return c.receivedSettings } + +// Settings returns the settings received on this connection. +// It is only valid to call this function after the channel returned by ReceivedSettings was closed. +func (c *Conn) Settings() *Settings { return c.settings } + +// Context returns the context of the underlying QUIC connection. +func (c *Conn) Context() context.Context { return c.ctx } diff --git a/vendor/github.com/quic-go/quic-go/http3/error.go b/vendor/github.com/quic-go/quic-go/http3/error.go new file mode 100644 index 0000000..82fdae6 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/error.go @@ -0,0 +1,63 @@ +package http3 + +import ( + "errors" + "fmt" + + "github.com/quic-go/quic-go" +) + +// Error is returned from the round tripper (for HTTP clients) +// and inside the HTTP handler (for HTTP servers) if an HTTP/3 error occurs. +// See section 8 of RFC 9114. +type Error struct { + Remote bool + ErrorCode ErrCode + ErrorMessage string +} + +var _ error = &Error{} + +func (e *Error) Error() string { + s := e.ErrorCode.string() + if s == "" { + s = fmt.Sprintf("H3 error (%#x)", uint64(e.ErrorCode)) + } + // Usually errors are remote. Only make it explicit for local errors. + if !e.Remote { + s += " (local)" + } + if e.ErrorMessage != "" { + s += ": " + e.ErrorMessage + } + return s +} + +func (e *Error) Is(target error) bool { + t, ok := target.(*Error) + return ok && e.ErrorCode == t.ErrorCode && e.Remote == t.Remote +} + +func maybeReplaceError(err error) error { + if err == nil { + return nil + } + + var ( + e Error + strErr *quic.StreamError + appErr *quic.ApplicationError + ) + switch { + default: + return err + case errors.As(err, &strErr): + e.Remote = strErr.Remote + e.ErrorCode = ErrCode(strErr.ErrorCode) + case errors.As(err, &appErr): + e.Remote = appErr.Remote + e.ErrorCode = ErrCode(appErr.ErrorCode) + e.ErrorMessage = appErr.ErrorMessage + } + return &e +} diff --git a/vendor/github.com/quic-go/quic-go/http3/error_codes.go b/vendor/github.com/quic-go/quic-go/http3/error_codes.go new file mode 100644 index 0000000..ae64658 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/error_codes.go @@ -0,0 +1,81 @@ +package http3 + +import ( + "fmt" + + "github.com/quic-go/quic-go" +) + +type ErrCode quic.ApplicationErrorCode + +const ( + ErrCodeNoError ErrCode = 0x100 + ErrCodeGeneralProtocolError ErrCode = 0x101 + ErrCodeInternalError ErrCode = 0x102 + ErrCodeStreamCreationError ErrCode = 0x103 + ErrCodeClosedCriticalStream ErrCode = 0x104 + ErrCodeFrameUnexpected ErrCode = 0x105 + ErrCodeFrameError ErrCode = 0x106 + ErrCodeExcessiveLoad ErrCode = 0x107 + ErrCodeIDError ErrCode = 0x108 + ErrCodeSettingsError ErrCode = 0x109 + ErrCodeMissingSettings ErrCode = 0x10a + ErrCodeRequestRejected ErrCode = 0x10b + ErrCodeRequestCanceled ErrCode = 0x10c + ErrCodeRequestIncomplete ErrCode = 0x10d + ErrCodeMessageError ErrCode = 0x10e + ErrCodeConnectError ErrCode = 0x10f + ErrCodeVersionFallback ErrCode = 0x110 + ErrCodeDatagramError ErrCode = 0x33 +) + +func (e ErrCode) String() string { + s := e.string() + if s != "" { + return s + } + return fmt.Sprintf("unknown error code: %#x", uint16(e)) +} + +func (e ErrCode) string() string { + switch e { + case ErrCodeNoError: + return "H3_NO_ERROR" + case ErrCodeGeneralProtocolError: + return "H3_GENERAL_PROTOCOL_ERROR" + case ErrCodeInternalError: + return "H3_INTERNAL_ERROR" + case ErrCodeStreamCreationError: + return "H3_STREAM_CREATION_ERROR" + case ErrCodeClosedCriticalStream: + return "H3_CLOSED_CRITICAL_STREAM" + case ErrCodeFrameUnexpected: + return "H3_FRAME_UNEXPECTED" + case ErrCodeFrameError: + return "H3_FRAME_ERROR" + case ErrCodeExcessiveLoad: + return "H3_EXCESSIVE_LOAD" + case ErrCodeIDError: + return "H3_ID_ERROR" + case ErrCodeSettingsError: + return "H3_SETTINGS_ERROR" + case ErrCodeMissingSettings: + return "H3_MISSING_SETTINGS" + case ErrCodeRequestRejected: + return "H3_REQUEST_REJECTED" + case ErrCodeRequestCanceled: + return "H3_REQUEST_CANCELLED" + case ErrCodeRequestIncomplete: + return "H3_INCOMPLETE_REQUEST" + case ErrCodeMessageError: + return "H3_MESSAGE_ERROR" + case ErrCodeConnectError: + return "H3_CONNECT_ERROR" + case ErrCodeVersionFallback: + return "H3_VERSION_FALLBACK" + case ErrCodeDatagramError: + return "H3_DATAGRAM_ERROR" + default: + return "" + } +} diff --git a/vendor/github.com/quic-go/quic-go/http3/frames.go b/vendor/github.com/quic-go/quic-go/http3/frames.go new file mode 100644 index 0000000..e5149cb --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/frames.go @@ -0,0 +1,221 @@ +package http3 + +import ( + "bytes" + "errors" + "fmt" + "io" + + "github.com/quic-go/quic-go" + "github.com/quic-go/quic-go/quicvarint" +) + +// FrameType is the frame type of a HTTP/3 frame +type FrameType uint64 + +type unknownFrameHandlerFunc func(FrameType, error) (processed bool, err error) + +type frame interface{} + +var errHijacked = errors.New("hijacked") + +type frameParser struct { + r io.Reader + closeConn func(quic.ApplicationErrorCode, string) error + unknownFrameHandler unknownFrameHandlerFunc +} + +func (p *frameParser) ParseNext() (frame, error) { + qr := quicvarint.NewReader(p.r) + for { + t, err := quicvarint.Read(qr) + if err != nil { + if p.unknownFrameHandler != nil { + hijacked, err := p.unknownFrameHandler(0, err) + if err != nil { + return nil, err + } + if hijacked { + return nil, errHijacked + } + } + return nil, err + } + // Call the unknownFrameHandler for frames not defined in the HTTP/3 spec + if t > 0xd && p.unknownFrameHandler != nil { + hijacked, err := p.unknownFrameHandler(FrameType(t), nil) + if err != nil { + return nil, err + } + if hijacked { + return nil, errHijacked + } + // If the unknownFrameHandler didn't process the frame, it is our responsibility to skip it. + } + l, err := quicvarint.Read(qr) + if err != nil { + return nil, err + } + + switch t { + case 0x0: + return &dataFrame{Length: l}, nil + case 0x1: + return &headersFrame{Length: l}, nil + case 0x4: + return parseSettingsFrame(p.r, l) + case 0x3: // CANCEL_PUSH + case 0x5: // PUSH_PROMISE + case 0x7: + return parseGoAwayFrame(qr, l) + case 0xd: // MAX_PUSH_ID + case 0x2, 0x6, 0x8, 0x9: + p.closeConn(quic.ApplicationErrorCode(ErrCodeFrameUnexpected), "") + return nil, fmt.Errorf("http3: reserved frame type: %d", t) + } + // skip over unknown frames + if _, err := io.CopyN(io.Discard, qr, int64(l)); err != nil { + return nil, err + } + } +} + +type dataFrame struct { + Length uint64 +} + +func (f *dataFrame) Append(b []byte) []byte { + b = quicvarint.Append(b, 0x0) + return quicvarint.Append(b, f.Length) +} + +type headersFrame struct { + Length uint64 +} + +func (f *headersFrame) Append(b []byte) []byte { + b = quicvarint.Append(b, 0x1) + return quicvarint.Append(b, f.Length) +} + +const ( + // Extended CONNECT, RFC 9220 + settingExtendedConnect = 0x8 + // HTTP Datagrams, RFC 9297 + settingDatagram = 0x33 +) + +type settingsFrame struct { + Datagram bool // HTTP Datagrams, RFC 9297 + ExtendedConnect bool // Extended CONNECT, RFC 9220 + + Other map[uint64]uint64 // all settings that we don't explicitly recognize +} + +func parseSettingsFrame(r io.Reader, l uint64) (*settingsFrame, error) { + if l > 8*(1<<10) { + return nil, fmt.Errorf("unexpected size for SETTINGS frame: %d", l) + } + buf := make([]byte, l) + if _, err := io.ReadFull(r, buf); err != nil { + if err == io.ErrUnexpectedEOF { + return nil, io.EOF + } + return nil, err + } + frame := &settingsFrame{} + b := bytes.NewReader(buf) + var readDatagram, readExtendedConnect bool + for b.Len() > 0 { + id, err := quicvarint.Read(b) + if err != nil { // should not happen. We allocated the whole frame already. + return nil, err + } + val, err := quicvarint.Read(b) + if err != nil { // should not happen. We allocated the whole frame already. + return nil, err + } + + switch id { + case settingExtendedConnect: + if readExtendedConnect { + return nil, fmt.Errorf("duplicate setting: %d", id) + } + readExtendedConnect = true + if val != 0 && val != 1 { + return nil, fmt.Errorf("invalid value for SETTINGS_ENABLE_CONNECT_PROTOCOL: %d", val) + } + frame.ExtendedConnect = val == 1 + case settingDatagram: + if readDatagram { + return nil, fmt.Errorf("duplicate setting: %d", id) + } + readDatagram = true + if val != 0 && val != 1 { + return nil, fmt.Errorf("invalid value for SETTINGS_H3_DATAGRAM: %d", val) + } + frame.Datagram = val == 1 + default: + if _, ok := frame.Other[id]; ok { + return nil, fmt.Errorf("duplicate setting: %d", id) + } + if frame.Other == nil { + frame.Other = make(map[uint64]uint64) + } + frame.Other[id] = val + } + } + return frame, nil +} + +func (f *settingsFrame) Append(b []byte) []byte { + b = quicvarint.Append(b, 0x4) + var l int + for id, val := range f.Other { + l += quicvarint.Len(id) + quicvarint.Len(val) + } + if f.Datagram { + l += quicvarint.Len(settingDatagram) + quicvarint.Len(1) + } + if f.ExtendedConnect { + l += quicvarint.Len(settingExtendedConnect) + quicvarint.Len(1) + } + b = quicvarint.Append(b, uint64(l)) + if f.Datagram { + b = quicvarint.Append(b, settingDatagram) + b = quicvarint.Append(b, 1) + } + if f.ExtendedConnect { + b = quicvarint.Append(b, settingExtendedConnect) + b = quicvarint.Append(b, 1) + } + for id, val := range f.Other { + b = quicvarint.Append(b, id) + b = quicvarint.Append(b, val) + } + return b +} + +type goAwayFrame struct { + StreamID quic.StreamID +} + +func parseGoAwayFrame(r io.ByteReader, l uint64) (*goAwayFrame, error) { + frame := &goAwayFrame{} + cbr := countingByteReader{ByteReader: r} + id, err := quicvarint.Read(&cbr) + if err != nil { + return nil, err + } + if cbr.Read != int(l) { + return nil, errors.New("GOAWAY frame: inconsistent length") + } + frame.StreamID = quic.StreamID(id) + return frame, nil +} + +func (f *goAwayFrame) Append(b []byte) []byte { + b = quicvarint.Append(b, 0x7) + b = quicvarint.Append(b, uint64(quicvarint.Len(uint64(f.StreamID)))) + return quicvarint.Append(b, uint64(f.StreamID)) +} diff --git a/vendor/github.com/quic-go/quic-go/http3/gzip_reader.go b/vendor/github.com/quic-go/quic-go/http3/gzip_reader.go new file mode 100644 index 0000000..01983ac --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/gzip_reader.go @@ -0,0 +1,39 @@ +package http3 + +// copied from net/transport.go + +// gzipReader wraps a response body so it can lazily +// call gzip.NewReader on the first call to Read +import ( + "compress/gzip" + "io" +) + +// call gzip.NewReader on the first call to Read +type gzipReader struct { + body io.ReadCloser // underlying Response.Body + zr *gzip.Reader // lazily-initialized gzip reader + zerr error // sticky error +} + +func newGzipReader(body io.ReadCloser) io.ReadCloser { + return &gzipReader{body: body} +} + +func (gz *gzipReader) Read(p []byte) (n int, err error) { + if gz.zerr != nil { + return 0, gz.zerr + } + if gz.zr == nil { + gz.zr, err = gzip.NewReader(gz.body) + if err != nil { + gz.zerr = err + return 0, err + } + } + return gz.zr.Read(p) +} + +func (gz *gzipReader) Close() error { + return gz.body.Close() +} diff --git a/vendor/github.com/quic-go/quic-go/http3/headers.go b/vendor/github.com/quic-go/quic-go/http3/headers.go new file mode 100644 index 0000000..db9afc9 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/headers.go @@ -0,0 +1,263 @@ +package http3 + +import ( + "errors" + "fmt" + "net/http" + "net/textproto" + "net/url" + "strconv" + "strings" + + "golang.org/x/net/http/httpguts" + + "github.com/quic-go/qpack" +) + +type header struct { + // Pseudo header fields defined in RFC 9114 + Path string + Method string + Authority string + Scheme string + Status string + // for Extended connect + Protocol string + // parsed and deduplicated. -1 if no Content-Length header is sent + ContentLength int64 + // all non-pseudo headers + Headers http.Header +} + +// connection-specific header fields must not be sent on HTTP/3 +var invalidHeaderFields = [...]string{ + "connection", + "keep-alive", + "proxy-connection", + "transfer-encoding", + "upgrade", +} + +func parseHeaders(headers []qpack.HeaderField, isRequest bool) (header, error) { + hdr := header{Headers: make(http.Header, len(headers))} + var readFirstRegularHeader, readContentLength bool + var contentLengthStr string + for _, h := range headers { + // field names need to be lowercase, see section 4.2 of RFC 9114 + if strings.ToLower(h.Name) != h.Name { + return header{}, fmt.Errorf("header field is not lower-case: %s", h.Name) + } + if !httpguts.ValidHeaderFieldValue(h.Value) { + return header{}, fmt.Errorf("invalid header field value for %s: %q", h.Name, h.Value) + } + if h.IsPseudo() { + if readFirstRegularHeader { + // all pseudo headers must appear before regular header fields, see section 4.3 of RFC 9114 + return header{}, fmt.Errorf("received pseudo header %s after a regular header field", h.Name) + } + var isResponsePseudoHeader bool // pseudo headers are either valid for requests or for responses + var isDuplicatePseudoHeader bool // pseudo headers are allowed to appear exactly once + switch h.Name { + case ":path": + isDuplicatePseudoHeader = hdr.Path != "" + hdr.Path = h.Value + case ":method": + isDuplicatePseudoHeader = hdr.Method != "" + hdr.Method = h.Value + case ":authority": + isDuplicatePseudoHeader = hdr.Authority != "" + hdr.Authority = h.Value + case ":protocol": + isDuplicatePseudoHeader = hdr.Protocol != "" + hdr.Protocol = h.Value + case ":scheme": + isDuplicatePseudoHeader = hdr.Scheme != "" + hdr.Scheme = h.Value + case ":status": + isDuplicatePseudoHeader = hdr.Status != "" + hdr.Status = h.Value + isResponsePseudoHeader = true + default: + return header{}, fmt.Errorf("unknown pseudo header: %s", h.Name) + } + if isDuplicatePseudoHeader { + return header{}, fmt.Errorf("duplicate pseudo header: %s", h.Name) + } + if isRequest && isResponsePseudoHeader { + return header{}, fmt.Errorf("invalid request pseudo header: %s", h.Name) + } + if !isRequest && !isResponsePseudoHeader { + return header{}, fmt.Errorf("invalid response pseudo header: %s", h.Name) + } + } else { + if !httpguts.ValidHeaderFieldName(h.Name) { + return header{}, fmt.Errorf("invalid header field name: %q", h.Name) + } + for _, invalidField := range invalidHeaderFields { + if h.Name == invalidField { + return header{}, fmt.Errorf("invalid header field name: %q", h.Name) + } + } + if h.Name == "te" && h.Value != "trailers" { + return header{}, fmt.Errorf("invalid TE header field value: %q", h.Value) + } + readFirstRegularHeader = true + switch h.Name { + case "content-length": + // Ignore duplicate Content-Length headers. + // Fail if the duplicates differ. + if !readContentLength { + readContentLength = true + contentLengthStr = h.Value + } else if contentLengthStr != h.Value { + return header{}, fmt.Errorf("contradicting content lengths (%s and %s)", contentLengthStr, h.Value) + } + default: + hdr.Headers.Add(h.Name, h.Value) + } + } + } + hdr.ContentLength = -1 + if len(contentLengthStr) > 0 { + // use ParseUint instead of ParseInt, so that parsing fails on negative values + cl, err := strconv.ParseUint(contentLengthStr, 10, 63) + if err != nil { + return header{}, fmt.Errorf("invalid content length: %w", err) + } + hdr.Headers.Set("Content-Length", contentLengthStr) + hdr.ContentLength = int64(cl) + } + return hdr, nil +} + +func parseTrailers(headers []qpack.HeaderField) (http.Header, error) { + h := make(http.Header, len(headers)) + for _, field := range headers { + if field.IsPseudo() { + return nil, fmt.Errorf("http3: received pseudo header in trailer: %s", field.Name) + } + h.Add(field.Name, field.Value) + } + return h, nil +} + +func requestFromHeaders(headerFields []qpack.HeaderField) (*http.Request, error) { + hdr, err := parseHeaders(headerFields, true) + if err != nil { + return nil, err + } + // concatenate cookie headers, see https://tools.ietf.org/html/rfc6265#section-5.4 + if len(hdr.Headers["Cookie"]) > 0 { + hdr.Headers.Set("Cookie", strings.Join(hdr.Headers["Cookie"], "; ")) + } + + isConnect := hdr.Method == http.MethodConnect + // Extended CONNECT, see https://datatracker.ietf.org/doc/html/rfc8441#section-4 + isExtendedConnected := isConnect && hdr.Protocol != "" + if isExtendedConnected { + if hdr.Scheme == "" || hdr.Path == "" || hdr.Authority == "" { + return nil, errors.New("extended CONNECT: :scheme, :path and :authority must not be empty") + } + } else if isConnect { + if hdr.Path != "" || hdr.Authority == "" { // normal CONNECT + return nil, errors.New(":path must be empty and :authority must not be empty") + } + } else if len(hdr.Path) == 0 || len(hdr.Authority) == 0 || len(hdr.Method) == 0 { + return nil, errors.New(":path, :authority and :method must not be empty") + } + + if !isExtendedConnected && len(hdr.Protocol) > 0 { + return nil, errors.New(":protocol must be empty") + } + + var u *url.URL + var requestURI string + + protocol := "HTTP/3.0" + + if isConnect { + u = &url.URL{} + if isExtendedConnected { + u, err = url.ParseRequestURI(hdr.Path) + if err != nil { + return nil, err + } + protocol = hdr.Protocol + } else { + u.Path = hdr.Path + } + u.Scheme = hdr.Scheme + u.Host = hdr.Authority + requestURI = hdr.Authority + } else { + u, err = url.ParseRequestURI(hdr.Path) + if err != nil { + return nil, fmt.Errorf("invalid content length: %w", err) + } + requestURI = hdr.Path + } + + return &http.Request{ + Method: hdr.Method, + URL: u, + Proto: protocol, + ProtoMajor: 3, + ProtoMinor: 0, + Header: hdr.Headers, + Body: nil, + ContentLength: hdr.ContentLength, + Host: hdr.Authority, + RequestURI: requestURI, + }, nil +} + +// updateResponseFromHeaders sets up http.Response as an HTTP/3 response, +// using the decoded qpack header filed. +// It is only called for the HTTP header (and not the HTTP trailer). +// It takes an http.Response as an argument to allow the caller to set the trailer later on. +func updateResponseFromHeaders(rsp *http.Response, headerFields []qpack.HeaderField) error { + hdr, err := parseHeaders(headerFields, false) + if err != nil { + return err + } + if hdr.Status == "" { + return errors.New("missing :status field") + } + rsp.Proto = "HTTP/3.0" + rsp.ProtoMajor = 3 + rsp.Header = hdr.Headers + processTrailers(rsp) + rsp.ContentLength = hdr.ContentLength + + status, err := strconv.Atoi(hdr.Status) + if err != nil { + return fmt.Errorf("invalid status code: %w", err) + } + rsp.StatusCode = status + rsp.Status = hdr.Status + " " + http.StatusText(status) + return nil +} + +// processTrailers initializes the rsp.Trailer map, and adds keys for every announced header value. +// The Trailer header is removed from the http.Response.Header map. +// It handles both duplicate as well as comma-separated values for the Trailer header. +// For example: +// +// Trailer: Trailer1, Trailer2 +// Trailer: Trailer3 +// +// Will result in a http.Response.Trailer map containing the keys "Trailer1", "Trailer2", "Trailer3". +func processTrailers(rsp *http.Response) { + rawTrailers, ok := rsp.Header["Trailer"] + if !ok { + return + } + + rsp.Trailer = make(http.Header) + for _, rawVal := range rawTrailers { + for _, val := range strings.Split(rawVal, ",") { + rsp.Trailer[http.CanonicalHeaderKey(textproto.TrimString(val))] = nil + } + } + delete(rsp.Header, "Trailer") +} diff --git a/vendor/github.com/quic-go/quic-go/http3/ip_addr.go b/vendor/github.com/quic-go/quic-go/http3/ip_addr.go new file mode 100644 index 0000000..876a1e3 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/ip_addr.go @@ -0,0 +1,48 @@ +package http3 + +import ( + "net" + "strings" +) + +// An addrList represents a list of network endpoint addresses. +// Copy from [net.addrList] and change type from [net.Addr] to [net.IPAddr] +type addrList []net.IPAddr + +// isIPv4 reports whether addr contains an IPv4 address. +func isIPv4(addr net.IPAddr) bool { + return addr.IP.To4() != nil +} + +// isNotIPv4 reports whether addr does not contain an IPv4 address. +func isNotIPv4(addr net.IPAddr) bool { return !isIPv4(addr) } + +// forResolve returns the most appropriate address in address for +// a call to ResolveTCPAddr, ResolveUDPAddr, or ResolveIPAddr. +// IPv4 is preferred, unless addr contains an IPv6 literal. +func (addrs addrList) forResolve(network, addr string) net.IPAddr { + var want6 bool + switch network { + case "ip": + // IPv6 literal (addr does NOT contain a port) + want6 = strings.ContainsRune(addr, ':') + case "tcp", "udp": + // IPv6 literal. (addr contains a port, so look for '[') + want6 = strings.ContainsRune(addr, '[') + } + if want6 { + return addrs.first(isNotIPv4) + } + return addrs.first(isIPv4) +} + +// first returns the first address which satisfies strategy, or if +// none do, then the first address of any kind. +func (addrs addrList) first(strategy func(net.IPAddr) bool) net.IPAddr { + for _, addr := range addrs { + if strategy(addr) { + return addr + } + } + return addrs[0] +} diff --git a/vendor/github.com/quic-go/quic-go/http3/mockgen.go b/vendor/github.com/quic-go/quic-go/http3/mockgen.go new file mode 100644 index 0000000..72c8570 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/mockgen.go @@ -0,0 +1,11 @@ +//go:build gomock || generate + +package http3 + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -mock_names=TestClientConnInterface=MockClientConn -package http3 -destination mock_clientconn_test.go github.com/quic-go/quic-go/http3 TestClientConnInterface" +type TestClientConnInterface = clientConn + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -mock_names=DatagramStream=MockDatagramStream -package http3 -destination mock_datagram_stream_test.go github.com/quic-go/quic-go/http3 DatagramStream" +type DatagramStream = datagramStream + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -package http3 -destination mock_quic_listener_test.go github.com/quic-go/quic-go/http3 QUICListener" diff --git a/vendor/github.com/quic-go/quic-go/http3/request_writer.go b/vendor/github.com/quic-go/quic-go/http3/request_writer.go new file mode 100644 index 0000000..6d473aa --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/request_writer.go @@ -0,0 +1,288 @@ +package http3 + +import ( + "bytes" + "errors" + "fmt" + "io" + "net" + "net/http" + "net/http/httptrace" + "strconv" + "strings" + "sync" + + "golang.org/x/net/http/httpguts" + "golang.org/x/net/http2/hpack" + "golang.org/x/net/idna" + + "github.com/quic-go/qpack" +) + +const bodyCopyBufferSize = 8 * 1024 + +type requestWriter struct { + mutex sync.Mutex + encoder *qpack.Encoder + headerBuf *bytes.Buffer +} + +func newRequestWriter() *requestWriter { + headerBuf := &bytes.Buffer{} + encoder := qpack.NewEncoder(headerBuf) + return &requestWriter{ + encoder: encoder, + headerBuf: headerBuf, + } +} + +func (w *requestWriter) WriteRequestHeader(wr io.Writer, req *http.Request, gzip bool) error { + // TODO: figure out how to add support for trailers + buf := &bytes.Buffer{} + if err := w.writeHeaders(buf, req, gzip); err != nil { + return err + } + if _, err := wr.Write(buf.Bytes()); err != nil { + return err + } + trace := httptrace.ContextClientTrace(req.Context()) + traceWroteHeaders(trace) + return nil +} + +func (w *requestWriter) writeHeaders(wr io.Writer, req *http.Request, gzip bool) error { + w.mutex.Lock() + defer w.mutex.Unlock() + defer w.encoder.Close() + defer w.headerBuf.Reset() + + if err := w.encodeHeaders(req, gzip, "", actualContentLength(req)); err != nil { + return err + } + + b := make([]byte, 0, 128) + b = (&headersFrame{Length: uint64(w.headerBuf.Len())}).Append(b) + if _, err := wr.Write(b); err != nil { + return err + } + _, err := wr.Write(w.headerBuf.Bytes()) + return err +} + +func isExtendedConnectRequest(req *http.Request) bool { + return req.Method == http.MethodConnect && req.Proto != "" && req.Proto != "HTTP/1.1" +} + +// copied from net/transport.go +// Modified to support Extended CONNECT: +// Contrary to what the godoc for the http.Request says, +// we do respect the Proto field if the method is CONNECT. +func (w *requestWriter) encodeHeaders(req *http.Request, addGzipHeader bool, trailers string, contentLength int64) error { + host := req.Host + if host == "" { + host = req.URL.Host + } + host, err := httpguts.PunycodeHostPort(host) + if err != nil { + return err + } + if !httpguts.ValidHostHeader(host) { + return errors.New("http3: invalid Host header") + } + + // http.NewRequest sets this field to HTTP/1.1 + isExtendedConnect := isExtendedConnectRequest(req) + + var path string + if req.Method != http.MethodConnect || isExtendedConnect { + path = req.URL.RequestURI() + if !validPseudoPath(path) { + orig := path + path = strings.TrimPrefix(path, req.URL.Scheme+"://"+host) + if !validPseudoPath(path) { + if req.URL.Opaque != "" { + return fmt.Errorf("invalid request :path %q from URL.Opaque = %q", orig, req.URL.Opaque) + } else { + return fmt.Errorf("invalid request :path %q", orig) + } + } + } + } + + // Check for any invalid headers and return an error before we + // potentially pollute our hpack state. (We want to be able to + // continue to reuse the hpack encoder for future requests) + for k, vv := range req.Header { + if !httpguts.ValidHeaderFieldName(k) { + return fmt.Errorf("invalid HTTP header name %q", k) + } + for _, v := range vv { + if !httpguts.ValidHeaderFieldValue(v) { + return fmt.Errorf("invalid HTTP header value %q for header %q", v, k) + } + } + } + + enumerateHeaders := func(f func(name, value string)) { + // 8.1.2.3 Request Pseudo-Header Fields + // The :path pseudo-header field includes the path and query parts of the + // target URI (the path-absolute production and optionally a '?' character + // followed by the query production (see Sections 3.3 and 3.4 of + // [RFC3986]). + f(":authority", host) + f(":method", req.Method) + if req.Method != http.MethodConnect || isExtendedConnect { + f(":path", path) + f(":scheme", req.URL.Scheme) + } + if isExtendedConnect { + f(":protocol", req.Proto) + } + if trailers != "" { + f("trailer", trailers) + } + + var didUA bool + for k, vv := range req.Header { + if strings.EqualFold(k, "host") || strings.EqualFold(k, "content-length") { + // Host is :authority, already sent. + // Content-Length is automatic, set below. + continue + } else if strings.EqualFold(k, "connection") || strings.EqualFold(k, "proxy-connection") || + strings.EqualFold(k, "transfer-encoding") || strings.EqualFold(k, "upgrade") || + strings.EqualFold(k, "keep-alive") { + // Per 8.1.2.2 Connection-Specific Header + // Fields, don't send connection-specific + // fields. We have already checked if any + // are error-worthy so just ignore the rest. + continue + } else if strings.EqualFold(k, "user-agent") { + // Match Go's http1 behavior: at most one + // User-Agent. If set to nil or empty string, + // then omit it. Otherwise if not mentioned, + // include the default (below). + didUA = true + if len(vv) < 1 { + continue + } + vv = vv[:1] + if vv[0] == "" { + continue + } + + } + + for _, v := range vv { + f(k, v) + } + } + if shouldSendReqContentLength(req.Method, contentLength) { + f("content-length", strconv.FormatInt(contentLength, 10)) + } + if addGzipHeader { + f("accept-encoding", "gzip") + } + if !didUA { + f("user-agent", defaultUserAgent) + } + } + + // Do a first pass over the headers counting bytes to ensure + // we don't exceed cc.peerMaxHeaderListSize. This is done as a + // separate pass before encoding the headers to prevent + // modifying the hpack state. + hlSize := uint64(0) + enumerateHeaders(func(name, value string) { + hf := hpack.HeaderField{Name: name, Value: value} + hlSize += uint64(hf.Size()) + }) + + // TODO: check maximum header list size + // if hlSize > cc.peerMaxHeaderListSize { + // return errRequestHeaderListSize + // } + + trace := httptrace.ContextClientTrace(req.Context()) + traceHeaders := traceHasWroteHeaderField(trace) + + // Header list size is ok. Write the headers. + enumerateHeaders(func(name, value string) { + name = strings.ToLower(name) + w.encoder.WriteField(qpack.HeaderField{Name: name, Value: value}) + if traceHeaders { + traceWroteHeaderField(trace, name, value) + } + }) + + return nil +} + +// authorityAddr returns a given authority (a host/IP, or host:port / ip:port) +// and returns a host:port. The port 443 is added if needed. +func authorityAddr(authority string) (addr string) { + host, port, err := net.SplitHostPort(authority) + if err != nil { // authority didn't have a port + port = "443" + host = authority + } + if a, err := idna.ToASCII(host); err == nil { + host = a + } + // IPv6 address literal, without a port: + if strings.HasPrefix(host, "[") && strings.HasSuffix(host, "]") { + return host + ":" + port + } + return net.JoinHostPort(host, port) +} + +// validPseudoPath reports whether v is a valid :path pseudo-header +// value. It must be either: +// +// *) a non-empty string starting with '/' +// *) the string '*', for OPTIONS requests. +// +// For now this is only used a quick check for deciding when to clean +// up Opaque URLs before sending requests from the Transport. +// See golang.org/issue/16847 +// +// We used to enforce that the path also didn't start with "//", but +// Google's GFE accepts such paths and Chrome sends them, so ignore +// that part of the spec. See golang.org/issue/19103. +func validPseudoPath(v string) bool { + return (len(v) > 0 && v[0] == '/') || v == "*" +} + +// actualContentLength returns a sanitized version of +// req.ContentLength, where 0 actually means zero (not unknown) and -1 +// means unknown. +func actualContentLength(req *http.Request) int64 { + if req.Body == nil { + return 0 + } + if req.ContentLength != 0 { + return req.ContentLength + } + return -1 +} + +// shouldSendReqContentLength reports whether the http2.Transport should send +// a "content-length" request header. This logic is basically a copy of the net/http +// transferWriter.shouldSendContentLength. +// The contentLength is the corrected contentLength (so 0 means actually 0, not unknown). +// -1 means unknown. +func shouldSendReqContentLength(method string, contentLength int64) bool { + if contentLength > 0 { + return true + } + if contentLength < 0 { + return false + } + // For zero bodies, whether we send a content-length depends on the method. + // It also kinda doesn't matter for http2 either way, with END_STREAM. + switch method { + case "POST", "PUT", "PATCH": + return true + default: + return false + } +} diff --git a/vendor/github.com/quic-go/quic-go/http3/response_writer.go b/vendor/github.com/quic-go/quic-go/http3/response_writer.go new file mode 100644 index 0000000..5dc0ad3 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/response_writer.go @@ -0,0 +1,367 @@ +package http3 + +import ( + "bytes" + "fmt" + "log/slog" + "net/http" + "net/textproto" + "strconv" + "strings" + "time" + + "github.com/quic-go/qpack" + "golang.org/x/net/http/httpguts" +) + +// The HTTPStreamer allows taking over a HTTP/3 stream. The interface is implemented by the http.ResponseWriter. +// When a stream is taken over, it's the caller's responsibility to close the stream. +type HTTPStreamer interface { + HTTPStream() *Stream +} + +// The maximum length of an encoded HTTP/3 frame header is 16: +// The frame has a type and length field, both QUIC varints (maximum 8 bytes in length) +const frameHeaderLen = 16 + +const maxSmallResponseSize = 4096 + +type responseWriter struct { + str *Stream + + conn *Conn + header http.Header + trailers map[string]struct{} + buf []byte + status int // status code passed to WriteHeader + + // for responses smaller than maxSmallResponseSize, we buffer calls to Write, + // and automatically add the Content-Length header + smallResponseBuf []byte + + contentLen int64 // if handler set valid Content-Length header + numWritten int64 // bytes written + headerComplete bool // set once WriteHeader is called with a status code >= 200 + headerWritten bool // set once the response header has been serialized to the stream + isHead bool + trailerWritten bool // set once the response trailers has been serialized to the stream + + hijacked bool // set on HTTPStream is called + + logger *slog.Logger +} + +var ( + _ http.ResponseWriter = &responseWriter{} + _ http.Flusher = &responseWriter{} + _ Hijacker = &responseWriter{} + _ HTTPStreamer = &responseWriter{} + // make sure that we implement (some of the) methods used by the http.ResponseController + _ interface { + SetReadDeadline(time.Time) error + SetWriteDeadline(time.Time) error + Flush() + FlushError() error + } = &responseWriter{} +) + +func newResponseWriter(str *Stream, conn *Conn, isHead bool, logger *slog.Logger) *responseWriter { + return &responseWriter{ + str: str, + conn: conn, + header: http.Header{}, + buf: make([]byte, frameHeaderLen), + isHead: isHead, + logger: logger, + } +} + +func (w *responseWriter) Header() http.Header { + return w.header +} + +func (w *responseWriter) WriteHeader(status int) { + if w.headerComplete { + return + } + + // http status must be 3 digits + if status < 100 || status > 999 { + panic(fmt.Sprintf("invalid WriteHeader code %v", status)) + } + w.status = status + + // immediately write 1xx headers + if status < 200 { + w.writeHeader(status) + return + } + + // We're done with headers once we write a status >= 200. + w.headerComplete = true + // Add Date header. + // This is what the standard library does. + // Can be disabled by setting the Date header to nil. + if _, ok := w.header["Date"]; !ok { + w.header.Set("Date", time.Now().UTC().Format(http.TimeFormat)) + } + // Content-Length checking + // use ParseUint instead of ParseInt, as negative values are invalid + if clen := w.header.Get("Content-Length"); clen != "" { + if cl, err := strconv.ParseUint(clen, 10, 63); err == nil { + w.contentLen = int64(cl) + } else { + // emit a warning for malformed Content-Length and remove it + logger := w.logger + if logger == nil { + logger = slog.Default() + } + logger.Error("Malformed Content-Length", "value", clen) + w.header.Del("Content-Length") + } + } +} + +func (w *responseWriter) sniffContentType(p []byte) { + // If no content type, apply sniffing algorithm to body. + // We can't use `w.header.Get` here since if the Content-Type was set to nil, we shouldn't do sniffing. + _, haveType := w.header["Content-Type"] + + // If the Content-Encoding was set and is non-blank, we shouldn't sniff the body. + hasCE := w.header.Get("Content-Encoding") != "" + if !hasCE && !haveType && len(p) > 0 { + w.header.Set("Content-Type", http.DetectContentType(p)) + } +} + +func (w *responseWriter) Write(p []byte) (int, error) { + bodyAllowed := bodyAllowedForStatus(w.status) + if !w.headerComplete { + w.sniffContentType(p) + w.WriteHeader(http.StatusOK) + bodyAllowed = true + } + if !bodyAllowed { + return 0, http.ErrBodyNotAllowed + } + + w.numWritten += int64(len(p)) + if w.contentLen != 0 && w.numWritten > w.contentLen { + return 0, http.ErrContentLength + } + + if w.isHead { + return len(p), nil + } + + if !w.headerWritten { + // Buffer small responses. + // This allows us to automatically set the Content-Length field. + if len(w.smallResponseBuf)+len(p) < maxSmallResponseSize { + w.smallResponseBuf = append(w.smallResponseBuf, p...) + return len(p), nil + } + } + return w.doWrite(p) +} + +func (w *responseWriter) doWrite(p []byte) (int, error) { + if !w.headerWritten { + w.sniffContentType(w.smallResponseBuf) + if err := w.writeHeader(w.status); err != nil { + return 0, maybeReplaceError(err) + } + w.headerWritten = true + } + + l := uint64(len(w.smallResponseBuf) + len(p)) + if l == 0 { + return 0, nil + } + df := &dataFrame{Length: l} + w.buf = w.buf[:0] + w.buf = df.Append(w.buf) + if _, err := w.str.writeUnframed(w.buf); err != nil { + return 0, maybeReplaceError(err) + } + if len(w.smallResponseBuf) > 0 { + if _, err := w.str.writeUnframed(w.smallResponseBuf); err != nil { + return 0, maybeReplaceError(err) + } + w.smallResponseBuf = nil + } + var n int + if len(p) > 0 { + var err error + n, err = w.str.writeUnframed(p) + if err != nil { + return n, maybeReplaceError(err) + } + } + return n, nil +} + +func (w *responseWriter) writeHeader(status int) error { + var headers bytes.Buffer + enc := qpack.NewEncoder(&headers) + if err := enc.WriteField(qpack.HeaderField{Name: ":status", Value: strconv.Itoa(status)}); err != nil { + return err + } + + // Handle trailer fields + if vals, ok := w.header["Trailer"]; ok { + for _, val := range vals { + for _, trailer := range strings.Split(val, ",") { + // We need to convert to the canonical header key value here because this will be called when using + // headers.Add or headers.Set. + trailer = textproto.CanonicalMIMEHeaderKey(strings.TrimSpace(trailer)) + w.declareTrailer(trailer) + } + } + } + + for k, v := range w.header { + if _, excluded := w.trailers[k]; excluded { + continue + } + // Ignore "Trailer:" prefixed headers + if strings.HasPrefix(k, http.TrailerPrefix) { + continue + } + for index := range v { + if err := enc.WriteField(qpack.HeaderField{Name: strings.ToLower(k), Value: v[index]}); err != nil { + return err + } + } + } + + buf := make([]byte, 0, frameHeaderLen+headers.Len()) + buf = (&headersFrame{Length: uint64(headers.Len())}).Append(buf) + buf = append(buf, headers.Bytes()...) + + _, err := w.str.writeUnframed(buf) + return err +} + +func (w *responseWriter) FlushError() error { + if !w.headerComplete { + w.WriteHeader(http.StatusOK) + } + _, err := w.doWrite(nil) + return err +} + +func (w *responseWriter) flushTrailers() { + if w.trailerWritten { + return + } + if err := w.writeTrailers(); err != nil { + w.logger.Debug("could not write trailers", "error", err) + } +} + +func (w *responseWriter) Flush() { + if err := w.FlushError(); err != nil { + if w.logger != nil { + w.logger.Debug("could not flush to stream", "error", err) + } + } +} + +// declareTrailer adds a trailer to the trailer list, while also validating that the trailer has a +// valid name. +func (w *responseWriter) declareTrailer(k string) { + if !httpguts.ValidTrailerHeader(k) { + // Forbidden by RFC 9110, section 6.5.1. + w.logger.Debug("ignoring invalid trailer", slog.String("header", k)) + return + } + if w.trailers == nil { + w.trailers = make(map[string]struct{}) + } + w.trailers[k] = struct{}{} +} + +// hasNonEmptyTrailers checks to see if there are any trailers with an actual +// value set. This is possible by adding trailers to the "Trailers" header +// but never actually setting those names as trailers in the course of handling +// the request. In that case, this check may save us some allocations. +func (w *responseWriter) hasNonEmptyTrailers() bool { + for trailer := range w.trailers { + if _, ok := w.header[trailer]; ok { + return true + } + } + return false +} + +// writeTrailers will write trailers to the stream if there are any. +func (w *responseWriter) writeTrailers() error { + // promote headers added via "Trailer:" convention as trailers, these can be added after + // streaming the status/headers have been written. + for k := range w.header { + // Handle "Trailer:" prefix + if strings.HasPrefix(k, http.TrailerPrefix) { + w.declareTrailer(k) + } + } + + if !w.hasNonEmptyTrailers() { + return nil + } + + var b bytes.Buffer + enc := qpack.NewEncoder(&b) + for trailer := range w.trailers { + trailerName := strings.ToLower(strings.TrimPrefix(trailer, http.TrailerPrefix)) + if vals, ok := w.header[trailer]; ok { + for _, val := range vals { + if err := enc.WriteField(qpack.HeaderField{Name: trailerName, Value: val}); err != nil { + return err + } + } + } + } + + buf := make([]byte, 0, frameHeaderLen+b.Len()) + buf = (&headersFrame{Length: uint64(b.Len())}).Append(buf) + buf = append(buf, b.Bytes()...) + _, err := w.str.writeUnframed(buf) + w.trailerWritten = true + return err +} + +func (w *responseWriter) HTTPStream() *Stream { + w.hijacked = true + w.Flush() + return w.str +} + +func (w *responseWriter) wasStreamHijacked() bool { return w.hijacked } + +func (w *responseWriter) Connection() *Conn { + return w.conn +} + +func (w *responseWriter) SetReadDeadline(deadline time.Time) error { + return w.str.SetReadDeadline(deadline) +} + +func (w *responseWriter) SetWriteDeadline(deadline time.Time) error { + return w.str.SetWriteDeadline(deadline) +} + +// copied from http2/http2.go +// bodyAllowedForStatus reports whether a given response status code +// permits a body. See RFC 2616, section 4.4. +func bodyAllowedForStatus(status int) bool { + switch { + case status >= 100 && status <= 199: + return false + case status == http.StatusNoContent: + return false + case status == http.StatusNotModified: + return false + } + return true +} diff --git a/vendor/github.com/quic-go/quic-go/http3/server.go b/vendor/github.com/quic-go/quic-go/http3/server.go new file mode 100644 index 0000000..7e002a0 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/server.go @@ -0,0 +1,852 @@ +package http3 + +import ( + "context" + "crypto/tls" + "errors" + "fmt" + "io" + "log/slog" + "net" + "net/http" + "runtime" + "slices" + "strconv" + "strings" + "sync" + "sync/atomic" + "time" + + "github.com/quic-go/quic-go" + "github.com/quic-go/quic-go/quicvarint" + + "github.com/quic-go/qpack" +) + +// NextProtoH3 is the ALPN protocol negotiated during the TLS handshake, for QUIC v1 and v2. +const NextProtoH3 = "h3" + +// StreamType is the stream type of a unidirectional stream. +type StreamType uint64 + +const ( + streamTypeControlStream = 0 + streamTypePushStream = 1 + streamTypeQPACKEncoderStream = 2 + streamTypeQPACKDecoderStream = 3 +) + +// A QUICListener listens for incoming QUIC connections. +type QUICListener interface { + Accept(context.Context) (*quic.Conn, error) + Addr() net.Addr + io.Closer +} + +var _ QUICListener = &quic.EarlyListener{} + +// ConfigureTLSConfig creates a new tls.Config which can be used +// to create a quic.Listener meant for serving HTTP/3. +func ConfigureTLSConfig(tlsConf *tls.Config) *tls.Config { + // Workaround for https://github.com/golang/go/issues/60506. + // This initializes the session tickets _before_ cloning the config. + _, _ = tlsConf.DecryptTicket(nil, tls.ConnectionState{}) + config := tlsConf.Clone() + config.NextProtos = []string{NextProtoH3} + if gfc := config.GetConfigForClient; gfc != nil { + config.GetConfigForClient = func(ch *tls.ClientHelloInfo) (*tls.Config, error) { + conf, err := gfc(ch) + if conf == nil || err != nil { + return conf, err + } + return ConfigureTLSConfig(conf), nil + } + } + return config +} + +// contextKey is a value for use with context.WithValue. It's used as +// a pointer so it fits in an interface{} without allocation. +type contextKey struct { + name string +} + +func (k *contextKey) String() string { return "quic-go/http3 context value " + k.name } + +// ServerContextKey is a context key. It can be used in HTTP +// handlers with Context.Value to access the server that +// started the handler. The associated value will be of +// type *http3.Server. +var ServerContextKey = &contextKey{"http3-server"} + +// RemoteAddrContextKey is a context key. It can be used in +// HTTP handlers with Context.Value to access the remote +// address of the connection. The associated value will be of +// type net.Addr. +// +// Use this value instead of [http.Request.RemoteAddr] if you +// require access to the remote address of the connection rather +// than its string representation. +var RemoteAddrContextKey = &contextKey{"remote-addr"} + +// listener contains info about specific listener added with addListener +type listener struct { + ln *QUICListener + port int // 0 means that no info about port is available + + // if this listener was constructed by the application, it won't be closed when the server is closed + createdLocally bool +} + +// Server is a HTTP/3 server. +type Server struct { + // Addr optionally specifies the UDP address for the server to listen on, + // in the form "host:port". + // + // When used by ListenAndServe and ListenAndServeTLS methods, if empty, + // ":https" (port 443) is used. See net.Dial for details of the address + // format. + // + // Otherwise, if Port is not set and underlying QUIC listeners do not + // have valid port numbers, the port part is used in Alt-Svc headers set + // with SetQUICHeaders. + Addr string + + // Port is used in Alt-Svc response headers set with SetQUICHeaders. If + // needed Port can be manually set when the Server is created. + // + // This is useful when a Layer 4 firewall is redirecting UDP traffic and + // clients must use a port different from the port the Server is + // listening on. + Port int + + // TLSConfig provides a TLS configuration for use by server. It must be + // set for ListenAndServe and Serve methods. + TLSConfig *tls.Config + + // QUICConfig provides the parameters for QUIC connection created with Serve. + // If nil, it uses reasonable default values. + // + // Configured versions are also used in Alt-Svc response header set with SetQUICHeaders. + QUICConfig *quic.Config + + // Handler is the HTTP request handler to use. If not set, defaults to + // http.NotFound. + Handler http.Handler + + // EnableDatagrams enables support for HTTP/3 datagrams (RFC 9297). + // If set to true, QUICConfig.EnableDatagrams will be set. + EnableDatagrams bool + + // MaxHeaderBytes controls the maximum number of bytes the server will + // read parsing the request HEADERS frame. It does not limit the size of + // the request body. If zero or negative, http.DefaultMaxHeaderBytes is + // used. + MaxHeaderBytes int + + // AdditionalSettings specifies additional HTTP/3 settings. + // It is invalid to specify any settings defined by RFC 9114 (HTTP/3) and RFC 9297 (HTTP Datagrams). + AdditionalSettings map[uint64]uint64 + + // StreamHijacker, when set, is called for the first unknown frame parsed on a bidirectional stream. + // It is called right after parsing the frame type. + // If parsing the frame type fails, the error is passed to the callback. + // In that case, the frame type will not be set. + // Callers can either ignore the frame and return control of the stream back to HTTP/3 + // (by returning hijacked false). + // Alternatively, callers can take over the QUIC stream (by returning hijacked true). + StreamHijacker func(FrameType, quic.ConnectionTracingID, *quic.Stream, error) (hijacked bool, err error) + + // UniStreamHijacker, when set, is called for unknown unidirectional stream of unknown stream type. + // If parsing the stream type fails, the error is passed to the callback. + // In that case, the stream type will not be set. + UniStreamHijacker func(StreamType, quic.ConnectionTracingID, *quic.ReceiveStream, error) (hijacked bool) + + // IdleTimeout specifies how long until idle clients connection should be + // closed. Idle refers only to the HTTP/3 layer, activity at the QUIC layer + // like PING frames are not considered. + // If zero or negative, there is no timeout. + IdleTimeout time.Duration + + // ConnContext optionally specifies a function that modifies the context used for a new connection c. + // The provided ctx has a ServerContextKey value. + ConnContext func(ctx context.Context, c *quic.Conn) context.Context + + Logger *slog.Logger + + mutex sync.RWMutex + listeners []listener + + closed bool + closeCtx context.Context // canceled when the server is closed + closeCancel context.CancelFunc // cancels the closeCtx + graceCtx context.Context // canceled when the server is closed or gracefully closed + graceCancel context.CancelFunc // cancels the graceCtx + connCount atomic.Int64 + connHandlingDone chan struct{} + + altSvcHeader string +} + +// ListenAndServe listens on the UDP address s.Addr and calls s.Handler to handle HTTP/3 requests on incoming connections. +// +// If s.Addr is blank, ":https" is used. +func (s *Server) ListenAndServe() error { + ln, err := s.setupListenerForConn(s.TLSConfig, nil) + if err != nil { + return err + } + defer s.removeListener(ln) + + return s.serveListener(*ln) +} + +// ListenAndServeTLS listens on the UDP address s.Addr and calls s.Handler to handle HTTP/3 requests on incoming connections. +// +// If s.Addr is blank, ":https" is used. +func (s *Server) ListenAndServeTLS(certFile, keyFile string) error { + var err error + certs := make([]tls.Certificate, 1) + certs[0], err = tls.LoadX509KeyPair(certFile, keyFile) + if err != nil { + return err + } + // We currently only use the cert-related stuff from tls.Config, + // so we don't need to make a full copy. + ln, err := s.setupListenerForConn(&tls.Config{Certificates: certs}, nil) + if err != nil { + return err + } + defer s.removeListener(ln) + + return s.serveListener(*ln) +} + +// Serve an existing UDP connection. +// It is possible to reuse the same connection for outgoing connections. +// Closing the server does not close the connection. +func (s *Server) Serve(conn net.PacketConn) error { + ln, err := s.setupListenerForConn(s.TLSConfig, conn) + if err != nil { + return err + } + defer s.removeListener(ln) + + return s.serveListener(*ln) +} + +// init initializes the contexts used for shutting down the server. +// It must be called with the mutex held. +func (s *Server) init() { + if s.closeCtx == nil { + s.closeCtx, s.closeCancel = context.WithCancel(context.Background()) + s.graceCtx, s.graceCancel = context.WithCancel(s.closeCtx) + } + s.connHandlingDone = make(chan struct{}, 1) +} + +func (s *Server) decreaseConnCount() { + if s.connCount.Add(-1) == 0 && s.graceCtx.Err() != nil { + close(s.connHandlingDone) + } +} + +// ServeQUICConn serves a single QUIC connection. +func (s *Server) ServeQUICConn(conn *quic.Conn) error { + s.mutex.Lock() + if s.closed { + s.mutex.Unlock() + return http.ErrServerClosed + } + + s.init() + s.mutex.Unlock() + + s.connCount.Add(1) + defer s.decreaseConnCount() + + return s.handleConn(conn) +} + +// ServeListener serves an existing QUIC listener. +// Make sure you use http3.ConfigureTLSConfig to configure a tls.Config +// and use it to construct a http3-friendly QUIC listener. +// Closing the server does close the listener. +// ServeListener always returns a non-nil error. After Shutdown or Close, the returned error is http.ErrServerClosed. +func (s *Server) ServeListener(ln QUICListener) error { + s.mutex.Lock() + if err := s.addListener(&ln, false); err != nil { + s.mutex.Unlock() + return err + } + s.mutex.Unlock() + defer s.removeListener(&ln) + + return s.serveListener(ln) +} + +func (s *Server) serveListener(ln QUICListener) error { + for { + conn, err := ln.Accept(s.graceCtx) + // server closed + if errors.Is(err, quic.ErrServerClosed) || s.graceCtx.Err() != nil { + return http.ErrServerClosed + } + if err != nil { + return err + } + s.connCount.Add(1) + go func() { + defer s.decreaseConnCount() + if err := s.handleConn(conn); err != nil { + if s.Logger != nil { + s.Logger.Debug("handling connection failed", "error", err) + } + } + }() + } +} + +var errServerWithoutTLSConfig = errors.New("use of http3.Server without TLSConfig") + +func (s *Server) setupListenerForConn(tlsConf *tls.Config, conn net.PacketConn) (*QUICListener, error) { + if tlsConf == nil { + return nil, errServerWithoutTLSConfig + } + + baseConf := ConfigureTLSConfig(tlsConf) + quicConf := s.QUICConfig + if quicConf == nil { + quicConf = &quic.Config{Allow0RTT: true} + } else { + quicConf = s.QUICConfig.Clone() + } + if s.EnableDatagrams { + quicConf.EnableDatagrams = true + } + + s.mutex.Lock() + defer s.mutex.Unlock() + closed := s.closed + if closed { + return nil, http.ErrServerClosed + } + + var ln QUICListener + var err error + if conn == nil { + addr := s.Addr + if addr == "" { + addr = ":https" + } + ln, err = quic.ListenAddrEarly(addr, baseConf, quicConf) + } else { + ln, err = quic.ListenEarly(conn, baseConf, quicConf) + } + if err != nil { + return nil, err + } + if err := s.addListener(&ln, true); err != nil { + return nil, err + } + return &ln, nil +} + +func extractPort(addr string) (int, error) { + _, portStr, err := net.SplitHostPort(addr) + if err != nil { + return 0, err + } + + portInt, err := net.LookupPort("tcp", portStr) + if err != nil { + return 0, err + } + return portInt, nil +} + +func (s *Server) generateAltSvcHeader() { + if len(s.listeners) == 0 { + // Don't announce any ports since no one is listening for connections + s.altSvcHeader = "" + return + } + + // This code assumes that we will use protocol.SupportedVersions if no quic.Config is passed. + + var altSvc []string + addPort := func(port int) { + altSvc = append(altSvc, fmt.Sprintf(`%s=":%d"; ma=2592000`, NextProtoH3, port)) + } + + if s.Port != 0 { + // if Port is specified, we must use it instead of the + // listener addresses since there's a reason it's specified. + addPort(s.Port) + } else { + // if we have some listeners assigned, try to find ports + // which we can announce, otherwise nothing should be announced + validPortsFound := false + for _, info := range s.listeners { + if info.port != 0 { + addPort(info.port) + validPortsFound = true + } + } + if !validPortsFound { + if port, err := extractPort(s.Addr); err == nil { + addPort(port) + } + } + } + + s.altSvcHeader = strings.Join(altSvc, ",") +} + +func (s *Server) addListener(l *QUICListener, createdLocally bool) error { + if s.closed { + return http.ErrServerClosed + } + s.init() + + laddr := (*l).Addr() + if port, err := extractPort(laddr.String()); err == nil { + s.listeners = append(s.listeners, listener{ln: l, port: port, createdLocally: createdLocally}) + } else { + logger := s.Logger + if logger == nil { + logger = slog.Default() + } + logger.Error("Unable to extract port from listener, will not be announced using SetQUICHeaders", "local addr", laddr, "error", err) + s.listeners = append(s.listeners, listener{ln: l, port: 0, createdLocally: createdLocally}) + } + s.generateAltSvcHeader() + return nil +} + +func (s *Server) removeListener(l *QUICListener) { + s.mutex.Lock() + defer s.mutex.Unlock() + + s.listeners = slices.DeleteFunc(s.listeners, func(info listener) bool { + return info.ln == l + }) + s.generateAltSvcHeader() +} + +// handleConn handles the HTTP/3 exchange on a QUIC connection. +// It blocks until all HTTP handlers for all streams have returned. +func (s *Server) handleConn(conn *quic.Conn) error { + // open the control stream and send a SETTINGS frame, it's also used to send a GOAWAY frame later + // when the server is gracefully closed + ctrlStr, err := conn.OpenUniStream() + if err != nil { + return fmt.Errorf("opening the control stream failed: %w", err) + } + b := make([]byte, 0, 64) + b = quicvarint.Append(b, streamTypeControlStream) // stream type + b = (&settingsFrame{ + Datagram: s.EnableDatagrams, + ExtendedConnect: true, + Other: s.AdditionalSettings, + }).Append(b) + ctrlStr.Write(b) + + connCtx := conn.Context() + connCtx = context.WithValue(connCtx, ServerContextKey, s) + connCtx = context.WithValue(connCtx, http.LocalAddrContextKey, conn.LocalAddr()) + connCtx = context.WithValue(connCtx, RemoteAddrContextKey, conn.RemoteAddr()) + if s.ConnContext != nil { + connCtx = s.ConnContext(connCtx, conn) + if connCtx == nil { + panic("http3: ConnContext returned nil") + } + } + + hconn := newConnection( + connCtx, + conn, + s.EnableDatagrams, + true, // server + s.Logger, + s.IdleTimeout, + ) + go hconn.handleUnidirectionalStreams(s.UniStreamHijacker) + + var nextStreamID quic.StreamID + var wg sync.WaitGroup + var handleErr error + var inGracefulShutdown bool + // Process all requests immediately. + // It's the client's responsibility to decide which requests are eligible for 0-RTT. + ctx := s.graceCtx + for { + // The context used here is: + // * before graceful shutdown: s.graceCtx + // * after graceful shutdown: s.closeCtx + // This allows us to keep accepting (and resetting) streams after graceful shutdown has started. + str, err := hconn.acceptStream(ctx) + if err != nil { + // the underlying connection was closed (by either side) + if hconn.Context().Err() != nil { + var appErr *quic.ApplicationError + if !errors.As(err, &appErr) || appErr.ErrorCode != quic.ApplicationErrorCode(ErrCodeNoError) { + handleErr = fmt.Errorf("accepting stream failed: %w", err) + } + break + } + // server (not gracefully) closed, close the connection immediately + if s.closeCtx.Err() != nil { + conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeNoError), "") + handleErr = http.ErrServerClosed + break + } + inGracefulShutdown = s.graceCtx.Err() != nil + if !inGracefulShutdown { + var appErr *quic.ApplicationError + if !errors.As(err, &appErr) || appErr.ErrorCode != quic.ApplicationErrorCode(ErrCodeNoError) { + handleErr = fmt.Errorf("accepting stream failed: %w", err) + } + break + } + + // gracefully closed, send GOAWAY frame and wait for requests to complete or grace period to end + // new requests will be rejected and shouldn't be sent + wg.Add(1) + // Send the GOAWAY frame in a separate Goroutine. + // Sending might block if the peer didn't grant enough flow control credit. + // Write is guaranteed to return once the connection is closed. + go func() { + defer wg.Done() + _, _ = ctrlStr.Write((&goAwayFrame{StreamID: nextStreamID}).Append(nil)) + }() + ctx = s.closeCtx + continue + } + if inGracefulShutdown { + str.CancelRead(quic.StreamErrorCode(ErrCodeRequestRejected)) + str.CancelWrite(quic.StreamErrorCode(ErrCodeRequestRejected)) + continue + } + + nextStreamID = str.StreamID() + 4 + wg.Add(1) + go func() { + // handleRequest will return once the request has been handled, + // or the underlying connection is closed + defer wg.Done() + s.handleRequest(hconn, str, hconn.decoder) + }() + } + wg.Wait() + return handleErr +} + +func (s *Server) maxHeaderBytes() uint64 { + if s.MaxHeaderBytes <= 0 { + return http.DefaultMaxHeaderBytes + } + return uint64(s.MaxHeaderBytes) +} + +func (s *Server) handleRequest(conn *Conn, str datagramStream, decoder *qpack.Decoder) { + var ufh unknownFrameHandlerFunc + if s.StreamHijacker != nil { + ufh = func(ft FrameType, e error) (processed bool, err error) { + return s.StreamHijacker( + ft, + conn.Context().Value(quic.ConnectionTracingKey).(quic.ConnectionTracingID), + str.QUICStream(), + e, + ) + } + } + fp := &frameParser{closeConn: conn.CloseWithError, r: str, unknownFrameHandler: ufh} + frame, err := fp.ParseNext() + if err != nil { + if !errors.Is(err, errHijacked) { + str.CancelRead(quic.StreamErrorCode(ErrCodeRequestIncomplete)) + str.CancelWrite(quic.StreamErrorCode(ErrCodeRequestIncomplete)) + } + return + } + hf, ok := frame.(*headersFrame) + if !ok { + conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeFrameUnexpected), "expected first frame to be a HEADERS frame") + return + } + if hf.Length > s.maxHeaderBytes() { + str.CancelRead(quic.StreamErrorCode(ErrCodeFrameError)) + str.CancelWrite(quic.StreamErrorCode(ErrCodeFrameError)) + return + } + headerBlock := make([]byte, hf.Length) + if _, err := io.ReadFull(str, headerBlock); err != nil { + str.CancelRead(quic.StreamErrorCode(ErrCodeRequestIncomplete)) + str.CancelWrite(quic.StreamErrorCode(ErrCodeRequestIncomplete)) + return + } + hfs, err := decoder.DecodeFull(headerBlock) + if err != nil { + // TODO: use the right error code + conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeGeneralProtocolError), "expected first frame to be a HEADERS frame") + return + } + req, err := requestFromHeaders(hfs) + if err != nil { + str.CancelRead(quic.StreamErrorCode(ErrCodeMessageError)) + str.CancelWrite(quic.StreamErrorCode(ErrCodeMessageError)) + return + } + + connState := conn.ConnectionState().TLS + req.TLS = &connState + req.RemoteAddr = conn.RemoteAddr().String() + + // Check that the client doesn't send more data in DATA frames than indicated by the Content-Length header (if set). + // See section 4.1.2 of RFC 9114. + contentLength := int64(-1) + if _, ok := req.Header["Content-Length"]; ok && req.ContentLength >= 0 { + contentLength = req.ContentLength + } + hstr := newStream(str, conn, nil, nil) + body := newRequestBody(hstr, contentLength, conn.Context(), conn.ReceivedSettings(), conn.Settings) + req.Body = body + + if s.Logger != nil { + s.Logger.Debug("handling request", "method", req.Method, "host", req.Host, "uri", req.RequestURI) + } + + ctx, cancel := context.WithCancel(conn.Context()) + req = req.WithContext(ctx) + context.AfterFunc(str.Context(), cancel) + + r := newResponseWriter(hstr, conn, req.Method == http.MethodHead, s.Logger) + handler := s.Handler + if handler == nil { + handler = http.DefaultServeMux + } + + // It's the client's responsibility to decide which requests are eligible for 0-RTT. + var panicked bool + func() { + defer func() { + if p := recover(); p != nil { + panicked = true + if p == http.ErrAbortHandler { + return + } + // Copied from net/http/server.go + const size = 64 << 10 + buf := make([]byte, size) + buf = buf[:runtime.Stack(buf, false)] + logger := s.Logger + if logger == nil { + logger = slog.Default() + } + logger.Error("http3: panic serving", "arg", p, "trace", string(buf)) + } + }() + handler.ServeHTTP(r, req) + }() + + if r.wasStreamHijacked() { + return + } + + // abort the stream when there is a panic + if panicked { + str.CancelRead(quic.StreamErrorCode(ErrCodeInternalError)) + str.CancelWrite(quic.StreamErrorCode(ErrCodeInternalError)) + return + } + + // response not written to the client yet, set Content-Length + if !r.headerWritten { + if _, haveCL := r.header["Content-Length"]; !haveCL { + r.header.Set("Content-Length", strconv.FormatInt(r.numWritten, 10)) + } + } + r.Flush() + r.flushTrailers() + + // If the EOF was read by the handler, CancelRead() is a no-op. + str.CancelRead(quic.StreamErrorCode(ErrCodeNoError)) + str.Close() +} + +// Close the server immediately, aborting requests and sending CONNECTION_CLOSE frames to connected clients. +// Close in combination with ListenAndServe() (instead of Serve()) may race if it is called before a UDP socket is established. +// It is the caller's responsibility to close any connection passed to ServeQUICConn. +func (s *Server) Close() error { + s.mutex.Lock() + defer s.mutex.Unlock() + + s.closed = true + // server is never used + if s.closeCtx == nil { + return nil + } + s.closeCancel() + + var err error + for _, l := range s.listeners { + if l.createdLocally { + if cerr := (*l.ln).Close(); cerr != nil && err == nil { + err = cerr + } + } + } + if s.connCount.Load() == 0 { + return err + } + // wait for all connections to be closed + <-s.connHandlingDone + return err +} + +// Shutdown gracefully shuts down the server without interrupting any active connections. +// The server sends a GOAWAY frame first, then or for all running requests to complete. +// Shutdown in combination with ListenAndServe may race if it is called before a UDP socket is established. +// It is recommended to use Serve instead. +func (s *Server) Shutdown(ctx context.Context) error { + s.mutex.Lock() + s.closed = true + // server was never used + if s.closeCtx == nil { + s.mutex.Unlock() + return nil + } + s.graceCancel() + + // close all listeners + var closeErrs []error + for _, l := range s.listeners { + if l.createdLocally { + if err := (*l.ln).Close(); err != nil { + closeErrs = append(closeErrs, err) + } + } + } + s.mutex.Unlock() + if len(closeErrs) > 0 { + return errors.Join(closeErrs...) + } + + if s.connCount.Load() == 0 { + return s.Close() + } + select { + case <-s.connHandlingDone: // all connections were closed + // When receiving a GOAWAY frame, HTTP/3 clients are expected to close the connection + // once all requests were successfully handled... + return s.Close() + case <-ctx.Done(): + // ... however, clients handling long-lived requests (and misbehaving clients), + // might not do so before the context is cancelled. + // In this case, we close the server, which closes all existing connections + // (expect those passed to ServeQUICConn). + _ = s.Close() + return ctx.Err() + } +} + +// ErrNoAltSvcPort is the error returned by SetQUICHeaders when no port was found +// for Alt-Svc to announce. This can happen if listening on a PacketConn without a port +// (UNIX socket, for example) and no port is specified in Server.Port or Server.Addr. +var ErrNoAltSvcPort = errors.New("no port can be announced, specify it explicitly using Server.Port or Server.Addr") + +// SetQUICHeaders can be used to set the proper headers that announce that this server supports HTTP/3. +// The values set by default advertise all the ports the server is listening on, but can be +// changed to a specific port by setting Server.Port before launching the server. +// If no listener's Addr().String() returns an address with a valid port, Server.Addr will be used +// to extract the port, if specified. +// For example, a server launched using ListenAndServe on an address with port 443 would set: +// +// Alt-Svc: h3=":443"; ma=2592000 +func (s *Server) SetQUICHeaders(hdr http.Header) error { + s.mutex.RLock() + defer s.mutex.RUnlock() + + if s.altSvcHeader == "" { + return ErrNoAltSvcPort + } + // use the map directly to avoid constant canonicalization since the key is already canonicalized + hdr["Alt-Svc"] = append(hdr["Alt-Svc"], s.altSvcHeader) + return nil +} + +// ListenAndServeQUIC listens on the UDP network address addr and calls the +// handler for HTTP/3 requests on incoming connections. http.DefaultServeMux is +// used when handler is nil. +func ListenAndServeQUIC(addr, certFile, keyFile string, handler http.Handler) error { + server := &Server{ + Addr: addr, + Handler: handler, + } + return server.ListenAndServeTLS(certFile, keyFile) +} + +// ListenAndServeTLS listens on the given network address for both TLS/TCP and QUIC +// connections in parallel. It returns if one of the two returns an error. +// http.DefaultServeMux is used when handler is nil. +// The correct Alt-Svc headers for QUIC are set. +func ListenAndServeTLS(addr, certFile, keyFile string, handler http.Handler) error { + // Load certs + var err error + certs := make([]tls.Certificate, 1) + certs[0], err = tls.LoadX509KeyPair(certFile, keyFile) + if err != nil { + return err + } + // We currently only use the cert-related stuff from tls.Config, + // so we don't need to make a full copy. + config := &tls.Config{ + Certificates: certs, + } + + if addr == "" { + addr = ":https" + } + + // Open the listeners + udpAddr, err := net.ResolveUDPAddr("udp", addr) + if err != nil { + return err + } + udpConn, err := net.ListenUDP("udp", udpAddr) + if err != nil { + return err + } + defer udpConn.Close() + + if handler == nil { + handler = http.DefaultServeMux + } + // Start the servers + quicServer := &Server{ + TLSConfig: config, + Handler: handler, + } + + hErr := make(chan error, 1) + qErr := make(chan error, 1) + go func() { + hErr <- http.ListenAndServeTLS(addr, certFile, keyFile, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + quicServer.SetQUICHeaders(w.Header()) + handler.ServeHTTP(w, r) + })) + }() + go func() { + qErr <- quicServer.Serve(udpConn) + }() + + select { + case err := <-hErr: + quicServer.Close() + return err + case err := <-qErr: + // Cannot close the HTTP server or wait for requests to complete properly :/ + return err + } +} diff --git a/vendor/github.com/quic-go/quic-go/http3/state_tracking_stream.go b/vendor/github.com/quic-go/quic-go/http3/state_tracking_stream.go new file mode 100644 index 0000000..6c7fa52 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/state_tracking_stream.go @@ -0,0 +1,173 @@ +package http3 + +import ( + "context" + "errors" + "os" + "sync" + + "github.com/quic-go/quic-go" +) + +const streamDatagramQueueLen = 32 + +// stateTrackingStream is an implementation of quic.Stream that delegates +// to an underlying stream +// it takes care of proxying send and receive errors onto an implementation of +// the errorSetter interface (intended to be occupied by a datagrammer) +// it is also responsible for clearing the stream based on its ID from its +// parent connection, this is done through the streamClearer interface when +// both the send and receive sides are closed +type stateTrackingStream struct { + *quic.Stream + + sendDatagram func([]byte) error + hasData chan struct{} + queue [][]byte // TODO: use a ring buffer + + mx sync.Mutex + sendErr error + recvErr error + + clearer streamClearer +} + +var _ datagramStream = &stateTrackingStream{} + +type streamClearer interface { + clearStream(quic.StreamID) +} + +func newStateTrackingStream(s *quic.Stream, clearer streamClearer, sendDatagram func([]byte) error) *stateTrackingStream { + t := &stateTrackingStream{ + Stream: s, + clearer: clearer, + sendDatagram: sendDatagram, + hasData: make(chan struct{}, 1), + } + + context.AfterFunc(s.Context(), func() { + t.closeSend(context.Cause(s.Context())) + }) + + return t +} + +func (s *stateTrackingStream) closeSend(e error) { + s.mx.Lock() + defer s.mx.Unlock() + + // clear the stream the first time both the send + // and receive are finished + if s.sendErr == nil { + if s.recvErr != nil { + s.clearer.clearStream(s.StreamID()) + } + s.sendErr = e + } +} + +func (s *stateTrackingStream) closeReceive(e error) { + s.mx.Lock() + defer s.mx.Unlock() + + // clear the stream the first time both the send + // and receive are finished + if s.recvErr == nil { + if s.sendErr != nil { + s.clearer.clearStream(s.StreamID()) + } + s.recvErr = e + s.signalHasDatagram() + } +} + +func (s *stateTrackingStream) Close() error { + s.closeSend(errors.New("write on closed stream")) + return s.Stream.Close() +} + +func (s *stateTrackingStream) CancelWrite(e quic.StreamErrorCode) { + s.closeSend(&quic.StreamError{StreamID: s.StreamID(), ErrorCode: e}) + s.Stream.CancelWrite(e) +} + +func (s *stateTrackingStream) Write(b []byte) (int, error) { + n, err := s.Stream.Write(b) + if err != nil && !errors.Is(err, os.ErrDeadlineExceeded) { + s.closeSend(err) + } + return n, err +} + +func (s *stateTrackingStream) CancelRead(e quic.StreamErrorCode) { + s.closeReceive(&quic.StreamError{StreamID: s.StreamID(), ErrorCode: e}) + s.Stream.CancelRead(e) +} + +func (s *stateTrackingStream) Read(b []byte) (int, error) { + n, err := s.Stream.Read(b) + if err != nil && !errors.Is(err, os.ErrDeadlineExceeded) { + s.closeReceive(err) + } + return n, err +} + +func (s *stateTrackingStream) SendDatagram(b []byte) error { + s.mx.Lock() + sendErr := s.sendErr + s.mx.Unlock() + if sendErr != nil { + return sendErr + } + + return s.sendDatagram(b) +} + +func (s *stateTrackingStream) signalHasDatagram() { + select { + case s.hasData <- struct{}{}: + default: + } +} + +func (s *stateTrackingStream) enqueueDatagram(data []byte) { + s.mx.Lock() + defer s.mx.Unlock() + + if s.recvErr != nil { + return + } + if len(s.queue) >= streamDatagramQueueLen { + return + } + s.queue = append(s.queue, data) + s.signalHasDatagram() +} + +func (s *stateTrackingStream) ReceiveDatagram(ctx context.Context) ([]byte, error) { +start: + s.mx.Lock() + if len(s.queue) > 0 { + data := s.queue[0] + s.queue = s.queue[1:] + s.mx.Unlock() + return data, nil + } + if receiveErr := s.recvErr; receiveErr != nil { + s.mx.Unlock() + return nil, receiveErr + } + s.mx.Unlock() + + select { + case <-ctx.Done(): + return nil, context.Cause(ctx) + case <-s.hasData: + } + goto start +} + +func (s *stateTrackingStream) QUICStream() *quic.Stream { + return s.Stream +} diff --git a/vendor/github.com/quic-go/quic-go/http3/stream.go b/vendor/github.com/quic-go/quic-go/http3/stream.go new file mode 100644 index 0000000..5029560 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/stream.go @@ -0,0 +1,374 @@ +package http3 + +import ( + "context" + "errors" + "fmt" + "io" + "net/http" + "net/http/httptrace" + "time" + + "github.com/quic-go/quic-go" + + "github.com/quic-go/qpack" +) + +type datagramStream interface { + io.ReadWriteCloser + CancelRead(quic.StreamErrorCode) + CancelWrite(quic.StreamErrorCode) + StreamID() quic.StreamID + Context() context.Context + SetDeadline(time.Time) error + SetReadDeadline(time.Time) error + SetWriteDeadline(time.Time) error + SendDatagram(b []byte) error + ReceiveDatagram(ctx context.Context) ([]byte, error) + + QUICStream() *quic.Stream +} + +// A Stream is an HTTP/3 stream. +// +// When writing to and reading from the stream, data is framed in HTTP/3 DATA frames. +type Stream struct { + datagramStream + conn *Conn + frameParser *frameParser + + buf []byte // used as a temporary buffer when writing the HTTP/3 frame headers + + bytesRemainingInFrame uint64 + + parseTrailer func(io.Reader, uint64) error + parsedTrailer bool +} + +func newStream(str datagramStream, conn *Conn, trace *httptrace.ClientTrace, parseTrailer func(io.Reader, uint64) error) *Stream { + return &Stream{ + datagramStream: str, + conn: conn, + buf: make([]byte, 16), + parseTrailer: parseTrailer, + frameParser: &frameParser{ + closeConn: conn.CloseWithError, + r: &tracingReader{Reader: str, trace: trace}, + }, + } +} + +func (s *Stream) Read(b []byte) (int, error) { + fp := &frameParser{ + r: s.datagramStream, + closeConn: s.conn.CloseWithError, + } + if s.bytesRemainingInFrame == 0 { + parseLoop: + for { + frame, err := fp.ParseNext() + if err != nil { + return 0, err + } + switch f := frame.(type) { + case *dataFrame: + if s.parsedTrailer { + return 0, errors.New("DATA frame received after trailers") + } + s.bytesRemainingInFrame = f.Length + break parseLoop + case *headersFrame: + if s.conn.isServer { + continue + } + if s.parsedTrailer { + return 0, errors.New("additional HEADERS frame received after trailers") + } + s.parsedTrailer = true + return 0, s.parseTrailer(s.datagramStream, f.Length) + default: + s.conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeFrameUnexpected), "") + // parseNextFrame skips over unknown frame types + // Therefore, this condition is only entered when we parsed another known frame type. + return 0, fmt.Errorf("peer sent an unexpected frame: %T", f) + } + } + } + + var n int + var err error + if s.bytesRemainingInFrame < uint64(len(b)) { + n, err = s.datagramStream.Read(b[:s.bytesRemainingInFrame]) + } else { + n, err = s.datagramStream.Read(b) + } + s.bytesRemainingInFrame -= uint64(n) + return n, err +} + +func (s *Stream) hasMoreData() bool { + return s.bytesRemainingInFrame > 0 +} + +func (s *Stream) Write(b []byte) (int, error) { + s.buf = s.buf[:0] + s.buf = (&dataFrame{Length: uint64(len(b))}).Append(s.buf) + if _, err := s.datagramStream.Write(s.buf); err != nil { + return 0, err + } + return s.datagramStream.Write(b) +} + +func (s *Stream) writeUnframed(b []byte) (int, error) { + return s.datagramStream.Write(b) +} + +func (s *Stream) StreamID() quic.StreamID { + return s.datagramStream.StreamID() +} + +func (s *Stream) SendDatagram(b []byte) error { + // TODO: reject if datagrams are not negotiated (yet) + return s.datagramStream.SendDatagram(b) +} + +func (s *Stream) ReceiveDatagram(ctx context.Context) ([]byte, error) { + // TODO: reject if datagrams are not negotiated (yet) + return s.datagramStream.ReceiveDatagram(ctx) +} + +// A RequestStream is a low-level abstraction representing an HTTP/3 request stream. +// It decouples sending of the HTTP request from reading the HTTP response, allowing +// the application to optimistically use the stream (and, for example, send datagrams) +// before receiving the response. +// +// This is only needed for advanced use case, e.g. WebTransport and the various +// MASQUE proxying protocols. +type RequestStream struct { + str *Stream + + responseBody io.ReadCloser // set by ReadResponse + + decoder *qpack.Decoder + requestWriter *requestWriter + maxHeaderBytes uint64 + reqDone chan<- struct{} + disableCompression bool + response *http.Response + + sentRequest bool + requestedGzip bool + isConnect bool +} + +func newRequestStream( + str *Stream, + requestWriter *requestWriter, + reqDone chan<- struct{}, + decoder *qpack.Decoder, + disableCompression bool, + maxHeaderBytes uint64, + rsp *http.Response, +) *RequestStream { + return &RequestStream{ + str: str, + requestWriter: requestWriter, + reqDone: reqDone, + decoder: decoder, + disableCompression: disableCompression, + maxHeaderBytes: maxHeaderBytes, + response: rsp, + } +} + +// Read reads data from the underlying stream. +// +// It can only be used after the request has been sent (using SendRequestHeader) +// and the response has been consumed (using ReadResponse). +func (s *RequestStream) Read(b []byte) (int, error) { + if s.responseBody == nil { + return 0, errors.New("http3: invalid use of RequestStream.Read before ReadResponse") + } + return s.responseBody.Read(b) +} + +// StreamID returns the QUIC stream ID of the underlying QUIC stream. +func (s *RequestStream) StreamID() quic.StreamID { + return s.str.StreamID() +} + +// Write writes data to the stream. +// +// It can only be used after the request has been sent (using SendRequestHeader). +func (s *RequestStream) Write(b []byte) (int, error) { + if !s.sentRequest { + return 0, errors.New("http3: invalid use of RequestStream.Write before SendRequestHeader") + } + return s.str.Write(b) +} + +// Close closes the send-direction of the stream. +// It does not close the receive-direction of the stream. +func (s *RequestStream) Close() error { + return s.str.Close() +} + +// CancelRead aborts receiving on this stream. +// See [quic.Stream.CancelRead] for more details. +func (s *RequestStream) CancelRead(errorCode quic.StreamErrorCode) { + s.str.CancelRead(errorCode) +} + +// CancelWrite aborts sending on this stream. +// See [quic.Stream.CancelWrite] for more details. +func (s *RequestStream) CancelWrite(errorCode quic.StreamErrorCode) { + s.str.CancelWrite(errorCode) +} + +// Context returns a context derived from the underlying QUIC stream's context. +// See [quic.Stream.Context] for more details. +func (s *RequestStream) Context() context.Context { + return s.str.Context() +} + +// SetReadDeadline sets the deadline for Read calls. +func (s *RequestStream) SetReadDeadline(t time.Time) error { + return s.str.SetReadDeadline(t) +} + +// SetWriteDeadline sets the deadline for Write calls. +func (s *RequestStream) SetWriteDeadline(t time.Time) error { + return s.str.SetWriteDeadline(t) +} + +// SetDeadline sets the read and write deadlines associated with the stream. +// It is equivalent to calling both SetReadDeadline and SetWriteDeadline. +func (s *RequestStream) SetDeadline(t time.Time) error { + return s.str.SetDeadline(t) +} + +// SendDatagrams send a new HTTP Datagram (RFC 9297). +// +// It is only possible to send datagrams if the server enabled support for this extension. +// It is recommended (though not required) to send the request before calling this method, +// as the server might drop datagrams which it can't associate with an existing request. +func (s *RequestStream) SendDatagram(b []byte) error { + return s.str.SendDatagram(b) +} + +// ReceiveDatagram receives HTTP Datagrams (RFC 9297). +// +// It is only possible if support for HTTP Datagrams was enabled, using the EnableDatagram +// option on the [Transport]. +func (s *RequestStream) ReceiveDatagram(ctx context.Context) ([]byte, error) { + return s.str.ReceiveDatagram(ctx) +} + +// SendRequestHeader sends the HTTP request. +// +// It can only used for requests that don't have a request body. +// It is invalid to call it more than once. +// It is invalid to call it after Write has been called. +func (s *RequestStream) SendRequestHeader(req *http.Request) error { + if req.Body != nil && req.Body != http.NoBody { + return errors.New("http3: invalid use of RequestStream.SendRequestHeader with a request that has a request body") + } + return s.sendRequestHeader(req) +} + +func (s *RequestStream) sendRequestHeader(req *http.Request) error { + if s.sentRequest { + return errors.New("http3: invalid duplicate use of RequestStream.SendRequestHeader") + } + if !s.disableCompression && req.Method != http.MethodHead && + req.Header.Get("Accept-Encoding") == "" && req.Header.Get("Range") == "" { + s.requestedGzip = true + } + s.isConnect = req.Method == http.MethodConnect + s.sentRequest = true + return s.requestWriter.WriteRequestHeader(s.str.datagramStream, req, s.requestedGzip) +} + +// ReadResponse reads the HTTP response from the stream. +// +// It must be called after sending the request (using SendRequestHeader). +// It is invalid to call it more than once. +// It doesn't set Response.Request and Response.TLS. +// It is invalid to call it after Read has been called. +func (s *RequestStream) ReadResponse() (*http.Response, error) { + if !s.sentRequest { + return nil, errors.New("http3: invalid duplicate use of RequestStream.ReadResponse before SendRequestHeader") + } + frame, err := s.str.frameParser.ParseNext() + if err != nil { + s.str.CancelRead(quic.StreamErrorCode(ErrCodeFrameError)) + s.str.CancelWrite(quic.StreamErrorCode(ErrCodeFrameError)) + return nil, fmt.Errorf("http3: parsing frame failed: %w", err) + } + hf, ok := frame.(*headersFrame) + if !ok { + s.str.conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeFrameUnexpected), "expected first frame to be a HEADERS frame") + return nil, errors.New("http3: expected first frame to be a HEADERS frame") + } + if hf.Length > s.maxHeaderBytes { + s.str.CancelRead(quic.StreamErrorCode(ErrCodeFrameError)) + s.str.CancelWrite(quic.StreamErrorCode(ErrCodeFrameError)) + return nil, fmt.Errorf("http3: HEADERS frame too large: %d bytes (max: %d)", hf.Length, s.maxHeaderBytes) + } + headerBlock := make([]byte, hf.Length) + if _, err := io.ReadFull(s.str.datagramStream, headerBlock); err != nil { + s.str.CancelRead(quic.StreamErrorCode(ErrCodeRequestIncomplete)) + s.str.CancelWrite(quic.StreamErrorCode(ErrCodeRequestIncomplete)) + return nil, fmt.Errorf("http3: failed to read response headers: %w", err) + } + hfs, err := s.decoder.DecodeFull(headerBlock) + if err != nil { + // TODO: use the right error code + s.str.conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeGeneralProtocolError), "") + return nil, fmt.Errorf("http3: failed to decode response headers: %w", err) + } + res := s.response + if err := updateResponseFromHeaders(res, hfs); err != nil { + s.str.CancelRead(quic.StreamErrorCode(ErrCodeMessageError)) + s.str.CancelWrite(quic.StreamErrorCode(ErrCodeMessageError)) + return nil, fmt.Errorf("http3: invalid response: %w", err) + } + + // Check that the server doesn't send more data in DATA frames than indicated by the Content-Length header (if set). + // See section 4.1.2 of RFC 9114. + respBody := newResponseBody(s.str, res.ContentLength, s.reqDone) + + // Rules for when to set Content-Length are defined in https://tools.ietf.org/html/rfc7230#section-3.3.2. + isInformational := res.StatusCode >= 100 && res.StatusCode < 200 + isNoContent := res.StatusCode == http.StatusNoContent + isSuccessfulConnect := s.isConnect && res.StatusCode >= 200 && res.StatusCode < 300 + if (isInformational || isNoContent || isSuccessfulConnect) && res.ContentLength == -1 { + res.ContentLength = 0 + } + if s.requestedGzip && res.Header.Get("Content-Encoding") == "gzip" { + res.Header.Del("Content-Encoding") + res.Header.Del("Content-Length") + res.ContentLength = -1 + s.responseBody = newGzipReader(respBody) + res.Uncompressed = true + } else { + s.responseBody = respBody + } + res.Body = s.responseBody + return res, nil +} + +type tracingReader struct { + io.Reader + readFirst bool + trace *httptrace.ClientTrace +} + +func (r *tracingReader) Read(b []byte) (int, error) { + n, err := r.Reader.Read(b) + if n > 0 && !r.readFirst { + traceGotFirstResponseByte(r.trace) + r.readFirst = true + } + return n, err +} diff --git a/vendor/github.com/quic-go/quic-go/http3/trace.go b/vendor/github.com/quic-go/quic-go/http3/trace.go new file mode 100644 index 0000000..2bc7001 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/trace.go @@ -0,0 +1,105 @@ +package http3 + +import ( + "crypto/tls" + "net" + "net/http/httptrace" + "net/textproto" + "time" + + "github.com/quic-go/quic-go" +) + +func traceGetConn(trace *httptrace.ClientTrace, hostPort string) { + if trace != nil && trace.GetConn != nil { + trace.GetConn(hostPort) + } +} + +// fakeConn is a wrapper for quic.EarlyConnection +// because the quic connection does not implement net.Conn. +type fakeConn struct { + conn *quic.Conn +} + +func (c *fakeConn) Close() error { panic("connection operation prohibited") } +func (c *fakeConn) Read(p []byte) (int, error) { panic("connection operation prohibited") } +func (c *fakeConn) Write(p []byte) (int, error) { panic("connection operation prohibited") } +func (c *fakeConn) SetDeadline(t time.Time) error { panic("connection operation prohibited") } +func (c *fakeConn) SetReadDeadline(t time.Time) error { panic("connection operation prohibited") } +func (c *fakeConn) SetWriteDeadline(t time.Time) error { panic("connection operation prohibited") } +func (c *fakeConn) RemoteAddr() net.Addr { return c.conn.RemoteAddr() } +func (c *fakeConn) LocalAddr() net.Addr { return c.conn.LocalAddr() } + +func traceGotConn(trace *httptrace.ClientTrace, conn *quic.Conn, reused bool) { + if trace != nil && trace.GotConn != nil { + trace.GotConn(httptrace.GotConnInfo{ + Conn: &fakeConn{conn: conn}, + Reused: reused, + }) + } +} + +func traceGotFirstResponseByte(trace *httptrace.ClientTrace) { + if trace != nil && trace.GotFirstResponseByte != nil { + trace.GotFirstResponseByte() + } +} + +func traceGot1xxResponse(trace *httptrace.ClientTrace, code int, header textproto.MIMEHeader) { + if trace != nil && trace.Got1xxResponse != nil { + trace.Got1xxResponse(code, header) + } +} + +func traceGot100Continue(trace *httptrace.ClientTrace) { + if trace != nil && trace.Got100Continue != nil { + trace.Got100Continue() + } +} + +func traceHasWroteHeaderField(trace *httptrace.ClientTrace) bool { + return trace != nil && trace.WroteHeaderField != nil +} + +func traceWroteHeaderField(trace *httptrace.ClientTrace, k, v string) { + if trace != nil && trace.WroteHeaderField != nil { + trace.WroteHeaderField(k, []string{v}) + } +} + +func traceWroteHeaders(trace *httptrace.ClientTrace) { + if trace != nil && trace.WroteHeaders != nil { + trace.WroteHeaders() + } +} + +func traceWroteRequest(trace *httptrace.ClientTrace, err error) { + if trace != nil && trace.WroteRequest != nil { + trace.WroteRequest(httptrace.WroteRequestInfo{Err: err}) + } +} + +func traceConnectStart(trace *httptrace.ClientTrace, network, addr string) { + if trace != nil && trace.ConnectStart != nil { + trace.ConnectStart(network, addr) + } +} + +func traceConnectDone(trace *httptrace.ClientTrace, network, addr string, err error) { + if trace != nil && trace.ConnectDone != nil { + trace.ConnectDone(network, addr, err) + } +} + +func traceTLSHandshakeStart(trace *httptrace.ClientTrace) { + if trace != nil && trace.TLSHandshakeStart != nil { + trace.TLSHandshakeStart() + } +} + +func traceTLSHandshakeDone(trace *httptrace.ClientTrace, state tls.ConnectionState, err error) { + if trace != nil && trace.TLSHandshakeDone != nil { + trace.TLSHandshakeDone(state, err) + } +} diff --git a/vendor/github.com/quic-go/quic-go/http3/transport.go b/vendor/github.com/quic-go/quic-go/http3/transport.go new file mode 100644 index 0000000..4085fac --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/http3/transport.go @@ -0,0 +1,497 @@ +package http3 + +import ( + "context" + "crypto/tls" + "errors" + "fmt" + "io" + "log/slog" + "net" + "net/http" + "net/http/httptrace" + "net/url" + "strings" + "sync" + "sync/atomic" + + "golang.org/x/net/http/httpguts" + + "github.com/quic-go/quic-go" +) + +// Settings are HTTP/3 settings that apply to the underlying connection. +type Settings struct { + // Support for HTTP/3 datagrams (RFC 9297) + EnableDatagrams bool + // Extended CONNECT, RFC 9220 + EnableExtendedConnect bool + // Other settings, defined by the application + Other map[uint64]uint64 +} + +// RoundTripOpt are options for the Transport.RoundTripOpt method. +type RoundTripOpt struct { + // OnlyCachedConn controls whether the Transport may create a new QUIC connection. + // If set true and no cached connection is available, RoundTripOpt will return ErrNoCachedConn. + OnlyCachedConn bool +} + +type clientConn interface { + OpenRequestStream(context.Context) (*RequestStream, error) + RoundTrip(*http.Request) (*http.Response, error) +} + +type roundTripperWithCount struct { + cancel context.CancelFunc + dialing chan struct{} // closed as soon as quic.Dial(Early) returned + dialErr error + conn *quic.Conn + clientConn clientConn + + useCount atomic.Int64 +} + +func (r *roundTripperWithCount) Close() error { + r.cancel() + <-r.dialing + if r.conn != nil { + return r.conn.CloseWithError(0, "") + } + return nil +} + +// Transport implements the http.RoundTripper interface +type Transport struct { + // TLSClientConfig specifies the TLS configuration to use with + // tls.Client. If nil, the default configuration is used. + TLSClientConfig *tls.Config + + // QUICConfig is the quic.Config used for dialing new connections. + // If nil, reasonable default values will be used. + QUICConfig *quic.Config + + // Dial specifies an optional dial function for creating QUIC + // connections for requests. + // If Dial is nil, a UDPConn will be created at the first request + // and will be reused for subsequent connections to other servers. + Dial func(ctx context.Context, addr string, tlsCfg *tls.Config, cfg *quic.Config) (*quic.Conn, error) + + // Enable support for HTTP/3 datagrams (RFC 9297). + // If a QUICConfig is set, datagram support also needs to be enabled on the QUIC layer by setting EnableDatagrams. + EnableDatagrams bool + + // Additional HTTP/3 settings. + // It is invalid to specify any settings defined by RFC 9114 (HTTP/3) and RFC 9297 (HTTP Datagrams). + AdditionalSettings map[uint64]uint64 + + // MaxResponseHeaderBytes specifies a limit on how many response bytes are + // allowed in the server's response header. + // Zero means to use a default limit. + MaxResponseHeaderBytes int64 + + // DisableCompression, if true, prevents the Transport from requesting compression with an + // "Accept-Encoding: gzip" request header when the Request contains no existing Accept-Encoding value. + // If the Transport requests gzip on its own and gets a gzipped response, it's transparently + // decoded in the Response.Body. + // However, if the user explicitly requested gzip it is not automatically uncompressed. + DisableCompression bool + + StreamHijacker func(FrameType, quic.ConnectionTracingID, *quic.Stream, error) (hijacked bool, err error) + UniStreamHijacker func(StreamType, quic.ConnectionTracingID, *quic.ReceiveStream, error) (hijacked bool) + + Logger *slog.Logger + + mutex sync.Mutex + + initOnce sync.Once + initErr error + + newClientConn func(*quic.Conn) clientConn + + clients map[string]*roundTripperWithCount + transport *quic.Transport +} + +var ( + _ http.RoundTripper = &Transport{} + _ io.Closer = &Transport{} +) + +// ErrNoCachedConn is returned when Transport.OnlyCachedConn is set +var ErrNoCachedConn = errors.New("http3: no cached connection was available") + +func (t *Transport) init() error { + if t.newClientConn == nil { + t.newClientConn = func(conn *quic.Conn) clientConn { + return newClientConn( + conn, + t.EnableDatagrams, + t.AdditionalSettings, + t.StreamHijacker, + t.UniStreamHijacker, + t.MaxResponseHeaderBytes, + t.DisableCompression, + t.Logger, + ) + } + } + if t.QUICConfig == nil { + t.QUICConfig = defaultQuicConfig.Clone() + t.QUICConfig.EnableDatagrams = t.EnableDatagrams + } + if t.EnableDatagrams && !t.QUICConfig.EnableDatagrams { + return errors.New("HTTP Datagrams enabled, but QUIC Datagrams disabled") + } + if len(t.QUICConfig.Versions) == 0 { + t.QUICConfig = t.QUICConfig.Clone() + t.QUICConfig.Versions = []quic.Version{quic.SupportedVersions()[0]} + } + if len(t.QUICConfig.Versions) != 1 { + return errors.New("can only use a single QUIC version for dialing a HTTP/3 connection") + } + if t.QUICConfig.MaxIncomingStreams == 0 { + t.QUICConfig.MaxIncomingStreams = -1 // don't allow any bidirectional streams + } + return nil +} + +// RoundTripOpt is like RoundTrip, but takes options. +func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) { + rsp, err := t.roundTripOpt(req, opt) + if err != nil { + if req.Body != nil { + req.Body.Close() + } + return nil, err + } + return rsp, nil +} + +func (t *Transport) roundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) { + t.initOnce.Do(func() { t.initErr = t.init() }) + if t.initErr != nil { + return nil, t.initErr + } + + if req.URL == nil { + return nil, errors.New("http3: nil Request.URL") + } + if req.URL.Scheme != "https" { + return nil, fmt.Errorf("http3: unsupported protocol scheme: %s", req.URL.Scheme) + } + if req.URL.Host == "" { + return nil, errors.New("http3: no Host in request URL") + } + if req.Header == nil { + return nil, errors.New("http3: nil Request.Header") + } + if req.Method != "" && !validMethod(req.Method) { + return nil, fmt.Errorf("http3: invalid method %q", req.Method) + } + for k, vv := range req.Header { + if !httpguts.ValidHeaderFieldName(k) { + return nil, fmt.Errorf("http3: invalid http header field name %q", k) + } + for _, v := range vv { + if !httpguts.ValidHeaderFieldValue(v) { + return nil, fmt.Errorf("http3: invalid http header field value %q for key %v", v, k) + } + } + } + + return t.doRoundTripOpt(req, opt, false) +} + +func (t *Transport) doRoundTripOpt(req *http.Request, opt RoundTripOpt, isRetried bool) (*http.Response, error) { + hostname := authorityAddr(hostnameFromURL(req.URL)) + trace := httptrace.ContextClientTrace(req.Context()) + traceGetConn(trace, hostname) + cl, isReused, err := t.getClient(req.Context(), hostname, opt.OnlyCachedConn) + if err != nil { + return nil, err + } + + select { + case <-cl.dialing: + case <-req.Context().Done(): + return nil, context.Cause(req.Context()) + } + + if cl.dialErr != nil { + t.removeClient(hostname) + return nil, cl.dialErr + } + defer cl.useCount.Add(-1) + traceGotConn(trace, cl.conn, isReused) + rsp, err := cl.clientConn.RoundTrip(req) + if err != nil { + // request aborted due to context cancellation + select { + case <-req.Context().Done(): + return nil, err + default: + } + if isRetried { + return nil, err + } + + t.removeClient(hostname) + req, err = canRetryRequest(err, req) + if err != nil { + return nil, err + } + return t.doRoundTripOpt(req, opt, true) + } + return rsp, nil +} + +func canRetryRequest(err error, req *http.Request) (*http.Request, error) { + // error occurred while opening the stream, we can be sure that the request wasn't sent out + var connErr *errConnUnusable + if errors.As(err, &connErr) { + return req, nil + } + + // If the request stream is reset, we can only be sure that the request wasn't processed + // if the error code is H3_REQUEST_REJECTED. + var e *Error + if !errors.As(err, &e) || e.ErrorCode != ErrCodeRequestRejected { + return nil, err + } + // if the body is nil (or http.NoBody), it's safe to reuse this request and its body + if req.Body == nil || req.Body == http.NoBody { + return req, nil + } + // if the request body can be reset back to its original state via req.GetBody, do that + if req.GetBody != nil { + newBody, err := req.GetBody() + if err != nil { + return nil, err + } + reqCopy := *req + reqCopy.Body = newBody + req = &reqCopy + return &reqCopy, nil + } + return nil, fmt.Errorf("http3: Transport: cannot retry err [%w] after Request.Body was written; define Request.GetBody to avoid this error", err) +} + +// RoundTrip does a round trip. +func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { + return t.RoundTripOpt(req, RoundTripOpt{}) +} + +func (t *Transport) getClient(ctx context.Context, hostname string, onlyCached bool) (rtc *roundTripperWithCount, isReused bool, err error) { + t.mutex.Lock() + defer t.mutex.Unlock() + + if t.clients == nil { + t.clients = make(map[string]*roundTripperWithCount) + } + + cl, ok := t.clients[hostname] + if !ok { + if onlyCached { + return nil, false, ErrNoCachedConn + } + ctx, cancel := context.WithCancel(ctx) + cl = &roundTripperWithCount{ + dialing: make(chan struct{}), + cancel: cancel, + } + go func() { + defer close(cl.dialing) + defer cancel() + conn, rt, err := t.dial(ctx, hostname) + if err != nil { + cl.dialErr = err + return + } + cl.conn = conn + cl.clientConn = rt + }() + t.clients[hostname] = cl + } + select { + case <-cl.dialing: + if cl.dialErr != nil { + delete(t.clients, hostname) + return nil, false, cl.dialErr + } + select { + case <-cl.conn.HandshakeComplete(): + isReused = true + default: + } + default: + } + cl.useCount.Add(1) + return cl, isReused, nil +} + +func (t *Transport) dial(ctx context.Context, hostname string) (*quic.Conn, clientConn, error) { + var tlsConf *tls.Config + if t.TLSClientConfig == nil { + tlsConf = &tls.Config{} + } else { + tlsConf = t.TLSClientConfig.Clone() + } + if tlsConf.ServerName == "" { + sni, _, err := net.SplitHostPort(hostname) + if err != nil { + // It's ok if net.SplitHostPort returns an error - it could be a hostname/IP address without a port. + sni = hostname + } + tlsConf.ServerName = sni + } + // Replace existing ALPNs by H3 + tlsConf.NextProtos = []string{NextProtoH3} + + dial := t.Dial + if dial == nil { + if t.transport == nil { + udpConn, err := net.ListenUDP("udp", nil) + if err != nil { + return nil, nil, err + } + t.transport = &quic.Transport{Conn: udpConn} + } + dial = func(ctx context.Context, addr string, tlsCfg *tls.Config, cfg *quic.Config) (*quic.Conn, error) { + network := "udp" + udpAddr, err := t.resolveUDPAddr(ctx, network, addr) + if err != nil { + return nil, err + } + trace := httptrace.ContextClientTrace(ctx) + traceConnectStart(trace, network, udpAddr.String()) + traceTLSHandshakeStart(trace) + conn, err := t.transport.DialEarly(ctx, udpAddr, tlsCfg, cfg) + var state tls.ConnectionState + if conn != nil { + state = conn.ConnectionState().TLS + } + traceTLSHandshakeDone(trace, state, err) + traceConnectDone(trace, network, udpAddr.String(), err) + return conn, err + } + } + conn, err := dial(ctx, hostname, tlsConf, t.QUICConfig) + if err != nil { + return nil, nil, err + } + return conn, t.newClientConn(conn), nil +} + +func (t *Transport) resolveUDPAddr(ctx context.Context, network, addr string) (*net.UDPAddr, error) { + host, portStr, err := net.SplitHostPort(addr) + if err != nil { + return nil, err + } + port, err := net.LookupPort(network, portStr) + if err != nil { + return nil, err + } + resolver := net.DefaultResolver + ipAddrs, err := resolver.LookupIPAddr(ctx, host) + if err != nil { + return nil, err + } + addrs := addrList(ipAddrs) + ip := addrs.forResolve(network, addr) + return &net.UDPAddr{IP: ip.IP, Port: port, Zone: ip.Zone}, nil +} + +func (t *Transport) removeClient(hostname string) { + t.mutex.Lock() + defer t.mutex.Unlock() + if t.clients == nil { + return + } + delete(t.clients, hostname) +} + +// NewClientConn creates a new HTTP/3 client connection on top of a QUIC connection. +// Most users should use RoundTrip instead of creating a connection directly. +// Specifically, it is not needed to perform GET, POST, HEAD and CONNECT requests. +// +// Obtaining a ClientConn is only needed for more advanced use cases, such as +// using Extended CONNECT for WebTransport or the various MASQUE protocols. +func (t *Transport) NewClientConn(conn *quic.Conn) *ClientConn { + return newClientConn( + conn, + t.EnableDatagrams, + t.AdditionalSettings, + t.StreamHijacker, + t.UniStreamHijacker, + t.MaxResponseHeaderBytes, + t.DisableCompression, + t.Logger, + ) +} + +// Close closes the QUIC connections that this Transport has used. +func (t *Transport) Close() error { + t.mutex.Lock() + defer t.mutex.Unlock() + for _, cl := range t.clients { + if err := cl.Close(); err != nil { + return err + } + } + t.clients = nil + if t.transport != nil { + if err := t.transport.Close(); err != nil { + return err + } + if err := t.transport.Conn.Close(); err != nil { + return err + } + t.transport = nil + } + return nil +} + +func hostnameFromURL(url *url.URL) string { + if url != nil { + return url.Host + } + return "" +} + +func validMethod(method string) bool { + /* + Method = "OPTIONS" ; Section 9.2 + | "GET" ; Section 9.3 + | "HEAD" ; Section 9.4 + | "POST" ; Section 9.5 + | "PUT" ; Section 9.6 + | "DELETE" ; Section 9.7 + | "TRACE" ; Section 9.8 + | "CONNECT" ; Section 9.9 + | extension-method + extension-method = token + token = 1* + */ + return len(method) > 0 && strings.IndexFunc(method, isNotToken) == -1 +} + +// copied from net/http/http.go +func isNotToken(r rune) bool { + return !httpguts.IsTokenRune(r) +} + +// CloseIdleConnections closes any QUIC connections in the transport's pool that are currently idle. +// An idle connection is one that was previously used for requests but is now sitting unused. +// This method does not interrupt any connections currently in use. +// It also does not affect connections obtained via NewClientConn. +func (t *Transport) CloseIdleConnections() { + t.mutex.Lock() + defer t.mutex.Unlock() + for hostname, cl := range t.clients { + if cl.useCount.Load() == 0 { + cl.Close() + delete(t.clients, hostname) + } + } +} diff --git a/vendor/github.com/quic-go/quic-go/interface.go b/vendor/github.com/quic-go/quic-go/interface.go new file mode 100644 index 0000000..45a03a5 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/interface.go @@ -0,0 +1,228 @@ +package quic + +import ( + "context" + "crypto/tls" + "errors" + "net" + "slices" + "time" + + "github.com/quic-go/quic-go/internal/handshake" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/logging" +) + +// The StreamID is the ID of a QUIC stream. +type StreamID = protocol.StreamID + +// A Version is a QUIC version number. +type Version = protocol.Version + +const ( + // Version1 is RFC 9000 + Version1 = protocol.Version1 + // Version2 is RFC 9369 + Version2 = protocol.Version2 +) + +// SupportedVersions returns the support versions, sorted in descending order of preference. +func SupportedVersions() []Version { + // clone the slice to prevent the caller from modifying the slice + return slices.Clone(protocol.SupportedVersions) +} + +// A ClientToken is a token received by the client. +// It can be used to skip address validation on future connection attempts. +type ClientToken struct { + data []byte + rtt time.Duration +} + +type TokenStore interface { + // Pop searches for a ClientToken associated with the given key. + // Since tokens are not supposed to be reused, it must remove the token from the cache. + // It returns nil when no token is found. + Pop(key string) (token *ClientToken) + + // Put adds a token to the cache with the given key. It might get called + // multiple times in a connection. + Put(key string, token *ClientToken) +} + +// Err0RTTRejected is the returned from: +// - Open{Uni}Stream{Sync} +// - Accept{Uni}Stream +// - Stream.Read and Stream.Write +// +// when the server rejects a 0-RTT connection attempt. +var Err0RTTRejected = errors.New("0-RTT rejected") + +// ConnectionTracingKey can be used to associate a [logging.ConnectionTracer] with a [Conn]. +// It is set on the Conn.Context() context, +// as well as on the context passed to logging.Tracer.NewConnectionTracer. +// +// Deprecated: Applications can set their own tracing key using Transport.ConnContext. +var ConnectionTracingKey = connTracingCtxKey{} + +// ConnectionTracingID is the type of the context value saved under the ConnectionTracingKey. +// +// Deprecated: Applications can set their own tracing key using Transport.ConnContext. +type ConnectionTracingID uint64 + +type connTracingCtxKey struct{} + +// QUICVersionContextKey can be used to find out the QUIC version of a TLS handshake from the +// context returned by tls.Config.ClientInfo.Context. +var QUICVersionContextKey = handshake.QUICVersionContextKey + +// StatelessResetKey is a key used to derive stateless reset tokens. +type StatelessResetKey [32]byte + +// TokenGeneratorKey is a key used to encrypt session resumption tokens. +type TokenGeneratorKey = handshake.TokenProtectorKey + +// A ConnectionID is a QUIC Connection ID, as defined in RFC 9000. +// It is not able to handle QUIC Connection IDs longer than 20 bytes, +// as they are allowed by RFC 8999. +type ConnectionID = protocol.ConnectionID + +// ConnectionIDFromBytes interprets b as a [ConnectionID]. It panics if b is +// longer than 20 bytes. +func ConnectionIDFromBytes(b []byte) ConnectionID { + return protocol.ParseConnectionID(b) +} + +// A ConnectionIDGenerator allows the application to take control over the generation of Connection IDs. +// Connection IDs generated by an implementation must be of constant length. +type ConnectionIDGenerator interface { + // GenerateConnectionID generates a new Connection ID. + // Generated Connection IDs must be unique and observers should not be able to correlate two Connection IDs. + GenerateConnectionID() (ConnectionID, error) + + // ConnectionIDLen returns the length of Connection IDs generated by this implementation. + // Implementations must return constant-length Connection IDs with lengths between 0 and 20 bytes. + // A length of 0 can only be used when an endpoint doesn't need to multiplex connections during migration. + ConnectionIDLen() int +} + +// Config contains all configuration data needed for a QUIC server or client. +type Config struct { + // GetConfigForClient is called for incoming connections. + // If the error is not nil, the connection attempt is refused. + GetConfigForClient func(info *ClientInfo) (*Config, error) + // The QUIC versions that can be negotiated. + // If not set, it uses all versions available. + Versions []Version + // HandshakeIdleTimeout is the idle timeout before completion of the handshake. + // If we don't receive any packet from the peer within this time, the connection attempt is aborted. + // Additionally, if the handshake doesn't complete in twice this time, the connection attempt is also aborted. + // If this value is zero, the timeout is set to 5 seconds. + HandshakeIdleTimeout time.Duration + // MaxIdleTimeout is the maximum duration that may pass without any incoming network activity. + // The actual value for the idle timeout is the minimum of this value and the peer's. + // This value only applies after the handshake has completed. + // If the timeout is exceeded, the connection is closed. + // If this value is zero, the timeout is set to 30 seconds. + MaxIdleTimeout time.Duration + // The TokenStore stores tokens received from the server. + // Tokens are used to skip address validation on future connection attempts. + // The key used to store tokens is the ServerName from the tls.Config, if set + // otherwise the token is associated with the server's IP address. + TokenStore TokenStore + // InitialStreamReceiveWindow is the initial size of the stream-level flow control window for receiving data. + // If the application is consuming data quickly enough, the flow control auto-tuning algorithm + // will increase the window up to MaxStreamReceiveWindow. + // If this value is zero, it will default to 512 KB. + // Values larger than the maximum varint (quicvarint.Max) will be clipped to that value. + InitialStreamReceiveWindow uint64 + // MaxStreamReceiveWindow is the maximum stream-level flow control window for receiving data. + // If this value is zero, it will default to 6 MB. + // Values larger than the maximum varint (quicvarint.Max) will be clipped to that value. + MaxStreamReceiveWindow uint64 + // InitialConnectionReceiveWindow is the initial size of the stream-level flow control window for receiving data. + // If the application is consuming data quickly enough, the flow control auto-tuning algorithm + // will increase the window up to MaxConnectionReceiveWindow. + // If this value is zero, it will default to 512 KB. + // Values larger than the maximum varint (quicvarint.Max) will be clipped to that value. + InitialConnectionReceiveWindow uint64 + // MaxConnectionReceiveWindow is the connection-level flow control window for receiving data. + // If this value is zero, it will default to 15 MB. + // Values larger than the maximum varint (quicvarint.Max) will be clipped to that value. + MaxConnectionReceiveWindow uint64 + // AllowConnectionWindowIncrease is called every time the connection flow controller attempts + // to increase the connection flow control window. + // If set, the caller can prevent an increase of the window. Typically, it would do so to + // limit the memory usage. + // To avoid deadlocks, it is not valid to call other functions on the connection or on streams + // in this callback. + AllowConnectionWindowIncrease func(conn *Conn, delta uint64) bool + // MaxIncomingStreams is the maximum number of concurrent bidirectional streams that a peer is allowed to open. + // If not set, it will default to 100. + // If set to a negative value, it doesn't allow any bidirectional streams. + // Values larger than 2^60 will be clipped to that value. + MaxIncomingStreams int64 + // MaxIncomingUniStreams is the maximum number of concurrent unidirectional streams that a peer is allowed to open. + // If not set, it will default to 100. + // If set to a negative value, it doesn't allow any unidirectional streams. + // Values larger than 2^60 will be clipped to that value. + MaxIncomingUniStreams int64 + // KeepAlivePeriod defines whether this peer will periodically send a packet to keep the connection alive. + // If set to 0, then no keep alive is sent. Otherwise, the keep alive is sent on that period (or at most + // every half of MaxIdleTimeout, whichever is smaller). + KeepAlivePeriod time.Duration + // InitialPacketSize is the initial size (and the lower limit) for packets sent. + // Under most circumstances, it is not necessary to manually set this value, + // since path MTU discovery quickly finds the path's MTU. + // If set too high, the path might not support packets of that size, leading to a timeout of the QUIC handshake. + // Values below 1200 are invalid. + InitialPacketSize uint16 + // DisablePathMTUDiscovery disables Path MTU Discovery (RFC 8899). + // This allows the sending of QUIC packets that fully utilize the available MTU of the path. + // Path MTU discovery is only available on systems that allow setting of the Don't Fragment (DF) bit. + DisablePathMTUDiscovery bool + // Allow0RTT allows the application to decide if a 0-RTT connection attempt should be accepted. + // Only valid for the server. + Allow0RTT bool + // Enable QUIC datagram support (RFC 9221). + EnableDatagrams bool + // Enable QUIC Stream Resets with Partial Delivery. + // See https://datatracker.ietf.org/doc/html/draft-ietf-quic-reliable-stream-reset-07. + EnableStreamResetPartialDelivery bool + Tracer func(context.Context, logging.Perspective, ConnectionID) *logging.ConnectionTracer +} + +// ClientHelloInfo contains information about an incoming connection attempt. +// +// Deprecated: Use ClientInfo instead. +type ClientHelloInfo = ClientInfo + +// ClientInfo contains information about an incoming connection attempt. +type ClientInfo struct { + // RemoteAddr is the remote address on the Initial packet. + // Unless AddrVerified is set, the address is not yet verified, and could be a spoofed IP address. + RemoteAddr net.Addr + // AddrVerified says if the remote address was verified using QUIC's Retry mechanism. + // Note that the Retry mechanism costs one network roundtrip, + // and is not performed unless Transport.MaxUnvalidatedHandshakes is surpassed. + AddrVerified bool +} + +// ConnectionState records basic details about a QUIC connection. +type ConnectionState struct { + // TLS contains information about the TLS connection state, incl. the tls.ConnectionState. + TLS tls.ConnectionState + // SupportsDatagrams indicates whether the peer advertised support for QUIC datagrams (RFC 9221). + // When true, datagrams can be sent using the Conn's SendDatagram method. + // This is a unilateral declaration by the peer - receiving datagrams is only possible if + // datagram support was enabled locally via Config.EnableDatagrams. + SupportsDatagrams bool + // SupportsStreamResetPartialDelivery indicates whether the peer advertised support for QUIC Stream Resets with Partial Delivery. + SupportsStreamResetPartialDelivery bool + // Used0RTT says if 0-RTT resumption was used. + Used0RTT bool + // Version is the QUIC version of the QUIC connection. + Version Version + // GSO says if generic segmentation offload is used. + GSO bool +} diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/ack_eliciting.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/ack_eliciting.go new file mode 100644 index 0000000..8d84361 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/ack_eliciting.go @@ -0,0 +1,33 @@ +package ackhandler + +import "github.com/quic-go/quic-go/internal/wire" + +// IsFrameTypeAckEliciting returns true if the frame is ack-eliciting. +func IsFrameTypeAckEliciting(t wire.FrameType) bool { + //nolint:exhaustive // The default case catches the rest. + switch t { + case wire.FrameTypeAck, wire.FrameTypeAckECN: + return false + case wire.FrameTypeConnectionClose, wire.FrameTypeApplicationClose: + return false + default: + return true + } +} + +// IsFrameAckEliciting returns true if the frame is ack-eliciting. +func IsFrameAckEliciting(f wire.Frame) bool { + _, isAck := f.(*wire.AckFrame) + _, isConnectionClose := f.(*wire.ConnectionCloseFrame) + return !isAck && !isConnectionClose +} + +// HasAckElicitingFrames returns true if at least one frame is ack-eliciting. +func HasAckElicitingFrames(fs []Frame) bool { + for _, f := range fs { + if IsFrameAckEliciting(f.Frame) { + return true + } + } + return false +} diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/ackhandler.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/ackhandler.go new file mode 100644 index 0000000..6f890b4 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/ackhandler.go @@ -0,0 +1,24 @@ +package ackhandler + +import ( + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/logging" +) + +// NewAckHandler creates a new SentPacketHandler and a new ReceivedPacketHandler. +// clientAddressValidated indicates whether the address was validated beforehand by an address validation token. +// clientAddressValidated has no effect for a client. +func NewAckHandler( + initialPacketNumber protocol.PacketNumber, + initialMaxDatagramSize protocol.ByteCount, + rttStats *utils.RTTStats, + clientAddressValidated bool, + enableECN bool, + pers protocol.Perspective, + tracer *logging.ConnectionTracer, + logger utils.Logger, +) (SentPacketHandler, ReceivedPacketHandler) { + sph := newSentPacketHandler(initialPacketNumber, initialMaxDatagramSize, rttStats, clientAddressValidated, enableECN, pers, tracer, logger) + return sph, newReceivedPacketHandler(sph, logger) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/ecn.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/ecn.go new file mode 100644 index 0000000..68415ac --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/ecn.go @@ -0,0 +1,296 @@ +package ackhandler + +import ( + "fmt" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/logging" +) + +type ecnState uint8 + +const ( + ecnStateInitial ecnState = iota + ecnStateTesting + ecnStateUnknown + ecnStateCapable + ecnStateFailed +) + +// must fit into an uint8, otherwise numSentTesting and numLostTesting must have a larger type +const numECNTestingPackets = 10 + +type ecnHandler interface { + SentPacket(protocol.PacketNumber, protocol.ECN) + Mode() protocol.ECN + HandleNewlyAcked(packets []*packet, ect0, ect1, ecnce int64) (congested bool) + LostPacket(protocol.PacketNumber) +} + +// The ecnTracker performs ECN validation of a path. +// Once failed, it doesn't do any re-validation of the path. +// It is designed only work for 1-RTT packets, it doesn't handle multiple packet number spaces. +// In order to avoid revealing any internal state to on-path observers, +// callers should make sure to start using ECN (i.e. calling Mode) for the very first 1-RTT packet sent. +// The validation logic implemented here strictly follows the algorithm described in RFC 9000 section 13.4.2 and A.4. +type ecnTracker struct { + state ecnState + numSentTesting, numLostTesting uint8 + + firstTestingPacket protocol.PacketNumber + lastTestingPacket protocol.PacketNumber + firstCapablePacket protocol.PacketNumber + + numSentECT0, numSentECT1 int64 + numAckedECT0, numAckedECT1, numAckedECNCE int64 + + tracer *logging.ConnectionTracer + logger utils.Logger +} + +var _ ecnHandler = &ecnTracker{} + +func newECNTracker(logger utils.Logger, tracer *logging.ConnectionTracer) *ecnTracker { + return &ecnTracker{ + firstTestingPacket: protocol.InvalidPacketNumber, + lastTestingPacket: protocol.InvalidPacketNumber, + firstCapablePacket: protocol.InvalidPacketNumber, + state: ecnStateInitial, + logger: logger, + tracer: tracer, + } +} + +func (e *ecnTracker) SentPacket(pn protocol.PacketNumber, ecn protocol.ECN) { + //nolint:exhaustive // These are the only ones we need to take care of. + switch ecn { + case protocol.ECNNon: + return + case protocol.ECT0: + e.numSentECT0++ + case protocol.ECT1: + e.numSentECT1++ + case protocol.ECNUnsupported: + if e.state != ecnStateFailed { + panic("didn't expect ECN to be unsupported") + } + default: + panic(fmt.Sprintf("sent packet with unexpected ECN marking: %s", ecn)) + } + + if e.state == ecnStateCapable && e.firstCapablePacket == protocol.InvalidPacketNumber { + e.firstCapablePacket = pn + } + + if e.state != ecnStateTesting { + return + } + + e.numSentTesting++ + if e.firstTestingPacket == protocol.InvalidPacketNumber { + e.firstTestingPacket = pn + } + if e.numSentECT0+e.numSentECT1 >= numECNTestingPackets { + if e.tracer != nil && e.tracer.ECNStateUpdated != nil { + e.tracer.ECNStateUpdated(logging.ECNStateUnknown, logging.ECNTriggerNoTrigger) + } + e.state = ecnStateUnknown + e.lastTestingPacket = pn + } +} + +func (e *ecnTracker) Mode() protocol.ECN { + switch e.state { + case ecnStateInitial: + if e.tracer != nil && e.tracer.ECNStateUpdated != nil { + e.tracer.ECNStateUpdated(logging.ECNStateTesting, logging.ECNTriggerNoTrigger) + } + e.state = ecnStateTesting + return e.Mode() + case ecnStateTesting, ecnStateCapable: + return protocol.ECT0 + case ecnStateUnknown, ecnStateFailed: + return protocol.ECNNon + default: + panic(fmt.Sprintf("unknown ECN state: %d", e.state)) + } +} + +func (e *ecnTracker) LostPacket(pn protocol.PacketNumber) { + if e.state != ecnStateTesting && e.state != ecnStateUnknown { + return + } + if !e.isTestingPacket(pn) { + return + } + e.numLostTesting++ + // Only proceed if we have sent all 10 testing packets. + if e.state != ecnStateUnknown { + return + } + if e.numLostTesting >= e.numSentTesting { + e.logger.Debugf("Disabling ECN. All testing packets were lost.") + if e.tracer != nil && e.tracer.ECNStateUpdated != nil { + e.tracer.ECNStateUpdated(logging.ECNStateFailed, logging.ECNFailedLostAllTestingPackets) + } + e.state = ecnStateFailed + return + } + // Path validation also fails if some testing packets are lost, and all other testing packets where CE-marked + e.failIfMangled() +} + +// HandleNewlyAcked handles the ECN counts on an ACK frame. +// It must only be called for ACK frames that increase the largest acknowledged packet number, +// see section 13.4.2.1 of RFC 9000. +func (e *ecnTracker) HandleNewlyAcked(packets []*packet, ect0, ect1, ecnce int64) (congested bool) { + if e.state == ecnStateFailed { + return false + } + + // ECN validation can fail if the received total count for either ECT(0) or ECT(1) exceeds + // the total number of packets sent with each corresponding ECT codepoint. + if ect0 > e.numSentECT0 || ect1 > e.numSentECT1 { + e.logger.Debugf("Disabling ECN. Received more ECT(0) / ECT(1) acknowledgements than packets sent.") + if e.tracer != nil && e.tracer.ECNStateUpdated != nil { + e.tracer.ECNStateUpdated(logging.ECNStateFailed, logging.ECNFailedMoreECNCountsThanSent) + } + e.state = ecnStateFailed + return false + } + + // Count ECT0 and ECT1 marks that we used when sending the packets that are now being acknowledged. + var ackedECT0, ackedECT1 int64 + for _, p := range packets { + //nolint:exhaustive // We only ever send ECT(0) and ECT(1). + switch e.ecnMarking(p.PacketNumber) { + case protocol.ECT0: + ackedECT0++ + case protocol.ECT1: + ackedECT1++ + } + } + + // If an ACK frame newly acknowledges a packet that the endpoint sent with either the ECT(0) or ECT(1) + // codepoint set, ECN validation fails if the corresponding ECN counts are not present in the ACK frame. + // This check detects: + // * paths that bleach all ECN marks, and + // * peers that don't report any ECN counts + if (ackedECT0 > 0 || ackedECT1 > 0) && ect0 == 0 && ect1 == 0 && ecnce == 0 { + e.logger.Debugf("Disabling ECN. ECN-marked packet acknowledged, but no ECN counts on ACK frame.") + if e.tracer != nil && e.tracer.ECNStateUpdated != nil { + e.tracer.ECNStateUpdated(logging.ECNStateFailed, logging.ECNFailedNoECNCounts) + } + e.state = ecnStateFailed + return false + } + + // Determine the increase in ECT0, ECT1 and ECNCE marks + newECT0 := ect0 - e.numAckedECT0 + newECT1 := ect1 - e.numAckedECT1 + newECNCE := ecnce - e.numAckedECNCE + + // We're only processing ACKs that increase the Largest Acked. + // Therefore, the ECN counters should only ever increase. + // Any decrease means that the peer's counting logic is broken. + if newECT0 < 0 || newECT1 < 0 || newECNCE < 0 { + e.logger.Debugf("Disabling ECN. ECN counts decreased unexpectedly.") + if e.tracer != nil && e.tracer.ECNStateUpdated != nil { + e.tracer.ECNStateUpdated(logging.ECNStateFailed, logging.ECNFailedDecreasedECNCounts) + } + e.state = ecnStateFailed + return false + } + + // ECN validation also fails if the sum of the increase in ECT(0) and ECN-CE counts is less than the number + // of newly acknowledged packets that were originally sent with an ECT(0) marking. + // This could be the result of (partial) bleaching. + if newECT0+newECNCE < ackedECT0 { + e.logger.Debugf("Disabling ECN. Received less ECT(0) + ECN-CE than packets sent with ECT(0).") + if e.tracer != nil && e.tracer.ECNStateUpdated != nil { + e.tracer.ECNStateUpdated(logging.ECNStateFailed, logging.ECNFailedTooFewECNCounts) + } + e.state = ecnStateFailed + return false + } + // Similarly, ECN validation fails if the sum of the increases to ECT(1) and ECN-CE counts is less than + // the number of newly acknowledged packets sent with an ECT(1) marking. + if newECT1+newECNCE < ackedECT1 { + e.logger.Debugf("Disabling ECN. Received less ECT(1) + ECN-CE than packets sent with ECT(1).") + if e.tracer != nil && e.tracer.ECNStateUpdated != nil { + e.tracer.ECNStateUpdated(logging.ECNStateFailed, logging.ECNFailedTooFewECNCounts) + } + e.state = ecnStateFailed + return false + } + + // update our counters + e.numAckedECT0 = ect0 + e.numAckedECT1 = ect1 + e.numAckedECNCE = ecnce + + // Detect mangling (a path remarking all ECN-marked testing packets as CE), + // once all 10 testing packets have been sent out. + if e.state == ecnStateUnknown { + e.failIfMangled() + if e.state == ecnStateFailed { + return false + } + } + if e.state == ecnStateTesting || e.state == ecnStateUnknown { + var ackedTestingPacket bool + for _, p := range packets { + if e.isTestingPacket(p.PacketNumber) { + ackedTestingPacket = true + break + } + } + // This check won't succeed if the path is mangling ECN-marks (i.e. rewrites all ECN-marked packets to CE). + if ackedTestingPacket && (newECT0 > 0 || newECT1 > 0) { + e.logger.Debugf("ECN capability confirmed.") + if e.tracer != nil && e.tracer.ECNStateUpdated != nil { + e.tracer.ECNStateUpdated(logging.ECNStateCapable, logging.ECNTriggerNoTrigger) + } + e.state = ecnStateCapable + } + } + + // Don't trust CE marks before having confirmed ECN capability of the path. + // Otherwise, mangling would be misinterpreted as actual congestion. + return e.state == ecnStateCapable && newECNCE > 0 +} + +// failIfMangled fails ECN validation if all testing packets are lost or CE-marked. +func (e *ecnTracker) failIfMangled() { + numAckedECNCE := e.numAckedECNCE + int64(e.numLostTesting) + if e.numSentECT0+e.numSentECT1 > numAckedECNCE { + return + } + if e.tracer != nil && e.tracer.ECNStateUpdated != nil { + e.tracer.ECNStateUpdated(logging.ECNStateFailed, logging.ECNFailedManglingDetected) + } + e.state = ecnStateFailed +} + +func (e *ecnTracker) ecnMarking(pn protocol.PacketNumber) protocol.ECN { + if pn < e.firstTestingPacket || e.firstTestingPacket == protocol.InvalidPacketNumber { + return protocol.ECNNon + } + if pn < e.lastTestingPacket || e.lastTestingPacket == protocol.InvalidPacketNumber { + return protocol.ECT0 + } + if pn < e.firstCapablePacket || e.firstCapablePacket == protocol.InvalidPacketNumber { + return protocol.ECNNon + } + // We don't need to deal with the case when ECN validation fails, + // since we're ignoring any ECN counts reported in ACK frames in that case. + return protocol.ECT0 +} + +func (e *ecnTracker) isTestingPacket(pn protocol.PacketNumber) bool { + if e.firstTestingPacket == protocol.InvalidPacketNumber { + return false + } + return pn >= e.firstTestingPacket && (pn <= e.lastTestingPacket || e.lastTestingPacket == protocol.InvalidPacketNumber) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/frame.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/frame.go new file mode 100644 index 0000000..e03a808 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/frame.go @@ -0,0 +1,21 @@ +package ackhandler + +import ( + "github.com/quic-go/quic-go/internal/wire" +) + +// FrameHandler handles the acknowledgement and the loss of a frame. +type FrameHandler interface { + OnAcked(wire.Frame) + OnLost(wire.Frame) +} + +type Frame struct { + Frame wire.Frame // nil if the frame has already been acknowledged in another packet + Handler FrameHandler +} + +type StreamFrame struct { + Frame *wire.StreamFrame + Handler FrameHandler +} diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/interfaces.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/interfaces.go new file mode 100644 index 0000000..5fcce44 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/interfaces.go @@ -0,0 +1,54 @@ +package ackhandler + +import ( + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/wire" +) + +// SentPacketHandler handles ACKs received for outgoing packets +type SentPacketHandler interface { + // SentPacket may modify the packet + SentPacket(t time.Time, pn, largestAcked protocol.PacketNumber, streamFrames []StreamFrame, frames []Frame, encLevel protocol.EncryptionLevel, ecn protocol.ECN, size protocol.ByteCount, isPathMTUProbePacket, isPathProbePacket bool) + // ReceivedAck processes an ACK frame. + // It does not store a copy of the frame. + ReceivedAck(f *wire.AckFrame, encLevel protocol.EncryptionLevel, rcvTime time.Time) (bool /* 1-RTT packet acked */, error) + ReceivedBytes(_ protocol.ByteCount, rcvTime time.Time) + DropPackets(_ protocol.EncryptionLevel, rcvTime time.Time) + ResetForRetry(rcvTime time.Time) + + // The SendMode determines if and what kind of packets can be sent. + SendMode(now time.Time) SendMode + // TimeUntilSend is the time when the next packet should be sent. + // It is used for pacing packets. + TimeUntilSend() time.Time + SetMaxDatagramSize(count protocol.ByteCount) + + // only to be called once the handshake is complete + QueueProbePacket(protocol.EncryptionLevel) bool /* was a packet queued */ + + ECNMode(isShortHeaderPacket bool) protocol.ECN // isShortHeaderPacket should only be true for non-coalesced 1-RTT packets + PeekPacketNumber(protocol.EncryptionLevel) (protocol.PacketNumber, protocol.PacketNumberLen) + PopPacketNumber(protocol.EncryptionLevel) protocol.PacketNumber + + GetLossDetectionTimeout() time.Time + OnLossDetectionTimeout(now time.Time) error + + MigratedPath(now time.Time, initialMaxPacketSize protocol.ByteCount) +} + +type sentPacketTracker interface { + GetLowestPacketNotConfirmedAcked() protocol.PacketNumber + ReceivedPacket(_ protocol.EncryptionLevel, rcvTime time.Time) +} + +// ReceivedPacketHandler handles ACKs needed to send for incoming packets +type ReceivedPacketHandler interface { + IsPotentiallyDuplicate(protocol.PacketNumber, protocol.EncryptionLevel) bool + ReceivedPacket(pn protocol.PacketNumber, ecn protocol.ECN, encLevel protocol.EncryptionLevel, rcvTime time.Time, ackEliciting bool) error + DropPackets(protocol.EncryptionLevel) + + GetAlarmTimeout() time.Time + GetAckFrame(_ protocol.EncryptionLevel, now time.Time, onlyIfQueued bool) *wire.AckFrame +} diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/mockgen.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/mockgen.go new file mode 100644 index 0000000..0031e6b --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/mockgen.go @@ -0,0 +1,9 @@ +//go:build gomock || generate + +package ackhandler + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package ackhandler -destination mock_sent_packet_tracker_test.go github.com/quic-go/quic-go/internal/ackhandler SentPacketTracker" +type SentPacketTracker = sentPacketTracker + +//go:generate sh -c "go run go.uber.org/mock/mockgen -build_flags=\"-tags=gomock\" -package ackhandler -destination mock_ecn_handler_test.go github.com/quic-go/quic-go/internal/ackhandler ECNHandler" +type ECNHandler = ecnHandler diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet.go new file mode 100644 index 0000000..c634939 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet.go @@ -0,0 +1,56 @@ +package ackhandler + +import ( + "sync" + "time" + + "github.com/quic-go/quic-go/internal/protocol" +) + +// A Packet is a packet +type packet struct { + SendTime time.Time + PacketNumber protocol.PacketNumber + StreamFrames []StreamFrame + Frames []Frame + LargestAcked protocol.PacketNumber // InvalidPacketNumber if the packet doesn't contain an ACK + Length protocol.ByteCount + EncryptionLevel protocol.EncryptionLevel + + IsPathMTUProbePacket bool // We don't report the loss of Path MTU probe packets to the congestion controller. + + includedInBytesInFlight bool + declaredLost bool + skippedPacket bool + isPathProbePacket bool +} + +func (p *packet) outstanding() bool { + return !p.declaredLost && !p.skippedPacket && !p.IsPathMTUProbePacket && !p.isPathProbePacket +} + +var packetPool = sync.Pool{New: func() any { return &packet{} }} + +func getPacket() *packet { + p := packetPool.Get().(*packet) + p.PacketNumber = 0 + p.StreamFrames = nil + p.Frames = nil + p.LargestAcked = 0 + p.Length = 0 + p.EncryptionLevel = protocol.EncryptionLevel(0) + p.SendTime = time.Time{} + p.IsPathMTUProbePacket = false + p.includedInBytesInFlight = false + p.declaredLost = false + p.skippedPacket = false + return p +} + +// We currently only return Packets back into the pool when they're acknowledged (not when they're lost). +// This simplifies the code, and gives the vast majority of the performance benefit we can gain from using the pool. +func putPacket(p *packet) { + p.Frames = nil + p.StreamFrames = nil + packetPool.Put(p) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet_number_generator.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet_number_generator.go new file mode 100644 index 0000000..4a9db86 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet_number_generator.go @@ -0,0 +1,84 @@ +package ackhandler + +import ( + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" +) + +type packetNumberGenerator interface { + Peek() protocol.PacketNumber + // Pop pops the packet number. + // It reports if the packet number (before the one just popped) was skipped. + // It never skips more than one packet number in a row. + Pop() (skipped bool, _ protocol.PacketNumber) +} + +type sequentialPacketNumberGenerator struct { + next protocol.PacketNumber +} + +var _ packetNumberGenerator = &sequentialPacketNumberGenerator{} + +func newSequentialPacketNumberGenerator(initial protocol.PacketNumber) packetNumberGenerator { + return &sequentialPacketNumberGenerator{next: initial} +} + +func (p *sequentialPacketNumberGenerator) Peek() protocol.PacketNumber { + return p.next +} + +func (p *sequentialPacketNumberGenerator) Pop() (bool, protocol.PacketNumber) { + next := p.next + p.next++ + return false, next +} + +// The skippingPacketNumberGenerator generates the packet number for the next packet +// it randomly skips a packet number every averagePeriod packets (on average). +// It is guaranteed to never skip two consecutive packet numbers. +type skippingPacketNumberGenerator struct { + period protocol.PacketNumber + maxPeriod protocol.PacketNumber + + next protocol.PacketNumber + nextToSkip protocol.PacketNumber + + rng utils.Rand +} + +var _ packetNumberGenerator = &skippingPacketNumberGenerator{} + +func newSkippingPacketNumberGenerator(initial, initialPeriod, maxPeriod protocol.PacketNumber) packetNumberGenerator { + g := &skippingPacketNumberGenerator{ + next: initial, + period: initialPeriod, + maxPeriod: maxPeriod, + } + g.generateNewSkip() + return g +} + +func (p *skippingPacketNumberGenerator) Peek() protocol.PacketNumber { + if p.next == p.nextToSkip { + return p.next + 1 + } + return p.next +} + +func (p *skippingPacketNumberGenerator) Pop() (bool, protocol.PacketNumber) { + next := p.next + if p.next == p.nextToSkip { + next++ + p.next += 2 + p.generateNewSkip() + return true, next + } + p.next++ // generate a new packet number for the next packet + return false, next +} + +func (p *skippingPacketNumberGenerator) generateNewSkip() { + // make sure that there are never two consecutive packet numbers that are skipped + p.nextToSkip = p.next + 3 + protocol.PacketNumber(p.rng.Int31n(int32(2*p.period))) + p.period = min(2*p.period, p.maxPeriod) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_handler.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_handler.go new file mode 100644 index 0000000..eda0826 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_handler.go @@ -0,0 +1,125 @@ +package ackhandler + +import ( + "fmt" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/internal/wire" +) + +type receivedPacketHandler struct { + sentPackets sentPacketTracker + + initialPackets *receivedPacketTracker + handshakePackets *receivedPacketTracker + appDataPackets appDataReceivedPacketTracker + + lowest1RTTPacket protocol.PacketNumber +} + +var _ ReceivedPacketHandler = &receivedPacketHandler{} + +func newReceivedPacketHandler(sentPackets sentPacketTracker, logger utils.Logger) ReceivedPacketHandler { + return &receivedPacketHandler{ + sentPackets: sentPackets, + initialPackets: newReceivedPacketTracker(), + handshakePackets: newReceivedPacketTracker(), + appDataPackets: *newAppDataReceivedPacketTracker(logger), + lowest1RTTPacket: protocol.InvalidPacketNumber, + } +} + +func (h *receivedPacketHandler) ReceivedPacket( + pn protocol.PacketNumber, + ecn protocol.ECN, + encLevel protocol.EncryptionLevel, + rcvTime time.Time, + ackEliciting bool, +) error { + h.sentPackets.ReceivedPacket(encLevel, rcvTime) + switch encLevel { + case protocol.EncryptionInitial: + return h.initialPackets.ReceivedPacket(pn, ecn, rcvTime, ackEliciting) + case protocol.EncryptionHandshake: + // The Handshake packet number space might already have been dropped as a result + // of processing the CRYPTO frame that was contained in this packet. + if h.handshakePackets == nil { + return nil + } + return h.handshakePackets.ReceivedPacket(pn, ecn, rcvTime, ackEliciting) + case protocol.Encryption0RTT: + if h.lowest1RTTPacket != protocol.InvalidPacketNumber && pn > h.lowest1RTTPacket { + return fmt.Errorf("received packet number %d on a 0-RTT packet after receiving %d on a 1-RTT packet", pn, h.lowest1RTTPacket) + } + return h.appDataPackets.ReceivedPacket(pn, ecn, rcvTime, ackEliciting) + case protocol.Encryption1RTT: + if h.lowest1RTTPacket == protocol.InvalidPacketNumber || pn < h.lowest1RTTPacket { + h.lowest1RTTPacket = pn + } + if err := h.appDataPackets.ReceivedPacket(pn, ecn, rcvTime, ackEliciting); err != nil { + return err + } + h.appDataPackets.IgnoreBelow(h.sentPackets.GetLowestPacketNotConfirmedAcked()) + return nil + default: + panic(fmt.Sprintf("received packet with unknown encryption level: %s", encLevel)) + } +} + +func (h *receivedPacketHandler) DropPackets(encLevel protocol.EncryptionLevel) { + //nolint:exhaustive // 1-RTT packet number space is never dropped. + switch encLevel { + case protocol.EncryptionInitial: + h.initialPackets = nil + case protocol.EncryptionHandshake: + h.handshakePackets = nil + case protocol.Encryption0RTT: + // Nothing to do here. + // If we are rejecting 0-RTT, no 0-RTT packets will have been decrypted. + default: + panic(fmt.Sprintf("Cannot drop keys for encryption level %s", encLevel)) + } +} + +func (h *receivedPacketHandler) GetAlarmTimeout() time.Time { + return h.appDataPackets.GetAlarmTimeout() +} + +func (h *receivedPacketHandler) GetAckFrame(encLevel protocol.EncryptionLevel, now time.Time, onlyIfQueued bool) *wire.AckFrame { + //nolint:exhaustive // 0-RTT packets can't contain ACK frames. + switch encLevel { + case protocol.EncryptionInitial: + if h.initialPackets != nil { + return h.initialPackets.GetAckFrame() + } + return nil + case protocol.EncryptionHandshake: + if h.handshakePackets != nil { + return h.handshakePackets.GetAckFrame() + } + return nil + case protocol.Encryption1RTT: + return h.appDataPackets.GetAckFrame(now, onlyIfQueued) + default: + // 0-RTT packets can't contain ACK frames + return nil + } +} + +func (h *receivedPacketHandler) IsPotentiallyDuplicate(pn protocol.PacketNumber, encLevel protocol.EncryptionLevel) bool { + switch encLevel { + case protocol.EncryptionInitial: + if h.initialPackets != nil { + return h.initialPackets.IsPotentiallyDuplicate(pn) + } + case protocol.EncryptionHandshake: + if h.handshakePackets != nil { + return h.handshakePackets.IsPotentiallyDuplicate(pn) + } + case protocol.Encryption0RTT, protocol.Encryption1RTT: + return h.appDataPackets.IsPotentiallyDuplicate(pn) + } + panic("unexpected encryption level") +} diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_history.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_history.go new file mode 100644 index 0000000..f9feae1 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_history.go @@ -0,0 +1,141 @@ +package ackhandler + +import ( + "slices" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/wire" +) + +// interval is an interval from one PacketNumber to the other +type interval struct { + Start protocol.PacketNumber + End protocol.PacketNumber +} + +// The receivedPacketHistory stores if a packet number has already been received. +// It generates ACK ranges which can be used to assemble an ACK frame. +// It does not store packet contents. +type receivedPacketHistory struct { + ranges []interval // maximum length: protocol.MaxNumAckRanges + + deletedBelow protocol.PacketNumber +} + +func newReceivedPacketHistory() *receivedPacketHistory { + return &receivedPacketHistory{} +} + +// ReceivedPacket registers a packet with PacketNumber p and updates the ranges +func (h *receivedPacketHistory) ReceivedPacket(p protocol.PacketNumber) bool /* is a new packet (and not a duplicate / delayed packet) */ { + // ignore delayed packets, if we already deleted the range + if p < h.deletedBelow { + return false + } + + isNew := h.addToRanges(p) + // Delete old ranges, if we're tracking too many of them. + // This is a DoS defense against a peer that sends us too many gaps. + if len(h.ranges) > protocol.MaxNumAckRanges { + h.ranges = slices.Delete(h.ranges, 0, len(h.ranges)-protocol.MaxNumAckRanges) + } + return isNew +} + +func (h *receivedPacketHistory) addToRanges(p protocol.PacketNumber) bool /* is a new packet (and not a duplicate / delayed packet) */ { + if len(h.ranges) == 0 { + h.ranges = append(h.ranges, interval{Start: p, End: p}) + return true + } + + for i := len(h.ranges) - 1; i >= 0; i-- { + // p already included in an existing range. Nothing to do here + if p >= h.ranges[i].Start && p <= h.ranges[i].End { + return false + } + + if h.ranges[i].End == p-1 { // extend a range at the end + h.ranges[i].End = p + return true + } + if h.ranges[i].Start == p+1 { // extend a range at the beginning + h.ranges[i].Start = p + + if i > 0 && h.ranges[i-1].End+1 == h.ranges[i].Start { // merge two ranges + h.ranges[i-1].End = h.ranges[i].End + h.ranges = slices.Delete(h.ranges, i, i+1) + } + return true + } + + // create a new range after the current one + if p > h.ranges[i].End { + h.ranges = slices.Insert(h.ranges, i+1, interval{Start: p, End: p}) + return true + } + } + + // create a new range at the beginning + h.ranges = slices.Insert(h.ranges, 0, interval{Start: p, End: p}) + return true +} + +// DeleteBelow deletes all entries below (but not including) p +func (h *receivedPacketHistory) DeleteBelow(p protocol.PacketNumber) { + if p < h.deletedBelow { + return + } + h.deletedBelow = p + + if len(h.ranges) == 0 { + return + } + + idx := -1 + for i := 0; i < len(h.ranges); i++ { + if h.ranges[i].End < p { // delete a whole range + idx = i + } else if p > h.ranges[i].Start && p <= h.ranges[i].End { + h.ranges[i].Start = p + break + } else { // no ranges affected. Nothing to do + break + } + } + if idx >= 0 { + h.ranges = slices.Delete(h.ranges, 0, idx+1) + } +} + +// AppendAckRanges appends to a slice of all AckRanges that can be used in an AckFrame +func (h *receivedPacketHistory) AppendAckRanges(ackRanges []wire.AckRange) []wire.AckRange { + for i := len(h.ranges) - 1; i >= 0; i-- { + ackRanges = append(ackRanges, wire.AckRange{Smallest: h.ranges[i].Start, Largest: h.ranges[i].End}) + } + return ackRanges +} + +func (h *receivedPacketHistory) GetHighestAckRange() wire.AckRange { + ackRange := wire.AckRange{} + if len(h.ranges) > 0 { + ackRange.Smallest = h.ranges[len(h.ranges)-1].Start + ackRange.Largest = h.ranges[len(h.ranges)-1].End + } + return ackRange +} + +func (h *receivedPacketHistory) IsPotentiallyDuplicate(p protocol.PacketNumber) bool { + if p < h.deletedBelow { + return true + } + // Iterating over the slices is faster than using a binary search (using slices.BinarySearchFunc). + for i := len(h.ranges) - 1; i >= 0; i-- { + if p > h.ranges[i].End { + return false + } + if p <= h.ranges[i].End && p >= h.ranges[i].Start { + return true + } + } + return false +} diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_tracker.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_tracker.go new file mode 100644 index 0000000..d1d26f4 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_tracker.go @@ -0,0 +1,219 @@ +package ackhandler + +import ( + "fmt" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/internal/wire" +) + +// The receivedPacketTracker tracks packets for the Initial and Handshake packet number space. +// Every received packet is acknowledged immediately. +type receivedPacketTracker struct { + ect0, ect1, ecnce uint64 + + packetHistory receivedPacketHistory + + lastAck *wire.AckFrame + hasNewAck bool // true as soon as we received an ack-eliciting new packet +} + +func newReceivedPacketTracker() *receivedPacketTracker { + return &receivedPacketTracker{packetHistory: *newReceivedPacketHistory()} +} + +func (h *receivedPacketTracker) ReceivedPacket(pn protocol.PacketNumber, ecn protocol.ECN, rcvTime time.Time, ackEliciting bool) error { + if isNew := h.packetHistory.ReceivedPacket(pn); !isNew { + return fmt.Errorf("recevedPacketTracker BUG: ReceivedPacket called for old / duplicate packet %d", pn) + } + + //nolint:exhaustive // Only need to count ECT(0), ECT(1) and ECN-CE. + switch ecn { + case protocol.ECT0: + h.ect0++ + case protocol.ECT1: + h.ect1++ + case protocol.ECNCE: + h.ecnce++ + } + if !ackEliciting { + return nil + } + h.hasNewAck = true + return nil +} + +func (h *receivedPacketTracker) GetAckFrame() *wire.AckFrame { + if !h.hasNewAck { + return nil + } + + // This function always returns the same ACK frame struct, filled with the most recent values. + ack := h.lastAck + if ack == nil { + ack = &wire.AckFrame{} + } + ack.Reset() + ack.ECT0 = h.ect0 + ack.ECT1 = h.ect1 + ack.ECNCE = h.ecnce + ack.AckRanges = h.packetHistory.AppendAckRanges(ack.AckRanges) + + h.lastAck = ack + h.hasNewAck = false + return ack +} + +func (h *receivedPacketTracker) IsPotentiallyDuplicate(pn protocol.PacketNumber) bool { + return h.packetHistory.IsPotentiallyDuplicate(pn) +} + +// number of ack-eliciting packets received before sending an ACK +const packetsBeforeAck = 2 + +// The appDataReceivedPacketTracker tracks packets received in the Application Data packet number space. +// It waits until at least 2 packets were received before queueing an ACK, or until the max_ack_delay was reached. +type appDataReceivedPacketTracker struct { + receivedPacketTracker + + largestObservedRcvdTime time.Time + + largestObserved protocol.PacketNumber + ignoreBelow protocol.PacketNumber + + maxAckDelay time.Duration + ackQueued bool // true if we need send a new ACK + + ackElicitingPacketsReceivedSinceLastAck int + ackAlarm time.Time + + logger utils.Logger +} + +func newAppDataReceivedPacketTracker(logger utils.Logger) *appDataReceivedPacketTracker { + h := &appDataReceivedPacketTracker{ + receivedPacketTracker: *newReceivedPacketTracker(), + maxAckDelay: protocol.MaxAckDelay, + logger: logger, + } + return h +} + +func (h *appDataReceivedPacketTracker) ReceivedPacket(pn protocol.PacketNumber, ecn protocol.ECN, rcvTime time.Time, ackEliciting bool) error { + if err := h.receivedPacketTracker.ReceivedPacket(pn, ecn, rcvTime, ackEliciting); err != nil { + return err + } + if pn >= h.largestObserved { + h.largestObserved = pn + h.largestObservedRcvdTime = rcvTime + } + if !ackEliciting { + return nil + } + h.ackElicitingPacketsReceivedSinceLastAck++ + isMissing := h.isMissing(pn) + if !h.ackQueued && h.shouldQueueACK(pn, ecn, isMissing) { + h.ackQueued = true + h.ackAlarm = time.Time{} // cancel the ack alarm + } + if !h.ackQueued { + // No ACK queued, but we'll need to acknowledge the packet after max_ack_delay. + h.ackAlarm = rcvTime.Add(h.maxAckDelay) + if h.logger.Debug() { + h.logger.Debugf("\tSetting ACK timer to max ack delay: %s", h.maxAckDelay) + } + } + return nil +} + +// IgnoreBelow sets a lower limit for acknowledging packets. +// Packets with packet numbers smaller than p will not be acked. +func (h *appDataReceivedPacketTracker) IgnoreBelow(pn protocol.PacketNumber) { + if pn <= h.ignoreBelow { + return + } + h.ignoreBelow = pn + h.packetHistory.DeleteBelow(pn) + if h.logger.Debug() { + h.logger.Debugf("\tIgnoring all packets below %d.", pn) + } +} + +// isMissing says if a packet was reported missing in the last ACK. +func (h *appDataReceivedPacketTracker) isMissing(p protocol.PacketNumber) bool { + if h.lastAck == nil || p < h.ignoreBelow { + return false + } + return p < h.lastAck.LargestAcked() && !h.lastAck.AcksPacket(p) +} + +func (h *appDataReceivedPacketTracker) hasNewMissingPackets() bool { + if h.lastAck == nil { + return false + } + highestRange := h.packetHistory.GetHighestAckRange() + return highestRange.Smallest > h.lastAck.LargestAcked()+1 && highestRange.Len() == 1 +} + +func (h *appDataReceivedPacketTracker) shouldQueueACK(pn protocol.PacketNumber, ecn protocol.ECN, wasMissing bool) bool { + // always acknowledge the first packet + if h.lastAck == nil { + h.logger.Debugf("\tQueueing ACK because the first packet should be acknowledged.") + return true + } + + // Send an ACK if this packet was reported missing in an ACK sent before. + // Ack decimation with reordering relies on the timer to send an ACK, but if + // missing packets we reported in the previous ACK, send an ACK immediately. + if wasMissing { + if h.logger.Debug() { + h.logger.Debugf("\tQueueing ACK because packet %d was missing before.", pn) + } + return true + } + + // send an ACK every 2 ack-eliciting packets + if h.ackElicitingPacketsReceivedSinceLastAck >= packetsBeforeAck { + if h.logger.Debug() { + h.logger.Debugf("\tQueueing ACK because packet %d packets were received after the last ACK (using initial threshold: %d).", h.ackElicitingPacketsReceivedSinceLastAck, packetsBeforeAck) + } + return true + } + + // queue an ACK if there are new missing packets to report + if h.hasNewMissingPackets() { + h.logger.Debugf("\tQueuing ACK because there's a new missing packet to report.") + return true + } + + // queue an ACK if the packet was ECN-CE marked + if ecn == protocol.ECNCE { + h.logger.Debugf("\tQueuing ACK because the packet was ECN-CE marked.") + return true + } + return false +} + +func (h *appDataReceivedPacketTracker) GetAckFrame(now time.Time, onlyIfQueued bool) *wire.AckFrame { + if onlyIfQueued && !h.ackQueued { + if h.ackAlarm.IsZero() || h.ackAlarm.After(now) { + return nil + } + if h.logger.Debug() && !h.ackAlarm.IsZero() { + h.logger.Debugf("Sending ACK because the ACK timer expired.") + } + } + ack := h.receivedPacketTracker.GetAckFrame() + if ack == nil { + return nil + } + ack.DelayTime = max(0, now.Sub(h.largestObservedRcvdTime)) + h.ackQueued = false + h.ackAlarm = time.Time{} + h.ackElicitingPacketsReceivedSinceLastAck = 0 + return ack +} + +func (h *appDataReceivedPacketTracker) GetAlarmTimeout() time.Time { return h.ackAlarm } diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/send_mode.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/send_mode.go new file mode 100644 index 0000000..c03f3a6 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/send_mode.go @@ -0,0 +1,46 @@ +package ackhandler + +import "fmt" + +// The SendMode says what kind of packets can be sent. +type SendMode uint8 + +const ( + // SendNone means that no packets should be sent + SendNone SendMode = iota + // SendAck means an ACK-only packet should be sent + SendAck + // SendPTOInitial means that an Initial probe packet should be sent + SendPTOInitial + // SendPTOHandshake means that a Handshake probe packet should be sent + SendPTOHandshake + // SendPTOAppData means that an Application data probe packet should be sent + SendPTOAppData + // SendPacingLimited means that the pacer doesn't allow sending of a packet right now, + // but will do in a little while. + // The timestamp when sending is allowed again can be obtained via the SentPacketHandler.TimeUntilSend. + SendPacingLimited + // SendAny means that any packet should be sent + SendAny +) + +func (s SendMode) String() string { + switch s { + case SendNone: + return "none" + case SendAck: + return "ack" + case SendPTOInitial: + return "pto (Initial)" + case SendPTOHandshake: + return "pto (Handshake)" + case SendPTOAppData: + return "pto (Application Data)" + case SendAny: + return "any" + case SendPacingLimited: + return "pacing limited" + default: + return fmt.Sprintf("invalid send mode: %d", s) + } +} diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_handler.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_handler.go new file mode 100644 index 0000000..a53be7d --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_handler.go @@ -0,0 +1,1000 @@ +package ackhandler + +import ( + "errors" + "fmt" + "time" + + "github.com/quic-go/quic-go/internal/congestion" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/internal/wire" + "github.com/quic-go/quic-go/logging" +) + +const ( + // Maximum reordering in time space before time based loss detection considers a packet lost. + // Specified as an RTT multiplier. + timeThreshold = 9.0 / 8 + // Maximum reordering in packets before packet threshold loss detection considers a packet lost. + packetThreshold = 3 + // Before validating the client's address, the server won't send more than 3x bytes than it received. + amplificationFactor = 3 + // We use Retry packets to derive an RTT estimate. Make sure we don't set the RTT to a super low value yet. + minRTTAfterRetry = 5 * time.Millisecond + // The PTO duration uses exponential backoff, but is truncated to a maximum value, as allowed by RFC 8961, section 4.4. + maxPTODuration = 60 * time.Second +) + +// Path probe packets are declared lost after this time. +const pathProbePacketLossTimeout = time.Second + +type packetNumberSpace struct { + history sentPacketHistory + pns packetNumberGenerator + + lossTime time.Time + lastAckElicitingPacketTime time.Time + + largestAcked protocol.PacketNumber + largestSent protocol.PacketNumber +} + +func newPacketNumberSpace(initialPN protocol.PacketNumber, isAppData bool) *packetNumberSpace { + var pns packetNumberGenerator + if isAppData { + pns = newSkippingPacketNumberGenerator(initialPN, protocol.SkipPacketInitialPeriod, protocol.SkipPacketMaxPeriod) + } else { + pns = newSequentialPacketNumberGenerator(initialPN) + } + return &packetNumberSpace{ + history: *newSentPacketHistory(isAppData), + pns: pns, + largestSent: protocol.InvalidPacketNumber, + largestAcked: protocol.InvalidPacketNumber, + } +} + +type alarmTimer struct { + Time time.Time + TimerType logging.TimerType + EncryptionLevel protocol.EncryptionLevel +} + +type sentPacketHandler struct { + initialPackets *packetNumberSpace + handshakePackets *packetNumberSpace + appDataPackets *packetNumberSpace + + // Do we know that the peer completed address validation yet? + // Always true for the server. + peerCompletedAddressValidation bool + bytesReceived protocol.ByteCount + bytesSent protocol.ByteCount + // Have we validated the peer's address yet? + // Always true for the client. + peerAddressValidated bool + + handshakeConfirmed bool + + // lowestNotConfirmedAcked is the lowest packet number that we sent an ACK for, but haven't received confirmation, that this ACK actually arrived + // example: we send an ACK for packets 90-100 with packet number 20 + // once we receive an ACK from the peer for packet 20, the lowestNotConfirmedAcked is 101 + // Only applies to the application-data packet number space. + lowestNotConfirmedAcked protocol.PacketNumber + + ackedPackets []*packet // to avoid allocations in detectAndRemoveAckedPackets + + bytesInFlight protocol.ByteCount + + congestion congestion.SendAlgorithmWithDebugInfos + rttStats *utils.RTTStats + + // The number of times a PTO has been sent without receiving an ack. + ptoCount uint32 + ptoMode SendMode + // The number of PTO probe packets that should be sent. + // Only applies to the application-data packet number space. + numProbesToSend int + + // The alarm timeout + alarm alarmTimer + + enableECN bool + ecnTracker ecnHandler + + perspective protocol.Perspective + + tracer *logging.ConnectionTracer + logger utils.Logger +} + +var ( + _ SentPacketHandler = &sentPacketHandler{} + _ sentPacketTracker = &sentPacketHandler{} +) + +// clientAddressValidated indicates whether the address was validated beforehand by an address validation token. +// If the address was validated, the amplification limit doesn't apply. It has no effect for a client. +func newSentPacketHandler( + initialPN protocol.PacketNumber, + initialMaxDatagramSize protocol.ByteCount, + rttStats *utils.RTTStats, + clientAddressValidated bool, + enableECN bool, + pers protocol.Perspective, + tracer *logging.ConnectionTracer, + logger utils.Logger, +) *sentPacketHandler { + congestion := congestion.NewCubicSender( + congestion.DefaultClock{}, + rttStats, + initialMaxDatagramSize, + true, // use Reno + tracer, + ) + + h := &sentPacketHandler{ + peerCompletedAddressValidation: pers == protocol.PerspectiveServer, + peerAddressValidated: pers == protocol.PerspectiveClient || clientAddressValidated, + initialPackets: newPacketNumberSpace(initialPN, false), + handshakePackets: newPacketNumberSpace(0, false), + appDataPackets: newPacketNumberSpace(0, true), + rttStats: rttStats, + congestion: congestion, + perspective: pers, + tracer: tracer, + logger: logger, + } + if enableECN { + h.enableECN = true + h.ecnTracker = newECNTracker(logger, tracer) + } + return h +} + +func (h *sentPacketHandler) removeFromBytesInFlight(p *packet) { + if p.includedInBytesInFlight { + if p.Length > h.bytesInFlight { + panic("negative bytes_in_flight") + } + h.bytesInFlight -= p.Length + p.includedInBytesInFlight = false + } +} + +func (h *sentPacketHandler) DropPackets(encLevel protocol.EncryptionLevel, now time.Time) { + // The server won't await address validation after the handshake is confirmed. + // This applies even if we didn't receive an ACK for a Handshake packet. + if h.perspective == protocol.PerspectiveClient && encLevel == protocol.EncryptionHandshake { + h.peerCompletedAddressValidation = true + } + // remove outstanding packets from bytes_in_flight + if encLevel == protocol.EncryptionInitial || encLevel == protocol.EncryptionHandshake { + pnSpace := h.getPacketNumberSpace(encLevel) + // We might already have dropped this packet number space. + if pnSpace == nil { + return + } + for p := range pnSpace.history.Packets() { + h.removeFromBytesInFlight(p) + } + } + // drop the packet history + //nolint:exhaustive // Not every packet number space can be dropped. + switch encLevel { + case protocol.EncryptionInitial: + h.initialPackets = nil + case protocol.EncryptionHandshake: + // Dropping the handshake packet number space means that the handshake is confirmed, + // see section 4.9.2 of RFC 9001. + h.handshakeConfirmed = true + h.handshakePackets = nil + case protocol.Encryption0RTT: + // This function is only called when 0-RTT is rejected, + // and not when the client drops 0-RTT keys when the handshake completes. + // When 0-RTT is rejected, all application data sent so far becomes invalid. + // Delete the packets from the history and remove them from bytes_in_flight. + for p := range h.appDataPackets.history.Packets() { + if p.EncryptionLevel != protocol.Encryption0RTT && !p.skippedPacket { + break + } + h.removeFromBytesInFlight(p) + h.appDataPackets.history.Remove(p.PacketNumber) + } + default: + panic(fmt.Sprintf("Cannot drop keys for encryption level %s", encLevel)) + } + if h.tracer != nil && h.tracer.UpdatedPTOCount != nil && h.ptoCount != 0 { + h.tracer.UpdatedPTOCount(0) + } + h.ptoCount = 0 + h.numProbesToSend = 0 + h.ptoMode = SendNone + h.setLossDetectionTimer(now) +} + +func (h *sentPacketHandler) ReceivedBytes(n protocol.ByteCount, t time.Time) { + wasAmplificationLimit := h.isAmplificationLimited() + h.bytesReceived += n + if wasAmplificationLimit && !h.isAmplificationLimited() { + h.setLossDetectionTimer(t) + } +} + +func (h *sentPacketHandler) ReceivedPacket(l protocol.EncryptionLevel, t time.Time) { + if h.perspective == protocol.PerspectiveServer && l == protocol.EncryptionHandshake && !h.peerAddressValidated { + h.peerAddressValidated = true + h.setLossDetectionTimer(t) + } +} + +func (h *sentPacketHandler) packetsInFlight() int { + packetsInFlight := h.appDataPackets.history.Len() + if h.handshakePackets != nil { + packetsInFlight += h.handshakePackets.history.Len() + } + if h.initialPackets != nil { + packetsInFlight += h.initialPackets.history.Len() + } + return packetsInFlight +} + +func (h *sentPacketHandler) SentPacket( + t time.Time, + pn, largestAcked protocol.PacketNumber, + streamFrames []StreamFrame, + frames []Frame, + encLevel protocol.EncryptionLevel, + ecn protocol.ECN, + size protocol.ByteCount, + isPathMTUProbePacket bool, + isPathProbePacket bool, +) { + h.bytesSent += size + + pnSpace := h.getPacketNumberSpace(encLevel) + if h.logger.Debug() && (pnSpace.history.HasOutstandingPackets() || pnSpace.history.HasOutstandingPathProbes()) { + for p := max(0, pnSpace.largestSent+1); p < pn; p++ { + h.logger.Debugf("Skipping packet number %d", p) + } + } + + pnSpace.largestSent = pn + isAckEliciting := len(streamFrames) > 0 || len(frames) > 0 + + if isPathProbePacket { + p := getPacket() + p.SendTime = t + p.PacketNumber = pn + p.EncryptionLevel = encLevel + p.Length = size + p.Frames = frames + p.isPathProbePacket = true + pnSpace.history.SentPathProbePacket(p) + h.setLossDetectionTimer(t) + return + } + if isAckEliciting { + pnSpace.lastAckElicitingPacketTime = t + h.bytesInFlight += size + if h.numProbesToSend > 0 { + h.numProbesToSend-- + } + } + h.congestion.OnPacketSent(t, h.bytesInFlight, pn, size, isAckEliciting) + + if encLevel == protocol.Encryption1RTT && h.ecnTracker != nil { + h.ecnTracker.SentPacket(pn, ecn) + } + + if !isAckEliciting { + pnSpace.history.SentNonAckElicitingPacket(pn) + if !h.peerCompletedAddressValidation { + h.setLossDetectionTimer(t) + } + return + } + + p := getPacket() + p.SendTime = t + p.PacketNumber = pn + p.EncryptionLevel = encLevel + p.Length = size + p.LargestAcked = largestAcked + p.StreamFrames = streamFrames + p.Frames = frames + p.IsPathMTUProbePacket = isPathMTUProbePacket + p.includedInBytesInFlight = true + + pnSpace.history.SentAckElicitingPacket(p) + if h.tracer != nil && h.tracer.UpdatedMetrics != nil { + h.tracer.UpdatedMetrics(h.rttStats, h.congestion.GetCongestionWindow(), h.bytesInFlight, h.packetsInFlight()) + } + h.setLossDetectionTimer(t) +} + +func (h *sentPacketHandler) getPacketNumberSpace(encLevel protocol.EncryptionLevel) *packetNumberSpace { + switch encLevel { + case protocol.EncryptionInitial: + return h.initialPackets + case protocol.EncryptionHandshake: + return h.handshakePackets + case protocol.Encryption0RTT, protocol.Encryption1RTT: + return h.appDataPackets + default: + panic("invalid packet number space") + } +} + +func (h *sentPacketHandler) ReceivedAck(ack *wire.AckFrame, encLevel protocol.EncryptionLevel, rcvTime time.Time) (bool /* contained 1-RTT packet */, error) { + pnSpace := h.getPacketNumberSpace(encLevel) + + largestAcked := ack.LargestAcked() + if largestAcked > pnSpace.largestSent { + return false, &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: "received ACK for an unsent packet", + } + } + + // Servers complete address validation when a protected packet is received. + if h.perspective == protocol.PerspectiveClient && !h.peerCompletedAddressValidation && + (encLevel == protocol.EncryptionHandshake || encLevel == protocol.Encryption1RTT) { + h.peerCompletedAddressValidation = true + h.logger.Debugf("Peer doesn't await address validation any longer.") + // Make sure that the timer is reset, even if this ACK doesn't acknowledge any (ack-eliciting) packets. + h.setLossDetectionTimer(rcvTime) + } + + priorInFlight := h.bytesInFlight + ackedPackets, err := h.detectAndRemoveAckedPackets(ack, encLevel) + if err != nil || len(ackedPackets) == 0 { + return false, err + } + // update the RTT, if the largest acked is newly acknowledged + if len(ackedPackets) > 0 { + if p := ackedPackets[len(ackedPackets)-1]; p.PacketNumber == ack.LargestAcked() && !p.isPathProbePacket { + // don't use the ack delay for Initial and Handshake packets + var ackDelay time.Duration + if encLevel == protocol.Encryption1RTT { + ackDelay = min(ack.DelayTime, h.rttStats.MaxAckDelay()) + } + h.rttStats.UpdateRTT(rcvTime.Sub(p.SendTime), ackDelay) + if h.logger.Debug() { + h.logger.Debugf("\tupdated RTT: %s (σ: %s)", h.rttStats.SmoothedRTT(), h.rttStats.MeanDeviation()) + } + h.congestion.MaybeExitSlowStart() + } + } + + // Only inform the ECN tracker about new 1-RTT ACKs if the ACK increases the largest acked. + if encLevel == protocol.Encryption1RTT && h.ecnTracker != nil && largestAcked > pnSpace.largestAcked { + congested := h.ecnTracker.HandleNewlyAcked(ackedPackets, int64(ack.ECT0), int64(ack.ECT1), int64(ack.ECNCE)) + if congested { + h.congestion.OnCongestionEvent(largestAcked, 0, priorInFlight) + } + } + + pnSpace.largestAcked = max(pnSpace.largestAcked, largestAcked) + + h.detectLostPackets(rcvTime, encLevel) + if encLevel == protocol.Encryption1RTT { + h.detectLostPathProbes(rcvTime) + } + var acked1RTTPacket bool + for _, p := range ackedPackets { + if p.includedInBytesInFlight && !p.declaredLost { + h.congestion.OnPacketAcked(p.PacketNumber, p.Length, priorInFlight, rcvTime) + } + if p.EncryptionLevel == protocol.Encryption1RTT { + acked1RTTPacket = true + } + h.removeFromBytesInFlight(p) + if !p.isPathProbePacket { + putPacket(p) + } + } + // After this point, we must not use ackedPackets any longer! + // We've already returned the buffers. + ackedPackets = nil //nolint:ineffassign // This is just to be on the safe side. + + // Reset the pto_count unless the client is unsure if the server has validated the client's address. + if h.peerCompletedAddressValidation { + if h.tracer != nil && h.tracer.UpdatedPTOCount != nil && h.ptoCount != 0 { + h.tracer.UpdatedPTOCount(0) + } + h.ptoCount = 0 + } + h.numProbesToSend = 0 + + if h.tracer != nil && h.tracer.UpdatedMetrics != nil { + h.tracer.UpdatedMetrics(h.rttStats, h.congestion.GetCongestionWindow(), h.bytesInFlight, h.packetsInFlight()) + } + + h.setLossDetectionTimer(rcvTime) + return acked1RTTPacket, nil +} + +func (h *sentPacketHandler) GetLowestPacketNotConfirmedAcked() protocol.PacketNumber { + return h.lowestNotConfirmedAcked +} + +// Packets are returned in ascending packet number order. +func (h *sentPacketHandler) detectAndRemoveAckedPackets(ack *wire.AckFrame, encLevel protocol.EncryptionLevel) ([]*packet, error) { + pnSpace := h.getPacketNumberSpace(encLevel) + h.ackedPackets = h.ackedPackets[:0] + ackRangeIndex := 0 + lowestAcked := ack.LowestAcked() + largestAcked := ack.LargestAcked() + for p := range pnSpace.history.Packets() { + // ignore packets below the lowest acked + if p.PacketNumber < lowestAcked { + continue + } + if p.PacketNumber > largestAcked { + break + } + + if ack.HasMissingRanges() { + ackRange := ack.AckRanges[len(ack.AckRanges)-1-ackRangeIndex] + + for p.PacketNumber > ackRange.Largest && ackRangeIndex < len(ack.AckRanges)-1 { + ackRangeIndex++ + ackRange = ack.AckRanges[len(ack.AckRanges)-1-ackRangeIndex] + } + + if p.PacketNumber < ackRange.Smallest { // packet not contained in ACK range + continue + } + if p.PacketNumber > ackRange.Largest { + return nil, fmt.Errorf("BUG: ackhandler would have acked wrong packet %d, while evaluating range %d -> %d", p.PacketNumber, ackRange.Smallest, ackRange.Largest) + } + } + if p.skippedPacket { + return nil, &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: fmt.Sprintf("received an ACK for skipped packet number: %d (%s)", p.PacketNumber, encLevel), + } + } + if p.isPathProbePacket { + probePacket := pnSpace.history.RemovePathProbe(p.PacketNumber) + // the probe packet might already have been declared lost + if probePacket != nil { + h.ackedPackets = append(h.ackedPackets, probePacket) + } + continue + } + h.ackedPackets = append(h.ackedPackets, p) + } + if h.logger.Debug() && len(h.ackedPackets) > 0 { + pns := make([]protocol.PacketNumber, len(h.ackedPackets)) + for i, p := range h.ackedPackets { + pns[i] = p.PacketNumber + } + h.logger.Debugf("\tnewly acked packets (%d): %d", len(pns), pns) + } + + for _, p := range h.ackedPackets { + if p.LargestAcked != protocol.InvalidPacketNumber && encLevel == protocol.Encryption1RTT { + h.lowestNotConfirmedAcked = max(h.lowestNotConfirmedAcked, p.LargestAcked+1) + } + + for _, f := range p.Frames { + if f.Handler != nil { + f.Handler.OnAcked(f.Frame) + } + } + for _, f := range p.StreamFrames { + if f.Handler != nil { + f.Handler.OnAcked(f.Frame) + } + } + if err := pnSpace.history.Remove(p.PacketNumber); err != nil { + return nil, err + } + if h.tracer != nil && h.tracer.AcknowledgedPacket != nil { + h.tracer.AcknowledgedPacket(encLevel, p.PacketNumber) + } + } + return h.ackedPackets, nil +} + +func (h *sentPacketHandler) getLossTimeAndSpace() (time.Time, protocol.EncryptionLevel) { + var encLevel protocol.EncryptionLevel + var lossTime time.Time + + if h.initialPackets != nil { + lossTime = h.initialPackets.lossTime + encLevel = protocol.EncryptionInitial + } + if h.handshakePackets != nil && (lossTime.IsZero() || (!h.handshakePackets.lossTime.IsZero() && h.handshakePackets.lossTime.Before(lossTime))) { + lossTime = h.handshakePackets.lossTime + encLevel = protocol.EncryptionHandshake + } + if lossTime.IsZero() || (!h.appDataPackets.lossTime.IsZero() && h.appDataPackets.lossTime.Before(lossTime)) { + lossTime = h.appDataPackets.lossTime + encLevel = protocol.Encryption1RTT + } + return lossTime, encLevel +} + +func (h *sentPacketHandler) getScaledPTO(includeMaxAckDelay bool) time.Duration { + pto := h.rttStats.PTO(includeMaxAckDelay) << h.ptoCount + if pto > maxPTODuration || pto <= 0 { + return maxPTODuration + } + return pto +} + +// same logic as getLossTimeAndSpace, but for lastAckElicitingPacketTime instead of lossTime +func (h *sentPacketHandler) getPTOTimeAndSpace(now time.Time) (pto time.Time, encLevel protocol.EncryptionLevel) { + // We only send application data probe packets once the handshake is confirmed, + // because before that, we don't have the keys to decrypt ACKs sent in 1-RTT packets. + if !h.handshakeConfirmed && !h.hasOutstandingCryptoPackets() { + if h.peerCompletedAddressValidation { + return + } + t := now.Add(h.getScaledPTO(false)) + if h.initialPackets != nil { + return t, protocol.EncryptionInitial + } + return t, protocol.EncryptionHandshake + } + + if h.initialPackets != nil && h.initialPackets.history.HasOutstandingPackets() && + !h.initialPackets.lastAckElicitingPacketTime.IsZero() { + encLevel = protocol.EncryptionInitial + if t := h.initialPackets.lastAckElicitingPacketTime; !t.IsZero() { + pto = t.Add(h.getScaledPTO(false)) + } + } + if h.handshakePackets != nil && h.handshakePackets.history.HasOutstandingPackets() && + !h.handshakePackets.lastAckElicitingPacketTime.IsZero() { + t := h.handshakePackets.lastAckElicitingPacketTime.Add(h.getScaledPTO(false)) + if pto.IsZero() || (!t.IsZero() && t.Before(pto)) { + pto = t + encLevel = protocol.EncryptionHandshake + } + } + if h.handshakeConfirmed && h.appDataPackets.history.HasOutstandingPackets() && + !h.appDataPackets.lastAckElicitingPacketTime.IsZero() { + t := h.appDataPackets.lastAckElicitingPacketTime.Add(h.getScaledPTO(true)) + if pto.IsZero() || (!t.IsZero() && t.Before(pto)) { + pto = t + encLevel = protocol.Encryption1RTT + } + } + return pto, encLevel +} + +func (h *sentPacketHandler) hasOutstandingCryptoPackets() bool { + if h.initialPackets != nil && h.initialPackets.history.HasOutstandingPackets() { + return true + } + if h.handshakePackets != nil && h.handshakePackets.history.HasOutstandingPackets() { + return true + } + return false +} + +func (h *sentPacketHandler) setLossDetectionTimer(now time.Time) { + oldAlarm := h.alarm // only needed in case tracing is enabled + newAlarm := h.lossDetectionTime(now) + h.alarm = newAlarm + + hasAlarm := !newAlarm.Time.IsZero() + if !hasAlarm && !oldAlarm.Time.IsZero() { + h.logger.Debugf("Canceling loss detection timer.") + if h.tracer != nil && h.tracer.LossTimerCanceled != nil { + h.tracer.LossTimerCanceled() + } + } + + if hasAlarm && h.tracer != nil && h.tracer.SetLossTimer != nil && newAlarm != oldAlarm { + h.tracer.SetLossTimer(newAlarm.TimerType, newAlarm.EncryptionLevel, newAlarm.Time) + } +} + +func (h *sentPacketHandler) lossDetectionTime(now time.Time) alarmTimer { + // cancel the alarm if no packets are outstanding + if h.peerCompletedAddressValidation && !h.hasOutstandingCryptoPackets() && + !h.appDataPackets.history.HasOutstandingPackets() && !h.appDataPackets.history.HasOutstandingPathProbes() { + return alarmTimer{} + } + + // cancel the alarm if amplification limited + if h.isAmplificationLimited() { + return alarmTimer{} + } + + var pathProbeLossTime time.Time + if h.appDataPackets.history.HasOutstandingPathProbes() { + if p := h.appDataPackets.history.FirstOutstandingPathProbe(); p != nil { + pathProbeLossTime = p.SendTime.Add(pathProbePacketLossTimeout) + } + } + + // early retransmit timer or time loss detection + lossTime, encLevel := h.getLossTimeAndSpace() + if !lossTime.IsZero() && (pathProbeLossTime.IsZero() || lossTime.Before(pathProbeLossTime)) { + return alarmTimer{ + Time: lossTime, + TimerType: logging.TimerTypeACK, + EncryptionLevel: encLevel, + } + } + ptoTime, encLevel := h.getPTOTimeAndSpace(now) + if !ptoTime.IsZero() && (pathProbeLossTime.IsZero() || ptoTime.Before(pathProbeLossTime)) { + return alarmTimer{ + Time: ptoTime, + TimerType: logging.TimerTypePTO, + EncryptionLevel: encLevel, + } + } + if !pathProbeLossTime.IsZero() { + return alarmTimer{ + Time: pathProbeLossTime, + TimerType: logging.TimerTypePathProbe, + EncryptionLevel: protocol.Encryption1RTT, + } + } + return alarmTimer{} +} + +func (h *sentPacketHandler) detectLostPathProbes(now time.Time) { + if !h.appDataPackets.history.HasOutstandingPathProbes() { + return + } + lossTime := now.Add(-pathProbePacketLossTimeout) + // RemovePathProbe cannot be called while iterating. + var lostPathProbes []*packet + for p := range h.appDataPackets.history.PathProbes() { + if !p.SendTime.After(lossTime) { + lostPathProbes = append(lostPathProbes, p) + } + } + for _, p := range lostPathProbes { + for _, f := range p.Frames { + f.Handler.OnLost(f.Frame) + } + h.appDataPackets.history.RemovePathProbe(p.PacketNumber) + } +} + +func (h *sentPacketHandler) detectLostPackets(now time.Time, encLevel protocol.EncryptionLevel) { + pnSpace := h.getPacketNumberSpace(encLevel) + pnSpace.lossTime = time.Time{} + + maxRTT := float64(max(h.rttStats.LatestRTT(), h.rttStats.SmoothedRTT())) + lossDelay := time.Duration(timeThreshold * maxRTT) + + // Minimum time of granularity before packets are deemed lost. + lossDelay = max(lossDelay, protocol.TimerGranularity) + + // Packets sent before this time are deemed lost. + lostSendTime := now.Add(-lossDelay) + + priorInFlight := h.bytesInFlight + for p := range pnSpace.history.Packets() { + if p.PacketNumber > pnSpace.largestAcked { + break + } + + isRegularPacket := !p.skippedPacket && !p.isPathProbePacket + var packetLost bool + if !p.SendTime.After(lostSendTime) { + packetLost = true + if isRegularPacket { + if h.logger.Debug() { + h.logger.Debugf("\tlost packet %d (time threshold)", p.PacketNumber) + } + if h.tracer != nil && h.tracer.LostPacket != nil { + h.tracer.LostPacket(p.EncryptionLevel, p.PacketNumber, logging.PacketLossTimeThreshold) + } + } + } else if pnSpace.largestAcked >= p.PacketNumber+packetThreshold { + packetLost = true + if isRegularPacket { + if h.logger.Debug() { + h.logger.Debugf("\tlost packet %d (reordering threshold)", p.PacketNumber) + } + if h.tracer != nil && h.tracer.LostPacket != nil { + h.tracer.LostPacket(p.EncryptionLevel, p.PacketNumber, logging.PacketLossReorderingThreshold) + } + } + } else if pnSpace.lossTime.IsZero() { + // Note: This conditional is only entered once per call + lossTime := p.SendTime.Add(lossDelay) + if h.logger.Debug() { + h.logger.Debugf("\tsetting loss timer for packet %d (%s) to %s (in %s)", p.PacketNumber, encLevel, lossDelay, lossTime) + } + pnSpace.lossTime = lossTime + } + if packetLost { + pnSpace.history.DeclareLost(p.PacketNumber) + if isRegularPacket { + // the bytes in flight need to be reduced no matter if the frames in this packet will be retransmitted + h.removeFromBytesInFlight(p) + h.queueFramesForRetransmission(p) + if !p.IsPathMTUProbePacket { + h.congestion.OnCongestionEvent(p.PacketNumber, p.Length, priorInFlight) + } + if encLevel == protocol.Encryption1RTT && h.ecnTracker != nil { + h.ecnTracker.LostPacket(p.PacketNumber) + } + } + } + } +} + +func (h *sentPacketHandler) OnLossDetectionTimeout(now time.Time) error { + defer h.setLossDetectionTimer(now) + + if h.handshakeConfirmed { + h.detectLostPathProbes(now) + } + + earliestLossTime, encLevel := h.getLossTimeAndSpace() + if !earliestLossTime.IsZero() { + if h.logger.Debug() { + h.logger.Debugf("Loss detection alarm fired in loss timer mode. Loss time: %s", earliestLossTime) + } + if h.tracer != nil && h.tracer.LossTimerExpired != nil { + h.tracer.LossTimerExpired(logging.TimerTypeACK, encLevel) + } + // Early retransmit or time loss detection + h.detectLostPackets(now, encLevel) + return nil + } + + // PTO + // When all outstanding are acknowledged, the alarm is canceled in setLossDetectionTimer. + // However, there's no way to reset the timer in the connection. + // When OnLossDetectionTimeout is called, we therefore need to make sure that there are + // actually packets outstanding. + if h.bytesInFlight == 0 && !h.peerCompletedAddressValidation { + h.ptoCount++ + h.numProbesToSend++ + if h.initialPackets != nil { + h.ptoMode = SendPTOInitial + } else if h.handshakePackets != nil { + h.ptoMode = SendPTOHandshake + } else { + return errors.New("sentPacketHandler BUG: PTO fired, but bytes_in_flight is 0 and Initial and Handshake already dropped") + } + return nil + } + + ptoTime, encLevel := h.getPTOTimeAndSpace(now) + if ptoTime.IsZero() { + return nil + } + ps := h.getPacketNumberSpace(encLevel) + if !ps.history.HasOutstandingPackets() && !ps.history.HasOutstandingPathProbes() && !h.peerCompletedAddressValidation { + return nil + } + h.ptoCount++ + if h.logger.Debug() { + h.logger.Debugf("Loss detection alarm for %s fired in PTO mode. PTO count: %d", encLevel, h.ptoCount) + } + if h.tracer != nil { + if h.tracer.LossTimerExpired != nil { + h.tracer.LossTimerExpired(logging.TimerTypePTO, encLevel) + } + if h.tracer.UpdatedPTOCount != nil { + h.tracer.UpdatedPTOCount(h.ptoCount) + } + } + h.numProbesToSend += 2 + //nolint:exhaustive // We never arm a PTO timer for 0-RTT packets. + switch encLevel { + case protocol.EncryptionInitial: + h.ptoMode = SendPTOInitial + case protocol.EncryptionHandshake: + h.ptoMode = SendPTOHandshake + case protocol.Encryption1RTT: + // skip a packet number in order to elicit an immediate ACK + pn := h.PopPacketNumber(protocol.Encryption1RTT) + h.getPacketNumberSpace(protocol.Encryption1RTT).history.SkippedPacket(pn) + h.ptoMode = SendPTOAppData + default: + return fmt.Errorf("PTO timer in unexpected encryption level: %s", encLevel) + } + return nil +} + +func (h *sentPacketHandler) GetLossDetectionTimeout() time.Time { + return h.alarm.Time +} + +func (h *sentPacketHandler) ECNMode(isShortHeaderPacket bool) protocol.ECN { + if !h.enableECN { + return protocol.ECNUnsupported + } + if !isShortHeaderPacket { + return protocol.ECNNon + } + return h.ecnTracker.Mode() +} + +func (h *sentPacketHandler) PeekPacketNumber(encLevel protocol.EncryptionLevel) (protocol.PacketNumber, protocol.PacketNumberLen) { + pnSpace := h.getPacketNumberSpace(encLevel) + pn := pnSpace.pns.Peek() + // See section 17.1 of RFC 9000. + return pn, protocol.PacketNumberLengthForHeader(pn, pnSpace.largestAcked) +} + +func (h *sentPacketHandler) PopPacketNumber(encLevel protocol.EncryptionLevel) protocol.PacketNumber { + pnSpace := h.getPacketNumberSpace(encLevel) + skipped, pn := pnSpace.pns.Pop() + if skipped { + skippedPN := pn - 1 + pnSpace.history.SkippedPacket(skippedPN) + if h.logger.Debug() { + h.logger.Debugf("Skipping packet number %d", skippedPN) + } + } + return pn +} + +func (h *sentPacketHandler) SendMode(now time.Time) SendMode { + numTrackedPackets := h.appDataPackets.history.Len() + if h.initialPackets != nil { + numTrackedPackets += h.initialPackets.history.Len() + } + if h.handshakePackets != nil { + numTrackedPackets += h.handshakePackets.history.Len() + } + + if h.isAmplificationLimited() { + h.logger.Debugf("Amplification window limited. Received %d bytes, already sent out %d bytes", h.bytesReceived, h.bytesSent) + return SendNone + } + // Don't send any packets if we're keeping track of the maximum number of packets. + // Note that since MaxOutstandingSentPackets is smaller than MaxTrackedSentPackets, + // we will stop sending out new data when reaching MaxOutstandingSentPackets, + // but still allow sending of retransmissions and ACKs. + if numTrackedPackets >= protocol.MaxTrackedSentPackets { + if h.logger.Debug() { + h.logger.Debugf("Limited by the number of tracked packets: tracking %d packets, maximum %d", numTrackedPackets, protocol.MaxTrackedSentPackets) + } + return SendNone + } + if h.numProbesToSend > 0 { + return h.ptoMode + } + // Only send ACKs if we're congestion limited. + if !h.congestion.CanSend(h.bytesInFlight) { + if h.logger.Debug() { + h.logger.Debugf("Congestion limited: bytes in flight %d, window %d", h.bytesInFlight, h.congestion.GetCongestionWindow()) + } + return SendAck + } + if numTrackedPackets >= protocol.MaxOutstandingSentPackets { + if h.logger.Debug() { + h.logger.Debugf("Max outstanding limited: tracking %d packets, maximum: %d", numTrackedPackets, protocol.MaxOutstandingSentPackets) + } + return SendAck + } + if !h.congestion.HasPacingBudget(now) { + return SendPacingLimited + } + return SendAny +} + +func (h *sentPacketHandler) TimeUntilSend() time.Time { + return h.congestion.TimeUntilSend(h.bytesInFlight) +} + +func (h *sentPacketHandler) SetMaxDatagramSize(s protocol.ByteCount) { + h.congestion.SetMaxDatagramSize(s) +} + +func (h *sentPacketHandler) isAmplificationLimited() bool { + if h.peerAddressValidated { + return false + } + return h.bytesSent >= amplificationFactor*h.bytesReceived +} + +func (h *sentPacketHandler) QueueProbePacket(encLevel protocol.EncryptionLevel) bool { + pnSpace := h.getPacketNumberSpace(encLevel) + p := pnSpace.history.FirstOutstanding() + if p == nil { + return false + } + h.queueFramesForRetransmission(p) + // TODO: don't declare the packet lost here. + // Keep track of acknowledged frames instead. + h.removeFromBytesInFlight(p) + pnSpace.history.DeclareLost(p.PacketNumber) + return true +} + +func (h *sentPacketHandler) queueFramesForRetransmission(p *packet) { + if len(p.Frames) == 0 && len(p.StreamFrames) == 0 { + panic("no frames") + } + for _, f := range p.Frames { + if f.Handler != nil { + f.Handler.OnLost(f.Frame) + } + } + for _, f := range p.StreamFrames { + if f.Handler != nil { + f.Handler.OnLost(f.Frame) + } + } + p.StreamFrames = nil + p.Frames = nil +} + +func (h *sentPacketHandler) ResetForRetry(now time.Time) { + h.bytesInFlight = 0 + var firstPacketSendTime time.Time + for p := range h.initialPackets.history.Packets() { + if firstPacketSendTime.IsZero() { + firstPacketSendTime = p.SendTime + } + if !p.declaredLost && !p.skippedPacket { + h.queueFramesForRetransmission(p) + } + } + // All application data packets sent at this point are 0-RTT packets. + // In the case of a Retry, we can assume that the server dropped all of them. + for p := range h.appDataPackets.history.Packets() { + if !p.declaredLost && !p.skippedPacket { + h.queueFramesForRetransmission(p) + } + } + + // Only use the Retry to estimate the RTT if we didn't send any retransmission for the Initial. + // Otherwise, we don't know which Initial the Retry was sent in response to. + if h.ptoCount == 0 { + // Don't set the RTT to a value lower than 5ms here. + h.rttStats.UpdateRTT(max(minRTTAfterRetry, now.Sub(firstPacketSendTime)), 0) + if h.logger.Debug() { + h.logger.Debugf("\tupdated RTT: %s (σ: %s)", h.rttStats.SmoothedRTT(), h.rttStats.MeanDeviation()) + } + if h.tracer != nil && h.tracer.UpdatedMetrics != nil { + h.tracer.UpdatedMetrics(h.rttStats, h.congestion.GetCongestionWindow(), h.bytesInFlight, h.packetsInFlight()) + } + } + h.initialPackets = newPacketNumberSpace(h.initialPackets.pns.Peek(), false) + h.appDataPackets = newPacketNumberSpace(h.appDataPackets.pns.Peek(), true) + oldAlarm := h.alarm + h.alarm = alarmTimer{} + if h.tracer != nil { + if h.tracer.UpdatedPTOCount != nil { + h.tracer.UpdatedPTOCount(0) + } + if !oldAlarm.Time.IsZero() && h.tracer.LossTimerCanceled != nil { + h.tracer.LossTimerCanceled() + } + } + h.ptoCount = 0 +} + +func (h *sentPacketHandler) MigratedPath(now time.Time, initialMaxDatagramSize protocol.ByteCount) { + h.rttStats.ResetForPathMigration() + for p := range h.appDataPackets.history.Packets() { + h.appDataPackets.history.DeclareLost(p.PacketNumber) + if !p.skippedPacket && !p.isPathProbePacket { + h.removeFromBytesInFlight(p) + h.queueFramesForRetransmission(p) + } + } + for p := range h.appDataPackets.history.PathProbes() { + h.appDataPackets.history.RemovePathProbe(p.PacketNumber) + } + h.congestion = congestion.NewCubicSender( + congestion.DefaultClock{}, + h.rttStats, + initialMaxDatagramSize, + true, // use Reno + h.tracer, + ) + h.setLossDetectionTimer(now) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_history.go b/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_history.go new file mode 100644 index 0000000..0aabc6d --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_history.go @@ -0,0 +1,230 @@ +package ackhandler + +import ( + "fmt" + "iter" + + "github.com/quic-go/quic-go/internal/protocol" +) + +type sentPacketHistory struct { + packets []*packet + pathProbePackets []*packet + + numOutstanding int + + highestPacketNumber protocol.PacketNumber +} + +func newSentPacketHistory(isAppData bool) *sentPacketHistory { + h := &sentPacketHistory{ + highestPacketNumber: protocol.InvalidPacketNumber, + } + if isAppData { + h.packets = make([]*packet, 0, 32) + } else { + h.packets = make([]*packet, 0, 6) + } + return h +} + +func (h *sentPacketHistory) checkSequentialPacketNumberUse(pn protocol.PacketNumber) { + if h.highestPacketNumber != protocol.InvalidPacketNumber { + if pn != h.highestPacketNumber+1 { + panic("non-sequential packet number use") + } + } + h.highestPacketNumber = pn +} + +func (h *sentPacketHistory) SkippedPacket(pn protocol.PacketNumber) { + h.checkSequentialPacketNumberUse(pn) + h.packets = append(h.packets, &packet{ + PacketNumber: pn, + skippedPacket: true, + }) +} + +func (h *sentPacketHistory) SentNonAckElicitingPacket(pn protocol.PacketNumber) { + h.checkSequentialPacketNumberUse(pn) + if len(h.packets) > 0 { + h.packets = append(h.packets, nil) + } +} + +func (h *sentPacketHistory) SentAckElicitingPacket(p *packet) { + h.checkSequentialPacketNumberUse(p.PacketNumber) + h.packets = append(h.packets, p) + if p.outstanding() { + h.numOutstanding++ + } +} + +func (h *sentPacketHistory) SentPathProbePacket(p *packet) { + h.checkSequentialPacketNumberUse(p.PacketNumber) + h.packets = append(h.packets, &packet{ + PacketNumber: p.PacketNumber, + isPathProbePacket: true, + }) + h.pathProbePackets = append(h.pathProbePackets, p) +} + +func (h *sentPacketHistory) Packets() iter.Seq[*packet] { + return func(yield func(*packet) bool) { + for _, p := range h.packets { + if p == nil { + continue + } + if !yield(p) { + return + } + } + } +} + +func (h *sentPacketHistory) PathProbes() iter.Seq[*packet] { + return func(yield func(*packet) bool) { + for _, p := range h.pathProbePackets { + if !yield(p) { + return + } + } + } +} + +// FirstOutstanding returns the first outstanding packet. +func (h *sentPacketHistory) FirstOutstanding() *packet { + if !h.HasOutstandingPackets() { + return nil + } + for _, p := range h.packets { + if p != nil && p.outstanding() { + return p + } + } + return nil +} + +// FirstOutstandingPathProbe returns the first outstanding path probe packet +func (h *sentPacketHistory) FirstOutstandingPathProbe() *packet { + if len(h.pathProbePackets) == 0 { + return nil + } + return h.pathProbePackets[0] +} + +func (h *sentPacketHistory) Len() int { + return len(h.packets) +} + +func (h *sentPacketHistory) Remove(pn protocol.PacketNumber) error { + idx, ok := h.getIndex(pn) + if !ok { + return fmt.Errorf("packet %d not found in sent packet history", pn) + } + p := h.packets[idx] + if p.outstanding() { + h.numOutstanding-- + if h.numOutstanding < 0 { + panic("negative number of outstanding packets") + } + } + h.packets[idx] = nil + // clean up all skipped packets directly before this packet number + for idx > 0 { + idx-- + p := h.packets[idx] + if p == nil || !p.skippedPacket { + break + } + h.packets[idx] = nil + } + if idx == 0 { + h.cleanupStart() + } + if len(h.packets) > 0 && h.packets[0] == nil { + panic("remove failed") + } + return nil +} + +// RemovePathProbe removes a path probe packet. +// It scales O(N), but that's ok, since we don't expect to send many path probe packets. +// It is not valid to call this function in IteratePathProbes. +func (h *sentPacketHistory) RemovePathProbe(pn protocol.PacketNumber) *packet { + var packetToDelete *packet + idx := -1 + for i, p := range h.pathProbePackets { + if p.PacketNumber == pn { + packetToDelete = p + idx = i + break + } + } + if idx != -1 { + // don't use slices.Delete, because it zeros the deleted element + copy(h.pathProbePackets[idx:], h.pathProbePackets[idx+1:]) + h.pathProbePackets = h.pathProbePackets[:len(h.pathProbePackets)-1] + } + return packetToDelete +} + +// getIndex gets the index of packet p in the packets slice. +func (h *sentPacketHistory) getIndex(p protocol.PacketNumber) (int, bool) { + if len(h.packets) == 0 { + return 0, false + } + first := h.packets[0].PacketNumber + if p < first { + return 0, false + } + index := int(p - first) + if index > len(h.packets)-1 { + return 0, false + } + return index, true +} + +func (h *sentPacketHistory) HasOutstandingPackets() bool { + return h.numOutstanding > 0 +} + +func (h *sentPacketHistory) HasOutstandingPathProbes() bool { + return len(h.pathProbePackets) > 0 +} + +// delete all nil entries at the beginning of the packets slice +func (h *sentPacketHistory) cleanupStart() { + for i, p := range h.packets { + if p != nil { + h.packets = h.packets[i:] + return + } + } + h.packets = h.packets[:0] +} + +func (h *sentPacketHistory) LowestPacketNumber() protocol.PacketNumber { + if len(h.packets) == 0 { + return protocol.InvalidPacketNumber + } + return h.packets[0].PacketNumber +} + +func (h *sentPacketHistory) DeclareLost(pn protocol.PacketNumber) { + idx, ok := h.getIndex(pn) + if !ok { + return + } + p := h.packets[idx] + if p.outstanding() { + h.numOutstanding-- + if h.numOutstanding < 0 { + panic("negative number of outstanding packets") + } + } + h.packets[idx] = nil + if idx == 0 { + h.cleanupStart() + } +} diff --git a/vendor/github.com/quic-go/quic-go/internal/congestion/bandwidth.go b/vendor/github.com/quic-go/quic-go/internal/congestion/bandwidth.go new file mode 100644 index 0000000..1d03abb --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/congestion/bandwidth.go @@ -0,0 +1,25 @@ +package congestion + +import ( + "math" + "time" + + "github.com/quic-go/quic-go/internal/protocol" +) + +// Bandwidth of a connection +type Bandwidth uint64 + +const infBandwidth Bandwidth = math.MaxUint64 + +const ( + // BitsPerSecond is 1 bit per second + BitsPerSecond Bandwidth = 1 + // BytesPerSecond is 1 byte per second + BytesPerSecond = 8 * BitsPerSecond +) + +// BandwidthFromDelta calculates the bandwidth from a number of bytes and a time delta +func BandwidthFromDelta(bytes protocol.ByteCount, delta time.Duration) Bandwidth { + return Bandwidth(bytes) * Bandwidth(time.Second) / Bandwidth(delta) * BytesPerSecond +} diff --git a/vendor/github.com/quic-go/quic-go/internal/congestion/clock.go b/vendor/github.com/quic-go/quic-go/internal/congestion/clock.go new file mode 100644 index 0000000..405fae7 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/congestion/clock.go @@ -0,0 +1,18 @@ +package congestion + +import "time" + +// A Clock returns the current time +type Clock interface { + Now() time.Time +} + +// DefaultClock implements the Clock interface using the Go stdlib clock. +type DefaultClock struct{} + +var _ Clock = DefaultClock{} + +// Now gets the current time +func (DefaultClock) Now() time.Time { + return time.Now() +} diff --git a/vendor/github.com/quic-go/quic-go/internal/congestion/cubic.go b/vendor/github.com/quic-go/quic-go/internal/congestion/cubic.go new file mode 100644 index 0000000..b35d40d --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/congestion/cubic.go @@ -0,0 +1,213 @@ +package congestion + +import ( + "math" + "time" + + "github.com/quic-go/quic-go/internal/protocol" +) + +// This cubic implementation is based on the one found in Chromiums's QUIC +// implementation, in the files net/quic/congestion_control/cubic.{hh,cc}. + +// Constants based on TCP defaults. +// The following constants are in 2^10 fractions of a second instead of ms to +// allow a 10 shift right to divide. + +// 1024*1024^3 (first 1024 is from 0.100^3) +// where 0.100 is 100 ms which is the scaling round trip time. +const ( + cubeScale = 40 + cubeCongestionWindowScale = 410 + cubeFactor = 1 << cubeScale / cubeCongestionWindowScale / maxDatagramSize + // TODO: when re-enabling cubic, make sure to use the actual packet size here + maxDatagramSize = protocol.ByteCount(protocol.InitialPacketSize) +) + +const defaultNumConnections = 1 + +// Default Cubic backoff factor +const beta float32 = 0.7 + +// Additional backoff factor when loss occurs in the concave part of the Cubic +// curve. This additional backoff factor is expected to give up bandwidth to +// new concurrent flows and speed up convergence. +const betaLastMax float32 = 0.85 + +// Cubic implements the cubic algorithm from TCP +type Cubic struct { + clock Clock + + // Number of connections to simulate. + numConnections int + + // Time when this cycle started, after last loss event. + epoch time.Time + + // Max congestion window used just before last loss event. + // Note: to improve fairness to other streams an additional back off is + // applied to this value if the new value is below our latest value. + lastMaxCongestionWindow protocol.ByteCount + + // Number of acked bytes since the cycle started (epoch). + ackedBytesCount protocol.ByteCount + + // TCP Reno equivalent congestion window in packets. + estimatedTCPcongestionWindow protocol.ByteCount + + // Origin point of cubic function. + originPointCongestionWindow protocol.ByteCount + + // Time to origin point of cubic function in 2^10 fractions of a second. + timeToOriginPoint uint32 + + // Last congestion window in packets computed by cubic function. + lastTargetCongestionWindow protocol.ByteCount +} + +// NewCubic returns a new Cubic instance +func NewCubic(clock Clock) *Cubic { + c := &Cubic{ + clock: clock, + numConnections: defaultNumConnections, + } + c.Reset() + return c +} + +// Reset is called after a timeout to reset the cubic state +func (c *Cubic) Reset() { + c.epoch = time.Time{} + c.lastMaxCongestionWindow = 0 + c.ackedBytesCount = 0 + c.estimatedTCPcongestionWindow = 0 + c.originPointCongestionWindow = 0 + c.timeToOriginPoint = 0 + c.lastTargetCongestionWindow = 0 +} + +func (c *Cubic) alpha() float32 { + // TCPFriendly alpha is described in Section 3.3 of the CUBIC paper. Note that + // beta here is a cwnd multiplier, and is equal to 1-beta from the paper. + // We derive the equivalent alpha for an N-connection emulation as: + b := c.beta() + return 3 * float32(c.numConnections) * float32(c.numConnections) * (1 - b) / (1 + b) +} + +func (c *Cubic) beta() float32 { + // kNConnectionBeta is the backoff factor after loss for our N-connection + // emulation, which emulates the effective backoff of an ensemble of N + // TCP-Reno connections on a single loss event. The effective multiplier is + // computed as: + return (float32(c.numConnections) - 1 + beta) / float32(c.numConnections) +} + +func (c *Cubic) betaLastMax() float32 { + // betaLastMax is the additional backoff factor after loss for our + // N-connection emulation, which emulates the additional backoff of + // an ensemble of N TCP-Reno connections on a single loss event. The + // effective multiplier is computed as: + return (float32(c.numConnections) - 1 + betaLastMax) / float32(c.numConnections) +} + +// OnApplicationLimited is called on ack arrival when sender is unable to use +// the available congestion window. Resets Cubic state during quiescence. +func (c *Cubic) OnApplicationLimited() { + // When sender is not using the available congestion window, the window does + // not grow. But to be RTT-independent, Cubic assumes that the sender has been + // using the entire window during the time since the beginning of the current + // "epoch" (the end of the last loss recovery period). Since + // application-limited periods break this assumption, we reset the epoch when + // in such a period. This reset effectively freezes congestion window growth + // through application-limited periods and allows Cubic growth to continue + // when the entire window is being used. + c.epoch = time.Time{} +} + +// CongestionWindowAfterPacketLoss computes a new congestion window to use after +// a loss event. Returns the new congestion window in packets. The new +// congestion window is a multiplicative decrease of our current window. +func (c *Cubic) CongestionWindowAfterPacketLoss(currentCongestionWindow protocol.ByteCount) protocol.ByteCount { + if currentCongestionWindow+maxDatagramSize < c.lastMaxCongestionWindow { + // We never reached the old max, so assume we are competing with another + // flow. Use our extra back off factor to allow the other flow to go up. + c.lastMaxCongestionWindow = protocol.ByteCount(c.betaLastMax() * float32(currentCongestionWindow)) + } else { + c.lastMaxCongestionWindow = currentCongestionWindow + } + c.epoch = time.Time{} // Reset time. + return protocol.ByteCount(float32(currentCongestionWindow) * c.beta()) +} + +// CongestionWindowAfterAck computes a new congestion window to use after a received ACK. +// Returns the new congestion window in packets. The new congestion window +// follows a cubic function that depends on the time passed since last +// packet loss. +func (c *Cubic) CongestionWindowAfterAck( + ackedBytes protocol.ByteCount, + currentCongestionWindow protocol.ByteCount, + delayMin time.Duration, + eventTime time.Time, +) protocol.ByteCount { + c.ackedBytesCount += ackedBytes + + if c.epoch.IsZero() { + // First ACK after a loss event. + c.epoch = eventTime // Start of epoch. + c.ackedBytesCount = ackedBytes // Reset count. + // Reset estimated_tcp_congestion_window_ to be in sync with cubic. + c.estimatedTCPcongestionWindow = currentCongestionWindow + if c.lastMaxCongestionWindow <= currentCongestionWindow { + c.timeToOriginPoint = 0 + c.originPointCongestionWindow = currentCongestionWindow + } else { + c.timeToOriginPoint = uint32(math.Cbrt(float64(cubeFactor * (c.lastMaxCongestionWindow - currentCongestionWindow)))) + c.originPointCongestionWindow = c.lastMaxCongestionWindow + } + } + + // Change the time unit from microseconds to 2^10 fractions per second. Take + // the round trip time in account. This is done to allow us to use shift as a + // divide operator. + elapsedTime := int64(eventTime.Add(delayMin).Sub(c.epoch)/time.Microsecond) << 10 / (1000 * 1000) + + // Right-shifts of negative, signed numbers have implementation-dependent + // behavior, so force the offset to be positive, as is done in the kernel. + offset := int64(c.timeToOriginPoint) - elapsedTime + if offset < 0 { + offset = -offset + } + + deltaCongestionWindow := protocol.ByteCount(cubeCongestionWindowScale*offset*offset*offset) * maxDatagramSize >> cubeScale + var targetCongestionWindow protocol.ByteCount + if elapsedTime > int64(c.timeToOriginPoint) { + targetCongestionWindow = c.originPointCongestionWindow + deltaCongestionWindow + } else { + targetCongestionWindow = c.originPointCongestionWindow - deltaCongestionWindow + } + // Limit the CWND increase to half the acked bytes. + targetCongestionWindow = min(targetCongestionWindow, currentCongestionWindow+c.ackedBytesCount/2) + + // Increase the window by approximately Alpha * 1 MSS of bytes every + // time we ack an estimated tcp window of bytes. For small + // congestion windows (less than 25), the formula below will + // increase slightly slower than linearly per estimated tcp window + // of bytes. + c.estimatedTCPcongestionWindow += protocol.ByteCount(float32(c.ackedBytesCount) * c.alpha() * float32(maxDatagramSize) / float32(c.estimatedTCPcongestionWindow)) + c.ackedBytesCount = 0 + + // We have a new cubic congestion window. + c.lastTargetCongestionWindow = targetCongestionWindow + + // Compute target congestion_window based on cubic target and estimated TCP + // congestion_window, use highest (fastest). + if targetCongestionWindow < c.estimatedTCPcongestionWindow { + targetCongestionWindow = c.estimatedTCPcongestionWindow + } + return targetCongestionWindow +} + +// SetNumConnections sets the number of emulated connections +func (c *Cubic) SetNumConnections(n int) { + c.numConnections = n +} diff --git a/vendor/github.com/quic-go/quic-go/internal/congestion/cubic_sender.go b/vendor/github.com/quic-go/quic-go/internal/congestion/cubic_sender.go new file mode 100644 index 0000000..075b08e --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/congestion/cubic_sender.go @@ -0,0 +1,316 @@ +package congestion + +import ( + "fmt" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/logging" +) + +const ( + // maxDatagramSize is the default maximum packet size used in the Linux TCP implementation. + // Used in QUIC for congestion window computations in bytes. + initialMaxDatagramSize = protocol.ByteCount(protocol.InitialPacketSize) + maxBurstPackets = 3 + renoBeta = 0.7 // Reno backoff factor. + minCongestionWindowPackets = 2 + initialCongestionWindow = 32 +) + +type cubicSender struct { + hybridSlowStart HybridSlowStart + rttStats *utils.RTTStats + cubic *Cubic + pacer *pacer + clock Clock + + reno bool + + // Track the largest packet that has been sent. + largestSentPacketNumber protocol.PacketNumber + + // Track the largest packet that has been acked. + largestAckedPacketNumber protocol.PacketNumber + + // Track the largest packet number outstanding when a CWND cutback occurs. + largestSentAtLastCutback protocol.PacketNumber + + // Whether the last loss event caused us to exit slowstart. + // Used for stats collection of slowstartPacketsLost + lastCutbackExitedSlowstart bool + + // Congestion window in bytes. + congestionWindow protocol.ByteCount + + // Slow start congestion window in bytes, aka ssthresh. + slowStartThreshold protocol.ByteCount + + // ACK counter for the Reno implementation. + numAckedPackets uint64 + + initialCongestionWindow protocol.ByteCount + initialMaxCongestionWindow protocol.ByteCount + + maxDatagramSize protocol.ByteCount + + lastState logging.CongestionState + tracer *logging.ConnectionTracer +} + +var ( + _ SendAlgorithm = &cubicSender{} + _ SendAlgorithmWithDebugInfos = &cubicSender{} +) + +// NewCubicSender makes a new cubic sender +func NewCubicSender( + clock Clock, + rttStats *utils.RTTStats, + initialMaxDatagramSize protocol.ByteCount, + reno bool, + tracer *logging.ConnectionTracer, +) *cubicSender { + return newCubicSender( + clock, + rttStats, + reno, + initialMaxDatagramSize, + initialCongestionWindow*initialMaxDatagramSize, + protocol.MaxCongestionWindowPackets*initialMaxDatagramSize, + tracer, + ) +} + +func newCubicSender( + clock Clock, + rttStats *utils.RTTStats, + reno bool, + initialMaxDatagramSize, + initialCongestionWindow, + initialMaxCongestionWindow protocol.ByteCount, + tracer *logging.ConnectionTracer, +) *cubicSender { + c := &cubicSender{ + rttStats: rttStats, + largestSentPacketNumber: protocol.InvalidPacketNumber, + largestAckedPacketNumber: protocol.InvalidPacketNumber, + largestSentAtLastCutback: protocol.InvalidPacketNumber, + initialCongestionWindow: initialCongestionWindow, + initialMaxCongestionWindow: initialMaxCongestionWindow, + congestionWindow: initialCongestionWindow, + slowStartThreshold: protocol.MaxByteCount, + cubic: NewCubic(clock), + clock: clock, + reno: reno, + tracer: tracer, + maxDatagramSize: initialMaxDatagramSize, + } + c.pacer = newPacer(c.BandwidthEstimate) + if c.tracer != nil && c.tracer.UpdatedCongestionState != nil { + c.lastState = logging.CongestionStateSlowStart + c.tracer.UpdatedCongestionState(logging.CongestionStateSlowStart) + } + return c +} + +// TimeUntilSend returns when the next packet should be sent. +func (c *cubicSender) TimeUntilSend(_ protocol.ByteCount) time.Time { + return c.pacer.TimeUntilSend() +} + +func (c *cubicSender) HasPacingBudget(now time.Time) bool { + return c.pacer.Budget(now) >= c.maxDatagramSize +} + +func (c *cubicSender) maxCongestionWindow() protocol.ByteCount { + return c.maxDatagramSize * protocol.MaxCongestionWindowPackets +} + +func (c *cubicSender) minCongestionWindow() protocol.ByteCount { + return c.maxDatagramSize * minCongestionWindowPackets +} + +func (c *cubicSender) OnPacketSent( + sentTime time.Time, + _ protocol.ByteCount, + packetNumber protocol.PacketNumber, + bytes protocol.ByteCount, + isRetransmittable bool, +) { + c.pacer.SentPacket(sentTime, bytes) + if !isRetransmittable { + return + } + c.largestSentPacketNumber = packetNumber + c.hybridSlowStart.OnPacketSent(packetNumber) +} + +func (c *cubicSender) CanSend(bytesInFlight protocol.ByteCount) bool { + return bytesInFlight < c.GetCongestionWindow() +} + +func (c *cubicSender) InRecovery() bool { + return c.largestAckedPacketNumber != protocol.InvalidPacketNumber && c.largestAckedPacketNumber <= c.largestSentAtLastCutback +} + +func (c *cubicSender) InSlowStart() bool { + return c.GetCongestionWindow() < c.slowStartThreshold +} + +func (c *cubicSender) GetCongestionWindow() protocol.ByteCount { + return c.congestionWindow +} + +func (c *cubicSender) MaybeExitSlowStart() { + if c.InSlowStart() && + c.hybridSlowStart.ShouldExitSlowStart(c.rttStats.LatestRTT(), c.rttStats.MinRTT(), c.GetCongestionWindow()/c.maxDatagramSize) { + // exit slow start + c.slowStartThreshold = c.congestionWindow + c.maybeTraceStateChange(logging.CongestionStateCongestionAvoidance) + } +} + +func (c *cubicSender) OnPacketAcked( + ackedPacketNumber protocol.PacketNumber, + ackedBytes protocol.ByteCount, + priorInFlight protocol.ByteCount, + eventTime time.Time, +) { + c.largestAckedPacketNumber = max(ackedPacketNumber, c.largestAckedPacketNumber) + if c.InRecovery() { + return + } + c.maybeIncreaseCwnd(ackedPacketNumber, ackedBytes, priorInFlight, eventTime) + if c.InSlowStart() { + c.hybridSlowStart.OnPacketAcked(ackedPacketNumber) + } +} + +func (c *cubicSender) OnCongestionEvent(packetNumber protocol.PacketNumber, lostBytes, priorInFlight protocol.ByteCount) { + // TCP NewReno (RFC6582) says that once a loss occurs, any losses in packets + // already sent should be treated as a single loss event, since it's expected. + if packetNumber <= c.largestSentAtLastCutback { + return + } + c.lastCutbackExitedSlowstart = c.InSlowStart() + c.maybeTraceStateChange(logging.CongestionStateRecovery) + + if c.reno { + c.congestionWindow = protocol.ByteCount(float64(c.congestionWindow) * renoBeta) + } else { + c.congestionWindow = c.cubic.CongestionWindowAfterPacketLoss(c.congestionWindow) + } + if minCwnd := c.minCongestionWindow(); c.congestionWindow < minCwnd { + c.congestionWindow = minCwnd + } + c.slowStartThreshold = c.congestionWindow + c.largestSentAtLastCutback = c.largestSentPacketNumber + // reset packet count from congestion avoidance mode. We start + // counting again when we're out of recovery. + c.numAckedPackets = 0 +} + +// Called when we receive an ack. Normal TCP tracks how many packets one ack +// represents, but quic has a separate ack for each packet. +func (c *cubicSender) maybeIncreaseCwnd( + _ protocol.PacketNumber, + ackedBytes protocol.ByteCount, + priorInFlight protocol.ByteCount, + eventTime time.Time, +) { + // Do not increase the congestion window unless the sender is close to using + // the current window. + if !c.isCwndLimited(priorInFlight) { + c.cubic.OnApplicationLimited() + c.maybeTraceStateChange(logging.CongestionStateApplicationLimited) + return + } + if c.congestionWindow >= c.maxCongestionWindow() { + return + } + if c.InSlowStart() { + // TCP slow start, exponential growth, increase by one for each ACK. + c.congestionWindow += c.maxDatagramSize + c.maybeTraceStateChange(logging.CongestionStateSlowStart) + return + } + // Congestion avoidance + c.maybeTraceStateChange(logging.CongestionStateCongestionAvoidance) + if c.reno { + // Classic Reno congestion avoidance. + c.numAckedPackets++ + if c.numAckedPackets >= uint64(c.congestionWindow/c.maxDatagramSize) { + c.congestionWindow += c.maxDatagramSize + c.numAckedPackets = 0 + } + } else { + c.congestionWindow = min(c.maxCongestionWindow(), c.cubic.CongestionWindowAfterAck(ackedBytes, c.congestionWindow, c.rttStats.MinRTT(), eventTime)) + } +} + +func (c *cubicSender) isCwndLimited(bytesInFlight protocol.ByteCount) bool { + congestionWindow := c.GetCongestionWindow() + if bytesInFlight >= congestionWindow { + return true + } + availableBytes := congestionWindow - bytesInFlight + slowStartLimited := c.InSlowStart() && bytesInFlight > congestionWindow/2 + return slowStartLimited || availableBytes <= maxBurstPackets*c.maxDatagramSize +} + +// BandwidthEstimate returns the current bandwidth estimate +func (c *cubicSender) BandwidthEstimate() Bandwidth { + srtt := c.rttStats.SmoothedRTT() + if srtt == 0 { + // If we haven't measured an rtt, the bandwidth estimate is unknown. + return infBandwidth + } + return BandwidthFromDelta(c.GetCongestionWindow(), srtt) +} + +// OnRetransmissionTimeout is called on an retransmission timeout +func (c *cubicSender) OnRetransmissionTimeout(packetsRetransmitted bool) { + c.largestSentAtLastCutback = protocol.InvalidPacketNumber + if !packetsRetransmitted { + return + } + c.hybridSlowStart.Restart() + c.cubic.Reset() + c.slowStartThreshold = c.congestionWindow / 2 + c.congestionWindow = c.minCongestionWindow() +} + +// OnConnectionMigration is called when the connection is migrated (?) +func (c *cubicSender) OnConnectionMigration() { + c.hybridSlowStart.Restart() + c.largestSentPacketNumber = protocol.InvalidPacketNumber + c.largestAckedPacketNumber = protocol.InvalidPacketNumber + c.largestSentAtLastCutback = protocol.InvalidPacketNumber + c.lastCutbackExitedSlowstart = false + c.cubic.Reset() + c.numAckedPackets = 0 + c.congestionWindow = c.initialCongestionWindow + c.slowStartThreshold = c.initialMaxCongestionWindow +} + +func (c *cubicSender) maybeTraceStateChange(new logging.CongestionState) { + if c.tracer == nil || c.tracer.UpdatedCongestionState == nil || new == c.lastState { + return + } + c.tracer.UpdatedCongestionState(new) + c.lastState = new +} + +func (c *cubicSender) SetMaxDatagramSize(s protocol.ByteCount) { + if s < c.maxDatagramSize { + panic(fmt.Sprintf("congestion BUG: decreased max datagram size from %d to %d", c.maxDatagramSize, s)) + } + cwndIsMinCwnd := c.congestionWindow == c.minCongestionWindow() + c.maxDatagramSize = s + if cwndIsMinCwnd { + c.congestionWindow = c.minCongestionWindow() + } + c.pacer.SetMaxDatagramSize(s) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/congestion/hybrid_slow_start.go b/vendor/github.com/quic-go/quic-go/internal/congestion/hybrid_slow_start.go new file mode 100644 index 0000000..9679d9e --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/congestion/hybrid_slow_start.go @@ -0,0 +1,112 @@ +package congestion + +import ( + "time" + + "github.com/quic-go/quic-go/internal/protocol" +) + +// Note(pwestin): the magic clamping numbers come from the original code in +// tcp_cubic.c. +const hybridStartLowWindow = protocol.ByteCount(16) + +// Number of delay samples for detecting the increase of delay. +const hybridStartMinSamples = uint32(8) + +// Exit slow start if the min rtt has increased by more than 1/8th. +const hybridStartDelayFactorExp = 3 // 2^3 = 8 +// The original paper specifies 2 and 8ms, but those have changed over time. +const ( + hybridStartDelayMinThresholdUs = int64(4000) + hybridStartDelayMaxThresholdUs = int64(16000) +) + +// HybridSlowStart implements the TCP hybrid slow start algorithm +type HybridSlowStart struct { + endPacketNumber protocol.PacketNumber + lastSentPacketNumber protocol.PacketNumber + started bool + currentMinRTT time.Duration + rttSampleCount uint32 + hystartFound bool +} + +// StartReceiveRound is called for the start of each receive round (burst) in the slow start phase. +func (s *HybridSlowStart) StartReceiveRound(lastSent protocol.PacketNumber) { + s.endPacketNumber = lastSent + s.currentMinRTT = 0 + s.rttSampleCount = 0 + s.started = true +} + +// IsEndOfRound returns true if this ack is the last packet number of our current slow start round. +func (s *HybridSlowStart) IsEndOfRound(ack protocol.PacketNumber) bool { + return s.endPacketNumber < ack +} + +// ShouldExitSlowStart should be called on every new ack frame, since a new +// RTT measurement can be made then. +// rtt: the RTT for this ack packet. +// minRTT: is the lowest delay (RTT) we have seen during the session. +// congestionWindow: the congestion window in packets. +func (s *HybridSlowStart) ShouldExitSlowStart(latestRTT time.Duration, minRTT time.Duration, congestionWindow protocol.ByteCount) bool { + if !s.started { + // Time to start the hybrid slow start. + s.StartReceiveRound(s.lastSentPacketNumber) + } + if s.hystartFound { + return true + } + // Second detection parameter - delay increase detection. + // Compare the minimum delay (s.currentMinRTT) of the current + // burst of packets relative to the minimum delay during the session. + // Note: we only look at the first few(8) packets in each burst, since we + // only want to compare the lowest RTT of the burst relative to previous + // bursts. + s.rttSampleCount++ + if s.rttSampleCount <= hybridStartMinSamples { + if s.currentMinRTT == 0 || s.currentMinRTT > latestRTT { + s.currentMinRTT = latestRTT + } + } + // We only need to check this once per round. + if s.rttSampleCount == hybridStartMinSamples { + // Divide minRTT by 8 to get a rtt increase threshold for exiting. + minRTTincreaseThresholdUs := int64(minRTT / time.Microsecond >> hybridStartDelayFactorExp) + // Ensure the rtt threshold is never less than 2ms or more than 16ms. + minRTTincreaseThresholdUs = min(minRTTincreaseThresholdUs, hybridStartDelayMaxThresholdUs) + minRTTincreaseThreshold := time.Duration(max(minRTTincreaseThresholdUs, hybridStartDelayMinThresholdUs)) * time.Microsecond + + if s.currentMinRTT > (minRTT + minRTTincreaseThreshold) { + s.hystartFound = true + } + } + // Exit from slow start if the cwnd is greater than 16 and + // increasing delay is found. + return congestionWindow >= hybridStartLowWindow && s.hystartFound +} + +// OnPacketSent is called when a packet was sent +func (s *HybridSlowStart) OnPacketSent(packetNumber protocol.PacketNumber) { + s.lastSentPacketNumber = packetNumber +} + +// OnPacketAcked gets invoked after ShouldExitSlowStart, so it's best to end +// the round when the final packet of the burst is received and start it on +// the next incoming ack. +func (s *HybridSlowStart) OnPacketAcked(ackedPacketNumber protocol.PacketNumber) { + if s.IsEndOfRound(ackedPacketNumber) { + s.started = false + } +} + +// Started returns true if started +func (s *HybridSlowStart) Started() bool { + return s.started +} + +// Restart the slow start phase +func (s *HybridSlowStart) Restart() { + s.started = false + s.hystartFound = false +} diff --git a/vendor/github.com/quic-go/quic-go/internal/congestion/interface.go b/vendor/github.com/quic-go/quic-go/internal/congestion/interface.go new file mode 100644 index 0000000..881f453 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/congestion/interface.go @@ -0,0 +1,28 @@ +package congestion + +import ( + "time" + + "github.com/quic-go/quic-go/internal/protocol" +) + +// A SendAlgorithm performs congestion control +type SendAlgorithm interface { + TimeUntilSend(bytesInFlight protocol.ByteCount) time.Time + HasPacingBudget(now time.Time) bool + OnPacketSent(sentTime time.Time, bytesInFlight protocol.ByteCount, packetNumber protocol.PacketNumber, bytes protocol.ByteCount, isRetransmittable bool) + CanSend(bytesInFlight protocol.ByteCount) bool + MaybeExitSlowStart() + OnPacketAcked(number protocol.PacketNumber, ackedBytes protocol.ByteCount, priorInFlight protocol.ByteCount, eventTime time.Time) + OnCongestionEvent(number protocol.PacketNumber, lostBytes protocol.ByteCount, priorInFlight protocol.ByteCount) + OnRetransmissionTimeout(packetsRetransmitted bool) + SetMaxDatagramSize(protocol.ByteCount) +} + +// A SendAlgorithmWithDebugInfos is a SendAlgorithm that exposes some debug infos +type SendAlgorithmWithDebugInfos interface { + SendAlgorithm + InSlowStart() bool + InRecovery() bool + GetCongestionWindow() protocol.ByteCount +} diff --git a/vendor/github.com/quic-go/quic-go/internal/congestion/pacer.go b/vendor/github.com/quic-go/quic-go/internal/congestion/pacer.go new file mode 100644 index 0000000..34d3d1d --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/congestion/pacer.go @@ -0,0 +1,84 @@ +package congestion + +import ( + "time" + + "github.com/quic-go/quic-go/internal/protocol" +) + +const maxBurstSizePackets = 10 + +// The pacer implements a token bucket pacing algorithm. +type pacer struct { + budgetAtLastSent protocol.ByteCount + maxDatagramSize protocol.ByteCount + lastSentTime time.Time + adjustedBandwidth func() uint64 // in bytes/s +} + +func newPacer(getBandwidth func() Bandwidth) *pacer { + p := &pacer{ + maxDatagramSize: initialMaxDatagramSize, + adjustedBandwidth: func() uint64 { + // Bandwidth is in bits/s. We need the value in bytes/s. + bw := uint64(getBandwidth() / BytesPerSecond) + // Use a slightly higher value than the actual measured bandwidth. + // RTT variations then won't result in under-utilization of the congestion window. + // Ultimately, this will result in sending packets as acknowledgments are received rather than when timers fire, + // provided the congestion window is fully utilized and acknowledgments arrive at regular intervals. + return bw * 5 / 4 + }, + } + p.budgetAtLastSent = p.maxBurstSize() + return p +} + +func (p *pacer) SentPacket(sendTime time.Time, size protocol.ByteCount) { + budget := p.Budget(sendTime) + if size >= budget { + p.budgetAtLastSent = 0 + } else { + p.budgetAtLastSent = budget - size + } + p.lastSentTime = sendTime +} + +func (p *pacer) Budget(now time.Time) protocol.ByteCount { + if p.lastSentTime.IsZero() { + return p.maxBurstSize() + } + budget := p.budgetAtLastSent + (protocol.ByteCount(p.adjustedBandwidth())*protocol.ByteCount(now.Sub(p.lastSentTime).Nanoseconds()))/1e9 + if budget < 0 { // protect against overflows + budget = protocol.MaxByteCount + } + return min(p.maxBurstSize(), budget) +} + +func (p *pacer) maxBurstSize() protocol.ByteCount { + return max( + protocol.ByteCount(uint64((protocol.MinPacingDelay+protocol.TimerGranularity).Nanoseconds())*p.adjustedBandwidth())/1e9, + maxBurstSizePackets*p.maxDatagramSize, + ) +} + +// TimeUntilSend returns when the next packet should be sent. +// It returns the zero value of time.Time if a packet can be sent immediately. +func (p *pacer) TimeUntilSend() time.Time { + if p.budgetAtLastSent >= p.maxDatagramSize { + return time.Time{} + } + diff := 1e9 * uint64(p.maxDatagramSize-p.budgetAtLastSent) + bw := p.adjustedBandwidth() + // We might need to round up this value. + // Otherwise, we might have a budget (slightly) smaller than the datagram size when the timer expires. + d := diff / bw + // this is effectively a math.Ceil, but using only integer math + if diff%bw > 0 { + d++ + } + return p.lastSentTime.Add(max(protocol.MinPacingDelay, time.Duration(d)*time.Nanosecond)) +} + +func (p *pacer) SetMaxDatagramSize(s protocol.ByteCount) { + p.maxDatagramSize = s +} diff --git a/vendor/github.com/quic-go/quic-go/internal/flowcontrol/base_flow_controller.go b/vendor/github.com/quic-go/quic-go/internal/flowcontrol/base_flow_controller.go new file mode 100644 index 0000000..950e5f7 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/flowcontrol/base_flow_controller.go @@ -0,0 +1,121 @@ +package flowcontrol + +import ( + "sync" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" +) + +type baseFlowController struct { + // for sending data + bytesSent protocol.ByteCount + sendWindow protocol.ByteCount + lastBlockedAt protocol.ByteCount + + // for receiving data + //nolint:structcheck // The mutex is used both by the stream and the connection flow controller + mutex sync.Mutex + bytesRead protocol.ByteCount + highestReceived protocol.ByteCount + receiveWindow protocol.ByteCount + receiveWindowSize protocol.ByteCount + maxReceiveWindowSize protocol.ByteCount + + allowWindowIncrease func(size protocol.ByteCount) bool + + epochStartTime time.Time + epochStartOffset protocol.ByteCount + rttStats *utils.RTTStats + + logger utils.Logger +} + +// IsNewlyBlocked says if it is newly blocked by flow control. +// For every offset, it only returns true once. +// If it is blocked, the offset is returned. +func (c *baseFlowController) IsNewlyBlocked() (bool, protocol.ByteCount) { + if c.SendWindowSize() != 0 || c.sendWindow == c.lastBlockedAt { + return false, 0 + } + c.lastBlockedAt = c.sendWindow + return true, c.sendWindow +} + +func (c *baseFlowController) AddBytesSent(n protocol.ByteCount) { + c.bytesSent += n +} + +// UpdateSendWindow is called after receiving a MAX_{STREAM_}DATA frame. +func (c *baseFlowController) UpdateSendWindow(offset protocol.ByteCount) (updated bool) { + if offset > c.sendWindow { + c.sendWindow = offset + return true + } + return false +} + +func (c *baseFlowController) SendWindowSize() protocol.ByteCount { + // this only happens during connection establishment, when data is sent before we receive the peer's transport parameters + if c.bytesSent > c.sendWindow { + return 0 + } + return c.sendWindow - c.bytesSent +} + +// needs to be called with locked mutex +func (c *baseFlowController) addBytesRead(n protocol.ByteCount) { + c.bytesRead += n +} + +func (c *baseFlowController) hasWindowUpdate() bool { + bytesRemaining := c.receiveWindow - c.bytesRead + // update the window when more than the threshold was consumed + return bytesRemaining <= protocol.ByteCount(float64(c.receiveWindowSize)*(1-protocol.WindowUpdateThreshold)) +} + +// getWindowUpdate updates the receive window, if necessary +// it returns the new offset +func (c *baseFlowController) getWindowUpdate(now time.Time) protocol.ByteCount { + if !c.hasWindowUpdate() { + return 0 + } + + c.maybeAdjustWindowSize(now) + c.receiveWindow = c.bytesRead + c.receiveWindowSize + return c.receiveWindow +} + +// maybeAdjustWindowSize increases the receiveWindowSize if we're sending updates too often. +// For details about auto-tuning, see https://docs.google.com/document/d/1SExkMmGiz8VYzV3s9E35JQlJ73vhzCekKkDi85F1qCE/edit?usp=sharing. +func (c *baseFlowController) maybeAdjustWindowSize(now time.Time) { + bytesReadInEpoch := c.bytesRead - c.epochStartOffset + // don't do anything if less than half the window has been consumed + if bytesReadInEpoch <= c.receiveWindowSize/2 { + return + } + rtt := c.rttStats.SmoothedRTT() + if rtt == 0 { + return + } + + fraction := float64(bytesReadInEpoch) / float64(c.receiveWindowSize) + if now.Sub(c.epochStartTime) < time.Duration(4*fraction*float64(rtt)) { + // window is consumed too fast, try to increase the window size + newSize := min(2*c.receiveWindowSize, c.maxReceiveWindowSize) + if newSize > c.receiveWindowSize && (c.allowWindowIncrease == nil || c.allowWindowIncrease(newSize-c.receiveWindowSize)) { + c.receiveWindowSize = newSize + } + } + c.startNewAutoTuningEpoch(now) +} + +func (c *baseFlowController) startNewAutoTuningEpoch(now time.Time) { + c.epochStartTime = now + c.epochStartOffset = c.bytesRead +} + +func (c *baseFlowController) checkFlowControlViolation() bool { + return c.highestReceived > c.receiveWindow +} diff --git a/vendor/github.com/quic-go/quic-go/internal/flowcontrol/connection_flow_controller.go b/vendor/github.com/quic-go/quic-go/internal/flowcontrol/connection_flow_controller.go new file mode 100644 index 0000000..c550e75 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/flowcontrol/connection_flow_controller.go @@ -0,0 +1,113 @@ +package flowcontrol + +import ( + "errors" + "fmt" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/utils" +) + +type connectionFlowController struct { + baseFlowController +} + +var _ ConnectionFlowController = &connectionFlowController{} + +// NewConnectionFlowController gets a new flow controller for the connection +// It is created before we receive the peer's transport parameters, thus it starts with a sendWindow of 0. +func NewConnectionFlowController( + receiveWindow protocol.ByteCount, + maxReceiveWindow protocol.ByteCount, + allowWindowIncrease func(size protocol.ByteCount) bool, + rttStats *utils.RTTStats, + logger utils.Logger, +) *connectionFlowController { + return &connectionFlowController{ + baseFlowController: baseFlowController{ + rttStats: rttStats, + receiveWindow: receiveWindow, + receiveWindowSize: receiveWindow, + maxReceiveWindowSize: maxReceiveWindow, + allowWindowIncrease: allowWindowIncrease, + logger: logger, + }, + } +} + +// IncrementHighestReceived adds an increment to the highestReceived value +func (c *connectionFlowController) IncrementHighestReceived(increment protocol.ByteCount, now time.Time) error { + c.mutex.Lock() + defer c.mutex.Unlock() + + // If this is the first frame received on this connection, start flow-control auto-tuning. + if c.highestReceived == 0 { + c.startNewAutoTuningEpoch(now) + } + c.highestReceived += increment + + if c.checkFlowControlViolation() { + return &qerr.TransportError{ + ErrorCode: qerr.FlowControlError, + ErrorMessage: fmt.Sprintf("received %d bytes for the connection, allowed %d bytes", c.highestReceived, c.receiveWindow), + } + } + return nil +} + +func (c *connectionFlowController) AddBytesRead(n protocol.ByteCount) (hasWindowUpdate bool) { + c.mutex.Lock() + defer c.mutex.Unlock() + + c.addBytesRead(n) + return c.hasWindowUpdate() +} + +func (c *connectionFlowController) GetWindowUpdate(now time.Time) protocol.ByteCount { + c.mutex.Lock() + defer c.mutex.Unlock() + + oldWindowSize := c.receiveWindowSize + offset := c.getWindowUpdate(now) + if c.logger.Debug() && oldWindowSize < c.receiveWindowSize { + c.logger.Debugf("Increasing receive flow control window for the connection to %d kB", c.receiveWindowSize/(1<<10)) + } + return offset +} + +// EnsureMinimumWindowSize sets a minimum window size +// it should make sure that the connection-level window is increased when a stream-level window grows +func (c *connectionFlowController) EnsureMinimumWindowSize(inc protocol.ByteCount, now time.Time) { + c.mutex.Lock() + defer c.mutex.Unlock() + + if inc <= c.receiveWindowSize { + return + } + newSize := min(inc, c.maxReceiveWindowSize) + if delta := newSize - c.receiveWindowSize; delta > 0 && c.allowWindowIncrease(delta) { + c.receiveWindowSize = newSize + if c.logger.Debug() { + c.logger.Debugf("Increasing receive flow control window for the connection to %d, in response to stream flow control window increase", newSize) + } + } + c.startNewAutoTuningEpoch(now) +} + +// Reset rests the flow controller. This happens when 0-RTT is rejected. +// All stream data is invalidated, it's as if we had never opened a stream and never sent any data. +// At that point, we only have sent stream data, but we didn't have the keys to open 1-RTT keys yet. +func (c *connectionFlowController) Reset() error { + c.mutex.Lock() + defer c.mutex.Unlock() + + if c.bytesRead > 0 || c.highestReceived > 0 || !c.epochStartTime.IsZero() { + return errors.New("flow controller reset after reading data") + } + c.bytesSent = 0 + c.lastBlockedAt = 0 + c.sendWindow = 0 + return nil +} diff --git a/vendor/github.com/quic-go/quic-go/internal/flowcontrol/interface.go b/vendor/github.com/quic-go/quic-go/internal/flowcontrol/interface.go new file mode 100644 index 0000000..23cf30c --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/flowcontrol/interface.go @@ -0,0 +1,47 @@ +package flowcontrol + +import ( + "time" + + "github.com/quic-go/quic-go/internal/protocol" +) + +type flowController interface { + // for sending + SendWindowSize() protocol.ByteCount + UpdateSendWindow(protocol.ByteCount) (updated bool) + AddBytesSent(protocol.ByteCount) + // for receiving + GetWindowUpdate(time.Time) protocol.ByteCount // returns 0 if no update is necessary +} + +// A StreamFlowController is a flow controller for a QUIC stream. +type StreamFlowController interface { + flowController + AddBytesRead(protocol.ByteCount) (hasStreamWindowUpdate, hasConnWindowUpdate bool) + // UpdateHighestReceived is called when a new highest offset is received + // final has to be to true if this is the final offset of the stream, + // as contained in a STREAM frame with FIN bit, and the RESET_STREAM frame + UpdateHighestReceived(offset protocol.ByteCount, final bool, now time.Time) error + // Abandon is called when reading from the stream is aborted early, + // and there won't be any further calls to AddBytesRead. + Abandon() + IsNewlyBlocked() bool +} + +// The ConnectionFlowController is the flow controller for the connection. +type ConnectionFlowController interface { + flowController + AddBytesRead(protocol.ByteCount) (hasWindowUpdate bool) + Reset() error + IsNewlyBlocked() (bool, protocol.ByteCount) +} + +type connectionFlowControllerI interface { + ConnectionFlowController + // The following two methods are not supposed to be called from outside this packet, but are needed internally + // for sending + EnsureMinimumWindowSize(protocol.ByteCount, time.Time) + // for receiving + IncrementHighestReceived(protocol.ByteCount, time.Time) error +} diff --git a/vendor/github.com/quic-go/quic-go/internal/flowcontrol/stream_flow_controller.go b/vendor/github.com/quic-go/quic-go/internal/flowcontrol/stream_flow_controller.go new file mode 100644 index 0000000..968e9a5 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/flowcontrol/stream_flow_controller.go @@ -0,0 +1,154 @@ +package flowcontrol + +import ( + "fmt" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/utils" +) + +type streamFlowController struct { + baseFlowController + + streamID protocol.StreamID + + connection connectionFlowControllerI + + receivedFinalOffset bool +} + +var _ StreamFlowController = &streamFlowController{} + +// NewStreamFlowController gets a new flow controller for a stream +func NewStreamFlowController( + streamID protocol.StreamID, + cfc ConnectionFlowController, + receiveWindow protocol.ByteCount, + maxReceiveWindow protocol.ByteCount, + initialSendWindow protocol.ByteCount, + rttStats *utils.RTTStats, + logger utils.Logger, +) StreamFlowController { + return &streamFlowController{ + streamID: streamID, + connection: cfc.(connectionFlowControllerI), + baseFlowController: baseFlowController{ + rttStats: rttStats, + receiveWindow: receiveWindow, + receiveWindowSize: receiveWindow, + maxReceiveWindowSize: maxReceiveWindow, + sendWindow: initialSendWindow, + logger: logger, + }, + } +} + +// UpdateHighestReceived updates the highestReceived value, if the offset is higher. +func (c *streamFlowController) UpdateHighestReceived(offset protocol.ByteCount, final bool, now time.Time) error { + // If the final offset for this stream is already known, check for consistency. + if c.receivedFinalOffset { + // If we receive another final offset, check that it's the same. + if final && offset != c.highestReceived { + return &qerr.TransportError{ + ErrorCode: qerr.FinalSizeError, + ErrorMessage: fmt.Sprintf("received inconsistent final offset for stream %d (old: %d, new: %d bytes)", c.streamID, c.highestReceived, offset), + } + } + // Check that the offset is below the final offset. + if offset > c.highestReceived { + return &qerr.TransportError{ + ErrorCode: qerr.FinalSizeError, + ErrorMessage: fmt.Sprintf("received offset %d for stream %d, but final offset was already received at %d", offset, c.streamID, c.highestReceived), + } + } + } + + if final { + c.receivedFinalOffset = true + } + if offset == c.highestReceived { + return nil + } + // A higher offset was received before. This can happen due to reordering. + if offset < c.highestReceived { + if final { + return &qerr.TransportError{ + ErrorCode: qerr.FinalSizeError, + ErrorMessage: fmt.Sprintf("received final offset %d for stream %d, but already received offset %d before", offset, c.streamID, c.highestReceived), + } + } + return nil + } + + // If this is the first frame received for this stream, start flow-control auto-tuning. + if c.highestReceived == 0 { + c.startNewAutoTuningEpoch(now) + } + increment := offset - c.highestReceived + c.highestReceived = offset + + if c.checkFlowControlViolation() { + return &qerr.TransportError{ + ErrorCode: qerr.FlowControlError, + ErrorMessage: fmt.Sprintf("received %d bytes on stream %d, allowed %d bytes", offset, c.streamID, c.receiveWindow), + } + } + return c.connection.IncrementHighestReceived(increment, now) +} + +func (c *streamFlowController) AddBytesRead(n protocol.ByteCount) (hasStreamWindowUpdate, hasConnWindowUpdate bool) { + c.mutex.Lock() + c.addBytesRead(n) + hasStreamWindowUpdate = c.shouldQueueWindowUpdate() + c.mutex.Unlock() + hasConnWindowUpdate = c.connection.AddBytesRead(n) + return +} + +func (c *streamFlowController) Abandon() { + c.mutex.Lock() + unread := c.highestReceived - c.bytesRead + c.bytesRead = c.highestReceived + c.mutex.Unlock() + if unread > 0 { + c.connection.AddBytesRead(unread) + } +} + +func (c *streamFlowController) AddBytesSent(n protocol.ByteCount) { + c.baseFlowController.AddBytesSent(n) + c.connection.AddBytesSent(n) +} + +func (c *streamFlowController) SendWindowSize() protocol.ByteCount { + return min(c.baseFlowController.SendWindowSize(), c.connection.SendWindowSize()) +} + +func (c *streamFlowController) IsNewlyBlocked() bool { + blocked, _ := c.baseFlowController.IsNewlyBlocked() + return blocked +} + +func (c *streamFlowController) shouldQueueWindowUpdate() bool { + return !c.receivedFinalOffset && c.hasWindowUpdate() +} + +func (c *streamFlowController) GetWindowUpdate(now time.Time) protocol.ByteCount { + // If we already received the final offset for this stream, the peer won't need any additional flow control credit. + if c.receivedFinalOffset { + return 0 + } + + c.mutex.Lock() + defer c.mutex.Unlock() + + oldWindowSize := c.receiveWindowSize + offset := c.getWindowUpdate(now) + if c.receiveWindowSize > oldWindowSize { // auto-tuning enlarged the window size + c.logger.Debugf("Increasing receive flow control window for stream %d to %d", c.streamID, c.receiveWindowSize) + c.connection.EnsureMinimumWindowSize(protocol.ByteCount(float64(c.receiveWindowSize)*protocol.ConnectionFlowControlMultiplier), now) + } + return offset +} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/aead.go b/vendor/github.com/quic-go/quic-go/internal/handshake/aead.go new file mode 100644 index 0000000..1baf5d6 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/aead.go @@ -0,0 +1,90 @@ +package handshake + +import ( + "encoding/binary" + + "github.com/quic-go/quic-go/internal/protocol" +) + +func createAEAD(suite *cipherSuite, trafficSecret []byte, v protocol.Version) *xorNonceAEAD { + keyLabel := hkdfLabelKeyV1 + ivLabel := hkdfLabelIVV1 + if v == protocol.Version2 { + keyLabel = hkdfLabelKeyV2 + ivLabel = hkdfLabelIVV2 + } + key := hkdfExpandLabel(suite.Hash, trafficSecret, []byte{}, keyLabel, suite.KeyLen) + iv := hkdfExpandLabel(suite.Hash, trafficSecret, []byte{}, ivLabel, suite.IVLen()) + return suite.AEAD(key, iv) +} + +type longHeaderSealer struct { + aead *xorNonceAEAD + headerProtector headerProtector + nonceBuf [8]byte +} + +var _ LongHeaderSealer = &longHeaderSealer{} + +func newLongHeaderSealer(aead *xorNonceAEAD, headerProtector headerProtector) LongHeaderSealer { + if aead.NonceSize() != 8 { + panic("unexpected nonce size") + } + return &longHeaderSealer{ + aead: aead, + headerProtector: headerProtector, + } +} + +func (s *longHeaderSealer) Seal(dst, src []byte, pn protocol.PacketNumber, ad []byte) []byte { + binary.BigEndian.PutUint64(s.nonceBuf[:], uint64(pn)) + return s.aead.Seal(dst, s.nonceBuf[:], src, ad) +} + +func (s *longHeaderSealer) EncryptHeader(sample []byte, firstByte *byte, pnBytes []byte) { + s.headerProtector.EncryptHeader(sample, firstByte, pnBytes) +} + +func (s *longHeaderSealer) Overhead() int { + return s.aead.Overhead() +} + +type longHeaderOpener struct { + aead *xorNonceAEAD + headerProtector headerProtector + highestRcvdPN protocol.PacketNumber // highest packet number received (which could be successfully unprotected) + + // use a single array to avoid allocations + nonceBuf [8]byte +} + +var _ LongHeaderOpener = &longHeaderOpener{} + +func newLongHeaderOpener(aead *xorNonceAEAD, headerProtector headerProtector) LongHeaderOpener { + if aead.NonceSize() != 8 { + panic("unexpected nonce size") + } + return &longHeaderOpener{ + aead: aead, + headerProtector: headerProtector, + } +} + +func (o *longHeaderOpener) DecodePacketNumber(wirePN protocol.PacketNumber, wirePNLen protocol.PacketNumberLen) protocol.PacketNumber { + return protocol.DecodePacketNumber(wirePNLen, o.highestRcvdPN, wirePN) +} + +func (o *longHeaderOpener) Open(dst, src []byte, pn protocol.PacketNumber, ad []byte) ([]byte, error) { + binary.BigEndian.PutUint64(o.nonceBuf[:], uint64(pn)) + dec, err := o.aead.Open(dst, o.nonceBuf[:], src, ad) + if err == nil { + o.highestRcvdPN = max(o.highestRcvdPN, pn) + } else { + err = ErrDecryptionFailed + } + return dec, err +} + +func (o *longHeaderOpener) DecryptHeader(sample []byte, firstByte *byte, pnBytes []byte) { + o.headerProtector.DecryptHeader(sample, firstByte, pnBytes) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/cipher_suite.go b/vendor/github.com/quic-go/quic-go/internal/handshake/cipher_suite.go new file mode 100644 index 0000000..d8a381d --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/cipher_suite.go @@ -0,0 +1,104 @@ +package handshake + +import ( + "crypto" + "crypto/aes" + "crypto/cipher" + "crypto/tls" + "fmt" + + "golang.org/x/crypto/chacha20poly1305" +) + +// These cipher suite implementations are copied from the standard library crypto/tls package. + +const aeadNonceLength = 12 + +type cipherSuite struct { + ID uint16 + Hash crypto.Hash + KeyLen int + AEAD func(key, nonceMask []byte) *xorNonceAEAD +} + +func (s cipherSuite) IVLen() int { return aeadNonceLength } + +func getCipherSuite(id uint16) *cipherSuite { + switch id { + case tls.TLS_AES_128_GCM_SHA256: + return &cipherSuite{ID: tls.TLS_AES_128_GCM_SHA256, Hash: crypto.SHA256, KeyLen: 16, AEAD: aeadAESGCMTLS13} + case tls.TLS_CHACHA20_POLY1305_SHA256: + return &cipherSuite{ID: tls.TLS_CHACHA20_POLY1305_SHA256, Hash: crypto.SHA256, KeyLen: 32, AEAD: aeadChaCha20Poly1305} + case tls.TLS_AES_256_GCM_SHA384: + return &cipherSuite{ID: tls.TLS_AES_256_GCM_SHA384, Hash: crypto.SHA384, KeyLen: 32, AEAD: aeadAESGCMTLS13} + default: + panic(fmt.Sprintf("unknown cypher suite: %d", id)) + } +} + +func aeadAESGCMTLS13(key, nonceMask []byte) *xorNonceAEAD { + if len(nonceMask) != aeadNonceLength { + panic("tls: internal error: wrong nonce length") + } + aes, err := aes.NewCipher(key) + if err != nil { + panic(err) + } + aead, err := cipher.NewGCM(aes) + if err != nil { + panic(err) + } + + ret := &xorNonceAEAD{aead: aead} + copy(ret.nonceMask[:], nonceMask) + return ret +} + +func aeadChaCha20Poly1305(key, nonceMask []byte) *xorNonceAEAD { + if len(nonceMask) != aeadNonceLength { + panic("tls: internal error: wrong nonce length") + } + aead, err := chacha20poly1305.New(key) + if err != nil { + panic(err) + } + + ret := &xorNonceAEAD{aead: aead} + copy(ret.nonceMask[:], nonceMask) + return ret +} + +// xorNonceAEAD wraps an AEAD by XORing in a fixed pattern to the nonce +// before each call. +type xorNonceAEAD struct { + nonceMask [aeadNonceLength]byte + aead cipher.AEAD +} + +func (f *xorNonceAEAD) NonceSize() int { return 8 } // 64-bit sequence number +func (f *xorNonceAEAD) Overhead() int { return f.aead.Overhead() } +func (f *xorNonceAEAD) explicitNonceLen() int { return 0 } + +func (f *xorNonceAEAD) Seal(out, nonce, plaintext, additionalData []byte) []byte { + for i, b := range nonce { + f.nonceMask[4+i] ^= b + } + result := f.aead.Seal(out, f.nonceMask[:], plaintext, additionalData) + for i, b := range nonce { + f.nonceMask[4+i] ^= b + } + + return result +} + +func (f *xorNonceAEAD) Open(out, nonce, ciphertext, additionalData []byte) ([]byte, error) { + for i, b := range nonce { + f.nonceMask[4+i] ^= b + } + result, err := f.aead.Open(out, f.nonceMask[:], ciphertext, additionalData) + for i, b := range nonce { + f.nonceMask[4+i] ^= b + } + + return result, err +} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/crypto_setup.go b/vendor/github.com/quic-go/quic-go/internal/handshake/crypto_setup.go new file mode 100644 index 0000000..d3a9734 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/crypto_setup.go @@ -0,0 +1,651 @@ +package handshake + +import ( + "context" + "crypto/tls" + "errors" + "fmt" + "net" + "strings" + "sync/atomic" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/internal/wire" + "github.com/quic-go/quic-go/logging" + "github.com/quic-go/quic-go/quicvarint" +) + +type quicVersionContextKey struct{} + +var QUICVersionContextKey = &quicVersionContextKey{} + +const clientSessionStateRevision = 5 + +type cryptoSetup struct { + tlsConf *tls.Config + conn *tls.QUICConn + + events []Event + + version protocol.Version + + ourParams *wire.TransportParameters + peerParams *wire.TransportParameters + + zeroRTTParameters *wire.TransportParameters + allow0RTT bool + + rttStats *utils.RTTStats + + tracer *logging.ConnectionTracer + logger utils.Logger + + perspective protocol.Perspective + + handshakeCompleteTime time.Time + + zeroRTTOpener LongHeaderOpener // only set for the server + zeroRTTSealer LongHeaderSealer // only set for the client + + initialOpener LongHeaderOpener + initialSealer LongHeaderSealer + + handshakeOpener LongHeaderOpener + handshakeSealer LongHeaderSealer + + used0RTT atomic.Bool + + aead *updatableAEAD + has1RTTSealer bool + has1RTTOpener bool +} + +var _ CryptoSetup = &cryptoSetup{} + +// NewCryptoSetupClient creates a new crypto setup for the client +func NewCryptoSetupClient( + connID protocol.ConnectionID, + tp *wire.TransportParameters, + tlsConf *tls.Config, + enable0RTT bool, + rttStats *utils.RTTStats, + tracer *logging.ConnectionTracer, + logger utils.Logger, + version protocol.Version, +) CryptoSetup { + cs := newCryptoSetup( + connID, + tp, + rttStats, + tracer, + logger, + protocol.PerspectiveClient, + version, + ) + + tlsConf = tlsConf.Clone() + tlsConf.MinVersion = tls.VersionTLS13 + cs.tlsConf = tlsConf + cs.allow0RTT = enable0RTT + + cs.conn = tls.QUICClient(&tls.QUICConfig{ + TLSConfig: tlsConf, + EnableSessionEvents: true, + }) + cs.conn.SetTransportParameters(cs.ourParams.Marshal(protocol.PerspectiveClient)) + + return cs +} + +// NewCryptoSetupServer creates a new crypto setup for the server +func NewCryptoSetupServer( + connID protocol.ConnectionID, + localAddr, remoteAddr net.Addr, + tp *wire.TransportParameters, + tlsConf *tls.Config, + allow0RTT bool, + rttStats *utils.RTTStats, + tracer *logging.ConnectionTracer, + logger utils.Logger, + version protocol.Version, +) CryptoSetup { + cs := newCryptoSetup( + connID, + tp, + rttStats, + tracer, + logger, + protocol.PerspectiveServer, + version, + ) + cs.allow0RTT = allow0RTT + + tlsConf = setupConfigForServer(tlsConf, localAddr, remoteAddr) + + cs.tlsConf = tlsConf + cs.conn = tls.QUICServer(&tls.QUICConfig{ + TLSConfig: tlsConf, + EnableSessionEvents: true, + }) + return cs +} + +func newCryptoSetup( + connID protocol.ConnectionID, + tp *wire.TransportParameters, + rttStats *utils.RTTStats, + tracer *logging.ConnectionTracer, + logger utils.Logger, + perspective protocol.Perspective, + version protocol.Version, +) *cryptoSetup { + initialSealer, initialOpener := NewInitialAEAD(connID, perspective, version) + if tracer != nil && tracer.UpdatedKeyFromTLS != nil { + tracer.UpdatedKeyFromTLS(protocol.EncryptionInitial, protocol.PerspectiveClient) + tracer.UpdatedKeyFromTLS(protocol.EncryptionInitial, protocol.PerspectiveServer) + } + return &cryptoSetup{ + initialSealer: initialSealer, + initialOpener: initialOpener, + aead: newUpdatableAEAD(rttStats, tracer, logger, version), + events: make([]Event, 0, 16), + ourParams: tp, + rttStats: rttStats, + tracer: tracer, + logger: logger, + perspective: perspective, + version: version, + } +} + +func (h *cryptoSetup) ChangeConnectionID(id protocol.ConnectionID) { + initialSealer, initialOpener := NewInitialAEAD(id, h.perspective, h.version) + h.initialSealer = initialSealer + h.initialOpener = initialOpener + if h.tracer != nil && h.tracer.UpdatedKeyFromTLS != nil { + h.tracer.UpdatedKeyFromTLS(protocol.EncryptionInitial, protocol.PerspectiveClient) + h.tracer.UpdatedKeyFromTLS(protocol.EncryptionInitial, protocol.PerspectiveServer) + } +} + +func (h *cryptoSetup) SetLargest1RTTAcked(pn protocol.PacketNumber) error { + return h.aead.SetLargestAcked(pn) +} + +func (h *cryptoSetup) StartHandshake(ctx context.Context) error { + err := h.conn.Start(context.WithValue(ctx, QUICVersionContextKey, h.version)) + if err != nil { + return wrapError(err) + } + for { + ev := h.conn.NextEvent() + if err := h.handleEvent(ev); err != nil { + return wrapError(err) + } + if ev.Kind == tls.QUICNoEvent { + break + } + } + if h.perspective == protocol.PerspectiveClient { + if h.zeroRTTSealer != nil && h.zeroRTTParameters != nil { + h.logger.Debugf("Doing 0-RTT.") + h.events = append(h.events, Event{Kind: EventRestoredTransportParameters, TransportParameters: h.zeroRTTParameters}) + } else { + h.logger.Debugf("Not doing 0-RTT. Has sealer: %t, has params: %t", h.zeroRTTSealer != nil, h.zeroRTTParameters != nil) + } + } + return nil +} + +// Close closes the crypto setup. +// It aborts the handshake, if it is still running. +func (h *cryptoSetup) Close() error { + return h.conn.Close() +} + +// HandleMessage handles a TLS handshake message. +// It is called by the crypto streams when a new message is available. +func (h *cryptoSetup) HandleMessage(data []byte, encLevel protocol.EncryptionLevel) error { + if err := h.handleMessage(data, encLevel); err != nil { + return wrapError(err) + } + return nil +} + +func (h *cryptoSetup) handleMessage(data []byte, encLevel protocol.EncryptionLevel) error { + if err := h.conn.HandleData(encLevel.ToTLSEncryptionLevel(), data); err != nil { + return err + } + for { + ev := h.conn.NextEvent() + if err := h.handleEvent(ev); err != nil { + return err + } + if ev.Kind == tls.QUICNoEvent { + return nil + } + } +} + +func (h *cryptoSetup) handleEvent(ev tls.QUICEvent) (err error) { + switch ev.Kind { + case tls.QUICNoEvent: + return nil + case tls.QUICSetReadSecret: + h.setReadKey(ev.Level, ev.Suite, ev.Data) + return nil + case tls.QUICSetWriteSecret: + h.setWriteKey(ev.Level, ev.Suite, ev.Data) + return nil + case tls.QUICTransportParameters: + return h.handleTransportParameters(ev.Data) + case tls.QUICTransportParametersRequired: + h.conn.SetTransportParameters(h.ourParams.Marshal(h.perspective)) + return nil + case tls.QUICRejectedEarlyData: + h.rejected0RTT() + return nil + case tls.QUICWriteData: + h.writeRecord(ev.Level, ev.Data) + return nil + case tls.QUICHandshakeDone: + h.handshakeComplete() + return nil + case tls.QUICStoreSession: + if h.perspective == protocol.PerspectiveServer { + panic("cryptoSetup BUG: unexpected QUICStoreSession event for the server") + } + ev.SessionState.Extra = append( + ev.SessionState.Extra, + addSessionStateExtraPrefix(h.marshalDataForSessionState(ev.SessionState.EarlyData)), + ) + return h.conn.StoreSession(ev.SessionState) + case tls.QUICResumeSession: + var allowEarlyData bool + switch h.perspective { + case protocol.PerspectiveClient: + // for clients, this event occurs when a session ticket is selected + allowEarlyData = h.handleDataFromSessionState( + findSessionStateExtraData(ev.SessionState.Extra), + ev.SessionState.EarlyData, + ) + case protocol.PerspectiveServer: + // for servers, this event occurs when receiving the client's session ticket + allowEarlyData = h.handleSessionTicket( + findSessionStateExtraData(ev.SessionState.Extra), + ev.SessionState.EarlyData, + ) + } + if ev.SessionState.EarlyData { + ev.SessionState.EarlyData = allowEarlyData + } + return nil + default: + // Unknown events should be ignored. + // crypto/tls will ensure that this is safe to do. + // See the discussion following https://github.com/golang/go/issues/68124#issuecomment-2187042510 for details. + return nil + } +} + +func (h *cryptoSetup) NextEvent() Event { + if len(h.events) == 0 { + return Event{Kind: EventNoEvent} + } + ev := h.events[0] + h.events = h.events[1:] + return ev +} + +func (h *cryptoSetup) handleTransportParameters(data []byte) error { + var tp wire.TransportParameters + if err := tp.Unmarshal(data, h.perspective.Opposite()); err != nil { + return err + } + h.peerParams = &tp + h.events = append(h.events, Event{Kind: EventReceivedTransportParameters, TransportParameters: h.peerParams}) + return nil +} + +// must be called after receiving the transport parameters +func (h *cryptoSetup) marshalDataForSessionState(earlyData bool) []byte { + b := make([]byte, 0, 256) + b = quicvarint.Append(b, clientSessionStateRevision) + if earlyData { + // only save the transport parameters for 0-RTT enabled session tickets + return h.peerParams.MarshalForSessionTicket(b) + } + return b +} + +func (h *cryptoSetup) handleDataFromSessionState(data []byte, earlyData bool) (allowEarlyData bool) { + tp, err := decodeDataFromSessionState(data, earlyData) + if err != nil { + h.logger.Debugf("Restoring of transport parameters from session ticket failed: %s", err.Error()) + return + } + // The session ticket might have been saved from a connection that allowed 0-RTT, + // and therefore contain transport parameters. + // Only use them if 0-RTT is actually used on the new connection. + if tp != nil && h.allow0RTT { + h.zeroRTTParameters = tp + return true + } + return false +} + +func decodeDataFromSessionState(b []byte, earlyData bool) (*wire.TransportParameters, error) { + ver, l, err := quicvarint.Parse(b) + if err != nil { + return nil, err + } + b = b[l:] + if ver != clientSessionStateRevision { + return nil, fmt.Errorf("mismatching version. Got %d, expected %d", ver, clientSessionStateRevision) + } + if !earlyData { + return nil, nil + } + var tp wire.TransportParameters + if err := tp.UnmarshalFromSessionTicket(b); err != nil { + return nil, err + } + return &tp, nil +} + +func (h *cryptoSetup) getDataForSessionTicket() []byte { + return (&sessionTicket{ + Parameters: h.ourParams, + }).Marshal() +} + +// GetSessionTicket generates a new session ticket. +// Due to limitations in crypto/tls, it's only possible to generate a single session ticket per connection. +// It is only valid for the server. +func (h *cryptoSetup) GetSessionTicket() ([]byte, error) { + if err := h.conn.SendSessionTicket(tls.QUICSessionTicketOptions{ + EarlyData: h.allow0RTT, + Extra: [][]byte{addSessionStateExtraPrefix(h.getDataForSessionTicket())}, + }); err != nil { + // Session tickets might be disabled by tls.Config.SessionTicketsDisabled. + // We can't check h.tlsConfig here, since the actual config might have been obtained from + // the GetConfigForClient callback. + // See https://github.com/golang/go/issues/62032. + // Once that issue is resolved, this error assertion can be removed. + if strings.Contains(err.Error(), "session ticket keys unavailable") { + return nil, nil + } + return nil, err + } + ev := h.conn.NextEvent() + if ev.Kind != tls.QUICWriteData || ev.Level != tls.QUICEncryptionLevelApplication { + panic("crypto/tls bug: where's my session ticket?") + } + ticket := ev.Data + if ev := h.conn.NextEvent(); ev.Kind != tls.QUICNoEvent { + panic("crypto/tls bug: why more than one ticket?") + } + return ticket, nil +} + +// handleSessionTicket is called for the server when receiving the client's session ticket. +// It reads parameters from the session ticket and checks whether to accept 0-RTT if the session ticket enabled 0-RTT. +// Note that the fact that the session ticket allows 0-RTT doesn't mean that the actual TLS handshake enables 0-RTT: +// A client may use a 0-RTT enabled session to resume a TLS session without using 0-RTT. +func (h *cryptoSetup) handleSessionTicket(data []byte, using0RTT bool) (allowEarlyData bool) { + var t sessionTicket + if err := t.Unmarshal(data); err != nil { + h.logger.Debugf("Unmarshalling session ticket failed: %s", err.Error()) + return false + } + if !using0RTT { + return false + } + valid := h.ourParams.ValidFor0RTT(t.Parameters) + if !valid { + h.logger.Debugf("Transport parameters changed. Rejecting 0-RTT.") + return false + } + if !h.allow0RTT { + h.logger.Debugf("0-RTT not allowed. Rejecting 0-RTT.") + return false + } + return true +} + +// rejected0RTT is called for the client when the server rejects 0-RTT. +func (h *cryptoSetup) rejected0RTT() { + h.logger.Debugf("0-RTT was rejected. Dropping 0-RTT keys.") + + had0RTTKeys := h.zeroRTTSealer != nil + h.zeroRTTSealer = nil + + if had0RTTKeys { + h.events = append(h.events, Event{Kind: EventDiscard0RTTKeys}) + } +} + +func (h *cryptoSetup) setReadKey(el tls.QUICEncryptionLevel, suiteID uint16, trafficSecret []byte) { + suite := getCipherSuite(suiteID) + //nolint:exhaustive // The TLS stack doesn't export Initial keys. + switch el { + case tls.QUICEncryptionLevelEarly: + if h.perspective == protocol.PerspectiveClient { + panic("Received 0-RTT read key for the client") + } + h.zeroRTTOpener = newLongHeaderOpener( + createAEAD(suite, trafficSecret, h.version), + newHeaderProtector(suite, trafficSecret, true, h.version), + ) + h.used0RTT.Store(true) + if h.logger.Debug() { + h.logger.Debugf("Installed 0-RTT Read keys (using %s)", tls.CipherSuiteName(suite.ID)) + } + case tls.QUICEncryptionLevelHandshake: + h.handshakeOpener = newLongHeaderOpener( + createAEAD(suite, trafficSecret, h.version), + newHeaderProtector(suite, trafficSecret, true, h.version), + ) + if h.logger.Debug() { + h.logger.Debugf("Installed Handshake Read keys (using %s)", tls.CipherSuiteName(suite.ID)) + } + case tls.QUICEncryptionLevelApplication: + h.aead.SetReadKey(suite, trafficSecret) + h.has1RTTOpener = true + if h.logger.Debug() { + h.logger.Debugf("Installed 1-RTT Read keys (using %s)", tls.CipherSuiteName(suite.ID)) + } + default: + panic("unexpected read encryption level") + } + h.events = append(h.events, Event{Kind: EventReceivedReadKeys}) + if h.tracer != nil && h.tracer.UpdatedKeyFromTLS != nil { + h.tracer.UpdatedKeyFromTLS(protocol.FromTLSEncryptionLevel(el), h.perspective.Opposite()) + } +} + +func (h *cryptoSetup) setWriteKey(el tls.QUICEncryptionLevel, suiteID uint16, trafficSecret []byte) { + suite := getCipherSuite(suiteID) + //nolint:exhaustive // The TLS stack doesn't export Initial keys. + switch el { + case tls.QUICEncryptionLevelEarly: + if h.perspective == protocol.PerspectiveServer { + panic("Received 0-RTT write key for the server") + } + h.zeroRTTSealer = newLongHeaderSealer( + createAEAD(suite, trafficSecret, h.version), + newHeaderProtector(suite, trafficSecret, true, h.version), + ) + if h.logger.Debug() { + h.logger.Debugf("Installed 0-RTT Write keys (using %s)", tls.CipherSuiteName(suite.ID)) + } + if h.tracer != nil && h.tracer.UpdatedKeyFromTLS != nil { + h.tracer.UpdatedKeyFromTLS(protocol.Encryption0RTT, h.perspective) + } + // don't set used0RTT here. 0-RTT might still get rejected. + return + case tls.QUICEncryptionLevelHandshake: + h.handshakeSealer = newLongHeaderSealer( + createAEAD(suite, trafficSecret, h.version), + newHeaderProtector(suite, trafficSecret, true, h.version), + ) + if h.logger.Debug() { + h.logger.Debugf("Installed Handshake Write keys (using %s)", tls.CipherSuiteName(suite.ID)) + } + case tls.QUICEncryptionLevelApplication: + h.aead.SetWriteKey(suite, trafficSecret) + h.has1RTTSealer = true + if h.logger.Debug() { + h.logger.Debugf("Installed 1-RTT Write keys (using %s)", tls.CipherSuiteName(suite.ID)) + } + if h.zeroRTTSealer != nil { + // Once we receive handshake keys, we know that 0-RTT was not rejected. + h.used0RTT.Store(true) + h.zeroRTTSealer = nil + h.logger.Debugf("Dropping 0-RTT keys.") + if h.tracer != nil && h.tracer.DroppedEncryptionLevel != nil { + h.tracer.DroppedEncryptionLevel(protocol.Encryption0RTT) + } + } + default: + panic("unexpected write encryption level") + } + if h.tracer != nil && h.tracer.UpdatedKeyFromTLS != nil { + h.tracer.UpdatedKeyFromTLS(protocol.FromTLSEncryptionLevel(el), h.perspective) + } +} + +// writeRecord is called when TLS writes data +func (h *cryptoSetup) writeRecord(encLevel tls.QUICEncryptionLevel, p []byte) { + //nolint:exhaustive // handshake records can only be written for Initial and Handshake. + switch encLevel { + case tls.QUICEncryptionLevelInitial: + h.events = append(h.events, Event{Kind: EventWriteInitialData, Data: p}) + case tls.QUICEncryptionLevelHandshake: + h.events = append(h.events, Event{Kind: EventWriteHandshakeData, Data: p}) + case tls.QUICEncryptionLevelApplication: + panic("unexpected write") + default: + panic(fmt.Sprintf("unexpected write encryption level: %s", encLevel)) + } +} + +func (h *cryptoSetup) DiscardInitialKeys() { + dropped := h.initialOpener != nil + h.initialOpener = nil + h.initialSealer = nil + if dropped { + h.logger.Debugf("Dropping Initial keys.") + } +} + +func (h *cryptoSetup) handshakeComplete() { + h.handshakeCompleteTime = time.Now() + h.events = append(h.events, Event{Kind: EventHandshakeComplete}) +} + +func (h *cryptoSetup) SetHandshakeConfirmed() { + h.aead.SetHandshakeConfirmed() + // drop Handshake keys + var dropped bool + if h.handshakeOpener != nil { + h.handshakeOpener = nil + h.handshakeSealer = nil + dropped = true + } + if dropped { + h.logger.Debugf("Dropping Handshake keys.") + } +} + +func (h *cryptoSetup) GetInitialSealer() (LongHeaderSealer, error) { + if h.initialSealer == nil { + return nil, ErrKeysDropped + } + return h.initialSealer, nil +} + +func (h *cryptoSetup) Get0RTTSealer() (LongHeaderSealer, error) { + if h.zeroRTTSealer == nil { + return nil, ErrKeysDropped + } + return h.zeroRTTSealer, nil +} + +func (h *cryptoSetup) GetHandshakeSealer() (LongHeaderSealer, error) { + if h.handshakeSealer == nil { + if h.initialSealer == nil { + return nil, ErrKeysDropped + } + return nil, ErrKeysNotYetAvailable + } + return h.handshakeSealer, nil +} + +func (h *cryptoSetup) Get1RTTSealer() (ShortHeaderSealer, error) { + if !h.has1RTTSealer { + return nil, ErrKeysNotYetAvailable + } + return h.aead, nil +} + +func (h *cryptoSetup) GetInitialOpener() (LongHeaderOpener, error) { + if h.initialOpener == nil { + return nil, ErrKeysDropped + } + return h.initialOpener, nil +} + +func (h *cryptoSetup) Get0RTTOpener() (LongHeaderOpener, error) { + if h.zeroRTTOpener == nil { + if h.initialOpener != nil { + return nil, ErrKeysNotYetAvailable + } + // if the initial opener is also not available, the keys were already dropped + return nil, ErrKeysDropped + } + return h.zeroRTTOpener, nil +} + +func (h *cryptoSetup) GetHandshakeOpener() (LongHeaderOpener, error) { + if h.handshakeOpener == nil { + if h.initialOpener != nil { + return nil, ErrKeysNotYetAvailable + } + // if the initial opener is also not available, the keys were already dropped + return nil, ErrKeysDropped + } + return h.handshakeOpener, nil +} + +func (h *cryptoSetup) Get1RTTOpener() (ShortHeaderOpener, error) { + if h.zeroRTTOpener != nil && time.Since(h.handshakeCompleteTime) > 3*h.rttStats.PTO(true) { + h.zeroRTTOpener = nil + h.logger.Debugf("Dropping 0-RTT keys.") + if h.tracer != nil && h.tracer.DroppedEncryptionLevel != nil { + h.tracer.DroppedEncryptionLevel(protocol.Encryption0RTT) + } + } + + if !h.has1RTTOpener { + return nil, ErrKeysNotYetAvailable + } + return h.aead, nil +} + +func (h *cryptoSetup) ConnectionState() ConnectionState { + return ConnectionState{ + ConnectionState: h.conn.ConnectionState(), + Used0RTT: h.used0RTT.Load(), + } +} + +func wrapError(err error) error { + if alertErr := tls.AlertError(0); errors.As(err, &alertErr) { + return qerr.NewLocalCryptoError(uint8(alertErr), err) + } + return &qerr.TransportError{ErrorCode: qerr.InternalError, ErrorMessage: err.Error()} +} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/fake_conn.go b/vendor/github.com/quic-go/quic-go/internal/handshake/fake_conn.go new file mode 100644 index 0000000..54af823 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/fake_conn.go @@ -0,0 +1,21 @@ +package handshake + +import ( + "net" + "time" +) + +type conn struct { + localAddr, remoteAddr net.Addr +} + +var _ net.Conn = &conn{} + +func (c *conn) Read([]byte) (int, error) { return 0, nil } +func (c *conn) Write([]byte) (int, error) { return 0, nil } +func (c *conn) Close() error { return nil } +func (c *conn) RemoteAddr() net.Addr { return c.remoteAddr } +func (c *conn) LocalAddr() net.Addr { return c.localAddr } +func (c *conn) SetReadDeadline(time.Time) error { return nil } +func (c *conn) SetWriteDeadline(time.Time) error { return nil } +func (c *conn) SetDeadline(time.Time) error { return nil } diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/header_protector.go b/vendor/github.com/quic-go/quic-go/internal/handshake/header_protector.go new file mode 100644 index 0000000..2c5ee42 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/header_protector.go @@ -0,0 +1,134 @@ +package handshake + +import ( + "crypto/aes" + "crypto/cipher" + "crypto/tls" + "encoding/binary" + "fmt" + + "golang.org/x/crypto/chacha20" + + "github.com/quic-go/quic-go/internal/protocol" +) + +type headerProtector interface { + EncryptHeader(sample []byte, firstByte *byte, hdrBytes []byte) + DecryptHeader(sample []byte, firstByte *byte, hdrBytes []byte) +} + +func hkdfHeaderProtectionLabel(v protocol.Version) string { + if v == protocol.Version2 { + return "quicv2 hp" + } + return "quic hp" +} + +func newHeaderProtector(suite *cipherSuite, trafficSecret []byte, isLongHeader bool, v protocol.Version) headerProtector { + hkdfLabel := hkdfHeaderProtectionLabel(v) + switch suite.ID { + case tls.TLS_AES_128_GCM_SHA256, tls.TLS_AES_256_GCM_SHA384: + return newAESHeaderProtector(suite, trafficSecret, isLongHeader, hkdfLabel) + case tls.TLS_CHACHA20_POLY1305_SHA256: + return newChaChaHeaderProtector(suite, trafficSecret, isLongHeader, hkdfLabel) + default: + panic(fmt.Sprintf("Invalid cipher suite id: %d", suite.ID)) + } +} + +type aesHeaderProtector struct { + mask [16]byte // AES always has a 16 byte block size + block cipher.Block + isLongHeader bool +} + +var _ headerProtector = &aesHeaderProtector{} + +func newAESHeaderProtector(suite *cipherSuite, trafficSecret []byte, isLongHeader bool, hkdfLabel string) headerProtector { + hpKey := hkdfExpandLabel(suite.Hash, trafficSecret, []byte{}, hkdfLabel, suite.KeyLen) + block, err := aes.NewCipher(hpKey) + if err != nil { + panic(fmt.Sprintf("error creating new AES cipher: %s", err)) + } + return &aesHeaderProtector{ + block: block, + isLongHeader: isLongHeader, + } +} + +func (p *aesHeaderProtector) DecryptHeader(sample []byte, firstByte *byte, hdrBytes []byte) { + p.apply(sample, firstByte, hdrBytes) +} + +func (p *aesHeaderProtector) EncryptHeader(sample []byte, firstByte *byte, hdrBytes []byte) { + p.apply(sample, firstByte, hdrBytes) +} + +func (p *aesHeaderProtector) apply(sample []byte, firstByte *byte, hdrBytes []byte) { + if len(sample) != len(p.mask) { + panic("invalid sample size") + } + p.block.Encrypt(p.mask[:], sample) + if p.isLongHeader { + *firstByte ^= p.mask[0] & 0xf + } else { + *firstByte ^= p.mask[0] & 0x1f + } + for i := range hdrBytes { + hdrBytes[i] ^= p.mask[i+1] + } +} + +type chachaHeaderProtector struct { + mask [5]byte + + key [32]byte + isLongHeader bool +} + +var _ headerProtector = &chachaHeaderProtector{} + +func newChaChaHeaderProtector(suite *cipherSuite, trafficSecret []byte, isLongHeader bool, hkdfLabel string) headerProtector { + hpKey := hkdfExpandLabel(suite.Hash, trafficSecret, []byte{}, hkdfLabel, suite.KeyLen) + + p := &chachaHeaderProtector{ + isLongHeader: isLongHeader, + } + copy(p.key[:], hpKey) + return p +} + +func (p *chachaHeaderProtector) DecryptHeader(sample []byte, firstByte *byte, hdrBytes []byte) { + p.apply(sample, firstByte, hdrBytes) +} + +func (p *chachaHeaderProtector) EncryptHeader(sample []byte, firstByte *byte, hdrBytes []byte) { + p.apply(sample, firstByte, hdrBytes) +} + +func (p *chachaHeaderProtector) apply(sample []byte, firstByte *byte, hdrBytes []byte) { + if len(sample) != 16 { + panic("invalid sample size") + } + for i := 0; i < 5; i++ { + p.mask[i] = 0 + } + cipher, err := chacha20.NewUnauthenticatedCipher(p.key[:], sample[4:]) + if err != nil { + panic(err) + } + cipher.SetCounter(binary.LittleEndian.Uint32(sample[:4])) + cipher.XORKeyStream(p.mask[:], p.mask[:]) + p.applyMask(firstByte, hdrBytes) +} + +func (p *chachaHeaderProtector) applyMask(firstByte *byte, hdrBytes []byte) { + if p.isLongHeader { + *firstByte ^= p.mask[0] & 0xf + } else { + *firstByte ^= p.mask[0] & 0x1f + } + for i := range hdrBytes { + hdrBytes[i] ^= p.mask[i+1] + } +} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/hkdf.go b/vendor/github.com/quic-go/quic-go/internal/handshake/hkdf.go new file mode 100644 index 0000000..3da97cd --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/hkdf.go @@ -0,0 +1,27 @@ +package handshake + +import ( + "crypto" + "encoding/binary" + + "golang.org/x/crypto/hkdf" +) + +// hkdfExpandLabel HKDF expands a label as defined in RFC 8446, section 7.1. +func hkdfExpandLabel(hash crypto.Hash, secret, context []byte, label string, length int) []byte { + b := make([]byte, 3, 3+6+len(label)+1+len(context)) + binary.BigEndian.PutUint16(b, uint16(length)) + b[2] = uint8(6 + len(label)) + b = append(b, []byte("tls13 ")...) + b = append(b, []byte(label)...) + b = b[:3+6+len(label)+1] + b[3+6+len(label)] = uint8(len(context)) + b = append(b, context...) + + out := make([]byte, length) + n, err := hkdf.Expand(hash.New, secret, b).Read(out) + if err != nil || n != length { + panic("quic: HKDF-Expand-Label invocation failed unexpectedly") + } + return out +} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/initial_aead.go b/vendor/github.com/quic-go/quic-go/internal/handshake/initial_aead.go new file mode 100644 index 0000000..b8aa7e3 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/initial_aead.go @@ -0,0 +1,71 @@ +package handshake + +import ( + "crypto" + "crypto/tls" + + "golang.org/x/crypto/hkdf" + + "github.com/quic-go/quic-go/internal/protocol" +) + +var ( + quicSaltV1 = []byte{0x38, 0x76, 0x2c, 0xf7, 0xf5, 0x59, 0x34, 0xb3, 0x4d, 0x17, 0x9a, 0xe6, 0xa4, 0xc8, 0x0c, 0xad, 0xcc, 0xbb, 0x7f, 0x0a} + quicSaltV2 = []byte{0x0d, 0xed, 0xe3, 0xde, 0xf7, 0x00, 0xa6, 0xdb, 0x81, 0x93, 0x81, 0xbe, 0x6e, 0x26, 0x9d, 0xcb, 0xf9, 0xbd, 0x2e, 0xd9} +) + +const ( + hkdfLabelKeyV1 = "quic key" + hkdfLabelKeyV2 = "quicv2 key" + hkdfLabelIVV1 = "quic iv" + hkdfLabelIVV2 = "quicv2 iv" +) + +func getSalt(v protocol.Version) []byte { + if v == protocol.Version2 { + return quicSaltV2 + } + return quicSaltV1 +} + +var initialSuite = getCipherSuite(tls.TLS_AES_128_GCM_SHA256) + +// NewInitialAEAD creates a new AEAD for Initial encryption / decryption. +func NewInitialAEAD(connID protocol.ConnectionID, pers protocol.Perspective, v protocol.Version) (LongHeaderSealer, LongHeaderOpener) { + clientSecret, serverSecret := computeSecrets(connID, v) + var mySecret, otherSecret []byte + if pers == protocol.PerspectiveClient { + mySecret = clientSecret + otherSecret = serverSecret + } else { + mySecret = serverSecret + otherSecret = clientSecret + } + myKey, myIV := computeInitialKeyAndIV(mySecret, v) + otherKey, otherIV := computeInitialKeyAndIV(otherSecret, v) + + encrypter := initialSuite.AEAD(myKey, myIV) + decrypter := initialSuite.AEAD(otherKey, otherIV) + + return newLongHeaderSealer(encrypter, newHeaderProtector(initialSuite, mySecret, true, v)), + newLongHeaderOpener(decrypter, newAESHeaderProtector(initialSuite, otherSecret, true, hkdfHeaderProtectionLabel(v))) +} + +func computeSecrets(connID protocol.ConnectionID, v protocol.Version) (clientSecret, serverSecret []byte) { + initialSecret := hkdf.Extract(crypto.SHA256.New, connID.Bytes(), getSalt(v)) + clientSecret = hkdfExpandLabel(crypto.SHA256, initialSecret, []byte{}, "client in", crypto.SHA256.Size()) + serverSecret = hkdfExpandLabel(crypto.SHA256, initialSecret, []byte{}, "server in", crypto.SHA256.Size()) + return +} + +func computeInitialKeyAndIV(secret []byte, v protocol.Version) (key, iv []byte) { + keyLabel := hkdfLabelKeyV1 + ivLabel := hkdfLabelIVV1 + if v == protocol.Version2 { + keyLabel = hkdfLabelKeyV2 + ivLabel = hkdfLabelIVV2 + } + key = hkdfExpandLabel(crypto.SHA256, secret, []byte{}, keyLabel, 16) + iv = hkdfExpandLabel(crypto.SHA256, secret, []byte{}, ivLabel, 12) + return +} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/interface.go b/vendor/github.com/quic-go/quic-go/internal/handshake/interface.go new file mode 100644 index 0000000..c3a59fc --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/interface.go @@ -0,0 +1,140 @@ +package handshake + +import ( + "context" + "crypto/tls" + "errors" + "io" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/wire" +) + +var ( + // ErrKeysNotYetAvailable is returned when an opener or a sealer is requested for an encryption level, + // but the corresponding opener has not yet been initialized + // This can happen when packets arrive out of order. + ErrKeysNotYetAvailable = errors.New("CryptoSetup: keys at this encryption level not yet available") + // ErrKeysDropped is returned when an opener or a sealer is requested for an encryption level, + // but the corresponding keys have already been dropped. + ErrKeysDropped = errors.New("CryptoSetup: keys were already dropped") + // ErrDecryptionFailed is returned when the AEAD fails to open the packet. + ErrDecryptionFailed = errors.New("decryption failed") +) + +type headerDecryptor interface { + DecryptHeader(sample []byte, firstByte *byte, pnBytes []byte) +} + +// LongHeaderOpener opens a long header packet +type LongHeaderOpener interface { + headerDecryptor + DecodePacketNumber(wirePN protocol.PacketNumber, wirePNLen protocol.PacketNumberLen) protocol.PacketNumber + Open(dst, src []byte, pn protocol.PacketNumber, associatedData []byte) ([]byte, error) +} + +// ShortHeaderOpener opens a short header packet +type ShortHeaderOpener interface { + headerDecryptor + DecodePacketNumber(wirePN protocol.PacketNumber, wirePNLen protocol.PacketNumberLen) protocol.PacketNumber + Open(dst, src []byte, rcvTime time.Time, pn protocol.PacketNumber, kp protocol.KeyPhaseBit, associatedData []byte) ([]byte, error) +} + +// LongHeaderSealer seals a long header packet +type LongHeaderSealer interface { + Seal(dst, src []byte, packetNumber protocol.PacketNumber, associatedData []byte) []byte + EncryptHeader(sample []byte, firstByte *byte, pnBytes []byte) + Overhead() int +} + +// ShortHeaderSealer seals a short header packet +type ShortHeaderSealer interface { + LongHeaderSealer + KeyPhase() protocol.KeyPhaseBit +} + +type ConnectionState struct { + tls.ConnectionState + Used0RTT bool +} + +// EventKind is the kind of handshake event. +type EventKind uint8 + +const ( + // EventNoEvent signals that there are no new handshake events + EventNoEvent EventKind = iota + 1 + // EventWriteInitialData contains new CRYPTO data to send at the Initial encryption level + EventWriteInitialData + // EventWriteHandshakeData contains new CRYPTO data to send at the Handshake encryption level + EventWriteHandshakeData + // EventReceivedReadKeys signals that new decryption keys are available. + // It doesn't say which encryption level those keys are for. + EventReceivedReadKeys + // EventDiscard0RTTKeys signals that the Handshake keys were discarded. + EventDiscard0RTTKeys + // EventReceivedTransportParameters contains the transport parameters sent by the peer. + EventReceivedTransportParameters + // EventRestoredTransportParameters contains the transport parameters restored from the session ticket. + // It is only used for the client. + EventRestoredTransportParameters + // EventHandshakeComplete signals that the TLS handshake was completed. + EventHandshakeComplete +) + +func (k EventKind) String() string { + switch k { + case EventNoEvent: + return "EventNoEvent" + case EventWriteInitialData: + return "EventWriteInitialData" + case EventWriteHandshakeData: + return "EventWriteHandshakeData" + case EventReceivedReadKeys: + return "EventReceivedReadKeys" + case EventDiscard0RTTKeys: + return "EventDiscard0RTTKeys" + case EventReceivedTransportParameters: + return "EventReceivedTransportParameters" + case EventRestoredTransportParameters: + return "EventRestoredTransportParameters" + case EventHandshakeComplete: + return "EventHandshakeComplete" + default: + return "Unknown EventKind" + } +} + +// Event is a handshake event. +type Event struct { + Kind EventKind + Data []byte + TransportParameters *wire.TransportParameters +} + +// CryptoSetup handles the handshake and protecting / unprotecting packets +type CryptoSetup interface { + StartHandshake(context.Context) error + io.Closer + ChangeConnectionID(protocol.ConnectionID) + GetSessionTicket() ([]byte, error) + + HandleMessage([]byte, protocol.EncryptionLevel) error + NextEvent() Event + + SetLargest1RTTAcked(protocol.PacketNumber) error + DiscardInitialKeys() + SetHandshakeConfirmed() + ConnectionState() ConnectionState + + GetInitialOpener() (LongHeaderOpener, error) + GetHandshakeOpener() (LongHeaderOpener, error) + Get0RTTOpener() (LongHeaderOpener, error) + Get1RTTOpener() (ShortHeaderOpener, error) + + GetInitialSealer() (LongHeaderSealer, error) + GetHandshakeSealer() (LongHeaderSealer, error) + Get0RTTSealer() (LongHeaderSealer, error) + Get1RTTSealer() (ShortHeaderSealer, error) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/retry.go b/vendor/github.com/quic-go/quic-go/internal/handshake/retry.go new file mode 100644 index 0000000..27a09e2 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/retry.go @@ -0,0 +1,66 @@ +package handshake + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "fmt" + "sync" + + "github.com/quic-go/quic-go/internal/protocol" +) + +// Instead of using an init function, the AEADs are created lazily. +// For more details see https://github.com/quic-go/quic-go/issues/4894. +var ( + retryAEADv1 cipher.AEAD // used for QUIC v1 (RFC 9000) + retryAEADv2 cipher.AEAD // used for QUIC v2 (RFC 9369) +) + +func initAEAD(key [16]byte) cipher.AEAD { + aes, err := aes.NewCipher(key[:]) + if err != nil { + panic(err) + } + aead, err := cipher.NewGCM(aes) + if err != nil { + panic(err) + } + return aead +} + +var ( + retryBuf bytes.Buffer + retryMutex sync.Mutex + retryNonceV1 = [12]byte{0x46, 0x15, 0x99, 0xd3, 0x5d, 0x63, 0x2b, 0xf2, 0x23, 0x98, 0x25, 0xbb} + retryNonceV2 = [12]byte{0xd8, 0x69, 0x69, 0xbc, 0x2d, 0x7c, 0x6d, 0x99, 0x90, 0xef, 0xb0, 0x4a} +) + +// GetRetryIntegrityTag calculates the integrity tag on a Retry packet +func GetRetryIntegrityTag(retry []byte, origDestConnID protocol.ConnectionID, version protocol.Version) *[16]byte { + retryMutex.Lock() + defer retryMutex.Unlock() + + retryBuf.WriteByte(uint8(origDestConnID.Len())) + retryBuf.Write(origDestConnID.Bytes()) + retryBuf.Write(retry) + defer retryBuf.Reset() + + var tag [16]byte + var sealed []byte + if version == protocol.Version2 { + if retryAEADv2 == nil { + retryAEADv2 = initAEAD([16]byte{0x8f, 0xb4, 0xb0, 0x1b, 0x56, 0xac, 0x48, 0xe2, 0x60, 0xfb, 0xcb, 0xce, 0xad, 0x7c, 0xcc, 0x92}) + } + sealed = retryAEADv2.Seal(tag[:0], retryNonceV2[:], nil, retryBuf.Bytes()) + } else { + if retryAEADv1 == nil { + retryAEADv1 = initAEAD([16]byte{0xbe, 0x0c, 0x69, 0x0b, 0x9f, 0x66, 0x57, 0x5a, 0x1d, 0x76, 0x6b, 0x54, 0xe3, 0x68, 0xc8, 0x4e}) + } + sealed = retryAEADv1.Seal(tag[:0], retryNonceV1[:], nil, retryBuf.Bytes()) + } + if len(sealed) != 16 { + panic(fmt.Sprintf("unexpected Retry integrity tag length: %d", len(sealed))) + } + return &tag +} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/session_ticket.go b/vendor/github.com/quic-go/quic-go/internal/handshake/session_ticket.go new file mode 100644 index 0000000..875b0d8 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/session_ticket.go @@ -0,0 +1,56 @@ +package handshake + +import ( + "bytes" + "errors" + "fmt" + + "github.com/quic-go/quic-go/internal/wire" + "github.com/quic-go/quic-go/quicvarint" +) + +const sessionTicketRevision = 5 + +type sessionTicket struct { + Parameters *wire.TransportParameters +} + +func (t *sessionTicket) Marshal() []byte { + b := make([]byte, 0, 256) + b = quicvarint.Append(b, sessionTicketRevision) + return t.Parameters.MarshalForSessionTicket(b) +} + +func (t *sessionTicket) Unmarshal(b []byte) error { + rev, l, err := quicvarint.Parse(b) + if err != nil { + return errors.New("failed to read session ticket revision") + } + b = b[l:] + if rev != sessionTicketRevision { + return fmt.Errorf("unknown session ticket revision: %d", rev) + } + var tp wire.TransportParameters + if err := tp.UnmarshalFromSessionTicket(b); err != nil { + return fmt.Errorf("unmarshaling transport parameters from session ticket failed: %s", err.Error()) + } + t.Parameters = &tp + return nil +} + +const extraPrefix = "quic-go1" + +func addSessionStateExtraPrefix(b []byte) []byte { + return append([]byte(extraPrefix), b...) +} + +func findSessionStateExtraData(extras [][]byte) []byte { + prefix := []byte(extraPrefix) + for _, extra := range extras { + if len(extra) < len(prefix) || !bytes.Equal(prefix, extra[:len(prefix)]) { + continue + } + return extra[len(prefix):] + } + return nil +} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/tls_config.go b/vendor/github.com/quic-go/quic-go/internal/handshake/tls_config.go new file mode 100644 index 0000000..c4c0d22 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/tls_config.go @@ -0,0 +1,39 @@ +package handshake + +import ( + "crypto/tls" + "net" +) + +func setupConfigForServer(conf *tls.Config, localAddr, remoteAddr net.Addr) *tls.Config { + // Workaround for https://github.com/golang/go/issues/60506. + // This initializes the session tickets _before_ cloning the config. + _, _ = conf.DecryptTicket(nil, tls.ConnectionState{}) + + conf = conf.Clone() + conf.MinVersion = tls.VersionTLS13 + + // The tls.Config contains two callbacks that pass in a tls.ClientHelloInfo. + // Since crypto/tls doesn't do it, we need to make sure to set the Conn field with a fake net.Conn + // that allows the caller to get the local and the remote address. + if conf.GetConfigForClient != nil { + gcfc := conf.GetConfigForClient + conf.GetConfigForClient = func(info *tls.ClientHelloInfo) (*tls.Config, error) { + info.Conn = &conn{localAddr: localAddr, remoteAddr: remoteAddr} + c, err := gcfc(info) + if c != nil { + // we're returning a tls.Config here, so we need to apply this recursively + c = setupConfigForServer(c, localAddr, remoteAddr) + } + return c, err + } + } + if conf.GetCertificate != nil { + gc := conf.GetCertificate + conf.GetCertificate = func(info *tls.ClientHelloInfo) (*tls.Certificate, error) { + info.Conn = &conn{localAddr: localAddr, remoteAddr: remoteAddr} + return gc(info) + } + } + return conf +} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/token_generator.go b/vendor/github.com/quic-go/quic-go/internal/handshake/token_generator.go new file mode 100644 index 0000000..933670d --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/token_generator.go @@ -0,0 +1,126 @@ +package handshake + +import ( + "bytes" + "encoding/asn1" + "fmt" + "net" + "time" + + "github.com/quic-go/quic-go/internal/protocol" +) + +const ( + tokenPrefixIP byte = iota + tokenPrefixString +) + +// A Token is derived from the client address and can be used to verify the ownership of this address. +type Token struct { + IsRetryToken bool + SentTime time.Time + encodedRemoteAddr []byte + // only set for tokens sent in NEW_TOKEN frames + RTT time.Duration + // only set for retry tokens + OriginalDestConnectionID protocol.ConnectionID + RetrySrcConnectionID protocol.ConnectionID +} + +// ValidateRemoteAddr validates the address, but does not check expiration +func (t *Token) ValidateRemoteAddr(addr net.Addr) bool { + return bytes.Equal(encodeRemoteAddr(addr), t.encodedRemoteAddr) +} + +// token is the struct that is used for ASN1 serialization and deserialization +type token struct { + IsRetryToken bool + RemoteAddr []byte + Timestamp int64 + RTT int64 // in mus + OriginalDestConnectionID []byte + RetrySrcConnectionID []byte +} + +// A TokenGenerator generates tokens +type TokenGenerator struct { + tokenProtector tokenProtector +} + +// NewTokenGenerator initializes a new TokenGenerator +func NewTokenGenerator(key TokenProtectorKey) *TokenGenerator { + return &TokenGenerator{tokenProtector: *newTokenProtector(key)} +} + +// NewRetryToken generates a new token for a Retry for a given source address +func (g *TokenGenerator) NewRetryToken( + raddr net.Addr, + origDestConnID protocol.ConnectionID, + retrySrcConnID protocol.ConnectionID, +) ([]byte, error) { + data, err := asn1.Marshal(token{ + IsRetryToken: true, + RemoteAddr: encodeRemoteAddr(raddr), + OriginalDestConnectionID: origDestConnID.Bytes(), + RetrySrcConnectionID: retrySrcConnID.Bytes(), + Timestamp: time.Now().UnixNano(), + }) + if err != nil { + return nil, err + } + return g.tokenProtector.NewToken(data) +} + +// NewToken generates a new token to be sent in a NEW_TOKEN frame +func (g *TokenGenerator) NewToken(raddr net.Addr, rtt time.Duration) ([]byte, error) { + data, err := asn1.Marshal(token{ + RemoteAddr: encodeRemoteAddr(raddr), + Timestamp: time.Now().UnixNano(), + RTT: rtt.Microseconds(), + }) + if err != nil { + return nil, err + } + return g.tokenProtector.NewToken(data) +} + +// DecodeToken decodes a token +func (g *TokenGenerator) DecodeToken(encrypted []byte) (*Token, error) { + // if the client didn't send any token, DecodeToken will be called with a nil-slice + if len(encrypted) == 0 { + return nil, nil + } + + data, err := g.tokenProtector.DecodeToken(encrypted) + if err != nil { + return nil, err + } + t := &token{} + rest, err := asn1.Unmarshal(data, t) + if err != nil { + return nil, err + } + if len(rest) != 0 { + return nil, fmt.Errorf("rest when unpacking token: %d", len(rest)) + } + token := &Token{ + IsRetryToken: t.IsRetryToken, + SentTime: time.Unix(0, t.Timestamp), + encodedRemoteAddr: t.RemoteAddr, + } + if t.IsRetryToken { + token.OriginalDestConnectionID = protocol.ParseConnectionID(t.OriginalDestConnectionID) + token.RetrySrcConnectionID = protocol.ParseConnectionID(t.RetrySrcConnectionID) + } else { + token.RTT = time.Duration(t.RTT) * time.Microsecond + } + return token, nil +} + +// encodeRemoteAddr encodes a remote address such that it can be saved in the token +func encodeRemoteAddr(remoteAddr net.Addr) []byte { + if udpAddr, ok := remoteAddr.(*net.UDPAddr); ok { + return append([]byte{tokenPrefixIP}, udpAddr.IP...) + } + return append([]byte{tokenPrefixString}, []byte(remoteAddr.String())...) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/token_protector.go b/vendor/github.com/quic-go/quic-go/internal/handshake/token_protector.go new file mode 100644 index 0000000..1577918 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/token_protector.go @@ -0,0 +1,74 @@ +package handshake + +import ( + "crypto/aes" + "crypto/cipher" + "crypto/rand" + "crypto/sha256" + "fmt" + "io" + + "golang.org/x/crypto/hkdf" +) + +// TokenProtectorKey is the key used to encrypt both Retry and session resumption tokens. +type TokenProtectorKey [32]byte + +const tokenNonceSize = 32 + +// tokenProtector is used to create and verify a token +type tokenProtector struct { + key TokenProtectorKey +} + +// newTokenProtector creates a source for source address tokens +func newTokenProtector(key TokenProtectorKey) *tokenProtector { + return &tokenProtector{key: key} +} + +// NewToken encodes data into a new token. +func (s *tokenProtector) NewToken(data []byte) ([]byte, error) { + var nonce [tokenNonceSize]byte + if _, err := rand.Read(nonce[:]); err != nil { + return nil, err + } + aead, aeadNonce, err := s.createAEAD(nonce[:]) + if err != nil { + return nil, err + } + return append(nonce[:], aead.Seal(nil, aeadNonce, data, nil)...), nil +} + +// DecodeToken decodes a token. +func (s *tokenProtector) DecodeToken(p []byte) ([]byte, error) { + if len(p) < tokenNonceSize { + return nil, fmt.Errorf("token too short: %d", len(p)) + } + nonce := p[:tokenNonceSize] + aead, aeadNonce, err := s.createAEAD(nonce) + if err != nil { + return nil, err + } + return aead.Open(nil, aeadNonce, p[tokenNonceSize:], nil) +} + +func (s *tokenProtector) createAEAD(nonce []byte) (cipher.AEAD, []byte, error) { + h := hkdf.New(sha256.New, s.key[:], nonce, []byte("quic-go token source")) + key := make([]byte, 32) // use a 32 byte key, in order to select AES-256 + if _, err := io.ReadFull(h, key); err != nil { + return nil, nil, err + } + aeadNonce := make([]byte, 12) + if _, err := io.ReadFull(h, aeadNonce); err != nil { + return nil, nil, err + } + c, err := aes.NewCipher(key) + if err != nil { + return nil, nil, err + } + aead, err := cipher.NewGCM(c) + if err != nil { + return nil, nil, err + } + return aead, aeadNonce, nil +} diff --git a/vendor/github.com/quic-go/quic-go/internal/handshake/updatable_aead.go b/vendor/github.com/quic-go/quic-go/internal/handshake/updatable_aead.go new file mode 100644 index 0000000..415f85d --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/handshake/updatable_aead.go @@ -0,0 +1,340 @@ +package handshake + +import ( + "crypto" + "crypto/cipher" + "crypto/tls" + "encoding/binary" + "fmt" + "sync/atomic" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/logging" +) + +var keyUpdateInterval atomic.Uint64 + +func init() { + keyUpdateInterval.Store(protocol.KeyUpdateInterval) +} + +func SetKeyUpdateInterval(v uint64) (reset func()) { + old := keyUpdateInterval.Swap(v) + return func() { keyUpdateInterval.Store(old) } +} + +// FirstKeyUpdateInterval is the maximum number of packets we send or receive before initiating the first key update. +// It's a package-level variable to allow modifying it for testing purposes. +var FirstKeyUpdateInterval uint64 = 100 + +type updatableAEAD struct { + suite *cipherSuite + + keyPhase protocol.KeyPhase + largestAcked protocol.PacketNumber + firstPacketNumber protocol.PacketNumber + handshakeConfirmed bool + + invalidPacketLimit uint64 + invalidPacketCount uint64 + + // Time when the keys should be dropped. Keys are dropped on the next call to Open(). + prevRcvAEADExpiry time.Time + prevRcvAEAD cipher.AEAD + + firstRcvdWithCurrentKey protocol.PacketNumber + firstSentWithCurrentKey protocol.PacketNumber + highestRcvdPN protocol.PacketNumber // highest packet number received (which could be successfully unprotected) + numRcvdWithCurrentKey uint64 + numSentWithCurrentKey uint64 + rcvAEAD cipher.AEAD + sendAEAD cipher.AEAD + // caches cipher.AEAD.Overhead(). This speeds up calls to Overhead(). + aeadOverhead int + + nextRcvAEAD cipher.AEAD + nextSendAEAD cipher.AEAD + nextRcvTrafficSecret []byte + nextSendTrafficSecret []byte + + headerDecrypter headerProtector + headerEncrypter headerProtector + + rttStats *utils.RTTStats + + tracer *logging.ConnectionTracer + logger utils.Logger + version protocol.Version + + // use a single slice to avoid allocations + nonceBuf []byte +} + +var ( + _ ShortHeaderOpener = &updatableAEAD{} + _ ShortHeaderSealer = &updatableAEAD{} +) + +func newUpdatableAEAD(rttStats *utils.RTTStats, tracer *logging.ConnectionTracer, logger utils.Logger, version protocol.Version) *updatableAEAD { + return &updatableAEAD{ + firstPacketNumber: protocol.InvalidPacketNumber, + largestAcked: protocol.InvalidPacketNumber, + firstRcvdWithCurrentKey: protocol.InvalidPacketNumber, + firstSentWithCurrentKey: protocol.InvalidPacketNumber, + rttStats: rttStats, + tracer: tracer, + logger: logger, + version: version, + } +} + +func (a *updatableAEAD) rollKeys() { + if a.prevRcvAEAD != nil { + a.logger.Debugf("Dropping key phase %d ahead of scheduled time. Drop time was: %s", a.keyPhase-1, a.prevRcvAEADExpiry) + if a.tracer != nil && a.tracer.DroppedKey != nil { + a.tracer.DroppedKey(a.keyPhase - 1) + } + a.prevRcvAEADExpiry = time.Time{} + } + + a.keyPhase++ + a.firstRcvdWithCurrentKey = protocol.InvalidPacketNumber + a.firstSentWithCurrentKey = protocol.InvalidPacketNumber + a.numRcvdWithCurrentKey = 0 + a.numSentWithCurrentKey = 0 + a.prevRcvAEAD = a.rcvAEAD + a.rcvAEAD = a.nextRcvAEAD + a.sendAEAD = a.nextSendAEAD + + a.nextRcvTrafficSecret = a.getNextTrafficSecret(a.suite.Hash, a.nextRcvTrafficSecret) + a.nextSendTrafficSecret = a.getNextTrafficSecret(a.suite.Hash, a.nextSendTrafficSecret) + a.nextRcvAEAD = createAEAD(a.suite, a.nextRcvTrafficSecret, a.version) + a.nextSendAEAD = createAEAD(a.suite, a.nextSendTrafficSecret, a.version) +} + +func (a *updatableAEAD) startKeyDropTimer(now time.Time) { + d := 3 * a.rttStats.PTO(true) + a.logger.Debugf("Starting key drop timer to drop key phase %d (in %s)", a.keyPhase-1, d) + a.prevRcvAEADExpiry = now.Add(d) +} + +func (a *updatableAEAD) getNextTrafficSecret(hash crypto.Hash, ts []byte) []byte { + return hkdfExpandLabel(hash, ts, []byte{}, "quic ku", hash.Size()) +} + +// SetReadKey sets the read key. +// For the client, this function is called before SetWriteKey. +// For the server, this function is called after SetWriteKey. +func (a *updatableAEAD) SetReadKey(suite *cipherSuite, trafficSecret []byte) { + a.rcvAEAD = createAEAD(suite, trafficSecret, a.version) + a.headerDecrypter = newHeaderProtector(suite, trafficSecret, false, a.version) + if a.suite == nil { + a.setAEADParameters(a.rcvAEAD, suite) + } + + a.nextRcvTrafficSecret = a.getNextTrafficSecret(suite.Hash, trafficSecret) + a.nextRcvAEAD = createAEAD(suite, a.nextRcvTrafficSecret, a.version) +} + +// SetWriteKey sets the write key. +// For the client, this function is called after SetReadKey. +// For the server, this function is called before SetReadKey. +func (a *updatableAEAD) SetWriteKey(suite *cipherSuite, trafficSecret []byte) { + a.sendAEAD = createAEAD(suite, trafficSecret, a.version) + a.headerEncrypter = newHeaderProtector(suite, trafficSecret, false, a.version) + if a.suite == nil { + a.setAEADParameters(a.sendAEAD, suite) + } + + a.nextSendTrafficSecret = a.getNextTrafficSecret(suite.Hash, trafficSecret) + a.nextSendAEAD = createAEAD(suite, a.nextSendTrafficSecret, a.version) +} + +func (a *updatableAEAD) setAEADParameters(aead cipher.AEAD, suite *cipherSuite) { + a.nonceBuf = make([]byte, aead.NonceSize()) + a.aeadOverhead = aead.Overhead() + a.suite = suite + switch suite.ID { + case tls.TLS_AES_128_GCM_SHA256, tls.TLS_AES_256_GCM_SHA384: + a.invalidPacketLimit = protocol.InvalidPacketLimitAES + case tls.TLS_CHACHA20_POLY1305_SHA256: + a.invalidPacketLimit = protocol.InvalidPacketLimitChaCha + default: + panic(fmt.Sprintf("unknown cipher suite %d", suite.ID)) + } +} + +func (a *updatableAEAD) DecodePacketNumber(wirePN protocol.PacketNumber, wirePNLen protocol.PacketNumberLen) protocol.PacketNumber { + return protocol.DecodePacketNumber(wirePNLen, a.highestRcvdPN, wirePN) +} + +func (a *updatableAEAD) Open(dst, src []byte, rcvTime time.Time, pn protocol.PacketNumber, kp protocol.KeyPhaseBit, ad []byte) ([]byte, error) { + dec, err := a.open(dst, src, rcvTime, pn, kp, ad) + if err == ErrDecryptionFailed { + a.invalidPacketCount++ + if a.invalidPacketCount >= a.invalidPacketLimit { + return nil, &qerr.TransportError{ErrorCode: qerr.AEADLimitReached} + } + } + if err == nil { + a.highestRcvdPN = max(a.highestRcvdPN, pn) + } + return dec, err +} + +func (a *updatableAEAD) open(dst, src []byte, rcvTime time.Time, pn protocol.PacketNumber, kp protocol.KeyPhaseBit, ad []byte) ([]byte, error) { + if a.prevRcvAEAD != nil && !a.prevRcvAEADExpiry.IsZero() && rcvTime.After(a.prevRcvAEADExpiry) { + a.prevRcvAEAD = nil + a.logger.Debugf("Dropping key phase %d", a.keyPhase-1) + a.prevRcvAEADExpiry = time.Time{} + if a.tracer != nil && a.tracer.DroppedKey != nil { + a.tracer.DroppedKey(a.keyPhase - 1) + } + } + binary.BigEndian.PutUint64(a.nonceBuf[len(a.nonceBuf)-8:], uint64(pn)) + if kp != a.keyPhase.Bit() { + if a.keyPhase > 0 && a.firstRcvdWithCurrentKey == protocol.InvalidPacketNumber || pn < a.firstRcvdWithCurrentKey { + if a.prevRcvAEAD == nil { + return nil, ErrKeysDropped + } + // we updated the key, but the peer hasn't updated yet + dec, err := a.prevRcvAEAD.Open(dst, a.nonceBuf, src, ad) + if err != nil { + err = ErrDecryptionFailed + } + return dec, err + } + // try opening the packet with the next key phase + dec, err := a.nextRcvAEAD.Open(dst, a.nonceBuf, src, ad) + if err != nil { + return nil, ErrDecryptionFailed + } + // Opening succeeded. Check if the peer was allowed to update. + if a.keyPhase > 0 && a.firstSentWithCurrentKey == protocol.InvalidPacketNumber { + return nil, &qerr.TransportError{ + ErrorCode: qerr.KeyUpdateError, + ErrorMessage: "keys updated too quickly", + } + } + a.rollKeys() + a.logger.Debugf("Peer updated keys to %d", a.keyPhase) + // The peer initiated this key update. It's safe to drop the keys for the previous generation now. + // Start a timer to drop the previous key generation. + a.startKeyDropTimer(rcvTime) + if a.tracer != nil && a.tracer.UpdatedKey != nil { + a.tracer.UpdatedKey(a.keyPhase, true) + } + a.firstRcvdWithCurrentKey = pn + return dec, err + } + // The AEAD we're using here will be the qtls.aeadAESGCM13. + // It uses the nonce provided here and XOR it with the IV. + dec, err := a.rcvAEAD.Open(dst, a.nonceBuf, src, ad) + if err != nil { + return dec, ErrDecryptionFailed + } + a.numRcvdWithCurrentKey++ + if a.firstRcvdWithCurrentKey == protocol.InvalidPacketNumber { + // We initiated the key updated, and now we received the first packet protected with the new key phase. + // Therefore, we are certain that the peer rolled its keys as well. Start a timer to drop the old keys. + if a.keyPhase > 0 { + a.logger.Debugf("Peer confirmed key update to phase %d", a.keyPhase) + a.startKeyDropTimer(rcvTime) + } + a.firstRcvdWithCurrentKey = pn + } + return dec, err +} + +func (a *updatableAEAD) Seal(dst, src []byte, pn protocol.PacketNumber, ad []byte) []byte { + if a.firstSentWithCurrentKey == protocol.InvalidPacketNumber { + a.firstSentWithCurrentKey = pn + } + if a.firstPacketNumber == protocol.InvalidPacketNumber { + a.firstPacketNumber = pn + } + a.numSentWithCurrentKey++ + binary.BigEndian.PutUint64(a.nonceBuf[len(a.nonceBuf)-8:], uint64(pn)) + // The AEAD we're using here will be the qtls.aeadAESGCM13. + // It uses the nonce provided here and XOR it with the IV. + return a.sendAEAD.Seal(dst, a.nonceBuf, src, ad) +} + +func (a *updatableAEAD) SetLargestAcked(pn protocol.PacketNumber) error { + if a.firstSentWithCurrentKey != protocol.InvalidPacketNumber && + pn >= a.firstSentWithCurrentKey && a.numRcvdWithCurrentKey == 0 { + return &qerr.TransportError{ + ErrorCode: qerr.KeyUpdateError, + ErrorMessage: fmt.Sprintf("received ACK for key phase %d, but peer didn't update keys", a.keyPhase), + } + } + a.largestAcked = pn + return nil +} + +func (a *updatableAEAD) SetHandshakeConfirmed() { + a.handshakeConfirmed = true +} + +func (a *updatableAEAD) updateAllowed() bool { + if !a.handshakeConfirmed { + return false + } + // the first key update is allowed as soon as the handshake is confirmed + return a.keyPhase == 0 || + // subsequent key updates as soon as a packet sent with that key phase has been acknowledged + (a.firstSentWithCurrentKey != protocol.InvalidPacketNumber && + a.largestAcked != protocol.InvalidPacketNumber && + a.largestAcked >= a.firstSentWithCurrentKey) +} + +func (a *updatableAEAD) shouldInitiateKeyUpdate() bool { + if !a.updateAllowed() { + return false + } + // Initiate the first key update shortly after the handshake, in order to exercise the key update mechanism. + if a.keyPhase == 0 { + if a.numRcvdWithCurrentKey >= FirstKeyUpdateInterval || a.numSentWithCurrentKey >= FirstKeyUpdateInterval { + return true + } + } + if a.numRcvdWithCurrentKey >= keyUpdateInterval.Load() { + a.logger.Debugf("Received %d packets with current key phase. Initiating key update to the next key phase: %d", a.numRcvdWithCurrentKey, a.keyPhase+1) + return true + } + if a.numSentWithCurrentKey >= keyUpdateInterval.Load() { + a.logger.Debugf("Sent %d packets with current key phase. Initiating key update to the next key phase: %d", a.numSentWithCurrentKey, a.keyPhase+1) + return true + } + return false +} + +func (a *updatableAEAD) KeyPhase() protocol.KeyPhaseBit { + if a.shouldInitiateKeyUpdate() { + a.rollKeys() + a.logger.Debugf("Initiating key update to key phase %d", a.keyPhase) + if a.tracer != nil && a.tracer.UpdatedKey != nil { + a.tracer.UpdatedKey(a.keyPhase, false) + } + } + return a.keyPhase.Bit() +} + +func (a *updatableAEAD) Overhead() int { + return a.aeadOverhead +} + +func (a *updatableAEAD) EncryptHeader(sample []byte, firstByte *byte, hdrBytes []byte) { + a.headerEncrypter.EncryptHeader(sample, firstByte, hdrBytes) +} + +func (a *updatableAEAD) DecryptHeader(sample []byte, firstByte *byte, hdrBytes []byte) { + a.headerDecrypter.DecryptHeader(sample, firstByte, hdrBytes) +} + +func (a *updatableAEAD) FirstPacketNumber() protocol.PacketNumber { + return a.firstPacketNumber +} diff --git a/vendor/github.com/quic-go/quic-go/internal/protocol/connection_id.go b/vendor/github.com/quic-go/quic-go/internal/protocol/connection_id.go new file mode 100644 index 0000000..77259b5 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/protocol/connection_id.go @@ -0,0 +1,116 @@ +package protocol + +import ( + "crypto/rand" + "errors" + "fmt" + "io" +) + +var ErrInvalidConnectionIDLen = errors.New("invalid Connection ID length") + +// An ArbitraryLenConnectionID is a QUIC Connection ID able to represent Connection IDs according to RFC 8999. +// Future QUIC versions might allow connection ID lengths up to 255 bytes, while QUIC v1 +// restricts the length to 20 bytes. +type ArbitraryLenConnectionID []byte + +func (c ArbitraryLenConnectionID) Len() int { + return len(c) +} + +func (c ArbitraryLenConnectionID) Bytes() []byte { + return c +} + +func (c ArbitraryLenConnectionID) String() string { + if c.Len() == 0 { + return "(empty)" + } + return fmt.Sprintf("%x", c.Bytes()) +} + +const maxConnectionIDLen = 20 + +// A ConnectionID in QUIC +type ConnectionID struct { + b [20]byte + l uint8 +} + +// GenerateConnectionID generates a connection ID using cryptographic random +func GenerateConnectionID(l int) (ConnectionID, error) { + var c ConnectionID + c.l = uint8(l) + _, err := rand.Read(c.b[:l]) + return c, err +} + +// ParseConnectionID interprets b as a Connection ID. +// It panics if b is longer than 20 bytes. +func ParseConnectionID(b []byte) ConnectionID { + if len(b) > maxConnectionIDLen { + panic("invalid conn id length") + } + var c ConnectionID + c.l = uint8(len(b)) + copy(c.b[:c.l], b) + return c +} + +// GenerateConnectionIDForInitial generates a connection ID for the Initial packet. +// It uses a length randomly chosen between 8 and 20 bytes. +func GenerateConnectionIDForInitial() (ConnectionID, error) { + r := make([]byte, 1) + if _, err := rand.Read(r); err != nil { + return ConnectionID{}, err + } + l := MinConnectionIDLenInitial + int(r[0])%(maxConnectionIDLen-MinConnectionIDLenInitial+1) + return GenerateConnectionID(l) +} + +// ReadConnectionID reads a connection ID of length len from the given io.Reader. +// It returns io.EOF if there are not enough bytes to read. +func ReadConnectionID(r io.Reader, l int) (ConnectionID, error) { + var c ConnectionID + if l == 0 { + return c, nil + } + if l > maxConnectionIDLen { + return c, ErrInvalidConnectionIDLen + } + c.l = uint8(l) + _, err := io.ReadFull(r, c.b[:l]) + if err == io.ErrUnexpectedEOF { + return c, io.EOF + } + return c, err +} + +// Len returns the length of the connection ID in bytes +func (c ConnectionID) Len() int { + return int(c.l) +} + +// Bytes returns the byte representation +func (c ConnectionID) Bytes() []byte { + return c.b[:c.l] +} + +func (c ConnectionID) String() string { + if c.Len() == 0 { + return "(empty)" + } + return fmt.Sprintf("%x", c.Bytes()) +} + +type DefaultConnectionIDGenerator struct { + ConnLen int +} + +func (d *DefaultConnectionIDGenerator) GenerateConnectionID() (ConnectionID, error) { + return GenerateConnectionID(d.ConnLen) +} + +func (d *DefaultConnectionIDGenerator) ConnectionIDLen() int { + return d.ConnLen +} diff --git a/vendor/github.com/quic-go/quic-go/internal/protocol/encryption_level.go b/vendor/github.com/quic-go/quic-go/internal/protocol/encryption_level.go new file mode 100644 index 0000000..40aa331 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/protocol/encryption_level.go @@ -0,0 +1,65 @@ +package protocol + +import ( + "crypto/tls" + "fmt" +) + +// EncryptionLevel is the encryption level +// Default value is Unencrypted +type EncryptionLevel uint8 + +const ( + // EncryptionInitial is the Initial encryption level + EncryptionInitial EncryptionLevel = 1 + iota + // EncryptionHandshake is the Handshake encryption level + EncryptionHandshake + // Encryption0RTT is the 0-RTT encryption level + Encryption0RTT + // Encryption1RTT is the 1-RTT encryption level + Encryption1RTT +) + +func (e EncryptionLevel) String() string { + switch e { + case EncryptionInitial: + return "Initial" + case EncryptionHandshake: + return "Handshake" + case Encryption0RTT: + return "0-RTT" + case Encryption1RTT: + return "1-RTT" + } + return "unknown" +} + +func (e EncryptionLevel) ToTLSEncryptionLevel() tls.QUICEncryptionLevel { + switch e { + case EncryptionInitial: + return tls.QUICEncryptionLevelInitial + case EncryptionHandshake: + return tls.QUICEncryptionLevelHandshake + case Encryption1RTT: + return tls.QUICEncryptionLevelApplication + case Encryption0RTT: + return tls.QUICEncryptionLevelEarly + default: + panic(fmt.Sprintf("unexpected encryption level: %s", e)) + } +} + +func FromTLSEncryptionLevel(e tls.QUICEncryptionLevel) EncryptionLevel { + switch e { + case tls.QUICEncryptionLevelInitial: + return EncryptionInitial + case tls.QUICEncryptionLevelHandshake: + return EncryptionHandshake + case tls.QUICEncryptionLevelApplication: + return Encryption1RTT + case tls.QUICEncryptionLevelEarly: + return Encryption0RTT + default: + panic(fmt.Sprintf("unexpect encryption level: %s", e)) + } +} diff --git a/vendor/github.com/quic-go/quic-go/internal/protocol/key_phase.go b/vendor/github.com/quic-go/quic-go/internal/protocol/key_phase.go new file mode 100644 index 0000000..edd740c --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/protocol/key_phase.go @@ -0,0 +1,36 @@ +package protocol + +// KeyPhase is the key phase +type KeyPhase uint64 + +// Bit determines the key phase bit +func (p KeyPhase) Bit() KeyPhaseBit { + if p%2 == 0 { + return KeyPhaseZero + } + return KeyPhaseOne +} + +// KeyPhaseBit is the key phase bit +type KeyPhaseBit uint8 + +const ( + // KeyPhaseUndefined is an undefined key phase + KeyPhaseUndefined KeyPhaseBit = iota + // KeyPhaseZero is key phase 0 + KeyPhaseZero + // KeyPhaseOne is key phase 1 + KeyPhaseOne +) + +func (p KeyPhaseBit) String() string { + //nolint:exhaustive + switch p { + case KeyPhaseZero: + return "0" + case KeyPhaseOne: + return "1" + default: + return "undefined" + } +} diff --git a/vendor/github.com/quic-go/quic-go/internal/protocol/packet_number.go b/vendor/github.com/quic-go/quic-go/internal/protocol/packet_number.go new file mode 100644 index 0000000..9422db9 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/protocol/packet_number.go @@ -0,0 +1,57 @@ +package protocol + +// A PacketNumber in QUIC +type PacketNumber int64 + +// InvalidPacketNumber is a packet number that is never sent. +// In QUIC, 0 is a valid packet number. +const InvalidPacketNumber PacketNumber = -1 + +// PacketNumberLen is the length of the packet number in bytes +type PacketNumberLen uint8 + +const ( + // PacketNumberLen1 is a packet number length of 1 byte + PacketNumberLen1 PacketNumberLen = 1 + // PacketNumberLen2 is a packet number length of 2 bytes + PacketNumberLen2 PacketNumberLen = 2 + // PacketNumberLen3 is a packet number length of 3 bytes + PacketNumberLen3 PacketNumberLen = 3 + // PacketNumberLen4 is a packet number length of 4 bytes + PacketNumberLen4 PacketNumberLen = 4 +) + +// DecodePacketNumber calculates the packet number based its length and the last seen packet number +// This function is taken from https://www.rfc-editor.org/rfc/rfc9000.html#section-a.3. +func DecodePacketNumber(length PacketNumberLen, largest PacketNumber, truncated PacketNumber) PacketNumber { + expected := largest + 1 + win := PacketNumber(1 << (length * 8)) + hwin := win / 2 + mask := win - 1 + candidate := (expected & ^mask) | truncated + if candidate <= expected-hwin && candidate < 1<<62-win { + return candidate + win + } + if candidate > expected+hwin && candidate >= win { + return candidate - win + } + return candidate +} + +// PacketNumberLengthForHeader gets the length of the packet number for the public header +// it never chooses a PacketNumberLen of 1 byte, since this is too short under certain circumstances +func PacketNumberLengthForHeader(pn, largestAcked PacketNumber) PacketNumberLen { + var numUnacked PacketNumber + if largestAcked == InvalidPacketNumber { + numUnacked = pn + 1 + } else { + numUnacked = pn - largestAcked + } + if numUnacked < 1<<(16-1) { + return PacketNumberLen2 + } + if numUnacked < 1<<(24-1) { + return PacketNumberLen3 + } + return PacketNumberLen4 +} diff --git a/vendor/github.com/quic-go/quic-go/internal/protocol/params.go b/vendor/github.com/quic-go/quic-go/internal/protocol/params.go new file mode 100644 index 0000000..fe86317 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/protocol/params.go @@ -0,0 +1,172 @@ +package protocol + +import "time" + +// DesiredReceiveBufferSize is the kernel UDP receive buffer size that we'd like to use. +const DesiredReceiveBufferSize = (1 << 20) * 7 // 7 MB + +// DesiredSendBufferSize is the kernel UDP send buffer size that we'd like to use. +const DesiredSendBufferSize = (1 << 20) * 7 // 7 MB + +// InitialPacketSize is the initial (before Path MTU discovery) maximum packet size used. +const InitialPacketSize = 1280 + +// MaxCongestionWindowPackets is the maximum congestion window in packet. +const MaxCongestionWindowPackets = 10000 + +// MaxUndecryptablePackets limits the number of undecryptable packets that are queued in the connection. +const MaxUndecryptablePackets = 32 + +// ConnectionFlowControlMultiplier determines how much larger the connection flow control windows needs to be relative to any stream's flow control window +// This is the value that Chromium is using +const ConnectionFlowControlMultiplier = 1.5 + +// DefaultInitialMaxStreamData is the default initial stream-level flow control window for receiving data +const DefaultInitialMaxStreamData = (1 << 10) * 512 // 512 kb + +// DefaultInitialMaxData is the connection-level flow control window for receiving data +const DefaultInitialMaxData = ConnectionFlowControlMultiplier * DefaultInitialMaxStreamData + +// DefaultMaxReceiveStreamFlowControlWindow is the default maximum stream-level flow control window for receiving data +const DefaultMaxReceiveStreamFlowControlWindow = 6 * (1 << 20) // 6 MB + +// DefaultMaxReceiveConnectionFlowControlWindow is the default connection-level flow control window for receiving data +const DefaultMaxReceiveConnectionFlowControlWindow = 15 * (1 << 20) // 15 MB + +// WindowUpdateThreshold is the fraction of the receive window that has to be consumed before an higher offset is advertised to the client +const WindowUpdateThreshold = 0.25 + +// DefaultMaxIncomingStreams is the maximum number of streams that a peer may open +const DefaultMaxIncomingStreams = 100 + +// DefaultMaxIncomingUniStreams is the maximum number of unidirectional streams that a peer may open +const DefaultMaxIncomingUniStreams = 100 + +// MaxServerUnprocessedPackets is the max number of packets stored in the server that are not yet processed. +const MaxServerUnprocessedPackets = 1024 + +// MaxConnUnprocessedPackets is the max number of packets stored in each connection that are not yet processed. +const MaxConnUnprocessedPackets = 256 + +// SkipPacketInitialPeriod is the initial period length used for packet number skipping to prevent an Optimistic ACK attack. +// Every time a packet number is skipped, the period is doubled, up to SkipPacketMaxPeriod. +const SkipPacketInitialPeriod PacketNumber = 256 + +// SkipPacketMaxPeriod is the maximum period length used for packet number skipping. +const SkipPacketMaxPeriod PacketNumber = 128 * 1024 + +// MaxAcceptQueueSize is the maximum number of connections that the server queues for accepting. +// If the queue is full, new connection attempts will be rejected. +const MaxAcceptQueueSize = 32 + +// TokenValidity is the duration that a (non-retry) token is considered valid +const TokenValidity = 24 * time.Hour + +// MaxOutstandingSentPackets is maximum number of packets saved for retransmission. +// When reached, it imposes a soft limit on sending new packets: +// Sending ACKs and retransmission is still allowed, but now new regular packets can be sent. +const MaxOutstandingSentPackets = 2 * MaxCongestionWindowPackets + +// MaxTrackedSentPackets is maximum number of sent packets saved for retransmission. +// When reached, no more packets will be sent. +// This value *must* be larger than MaxOutstandingSentPackets. +const MaxTrackedSentPackets = MaxOutstandingSentPackets * 5 / 4 + +// MaxNonAckElicitingAcks is the maximum number of packets containing an ACK, +// but no ack-eliciting frames, that we send in a row +const MaxNonAckElicitingAcks = 19 + +// MaxStreamFrameSorterGaps is the maximum number of gaps between received StreamFrames +// prevents DoS attacks against the streamFrameSorter +const MaxStreamFrameSorterGaps = 1000 + +// MinStreamFrameBufferSize is the minimum data length of a received STREAM frame +// that we use the buffer for. This protects against a DoS where an attacker would send us +// very small STREAM frames to consume a lot of memory. +const MinStreamFrameBufferSize = 128 + +// MinCoalescedPacketSize is the minimum size of a coalesced packet that we pack. +// If a packet has less than this number of bytes, we won't coalesce any more packets onto it. +const MinCoalescedPacketSize = 128 + +// MaxCryptoStreamOffset is the maximum offset allowed on any of the crypto streams. +// This limits the size of the ClientHello and Certificates that can be received. +const MaxCryptoStreamOffset = 16 * (1 << 10) + +// MinRemoteIdleTimeout is the minimum value that we accept for the remote idle timeout +const MinRemoteIdleTimeout = 5 * time.Second + +// DefaultIdleTimeout is the default idle timeout +const DefaultIdleTimeout = 30 * time.Second + +// DefaultHandshakeIdleTimeout is the default idle timeout used before handshake completion. +const DefaultHandshakeIdleTimeout = 5 * time.Second + +// MinStreamFrameSize is the minimum size that has to be left in a packet, so that we add another STREAM frame. +// This avoids splitting up STREAM frames into small pieces, which has 2 advantages: +// 1. it reduces the framing overhead +// 2. it reduces the head-of-line blocking, when a packet is lost +const MinStreamFrameSize ByteCount = 128 + +// MaxPostHandshakeCryptoFrameSize is the maximum size of CRYPTO frames +// we send after the handshake completes. +const MaxPostHandshakeCryptoFrameSize = 1000 + +// MaxAckFrameSize is the maximum size for an ACK frame that we write +// Due to the varint encoding, ACK frames can grow (almost) indefinitely large. +// The MaxAckFrameSize should be large enough to encode many ACK range, +// but must ensure that a maximum size ACK frame fits into one packet. +const MaxAckFrameSize ByteCount = 1000 + +// MaxNumAckRanges is the maximum number of ACK ranges that we send in an ACK frame. +// It also serves as a limit for the packet history. +// If at any point we keep track of more ranges, old ranges are discarded. +const MaxNumAckRanges = 32 + +// MinPacingDelay is the minimum duration that is used for packet pacing +// If the packet packing frequency is higher, multiple packets might be sent at once. +// Example: For a packet pacing delay of 200μs, we would send 5 packets at once, wait for 1ms, and so forth. +const MinPacingDelay = time.Millisecond + +// DefaultConnectionIDLength is the connection ID length that is used for multiplexed connections +// if no other value is configured. +const DefaultConnectionIDLength = 4 + +// MaxActiveConnectionIDs is the number of connection IDs that we're storing. +const MaxActiveConnectionIDs = 4 + +// MaxIssuedConnectionIDs is the maximum number of connection IDs that we're issuing at the same time. +const MaxIssuedConnectionIDs = 6 + +// PacketsPerConnectionID is the number of packets we send using one connection ID. +// If the peer provices us with enough new connection IDs, we switch to a new connection ID. +const PacketsPerConnectionID = 10000 + +// AckDelayExponent is the ack delay exponent used when sending ACKs. +const AckDelayExponent = 3 + +// Estimated timer granularity. +// The loss detection timer will not be set to a value smaller than granularity. +const TimerGranularity = time.Millisecond + +// MaxAckDelay is the maximum time by which we delay sending ACKs. +const MaxAckDelay = 25 * time.Millisecond + +// MaxAckDelayInclGranularity is the max_ack_delay including the timer granularity. +// This is the value that should be advertised to the peer. +const MaxAckDelayInclGranularity = MaxAckDelay + TimerGranularity + +// KeyUpdateInterval is the maximum number of packets we send or receive before initiating a key update. +const KeyUpdateInterval = 100 * 1000 + +// Max0RTTQueueingDuration is the maximum time that we store 0-RTT packets in order to wait for the corresponding Initial to be received. +const Max0RTTQueueingDuration = 100 * time.Millisecond + +// Max0RTTQueues is the maximum number of connections that we buffer 0-RTT packets for. +const Max0RTTQueues = 32 + +// Max0RTTQueueLen is the maximum number of 0-RTT packets that we buffer for each connection. +// When a new connection is created, all buffered packets are passed to the connection immediately. +// To avoid blocking, this value has to be smaller than MaxConnUnprocessedPackets. +// To avoid packets being dropped as undecryptable by the connection, this value has to be smaller than MaxUndecryptablePackets. +const Max0RTTQueueLen = 31 diff --git a/vendor/github.com/quic-go/quic-go/internal/protocol/perspective.go b/vendor/github.com/quic-go/quic-go/internal/protocol/perspective.go new file mode 100644 index 0000000..5a29d3c --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/protocol/perspective.go @@ -0,0 +1,26 @@ +package protocol + +// Perspective determines if we're acting as a server or a client +type Perspective int + +// the perspectives +const ( + PerspectiveServer Perspective = 1 + PerspectiveClient Perspective = 2 +) + +// Opposite returns the perspective of the peer +func (p Perspective) Opposite() Perspective { + return 3 - p +} + +func (p Perspective) String() string { + switch p { + case PerspectiveServer: + return "server" + case PerspectiveClient: + return "client" + default: + return "invalid perspective" + } +} diff --git a/vendor/github.com/quic-go/quic-go/internal/protocol/protocol.go b/vendor/github.com/quic-go/quic-go/internal/protocol/protocol.go new file mode 100644 index 0000000..b1109ff --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/protocol/protocol.go @@ -0,0 +1,156 @@ +package protocol + +import ( + "fmt" + "time" +) + +// The PacketType is the Long Header Type +type PacketType uint8 + +const ( + // PacketTypeInitial is the packet type of an Initial packet + PacketTypeInitial PacketType = 1 + iota + // PacketTypeRetry is the packet type of a Retry packet + PacketTypeRetry + // PacketTypeHandshake is the packet type of a Handshake packet + PacketTypeHandshake + // PacketType0RTT is the packet type of a 0-RTT packet + PacketType0RTT +) + +func (t PacketType) String() string { + switch t { + case PacketTypeInitial: + return "Initial" + case PacketTypeRetry: + return "Retry" + case PacketTypeHandshake: + return "Handshake" + case PacketType0RTT: + return "0-RTT Protected" + default: + return fmt.Sprintf("unknown packet type: %d", t) + } +} + +type ECN uint8 + +const ( + ECNUnsupported ECN = iota + ECNNon // 00 + ECT1 // 01 + ECT0 // 10 + ECNCE // 11 +) + +func ParseECNHeaderBits(bits byte) ECN { + switch bits { + case 0: + return ECNNon + case 0b00000010: + return ECT0 + case 0b00000001: + return ECT1 + case 0b00000011: + return ECNCE + default: + panic("invalid ECN bits") + } +} + +func (e ECN) ToHeaderBits() byte { + //nolint:exhaustive // There are only 4 values. + switch e { + case ECNNon: + return 0 + case ECT0: + return 0b00000010 + case ECT1: + return 0b00000001 + case ECNCE: + return 0b00000011 + default: + panic("ECN unsupported") + } +} + +func (e ECN) String() string { + switch e { + case ECNUnsupported: + return "ECN unsupported" + case ECNNon: + return "Not-ECT" + case ECT1: + return "ECT(1)" + case ECT0: + return "ECT(0)" + case ECNCE: + return "CE" + default: + return fmt.Sprintf("invalid ECN value: %d", e) + } +} + +// A ByteCount in QUIC +type ByteCount int64 + +// MaxByteCount is the maximum value of a ByteCount +const MaxByteCount = ByteCount(1<<62 - 1) + +// InvalidByteCount is an invalid byte count +const InvalidByteCount ByteCount = -1 + +// A StatelessResetToken is a stateless reset token. +type StatelessResetToken [16]byte + +// MaxPacketBufferSize maximum packet size of any QUIC packet, based on +// ethernet's max size, minus the IP and UDP headers. IPv6 has a 40 byte header, +// UDP adds an additional 8 bytes. This is a total overhead of 48 bytes. +// Ethernet's max packet size is 1500 bytes, 1500 - 48 = 1452. +const MaxPacketBufferSize = 1452 + +// MaxLargePacketBufferSize is used when using GSO +const MaxLargePacketBufferSize = 20 * 1024 + +// MinInitialPacketSize is the minimum size an Initial packet is required to have. +const MinInitialPacketSize = 1200 + +// MinUnknownVersionPacketSize is the minimum size a packet with an unknown version +// needs to have in order to trigger a Version Negotiation packet. +const MinUnknownVersionPacketSize = MinInitialPacketSize + +// MinStatelessResetSize is the minimum size of a stateless reset packet that we send +const MinStatelessResetSize = 1 /* first byte */ + 20 /* max. conn ID length */ + 4 /* max. packet number length */ + 1 /* min. payload length */ + 16 /* token */ + +// MinReceivedStatelessResetSize is the minimum size of a received stateless reset, +// as specified in section 10.3 of RFC 9000. +const MinReceivedStatelessResetSize = 5 + 16 + +// MinConnectionIDLenInitial is the minimum length of the destination connection ID on an Initial packet. +const MinConnectionIDLenInitial = 8 + +// DefaultAckDelayExponent is the default ack delay exponent +const DefaultAckDelayExponent = 3 + +// DefaultActiveConnectionIDLimit is the default active connection ID limit +const DefaultActiveConnectionIDLimit = 2 + +// MaxAckDelayExponent is the maximum ack delay exponent +const MaxAckDelayExponent = 20 + +// DefaultMaxAckDelay is the default max_ack_delay +const DefaultMaxAckDelay = 25 * time.Millisecond + +// MaxMaxAckDelay is the maximum max_ack_delay +const MaxMaxAckDelay = (1<<14 - 1) * time.Millisecond + +// MaxConnIDLen is the maximum length of the connection ID +const MaxConnIDLen = 20 + +// InvalidPacketLimitAES is the maximum number of packets that we can fail to decrypt when using +// AEAD_AES_128_GCM or AEAD_AES_265_GCM. +const InvalidPacketLimitAES = 1 << 52 + +// InvalidPacketLimitChaCha is the maximum number of packets that we can fail to decrypt when using AEAD_CHACHA20_POLY1305. +const InvalidPacketLimitChaCha = 1 << 36 diff --git a/vendor/github.com/quic-go/quic-go/internal/protocol/stream.go b/vendor/github.com/quic-go/quic-go/internal/protocol/stream.go new file mode 100644 index 0000000..6db4a95 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/protocol/stream.go @@ -0,0 +1,102 @@ +package protocol + +import "github.com/quic-go/quic-go/quicvarint" + +// StreamType encodes if this is a unidirectional or bidirectional stream +type StreamType uint8 + +const ( + // StreamTypeUni is a unidirectional stream + StreamTypeUni StreamType = iota + // StreamTypeBidi is a bidirectional stream + StreamTypeBidi +) + +// InvalidPacketNumber is a stream ID that is invalid. +// The first valid stream ID in QUIC is 0. +const InvalidStreamID StreamID = -1 + +// StreamNum is the stream number +type StreamNum int64 + +const ( + // InvalidStreamNum is an invalid stream number. + InvalidStreamNum = -1 + // MaxStreamCount is the maximum stream count value that can be sent in MAX_STREAMS frames + // and as the stream count in the transport parameters + MaxStreamCount StreamNum = 1 << 60 + // MaxStreamID is the maximum stream ID + MaxStreamID StreamID = quicvarint.Max +) + +const ( + // FirstOutgoingBidiStreamClient is the first bidirectional stream opened by the client + FirstOutgoingBidiStreamClient StreamID = 0 + // FirstOutgoingUniStreamClient is the first unidirectional stream opened by the client + FirstOutgoingUniStreamClient StreamID = 2 + // FirstOutgoingBidiStreamServer is the first bidirectional stream opened by the server + FirstOutgoingBidiStreamServer StreamID = 1 + // FirstOutgoingUniStreamServer is the first unidirectional stream opened by the server + FirstOutgoingUniStreamServer StreamID = 3 +) + +const ( + // FirstIncomingBidiStreamServer is the first bidirectional stream accepted by the server + FirstIncomingBidiStreamServer = FirstOutgoingBidiStreamClient + // FirstIncomingUniStreamServer is the first unidirectional stream accepted by the server + FirstIncomingUniStreamServer = FirstOutgoingUniStreamClient + // FirstIncomingBidiStreamClient is the first bidirectional stream accepted by the client + FirstIncomingBidiStreamClient = FirstOutgoingBidiStreamServer + // FirstIncomingUniStreamClient is the first unidirectional stream accepted by the client + FirstIncomingUniStreamClient = FirstOutgoingUniStreamServer +) + +// StreamID calculates the stream ID. +func (s StreamNum) StreamID(stype StreamType, pers Perspective) StreamID { + if s == 0 { + return InvalidStreamID + } + var first StreamID + switch stype { + case StreamTypeBidi: + switch pers { + case PerspectiveClient: + first = 0 + case PerspectiveServer: + first = 1 + } + case StreamTypeUni: + switch pers { + case PerspectiveClient: + first = 2 + case PerspectiveServer: + first = 3 + } + } + return first + 4*StreamID(s-1) +} + +// A StreamID in QUIC +type StreamID int64 + +// InitiatedBy says if the stream was initiated by the client or by the server +func (s StreamID) InitiatedBy() Perspective { + if s%2 == 0 { + return PerspectiveClient + } + return PerspectiveServer +} + +// Type says if this is a unidirectional or bidirectional stream +func (s StreamID) Type() StreamType { + if s%4 >= 2 { + return StreamTypeUni + } + return StreamTypeBidi +} + +// StreamNum returns how many streams in total are below this +// Example: for stream 9 it returns 3 (i.e. streams 1, 5 and 9) +func (s StreamID) StreamNum() StreamNum { + return StreamNum(s/4) + 1 +} diff --git a/vendor/github.com/quic-go/quic-go/internal/protocol/version.go b/vendor/github.com/quic-go/quic-go/internal/protocol/version.go new file mode 100644 index 0000000..8abca50 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/protocol/version.go @@ -0,0 +1,115 @@ +package protocol + +import ( + "crypto/rand" + "encoding/binary" + "fmt" + "math" + mrand "math/rand/v2" + "slices" + "sync" +) + +// Version is a version number as int +type Version uint32 + +// gQUIC version range as defined in the wiki: https://github.com/quicwg/base-drafts/wiki/QUIC-Versions +const ( + gquicVersion0 = 0x51303030 + maxGquicVersion = 0x51303439 +) + +// The version numbers, making grepping easier +const ( + VersionUnknown Version = math.MaxUint32 + versionDraft29 Version = 0xff00001d // draft-29 used to be a widely deployed version + Version1 Version = 0x1 + Version2 Version = 0x6b3343cf +) + +// SupportedVersions lists the versions that the server supports +// must be in sorted descending order +var SupportedVersions = []Version{Version1, Version2} + +// IsValidVersion says if the version is known to quic-go +func IsValidVersion(v Version) bool { + return v == Version1 || IsSupportedVersion(SupportedVersions, v) +} + +func (vn Version) String() string { + switch vn { + case VersionUnknown: + return "unknown" + case versionDraft29: + return "draft-29" + case Version1: + return "v1" + case Version2: + return "v2" + default: + if vn.isGQUIC() { + return fmt.Sprintf("gQUIC %d", vn.toGQUICVersion()) + } + return fmt.Sprintf("%#x", uint32(vn)) + } +} + +func (vn Version) isGQUIC() bool { + return vn > gquicVersion0 && vn <= maxGquicVersion +} + +func (vn Version) toGQUICVersion() int { + return int(10*(vn-gquicVersion0)/0x100) + int(vn%0x10) +} + +// IsSupportedVersion returns true if the server supports this version +func IsSupportedVersion(supported []Version, v Version) bool { + return slices.Contains(supported, v) +} + +// ChooseSupportedVersion finds the best version in the overlap of ours and theirs +// ours is a slice of versions that we support, sorted by our preference (descending) +// theirs is a slice of versions offered by the peer. The order does not matter. +// The bool returned indicates if a matching version was found. +func ChooseSupportedVersion(ours, theirs []Version) (Version, bool) { + for _, ourVer := range ours { + if slices.Contains(theirs, ourVer) { + return ourVer, true + } + } + return 0, false +} + +var ( + versionNegotiationMx sync.Mutex + versionNegotiationRand mrand.Rand +) + +func init() { + var seed [16]byte + rand.Read(seed[:]) + versionNegotiationRand = *mrand.New(mrand.NewPCG( + binary.BigEndian.Uint64(seed[:8]), + binary.BigEndian.Uint64(seed[8:]), + )) +} + +// generateReservedVersion generates a reserved version (v & 0x0f0f0f0f == 0x0a0a0a0a) +func generateReservedVersion() Version { + var b [4]byte + binary.BigEndian.PutUint32(b[:], versionNegotiationRand.Uint32()) + return Version((binary.BigEndian.Uint32(b[:]) | 0x0a0a0a0a) & 0xfafafafa) +} + +// GetGreasedVersions adds one reserved version number to a slice of version numbers, at a random position. +// It doesn't modify the supported slice. +func GetGreasedVersions(supported []Version) []Version { + versionNegotiationMx.Lock() + defer versionNegotiationMx.Unlock() + randPos := versionNegotiationRand.IntN(len(supported) + 1) + greased := make([]Version, len(supported)+1) + copy(greased, supported[:randPos]) + greased[randPos] = generateReservedVersion() + copy(greased[randPos+1:], supported[randPos:]) + return greased +} diff --git a/vendor/github.com/quic-go/quic-go/internal/qerr/error_codes.go b/vendor/github.com/quic-go/quic-go/internal/qerr/error_codes.go new file mode 100644 index 0000000..0036130 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/qerr/error_codes.go @@ -0,0 +1,87 @@ +package qerr + +import ( + "crypto/tls" + "fmt" +) + +// TransportErrorCode is a QUIC transport error. +type TransportErrorCode uint64 + +// The error codes defined by QUIC +const ( + NoError TransportErrorCode = 0x0 + InternalError TransportErrorCode = 0x1 + ConnectionRefused TransportErrorCode = 0x2 + FlowControlError TransportErrorCode = 0x3 + StreamLimitError TransportErrorCode = 0x4 + StreamStateError TransportErrorCode = 0x5 + FinalSizeError TransportErrorCode = 0x6 + FrameEncodingError TransportErrorCode = 0x7 + TransportParameterError TransportErrorCode = 0x8 + ConnectionIDLimitError TransportErrorCode = 0x9 + ProtocolViolation TransportErrorCode = 0xa + InvalidToken TransportErrorCode = 0xb + ApplicationErrorErrorCode TransportErrorCode = 0xc + CryptoBufferExceeded TransportErrorCode = 0xd + KeyUpdateError TransportErrorCode = 0xe + AEADLimitReached TransportErrorCode = 0xf + NoViablePathError TransportErrorCode = 0x10 +) + +func (e TransportErrorCode) IsCryptoError() bool { + return e >= 0x100 && e < 0x200 +} + +// Message is a description of the error. +// It only returns a non-empty string for crypto errors. +func (e TransportErrorCode) Message() string { + if !e.IsCryptoError() { + return "" + } + return tls.AlertError(e - 0x100).Error() +} + +func (e TransportErrorCode) String() string { + switch e { + case NoError: + return "NO_ERROR" + case InternalError: + return "INTERNAL_ERROR" + case ConnectionRefused: + return "CONNECTION_REFUSED" + case FlowControlError: + return "FLOW_CONTROL_ERROR" + case StreamLimitError: + return "STREAM_LIMIT_ERROR" + case StreamStateError: + return "STREAM_STATE_ERROR" + case FinalSizeError: + return "FINAL_SIZE_ERROR" + case FrameEncodingError: + return "FRAME_ENCODING_ERROR" + case TransportParameterError: + return "TRANSPORT_PARAMETER_ERROR" + case ConnectionIDLimitError: + return "CONNECTION_ID_LIMIT_ERROR" + case ProtocolViolation: + return "PROTOCOL_VIOLATION" + case InvalidToken: + return "INVALID_TOKEN" + case ApplicationErrorErrorCode: + return "APPLICATION_ERROR" + case CryptoBufferExceeded: + return "CRYPTO_BUFFER_EXCEEDED" + case KeyUpdateError: + return "KEY_UPDATE_ERROR" + case AEADLimitReached: + return "AEAD_LIMIT_REACHED" + case NoViablePathError: + return "NO_VIABLE_PATH" + default: + if e.IsCryptoError() { + return fmt.Sprintf("CRYPTO_ERROR %#x", uint16(e)) + } + return fmt.Sprintf("unknown error code: %#x", uint16(e)) + } +} diff --git a/vendor/github.com/quic-go/quic-go/internal/qerr/errors.go b/vendor/github.com/quic-go/quic-go/internal/qerr/errors.go new file mode 100644 index 0000000..7fe1c29 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/qerr/errors.go @@ -0,0 +1,134 @@ +package qerr + +import ( + "fmt" + "net" + + "github.com/quic-go/quic-go/internal/protocol" +) + +var ( + ErrHandshakeTimeout = &HandshakeTimeoutError{} + ErrIdleTimeout = &IdleTimeoutError{} +) + +type TransportError struct { + Remote bool + FrameType uint64 + ErrorCode TransportErrorCode + ErrorMessage string + error error // only set for local errors, sometimes +} + +var _ error = &TransportError{} + +// NewLocalCryptoError create a new TransportError instance for a crypto error +func NewLocalCryptoError(tlsAlert uint8, err error) *TransportError { + return &TransportError{ + ErrorCode: 0x100 + TransportErrorCode(tlsAlert), + error: err, + } +} + +func (e *TransportError) Error() string { + str := fmt.Sprintf("%s (%s)", e.ErrorCode.String(), getRole(e.Remote)) + if e.FrameType != 0 { + str += fmt.Sprintf(" (frame type: %#x)", e.FrameType) + } + msg := e.ErrorMessage + if len(msg) == 0 && e.error != nil { + msg = e.error.Error() + } + if len(msg) == 0 { + msg = e.ErrorCode.Message() + } + if len(msg) == 0 { + return str + } + return str + ": " + msg +} + +func (e *TransportError) Unwrap() []error { return []error{net.ErrClosed, e.error} } + +func (e *TransportError) Is(target error) bool { + t, ok := target.(*TransportError) + return ok && e.ErrorCode == t.ErrorCode && e.FrameType == t.FrameType && e.Remote == t.Remote +} + +// An ApplicationErrorCode is an application-defined error code. +type ApplicationErrorCode uint64 + +// A StreamErrorCode is an error code used to cancel streams. +type StreamErrorCode uint64 + +type ApplicationError struct { + Remote bool + ErrorCode ApplicationErrorCode + ErrorMessage string +} + +var _ error = &ApplicationError{} + +func (e *ApplicationError) Error() string { + if len(e.ErrorMessage) == 0 { + return fmt.Sprintf("Application error %#x (%s)", e.ErrorCode, getRole(e.Remote)) + } + return fmt.Sprintf("Application error %#x (%s): %s", e.ErrorCode, getRole(e.Remote), e.ErrorMessage) +} + +func (e *ApplicationError) Unwrap() error { return net.ErrClosed } + +func (e *ApplicationError) Is(target error) bool { + t, ok := target.(*ApplicationError) + return ok && e.ErrorCode == t.ErrorCode && e.Remote == t.Remote +} + +type IdleTimeoutError struct{} + +var _ error = &IdleTimeoutError{} + +func (e *IdleTimeoutError) Timeout() bool { return true } +func (e *IdleTimeoutError) Temporary() bool { return false } +func (e *IdleTimeoutError) Error() string { return "timeout: no recent network activity" } +func (e *IdleTimeoutError) Unwrap() error { return net.ErrClosed } + +type HandshakeTimeoutError struct{} + +var _ error = &HandshakeTimeoutError{} + +func (e *HandshakeTimeoutError) Timeout() bool { return true } +func (e *HandshakeTimeoutError) Temporary() bool { return false } +func (e *HandshakeTimeoutError) Error() string { return "timeout: handshake did not complete in time" } +func (e *HandshakeTimeoutError) Unwrap() error { return net.ErrClosed } + +// A VersionNegotiationError occurs when the client and the server can't agree on a QUIC version. +type VersionNegotiationError struct { + Ours []protocol.Version + Theirs []protocol.Version +} + +func (e *VersionNegotiationError) Error() string { + return fmt.Sprintf("no compatible QUIC version found (we support %s, server offered %s)", e.Ours, e.Theirs) +} + +func (e *VersionNegotiationError) Unwrap() error { return net.ErrClosed } + +// A StatelessResetError occurs when we receive a stateless reset. +type StatelessResetError struct{} + +var _ net.Error = &StatelessResetError{} + +func (e *StatelessResetError) Error() string { + return "received a stateless reset" +} + +func (e *StatelessResetError) Unwrap() error { return net.ErrClosed } +func (e *StatelessResetError) Timeout() bool { return false } +func (e *StatelessResetError) Temporary() bool { return true } + +func getRole(remote bool) string { + if remote { + return "remote" + } + return "local" +} diff --git a/vendor/github.com/quic-go/quic-go/internal/utils/buffered_write_closer.go b/vendor/github.com/quic-go/quic-go/internal/utils/buffered_write_closer.go new file mode 100644 index 0000000..80ebfec --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/utils/buffered_write_closer.go @@ -0,0 +1,26 @@ +package utils + +import ( + "bufio" + "io" +) + +type bufferedWriteCloser struct { + *bufio.Writer + io.Closer +} + +// NewBufferedWriteCloser creates an io.WriteCloser from a bufio.Writer and an io.Closer +func NewBufferedWriteCloser(writer *bufio.Writer, closer io.Closer) io.WriteCloser { + return &bufferedWriteCloser{ + Writer: writer, + Closer: closer, + } +} + +func (h bufferedWriteCloser) Close() error { + if err := h.Flush(); err != nil { + return err + } + return h.Closer.Close() +} diff --git a/vendor/github.com/quic-go/quic-go/internal/utils/linkedlist/README.md b/vendor/github.com/quic-go/quic-go/internal/utils/linkedlist/README.md new file mode 100644 index 0000000..66482f4 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/utils/linkedlist/README.md @@ -0,0 +1,6 @@ +# Usage + +This is the Go standard library implementation of a linked list +(https://golang.org/src/container/list/list.go), with the following modifications: +* it uses Go generics +* it allows passing in a `sync.Pool` (via the `NewWithPool` constructor) to reduce allocations of `Element` structs diff --git a/vendor/github.com/quic-go/quic-go/internal/utils/linkedlist/linkedlist.go b/vendor/github.com/quic-go/quic-go/internal/utils/linkedlist/linkedlist.go new file mode 100644 index 0000000..804a344 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/utils/linkedlist/linkedlist.go @@ -0,0 +1,264 @@ +// 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 list implements a doubly linked list. +// +// To iterate over a list (where l is a *List[T]): +// +// for e := l.Front(); e != nil; e = e.Next() { +// // do something with e.Value +// } +package list + +import "sync" + +func NewPool[T any]() *sync.Pool { + return &sync.Pool{New: func() any { return &Element[T]{} }} +} + +// Element is an element of a linked list. +type Element[T any] struct { + // Next and previous pointers in the doubly-linked list of elements. + // To simplify the implementation, internally a list l is implemented + // as a ring, such that &l.root is both the next element of the last + // list element (l.Back()) and the previous element of the first list + // element (l.Front()). + next, prev *Element[T] + + // The list to which this element belongs. + list *List[T] + + // The value stored with this element. + Value T +} + +// Next returns the next list element or nil. +func (e *Element[T]) Next() *Element[T] { + if p := e.next; e.list != nil && p != &e.list.root { + return p + } + return nil +} + +// Prev returns the previous list element or nil. +func (e *Element[T]) Prev() *Element[T] { + if p := e.prev; e.list != nil && p != &e.list.root { + return p + } + return nil +} + +func (e *Element[T]) List() *List[T] { + return e.list +} + +// List represents a doubly linked list. +// The zero value for List is an empty list ready to use. +type List[T any] struct { + root Element[T] // sentinel list element, only &root, root.prev, and root.next are used + len int // current list length excluding (this) sentinel element + + pool *sync.Pool +} + +// Init initializes or clears list l. +func (l *List[T]) Init() *List[T] { + l.root.next = &l.root + l.root.prev = &l.root + l.len = 0 + return l +} + +// New returns an initialized list. +func New[T any]() *List[T] { return new(List[T]).Init() } + +// NewWithPool returns an initialized list, using a sync.Pool for list elements. +func NewWithPool[T any](pool *sync.Pool) *List[T] { + l := &List[T]{pool: pool} + return l.Init() +} + +// Len returns the number of elements of list l. +// The complexity is O(1). +func (l *List[T]) Len() int { return l.len } + +// Front returns the first element of list l or nil if the list is empty. +func (l *List[T]) Front() *Element[T] { + if l.len == 0 { + return nil + } + return l.root.next +} + +// Back returns the last element of list l or nil if the list is empty. +func (l *List[T]) Back() *Element[T] { + if l.len == 0 { + return nil + } + return l.root.prev +} + +// lazyInit lazily initializes a zero List value. +func (l *List[T]) lazyInit() { + if l.root.next == nil { + l.Init() + } +} + +// insert inserts e after at, increments l.len, and returns e. +func (l *List[T]) insert(e, at *Element[T]) *Element[T] { + e.prev = at + e.next = at.next + e.prev.next = e + e.next.prev = e + e.list = l + l.len++ + return e +} + +// insertValue is a convenience wrapper for insert(&Element{Value: v}, at). +func (l *List[T]) insertValue(v T, at *Element[T]) *Element[T] { + var e *Element[T] + if l.pool != nil { + e = l.pool.Get().(*Element[T]) + } else { + e = &Element[T]{} + } + e.Value = v + return l.insert(e, at) +} + +// remove removes e from its list, decrements l.len +func (l *List[T]) remove(e *Element[T]) { + e.prev.next = e.next + e.next.prev = e.prev + e.next = nil // avoid memory leaks + e.prev = nil // avoid memory leaks + e.list = nil + if l.pool != nil { + l.pool.Put(e) + } + l.len-- +} + +// move moves e to next to at. +func (l *List[T]) move(e, at *Element[T]) { + if e == at { + return + } + e.prev.next = e.next + e.next.prev = e.prev + + e.prev = at + e.next = at.next + e.prev.next = e + e.next.prev = e +} + +// Remove removes e from l if e is an element of list l. +// It returns the element value e.Value. +// The element must not be nil. +func (l *List[T]) Remove(e *Element[T]) T { + v := e.Value + if e.list == l { + // if e.list == l, l must have been initialized when e was inserted + // in l or l == nil (e is a zero Element) and l.remove will crash + l.remove(e) + } + return v +} + +// PushFront inserts a new element e with value v at the front of list l and returns e. +func (l *List[T]) PushFront(v T) *Element[T] { + l.lazyInit() + return l.insertValue(v, &l.root) +} + +// PushBack inserts a new element e with value v at the back of list l and returns e. +func (l *List[T]) PushBack(v T) *Element[T] { + l.lazyInit() + return l.insertValue(v, l.root.prev) +} + +// InsertBefore inserts a new element e with value v immediately before mark and returns e. +// If mark is not an element of l, the list is not modified. +// The mark must not be nil. +func (l *List[T]) InsertBefore(v T, mark *Element[T]) *Element[T] { + if mark.list != l { + return nil + } + // see comment in List.Remove about initialization of l + return l.insertValue(v, mark.prev) +} + +// InsertAfter inserts a new element e with value v immediately after mark and returns e. +// If mark is not an element of l, the list is not modified. +// The mark must not be nil. +func (l *List[T]) InsertAfter(v T, mark *Element[T]) *Element[T] { + if mark.list != l { + return nil + } + // see comment in List.Remove about initialization of l + return l.insertValue(v, mark) +} + +// MoveToFront moves element e to the front of list l. +// If e is not an element of l, the list is not modified. +// The element must not be nil. +func (l *List[T]) MoveToFront(e *Element[T]) { + if e.list != l || l.root.next == e { + return + } + // see comment in List.Remove about initialization of l + l.move(e, &l.root) +} + +// MoveToBack moves element e to the back of list l. +// If e is not an element of l, the list is not modified. +// The element must not be nil. +func (l *List[T]) MoveToBack(e *Element[T]) { + if e.list != l || l.root.prev == e { + return + } + // see comment in List.Remove about initialization of l + l.move(e, l.root.prev) +} + +// MoveBefore moves element e to its new position before mark. +// If e or mark is not an element of l, or e == mark, the list is not modified. +// The element and mark must not be nil. +func (l *List[T]) MoveBefore(e, mark *Element[T]) { + if e.list != l || e == mark || mark.list != l { + return + } + l.move(e, mark.prev) +} + +// MoveAfter moves element e to its new position after mark. +// If e or mark is not an element of l, or e == mark, the list is not modified. +// The element and mark must not be nil. +func (l *List[T]) MoveAfter(e, mark *Element[T]) { + if e.list != l || e == mark || mark.list != l { + return + } + l.move(e, mark) +} + +// PushBackList inserts a copy of another list at the back of list l. +// The lists l and other may be the same. They must not be nil. +func (l *List[T]) PushBackList(other *List[T]) { + l.lazyInit() + for i, e := other.Len(), other.Front(); i > 0; i, e = i-1, e.Next() { + l.insertValue(e.Value, l.root.prev) + } +} + +// PushFrontList inserts a copy of another list at the front of list l. +// The lists l and other may be the same. They must not be nil. +func (l *List[T]) PushFrontList(other *List[T]) { + l.lazyInit() + for i, e := other.Len(), other.Back(); i > 0; i, e = i-1, e.Prev() { + l.insertValue(e.Value, &l.root) + } +} diff --git a/vendor/github.com/quic-go/quic-go/internal/utils/log.go b/vendor/github.com/quic-go/quic-go/internal/utils/log.go new file mode 100644 index 0000000..89b52c0 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/utils/log.go @@ -0,0 +1,131 @@ +package utils + +import ( + "fmt" + "log" + "os" + "strings" + "time" +) + +// LogLevel of quic-go +type LogLevel uint8 + +const ( + // LogLevelNothing disables + LogLevelNothing LogLevel = iota + // LogLevelError enables err logs + LogLevelError + // LogLevelInfo enables info logs (e.g. packets) + LogLevelInfo + // LogLevelDebug enables debug logs (e.g. packet contents) + LogLevelDebug +) + +const logEnv = "QUIC_GO_LOG_LEVEL" + +// A Logger logs. +type Logger interface { + SetLogLevel(LogLevel) + SetLogTimeFormat(format string) + WithPrefix(prefix string) Logger + Debug() bool + + Errorf(format string, args ...interface{}) + Infof(format string, args ...interface{}) + Debugf(format string, args ...interface{}) +} + +// DefaultLogger is used by quic-go for logging. +var DefaultLogger Logger + +type defaultLogger struct { + prefix string + + logLevel LogLevel + timeFormat string +} + +var _ Logger = &defaultLogger{} + +// SetLogLevel sets the log level +func (l *defaultLogger) SetLogLevel(level LogLevel) { + l.logLevel = level +} + +// SetLogTimeFormat sets the format of the timestamp +// an empty string disables the logging of timestamps +func (l *defaultLogger) SetLogTimeFormat(format string) { + log.SetFlags(0) // disable timestamp logging done by the log package + l.timeFormat = format +} + +// Debugf logs something +func (l *defaultLogger) Debugf(format string, args ...interface{}) { + if l.logLevel == LogLevelDebug { + l.logMessage(format, args...) + } +} + +// Infof logs something +func (l *defaultLogger) Infof(format string, args ...interface{}) { + if l.logLevel >= LogLevelInfo { + l.logMessage(format, args...) + } +} + +// Errorf logs something +func (l *defaultLogger) Errorf(format string, args ...interface{}) { + if l.logLevel >= LogLevelError { + l.logMessage(format, args...) + } +} + +func (l *defaultLogger) logMessage(format string, args ...interface{}) { + var pre string + + if len(l.timeFormat) > 0 { + pre = time.Now().Format(l.timeFormat) + " " + } + if len(l.prefix) > 0 { + pre += l.prefix + " " + } + log.Printf(pre+format, args...) +} + +func (l *defaultLogger) WithPrefix(prefix string) Logger { + if len(l.prefix) > 0 { + prefix = l.prefix + " " + prefix + } + return &defaultLogger{ + logLevel: l.logLevel, + timeFormat: l.timeFormat, + prefix: prefix, + } +} + +// Debug returns true if the log level is LogLevelDebug +func (l *defaultLogger) Debug() bool { + return l.logLevel == LogLevelDebug +} + +func init() { + DefaultLogger = &defaultLogger{} + DefaultLogger.SetLogLevel(readLoggingEnv()) +} + +func readLoggingEnv() LogLevel { + switch strings.ToLower(os.Getenv(logEnv)) { + case "": + return LogLevelNothing + case "debug": + return LogLevelDebug + case "info": + return LogLevelInfo + case "error": + return LogLevelError + default: + fmt.Fprintln(os.Stderr, "invalid quic-go log level, see https://github.com/quic-go/quic-go/wiki/Logging") + return LogLevelNothing + } +} diff --git a/vendor/github.com/quic-go/quic-go/internal/utils/rand.go b/vendor/github.com/quic-go/quic-go/internal/utils/rand.go new file mode 100644 index 0000000..3006914 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/utils/rand.go @@ -0,0 +1,29 @@ +package utils + +import ( + "crypto/rand" + "encoding/binary" +) + +// Rand is a wrapper around crypto/rand that adds some convenience functions known from math/rand. +type Rand struct { + buf [4]byte +} + +func (r *Rand) Int31() int32 { + rand.Read(r.buf[:]) + return int32(binary.BigEndian.Uint32(r.buf[:]) & ^uint32(1<<31)) +} + +// copied from the standard library math/rand implementation of Int63n +func (r *Rand) Int31n(n int32) int32 { + if n&(n-1) == 0 { // n is power of two, can mask + return r.Int31() & (n - 1) + } + max := int32((1 << 31) - 1 - (1<<31)%uint32(n)) + v := r.Int31() + for v > max { + v = r.Int31() + } + return v % n +} diff --git a/vendor/github.com/quic-go/quic-go/internal/utils/ringbuffer/ringbuffer.go b/vendor/github.com/quic-go/quic-go/internal/utils/ringbuffer/ringbuffer.go new file mode 100644 index 0000000..f9b2c79 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/utils/ringbuffer/ringbuffer.go @@ -0,0 +1,96 @@ +package ringbuffer + +// A RingBuffer is a ring buffer. +// It acts as a heap that doesn't cause any allocations. +type RingBuffer[T any] struct { + ring []T + headPos, tailPos int + full bool +} + +// Init preallocates a buffer with a certain size. +func (r *RingBuffer[T]) Init(size int) { + r.ring = make([]T, size) +} + +// Len returns the number of elements in the ring buffer. +func (r *RingBuffer[T]) Len() int { + if r.full { + return len(r.ring) + } + if r.tailPos >= r.headPos { + return r.tailPos - r.headPos + } + return r.tailPos - r.headPos + len(r.ring) +} + +// Empty says if the ring buffer is empty. +func (r *RingBuffer[T]) Empty() bool { + return !r.full && r.headPos == r.tailPos +} + +// PushBack adds a new element. +// If the ring buffer is full, its capacity is increased first. +func (r *RingBuffer[T]) PushBack(t T) { + if r.full || len(r.ring) == 0 { + r.grow() + } + r.ring[r.tailPos] = t + r.tailPos++ + if r.tailPos == len(r.ring) { + r.tailPos = 0 + } + if r.tailPos == r.headPos { + r.full = true + } +} + +// PopFront returns the next element. +// It must not be called when the buffer is empty, that means that +// callers might need to check if there are elements in the buffer first. +func (r *RingBuffer[T]) PopFront() T { + if r.Empty() { + panic("github.com/quic-go/quic-go/internal/utils/ringbuffer: pop from an empty queue") + } + r.full = false + t := r.ring[r.headPos] + r.ring[r.headPos] = *new(T) + r.headPos++ + if r.headPos == len(r.ring) { + r.headPos = 0 + } + return t +} + +// PeekFront returns the next element. +// It must not be called when the buffer is empty, that means that +// callers might need to check if there are elements in the buffer first. +func (r *RingBuffer[T]) PeekFront() T { + if r.Empty() { + panic("github.com/quic-go/quic-go/internal/utils/ringbuffer: peek from an empty queue") + } + return r.ring[r.headPos] +} + +// Grow the maximum size of the queue. +// This method assume the queue is full. +func (r *RingBuffer[T]) grow() { + oldRing := r.ring + newSize := len(oldRing) * 2 + if newSize == 0 { + newSize = 1 + } + r.ring = make([]T, newSize) + headLen := copy(r.ring, oldRing[r.headPos:]) + copy(r.ring[headLen:], oldRing[:r.headPos]) + r.headPos, r.tailPos, r.full = 0, len(oldRing), false +} + +// Clear removes all elements. +func (r *RingBuffer[T]) Clear() { + var zeroValue T + for i := range r.ring { + r.ring[i] = zeroValue + } + r.headPos, r.tailPos, r.full = 0, 0, false +} diff --git a/vendor/github.com/quic-go/quic-go/internal/utils/rtt_stats.go b/vendor/github.com/quic-go/quic-go/internal/utils/rtt_stats.go new file mode 100644 index 0000000..cfa9d5b --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/utils/rtt_stats.go @@ -0,0 +1,119 @@ +package utils + +import ( + "time" + + "github.com/quic-go/quic-go/internal/protocol" +) + +const ( + rttAlpha = 0.125 + oneMinusAlpha = 1 - rttAlpha + rttBeta = 0.25 + oneMinusBeta = 1 - rttBeta + // The default RTT used before an RTT sample is taken. + defaultInitialRTT = 100 * time.Millisecond +) + +// RTTStats provides round-trip statistics +type RTTStats struct { + hasMeasurement bool + + minRTT time.Duration + latestRTT time.Duration + smoothedRTT time.Duration + meanDeviation time.Duration + + maxAckDelay time.Duration +} + +// MinRTT Returns the minRTT for the entire connection. +// May return Zero if no valid updates have occurred. +func (r *RTTStats) MinRTT() time.Duration { return r.minRTT } + +// LatestRTT returns the most recent rtt measurement. +// May return Zero if no valid updates have occurred. +func (r *RTTStats) LatestRTT() time.Duration { return r.latestRTT } + +// SmoothedRTT returns the smoothed RTT for the connection. +// May return Zero if no valid updates have occurred. +func (r *RTTStats) SmoothedRTT() time.Duration { return r.smoothedRTT } + +// MeanDeviation gets the mean deviation +func (r *RTTStats) MeanDeviation() time.Duration { return r.meanDeviation } + +// MaxAckDelay gets the max_ack_delay advertised by the peer +func (r *RTTStats) MaxAckDelay() time.Duration { return r.maxAckDelay } + +// PTO gets the probe timeout duration. +func (r *RTTStats) PTO(includeMaxAckDelay bool) time.Duration { + if r.SmoothedRTT() == 0 { + return 2 * defaultInitialRTT + } + pto := r.SmoothedRTT() + max(4*r.MeanDeviation(), protocol.TimerGranularity) + if includeMaxAckDelay { + pto += r.MaxAckDelay() + } + return pto +} + +// UpdateRTT updates the RTT based on a new sample. +func (r *RTTStats) UpdateRTT(sendDelta, ackDelay time.Duration) { + if sendDelta <= 0 { + return + } + + // Update r.minRTT first. r.minRTT does not use an rttSample corrected for + // ackDelay but the raw observed sendDelta, since poor clock granularity at + // the client may cause a high ackDelay to result in underestimation of the + // r.minRTT. + if r.minRTT == 0 || r.minRTT > sendDelta { + r.minRTT = sendDelta + } + + // Correct for ackDelay if information received from the peer results in a + // an RTT sample at least as large as minRTT. Otherwise, only use the + // sendDelta. + sample := sendDelta + if sample-r.minRTT >= ackDelay { + sample -= ackDelay + } + r.latestRTT = sample + // First time call. + if !r.hasMeasurement { + r.hasMeasurement = true + r.smoothedRTT = sample + r.meanDeviation = sample / 2 + } else { + r.meanDeviation = time.Duration(oneMinusBeta*float32(r.meanDeviation/time.Microsecond)+rttBeta*float32((r.smoothedRTT-sample).Abs()/time.Microsecond)) * time.Microsecond + r.smoothedRTT = time.Duration((float32(r.smoothedRTT/time.Microsecond)*oneMinusAlpha)+(float32(sample/time.Microsecond)*rttAlpha)) * time.Microsecond + } +} + +// SetMaxAckDelay sets the max_ack_delay +func (r *RTTStats) SetMaxAckDelay(mad time.Duration) { + r.maxAckDelay = mad +} + +// SetInitialRTT sets the initial RTT. +// It is used during handshake when restoring the RTT stats from the token. +func (r *RTTStats) SetInitialRTT(t time.Duration) { + // On the server side, by the time we get to process the session ticket, + // we might already have obtained an RTT measurement. + // This can happen if we received the ClientHello in multiple pieces, and one of those pieces was lost. + // Discard the restored value. A fresh measurement is always better. + if r.hasMeasurement { + return + } + r.smoothedRTT = t + r.latestRTT = t +} + +func (r *RTTStats) ResetForPathMigration() { + r.hasMeasurement = false + r.minRTT = 0 + r.latestRTT = 0 + r.smoothedRTT = 0 + r.meanDeviation = 0 + // max_ack_delay remains valid +} diff --git a/vendor/github.com/quic-go/quic-go/internal/utils/timer.go b/vendor/github.com/quic-go/quic-go/internal/utils/timer.go new file mode 100644 index 0000000..361106c --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/utils/timer.go @@ -0,0 +1,57 @@ +package utils + +import ( + "math" + "time" +) + +// A Timer wrapper that behaves correctly when resetting +type Timer struct { + t *time.Timer + read bool + deadline time.Time +} + +// NewTimer creates a new timer that is not set +func NewTimer() *Timer { + return &Timer{t: time.NewTimer(time.Duration(math.MaxInt64))} +} + +// Chan returns the channel of the wrapped timer +func (t *Timer) Chan() <-chan time.Time { + return t.t.C +} + +// Reset the timer, no matter whether the value was read or not +func (t *Timer) Reset(deadline time.Time) { + if deadline.Equal(t.deadline) && !t.read { + // No need to reset the timer + return + } + + // We need to drain the timer if the value from its channel was not read yet. + // See https://groups.google.com/forum/#!topic/golang-dev/c9UUfASVPoU + if !t.t.Stop() && !t.read { + <-t.t.C + } + if !deadline.IsZero() { + t.t.Reset(time.Until(deadline)) + } + + t.read = false + t.deadline = deadline +} + +// SetRead should be called after the value from the chan was read +func (t *Timer) SetRead() { + t.read = true +} + +func (t *Timer) Deadline() time.Time { + return t.deadline +} + +// Stop stops the timer +func (t *Timer) Stop() { + t.t.Stop() +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/ack_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/ack_frame.go new file mode 100644 index 0000000..68bebfa --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/ack_frame.go @@ -0,0 +1,275 @@ +package wire + +import ( + "errors" + "math" + "sort" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +var errInvalidAckRanges = errors.New("AckFrame: ACK frame contains invalid ACK ranges") + +// An AckFrame is an ACK frame +type AckFrame struct { + AckRanges []AckRange // has to be ordered. The highest ACK range goes first, the lowest ACK range goes last + DelayTime time.Duration + + ECT0, ECT1, ECNCE uint64 +} + +// parseAckFrame reads an ACK frame +func parseAckFrame(frame *AckFrame, b []byte, typ FrameType, ackDelayExponent uint8, _ protocol.Version) (int, error) { + startLen := len(b) + ecn := typ == FrameTypeAckECN + + la, l, err := quicvarint.Parse(b) + if err != nil { + return 0, replaceUnexpectedEOF(err) + } + b = b[l:] + largestAcked := protocol.PacketNumber(la) + delay, l, err := quicvarint.Parse(b) + if err != nil { + return 0, replaceUnexpectedEOF(err) + } + b = b[l:] + + delayTime := time.Duration(delay*1< largestAcked { + return 0, errors.New("invalid first ACK range") + } + smallest := largestAcked - ackBlock + frame.AckRanges = append(frame.AckRanges, AckRange{Smallest: smallest, Largest: largestAcked}) + + // read all the other ACK ranges + for i := uint64(0); i < numBlocks; i++ { + g, l, err := quicvarint.Parse(b) + if err != nil { + return 0, replaceUnexpectedEOF(err) + } + b = b[l:] + gap := protocol.PacketNumber(g) + if smallest < gap+2 { + return 0, errInvalidAckRanges + } + largest := smallest - gap - 2 + + ab, l, err := quicvarint.Parse(b) + if err != nil { + return 0, replaceUnexpectedEOF(err) + } + b = b[l:] + ackBlock := protocol.PacketNumber(ab) + + if ackBlock > largest { + return 0, errInvalidAckRanges + } + smallest = largest - ackBlock + frame.AckRanges = append(frame.AckRanges, AckRange{Smallest: smallest, Largest: largest}) + } + + if !frame.validateAckRanges() { + return 0, errInvalidAckRanges + } + + if ecn { + ect0, l, err := quicvarint.Parse(b) + if err != nil { + return 0, replaceUnexpectedEOF(err) + } + b = b[l:] + frame.ECT0 = ect0 + ect1, l, err := quicvarint.Parse(b) + if err != nil { + return 0, replaceUnexpectedEOF(err) + } + b = b[l:] + frame.ECT1 = ect1 + ecnce, l, err := quicvarint.Parse(b) + if err != nil { + return 0, replaceUnexpectedEOF(err) + } + b = b[l:] + frame.ECNCE = ecnce + } + + return startLen - len(b), nil +} + +// Append appends an ACK frame. +func (f *AckFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + hasECN := f.ECT0 > 0 || f.ECT1 > 0 || f.ECNCE > 0 + if hasECN { + b = append(b, byte(FrameTypeAckECN)) + } else { + b = append(b, byte(FrameTypeAck)) + } + b = quicvarint.Append(b, uint64(f.LargestAcked())) + b = quicvarint.Append(b, encodeAckDelay(f.DelayTime)) + + numRanges := f.numEncodableAckRanges() + b = quicvarint.Append(b, uint64(numRanges-1)) + + // write the first range + _, firstRange := f.encodeAckRange(0) + b = quicvarint.Append(b, firstRange) + + // write all the other range + for i := 1; i < numRanges; i++ { + gap, len := f.encodeAckRange(i) + b = quicvarint.Append(b, gap) + b = quicvarint.Append(b, len) + } + + if hasECN { + b = quicvarint.Append(b, f.ECT0) + b = quicvarint.Append(b, f.ECT1) + b = quicvarint.Append(b, f.ECNCE) + } + return b, nil +} + +// Length of a written frame +func (f *AckFrame) Length(_ protocol.Version) protocol.ByteCount { + largestAcked := f.AckRanges[0].Largest + numRanges := f.numEncodableAckRanges() + + length := 1 + quicvarint.Len(uint64(largestAcked)) + quicvarint.Len(encodeAckDelay(f.DelayTime)) + + length += quicvarint.Len(uint64(numRanges - 1)) + lowestInFirstRange := f.AckRanges[0].Smallest + length += quicvarint.Len(uint64(largestAcked - lowestInFirstRange)) + + for i := 1; i < numRanges; i++ { + gap, len := f.encodeAckRange(i) + length += quicvarint.Len(gap) + length += quicvarint.Len(len) + } + if f.ECT0 > 0 || f.ECT1 > 0 || f.ECNCE > 0 { + length += quicvarint.Len(f.ECT0) + length += quicvarint.Len(f.ECT1) + length += quicvarint.Len(f.ECNCE) + } + return protocol.ByteCount(length) +} + +// gets the number of ACK ranges that can be encoded +// such that the resulting frame is smaller than the maximum ACK frame size +func (f *AckFrame) numEncodableAckRanges() int { + length := 1 + quicvarint.Len(uint64(f.LargestAcked())) + quicvarint.Len(encodeAckDelay(f.DelayTime)) + length += 2 // assume that the number of ranges will consume 2 bytes + for i := 1; i < len(f.AckRanges); i++ { + gap, len := f.encodeAckRange(i) + rangeLen := quicvarint.Len(gap) + quicvarint.Len(len) + if protocol.ByteCount(length+rangeLen) > protocol.MaxAckFrameSize { + // Writing range i would exceed the MaxAckFrameSize. + // So encode one range less than that. + return i - 1 + } + length += rangeLen + } + return len(f.AckRanges) +} + +func (f *AckFrame) encodeAckRange(i int) (uint64 /* gap */, uint64 /* length */) { + if i == 0 { + return 0, uint64(f.AckRanges[0].Largest - f.AckRanges[0].Smallest) + } + return uint64(f.AckRanges[i-1].Smallest - f.AckRanges[i].Largest - 2), + uint64(f.AckRanges[i].Largest - f.AckRanges[i].Smallest) +} + +// HasMissingRanges returns if this frame reports any missing packets +func (f *AckFrame) HasMissingRanges() bool { + return len(f.AckRanges) > 1 +} + +func (f *AckFrame) validateAckRanges() bool { + if len(f.AckRanges) == 0 { + return false + } + + // check the validity of every single ACK range + for _, ackRange := range f.AckRanges { + if ackRange.Smallest > ackRange.Largest { + return false + } + } + + // check the consistency for ACK with multiple NACK ranges + for i, ackRange := range f.AckRanges { + if i == 0 { + continue + } + lastAckRange := f.AckRanges[i-1] + if lastAckRange.Smallest <= ackRange.Smallest { + return false + } + if lastAckRange.Smallest <= ackRange.Largest+1 { + return false + } + } + + return true +} + +// LargestAcked is the largest acked packet number +func (f *AckFrame) LargestAcked() protocol.PacketNumber { + return f.AckRanges[0].Largest +} + +// LowestAcked is the lowest acked packet number +func (f *AckFrame) LowestAcked() protocol.PacketNumber { + return f.AckRanges[len(f.AckRanges)-1].Smallest +} + +// AcksPacket determines if this ACK frame acks a certain packet number +func (f *AckFrame) AcksPacket(p protocol.PacketNumber) bool { + if p < f.LowestAcked() || p > f.LargestAcked() { + return false + } + + i := sort.Search(len(f.AckRanges), func(i int) bool { + return p >= f.AckRanges[i].Smallest + }) + // i will always be < len(f.AckRanges), since we checked above that p is not bigger than the largest acked + return p <= f.AckRanges[i].Largest +} + +func (f *AckFrame) Reset() { + f.DelayTime = 0 + f.ECT0 = 0 + f.ECT1 = 0 + f.ECNCE = 0 + for _, r := range f.AckRanges { + r.Largest = 0 + r.Smallest = 0 + } + f.AckRanges = f.AckRanges[:0] +} + +func encodeAckDelay(delay time.Duration) uint64 { + return uint64(delay.Nanoseconds() / (1000 * (1 << protocol.AckDelayExponent))) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/ack_range.go b/vendor/github.com/quic-go/quic-go/internal/wire/ack_range.go new file mode 100644 index 0000000..03a1235 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/ack_range.go @@ -0,0 +1,14 @@ +package wire + +import "github.com/quic-go/quic-go/internal/protocol" + +// AckRange is an ACK range +type AckRange struct { + Smallest protocol.PacketNumber + Largest protocol.PacketNumber +} + +// Len returns the number of packets contained in this ACK range +func (r AckRange) Len() protocol.PacketNumber { + return r.Largest - r.Smallest + 1 +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/connection_close_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/connection_close_frame.go new file mode 100644 index 0000000..6c71aab --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/connection_close_frame.go @@ -0,0 +1,75 @@ +package wire + +import ( + "io" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +// A ConnectionCloseFrame is a CONNECTION_CLOSE frame +type ConnectionCloseFrame struct { + IsApplicationError bool + ErrorCode uint64 + FrameType uint64 + ReasonPhrase string +} + +func parseConnectionCloseFrame(b []byte, typ FrameType, _ protocol.Version) (*ConnectionCloseFrame, int, error) { + startLen := len(b) + f := &ConnectionCloseFrame{IsApplicationError: typ == FrameTypeApplicationClose} + ec, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + f.ErrorCode = ec + // read the Frame Type, if this is not an application error + if !f.IsApplicationError { + ft, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + f.FrameType = ft + } + var reasonPhraseLen uint64 + reasonPhraseLen, l, err = quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + if int(reasonPhraseLen) > len(b) { + return nil, 0, io.EOF + } + + reasonPhrase := make([]byte, reasonPhraseLen) + copy(reasonPhrase, b) + f.ReasonPhrase = string(reasonPhrase) + return f, startLen - len(b) + int(reasonPhraseLen), nil +} + +// Length of a written frame +func (f *ConnectionCloseFrame) Length(protocol.Version) protocol.ByteCount { + length := 1 + protocol.ByteCount(quicvarint.Len(f.ErrorCode)+quicvarint.Len(uint64(len(f.ReasonPhrase)))) + protocol.ByteCount(len(f.ReasonPhrase)) + if !f.IsApplicationError { + length += protocol.ByteCount(quicvarint.Len(f.FrameType)) // for the frame type + } + return length +} + +func (f *ConnectionCloseFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + if f.IsApplicationError { + b = append(b, byte(FrameTypeApplicationClose)) + } else { + b = append(b, byte(FrameTypeConnectionClose)) + } + + b = quicvarint.Append(b, f.ErrorCode) + if !f.IsApplicationError { + b = quicvarint.Append(b, f.FrameType) + } + b = quicvarint.Append(b, uint64(len(f.ReasonPhrase))) + b = append(b, []byte(f.ReasonPhrase)...) + return b, nil +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/crypto_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/crypto_frame.go new file mode 100644 index 0000000..60a713f --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/crypto_frame.go @@ -0,0 +1,97 @@ +package wire + +import ( + "io" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +// A CryptoFrame is a CRYPTO frame +type CryptoFrame struct { + Offset protocol.ByteCount + Data []byte +} + +func parseCryptoFrame(b []byte, _ protocol.Version) (*CryptoFrame, int, error) { + startLen := len(b) + frame := &CryptoFrame{} + offset, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + frame.Offset = protocol.ByteCount(offset) + dataLen, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + if dataLen > uint64(len(b)) { + return nil, 0, io.EOF + } + if dataLen != 0 { + frame.Data = make([]byte, dataLen) + copy(frame.Data, b) + } + return frame, startLen - len(b) + int(dataLen), nil +} + +func (f *CryptoFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + b = append(b, byte(FrameTypeCrypto)) + b = quicvarint.Append(b, uint64(f.Offset)) + b = quicvarint.Append(b, uint64(len(f.Data))) + b = append(b, f.Data...) + return b, nil +} + +// Length of a written frame +func (f *CryptoFrame) Length(_ protocol.Version) protocol.ByteCount { + return protocol.ByteCount(1 + quicvarint.Len(uint64(f.Offset)) + quicvarint.Len(uint64(len(f.Data))) + len(f.Data)) +} + +// MaxDataLen returns the maximum data length +func (f *CryptoFrame) MaxDataLen(maxSize protocol.ByteCount) protocol.ByteCount { + // pretend that the data size will be 1 bytes + // if it turns out that varint encoding the length will consume 2 bytes, we need to adjust the data length afterwards + headerLen := protocol.ByteCount(1 + quicvarint.Len(uint64(f.Offset)) + 1) + if headerLen > maxSize { + return 0 + } + maxDataLen := maxSize - headerLen + if quicvarint.Len(uint64(maxDataLen)) != 1 { + maxDataLen-- + } + return maxDataLen +} + +// MaybeSplitOffFrame splits a frame such that it is not bigger than n bytes. +// It returns if the frame was actually split. +// The frame might not be split if: +// * the size is large enough to fit the whole frame +// * the size is too small to fit even a 1-byte frame. In that case, the frame returned is nil. +func (f *CryptoFrame) MaybeSplitOffFrame(maxSize protocol.ByteCount, version protocol.Version) (*CryptoFrame, bool /* was splitting required */) { + if f.Length(version) <= maxSize { + return nil, false + } + + n := f.MaxDataLen(maxSize) + if n == 0 { + return nil, true + } + + newLen := protocol.ByteCount(len(f.Data)) - n + + new := &CryptoFrame{} + new.Offset = f.Offset + new.Data = make([]byte, newLen) + + // swap the data slices + new.Data, f.Data = f.Data, new.Data + + copy(f.Data, new.Data[n:]) + new.Data = new.Data[:n] + f.Offset += n + + return new, true +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/data_blocked_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/data_blocked_frame.go new file mode 100644 index 0000000..11c72ea --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/data_blocked_frame.go @@ -0,0 +1,29 @@ +package wire + +import ( + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +// A DataBlockedFrame is a DATA_BLOCKED frame +type DataBlockedFrame struct { + MaximumData protocol.ByteCount +} + +func parseDataBlockedFrame(b []byte, _ protocol.Version) (*DataBlockedFrame, int, error) { + offset, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + return &DataBlockedFrame{MaximumData: protocol.ByteCount(offset)}, l, nil +} + +func (f *DataBlockedFrame) Append(b []byte, version protocol.Version) ([]byte, error) { + b = append(b, byte(FrameTypeDataBlocked)) + return quicvarint.Append(b, uint64(f.MaximumData)), nil +} + +// Length of a written frame +func (f *DataBlockedFrame) Length(version protocol.Version) protocol.ByteCount { + return 1 + protocol.ByteCount(quicvarint.Len(uint64(f.MaximumData))) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/datagram_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/datagram_frame.go new file mode 100644 index 0000000..a603486 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/datagram_frame.go @@ -0,0 +1,85 @@ +package wire + +import ( + "io" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +// MaxDatagramSize is the maximum size of a DATAGRAM frame (RFC 9221). +// By setting it to a large value, we allow all datagrams that fit into a QUIC packet. +// The value is chosen such that it can still be encoded as a 2 byte varint. +// This is a var and not a const so it can be set in tests. +var MaxDatagramSize protocol.ByteCount = 16383 + +// A DatagramFrame is a DATAGRAM frame +type DatagramFrame struct { + DataLenPresent bool + Data []byte +} + +func parseDatagramFrame(b []byte, typ FrameType, _ protocol.Version) (*DatagramFrame, int, error) { + startLen := len(b) + f := &DatagramFrame{} + f.DataLenPresent = uint64(typ)&0x1 > 0 + + var length uint64 + if f.DataLenPresent { + var err error + var l int + length, l, err = quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + if length > uint64(len(b)) { + return nil, 0, io.EOF + } + } else { + length = uint64(len(b)) + } + f.Data = make([]byte, length) + copy(f.Data, b) + return f, startLen - len(b) + int(length), nil +} + +func (f *DatagramFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + typ := uint8(0x30) + if f.DataLenPresent { + typ ^= 0b1 + } + b = append(b, typ) + if f.DataLenPresent { + b = quicvarint.Append(b, uint64(len(f.Data))) + } + b = append(b, f.Data...) + return b, nil +} + +// MaxDataLen returns the maximum data length +func (f *DatagramFrame) MaxDataLen(maxSize protocol.ByteCount, version protocol.Version) protocol.ByteCount { + headerLen := protocol.ByteCount(1) + if f.DataLenPresent { + // pretend that the data size will be 1 bytes + // if it turns out that varint encoding the length will consume 2 bytes, we need to adjust the data length afterwards + headerLen++ + } + if headerLen > maxSize { + return 0 + } + maxDataLen := maxSize - headerLen + if f.DataLenPresent && quicvarint.Len(uint64(maxDataLen)) != 1 { + maxDataLen-- + } + return maxDataLen +} + +// Length of a written frame +func (f *DatagramFrame) Length(_ protocol.Version) protocol.ByteCount { + length := 1 + protocol.ByteCount(len(f.Data)) + if f.DataLenPresent { + length += protocol.ByteCount(quicvarint.Len(uint64(len(f.Data)))) + } + return length +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/extended_header.go b/vendor/github.com/quic-go/quic-go/internal/wire/extended_header.go new file mode 100644 index 0000000..6ab9fb9 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/extended_header.go @@ -0,0 +1,164 @@ +package wire + +import ( + "encoding/binary" + "errors" + "fmt" + "io" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/quicvarint" +) + +// ErrInvalidReservedBits is returned when the reserved bits are incorrect. +// When this error is returned, parsing continues, and an ExtendedHeader is returned. +// This is necessary because we need to decrypt the packet in that case, +// in order to avoid a timing side-channel. +var ErrInvalidReservedBits = errors.New("invalid reserved bits") + +// ExtendedHeader is the header of a QUIC packet. +type ExtendedHeader struct { + Header + + typeByte byte + + KeyPhase protocol.KeyPhaseBit + + PacketNumberLen protocol.PacketNumberLen + PacketNumber protocol.PacketNumber + + parsedLen protocol.ByteCount +} + +func (h *ExtendedHeader) parse(data []byte) (bool /* reserved bits valid */, error) { + // read the (now unencrypted) first byte + h.typeByte = data[0] + h.PacketNumberLen = protocol.PacketNumberLen(h.typeByte&0x3) + 1 + if protocol.ByteCount(len(data)) < h.Header.ParsedLen()+protocol.ByteCount(h.PacketNumberLen) { + return false, io.EOF + } + + pn, err := readPacketNumber(data[h.Header.ParsedLen():], h.PacketNumberLen) + if err != nil { + return true, nil + } + h.PacketNumber = pn + reservedBitsValid := h.typeByte&0xc == 0 + + h.parsedLen = h.Header.ParsedLen() + protocol.ByteCount(h.PacketNumberLen) + return reservedBitsValid, err +} + +// Append appends the Header. +func (h *ExtendedHeader) Append(b []byte, v protocol.Version) ([]byte, error) { + if h.DestConnectionID.Len() > protocol.MaxConnIDLen { + return nil, fmt.Errorf("invalid connection ID length: %d bytes", h.DestConnectionID.Len()) + } + if h.SrcConnectionID.Len() > protocol.MaxConnIDLen { + return nil, fmt.Errorf("invalid connection ID length: %d bytes", h.SrcConnectionID.Len()) + } + + var packetType uint8 + if v == protocol.Version2 { + switch h.Type { + case protocol.PacketTypeInitial: + packetType = 0b01 + case protocol.PacketType0RTT: + packetType = 0b10 + case protocol.PacketTypeHandshake: + packetType = 0b11 + case protocol.PacketTypeRetry: + packetType = 0b00 + } + } else { + switch h.Type { + case protocol.PacketTypeInitial: + packetType = 0b00 + case protocol.PacketType0RTT: + packetType = 0b01 + case protocol.PacketTypeHandshake: + packetType = 0b10 + case protocol.PacketTypeRetry: + packetType = 0b11 + } + } + firstByte := 0xc0 | packetType<<4 + if h.Type != protocol.PacketTypeRetry { + // Retry packets don't have a packet number + firstByte |= uint8(h.PacketNumberLen - 1) + } + + b = append(b, firstByte) + b = append(b, make([]byte, 4)...) + binary.BigEndian.PutUint32(b[len(b)-4:], uint32(h.Version)) + b = append(b, uint8(h.DestConnectionID.Len())) + b = append(b, h.DestConnectionID.Bytes()...) + b = append(b, uint8(h.SrcConnectionID.Len())) + b = append(b, h.SrcConnectionID.Bytes()...) + + //nolint:exhaustive + switch h.Type { + case protocol.PacketTypeRetry: + b = append(b, h.Token...) + return b, nil + case protocol.PacketTypeInitial: + b = quicvarint.Append(b, uint64(len(h.Token))) + b = append(b, h.Token...) + } + b = quicvarint.AppendWithLen(b, uint64(h.Length), 2) + return appendPacketNumber(b, h.PacketNumber, h.PacketNumberLen) +} + +// ParsedLen returns the number of bytes that were consumed when parsing the header +func (h *ExtendedHeader) ParsedLen() protocol.ByteCount { + return h.parsedLen +} + +// GetLength determines the length of the Header. +func (h *ExtendedHeader) GetLength(_ protocol.Version) protocol.ByteCount { + length := 1 /* type byte */ + 4 /* version */ + 1 /* dest conn ID len */ + protocol.ByteCount(h.DestConnectionID.Len()) + 1 /* src conn ID len */ + protocol.ByteCount(h.SrcConnectionID.Len()) + protocol.ByteCount(h.PacketNumberLen) + 2 /* length */ + if h.Type == protocol.PacketTypeInitial { + length += protocol.ByteCount(quicvarint.Len(uint64(len(h.Token))) + len(h.Token)) + } + return length +} + +// Log logs the Header +func (h *ExtendedHeader) Log(logger utils.Logger) { + var token string + if h.Type == protocol.PacketTypeInitial || h.Type == protocol.PacketTypeRetry { + if len(h.Token) == 0 { + token = "Token: (empty), " + } else { + token = fmt.Sprintf("Token: %#x, ", h.Token) + } + if h.Type == protocol.PacketTypeRetry { + logger.Debugf("\tLong Header{Type: %s, DestConnectionID: %s, SrcConnectionID: %s, %sVersion: %s}", h.Type, h.DestConnectionID, h.SrcConnectionID, token, h.Version) + return + } + } + logger.Debugf("\tLong Header{Type: %s, DestConnectionID: %s, SrcConnectionID: %s, %sPacketNumber: %d, PacketNumberLen: %d, Length: %d, Version: %s}", h.Type, h.DestConnectionID, h.SrcConnectionID, token, h.PacketNumber, h.PacketNumberLen, h.Length, h.Version) +} + +func appendPacketNumber(b []byte, pn protocol.PacketNumber, pnLen protocol.PacketNumberLen) ([]byte, error) { + switch pnLen { + case protocol.PacketNumberLen1: + b = append(b, uint8(pn)) + case protocol.PacketNumberLen2: + buf := make([]byte, 2) + binary.BigEndian.PutUint16(buf, uint16(pn)) + b = append(b, buf...) + case protocol.PacketNumberLen3: + buf := make([]byte, 4) + binary.BigEndian.PutUint32(buf, uint32(pn)) + b = append(b, buf[1:]...) + case protocol.PacketNumberLen4: + buf := make([]byte, 4) + binary.BigEndian.PutUint32(buf, uint32(pn)) + b = append(b, buf...) + default: + return nil, fmt.Errorf("invalid packet number length: %d", pnLen) + } + return b, nil +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/frame.go new file mode 100644 index 0000000..09ea92f --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/frame.go @@ -0,0 +1,33 @@ +package wire + +import ( + "github.com/quic-go/quic-go/internal/protocol" +) + +// A Frame in QUIC +type Frame interface { + Append(b []byte, version protocol.Version) ([]byte, error) + Length(version protocol.Version) protocol.ByteCount +} + +// IsProbingFrame returns true if the frame is a probing frame. +// See section 9.1 of RFC 9000. +func IsProbingFrame(f Frame) bool { + switch f.(type) { + case *PathChallengeFrame, *PathResponseFrame, *NewConnectionIDFrame: + return true + } + return false +} + +// IsProbingFrameType returns true if the FrameType is a probing frame. +// See section 9.1 of RFC 9000. +func IsProbingFrameType(f FrameType) bool { + //nolint:exhaustive // PATH_CHALLENGE, PATH_RESPONSE and NEW_CONNECTION_ID are the only probing frames + switch f { + case FrameTypePathChallenge, FrameTypePathResponse, FrameTypeNewConnectionID: + return true + default: + return false + } +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/frame_parser.go b/vendor/github.com/quic-go/quic-go/internal/wire/frame_parser.go new file mode 100644 index 0000000..e92e29c --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/frame_parser.go @@ -0,0 +1,185 @@ +package wire + +import ( + "errors" + "fmt" + "io" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/quicvarint" +) + +var errUnknownFrameType = errors.New("unknown frame type") + +// The FrameParser parses QUIC frames, one by one. +type FrameParser struct { + ackDelayExponent uint8 + supportsDatagrams bool + supportsResetStreamAt bool + + // To avoid allocating when parsing, keep a single ACK frame struct. + // It is used over and over again. + ackFrame *AckFrame +} + +// NewFrameParser creates a new frame parser. +func NewFrameParser(supportsDatagrams, supportsResetStreamAt bool) *FrameParser { + return &FrameParser{ + supportsDatagrams: supportsDatagrams, + supportsResetStreamAt: supportsResetStreamAt, + ackFrame: &AckFrame{}, + } +} + +// ParseType parses the frame type of the next frame. +// It skips over PADDING frames. +func (p *FrameParser) ParseType(b []byte, encLevel protocol.EncryptionLevel) (FrameType, int, error) { + var parsed int + for len(b) != 0 { + typ, l, err := quicvarint.Parse(b) + parsed += l + if err != nil { + return 0, parsed, &qerr.TransportError{ + ErrorCode: qerr.FrameEncodingError, + ErrorMessage: err.Error(), + } + } + b = b[l:] + if typ == 0x0 { // skip PADDING frames + continue + } + ft := FrameType(typ) + valid := ft.isValidRFC9000() || + (p.supportsDatagrams && ft.IsDatagramFrameType()) || + (p.supportsResetStreamAt && ft == FrameTypeResetStreamAt) + if !valid { + return 0, parsed, &qerr.TransportError{ + ErrorCode: qerr.FrameEncodingError, + FrameType: typ, + ErrorMessage: errUnknownFrameType.Error(), + } + } + if !ft.isAllowedAtEncLevel(encLevel) { + return 0, parsed, &qerr.TransportError{ + ErrorCode: qerr.FrameEncodingError, + FrameType: typ, + ErrorMessage: fmt.Sprintf("%d not allowed at encryption level %s", ft, encLevel), + } + } + return ft, parsed, nil + } + return 0, parsed, io.EOF +} + +func (p *FrameParser) ParseStreamFrame(frameType FrameType, data []byte, v protocol.Version) (*StreamFrame, int, error) { + frame, n, err := ParseStreamFrame(data, frameType, v) + if err != nil { + return nil, n, &qerr.TransportError{ + ErrorCode: qerr.FrameEncodingError, + FrameType: uint64(frameType), + ErrorMessage: err.Error(), + } + } + return frame, n, nil +} + +func (p *FrameParser) ParseAckFrame(frameType FrameType, data []byte, encLevel protocol.EncryptionLevel, v protocol.Version) (*AckFrame, int, error) { + ackDelayExponent := p.ackDelayExponent + if encLevel != protocol.Encryption1RTT { + ackDelayExponent = protocol.DefaultAckDelayExponent + } + p.ackFrame.Reset() + l, err := parseAckFrame(p.ackFrame, data, frameType, ackDelayExponent, v) + if err != nil { + return nil, l, &qerr.TransportError{ + ErrorCode: qerr.FrameEncodingError, + FrameType: uint64(frameType), + ErrorMessage: err.Error(), + } + } + + return p.ackFrame, l, nil +} + +func (p *FrameParser) ParseDatagramFrame(frameType FrameType, data []byte, v protocol.Version) (*DatagramFrame, int, error) { + f, l, err := parseDatagramFrame(data, frameType, v) + if err != nil { + return nil, 0, &qerr.TransportError{ + ErrorCode: qerr.FrameEncodingError, + FrameType: uint64(frameType), + ErrorMessage: err.Error(), + } + } + return f, l, nil +} + +// ParseLessCommonFrame parses everything except STREAM, ACK or DATAGRAM. +// These cases should be handled separately for performance reasons. +func (p *FrameParser) ParseLessCommonFrame(frameType FrameType, data []byte, v protocol.Version) (Frame, int, error) { + var frame Frame + var l int + var err error + //nolint:exhaustive // Common frames should already be handled. + switch frameType { + case FrameTypePing: + frame = &PingFrame{} + case FrameTypeResetStream: + frame, l, err = parseResetStreamFrame(data, false, v) + case FrameTypeStopSending: + frame, l, err = parseStopSendingFrame(data, v) + case FrameTypeCrypto: + frame, l, err = parseCryptoFrame(data, v) + case FrameTypeNewToken: + frame, l, err = parseNewTokenFrame(data, v) + case FrameTypeMaxData: + frame, l, err = parseMaxDataFrame(data, v) + case FrameTypeMaxStreamData: + frame, l, err = parseMaxStreamDataFrame(data, v) + case FrameTypeBidiMaxStreams, FrameTypeUniMaxStreams: + frame, l, err = parseMaxStreamsFrame(data, frameType, v) + case FrameTypeDataBlocked: + frame, l, err = parseDataBlockedFrame(data, v) + case FrameTypeStreamDataBlocked: + frame, l, err = parseStreamDataBlockedFrame(data, v) + case FrameTypeBidiStreamBlocked, FrameTypeUniStreamBlocked: + frame, l, err = parseStreamsBlockedFrame(data, frameType, v) + case FrameTypeNewConnectionID: + frame, l, err = parseNewConnectionIDFrame(data, v) + case FrameTypeRetireConnectionID: + frame, l, err = parseRetireConnectionIDFrame(data, v) + case FrameTypePathChallenge: + frame, l, err = parsePathChallengeFrame(data, v) + case FrameTypePathResponse: + frame, l, err = parsePathResponseFrame(data, v) + case FrameTypeConnectionClose, FrameTypeApplicationClose: + frame, l, err = parseConnectionCloseFrame(data, frameType, v) + case FrameTypeHandshakeDone: + frame = &HandshakeDoneFrame{} + case FrameTypeResetStreamAt: + frame, l, err = parseResetStreamFrame(data, true, v) + default: + err = errUnknownFrameType + } + if err != nil { + return frame, l, &qerr.TransportError{ + ErrorCode: qerr.FrameEncodingError, + FrameType: uint64(frameType), + ErrorMessage: err.Error(), + } + } + return frame, l, err +} + +// SetAckDelayExponent sets the acknowledgment delay exponent (sent in the transport parameters). +// This value is used to scale the ACK Delay field in the ACK frame. +func (p *FrameParser) SetAckDelayExponent(exp uint8) { + p.ackDelayExponent = exp +} + +func replaceUnexpectedEOF(e error) error { + if e == io.ErrUnexpectedEOF { + return io.EOF + } + return e +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/frame_type.go b/vendor/github.com/quic-go/quic-go/internal/wire/frame_type.go new file mode 100644 index 0000000..0576657 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/frame_type.go @@ -0,0 +1,77 @@ +package wire + +import "github.com/quic-go/quic-go/internal/protocol" + +type FrameType uint64 + +// These constants correspond to those defined in RFC 9000. +// Stream frame types are not listed explicitly here; use FrameType.IsStreamFrameType() to identify them. +const ( + FrameTypePing FrameType = 0x1 + FrameTypeAck FrameType = 0x2 + FrameTypeAckECN FrameType = 0x3 + FrameTypeResetStream FrameType = 0x4 + FrameTypeStopSending FrameType = 0x5 + FrameTypeCrypto FrameType = 0x6 + FrameTypeNewToken FrameType = 0x7 + + FrameTypeMaxData FrameType = 0x10 + FrameTypeMaxStreamData FrameType = 0x11 + FrameTypeBidiMaxStreams FrameType = 0x12 + FrameTypeUniMaxStreams FrameType = 0x13 + FrameTypeDataBlocked FrameType = 0x14 + FrameTypeStreamDataBlocked FrameType = 0x15 + FrameTypeBidiStreamBlocked FrameType = 0x16 + FrameTypeUniStreamBlocked FrameType = 0x17 + FrameTypeNewConnectionID FrameType = 0x18 + FrameTypeRetireConnectionID FrameType = 0x19 + FrameTypePathChallenge FrameType = 0x1a + FrameTypePathResponse FrameType = 0x1b + FrameTypeConnectionClose FrameType = 0x1c + FrameTypeApplicationClose FrameType = 0x1d + FrameTypeHandshakeDone FrameType = 0x1e + FrameTypeResetStreamAt FrameType = 0x24 // https://datatracker.ietf.org/doc/draft-ietf-quic-reliable-stream-reset/06/ + + FrameTypeDatagramNoLength FrameType = 0x30 + FrameTypeDatagramWithLength FrameType = 0x31 +) + +func (t FrameType) IsStreamFrameType() bool { + return t >= 0x8 && t <= 0xf +} + +func (t FrameType) isValidRFC9000() bool { + return t <= 0x1e +} + +func (t FrameType) IsAckFrameType() bool { + return t == FrameTypeAck || t == FrameTypeAckECN +} + +func (t FrameType) IsDatagramFrameType() bool { + return t == FrameTypeDatagramNoLength || t == FrameTypeDatagramWithLength +} + +func (t FrameType) isAllowedAtEncLevel(encLevel protocol.EncryptionLevel) bool { + //nolint:exhaustive + switch encLevel { + case protocol.EncryptionInitial, protocol.EncryptionHandshake: + switch t { + case FrameTypeCrypto, FrameTypeAck, FrameTypeAckECN, FrameTypeConnectionClose, FrameTypePing: + return true + default: + return false + } + case protocol.Encryption0RTT: + switch t { + case FrameTypeCrypto, FrameTypeAck, FrameTypeAckECN, FrameTypeConnectionClose, FrameTypeNewToken, FrameTypePathResponse, FrameTypeRetireConnectionID: + return false + default: + return true + } + case protocol.Encryption1RTT: + return true + default: + panic("unknown encryption level") + } +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/handshake_done_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/handshake_done_frame.go new file mode 100644 index 0000000..bf95f52 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/handshake_done_frame.go @@ -0,0 +1,17 @@ +package wire + +import ( + "github.com/quic-go/quic-go/internal/protocol" +) + +// A HandshakeDoneFrame is a HANDSHAKE_DONE frame +type HandshakeDoneFrame struct{} + +func (f *HandshakeDoneFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + return append(b, byte(FrameTypeHandshakeDone)), nil +} + +// Length of a written frame +func (f *HandshakeDoneFrame) Length(_ protocol.Version) protocol.ByteCount { + return 1 +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/header.go b/vendor/github.com/quic-go/quic-go/internal/wire/header.go new file mode 100644 index 0000000..678a04a --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/header.go @@ -0,0 +1,302 @@ +package wire + +import ( + "encoding/binary" + "errors" + "fmt" + "io" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +// ParseConnectionID parses the destination connection ID of a packet. +func ParseConnectionID(data []byte, shortHeaderConnIDLen int) (protocol.ConnectionID, error) { + if len(data) == 0 { + return protocol.ConnectionID{}, io.EOF + } + if !IsLongHeaderPacket(data[0]) { + if len(data) < shortHeaderConnIDLen+1 { + return protocol.ConnectionID{}, io.EOF + } + return protocol.ParseConnectionID(data[1 : 1+shortHeaderConnIDLen]), nil + } + if len(data) < 6 { + return protocol.ConnectionID{}, io.EOF + } + destConnIDLen := int(data[5]) + if destConnIDLen > protocol.MaxConnIDLen { + return protocol.ConnectionID{}, protocol.ErrInvalidConnectionIDLen + } + if len(data) < 6+destConnIDLen { + return protocol.ConnectionID{}, io.EOF + } + return protocol.ParseConnectionID(data[6 : 6+destConnIDLen]), nil +} + +// ParseArbitraryLenConnectionIDs parses the most general form of a Long Header packet, +// using only the version-independent packet format as described in Section 5.1 of RFC 8999: +// https://datatracker.ietf.org/doc/html/rfc8999#section-5.1. +// This function should only be called on Long Header packets for which we don't support the version. +func ParseArbitraryLenConnectionIDs(data []byte) (bytesParsed int, dest, src protocol.ArbitraryLenConnectionID, _ error) { + startLen := len(data) + if len(data) < 6 { + return 0, nil, nil, io.EOF + } + data = data[5:] // skip first byte and version field + destConnIDLen := data[0] + data = data[1:] + destConnID := make(protocol.ArbitraryLenConnectionID, destConnIDLen) + if len(data) < int(destConnIDLen)+1 { + return 0, nil, nil, io.EOF + } + copy(destConnID, data) + data = data[destConnIDLen:] + srcConnIDLen := data[0] + data = data[1:] + if len(data) < int(srcConnIDLen) { + return 0, nil, nil, io.EOF + } + srcConnID := make(protocol.ArbitraryLenConnectionID, srcConnIDLen) + copy(srcConnID, data) + return startLen - len(data) + int(srcConnIDLen), destConnID, srcConnID, nil +} + +func IsPotentialQUICPacket(firstByte byte) bool { + return firstByte&0x40 > 0 +} + +// IsLongHeaderPacket says if this is a Long Header packet +func IsLongHeaderPacket(firstByte byte) bool { + return firstByte&0x80 > 0 +} + +// ParseVersion parses the QUIC version. +// It should only be called for Long Header packets (Short Header packets don't contain a version number). +func ParseVersion(data []byte) (protocol.Version, error) { + if len(data) < 5 { + return 0, io.EOF + } + return protocol.Version(binary.BigEndian.Uint32(data[1:5])), nil +} + +// IsVersionNegotiationPacket says if this is a version negotiation packet +func IsVersionNegotiationPacket(b []byte) bool { + if len(b) < 5 { + return false + } + return IsLongHeaderPacket(b[0]) && b[1] == 0 && b[2] == 0 && b[3] == 0 && b[4] == 0 +} + +// Is0RTTPacket says if this is a 0-RTT packet. +// A packet sent with a version we don't understand can never be a 0-RTT packet. +func Is0RTTPacket(b []byte) bool { + if len(b) < 5 { + return false + } + if !IsLongHeaderPacket(b[0]) { + return false + } + version := protocol.Version(binary.BigEndian.Uint32(b[1:5])) + //nolint:exhaustive // We only need to test QUIC versions that we support. + switch version { + case protocol.Version1: + return b[0]>>4&0b11 == 0b01 + case protocol.Version2: + return b[0]>>4&0b11 == 0b10 + default: + return false + } +} + +var ErrUnsupportedVersion = errors.New("unsupported version") + +// The Header is the version independent part of the header +type Header struct { + typeByte byte + Type protocol.PacketType + + Version protocol.Version + SrcConnectionID protocol.ConnectionID + DestConnectionID protocol.ConnectionID + + Length protocol.ByteCount + + Token []byte + + parsedLen protocol.ByteCount // how many bytes were read while parsing this header +} + +// ParsePacket parses a long header packet. +// The packet is cut according to the length field. +// If we understand the version, the packet is parsed up unto the packet number. +// Otherwise, only the invariant part of the header is parsed. +func ParsePacket(data []byte) (*Header, []byte, []byte, error) { + if len(data) == 0 || !IsLongHeaderPacket(data[0]) { + return nil, nil, nil, errors.New("not a long header packet") + } + hdr, err := parseHeader(data) + if err != nil { + if errors.Is(err, ErrUnsupportedVersion) { + return hdr, nil, nil, err + } + return nil, nil, nil, err + } + if protocol.ByteCount(len(data)) < hdr.ParsedLen()+hdr.Length { + return nil, nil, nil, fmt.Errorf("packet length (%d bytes) is smaller than the expected length (%d bytes)", len(data)-int(hdr.ParsedLen()), hdr.Length) + } + packetLen := int(hdr.ParsedLen() + hdr.Length) + return hdr, data[:packetLen], data[packetLen:], nil +} + +// ParseHeader parses the header: +// * if we understand the version: up to the packet number +// * if not, only the invariant part of the header +func parseHeader(b []byte) (*Header, error) { + if len(b) == 0 { + return nil, io.EOF + } + typeByte := b[0] + + h := &Header{typeByte: typeByte} + l, err := h.parseLongHeader(b[1:]) + h.parsedLen = protocol.ByteCount(l) + 1 + return h, err +} + +func (h *Header) parseLongHeader(b []byte) (int, error) { + startLen := len(b) + if len(b) < 5 { + return 0, io.EOF + } + h.Version = protocol.Version(binary.BigEndian.Uint32(b[:4])) + if h.Version != 0 && h.typeByte&0x40 == 0 { + return startLen - len(b), errors.New("not a QUIC packet") + } + destConnIDLen := int(b[4]) + if destConnIDLen > protocol.MaxConnIDLen { + return startLen - len(b), protocol.ErrInvalidConnectionIDLen + } + b = b[5:] + if len(b) < destConnIDLen+1 { + return startLen - len(b), io.EOF + } + h.DestConnectionID = protocol.ParseConnectionID(b[:destConnIDLen]) + srcConnIDLen := int(b[destConnIDLen]) + if srcConnIDLen > protocol.MaxConnIDLen { + return startLen - len(b), protocol.ErrInvalidConnectionIDLen + } + b = b[destConnIDLen+1:] + if len(b) < srcConnIDLen { + return startLen - len(b), io.EOF + } + h.SrcConnectionID = protocol.ParseConnectionID(b[:srcConnIDLen]) + b = b[srcConnIDLen:] + if h.Version == 0 { // version negotiation packet + return startLen - len(b), nil + } + // If we don't understand the version, we have no idea how to interpret the rest of the bytes + if !protocol.IsSupportedVersion(protocol.SupportedVersions, h.Version) { + return startLen - len(b), ErrUnsupportedVersion + } + + if h.Version == protocol.Version2 { + switch h.typeByte >> 4 & 0b11 { + case 0b00: + h.Type = protocol.PacketTypeRetry + case 0b01: + h.Type = protocol.PacketTypeInitial + case 0b10: + h.Type = protocol.PacketType0RTT + case 0b11: + h.Type = protocol.PacketTypeHandshake + } + } else { + switch h.typeByte >> 4 & 0b11 { + case 0b00: + h.Type = protocol.PacketTypeInitial + case 0b01: + h.Type = protocol.PacketType0RTT + case 0b10: + h.Type = protocol.PacketTypeHandshake + case 0b11: + h.Type = protocol.PacketTypeRetry + } + } + + if h.Type == protocol.PacketTypeRetry { + tokenLen := len(b) - 16 + if tokenLen <= 0 { + return startLen - len(b), io.EOF + } + h.Token = make([]byte, tokenLen) + copy(h.Token, b[:tokenLen]) + return startLen - len(b) + tokenLen + 16, nil + } + + if h.Type == protocol.PacketTypeInitial { + tokenLen, n, err := quicvarint.Parse(b) + if err != nil { + return startLen - len(b), err + } + b = b[n:] + if tokenLen > uint64(len(b)) { + return startLen - len(b), io.EOF + } + h.Token = make([]byte, tokenLen) + copy(h.Token, b[:tokenLen]) + b = b[tokenLen:] + } + + pl, n, err := quicvarint.Parse(b) + if err != nil { + return 0, err + } + h.Length = protocol.ByteCount(pl) + return startLen - len(b) + n, nil +} + +// ParsedLen returns the number of bytes that were consumed when parsing the header +func (h *Header) ParsedLen() protocol.ByteCount { + return h.parsedLen +} + +// ParseExtended parses the version dependent part of the header. +// The Reader has to be set such that it points to the first byte of the header. +func (h *Header) ParseExtended(data []byte) (*ExtendedHeader, error) { + extHdr := h.toExtendedHeader() + reservedBitsValid, err := extHdr.parse(data) + if err != nil { + return nil, err + } + if !reservedBitsValid { + return extHdr, ErrInvalidReservedBits + } + return extHdr, nil +} + +func (h *Header) toExtendedHeader() *ExtendedHeader { + return &ExtendedHeader{Header: *h} +} + +// PacketType is the type of the packet, for logging purposes +func (h *Header) PacketType() string { + return h.Type.String() +} + +func readPacketNumber(data []byte, pnLen protocol.PacketNumberLen) (protocol.PacketNumber, error) { + var pn protocol.PacketNumber + switch pnLen { + case protocol.PacketNumberLen1: + pn = protocol.PacketNumber(data[0]) + case protocol.PacketNumberLen2: + pn = protocol.PacketNumber(binary.BigEndian.Uint16(data[:2])) + case protocol.PacketNumberLen3: + pn = protocol.PacketNumber(uint32(data[2]) + uint32(data[1])<<8 + uint32(data[0])<<16) + case protocol.PacketNumberLen4: + pn = protocol.PacketNumber(binary.BigEndian.Uint32(data[:4])) + default: + return 0, fmt.Errorf("invalid packet number length: %d", pnLen) + } + return pn, nil +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/log.go b/vendor/github.com/quic-go/quic-go/internal/wire/log.go new file mode 100644 index 0000000..c8b28d9 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/log.go @@ -0,0 +1,74 @@ +package wire + +import ( + "fmt" + "strings" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" +) + +// LogFrame logs a frame, either sent or received +func LogFrame(logger utils.Logger, frame Frame, sent bool) { + if !logger.Debug() { + return + } + dir := "<-" + if sent { + dir = "->" + } + switch f := frame.(type) { + case *CryptoFrame: + dataLen := protocol.ByteCount(len(f.Data)) + logger.Debugf("\t%s &wire.CryptoFrame{Offset: %d, Data length: %d, Offset + Data length: %d}", dir, f.Offset, dataLen, f.Offset+dataLen) + case *StreamFrame: + logger.Debugf("\t%s &wire.StreamFrame{StreamID: %d, Fin: %t, Offset: %d, Data length: %d, Offset + Data length: %d}", dir, f.StreamID, f.Fin, f.Offset, f.DataLen(), f.Offset+f.DataLen()) + case *ResetStreamFrame: + logger.Debugf("\t%s &wire.ResetStreamFrame{StreamID: %d, ErrorCode: %#x, FinalSize: %d}", dir, f.StreamID, f.ErrorCode, f.FinalSize) + case *AckFrame: + hasECN := f.ECT0 > 0 || f.ECT1 > 0 || f.ECNCE > 0 + var ecn string + if hasECN { + ecn = fmt.Sprintf(", ECT0: %d, ECT1: %d, CE: %d", f.ECT0, f.ECT1, f.ECNCE) + } + if len(f.AckRanges) > 1 { + ackRanges := make([]string, len(f.AckRanges)) + for i, r := range f.AckRanges { + ackRanges[i] = fmt.Sprintf("{Largest: %d, Smallest: %d}", r.Largest, r.Smallest) + } + logger.Debugf("\t%s &wire.AckFrame{LargestAcked: %d, LowestAcked: %d, AckRanges: {%s}, DelayTime: %s%s}", dir, f.LargestAcked(), f.LowestAcked(), strings.Join(ackRanges, ", "), f.DelayTime.String(), ecn) + } else { + logger.Debugf("\t%s &wire.AckFrame{LargestAcked: %d, LowestAcked: %d, DelayTime: %s%s}", dir, f.LargestAcked(), f.LowestAcked(), f.DelayTime.String(), ecn) + } + case *MaxDataFrame: + logger.Debugf("\t%s &wire.MaxDataFrame{MaximumData: %d}", dir, f.MaximumData) + case *MaxStreamDataFrame: + logger.Debugf("\t%s &wire.MaxStreamDataFrame{StreamID: %d, MaximumStreamData: %d}", dir, f.StreamID, f.MaximumStreamData) + case *DataBlockedFrame: + logger.Debugf("\t%s &wire.DataBlockedFrame{MaximumData: %d}", dir, f.MaximumData) + case *StreamDataBlockedFrame: + logger.Debugf("\t%s &wire.StreamDataBlockedFrame{StreamID: %d, MaximumStreamData: %d}", dir, f.StreamID, f.MaximumStreamData) + case *MaxStreamsFrame: + switch f.Type { + case protocol.StreamTypeUni: + logger.Debugf("\t%s &wire.MaxStreamsFrame{Type: uni, MaxStreamNum: %d}", dir, f.MaxStreamNum) + case protocol.StreamTypeBidi: + logger.Debugf("\t%s &wire.MaxStreamsFrame{Type: bidi, MaxStreamNum: %d}", dir, f.MaxStreamNum) + } + case *StreamsBlockedFrame: + switch f.Type { + case protocol.StreamTypeUni: + logger.Debugf("\t%s &wire.StreamsBlockedFrame{Type: uni, MaxStreams: %d}", dir, f.StreamLimit) + case protocol.StreamTypeBidi: + logger.Debugf("\t%s &wire.StreamsBlockedFrame{Type: bidi, MaxStreams: %d}", dir, f.StreamLimit) + } + case *NewConnectionIDFrame: + logger.Debugf("\t%s &wire.NewConnectionIDFrame{SequenceNumber: %d, RetirePriorTo: %d, ConnectionID: %s, StatelessResetToken: %#x}", dir, f.SequenceNumber, f.RetirePriorTo, f.ConnectionID, f.StatelessResetToken) + case *RetireConnectionIDFrame: + logger.Debugf("\t%s &wire.RetireConnectionIDFrame{SequenceNumber: %d}", dir, f.SequenceNumber) + case *NewTokenFrame: + logger.Debugf("\t%s &wire.NewTokenFrame{Token: %#x}", dir, f.Token) + default: + logger.Debugf("\t%s %#v", dir, frame) + } +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/max_data_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/max_data_frame.go new file mode 100644 index 0000000..bfbdcba --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/max_data_frame.go @@ -0,0 +1,33 @@ +package wire + +import ( + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +// A MaxDataFrame carries flow control information for the connection +type MaxDataFrame struct { + MaximumData protocol.ByteCount +} + +// parseMaxDataFrame parses a MAX_DATA frame +func parseMaxDataFrame(b []byte, _ protocol.Version) (*MaxDataFrame, int, error) { + frame := &MaxDataFrame{} + byteOffset, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + frame.MaximumData = protocol.ByteCount(byteOffset) + return frame, l, nil +} + +func (f *MaxDataFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + b = append(b, byte(FrameTypeMaxData)) + b = quicvarint.Append(b, uint64(f.MaximumData)) + return b, nil +} + +// Length of a written frame +func (f *MaxDataFrame) Length(_ protocol.Version) protocol.ByteCount { + return 1 + protocol.ByteCount(quicvarint.Len(uint64(f.MaximumData))) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/max_stream_data_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/max_stream_data_frame.go new file mode 100644 index 0000000..0966ea4 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/max_stream_data_frame.go @@ -0,0 +1,43 @@ +package wire + +import ( + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +// A MaxStreamDataFrame is a MAX_STREAM_DATA frame +type MaxStreamDataFrame struct { + StreamID protocol.StreamID + MaximumStreamData protocol.ByteCount +} + +func parseMaxStreamDataFrame(b []byte, _ protocol.Version) (*MaxStreamDataFrame, int, error) { + startLen := len(b) + sid, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + offset, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + + return &MaxStreamDataFrame{ + StreamID: protocol.StreamID(sid), + MaximumStreamData: protocol.ByteCount(offset), + }, startLen - len(b), nil +} + +func (f *MaxStreamDataFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + b = append(b, byte(FrameTypeMaxStreamData)) + b = quicvarint.Append(b, uint64(f.StreamID)) + b = quicvarint.Append(b, uint64(f.MaximumStreamData)) + return b, nil +} + +// Length of a written frame +func (f *MaxStreamDataFrame) Length(protocol.Version) protocol.ByteCount { + return 1 + protocol.ByteCount(quicvarint.Len(uint64(f.StreamID))+quicvarint.Len(uint64(f.MaximumStreamData))) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/max_streams_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/max_streams_frame.go new file mode 100644 index 0000000..30612e2 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/max_streams_frame.go @@ -0,0 +1,50 @@ +package wire + +import ( + "fmt" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +// A MaxStreamsFrame is a MAX_STREAMS frame +type MaxStreamsFrame struct { + Type protocol.StreamType + MaxStreamNum protocol.StreamNum +} + +func parseMaxStreamsFrame(b []byte, typ FrameType, _ protocol.Version) (*MaxStreamsFrame, int, error) { + f := &MaxStreamsFrame{} + //nolint:exhaustive // Function will only be called with BidiMaxStreamsFrameType or UniMaxStreamsFrameType + switch typ { + case FrameTypeBidiMaxStreams: + f.Type = protocol.StreamTypeBidi + case FrameTypeUniMaxStreams: + f.Type = protocol.StreamTypeUni + } + streamID, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + f.MaxStreamNum = protocol.StreamNum(streamID) + if f.MaxStreamNum > protocol.MaxStreamCount { + return nil, 0, fmt.Errorf("%d exceeds the maximum stream count", f.MaxStreamNum) + } + return f, l, nil +} + +func (f *MaxStreamsFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + switch f.Type { + case protocol.StreamTypeBidi: + b = append(b, byte(FrameTypeBidiMaxStreams)) + case protocol.StreamTypeUni: + b = append(b, byte(FrameTypeUniMaxStreams)) + } + b = quicvarint.Append(b, uint64(f.MaxStreamNum)) + return b, nil +} + +// Length of a written frame +func (f *MaxStreamsFrame) Length(protocol.Version) protocol.ByteCount { + return 1 + protocol.ByteCount(quicvarint.Len(uint64(f.MaxStreamNum))) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/new_connection_id_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/new_connection_id_frame.go new file mode 100644 index 0000000..0583192 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/new_connection_id_frame.go @@ -0,0 +1,80 @@ +package wire + +import ( + "errors" + "fmt" + "io" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +// A NewConnectionIDFrame is a NEW_CONNECTION_ID frame +type NewConnectionIDFrame struct { + SequenceNumber uint64 + RetirePriorTo uint64 + ConnectionID protocol.ConnectionID + StatelessResetToken protocol.StatelessResetToken +} + +func parseNewConnectionIDFrame(b []byte, _ protocol.Version) (*NewConnectionIDFrame, int, error) { + startLen := len(b) + seq, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + ret, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + if ret > seq { + //nolint:staticcheck // SA1021: Retire Prior To is the name of the field + return nil, 0, fmt.Errorf("Retire Prior To value (%d) larger than Sequence Number (%d)", ret, seq) + } + if len(b) == 0 { + return nil, 0, io.EOF + } + connIDLen := int(b[0]) + b = b[1:] + if connIDLen == 0 { + return nil, 0, errors.New("invalid zero-length connection ID") + } + if connIDLen > protocol.MaxConnIDLen { + return nil, 0, protocol.ErrInvalidConnectionIDLen + } + if len(b) < connIDLen { + return nil, 0, io.EOF + } + frame := &NewConnectionIDFrame{ + SequenceNumber: seq, + RetirePriorTo: ret, + ConnectionID: protocol.ParseConnectionID(b[:connIDLen]), + } + b = b[connIDLen:] + if len(b) < len(frame.StatelessResetToken) { + return nil, 0, io.EOF + } + copy(frame.StatelessResetToken[:], b) + return frame, startLen - len(b) + len(frame.StatelessResetToken), nil +} + +func (f *NewConnectionIDFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + b = append(b, byte(FrameTypeNewConnectionID)) + b = quicvarint.Append(b, f.SequenceNumber) + b = quicvarint.Append(b, f.RetirePriorTo) + connIDLen := f.ConnectionID.Len() + if connIDLen > protocol.MaxConnIDLen { + return nil, fmt.Errorf("invalid connection ID length: %d", connIDLen) + } + b = append(b, uint8(connIDLen)) + b = append(b, f.ConnectionID.Bytes()...) + b = append(b, f.StatelessResetToken[:]...) + return b, nil +} + +// Length of a written frame +func (f *NewConnectionIDFrame) Length(protocol.Version) protocol.ByteCount { + return 1 + protocol.ByteCount(quicvarint.Len(f.SequenceNumber)+quicvarint.Len(f.RetirePriorTo)+1 /* connection ID length */ +f.ConnectionID.Len()) + 16 +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/new_token_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/new_token_frame.go new file mode 100644 index 0000000..73d356b --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/new_token_frame.go @@ -0,0 +1,43 @@ +package wire + +import ( + "errors" + "io" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +// A NewTokenFrame is a NEW_TOKEN frame +type NewTokenFrame struct { + Token []byte +} + +func parseNewTokenFrame(b []byte, _ protocol.Version) (*NewTokenFrame, int, error) { + tokenLen, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + if tokenLen == 0 { + return nil, 0, errors.New("token must not be empty") + } + if uint64(len(b)) < tokenLen { + return nil, 0, io.EOF + } + token := make([]byte, int(tokenLen)) + copy(token, b) + return &NewTokenFrame{Token: token}, l + int(tokenLen), nil +} + +func (f *NewTokenFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + b = append(b, byte(FrameTypeNewToken)) + b = quicvarint.Append(b, uint64(len(f.Token))) + b = append(b, f.Token...) + return b, nil +} + +// Length of a written frame +func (f *NewTokenFrame) Length(protocol.Version) protocol.ByteCount { + return 1 + protocol.ByteCount(quicvarint.Len(uint64(len(f.Token)))+len(f.Token)) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/path_challenge_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/path_challenge_frame.go new file mode 100644 index 0000000..7a4a767 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/path_challenge_frame.go @@ -0,0 +1,32 @@ +package wire + +import ( + "io" + + "github.com/quic-go/quic-go/internal/protocol" +) + +// A PathChallengeFrame is a PATH_CHALLENGE frame +type PathChallengeFrame struct { + Data [8]byte +} + +func parsePathChallengeFrame(b []byte, _ protocol.Version) (*PathChallengeFrame, int, error) { + f := &PathChallengeFrame{} + if len(b) < 8 { + return nil, 0, io.EOF + } + copy(f.Data[:], b) + return f, 8, nil +} + +func (f *PathChallengeFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + b = append(b, byte(FrameTypePathChallenge)) + b = append(b, f.Data[:]...) + return b, nil +} + +// Length of a written frame +func (f *PathChallengeFrame) Length(_ protocol.Version) protocol.ByteCount { + return 1 + 8 +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/path_response_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/path_response_frame.go new file mode 100644 index 0000000..e76d037 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/path_response_frame.go @@ -0,0 +1,32 @@ +package wire + +import ( + "io" + + "github.com/quic-go/quic-go/internal/protocol" +) + +// A PathResponseFrame is a PATH_RESPONSE frame +type PathResponseFrame struct { + Data [8]byte +} + +func parsePathResponseFrame(b []byte, _ protocol.Version) (*PathResponseFrame, int, error) { + f := &PathResponseFrame{} + if len(b) < 8 { + return nil, 0, io.EOF + } + copy(f.Data[:], b) + return f, 8, nil +} + +func (f *PathResponseFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + b = append(b, byte(FrameTypePathResponse)) + b = append(b, f.Data[:]...) + return b, nil +} + +// Length of a written frame +func (f *PathResponseFrame) Length(_ protocol.Version) protocol.ByteCount { + return 1 + 8 +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/ping_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/ping_frame.go new file mode 100644 index 0000000..5d344d4 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/ping_frame.go @@ -0,0 +1,17 @@ +package wire + +import ( + "github.com/quic-go/quic-go/internal/protocol" +) + +// A PingFrame is a PING frame +type PingFrame struct{} + +func (f *PingFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + return append(b, byte(FrameTypePing)), nil +} + +// Length of a written frame +func (f *PingFrame) Length(_ protocol.Version) protocol.ByteCount { + return 1 +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/pool.go b/vendor/github.com/quic-go/quic-go/internal/wire/pool.go new file mode 100644 index 0000000..18ab437 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/pool.go @@ -0,0 +1,33 @@ +package wire + +import ( + "sync" + + "github.com/quic-go/quic-go/internal/protocol" +) + +var pool sync.Pool + +func init() { + pool.New = func() interface{} { + return &StreamFrame{ + Data: make([]byte, 0, protocol.MaxPacketBufferSize), + fromPool: true, + } + } +} + +func GetStreamFrame() *StreamFrame { + f := pool.Get().(*StreamFrame) + return f +} + +func putStreamFrame(f *StreamFrame) { + if !f.fromPool { + return + } + if protocol.ByteCount(cap(f.Data)) != protocol.MaxPacketBufferSize { + panic("wire.PutStreamFrame called with packet of wrong size!") + } + pool.Put(f) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/reset_stream_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/reset_stream_frame.go new file mode 100644 index 0000000..4101b76 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/reset_stream_frame.go @@ -0,0 +1,79 @@ +package wire + +import ( + "fmt" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/quicvarint" +) + +// A ResetStreamFrame is a RESET_STREAM or RESET_STREAM_AT frame in QUIC +type ResetStreamFrame struct { + StreamID protocol.StreamID + ErrorCode qerr.StreamErrorCode + FinalSize protocol.ByteCount + ReliableSize protocol.ByteCount +} + +func parseResetStreamFrame(b []byte, isResetStreamAt bool, _ protocol.Version) (*ResetStreamFrame, int, error) { + startLen := len(b) + streamID, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + errorCode, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + finalSize, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + + var reliableSize uint64 + if isResetStreamAt { + reliableSize, l, err = quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + } + if reliableSize > finalSize { + return nil, 0, fmt.Errorf("RESET_STREAM_AT: reliable size can't be larger than final size (%d vs %d)", reliableSize, finalSize) + } + + return &ResetStreamFrame{ + StreamID: protocol.StreamID(streamID), + ErrorCode: qerr.StreamErrorCode(errorCode), + FinalSize: protocol.ByteCount(finalSize), + ReliableSize: protocol.ByteCount(reliableSize), + }, startLen - len(b), nil +} + +func (f *ResetStreamFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + if f.ReliableSize == 0 { + b = quicvarint.Append(b, uint64(FrameTypeResetStream)) + } else { + b = quicvarint.Append(b, uint64(FrameTypeResetStreamAt)) + } + b = quicvarint.Append(b, uint64(f.StreamID)) + b = quicvarint.Append(b, uint64(f.ErrorCode)) + b = quicvarint.Append(b, uint64(f.FinalSize)) + if f.ReliableSize > 0 { + b = quicvarint.Append(b, uint64(f.ReliableSize)) + } + return b, nil +} + +// Length of a written frame +func (f *ResetStreamFrame) Length(protocol.Version) protocol.ByteCount { + size := 1 // the frame type for both RESET_STREAM and RESET_STREAM_AT fits into 1 byte + if f.ReliableSize > 0 { + size += quicvarint.Len(uint64(f.ReliableSize)) + } + return protocol.ByteCount(size + quicvarint.Len(uint64(f.StreamID)) + quicvarint.Len(uint64(f.ErrorCode)) + quicvarint.Len(uint64(f.FinalSize))) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/retire_connection_id_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/retire_connection_id_frame.go new file mode 100644 index 0000000..1927f9d --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/retire_connection_id_frame.go @@ -0,0 +1,30 @@ +package wire + +import ( + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +// A RetireConnectionIDFrame is a RETIRE_CONNECTION_ID frame +type RetireConnectionIDFrame struct { + SequenceNumber uint64 +} + +func parseRetireConnectionIDFrame(b []byte, _ protocol.Version) (*RetireConnectionIDFrame, int, error) { + seq, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + return &RetireConnectionIDFrame{SequenceNumber: seq}, l, nil +} + +func (f *RetireConnectionIDFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + b = append(b, byte(FrameTypeRetireConnectionID)) + b = quicvarint.Append(b, f.SequenceNumber) + return b, nil +} + +// Length of a written frame +func (f *RetireConnectionIDFrame) Length(protocol.Version) protocol.ByteCount { + return 1 + protocol.ByteCount(quicvarint.Len(f.SequenceNumber)) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/short_header.go b/vendor/github.com/quic-go/quic-go/internal/wire/short_header.go new file mode 100644 index 0000000..cf2889c --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/short_header.go @@ -0,0 +1,62 @@ +package wire + +import ( + "errors" + "io" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" +) + +// ParseShortHeader parses a short header packet. +// It must be called after header protection was removed. +// Otherwise, the check for the reserved bits will (most likely) fail. +func ParseShortHeader(data []byte, connIDLen int) (length int, _ protocol.PacketNumber, _ protocol.PacketNumberLen, _ protocol.KeyPhaseBit, _ error) { + if len(data) == 0 { + return 0, 0, 0, 0, io.EOF + } + if data[0]&0x80 > 0 { + return 0, 0, 0, 0, errors.New("not a short header packet") + } + if data[0]&0x40 == 0 { + return 0, 0, 0, 0, errors.New("not a QUIC packet") + } + pnLen := protocol.PacketNumberLen(data[0]&0b11) + 1 + if len(data) < 1+int(pnLen)+connIDLen { + return 0, 0, 0, 0, io.EOF + } + + pos := 1 + connIDLen + pn, err := readPacketNumber(data[pos:], pnLen) + if err != nil { + return 0, 0, 0, 0, err + } + kp := protocol.KeyPhaseZero + if data[0]&0b100 > 0 { + kp = protocol.KeyPhaseOne + } + + if data[0]&0x18 != 0 { + err = ErrInvalidReservedBits + } + return 1 + connIDLen + int(pnLen), pn, pnLen, kp, err +} + +// AppendShortHeader writes a short header. +func AppendShortHeader(b []byte, connID protocol.ConnectionID, pn protocol.PacketNumber, pnLen protocol.PacketNumberLen, kp protocol.KeyPhaseBit) ([]byte, error) { + typeByte := 0x40 | uint8(pnLen-1) + if kp == protocol.KeyPhaseOne { + typeByte |= byte(1 << 2) + } + b = append(b, typeByte) + b = append(b, connID.Bytes()...) + return appendPacketNumber(b, pn, pnLen) +} + +func ShortHeaderLen(dest protocol.ConnectionID, pnLen protocol.PacketNumberLen) protocol.ByteCount { + return 1 + protocol.ByteCount(dest.Len()) + protocol.ByteCount(pnLen) +} + +func LogShortHeader(logger utils.Logger, dest protocol.ConnectionID, pn protocol.PacketNumber, pnLen protocol.PacketNumberLen, kp protocol.KeyPhaseBit) { + logger.Debugf("\tShort Header{DestConnectionID: %s, PacketNumber: %d, PacketNumberLen: %d, KeyPhase: %s}", dest, pn, pnLen, kp) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/stop_sending_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/stop_sending_frame.go new file mode 100644 index 0000000..2b15c71 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/stop_sending_frame.go @@ -0,0 +1,45 @@ +package wire + +import ( + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/quicvarint" +) + +// A StopSendingFrame is a STOP_SENDING frame +type StopSendingFrame struct { + StreamID protocol.StreamID + ErrorCode qerr.StreamErrorCode +} + +// parseStopSendingFrame parses a STOP_SENDING frame +func parseStopSendingFrame(b []byte, _ protocol.Version) (*StopSendingFrame, int, error) { + startLen := len(b) + streamID, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + errorCode, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + + return &StopSendingFrame{ + StreamID: protocol.StreamID(streamID), + ErrorCode: qerr.StreamErrorCode(errorCode), + }, startLen - len(b), nil +} + +// Length of a written frame +func (f *StopSendingFrame) Length(_ protocol.Version) protocol.ByteCount { + return 1 + protocol.ByteCount(quicvarint.Len(uint64(f.StreamID))+quicvarint.Len(uint64(f.ErrorCode))) +} + +func (f *StopSendingFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + b = append(b, byte(FrameTypeStopSending)) + b = quicvarint.Append(b, uint64(f.StreamID)) + b = quicvarint.Append(b, uint64(f.ErrorCode)) + return b, nil +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/stream_data_blocked_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/stream_data_blocked_frame.go new file mode 100644 index 0000000..3762ec7 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/stream_data_blocked_frame.go @@ -0,0 +1,42 @@ +package wire + +import ( + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +// A StreamDataBlockedFrame is a STREAM_DATA_BLOCKED frame +type StreamDataBlockedFrame struct { + StreamID protocol.StreamID + MaximumStreamData protocol.ByteCount +} + +func parseStreamDataBlockedFrame(b []byte, _ protocol.Version) (*StreamDataBlockedFrame, int, error) { + startLen := len(b) + sid, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + offset, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + + return &StreamDataBlockedFrame{ + StreamID: protocol.StreamID(sid), + MaximumStreamData: protocol.ByteCount(offset), + }, startLen - len(b) + l, nil +} + +func (f *StreamDataBlockedFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + b = append(b, 0x15) + b = quicvarint.Append(b, uint64(f.StreamID)) + b = quicvarint.Append(b, uint64(f.MaximumStreamData)) + return b, nil +} + +// Length of a written frame +func (f *StreamDataBlockedFrame) Length(protocol.Version) protocol.ByteCount { + return 1 + protocol.ByteCount(quicvarint.Len(uint64(f.StreamID))+quicvarint.Len(uint64(f.MaximumStreamData))) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/stream_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/stream_frame.go new file mode 100644 index 0000000..e53962b --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/stream_frame.go @@ -0,0 +1,191 @@ +package wire + +import ( + "errors" + "io" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +// A StreamFrame of QUIC +type StreamFrame struct { + StreamID protocol.StreamID + Offset protocol.ByteCount + Data []byte + Fin bool + DataLenPresent bool + + fromPool bool +} + +func ParseStreamFrame(b []byte, typ FrameType, _ protocol.Version) (*StreamFrame, int, error) { + startLen := len(b) + hasOffset := typ&0b100 > 0 + fin := typ&0b1 > 0 + hasDataLen := typ&0b10 > 0 + + streamID, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + var offset uint64 + if hasOffset { + offset, l, err = quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + } + + var dataLen uint64 + if hasDataLen { + var err error + var l int + dataLen, l, err = quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + b = b[l:] + if dataLen > uint64(len(b)) { + return nil, 0, io.EOF + } + } else { + // The rest of the packet is data + dataLen = uint64(len(b)) + } + + var frame *StreamFrame + if dataLen < protocol.MinStreamFrameBufferSize { + frame = &StreamFrame{} + if dataLen > 0 { + frame.Data = make([]byte, dataLen) + } + } else { + frame = GetStreamFrame() + // The STREAM frame can't be larger than the StreamFrame we obtained from the buffer, + // since those StreamFrames have a buffer length of the maximum packet size. + if dataLen > uint64(cap(frame.Data)) { + return nil, 0, io.EOF + } + frame.Data = frame.Data[:dataLen] + } + + frame.StreamID = protocol.StreamID(streamID) + frame.Offset = protocol.ByteCount(offset) + frame.Fin = fin + frame.DataLenPresent = hasDataLen + + if dataLen > 0 { + copy(frame.Data, b) + } + if frame.Offset+frame.DataLen() > protocol.MaxByteCount { + return nil, 0, errors.New("stream data overflows maximum offset") + } + return frame, startLen - len(b) + int(dataLen), nil +} + +func (f *StreamFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + if len(f.Data) == 0 && !f.Fin { + return nil, errors.New("StreamFrame: attempting to write empty frame without FIN") + } + + typ := byte(0x8) + if f.Fin { + typ ^= 0b1 + } + hasOffset := f.Offset != 0 + if f.DataLenPresent { + typ ^= 0b10 + } + if hasOffset { + typ ^= 0b100 + } + b = append(b, typ) + b = quicvarint.Append(b, uint64(f.StreamID)) + if hasOffset { + b = quicvarint.Append(b, uint64(f.Offset)) + } + if f.DataLenPresent { + b = quicvarint.Append(b, uint64(f.DataLen())) + } + b = append(b, f.Data...) + return b, nil +} + +// Length returns the total length of the STREAM frame +func (f *StreamFrame) Length(protocol.Version) protocol.ByteCount { + length := 1 + quicvarint.Len(uint64(f.StreamID)) + if f.Offset != 0 { + length += quicvarint.Len(uint64(f.Offset)) + } + if f.DataLenPresent { + length += quicvarint.Len(uint64(f.DataLen())) + } + return protocol.ByteCount(length) + f.DataLen() +} + +// DataLen gives the length of data in bytes +func (f *StreamFrame) DataLen() protocol.ByteCount { + return protocol.ByteCount(len(f.Data)) +} + +// MaxDataLen returns the maximum data length +// If 0 is returned, writing will fail (a STREAM frame must contain at least 1 byte of data). +func (f *StreamFrame) MaxDataLen(maxSize protocol.ByteCount, _ protocol.Version) protocol.ByteCount { + headerLen := 1 + protocol.ByteCount(quicvarint.Len(uint64(f.StreamID))) + if f.Offset != 0 { + headerLen += protocol.ByteCount(quicvarint.Len(uint64(f.Offset))) + } + if f.DataLenPresent { + // Pretend that the data size will be 1 byte. + // If it turns out that varint encoding the length will consume 2 bytes, we need to adjust the data length afterward + headerLen++ + } + if headerLen > maxSize { + return 0 + } + maxDataLen := maxSize - headerLen + if f.DataLenPresent && quicvarint.Len(uint64(maxDataLen)) != 1 { + maxDataLen-- + } + return maxDataLen +} + +// MaybeSplitOffFrame splits a frame such that it is not bigger than n bytes. +// It returns if the frame was actually split. +// The frame might not be split if: +// * the size is large enough to fit the whole frame +// * the size is too small to fit even a 1-byte frame. In that case, the frame returned is nil. +func (f *StreamFrame) MaybeSplitOffFrame(maxSize protocol.ByteCount, version protocol.Version) (*StreamFrame, bool /* was splitting required */) { + if maxSize >= f.Length(version) { + return nil, false + } + + n := f.MaxDataLen(maxSize, version) + if n == 0 { + return nil, true + } + + new := GetStreamFrame() + new.StreamID = f.StreamID + new.Offset = f.Offset + new.Fin = false + new.DataLenPresent = f.DataLenPresent + + // swap the data slices + new.Data, f.Data = f.Data, new.Data + new.fromPool, f.fromPool = f.fromPool, new.fromPool + + f.Data = f.Data[:protocol.ByteCount(len(new.Data))-n] + copy(f.Data, new.Data[n:]) + new.Data = new.Data[:n] + f.Offset += n + + return new, true +} + +func (f *StreamFrame) PutBack() { + putStreamFrame(f) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/streams_blocked_frame.go b/vendor/github.com/quic-go/quic-go/internal/wire/streams_blocked_frame.go new file mode 100644 index 0000000..d98fde4 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/streams_blocked_frame.go @@ -0,0 +1,50 @@ +package wire + +import ( + "fmt" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/quicvarint" +) + +// A StreamsBlockedFrame is a STREAMS_BLOCKED frame +type StreamsBlockedFrame struct { + Type protocol.StreamType + StreamLimit protocol.StreamNum +} + +func parseStreamsBlockedFrame(b []byte, typ FrameType, _ protocol.Version) (*StreamsBlockedFrame, int, error) { + f := &StreamsBlockedFrame{} + //nolint:exhaustive // This will only be called with a BidiStreamBlockedFrameType or a UniStreamBlockedFrameType. + switch typ { + case FrameTypeBidiStreamBlocked: + f.Type = protocol.StreamTypeBidi + case FrameTypeUniStreamBlocked: + f.Type = protocol.StreamTypeUni + } + streamLimit, l, err := quicvarint.Parse(b) + if err != nil { + return nil, 0, replaceUnexpectedEOF(err) + } + f.StreamLimit = protocol.StreamNum(streamLimit) + if f.StreamLimit > protocol.MaxStreamCount { + return nil, 0, fmt.Errorf("%d exceeds the maximum stream count", f.StreamLimit) + } + return f, l, nil +} + +func (f *StreamsBlockedFrame) Append(b []byte, _ protocol.Version) ([]byte, error) { + switch f.Type { + case protocol.StreamTypeBidi: + b = append(b, byte(FrameTypeBidiStreamBlocked)) + case protocol.StreamTypeUni: + b = append(b, byte(FrameTypeUniStreamBlocked)) + } + b = quicvarint.Append(b, uint64(f.StreamLimit)) + return b, nil +} + +// Length of a written frame +func (f *StreamsBlockedFrame) Length(_ protocol.Version) protocol.ByteCount { + return 1 + protocol.ByteCount(quicvarint.Len(uint64(f.StreamLimit))) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/transport_parameters.go b/vendor/github.com/quic-go/quic-go/internal/wire/transport_parameters.go new file mode 100644 index 0000000..2437892 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/transport_parameters.go @@ -0,0 +1,566 @@ +package wire + +import ( + "crypto/rand" + "encoding/binary" + "errors" + "fmt" + "io" + "net/netip" + "slices" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/quicvarint" +) + +// AdditionalTransportParametersClient are additional transport parameters that will be added +// to the client's transport parameters. +// This is not intended for production use, but _only_ to increase the size of the ClientHello beyond +// the usual size of less than 1 MTU. +var AdditionalTransportParametersClient map[uint64][]byte + +const transportParameterMarshalingVersion = 1 + +type transportParameterID uint64 + +const ( + originalDestinationConnectionIDParameterID transportParameterID = 0x0 + maxIdleTimeoutParameterID transportParameterID = 0x1 + statelessResetTokenParameterID transportParameterID = 0x2 + maxUDPPayloadSizeParameterID transportParameterID = 0x3 + initialMaxDataParameterID transportParameterID = 0x4 + initialMaxStreamDataBidiLocalParameterID transportParameterID = 0x5 + initialMaxStreamDataBidiRemoteParameterID transportParameterID = 0x6 + initialMaxStreamDataUniParameterID transportParameterID = 0x7 + initialMaxStreamsBidiParameterID transportParameterID = 0x8 + initialMaxStreamsUniParameterID transportParameterID = 0x9 + ackDelayExponentParameterID transportParameterID = 0xa + maxAckDelayParameterID transportParameterID = 0xb + disableActiveMigrationParameterID transportParameterID = 0xc + preferredAddressParameterID transportParameterID = 0xd + activeConnectionIDLimitParameterID transportParameterID = 0xe + initialSourceConnectionIDParameterID transportParameterID = 0xf + retrySourceConnectionIDParameterID transportParameterID = 0x10 + // RFC 9221 + maxDatagramFrameSizeParameterID transportParameterID = 0x20 + // https://datatracker.ietf.org/doc/draft-ietf-quic-reliable-stream-reset/06/ + resetStreamAtParameterID transportParameterID = 0x17f7586d2cb571 +) + +// PreferredAddress is the value encoding in the preferred_address transport parameter +type PreferredAddress struct { + IPv4, IPv6 netip.AddrPort + ConnectionID protocol.ConnectionID + StatelessResetToken protocol.StatelessResetToken +} + +// TransportParameters are parameters sent to the peer during the handshake +type TransportParameters struct { + InitialMaxStreamDataBidiLocal protocol.ByteCount + InitialMaxStreamDataBidiRemote protocol.ByteCount + InitialMaxStreamDataUni protocol.ByteCount + InitialMaxData protocol.ByteCount + + MaxAckDelay time.Duration + AckDelayExponent uint8 + + DisableActiveMigration bool + + MaxUDPPayloadSize protocol.ByteCount + + MaxUniStreamNum protocol.StreamNum + MaxBidiStreamNum protocol.StreamNum + + MaxIdleTimeout time.Duration + + PreferredAddress *PreferredAddress + + OriginalDestinationConnectionID protocol.ConnectionID + InitialSourceConnectionID protocol.ConnectionID + RetrySourceConnectionID *protocol.ConnectionID // use a pointer here to distinguish zero-length connection IDs from missing transport parameters + + StatelessResetToken *protocol.StatelessResetToken + ActiveConnectionIDLimit uint64 + + MaxDatagramFrameSize protocol.ByteCount // RFC 9221 + EnableResetStreamAt bool // https://datatracker.ietf.org/doc/draft-ietf-quic-reliable-stream-reset/06/ +} + +// Unmarshal the transport parameters +func (p *TransportParameters) Unmarshal(data []byte, sentBy protocol.Perspective) error { + if err := p.unmarshal(data, sentBy, false); err != nil { + return &qerr.TransportError{ + ErrorCode: qerr.TransportParameterError, + ErrorMessage: err.Error(), + } + } + return nil +} + +func (p *TransportParameters) unmarshal(b []byte, sentBy protocol.Perspective, fromSessionTicket bool) error { + // needed to check that every parameter is only sent at most once + parameterIDs := make([]transportParameterID, 0, 32) + + var ( + readOriginalDestinationConnectionID bool + readInitialSourceConnectionID bool + readActiveConnectionIDLimit bool + ) + + p.AckDelayExponent = protocol.DefaultAckDelayExponent + p.MaxAckDelay = protocol.DefaultMaxAckDelay + p.MaxDatagramFrameSize = protocol.InvalidByteCount + + for len(b) > 0 { + paramIDInt, l, err := quicvarint.Parse(b) + if err != nil { + return err + } + paramID := transportParameterID(paramIDInt) + b = b[l:] + paramLen, l, err := quicvarint.Parse(b) + if err != nil { + return err + } + b = b[l:] + if uint64(len(b)) < paramLen { + return fmt.Errorf("remaining length (%d) smaller than parameter length (%d)", len(b), paramLen) + } + parameterIDs = append(parameterIDs, paramID) + switch paramID { + case activeConnectionIDLimitParameterID: + readActiveConnectionIDLimit = true + fallthrough + case maxIdleTimeoutParameterID, + maxUDPPayloadSizeParameterID, + initialMaxDataParameterID, + initialMaxStreamDataBidiLocalParameterID, + initialMaxStreamDataBidiRemoteParameterID, + initialMaxStreamDataUniParameterID, + initialMaxStreamsBidiParameterID, + initialMaxStreamsUniParameterID, + maxAckDelayParameterID, + maxDatagramFrameSizeParameterID, + ackDelayExponentParameterID: + if err := p.readNumericTransportParameter(b, paramID, int(paramLen)); err != nil { + return err + } + b = b[paramLen:] + case preferredAddressParameterID: + if sentBy == protocol.PerspectiveClient { + return errors.New("client sent a preferred_address") + } + if err := p.readPreferredAddress(b, int(paramLen)); err != nil { + return err + } + b = b[paramLen:] + case disableActiveMigrationParameterID: + if paramLen != 0 { + return fmt.Errorf("wrong length for disable_active_migration: %d (expected empty)", paramLen) + } + p.DisableActiveMigration = true + case statelessResetTokenParameterID: + if sentBy == protocol.PerspectiveClient { + return errors.New("client sent a stateless_reset_token") + } + if paramLen != 16 { + return fmt.Errorf("wrong length for stateless_reset_token: %d (expected 16)", paramLen) + } + var token protocol.StatelessResetToken + if len(b) < len(token) { + return io.EOF + } + copy(token[:], b) + b = b[len(token):] + p.StatelessResetToken = &token + case originalDestinationConnectionIDParameterID: + if sentBy == protocol.PerspectiveClient { + return errors.New("client sent an original_destination_connection_id") + } + if paramLen > protocol.MaxConnIDLen { + return protocol.ErrInvalidConnectionIDLen + } + p.OriginalDestinationConnectionID = protocol.ParseConnectionID(b[:paramLen]) + b = b[paramLen:] + readOriginalDestinationConnectionID = true + case initialSourceConnectionIDParameterID: + if paramLen > protocol.MaxConnIDLen { + return protocol.ErrInvalidConnectionIDLen + } + p.InitialSourceConnectionID = protocol.ParseConnectionID(b[:paramLen]) + b = b[paramLen:] + readInitialSourceConnectionID = true + case retrySourceConnectionIDParameterID: + if sentBy == protocol.PerspectiveClient { + return errors.New("client sent a retry_source_connection_id") + } + if paramLen > protocol.MaxConnIDLen { + return protocol.ErrInvalidConnectionIDLen + } + connID := protocol.ParseConnectionID(b[:paramLen]) + b = b[paramLen:] + p.RetrySourceConnectionID = &connID + case resetStreamAtParameterID: + if paramLen != 0 { + return fmt.Errorf("wrong length for reset_stream_at: %d (expected empty)", paramLen) + } + p.EnableResetStreamAt = true + default: + b = b[paramLen:] + } + } + + if !readActiveConnectionIDLimit { + p.ActiveConnectionIDLimit = protocol.DefaultActiveConnectionIDLimit + } + if !fromSessionTicket { + if sentBy == protocol.PerspectiveServer && !readOriginalDestinationConnectionID { + return errors.New("missing original_destination_connection_id") + } + if p.MaxUDPPayloadSize == 0 { + p.MaxUDPPayloadSize = protocol.MaxByteCount + } + if !readInitialSourceConnectionID { + return errors.New("missing initial_source_connection_id") + } + } + + // check that every transport parameter was sent at most once + slices.SortFunc(parameterIDs, func(a, b transportParameterID) int { + if a < b { + return -1 + } + return 1 + }) + for i := 0; i < len(parameterIDs)-1; i++ { + if parameterIDs[i] == parameterIDs[i+1] { + return fmt.Errorf("received duplicate transport parameter %#x", parameterIDs[i]) + } + } + + return nil +} + +func (p *TransportParameters) readPreferredAddress(b []byte, expectedLen int) error { + remainingLen := len(b) + pa := &PreferredAddress{} + if len(b) < 4+2+16+2+1 { + return io.EOF + } + var ipv4 [4]byte + copy(ipv4[:], b[:4]) + port4 := binary.BigEndian.Uint16(b[4:]) + b = b[4+2:] + if port4 != 0 && ipv4 != [4]byte{} { + pa.IPv4 = netip.AddrPortFrom(netip.AddrFrom4(ipv4), port4) + } + var ipv6 [16]byte + copy(ipv6[:], b[:16]) + port6 := binary.BigEndian.Uint16(b[16:]) + if port6 != 0 && ipv6 != [16]byte{} { + pa.IPv6 = netip.AddrPortFrom(netip.AddrFrom16(ipv6), port6) + } + b = b[16+2:] + connIDLen := int(b[0]) + b = b[1:] + if connIDLen == 0 || connIDLen > protocol.MaxConnIDLen { + return fmt.Errorf("invalid connection ID length: %d", connIDLen) + } + if len(b) < connIDLen+len(pa.StatelessResetToken) { + return io.EOF + } + pa.ConnectionID = protocol.ParseConnectionID(b[:connIDLen]) + b = b[connIDLen:] + copy(pa.StatelessResetToken[:], b) + b = b[len(pa.StatelessResetToken):] + if bytesRead := remainingLen - len(b); bytesRead != expectedLen { + return fmt.Errorf("expected preferred_address to be %d long, read %d bytes", expectedLen, bytesRead) + } + p.PreferredAddress = pa + return nil +} + +func (p *TransportParameters) readNumericTransportParameter(b []byte, paramID transportParameterID, expectedLen int) error { + val, l, err := quicvarint.Parse(b) + if err != nil { + return fmt.Errorf("error while reading transport parameter %d: %s", paramID, err) + } + if l != expectedLen { + return fmt.Errorf("inconsistent transport parameter length for transport parameter %#x", paramID) + } + //nolint:exhaustive // This only covers the numeric transport parameters. + switch paramID { + case initialMaxStreamDataBidiLocalParameterID: + p.InitialMaxStreamDataBidiLocal = protocol.ByteCount(val) + case initialMaxStreamDataBidiRemoteParameterID: + p.InitialMaxStreamDataBidiRemote = protocol.ByteCount(val) + case initialMaxStreamDataUniParameterID: + p.InitialMaxStreamDataUni = protocol.ByteCount(val) + case initialMaxDataParameterID: + p.InitialMaxData = protocol.ByteCount(val) + case initialMaxStreamsBidiParameterID: + p.MaxBidiStreamNum = protocol.StreamNum(val) + if p.MaxBidiStreamNum > protocol.MaxStreamCount { + return fmt.Errorf("initial_max_streams_bidi too large: %d (maximum %d)", p.MaxBidiStreamNum, protocol.MaxStreamCount) + } + case initialMaxStreamsUniParameterID: + p.MaxUniStreamNum = protocol.StreamNum(val) + if p.MaxUniStreamNum > protocol.MaxStreamCount { + return fmt.Errorf("initial_max_streams_uni too large: %d (maximum %d)", p.MaxUniStreamNum, protocol.MaxStreamCount) + } + case maxIdleTimeoutParameterID: + p.MaxIdleTimeout = max(protocol.MinRemoteIdleTimeout, time.Duration(val)*time.Millisecond) + case maxUDPPayloadSizeParameterID: + if val < 1200 { + return fmt.Errorf("invalid value for max_udp_payload_size: %d (minimum 1200)", val) + } + p.MaxUDPPayloadSize = protocol.ByteCount(val) + case ackDelayExponentParameterID: + if val > protocol.MaxAckDelayExponent { + return fmt.Errorf("invalid value for ack_delay_exponent: %d (maximum %d)", val, protocol.MaxAckDelayExponent) + } + p.AckDelayExponent = uint8(val) + case maxAckDelayParameterID: + if val > uint64(protocol.MaxMaxAckDelay/time.Millisecond) { + return fmt.Errorf("invalid value for max_ack_delay: %dms (maximum %dms)", val, protocol.MaxMaxAckDelay/time.Millisecond) + } + p.MaxAckDelay = time.Duration(val) * time.Millisecond + case activeConnectionIDLimitParameterID: + if val < 2 { + return fmt.Errorf("invalid value for active_connection_id_limit: %d (minimum 2)", val) + } + p.ActiveConnectionIDLimit = val + case maxDatagramFrameSizeParameterID: + p.MaxDatagramFrameSize = protocol.ByteCount(val) + default: + return fmt.Errorf("TransportParameter BUG: transport parameter %d not found", paramID) + } + return nil +} + +// Marshal the transport parameters +func (p *TransportParameters) Marshal(pers protocol.Perspective) []byte { + // Typical Transport Parameters consume around 110 bytes, depending on the exact values, + // especially the lengths of the Connection IDs. + // Allocate 256 bytes, so we won't have to grow the slice in any case. + b := make([]byte, 0, 256) + + // add a greased value + random := make([]byte, 18) + rand.Read(random) + b = quicvarint.Append(b, 27+31*uint64(random[0])) + length := random[1] % 16 + b = quicvarint.Append(b, uint64(length)) + b = append(b, random[2:2+length]...) + + // initial_max_stream_data_bidi_local + b = p.marshalVarintParam(b, initialMaxStreamDataBidiLocalParameterID, uint64(p.InitialMaxStreamDataBidiLocal)) + // initial_max_stream_data_bidi_remote + b = p.marshalVarintParam(b, initialMaxStreamDataBidiRemoteParameterID, uint64(p.InitialMaxStreamDataBidiRemote)) + // initial_max_stream_data_uni + b = p.marshalVarintParam(b, initialMaxStreamDataUniParameterID, uint64(p.InitialMaxStreamDataUni)) + // initial_max_data + b = p.marshalVarintParam(b, initialMaxDataParameterID, uint64(p.InitialMaxData)) + // initial_max_bidi_streams + b = p.marshalVarintParam(b, initialMaxStreamsBidiParameterID, uint64(p.MaxBidiStreamNum)) + // initial_max_uni_streams + b = p.marshalVarintParam(b, initialMaxStreamsUniParameterID, uint64(p.MaxUniStreamNum)) + // idle_timeout + b = p.marshalVarintParam(b, maxIdleTimeoutParameterID, uint64(p.MaxIdleTimeout/time.Millisecond)) + // max_udp_payload_size + if p.MaxUDPPayloadSize > 0 { + b = p.marshalVarintParam(b, maxUDPPayloadSizeParameterID, uint64(p.MaxUDPPayloadSize)) + } + // max_ack_delay + // Only send it if is different from the default value. + if p.MaxAckDelay != protocol.DefaultMaxAckDelay { + b = p.marshalVarintParam(b, maxAckDelayParameterID, uint64(p.MaxAckDelay/time.Millisecond)) + } + // ack_delay_exponent + // Only send it if is different from the default value. + if p.AckDelayExponent != protocol.DefaultAckDelayExponent { + b = p.marshalVarintParam(b, ackDelayExponentParameterID, uint64(p.AckDelayExponent)) + } + // disable_active_migration + if p.DisableActiveMigration { + b = quicvarint.Append(b, uint64(disableActiveMigrationParameterID)) + b = quicvarint.Append(b, 0) + } + if pers == protocol.PerspectiveServer { + // stateless_reset_token + if p.StatelessResetToken != nil { + b = quicvarint.Append(b, uint64(statelessResetTokenParameterID)) + b = quicvarint.Append(b, 16) + b = append(b, p.StatelessResetToken[:]...) + } + // original_destination_connection_id + b = quicvarint.Append(b, uint64(originalDestinationConnectionIDParameterID)) + b = quicvarint.Append(b, uint64(p.OriginalDestinationConnectionID.Len())) + b = append(b, p.OriginalDestinationConnectionID.Bytes()...) + // preferred_address + if p.PreferredAddress != nil { + b = quicvarint.Append(b, uint64(preferredAddressParameterID)) + b = quicvarint.Append(b, 4+2+16+2+1+uint64(p.PreferredAddress.ConnectionID.Len())+16) + if p.PreferredAddress.IPv4.IsValid() { + ipv4 := p.PreferredAddress.IPv4.Addr().As4() + b = append(b, ipv4[:]...) + b = binary.BigEndian.AppendUint16(b, p.PreferredAddress.IPv4.Port()) + } else { + b = append(b, make([]byte, 6)...) + } + if p.PreferredAddress.IPv6.IsValid() { + ipv6 := p.PreferredAddress.IPv6.Addr().As16() + b = append(b, ipv6[:]...) + b = binary.BigEndian.AppendUint16(b, p.PreferredAddress.IPv6.Port()) + } else { + b = append(b, make([]byte, 18)...) + } + b = append(b, uint8(p.PreferredAddress.ConnectionID.Len())) + b = append(b, p.PreferredAddress.ConnectionID.Bytes()...) + b = append(b, p.PreferredAddress.StatelessResetToken[:]...) + } + } + // active_connection_id_limit + if p.ActiveConnectionIDLimit != protocol.DefaultActiveConnectionIDLimit { + b = p.marshalVarintParam(b, activeConnectionIDLimitParameterID, p.ActiveConnectionIDLimit) + } + // initial_source_connection_id + b = quicvarint.Append(b, uint64(initialSourceConnectionIDParameterID)) + b = quicvarint.Append(b, uint64(p.InitialSourceConnectionID.Len())) + b = append(b, p.InitialSourceConnectionID.Bytes()...) + // retry_source_connection_id + if pers == protocol.PerspectiveServer && p.RetrySourceConnectionID != nil { + b = quicvarint.Append(b, uint64(retrySourceConnectionIDParameterID)) + b = quicvarint.Append(b, uint64(p.RetrySourceConnectionID.Len())) + b = append(b, p.RetrySourceConnectionID.Bytes()...) + } + // QUIC datagrams + if p.MaxDatagramFrameSize != protocol.InvalidByteCount { + b = p.marshalVarintParam(b, maxDatagramFrameSizeParameterID, uint64(p.MaxDatagramFrameSize)) + } + // QUIC Stream Resets with Partial Delivery + if p.EnableResetStreamAt { + b = quicvarint.Append(b, uint64(resetStreamAtParameterID)) + b = quicvarint.Append(b, 0) + } + + if pers == protocol.PerspectiveClient && len(AdditionalTransportParametersClient) > 0 { + for k, v := range AdditionalTransportParametersClient { + b = quicvarint.Append(b, k) + b = quicvarint.Append(b, uint64(len(v))) + b = append(b, v...) + } + } + + return b +} + +func (p *TransportParameters) marshalVarintParam(b []byte, id transportParameterID, val uint64) []byte { + b = quicvarint.Append(b, uint64(id)) + b = quicvarint.Append(b, uint64(quicvarint.Len(val))) + return quicvarint.Append(b, val) +} + +// MarshalForSessionTicket marshals the transport parameters we save in the session ticket. +// When sending a 0-RTT enabled TLS session tickets, we need to save the transport parameters. +// The client will remember the transport parameters used in the last session, +// and apply those to the 0-RTT data it sends. +// Saving the transport parameters in the ticket gives the server the option to reject 0-RTT +// if the transport parameters changed. +// Since the session ticket is encrypted, the serialization format is defined by the server. +// For convenience, we use the same format that we also use for sending the transport parameters. +func (p *TransportParameters) MarshalForSessionTicket(b []byte) []byte { + b = quicvarint.Append(b, transportParameterMarshalingVersion) + + // initial_max_stream_data_bidi_local + b = p.marshalVarintParam(b, initialMaxStreamDataBidiLocalParameterID, uint64(p.InitialMaxStreamDataBidiLocal)) + // initial_max_stream_data_bidi_remote + b = p.marshalVarintParam(b, initialMaxStreamDataBidiRemoteParameterID, uint64(p.InitialMaxStreamDataBidiRemote)) + // initial_max_stream_data_uni + b = p.marshalVarintParam(b, initialMaxStreamDataUniParameterID, uint64(p.InitialMaxStreamDataUni)) + // initial_max_data + b = p.marshalVarintParam(b, initialMaxDataParameterID, uint64(p.InitialMaxData)) + // initial_max_bidi_streams + b = p.marshalVarintParam(b, initialMaxStreamsBidiParameterID, uint64(p.MaxBidiStreamNum)) + // initial_max_uni_streams + b = p.marshalVarintParam(b, initialMaxStreamsUniParameterID, uint64(p.MaxUniStreamNum)) + // active_connection_id_limit + b = p.marshalVarintParam(b, activeConnectionIDLimitParameterID, p.ActiveConnectionIDLimit) + // max_datagram_frame_size + if p.MaxDatagramFrameSize != protocol.InvalidByteCount { + b = p.marshalVarintParam(b, maxDatagramFrameSizeParameterID, uint64(p.MaxDatagramFrameSize)) + } + // reset_stream_at + if p.EnableResetStreamAt { + b = quicvarint.Append(b, uint64(resetStreamAtParameterID)) + b = quicvarint.Append(b, 0) + } + return b +} + +// UnmarshalFromSessionTicket unmarshals transport parameters from a session ticket. +func (p *TransportParameters) UnmarshalFromSessionTicket(b []byte) error { + version, l, err := quicvarint.Parse(b) + if err != nil { + return err + } + if version != transportParameterMarshalingVersion { + return fmt.Errorf("unknown transport parameter marshaling version: %d", version) + } + return p.unmarshal(b[l:], protocol.PerspectiveServer, true) +} + +// ValidFor0RTT checks if the transport parameters match those saved in the session ticket. +func (p *TransportParameters) ValidFor0RTT(saved *TransportParameters) bool { + if saved.MaxDatagramFrameSize != protocol.InvalidByteCount && (p.MaxDatagramFrameSize == protocol.InvalidByteCount || p.MaxDatagramFrameSize < saved.MaxDatagramFrameSize) { + return false + } + return p.InitialMaxStreamDataBidiLocal >= saved.InitialMaxStreamDataBidiLocal && + p.InitialMaxStreamDataBidiRemote >= saved.InitialMaxStreamDataBidiRemote && + p.InitialMaxStreamDataUni >= saved.InitialMaxStreamDataUni && + p.InitialMaxData >= saved.InitialMaxData && + p.MaxBidiStreamNum >= saved.MaxBidiStreamNum && + p.MaxUniStreamNum >= saved.MaxUniStreamNum && + p.ActiveConnectionIDLimit == saved.ActiveConnectionIDLimit +} + +// ValidForUpdate checks that the new transport parameters don't reduce limits after resuming a 0-RTT connection. +// It is only used on the client side. +func (p *TransportParameters) ValidForUpdate(saved *TransportParameters) bool { + if saved.MaxDatagramFrameSize != protocol.InvalidByteCount && (p.MaxDatagramFrameSize == protocol.InvalidByteCount || p.MaxDatagramFrameSize < saved.MaxDatagramFrameSize) { + return false + } + return p.ActiveConnectionIDLimit >= saved.ActiveConnectionIDLimit && + p.InitialMaxData >= saved.InitialMaxData && + p.InitialMaxStreamDataBidiLocal >= saved.InitialMaxStreamDataBidiLocal && + p.InitialMaxStreamDataBidiRemote >= saved.InitialMaxStreamDataBidiRemote && + p.InitialMaxStreamDataUni >= saved.InitialMaxStreamDataUni && + p.MaxBidiStreamNum >= saved.MaxBidiStreamNum && + p.MaxUniStreamNum >= saved.MaxUniStreamNum +} + +// String returns a string representation, intended for logging. +func (p *TransportParameters) String() string { + logString := "&wire.TransportParameters{OriginalDestinationConnectionID: %s, InitialSourceConnectionID: %s, " + logParams := []any{p.OriginalDestinationConnectionID, p.InitialSourceConnectionID} + if p.RetrySourceConnectionID != nil { + logString += "RetrySourceConnectionID: %s, " + logParams = append(logParams, p.RetrySourceConnectionID) + } + logString += "InitialMaxStreamDataBidiLocal: %d, InitialMaxStreamDataBidiRemote: %d, InitialMaxStreamDataUni: %d, InitialMaxData: %d, MaxBidiStreamNum: %d, MaxUniStreamNum: %d, MaxIdleTimeout: %s, AckDelayExponent: %d, MaxAckDelay: %s, ActiveConnectionIDLimit: %d" + logParams = append(logParams, []any{p.InitialMaxStreamDataBidiLocal, p.InitialMaxStreamDataBidiRemote, p.InitialMaxStreamDataUni, p.InitialMaxData, p.MaxBidiStreamNum, p.MaxUniStreamNum, p.MaxIdleTimeout, p.AckDelayExponent, p.MaxAckDelay, p.ActiveConnectionIDLimit}...) + if p.StatelessResetToken != nil { // the client never sends a stateless reset token + logString += ", StatelessResetToken: %#x" + logParams = append(logParams, *p.StatelessResetToken) + } + if p.MaxDatagramFrameSize != protocol.InvalidByteCount { + logString += ", MaxDatagramFrameSize: %d" + logParams = append(logParams, p.MaxDatagramFrameSize) + } + logString += ", EnableResetStreamAt: %t" + logParams = append(logParams, p.EnableResetStreamAt) + logString += "}" + return fmt.Sprintf(logString, logParams...) +} diff --git a/vendor/github.com/quic-go/quic-go/internal/wire/version_negotiation.go b/vendor/github.com/quic-go/quic-go/internal/wire/version_negotiation.go new file mode 100644 index 0000000..407cb62 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/internal/wire/version_negotiation.go @@ -0,0 +1,53 @@ +package wire + +import ( + "crypto/rand" + "encoding/binary" + "errors" + + "github.com/quic-go/quic-go/internal/protocol" +) + +// ParseVersionNegotiationPacket parses a Version Negotiation packet. +func ParseVersionNegotiationPacket(b []byte) (dest, src protocol.ArbitraryLenConnectionID, _ []protocol.Version, _ error) { + n, dest, src, err := ParseArbitraryLenConnectionIDs(b) + if err != nil { + return nil, nil, nil, err + } + b = b[n:] + if len(b) == 0 { + //nolint:staticcheck // SA1021: the packet is called Version Negotiation packet + return nil, nil, nil, errors.New("Version Negotiation packet has empty version list") + } + if len(b)%4 != 0 { + //nolint:staticcheck // SA1021: the packet is called Version Negotiation packet + return nil, nil, nil, errors.New("Version Negotiation packet has a version list with an invalid length") + } + versions := make([]protocol.Version, len(b)/4) + for i := 0; len(b) > 0; i++ { + versions[i] = protocol.Version(binary.BigEndian.Uint32(b[:4])) + b = b[4:] + } + return dest, src, versions, nil +} + +// ComposeVersionNegotiation composes a Version Negotiation +func ComposeVersionNegotiation(destConnID, srcConnID protocol.ArbitraryLenConnectionID, versions []protocol.Version) []byte { + greasedVersions := protocol.GetGreasedVersions(versions) + expectedLen := 1 /* type byte */ + 4 /* version field */ + 1 /* dest connection ID length field */ + destConnID.Len() + 1 /* src connection ID length field */ + srcConnID.Len() + len(greasedVersions)*4 + buf := make([]byte, 1+4 /* type byte and version field */, expectedLen) + _, _ = rand.Read(buf[:1]) // ignore the error here. It is not critical to have perfect random here. + // Setting the "QUIC bit" (0x40) is not required by the RFC, + // but it allows clients to demultiplex QUIC with a long list of other protocols. + // See RFC 9443 and https://mailarchive.ietf.org/arch/msg/quic/oR4kxGKY6mjtPC1CZegY1ED4beg/ for details. + buf[0] |= 0xc0 + // The next 4 bytes are left at 0 (version number). + buf = append(buf, uint8(destConnID.Len())) + buf = append(buf, destConnID.Bytes()...) + buf = append(buf, uint8(srcConnID.Len())) + buf = append(buf, srcConnID.Bytes()...) + for _, v := range greasedVersions { + buf = binary.BigEndian.AppendUint32(buf, uint32(v)) + } + return buf +} diff --git a/vendor/github.com/quic-go/quic-go/logging/connection_tracer.go b/vendor/github.com/quic-go/quic-go/logging/connection_tracer.go new file mode 100644 index 0000000..f218e04 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/logging/connection_tracer.go @@ -0,0 +1,44 @@ +package logging + +import ( + "net" + "time" +) + +//go:generate go run generate_multiplexer.go ConnectionTracer connection_tracer.go multiplexer.tmpl connection_tracer_multiplexer.go + +// A ConnectionTracer records events. +type ConnectionTracer struct { + StartedConnection func(local, remote net.Addr, srcConnID, destConnID ConnectionID) + NegotiatedVersion func(chosen Version, clientVersions, serverVersions []Version) + ClosedConnection func(err error) + SentTransportParameters func(parameters *TransportParameters) + ReceivedTransportParameters func(parameters *TransportParameters) + RestoredTransportParameters func(parameters *TransportParameters) // for 0-RTT + SentLongHeaderPacket func(hdr *ExtendedHeader, size ByteCount, ecn ECN, ack *AckFrame, frames []Frame) + SentShortHeaderPacket func(hdr *ShortHeader, size ByteCount, ecn ECN, ack *AckFrame, frames []Frame) + ReceivedVersionNegotiationPacket func(dest, src ArbitraryLenConnectionID, versions []Version) + ReceivedRetry func(hdr *Header) + ReceivedLongHeaderPacket func(hdr *ExtendedHeader, size ByteCount, ecn ECN, frames []Frame) + ReceivedShortHeaderPacket func(hdr *ShortHeader, size ByteCount, ecn ECN, frames []Frame) + BufferedPacket func(packetType PacketType, size ByteCount) + DroppedPacket func(packetType PacketType, pn PacketNumber, size ByteCount, reason PacketDropReason) + UpdatedMetrics func(rttStats *RTTStats, cwnd, bytesInFlight ByteCount, packetsInFlight int) + AcknowledgedPacket func(encLevel EncryptionLevel, pn PacketNumber) + LostPacket func(encLevel EncryptionLevel, pn PacketNumber, reason PacketLossReason) + UpdatedMTU func(mtu ByteCount, done bool) + UpdatedCongestionState func(state CongestionState) + UpdatedPTOCount func(value uint32) + UpdatedKeyFromTLS func(encLevel EncryptionLevel, p Perspective) + UpdatedKey func(keyPhase KeyPhase, remote bool) + DroppedEncryptionLevel func(encLevel EncryptionLevel) + DroppedKey func(keyPhase KeyPhase) + SetLossTimer func(timerType TimerType, encLevel EncryptionLevel, time time.Time) + LossTimerExpired func(timerType TimerType, encLevel EncryptionLevel) + LossTimerCanceled func() + ECNStateUpdated func(state ECNState, trigger ECNStateTrigger) + ChoseALPN func(protocol string) + // Close is called when the connection is closed. + Close func() + Debug func(name, msg string) +} diff --git a/vendor/github.com/quic-go/quic-go/logging/connection_tracer_multiplexer.go b/vendor/github.com/quic-go/quic-go/logging/connection_tracer_multiplexer.go new file mode 100644 index 0000000..3a87058 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/logging/connection_tracer_multiplexer.go @@ -0,0 +1,236 @@ +// Code generated by generate_multiplexer.go; DO NOT EDIT. + +package logging + +import ( + "net" + "time" +) + +func NewMultiplexedConnectionTracer(tracers ...*ConnectionTracer) *ConnectionTracer { + if len(tracers) == 0 { + return nil + } + if len(tracers) == 1 { + return tracers[0] + } + return &ConnectionTracer{ + StartedConnection: func(local net.Addr, remote net.Addr, srcConnID ConnectionID, destConnID ConnectionID) { + for _, t := range tracers { + if t.StartedConnection != nil { + t.StartedConnection(local, remote, srcConnID, destConnID) + } + } + }, + NegotiatedVersion: func(chosen Version, clientVersions []Version, serverVersions []Version) { + for _, t := range tracers { + if t.NegotiatedVersion != nil { + t.NegotiatedVersion(chosen, clientVersions, serverVersions) + } + } + }, + ClosedConnection: func(err error) { + for _, t := range tracers { + if t.ClosedConnection != nil { + t.ClosedConnection(err) + } + } + }, + SentTransportParameters: func(parameters *TransportParameters) { + for _, t := range tracers { + if t.SentTransportParameters != nil { + t.SentTransportParameters(parameters) + } + } + }, + ReceivedTransportParameters: func(parameters *TransportParameters) { + for _, t := range tracers { + if t.ReceivedTransportParameters != nil { + t.ReceivedTransportParameters(parameters) + } + } + }, + RestoredTransportParameters: func(parameters *TransportParameters) { + for _, t := range tracers { + if t.RestoredTransportParameters != nil { + t.RestoredTransportParameters(parameters) + } + } + }, + SentLongHeaderPacket: func(hdr *ExtendedHeader, size ByteCount, ecn ECN, ack *AckFrame, frames []Frame) { + for _, t := range tracers { + if t.SentLongHeaderPacket != nil { + t.SentLongHeaderPacket(hdr, size, ecn, ack, frames) + } + } + }, + SentShortHeaderPacket: func(hdr *ShortHeader, size ByteCount, ecn ECN, ack *AckFrame, frames []Frame) { + for _, t := range tracers { + if t.SentShortHeaderPacket != nil { + t.SentShortHeaderPacket(hdr, size, ecn, ack, frames) + } + } + }, + ReceivedVersionNegotiationPacket: func(dest ArbitraryLenConnectionID, src ArbitraryLenConnectionID, versions []Version) { + for _, t := range tracers { + if t.ReceivedVersionNegotiationPacket != nil { + t.ReceivedVersionNegotiationPacket(dest, src, versions) + } + } + }, + ReceivedRetry: func(hdr *Header) { + for _, t := range tracers { + if t.ReceivedRetry != nil { + t.ReceivedRetry(hdr) + } + } + }, + ReceivedLongHeaderPacket: func(hdr *ExtendedHeader, size ByteCount, ecn ECN, frames []Frame) { + for _, t := range tracers { + if t.ReceivedLongHeaderPacket != nil { + t.ReceivedLongHeaderPacket(hdr, size, ecn, frames) + } + } + }, + ReceivedShortHeaderPacket: func(hdr *ShortHeader, size ByteCount, ecn ECN, frames []Frame) { + for _, t := range tracers { + if t.ReceivedShortHeaderPacket != nil { + t.ReceivedShortHeaderPacket(hdr, size, ecn, frames) + } + } + }, + BufferedPacket: func(packetType PacketType, size ByteCount) { + for _, t := range tracers { + if t.BufferedPacket != nil { + t.BufferedPacket(packetType, size) + } + } + }, + DroppedPacket: func(packetType PacketType, pn PacketNumber, size ByteCount, reason PacketDropReason) { + for _, t := range tracers { + if t.DroppedPacket != nil { + t.DroppedPacket(packetType, pn, size, reason) + } + } + }, + UpdatedMetrics: func(rttStats *RTTStats, cwnd ByteCount, bytesInFlight ByteCount, packetsInFlight int) { + for _, t := range tracers { + if t.UpdatedMetrics != nil { + t.UpdatedMetrics(rttStats, cwnd, bytesInFlight, packetsInFlight) + } + } + }, + AcknowledgedPacket: func(encLevel EncryptionLevel, pn PacketNumber) { + for _, t := range tracers { + if t.AcknowledgedPacket != nil { + t.AcknowledgedPacket(encLevel, pn) + } + } + }, + LostPacket: func(encLevel EncryptionLevel, pn PacketNumber, reason PacketLossReason) { + for _, t := range tracers { + if t.LostPacket != nil { + t.LostPacket(encLevel, pn, reason) + } + } + }, + UpdatedMTU: func(mtu ByteCount, done bool) { + for _, t := range tracers { + if t.UpdatedMTU != nil { + t.UpdatedMTU(mtu, done) + } + } + }, + UpdatedCongestionState: func(state CongestionState) { + for _, t := range tracers { + if t.UpdatedCongestionState != nil { + t.UpdatedCongestionState(state) + } + } + }, + UpdatedPTOCount: func(value uint32) { + for _, t := range tracers { + if t.UpdatedPTOCount != nil { + t.UpdatedPTOCount(value) + } + } + }, + UpdatedKeyFromTLS: func(encLevel EncryptionLevel, p Perspective) { + for _, t := range tracers { + if t.UpdatedKeyFromTLS != nil { + t.UpdatedKeyFromTLS(encLevel, p) + } + } + }, + UpdatedKey: func(keyPhase KeyPhase, remote bool) { + for _, t := range tracers { + if t.UpdatedKey != nil { + t.UpdatedKey(keyPhase, remote) + } + } + }, + DroppedEncryptionLevel: func(encLevel EncryptionLevel) { + for _, t := range tracers { + if t.DroppedEncryptionLevel != nil { + t.DroppedEncryptionLevel(encLevel) + } + } + }, + DroppedKey: func(keyPhase KeyPhase) { + for _, t := range tracers { + if t.DroppedKey != nil { + t.DroppedKey(keyPhase) + } + } + }, + SetLossTimer: func(timerType TimerType, encLevel EncryptionLevel, time time.Time) { + for _, t := range tracers { + if t.SetLossTimer != nil { + t.SetLossTimer(timerType, encLevel, time) + } + } + }, + LossTimerExpired: func(timerType TimerType, encLevel EncryptionLevel) { + for _, t := range tracers { + if t.LossTimerExpired != nil { + t.LossTimerExpired(timerType, encLevel) + } + } + }, + LossTimerCanceled: func() { + for _, t := range tracers { + if t.LossTimerCanceled != nil { + t.LossTimerCanceled() + } + } + }, + ECNStateUpdated: func(state ECNState, trigger ECNStateTrigger) { + for _, t := range tracers { + if t.ECNStateUpdated != nil { + t.ECNStateUpdated(state, trigger) + } + } + }, + ChoseALPN: func(protocol string) { + for _, t := range tracers { + if t.ChoseALPN != nil { + t.ChoseALPN(protocol) + } + } + }, + Close: func() { + for _, t := range tracers { + if t.Close != nil { + t.Close() + } + } + }, + Debug: func(name string, msg string) { + for _, t := range tracers { + if t.Debug != nil { + t.Debug(name, msg) + } + } + }, + } +} diff --git a/vendor/github.com/quic-go/quic-go/logging/frame.go b/vendor/github.com/quic-go/quic-go/logging/frame.go new file mode 100644 index 0000000..9a055db --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/logging/frame.go @@ -0,0 +1,66 @@ +package logging + +import "github.com/quic-go/quic-go/internal/wire" + +// A Frame is a QUIC frame +type Frame interface{} + +// The AckRange is used within the AckFrame. +// It is a range of packet numbers that is being acknowledged. +type AckRange = wire.AckRange + +type ( + // An AckFrame is an ACK frame. + AckFrame = wire.AckFrame + // A ConnectionCloseFrame is a CONNECTION_CLOSE frame. + ConnectionCloseFrame = wire.ConnectionCloseFrame + // A DataBlockedFrame is a DATA_BLOCKED frame. + DataBlockedFrame = wire.DataBlockedFrame + // A HandshakeDoneFrame is a HANDSHAKE_DONE frame. + HandshakeDoneFrame = wire.HandshakeDoneFrame + // A MaxDataFrame is a MAX_DATA frame. + MaxDataFrame = wire.MaxDataFrame + // A MaxStreamDataFrame is a MAX_STREAM_DATA frame. + MaxStreamDataFrame = wire.MaxStreamDataFrame + // A MaxStreamsFrame is a MAX_STREAMS_FRAME. + MaxStreamsFrame = wire.MaxStreamsFrame + // A NewConnectionIDFrame is a NEW_CONNECTION_ID frame. + NewConnectionIDFrame = wire.NewConnectionIDFrame + // A NewTokenFrame is a NEW_TOKEN frame. + NewTokenFrame = wire.NewTokenFrame + // A PathChallengeFrame is a PATH_CHALLENGE frame. + PathChallengeFrame = wire.PathChallengeFrame + // A PathResponseFrame is a PATH_RESPONSE frame. + PathResponseFrame = wire.PathResponseFrame + // A PingFrame is a PING frame. + PingFrame = wire.PingFrame + // A ResetStreamFrame is a RESET_STREAM frame. + ResetStreamFrame = wire.ResetStreamFrame + // A RetireConnectionIDFrame is a RETIRE_CONNECTION_ID frame. + RetireConnectionIDFrame = wire.RetireConnectionIDFrame + // A StopSendingFrame is a STOP_SENDING frame. + StopSendingFrame = wire.StopSendingFrame + // A StreamsBlockedFrame is a STREAMS_BLOCKED frame. + StreamsBlockedFrame = wire.StreamsBlockedFrame + // A StreamDataBlockedFrame is a STREAM_DATA_BLOCKED frame. + StreamDataBlockedFrame = wire.StreamDataBlockedFrame +) + +// A CryptoFrame is a CRYPTO frame. +type CryptoFrame struct { + Offset ByteCount + Length ByteCount +} + +// A StreamFrame is a STREAM frame. +type StreamFrame struct { + StreamID StreamID + Offset ByteCount + Length ByteCount + Fin bool +} + +// A DatagramFrame is a DATAGRAM frame. +type DatagramFrame struct { + Length ByteCount +} diff --git a/vendor/github.com/quic-go/quic-go/logging/generate_multiplexer.go b/vendor/github.com/quic-go/quic-go/logging/generate_multiplexer.go new file mode 100644 index 0000000..c152b84 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/logging/generate_multiplexer.go @@ -0,0 +1,161 @@ +//go:build generate + +package main + +import ( + "bytes" + "fmt" + "go/ast" + "go/parser" + "go/printer" + "go/token" + "log" + "os" + "strings" + "text/template" + + "golang.org/x/tools/imports" +) + +func main() { + if len(os.Args) != 5 { + log.Fatalf("Usage: %s ", os.Args[0]) + } + + structName := os.Args[1] + inputFile := os.Args[2] + templateFile := os.Args[3] + outputFile := os.Args[4] + + fset := token.NewFileSet() + + // Parse the input file containing the struct type + file, err := parser.ParseFile(fset, inputFile, nil, parser.AllErrors) + if err != nil { + log.Fatalf("Failed to parse file: %v", err) + } + + var fields []*ast.Field + + // Find the specified struct type in the AST + for _, decl := range file.Decls { + genDecl, ok := decl.(*ast.GenDecl) + if !ok || genDecl.Tok != token.TYPE { + continue + } + for _, spec := range genDecl.Specs { + typeSpec, ok := spec.(*ast.TypeSpec) + if !ok || typeSpec.Name.Name != structName { + continue + } + structType, ok := typeSpec.Type.(*ast.StructType) + if !ok { + log.Fatalf("%s is not a struct", structName) + } + fields = structType.Fields.List + break + } + } + + if fields == nil { + log.Fatalf("Could not find %s type", structName) + } + + // Prepare data for the template + type FieldData struct { + Name string + Params string + Args string + HasParams bool + ReturnTypes string + HasReturn bool + } + + var fieldDataList []FieldData + + for _, field := range fields { + funcType, ok := field.Type.(*ast.FuncType) + if !ok { + continue + } + for _, name := range field.Names { + fieldData := FieldData{Name: name.Name} + + // extract parameters + var params []string + var args []string + if funcType.Params != nil { + for i, param := range funcType.Params.List { + // We intentionally reject unnamed (and, further down, "_") function parameters. + // We could auto-generate parameter names, + // but having meaningful variable names will be more helpful for the user. + if len(param.Names) == 0 { + log.Fatalf("encountered unnamed parameter at position %d in function %s", i, fieldData.Name) + } + var buf bytes.Buffer + printer.Fprint(&buf, fset, param.Type) + paramType := buf.String() + for _, paramName := range param.Names { + if paramName.Name == "_" { + log.Fatalf("encountered underscore parameter at position %d in function %s", i, fieldData.Name) + } + params = append(params, fmt.Sprintf("%s %s", paramName.Name, paramType)) + args = append(args, paramName.Name) + } + } + } + fieldData.Params = strings.Join(params, ", ") + fieldData.Args = strings.Join(args, ", ") + fieldData.HasParams = len(params) > 0 + + // extract return types + if funcType.Results != nil && len(funcType.Results.List) > 0 { + fieldData.HasReturn = true + var returns []string + for _, result := range funcType.Results.List { + var buf bytes.Buffer + printer.Fprint(&buf, fset, result.Type) + returns = append(returns, buf.String()) + } + if len(returns) == 1 { + fieldData.ReturnTypes = fmt.Sprintf(" %s", returns[0]) + } else { + fieldData.ReturnTypes = fmt.Sprintf(" (%s)", strings.Join(returns, ", ")) + } + } + + fieldDataList = append(fieldDataList, fieldData) + } + } + + // Read the template from file + templateContent, err := os.ReadFile(templateFile) + if err != nil { + log.Fatalf("Failed to read template file: %v", err) + } + + // Generate the code using the template + tmpl, err := template.New("multiplexer").Funcs(template.FuncMap{"join": strings.Join}).Parse(string(templateContent)) + if err != nil { + log.Fatalf("Failed to parse template: %v", err) + } + + var generatedCode bytes.Buffer + generatedCode.WriteString("// Code generated by generate_multiplexer.go; DO NOT EDIT.\n\n") + if err = tmpl.Execute(&generatedCode, map[string]interface{}{ + "Fields": fieldDataList, + "StructName": structName, + }); err != nil { + log.Fatalf("Failed to execute template: %v", err) + } + + // Format the generated code and add imports + formattedCode, err := imports.Process(outputFile, generatedCode.Bytes(), nil) + if err != nil { + log.Fatalf("Failed to process imports: %v", err) + } + + if err := os.WriteFile(outputFile, formattedCode, 0o644); err != nil { + log.Fatalf("Failed to write output file: %v", err) + } +} diff --git a/vendor/github.com/quic-go/quic-go/logging/interface.go b/vendor/github.com/quic-go/quic-go/logging/interface.go new file mode 100644 index 0000000..1f8edb9 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/logging/interface.go @@ -0,0 +1,111 @@ +// Package logging defines a logging interface for quic-go. +// This package should not be considered stable +package logging + +import ( + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/internal/wire" +) + +type ( + // A ByteCount is used to count bytes. + ByteCount = protocol.ByteCount + // ECN is the ECN value + ECN = protocol.ECN + // A ConnectionID is a QUIC Connection ID. + ConnectionID = protocol.ConnectionID + // An ArbitraryLenConnectionID is a QUIC Connection ID that can be up to 255 bytes long. + ArbitraryLenConnectionID = protocol.ArbitraryLenConnectionID + // The EncryptionLevel is the encryption level of a packet. + EncryptionLevel = protocol.EncryptionLevel + // The KeyPhase is the key phase of the 1-RTT keys. + KeyPhase = protocol.KeyPhase + // The KeyPhaseBit is the value of the key phase bit of the 1-RTT packets. + KeyPhaseBit = protocol.KeyPhaseBit + // The PacketNumber is the packet number of a packet. + PacketNumber = protocol.PacketNumber + // The Perspective is the role of a QUIC endpoint (client or server). + Perspective = protocol.Perspective + // A StatelessResetToken is a stateless reset token. + StatelessResetToken = protocol.StatelessResetToken + // The StreamID is the stream ID. + StreamID = protocol.StreamID + // The StreamNum is the number of the stream. + StreamNum = protocol.StreamNum + // The StreamType is the type of the stream (unidirectional or bidirectional). + StreamType = protocol.StreamType + // The Version is the QUIC version. + Version = protocol.Version + + // The Header is the QUIC packet header, before removing header protection. + Header = wire.Header + // The ExtendedHeader is the QUIC Long Header packet header, after removing header protection. + ExtendedHeader = wire.ExtendedHeader + // The TransportParameters are QUIC transport parameters. + TransportParameters = wire.TransportParameters + // The PreferredAddress is the preferred address sent in the transport parameters. + PreferredAddress = wire.PreferredAddress + + // A TransportError is a transport-level error code. + TransportError = qerr.TransportErrorCode + // An ApplicationError is an application-defined error code. + ApplicationError = qerr.TransportErrorCode + + // The RTTStats contain statistics used by the congestion controller. + RTTStats = utils.RTTStats +) + +const ( + // ECNUnsupported means that no ECN value was set / received + ECNUnsupported = protocol.ECNUnsupported + // ECTNot is Not-ECT + ECTNot = protocol.ECNNon + // ECT0 is ECT(0) + ECT0 = protocol.ECT0 + // ECT1 is ECT(1) + ECT1 = protocol.ECT1 + // ECNCE is CE + ECNCE = protocol.ECNCE +) + +const ( + // KeyPhaseZero is key phase bit 0 + KeyPhaseZero = protocol.KeyPhaseZero + // KeyPhaseOne is key phase bit 1 + KeyPhaseOne = protocol.KeyPhaseOne +) + +const ( + // PerspectiveServer is used for a QUIC server + PerspectiveServer = protocol.PerspectiveServer + // PerspectiveClient is used for a QUIC client + PerspectiveClient = protocol.PerspectiveClient +) + +const ( + // EncryptionInitial is the Initial encryption level + EncryptionInitial = protocol.EncryptionInitial + // EncryptionHandshake is the Handshake encryption level + EncryptionHandshake = protocol.EncryptionHandshake + // Encryption1RTT is the 1-RTT encryption level + Encryption1RTT = protocol.Encryption1RTT + // Encryption0RTT is the 0-RTT encryption level + Encryption0RTT = protocol.Encryption0RTT +) + +const ( + // StreamTypeUni is a unidirectional stream + StreamTypeUni = protocol.StreamTypeUni + // StreamTypeBidi is a bidirectional stream + StreamTypeBidi = protocol.StreamTypeBidi +) + +// The ShortHeader is the QUIC Short Header packet header, after removing header protection. +type ShortHeader struct { + DestConnectionID ConnectionID + PacketNumber PacketNumber + PacketNumberLen protocol.PacketNumberLen + KeyPhase KeyPhaseBit +} diff --git a/vendor/github.com/quic-go/quic-go/logging/multiplexer.tmpl b/vendor/github.com/quic-go/quic-go/logging/multiplexer.tmpl new file mode 100644 index 0000000..9ba52e0 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/logging/multiplexer.tmpl @@ -0,0 +1,21 @@ +package logging + +func NewMultiplexed{{ .StructName }} (tracers ...*{{ .StructName }}) *{{ .StructName }} { + if len(tracers) == 0 { + return nil + } + if len(tracers) == 1 { + return tracers[0] + } + return &{{ .StructName }}{ + {{- range .Fields }} + {{ .Name }}: func({{ .Params }}){{ .ReturnTypes }} { + for _, t := range tracers { + if t.{{ .Name }} != nil { + t.{{ .Name }}({{ .Args }}) + } + } + }, + {{- end }} + } +} diff --git a/vendor/github.com/quic-go/quic-go/logging/packet_header.go b/vendor/github.com/quic-go/quic-go/logging/packet_header.go new file mode 100644 index 0000000..6b8df58 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/logging/packet_header.go @@ -0,0 +1,24 @@ +package logging + +import ( + "github.com/quic-go/quic-go/internal/protocol" +) + +// PacketTypeFromHeader determines the packet type from a *wire.Header. +func PacketTypeFromHeader(hdr *Header) PacketType { + if hdr.Version == 0 { + return PacketTypeVersionNegotiation + } + switch hdr.Type { + case protocol.PacketTypeInitial: + return PacketTypeInitial + case protocol.PacketTypeHandshake: + return PacketTypeHandshake + case protocol.PacketType0RTT: + return PacketType0RTT + case protocol.PacketTypeRetry: + return PacketTypeRetry + default: + return PacketTypeNotDetermined + } +} diff --git a/vendor/github.com/quic-go/quic-go/logging/tracer.go b/vendor/github.com/quic-go/quic-go/logging/tracer.go new file mode 100644 index 0000000..4fe0146 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/logging/tracer.go @@ -0,0 +1,14 @@ +package logging + +import "net" + +//go:generate go run generate_multiplexer.go Tracer tracer.go multiplexer.tmpl tracer_multiplexer.go + +// A Tracer traces events. +type Tracer struct { + SentPacket func(dest net.Addr, hdr *Header, size ByteCount, frames []Frame) + SentVersionNegotiationPacket func(dest net.Addr, destConnID, srcConnID ArbitraryLenConnectionID, versions []Version) + DroppedPacket func(addr net.Addr, packetType PacketType, size ByteCount, reason PacketDropReason) + Debug func(name, msg string) + Close func() +} diff --git a/vendor/github.com/quic-go/quic-go/logging/tracer_multiplexer.go b/vendor/github.com/quic-go/quic-go/logging/tracer_multiplexer.go new file mode 100644 index 0000000..f0878cf --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/logging/tracer_multiplexer.go @@ -0,0 +1,51 @@ +// Code generated by generate_multiplexer.go; DO NOT EDIT. + +package logging + +import "net" + +func NewMultiplexedTracer(tracers ...*Tracer) *Tracer { + if len(tracers) == 0 { + return nil + } + if len(tracers) == 1 { + return tracers[0] + } + return &Tracer{ + SentPacket: func(dest net.Addr, hdr *Header, size ByteCount, frames []Frame) { + for _, t := range tracers { + if t.SentPacket != nil { + t.SentPacket(dest, hdr, size, frames) + } + } + }, + SentVersionNegotiationPacket: func(dest net.Addr, destConnID ArbitraryLenConnectionID, srcConnID ArbitraryLenConnectionID, versions []Version) { + for _, t := range tracers { + if t.SentVersionNegotiationPacket != nil { + t.SentVersionNegotiationPacket(dest, destConnID, srcConnID, versions) + } + } + }, + DroppedPacket: func(addr net.Addr, packetType PacketType, size ByteCount, reason PacketDropReason) { + for _, t := range tracers { + if t.DroppedPacket != nil { + t.DroppedPacket(addr, packetType, size, reason) + } + } + }, + Debug: func(name string, msg string) { + for _, t := range tracers { + if t.Debug != nil { + t.Debug(name, msg) + } + } + }, + Close: func() { + for _, t := range tracers { + if t.Close != nil { + t.Close() + } + } + }, + } +} diff --git a/vendor/github.com/quic-go/quic-go/logging/types.go b/vendor/github.com/quic-go/quic-go/logging/types.go new file mode 100644 index 0000000..65da355 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/logging/types.go @@ -0,0 +1,130 @@ +package logging + +// PacketType is the packet type of a QUIC packet +type PacketType uint8 + +const ( + // PacketTypeInitial is the packet type of an Initial packet + PacketTypeInitial PacketType = iota + // PacketTypeHandshake is the packet type of a Handshake packet + PacketTypeHandshake + // PacketTypeRetry is the packet type of a Retry packet + PacketTypeRetry + // PacketType0RTT is the packet type of a 0-RTT packet + PacketType0RTT + // PacketTypeVersionNegotiation is the packet type of a Version Negotiation packet + PacketTypeVersionNegotiation + // PacketType1RTT is a 1-RTT packet + PacketType1RTT + // PacketTypeStatelessReset is a stateless reset + PacketTypeStatelessReset + // PacketTypeNotDetermined is the packet type when it could not be determined + PacketTypeNotDetermined +) + +type PacketLossReason uint8 + +const ( + // PacketLossReorderingThreshold: when a packet is deemed lost due to reordering threshold + PacketLossReorderingThreshold PacketLossReason = iota + // PacketLossTimeThreshold: when a packet is deemed lost due to time threshold + PacketLossTimeThreshold +) + +type PacketDropReason uint8 + +const ( + // PacketDropKeyUnavailable is used when a packet is dropped because keys are unavailable + PacketDropKeyUnavailable PacketDropReason = iota + // PacketDropUnknownConnectionID is used when a packet is dropped because the connection ID is unknown + PacketDropUnknownConnectionID + // PacketDropHeaderParseError is used when a packet is dropped because header parsing failed + PacketDropHeaderParseError + // PacketDropPayloadDecryptError is used when a packet is dropped because decrypting the payload failed + PacketDropPayloadDecryptError + // PacketDropProtocolViolation is used when a packet is dropped due to a protocol violation + PacketDropProtocolViolation + // PacketDropDOSPrevention is used when a packet is dropped to mitigate a DoS attack + PacketDropDOSPrevention + // PacketDropUnsupportedVersion is used when a packet is dropped because the version is not supported + PacketDropUnsupportedVersion + // PacketDropUnexpectedPacket is used when an unexpected packet is received + PacketDropUnexpectedPacket + // PacketDropUnexpectedSourceConnectionID is used when a packet with an unexpected source connection ID is received + PacketDropUnexpectedSourceConnectionID + // PacketDropUnexpectedVersion is used when a packet with an unexpected version is received + PacketDropUnexpectedVersion + // PacketDropDuplicate is used when a duplicate packet is received + PacketDropDuplicate +) + +// TimerType is the type of the loss detection timer +type TimerType uint8 + +const ( + // TimerTypeACK is the timer type for the early retransmit timer + TimerTypeACK TimerType = iota + 1 + // TimerTypePTO is the timer type for the PTO retransmit timer + TimerTypePTO + // TimerTypePathProbe is the timer type for the path probe retransmit timer + TimerTypePathProbe +) + +// TimeoutReason is the reason why a connection is closed +type TimeoutReason uint8 + +const ( + // TimeoutReasonHandshake is used when the connection is closed due to a handshake timeout + // This reason is not defined in the qlog draft, but very useful for debugging. + TimeoutReasonHandshake TimeoutReason = iota + // TimeoutReasonIdle is used when the connection is closed due to an idle timeout + // This reason is not defined in the qlog draft, but very useful for debugging. + TimeoutReasonIdle +) + +type CongestionState uint8 + +const ( + // CongestionStateSlowStart is the slow start phase of Reno / Cubic + CongestionStateSlowStart CongestionState = iota + // CongestionStateCongestionAvoidance is the slow start phase of Reno / Cubic + CongestionStateCongestionAvoidance + // CongestionStateRecovery is the recovery phase of Reno / Cubic + CongestionStateRecovery + // CongestionStateApplicationLimited means that the congestion controller is application limited + CongestionStateApplicationLimited +) + +// ECNState is the state of the ECN state machine (see Appendix A.4 of RFC 9000) +type ECNState uint8 + +const ( + // ECNStateTesting is the testing state + ECNStateTesting ECNState = 1 + iota + // ECNStateUnknown is the unknown state + ECNStateUnknown + // ECNStateFailed is the failed state + ECNStateFailed + // ECNStateCapable is the capable state + ECNStateCapable +) + +// ECNStateTrigger is a trigger for an ECN state transition. +type ECNStateTrigger uint8 + +const ( + ECNTriggerNoTrigger ECNStateTrigger = iota + // ECNFailedNoECNCounts is emitted when an ACK acknowledges ECN-marked packets, + // but doesn't contain any ECN counts + ECNFailedNoECNCounts + // ECNFailedDecreasedECNCounts is emitted when an ACK frame decreases ECN counts + ECNFailedDecreasedECNCounts + // ECNFailedLostAllTestingPackets is emitted when all ECN testing packets are declared lost + ECNFailedLostAllTestingPackets + // ECNFailedMoreECNCountsThanSent is emitted when an ACK contains more ECN counts than ECN-marked packets were sent + ECNFailedMoreECNCountsThanSent + // ECNFailedTooFewECNCounts is emitted when an ACK contains fewer ECN counts than it acknowledges packets + ECNFailedTooFewECNCounts + // ECNFailedManglingDetected is emitted when the path marks all ECN-marked packets as CE + ECNFailedManglingDetected +) diff --git a/vendor/github.com/quic-go/quic-go/mockgen.go b/vendor/github.com/quic-go/quic-go/mockgen.go new file mode 100644 index 0000000..9e1f62f --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/mockgen.go @@ -0,0 +1,47 @@ +//go:build gomock || generate + +package quic + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_send_conn_test.go github.com/quic-go/quic-go SendConn" +type SendConn = sendConn + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_raw_conn_test.go github.com/quic-go/quic-go RawConn" +type RawConn = rawConn + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_sender_test.go github.com/quic-go/quic-go Sender" +type Sender = sender + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_stream_sender_test.go github.com/quic-go/quic-go StreamSender" +type StreamSender = streamSender + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_stream_control_frame_getter_test.go github.com/quic-go/quic-go StreamControlFrameGetter" +type StreamControlFrameGetter = streamControlFrameGetter + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_stream_frame_getter_test.go github.com/quic-go/quic-go StreamFrameGetter" +type StreamFrameGetter = streamFrameGetter + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_frame_source_test.go github.com/quic-go/quic-go FrameSource" +type FrameSource = frameSource + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_ack_frame_source_test.go github.com/quic-go/quic-go AckFrameSource" +type AckFrameSource = ackFrameSource + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_sealing_manager_test.go github.com/quic-go/quic-go SealingManager" +type SealingManager = sealingManager + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_unpacker_test.go github.com/quic-go/quic-go Unpacker" +type Unpacker = unpacker + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_packer_test.go github.com/quic-go/quic-go Packer" +type Packer = packer + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_mtu_discoverer_test.go github.com/quic-go/quic-go MTUDiscoverer" +type MTUDiscoverer = mtuDiscoverer + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_conn_runner_test.go github.com/quic-go/quic-go ConnRunner" +type ConnRunner = connRunner + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -build_flags=\"-tags=gomock\" -package quic -self_package github.com/quic-go/quic-go -destination mock_packet_handler_test.go github.com/quic-go/quic-go PacketHandler" +type PacketHandler = packetHandler + +//go:generate sh -c "go run go.uber.org/mock/mockgen -typed -package quic -self_package github.com/quic-go/quic-go -self_package github.com/quic-go/quic-go -destination mock_packetconn_test.go net PacketConn" diff --git a/vendor/github.com/quic-go/quic-go/mtu_discoverer.go b/vendor/github.com/quic-go/quic-go/mtu_discoverer.go new file mode 100644 index 0000000..096eba1 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/mtu_discoverer.go @@ -0,0 +1,250 @@ +package quic + +import ( + "time" + + "github.com/quic-go/quic-go/internal/ackhandler" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/internal/wire" + "github.com/quic-go/quic-go/logging" +) + +type mtuDiscoverer interface { + // Start starts the MTU discovery process. + // It's unnecessary to call ShouldSendProbe before that. + Start(now time.Time) + ShouldSendProbe(now time.Time) bool + CurrentSize() protocol.ByteCount + GetPing(now time.Time) (ping ackhandler.Frame, datagramSize protocol.ByteCount) + Reset(now time.Time, start, max protocol.ByteCount) +} + +const ( + // At some point, we have to stop searching for a higher MTU. + // We're happy to send a packet that's 10 bytes smaller than the actual MTU. + maxMTUDiff protocol.ByteCount = 20 + // send a probe packet every mtuProbeDelay RTTs + mtuProbeDelay = 5 + // Once maxLostMTUProbes MTU probe packets larger than a certain size are lost, + // MTU discovery won't probe for larger MTUs than this size. + // The algorithm used here is resilient to packet loss of (maxLostMTUProbes - 1) packets. + maxLostMTUProbes = 3 +) + +// The Path MTU is found by sending a larger packet every now and then. +// If the packet is acknowledged, we conclude that the path supports this larger packet size. +// If the packet is lost, this can mean one of two things: +// 1. The path doesn't support this larger packet size, or +// 2. The packet was lost due to packet loss, independent of its size. +// The algorithm used here is resilient to packet loss of (maxLostMTUProbes - 1) packets. +// For simplicty, the following example use maxLostMTUProbes = 2. +// +// Initialization: +// |------------------------------------------------------------------------------| +// min max +// +// The first MTU probe packet will have size (min+max)/2. +// Assume that this packet is acknowledged. We can now move the min marker, +// and continue the search in the resulting interval. +// +// If 1st probe packet acknowledged: +// |---------------------------------------|--------------------------------------| +// min max +// +// If 1st probe packet lost: +// |---------------------------------------|--------------------------------------| +// min lost[0] max +// +// We can't conclude that the path doesn't support this packet size, since the loss of the probe +// packet could have been unrelated to the packet size. A larger probe packet will be sent later on. +// After a loss, the next probe packet has size (min+lost[0])/2. +// Now assume this probe packet is acknowledged: +// +// 2nd probe packet acknowledged: +// |------------------|--------------------|--------------------------------------| +// min lost[0] max +// +// First of all, we conclude that the path supports at least this MTU. That's progress! +// Second, we probe a bit more aggressively with the next probe packet: +// After an acknowledgement, the next probe packet has size (min+max)/2. +// This means we'll send a packet larger than the first probe packet (which was lost). +// +// If 3rd probe packet acknowledged: +// |-------------------------------------------------|----------------------------| +// min max +// +// We can conclude that the loss of the 1st probe packet was not due to its size, and +// continue searching in a much smaller interval now. +// +// If 3rd probe packet lost: +// |------------------|--------------------|---------|----------------------------| +// min lost[0] max +// +// Since in our example numPTOProbes = 2, and we lost 2 packets smaller than max, we +// conclude that this packet size is not supported on the path, and reduce the maximum +// value of the search interval. +// +// MTU discovery concludes once the interval min and max has been narrowed down to maxMTUDiff. + +type mtuFinder struct { + lastProbeTime time.Time + + rttStats *utils.RTTStats + + inFlight protocol.ByteCount // the size of the probe packet currently in flight. InvalidByteCount if none is in flight + min protocol.ByteCount + + // on initialization, we treat the maximum size as the first "lost" packet + lost [maxLostMTUProbes]protocol.ByteCount + lastProbeWasLost bool + + // The generation is used to ignore ACKs / losses for probe packets sent before a reset. + // Resets happen when the connection is migrated to a new path. + // We're therefore not concerned about overflows of this counter. + generation uint8 + + tracer *logging.ConnectionTracer +} + +var _ mtuDiscoverer = &mtuFinder{} + +func newMTUDiscoverer( + rttStats *utils.RTTStats, + start, max protocol.ByteCount, + tracer *logging.ConnectionTracer, +) *mtuFinder { + f := &mtuFinder{ + inFlight: protocol.InvalidByteCount, + rttStats: rttStats, + tracer: tracer, + } + f.init(start, max) + return f +} + +func (f *mtuFinder) init(start, max protocol.ByteCount) { + f.min = start + for i := range f.lost { + if i == 0 { + f.lost[i] = max + continue + } + f.lost[i] = protocol.InvalidByteCount + } +} + +func (f *mtuFinder) done() bool { + return f.max()-f.min <= maxMTUDiff+1 +} + +func (f *mtuFinder) max() protocol.ByteCount { + for i, v := range f.lost { + if v == protocol.InvalidByteCount { + return f.lost[i-1] + } + } + return f.lost[len(f.lost)-1] +} + +func (f *mtuFinder) Start(now time.Time) { + f.lastProbeTime = now // makes sure the first probe packet is not sent immediately +} + +func (f *mtuFinder) ShouldSendProbe(now time.Time) bool { + if f.lastProbeTime.IsZero() { + return false + } + if f.inFlight != protocol.InvalidByteCount || f.done() { + return false + } + return !now.Before(f.lastProbeTime.Add(mtuProbeDelay * f.rttStats.SmoothedRTT())) +} + +func (f *mtuFinder) GetPing(now time.Time) (ackhandler.Frame, protocol.ByteCount) { + var size protocol.ByteCount + if f.lastProbeWasLost { + size = (f.min + f.lost[0]) / 2 + } else { + size = (f.min + f.max()) / 2 + } + f.lastProbeTime = now + f.inFlight = size + return ackhandler.Frame{ + Frame: &wire.PingFrame{}, + Handler: &mtuFinderAckHandler{mtuFinder: f, generation: f.generation}, + }, size +} + +func (f *mtuFinder) CurrentSize() protocol.ByteCount { + return f.min +} + +func (f *mtuFinder) Reset(now time.Time, start, max protocol.ByteCount) { + f.generation++ + f.lastProbeTime = now + f.lastProbeWasLost = false + f.inFlight = protocol.InvalidByteCount + f.init(start, max) +} + +type mtuFinderAckHandler struct { + *mtuFinder + generation uint8 +} + +var _ ackhandler.FrameHandler = &mtuFinderAckHandler{} + +func (h *mtuFinderAckHandler) OnAcked(wire.Frame) { + if h.generation != h.mtuFinder.generation { + // ACK for probe sent before reset + return + } + size := h.inFlight + if size == protocol.InvalidByteCount { + panic("OnAcked callback called although there's no MTU probe packet in flight") + } + h.inFlight = protocol.InvalidByteCount + h.min = size + h.lastProbeWasLost = false + // remove all values smaller than size from the lost array + var j int + for i, v := range h.lost { + if size < v { + j = i + break + } + } + if j > 0 { + for i := 0; i < len(h.lost); i++ { + if i+j < len(h.lost) { + h.lost[i] = h.lost[i+j] + } else { + h.lost[i] = protocol.InvalidByteCount + } + } + } + if h.tracer != nil && h.tracer.UpdatedMTU != nil { + h.tracer.UpdatedMTU(size, h.done()) + } +} + +func (h *mtuFinderAckHandler) OnLost(wire.Frame) { + if h.generation != h.mtuFinder.generation { + // probe sent before reset received + return + } + size := h.inFlight + if size == protocol.InvalidByteCount { + panic("OnLost callback called although there's no MTU probe packet in flight") + } + h.lastProbeWasLost = true + h.inFlight = protocol.InvalidByteCount + for i, v := range h.lost { + if size < v { + copy(h.lost[i+1:], h.lost[i:]) + h.lost[i] = size + break + } + } +} diff --git a/vendor/github.com/quic-go/quic-go/oss-fuzz.sh b/vendor/github.com/quic-go/quic-go/oss-fuzz.sh new file mode 100644 index 0000000..92a57a2 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/oss-fuzz.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# Install Go manually, since oss-fuzz ships with an outdated Go version. +# See https://github.com/google/oss-fuzz/pull/10643. +export CXX="${CXX} -lresolv" # required by Go 1.20 +wget https://go.dev/dl/go1.23.0.linux-amd64.tar.gz \ + && mkdir temp-go \ + && rm -rf /root/.go/* \ + && tar -C temp-go/ -xzf go1.23.0.linux-amd64.tar.gz \ + && mv temp-go/go/* /root/.go/ \ + && rm -rf temp-go go1.23.0.linux-amd64.tar.gz + +( +# fuzz qpack +compile_go_fuzzer github.com/quic-go/qpack/fuzzing Fuzz qpack_fuzzer +) + +( +# fuzz quic-go +compile_go_fuzzer github.com/quic-go/quic-go/fuzzing/frames Fuzz frame_fuzzer +compile_go_fuzzer github.com/quic-go/quic-go/fuzzing/header Fuzz header_fuzzer +compile_go_fuzzer github.com/quic-go/quic-go/fuzzing/transportparameters Fuzz transportparameter_fuzzer +compile_go_fuzzer github.com/quic-go/quic-go/fuzzing/tokens Fuzz token_fuzzer +compile_go_fuzzer github.com/quic-go/quic-go/fuzzing/handshake Fuzz handshake_fuzzer + +if [ $SANITIZER == "coverage" ]; then + # no need for corpora if coverage + exit 0 +fi + +# generate seed corpora +cd $GOPATH/src/github.com/quic-go/quic-go/ +go generate -x ./fuzzing/... + +zip --quiet -r $OUT/header_fuzzer_seed_corpus.zip fuzzing/header/corpus +zip --quiet -r $OUT/frame_fuzzer_seed_corpus.zip fuzzing/frames/corpus +zip --quiet -r $OUT/transportparameter_fuzzer_seed_corpus.zip fuzzing/transportparameters/corpus +zip --quiet -r $OUT/handshake_fuzzer_seed_corpus.zip fuzzing/handshake/corpus +) + +# for debugging +ls -al $OUT diff --git a/vendor/github.com/quic-go/quic-go/packet_packer.go b/vendor/github.com/quic-go/quic-go/packet_packer.go new file mode 100644 index 0000000..9922853 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/packet_packer.go @@ -0,0 +1,1013 @@ +package quic + +import ( + crand "crypto/rand" + "encoding/binary" + "errors" + "fmt" + "math/rand/v2" + "time" + + "github.com/quic-go/quic-go/internal/ackhandler" + "github.com/quic-go/quic-go/internal/handshake" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/wire" +) + +var errNothingToPack = errors.New("nothing to pack") + +type packer interface { + PackCoalescedPacket(onlyAck bool, maxPacketSize protocol.ByteCount, now time.Time, v protocol.Version) (*coalescedPacket, error) + PackAckOnlyPacket(maxPacketSize protocol.ByteCount, now time.Time, v protocol.Version) (shortHeaderPacket, *packetBuffer, error) + AppendPacket(_ *packetBuffer, maxPacketSize protocol.ByteCount, now time.Time, v protocol.Version) (shortHeaderPacket, error) + PackPTOProbePacket(_ protocol.EncryptionLevel, _ protocol.ByteCount, addPingIfEmpty bool, now time.Time, v protocol.Version) (*coalescedPacket, error) + PackConnectionClose(*qerr.TransportError, protocol.ByteCount, protocol.Version) (*coalescedPacket, error) + PackApplicationClose(*qerr.ApplicationError, protocol.ByteCount, protocol.Version) (*coalescedPacket, error) + PackPathProbePacket(protocol.ConnectionID, []ackhandler.Frame, protocol.Version) (shortHeaderPacket, *packetBuffer, error) + PackMTUProbePacket(ping ackhandler.Frame, size protocol.ByteCount, v protocol.Version) (shortHeaderPacket, *packetBuffer, error) + + SetToken([]byte) +} + +type sealer interface { + handshake.LongHeaderSealer +} + +type payload struct { + streamFrames []ackhandler.StreamFrame + frames []ackhandler.Frame + ack *wire.AckFrame + length protocol.ByteCount +} + +type longHeaderPacket struct { + header *wire.ExtendedHeader + ack *wire.AckFrame + frames []ackhandler.Frame + streamFrames []ackhandler.StreamFrame // only used for 0-RTT packets + + length protocol.ByteCount +} + +type shortHeaderPacket struct { + PacketNumber protocol.PacketNumber + Frames []ackhandler.Frame + StreamFrames []ackhandler.StreamFrame + Ack *wire.AckFrame + Length protocol.ByteCount + IsPathMTUProbePacket bool + IsPathProbePacket bool + + // used for logging + DestConnID protocol.ConnectionID + PacketNumberLen protocol.PacketNumberLen + KeyPhase protocol.KeyPhaseBit +} + +func (p *shortHeaderPacket) IsAckEliciting() bool { return ackhandler.HasAckElicitingFrames(p.Frames) } + +type coalescedPacket struct { + buffer *packetBuffer + longHdrPackets []*longHeaderPacket + shortHdrPacket *shortHeaderPacket +} + +// IsOnlyShortHeaderPacket says if this packet only contains a short header packet (and no long header packets). +func (p *coalescedPacket) IsOnlyShortHeaderPacket() bool { + return len(p.longHdrPackets) == 0 && p.shortHdrPacket != nil +} + +func (p *longHeaderPacket) EncryptionLevel() protocol.EncryptionLevel { + //nolint:exhaustive // Will never be called for Retry packets (and they don't have encrypted data). + switch p.header.Type { + case protocol.PacketTypeInitial: + return protocol.EncryptionInitial + case protocol.PacketTypeHandshake: + return protocol.EncryptionHandshake + case protocol.PacketType0RTT: + return protocol.Encryption0RTT + default: + panic("can't determine encryption level") + } +} + +func (p *longHeaderPacket) IsAckEliciting() bool { return ackhandler.HasAckElicitingFrames(p.frames) } + +type packetNumberManager interface { + PeekPacketNumber(protocol.EncryptionLevel) (protocol.PacketNumber, protocol.PacketNumberLen) + PopPacketNumber(protocol.EncryptionLevel) protocol.PacketNumber +} + +type sealingManager interface { + GetInitialSealer() (handshake.LongHeaderSealer, error) + GetHandshakeSealer() (handshake.LongHeaderSealer, error) + Get0RTTSealer() (handshake.LongHeaderSealer, error) + Get1RTTSealer() (handshake.ShortHeaderSealer, error) +} + +type frameSource interface { + HasData() bool + Append([]ackhandler.Frame, []ackhandler.StreamFrame, protocol.ByteCount, time.Time, protocol.Version) ([]ackhandler.Frame, []ackhandler.StreamFrame, protocol.ByteCount) +} + +type ackFrameSource interface { + GetAckFrame(_ protocol.EncryptionLevel, now time.Time, onlyIfQueued bool) *wire.AckFrame +} + +type packetPacker struct { + srcConnID protocol.ConnectionID + getDestConnID func() protocol.ConnectionID + + perspective protocol.Perspective + cryptoSetup sealingManager + + initialStream *initialCryptoStream + handshakeStream *cryptoStream + + token []byte + + pnManager packetNumberManager + framer frameSource + acks ackFrameSource + datagramQueue *datagramQueue + retransmissionQueue *retransmissionQueue + rand rand.Rand + + numNonAckElicitingAcks int +} + +var _ packer = &packetPacker{} + +func newPacketPacker( + srcConnID protocol.ConnectionID, + getDestConnID func() protocol.ConnectionID, + initialStream *initialCryptoStream, + handshakeStream *cryptoStream, + packetNumberManager packetNumberManager, + retransmissionQueue *retransmissionQueue, + cryptoSetup sealingManager, + framer frameSource, + acks ackFrameSource, + datagramQueue *datagramQueue, + perspective protocol.Perspective, +) *packetPacker { + var b [16]byte + _, _ = crand.Read(b[:]) + + return &packetPacker{ + cryptoSetup: cryptoSetup, + getDestConnID: getDestConnID, + srcConnID: srcConnID, + initialStream: initialStream, + handshakeStream: handshakeStream, + retransmissionQueue: retransmissionQueue, + datagramQueue: datagramQueue, + perspective: perspective, + framer: framer, + acks: acks, + rand: *rand.New(rand.NewPCG(binary.BigEndian.Uint64(b[:8]), binary.BigEndian.Uint64(b[8:]))), + pnManager: packetNumberManager, + } +} + +// PackConnectionClose packs a packet that closes the connection with a transport error. +func (p *packetPacker) PackConnectionClose(e *qerr.TransportError, maxPacketSize protocol.ByteCount, v protocol.Version) (*coalescedPacket, error) { + var reason string + // don't send details of crypto errors + if !e.ErrorCode.IsCryptoError() { + reason = e.ErrorMessage + } + return p.packConnectionClose(false, uint64(e.ErrorCode), e.FrameType, reason, maxPacketSize, v) +} + +// PackApplicationClose packs a packet that closes the connection with an application error. +func (p *packetPacker) PackApplicationClose(e *qerr.ApplicationError, maxPacketSize protocol.ByteCount, v protocol.Version) (*coalescedPacket, error) { + return p.packConnectionClose(true, uint64(e.ErrorCode), 0, e.ErrorMessage, maxPacketSize, v) +} + +func (p *packetPacker) packConnectionClose( + isApplicationError bool, + errorCode uint64, + frameType uint64, + reason string, + maxPacketSize protocol.ByteCount, + v protocol.Version, +) (*coalescedPacket, error) { + var sealers [4]sealer + var hdrs [3]*wire.ExtendedHeader + var payloads [4]payload + var size protocol.ByteCount + var connID protocol.ConnectionID + var oneRTTPacketNumber protocol.PacketNumber + var oneRTTPacketNumberLen protocol.PacketNumberLen + var keyPhase protocol.KeyPhaseBit // only set for 1-RTT + var numLongHdrPackets uint8 + encLevels := [4]protocol.EncryptionLevel{protocol.EncryptionInitial, protocol.EncryptionHandshake, protocol.Encryption0RTT, protocol.Encryption1RTT} + for i, encLevel := range encLevels { + if p.perspective == protocol.PerspectiveServer && encLevel == protocol.Encryption0RTT { + continue + } + ccf := &wire.ConnectionCloseFrame{ + IsApplicationError: isApplicationError, + ErrorCode: errorCode, + FrameType: frameType, + ReasonPhrase: reason, + } + // don't send application errors in Initial or Handshake packets + if isApplicationError && (encLevel == protocol.EncryptionInitial || encLevel == protocol.EncryptionHandshake) { + ccf.IsApplicationError = false + ccf.ErrorCode = uint64(qerr.ApplicationErrorErrorCode) + ccf.ReasonPhrase = "" + } + pl := payload{ + frames: []ackhandler.Frame{{Frame: ccf}}, + length: ccf.Length(v), + } + + var sealer sealer + var err error + switch encLevel { + case protocol.EncryptionInitial: + sealer, err = p.cryptoSetup.GetInitialSealer() + case protocol.EncryptionHandshake: + sealer, err = p.cryptoSetup.GetHandshakeSealer() + case protocol.Encryption0RTT: + sealer, err = p.cryptoSetup.Get0RTTSealer() + case protocol.Encryption1RTT: + var s handshake.ShortHeaderSealer + s, err = p.cryptoSetup.Get1RTTSealer() + if err == nil { + keyPhase = s.KeyPhase() + } + sealer = s + } + if err == handshake.ErrKeysNotYetAvailable || err == handshake.ErrKeysDropped { + continue + } + if err != nil { + return nil, err + } + sealers[i] = sealer + var hdr *wire.ExtendedHeader + if encLevel == protocol.Encryption1RTT { + connID = p.getDestConnID() + oneRTTPacketNumber, oneRTTPacketNumberLen = p.pnManager.PeekPacketNumber(protocol.Encryption1RTT) + size += p.shortHeaderPacketLength(connID, oneRTTPacketNumberLen, pl) + } else { + hdr = p.getLongHeader(encLevel, v) + hdrs[i] = hdr + size += p.longHeaderPacketLength(hdr, pl, v) + protocol.ByteCount(sealer.Overhead()) + numLongHdrPackets++ + } + payloads[i] = pl + } + buffer := getPacketBuffer() + packet := &coalescedPacket{ + buffer: buffer, + longHdrPackets: make([]*longHeaderPacket, 0, numLongHdrPackets), + } + for i, encLevel := range encLevels { + if sealers[i] == nil { + continue + } + if encLevel == protocol.Encryption1RTT { + shp, err := p.appendShortHeaderPacket(buffer, connID, oneRTTPacketNumber, oneRTTPacketNumberLen, keyPhase, payloads[i], 0, maxPacketSize, sealers[i], false, v) + if err != nil { + return nil, err + } + packet.shortHdrPacket = &shp + } else { + var paddingLen protocol.ByteCount + if encLevel == protocol.EncryptionInitial { + paddingLen = p.initialPaddingLen(payloads[i].frames, size, maxPacketSize) + } + longHdrPacket, err := p.appendLongHeaderPacket(buffer, hdrs[i], payloads[i], paddingLen, encLevel, sealers[i], v) + if err != nil { + return nil, err + } + packet.longHdrPackets = append(packet.longHdrPackets, longHdrPacket) + } + } + return packet, nil +} + +// longHeaderPacketLength calculates the length of a serialized long header packet. +// It takes into account that packets that have a tiny payload need to be padded, +// such that len(payload) + packet number len >= 4 + AEAD overhead +func (p *packetPacker) longHeaderPacketLength(hdr *wire.ExtendedHeader, pl payload, v protocol.Version) protocol.ByteCount { + var paddingLen protocol.ByteCount + pnLen := protocol.ByteCount(hdr.PacketNumberLen) + if pl.length < 4-pnLen { + paddingLen = 4 - pnLen - pl.length + } + return hdr.GetLength(v) + pl.length + paddingLen +} + +// shortHeaderPacketLength calculates the length of a serialized short header packet. +// It takes into account that packets that have a tiny payload need to be padded, +// such that len(payload) + packet number len >= 4 + AEAD overhead +func (p *packetPacker) shortHeaderPacketLength(connID protocol.ConnectionID, pnLen protocol.PacketNumberLen, pl payload) protocol.ByteCount { + var paddingLen protocol.ByteCount + if pl.length < 4-protocol.ByteCount(pnLen) { + paddingLen = 4 - protocol.ByteCount(pnLen) - pl.length + } + return wire.ShortHeaderLen(connID, pnLen) + pl.length + paddingLen +} + +// size is the expected size of the packet, if no padding was applied. +func (p *packetPacker) initialPaddingLen(frames []ackhandler.Frame, currentSize, maxPacketSize protocol.ByteCount) protocol.ByteCount { + // For the server, only ack-eliciting Initial packets need to be padded. + if p.perspective == protocol.PerspectiveServer && !ackhandler.HasAckElicitingFrames(frames) { + return 0 + } + if currentSize >= maxPacketSize { + return 0 + } + return maxPacketSize - currentSize +} + +// PackCoalescedPacket packs a new packet. +// It packs an Initial / Handshake if there is data to send in these packet number spaces. +// It should only be called before the handshake is confirmed. +func (p *packetPacker) PackCoalescedPacket(onlyAck bool, maxSize protocol.ByteCount, now time.Time, v protocol.Version) (*coalescedPacket, error) { + var ( + initialHdr, handshakeHdr, zeroRTTHdr *wire.ExtendedHeader + initialPayload, handshakePayload, zeroRTTPayload, oneRTTPayload payload + oneRTTPacketNumber protocol.PacketNumber + oneRTTPacketNumberLen protocol.PacketNumberLen + ) + // Try packing an Initial packet. + initialSealer, err := p.cryptoSetup.GetInitialSealer() + if err != nil && err != handshake.ErrKeysDropped { + return nil, err + } + var size protocol.ByteCount + if initialSealer != nil { + initialHdr, initialPayload = p.maybeGetCryptoPacket( + maxSize-protocol.ByteCount(initialSealer.Overhead()), + protocol.EncryptionInitial, + now, + false, + onlyAck, + true, + v, + ) + if initialPayload.length > 0 { + size += p.longHeaderPacketLength(initialHdr, initialPayload, v) + protocol.ByteCount(initialSealer.Overhead()) + } + } + + // Add a Handshake packet. + var handshakeSealer sealer + if (onlyAck && size == 0) || (!onlyAck && size < maxSize-protocol.MinCoalescedPacketSize) { + var err error + handshakeSealer, err = p.cryptoSetup.GetHandshakeSealer() + if err != nil && err != handshake.ErrKeysDropped && err != handshake.ErrKeysNotYetAvailable { + return nil, err + } + if handshakeSealer != nil { + handshakeHdr, handshakePayload = p.maybeGetCryptoPacket( + maxSize-size-protocol.ByteCount(handshakeSealer.Overhead()), + protocol.EncryptionHandshake, + now, + false, + onlyAck, + size == 0, + v, + ) + if handshakePayload.length > 0 { + s := p.longHeaderPacketLength(handshakeHdr, handshakePayload, v) + protocol.ByteCount(handshakeSealer.Overhead()) + size += s + } + } + } + + // Add a 0-RTT / 1-RTT packet. + var zeroRTTSealer sealer + var oneRTTSealer handshake.ShortHeaderSealer + var connID protocol.ConnectionID + var kp protocol.KeyPhaseBit + if (onlyAck && size == 0) || (!onlyAck && size < maxSize-protocol.MinCoalescedPacketSize) { + var err error + oneRTTSealer, err = p.cryptoSetup.Get1RTTSealer() + if err != nil && err != handshake.ErrKeysDropped && err != handshake.ErrKeysNotYetAvailable { + return nil, err + } + if err == nil { // 1-RTT + kp = oneRTTSealer.KeyPhase() + connID = p.getDestConnID() + oneRTTPacketNumber, oneRTTPacketNumberLen = p.pnManager.PeekPacketNumber(protocol.Encryption1RTT) + hdrLen := wire.ShortHeaderLen(connID, oneRTTPacketNumberLen) + oneRTTPayload = p.maybeGetShortHeaderPacket(oneRTTSealer, hdrLen, maxSize-size, onlyAck, size == 0, now, v) + if oneRTTPayload.length > 0 { + size += p.shortHeaderPacketLength(connID, oneRTTPacketNumberLen, oneRTTPayload) + protocol.ByteCount(oneRTTSealer.Overhead()) + } + } else if p.perspective == protocol.PerspectiveClient && !onlyAck { // 0-RTT packets can't contain ACK frames + var err error + zeroRTTSealer, err = p.cryptoSetup.Get0RTTSealer() + if err != nil && err != handshake.ErrKeysDropped && err != handshake.ErrKeysNotYetAvailable { + return nil, err + } + if zeroRTTSealer != nil { + zeroRTTHdr, zeroRTTPayload = p.maybeGetAppDataPacketFor0RTT(zeroRTTSealer, maxSize-size, now, v) + if zeroRTTPayload.length > 0 { + size += p.longHeaderPacketLength(zeroRTTHdr, zeroRTTPayload, v) + protocol.ByteCount(zeroRTTSealer.Overhead()) + } + } + } + } + + if initialPayload.length == 0 && handshakePayload.length == 0 && zeroRTTPayload.length == 0 && oneRTTPayload.length == 0 { + return nil, nil + } + + buffer := getPacketBuffer() + packet := &coalescedPacket{ + buffer: buffer, + longHdrPackets: make([]*longHeaderPacket, 0, 3), + } + if initialPayload.length > 0 { + padding := p.initialPaddingLen(initialPayload.frames, size, maxSize) + cont, err := p.appendLongHeaderPacket(buffer, initialHdr, initialPayload, padding, protocol.EncryptionInitial, initialSealer, v) + if err != nil { + return nil, err + } + packet.longHdrPackets = append(packet.longHdrPackets, cont) + } + if handshakePayload.length > 0 { + cont, err := p.appendLongHeaderPacket(buffer, handshakeHdr, handshakePayload, 0, protocol.EncryptionHandshake, handshakeSealer, v) + if err != nil { + return nil, err + } + packet.longHdrPackets = append(packet.longHdrPackets, cont) + } + if zeroRTTPayload.length > 0 { + longHdrPacket, err := p.appendLongHeaderPacket(buffer, zeroRTTHdr, zeroRTTPayload, 0, protocol.Encryption0RTT, zeroRTTSealer, v) + if err != nil { + return nil, err + } + packet.longHdrPackets = append(packet.longHdrPackets, longHdrPacket) + } else if oneRTTPayload.length > 0 { + shp, err := p.appendShortHeaderPacket(buffer, connID, oneRTTPacketNumber, oneRTTPacketNumberLen, kp, oneRTTPayload, 0, maxSize, oneRTTSealer, false, v) + if err != nil { + return nil, err + } + packet.shortHdrPacket = &shp + } + return packet, nil +} + +// PackAckOnlyPacket packs a packet containing only an ACK in the application data packet number space. +// It should be called after the handshake is confirmed. +func (p *packetPacker) PackAckOnlyPacket(maxSize protocol.ByteCount, now time.Time, v protocol.Version) (shortHeaderPacket, *packetBuffer, error) { + buf := getPacketBuffer() + packet, err := p.appendPacket(buf, true, maxSize, now, v) + return packet, buf, err +} + +// AppendPacket packs a packet in the application data packet number space. +// It should be called after the handshake is confirmed. +func (p *packetPacker) AppendPacket(buf *packetBuffer, maxSize protocol.ByteCount, now time.Time, v protocol.Version) (shortHeaderPacket, error) { + return p.appendPacket(buf, false, maxSize, now, v) +} + +func (p *packetPacker) appendPacket( + buf *packetBuffer, + onlyAck bool, + maxPacketSize protocol.ByteCount, + now time.Time, + v protocol.Version, +) (shortHeaderPacket, error) { + sealer, err := p.cryptoSetup.Get1RTTSealer() + if err != nil { + return shortHeaderPacket{}, err + } + pn, pnLen := p.pnManager.PeekPacketNumber(protocol.Encryption1RTT) + connID := p.getDestConnID() + hdrLen := wire.ShortHeaderLen(connID, pnLen) + pl := p.maybeGetShortHeaderPacket(sealer, hdrLen, maxPacketSize, onlyAck, true, now, v) + if pl.length == 0 { + return shortHeaderPacket{}, errNothingToPack + } + kp := sealer.KeyPhase() + + return p.appendShortHeaderPacket(buf, connID, pn, pnLen, kp, pl, 0, maxPacketSize, sealer, false, v) +} + +func (p *packetPacker) maybeGetCryptoPacket( + maxPacketSize protocol.ByteCount, + encLevel protocol.EncryptionLevel, + now time.Time, + addPingIfEmpty bool, + onlyAck, ackAllowed bool, + v protocol.Version, +) (*wire.ExtendedHeader, payload) { + if onlyAck { + if ack := p.acks.GetAckFrame(encLevel, now, true); ack != nil { + return p.getLongHeader(encLevel, v), payload{ + ack: ack, + length: ack.Length(v), + } + } + return nil, payload{} + } + + var hasCryptoData func() bool + var popCryptoFrame func(maxLen protocol.ByteCount) *wire.CryptoFrame + //nolint:exhaustive // Initial and Handshake are the only two encryption levels here. + switch encLevel { + case protocol.EncryptionInitial: + hasCryptoData = p.initialStream.HasData + popCryptoFrame = p.initialStream.PopCryptoFrame + case protocol.EncryptionHandshake: + hasCryptoData = p.handshakeStream.HasData + popCryptoFrame = p.handshakeStream.PopCryptoFrame + } + handler := p.retransmissionQueue.AckHandler(encLevel) + hasRetransmission := p.retransmissionQueue.HasData(encLevel) + + var ack *wire.AckFrame + if ackAllowed { + ack = p.acks.GetAckFrame(encLevel, now, !hasRetransmission && !hasCryptoData()) + } + var pl payload + if !hasCryptoData() && !hasRetransmission && ack == nil { + if !addPingIfEmpty { + // nothing to send + return nil, payload{} + } + ping := &wire.PingFrame{} + pl.frames = append(pl.frames, ackhandler.Frame{Frame: ping, Handler: emptyHandler{}}) + pl.length += ping.Length(v) + } + + if ack != nil { + pl.ack = ack + pl.length = ack.Length(v) + maxPacketSize -= pl.length + } + hdr := p.getLongHeader(encLevel, v) + maxPacketSize -= hdr.GetLength(v) + if hasRetransmission { + for { + frame := p.retransmissionQueue.GetFrame(encLevel, maxPacketSize, v) + if frame == nil { + break + } + pl.frames = append(pl.frames, ackhandler.Frame{ + Frame: frame, + Handler: p.retransmissionQueue.AckHandler(encLevel), + }) + frameLen := frame.Length(v) + pl.length += frameLen + maxPacketSize -= frameLen + } + return hdr, pl + } else { + for hasCryptoData() { + cf := popCryptoFrame(maxPacketSize) + if cf == nil { + break + } + pl.frames = append(pl.frames, ackhandler.Frame{Frame: cf, Handler: handler}) + pl.length += cf.Length(v) + maxPacketSize -= cf.Length(v) + } + } + return hdr, pl +} + +func (p *packetPacker) maybeGetAppDataPacketFor0RTT(sealer sealer, maxSize protocol.ByteCount, now time.Time, v protocol.Version) (*wire.ExtendedHeader, payload) { + if p.perspective != protocol.PerspectiveClient { + return nil, payload{} + } + + hdr := p.getLongHeader(protocol.Encryption0RTT, v) + maxPayloadSize := maxSize - hdr.GetLength(v) - protocol.ByteCount(sealer.Overhead()) + return hdr, p.maybeGetAppDataPacket(maxPayloadSize, false, false, now, v) +} + +func (p *packetPacker) maybeGetShortHeaderPacket( + sealer handshake.ShortHeaderSealer, + hdrLen, maxPacketSize protocol.ByteCount, + onlyAck, ackAllowed bool, + now time.Time, + v protocol.Version, +) payload { + maxPayloadSize := maxPacketSize - hdrLen - protocol.ByteCount(sealer.Overhead()) + return p.maybeGetAppDataPacket(maxPayloadSize, onlyAck, ackAllowed, now, v) +} + +func (p *packetPacker) maybeGetAppDataPacket( + maxPayloadSize protocol.ByteCount, + onlyAck, ackAllowed bool, + now time.Time, + v protocol.Version, +) payload { + pl := p.composeNextPacket(maxPayloadSize, onlyAck, ackAllowed, now, v) + + // check if we have anything to send + if len(pl.frames) == 0 && len(pl.streamFrames) == 0 { + if pl.ack == nil { + return payload{} + } + // the packet only contains an ACK + if p.numNonAckElicitingAcks >= protocol.MaxNonAckElicitingAcks { + ping := &wire.PingFrame{} + pl.frames = append(pl.frames, ackhandler.Frame{Frame: ping}) + pl.length += ping.Length(v) + p.numNonAckElicitingAcks = 0 + } else { + p.numNonAckElicitingAcks++ + } + } else { + p.numNonAckElicitingAcks = 0 + } + return pl +} + +func (p *packetPacker) composeNextPacket( + maxPayloadSize protocol.ByteCount, + onlyAck, ackAllowed bool, + now time.Time, + v protocol.Version, +) payload { + if onlyAck { + if ack := p.acks.GetAckFrame(protocol.Encryption1RTT, now, true); ack != nil { + return payload{ack: ack, length: ack.Length(v)} + } + return payload{} + } + + hasData := p.framer.HasData() + hasRetransmission := p.retransmissionQueue.HasData(protocol.Encryption1RTT) + + var hasAck bool + var pl payload + if ackAllowed { + if ack := p.acks.GetAckFrame(protocol.Encryption1RTT, now, !hasRetransmission && !hasData); ack != nil { + pl.ack = ack + pl.length += ack.Length(v) + hasAck = true + } + } + + if p.datagramQueue != nil { + if f := p.datagramQueue.Peek(); f != nil { + size := f.Length(v) + if size <= maxPayloadSize-pl.length { // DATAGRAM frame fits + pl.frames = append(pl.frames, ackhandler.Frame{Frame: f}) + pl.length += size + p.datagramQueue.Pop() + } else if !hasAck { + // The DATAGRAM frame doesn't fit, and the packet doesn't contain an ACK. + // Discard this frame. There's no point in retrying this in the next packet, + // as it's unlikely that the available packet size will increase. + p.datagramQueue.Pop() + } + // If the DATAGRAM frame was too large and the packet contained an ACK, we'll try to send it out later. + } + } + + if hasAck && !hasData && !hasRetransmission { + return pl + } + + if hasRetransmission { + for { + remainingLen := maxPayloadSize - pl.length + if remainingLen < protocol.MinStreamFrameSize { + break + } + f := p.retransmissionQueue.GetFrame(protocol.Encryption1RTT, remainingLen, v) + if f == nil { + break + } + pl.frames = append(pl.frames, ackhandler.Frame{Frame: f, Handler: p.retransmissionQueue.AckHandler(protocol.Encryption1RTT)}) + pl.length += f.Length(v) + } + } + + if hasData { + var lengthAdded protocol.ByteCount + startLen := len(pl.frames) + pl.frames, pl.streamFrames, lengthAdded = p.framer.Append(pl.frames, pl.streamFrames, maxPayloadSize-pl.length, now, v) + pl.length += lengthAdded + // add handlers for the control frames that were added + for i := startLen; i < len(pl.frames); i++ { + if pl.frames[i].Handler != nil { + continue + } + switch pl.frames[i].Frame.(type) { + case *wire.PathChallengeFrame, *wire.PathResponseFrame: + // Path probing is currently not supported, therefore we don't need to set the OnAcked callback yet. + // PATH_CHALLENGE and PATH_RESPONSE are never retransmitted. + default: + // we might be packing a 0-RTT packet, but we need to use the 1-RTT ack handler anyway + pl.frames[i].Handler = p.retransmissionQueue.AckHandler(protocol.Encryption1RTT) + } + } + } + return pl +} + +func (p *packetPacker) PackPTOProbePacket( + encLevel protocol.EncryptionLevel, + maxPacketSize protocol.ByteCount, + addPingIfEmpty bool, + now time.Time, + v protocol.Version, +) (*coalescedPacket, error) { + if encLevel == protocol.Encryption1RTT { + return p.packPTOProbePacket1RTT(maxPacketSize, addPingIfEmpty, now, v) + } + + var sealer handshake.LongHeaderSealer + //nolint:exhaustive // Probe packets are never sent for 0-RTT. + switch encLevel { + case protocol.EncryptionInitial: + var err error + sealer, err = p.cryptoSetup.GetInitialSealer() + if err != nil { + return nil, err + } + case protocol.EncryptionHandshake: + var err error + sealer, err = p.cryptoSetup.GetHandshakeSealer() + if err != nil { + return nil, err + } + default: + panic("unknown encryption level") + } + hdr, pl := p.maybeGetCryptoPacket( + maxPacketSize-protocol.ByteCount(sealer.Overhead()), + encLevel, + now, + addPingIfEmpty, + false, + true, + v, + ) + if pl.length == 0 { + return nil, nil + } + buffer := getPacketBuffer() + packet := &coalescedPacket{buffer: buffer} + size := p.longHeaderPacketLength(hdr, pl, v) + protocol.ByteCount(sealer.Overhead()) + var padding protocol.ByteCount + if encLevel == protocol.EncryptionInitial { + padding = p.initialPaddingLen(pl.frames, size, maxPacketSize) + } + + longHdrPacket, err := p.appendLongHeaderPacket(buffer, hdr, pl, padding, encLevel, sealer, v) + if err != nil { + return nil, err + } + packet.longHdrPackets = []*longHeaderPacket{longHdrPacket} + return packet, nil +} + +func (p *packetPacker) packPTOProbePacket1RTT(maxPacketSize protocol.ByteCount, addPingIfEmpty bool, now time.Time, v protocol.Version) (*coalescedPacket, error) { + s, err := p.cryptoSetup.Get1RTTSealer() + if err != nil { + return nil, err + } + kp := s.KeyPhase() + connID := p.getDestConnID() + pn, pnLen := p.pnManager.PeekPacketNumber(protocol.Encryption1RTT) + hdrLen := wire.ShortHeaderLen(connID, pnLen) + pl := p.maybeGetAppDataPacket(maxPacketSize-protocol.ByteCount(s.Overhead())-hdrLen, false, true, now, v) + if pl.length == 0 { + if !addPingIfEmpty { + return nil, nil + } + ping := &wire.PingFrame{} + pl.frames = append(pl.frames, ackhandler.Frame{Frame: ping, Handler: emptyHandler{}}) + pl.length += ping.Length(v) + } + buffer := getPacketBuffer() + packet := &coalescedPacket{buffer: buffer} + shp, err := p.appendShortHeaderPacket(buffer, connID, pn, pnLen, kp, pl, 0, maxPacketSize, s, false, v) + if err != nil { + return nil, err + } + packet.shortHdrPacket = &shp + return packet, nil +} + +func (p *packetPacker) PackMTUProbePacket(ping ackhandler.Frame, size protocol.ByteCount, v protocol.Version) (shortHeaderPacket, *packetBuffer, error) { + pl := payload{ + frames: []ackhandler.Frame{ping}, + length: ping.Frame.Length(v), + } + buffer := getPacketBuffer() + s, err := p.cryptoSetup.Get1RTTSealer() + if err != nil { + return shortHeaderPacket{}, nil, err + } + connID := p.getDestConnID() + pn, pnLen := p.pnManager.PeekPacketNumber(protocol.Encryption1RTT) + padding := size - p.shortHeaderPacketLength(connID, pnLen, pl) - protocol.ByteCount(s.Overhead()) + kp := s.KeyPhase() + packet, err := p.appendShortHeaderPacket(buffer, connID, pn, pnLen, kp, pl, padding, size, s, true, v) + return packet, buffer, err +} + +func (p *packetPacker) PackPathProbePacket(connID protocol.ConnectionID, frames []ackhandler.Frame, v protocol.Version) (shortHeaderPacket, *packetBuffer, error) { + pn, pnLen := p.pnManager.PeekPacketNumber(protocol.Encryption1RTT) + buf := getPacketBuffer() + s, err := p.cryptoSetup.Get1RTTSealer() + if err != nil { + return shortHeaderPacket{}, nil, err + } + var l protocol.ByteCount + for _, f := range frames { + l += f.Frame.Length(v) + } + payload := payload{ + frames: frames, + length: l, + } + padding := protocol.MinInitialPacketSize - p.shortHeaderPacketLength(connID, pnLen, payload) - protocol.ByteCount(s.Overhead()) + packet, err := p.appendShortHeaderPacket(buf, connID, pn, pnLen, s.KeyPhase(), payload, padding, protocol.MinInitialPacketSize, s, false, v) + if err != nil { + return shortHeaderPacket{}, nil, err + } + packet.IsPathProbePacket = true + return packet, buf, err +} + +func (p *packetPacker) getLongHeader(encLevel protocol.EncryptionLevel, v protocol.Version) *wire.ExtendedHeader { + pn, pnLen := p.pnManager.PeekPacketNumber(encLevel) + hdr := &wire.ExtendedHeader{ + PacketNumber: pn, + PacketNumberLen: pnLen, + } + hdr.Version = v + hdr.SrcConnectionID = p.srcConnID + hdr.DestConnectionID = p.getDestConnID() + + //nolint:exhaustive // 1-RTT packets are not long header packets. + switch encLevel { + case protocol.EncryptionInitial: + hdr.Type = protocol.PacketTypeInitial + hdr.Token = p.token + case protocol.EncryptionHandshake: + hdr.Type = protocol.PacketTypeHandshake + case protocol.Encryption0RTT: + hdr.Type = protocol.PacketType0RTT + } + return hdr +} + +func (p *packetPacker) appendLongHeaderPacket(buffer *packetBuffer, header *wire.ExtendedHeader, pl payload, padding protocol.ByteCount, encLevel protocol.EncryptionLevel, sealer sealer, v protocol.Version) (*longHeaderPacket, error) { + var paddingLen protocol.ByteCount + pnLen := protocol.ByteCount(header.PacketNumberLen) + if pl.length < 4-pnLen { + paddingLen = 4 - pnLen - pl.length + } + paddingLen += padding + header.Length = pnLen + protocol.ByteCount(sealer.Overhead()) + pl.length + paddingLen + + startLen := len(buffer.Data) + raw := buffer.Data[startLen:] + raw, err := header.Append(raw, v) + if err != nil { + return nil, err + } + payloadOffset := protocol.ByteCount(len(raw)) + + raw, err = p.appendPacketPayload(raw, pl, paddingLen, v) + if err != nil { + return nil, err + } + raw = p.encryptPacket(raw, sealer, header.PacketNumber, payloadOffset, pnLen) + buffer.Data = buffer.Data[:len(buffer.Data)+len(raw)] + + if pn := p.pnManager.PopPacketNumber(encLevel); pn != header.PacketNumber { + return nil, fmt.Errorf("packetPacker BUG: Peeked and Popped packet numbers do not match: expected %d, got %d", pn, header.PacketNumber) + } + return &longHeaderPacket{ + header: header, + ack: pl.ack, + frames: pl.frames, + streamFrames: pl.streamFrames, + length: protocol.ByteCount(len(raw)), + }, nil +} + +func (p *packetPacker) appendShortHeaderPacket( + buffer *packetBuffer, + connID protocol.ConnectionID, + pn protocol.PacketNumber, + pnLen protocol.PacketNumberLen, + kp protocol.KeyPhaseBit, + pl payload, + padding, maxPacketSize protocol.ByteCount, + sealer sealer, + isMTUProbePacket bool, + v protocol.Version, +) (shortHeaderPacket, error) { + var paddingLen protocol.ByteCount + if pl.length < 4-protocol.ByteCount(pnLen) { + paddingLen = 4 - protocol.ByteCount(pnLen) - pl.length + } + paddingLen += padding + + startLen := len(buffer.Data) + raw := buffer.Data[startLen:] + raw, err := wire.AppendShortHeader(raw, connID, pn, pnLen, kp) + if err != nil { + return shortHeaderPacket{}, err + } + payloadOffset := protocol.ByteCount(len(raw)) + + raw, err = p.appendPacketPayload(raw, pl, paddingLen, v) + if err != nil { + return shortHeaderPacket{}, err + } + if !isMTUProbePacket { + if size := protocol.ByteCount(len(raw) + sealer.Overhead()); size > maxPacketSize { + return shortHeaderPacket{}, fmt.Errorf("PacketPacker BUG: packet too large (%d bytes, allowed %d bytes)", size, maxPacketSize) + } + } + raw = p.encryptPacket(raw, sealer, pn, payloadOffset, protocol.ByteCount(pnLen)) + buffer.Data = buffer.Data[:len(buffer.Data)+len(raw)] + + if newPN := p.pnManager.PopPacketNumber(protocol.Encryption1RTT); newPN != pn { + return shortHeaderPacket{}, fmt.Errorf("packetPacker BUG: Peeked and Popped packet numbers do not match: expected %d, got %d", pn, newPN) + } + return shortHeaderPacket{ + PacketNumber: pn, + PacketNumberLen: pnLen, + KeyPhase: kp, + StreamFrames: pl.streamFrames, + Frames: pl.frames, + Ack: pl.ack, + Length: protocol.ByteCount(len(raw)), + DestConnID: connID, + IsPathMTUProbePacket: isMTUProbePacket, + }, nil +} + +// appendPacketPayload serializes the payload of a packet into the raw byte slice. +// It modifies the order of payload.frames. +func (p *packetPacker) appendPacketPayload(raw []byte, pl payload, paddingLen protocol.ByteCount, v protocol.Version) ([]byte, error) { + payloadOffset := len(raw) + if pl.ack != nil { + var err error + raw, err = pl.ack.Append(raw, v) + if err != nil { + return nil, err + } + } + if paddingLen > 0 { + raw = append(raw, make([]byte, paddingLen)...) + } + // Randomize the order of the control frames. + // This makes sure that the receiver doesn't rely on the order in which frames are packed. + if len(pl.frames) > 1 { + p.rand.Shuffle(len(pl.frames), func(i, j int) { pl.frames[i], pl.frames[j] = pl.frames[j], pl.frames[i] }) + } + for _, f := range pl.frames { + var err error + raw, err = f.Frame.Append(raw, v) + if err != nil { + return nil, err + } + } + for _, f := range pl.streamFrames { + var err error + raw, err = f.Frame.Append(raw, v) + if err != nil { + return nil, err + } + } + + if payloadSize := protocol.ByteCount(len(raw)-payloadOffset) - paddingLen; payloadSize != pl.length { + return nil, fmt.Errorf("PacketPacker BUG: payload size inconsistent (expected %d, got %d bytes)", pl.length, payloadSize) + } + return raw, nil +} + +func (p *packetPacker) encryptPacket(raw []byte, sealer sealer, pn protocol.PacketNumber, payloadOffset, pnLen protocol.ByteCount) []byte { + _ = sealer.Seal(raw[payloadOffset:payloadOffset], raw[payloadOffset:], pn, raw[:payloadOffset]) + raw = raw[:len(raw)+sealer.Overhead()] + // apply header protection + pnOffset := payloadOffset - pnLen + sealer.EncryptHeader(raw[pnOffset+4:pnOffset+4+16], &raw[0], raw[pnOffset:payloadOffset]) + return raw +} + +func (p *packetPacker) SetToken(token []byte) { + p.token = token +} + +type emptyHandler struct{} + +var _ ackhandler.FrameHandler = emptyHandler{} + +func (emptyHandler) OnAcked(wire.Frame) {} +func (emptyHandler) OnLost(wire.Frame) {} diff --git a/vendor/github.com/quic-go/quic-go/packet_unpacker.go b/vendor/github.com/quic-go/quic-go/packet_unpacker.go new file mode 100644 index 0000000..2f607fb --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/packet_unpacker.go @@ -0,0 +1,222 @@ +package quic + +import ( + "fmt" + "time" + + "github.com/quic-go/quic-go/internal/handshake" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/wire" +) + +type headerDecryptor interface { + DecryptHeader(sample []byte, firstByte *byte, pnBytes []byte) +} + +type headerParseError struct { + err error +} + +func (e *headerParseError) Unwrap() error { + return e.err +} + +func (e *headerParseError) Error() string { + return e.err.Error() +} + +type unpackedPacket struct { + hdr *wire.ExtendedHeader + encryptionLevel protocol.EncryptionLevel + data []byte +} + +// The packetUnpacker unpacks QUIC packets. +type packetUnpacker struct { + cs handshake.CryptoSetup + + shortHdrConnIDLen int +} + +var _ unpacker = &packetUnpacker{} + +func newPacketUnpacker(cs handshake.CryptoSetup, shortHdrConnIDLen int) *packetUnpacker { + return &packetUnpacker{ + cs: cs, + shortHdrConnIDLen: shortHdrConnIDLen, + } +} + +// UnpackLongHeader unpacks a Long Header packet. +// If the reserved bits are invalid, the error is wire.ErrInvalidReservedBits. +// If any other error occurred when parsing the header, the error is of type headerParseError. +// If decrypting the payload fails for any reason, the error is the error returned by the AEAD. +func (u *packetUnpacker) UnpackLongHeader(hdr *wire.Header, data []byte) (*unpackedPacket, error) { + var encLevel protocol.EncryptionLevel + var extHdr *wire.ExtendedHeader + var decrypted []byte + //nolint:exhaustive // Retry packets can't be unpacked. + switch hdr.Type { + case protocol.PacketTypeInitial: + encLevel = protocol.EncryptionInitial + opener, err := u.cs.GetInitialOpener() + if err != nil { + return nil, err + } + extHdr, decrypted, err = u.unpackLongHeaderPacket(opener, hdr, data) + if err != nil { + return nil, err + } + case protocol.PacketTypeHandshake: + encLevel = protocol.EncryptionHandshake + opener, err := u.cs.GetHandshakeOpener() + if err != nil { + return nil, err + } + extHdr, decrypted, err = u.unpackLongHeaderPacket(opener, hdr, data) + if err != nil { + return nil, err + } + case protocol.PacketType0RTT: + encLevel = protocol.Encryption0RTT + opener, err := u.cs.Get0RTTOpener() + if err != nil { + return nil, err + } + extHdr, decrypted, err = u.unpackLongHeaderPacket(opener, hdr, data) + if err != nil { + return nil, err + } + default: + return nil, fmt.Errorf("unknown packet type: %s", hdr.Type) + } + + if len(decrypted) == 0 { + return nil, &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: "empty packet", + } + } + + return &unpackedPacket{ + hdr: extHdr, + encryptionLevel: encLevel, + data: decrypted, + }, nil +} + +func (u *packetUnpacker) UnpackShortHeader(rcvTime time.Time, data []byte) (protocol.PacketNumber, protocol.PacketNumberLen, protocol.KeyPhaseBit, []byte, error) { + opener, err := u.cs.Get1RTTOpener() + if err != nil { + return 0, 0, 0, nil, err + } + pn, pnLen, kp, decrypted, err := u.unpackShortHeaderPacket(opener, rcvTime, data) + if err != nil { + return 0, 0, 0, nil, err + } + if len(decrypted) == 0 { + return 0, 0, 0, nil, &qerr.TransportError{ + ErrorCode: qerr.ProtocolViolation, + ErrorMessage: "empty packet", + } + } + return pn, pnLen, kp, decrypted, nil +} + +func (u *packetUnpacker) unpackLongHeaderPacket(opener handshake.LongHeaderOpener, hdr *wire.Header, data []byte) (*wire.ExtendedHeader, []byte, error) { + extHdr, parseErr := u.unpackLongHeader(opener, hdr, data) + // If the reserved bits are set incorrectly, we still need to continue unpacking. + // This avoids a timing side-channel, which otherwise might allow an attacker + // to gain information about the header encryption. + if parseErr != nil && parseErr != wire.ErrInvalidReservedBits { + return nil, nil, parseErr + } + extHdrLen := extHdr.ParsedLen() + extHdr.PacketNumber = opener.DecodePacketNumber(extHdr.PacketNumber, extHdr.PacketNumberLen) + decrypted, err := opener.Open(data[extHdrLen:extHdrLen], data[extHdrLen:], extHdr.PacketNumber, data[:extHdrLen]) + if err != nil { + return nil, nil, err + } + if parseErr != nil { + return nil, nil, parseErr + } + return extHdr, decrypted, nil +} + +func (u *packetUnpacker) unpackShortHeaderPacket(opener handshake.ShortHeaderOpener, rcvTime time.Time, data []byte) (protocol.PacketNumber, protocol.PacketNumberLen, protocol.KeyPhaseBit, []byte, error) { + l, pn, pnLen, kp, parseErr := u.unpackShortHeader(opener, data) + // If the reserved bits are set incorrectly, we still need to continue unpacking. + // This avoids a timing side-channel, which otherwise might allow an attacker + // to gain information about the header encryption. + if parseErr != nil && parseErr != wire.ErrInvalidReservedBits { + return 0, 0, 0, nil, &headerParseError{parseErr} + } + pn = opener.DecodePacketNumber(pn, pnLen) + decrypted, err := opener.Open(data[l:l], data[l:], rcvTime, pn, kp, data[:l]) + if err != nil { + return 0, 0, 0, nil, err + } + return pn, pnLen, kp, decrypted, parseErr +} + +func (u *packetUnpacker) unpackShortHeader(hd headerDecryptor, data []byte) (int, protocol.PacketNumber, protocol.PacketNumberLen, protocol.KeyPhaseBit, error) { + hdrLen := 1 /* first header byte */ + u.shortHdrConnIDLen + if len(data) < hdrLen+4+16 { + return 0, 0, 0, 0, fmt.Errorf("packet too small, expected at least 20 bytes after the header, got %d", len(data)-hdrLen) + } + origPNBytes := make([]byte, 4) + copy(origPNBytes, data[hdrLen:hdrLen+4]) + // 2. decrypt the header, assuming a 4 byte packet number + hd.DecryptHeader( + data[hdrLen+4:hdrLen+4+16], + &data[0], + data[hdrLen:hdrLen+4], + ) + // 3. parse the header (and learn the actual length of the packet number) + l, pn, pnLen, kp, parseErr := wire.ParseShortHeader(data, u.shortHdrConnIDLen) + if parseErr != nil && parseErr != wire.ErrInvalidReservedBits { + return l, pn, pnLen, kp, parseErr + } + // 4. if the packet number is shorter than 4 bytes, replace the remaining bytes with the copy we saved earlier + if pnLen != protocol.PacketNumberLen4 { + copy(data[hdrLen+int(pnLen):hdrLen+4], origPNBytes[int(pnLen):]) + } + return l, pn, pnLen, kp, parseErr +} + +// The error is either nil, a wire.ErrInvalidReservedBits or of type headerParseError. +func (u *packetUnpacker) unpackLongHeader(hd headerDecryptor, hdr *wire.Header, data []byte) (*wire.ExtendedHeader, error) { + extHdr, err := unpackLongHeader(hd, hdr, data) + if err != nil && err != wire.ErrInvalidReservedBits { + return nil, &headerParseError{err: err} + } + return extHdr, err +} + +func unpackLongHeader(hd headerDecryptor, hdr *wire.Header, data []byte) (*wire.ExtendedHeader, error) { + hdrLen := hdr.ParsedLen() + if protocol.ByteCount(len(data)) < hdrLen+4+16 { + return nil, fmt.Errorf("packet too small, expected at least 20 bytes after the header, got %d", protocol.ByteCount(len(data))-hdrLen) + } + // The packet number can be up to 4 bytes long, but we won't know the length until we decrypt it. + // 1. save a copy of the 4 bytes + origPNBytes := make([]byte, 4) + copy(origPNBytes, data[hdrLen:hdrLen+4]) + // 2. decrypt the header, assuming a 4 byte packet number + hd.DecryptHeader( + data[hdrLen+4:hdrLen+4+16], + &data[0], + data[hdrLen:hdrLen+4], + ) + // 3. parse the header (and learn the actual length of the packet number) + extHdr, parseErr := hdr.ParseExtended(data) + if parseErr != nil && parseErr != wire.ErrInvalidReservedBits { + return nil, parseErr + } + // 4. if the packet number is shorter than 4 bytes, replace the remaining bytes with the copy we saved earlier + if extHdr.PacketNumberLen != protocol.PacketNumberLen4 { + copy(data[extHdr.ParsedLen():hdrLen+4], origPNBytes[int(extHdr.PacketNumberLen):]) + } + return extHdr, parseErr +} diff --git a/vendor/github.com/quic-go/quic-go/path_manager.go b/vendor/github.com/quic-go/quic-go/path_manager.go new file mode 100644 index 0000000..3409665 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/path_manager.go @@ -0,0 +1,205 @@ +package quic + +import ( + "crypto/rand" + "net" + "slices" + "time" + + "github.com/quic-go/quic-go/internal/ackhandler" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/internal/wire" +) + +type pathID int64 + +const invalidPathID pathID = -1 + +// Maximum number of paths to keep track of. +// If the peer probes another path (before the pathTimeout of an existing path expires), +// this probing attempt is ignored. +const maxPaths = 3 + +// If no packet is received for a path for pathTimeout, +// the path can be evicted when the peer probes another path. +// This prevents an attacker from churning through paths by duplicating packets and +// sending them with spoofed source addresses. +const pathTimeout = 5 * time.Second + +type path struct { + id pathID + addr net.Addr + lastPacketTime time.Time + pathChallenge [8]byte + validated bool + rcvdNonProbing bool +} + +type pathManager struct { + nextPathID pathID + // ordered by lastPacketTime, with the most recently used path at the end + paths []*path + + getConnID func(pathID) (_ protocol.ConnectionID, ok bool) + retireConnID func(pathID) + + logger utils.Logger +} + +func newPathManager( + getConnID func(pathID) (_ protocol.ConnectionID, ok bool), + retireConnID func(pathID), + logger utils.Logger, +) *pathManager { + return &pathManager{ + paths: make([]*path, 0, maxPaths+1), + getConnID: getConnID, + retireConnID: retireConnID, + logger: logger, + } +} + +// Returns a path challenge frame if one should be sent. +// May return nil. +func (pm *pathManager) HandlePacket( + remoteAddr net.Addr, + t time.Time, + pathChallenge *wire.PathChallengeFrame, // may be nil if the packet didn't contain a PATH_CHALLENGE + isNonProbing bool, +) (_ protocol.ConnectionID, _ []ackhandler.Frame, shouldSwitch bool) { + var p *path + for i, path := range pm.paths { + if addrsEqual(path.addr, remoteAddr) { + p = path + p.lastPacketTime = t + // already sent a PATH_CHALLENGE for this path + if isNonProbing { + path.rcvdNonProbing = true + } + if pm.logger.Debug() { + pm.logger.Debugf("received packet for path %s that was already probed, validated: %t", remoteAddr, path.validated) + } + shouldSwitch = path.validated && path.rcvdNonProbing + if i != len(pm.paths)-1 { + // move the path to the end of the list + pm.paths = slices.Delete(pm.paths, i, i+1) + pm.paths = append(pm.paths, p) + } + if pathChallenge == nil { + return protocol.ConnectionID{}, nil, shouldSwitch + } + } + } + + if len(pm.paths) >= maxPaths { + if pm.paths[0].lastPacketTime.Add(pathTimeout).After(t) { + if pm.logger.Debug() { + pm.logger.Debugf("received packet for previously unseen path %s, but already have %d paths", remoteAddr, len(pm.paths)) + } + return protocol.ConnectionID{}, nil, shouldSwitch + } + // evict the oldest path, if the last packet was received more than pathTimeout ago + pm.retireConnID(pm.paths[0].id) + pm.paths = pm.paths[1:] + } + + var pathID pathID + if p != nil { + pathID = p.id + } else { + pathID = pm.nextPathID + } + + // previously unseen path, initiate path validation by sending a PATH_CHALLENGE + connID, ok := pm.getConnID(pathID) + if !ok { + pm.logger.Debugf("skipping validation of new path %s since no connection ID is available", remoteAddr) + return protocol.ConnectionID{}, nil, shouldSwitch + } + + frames := make([]ackhandler.Frame, 0, 2) + if p == nil { + var pathChallengeData [8]byte + rand.Read(pathChallengeData[:]) + p = &path{ + id: pm.nextPathID, + addr: remoteAddr, + lastPacketTime: t, + rcvdNonProbing: isNonProbing, + pathChallenge: pathChallengeData, + } + pm.nextPathID++ + pm.paths = append(pm.paths, p) + frames = append(frames, ackhandler.Frame{ + Frame: &wire.PathChallengeFrame{Data: p.pathChallenge}, + Handler: (*pathManagerAckHandler)(pm), + }) + pm.logger.Debugf("enqueueing PATH_CHALLENGE for new path %s", remoteAddr) + } + if pathChallenge != nil { + frames = append(frames, ackhandler.Frame{ + Frame: &wire.PathResponseFrame{Data: pathChallenge.Data}, + Handler: (*pathManagerAckHandler)(pm), + }) + } + return connID, frames, shouldSwitch +} + +func (pm *pathManager) HandlePathResponseFrame(f *wire.PathResponseFrame) { + for _, p := range pm.paths { + if f.Data == p.pathChallenge { + // path validated + p.validated = true + pm.logger.Debugf("path %s validated", p.addr) + break + } + } +} + +// SwitchToPath is called when the connection switches to a new path +func (pm *pathManager) SwitchToPath(addr net.Addr) { + // retire all other paths + for _, path := range pm.paths { + if addrsEqual(path.addr, addr) { + pm.logger.Debugf("switching to path %d (%s)", path.id, addr) + continue + } + pm.retireConnID(path.id) + } + clear(pm.paths) + pm.paths = pm.paths[:0] +} + +type pathManagerAckHandler pathManager + +var _ ackhandler.FrameHandler = &pathManagerAckHandler{} + +// Acknowledging the frame doesn't validate the path, only receiving the PATH_RESPONSE does. +func (pm *pathManagerAckHandler) OnAcked(f wire.Frame) {} + +func (pm *pathManagerAckHandler) OnLost(f wire.Frame) { + pc, ok := f.(*wire.PathChallengeFrame) + if !ok { + return + } + for i, path := range pm.paths { + if path.pathChallenge == pc.Data { + pm.paths = slices.Delete(pm.paths, i, i+1) + pm.retireConnID(path.id) + break + } + } +} + +func addrsEqual(addr1, addr2 net.Addr) bool { + if addr1 == nil || addr2 == nil { + return false + } + a1, ok1 := addr1.(*net.UDPAddr) + a2, ok2 := addr2.(*net.UDPAddr) + if ok1 && ok2 { + return a1.IP.Equal(a2.IP) && a1.Port == a2.Port + } + return addr1.String() == addr2.String() +} diff --git a/vendor/github.com/quic-go/quic-go/path_manager_outgoing.go b/vendor/github.com/quic-go/quic-go/path_manager_outgoing.go new file mode 100644 index 0000000..e8c065f --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/path_manager_outgoing.go @@ -0,0 +1,311 @@ +package quic + +import ( + "context" + "crypto/rand" + "errors" + "slices" + "sync" + "sync/atomic" + "time" + + "github.com/quic-go/quic-go/internal/ackhandler" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/wire" +) + +var ( + // ErrPathClosed is returned when trying to switch to a path that has been closed. + ErrPathClosed = errors.New("path closed") + // ErrPathNotValidated is returned when trying to use a path before path probing has completed. + ErrPathNotValidated = errors.New("path not yet validated") +) + +var errPathDoesNotExist = errors.New("path does not exist") + +// Path is a network path. +type Path struct { + id pathID + pathManager *pathManagerOutgoing + tr *Transport + initialRTT time.Duration + + enablePath func() + validated atomic.Bool + abandon chan struct{} +} + +func (p *Path) Probe(ctx context.Context) error { + path := p.pathManager.addPath(p, p.enablePath) + + p.pathManager.enqueueProbe(p) + nextProbeDur := p.initialRTT + var timer *time.Timer + var timerChan <-chan time.Time + for { + select { + case <-ctx.Done(): + return context.Cause(ctx) + case <-path.Validated(): + p.validated.Store(true) + return nil + case <-timerChan: + nextProbeDur *= 2 // exponential backoff + p.pathManager.enqueueProbe(p) + case <-path.ProbeSent(): + case <-p.abandon: + return ErrPathClosed + } + + if timer != nil { + timer.Stop() + } + timer = time.NewTimer(nextProbeDur) + timerChan = timer.C + } +} + +// Switch switches the QUIC connection to this path. +// It immediately stops sending on the old path, and sends on this new path. +func (p *Path) Switch() error { + if err := p.pathManager.switchToPath(p.id); err != nil { + switch { + case errors.Is(err, ErrPathNotValidated): + return err + case errors.Is(err, errPathDoesNotExist) && !p.validated.Load(): + select { + case <-p.abandon: + return ErrPathClosed + default: + return ErrPathNotValidated + } + default: + return ErrPathClosed + } + } + return nil +} + +// Close abandons a path. +// It is not possible to close the path that’s currently active. +// After closing, it is not possible to probe this path again. +func (p *Path) Close() error { + select { + case <-p.abandon: + return nil + default: + } + + if err := p.pathManager.removePath(p.id); err != nil { + return err + } + close(p.abandon) + return nil +} + +type pathOutgoing struct { + pathChallenges [][8]byte // length is implicitly limited by exponential backoff + tr *Transport + isValidated bool + probeSent chan struct{} // receives when a PATH_CHALLENGE is sent + validated chan struct{} // closed when the path the corresponding PATH_RESPONSE is received + enablePath func() +} + +func (p *pathOutgoing) ProbeSent() <-chan struct{} { return p.probeSent } +func (p *pathOutgoing) Validated() <-chan struct{} { return p.validated } + +type pathManagerOutgoing struct { + getConnID func(pathID) (_ protocol.ConnectionID, ok bool) + retireConnID func(pathID) + scheduleSending func() + + mx sync.Mutex + activePath pathID + pathsToProbe []pathID + paths map[pathID]*pathOutgoing + nextPathID pathID + pathToSwitchTo *pathOutgoing +} + +func newPathManagerOutgoing( + getConnID func(pathID) (_ protocol.ConnectionID, ok bool), + retireConnID func(pathID), + scheduleSending func(), +) *pathManagerOutgoing { + return &pathManagerOutgoing{ + activePath: 0, // at initialization time, we're guaranteed to be using the handshake path + nextPathID: 1, + getConnID: getConnID, + retireConnID: retireConnID, + scheduleSending: scheduleSending, + paths: make(map[pathID]*pathOutgoing, 4), + } +} + +func (pm *pathManagerOutgoing) addPath(p *Path, enablePath func()) *pathOutgoing { + pm.mx.Lock() + defer pm.mx.Unlock() + + // path might already exist, and just being re-probed + if existingPath, ok := pm.paths[p.id]; ok { + existingPath.validated = make(chan struct{}) + return existingPath + } + + path := &pathOutgoing{ + tr: p.tr, + probeSent: make(chan struct{}, 1), + validated: make(chan struct{}), + enablePath: enablePath, + } + pm.paths[p.id] = path + return path +} + +func (pm *pathManagerOutgoing) enqueueProbe(p *Path) { + pm.mx.Lock() + pm.pathsToProbe = append(pm.pathsToProbe, p.id) + pm.mx.Unlock() + pm.scheduleSending() +} + +func (pm *pathManagerOutgoing) removePath(id pathID) error { + if err := pm.removePathImpl(id); err != nil { + return err + } + pm.scheduleSending() + return nil +} + +func (pm *pathManagerOutgoing) removePathImpl(id pathID) error { + pm.mx.Lock() + defer pm.mx.Unlock() + + if id == pm.activePath { + return errors.New("cannot close active path") + } + p, ok := pm.paths[id] + if !ok { + return nil + } + if len(p.pathChallenges) > 0 { + pm.retireConnID(id) + } + delete(pm.paths, id) + return nil +} + +func (pm *pathManagerOutgoing) switchToPath(id pathID) error { + pm.mx.Lock() + defer pm.mx.Unlock() + + p, ok := pm.paths[id] + if !ok { + return errPathDoesNotExist + } + if !p.isValidated { + return ErrPathNotValidated + } + pm.pathToSwitchTo = p + pm.activePath = id + return nil +} + +func (pm *pathManagerOutgoing) NewPath(t *Transport, initialRTT time.Duration, enablePath func()) *Path { + pm.mx.Lock() + defer pm.mx.Unlock() + + id := pm.nextPathID + pm.nextPathID++ + return &Path{ + pathManager: pm, + id: id, + tr: t, + enablePath: enablePath, + initialRTT: initialRTT, + abandon: make(chan struct{}), + } +} + +func (pm *pathManagerOutgoing) NextPathToProbe() (_ protocol.ConnectionID, _ ackhandler.Frame, _ *Transport, hasPath bool) { + pm.mx.Lock() + defer pm.mx.Unlock() + + var p *pathOutgoing + id := invalidPathID + for _, pID := range pm.pathsToProbe { + var ok bool + p, ok = pm.paths[pID] + if ok { + id = pID + break + } + // if the path doesn't exist in the map, it might have been abandoned + pm.pathsToProbe = pm.pathsToProbe[1:] + } + if id == invalidPathID { + return protocol.ConnectionID{}, ackhandler.Frame{}, nil, false + } + + connID, ok := pm.getConnID(id) + if !ok { + return protocol.ConnectionID{}, ackhandler.Frame{}, nil, false + } + + var b [8]byte + _, _ = rand.Read(b[:]) + p.pathChallenges = append(p.pathChallenges, b) + + pm.pathsToProbe = pm.pathsToProbe[1:] + p.enablePath() + select { + case p.probeSent <- struct{}{}: + default: + } + frame := ackhandler.Frame{ + Frame: &wire.PathChallengeFrame{Data: b}, + Handler: (*pathManagerOutgoingAckHandler)(pm), + } + return connID, frame, p.tr, true +} + +func (pm *pathManagerOutgoing) HandlePathResponseFrame(f *wire.PathResponseFrame) { + pm.mx.Lock() + defer pm.mx.Unlock() + + for _, p := range pm.paths { + if slices.Contains(p.pathChallenges, f.Data) { + // path validated + if !p.isValidated { + // make sure that duplicate PATH_RESPONSE frames are ignored + p.isValidated = true + p.pathChallenges = nil + close(p.validated) + } + break + } + } +} + +func (pm *pathManagerOutgoing) ShouldSwitchPath() (*Transport, bool) { + pm.mx.Lock() + defer pm.mx.Unlock() + + if pm.pathToSwitchTo == nil { + return nil, false + } + p := pm.pathToSwitchTo + pm.pathToSwitchTo = nil + return p.tr, true +} + +type pathManagerOutgoingAckHandler pathManagerOutgoing + +var _ ackhandler.FrameHandler = &pathManagerOutgoingAckHandler{} + +// OnAcked is called when the PATH_CHALLENGE is acked. +// This doesn't validate the path, only receiving the PATH_RESPONSE does. +func (pm *pathManagerOutgoingAckHandler) OnAcked(wire.Frame) {} + +func (pm *pathManagerOutgoingAckHandler) OnLost(wire.Frame) {} diff --git a/vendor/github.com/quic-go/quic-go/quicvarint/io.go b/vendor/github.com/quic-go/quic-go/quicvarint/io.go new file mode 100644 index 0000000..27def40 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/quicvarint/io.go @@ -0,0 +1,68 @@ +package quicvarint + +import ( + "bytes" + "io" +) + +// Reader implements both the io.ByteReader and io.Reader interfaces. +type Reader interface { + io.ByteReader + io.Reader +} + +var _ Reader = &bytes.Reader{} + +type byteReader struct { + io.Reader +} + +var _ Reader = &byteReader{} + +// NewReader returns a Reader for r. +// If r already implements both io.ByteReader and io.Reader, NewReader returns r. +// Otherwise, r is wrapped to add the missing interfaces. +func NewReader(r io.Reader) Reader { + if r, ok := r.(Reader); ok { + return r + } + return &byteReader{r} +} + +func (r *byteReader) ReadByte() (byte, error) { + var b [1]byte + n, err := r.Read(b[:]) + if n == 1 && err == io.EOF { + err = nil + } + return b[0], err +} + +// Writer implements both the io.ByteWriter and io.Writer interfaces. +type Writer interface { + io.ByteWriter + io.Writer +} + +var _ Writer = &bytes.Buffer{} + +type byteWriter struct { + io.Writer +} + +var _ Writer = &byteWriter{} + +// NewWriter returns a Writer for w. +// If r already implements both io.ByteWriter and io.Writer, NewWriter returns w. +// Otherwise, w is wrapped to add the missing interfaces. +func NewWriter(w io.Writer) Writer { + if w, ok := w.(Writer); ok { + return w + } + return &byteWriter{w} +} + +func (w *byteWriter) WriteByte(c byte) error { + _, err := w.Write([]byte{c}) + return err +} diff --git a/vendor/github.com/quic-go/quic-go/quicvarint/varint.go b/vendor/github.com/quic-go/quic-go/quicvarint/varint.go new file mode 100644 index 0000000..0a19eaa --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/quicvarint/varint.go @@ -0,0 +1,173 @@ +package quicvarint + +import ( + "encoding/binary" + "fmt" + "io" +) + +// taken from the QUIC draft +const ( + // Min is the minimum value allowed for a QUIC varint. + Min = 0 + + // Max is the maximum allowed value for a QUIC varint (2^62-1). + Max = maxVarInt8 + + maxVarInt1 = 63 + maxVarInt2 = 16383 + maxVarInt4 = 1073741823 + maxVarInt8 = 4611686018427387903 +) + +// Read reads a number in the QUIC varint format from r. +func Read(r io.ByteReader) (uint64, error) { + firstByte, err := r.ReadByte() + if err != nil { + return 0, err + } + // the first two bits of the first byte encode the length + l := 1 << ((firstByte & 0xc0) >> 6) + b1 := firstByte & (0xff - 0xc0) + if l == 1 { + return uint64(b1), nil + } + b2, err := r.ReadByte() + if err != nil { + return 0, err + } + if l == 2 { + return uint64(b2) + uint64(b1)<<8, nil + } + b3, err := r.ReadByte() + if err != nil { + return 0, err + } + b4, err := r.ReadByte() + if err != nil { + return 0, err + } + if l == 4 { + return uint64(b4) + uint64(b3)<<8 + uint64(b2)<<16 + uint64(b1)<<24, nil + } + b5, err := r.ReadByte() + if err != nil { + return 0, err + } + b6, err := r.ReadByte() + if err != nil { + return 0, err + } + b7, err := r.ReadByte() + if err != nil { + return 0, err + } + b8, err := r.ReadByte() + if err != nil { + return 0, err + } + return uint64(b8) + uint64(b7)<<8 + uint64(b6)<<16 + uint64(b5)<<24 + uint64(b4)<<32 + uint64(b3)<<40 + uint64(b2)<<48 + uint64(b1)<<56, nil +} + +// Parse reads a number in the QUIC varint format. +// It returns the number of bytes consumed. +func Parse(b []byte) (uint64 /* value */, int /* bytes consumed */, error) { + if len(b) == 0 { + return 0, 0, io.EOF + } + + first := b[0] + switch first >> 6 { + case 0: // 1-byte encoding: 00xxxxxx + return uint64(first & 0b00111111), 1, nil + case 1: // 2-byte encoding: 01xxxxxx + if len(b) < 2 { + return 0, 0, io.ErrUnexpectedEOF + } + return uint64(b[1]) | uint64(first&0b00111111)<<8, 2, nil + case 2: // 4-byte encoding: 10xxxxxx + if len(b) < 4 { + return 0, 0, io.ErrUnexpectedEOF + } + return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(first&0b00111111)<<24, 4, nil + case 3: // 8-byte encoding: 00xxxxxx + if len(b) < 8 { + return 0, 0, io.ErrUnexpectedEOF + } + // binary.BigEndian.Uint64 only reads the first 8 bytes. Passing the full slice avoids slicing overhead. + return binary.BigEndian.Uint64(b) & 0x3fffffffffffffff, 8, nil + } + + panic("unreachable") +} + +// Append appends i in the QUIC varint format. +func Append(b []byte, i uint64) []byte { + if i <= maxVarInt1 { + return append(b, uint8(i)) + } + if i <= maxVarInt2 { + return append(b, []byte{uint8(i>>8) | 0x40, uint8(i)}...) + } + if i <= maxVarInt4 { + return append(b, []byte{uint8(i>>24) | 0x80, uint8(i >> 16), uint8(i >> 8), uint8(i)}...) + } + if i <= maxVarInt8 { + return append(b, []byte{ + uint8(i>>56) | 0xc0, uint8(i >> 48), uint8(i >> 40), uint8(i >> 32), + uint8(i >> 24), uint8(i >> 16), uint8(i >> 8), uint8(i), + }...) + } + panic(fmt.Sprintf("%#x doesn't fit into 62 bits", i)) +} + +// AppendWithLen append i in the QUIC varint format with the desired length. +func AppendWithLen(b []byte, i uint64, length int) []byte { + if length != 1 && length != 2 && length != 4 && length != 8 { + panic("invalid varint length") + } + l := Len(i) + if l == length { + return Append(b, i) + } + if l > length { + panic(fmt.Sprintf("cannot encode %d in %d bytes", i, length)) + } + switch length { + case 2: + b = append(b, 0b01000000) + case 4: + b = append(b, 0b10000000) + case 8: + b = append(b, 0b11000000) + } + for range length - l - 1 { + b = append(b, 0) + } + for j := range l { + b = append(b, uint8(i>>(8*(l-1-j)))) + } + return b +} + +// Len determines the number of bytes that will be needed to write the number i. +func Len(i uint64) int { + if i <= maxVarInt1 { + return 1 + } + if i <= maxVarInt2 { + return 2 + } + if i <= maxVarInt4 { + return 4 + } + if i <= maxVarInt8 { + return 8 + } + // Don't use a fmt.Sprintf here to format the error message. + // The function would then exceed the inlining budget. + panic(struct { + message string + num uint64 + }{"value doesn't fit into 62 bits: ", i}) +} diff --git a/vendor/github.com/quic-go/quic-go/receive_stream.go b/vendor/github.com/quic-go/quic-go/receive_stream.go new file mode 100644 index 0000000..61f4cdf --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/receive_stream.go @@ -0,0 +1,411 @@ +package quic + +import ( + "fmt" + "io" + "sync" + "time" + + "github.com/quic-go/quic-go/internal/ackhandler" + "github.com/quic-go/quic-go/internal/flowcontrol" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/internal/wire" +) + +// A ReceiveStream is a unidirectional Receive Stream. +type ReceiveStream struct { + mutex sync.Mutex + + streamID protocol.StreamID + + sender streamSender + + frameQueue *frameSorter + finalOffset protocol.ByteCount + + currentFrame []byte + currentFrameDone func() + readPosInFrame int + currentFrameIsLast bool // is the currentFrame the last frame on this stream + + queuedStopSending bool + queuedMaxStreamData bool + + // Set once we read the io.EOF or the cancellation error. + // Note that for local cancellations, this doesn't necessarily mean that we know the final offset yet. + errorRead bool + completed bool // set once we've called streamSender.onStreamCompleted + cancelledRemotely bool + cancelledLocally bool + cancelErr *StreamError + closeForShutdownErr error + + readPos protocol.ByteCount + reliableSize protocol.ByteCount + + readChan chan struct{} + readOnce chan struct{} // cap: 1, to protect against concurrent use of Read + deadline time.Time + + flowController flowcontrol.StreamFlowController +} + +var ( + _ streamControlFrameGetter = &ReceiveStream{} + _ receiveStreamFrameHandler = &ReceiveStream{} +) + +func newReceiveStream( + streamID protocol.StreamID, + sender streamSender, + flowController flowcontrol.StreamFlowController, +) *ReceiveStream { + return &ReceiveStream{ + streamID: streamID, + sender: sender, + flowController: flowController, + frameQueue: newFrameSorter(), + readChan: make(chan struct{}, 1), + readOnce: make(chan struct{}, 1), + finalOffset: protocol.MaxByteCount, + } +} + +// StreamID returns the stream ID. +func (s *ReceiveStream) StreamID() protocol.StreamID { + return s.streamID +} + +// Read reads data from the stream. +// Read can be made to time out using [ReceiveStream.SetReadDeadline]. +// If the stream was canceled, the error is a [StreamError]. +func (s *ReceiveStream) Read(p []byte) (int, error) { + // Concurrent use of Read is not permitted (and doesn't make any sense), + // but sometimes people do it anyway. + // Make sure that we only execute one call at any given time to avoid hard to debug failures. + s.readOnce <- struct{}{} + defer func() { <-s.readOnce }() + + s.mutex.Lock() + queuedStreamWindowUpdate, queuedConnWindowUpdate, n, err := s.readImpl(p) + completed := s.isNewlyCompleted() + s.mutex.Unlock() + + if completed { + s.sender.onStreamCompleted(s.streamID) + } + if queuedStreamWindowUpdate { + s.sender.onHasStreamControlFrame(s.streamID, s) + } + if queuedConnWindowUpdate { + s.sender.onHasConnectionData() + } + return n, err +} + +func (s *ReceiveStream) isNewlyCompleted() bool { + if s.completed { + return false + } + // We need to know the final offset (either via FIN or RESET_STREAM) for flow control accounting. + if s.finalOffset == protocol.MaxByteCount { + return false + } + // We're done with the stream if it was cancelled locally... + if s.cancelledLocally { + s.completed = true + return true + } + // ... or if the error (either io.EOF or the reset error) was read + if s.errorRead { + s.completed = true + return true + } + return false +} + +func (s *ReceiveStream) readImpl(p []byte) (hasStreamWindowUpdate bool, hasConnWindowUpdate bool, _ int, _ error) { + if s.currentFrameIsLast && s.currentFrame == nil { + s.errorRead = true + return false, false, 0, io.EOF + } + if s.cancelledLocally || (s.cancelledRemotely && s.readPos >= s.reliableSize) { + s.errorRead = true + return false, false, 0, s.cancelErr + } + if s.closeForShutdownErr != nil { + return false, false, 0, s.closeForShutdownErr + } + + var bytesRead int + var deadlineTimer *utils.Timer + for bytesRead < len(p) { + if s.currentFrame == nil || s.readPosInFrame >= len(s.currentFrame) { + s.dequeueNextFrame() + } + if s.currentFrame == nil && bytesRead > 0 { + return hasStreamWindowUpdate, hasConnWindowUpdate, bytesRead, s.closeForShutdownErr + } + + for { + // Stop waiting on errors + if s.closeForShutdownErr != nil { + return hasStreamWindowUpdate, hasConnWindowUpdate, bytesRead, s.closeForShutdownErr + } + if s.cancelledLocally || (s.cancelledRemotely && s.readPos >= s.reliableSize) { + s.errorRead = true + return hasStreamWindowUpdate, hasConnWindowUpdate, bytesRead, s.cancelErr + } + + deadline := s.deadline + if !deadline.IsZero() { + if !time.Now().Before(deadline) { + return hasStreamWindowUpdate, hasConnWindowUpdate, bytesRead, errDeadline + } + if deadlineTimer == nil { + deadlineTimer = utils.NewTimer() + defer deadlineTimer.Stop() + } + deadlineTimer.Reset(deadline) + } + + if s.currentFrame != nil || s.currentFrameIsLast { + break + } + + s.mutex.Unlock() + if deadline.IsZero() { + <-s.readChan + } else { + select { + case <-s.readChan: + case <-deadlineTimer.Chan(): + deadlineTimer.SetRead() + } + } + s.mutex.Lock() + if s.currentFrame == nil { + s.dequeueNextFrame() + } + } + + if bytesRead > len(p) { + return hasStreamWindowUpdate, hasConnWindowUpdate, bytesRead, fmt.Errorf("BUG: bytesRead (%d) > len(p) (%d) in stream.Read", bytesRead, len(p)) + } + if s.readPosInFrame > len(s.currentFrame) { + return hasStreamWindowUpdate, hasConnWindowUpdate, bytesRead, fmt.Errorf("BUG: readPosInFrame (%d) > frame.DataLen (%d) in stream.Read", s.readPosInFrame, len(s.currentFrame)) + } + m := copy(p[bytesRead:], s.currentFrame[s.readPosInFrame:]) + + // when a RESET_STREAM was received, the flow controller was already + // informed about the final offset for this stream + if !s.cancelledRemotely || s.readPos < s.reliableSize { + hasStream, hasConn := s.flowController.AddBytesRead(protocol.ByteCount(m)) + if hasStream { + s.queuedMaxStreamData = true + hasStreamWindowUpdate = true + } + if hasConn { + hasConnWindowUpdate = true + } + } + + s.readPosInFrame += m + s.readPos += protocol.ByteCount(m) + bytesRead += m + + if s.cancelledRemotely && s.readPos >= s.reliableSize { + s.flowController.Abandon() + } + + if s.readPosInFrame >= len(s.currentFrame) && s.currentFrameIsLast { + s.currentFrame = nil + if s.currentFrameDone != nil { + s.currentFrameDone() + } + s.errorRead = true + return hasStreamWindowUpdate, hasConnWindowUpdate, bytesRead, io.EOF + } + } + if s.cancelledRemotely && s.readPos >= s.reliableSize { + s.errorRead = true + return hasStreamWindowUpdate, hasConnWindowUpdate, bytesRead, s.cancelErr + } + return hasStreamWindowUpdate, hasConnWindowUpdate, bytesRead, nil +} + +func (s *ReceiveStream) dequeueNextFrame() { + var offset protocol.ByteCount + // We're done with the last frame. Release the buffer. + if s.currentFrameDone != nil { + s.currentFrameDone() + } + offset, s.currentFrame, s.currentFrameDone = s.frameQueue.Pop() + s.currentFrameIsLast = offset+protocol.ByteCount(len(s.currentFrame)) >= s.finalOffset && !s.cancelledRemotely + s.readPosInFrame = 0 +} + +// CancelRead aborts receiving on this stream. +// It instructs the peer to stop transmitting stream data. +// Read will unblock immediately, and future Read calls will fail. +// When called multiple times or after reading the io.EOF it is a no-op. +func (s *ReceiveStream) CancelRead(errorCode StreamErrorCode) { + s.mutex.Lock() + queuedNewControlFrame := s.cancelReadImpl(errorCode) + completed := s.isNewlyCompleted() + s.mutex.Unlock() + + if queuedNewControlFrame { + s.sender.onHasStreamControlFrame(s.streamID, s) + } + if completed { + s.flowController.Abandon() + s.sender.onStreamCompleted(s.streamID) + } +} + +func (s *ReceiveStream) cancelReadImpl(errorCode qerr.StreamErrorCode) (queuedNewControlFrame bool) { + if s.cancelledLocally { // duplicate call to CancelRead + return false + } + if s.closeForShutdownErr != nil { + return false + } + s.cancelledLocally = true + if s.errorRead || s.cancelledRemotely { + return false + } + s.queuedStopSending = true + s.cancelErr = &StreamError{StreamID: s.streamID, ErrorCode: errorCode, Remote: false} + s.signalRead() + return true +} + +func (s *ReceiveStream) handleStreamFrame(frame *wire.StreamFrame, now time.Time) error { + s.mutex.Lock() + err := s.handleStreamFrameImpl(frame, now) + completed := s.isNewlyCompleted() + s.mutex.Unlock() + + if completed { + s.flowController.Abandon() + s.sender.onStreamCompleted(s.streamID) + } + return err +} + +func (s *ReceiveStream) handleStreamFrameImpl(frame *wire.StreamFrame, now time.Time) error { + maxOffset := frame.Offset + frame.DataLen() + if err := s.flowController.UpdateHighestReceived(maxOffset, frame.Fin, now); err != nil { + return err + } + if frame.Fin { + s.finalOffset = maxOffset + } + if s.cancelledLocally { + return nil + } + if err := s.frameQueue.Push(frame.Data, frame.Offset, frame.PutBack); err != nil { + return err + } + s.signalRead() + return nil +} + +func (s *ReceiveStream) handleResetStreamFrame(frame *wire.ResetStreamFrame, now time.Time) error { + s.mutex.Lock() + err := s.handleResetStreamFrameImpl(frame, now) + completed := s.isNewlyCompleted() + s.mutex.Unlock() + + if completed { + s.sender.onStreamCompleted(s.streamID) + } + return err +} + +func (s *ReceiveStream) handleResetStreamFrameImpl(frame *wire.ResetStreamFrame, now time.Time) error { + if s.closeForShutdownErr != nil { + return nil + } + if err := s.flowController.UpdateHighestReceived(frame.FinalSize, true, now); err != nil { + return err + } + s.finalOffset = frame.FinalSize + + // senders are allowed to reduce the reliable size, but frames might have been reordered + if (!s.cancelledRemotely && s.reliableSize == 0) || frame.ReliableSize < s.reliableSize { + s.reliableSize = frame.ReliableSize + } + if s.readPos >= s.reliableSize { + // calling Abandon multiple times is a no-op + s.flowController.Abandon() + } + // ignore duplicate RESET_STREAM frames for this stream (after checking their final offset) + if s.cancelledRemotely { + return nil + } + + // don't save the error if the RESET_STREAM frames was received after CancelRead was called + if s.cancelledLocally { + return nil + } + s.cancelledRemotely = true + s.cancelErr = &StreamError{StreamID: s.streamID, ErrorCode: frame.ErrorCode, Remote: true} + s.signalRead() + return nil +} + +func (s *ReceiveStream) getControlFrame(now time.Time) (_ ackhandler.Frame, ok, hasMore bool) { + s.mutex.Lock() + defer s.mutex.Unlock() + + if !s.queuedStopSending && !s.queuedMaxStreamData { + return ackhandler.Frame{}, false, false + } + if s.queuedStopSending { + s.queuedStopSending = false + return ackhandler.Frame{ + Frame: &wire.StopSendingFrame{StreamID: s.streamID, ErrorCode: s.cancelErr.ErrorCode}, + }, true, s.queuedMaxStreamData + } + + s.queuedMaxStreamData = false + return ackhandler.Frame{ + Frame: &wire.MaxStreamDataFrame{ + StreamID: s.streamID, + MaximumStreamData: s.flowController.GetWindowUpdate(now), + }, + }, true, false +} + +// SetReadDeadline sets the deadline for future Read calls and +// any currently-blocked Read call. +// A zero value for t means Read will not time out. +func (s *ReceiveStream) SetReadDeadline(t time.Time) error { + s.mutex.Lock() + s.deadline = t + s.mutex.Unlock() + s.signalRead() + return nil +} + +// CloseForShutdown closes a stream abruptly. +// It makes Read unblock (and return the error) immediately. +// The peer will NOT be informed about this: the stream is closed without sending a FIN or RESET. +func (s *ReceiveStream) closeForShutdown(err error) { + s.mutex.Lock() + s.closeForShutdownErr = err + s.mutex.Unlock() + s.signalRead() +} + +// signalRead performs a non-blocking send on the readChan +func (s *ReceiveStream) signalRead() { + select { + case s.readChan <- struct{}{}: + default: + } +} diff --git a/vendor/github.com/quic-go/quic-go/retransmission_queue.go b/vendor/github.com/quic-go/quic-go/retransmission_queue.go new file mode 100644 index 0000000..323af5b --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/retransmission_queue.go @@ -0,0 +1,158 @@ +package quic + +import ( + "fmt" + + "github.com/quic-go/quic-go/internal/ackhandler" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/wire" +) + +type framesToRetransmit struct { + crypto []*wire.CryptoFrame + other []wire.Frame +} + +type retransmissionQueue struct { + initial *framesToRetransmit + handshake *framesToRetransmit + appData framesToRetransmit +} + +func newRetransmissionQueue() *retransmissionQueue { + return &retransmissionQueue{ + initial: &framesToRetransmit{}, + handshake: &framesToRetransmit{}, + } +} + +func (q *retransmissionQueue) addInitial(f wire.Frame) { + if q.initial == nil { + return + } + if cf, ok := f.(*wire.CryptoFrame); ok { + q.initial.crypto = append(q.initial.crypto, cf) + return + } + q.initial.other = append(q.initial.other, f) +} + +func (q *retransmissionQueue) addHandshake(f wire.Frame) { + if q.handshake == nil { + return + } + if cf, ok := f.(*wire.CryptoFrame); ok { + q.handshake.crypto = append(q.handshake.crypto, cf) + return + } + q.handshake.other = append(q.handshake.other, f) +} + +func (q *retransmissionQueue) addAppData(f wire.Frame) { + switch f := f.(type) { + case *wire.StreamFrame: + panic("STREAM frames are handled with their respective streams.") + case *wire.CryptoFrame: + q.appData.crypto = append(q.appData.crypto, f) + default: + q.appData.other = append(q.appData.other, f) + } +} + +func (q *retransmissionQueue) HasData(encLevel protocol.EncryptionLevel) bool { + //nolint:exhaustive // 0-RTT data is retransmitted in 1-RTT packets. + switch encLevel { + case protocol.EncryptionInitial: + return q.initial != nil && + (len(q.initial.crypto) > 0 || len(q.initial.other) > 0) + case protocol.EncryptionHandshake: + return q.handshake != nil && + (len(q.handshake.crypto) > 0 || len(q.handshake.other) > 0) + case protocol.Encryption1RTT: + return len(q.appData.crypto) > 0 || len(q.appData.other) > 0 + } + return false +} + +func (q *retransmissionQueue) GetFrame(encLevel protocol.EncryptionLevel, maxLen protocol.ByteCount, v protocol.Version) wire.Frame { + var r *framesToRetransmit + //nolint:exhaustive // 0-RTT data is retransmitted in 1-RTT packets. + switch encLevel { + case protocol.EncryptionInitial: + r = q.initial + case protocol.EncryptionHandshake: + r = q.handshake + case protocol.Encryption1RTT: + r = &q.appData + } + if r == nil { + return nil + } + + if len(r.crypto) > 0 { + f := r.crypto[0] + newFrame, needsSplit := f.MaybeSplitOffFrame(maxLen, v) + if newFrame == nil && !needsSplit { // the whole frame fits + r.crypto = r.crypto[1:] + return f + } + if newFrame != nil { // frame was split. Leave the original frame in the queue. + return newFrame + } + } + if len(r.other) == 0 { + return nil + } + f := r.other[0] + if f.Length(v) > maxLen { + return nil + } + r.other = r.other[1:] + return f +} + +func (q *retransmissionQueue) DropPackets(encLevel protocol.EncryptionLevel) { + //nolint:exhaustive // Can only drop Initial and Handshake packet number space. + switch encLevel { + case protocol.EncryptionInitial: + q.initial = nil + case protocol.EncryptionHandshake: + q.handshake = nil + default: + panic(fmt.Sprintf("unexpected encryption level: %s", encLevel)) + } +} + +func (q *retransmissionQueue) AckHandler(encLevel protocol.EncryptionLevel) ackhandler.FrameHandler { + switch encLevel { + case protocol.EncryptionInitial: + return (*retransmissionQueueInitialAckHandler)(q) + case protocol.EncryptionHandshake: + return (*retransmissionQueueHandshakeAckHandler)(q) + case protocol.Encryption0RTT, protocol.Encryption1RTT: + return (*retransmissionQueueAppDataAckHandler)(q) + } + return nil +} + +type retransmissionQueueInitialAckHandler retransmissionQueue + +func (q *retransmissionQueueInitialAckHandler) OnAcked(wire.Frame) {} +func (q *retransmissionQueueInitialAckHandler) OnLost(f wire.Frame) { + (*retransmissionQueue)(q).addInitial(f) +} + +type retransmissionQueueHandshakeAckHandler retransmissionQueue + +func (q *retransmissionQueueHandshakeAckHandler) OnAcked(wire.Frame) {} +func (q *retransmissionQueueHandshakeAckHandler) OnLost(f wire.Frame) { + (*retransmissionQueue)(q).addHandshake(f) +} + +type retransmissionQueueAppDataAckHandler retransmissionQueue + +func (q *retransmissionQueueAppDataAckHandler) OnAcked(wire.Frame) {} +func (q *retransmissionQueueAppDataAckHandler) OnLost(f wire.Frame) { + (*retransmissionQueue)(q).addAppData(f) +} diff --git a/vendor/github.com/quic-go/quic-go/send_conn.go b/vendor/github.com/quic-go/quic-go/send_conn.go new file mode 100644 index 0000000..402520c --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/send_conn.go @@ -0,0 +1,127 @@ +package quic + +import ( + "net" + "sync/atomic" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" +) + +// A sendConn allows sending using a simple Write() on a non-connected packet conn. +type sendConn interface { + Write(b []byte, gsoSize uint16, ecn protocol.ECN) error + WriteTo([]byte, net.Addr) error + Close() error + LocalAddr() net.Addr + RemoteAddr() net.Addr + ChangeRemoteAddr(addr net.Addr, info packetInfo) + + capabilities() connCapabilities +} + +type remoteAddrInfo struct { + addr net.Addr + oob []byte +} + +type sconn struct { + rawConn + + localAddr net.Addr + + remoteAddrInfo atomic.Pointer[remoteAddrInfo] + + logger utils.Logger + + // If GSO enabled, and we receive a GSO error for this remote address, GSO is disabled. + gotGSOError bool + // Used to catch the error sometimes returned by the first sendmsg call on Linux, + // see https://github.com/golang/go/issues/63322. + wroteFirstPacket bool +} + +var _ sendConn = &sconn{} + +func newSendConn(c rawConn, remote net.Addr, info packetInfo, logger utils.Logger) *sconn { + localAddr := c.LocalAddr() + if info.addr.IsValid() { + if udpAddr, ok := localAddr.(*net.UDPAddr); ok { + addrCopy := *udpAddr + addrCopy.IP = info.addr.AsSlice() + localAddr = &addrCopy + } + } + + oob := info.OOB() + // increase oob slice capacity, so we can add the UDP_SEGMENT and ECN control messages without allocating + l := len(oob) + oob = append(oob, make([]byte, 64)...)[:l] + sc := &sconn{ + rawConn: c, + localAddr: localAddr, + logger: logger, + } + sc.remoteAddrInfo.Store(&remoteAddrInfo{ + addr: remote, + oob: oob, + }) + return sc +} + +func (c *sconn) Write(p []byte, gsoSize uint16, ecn protocol.ECN) error { + ai := c.remoteAddrInfo.Load() + err := c.writePacket(p, ai.addr, ai.oob, gsoSize, ecn) + if err != nil && isGSOError(err) { + // disable GSO for future calls + c.gotGSOError = true + if c.logger.Debug() { + c.logger.Debugf("GSO failed when sending to %s", ai.addr) + } + // send out the packets one by one + for len(p) > 0 { + l := len(p) + if l > int(gsoSize) { + l = int(gsoSize) + } + if err := c.writePacket(p[:l], ai.addr, ai.oob, 0, ecn); err != nil { + return err + } + p = p[l:] + } + return nil + } + return err +} + +func (c *sconn) writePacket(p []byte, addr net.Addr, oob []byte, gsoSize uint16, ecn protocol.ECN) error { + _, err := c.WritePacket(p, addr, oob, gsoSize, ecn) + if err != nil && !c.wroteFirstPacket && isPermissionError(err) { + _, err = c.WritePacket(p, addr, oob, gsoSize, ecn) + } + c.wroteFirstPacket = true + return err +} + +func (c *sconn) WriteTo(b []byte, addr net.Addr) error { + _, err := c.WritePacket(b, addr, nil, 0, protocol.ECNUnsupported) + return err +} + +func (c *sconn) capabilities() connCapabilities { + capabilities := c.rawConn.capabilities() + if capabilities.GSO { + capabilities.GSO = !c.gotGSOError + } + return capabilities +} + +func (c *sconn) ChangeRemoteAddr(addr net.Addr, info packetInfo) { + c.remoteAddrInfo.Store(&remoteAddrInfo{ + addr: addr, + oob: info.OOB(), + }) +} + +func (c *sconn) RemoteAddr() net.Addr { return c.remoteAddrInfo.Load().addr } +func (c *sconn) LocalAddr() net.Addr { return c.localAddr } diff --git a/vendor/github.com/quic-go/quic-go/send_queue.go b/vendor/github.com/quic-go/quic-go/send_queue.go new file mode 100644 index 0000000..d19762b --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/send_queue.go @@ -0,0 +1,112 @@ +package quic + +import ( + "net" + + "github.com/quic-go/quic-go/internal/protocol" +) + +type sender interface { + Send(p *packetBuffer, gsoSize uint16, ecn protocol.ECN) + SendProbe(*packetBuffer, net.Addr) + Run() error + WouldBlock() bool + Available() <-chan struct{} + Close() +} + +type queueEntry struct { + buf *packetBuffer + gsoSize uint16 + ecn protocol.ECN +} + +type sendQueue struct { + queue chan queueEntry + closeCalled chan struct{} // runStopped when Close() is called + runStopped chan struct{} // runStopped when the run loop returns + available chan struct{} + conn sendConn +} + +var _ sender = &sendQueue{} + +const sendQueueCapacity = 8 + +func newSendQueue(conn sendConn) sender { + return &sendQueue{ + conn: conn, + runStopped: make(chan struct{}), + closeCalled: make(chan struct{}), + available: make(chan struct{}, 1), + queue: make(chan queueEntry, sendQueueCapacity), + } +} + +// Send sends out a packet. It's guaranteed to not block. +// Callers need to make sure that there's actually space in the send queue by calling WouldBlock. +// Otherwise Send will panic. +func (h *sendQueue) Send(p *packetBuffer, gsoSize uint16, ecn protocol.ECN) { + select { + case h.queue <- queueEntry{buf: p, gsoSize: gsoSize, ecn: ecn}: + // clear available channel if we've reached capacity + if len(h.queue) == sendQueueCapacity { + select { + case <-h.available: + default: + } + } + case <-h.runStopped: + default: + panic("sendQueue.Send would have blocked") + } +} + +func (h *sendQueue) SendProbe(p *packetBuffer, addr net.Addr) { + h.conn.WriteTo(p.Data, addr) +} + +func (h *sendQueue) WouldBlock() bool { + return len(h.queue) == sendQueueCapacity +} + +func (h *sendQueue) Available() <-chan struct{} { + return h.available +} + +func (h *sendQueue) Run() error { + defer close(h.runStopped) + var shouldClose bool + for { + if shouldClose && len(h.queue) == 0 { + return nil + } + select { + case <-h.closeCalled: + h.closeCalled = nil // prevent this case from being selected again + // make sure that all queued packets are actually sent out + shouldClose = true + case e := <-h.queue: + if err := h.conn.Write(e.buf.Data, e.gsoSize, e.ecn); err != nil { + // This additional check enables: + // 1. Checking for "datagram too large" message from the kernel, as such, + // 2. Path MTU discovery,and + // 3. Eventual detection of loss PingFrame. + if !isSendMsgSizeErr(err) { + return err + } + } + e.buf.Release() + select { + case h.available <- struct{}{}: + default: + } + } + } +} + +func (h *sendQueue) Close() { + close(h.closeCalled) + // wait until the run loop returned + <-h.runStopped +} diff --git a/vendor/github.com/quic-go/quic-go/send_stream.go b/vendor/github.com/quic-go/quic-go/send_stream.go new file mode 100644 index 0000000..d5ce777 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/send_stream.go @@ -0,0 +1,751 @@ +package quic + +import ( + "context" + "fmt" + "sync" + "time" + + "github.com/quic-go/quic-go/internal/ackhandler" + "github.com/quic-go/quic-go/internal/flowcontrol" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/internal/wire" +) + +// A SendStream is a unidirectional Send Stream. +type SendStream struct { + mutex sync.Mutex + + numOutstandingFrames int64 // outstanding STREAM and RESET_STREAM frames + retransmissionQueue []*wire.StreamFrame + + ctx context.Context + ctxCancel context.CancelCauseFunc + + streamID protocol.StreamID + sender streamSender + + // reliableSize is the portion of the stream that needs to be transmitted reliably, + // even if the stream is cancelled. + // This requires the peer to support RESET_STREAM_AT. + // This value should not be accessed directly, but only through the reliableOffset method. + // This method returns 0 if the peer doesn't support the RESET_STREAM_AT extension. + reliableSize protocol.ByteCount + writeOffset protocol.ByteCount + + shutdownErr error + resetErr *StreamError + queuedResetStreamFrame *wire.ResetStreamFrame + + supportsResetStreamAt bool + finishedWriting bool // set once Close() is called + finSent bool // set when a STREAM_FRAME with FIN bit has been sent + // Set when the application knows about the cancellation. + // This can happen because the application called CancelWrite, + // or because Write returned the error (for remote cancellations). + cancellationFlagged bool + completed bool // set when this stream has been reported to the streamSender as completed + + dataForWriting []byte // during a Write() call, this slice is the part of p that still needs to be sent out + nextFrame *wire.StreamFrame + + writeChan chan struct{} + writeOnce chan struct{} + deadline time.Time + + flowController flowcontrol.StreamFlowController +} + +var ( + _ streamControlFrameGetter = &SendStream{} + _ outgoingStream = &SendStream{} + _ sendStreamFrameHandler = &SendStream{} +) + +func newSendStream( + ctx context.Context, + streamID protocol.StreamID, + sender streamSender, + flowController flowcontrol.StreamFlowController, + supportsResetStreamAt bool, +) *SendStream { + s := &SendStream{ + streamID: streamID, + sender: sender, + flowController: flowController, + writeChan: make(chan struct{}, 1), + writeOnce: make(chan struct{}, 1), // cap: 1, to protect against concurrent use of Write + supportsResetStreamAt: supportsResetStreamAt, + } + s.ctx, s.ctxCancel = context.WithCancelCause(ctx) + return s +} + +// StreamID returns the stream ID. +func (s *SendStream) StreamID() StreamID { + return s.streamID // same for receiveStream and sendStream +} + +// Write writes data to the stream. +// Write can be made to time out using [SendStream.SetWriteDeadline]. +// If the stream was canceled, the error is a [StreamError]. +func (s *SendStream) Write(p []byte) (int, error) { + // Concurrent use of Write is not permitted (and doesn't make any sense), + // but sometimes people do it anyway. + // Make sure that we only execute one call at any given time to avoid hard to debug failures. + s.writeOnce <- struct{}{} + defer func() { <-s.writeOnce }() + + isNewlyCompleted, n, err := s.write(p) + if isNewlyCompleted { + s.sender.onStreamCompleted(s.streamID) + } + return n, err +} + +func (s *SendStream) write(p []byte) (bool /* is newly completed */, int, error) { + s.mutex.Lock() + defer s.mutex.Unlock() + + if s.resetErr != nil { + s.cancellationFlagged = true + return s.isNewlyCompleted(), 0, s.resetErr + } + if s.shutdownErr != nil { + return false, 0, s.shutdownErr + } + if s.finishedWriting { + return false, 0, fmt.Errorf("write on closed stream %d", s.streamID) + } + if !s.deadline.IsZero() && !time.Now().Before(s.deadline) { + return false, 0, errDeadline + } + if len(p) == 0 { + return false, 0, nil + } + + s.dataForWriting = p + + var ( + deadlineTimer *utils.Timer + bytesWritten int + notifiedSender bool + ) + for { + var copied bool + var deadline time.Time + // As soon as dataForWriting becomes smaller than a certain size x, we copy all the data to a STREAM frame (s.nextFrame), + // which can then be popped the next time we assemble a packet. + // This allows us to return Write() when all data but x bytes have been sent out. + // When the user now calls Close(), this is much more likely to happen before we popped that last STREAM frame, + // allowing us to set the FIN bit on that frame (instead of sending an empty STREAM frame with FIN). + if s.canBufferStreamFrame() && len(s.dataForWriting) > 0 { + if s.nextFrame == nil { + f := wire.GetStreamFrame() + f.Offset = s.writeOffset + f.StreamID = s.streamID + f.DataLenPresent = true + f.Data = f.Data[:len(s.dataForWriting)] + copy(f.Data, s.dataForWriting) + s.nextFrame = f + } else { + l := len(s.nextFrame.Data) + s.nextFrame.Data = s.nextFrame.Data[:l+len(s.dataForWriting)] + copy(s.nextFrame.Data[l:], s.dataForWriting) + } + s.dataForWriting = nil + bytesWritten = len(p) + copied = true + } else { + bytesWritten = len(p) - len(s.dataForWriting) + deadline = s.deadline + if !deadline.IsZero() { + if !time.Now().Before(deadline) { + s.dataForWriting = nil + return false, bytesWritten, errDeadline + } + if deadlineTimer == nil { + deadlineTimer = utils.NewTimer() + defer deadlineTimer.Stop() + } + deadlineTimer.Reset(deadline) + } + if s.dataForWriting == nil || s.shutdownErr != nil || s.resetErr != nil { + break + } + } + + s.mutex.Unlock() + if !notifiedSender { + s.sender.onHasStreamData(s.streamID, s) // must be called without holding the mutex + notifiedSender = true + } + if copied { + s.mutex.Lock() + break + } + if deadline.IsZero() { + <-s.writeChan + } else { + select { + case <-s.writeChan: + case <-deadlineTimer.Chan(): + deadlineTimer.SetRead() + } + } + s.mutex.Lock() + } + + if bytesWritten == len(p) { + return false, bytesWritten, nil + } + if s.shutdownErr != nil { + return false, bytesWritten, s.shutdownErr + } + if s.resetErr != nil { + s.cancellationFlagged = true + return s.isNewlyCompleted(), bytesWritten, s.resetErr + } + return false, bytesWritten, nil +} + +func (s *SendStream) canBufferStreamFrame() bool { + var l protocol.ByteCount + if s.nextFrame != nil { + l = s.nextFrame.DataLen() + } + return l+protocol.ByteCount(len(s.dataForWriting)) <= protocol.MaxPacketBufferSize +} + +// popStreamFrame returns the next STREAM frame that is supposed to be sent on this stream +// maxBytes is the maximum length this frame (including frame header) will have. +func (s *SendStream) popStreamFrame(maxBytes protocol.ByteCount, v protocol.Version) (_ ackhandler.StreamFrame, _ *wire.StreamDataBlockedFrame, hasMore bool) { + s.mutex.Lock() + f, blocked, hasMoreData := s.popNewOrRetransmittedStreamFrame(maxBytes, v) + if f != nil { + s.numOutstandingFrames++ + } + s.mutex.Unlock() + + if f == nil { + return ackhandler.StreamFrame{}, blocked, hasMoreData + } + return ackhandler.StreamFrame{ + Frame: f, + Handler: (*sendStreamAckHandler)(s), + }, blocked, hasMoreData +} + +func (s *SendStream) popNewOrRetransmittedStreamFrame(maxBytes protocol.ByteCount, v protocol.Version) (_ *wire.StreamFrame, _ *wire.StreamDataBlockedFrame, hasMoreData bool) { + if s.shutdownErr != nil { + return nil, nil, false + } + if s.resetErr != nil { + reliableOffset := s.reliableOffset() + if reliableOffset == 0 || (s.writeOffset >= reliableOffset && len(s.retransmissionQueue) == 0) { + return nil, nil, false + } + } + + if len(s.retransmissionQueue) > 0 { + f, hasMoreRetransmissions := s.maybeGetRetransmission(maxBytes, v) + if f != nil || hasMoreRetransmissions { + if f == nil { + return nil, nil, true + } + // We always claim that we have more data to send. + // This might be incorrect, in which case there'll be a spurious call to popStreamFrame in the future. + return f, nil, true + } + } + + if len(s.dataForWriting) == 0 && s.nextFrame == nil { + if s.finishedWriting && !s.finSent { + s.finSent = true + return &wire.StreamFrame{ + StreamID: s.streamID, + Offset: s.writeOffset, + DataLenPresent: true, + Fin: true, + }, nil, false + } + return nil, nil, false + } + + maxDataLen := s.flowController.SendWindowSize() + if maxDataLen == 0 { + return nil, nil, true + } + + // if the stream is canceled, only data up to the reliable size needs to be sent + reliableOffset := s.reliableOffset() + if s.resetErr != nil && reliableOffset > 0 { + maxDataLen = min(maxDataLen, reliableOffset-s.writeOffset) + } + f, hasMoreData := s.popNewStreamFrame(maxBytes, maxDataLen, v) + if f == nil { + return nil, nil, hasMoreData + } + if f.DataLen() > 0 { + s.writeOffset += f.DataLen() + s.flowController.AddBytesSent(f.DataLen()) + } + if s.resetErr != nil && s.writeOffset >= reliableOffset { + hasMoreData = false + } + var blocked *wire.StreamDataBlockedFrame + // If the entire send window is used, the stream might have become blocked on stream-level flow control. + // This is not guaranteed though, because the stream might also have been blocked on connection-level flow control. + if f.DataLen() == maxDataLen && s.flowController.IsNewlyBlocked() { + blocked = &wire.StreamDataBlockedFrame{StreamID: s.streamID, MaximumStreamData: s.writeOffset} + } + f.Fin = s.finishedWriting && s.dataForWriting == nil && s.nextFrame == nil && !s.finSent + if f.Fin { + s.finSent = true + } + return f, blocked, hasMoreData +} + +// popNewStreamFrame returns a new STREAM frame to send for this stream +// hasMoreData says if there's more data to send, *not* taking into account the reliable size +func (s *SendStream) popNewStreamFrame(maxBytes, maxDataLen protocol.ByteCount, v protocol.Version) (_ *wire.StreamFrame, hasMoreData bool) { + if s.nextFrame != nil { + maxDataLen := min(maxDataLen, s.nextFrame.MaxDataLen(maxBytes, v)) + if maxDataLen == 0 { + return nil, true + } + nextFrame := s.nextFrame + s.nextFrame = nil + if nextFrame.DataLen() > maxDataLen { + s.nextFrame = wire.GetStreamFrame() + s.nextFrame.StreamID = s.streamID + s.nextFrame.Offset = s.writeOffset + maxDataLen + s.nextFrame.Data = s.nextFrame.Data[:nextFrame.DataLen()-maxDataLen] + s.nextFrame.DataLenPresent = true + copy(s.nextFrame.Data, nextFrame.Data[maxDataLen:]) + nextFrame.Data = nextFrame.Data[:maxDataLen] + } else { + s.signalWrite() + } + return nextFrame, s.nextFrame != nil || s.dataForWriting != nil + } + + f := wire.GetStreamFrame() + f.Fin = false + f.StreamID = s.streamID + f.Offset = s.writeOffset + f.DataLenPresent = true + f.Data = f.Data[:0] + + hasMoreData = s.popNewStreamFrameWithoutBuffer(f, maxBytes, maxDataLen, v) + if len(f.Data) == 0 && !f.Fin { + f.PutBack() + return nil, hasMoreData + } + return f, hasMoreData +} + +func (s *SendStream) popNewStreamFrameWithoutBuffer(f *wire.StreamFrame, maxBytes, sendWindow protocol.ByteCount, v protocol.Version) bool { + maxDataLen := f.MaxDataLen(maxBytes, v) + if maxDataLen == 0 { // a STREAM frame must have at least one byte of data + return s.dataForWriting != nil || s.nextFrame != nil || s.finishedWriting + } + s.getDataForWriting(f, min(maxDataLen, sendWindow)) + + return s.dataForWriting != nil || s.nextFrame != nil || s.finishedWriting +} + +func (s *SendStream) maybeGetRetransmission(maxBytes protocol.ByteCount, v protocol.Version) (*wire.StreamFrame, bool /* has more retransmissions */) { + f := s.retransmissionQueue[0] + newFrame, needsSplit := f.MaybeSplitOffFrame(maxBytes, v) + if needsSplit { + return newFrame, true + } + s.retransmissionQueue = s.retransmissionQueue[1:] + return f, len(s.retransmissionQueue) > 0 +} + +func (s *SendStream) getDataForWriting(f *wire.StreamFrame, maxBytes protocol.ByteCount) { + if protocol.ByteCount(len(s.dataForWriting)) <= maxBytes { + f.Data = f.Data[:len(s.dataForWriting)] + copy(f.Data, s.dataForWriting) + s.dataForWriting = nil + s.signalWrite() + return + } + f.Data = f.Data[:maxBytes] + copy(f.Data, s.dataForWriting) + s.dataForWriting = s.dataForWriting[maxBytes:] + if s.canBufferStreamFrame() { + s.signalWrite() + } +} + +func (s *SendStream) isNewlyCompleted() bool { + if s.completed { + return false + } + if s.nextFrame != nil && s.nextFrame.DataLen() > 0 { + return false + } + // We need to keep the stream around until all frames have been sent and acknowledged. + if s.numOutstandingFrames > 0 || len(s.retransmissionQueue) > 0 || s.queuedResetStreamFrame != nil { + return false + } + // The stream is completed if we sent the FIN. + if s.finSent { + s.completed = true + return true + } + // The stream is also completed if: + // 1. the application called CancelWrite, or + // 2. we received a STOP_SENDING, and + // * the application consumed the error via Write, or + // * the application called Close + if s.resetErr != nil && (s.cancellationFlagged || s.finishedWriting) { + s.completed = true + return true + } + return false +} + +// Close closes the write-direction of the stream. +// Future calls to Write are not permitted after calling Close. +// It must not be called concurrently with Write. +// It must not be called after calling CancelWrite. +func (s *SendStream) Close() error { + s.mutex.Lock() + if s.shutdownErr != nil || s.finishedWriting { + s.mutex.Unlock() + return nil + } + s.finishedWriting = true + cancelled := s.resetErr != nil + if cancelled { + s.cancellationFlagged = true + } + completed := s.isNewlyCompleted() + s.mutex.Unlock() + + if completed { + s.sender.onStreamCompleted(s.streamID) + } + if cancelled { + return fmt.Errorf("close called for canceled stream %d", s.streamID) + } + s.sender.onHasStreamData(s.streamID, s) // need to send the FIN, must be called without holding the mutex + + s.ctxCancel(nil) + return nil +} + +// SetReliableBoundary marks the data written to this stream so far as reliable. +// It is valid to call this function multiple times, thereby increasing the reliable size. +// It only has an effect if the peer enabled support for the RESET_STREAM_AT extension, +// otherwise, it is a no-op. +func (s *SendStream) SetReliableBoundary() { + s.mutex.Lock() + defer s.mutex.Unlock() + + s.reliableSize = s.writeOffset + if s.nextFrame != nil { + s.reliableSize += s.nextFrame.DataLen() + } +} + +// CancelWrite aborts sending on this stream. +// Data already written, but not yet delivered to the peer is not guaranteed to be delivered reliably. +// Write will unblock immediately, and future calls to Write will fail. +// When called multiple times it is a no-op. +// When called after Close, it aborts reliable delivery of outstanding stream data. +// Note that there is no guarantee if the peer will receive the FIN or the cancellation error first. +func (s *SendStream) CancelWrite(errorCode StreamErrorCode) { + s.mutex.Lock() + if s.shutdownErr != nil { + s.mutex.Unlock() + return + } + + s.cancellationFlagged = true + + if s.resetErr != nil { + completed := s.isNewlyCompleted() + s.mutex.Unlock() + // The user has called CancelWrite. If the previous cancellation was because of a + // STOP_SENDING, we don't need to flag the error to the user anymore. + if completed { + s.sender.onStreamCompleted(s.streamID) + } + return + } + s.resetErr = &StreamError{StreamID: s.streamID, ErrorCode: errorCode, Remote: false} + s.ctxCancel(s.resetErr) + + reliableOffset := s.reliableOffset() + if reliableOffset == 0 { + s.numOutstandingFrames = 0 + s.retransmissionQueue = nil + } + s.queuedResetStreamFrame = &wire.ResetStreamFrame{ + StreamID: s.streamID, + FinalSize: max(s.writeOffset, reliableOffset), + ErrorCode: errorCode, + // if the peer doesn't support the extension, the reliable offset will always be 0 + ReliableSize: reliableOffset, + } + if reliableOffset > 0 { + if s.nextFrame != nil { + if s.nextFrame.Offset >= reliableOffset { + s.nextFrame.PutBack() + s.nextFrame = nil + } else if s.nextFrame.Offset+s.nextFrame.DataLen() > reliableOffset { + s.nextFrame.Data = s.nextFrame.Data[:reliableOffset-s.nextFrame.Offset] + } + } + if len(s.retransmissionQueue) > 0 { + retransmissionQueue := make([]*wire.StreamFrame, 0, len(s.retransmissionQueue)) + for _, f := range s.retransmissionQueue { + if f.Offset >= reliableOffset { + f.PutBack() + continue + } + if f.Offset+f.DataLen() <= reliableOffset { + retransmissionQueue = append(retransmissionQueue, f) + } else { + f.Data = f.Data[:reliableOffset-f.Offset] + retransmissionQueue = append(retransmissionQueue, f) + } + } + s.retransmissionQueue = retransmissionQueue + } + } + s.mutex.Unlock() + + s.signalWrite() + s.sender.onHasStreamControlFrame(s.streamID, s) +} + +func (s *SendStream) enableResetStreamAt() { + s.mutex.Lock() + s.supportsResetStreamAt = true + s.mutex.Unlock() +} + +func (s *SendStream) updateSendWindow(limit protocol.ByteCount) { + updated := s.flowController.UpdateSendWindow(limit) + if !updated { // duplicate or reordered MAX_STREAM_DATA frame + return + } + s.mutex.Lock() + hasStreamData := s.dataForWriting != nil || s.nextFrame != nil + s.mutex.Unlock() + if hasStreamData { + s.sender.onHasStreamData(s.streamID, s) + } +} + +func (s *SendStream) handleStopSendingFrame(f *wire.StopSendingFrame) { + s.mutex.Lock() + if s.shutdownErr != nil { + s.mutex.Unlock() + return + } + + // If the stream was already cancelled (either locally, or due to a previous STOP_SENDING frame), + // there's nothing else to do. + if s.resetErr != nil && s.reliableOffset() == 0 { + s.mutex.Unlock() + return + } + // if the peer stopped reading from the stream, there's no need to transmit any data reliably + s.reliableSize = 0 + s.numOutstandingFrames = 0 + s.retransmissionQueue = nil + if s.resetErr == nil { + s.resetErr = &StreamError{StreamID: s.streamID, ErrorCode: f.ErrorCode, Remote: true} + s.ctxCancel(s.resetErr) + } + s.queuedResetStreamFrame = &wire.ResetStreamFrame{ + StreamID: s.streamID, + FinalSize: s.writeOffset, + ErrorCode: s.resetErr.ErrorCode, + } + s.mutex.Unlock() + + s.signalWrite() + s.sender.onHasStreamControlFrame(s.streamID, s) +} + +func (s *SendStream) getControlFrame(time.Time) (_ ackhandler.Frame, ok, hasMore bool) { + s.mutex.Lock() + defer s.mutex.Unlock() + + if s.queuedResetStreamFrame == nil { + return ackhandler.Frame{}, false, false + } + s.numOutstandingFrames++ + f := ackhandler.Frame{ + Frame: s.queuedResetStreamFrame, + Handler: (*sendStreamResetStreamHandler)(s), + } + s.queuedResetStreamFrame = nil + return f, true, false +} + +func (s *SendStream) reliableOffset() protocol.ByteCount { + if !s.supportsResetStreamAt { + return 0 + } + return s.reliableSize +} + +// The Context is canceled as soon as the write-side of the stream is closed. +// This happens when Close() or CancelWrite() is called, or when the peer +// cancels the read-side of their stream. +// The cancellation cause is set to the error that caused the stream to +// close, or `context.Canceled` in case the stream is closed without error. +func (s *SendStream) Context() context.Context { + return s.ctx +} + +// SetWriteDeadline sets the deadline for future Write calls +// and any currently-blocked Write call. +// Even if write times out, it may return n > 0, indicating that +// some data was successfully written. +// A zero value for t means Write will not time out. +func (s *SendStream) SetWriteDeadline(t time.Time) error { + s.mutex.Lock() + s.deadline = t + s.mutex.Unlock() + s.signalWrite() + return nil +} + +// CloseForShutdown closes a stream abruptly. +// It makes Write unblock (and return the error) immediately. +// The peer will NOT be informed about this: the stream is closed without sending a FIN or RST. +func (s *SendStream) closeForShutdown(err error) { + s.mutex.Lock() + if s.shutdownErr == nil && !s.finishedWriting { + s.shutdownErr = err + } + s.mutex.Unlock() + s.signalWrite() +} + +// signalWrite performs a non-blocking send on the writeChan +func (s *SendStream) signalWrite() { + select { + case s.writeChan <- struct{}{}: + default: + } +} + +type sendStreamAckHandler SendStream + +var _ ackhandler.FrameHandler = &sendStreamAckHandler{} + +func (s *sendStreamAckHandler) OnAcked(f wire.Frame) { + sf := f.(*wire.StreamFrame) + sf.PutBack() + + s.mutex.Lock() + if s.resetErr != nil && (*SendStream)(s).reliableOffset() == 0 { + s.mutex.Unlock() + return + } + s.numOutstandingFrames-- + if s.numOutstandingFrames < 0 { + panic("numOutStandingFrames negative") + } + completed := (*SendStream)(s).isNewlyCompleted() + s.mutex.Unlock() + + if completed { + s.sender.onStreamCompleted(s.streamID) + } +} + +func (s *sendStreamAckHandler) OnLost(f wire.Frame) { + sf := f.(*wire.StreamFrame) + s.mutex.Lock() + // If the reliable size was 0 when the stream was cancelled, + // the number of outstanding frames was immediately set to 0, and the retransmission queue was dropped. + if s.resetErr != nil && (*SendStream)(s).reliableOffset() == 0 { + s.mutex.Unlock() + return + } + s.numOutstandingFrames-- + if s.numOutstandingFrames < 0 { + panic("numOutStandingFrames negative") + } + + if s.resetErr != nil && (*SendStream)(s).reliableOffset() > 0 { + // If the stream was reset, and this frame is beyond the reliable offset, + // it doesn't need to be retransmitted. + if sf.Offset >= (*SendStream)(s).reliableOffset() { + sf.PutBack() + // If this frame was the last one tracked, losing it might cause the stream to be completed. + completed := (*SendStream)(s).isNewlyCompleted() + s.mutex.Unlock() + if completed { + s.sender.onStreamCompleted(s.streamID) + } + return + } + // If the payload of the frame extends beyond the reliable size, + // truncate the frame to the reliable size. + if sf.Offset+sf.DataLen() > (*SendStream)(s).reliableOffset() { + sf.Data = sf.Data[:(*SendStream)(s).reliableOffset()-sf.Offset] + } + } + + sf.DataLenPresent = true + s.retransmissionQueue = append(s.retransmissionQueue, sf) + s.mutex.Unlock() + + s.sender.onHasStreamData(s.streamID, (*SendStream)(s)) +} + +type sendStreamResetStreamHandler SendStream + +var _ ackhandler.FrameHandler = &sendStreamResetStreamHandler{} + +func (s *sendStreamResetStreamHandler) OnAcked(f wire.Frame) { + rsf := f.(*wire.ResetStreamFrame) + s.mutex.Lock() + // If the peer sent a STOP_SENDING after we sent a RESET_STREAM_AT frame, + // we sent 1. reduced the reliable size to 0 and 2. sent a RESET_STREAM frame. + // In this case, we don't care about the acknowledgment of this frame. + if rsf.ReliableSize != (*SendStream)(s).reliableOffset() { + s.mutex.Unlock() + return + } + s.numOutstandingFrames-- + if s.numOutstandingFrames < 0 { + panic("numOutStandingFrames negative") + } + completed := (*SendStream)(s).isNewlyCompleted() + s.mutex.Unlock() + + if completed { + s.sender.onStreamCompleted(s.streamID) + } +} + +func (s *sendStreamResetStreamHandler) OnLost(f wire.Frame) { + rsf := f.(*wire.ResetStreamFrame) + s.mutex.Lock() + // If the peer sent a STOP_SENDING after we sent a RESET_STREAM_AT frame, + // we sent 1. reduced the reliable size to 0 and 2. sent a RESET_STREAM frame. + // In this case, the loss of the RESET_STREAM_AT frame can be ignored. + if rsf.ReliableSize != (*SendStream)(s).reliableOffset() { + s.mutex.Unlock() + return + } + s.queuedResetStreamFrame = rsf + s.numOutstandingFrames-- + s.mutex.Unlock() + s.sender.onHasStreamControlFrame(s.streamID, (*SendStream)(s)) +} diff --git a/vendor/github.com/quic-go/quic-go/server.go b/vendor/github.com/quic-go/quic-go/server.go new file mode 100644 index 0000000..f6bef2d --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/server.go @@ -0,0 +1,971 @@ +package quic + +import ( + "context" + "crypto/tls" + "errors" + "fmt" + "net" + "sync" + "time" + + "github.com/quic-go/quic-go/internal/handshake" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/internal/wire" + "github.com/quic-go/quic-go/logging" +) + +// ErrServerClosed is returned by the [Listener] or [EarlyListener]'s Accept method after a call to Close. +var ErrServerClosed = errServerClosed{} + +type errServerClosed struct{} + +func (errServerClosed) Error() string { return "quic: server closed" } +func (errServerClosed) Unwrap() error { return net.ErrClosed } + +// packetHandler handles packets +type packetHandler interface { + handlePacket(receivedPacket) + destroy(error) + closeWithTransportError(qerr.TransportErrorCode) +} + +type zeroRTTQueue struct { + packets []receivedPacket + expiration time.Time +} + +type rejectedPacket struct { + receivedPacket + hdr *wire.Header +} + +// A Listener of QUIC +type baseServer struct { + tr *packetHandlerMap + disableVersionNegotiation bool + acceptEarlyConns bool + + tlsConf *tls.Config + config *Config + + conn rawConn + + tokenGenerator *handshake.TokenGenerator + maxTokenAge time.Duration + + connIDGenerator ConnectionIDGenerator + statelessResetter *statelessResetter + onClose func() + + receivedPackets chan receivedPacket + + nextZeroRTTCleanup time.Time + zeroRTTQueues map[protocol.ConnectionID]*zeroRTTQueue // only initialized if acceptEarlyConns == true + + connContext func(context.Context, *ClientInfo) (context.Context, error) + + // set as a member, so they can be set in the tests + newConn func( + context.Context, + context.CancelCauseFunc, + sendConn, + connRunner, + protocol.ConnectionID, /* original dest connection ID */ + *protocol.ConnectionID, /* retry src connection ID */ + protocol.ConnectionID, /* client dest connection ID */ + protocol.ConnectionID, /* destination connection ID */ + protocol.ConnectionID, /* source connection ID */ + ConnectionIDGenerator, + *statelessResetter, + *Config, + *tls.Config, + *handshake.TokenGenerator, + bool, /* client address validated by an address validation token */ + time.Duration, + *logging.ConnectionTracer, + utils.Logger, + protocol.Version, + ) *wrappedConn + + closeMx sync.Mutex + // errorChan is closed when Close is called. This has two effects: + // 1. it cancels handshakes that are still in flight (using CONNECTION_REFUSED) errors + // 2. it stops handling of packets passed to this server + errorChan chan struct{} + // acceptChan is closed when Close returns. + // This only happens once all handshake in flight have either completed and canceled. + // Calls to Accept will first drain the queue of connections that have completed the handshake, + // and then return ErrServerClosed. + stopAccepting chan struct{} + closeErr error + running chan struct{} // closed as soon as run() returns + + versionNegotiationQueue chan receivedPacket + invalidTokenQueue chan rejectedPacket + connectionRefusedQueue chan rejectedPacket + retryQueue chan rejectedPacket + handshakingCount sync.WaitGroup + + verifySourceAddress func(net.Addr) bool + + connQueue chan *Conn + + tracer *logging.Tracer + + logger utils.Logger +} + +// A Listener listens for incoming QUIC connections. +// It returns connections once the handshake has completed. +type Listener struct { + baseServer *baseServer +} + +// Accept returns new connections. It should be called in a loop. +func (l *Listener) Accept(ctx context.Context) (*Conn, error) { + return l.baseServer.Accept(ctx) +} + +// Close closes the listener. +// Accept will return [ErrServerClosed] as soon as all connections in the accept queue have been accepted. +// QUIC handshakes that are still in flight will be rejected with a CONNECTION_REFUSED error. +// Already established (accepted)connections will be unaffected. +func (l *Listener) Close() error { + return l.baseServer.Close() +} + +// Addr returns the local network address that the server is listening on. +func (l *Listener) Addr() net.Addr { + return l.baseServer.Addr() +} + +// An EarlyListener listens for incoming QUIC connections, and returns them before the handshake completes. +// For connections that don't use 0-RTT, this allows the server to send 0.5-RTT data. +// This data is encrypted with forward-secure keys, however, the client's identity has not yet been verified. +// For connection using 0-RTT, this allows the server to accept and respond to streams that the client opened in the +// 0-RTT data it sent. Note that at this point during the handshake, the live-ness of the +// client has not yet been confirmed, and the 0-RTT data could have been replayed by an attacker. +type EarlyListener struct { + baseServer *baseServer +} + +// Accept returns a new connections. It should be called in a loop. +func (l *EarlyListener) Accept(ctx context.Context) (*Conn, error) { + conn, err := l.baseServer.accept(ctx) + if err != nil { + return nil, err + } + return conn, nil +} + +// Close the server. All active connections will be closed. +func (l *EarlyListener) Close() error { + return l.baseServer.Close() +} + +// Addr returns the local network addr that the server is listening on. +func (l *EarlyListener) Addr() net.Addr { + return l.baseServer.Addr() +} + +// ListenAddr creates a QUIC server listening on a given address. +// See [Listen] for more details. +func ListenAddr(addr string, tlsConf *tls.Config, config *Config) (*Listener, error) { + conn, err := listenUDP(addr) + if err != nil { + return nil, err + } + return (&Transport{ + Conn: conn, + createdConn: true, + isSingleUse: true, + }).Listen(tlsConf, config) +} + +// ListenAddrEarly works like [ListenAddr], but it returns connections before the handshake completes. +func ListenAddrEarly(addr string, tlsConf *tls.Config, config *Config) (*EarlyListener, error) { + conn, err := listenUDP(addr) + if err != nil { + return nil, err + } + return (&Transport{ + Conn: conn, + createdConn: true, + isSingleUse: true, + }).ListenEarly(tlsConf, config) +} + +func listenUDP(addr string) (*net.UDPConn, error) { + udpAddr, err := net.ResolveUDPAddr("udp", addr) + if err != nil { + return nil, err + } + return net.ListenUDP("udp", udpAddr) +} + +// Listen listens for QUIC connections on a given net.PacketConn. +// If the PacketConn satisfies the [OOBCapablePacketConn] interface (as a [net.UDPConn] does), +// ECN and packet info support will be enabled. In this case, ReadMsgUDP and WriteMsgUDP +// will be used instead of ReadFrom and WriteTo to read/write packets. +// A single net.PacketConn can only be used for a single call to Listen. +// +// The tls.Config must not be nil and must contain a certificate configuration. +// Furthermore, it must define an application control (using [NextProtos]). +// The quic.Config may be nil, in that case the default values will be used. +// +// This is a convenience function. More advanced use cases should instantiate a [Transport], +// which offers configuration options for a more fine-grained control of the connection establishment, +// including reusing the underlying UDP socket for outgoing QUIC connections. +// When closing a listener created with Listen, all established QUIC connections will be closed immediately. +func Listen(conn net.PacketConn, tlsConf *tls.Config, config *Config) (*Listener, error) { + tr := &Transport{Conn: conn, isSingleUse: true} + return tr.Listen(tlsConf, config) +} + +// ListenEarly works like [Listen], but it returns connections before the handshake completes. +func ListenEarly(conn net.PacketConn, tlsConf *tls.Config, config *Config) (*EarlyListener, error) { + tr := &Transport{Conn: conn, isSingleUse: true} + return tr.ListenEarly(tlsConf, config) +} + +func newServer( + conn rawConn, + tr *packetHandlerMap, + connIDGenerator ConnectionIDGenerator, + statelessResetter *statelessResetter, + connContext func(context.Context, *ClientInfo) (context.Context, error), + tlsConf *tls.Config, + config *Config, + tracer *logging.Tracer, + onClose func(), + tokenGeneratorKey TokenGeneratorKey, + maxTokenAge time.Duration, + verifySourceAddress func(net.Addr) bool, + disableVersionNegotiation bool, + acceptEarly bool, +) *baseServer { + s := &baseServer{ + conn: conn, + connContext: connContext, + tr: tr, + tlsConf: tlsConf, + config: config, + tokenGenerator: handshake.NewTokenGenerator(tokenGeneratorKey), + maxTokenAge: maxTokenAge, + verifySourceAddress: verifySourceAddress, + connIDGenerator: connIDGenerator, + statelessResetter: statelessResetter, + connQueue: make(chan *Conn, protocol.MaxAcceptQueueSize), + errorChan: make(chan struct{}), + stopAccepting: make(chan struct{}), + running: make(chan struct{}), + receivedPackets: make(chan receivedPacket, protocol.MaxServerUnprocessedPackets), + versionNegotiationQueue: make(chan receivedPacket, 4), + invalidTokenQueue: make(chan rejectedPacket, 4), + connectionRefusedQueue: make(chan rejectedPacket, 4), + retryQueue: make(chan rejectedPacket, 8), + newConn: newConnection, + tracer: tracer, + logger: utils.DefaultLogger.WithPrefix("server"), + acceptEarlyConns: acceptEarly, + disableVersionNegotiation: disableVersionNegotiation, + onClose: onClose, + } + if acceptEarly { + s.zeroRTTQueues = map[protocol.ConnectionID]*zeroRTTQueue{} + } + go s.run() + go s.runSendQueue() + s.logger.Debugf("Listening for %s connections on %s", conn.LocalAddr().Network(), conn.LocalAddr().String()) + return s +} + +func (s *baseServer) run() { + defer close(s.running) + for { + select { + case <-s.errorChan: + return + default: + } + select { + case <-s.errorChan: + return + case p := <-s.receivedPackets: + if bufferStillInUse := s.handlePacketImpl(p); !bufferStillInUse { + p.buffer.Release() + } + } + } +} + +func (s *baseServer) runSendQueue() { + for { + select { + case <-s.running: + return + case p := <-s.versionNegotiationQueue: + s.maybeSendVersionNegotiationPacket(p) + case p := <-s.invalidTokenQueue: + s.maybeSendInvalidToken(p) + case p := <-s.connectionRefusedQueue: + s.sendConnectionRefused(p) + case p := <-s.retryQueue: + s.sendRetry(p) + } + } +} + +// Accept returns connections that already completed the handshake. +// It is only valid if acceptEarlyConns is false. +func (s *baseServer) Accept(ctx context.Context) (*Conn, error) { + return s.accept(ctx) +} + +func (s *baseServer) accept(ctx context.Context) (*Conn, error) { + select { + case <-ctx.Done(): + return nil, ctx.Err() + case conn := <-s.connQueue: + return conn, nil + case <-s.stopAccepting: + // first drain the queue + select { + case conn := <-s.connQueue: + return conn, nil + default: + } + return nil, s.closeErr + } +} + +func (s *baseServer) Close() error { + s.close(ErrServerClosed, false) + return nil +} + +// close closes the server. The Transport mutex must not be held while calling this method. +// This method closes any handshaking connections which requires the tranpsort mutex. +func (s *baseServer) close(e error, transportClose bool) { + s.closeMx.Lock() + if s.closeErr != nil { + s.closeMx.Unlock() + return + } + s.closeErr = e + close(s.errorChan) + <-s.running + s.closeMx.Unlock() + + if !transportClose { + s.onClose() + } + + // wait until all handshakes in flight have terminated + s.handshakingCount.Wait() + close(s.stopAccepting) + + if transportClose { + // if the transport is closing, drain the connQueue. All connections in the queue + // will be closed by the transport. + for { + select { + case <-s.connQueue: + default: + return + } + } + } +} + +// Addr returns the server's network address +func (s *baseServer) Addr() net.Addr { + return s.conn.LocalAddr() +} + +func (s *baseServer) handlePacket(p receivedPacket) { + select { + case s.receivedPackets <- p: + case <-s.errorChan: + return + default: + s.logger.Debugf("Dropping packet from %s (%d bytes). Server receive queue full.", p.remoteAddr, p.Size()) + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropDOSPrevention) + } + } +} + +func (s *baseServer) handlePacketImpl(p receivedPacket) bool /* is the buffer still in use? */ { + if !s.nextZeroRTTCleanup.IsZero() && p.rcvTime.After(s.nextZeroRTTCleanup) { + defer s.cleanupZeroRTTQueues(p.rcvTime) + } + + if wire.IsVersionNegotiationPacket(p.data) { + s.logger.Debugf("Dropping Version Negotiation packet.") + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeVersionNegotiation, p.Size(), logging.PacketDropUnexpectedPacket) + } + return false + } + // Short header packets should never end up here in the first place + if !wire.IsLongHeaderPacket(p.data[0]) { + panic(fmt.Sprintf("misrouted packet: %#v", p.data)) + } + v, err := wire.ParseVersion(p.data) + // drop the packet if we failed to parse the protocol version + if err != nil { + s.logger.Debugf("Dropping a packet with an unknown version") + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropUnexpectedPacket) + } + return false + } + // send a Version Negotiation Packet if the client is speaking a different protocol version + if !protocol.IsSupportedVersion(s.config.Versions, v) { + if s.disableVersionNegotiation { + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropUnexpectedVersion) + } + return false + } + + if p.Size() < protocol.MinUnknownVersionPacketSize { + s.logger.Debugf("Dropping a packet with an unsupported version number %d that is too small (%d bytes)", v, p.Size()) + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropUnexpectedPacket) + } + return false + } + return s.enqueueVersionNegotiationPacket(p) + } + + if wire.Is0RTTPacket(p.data) { + if !s.acceptEarlyConns { + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketType0RTT, p.Size(), logging.PacketDropUnexpectedPacket) + } + return false + } + return s.handle0RTTPacket(p) + } + + // If we're creating a new connection, the packet will be passed to the connection. + // The header will then be parsed again. + hdr, _, _, err := wire.ParsePacket(p.data) + if err != nil { + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropHeaderParseError) + } + s.logger.Debugf("Error parsing packet: %s", err) + return false + } + if hdr.Type == protocol.PacketTypeInitial && p.Size() < protocol.MinInitialPacketSize { + s.logger.Debugf("Dropping a packet that is too small to be a valid Initial (%d bytes)", p.Size()) + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeInitial, p.Size(), logging.PacketDropUnexpectedPacket) + } + return false + } + + if hdr.Type != protocol.PacketTypeInitial { + // Drop long header packets. + // There's little point in sending a Stateless Reset, since the client + // might not have received the token yet. + s.logger.Debugf("Dropping long header packet of type %s (%d bytes)", hdr.Type, len(p.data)) + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeFromHeader(hdr), p.Size(), logging.PacketDropUnexpectedPacket) + } + return false + } + + s.logger.Debugf("<- Received Initial packet.") + + if err := s.handleInitialImpl(p, hdr); err != nil { + s.logger.Errorf("Error occurred handling initial packet: %s", err) + } + // Don't put the packet buffer back. + // handleInitialImpl deals with the buffer. + return true +} + +func (s *baseServer) handle0RTTPacket(p receivedPacket) bool { + connID, err := wire.ParseConnectionID(p.data, 0) + if err != nil { + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketType0RTT, p.Size(), logging.PacketDropHeaderParseError) + } + return false + } + + // check again if we might have a connection now + if handler, ok := s.tr.Get(connID); ok { + handler.handlePacket(p) + return true + } + + if q, ok := s.zeroRTTQueues[connID]; ok { + if len(q.packets) >= protocol.Max0RTTQueueLen { + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketType0RTT, p.Size(), logging.PacketDropDOSPrevention) + } + return false + } + q.packets = append(q.packets, p) + return true + } + + if len(s.zeroRTTQueues) >= protocol.Max0RTTQueues { + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketType0RTT, p.Size(), logging.PacketDropDOSPrevention) + } + return false + } + queue := &zeroRTTQueue{packets: make([]receivedPacket, 1, 8)} + queue.packets[0] = p + expiration := p.rcvTime.Add(protocol.Max0RTTQueueingDuration) + queue.expiration = expiration + if s.nextZeroRTTCleanup.IsZero() || s.nextZeroRTTCleanup.After(expiration) { + s.nextZeroRTTCleanup = expiration + } + s.zeroRTTQueues[connID] = queue + return true +} + +func (s *baseServer) cleanupZeroRTTQueues(now time.Time) { + // Iterate over all queues to find those that are expired. + // This is ok since we're placing a pretty low limit on the number of queues. + var nextCleanup time.Time + for connID, q := range s.zeroRTTQueues { + if q.expiration.After(now) { + if nextCleanup.IsZero() || nextCleanup.After(q.expiration) { + nextCleanup = q.expiration + } + continue + } + for _, p := range q.packets { + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketType0RTT, p.Size(), logging.PacketDropDOSPrevention) + } + p.buffer.Release() + } + delete(s.zeroRTTQueues, connID) + if s.logger.Debug() { + s.logger.Debugf("Removing 0-RTT queue for %s.", connID) + } + } + s.nextZeroRTTCleanup = nextCleanup +} + +// validateToken returns false if: +// - address is invalid +// - token is expired +// - token is null +func (s *baseServer) validateToken(token *handshake.Token, addr net.Addr) bool { + if token == nil { + return false + } + if !token.ValidateRemoteAddr(addr) { + return false + } + if !token.IsRetryToken && time.Since(token.SentTime) > s.maxTokenAge { + return false + } + if token.IsRetryToken && time.Since(token.SentTime) > s.config.maxRetryTokenAge() { + return false + } + return true +} + +func (s *baseServer) handleInitialImpl(p receivedPacket, hdr *wire.Header) error { + if len(hdr.Token) == 0 && hdr.DestConnectionID.Len() < protocol.MinConnectionIDLenInitial { + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeInitial, p.Size(), logging.PacketDropUnexpectedPacket) + } + p.buffer.Release() + return errors.New("too short connection ID") + } + + // The server queues packets for a while, and we might already have established a connection by now. + // This results in a second check in the connection map. + // That's ok since it's not the hot path (it's only taken by some Initial and 0-RTT packets). + if handler, ok := s.tr.Get(hdr.DestConnectionID); ok { + handler.handlePacket(p) + return nil + } + + var ( + token *handshake.Token + retrySrcConnID *protocol.ConnectionID + clientAddrVerified bool + ) + origDestConnID := hdr.DestConnectionID + if len(hdr.Token) > 0 { + tok, err := s.tokenGenerator.DecodeToken(hdr.Token) + if err == nil { + if tok.IsRetryToken { + origDestConnID = tok.OriginalDestConnectionID + retrySrcConnID = &tok.RetrySrcConnectionID + } + token = tok + } + } + if token != nil { + clientAddrVerified = s.validateToken(token, p.remoteAddr) + if !clientAddrVerified { + // For invalid and expired non-retry tokens, we don't send an INVALID_TOKEN error. + // We just ignore them, and act as if there was no token on this packet at all. + // This also means we might send a Retry later. + if !token.IsRetryToken { + token = nil + } else { + // For Retry tokens, we send an INVALID_ERROR if + // * the token is too old, or + // * the token is invalid, in case of a retry token. + select { + case s.invalidTokenQueue <- rejectedPacket{receivedPacket: p, hdr: hdr}: + default: + // drop packet if we can't send out the INVALID_TOKEN packets fast enough + p.buffer.Release() + } + return nil + } + } + } + + if token == nil && s.verifySourceAddress != nil && s.verifySourceAddress(p.remoteAddr) { + // Retry invalidates all 0-RTT packets sent. + delete(s.zeroRTTQueues, hdr.DestConnectionID) + select { + case s.retryQueue <- rejectedPacket{receivedPacket: p, hdr: hdr}: + default: + // drop packet if we can't send out Retry packets fast enough + p.buffer.Release() + } + return nil + } + + // restore RTT from token + var rtt time.Duration + if token != nil && !token.IsRetryToken { + rtt = token.RTT + } + + config := s.config + clientInfo := &ClientInfo{ + RemoteAddr: p.remoteAddr, + AddrVerified: clientAddrVerified, + } + if s.config.GetConfigForClient != nil { + conf, err := s.config.GetConfigForClient(clientInfo) + if err != nil { + s.logger.Debugf("Rejecting new connection due to GetConfigForClient callback") + s.refuseNewConn(p, hdr) + return nil + } + config = populateConfig(conf) + } + + var conn *wrappedConn + var cancel context.CancelCauseFunc + ctx, cancel1 := context.WithCancelCause(context.Background()) + if s.connContext != nil { + var err error + ctx, err = s.connContext(ctx, clientInfo) + if err != nil { + cancel1(err) + s.logger.Debugf("Rejecting new connection due to ConnContext callback: %s", err) + s.refuseNewConn(p, hdr) + return nil + } + if ctx == nil { + panic("quic: ConnContext returned nil") + } + // There's no guarantee that the application returns a context + // that's derived from the context we passed into ConnContext. + // We need to make sure that both contexts are cancelled. + var cancel2 context.CancelCauseFunc + ctx, cancel2 = context.WithCancelCause(ctx) + cancel = func(cause error) { + cancel1(cause) + cancel2(cause) + } + } else { + cancel = cancel1 + } + ctx = context.WithValue(ctx, ConnectionTracingKey, nextConnTracingID()) + var tracer *logging.ConnectionTracer + if config.Tracer != nil { + // Use the same connection ID that is passed to the client's GetLogWriter callback. + connID := hdr.DestConnectionID + if origDestConnID.Len() > 0 { + connID = origDestConnID + } + tracer = config.Tracer(ctx, protocol.PerspectiveServer, connID) + } + connID, err := s.connIDGenerator.GenerateConnectionID() + if err != nil { + return err + } + s.logger.Debugf("Changing connection ID to %s.", connID) + conn = s.newConn( + ctx, + cancel, + newSendConn(s.conn, p.remoteAddr, p.info, s.logger), + s.tr, + origDestConnID, + retrySrcConnID, + hdr.DestConnectionID, + hdr.SrcConnectionID, + connID, + s.connIDGenerator, + s.statelessResetter, + config, + s.tlsConf, + s.tokenGenerator, + clientAddrVerified, + rtt, + tracer, + s.logger, + hdr.Version, + ) + conn.handlePacket(p) + // Adding the connection will fail if the client's chosen Destination Connection ID is already in use. + // This is very unlikely: Even if an attacker chooses a connection ID that's already in use, + // under normal circumstances the packet would just be routed to that connection. + // The only time this collision will occur if we receive the two Initial packets at the same time. + if added := s.tr.AddWithConnID(hdr.DestConnectionID, connID, conn); !added { + delete(s.zeroRTTQueues, hdr.DestConnectionID) + conn.closeWithTransportError(ConnectionRefused) + return nil + } + // Pass queued 0-RTT to the newly established connection. + if q, ok := s.zeroRTTQueues[hdr.DestConnectionID]; ok { + for _, p := range q.packets { + conn.handlePacket(p) + } + delete(s.zeroRTTQueues, hdr.DestConnectionID) + } + + s.handshakingCount.Add(1) + go func() { + defer s.handshakingCount.Done() + s.handleNewConn(conn) + }() + go conn.run() + return nil +} + +func (s *baseServer) refuseNewConn(p receivedPacket, hdr *wire.Header) { + delete(s.zeroRTTQueues, hdr.DestConnectionID) + select { + case s.connectionRefusedQueue <- rejectedPacket{receivedPacket: p, hdr: hdr}: + default: + // drop packet if we can't send out the CONNECTION_REFUSED fast enough + p.buffer.Release() + } +} + +func (s *baseServer) handleNewConn(conn *wrappedConn) { + if s.acceptEarlyConns { + // wait until the early connection is ready, the handshake fails, or the server is closed + select { + case <-s.errorChan: + conn.closeWithTransportError(ConnectionRefused) + return + case <-conn.Context().Done(): + return + case <-conn.earlyConnReady(): + } + } else { + // wait until the handshake completes, fails, or the server is closed + select { + case <-s.errorChan: + conn.closeWithTransportError(ConnectionRefused) + return + case <-conn.Context().Done(): + return + case <-conn.HandshakeComplete(): + } + } + + select { + case s.connQueue <- conn.Conn: + default: + conn.closeWithTransportError(ConnectionRefused) + } +} + +func (s *baseServer) sendRetry(p rejectedPacket) { + if err := s.sendRetryPacket(p); err != nil { + s.logger.Debugf("Error sending Retry packet: %s", err) + } +} + +func (s *baseServer) sendRetryPacket(p rejectedPacket) error { + hdr := p.hdr + // Log the Initial packet now. + // If no Retry is sent, the packet will be logged by the connection. + (&wire.ExtendedHeader{Header: *hdr}).Log(s.logger) + srcConnID, err := s.connIDGenerator.GenerateConnectionID() + if err != nil { + return err + } + token, err := s.tokenGenerator.NewRetryToken(p.remoteAddr, hdr.DestConnectionID, srcConnID) + if err != nil { + return err + } + replyHdr := &wire.ExtendedHeader{} + replyHdr.Type = protocol.PacketTypeRetry + replyHdr.Version = hdr.Version + replyHdr.SrcConnectionID = srcConnID + replyHdr.DestConnectionID = hdr.SrcConnectionID + replyHdr.Token = token + if s.logger.Debug() { + s.logger.Debugf("Changing connection ID to %s.", srcConnID) + s.logger.Debugf("-> Sending Retry") + replyHdr.Log(s.logger) + } + + buf := getPacketBuffer() + defer buf.Release() + buf.Data, err = replyHdr.Append(buf.Data, hdr.Version) + if err != nil { + return err + } + // append the Retry integrity tag + tag := handshake.GetRetryIntegrityTag(buf.Data, hdr.DestConnectionID, hdr.Version) + buf.Data = append(buf.Data, tag[:]...) + if s.tracer != nil && s.tracer.SentPacket != nil { + s.tracer.SentPacket(p.remoteAddr, &replyHdr.Header, protocol.ByteCount(len(buf.Data)), nil) + } + _, err = s.conn.WritePacket(buf.Data, p.remoteAddr, p.info.OOB(), 0, protocol.ECNUnsupported) + return err +} + +func (s *baseServer) maybeSendInvalidToken(p rejectedPacket) { + defer p.buffer.Release() + + // Only send INVALID_TOKEN if we can unprotect the packet. + // This makes sure that we won't send it for packets that were corrupted. + hdr := p.hdr + sealer, opener := handshake.NewInitialAEAD(hdr.DestConnectionID, protocol.PerspectiveServer, hdr.Version) + data := p.data[:hdr.ParsedLen()+hdr.Length] + extHdr, err := unpackLongHeader(opener, hdr, data) + // Only send INVALID_TOKEN if we can unprotect the packet. + // This makes sure that we won't send it for packets that were corrupted. + if err != nil { + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeInitial, p.Size(), logging.PacketDropHeaderParseError) + } + return + } + hdrLen := extHdr.ParsedLen() + if _, err := opener.Open(data[hdrLen:hdrLen], data[hdrLen:], extHdr.PacketNumber, data[:hdrLen]); err != nil { + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeInitial, p.Size(), logging.PacketDropPayloadDecryptError) + } + return + } + if s.logger.Debug() { + s.logger.Debugf("Client sent an invalid retry token. Sending INVALID_TOKEN to %s.", p.remoteAddr) + } + if err := s.sendError(p.remoteAddr, hdr, sealer, InvalidToken, p.info); err != nil { + s.logger.Debugf("Error sending INVALID_TOKEN error: %s", err) + } +} + +func (s *baseServer) sendConnectionRefused(p rejectedPacket) { + defer p.buffer.Release() + sealer, _ := handshake.NewInitialAEAD(p.hdr.DestConnectionID, protocol.PerspectiveServer, p.hdr.Version) + if err := s.sendError(p.remoteAddr, p.hdr, sealer, ConnectionRefused, p.info); err != nil { + s.logger.Debugf("Error sending CONNECTION_REFUSED error: %s", err) + } +} + +// sendError sends the error as a response to the packet received with header hdr +func (s *baseServer) sendError(remoteAddr net.Addr, hdr *wire.Header, sealer handshake.LongHeaderSealer, errorCode qerr.TransportErrorCode, info packetInfo) error { + b := getPacketBuffer() + defer b.Release() + + ccf := &wire.ConnectionCloseFrame{ErrorCode: uint64(errorCode)} + + replyHdr := &wire.ExtendedHeader{} + replyHdr.Type = protocol.PacketTypeInitial + replyHdr.Version = hdr.Version + replyHdr.SrcConnectionID = hdr.DestConnectionID + replyHdr.DestConnectionID = hdr.SrcConnectionID + replyHdr.PacketNumberLen = protocol.PacketNumberLen4 + replyHdr.Length = 4 /* packet number len */ + ccf.Length(hdr.Version) + protocol.ByteCount(sealer.Overhead()) + var err error + b.Data, err = replyHdr.Append(b.Data, hdr.Version) + if err != nil { + return err + } + payloadOffset := len(b.Data) + + b.Data, err = ccf.Append(b.Data, hdr.Version) + if err != nil { + return err + } + + _ = sealer.Seal(b.Data[payloadOffset:payloadOffset], b.Data[payloadOffset:], replyHdr.PacketNumber, b.Data[:payloadOffset]) + b.Data = b.Data[0 : len(b.Data)+sealer.Overhead()] + + pnOffset := payloadOffset - int(replyHdr.PacketNumberLen) + sealer.EncryptHeader( + b.Data[pnOffset+4:pnOffset+4+16], + &b.Data[0], + b.Data[pnOffset:payloadOffset], + ) + + replyHdr.Log(s.logger) + wire.LogFrame(s.logger, ccf, true) + if s.tracer != nil && s.tracer.SentPacket != nil { + s.tracer.SentPacket(remoteAddr, &replyHdr.Header, protocol.ByteCount(len(b.Data)), []logging.Frame{ccf}) + } + _, err = s.conn.WritePacket(b.Data, remoteAddr, info.OOB(), 0, protocol.ECNUnsupported) + return err +} + +func (s *baseServer) enqueueVersionNegotiationPacket(p receivedPacket) (bufferInUse bool) { + select { + case s.versionNegotiationQueue <- p: + return true + default: + // it's fine to not send version negotiation packets when we are busy + } + return false +} + +func (s *baseServer) maybeSendVersionNegotiationPacket(p receivedPacket) { + defer p.buffer.Release() + + v, err := wire.ParseVersion(p.data) + if err != nil { + s.logger.Debugf("failed to parse version for sending version negotiation packet: %s", err) + return + } + + _, src, dest, err := wire.ParseArbitraryLenConnectionIDs(p.data) + if err != nil { // should never happen + s.logger.Debugf("Dropping a packet with an unknown version for which we failed to parse connection IDs") + if s.tracer != nil && s.tracer.DroppedPacket != nil { + s.tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropUnexpectedPacket) + } + return + } + + s.logger.Debugf("Client offered version %s, sending Version Negotiation", v) + + data := wire.ComposeVersionNegotiation(dest, src, s.config.Versions) + if s.tracer != nil && s.tracer.SentVersionNegotiationPacket != nil { + s.tracer.SentVersionNegotiationPacket(p.remoteAddr, src, dest, s.config.Versions) + } + if _, err := s.conn.WritePacket(data, p.remoteAddr, p.info.OOB(), 0, protocol.ECNUnsupported); err != nil { + s.logger.Debugf("Error sending Version Negotiation: %s", err) + } +} diff --git a/vendor/github.com/quic-go/quic-go/sni.go b/vendor/github.com/quic-go/quic-go/sni.go new file mode 100644 index 0000000..f63023f --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sni.go @@ -0,0 +1,136 @@ +package quic + +import ( + "encoding/binary" + "errors" + "io" +) + +const ( + extTypeSNI = 0 + extTypeECH = 0xfe0d +) + +// findSNIAndECH parses the given byte slice as a ClientHello, and locates: +// - the position and length of the Server Name Indication (SNI) extension, +// - the position of the Encrypted Client Hello (ECH) extension. +// If no SNI extension is found, it returns -1 for the SNI position. +// If no ECH extension is found, it returns -1 for the ECH position. +func findSNIAndECH(data []byte) (sniPos, sniLen, echPos int, err error) { + if len(data) < 4 { + return 0, 0, 0, io.ErrUnexpectedEOF + } + if data[0] != 1 { + return 0, 0, 0, errors.New("not a ClientHello") + } + handshakeLen := int(data[1])<<16 | int(data[2])<<8 | int(data[3]) + if len(data) != 4+handshakeLen { + return 0, 0, 0, io.ErrUnexpectedEOF + } + + parsePos := 4 + // Skip protocol version (2 bytes) + if parsePos+2 > len(data) { + return 0, 0, 0, io.ErrUnexpectedEOF + } + parsePos += 2 + // skip random (32 bytes) + if parsePos+32 > len(data) { + return 0, 0, 0, io.ErrUnexpectedEOF + } + parsePos += 32 + // session ID + if parsePos+1 > len(data) { + return 0, 0, 0, io.ErrUnexpectedEOF + } + sessionIDLen := int(data[parsePos]) + parsePos++ + if parsePos+sessionIDLen > len(data) { + return 0, 0, 0, io.ErrUnexpectedEOF + } + parsePos += sessionIDLen + // cipher suites + if parsePos+2 > len(data) { + return 0, 0, 0, io.ErrUnexpectedEOF + } + cipherSuitesLen := int(binary.BigEndian.Uint16(data[parsePos:])) + parsePos += 2 + if parsePos+cipherSuitesLen > len(data) { + return 0, 0, 0, io.ErrUnexpectedEOF + } + parsePos += cipherSuitesLen + // compression methods + if parsePos+1 > len(data) { + return 0, 0, 0, io.ErrUnexpectedEOF + } + compressionMethodsLen := int(data[parsePos]) + parsePos++ + if parsePos+compressionMethodsLen > len(data) { + return 0, 0, 0, io.ErrUnexpectedEOF + } + parsePos += compressionMethodsLen + + // extensions + if parsePos+2 > len(data) { + return 0, 0, 0, io.ErrUnexpectedEOF + } + extensionsLen := int(binary.BigEndian.Uint16(data[parsePos:])) + parsePos += 2 + if parsePos+extensionsLen > len(data) { + return 0, 0, 0, io.ErrUnexpectedEOF + } + extensionsStart := parsePos + extensions := data[extensionsStart : extensionsStart+extensionsLen] + + // parse extensions + var extPos int + sniPos = -1 + echPos = -1 + for extPos+4 <= extensionsLen { + extType := binary.BigEndian.Uint16(extensions[extPos:]) + extLen := int(binary.BigEndian.Uint16(extensions[extPos+2:])) + if extPos+4+extLen > extensionsLen { + return 0, 0, 0, io.ErrUnexpectedEOF + } + switch extType { + case extTypeSNI: + if sniPos != -1 { + return 0, 0, 0, errors.New("multiple SNI extensions") + } + sniData := extensions[extPos+4 : extPos+4+extLen] + if len(sniData) < 2 { + return 0, 0, 0, io.ErrUnexpectedEOF + } + nameListLen := int(binary.BigEndian.Uint16(sniData)) + if len(sniData) != 2+nameListLen { + return 0, 0, 0, io.ErrUnexpectedEOF + } + listPos := 2 + for listPos+3 <= nameListLen+2 { + nameType := sniData[listPos] + sniLen = int(binary.BigEndian.Uint16(sniData[listPos+1:])) + if listPos+3+sniLen > len(sniData) { + return 0, 0, 0, io.ErrUnexpectedEOF + } + if nameType == 0 { // host_name + sniPos = extensionsStart + extPos + 4 + listPos + 3 + break // stop after first host_name + } + listPos += 3 + sniLen + } + if sniPos == 0 { + return 0, 0, 0, errors.New("SNI host_name not found") + } + case extTypeECH: + if echPos != -1 { + return 0, 0, 0, errors.New("multiple ECH extensions") + } + echPos = extensionsStart + extPos + } + extPos += 4 + extLen + if sniPos != -1 && echPos != -1 { + break + } + } + return sniPos, sniLen, echPos, nil +} diff --git a/vendor/github.com/quic-go/quic-go/stateless_reset.go b/vendor/github.com/quic-go/quic-go/stateless_reset.go new file mode 100644 index 0000000..cd0059a --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/stateless_reset.go @@ -0,0 +1,42 @@ +package quic + +import ( + "crypto/hmac" + "crypto/rand" + "crypto/sha256" + "hash" + "sync" + + "github.com/quic-go/quic-go/internal/protocol" +) + +type statelessResetter struct { + mx sync.Mutex + h hash.Hash +} + +// newStatelessRetter creates a new stateless reset generator. +// It is valid to use a nil key. In that case, a random key will be used. +// This makes is impossible for on-path attackers to shut down established connections. +func newStatelessResetter(key *StatelessResetKey) *statelessResetter { + var h hash.Hash + if key != nil { + h = hmac.New(sha256.New, key[:]) + } else { + b := make([]byte, 32) + _, _ = rand.Read(b) + h = hmac.New(sha256.New, b) + } + return &statelessResetter{h: h} +} + +func (r *statelessResetter) GetStatelessResetToken(connID protocol.ConnectionID) protocol.StatelessResetToken { + r.mx.Lock() + defer r.mx.Unlock() + + var token protocol.StatelessResetToken + r.h.Write(connID.Bytes()) + copy(token[:], r.h.Sum(nil)) + r.h.Reset() + return token +} diff --git a/vendor/github.com/quic-go/quic-go/stream.go b/vendor/github.com/quic-go/quic-go/stream.go new file mode 100644 index 0000000..64bcc83 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/stream.go @@ -0,0 +1,216 @@ +package quic + +import ( + "context" + "net" + "os" + "sync" + "time" + + "github.com/quic-go/quic-go/internal/ackhandler" + "github.com/quic-go/quic-go/internal/flowcontrol" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/wire" +) + +type deadlineError struct{} + +func (deadlineError) Error() string { return "deadline exceeded" } +func (deadlineError) Temporary() bool { return true } +func (deadlineError) Timeout() bool { return true } +func (deadlineError) Unwrap() error { return os.ErrDeadlineExceeded } + +var errDeadline net.Error = &deadlineError{} + +// The streamSender is notified by the stream about various events. +type streamSender interface { + onHasConnectionData() + onHasStreamData(protocol.StreamID, *SendStream) + onHasStreamControlFrame(protocol.StreamID, streamControlFrameGetter) + // must be called without holding the mutex that is acquired by closeForShutdown + onStreamCompleted(protocol.StreamID) +} + +// Each of the both stream halves gets its own uniStreamSender. +// This is necessary in order to keep track when both halves have been completed. +type uniStreamSender struct { + streamSender + onStreamCompletedImpl func() + onHasStreamControlFrameImpl func(protocol.StreamID, streamControlFrameGetter) +} + +func (s *uniStreamSender) onHasStreamData(id protocol.StreamID, str *SendStream) { + s.streamSender.onHasStreamData(id, str) +} +func (s *uniStreamSender) onStreamCompleted(protocol.StreamID) { s.onStreamCompletedImpl() } +func (s *uniStreamSender) onHasStreamControlFrame(id protocol.StreamID, str streamControlFrameGetter) { + s.onHasStreamControlFrameImpl(id, str) +} + +var _ streamSender = &uniStreamSender{} + +type Stream struct { + receiveStr *ReceiveStream + sendStr *SendStream + + completedMutex sync.Mutex + sender streamSender + receiveStreamCompleted bool + sendStreamCompleted bool +} + +var ( + _ outgoingStream = &Stream{} + _ sendStreamFrameHandler = &Stream{} + _ receiveStreamFrameHandler = &Stream{} +) + +// newStream creates a new Stream +func newStream( + ctx context.Context, + streamID protocol.StreamID, + sender streamSender, + flowController flowcontrol.StreamFlowController, + supportsResetStreamAt bool, +) *Stream { + s := &Stream{sender: sender} + senderForSendStream := &uniStreamSender{ + streamSender: sender, + onStreamCompletedImpl: func() { + s.completedMutex.Lock() + s.sendStreamCompleted = true + s.checkIfCompleted() + s.completedMutex.Unlock() + }, + onHasStreamControlFrameImpl: func(id protocol.StreamID, str streamControlFrameGetter) { + sender.onHasStreamControlFrame(streamID, s) + }, + } + s.sendStr = newSendStream(ctx, streamID, senderForSendStream, flowController, supportsResetStreamAt) + senderForReceiveStream := &uniStreamSender{ + streamSender: sender, + onStreamCompletedImpl: func() { + s.completedMutex.Lock() + s.receiveStreamCompleted = true + s.checkIfCompleted() + s.completedMutex.Unlock() + }, + onHasStreamControlFrameImpl: func(id protocol.StreamID, str streamControlFrameGetter) { + sender.onHasStreamControlFrame(streamID, s) + }, + } + s.receiveStr = newReceiveStream(streamID, senderForReceiveStream, flowController) + return s +} + +// StreamID returns the stream ID. +func (s *Stream) StreamID() protocol.StreamID { + // the result is same for receiveStream and sendStream + return s.sendStr.StreamID() +} + +// Read reads data from the stream. +// Read can be made to time out using [Stream.SetReadDeadline] and [Stream.SetDeadline]. +// If the stream was canceled, the error is a [StreamError]. +func (s *Stream) Read(p []byte) (int, error) { + return s.receiveStr.Read(p) +} + +// Write writes data to the stream. +// Write can be made to time out using [Stream.SetWriteDeadline] or [Stream.SetDeadline]. +// If the stream was canceled, the error is a [StreamError]. +func (s *Stream) Write(p []byte) (int, error) { + return s.sendStr.Write(p) +} + +// CancelWrite aborts sending on this stream. +// See [SendStream.CancelWrite] for more details. +func (s *Stream) CancelWrite(errorCode StreamErrorCode) { + s.sendStr.CancelWrite(errorCode) +} + +// CancelRead aborts receiving on this stream. +// See [ReceiveStream.CancelRead] for more details. +func (s *Stream) CancelRead(errorCode StreamErrorCode) { + s.receiveStr.CancelRead(errorCode) +} + +// The Context is canceled as soon as the write-side of the stream is closed. +// See [SendStream.Context] for more details. +func (s *Stream) Context() context.Context { + return s.sendStr.Context() +} + +// Close closes the send-direction of the stream. +// It does not close the receive-direction of the stream. +func (s *Stream) Close() error { + return s.sendStr.Close() +} + +func (s *Stream) handleResetStreamFrame(frame *wire.ResetStreamFrame, rcvTime time.Time) error { + return s.receiveStr.handleResetStreamFrame(frame, rcvTime) +} + +func (s *Stream) handleStreamFrame(frame *wire.StreamFrame, rcvTime time.Time) error { + return s.receiveStr.handleStreamFrame(frame, rcvTime) +} + +func (s *Stream) handleStopSendingFrame(frame *wire.StopSendingFrame) { + s.sendStr.handleStopSendingFrame(frame) +} + +func (s *Stream) updateSendWindow(limit protocol.ByteCount) { + s.sendStr.updateSendWindow(limit) +} + +func (s *Stream) enableResetStreamAt() { + s.sendStr.enableResetStreamAt() +} + +func (s *Stream) popStreamFrame(maxBytes protocol.ByteCount, v protocol.Version) (_ ackhandler.StreamFrame, _ *wire.StreamDataBlockedFrame, hasMore bool) { + return s.sendStr.popStreamFrame(maxBytes, v) +} + +func (s *Stream) getControlFrame(now time.Time) (_ ackhandler.Frame, ok, hasMore bool) { + f, ok, _ := s.sendStr.getControlFrame(now) + if ok { + return f, true, true + } + return s.receiveStr.getControlFrame(now) +} + +// SetReadDeadline sets the deadline for future Read calls. +// See [ReceiveStream.SetReadDeadline] for more details. +func (s *Stream) SetReadDeadline(t time.Time) error { + return s.receiveStr.SetReadDeadline(t) +} + +// SetWriteDeadline sets the deadline for future Write calls. +// See [SendStream.SetWriteDeadline] for more details. +func (s *Stream) SetWriteDeadline(t time.Time) error { + return s.sendStr.SetWriteDeadline(t) +} + +// SetDeadline sets the read and write deadlines associated with the stream. +// It is equivalent to calling both SetReadDeadline and SetWriteDeadline. +func (s *Stream) SetDeadline(t time.Time) error { + _ = s.receiveStr.SetReadDeadline(t) // SetReadDeadline never errors + _ = s.sendStr.SetWriteDeadline(t) // SetWriteDeadline never errors + return nil +} + +// CloseForShutdown closes a stream abruptly. +// It makes Read and Write unblock (and return the error) immediately. +// The peer will NOT be informed about this: the stream is closed without sending a FIN or RST. +func (s *Stream) closeForShutdown(err error) { + s.sendStr.closeForShutdown(err) + s.receiveStr.closeForShutdown(err) +} + +// checkIfCompleted is called from the uniStreamSender, when one of the stream halves is completed. +// It makes sure that the onStreamCompleted callback is only called if both receive and send side have completed. +func (s *Stream) checkIfCompleted() { + if s.sendStreamCompleted && s.receiveStreamCompleted { + s.sender.onStreamCompleted(s.StreamID()) + } +} diff --git a/vendor/github.com/quic-go/quic-go/streams_map.go b/vendor/github.com/quic-go/quic-go/streams_map.go new file mode 100644 index 0000000..14be5ad --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/streams_map.go @@ -0,0 +1,354 @@ +package quic + +import ( + "context" + "fmt" + "sync" + "time" + + "github.com/quic-go/quic-go/internal/flowcontrol" + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/wire" +) + +// StreamLimitReachedError is returned from Conn.OpenStream and Conn.OpenUniStream +// when it is not possible to open a new stream because the number of opens streams reached +// the peer's stream limit. +type StreamLimitReachedError struct{} + +func (e StreamLimitReachedError) Error() string { return "too many open streams" } + +type streamsMap struct { + ctx context.Context // not used for cancellations, but carries the values associated with the connection + perspective protocol.Perspective + + maxIncomingBidiStreams uint64 + maxIncomingUniStreams uint64 + + sender streamSender + queueControlFrame func(wire.Frame) + newFlowController func(protocol.StreamID) flowcontrol.StreamFlowController + + mutex sync.Mutex + outgoingBidiStreams *outgoingStreamsMap[*Stream] + outgoingUniStreams *outgoingStreamsMap[*SendStream] + incomingBidiStreams *incomingStreamsMap[*Stream] + incomingUniStreams *incomingStreamsMap[*ReceiveStream] + reset bool + supportsResetStreamAt bool +} + +func newStreamsMap( + ctx context.Context, + sender streamSender, + queueControlFrame func(wire.Frame), + newFlowController func(protocol.StreamID) flowcontrol.StreamFlowController, + maxIncomingBidiStreams uint64, + maxIncomingUniStreams uint64, + perspective protocol.Perspective, +) *streamsMap { + m := &streamsMap{ + ctx: ctx, + perspective: perspective, + queueControlFrame: queueControlFrame, + newFlowController: newFlowController, + maxIncomingBidiStreams: maxIncomingBidiStreams, + maxIncomingUniStreams: maxIncomingUniStreams, + sender: sender, + } + m.initMaps() + return m +} + +func (m *streamsMap) initMaps() { + m.outgoingBidiStreams = newOutgoingStreamsMap( + protocol.StreamTypeBidi, + func(id protocol.StreamID) *Stream { + return newStream(m.ctx, id, m.sender, m.newFlowController(id), m.supportsResetStreamAt) + }, + m.queueControlFrame, + m.perspective, + ) + m.incomingBidiStreams = newIncomingStreamsMap( + protocol.StreamTypeBidi, + func(id protocol.StreamID) *Stream { + return newStream(m.ctx, id, m.sender, m.newFlowController(id), m.supportsResetStreamAt) + }, + m.maxIncomingBidiStreams, + m.queueControlFrame, + m.perspective, + ) + m.outgoingUniStreams = newOutgoingStreamsMap( + protocol.StreamTypeUni, + func(id protocol.StreamID) *SendStream { + return newSendStream(m.ctx, id, m.sender, m.newFlowController(id), m.supportsResetStreamAt) + }, + m.queueControlFrame, + m.perspective, + ) + m.incomingUniStreams = newIncomingStreamsMap( + protocol.StreamTypeUni, + func(id protocol.StreamID) *ReceiveStream { + return newReceiveStream(id, m.sender, m.newFlowController(id)) + }, + m.maxIncomingUniStreams, + m.queueControlFrame, + m.perspective, + ) +} + +func (m *streamsMap) OpenStream() (*Stream, error) { + m.mutex.Lock() + reset := m.reset + mm := m.outgoingBidiStreams + m.mutex.Unlock() + if reset { + return nil, Err0RTTRejected + } + return mm.OpenStream() +} + +func (m *streamsMap) OpenStreamSync(ctx context.Context) (*Stream, error) { + m.mutex.Lock() + reset := m.reset + mm := m.outgoingBidiStreams + m.mutex.Unlock() + if reset { + return nil, Err0RTTRejected + } + return mm.OpenStreamSync(ctx) +} + +func (m *streamsMap) OpenUniStream() (*SendStream, error) { + m.mutex.Lock() + reset := m.reset + mm := m.outgoingUniStreams + m.mutex.Unlock() + if reset { + return nil, Err0RTTRejected + } + return mm.OpenStream() +} + +func (m *streamsMap) OpenUniStreamSync(ctx context.Context) (*SendStream, error) { + m.mutex.Lock() + reset := m.reset + mm := m.outgoingUniStreams + m.mutex.Unlock() + if reset { + return nil, Err0RTTRejected + } + return mm.OpenStreamSync(ctx) +} + +func (m *streamsMap) AcceptStream(ctx context.Context) (*Stream, error) { + m.mutex.Lock() + reset := m.reset + mm := m.incomingBidiStreams + m.mutex.Unlock() + if reset { + return nil, Err0RTTRejected + } + return mm.AcceptStream(ctx) +} + +func (m *streamsMap) AcceptUniStream(ctx context.Context) (*ReceiveStream, error) { + m.mutex.Lock() + reset := m.reset + mm := m.incomingUniStreams + m.mutex.Unlock() + if reset { + return nil, Err0RTTRejected + } + return mm.AcceptStream(ctx) +} + +func (m *streamsMap) DeleteStream(id protocol.StreamID) error { + switch id.Type() { + case protocol.StreamTypeUni: + if id.InitiatedBy() == m.perspective { + return m.outgoingUniStreams.DeleteStream(id) + } + return m.incomingUniStreams.DeleteStream(id) + case protocol.StreamTypeBidi: + if id.InitiatedBy() == m.perspective { + return m.outgoingBidiStreams.DeleteStream(id) + } + return m.incomingBidiStreams.DeleteStream(id) + } + panic("") +} + +func (m *streamsMap) HandleMaxStreamsFrame(f *wire.MaxStreamsFrame) { + switch f.Type { + case protocol.StreamTypeUni: + m.outgoingUniStreams.SetMaxStream(f.MaxStreamNum.StreamID(protocol.StreamTypeUni, m.perspective)) + case protocol.StreamTypeBidi: + m.outgoingBidiStreams.SetMaxStream(f.MaxStreamNum.StreamID(protocol.StreamTypeBidi, m.perspective)) + } +} + +type sendStreamFrameHandler interface { + updateSendWindow(protocol.ByteCount) + handleStopSendingFrame(*wire.StopSendingFrame) +} + +func (m *streamsMap) getSendStream(id protocol.StreamID) (sendStreamFrameHandler, error) { + switch id.Type() { + case protocol.StreamTypeUni: + if id.InitiatedBy() != m.perspective { + // an outgoing unidirectional stream is a send stream, not a receive stream + return nil, &qerr.TransportError{ + ErrorCode: qerr.StreamStateError, + ErrorMessage: fmt.Sprintf("invalid frame for send stream %d", id), + } + } + str, err := m.outgoingUniStreams.GetStream(id) + if str == nil || err != nil { + return nil, err + } + return str, nil + case protocol.StreamTypeBidi: + if id.InitiatedBy() == m.perspective { + str, err := m.outgoingBidiStreams.GetStream(id) + if str == nil || err != nil { + return nil, err + } + return str, nil + } + str, err := m.incomingBidiStreams.GetOrOpenStream(id) + if str == nil || err != nil { + return nil, err + } + return str, nil + } + panic("unreachable") +} + +func (m *streamsMap) HandleMaxStreamDataFrame(f *wire.MaxStreamDataFrame) error { + str, err := m.getSendStream(f.StreamID) + if err != nil { + return err + } + if str == nil { // stream already deleted + return nil + } + str.updateSendWindow(f.MaximumStreamData) + return nil +} + +func (m *streamsMap) HandleStopSendingFrame(f *wire.StopSendingFrame) error { + str, err := m.getSendStream(f.StreamID) + if err != nil { + return err + } + if str == nil { // stream already deleted + return nil + } + str.handleStopSendingFrame(f) + return nil +} + +type receiveStreamFrameHandler interface { + handleResetStreamFrame(*wire.ResetStreamFrame, time.Time) error + handleStreamFrame(*wire.StreamFrame, time.Time) error +} + +func (m *streamsMap) getReceiveStream(id protocol.StreamID) (receiveStreamFrameHandler, error) { + switch id.Type() { + case protocol.StreamTypeUni: + // an outgoing unidirectional stream is a send stream, not a receive stream + if id.InitiatedBy() == m.perspective { + return nil, &qerr.TransportError{ + ErrorCode: qerr.StreamStateError, + ErrorMessage: fmt.Sprintf("invalid frame for receive stream %d", id), + } + } + str, err := m.incomingUniStreams.GetOrOpenStream(id) + if err != nil || str == nil { + return nil, err + } + return str, nil + case protocol.StreamTypeBidi: + var str *Stream + var err error + if id.InitiatedBy() == m.perspective { + str, err = m.outgoingBidiStreams.GetStream(id) + } else { + str, err = m.incomingBidiStreams.GetOrOpenStream(id) + } + if str == nil || err != nil { + return nil, err + } + return str, nil + } + panic("unreachable") +} + +func (m *streamsMap) HandleStreamDataBlockedFrame(f *wire.StreamDataBlockedFrame) error { + if _, err := m.getReceiveStream(f.StreamID); err != nil { + return err + } + // We don't need to do anything in response to a STREAM_DATA_BLOCKED frame, + // but we need to make sure that the stream ID is valid. + return nil // we don't need to do anything in response to a STREAM_DATA_BLOCKED frame +} + +func (m *streamsMap) HandleResetStreamFrame(f *wire.ResetStreamFrame, rcvTime time.Time) error { + str, err := m.getReceiveStream(f.StreamID) + if err != nil { + return err + } + if str == nil { // stream already deleted + return nil + } + return str.handleResetStreamFrame(f, rcvTime) +} + +func (m *streamsMap) HandleStreamFrame(f *wire.StreamFrame, rcvTime time.Time) error { + str, err := m.getReceiveStream(f.StreamID) + if err != nil { + return err + } + if str == nil { // stream already deleted + return nil + } + return str.handleStreamFrame(f, rcvTime) +} + +func (m *streamsMap) HandleTransportParameters(p *wire.TransportParameters) { + m.supportsResetStreamAt = p.EnableResetStreamAt + m.outgoingBidiStreams.EnableResetStreamAt() + m.outgoingUniStreams.EnableResetStreamAt() + m.outgoingBidiStreams.UpdateSendWindow(p.InitialMaxStreamDataBidiRemote) + m.outgoingBidiStreams.SetMaxStream(p.MaxBidiStreamNum.StreamID(protocol.StreamTypeBidi, m.perspective)) + m.outgoingUniStreams.UpdateSendWindow(p.InitialMaxStreamDataUni) + m.outgoingUniStreams.SetMaxStream(p.MaxUniStreamNum.StreamID(protocol.StreamTypeUni, m.perspective)) +} + +func (m *streamsMap) CloseWithError(err error) { + m.outgoingBidiStreams.CloseWithError(err) + m.outgoingUniStreams.CloseWithError(err) + m.incomingBidiStreams.CloseWithError(err) + m.incomingUniStreams.CloseWithError(err) +} + +// ResetFor0RTT resets is used when 0-RTT is rejected. In that case, the streams maps are +// 1. closed with an Err0RTTRejected, making calls to Open{Uni}Stream{Sync} / Accept{Uni}Stream return that error. +// 2. reset to their initial state, such that we can immediately process new incoming stream data. +// Afterwards, calls to Open{Uni}Stream{Sync} / Accept{Uni}Stream will continue to return the error, +// until UseResetMaps() has been called. +func (m *streamsMap) ResetFor0RTT() { + m.mutex.Lock() + defer m.mutex.Unlock() + m.reset = true + m.CloseWithError(Err0RTTRejected) + m.initMaps() +} + +func (m *streamsMap) UseResetMaps() { + m.mutex.Lock() + m.reset = false + m.mutex.Unlock() +} diff --git a/vendor/github.com/quic-go/quic-go/streams_map_incoming.go b/vendor/github.com/quic-go/quic-go/streams_map_incoming.go new file mode 100644 index 0000000..c714eaf --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/streams_map_incoming.go @@ -0,0 +1,209 @@ +package quic + +import ( + "context" + "fmt" + "sync" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/wire" +) + +type incomingStream interface { + closeForShutdown(error) +} + +// When a stream is deleted before it was accepted, we can't delete it from the map immediately. +// We need to wait until the application accepts it, and delete it then. +type incomingStreamEntry[T incomingStream] struct { + stream T + shouldDelete bool +} + +type incomingStreamsMap[T incomingStream] struct { + mutex sync.RWMutex + newStreamChan chan struct{} + + streamType protocol.StreamType + streams map[protocol.StreamID]incomingStreamEntry[T] + + nextStreamToAccept protocol.StreamID // the next stream that will be returned by AcceptStream() + nextStreamToOpen protocol.StreamID // the highest stream that the peer opened + maxStream protocol.StreamID // the highest stream that the peer is allowed to open + maxNumStreams uint64 // maximum number of streams + + newStream func(protocol.StreamID) T + queueMaxStreamID func(*wire.MaxStreamsFrame) + + closeErr error +} + +func newIncomingStreamsMap[T incomingStream]( + streamType protocol.StreamType, + newStream func(protocol.StreamID) T, + maxStreams uint64, + queueControlFrame func(wire.Frame), + pers protocol.Perspective, +) *incomingStreamsMap[T] { + var nextStreamToAccept protocol.StreamID + switch { + case streamType == protocol.StreamTypeBidi && pers == protocol.PerspectiveServer: + nextStreamToAccept = protocol.FirstIncomingBidiStreamServer + case streamType == protocol.StreamTypeBidi && pers == protocol.PerspectiveClient: + nextStreamToAccept = protocol.FirstIncomingBidiStreamClient + case streamType == protocol.StreamTypeUni && pers == protocol.PerspectiveServer: + nextStreamToAccept = protocol.FirstIncomingUniStreamServer + case streamType == protocol.StreamTypeUni && pers == protocol.PerspectiveClient: + nextStreamToAccept = protocol.FirstIncomingUniStreamClient + } + return &incomingStreamsMap[T]{ + newStreamChan: make(chan struct{}, 1), + streamType: streamType, + streams: make(map[protocol.StreamID]incomingStreamEntry[T]), + maxStream: protocol.StreamNum(maxStreams).StreamID(streamType, pers.Opposite()), + maxNumStreams: maxStreams, + newStream: newStream, + nextStreamToOpen: nextStreamToAccept, + nextStreamToAccept: nextStreamToAccept, + queueMaxStreamID: func(f *wire.MaxStreamsFrame) { queueControlFrame(f) }, + } +} + +func (m *incomingStreamsMap[T]) AcceptStream(ctx context.Context) (T, error) { + // drain the newStreamChan, so we don't check the map twice if the stream doesn't exist + select { + case <-m.newStreamChan: + default: + } + + m.mutex.Lock() + + var id protocol.StreamID + var entry incomingStreamEntry[T] + for { + id = m.nextStreamToAccept + if m.closeErr != nil { + m.mutex.Unlock() + return *new(T), m.closeErr + } + var ok bool + entry, ok = m.streams[id] + if ok { + break + } + m.mutex.Unlock() + select { + case <-ctx.Done(): + return *new(T), ctx.Err() + case <-m.newStreamChan: + } + m.mutex.Lock() + } + m.nextStreamToAccept += 4 + // If this stream was completed before being accepted, we can delete it now. + if entry.shouldDelete { + if err := m.deleteStream(id); err != nil { + m.mutex.Unlock() + return *new(T), err + } + } + m.mutex.Unlock() + return entry.stream, nil +} + +func (m *incomingStreamsMap[T]) GetOrOpenStream(id protocol.StreamID) (T, error) { + m.mutex.RLock() + if id > m.maxStream { + m.mutex.RUnlock() + return *new(T), &qerr.TransportError{ + ErrorCode: qerr.StreamLimitError, + ErrorMessage: fmt.Sprintf("peer tried to open stream %d (current limit: %d)", id, m.maxStream), + } + } + // if the num is smaller than the highest we accepted + // * this stream exists in the map, and we can return it, or + // * this stream was already closed, then we can return the nil + if id < m.nextStreamToOpen { + var s T + // If the stream was already queued for deletion, and is just waiting to be accepted, don't return it. + if entry, ok := m.streams[id]; ok && !entry.shouldDelete { + s = entry.stream + } + m.mutex.RUnlock() + return s, nil + } + m.mutex.RUnlock() + + m.mutex.Lock() + // no need to check the two error conditions from above again + // * maxStream can only increase, so if the id was valid before, it definitely is valid now + // * highestStream is only modified by this function + for newNum := m.nextStreamToOpen; newNum <= id; newNum += 4 { + m.streams[newNum] = incomingStreamEntry[T]{stream: m.newStream(newNum)} + select { + case m.newStreamChan <- struct{}{}: + default: + } + } + m.nextStreamToOpen = id + 4 + entry := m.streams[id] + m.mutex.Unlock() + return entry.stream, nil +} + +func (m *incomingStreamsMap[T]) DeleteStream(id protocol.StreamID) error { + m.mutex.Lock() + defer m.mutex.Unlock() + + if err := m.deleteStream(id); err != nil { + return &qerr.TransportError{ + ErrorCode: qerr.StreamStateError, + ErrorMessage: err.Error(), + } + } + return nil +} + +func (m *incomingStreamsMap[T]) deleteStream(id protocol.StreamID) error { + if _, ok := m.streams[id]; !ok { + return fmt.Errorf("tried to delete unknown incoming stream %d", id) + } + + // Don't delete this stream yet, if it was not yet accepted. + // Just save it to streamsToDelete map, to make sure it is deleted as soon as it gets accepted. + if id >= m.nextStreamToAccept { + entry, ok := m.streams[id] + if ok && entry.shouldDelete { + return fmt.Errorf("tried to delete incoming stream %d multiple times", id) + } + entry.shouldDelete = true + m.streams[id] = entry // can't assign to struct in map, so we need to reassign + return nil + } + + delete(m.streams, id) + // queue a MAX_STREAM_ID frame, giving the peer the option to open a new stream + if m.maxNumStreams > uint64(len(m.streams)) { + maxStream := m.nextStreamToOpen + 4*protocol.StreamID(m.maxNumStreams-uint64(len(m.streams))-1) + // never send a value larger than the maximum value for a stream number + if maxStream <= protocol.MaxStreamID { + m.maxStream = maxStream + m.queueMaxStreamID(&wire.MaxStreamsFrame{ + Type: m.streamType, + MaxStreamNum: m.maxStream.StreamNum(), + }) + } + } + return nil +} + +func (m *incomingStreamsMap[T]) CloseWithError(err error) { + m.mutex.Lock() + m.closeErr = err + for _, entry := range m.streams { + entry.stream.closeForShutdown(err) + } + m.mutex.Unlock() + close(m.newStreamChan) +} diff --git a/vendor/github.com/quic-go/quic-go/streams_map_outgoing.go b/vendor/github.com/quic-go/quic-go/streams_map_outgoing.go new file mode 100644 index 0000000..7d7975a --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/streams_map_outgoing.go @@ -0,0 +1,246 @@ +package quic + +import ( + "context" + "fmt" + "slices" + "sync" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/qerr" + "github.com/quic-go/quic-go/internal/wire" +) + +type outgoingStream interface { + updateSendWindow(protocol.ByteCount) + enableResetStreamAt() + closeForShutdown(error) +} + +type outgoingStreamsMap[T outgoingStream] struct { + mutex sync.RWMutex + + streamType protocol.StreamType + streams map[protocol.StreamID]T + + openQueue []chan struct{} + + nextStream protocol.StreamID // stream ID of the stream returned by OpenStream(Sync) + maxStream protocol.StreamID // the maximum stream ID we're allowed to open + blockedSent bool // was a STREAMS_BLOCKED sent for the current maxStream + + newStream func(protocol.StreamID) T + queueStreamIDBlocked func(*wire.StreamsBlockedFrame) + + closeErr error +} + +func newOutgoingStreamsMap[T outgoingStream]( + streamType protocol.StreamType, + newStream func(protocol.StreamID) T, + queueControlFrame func(wire.Frame), + pers protocol.Perspective, +) *outgoingStreamsMap[T] { + var nextStream protocol.StreamID + switch { + case streamType == protocol.StreamTypeBidi && pers == protocol.PerspectiveServer: + nextStream = protocol.FirstOutgoingBidiStreamServer + case streamType == protocol.StreamTypeBidi && pers == protocol.PerspectiveClient: + nextStream = protocol.FirstOutgoingBidiStreamClient + case streamType == protocol.StreamTypeUni && pers == protocol.PerspectiveServer: + nextStream = protocol.FirstOutgoingUniStreamServer + case streamType == protocol.StreamTypeUni && pers == protocol.PerspectiveClient: + nextStream = protocol.FirstOutgoingUniStreamClient + } + return &outgoingStreamsMap[T]{ + streamType: streamType, + streams: make(map[protocol.StreamID]T), + maxStream: protocol.InvalidStreamNum, + nextStream: nextStream, + newStream: newStream, + queueStreamIDBlocked: func(f *wire.StreamsBlockedFrame) { queueControlFrame(f) }, + } +} + +func (m *outgoingStreamsMap[T]) OpenStream() (T, error) { + m.mutex.Lock() + defer m.mutex.Unlock() + + if m.closeErr != nil { + return *new(T), m.closeErr + } + + // if there are OpenStreamSync calls waiting, return an error here + if len(m.openQueue) > 0 || m.nextStream > m.maxStream { + m.maybeSendBlockedFrame() + return *new(T), &StreamLimitReachedError{} + } + return m.openStream(), nil +} + +func (m *outgoingStreamsMap[T]) OpenStreamSync(ctx context.Context) (T, error) { + m.mutex.Lock() + defer m.mutex.Unlock() + + if m.closeErr != nil { + return *new(T), m.closeErr + } + if err := ctx.Err(); err != nil { + return *new(T), err + } + if len(m.openQueue) == 0 && m.nextStream <= m.maxStream { + return m.openStream(), nil + } + + waitChan := make(chan struct{}, 1) + m.openQueue = append(m.openQueue, waitChan) + m.maybeSendBlockedFrame() + + for { + m.mutex.Unlock() + select { + case <-ctx.Done(): + m.mutex.Lock() + m.openQueue = slices.DeleteFunc(m.openQueue, func(c chan struct{}) bool { + return c == waitChan + }) + // If we just received a MAX_STREAMS frame, this might have been the next stream + // that could be opened. Make sure we unblock the next OpenStreamSync call. + m.maybeUnblockOpenSync() + return *new(T), ctx.Err() + case <-waitChan: + } + + m.mutex.Lock() + if m.closeErr != nil { + return *new(T), m.closeErr + } + if m.nextStream > m.maxStream { + // no stream available. Continue waiting + continue + } + str := m.openStream() + m.openQueue = m.openQueue[1:] + m.maybeUnblockOpenSync() + return str, nil + } +} + +func (m *outgoingStreamsMap[T]) openStream() T { + s := m.newStream(m.nextStream) + m.streams[m.nextStream] = s + m.nextStream += 4 + return s +} + +// maybeSendBlockedFrame queues a STREAMS_BLOCKED frame for the current stream offset, +// if we haven't sent one for this offset yet +func (m *outgoingStreamsMap[T]) maybeSendBlockedFrame() { + if m.blockedSent { + return + } + + var streamLimit protocol.StreamNum + if m.maxStream != protocol.InvalidStreamID { + streamLimit = m.maxStream.StreamNum() + } + m.queueStreamIDBlocked(&wire.StreamsBlockedFrame{ + Type: m.streamType, + StreamLimit: streamLimit, + }) + m.blockedSent = true +} + +func (m *outgoingStreamsMap[T]) GetStream(id protocol.StreamID) (T, error) { + m.mutex.RLock() + if id >= m.nextStream { + m.mutex.RUnlock() + return *new(T), &qerr.TransportError{ + ErrorCode: qerr.StreamStateError, + ErrorMessage: fmt.Sprintf("peer attempted to open stream %d", id), + } + } + s := m.streams[id] + m.mutex.RUnlock() + return s, nil +} + +func (m *outgoingStreamsMap[T]) DeleteStream(id protocol.StreamID) error { + m.mutex.Lock() + defer m.mutex.Unlock() + + if _, ok := m.streams[id]; !ok { + return &qerr.TransportError{ + ErrorCode: qerr.StreamStateError, + ErrorMessage: fmt.Sprintf("tried to delete unknown outgoing stream %d", id), + } + } + delete(m.streams, id) + return nil +} + +func (m *outgoingStreamsMap[T]) SetMaxStream(id protocol.StreamID) { + m.mutex.Lock() + defer m.mutex.Unlock() + + if id <= m.maxStream { + return + } + m.maxStream = id + m.blockedSent = false + if m.maxStream < m.nextStream-4+4*protocol.StreamID(len(m.openQueue)) { + m.maybeSendBlockedFrame() + } + m.maybeUnblockOpenSync() +} + +// UpdateSendWindow is called when the peer's transport parameters are received. +// Only in the case of a 0-RTT handshake will we have open streams at this point. +// We might need to update the send window, in case the server increased it. +func (m *outgoingStreamsMap[T]) UpdateSendWindow(limit protocol.ByteCount) { + m.mutex.Lock() + for _, str := range m.streams { + str.updateSendWindow(limit) + } + m.mutex.Unlock() +} + +func (m *outgoingStreamsMap[T]) EnableResetStreamAt() { + m.mutex.Lock() + for _, str := range m.streams { + str.enableResetStreamAt() + } + m.mutex.Unlock() +} + +// unblockOpenSync unblocks the next OpenStreamSync go-routine to open a new stream +func (m *outgoingStreamsMap[T]) maybeUnblockOpenSync() { + if len(m.openQueue) == 0 { + return + } + if m.nextStream > m.maxStream { + return + } + // unblockOpenSync is called both from OpenStreamSync and from SetMaxStream. + // It's sufficient to only unblock OpenStreamSync once. + select { + case m.openQueue[0] <- struct{}{}: + default: + } +} + +func (m *outgoingStreamsMap[T]) CloseWithError(err error) { + m.mutex.Lock() + defer m.mutex.Unlock() + + m.closeErr = err + for _, str := range m.streams { + str.closeForShutdown(err) + } + for _, c := range m.openQueue { + if c != nil { + close(c) + } + } + m.openQueue = nil +} diff --git a/vendor/github.com/quic-go/quic-go/sys_conn.go b/vendor/github.com/quic-go/quic-go/sys_conn.go new file mode 100644 index 0000000..6e768dc --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn.go @@ -0,0 +1,142 @@ +package quic + +import ( + "io" + "log" + "net" + "os" + "strconv" + "strings" + "syscall" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" +) + +type connCapabilities struct { + // This connection has the Don't Fragment (DF) bit set. + // This means it makes to run DPLPMTUD. + DF bool + // GSO (Generic Segmentation Offload) supported + GSO bool + // ECN (Explicit Congestion Notifications) supported + ECN bool +} + +// rawConn is a connection that allow reading of a receivedPackeh. +type rawConn interface { + ReadPacket() (receivedPacket, error) + // WritePacket writes a packet on the wire. + // gsoSize is the size of a single packet, or 0 to disable GSO. + // It is invalid to set gsoSize if capabilities.GSO is not set. + WritePacket(b []byte, addr net.Addr, packetInfoOOB []byte, gsoSize uint16, ecn protocol.ECN) (int, error) + LocalAddr() net.Addr + SetReadDeadline(time.Time) error + io.Closer + + capabilities() connCapabilities +} + +// OOBCapablePacketConn is a connection that allows the reading of ECN bits from the IP header. +// If the PacketConn passed to the [Transport] satisfies this interface, quic-go will use it. +// In this case, ReadMsgUDP() will be used instead of ReadFrom() to read packets. +type OOBCapablePacketConn interface { + net.PacketConn + SyscallConn() (syscall.RawConn, error) + SetReadBuffer(int) error + ReadMsgUDP(b, oob []byte) (n, oobn, flags int, addr *net.UDPAddr, err error) + WriteMsgUDP(b, oob []byte, addr *net.UDPAddr) (n, oobn int, err error) +} + +var _ OOBCapablePacketConn = &net.UDPConn{} + +func wrapConn(pc net.PacketConn) (rawConn, error) { + if err := setReceiveBuffer(pc); err != nil { + if !strings.Contains(err.Error(), "use of closed network connection") { + setBufferWarningOnce.Do(func() { + if disable, _ := strconv.ParseBool(os.Getenv("QUIC_GO_DISABLE_RECEIVE_BUFFER_WARNING")); disable { + return + } + log.Printf("%s. See https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes for details.", err) + }) + } + } + if err := setSendBuffer(pc); err != nil { + if !strings.Contains(err.Error(), "use of closed network connection") { + setBufferWarningOnce.Do(func() { + if disable, _ := strconv.ParseBool(os.Getenv("QUIC_GO_DISABLE_RECEIVE_BUFFER_WARNING")); disable { + return + } + log.Printf("%s. See https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes for details.", err) + }) + } + } + + conn, ok := pc.(interface { + SyscallConn() (syscall.RawConn, error) + }) + var supportsDF bool + if ok { + rawConn, err := conn.SyscallConn() + if err != nil { + return nil, err + } + + // only set DF on UDP sockets + if _, ok := pc.LocalAddr().(*net.UDPAddr); ok { + var err error + supportsDF, err = setDF(rawConn) + if err != nil { + return nil, err + } + } + } + c, ok := pc.(OOBCapablePacketConn) + if !ok { + utils.DefaultLogger.Infof("PacketConn is not a net.UDPConn. Disabling optimizations possible on UDP connections.") + return &basicConn{PacketConn: pc, supportsDF: supportsDF}, nil + } + return newConn(c, supportsDF) +} + +// The basicConn is the most trivial implementation of a rawConn. +// It reads a single packet from the underlying net.PacketConn. +// It is used when +// * the net.PacketConn is not a OOBCapablePacketConn, and +// * when the OS doesn't support OOB. +type basicConn struct { + net.PacketConn + supportsDF bool +} + +var _ rawConn = &basicConn{} + +func (c *basicConn) ReadPacket() (receivedPacket, error) { + buffer := getPacketBuffer() + // The packet size should not exceed protocol.MaxPacketBufferSize bytes + // If it does, we only read a truncated packet, which will then end up undecryptable + buffer.Data = buffer.Data[:protocol.MaxPacketBufferSize] + n, addr, err := c.ReadFrom(buffer.Data) + if err != nil { + return receivedPacket{}, err + } + return receivedPacket{ + remoteAddr: addr, + rcvTime: time.Now(), + data: buffer.Data[:n], + buffer: buffer, + }, nil +} + +func (c *basicConn) WritePacket(b []byte, addr net.Addr, _ []byte, gsoSize uint16, ecn protocol.ECN) (n int, err error) { + if gsoSize != 0 { + panic("cannot use GSO with a basicConn") + } + if ecn != protocol.ECNUnsupported { + panic("cannot use ECN with a basicConn") + } + return c.WriteTo(b, addr) +} + +func (c *basicConn) capabilities() connCapabilities { return connCapabilities{DF: c.supportsDF} } diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_buffers.go b/vendor/github.com/quic-go/quic-go/sys_conn_buffers.go new file mode 100644 index 0000000..8fe4916 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_buffers.go @@ -0,0 +1,68 @@ +package quic + +import ( + "errors" + "fmt" + "net" + "syscall" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" +) + +//go:generate sh -c "echo '// Code generated by go generate. DO NOT EDIT.\n// Source: sys_conn_buffers.go\n' > sys_conn_buffers_write.go && sed -e 's/SetReadBuffer/SetWriteBuffer/g' -e 's/setReceiveBuffer/setSendBuffer/g' -e 's/inspectReadBuffer/inspectWriteBuffer/g' -e 's/protocol\\.DesiredReceiveBufferSize/protocol\\.DesiredSendBufferSize/g' -e 's/forceSetReceiveBuffer/forceSetSendBuffer/g' -e 's/receive buffer/send buffer/g' sys_conn_buffers.go | sed '/^\\/\\/go:generate/d' >> sys_conn_buffers_write.go" +func setReceiveBuffer(c net.PacketConn) error { + conn, ok := c.(interface{ SetReadBuffer(int) error }) + if !ok { + return errors.New("connection doesn't allow setting of receive buffer size. Not a *net.UDPConn?") + } + + var syscallConn syscall.RawConn + if sc, ok := c.(interface { + SyscallConn() (syscall.RawConn, error) + }); ok { + var err error + syscallConn, err = sc.SyscallConn() + if err != nil { + syscallConn = nil + } + } + // The connection has a SetReadBuffer method, but we couldn't obtain a syscall.RawConn. + // This shouldn't happen for a net.UDPConn, but is possible if the connection just implements the + // net.PacketConn interface and the SetReadBuffer method. + // We have no way of checking if increasing the buffer size actually worked. + if syscallConn == nil { + return conn.SetReadBuffer(protocol.DesiredReceiveBufferSize) + } + + size, err := inspectReadBuffer(syscallConn) + if err != nil { + return fmt.Errorf("failed to determine receive buffer size: %w", err) + } + if size >= protocol.DesiredReceiveBufferSize { + utils.DefaultLogger.Debugf("Conn has receive buffer of %d kiB (wanted: at least %d kiB)", size/1024, protocol.DesiredReceiveBufferSize/1024) + return nil + } + // Ignore the error. We check if we succeeded by querying the buffer size afterward. + _ = conn.SetReadBuffer(protocol.DesiredReceiveBufferSize) + newSize, err := inspectReadBuffer(syscallConn) + if newSize < protocol.DesiredReceiveBufferSize { + // Try again with RCVBUFFORCE on Linux + _ = forceSetReceiveBuffer(syscallConn, protocol.DesiredReceiveBufferSize) + newSize, err = inspectReadBuffer(syscallConn) + if err != nil { + return fmt.Errorf("failed to determine receive buffer size: %w", err) + } + } + if err != nil { + return fmt.Errorf("failed to determine receive buffer size: %w", err) + } + if newSize == size { + return fmt.Errorf("failed to increase receive buffer size (wanted: %d kiB, got %d kiB)", protocol.DesiredReceiveBufferSize/1024, newSize/1024) + } + if newSize < protocol.DesiredReceiveBufferSize { + return fmt.Errorf("failed to sufficiently increase receive buffer size (was: %d kiB, wanted: %d kiB, got: %d kiB)", size/1024, protocol.DesiredReceiveBufferSize/1024, newSize/1024) + } + utils.DefaultLogger.Debugf("Increased receive buffer size to %d kiB", newSize/1024) + return nil +} diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_buffers_write.go b/vendor/github.com/quic-go/quic-go/sys_conn_buffers_write.go new file mode 100644 index 0000000..c01a931 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_buffers_write.go @@ -0,0 +1,70 @@ +// Code generated by go generate. DO NOT EDIT. +// Source: sys_conn_buffers.go + +package quic + +import ( + "errors" + "fmt" + "net" + "syscall" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" +) + +func setSendBuffer(c net.PacketConn) error { + conn, ok := c.(interface{ SetWriteBuffer(int) error }) + if !ok { + return errors.New("connection doesn't allow setting of send buffer size. Not a *net.UDPConn?") + } + + var syscallConn syscall.RawConn + if sc, ok := c.(interface { + SyscallConn() (syscall.RawConn, error) + }); ok { + var err error + syscallConn, err = sc.SyscallConn() + if err != nil { + syscallConn = nil + } + } + // The connection has a SetWriteBuffer method, but we couldn't obtain a syscall.RawConn. + // This shouldn't happen for a net.UDPConn, but is possible if the connection just implements the + // net.PacketConn interface and the SetWriteBuffer method. + // We have no way of checking if increasing the buffer size actually worked. + if syscallConn == nil { + return conn.SetWriteBuffer(protocol.DesiredSendBufferSize) + } + + size, err := inspectWriteBuffer(syscallConn) + if err != nil { + return fmt.Errorf("failed to determine send buffer size: %w", err) + } + if size >= protocol.DesiredSendBufferSize { + utils.DefaultLogger.Debugf("Conn has send buffer of %d kiB (wanted: at least %d kiB)", size/1024, protocol.DesiredSendBufferSize/1024) + return nil + } + // Ignore the error. We check if we succeeded by querying the buffer size afterward. + _ = conn.SetWriteBuffer(protocol.DesiredSendBufferSize) + newSize, err := inspectWriteBuffer(syscallConn) + if newSize < protocol.DesiredSendBufferSize { + // Try again with RCVBUFFORCE on Linux + _ = forceSetSendBuffer(syscallConn, protocol.DesiredSendBufferSize) + newSize, err = inspectWriteBuffer(syscallConn) + if err != nil { + return fmt.Errorf("failed to determine send buffer size: %w", err) + } + } + if err != nil { + return fmt.Errorf("failed to determine send buffer size: %w", err) + } + if newSize == size { + return fmt.Errorf("failed to increase send buffer size (wanted: %d kiB, got %d kiB)", protocol.DesiredSendBufferSize/1024, newSize/1024) + } + if newSize < protocol.DesiredSendBufferSize { + return fmt.Errorf("failed to sufficiently increase send buffer size (was: %d kiB, wanted: %d kiB, got: %d kiB)", size/1024, protocol.DesiredSendBufferSize/1024, newSize/1024) + } + utils.DefaultLogger.Debugf("Increased send buffer size to %d kiB", newSize/1024) + return nil +} diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_df.go b/vendor/github.com/quic-go/quic-go/sys_conn_df.go new file mode 100644 index 0000000..0db6150 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_df.go @@ -0,0 +1,22 @@ +//go:build !linux && !windows && !darwin + +package quic + +import ( + "syscall" +) + +func setDF(syscall.RawConn) (bool, error) { + // no-op on unsupported platforms + return false, nil +} + +func isSendMsgSizeErr(err error) bool { + // to be implemented for more specific platforms + return false +} + +func isRecvMsgSizeErr(err error) bool { + // to be implemented for more specific platforms + return false +} diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_df_darwin.go b/vendor/github.com/quic-go/quic-go/sys_conn_df_darwin.go new file mode 100644 index 0000000..8ed273e --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_df_darwin.go @@ -0,0 +1,92 @@ +//go:build darwin + +package quic + +import ( + "errors" + "fmt" + "strconv" + "strings" + "syscall" + + "golang.org/x/sys/unix" +) + +// for macOS versions, see https://en.wikipedia.org/wiki/Darwin_(operating_system)#Darwin_20_onwards +const ( + macOSVersion11 = 20 + macOSVersion15 = 24 +) + +func setDF(rawConn syscall.RawConn) (bool, error) { + // Setting DF bit is only supported from macOS 11. + // https://github.com/chromium/chromium/blob/117.0.5881.2/net/socket/udp_socket_posix.cc#L555 + version, err := getMacOSVersion() + if err != nil || version < macOSVersion11 { + return false, err + } + + var controlErr error + var disableDF bool + if err := rawConn.Control(func(fd uintptr) { + addr, err := unix.Getsockname(int(fd)) + if err != nil { + controlErr = fmt.Errorf("getsockname: %w", err) + return + } + + // Dual-stack sockets are effectively IPv6 sockets (with IPV6_ONLY set to 0). + // On macOS, the DF bit on dual-stack sockets is controlled by the IPV6_DONTFRAG option. + // See https://datatracker.ietf.org/doc/draft-seemann-tsvwg-udp-fragmentation/ for details. + switch addr.(type) { + case *unix.SockaddrInet4: + controlErr = unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, unix.IP_DONTFRAG, 1) + case *unix.SockaddrInet6: + controlErr = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_DONTFRAG, 1) + + // Setting the DF bit on dual-stack sockets works since macOS Sequoia. + // Disable DF on dual-stack sockets before Sequoia. + if version < macOSVersion15 { + // check if this is a dual-stack socket by reading the IPV6_V6ONLY flag + v6only, err := unix.GetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_V6ONLY) + if err != nil { + controlErr = fmt.Errorf("getting IPV6_V6ONLY: %w", err) + return + } + disableDF = v6only == 0 + } + default: + controlErr = fmt.Errorf("unknown address type: %T", addr) + } + }); err != nil { + return false, err + } + if controlErr != nil { + return false, controlErr + } + return !disableDF, nil +} + +func isSendMsgSizeErr(err error) bool { + return errors.Is(err, unix.EMSGSIZE) +} + +func isRecvMsgSizeErr(error) bool { return false } + +func getMacOSVersion() (int, error) { + uname := &unix.Utsname{} + if err := unix.Uname(uname); err != nil { + return 0, err + } + + release := string(uname.Release[:]) + idx := strings.Index(release, ".") + if idx == -1 { + return 0, nil + } + version, err := strconv.Atoi(release[:idx]) + if err != nil { + return 0, err + } + return version, nil +} diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_df_linux.go b/vendor/github.com/quic-go/quic-go/sys_conn_df_linux.go new file mode 100644 index 0000000..b09a239 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_df_linux.go @@ -0,0 +1,42 @@ +//go:build linux + +package quic + +import ( + "errors" + "syscall" + + "golang.org/x/sys/unix" + + "github.com/quic-go/quic-go/internal/utils" +) + +func setDF(rawConn syscall.RawConn) (bool, error) { + // Enabling IP_MTU_DISCOVER will force the kernel to return "sendto: message too long" + // and the datagram will not be fragmented + var errDFIPv4, errDFIPv6 error + if err := rawConn.Control(func(fd uintptr) { + errDFIPv4 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, unix.IP_MTU_DISCOVER, unix.IP_PMTUDISC_PROBE) + errDFIPv6 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_MTU_DISCOVER, unix.IPV6_PMTUDISC_PROBE) + }); err != nil { + return false, err + } + switch { + case errDFIPv4 == nil && errDFIPv6 == nil: + utils.DefaultLogger.Debugf("Setting DF for IPv4 and IPv6.") + case errDFIPv4 == nil && errDFIPv6 != nil: + utils.DefaultLogger.Debugf("Setting DF for IPv4.") + case errDFIPv4 != nil && errDFIPv6 == nil: + utils.DefaultLogger.Debugf("Setting DF for IPv6.") + case errDFIPv4 != nil && errDFIPv6 != nil: + return false, errors.New("setting DF failed for both IPv4 and IPv6") + } + return true, nil +} + +func isSendMsgSizeErr(err error) bool { + // https://man7.org/linux/man-pages/man7/udp.7.html + return errors.Is(err, unix.EMSGSIZE) +} + +func isRecvMsgSizeErr(error) bool { return false } diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_df_windows.go b/vendor/github.com/quic-go/quic-go/sys_conn_df_windows.go new file mode 100644 index 0000000..4c140f0 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_df_windows.go @@ -0,0 +1,52 @@ +//go:build windows + +package quic + +import ( + "errors" + "syscall" + + "golang.org/x/sys/windows" + + "github.com/quic-go/quic-go/internal/utils" +) + +const ( + // https://microsoft.github.io/windows-docs-rs/doc/windows/Win32/Networking/WinSock/constant.IP_DONTFRAGMENT.html + //nolint:stylecheck + IP_DONTFRAGMENT = 14 + // https://microsoft.github.io/windows-docs-rs/doc/windows/Win32/Networking/WinSock/constant.IPV6_DONTFRAG.html + //nolint:stylecheck + IPV6_DONTFRAG = 14 +) + +func setDF(rawConn syscall.RawConn) (bool, error) { + var errDFIPv4, errDFIPv6 error + if err := rawConn.Control(func(fd uintptr) { + errDFIPv4 = windows.SetsockoptInt(windows.Handle(fd), windows.IPPROTO_IP, IP_DONTFRAGMENT, 1) + errDFIPv6 = windows.SetsockoptInt(windows.Handle(fd), windows.IPPROTO_IPV6, IPV6_DONTFRAG, 1) + }); err != nil { + return false, err + } + switch { + case errDFIPv4 == nil && errDFIPv6 == nil: + utils.DefaultLogger.Debugf("Setting DF for IPv4 and IPv6.") + case errDFIPv4 == nil && errDFIPv6 != nil: + utils.DefaultLogger.Debugf("Setting DF for IPv4.") + case errDFIPv4 != nil && errDFIPv6 == nil: + utils.DefaultLogger.Debugf("Setting DF for IPv6.") + case errDFIPv4 != nil && errDFIPv6 != nil: + return false, errors.New("setting DF failed for both IPv4 and IPv6") + } + return true, nil +} + +func isSendMsgSizeErr(err error) bool { + // https://docs.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2 + return errors.Is(err, windows.WSAEMSGSIZE) +} + +func isRecvMsgSizeErr(err error) bool { + // https://docs.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2 + return errors.Is(err, windows.WSAEMSGSIZE) +} diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_helper_darwin.go b/vendor/github.com/quic-go/quic-go/sys_conn_helper_darwin.go new file mode 100644 index 0000000..a04bfb3 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_helper_darwin.go @@ -0,0 +1,38 @@ +//go:build darwin + +package quic + +import ( + "encoding/binary" + "net/netip" + "syscall" + + "golang.org/x/sys/unix" +) + +const ( + msgTypeIPTOS = unix.IP_RECVTOS + ipv4PKTINFO = unix.IP_RECVPKTINFO +) + +const ecnIPv4DataLen = 4 + +// ReadBatch only returns a single packet on OSX, +// see https://godoc.org/golang.org/x/net/ipv4#PacketConn.ReadBatch. +const batchSize = 1 + +func parseIPv4PktInfo(body []byte) (ip netip.Addr, ifIndex uint32, ok bool) { + // struct in_pktinfo { + // unsigned int ipi_ifindex; /* Interface index */ + // struct in_addr ipi_spec_dst; /* Local address */ + // struct in_addr ipi_addr; /* Header Destination address */ + // }; + if len(body) != 12 { + return netip.Addr{}, 0, false + } + return netip.AddrFrom4(*(*[4]byte)(body[8:12])), binary.NativeEndian.Uint32(body), true +} + +func isGSOEnabled(syscall.RawConn) bool { return false } + +func isECNEnabled() bool { return !isECNDisabledUsingEnv() } diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_helper_freebsd.go b/vendor/github.com/quic-go/quic-go/sys_conn_helper_freebsd.go new file mode 100644 index 0000000..521f80d --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_helper_freebsd.go @@ -0,0 +1,33 @@ +//go:build freebsd + +package quic + +import ( + "net/netip" + "syscall" + + "golang.org/x/sys/unix" +) + +const ( + msgTypeIPTOS = unix.IP_RECVTOS + ipv4PKTINFO = 0x7 +) + +const ecnIPv4DataLen = 1 + +const batchSize = 8 + +func parseIPv4PktInfo(body []byte) (ip netip.Addr, _ uint32, ok bool) { + // struct in_pktinfo { + // struct in_addr ipi_addr; /* Header Destination address */ + // }; + if len(body) != 4 { + return netip.Addr{}, 0, false + } + return netip.AddrFrom4(*(*[4]byte)(body)), 0, true +} + +func isGSOEnabled(syscall.RawConn) bool { return false } + +func isECNEnabled() bool { return !isECNDisabledUsingEnv() } diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_helper_linux.go b/vendor/github.com/quic-go/quic-go/sys_conn_helper_linux.go new file mode 100644 index 0000000..9a890cb --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_helper_linux.go @@ -0,0 +1,156 @@ +//go:build linux + +package quic + +import ( + "encoding/binary" + "errors" + "net/netip" + "os" + "strconv" + "syscall" + "unsafe" + + "golang.org/x/sys/unix" +) + +const ( + msgTypeIPTOS = unix.IP_TOS + ipv4PKTINFO = unix.IP_PKTINFO +) + +const ecnIPv4DataLen = 1 + +const batchSize = 8 // needs to smaller than MaxUint8 (otherwise the type of oobConn.readPos has to be changed) + +var kernelVersionMajor int + +func init() { + kernelVersionMajor, _ = kernelVersion() +} + +func forceSetReceiveBuffer(c syscall.RawConn, bytes int) error { + var serr error + if err := c.Control(func(fd uintptr) { + serr = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_RCVBUFFORCE, bytes) + }); err != nil { + return err + } + return serr +} + +func forceSetSendBuffer(c syscall.RawConn, bytes int) error { + var serr error + if err := c.Control(func(fd uintptr) { + serr = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_SNDBUFFORCE, bytes) + }); err != nil { + return err + } + return serr +} + +func parseIPv4PktInfo(body []byte) (ip netip.Addr, ifIndex uint32, ok bool) { + // struct in_pktinfo { + // unsigned int ipi_ifindex; /* Interface index */ + // struct in_addr ipi_spec_dst; /* Local address */ + // struct in_addr ipi_addr; /* Header Destination address */ + // }; + if len(body) != 12 { + return netip.Addr{}, 0, false + } + return netip.AddrFrom4(*(*[4]byte)(body[8:12])), binary.NativeEndian.Uint32(body), true +} + +// isGSOEnabled tests if the kernel supports GSO. +// Sending with GSO might still fail later on, if the interface doesn't support it (see isGSOError). +func isGSOEnabled(conn syscall.RawConn) bool { + if kernelVersionMajor < 5 { + return false + } + disabled, err := strconv.ParseBool(os.Getenv("QUIC_GO_DISABLE_GSO")) + if err == nil && disabled { + return false + } + var serr error + if err := conn.Control(func(fd uintptr) { + _, serr = unix.GetsockoptInt(int(fd), unix.IPPROTO_UDP, unix.UDP_SEGMENT) + }); err != nil { + return false + } + return serr == nil +} + +func appendUDPSegmentSizeMsg(b []byte, size uint16) []byte { + startLen := len(b) + const dataLen = 2 // payload is a uint16 + b = append(b, make([]byte, unix.CmsgSpace(dataLen))...) + h := (*unix.Cmsghdr)(unsafe.Pointer(&b[startLen])) + h.Level = syscall.IPPROTO_UDP + h.Type = unix.UDP_SEGMENT + h.SetLen(unix.CmsgLen(dataLen)) + + // UnixRights uses the private `data` method, but I *think* this achieves the same goal. + offset := startLen + unix.CmsgSpace(0) + *(*uint16)(unsafe.Pointer(&b[offset])) = size + return b +} + +func isGSOError(err error) bool { + var serr *os.SyscallError + if errors.As(err, &serr) { + // EIO is returned by udp_send_skb() if the device driver does not have tx checksums enabled, + // which is a hard requirement of UDP_SEGMENT. See: + // https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/man7/udp.7?id=806eabd74910447f21005160e90957bde4db0183#n228 + // https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net/ipv4/udp.c?h=v6.2&id=c9c3395d5e3dcc6daee66c6908354d47bf98cb0c#n942 + return serr.Err == unix.EIO + } + return false +} + +// The first sendmsg call on a new UDP socket sometimes errors on Linux. +// It's not clear why this happens. +// See https://github.com/golang/go/issues/63322. +func isPermissionError(err error) bool { + var serr *os.SyscallError + if errors.As(err, &serr) { + return serr.Syscall == "sendmsg" && serr.Err == unix.EPERM + } + return false +} + +func isECNEnabled() bool { + return kernelVersionMajor >= 5 && !isECNDisabledUsingEnv() +} + +// kernelVersion returns major and minor kernel version numbers, parsed from +// the syscall.Uname's Release field, or 0, 0 if the version can't be obtained +// or parsed. +// +// copied from the standard library's internal/syscall/unix/kernel_version_linux.go +func kernelVersion() (major, minor int) { + var uname syscall.Utsname + if err := syscall.Uname(&uname); err != nil { + return + } + + var ( + values [2]int + value, vi int + ) + for _, c := range uname.Release { + if '0' <= c && c <= '9' { + value = (value * 10) + int(c-'0') + } else { + // Note that we're assuming N.N.N here. + // If we see anything else, we are likely to mis-parse it. + values[vi] = value + vi++ + if vi >= len(values) { + break + } + value = 0 + } + } + + return values[0], values[1] +} diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_helper_nonlinux.go b/vendor/github.com/quic-go/quic-go/sys_conn_helper_nonlinux.go new file mode 100644 index 0000000..f8d6980 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_helper_nonlinux.go @@ -0,0 +1,10 @@ +//go:build !linux + +package quic + +func forceSetReceiveBuffer(c any, bytes int) error { return nil } +func forceSetSendBuffer(c any, bytes int) error { return nil } + +func appendUDPSegmentSizeMsg([]byte, uint16) []byte { return nil } +func isGSOError(error) bool { return false } +func isPermissionError(err error) bool { return false } diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_no_oob.go b/vendor/github.com/quic-go/quic-go/sys_conn_no_oob.go new file mode 100644 index 0000000..2a1f807 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_no_oob.go @@ -0,0 +1,21 @@ +//go:build !darwin && !linux && !freebsd && !windows + +package quic + +import ( + "net" + "net/netip" +) + +func newConn(c net.PacketConn, supportsDF bool) (*basicConn, error) { + return &basicConn{PacketConn: c, supportsDF: supportsDF}, nil +} + +func inspectReadBuffer(any) (int, error) { return 0, nil } +func inspectWriteBuffer(any) (int, error) { return 0, nil } + +type packetInfo struct { + addr netip.Addr +} + +func (i *packetInfo) OOB() []byte { return nil } diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_oob.go b/vendor/github.com/quic-go/quic-go/sys_conn_oob.go new file mode 100644 index 0000000..e853470 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_oob.go @@ -0,0 +1,338 @@ +//go:build darwin || linux || freebsd + +package quic + +import ( + "encoding/binary" + "errors" + "log" + "net" + "net/netip" + "os" + "strconv" + "sync" + "syscall" + "time" + "unsafe" + + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" + "golang.org/x/sys/unix" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" +) + +const ( + ecnMask = 0x3 + oobBufferSize = 128 +) + +// Contrary to what the naming suggests, the ipv{4,6}.Message is not dependent on the IP version. +// They're both just aliases for x/net/internal/socket.Message. +// This means we can use this struct to read from a socket that receives both IPv4 and IPv6 messages. +var _ ipv4.Message = ipv6.Message{} + +type batchConn interface { + ReadBatch(ms []ipv4.Message, flags int) (int, error) +} + +func inspectReadBuffer(c syscall.RawConn) (int, error) { + var size int + var serr error + if err := c.Control(func(fd uintptr) { + size, serr = unix.GetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_RCVBUF) + }); err != nil { + return 0, err + } + return size, serr +} + +func inspectWriteBuffer(c syscall.RawConn) (int, error) { + var size int + var serr error + if err := c.Control(func(fd uintptr) { + size, serr = unix.GetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_SNDBUF) + }); err != nil { + return 0, err + } + return size, serr +} + +func isECNDisabledUsingEnv() bool { + disabled, err := strconv.ParseBool(os.Getenv("QUIC_GO_DISABLE_ECN")) + return err == nil && disabled +} + +type oobConn struct { + OOBCapablePacketConn + batchConn batchConn + + readPos uint8 + // Packets received from the kernel, but not yet returned by ReadPacket(). + messages []ipv4.Message + buffers [batchSize]*packetBuffer + + cap connCapabilities +} + +var _ rawConn = &oobConn{} + +func newConn(c OOBCapablePacketConn, supportsDF bool) (*oobConn, error) { + rawConn, err := c.SyscallConn() + if err != nil { + return nil, err + } + var needsPacketInfo bool + if udpAddr, ok := c.LocalAddr().(*net.UDPAddr); ok && udpAddr.IP.IsUnspecified() { + needsPacketInfo = true + } + // We don't know if this a IPv4-only, IPv6-only or a IPv4-and-IPv6 connection. + // Try enabling receiving of ECN and packet info for both IP versions. + // We expect at least one of those syscalls to succeed. + var errECNIPv4, errECNIPv6, errPIIPv4, errPIIPv6 error + if err := rawConn.Control(func(fd uintptr) { + errECNIPv4 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, unix.IP_RECVTOS, 1) + errECNIPv6 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_RECVTCLASS, 1) + + if needsPacketInfo { + errPIIPv4 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, ipv4PKTINFO, 1) + errPIIPv6 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_RECVPKTINFO, 1) + } + }); err != nil { + return nil, err + } + switch { + case errECNIPv4 == nil && errECNIPv6 == nil: + utils.DefaultLogger.Debugf("Activating reading of ECN bits for IPv4 and IPv6.") + case errECNIPv4 == nil && errECNIPv6 != nil: + utils.DefaultLogger.Debugf("Activating reading of ECN bits for IPv4.") + case errECNIPv4 != nil && errECNIPv6 == nil: + utils.DefaultLogger.Debugf("Activating reading of ECN bits for IPv6.") + case errECNIPv4 != nil && errECNIPv6 != nil: + return nil, errors.New("activating ECN failed for both IPv4 and IPv6") + } + if needsPacketInfo { + switch { + case errPIIPv4 == nil && errPIIPv6 == nil: + utils.DefaultLogger.Debugf("Activating reading of packet info for IPv4 and IPv6.") + case errPIIPv4 == nil && errPIIPv6 != nil: + utils.DefaultLogger.Debugf("Activating reading of packet info bits for IPv4.") + case errPIIPv4 != nil && errPIIPv6 == nil: + utils.DefaultLogger.Debugf("Activating reading of packet info bits for IPv6.") + case errPIIPv4 != nil && errPIIPv6 != nil: + return nil, errors.New("activating packet info failed for both IPv4 and IPv6") + } + } + + // Allows callers to pass in a connection that already satisfies batchConn interface + // to make use of the optimisation. Otherwise, ipv4.NewPacketConn would unwrap the file descriptor + // via SyscallConn(), and read it that way, which might not be what the caller wants. + var bc batchConn + if ibc, ok := c.(batchConn); ok { + bc = ibc + } else { + bc = ipv4.NewPacketConn(c) + } + + msgs := make([]ipv4.Message, batchSize) + for i := range msgs { + // preallocate the [][]byte + msgs[i].Buffers = make([][]byte, 1) + } + oobConn := &oobConn{ + OOBCapablePacketConn: c, + batchConn: bc, + messages: msgs, + readPos: batchSize, + cap: connCapabilities{ + DF: supportsDF, + GSO: isGSOEnabled(rawConn), + ECN: isECNEnabled(), + }, + } + for i := 0; i < batchSize; i++ { + oobConn.messages[i].OOB = make([]byte, oobBufferSize) + } + return oobConn, nil +} + +var invalidCmsgOnceV4, invalidCmsgOnceV6 sync.Once + +func (c *oobConn) ReadPacket() (receivedPacket, error) { + if len(c.messages) == int(c.readPos) { // all messages read. Read the next batch of messages. + c.messages = c.messages[:batchSize] + // replace buffers data buffers up to the packet that has been consumed during the last ReadBatch call + for i := uint8(0); i < c.readPos; i++ { + buffer := getPacketBuffer() + buffer.Data = buffer.Data[:protocol.MaxPacketBufferSize] + c.buffers[i] = buffer + c.messages[i].Buffers[0] = c.buffers[i].Data + } + c.readPos = 0 + + n, err := c.batchConn.ReadBatch(c.messages, 0) + if n == 0 || err != nil { + return receivedPacket{}, err + } + c.messages = c.messages[:n] + } + + msg := c.messages[c.readPos] + buffer := c.buffers[c.readPos] + c.readPos++ + + data := msg.OOB[:msg.NN] + p := receivedPacket{ + remoteAddr: msg.Addr, + rcvTime: time.Now(), + data: msg.Buffers[0][:msg.N], + buffer: buffer, + } + for len(data) > 0 { + hdr, body, remainder, err := unix.ParseOneSocketControlMessage(data) + if err != nil { + return receivedPacket{}, err + } + if hdr.Level == unix.IPPROTO_IP { + switch hdr.Type { + case msgTypeIPTOS: + if len(body) != 1 { + return receivedPacket{}, errors.New("invalid IPTOS size") + } + p.ecn = protocol.ParseECNHeaderBits(body[0] & ecnMask) + case ipv4PKTINFO: + ip, ifIndex, ok := parseIPv4PktInfo(body) + if ok { + p.info.addr = ip + p.info.ifIndex = ifIndex + } else { + invalidCmsgOnceV4.Do(func() { + log.Printf("Received invalid IPv4 packet info control message: %+x. "+ + "This should never occur, please open a new issue and include details about the architecture.", body) + }) + } + } + } + if hdr.Level == unix.IPPROTO_IPV6 { + switch hdr.Type { + case unix.IPV6_TCLASS: + if len(body) != 4 { + return receivedPacket{}, errors.New("invalid IPV6_TCLASS size") + } + bits := uint8(binary.NativeEndian.Uint32(body)) & ecnMask + p.ecn = protocol.ParseECNHeaderBits(bits) + case unix.IPV6_PKTINFO: + // struct in6_pktinfo { + // struct in6_addr ipi6_addr; /* src/dst IPv6 address */ + // unsigned int ipi6_ifindex; /* send/recv interface index */ + // }; + if len(body) == 20 { + p.info.addr = netip.AddrFrom16(*(*[16]byte)(body[:16])).Unmap() + p.info.ifIndex = binary.NativeEndian.Uint32(body[16:]) + } else { + invalidCmsgOnceV6.Do(func() { + log.Printf("Received invalid IPv6 packet info control message: %+x. "+ + "This should never occur, please open a new issue and include details about the architecture.", body) + }) + } + } + } + data = remainder + } + return p, nil +} + +// WritePacket writes a new packet. +func (c *oobConn) WritePacket(b []byte, addr net.Addr, packetInfoOOB []byte, gsoSize uint16, ecn protocol.ECN) (int, error) { + oob := packetInfoOOB + if gsoSize > 0 { + if !c.capabilities().GSO { + panic("GSO disabled") + } + oob = appendUDPSegmentSizeMsg(oob, gsoSize) + } + if ecn != protocol.ECNUnsupported { + if !c.capabilities().ECN { + panic("tried to send an ECN-marked packet although ECN is disabled") + } + if remoteUDPAddr, ok := addr.(*net.UDPAddr); ok { + if remoteUDPAddr.IP.To4() != nil { + oob = appendIPv4ECNMsg(oob, ecn) + } else { + oob = appendIPv6ECNMsg(oob, ecn) + } + } + } + n, _, err := c.WriteMsgUDP(b, oob, addr.(*net.UDPAddr)) + return n, err +} + +func (c *oobConn) capabilities() connCapabilities { + return c.cap +} + +type packetInfo struct { + addr netip.Addr + ifIndex uint32 +} + +func (info *packetInfo) OOB() []byte { + if info == nil { + return nil + } + if info.addr.Is4() { + ip := info.addr.As4() + // struct in_pktinfo { + // unsigned int ipi_ifindex; /* Interface index */ + // struct in_addr ipi_spec_dst; /* Local address */ + // struct in_addr ipi_addr; /* Header Destination address */ + // }; + cm := ipv4.ControlMessage{ + Src: ip[:], + IfIndex: int(info.ifIndex), + } + return cm.Marshal() + } else if info.addr.Is6() { + ip := info.addr.As16() + // struct in6_pktinfo { + // struct in6_addr ipi6_addr; /* src/dst IPv6 address */ + // unsigned int ipi6_ifindex; /* send/recv interface index */ + // }; + cm := ipv6.ControlMessage{ + Src: ip[:], + IfIndex: int(info.ifIndex), + } + return cm.Marshal() + } + return nil +} + +func appendIPv4ECNMsg(b []byte, val protocol.ECN) []byte { + startLen := len(b) + b = append(b, make([]byte, unix.CmsgSpace(ecnIPv4DataLen))...) + h := (*unix.Cmsghdr)(unsafe.Pointer(&b[startLen])) + h.Level = syscall.IPPROTO_IP + h.Type = unix.IP_TOS + h.SetLen(unix.CmsgLen(ecnIPv4DataLen)) + + // UnixRights uses the private `data` method, but I *think* this achieves the same goal. + offset := startLen + unix.CmsgSpace(0) + b[offset] = val.ToHeaderBits() + return b +} + +func appendIPv6ECNMsg(b []byte, val protocol.ECN) []byte { + startLen := len(b) + const dataLen = 4 + b = append(b, make([]byte, unix.CmsgSpace(dataLen))...) + h := (*unix.Cmsghdr)(unsafe.Pointer(&b[startLen])) + h.Level = syscall.IPPROTO_IPV6 + h.Type = unix.IPV6_TCLASS + h.SetLen(unix.CmsgLen(dataLen)) + + // UnixRights uses the private `data` method, but I *think* this achieves the same goal. + offset := startLen + unix.CmsgSpace(0) + binary.NativeEndian.PutUint32(b[offset:offset+dataLen], uint32(val.ToHeaderBits())) + return b +} diff --git a/vendor/github.com/quic-go/quic-go/sys_conn_windows.go b/vendor/github.com/quic-go/quic-go/sys_conn_windows.go new file mode 100644 index 0000000..b9c1cbc --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/sys_conn_windows.go @@ -0,0 +1,42 @@ +//go:build windows + +package quic + +import ( + "net/netip" + "syscall" + + "golang.org/x/sys/windows" +) + +func newConn(c OOBCapablePacketConn, supportsDF bool) (*basicConn, error) { + return &basicConn{PacketConn: c, supportsDF: supportsDF}, nil +} + +func inspectReadBuffer(c syscall.RawConn) (int, error) { + var size int + var serr error + if err := c.Control(func(fd uintptr) { + size, serr = windows.GetsockoptInt(windows.Handle(fd), windows.SOL_SOCKET, windows.SO_RCVBUF) + }); err != nil { + return 0, err + } + return size, serr +} + +func inspectWriteBuffer(c syscall.RawConn) (int, error) { + var size int + var serr error + if err := c.Control(func(fd uintptr) { + size, serr = windows.GetsockoptInt(windows.Handle(fd), windows.SOL_SOCKET, windows.SO_SNDBUF) + }); err != nil { + return 0, err + } + return size, serr +} + +type packetInfo struct { + addr netip.Addr +} + +func (i *packetInfo) OOB() []byte { return nil } diff --git a/vendor/github.com/quic-go/quic-go/token_store.go b/vendor/github.com/quic-go/quic-go/token_store.go new file mode 100644 index 0000000..a5c1c18 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/token_store.go @@ -0,0 +1,116 @@ +package quic + +import ( + "sync" + + list "github.com/quic-go/quic-go/internal/utils/linkedlist" +) + +type singleOriginTokenStore struct { + tokens []*ClientToken + len int + p int +} + +func newSingleOriginTokenStore(size int) *singleOriginTokenStore { + return &singleOriginTokenStore{tokens: make([]*ClientToken, size)} +} + +func (s *singleOriginTokenStore) Add(token *ClientToken) { + s.tokens[s.p] = token + s.p = s.index(s.p + 1) + s.len = min(s.len+1, len(s.tokens)) +} + +func (s *singleOriginTokenStore) Pop() *ClientToken { + s.p = s.index(s.p - 1) + token := s.tokens[s.p] + s.tokens[s.p] = nil + s.len = max(s.len-1, 0) + return token +} + +func (s *singleOriginTokenStore) Len() int { + return s.len +} + +func (s *singleOriginTokenStore) index(i int) int { + mod := len(s.tokens) + return (i + mod) % mod +} + +type lruTokenStoreEntry struct { + key string + cache *singleOriginTokenStore +} + +type lruTokenStore struct { + mutex sync.Mutex + + m map[string]*list.Element[*lruTokenStoreEntry] + q *list.List[*lruTokenStoreEntry] + capacity int + singleOriginSize int +} + +var _ TokenStore = &lruTokenStore{} + +// NewLRUTokenStore creates a new LRU cache for tokens received by the client. +// maxOrigins specifies how many origins this cache is saving tokens for. +// tokensPerOrigin specifies the maximum number of tokens per origin. +func NewLRUTokenStore(maxOrigins, tokensPerOrigin int) TokenStore { + return &lruTokenStore{ + m: make(map[string]*list.Element[*lruTokenStoreEntry]), + q: list.New[*lruTokenStoreEntry](), + capacity: maxOrigins, + singleOriginSize: tokensPerOrigin, + } +} + +func (s *lruTokenStore) Put(key string, token *ClientToken) { + s.mutex.Lock() + defer s.mutex.Unlock() + + if el, ok := s.m[key]; ok { + entry := el.Value + entry.cache.Add(token) + s.q.MoveToFront(el) + return + } + + if s.q.Len() < s.capacity { + entry := &lruTokenStoreEntry{ + key: key, + cache: newSingleOriginTokenStore(s.singleOriginSize), + } + entry.cache.Add(token) + s.m[key] = s.q.PushFront(entry) + return + } + + elem := s.q.Back() + entry := elem.Value + delete(s.m, entry.key) + entry.key = key + entry.cache = newSingleOriginTokenStore(s.singleOriginSize) + entry.cache.Add(token) + s.q.MoveToFront(elem) + s.m[key] = elem +} + +func (s *lruTokenStore) Pop(key string) *ClientToken { + s.mutex.Lock() + defer s.mutex.Unlock() + + var token *ClientToken + if el, ok := s.m[key]; ok { + s.q.MoveToFront(el) + cache := el.Value.cache + token = cache.Pop() + if cache.Len() == 0 { + s.q.Remove(el) + delete(s.m, key) + } + } + return token +} diff --git a/vendor/github.com/quic-go/quic-go/tools.go b/vendor/github.com/quic-go/quic-go/tools.go new file mode 100644 index 0000000..8181df6 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/tools.go @@ -0,0 +1,7 @@ +//go:build tools + +package quic + +import ( + _ "go.uber.org/mock/mockgen" +) diff --git a/vendor/github.com/quic-go/quic-go/transport.go b/vendor/github.com/quic-go/quic-go/transport.go new file mode 100644 index 0000000..2f10529 --- /dev/null +++ b/vendor/github.com/quic-go/quic-go/transport.go @@ -0,0 +1,844 @@ +package quic + +import ( + "context" + "crypto/rand" + "crypto/tls" + "errors" + "fmt" + "net" + "sync" + "sync/atomic" + "time" + + "github.com/quic-go/quic-go/internal/protocol" + "github.com/quic-go/quic-go/internal/utils" + "github.com/quic-go/quic-go/internal/wire" + "github.com/quic-go/quic-go/logging" +) + +// ErrTransportClosed is returned by the [Transport]'s Listen or Dial method after it was closed. +var ErrTransportClosed = &errTransportClosed{} + +type errTransportClosed struct { + err error +} + +func (e *errTransportClosed) Unwrap() []error { return []error{net.ErrClosed, e.err} } + +func (e *errTransportClosed) Error() string { + if e.err == nil { + return "quic: transport closed" + } + return fmt.Sprintf("quic: transport closed: %s", e.err) +} + +func (e *errTransportClosed) Is(target error) bool { + _, ok := target.(*errTransportClosed) + return ok +} + +var errListenerAlreadySet = errors.New("listener already set") + +type closePacket struct { + payload []byte + addr net.Addr + info packetInfo +} + +// The Transport is the central point to manage incoming and outgoing QUIC connections. +// QUIC demultiplexes connections based on their QUIC Connection IDs, not based on the 4-tuple. +// This means that a single UDP socket can be used for listening for incoming connections, as well as +// for dialing an arbitrary number of outgoing connections. +// A Transport handles a single net.PacketConn, and offers a range of configuration options +// compared to the simple helper functions like [Listen] and [Dial] that this package provides. +type Transport struct { + // A single net.PacketConn can only be handled by one Transport. + // Bad things will happen if passed to multiple Transports. + // + // A number of optimizations will be enabled if the connections implements the OOBCapablePacketConn interface, + // as a *net.UDPConn does. + // 1. It enables the Don't Fragment (DF) bit on the IP header. + // This is required to run DPLPMTUD (Path MTU Discovery, RFC 8899). + // 2. It enables reading of the ECN bits from the IP header. + // This allows the remote node to speed up its loss detection and recovery. + // 3. It uses batched syscalls (recvmmsg) to more efficiently receive packets from the socket. + // 4. It uses Generic Segmentation Offload (GSO) to efficiently send batches of packets (on Linux). + // + // After passing the connection to the Transport, it's invalid to call ReadFrom or WriteTo on the connection. + Conn net.PacketConn + + // The length of the connection ID in bytes. + // It can be any value between 1 and 20. + // Due to the increased risk of collisions, it is not recommended to use connection IDs shorter than 4 bytes. + // If unset, a 4 byte connection ID will be used. + ConnectionIDLength int + + // Use for generating new connection IDs. + // This allows the application to control of the connection IDs used, + // which allows routing / load balancing based on connection IDs. + // All Connection IDs returned by the ConnectionIDGenerator MUST + // have the same length. + ConnectionIDGenerator ConnectionIDGenerator + + // The StatelessResetKey is used to generate stateless reset tokens. + // If no key is configured, sending of stateless resets is disabled. + // It is highly recommended to configure a stateless reset key, as stateless resets + // allow the peer to quickly recover from crashes and reboots of this node. + // See section 10.3 of RFC 9000 for details. + StatelessResetKey *StatelessResetKey + + // The TokenGeneratorKey is used to encrypt session resumption tokens. + // If no key is configured, a random key will be generated. + // If multiple servers are authoritative for the same domain, they should use the same key, + // see section 8.1.3 of RFC 9000 for details. + TokenGeneratorKey *TokenGeneratorKey + + // MaxTokenAge is the maximum age of the resumption token presented during the handshake. + // These tokens allow skipping address resumption when resuming a QUIC connection, + // and are especially useful when using 0-RTT. + // If not set, it defaults to 24 hours. + // See section 8.1.3 of RFC 9000 for details. + MaxTokenAge time.Duration + + // DisableVersionNegotiationPackets disables the sending of Version Negotiation packets. + // This can be useful if version information is exchanged out-of-band. + // It has no effect for clients. + DisableVersionNegotiationPackets bool + + // VerifySourceAddress decides if a connection attempt originating from unvalidated source + // addresses first needs to go through source address validation using QUIC's Retry mechanism, + // as described in RFC 9000 section 8.1.2. + // Note that the address passed to this callback is unvalidated, and might be spoofed in case + // of an attack. + // Validating the source address adds one additional network roundtrip to the handshake, + // and should therefore only be used if a suspiciously high number of incoming connection is recorded. + // For most use cases, wrapping the Allow function of a rate.Limiter will be a reasonable + // implementation of this callback (negating its return value). + VerifySourceAddress func(net.Addr) bool + + // ConnContext is called when the server accepts a new connection. To reject a connection return + // a non-nil error. + // The context is closed when the connection is closed, or when the handshake fails for any reason. + // The context returned from the callback is used to derive every other context used during the + // lifetime of the connection: + // * the context passed to crypto/tls (and used on the tls.ClientHelloInfo) + // * the context used in Config.Tracer + // * the context returned from Conn.Context + // * the context returned from SendStream.Context + // It is not used for dialed connections. + ConnContext func(context.Context, *ClientInfo) (context.Context, error) + + // A Tracer traces events that don't belong to a single QUIC connection. + // Tracer.Close is called when the transport is closed. + Tracer *logging.Tracer + + mutex sync.Mutex + handlers map[protocol.ConnectionID]packetHandler + resetTokens map[protocol.StatelessResetToken]packetHandler + + initOnce sync.Once + initErr error + + // If no ConnectionIDGenerator is set, this is the ConnectionIDLength. + connIDLen int + // Set in init. + // If no ConnectionIDGenerator is set, this is set to a default. + connIDGenerator ConnectionIDGenerator + statelessResetter *statelessResetter + + server *baseServer + + conn rawConn + + closeQueue chan closePacket + statelessResetQueue chan receivedPacket + + listening chan struct{} // is closed when listen returns + closeErr error + createdConn bool + isSingleUse bool // was created for a single server or client, i.e. by calling quic.Listen or quic.Dial + + readingNonQUICPackets atomic.Bool + nonQUICPackets chan receivedPacket + + logger utils.Logger +} + +// Listen starts listening for incoming QUIC connections. +// There can only be a single listener on any net.PacketConn. +// Listen may only be called again after the current listener was closed. +func (t *Transport) Listen(tlsConf *tls.Config, conf *Config) (*Listener, error) { + s, err := t.createServer(tlsConf, conf, false) + if err != nil { + return nil, err + } + return &Listener{baseServer: s}, nil +} + +// ListenEarly starts listening for incoming QUIC connections. +// There can only be a single listener on any net.PacketConn. +// ListenEarly may only be called again after the current listener was closed. +func (t *Transport) ListenEarly(tlsConf *tls.Config, conf *Config) (*EarlyListener, error) { + s, err := t.createServer(tlsConf, conf, true) + if err != nil { + return nil, err + } + return &EarlyListener{baseServer: s}, nil +} + +func (t *Transport) createServer(tlsConf *tls.Config, conf *Config, allow0RTT bool) (*baseServer, error) { + if tlsConf == nil { + return nil, errors.New("quic: tls.Config not set") + } + if err := validateConfig(conf); err != nil { + return nil, err + } + + t.mutex.Lock() + defer t.mutex.Unlock() + + if t.closeErr != nil { + return nil, t.closeErr + } + if t.server != nil { + return nil, errListenerAlreadySet + } + conf = populateConfig(conf) + if err := t.init(false); err != nil { + return nil, err + } + maxTokenAge := t.MaxTokenAge + if maxTokenAge == 0 { + maxTokenAge = 24 * time.Hour + } + s := newServer( + t.conn, + (*packetHandlerMap)(t), + t.connIDGenerator, + t.statelessResetter, + t.ConnContext, + tlsConf, + conf, + t.Tracer, + t.closeServer, + *t.TokenGeneratorKey, + maxTokenAge, + t.VerifySourceAddress, + t.DisableVersionNegotiationPackets, + allow0RTT, + ) + t.server = s + return s, nil +} + +// Dial dials a new connection to a remote host (not using 0-RTT). +func (t *Transport) Dial(ctx context.Context, addr net.Addr, tlsConf *tls.Config, conf *Config) (*Conn, error) { + return t.dial(ctx, addr, "", tlsConf, conf, false) +} + +// DialEarly dials a new connection, attempting to use 0-RTT if possible. +func (t *Transport) DialEarly(ctx context.Context, addr net.Addr, tlsConf *tls.Config, conf *Config) (*Conn, error) { + return t.dial(ctx, addr, "", tlsConf, conf, true) +} + +func (t *Transport) dial(ctx context.Context, addr net.Addr, host string, tlsConf *tls.Config, conf *Config, use0RTT bool) (*Conn, error) { + if err := t.init(t.isSingleUse); err != nil { + return nil, err + } + if err := validateConfig(conf); err != nil { + return nil, err + } + conf = populateConfig(conf) + tlsConf = tlsConf.Clone() + setTLSConfigServerName(tlsConf, addr, host) + return t.doDial(ctx, + newSendConn(t.conn, addr, packetInfo{}, utils.DefaultLogger), + tlsConf, + conf, + 0, + false, + use0RTT, + conf.Versions[0], + ) +} + +func (t *Transport) doDial( + ctx context.Context, + sendConn sendConn, + tlsConf *tls.Config, + config *Config, + initialPacketNumber protocol.PacketNumber, + hasNegotiatedVersion bool, + use0RTT bool, + version protocol.Version, +) (*Conn, error) { + srcConnID, err := t.connIDGenerator.GenerateConnectionID() + if err != nil { + return nil, err + } + destConnID, err := generateConnectionIDForInitial() + if err != nil { + return nil, err + } + + tracingID := nextConnTracingID() + ctx = context.WithValue(ctx, ConnectionTracingKey, tracingID) + + t.mutex.Lock() + if t.closeErr != nil { + t.mutex.Unlock() + return nil, t.closeErr + } + + var tracer *logging.ConnectionTracer + if config.Tracer != nil { + tracer = config.Tracer(ctx, protocol.PerspectiveClient, destConnID) + } + if tracer != nil && tracer.StartedConnection != nil { + tracer.StartedConnection(sendConn.LocalAddr(), sendConn.RemoteAddr(), srcConnID, destConnID) + } + + logger := utils.DefaultLogger.WithPrefix("client") + logger.Infof("Starting new connection to %s (%s -> %s), source connection ID %s, destination connection ID %s, version %s", tlsConf.ServerName, sendConn.LocalAddr(), sendConn.RemoteAddr(), srcConnID, destConnID, version) + + conn := newClientConnection( + context.WithoutCancel(ctx), + sendConn, + (*packetHandlerMap)(t), + destConnID, + srcConnID, + t.connIDGenerator, + t.statelessResetter, + config, + tlsConf, + initialPacketNumber, + use0RTT, + hasNegotiatedVersion, + tracer, + logger, + version, + ) + t.handlers[srcConnID] = conn + t.mutex.Unlock() + + // The error channel needs to be buffered, as the run loop will continue running + // after doDial returns (if the handshake is successful). + // Similarly, the recreateChan needs to be buffered; in case a different case is selected. + errChan := make(chan error, 1) + recreateChan := make(chan errCloseForRecreating, 1) + go func() { + err := conn.run() + var recreateErr *errCloseForRecreating + if errors.As(err, &recreateErr) { + recreateChan <- *recreateErr + return + } + if t.isSingleUse { + t.Close() + } + errChan <- err + }() + + // Only set when we're using 0-RTT. + // Otherwise, earlyConnChan will be nil. Receiving from a nil chan blocks forever. + var earlyConnChan <-chan struct{} + if use0RTT { + earlyConnChan = conn.earlyConnReady() + } + + select { + case <-ctx.Done(): + conn.destroy(nil) + // wait until the Go routine that called Conn.run() returns + select { + case <-errChan: + case <-recreateChan: + } + return nil, context.Cause(ctx) + case params := <-recreateChan: + return t.doDial(ctx, + sendConn, + tlsConf, + config, + params.nextPacketNumber, + true, + use0RTT, + params.nextVersion, + ) + case err := <-errChan: + return nil, err + case <-earlyConnChan: + // ready to send 0-RTT data + return conn.Conn, nil + case <-conn.HandshakeComplete(): + // handshake successfully completed + return conn.Conn, nil + } +} + +func (t *Transport) init(allowZeroLengthConnIDs bool) error { + t.initOnce.Do(func() { + var conn rawConn + if c, ok := t.Conn.(rawConn); ok { + conn = c + } else { + var err error + conn, err = wrapConn(t.Conn) + if err != nil { + t.initErr = err + return + } + } + + t.logger = utils.DefaultLogger // TODO: make this configurable + t.conn = conn + t.handlers = make(map[protocol.ConnectionID]packetHandler) + t.resetTokens = make(map[protocol.StatelessResetToken]packetHandler) + t.listening = make(chan struct{}) + + t.closeQueue = make(chan closePacket, 4) + t.statelessResetQueue = make(chan receivedPacket, 4) + if t.TokenGeneratorKey == nil { + var key TokenGeneratorKey + if _, err := rand.Read(key[:]); err != nil { + t.initErr = err + return + } + t.TokenGeneratorKey = &key + } + + if t.ConnectionIDGenerator != nil { + t.connIDGenerator = t.ConnectionIDGenerator + t.connIDLen = t.ConnectionIDGenerator.ConnectionIDLen() + } else { + connIDLen := t.ConnectionIDLength + if t.ConnectionIDLength == 0 && !allowZeroLengthConnIDs { + connIDLen = protocol.DefaultConnectionIDLength + } + t.connIDLen = connIDLen + t.connIDGenerator = &protocol.DefaultConnectionIDGenerator{ConnLen: t.connIDLen} + } + t.statelessResetter = newStatelessResetter(t.StatelessResetKey) + + go func() { + defer close(t.listening) + t.listen(conn) + + if t.createdConn { + conn.Close() + } + }() + go t.runSendQueue() + }) + return t.initErr +} + +// WriteTo sends a packet on the underlying connection. +func (t *Transport) WriteTo(b []byte, addr net.Addr) (int, error) { + if err := t.init(false); err != nil { + return 0, err + } + return t.conn.WritePacket(b, addr, nil, 0, protocol.ECNUnsupported) +} + +func (t *Transport) runSendQueue() { + for { + select { + case <-t.listening: + return + case p := <-t.closeQueue: + t.conn.WritePacket(p.payload, p.addr, p.info.OOB(), 0, protocol.ECNUnsupported) + case p := <-t.statelessResetQueue: + t.sendStatelessReset(p) + } + } +} + +// Close stops listening for UDP datagrams on the Transport.Conn. +// It abruptly terminates all existing connections, without sending a CONNECTION_CLOSE +// to the peers. It is the application's responsibility to cleanly terminate existing +// connections prior to calling Close. +// +// If a server was started, it will be closed as well. +// It is not possible to start any new server or dial new connections after that. +func (t *Transport) Close() error { + // avoid race condition if the transport is currently being initialized + t.init(false) + + t.close(nil) + if t.createdConn { + if err := t.Conn.Close(); err != nil { + return err + } + } else if t.conn != nil { + t.conn.SetReadDeadline(time.Now()) + defer func() { t.conn.SetReadDeadline(time.Time{}) }() + } + if t.listening != nil { + <-t.listening // wait until listening returns + } + return nil +} + +func (t *Transport) closeServer() { + t.mutex.Lock() + defer t.mutex.Unlock() + + t.server = nil + if t.isSingleUse { + t.closeErr = ErrServerClosed + } + + if len(t.handlers) == 0 { + t.maybeStopListening() + } +} + +func (t *Transport) close(e error) { + t.mutex.Lock() + + if t.closeErr != nil { + t.mutex.Unlock() + return + } + + e = &errTransportClosed{err: e} + t.closeErr = e + server := t.server + t.server = nil + if server != nil { + t.mutex.Unlock() + server.close(e, true) + t.mutex.Lock() + } + + // Close existing connections + var wg sync.WaitGroup + for _, handler := range t.handlers { + wg.Add(1) + go func(handler packetHandler) { + handler.destroy(e) + wg.Done() + }(handler) + } + t.mutex.Unlock() // closing connections requires releasing transport mutex + wg.Wait() + + if t.Tracer != nil && t.Tracer.Close != nil { + t.Tracer.Close() + } +} + +// only print warnings about the UDP receive buffer size once +var setBufferWarningOnce sync.Once + +func (t *Transport) listen(conn rawConn) { + for { + p, err := conn.ReadPacket() + //nolint:staticcheck // SA1019 ignore this! + // TODO: This code is used to ignore wsa errors on Windows. + // Since net.Error.Temporary is deprecated as of Go 1.18, we should find a better solution. + // See https://github.com/quic-go/quic-go/issues/1737 for details. + if nerr, ok := err.(net.Error); ok && nerr.Temporary() { + t.mutex.Lock() + closed := t.closeErr != nil + t.mutex.Unlock() + if closed { + return + } + t.logger.Debugf("Temporary error reading from conn: %w", err) + continue + } + if err != nil { + // Windows returns an error when receiving a UDP datagram that doesn't fit into the provided buffer. + if isRecvMsgSizeErr(err) { + continue + } + t.close(err) + return + } + t.handlePacket(p) + } +} + +func (t *Transport) maybeStopListening() { + if t.isSingleUse && t.closeErr != nil { + t.conn.SetReadDeadline(time.Now()) + } +} + +func (t *Transport) handlePacket(p receivedPacket) { + if len(p.data) == 0 { + return + } + if !wire.IsPotentialQUICPacket(p.data[0]) && !wire.IsLongHeaderPacket(p.data[0]) { + t.handleNonQUICPacket(p) + return + } + connID, err := wire.ParseConnectionID(p.data, t.connIDLen) + if err != nil { + t.logger.Debugf("error parsing connection ID on packet from %s: %s", p.remoteAddr, err) + if t.Tracer != nil && t.Tracer.DroppedPacket != nil { + t.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropHeaderParseError) + } + p.buffer.MaybeRelease() + return + } + + // If there's a connection associated with the connection ID, pass the packet there. + if handler, ok := (*packetHandlerMap)(t).Get(connID); ok { + handler.handlePacket(p) + return + } + // RFC 9000 section 10.3.1 requires that the stateless reset detection logic is run for both + // packets that cannot be associated with any connections, and for packets that can't be decrypted. + // We deviate from the RFC and ignore the latter: If a packet's connection ID is associated with an + // existing connection, it is dropped there if if it can't be decrypted. + // Stateless resets use random connection IDs, and at reasonable connection ID lengths collisions are + // exceedingly rare. In the unlikely event that a stateless reset is misrouted to an existing connection, + // it is to be expected that the next stateless reset will be correctly detected. + if isStatelessReset := t.maybeHandleStatelessReset(p.data); isStatelessReset { + return + } + if !wire.IsLongHeaderPacket(p.data[0]) { + if statelessResetQueued := t.maybeSendStatelessReset(p); !statelessResetQueued { + if t.Tracer != nil && t.Tracer.DroppedPacket != nil { + t.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropUnknownConnectionID) + } + p.buffer.Release() + } + return + } + + t.mutex.Lock() + defer t.mutex.Unlock() + if t.server == nil { // no server set + t.logger.Debugf("received a packet with an unexpected connection ID %s", connID) + if t.Tracer != nil && t.Tracer.DroppedPacket != nil { + t.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropUnknownConnectionID) + } + p.buffer.MaybeRelease() + return + } + t.server.handlePacket(p) +} + +func (t *Transport) maybeSendStatelessReset(p receivedPacket) (statelessResetQueued bool) { + if t.StatelessResetKey == nil { + return false + } + + // Don't send a stateless reset in response to very small packets. + // This includes packets that could be stateless resets. + if len(p.data) <= protocol.MinStatelessResetSize { + return false + } + + select { + case t.statelessResetQueue <- p: + return true + default: + // it's fine to not send a stateless reset when we're busy + return false + } +} + +func (t *Transport) sendStatelessReset(p receivedPacket) { + defer p.buffer.Release() + + connID, err := wire.ParseConnectionID(p.data, t.connIDLen) + if err != nil { + t.logger.Errorf("error parsing connection ID on packet from %s: %s", p.remoteAddr, err) + return + } + token := t.statelessResetter.GetStatelessResetToken(connID) + t.logger.Debugf("Sending stateless reset to %s (connection ID: %s). Token: %#x", p.remoteAddr, connID, token) + data := make([]byte, protocol.MinStatelessResetSize-16, protocol.MinStatelessResetSize) + rand.Read(data) + data[0] = (data[0] & 0x7f) | 0x40 + data = append(data, token[:]...) + if _, err := t.conn.WritePacket(data, p.remoteAddr, p.info.OOB(), 0, protocol.ECNUnsupported); err != nil { + t.logger.Debugf("Error sending Stateless Reset to %s: %s", p.remoteAddr, err) + } +} + +func (t *Transport) maybeHandleStatelessReset(data []byte) bool { + // stateless resets are always short header packets + if wire.IsLongHeaderPacket(data[0]) { + return false + } + if len(data) < 17 /* type byte + 16 bytes for the reset token */ { + return false + } + + token := protocol.StatelessResetToken(data[len(data)-16:]) + t.mutex.Lock() + conn, ok := t.resetTokens[token] + t.mutex.Unlock() + + if ok { + t.logger.Debugf("Received a stateless reset with token %#x. Closing connection.", token) + go conn.destroy(&StatelessResetError{}) + return true + } + return false +} + +func (t *Transport) handleNonQUICPacket(p receivedPacket) { + // Strictly speaking, this is racy, + // but we only care about receiving packets at some point after ReadNonQUICPacket has been called. + if !t.readingNonQUICPackets.Load() { + return + } + select { + case t.nonQUICPackets <- p: + default: + if t.Tracer != nil && t.Tracer.DroppedPacket != nil { + t.Tracer.DroppedPacket(p.remoteAddr, logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropDOSPrevention) + } + } +} + +const maxQueuedNonQUICPackets = 32 + +// ReadNonQUICPacket reads non-QUIC packets received on the underlying connection. +// The detection logic is very simple: Any packet that has the first and second bit of the packet set to 0. +// Note that this is stricter than the detection logic defined in RFC 9443. +func (t *Transport) ReadNonQUICPacket(ctx context.Context, b []byte) (int, net.Addr, error) { + if err := t.init(false); err != nil { + return 0, nil, err + } + if !t.readingNonQUICPackets.Load() { + t.nonQUICPackets = make(chan receivedPacket, maxQueuedNonQUICPackets) + t.readingNonQUICPackets.Store(true) + } + select { + case <-ctx.Done(): + return 0, nil, ctx.Err() + case p := <-t.nonQUICPackets: + n := copy(b, p.data) + return n, p.remoteAddr, nil + case <-t.listening: + return 0, nil, errors.New("closed") + } +} + +func setTLSConfigServerName(tlsConf *tls.Config, addr net.Addr, host string) { + // If no ServerName is set, infer the ServerName from the host we're connecting to. + if tlsConf.ServerName != "" { + return + } + if host == "" { + if udpAddr, ok := addr.(*net.UDPAddr); ok { + tlsConf.ServerName = udpAddr.IP.String() + return + } + } + h, _, err := net.SplitHostPort(host) + if err != nil { // This happens if the host doesn't contain a port number. + tlsConf.ServerName = host + return + } + tlsConf.ServerName = h +} + +type packetHandlerMap Transport + +var _ connRunner = &packetHandlerMap{} + +func (h *packetHandlerMap) Add(id protocol.ConnectionID, handler packetHandler) bool /* was added */ { + h.mutex.Lock() + defer h.mutex.Unlock() + + if _, ok := h.handlers[id]; ok { + h.logger.Debugf("Not adding connection ID %s, as it already exists.", id) + return false + } + h.handlers[id] = handler + h.logger.Debugf("Adding connection ID %s.", id) + return true +} + +func (h *packetHandlerMap) Get(connID protocol.ConnectionID) (packetHandler, bool) { + h.mutex.Lock() + defer h.mutex.Unlock() + handler, ok := h.handlers[connID] + return handler, ok +} + +func (h *packetHandlerMap) AddResetToken(token protocol.StatelessResetToken, handler packetHandler) { + h.mutex.Lock() + h.resetTokens[token] = handler + h.mutex.Unlock() +} + +func (h *packetHandlerMap) RemoveResetToken(token protocol.StatelessResetToken) { + h.mutex.Lock() + delete(h.resetTokens, token) + h.mutex.Unlock() +} + +func (h *packetHandlerMap) AddWithConnID(clientDestConnID, newConnID protocol.ConnectionID, handler packetHandler) bool { + h.mutex.Lock() + defer h.mutex.Unlock() + + if _, ok := h.handlers[clientDestConnID]; ok { + h.logger.Debugf("Not adding connection ID %s for a new connection, as it already exists.", clientDestConnID) + return false + } + h.handlers[clientDestConnID] = handler + h.handlers[newConnID] = handler + h.logger.Debugf("Adding connection IDs %s and %s for a new connection.", clientDestConnID, newConnID) + return true +} + +func (h *packetHandlerMap) Remove(id protocol.ConnectionID) { + h.mutex.Lock() + delete(h.handlers, id) + h.mutex.Unlock() + h.logger.Debugf("Removing connection ID %s.", id) +} + +// ReplaceWithClosed is called when a connection is closed. +// Depending on which side closed the connection, we need to: +// * remote close: absorb delayed packets +// * local close: retransmit the CONNECTION_CLOSE packet, in case it was lost +func (h *packetHandlerMap) ReplaceWithClosed(ids []protocol.ConnectionID, connClosePacket []byte, expiry time.Duration) { + var handler packetHandler + if connClosePacket != nil { + handler = newClosedLocalConn( + func(addr net.Addr, info packetInfo) { + select { + case h.closeQueue <- closePacket{payload: connClosePacket, addr: addr, info: info}: + default: + // We're backlogged. + // Just drop the packet, sending CONNECTION_CLOSE copies is best effort anyway. + } + }, + h.logger, + ) + } else { + handler = newClosedRemoteConn() + } + + h.mutex.Lock() + for _, id := range ids { + h.handlers[id] = handler + } + h.mutex.Unlock() + h.logger.Debugf("Replacing connection for connection IDs %s with a closed connection.", ids) + + time.AfterFunc(expiry, func() { + h.mutex.Lock() + for _, id := range ids { + delete(h.handlers, id) + } + if len(h.handlers) == 0 { + t := (*Transport)(h) + t.maybeStopListening() + } + h.mutex.Unlock() + h.logger.Debugf("Removing connection IDs %s for a closed connection after it has been retired.", ids) + }) +} diff --git a/vendor/github.com/stretchr/testify/assert/assertion_compare.go b/vendor/github.com/stretchr/testify/assert/assertion_compare.go index 7e19eba..ffb24e8 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_compare.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_compare.go @@ -390,7 +390,8 @@ func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface if h, ok := t.(tHelper); ok { h.Helper() } - return compareTwoValues(t, e1, e2, []compareResult{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs...) + failMessage := fmt.Sprintf("\"%v\" is not greater than \"%v\"", e1, e2) + return compareTwoValues(t, e1, e2, []compareResult{compareGreater}, failMessage, msgAndArgs...) } // GreaterOrEqual asserts that the first element is greater than or equal to the second @@ -403,7 +404,8 @@ func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...in if h, ok := t.(tHelper); ok { h.Helper() } - return compareTwoValues(t, e1, e2, []compareResult{compareGreater, compareEqual}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs...) + failMessage := fmt.Sprintf("\"%v\" is not greater than or equal to \"%v\"", e1, e2) + return compareTwoValues(t, e1, e2, []compareResult{compareGreater, compareEqual}, failMessage, msgAndArgs...) } // Less asserts that the first element is less than the second @@ -415,7 +417,8 @@ func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) if h, ok := t.(tHelper); ok { h.Helper() } - return compareTwoValues(t, e1, e2, []compareResult{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs...) + failMessage := fmt.Sprintf("\"%v\" is not less than \"%v\"", e1, e2) + return compareTwoValues(t, e1, e2, []compareResult{compareLess}, failMessage, msgAndArgs...) } // LessOrEqual asserts that the first element is less than or equal to the second @@ -428,7 +431,8 @@ func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...inter if h, ok := t.(tHelper); ok { h.Helper() } - return compareTwoValues(t, e1, e2, []compareResult{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs...) + failMessage := fmt.Sprintf("\"%v\" is not less than or equal to \"%v\"", e1, e2) + return compareTwoValues(t, e1, e2, []compareResult{compareLess, compareEqual}, failMessage, msgAndArgs...) } // Positive asserts that the specified element is positive @@ -440,7 +444,8 @@ func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) bool { h.Helper() } zero := reflect.Zero(reflect.TypeOf(e)) - return compareTwoValues(t, e, zero.Interface(), []compareResult{compareGreater}, "\"%v\" is not positive", msgAndArgs...) + failMessage := fmt.Sprintf("\"%v\" is not positive", e) + return compareTwoValues(t, e, zero.Interface(), []compareResult{compareGreater}, failMessage, msgAndArgs...) } // Negative asserts that the specified element is negative @@ -452,7 +457,8 @@ func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) bool { h.Helper() } zero := reflect.Zero(reflect.TypeOf(e)) - return compareTwoValues(t, e, zero.Interface(), []compareResult{compareLess}, "\"%v\" is not negative", msgAndArgs...) + failMessage := fmt.Sprintf("\"%v\" is not negative", e) + return compareTwoValues(t, e, zero.Interface(), []compareResult{compareLess}, failMessage, msgAndArgs...) } func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedComparesResults []compareResult, failMessage string, msgAndArgs ...interface{}) bool { @@ -468,11 +474,11 @@ func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedCompare compareResult, isComparable := compare(e1, e2, e1Kind) if !isComparable { - return Fail(t, fmt.Sprintf("Can not compare type \"%s\"", reflect.TypeOf(e1)), msgAndArgs...) + return Fail(t, fmt.Sprintf(`Can not compare type "%T"`, e1), msgAndArgs...) } if !containsValue(allowedComparesResults, compareResult) { - return Fail(t, fmt.Sprintf(failMessage, e1, e2), msgAndArgs...) + return Fail(t, failMessage, msgAndArgs...) } return true diff --git a/vendor/github.com/stretchr/testify/assert/assertion_format.go b/vendor/github.com/stretchr/testify/assert/assertion_format.go index 1906341..c592f6a 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_format.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_format.go @@ -50,10 +50,19 @@ func ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string return ElementsMatch(t, listA, listB, append([]interface{}{msg}, args...)...) } -// Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. +// Emptyf asserts that the given value is "empty". +// +// [Zero values] are "empty". +// +// Arrays are "empty" if every element is the zero value of the type (stricter than "empty"). +// +// Slices, maps and channels with zero length are "empty". +// +// Pointer values are "empty" if the pointer is nil or if the pointed value is "empty". // // assert.Emptyf(t, obj, "error message %s", "formatted") +// +// [Zero values]: https://go.dev/ref/spec#The_zero_value func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -117,10 +126,8 @@ func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg stri // Errorf asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if assert.Errorf(t, err, "error message %s", "formatted") { -// assert.Equal(t, expectedErrorf, err) -// } +// actualObj, err := SomeFunction() +// assert.Errorf(t, err, "error message %s", "formatted") func Errorf(t TestingT, err error, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -438,7 +445,19 @@ func IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interf return IsNonIncreasing(t, object, append([]interface{}{msg}, args...)...) } +// IsNotTypef asserts that the specified objects are not of the same type. +// +// assert.IsNotTypef(t, &NotMyStruct{}, &MyStruct{}, "error message %s", "formatted") +func IsNotTypef(t TestingT, theType interface{}, object interface{}, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return IsNotType(t, theType, object, append([]interface{}{msg}, args...)...) +} + // IsTypef asserts that the specified objects are of the same type. +// +// assert.IsTypef(t, &MyStruct{}, &MyStruct{}, "error message %s", "formatted") func IsTypef(t TestingT, expectedType interface{}, object interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -585,8 +604,7 @@ func NotElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg str return NotElementsMatch(t, listA, listB, append([]interface{}{msg}, args...)...) } -// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. +// NotEmptyf asserts that the specified object is NOT [Empty]. // // if assert.NotEmptyf(t, obj, "error message %s", "formatted") { // assert.Equal(t, "two", obj[1]) @@ -693,12 +711,15 @@ func NotSamef(t TestingT, expected interface{}, actual interface{}, msg string, return NotSame(t, expected, actual, append([]interface{}{msg}, args...)...) } -// NotSubsetf asserts that the specified list(array, slice...) or map does NOT -// contain all elements given in the specified subset list(array, slice...) or -// map. +// NotSubsetf asserts that the list (array, slice, or map) does NOT contain all +// elements given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // assert.NotSubsetf(t, [1, 3, 4], [1, 2], "error message %s", "formatted") // assert.NotSubsetf(t, {"x": 1, "y": 2}, {"z": 3}, "error message %s", "formatted") +// assert.NotSubsetf(t, [1, 3, 4], {1: "one", 2: "two"}, "error message %s", "formatted") +// assert.NotSubsetf(t, {"x": 1, "y": 2}, ["z"], "error message %s", "formatted") func NotSubsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -782,11 +803,15 @@ func Samef(t TestingT, expected interface{}, actual interface{}, msg string, arg return Same(t, expected, actual, append([]interface{}{msg}, args...)...) } -// Subsetf asserts that the specified list(array, slice...) or map contains all -// elements given in the specified subset list(array, slice...) or map. +// Subsetf asserts that the list (array, slice, or map) contains all elements +// given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // assert.Subsetf(t, [1, 2, 3], [1, 2], "error message %s", "formatted") // assert.Subsetf(t, {"x": 1, "y": 2}, {"x": 1}, "error message %s", "formatted") +// assert.Subsetf(t, [1, 2, 3], {1: "one", 2: "two"}, "error message %s", "formatted") +// assert.Subsetf(t, {"x": 1, "y": 2}, ["x"], "error message %s", "formatted") func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() diff --git a/vendor/github.com/stretchr/testify/assert/assertion_forward.go b/vendor/github.com/stretchr/testify/assert/assertion_forward.go index 2162908..58db928 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_forward.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_forward.go @@ -92,10 +92,19 @@ func (a *Assertions) ElementsMatchf(listA interface{}, listB interface{}, msg st return ElementsMatchf(a.t, listA, listB, msg, args...) } -// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. +// Empty asserts that the given value is "empty". +// +// [Zero values] are "empty". +// +// Arrays are "empty" if every element is the zero value of the type (stricter than "empty"). +// +// Slices, maps and channels with zero length are "empty". +// +// Pointer values are "empty" if the pointer is nil or if the pointed value is "empty". // // a.Empty(obj) +// +// [Zero values]: https://go.dev/ref/spec#The_zero_value func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -103,10 +112,19 @@ func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) bool { return Empty(a.t, object, msgAndArgs...) } -// Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. +// Emptyf asserts that the given value is "empty". +// +// [Zero values] are "empty". +// +// Arrays are "empty" if every element is the zero value of the type (stricter than "empty"). +// +// Slices, maps and channels with zero length are "empty". +// +// Pointer values are "empty" if the pointer is nil or if the pointed value is "empty". // // a.Emptyf(obj, "error message %s", "formatted") +// +// [Zero values]: https://go.dev/ref/spec#The_zero_value func (a *Assertions) Emptyf(object interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -224,10 +242,8 @@ func (a *Assertions) Equalf(expected interface{}, actual interface{}, msg string // Error asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if a.Error(err) { -// assert.Equal(t, expectedError, err) -// } +// actualObj, err := SomeFunction() +// a.Error(err) func (a *Assertions) Error(err error, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -297,10 +313,8 @@ func (a *Assertions) ErrorIsf(err error, target error, msg string, args ...inter // Errorf asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if a.Errorf(err, "error message %s", "formatted") { -// assert.Equal(t, expectedErrorf, err) -// } +// actualObj, err := SomeFunction() +// a.Errorf(err, "error message %s", "formatted") func (a *Assertions) Errorf(err error, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -868,7 +882,29 @@ func (a *Assertions) IsNonIncreasingf(object interface{}, msg string, args ...in return IsNonIncreasingf(a.t, object, msg, args...) } +// IsNotType asserts that the specified objects are not of the same type. +// +// a.IsNotType(&NotMyStruct{}, &MyStruct{}) +func (a *Assertions) IsNotType(theType interface{}, object interface{}, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return IsNotType(a.t, theType, object, msgAndArgs...) +} + +// IsNotTypef asserts that the specified objects are not of the same type. +// +// a.IsNotTypef(&NotMyStruct{}, &MyStruct{}, "error message %s", "formatted") +func (a *Assertions) IsNotTypef(theType interface{}, object interface{}, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return IsNotTypef(a.t, theType, object, msg, args...) +} + // IsType asserts that the specified objects are of the same type. +// +// a.IsType(&MyStruct{}, &MyStruct{}) func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -877,6 +913,8 @@ func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAnd } // IsTypef asserts that the specified objects are of the same type. +// +// a.IsTypef(&MyStruct{}, &MyStruct{}, "error message %s", "formatted") func (a *Assertions) IsTypef(expectedType interface{}, object interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1162,8 +1200,7 @@ func (a *Assertions) NotElementsMatchf(listA interface{}, listB interface{}, msg return NotElementsMatchf(a.t, listA, listB, msg, args...) } -// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. +// NotEmpty asserts that the specified object is NOT [Empty]. // // if a.NotEmpty(obj) { // assert.Equal(t, "two", obj[1]) @@ -1175,8 +1212,7 @@ func (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) boo return NotEmpty(a.t, object, msgAndArgs...) } -// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. +// NotEmptyf asserts that the specified object is NOT [Empty]. // // if a.NotEmptyf(obj, "error message %s", "formatted") { // assert.Equal(t, "two", obj[1]) @@ -1378,12 +1414,15 @@ func (a *Assertions) NotSamef(expected interface{}, actual interface{}, msg stri return NotSamef(a.t, expected, actual, msg, args...) } -// NotSubset asserts that the specified list(array, slice...) or map does NOT -// contain all elements given in the specified subset list(array, slice...) or -// map. +// NotSubset asserts that the list (array, slice, or map) does NOT contain all +// elements given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // a.NotSubset([1, 3, 4], [1, 2]) // a.NotSubset({"x": 1, "y": 2}, {"z": 3}) +// a.NotSubset([1, 3, 4], {1: "one", 2: "two"}) +// a.NotSubset({"x": 1, "y": 2}, ["z"]) func (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1391,12 +1430,15 @@ func (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs return NotSubset(a.t, list, subset, msgAndArgs...) } -// NotSubsetf asserts that the specified list(array, slice...) or map does NOT -// contain all elements given in the specified subset list(array, slice...) or -// map. +// NotSubsetf asserts that the list (array, slice, or map) does NOT contain all +// elements given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // a.NotSubsetf([1, 3, 4], [1, 2], "error message %s", "formatted") // a.NotSubsetf({"x": 1, "y": 2}, {"z": 3}, "error message %s", "formatted") +// a.NotSubsetf([1, 3, 4], {1: "one", 2: "two"}, "error message %s", "formatted") +// a.NotSubsetf({"x": 1, "y": 2}, ["z"], "error message %s", "formatted") func (a *Assertions) NotSubsetf(list interface{}, subset interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1556,11 +1598,15 @@ func (a *Assertions) Samef(expected interface{}, actual interface{}, msg string, return Samef(a.t, expected, actual, msg, args...) } -// Subset asserts that the specified list(array, slice...) or map contains all -// elements given in the specified subset list(array, slice...) or map. +// Subset asserts that the list (array, slice, or map) contains all elements +// given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // a.Subset([1, 2, 3], [1, 2]) // a.Subset({"x": 1, "y": 2}, {"x": 1}) +// a.Subset([1, 2, 3], {1: "one", 2: "two"}) +// a.Subset({"x": 1, "y": 2}, ["x"]) func (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1568,11 +1614,15 @@ func (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ... return Subset(a.t, list, subset, msgAndArgs...) } -// Subsetf asserts that the specified list(array, slice...) or map contains all -// elements given in the specified subset list(array, slice...) or map. +// Subsetf asserts that the list (array, slice, or map) contains all elements +// given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // a.Subsetf([1, 2, 3], [1, 2], "error message %s", "formatted") // a.Subsetf({"x": 1, "y": 2}, {"x": 1}, "error message %s", "formatted") +// a.Subsetf([1, 2, 3], {1: "one", 2: "two"}, "error message %s", "formatted") +// a.Subsetf({"x": 1, "y": 2}, ["x"], "error message %s", "formatted") func (a *Assertions) Subsetf(list interface{}, subset interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() diff --git a/vendor/github.com/stretchr/testify/assert/assertion_order.go b/vendor/github.com/stretchr/testify/assert/assertion_order.go index 1d2f718..2fdf80f 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_order.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_order.go @@ -33,7 +33,7 @@ func isOrdered(t TestingT, object interface{}, allowedComparesResults []compareR compareResult, isComparable := compare(prevValueInterface, valueInterface, firstValueKind) if !isComparable { - return Fail(t, fmt.Sprintf("Can not compare type \"%s\" and \"%s\"", reflect.TypeOf(value), reflect.TypeOf(prevValue)), msgAndArgs...) + return Fail(t, fmt.Sprintf(`Can not compare type "%T" and "%T"`, value, prevValue), msgAndArgs...) } if !containsValue(allowedComparesResults, compareResult) { diff --git a/vendor/github.com/stretchr/testify/assert/assertions.go b/vendor/github.com/stretchr/testify/assert/assertions.go index 4e91332..de8de0c 100644 --- a/vendor/github.com/stretchr/testify/assert/assertions.go +++ b/vendor/github.com/stretchr/testify/assert/assertions.go @@ -210,59 +210,77 @@ the problem actually occurred in calling code.*/ // of each stack frame leading from the current test to the assert call that // failed. func CallerInfo() []string { - var pc uintptr - var ok bool var file string var line int var name string + const stackFrameBufferSize = 10 + pcs := make([]uintptr, stackFrameBufferSize) + callers := []string{} - for i := 0; ; i++ { - pc, file, line, ok = runtime.Caller(i) - if !ok { - // The breaks below failed to terminate the loop, and we ran off the - // end of the call stack. - break - } + offset := 1 - // This is a huge edge case, but it will panic if this is the case, see #180 - if file == "" { - break - } + for { + n := runtime.Callers(offset, pcs) - f := runtime.FuncForPC(pc) - if f == nil { - break - } - name = f.Name() - - // testing.tRunner is the standard library function that calls - // tests. Subtests are called directly by tRunner, without going through - // the Test/Benchmark/Example function that contains the t.Run calls, so - // with subtests we should break when we hit tRunner, without adding it - // to the list of callers. - if name == "testing.tRunner" { + if n == 0 { break } - parts := strings.Split(file, "/") - if len(parts) > 1 { - filename := parts[len(parts)-1] - dir := parts[len(parts)-2] - if (dir != "assert" && dir != "mock" && dir != "require") || filename == "mock_test.go" { - callers = append(callers, fmt.Sprintf("%s:%d", file, line)) + frames := runtime.CallersFrames(pcs[:n]) + + for { + frame, more := frames.Next() + pc = frame.PC + file = frame.File + line = frame.Line + + // This is a huge edge case, but it will panic if this is the case, see #180 + if file == "" { + break } - } - // Drop the package - segments := strings.Split(name, ".") - name = segments[len(segments)-1] - if isTest(name, "Test") || - isTest(name, "Benchmark") || - isTest(name, "Example") { - break + f := runtime.FuncForPC(pc) + if f == nil { + break + } + name = f.Name() + + // testing.tRunner is the standard library function that calls + // tests. Subtests are called directly by tRunner, without going through + // the Test/Benchmark/Example function that contains the t.Run calls, so + // with subtests we should break when we hit tRunner, without adding it + // to the list of callers. + if name == "testing.tRunner" { + break + } + + parts := strings.Split(file, "/") + if len(parts) > 1 { + filename := parts[len(parts)-1] + dir := parts[len(parts)-2] + if (dir != "assert" && dir != "mock" && dir != "require") || filename == "mock_test.go" { + callers = append(callers, fmt.Sprintf("%s:%d", file, line)) + } + } + + // Drop the package + dotPos := strings.LastIndexByte(name, '.') + name = name[dotPos+1:] + if isTest(name, "Test") || + isTest(name, "Benchmark") || + isTest(name, "Example") { + break + } + + if !more { + break + } } + + // Next batch + offset += cap(pcs) } return callers @@ -437,17 +455,34 @@ func NotImplements(t TestingT, interfaceObject interface{}, object interface{}, return true } +func isType(expectedType, object interface{}) bool { + return ObjectsAreEqual(reflect.TypeOf(object), reflect.TypeOf(expectedType)) +} + // IsType asserts that the specified objects are of the same type. -func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool { +// +// assert.IsType(t, &MyStruct{}, &MyStruct{}) +func IsType(t TestingT, expectedType, object interface{}, msgAndArgs ...interface{}) bool { + if isType(expectedType, object) { + return true + } if h, ok := t.(tHelper); ok { h.Helper() } + return Fail(t, fmt.Sprintf("Object expected to be of type %T, but was %T", expectedType, object), msgAndArgs...) +} - if !ObjectsAreEqual(reflect.TypeOf(object), reflect.TypeOf(expectedType)) { - return Fail(t, fmt.Sprintf("Object expected to be of type %v, but was %v", reflect.TypeOf(expectedType), reflect.TypeOf(object)), msgAndArgs...) +// IsNotType asserts that the specified objects are not of the same type. +// +// assert.IsNotType(t, &NotMyStruct{}, &MyStruct{}) +func IsNotType(t TestingT, theType, object interface{}, msgAndArgs ...interface{}) bool { + if !isType(theType, object) { + return true } - - return true + if h, ok := t.(tHelper); ok { + h.Helper() + } + return Fail(t, fmt.Sprintf("Object type expected to be different than %T", theType), msgAndArgs...) } // Equal asserts that two objects are equal. @@ -475,7 +510,6 @@ func Equal(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) } return true - } // validateEqualArgs checks whether provided arguments can be safely used in the @@ -510,8 +544,9 @@ func Same(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) b if !same { // both are pointers but not the same type & pointing to the same address return Fail(t, fmt.Sprintf("Not same: \n"+ - "expected: %p %#v\n"+ - "actual : %p %#v", expected, expected, actual, actual), msgAndArgs...) + "expected: %p %#[1]v\n"+ + "actual : %p %#[2]v", + expected, actual), msgAndArgs...) } return true @@ -530,14 +565,14 @@ func NotSame(t TestingT, expected, actual interface{}, msgAndArgs ...interface{} same, ok := samePointers(expected, actual) if !ok { - //fails when the arguments are not pointers + // fails when the arguments are not pointers return !(Fail(t, "Both arguments must be pointers", msgAndArgs...)) } if same { return Fail(t, fmt.Sprintf( - "Expected and actual point to the same object: %p %#v", - expected, expected), msgAndArgs...) + "Expected and actual point to the same object: %p %#[1]v", + expected), msgAndArgs...) } return true } @@ -549,7 +584,7 @@ func NotSame(t TestingT, expected, actual interface{}, msgAndArgs ...interface{} func samePointers(first, second interface{}) (same bool, ok bool) { firstPtr, secondPtr := reflect.ValueOf(first), reflect.ValueOf(second) if firstPtr.Kind() != reflect.Ptr || secondPtr.Kind() != reflect.Ptr { - return false, false //not both are pointers + return false, false // not both are pointers } firstType, secondType := reflect.TypeOf(first), reflect.TypeOf(second) @@ -610,7 +645,6 @@ func EqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interfa } return true - } // EqualExportedValues asserts that the types of two objects are equal and their public @@ -665,7 +699,6 @@ func Exactly(t TestingT, expected, actual interface{}, msgAndArgs ...interface{} } return Equal(t, expected, actual, msgAndArgs...) - } // NotNil asserts that the specified object is not nil. @@ -715,37 +748,45 @@ func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { // isEmpty gets whether the specified object is considered empty or not. func isEmpty(object interface{}) bool { - // get nil case out of the way if object == nil { return true } - objValue := reflect.ValueOf(object) + return isEmptyValue(reflect.ValueOf(object)) +} +// isEmptyValue gets whether the specified reflect.Value is considered empty or not. +func isEmptyValue(objValue reflect.Value) bool { + if objValue.IsZero() { + return true + } + // Special cases of non-zero values that we consider empty switch objValue.Kind() { // collection types are empty when they have no element + // Note: array types are empty when they match their zero-initialized state. case reflect.Chan, reflect.Map, reflect.Slice: return objValue.Len() == 0 - // pointers are empty if nil or if the value they point to is empty + // non-nil pointers are empty if the value they point to is empty case reflect.Ptr: - if objValue.IsNil() { - return true - } - deref := objValue.Elem().Interface() - return isEmpty(deref) - // for all other types, compare against the zero value - // array types are empty when they match their zero-initialized state - default: - zero := reflect.Zero(objValue.Type()) - return reflect.DeepEqual(object, zero.Interface()) + return isEmptyValue(objValue.Elem()) } + return false } -// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. +// Empty asserts that the given value is "empty". +// +// [Zero values] are "empty". +// +// Arrays are "empty" if every element is the zero value of the type (stricter than "empty"). +// +// Slices, maps and channels with zero length are "empty". +// +// Pointer values are "empty" if the pointer is nil or if the pointed value is "empty". // // assert.Empty(t, obj) +// +// [Zero values]: https://go.dev/ref/spec#The_zero_value func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { pass := isEmpty(object) if !pass { @@ -756,11 +797,9 @@ func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { } return pass - } -// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. +// NotEmpty asserts that the specified object is NOT [Empty]. // // if assert.NotEmpty(t, obj) { // assert.Equal(t, "two", obj[1]) @@ -775,7 +814,6 @@ func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { } return pass - } // getLen tries to get the length of an object. @@ -819,7 +857,6 @@ func True(t TestingT, value bool, msgAndArgs ...interface{}) bool { } return true - } // False asserts that the specified value is false. @@ -834,7 +871,6 @@ func False(t TestingT, value bool, msgAndArgs ...interface{}) bool { } return true - } // NotEqual asserts that the specified values are NOT equal. @@ -857,7 +893,6 @@ func NotEqual(t TestingT, expected, actual interface{}, msgAndArgs ...interface{ } return true - } // NotEqualValues asserts that two objects are not equal even when converted to the same type @@ -880,7 +915,6 @@ func NotEqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...inte // return (true, false) if element was not found. // return (true, true) if element was found. func containsElement(list interface{}, element interface{}) (ok, found bool) { - listValue := reflect.ValueOf(list) listType := reflect.TypeOf(list) if listType == nil { @@ -915,7 +949,6 @@ func containsElement(list interface{}, element interface{}) (ok, found bool) { } } return true, false - } // Contains asserts that the specified string, list(array, slice...) or map contains the @@ -938,7 +971,6 @@ func Contains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bo } return true - } // NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the @@ -961,14 +993,17 @@ func NotContains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) } return true - } -// Subset asserts that the specified list(array, slice...) or map contains all -// elements given in the specified subset list(array, slice...) or map. +// Subset asserts that the list (array, slice, or map) contains all elements +// given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // assert.Subset(t, [1, 2, 3], [1, 2]) // assert.Subset(t, {"x": 1, "y": 2}, {"x": 1}) +// assert.Subset(t, [1, 2, 3], {1: "one", 2: "two"}) +// assert.Subset(t, {"x": 1, "y": 2}, ["x"]) func Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool) { if h, ok := t.(tHelper); ok { h.Helper() @@ -983,7 +1018,7 @@ func Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok } subsetKind := reflect.TypeOf(subset).Kind() - if subsetKind != reflect.Array && subsetKind != reflect.Slice && listKind != reflect.Map { + if subsetKind != reflect.Array && subsetKind != reflect.Slice && subsetKind != reflect.Map { return Fail(t, fmt.Sprintf("%q has an unsupported type %s", subset, subsetKind), msgAndArgs...) } @@ -1007,6 +1042,13 @@ func Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok } subsetList := reflect.ValueOf(subset) + if subsetKind == reflect.Map { + keys := make([]interface{}, subsetList.Len()) + for idx, key := range subsetList.MapKeys() { + keys[idx] = key.Interface() + } + subsetList = reflect.ValueOf(keys) + } for i := 0; i < subsetList.Len(); i++ { element := subsetList.Index(i).Interface() ok, found := containsElement(list, element) @@ -1021,12 +1063,15 @@ func Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok return true } -// NotSubset asserts that the specified list(array, slice...) or map does NOT -// contain all elements given in the specified subset list(array, slice...) or -// map. +// NotSubset asserts that the list (array, slice, or map) does NOT contain all +// elements given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // assert.NotSubset(t, [1, 3, 4], [1, 2]) // assert.NotSubset(t, {"x": 1, "y": 2}, {"z": 3}) +// assert.NotSubset(t, [1, 3, 4], {1: "one", 2: "two"}) +// assert.NotSubset(t, {"x": 1, "y": 2}, ["z"]) func NotSubset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1041,7 +1086,7 @@ func NotSubset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) } subsetKind := reflect.TypeOf(subset).Kind() - if subsetKind != reflect.Array && subsetKind != reflect.Slice && listKind != reflect.Map { + if subsetKind != reflect.Array && subsetKind != reflect.Slice && subsetKind != reflect.Map { return Fail(t, fmt.Sprintf("%q has an unsupported type %s", subset, subsetKind), msgAndArgs...) } @@ -1065,11 +1110,18 @@ func NotSubset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) } subsetList := reflect.ValueOf(subset) + if subsetKind == reflect.Map { + keys := make([]interface{}, subsetList.Len()) + for idx, key := range subsetList.MapKeys() { + keys[idx] = key.Interface() + } + subsetList = reflect.ValueOf(keys) + } for i := 0; i < subsetList.Len(); i++ { element := subsetList.Index(i).Interface() ok, found := containsElement(list, element) if !ok { - return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", list), msgAndArgs...) + return Fail(t, fmt.Sprintf("%q could not be applied builtin len()", list), msgAndArgs...) } if !found { return true @@ -1591,10 +1643,8 @@ func NoError(t TestingT, err error, msgAndArgs ...interface{}) bool { // Error asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if assert.Error(t, err) { -// assert.Equal(t, expectedError, err) -// } +// actualObj, err := SomeFunction() +// assert.Error(t, err) func Error(t TestingT, err error, msgAndArgs ...interface{}) bool { if err == nil { if h, ok := t.(tHelper); ok { @@ -1667,7 +1717,6 @@ func matchRegexp(rx interface{}, str interface{}) bool { default: return r.MatchString(fmt.Sprint(v)) } - } // Regexp asserts that a specified regexp matches a string. @@ -1703,7 +1752,6 @@ func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interf } return !match - } // Zero asserts that i is the zero value for its type. @@ -1814,6 +1862,11 @@ func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{ return Fail(t, fmt.Sprintf("Expected value ('%s') is not valid json.\nJSON parsing error: '%s'", expected, err.Error()), msgAndArgs...) } + // Shortcut if same bytes + if actual == expected { + return true + } + if err := json.Unmarshal([]byte(actual), &actualJSONAsInterface); err != nil { return Fail(t, fmt.Sprintf("Input ('%s') needs to be valid json.\nJSON parsing error: '%s'", actual, err.Error()), msgAndArgs...) } @@ -1832,6 +1885,11 @@ func YAMLEq(t TestingT, expected string, actual string, msgAndArgs ...interface{ return Fail(t, fmt.Sprintf("Expected value ('%s') is not valid yaml.\nYAML parsing error: '%s'", expected, err.Error()), msgAndArgs...) } + // Shortcut if same bytes + if actual == expected { + return true + } + if err := yaml.Unmarshal([]byte(actual), &actualYAMLAsInterface); err != nil { return Fail(t, fmt.Sprintf("Input ('%s') needs to be valid yaml.\nYAML error: '%s'", actual, err.Error()), msgAndArgs...) } @@ -1933,6 +1991,7 @@ func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick t } ch := make(chan bool, 1) + checkCond := func() { ch <- condition() } timer := time.NewTimer(waitFor) defer timer.Stop() @@ -1940,18 +1999,23 @@ func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick t ticker := time.NewTicker(tick) defer ticker.Stop() - for tick := ticker.C; ; { + var tickC <-chan time.Time + + // Check the condition once first on the initial call. + go checkCond() + + for { select { case <-timer.C: return Fail(t, "Condition never satisfied", msgAndArgs...) - case <-tick: - tick = nil - go func() { ch <- condition() }() + case <-tickC: + tickC = nil + go checkCond() case v := <-ch: if v { return true } - tick = ticker.C + tickC = ticker.C } } } @@ -1964,6 +2028,9 @@ type CollectT struct { errors []error } +// Helper is like [testing.T.Helper] but does nothing. +func (CollectT) Helper() {} + // Errorf collects the error. func (c *CollectT) Errorf(format string, args ...interface{}) { c.errors = append(c.errors, fmt.Errorf(format, args...)) @@ -2021,35 +2088,42 @@ func EventuallyWithT(t TestingT, condition func(collect *CollectT), waitFor time var lastFinishedTickErrs []error ch := make(chan *CollectT, 1) + checkCond := func() { + collect := new(CollectT) + defer func() { + ch <- collect + }() + condition(collect) + } + timer := time.NewTimer(waitFor) defer timer.Stop() ticker := time.NewTicker(tick) defer ticker.Stop() - for tick := ticker.C; ; { + var tickC <-chan time.Time + + // Check the condition once first on the initial call. + go checkCond() + + for { select { case <-timer.C: for _, err := range lastFinishedTickErrs { t.Errorf("%v", err) } return Fail(t, "Condition never satisfied", msgAndArgs...) - case <-tick: - tick = nil - go func() { - collect := new(CollectT) - defer func() { - ch <- collect - }() - condition(collect) - }() + case <-tickC: + tickC = nil + go checkCond() case collect := <-ch: if !collect.failed() { return true } // Keep the errors from the last ended condition, so that they can be copied to t if timeout is reached. lastFinishedTickErrs = collect.errors - tick = ticker.C + tickC = ticker.C } } } @@ -2064,6 +2138,7 @@ func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.D } ch := make(chan bool, 1) + checkCond := func() { ch <- condition() } timer := time.NewTimer(waitFor) defer timer.Stop() @@ -2071,18 +2146,23 @@ func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.D ticker := time.NewTicker(tick) defer ticker.Stop() - for tick := ticker.C; ; { + var tickC <-chan time.Time + + // Check the condition once first on the initial call. + go checkCond() + + for { select { case <-timer.C: return true - case <-tick: - tick = nil - go func() { ch <- condition() }() + case <-tickC: + tickC = nil + go checkCond() case v := <-ch: if v { return Fail(t, "Condition satisfied", msgAndArgs...) } - tick = ticker.C + tickC = ticker.C } } } @@ -2100,9 +2180,12 @@ func ErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool { var expectedText string if target != nil { expectedText = target.Error() + if err == nil { + return Fail(t, fmt.Sprintf("Expected error with %q in chain but got nil.", expectedText), msgAndArgs...) + } } - chain := buildErrorChainString(err) + chain := buildErrorChainString(err, false) return Fail(t, fmt.Sprintf("Target error should be in err chain:\n"+ "expected: %q\n"+ @@ -2125,7 +2208,7 @@ func NotErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool { expectedText = target.Error() } - chain := buildErrorChainString(err) + chain := buildErrorChainString(err, false) return Fail(t, fmt.Sprintf("Target error should not be in err chain:\n"+ "found: %q\n"+ @@ -2143,11 +2226,17 @@ func ErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{ return true } - chain := buildErrorChainString(err) + expectedType := reflect.TypeOf(target).Elem().String() + if err == nil { + return Fail(t, fmt.Sprintf("An error is expected but got nil.\n"+ + "expected: %s", expectedType), msgAndArgs...) + } + + chain := buildErrorChainString(err, true) return Fail(t, fmt.Sprintf("Should be in error chain:\n"+ - "expected: %q\n"+ - "in chain: %s", target, chain, + "expected: %s\n"+ + "in chain: %s", expectedType, chain, ), msgAndArgs...) } @@ -2161,24 +2250,46 @@ func NotErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interfa return true } - chain := buildErrorChainString(err) + chain := buildErrorChainString(err, true) return Fail(t, fmt.Sprintf("Target error should not be in err chain:\n"+ - "found: %q\n"+ - "in chain: %s", target, chain, + "found: %s\n"+ + "in chain: %s", reflect.TypeOf(target).Elem().String(), chain, ), msgAndArgs...) } -func buildErrorChainString(err error) string { +func unwrapAll(err error) (errs []error) { + errs = append(errs, err) + switch x := err.(type) { + case interface{ Unwrap() error }: + err = x.Unwrap() + if err == nil { + return + } + errs = append(errs, unwrapAll(err)...) + case interface{ Unwrap() []error }: + for _, err := range x.Unwrap() { + errs = append(errs, unwrapAll(err)...) + } + } + return +} + +func buildErrorChainString(err error, withType bool) string { if err == nil { return "" } - e := errors.Unwrap(err) - chain := fmt.Sprintf("%q", err.Error()) - for e != nil { - chain += fmt.Sprintf("\n\t%q", e.Error()) - e = errors.Unwrap(e) + var chain string + errs := unwrapAll(err) + for i := range errs { + if i != 0 { + chain += "\n\t" + } + chain += fmt.Sprintf("%q", errs[i].Error()) + if withType { + chain += fmt.Sprintf(" (%T)", errs[i]) + } } return chain } diff --git a/vendor/github.com/stretchr/testify/assert/doc.go b/vendor/github.com/stretchr/testify/assert/doc.go index 4953981..a0b953a 100644 --- a/vendor/github.com/stretchr/testify/assert/doc.go +++ b/vendor/github.com/stretchr/testify/assert/doc.go @@ -1,5 +1,9 @@ // Package assert provides a set of comprehensive testing tools for use with the normal Go testing system. // +// # Note +// +// All functions in this package return a bool value indicating whether the assertion has passed. +// // # Example Usage // // The following is a complete example using assert in a standard test function: diff --git a/vendor/github.com/stretchr/testify/assert/http_assertions.go b/vendor/github.com/stretchr/testify/assert/http_assertions.go index 861ed4b..5a6bb75 100644 --- a/vendor/github.com/stretchr/testify/assert/http_assertions.go +++ b/vendor/github.com/stretchr/testify/assert/http_assertions.go @@ -138,7 +138,7 @@ func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method, url string, contains := strings.Contains(body, fmt.Sprint(str)) if !contains { - Fail(t, fmt.Sprintf("Expected response body for \"%s\" to contain \"%s\" but found \"%s\"", url+"?"+values.Encode(), str, body), msgAndArgs...) + Fail(t, fmt.Sprintf("Expected response body for %q to contain %q but found %q", url+"?"+values.Encode(), str, body), msgAndArgs...) } return contains @@ -158,7 +158,7 @@ func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method, url strin contains := strings.Contains(body, fmt.Sprint(str)) if contains { - Fail(t, fmt.Sprintf("Expected response body for \"%s\" to NOT contain \"%s\" but found \"%s\"", url+"?"+values.Encode(), str, body), msgAndArgs...) + Fail(t, fmt.Sprintf("Expected response body for %q to NOT contain %q but found %q", url+"?"+values.Encode(), str, body), msgAndArgs...) } return !contains diff --git a/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go b/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go index baa0cc7..5a74c4f 100644 --- a/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go +++ b/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go @@ -1,5 +1,4 @@ //go:build testify_yaml_custom && !testify_yaml_fail && !testify_yaml_default -// +build testify_yaml_custom,!testify_yaml_fail,!testify_yaml_default // Package yaml is an implementation of YAML functions that calls a pluggable implementation. // diff --git a/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go b/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go index b83c6cf..0bae80e 100644 --- a/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go +++ b/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go @@ -1,5 +1,4 @@ //go:build !testify_yaml_fail && !testify_yaml_custom -// +build !testify_yaml_fail,!testify_yaml_custom // Package yaml is just an indirection to handle YAML deserialization. // diff --git a/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go b/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go index e78f7df..8041803 100644 --- a/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go +++ b/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go @@ -1,5 +1,4 @@ //go:build testify_yaml_fail && !testify_yaml_custom && !testify_yaml_default -// +build testify_yaml_fail,!testify_yaml_custom,!testify_yaml_default // Package yaml is an implementation of YAML functions that always fail. // diff --git a/vendor/github.com/ugorji/go/codec/README.md b/vendor/github.com/ugorji/go/codec/README.md index b8c1829..d50e90e 100644 --- a/vendor/github.com/ugorji/go/codec/README.md +++ b/vendor/github.com/ugorji/go/codec/README.md @@ -80,6 +80,32 @@ Rich Feature Set includes: rpc server/client codec to support msgpack-rpc protocol defined at: https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md +# Supported build tags + +We gain performance by code-generating fast-paths for slices and maps of built-in types, +and monomorphizing generic code explicitly so we gain inlining and de-virtualization benefits. + +The results are 20-40% performance improvements. + +Building and running is configured using build tags as below. + +At runtime: + +- codec.safe: run in safe mode (not using unsafe optimizations) +- codec.notmono: use generics code (bypassing performance-boosting monomorphized code) +- codec.notfastpath: skip fast path code for slices and maps of built-in types (number, bool, string, bytes) + +Each of these "runtime" tags have a convenience synonym i.e. safe, notmono, notfastpath. +Pls use these mostly during development - use codec.XXX in your go files. + +Build only: + +- codec.build: used to generate fastpath and monomorphization code + +Test only: + +- codec.notmammoth: skip the mammoth generated tests + # Extension Support Users can register a function to handle the encoding or decoding of their custom @@ -219,6 +245,12 @@ You can run the tag 'codec.safe' to run tests or build in safe mode. e.g. go test -tags "alltests codec.safe" -run Suite ``` +You can run the tag 'codec.notmono' to build bypassing the monomorphized code e.g. + +``` + go test -tags codec.notmono -run Json +``` + # Running Benchmarks ``` diff --git a/vendor/github.com/ugorji/go/codec/base.fastpath.generated.go b/vendor/github.com/ugorji/go/codec/base.fastpath.generated.go new file mode 100644 index 0000000..d1fbba4 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/base.fastpath.generated.go @@ -0,0 +1,259 @@ +//go:build !notfastpath && !codec.notfastpath + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +// Code generated from fastpath.go.tmpl - DO NOT EDIT. + +package codec + +// Fast path functions try to create a fast path encode or decode implementation +// for common maps and slices. +// +// We define the functions and register them in this single file +// so as not to pollute the encode.go and decode.go, and create a dependency in there. +// This file can be omitted without causing a build failure. +// +// The advantage of fast paths is: +// - Many calls bypass reflection altogether +// +// Currently support +// - slice of all builtin types (numeric, bool, string, []byte) +// - maps of builtin types to builtin or interface{} type, EXCEPT FOR +// keys of type uintptr, int8/16/32, uint16/32, float32/64, bool, interface{} +// AND values of type type int8/16/32, uint16/32 +// This should provide adequate "typical" implementations. +// +// Note that fast track decode functions must handle values for which an address cannot be obtained. +// For example: +// m2 := map[string]int{} +// p2 := []interface{}{m2} +// // decoding into p2 will bomb if fast track functions do not treat like unaddressable. +// + +import ( + "reflect" + "slices" + "sort" +) + +const fastpathEnabled = true + +type fastpathARtid [56]uintptr + +type fastpathRtRtid struct { + rtid uintptr + rt reflect.Type +} +type fastpathARtRtid [56]fastpathRtRtid + +var ( + fastpathAvRtidArr fastpathARtid + fastpathAvRtRtidArr fastpathARtRtid + fastpathAvRtid = fastpathAvRtidArr[:] + fastpathAvRtRtid = fastpathAvRtRtidArr[:] +) + +func fastpathAvIndex(rtid uintptr) (i uint, ok bool) { + return searchRtids(fastpathAvRtid, rtid) +} + +func init() { + var i uint = 0 + fn := func(v interface{}) { + xrt := reflect.TypeOf(v) + xrtid := rt2id(xrt) + xptrtid := rt2id(reflect.PointerTo(xrt)) + fastpathAvRtid[i] = xrtid + fastpathAvRtRtid[i] = fastpathRtRtid{rtid: xrtid, rt: xrt} + encBuiltinRtids = append(encBuiltinRtids, xrtid, xptrtid) + decBuiltinRtids = append(decBuiltinRtids, xrtid, xptrtid) + i++ + } + + fn([]interface{}(nil)) + fn([]string(nil)) + fn([][]byte(nil)) + fn([]float32(nil)) + fn([]float64(nil)) + fn([]uint8(nil)) + fn([]uint64(nil)) + fn([]int(nil)) + fn([]int32(nil)) + fn([]int64(nil)) + fn([]bool(nil)) + + fn(map[string]interface{}(nil)) + fn(map[string]string(nil)) + fn(map[string][]byte(nil)) + fn(map[string]uint8(nil)) + fn(map[string]uint64(nil)) + fn(map[string]int(nil)) + fn(map[string]int32(nil)) + fn(map[string]float64(nil)) + fn(map[string]bool(nil)) + fn(map[uint8]interface{}(nil)) + fn(map[uint8]string(nil)) + fn(map[uint8][]byte(nil)) + fn(map[uint8]uint8(nil)) + fn(map[uint8]uint64(nil)) + fn(map[uint8]int(nil)) + fn(map[uint8]int32(nil)) + fn(map[uint8]float64(nil)) + fn(map[uint8]bool(nil)) + fn(map[uint64]interface{}(nil)) + fn(map[uint64]string(nil)) + fn(map[uint64][]byte(nil)) + fn(map[uint64]uint8(nil)) + fn(map[uint64]uint64(nil)) + fn(map[uint64]int(nil)) + fn(map[uint64]int32(nil)) + fn(map[uint64]float64(nil)) + fn(map[uint64]bool(nil)) + fn(map[int]interface{}(nil)) + fn(map[int]string(nil)) + fn(map[int][]byte(nil)) + fn(map[int]uint8(nil)) + fn(map[int]uint64(nil)) + fn(map[int]int(nil)) + fn(map[int]int32(nil)) + fn(map[int]float64(nil)) + fn(map[int]bool(nil)) + fn(map[int32]interface{}(nil)) + fn(map[int32]string(nil)) + fn(map[int32][]byte(nil)) + fn(map[int32]uint8(nil)) + fn(map[int32]uint64(nil)) + fn(map[int32]int(nil)) + fn(map[int32]int32(nil)) + fn(map[int32]float64(nil)) + fn(map[int32]bool(nil)) + + sort.Slice(fastpathAvRtid, func(i, j int) bool { return fastpathAvRtid[i] < fastpathAvRtid[j] }) + sort.Slice(fastpathAvRtRtid, func(i, j int) bool { return fastpathAvRtRtid[i].rtid < fastpathAvRtRtid[j].rtid }) + slices.Sort(encBuiltinRtids) + slices.Sort(decBuiltinRtids) +} + +func fastpathDecodeSetZeroTypeSwitch(iv interface{}) bool { + switch v := iv.(type) { + case *[]interface{}: + *v = nil + case *[]string: + *v = nil + case *[][]byte: + *v = nil + case *[]float32: + *v = nil + case *[]float64: + *v = nil + case *[]uint8: + *v = nil + case *[]uint64: + *v = nil + case *[]int: + *v = nil + case *[]int32: + *v = nil + case *[]int64: + *v = nil + case *[]bool: + *v = nil + + case *map[string]interface{}: + *v = nil + case *map[string]string: + *v = nil + case *map[string][]byte: + *v = nil + case *map[string]uint8: + *v = nil + case *map[string]uint64: + *v = nil + case *map[string]int: + *v = nil + case *map[string]int32: + *v = nil + case *map[string]float64: + *v = nil + case *map[string]bool: + *v = nil + case *map[uint8]interface{}: + *v = nil + case *map[uint8]string: + *v = nil + case *map[uint8][]byte: + *v = nil + case *map[uint8]uint8: + *v = nil + case *map[uint8]uint64: + *v = nil + case *map[uint8]int: + *v = nil + case *map[uint8]int32: + *v = nil + case *map[uint8]float64: + *v = nil + case *map[uint8]bool: + *v = nil + case *map[uint64]interface{}: + *v = nil + case *map[uint64]string: + *v = nil + case *map[uint64][]byte: + *v = nil + case *map[uint64]uint8: + *v = nil + case *map[uint64]uint64: + *v = nil + case *map[uint64]int: + *v = nil + case *map[uint64]int32: + *v = nil + case *map[uint64]float64: + *v = nil + case *map[uint64]bool: + *v = nil + case *map[int]interface{}: + *v = nil + case *map[int]string: + *v = nil + case *map[int][]byte: + *v = nil + case *map[int]uint8: + *v = nil + case *map[int]uint64: + *v = nil + case *map[int]int: + *v = nil + case *map[int]int32: + *v = nil + case *map[int]float64: + *v = nil + case *map[int]bool: + *v = nil + case *map[int32]interface{}: + *v = nil + case *map[int32]string: + *v = nil + case *map[int32][]byte: + *v = nil + case *map[int32]uint8: + *v = nil + case *map[int32]uint64: + *v = nil + case *map[int32]int: + *v = nil + case *map[int32]int32: + *v = nil + case *map[int32]float64: + *v = nil + case *map[int32]bool: + *v = nil + + default: + _ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4 + return false + } + return true +} diff --git a/vendor/github.com/ugorji/go/codec/base.fastpath.notmono.generated.go b/vendor/github.com/ugorji/go/codec/base.fastpath.notmono.generated.go new file mode 100644 index 0000000..5723834 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/base.fastpath.notmono.generated.go @@ -0,0 +1,6259 @@ +//go:build !notfastpath && !codec.notfastpath && (notmono || codec.notmono) + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +// Code generated from fastpath.notmono.go.tmpl - DO NOT EDIT. + +package codec + +import ( + "reflect" + "slices" + "sort" +) + +type fastpathE[T encDriver] struct { + rtid uintptr + rt reflect.Type + encfn func(*encoder[T], *encFnInfo, reflect.Value) +} +type fastpathD[T decDriver] struct { + rtid uintptr + rt reflect.Type + decfn func(*decoder[T], *decFnInfo, reflect.Value) +} +type fastpathEs[T encDriver] [56]fastpathE[T] +type fastpathDs[T decDriver] [56]fastpathD[T] + +type fastpathET[T encDriver] struct{} +type fastpathDT[T decDriver] struct{} + +func (helperEncDriver[T]) fastpathEList() *fastpathEs[T] { + var i uint = 0 + var s fastpathEs[T] + fn := func(v interface{}, fe func(*encoder[T], *encFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathE[T]{rt2id(xrt), xrt, fe} + i++ + } + + fn([]interface{}(nil), (*encoder[T]).fastpathEncSliceIntfR) + fn([]string(nil), (*encoder[T]).fastpathEncSliceStringR) + fn([][]byte(nil), (*encoder[T]).fastpathEncSliceBytesR) + fn([]float32(nil), (*encoder[T]).fastpathEncSliceFloat32R) + fn([]float64(nil), (*encoder[T]).fastpathEncSliceFloat64R) + fn([]uint8(nil), (*encoder[T]).fastpathEncSliceUint8R) + fn([]uint64(nil), (*encoder[T]).fastpathEncSliceUint64R) + fn([]int(nil), (*encoder[T]).fastpathEncSliceIntR) + fn([]int32(nil), (*encoder[T]).fastpathEncSliceInt32R) + fn([]int64(nil), (*encoder[T]).fastpathEncSliceInt64R) + fn([]bool(nil), (*encoder[T]).fastpathEncSliceBoolR) + + fn(map[string]interface{}(nil), (*encoder[T]).fastpathEncMapStringIntfR) + fn(map[string]string(nil), (*encoder[T]).fastpathEncMapStringStringR) + fn(map[string][]byte(nil), (*encoder[T]).fastpathEncMapStringBytesR) + fn(map[string]uint8(nil), (*encoder[T]).fastpathEncMapStringUint8R) + fn(map[string]uint64(nil), (*encoder[T]).fastpathEncMapStringUint64R) + fn(map[string]int(nil), (*encoder[T]).fastpathEncMapStringIntR) + fn(map[string]int32(nil), (*encoder[T]).fastpathEncMapStringInt32R) + fn(map[string]float64(nil), (*encoder[T]).fastpathEncMapStringFloat64R) + fn(map[string]bool(nil), (*encoder[T]).fastpathEncMapStringBoolR) + fn(map[uint8]interface{}(nil), (*encoder[T]).fastpathEncMapUint8IntfR) + fn(map[uint8]string(nil), (*encoder[T]).fastpathEncMapUint8StringR) + fn(map[uint8][]byte(nil), (*encoder[T]).fastpathEncMapUint8BytesR) + fn(map[uint8]uint8(nil), (*encoder[T]).fastpathEncMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*encoder[T]).fastpathEncMapUint8Uint64R) + fn(map[uint8]int(nil), (*encoder[T]).fastpathEncMapUint8IntR) + fn(map[uint8]int32(nil), (*encoder[T]).fastpathEncMapUint8Int32R) + fn(map[uint8]float64(nil), (*encoder[T]).fastpathEncMapUint8Float64R) + fn(map[uint8]bool(nil), (*encoder[T]).fastpathEncMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*encoder[T]).fastpathEncMapUint64IntfR) + fn(map[uint64]string(nil), (*encoder[T]).fastpathEncMapUint64StringR) + fn(map[uint64][]byte(nil), (*encoder[T]).fastpathEncMapUint64BytesR) + fn(map[uint64]uint8(nil), (*encoder[T]).fastpathEncMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*encoder[T]).fastpathEncMapUint64Uint64R) + fn(map[uint64]int(nil), (*encoder[T]).fastpathEncMapUint64IntR) + fn(map[uint64]int32(nil), (*encoder[T]).fastpathEncMapUint64Int32R) + fn(map[uint64]float64(nil), (*encoder[T]).fastpathEncMapUint64Float64R) + fn(map[uint64]bool(nil), (*encoder[T]).fastpathEncMapUint64BoolR) + fn(map[int]interface{}(nil), (*encoder[T]).fastpathEncMapIntIntfR) + fn(map[int]string(nil), (*encoder[T]).fastpathEncMapIntStringR) + fn(map[int][]byte(nil), (*encoder[T]).fastpathEncMapIntBytesR) + fn(map[int]uint8(nil), (*encoder[T]).fastpathEncMapIntUint8R) + fn(map[int]uint64(nil), (*encoder[T]).fastpathEncMapIntUint64R) + fn(map[int]int(nil), (*encoder[T]).fastpathEncMapIntIntR) + fn(map[int]int32(nil), (*encoder[T]).fastpathEncMapIntInt32R) + fn(map[int]float64(nil), (*encoder[T]).fastpathEncMapIntFloat64R) + fn(map[int]bool(nil), (*encoder[T]).fastpathEncMapIntBoolR) + fn(map[int32]interface{}(nil), (*encoder[T]).fastpathEncMapInt32IntfR) + fn(map[int32]string(nil), (*encoder[T]).fastpathEncMapInt32StringR) + fn(map[int32][]byte(nil), (*encoder[T]).fastpathEncMapInt32BytesR) + fn(map[int32]uint8(nil), (*encoder[T]).fastpathEncMapInt32Uint8R) + fn(map[int32]uint64(nil), (*encoder[T]).fastpathEncMapInt32Uint64R) + fn(map[int32]int(nil), (*encoder[T]).fastpathEncMapInt32IntR) + fn(map[int32]int32(nil), (*encoder[T]).fastpathEncMapInt32Int32R) + fn(map[int32]float64(nil), (*encoder[T]).fastpathEncMapInt32Float64R) + fn(map[int32]bool(nil), (*encoder[T]).fastpathEncMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperDecDriver[T]) fastpathDList() *fastpathDs[T] { + var i uint = 0 + var s fastpathDs[T] + fn := func(v interface{}, fd func(*decoder[T], *decFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathD[T]{rt2id(xrt), xrt, fd} + i++ + } + + fn([]interface{}(nil), (*decoder[T]).fastpathDecSliceIntfR) + fn([]string(nil), (*decoder[T]).fastpathDecSliceStringR) + fn([][]byte(nil), (*decoder[T]).fastpathDecSliceBytesR) + fn([]float32(nil), (*decoder[T]).fastpathDecSliceFloat32R) + fn([]float64(nil), (*decoder[T]).fastpathDecSliceFloat64R) + fn([]uint8(nil), (*decoder[T]).fastpathDecSliceUint8R) + fn([]uint64(nil), (*decoder[T]).fastpathDecSliceUint64R) + fn([]int(nil), (*decoder[T]).fastpathDecSliceIntR) + fn([]int32(nil), (*decoder[T]).fastpathDecSliceInt32R) + fn([]int64(nil), (*decoder[T]).fastpathDecSliceInt64R) + fn([]bool(nil), (*decoder[T]).fastpathDecSliceBoolR) + + fn(map[string]interface{}(nil), (*decoder[T]).fastpathDecMapStringIntfR) + fn(map[string]string(nil), (*decoder[T]).fastpathDecMapStringStringR) + fn(map[string][]byte(nil), (*decoder[T]).fastpathDecMapStringBytesR) + fn(map[string]uint8(nil), (*decoder[T]).fastpathDecMapStringUint8R) + fn(map[string]uint64(nil), (*decoder[T]).fastpathDecMapStringUint64R) + fn(map[string]int(nil), (*decoder[T]).fastpathDecMapStringIntR) + fn(map[string]int32(nil), (*decoder[T]).fastpathDecMapStringInt32R) + fn(map[string]float64(nil), (*decoder[T]).fastpathDecMapStringFloat64R) + fn(map[string]bool(nil), (*decoder[T]).fastpathDecMapStringBoolR) + fn(map[uint8]interface{}(nil), (*decoder[T]).fastpathDecMapUint8IntfR) + fn(map[uint8]string(nil), (*decoder[T]).fastpathDecMapUint8StringR) + fn(map[uint8][]byte(nil), (*decoder[T]).fastpathDecMapUint8BytesR) + fn(map[uint8]uint8(nil), (*decoder[T]).fastpathDecMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*decoder[T]).fastpathDecMapUint8Uint64R) + fn(map[uint8]int(nil), (*decoder[T]).fastpathDecMapUint8IntR) + fn(map[uint8]int32(nil), (*decoder[T]).fastpathDecMapUint8Int32R) + fn(map[uint8]float64(nil), (*decoder[T]).fastpathDecMapUint8Float64R) + fn(map[uint8]bool(nil), (*decoder[T]).fastpathDecMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*decoder[T]).fastpathDecMapUint64IntfR) + fn(map[uint64]string(nil), (*decoder[T]).fastpathDecMapUint64StringR) + fn(map[uint64][]byte(nil), (*decoder[T]).fastpathDecMapUint64BytesR) + fn(map[uint64]uint8(nil), (*decoder[T]).fastpathDecMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*decoder[T]).fastpathDecMapUint64Uint64R) + fn(map[uint64]int(nil), (*decoder[T]).fastpathDecMapUint64IntR) + fn(map[uint64]int32(nil), (*decoder[T]).fastpathDecMapUint64Int32R) + fn(map[uint64]float64(nil), (*decoder[T]).fastpathDecMapUint64Float64R) + fn(map[uint64]bool(nil), (*decoder[T]).fastpathDecMapUint64BoolR) + fn(map[int]interface{}(nil), (*decoder[T]).fastpathDecMapIntIntfR) + fn(map[int]string(nil), (*decoder[T]).fastpathDecMapIntStringR) + fn(map[int][]byte(nil), (*decoder[T]).fastpathDecMapIntBytesR) + fn(map[int]uint8(nil), (*decoder[T]).fastpathDecMapIntUint8R) + fn(map[int]uint64(nil), (*decoder[T]).fastpathDecMapIntUint64R) + fn(map[int]int(nil), (*decoder[T]).fastpathDecMapIntIntR) + fn(map[int]int32(nil), (*decoder[T]).fastpathDecMapIntInt32R) + fn(map[int]float64(nil), (*decoder[T]).fastpathDecMapIntFloat64R) + fn(map[int]bool(nil), (*decoder[T]).fastpathDecMapIntBoolR) + fn(map[int32]interface{}(nil), (*decoder[T]).fastpathDecMapInt32IntfR) + fn(map[int32]string(nil), (*decoder[T]).fastpathDecMapInt32StringR) + fn(map[int32][]byte(nil), (*decoder[T]).fastpathDecMapInt32BytesR) + fn(map[int32]uint8(nil), (*decoder[T]).fastpathDecMapInt32Uint8R) + fn(map[int32]uint64(nil), (*decoder[T]).fastpathDecMapInt32Uint64R) + fn(map[int32]int(nil), (*decoder[T]).fastpathDecMapInt32IntR) + fn(map[int32]int32(nil), (*decoder[T]).fastpathDecMapInt32Int32R) + fn(map[int32]float64(nil), (*decoder[T]).fastpathDecMapInt32Float64R) + fn(map[int32]bool(nil), (*decoder[T]).fastpathDecMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +// -- encode + +// -- -- fast path type switch +func (helperEncDriver[T]) fastpathEncodeTypeSwitch(iv interface{}, e *encoder[T]) bool { + var ft fastpathET[T] + switch v := iv.(type) { + case []interface{}: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntfV(v, e) + } + case []string: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceStringV(v, e) + } + case [][]byte: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBytesV(v, e) + } + case []float32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat32V(v, e) + } + case []float64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat64V(v, e) + } + case []uint8: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint8V(v, e) + } + case []uint64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint64V(v, e) + } + case []int: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntV(v, e) + } + case []int32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt32V(v, e) + } + case []int64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt64V(v, e) + } + case []bool: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBoolV(v, e) + } + case map[string]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntfV(v, e) + } + case map[string]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringStringV(v, e) + } + case map[string][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBytesV(v, e) + } + case map[string]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint8V(v, e) + } + case map[string]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint64V(v, e) + } + case map[string]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntV(v, e) + } + case map[string]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringInt32V(v, e) + } + case map[string]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringFloat64V(v, e) + } + case map[string]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBoolV(v, e) + } + case map[uint8]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntfV(v, e) + } + case map[uint8]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8StringV(v, e) + } + case map[uint8][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BytesV(v, e) + } + case map[uint8]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint8V(v, e) + } + case map[uint8]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint64V(v, e) + } + case map[uint8]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntV(v, e) + } + case map[uint8]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Int32V(v, e) + } + case map[uint8]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Float64V(v, e) + } + case map[uint8]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BoolV(v, e) + } + case map[uint64]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntfV(v, e) + } + case map[uint64]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64StringV(v, e) + } + case map[uint64][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BytesV(v, e) + } + case map[uint64]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint8V(v, e) + } + case map[uint64]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint64V(v, e) + } + case map[uint64]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntV(v, e) + } + case map[uint64]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Int32V(v, e) + } + case map[uint64]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Float64V(v, e) + } + case map[uint64]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BoolV(v, e) + } + case map[int]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntfV(v, e) + } + case map[int]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntStringV(v, e) + } + case map[int][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBytesV(v, e) + } + case map[int]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint8V(v, e) + } + case map[int]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint64V(v, e) + } + case map[int]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntV(v, e) + } + case map[int]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntInt32V(v, e) + } + case map[int]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntFloat64V(v, e) + } + case map[int]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBoolV(v, e) + } + case map[int32]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntfV(v, e) + } + case map[int32]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32StringV(v, e) + } + case map[int32][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BytesV(v, e) + } + case map[int32]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint8V(v, e) + } + case map[int32]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint64V(v, e) + } + case map[int32]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntV(v, e) + } + case map[int32]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Int32V(v, e) + } + case map[int32]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Float64V(v, e) + } + case map[int32]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BoolV(v, e) + } + default: + _ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4 + return false + } + return true +} + +// -- -- fast path functions +func (e *encoder[T]) fastpathEncSliceIntfR(f *encFnInfo, rv reflect.Value) { + var ft fastpathET[T] + var v []interface{} + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]interface{}) + } + if f.ti.mbs { + ft.EncAsMapSliceIntfV(v, e) + return + } + ft.EncSliceIntfV(v, e) +} +func (fastpathET[T]) EncSliceIntfV(v []interface{}, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathET[T]) EncAsMapSliceIntfV(v []interface{}, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) + for j := range v { + if j&1 == 0 { // if j%2 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoder[T]) fastpathEncSliceStringR(f *encFnInfo, rv reflect.Value) { + var ft fastpathET[T] + var v []string + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]string) + } + if f.ti.mbs { + ft.EncAsMapSliceStringV(v, e) + return + } + ft.EncSliceStringV(v, e) +} +func (fastpathET[T]) EncSliceStringV(v []string, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathET[T]) EncAsMapSliceStringV(v []string, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) + for j := range v { + if j&1 == 0 { // if j%2 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoder[T]) fastpathEncSliceBytesR(f *encFnInfo, rv reflect.Value) { + var ft fastpathET[T] + var v [][]byte + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([][]byte) + } + if f.ti.mbs { + ft.EncAsMapSliceBytesV(v, e) + return + } + ft.EncSliceBytesV(v, e) +} +func (fastpathET[T]) EncSliceBytesV(v [][]byte, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathET[T]) EncAsMapSliceBytesV(v [][]byte, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) + for j := range v { + if j&1 == 0 { // if j%2 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoder[T]) fastpathEncSliceFloat32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathET[T] + var v []float32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float32) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat32V(v, e) + return + } + ft.EncSliceFloat32V(v, e) +} +func (fastpathET[T]) EncSliceFloat32V(v []float32, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathET[T]) EncAsMapSliceFloat32V(v []float32, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) + for j := range v { + if j&1 == 0 { // if j%2 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoder[T]) fastpathEncSliceFloat64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathET[T] + var v []float64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float64) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat64V(v, e) + return + } + ft.EncSliceFloat64V(v, e) +} +func (fastpathET[T]) EncSliceFloat64V(v []float64, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathET[T]) EncAsMapSliceFloat64V(v []float64, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) + for j := range v { + if j&1 == 0 { // if j%2 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoder[T]) fastpathEncSliceUint8R(f *encFnInfo, rv reflect.Value) { + var ft fastpathET[T] + var v []uint8 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint8) + } + if f.ti.mbs { + ft.EncAsMapSliceUint8V(v, e) + return + } + ft.EncSliceUint8V(v, e) +} +func (fastpathET[T]) EncSliceUint8V(v []uint8, e *encoder[T]) { + e.e.EncodeStringBytesRaw(v) +} +func (fastpathET[T]) EncAsMapSliceUint8V(v []uint8, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) + for j := range v { + if j&1 == 0 { // if j%2 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(uint64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoder[T]) fastpathEncSliceUint64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathET[T] + var v []uint64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint64) + } + if f.ti.mbs { + ft.EncAsMapSliceUint64V(v, e) + return + } + ft.EncSliceUint64V(v, e) +} +func (fastpathET[T]) EncSliceUint64V(v []uint64, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathET[T]) EncAsMapSliceUint64V(v []uint64, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) + for j := range v { + if j&1 == 0 { // if j%2 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoder[T]) fastpathEncSliceIntR(f *encFnInfo, rv reflect.Value) { + var ft fastpathET[T] + var v []int + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int) + } + if f.ti.mbs { + ft.EncAsMapSliceIntV(v, e) + return + } + ft.EncSliceIntV(v, e) +} +func (fastpathET[T]) EncSliceIntV(v []int, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathET[T]) EncAsMapSliceIntV(v []int, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) + for j := range v { + if j&1 == 0 { // if j%2 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoder[T]) fastpathEncSliceInt32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathET[T] + var v []int32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int32) + } + if f.ti.mbs { + ft.EncAsMapSliceInt32V(v, e) + return + } + ft.EncSliceInt32V(v, e) +} +func (fastpathET[T]) EncSliceInt32V(v []int32, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathET[T]) EncAsMapSliceInt32V(v []int32, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) + for j := range v { + if j&1 == 0 { // if j%2 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoder[T]) fastpathEncSliceInt64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathET[T] + var v []int64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int64) + } + if f.ti.mbs { + ft.EncAsMapSliceInt64V(v, e) + return + } + ft.EncSliceInt64V(v, e) +} +func (fastpathET[T]) EncSliceInt64V(v []int64, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathET[T]) EncAsMapSliceInt64V(v []int64, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) + for j := range v { + if j&1 == 0 { // if j%2 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoder[T]) fastpathEncSliceBoolR(f *encFnInfo, rv reflect.Value) { + var ft fastpathET[T] + var v []bool + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]bool) + } + if f.ti.mbs { + ft.EncAsMapSliceBoolV(v, e) + return + } + ft.EncSliceBoolV(v, e) +} +func (fastpathET[T]) EncSliceBoolV(v []bool, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathET[T]) EncAsMapSliceBoolV(v []bool, e *encoder[T]) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) + for j := range v { + if j&1 == 0 { // if j%2 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoder[T]) fastpathEncMapStringIntfR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapStringIntfV(rv2i(rv).(map[string]interface{}), e) +} +func (fastpathET[T]) EncMapStringIntfV(v map[string]interface{}, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapStringStringR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapStringStringV(rv2i(rv).(map[string]string), e) +} +func (fastpathET[T]) EncMapStringStringV(v map[string]string, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapStringBytesR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapStringBytesV(rv2i(rv).(map[string][]byte), e) +} +func (fastpathET[T]) EncMapStringBytesV(v map[string][]byte, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapStringUint8R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapStringUint8V(rv2i(rv).(map[string]uint8), e) +} +func (fastpathET[T]) EncMapStringUint8V(v map[string]uint8, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapStringUint64R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapStringUint64V(rv2i(rv).(map[string]uint64), e) +} +func (fastpathET[T]) EncMapStringUint64V(v map[string]uint64, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapStringIntR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapStringIntV(rv2i(rv).(map[string]int), e) +} +func (fastpathET[T]) EncMapStringIntV(v map[string]int, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapStringInt32R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapStringInt32V(rv2i(rv).(map[string]int32), e) +} +func (fastpathET[T]) EncMapStringInt32V(v map[string]int32, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapStringFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapStringFloat64V(rv2i(rv).(map[string]float64), e) +} +func (fastpathET[T]) EncMapStringFloat64V(v map[string]float64, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapStringBoolR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapStringBoolV(rv2i(rv).(map[string]bool), e) +} +func (fastpathET[T]) EncMapStringBoolV(v map[string]bool, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint8IntfR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), e) +} +func (fastpathET[T]) EncMapUint8IntfV(v map[uint8]interface{}, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint8StringR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint8StringV(rv2i(rv).(map[uint8]string), e) +} +func (fastpathET[T]) EncMapUint8StringV(v map[uint8]string, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint8BytesR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint8BytesV(rv2i(rv).(map[uint8][]byte), e) +} +func (fastpathET[T]) EncMapUint8BytesV(v map[uint8][]byte, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint8Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), e) +} +func (fastpathET[T]) EncMapUint8Uint8V(v map[uint8]uint8, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint8Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), e) +} +func (fastpathET[T]) EncMapUint8Uint64V(v map[uint8]uint64, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint8IntR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint8IntV(rv2i(rv).(map[uint8]int), e) +} +func (fastpathET[T]) EncMapUint8IntV(v map[uint8]int, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint8Int32R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint8Int32V(rv2i(rv).(map[uint8]int32), e) +} +func (fastpathET[T]) EncMapUint8Int32V(v map[uint8]int32, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint8Float64R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint8Float64V(rv2i(rv).(map[uint8]float64), e) +} +func (fastpathET[T]) EncMapUint8Float64V(v map[uint8]float64, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint8BoolR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint8BoolV(rv2i(rv).(map[uint8]bool), e) +} +func (fastpathET[T]) EncMapUint8BoolV(v map[uint8]bool, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint64IntfR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), e) +} +func (fastpathET[T]) EncMapUint64IntfV(v map[uint64]interface{}, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint64StringR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint64StringV(rv2i(rv).(map[uint64]string), e) +} +func (fastpathET[T]) EncMapUint64StringV(v map[uint64]string, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint64BytesR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint64BytesV(rv2i(rv).(map[uint64][]byte), e) +} +func (fastpathET[T]) EncMapUint64BytesV(v map[uint64][]byte, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint64Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), e) +} +func (fastpathET[T]) EncMapUint64Uint8V(v map[uint64]uint8, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint64Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), e) +} +func (fastpathET[T]) EncMapUint64Uint64V(v map[uint64]uint64, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint64IntR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint64IntV(rv2i(rv).(map[uint64]int), e) +} +func (fastpathET[T]) EncMapUint64IntV(v map[uint64]int, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint64Int32R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint64Int32V(rv2i(rv).(map[uint64]int32), e) +} +func (fastpathET[T]) EncMapUint64Int32V(v map[uint64]int32, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint64Float64R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint64Float64V(rv2i(rv).(map[uint64]float64), e) +} +func (fastpathET[T]) EncMapUint64Float64V(v map[uint64]float64, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapUint64BoolR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapUint64BoolV(rv2i(rv).(map[uint64]bool), e) +} +func (fastpathET[T]) EncMapUint64BoolV(v map[uint64]bool, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapIntIntfR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapIntIntfV(rv2i(rv).(map[int]interface{}), e) +} +func (fastpathET[T]) EncMapIntIntfV(v map[int]interface{}, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapIntStringR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapIntStringV(rv2i(rv).(map[int]string), e) +} +func (fastpathET[T]) EncMapIntStringV(v map[int]string, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapIntBytesR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapIntBytesV(rv2i(rv).(map[int][]byte), e) +} +func (fastpathET[T]) EncMapIntBytesV(v map[int][]byte, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapIntUint8R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapIntUint8V(rv2i(rv).(map[int]uint8), e) +} +func (fastpathET[T]) EncMapIntUint8V(v map[int]uint8, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapIntUint64R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapIntUint64V(rv2i(rv).(map[int]uint64), e) +} +func (fastpathET[T]) EncMapIntUint64V(v map[int]uint64, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapIntIntR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapIntIntV(rv2i(rv).(map[int]int), e) +} +func (fastpathET[T]) EncMapIntIntV(v map[int]int, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapIntInt32R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapIntInt32V(rv2i(rv).(map[int]int32), e) +} +func (fastpathET[T]) EncMapIntInt32V(v map[int]int32, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapIntFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapIntFloat64V(rv2i(rv).(map[int]float64), e) +} +func (fastpathET[T]) EncMapIntFloat64V(v map[int]float64, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapIntBoolR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapIntBoolV(rv2i(rv).(map[int]bool), e) +} +func (fastpathET[T]) EncMapIntBoolV(v map[int]bool, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapInt32IntfR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapInt32IntfV(rv2i(rv).(map[int32]interface{}), e) +} +func (fastpathET[T]) EncMapInt32IntfV(v map[int32]interface{}, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapInt32StringR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapInt32StringV(rv2i(rv).(map[int32]string), e) +} +func (fastpathET[T]) EncMapInt32StringV(v map[int32]string, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapInt32BytesR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapInt32BytesV(rv2i(rv).(map[int32][]byte), e) +} +func (fastpathET[T]) EncMapInt32BytesV(v map[int32][]byte, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapInt32Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapInt32Uint8V(rv2i(rv).(map[int32]uint8), e) +} +func (fastpathET[T]) EncMapInt32Uint8V(v map[int32]uint8, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapInt32Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapInt32Uint64V(rv2i(rv).(map[int32]uint64), e) +} +func (fastpathET[T]) EncMapInt32Uint64V(v map[int32]uint64, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapInt32IntR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapInt32IntV(rv2i(rv).(map[int32]int), e) +} +func (fastpathET[T]) EncMapInt32IntV(v map[int32]int, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapInt32Int32R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapInt32Int32V(rv2i(rv).(map[int32]int32), e) +} +func (fastpathET[T]) EncMapInt32Int32V(v map[int32]int32, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapInt32Float64R(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapInt32Float64V(rv2i(rv).(map[int32]float64), e) +} +func (fastpathET[T]) EncMapInt32Float64V(v map[int32]float64, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoder[T]) fastpathEncMapInt32BoolR(f *encFnInfo, rv reflect.Value) { + fastpathET[T]{}.EncMapInt32BoolV(rv2i(rv).(map[int32]bool), e) +} +func (fastpathET[T]) EncMapInt32BoolV(v map[int32]bool, e *encoder[T]) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +// -- decode + +// -- -- fast path type switch +func (helperDecDriver[T]) fastpathDecodeTypeSwitch(iv interface{}, d *decoder[T]) bool { + var ft fastpathDT[T] + var changed bool + var containerLen int + switch v := iv.(type) { + case []interface{}: + ft.DecSliceIntfN(v, d) + case *[]interface{}: + var v2 []interface{} + if v2, changed = ft.DecSliceIntfY(*v, d); changed { + *v = v2 + } + case []string: + ft.DecSliceStringN(v, d) + case *[]string: + var v2 []string + if v2, changed = ft.DecSliceStringY(*v, d); changed { + *v = v2 + } + case [][]byte: + ft.DecSliceBytesN(v, d) + case *[][]byte: + var v2 [][]byte + if v2, changed = ft.DecSliceBytesY(*v, d); changed { + *v = v2 + } + case []float32: + ft.DecSliceFloat32N(v, d) + case *[]float32: + var v2 []float32 + if v2, changed = ft.DecSliceFloat32Y(*v, d); changed { + *v = v2 + } + case []float64: + ft.DecSliceFloat64N(v, d) + case *[]float64: + var v2 []float64 + if v2, changed = ft.DecSliceFloat64Y(*v, d); changed { + *v = v2 + } + case []uint8: + ft.DecSliceUint8N(v, d) + case *[]uint8: + var v2 []uint8 + if v2, changed = ft.DecSliceUint8Y(*v, d); changed { + *v = v2 + } + case []uint64: + ft.DecSliceUint64N(v, d) + case *[]uint64: + var v2 []uint64 + if v2, changed = ft.DecSliceUint64Y(*v, d); changed { + *v = v2 + } + case []int: + ft.DecSliceIntN(v, d) + case *[]int: + var v2 []int + if v2, changed = ft.DecSliceIntY(*v, d); changed { + *v = v2 + } + case []int32: + ft.DecSliceInt32N(v, d) + case *[]int32: + var v2 []int32 + if v2, changed = ft.DecSliceInt32Y(*v, d); changed { + *v = v2 + } + case []int64: + ft.DecSliceInt64N(v, d) + case *[]int64: + var v2 []int64 + if v2, changed = ft.DecSliceInt64Y(*v, d); changed { + *v = v2 + } + case []bool: + ft.DecSliceBoolN(v, d) + case *[]bool: + var v2 []bool + if v2, changed = ft.DecSliceBoolY(*v, d); changed { + *v = v2 + } + case map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*v, containerLen, d) + } + d.mapEnd() + } + default: + _ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4 + return false + } + return true +} + +// -- -- fast path functions + +func (d *decoder[T]) fastpathDecSliceIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]interface{}) + if vv, changed := ft.DecSliceIntfY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []interface{} + rvGetSlice4Array(rv, &v) + ft.DecSliceIntfN(v, d) + default: + ft.DecSliceIntfN(rv2i(rv).([]interface{}), d) + } +} +func (fastpathDT[T]) DecSliceIntfY(v []interface{}, d *decoder[T]) (v2 []interface{}, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []interface{}) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]interface{}, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + d.decode(&v[uint(j)]) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]interface{}{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDT[T]) DecSliceIntfN(v []interface{}, d *decoder[T]) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + d.decode(&v[uint(j)]) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoder[T]) fastpathDecSliceStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]string) + if vv, changed := ft.DecSliceStringY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []string + rvGetSlice4Array(rv, &v) + ft.DecSliceStringN(v, d) + default: + ft.DecSliceStringN(rv2i(rv).([]string), d) + } +} +func (fastpathDT[T]) DecSliceStringY(v []string, d *decoder[T]) (v2 []string, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []string) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]string, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, "")) + } + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]string{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDT[T]) DecSliceStringN(v []string, d *decoder[T]) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoder[T]) fastpathDecSliceBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[][]byte) + if vv, changed := ft.DecSliceBytesY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v [][]byte + rvGetSlice4Array(rv, &v) + ft.DecSliceBytesN(v, d) + default: + ft.DecSliceBytesN(rv2i(rv).([][]byte), d) + } +} +func (fastpathDT[T]) DecSliceBytesY(v [][]byte, d *decoder[T]) (v2 [][]byte, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst [][]byte) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 24)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([][]byte, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([][]byte{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDT[T]) DecSliceBytesN(v [][]byte, d *decoder[T]) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoder[T]) fastpathDecSliceFloat32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float32) + if vv, changed := ft.DecSliceFloat32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float32 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat32N(v, d) + default: + ft.DecSliceFloat32N(rv2i(rv).([]float32), d) + } +} +func (fastpathDT[T]) DecSliceFloat32Y(v []float32, d *decoder[T]) (v2 []float32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = float32(d.d.DecodeFloat32()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDT[T]) DecSliceFloat32N(v []float32, d *decoder[T]) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = float32(d.d.DecodeFloat32()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoder[T]) fastpathDecSliceFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float64) + if vv, changed := ft.DecSliceFloat64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float64 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat64N(v, d) + default: + ft.DecSliceFloat64N(rv2i(rv).([]float64), d) + } +} +func (fastpathDT[T]) DecSliceFloat64Y(v []float64, d *decoder[T]) (v2 []float64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeFloat64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDT[T]) DecSliceFloat64N(v []float64, d *decoder[T]) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeFloat64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoder[T]) fastpathDecSliceUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint8) + if vv, changed := ft.DecSliceUint8Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint8 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint8N(v, d) + default: + ft.DecSliceUint8N(rv2i(rv).([]uint8), d) + } +} +func (fastpathDT[T]) DecSliceUint8Y(v []uint8, d *decoder[T]) (v2 []uint8, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + if ctyp != valueTypeMap { + var dbi dBytesIntoState + v2, dbi = d.decodeBytesInto(v[:len(v):len(v)], false) + return v2, dbi != dBytesIntoParamOut + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint8) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint8, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint8{}) + } + d.mapEnd() + return v, changed +} +func (fastpathDT[T]) DecSliceUint8N(v []uint8, d *decoder[T]) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + if ctyp != valueTypeMap { + d.decodeBytesInto(v[:len(v):len(v)], true) + return + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + d.mapEnd() +} + +func (d *decoder[T]) fastpathDecSliceUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint64) + if vv, changed := ft.DecSliceUint64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint64 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint64N(v, d) + default: + ft.DecSliceUint64N(rv2i(rv).([]uint64), d) + } +} +func (fastpathDT[T]) DecSliceUint64Y(v []uint64, d *decoder[T]) (v2 []uint64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeUint64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDT[T]) DecSliceUint64N(v []uint64, d *decoder[T]) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeUint64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoder[T]) fastpathDecSliceIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int) + if vv, changed := ft.DecSliceIntY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int + rvGetSlice4Array(rv, &v) + ft.DecSliceIntN(v, d) + default: + ft.DecSliceIntN(rv2i(rv).([]int), d) + } +} +func (fastpathDT[T]) DecSliceIntY(v []int, d *decoder[T]) (v2 []int, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDT[T]) DecSliceIntN(v []int, d *decoder[T]) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoder[T]) fastpathDecSliceInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int32) + if vv, changed := ft.DecSliceInt32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int32 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt32N(v, d) + default: + ft.DecSliceInt32N(rv2i(rv).([]int32), d) + } +} +func (fastpathDT[T]) DecSliceInt32Y(v []int32, d *decoder[T]) (v2 []int32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDT[T]) DecSliceInt32N(v []int32, d *decoder[T]) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoder[T]) fastpathDecSliceInt64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int64) + if vv, changed := ft.DecSliceInt64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int64 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt64N(v, d) + default: + ft.DecSliceInt64N(rv2i(rv).([]int64), d) + } +} +func (fastpathDT[T]) DecSliceInt64Y(v []int64, d *decoder[T]) (v2 []int64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeInt64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDT[T]) DecSliceInt64N(v []int64, d *decoder[T]) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeInt64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoder[T]) fastpathDecSliceBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]bool) + if vv, changed := ft.DecSliceBoolY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []bool + rvGetSlice4Array(rv, &v) + ft.DecSliceBoolN(v, d) + default: + ft.DecSliceBoolN(rv2i(rv).([]bool), d) + } +} +func (fastpathDT[T]) DecSliceBoolY(v []bool, d *decoder[T]) (v2 []bool, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []bool) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]bool, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, false)) + } + v[uint(j)] = d.d.DecodeBool() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]bool{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDT[T]) DecSliceBoolN(v []bool, d *decoder[T]) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeBool() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} +func (d *decoder[T]) fastpathDecMapStringIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]interface{}) + if *vp == nil { + *vp = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntfL(rv2i(rv).(map[string]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapStringIntfL(v map[string]interface{}, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoder[T]) fastpathDecMapStringStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]string) + if *vp == nil { + *vp = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringStringL(rv2i(rv).(map[string]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapStringStringL(v map[string]string, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoder[T]) fastpathDecMapStringBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string][]byte) + if *vp == nil { + *vp = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBytesL(rv2i(rv).(map[string][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapStringBytesL(v map[string][]byte, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[string][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoder[T]) fastpathDecMapStringUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint8) + if *vp == nil { + *vp = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint8L(rv2i(rv).(map[string]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapStringUint8L(v map[string]uint8, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoder[T]) fastpathDecMapStringUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint64) + if *vp == nil { + *vp = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint64L(rv2i(rv).(map[string]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapStringUint64L(v map[string]uint64, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoder[T]) fastpathDecMapStringIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int) + if *vp == nil { + *vp = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntL(rv2i(rv).(map[string]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapStringIntL(v map[string]int, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoder[T]) fastpathDecMapStringInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int32) + if *vp == nil { + *vp = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringInt32L(rv2i(rv).(map[string]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapStringInt32L(v map[string]int32, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoder[T]) fastpathDecMapStringFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]float64) + if *vp == nil { + *vp = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringFloat64L(rv2i(rv).(map[string]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapStringFloat64L(v map[string]float64, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoder[T]) fastpathDecMapStringBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]bool) + if *vp == nil { + *vp = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBoolL(rv2i(rv).(map[string]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapStringBoolL(v map[string]bool, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoder[T]) fastpathDecMapUint8IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]interface{}) + if *vp == nil { + *vp = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntfL(rv2i(rv).(map[uint8]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint8IntfL(v map[uint8]interface{}, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoder[T]) fastpathDecMapUint8StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]string) + if *vp == nil { + *vp = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8StringL(rv2i(rv).(map[uint8]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint8StringL(v map[uint8]string, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoder[T]) fastpathDecMapUint8BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8][]byte) + if *vp == nil { + *vp = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BytesL(rv2i(rv).(map[uint8][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint8BytesL(v map[uint8][]byte, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoder[T]) fastpathDecMapUint8Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint8) + if *vp == nil { + *vp = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint8L(rv2i(rv).(map[uint8]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint8Uint8L(v map[uint8]uint8, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoder[T]) fastpathDecMapUint8Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint64) + if *vp == nil { + *vp = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint64L(rv2i(rv).(map[uint8]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint8Uint64L(v map[uint8]uint64, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoder[T]) fastpathDecMapUint8IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int) + if *vp == nil { + *vp = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntL(rv2i(rv).(map[uint8]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint8IntL(v map[uint8]int, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoder[T]) fastpathDecMapUint8Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int32) + if *vp == nil { + *vp = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Int32L(rv2i(rv).(map[uint8]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint8Int32L(v map[uint8]int32, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoder[T]) fastpathDecMapUint8Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]float64) + if *vp == nil { + *vp = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Float64L(rv2i(rv).(map[uint8]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint8Float64L(v map[uint8]float64, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoder[T]) fastpathDecMapUint8BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]bool) + if *vp == nil { + *vp = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BoolL(rv2i(rv).(map[uint8]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint8BoolL(v map[uint8]bool, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoder[T]) fastpathDecMapUint64IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]interface{}) + if *vp == nil { + *vp = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntfL(rv2i(rv).(map[uint64]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint64IntfL(v map[uint64]interface{}, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoder[T]) fastpathDecMapUint64StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]string) + if *vp == nil { + *vp = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64StringL(rv2i(rv).(map[uint64]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint64StringL(v map[uint64]string, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoder[T]) fastpathDecMapUint64BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64][]byte) + if *vp == nil { + *vp = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BytesL(rv2i(rv).(map[uint64][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint64BytesL(v map[uint64][]byte, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoder[T]) fastpathDecMapUint64Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint8) + if *vp == nil { + *vp = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint8L(rv2i(rv).(map[uint64]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint64Uint8L(v map[uint64]uint8, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoder[T]) fastpathDecMapUint64Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint64) + if *vp == nil { + *vp = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint64L(rv2i(rv).(map[uint64]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint64Uint64L(v map[uint64]uint64, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoder[T]) fastpathDecMapUint64IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int) + if *vp == nil { + *vp = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntL(rv2i(rv).(map[uint64]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint64IntL(v map[uint64]int, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoder[T]) fastpathDecMapUint64Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int32) + if *vp == nil { + *vp = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Int32L(rv2i(rv).(map[uint64]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint64Int32L(v map[uint64]int32, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoder[T]) fastpathDecMapUint64Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]float64) + if *vp == nil { + *vp = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Float64L(rv2i(rv).(map[uint64]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint64Float64L(v map[uint64]float64, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoder[T]) fastpathDecMapUint64BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]bool) + if *vp == nil { + *vp = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BoolL(rv2i(rv).(map[uint64]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapUint64BoolL(v map[uint64]bool, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoder[T]) fastpathDecMapIntIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]interface{}) + if *vp == nil { + *vp = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntfL(rv2i(rv).(map[int]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapIntIntfL(v map[int]interface{}, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoder[T]) fastpathDecMapIntStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]string) + if *vp == nil { + *vp = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntStringL(rv2i(rv).(map[int]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapIntStringL(v map[int]string, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoder[T]) fastpathDecMapIntBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int][]byte) + if *vp == nil { + *vp = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBytesL(rv2i(rv).(map[int][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapIntBytesL(v map[int][]byte, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoder[T]) fastpathDecMapIntUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint8) + if *vp == nil { + *vp = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint8L(rv2i(rv).(map[int]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapIntUint8L(v map[int]uint8, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoder[T]) fastpathDecMapIntUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint64) + if *vp == nil { + *vp = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint64L(rv2i(rv).(map[int]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapIntUint64L(v map[int]uint64, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoder[T]) fastpathDecMapIntIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int) + if *vp == nil { + *vp = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntL(rv2i(rv).(map[int]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapIntIntL(v map[int]int, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoder[T]) fastpathDecMapIntInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int32) + if *vp == nil { + *vp = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntInt32L(rv2i(rv).(map[int]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapIntInt32L(v map[int]int32, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoder[T]) fastpathDecMapIntFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]float64) + if *vp == nil { + *vp = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntFloat64L(rv2i(rv).(map[int]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapIntFloat64L(v map[int]float64, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoder[T]) fastpathDecMapIntBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]bool) + if *vp == nil { + *vp = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBoolL(rv2i(rv).(map[int]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapIntBoolL(v map[int]bool, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoder[T]) fastpathDecMapInt32IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]interface{}) + if *vp == nil { + *vp = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntfL(rv2i(rv).(map[int32]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapInt32IntfL(v map[int32]interface{}, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoder[T]) fastpathDecMapInt32StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]string) + if *vp == nil { + *vp = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32StringL(rv2i(rv).(map[int32]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapInt32StringL(v map[int32]string, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoder[T]) fastpathDecMapInt32BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32][]byte) + if *vp == nil { + *vp = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BytesL(rv2i(rv).(map[int32][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapInt32BytesL(v map[int32][]byte, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoder[T]) fastpathDecMapInt32Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint8) + if *vp == nil { + *vp = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint8L(rv2i(rv).(map[int32]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapInt32Uint8L(v map[int32]uint8, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoder[T]) fastpathDecMapInt32Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint64) + if *vp == nil { + *vp = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint64L(rv2i(rv).(map[int32]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapInt32Uint64L(v map[int32]uint64, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoder[T]) fastpathDecMapInt32IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int) + if *vp == nil { + *vp = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntL(rv2i(rv).(map[int32]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapInt32IntL(v map[int32]int, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoder[T]) fastpathDecMapInt32Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int32) + if *vp == nil { + *vp = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Int32L(rv2i(rv).(map[int32]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapInt32Int32L(v map[int32]int32, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoder[T]) fastpathDecMapInt32Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]float64) + if *vp == nil { + *vp = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Float64L(rv2i(rv).(map[int32]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapInt32Float64L(v map[int32]float64, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoder[T]) fastpathDecMapInt32BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]bool) + if *vp == nil { + *vp = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BoolL(rv2i(rv).(map[int32]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) DecMapInt32BoolL(v map[int32]bool, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} diff --git a/vendor/github.com/ugorji/go/codec/fast-path.not.go b/vendor/github.com/ugorji/go/codec/base.notfastpath.go similarity index 62% rename from vendor/github.com/ugorji/go/codec/fast-path.not.go rename to vendor/github.com/ugorji/go/codec/base.notfastpath.go index 3fcc8fd..b4c41fb 100644 --- a/vendor/github.com/ugorji/go/codec/fast-path.not.go +++ b/vendor/github.com/ugorji/go/codec/base.notfastpath.go @@ -2,7 +2,6 @@ // Use of this source code is governed by a MIT license found in the LICENSE file. //go:build notfastpath || codec.notfastpath -// +build notfastpath codec.notfastpath package codec @@ -18,24 +17,18 @@ const fastpathEnabled = false // This tag disables fastpath during build, allowing for faster build, test execution, // short-program runs, etc. -func fastpathDecodeTypeSwitch(iv interface{}, d *Decoder) bool { return false } -func fastpathEncodeTypeSwitch(iv interface{}, e *Encoder) bool { return false } - // func fastpathEncodeTypeSwitchSlice(iv interface{}, e *Encoder) bool { return false } // func fastpathEncodeTypeSwitchMap(iv interface{}, e *Encoder) bool { return false } func fastpathDecodeSetZeroTypeSwitch(iv interface{}) bool { return false } -type fastpathT struct{} -type fastpathE struct { - rtid uintptr - rt reflect.Type - encfn func(*Encoder, *codecFnInfo, reflect.Value) - decfn func(*Decoder, *codecFnInfo, reflect.Value) +func fastpathAvIndex(rtid uintptr) (uint, bool) { return 0, false } + +type fastpathRtRtid struct { + rtid uintptr + rt reflect.Type } -type fastpathA [0]fastpathE -func fastpathAvIndex(rtid uintptr) int { return -1 } +type fastpathARtRtid [0]fastpathRtRtid -var fastpathAv fastpathA -var fastpathTV fastpathT +var fastpathAvRtRtid fastpathARtRtid diff --git a/vendor/github.com/ugorji/go/codec/base.notfastpath.notmono.go b/vendor/github.com/ugorji/go/codec/base.notfastpath.notmono.go new file mode 100644 index 0000000..a692849 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/base.notfastpath.notmono.go @@ -0,0 +1,26 @@ +//go:build notfastpath || (codec.notfastpath && (notmono || codec.notmono)) + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import "reflect" + +// type fastpathT struct{} +type fastpathE[T encDriver] struct { + rt reflect.Type + encfn func(*encoder[T], *encFnInfo, reflect.Value) +} +type fastpathD[T decDriver] struct { + rt reflect.Type + decfn func(*decoder[T], *decFnInfo, reflect.Value) +} +type fastpathEs[T encDriver] [0]fastpathE[T] +type fastpathDs[T decDriver] [0]fastpathD[T] + +func (helperEncDriver[T]) fastpathEncodeTypeSwitch(iv interface{}, e *encoder[T]) bool { return false } +func (helperDecDriver[T]) fastpathDecodeTypeSwitch(iv interface{}, d *decoder[T]) bool { return false } + +func (helperEncDriver[T]) fastpathEList() (v *fastpathEs[T]) { return } +func (helperDecDriver[T]) fastpathDList() (v *fastpathDs[T]) { return } diff --git a/vendor/github.com/ugorji/go/codec/binc.base.go b/vendor/github.com/ugorji/go/codec/binc.base.go new file mode 100644 index 0000000..29da5ac --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/binc.base.go @@ -0,0 +1,194 @@ +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "reflect" + "time" +) + +// Symbol management: +// - symbols are stored in a symbol map during encoding and decoding. +// - the symbols persist until the (En|De)coder ResetXXX method is called. + +const bincDoPrune = true + +// vd as low 4 bits (there are 16 slots) +const ( + bincVdSpecial byte = iota + bincVdPosInt + bincVdNegInt + bincVdFloat + + bincVdString + bincVdByteArray + bincVdArray + bincVdMap + + bincVdTimestamp + bincVdSmallInt + _ // bincVdUnicodeOther + bincVdSymbol + + _ // bincVdDecimal + _ // open slot + _ // open slot + bincVdCustomExt = 0x0f +) + +const ( + bincSpNil byte = iota + bincSpFalse + bincSpTrue + bincSpNan + bincSpPosInf + bincSpNegInf + bincSpZeroFloat + bincSpZero + bincSpNegOne +) + +const ( + _ byte = iota // bincFlBin16 + bincFlBin32 + _ // bincFlBin32e + bincFlBin64 + _ // bincFlBin64e + // others not currently supported +) + +const bincBdNil = 0 // bincVdSpecial<<4 | bincSpNil // staticcheck barfs on this (SA4016) + +var ( + bincdescSpecialVsNames = map[byte]string{ + bincSpNil: "nil", + bincSpFalse: "false", + bincSpTrue: "true", + bincSpNan: "float", + bincSpPosInf: "float", + bincSpNegInf: "float", + bincSpZeroFloat: "float", + bincSpZero: "uint", + bincSpNegOne: "int", + } + bincdescVdNames = map[byte]string{ + bincVdSpecial: "special", + bincVdSmallInt: "uint", + bincVdPosInt: "uint", + bincVdFloat: "float", + bincVdSymbol: "string", + bincVdString: "string", + bincVdByteArray: "bytes", + bincVdTimestamp: "time", + bincVdCustomExt: "ext", + bincVdArray: "array", + bincVdMap: "map", + } +) + +func bincdescbd(bd byte) (s string) { + return bincdesc(bd>>4, bd&0x0f) +} + +func bincdesc(vd, vs byte) (s string) { + if vd == bincVdSpecial { + s = bincdescSpecialVsNames[vs] + } else { + s = bincdescVdNames[vd] + } + if s == "" { + s = "unknown" + } + return +} + +type bincEncState struct { + m map[string]uint16 // symbols +} + +// func (e *bincEncState) restoreState(v interface{}) { e.m = v.(map[string]uint16) } +// func (e bincEncState) captureState() interface{} { return e.m } +// func (e *bincEncState) resetState() { e.m = nil } +// func (e *bincEncState) reset() { e.resetState() } +func (e *bincEncState) reset() { e.m = nil } + +type bincDecState struct { + bdRead bool + bd byte + vd byte + vs byte + + _ bool + // MARKER: consider using binary search here instead of a map (ie bincDecSymbol) + s map[uint16][]byte +} + +// func (x bincDecState) captureState() interface{} { return x } +// func (x *bincDecState) resetState() { *x = bincDecState{} } +// func (x *bincDecState) reset() { x.resetState() } +// func (x *bincDecState) restoreState(v interface{}) { *x = v.(bincDecState) } +func (x *bincDecState) reset() { *x = bincDecState{} } + +//------------------------------------ + +// BincHandle is a Handle for the Binc Schema-Free Encoding Format +// defined at https://github.com/ugorji/binc . +// +// BincHandle currently supports all Binc features with the following EXCEPTIONS: +// - only integers up to 64 bits of precision are supported. +// big integers are unsupported. +// - Only IEEE 754 binary32 and binary64 floats are supported (ie Go float32 and float64 types). +// extended precision and decimal IEEE 754 floats are unsupported. +// - Only UTF-8 strings supported. +// Unicode_Other Binc types (UTF16, UTF32) are currently unsupported. +// +// Note that these EXCEPTIONS are temporary and full support is possible and may happen soon. +type BincHandle struct { + binaryEncodingType + notJsonType + // noElemSeparators + BasicHandle + + // AsSymbols defines what should be encoded as symbols. + // + // Encoding as symbols can reduce the encoded size significantly. + // + // However, during decoding, each string to be encoded as a symbol must + // be checked to see if it has been seen before. Consequently, encoding time + // will increase if using symbols, because string comparisons has a clear cost. + // + // Values: + // - 0: default: library uses best judgement + // - 1: use symbols + // - 2: do not use symbols + AsSymbols uint8 + + // AsSymbols: may later on introduce more options ... + // - m: map keys + // - s: struct fields + // - n: none + // - a: all: same as m, s, ... + + // _ [7]uint64 // padding (cache-aligned) +} + +// Name returns the name of the handle: binc +func (h *BincHandle) Name() string { return "binc" } + +func (h *BincHandle) desc(bd byte) string { return bincdesc(bd>>4, bd&0x0f) } + +// SetBytesExt sets an extension +func (h *BincHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) { + return h.SetExt(rt, tag, makeExt(ext)) +} + +// var timeDigits = [...]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} + +func bincEncodeTime(t time.Time) []byte { + return customEncodeTime(t) +} + +func bincDecodeTime(bs []byte) (tt time.Time, err error) { + return customDecodeTime(bs) +} diff --git a/vendor/github.com/ugorji/go/codec/binc.fastpath.mono.generated.go b/vendor/github.com/ugorji/go/codec/binc.fastpath.mono.generated.go new file mode 100644 index 0000000..7721027 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/binc.fastpath.mono.generated.go @@ -0,0 +1,12482 @@ +//go:build !notmono && !codec.notmono && !notfastpath && !codec.notfastpath + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "reflect" + "slices" + "sort" +) + +type fastpathEBincBytes struct { + rtid uintptr + rt reflect.Type + encfn func(*encoderBincBytes, *encFnInfo, reflect.Value) +} +type fastpathDBincBytes struct { + rtid uintptr + rt reflect.Type + decfn func(*decoderBincBytes, *decFnInfo, reflect.Value) +} +type fastpathEsBincBytes [56]fastpathEBincBytes +type fastpathDsBincBytes [56]fastpathDBincBytes +type fastpathETBincBytes struct{} +type fastpathDTBincBytes struct{} + +func (helperEncDriverBincBytes) fastpathEList() *fastpathEsBincBytes { + var i uint = 0 + var s fastpathEsBincBytes + fn := func(v interface{}, fe func(*encoderBincBytes, *encFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathEBincBytes{rt2id(xrt), xrt, fe} + i++ + } + + fn([]interface{}(nil), (*encoderBincBytes).fastpathEncSliceIntfR) + fn([]string(nil), (*encoderBincBytes).fastpathEncSliceStringR) + fn([][]byte(nil), (*encoderBincBytes).fastpathEncSliceBytesR) + fn([]float32(nil), (*encoderBincBytes).fastpathEncSliceFloat32R) + fn([]float64(nil), (*encoderBincBytes).fastpathEncSliceFloat64R) + fn([]uint8(nil), (*encoderBincBytes).fastpathEncSliceUint8R) + fn([]uint64(nil), (*encoderBincBytes).fastpathEncSliceUint64R) + fn([]int(nil), (*encoderBincBytes).fastpathEncSliceIntR) + fn([]int32(nil), (*encoderBincBytes).fastpathEncSliceInt32R) + fn([]int64(nil), (*encoderBincBytes).fastpathEncSliceInt64R) + fn([]bool(nil), (*encoderBincBytes).fastpathEncSliceBoolR) + + fn(map[string]interface{}(nil), (*encoderBincBytes).fastpathEncMapStringIntfR) + fn(map[string]string(nil), (*encoderBincBytes).fastpathEncMapStringStringR) + fn(map[string][]byte(nil), (*encoderBincBytes).fastpathEncMapStringBytesR) + fn(map[string]uint8(nil), (*encoderBincBytes).fastpathEncMapStringUint8R) + fn(map[string]uint64(nil), (*encoderBincBytes).fastpathEncMapStringUint64R) + fn(map[string]int(nil), (*encoderBincBytes).fastpathEncMapStringIntR) + fn(map[string]int32(nil), (*encoderBincBytes).fastpathEncMapStringInt32R) + fn(map[string]float64(nil), (*encoderBincBytes).fastpathEncMapStringFloat64R) + fn(map[string]bool(nil), (*encoderBincBytes).fastpathEncMapStringBoolR) + fn(map[uint8]interface{}(nil), (*encoderBincBytes).fastpathEncMapUint8IntfR) + fn(map[uint8]string(nil), (*encoderBincBytes).fastpathEncMapUint8StringR) + fn(map[uint8][]byte(nil), (*encoderBincBytes).fastpathEncMapUint8BytesR) + fn(map[uint8]uint8(nil), (*encoderBincBytes).fastpathEncMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*encoderBincBytes).fastpathEncMapUint8Uint64R) + fn(map[uint8]int(nil), (*encoderBincBytes).fastpathEncMapUint8IntR) + fn(map[uint8]int32(nil), (*encoderBincBytes).fastpathEncMapUint8Int32R) + fn(map[uint8]float64(nil), (*encoderBincBytes).fastpathEncMapUint8Float64R) + fn(map[uint8]bool(nil), (*encoderBincBytes).fastpathEncMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*encoderBincBytes).fastpathEncMapUint64IntfR) + fn(map[uint64]string(nil), (*encoderBincBytes).fastpathEncMapUint64StringR) + fn(map[uint64][]byte(nil), (*encoderBincBytes).fastpathEncMapUint64BytesR) + fn(map[uint64]uint8(nil), (*encoderBincBytes).fastpathEncMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*encoderBincBytes).fastpathEncMapUint64Uint64R) + fn(map[uint64]int(nil), (*encoderBincBytes).fastpathEncMapUint64IntR) + fn(map[uint64]int32(nil), (*encoderBincBytes).fastpathEncMapUint64Int32R) + fn(map[uint64]float64(nil), (*encoderBincBytes).fastpathEncMapUint64Float64R) + fn(map[uint64]bool(nil), (*encoderBincBytes).fastpathEncMapUint64BoolR) + fn(map[int]interface{}(nil), (*encoderBincBytes).fastpathEncMapIntIntfR) + fn(map[int]string(nil), (*encoderBincBytes).fastpathEncMapIntStringR) + fn(map[int][]byte(nil), (*encoderBincBytes).fastpathEncMapIntBytesR) + fn(map[int]uint8(nil), (*encoderBincBytes).fastpathEncMapIntUint8R) + fn(map[int]uint64(nil), (*encoderBincBytes).fastpathEncMapIntUint64R) + fn(map[int]int(nil), (*encoderBincBytes).fastpathEncMapIntIntR) + fn(map[int]int32(nil), (*encoderBincBytes).fastpathEncMapIntInt32R) + fn(map[int]float64(nil), (*encoderBincBytes).fastpathEncMapIntFloat64R) + fn(map[int]bool(nil), (*encoderBincBytes).fastpathEncMapIntBoolR) + fn(map[int32]interface{}(nil), (*encoderBincBytes).fastpathEncMapInt32IntfR) + fn(map[int32]string(nil), (*encoderBincBytes).fastpathEncMapInt32StringR) + fn(map[int32][]byte(nil), (*encoderBincBytes).fastpathEncMapInt32BytesR) + fn(map[int32]uint8(nil), (*encoderBincBytes).fastpathEncMapInt32Uint8R) + fn(map[int32]uint64(nil), (*encoderBincBytes).fastpathEncMapInt32Uint64R) + fn(map[int32]int(nil), (*encoderBincBytes).fastpathEncMapInt32IntR) + fn(map[int32]int32(nil), (*encoderBincBytes).fastpathEncMapInt32Int32R) + fn(map[int32]float64(nil), (*encoderBincBytes).fastpathEncMapInt32Float64R) + fn(map[int32]bool(nil), (*encoderBincBytes).fastpathEncMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperDecDriverBincBytes) fastpathDList() *fastpathDsBincBytes { + var i uint = 0 + var s fastpathDsBincBytes + fn := func(v interface{}, fd func(*decoderBincBytes, *decFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathDBincBytes{rt2id(xrt), xrt, fd} + i++ + } + + fn([]interface{}(nil), (*decoderBincBytes).fastpathDecSliceIntfR) + fn([]string(nil), (*decoderBincBytes).fastpathDecSliceStringR) + fn([][]byte(nil), (*decoderBincBytes).fastpathDecSliceBytesR) + fn([]float32(nil), (*decoderBincBytes).fastpathDecSliceFloat32R) + fn([]float64(nil), (*decoderBincBytes).fastpathDecSliceFloat64R) + fn([]uint8(nil), (*decoderBincBytes).fastpathDecSliceUint8R) + fn([]uint64(nil), (*decoderBincBytes).fastpathDecSliceUint64R) + fn([]int(nil), (*decoderBincBytes).fastpathDecSliceIntR) + fn([]int32(nil), (*decoderBincBytes).fastpathDecSliceInt32R) + fn([]int64(nil), (*decoderBincBytes).fastpathDecSliceInt64R) + fn([]bool(nil), (*decoderBincBytes).fastpathDecSliceBoolR) + + fn(map[string]interface{}(nil), (*decoderBincBytes).fastpathDecMapStringIntfR) + fn(map[string]string(nil), (*decoderBincBytes).fastpathDecMapStringStringR) + fn(map[string][]byte(nil), (*decoderBincBytes).fastpathDecMapStringBytesR) + fn(map[string]uint8(nil), (*decoderBincBytes).fastpathDecMapStringUint8R) + fn(map[string]uint64(nil), (*decoderBincBytes).fastpathDecMapStringUint64R) + fn(map[string]int(nil), (*decoderBincBytes).fastpathDecMapStringIntR) + fn(map[string]int32(nil), (*decoderBincBytes).fastpathDecMapStringInt32R) + fn(map[string]float64(nil), (*decoderBincBytes).fastpathDecMapStringFloat64R) + fn(map[string]bool(nil), (*decoderBincBytes).fastpathDecMapStringBoolR) + fn(map[uint8]interface{}(nil), (*decoderBincBytes).fastpathDecMapUint8IntfR) + fn(map[uint8]string(nil), (*decoderBincBytes).fastpathDecMapUint8StringR) + fn(map[uint8][]byte(nil), (*decoderBincBytes).fastpathDecMapUint8BytesR) + fn(map[uint8]uint8(nil), (*decoderBincBytes).fastpathDecMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*decoderBincBytes).fastpathDecMapUint8Uint64R) + fn(map[uint8]int(nil), (*decoderBincBytes).fastpathDecMapUint8IntR) + fn(map[uint8]int32(nil), (*decoderBincBytes).fastpathDecMapUint8Int32R) + fn(map[uint8]float64(nil), (*decoderBincBytes).fastpathDecMapUint8Float64R) + fn(map[uint8]bool(nil), (*decoderBincBytes).fastpathDecMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*decoderBincBytes).fastpathDecMapUint64IntfR) + fn(map[uint64]string(nil), (*decoderBincBytes).fastpathDecMapUint64StringR) + fn(map[uint64][]byte(nil), (*decoderBincBytes).fastpathDecMapUint64BytesR) + fn(map[uint64]uint8(nil), (*decoderBincBytes).fastpathDecMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*decoderBincBytes).fastpathDecMapUint64Uint64R) + fn(map[uint64]int(nil), (*decoderBincBytes).fastpathDecMapUint64IntR) + fn(map[uint64]int32(nil), (*decoderBincBytes).fastpathDecMapUint64Int32R) + fn(map[uint64]float64(nil), (*decoderBincBytes).fastpathDecMapUint64Float64R) + fn(map[uint64]bool(nil), (*decoderBincBytes).fastpathDecMapUint64BoolR) + fn(map[int]interface{}(nil), (*decoderBincBytes).fastpathDecMapIntIntfR) + fn(map[int]string(nil), (*decoderBincBytes).fastpathDecMapIntStringR) + fn(map[int][]byte(nil), (*decoderBincBytes).fastpathDecMapIntBytesR) + fn(map[int]uint8(nil), (*decoderBincBytes).fastpathDecMapIntUint8R) + fn(map[int]uint64(nil), (*decoderBincBytes).fastpathDecMapIntUint64R) + fn(map[int]int(nil), (*decoderBincBytes).fastpathDecMapIntIntR) + fn(map[int]int32(nil), (*decoderBincBytes).fastpathDecMapIntInt32R) + fn(map[int]float64(nil), (*decoderBincBytes).fastpathDecMapIntFloat64R) + fn(map[int]bool(nil), (*decoderBincBytes).fastpathDecMapIntBoolR) + fn(map[int32]interface{}(nil), (*decoderBincBytes).fastpathDecMapInt32IntfR) + fn(map[int32]string(nil), (*decoderBincBytes).fastpathDecMapInt32StringR) + fn(map[int32][]byte(nil), (*decoderBincBytes).fastpathDecMapInt32BytesR) + fn(map[int32]uint8(nil), (*decoderBincBytes).fastpathDecMapInt32Uint8R) + fn(map[int32]uint64(nil), (*decoderBincBytes).fastpathDecMapInt32Uint64R) + fn(map[int32]int(nil), (*decoderBincBytes).fastpathDecMapInt32IntR) + fn(map[int32]int32(nil), (*decoderBincBytes).fastpathDecMapInt32Int32R) + fn(map[int32]float64(nil), (*decoderBincBytes).fastpathDecMapInt32Float64R) + fn(map[int32]bool(nil), (*decoderBincBytes).fastpathDecMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperEncDriverBincBytes) fastpathEncodeTypeSwitch(iv interface{}, e *encoderBincBytes) bool { + var ft fastpathETBincBytes + switch v := iv.(type) { + case []interface{}: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntfV(v, e) + } + case []string: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceStringV(v, e) + } + case [][]byte: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBytesV(v, e) + } + case []float32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat32V(v, e) + } + case []float64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat64V(v, e) + } + case []uint8: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint8V(v, e) + } + case []uint64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint64V(v, e) + } + case []int: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntV(v, e) + } + case []int32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt32V(v, e) + } + case []int64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt64V(v, e) + } + case []bool: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBoolV(v, e) + } + case map[string]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntfV(v, e) + } + case map[string]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringStringV(v, e) + } + case map[string][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBytesV(v, e) + } + case map[string]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint8V(v, e) + } + case map[string]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint64V(v, e) + } + case map[string]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntV(v, e) + } + case map[string]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringInt32V(v, e) + } + case map[string]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringFloat64V(v, e) + } + case map[string]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBoolV(v, e) + } + case map[uint8]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntfV(v, e) + } + case map[uint8]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8StringV(v, e) + } + case map[uint8][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BytesV(v, e) + } + case map[uint8]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint8V(v, e) + } + case map[uint8]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint64V(v, e) + } + case map[uint8]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntV(v, e) + } + case map[uint8]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Int32V(v, e) + } + case map[uint8]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Float64V(v, e) + } + case map[uint8]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BoolV(v, e) + } + case map[uint64]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntfV(v, e) + } + case map[uint64]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64StringV(v, e) + } + case map[uint64][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BytesV(v, e) + } + case map[uint64]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint8V(v, e) + } + case map[uint64]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint64V(v, e) + } + case map[uint64]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntV(v, e) + } + case map[uint64]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Int32V(v, e) + } + case map[uint64]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Float64V(v, e) + } + case map[uint64]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BoolV(v, e) + } + case map[int]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntfV(v, e) + } + case map[int]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntStringV(v, e) + } + case map[int][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBytesV(v, e) + } + case map[int]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint8V(v, e) + } + case map[int]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint64V(v, e) + } + case map[int]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntV(v, e) + } + case map[int]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntInt32V(v, e) + } + case map[int]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntFloat64V(v, e) + } + case map[int]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBoolV(v, e) + } + case map[int32]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntfV(v, e) + } + case map[int32]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32StringV(v, e) + } + case map[int32][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BytesV(v, e) + } + case map[int32]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint8V(v, e) + } + case map[int32]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint64V(v, e) + } + case map[int32]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntV(v, e) + } + case map[int32]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Int32V(v, e) + } + case map[int32]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Float64V(v, e) + } + case map[int32]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BoolV(v, e) + } + default: + _ = v + return false + } + return true +} + +func (e *encoderBincBytes) fastpathEncSliceIntfR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincBytes + var v []interface{} + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]interface{}) + } + if f.ti.mbs { + ft.EncAsMapSliceIntfV(v, e) + return + } + ft.EncSliceIntfV(v, e) +} +func (fastpathETBincBytes) EncSliceIntfV(v []interface{}, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincBytes) EncAsMapSliceIntfV(v []interface{}, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincBytes) fastpathEncSliceStringR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincBytes + var v []string + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]string) + } + if f.ti.mbs { + ft.EncAsMapSliceStringV(v, e) + return + } + ft.EncSliceStringV(v, e) +} +func (fastpathETBincBytes) EncSliceStringV(v []string, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincBytes) EncAsMapSliceStringV(v []string, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincBytes) fastpathEncSliceBytesR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincBytes + var v [][]byte + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([][]byte) + } + if f.ti.mbs { + ft.EncAsMapSliceBytesV(v, e) + return + } + ft.EncSliceBytesV(v, e) +} +func (fastpathETBincBytes) EncSliceBytesV(v [][]byte, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincBytes) EncAsMapSliceBytesV(v [][]byte, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincBytes) fastpathEncSliceFloat32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincBytes + var v []float32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float32) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat32V(v, e) + return + } + ft.EncSliceFloat32V(v, e) +} +func (fastpathETBincBytes) EncSliceFloat32V(v []float32, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincBytes) EncAsMapSliceFloat32V(v []float32, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincBytes) fastpathEncSliceFloat64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincBytes + var v []float64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float64) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat64V(v, e) + return + } + ft.EncSliceFloat64V(v, e) +} +func (fastpathETBincBytes) EncSliceFloat64V(v []float64, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincBytes) EncAsMapSliceFloat64V(v []float64, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincBytes) fastpathEncSliceUint8R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincBytes + var v []uint8 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint8) + } + if f.ti.mbs { + ft.EncAsMapSliceUint8V(v, e) + return + } + ft.EncSliceUint8V(v, e) +} +func (fastpathETBincBytes) EncSliceUint8V(v []uint8, e *encoderBincBytes) { + e.e.EncodeStringBytesRaw(v) +} +func (fastpathETBincBytes) EncAsMapSliceUint8V(v []uint8, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(uint64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincBytes) fastpathEncSliceUint64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincBytes + var v []uint64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint64) + } + if f.ti.mbs { + ft.EncAsMapSliceUint64V(v, e) + return + } + ft.EncSliceUint64V(v, e) +} +func (fastpathETBincBytes) EncSliceUint64V(v []uint64, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincBytes) EncAsMapSliceUint64V(v []uint64, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincBytes) fastpathEncSliceIntR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincBytes + var v []int + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int) + } + if f.ti.mbs { + ft.EncAsMapSliceIntV(v, e) + return + } + ft.EncSliceIntV(v, e) +} +func (fastpathETBincBytes) EncSliceIntV(v []int, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincBytes) EncAsMapSliceIntV(v []int, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincBytes) fastpathEncSliceInt32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincBytes + var v []int32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int32) + } + if f.ti.mbs { + ft.EncAsMapSliceInt32V(v, e) + return + } + ft.EncSliceInt32V(v, e) +} +func (fastpathETBincBytes) EncSliceInt32V(v []int32, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincBytes) EncAsMapSliceInt32V(v []int32, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincBytes) fastpathEncSliceInt64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincBytes + var v []int64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int64) + } + if f.ti.mbs { + ft.EncAsMapSliceInt64V(v, e) + return + } + ft.EncSliceInt64V(v, e) +} +func (fastpathETBincBytes) EncSliceInt64V(v []int64, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincBytes) EncAsMapSliceInt64V(v []int64, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincBytes) fastpathEncSliceBoolR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincBytes + var v []bool + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]bool) + } + if f.ti.mbs { + ft.EncAsMapSliceBoolV(v, e) + return + } + ft.EncSliceBoolV(v, e) +} +func (fastpathETBincBytes) EncSliceBoolV(v []bool, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincBytes) EncAsMapSliceBoolV(v []bool, e *encoderBincBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincBytes) fastpathEncMapStringIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapStringIntfV(rv2i(rv).(map[string]interface{}), e) +} +func (fastpathETBincBytes) EncMapStringIntfV(v map[string]interface{}, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapStringStringR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapStringStringV(rv2i(rv).(map[string]string), e) +} +func (fastpathETBincBytes) EncMapStringStringV(v map[string]string, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapStringBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapStringBytesV(rv2i(rv).(map[string][]byte), e) +} +func (fastpathETBincBytes) EncMapStringBytesV(v map[string][]byte, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapStringUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapStringUint8V(rv2i(rv).(map[string]uint8), e) +} +func (fastpathETBincBytes) EncMapStringUint8V(v map[string]uint8, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapStringUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapStringUint64V(rv2i(rv).(map[string]uint64), e) +} +func (fastpathETBincBytes) EncMapStringUint64V(v map[string]uint64, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapStringIntR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapStringIntV(rv2i(rv).(map[string]int), e) +} +func (fastpathETBincBytes) EncMapStringIntV(v map[string]int, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapStringInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapStringInt32V(rv2i(rv).(map[string]int32), e) +} +func (fastpathETBincBytes) EncMapStringInt32V(v map[string]int32, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapStringFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapStringFloat64V(rv2i(rv).(map[string]float64), e) +} +func (fastpathETBincBytes) EncMapStringFloat64V(v map[string]float64, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapStringBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapStringBoolV(rv2i(rv).(map[string]bool), e) +} +func (fastpathETBincBytes) EncMapStringBoolV(v map[string]bool, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint8IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), e) +} +func (fastpathETBincBytes) EncMapUint8IntfV(v map[uint8]interface{}, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint8StringR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint8StringV(rv2i(rv).(map[uint8]string), e) +} +func (fastpathETBincBytes) EncMapUint8StringV(v map[uint8]string, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint8BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint8BytesV(rv2i(rv).(map[uint8][]byte), e) +} +func (fastpathETBincBytes) EncMapUint8BytesV(v map[uint8][]byte, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint8Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), e) +} +func (fastpathETBincBytes) EncMapUint8Uint8V(v map[uint8]uint8, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint8Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), e) +} +func (fastpathETBincBytes) EncMapUint8Uint64V(v map[uint8]uint64, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint8IntR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint8IntV(rv2i(rv).(map[uint8]int), e) +} +func (fastpathETBincBytes) EncMapUint8IntV(v map[uint8]int, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint8Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint8Int32V(rv2i(rv).(map[uint8]int32), e) +} +func (fastpathETBincBytes) EncMapUint8Int32V(v map[uint8]int32, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint8Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint8Float64V(rv2i(rv).(map[uint8]float64), e) +} +func (fastpathETBincBytes) EncMapUint8Float64V(v map[uint8]float64, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint8BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint8BoolV(rv2i(rv).(map[uint8]bool), e) +} +func (fastpathETBincBytes) EncMapUint8BoolV(v map[uint8]bool, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint64IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), e) +} +func (fastpathETBincBytes) EncMapUint64IntfV(v map[uint64]interface{}, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint64StringR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint64StringV(rv2i(rv).(map[uint64]string), e) +} +func (fastpathETBincBytes) EncMapUint64StringV(v map[uint64]string, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint64BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint64BytesV(rv2i(rv).(map[uint64][]byte), e) +} +func (fastpathETBincBytes) EncMapUint64BytesV(v map[uint64][]byte, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint64Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), e) +} +func (fastpathETBincBytes) EncMapUint64Uint8V(v map[uint64]uint8, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint64Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), e) +} +func (fastpathETBincBytes) EncMapUint64Uint64V(v map[uint64]uint64, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint64IntR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint64IntV(rv2i(rv).(map[uint64]int), e) +} +func (fastpathETBincBytes) EncMapUint64IntV(v map[uint64]int, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint64Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint64Int32V(rv2i(rv).(map[uint64]int32), e) +} +func (fastpathETBincBytes) EncMapUint64Int32V(v map[uint64]int32, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint64Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint64Float64V(rv2i(rv).(map[uint64]float64), e) +} +func (fastpathETBincBytes) EncMapUint64Float64V(v map[uint64]float64, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapUint64BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapUint64BoolV(rv2i(rv).(map[uint64]bool), e) +} +func (fastpathETBincBytes) EncMapUint64BoolV(v map[uint64]bool, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapIntIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapIntIntfV(rv2i(rv).(map[int]interface{}), e) +} +func (fastpathETBincBytes) EncMapIntIntfV(v map[int]interface{}, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapIntStringR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapIntStringV(rv2i(rv).(map[int]string), e) +} +func (fastpathETBincBytes) EncMapIntStringV(v map[int]string, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapIntBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapIntBytesV(rv2i(rv).(map[int][]byte), e) +} +func (fastpathETBincBytes) EncMapIntBytesV(v map[int][]byte, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapIntUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapIntUint8V(rv2i(rv).(map[int]uint8), e) +} +func (fastpathETBincBytes) EncMapIntUint8V(v map[int]uint8, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapIntUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapIntUint64V(rv2i(rv).(map[int]uint64), e) +} +func (fastpathETBincBytes) EncMapIntUint64V(v map[int]uint64, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapIntIntR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapIntIntV(rv2i(rv).(map[int]int), e) +} +func (fastpathETBincBytes) EncMapIntIntV(v map[int]int, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapIntInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapIntInt32V(rv2i(rv).(map[int]int32), e) +} +func (fastpathETBincBytes) EncMapIntInt32V(v map[int]int32, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapIntFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapIntFloat64V(rv2i(rv).(map[int]float64), e) +} +func (fastpathETBincBytes) EncMapIntFloat64V(v map[int]float64, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapIntBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapIntBoolV(rv2i(rv).(map[int]bool), e) +} +func (fastpathETBincBytes) EncMapIntBoolV(v map[int]bool, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapInt32IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapInt32IntfV(rv2i(rv).(map[int32]interface{}), e) +} +func (fastpathETBincBytes) EncMapInt32IntfV(v map[int32]interface{}, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapInt32StringR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapInt32StringV(rv2i(rv).(map[int32]string), e) +} +func (fastpathETBincBytes) EncMapInt32StringV(v map[int32]string, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapInt32BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapInt32BytesV(rv2i(rv).(map[int32][]byte), e) +} +func (fastpathETBincBytes) EncMapInt32BytesV(v map[int32][]byte, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapInt32Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapInt32Uint8V(rv2i(rv).(map[int32]uint8), e) +} +func (fastpathETBincBytes) EncMapInt32Uint8V(v map[int32]uint8, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapInt32Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapInt32Uint64V(rv2i(rv).(map[int32]uint64), e) +} +func (fastpathETBincBytes) EncMapInt32Uint64V(v map[int32]uint64, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapInt32IntR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapInt32IntV(rv2i(rv).(map[int32]int), e) +} +func (fastpathETBincBytes) EncMapInt32IntV(v map[int32]int, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapInt32Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapInt32Int32V(rv2i(rv).(map[int32]int32), e) +} +func (fastpathETBincBytes) EncMapInt32Int32V(v map[int32]int32, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapInt32Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapInt32Float64V(rv2i(rv).(map[int32]float64), e) +} +func (fastpathETBincBytes) EncMapInt32Float64V(v map[int32]float64, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincBytes) fastpathEncMapInt32BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETBincBytes{}.EncMapInt32BoolV(rv2i(rv).(map[int32]bool), e) +} +func (fastpathETBincBytes) EncMapInt32BoolV(v map[int32]bool, e *encoderBincBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (helperDecDriverBincBytes) fastpathDecodeTypeSwitch(iv interface{}, d *decoderBincBytes) bool { + var ft fastpathDTBincBytes + var changed bool + var containerLen int + switch v := iv.(type) { + case []interface{}: + ft.DecSliceIntfN(v, d) + case *[]interface{}: + var v2 []interface{} + if v2, changed = ft.DecSliceIntfY(*v, d); changed { + *v = v2 + } + case []string: + ft.DecSliceStringN(v, d) + case *[]string: + var v2 []string + if v2, changed = ft.DecSliceStringY(*v, d); changed { + *v = v2 + } + case [][]byte: + ft.DecSliceBytesN(v, d) + case *[][]byte: + var v2 [][]byte + if v2, changed = ft.DecSliceBytesY(*v, d); changed { + *v = v2 + } + case []float32: + ft.DecSliceFloat32N(v, d) + case *[]float32: + var v2 []float32 + if v2, changed = ft.DecSliceFloat32Y(*v, d); changed { + *v = v2 + } + case []float64: + ft.DecSliceFloat64N(v, d) + case *[]float64: + var v2 []float64 + if v2, changed = ft.DecSliceFloat64Y(*v, d); changed { + *v = v2 + } + case []uint8: + ft.DecSliceUint8N(v, d) + case *[]uint8: + var v2 []uint8 + if v2, changed = ft.DecSliceUint8Y(*v, d); changed { + *v = v2 + } + case []uint64: + ft.DecSliceUint64N(v, d) + case *[]uint64: + var v2 []uint64 + if v2, changed = ft.DecSliceUint64Y(*v, d); changed { + *v = v2 + } + case []int: + ft.DecSliceIntN(v, d) + case *[]int: + var v2 []int + if v2, changed = ft.DecSliceIntY(*v, d); changed { + *v = v2 + } + case []int32: + ft.DecSliceInt32N(v, d) + case *[]int32: + var v2 []int32 + if v2, changed = ft.DecSliceInt32Y(*v, d); changed { + *v = v2 + } + case []int64: + ft.DecSliceInt64N(v, d) + case *[]int64: + var v2 []int64 + if v2, changed = ft.DecSliceInt64Y(*v, d); changed { + *v = v2 + } + case []bool: + ft.DecSliceBoolN(v, d) + case *[]bool: + var v2 []bool + if v2, changed = ft.DecSliceBoolY(*v, d); changed { + *v = v2 + } + case map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*v, containerLen, d) + } + d.mapEnd() + } + default: + _ = v + return false + } + return true +} + +func (d *decoderBincBytes) fastpathDecSliceIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]interface{}) + if vv, changed := ft.DecSliceIntfY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []interface{} + rvGetSlice4Array(rv, &v) + ft.DecSliceIntfN(v, d) + default: + ft.DecSliceIntfN(rv2i(rv).([]interface{}), d) + } +} +func (fastpathDTBincBytes) DecSliceIntfY(v []interface{}, d *decoderBincBytes) (v2 []interface{}, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []interface{}) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]interface{}, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + d.decode(&v[uint(j)]) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]interface{}{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincBytes) DecSliceIntfN(v []interface{}, d *decoderBincBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + d.decode(&v[uint(j)]) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincBytes) fastpathDecSliceStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]string) + if vv, changed := ft.DecSliceStringY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []string + rvGetSlice4Array(rv, &v) + ft.DecSliceStringN(v, d) + default: + ft.DecSliceStringN(rv2i(rv).([]string), d) + } +} +func (fastpathDTBincBytes) DecSliceStringY(v []string, d *decoderBincBytes) (v2 []string, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []string) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]string, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, "")) + } + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]string{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincBytes) DecSliceStringN(v []string, d *decoderBincBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincBytes) fastpathDecSliceBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[][]byte) + if vv, changed := ft.DecSliceBytesY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v [][]byte + rvGetSlice4Array(rv, &v) + ft.DecSliceBytesN(v, d) + default: + ft.DecSliceBytesN(rv2i(rv).([][]byte), d) + } +} +func (fastpathDTBincBytes) DecSliceBytesY(v [][]byte, d *decoderBincBytes) (v2 [][]byte, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst [][]byte) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 24)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([][]byte, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([][]byte{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincBytes) DecSliceBytesN(v [][]byte, d *decoderBincBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincBytes) fastpathDecSliceFloat32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float32) + if vv, changed := ft.DecSliceFloat32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float32 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat32N(v, d) + default: + ft.DecSliceFloat32N(rv2i(rv).([]float32), d) + } +} +func (fastpathDTBincBytes) DecSliceFloat32Y(v []float32, d *decoderBincBytes) (v2 []float32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = float32(d.d.DecodeFloat32()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincBytes) DecSliceFloat32N(v []float32, d *decoderBincBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = float32(d.d.DecodeFloat32()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincBytes) fastpathDecSliceFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float64) + if vv, changed := ft.DecSliceFloat64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float64 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat64N(v, d) + default: + ft.DecSliceFloat64N(rv2i(rv).([]float64), d) + } +} +func (fastpathDTBincBytes) DecSliceFloat64Y(v []float64, d *decoderBincBytes) (v2 []float64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeFloat64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincBytes) DecSliceFloat64N(v []float64, d *decoderBincBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeFloat64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincBytes) fastpathDecSliceUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint8) + if vv, changed := ft.DecSliceUint8Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint8 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint8N(v, d) + default: + ft.DecSliceUint8N(rv2i(rv).([]uint8), d) + } +} +func (fastpathDTBincBytes) DecSliceUint8Y(v []uint8, d *decoderBincBytes) (v2 []uint8, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + if ctyp != valueTypeMap { + var dbi dBytesIntoState + v2, dbi = d.decodeBytesInto(v[:len(v):len(v)], false) + return v2, dbi != dBytesIntoParamOut + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint8) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint8, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint8{}) + } + d.mapEnd() + return v, changed +} +func (fastpathDTBincBytes) DecSliceUint8N(v []uint8, d *decoderBincBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + if ctyp != valueTypeMap { + d.decodeBytesInto(v[:len(v):len(v)], true) + return + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + d.mapEnd() +} + +func (d *decoderBincBytes) fastpathDecSliceUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint64) + if vv, changed := ft.DecSliceUint64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint64 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint64N(v, d) + default: + ft.DecSliceUint64N(rv2i(rv).([]uint64), d) + } +} +func (fastpathDTBincBytes) DecSliceUint64Y(v []uint64, d *decoderBincBytes) (v2 []uint64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeUint64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincBytes) DecSliceUint64N(v []uint64, d *decoderBincBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeUint64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincBytes) fastpathDecSliceIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int) + if vv, changed := ft.DecSliceIntY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int + rvGetSlice4Array(rv, &v) + ft.DecSliceIntN(v, d) + default: + ft.DecSliceIntN(rv2i(rv).([]int), d) + } +} +func (fastpathDTBincBytes) DecSliceIntY(v []int, d *decoderBincBytes) (v2 []int, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincBytes) DecSliceIntN(v []int, d *decoderBincBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincBytes) fastpathDecSliceInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int32) + if vv, changed := ft.DecSliceInt32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int32 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt32N(v, d) + default: + ft.DecSliceInt32N(rv2i(rv).([]int32), d) + } +} +func (fastpathDTBincBytes) DecSliceInt32Y(v []int32, d *decoderBincBytes) (v2 []int32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincBytes) DecSliceInt32N(v []int32, d *decoderBincBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincBytes) fastpathDecSliceInt64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int64) + if vv, changed := ft.DecSliceInt64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int64 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt64N(v, d) + default: + ft.DecSliceInt64N(rv2i(rv).([]int64), d) + } +} +func (fastpathDTBincBytes) DecSliceInt64Y(v []int64, d *decoderBincBytes) (v2 []int64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeInt64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincBytes) DecSliceInt64N(v []int64, d *decoderBincBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeInt64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincBytes) fastpathDecSliceBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]bool) + if vv, changed := ft.DecSliceBoolY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []bool + rvGetSlice4Array(rv, &v) + ft.DecSliceBoolN(v, d) + default: + ft.DecSliceBoolN(rv2i(rv).([]bool), d) + } +} +func (fastpathDTBincBytes) DecSliceBoolY(v []bool, d *decoderBincBytes) (v2 []bool, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []bool) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]bool, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, false)) + } + v[uint(j)] = d.d.DecodeBool() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]bool{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincBytes) DecSliceBoolN(v []bool, d *decoderBincBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeBool() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} +func (d *decoderBincBytes) fastpathDecMapStringIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]interface{}) + if *vp == nil { + *vp = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntfL(rv2i(rv).(map[string]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapStringIntfL(v map[string]interface{}, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderBincBytes) fastpathDecMapStringStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]string) + if *vp == nil { + *vp = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringStringL(rv2i(rv).(map[string]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapStringStringL(v map[string]string, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderBincBytes) fastpathDecMapStringBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string][]byte) + if *vp == nil { + *vp = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBytesL(rv2i(rv).(map[string][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapStringBytesL(v map[string][]byte, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderBincBytes) fastpathDecMapStringUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint8) + if *vp == nil { + *vp = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint8L(rv2i(rv).(map[string]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapStringUint8L(v map[string]uint8, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderBincBytes) fastpathDecMapStringUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint64) + if *vp == nil { + *vp = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint64L(rv2i(rv).(map[string]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapStringUint64L(v map[string]uint64, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderBincBytes) fastpathDecMapStringIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int) + if *vp == nil { + *vp = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntL(rv2i(rv).(map[string]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapStringIntL(v map[string]int, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderBincBytes) fastpathDecMapStringInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int32) + if *vp == nil { + *vp = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringInt32L(rv2i(rv).(map[string]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapStringInt32L(v map[string]int32, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderBincBytes) fastpathDecMapStringFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]float64) + if *vp == nil { + *vp = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringFloat64L(rv2i(rv).(map[string]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapStringFloat64L(v map[string]float64, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderBincBytes) fastpathDecMapStringBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]bool) + if *vp == nil { + *vp = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBoolL(rv2i(rv).(map[string]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapStringBoolL(v map[string]bool, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderBincBytes) fastpathDecMapUint8IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]interface{}) + if *vp == nil { + *vp = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntfL(rv2i(rv).(map[uint8]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint8IntfL(v map[uint8]interface{}, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderBincBytes) fastpathDecMapUint8StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]string) + if *vp == nil { + *vp = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8StringL(rv2i(rv).(map[uint8]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint8StringL(v map[uint8]string, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderBincBytes) fastpathDecMapUint8BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8][]byte) + if *vp == nil { + *vp = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BytesL(rv2i(rv).(map[uint8][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint8BytesL(v map[uint8][]byte, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderBincBytes) fastpathDecMapUint8Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint8) + if *vp == nil { + *vp = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint8L(rv2i(rv).(map[uint8]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint8Uint8L(v map[uint8]uint8, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderBincBytes) fastpathDecMapUint8Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint64) + if *vp == nil { + *vp = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint64L(rv2i(rv).(map[uint8]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint8Uint64L(v map[uint8]uint64, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderBincBytes) fastpathDecMapUint8IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int) + if *vp == nil { + *vp = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntL(rv2i(rv).(map[uint8]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint8IntL(v map[uint8]int, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderBincBytes) fastpathDecMapUint8Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int32) + if *vp == nil { + *vp = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Int32L(rv2i(rv).(map[uint8]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint8Int32L(v map[uint8]int32, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderBincBytes) fastpathDecMapUint8Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]float64) + if *vp == nil { + *vp = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Float64L(rv2i(rv).(map[uint8]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint8Float64L(v map[uint8]float64, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderBincBytes) fastpathDecMapUint8BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]bool) + if *vp == nil { + *vp = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BoolL(rv2i(rv).(map[uint8]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint8BoolL(v map[uint8]bool, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderBincBytes) fastpathDecMapUint64IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]interface{}) + if *vp == nil { + *vp = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntfL(rv2i(rv).(map[uint64]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint64IntfL(v map[uint64]interface{}, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderBincBytes) fastpathDecMapUint64StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]string) + if *vp == nil { + *vp = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64StringL(rv2i(rv).(map[uint64]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint64StringL(v map[uint64]string, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderBincBytes) fastpathDecMapUint64BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64][]byte) + if *vp == nil { + *vp = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BytesL(rv2i(rv).(map[uint64][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint64BytesL(v map[uint64][]byte, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderBincBytes) fastpathDecMapUint64Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint8) + if *vp == nil { + *vp = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint8L(rv2i(rv).(map[uint64]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint64Uint8L(v map[uint64]uint8, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderBincBytes) fastpathDecMapUint64Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint64) + if *vp == nil { + *vp = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint64L(rv2i(rv).(map[uint64]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint64Uint64L(v map[uint64]uint64, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderBincBytes) fastpathDecMapUint64IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int) + if *vp == nil { + *vp = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntL(rv2i(rv).(map[uint64]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint64IntL(v map[uint64]int, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderBincBytes) fastpathDecMapUint64Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int32) + if *vp == nil { + *vp = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Int32L(rv2i(rv).(map[uint64]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint64Int32L(v map[uint64]int32, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderBincBytes) fastpathDecMapUint64Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]float64) + if *vp == nil { + *vp = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Float64L(rv2i(rv).(map[uint64]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint64Float64L(v map[uint64]float64, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderBincBytes) fastpathDecMapUint64BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]bool) + if *vp == nil { + *vp = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BoolL(rv2i(rv).(map[uint64]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapUint64BoolL(v map[uint64]bool, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderBincBytes) fastpathDecMapIntIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]interface{}) + if *vp == nil { + *vp = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntfL(rv2i(rv).(map[int]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapIntIntfL(v map[int]interface{}, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderBincBytes) fastpathDecMapIntStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]string) + if *vp == nil { + *vp = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntStringL(rv2i(rv).(map[int]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapIntStringL(v map[int]string, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderBincBytes) fastpathDecMapIntBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int][]byte) + if *vp == nil { + *vp = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBytesL(rv2i(rv).(map[int][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapIntBytesL(v map[int][]byte, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderBincBytes) fastpathDecMapIntUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint8) + if *vp == nil { + *vp = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint8L(rv2i(rv).(map[int]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapIntUint8L(v map[int]uint8, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderBincBytes) fastpathDecMapIntUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint64) + if *vp == nil { + *vp = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint64L(rv2i(rv).(map[int]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapIntUint64L(v map[int]uint64, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderBincBytes) fastpathDecMapIntIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int) + if *vp == nil { + *vp = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntL(rv2i(rv).(map[int]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapIntIntL(v map[int]int, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderBincBytes) fastpathDecMapIntInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int32) + if *vp == nil { + *vp = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntInt32L(rv2i(rv).(map[int]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapIntInt32L(v map[int]int32, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderBincBytes) fastpathDecMapIntFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]float64) + if *vp == nil { + *vp = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntFloat64L(rv2i(rv).(map[int]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapIntFloat64L(v map[int]float64, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderBincBytes) fastpathDecMapIntBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]bool) + if *vp == nil { + *vp = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBoolL(rv2i(rv).(map[int]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapIntBoolL(v map[int]bool, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderBincBytes) fastpathDecMapInt32IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]interface{}) + if *vp == nil { + *vp = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntfL(rv2i(rv).(map[int32]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapInt32IntfL(v map[int32]interface{}, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderBincBytes) fastpathDecMapInt32StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]string) + if *vp == nil { + *vp = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32StringL(rv2i(rv).(map[int32]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapInt32StringL(v map[int32]string, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderBincBytes) fastpathDecMapInt32BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32][]byte) + if *vp == nil { + *vp = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BytesL(rv2i(rv).(map[int32][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapInt32BytesL(v map[int32][]byte, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderBincBytes) fastpathDecMapInt32Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint8) + if *vp == nil { + *vp = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint8L(rv2i(rv).(map[int32]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapInt32Uint8L(v map[int32]uint8, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderBincBytes) fastpathDecMapInt32Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint64) + if *vp == nil { + *vp = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint64L(rv2i(rv).(map[int32]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapInt32Uint64L(v map[int32]uint64, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderBincBytes) fastpathDecMapInt32IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int) + if *vp == nil { + *vp = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntL(rv2i(rv).(map[int32]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapInt32IntL(v map[int32]int, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderBincBytes) fastpathDecMapInt32Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int32) + if *vp == nil { + *vp = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Int32L(rv2i(rv).(map[int32]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapInt32Int32L(v map[int32]int32, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderBincBytes) fastpathDecMapInt32Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]float64) + if *vp == nil { + *vp = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Float64L(rv2i(rv).(map[int32]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapInt32Float64L(v map[int32]float64, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderBincBytes) fastpathDecMapInt32BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]bool) + if *vp == nil { + *vp = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BoolL(rv2i(rv).(map[int32]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincBytes) DecMapInt32BoolL(v map[int32]bool, containerLen int, d *decoderBincBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} + +type fastpathEBincIO struct { + rtid uintptr + rt reflect.Type + encfn func(*encoderBincIO, *encFnInfo, reflect.Value) +} +type fastpathDBincIO struct { + rtid uintptr + rt reflect.Type + decfn func(*decoderBincIO, *decFnInfo, reflect.Value) +} +type fastpathEsBincIO [56]fastpathEBincIO +type fastpathDsBincIO [56]fastpathDBincIO +type fastpathETBincIO struct{} +type fastpathDTBincIO struct{} + +func (helperEncDriverBincIO) fastpathEList() *fastpathEsBincIO { + var i uint = 0 + var s fastpathEsBincIO + fn := func(v interface{}, fe func(*encoderBincIO, *encFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathEBincIO{rt2id(xrt), xrt, fe} + i++ + } + + fn([]interface{}(nil), (*encoderBincIO).fastpathEncSliceIntfR) + fn([]string(nil), (*encoderBincIO).fastpathEncSliceStringR) + fn([][]byte(nil), (*encoderBincIO).fastpathEncSliceBytesR) + fn([]float32(nil), (*encoderBincIO).fastpathEncSliceFloat32R) + fn([]float64(nil), (*encoderBincIO).fastpathEncSliceFloat64R) + fn([]uint8(nil), (*encoderBincIO).fastpathEncSliceUint8R) + fn([]uint64(nil), (*encoderBincIO).fastpathEncSliceUint64R) + fn([]int(nil), (*encoderBincIO).fastpathEncSliceIntR) + fn([]int32(nil), (*encoderBincIO).fastpathEncSliceInt32R) + fn([]int64(nil), (*encoderBincIO).fastpathEncSliceInt64R) + fn([]bool(nil), (*encoderBincIO).fastpathEncSliceBoolR) + + fn(map[string]interface{}(nil), (*encoderBincIO).fastpathEncMapStringIntfR) + fn(map[string]string(nil), (*encoderBincIO).fastpathEncMapStringStringR) + fn(map[string][]byte(nil), (*encoderBincIO).fastpathEncMapStringBytesR) + fn(map[string]uint8(nil), (*encoderBincIO).fastpathEncMapStringUint8R) + fn(map[string]uint64(nil), (*encoderBincIO).fastpathEncMapStringUint64R) + fn(map[string]int(nil), (*encoderBincIO).fastpathEncMapStringIntR) + fn(map[string]int32(nil), (*encoderBincIO).fastpathEncMapStringInt32R) + fn(map[string]float64(nil), (*encoderBincIO).fastpathEncMapStringFloat64R) + fn(map[string]bool(nil), (*encoderBincIO).fastpathEncMapStringBoolR) + fn(map[uint8]interface{}(nil), (*encoderBincIO).fastpathEncMapUint8IntfR) + fn(map[uint8]string(nil), (*encoderBincIO).fastpathEncMapUint8StringR) + fn(map[uint8][]byte(nil), (*encoderBincIO).fastpathEncMapUint8BytesR) + fn(map[uint8]uint8(nil), (*encoderBincIO).fastpathEncMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*encoderBincIO).fastpathEncMapUint8Uint64R) + fn(map[uint8]int(nil), (*encoderBincIO).fastpathEncMapUint8IntR) + fn(map[uint8]int32(nil), (*encoderBincIO).fastpathEncMapUint8Int32R) + fn(map[uint8]float64(nil), (*encoderBincIO).fastpathEncMapUint8Float64R) + fn(map[uint8]bool(nil), (*encoderBincIO).fastpathEncMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*encoderBincIO).fastpathEncMapUint64IntfR) + fn(map[uint64]string(nil), (*encoderBincIO).fastpathEncMapUint64StringR) + fn(map[uint64][]byte(nil), (*encoderBincIO).fastpathEncMapUint64BytesR) + fn(map[uint64]uint8(nil), (*encoderBincIO).fastpathEncMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*encoderBincIO).fastpathEncMapUint64Uint64R) + fn(map[uint64]int(nil), (*encoderBincIO).fastpathEncMapUint64IntR) + fn(map[uint64]int32(nil), (*encoderBincIO).fastpathEncMapUint64Int32R) + fn(map[uint64]float64(nil), (*encoderBincIO).fastpathEncMapUint64Float64R) + fn(map[uint64]bool(nil), (*encoderBincIO).fastpathEncMapUint64BoolR) + fn(map[int]interface{}(nil), (*encoderBincIO).fastpathEncMapIntIntfR) + fn(map[int]string(nil), (*encoderBincIO).fastpathEncMapIntStringR) + fn(map[int][]byte(nil), (*encoderBincIO).fastpathEncMapIntBytesR) + fn(map[int]uint8(nil), (*encoderBincIO).fastpathEncMapIntUint8R) + fn(map[int]uint64(nil), (*encoderBincIO).fastpathEncMapIntUint64R) + fn(map[int]int(nil), (*encoderBincIO).fastpathEncMapIntIntR) + fn(map[int]int32(nil), (*encoderBincIO).fastpathEncMapIntInt32R) + fn(map[int]float64(nil), (*encoderBincIO).fastpathEncMapIntFloat64R) + fn(map[int]bool(nil), (*encoderBincIO).fastpathEncMapIntBoolR) + fn(map[int32]interface{}(nil), (*encoderBincIO).fastpathEncMapInt32IntfR) + fn(map[int32]string(nil), (*encoderBincIO).fastpathEncMapInt32StringR) + fn(map[int32][]byte(nil), (*encoderBincIO).fastpathEncMapInt32BytesR) + fn(map[int32]uint8(nil), (*encoderBincIO).fastpathEncMapInt32Uint8R) + fn(map[int32]uint64(nil), (*encoderBincIO).fastpathEncMapInt32Uint64R) + fn(map[int32]int(nil), (*encoderBincIO).fastpathEncMapInt32IntR) + fn(map[int32]int32(nil), (*encoderBincIO).fastpathEncMapInt32Int32R) + fn(map[int32]float64(nil), (*encoderBincIO).fastpathEncMapInt32Float64R) + fn(map[int32]bool(nil), (*encoderBincIO).fastpathEncMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperDecDriverBincIO) fastpathDList() *fastpathDsBincIO { + var i uint = 0 + var s fastpathDsBincIO + fn := func(v interface{}, fd func(*decoderBincIO, *decFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathDBincIO{rt2id(xrt), xrt, fd} + i++ + } + + fn([]interface{}(nil), (*decoderBincIO).fastpathDecSliceIntfR) + fn([]string(nil), (*decoderBincIO).fastpathDecSliceStringR) + fn([][]byte(nil), (*decoderBincIO).fastpathDecSliceBytesR) + fn([]float32(nil), (*decoderBincIO).fastpathDecSliceFloat32R) + fn([]float64(nil), (*decoderBincIO).fastpathDecSliceFloat64R) + fn([]uint8(nil), (*decoderBincIO).fastpathDecSliceUint8R) + fn([]uint64(nil), (*decoderBincIO).fastpathDecSliceUint64R) + fn([]int(nil), (*decoderBincIO).fastpathDecSliceIntR) + fn([]int32(nil), (*decoderBincIO).fastpathDecSliceInt32R) + fn([]int64(nil), (*decoderBincIO).fastpathDecSliceInt64R) + fn([]bool(nil), (*decoderBincIO).fastpathDecSliceBoolR) + + fn(map[string]interface{}(nil), (*decoderBincIO).fastpathDecMapStringIntfR) + fn(map[string]string(nil), (*decoderBincIO).fastpathDecMapStringStringR) + fn(map[string][]byte(nil), (*decoderBincIO).fastpathDecMapStringBytesR) + fn(map[string]uint8(nil), (*decoderBincIO).fastpathDecMapStringUint8R) + fn(map[string]uint64(nil), (*decoderBincIO).fastpathDecMapStringUint64R) + fn(map[string]int(nil), (*decoderBincIO).fastpathDecMapStringIntR) + fn(map[string]int32(nil), (*decoderBincIO).fastpathDecMapStringInt32R) + fn(map[string]float64(nil), (*decoderBincIO).fastpathDecMapStringFloat64R) + fn(map[string]bool(nil), (*decoderBincIO).fastpathDecMapStringBoolR) + fn(map[uint8]interface{}(nil), (*decoderBincIO).fastpathDecMapUint8IntfR) + fn(map[uint8]string(nil), (*decoderBincIO).fastpathDecMapUint8StringR) + fn(map[uint8][]byte(nil), (*decoderBincIO).fastpathDecMapUint8BytesR) + fn(map[uint8]uint8(nil), (*decoderBincIO).fastpathDecMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*decoderBincIO).fastpathDecMapUint8Uint64R) + fn(map[uint8]int(nil), (*decoderBincIO).fastpathDecMapUint8IntR) + fn(map[uint8]int32(nil), (*decoderBincIO).fastpathDecMapUint8Int32R) + fn(map[uint8]float64(nil), (*decoderBincIO).fastpathDecMapUint8Float64R) + fn(map[uint8]bool(nil), (*decoderBincIO).fastpathDecMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*decoderBincIO).fastpathDecMapUint64IntfR) + fn(map[uint64]string(nil), (*decoderBincIO).fastpathDecMapUint64StringR) + fn(map[uint64][]byte(nil), (*decoderBincIO).fastpathDecMapUint64BytesR) + fn(map[uint64]uint8(nil), (*decoderBincIO).fastpathDecMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*decoderBincIO).fastpathDecMapUint64Uint64R) + fn(map[uint64]int(nil), (*decoderBincIO).fastpathDecMapUint64IntR) + fn(map[uint64]int32(nil), (*decoderBincIO).fastpathDecMapUint64Int32R) + fn(map[uint64]float64(nil), (*decoderBincIO).fastpathDecMapUint64Float64R) + fn(map[uint64]bool(nil), (*decoderBincIO).fastpathDecMapUint64BoolR) + fn(map[int]interface{}(nil), (*decoderBincIO).fastpathDecMapIntIntfR) + fn(map[int]string(nil), (*decoderBincIO).fastpathDecMapIntStringR) + fn(map[int][]byte(nil), (*decoderBincIO).fastpathDecMapIntBytesR) + fn(map[int]uint8(nil), (*decoderBincIO).fastpathDecMapIntUint8R) + fn(map[int]uint64(nil), (*decoderBincIO).fastpathDecMapIntUint64R) + fn(map[int]int(nil), (*decoderBincIO).fastpathDecMapIntIntR) + fn(map[int]int32(nil), (*decoderBincIO).fastpathDecMapIntInt32R) + fn(map[int]float64(nil), (*decoderBincIO).fastpathDecMapIntFloat64R) + fn(map[int]bool(nil), (*decoderBincIO).fastpathDecMapIntBoolR) + fn(map[int32]interface{}(nil), (*decoderBincIO).fastpathDecMapInt32IntfR) + fn(map[int32]string(nil), (*decoderBincIO).fastpathDecMapInt32StringR) + fn(map[int32][]byte(nil), (*decoderBincIO).fastpathDecMapInt32BytesR) + fn(map[int32]uint8(nil), (*decoderBincIO).fastpathDecMapInt32Uint8R) + fn(map[int32]uint64(nil), (*decoderBincIO).fastpathDecMapInt32Uint64R) + fn(map[int32]int(nil), (*decoderBincIO).fastpathDecMapInt32IntR) + fn(map[int32]int32(nil), (*decoderBincIO).fastpathDecMapInt32Int32R) + fn(map[int32]float64(nil), (*decoderBincIO).fastpathDecMapInt32Float64R) + fn(map[int32]bool(nil), (*decoderBincIO).fastpathDecMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperEncDriverBincIO) fastpathEncodeTypeSwitch(iv interface{}, e *encoderBincIO) bool { + var ft fastpathETBincIO + switch v := iv.(type) { + case []interface{}: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntfV(v, e) + } + case []string: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceStringV(v, e) + } + case [][]byte: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBytesV(v, e) + } + case []float32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat32V(v, e) + } + case []float64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat64V(v, e) + } + case []uint8: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint8V(v, e) + } + case []uint64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint64V(v, e) + } + case []int: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntV(v, e) + } + case []int32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt32V(v, e) + } + case []int64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt64V(v, e) + } + case []bool: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBoolV(v, e) + } + case map[string]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntfV(v, e) + } + case map[string]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringStringV(v, e) + } + case map[string][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBytesV(v, e) + } + case map[string]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint8V(v, e) + } + case map[string]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint64V(v, e) + } + case map[string]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntV(v, e) + } + case map[string]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringInt32V(v, e) + } + case map[string]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringFloat64V(v, e) + } + case map[string]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBoolV(v, e) + } + case map[uint8]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntfV(v, e) + } + case map[uint8]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8StringV(v, e) + } + case map[uint8][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BytesV(v, e) + } + case map[uint8]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint8V(v, e) + } + case map[uint8]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint64V(v, e) + } + case map[uint8]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntV(v, e) + } + case map[uint8]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Int32V(v, e) + } + case map[uint8]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Float64V(v, e) + } + case map[uint8]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BoolV(v, e) + } + case map[uint64]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntfV(v, e) + } + case map[uint64]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64StringV(v, e) + } + case map[uint64][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BytesV(v, e) + } + case map[uint64]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint8V(v, e) + } + case map[uint64]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint64V(v, e) + } + case map[uint64]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntV(v, e) + } + case map[uint64]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Int32V(v, e) + } + case map[uint64]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Float64V(v, e) + } + case map[uint64]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BoolV(v, e) + } + case map[int]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntfV(v, e) + } + case map[int]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntStringV(v, e) + } + case map[int][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBytesV(v, e) + } + case map[int]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint8V(v, e) + } + case map[int]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint64V(v, e) + } + case map[int]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntV(v, e) + } + case map[int]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntInt32V(v, e) + } + case map[int]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntFloat64V(v, e) + } + case map[int]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBoolV(v, e) + } + case map[int32]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntfV(v, e) + } + case map[int32]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32StringV(v, e) + } + case map[int32][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BytesV(v, e) + } + case map[int32]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint8V(v, e) + } + case map[int32]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint64V(v, e) + } + case map[int32]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntV(v, e) + } + case map[int32]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Int32V(v, e) + } + case map[int32]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Float64V(v, e) + } + case map[int32]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BoolV(v, e) + } + default: + _ = v + return false + } + return true +} + +func (e *encoderBincIO) fastpathEncSliceIntfR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincIO + var v []interface{} + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]interface{}) + } + if f.ti.mbs { + ft.EncAsMapSliceIntfV(v, e) + return + } + ft.EncSliceIntfV(v, e) +} +func (fastpathETBincIO) EncSliceIntfV(v []interface{}, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincIO) EncAsMapSliceIntfV(v []interface{}, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincIO) fastpathEncSliceStringR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincIO + var v []string + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]string) + } + if f.ti.mbs { + ft.EncAsMapSliceStringV(v, e) + return + } + ft.EncSliceStringV(v, e) +} +func (fastpathETBincIO) EncSliceStringV(v []string, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincIO) EncAsMapSliceStringV(v []string, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincIO) fastpathEncSliceBytesR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincIO + var v [][]byte + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([][]byte) + } + if f.ti.mbs { + ft.EncAsMapSliceBytesV(v, e) + return + } + ft.EncSliceBytesV(v, e) +} +func (fastpathETBincIO) EncSliceBytesV(v [][]byte, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincIO) EncAsMapSliceBytesV(v [][]byte, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincIO) fastpathEncSliceFloat32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincIO + var v []float32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float32) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat32V(v, e) + return + } + ft.EncSliceFloat32V(v, e) +} +func (fastpathETBincIO) EncSliceFloat32V(v []float32, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincIO) EncAsMapSliceFloat32V(v []float32, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincIO) fastpathEncSliceFloat64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincIO + var v []float64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float64) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat64V(v, e) + return + } + ft.EncSliceFloat64V(v, e) +} +func (fastpathETBincIO) EncSliceFloat64V(v []float64, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincIO) EncAsMapSliceFloat64V(v []float64, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincIO) fastpathEncSliceUint8R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincIO + var v []uint8 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint8) + } + if f.ti.mbs { + ft.EncAsMapSliceUint8V(v, e) + return + } + ft.EncSliceUint8V(v, e) +} +func (fastpathETBincIO) EncSliceUint8V(v []uint8, e *encoderBincIO) { + e.e.EncodeStringBytesRaw(v) +} +func (fastpathETBincIO) EncAsMapSliceUint8V(v []uint8, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(uint64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincIO) fastpathEncSliceUint64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincIO + var v []uint64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint64) + } + if f.ti.mbs { + ft.EncAsMapSliceUint64V(v, e) + return + } + ft.EncSliceUint64V(v, e) +} +func (fastpathETBincIO) EncSliceUint64V(v []uint64, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincIO) EncAsMapSliceUint64V(v []uint64, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincIO) fastpathEncSliceIntR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincIO + var v []int + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int) + } + if f.ti.mbs { + ft.EncAsMapSliceIntV(v, e) + return + } + ft.EncSliceIntV(v, e) +} +func (fastpathETBincIO) EncSliceIntV(v []int, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincIO) EncAsMapSliceIntV(v []int, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincIO) fastpathEncSliceInt32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincIO + var v []int32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int32) + } + if f.ti.mbs { + ft.EncAsMapSliceInt32V(v, e) + return + } + ft.EncSliceInt32V(v, e) +} +func (fastpathETBincIO) EncSliceInt32V(v []int32, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincIO) EncAsMapSliceInt32V(v []int32, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincIO) fastpathEncSliceInt64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincIO + var v []int64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int64) + } + if f.ti.mbs { + ft.EncAsMapSliceInt64V(v, e) + return + } + ft.EncSliceInt64V(v, e) +} +func (fastpathETBincIO) EncSliceInt64V(v []int64, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincIO) EncAsMapSliceInt64V(v []int64, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincIO) fastpathEncSliceBoolR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETBincIO + var v []bool + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]bool) + } + if f.ti.mbs { + ft.EncAsMapSliceBoolV(v, e) + return + } + ft.EncSliceBoolV(v, e) +} +func (fastpathETBincIO) EncSliceBoolV(v []bool, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETBincIO) EncAsMapSliceBoolV(v []bool, e *encoderBincIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincIO) fastpathEncMapStringIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapStringIntfV(rv2i(rv).(map[string]interface{}), e) +} +func (fastpathETBincIO) EncMapStringIntfV(v map[string]interface{}, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapStringStringR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapStringStringV(rv2i(rv).(map[string]string), e) +} +func (fastpathETBincIO) EncMapStringStringV(v map[string]string, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapStringBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapStringBytesV(rv2i(rv).(map[string][]byte), e) +} +func (fastpathETBincIO) EncMapStringBytesV(v map[string][]byte, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapStringUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapStringUint8V(rv2i(rv).(map[string]uint8), e) +} +func (fastpathETBincIO) EncMapStringUint8V(v map[string]uint8, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapStringUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapStringUint64V(rv2i(rv).(map[string]uint64), e) +} +func (fastpathETBincIO) EncMapStringUint64V(v map[string]uint64, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapStringIntR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapStringIntV(rv2i(rv).(map[string]int), e) +} +func (fastpathETBincIO) EncMapStringIntV(v map[string]int, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapStringInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapStringInt32V(rv2i(rv).(map[string]int32), e) +} +func (fastpathETBincIO) EncMapStringInt32V(v map[string]int32, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapStringFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapStringFloat64V(rv2i(rv).(map[string]float64), e) +} +func (fastpathETBincIO) EncMapStringFloat64V(v map[string]float64, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapStringBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapStringBoolV(rv2i(rv).(map[string]bool), e) +} +func (fastpathETBincIO) EncMapStringBoolV(v map[string]bool, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint8IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), e) +} +func (fastpathETBincIO) EncMapUint8IntfV(v map[uint8]interface{}, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint8StringR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint8StringV(rv2i(rv).(map[uint8]string), e) +} +func (fastpathETBincIO) EncMapUint8StringV(v map[uint8]string, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint8BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint8BytesV(rv2i(rv).(map[uint8][]byte), e) +} +func (fastpathETBincIO) EncMapUint8BytesV(v map[uint8][]byte, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint8Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), e) +} +func (fastpathETBincIO) EncMapUint8Uint8V(v map[uint8]uint8, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint8Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), e) +} +func (fastpathETBincIO) EncMapUint8Uint64V(v map[uint8]uint64, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint8IntR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint8IntV(rv2i(rv).(map[uint8]int), e) +} +func (fastpathETBincIO) EncMapUint8IntV(v map[uint8]int, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint8Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint8Int32V(rv2i(rv).(map[uint8]int32), e) +} +func (fastpathETBincIO) EncMapUint8Int32V(v map[uint8]int32, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint8Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint8Float64V(rv2i(rv).(map[uint8]float64), e) +} +func (fastpathETBincIO) EncMapUint8Float64V(v map[uint8]float64, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint8BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint8BoolV(rv2i(rv).(map[uint8]bool), e) +} +func (fastpathETBincIO) EncMapUint8BoolV(v map[uint8]bool, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint64IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), e) +} +func (fastpathETBincIO) EncMapUint64IntfV(v map[uint64]interface{}, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint64StringR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint64StringV(rv2i(rv).(map[uint64]string), e) +} +func (fastpathETBincIO) EncMapUint64StringV(v map[uint64]string, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint64BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint64BytesV(rv2i(rv).(map[uint64][]byte), e) +} +func (fastpathETBincIO) EncMapUint64BytesV(v map[uint64][]byte, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint64Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), e) +} +func (fastpathETBincIO) EncMapUint64Uint8V(v map[uint64]uint8, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint64Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), e) +} +func (fastpathETBincIO) EncMapUint64Uint64V(v map[uint64]uint64, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint64IntR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint64IntV(rv2i(rv).(map[uint64]int), e) +} +func (fastpathETBincIO) EncMapUint64IntV(v map[uint64]int, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint64Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint64Int32V(rv2i(rv).(map[uint64]int32), e) +} +func (fastpathETBincIO) EncMapUint64Int32V(v map[uint64]int32, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint64Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint64Float64V(rv2i(rv).(map[uint64]float64), e) +} +func (fastpathETBincIO) EncMapUint64Float64V(v map[uint64]float64, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapUint64BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapUint64BoolV(rv2i(rv).(map[uint64]bool), e) +} +func (fastpathETBincIO) EncMapUint64BoolV(v map[uint64]bool, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapIntIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapIntIntfV(rv2i(rv).(map[int]interface{}), e) +} +func (fastpathETBincIO) EncMapIntIntfV(v map[int]interface{}, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapIntStringR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapIntStringV(rv2i(rv).(map[int]string), e) +} +func (fastpathETBincIO) EncMapIntStringV(v map[int]string, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapIntBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapIntBytesV(rv2i(rv).(map[int][]byte), e) +} +func (fastpathETBincIO) EncMapIntBytesV(v map[int][]byte, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapIntUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapIntUint8V(rv2i(rv).(map[int]uint8), e) +} +func (fastpathETBincIO) EncMapIntUint8V(v map[int]uint8, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapIntUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapIntUint64V(rv2i(rv).(map[int]uint64), e) +} +func (fastpathETBincIO) EncMapIntUint64V(v map[int]uint64, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapIntIntR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapIntIntV(rv2i(rv).(map[int]int), e) +} +func (fastpathETBincIO) EncMapIntIntV(v map[int]int, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapIntInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapIntInt32V(rv2i(rv).(map[int]int32), e) +} +func (fastpathETBincIO) EncMapIntInt32V(v map[int]int32, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapIntFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapIntFloat64V(rv2i(rv).(map[int]float64), e) +} +func (fastpathETBincIO) EncMapIntFloat64V(v map[int]float64, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapIntBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapIntBoolV(rv2i(rv).(map[int]bool), e) +} +func (fastpathETBincIO) EncMapIntBoolV(v map[int]bool, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapInt32IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapInt32IntfV(rv2i(rv).(map[int32]interface{}), e) +} +func (fastpathETBincIO) EncMapInt32IntfV(v map[int32]interface{}, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapInt32StringR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapInt32StringV(rv2i(rv).(map[int32]string), e) +} +func (fastpathETBincIO) EncMapInt32StringV(v map[int32]string, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapInt32BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapInt32BytesV(rv2i(rv).(map[int32][]byte), e) +} +func (fastpathETBincIO) EncMapInt32BytesV(v map[int32][]byte, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapInt32Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapInt32Uint8V(rv2i(rv).(map[int32]uint8), e) +} +func (fastpathETBincIO) EncMapInt32Uint8V(v map[int32]uint8, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapInt32Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapInt32Uint64V(rv2i(rv).(map[int32]uint64), e) +} +func (fastpathETBincIO) EncMapInt32Uint64V(v map[int32]uint64, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapInt32IntR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapInt32IntV(rv2i(rv).(map[int32]int), e) +} +func (fastpathETBincIO) EncMapInt32IntV(v map[int32]int, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapInt32Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapInt32Int32V(rv2i(rv).(map[int32]int32), e) +} +func (fastpathETBincIO) EncMapInt32Int32V(v map[int32]int32, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapInt32Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapInt32Float64V(rv2i(rv).(map[int32]float64), e) +} +func (fastpathETBincIO) EncMapInt32Float64V(v map[int32]float64, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderBincIO) fastpathEncMapInt32BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETBincIO{}.EncMapInt32BoolV(rv2i(rv).(map[int32]bool), e) +} +func (fastpathETBincIO) EncMapInt32BoolV(v map[int32]bool, e *encoderBincIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (helperDecDriverBincIO) fastpathDecodeTypeSwitch(iv interface{}, d *decoderBincIO) bool { + var ft fastpathDTBincIO + var changed bool + var containerLen int + switch v := iv.(type) { + case []interface{}: + ft.DecSliceIntfN(v, d) + case *[]interface{}: + var v2 []interface{} + if v2, changed = ft.DecSliceIntfY(*v, d); changed { + *v = v2 + } + case []string: + ft.DecSliceStringN(v, d) + case *[]string: + var v2 []string + if v2, changed = ft.DecSliceStringY(*v, d); changed { + *v = v2 + } + case [][]byte: + ft.DecSliceBytesN(v, d) + case *[][]byte: + var v2 [][]byte + if v2, changed = ft.DecSliceBytesY(*v, d); changed { + *v = v2 + } + case []float32: + ft.DecSliceFloat32N(v, d) + case *[]float32: + var v2 []float32 + if v2, changed = ft.DecSliceFloat32Y(*v, d); changed { + *v = v2 + } + case []float64: + ft.DecSliceFloat64N(v, d) + case *[]float64: + var v2 []float64 + if v2, changed = ft.DecSliceFloat64Y(*v, d); changed { + *v = v2 + } + case []uint8: + ft.DecSliceUint8N(v, d) + case *[]uint8: + var v2 []uint8 + if v2, changed = ft.DecSliceUint8Y(*v, d); changed { + *v = v2 + } + case []uint64: + ft.DecSliceUint64N(v, d) + case *[]uint64: + var v2 []uint64 + if v2, changed = ft.DecSliceUint64Y(*v, d); changed { + *v = v2 + } + case []int: + ft.DecSliceIntN(v, d) + case *[]int: + var v2 []int + if v2, changed = ft.DecSliceIntY(*v, d); changed { + *v = v2 + } + case []int32: + ft.DecSliceInt32N(v, d) + case *[]int32: + var v2 []int32 + if v2, changed = ft.DecSliceInt32Y(*v, d); changed { + *v = v2 + } + case []int64: + ft.DecSliceInt64N(v, d) + case *[]int64: + var v2 []int64 + if v2, changed = ft.DecSliceInt64Y(*v, d); changed { + *v = v2 + } + case []bool: + ft.DecSliceBoolN(v, d) + case *[]bool: + var v2 []bool + if v2, changed = ft.DecSliceBoolY(*v, d); changed { + *v = v2 + } + case map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*v, containerLen, d) + } + d.mapEnd() + } + default: + _ = v + return false + } + return true +} + +func (d *decoderBincIO) fastpathDecSliceIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]interface{}) + if vv, changed := ft.DecSliceIntfY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []interface{} + rvGetSlice4Array(rv, &v) + ft.DecSliceIntfN(v, d) + default: + ft.DecSliceIntfN(rv2i(rv).([]interface{}), d) + } +} +func (fastpathDTBincIO) DecSliceIntfY(v []interface{}, d *decoderBincIO) (v2 []interface{}, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []interface{}) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]interface{}, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + d.decode(&v[uint(j)]) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]interface{}{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincIO) DecSliceIntfN(v []interface{}, d *decoderBincIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + d.decode(&v[uint(j)]) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincIO) fastpathDecSliceStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]string) + if vv, changed := ft.DecSliceStringY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []string + rvGetSlice4Array(rv, &v) + ft.DecSliceStringN(v, d) + default: + ft.DecSliceStringN(rv2i(rv).([]string), d) + } +} +func (fastpathDTBincIO) DecSliceStringY(v []string, d *decoderBincIO) (v2 []string, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []string) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]string, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, "")) + } + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]string{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincIO) DecSliceStringN(v []string, d *decoderBincIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincIO) fastpathDecSliceBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[][]byte) + if vv, changed := ft.DecSliceBytesY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v [][]byte + rvGetSlice4Array(rv, &v) + ft.DecSliceBytesN(v, d) + default: + ft.DecSliceBytesN(rv2i(rv).([][]byte), d) + } +} +func (fastpathDTBincIO) DecSliceBytesY(v [][]byte, d *decoderBincIO) (v2 [][]byte, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst [][]byte) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 24)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([][]byte, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([][]byte{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincIO) DecSliceBytesN(v [][]byte, d *decoderBincIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincIO) fastpathDecSliceFloat32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float32) + if vv, changed := ft.DecSliceFloat32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float32 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat32N(v, d) + default: + ft.DecSliceFloat32N(rv2i(rv).([]float32), d) + } +} +func (fastpathDTBincIO) DecSliceFloat32Y(v []float32, d *decoderBincIO) (v2 []float32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = float32(d.d.DecodeFloat32()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincIO) DecSliceFloat32N(v []float32, d *decoderBincIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = float32(d.d.DecodeFloat32()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincIO) fastpathDecSliceFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float64) + if vv, changed := ft.DecSliceFloat64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float64 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat64N(v, d) + default: + ft.DecSliceFloat64N(rv2i(rv).([]float64), d) + } +} +func (fastpathDTBincIO) DecSliceFloat64Y(v []float64, d *decoderBincIO) (v2 []float64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeFloat64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincIO) DecSliceFloat64N(v []float64, d *decoderBincIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeFloat64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincIO) fastpathDecSliceUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint8) + if vv, changed := ft.DecSliceUint8Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint8 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint8N(v, d) + default: + ft.DecSliceUint8N(rv2i(rv).([]uint8), d) + } +} +func (fastpathDTBincIO) DecSliceUint8Y(v []uint8, d *decoderBincIO) (v2 []uint8, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + if ctyp != valueTypeMap { + var dbi dBytesIntoState + v2, dbi = d.decodeBytesInto(v[:len(v):len(v)], false) + return v2, dbi != dBytesIntoParamOut + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint8) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint8, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint8{}) + } + d.mapEnd() + return v, changed +} +func (fastpathDTBincIO) DecSliceUint8N(v []uint8, d *decoderBincIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + if ctyp != valueTypeMap { + d.decodeBytesInto(v[:len(v):len(v)], true) + return + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + d.mapEnd() +} + +func (d *decoderBincIO) fastpathDecSliceUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint64) + if vv, changed := ft.DecSliceUint64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint64 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint64N(v, d) + default: + ft.DecSliceUint64N(rv2i(rv).([]uint64), d) + } +} +func (fastpathDTBincIO) DecSliceUint64Y(v []uint64, d *decoderBincIO) (v2 []uint64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeUint64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincIO) DecSliceUint64N(v []uint64, d *decoderBincIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeUint64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincIO) fastpathDecSliceIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int) + if vv, changed := ft.DecSliceIntY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int + rvGetSlice4Array(rv, &v) + ft.DecSliceIntN(v, d) + default: + ft.DecSliceIntN(rv2i(rv).([]int), d) + } +} +func (fastpathDTBincIO) DecSliceIntY(v []int, d *decoderBincIO) (v2 []int, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincIO) DecSliceIntN(v []int, d *decoderBincIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincIO) fastpathDecSliceInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int32) + if vv, changed := ft.DecSliceInt32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int32 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt32N(v, d) + default: + ft.DecSliceInt32N(rv2i(rv).([]int32), d) + } +} +func (fastpathDTBincIO) DecSliceInt32Y(v []int32, d *decoderBincIO) (v2 []int32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincIO) DecSliceInt32N(v []int32, d *decoderBincIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincIO) fastpathDecSliceInt64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int64) + if vv, changed := ft.DecSliceInt64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int64 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt64N(v, d) + default: + ft.DecSliceInt64N(rv2i(rv).([]int64), d) + } +} +func (fastpathDTBincIO) DecSliceInt64Y(v []int64, d *decoderBincIO) (v2 []int64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeInt64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincIO) DecSliceInt64N(v []int64, d *decoderBincIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeInt64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincIO) fastpathDecSliceBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]bool) + if vv, changed := ft.DecSliceBoolY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []bool + rvGetSlice4Array(rv, &v) + ft.DecSliceBoolN(v, d) + default: + ft.DecSliceBoolN(rv2i(rv).([]bool), d) + } +} +func (fastpathDTBincIO) DecSliceBoolY(v []bool, d *decoderBincIO) (v2 []bool, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []bool) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]bool, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, false)) + } + v[uint(j)] = d.d.DecodeBool() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]bool{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTBincIO) DecSliceBoolN(v []bool, d *decoderBincIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeBool() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} +func (d *decoderBincIO) fastpathDecMapStringIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]interface{}) + if *vp == nil { + *vp = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntfL(rv2i(rv).(map[string]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapStringIntfL(v map[string]interface{}, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderBincIO) fastpathDecMapStringStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]string) + if *vp == nil { + *vp = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringStringL(rv2i(rv).(map[string]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapStringStringL(v map[string]string, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderBincIO) fastpathDecMapStringBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string][]byte) + if *vp == nil { + *vp = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBytesL(rv2i(rv).(map[string][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapStringBytesL(v map[string][]byte, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderBincIO) fastpathDecMapStringUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint8) + if *vp == nil { + *vp = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint8L(rv2i(rv).(map[string]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapStringUint8L(v map[string]uint8, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderBincIO) fastpathDecMapStringUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint64) + if *vp == nil { + *vp = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint64L(rv2i(rv).(map[string]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapStringUint64L(v map[string]uint64, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderBincIO) fastpathDecMapStringIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int) + if *vp == nil { + *vp = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntL(rv2i(rv).(map[string]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapStringIntL(v map[string]int, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderBincIO) fastpathDecMapStringInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int32) + if *vp == nil { + *vp = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringInt32L(rv2i(rv).(map[string]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapStringInt32L(v map[string]int32, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderBincIO) fastpathDecMapStringFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]float64) + if *vp == nil { + *vp = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringFloat64L(rv2i(rv).(map[string]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapStringFloat64L(v map[string]float64, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderBincIO) fastpathDecMapStringBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]bool) + if *vp == nil { + *vp = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBoolL(rv2i(rv).(map[string]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapStringBoolL(v map[string]bool, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderBincIO) fastpathDecMapUint8IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]interface{}) + if *vp == nil { + *vp = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntfL(rv2i(rv).(map[uint8]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint8IntfL(v map[uint8]interface{}, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderBincIO) fastpathDecMapUint8StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]string) + if *vp == nil { + *vp = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8StringL(rv2i(rv).(map[uint8]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint8StringL(v map[uint8]string, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderBincIO) fastpathDecMapUint8BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8][]byte) + if *vp == nil { + *vp = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BytesL(rv2i(rv).(map[uint8][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint8BytesL(v map[uint8][]byte, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderBincIO) fastpathDecMapUint8Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint8) + if *vp == nil { + *vp = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint8L(rv2i(rv).(map[uint8]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint8Uint8L(v map[uint8]uint8, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderBincIO) fastpathDecMapUint8Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint64) + if *vp == nil { + *vp = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint64L(rv2i(rv).(map[uint8]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint8Uint64L(v map[uint8]uint64, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderBincIO) fastpathDecMapUint8IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int) + if *vp == nil { + *vp = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntL(rv2i(rv).(map[uint8]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint8IntL(v map[uint8]int, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderBincIO) fastpathDecMapUint8Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int32) + if *vp == nil { + *vp = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Int32L(rv2i(rv).(map[uint8]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint8Int32L(v map[uint8]int32, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderBincIO) fastpathDecMapUint8Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]float64) + if *vp == nil { + *vp = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Float64L(rv2i(rv).(map[uint8]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint8Float64L(v map[uint8]float64, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderBincIO) fastpathDecMapUint8BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]bool) + if *vp == nil { + *vp = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BoolL(rv2i(rv).(map[uint8]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint8BoolL(v map[uint8]bool, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderBincIO) fastpathDecMapUint64IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]interface{}) + if *vp == nil { + *vp = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntfL(rv2i(rv).(map[uint64]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint64IntfL(v map[uint64]interface{}, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderBincIO) fastpathDecMapUint64StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]string) + if *vp == nil { + *vp = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64StringL(rv2i(rv).(map[uint64]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint64StringL(v map[uint64]string, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderBincIO) fastpathDecMapUint64BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64][]byte) + if *vp == nil { + *vp = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BytesL(rv2i(rv).(map[uint64][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint64BytesL(v map[uint64][]byte, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderBincIO) fastpathDecMapUint64Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint8) + if *vp == nil { + *vp = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint8L(rv2i(rv).(map[uint64]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint64Uint8L(v map[uint64]uint8, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderBincIO) fastpathDecMapUint64Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint64) + if *vp == nil { + *vp = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint64L(rv2i(rv).(map[uint64]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint64Uint64L(v map[uint64]uint64, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderBincIO) fastpathDecMapUint64IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int) + if *vp == nil { + *vp = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntL(rv2i(rv).(map[uint64]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint64IntL(v map[uint64]int, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderBincIO) fastpathDecMapUint64Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int32) + if *vp == nil { + *vp = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Int32L(rv2i(rv).(map[uint64]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint64Int32L(v map[uint64]int32, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderBincIO) fastpathDecMapUint64Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]float64) + if *vp == nil { + *vp = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Float64L(rv2i(rv).(map[uint64]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint64Float64L(v map[uint64]float64, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderBincIO) fastpathDecMapUint64BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]bool) + if *vp == nil { + *vp = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BoolL(rv2i(rv).(map[uint64]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapUint64BoolL(v map[uint64]bool, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderBincIO) fastpathDecMapIntIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]interface{}) + if *vp == nil { + *vp = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntfL(rv2i(rv).(map[int]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapIntIntfL(v map[int]interface{}, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderBincIO) fastpathDecMapIntStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]string) + if *vp == nil { + *vp = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntStringL(rv2i(rv).(map[int]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapIntStringL(v map[int]string, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderBincIO) fastpathDecMapIntBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int][]byte) + if *vp == nil { + *vp = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBytesL(rv2i(rv).(map[int][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapIntBytesL(v map[int][]byte, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderBincIO) fastpathDecMapIntUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint8) + if *vp == nil { + *vp = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint8L(rv2i(rv).(map[int]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapIntUint8L(v map[int]uint8, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderBincIO) fastpathDecMapIntUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint64) + if *vp == nil { + *vp = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint64L(rv2i(rv).(map[int]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapIntUint64L(v map[int]uint64, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderBincIO) fastpathDecMapIntIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int) + if *vp == nil { + *vp = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntL(rv2i(rv).(map[int]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapIntIntL(v map[int]int, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderBincIO) fastpathDecMapIntInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int32) + if *vp == nil { + *vp = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntInt32L(rv2i(rv).(map[int]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapIntInt32L(v map[int]int32, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderBincIO) fastpathDecMapIntFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]float64) + if *vp == nil { + *vp = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntFloat64L(rv2i(rv).(map[int]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapIntFloat64L(v map[int]float64, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderBincIO) fastpathDecMapIntBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]bool) + if *vp == nil { + *vp = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBoolL(rv2i(rv).(map[int]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapIntBoolL(v map[int]bool, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderBincIO) fastpathDecMapInt32IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]interface{}) + if *vp == nil { + *vp = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntfL(rv2i(rv).(map[int32]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapInt32IntfL(v map[int32]interface{}, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderBincIO) fastpathDecMapInt32StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]string) + if *vp == nil { + *vp = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32StringL(rv2i(rv).(map[int32]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapInt32StringL(v map[int32]string, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderBincIO) fastpathDecMapInt32BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32][]byte) + if *vp == nil { + *vp = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BytesL(rv2i(rv).(map[int32][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapInt32BytesL(v map[int32][]byte, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderBincIO) fastpathDecMapInt32Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint8) + if *vp == nil { + *vp = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint8L(rv2i(rv).(map[int32]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapInt32Uint8L(v map[int32]uint8, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderBincIO) fastpathDecMapInt32Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint64) + if *vp == nil { + *vp = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint64L(rv2i(rv).(map[int32]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapInt32Uint64L(v map[int32]uint64, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderBincIO) fastpathDecMapInt32IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int) + if *vp == nil { + *vp = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntL(rv2i(rv).(map[int32]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapInt32IntL(v map[int32]int, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderBincIO) fastpathDecMapInt32Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int32) + if *vp == nil { + *vp = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Int32L(rv2i(rv).(map[int32]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapInt32Int32L(v map[int32]int32, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderBincIO) fastpathDecMapInt32Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]float64) + if *vp == nil { + *vp = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Float64L(rv2i(rv).(map[int32]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapInt32Float64L(v map[int32]float64, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderBincIO) fastpathDecMapInt32BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTBincIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]bool) + if *vp == nil { + *vp = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BoolL(rv2i(rv).(map[int32]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTBincIO) DecMapInt32BoolL(v map[int32]bool, containerLen int, d *decoderBincIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} diff --git a/vendor/github.com/ugorji/go/codec/binc.go b/vendor/github.com/ugorji/go/codec/binc.go index 9ed15a0..3451355 100644 --- a/vendor/github.com/ugorji/go/codec/binc.go +++ b/vendor/github.com/ugorji/go/codec/binc.go @@ -1,177 +1,75 @@ +//go:build notmono || codec.notmono + // Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. // Use of this source code is governed by a MIT license found in the LICENSE file. package codec import ( + "io" "math" "reflect" "time" "unicode/utf8" ) -// Symbol management: -// - symbols are stored in a symbol map during encoding and decoding. -// - the symbols persist until the (En|De)coder ResetXXX method is called. - -const bincDoPrune = true - -// vd as low 4 bits (there are 16 slots) -const ( - bincVdSpecial byte = iota - bincVdPosInt - bincVdNegInt - bincVdFloat - - bincVdString - bincVdByteArray - bincVdArray - bincVdMap - - bincVdTimestamp - bincVdSmallInt - _ // bincVdUnicodeOther - bincVdSymbol - - _ // bincVdDecimal - _ // open slot - _ // open slot - bincVdCustomExt = 0x0f -) - -const ( - bincSpNil byte = iota - bincSpFalse - bincSpTrue - bincSpNan - bincSpPosInf - bincSpNegInf - bincSpZeroFloat - bincSpZero - bincSpNegOne -) - -const ( - _ byte = iota // bincFlBin16 - bincFlBin32 - _ // bincFlBin32e - bincFlBin64 - _ // bincFlBin64e - // others not currently supported -) - -const bincBdNil = 0 // bincVdSpecial<<4 | bincSpNil // staticcheck barfs on this (SA4016) - -var ( - bincdescSpecialVsNames = map[byte]string{ - bincSpNil: "nil", - bincSpFalse: "false", - bincSpTrue: "true", - bincSpNan: "float", - bincSpPosInf: "float", - bincSpNegInf: "float", - bincSpZeroFloat: "float", - bincSpZero: "uint", - bincSpNegOne: "int", - } - bincdescVdNames = map[byte]string{ - bincVdSpecial: "special", - bincVdSmallInt: "uint", - bincVdPosInt: "uint", - bincVdFloat: "float", - bincVdSymbol: "string", - bincVdString: "string", - bincVdByteArray: "bytes", - bincVdTimestamp: "time", - bincVdCustomExt: "ext", - bincVdArray: "array", - bincVdMap: "map", - } -) - -func bincdescbd(bd byte) (s string) { - return bincdesc(bd>>4, bd&0x0f) -} - -func bincdesc(vd, vs byte) (s string) { - if vd == bincVdSpecial { - s = bincdescSpecialVsNames[vs] - } else { - s = bincdescVdNames[vd] - } - if s == "" { - s = "unknown" - } - return -} - -type bincEncState struct { - m map[string]uint16 // symbols -} - -func (e bincEncState) captureState() interface{} { return e.m } -func (e *bincEncState) resetState() { e.m = nil } -func (e *bincEncState) reset() { e.resetState() } -func (e *bincEncState) restoreState(v interface{}) { e.m = v.(map[string]uint16) } - -type bincEncDriver struct { +type bincEncDriver[T encWriter] struct { noBuiltInTypes encDriverNoopContainerWriter + encDriverContainerNoTrackerT + encInit2er + h *BincHandle + e *encoderBase + w T bincEncState - - e Encoder } -func (e *bincEncDriver) encoder() *Encoder { - return &e.e +func (e *bincEncDriver[T]) EncodeNil() { + e.w.writen1(bincBdNil) } -func (e *bincEncDriver) EncodeNil() { - e.e.encWr.writen1(bincBdNil) -} - -func (e *bincEncDriver) EncodeTime(t time.Time) { +func (e *bincEncDriver[T]) EncodeTime(t time.Time) { if t.IsZero() { e.EncodeNil() } else { bs := bincEncodeTime(t) - e.e.encWr.writen1(bincVdTimestamp<<4 | uint8(len(bs))) - e.e.encWr.writeb(bs) + e.w.writen1(bincVdTimestamp<<4 | uint8(len(bs))) + e.w.writeb(bs) } } -func (e *bincEncDriver) EncodeBool(b bool) { +func (e *bincEncDriver[T]) EncodeBool(b bool) { if b { - e.e.encWr.writen1(bincVdSpecial<<4 | bincSpTrue) + e.w.writen1(bincVdSpecial<<4 | bincSpTrue) } else { - e.e.encWr.writen1(bincVdSpecial<<4 | bincSpFalse) + e.w.writen1(bincVdSpecial<<4 | bincSpFalse) } } -func (e *bincEncDriver) encSpFloat(f float64) (done bool) { +func (e *bincEncDriver[T]) encSpFloat(f float64) (done bool) { if f == 0 { - e.e.encWr.writen1(bincVdSpecial<<4 | bincSpZeroFloat) + e.w.writen1(bincVdSpecial<<4 | bincSpZeroFloat) } else if math.IsNaN(float64(f)) { - e.e.encWr.writen1(bincVdSpecial<<4 | bincSpNan) + e.w.writen1(bincVdSpecial<<4 | bincSpNan) } else if math.IsInf(float64(f), +1) { - e.e.encWr.writen1(bincVdSpecial<<4 | bincSpPosInf) + e.w.writen1(bincVdSpecial<<4 | bincSpPosInf) } else if math.IsInf(float64(f), -1) { - e.e.encWr.writen1(bincVdSpecial<<4 | bincSpNegInf) + e.w.writen1(bincVdSpecial<<4 | bincSpNegInf) } else { return } return true } -func (e *bincEncDriver) EncodeFloat32(f float32) { +func (e *bincEncDriver[T]) EncodeFloat32(f float32) { if !e.encSpFloat(float64(f)) { - e.e.encWr.writen1(bincVdFloat<<4 | bincFlBin32) - bigen.writeUint32(e.e.w(), math.Float32bits(f)) + e.w.writen1(bincVdFloat<<4 | bincFlBin32) + e.w.writen4(bigen.PutUint32(math.Float32bits(f))) } } -func (e *bincEncDriver) EncodeFloat64(f float64) { +func (e *bincEncDriver[T]) EncodeFloat64(f float64) { if e.encSpFloat(f) { return } @@ -182,64 +80,64 @@ func (e *bincEncDriver) EncodeFloat64(f float64) { } i++ if i <= 6 { - e.e.encWr.writen1(bincVdFloat<<4 | 0x8 | bincFlBin64) - e.e.encWr.writen1(byte(i)) - e.e.encWr.writeb(b[:i]) + e.w.writen1(bincVdFloat<<4 | 0x8 | bincFlBin64) + e.w.writen1(byte(i)) + e.w.writeb(b[:i]) return } } - e.e.encWr.writen1(bincVdFloat<<4 | bincFlBin64) - e.e.encWr.writen8(b) + e.w.writen1(bincVdFloat<<4 | bincFlBin64) + e.w.writen8(b) } -func (e *bincEncDriver) encIntegerPrune32(bd byte, pos bool, v uint64) { +func (e *bincEncDriver[T]) encIntegerPrune32(bd byte, pos bool, v uint64) { b := bigen.PutUint32(uint32(v)) if bincDoPrune { i := byte(pruneSignExt(b[:], pos)) - e.e.encWr.writen1(bd | 3 - i) - e.e.encWr.writeb(b[i:]) + e.w.writen1(bd | 3 - i) + e.w.writeb(b[i:]) } else { - e.e.encWr.writen1(bd | 3) - e.e.encWr.writen4(b) + e.w.writen1(bd | 3) + e.w.writen4(b) } } -func (e *bincEncDriver) encIntegerPrune64(bd byte, pos bool, v uint64) { +func (e *bincEncDriver[T]) encIntegerPrune64(bd byte, pos bool, v uint64) { b := bigen.PutUint64(v) if bincDoPrune { i := byte(pruneSignExt(b[:], pos)) - e.e.encWr.writen1(bd | 7 - i) - e.e.encWr.writeb(b[i:]) + e.w.writen1(bd | 7 - i) + e.w.writeb(b[i:]) } else { - e.e.encWr.writen1(bd | 7) - e.e.encWr.writen8(b) + e.w.writen1(bd | 7) + e.w.writen8(b) } } -func (e *bincEncDriver) EncodeInt(v int64) { +func (e *bincEncDriver[T]) EncodeInt(v int64) { if v >= 0 { e.encUint(bincVdPosInt<<4, true, uint64(v)) } else if v == -1 { - e.e.encWr.writen1(bincVdSpecial<<4 | bincSpNegOne) + e.w.writen1(bincVdSpecial<<4 | bincSpNegOne) } else { e.encUint(bincVdNegInt<<4, false, uint64(-v)) } } -func (e *bincEncDriver) EncodeUint(v uint64) { +func (e *bincEncDriver[T]) EncodeUint(v uint64) { e.encUint(bincVdPosInt<<4, true, v) } -func (e *bincEncDriver) encUint(bd byte, pos bool, v uint64) { +func (e *bincEncDriver[T]) encUint(bd byte, pos bool, v uint64) { if v == 0 { - e.e.encWr.writen1(bincVdSpecial<<4 | bincSpZero) + e.w.writen1(bincVdSpecial<<4 | bincSpZero) } else if pos && v >= 1 && v <= 16 { - e.e.encWr.writen1(bincVdSmallInt<<4 | byte(v-1)) + e.w.writen1(bincVdSmallInt<<4 | byte(v-1)) } else if v <= math.MaxUint8 { - e.e.encWr.writen2(bd|0x0, byte(v)) + e.w.writen2(bd, byte(v)) // bd|0x0 } else if v <= math.MaxUint16 { - e.e.encWr.writen1(bd | 0x01) - bigen.writeUint16(e.e.w(), uint16(v)) + e.w.writen1(bd | 0x01) + e.w.writen2(bigen.PutUint16(uint16(v))) } else if v <= math.MaxUint32 { e.encIntegerPrune32(bd, pos, v) } else { @@ -247,21 +145,21 @@ func (e *bincEncDriver) encUint(bd byte, pos bool, v uint64) { } } -func (e *bincEncDriver) EncodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) { +func (e *bincEncDriver[T]) EncodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) { var bs0, bs []byte if ext == SelfExt { bs0 = e.e.blist.get(1024) bs = bs0 - e.e.sideEncode(v, basetype, &bs) + sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, true) }) } else { bs = ext.WriteExt(v) } if bs == nil { - e.EncodeNil() + e.writeNilBytes() goto END } e.encodeExtPreamble(uint8(xtag), len(bs)) - e.e.encWr.writeb(bs) + e.w.writeb(bs) END: if ext == SelfExt { e.e.blist.put(bs) @@ -271,25 +169,35 @@ END: } } -func (e *bincEncDriver) EncodeRawExt(re *RawExt) { +func (e *bincEncDriver[T]) EncodeRawExt(re *RawExt) { e.encodeExtPreamble(uint8(re.Tag), len(re.Data)) - e.e.encWr.writeb(re.Data) + e.w.writeb(re.Data) } -func (e *bincEncDriver) encodeExtPreamble(xtag byte, length int) { +func (e *bincEncDriver[T]) encodeExtPreamble(xtag byte, length int) { e.encLen(bincVdCustomExt<<4, uint64(length)) - e.e.encWr.writen1(xtag) + e.w.writen1(xtag) } -func (e *bincEncDriver) WriteArrayStart(length int) { +func (e *bincEncDriver[T]) WriteArrayStart(length int) { e.encLen(bincVdArray<<4, uint64(length)) } -func (e *bincEncDriver) WriteMapStart(length int) { +func (e *bincEncDriver[T]) WriteMapStart(length int) { e.encLen(bincVdMap<<4, uint64(length)) } -func (e *bincEncDriver) EncodeSymbol(v string) { +func (e *bincEncDriver[T]) WriteArrayEmpty() { + // e.WriteArrayStart(0) = e.encLen(bincVdArray<<4, 0) + e.w.writen1(bincVdArray<<4 | uint8(0+4)) +} + +func (e *bincEncDriver[T]) WriteMapEmpty() { + // e.WriteMapStart(0) = e.encLen(bincVdMap<<4, 0) + e.w.writen1(bincVdMap<<4 | uint8(0+4)) +} + +func (e *bincEncDriver[T]) EncodeSymbol(v string) { //symbols only offer benefit when string length > 1. //This is because strings with length 1 take only 2 bytes to store //(bd with embedded length, and single byte for string val). @@ -300,7 +208,7 @@ func (e *bincEncDriver) EncodeSymbol(v string) { return } else if l == 1 { e.encBytesLen(cUTF8, 1) - e.e.encWr.writen1(v[0]) + e.w.writen1(v[0]) return } if e.m == nil { @@ -309,10 +217,10 @@ func (e *bincEncDriver) EncodeSymbol(v string) { ui, ok := e.m[v] if ok { if ui <= math.MaxUint8 { - e.e.encWr.writen2(bincVdSymbol<<4, byte(ui)) + e.w.writen2(bincVdSymbol<<4, byte(ui)) } else { - e.e.encWr.writen1(bincVdSymbol<<4 | 0x8) - bigen.writeUint16(e.e.w(), ui) + e.w.writen1(bincVdSymbol<<4 | 0x8) + e.w.writen2(bigen.PutUint16(ui)) } } else { e.e.seq++ @@ -329,58 +237,83 @@ func (e *bincEncDriver) EncodeSymbol(v string) { lenprec = 3 } if ui <= math.MaxUint8 { - e.e.encWr.writen2(bincVdSymbol<<4|0x0|0x4|lenprec, byte(ui)) + e.w.writen2(bincVdSymbol<<4|0x4|lenprec, byte(ui)) // bincVdSymbol<<4|0x0|0x4|lenprec } else { - e.e.encWr.writen1(bincVdSymbol<<4 | 0x8 | 0x4 | lenprec) - bigen.writeUint16(e.e.w(), ui) + e.w.writen1(bincVdSymbol<<4 | 0x8 | 0x4 | lenprec) + e.w.writen2(bigen.PutUint16(ui)) } if lenprec == 0 { - e.e.encWr.writen1(byte(l)) + e.w.writen1(byte(l)) } else if lenprec == 1 { - bigen.writeUint16(e.e.w(), uint16(l)) + e.w.writen2(bigen.PutUint16(uint16(l))) } else if lenprec == 2 { - bigen.writeUint32(e.e.w(), uint32(l)) + e.w.writen4(bigen.PutUint32(uint32(l))) } else { - bigen.writeUint64(e.e.w(), uint64(l)) + e.w.writen8(bigen.PutUint64(uint64(l))) } - e.e.encWr.writestr(v) + e.w.writestr(v) } } -func (e *bincEncDriver) EncodeString(v string) { +func (e *bincEncDriver[T]) EncodeString(v string) { if e.h.StringToRaw { e.encLen(bincVdByteArray<<4, uint64(len(v))) if len(v) > 0 { - e.e.encWr.writestr(v) + e.w.writestr(v) } return } e.EncodeStringEnc(cUTF8, v) } -func (e *bincEncDriver) EncodeStringEnc(c charEncoding, v string) { +func (e *bincEncDriver[T]) EncodeStringNoEscape4Json(v string) { e.EncodeString(v) } + +func (e *bincEncDriver[T]) EncodeStringEnc(c charEncoding, v string) { if e.e.c == containerMapKey && c == cUTF8 && (e.h.AsSymbols == 1) { e.EncodeSymbol(v) return } e.encLen(bincVdString<<4, uint64(len(v))) if len(v) > 0 { - e.e.encWr.writestr(v) + e.w.writestr(v) } } -func (e *bincEncDriver) EncodeStringBytesRaw(v []byte) { +func (e *bincEncDriver[T]) EncodeStringBytesRaw(v []byte) { + e.encLen(bincVdByteArray<<4, uint64(len(v))) + if len(v) > 0 { + e.w.writeb(v) + } +} + +func (e *bincEncDriver[T]) EncodeBytes(v []byte) { if v == nil { - e.EncodeNil() + e.writeNilBytes() return } - e.encLen(bincVdByteArray<<4, uint64(len(v))) - if len(v) > 0 { - e.e.encWr.writeb(v) + e.EncodeStringBytesRaw(v) +} + +func (e *bincEncDriver[T]) writeNilOr(v byte) { + if !e.h.NilCollectionToZeroLength { + v = bincBdNil } + e.w.writen1(v) +} + +func (e *bincEncDriver[T]) writeNilArray() { + e.writeNilOr(bincVdArray<<4 | uint8(0+4)) +} + +func (e *bincEncDriver[T]) writeNilMap() { + e.writeNilOr(bincVdMap<<4 | uint8(0+4)) +} + +func (e *bincEncDriver[T]) writeNilBytes() { + e.writeNilOr(bincVdArray<<4 | uint8(0+4)) } -func (e *bincEncDriver) encBytesLen(c charEncoding, length uint64) { +func (e *bincEncDriver[T]) encBytesLen(c charEncoding, length uint64) { // MARKER: we currently only support UTF-8 (string) and RAW (bytearray). // We should consider supporting bincUnicodeOther. @@ -391,74 +324,54 @@ func (e *bincEncDriver) encBytesLen(c charEncoding, length uint64) { } } -func (e *bincEncDriver) encLen(bd byte, l uint64) { +func (e *bincEncDriver[T]) encLen(bd byte, l uint64) { if l < 12 { - e.e.encWr.writen1(bd | uint8(l+4)) + e.w.writen1(bd | uint8(l+4)) } else { e.encLenNumber(bd, l) } } -func (e *bincEncDriver) encLenNumber(bd byte, v uint64) { +func (e *bincEncDriver[T]) encLenNumber(bd byte, v uint64) { if v <= math.MaxUint8 { - e.e.encWr.writen2(bd, byte(v)) + e.w.writen2(bd, byte(v)) } else if v <= math.MaxUint16 { - e.e.encWr.writen1(bd | 0x01) - bigen.writeUint16(e.e.w(), uint16(v)) + e.w.writen1(bd | 0x01) + e.w.writen2(bigen.PutUint16(uint16(v))) } else if v <= math.MaxUint32 { - e.e.encWr.writen1(bd | 0x02) - bigen.writeUint32(e.e.w(), uint32(v)) + e.w.writen1(bd | 0x02) + e.w.writen4(bigen.PutUint32(uint32(v))) } else { - e.e.encWr.writen1(bd | 0x03) - bigen.writeUint64(e.e.w(), uint64(v)) + e.w.writen1(bd | 0x03) + e.w.writen8(bigen.PutUint64(uint64(v))) } } //------------------------------------ -type bincDecState struct { - bdRead bool - bd byte - vd byte - vs byte - - _ bool - // MARKER: consider using binary search here instead of a map (ie bincDecSymbol) - s map[uint16][]byte -} - -func (x bincDecState) captureState() interface{} { return x } -func (x *bincDecState) resetState() { *x = bincDecState{} } -func (x *bincDecState) reset() { x.resetState() } -func (x *bincDecState) restoreState(v interface{}) { *x = v.(bincDecState) } - -type bincDecDriver struct { +type bincDecDriver[T decReader] struct { decDriverNoopContainerReader - decDriverNoopNumberHelper + // decDriverNoopNumberHelper + decInit2er noBuiltInTypes h *BincHandle + d *decoderBase + r T bincDecState - d Decoder -} - -func (d *bincDecDriver) decoder() *Decoder { - return &d.d -} -func (d *bincDecDriver) descBd() string { - return sprintf("%v (%s)", d.bd, bincdescbd(d.bd)) + // bytes bool } -func (d *bincDecDriver) readNextBd() { - d.bd = d.d.decRd.readn1() +func (d *bincDecDriver[T]) readNextBd() { + d.bd = d.r.readn1() d.vd = d.bd >> 4 d.vs = d.bd & 0x0f d.bdRead = true } -func (d *bincDecDriver) advanceNil() (null bool) { +func (d *bincDecDriver[T]) advanceNil() (null bool) { if !d.bdRead { d.readNextBd() } @@ -469,11 +382,11 @@ func (d *bincDecDriver) advanceNil() (null bool) { return } -func (d *bincDecDriver) TryNil() bool { +func (d *bincDecDriver[T]) TryNil() bool { return d.advanceNil() } -func (d *bincDecDriver) ContainerType() (vt valueType) { +func (d *bincDecDriver[T]) ContainerType() (vt valueType) { if !d.bdRead { d.readNextBd() } @@ -492,33 +405,33 @@ func (d *bincDecDriver) ContainerType() (vt valueType) { return valueTypeUnset } -func (d *bincDecDriver) DecodeTime() (t time.Time) { +func (d *bincDecDriver[T]) DecodeTime() (t time.Time) { if d.advanceNil() { return } if d.vd != bincVdTimestamp { - d.d.errorf("cannot decode time - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + halt.errorf("cannot decode time - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) } - t, err := bincDecodeTime(d.d.decRd.readx(uint(d.vs))) + t, err := bincDecodeTime(d.r.readx(uint(d.vs))) halt.onerror(err) d.bdRead = false return } -func (d *bincDecDriver) decFloatPruned(maxlen uint8) { - l := d.d.decRd.readn1() +func (d *bincDecDriver[T]) decFloatPruned(maxlen uint8) { + l := d.r.readn1() if l > maxlen { - d.d.errorf("cannot read float - at most %v bytes used to represent float - received %v bytes", maxlen, l) + halt.errorf("cannot read float - at most %v bytes used to represent float - received %v bytes", maxlen, l) } for i := l; i < maxlen; i++ { d.d.b[i] = 0 } - d.d.decRd.readb(d.d.b[0:l]) + d.r.readb(d.d.b[0:l]) } -func (d *bincDecDriver) decFloatPre32() (b [4]byte) { +func (d *bincDecDriver[T]) decFloatPre32() (b [4]byte) { if d.vs&0x8 == 0 { - b = d.d.decRd.readn4() + b = d.r.readn4() } else { d.decFloatPruned(4) copy(b[:], d.d.b[:]) @@ -526,9 +439,9 @@ func (d *bincDecDriver) decFloatPre32() (b [4]byte) { return } -func (d *bincDecDriver) decFloatPre64() (b [8]byte) { +func (d *bincDecDriver[T]) decFloatPre64() (b [8]byte) { if d.vs&0x8 == 0 { - b = d.d.decRd.readn8() + b = d.r.readn8() } else { d.decFloatPruned(8) copy(b[:], d.d.b[:]) @@ -536,7 +449,7 @@ func (d *bincDecDriver) decFloatPre64() (b [8]byte) { return } -func (d *bincDecDriver) decFloatVal() (f float64) { +func (d *bincDecDriver[T]) decFloatVal() (f float64) { switch d.vs & 0x7 { case bincFlBin32: f = float64(math.Float32frombits(bigen.Uint32(d.decFloatPre32()))) @@ -544,67 +457,68 @@ func (d *bincDecDriver) decFloatVal() (f float64) { f = math.Float64frombits(bigen.Uint64(d.decFloatPre64())) default: // ok = false - d.d.errorf("read float supports only float32/64 - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + halt.errorf("read float supports only float32/64 - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) } return } -func (d *bincDecDriver) decUint() (v uint64) { +func (d *bincDecDriver[T]) decUint() (v uint64) { switch d.vs { case 0: - v = uint64(d.d.decRd.readn1()) + v = uint64(d.r.readn1()) case 1: - v = uint64(bigen.Uint16(d.d.decRd.readn2())) + v = uint64(bigen.Uint16(d.r.readn2())) case 2: - b3 := d.d.decRd.readn3() + b3 := d.r.readn3() var b [4]byte copy(b[1:], b3[:]) v = uint64(bigen.Uint32(b)) case 3: - v = uint64(bigen.Uint32(d.d.decRd.readn4())) + v = uint64(bigen.Uint32(d.r.readn4())) case 4, 5, 6: - var b [8]byte - lim := 7 - d.vs - bs := d.d.b[lim:8] - d.d.decRd.readb(bs) - copy(b[lim:], bs) - v = bigen.Uint64(b) + // lim := 7 - d.vs + // bs := d.d.b[lim:8] + // d.r.readb(bs) + // var b [8]byte + // copy(b[lim:], bs) + // v = bigen.Uint64(b) + bs := d.d.b[:8] + clear(bs) + d.r.readb(bs[(7 - d.vs):]) + v = bigen.Uint64(*(*[8]byte)(bs)) case 7: - v = bigen.Uint64(d.d.decRd.readn8()) + v = bigen.Uint64(d.r.readn8()) default: - d.d.errorf("unsigned integers with greater than 64 bits of precision not supported: d.vs: %v %x", d.vs, d.vs) + halt.errorf("unsigned integers with greater than 64 bits of precision not supported: d.vs: %v %x", d.vs, d.vs) } return } -func (d *bincDecDriver) uintBytes() (bs []byte) { +func (d *bincDecDriver[T]) uintBytes() (bs []byte) { switch d.vs { case 0: bs = d.d.b[:1] - bs[0] = d.d.decRd.readn1() + bs[0] = d.r.readn1() + return case 1: bs = d.d.b[:2] - d.d.decRd.readb(bs) case 2: bs = d.d.b[:3] - d.d.decRd.readb(bs) case 3: bs = d.d.b[:4] - d.d.decRd.readb(bs) case 4, 5, 6: lim := 7 - d.vs bs = d.d.b[lim:8] - d.d.decRd.readb(bs) case 7: bs = d.d.b[:8] - d.d.decRd.readb(bs) default: - d.d.errorf("unsigned integers with greater than 64 bits of precision not supported: d.vs: %v %x", d.vs, d.vs) + halt.errorf("unsigned integers with greater than 64 bits of precision not supported: d.vs: %v %x", d.vs, d.vs) } + d.r.readb(bs) return } -func (d *bincDecDriver) decInteger() (ui uint64, neg, ok bool) { +func (d *bincDecDriver[T]) decInteger() (ui uint64, neg, ok bool) { ok = true vd, vs := d.vd, d.vs if vd == bincVdPosInt { @@ -622,16 +536,16 @@ func (d *bincDecDriver) decInteger() (ui uint64, neg, ok bool) { ui = 1 } else { ok = false - // d.d.errorf("integer decode has invalid special value %x-%x/%s", d.vd, d.vs, bincdesc(d.vd, d.vs)) + // halt.errorf("integer decode has invalid special value %x-%x/%s", d.vd, d.vs, bincdesc(d.vd, d.vs)) } } else { ok = false - // d.d.errorf("integer can only be decoded from int/uint. d.bd: 0x%x, d.vd: 0x%x", d.bd, d.vd) + // halt.errorf("integer can only be decoded from int/uint. d.bd: 0x%x, d.vd: 0x%x", d.bd, d.vd) } return } -func (d *bincDecDriver) decFloat() (f float64, ok bool) { +func (d *bincDecDriver[T]) decFloat() (f float64, ok bool) { ok = true vd, vs := d.vd, d.vs if vd == bincVdSpecial { @@ -645,7 +559,7 @@ func (d *bincDecDriver) decFloat() (f float64, ok bool) { f = math.Inf(-1) } else { ok = false - // d.d.errorf("float - invalid special value %x-%x/%s", d.vd, d.vs, bincdesc(d.vd, d.vs)) + // halt.errorf("float - invalid special value %x-%x/%s", d.vd, d.vs, bincdesc(d.vd, d.vs)) } } else if vd == bincVdFloat { f = d.decFloatVal() @@ -655,34 +569,36 @@ func (d *bincDecDriver) decFloat() (f float64, ok bool) { return } -func (d *bincDecDriver) DecodeInt64() (i int64) { +func (d *bincDecDriver[T]) DecodeInt64() (i int64) { if d.advanceNil() { return } - i = decNegintPosintFloatNumberHelper{&d.d}.int64(d.decInteger()) + v1, v2, v3 := d.decInteger() + i = decNegintPosintFloatNumberHelper{d}.int64(v1, v2, v3, false) d.bdRead = false return } -func (d *bincDecDriver) DecodeUint64() (ui uint64) { +func (d *bincDecDriver[T]) DecodeUint64() (ui uint64) { if d.advanceNil() { return } - ui = decNegintPosintFloatNumberHelper{&d.d}.uint64(d.decInteger()) + ui = decNegintPosintFloatNumberHelper{d}.uint64(d.decInteger()) d.bdRead = false return } -func (d *bincDecDriver) DecodeFloat64() (f float64) { +func (d *bincDecDriver[T]) DecodeFloat64() (f float64) { if d.advanceNil() { return } - f = decNegintPosintFloatNumberHelper{&d.d}.float64(d.decFloat()) + v1, v2 := d.decFloat() + f = decNegintPosintFloatNumberHelper{d}.float64(v1, v2, false) d.bdRead = false return } -func (d *bincDecDriver) DecodeBool() (b bool) { +func (d *bincDecDriver[T]) DecodeBool() (b bool) { if d.advanceNil() { return } @@ -691,201 +607,193 @@ func (d *bincDecDriver) DecodeBool() (b bool) { } else if d.bd == (bincVdSpecial | bincSpTrue) { b = true } else { - d.d.errorf("bool - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + halt.errorf("bool - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) } d.bdRead = false return } -func (d *bincDecDriver) ReadMapStart() (length int) { +func (d *bincDecDriver[T]) ReadMapStart() (length int) { if d.advanceNil() { return containerLenNil } if d.vd != bincVdMap { - d.d.errorf("map - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + halt.errorf("map - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) } length = d.decLen() d.bdRead = false return } -func (d *bincDecDriver) ReadArrayStart() (length int) { +func (d *bincDecDriver[T]) ReadArrayStart() (length int) { if d.advanceNil() { return containerLenNil } if d.vd != bincVdArray { - d.d.errorf("array - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + halt.errorf("array - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) } length = d.decLen() d.bdRead = false return } -func (d *bincDecDriver) decLen() int { +func (d *bincDecDriver[T]) decLen() int { if d.vs > 3 { return int(d.vs - 4) } return int(d.decLenNumber()) } -func (d *bincDecDriver) decLenNumber() (v uint64) { +func (d *bincDecDriver[T]) decLenNumber() (v uint64) { if x := d.vs; x == 0 { - v = uint64(d.d.decRd.readn1()) + v = uint64(d.r.readn1()) } else if x == 1 { - v = uint64(bigen.Uint16(d.d.decRd.readn2())) + v = uint64(bigen.Uint16(d.r.readn2())) } else if x == 2 { - v = uint64(bigen.Uint32(d.d.decRd.readn4())) + v = uint64(bigen.Uint32(d.r.readn4())) } else { - v = bigen.Uint64(d.d.decRd.readn8()) + v = bigen.Uint64(d.r.readn8()) } return } -// func (d *bincDecDriver) decStringBytes(bs []byte, zerocopy bool) (bs2 []byte) { -func (d *bincDecDriver) DecodeStringAsBytes() (bs2 []byte) { - d.d.decByteState = decByteStateNone +// func (d *bincDecDriver[T]) decStringBytes(bs []byte, zerocopy bool) (bs2 []byte) { +func (d *bincDecDriver[T]) DecodeStringAsBytes() (bs []byte, state dBytesAttachState) { if d.advanceNil() { return } + var cond bool var slen = -1 switch d.vd { case bincVdString, bincVdByteArray: slen = d.decLen() - if d.d.bytes { - d.d.decByteState = decByteStateZerocopy - bs2 = d.d.decRd.rb.readx(uint(slen)) - } else { - d.d.decByteState = decByteStateReuseBuf - bs2 = decByteSlice(d.d.r(), slen, d.d.h.MaxInitLen, d.d.b[:]) - } + bs, cond = d.r.readxb(uint(slen)) + state = d.d.attachState(cond) case bincVdSymbol: // zerocopy doesn't apply for symbols, // as the values must be stored in a table for later use. var symbol uint16 vs := d.vs if vs&0x8 == 0 { - symbol = uint16(d.d.decRd.readn1()) + symbol = uint16(d.r.readn1()) } else { - symbol = uint16(bigen.Uint16(d.d.decRd.readn2())) + symbol = uint16(bigen.Uint16(d.r.readn2())) } if d.s == nil { d.s = make(map[uint16][]byte, 16) } if vs&0x4 == 0 { - bs2 = d.s[symbol] + bs = d.s[symbol] } else { switch vs & 0x3 { case 0: - slen = int(d.d.decRd.readn1()) + slen = int(d.r.readn1()) case 1: - slen = int(bigen.Uint16(d.d.decRd.readn2())) + slen = int(bigen.Uint16(d.r.readn2())) case 2: - slen = int(bigen.Uint32(d.d.decRd.readn4())) + slen = int(bigen.Uint32(d.r.readn4())) case 3: - slen = int(bigen.Uint64(d.d.decRd.readn8())) + slen = int(bigen.Uint64(d.r.readn8())) } // As we are using symbols, do not store any part of // the parameter bs in the map, as it might be a shared buffer. - bs2 = decByteSlice(d.d.r(), slen, d.d.h.MaxInitLen, nil) - d.s[symbol] = bs2 + bs, cond = d.r.readxb(uint(slen)) + bs = d.d.detach2Bytes(bs, d.d.attachState(cond)) + d.s[symbol] = bs } + state = dBytesDetach default: - d.d.errorf("string/bytes - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + halt.errorf("string/bytes - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) } - if d.h.ValidateUnicode && !utf8.Valid(bs2) { - d.d.errorf("DecodeStringAsBytes: invalid UTF-8: %s", bs2) + if d.h.ValidateUnicode && !utf8.Valid(bs) { + halt.errorf("DecodeStringAsBytes: invalid UTF-8: %s", bs) } d.bdRead = false return } -func (d *bincDecDriver) DecodeBytes(bs []byte) (bsOut []byte) { - d.d.decByteState = decByteStateNone +func (d *bincDecDriver[T]) DecodeBytes() (bs []byte, state dBytesAttachState) { if d.advanceNil() { return } + var cond bool if d.vd == bincVdArray { - if bs == nil { - bs = d.d.b[:] - d.d.decByteState = decByteStateReuseBuf - } slen := d.ReadArrayStart() - var changed bool - if bs, changed = usableByteSlice(bs, slen); changed { - d.d.decByteState = decByteStateNone - } + bs, cond = usableByteSlice(d.d.buf, slen) for i := 0; i < slen; i++ { bs[i] = uint8(chkOvf.UintV(d.DecodeUint64(), 8)) } for i := len(bs); i < slen; i++ { bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) } - return bs + if cond { + d.d.buf = bs + } + state = dBytesAttachBuffer + return } - var clen int - if d.vd == bincVdString || d.vd == bincVdByteArray { - clen = d.decLen() - } else { - d.d.errorf("bytes - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + if !(d.vd == bincVdString || d.vd == bincVdByteArray) { + halt.errorf("bytes - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) } + clen := d.decLen() d.bdRead = false - if d.d.zerocopy() { - d.d.decByteState = decByteStateZerocopy - return d.d.decRd.rb.readx(uint(clen)) - } - if bs == nil { - bs = d.d.b[:] - d.d.decByteState = decByteStateReuseBuf - } - return decByteSlice(d.d.r(), clen, d.d.h.MaxInitLen, bs) + bs, cond = d.r.readxb(uint(clen)) + state = d.d.attachState(cond) + return } -func (d *bincDecDriver) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { - if xtag > 0xff { - d.d.errorf("ext: tag must be <= 0xff; got: %v", xtag) - } - if d.advanceNil() { +func (d *bincDecDriver[T]) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + xbs, _, _, ok := d.decodeExtV(ext != nil, xtag) + if !ok { return } - xbs, realxtag1, zerocopy := d.decodeExtV(ext != nil, uint8(xtag)) - realxtag := uint64(realxtag1) - if ext == nil { - re := rv.(*RawExt) - re.Tag = realxtag - re.setData(xbs, zerocopy) - } else if ext == SelfExt { - d.d.sideDecode(rv, basetype, xbs) + if ext == SelfExt { + sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, true) }) } else { ext.ReadExt(rv, xbs) } } -func (d *bincDecDriver) decodeExtV(verifyTag bool, tag byte) (xbs []byte, xtag byte, zerocopy bool) { +func (d *bincDecDriver[T]) DecodeRawExt(re *RawExt) { + xbs, realxtag, state, ok := d.decodeExtV(false, 0) + if !ok { + return + } + re.Tag = uint64(realxtag) + re.setData(xbs, state >= dBytesAttachViewZerocopy) +} + +func (d *bincDecDriver[T]) decodeExtV(verifyTag bool, xtagIn uint64) (xbs []byte, xtag byte, bstate dBytesAttachState, ok bool) { + if xtagIn > 0xff { + halt.errorf("ext: tag must be <= 0xff; got: %v", xtagIn) + } + if d.advanceNil() { + return + } + tag := uint8(xtagIn) if d.vd == bincVdCustomExt { l := d.decLen() - xtag = d.d.decRd.readn1() + xtag = d.r.readn1() if verifyTag && xtag != tag { - d.d.errorf("wrong extension tag - got %b, expecting: %v", xtag, tag) - } - if d.d.bytes { - xbs = d.d.decRd.rb.readx(uint(l)) - zerocopy = true - } else { - xbs = decByteSlice(d.d.r(), l, d.d.h.MaxInitLen, d.d.b[:]) + halt.errorf("wrong extension tag - got %b, expecting: %v", xtag, tag) } + xbs, ok = d.r.readxb(uint(l)) + bstate = d.d.attachState(ok) + // zerocopy = d.d.bytes } else if d.vd == bincVdByteArray { - xbs = d.DecodeBytes(nil) + xbs, bstate = d.DecodeBytes() } else { - d.d.errorf("ext expects extensions or byte array - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + halt.errorf("ext expects extensions or byte array - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) } d.bdRead = false + ok = true return } -func (d *bincDecDriver) DecodeNaked() { +func (d *bincDecDriver[T]) DecodeNaked() { if !d.bdRead { d.readNextBd() } @@ -923,7 +831,7 @@ func (d *bincDecDriver) DecodeNaked() { n.v = valueTypeInt n.i = int64(-1) // int8(-1) default: - d.d.errorf("cannot infer value - unrecognized special value %x-%x/%s", d.vd, d.vs, bincdesc(d.vd, d.vs)) + halt.errorf("cannot infer value - unrecognized special value %x-%x/%s", d.vd, d.vs, bincdesc(d.vd, d.vs)) } case bincVdSmallInt: n.v = valueTypeUint @@ -939,26 +847,22 @@ func (d *bincDecDriver) DecodeNaked() { n.f = d.decFloatVal() case bincVdString: n.v = valueTypeString - n.s = d.d.stringZC(d.DecodeStringAsBytes()) + n.s = d.d.detach2Str(d.DecodeStringAsBytes()) case bincVdByteArray: - d.d.fauxUnionReadRawBytes(false) + d.d.fauxUnionReadRawBytes(d, false, d.h.RawToString) //, d.h.ZeroCopy) case bincVdSymbol: n.v = valueTypeSymbol - n.s = d.d.stringZC(d.DecodeStringAsBytes()) + n.s = d.d.detach2Str(d.DecodeStringAsBytes()) case bincVdTimestamp: n.v = valueTypeTime - tt, err := bincDecodeTime(d.d.decRd.readx(uint(d.vs))) + tt, err := bincDecodeTime(d.r.readx(uint(d.vs))) halt.onerror(err) n.t = tt case bincVdCustomExt: n.v = valueTypeExt l := d.decLen() - n.u = uint64(d.d.decRd.readn1()) - if d.d.bytes { - n.l = d.d.decRd.rb.readx(uint(l)) - } else { - n.l = decByteSlice(d.d.r(), l, d.d.h.MaxInitLen, d.d.b[:]) - } + n.u = uint64(d.r.readn1()) + n.l = d.r.readx(uint(l)) case bincVdArray: n.v = valueTypeArray decodeFurther = true @@ -966,7 +870,7 @@ func (d *bincDecDriver) DecodeNaked() { n.v = valueTypeMap decodeFurther = true default: - d.d.errorf("cannot infer value - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + halt.errorf("cannot infer value - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) } if !decodeFurther { @@ -978,49 +882,39 @@ func (d *bincDecDriver) DecodeNaked() { } } -func (d *bincDecDriver) nextValueBytes(v0 []byte) (v []byte) { +func (d *bincDecDriver[T]) nextValueBytes() (v []byte) { if !d.bdRead { d.readNextBd() } - v = v0 - var h = decNextValueBytesHelper{d: &d.d} - var cursor = d.d.rb.c - 1 - h.append1(&v, d.bd) - v = d.nextValueBytesBdReadR(v) + d.r.startRecording() + d.nextValueBytesBdReadR() + v = d.r.stopRecording() d.bdRead = false - h.bytesRdV(&v, cursor) return } -func (d *bincDecDriver) nextValueBytesR(v0 []byte) (v []byte) { - d.readNextBd() - v = v0 - var h = decNextValueBytesHelper{d: &d.d} - h.append1(&v, d.bd) - return d.nextValueBytesBdReadR(v) -} - -func (d *bincDecDriver) nextValueBytesBdReadR(v0 []byte) (v []byte) { - v = v0 - var h = decNextValueBytesHelper{d: &d.d} +// func (d *bincDecDriver[T]) nextValueBytesR(v0 []byte) (v []byte) { +// d.readNextBd() +// v = v0 +// var h decNextValueBytesHelper +// h.append1(&v, d.bytes, d.bd) +// return d.nextValueBytesBdReadR(v) +// } +func (d *bincDecDriver[T]) nextValueBytesBdReadR() { fnLen := func(vs byte) uint { switch vs { case 0: - x := d.d.decRd.readn1() - h.append1(&v, x) + x := d.r.readn1() return uint(x) case 1: - x := d.d.decRd.readn2() - h.appendN(&v, x[:]...) + x := d.r.readn2() return uint(bigen.Uint16(x)) case 2: - x := d.d.decRd.readn4() - h.appendN(&v, x[:]...) + x := d.r.readn4() return uint(bigen.Uint32(x)) case 3: - x := d.d.decRd.readn8() - h.appendN(&v, x[:]...) + x := d.r.readn8() return uint(bigen.Uint64(x)) default: return uint(vs - 4) @@ -1035,23 +929,20 @@ func (d *bincDecDriver) nextValueBytesBdReadR(v0 []byte) (v []byte) { case bincSpNil, bincSpFalse, bincSpTrue, bincSpNan, bincSpPosInf: // pass case bincSpNegInf, bincSpZeroFloat, bincSpZero, bincSpNegOne: // pass default: - d.d.errorf("cannot infer value - unrecognized special value %x-%x/%s", d.vd, d.vs, bincdesc(d.vd, d.vs)) + halt.errorf("cannot infer value - unrecognized special value %x-%x/%s", d.vd, d.vs, bincdesc(d.vd, d.vs)) } case bincVdSmallInt: // pass case bincVdPosInt, bincVdNegInt: - bs := d.uintBytes() - h.appendN(&v, bs...) + d.uintBytes() case bincVdFloat: fn := func(xlen byte) { if d.vs&0x8 != 0 { - xlen = d.d.decRd.readn1() - h.append1(&v, xlen) + xlen = d.r.readn1() if xlen > 8 { - d.d.errorf("cannot read float - at most 8 bytes used to represent float - received %v bytes", xlen) + halt.errorf("cannot read float - at most 8 bytes used to represent float - received %v bytes", xlen) } } - d.d.decRd.readb(d.d.b[:xlen]) - h.appendN(&v, d.d.b[:xlen]...) + d.r.readb(d.d.b[:xlen]) } switch d.vs & 0x7 { case bincFlBin32: @@ -1059,261 +950,117 @@ func (d *bincDecDriver) nextValueBytesBdReadR(v0 []byte) (v []byte) { case bincFlBin64: fn(8) default: - d.d.errorf("read float supports only float32/64 - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + halt.errorf("read float supports only float32/64 - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) } case bincVdString, bincVdByteArray: clen = fnLen(d.vs) - h.appendN(&v, d.d.decRd.readx(clen)...) + d.r.skip(clen) case bincVdSymbol: if d.vs&0x8 == 0 { - h.append1(&v, d.d.decRd.readn1()) + d.r.readn1() } else { - h.appendN(&v, d.d.decRd.rb.readx(2)...) + d.r.skip(2) } if d.vs&0x4 != 0 { clen = fnLen(d.vs & 0x3) - h.appendN(&v, d.d.decRd.readx(clen)...) + d.r.skip(clen) } case bincVdTimestamp: - h.appendN(&v, d.d.decRd.readx(uint(d.vs))...) + d.r.skip(uint(d.vs)) case bincVdCustomExt: clen = fnLen(d.vs) - h.append1(&v, d.d.decRd.readn1()) // tag - h.appendN(&v, d.d.decRd.readx(clen)...) + d.r.readn1() // tag + d.r.skip(clen) case bincVdArray: clen = fnLen(d.vs) for i := uint(0); i < clen; i++ { - v = d.nextValueBytesR(v) + d.readNextBd() + d.nextValueBytesBdReadR() } case bincVdMap: clen = fnLen(d.vs) for i := uint(0); i < clen; i++ { - v = d.nextValueBytesR(v) - v = d.nextValueBytesR(v) + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() } default: - d.d.errorf("cannot infer value - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + halt.errorf("cannot infer value - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) } return } -//------------------------------------ - -// BincHandle is a Handle for the Binc Schema-Free Encoding Format -// defined at https://github.com/ugorji/binc . -// -// BincHandle currently supports all Binc features with the following EXCEPTIONS: -// - only integers up to 64 bits of precision are supported. -// big integers are unsupported. -// - Only IEEE 754 binary32 and binary64 floats are supported (ie Go float32 and float64 types). -// extended precision and decimal IEEE 754 floats are unsupported. -// - Only UTF-8 strings supported. -// Unicode_Other Binc types (UTF16, UTF32) are currently unsupported. -// -// Note that these EXCEPTIONS are temporary and full support is possible and may happen soon. -type BincHandle struct { - BasicHandle - binaryEncodingType - // noElemSeparators - - // AsSymbols defines what should be encoded as symbols. - // - // Encoding as symbols can reduce the encoded size significantly. - // - // However, during decoding, each string to be encoded as a symbol must - // be checked to see if it has been seen before. Consequently, encoding time - // will increase if using symbols, because string comparisons has a clear cost. - // - // Values: - // - 0: default: library uses best judgement - // - 1: use symbols - // - 2: do not use symbols - AsSymbols uint8 - - // AsSymbols: may later on introduce more options ... - // - m: map keys - // - s: struct fields - // - n: none - // - a: all: same as m, s, ... - - // _ [7]uint64 // padding (cache-aligned) -} - -// Name returns the name of the handle: binc -func (h *BincHandle) Name() string { return "binc" } - -func (h *BincHandle) desc(bd byte) string { return bincdesc(bd>>4, bd&0x0f) } - -func (h *BincHandle) newEncDriver() encDriver { - var e = &bincEncDriver{h: h} - e.e.e = e - e.e.init(h) - e.reset() - return e -} - -func (h *BincHandle) newDecDriver() decDriver { - d := &bincDecDriver{h: h} - d.d.d = d - d.d.init(h) - d.reset() - return d -} - -// var timeDigits = [...]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} - -// EncodeTime encodes a time.Time as a []byte, including -// information on the instant in time and UTC offset. -// -// Format Description -// -// A timestamp is composed of 3 components: -// -// - secs: signed integer representing seconds since unix epoch -// - nsces: unsigned integer representing fractional seconds as a -// nanosecond offset within secs, in the range 0 <= nsecs < 1e9 -// - tz: signed integer representing timezone offset in minutes east of UTC, -// and a dst (daylight savings time) flag -// -// When encoding a timestamp, the first byte is the descriptor, which -// defines which components are encoded and how many bytes are used to -// encode secs and nsecs components. *If secs/nsecs is 0 or tz is UTC, it -// is not encoded in the byte array explicitly*. +// ---- // -// Descriptor 8 bits are of the form `A B C DDD EE`: -// A: Is secs component encoded? 1 = true -// B: Is nsecs component encoded? 1 = true -// C: Is tz component encoded? 1 = true -// DDD: Number of extra bytes for secs (range 0-7). -// If A = 1, secs encoded in DDD+1 bytes. -// If A = 0, secs is not encoded, and is assumed to be 0. -// If A = 1, then we need at least 1 byte to encode secs. -// DDD says the number of extra bytes beyond that 1. -// E.g. if DDD=0, then secs is represented in 1 byte. -// if DDD=2, then secs is represented in 3 bytes. -// EE: Number of extra bytes for nsecs (range 0-3). -// If B = 1, nsecs encoded in EE+1 bytes (similar to secs/DDD above) +// The following below are similar across all format files (except for the format name). // -// Following the descriptor bytes, subsequent bytes are: -// -// secs component encoded in `DDD + 1` bytes (if A == 1) -// nsecs component encoded in `EE + 1` bytes (if B == 1) -// tz component encoded in 2 bytes (if C == 1) -// -// secs and nsecs components are integers encoded in a BigEndian -// 2-complement encoding format. -// -// tz component is encoded as 2 bytes (16 bits). Most significant bit 15 to -// Least significant bit 0 are described below: -// -// Timezone offset has a range of -12:00 to +14:00 (ie -720 to +840 minutes). -// Bit 15 = have\_dst: set to 1 if we set the dst flag. -// Bit 14 = dst\_on: set to 1 if dst is in effect at the time, or 0 if not. -// Bits 13..0 = timezone offset in minutes. It is a signed integer in Big Endian format. -func bincEncodeTime(t time.Time) []byte { - // t := rv2i(rv).(time.Time) - tsecs, tnsecs := t.Unix(), t.Nanosecond() - var ( - bd byte - bs [16]byte - i int = 1 - ) - l := t.Location() - if l == time.UTC { - l = nil - } - if tsecs != 0 { - bd = bd | 0x80 - btmp := bigen.PutUint64(uint64(tsecs)) - f := pruneSignExt(btmp[:], tsecs >= 0) - bd = bd | (byte(7-f) << 2) - copy(bs[i:], btmp[f:]) - i = i + (8 - f) - } - if tnsecs != 0 { - bd = bd | 0x40 - btmp := bigen.PutUint32(uint32(tnsecs)) - f := pruneSignExt(btmp[:4], true) - bd = bd | byte(3-f) - copy(bs[i:], btmp[f:4]) - i = i + (4 - f) - } - if l != nil { - bd = bd | 0x20 - // Note that Go Libs do not give access to dst flag. - _, zoneOffset := t.Zone() - // zoneName, zoneOffset := t.Zone() - zoneOffset /= 60 - z := uint16(zoneOffset) - btmp := bigen.PutUint16(z) - // clear dst flags - bs[i] = btmp[0] & 0x3f - bs[i+1] = btmp[1] - i = i + 2 - } - bs[0] = bd - return bs[0:i] -} - -// bincDecodeTime decodes a []byte into a time.Time. -func bincDecodeTime(bs []byte) (tt time.Time, err error) { - bd := bs[0] - var ( - tsec int64 - tnsec uint32 - tz uint16 - i byte = 1 - i2 byte - n byte - ) - if bd&(1<<7) != 0 { - var btmp [8]byte - n = ((bd >> 2) & 0x7) + 1 - i2 = i + n - copy(btmp[8-n:], bs[i:i2]) - // if first bit of bs[i] is set, then fill btmp[0..8-n] with 0xff (ie sign extend it) - if bs[i]&(1<<7) != 0 { - copy(btmp[0:8-n], bsAll0xff) - } - i = i2 - tsec = int64(bigen.Uint64(btmp)) - } - if bd&(1<<6) != 0 { - var btmp [4]byte - n = (bd & 0x3) + 1 - i2 = i + n - copy(btmp[4-n:], bs[i:i2]) - i = i2 - tnsec = bigen.Uint32(btmp) - } - if bd&(1<<5) == 0 { - tt = time.Unix(tsec, int64(tnsec)).UTC() - return +// We keep them together here, so that we can easily copy and compare. + +// ---- + +func (d *bincEncDriver[T]) init(hh Handle, shared *encoderBase, enc encoderI) (fp interface{}) { + callMake(&d.w) + d.h = hh.(*BincHandle) + d.e = shared + if shared.bytes { + fp = bincFpEncBytes + } else { + fp = bincFpEncIO } - // In stdlib time.Parse, when a date is parsed without a zone name, it uses "" as zone name. - // However, we need name here, so it can be shown when time is printf.d. - // Zone name is in form: UTC-08:00. - // Note that Go Libs do not give access to dst flag, so we ignore dst bits - - tz = bigen.Uint16([2]byte{bs[i], bs[i+1]}) - // sign extend sign bit into top 2 MSB (which were dst bits): - if tz&(1<<13) == 0 { // positive - tz = tz & 0x3fff //clear 2 MSBs: dst bits - } else { // negative - tz = tz | 0xc000 //set 2 MSBs: dst bits - } - tzint := int16(tz) - if tzint == 0 { - tt = time.Unix(tsec, int64(tnsec)).UTC() + // d.w.init() + d.init2(enc) + return +} + +func (e *bincEncDriver[T]) writeBytesAsis(b []byte) { e.w.writeb(b) } + +// func (e *bincEncDriver[T]) writeStringAsisDblQuoted(v string) { e.w.writeqstr(v) } + +func (e *bincEncDriver[T]) writerEnd() { e.w.end() } + +func (e *bincEncDriver[T]) resetOutBytes(out *[]byte) { + e.w.resetBytes(*out, out) +} + +func (e *bincEncDriver[T]) resetOutIO(out io.Writer) { + e.w.resetIO(out, e.h.WriterBufferSize, &e.e.blist) +} + +// ---- + +func (d *bincDecDriver[T]) init(hh Handle, shared *decoderBase, dec decoderI) (fp interface{}) { + callMake(&d.r) + d.h = hh.(*BincHandle) + d.d = shared + if shared.bytes { + fp = bincFpDecBytes } else { - // For Go Time, do not use a descriptive timezone. - // It's unnecessary, and makes it harder to do a reflect.DeepEqual. - // The Offset already tells what the offset should be, if not on UTC and unknown zone name. - // var zoneName = timeLocUTCName(tzint) - tt = time.Unix(tsec, int64(tnsec)).In(time.FixedZone("", int(tzint)*60)) + fp = bincFpDecIO } + // d.r.init() + d.init2(dec) return } -var _ decDriver = (*bincDecDriver)(nil) -var _ encDriver = (*bincEncDriver)(nil) +func (d *bincDecDriver[T]) NumBytesRead() int { + return int(d.r.numread()) +} + +func (d *bincDecDriver[T]) resetInBytes(in []byte) { + d.r.resetBytes(in) +} + +func (d *bincDecDriver[T]) resetInIO(r io.Reader) { + d.r.resetIO(r, d.h.ReaderBufferSize, d.h.MaxInitLen, &d.d.blist) +} + +// ---- (custom stanza) + +func (d *bincDecDriver[T]) descBd() string { + return sprintf("%v (%s)", d.bd, bincdescbd(d.bd)) +} + +func (d *bincDecDriver[T]) DecodeFloat32() (f float32) { + return float32(chkOvf.Float32V(d.DecodeFloat64())) +} diff --git a/vendor/github.com/ugorji/go/codec/binc.mono.generated.go b/vendor/github.com/ugorji/go/codec/binc.mono.generated.go new file mode 100644 index 0000000..78a7602 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/binc.mono.generated.go @@ -0,0 +1,8158 @@ +//go:build !notmono && !codec.notmono + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "encoding" + + "io" + "math" + "reflect" + "slices" + "sort" + "strconv" + "sync" + "time" + "unicode/utf8" +) + +type helperEncDriverBincBytes struct{} +type encFnBincBytes struct { + i encFnInfo + fe func(*encoderBincBytes, *encFnInfo, reflect.Value) +} +type encRtidFnBincBytes struct { + rtid uintptr + fn *encFnBincBytes +} +type encoderBincBytes struct { + dh helperEncDriverBincBytes + fp *fastpathEsBincBytes + e bincEncDriverBytes + encoderBase +} +type helperDecDriverBincBytes struct{} +type decFnBincBytes struct { + i decFnInfo + fd func(*decoderBincBytes, *decFnInfo, reflect.Value) +} +type decRtidFnBincBytes struct { + rtid uintptr + fn *decFnBincBytes +} +type decoderBincBytes struct { + dh helperDecDriverBincBytes + fp *fastpathDsBincBytes + d bincDecDriverBytes + decoderBase +} +type bincEncDriverBytes struct { + noBuiltInTypes + encDriverNoopContainerWriter + encDriverContainerNoTrackerT + encInit2er + + h *BincHandle + e *encoderBase + w bytesEncAppender + bincEncState +} +type bincDecDriverBytes struct { + decDriverNoopContainerReader + + decInit2er + noBuiltInTypes + + h *BincHandle + d *decoderBase + r bytesDecReader + + bincDecState +} + +func (e *encoderBincBytes) rawExt(_ *encFnInfo, rv reflect.Value) { + if re := rv2i(rv).(*RawExt); re == nil { + e.e.EncodeNil() + } else { + e.e.EncodeRawExt(re) + } +} + +func (e *encoderBincBytes) ext(f *encFnInfo, rv reflect.Value) { + e.e.EncodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (e *encoderBincBytes) selferMarshal(_ *encFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecEncodeSelf(&Encoder{e}) +} + +func (e *encoderBincBytes) binaryMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.BinaryMarshaler).MarshalBinary() + e.marshalRaw(bs, fnerr) +} + +func (e *encoderBincBytes) textMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.TextMarshaler).MarshalText() + e.marshalUtf8(bs, fnerr) +} + +func (e *encoderBincBytes) jsonMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(jsonMarshaler).MarshalJSON() + e.marshalAsis(bs, fnerr) +} + +func (e *encoderBincBytes) raw(_ *encFnInfo, rv reflect.Value) { + e.rawBytes(rv2i(rv).(Raw)) +} + +func (e *encoderBincBytes) encodeComplex64(v complex64) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat32(real(v)) +} + +func (e *encoderBincBytes) encodeComplex128(v complex128) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat64(real(v)) +} + +func (e *encoderBincBytes) kBool(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeBool(rvGetBool(rv)) +} + +func (e *encoderBincBytes) kTime(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeTime(rvGetTime(rv)) +} + +func (e *encoderBincBytes) kString(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeString(rvGetString(rv)) +} + +func (e *encoderBincBytes) kFloat32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat32(rvGetFloat32(rv)) +} + +func (e *encoderBincBytes) kFloat64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat64(rvGetFloat64(rv)) +} + +func (e *encoderBincBytes) kComplex64(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex64(rvGetComplex64(rv)) +} + +func (e *encoderBincBytes) kComplex128(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex128(rvGetComplex128(rv)) +} + +func (e *encoderBincBytes) kInt(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt(rv))) +} + +func (e *encoderBincBytes) kInt8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt8(rv))) +} + +func (e *encoderBincBytes) kInt16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt16(rv))) +} + +func (e *encoderBincBytes) kInt32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt32(rv))) +} + +func (e *encoderBincBytes) kInt64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt64(rv))) +} + +func (e *encoderBincBytes) kUint(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint(rv))) +} + +func (e *encoderBincBytes) kUint8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint8(rv))) +} + +func (e *encoderBincBytes) kUint16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint16(rv))) +} + +func (e *encoderBincBytes) kUint32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint32(rv))) +} + +func (e *encoderBincBytes) kUint64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint64(rv))) +} + +func (e *encoderBincBytes) kUintptr(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUintptr(rv))) +} + +func (e *encoderBincBytes) kSeqFn(rt reflect.Type) (fn *encFnBincBytes) { + + if rt = baseRT(rt); rt.Kind() != reflect.Interface { + fn = e.fn(rt) + } + return +} + +func (e *encoderBincBytes) kArrayWMbs(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(l) + e.mapStart(l >> 1) + + var fn *encFnBincBytes + builtin := ti.tielem.flagEncBuiltin + if !builtin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerMapKey + e.e.WriteMapElemKey(true) + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(false) + } else { + e.mapElemValue() + } + } + e.c = 0 + e.e.WriteMapEnd() + +} + +func (e *encoderBincBytes) kArrayW(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l <= 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(l) + + var fn *encFnBincBytes + if !ti.tielem.flagEncBuiltin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerArrayElem + e.e.WriteArrayElem(true) + builtin := ti.tielem.flagEncBuiltin + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + e.c = containerArrayElem + e.e.WriteArrayElem(false) + } + + e.c = 0 + e.e.WriteArrayEnd() +} + +func (e *encoderBincBytes) kChan(f *encFnInfo, rv reflect.Value) { + if f.ti.chandir&uint8(reflect.RecvDir) == 0 { + halt.errorStr("send-only channel cannot be encoded") + } + if !f.ti.mbs && uint8TypId == rt2id(f.ti.elem) { + e.kSliceBytesChan(rv) + return + } + rtslice := reflect.SliceOf(f.ti.elem) + rv = chanToSlice(rv, rtslice, e.h.ChanRecvTimeout) + ti := e.h.getTypeInfo(rt2id(rtslice), rtslice) + if f.ti.mbs { + e.kArrayWMbs(rv, ti, true) + } else { + e.kArrayW(rv, ti, true) + } +} + +func (e *encoderBincBytes) kSlice(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, true) + } else if f.ti.rtid == uint8SliceTypId || uint8TypId == rt2id(f.ti.elem) { + + e.e.EncodeBytes(rvGetBytes(rv)) + } else { + e.kArrayW(rv, f.ti, true) + } +} + +func (e *encoderBincBytes) kArray(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, false) + } else if handleBytesWithinKArray && uint8TypId == rt2id(f.ti.elem) { + e.e.EncodeStringBytesRaw(rvGetArrayBytes(rv, nil)) + } else { + e.kArrayW(rv, f.ti, false) + } +} + +func (e *encoderBincBytes) kSliceBytesChan(rv reflect.Value) { + + bs0 := e.blist.peek(32, true) + bs := bs0 + + irv := rv2i(rv) + ch, ok := irv.(<-chan byte) + if !ok { + ch = irv.(chan byte) + } + +L1: + switch timeout := e.h.ChanRecvTimeout; { + case timeout == 0: + for { + select { + case b := <-ch: + bs = append(bs, b) + default: + break L1 + } + } + case timeout > 0: + tt := time.NewTimer(timeout) + for { + select { + case b := <-ch: + bs = append(bs, b) + case <-tt.C: + + break L1 + } + } + default: + for b := range ch { + bs = append(bs, b) + } + } + + e.e.EncodeBytes(bs) + e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.blist.put(bs0) + } +} + +func (e *encoderBincBytes) kStructFieldKey(keyType valueType, encName string) { + + if keyType == valueTypeString { + e.e.EncodeString(encName) + } else if keyType == valueTypeInt { + e.e.EncodeInt(must.Int(strconv.ParseInt(encName, 10, 64))) + } else if keyType == valueTypeUint { + e.e.EncodeUint(must.Uint(strconv.ParseUint(encName, 10, 64))) + } else if keyType == valueTypeFloat { + e.e.EncodeFloat64(must.Float(strconv.ParseFloat(encName, 64))) + } else { + halt.errorStr2("invalid struct key type: ", keyType.String()) + } + +} + +func (e *encoderBincBytes) kStructSimple(f *encFnInfo, rv reflect.Value) { + _ = e.e + tisfi := f.ti.sfi.source() + + chkCirRef := e.h.CheckCircularRef + var si *structFieldInfo + var j int + + if f.ti.toArray || e.h.StructToArray { + if len(tisfi) == 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } else { + if len(tisfi) == 0 { + e.e.WriteMapEmpty() + return + } + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + e.mapStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.EncodeStringNoEscape4Json(si.encName) + e.mapElemValue() + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteMapEnd() + } +} + +func (e *encoderBincBytes) kStruct(f *encFnInfo, rv reflect.Value) { + _ = e.e + ti := f.ti + toMap := !(ti.toArray || e.h.StructToArray) + var mf map[string]interface{} + if ti.flagMissingFielder { + toMap = true + mf = rv2i(rv).(MissingFielder).CodecMissingFields() + } else if ti.flagMissingFielderPtr { + toMap = true + if rv.CanAddr() { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder).CodecMissingFields() + } else { + mf = rv2i(e.addrRV(rv, ti.rt, ti.ptr)).(MissingFielder).CodecMissingFields() + } + } + newlen := len(mf) + tisfi := ti.sfi.source() + newlen += len(tisfi) + + var fkvs = e.slist.get(newlen)[:newlen] + + recur := e.h.RecursiveEmptyCheck + chkCirRef := e.h.CheckCircularRef + + var xlen int + + var kv sfiRv + var j int + var sf encStructFieldObj + if toMap { + newlen = 0 + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + for _, si := range tisfi { + + if si.omitEmpty { + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyValue(kv.r, e.h.TypeInfos, recur) { + continue + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[newlen] = kv + newlen++ + } + + var mf2s []stringIntf + if len(mf) != 0 { + mf2s = make([]stringIntf, 0, len(mf)) + for k, v := range mf { + if k == "" { + continue + } + if ti.infoFieldOmitempty && isEmptyValue(reflect.ValueOf(v), e.h.TypeInfos, recur) { + continue + } + mf2s = append(mf2s, stringIntf{k, v}) + } + } + + xlen = newlen + len(mf2s) + if xlen == 0 { + e.e.WriteMapEmpty() + goto END + } + + e.mapStart(xlen) + + if len(mf2s) != 0 && e.h.Canonical { + mf2w := make([]encStructFieldObj, newlen+len(mf2s)) + for j = 0; j < newlen; j++ { + kv = fkvs[j] + mf2w[j] = encStructFieldObj{kv.v.encName, kv.r, nil, true, + !kv.v.encNameEscape4Json, kv.v.encBuiltin} + } + for _, v := range mf2s { + mf2w[j] = encStructFieldObj{v.v, reflect.Value{}, v.i, false, false, false} + j++ + } + sort.Sort((encStructFieldObjSlice)(mf2w)) + for j, sf = range mf2w { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && sf.noEsc4json { + e.e.EncodeStringNoEscape4Json(sf.key) + } else { + e.kStructFieldKey(ti.keyType, sf.key) + } + e.mapElemValue() + if sf.isRv { + if sf.builtin { + e.encodeIB(rv2i(baseRVRV(sf.rv))) + } else { + e.encodeValue(sf.rv, nil) + } + } else { + if !e.encodeBuiltin(sf.intf) { + e.encodeR(reflect.ValueOf(sf.intf)) + } + + } + } + } else { + keytyp := ti.keyType + for j = 0; j < newlen; j++ { + kv = fkvs[j] + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && !kv.v.encNameEscape4Json { + e.e.EncodeStringNoEscape4Json(kv.v.encName) + } else { + e.kStructFieldKey(keytyp, kv.v.encName) + } + e.mapElemValue() + if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + for _, v := range mf2s { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.kStructFieldKey(keytyp, v.v) + e.mapElemValue() + if !e.encodeBuiltin(v.i) { + e.encodeR(reflect.ValueOf(v.i)) + } + + j++ + } + } + + e.c = 0 + e.e.WriteMapEnd() + } else { + newlen = len(tisfi) + for i, si := range tisfi { + + if si.omitEmpty { + + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyContainerValue(kv.r, e.h.TypeInfos, recur) { + kv.r = reflect.Value{} + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[i] = kv + } + + if newlen == 0 { + e.e.WriteArrayEmpty() + goto END + } + + e.arrayStart(newlen) + for j = 0; j < newlen; j++ { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + kv = fkvs[j] + if !kv.r.IsValid() { + e.e.EncodeNil() + } else if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } + +END: + + e.slist.put(fkvs) +} + +func (e *encoderBincBytes) kMap(f *encFnInfo, rv reflect.Value) { + _ = e.e + l := rvLenMap(rv) + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.mapStart(l) + + var keyFn, valFn *encFnBincBytes + + ktypeKind := reflect.Kind(f.ti.keykind) + vtypeKind := reflect.Kind(f.ti.elemkind) + + rtval := f.ti.elem + rtvalkind := vtypeKind + for rtvalkind == reflect.Ptr { + rtval = rtval.Elem() + rtvalkind = rtval.Kind() + } + if rtvalkind != reflect.Interface { + valFn = e.fn(rtval) + } + + var rvv = mapAddrLoopvarRV(f.ti.elem, vtypeKind) + + rtkey := f.ti.key + var keyTypeIsString = stringTypId == rt2id(rtkey) + if keyTypeIsString { + keyFn = e.fn(rtkey) + } else { + for rtkey.Kind() == reflect.Ptr { + rtkey = rtkey.Elem() + } + if rtkey.Kind() != reflect.Interface { + keyFn = e.fn(rtkey) + } + } + + if e.h.Canonical { + e.kMapCanonical(f.ti, rv, rvv, keyFn, valFn) + e.c = 0 + e.e.WriteMapEnd() + return + } + + var rvk = mapAddrLoopvarRV(f.ti.key, ktypeKind) + + var it mapIter + mapRange(&it, rv, rvk, rvv, true) + + kbuiltin := f.ti.tikey.flagEncBuiltin + vbuiltin := f.ti.tielem.flagEncBuiltin + for j := 0; it.Next(); j++ { + rv = it.Key() + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if keyTypeIsString { + e.e.EncodeString(rvGetString(rv)) + } else if kbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(rv, keyFn) + } + e.mapElemValue() + rv = it.Value() + if vbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(it.Value(), valFn) + } + } + it.Done() + + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincBytes) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valFn *encFnBincBytes) { + _ = e.e + + rtkey := ti.key + rtkeydecl := rtkey.PkgPath() == "" && rtkey.Name() != "" + + mks := rv.MapKeys() + rtkeyKind := rtkey.Kind() + mparams := getMapReqParams(ti) + + switch rtkeyKind { + case reflect.Bool: + + if len(mks) == 2 && mks[0].Bool() { + mks[0], mks[1] = mks[1], mks[0] + } + for i := range mks { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeBool(mks[i].Bool()) + } else { + e.encodeValueNonNil(mks[i], keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mks[i], rvv, mparams), valFn) + } + case reflect.String: + mksv := make([]orderedRv[string], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rvGetString(k) + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeString(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr: + mksv := make([]orderedRv[uint64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Uint() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeUint(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + mksv := make([]orderedRv[int64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Int() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeInt(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float32: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat32(float32(mksv[i].v)) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float64: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat64(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + default: + if rtkey == timeTyp { + mksv := make([]timeRv, len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rv2i(k).(time.Time) + } + slices.SortFunc(mksv, cmpTimeRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeTime(mksv[i].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + break + } + + bs0 := e.blist.get(len(mks) * 16) + mksv := bs0 + mksbv := make([]bytesRv, len(mks)) + + sideEncode(e.hh, &e.h.sideEncPool, func(se encoderI) { + se.ResetBytes(&mksv) + for i, k := range mks { + v := &mksbv[i] + l := len(mksv) + se.setContainerState(containerMapKey) + se.encodeR(baseRVRV(k)) + se.atEndOfEncode() + se.writerEnd() + v.r = k + v.v = mksv[l:] + } + }) + + slices.SortFunc(mksbv, cmpBytesRv) + for j := range mksbv { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.writeBytesAsis(mksbv[j].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksbv[j].r, rvv, mparams), valFn) + } + e.blist.put(mksv) + if !byteSliceSameData(bs0, mksv) { + e.blist.put(bs0) + } + } +} + +func (e *encoderBincBytes) init(h Handle) { + initHandle(h) + callMake(&e.e) + e.hh = h + e.h = h.getBasicHandle() + + e.err = errEncoderNotInitialized + + e.fp = e.e.init(h, &e.encoderBase, e).(*fastpathEsBincBytes) + + if e.bytes { + e.rtidFn = &e.h.rtidFnsEncBytes + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtBytes + } else { + e.rtidFn = &e.h.rtidFnsEncIO + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtIO + } + + e.reset() +} + +func (e *encoderBincBytes) reset() { + e.e.reset() + if e.ci != nil { + e.ci = e.ci[:0] + } + e.c = 0 + e.calls = 0 + e.seq = 0 + e.err = nil +} + +func (e *encoderBincBytes) Encode(v interface{}) (err error) { + + defer panicValToErr(e, callRecoverSentinel, &e.err, &err, debugging) + e.mustEncode(v) + return +} + +func (e *encoderBincBytes) MustEncode(v interface{}) { + defer panicValToErr(e, callRecoverSentinel, &e.err, nil, true) + e.mustEncode(v) + return +} + +func (e *encoderBincBytes) mustEncode(v interface{}) { + halt.onerror(e.err) + if e.hh == nil { + halt.onerror(errNoFormatHandle) + } + + e.calls++ + if !e.encodeBuiltin(v) { + e.encodeR(reflect.ValueOf(v)) + } + + e.calls-- + if e.calls == 0 { + e.e.atEndOfEncode() + e.e.writerEnd() + } +} + +func (e *encoderBincBytes) encodeI(iv interface{}) { + if !e.encodeBuiltin(iv) { + e.encodeR(reflect.ValueOf(iv)) + } +} + +func (e *encoderBincBytes) encodeIB(iv interface{}) { + if !e.encodeBuiltin(iv) { + + halt.errorStr("[should not happen] invalid type passed to encodeBuiltin") + } +} + +func (e *encoderBincBytes) encodeR(base reflect.Value) { + e.encodeValue(base, nil) +} + +func (e *encoderBincBytes) encodeBuiltin(iv interface{}) (ok bool) { + ok = true + switch v := iv.(type) { + case nil: + e.e.EncodeNil() + + case Raw: + e.rawBytes(v) + case string: + e.e.EncodeString(v) + case bool: + e.e.EncodeBool(v) + case int: + e.e.EncodeInt(int64(v)) + case int8: + e.e.EncodeInt(int64(v)) + case int16: + e.e.EncodeInt(int64(v)) + case int32: + e.e.EncodeInt(int64(v)) + case int64: + e.e.EncodeInt(v) + case uint: + e.e.EncodeUint(uint64(v)) + case uint8: + e.e.EncodeUint(uint64(v)) + case uint16: + e.e.EncodeUint(uint64(v)) + case uint32: + e.e.EncodeUint(uint64(v)) + case uint64: + e.e.EncodeUint(v) + case uintptr: + e.e.EncodeUint(uint64(v)) + case float32: + e.e.EncodeFloat32(v) + case float64: + e.e.EncodeFloat64(v) + case complex64: + e.encodeComplex64(v) + case complex128: + e.encodeComplex128(v) + case time.Time: + e.e.EncodeTime(v) + case []byte: + e.e.EncodeBytes(v) + default: + + ok = !skipFastpathTypeSwitchInDirectCall && e.dh.fastpathEncodeTypeSwitch(iv, e) + } + return +} + +func (e *encoderBincBytes) encodeValue(rv reflect.Value, fn *encFnBincBytes) { + + var ciPushes int + + var rvp reflect.Value + var rvpValid bool + +RV: + switch rv.Kind() { + case reflect.Ptr: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = true + rvp = rv + rv = rv.Elem() + + if e.h.CheckCircularRef && e.ci.canPushElemKind(rv.Kind()) { + e.ci.push(rv2i(rvp)) + ciPushes++ + } + goto RV + case reflect.Interface: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = false + rvp = reflect.Value{} + rv = rv.Elem() + fn = nil + goto RV + case reflect.Map: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteMapEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Slice, reflect.Chan: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteArrayEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Invalid, reflect.Func: + e.e.EncodeNil() + goto END + } + + if fn == nil { + fn = e.fn(rv.Type()) + } + + if !fn.i.addrE { + + } else if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + fn.fe(e, &fn.i, rv) + +END: + if ciPushes > 0 { + e.ci.pop(ciPushes) + } +} + +func (e *encoderBincBytes) encodeValueNonNil(rv reflect.Value, fn *encFnBincBytes) { + + if fn.i.addrE { + if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + } + fn.fe(e, &fn.i, rv) +} + +func (e *encoderBincBytes) encodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + e.encodeValue(baseRV(v), e.fn(t)) + } else { + e.encodeValue(baseRV(v), e.fnNoExt(t)) + } +} + +func (e *encoderBincBytes) marshalUtf8(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.EncodeString(stringView(bs)) + } +} + +func (e *encoderBincBytes) marshalAsis(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.writeBytesAsis(bs) + } +} + +func (e *encoderBincBytes) marshalRaw(bs []byte, fnerr error) { + halt.onerror(fnerr) + e.e.EncodeBytes(bs) +} + +func (e *encoderBincBytes) rawBytes(vv Raw) { + v := []byte(vv) + if !e.h.Raw { + halt.errorBytes("Raw values cannot be encoded: ", v) + } + e.e.writeBytesAsis(v) +} + +func (e *encoderBincBytes) fn(t reflect.Type) *encFnBincBytes { + return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false) +} + +func (e *encoderBincBytes) fnNoExt(t reflect.Type) *encFnBincBytes { + return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true) +} + +func (e *encoderBincBytes) mapStart(length int) { + e.e.WriteMapStart(length) + e.c = containerMapStart +} + +func (e *encoderBincBytes) mapElemValue() { + e.e.WriteMapElemValue() + e.c = containerMapValue +} + +func (e *encoderBincBytes) arrayStart(length int) { + e.e.WriteArrayStart(length) + e.c = containerArrayStart +} + +func (e *encoderBincBytes) writerEnd() { + e.e.writerEnd() +} + +func (e *encoderBincBytes) atEndOfEncode() { + e.e.atEndOfEncode() +} + +func (e *encoderBincBytes) Reset(w io.Writer) { + if e.bytes { + halt.onerror(errEncNoResetBytesWithWriter) + } + e.reset() + if w == nil { + w = io.Discard + } + e.e.resetOutIO(w) +} + +func (e *encoderBincBytes) ResetBytes(out *[]byte) { + if !e.bytes { + halt.onerror(errEncNoResetWriterWithBytes) + } + e.resetBytes(out) +} + +func (e *encoderBincBytes) resetBytes(out *[]byte) { + e.reset() + if out == nil { + out = &bytesEncAppenderDefOut + } + e.e.resetOutBytes(out) +} + +func (helperEncDriverBincBytes) newEncoderBytes(out *[]byte, h Handle) *encoderBincBytes { + var c1 encoderBincBytes + c1.bytes = true + c1.init(h) + c1.ResetBytes(out) + return &c1 +} + +func (helperEncDriverBincBytes) newEncoderIO(out io.Writer, h Handle) *encoderBincBytes { + var c1 encoderBincBytes + c1.bytes = false + c1.init(h) + c1.Reset(out) + return &c1 +} + +func (helperEncDriverBincBytes) encFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathEsBincBytes) (f *fastpathEBincBytes, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperEncDriverBincBytes) encFindRtidFn(s []encRtidFnBincBytes, rtid uintptr) (i uint, fn *encFnBincBytes) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperEncDriverBincBytes) encFromRtidFnSlice(fns *atomicRtidFnSlice) (s []encRtidFnBincBytes) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]encRtidFnBincBytes](v)) + } + return +} + +func (dh helperEncDriverBincBytes) encFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, + x *BasicHandle, fp *fastpathEsBincBytes, checkExt bool) (fn *encFnBincBytes) { + return dh.encFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperEncDriverBincBytes) encFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsBincBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnBincBytes) { + rtid := rt2id(rt) + var sp []encRtidFnBincBytes = dh.encFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.encFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.encFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperEncDriverBincBytes) encFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsBincBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnBincBytes) { + + fn = dh.encFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []encRtidFnBincBytes + mu.Lock() + sp = dh.encFromRtidFnSlice(fns) + + if sp == nil { + sp = []encRtidFnBincBytes{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.encFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]encRtidFnBincBytes, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = encRtidFnBincBytes{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperEncDriverBincBytes) encFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathEsBincBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnBincBytes) { + fn = new(encFnBincBytes) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + if rtid == timeTypId && timeBuiltin { + fn.fe = (*encoderBincBytes).kTime + } else if rtid == rawTypId { + fn.fe = (*encoderBincBytes).raw + } else if rtid == rawExtTypId { + fn.fe = (*encoderBincBytes).rawExt + fi.addrE = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fe = (*encoderBincBytes).ext + if rk == reflect.Struct || rk == reflect.Array { + fi.addrE = true + } + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fe = (*encoderBincBytes).selferMarshal + fi.addrE = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fe = (*encoderBincBytes).binaryMarshal + fi.addrE = ti.flagBinaryMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fe = (*encoderBincBytes).jsonMarshal + fi.addrE = ti.flagJsonMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fe = (*encoderBincBytes).textMarshal + fi.addrE = ti.flagTextMarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fe = fp[idx].encfn + } + } else { + + xfe, xrt := dh.encFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf := xfe.encfn + fn.fe = func(e *encoderBincBytes, xf *encFnInfo, xrv reflect.Value) { + xfnf(e, xf, rvConvert(xrv, xrt)) + } + } + } + } + if fn.fe == nil { + switch rk { + case reflect.Bool: + fn.fe = (*encoderBincBytes).kBool + case reflect.String: + + fn.fe = (*encoderBincBytes).kString + case reflect.Int: + fn.fe = (*encoderBincBytes).kInt + case reflect.Int8: + fn.fe = (*encoderBincBytes).kInt8 + case reflect.Int16: + fn.fe = (*encoderBincBytes).kInt16 + case reflect.Int32: + fn.fe = (*encoderBincBytes).kInt32 + case reflect.Int64: + fn.fe = (*encoderBincBytes).kInt64 + case reflect.Uint: + fn.fe = (*encoderBincBytes).kUint + case reflect.Uint8: + fn.fe = (*encoderBincBytes).kUint8 + case reflect.Uint16: + fn.fe = (*encoderBincBytes).kUint16 + case reflect.Uint32: + fn.fe = (*encoderBincBytes).kUint32 + case reflect.Uint64: + fn.fe = (*encoderBincBytes).kUint64 + case reflect.Uintptr: + fn.fe = (*encoderBincBytes).kUintptr + case reflect.Float32: + fn.fe = (*encoderBincBytes).kFloat32 + case reflect.Float64: + fn.fe = (*encoderBincBytes).kFloat64 + case reflect.Complex64: + fn.fe = (*encoderBincBytes).kComplex64 + case reflect.Complex128: + fn.fe = (*encoderBincBytes).kComplex128 + case reflect.Chan: + fn.fe = (*encoderBincBytes).kChan + case reflect.Slice: + fn.fe = (*encoderBincBytes).kSlice + case reflect.Array: + fn.fe = (*encoderBincBytes).kArray + case reflect.Struct: + if ti.simple { + fn.fe = (*encoderBincBytes).kStructSimple + } else { + fn.fe = (*encoderBincBytes).kStruct + } + case reflect.Map: + fn.fe = (*encoderBincBytes).kMap + case reflect.Interface: + + fn.fe = (*encoderBincBytes).kErr + default: + + fn.fe = (*encoderBincBytes).kErr + } + } + } + return +} +func (d *decoderBincBytes) rawExt(f *decFnInfo, rv reflect.Value) { + d.d.DecodeRawExt(rv2i(rv).(*RawExt)) +} + +func (d *decoderBincBytes) ext(f *decFnInfo, rv reflect.Value) { + d.d.DecodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (d *decoderBincBytes) selferUnmarshal(_ *decFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecDecodeSelf(&Decoder{d}) +} + +func (d *decoderBincBytes) binaryUnmarshal(_ *decFnInfo, rv reflect.Value) { + bm := rv2i(rv).(encoding.BinaryUnmarshaler) + xbs, _ := d.d.DecodeBytes() + fnerr := bm.UnmarshalBinary(xbs) + halt.onerror(fnerr) +} + +func (d *decoderBincBytes) textUnmarshal(_ *decFnInfo, rv reflect.Value) { + tm := rv2i(rv).(encoding.TextUnmarshaler) + fnerr := tm.UnmarshalText(bytesOKs(d.d.DecodeStringAsBytes())) + halt.onerror(fnerr) +} + +func (d *decoderBincBytes) jsonUnmarshal(_ *decFnInfo, rv reflect.Value) { + d.jsonUnmarshalV(rv2i(rv).(jsonUnmarshaler)) +} + +func (d *decoderBincBytes) jsonUnmarshalV(tm jsonUnmarshaler) { + + halt.onerror(tm.UnmarshalJSON(d.d.nextValueBytes())) +} + +func (d *decoderBincBytes) kErr(_ *decFnInfo, rv reflect.Value) { + halt.errorf("unsupported decoding kind: %s, for %#v", rv.Kind(), rv) + +} + +func (d *decoderBincBytes) raw(_ *decFnInfo, rv reflect.Value) { + rvSetBytes(rv, d.rawBytes()) +} + +func (d *decoderBincBytes) kString(_ *decFnInfo, rv reflect.Value) { + rvSetString(rv, d.detach2Str(d.d.DecodeStringAsBytes())) +} + +func (d *decoderBincBytes) kBool(_ *decFnInfo, rv reflect.Value) { + rvSetBool(rv, d.d.DecodeBool()) +} + +func (d *decoderBincBytes) kTime(_ *decFnInfo, rv reflect.Value) { + rvSetTime(rv, d.d.DecodeTime()) +} + +func (d *decoderBincBytes) kFloat32(_ *decFnInfo, rv reflect.Value) { + rvSetFloat32(rv, d.d.DecodeFloat32()) +} + +func (d *decoderBincBytes) kFloat64(_ *decFnInfo, rv reflect.Value) { + rvSetFloat64(rv, d.d.DecodeFloat64()) +} + +func (d *decoderBincBytes) kComplex64(_ *decFnInfo, rv reflect.Value) { + rvSetComplex64(rv, complex(d.d.DecodeFloat32(), 0)) +} + +func (d *decoderBincBytes) kComplex128(_ *decFnInfo, rv reflect.Value) { + rvSetComplex128(rv, complex(d.d.DecodeFloat64(), 0)) +} + +func (d *decoderBincBytes) kInt(_ *decFnInfo, rv reflect.Value) { + rvSetInt(rv, int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))) +} + +func (d *decoderBincBytes) kInt8(_ *decFnInfo, rv reflect.Value) { + rvSetInt8(rv, int8(chkOvf.IntV(d.d.DecodeInt64(), 8))) +} + +func (d *decoderBincBytes) kInt16(_ *decFnInfo, rv reflect.Value) { + rvSetInt16(rv, int16(chkOvf.IntV(d.d.DecodeInt64(), 16))) +} + +func (d *decoderBincBytes) kInt32(_ *decFnInfo, rv reflect.Value) { + rvSetInt32(rv, int32(chkOvf.IntV(d.d.DecodeInt64(), 32))) +} + +func (d *decoderBincBytes) kInt64(_ *decFnInfo, rv reflect.Value) { + rvSetInt64(rv, d.d.DecodeInt64()) +} + +func (d *decoderBincBytes) kUint(_ *decFnInfo, rv reflect.Value) { + rvSetUint(rv, uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderBincBytes) kUintptr(_ *decFnInfo, rv reflect.Value) { + rvSetUintptr(rv, uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderBincBytes) kUint8(_ *decFnInfo, rv reflect.Value) { + rvSetUint8(rv, uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))) +} + +func (d *decoderBincBytes) kUint16(_ *decFnInfo, rv reflect.Value) { + rvSetUint16(rv, uint16(chkOvf.UintV(d.d.DecodeUint64(), 16))) +} + +func (d *decoderBincBytes) kUint32(_ *decFnInfo, rv reflect.Value) { + rvSetUint32(rv, uint32(chkOvf.UintV(d.d.DecodeUint64(), 32))) +} + +func (d *decoderBincBytes) kUint64(_ *decFnInfo, rv reflect.Value) { + rvSetUint64(rv, d.d.DecodeUint64()) +} + +func (d *decoderBincBytes) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) { + + n := d.naked() + d.d.DecodeNaked() + + if decFailNonEmptyIntf && f.ti.numMeth > 0 { + halt.errorf("cannot decode non-nil codec value into nil %v (%v methods)", f.ti.rt, f.ti.numMeth) + } + + switch n.v { + case valueTypeMap: + mtid := d.mtid + if mtid == 0 { + if d.jsms { + mtid = mapStrIntfTypId + } else { + mtid = mapIntfIntfTypId + } + } + if mtid == mapStrIntfTypId { + var v2 map[string]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if mtid == mapIntfIntfTypId { + var v2 map[interface{}]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.mtr { + rvn = reflect.New(d.h.MapType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + + rvn = rvZeroAddrK(d.h.MapType, reflect.Map) + d.decodeValue(rvn, nil) + } + case valueTypeArray: + if d.stid == 0 || d.stid == intfSliceTypId { + var v2 []interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.str { + rvn = reflect.New(d.h.SliceType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + rvn = rvZeroAddrK(d.h.SliceType, reflect.Slice) + d.decodeValue(rvn, nil) + } + if d.h.PreferArrayOverSlice { + rvn = rvGetArray4Slice(rvn) + } + case valueTypeExt: + tag, bytes := n.u, n.l + bfn := d.h.getExtForTag(tag) + var re = RawExt{Tag: tag} + if bytes == nil { + + if bfn == nil { + d.decode(&re.Value) + rvn = rv4iptr(&re).Elem() + } else if bfn.ext == SelfExt { + rvn = rvZeroAddrK(bfn.rt, bfn.rt.Kind()) + d.decodeValue(rvn, d.fnNoExt(bfn.rt)) + } else { + rvn = reflect.New(bfn.rt) + d.interfaceExtConvertAndDecode(rv2i(rvn), bfn.ext) + rvn = rvn.Elem() + } + } else { + + if bfn == nil { + re.setData(bytes, false) + rvn = rv4iptr(&re).Elem() + } else { + rvn = reflect.New(bfn.rt) + if bfn.ext == SelfExt { + sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) }) + } else { + bfn.ext.ReadExt(rv2i(rvn), bytes) + } + rvn = rvn.Elem() + } + } + + if d.h.PreferPointerForStructOrArray && rvn.CanAddr() { + if rk := rvn.Kind(); rk == reflect.Array || rk == reflect.Struct { + rvn = rvn.Addr() + } + } + case valueTypeNil: + + case valueTypeInt: + rvn = n.ri() + case valueTypeUint: + rvn = n.ru() + case valueTypeFloat: + rvn = n.rf() + case valueTypeBool: + rvn = n.rb() + case valueTypeString, valueTypeSymbol: + rvn = n.rs() + case valueTypeBytes: + rvn = n.rl() + case valueTypeTime: + rvn = n.rt() + default: + halt.errorStr2("kInterfaceNaked: unexpected valueType: ", n.v.String()) + } + return +} + +func (d *decoderBincBytes) kInterface(f *decFnInfo, rv reflect.Value) { + + isnilrv := rvIsNil(rv) + + var rvn reflect.Value + + if d.h.InterfaceReset { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } else if !isnilrv { + decSetNonNilRV2Zero4Intf(rv) + } + return + } + } else if isnilrv { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } + return + } + } else { + + rvn = rv.Elem() + } + + canDecode, _ := isDecodeable(rvn) + + if !canDecode { + rvn2 := d.oneShotAddrRV(rvn.Type(), rvn.Kind()) + rvSetDirect(rvn2, rvn) + rvn = rvn2 + } + + d.decodeValue(rvn, nil) + rvSetIntf(rv, rvn) +} + +func (d *decoderBincBytes) kStructField(si *structFieldInfo, rv reflect.Value) { + if d.d.TryNil() { + rv = si.fieldNoAlloc(rv, true) + if rv.IsValid() { + decSetNonNilRV2Zero(rv) + } + } else if si.decBuiltin { + rv = rvAddr(si.fieldAlloc(rv), si.ptrTyp) + d.decode(rv2i(rv)) + } else { + fn := d.fn(si.baseTyp) + rv = si.fieldAlloc(rv) + if fn.i.addrD { + rv = rvAddr(rv, si.ptrTyp) + } + fn.fd(d, &fn.i, rv) + } +} + +func (d *decoderBincBytes) kStructSimple(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var rvkencname []byte + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderBincBytes) kStruct(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + var mf MissingFielder + if ti.flagMissingFielder { + mf = rv2i(rv).(MissingFielder) + } else if ti.flagMissingFielderPtr { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder) + } + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var name2 []byte + var rvkencname []byte + tkt := ti.keyType + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + + if tkt == valueTypeString { + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + } else if tkt == valueTypeInt { + rvkencname = strconv.AppendInt(d.b[:0], d.d.DecodeInt64(), 10) + } else if tkt == valueTypeUint { + rvkencname = strconv.AppendUint(d.b[:0], d.d.DecodeUint64(), 10) + } else if tkt == valueTypeFloat { + rvkencname = strconv.AppendFloat(d.b[:0], d.d.DecodeFloat64(), 'f', -1, 64) + } else { + halt.errorStr2("invalid struct key type: ", ti.keyType.String()) + } + + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else if mf != nil { + + name2 = append(name2[:0], rvkencname...) + var f interface{} + d.decode(&f) + if !mf.CodecMissingField(name2, f) && d.h.ErrorIfNoField { + halt.errorStr2("no matching struct field when decoding stream map with key: ", stringView(name2)) + } + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderBincBytes) kSlice(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + rvCanset := rv.CanSet() + + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + rvbs := rvGetBytes(rv) + if rvCanset { + bs2, bst := d.decodeBytesInto(rvbs, false) + if bst != dBytesIntoParamOut { + rvSetBytes(rv, bs2) + } + } else { + + d.decodeBytesInto(rvbs[:len(rvbs):len(rvbs)], true) + } + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset { + if rvIsNil(rv) { + rvSetDirect(rv, rvSliceZeroCap(ti.rt)) + } else { + rvSetSliceLen(rv, 0) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem0Mut := !scalarBitset.isset(ti.elemkind) + rtelem := ti.elem + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnBincBytes + + var rvChanged bool + + var rv0 = rv + var rv9 reflect.Value + + rvlen := rvLenSlice(rv) + rvcap := rvCapSlice(rv) + maxInitLen := d.maxInitLen() + hasLen := containerLenS >= 0 + if hasLen { + if containerLenS > rvcap { + oldRvlenGtZero := rvlen > 0 + rvlen1 := int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + if rvlen1 == rvlen { + } else if rvlen1 <= rvcap { + if rvCanset { + rvlen = rvlen1 + rvSetSliceLen(rv, rvlen) + } + } else if rvCanset { + rvlen = rvlen1 + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + if rvChanged && oldRvlenGtZero && rtelem0Mut { + rvCopySlice(rv, rv0, rtelem) + } + } else if containerLenS != rvlen { + if rvCanset { + rvlen = containerLenS + rvSetSliceLen(rv, rvlen) + } + } + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } + + var j int + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if rvCanset { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + + if rvlen < rvcap { + rvlen = rvcap + if rvCanset { + rvSetSliceLen(rv, rvlen) + } else if rvChanged { + rv = rvSlice(rv, rvlen) + } else { + halt.onerror(errExpandSliceCannotChange) + } + } else { + if !(rvCanset || rvChanged) { + halt.onerror(errExpandSliceCannotChange) + } + rv, rvcap, rvCanset = rvGrowSlice(rv, f.ti, rvcap, 1) + + rvlen = rvcap + rvChanged = !rvCanset + } + } + + rv9 = rvArrayIndex(rv, j, f.ti, true) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if j < rvlen { + if rvCanset { + rvSetSliceLen(rv, j) + } else if rvChanged { + rv = rvSlice(rv, j) + } + + } else if j == 0 && rvIsNil(rv) { + if rvCanset { + rv = rvSliceZeroCap(ti.rt) + rvCanset = false + rvChanged = true + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } +} + +func (d *decoderBincBytes) kArray(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + ctyp := d.d.ContainerType() + if handleBytesWithinKArray && (ctyp == valueTypeBytes || ctyp == valueTypeString) { + + if ti.elemkind != uint8(reflect.Uint8) { + halt.errorf("bytes/string in stream can decode into array of bytes, but not %v", ti.rt) + } + rvbs := rvGetArrayBytes(rv, nil) + d.decodeBytesInto(rvbs, true) + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var rv9 reflect.Value + + rvlen := rv.Len() + hasLen := containerLenS >= 0 + if hasLen && containerLenS > rvlen { + halt.errorf("cannot decode into array with length: %v, less than container length: %v", any(rvlen), any(containerLenS)) + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + var fn *decFnBincBytes + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } else { + fn = d.fn(rtelem) + } + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + d.arrayCannotExpand(rvlen, j+1) + d.swallow() + continue + } + + rv9 = rvArrayIndex(rv, j, f.ti, false) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincBytes) kChan(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + if ti.chandir&uint8(reflect.SendDir) == 0 { + halt.errorStr("receive-only channel cannot be decoded") + } + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + bs2, _ := d.d.DecodeBytes() + irv := rv2i(rv) + ch, ok := irv.(chan<- byte) + if !ok { + ch = irv.(chan byte) + } + for _, b := range bs2 { + ch <- b + } + return + } + + var rvCanset = rv.CanSet() + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset && rvIsNil(rv) { + rvSetDirect(rv, reflect.MakeChan(ti.rt, 0)) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + useTransient := decUseTransient && ti.elemkind != byte(reflect.Ptr) && ti.tielem.flagCanTransient + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnBincBytes + + var rvChanged bool + var rv0 = rv + var rv9 reflect.Value + + var rvlen int + hasLen := containerLenS >= 0 + maxInitLen := d.maxInitLen() + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if hasLen { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + } else { + rvlen = decDefChanCap + } + if rvCanset { + rv = reflect.MakeChan(ti.rt, rvlen) + rvChanged = true + } else { + halt.errorStr("cannot decode into non-settable chan") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if rv9.IsValid() { + rvSetZero(rv9) + } else if useTransient { + rv9 = d.perType.TransientAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } else { + rv9 = rvZeroAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } + if !d.d.TryNil() { + d.decodeValueNoCheckNil(rv9, fn) + } + rv.Send(rv9) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } + +} + +func (d *decoderBincBytes) kMap(f *decFnInfo, rv reflect.Value) { + _ = d.d + containerLen := d.mapStart(d.d.ReadMapStart()) + ti := f.ti + if rvIsNil(rv) { + rvlen := int(decInferLen(containerLen, d.maxInitLen(), uint(ti.keysize+ti.elemsize))) + rvSetDirect(rv, makeMapReflect(ti.rt, rvlen)) + } + + if containerLen == 0 { + d.mapEnd() + return + } + + ktype, vtype := ti.key, ti.elem + ktypeId := rt2id(ktype) + vtypeKind := reflect.Kind(ti.elemkind) + ktypeKind := reflect.Kind(ti.keykind) + mparams := getMapReqParams(ti) + + vtypePtr := vtypeKind == reflect.Ptr + ktypePtr := ktypeKind == reflect.Ptr + + vTransient := decUseTransient && !vtypePtr && ti.tielem.flagCanTransient + + kTransient := vTransient && !ktypePtr && ti.tikey.flagCanTransient + + var vtypeElem reflect.Type + + var keyFn, valFn *decFnBincBytes + var ktypeLo, vtypeLo = ktype, vtype + + if ktypeKind == reflect.Ptr { + for ktypeLo = ktype.Elem(); ktypeLo.Kind() == reflect.Ptr; ktypeLo = ktypeLo.Elem() { + } + } + + if vtypePtr { + vtypeElem = vtype.Elem() + for vtypeLo = vtypeElem; vtypeLo.Kind() == reflect.Ptr; vtypeLo = vtypeLo.Elem() { + } + } + + rvkMut := !scalarBitset.isset(ti.keykind) + rvvMut := !scalarBitset.isset(ti.elemkind) + rvvCanNil := isnilBitset.isset(ti.elemkind) + + var rvk, rvkn, rvv, rvvn, rvva, rvvz reflect.Value + + var doMapGet, doMapSet bool + + if !d.h.MapValueReset { + if rvvMut && (vtypeKind != reflect.Interface || !d.h.InterfaceReset) { + doMapGet = true + rvva = mapAddrLoopvarRV(vtype, vtypeKind) + } + } + + ktypeIsString := ktypeId == stringTypId + ktypeIsIntf := ktypeId == intfTypId + hasLen := containerLen >= 0 + + var kstr2bs []byte + var kstr string + + var mapKeyStringSharesBytesBuf bool + var att dBytesAttachState + + var vElem, kElem reflect.Type + kbuiltin := ti.tikey.flagDecBuiltin && ti.keykind != uint8(reflect.Slice) + vbuiltin := ti.tielem.flagDecBuiltin + if kbuiltin && ktypePtr { + kElem = ti.key.Elem() + } + if vbuiltin && vtypePtr { + vElem = ti.elem.Elem() + } + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + mapKeyStringSharesBytesBuf = false + kstr = "" + if j == 0 { + + if kTransient { + rvk = d.perType.TransientAddr2K(ktype, ktypeKind) + } else { + rvk = rvZeroAddrK(ktype, ktypeKind) + } + if !rvkMut { + rvkn = rvk + } + if !rvvMut { + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + } + if !ktypeIsString && keyFn == nil { + keyFn = d.fn(ktypeLo) + } + if valFn == nil { + valFn = d.fn(vtypeLo) + } + } else if rvkMut { + rvSetZero(rvk) + } else { + rvk = rvkn + } + + d.mapElemKey(j == 0) + + if d.d.TryNil() { + rvSetZero(rvk) + } else if ktypeIsString { + kstr2bs, att = d.d.DecodeStringAsBytes() + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, att) + rvSetString(rvk, kstr) + } else { + if kbuiltin { + if ktypePtr { + if rvIsNil(rvk) { + rvSetDirect(rvk, reflect.New(kElem)) + } + d.decode(rv2i(rvk)) + } else { + d.decode(rv2i(rvAddr(rvk, ti.tikey.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvk, keyFn) + } + + if ktypeIsIntf { + if rvk2 := rvk.Elem(); rvk2.IsValid() && rvk2.Type() == uint8SliceTyp { + kstr2bs = rvGetBytes(rvk2) + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, dBytesAttachView) + rvSetIntf(rvk, rv4istr(kstr)) + } + + } + } + + if mapKeyStringSharesBytesBuf && d.bufio { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + mapKeyStringSharesBytesBuf = false + } + + d.mapElemValue() + + if d.d.TryNil() { + if mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + + if !rvvz.IsValid() { + rvvz = rvZeroK(vtype, vtypeKind) + } + mapSet(rv, rvk, rvvz, mparams) + continue + } + + doMapSet = true + + if !rvvMut { + rvv = rvvn + } else if !doMapGet { + goto NEW_RVV + } else { + rvv = mapGet(rv, rvk, rvva, mparams) + if !rvv.IsValid() || (rvvCanNil && rvIsNil(rvv)) { + goto NEW_RVV + } + switch vtypeKind { + case reflect.Ptr, reflect.Map: + doMapSet = false + case reflect.Interface: + + rvvn = rvv.Elem() + if k := rvvn.Kind(); (k == reflect.Ptr || k == reflect.Map) && !rvIsNil(rvvn) { + d.decodeValueNoCheckNil(rvvn, nil) + continue + } + + rvvn = rvZeroAddrK(vtype, vtypeKind) + rvSetIntf(rvvn, rvv) + rvv = rvvn + default: + + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + rvSetDirect(rvvn, rvv) + rvv = rvvn + } + } + goto DECODE_VALUE_NO_CHECK_NIL + + NEW_RVV: + if vtypePtr { + rvv = reflect.New(vtypeElem) + } else if vTransient { + rvv = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvv = rvZeroAddrK(vtype, vtypeKind) + } + + DECODE_VALUE_NO_CHECK_NIL: + if doMapSet && mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + if vbuiltin { + if vtypePtr { + if rvIsNil(rvv) { + rvSetDirect(rvv, reflect.New(vElem)) + } + d.decode(rv2i(rvv)) + } else { + d.decode(rv2i(rvAddr(rvv, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvv, valFn) + } + if doMapSet { + mapSet(rv, rvk, rvv, mparams) + } + } + + d.mapEnd() +} + +func (d *decoderBincBytes) init(h Handle) { + initHandle(h) + callMake(&d.d) + d.hh = h + d.h = h.getBasicHandle() + + d.err = errDecoderNotInitialized + + if d.h.InternString && d.is == nil { + d.is.init() + } + + d.fp = d.d.init(h, &d.decoderBase, d).(*fastpathDsBincBytes) + + if d.bytes { + d.rtidFn = &d.h.rtidFnsDecBytes + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtBytes + } else { + d.bufio = d.h.ReaderBufferSize > 0 + d.rtidFn = &d.h.rtidFnsDecIO + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtIO + } + + d.reset() + +} + +func (d *decoderBincBytes) reset() { + d.d.reset() + d.err = nil + d.c = 0 + d.depth = 0 + d.calls = 0 + + d.maxdepth = decDefMaxDepth + if d.h.MaxDepth > 0 { + d.maxdepth = d.h.MaxDepth + } + d.mtid = 0 + d.stid = 0 + d.mtr = false + d.str = false + if d.h.MapType != nil { + d.mtid = rt2id(d.h.MapType) + _, d.mtr = fastpathAvIndex(d.mtid) + } + if d.h.SliceType != nil { + d.stid = rt2id(d.h.SliceType) + _, d.str = fastpathAvIndex(d.stid) + } +} + +func (d *decoderBincBytes) Reset(r io.Reader) { + if d.bytes { + halt.onerror(errDecNoResetBytesWithReader) + } + d.reset() + if r == nil { + r = &eofReader + } + d.d.resetInIO(r) +} + +func (d *decoderBincBytes) ResetBytes(in []byte) { + if !d.bytes { + halt.onerror(errDecNoResetReaderWithBytes) + } + d.resetBytes(in) +} + +func (d *decoderBincBytes) resetBytes(in []byte) { + d.reset() + if in == nil { + in = zeroByteSlice + } + d.d.resetInBytes(in) +} + +func (d *decoderBincBytes) ResetString(s string) { + d.ResetBytes(bytesView(s)) +} + +func (d *decoderBincBytes) Decode(v interface{}) (err error) { + + defer panicValToErr(d, callRecoverSentinel, &d.err, &err, debugging) + d.mustDecode(v) + return +} + +func (d *decoderBincBytes) MustDecode(v interface{}) { + defer panicValToErr(d, callRecoverSentinel, &d.err, nil, true) + d.mustDecode(v) + return +} + +func (d *decoderBincBytes) mustDecode(v interface{}) { + halt.onerror(d.err) + if d.hh == nil { + halt.onerror(errNoFormatHandle) + } + + d.calls++ + d.decode(v) + d.calls-- +} + +func (d *decoderBincBytes) Release() {} + +func (d *decoderBincBytes) swallow() { + d.d.nextValueBytes() +} + +func (d *decoderBincBytes) nextValueBytes() []byte { + return d.d.nextValueBytes() +} + +func (d *decoderBincBytes) decode(iv interface{}) { + _ = d.d + + rv, ok := isNil(iv, true) + if ok { + halt.onerror(errCannotDecodeIntoNil) + } + + switch v := iv.(type) { + + case *string: + *v = d.detach2Str(d.d.DecodeStringAsBytes()) + case *bool: + *v = d.d.DecodeBool() + case *int: + *v = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + case *int8: + *v = int8(chkOvf.IntV(d.d.DecodeInt64(), 8)) + case *int16: + *v = int16(chkOvf.IntV(d.d.DecodeInt64(), 16)) + case *int32: + *v = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + case *int64: + *v = d.d.DecodeInt64() + case *uint: + *v = uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *uint8: + *v = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + case *uint16: + *v = uint16(chkOvf.UintV(d.d.DecodeUint64(), 16)) + case *uint32: + *v = uint32(chkOvf.UintV(d.d.DecodeUint64(), 32)) + case *uint64: + *v = d.d.DecodeUint64() + case *uintptr: + *v = uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *float32: + *v = d.d.DecodeFloat32() + case *float64: + *v = d.d.DecodeFloat64() + case *complex64: + *v = complex(d.d.DecodeFloat32(), 0) + case *complex128: + *v = complex(d.d.DecodeFloat64(), 0) + case *[]byte: + *v, _ = d.decodeBytesInto(*v, false) + case []byte: + + d.decodeBytesInto(v[:len(v):len(v)], true) + case *time.Time: + *v = d.d.DecodeTime() + case *Raw: + *v = d.rawBytes() + + case *interface{}: + d.decodeValue(rv4iptr(v), nil) + + case reflect.Value: + if ok, _ = isDecodeable(v); !ok { + d.haltAsNotDecodeable(v) + } + d.decodeValue(v, nil) + + default: + + if skipFastpathTypeSwitchInDirectCall || !d.dh.fastpathDecodeTypeSwitch(iv, d) { + if !rv.IsValid() { + rv = reflect.ValueOf(iv) + } + if ok, _ = isDecodeable(rv); !ok { + d.haltAsNotDecodeable(rv) + } + d.decodeValue(rv, nil) + } + } +} + +func (d *decoderBincBytes) decodeValue(rv reflect.Value, fn *decFnBincBytes) { + if d.d.TryNil() { + decSetNonNilRV2Zero(rv) + } else { + d.decodeValueNoCheckNil(rv, fn) + } +} + +func (d *decoderBincBytes) decodeValueNoCheckNil(rv reflect.Value, fn *decFnBincBytes) { + + var rvp reflect.Value + var rvpValid bool +PTR: + if rv.Kind() == reflect.Ptr { + rvpValid = true + if rvIsNil(rv) { + rvSetDirect(rv, reflect.New(rv.Type().Elem())) + } + rvp = rv + rv = rv.Elem() + goto PTR + } + + if fn == nil { + fn = d.fn(rv.Type()) + } + if fn.i.addrD { + if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else if fn.i.addrDf { + halt.errorStr("cannot decode into a non-pointer value") + } + } + fn.fd(d, &fn.i, rv) +} + +func (d *decoderBincBytes) decodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + d.decodeValue(baseRV(v), d.fn(t)) + } else { + d.decodeValue(baseRV(v), d.fnNoExt(t)) + } +} + +func (d *decoderBincBytes) structFieldNotFound(index int, rvkencname string) { + + if d.h.ErrorIfNoField { + if index >= 0 { + halt.errorInt("no matching struct field found when decoding stream array at index ", int64(index)) + } else if rvkencname != "" { + halt.errorStr2("no matching struct field found when decoding stream map with key ", rvkencname) + } + } + d.swallow() +} + +func (d *decoderBincBytes) decodeBytesInto(out []byte, mustFit bool) (v []byte, state dBytesIntoState) { + v, att := d.d.DecodeBytes() + if cap(v) == 0 || (att >= dBytesAttachViewZerocopy && !mustFit) { + + return + } + if len(v) == 0 { + v = zeroByteSlice + return + } + if len(out) == len(v) { + state = dBytesIntoParamOut + } else if cap(out) >= len(v) { + out = out[:len(v)] + state = dBytesIntoParamOutSlice + } else if mustFit { + halt.errorf("bytes capacity insufficient for decoded bytes: got/expected: %d/%d", len(v), len(out)) + } else { + out = make([]byte, len(v)) + state = dBytesIntoNew + } + copy(out, v) + v = out + return +} + +func (d *decoderBincBytes) rawBytes() (v []byte) { + + v = d.d.nextValueBytes() + if d.bytes && !d.h.ZeroCopy { + vv := make([]byte, len(v)) + copy(vv, v) + v = vv + } + return +} + +func (d *decoderBincBytes) wrapErr(v error, err *error) { + *err = wrapCodecErr(v, d.hh.Name(), d.d.NumBytesRead(), false) +} + +func (d *decoderBincBytes) NumBytesRead() int { + return d.d.NumBytesRead() +} + +func (d *decoderBincBytes) containerNext(j, containerLen int, hasLen bool) bool { + + if hasLen { + return j < containerLen + } + return !d.d.CheckBreak() +} + +func (d *decoderBincBytes) mapElemKey(firstTime bool) { + d.d.ReadMapElemKey(firstTime) + d.c = containerMapKey +} + +func (d *decoderBincBytes) mapElemValue() { + d.d.ReadMapElemValue() + d.c = containerMapValue +} + +func (d *decoderBincBytes) mapEnd() { + d.d.ReadMapEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderBincBytes) arrayElem(firstTime bool) { + d.d.ReadArrayElem(firstTime) + d.c = containerArrayElem +} + +func (d *decoderBincBytes) arrayEnd() { + d.d.ReadArrayEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderBincBytes) interfaceExtConvertAndDecode(v interface{}, ext InterfaceExt) { + + var vv interface{} + d.decode(&vv) + ext.UpdateExt(v, vv) + +} + +func (d *decoderBincBytes) fn(t reflect.Type) *decFnBincBytes { + return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false) +} + +func (d *decoderBincBytes) fnNoExt(t reflect.Type) *decFnBincBytes { + return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true) +} + +func (helperDecDriverBincBytes) newDecoderBytes(in []byte, h Handle) *decoderBincBytes { + var c1 decoderBincBytes + c1.bytes = true + c1.init(h) + c1.ResetBytes(in) + return &c1 +} + +func (helperDecDriverBincBytes) newDecoderIO(in io.Reader, h Handle) *decoderBincBytes { + var c1 decoderBincBytes + c1.init(h) + c1.Reset(in) + return &c1 +} + +func (helperDecDriverBincBytes) decFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathDsBincBytes) (f *fastpathDBincBytes, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperDecDriverBincBytes) decFindRtidFn(s []decRtidFnBincBytes, rtid uintptr) (i uint, fn *decFnBincBytes) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperDecDriverBincBytes) decFromRtidFnSlice(fns *atomicRtidFnSlice) (s []decRtidFnBincBytes) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]decRtidFnBincBytes](v)) + } + return +} + +func (dh helperDecDriverBincBytes) decFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, x *BasicHandle, fp *fastpathDsBincBytes, + checkExt bool) (fn *decFnBincBytes) { + return dh.decFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperDecDriverBincBytes) decFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsBincBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnBincBytes) { + rtid := rt2id(rt) + var sp []decRtidFnBincBytes = dh.decFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.decFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.decFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperDecDriverBincBytes) decFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsBincBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnBincBytes) { + + fn = dh.decFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []decRtidFnBincBytes + mu.Lock() + sp = dh.decFromRtidFnSlice(fns) + + if sp == nil { + sp = []decRtidFnBincBytes{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.decFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]decRtidFnBincBytes, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = decRtidFnBincBytes{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperDecDriverBincBytes) decFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathDsBincBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnBincBytes) { + fn = new(decFnBincBytes) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + fi.addrDf = true + + if rtid == timeTypId && timeBuiltin { + fn.fd = (*decoderBincBytes).kTime + } else if rtid == rawTypId { + fn.fd = (*decoderBincBytes).raw + } else if rtid == rawExtTypId { + fn.fd = (*decoderBincBytes).rawExt + fi.addrD = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fd = (*decoderBincBytes).ext + fi.addrD = true + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fd = (*decoderBincBytes).selferUnmarshal + fi.addrD = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fd = (*decoderBincBytes).binaryUnmarshal + fi.addrD = ti.flagBinaryUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fd = (*decoderBincBytes).jsonUnmarshal + fi.addrD = ti.flagJsonUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fd = (*decoderBincBytes).textUnmarshal + fi.addrD = ti.flagTextUnmarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fd = fp[idx].decfn + fi.addrD = true + fi.addrDf = false + if rk == reflect.Array { + fi.addrD = false + } + } + } else { + + xfe, xrt := dh.decFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf2 := xfe.decfn + if rk == reflect.Array { + fi.addrD = false + fn.fd = func(d *decoderBincBytes, xf *decFnInfo, xrv reflect.Value) { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } else { + fi.addrD = true + fi.addrDf = false + xptr2rt := reflect.PointerTo(xrt) + fn.fd = func(d *decoderBincBytes, xf *decFnInfo, xrv reflect.Value) { + if xrv.Kind() == reflect.Ptr { + xfnf2(d, xf, rvConvert(xrv, xptr2rt)) + } else { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } + } + } + } + } + if fn.fd == nil { + switch rk { + case reflect.Bool: + fn.fd = (*decoderBincBytes).kBool + case reflect.String: + fn.fd = (*decoderBincBytes).kString + case reflect.Int: + fn.fd = (*decoderBincBytes).kInt + case reflect.Int8: + fn.fd = (*decoderBincBytes).kInt8 + case reflect.Int16: + fn.fd = (*decoderBincBytes).kInt16 + case reflect.Int32: + fn.fd = (*decoderBincBytes).kInt32 + case reflect.Int64: + fn.fd = (*decoderBincBytes).kInt64 + case reflect.Uint: + fn.fd = (*decoderBincBytes).kUint + case reflect.Uint8: + fn.fd = (*decoderBincBytes).kUint8 + case reflect.Uint16: + fn.fd = (*decoderBincBytes).kUint16 + case reflect.Uint32: + fn.fd = (*decoderBincBytes).kUint32 + case reflect.Uint64: + fn.fd = (*decoderBincBytes).kUint64 + case reflect.Uintptr: + fn.fd = (*decoderBincBytes).kUintptr + case reflect.Float32: + fn.fd = (*decoderBincBytes).kFloat32 + case reflect.Float64: + fn.fd = (*decoderBincBytes).kFloat64 + case reflect.Complex64: + fn.fd = (*decoderBincBytes).kComplex64 + case reflect.Complex128: + fn.fd = (*decoderBincBytes).kComplex128 + case reflect.Chan: + fn.fd = (*decoderBincBytes).kChan + case reflect.Slice: + fn.fd = (*decoderBincBytes).kSlice + case reflect.Array: + fi.addrD = false + fn.fd = (*decoderBincBytes).kArray + case reflect.Struct: + if ti.simple { + fn.fd = (*decoderBincBytes).kStructSimple + } else { + fn.fd = (*decoderBincBytes).kStruct + } + case reflect.Map: + fn.fd = (*decoderBincBytes).kMap + case reflect.Interface: + + fn.fd = (*decoderBincBytes).kInterface + default: + + fn.fd = (*decoderBincBytes).kErr + } + } + } + return +} +func (e *bincEncDriverBytes) EncodeNil() { + e.w.writen1(bincBdNil) +} + +func (e *bincEncDriverBytes) EncodeTime(t time.Time) { + if t.IsZero() { + e.EncodeNil() + } else { + bs := bincEncodeTime(t) + e.w.writen1(bincVdTimestamp<<4 | uint8(len(bs))) + e.w.writeb(bs) + } +} + +func (e *bincEncDriverBytes) EncodeBool(b bool) { + if b { + e.w.writen1(bincVdSpecial<<4 | bincSpTrue) + } else { + e.w.writen1(bincVdSpecial<<4 | bincSpFalse) + } +} + +func (e *bincEncDriverBytes) encSpFloat(f float64) (done bool) { + if f == 0 { + e.w.writen1(bincVdSpecial<<4 | bincSpZeroFloat) + } else if math.IsNaN(float64(f)) { + e.w.writen1(bincVdSpecial<<4 | bincSpNan) + } else if math.IsInf(float64(f), +1) { + e.w.writen1(bincVdSpecial<<4 | bincSpPosInf) + } else if math.IsInf(float64(f), -1) { + e.w.writen1(bincVdSpecial<<4 | bincSpNegInf) + } else { + return + } + return true +} + +func (e *bincEncDriverBytes) EncodeFloat32(f float32) { + if !e.encSpFloat(float64(f)) { + e.w.writen1(bincVdFloat<<4 | bincFlBin32) + e.w.writen4(bigen.PutUint32(math.Float32bits(f))) + } +} + +func (e *bincEncDriverBytes) EncodeFloat64(f float64) { + if e.encSpFloat(f) { + return + } + b := bigen.PutUint64(math.Float64bits(f)) + if bincDoPrune { + i := 7 + for ; i >= 0 && (b[i] == 0); i-- { + } + i++ + if i <= 6 { + e.w.writen1(bincVdFloat<<4 | 0x8 | bincFlBin64) + e.w.writen1(byte(i)) + e.w.writeb(b[:i]) + return + } + } + e.w.writen1(bincVdFloat<<4 | bincFlBin64) + e.w.writen8(b) +} + +func (e *bincEncDriverBytes) encIntegerPrune32(bd byte, pos bool, v uint64) { + b := bigen.PutUint32(uint32(v)) + if bincDoPrune { + i := byte(pruneSignExt(b[:], pos)) + e.w.writen1(bd | 3 - i) + e.w.writeb(b[i:]) + } else { + e.w.writen1(bd | 3) + e.w.writen4(b) + } +} + +func (e *bincEncDriverBytes) encIntegerPrune64(bd byte, pos bool, v uint64) { + b := bigen.PutUint64(v) + if bincDoPrune { + i := byte(pruneSignExt(b[:], pos)) + e.w.writen1(bd | 7 - i) + e.w.writeb(b[i:]) + } else { + e.w.writen1(bd | 7) + e.w.writen8(b) + } +} + +func (e *bincEncDriverBytes) EncodeInt(v int64) { + if v >= 0 { + e.encUint(bincVdPosInt<<4, true, uint64(v)) + } else if v == -1 { + e.w.writen1(bincVdSpecial<<4 | bincSpNegOne) + } else { + e.encUint(bincVdNegInt<<4, false, uint64(-v)) + } +} + +func (e *bincEncDriverBytes) EncodeUint(v uint64) { + e.encUint(bincVdPosInt<<4, true, v) +} + +func (e *bincEncDriverBytes) encUint(bd byte, pos bool, v uint64) { + if v == 0 { + e.w.writen1(bincVdSpecial<<4 | bincSpZero) + } else if pos && v >= 1 && v <= 16 { + e.w.writen1(bincVdSmallInt<<4 | byte(v-1)) + } else if v <= math.MaxUint8 { + e.w.writen2(bd, byte(v)) + } else if v <= math.MaxUint16 { + e.w.writen1(bd | 0x01) + e.w.writen2(bigen.PutUint16(uint16(v))) + } else if v <= math.MaxUint32 { + e.encIntegerPrune32(bd, pos, v) + } else { + e.encIntegerPrune64(bd, pos, v) + } +} + +func (e *bincEncDriverBytes) EncodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + var bs0, bs []byte + if ext == SelfExt { + bs0 = e.e.blist.get(1024) + bs = bs0 + sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, true) }) + } else { + bs = ext.WriteExt(v) + } + if bs == nil { + e.writeNilBytes() + goto END + } + e.encodeExtPreamble(uint8(xtag), len(bs)) + e.w.writeb(bs) +END: + if ext == SelfExt { + e.e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.e.blist.put(bs0) + } + } +} + +func (e *bincEncDriverBytes) EncodeRawExt(re *RawExt) { + e.encodeExtPreamble(uint8(re.Tag), len(re.Data)) + e.w.writeb(re.Data) +} + +func (e *bincEncDriverBytes) encodeExtPreamble(xtag byte, length int) { + e.encLen(bincVdCustomExt<<4, uint64(length)) + e.w.writen1(xtag) +} + +func (e *bincEncDriverBytes) WriteArrayStart(length int) { + e.encLen(bincVdArray<<4, uint64(length)) +} + +func (e *bincEncDriverBytes) WriteMapStart(length int) { + e.encLen(bincVdMap<<4, uint64(length)) +} + +func (e *bincEncDriverBytes) WriteArrayEmpty() { + + e.w.writen1(bincVdArray<<4 | uint8(0+4)) +} + +func (e *bincEncDriverBytes) WriteMapEmpty() { + + e.w.writen1(bincVdMap<<4 | uint8(0+4)) +} + +func (e *bincEncDriverBytes) EncodeSymbol(v string) { + + l := len(v) + if l == 0 { + e.encBytesLen(cUTF8, 0) + return + } else if l == 1 { + e.encBytesLen(cUTF8, 1) + e.w.writen1(v[0]) + return + } + if e.m == nil { + e.m = make(map[string]uint16, 16) + } + ui, ok := e.m[v] + if ok { + if ui <= math.MaxUint8 { + e.w.writen2(bincVdSymbol<<4, byte(ui)) + } else { + e.w.writen1(bincVdSymbol<<4 | 0x8) + e.w.writen2(bigen.PutUint16(ui)) + } + } else { + e.e.seq++ + ui = e.e.seq + e.m[v] = ui + var lenprec uint8 + if l <= math.MaxUint8 { + + } else if l <= math.MaxUint16 { + lenprec = 1 + } else if int64(l) <= math.MaxUint32 { + lenprec = 2 + } else { + lenprec = 3 + } + if ui <= math.MaxUint8 { + e.w.writen2(bincVdSymbol<<4|0x4|lenprec, byte(ui)) + } else { + e.w.writen1(bincVdSymbol<<4 | 0x8 | 0x4 | lenprec) + e.w.writen2(bigen.PutUint16(ui)) + } + if lenprec == 0 { + e.w.writen1(byte(l)) + } else if lenprec == 1 { + e.w.writen2(bigen.PutUint16(uint16(l))) + } else if lenprec == 2 { + e.w.writen4(bigen.PutUint32(uint32(l))) + } else { + e.w.writen8(bigen.PutUint64(uint64(l))) + } + e.w.writestr(v) + } +} + +func (e *bincEncDriverBytes) EncodeString(v string) { + if e.h.StringToRaw { + e.encLen(bincVdByteArray<<4, uint64(len(v))) + if len(v) > 0 { + e.w.writestr(v) + } + return + } + e.EncodeStringEnc(cUTF8, v) +} + +func (e *bincEncDriverBytes) EncodeStringNoEscape4Json(v string) { e.EncodeString(v) } + +func (e *bincEncDriverBytes) EncodeStringEnc(c charEncoding, v string) { + if e.e.c == containerMapKey && c == cUTF8 && (e.h.AsSymbols == 1) { + e.EncodeSymbol(v) + return + } + e.encLen(bincVdString<<4, uint64(len(v))) + if len(v) > 0 { + e.w.writestr(v) + } +} + +func (e *bincEncDriverBytes) EncodeStringBytesRaw(v []byte) { + e.encLen(bincVdByteArray<<4, uint64(len(v))) + if len(v) > 0 { + e.w.writeb(v) + } +} + +func (e *bincEncDriverBytes) EncodeBytes(v []byte) { + if v == nil { + e.writeNilBytes() + return + } + e.EncodeStringBytesRaw(v) +} + +func (e *bincEncDriverBytes) writeNilOr(v byte) { + if !e.h.NilCollectionToZeroLength { + v = bincBdNil + } + e.w.writen1(v) +} + +func (e *bincEncDriverBytes) writeNilArray() { + e.writeNilOr(bincVdArray<<4 | uint8(0+4)) +} + +func (e *bincEncDriverBytes) writeNilMap() { + e.writeNilOr(bincVdMap<<4 | uint8(0+4)) +} + +func (e *bincEncDriverBytes) writeNilBytes() { + e.writeNilOr(bincVdArray<<4 | uint8(0+4)) +} + +func (e *bincEncDriverBytes) encBytesLen(c charEncoding, length uint64) { + + if c == cRAW { + e.encLen(bincVdByteArray<<4, length) + } else { + e.encLen(bincVdString<<4, length) + } +} + +func (e *bincEncDriverBytes) encLen(bd byte, l uint64) { + if l < 12 { + e.w.writen1(bd | uint8(l+4)) + } else { + e.encLenNumber(bd, l) + } +} + +func (e *bincEncDriverBytes) encLenNumber(bd byte, v uint64) { + if v <= math.MaxUint8 { + e.w.writen2(bd, byte(v)) + } else if v <= math.MaxUint16 { + e.w.writen1(bd | 0x01) + e.w.writen2(bigen.PutUint16(uint16(v))) + } else if v <= math.MaxUint32 { + e.w.writen1(bd | 0x02) + e.w.writen4(bigen.PutUint32(uint32(v))) + } else { + e.w.writen1(bd | 0x03) + e.w.writen8(bigen.PutUint64(uint64(v))) + } +} + +func (d *bincDecDriverBytes) readNextBd() { + d.bd = d.r.readn1() + d.vd = d.bd >> 4 + d.vs = d.bd & 0x0f + d.bdRead = true +} + +func (d *bincDecDriverBytes) advanceNil() (null bool) { + if !d.bdRead { + d.readNextBd() + } + if d.bd == bincBdNil { + d.bdRead = false + return true + } + return +} + +func (d *bincDecDriverBytes) TryNil() bool { + return d.advanceNil() +} + +func (d *bincDecDriverBytes) ContainerType() (vt valueType) { + if !d.bdRead { + d.readNextBd() + } + if d.bd == bincBdNil { + d.bdRead = false + return valueTypeNil + } else if d.vd == bincVdByteArray { + return valueTypeBytes + } else if d.vd == bincVdString { + return valueTypeString + } else if d.vd == bincVdArray { + return valueTypeArray + } else if d.vd == bincVdMap { + return valueTypeMap + } + return valueTypeUnset +} + +func (d *bincDecDriverBytes) DecodeTime() (t time.Time) { + if d.advanceNil() { + return + } + if d.vd != bincVdTimestamp { + halt.errorf("cannot decode time - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + t, err := bincDecodeTime(d.r.readx(uint(d.vs))) + halt.onerror(err) + d.bdRead = false + return +} + +func (d *bincDecDriverBytes) decFloatPruned(maxlen uint8) { + l := d.r.readn1() + if l > maxlen { + halt.errorf("cannot read float - at most %v bytes used to represent float - received %v bytes", maxlen, l) + } + for i := l; i < maxlen; i++ { + d.d.b[i] = 0 + } + d.r.readb(d.d.b[0:l]) +} + +func (d *bincDecDriverBytes) decFloatPre32() (b [4]byte) { + if d.vs&0x8 == 0 { + b = d.r.readn4() + } else { + d.decFloatPruned(4) + copy(b[:], d.d.b[:]) + } + return +} + +func (d *bincDecDriverBytes) decFloatPre64() (b [8]byte) { + if d.vs&0x8 == 0 { + b = d.r.readn8() + } else { + d.decFloatPruned(8) + copy(b[:], d.d.b[:]) + } + return +} + +func (d *bincDecDriverBytes) decFloatVal() (f float64) { + switch d.vs & 0x7 { + case bincFlBin32: + f = float64(math.Float32frombits(bigen.Uint32(d.decFloatPre32()))) + case bincFlBin64: + f = math.Float64frombits(bigen.Uint64(d.decFloatPre64())) + default: + + halt.errorf("read float supports only float32/64 - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + return +} + +func (d *bincDecDriverBytes) decUint() (v uint64) { + switch d.vs { + case 0: + v = uint64(d.r.readn1()) + case 1: + v = uint64(bigen.Uint16(d.r.readn2())) + case 2: + b3 := d.r.readn3() + var b [4]byte + copy(b[1:], b3[:]) + v = uint64(bigen.Uint32(b)) + case 3: + v = uint64(bigen.Uint32(d.r.readn4())) + case 4, 5, 6: + + bs := d.d.b[:8] + clear(bs) + d.r.readb(bs[(7 - d.vs):]) + v = bigen.Uint64(*(*[8]byte)(bs)) + case 7: + v = bigen.Uint64(d.r.readn8()) + default: + halt.errorf("unsigned integers with greater than 64 bits of precision not supported: d.vs: %v %x", d.vs, d.vs) + } + return +} + +func (d *bincDecDriverBytes) uintBytes() (bs []byte) { + switch d.vs { + case 0: + bs = d.d.b[:1] + bs[0] = d.r.readn1() + return + case 1: + bs = d.d.b[:2] + case 2: + bs = d.d.b[:3] + case 3: + bs = d.d.b[:4] + case 4, 5, 6: + lim := 7 - d.vs + bs = d.d.b[lim:8] + case 7: + bs = d.d.b[:8] + default: + halt.errorf("unsigned integers with greater than 64 bits of precision not supported: d.vs: %v %x", d.vs, d.vs) + } + d.r.readb(bs) + return +} + +func (d *bincDecDriverBytes) decInteger() (ui uint64, neg, ok bool) { + ok = true + vd, vs := d.vd, d.vs + if vd == bincVdPosInt { + ui = d.decUint() + } else if vd == bincVdNegInt { + ui = d.decUint() + neg = true + } else if vd == bincVdSmallInt { + ui = uint64(d.vs) + 1 + } else if vd == bincVdSpecial { + if vs == bincSpZero { + + } else if vs == bincSpNegOne { + neg = true + ui = 1 + } else { + ok = false + + } + } else { + ok = false + + } + return +} + +func (d *bincDecDriverBytes) decFloat() (f float64, ok bool) { + ok = true + vd, vs := d.vd, d.vs + if vd == bincVdSpecial { + if vs == bincSpNan { + f = math.NaN() + } else if vs == bincSpPosInf { + f = math.Inf(1) + } else if vs == bincSpZeroFloat || vs == bincSpZero { + + } else if vs == bincSpNegInf { + f = math.Inf(-1) + } else { + ok = false + + } + } else if vd == bincVdFloat { + f = d.decFloatVal() + } else { + ok = false + } + return +} + +func (d *bincDecDriverBytes) DecodeInt64() (i int64) { + if d.advanceNil() { + return + } + v1, v2, v3 := d.decInteger() + i = decNegintPosintFloatNumberHelper{d}.int64(v1, v2, v3, false) + d.bdRead = false + return +} + +func (d *bincDecDriverBytes) DecodeUint64() (ui uint64) { + if d.advanceNil() { + return + } + ui = decNegintPosintFloatNumberHelper{d}.uint64(d.decInteger()) + d.bdRead = false + return +} + +func (d *bincDecDriverBytes) DecodeFloat64() (f float64) { + if d.advanceNil() { + return + } + v1, v2 := d.decFloat() + f = decNegintPosintFloatNumberHelper{d}.float64(v1, v2, false) + d.bdRead = false + return +} + +func (d *bincDecDriverBytes) DecodeBool() (b bool) { + if d.advanceNil() { + return + } + if d.bd == (bincVdSpecial | bincSpFalse) { + + } else if d.bd == (bincVdSpecial | bincSpTrue) { + b = true + } else { + halt.errorf("bool - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + d.bdRead = false + return +} + +func (d *bincDecDriverBytes) ReadMapStart() (length int) { + if d.advanceNil() { + return containerLenNil + } + if d.vd != bincVdMap { + halt.errorf("map - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + length = d.decLen() + d.bdRead = false + return +} + +func (d *bincDecDriverBytes) ReadArrayStart() (length int) { + if d.advanceNil() { + return containerLenNil + } + if d.vd != bincVdArray { + halt.errorf("array - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + length = d.decLen() + d.bdRead = false + return +} + +func (d *bincDecDriverBytes) decLen() int { + if d.vs > 3 { + return int(d.vs - 4) + } + return int(d.decLenNumber()) +} + +func (d *bincDecDriverBytes) decLenNumber() (v uint64) { + if x := d.vs; x == 0 { + v = uint64(d.r.readn1()) + } else if x == 1 { + v = uint64(bigen.Uint16(d.r.readn2())) + } else if x == 2 { + v = uint64(bigen.Uint32(d.r.readn4())) + } else { + v = bigen.Uint64(d.r.readn8()) + } + return +} + +func (d *bincDecDriverBytes) DecodeStringAsBytes() (bs []byte, state dBytesAttachState) { + if d.advanceNil() { + return + } + var cond bool + var slen = -1 + switch d.vd { + case bincVdString, bincVdByteArray: + slen = d.decLen() + bs, cond = d.r.readxb(uint(slen)) + state = d.d.attachState(cond) + case bincVdSymbol: + + var symbol uint16 + vs := d.vs + if vs&0x8 == 0 { + symbol = uint16(d.r.readn1()) + } else { + symbol = uint16(bigen.Uint16(d.r.readn2())) + } + if d.s == nil { + d.s = make(map[uint16][]byte, 16) + } + + if vs&0x4 == 0 { + bs = d.s[symbol] + } else { + switch vs & 0x3 { + case 0: + slen = int(d.r.readn1()) + case 1: + slen = int(bigen.Uint16(d.r.readn2())) + case 2: + slen = int(bigen.Uint32(d.r.readn4())) + case 3: + slen = int(bigen.Uint64(d.r.readn8())) + } + + bs, cond = d.r.readxb(uint(slen)) + bs = d.d.detach2Bytes(bs, d.d.attachState(cond)) + d.s[symbol] = bs + } + state = dBytesDetach + default: + halt.errorf("string/bytes - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + + if d.h.ValidateUnicode && !utf8.Valid(bs) { + halt.errorf("DecodeStringAsBytes: invalid UTF-8: %s", bs) + } + + d.bdRead = false + return +} + +func (d *bincDecDriverBytes) DecodeBytes() (bs []byte, state dBytesAttachState) { + if d.advanceNil() { + return + } + var cond bool + if d.vd == bincVdArray { + slen := d.ReadArrayStart() + bs, cond = usableByteSlice(d.d.buf, slen) + for i := 0; i < slen; i++ { + bs[i] = uint8(chkOvf.UintV(d.DecodeUint64(), 8)) + } + for i := len(bs); i < slen; i++ { + bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) + } + if cond { + d.d.buf = bs + } + state = dBytesAttachBuffer + return + } + if !(d.vd == bincVdString || d.vd == bincVdByteArray) { + halt.errorf("bytes - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + clen := d.decLen() + d.bdRead = false + bs, cond = d.r.readxb(uint(clen)) + state = d.d.attachState(cond) + return +} + +func (d *bincDecDriverBytes) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + xbs, _, _, ok := d.decodeExtV(ext != nil, xtag) + if !ok { + return + } + if ext == SelfExt { + sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, true) }) + } else { + ext.ReadExt(rv, xbs) + } +} + +func (d *bincDecDriverBytes) DecodeRawExt(re *RawExt) { + xbs, realxtag, state, ok := d.decodeExtV(false, 0) + if !ok { + return + } + re.Tag = uint64(realxtag) + re.setData(xbs, state >= dBytesAttachViewZerocopy) +} + +func (d *bincDecDriverBytes) decodeExtV(verifyTag bool, xtagIn uint64) (xbs []byte, xtag byte, bstate dBytesAttachState, ok bool) { + if xtagIn > 0xff { + halt.errorf("ext: tag must be <= 0xff; got: %v", xtagIn) + } + if d.advanceNil() { + return + } + tag := uint8(xtagIn) + if d.vd == bincVdCustomExt { + l := d.decLen() + xtag = d.r.readn1() + if verifyTag && xtag != tag { + halt.errorf("wrong extension tag - got %b, expecting: %v", xtag, tag) + } + xbs, ok = d.r.readxb(uint(l)) + bstate = d.d.attachState(ok) + + } else if d.vd == bincVdByteArray { + xbs, bstate = d.DecodeBytes() + } else { + halt.errorf("ext expects extensions or byte array - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + d.bdRead = false + ok = true + return +} + +func (d *bincDecDriverBytes) DecodeNaked() { + if !d.bdRead { + d.readNextBd() + } + + n := d.d.naked() + var decodeFurther bool + + switch d.vd { + case bincVdSpecial: + switch d.vs { + case bincSpNil: + n.v = valueTypeNil + case bincSpFalse: + n.v = valueTypeBool + n.b = false + case bincSpTrue: + n.v = valueTypeBool + n.b = true + case bincSpNan: + n.v = valueTypeFloat + n.f = math.NaN() + case bincSpPosInf: + n.v = valueTypeFloat + n.f = math.Inf(1) + case bincSpNegInf: + n.v = valueTypeFloat + n.f = math.Inf(-1) + case bincSpZeroFloat: + n.v = valueTypeFloat + n.f = float64(0) + case bincSpZero: + n.v = valueTypeUint + n.u = uint64(0) + case bincSpNegOne: + n.v = valueTypeInt + n.i = int64(-1) + default: + halt.errorf("cannot infer value - unrecognized special value %x-%x/%s", d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + case bincVdSmallInt: + n.v = valueTypeUint + n.u = uint64(int8(d.vs)) + 1 + case bincVdPosInt: + n.v = valueTypeUint + n.u = d.decUint() + case bincVdNegInt: + n.v = valueTypeInt + n.i = -(int64(d.decUint())) + case bincVdFloat: + n.v = valueTypeFloat + n.f = d.decFloatVal() + case bincVdString: + n.v = valueTypeString + n.s = d.d.detach2Str(d.DecodeStringAsBytes()) + case bincVdByteArray: + d.d.fauxUnionReadRawBytes(d, false, d.h.RawToString) + case bincVdSymbol: + n.v = valueTypeSymbol + n.s = d.d.detach2Str(d.DecodeStringAsBytes()) + case bincVdTimestamp: + n.v = valueTypeTime + tt, err := bincDecodeTime(d.r.readx(uint(d.vs))) + halt.onerror(err) + n.t = tt + case bincVdCustomExt: + n.v = valueTypeExt + l := d.decLen() + n.u = uint64(d.r.readn1()) + n.l = d.r.readx(uint(l)) + case bincVdArray: + n.v = valueTypeArray + decodeFurther = true + case bincVdMap: + n.v = valueTypeMap + decodeFurther = true + default: + halt.errorf("cannot infer value - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + + if !decodeFurther { + d.bdRead = false + } + if n.v == valueTypeUint && d.h.SignedInteger { + n.v = valueTypeInt + n.i = int64(n.u) + } +} + +func (d *bincDecDriverBytes) nextValueBytes() (v []byte) { + if !d.bdRead { + d.readNextBd() + } + d.r.startRecording() + d.nextValueBytesBdReadR() + v = d.r.stopRecording() + d.bdRead = false + return +} + +func (d *bincDecDriverBytes) nextValueBytesBdReadR() { + fnLen := func(vs byte) uint { + switch vs { + case 0: + x := d.r.readn1() + return uint(x) + case 1: + x := d.r.readn2() + return uint(bigen.Uint16(x)) + case 2: + x := d.r.readn4() + return uint(bigen.Uint32(x)) + case 3: + x := d.r.readn8() + return uint(bigen.Uint64(x)) + default: + return uint(vs - 4) + } + } + + var clen uint + + switch d.vd { + case bincVdSpecial: + switch d.vs { + case bincSpNil, bincSpFalse, bincSpTrue, bincSpNan, bincSpPosInf: + case bincSpNegInf, bincSpZeroFloat, bincSpZero, bincSpNegOne: + default: + halt.errorf("cannot infer value - unrecognized special value %x-%x/%s", d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + case bincVdSmallInt: + case bincVdPosInt, bincVdNegInt: + d.uintBytes() + case bincVdFloat: + fn := func(xlen byte) { + if d.vs&0x8 != 0 { + xlen = d.r.readn1() + if xlen > 8 { + halt.errorf("cannot read float - at most 8 bytes used to represent float - received %v bytes", xlen) + } + } + d.r.readb(d.d.b[:xlen]) + } + switch d.vs & 0x7 { + case bincFlBin32: + fn(4) + case bincFlBin64: + fn(8) + default: + halt.errorf("read float supports only float32/64 - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + case bincVdString, bincVdByteArray: + clen = fnLen(d.vs) + d.r.skip(clen) + case bincVdSymbol: + if d.vs&0x8 == 0 { + d.r.readn1() + } else { + d.r.skip(2) + } + if d.vs&0x4 != 0 { + clen = fnLen(d.vs & 0x3) + d.r.skip(clen) + } + case bincVdTimestamp: + d.r.skip(uint(d.vs)) + case bincVdCustomExt: + clen = fnLen(d.vs) + d.r.readn1() + d.r.skip(clen) + case bincVdArray: + clen = fnLen(d.vs) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + } + case bincVdMap: + clen = fnLen(d.vs) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() + } + default: + halt.errorf("cannot infer value - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + return +} + +func (d *bincEncDriverBytes) init(hh Handle, shared *encoderBase, enc encoderI) (fp interface{}) { + callMake(&d.w) + d.h = hh.(*BincHandle) + d.e = shared + if shared.bytes { + fp = bincFpEncBytes + } else { + fp = bincFpEncIO + } + + d.init2(enc) + return +} + +func (e *bincEncDriverBytes) writeBytesAsis(b []byte) { e.w.writeb(b) } + +func (e *bincEncDriverBytes) writerEnd() { e.w.end() } + +func (e *bincEncDriverBytes) resetOutBytes(out *[]byte) { + e.w.resetBytes(*out, out) +} + +func (e *bincEncDriverBytes) resetOutIO(out io.Writer) { + e.w.resetIO(out, e.h.WriterBufferSize, &e.e.blist) +} + +func (d *bincDecDriverBytes) init(hh Handle, shared *decoderBase, dec decoderI) (fp interface{}) { + callMake(&d.r) + d.h = hh.(*BincHandle) + d.d = shared + if shared.bytes { + fp = bincFpDecBytes + } else { + fp = bincFpDecIO + } + + d.init2(dec) + return +} + +func (d *bincDecDriverBytes) NumBytesRead() int { + return int(d.r.numread()) +} + +func (d *bincDecDriverBytes) resetInBytes(in []byte) { + d.r.resetBytes(in) +} + +func (d *bincDecDriverBytes) resetInIO(r io.Reader) { + d.r.resetIO(r, d.h.ReaderBufferSize, d.h.MaxInitLen, &d.d.blist) +} + +func (d *bincDecDriverBytes) descBd() string { + return sprintf("%v (%s)", d.bd, bincdescbd(d.bd)) +} + +func (d *bincDecDriverBytes) DecodeFloat32() (f float32) { + return float32(chkOvf.Float32V(d.DecodeFloat64())) +} + +type helperEncDriverBincIO struct{} +type encFnBincIO struct { + i encFnInfo + fe func(*encoderBincIO, *encFnInfo, reflect.Value) +} +type encRtidFnBincIO struct { + rtid uintptr + fn *encFnBincIO +} +type encoderBincIO struct { + dh helperEncDriverBincIO + fp *fastpathEsBincIO + e bincEncDriverIO + encoderBase +} +type helperDecDriverBincIO struct{} +type decFnBincIO struct { + i decFnInfo + fd func(*decoderBincIO, *decFnInfo, reflect.Value) +} +type decRtidFnBincIO struct { + rtid uintptr + fn *decFnBincIO +} +type decoderBincIO struct { + dh helperDecDriverBincIO + fp *fastpathDsBincIO + d bincDecDriverIO + decoderBase +} +type bincEncDriverIO struct { + noBuiltInTypes + encDriverNoopContainerWriter + encDriverContainerNoTrackerT + encInit2er + + h *BincHandle + e *encoderBase + w bufioEncWriter + bincEncState +} +type bincDecDriverIO struct { + decDriverNoopContainerReader + + decInit2er + noBuiltInTypes + + h *BincHandle + d *decoderBase + r ioDecReader + + bincDecState +} + +func (e *encoderBincIO) rawExt(_ *encFnInfo, rv reflect.Value) { + if re := rv2i(rv).(*RawExt); re == nil { + e.e.EncodeNil() + } else { + e.e.EncodeRawExt(re) + } +} + +func (e *encoderBincIO) ext(f *encFnInfo, rv reflect.Value) { + e.e.EncodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (e *encoderBincIO) selferMarshal(_ *encFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecEncodeSelf(&Encoder{e}) +} + +func (e *encoderBincIO) binaryMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.BinaryMarshaler).MarshalBinary() + e.marshalRaw(bs, fnerr) +} + +func (e *encoderBincIO) textMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.TextMarshaler).MarshalText() + e.marshalUtf8(bs, fnerr) +} + +func (e *encoderBincIO) jsonMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(jsonMarshaler).MarshalJSON() + e.marshalAsis(bs, fnerr) +} + +func (e *encoderBincIO) raw(_ *encFnInfo, rv reflect.Value) { + e.rawBytes(rv2i(rv).(Raw)) +} + +func (e *encoderBincIO) encodeComplex64(v complex64) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat32(real(v)) +} + +func (e *encoderBincIO) encodeComplex128(v complex128) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat64(real(v)) +} + +func (e *encoderBincIO) kBool(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeBool(rvGetBool(rv)) +} + +func (e *encoderBincIO) kTime(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeTime(rvGetTime(rv)) +} + +func (e *encoderBincIO) kString(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeString(rvGetString(rv)) +} + +func (e *encoderBincIO) kFloat32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat32(rvGetFloat32(rv)) +} + +func (e *encoderBincIO) kFloat64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat64(rvGetFloat64(rv)) +} + +func (e *encoderBincIO) kComplex64(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex64(rvGetComplex64(rv)) +} + +func (e *encoderBincIO) kComplex128(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex128(rvGetComplex128(rv)) +} + +func (e *encoderBincIO) kInt(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt(rv))) +} + +func (e *encoderBincIO) kInt8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt8(rv))) +} + +func (e *encoderBincIO) kInt16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt16(rv))) +} + +func (e *encoderBincIO) kInt32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt32(rv))) +} + +func (e *encoderBincIO) kInt64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt64(rv))) +} + +func (e *encoderBincIO) kUint(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint(rv))) +} + +func (e *encoderBincIO) kUint8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint8(rv))) +} + +func (e *encoderBincIO) kUint16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint16(rv))) +} + +func (e *encoderBincIO) kUint32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint32(rv))) +} + +func (e *encoderBincIO) kUint64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint64(rv))) +} + +func (e *encoderBincIO) kUintptr(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUintptr(rv))) +} + +func (e *encoderBincIO) kSeqFn(rt reflect.Type) (fn *encFnBincIO) { + + if rt = baseRT(rt); rt.Kind() != reflect.Interface { + fn = e.fn(rt) + } + return +} + +func (e *encoderBincIO) kArrayWMbs(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(l) + e.mapStart(l >> 1) + + var fn *encFnBincIO + builtin := ti.tielem.flagEncBuiltin + if !builtin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerMapKey + e.e.WriteMapElemKey(true) + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(false) + } else { + e.mapElemValue() + } + } + e.c = 0 + e.e.WriteMapEnd() + +} + +func (e *encoderBincIO) kArrayW(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l <= 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(l) + + var fn *encFnBincIO + if !ti.tielem.flagEncBuiltin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerArrayElem + e.e.WriteArrayElem(true) + builtin := ti.tielem.flagEncBuiltin + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + e.c = containerArrayElem + e.e.WriteArrayElem(false) + } + + e.c = 0 + e.e.WriteArrayEnd() +} + +func (e *encoderBincIO) kChan(f *encFnInfo, rv reflect.Value) { + if f.ti.chandir&uint8(reflect.RecvDir) == 0 { + halt.errorStr("send-only channel cannot be encoded") + } + if !f.ti.mbs && uint8TypId == rt2id(f.ti.elem) { + e.kSliceBytesChan(rv) + return + } + rtslice := reflect.SliceOf(f.ti.elem) + rv = chanToSlice(rv, rtslice, e.h.ChanRecvTimeout) + ti := e.h.getTypeInfo(rt2id(rtslice), rtslice) + if f.ti.mbs { + e.kArrayWMbs(rv, ti, true) + } else { + e.kArrayW(rv, ti, true) + } +} + +func (e *encoderBincIO) kSlice(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, true) + } else if f.ti.rtid == uint8SliceTypId || uint8TypId == rt2id(f.ti.elem) { + + e.e.EncodeBytes(rvGetBytes(rv)) + } else { + e.kArrayW(rv, f.ti, true) + } +} + +func (e *encoderBincIO) kArray(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, false) + } else if handleBytesWithinKArray && uint8TypId == rt2id(f.ti.elem) { + e.e.EncodeStringBytesRaw(rvGetArrayBytes(rv, nil)) + } else { + e.kArrayW(rv, f.ti, false) + } +} + +func (e *encoderBincIO) kSliceBytesChan(rv reflect.Value) { + + bs0 := e.blist.peek(32, true) + bs := bs0 + + irv := rv2i(rv) + ch, ok := irv.(<-chan byte) + if !ok { + ch = irv.(chan byte) + } + +L1: + switch timeout := e.h.ChanRecvTimeout; { + case timeout == 0: + for { + select { + case b := <-ch: + bs = append(bs, b) + default: + break L1 + } + } + case timeout > 0: + tt := time.NewTimer(timeout) + for { + select { + case b := <-ch: + bs = append(bs, b) + case <-tt.C: + + break L1 + } + } + default: + for b := range ch { + bs = append(bs, b) + } + } + + e.e.EncodeBytes(bs) + e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.blist.put(bs0) + } +} + +func (e *encoderBincIO) kStructFieldKey(keyType valueType, encName string) { + + if keyType == valueTypeString { + e.e.EncodeString(encName) + } else if keyType == valueTypeInt { + e.e.EncodeInt(must.Int(strconv.ParseInt(encName, 10, 64))) + } else if keyType == valueTypeUint { + e.e.EncodeUint(must.Uint(strconv.ParseUint(encName, 10, 64))) + } else if keyType == valueTypeFloat { + e.e.EncodeFloat64(must.Float(strconv.ParseFloat(encName, 64))) + } else { + halt.errorStr2("invalid struct key type: ", keyType.String()) + } + +} + +func (e *encoderBincIO) kStructSimple(f *encFnInfo, rv reflect.Value) { + _ = e.e + tisfi := f.ti.sfi.source() + + chkCirRef := e.h.CheckCircularRef + var si *structFieldInfo + var j int + + if f.ti.toArray || e.h.StructToArray { + if len(tisfi) == 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } else { + if len(tisfi) == 0 { + e.e.WriteMapEmpty() + return + } + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + e.mapStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.EncodeStringNoEscape4Json(si.encName) + e.mapElemValue() + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteMapEnd() + } +} + +func (e *encoderBincIO) kStruct(f *encFnInfo, rv reflect.Value) { + _ = e.e + ti := f.ti + toMap := !(ti.toArray || e.h.StructToArray) + var mf map[string]interface{} + if ti.flagMissingFielder { + toMap = true + mf = rv2i(rv).(MissingFielder).CodecMissingFields() + } else if ti.flagMissingFielderPtr { + toMap = true + if rv.CanAddr() { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder).CodecMissingFields() + } else { + mf = rv2i(e.addrRV(rv, ti.rt, ti.ptr)).(MissingFielder).CodecMissingFields() + } + } + newlen := len(mf) + tisfi := ti.sfi.source() + newlen += len(tisfi) + + var fkvs = e.slist.get(newlen)[:newlen] + + recur := e.h.RecursiveEmptyCheck + chkCirRef := e.h.CheckCircularRef + + var xlen int + + var kv sfiRv + var j int + var sf encStructFieldObj + if toMap { + newlen = 0 + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + for _, si := range tisfi { + + if si.omitEmpty { + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyValue(kv.r, e.h.TypeInfos, recur) { + continue + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[newlen] = kv + newlen++ + } + + var mf2s []stringIntf + if len(mf) != 0 { + mf2s = make([]stringIntf, 0, len(mf)) + for k, v := range mf { + if k == "" { + continue + } + if ti.infoFieldOmitempty && isEmptyValue(reflect.ValueOf(v), e.h.TypeInfos, recur) { + continue + } + mf2s = append(mf2s, stringIntf{k, v}) + } + } + + xlen = newlen + len(mf2s) + if xlen == 0 { + e.e.WriteMapEmpty() + goto END + } + + e.mapStart(xlen) + + if len(mf2s) != 0 && e.h.Canonical { + mf2w := make([]encStructFieldObj, newlen+len(mf2s)) + for j = 0; j < newlen; j++ { + kv = fkvs[j] + mf2w[j] = encStructFieldObj{kv.v.encName, kv.r, nil, true, + !kv.v.encNameEscape4Json, kv.v.encBuiltin} + } + for _, v := range mf2s { + mf2w[j] = encStructFieldObj{v.v, reflect.Value{}, v.i, false, false, false} + j++ + } + sort.Sort((encStructFieldObjSlice)(mf2w)) + for j, sf = range mf2w { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && sf.noEsc4json { + e.e.EncodeStringNoEscape4Json(sf.key) + } else { + e.kStructFieldKey(ti.keyType, sf.key) + } + e.mapElemValue() + if sf.isRv { + if sf.builtin { + e.encodeIB(rv2i(baseRVRV(sf.rv))) + } else { + e.encodeValue(sf.rv, nil) + } + } else { + if !e.encodeBuiltin(sf.intf) { + e.encodeR(reflect.ValueOf(sf.intf)) + } + + } + } + } else { + keytyp := ti.keyType + for j = 0; j < newlen; j++ { + kv = fkvs[j] + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && !kv.v.encNameEscape4Json { + e.e.EncodeStringNoEscape4Json(kv.v.encName) + } else { + e.kStructFieldKey(keytyp, kv.v.encName) + } + e.mapElemValue() + if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + for _, v := range mf2s { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.kStructFieldKey(keytyp, v.v) + e.mapElemValue() + if !e.encodeBuiltin(v.i) { + e.encodeR(reflect.ValueOf(v.i)) + } + + j++ + } + } + + e.c = 0 + e.e.WriteMapEnd() + } else { + newlen = len(tisfi) + for i, si := range tisfi { + + if si.omitEmpty { + + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyContainerValue(kv.r, e.h.TypeInfos, recur) { + kv.r = reflect.Value{} + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[i] = kv + } + + if newlen == 0 { + e.e.WriteArrayEmpty() + goto END + } + + e.arrayStart(newlen) + for j = 0; j < newlen; j++ { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + kv = fkvs[j] + if !kv.r.IsValid() { + e.e.EncodeNil() + } else if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } + +END: + + e.slist.put(fkvs) +} + +func (e *encoderBincIO) kMap(f *encFnInfo, rv reflect.Value) { + _ = e.e + l := rvLenMap(rv) + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.mapStart(l) + + var keyFn, valFn *encFnBincIO + + ktypeKind := reflect.Kind(f.ti.keykind) + vtypeKind := reflect.Kind(f.ti.elemkind) + + rtval := f.ti.elem + rtvalkind := vtypeKind + for rtvalkind == reflect.Ptr { + rtval = rtval.Elem() + rtvalkind = rtval.Kind() + } + if rtvalkind != reflect.Interface { + valFn = e.fn(rtval) + } + + var rvv = mapAddrLoopvarRV(f.ti.elem, vtypeKind) + + rtkey := f.ti.key + var keyTypeIsString = stringTypId == rt2id(rtkey) + if keyTypeIsString { + keyFn = e.fn(rtkey) + } else { + for rtkey.Kind() == reflect.Ptr { + rtkey = rtkey.Elem() + } + if rtkey.Kind() != reflect.Interface { + keyFn = e.fn(rtkey) + } + } + + if e.h.Canonical { + e.kMapCanonical(f.ti, rv, rvv, keyFn, valFn) + e.c = 0 + e.e.WriteMapEnd() + return + } + + var rvk = mapAddrLoopvarRV(f.ti.key, ktypeKind) + + var it mapIter + mapRange(&it, rv, rvk, rvv, true) + + kbuiltin := f.ti.tikey.flagEncBuiltin + vbuiltin := f.ti.tielem.flagEncBuiltin + for j := 0; it.Next(); j++ { + rv = it.Key() + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if keyTypeIsString { + e.e.EncodeString(rvGetString(rv)) + } else if kbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(rv, keyFn) + } + e.mapElemValue() + rv = it.Value() + if vbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(it.Value(), valFn) + } + } + it.Done() + + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderBincIO) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valFn *encFnBincIO) { + _ = e.e + + rtkey := ti.key + rtkeydecl := rtkey.PkgPath() == "" && rtkey.Name() != "" + + mks := rv.MapKeys() + rtkeyKind := rtkey.Kind() + mparams := getMapReqParams(ti) + + switch rtkeyKind { + case reflect.Bool: + + if len(mks) == 2 && mks[0].Bool() { + mks[0], mks[1] = mks[1], mks[0] + } + for i := range mks { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeBool(mks[i].Bool()) + } else { + e.encodeValueNonNil(mks[i], keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mks[i], rvv, mparams), valFn) + } + case reflect.String: + mksv := make([]orderedRv[string], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rvGetString(k) + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeString(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr: + mksv := make([]orderedRv[uint64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Uint() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeUint(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + mksv := make([]orderedRv[int64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Int() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeInt(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float32: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat32(float32(mksv[i].v)) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float64: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat64(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + default: + if rtkey == timeTyp { + mksv := make([]timeRv, len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rv2i(k).(time.Time) + } + slices.SortFunc(mksv, cmpTimeRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeTime(mksv[i].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + break + } + + bs0 := e.blist.get(len(mks) * 16) + mksv := bs0 + mksbv := make([]bytesRv, len(mks)) + + sideEncode(e.hh, &e.h.sideEncPool, func(se encoderI) { + se.ResetBytes(&mksv) + for i, k := range mks { + v := &mksbv[i] + l := len(mksv) + se.setContainerState(containerMapKey) + se.encodeR(baseRVRV(k)) + se.atEndOfEncode() + se.writerEnd() + v.r = k + v.v = mksv[l:] + } + }) + + slices.SortFunc(mksbv, cmpBytesRv) + for j := range mksbv { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.writeBytesAsis(mksbv[j].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksbv[j].r, rvv, mparams), valFn) + } + e.blist.put(mksv) + if !byteSliceSameData(bs0, mksv) { + e.blist.put(bs0) + } + } +} + +func (e *encoderBincIO) init(h Handle) { + initHandle(h) + callMake(&e.e) + e.hh = h + e.h = h.getBasicHandle() + + e.err = errEncoderNotInitialized + + e.fp = e.e.init(h, &e.encoderBase, e).(*fastpathEsBincIO) + + if e.bytes { + e.rtidFn = &e.h.rtidFnsEncBytes + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtBytes + } else { + e.rtidFn = &e.h.rtidFnsEncIO + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtIO + } + + e.reset() +} + +func (e *encoderBincIO) reset() { + e.e.reset() + if e.ci != nil { + e.ci = e.ci[:0] + } + e.c = 0 + e.calls = 0 + e.seq = 0 + e.err = nil +} + +func (e *encoderBincIO) Encode(v interface{}) (err error) { + + defer panicValToErr(e, callRecoverSentinel, &e.err, &err, debugging) + e.mustEncode(v) + return +} + +func (e *encoderBincIO) MustEncode(v interface{}) { + defer panicValToErr(e, callRecoverSentinel, &e.err, nil, true) + e.mustEncode(v) + return +} + +func (e *encoderBincIO) mustEncode(v interface{}) { + halt.onerror(e.err) + if e.hh == nil { + halt.onerror(errNoFormatHandle) + } + + e.calls++ + if !e.encodeBuiltin(v) { + e.encodeR(reflect.ValueOf(v)) + } + + e.calls-- + if e.calls == 0 { + e.e.atEndOfEncode() + e.e.writerEnd() + } +} + +func (e *encoderBincIO) encodeI(iv interface{}) { + if !e.encodeBuiltin(iv) { + e.encodeR(reflect.ValueOf(iv)) + } +} + +func (e *encoderBincIO) encodeIB(iv interface{}) { + if !e.encodeBuiltin(iv) { + + halt.errorStr("[should not happen] invalid type passed to encodeBuiltin") + } +} + +func (e *encoderBincIO) encodeR(base reflect.Value) { + e.encodeValue(base, nil) +} + +func (e *encoderBincIO) encodeBuiltin(iv interface{}) (ok bool) { + ok = true + switch v := iv.(type) { + case nil: + e.e.EncodeNil() + + case Raw: + e.rawBytes(v) + case string: + e.e.EncodeString(v) + case bool: + e.e.EncodeBool(v) + case int: + e.e.EncodeInt(int64(v)) + case int8: + e.e.EncodeInt(int64(v)) + case int16: + e.e.EncodeInt(int64(v)) + case int32: + e.e.EncodeInt(int64(v)) + case int64: + e.e.EncodeInt(v) + case uint: + e.e.EncodeUint(uint64(v)) + case uint8: + e.e.EncodeUint(uint64(v)) + case uint16: + e.e.EncodeUint(uint64(v)) + case uint32: + e.e.EncodeUint(uint64(v)) + case uint64: + e.e.EncodeUint(v) + case uintptr: + e.e.EncodeUint(uint64(v)) + case float32: + e.e.EncodeFloat32(v) + case float64: + e.e.EncodeFloat64(v) + case complex64: + e.encodeComplex64(v) + case complex128: + e.encodeComplex128(v) + case time.Time: + e.e.EncodeTime(v) + case []byte: + e.e.EncodeBytes(v) + default: + + ok = !skipFastpathTypeSwitchInDirectCall && e.dh.fastpathEncodeTypeSwitch(iv, e) + } + return +} + +func (e *encoderBincIO) encodeValue(rv reflect.Value, fn *encFnBincIO) { + + var ciPushes int + + var rvp reflect.Value + var rvpValid bool + +RV: + switch rv.Kind() { + case reflect.Ptr: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = true + rvp = rv + rv = rv.Elem() + + if e.h.CheckCircularRef && e.ci.canPushElemKind(rv.Kind()) { + e.ci.push(rv2i(rvp)) + ciPushes++ + } + goto RV + case reflect.Interface: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = false + rvp = reflect.Value{} + rv = rv.Elem() + fn = nil + goto RV + case reflect.Map: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteMapEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Slice, reflect.Chan: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteArrayEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Invalid, reflect.Func: + e.e.EncodeNil() + goto END + } + + if fn == nil { + fn = e.fn(rv.Type()) + } + + if !fn.i.addrE { + + } else if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + fn.fe(e, &fn.i, rv) + +END: + if ciPushes > 0 { + e.ci.pop(ciPushes) + } +} + +func (e *encoderBincIO) encodeValueNonNil(rv reflect.Value, fn *encFnBincIO) { + + if fn.i.addrE { + if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + } + fn.fe(e, &fn.i, rv) +} + +func (e *encoderBincIO) encodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + e.encodeValue(baseRV(v), e.fn(t)) + } else { + e.encodeValue(baseRV(v), e.fnNoExt(t)) + } +} + +func (e *encoderBincIO) marshalUtf8(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.EncodeString(stringView(bs)) + } +} + +func (e *encoderBincIO) marshalAsis(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.writeBytesAsis(bs) + } +} + +func (e *encoderBincIO) marshalRaw(bs []byte, fnerr error) { + halt.onerror(fnerr) + e.e.EncodeBytes(bs) +} + +func (e *encoderBincIO) rawBytes(vv Raw) { + v := []byte(vv) + if !e.h.Raw { + halt.errorBytes("Raw values cannot be encoded: ", v) + } + e.e.writeBytesAsis(v) +} + +func (e *encoderBincIO) fn(t reflect.Type) *encFnBincIO { + return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false) +} + +func (e *encoderBincIO) fnNoExt(t reflect.Type) *encFnBincIO { + return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true) +} + +func (e *encoderBincIO) mapStart(length int) { + e.e.WriteMapStart(length) + e.c = containerMapStart +} + +func (e *encoderBincIO) mapElemValue() { + e.e.WriteMapElemValue() + e.c = containerMapValue +} + +func (e *encoderBincIO) arrayStart(length int) { + e.e.WriteArrayStart(length) + e.c = containerArrayStart +} + +func (e *encoderBincIO) writerEnd() { + e.e.writerEnd() +} + +func (e *encoderBincIO) atEndOfEncode() { + e.e.atEndOfEncode() +} + +func (e *encoderBincIO) Reset(w io.Writer) { + if e.bytes { + halt.onerror(errEncNoResetBytesWithWriter) + } + e.reset() + if w == nil { + w = io.Discard + } + e.e.resetOutIO(w) +} + +func (e *encoderBincIO) ResetBytes(out *[]byte) { + if !e.bytes { + halt.onerror(errEncNoResetWriterWithBytes) + } + e.resetBytes(out) +} + +func (e *encoderBincIO) resetBytes(out *[]byte) { + e.reset() + if out == nil { + out = &bytesEncAppenderDefOut + } + e.e.resetOutBytes(out) +} + +func (helperEncDriverBincIO) newEncoderBytes(out *[]byte, h Handle) *encoderBincIO { + var c1 encoderBincIO + c1.bytes = true + c1.init(h) + c1.ResetBytes(out) + return &c1 +} + +func (helperEncDriverBincIO) newEncoderIO(out io.Writer, h Handle) *encoderBincIO { + var c1 encoderBincIO + c1.bytes = false + c1.init(h) + c1.Reset(out) + return &c1 +} + +func (helperEncDriverBincIO) encFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathEsBincIO) (f *fastpathEBincIO, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperEncDriverBincIO) encFindRtidFn(s []encRtidFnBincIO, rtid uintptr) (i uint, fn *encFnBincIO) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperEncDriverBincIO) encFromRtidFnSlice(fns *atomicRtidFnSlice) (s []encRtidFnBincIO) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]encRtidFnBincIO](v)) + } + return +} + +func (dh helperEncDriverBincIO) encFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, + x *BasicHandle, fp *fastpathEsBincIO, checkExt bool) (fn *encFnBincIO) { + return dh.encFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperEncDriverBincIO) encFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsBincIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnBincIO) { + rtid := rt2id(rt) + var sp []encRtidFnBincIO = dh.encFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.encFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.encFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperEncDriverBincIO) encFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsBincIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnBincIO) { + + fn = dh.encFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []encRtidFnBincIO + mu.Lock() + sp = dh.encFromRtidFnSlice(fns) + + if sp == nil { + sp = []encRtidFnBincIO{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.encFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]encRtidFnBincIO, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = encRtidFnBincIO{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperEncDriverBincIO) encFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathEsBincIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnBincIO) { + fn = new(encFnBincIO) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + if rtid == timeTypId && timeBuiltin { + fn.fe = (*encoderBincIO).kTime + } else if rtid == rawTypId { + fn.fe = (*encoderBincIO).raw + } else if rtid == rawExtTypId { + fn.fe = (*encoderBincIO).rawExt + fi.addrE = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fe = (*encoderBincIO).ext + if rk == reflect.Struct || rk == reflect.Array { + fi.addrE = true + } + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fe = (*encoderBincIO).selferMarshal + fi.addrE = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fe = (*encoderBincIO).binaryMarshal + fi.addrE = ti.flagBinaryMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fe = (*encoderBincIO).jsonMarshal + fi.addrE = ti.flagJsonMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fe = (*encoderBincIO).textMarshal + fi.addrE = ti.flagTextMarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fe = fp[idx].encfn + } + } else { + + xfe, xrt := dh.encFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf := xfe.encfn + fn.fe = func(e *encoderBincIO, xf *encFnInfo, xrv reflect.Value) { + xfnf(e, xf, rvConvert(xrv, xrt)) + } + } + } + } + if fn.fe == nil { + switch rk { + case reflect.Bool: + fn.fe = (*encoderBincIO).kBool + case reflect.String: + + fn.fe = (*encoderBincIO).kString + case reflect.Int: + fn.fe = (*encoderBincIO).kInt + case reflect.Int8: + fn.fe = (*encoderBincIO).kInt8 + case reflect.Int16: + fn.fe = (*encoderBincIO).kInt16 + case reflect.Int32: + fn.fe = (*encoderBincIO).kInt32 + case reflect.Int64: + fn.fe = (*encoderBincIO).kInt64 + case reflect.Uint: + fn.fe = (*encoderBincIO).kUint + case reflect.Uint8: + fn.fe = (*encoderBincIO).kUint8 + case reflect.Uint16: + fn.fe = (*encoderBincIO).kUint16 + case reflect.Uint32: + fn.fe = (*encoderBincIO).kUint32 + case reflect.Uint64: + fn.fe = (*encoderBincIO).kUint64 + case reflect.Uintptr: + fn.fe = (*encoderBincIO).kUintptr + case reflect.Float32: + fn.fe = (*encoderBincIO).kFloat32 + case reflect.Float64: + fn.fe = (*encoderBincIO).kFloat64 + case reflect.Complex64: + fn.fe = (*encoderBincIO).kComplex64 + case reflect.Complex128: + fn.fe = (*encoderBincIO).kComplex128 + case reflect.Chan: + fn.fe = (*encoderBincIO).kChan + case reflect.Slice: + fn.fe = (*encoderBincIO).kSlice + case reflect.Array: + fn.fe = (*encoderBincIO).kArray + case reflect.Struct: + if ti.simple { + fn.fe = (*encoderBincIO).kStructSimple + } else { + fn.fe = (*encoderBincIO).kStruct + } + case reflect.Map: + fn.fe = (*encoderBincIO).kMap + case reflect.Interface: + + fn.fe = (*encoderBincIO).kErr + default: + + fn.fe = (*encoderBincIO).kErr + } + } + } + return +} +func (d *decoderBincIO) rawExt(f *decFnInfo, rv reflect.Value) { + d.d.DecodeRawExt(rv2i(rv).(*RawExt)) +} + +func (d *decoderBincIO) ext(f *decFnInfo, rv reflect.Value) { + d.d.DecodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (d *decoderBincIO) selferUnmarshal(_ *decFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecDecodeSelf(&Decoder{d}) +} + +func (d *decoderBincIO) binaryUnmarshal(_ *decFnInfo, rv reflect.Value) { + bm := rv2i(rv).(encoding.BinaryUnmarshaler) + xbs, _ := d.d.DecodeBytes() + fnerr := bm.UnmarshalBinary(xbs) + halt.onerror(fnerr) +} + +func (d *decoderBincIO) textUnmarshal(_ *decFnInfo, rv reflect.Value) { + tm := rv2i(rv).(encoding.TextUnmarshaler) + fnerr := tm.UnmarshalText(bytesOKs(d.d.DecodeStringAsBytes())) + halt.onerror(fnerr) +} + +func (d *decoderBincIO) jsonUnmarshal(_ *decFnInfo, rv reflect.Value) { + d.jsonUnmarshalV(rv2i(rv).(jsonUnmarshaler)) +} + +func (d *decoderBincIO) jsonUnmarshalV(tm jsonUnmarshaler) { + + halt.onerror(tm.UnmarshalJSON(d.d.nextValueBytes())) +} + +func (d *decoderBincIO) kErr(_ *decFnInfo, rv reflect.Value) { + halt.errorf("unsupported decoding kind: %s, for %#v", rv.Kind(), rv) + +} + +func (d *decoderBincIO) raw(_ *decFnInfo, rv reflect.Value) { + rvSetBytes(rv, d.rawBytes()) +} + +func (d *decoderBincIO) kString(_ *decFnInfo, rv reflect.Value) { + rvSetString(rv, d.detach2Str(d.d.DecodeStringAsBytes())) +} + +func (d *decoderBincIO) kBool(_ *decFnInfo, rv reflect.Value) { + rvSetBool(rv, d.d.DecodeBool()) +} + +func (d *decoderBincIO) kTime(_ *decFnInfo, rv reflect.Value) { + rvSetTime(rv, d.d.DecodeTime()) +} + +func (d *decoderBincIO) kFloat32(_ *decFnInfo, rv reflect.Value) { + rvSetFloat32(rv, d.d.DecodeFloat32()) +} + +func (d *decoderBincIO) kFloat64(_ *decFnInfo, rv reflect.Value) { + rvSetFloat64(rv, d.d.DecodeFloat64()) +} + +func (d *decoderBincIO) kComplex64(_ *decFnInfo, rv reflect.Value) { + rvSetComplex64(rv, complex(d.d.DecodeFloat32(), 0)) +} + +func (d *decoderBincIO) kComplex128(_ *decFnInfo, rv reflect.Value) { + rvSetComplex128(rv, complex(d.d.DecodeFloat64(), 0)) +} + +func (d *decoderBincIO) kInt(_ *decFnInfo, rv reflect.Value) { + rvSetInt(rv, int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))) +} + +func (d *decoderBincIO) kInt8(_ *decFnInfo, rv reflect.Value) { + rvSetInt8(rv, int8(chkOvf.IntV(d.d.DecodeInt64(), 8))) +} + +func (d *decoderBincIO) kInt16(_ *decFnInfo, rv reflect.Value) { + rvSetInt16(rv, int16(chkOvf.IntV(d.d.DecodeInt64(), 16))) +} + +func (d *decoderBincIO) kInt32(_ *decFnInfo, rv reflect.Value) { + rvSetInt32(rv, int32(chkOvf.IntV(d.d.DecodeInt64(), 32))) +} + +func (d *decoderBincIO) kInt64(_ *decFnInfo, rv reflect.Value) { + rvSetInt64(rv, d.d.DecodeInt64()) +} + +func (d *decoderBincIO) kUint(_ *decFnInfo, rv reflect.Value) { + rvSetUint(rv, uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderBincIO) kUintptr(_ *decFnInfo, rv reflect.Value) { + rvSetUintptr(rv, uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderBincIO) kUint8(_ *decFnInfo, rv reflect.Value) { + rvSetUint8(rv, uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))) +} + +func (d *decoderBincIO) kUint16(_ *decFnInfo, rv reflect.Value) { + rvSetUint16(rv, uint16(chkOvf.UintV(d.d.DecodeUint64(), 16))) +} + +func (d *decoderBincIO) kUint32(_ *decFnInfo, rv reflect.Value) { + rvSetUint32(rv, uint32(chkOvf.UintV(d.d.DecodeUint64(), 32))) +} + +func (d *decoderBincIO) kUint64(_ *decFnInfo, rv reflect.Value) { + rvSetUint64(rv, d.d.DecodeUint64()) +} + +func (d *decoderBincIO) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) { + + n := d.naked() + d.d.DecodeNaked() + + if decFailNonEmptyIntf && f.ti.numMeth > 0 { + halt.errorf("cannot decode non-nil codec value into nil %v (%v methods)", f.ti.rt, f.ti.numMeth) + } + + switch n.v { + case valueTypeMap: + mtid := d.mtid + if mtid == 0 { + if d.jsms { + mtid = mapStrIntfTypId + } else { + mtid = mapIntfIntfTypId + } + } + if mtid == mapStrIntfTypId { + var v2 map[string]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if mtid == mapIntfIntfTypId { + var v2 map[interface{}]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.mtr { + rvn = reflect.New(d.h.MapType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + + rvn = rvZeroAddrK(d.h.MapType, reflect.Map) + d.decodeValue(rvn, nil) + } + case valueTypeArray: + if d.stid == 0 || d.stid == intfSliceTypId { + var v2 []interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.str { + rvn = reflect.New(d.h.SliceType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + rvn = rvZeroAddrK(d.h.SliceType, reflect.Slice) + d.decodeValue(rvn, nil) + } + if d.h.PreferArrayOverSlice { + rvn = rvGetArray4Slice(rvn) + } + case valueTypeExt: + tag, bytes := n.u, n.l + bfn := d.h.getExtForTag(tag) + var re = RawExt{Tag: tag} + if bytes == nil { + + if bfn == nil { + d.decode(&re.Value) + rvn = rv4iptr(&re).Elem() + } else if bfn.ext == SelfExt { + rvn = rvZeroAddrK(bfn.rt, bfn.rt.Kind()) + d.decodeValue(rvn, d.fnNoExt(bfn.rt)) + } else { + rvn = reflect.New(bfn.rt) + d.interfaceExtConvertAndDecode(rv2i(rvn), bfn.ext) + rvn = rvn.Elem() + } + } else { + + if bfn == nil { + re.setData(bytes, false) + rvn = rv4iptr(&re).Elem() + } else { + rvn = reflect.New(bfn.rt) + if bfn.ext == SelfExt { + sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) }) + } else { + bfn.ext.ReadExt(rv2i(rvn), bytes) + } + rvn = rvn.Elem() + } + } + + if d.h.PreferPointerForStructOrArray && rvn.CanAddr() { + if rk := rvn.Kind(); rk == reflect.Array || rk == reflect.Struct { + rvn = rvn.Addr() + } + } + case valueTypeNil: + + case valueTypeInt: + rvn = n.ri() + case valueTypeUint: + rvn = n.ru() + case valueTypeFloat: + rvn = n.rf() + case valueTypeBool: + rvn = n.rb() + case valueTypeString, valueTypeSymbol: + rvn = n.rs() + case valueTypeBytes: + rvn = n.rl() + case valueTypeTime: + rvn = n.rt() + default: + halt.errorStr2("kInterfaceNaked: unexpected valueType: ", n.v.String()) + } + return +} + +func (d *decoderBincIO) kInterface(f *decFnInfo, rv reflect.Value) { + + isnilrv := rvIsNil(rv) + + var rvn reflect.Value + + if d.h.InterfaceReset { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } else if !isnilrv { + decSetNonNilRV2Zero4Intf(rv) + } + return + } + } else if isnilrv { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } + return + } + } else { + + rvn = rv.Elem() + } + + canDecode, _ := isDecodeable(rvn) + + if !canDecode { + rvn2 := d.oneShotAddrRV(rvn.Type(), rvn.Kind()) + rvSetDirect(rvn2, rvn) + rvn = rvn2 + } + + d.decodeValue(rvn, nil) + rvSetIntf(rv, rvn) +} + +func (d *decoderBincIO) kStructField(si *structFieldInfo, rv reflect.Value) { + if d.d.TryNil() { + rv = si.fieldNoAlloc(rv, true) + if rv.IsValid() { + decSetNonNilRV2Zero(rv) + } + } else if si.decBuiltin { + rv = rvAddr(si.fieldAlloc(rv), si.ptrTyp) + d.decode(rv2i(rv)) + } else { + fn := d.fn(si.baseTyp) + rv = si.fieldAlloc(rv) + if fn.i.addrD { + rv = rvAddr(rv, si.ptrTyp) + } + fn.fd(d, &fn.i, rv) + } +} + +func (d *decoderBincIO) kStructSimple(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var rvkencname []byte + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderBincIO) kStruct(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + var mf MissingFielder + if ti.flagMissingFielder { + mf = rv2i(rv).(MissingFielder) + } else if ti.flagMissingFielderPtr { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder) + } + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var name2 []byte + var rvkencname []byte + tkt := ti.keyType + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + + if tkt == valueTypeString { + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + } else if tkt == valueTypeInt { + rvkencname = strconv.AppendInt(d.b[:0], d.d.DecodeInt64(), 10) + } else if tkt == valueTypeUint { + rvkencname = strconv.AppendUint(d.b[:0], d.d.DecodeUint64(), 10) + } else if tkt == valueTypeFloat { + rvkencname = strconv.AppendFloat(d.b[:0], d.d.DecodeFloat64(), 'f', -1, 64) + } else { + halt.errorStr2("invalid struct key type: ", ti.keyType.String()) + } + + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else if mf != nil { + + name2 = append(name2[:0], rvkencname...) + var f interface{} + d.decode(&f) + if !mf.CodecMissingField(name2, f) && d.h.ErrorIfNoField { + halt.errorStr2("no matching struct field when decoding stream map with key: ", stringView(name2)) + } + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderBincIO) kSlice(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + rvCanset := rv.CanSet() + + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + rvbs := rvGetBytes(rv) + if rvCanset { + bs2, bst := d.decodeBytesInto(rvbs, false) + if bst != dBytesIntoParamOut { + rvSetBytes(rv, bs2) + } + } else { + + d.decodeBytesInto(rvbs[:len(rvbs):len(rvbs)], true) + } + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset { + if rvIsNil(rv) { + rvSetDirect(rv, rvSliceZeroCap(ti.rt)) + } else { + rvSetSliceLen(rv, 0) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem0Mut := !scalarBitset.isset(ti.elemkind) + rtelem := ti.elem + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnBincIO + + var rvChanged bool + + var rv0 = rv + var rv9 reflect.Value + + rvlen := rvLenSlice(rv) + rvcap := rvCapSlice(rv) + maxInitLen := d.maxInitLen() + hasLen := containerLenS >= 0 + if hasLen { + if containerLenS > rvcap { + oldRvlenGtZero := rvlen > 0 + rvlen1 := int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + if rvlen1 == rvlen { + } else if rvlen1 <= rvcap { + if rvCanset { + rvlen = rvlen1 + rvSetSliceLen(rv, rvlen) + } + } else if rvCanset { + rvlen = rvlen1 + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + if rvChanged && oldRvlenGtZero && rtelem0Mut { + rvCopySlice(rv, rv0, rtelem) + } + } else if containerLenS != rvlen { + if rvCanset { + rvlen = containerLenS + rvSetSliceLen(rv, rvlen) + } + } + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } + + var j int + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if rvCanset { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + + if rvlen < rvcap { + rvlen = rvcap + if rvCanset { + rvSetSliceLen(rv, rvlen) + } else if rvChanged { + rv = rvSlice(rv, rvlen) + } else { + halt.onerror(errExpandSliceCannotChange) + } + } else { + if !(rvCanset || rvChanged) { + halt.onerror(errExpandSliceCannotChange) + } + rv, rvcap, rvCanset = rvGrowSlice(rv, f.ti, rvcap, 1) + + rvlen = rvcap + rvChanged = !rvCanset + } + } + + rv9 = rvArrayIndex(rv, j, f.ti, true) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if j < rvlen { + if rvCanset { + rvSetSliceLen(rv, j) + } else if rvChanged { + rv = rvSlice(rv, j) + } + + } else if j == 0 && rvIsNil(rv) { + if rvCanset { + rv = rvSliceZeroCap(ti.rt) + rvCanset = false + rvChanged = true + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } +} + +func (d *decoderBincIO) kArray(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + ctyp := d.d.ContainerType() + if handleBytesWithinKArray && (ctyp == valueTypeBytes || ctyp == valueTypeString) { + + if ti.elemkind != uint8(reflect.Uint8) { + halt.errorf("bytes/string in stream can decode into array of bytes, but not %v", ti.rt) + } + rvbs := rvGetArrayBytes(rv, nil) + d.decodeBytesInto(rvbs, true) + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var rv9 reflect.Value + + rvlen := rv.Len() + hasLen := containerLenS >= 0 + if hasLen && containerLenS > rvlen { + halt.errorf("cannot decode into array with length: %v, less than container length: %v", any(rvlen), any(containerLenS)) + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + var fn *decFnBincIO + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } else { + fn = d.fn(rtelem) + } + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + d.arrayCannotExpand(rvlen, j+1) + d.swallow() + continue + } + + rv9 = rvArrayIndex(rv, j, f.ti, false) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderBincIO) kChan(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + if ti.chandir&uint8(reflect.SendDir) == 0 { + halt.errorStr("receive-only channel cannot be decoded") + } + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + bs2, _ := d.d.DecodeBytes() + irv := rv2i(rv) + ch, ok := irv.(chan<- byte) + if !ok { + ch = irv.(chan byte) + } + for _, b := range bs2 { + ch <- b + } + return + } + + var rvCanset = rv.CanSet() + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset && rvIsNil(rv) { + rvSetDirect(rv, reflect.MakeChan(ti.rt, 0)) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + useTransient := decUseTransient && ti.elemkind != byte(reflect.Ptr) && ti.tielem.flagCanTransient + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnBincIO + + var rvChanged bool + var rv0 = rv + var rv9 reflect.Value + + var rvlen int + hasLen := containerLenS >= 0 + maxInitLen := d.maxInitLen() + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if hasLen { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + } else { + rvlen = decDefChanCap + } + if rvCanset { + rv = reflect.MakeChan(ti.rt, rvlen) + rvChanged = true + } else { + halt.errorStr("cannot decode into non-settable chan") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if rv9.IsValid() { + rvSetZero(rv9) + } else if useTransient { + rv9 = d.perType.TransientAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } else { + rv9 = rvZeroAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } + if !d.d.TryNil() { + d.decodeValueNoCheckNil(rv9, fn) + } + rv.Send(rv9) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } + +} + +func (d *decoderBincIO) kMap(f *decFnInfo, rv reflect.Value) { + _ = d.d + containerLen := d.mapStart(d.d.ReadMapStart()) + ti := f.ti + if rvIsNil(rv) { + rvlen := int(decInferLen(containerLen, d.maxInitLen(), uint(ti.keysize+ti.elemsize))) + rvSetDirect(rv, makeMapReflect(ti.rt, rvlen)) + } + + if containerLen == 0 { + d.mapEnd() + return + } + + ktype, vtype := ti.key, ti.elem + ktypeId := rt2id(ktype) + vtypeKind := reflect.Kind(ti.elemkind) + ktypeKind := reflect.Kind(ti.keykind) + mparams := getMapReqParams(ti) + + vtypePtr := vtypeKind == reflect.Ptr + ktypePtr := ktypeKind == reflect.Ptr + + vTransient := decUseTransient && !vtypePtr && ti.tielem.flagCanTransient + + kTransient := vTransient && !ktypePtr && ti.tikey.flagCanTransient + + var vtypeElem reflect.Type + + var keyFn, valFn *decFnBincIO + var ktypeLo, vtypeLo = ktype, vtype + + if ktypeKind == reflect.Ptr { + for ktypeLo = ktype.Elem(); ktypeLo.Kind() == reflect.Ptr; ktypeLo = ktypeLo.Elem() { + } + } + + if vtypePtr { + vtypeElem = vtype.Elem() + for vtypeLo = vtypeElem; vtypeLo.Kind() == reflect.Ptr; vtypeLo = vtypeLo.Elem() { + } + } + + rvkMut := !scalarBitset.isset(ti.keykind) + rvvMut := !scalarBitset.isset(ti.elemkind) + rvvCanNil := isnilBitset.isset(ti.elemkind) + + var rvk, rvkn, rvv, rvvn, rvva, rvvz reflect.Value + + var doMapGet, doMapSet bool + + if !d.h.MapValueReset { + if rvvMut && (vtypeKind != reflect.Interface || !d.h.InterfaceReset) { + doMapGet = true + rvva = mapAddrLoopvarRV(vtype, vtypeKind) + } + } + + ktypeIsString := ktypeId == stringTypId + ktypeIsIntf := ktypeId == intfTypId + hasLen := containerLen >= 0 + + var kstr2bs []byte + var kstr string + + var mapKeyStringSharesBytesBuf bool + var att dBytesAttachState + + var vElem, kElem reflect.Type + kbuiltin := ti.tikey.flagDecBuiltin && ti.keykind != uint8(reflect.Slice) + vbuiltin := ti.tielem.flagDecBuiltin + if kbuiltin && ktypePtr { + kElem = ti.key.Elem() + } + if vbuiltin && vtypePtr { + vElem = ti.elem.Elem() + } + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + mapKeyStringSharesBytesBuf = false + kstr = "" + if j == 0 { + + if kTransient { + rvk = d.perType.TransientAddr2K(ktype, ktypeKind) + } else { + rvk = rvZeroAddrK(ktype, ktypeKind) + } + if !rvkMut { + rvkn = rvk + } + if !rvvMut { + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + } + if !ktypeIsString && keyFn == nil { + keyFn = d.fn(ktypeLo) + } + if valFn == nil { + valFn = d.fn(vtypeLo) + } + } else if rvkMut { + rvSetZero(rvk) + } else { + rvk = rvkn + } + + d.mapElemKey(j == 0) + + if d.d.TryNil() { + rvSetZero(rvk) + } else if ktypeIsString { + kstr2bs, att = d.d.DecodeStringAsBytes() + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, att) + rvSetString(rvk, kstr) + } else { + if kbuiltin { + if ktypePtr { + if rvIsNil(rvk) { + rvSetDirect(rvk, reflect.New(kElem)) + } + d.decode(rv2i(rvk)) + } else { + d.decode(rv2i(rvAddr(rvk, ti.tikey.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvk, keyFn) + } + + if ktypeIsIntf { + if rvk2 := rvk.Elem(); rvk2.IsValid() && rvk2.Type() == uint8SliceTyp { + kstr2bs = rvGetBytes(rvk2) + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, dBytesAttachView) + rvSetIntf(rvk, rv4istr(kstr)) + } + + } + } + + if mapKeyStringSharesBytesBuf && d.bufio { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + mapKeyStringSharesBytesBuf = false + } + + d.mapElemValue() + + if d.d.TryNil() { + if mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + + if !rvvz.IsValid() { + rvvz = rvZeroK(vtype, vtypeKind) + } + mapSet(rv, rvk, rvvz, mparams) + continue + } + + doMapSet = true + + if !rvvMut { + rvv = rvvn + } else if !doMapGet { + goto NEW_RVV + } else { + rvv = mapGet(rv, rvk, rvva, mparams) + if !rvv.IsValid() || (rvvCanNil && rvIsNil(rvv)) { + goto NEW_RVV + } + switch vtypeKind { + case reflect.Ptr, reflect.Map: + doMapSet = false + case reflect.Interface: + + rvvn = rvv.Elem() + if k := rvvn.Kind(); (k == reflect.Ptr || k == reflect.Map) && !rvIsNil(rvvn) { + d.decodeValueNoCheckNil(rvvn, nil) + continue + } + + rvvn = rvZeroAddrK(vtype, vtypeKind) + rvSetIntf(rvvn, rvv) + rvv = rvvn + default: + + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + rvSetDirect(rvvn, rvv) + rvv = rvvn + } + } + goto DECODE_VALUE_NO_CHECK_NIL + + NEW_RVV: + if vtypePtr { + rvv = reflect.New(vtypeElem) + } else if vTransient { + rvv = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvv = rvZeroAddrK(vtype, vtypeKind) + } + + DECODE_VALUE_NO_CHECK_NIL: + if doMapSet && mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + if vbuiltin { + if vtypePtr { + if rvIsNil(rvv) { + rvSetDirect(rvv, reflect.New(vElem)) + } + d.decode(rv2i(rvv)) + } else { + d.decode(rv2i(rvAddr(rvv, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvv, valFn) + } + if doMapSet { + mapSet(rv, rvk, rvv, mparams) + } + } + + d.mapEnd() +} + +func (d *decoderBincIO) init(h Handle) { + initHandle(h) + callMake(&d.d) + d.hh = h + d.h = h.getBasicHandle() + + d.err = errDecoderNotInitialized + + if d.h.InternString && d.is == nil { + d.is.init() + } + + d.fp = d.d.init(h, &d.decoderBase, d).(*fastpathDsBincIO) + + if d.bytes { + d.rtidFn = &d.h.rtidFnsDecBytes + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtBytes + } else { + d.bufio = d.h.ReaderBufferSize > 0 + d.rtidFn = &d.h.rtidFnsDecIO + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtIO + } + + d.reset() + +} + +func (d *decoderBincIO) reset() { + d.d.reset() + d.err = nil + d.c = 0 + d.depth = 0 + d.calls = 0 + + d.maxdepth = decDefMaxDepth + if d.h.MaxDepth > 0 { + d.maxdepth = d.h.MaxDepth + } + d.mtid = 0 + d.stid = 0 + d.mtr = false + d.str = false + if d.h.MapType != nil { + d.mtid = rt2id(d.h.MapType) + _, d.mtr = fastpathAvIndex(d.mtid) + } + if d.h.SliceType != nil { + d.stid = rt2id(d.h.SliceType) + _, d.str = fastpathAvIndex(d.stid) + } +} + +func (d *decoderBincIO) Reset(r io.Reader) { + if d.bytes { + halt.onerror(errDecNoResetBytesWithReader) + } + d.reset() + if r == nil { + r = &eofReader + } + d.d.resetInIO(r) +} + +func (d *decoderBincIO) ResetBytes(in []byte) { + if !d.bytes { + halt.onerror(errDecNoResetReaderWithBytes) + } + d.resetBytes(in) +} + +func (d *decoderBincIO) resetBytes(in []byte) { + d.reset() + if in == nil { + in = zeroByteSlice + } + d.d.resetInBytes(in) +} + +func (d *decoderBincIO) ResetString(s string) { + d.ResetBytes(bytesView(s)) +} + +func (d *decoderBincIO) Decode(v interface{}) (err error) { + + defer panicValToErr(d, callRecoverSentinel, &d.err, &err, debugging) + d.mustDecode(v) + return +} + +func (d *decoderBincIO) MustDecode(v interface{}) { + defer panicValToErr(d, callRecoverSentinel, &d.err, nil, true) + d.mustDecode(v) + return +} + +func (d *decoderBincIO) mustDecode(v interface{}) { + halt.onerror(d.err) + if d.hh == nil { + halt.onerror(errNoFormatHandle) + } + + d.calls++ + d.decode(v) + d.calls-- +} + +func (d *decoderBincIO) Release() {} + +func (d *decoderBincIO) swallow() { + d.d.nextValueBytes() +} + +func (d *decoderBincIO) nextValueBytes() []byte { + return d.d.nextValueBytes() +} + +func (d *decoderBincIO) decode(iv interface{}) { + _ = d.d + + rv, ok := isNil(iv, true) + if ok { + halt.onerror(errCannotDecodeIntoNil) + } + + switch v := iv.(type) { + + case *string: + *v = d.detach2Str(d.d.DecodeStringAsBytes()) + case *bool: + *v = d.d.DecodeBool() + case *int: + *v = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + case *int8: + *v = int8(chkOvf.IntV(d.d.DecodeInt64(), 8)) + case *int16: + *v = int16(chkOvf.IntV(d.d.DecodeInt64(), 16)) + case *int32: + *v = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + case *int64: + *v = d.d.DecodeInt64() + case *uint: + *v = uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *uint8: + *v = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + case *uint16: + *v = uint16(chkOvf.UintV(d.d.DecodeUint64(), 16)) + case *uint32: + *v = uint32(chkOvf.UintV(d.d.DecodeUint64(), 32)) + case *uint64: + *v = d.d.DecodeUint64() + case *uintptr: + *v = uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *float32: + *v = d.d.DecodeFloat32() + case *float64: + *v = d.d.DecodeFloat64() + case *complex64: + *v = complex(d.d.DecodeFloat32(), 0) + case *complex128: + *v = complex(d.d.DecodeFloat64(), 0) + case *[]byte: + *v, _ = d.decodeBytesInto(*v, false) + case []byte: + + d.decodeBytesInto(v[:len(v):len(v)], true) + case *time.Time: + *v = d.d.DecodeTime() + case *Raw: + *v = d.rawBytes() + + case *interface{}: + d.decodeValue(rv4iptr(v), nil) + + case reflect.Value: + if ok, _ = isDecodeable(v); !ok { + d.haltAsNotDecodeable(v) + } + d.decodeValue(v, nil) + + default: + + if skipFastpathTypeSwitchInDirectCall || !d.dh.fastpathDecodeTypeSwitch(iv, d) { + if !rv.IsValid() { + rv = reflect.ValueOf(iv) + } + if ok, _ = isDecodeable(rv); !ok { + d.haltAsNotDecodeable(rv) + } + d.decodeValue(rv, nil) + } + } +} + +func (d *decoderBincIO) decodeValue(rv reflect.Value, fn *decFnBincIO) { + if d.d.TryNil() { + decSetNonNilRV2Zero(rv) + } else { + d.decodeValueNoCheckNil(rv, fn) + } +} + +func (d *decoderBincIO) decodeValueNoCheckNil(rv reflect.Value, fn *decFnBincIO) { + + var rvp reflect.Value + var rvpValid bool +PTR: + if rv.Kind() == reflect.Ptr { + rvpValid = true + if rvIsNil(rv) { + rvSetDirect(rv, reflect.New(rv.Type().Elem())) + } + rvp = rv + rv = rv.Elem() + goto PTR + } + + if fn == nil { + fn = d.fn(rv.Type()) + } + if fn.i.addrD { + if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else if fn.i.addrDf { + halt.errorStr("cannot decode into a non-pointer value") + } + } + fn.fd(d, &fn.i, rv) +} + +func (d *decoderBincIO) decodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + d.decodeValue(baseRV(v), d.fn(t)) + } else { + d.decodeValue(baseRV(v), d.fnNoExt(t)) + } +} + +func (d *decoderBincIO) structFieldNotFound(index int, rvkencname string) { + + if d.h.ErrorIfNoField { + if index >= 0 { + halt.errorInt("no matching struct field found when decoding stream array at index ", int64(index)) + } else if rvkencname != "" { + halt.errorStr2("no matching struct field found when decoding stream map with key ", rvkencname) + } + } + d.swallow() +} + +func (d *decoderBincIO) decodeBytesInto(out []byte, mustFit bool) (v []byte, state dBytesIntoState) { + v, att := d.d.DecodeBytes() + if cap(v) == 0 || (att >= dBytesAttachViewZerocopy && !mustFit) { + + return + } + if len(v) == 0 { + v = zeroByteSlice + return + } + if len(out) == len(v) { + state = dBytesIntoParamOut + } else if cap(out) >= len(v) { + out = out[:len(v)] + state = dBytesIntoParamOutSlice + } else if mustFit { + halt.errorf("bytes capacity insufficient for decoded bytes: got/expected: %d/%d", len(v), len(out)) + } else { + out = make([]byte, len(v)) + state = dBytesIntoNew + } + copy(out, v) + v = out + return +} + +func (d *decoderBincIO) rawBytes() (v []byte) { + + v = d.d.nextValueBytes() + if d.bytes && !d.h.ZeroCopy { + vv := make([]byte, len(v)) + copy(vv, v) + v = vv + } + return +} + +func (d *decoderBincIO) wrapErr(v error, err *error) { + *err = wrapCodecErr(v, d.hh.Name(), d.d.NumBytesRead(), false) +} + +func (d *decoderBincIO) NumBytesRead() int { + return d.d.NumBytesRead() +} + +func (d *decoderBincIO) containerNext(j, containerLen int, hasLen bool) bool { + + if hasLen { + return j < containerLen + } + return !d.d.CheckBreak() +} + +func (d *decoderBincIO) mapElemKey(firstTime bool) { + d.d.ReadMapElemKey(firstTime) + d.c = containerMapKey +} + +func (d *decoderBincIO) mapElemValue() { + d.d.ReadMapElemValue() + d.c = containerMapValue +} + +func (d *decoderBincIO) mapEnd() { + d.d.ReadMapEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderBincIO) arrayElem(firstTime bool) { + d.d.ReadArrayElem(firstTime) + d.c = containerArrayElem +} + +func (d *decoderBincIO) arrayEnd() { + d.d.ReadArrayEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderBincIO) interfaceExtConvertAndDecode(v interface{}, ext InterfaceExt) { + + var vv interface{} + d.decode(&vv) + ext.UpdateExt(v, vv) + +} + +func (d *decoderBincIO) fn(t reflect.Type) *decFnBincIO { + return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false) +} + +func (d *decoderBincIO) fnNoExt(t reflect.Type) *decFnBincIO { + return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true) +} + +func (helperDecDriverBincIO) newDecoderBytes(in []byte, h Handle) *decoderBincIO { + var c1 decoderBincIO + c1.bytes = true + c1.init(h) + c1.ResetBytes(in) + return &c1 +} + +func (helperDecDriverBincIO) newDecoderIO(in io.Reader, h Handle) *decoderBincIO { + var c1 decoderBincIO + c1.init(h) + c1.Reset(in) + return &c1 +} + +func (helperDecDriverBincIO) decFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathDsBincIO) (f *fastpathDBincIO, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperDecDriverBincIO) decFindRtidFn(s []decRtidFnBincIO, rtid uintptr) (i uint, fn *decFnBincIO) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperDecDriverBincIO) decFromRtidFnSlice(fns *atomicRtidFnSlice) (s []decRtidFnBincIO) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]decRtidFnBincIO](v)) + } + return +} + +func (dh helperDecDriverBincIO) decFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, x *BasicHandle, fp *fastpathDsBincIO, + checkExt bool) (fn *decFnBincIO) { + return dh.decFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperDecDriverBincIO) decFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsBincIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnBincIO) { + rtid := rt2id(rt) + var sp []decRtidFnBincIO = dh.decFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.decFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.decFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperDecDriverBincIO) decFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsBincIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnBincIO) { + + fn = dh.decFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []decRtidFnBincIO + mu.Lock() + sp = dh.decFromRtidFnSlice(fns) + + if sp == nil { + sp = []decRtidFnBincIO{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.decFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]decRtidFnBincIO, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = decRtidFnBincIO{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperDecDriverBincIO) decFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathDsBincIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnBincIO) { + fn = new(decFnBincIO) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + fi.addrDf = true + + if rtid == timeTypId && timeBuiltin { + fn.fd = (*decoderBincIO).kTime + } else if rtid == rawTypId { + fn.fd = (*decoderBincIO).raw + } else if rtid == rawExtTypId { + fn.fd = (*decoderBincIO).rawExt + fi.addrD = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fd = (*decoderBincIO).ext + fi.addrD = true + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fd = (*decoderBincIO).selferUnmarshal + fi.addrD = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fd = (*decoderBincIO).binaryUnmarshal + fi.addrD = ti.flagBinaryUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fd = (*decoderBincIO).jsonUnmarshal + fi.addrD = ti.flagJsonUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fd = (*decoderBincIO).textUnmarshal + fi.addrD = ti.flagTextUnmarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fd = fp[idx].decfn + fi.addrD = true + fi.addrDf = false + if rk == reflect.Array { + fi.addrD = false + } + } + } else { + + xfe, xrt := dh.decFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf2 := xfe.decfn + if rk == reflect.Array { + fi.addrD = false + fn.fd = func(d *decoderBincIO, xf *decFnInfo, xrv reflect.Value) { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } else { + fi.addrD = true + fi.addrDf = false + xptr2rt := reflect.PointerTo(xrt) + fn.fd = func(d *decoderBincIO, xf *decFnInfo, xrv reflect.Value) { + if xrv.Kind() == reflect.Ptr { + xfnf2(d, xf, rvConvert(xrv, xptr2rt)) + } else { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } + } + } + } + } + if fn.fd == nil { + switch rk { + case reflect.Bool: + fn.fd = (*decoderBincIO).kBool + case reflect.String: + fn.fd = (*decoderBincIO).kString + case reflect.Int: + fn.fd = (*decoderBincIO).kInt + case reflect.Int8: + fn.fd = (*decoderBincIO).kInt8 + case reflect.Int16: + fn.fd = (*decoderBincIO).kInt16 + case reflect.Int32: + fn.fd = (*decoderBincIO).kInt32 + case reflect.Int64: + fn.fd = (*decoderBincIO).kInt64 + case reflect.Uint: + fn.fd = (*decoderBincIO).kUint + case reflect.Uint8: + fn.fd = (*decoderBincIO).kUint8 + case reflect.Uint16: + fn.fd = (*decoderBincIO).kUint16 + case reflect.Uint32: + fn.fd = (*decoderBincIO).kUint32 + case reflect.Uint64: + fn.fd = (*decoderBincIO).kUint64 + case reflect.Uintptr: + fn.fd = (*decoderBincIO).kUintptr + case reflect.Float32: + fn.fd = (*decoderBincIO).kFloat32 + case reflect.Float64: + fn.fd = (*decoderBincIO).kFloat64 + case reflect.Complex64: + fn.fd = (*decoderBincIO).kComplex64 + case reflect.Complex128: + fn.fd = (*decoderBincIO).kComplex128 + case reflect.Chan: + fn.fd = (*decoderBincIO).kChan + case reflect.Slice: + fn.fd = (*decoderBincIO).kSlice + case reflect.Array: + fi.addrD = false + fn.fd = (*decoderBincIO).kArray + case reflect.Struct: + if ti.simple { + fn.fd = (*decoderBincIO).kStructSimple + } else { + fn.fd = (*decoderBincIO).kStruct + } + case reflect.Map: + fn.fd = (*decoderBincIO).kMap + case reflect.Interface: + + fn.fd = (*decoderBincIO).kInterface + default: + + fn.fd = (*decoderBincIO).kErr + } + } + } + return +} +func (e *bincEncDriverIO) EncodeNil() { + e.w.writen1(bincBdNil) +} + +func (e *bincEncDriverIO) EncodeTime(t time.Time) { + if t.IsZero() { + e.EncodeNil() + } else { + bs := bincEncodeTime(t) + e.w.writen1(bincVdTimestamp<<4 | uint8(len(bs))) + e.w.writeb(bs) + } +} + +func (e *bincEncDriverIO) EncodeBool(b bool) { + if b { + e.w.writen1(bincVdSpecial<<4 | bincSpTrue) + } else { + e.w.writen1(bincVdSpecial<<4 | bincSpFalse) + } +} + +func (e *bincEncDriverIO) encSpFloat(f float64) (done bool) { + if f == 0 { + e.w.writen1(bincVdSpecial<<4 | bincSpZeroFloat) + } else if math.IsNaN(float64(f)) { + e.w.writen1(bincVdSpecial<<4 | bincSpNan) + } else if math.IsInf(float64(f), +1) { + e.w.writen1(bincVdSpecial<<4 | bincSpPosInf) + } else if math.IsInf(float64(f), -1) { + e.w.writen1(bincVdSpecial<<4 | bincSpNegInf) + } else { + return + } + return true +} + +func (e *bincEncDriverIO) EncodeFloat32(f float32) { + if !e.encSpFloat(float64(f)) { + e.w.writen1(bincVdFloat<<4 | bincFlBin32) + e.w.writen4(bigen.PutUint32(math.Float32bits(f))) + } +} + +func (e *bincEncDriverIO) EncodeFloat64(f float64) { + if e.encSpFloat(f) { + return + } + b := bigen.PutUint64(math.Float64bits(f)) + if bincDoPrune { + i := 7 + for ; i >= 0 && (b[i] == 0); i-- { + } + i++ + if i <= 6 { + e.w.writen1(bincVdFloat<<4 | 0x8 | bincFlBin64) + e.w.writen1(byte(i)) + e.w.writeb(b[:i]) + return + } + } + e.w.writen1(bincVdFloat<<4 | bincFlBin64) + e.w.writen8(b) +} + +func (e *bincEncDriverIO) encIntegerPrune32(bd byte, pos bool, v uint64) { + b := bigen.PutUint32(uint32(v)) + if bincDoPrune { + i := byte(pruneSignExt(b[:], pos)) + e.w.writen1(bd | 3 - i) + e.w.writeb(b[i:]) + } else { + e.w.writen1(bd | 3) + e.w.writen4(b) + } +} + +func (e *bincEncDriverIO) encIntegerPrune64(bd byte, pos bool, v uint64) { + b := bigen.PutUint64(v) + if bincDoPrune { + i := byte(pruneSignExt(b[:], pos)) + e.w.writen1(bd | 7 - i) + e.w.writeb(b[i:]) + } else { + e.w.writen1(bd | 7) + e.w.writen8(b) + } +} + +func (e *bincEncDriverIO) EncodeInt(v int64) { + if v >= 0 { + e.encUint(bincVdPosInt<<4, true, uint64(v)) + } else if v == -1 { + e.w.writen1(bincVdSpecial<<4 | bincSpNegOne) + } else { + e.encUint(bincVdNegInt<<4, false, uint64(-v)) + } +} + +func (e *bincEncDriverIO) EncodeUint(v uint64) { + e.encUint(bincVdPosInt<<4, true, v) +} + +func (e *bincEncDriverIO) encUint(bd byte, pos bool, v uint64) { + if v == 0 { + e.w.writen1(bincVdSpecial<<4 | bincSpZero) + } else if pos && v >= 1 && v <= 16 { + e.w.writen1(bincVdSmallInt<<4 | byte(v-1)) + } else if v <= math.MaxUint8 { + e.w.writen2(bd, byte(v)) + } else if v <= math.MaxUint16 { + e.w.writen1(bd | 0x01) + e.w.writen2(bigen.PutUint16(uint16(v))) + } else if v <= math.MaxUint32 { + e.encIntegerPrune32(bd, pos, v) + } else { + e.encIntegerPrune64(bd, pos, v) + } +} + +func (e *bincEncDriverIO) EncodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + var bs0, bs []byte + if ext == SelfExt { + bs0 = e.e.blist.get(1024) + bs = bs0 + sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, true) }) + } else { + bs = ext.WriteExt(v) + } + if bs == nil { + e.writeNilBytes() + goto END + } + e.encodeExtPreamble(uint8(xtag), len(bs)) + e.w.writeb(bs) +END: + if ext == SelfExt { + e.e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.e.blist.put(bs0) + } + } +} + +func (e *bincEncDriverIO) EncodeRawExt(re *RawExt) { + e.encodeExtPreamble(uint8(re.Tag), len(re.Data)) + e.w.writeb(re.Data) +} + +func (e *bincEncDriverIO) encodeExtPreamble(xtag byte, length int) { + e.encLen(bincVdCustomExt<<4, uint64(length)) + e.w.writen1(xtag) +} + +func (e *bincEncDriverIO) WriteArrayStart(length int) { + e.encLen(bincVdArray<<4, uint64(length)) +} + +func (e *bincEncDriverIO) WriteMapStart(length int) { + e.encLen(bincVdMap<<4, uint64(length)) +} + +func (e *bincEncDriverIO) WriteArrayEmpty() { + + e.w.writen1(bincVdArray<<4 | uint8(0+4)) +} + +func (e *bincEncDriverIO) WriteMapEmpty() { + + e.w.writen1(bincVdMap<<4 | uint8(0+4)) +} + +func (e *bincEncDriverIO) EncodeSymbol(v string) { + + l := len(v) + if l == 0 { + e.encBytesLen(cUTF8, 0) + return + } else if l == 1 { + e.encBytesLen(cUTF8, 1) + e.w.writen1(v[0]) + return + } + if e.m == nil { + e.m = make(map[string]uint16, 16) + } + ui, ok := e.m[v] + if ok { + if ui <= math.MaxUint8 { + e.w.writen2(bincVdSymbol<<4, byte(ui)) + } else { + e.w.writen1(bincVdSymbol<<4 | 0x8) + e.w.writen2(bigen.PutUint16(ui)) + } + } else { + e.e.seq++ + ui = e.e.seq + e.m[v] = ui + var lenprec uint8 + if l <= math.MaxUint8 { + + } else if l <= math.MaxUint16 { + lenprec = 1 + } else if int64(l) <= math.MaxUint32 { + lenprec = 2 + } else { + lenprec = 3 + } + if ui <= math.MaxUint8 { + e.w.writen2(bincVdSymbol<<4|0x4|lenprec, byte(ui)) + } else { + e.w.writen1(bincVdSymbol<<4 | 0x8 | 0x4 | lenprec) + e.w.writen2(bigen.PutUint16(ui)) + } + if lenprec == 0 { + e.w.writen1(byte(l)) + } else if lenprec == 1 { + e.w.writen2(bigen.PutUint16(uint16(l))) + } else if lenprec == 2 { + e.w.writen4(bigen.PutUint32(uint32(l))) + } else { + e.w.writen8(bigen.PutUint64(uint64(l))) + } + e.w.writestr(v) + } +} + +func (e *bincEncDriverIO) EncodeString(v string) { + if e.h.StringToRaw { + e.encLen(bincVdByteArray<<4, uint64(len(v))) + if len(v) > 0 { + e.w.writestr(v) + } + return + } + e.EncodeStringEnc(cUTF8, v) +} + +func (e *bincEncDriverIO) EncodeStringNoEscape4Json(v string) { e.EncodeString(v) } + +func (e *bincEncDriverIO) EncodeStringEnc(c charEncoding, v string) { + if e.e.c == containerMapKey && c == cUTF8 && (e.h.AsSymbols == 1) { + e.EncodeSymbol(v) + return + } + e.encLen(bincVdString<<4, uint64(len(v))) + if len(v) > 0 { + e.w.writestr(v) + } +} + +func (e *bincEncDriverIO) EncodeStringBytesRaw(v []byte) { + e.encLen(bincVdByteArray<<4, uint64(len(v))) + if len(v) > 0 { + e.w.writeb(v) + } +} + +func (e *bincEncDriverIO) EncodeBytes(v []byte) { + if v == nil { + e.writeNilBytes() + return + } + e.EncodeStringBytesRaw(v) +} + +func (e *bincEncDriverIO) writeNilOr(v byte) { + if !e.h.NilCollectionToZeroLength { + v = bincBdNil + } + e.w.writen1(v) +} + +func (e *bincEncDriverIO) writeNilArray() { + e.writeNilOr(bincVdArray<<4 | uint8(0+4)) +} + +func (e *bincEncDriverIO) writeNilMap() { + e.writeNilOr(bincVdMap<<4 | uint8(0+4)) +} + +func (e *bincEncDriverIO) writeNilBytes() { + e.writeNilOr(bincVdArray<<4 | uint8(0+4)) +} + +func (e *bincEncDriverIO) encBytesLen(c charEncoding, length uint64) { + + if c == cRAW { + e.encLen(bincVdByteArray<<4, length) + } else { + e.encLen(bincVdString<<4, length) + } +} + +func (e *bincEncDriverIO) encLen(bd byte, l uint64) { + if l < 12 { + e.w.writen1(bd | uint8(l+4)) + } else { + e.encLenNumber(bd, l) + } +} + +func (e *bincEncDriverIO) encLenNumber(bd byte, v uint64) { + if v <= math.MaxUint8 { + e.w.writen2(bd, byte(v)) + } else if v <= math.MaxUint16 { + e.w.writen1(bd | 0x01) + e.w.writen2(bigen.PutUint16(uint16(v))) + } else if v <= math.MaxUint32 { + e.w.writen1(bd | 0x02) + e.w.writen4(bigen.PutUint32(uint32(v))) + } else { + e.w.writen1(bd | 0x03) + e.w.writen8(bigen.PutUint64(uint64(v))) + } +} + +func (d *bincDecDriverIO) readNextBd() { + d.bd = d.r.readn1() + d.vd = d.bd >> 4 + d.vs = d.bd & 0x0f + d.bdRead = true +} + +func (d *bincDecDriverIO) advanceNil() (null bool) { + if !d.bdRead { + d.readNextBd() + } + if d.bd == bincBdNil { + d.bdRead = false + return true + } + return +} + +func (d *bincDecDriverIO) TryNil() bool { + return d.advanceNil() +} + +func (d *bincDecDriverIO) ContainerType() (vt valueType) { + if !d.bdRead { + d.readNextBd() + } + if d.bd == bincBdNil { + d.bdRead = false + return valueTypeNil + } else if d.vd == bincVdByteArray { + return valueTypeBytes + } else if d.vd == bincVdString { + return valueTypeString + } else if d.vd == bincVdArray { + return valueTypeArray + } else if d.vd == bincVdMap { + return valueTypeMap + } + return valueTypeUnset +} + +func (d *bincDecDriverIO) DecodeTime() (t time.Time) { + if d.advanceNil() { + return + } + if d.vd != bincVdTimestamp { + halt.errorf("cannot decode time - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + t, err := bincDecodeTime(d.r.readx(uint(d.vs))) + halt.onerror(err) + d.bdRead = false + return +} + +func (d *bincDecDriverIO) decFloatPruned(maxlen uint8) { + l := d.r.readn1() + if l > maxlen { + halt.errorf("cannot read float - at most %v bytes used to represent float - received %v bytes", maxlen, l) + } + for i := l; i < maxlen; i++ { + d.d.b[i] = 0 + } + d.r.readb(d.d.b[0:l]) +} + +func (d *bincDecDriverIO) decFloatPre32() (b [4]byte) { + if d.vs&0x8 == 0 { + b = d.r.readn4() + } else { + d.decFloatPruned(4) + copy(b[:], d.d.b[:]) + } + return +} + +func (d *bincDecDriverIO) decFloatPre64() (b [8]byte) { + if d.vs&0x8 == 0 { + b = d.r.readn8() + } else { + d.decFloatPruned(8) + copy(b[:], d.d.b[:]) + } + return +} + +func (d *bincDecDriverIO) decFloatVal() (f float64) { + switch d.vs & 0x7 { + case bincFlBin32: + f = float64(math.Float32frombits(bigen.Uint32(d.decFloatPre32()))) + case bincFlBin64: + f = math.Float64frombits(bigen.Uint64(d.decFloatPre64())) + default: + + halt.errorf("read float supports only float32/64 - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + return +} + +func (d *bincDecDriverIO) decUint() (v uint64) { + switch d.vs { + case 0: + v = uint64(d.r.readn1()) + case 1: + v = uint64(bigen.Uint16(d.r.readn2())) + case 2: + b3 := d.r.readn3() + var b [4]byte + copy(b[1:], b3[:]) + v = uint64(bigen.Uint32(b)) + case 3: + v = uint64(bigen.Uint32(d.r.readn4())) + case 4, 5, 6: + + bs := d.d.b[:8] + clear(bs) + d.r.readb(bs[(7 - d.vs):]) + v = bigen.Uint64(*(*[8]byte)(bs)) + case 7: + v = bigen.Uint64(d.r.readn8()) + default: + halt.errorf("unsigned integers with greater than 64 bits of precision not supported: d.vs: %v %x", d.vs, d.vs) + } + return +} + +func (d *bincDecDriverIO) uintBytes() (bs []byte) { + switch d.vs { + case 0: + bs = d.d.b[:1] + bs[0] = d.r.readn1() + return + case 1: + bs = d.d.b[:2] + case 2: + bs = d.d.b[:3] + case 3: + bs = d.d.b[:4] + case 4, 5, 6: + lim := 7 - d.vs + bs = d.d.b[lim:8] + case 7: + bs = d.d.b[:8] + default: + halt.errorf("unsigned integers with greater than 64 bits of precision not supported: d.vs: %v %x", d.vs, d.vs) + } + d.r.readb(bs) + return +} + +func (d *bincDecDriverIO) decInteger() (ui uint64, neg, ok bool) { + ok = true + vd, vs := d.vd, d.vs + if vd == bincVdPosInt { + ui = d.decUint() + } else if vd == bincVdNegInt { + ui = d.decUint() + neg = true + } else if vd == bincVdSmallInt { + ui = uint64(d.vs) + 1 + } else if vd == bincVdSpecial { + if vs == bincSpZero { + + } else if vs == bincSpNegOne { + neg = true + ui = 1 + } else { + ok = false + + } + } else { + ok = false + + } + return +} + +func (d *bincDecDriverIO) decFloat() (f float64, ok bool) { + ok = true + vd, vs := d.vd, d.vs + if vd == bincVdSpecial { + if vs == bincSpNan { + f = math.NaN() + } else if vs == bincSpPosInf { + f = math.Inf(1) + } else if vs == bincSpZeroFloat || vs == bincSpZero { + + } else if vs == bincSpNegInf { + f = math.Inf(-1) + } else { + ok = false + + } + } else if vd == bincVdFloat { + f = d.decFloatVal() + } else { + ok = false + } + return +} + +func (d *bincDecDriverIO) DecodeInt64() (i int64) { + if d.advanceNil() { + return + } + v1, v2, v3 := d.decInteger() + i = decNegintPosintFloatNumberHelper{d}.int64(v1, v2, v3, false) + d.bdRead = false + return +} + +func (d *bincDecDriverIO) DecodeUint64() (ui uint64) { + if d.advanceNil() { + return + } + ui = decNegintPosintFloatNumberHelper{d}.uint64(d.decInteger()) + d.bdRead = false + return +} + +func (d *bincDecDriverIO) DecodeFloat64() (f float64) { + if d.advanceNil() { + return + } + v1, v2 := d.decFloat() + f = decNegintPosintFloatNumberHelper{d}.float64(v1, v2, false) + d.bdRead = false + return +} + +func (d *bincDecDriverIO) DecodeBool() (b bool) { + if d.advanceNil() { + return + } + if d.bd == (bincVdSpecial | bincSpFalse) { + + } else if d.bd == (bincVdSpecial | bincSpTrue) { + b = true + } else { + halt.errorf("bool - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + d.bdRead = false + return +} + +func (d *bincDecDriverIO) ReadMapStart() (length int) { + if d.advanceNil() { + return containerLenNil + } + if d.vd != bincVdMap { + halt.errorf("map - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + length = d.decLen() + d.bdRead = false + return +} + +func (d *bincDecDriverIO) ReadArrayStart() (length int) { + if d.advanceNil() { + return containerLenNil + } + if d.vd != bincVdArray { + halt.errorf("array - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + length = d.decLen() + d.bdRead = false + return +} + +func (d *bincDecDriverIO) decLen() int { + if d.vs > 3 { + return int(d.vs - 4) + } + return int(d.decLenNumber()) +} + +func (d *bincDecDriverIO) decLenNumber() (v uint64) { + if x := d.vs; x == 0 { + v = uint64(d.r.readn1()) + } else if x == 1 { + v = uint64(bigen.Uint16(d.r.readn2())) + } else if x == 2 { + v = uint64(bigen.Uint32(d.r.readn4())) + } else { + v = bigen.Uint64(d.r.readn8()) + } + return +} + +func (d *bincDecDriverIO) DecodeStringAsBytes() (bs []byte, state dBytesAttachState) { + if d.advanceNil() { + return + } + var cond bool + var slen = -1 + switch d.vd { + case bincVdString, bincVdByteArray: + slen = d.decLen() + bs, cond = d.r.readxb(uint(slen)) + state = d.d.attachState(cond) + case bincVdSymbol: + + var symbol uint16 + vs := d.vs + if vs&0x8 == 0 { + symbol = uint16(d.r.readn1()) + } else { + symbol = uint16(bigen.Uint16(d.r.readn2())) + } + if d.s == nil { + d.s = make(map[uint16][]byte, 16) + } + + if vs&0x4 == 0 { + bs = d.s[symbol] + } else { + switch vs & 0x3 { + case 0: + slen = int(d.r.readn1()) + case 1: + slen = int(bigen.Uint16(d.r.readn2())) + case 2: + slen = int(bigen.Uint32(d.r.readn4())) + case 3: + slen = int(bigen.Uint64(d.r.readn8())) + } + + bs, cond = d.r.readxb(uint(slen)) + bs = d.d.detach2Bytes(bs, d.d.attachState(cond)) + d.s[symbol] = bs + } + state = dBytesDetach + default: + halt.errorf("string/bytes - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + + if d.h.ValidateUnicode && !utf8.Valid(bs) { + halt.errorf("DecodeStringAsBytes: invalid UTF-8: %s", bs) + } + + d.bdRead = false + return +} + +func (d *bincDecDriverIO) DecodeBytes() (bs []byte, state dBytesAttachState) { + if d.advanceNil() { + return + } + var cond bool + if d.vd == bincVdArray { + slen := d.ReadArrayStart() + bs, cond = usableByteSlice(d.d.buf, slen) + for i := 0; i < slen; i++ { + bs[i] = uint8(chkOvf.UintV(d.DecodeUint64(), 8)) + } + for i := len(bs); i < slen; i++ { + bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) + } + if cond { + d.d.buf = bs + } + state = dBytesAttachBuffer + return + } + if !(d.vd == bincVdString || d.vd == bincVdByteArray) { + halt.errorf("bytes - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + clen := d.decLen() + d.bdRead = false + bs, cond = d.r.readxb(uint(clen)) + state = d.d.attachState(cond) + return +} + +func (d *bincDecDriverIO) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + xbs, _, _, ok := d.decodeExtV(ext != nil, xtag) + if !ok { + return + } + if ext == SelfExt { + sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, true) }) + } else { + ext.ReadExt(rv, xbs) + } +} + +func (d *bincDecDriverIO) DecodeRawExt(re *RawExt) { + xbs, realxtag, state, ok := d.decodeExtV(false, 0) + if !ok { + return + } + re.Tag = uint64(realxtag) + re.setData(xbs, state >= dBytesAttachViewZerocopy) +} + +func (d *bincDecDriverIO) decodeExtV(verifyTag bool, xtagIn uint64) (xbs []byte, xtag byte, bstate dBytesAttachState, ok bool) { + if xtagIn > 0xff { + halt.errorf("ext: tag must be <= 0xff; got: %v", xtagIn) + } + if d.advanceNil() { + return + } + tag := uint8(xtagIn) + if d.vd == bincVdCustomExt { + l := d.decLen() + xtag = d.r.readn1() + if verifyTag && xtag != tag { + halt.errorf("wrong extension tag - got %b, expecting: %v", xtag, tag) + } + xbs, ok = d.r.readxb(uint(l)) + bstate = d.d.attachState(ok) + + } else if d.vd == bincVdByteArray { + xbs, bstate = d.DecodeBytes() + } else { + halt.errorf("ext expects extensions or byte array - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + d.bdRead = false + ok = true + return +} + +func (d *bincDecDriverIO) DecodeNaked() { + if !d.bdRead { + d.readNextBd() + } + + n := d.d.naked() + var decodeFurther bool + + switch d.vd { + case bincVdSpecial: + switch d.vs { + case bincSpNil: + n.v = valueTypeNil + case bincSpFalse: + n.v = valueTypeBool + n.b = false + case bincSpTrue: + n.v = valueTypeBool + n.b = true + case bincSpNan: + n.v = valueTypeFloat + n.f = math.NaN() + case bincSpPosInf: + n.v = valueTypeFloat + n.f = math.Inf(1) + case bincSpNegInf: + n.v = valueTypeFloat + n.f = math.Inf(-1) + case bincSpZeroFloat: + n.v = valueTypeFloat + n.f = float64(0) + case bincSpZero: + n.v = valueTypeUint + n.u = uint64(0) + case bincSpNegOne: + n.v = valueTypeInt + n.i = int64(-1) + default: + halt.errorf("cannot infer value - unrecognized special value %x-%x/%s", d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + case bincVdSmallInt: + n.v = valueTypeUint + n.u = uint64(int8(d.vs)) + 1 + case bincVdPosInt: + n.v = valueTypeUint + n.u = d.decUint() + case bincVdNegInt: + n.v = valueTypeInt + n.i = -(int64(d.decUint())) + case bincVdFloat: + n.v = valueTypeFloat + n.f = d.decFloatVal() + case bincVdString: + n.v = valueTypeString + n.s = d.d.detach2Str(d.DecodeStringAsBytes()) + case bincVdByteArray: + d.d.fauxUnionReadRawBytes(d, false, d.h.RawToString) + case bincVdSymbol: + n.v = valueTypeSymbol + n.s = d.d.detach2Str(d.DecodeStringAsBytes()) + case bincVdTimestamp: + n.v = valueTypeTime + tt, err := bincDecodeTime(d.r.readx(uint(d.vs))) + halt.onerror(err) + n.t = tt + case bincVdCustomExt: + n.v = valueTypeExt + l := d.decLen() + n.u = uint64(d.r.readn1()) + n.l = d.r.readx(uint(l)) + case bincVdArray: + n.v = valueTypeArray + decodeFurther = true + case bincVdMap: + n.v = valueTypeMap + decodeFurther = true + default: + halt.errorf("cannot infer value - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + + if !decodeFurther { + d.bdRead = false + } + if n.v == valueTypeUint && d.h.SignedInteger { + n.v = valueTypeInt + n.i = int64(n.u) + } +} + +func (d *bincDecDriverIO) nextValueBytes() (v []byte) { + if !d.bdRead { + d.readNextBd() + } + d.r.startRecording() + d.nextValueBytesBdReadR() + v = d.r.stopRecording() + d.bdRead = false + return +} + +func (d *bincDecDriverIO) nextValueBytesBdReadR() { + fnLen := func(vs byte) uint { + switch vs { + case 0: + x := d.r.readn1() + return uint(x) + case 1: + x := d.r.readn2() + return uint(bigen.Uint16(x)) + case 2: + x := d.r.readn4() + return uint(bigen.Uint32(x)) + case 3: + x := d.r.readn8() + return uint(bigen.Uint64(x)) + default: + return uint(vs - 4) + } + } + + var clen uint + + switch d.vd { + case bincVdSpecial: + switch d.vs { + case bincSpNil, bincSpFalse, bincSpTrue, bincSpNan, bincSpPosInf: + case bincSpNegInf, bincSpZeroFloat, bincSpZero, bincSpNegOne: + default: + halt.errorf("cannot infer value - unrecognized special value %x-%x/%s", d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + case bincVdSmallInt: + case bincVdPosInt, bincVdNegInt: + d.uintBytes() + case bincVdFloat: + fn := func(xlen byte) { + if d.vs&0x8 != 0 { + xlen = d.r.readn1() + if xlen > 8 { + halt.errorf("cannot read float - at most 8 bytes used to represent float - received %v bytes", xlen) + } + } + d.r.readb(d.d.b[:xlen]) + } + switch d.vs & 0x7 { + case bincFlBin32: + fn(4) + case bincFlBin64: + fn(8) + default: + halt.errorf("read float supports only float32/64 - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + case bincVdString, bincVdByteArray: + clen = fnLen(d.vs) + d.r.skip(clen) + case bincVdSymbol: + if d.vs&0x8 == 0 { + d.r.readn1() + } else { + d.r.skip(2) + } + if d.vs&0x4 != 0 { + clen = fnLen(d.vs & 0x3) + d.r.skip(clen) + } + case bincVdTimestamp: + d.r.skip(uint(d.vs)) + case bincVdCustomExt: + clen = fnLen(d.vs) + d.r.readn1() + d.r.skip(clen) + case bincVdArray: + clen = fnLen(d.vs) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + } + case bincVdMap: + clen = fnLen(d.vs) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() + } + default: + halt.errorf("cannot infer value - %s %x-%x/%s", msgBadDesc, d.vd, d.vs, bincdesc(d.vd, d.vs)) + } + return +} + +func (d *bincEncDriverIO) init(hh Handle, shared *encoderBase, enc encoderI) (fp interface{}) { + callMake(&d.w) + d.h = hh.(*BincHandle) + d.e = shared + if shared.bytes { + fp = bincFpEncBytes + } else { + fp = bincFpEncIO + } + + d.init2(enc) + return +} + +func (e *bincEncDriverIO) writeBytesAsis(b []byte) { e.w.writeb(b) } + +func (e *bincEncDriverIO) writerEnd() { e.w.end() } + +func (e *bincEncDriverIO) resetOutBytes(out *[]byte) { + e.w.resetBytes(*out, out) +} + +func (e *bincEncDriverIO) resetOutIO(out io.Writer) { + e.w.resetIO(out, e.h.WriterBufferSize, &e.e.blist) +} + +func (d *bincDecDriverIO) init(hh Handle, shared *decoderBase, dec decoderI) (fp interface{}) { + callMake(&d.r) + d.h = hh.(*BincHandle) + d.d = shared + if shared.bytes { + fp = bincFpDecBytes + } else { + fp = bincFpDecIO + } + + d.init2(dec) + return +} + +func (d *bincDecDriverIO) NumBytesRead() int { + return int(d.r.numread()) +} + +func (d *bincDecDriverIO) resetInBytes(in []byte) { + d.r.resetBytes(in) +} + +func (d *bincDecDriverIO) resetInIO(r io.Reader) { + d.r.resetIO(r, d.h.ReaderBufferSize, d.h.MaxInitLen, &d.d.blist) +} + +func (d *bincDecDriverIO) descBd() string { + return sprintf("%v (%s)", d.bd, bincdescbd(d.bd)) +} + +func (d *bincDecDriverIO) DecodeFloat32() (f float32) { + return float32(chkOvf.Float32V(d.DecodeFloat64())) +} diff --git a/vendor/github.com/ugorji/go/codec/binc.notfastpath.mono.generated.go b/vendor/github.com/ugorji/go/codec/binc.notfastpath.mono.generated.go new file mode 100644 index 0000000..ca893af --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/binc.notfastpath.mono.generated.go @@ -0,0 +1,52 @@ +//go:build !notmono && !codec.notmono && (notfastpath || codec.notfastpath) + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "reflect" +) + +type fastpathEBincBytes struct { + rt reflect.Type + encfn func(*encoderBincBytes, *encFnInfo, reflect.Value) +} +type fastpathDBincBytes struct { + rt reflect.Type + decfn func(*decoderBincBytes, *decFnInfo, reflect.Value) +} +type fastpathEsBincBytes [0]fastpathEBincBytes +type fastpathDsBincBytes [0]fastpathDBincBytes + +func (helperEncDriverBincBytes) fastpathEncodeTypeSwitch(iv interface{}, e *encoderBincBytes) bool { + return false +} +func (helperDecDriverBincBytes) fastpathDecodeTypeSwitch(iv interface{}, d *decoderBincBytes) bool { + return false +} + +func (helperEncDriverBincBytes) fastpathEList() (v *fastpathEsBincBytes) { return } +func (helperDecDriverBincBytes) fastpathDList() (v *fastpathDsBincBytes) { return } + +type fastpathEBincIO struct { + rt reflect.Type + encfn func(*encoderBincIO, *encFnInfo, reflect.Value) +} +type fastpathDBincIO struct { + rt reflect.Type + decfn func(*decoderBincIO, *decFnInfo, reflect.Value) +} +type fastpathEsBincIO [0]fastpathEBincIO +type fastpathDsBincIO [0]fastpathDBincIO + +func (helperEncDriverBincIO) fastpathEncodeTypeSwitch(iv interface{}, e *encoderBincIO) bool { + return false +} +func (helperDecDriverBincIO) fastpathDecodeTypeSwitch(iv interface{}, d *decoderBincIO) bool { + return false +} + +func (helperEncDriverBincIO) fastpathEList() (v *fastpathEsBincIO) { return } +func (helperDecDriverBincIO) fastpathDList() (v *fastpathDsBincIO) { return } diff --git a/vendor/github.com/ugorji/go/codec/build.sh b/vendor/github.com/ugorji/go/codec/build.sh index 023faf3..5214c7b 100644 --- a/vendor/github.com/ugorji/go/codec/build.sh +++ b/vendor/github.com/ugorji/go/codec/build.sh @@ -1,232 +1,61 @@ #!/bin/bash -# Run all the different permutations of all the tests and other things -# This helps ensure that nothing gets broken. - -_tests() { - local vet="" # TODO: make it off - local gover=$( ${gocmd} version | cut -f 3 -d ' ' ) - [[ $( ${gocmd} version ) == *"gccgo"* ]] && zcover=0 - [[ $( ${gocmd} version ) == *"gollvm"* ]] && zcover=0 - case $gover in - go1.[7-9]*|go1.1[0-9]*|go2.*|devel*) true ;; - *) return 1 - esac - # note that codecgen requires fastpath, so you cannot do "codecgen codec.notfastpath" - # we test the following permutations wnich all execute different code paths as below. - echo "TestCodecSuite: (fastpath/unsafe), (!fastpath/unsafe), (fastpath/!unsafe), (!fastpath/!unsafe), (codecgen/unsafe)" - local echo=1 - local nc=2 # count - local cpus="1,$(nproc)" - # if using the race detector, then set nc to - if [[ " ${zargs[@]} " =~ "-race" ]]; then - cpus="$(nproc)" - fi - local a=( "" "codec.notfastpath" "codec.safe" "codec.notfastpath codec.safe" "codecgen" ) - local b=() - local c=() - for i in "${a[@]}" - do - local i2=${i:-default} - [[ "$zwait" == "1" ]] && echo ">>>> TAGS: 'alltests $i'; RUN: 'TestCodecSuite'" - [[ "$zcover" == "1" ]] && c=( -coverprofile "${i2// /-}.cov.out" ) - true && - ${gocmd} vet -printfuncs "errorf" "$@" && - if [[ "$echo" == 1 ]]; then set -o xtrace; fi && - ${gocmd} test ${zargs[*]} ${ztestargs[*]} -vet "$vet" -tags "alltests $i" -count $nc -cpu $cpus -run "TestCodecSuite" "${c[@]}" "$@" & - if [[ "$echo" == 1 ]]; then set +o xtrace; fi - b+=("${i2// /-}.cov.out") - [[ "$zwait" == "1" ]] && wait - - # if [[ "$?" != 0 ]]; then return 1; fi +# Build and Run the different test permutations. +# This helps validate that nothing gets broken. + +_build_proceed() { + # return success (0) if we should, and 1 (fail) if not + if [[ "${zforce}" ]]; then return 0; fi + for a in "fastpath.generated.go" "json.mono.generated.go"; do + if [[ ! -e "$a" ]]; then return 0; fi + for b in `ls -1 *.go.tmpl gen.go gen_mono.go values_test.go`; do + if [[ "$a" -ot "$b" ]]; then return 0; fi + done done - if [[ "$zextra" == "1" ]]; then - [[ "$zwait" == "1" ]] && echo ">>>> TAGS: 'codec.notfastpath x'; RUN: 'Test.*X$'" - [[ "$zcover" == "1" ]] && c=( -coverprofile "x.cov.out" ) - ${gocmd} test ${zargs[*]} ${ztestargs[*]} -vet "$vet" -tags "codec.notfastpath x" -count $nc -run 'Test.*X$' "${c[@]}" & - b+=("x.cov.out") - [[ "$zwait" == "1" ]] && wait - fi - wait - # go tool cover is not supported for gccgo, gollvm, other non-standard go compilers - [[ "$zcover" == "1" ]] && - command -v gocovmerge && - gocovmerge "${b[@]}" > __merge.cov.out && - ${gocmd} tool cover -html=__merge.cov.out + return 1 } -# is a generation needed? -_ng() { - local a="$1" - if [[ ! -e "$a" ]]; then echo 1; return; fi - for i in `ls -1 *.go.tmpl gen.go values_test.go` - do - if [[ "$a" -ot "$i" ]]; then echo 1; return; fi - done -} - -_prependbt() { - cat > ${2} <> ${2} - rm -f ${1} -} - -# _build generates fast-path.go and gen-helper.go. +# _build generates fastpath.go _build() { - if ! [[ "${zforce}" || $(_ng "fast-path.generated.go") || $(_ng "gen-helper.generated.go") || $(_ng "gen.generated.go") ]]; then return 0; fi - + # if ! [[ "${zforce}" || $(_ng "fastpath.generated.go") || $(_ng "json.mono.generated.go") ]]; then return 0; fi + _build_proceed + if [ $? -eq 1 ]; then return 0; fi if [ "${zbak}" ]; then _zts=`date '+%m%d%Y_%H%M%S'` _gg=".generated.go" - [ -e "gen-helper${_gg}" ] && mv gen-helper${_gg} gen-helper${_gg}__${_zts}.bak - [ -e "fast-path${_gg}" ] && mv fast-path${_gg} fast-path${_gg}__${_zts}.bak + [ -e "fastpath${_gg}" ] && mv fastpath${_gg} fastpath${_gg}__${_zts}.bak [ -e "gen${_gg}" ] && mv gen${_gg} gen${_gg}__${_zts}.bak - fi - rm -f gen-helper.generated.go fast-path.generated.go gen.generated.go \ - *safe.generated.go *_generated_test.go *.generated_ffjson_expose.go - - cat > gen.generated.go <> gen.generated.go < gen-dec-map.go.tmpl - cat >> gen.generated.go <> gen.generated.go < gen-dec-array.go.tmpl - cat >> gen.generated.go <> gen.generated.go < gen-enc-chan.go.tmpl - cat >> gen.generated.go < gen-from-tmpl.codec.generated.go < gen-from-tmpl.sort-slice-stubs.generated.go <> gen-from-tmpl.sort-slice-stubs.generated.go < bench/shared_test.go - - # explicitly return 0 if this passes, else return 1 - local btags="codec.notfastpath codec.safe codecgen.exec" - rm -f sort-slice.generated.go fast-path.generated.go gen-helper.generated.go mammoth_generated_test.go mammoth2_generated_test.go - - cat > gen-from-tmpl.sort-slice.generated.go < gen-from-tmpl.generated.go < $f <>$f - if [[ "$i" != "master" ]]; then i="release-branch.go$i"; fi - (false || - (echo "===== BUILDING GO SDK for branch: $i ... =====" && - cd $GOROOT && - git checkout -f $i && git reset --hard && git clean -f . && - cd src && ./make.bash >>$f 2>&1 && sleep 1 ) ) && - echo "===== GO SDK BUILD DONE =====" && - _prebuild && - echo "===== PREBUILD DONE with exit: $? =====" && - _tests "$@" - if [[ "$?" != 0 ]]; then return 1; fi +_tests() { + local vet="" # TODO: make it off + local gover=$( ${gocmd} version | cut -f 3 -d ' ' ) + # go tool cover is not supported for gccgo, gollvm, other non-standard go compilers + [[ $( ${gocmd} version ) == *"gccgo"* ]] && zcover=0 + [[ $( ${gocmd} version ) == *"gollvm"* ]] && zcover=0 + case $gover in + go1.2[0-9]*|go2.*|devel*) true ;; + *) return 1 + esac + # we test the following permutations wnich all execute different code paths as below. + echo "TestCodecSuite: (fastpath/unsafe), (!fastpath/unsafe), (fastpath/!unsafe), (!fastpath/!unsafe)" + local nc=2 # count + local cpus="1,$(nproc)" + # if using the race detector, then set nc to + if [[ " ${zargs[@]} " =~ "-race" ]]; then + cpus="$(nproc)" + fi + local covdir="" + local a=( "" "codec.safe" "codec.notfastpath" "codec.safe codec.notfastpath" + "codec.notmono" "codec.notmono codec.safe" + "codec.notmono codec.notfastpath" "codec.notmono codec.safe codec.notfastpath" ) + [[ "$zextra" == "1" ]] && a+=( "x" ) + [[ "$zcover" == "1" ]] && covdir=`mktemp -d` + ${gocmd} vet -printfuncs "errorf" "$@" || return 1 + for i in "${a[@]}"; do + local j=${i:-default}; j="${j// /-}"; j="${j//codec./}" + [[ "$zwait" == "1" ]] && echo ">>>> TAGS: 'alltests $i'; RUN: 'TestCodecSuite'" + _tests_run_one + [[ "$zwait" == "1" ]] && wait + # if [[ "$?" != 0 ]]; then return 1; fi done - zforce=${makeforce} - echo "++++++++ RELEASE TEST SUITES ALL PASSED ++++++++" + wait + [[ "$zcover" == "1" ]] && + echo "go tool covdata output" && + ${gocmd} tool covdata percent -i $covdir && + ${gocmd} tool covdata textfmt -i $covdir -o __cov.out && + ${gocmd} tool cover -html=__cov.out } _usage() { @@ -306,11 +147,10 @@ _usage() { # -pf [p=prebuild (f=force)] cat < t=tests [e=extra, s=short, o=cover, w=wait] -[md] -> [m=make, d=race detector] - -[n l i] -> [n=inlining diagnostics, l=mid-stack inlining, i=check inlining for path (path)] - -v -> v=verbose + -v -> v=verbose (more v's to increase verbose level) EOF if [[ "$(type -t _usage_run)" = "function" ]]; then _usage_run ; fi } @@ -331,15 +171,15 @@ _main() { local gocmd=${MYGOCMD:-go} OPTIND=1 - while getopts ":cetmnrgpfvldsowkxyzi" flag + while getopts ":cetmnrgpfvldsowikxyz" flag do case "x$flag" in + 'xw') zwait=1 ;; + 'xv') zverbose+=(1) ;; 'xo') zcover=1 ;; 'xe') zextra=1 ;; - 'xw') zwait=1 ;; 'xf') zforce=1 ;; 'xs') ztestargs+=("-short") ;; - 'xv') zverbose+=(1) ;; 'xl') zargs+=("-gcflags"); zargs+=("-l=4") ;; 'xn') zargs+=("-gcflags"); zargs+=("-m=2") ;; 'xd') zargs+=("-race") ;; @@ -357,14 +197,23 @@ _main() { 'xg') _go ;; 'xp') _prebuild "$@" ;; 'xc') _clean "$@" ;; + esac + + # handle from local run.sh + case "x$x" in + 'xi') _check_inlining_one "$@" ;; + 'xk') _go_compiler_validation_suite ;; 'xx') _analyze_checks "$@" ;; 'xy') _analyze_debug_types "$@" ;; 'xz') _analyze_do_inlining_and_more "$@" ;; - 'xk') _go_compiler_validation_suite ;; - 'xi') _check_inlining_one "$@" ;; esac # unset zforce zargs zbenchflags } [ "." = `dirname $0` ] && _main "$@" +# _xtrace() { +# local - +# set -x +# "${@}" +# } diff --git a/vendor/github.com/ugorji/go/codec/cbor.base.go b/vendor/github.com/ugorji/go/codec/cbor.base.go new file mode 100644 index 0000000..fad562a --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/cbor.base.go @@ -0,0 +1,160 @@ +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "reflect" +) + +// major +const ( + cborMajorUint byte = iota + cborMajorNegInt + cborMajorBytes + cborMajorString + cborMajorArray + cborMajorMap + cborMajorTag + cborMajorSimpleOrFloat +) + +// simple +const ( + cborBdFalse byte = 0xf4 + iota + cborBdTrue + cborBdNil + cborBdUndefined + cborBdExt + cborBdFloat16 + cborBdFloat32 + cborBdFloat64 +) + +// indefinite +const ( + cborBdIndefiniteBytes byte = 0x5f + cborBdIndefiniteString byte = 0x7f + cborBdIndefiniteArray byte = 0x9f + cborBdIndefiniteMap byte = 0xbf + cborBdBreak byte = 0xff +) + +// These define some in-stream descriptors for +// manual encoding e.g. when doing explicit indefinite-length +const ( + CborStreamBytes byte = 0x5f + CborStreamString byte = 0x7f + CborStreamArray byte = 0x9f + CborStreamMap byte = 0xbf + CborStreamBreak byte = 0xff +) + +// base values +const ( + cborBaseUint byte = 0x00 + cborBaseNegInt byte = 0x20 + cborBaseBytes byte = 0x40 + cborBaseString byte = 0x60 + cborBaseArray byte = 0x80 + cborBaseMap byte = 0xa0 + cborBaseTag byte = 0xc0 + cborBaseSimple byte = 0xe0 +) + +// const ( +// cborSelfDesrTag byte = 0xd9 +// cborSelfDesrTag2 byte = 0xd9 +// cborSelfDesrTag3 byte = 0xf7 +// ) + +var ( + cbordescSimpleNames = map[byte]string{ + cborBdNil: "nil", + cborBdFalse: "false", + cborBdTrue: "true", + cborBdFloat16: "float", + cborBdFloat32: "float", + cborBdFloat64: "float", + cborBdBreak: "break", + } + cbordescIndefNames = map[byte]string{ + cborBdIndefiniteBytes: "bytes*", + cborBdIndefiniteString: "string*", + cborBdIndefiniteArray: "array*", + cborBdIndefiniteMap: "map*", + } + cbordescMajorNames = map[byte]string{ + cborMajorUint: "(u)int", + cborMajorNegInt: "int", + cborMajorBytes: "bytes", + cborMajorString: "string", + cborMajorArray: "array", + cborMajorMap: "map", + cborMajorTag: "tag", + cborMajorSimpleOrFloat: "simple", + } +) + +func cbordesc(bd byte) (s string) { + bm := bd >> 5 + if bm == cborMajorSimpleOrFloat { + s = cbordescSimpleNames[bd] + } else { + s = cbordescMajorNames[bm] + if s == "" { + s = cbordescIndefNames[bd] + } + } + if s == "" { + s = "unknown" + } + return +} + +// ------------------------- + +// CborHandle is a Handle for the CBOR encoding format, +// defined at http://tools.ietf.org/html/rfc7049 and documented further at http://cbor.io . +// +// CBOR is comprehensively supported, including support for: +// - indefinite-length arrays/maps/bytes/strings +// - (extension) tags in range 0..0xffff (0 .. 65535) +// - half, single and double-precision floats +// - all numbers (1, 2, 4 and 8-byte signed and unsigned integers) +// - nil, true, false, ... +// - arrays and maps, bytes and text strings +// +// None of the optional extensions (with tags) defined in the spec are supported out-of-the-box. +// Users can implement them as needed (using SetExt), including spec-documented ones: +// - timestamp, BigNum, BigFloat, Decimals, +// - Encoded Text (e.g. URL, regexp, base64, MIME Message), etc. +type CborHandle struct { + binaryEncodingType + notJsonType + // noElemSeparators + BasicHandle + + // IndefiniteLength=true, means that we encode using indefinitelength + IndefiniteLength bool + + // TimeRFC3339 says to encode time.Time using RFC3339 format. + // If unset, we encode time.Time using seconds past epoch. + TimeRFC3339 bool + + // SkipUnexpectedTags says to skip over any tags for which extensions are + // not defined. This is in keeping with the cbor spec on "Optional Tagging of Items". + // + // Furthermore, this allows the skipping over of the Self Describing Tag 0xd9d9f7. + SkipUnexpectedTags bool +} + +// Name returns the name of the handle: cbor +func (h *CborHandle) Name() string { return "cbor" } + +func (h *CborHandle) desc(bd byte) string { return cbordesc(bd) } + +// SetInterfaceExt sets an extension +func (h *CborHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) { + return h.SetExt(rt, tag, makeExt(ext)) +} diff --git a/vendor/github.com/ugorji/go/codec/cbor.fastpath.mono.generated.go b/vendor/github.com/ugorji/go/codec/cbor.fastpath.mono.generated.go new file mode 100644 index 0000000..d9456f3 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/cbor.fastpath.mono.generated.go @@ -0,0 +1,12482 @@ +//go:build !notmono && !codec.notmono && !notfastpath && !codec.notfastpath + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "reflect" + "slices" + "sort" +) + +type fastpathECborBytes struct { + rtid uintptr + rt reflect.Type + encfn func(*encoderCborBytes, *encFnInfo, reflect.Value) +} +type fastpathDCborBytes struct { + rtid uintptr + rt reflect.Type + decfn func(*decoderCborBytes, *decFnInfo, reflect.Value) +} +type fastpathEsCborBytes [56]fastpathECborBytes +type fastpathDsCborBytes [56]fastpathDCborBytes +type fastpathETCborBytes struct{} +type fastpathDTCborBytes struct{} + +func (helperEncDriverCborBytes) fastpathEList() *fastpathEsCborBytes { + var i uint = 0 + var s fastpathEsCborBytes + fn := func(v interface{}, fe func(*encoderCborBytes, *encFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathECborBytes{rt2id(xrt), xrt, fe} + i++ + } + + fn([]interface{}(nil), (*encoderCborBytes).fastpathEncSliceIntfR) + fn([]string(nil), (*encoderCborBytes).fastpathEncSliceStringR) + fn([][]byte(nil), (*encoderCborBytes).fastpathEncSliceBytesR) + fn([]float32(nil), (*encoderCborBytes).fastpathEncSliceFloat32R) + fn([]float64(nil), (*encoderCborBytes).fastpathEncSliceFloat64R) + fn([]uint8(nil), (*encoderCborBytes).fastpathEncSliceUint8R) + fn([]uint64(nil), (*encoderCborBytes).fastpathEncSliceUint64R) + fn([]int(nil), (*encoderCborBytes).fastpathEncSliceIntR) + fn([]int32(nil), (*encoderCborBytes).fastpathEncSliceInt32R) + fn([]int64(nil), (*encoderCborBytes).fastpathEncSliceInt64R) + fn([]bool(nil), (*encoderCborBytes).fastpathEncSliceBoolR) + + fn(map[string]interface{}(nil), (*encoderCborBytes).fastpathEncMapStringIntfR) + fn(map[string]string(nil), (*encoderCborBytes).fastpathEncMapStringStringR) + fn(map[string][]byte(nil), (*encoderCborBytes).fastpathEncMapStringBytesR) + fn(map[string]uint8(nil), (*encoderCborBytes).fastpathEncMapStringUint8R) + fn(map[string]uint64(nil), (*encoderCborBytes).fastpathEncMapStringUint64R) + fn(map[string]int(nil), (*encoderCborBytes).fastpathEncMapStringIntR) + fn(map[string]int32(nil), (*encoderCborBytes).fastpathEncMapStringInt32R) + fn(map[string]float64(nil), (*encoderCborBytes).fastpathEncMapStringFloat64R) + fn(map[string]bool(nil), (*encoderCborBytes).fastpathEncMapStringBoolR) + fn(map[uint8]interface{}(nil), (*encoderCborBytes).fastpathEncMapUint8IntfR) + fn(map[uint8]string(nil), (*encoderCborBytes).fastpathEncMapUint8StringR) + fn(map[uint8][]byte(nil), (*encoderCborBytes).fastpathEncMapUint8BytesR) + fn(map[uint8]uint8(nil), (*encoderCborBytes).fastpathEncMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*encoderCborBytes).fastpathEncMapUint8Uint64R) + fn(map[uint8]int(nil), (*encoderCborBytes).fastpathEncMapUint8IntR) + fn(map[uint8]int32(nil), (*encoderCborBytes).fastpathEncMapUint8Int32R) + fn(map[uint8]float64(nil), (*encoderCborBytes).fastpathEncMapUint8Float64R) + fn(map[uint8]bool(nil), (*encoderCborBytes).fastpathEncMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*encoderCborBytes).fastpathEncMapUint64IntfR) + fn(map[uint64]string(nil), (*encoderCborBytes).fastpathEncMapUint64StringR) + fn(map[uint64][]byte(nil), (*encoderCborBytes).fastpathEncMapUint64BytesR) + fn(map[uint64]uint8(nil), (*encoderCborBytes).fastpathEncMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*encoderCborBytes).fastpathEncMapUint64Uint64R) + fn(map[uint64]int(nil), (*encoderCborBytes).fastpathEncMapUint64IntR) + fn(map[uint64]int32(nil), (*encoderCborBytes).fastpathEncMapUint64Int32R) + fn(map[uint64]float64(nil), (*encoderCborBytes).fastpathEncMapUint64Float64R) + fn(map[uint64]bool(nil), (*encoderCborBytes).fastpathEncMapUint64BoolR) + fn(map[int]interface{}(nil), (*encoderCborBytes).fastpathEncMapIntIntfR) + fn(map[int]string(nil), (*encoderCborBytes).fastpathEncMapIntStringR) + fn(map[int][]byte(nil), (*encoderCborBytes).fastpathEncMapIntBytesR) + fn(map[int]uint8(nil), (*encoderCborBytes).fastpathEncMapIntUint8R) + fn(map[int]uint64(nil), (*encoderCborBytes).fastpathEncMapIntUint64R) + fn(map[int]int(nil), (*encoderCborBytes).fastpathEncMapIntIntR) + fn(map[int]int32(nil), (*encoderCborBytes).fastpathEncMapIntInt32R) + fn(map[int]float64(nil), (*encoderCborBytes).fastpathEncMapIntFloat64R) + fn(map[int]bool(nil), (*encoderCborBytes).fastpathEncMapIntBoolR) + fn(map[int32]interface{}(nil), (*encoderCborBytes).fastpathEncMapInt32IntfR) + fn(map[int32]string(nil), (*encoderCborBytes).fastpathEncMapInt32StringR) + fn(map[int32][]byte(nil), (*encoderCborBytes).fastpathEncMapInt32BytesR) + fn(map[int32]uint8(nil), (*encoderCborBytes).fastpathEncMapInt32Uint8R) + fn(map[int32]uint64(nil), (*encoderCborBytes).fastpathEncMapInt32Uint64R) + fn(map[int32]int(nil), (*encoderCborBytes).fastpathEncMapInt32IntR) + fn(map[int32]int32(nil), (*encoderCborBytes).fastpathEncMapInt32Int32R) + fn(map[int32]float64(nil), (*encoderCborBytes).fastpathEncMapInt32Float64R) + fn(map[int32]bool(nil), (*encoderCborBytes).fastpathEncMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperDecDriverCborBytes) fastpathDList() *fastpathDsCborBytes { + var i uint = 0 + var s fastpathDsCborBytes + fn := func(v interface{}, fd func(*decoderCborBytes, *decFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathDCborBytes{rt2id(xrt), xrt, fd} + i++ + } + + fn([]interface{}(nil), (*decoderCborBytes).fastpathDecSliceIntfR) + fn([]string(nil), (*decoderCborBytes).fastpathDecSliceStringR) + fn([][]byte(nil), (*decoderCborBytes).fastpathDecSliceBytesR) + fn([]float32(nil), (*decoderCborBytes).fastpathDecSliceFloat32R) + fn([]float64(nil), (*decoderCborBytes).fastpathDecSliceFloat64R) + fn([]uint8(nil), (*decoderCborBytes).fastpathDecSliceUint8R) + fn([]uint64(nil), (*decoderCborBytes).fastpathDecSliceUint64R) + fn([]int(nil), (*decoderCborBytes).fastpathDecSliceIntR) + fn([]int32(nil), (*decoderCborBytes).fastpathDecSliceInt32R) + fn([]int64(nil), (*decoderCborBytes).fastpathDecSliceInt64R) + fn([]bool(nil), (*decoderCborBytes).fastpathDecSliceBoolR) + + fn(map[string]interface{}(nil), (*decoderCborBytes).fastpathDecMapStringIntfR) + fn(map[string]string(nil), (*decoderCborBytes).fastpathDecMapStringStringR) + fn(map[string][]byte(nil), (*decoderCborBytes).fastpathDecMapStringBytesR) + fn(map[string]uint8(nil), (*decoderCborBytes).fastpathDecMapStringUint8R) + fn(map[string]uint64(nil), (*decoderCborBytes).fastpathDecMapStringUint64R) + fn(map[string]int(nil), (*decoderCborBytes).fastpathDecMapStringIntR) + fn(map[string]int32(nil), (*decoderCborBytes).fastpathDecMapStringInt32R) + fn(map[string]float64(nil), (*decoderCborBytes).fastpathDecMapStringFloat64R) + fn(map[string]bool(nil), (*decoderCborBytes).fastpathDecMapStringBoolR) + fn(map[uint8]interface{}(nil), (*decoderCborBytes).fastpathDecMapUint8IntfR) + fn(map[uint8]string(nil), (*decoderCborBytes).fastpathDecMapUint8StringR) + fn(map[uint8][]byte(nil), (*decoderCborBytes).fastpathDecMapUint8BytesR) + fn(map[uint8]uint8(nil), (*decoderCborBytes).fastpathDecMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*decoderCborBytes).fastpathDecMapUint8Uint64R) + fn(map[uint8]int(nil), (*decoderCborBytes).fastpathDecMapUint8IntR) + fn(map[uint8]int32(nil), (*decoderCborBytes).fastpathDecMapUint8Int32R) + fn(map[uint8]float64(nil), (*decoderCborBytes).fastpathDecMapUint8Float64R) + fn(map[uint8]bool(nil), (*decoderCborBytes).fastpathDecMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*decoderCborBytes).fastpathDecMapUint64IntfR) + fn(map[uint64]string(nil), (*decoderCborBytes).fastpathDecMapUint64StringR) + fn(map[uint64][]byte(nil), (*decoderCborBytes).fastpathDecMapUint64BytesR) + fn(map[uint64]uint8(nil), (*decoderCborBytes).fastpathDecMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*decoderCborBytes).fastpathDecMapUint64Uint64R) + fn(map[uint64]int(nil), (*decoderCborBytes).fastpathDecMapUint64IntR) + fn(map[uint64]int32(nil), (*decoderCborBytes).fastpathDecMapUint64Int32R) + fn(map[uint64]float64(nil), (*decoderCborBytes).fastpathDecMapUint64Float64R) + fn(map[uint64]bool(nil), (*decoderCborBytes).fastpathDecMapUint64BoolR) + fn(map[int]interface{}(nil), (*decoderCborBytes).fastpathDecMapIntIntfR) + fn(map[int]string(nil), (*decoderCborBytes).fastpathDecMapIntStringR) + fn(map[int][]byte(nil), (*decoderCborBytes).fastpathDecMapIntBytesR) + fn(map[int]uint8(nil), (*decoderCborBytes).fastpathDecMapIntUint8R) + fn(map[int]uint64(nil), (*decoderCborBytes).fastpathDecMapIntUint64R) + fn(map[int]int(nil), (*decoderCborBytes).fastpathDecMapIntIntR) + fn(map[int]int32(nil), (*decoderCborBytes).fastpathDecMapIntInt32R) + fn(map[int]float64(nil), (*decoderCborBytes).fastpathDecMapIntFloat64R) + fn(map[int]bool(nil), (*decoderCborBytes).fastpathDecMapIntBoolR) + fn(map[int32]interface{}(nil), (*decoderCborBytes).fastpathDecMapInt32IntfR) + fn(map[int32]string(nil), (*decoderCborBytes).fastpathDecMapInt32StringR) + fn(map[int32][]byte(nil), (*decoderCborBytes).fastpathDecMapInt32BytesR) + fn(map[int32]uint8(nil), (*decoderCborBytes).fastpathDecMapInt32Uint8R) + fn(map[int32]uint64(nil), (*decoderCborBytes).fastpathDecMapInt32Uint64R) + fn(map[int32]int(nil), (*decoderCborBytes).fastpathDecMapInt32IntR) + fn(map[int32]int32(nil), (*decoderCborBytes).fastpathDecMapInt32Int32R) + fn(map[int32]float64(nil), (*decoderCborBytes).fastpathDecMapInt32Float64R) + fn(map[int32]bool(nil), (*decoderCborBytes).fastpathDecMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperEncDriverCborBytes) fastpathEncodeTypeSwitch(iv interface{}, e *encoderCborBytes) bool { + var ft fastpathETCborBytes + switch v := iv.(type) { + case []interface{}: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntfV(v, e) + } + case []string: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceStringV(v, e) + } + case [][]byte: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBytesV(v, e) + } + case []float32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat32V(v, e) + } + case []float64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat64V(v, e) + } + case []uint8: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint8V(v, e) + } + case []uint64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint64V(v, e) + } + case []int: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntV(v, e) + } + case []int32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt32V(v, e) + } + case []int64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt64V(v, e) + } + case []bool: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBoolV(v, e) + } + case map[string]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntfV(v, e) + } + case map[string]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringStringV(v, e) + } + case map[string][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBytesV(v, e) + } + case map[string]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint8V(v, e) + } + case map[string]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint64V(v, e) + } + case map[string]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntV(v, e) + } + case map[string]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringInt32V(v, e) + } + case map[string]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringFloat64V(v, e) + } + case map[string]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBoolV(v, e) + } + case map[uint8]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntfV(v, e) + } + case map[uint8]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8StringV(v, e) + } + case map[uint8][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BytesV(v, e) + } + case map[uint8]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint8V(v, e) + } + case map[uint8]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint64V(v, e) + } + case map[uint8]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntV(v, e) + } + case map[uint8]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Int32V(v, e) + } + case map[uint8]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Float64V(v, e) + } + case map[uint8]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BoolV(v, e) + } + case map[uint64]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntfV(v, e) + } + case map[uint64]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64StringV(v, e) + } + case map[uint64][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BytesV(v, e) + } + case map[uint64]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint8V(v, e) + } + case map[uint64]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint64V(v, e) + } + case map[uint64]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntV(v, e) + } + case map[uint64]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Int32V(v, e) + } + case map[uint64]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Float64V(v, e) + } + case map[uint64]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BoolV(v, e) + } + case map[int]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntfV(v, e) + } + case map[int]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntStringV(v, e) + } + case map[int][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBytesV(v, e) + } + case map[int]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint8V(v, e) + } + case map[int]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint64V(v, e) + } + case map[int]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntV(v, e) + } + case map[int]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntInt32V(v, e) + } + case map[int]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntFloat64V(v, e) + } + case map[int]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBoolV(v, e) + } + case map[int32]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntfV(v, e) + } + case map[int32]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32StringV(v, e) + } + case map[int32][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BytesV(v, e) + } + case map[int32]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint8V(v, e) + } + case map[int32]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint64V(v, e) + } + case map[int32]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntV(v, e) + } + case map[int32]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Int32V(v, e) + } + case map[int32]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Float64V(v, e) + } + case map[int32]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BoolV(v, e) + } + default: + _ = v + return false + } + return true +} + +func (e *encoderCborBytes) fastpathEncSliceIntfR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborBytes + var v []interface{} + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]interface{}) + } + if f.ti.mbs { + ft.EncAsMapSliceIntfV(v, e) + return + } + ft.EncSliceIntfV(v, e) +} +func (fastpathETCborBytes) EncSliceIntfV(v []interface{}, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborBytes) EncAsMapSliceIntfV(v []interface{}, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborBytes) fastpathEncSliceStringR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborBytes + var v []string + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]string) + } + if f.ti.mbs { + ft.EncAsMapSliceStringV(v, e) + return + } + ft.EncSliceStringV(v, e) +} +func (fastpathETCborBytes) EncSliceStringV(v []string, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborBytes) EncAsMapSliceStringV(v []string, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborBytes) fastpathEncSliceBytesR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborBytes + var v [][]byte + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([][]byte) + } + if f.ti.mbs { + ft.EncAsMapSliceBytesV(v, e) + return + } + ft.EncSliceBytesV(v, e) +} +func (fastpathETCborBytes) EncSliceBytesV(v [][]byte, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborBytes) EncAsMapSliceBytesV(v [][]byte, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborBytes) fastpathEncSliceFloat32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborBytes + var v []float32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float32) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat32V(v, e) + return + } + ft.EncSliceFloat32V(v, e) +} +func (fastpathETCborBytes) EncSliceFloat32V(v []float32, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborBytes) EncAsMapSliceFloat32V(v []float32, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborBytes) fastpathEncSliceFloat64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborBytes + var v []float64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float64) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat64V(v, e) + return + } + ft.EncSliceFloat64V(v, e) +} +func (fastpathETCborBytes) EncSliceFloat64V(v []float64, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborBytes) EncAsMapSliceFloat64V(v []float64, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborBytes) fastpathEncSliceUint8R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborBytes + var v []uint8 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint8) + } + if f.ti.mbs { + ft.EncAsMapSliceUint8V(v, e) + return + } + ft.EncSliceUint8V(v, e) +} +func (fastpathETCborBytes) EncSliceUint8V(v []uint8, e *encoderCborBytes) { + e.e.EncodeStringBytesRaw(v) +} +func (fastpathETCborBytes) EncAsMapSliceUint8V(v []uint8, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(uint64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborBytes) fastpathEncSliceUint64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborBytes + var v []uint64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint64) + } + if f.ti.mbs { + ft.EncAsMapSliceUint64V(v, e) + return + } + ft.EncSliceUint64V(v, e) +} +func (fastpathETCborBytes) EncSliceUint64V(v []uint64, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborBytes) EncAsMapSliceUint64V(v []uint64, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborBytes) fastpathEncSliceIntR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborBytes + var v []int + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int) + } + if f.ti.mbs { + ft.EncAsMapSliceIntV(v, e) + return + } + ft.EncSliceIntV(v, e) +} +func (fastpathETCborBytes) EncSliceIntV(v []int, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborBytes) EncAsMapSliceIntV(v []int, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborBytes) fastpathEncSliceInt32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborBytes + var v []int32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int32) + } + if f.ti.mbs { + ft.EncAsMapSliceInt32V(v, e) + return + } + ft.EncSliceInt32V(v, e) +} +func (fastpathETCborBytes) EncSliceInt32V(v []int32, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborBytes) EncAsMapSliceInt32V(v []int32, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborBytes) fastpathEncSliceInt64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborBytes + var v []int64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int64) + } + if f.ti.mbs { + ft.EncAsMapSliceInt64V(v, e) + return + } + ft.EncSliceInt64V(v, e) +} +func (fastpathETCborBytes) EncSliceInt64V(v []int64, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborBytes) EncAsMapSliceInt64V(v []int64, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborBytes) fastpathEncSliceBoolR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborBytes + var v []bool + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]bool) + } + if f.ti.mbs { + ft.EncAsMapSliceBoolV(v, e) + return + } + ft.EncSliceBoolV(v, e) +} +func (fastpathETCborBytes) EncSliceBoolV(v []bool, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborBytes) EncAsMapSliceBoolV(v []bool, e *encoderCborBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborBytes) fastpathEncMapStringIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapStringIntfV(rv2i(rv).(map[string]interface{}), e) +} +func (fastpathETCborBytes) EncMapStringIntfV(v map[string]interface{}, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapStringStringR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapStringStringV(rv2i(rv).(map[string]string), e) +} +func (fastpathETCborBytes) EncMapStringStringV(v map[string]string, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapStringBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapStringBytesV(rv2i(rv).(map[string][]byte), e) +} +func (fastpathETCborBytes) EncMapStringBytesV(v map[string][]byte, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapStringUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapStringUint8V(rv2i(rv).(map[string]uint8), e) +} +func (fastpathETCborBytes) EncMapStringUint8V(v map[string]uint8, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapStringUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapStringUint64V(rv2i(rv).(map[string]uint64), e) +} +func (fastpathETCborBytes) EncMapStringUint64V(v map[string]uint64, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapStringIntR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapStringIntV(rv2i(rv).(map[string]int), e) +} +func (fastpathETCborBytes) EncMapStringIntV(v map[string]int, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapStringInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapStringInt32V(rv2i(rv).(map[string]int32), e) +} +func (fastpathETCborBytes) EncMapStringInt32V(v map[string]int32, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapStringFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapStringFloat64V(rv2i(rv).(map[string]float64), e) +} +func (fastpathETCborBytes) EncMapStringFloat64V(v map[string]float64, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapStringBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapStringBoolV(rv2i(rv).(map[string]bool), e) +} +func (fastpathETCborBytes) EncMapStringBoolV(v map[string]bool, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint8IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), e) +} +func (fastpathETCborBytes) EncMapUint8IntfV(v map[uint8]interface{}, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint8StringR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint8StringV(rv2i(rv).(map[uint8]string), e) +} +func (fastpathETCborBytes) EncMapUint8StringV(v map[uint8]string, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint8BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint8BytesV(rv2i(rv).(map[uint8][]byte), e) +} +func (fastpathETCborBytes) EncMapUint8BytesV(v map[uint8][]byte, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint8Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), e) +} +func (fastpathETCborBytes) EncMapUint8Uint8V(v map[uint8]uint8, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint8Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), e) +} +func (fastpathETCborBytes) EncMapUint8Uint64V(v map[uint8]uint64, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint8IntR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint8IntV(rv2i(rv).(map[uint8]int), e) +} +func (fastpathETCborBytes) EncMapUint8IntV(v map[uint8]int, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint8Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint8Int32V(rv2i(rv).(map[uint8]int32), e) +} +func (fastpathETCborBytes) EncMapUint8Int32V(v map[uint8]int32, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint8Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint8Float64V(rv2i(rv).(map[uint8]float64), e) +} +func (fastpathETCborBytes) EncMapUint8Float64V(v map[uint8]float64, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint8BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint8BoolV(rv2i(rv).(map[uint8]bool), e) +} +func (fastpathETCborBytes) EncMapUint8BoolV(v map[uint8]bool, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint64IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), e) +} +func (fastpathETCborBytes) EncMapUint64IntfV(v map[uint64]interface{}, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint64StringR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint64StringV(rv2i(rv).(map[uint64]string), e) +} +func (fastpathETCborBytes) EncMapUint64StringV(v map[uint64]string, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint64BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint64BytesV(rv2i(rv).(map[uint64][]byte), e) +} +func (fastpathETCborBytes) EncMapUint64BytesV(v map[uint64][]byte, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint64Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), e) +} +func (fastpathETCborBytes) EncMapUint64Uint8V(v map[uint64]uint8, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint64Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), e) +} +func (fastpathETCborBytes) EncMapUint64Uint64V(v map[uint64]uint64, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint64IntR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint64IntV(rv2i(rv).(map[uint64]int), e) +} +func (fastpathETCborBytes) EncMapUint64IntV(v map[uint64]int, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint64Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint64Int32V(rv2i(rv).(map[uint64]int32), e) +} +func (fastpathETCborBytes) EncMapUint64Int32V(v map[uint64]int32, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint64Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint64Float64V(rv2i(rv).(map[uint64]float64), e) +} +func (fastpathETCborBytes) EncMapUint64Float64V(v map[uint64]float64, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapUint64BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapUint64BoolV(rv2i(rv).(map[uint64]bool), e) +} +func (fastpathETCborBytes) EncMapUint64BoolV(v map[uint64]bool, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapIntIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapIntIntfV(rv2i(rv).(map[int]interface{}), e) +} +func (fastpathETCborBytes) EncMapIntIntfV(v map[int]interface{}, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapIntStringR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapIntStringV(rv2i(rv).(map[int]string), e) +} +func (fastpathETCborBytes) EncMapIntStringV(v map[int]string, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapIntBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapIntBytesV(rv2i(rv).(map[int][]byte), e) +} +func (fastpathETCborBytes) EncMapIntBytesV(v map[int][]byte, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapIntUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapIntUint8V(rv2i(rv).(map[int]uint8), e) +} +func (fastpathETCborBytes) EncMapIntUint8V(v map[int]uint8, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapIntUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapIntUint64V(rv2i(rv).(map[int]uint64), e) +} +func (fastpathETCborBytes) EncMapIntUint64V(v map[int]uint64, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapIntIntR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapIntIntV(rv2i(rv).(map[int]int), e) +} +func (fastpathETCborBytes) EncMapIntIntV(v map[int]int, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapIntInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapIntInt32V(rv2i(rv).(map[int]int32), e) +} +func (fastpathETCborBytes) EncMapIntInt32V(v map[int]int32, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapIntFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapIntFloat64V(rv2i(rv).(map[int]float64), e) +} +func (fastpathETCborBytes) EncMapIntFloat64V(v map[int]float64, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapIntBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapIntBoolV(rv2i(rv).(map[int]bool), e) +} +func (fastpathETCborBytes) EncMapIntBoolV(v map[int]bool, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapInt32IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapInt32IntfV(rv2i(rv).(map[int32]interface{}), e) +} +func (fastpathETCborBytes) EncMapInt32IntfV(v map[int32]interface{}, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapInt32StringR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapInt32StringV(rv2i(rv).(map[int32]string), e) +} +func (fastpathETCborBytes) EncMapInt32StringV(v map[int32]string, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapInt32BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapInt32BytesV(rv2i(rv).(map[int32][]byte), e) +} +func (fastpathETCborBytes) EncMapInt32BytesV(v map[int32][]byte, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapInt32Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapInt32Uint8V(rv2i(rv).(map[int32]uint8), e) +} +func (fastpathETCborBytes) EncMapInt32Uint8V(v map[int32]uint8, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapInt32Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapInt32Uint64V(rv2i(rv).(map[int32]uint64), e) +} +func (fastpathETCborBytes) EncMapInt32Uint64V(v map[int32]uint64, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapInt32IntR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapInt32IntV(rv2i(rv).(map[int32]int), e) +} +func (fastpathETCborBytes) EncMapInt32IntV(v map[int32]int, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapInt32Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapInt32Int32V(rv2i(rv).(map[int32]int32), e) +} +func (fastpathETCborBytes) EncMapInt32Int32V(v map[int32]int32, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapInt32Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapInt32Float64V(rv2i(rv).(map[int32]float64), e) +} +func (fastpathETCborBytes) EncMapInt32Float64V(v map[int32]float64, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborBytes) fastpathEncMapInt32BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETCborBytes{}.EncMapInt32BoolV(rv2i(rv).(map[int32]bool), e) +} +func (fastpathETCborBytes) EncMapInt32BoolV(v map[int32]bool, e *encoderCborBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (helperDecDriverCborBytes) fastpathDecodeTypeSwitch(iv interface{}, d *decoderCborBytes) bool { + var ft fastpathDTCborBytes + var changed bool + var containerLen int + switch v := iv.(type) { + case []interface{}: + ft.DecSliceIntfN(v, d) + case *[]interface{}: + var v2 []interface{} + if v2, changed = ft.DecSliceIntfY(*v, d); changed { + *v = v2 + } + case []string: + ft.DecSliceStringN(v, d) + case *[]string: + var v2 []string + if v2, changed = ft.DecSliceStringY(*v, d); changed { + *v = v2 + } + case [][]byte: + ft.DecSliceBytesN(v, d) + case *[][]byte: + var v2 [][]byte + if v2, changed = ft.DecSliceBytesY(*v, d); changed { + *v = v2 + } + case []float32: + ft.DecSliceFloat32N(v, d) + case *[]float32: + var v2 []float32 + if v2, changed = ft.DecSliceFloat32Y(*v, d); changed { + *v = v2 + } + case []float64: + ft.DecSliceFloat64N(v, d) + case *[]float64: + var v2 []float64 + if v2, changed = ft.DecSliceFloat64Y(*v, d); changed { + *v = v2 + } + case []uint8: + ft.DecSliceUint8N(v, d) + case *[]uint8: + var v2 []uint8 + if v2, changed = ft.DecSliceUint8Y(*v, d); changed { + *v = v2 + } + case []uint64: + ft.DecSliceUint64N(v, d) + case *[]uint64: + var v2 []uint64 + if v2, changed = ft.DecSliceUint64Y(*v, d); changed { + *v = v2 + } + case []int: + ft.DecSliceIntN(v, d) + case *[]int: + var v2 []int + if v2, changed = ft.DecSliceIntY(*v, d); changed { + *v = v2 + } + case []int32: + ft.DecSliceInt32N(v, d) + case *[]int32: + var v2 []int32 + if v2, changed = ft.DecSliceInt32Y(*v, d); changed { + *v = v2 + } + case []int64: + ft.DecSliceInt64N(v, d) + case *[]int64: + var v2 []int64 + if v2, changed = ft.DecSliceInt64Y(*v, d); changed { + *v = v2 + } + case []bool: + ft.DecSliceBoolN(v, d) + case *[]bool: + var v2 []bool + if v2, changed = ft.DecSliceBoolY(*v, d); changed { + *v = v2 + } + case map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*v, containerLen, d) + } + d.mapEnd() + } + default: + _ = v + return false + } + return true +} + +func (d *decoderCborBytes) fastpathDecSliceIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]interface{}) + if vv, changed := ft.DecSliceIntfY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []interface{} + rvGetSlice4Array(rv, &v) + ft.DecSliceIntfN(v, d) + default: + ft.DecSliceIntfN(rv2i(rv).([]interface{}), d) + } +} +func (fastpathDTCborBytes) DecSliceIntfY(v []interface{}, d *decoderCborBytes) (v2 []interface{}, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []interface{}) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]interface{}, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + d.decode(&v[uint(j)]) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]interface{}{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborBytes) DecSliceIntfN(v []interface{}, d *decoderCborBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + d.decode(&v[uint(j)]) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborBytes) fastpathDecSliceStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]string) + if vv, changed := ft.DecSliceStringY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []string + rvGetSlice4Array(rv, &v) + ft.DecSliceStringN(v, d) + default: + ft.DecSliceStringN(rv2i(rv).([]string), d) + } +} +func (fastpathDTCborBytes) DecSliceStringY(v []string, d *decoderCborBytes) (v2 []string, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []string) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]string, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, "")) + } + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]string{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborBytes) DecSliceStringN(v []string, d *decoderCborBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborBytes) fastpathDecSliceBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[][]byte) + if vv, changed := ft.DecSliceBytesY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v [][]byte + rvGetSlice4Array(rv, &v) + ft.DecSliceBytesN(v, d) + default: + ft.DecSliceBytesN(rv2i(rv).([][]byte), d) + } +} +func (fastpathDTCborBytes) DecSliceBytesY(v [][]byte, d *decoderCborBytes) (v2 [][]byte, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst [][]byte) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 24)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([][]byte, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([][]byte{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborBytes) DecSliceBytesN(v [][]byte, d *decoderCborBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborBytes) fastpathDecSliceFloat32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float32) + if vv, changed := ft.DecSliceFloat32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float32 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat32N(v, d) + default: + ft.DecSliceFloat32N(rv2i(rv).([]float32), d) + } +} +func (fastpathDTCborBytes) DecSliceFloat32Y(v []float32, d *decoderCborBytes) (v2 []float32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = float32(d.d.DecodeFloat32()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborBytes) DecSliceFloat32N(v []float32, d *decoderCborBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = float32(d.d.DecodeFloat32()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborBytes) fastpathDecSliceFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float64) + if vv, changed := ft.DecSliceFloat64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float64 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat64N(v, d) + default: + ft.DecSliceFloat64N(rv2i(rv).([]float64), d) + } +} +func (fastpathDTCborBytes) DecSliceFloat64Y(v []float64, d *decoderCborBytes) (v2 []float64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeFloat64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborBytes) DecSliceFloat64N(v []float64, d *decoderCborBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeFloat64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborBytes) fastpathDecSliceUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint8) + if vv, changed := ft.DecSliceUint8Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint8 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint8N(v, d) + default: + ft.DecSliceUint8N(rv2i(rv).([]uint8), d) + } +} +func (fastpathDTCborBytes) DecSliceUint8Y(v []uint8, d *decoderCborBytes) (v2 []uint8, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + if ctyp != valueTypeMap { + var dbi dBytesIntoState + v2, dbi = d.decodeBytesInto(v[:len(v):len(v)], false) + return v2, dbi != dBytesIntoParamOut + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint8) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint8, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint8{}) + } + d.mapEnd() + return v, changed +} +func (fastpathDTCborBytes) DecSliceUint8N(v []uint8, d *decoderCborBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + if ctyp != valueTypeMap { + d.decodeBytesInto(v[:len(v):len(v)], true) + return + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + d.mapEnd() +} + +func (d *decoderCborBytes) fastpathDecSliceUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint64) + if vv, changed := ft.DecSliceUint64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint64 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint64N(v, d) + default: + ft.DecSliceUint64N(rv2i(rv).([]uint64), d) + } +} +func (fastpathDTCborBytes) DecSliceUint64Y(v []uint64, d *decoderCborBytes) (v2 []uint64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeUint64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborBytes) DecSliceUint64N(v []uint64, d *decoderCborBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeUint64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborBytes) fastpathDecSliceIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int) + if vv, changed := ft.DecSliceIntY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int + rvGetSlice4Array(rv, &v) + ft.DecSliceIntN(v, d) + default: + ft.DecSliceIntN(rv2i(rv).([]int), d) + } +} +func (fastpathDTCborBytes) DecSliceIntY(v []int, d *decoderCborBytes) (v2 []int, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborBytes) DecSliceIntN(v []int, d *decoderCborBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborBytes) fastpathDecSliceInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int32) + if vv, changed := ft.DecSliceInt32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int32 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt32N(v, d) + default: + ft.DecSliceInt32N(rv2i(rv).([]int32), d) + } +} +func (fastpathDTCborBytes) DecSliceInt32Y(v []int32, d *decoderCborBytes) (v2 []int32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborBytes) DecSliceInt32N(v []int32, d *decoderCborBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborBytes) fastpathDecSliceInt64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int64) + if vv, changed := ft.DecSliceInt64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int64 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt64N(v, d) + default: + ft.DecSliceInt64N(rv2i(rv).([]int64), d) + } +} +func (fastpathDTCborBytes) DecSliceInt64Y(v []int64, d *decoderCborBytes) (v2 []int64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeInt64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborBytes) DecSliceInt64N(v []int64, d *decoderCborBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeInt64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborBytes) fastpathDecSliceBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]bool) + if vv, changed := ft.DecSliceBoolY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []bool + rvGetSlice4Array(rv, &v) + ft.DecSliceBoolN(v, d) + default: + ft.DecSliceBoolN(rv2i(rv).([]bool), d) + } +} +func (fastpathDTCborBytes) DecSliceBoolY(v []bool, d *decoderCborBytes) (v2 []bool, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []bool) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]bool, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, false)) + } + v[uint(j)] = d.d.DecodeBool() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]bool{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborBytes) DecSliceBoolN(v []bool, d *decoderCborBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeBool() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} +func (d *decoderCborBytes) fastpathDecMapStringIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]interface{}) + if *vp == nil { + *vp = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntfL(rv2i(rv).(map[string]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapStringIntfL(v map[string]interface{}, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderCborBytes) fastpathDecMapStringStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]string) + if *vp == nil { + *vp = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringStringL(rv2i(rv).(map[string]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapStringStringL(v map[string]string, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderCborBytes) fastpathDecMapStringBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string][]byte) + if *vp == nil { + *vp = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBytesL(rv2i(rv).(map[string][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapStringBytesL(v map[string][]byte, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderCborBytes) fastpathDecMapStringUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint8) + if *vp == nil { + *vp = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint8L(rv2i(rv).(map[string]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapStringUint8L(v map[string]uint8, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderCborBytes) fastpathDecMapStringUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint64) + if *vp == nil { + *vp = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint64L(rv2i(rv).(map[string]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapStringUint64L(v map[string]uint64, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderCborBytes) fastpathDecMapStringIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int) + if *vp == nil { + *vp = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntL(rv2i(rv).(map[string]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapStringIntL(v map[string]int, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderCborBytes) fastpathDecMapStringInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int32) + if *vp == nil { + *vp = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringInt32L(rv2i(rv).(map[string]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapStringInt32L(v map[string]int32, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderCborBytes) fastpathDecMapStringFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]float64) + if *vp == nil { + *vp = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringFloat64L(rv2i(rv).(map[string]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapStringFloat64L(v map[string]float64, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderCborBytes) fastpathDecMapStringBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]bool) + if *vp == nil { + *vp = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBoolL(rv2i(rv).(map[string]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapStringBoolL(v map[string]bool, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderCborBytes) fastpathDecMapUint8IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]interface{}) + if *vp == nil { + *vp = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntfL(rv2i(rv).(map[uint8]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint8IntfL(v map[uint8]interface{}, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderCborBytes) fastpathDecMapUint8StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]string) + if *vp == nil { + *vp = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8StringL(rv2i(rv).(map[uint8]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint8StringL(v map[uint8]string, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderCborBytes) fastpathDecMapUint8BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8][]byte) + if *vp == nil { + *vp = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BytesL(rv2i(rv).(map[uint8][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint8BytesL(v map[uint8][]byte, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderCborBytes) fastpathDecMapUint8Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint8) + if *vp == nil { + *vp = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint8L(rv2i(rv).(map[uint8]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint8Uint8L(v map[uint8]uint8, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderCborBytes) fastpathDecMapUint8Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint64) + if *vp == nil { + *vp = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint64L(rv2i(rv).(map[uint8]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint8Uint64L(v map[uint8]uint64, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderCborBytes) fastpathDecMapUint8IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int) + if *vp == nil { + *vp = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntL(rv2i(rv).(map[uint8]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint8IntL(v map[uint8]int, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderCborBytes) fastpathDecMapUint8Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int32) + if *vp == nil { + *vp = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Int32L(rv2i(rv).(map[uint8]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint8Int32L(v map[uint8]int32, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderCborBytes) fastpathDecMapUint8Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]float64) + if *vp == nil { + *vp = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Float64L(rv2i(rv).(map[uint8]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint8Float64L(v map[uint8]float64, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderCborBytes) fastpathDecMapUint8BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]bool) + if *vp == nil { + *vp = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BoolL(rv2i(rv).(map[uint8]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint8BoolL(v map[uint8]bool, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderCborBytes) fastpathDecMapUint64IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]interface{}) + if *vp == nil { + *vp = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntfL(rv2i(rv).(map[uint64]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint64IntfL(v map[uint64]interface{}, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderCborBytes) fastpathDecMapUint64StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]string) + if *vp == nil { + *vp = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64StringL(rv2i(rv).(map[uint64]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint64StringL(v map[uint64]string, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderCborBytes) fastpathDecMapUint64BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64][]byte) + if *vp == nil { + *vp = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BytesL(rv2i(rv).(map[uint64][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint64BytesL(v map[uint64][]byte, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderCborBytes) fastpathDecMapUint64Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint8) + if *vp == nil { + *vp = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint8L(rv2i(rv).(map[uint64]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint64Uint8L(v map[uint64]uint8, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderCborBytes) fastpathDecMapUint64Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint64) + if *vp == nil { + *vp = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint64L(rv2i(rv).(map[uint64]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint64Uint64L(v map[uint64]uint64, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderCborBytes) fastpathDecMapUint64IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int) + if *vp == nil { + *vp = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntL(rv2i(rv).(map[uint64]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint64IntL(v map[uint64]int, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderCborBytes) fastpathDecMapUint64Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int32) + if *vp == nil { + *vp = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Int32L(rv2i(rv).(map[uint64]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint64Int32L(v map[uint64]int32, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderCborBytes) fastpathDecMapUint64Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]float64) + if *vp == nil { + *vp = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Float64L(rv2i(rv).(map[uint64]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint64Float64L(v map[uint64]float64, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderCborBytes) fastpathDecMapUint64BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]bool) + if *vp == nil { + *vp = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BoolL(rv2i(rv).(map[uint64]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapUint64BoolL(v map[uint64]bool, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderCborBytes) fastpathDecMapIntIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]interface{}) + if *vp == nil { + *vp = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntfL(rv2i(rv).(map[int]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapIntIntfL(v map[int]interface{}, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderCborBytes) fastpathDecMapIntStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]string) + if *vp == nil { + *vp = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntStringL(rv2i(rv).(map[int]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapIntStringL(v map[int]string, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderCborBytes) fastpathDecMapIntBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int][]byte) + if *vp == nil { + *vp = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBytesL(rv2i(rv).(map[int][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapIntBytesL(v map[int][]byte, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderCborBytes) fastpathDecMapIntUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint8) + if *vp == nil { + *vp = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint8L(rv2i(rv).(map[int]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapIntUint8L(v map[int]uint8, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderCborBytes) fastpathDecMapIntUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint64) + if *vp == nil { + *vp = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint64L(rv2i(rv).(map[int]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapIntUint64L(v map[int]uint64, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderCborBytes) fastpathDecMapIntIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int) + if *vp == nil { + *vp = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntL(rv2i(rv).(map[int]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapIntIntL(v map[int]int, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderCborBytes) fastpathDecMapIntInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int32) + if *vp == nil { + *vp = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntInt32L(rv2i(rv).(map[int]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapIntInt32L(v map[int]int32, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderCborBytes) fastpathDecMapIntFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]float64) + if *vp == nil { + *vp = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntFloat64L(rv2i(rv).(map[int]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapIntFloat64L(v map[int]float64, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderCborBytes) fastpathDecMapIntBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]bool) + if *vp == nil { + *vp = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBoolL(rv2i(rv).(map[int]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapIntBoolL(v map[int]bool, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderCborBytes) fastpathDecMapInt32IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]interface{}) + if *vp == nil { + *vp = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntfL(rv2i(rv).(map[int32]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapInt32IntfL(v map[int32]interface{}, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderCborBytes) fastpathDecMapInt32StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]string) + if *vp == nil { + *vp = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32StringL(rv2i(rv).(map[int32]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapInt32StringL(v map[int32]string, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderCborBytes) fastpathDecMapInt32BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32][]byte) + if *vp == nil { + *vp = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BytesL(rv2i(rv).(map[int32][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapInt32BytesL(v map[int32][]byte, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderCborBytes) fastpathDecMapInt32Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint8) + if *vp == nil { + *vp = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint8L(rv2i(rv).(map[int32]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapInt32Uint8L(v map[int32]uint8, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderCborBytes) fastpathDecMapInt32Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint64) + if *vp == nil { + *vp = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint64L(rv2i(rv).(map[int32]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapInt32Uint64L(v map[int32]uint64, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderCborBytes) fastpathDecMapInt32IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int) + if *vp == nil { + *vp = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntL(rv2i(rv).(map[int32]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapInt32IntL(v map[int32]int, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderCborBytes) fastpathDecMapInt32Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int32) + if *vp == nil { + *vp = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Int32L(rv2i(rv).(map[int32]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapInt32Int32L(v map[int32]int32, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderCborBytes) fastpathDecMapInt32Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]float64) + if *vp == nil { + *vp = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Float64L(rv2i(rv).(map[int32]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapInt32Float64L(v map[int32]float64, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderCborBytes) fastpathDecMapInt32BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]bool) + if *vp == nil { + *vp = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BoolL(rv2i(rv).(map[int32]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborBytes) DecMapInt32BoolL(v map[int32]bool, containerLen int, d *decoderCborBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} + +type fastpathECborIO struct { + rtid uintptr + rt reflect.Type + encfn func(*encoderCborIO, *encFnInfo, reflect.Value) +} +type fastpathDCborIO struct { + rtid uintptr + rt reflect.Type + decfn func(*decoderCborIO, *decFnInfo, reflect.Value) +} +type fastpathEsCborIO [56]fastpathECborIO +type fastpathDsCborIO [56]fastpathDCborIO +type fastpathETCborIO struct{} +type fastpathDTCborIO struct{} + +func (helperEncDriverCborIO) fastpathEList() *fastpathEsCborIO { + var i uint = 0 + var s fastpathEsCborIO + fn := func(v interface{}, fe func(*encoderCborIO, *encFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathECborIO{rt2id(xrt), xrt, fe} + i++ + } + + fn([]interface{}(nil), (*encoderCborIO).fastpathEncSliceIntfR) + fn([]string(nil), (*encoderCborIO).fastpathEncSliceStringR) + fn([][]byte(nil), (*encoderCborIO).fastpathEncSliceBytesR) + fn([]float32(nil), (*encoderCborIO).fastpathEncSliceFloat32R) + fn([]float64(nil), (*encoderCborIO).fastpathEncSliceFloat64R) + fn([]uint8(nil), (*encoderCborIO).fastpathEncSliceUint8R) + fn([]uint64(nil), (*encoderCborIO).fastpathEncSliceUint64R) + fn([]int(nil), (*encoderCborIO).fastpathEncSliceIntR) + fn([]int32(nil), (*encoderCborIO).fastpathEncSliceInt32R) + fn([]int64(nil), (*encoderCborIO).fastpathEncSliceInt64R) + fn([]bool(nil), (*encoderCborIO).fastpathEncSliceBoolR) + + fn(map[string]interface{}(nil), (*encoderCborIO).fastpathEncMapStringIntfR) + fn(map[string]string(nil), (*encoderCborIO).fastpathEncMapStringStringR) + fn(map[string][]byte(nil), (*encoderCborIO).fastpathEncMapStringBytesR) + fn(map[string]uint8(nil), (*encoderCborIO).fastpathEncMapStringUint8R) + fn(map[string]uint64(nil), (*encoderCborIO).fastpathEncMapStringUint64R) + fn(map[string]int(nil), (*encoderCborIO).fastpathEncMapStringIntR) + fn(map[string]int32(nil), (*encoderCborIO).fastpathEncMapStringInt32R) + fn(map[string]float64(nil), (*encoderCborIO).fastpathEncMapStringFloat64R) + fn(map[string]bool(nil), (*encoderCborIO).fastpathEncMapStringBoolR) + fn(map[uint8]interface{}(nil), (*encoderCborIO).fastpathEncMapUint8IntfR) + fn(map[uint8]string(nil), (*encoderCborIO).fastpathEncMapUint8StringR) + fn(map[uint8][]byte(nil), (*encoderCborIO).fastpathEncMapUint8BytesR) + fn(map[uint8]uint8(nil), (*encoderCborIO).fastpathEncMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*encoderCborIO).fastpathEncMapUint8Uint64R) + fn(map[uint8]int(nil), (*encoderCborIO).fastpathEncMapUint8IntR) + fn(map[uint8]int32(nil), (*encoderCborIO).fastpathEncMapUint8Int32R) + fn(map[uint8]float64(nil), (*encoderCborIO).fastpathEncMapUint8Float64R) + fn(map[uint8]bool(nil), (*encoderCborIO).fastpathEncMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*encoderCborIO).fastpathEncMapUint64IntfR) + fn(map[uint64]string(nil), (*encoderCborIO).fastpathEncMapUint64StringR) + fn(map[uint64][]byte(nil), (*encoderCborIO).fastpathEncMapUint64BytesR) + fn(map[uint64]uint8(nil), (*encoderCborIO).fastpathEncMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*encoderCborIO).fastpathEncMapUint64Uint64R) + fn(map[uint64]int(nil), (*encoderCborIO).fastpathEncMapUint64IntR) + fn(map[uint64]int32(nil), (*encoderCborIO).fastpathEncMapUint64Int32R) + fn(map[uint64]float64(nil), (*encoderCborIO).fastpathEncMapUint64Float64R) + fn(map[uint64]bool(nil), (*encoderCborIO).fastpathEncMapUint64BoolR) + fn(map[int]interface{}(nil), (*encoderCborIO).fastpathEncMapIntIntfR) + fn(map[int]string(nil), (*encoderCborIO).fastpathEncMapIntStringR) + fn(map[int][]byte(nil), (*encoderCborIO).fastpathEncMapIntBytesR) + fn(map[int]uint8(nil), (*encoderCborIO).fastpathEncMapIntUint8R) + fn(map[int]uint64(nil), (*encoderCborIO).fastpathEncMapIntUint64R) + fn(map[int]int(nil), (*encoderCborIO).fastpathEncMapIntIntR) + fn(map[int]int32(nil), (*encoderCborIO).fastpathEncMapIntInt32R) + fn(map[int]float64(nil), (*encoderCborIO).fastpathEncMapIntFloat64R) + fn(map[int]bool(nil), (*encoderCborIO).fastpathEncMapIntBoolR) + fn(map[int32]interface{}(nil), (*encoderCborIO).fastpathEncMapInt32IntfR) + fn(map[int32]string(nil), (*encoderCborIO).fastpathEncMapInt32StringR) + fn(map[int32][]byte(nil), (*encoderCborIO).fastpathEncMapInt32BytesR) + fn(map[int32]uint8(nil), (*encoderCborIO).fastpathEncMapInt32Uint8R) + fn(map[int32]uint64(nil), (*encoderCborIO).fastpathEncMapInt32Uint64R) + fn(map[int32]int(nil), (*encoderCborIO).fastpathEncMapInt32IntR) + fn(map[int32]int32(nil), (*encoderCborIO).fastpathEncMapInt32Int32R) + fn(map[int32]float64(nil), (*encoderCborIO).fastpathEncMapInt32Float64R) + fn(map[int32]bool(nil), (*encoderCborIO).fastpathEncMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperDecDriverCborIO) fastpathDList() *fastpathDsCborIO { + var i uint = 0 + var s fastpathDsCborIO + fn := func(v interface{}, fd func(*decoderCborIO, *decFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathDCborIO{rt2id(xrt), xrt, fd} + i++ + } + + fn([]interface{}(nil), (*decoderCborIO).fastpathDecSliceIntfR) + fn([]string(nil), (*decoderCborIO).fastpathDecSliceStringR) + fn([][]byte(nil), (*decoderCborIO).fastpathDecSliceBytesR) + fn([]float32(nil), (*decoderCborIO).fastpathDecSliceFloat32R) + fn([]float64(nil), (*decoderCborIO).fastpathDecSliceFloat64R) + fn([]uint8(nil), (*decoderCborIO).fastpathDecSliceUint8R) + fn([]uint64(nil), (*decoderCborIO).fastpathDecSliceUint64R) + fn([]int(nil), (*decoderCborIO).fastpathDecSliceIntR) + fn([]int32(nil), (*decoderCborIO).fastpathDecSliceInt32R) + fn([]int64(nil), (*decoderCborIO).fastpathDecSliceInt64R) + fn([]bool(nil), (*decoderCborIO).fastpathDecSliceBoolR) + + fn(map[string]interface{}(nil), (*decoderCborIO).fastpathDecMapStringIntfR) + fn(map[string]string(nil), (*decoderCborIO).fastpathDecMapStringStringR) + fn(map[string][]byte(nil), (*decoderCborIO).fastpathDecMapStringBytesR) + fn(map[string]uint8(nil), (*decoderCborIO).fastpathDecMapStringUint8R) + fn(map[string]uint64(nil), (*decoderCborIO).fastpathDecMapStringUint64R) + fn(map[string]int(nil), (*decoderCborIO).fastpathDecMapStringIntR) + fn(map[string]int32(nil), (*decoderCborIO).fastpathDecMapStringInt32R) + fn(map[string]float64(nil), (*decoderCborIO).fastpathDecMapStringFloat64R) + fn(map[string]bool(nil), (*decoderCborIO).fastpathDecMapStringBoolR) + fn(map[uint8]interface{}(nil), (*decoderCborIO).fastpathDecMapUint8IntfR) + fn(map[uint8]string(nil), (*decoderCborIO).fastpathDecMapUint8StringR) + fn(map[uint8][]byte(nil), (*decoderCborIO).fastpathDecMapUint8BytesR) + fn(map[uint8]uint8(nil), (*decoderCborIO).fastpathDecMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*decoderCborIO).fastpathDecMapUint8Uint64R) + fn(map[uint8]int(nil), (*decoderCborIO).fastpathDecMapUint8IntR) + fn(map[uint8]int32(nil), (*decoderCborIO).fastpathDecMapUint8Int32R) + fn(map[uint8]float64(nil), (*decoderCborIO).fastpathDecMapUint8Float64R) + fn(map[uint8]bool(nil), (*decoderCborIO).fastpathDecMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*decoderCborIO).fastpathDecMapUint64IntfR) + fn(map[uint64]string(nil), (*decoderCborIO).fastpathDecMapUint64StringR) + fn(map[uint64][]byte(nil), (*decoderCborIO).fastpathDecMapUint64BytesR) + fn(map[uint64]uint8(nil), (*decoderCborIO).fastpathDecMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*decoderCborIO).fastpathDecMapUint64Uint64R) + fn(map[uint64]int(nil), (*decoderCborIO).fastpathDecMapUint64IntR) + fn(map[uint64]int32(nil), (*decoderCborIO).fastpathDecMapUint64Int32R) + fn(map[uint64]float64(nil), (*decoderCborIO).fastpathDecMapUint64Float64R) + fn(map[uint64]bool(nil), (*decoderCborIO).fastpathDecMapUint64BoolR) + fn(map[int]interface{}(nil), (*decoderCborIO).fastpathDecMapIntIntfR) + fn(map[int]string(nil), (*decoderCborIO).fastpathDecMapIntStringR) + fn(map[int][]byte(nil), (*decoderCborIO).fastpathDecMapIntBytesR) + fn(map[int]uint8(nil), (*decoderCborIO).fastpathDecMapIntUint8R) + fn(map[int]uint64(nil), (*decoderCborIO).fastpathDecMapIntUint64R) + fn(map[int]int(nil), (*decoderCborIO).fastpathDecMapIntIntR) + fn(map[int]int32(nil), (*decoderCborIO).fastpathDecMapIntInt32R) + fn(map[int]float64(nil), (*decoderCborIO).fastpathDecMapIntFloat64R) + fn(map[int]bool(nil), (*decoderCborIO).fastpathDecMapIntBoolR) + fn(map[int32]interface{}(nil), (*decoderCborIO).fastpathDecMapInt32IntfR) + fn(map[int32]string(nil), (*decoderCborIO).fastpathDecMapInt32StringR) + fn(map[int32][]byte(nil), (*decoderCborIO).fastpathDecMapInt32BytesR) + fn(map[int32]uint8(nil), (*decoderCborIO).fastpathDecMapInt32Uint8R) + fn(map[int32]uint64(nil), (*decoderCborIO).fastpathDecMapInt32Uint64R) + fn(map[int32]int(nil), (*decoderCborIO).fastpathDecMapInt32IntR) + fn(map[int32]int32(nil), (*decoderCborIO).fastpathDecMapInt32Int32R) + fn(map[int32]float64(nil), (*decoderCborIO).fastpathDecMapInt32Float64R) + fn(map[int32]bool(nil), (*decoderCborIO).fastpathDecMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperEncDriverCborIO) fastpathEncodeTypeSwitch(iv interface{}, e *encoderCborIO) bool { + var ft fastpathETCborIO + switch v := iv.(type) { + case []interface{}: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntfV(v, e) + } + case []string: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceStringV(v, e) + } + case [][]byte: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBytesV(v, e) + } + case []float32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat32V(v, e) + } + case []float64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat64V(v, e) + } + case []uint8: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint8V(v, e) + } + case []uint64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint64V(v, e) + } + case []int: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntV(v, e) + } + case []int32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt32V(v, e) + } + case []int64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt64V(v, e) + } + case []bool: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBoolV(v, e) + } + case map[string]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntfV(v, e) + } + case map[string]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringStringV(v, e) + } + case map[string][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBytesV(v, e) + } + case map[string]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint8V(v, e) + } + case map[string]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint64V(v, e) + } + case map[string]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntV(v, e) + } + case map[string]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringInt32V(v, e) + } + case map[string]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringFloat64V(v, e) + } + case map[string]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBoolV(v, e) + } + case map[uint8]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntfV(v, e) + } + case map[uint8]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8StringV(v, e) + } + case map[uint8][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BytesV(v, e) + } + case map[uint8]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint8V(v, e) + } + case map[uint8]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint64V(v, e) + } + case map[uint8]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntV(v, e) + } + case map[uint8]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Int32V(v, e) + } + case map[uint8]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Float64V(v, e) + } + case map[uint8]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BoolV(v, e) + } + case map[uint64]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntfV(v, e) + } + case map[uint64]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64StringV(v, e) + } + case map[uint64][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BytesV(v, e) + } + case map[uint64]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint8V(v, e) + } + case map[uint64]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint64V(v, e) + } + case map[uint64]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntV(v, e) + } + case map[uint64]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Int32V(v, e) + } + case map[uint64]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Float64V(v, e) + } + case map[uint64]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BoolV(v, e) + } + case map[int]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntfV(v, e) + } + case map[int]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntStringV(v, e) + } + case map[int][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBytesV(v, e) + } + case map[int]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint8V(v, e) + } + case map[int]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint64V(v, e) + } + case map[int]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntV(v, e) + } + case map[int]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntInt32V(v, e) + } + case map[int]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntFloat64V(v, e) + } + case map[int]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBoolV(v, e) + } + case map[int32]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntfV(v, e) + } + case map[int32]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32StringV(v, e) + } + case map[int32][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BytesV(v, e) + } + case map[int32]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint8V(v, e) + } + case map[int32]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint64V(v, e) + } + case map[int32]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntV(v, e) + } + case map[int32]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Int32V(v, e) + } + case map[int32]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Float64V(v, e) + } + case map[int32]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BoolV(v, e) + } + default: + _ = v + return false + } + return true +} + +func (e *encoderCborIO) fastpathEncSliceIntfR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborIO + var v []interface{} + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]interface{}) + } + if f.ti.mbs { + ft.EncAsMapSliceIntfV(v, e) + return + } + ft.EncSliceIntfV(v, e) +} +func (fastpathETCborIO) EncSliceIntfV(v []interface{}, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborIO) EncAsMapSliceIntfV(v []interface{}, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborIO) fastpathEncSliceStringR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborIO + var v []string + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]string) + } + if f.ti.mbs { + ft.EncAsMapSliceStringV(v, e) + return + } + ft.EncSliceStringV(v, e) +} +func (fastpathETCborIO) EncSliceStringV(v []string, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborIO) EncAsMapSliceStringV(v []string, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborIO) fastpathEncSliceBytesR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborIO + var v [][]byte + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([][]byte) + } + if f.ti.mbs { + ft.EncAsMapSliceBytesV(v, e) + return + } + ft.EncSliceBytesV(v, e) +} +func (fastpathETCborIO) EncSliceBytesV(v [][]byte, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborIO) EncAsMapSliceBytesV(v [][]byte, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborIO) fastpathEncSliceFloat32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborIO + var v []float32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float32) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat32V(v, e) + return + } + ft.EncSliceFloat32V(v, e) +} +func (fastpathETCborIO) EncSliceFloat32V(v []float32, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborIO) EncAsMapSliceFloat32V(v []float32, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborIO) fastpathEncSliceFloat64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborIO + var v []float64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float64) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat64V(v, e) + return + } + ft.EncSliceFloat64V(v, e) +} +func (fastpathETCborIO) EncSliceFloat64V(v []float64, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborIO) EncAsMapSliceFloat64V(v []float64, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborIO) fastpathEncSliceUint8R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborIO + var v []uint8 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint8) + } + if f.ti.mbs { + ft.EncAsMapSliceUint8V(v, e) + return + } + ft.EncSliceUint8V(v, e) +} +func (fastpathETCborIO) EncSliceUint8V(v []uint8, e *encoderCborIO) { + e.e.EncodeStringBytesRaw(v) +} +func (fastpathETCborIO) EncAsMapSliceUint8V(v []uint8, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(uint64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborIO) fastpathEncSliceUint64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborIO + var v []uint64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint64) + } + if f.ti.mbs { + ft.EncAsMapSliceUint64V(v, e) + return + } + ft.EncSliceUint64V(v, e) +} +func (fastpathETCborIO) EncSliceUint64V(v []uint64, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborIO) EncAsMapSliceUint64V(v []uint64, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborIO) fastpathEncSliceIntR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborIO + var v []int + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int) + } + if f.ti.mbs { + ft.EncAsMapSliceIntV(v, e) + return + } + ft.EncSliceIntV(v, e) +} +func (fastpathETCborIO) EncSliceIntV(v []int, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborIO) EncAsMapSliceIntV(v []int, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborIO) fastpathEncSliceInt32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborIO + var v []int32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int32) + } + if f.ti.mbs { + ft.EncAsMapSliceInt32V(v, e) + return + } + ft.EncSliceInt32V(v, e) +} +func (fastpathETCborIO) EncSliceInt32V(v []int32, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborIO) EncAsMapSliceInt32V(v []int32, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborIO) fastpathEncSliceInt64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborIO + var v []int64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int64) + } + if f.ti.mbs { + ft.EncAsMapSliceInt64V(v, e) + return + } + ft.EncSliceInt64V(v, e) +} +func (fastpathETCborIO) EncSliceInt64V(v []int64, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborIO) EncAsMapSliceInt64V(v []int64, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborIO) fastpathEncSliceBoolR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETCborIO + var v []bool + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]bool) + } + if f.ti.mbs { + ft.EncAsMapSliceBoolV(v, e) + return + } + ft.EncSliceBoolV(v, e) +} +func (fastpathETCborIO) EncSliceBoolV(v []bool, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETCborIO) EncAsMapSliceBoolV(v []bool, e *encoderCborIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborIO) fastpathEncMapStringIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapStringIntfV(rv2i(rv).(map[string]interface{}), e) +} +func (fastpathETCborIO) EncMapStringIntfV(v map[string]interface{}, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapStringStringR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapStringStringV(rv2i(rv).(map[string]string), e) +} +func (fastpathETCborIO) EncMapStringStringV(v map[string]string, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapStringBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapStringBytesV(rv2i(rv).(map[string][]byte), e) +} +func (fastpathETCborIO) EncMapStringBytesV(v map[string][]byte, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapStringUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapStringUint8V(rv2i(rv).(map[string]uint8), e) +} +func (fastpathETCborIO) EncMapStringUint8V(v map[string]uint8, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapStringUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapStringUint64V(rv2i(rv).(map[string]uint64), e) +} +func (fastpathETCborIO) EncMapStringUint64V(v map[string]uint64, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapStringIntR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapStringIntV(rv2i(rv).(map[string]int), e) +} +func (fastpathETCborIO) EncMapStringIntV(v map[string]int, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapStringInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapStringInt32V(rv2i(rv).(map[string]int32), e) +} +func (fastpathETCborIO) EncMapStringInt32V(v map[string]int32, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapStringFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapStringFloat64V(rv2i(rv).(map[string]float64), e) +} +func (fastpathETCborIO) EncMapStringFloat64V(v map[string]float64, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapStringBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapStringBoolV(rv2i(rv).(map[string]bool), e) +} +func (fastpathETCborIO) EncMapStringBoolV(v map[string]bool, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint8IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), e) +} +func (fastpathETCborIO) EncMapUint8IntfV(v map[uint8]interface{}, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint8StringR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint8StringV(rv2i(rv).(map[uint8]string), e) +} +func (fastpathETCborIO) EncMapUint8StringV(v map[uint8]string, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint8BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint8BytesV(rv2i(rv).(map[uint8][]byte), e) +} +func (fastpathETCborIO) EncMapUint8BytesV(v map[uint8][]byte, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint8Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), e) +} +func (fastpathETCborIO) EncMapUint8Uint8V(v map[uint8]uint8, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint8Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), e) +} +func (fastpathETCborIO) EncMapUint8Uint64V(v map[uint8]uint64, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint8IntR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint8IntV(rv2i(rv).(map[uint8]int), e) +} +func (fastpathETCborIO) EncMapUint8IntV(v map[uint8]int, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint8Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint8Int32V(rv2i(rv).(map[uint8]int32), e) +} +func (fastpathETCborIO) EncMapUint8Int32V(v map[uint8]int32, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint8Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint8Float64V(rv2i(rv).(map[uint8]float64), e) +} +func (fastpathETCborIO) EncMapUint8Float64V(v map[uint8]float64, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint8BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint8BoolV(rv2i(rv).(map[uint8]bool), e) +} +func (fastpathETCborIO) EncMapUint8BoolV(v map[uint8]bool, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint64IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), e) +} +func (fastpathETCborIO) EncMapUint64IntfV(v map[uint64]interface{}, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint64StringR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint64StringV(rv2i(rv).(map[uint64]string), e) +} +func (fastpathETCborIO) EncMapUint64StringV(v map[uint64]string, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint64BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint64BytesV(rv2i(rv).(map[uint64][]byte), e) +} +func (fastpathETCborIO) EncMapUint64BytesV(v map[uint64][]byte, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint64Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), e) +} +func (fastpathETCborIO) EncMapUint64Uint8V(v map[uint64]uint8, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint64Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), e) +} +func (fastpathETCborIO) EncMapUint64Uint64V(v map[uint64]uint64, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint64IntR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint64IntV(rv2i(rv).(map[uint64]int), e) +} +func (fastpathETCborIO) EncMapUint64IntV(v map[uint64]int, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint64Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint64Int32V(rv2i(rv).(map[uint64]int32), e) +} +func (fastpathETCborIO) EncMapUint64Int32V(v map[uint64]int32, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint64Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint64Float64V(rv2i(rv).(map[uint64]float64), e) +} +func (fastpathETCborIO) EncMapUint64Float64V(v map[uint64]float64, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapUint64BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapUint64BoolV(rv2i(rv).(map[uint64]bool), e) +} +func (fastpathETCborIO) EncMapUint64BoolV(v map[uint64]bool, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapIntIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapIntIntfV(rv2i(rv).(map[int]interface{}), e) +} +func (fastpathETCborIO) EncMapIntIntfV(v map[int]interface{}, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapIntStringR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapIntStringV(rv2i(rv).(map[int]string), e) +} +func (fastpathETCborIO) EncMapIntStringV(v map[int]string, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapIntBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapIntBytesV(rv2i(rv).(map[int][]byte), e) +} +func (fastpathETCborIO) EncMapIntBytesV(v map[int][]byte, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapIntUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapIntUint8V(rv2i(rv).(map[int]uint8), e) +} +func (fastpathETCborIO) EncMapIntUint8V(v map[int]uint8, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapIntUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapIntUint64V(rv2i(rv).(map[int]uint64), e) +} +func (fastpathETCborIO) EncMapIntUint64V(v map[int]uint64, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapIntIntR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapIntIntV(rv2i(rv).(map[int]int), e) +} +func (fastpathETCborIO) EncMapIntIntV(v map[int]int, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapIntInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapIntInt32V(rv2i(rv).(map[int]int32), e) +} +func (fastpathETCborIO) EncMapIntInt32V(v map[int]int32, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapIntFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapIntFloat64V(rv2i(rv).(map[int]float64), e) +} +func (fastpathETCborIO) EncMapIntFloat64V(v map[int]float64, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapIntBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapIntBoolV(rv2i(rv).(map[int]bool), e) +} +func (fastpathETCborIO) EncMapIntBoolV(v map[int]bool, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapInt32IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapInt32IntfV(rv2i(rv).(map[int32]interface{}), e) +} +func (fastpathETCborIO) EncMapInt32IntfV(v map[int32]interface{}, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapInt32StringR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapInt32StringV(rv2i(rv).(map[int32]string), e) +} +func (fastpathETCborIO) EncMapInt32StringV(v map[int32]string, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapInt32BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapInt32BytesV(rv2i(rv).(map[int32][]byte), e) +} +func (fastpathETCborIO) EncMapInt32BytesV(v map[int32][]byte, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapInt32Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapInt32Uint8V(rv2i(rv).(map[int32]uint8), e) +} +func (fastpathETCborIO) EncMapInt32Uint8V(v map[int32]uint8, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapInt32Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapInt32Uint64V(rv2i(rv).(map[int32]uint64), e) +} +func (fastpathETCborIO) EncMapInt32Uint64V(v map[int32]uint64, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapInt32IntR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapInt32IntV(rv2i(rv).(map[int32]int), e) +} +func (fastpathETCborIO) EncMapInt32IntV(v map[int32]int, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapInt32Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapInt32Int32V(rv2i(rv).(map[int32]int32), e) +} +func (fastpathETCborIO) EncMapInt32Int32V(v map[int32]int32, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapInt32Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapInt32Float64V(rv2i(rv).(map[int32]float64), e) +} +func (fastpathETCborIO) EncMapInt32Float64V(v map[int32]float64, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderCborIO) fastpathEncMapInt32BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETCborIO{}.EncMapInt32BoolV(rv2i(rv).(map[int32]bool), e) +} +func (fastpathETCborIO) EncMapInt32BoolV(v map[int32]bool, e *encoderCborIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (helperDecDriverCborIO) fastpathDecodeTypeSwitch(iv interface{}, d *decoderCborIO) bool { + var ft fastpathDTCborIO + var changed bool + var containerLen int + switch v := iv.(type) { + case []interface{}: + ft.DecSliceIntfN(v, d) + case *[]interface{}: + var v2 []interface{} + if v2, changed = ft.DecSliceIntfY(*v, d); changed { + *v = v2 + } + case []string: + ft.DecSliceStringN(v, d) + case *[]string: + var v2 []string + if v2, changed = ft.DecSliceStringY(*v, d); changed { + *v = v2 + } + case [][]byte: + ft.DecSliceBytesN(v, d) + case *[][]byte: + var v2 [][]byte + if v2, changed = ft.DecSliceBytesY(*v, d); changed { + *v = v2 + } + case []float32: + ft.DecSliceFloat32N(v, d) + case *[]float32: + var v2 []float32 + if v2, changed = ft.DecSliceFloat32Y(*v, d); changed { + *v = v2 + } + case []float64: + ft.DecSliceFloat64N(v, d) + case *[]float64: + var v2 []float64 + if v2, changed = ft.DecSliceFloat64Y(*v, d); changed { + *v = v2 + } + case []uint8: + ft.DecSliceUint8N(v, d) + case *[]uint8: + var v2 []uint8 + if v2, changed = ft.DecSliceUint8Y(*v, d); changed { + *v = v2 + } + case []uint64: + ft.DecSliceUint64N(v, d) + case *[]uint64: + var v2 []uint64 + if v2, changed = ft.DecSliceUint64Y(*v, d); changed { + *v = v2 + } + case []int: + ft.DecSliceIntN(v, d) + case *[]int: + var v2 []int + if v2, changed = ft.DecSliceIntY(*v, d); changed { + *v = v2 + } + case []int32: + ft.DecSliceInt32N(v, d) + case *[]int32: + var v2 []int32 + if v2, changed = ft.DecSliceInt32Y(*v, d); changed { + *v = v2 + } + case []int64: + ft.DecSliceInt64N(v, d) + case *[]int64: + var v2 []int64 + if v2, changed = ft.DecSliceInt64Y(*v, d); changed { + *v = v2 + } + case []bool: + ft.DecSliceBoolN(v, d) + case *[]bool: + var v2 []bool + if v2, changed = ft.DecSliceBoolY(*v, d); changed { + *v = v2 + } + case map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*v, containerLen, d) + } + d.mapEnd() + } + default: + _ = v + return false + } + return true +} + +func (d *decoderCborIO) fastpathDecSliceIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]interface{}) + if vv, changed := ft.DecSliceIntfY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []interface{} + rvGetSlice4Array(rv, &v) + ft.DecSliceIntfN(v, d) + default: + ft.DecSliceIntfN(rv2i(rv).([]interface{}), d) + } +} +func (fastpathDTCborIO) DecSliceIntfY(v []interface{}, d *decoderCborIO) (v2 []interface{}, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []interface{}) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]interface{}, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + d.decode(&v[uint(j)]) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]interface{}{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborIO) DecSliceIntfN(v []interface{}, d *decoderCborIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + d.decode(&v[uint(j)]) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborIO) fastpathDecSliceStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]string) + if vv, changed := ft.DecSliceStringY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []string + rvGetSlice4Array(rv, &v) + ft.DecSliceStringN(v, d) + default: + ft.DecSliceStringN(rv2i(rv).([]string), d) + } +} +func (fastpathDTCborIO) DecSliceStringY(v []string, d *decoderCborIO) (v2 []string, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []string) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]string, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, "")) + } + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]string{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborIO) DecSliceStringN(v []string, d *decoderCborIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborIO) fastpathDecSliceBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[][]byte) + if vv, changed := ft.DecSliceBytesY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v [][]byte + rvGetSlice4Array(rv, &v) + ft.DecSliceBytesN(v, d) + default: + ft.DecSliceBytesN(rv2i(rv).([][]byte), d) + } +} +func (fastpathDTCborIO) DecSliceBytesY(v [][]byte, d *decoderCborIO) (v2 [][]byte, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst [][]byte) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 24)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([][]byte, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([][]byte{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborIO) DecSliceBytesN(v [][]byte, d *decoderCborIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborIO) fastpathDecSliceFloat32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float32) + if vv, changed := ft.DecSliceFloat32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float32 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat32N(v, d) + default: + ft.DecSliceFloat32N(rv2i(rv).([]float32), d) + } +} +func (fastpathDTCborIO) DecSliceFloat32Y(v []float32, d *decoderCborIO) (v2 []float32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = float32(d.d.DecodeFloat32()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborIO) DecSliceFloat32N(v []float32, d *decoderCborIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = float32(d.d.DecodeFloat32()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborIO) fastpathDecSliceFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float64) + if vv, changed := ft.DecSliceFloat64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float64 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat64N(v, d) + default: + ft.DecSliceFloat64N(rv2i(rv).([]float64), d) + } +} +func (fastpathDTCborIO) DecSliceFloat64Y(v []float64, d *decoderCborIO) (v2 []float64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeFloat64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborIO) DecSliceFloat64N(v []float64, d *decoderCborIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeFloat64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborIO) fastpathDecSliceUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint8) + if vv, changed := ft.DecSliceUint8Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint8 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint8N(v, d) + default: + ft.DecSliceUint8N(rv2i(rv).([]uint8), d) + } +} +func (fastpathDTCborIO) DecSliceUint8Y(v []uint8, d *decoderCborIO) (v2 []uint8, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + if ctyp != valueTypeMap { + var dbi dBytesIntoState + v2, dbi = d.decodeBytesInto(v[:len(v):len(v)], false) + return v2, dbi != dBytesIntoParamOut + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint8) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint8, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint8{}) + } + d.mapEnd() + return v, changed +} +func (fastpathDTCborIO) DecSliceUint8N(v []uint8, d *decoderCborIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + if ctyp != valueTypeMap { + d.decodeBytesInto(v[:len(v):len(v)], true) + return + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + d.mapEnd() +} + +func (d *decoderCborIO) fastpathDecSliceUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint64) + if vv, changed := ft.DecSliceUint64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint64 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint64N(v, d) + default: + ft.DecSliceUint64N(rv2i(rv).([]uint64), d) + } +} +func (fastpathDTCborIO) DecSliceUint64Y(v []uint64, d *decoderCborIO) (v2 []uint64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeUint64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborIO) DecSliceUint64N(v []uint64, d *decoderCborIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeUint64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborIO) fastpathDecSliceIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int) + if vv, changed := ft.DecSliceIntY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int + rvGetSlice4Array(rv, &v) + ft.DecSliceIntN(v, d) + default: + ft.DecSliceIntN(rv2i(rv).([]int), d) + } +} +func (fastpathDTCborIO) DecSliceIntY(v []int, d *decoderCborIO) (v2 []int, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborIO) DecSliceIntN(v []int, d *decoderCborIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborIO) fastpathDecSliceInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int32) + if vv, changed := ft.DecSliceInt32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int32 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt32N(v, d) + default: + ft.DecSliceInt32N(rv2i(rv).([]int32), d) + } +} +func (fastpathDTCborIO) DecSliceInt32Y(v []int32, d *decoderCborIO) (v2 []int32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborIO) DecSliceInt32N(v []int32, d *decoderCborIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborIO) fastpathDecSliceInt64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int64) + if vv, changed := ft.DecSliceInt64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int64 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt64N(v, d) + default: + ft.DecSliceInt64N(rv2i(rv).([]int64), d) + } +} +func (fastpathDTCborIO) DecSliceInt64Y(v []int64, d *decoderCborIO) (v2 []int64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeInt64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborIO) DecSliceInt64N(v []int64, d *decoderCborIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeInt64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborIO) fastpathDecSliceBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]bool) + if vv, changed := ft.DecSliceBoolY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []bool + rvGetSlice4Array(rv, &v) + ft.DecSliceBoolN(v, d) + default: + ft.DecSliceBoolN(rv2i(rv).([]bool), d) + } +} +func (fastpathDTCborIO) DecSliceBoolY(v []bool, d *decoderCborIO) (v2 []bool, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []bool) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]bool, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, false)) + } + v[uint(j)] = d.d.DecodeBool() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]bool{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTCborIO) DecSliceBoolN(v []bool, d *decoderCborIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeBool() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} +func (d *decoderCborIO) fastpathDecMapStringIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]interface{}) + if *vp == nil { + *vp = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntfL(rv2i(rv).(map[string]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapStringIntfL(v map[string]interface{}, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderCborIO) fastpathDecMapStringStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]string) + if *vp == nil { + *vp = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringStringL(rv2i(rv).(map[string]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapStringStringL(v map[string]string, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderCborIO) fastpathDecMapStringBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string][]byte) + if *vp == nil { + *vp = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBytesL(rv2i(rv).(map[string][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapStringBytesL(v map[string][]byte, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderCborIO) fastpathDecMapStringUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint8) + if *vp == nil { + *vp = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint8L(rv2i(rv).(map[string]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapStringUint8L(v map[string]uint8, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderCborIO) fastpathDecMapStringUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint64) + if *vp == nil { + *vp = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint64L(rv2i(rv).(map[string]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapStringUint64L(v map[string]uint64, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderCborIO) fastpathDecMapStringIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int) + if *vp == nil { + *vp = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntL(rv2i(rv).(map[string]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapStringIntL(v map[string]int, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderCborIO) fastpathDecMapStringInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int32) + if *vp == nil { + *vp = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringInt32L(rv2i(rv).(map[string]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapStringInt32L(v map[string]int32, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderCborIO) fastpathDecMapStringFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]float64) + if *vp == nil { + *vp = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringFloat64L(rv2i(rv).(map[string]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapStringFloat64L(v map[string]float64, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderCborIO) fastpathDecMapStringBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]bool) + if *vp == nil { + *vp = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBoolL(rv2i(rv).(map[string]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapStringBoolL(v map[string]bool, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderCborIO) fastpathDecMapUint8IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]interface{}) + if *vp == nil { + *vp = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntfL(rv2i(rv).(map[uint8]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint8IntfL(v map[uint8]interface{}, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderCborIO) fastpathDecMapUint8StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]string) + if *vp == nil { + *vp = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8StringL(rv2i(rv).(map[uint8]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint8StringL(v map[uint8]string, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderCborIO) fastpathDecMapUint8BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8][]byte) + if *vp == nil { + *vp = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BytesL(rv2i(rv).(map[uint8][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint8BytesL(v map[uint8][]byte, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderCborIO) fastpathDecMapUint8Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint8) + if *vp == nil { + *vp = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint8L(rv2i(rv).(map[uint8]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint8Uint8L(v map[uint8]uint8, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderCborIO) fastpathDecMapUint8Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint64) + if *vp == nil { + *vp = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint64L(rv2i(rv).(map[uint8]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint8Uint64L(v map[uint8]uint64, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderCborIO) fastpathDecMapUint8IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int) + if *vp == nil { + *vp = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntL(rv2i(rv).(map[uint8]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint8IntL(v map[uint8]int, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderCborIO) fastpathDecMapUint8Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int32) + if *vp == nil { + *vp = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Int32L(rv2i(rv).(map[uint8]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint8Int32L(v map[uint8]int32, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderCborIO) fastpathDecMapUint8Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]float64) + if *vp == nil { + *vp = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Float64L(rv2i(rv).(map[uint8]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint8Float64L(v map[uint8]float64, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderCborIO) fastpathDecMapUint8BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]bool) + if *vp == nil { + *vp = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BoolL(rv2i(rv).(map[uint8]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint8BoolL(v map[uint8]bool, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderCborIO) fastpathDecMapUint64IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]interface{}) + if *vp == nil { + *vp = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntfL(rv2i(rv).(map[uint64]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint64IntfL(v map[uint64]interface{}, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderCborIO) fastpathDecMapUint64StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]string) + if *vp == nil { + *vp = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64StringL(rv2i(rv).(map[uint64]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint64StringL(v map[uint64]string, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderCborIO) fastpathDecMapUint64BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64][]byte) + if *vp == nil { + *vp = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BytesL(rv2i(rv).(map[uint64][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint64BytesL(v map[uint64][]byte, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderCborIO) fastpathDecMapUint64Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint8) + if *vp == nil { + *vp = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint8L(rv2i(rv).(map[uint64]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint64Uint8L(v map[uint64]uint8, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderCborIO) fastpathDecMapUint64Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint64) + if *vp == nil { + *vp = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint64L(rv2i(rv).(map[uint64]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint64Uint64L(v map[uint64]uint64, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderCborIO) fastpathDecMapUint64IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int) + if *vp == nil { + *vp = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntL(rv2i(rv).(map[uint64]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint64IntL(v map[uint64]int, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderCborIO) fastpathDecMapUint64Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int32) + if *vp == nil { + *vp = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Int32L(rv2i(rv).(map[uint64]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint64Int32L(v map[uint64]int32, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderCborIO) fastpathDecMapUint64Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]float64) + if *vp == nil { + *vp = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Float64L(rv2i(rv).(map[uint64]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint64Float64L(v map[uint64]float64, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderCborIO) fastpathDecMapUint64BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]bool) + if *vp == nil { + *vp = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BoolL(rv2i(rv).(map[uint64]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapUint64BoolL(v map[uint64]bool, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderCborIO) fastpathDecMapIntIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]interface{}) + if *vp == nil { + *vp = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntfL(rv2i(rv).(map[int]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapIntIntfL(v map[int]interface{}, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderCborIO) fastpathDecMapIntStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]string) + if *vp == nil { + *vp = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntStringL(rv2i(rv).(map[int]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapIntStringL(v map[int]string, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderCborIO) fastpathDecMapIntBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int][]byte) + if *vp == nil { + *vp = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBytesL(rv2i(rv).(map[int][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapIntBytesL(v map[int][]byte, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderCborIO) fastpathDecMapIntUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint8) + if *vp == nil { + *vp = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint8L(rv2i(rv).(map[int]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapIntUint8L(v map[int]uint8, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderCborIO) fastpathDecMapIntUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint64) + if *vp == nil { + *vp = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint64L(rv2i(rv).(map[int]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapIntUint64L(v map[int]uint64, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderCborIO) fastpathDecMapIntIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int) + if *vp == nil { + *vp = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntL(rv2i(rv).(map[int]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapIntIntL(v map[int]int, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderCborIO) fastpathDecMapIntInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int32) + if *vp == nil { + *vp = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntInt32L(rv2i(rv).(map[int]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapIntInt32L(v map[int]int32, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderCborIO) fastpathDecMapIntFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]float64) + if *vp == nil { + *vp = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntFloat64L(rv2i(rv).(map[int]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapIntFloat64L(v map[int]float64, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderCborIO) fastpathDecMapIntBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]bool) + if *vp == nil { + *vp = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBoolL(rv2i(rv).(map[int]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapIntBoolL(v map[int]bool, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderCborIO) fastpathDecMapInt32IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]interface{}) + if *vp == nil { + *vp = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntfL(rv2i(rv).(map[int32]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapInt32IntfL(v map[int32]interface{}, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderCborIO) fastpathDecMapInt32StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]string) + if *vp == nil { + *vp = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32StringL(rv2i(rv).(map[int32]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapInt32StringL(v map[int32]string, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderCborIO) fastpathDecMapInt32BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32][]byte) + if *vp == nil { + *vp = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BytesL(rv2i(rv).(map[int32][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapInt32BytesL(v map[int32][]byte, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderCborIO) fastpathDecMapInt32Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint8) + if *vp == nil { + *vp = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint8L(rv2i(rv).(map[int32]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapInt32Uint8L(v map[int32]uint8, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderCborIO) fastpathDecMapInt32Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint64) + if *vp == nil { + *vp = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint64L(rv2i(rv).(map[int32]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapInt32Uint64L(v map[int32]uint64, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderCborIO) fastpathDecMapInt32IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int) + if *vp == nil { + *vp = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntL(rv2i(rv).(map[int32]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapInt32IntL(v map[int32]int, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderCborIO) fastpathDecMapInt32Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int32) + if *vp == nil { + *vp = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Int32L(rv2i(rv).(map[int32]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapInt32Int32L(v map[int32]int32, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderCborIO) fastpathDecMapInt32Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]float64) + if *vp == nil { + *vp = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Float64L(rv2i(rv).(map[int32]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapInt32Float64L(v map[int32]float64, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderCborIO) fastpathDecMapInt32BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTCborIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]bool) + if *vp == nil { + *vp = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BoolL(rv2i(rv).(map[int32]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTCborIO) DecMapInt32BoolL(v map[int32]bool, containerLen int, d *decoderCborIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} diff --git a/vendor/github.com/ugorji/go/codec/cbor.go b/vendor/github.com/ugorji/go/codec/cbor.go index 802b1fc..2229a2b 100644 --- a/vendor/github.com/ugorji/go/codec/cbor.go +++ b/vendor/github.com/ugorji/go/codec/cbor.go @@ -1,194 +1,92 @@ +//go:build notmono || codec.notmono + // Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. // Use of this source code is governed by a MIT license found in the LICENSE file. package codec import ( + "io" "math" + "math/big" "reflect" "time" "unicode/utf8" ) -// major -const ( - cborMajorUint byte = iota - cborMajorNegInt - cborMajorBytes - cborMajorString - cborMajorArray - cborMajorMap - cborMajorTag - cborMajorSimpleOrFloat -) - -// simple -const ( - cborBdFalse byte = 0xf4 + iota - cborBdTrue - cborBdNil - cborBdUndefined - cborBdExt - cborBdFloat16 - cborBdFloat32 - cborBdFloat64 -) - -// indefinite -const ( - cborBdIndefiniteBytes byte = 0x5f - cborBdIndefiniteString byte = 0x7f - cborBdIndefiniteArray byte = 0x9f - cborBdIndefiniteMap byte = 0xbf - cborBdBreak byte = 0xff -) - -// These define some in-stream descriptors for -// manual encoding e.g. when doing explicit indefinite-length -const ( - CborStreamBytes byte = 0x5f - CborStreamString byte = 0x7f - CborStreamArray byte = 0x9f - CborStreamMap byte = 0xbf - CborStreamBreak byte = 0xff -) - -// base values -const ( - cborBaseUint byte = 0x00 - cborBaseNegInt byte = 0x20 - cborBaseBytes byte = 0x40 - cborBaseString byte = 0x60 - cborBaseArray byte = 0x80 - cborBaseMap byte = 0xa0 - cborBaseTag byte = 0xc0 - cborBaseSimple byte = 0xe0 -) - -// const ( -// cborSelfDesrTag byte = 0xd9 -// cborSelfDesrTag2 byte = 0xd9 -// cborSelfDesrTag3 byte = 0xf7 -// ) - -var ( - cbordescSimpleNames = map[byte]string{ - cborBdNil: "nil", - cborBdFalse: "false", - cborBdTrue: "true", - cborBdFloat16: "float", - cborBdFloat32: "float", - cborBdFloat64: "float", - cborBdBreak: "break", - } - cbordescIndefNames = map[byte]string{ - cborBdIndefiniteBytes: "bytes*", - cborBdIndefiniteString: "string*", - cborBdIndefiniteArray: "array*", - cborBdIndefiniteMap: "map*", - } - cbordescMajorNames = map[byte]string{ - cborMajorUint: "(u)int", - cborMajorNegInt: "int", - cborMajorBytes: "bytes", - cborMajorString: "string", - cborMajorArray: "array", - cborMajorMap: "map", - cborMajorTag: "tag", - cborMajorSimpleOrFloat: "simple", - } -) - -func cbordesc(bd byte) (s string) { - bm := bd >> 5 - if bm == cborMajorSimpleOrFloat { - s = cbordescSimpleNames[bd] - } else { - s = cbordescMajorNames[bm] - if s == "" { - s = cbordescIndefNames[bd] - } - } - if s == "" { - s = "unknown" - } - return -} - // ------------------- -type cborEncDriver struct { +type cborEncDriver[T encWriter] struct { noBuiltInTypes encDriverNoState encDriverNoopContainerWriter - h *CborHandle + encDriverContainerNoTrackerT + + h *CborHandle + e *encoderBase + w T + enc encoderI // scratch buffer for: encode time, numbers, etc // // RFC3339Nano uses 35 chars: 2006-01-02T15:04:05.999999999Z07:00 b [40]byte - - e Encoder -} - -func (e *cborEncDriver) encoder() *Encoder { - return &e.e } -func (e *cborEncDriver) EncodeNil() { - e.e.encWr.writen1(cborBdNil) +func (e *cborEncDriver[T]) EncodeNil() { + e.w.writen1(cborBdNil) } -func (e *cborEncDriver) EncodeBool(b bool) { +func (e *cborEncDriver[T]) EncodeBool(b bool) { if b { - e.e.encWr.writen1(cborBdTrue) + e.w.writen1(cborBdTrue) } else { - e.e.encWr.writen1(cborBdFalse) + e.w.writen1(cborBdFalse) } } -func (e *cborEncDriver) EncodeFloat32(f float32) { +func (e *cborEncDriver[T]) EncodeFloat32(f float32) { b := math.Float32bits(f) if e.h.OptimumSize { if h := floatToHalfFloatBits(b); halfFloatToFloatBits(h) == b { - e.e.encWr.writen1(cborBdFloat16) - bigen.writeUint16(e.e.w(), h) + e.w.writen1(cborBdFloat16) + e.w.writen2(bigen.PutUint16(h)) return } } - e.e.encWr.writen1(cborBdFloat32) - bigen.writeUint32(e.e.w(), b) + e.w.writen1(cborBdFloat32) + e.w.writen4(bigen.PutUint32(b)) } -func (e *cborEncDriver) EncodeFloat64(f float64) { +func (e *cborEncDriver[T]) EncodeFloat64(f float64) { if e.h.OptimumSize { if f32 := float32(f); float64(f32) == f { e.EncodeFloat32(f32) return } } - e.e.encWr.writen1(cborBdFloat64) - bigen.writeUint64(e.e.w(), math.Float64bits(f)) + e.w.writen1(cborBdFloat64) + e.w.writen8(bigen.PutUint64(math.Float64bits(f))) } -func (e *cborEncDriver) encUint(v uint64, bd byte) { +func (e *cborEncDriver[T]) encUint(v uint64, bd byte) { if v <= 0x17 { - e.e.encWr.writen1(byte(v) + bd) + e.w.writen1(byte(v) + bd) } else if v <= math.MaxUint8 { - e.e.encWr.writen2(bd+0x18, uint8(v)) + e.w.writen2(bd+0x18, uint8(v)) } else if v <= math.MaxUint16 { - e.e.encWr.writen1(bd + 0x19) - bigen.writeUint16(e.e.w(), uint16(v)) + e.w.writen1(bd + 0x19) + e.w.writen2(bigen.PutUint16(uint16(v))) } else if v <= math.MaxUint32 { - e.e.encWr.writen1(bd + 0x1a) - bigen.writeUint32(e.e.w(), uint32(v)) + e.w.writen1(bd + 0x1a) + e.w.writen4(bigen.PutUint32(uint32(v))) } else { // if v <= math.MaxUint64 { - e.e.encWr.writen1(bd + 0x1b) - bigen.writeUint64(e.e.w(), v) + e.w.writen1(bd + 0x1b) + e.w.writen8(bigen.PutUint64(v)) } } -func (e *cborEncDriver) EncodeInt(v int64) { +func (e *cborEncDriver[T]) EncodeInt(v int64) { if v < 0 { e.encUint(uint64(-1-v), cborBaseNegInt) } else { @@ -196,20 +94,20 @@ func (e *cborEncDriver) EncodeInt(v int64) { } } -func (e *cborEncDriver) EncodeUint(v uint64) { +func (e *cborEncDriver[T]) EncodeUint(v uint64) { e.encUint(v, cborBaseUint) } -func (e *cborEncDriver) encLen(bd byte, length int) { +func (e *cborEncDriver[T]) encLen(bd byte, length int) { e.encUint(uint64(length), bd) } -func (e *cborEncDriver) EncodeTime(t time.Time) { +func (e *cborEncDriver[T]) EncodeTime(t time.Time) { if t.IsZero() { e.EncodeNil() } else if e.h.TimeRFC3339 { e.encUint(0, cborBaseTag) - e.encStringBytesS(cborBaseString, stringView(fmtTime(t, time.RFC3339Nano, e.b[:0]))) + e.encStringBytesS(cborBaseString, stringView(t.AppendFormat(e.b[:0], time.RFC3339Nano))) } else { e.encUint(1, cborBaseTag) t = t.UTC().Round(time.Microsecond) @@ -222,56 +120,75 @@ func (e *cborEncDriver) EncodeTime(t time.Time) { } } -func (e *cborEncDriver) EncodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { +func (e *cborEncDriver[T]) EncodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { e.encUint(uint64(xtag), cborBaseTag) if ext == SelfExt { - e.e.encodeValue(baseRV(rv), e.h.fnNoExt(basetype)) + e.enc.encodeAs(rv, basetype, false) } else if v := ext.ConvertExt(rv); v == nil { - e.EncodeNil() + e.writeNilBytes() } else { - e.e.encode(v) + e.enc.encodeI(v) } } -func (e *cborEncDriver) EncodeRawExt(re *RawExt) { +func (e *cborEncDriver[T]) EncodeRawExt(re *RawExt) { e.encUint(uint64(re.Tag), cborBaseTag) - // only encodes re.Value (never re.Data) - if re.Value != nil { - e.e.encode(re.Value) + if re.Data != nil { + e.w.writeb(re.Data) + } else if re.Value != nil { + e.enc.encodeI(re.Value) } else { e.EncodeNil() } } -func (e *cborEncDriver) WriteArrayStart(length int) { +func (e *cborEncDriver[T]) WriteArrayEmpty() { if e.h.IndefiniteLength { - e.e.encWr.writen1(cborBdIndefiniteArray) + e.w.writen2(cborBdIndefiniteArray, cborBdBreak) + } else { + e.w.writen1(cborBaseArray) + // e.encLen(cborBaseArray, 0) + } +} + +func (e *cborEncDriver[T]) WriteMapEmpty() { + if e.h.IndefiniteLength { + e.w.writen2(cborBdIndefiniteMap, cborBdBreak) + } else { + e.w.writen1(cborBaseMap) + // e.encLen(cborBaseMap, 0) + } +} + +func (e *cborEncDriver[T]) WriteArrayStart(length int) { + if e.h.IndefiniteLength { + e.w.writen1(cborBdIndefiniteArray) } else { e.encLen(cborBaseArray, length) } } -func (e *cborEncDriver) WriteMapStart(length int) { +func (e *cborEncDriver[T]) WriteMapStart(length int) { if e.h.IndefiniteLength { - e.e.encWr.writen1(cborBdIndefiniteMap) + e.w.writen1(cborBdIndefiniteMap) } else { e.encLen(cborBaseMap, length) } } -func (e *cborEncDriver) WriteMapEnd() { +func (e *cborEncDriver[T]) WriteMapEnd() { if e.h.IndefiniteLength { - e.e.encWr.writen1(cborBdBreak) + e.w.writen1(cborBdBreak) } } -func (e *cborEncDriver) WriteArrayEnd() { +func (e *cborEncDriver[T]) WriteArrayEnd() { if e.h.IndefiniteLength { - e.e.encWr.writen1(cborBdBreak) + e.w.writen1(cborBdBreak) } } -func (e *cborEncDriver) EncodeString(v string) { +func (e *cborEncDriver[T]) EncodeString(v string) { bb := cborBaseString if e.h.StringToRaw { bb = cborBaseBytes @@ -279,74 +196,87 @@ func (e *cborEncDriver) EncodeString(v string) { e.encStringBytesS(bb, v) } -func (e *cborEncDriver) EncodeStringBytesRaw(v []byte) { - if v == nil { - e.EncodeNil() - } else { - e.encStringBytesS(cborBaseBytes, stringView(v)) - } +func (e *cborEncDriver[T]) EncodeStringNoEscape4Json(v string) { e.EncodeString(v) } + +func (e *cborEncDriver[T]) EncodeStringBytesRaw(v []byte) { + e.encStringBytesS(cborBaseBytes, stringView(v)) } -func (e *cborEncDriver) encStringBytesS(bb byte, v string) { +func (e *cborEncDriver[T]) encStringBytesS(bb byte, v string) { if e.h.IndefiniteLength { if bb == cborBaseBytes { - e.e.encWr.writen1(cborBdIndefiniteBytes) + e.w.writen1(cborBdIndefiniteBytes) } else { - e.e.encWr.writen1(cborBdIndefiniteString) - } - var vlen uint = uint(len(v)) - blen := vlen / 4 - if blen == 0 { - blen = 64 - } else if blen > 1024 { - blen = 1024 + e.w.writen1(cborBdIndefiniteString) } + vlen := uint(len(v)) + n := max(4, min(vlen/4, 1024)) for i := uint(0); i < vlen; { - var v2 string - i2 := i + blen - if i2 >= i && i2 < vlen { - v2 = v[i:i2] - } else { - v2 = v[i:] + i2 := i + n + if i2 >= vlen { + i2 = vlen } + v2 := v[i:i2] e.encLen(bb, len(v2)) - e.e.encWr.writestr(v2) + e.w.writestr(v2) i = i2 } - e.e.encWr.writen1(cborBdBreak) + e.w.writen1(cborBdBreak) } else { e.encLen(bb, len(v)) - e.e.encWr.writestr(v) + e.w.writestr(v) } } -// ---------------------- +func (e *cborEncDriver[T]) EncodeBytes(v []byte) { + if v == nil { + e.writeNilBytes() + return + } + e.EncodeStringBytesRaw(v) +} -type cborDecDriver struct { - decDriverNoopContainerReader - decDriverNoopNumberHelper - h *CborHandle - bdAndBdread - st bool // skip tags - _ bool // found nil - noBuiltInTypes - d Decoder +func (e *cborEncDriver[T]) writeNilOr(v byte) { + if !e.h.NilCollectionToZeroLength { + v = cborBdNil + } + e.w.writen1(v) } -func (d *cborDecDriver) decoder() *Decoder { - return &d.d +func (e *cborEncDriver[T]) writeNilArray() { + e.writeNilOr(cborBaseArray) } -func (d *cborDecDriver) descBd() string { - return sprintf("%v (%s)", d.bd, cbordesc(d.bd)) +func (e *cborEncDriver[T]) writeNilMap() { + e.writeNilOr(cborBaseMap) } -func (d *cborDecDriver) readNextBd() { - d.bd = d.d.decRd.readn1() +func (e *cborEncDriver[T]) writeNilBytes() { + e.writeNilOr(cborBaseBytes) +} + +// ---------------------- + +type cborDecDriver[T decReader] struct { + decDriverNoopContainerReader + // decDriverNoopNumberHelper + noBuiltInTypes + + h *CborHandle + d *decoderBase + r T + dec decoderI + bdAndBdread + // st bool // skip tags + // bytes bool +} + +func (d *cborDecDriver[T]) readNextBd() { + d.bd = d.r.readn1() d.bdRead = true } -func (d *cborDecDriver) advanceNil() (null bool) { +func (d *cborDecDriver[T]) advanceNil() (null bool) { if !d.bdRead { d.readNextBd() } @@ -357,7 +287,7 @@ func (d *cborDecDriver) advanceNil() (null bool) { return } -func (d *cborDecDriver) TryNil() bool { +func (d *cborDecDriver[T]) TryNil() bool { return d.advanceNil() } @@ -368,18 +298,18 @@ func (d *cborDecDriver) TryNil() bool { // // By definition, skipTags should not be called before // checking for break, or nil or undefined. -func (d *cborDecDriver) skipTags() { +func (d *cborDecDriver[T]) skipTags() { for d.bd>>5 == cborMajorTag { d.decUint() - d.bd = d.d.decRd.readn1() + d.bd = d.r.readn1() } } -func (d *cborDecDriver) ContainerType() (vt valueType) { +func (d *cborDecDriver[T]) ContainerType() (vt valueType) { if !d.bdRead { d.readNextBd() } - if d.st { + if d.h.SkipUnexpectedTags { d.skipTags() } if d.bd == cborBdNil { @@ -399,7 +329,7 @@ func (d *cborDecDriver) ContainerType() (vt valueType) { return valueTypeUnset } -func (d *cborDecDriver) CheckBreak() (v bool) { +func (d *cborDecDriver[T]) CheckBreak() (v bool) { if !d.bdRead { d.readNextBd() } @@ -410,72 +340,60 @@ func (d *cborDecDriver) CheckBreak() (v bool) { return } -func (d *cborDecDriver) decUint() (ui uint64) { +func (d *cborDecDriver[T]) decUint() (ui uint64) { v := d.bd & 0x1f if v <= 0x17 { ui = uint64(v) } else if v == 0x18 { - ui = uint64(d.d.decRd.readn1()) + ui = uint64(d.r.readn1()) } else if v == 0x19 { - ui = uint64(bigen.Uint16(d.d.decRd.readn2())) + ui = uint64(bigen.Uint16(d.r.readn2())) } else if v == 0x1a { - ui = uint64(bigen.Uint32(d.d.decRd.readn4())) + ui = uint64(bigen.Uint32(d.r.readn4())) } else if v == 0x1b { - ui = uint64(bigen.Uint64(d.d.decRd.readn8())) + ui = uint64(bigen.Uint64(d.r.readn8())) } else { - d.d.errorf("invalid descriptor decoding uint: %x/%s", d.bd, cbordesc(d.bd)) + halt.errorf("invalid descriptor decoding uint: %x/%s (%x)", d.bd, cbordesc(d.bd), v) } return } -func (d *cborDecDriver) decLen() int { +func (d *cborDecDriver[T]) decLen() int { return int(d.decUint()) } -func (d *cborDecDriver) decAppendIndefiniteBytes(bs []byte, major byte) []byte { - d.bdRead = false - for !d.CheckBreak() { - chunkMajor := d.bd >> 5 - if chunkMajor != major { - d.d.errorf("malformed indefinite string/bytes %x (%s); contains chunk with major type %v, expected %v", - d.bd, cbordesc(d.bd), chunkMajor, major) - } - n := uint(d.decLen()) - oldLen := uint(len(bs)) - newLen := oldLen + n - if newLen > uint(cap(bs)) { - bs2 := make([]byte, newLen, 2*uint(cap(bs))+n) - copy(bs2, bs) - bs = bs2 - } else { - bs = bs[:newLen] - } - d.d.decRd.readb(bs[oldLen:newLen]) - if d.h.ValidateUnicode && major == cborMajorString && !utf8.Valid(bs[oldLen:newLen]) { - d.d.errorf("indefinite-length text string contains chunk that is not a valid utf-8 sequence: 0x%x", bs[oldLen:newLen]) - } - d.bdRead = false - } - d.bdRead = false - return bs -} - -func (d *cborDecDriver) decFloat() (f float64, ok bool) { +func (d *cborDecDriver[T]) decFloat() (f float64, ok bool) { ok = true switch d.bd { case cborBdFloat16: - f = float64(math.Float32frombits(halfFloatToFloatBits(bigen.Uint16(d.d.decRd.readn2())))) + f = float64(math.Float32frombits(halfFloatToFloatBits(bigen.Uint16(d.r.readn2())))) case cborBdFloat32: - f = float64(math.Float32frombits(bigen.Uint32(d.d.decRd.readn4()))) + f = float64(math.Float32frombits(bigen.Uint32(d.r.readn4()))) case cborBdFloat64: - f = math.Float64frombits(bigen.Uint64(d.d.decRd.readn8())) + f = math.Float64frombits(bigen.Uint64(d.r.readn8())) default: - ok = false + if d.bd>>5 == cborMajorTag { + // extension tag for bignum/decimal + switch d.bd & 0x1f { // tag + case 2: + f = d.decTagBigIntAsFloat(false) + case 3: + f = d.decTagBigIntAsFloat(true) + case 4: + f = d.decTagBigFloatAsFloat(true) + case 5: + f = d.decTagBigFloatAsFloat(false) + default: + ok = false + } + } else { + ok = false + } } return } -func (d *cborDecDriver) decInteger() (ui uint64, neg, ok bool) { +func (d *cborDecDriver[T]) decInteger() (ui uint64, neg, ok bool) { ok = true switch d.bd >> 5 { case cborMajorUint: @@ -489,65 +407,67 @@ func (d *cborDecDriver) decInteger() (ui uint64, neg, ok bool) { return } -func (d *cborDecDriver) DecodeInt64() (i int64) { +func (d *cborDecDriver[T]) DecodeInt64() (i int64) { if d.advanceNil() { return } - if d.st { + if d.h.SkipUnexpectedTags { d.skipTags() } - i = decNegintPosintFloatNumberHelper{&d.d}.int64(d.decInteger()) + v1, v2, v3 := d.decInteger() + i = decNegintPosintFloatNumberHelper{d}.int64(v1, v2, v3, true) d.bdRead = false return } -func (d *cborDecDriver) DecodeUint64() (ui uint64) { +func (d *cborDecDriver[T]) DecodeUint64() (ui uint64) { if d.advanceNil() { return } - if d.st { + if d.h.SkipUnexpectedTags { d.skipTags() } - ui = decNegintPosintFloatNumberHelper{&d.d}.uint64(d.decInteger()) + ui = decNegintPosintFloatNumberHelper{d}.uint64(d.decInteger()) d.bdRead = false return } -func (d *cborDecDriver) DecodeFloat64() (f float64) { +func (d *cborDecDriver[T]) DecodeFloat64() (f float64) { if d.advanceNil() { return } - if d.st { + if d.h.SkipUnexpectedTags { d.skipTags() } - f = decNegintPosintFloatNumberHelper{&d.d}.float64(d.decFloat()) + v1, v2 := d.decFloat() + f = decNegintPosintFloatNumberHelper{d}.float64(v1, v2, true) d.bdRead = false return } // bool can be decoded from bool only (single byte). -func (d *cborDecDriver) DecodeBool() (b bool) { +func (d *cborDecDriver[T]) DecodeBool() (b bool) { if d.advanceNil() { return } - if d.st { + if d.h.SkipUnexpectedTags { d.skipTags() } if d.bd == cborBdTrue { b = true } else if d.bd == cborBdFalse { } else { - d.d.errorf("not bool - %s %x/%s", msgBadDesc, d.bd, cbordesc(d.bd)) + halt.errorf("not bool - %s %x/%s", msgBadDesc, d.bd, cbordesc(d.bd)) } d.bdRead = false return } -func (d *cborDecDriver) ReadMapStart() (length int) { +func (d *cborDecDriver[T]) ReadMapStart() (length int) { if d.advanceNil() { return containerLenNil } - if d.st { + if d.h.SkipUnexpectedTags { d.skipTags() } d.bdRead = false @@ -555,16 +475,16 @@ func (d *cborDecDriver) ReadMapStart() (length int) { return containerLenUnknown } if d.bd>>5 != cborMajorMap { - d.d.errorf("error reading map; got major type: %x, expected %x/%s", d.bd>>5, cborMajorMap, cbordesc(d.bd)) + halt.errorf("error reading map; got major type: %x, expected %x/%s", d.bd>>5, cborMajorMap, cbordesc(d.bd)) } return d.decLen() } -func (d *cborDecDriver) ReadArrayStart() (length int) { +func (d *cborDecDriver[T]) ReadArrayStart() (length int) { if d.advanceNil() { return containerLenNil } - if d.st { + if d.h.SkipUnexpectedTags { d.skipTags() } d.bdRead = false @@ -572,139 +492,206 @@ func (d *cborDecDriver) ReadArrayStart() (length int) { return containerLenUnknown } if d.bd>>5 != cborMajorArray { - d.d.errorf("invalid array; got major type: %x, expect: %x/%s", d.bd>>5, cborMajorArray, cbordesc(d.bd)) + halt.errorf("invalid array; got major type: %x, expect: %x/%s", d.bd>>5, cborMajorArray, cbordesc(d.bd)) } return d.decLen() } -func (d *cborDecDriver) DecodeBytes(bs []byte) (bsOut []byte) { - d.d.decByteState = decByteStateNone +// MARKER d.d.buf is ONLY used within DecodeBytes. +// Safe to use freely here only. + +func (d *cborDecDriver[T]) DecodeBytes() (bs []byte, state dBytesAttachState) { if d.advanceNil() { return } - if d.st { + if d.h.SkipUnexpectedTags { d.skipTags() } + fnEnsureNonNilBytes := func() { + // buf is nil at first. Ensure a non-nil value is returned. + if bs == nil { + bs = zeroByteSlice + state = dBytesDetach + } + } if d.bd == cborBdIndefiniteBytes || d.bd == cborBdIndefiniteString { + major := d.bd >> 5 + val4str := d.h.ValidateUnicode && major == cborMajorString + bs = d.d.buf[:0] d.bdRead = false - if bs == nil { - d.d.decByteState = decByteStateReuseBuf - return d.decAppendIndefiniteBytes(d.d.b[:0], d.bd>>5) + for !d.CheckBreak() { + if d.bd>>5 != major { + const msg = "malformed indefinite string/bytes %x (%s); " + + "contains chunk with major type %v, expected %v" + halt.errorf(msg, d.bd, cbordesc(d.bd), d.bd>>5, major) + } + n := uint(d.decLen()) + bs = append(bs, d.r.readx(n)...) + d.bdRead = false + if val4str && !utf8.Valid(bs[len(bs)-int(n):]) { + const msg = "indefinite-length text string contains chunk " + + "that is not a valid utf-8 sequence: 0x%x" + halt.errorf(msg, bs[len(bs)-int(n):]) + } } - return d.decAppendIndefiniteBytes(bs[:0], d.bd>>5) + d.bdRead = false + d.d.buf = bs + state = dBytesAttachBuffer + fnEnsureNonNilBytes() + return } if d.bd == cborBdIndefiniteArray { d.bdRead = false - if bs == nil { - d.d.decByteState = decByteStateReuseBuf - bs = d.d.b[:0] - } else { - bs = bs[:0] - } + bs = d.d.buf[:0] for !d.CheckBreak() { bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) } - return bs + d.d.buf = bs + state = dBytesAttachBuffer + fnEnsureNonNilBytes() + return } + var cond bool if d.bd>>5 == cborMajorArray { d.bdRead = false - if bs == nil { - d.d.decByteState = decByteStateReuseBuf - bs = d.d.b[:] - } slen := d.decLen() - var changed bool - if bs, changed = usableByteSlice(bs, slen); changed { - d.d.decByteState = decByteStateNone - } + bs, cond = usableByteSlice(d.d.buf, slen) for i := 0; i < len(bs); i++ { bs[i] = uint8(chkOvf.UintV(d.DecodeUint64(), 8)) } for i := len(bs); i < slen; i++ { bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) } - return bs + if cond { + d.d.buf = bs + } + state = dBytesAttachBuffer + fnEnsureNonNilBytes() + return } clen := d.decLen() d.bdRead = false - if d.d.zerocopy() { - d.d.decByteState = decByteStateZerocopy - return d.d.decRd.rb.readx(uint(clen)) - } - if bs == nil { - d.d.decByteState = decByteStateReuseBuf - bs = d.d.b[:] - } - return decByteSlice(d.d.r(), clen, d.h.MaxInitLen, bs) + bs, cond = d.r.readxb(uint(clen)) + state = d.d.attachState(cond) + return } -func (d *cborDecDriver) DecodeStringAsBytes() (s []byte) { - s = d.DecodeBytes(nil) - if d.h.ValidateUnicode && !utf8.Valid(s) { - d.d.errorf("DecodeStringAsBytes: invalid UTF-8: %s", s) +func (d *cborDecDriver[T]) DecodeStringAsBytes() (out []byte, state dBytesAttachState) { + out, state = d.DecodeBytes() + if d.h.ValidateUnicode && !utf8.Valid(out) { + halt.errorf("DecodeStringAsBytes: invalid UTF-8: %s", out) } return } -func (d *cborDecDriver) DecodeTime() (t time.Time) { +func (d *cborDecDriver[T]) DecodeTime() (t time.Time) { if d.advanceNil() { return } if d.bd>>5 != cborMajorTag { - d.d.errorf("error reading tag; expected major type: %x, got: %x", cborMajorTag, d.bd>>5) + halt.errorf("error reading tag; expected major type: %x, got: %x", cborMajorTag, d.bd>>5) } xtag := d.decUint() d.bdRead = false return d.decodeTime(xtag) } -func (d *cborDecDriver) decodeTime(xtag uint64) (t time.Time) { +func (d *cborDecDriver[T]) decodeTime(xtag uint64) (t time.Time) { switch xtag { case 0: var err error - t, err = time.Parse(time.RFC3339, stringView(d.DecodeStringAsBytes())) - d.d.onerror(err) + t, err = time.Parse(time.RFC3339, stringView(bytesOKs(d.DecodeStringAsBytes()))) + halt.onerror(err) case 1: f1, f2 := math.Modf(d.DecodeFloat64()) t = time.Unix(int64(f1), int64(f2*1e9)) default: - d.d.errorf("invalid tag for time.Time - expecting 0 or 1, got 0x%x", xtag) + halt.errorf("invalid tag for time.Time - expecting 0 or 1, got 0x%x", xtag) } t = t.UTC().Round(time.Microsecond) return } -func (d *cborDecDriver) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { +func (d *cborDecDriver[T]) preDecodeExt(checkTag bool, xtag uint64) (realxtag uint64, ok bool) { if d.advanceNil() { return } if d.bd>>5 != cborMajorTag { - d.d.errorf("error reading tag; expected major type: %x, got: %x", cborMajorTag, d.bd>>5) + halt.errorf("error reading tag; expected major type: %x, got: %x", cborMajorTag, d.bd>>5) } - realxtag := d.decUint() + realxtag = d.decUint() d.bdRead = false - if ext == nil { - re := rv.(*RawExt) + if checkTag && xtag != realxtag { + halt.errorf("Wrong extension tag. Got %b. Expecting: %v", realxtag, xtag) + } + ok = true + return +} + +func (d *cborDecDriver[T]) DecodeRawExt(re *RawExt) { + if realxtag, ok := d.preDecodeExt(false, 0); ok { re.Tag = realxtag - d.d.decode(&re.Value) - } else if xtag != realxtag { - d.d.errorf("Wrong extension tag. Got %b. Expecting: %v", realxtag, xtag) - } else if ext == SelfExt { - d.d.decodeValue(baseRV(rv), d.h.fnNoExt(basetype)) - } else { - d.d.interfaceExtConvertAndDecode(rv, ext) + d.dec.decode(&re.Value) + d.bdRead = false } - d.bdRead = false } -func (d *cborDecDriver) DecodeNaked() { +func (d *cborDecDriver[T]) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + if _, ok := d.preDecodeExt(true, xtag); ok { + if ext == SelfExt { + d.dec.decodeAs(rv, basetype, false) + } else { + d.dec.interfaceExtConvertAndDecode(rv, ext) + } + d.bdRead = false + } +} + +func (d *cborDecDriver[T]) decTagBigIntAsFloat(neg bool) (f float64) { + bs, _ := d.DecodeBytes() + bi := new(big.Int).SetBytes(bs) + if neg { // neg big.Int + bi0 := bi + bi = new(big.Int).Sub(big.NewInt(-1), bi0) + } + f, _ = bi.Float64() + return +} + +func (d *cborDecDriver[T]) decTagBigFloatAsFloat(decimal bool) (f float64) { + if nn := d.r.readn1(); nn != 82 { + halt.errorf("(%d) decoding decimal/big.Float: expected 2 numbers", nn) + } + exp := d.DecodeInt64() + mant := d.DecodeInt64() + if decimal { // m*(10**e) + // MARKER: if precision/other issues crop, consider using big.Float on base 10. + // The logic is more convoluted, which is why we leverage readFloatResult for now. + rf := readFloatResult{exp: int8(exp)} + if mant >= 0 { + rf.mantissa = uint64(mant) + } else { + rf.neg = true + rf.mantissa = uint64(-mant) + } + f, _ = parseFloat64_reader(rf) + // f = float64(mant) * math.Pow10(exp) + } else { // m*(2**e) + // f = float64(mant) * math.Pow(2, exp) + bfm := new(big.Float).SetPrec(64).SetInt64(mant) + bf := new(big.Float).SetPrec(64).SetMantExp(bfm, int(exp)) + f, _ = bf.Float64() + } + return +} + +func (d *cborDecDriver[T]) DecodeNaked() { if !d.bdRead { d.readNextBd() } n := d.d.naked() var decodeFurther bool - switch d.bd >> 5 { case cborMajorUint: if d.h.SignedInteger { @@ -718,10 +705,10 @@ func (d *cborDecDriver) DecodeNaked() { n.v = valueTypeInt n.i = d.DecodeInt64() case cborMajorBytes: - d.d.fauxUnionReadRawBytes(false) + d.d.fauxUnionReadRawBytes(d, false, d.h.RawToString) //, d.h.ZeroCopy) case cborMajorString: n.v = valueTypeString - n.s = d.d.stringZC(d.DecodeStringAsBytes()) + n.s = d.d.detach2Str(d.DecodeStringAsBytes()) case cborMajorArray: n.v = valueTypeArray decodeFurther = true @@ -731,17 +718,46 @@ func (d *cborDecDriver) DecodeNaked() { case cborMajorTag: n.v = valueTypeExt n.u = d.decUint() + d.bdRead = false n.l = nil - if n.u == 0 || n.u == 1 { - d.bdRead = false - n.v = valueTypeTime - n.t = d.decodeTime(n.u) - } else if d.st && d.h.getExtForTag(n.u) == nil { - // d.skipTags() // no need to call this - tags already skipped - d.bdRead = false - d.DecodeNaked() - return // return when done (as true recursive function) + xx := d.h.getExtForTag(n.u) + if xx == nil { + switch n.u { + case 0, 1: + n.v = valueTypeTime + n.t = d.decodeTime(n.u) + case 2: + n.f = d.decTagBigIntAsFloat(false) + n.v = valueTypeFloat + case 3: + n.f = d.decTagBigIntAsFloat(true) + n.v = valueTypeFloat + case 4: + n.f = d.decTagBigFloatAsFloat(true) + n.v = valueTypeFloat + case 5: + n.f = d.decTagBigFloatAsFloat(false) + n.v = valueTypeFloat + case 55799: // skip + d.DecodeNaked() + default: + if d.h.SkipUnexpectedTags { + d.DecodeNaked() + } + // else we will use standard mode to decode ext e.g. into a RawExt + } + return } + // if n.u == 0 || n.u == 1 { + // d.bdRead = false + // n.v = valueTypeTime + // n.t = d.decodeTime(n.u) + // } else if d.h.SkipUnexpectedTags && d.h.getExtForTag(n.u) == nil { + // // d.skipTags() // no need to call this - tags already skipped + // d.bdRead = false + // d.DecodeNaked() + // return // return when done (as true recursive function) + // } case cborMajorSimpleOrFloat: switch d.bd { case cborBdNil, cborBdUndefined: @@ -756,211 +772,224 @@ func (d *cborDecDriver) DecodeNaked() { n.v = valueTypeFloat n.f = d.DecodeFloat64() default: - d.d.errorf("decodeNaked: Unrecognized d.bd: 0x%x", d.bd) + halt.errorf("decodeNaked: Unrecognized d.bd: 0x%x", d.bd) } default: // should never happen - d.d.errorf("decodeNaked: Unrecognized d.bd: 0x%x", d.bd) + halt.errorf("decodeNaked: Unrecognized d.bd: 0x%x", d.bd) } if !decodeFurther { d.bdRead = false } } -func (d *cborDecDriver) uintBytes() (v []byte, ui uint64) { +func (d *cborDecDriver[T]) uintBytes() (v []byte, ui uint64) { // this is only used by nextValueBytes, so it's ok to // use readx and bigenstd here. switch vv := d.bd & 0x1f; vv { case 0x18: - v = d.d.decRd.readx(1) + v = d.r.readx(1) ui = uint64(v[0]) case 0x19: - v = d.d.decRd.readx(2) + v = d.r.readx(2) ui = uint64(bigenstd.Uint16(v)) case 0x1a: - v = d.d.decRd.readx(4) + v = d.r.readx(4) ui = uint64(bigenstd.Uint32(v)) case 0x1b: - v = d.d.decRd.readx(8) + v = d.r.readx(8) ui = uint64(bigenstd.Uint64(v)) default: if vv > 0x1b { - d.d.errorf("invalid descriptor decoding uint: %x/%s", d.bd, cbordesc(d.bd)) + halt.errorf("invalid descriptor decoding uint: %x/%s", d.bd, cbordesc(d.bd)) } ui = uint64(vv) } return } -func (d *cborDecDriver) nextValueBytes(v0 []byte) (v []byte) { +func (d *cborDecDriver[T]) nextValueBytes() (v []byte) { if !d.bdRead { d.readNextBd() } - v = v0 - var h = decNextValueBytesHelper{d: &d.d} - var cursor = d.d.rb.c - 1 - h.append1(&v, d.bd) - v = d.nextValueBytesBdReadR(v) + d.r.startRecording() + d.nextValueBytesBdReadR() + v = d.r.stopRecording() d.bdRead = false - h.bytesRdV(&v, cursor) return } -func (d *cborDecDriver) nextValueBytesR(v0 []byte) (v []byte) { - d.readNextBd() - v = v0 - var h = decNextValueBytesHelper{d: &d.d} - h.append1(&v, d.bd) - return d.nextValueBytesBdReadR(v) -} +// func (d *cborDecDriver[T]) nextValueBytesR(v0 []byte) (v []byte) { +// d.readNextBd() +// v0 = append(v0, d.bd) +// d.r.startRecording(v0) +// d.nextValueBytesBdReadR() +// v = d.r.stopRecording() +// return +// } -func (d *cborDecDriver) nextValueBytesBdReadR(v0 []byte) (v []byte) { - v = v0 - var h = decNextValueBytesHelper{d: &d.d} - - var bs []byte +func (d *cborDecDriver[T]) nextValueBytesBdReadR() { + // var bs []byte var ui uint64 switch d.bd >> 5 { case cborMajorUint, cborMajorNegInt: - bs, _ = d.uintBytes() - h.appendN(&v, bs...) + d.uintBytes() case cborMajorString, cborMajorBytes: if d.bd == cborBdIndefiniteBytes || d.bd == cborBdIndefiniteString { for { d.readNextBd() - h.append1(&v, d.bd) if d.bd == cborBdBreak { break } - bs, ui = d.uintBytes() - h.appendN(&v, bs...) - h.appendN(&v, d.d.decRd.readx(uint(ui))...) + _, ui = d.uintBytes() + d.r.skip(uint(ui)) } } else { - bs, ui = d.uintBytes() - h.appendN(&v, bs...) - h.appendN(&v, d.d.decRd.readx(uint(ui))...) + _, ui = d.uintBytes() + d.r.skip(uint(ui)) } case cborMajorArray: if d.bd == cborBdIndefiniteArray { for { d.readNextBd() - h.append1(&v, d.bd) if d.bd == cborBdBreak { break } - v = d.nextValueBytesBdReadR(v) + d.nextValueBytesBdReadR() } } else { - bs, ui = d.uintBytes() - h.appendN(&v, bs...) + _, ui = d.uintBytes() for i := uint64(0); i < ui; i++ { - v = d.nextValueBytesR(v) + d.readNextBd() + d.nextValueBytesBdReadR() } } case cborMajorMap: if d.bd == cborBdIndefiniteMap { for { d.readNextBd() - h.append1(&v, d.bd) if d.bd == cborBdBreak { break } - v = d.nextValueBytesBdReadR(v) - v = d.nextValueBytesR(v) + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() } } else { - bs, ui = d.uintBytes() - h.appendN(&v, bs...) + _, ui = d.uintBytes() for i := uint64(0); i < ui; i++ { - v = d.nextValueBytesR(v) - v = d.nextValueBytesR(v) + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() } } case cborMajorTag: - bs, _ = d.uintBytes() - h.appendN(&v, bs...) - v = d.nextValueBytesR(v) + d.uintBytes() + d.readNextBd() + d.nextValueBytesBdReadR() case cborMajorSimpleOrFloat: switch d.bd { case cborBdNil, cborBdUndefined, cborBdFalse, cborBdTrue: // pass case cborBdFloat16: - h.appendN(&v, d.d.decRd.readx(2)...) + d.r.skip(2) case cborBdFloat32: - h.appendN(&v, d.d.decRd.readx(4)...) + d.r.skip(4) case cborBdFloat64: - h.appendN(&v, d.d.decRd.readx(8)...) + d.r.skip(8) default: - d.d.errorf("nextValueBytes: Unrecognized d.bd: 0x%x", d.bd) + halt.errorf("nextValueBytes: Unrecognized d.bd: 0x%x", d.bd) } default: // should never happen - d.d.errorf("nextValueBytes: Unrecognized d.bd: 0x%x", d.bd) + halt.errorf("nextValueBytes: Unrecognized d.bd: 0x%x", d.bd) } return } -// ------------------------- +func (d *cborDecDriver[T]) reset() { + d.bdAndBdread.reset() + // d.st = d.h.SkipUnexpectedTags +} -// CborHandle is a Handle for the CBOR encoding format, -// defined at http://tools.ietf.org/html/rfc7049 and documented further at http://cbor.io . +// ---- // -// CBOR is comprehensively supported, including support for: -// - indefinite-length arrays/maps/bytes/strings -// - (extension) tags in range 0..0xffff (0 .. 65535) -// - half, single and double-precision floats -// - all numbers (1, 2, 4 and 8-byte signed and unsigned integers) -// - nil, true, false, ... -// - arrays and maps, bytes and text strings +// The following below are similar across all format files (except for the format name). // -// None of the optional extensions (with tags) defined in the spec are supported out-of-the-box. -// Users can implement them as needed (using SetExt), including spec-documented ones: -// - timestamp, BigNum, BigFloat, Decimals, -// - Encoded Text (e.g. URL, regexp, base64, MIME Message), etc. -type CborHandle struct { - binaryEncodingType - // noElemSeparators - BasicHandle - - // IndefiniteLength=true, means that we encode using indefinitelength - IndefiniteLength bool - - // TimeRFC3339 says to encode time.Time using RFC3339 format. - // If unset, we encode time.Time using seconds past epoch. - TimeRFC3339 bool - - // SkipUnexpectedTags says to skip over any tags for which extensions are - // not defined. This is in keeping with the cbor spec on "Optional Tagging of Items". - // - // Furthermore, this allows the skipping over of the Self Describing Tag 0xd9d9f7. - SkipUnexpectedTags bool +// We keep them together here, so that we can easily copy and compare. + +// ---- + +func (d *cborEncDriver[T]) init(hh Handle, shared *encoderBase, enc encoderI) (fp interface{}) { + callMake(&d.w) + d.h = hh.(*CborHandle) + d.e = shared + if shared.bytes { + fp = cborFpEncBytes + } else { + fp = cborFpEncIO + } + // d.w.init() + d.init2(enc) + return } -// Name returns the name of the handle: cbor -func (h *CborHandle) Name() string { return "cbor" } +func (e *cborEncDriver[T]) writeBytesAsis(b []byte) { e.w.writeb(b) } + +// func (e *cborEncDriver[T]) writeStringAsisDblQuoted(v string) { e.w.writeqstr(v) } -func (h *CborHandle) desc(bd byte) string { return cbordesc(bd) } +func (e *cborEncDriver[T]) writerEnd() { e.w.end() } -func (h *CborHandle) newEncDriver() encDriver { - var e = &cborEncDriver{h: h} - e.e.e = e - e.e.init(h) - e.reset() - return e +func (e *cborEncDriver[T]) resetOutBytes(out *[]byte) { + e.w.resetBytes(*out, out) } -func (h *CborHandle) newDecDriver() decDriver { - d := &cborDecDriver{h: h, st: h.SkipUnexpectedTags} - d.d.d = d - d.d.cbor = true - d.d.init(h) - d.reset() - return d +func (e *cborEncDriver[T]) resetOutIO(out io.Writer) { + e.w.resetIO(out, e.h.WriterBufferSize, &e.e.blist) } -func (d *cborDecDriver) reset() { - d.bdAndBdread.reset() - d.st = d.h.SkipUnexpectedTags +// ---- + +func (d *cborDecDriver[T]) init(hh Handle, shared *decoderBase, dec decoderI) (fp interface{}) { + callMake(&d.r) + d.h = hh.(*CborHandle) + d.d = shared + if shared.bytes { + fp = cborFpDecBytes + } else { + fp = cborFpDecIO + } + // d.r.init() + d.init2(dec) + return +} + +func (d *cborDecDriver[T]) NumBytesRead() int { + return int(d.r.numread()) +} + +func (d *cborDecDriver[T]) resetInBytes(in []byte) { + d.r.resetBytes(in) +} + +func (d *cborDecDriver[T]) resetInIO(r io.Reader) { + d.r.resetIO(r, d.h.ReaderBufferSize, d.h.MaxInitLen, &d.d.blist) +} + +// ---- (custom stanza) + +func (d *cborDecDriver[T]) descBd() string { + return sprintf("%v (%s)", d.bd, cbordesc(d.bd)) } -var _ decDriver = (*cborDecDriver)(nil) -var _ encDriver = (*cborEncDriver)(nil) +func (d *cborDecDriver[T]) DecodeFloat32() (f float32) { + return float32(chkOvf.Float32V(d.DecodeFloat64())) +} + +func (d *cborEncDriver[T]) init2(enc encoderI) { + d.enc = enc +} + +func (d *cborDecDriver[T]) init2(dec decoderI) { + d.dec = dec + // d.d.cbor = true +} diff --git a/vendor/github.com/ugorji/go/codec/cbor.mono.generated.go b/vendor/github.com/ugorji/go/codec/cbor.mono.generated.go new file mode 100644 index 0000000..572d5cb --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/cbor.mono.generated.go @@ -0,0 +1,7985 @@ +//go:build !notmono && !codec.notmono + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "encoding" + + "io" + "math" + "math/big" + "reflect" + "slices" + "sort" + "strconv" + "sync" + "time" + "unicode/utf8" +) + +type helperEncDriverCborBytes struct{} +type encFnCborBytes struct { + i encFnInfo + fe func(*encoderCborBytes, *encFnInfo, reflect.Value) +} +type encRtidFnCborBytes struct { + rtid uintptr + fn *encFnCborBytes +} +type encoderCborBytes struct { + dh helperEncDriverCborBytes + fp *fastpathEsCborBytes + e cborEncDriverBytes + encoderBase +} +type helperDecDriverCborBytes struct{} +type decFnCborBytes struct { + i decFnInfo + fd func(*decoderCborBytes, *decFnInfo, reflect.Value) +} +type decRtidFnCborBytes struct { + rtid uintptr + fn *decFnCborBytes +} +type decoderCborBytes struct { + dh helperDecDriverCborBytes + fp *fastpathDsCborBytes + d cborDecDriverBytes + decoderBase +} +type cborEncDriverBytes struct { + noBuiltInTypes + encDriverNoState + encDriverNoopContainerWriter + encDriverContainerNoTrackerT + + h *CborHandle + e *encoderBase + w bytesEncAppender + enc encoderI + + b [40]byte +} +type cborDecDriverBytes struct { + decDriverNoopContainerReader + + noBuiltInTypes + + h *CborHandle + d *decoderBase + r bytesDecReader + dec decoderI + bdAndBdread +} + +func (e *encoderCborBytes) rawExt(_ *encFnInfo, rv reflect.Value) { + if re := rv2i(rv).(*RawExt); re == nil { + e.e.EncodeNil() + } else { + e.e.EncodeRawExt(re) + } +} + +func (e *encoderCborBytes) ext(f *encFnInfo, rv reflect.Value) { + e.e.EncodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (e *encoderCborBytes) selferMarshal(_ *encFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecEncodeSelf(&Encoder{e}) +} + +func (e *encoderCborBytes) binaryMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.BinaryMarshaler).MarshalBinary() + e.marshalRaw(bs, fnerr) +} + +func (e *encoderCborBytes) textMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.TextMarshaler).MarshalText() + e.marshalUtf8(bs, fnerr) +} + +func (e *encoderCborBytes) jsonMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(jsonMarshaler).MarshalJSON() + e.marshalAsis(bs, fnerr) +} + +func (e *encoderCborBytes) raw(_ *encFnInfo, rv reflect.Value) { + e.rawBytes(rv2i(rv).(Raw)) +} + +func (e *encoderCborBytes) encodeComplex64(v complex64) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat32(real(v)) +} + +func (e *encoderCborBytes) encodeComplex128(v complex128) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat64(real(v)) +} + +func (e *encoderCborBytes) kBool(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeBool(rvGetBool(rv)) +} + +func (e *encoderCborBytes) kTime(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeTime(rvGetTime(rv)) +} + +func (e *encoderCborBytes) kString(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeString(rvGetString(rv)) +} + +func (e *encoderCborBytes) kFloat32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat32(rvGetFloat32(rv)) +} + +func (e *encoderCborBytes) kFloat64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat64(rvGetFloat64(rv)) +} + +func (e *encoderCborBytes) kComplex64(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex64(rvGetComplex64(rv)) +} + +func (e *encoderCborBytes) kComplex128(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex128(rvGetComplex128(rv)) +} + +func (e *encoderCborBytes) kInt(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt(rv))) +} + +func (e *encoderCborBytes) kInt8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt8(rv))) +} + +func (e *encoderCborBytes) kInt16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt16(rv))) +} + +func (e *encoderCborBytes) kInt32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt32(rv))) +} + +func (e *encoderCborBytes) kInt64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt64(rv))) +} + +func (e *encoderCborBytes) kUint(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint(rv))) +} + +func (e *encoderCborBytes) kUint8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint8(rv))) +} + +func (e *encoderCborBytes) kUint16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint16(rv))) +} + +func (e *encoderCborBytes) kUint32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint32(rv))) +} + +func (e *encoderCborBytes) kUint64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint64(rv))) +} + +func (e *encoderCborBytes) kUintptr(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUintptr(rv))) +} + +func (e *encoderCborBytes) kSeqFn(rt reflect.Type) (fn *encFnCborBytes) { + + if rt = baseRT(rt); rt.Kind() != reflect.Interface { + fn = e.fn(rt) + } + return +} + +func (e *encoderCborBytes) kArrayWMbs(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(l) + e.mapStart(l >> 1) + + var fn *encFnCborBytes + builtin := ti.tielem.flagEncBuiltin + if !builtin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerMapKey + e.e.WriteMapElemKey(true) + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(false) + } else { + e.mapElemValue() + } + } + e.c = 0 + e.e.WriteMapEnd() + +} + +func (e *encoderCborBytes) kArrayW(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l <= 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(l) + + var fn *encFnCborBytes + if !ti.tielem.flagEncBuiltin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerArrayElem + e.e.WriteArrayElem(true) + builtin := ti.tielem.flagEncBuiltin + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + e.c = containerArrayElem + e.e.WriteArrayElem(false) + } + + e.c = 0 + e.e.WriteArrayEnd() +} + +func (e *encoderCborBytes) kChan(f *encFnInfo, rv reflect.Value) { + if f.ti.chandir&uint8(reflect.RecvDir) == 0 { + halt.errorStr("send-only channel cannot be encoded") + } + if !f.ti.mbs && uint8TypId == rt2id(f.ti.elem) { + e.kSliceBytesChan(rv) + return + } + rtslice := reflect.SliceOf(f.ti.elem) + rv = chanToSlice(rv, rtslice, e.h.ChanRecvTimeout) + ti := e.h.getTypeInfo(rt2id(rtslice), rtslice) + if f.ti.mbs { + e.kArrayWMbs(rv, ti, true) + } else { + e.kArrayW(rv, ti, true) + } +} + +func (e *encoderCborBytes) kSlice(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, true) + } else if f.ti.rtid == uint8SliceTypId || uint8TypId == rt2id(f.ti.elem) { + + e.e.EncodeBytes(rvGetBytes(rv)) + } else { + e.kArrayW(rv, f.ti, true) + } +} + +func (e *encoderCborBytes) kArray(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, false) + } else if handleBytesWithinKArray && uint8TypId == rt2id(f.ti.elem) { + e.e.EncodeStringBytesRaw(rvGetArrayBytes(rv, nil)) + } else { + e.kArrayW(rv, f.ti, false) + } +} + +func (e *encoderCborBytes) kSliceBytesChan(rv reflect.Value) { + + bs0 := e.blist.peek(32, true) + bs := bs0 + + irv := rv2i(rv) + ch, ok := irv.(<-chan byte) + if !ok { + ch = irv.(chan byte) + } + +L1: + switch timeout := e.h.ChanRecvTimeout; { + case timeout == 0: + for { + select { + case b := <-ch: + bs = append(bs, b) + default: + break L1 + } + } + case timeout > 0: + tt := time.NewTimer(timeout) + for { + select { + case b := <-ch: + bs = append(bs, b) + case <-tt.C: + + break L1 + } + } + default: + for b := range ch { + bs = append(bs, b) + } + } + + e.e.EncodeBytes(bs) + e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.blist.put(bs0) + } +} + +func (e *encoderCborBytes) kStructFieldKey(keyType valueType, encName string) { + + if keyType == valueTypeString { + e.e.EncodeString(encName) + } else if keyType == valueTypeInt { + e.e.EncodeInt(must.Int(strconv.ParseInt(encName, 10, 64))) + } else if keyType == valueTypeUint { + e.e.EncodeUint(must.Uint(strconv.ParseUint(encName, 10, 64))) + } else if keyType == valueTypeFloat { + e.e.EncodeFloat64(must.Float(strconv.ParseFloat(encName, 64))) + } else { + halt.errorStr2("invalid struct key type: ", keyType.String()) + } + +} + +func (e *encoderCborBytes) kStructSimple(f *encFnInfo, rv reflect.Value) { + _ = e.e + tisfi := f.ti.sfi.source() + + chkCirRef := e.h.CheckCircularRef + var si *structFieldInfo + var j int + + if f.ti.toArray || e.h.StructToArray { + if len(tisfi) == 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } else { + if len(tisfi) == 0 { + e.e.WriteMapEmpty() + return + } + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + e.mapStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.EncodeStringNoEscape4Json(si.encName) + e.mapElemValue() + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteMapEnd() + } +} + +func (e *encoderCborBytes) kStruct(f *encFnInfo, rv reflect.Value) { + _ = e.e + ti := f.ti + toMap := !(ti.toArray || e.h.StructToArray) + var mf map[string]interface{} + if ti.flagMissingFielder { + toMap = true + mf = rv2i(rv).(MissingFielder).CodecMissingFields() + } else if ti.flagMissingFielderPtr { + toMap = true + if rv.CanAddr() { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder).CodecMissingFields() + } else { + mf = rv2i(e.addrRV(rv, ti.rt, ti.ptr)).(MissingFielder).CodecMissingFields() + } + } + newlen := len(mf) + tisfi := ti.sfi.source() + newlen += len(tisfi) + + var fkvs = e.slist.get(newlen)[:newlen] + + recur := e.h.RecursiveEmptyCheck + chkCirRef := e.h.CheckCircularRef + + var xlen int + + var kv sfiRv + var j int + var sf encStructFieldObj + if toMap { + newlen = 0 + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + for _, si := range tisfi { + + if si.omitEmpty { + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyValue(kv.r, e.h.TypeInfos, recur) { + continue + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[newlen] = kv + newlen++ + } + + var mf2s []stringIntf + if len(mf) != 0 { + mf2s = make([]stringIntf, 0, len(mf)) + for k, v := range mf { + if k == "" { + continue + } + if ti.infoFieldOmitempty && isEmptyValue(reflect.ValueOf(v), e.h.TypeInfos, recur) { + continue + } + mf2s = append(mf2s, stringIntf{k, v}) + } + } + + xlen = newlen + len(mf2s) + if xlen == 0 { + e.e.WriteMapEmpty() + goto END + } + + e.mapStart(xlen) + + if len(mf2s) != 0 && e.h.Canonical { + mf2w := make([]encStructFieldObj, newlen+len(mf2s)) + for j = 0; j < newlen; j++ { + kv = fkvs[j] + mf2w[j] = encStructFieldObj{kv.v.encName, kv.r, nil, true, + !kv.v.encNameEscape4Json, kv.v.encBuiltin} + } + for _, v := range mf2s { + mf2w[j] = encStructFieldObj{v.v, reflect.Value{}, v.i, false, false, false} + j++ + } + sort.Sort((encStructFieldObjSlice)(mf2w)) + for j, sf = range mf2w { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && sf.noEsc4json { + e.e.EncodeStringNoEscape4Json(sf.key) + } else { + e.kStructFieldKey(ti.keyType, sf.key) + } + e.mapElemValue() + if sf.isRv { + if sf.builtin { + e.encodeIB(rv2i(baseRVRV(sf.rv))) + } else { + e.encodeValue(sf.rv, nil) + } + } else { + if !e.encodeBuiltin(sf.intf) { + e.encodeR(reflect.ValueOf(sf.intf)) + } + + } + } + } else { + keytyp := ti.keyType + for j = 0; j < newlen; j++ { + kv = fkvs[j] + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && !kv.v.encNameEscape4Json { + e.e.EncodeStringNoEscape4Json(kv.v.encName) + } else { + e.kStructFieldKey(keytyp, kv.v.encName) + } + e.mapElemValue() + if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + for _, v := range mf2s { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.kStructFieldKey(keytyp, v.v) + e.mapElemValue() + if !e.encodeBuiltin(v.i) { + e.encodeR(reflect.ValueOf(v.i)) + } + + j++ + } + } + + e.c = 0 + e.e.WriteMapEnd() + } else { + newlen = len(tisfi) + for i, si := range tisfi { + + if si.omitEmpty { + + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyContainerValue(kv.r, e.h.TypeInfos, recur) { + kv.r = reflect.Value{} + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[i] = kv + } + + if newlen == 0 { + e.e.WriteArrayEmpty() + goto END + } + + e.arrayStart(newlen) + for j = 0; j < newlen; j++ { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + kv = fkvs[j] + if !kv.r.IsValid() { + e.e.EncodeNil() + } else if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } + +END: + + e.slist.put(fkvs) +} + +func (e *encoderCborBytes) kMap(f *encFnInfo, rv reflect.Value) { + _ = e.e + l := rvLenMap(rv) + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.mapStart(l) + + var keyFn, valFn *encFnCborBytes + + ktypeKind := reflect.Kind(f.ti.keykind) + vtypeKind := reflect.Kind(f.ti.elemkind) + + rtval := f.ti.elem + rtvalkind := vtypeKind + for rtvalkind == reflect.Ptr { + rtval = rtval.Elem() + rtvalkind = rtval.Kind() + } + if rtvalkind != reflect.Interface { + valFn = e.fn(rtval) + } + + var rvv = mapAddrLoopvarRV(f.ti.elem, vtypeKind) + + rtkey := f.ti.key + var keyTypeIsString = stringTypId == rt2id(rtkey) + if keyTypeIsString { + keyFn = e.fn(rtkey) + } else { + for rtkey.Kind() == reflect.Ptr { + rtkey = rtkey.Elem() + } + if rtkey.Kind() != reflect.Interface { + keyFn = e.fn(rtkey) + } + } + + if e.h.Canonical { + e.kMapCanonical(f.ti, rv, rvv, keyFn, valFn) + e.c = 0 + e.e.WriteMapEnd() + return + } + + var rvk = mapAddrLoopvarRV(f.ti.key, ktypeKind) + + var it mapIter + mapRange(&it, rv, rvk, rvv, true) + + kbuiltin := f.ti.tikey.flagEncBuiltin + vbuiltin := f.ti.tielem.flagEncBuiltin + for j := 0; it.Next(); j++ { + rv = it.Key() + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if keyTypeIsString { + e.e.EncodeString(rvGetString(rv)) + } else if kbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(rv, keyFn) + } + e.mapElemValue() + rv = it.Value() + if vbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(it.Value(), valFn) + } + } + it.Done() + + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborBytes) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valFn *encFnCborBytes) { + _ = e.e + + rtkey := ti.key + rtkeydecl := rtkey.PkgPath() == "" && rtkey.Name() != "" + + mks := rv.MapKeys() + rtkeyKind := rtkey.Kind() + mparams := getMapReqParams(ti) + + switch rtkeyKind { + case reflect.Bool: + + if len(mks) == 2 && mks[0].Bool() { + mks[0], mks[1] = mks[1], mks[0] + } + for i := range mks { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeBool(mks[i].Bool()) + } else { + e.encodeValueNonNil(mks[i], keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mks[i], rvv, mparams), valFn) + } + case reflect.String: + mksv := make([]orderedRv[string], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rvGetString(k) + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeString(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr: + mksv := make([]orderedRv[uint64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Uint() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeUint(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + mksv := make([]orderedRv[int64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Int() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeInt(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float32: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat32(float32(mksv[i].v)) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float64: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat64(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + default: + if rtkey == timeTyp { + mksv := make([]timeRv, len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rv2i(k).(time.Time) + } + slices.SortFunc(mksv, cmpTimeRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeTime(mksv[i].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + break + } + + bs0 := e.blist.get(len(mks) * 16) + mksv := bs0 + mksbv := make([]bytesRv, len(mks)) + + sideEncode(e.hh, &e.h.sideEncPool, func(se encoderI) { + se.ResetBytes(&mksv) + for i, k := range mks { + v := &mksbv[i] + l := len(mksv) + se.setContainerState(containerMapKey) + se.encodeR(baseRVRV(k)) + se.atEndOfEncode() + se.writerEnd() + v.r = k + v.v = mksv[l:] + } + }) + + slices.SortFunc(mksbv, cmpBytesRv) + for j := range mksbv { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.writeBytesAsis(mksbv[j].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksbv[j].r, rvv, mparams), valFn) + } + e.blist.put(mksv) + if !byteSliceSameData(bs0, mksv) { + e.blist.put(bs0) + } + } +} + +func (e *encoderCborBytes) init(h Handle) { + initHandle(h) + callMake(&e.e) + e.hh = h + e.h = h.getBasicHandle() + + e.err = errEncoderNotInitialized + + e.fp = e.e.init(h, &e.encoderBase, e).(*fastpathEsCborBytes) + + if e.bytes { + e.rtidFn = &e.h.rtidFnsEncBytes + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtBytes + } else { + e.rtidFn = &e.h.rtidFnsEncIO + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtIO + } + + e.reset() +} + +func (e *encoderCborBytes) reset() { + e.e.reset() + if e.ci != nil { + e.ci = e.ci[:0] + } + e.c = 0 + e.calls = 0 + e.seq = 0 + e.err = nil +} + +func (e *encoderCborBytes) Encode(v interface{}) (err error) { + + defer panicValToErr(e, callRecoverSentinel, &e.err, &err, debugging) + e.mustEncode(v) + return +} + +func (e *encoderCborBytes) MustEncode(v interface{}) { + defer panicValToErr(e, callRecoverSentinel, &e.err, nil, true) + e.mustEncode(v) + return +} + +func (e *encoderCborBytes) mustEncode(v interface{}) { + halt.onerror(e.err) + if e.hh == nil { + halt.onerror(errNoFormatHandle) + } + + e.calls++ + if !e.encodeBuiltin(v) { + e.encodeR(reflect.ValueOf(v)) + } + + e.calls-- + if e.calls == 0 { + e.e.atEndOfEncode() + e.e.writerEnd() + } +} + +func (e *encoderCborBytes) encodeI(iv interface{}) { + if !e.encodeBuiltin(iv) { + e.encodeR(reflect.ValueOf(iv)) + } +} + +func (e *encoderCborBytes) encodeIB(iv interface{}) { + if !e.encodeBuiltin(iv) { + + halt.errorStr("[should not happen] invalid type passed to encodeBuiltin") + } +} + +func (e *encoderCborBytes) encodeR(base reflect.Value) { + e.encodeValue(base, nil) +} + +func (e *encoderCborBytes) encodeBuiltin(iv interface{}) (ok bool) { + ok = true + switch v := iv.(type) { + case nil: + e.e.EncodeNil() + + case Raw: + e.rawBytes(v) + case string: + e.e.EncodeString(v) + case bool: + e.e.EncodeBool(v) + case int: + e.e.EncodeInt(int64(v)) + case int8: + e.e.EncodeInt(int64(v)) + case int16: + e.e.EncodeInt(int64(v)) + case int32: + e.e.EncodeInt(int64(v)) + case int64: + e.e.EncodeInt(v) + case uint: + e.e.EncodeUint(uint64(v)) + case uint8: + e.e.EncodeUint(uint64(v)) + case uint16: + e.e.EncodeUint(uint64(v)) + case uint32: + e.e.EncodeUint(uint64(v)) + case uint64: + e.e.EncodeUint(v) + case uintptr: + e.e.EncodeUint(uint64(v)) + case float32: + e.e.EncodeFloat32(v) + case float64: + e.e.EncodeFloat64(v) + case complex64: + e.encodeComplex64(v) + case complex128: + e.encodeComplex128(v) + case time.Time: + e.e.EncodeTime(v) + case []byte: + e.e.EncodeBytes(v) + default: + + ok = !skipFastpathTypeSwitchInDirectCall && e.dh.fastpathEncodeTypeSwitch(iv, e) + } + return +} + +func (e *encoderCborBytes) encodeValue(rv reflect.Value, fn *encFnCborBytes) { + + var ciPushes int + + var rvp reflect.Value + var rvpValid bool + +RV: + switch rv.Kind() { + case reflect.Ptr: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = true + rvp = rv + rv = rv.Elem() + + if e.h.CheckCircularRef && e.ci.canPushElemKind(rv.Kind()) { + e.ci.push(rv2i(rvp)) + ciPushes++ + } + goto RV + case reflect.Interface: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = false + rvp = reflect.Value{} + rv = rv.Elem() + fn = nil + goto RV + case reflect.Map: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteMapEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Slice, reflect.Chan: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteArrayEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Invalid, reflect.Func: + e.e.EncodeNil() + goto END + } + + if fn == nil { + fn = e.fn(rv.Type()) + } + + if !fn.i.addrE { + + } else if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + fn.fe(e, &fn.i, rv) + +END: + if ciPushes > 0 { + e.ci.pop(ciPushes) + } +} + +func (e *encoderCborBytes) encodeValueNonNil(rv reflect.Value, fn *encFnCborBytes) { + + if fn.i.addrE { + if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + } + fn.fe(e, &fn.i, rv) +} + +func (e *encoderCborBytes) encodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + e.encodeValue(baseRV(v), e.fn(t)) + } else { + e.encodeValue(baseRV(v), e.fnNoExt(t)) + } +} + +func (e *encoderCborBytes) marshalUtf8(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.EncodeString(stringView(bs)) + } +} + +func (e *encoderCborBytes) marshalAsis(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.writeBytesAsis(bs) + } +} + +func (e *encoderCborBytes) marshalRaw(bs []byte, fnerr error) { + halt.onerror(fnerr) + e.e.EncodeBytes(bs) +} + +func (e *encoderCborBytes) rawBytes(vv Raw) { + v := []byte(vv) + if !e.h.Raw { + halt.errorBytes("Raw values cannot be encoded: ", v) + } + e.e.writeBytesAsis(v) +} + +func (e *encoderCborBytes) fn(t reflect.Type) *encFnCborBytes { + return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false) +} + +func (e *encoderCborBytes) fnNoExt(t reflect.Type) *encFnCborBytes { + return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true) +} + +func (e *encoderCborBytes) mapStart(length int) { + e.e.WriteMapStart(length) + e.c = containerMapStart +} + +func (e *encoderCborBytes) mapElemValue() { + e.e.WriteMapElemValue() + e.c = containerMapValue +} + +func (e *encoderCborBytes) arrayStart(length int) { + e.e.WriteArrayStart(length) + e.c = containerArrayStart +} + +func (e *encoderCborBytes) writerEnd() { + e.e.writerEnd() +} + +func (e *encoderCborBytes) atEndOfEncode() { + e.e.atEndOfEncode() +} + +func (e *encoderCborBytes) Reset(w io.Writer) { + if e.bytes { + halt.onerror(errEncNoResetBytesWithWriter) + } + e.reset() + if w == nil { + w = io.Discard + } + e.e.resetOutIO(w) +} + +func (e *encoderCborBytes) ResetBytes(out *[]byte) { + if !e.bytes { + halt.onerror(errEncNoResetWriterWithBytes) + } + e.resetBytes(out) +} + +func (e *encoderCborBytes) resetBytes(out *[]byte) { + e.reset() + if out == nil { + out = &bytesEncAppenderDefOut + } + e.e.resetOutBytes(out) +} + +func (helperEncDriverCborBytes) newEncoderBytes(out *[]byte, h Handle) *encoderCborBytes { + var c1 encoderCborBytes + c1.bytes = true + c1.init(h) + c1.ResetBytes(out) + return &c1 +} + +func (helperEncDriverCborBytes) newEncoderIO(out io.Writer, h Handle) *encoderCborBytes { + var c1 encoderCborBytes + c1.bytes = false + c1.init(h) + c1.Reset(out) + return &c1 +} + +func (helperEncDriverCborBytes) encFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathEsCborBytes) (f *fastpathECborBytes, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperEncDriverCborBytes) encFindRtidFn(s []encRtidFnCborBytes, rtid uintptr) (i uint, fn *encFnCborBytes) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperEncDriverCborBytes) encFromRtidFnSlice(fns *atomicRtidFnSlice) (s []encRtidFnCborBytes) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]encRtidFnCborBytes](v)) + } + return +} + +func (dh helperEncDriverCborBytes) encFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, + x *BasicHandle, fp *fastpathEsCborBytes, checkExt bool) (fn *encFnCborBytes) { + return dh.encFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperEncDriverCborBytes) encFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsCborBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnCborBytes) { + rtid := rt2id(rt) + var sp []encRtidFnCborBytes = dh.encFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.encFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.encFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperEncDriverCborBytes) encFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsCborBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnCborBytes) { + + fn = dh.encFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []encRtidFnCborBytes + mu.Lock() + sp = dh.encFromRtidFnSlice(fns) + + if sp == nil { + sp = []encRtidFnCborBytes{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.encFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]encRtidFnCborBytes, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = encRtidFnCborBytes{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperEncDriverCborBytes) encFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathEsCborBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnCborBytes) { + fn = new(encFnCborBytes) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + if rtid == timeTypId && timeBuiltin { + fn.fe = (*encoderCborBytes).kTime + } else if rtid == rawTypId { + fn.fe = (*encoderCborBytes).raw + } else if rtid == rawExtTypId { + fn.fe = (*encoderCborBytes).rawExt + fi.addrE = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fe = (*encoderCborBytes).ext + if rk == reflect.Struct || rk == reflect.Array { + fi.addrE = true + } + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fe = (*encoderCborBytes).selferMarshal + fi.addrE = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fe = (*encoderCborBytes).binaryMarshal + fi.addrE = ti.flagBinaryMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fe = (*encoderCborBytes).jsonMarshal + fi.addrE = ti.flagJsonMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fe = (*encoderCborBytes).textMarshal + fi.addrE = ti.flagTextMarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fe = fp[idx].encfn + } + } else { + + xfe, xrt := dh.encFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf := xfe.encfn + fn.fe = func(e *encoderCborBytes, xf *encFnInfo, xrv reflect.Value) { + xfnf(e, xf, rvConvert(xrv, xrt)) + } + } + } + } + if fn.fe == nil { + switch rk { + case reflect.Bool: + fn.fe = (*encoderCborBytes).kBool + case reflect.String: + + fn.fe = (*encoderCborBytes).kString + case reflect.Int: + fn.fe = (*encoderCborBytes).kInt + case reflect.Int8: + fn.fe = (*encoderCborBytes).kInt8 + case reflect.Int16: + fn.fe = (*encoderCborBytes).kInt16 + case reflect.Int32: + fn.fe = (*encoderCborBytes).kInt32 + case reflect.Int64: + fn.fe = (*encoderCborBytes).kInt64 + case reflect.Uint: + fn.fe = (*encoderCborBytes).kUint + case reflect.Uint8: + fn.fe = (*encoderCborBytes).kUint8 + case reflect.Uint16: + fn.fe = (*encoderCborBytes).kUint16 + case reflect.Uint32: + fn.fe = (*encoderCborBytes).kUint32 + case reflect.Uint64: + fn.fe = (*encoderCborBytes).kUint64 + case reflect.Uintptr: + fn.fe = (*encoderCborBytes).kUintptr + case reflect.Float32: + fn.fe = (*encoderCborBytes).kFloat32 + case reflect.Float64: + fn.fe = (*encoderCborBytes).kFloat64 + case reflect.Complex64: + fn.fe = (*encoderCborBytes).kComplex64 + case reflect.Complex128: + fn.fe = (*encoderCborBytes).kComplex128 + case reflect.Chan: + fn.fe = (*encoderCborBytes).kChan + case reflect.Slice: + fn.fe = (*encoderCborBytes).kSlice + case reflect.Array: + fn.fe = (*encoderCborBytes).kArray + case reflect.Struct: + if ti.simple { + fn.fe = (*encoderCborBytes).kStructSimple + } else { + fn.fe = (*encoderCborBytes).kStruct + } + case reflect.Map: + fn.fe = (*encoderCborBytes).kMap + case reflect.Interface: + + fn.fe = (*encoderCborBytes).kErr + default: + + fn.fe = (*encoderCborBytes).kErr + } + } + } + return +} +func (d *decoderCborBytes) rawExt(f *decFnInfo, rv reflect.Value) { + d.d.DecodeRawExt(rv2i(rv).(*RawExt)) +} + +func (d *decoderCborBytes) ext(f *decFnInfo, rv reflect.Value) { + d.d.DecodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (d *decoderCborBytes) selferUnmarshal(_ *decFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecDecodeSelf(&Decoder{d}) +} + +func (d *decoderCborBytes) binaryUnmarshal(_ *decFnInfo, rv reflect.Value) { + bm := rv2i(rv).(encoding.BinaryUnmarshaler) + xbs, _ := d.d.DecodeBytes() + fnerr := bm.UnmarshalBinary(xbs) + halt.onerror(fnerr) +} + +func (d *decoderCborBytes) textUnmarshal(_ *decFnInfo, rv reflect.Value) { + tm := rv2i(rv).(encoding.TextUnmarshaler) + fnerr := tm.UnmarshalText(bytesOKs(d.d.DecodeStringAsBytes())) + halt.onerror(fnerr) +} + +func (d *decoderCborBytes) jsonUnmarshal(_ *decFnInfo, rv reflect.Value) { + d.jsonUnmarshalV(rv2i(rv).(jsonUnmarshaler)) +} + +func (d *decoderCborBytes) jsonUnmarshalV(tm jsonUnmarshaler) { + + halt.onerror(tm.UnmarshalJSON(d.d.nextValueBytes())) +} + +func (d *decoderCborBytes) kErr(_ *decFnInfo, rv reflect.Value) { + halt.errorf("unsupported decoding kind: %s, for %#v", rv.Kind(), rv) + +} + +func (d *decoderCborBytes) raw(_ *decFnInfo, rv reflect.Value) { + rvSetBytes(rv, d.rawBytes()) +} + +func (d *decoderCborBytes) kString(_ *decFnInfo, rv reflect.Value) { + rvSetString(rv, d.detach2Str(d.d.DecodeStringAsBytes())) +} + +func (d *decoderCborBytes) kBool(_ *decFnInfo, rv reflect.Value) { + rvSetBool(rv, d.d.DecodeBool()) +} + +func (d *decoderCborBytes) kTime(_ *decFnInfo, rv reflect.Value) { + rvSetTime(rv, d.d.DecodeTime()) +} + +func (d *decoderCborBytes) kFloat32(_ *decFnInfo, rv reflect.Value) { + rvSetFloat32(rv, d.d.DecodeFloat32()) +} + +func (d *decoderCborBytes) kFloat64(_ *decFnInfo, rv reflect.Value) { + rvSetFloat64(rv, d.d.DecodeFloat64()) +} + +func (d *decoderCborBytes) kComplex64(_ *decFnInfo, rv reflect.Value) { + rvSetComplex64(rv, complex(d.d.DecodeFloat32(), 0)) +} + +func (d *decoderCborBytes) kComplex128(_ *decFnInfo, rv reflect.Value) { + rvSetComplex128(rv, complex(d.d.DecodeFloat64(), 0)) +} + +func (d *decoderCborBytes) kInt(_ *decFnInfo, rv reflect.Value) { + rvSetInt(rv, int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))) +} + +func (d *decoderCborBytes) kInt8(_ *decFnInfo, rv reflect.Value) { + rvSetInt8(rv, int8(chkOvf.IntV(d.d.DecodeInt64(), 8))) +} + +func (d *decoderCborBytes) kInt16(_ *decFnInfo, rv reflect.Value) { + rvSetInt16(rv, int16(chkOvf.IntV(d.d.DecodeInt64(), 16))) +} + +func (d *decoderCborBytes) kInt32(_ *decFnInfo, rv reflect.Value) { + rvSetInt32(rv, int32(chkOvf.IntV(d.d.DecodeInt64(), 32))) +} + +func (d *decoderCborBytes) kInt64(_ *decFnInfo, rv reflect.Value) { + rvSetInt64(rv, d.d.DecodeInt64()) +} + +func (d *decoderCborBytes) kUint(_ *decFnInfo, rv reflect.Value) { + rvSetUint(rv, uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderCborBytes) kUintptr(_ *decFnInfo, rv reflect.Value) { + rvSetUintptr(rv, uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderCborBytes) kUint8(_ *decFnInfo, rv reflect.Value) { + rvSetUint8(rv, uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))) +} + +func (d *decoderCborBytes) kUint16(_ *decFnInfo, rv reflect.Value) { + rvSetUint16(rv, uint16(chkOvf.UintV(d.d.DecodeUint64(), 16))) +} + +func (d *decoderCborBytes) kUint32(_ *decFnInfo, rv reflect.Value) { + rvSetUint32(rv, uint32(chkOvf.UintV(d.d.DecodeUint64(), 32))) +} + +func (d *decoderCborBytes) kUint64(_ *decFnInfo, rv reflect.Value) { + rvSetUint64(rv, d.d.DecodeUint64()) +} + +func (d *decoderCborBytes) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) { + + n := d.naked() + d.d.DecodeNaked() + + if decFailNonEmptyIntf && f.ti.numMeth > 0 { + halt.errorf("cannot decode non-nil codec value into nil %v (%v methods)", f.ti.rt, f.ti.numMeth) + } + + switch n.v { + case valueTypeMap: + mtid := d.mtid + if mtid == 0 { + if d.jsms { + mtid = mapStrIntfTypId + } else { + mtid = mapIntfIntfTypId + } + } + if mtid == mapStrIntfTypId { + var v2 map[string]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if mtid == mapIntfIntfTypId { + var v2 map[interface{}]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.mtr { + rvn = reflect.New(d.h.MapType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + + rvn = rvZeroAddrK(d.h.MapType, reflect.Map) + d.decodeValue(rvn, nil) + } + case valueTypeArray: + if d.stid == 0 || d.stid == intfSliceTypId { + var v2 []interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.str { + rvn = reflect.New(d.h.SliceType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + rvn = rvZeroAddrK(d.h.SliceType, reflect.Slice) + d.decodeValue(rvn, nil) + } + if d.h.PreferArrayOverSlice { + rvn = rvGetArray4Slice(rvn) + } + case valueTypeExt: + tag, bytes := n.u, n.l + bfn := d.h.getExtForTag(tag) + var re = RawExt{Tag: tag} + if bytes == nil { + + if bfn == nil { + d.decode(&re.Value) + rvn = rv4iptr(&re).Elem() + } else if bfn.ext == SelfExt { + rvn = rvZeroAddrK(bfn.rt, bfn.rt.Kind()) + d.decodeValue(rvn, d.fnNoExt(bfn.rt)) + } else { + rvn = reflect.New(bfn.rt) + d.interfaceExtConvertAndDecode(rv2i(rvn), bfn.ext) + rvn = rvn.Elem() + } + } else { + + if bfn == nil { + re.setData(bytes, false) + rvn = rv4iptr(&re).Elem() + } else { + rvn = reflect.New(bfn.rt) + if bfn.ext == SelfExt { + sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) }) + } else { + bfn.ext.ReadExt(rv2i(rvn), bytes) + } + rvn = rvn.Elem() + } + } + + if d.h.PreferPointerForStructOrArray && rvn.CanAddr() { + if rk := rvn.Kind(); rk == reflect.Array || rk == reflect.Struct { + rvn = rvn.Addr() + } + } + case valueTypeNil: + + case valueTypeInt: + rvn = n.ri() + case valueTypeUint: + rvn = n.ru() + case valueTypeFloat: + rvn = n.rf() + case valueTypeBool: + rvn = n.rb() + case valueTypeString, valueTypeSymbol: + rvn = n.rs() + case valueTypeBytes: + rvn = n.rl() + case valueTypeTime: + rvn = n.rt() + default: + halt.errorStr2("kInterfaceNaked: unexpected valueType: ", n.v.String()) + } + return +} + +func (d *decoderCborBytes) kInterface(f *decFnInfo, rv reflect.Value) { + + isnilrv := rvIsNil(rv) + + var rvn reflect.Value + + if d.h.InterfaceReset { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } else if !isnilrv { + decSetNonNilRV2Zero4Intf(rv) + } + return + } + } else if isnilrv { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } + return + } + } else { + + rvn = rv.Elem() + } + + canDecode, _ := isDecodeable(rvn) + + if !canDecode { + rvn2 := d.oneShotAddrRV(rvn.Type(), rvn.Kind()) + rvSetDirect(rvn2, rvn) + rvn = rvn2 + } + + d.decodeValue(rvn, nil) + rvSetIntf(rv, rvn) +} + +func (d *decoderCborBytes) kStructField(si *structFieldInfo, rv reflect.Value) { + if d.d.TryNil() { + rv = si.fieldNoAlloc(rv, true) + if rv.IsValid() { + decSetNonNilRV2Zero(rv) + } + } else if si.decBuiltin { + rv = rvAddr(si.fieldAlloc(rv), si.ptrTyp) + d.decode(rv2i(rv)) + } else { + fn := d.fn(si.baseTyp) + rv = si.fieldAlloc(rv) + if fn.i.addrD { + rv = rvAddr(rv, si.ptrTyp) + } + fn.fd(d, &fn.i, rv) + } +} + +func (d *decoderCborBytes) kStructSimple(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var rvkencname []byte + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderCborBytes) kStruct(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + var mf MissingFielder + if ti.flagMissingFielder { + mf = rv2i(rv).(MissingFielder) + } else if ti.flagMissingFielderPtr { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder) + } + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var name2 []byte + var rvkencname []byte + tkt := ti.keyType + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + + if tkt == valueTypeString { + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + } else if tkt == valueTypeInt { + rvkencname = strconv.AppendInt(d.b[:0], d.d.DecodeInt64(), 10) + } else if tkt == valueTypeUint { + rvkencname = strconv.AppendUint(d.b[:0], d.d.DecodeUint64(), 10) + } else if tkt == valueTypeFloat { + rvkencname = strconv.AppendFloat(d.b[:0], d.d.DecodeFloat64(), 'f', -1, 64) + } else { + halt.errorStr2("invalid struct key type: ", ti.keyType.String()) + } + + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else if mf != nil { + + name2 = append(name2[:0], rvkencname...) + var f interface{} + d.decode(&f) + if !mf.CodecMissingField(name2, f) && d.h.ErrorIfNoField { + halt.errorStr2("no matching struct field when decoding stream map with key: ", stringView(name2)) + } + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderCborBytes) kSlice(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + rvCanset := rv.CanSet() + + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + rvbs := rvGetBytes(rv) + if rvCanset { + bs2, bst := d.decodeBytesInto(rvbs, false) + if bst != dBytesIntoParamOut { + rvSetBytes(rv, bs2) + } + } else { + + d.decodeBytesInto(rvbs[:len(rvbs):len(rvbs)], true) + } + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset { + if rvIsNil(rv) { + rvSetDirect(rv, rvSliceZeroCap(ti.rt)) + } else { + rvSetSliceLen(rv, 0) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem0Mut := !scalarBitset.isset(ti.elemkind) + rtelem := ti.elem + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnCborBytes + + var rvChanged bool + + var rv0 = rv + var rv9 reflect.Value + + rvlen := rvLenSlice(rv) + rvcap := rvCapSlice(rv) + maxInitLen := d.maxInitLen() + hasLen := containerLenS >= 0 + if hasLen { + if containerLenS > rvcap { + oldRvlenGtZero := rvlen > 0 + rvlen1 := int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + if rvlen1 == rvlen { + } else if rvlen1 <= rvcap { + if rvCanset { + rvlen = rvlen1 + rvSetSliceLen(rv, rvlen) + } + } else if rvCanset { + rvlen = rvlen1 + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + if rvChanged && oldRvlenGtZero && rtelem0Mut { + rvCopySlice(rv, rv0, rtelem) + } + } else if containerLenS != rvlen { + if rvCanset { + rvlen = containerLenS + rvSetSliceLen(rv, rvlen) + } + } + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } + + var j int + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if rvCanset { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + + if rvlen < rvcap { + rvlen = rvcap + if rvCanset { + rvSetSliceLen(rv, rvlen) + } else if rvChanged { + rv = rvSlice(rv, rvlen) + } else { + halt.onerror(errExpandSliceCannotChange) + } + } else { + if !(rvCanset || rvChanged) { + halt.onerror(errExpandSliceCannotChange) + } + rv, rvcap, rvCanset = rvGrowSlice(rv, f.ti, rvcap, 1) + + rvlen = rvcap + rvChanged = !rvCanset + } + } + + rv9 = rvArrayIndex(rv, j, f.ti, true) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if j < rvlen { + if rvCanset { + rvSetSliceLen(rv, j) + } else if rvChanged { + rv = rvSlice(rv, j) + } + + } else if j == 0 && rvIsNil(rv) { + if rvCanset { + rv = rvSliceZeroCap(ti.rt) + rvCanset = false + rvChanged = true + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } +} + +func (d *decoderCborBytes) kArray(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + ctyp := d.d.ContainerType() + if handleBytesWithinKArray && (ctyp == valueTypeBytes || ctyp == valueTypeString) { + + if ti.elemkind != uint8(reflect.Uint8) { + halt.errorf("bytes/string in stream can decode into array of bytes, but not %v", ti.rt) + } + rvbs := rvGetArrayBytes(rv, nil) + d.decodeBytesInto(rvbs, true) + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var rv9 reflect.Value + + rvlen := rv.Len() + hasLen := containerLenS >= 0 + if hasLen && containerLenS > rvlen { + halt.errorf("cannot decode into array with length: %v, less than container length: %v", any(rvlen), any(containerLenS)) + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + var fn *decFnCborBytes + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } else { + fn = d.fn(rtelem) + } + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + d.arrayCannotExpand(rvlen, j+1) + d.swallow() + continue + } + + rv9 = rvArrayIndex(rv, j, f.ti, false) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborBytes) kChan(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + if ti.chandir&uint8(reflect.SendDir) == 0 { + halt.errorStr("receive-only channel cannot be decoded") + } + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + bs2, _ := d.d.DecodeBytes() + irv := rv2i(rv) + ch, ok := irv.(chan<- byte) + if !ok { + ch = irv.(chan byte) + } + for _, b := range bs2 { + ch <- b + } + return + } + + var rvCanset = rv.CanSet() + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset && rvIsNil(rv) { + rvSetDirect(rv, reflect.MakeChan(ti.rt, 0)) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + useTransient := decUseTransient && ti.elemkind != byte(reflect.Ptr) && ti.tielem.flagCanTransient + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnCborBytes + + var rvChanged bool + var rv0 = rv + var rv9 reflect.Value + + var rvlen int + hasLen := containerLenS >= 0 + maxInitLen := d.maxInitLen() + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if hasLen { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + } else { + rvlen = decDefChanCap + } + if rvCanset { + rv = reflect.MakeChan(ti.rt, rvlen) + rvChanged = true + } else { + halt.errorStr("cannot decode into non-settable chan") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if rv9.IsValid() { + rvSetZero(rv9) + } else if useTransient { + rv9 = d.perType.TransientAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } else { + rv9 = rvZeroAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } + if !d.d.TryNil() { + d.decodeValueNoCheckNil(rv9, fn) + } + rv.Send(rv9) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } + +} + +func (d *decoderCborBytes) kMap(f *decFnInfo, rv reflect.Value) { + _ = d.d + containerLen := d.mapStart(d.d.ReadMapStart()) + ti := f.ti + if rvIsNil(rv) { + rvlen := int(decInferLen(containerLen, d.maxInitLen(), uint(ti.keysize+ti.elemsize))) + rvSetDirect(rv, makeMapReflect(ti.rt, rvlen)) + } + + if containerLen == 0 { + d.mapEnd() + return + } + + ktype, vtype := ti.key, ti.elem + ktypeId := rt2id(ktype) + vtypeKind := reflect.Kind(ti.elemkind) + ktypeKind := reflect.Kind(ti.keykind) + mparams := getMapReqParams(ti) + + vtypePtr := vtypeKind == reflect.Ptr + ktypePtr := ktypeKind == reflect.Ptr + + vTransient := decUseTransient && !vtypePtr && ti.tielem.flagCanTransient + + kTransient := vTransient && !ktypePtr && ti.tikey.flagCanTransient + + var vtypeElem reflect.Type + + var keyFn, valFn *decFnCborBytes + var ktypeLo, vtypeLo = ktype, vtype + + if ktypeKind == reflect.Ptr { + for ktypeLo = ktype.Elem(); ktypeLo.Kind() == reflect.Ptr; ktypeLo = ktypeLo.Elem() { + } + } + + if vtypePtr { + vtypeElem = vtype.Elem() + for vtypeLo = vtypeElem; vtypeLo.Kind() == reflect.Ptr; vtypeLo = vtypeLo.Elem() { + } + } + + rvkMut := !scalarBitset.isset(ti.keykind) + rvvMut := !scalarBitset.isset(ti.elemkind) + rvvCanNil := isnilBitset.isset(ti.elemkind) + + var rvk, rvkn, rvv, rvvn, rvva, rvvz reflect.Value + + var doMapGet, doMapSet bool + + if !d.h.MapValueReset { + if rvvMut && (vtypeKind != reflect.Interface || !d.h.InterfaceReset) { + doMapGet = true + rvva = mapAddrLoopvarRV(vtype, vtypeKind) + } + } + + ktypeIsString := ktypeId == stringTypId + ktypeIsIntf := ktypeId == intfTypId + hasLen := containerLen >= 0 + + var kstr2bs []byte + var kstr string + + var mapKeyStringSharesBytesBuf bool + var att dBytesAttachState + + var vElem, kElem reflect.Type + kbuiltin := ti.tikey.flagDecBuiltin && ti.keykind != uint8(reflect.Slice) + vbuiltin := ti.tielem.flagDecBuiltin + if kbuiltin && ktypePtr { + kElem = ti.key.Elem() + } + if vbuiltin && vtypePtr { + vElem = ti.elem.Elem() + } + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + mapKeyStringSharesBytesBuf = false + kstr = "" + if j == 0 { + + if kTransient { + rvk = d.perType.TransientAddr2K(ktype, ktypeKind) + } else { + rvk = rvZeroAddrK(ktype, ktypeKind) + } + if !rvkMut { + rvkn = rvk + } + if !rvvMut { + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + } + if !ktypeIsString && keyFn == nil { + keyFn = d.fn(ktypeLo) + } + if valFn == nil { + valFn = d.fn(vtypeLo) + } + } else if rvkMut { + rvSetZero(rvk) + } else { + rvk = rvkn + } + + d.mapElemKey(j == 0) + + if d.d.TryNil() { + rvSetZero(rvk) + } else if ktypeIsString { + kstr2bs, att = d.d.DecodeStringAsBytes() + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, att) + rvSetString(rvk, kstr) + } else { + if kbuiltin { + if ktypePtr { + if rvIsNil(rvk) { + rvSetDirect(rvk, reflect.New(kElem)) + } + d.decode(rv2i(rvk)) + } else { + d.decode(rv2i(rvAddr(rvk, ti.tikey.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvk, keyFn) + } + + if ktypeIsIntf { + if rvk2 := rvk.Elem(); rvk2.IsValid() && rvk2.Type() == uint8SliceTyp { + kstr2bs = rvGetBytes(rvk2) + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, dBytesAttachView) + rvSetIntf(rvk, rv4istr(kstr)) + } + + } + } + + if mapKeyStringSharesBytesBuf && d.bufio { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + mapKeyStringSharesBytesBuf = false + } + + d.mapElemValue() + + if d.d.TryNil() { + if mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + + if !rvvz.IsValid() { + rvvz = rvZeroK(vtype, vtypeKind) + } + mapSet(rv, rvk, rvvz, mparams) + continue + } + + doMapSet = true + + if !rvvMut { + rvv = rvvn + } else if !doMapGet { + goto NEW_RVV + } else { + rvv = mapGet(rv, rvk, rvva, mparams) + if !rvv.IsValid() || (rvvCanNil && rvIsNil(rvv)) { + goto NEW_RVV + } + switch vtypeKind { + case reflect.Ptr, reflect.Map: + doMapSet = false + case reflect.Interface: + + rvvn = rvv.Elem() + if k := rvvn.Kind(); (k == reflect.Ptr || k == reflect.Map) && !rvIsNil(rvvn) { + d.decodeValueNoCheckNil(rvvn, nil) + continue + } + + rvvn = rvZeroAddrK(vtype, vtypeKind) + rvSetIntf(rvvn, rvv) + rvv = rvvn + default: + + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + rvSetDirect(rvvn, rvv) + rvv = rvvn + } + } + goto DECODE_VALUE_NO_CHECK_NIL + + NEW_RVV: + if vtypePtr { + rvv = reflect.New(vtypeElem) + } else if vTransient { + rvv = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvv = rvZeroAddrK(vtype, vtypeKind) + } + + DECODE_VALUE_NO_CHECK_NIL: + if doMapSet && mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + if vbuiltin { + if vtypePtr { + if rvIsNil(rvv) { + rvSetDirect(rvv, reflect.New(vElem)) + } + d.decode(rv2i(rvv)) + } else { + d.decode(rv2i(rvAddr(rvv, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvv, valFn) + } + if doMapSet { + mapSet(rv, rvk, rvv, mparams) + } + } + + d.mapEnd() +} + +func (d *decoderCborBytes) init(h Handle) { + initHandle(h) + callMake(&d.d) + d.hh = h + d.h = h.getBasicHandle() + + d.err = errDecoderNotInitialized + + if d.h.InternString && d.is == nil { + d.is.init() + } + + d.fp = d.d.init(h, &d.decoderBase, d).(*fastpathDsCborBytes) + + if d.bytes { + d.rtidFn = &d.h.rtidFnsDecBytes + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtBytes + } else { + d.bufio = d.h.ReaderBufferSize > 0 + d.rtidFn = &d.h.rtidFnsDecIO + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtIO + } + + d.reset() + +} + +func (d *decoderCborBytes) reset() { + d.d.reset() + d.err = nil + d.c = 0 + d.depth = 0 + d.calls = 0 + + d.maxdepth = decDefMaxDepth + if d.h.MaxDepth > 0 { + d.maxdepth = d.h.MaxDepth + } + d.mtid = 0 + d.stid = 0 + d.mtr = false + d.str = false + if d.h.MapType != nil { + d.mtid = rt2id(d.h.MapType) + _, d.mtr = fastpathAvIndex(d.mtid) + } + if d.h.SliceType != nil { + d.stid = rt2id(d.h.SliceType) + _, d.str = fastpathAvIndex(d.stid) + } +} + +func (d *decoderCborBytes) Reset(r io.Reader) { + if d.bytes { + halt.onerror(errDecNoResetBytesWithReader) + } + d.reset() + if r == nil { + r = &eofReader + } + d.d.resetInIO(r) +} + +func (d *decoderCborBytes) ResetBytes(in []byte) { + if !d.bytes { + halt.onerror(errDecNoResetReaderWithBytes) + } + d.resetBytes(in) +} + +func (d *decoderCborBytes) resetBytes(in []byte) { + d.reset() + if in == nil { + in = zeroByteSlice + } + d.d.resetInBytes(in) +} + +func (d *decoderCborBytes) ResetString(s string) { + d.ResetBytes(bytesView(s)) +} + +func (d *decoderCborBytes) Decode(v interface{}) (err error) { + + defer panicValToErr(d, callRecoverSentinel, &d.err, &err, debugging) + d.mustDecode(v) + return +} + +func (d *decoderCborBytes) MustDecode(v interface{}) { + defer panicValToErr(d, callRecoverSentinel, &d.err, nil, true) + d.mustDecode(v) + return +} + +func (d *decoderCborBytes) mustDecode(v interface{}) { + halt.onerror(d.err) + if d.hh == nil { + halt.onerror(errNoFormatHandle) + } + + d.calls++ + d.decode(v) + d.calls-- +} + +func (d *decoderCborBytes) Release() {} + +func (d *decoderCborBytes) swallow() { + d.d.nextValueBytes() +} + +func (d *decoderCborBytes) nextValueBytes() []byte { + return d.d.nextValueBytes() +} + +func (d *decoderCborBytes) decode(iv interface{}) { + _ = d.d + + rv, ok := isNil(iv, true) + if ok { + halt.onerror(errCannotDecodeIntoNil) + } + + switch v := iv.(type) { + + case *string: + *v = d.detach2Str(d.d.DecodeStringAsBytes()) + case *bool: + *v = d.d.DecodeBool() + case *int: + *v = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + case *int8: + *v = int8(chkOvf.IntV(d.d.DecodeInt64(), 8)) + case *int16: + *v = int16(chkOvf.IntV(d.d.DecodeInt64(), 16)) + case *int32: + *v = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + case *int64: + *v = d.d.DecodeInt64() + case *uint: + *v = uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *uint8: + *v = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + case *uint16: + *v = uint16(chkOvf.UintV(d.d.DecodeUint64(), 16)) + case *uint32: + *v = uint32(chkOvf.UintV(d.d.DecodeUint64(), 32)) + case *uint64: + *v = d.d.DecodeUint64() + case *uintptr: + *v = uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *float32: + *v = d.d.DecodeFloat32() + case *float64: + *v = d.d.DecodeFloat64() + case *complex64: + *v = complex(d.d.DecodeFloat32(), 0) + case *complex128: + *v = complex(d.d.DecodeFloat64(), 0) + case *[]byte: + *v, _ = d.decodeBytesInto(*v, false) + case []byte: + + d.decodeBytesInto(v[:len(v):len(v)], true) + case *time.Time: + *v = d.d.DecodeTime() + case *Raw: + *v = d.rawBytes() + + case *interface{}: + d.decodeValue(rv4iptr(v), nil) + + case reflect.Value: + if ok, _ = isDecodeable(v); !ok { + d.haltAsNotDecodeable(v) + } + d.decodeValue(v, nil) + + default: + + if skipFastpathTypeSwitchInDirectCall || !d.dh.fastpathDecodeTypeSwitch(iv, d) { + if !rv.IsValid() { + rv = reflect.ValueOf(iv) + } + if ok, _ = isDecodeable(rv); !ok { + d.haltAsNotDecodeable(rv) + } + d.decodeValue(rv, nil) + } + } +} + +func (d *decoderCborBytes) decodeValue(rv reflect.Value, fn *decFnCborBytes) { + if d.d.TryNil() { + decSetNonNilRV2Zero(rv) + } else { + d.decodeValueNoCheckNil(rv, fn) + } +} + +func (d *decoderCborBytes) decodeValueNoCheckNil(rv reflect.Value, fn *decFnCborBytes) { + + var rvp reflect.Value + var rvpValid bool +PTR: + if rv.Kind() == reflect.Ptr { + rvpValid = true + if rvIsNil(rv) { + rvSetDirect(rv, reflect.New(rv.Type().Elem())) + } + rvp = rv + rv = rv.Elem() + goto PTR + } + + if fn == nil { + fn = d.fn(rv.Type()) + } + if fn.i.addrD { + if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else if fn.i.addrDf { + halt.errorStr("cannot decode into a non-pointer value") + } + } + fn.fd(d, &fn.i, rv) +} + +func (d *decoderCborBytes) decodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + d.decodeValue(baseRV(v), d.fn(t)) + } else { + d.decodeValue(baseRV(v), d.fnNoExt(t)) + } +} + +func (d *decoderCborBytes) structFieldNotFound(index int, rvkencname string) { + + if d.h.ErrorIfNoField { + if index >= 0 { + halt.errorInt("no matching struct field found when decoding stream array at index ", int64(index)) + } else if rvkencname != "" { + halt.errorStr2("no matching struct field found when decoding stream map with key ", rvkencname) + } + } + d.swallow() +} + +func (d *decoderCborBytes) decodeBytesInto(out []byte, mustFit bool) (v []byte, state dBytesIntoState) { + v, att := d.d.DecodeBytes() + if cap(v) == 0 || (att >= dBytesAttachViewZerocopy && !mustFit) { + + return + } + if len(v) == 0 { + v = zeroByteSlice + return + } + if len(out) == len(v) { + state = dBytesIntoParamOut + } else if cap(out) >= len(v) { + out = out[:len(v)] + state = dBytesIntoParamOutSlice + } else if mustFit { + halt.errorf("bytes capacity insufficient for decoded bytes: got/expected: %d/%d", len(v), len(out)) + } else { + out = make([]byte, len(v)) + state = dBytesIntoNew + } + copy(out, v) + v = out + return +} + +func (d *decoderCborBytes) rawBytes() (v []byte) { + + v = d.d.nextValueBytes() + if d.bytes && !d.h.ZeroCopy { + vv := make([]byte, len(v)) + copy(vv, v) + v = vv + } + return +} + +func (d *decoderCborBytes) wrapErr(v error, err *error) { + *err = wrapCodecErr(v, d.hh.Name(), d.d.NumBytesRead(), false) +} + +func (d *decoderCborBytes) NumBytesRead() int { + return d.d.NumBytesRead() +} + +func (d *decoderCborBytes) containerNext(j, containerLen int, hasLen bool) bool { + + if hasLen { + return j < containerLen + } + return !d.d.CheckBreak() +} + +func (d *decoderCborBytes) mapElemKey(firstTime bool) { + d.d.ReadMapElemKey(firstTime) + d.c = containerMapKey +} + +func (d *decoderCborBytes) mapElemValue() { + d.d.ReadMapElemValue() + d.c = containerMapValue +} + +func (d *decoderCborBytes) mapEnd() { + d.d.ReadMapEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderCborBytes) arrayElem(firstTime bool) { + d.d.ReadArrayElem(firstTime) + d.c = containerArrayElem +} + +func (d *decoderCborBytes) arrayEnd() { + d.d.ReadArrayEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderCborBytes) interfaceExtConvertAndDecode(v interface{}, ext InterfaceExt) { + + var vv interface{} + d.decode(&vv) + ext.UpdateExt(v, vv) + +} + +func (d *decoderCborBytes) fn(t reflect.Type) *decFnCborBytes { + return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false) +} + +func (d *decoderCborBytes) fnNoExt(t reflect.Type) *decFnCborBytes { + return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true) +} + +func (helperDecDriverCborBytes) newDecoderBytes(in []byte, h Handle) *decoderCborBytes { + var c1 decoderCborBytes + c1.bytes = true + c1.init(h) + c1.ResetBytes(in) + return &c1 +} + +func (helperDecDriverCborBytes) newDecoderIO(in io.Reader, h Handle) *decoderCborBytes { + var c1 decoderCborBytes + c1.init(h) + c1.Reset(in) + return &c1 +} + +func (helperDecDriverCborBytes) decFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathDsCborBytes) (f *fastpathDCborBytes, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperDecDriverCborBytes) decFindRtidFn(s []decRtidFnCborBytes, rtid uintptr) (i uint, fn *decFnCborBytes) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperDecDriverCborBytes) decFromRtidFnSlice(fns *atomicRtidFnSlice) (s []decRtidFnCborBytes) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]decRtidFnCborBytes](v)) + } + return +} + +func (dh helperDecDriverCborBytes) decFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, x *BasicHandle, fp *fastpathDsCborBytes, + checkExt bool) (fn *decFnCborBytes) { + return dh.decFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperDecDriverCborBytes) decFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsCborBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnCborBytes) { + rtid := rt2id(rt) + var sp []decRtidFnCborBytes = dh.decFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.decFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.decFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperDecDriverCborBytes) decFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsCborBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnCborBytes) { + + fn = dh.decFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []decRtidFnCborBytes + mu.Lock() + sp = dh.decFromRtidFnSlice(fns) + + if sp == nil { + sp = []decRtidFnCborBytes{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.decFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]decRtidFnCborBytes, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = decRtidFnCborBytes{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperDecDriverCborBytes) decFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathDsCborBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnCborBytes) { + fn = new(decFnCborBytes) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + fi.addrDf = true + + if rtid == timeTypId && timeBuiltin { + fn.fd = (*decoderCborBytes).kTime + } else if rtid == rawTypId { + fn.fd = (*decoderCborBytes).raw + } else if rtid == rawExtTypId { + fn.fd = (*decoderCborBytes).rawExt + fi.addrD = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fd = (*decoderCborBytes).ext + fi.addrD = true + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fd = (*decoderCborBytes).selferUnmarshal + fi.addrD = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fd = (*decoderCborBytes).binaryUnmarshal + fi.addrD = ti.flagBinaryUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fd = (*decoderCborBytes).jsonUnmarshal + fi.addrD = ti.flagJsonUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fd = (*decoderCborBytes).textUnmarshal + fi.addrD = ti.flagTextUnmarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fd = fp[idx].decfn + fi.addrD = true + fi.addrDf = false + if rk == reflect.Array { + fi.addrD = false + } + } + } else { + + xfe, xrt := dh.decFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf2 := xfe.decfn + if rk == reflect.Array { + fi.addrD = false + fn.fd = func(d *decoderCborBytes, xf *decFnInfo, xrv reflect.Value) { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } else { + fi.addrD = true + fi.addrDf = false + xptr2rt := reflect.PointerTo(xrt) + fn.fd = func(d *decoderCborBytes, xf *decFnInfo, xrv reflect.Value) { + if xrv.Kind() == reflect.Ptr { + xfnf2(d, xf, rvConvert(xrv, xptr2rt)) + } else { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } + } + } + } + } + if fn.fd == nil { + switch rk { + case reflect.Bool: + fn.fd = (*decoderCborBytes).kBool + case reflect.String: + fn.fd = (*decoderCborBytes).kString + case reflect.Int: + fn.fd = (*decoderCborBytes).kInt + case reflect.Int8: + fn.fd = (*decoderCborBytes).kInt8 + case reflect.Int16: + fn.fd = (*decoderCborBytes).kInt16 + case reflect.Int32: + fn.fd = (*decoderCborBytes).kInt32 + case reflect.Int64: + fn.fd = (*decoderCborBytes).kInt64 + case reflect.Uint: + fn.fd = (*decoderCborBytes).kUint + case reflect.Uint8: + fn.fd = (*decoderCborBytes).kUint8 + case reflect.Uint16: + fn.fd = (*decoderCborBytes).kUint16 + case reflect.Uint32: + fn.fd = (*decoderCborBytes).kUint32 + case reflect.Uint64: + fn.fd = (*decoderCborBytes).kUint64 + case reflect.Uintptr: + fn.fd = (*decoderCborBytes).kUintptr + case reflect.Float32: + fn.fd = (*decoderCborBytes).kFloat32 + case reflect.Float64: + fn.fd = (*decoderCborBytes).kFloat64 + case reflect.Complex64: + fn.fd = (*decoderCborBytes).kComplex64 + case reflect.Complex128: + fn.fd = (*decoderCborBytes).kComplex128 + case reflect.Chan: + fn.fd = (*decoderCborBytes).kChan + case reflect.Slice: + fn.fd = (*decoderCborBytes).kSlice + case reflect.Array: + fi.addrD = false + fn.fd = (*decoderCborBytes).kArray + case reflect.Struct: + if ti.simple { + fn.fd = (*decoderCborBytes).kStructSimple + } else { + fn.fd = (*decoderCborBytes).kStruct + } + case reflect.Map: + fn.fd = (*decoderCborBytes).kMap + case reflect.Interface: + + fn.fd = (*decoderCborBytes).kInterface + default: + + fn.fd = (*decoderCborBytes).kErr + } + } + } + return +} +func (e *cborEncDriverBytes) EncodeNil() { + e.w.writen1(cborBdNil) +} + +func (e *cborEncDriverBytes) EncodeBool(b bool) { + if b { + e.w.writen1(cborBdTrue) + } else { + e.w.writen1(cborBdFalse) + } +} + +func (e *cborEncDriverBytes) EncodeFloat32(f float32) { + b := math.Float32bits(f) + if e.h.OptimumSize { + if h := floatToHalfFloatBits(b); halfFloatToFloatBits(h) == b { + e.w.writen1(cborBdFloat16) + e.w.writen2(bigen.PutUint16(h)) + return + } + } + e.w.writen1(cborBdFloat32) + e.w.writen4(bigen.PutUint32(b)) +} + +func (e *cborEncDriverBytes) EncodeFloat64(f float64) { + if e.h.OptimumSize { + if f32 := float32(f); float64(f32) == f { + e.EncodeFloat32(f32) + return + } + } + e.w.writen1(cborBdFloat64) + e.w.writen8(bigen.PutUint64(math.Float64bits(f))) +} + +func (e *cborEncDriverBytes) encUint(v uint64, bd byte) { + if v <= 0x17 { + e.w.writen1(byte(v) + bd) + } else if v <= math.MaxUint8 { + e.w.writen2(bd+0x18, uint8(v)) + } else if v <= math.MaxUint16 { + e.w.writen1(bd + 0x19) + e.w.writen2(bigen.PutUint16(uint16(v))) + } else if v <= math.MaxUint32 { + e.w.writen1(bd + 0x1a) + e.w.writen4(bigen.PutUint32(uint32(v))) + } else { + e.w.writen1(bd + 0x1b) + e.w.writen8(bigen.PutUint64(v)) + } +} + +func (e *cborEncDriverBytes) EncodeInt(v int64) { + if v < 0 { + e.encUint(uint64(-1-v), cborBaseNegInt) + } else { + e.encUint(uint64(v), cborBaseUint) + } +} + +func (e *cborEncDriverBytes) EncodeUint(v uint64) { + e.encUint(v, cborBaseUint) +} + +func (e *cborEncDriverBytes) encLen(bd byte, length int) { + e.encUint(uint64(length), bd) +} + +func (e *cborEncDriverBytes) EncodeTime(t time.Time) { + if t.IsZero() { + e.EncodeNil() + } else if e.h.TimeRFC3339 { + e.encUint(0, cborBaseTag) + e.encStringBytesS(cborBaseString, stringView(t.AppendFormat(e.b[:0], time.RFC3339Nano))) + } else { + e.encUint(1, cborBaseTag) + t = t.UTC().Round(time.Microsecond) + sec, nsec := t.Unix(), uint64(t.Nanosecond()) + if nsec == 0 { + e.EncodeInt(sec) + } else { + e.EncodeFloat64(float64(sec) + float64(nsec)/1e9) + } + } +} + +func (e *cborEncDriverBytes) EncodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + e.encUint(uint64(xtag), cborBaseTag) + if ext == SelfExt { + e.enc.encodeAs(rv, basetype, false) + } else if v := ext.ConvertExt(rv); v == nil { + e.writeNilBytes() + } else { + e.enc.encodeI(v) + } +} + +func (e *cborEncDriverBytes) EncodeRawExt(re *RawExt) { + e.encUint(uint64(re.Tag), cborBaseTag) + if re.Data != nil { + e.w.writeb(re.Data) + } else if re.Value != nil { + e.enc.encodeI(re.Value) + } else { + e.EncodeNil() + } +} + +func (e *cborEncDriverBytes) WriteArrayEmpty() { + if e.h.IndefiniteLength { + e.w.writen2(cborBdIndefiniteArray, cborBdBreak) + } else { + e.w.writen1(cborBaseArray) + + } +} + +func (e *cborEncDriverBytes) WriteMapEmpty() { + if e.h.IndefiniteLength { + e.w.writen2(cborBdIndefiniteMap, cborBdBreak) + } else { + e.w.writen1(cborBaseMap) + + } +} + +func (e *cborEncDriverBytes) WriteArrayStart(length int) { + if e.h.IndefiniteLength { + e.w.writen1(cborBdIndefiniteArray) + } else { + e.encLen(cborBaseArray, length) + } +} + +func (e *cborEncDriverBytes) WriteMapStart(length int) { + if e.h.IndefiniteLength { + e.w.writen1(cborBdIndefiniteMap) + } else { + e.encLen(cborBaseMap, length) + } +} + +func (e *cborEncDriverBytes) WriteMapEnd() { + if e.h.IndefiniteLength { + e.w.writen1(cborBdBreak) + } +} + +func (e *cborEncDriverBytes) WriteArrayEnd() { + if e.h.IndefiniteLength { + e.w.writen1(cborBdBreak) + } +} + +func (e *cborEncDriverBytes) EncodeString(v string) { + bb := cborBaseString + if e.h.StringToRaw { + bb = cborBaseBytes + } + e.encStringBytesS(bb, v) +} + +func (e *cborEncDriverBytes) EncodeStringNoEscape4Json(v string) { e.EncodeString(v) } + +func (e *cborEncDriverBytes) EncodeStringBytesRaw(v []byte) { + e.encStringBytesS(cborBaseBytes, stringView(v)) +} + +func (e *cborEncDriverBytes) encStringBytesS(bb byte, v string) { + if e.h.IndefiniteLength { + if bb == cborBaseBytes { + e.w.writen1(cborBdIndefiniteBytes) + } else { + e.w.writen1(cborBdIndefiniteString) + } + vlen := uint(len(v)) + n := max(4, min(vlen/4, 1024)) + for i := uint(0); i < vlen; { + i2 := i + n + if i2 >= vlen { + i2 = vlen + } + v2 := v[i:i2] + e.encLen(bb, len(v2)) + e.w.writestr(v2) + i = i2 + } + e.w.writen1(cborBdBreak) + } else { + e.encLen(bb, len(v)) + e.w.writestr(v) + } +} + +func (e *cborEncDriverBytes) EncodeBytes(v []byte) { + if v == nil { + e.writeNilBytes() + return + } + e.EncodeStringBytesRaw(v) +} + +func (e *cborEncDriverBytes) writeNilOr(v byte) { + if !e.h.NilCollectionToZeroLength { + v = cborBdNil + } + e.w.writen1(v) +} + +func (e *cborEncDriverBytes) writeNilArray() { + e.writeNilOr(cborBaseArray) +} + +func (e *cborEncDriverBytes) writeNilMap() { + e.writeNilOr(cborBaseMap) +} + +func (e *cborEncDriverBytes) writeNilBytes() { + e.writeNilOr(cborBaseBytes) +} + +func (d *cborDecDriverBytes) readNextBd() { + d.bd = d.r.readn1() + d.bdRead = true +} + +func (d *cborDecDriverBytes) advanceNil() (null bool) { + if !d.bdRead { + d.readNextBd() + } + if d.bd == cborBdNil || d.bd == cborBdUndefined { + d.bdRead = false + return true + } + return +} + +func (d *cborDecDriverBytes) TryNil() bool { + return d.advanceNil() +} + +func (d *cborDecDriverBytes) skipTags() { + for d.bd>>5 == cborMajorTag { + d.decUint() + d.bd = d.r.readn1() + } +} + +func (d *cborDecDriverBytes) ContainerType() (vt valueType) { + if !d.bdRead { + d.readNextBd() + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + if d.bd == cborBdNil { + d.bdRead = false + return valueTypeNil + } + major := d.bd >> 5 + if major == cborMajorBytes { + return valueTypeBytes + } else if major == cborMajorString { + return valueTypeString + } else if major == cborMajorArray { + return valueTypeArray + } else if major == cborMajorMap { + return valueTypeMap + } + return valueTypeUnset +} + +func (d *cborDecDriverBytes) CheckBreak() (v bool) { + if !d.bdRead { + d.readNextBd() + } + if d.bd == cborBdBreak { + d.bdRead = false + v = true + } + return +} + +func (d *cborDecDriverBytes) decUint() (ui uint64) { + v := d.bd & 0x1f + if v <= 0x17 { + ui = uint64(v) + } else if v == 0x18 { + ui = uint64(d.r.readn1()) + } else if v == 0x19 { + ui = uint64(bigen.Uint16(d.r.readn2())) + } else if v == 0x1a { + ui = uint64(bigen.Uint32(d.r.readn4())) + } else if v == 0x1b { + ui = uint64(bigen.Uint64(d.r.readn8())) + } else { + halt.errorf("invalid descriptor decoding uint: %x/%s (%x)", d.bd, cbordesc(d.bd), v) + } + return +} + +func (d *cborDecDriverBytes) decLen() int { + return int(d.decUint()) +} + +func (d *cborDecDriverBytes) decFloat() (f float64, ok bool) { + ok = true + switch d.bd { + case cborBdFloat16: + f = float64(math.Float32frombits(halfFloatToFloatBits(bigen.Uint16(d.r.readn2())))) + case cborBdFloat32: + f = float64(math.Float32frombits(bigen.Uint32(d.r.readn4()))) + case cborBdFloat64: + f = math.Float64frombits(bigen.Uint64(d.r.readn8())) + default: + if d.bd>>5 == cborMajorTag { + + switch d.bd & 0x1f { + case 2: + f = d.decTagBigIntAsFloat(false) + case 3: + f = d.decTagBigIntAsFloat(true) + case 4: + f = d.decTagBigFloatAsFloat(true) + case 5: + f = d.decTagBigFloatAsFloat(false) + default: + ok = false + } + } else { + ok = false + } + } + return +} + +func (d *cborDecDriverBytes) decInteger() (ui uint64, neg, ok bool) { + ok = true + switch d.bd >> 5 { + case cborMajorUint: + ui = d.decUint() + case cborMajorNegInt: + ui = d.decUint() + neg = true + default: + ok = false + } + return +} + +func (d *cborDecDriverBytes) DecodeInt64() (i int64) { + if d.advanceNil() { + return + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + v1, v2, v3 := d.decInteger() + i = decNegintPosintFloatNumberHelper{d}.int64(v1, v2, v3, true) + d.bdRead = false + return +} + +func (d *cborDecDriverBytes) DecodeUint64() (ui uint64) { + if d.advanceNil() { + return + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + ui = decNegintPosintFloatNumberHelper{d}.uint64(d.decInteger()) + d.bdRead = false + return +} + +func (d *cborDecDriverBytes) DecodeFloat64() (f float64) { + if d.advanceNil() { + return + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + v1, v2 := d.decFloat() + f = decNegintPosintFloatNumberHelper{d}.float64(v1, v2, true) + d.bdRead = false + return +} + +func (d *cborDecDriverBytes) DecodeBool() (b bool) { + if d.advanceNil() { + return + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + if d.bd == cborBdTrue { + b = true + } else if d.bd == cborBdFalse { + } else { + halt.errorf("not bool - %s %x/%s", msgBadDesc, d.bd, cbordesc(d.bd)) + } + d.bdRead = false + return +} + +func (d *cborDecDriverBytes) ReadMapStart() (length int) { + if d.advanceNil() { + return containerLenNil + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + d.bdRead = false + if d.bd == cborBdIndefiniteMap { + return containerLenUnknown + } + if d.bd>>5 != cborMajorMap { + halt.errorf("error reading map; got major type: %x, expected %x/%s", d.bd>>5, cborMajorMap, cbordesc(d.bd)) + } + return d.decLen() +} + +func (d *cborDecDriverBytes) ReadArrayStart() (length int) { + if d.advanceNil() { + return containerLenNil + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + d.bdRead = false + if d.bd == cborBdIndefiniteArray { + return containerLenUnknown + } + if d.bd>>5 != cborMajorArray { + halt.errorf("invalid array; got major type: %x, expect: %x/%s", d.bd>>5, cborMajorArray, cbordesc(d.bd)) + } + return d.decLen() +} + +func (d *cborDecDriverBytes) DecodeBytes() (bs []byte, state dBytesAttachState) { + if d.advanceNil() { + return + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + fnEnsureNonNilBytes := func() { + + if bs == nil { + bs = zeroByteSlice + state = dBytesDetach + } + } + if d.bd == cborBdIndefiniteBytes || d.bd == cborBdIndefiniteString { + major := d.bd >> 5 + val4str := d.h.ValidateUnicode && major == cborMajorString + bs = d.d.buf[:0] + d.bdRead = false + for !d.CheckBreak() { + if d.bd>>5 != major { + const msg = "malformed indefinite string/bytes %x (%s); " + + "contains chunk with major type %v, expected %v" + halt.errorf(msg, d.bd, cbordesc(d.bd), d.bd>>5, major) + } + n := uint(d.decLen()) + bs = append(bs, d.r.readx(n)...) + d.bdRead = false + if val4str && !utf8.Valid(bs[len(bs)-int(n):]) { + const msg = "indefinite-length text string contains chunk " + + "that is not a valid utf-8 sequence: 0x%x" + halt.errorf(msg, bs[len(bs)-int(n):]) + } + } + d.bdRead = false + d.d.buf = bs + state = dBytesAttachBuffer + fnEnsureNonNilBytes() + return + } + if d.bd == cborBdIndefiniteArray { + d.bdRead = false + bs = d.d.buf[:0] + for !d.CheckBreak() { + bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) + } + d.d.buf = bs + state = dBytesAttachBuffer + fnEnsureNonNilBytes() + return + } + var cond bool + if d.bd>>5 == cborMajorArray { + d.bdRead = false + slen := d.decLen() + bs, cond = usableByteSlice(d.d.buf, slen) + for i := 0; i < len(bs); i++ { + bs[i] = uint8(chkOvf.UintV(d.DecodeUint64(), 8)) + } + for i := len(bs); i < slen; i++ { + bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) + } + if cond { + d.d.buf = bs + } + state = dBytesAttachBuffer + fnEnsureNonNilBytes() + return + } + clen := d.decLen() + d.bdRead = false + bs, cond = d.r.readxb(uint(clen)) + state = d.d.attachState(cond) + return +} + +func (d *cborDecDriverBytes) DecodeStringAsBytes() (out []byte, state dBytesAttachState) { + out, state = d.DecodeBytes() + if d.h.ValidateUnicode && !utf8.Valid(out) { + halt.errorf("DecodeStringAsBytes: invalid UTF-8: %s", out) + } + return +} + +func (d *cborDecDriverBytes) DecodeTime() (t time.Time) { + if d.advanceNil() { + return + } + if d.bd>>5 != cborMajorTag { + halt.errorf("error reading tag; expected major type: %x, got: %x", cborMajorTag, d.bd>>5) + } + xtag := d.decUint() + d.bdRead = false + return d.decodeTime(xtag) +} + +func (d *cborDecDriverBytes) decodeTime(xtag uint64) (t time.Time) { + switch xtag { + case 0: + var err error + t, err = time.Parse(time.RFC3339, stringView(bytesOKs(d.DecodeStringAsBytes()))) + halt.onerror(err) + case 1: + f1, f2 := math.Modf(d.DecodeFloat64()) + t = time.Unix(int64(f1), int64(f2*1e9)) + default: + halt.errorf("invalid tag for time.Time - expecting 0 or 1, got 0x%x", xtag) + } + t = t.UTC().Round(time.Microsecond) + return +} + +func (d *cborDecDriverBytes) preDecodeExt(checkTag bool, xtag uint64) (realxtag uint64, ok bool) { + if d.advanceNil() { + return + } + if d.bd>>5 != cborMajorTag { + halt.errorf("error reading tag; expected major type: %x, got: %x", cborMajorTag, d.bd>>5) + } + realxtag = d.decUint() + d.bdRead = false + if checkTag && xtag != realxtag { + halt.errorf("Wrong extension tag. Got %b. Expecting: %v", realxtag, xtag) + } + ok = true + return +} + +func (d *cborDecDriverBytes) DecodeRawExt(re *RawExt) { + if realxtag, ok := d.preDecodeExt(false, 0); ok { + re.Tag = realxtag + d.dec.decode(&re.Value) + d.bdRead = false + } +} + +func (d *cborDecDriverBytes) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + if _, ok := d.preDecodeExt(true, xtag); ok { + if ext == SelfExt { + d.dec.decodeAs(rv, basetype, false) + } else { + d.dec.interfaceExtConvertAndDecode(rv, ext) + } + d.bdRead = false + } +} + +func (d *cborDecDriverBytes) decTagBigIntAsFloat(neg bool) (f float64) { + bs, _ := d.DecodeBytes() + bi := new(big.Int).SetBytes(bs) + if neg { + bi0 := bi + bi = new(big.Int).Sub(big.NewInt(-1), bi0) + } + f, _ = bi.Float64() + return +} + +func (d *cborDecDriverBytes) decTagBigFloatAsFloat(decimal bool) (f float64) { + if nn := d.r.readn1(); nn != 82 { + halt.errorf("(%d) decoding decimal/big.Float: expected 2 numbers", nn) + } + exp := d.DecodeInt64() + mant := d.DecodeInt64() + if decimal { + + rf := readFloatResult{exp: int8(exp)} + if mant >= 0 { + rf.mantissa = uint64(mant) + } else { + rf.neg = true + rf.mantissa = uint64(-mant) + } + f, _ = parseFloat64_reader(rf) + + } else { + + bfm := new(big.Float).SetPrec(64).SetInt64(mant) + bf := new(big.Float).SetPrec(64).SetMantExp(bfm, int(exp)) + f, _ = bf.Float64() + } + return +} + +func (d *cborDecDriverBytes) DecodeNaked() { + if !d.bdRead { + d.readNextBd() + } + + n := d.d.naked() + var decodeFurther bool + switch d.bd >> 5 { + case cborMajorUint: + if d.h.SignedInteger { + n.v = valueTypeInt + n.i = d.DecodeInt64() + } else { + n.v = valueTypeUint + n.u = d.DecodeUint64() + } + case cborMajorNegInt: + n.v = valueTypeInt + n.i = d.DecodeInt64() + case cborMajorBytes: + d.d.fauxUnionReadRawBytes(d, false, d.h.RawToString) + case cborMajorString: + n.v = valueTypeString + n.s = d.d.detach2Str(d.DecodeStringAsBytes()) + case cborMajorArray: + n.v = valueTypeArray + decodeFurther = true + case cborMajorMap: + n.v = valueTypeMap + decodeFurther = true + case cborMajorTag: + n.v = valueTypeExt + n.u = d.decUint() + d.bdRead = false + n.l = nil + xx := d.h.getExtForTag(n.u) + if xx == nil { + switch n.u { + case 0, 1: + n.v = valueTypeTime + n.t = d.decodeTime(n.u) + case 2: + n.f = d.decTagBigIntAsFloat(false) + n.v = valueTypeFloat + case 3: + n.f = d.decTagBigIntAsFloat(true) + n.v = valueTypeFloat + case 4: + n.f = d.decTagBigFloatAsFloat(true) + n.v = valueTypeFloat + case 5: + n.f = d.decTagBigFloatAsFloat(false) + n.v = valueTypeFloat + case 55799: + d.DecodeNaked() + default: + if d.h.SkipUnexpectedTags { + d.DecodeNaked() + } + + } + return + } + + case cborMajorSimpleOrFloat: + switch d.bd { + case cborBdNil, cborBdUndefined: + n.v = valueTypeNil + case cborBdFalse: + n.v = valueTypeBool + n.b = false + case cborBdTrue: + n.v = valueTypeBool + n.b = true + case cborBdFloat16, cborBdFloat32, cborBdFloat64: + n.v = valueTypeFloat + n.f = d.DecodeFloat64() + default: + halt.errorf("decodeNaked: Unrecognized d.bd: 0x%x", d.bd) + } + default: + halt.errorf("decodeNaked: Unrecognized d.bd: 0x%x", d.bd) + } + if !decodeFurther { + d.bdRead = false + } +} + +func (d *cborDecDriverBytes) uintBytes() (v []byte, ui uint64) { + + switch vv := d.bd & 0x1f; vv { + case 0x18: + v = d.r.readx(1) + ui = uint64(v[0]) + case 0x19: + v = d.r.readx(2) + ui = uint64(bigenstd.Uint16(v)) + case 0x1a: + v = d.r.readx(4) + ui = uint64(bigenstd.Uint32(v)) + case 0x1b: + v = d.r.readx(8) + ui = uint64(bigenstd.Uint64(v)) + default: + if vv > 0x1b { + halt.errorf("invalid descriptor decoding uint: %x/%s", d.bd, cbordesc(d.bd)) + } + ui = uint64(vv) + } + return +} + +func (d *cborDecDriverBytes) nextValueBytes() (v []byte) { + if !d.bdRead { + d.readNextBd() + } + d.r.startRecording() + d.nextValueBytesBdReadR() + v = d.r.stopRecording() + d.bdRead = false + return +} + +func (d *cborDecDriverBytes) nextValueBytesBdReadR() { + + var ui uint64 + + switch d.bd >> 5 { + case cborMajorUint, cborMajorNegInt: + d.uintBytes() + case cborMajorString, cborMajorBytes: + if d.bd == cborBdIndefiniteBytes || d.bd == cborBdIndefiniteString { + for { + d.readNextBd() + if d.bd == cborBdBreak { + break + } + _, ui = d.uintBytes() + d.r.skip(uint(ui)) + } + } else { + _, ui = d.uintBytes() + d.r.skip(uint(ui)) + } + case cborMajorArray: + if d.bd == cborBdIndefiniteArray { + for { + d.readNextBd() + if d.bd == cborBdBreak { + break + } + d.nextValueBytesBdReadR() + } + } else { + _, ui = d.uintBytes() + for i := uint64(0); i < ui; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + } + } + case cborMajorMap: + if d.bd == cborBdIndefiniteMap { + for { + d.readNextBd() + if d.bd == cborBdBreak { + break + } + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() + } + } else { + _, ui = d.uintBytes() + for i := uint64(0); i < ui; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() + } + } + case cborMajorTag: + d.uintBytes() + d.readNextBd() + d.nextValueBytesBdReadR() + case cborMajorSimpleOrFloat: + switch d.bd { + case cborBdNil, cborBdUndefined, cborBdFalse, cborBdTrue: + case cborBdFloat16: + d.r.skip(2) + case cborBdFloat32: + d.r.skip(4) + case cborBdFloat64: + d.r.skip(8) + default: + halt.errorf("nextValueBytes: Unrecognized d.bd: 0x%x", d.bd) + } + default: + halt.errorf("nextValueBytes: Unrecognized d.bd: 0x%x", d.bd) + } + return +} + +func (d *cborDecDriverBytes) reset() { + d.bdAndBdread.reset() + +} + +func (d *cborEncDriverBytes) init(hh Handle, shared *encoderBase, enc encoderI) (fp interface{}) { + callMake(&d.w) + d.h = hh.(*CborHandle) + d.e = shared + if shared.bytes { + fp = cborFpEncBytes + } else { + fp = cborFpEncIO + } + + d.init2(enc) + return +} + +func (e *cborEncDriverBytes) writeBytesAsis(b []byte) { e.w.writeb(b) } + +func (e *cborEncDriverBytes) writerEnd() { e.w.end() } + +func (e *cborEncDriverBytes) resetOutBytes(out *[]byte) { + e.w.resetBytes(*out, out) +} + +func (e *cborEncDriverBytes) resetOutIO(out io.Writer) { + e.w.resetIO(out, e.h.WriterBufferSize, &e.e.blist) +} + +func (d *cborDecDriverBytes) init(hh Handle, shared *decoderBase, dec decoderI) (fp interface{}) { + callMake(&d.r) + d.h = hh.(*CborHandle) + d.d = shared + if shared.bytes { + fp = cborFpDecBytes + } else { + fp = cborFpDecIO + } + + d.init2(dec) + return +} + +func (d *cborDecDriverBytes) NumBytesRead() int { + return int(d.r.numread()) +} + +func (d *cborDecDriverBytes) resetInBytes(in []byte) { + d.r.resetBytes(in) +} + +func (d *cborDecDriverBytes) resetInIO(r io.Reader) { + d.r.resetIO(r, d.h.ReaderBufferSize, d.h.MaxInitLen, &d.d.blist) +} + +func (d *cborDecDriverBytes) descBd() string { + return sprintf("%v (%s)", d.bd, cbordesc(d.bd)) +} + +func (d *cborDecDriverBytes) DecodeFloat32() (f float32) { + return float32(chkOvf.Float32V(d.DecodeFloat64())) +} + +func (d *cborEncDriverBytes) init2(enc encoderI) { + d.enc = enc +} + +func (d *cborDecDriverBytes) init2(dec decoderI) { + d.dec = dec + +} + +type helperEncDriverCborIO struct{} +type encFnCborIO struct { + i encFnInfo + fe func(*encoderCborIO, *encFnInfo, reflect.Value) +} +type encRtidFnCborIO struct { + rtid uintptr + fn *encFnCborIO +} +type encoderCborIO struct { + dh helperEncDriverCborIO + fp *fastpathEsCborIO + e cborEncDriverIO + encoderBase +} +type helperDecDriverCborIO struct{} +type decFnCborIO struct { + i decFnInfo + fd func(*decoderCborIO, *decFnInfo, reflect.Value) +} +type decRtidFnCborIO struct { + rtid uintptr + fn *decFnCborIO +} +type decoderCborIO struct { + dh helperDecDriverCborIO + fp *fastpathDsCborIO + d cborDecDriverIO + decoderBase +} +type cborEncDriverIO struct { + noBuiltInTypes + encDriverNoState + encDriverNoopContainerWriter + encDriverContainerNoTrackerT + + h *CborHandle + e *encoderBase + w bufioEncWriter + enc encoderI + + b [40]byte +} +type cborDecDriverIO struct { + decDriverNoopContainerReader + + noBuiltInTypes + + h *CborHandle + d *decoderBase + r ioDecReader + dec decoderI + bdAndBdread +} + +func (e *encoderCborIO) rawExt(_ *encFnInfo, rv reflect.Value) { + if re := rv2i(rv).(*RawExt); re == nil { + e.e.EncodeNil() + } else { + e.e.EncodeRawExt(re) + } +} + +func (e *encoderCborIO) ext(f *encFnInfo, rv reflect.Value) { + e.e.EncodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (e *encoderCborIO) selferMarshal(_ *encFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecEncodeSelf(&Encoder{e}) +} + +func (e *encoderCborIO) binaryMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.BinaryMarshaler).MarshalBinary() + e.marshalRaw(bs, fnerr) +} + +func (e *encoderCborIO) textMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.TextMarshaler).MarshalText() + e.marshalUtf8(bs, fnerr) +} + +func (e *encoderCborIO) jsonMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(jsonMarshaler).MarshalJSON() + e.marshalAsis(bs, fnerr) +} + +func (e *encoderCborIO) raw(_ *encFnInfo, rv reflect.Value) { + e.rawBytes(rv2i(rv).(Raw)) +} + +func (e *encoderCborIO) encodeComplex64(v complex64) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat32(real(v)) +} + +func (e *encoderCborIO) encodeComplex128(v complex128) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat64(real(v)) +} + +func (e *encoderCborIO) kBool(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeBool(rvGetBool(rv)) +} + +func (e *encoderCborIO) kTime(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeTime(rvGetTime(rv)) +} + +func (e *encoderCborIO) kString(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeString(rvGetString(rv)) +} + +func (e *encoderCborIO) kFloat32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat32(rvGetFloat32(rv)) +} + +func (e *encoderCborIO) kFloat64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat64(rvGetFloat64(rv)) +} + +func (e *encoderCborIO) kComplex64(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex64(rvGetComplex64(rv)) +} + +func (e *encoderCborIO) kComplex128(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex128(rvGetComplex128(rv)) +} + +func (e *encoderCborIO) kInt(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt(rv))) +} + +func (e *encoderCborIO) kInt8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt8(rv))) +} + +func (e *encoderCborIO) kInt16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt16(rv))) +} + +func (e *encoderCborIO) kInt32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt32(rv))) +} + +func (e *encoderCborIO) kInt64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt64(rv))) +} + +func (e *encoderCborIO) kUint(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint(rv))) +} + +func (e *encoderCborIO) kUint8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint8(rv))) +} + +func (e *encoderCborIO) kUint16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint16(rv))) +} + +func (e *encoderCborIO) kUint32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint32(rv))) +} + +func (e *encoderCborIO) kUint64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint64(rv))) +} + +func (e *encoderCborIO) kUintptr(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUintptr(rv))) +} + +func (e *encoderCborIO) kSeqFn(rt reflect.Type) (fn *encFnCborIO) { + + if rt = baseRT(rt); rt.Kind() != reflect.Interface { + fn = e.fn(rt) + } + return +} + +func (e *encoderCborIO) kArrayWMbs(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(l) + e.mapStart(l >> 1) + + var fn *encFnCborIO + builtin := ti.tielem.flagEncBuiltin + if !builtin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerMapKey + e.e.WriteMapElemKey(true) + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(false) + } else { + e.mapElemValue() + } + } + e.c = 0 + e.e.WriteMapEnd() + +} + +func (e *encoderCborIO) kArrayW(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l <= 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(l) + + var fn *encFnCborIO + if !ti.tielem.flagEncBuiltin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerArrayElem + e.e.WriteArrayElem(true) + builtin := ti.tielem.flagEncBuiltin + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + e.c = containerArrayElem + e.e.WriteArrayElem(false) + } + + e.c = 0 + e.e.WriteArrayEnd() +} + +func (e *encoderCborIO) kChan(f *encFnInfo, rv reflect.Value) { + if f.ti.chandir&uint8(reflect.RecvDir) == 0 { + halt.errorStr("send-only channel cannot be encoded") + } + if !f.ti.mbs && uint8TypId == rt2id(f.ti.elem) { + e.kSliceBytesChan(rv) + return + } + rtslice := reflect.SliceOf(f.ti.elem) + rv = chanToSlice(rv, rtslice, e.h.ChanRecvTimeout) + ti := e.h.getTypeInfo(rt2id(rtslice), rtslice) + if f.ti.mbs { + e.kArrayWMbs(rv, ti, true) + } else { + e.kArrayW(rv, ti, true) + } +} + +func (e *encoderCborIO) kSlice(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, true) + } else if f.ti.rtid == uint8SliceTypId || uint8TypId == rt2id(f.ti.elem) { + + e.e.EncodeBytes(rvGetBytes(rv)) + } else { + e.kArrayW(rv, f.ti, true) + } +} + +func (e *encoderCborIO) kArray(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, false) + } else if handleBytesWithinKArray && uint8TypId == rt2id(f.ti.elem) { + e.e.EncodeStringBytesRaw(rvGetArrayBytes(rv, nil)) + } else { + e.kArrayW(rv, f.ti, false) + } +} + +func (e *encoderCborIO) kSliceBytesChan(rv reflect.Value) { + + bs0 := e.blist.peek(32, true) + bs := bs0 + + irv := rv2i(rv) + ch, ok := irv.(<-chan byte) + if !ok { + ch = irv.(chan byte) + } + +L1: + switch timeout := e.h.ChanRecvTimeout; { + case timeout == 0: + for { + select { + case b := <-ch: + bs = append(bs, b) + default: + break L1 + } + } + case timeout > 0: + tt := time.NewTimer(timeout) + for { + select { + case b := <-ch: + bs = append(bs, b) + case <-tt.C: + + break L1 + } + } + default: + for b := range ch { + bs = append(bs, b) + } + } + + e.e.EncodeBytes(bs) + e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.blist.put(bs0) + } +} + +func (e *encoderCborIO) kStructFieldKey(keyType valueType, encName string) { + + if keyType == valueTypeString { + e.e.EncodeString(encName) + } else if keyType == valueTypeInt { + e.e.EncodeInt(must.Int(strconv.ParseInt(encName, 10, 64))) + } else if keyType == valueTypeUint { + e.e.EncodeUint(must.Uint(strconv.ParseUint(encName, 10, 64))) + } else if keyType == valueTypeFloat { + e.e.EncodeFloat64(must.Float(strconv.ParseFloat(encName, 64))) + } else { + halt.errorStr2("invalid struct key type: ", keyType.String()) + } + +} + +func (e *encoderCborIO) kStructSimple(f *encFnInfo, rv reflect.Value) { + _ = e.e + tisfi := f.ti.sfi.source() + + chkCirRef := e.h.CheckCircularRef + var si *structFieldInfo + var j int + + if f.ti.toArray || e.h.StructToArray { + if len(tisfi) == 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } else { + if len(tisfi) == 0 { + e.e.WriteMapEmpty() + return + } + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + e.mapStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.EncodeStringNoEscape4Json(si.encName) + e.mapElemValue() + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteMapEnd() + } +} + +func (e *encoderCborIO) kStruct(f *encFnInfo, rv reflect.Value) { + _ = e.e + ti := f.ti + toMap := !(ti.toArray || e.h.StructToArray) + var mf map[string]interface{} + if ti.flagMissingFielder { + toMap = true + mf = rv2i(rv).(MissingFielder).CodecMissingFields() + } else if ti.flagMissingFielderPtr { + toMap = true + if rv.CanAddr() { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder).CodecMissingFields() + } else { + mf = rv2i(e.addrRV(rv, ti.rt, ti.ptr)).(MissingFielder).CodecMissingFields() + } + } + newlen := len(mf) + tisfi := ti.sfi.source() + newlen += len(tisfi) + + var fkvs = e.slist.get(newlen)[:newlen] + + recur := e.h.RecursiveEmptyCheck + chkCirRef := e.h.CheckCircularRef + + var xlen int + + var kv sfiRv + var j int + var sf encStructFieldObj + if toMap { + newlen = 0 + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + for _, si := range tisfi { + + if si.omitEmpty { + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyValue(kv.r, e.h.TypeInfos, recur) { + continue + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[newlen] = kv + newlen++ + } + + var mf2s []stringIntf + if len(mf) != 0 { + mf2s = make([]stringIntf, 0, len(mf)) + for k, v := range mf { + if k == "" { + continue + } + if ti.infoFieldOmitempty && isEmptyValue(reflect.ValueOf(v), e.h.TypeInfos, recur) { + continue + } + mf2s = append(mf2s, stringIntf{k, v}) + } + } + + xlen = newlen + len(mf2s) + if xlen == 0 { + e.e.WriteMapEmpty() + goto END + } + + e.mapStart(xlen) + + if len(mf2s) != 0 && e.h.Canonical { + mf2w := make([]encStructFieldObj, newlen+len(mf2s)) + for j = 0; j < newlen; j++ { + kv = fkvs[j] + mf2w[j] = encStructFieldObj{kv.v.encName, kv.r, nil, true, + !kv.v.encNameEscape4Json, kv.v.encBuiltin} + } + for _, v := range mf2s { + mf2w[j] = encStructFieldObj{v.v, reflect.Value{}, v.i, false, false, false} + j++ + } + sort.Sort((encStructFieldObjSlice)(mf2w)) + for j, sf = range mf2w { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && sf.noEsc4json { + e.e.EncodeStringNoEscape4Json(sf.key) + } else { + e.kStructFieldKey(ti.keyType, sf.key) + } + e.mapElemValue() + if sf.isRv { + if sf.builtin { + e.encodeIB(rv2i(baseRVRV(sf.rv))) + } else { + e.encodeValue(sf.rv, nil) + } + } else { + if !e.encodeBuiltin(sf.intf) { + e.encodeR(reflect.ValueOf(sf.intf)) + } + + } + } + } else { + keytyp := ti.keyType + for j = 0; j < newlen; j++ { + kv = fkvs[j] + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && !kv.v.encNameEscape4Json { + e.e.EncodeStringNoEscape4Json(kv.v.encName) + } else { + e.kStructFieldKey(keytyp, kv.v.encName) + } + e.mapElemValue() + if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + for _, v := range mf2s { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.kStructFieldKey(keytyp, v.v) + e.mapElemValue() + if !e.encodeBuiltin(v.i) { + e.encodeR(reflect.ValueOf(v.i)) + } + + j++ + } + } + + e.c = 0 + e.e.WriteMapEnd() + } else { + newlen = len(tisfi) + for i, si := range tisfi { + + if si.omitEmpty { + + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyContainerValue(kv.r, e.h.TypeInfos, recur) { + kv.r = reflect.Value{} + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[i] = kv + } + + if newlen == 0 { + e.e.WriteArrayEmpty() + goto END + } + + e.arrayStart(newlen) + for j = 0; j < newlen; j++ { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + kv = fkvs[j] + if !kv.r.IsValid() { + e.e.EncodeNil() + } else if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } + +END: + + e.slist.put(fkvs) +} + +func (e *encoderCborIO) kMap(f *encFnInfo, rv reflect.Value) { + _ = e.e + l := rvLenMap(rv) + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.mapStart(l) + + var keyFn, valFn *encFnCborIO + + ktypeKind := reflect.Kind(f.ti.keykind) + vtypeKind := reflect.Kind(f.ti.elemkind) + + rtval := f.ti.elem + rtvalkind := vtypeKind + for rtvalkind == reflect.Ptr { + rtval = rtval.Elem() + rtvalkind = rtval.Kind() + } + if rtvalkind != reflect.Interface { + valFn = e.fn(rtval) + } + + var rvv = mapAddrLoopvarRV(f.ti.elem, vtypeKind) + + rtkey := f.ti.key + var keyTypeIsString = stringTypId == rt2id(rtkey) + if keyTypeIsString { + keyFn = e.fn(rtkey) + } else { + for rtkey.Kind() == reflect.Ptr { + rtkey = rtkey.Elem() + } + if rtkey.Kind() != reflect.Interface { + keyFn = e.fn(rtkey) + } + } + + if e.h.Canonical { + e.kMapCanonical(f.ti, rv, rvv, keyFn, valFn) + e.c = 0 + e.e.WriteMapEnd() + return + } + + var rvk = mapAddrLoopvarRV(f.ti.key, ktypeKind) + + var it mapIter + mapRange(&it, rv, rvk, rvv, true) + + kbuiltin := f.ti.tikey.flagEncBuiltin + vbuiltin := f.ti.tielem.flagEncBuiltin + for j := 0; it.Next(); j++ { + rv = it.Key() + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if keyTypeIsString { + e.e.EncodeString(rvGetString(rv)) + } else if kbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(rv, keyFn) + } + e.mapElemValue() + rv = it.Value() + if vbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(it.Value(), valFn) + } + } + it.Done() + + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderCborIO) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valFn *encFnCborIO) { + _ = e.e + + rtkey := ti.key + rtkeydecl := rtkey.PkgPath() == "" && rtkey.Name() != "" + + mks := rv.MapKeys() + rtkeyKind := rtkey.Kind() + mparams := getMapReqParams(ti) + + switch rtkeyKind { + case reflect.Bool: + + if len(mks) == 2 && mks[0].Bool() { + mks[0], mks[1] = mks[1], mks[0] + } + for i := range mks { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeBool(mks[i].Bool()) + } else { + e.encodeValueNonNil(mks[i], keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mks[i], rvv, mparams), valFn) + } + case reflect.String: + mksv := make([]orderedRv[string], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rvGetString(k) + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeString(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr: + mksv := make([]orderedRv[uint64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Uint() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeUint(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + mksv := make([]orderedRv[int64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Int() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeInt(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float32: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat32(float32(mksv[i].v)) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float64: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat64(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + default: + if rtkey == timeTyp { + mksv := make([]timeRv, len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rv2i(k).(time.Time) + } + slices.SortFunc(mksv, cmpTimeRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeTime(mksv[i].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + break + } + + bs0 := e.blist.get(len(mks) * 16) + mksv := bs0 + mksbv := make([]bytesRv, len(mks)) + + sideEncode(e.hh, &e.h.sideEncPool, func(se encoderI) { + se.ResetBytes(&mksv) + for i, k := range mks { + v := &mksbv[i] + l := len(mksv) + se.setContainerState(containerMapKey) + se.encodeR(baseRVRV(k)) + se.atEndOfEncode() + se.writerEnd() + v.r = k + v.v = mksv[l:] + } + }) + + slices.SortFunc(mksbv, cmpBytesRv) + for j := range mksbv { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.writeBytesAsis(mksbv[j].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksbv[j].r, rvv, mparams), valFn) + } + e.blist.put(mksv) + if !byteSliceSameData(bs0, mksv) { + e.blist.put(bs0) + } + } +} + +func (e *encoderCborIO) init(h Handle) { + initHandle(h) + callMake(&e.e) + e.hh = h + e.h = h.getBasicHandle() + + e.err = errEncoderNotInitialized + + e.fp = e.e.init(h, &e.encoderBase, e).(*fastpathEsCborIO) + + if e.bytes { + e.rtidFn = &e.h.rtidFnsEncBytes + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtBytes + } else { + e.rtidFn = &e.h.rtidFnsEncIO + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtIO + } + + e.reset() +} + +func (e *encoderCborIO) reset() { + e.e.reset() + if e.ci != nil { + e.ci = e.ci[:0] + } + e.c = 0 + e.calls = 0 + e.seq = 0 + e.err = nil +} + +func (e *encoderCborIO) Encode(v interface{}) (err error) { + + defer panicValToErr(e, callRecoverSentinel, &e.err, &err, debugging) + e.mustEncode(v) + return +} + +func (e *encoderCborIO) MustEncode(v interface{}) { + defer panicValToErr(e, callRecoverSentinel, &e.err, nil, true) + e.mustEncode(v) + return +} + +func (e *encoderCborIO) mustEncode(v interface{}) { + halt.onerror(e.err) + if e.hh == nil { + halt.onerror(errNoFormatHandle) + } + + e.calls++ + if !e.encodeBuiltin(v) { + e.encodeR(reflect.ValueOf(v)) + } + + e.calls-- + if e.calls == 0 { + e.e.atEndOfEncode() + e.e.writerEnd() + } +} + +func (e *encoderCborIO) encodeI(iv interface{}) { + if !e.encodeBuiltin(iv) { + e.encodeR(reflect.ValueOf(iv)) + } +} + +func (e *encoderCborIO) encodeIB(iv interface{}) { + if !e.encodeBuiltin(iv) { + + halt.errorStr("[should not happen] invalid type passed to encodeBuiltin") + } +} + +func (e *encoderCborIO) encodeR(base reflect.Value) { + e.encodeValue(base, nil) +} + +func (e *encoderCborIO) encodeBuiltin(iv interface{}) (ok bool) { + ok = true + switch v := iv.(type) { + case nil: + e.e.EncodeNil() + + case Raw: + e.rawBytes(v) + case string: + e.e.EncodeString(v) + case bool: + e.e.EncodeBool(v) + case int: + e.e.EncodeInt(int64(v)) + case int8: + e.e.EncodeInt(int64(v)) + case int16: + e.e.EncodeInt(int64(v)) + case int32: + e.e.EncodeInt(int64(v)) + case int64: + e.e.EncodeInt(v) + case uint: + e.e.EncodeUint(uint64(v)) + case uint8: + e.e.EncodeUint(uint64(v)) + case uint16: + e.e.EncodeUint(uint64(v)) + case uint32: + e.e.EncodeUint(uint64(v)) + case uint64: + e.e.EncodeUint(v) + case uintptr: + e.e.EncodeUint(uint64(v)) + case float32: + e.e.EncodeFloat32(v) + case float64: + e.e.EncodeFloat64(v) + case complex64: + e.encodeComplex64(v) + case complex128: + e.encodeComplex128(v) + case time.Time: + e.e.EncodeTime(v) + case []byte: + e.e.EncodeBytes(v) + default: + + ok = !skipFastpathTypeSwitchInDirectCall && e.dh.fastpathEncodeTypeSwitch(iv, e) + } + return +} + +func (e *encoderCborIO) encodeValue(rv reflect.Value, fn *encFnCborIO) { + + var ciPushes int + + var rvp reflect.Value + var rvpValid bool + +RV: + switch rv.Kind() { + case reflect.Ptr: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = true + rvp = rv + rv = rv.Elem() + + if e.h.CheckCircularRef && e.ci.canPushElemKind(rv.Kind()) { + e.ci.push(rv2i(rvp)) + ciPushes++ + } + goto RV + case reflect.Interface: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = false + rvp = reflect.Value{} + rv = rv.Elem() + fn = nil + goto RV + case reflect.Map: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteMapEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Slice, reflect.Chan: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteArrayEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Invalid, reflect.Func: + e.e.EncodeNil() + goto END + } + + if fn == nil { + fn = e.fn(rv.Type()) + } + + if !fn.i.addrE { + + } else if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + fn.fe(e, &fn.i, rv) + +END: + if ciPushes > 0 { + e.ci.pop(ciPushes) + } +} + +func (e *encoderCborIO) encodeValueNonNil(rv reflect.Value, fn *encFnCborIO) { + + if fn.i.addrE { + if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + } + fn.fe(e, &fn.i, rv) +} + +func (e *encoderCborIO) encodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + e.encodeValue(baseRV(v), e.fn(t)) + } else { + e.encodeValue(baseRV(v), e.fnNoExt(t)) + } +} + +func (e *encoderCborIO) marshalUtf8(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.EncodeString(stringView(bs)) + } +} + +func (e *encoderCborIO) marshalAsis(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.writeBytesAsis(bs) + } +} + +func (e *encoderCborIO) marshalRaw(bs []byte, fnerr error) { + halt.onerror(fnerr) + e.e.EncodeBytes(bs) +} + +func (e *encoderCborIO) rawBytes(vv Raw) { + v := []byte(vv) + if !e.h.Raw { + halt.errorBytes("Raw values cannot be encoded: ", v) + } + e.e.writeBytesAsis(v) +} + +func (e *encoderCborIO) fn(t reflect.Type) *encFnCborIO { + return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false) +} + +func (e *encoderCborIO) fnNoExt(t reflect.Type) *encFnCborIO { + return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true) +} + +func (e *encoderCborIO) mapStart(length int) { + e.e.WriteMapStart(length) + e.c = containerMapStart +} + +func (e *encoderCborIO) mapElemValue() { + e.e.WriteMapElemValue() + e.c = containerMapValue +} + +func (e *encoderCborIO) arrayStart(length int) { + e.e.WriteArrayStart(length) + e.c = containerArrayStart +} + +func (e *encoderCborIO) writerEnd() { + e.e.writerEnd() +} + +func (e *encoderCborIO) atEndOfEncode() { + e.e.atEndOfEncode() +} + +func (e *encoderCborIO) Reset(w io.Writer) { + if e.bytes { + halt.onerror(errEncNoResetBytesWithWriter) + } + e.reset() + if w == nil { + w = io.Discard + } + e.e.resetOutIO(w) +} + +func (e *encoderCborIO) ResetBytes(out *[]byte) { + if !e.bytes { + halt.onerror(errEncNoResetWriterWithBytes) + } + e.resetBytes(out) +} + +func (e *encoderCborIO) resetBytes(out *[]byte) { + e.reset() + if out == nil { + out = &bytesEncAppenderDefOut + } + e.e.resetOutBytes(out) +} + +func (helperEncDriverCborIO) newEncoderBytes(out *[]byte, h Handle) *encoderCborIO { + var c1 encoderCborIO + c1.bytes = true + c1.init(h) + c1.ResetBytes(out) + return &c1 +} + +func (helperEncDriverCborIO) newEncoderIO(out io.Writer, h Handle) *encoderCborIO { + var c1 encoderCborIO + c1.bytes = false + c1.init(h) + c1.Reset(out) + return &c1 +} + +func (helperEncDriverCborIO) encFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathEsCborIO) (f *fastpathECborIO, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperEncDriverCborIO) encFindRtidFn(s []encRtidFnCborIO, rtid uintptr) (i uint, fn *encFnCborIO) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperEncDriverCborIO) encFromRtidFnSlice(fns *atomicRtidFnSlice) (s []encRtidFnCborIO) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]encRtidFnCborIO](v)) + } + return +} + +func (dh helperEncDriverCborIO) encFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, + x *BasicHandle, fp *fastpathEsCborIO, checkExt bool) (fn *encFnCborIO) { + return dh.encFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperEncDriverCborIO) encFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsCborIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnCborIO) { + rtid := rt2id(rt) + var sp []encRtidFnCborIO = dh.encFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.encFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.encFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperEncDriverCborIO) encFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsCborIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnCborIO) { + + fn = dh.encFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []encRtidFnCborIO + mu.Lock() + sp = dh.encFromRtidFnSlice(fns) + + if sp == nil { + sp = []encRtidFnCborIO{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.encFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]encRtidFnCborIO, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = encRtidFnCborIO{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperEncDriverCborIO) encFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathEsCborIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnCborIO) { + fn = new(encFnCborIO) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + if rtid == timeTypId && timeBuiltin { + fn.fe = (*encoderCborIO).kTime + } else if rtid == rawTypId { + fn.fe = (*encoderCborIO).raw + } else if rtid == rawExtTypId { + fn.fe = (*encoderCborIO).rawExt + fi.addrE = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fe = (*encoderCborIO).ext + if rk == reflect.Struct || rk == reflect.Array { + fi.addrE = true + } + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fe = (*encoderCborIO).selferMarshal + fi.addrE = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fe = (*encoderCborIO).binaryMarshal + fi.addrE = ti.flagBinaryMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fe = (*encoderCborIO).jsonMarshal + fi.addrE = ti.flagJsonMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fe = (*encoderCborIO).textMarshal + fi.addrE = ti.flagTextMarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fe = fp[idx].encfn + } + } else { + + xfe, xrt := dh.encFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf := xfe.encfn + fn.fe = func(e *encoderCborIO, xf *encFnInfo, xrv reflect.Value) { + xfnf(e, xf, rvConvert(xrv, xrt)) + } + } + } + } + if fn.fe == nil { + switch rk { + case reflect.Bool: + fn.fe = (*encoderCborIO).kBool + case reflect.String: + + fn.fe = (*encoderCborIO).kString + case reflect.Int: + fn.fe = (*encoderCborIO).kInt + case reflect.Int8: + fn.fe = (*encoderCborIO).kInt8 + case reflect.Int16: + fn.fe = (*encoderCborIO).kInt16 + case reflect.Int32: + fn.fe = (*encoderCborIO).kInt32 + case reflect.Int64: + fn.fe = (*encoderCborIO).kInt64 + case reflect.Uint: + fn.fe = (*encoderCborIO).kUint + case reflect.Uint8: + fn.fe = (*encoderCborIO).kUint8 + case reflect.Uint16: + fn.fe = (*encoderCborIO).kUint16 + case reflect.Uint32: + fn.fe = (*encoderCborIO).kUint32 + case reflect.Uint64: + fn.fe = (*encoderCborIO).kUint64 + case reflect.Uintptr: + fn.fe = (*encoderCborIO).kUintptr + case reflect.Float32: + fn.fe = (*encoderCborIO).kFloat32 + case reflect.Float64: + fn.fe = (*encoderCborIO).kFloat64 + case reflect.Complex64: + fn.fe = (*encoderCborIO).kComplex64 + case reflect.Complex128: + fn.fe = (*encoderCborIO).kComplex128 + case reflect.Chan: + fn.fe = (*encoderCborIO).kChan + case reflect.Slice: + fn.fe = (*encoderCborIO).kSlice + case reflect.Array: + fn.fe = (*encoderCborIO).kArray + case reflect.Struct: + if ti.simple { + fn.fe = (*encoderCborIO).kStructSimple + } else { + fn.fe = (*encoderCborIO).kStruct + } + case reflect.Map: + fn.fe = (*encoderCborIO).kMap + case reflect.Interface: + + fn.fe = (*encoderCborIO).kErr + default: + + fn.fe = (*encoderCborIO).kErr + } + } + } + return +} +func (d *decoderCborIO) rawExt(f *decFnInfo, rv reflect.Value) { + d.d.DecodeRawExt(rv2i(rv).(*RawExt)) +} + +func (d *decoderCborIO) ext(f *decFnInfo, rv reflect.Value) { + d.d.DecodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (d *decoderCborIO) selferUnmarshal(_ *decFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecDecodeSelf(&Decoder{d}) +} + +func (d *decoderCborIO) binaryUnmarshal(_ *decFnInfo, rv reflect.Value) { + bm := rv2i(rv).(encoding.BinaryUnmarshaler) + xbs, _ := d.d.DecodeBytes() + fnerr := bm.UnmarshalBinary(xbs) + halt.onerror(fnerr) +} + +func (d *decoderCborIO) textUnmarshal(_ *decFnInfo, rv reflect.Value) { + tm := rv2i(rv).(encoding.TextUnmarshaler) + fnerr := tm.UnmarshalText(bytesOKs(d.d.DecodeStringAsBytes())) + halt.onerror(fnerr) +} + +func (d *decoderCborIO) jsonUnmarshal(_ *decFnInfo, rv reflect.Value) { + d.jsonUnmarshalV(rv2i(rv).(jsonUnmarshaler)) +} + +func (d *decoderCborIO) jsonUnmarshalV(tm jsonUnmarshaler) { + + halt.onerror(tm.UnmarshalJSON(d.d.nextValueBytes())) +} + +func (d *decoderCborIO) kErr(_ *decFnInfo, rv reflect.Value) { + halt.errorf("unsupported decoding kind: %s, for %#v", rv.Kind(), rv) + +} + +func (d *decoderCborIO) raw(_ *decFnInfo, rv reflect.Value) { + rvSetBytes(rv, d.rawBytes()) +} + +func (d *decoderCborIO) kString(_ *decFnInfo, rv reflect.Value) { + rvSetString(rv, d.detach2Str(d.d.DecodeStringAsBytes())) +} + +func (d *decoderCborIO) kBool(_ *decFnInfo, rv reflect.Value) { + rvSetBool(rv, d.d.DecodeBool()) +} + +func (d *decoderCborIO) kTime(_ *decFnInfo, rv reflect.Value) { + rvSetTime(rv, d.d.DecodeTime()) +} + +func (d *decoderCborIO) kFloat32(_ *decFnInfo, rv reflect.Value) { + rvSetFloat32(rv, d.d.DecodeFloat32()) +} + +func (d *decoderCborIO) kFloat64(_ *decFnInfo, rv reflect.Value) { + rvSetFloat64(rv, d.d.DecodeFloat64()) +} + +func (d *decoderCborIO) kComplex64(_ *decFnInfo, rv reflect.Value) { + rvSetComplex64(rv, complex(d.d.DecodeFloat32(), 0)) +} + +func (d *decoderCborIO) kComplex128(_ *decFnInfo, rv reflect.Value) { + rvSetComplex128(rv, complex(d.d.DecodeFloat64(), 0)) +} + +func (d *decoderCborIO) kInt(_ *decFnInfo, rv reflect.Value) { + rvSetInt(rv, int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))) +} + +func (d *decoderCborIO) kInt8(_ *decFnInfo, rv reflect.Value) { + rvSetInt8(rv, int8(chkOvf.IntV(d.d.DecodeInt64(), 8))) +} + +func (d *decoderCborIO) kInt16(_ *decFnInfo, rv reflect.Value) { + rvSetInt16(rv, int16(chkOvf.IntV(d.d.DecodeInt64(), 16))) +} + +func (d *decoderCborIO) kInt32(_ *decFnInfo, rv reflect.Value) { + rvSetInt32(rv, int32(chkOvf.IntV(d.d.DecodeInt64(), 32))) +} + +func (d *decoderCborIO) kInt64(_ *decFnInfo, rv reflect.Value) { + rvSetInt64(rv, d.d.DecodeInt64()) +} + +func (d *decoderCborIO) kUint(_ *decFnInfo, rv reflect.Value) { + rvSetUint(rv, uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderCborIO) kUintptr(_ *decFnInfo, rv reflect.Value) { + rvSetUintptr(rv, uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderCborIO) kUint8(_ *decFnInfo, rv reflect.Value) { + rvSetUint8(rv, uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))) +} + +func (d *decoderCborIO) kUint16(_ *decFnInfo, rv reflect.Value) { + rvSetUint16(rv, uint16(chkOvf.UintV(d.d.DecodeUint64(), 16))) +} + +func (d *decoderCborIO) kUint32(_ *decFnInfo, rv reflect.Value) { + rvSetUint32(rv, uint32(chkOvf.UintV(d.d.DecodeUint64(), 32))) +} + +func (d *decoderCborIO) kUint64(_ *decFnInfo, rv reflect.Value) { + rvSetUint64(rv, d.d.DecodeUint64()) +} + +func (d *decoderCborIO) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) { + + n := d.naked() + d.d.DecodeNaked() + + if decFailNonEmptyIntf && f.ti.numMeth > 0 { + halt.errorf("cannot decode non-nil codec value into nil %v (%v methods)", f.ti.rt, f.ti.numMeth) + } + + switch n.v { + case valueTypeMap: + mtid := d.mtid + if mtid == 0 { + if d.jsms { + mtid = mapStrIntfTypId + } else { + mtid = mapIntfIntfTypId + } + } + if mtid == mapStrIntfTypId { + var v2 map[string]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if mtid == mapIntfIntfTypId { + var v2 map[interface{}]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.mtr { + rvn = reflect.New(d.h.MapType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + + rvn = rvZeroAddrK(d.h.MapType, reflect.Map) + d.decodeValue(rvn, nil) + } + case valueTypeArray: + if d.stid == 0 || d.stid == intfSliceTypId { + var v2 []interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.str { + rvn = reflect.New(d.h.SliceType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + rvn = rvZeroAddrK(d.h.SliceType, reflect.Slice) + d.decodeValue(rvn, nil) + } + if d.h.PreferArrayOverSlice { + rvn = rvGetArray4Slice(rvn) + } + case valueTypeExt: + tag, bytes := n.u, n.l + bfn := d.h.getExtForTag(tag) + var re = RawExt{Tag: tag} + if bytes == nil { + + if bfn == nil { + d.decode(&re.Value) + rvn = rv4iptr(&re).Elem() + } else if bfn.ext == SelfExt { + rvn = rvZeroAddrK(bfn.rt, bfn.rt.Kind()) + d.decodeValue(rvn, d.fnNoExt(bfn.rt)) + } else { + rvn = reflect.New(bfn.rt) + d.interfaceExtConvertAndDecode(rv2i(rvn), bfn.ext) + rvn = rvn.Elem() + } + } else { + + if bfn == nil { + re.setData(bytes, false) + rvn = rv4iptr(&re).Elem() + } else { + rvn = reflect.New(bfn.rt) + if bfn.ext == SelfExt { + sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) }) + } else { + bfn.ext.ReadExt(rv2i(rvn), bytes) + } + rvn = rvn.Elem() + } + } + + if d.h.PreferPointerForStructOrArray && rvn.CanAddr() { + if rk := rvn.Kind(); rk == reflect.Array || rk == reflect.Struct { + rvn = rvn.Addr() + } + } + case valueTypeNil: + + case valueTypeInt: + rvn = n.ri() + case valueTypeUint: + rvn = n.ru() + case valueTypeFloat: + rvn = n.rf() + case valueTypeBool: + rvn = n.rb() + case valueTypeString, valueTypeSymbol: + rvn = n.rs() + case valueTypeBytes: + rvn = n.rl() + case valueTypeTime: + rvn = n.rt() + default: + halt.errorStr2("kInterfaceNaked: unexpected valueType: ", n.v.String()) + } + return +} + +func (d *decoderCborIO) kInterface(f *decFnInfo, rv reflect.Value) { + + isnilrv := rvIsNil(rv) + + var rvn reflect.Value + + if d.h.InterfaceReset { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } else if !isnilrv { + decSetNonNilRV2Zero4Intf(rv) + } + return + } + } else if isnilrv { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } + return + } + } else { + + rvn = rv.Elem() + } + + canDecode, _ := isDecodeable(rvn) + + if !canDecode { + rvn2 := d.oneShotAddrRV(rvn.Type(), rvn.Kind()) + rvSetDirect(rvn2, rvn) + rvn = rvn2 + } + + d.decodeValue(rvn, nil) + rvSetIntf(rv, rvn) +} + +func (d *decoderCborIO) kStructField(si *structFieldInfo, rv reflect.Value) { + if d.d.TryNil() { + rv = si.fieldNoAlloc(rv, true) + if rv.IsValid() { + decSetNonNilRV2Zero(rv) + } + } else if si.decBuiltin { + rv = rvAddr(si.fieldAlloc(rv), si.ptrTyp) + d.decode(rv2i(rv)) + } else { + fn := d.fn(si.baseTyp) + rv = si.fieldAlloc(rv) + if fn.i.addrD { + rv = rvAddr(rv, si.ptrTyp) + } + fn.fd(d, &fn.i, rv) + } +} + +func (d *decoderCborIO) kStructSimple(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var rvkencname []byte + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderCborIO) kStruct(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + var mf MissingFielder + if ti.flagMissingFielder { + mf = rv2i(rv).(MissingFielder) + } else if ti.flagMissingFielderPtr { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder) + } + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var name2 []byte + var rvkencname []byte + tkt := ti.keyType + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + + if tkt == valueTypeString { + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + } else if tkt == valueTypeInt { + rvkencname = strconv.AppendInt(d.b[:0], d.d.DecodeInt64(), 10) + } else if tkt == valueTypeUint { + rvkencname = strconv.AppendUint(d.b[:0], d.d.DecodeUint64(), 10) + } else if tkt == valueTypeFloat { + rvkencname = strconv.AppendFloat(d.b[:0], d.d.DecodeFloat64(), 'f', -1, 64) + } else { + halt.errorStr2("invalid struct key type: ", ti.keyType.String()) + } + + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else if mf != nil { + + name2 = append(name2[:0], rvkencname...) + var f interface{} + d.decode(&f) + if !mf.CodecMissingField(name2, f) && d.h.ErrorIfNoField { + halt.errorStr2("no matching struct field when decoding stream map with key: ", stringView(name2)) + } + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderCborIO) kSlice(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + rvCanset := rv.CanSet() + + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + rvbs := rvGetBytes(rv) + if rvCanset { + bs2, bst := d.decodeBytesInto(rvbs, false) + if bst != dBytesIntoParamOut { + rvSetBytes(rv, bs2) + } + } else { + + d.decodeBytesInto(rvbs[:len(rvbs):len(rvbs)], true) + } + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset { + if rvIsNil(rv) { + rvSetDirect(rv, rvSliceZeroCap(ti.rt)) + } else { + rvSetSliceLen(rv, 0) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem0Mut := !scalarBitset.isset(ti.elemkind) + rtelem := ti.elem + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnCborIO + + var rvChanged bool + + var rv0 = rv + var rv9 reflect.Value + + rvlen := rvLenSlice(rv) + rvcap := rvCapSlice(rv) + maxInitLen := d.maxInitLen() + hasLen := containerLenS >= 0 + if hasLen { + if containerLenS > rvcap { + oldRvlenGtZero := rvlen > 0 + rvlen1 := int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + if rvlen1 == rvlen { + } else if rvlen1 <= rvcap { + if rvCanset { + rvlen = rvlen1 + rvSetSliceLen(rv, rvlen) + } + } else if rvCanset { + rvlen = rvlen1 + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + if rvChanged && oldRvlenGtZero && rtelem0Mut { + rvCopySlice(rv, rv0, rtelem) + } + } else if containerLenS != rvlen { + if rvCanset { + rvlen = containerLenS + rvSetSliceLen(rv, rvlen) + } + } + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } + + var j int + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if rvCanset { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + + if rvlen < rvcap { + rvlen = rvcap + if rvCanset { + rvSetSliceLen(rv, rvlen) + } else if rvChanged { + rv = rvSlice(rv, rvlen) + } else { + halt.onerror(errExpandSliceCannotChange) + } + } else { + if !(rvCanset || rvChanged) { + halt.onerror(errExpandSliceCannotChange) + } + rv, rvcap, rvCanset = rvGrowSlice(rv, f.ti, rvcap, 1) + + rvlen = rvcap + rvChanged = !rvCanset + } + } + + rv9 = rvArrayIndex(rv, j, f.ti, true) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if j < rvlen { + if rvCanset { + rvSetSliceLen(rv, j) + } else if rvChanged { + rv = rvSlice(rv, j) + } + + } else if j == 0 && rvIsNil(rv) { + if rvCanset { + rv = rvSliceZeroCap(ti.rt) + rvCanset = false + rvChanged = true + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } +} + +func (d *decoderCborIO) kArray(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + ctyp := d.d.ContainerType() + if handleBytesWithinKArray && (ctyp == valueTypeBytes || ctyp == valueTypeString) { + + if ti.elemkind != uint8(reflect.Uint8) { + halt.errorf("bytes/string in stream can decode into array of bytes, but not %v", ti.rt) + } + rvbs := rvGetArrayBytes(rv, nil) + d.decodeBytesInto(rvbs, true) + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var rv9 reflect.Value + + rvlen := rv.Len() + hasLen := containerLenS >= 0 + if hasLen && containerLenS > rvlen { + halt.errorf("cannot decode into array with length: %v, less than container length: %v", any(rvlen), any(containerLenS)) + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + var fn *decFnCborIO + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } else { + fn = d.fn(rtelem) + } + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + d.arrayCannotExpand(rvlen, j+1) + d.swallow() + continue + } + + rv9 = rvArrayIndex(rv, j, f.ti, false) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderCborIO) kChan(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + if ti.chandir&uint8(reflect.SendDir) == 0 { + halt.errorStr("receive-only channel cannot be decoded") + } + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + bs2, _ := d.d.DecodeBytes() + irv := rv2i(rv) + ch, ok := irv.(chan<- byte) + if !ok { + ch = irv.(chan byte) + } + for _, b := range bs2 { + ch <- b + } + return + } + + var rvCanset = rv.CanSet() + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset && rvIsNil(rv) { + rvSetDirect(rv, reflect.MakeChan(ti.rt, 0)) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + useTransient := decUseTransient && ti.elemkind != byte(reflect.Ptr) && ti.tielem.flagCanTransient + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnCborIO + + var rvChanged bool + var rv0 = rv + var rv9 reflect.Value + + var rvlen int + hasLen := containerLenS >= 0 + maxInitLen := d.maxInitLen() + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if hasLen { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + } else { + rvlen = decDefChanCap + } + if rvCanset { + rv = reflect.MakeChan(ti.rt, rvlen) + rvChanged = true + } else { + halt.errorStr("cannot decode into non-settable chan") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if rv9.IsValid() { + rvSetZero(rv9) + } else if useTransient { + rv9 = d.perType.TransientAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } else { + rv9 = rvZeroAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } + if !d.d.TryNil() { + d.decodeValueNoCheckNil(rv9, fn) + } + rv.Send(rv9) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } + +} + +func (d *decoderCborIO) kMap(f *decFnInfo, rv reflect.Value) { + _ = d.d + containerLen := d.mapStart(d.d.ReadMapStart()) + ti := f.ti + if rvIsNil(rv) { + rvlen := int(decInferLen(containerLen, d.maxInitLen(), uint(ti.keysize+ti.elemsize))) + rvSetDirect(rv, makeMapReflect(ti.rt, rvlen)) + } + + if containerLen == 0 { + d.mapEnd() + return + } + + ktype, vtype := ti.key, ti.elem + ktypeId := rt2id(ktype) + vtypeKind := reflect.Kind(ti.elemkind) + ktypeKind := reflect.Kind(ti.keykind) + mparams := getMapReqParams(ti) + + vtypePtr := vtypeKind == reflect.Ptr + ktypePtr := ktypeKind == reflect.Ptr + + vTransient := decUseTransient && !vtypePtr && ti.tielem.flagCanTransient + + kTransient := vTransient && !ktypePtr && ti.tikey.flagCanTransient + + var vtypeElem reflect.Type + + var keyFn, valFn *decFnCborIO + var ktypeLo, vtypeLo = ktype, vtype + + if ktypeKind == reflect.Ptr { + for ktypeLo = ktype.Elem(); ktypeLo.Kind() == reflect.Ptr; ktypeLo = ktypeLo.Elem() { + } + } + + if vtypePtr { + vtypeElem = vtype.Elem() + for vtypeLo = vtypeElem; vtypeLo.Kind() == reflect.Ptr; vtypeLo = vtypeLo.Elem() { + } + } + + rvkMut := !scalarBitset.isset(ti.keykind) + rvvMut := !scalarBitset.isset(ti.elemkind) + rvvCanNil := isnilBitset.isset(ti.elemkind) + + var rvk, rvkn, rvv, rvvn, rvva, rvvz reflect.Value + + var doMapGet, doMapSet bool + + if !d.h.MapValueReset { + if rvvMut && (vtypeKind != reflect.Interface || !d.h.InterfaceReset) { + doMapGet = true + rvva = mapAddrLoopvarRV(vtype, vtypeKind) + } + } + + ktypeIsString := ktypeId == stringTypId + ktypeIsIntf := ktypeId == intfTypId + hasLen := containerLen >= 0 + + var kstr2bs []byte + var kstr string + + var mapKeyStringSharesBytesBuf bool + var att dBytesAttachState + + var vElem, kElem reflect.Type + kbuiltin := ti.tikey.flagDecBuiltin && ti.keykind != uint8(reflect.Slice) + vbuiltin := ti.tielem.flagDecBuiltin + if kbuiltin && ktypePtr { + kElem = ti.key.Elem() + } + if vbuiltin && vtypePtr { + vElem = ti.elem.Elem() + } + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + mapKeyStringSharesBytesBuf = false + kstr = "" + if j == 0 { + + if kTransient { + rvk = d.perType.TransientAddr2K(ktype, ktypeKind) + } else { + rvk = rvZeroAddrK(ktype, ktypeKind) + } + if !rvkMut { + rvkn = rvk + } + if !rvvMut { + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + } + if !ktypeIsString && keyFn == nil { + keyFn = d.fn(ktypeLo) + } + if valFn == nil { + valFn = d.fn(vtypeLo) + } + } else if rvkMut { + rvSetZero(rvk) + } else { + rvk = rvkn + } + + d.mapElemKey(j == 0) + + if d.d.TryNil() { + rvSetZero(rvk) + } else if ktypeIsString { + kstr2bs, att = d.d.DecodeStringAsBytes() + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, att) + rvSetString(rvk, kstr) + } else { + if kbuiltin { + if ktypePtr { + if rvIsNil(rvk) { + rvSetDirect(rvk, reflect.New(kElem)) + } + d.decode(rv2i(rvk)) + } else { + d.decode(rv2i(rvAddr(rvk, ti.tikey.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvk, keyFn) + } + + if ktypeIsIntf { + if rvk2 := rvk.Elem(); rvk2.IsValid() && rvk2.Type() == uint8SliceTyp { + kstr2bs = rvGetBytes(rvk2) + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, dBytesAttachView) + rvSetIntf(rvk, rv4istr(kstr)) + } + + } + } + + if mapKeyStringSharesBytesBuf && d.bufio { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + mapKeyStringSharesBytesBuf = false + } + + d.mapElemValue() + + if d.d.TryNil() { + if mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + + if !rvvz.IsValid() { + rvvz = rvZeroK(vtype, vtypeKind) + } + mapSet(rv, rvk, rvvz, mparams) + continue + } + + doMapSet = true + + if !rvvMut { + rvv = rvvn + } else if !doMapGet { + goto NEW_RVV + } else { + rvv = mapGet(rv, rvk, rvva, mparams) + if !rvv.IsValid() || (rvvCanNil && rvIsNil(rvv)) { + goto NEW_RVV + } + switch vtypeKind { + case reflect.Ptr, reflect.Map: + doMapSet = false + case reflect.Interface: + + rvvn = rvv.Elem() + if k := rvvn.Kind(); (k == reflect.Ptr || k == reflect.Map) && !rvIsNil(rvvn) { + d.decodeValueNoCheckNil(rvvn, nil) + continue + } + + rvvn = rvZeroAddrK(vtype, vtypeKind) + rvSetIntf(rvvn, rvv) + rvv = rvvn + default: + + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + rvSetDirect(rvvn, rvv) + rvv = rvvn + } + } + goto DECODE_VALUE_NO_CHECK_NIL + + NEW_RVV: + if vtypePtr { + rvv = reflect.New(vtypeElem) + } else if vTransient { + rvv = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvv = rvZeroAddrK(vtype, vtypeKind) + } + + DECODE_VALUE_NO_CHECK_NIL: + if doMapSet && mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + if vbuiltin { + if vtypePtr { + if rvIsNil(rvv) { + rvSetDirect(rvv, reflect.New(vElem)) + } + d.decode(rv2i(rvv)) + } else { + d.decode(rv2i(rvAddr(rvv, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvv, valFn) + } + if doMapSet { + mapSet(rv, rvk, rvv, mparams) + } + } + + d.mapEnd() +} + +func (d *decoderCborIO) init(h Handle) { + initHandle(h) + callMake(&d.d) + d.hh = h + d.h = h.getBasicHandle() + + d.err = errDecoderNotInitialized + + if d.h.InternString && d.is == nil { + d.is.init() + } + + d.fp = d.d.init(h, &d.decoderBase, d).(*fastpathDsCborIO) + + if d.bytes { + d.rtidFn = &d.h.rtidFnsDecBytes + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtBytes + } else { + d.bufio = d.h.ReaderBufferSize > 0 + d.rtidFn = &d.h.rtidFnsDecIO + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtIO + } + + d.reset() + +} + +func (d *decoderCborIO) reset() { + d.d.reset() + d.err = nil + d.c = 0 + d.depth = 0 + d.calls = 0 + + d.maxdepth = decDefMaxDepth + if d.h.MaxDepth > 0 { + d.maxdepth = d.h.MaxDepth + } + d.mtid = 0 + d.stid = 0 + d.mtr = false + d.str = false + if d.h.MapType != nil { + d.mtid = rt2id(d.h.MapType) + _, d.mtr = fastpathAvIndex(d.mtid) + } + if d.h.SliceType != nil { + d.stid = rt2id(d.h.SliceType) + _, d.str = fastpathAvIndex(d.stid) + } +} + +func (d *decoderCborIO) Reset(r io.Reader) { + if d.bytes { + halt.onerror(errDecNoResetBytesWithReader) + } + d.reset() + if r == nil { + r = &eofReader + } + d.d.resetInIO(r) +} + +func (d *decoderCborIO) ResetBytes(in []byte) { + if !d.bytes { + halt.onerror(errDecNoResetReaderWithBytes) + } + d.resetBytes(in) +} + +func (d *decoderCborIO) resetBytes(in []byte) { + d.reset() + if in == nil { + in = zeroByteSlice + } + d.d.resetInBytes(in) +} + +func (d *decoderCborIO) ResetString(s string) { + d.ResetBytes(bytesView(s)) +} + +func (d *decoderCborIO) Decode(v interface{}) (err error) { + + defer panicValToErr(d, callRecoverSentinel, &d.err, &err, debugging) + d.mustDecode(v) + return +} + +func (d *decoderCborIO) MustDecode(v interface{}) { + defer panicValToErr(d, callRecoverSentinel, &d.err, nil, true) + d.mustDecode(v) + return +} + +func (d *decoderCborIO) mustDecode(v interface{}) { + halt.onerror(d.err) + if d.hh == nil { + halt.onerror(errNoFormatHandle) + } + + d.calls++ + d.decode(v) + d.calls-- +} + +func (d *decoderCborIO) Release() {} + +func (d *decoderCborIO) swallow() { + d.d.nextValueBytes() +} + +func (d *decoderCborIO) nextValueBytes() []byte { + return d.d.nextValueBytes() +} + +func (d *decoderCborIO) decode(iv interface{}) { + _ = d.d + + rv, ok := isNil(iv, true) + if ok { + halt.onerror(errCannotDecodeIntoNil) + } + + switch v := iv.(type) { + + case *string: + *v = d.detach2Str(d.d.DecodeStringAsBytes()) + case *bool: + *v = d.d.DecodeBool() + case *int: + *v = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + case *int8: + *v = int8(chkOvf.IntV(d.d.DecodeInt64(), 8)) + case *int16: + *v = int16(chkOvf.IntV(d.d.DecodeInt64(), 16)) + case *int32: + *v = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + case *int64: + *v = d.d.DecodeInt64() + case *uint: + *v = uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *uint8: + *v = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + case *uint16: + *v = uint16(chkOvf.UintV(d.d.DecodeUint64(), 16)) + case *uint32: + *v = uint32(chkOvf.UintV(d.d.DecodeUint64(), 32)) + case *uint64: + *v = d.d.DecodeUint64() + case *uintptr: + *v = uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *float32: + *v = d.d.DecodeFloat32() + case *float64: + *v = d.d.DecodeFloat64() + case *complex64: + *v = complex(d.d.DecodeFloat32(), 0) + case *complex128: + *v = complex(d.d.DecodeFloat64(), 0) + case *[]byte: + *v, _ = d.decodeBytesInto(*v, false) + case []byte: + + d.decodeBytesInto(v[:len(v):len(v)], true) + case *time.Time: + *v = d.d.DecodeTime() + case *Raw: + *v = d.rawBytes() + + case *interface{}: + d.decodeValue(rv4iptr(v), nil) + + case reflect.Value: + if ok, _ = isDecodeable(v); !ok { + d.haltAsNotDecodeable(v) + } + d.decodeValue(v, nil) + + default: + + if skipFastpathTypeSwitchInDirectCall || !d.dh.fastpathDecodeTypeSwitch(iv, d) { + if !rv.IsValid() { + rv = reflect.ValueOf(iv) + } + if ok, _ = isDecodeable(rv); !ok { + d.haltAsNotDecodeable(rv) + } + d.decodeValue(rv, nil) + } + } +} + +func (d *decoderCborIO) decodeValue(rv reflect.Value, fn *decFnCborIO) { + if d.d.TryNil() { + decSetNonNilRV2Zero(rv) + } else { + d.decodeValueNoCheckNil(rv, fn) + } +} + +func (d *decoderCborIO) decodeValueNoCheckNil(rv reflect.Value, fn *decFnCborIO) { + + var rvp reflect.Value + var rvpValid bool +PTR: + if rv.Kind() == reflect.Ptr { + rvpValid = true + if rvIsNil(rv) { + rvSetDirect(rv, reflect.New(rv.Type().Elem())) + } + rvp = rv + rv = rv.Elem() + goto PTR + } + + if fn == nil { + fn = d.fn(rv.Type()) + } + if fn.i.addrD { + if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else if fn.i.addrDf { + halt.errorStr("cannot decode into a non-pointer value") + } + } + fn.fd(d, &fn.i, rv) +} + +func (d *decoderCborIO) decodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + d.decodeValue(baseRV(v), d.fn(t)) + } else { + d.decodeValue(baseRV(v), d.fnNoExt(t)) + } +} + +func (d *decoderCborIO) structFieldNotFound(index int, rvkencname string) { + + if d.h.ErrorIfNoField { + if index >= 0 { + halt.errorInt("no matching struct field found when decoding stream array at index ", int64(index)) + } else if rvkencname != "" { + halt.errorStr2("no matching struct field found when decoding stream map with key ", rvkencname) + } + } + d.swallow() +} + +func (d *decoderCborIO) decodeBytesInto(out []byte, mustFit bool) (v []byte, state dBytesIntoState) { + v, att := d.d.DecodeBytes() + if cap(v) == 0 || (att >= dBytesAttachViewZerocopy && !mustFit) { + + return + } + if len(v) == 0 { + v = zeroByteSlice + return + } + if len(out) == len(v) { + state = dBytesIntoParamOut + } else if cap(out) >= len(v) { + out = out[:len(v)] + state = dBytesIntoParamOutSlice + } else if mustFit { + halt.errorf("bytes capacity insufficient for decoded bytes: got/expected: %d/%d", len(v), len(out)) + } else { + out = make([]byte, len(v)) + state = dBytesIntoNew + } + copy(out, v) + v = out + return +} + +func (d *decoderCborIO) rawBytes() (v []byte) { + + v = d.d.nextValueBytes() + if d.bytes && !d.h.ZeroCopy { + vv := make([]byte, len(v)) + copy(vv, v) + v = vv + } + return +} + +func (d *decoderCborIO) wrapErr(v error, err *error) { + *err = wrapCodecErr(v, d.hh.Name(), d.d.NumBytesRead(), false) +} + +func (d *decoderCborIO) NumBytesRead() int { + return d.d.NumBytesRead() +} + +func (d *decoderCborIO) containerNext(j, containerLen int, hasLen bool) bool { + + if hasLen { + return j < containerLen + } + return !d.d.CheckBreak() +} + +func (d *decoderCborIO) mapElemKey(firstTime bool) { + d.d.ReadMapElemKey(firstTime) + d.c = containerMapKey +} + +func (d *decoderCborIO) mapElemValue() { + d.d.ReadMapElemValue() + d.c = containerMapValue +} + +func (d *decoderCborIO) mapEnd() { + d.d.ReadMapEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderCborIO) arrayElem(firstTime bool) { + d.d.ReadArrayElem(firstTime) + d.c = containerArrayElem +} + +func (d *decoderCborIO) arrayEnd() { + d.d.ReadArrayEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderCborIO) interfaceExtConvertAndDecode(v interface{}, ext InterfaceExt) { + + var vv interface{} + d.decode(&vv) + ext.UpdateExt(v, vv) + +} + +func (d *decoderCborIO) fn(t reflect.Type) *decFnCborIO { + return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false) +} + +func (d *decoderCborIO) fnNoExt(t reflect.Type) *decFnCborIO { + return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true) +} + +func (helperDecDriverCborIO) newDecoderBytes(in []byte, h Handle) *decoderCborIO { + var c1 decoderCborIO + c1.bytes = true + c1.init(h) + c1.ResetBytes(in) + return &c1 +} + +func (helperDecDriverCborIO) newDecoderIO(in io.Reader, h Handle) *decoderCborIO { + var c1 decoderCborIO + c1.init(h) + c1.Reset(in) + return &c1 +} + +func (helperDecDriverCborIO) decFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathDsCborIO) (f *fastpathDCborIO, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperDecDriverCborIO) decFindRtidFn(s []decRtidFnCborIO, rtid uintptr) (i uint, fn *decFnCborIO) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperDecDriverCborIO) decFromRtidFnSlice(fns *atomicRtidFnSlice) (s []decRtidFnCborIO) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]decRtidFnCborIO](v)) + } + return +} + +func (dh helperDecDriverCborIO) decFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, x *BasicHandle, fp *fastpathDsCborIO, + checkExt bool) (fn *decFnCborIO) { + return dh.decFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperDecDriverCborIO) decFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsCborIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnCborIO) { + rtid := rt2id(rt) + var sp []decRtidFnCborIO = dh.decFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.decFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.decFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperDecDriverCborIO) decFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsCborIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnCborIO) { + + fn = dh.decFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []decRtidFnCborIO + mu.Lock() + sp = dh.decFromRtidFnSlice(fns) + + if sp == nil { + sp = []decRtidFnCborIO{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.decFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]decRtidFnCborIO, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = decRtidFnCborIO{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperDecDriverCborIO) decFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathDsCborIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnCborIO) { + fn = new(decFnCborIO) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + fi.addrDf = true + + if rtid == timeTypId && timeBuiltin { + fn.fd = (*decoderCborIO).kTime + } else if rtid == rawTypId { + fn.fd = (*decoderCborIO).raw + } else if rtid == rawExtTypId { + fn.fd = (*decoderCborIO).rawExt + fi.addrD = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fd = (*decoderCborIO).ext + fi.addrD = true + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fd = (*decoderCborIO).selferUnmarshal + fi.addrD = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fd = (*decoderCborIO).binaryUnmarshal + fi.addrD = ti.flagBinaryUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fd = (*decoderCborIO).jsonUnmarshal + fi.addrD = ti.flagJsonUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fd = (*decoderCborIO).textUnmarshal + fi.addrD = ti.flagTextUnmarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fd = fp[idx].decfn + fi.addrD = true + fi.addrDf = false + if rk == reflect.Array { + fi.addrD = false + } + } + } else { + + xfe, xrt := dh.decFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf2 := xfe.decfn + if rk == reflect.Array { + fi.addrD = false + fn.fd = func(d *decoderCborIO, xf *decFnInfo, xrv reflect.Value) { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } else { + fi.addrD = true + fi.addrDf = false + xptr2rt := reflect.PointerTo(xrt) + fn.fd = func(d *decoderCborIO, xf *decFnInfo, xrv reflect.Value) { + if xrv.Kind() == reflect.Ptr { + xfnf2(d, xf, rvConvert(xrv, xptr2rt)) + } else { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } + } + } + } + } + if fn.fd == nil { + switch rk { + case reflect.Bool: + fn.fd = (*decoderCborIO).kBool + case reflect.String: + fn.fd = (*decoderCborIO).kString + case reflect.Int: + fn.fd = (*decoderCborIO).kInt + case reflect.Int8: + fn.fd = (*decoderCborIO).kInt8 + case reflect.Int16: + fn.fd = (*decoderCborIO).kInt16 + case reflect.Int32: + fn.fd = (*decoderCborIO).kInt32 + case reflect.Int64: + fn.fd = (*decoderCborIO).kInt64 + case reflect.Uint: + fn.fd = (*decoderCborIO).kUint + case reflect.Uint8: + fn.fd = (*decoderCborIO).kUint8 + case reflect.Uint16: + fn.fd = (*decoderCborIO).kUint16 + case reflect.Uint32: + fn.fd = (*decoderCborIO).kUint32 + case reflect.Uint64: + fn.fd = (*decoderCborIO).kUint64 + case reflect.Uintptr: + fn.fd = (*decoderCborIO).kUintptr + case reflect.Float32: + fn.fd = (*decoderCborIO).kFloat32 + case reflect.Float64: + fn.fd = (*decoderCborIO).kFloat64 + case reflect.Complex64: + fn.fd = (*decoderCborIO).kComplex64 + case reflect.Complex128: + fn.fd = (*decoderCborIO).kComplex128 + case reflect.Chan: + fn.fd = (*decoderCborIO).kChan + case reflect.Slice: + fn.fd = (*decoderCborIO).kSlice + case reflect.Array: + fi.addrD = false + fn.fd = (*decoderCborIO).kArray + case reflect.Struct: + if ti.simple { + fn.fd = (*decoderCborIO).kStructSimple + } else { + fn.fd = (*decoderCborIO).kStruct + } + case reflect.Map: + fn.fd = (*decoderCborIO).kMap + case reflect.Interface: + + fn.fd = (*decoderCborIO).kInterface + default: + + fn.fd = (*decoderCborIO).kErr + } + } + } + return +} +func (e *cborEncDriverIO) EncodeNil() { + e.w.writen1(cborBdNil) +} + +func (e *cborEncDriverIO) EncodeBool(b bool) { + if b { + e.w.writen1(cborBdTrue) + } else { + e.w.writen1(cborBdFalse) + } +} + +func (e *cborEncDriverIO) EncodeFloat32(f float32) { + b := math.Float32bits(f) + if e.h.OptimumSize { + if h := floatToHalfFloatBits(b); halfFloatToFloatBits(h) == b { + e.w.writen1(cborBdFloat16) + e.w.writen2(bigen.PutUint16(h)) + return + } + } + e.w.writen1(cborBdFloat32) + e.w.writen4(bigen.PutUint32(b)) +} + +func (e *cborEncDriverIO) EncodeFloat64(f float64) { + if e.h.OptimumSize { + if f32 := float32(f); float64(f32) == f { + e.EncodeFloat32(f32) + return + } + } + e.w.writen1(cborBdFloat64) + e.w.writen8(bigen.PutUint64(math.Float64bits(f))) +} + +func (e *cborEncDriverIO) encUint(v uint64, bd byte) { + if v <= 0x17 { + e.w.writen1(byte(v) + bd) + } else if v <= math.MaxUint8 { + e.w.writen2(bd+0x18, uint8(v)) + } else if v <= math.MaxUint16 { + e.w.writen1(bd + 0x19) + e.w.writen2(bigen.PutUint16(uint16(v))) + } else if v <= math.MaxUint32 { + e.w.writen1(bd + 0x1a) + e.w.writen4(bigen.PutUint32(uint32(v))) + } else { + e.w.writen1(bd + 0x1b) + e.w.writen8(bigen.PutUint64(v)) + } +} + +func (e *cborEncDriverIO) EncodeInt(v int64) { + if v < 0 { + e.encUint(uint64(-1-v), cborBaseNegInt) + } else { + e.encUint(uint64(v), cborBaseUint) + } +} + +func (e *cborEncDriverIO) EncodeUint(v uint64) { + e.encUint(v, cborBaseUint) +} + +func (e *cborEncDriverIO) encLen(bd byte, length int) { + e.encUint(uint64(length), bd) +} + +func (e *cborEncDriverIO) EncodeTime(t time.Time) { + if t.IsZero() { + e.EncodeNil() + } else if e.h.TimeRFC3339 { + e.encUint(0, cborBaseTag) + e.encStringBytesS(cborBaseString, stringView(t.AppendFormat(e.b[:0], time.RFC3339Nano))) + } else { + e.encUint(1, cborBaseTag) + t = t.UTC().Round(time.Microsecond) + sec, nsec := t.Unix(), uint64(t.Nanosecond()) + if nsec == 0 { + e.EncodeInt(sec) + } else { + e.EncodeFloat64(float64(sec) + float64(nsec)/1e9) + } + } +} + +func (e *cborEncDriverIO) EncodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + e.encUint(uint64(xtag), cborBaseTag) + if ext == SelfExt { + e.enc.encodeAs(rv, basetype, false) + } else if v := ext.ConvertExt(rv); v == nil { + e.writeNilBytes() + } else { + e.enc.encodeI(v) + } +} + +func (e *cborEncDriverIO) EncodeRawExt(re *RawExt) { + e.encUint(uint64(re.Tag), cborBaseTag) + if re.Data != nil { + e.w.writeb(re.Data) + } else if re.Value != nil { + e.enc.encodeI(re.Value) + } else { + e.EncodeNil() + } +} + +func (e *cborEncDriverIO) WriteArrayEmpty() { + if e.h.IndefiniteLength { + e.w.writen2(cborBdIndefiniteArray, cborBdBreak) + } else { + e.w.writen1(cborBaseArray) + + } +} + +func (e *cborEncDriverIO) WriteMapEmpty() { + if e.h.IndefiniteLength { + e.w.writen2(cborBdIndefiniteMap, cborBdBreak) + } else { + e.w.writen1(cborBaseMap) + + } +} + +func (e *cborEncDriverIO) WriteArrayStart(length int) { + if e.h.IndefiniteLength { + e.w.writen1(cborBdIndefiniteArray) + } else { + e.encLen(cborBaseArray, length) + } +} + +func (e *cborEncDriverIO) WriteMapStart(length int) { + if e.h.IndefiniteLength { + e.w.writen1(cborBdIndefiniteMap) + } else { + e.encLen(cborBaseMap, length) + } +} + +func (e *cborEncDriverIO) WriteMapEnd() { + if e.h.IndefiniteLength { + e.w.writen1(cborBdBreak) + } +} + +func (e *cborEncDriverIO) WriteArrayEnd() { + if e.h.IndefiniteLength { + e.w.writen1(cborBdBreak) + } +} + +func (e *cborEncDriverIO) EncodeString(v string) { + bb := cborBaseString + if e.h.StringToRaw { + bb = cborBaseBytes + } + e.encStringBytesS(bb, v) +} + +func (e *cborEncDriverIO) EncodeStringNoEscape4Json(v string) { e.EncodeString(v) } + +func (e *cborEncDriverIO) EncodeStringBytesRaw(v []byte) { + e.encStringBytesS(cborBaseBytes, stringView(v)) +} + +func (e *cborEncDriverIO) encStringBytesS(bb byte, v string) { + if e.h.IndefiniteLength { + if bb == cborBaseBytes { + e.w.writen1(cborBdIndefiniteBytes) + } else { + e.w.writen1(cborBdIndefiniteString) + } + vlen := uint(len(v)) + n := max(4, min(vlen/4, 1024)) + for i := uint(0); i < vlen; { + i2 := i + n + if i2 >= vlen { + i2 = vlen + } + v2 := v[i:i2] + e.encLen(bb, len(v2)) + e.w.writestr(v2) + i = i2 + } + e.w.writen1(cborBdBreak) + } else { + e.encLen(bb, len(v)) + e.w.writestr(v) + } +} + +func (e *cborEncDriverIO) EncodeBytes(v []byte) { + if v == nil { + e.writeNilBytes() + return + } + e.EncodeStringBytesRaw(v) +} + +func (e *cborEncDriverIO) writeNilOr(v byte) { + if !e.h.NilCollectionToZeroLength { + v = cborBdNil + } + e.w.writen1(v) +} + +func (e *cborEncDriverIO) writeNilArray() { + e.writeNilOr(cborBaseArray) +} + +func (e *cborEncDriverIO) writeNilMap() { + e.writeNilOr(cborBaseMap) +} + +func (e *cborEncDriverIO) writeNilBytes() { + e.writeNilOr(cborBaseBytes) +} + +func (d *cborDecDriverIO) readNextBd() { + d.bd = d.r.readn1() + d.bdRead = true +} + +func (d *cborDecDriverIO) advanceNil() (null bool) { + if !d.bdRead { + d.readNextBd() + } + if d.bd == cborBdNil || d.bd == cborBdUndefined { + d.bdRead = false + return true + } + return +} + +func (d *cborDecDriverIO) TryNil() bool { + return d.advanceNil() +} + +func (d *cborDecDriverIO) skipTags() { + for d.bd>>5 == cborMajorTag { + d.decUint() + d.bd = d.r.readn1() + } +} + +func (d *cborDecDriverIO) ContainerType() (vt valueType) { + if !d.bdRead { + d.readNextBd() + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + if d.bd == cborBdNil { + d.bdRead = false + return valueTypeNil + } + major := d.bd >> 5 + if major == cborMajorBytes { + return valueTypeBytes + } else if major == cborMajorString { + return valueTypeString + } else if major == cborMajorArray { + return valueTypeArray + } else if major == cborMajorMap { + return valueTypeMap + } + return valueTypeUnset +} + +func (d *cborDecDriverIO) CheckBreak() (v bool) { + if !d.bdRead { + d.readNextBd() + } + if d.bd == cborBdBreak { + d.bdRead = false + v = true + } + return +} + +func (d *cborDecDriverIO) decUint() (ui uint64) { + v := d.bd & 0x1f + if v <= 0x17 { + ui = uint64(v) + } else if v == 0x18 { + ui = uint64(d.r.readn1()) + } else if v == 0x19 { + ui = uint64(bigen.Uint16(d.r.readn2())) + } else if v == 0x1a { + ui = uint64(bigen.Uint32(d.r.readn4())) + } else if v == 0x1b { + ui = uint64(bigen.Uint64(d.r.readn8())) + } else { + halt.errorf("invalid descriptor decoding uint: %x/%s (%x)", d.bd, cbordesc(d.bd), v) + } + return +} + +func (d *cborDecDriverIO) decLen() int { + return int(d.decUint()) +} + +func (d *cborDecDriverIO) decFloat() (f float64, ok bool) { + ok = true + switch d.bd { + case cborBdFloat16: + f = float64(math.Float32frombits(halfFloatToFloatBits(bigen.Uint16(d.r.readn2())))) + case cborBdFloat32: + f = float64(math.Float32frombits(bigen.Uint32(d.r.readn4()))) + case cborBdFloat64: + f = math.Float64frombits(bigen.Uint64(d.r.readn8())) + default: + if d.bd>>5 == cborMajorTag { + + switch d.bd & 0x1f { + case 2: + f = d.decTagBigIntAsFloat(false) + case 3: + f = d.decTagBigIntAsFloat(true) + case 4: + f = d.decTagBigFloatAsFloat(true) + case 5: + f = d.decTagBigFloatAsFloat(false) + default: + ok = false + } + } else { + ok = false + } + } + return +} + +func (d *cborDecDriverIO) decInteger() (ui uint64, neg, ok bool) { + ok = true + switch d.bd >> 5 { + case cborMajorUint: + ui = d.decUint() + case cborMajorNegInt: + ui = d.decUint() + neg = true + default: + ok = false + } + return +} + +func (d *cborDecDriverIO) DecodeInt64() (i int64) { + if d.advanceNil() { + return + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + v1, v2, v3 := d.decInteger() + i = decNegintPosintFloatNumberHelper{d}.int64(v1, v2, v3, true) + d.bdRead = false + return +} + +func (d *cborDecDriverIO) DecodeUint64() (ui uint64) { + if d.advanceNil() { + return + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + ui = decNegintPosintFloatNumberHelper{d}.uint64(d.decInteger()) + d.bdRead = false + return +} + +func (d *cborDecDriverIO) DecodeFloat64() (f float64) { + if d.advanceNil() { + return + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + v1, v2 := d.decFloat() + f = decNegintPosintFloatNumberHelper{d}.float64(v1, v2, true) + d.bdRead = false + return +} + +func (d *cborDecDriverIO) DecodeBool() (b bool) { + if d.advanceNil() { + return + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + if d.bd == cborBdTrue { + b = true + } else if d.bd == cborBdFalse { + } else { + halt.errorf("not bool - %s %x/%s", msgBadDesc, d.bd, cbordesc(d.bd)) + } + d.bdRead = false + return +} + +func (d *cborDecDriverIO) ReadMapStart() (length int) { + if d.advanceNil() { + return containerLenNil + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + d.bdRead = false + if d.bd == cborBdIndefiniteMap { + return containerLenUnknown + } + if d.bd>>5 != cborMajorMap { + halt.errorf("error reading map; got major type: %x, expected %x/%s", d.bd>>5, cborMajorMap, cbordesc(d.bd)) + } + return d.decLen() +} + +func (d *cborDecDriverIO) ReadArrayStart() (length int) { + if d.advanceNil() { + return containerLenNil + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + d.bdRead = false + if d.bd == cborBdIndefiniteArray { + return containerLenUnknown + } + if d.bd>>5 != cborMajorArray { + halt.errorf("invalid array; got major type: %x, expect: %x/%s", d.bd>>5, cborMajorArray, cbordesc(d.bd)) + } + return d.decLen() +} + +func (d *cborDecDriverIO) DecodeBytes() (bs []byte, state dBytesAttachState) { + if d.advanceNil() { + return + } + if d.h.SkipUnexpectedTags { + d.skipTags() + } + fnEnsureNonNilBytes := func() { + + if bs == nil { + bs = zeroByteSlice + state = dBytesDetach + } + } + if d.bd == cborBdIndefiniteBytes || d.bd == cborBdIndefiniteString { + major := d.bd >> 5 + val4str := d.h.ValidateUnicode && major == cborMajorString + bs = d.d.buf[:0] + d.bdRead = false + for !d.CheckBreak() { + if d.bd>>5 != major { + const msg = "malformed indefinite string/bytes %x (%s); " + + "contains chunk with major type %v, expected %v" + halt.errorf(msg, d.bd, cbordesc(d.bd), d.bd>>5, major) + } + n := uint(d.decLen()) + bs = append(bs, d.r.readx(n)...) + d.bdRead = false + if val4str && !utf8.Valid(bs[len(bs)-int(n):]) { + const msg = "indefinite-length text string contains chunk " + + "that is not a valid utf-8 sequence: 0x%x" + halt.errorf(msg, bs[len(bs)-int(n):]) + } + } + d.bdRead = false + d.d.buf = bs + state = dBytesAttachBuffer + fnEnsureNonNilBytes() + return + } + if d.bd == cborBdIndefiniteArray { + d.bdRead = false + bs = d.d.buf[:0] + for !d.CheckBreak() { + bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) + } + d.d.buf = bs + state = dBytesAttachBuffer + fnEnsureNonNilBytes() + return + } + var cond bool + if d.bd>>5 == cborMajorArray { + d.bdRead = false + slen := d.decLen() + bs, cond = usableByteSlice(d.d.buf, slen) + for i := 0; i < len(bs); i++ { + bs[i] = uint8(chkOvf.UintV(d.DecodeUint64(), 8)) + } + for i := len(bs); i < slen; i++ { + bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) + } + if cond { + d.d.buf = bs + } + state = dBytesAttachBuffer + fnEnsureNonNilBytes() + return + } + clen := d.decLen() + d.bdRead = false + bs, cond = d.r.readxb(uint(clen)) + state = d.d.attachState(cond) + return +} + +func (d *cborDecDriverIO) DecodeStringAsBytes() (out []byte, state dBytesAttachState) { + out, state = d.DecodeBytes() + if d.h.ValidateUnicode && !utf8.Valid(out) { + halt.errorf("DecodeStringAsBytes: invalid UTF-8: %s", out) + } + return +} + +func (d *cborDecDriverIO) DecodeTime() (t time.Time) { + if d.advanceNil() { + return + } + if d.bd>>5 != cborMajorTag { + halt.errorf("error reading tag; expected major type: %x, got: %x", cborMajorTag, d.bd>>5) + } + xtag := d.decUint() + d.bdRead = false + return d.decodeTime(xtag) +} + +func (d *cborDecDriverIO) decodeTime(xtag uint64) (t time.Time) { + switch xtag { + case 0: + var err error + t, err = time.Parse(time.RFC3339, stringView(bytesOKs(d.DecodeStringAsBytes()))) + halt.onerror(err) + case 1: + f1, f2 := math.Modf(d.DecodeFloat64()) + t = time.Unix(int64(f1), int64(f2*1e9)) + default: + halt.errorf("invalid tag for time.Time - expecting 0 or 1, got 0x%x", xtag) + } + t = t.UTC().Round(time.Microsecond) + return +} + +func (d *cborDecDriverIO) preDecodeExt(checkTag bool, xtag uint64) (realxtag uint64, ok bool) { + if d.advanceNil() { + return + } + if d.bd>>5 != cborMajorTag { + halt.errorf("error reading tag; expected major type: %x, got: %x", cborMajorTag, d.bd>>5) + } + realxtag = d.decUint() + d.bdRead = false + if checkTag && xtag != realxtag { + halt.errorf("Wrong extension tag. Got %b. Expecting: %v", realxtag, xtag) + } + ok = true + return +} + +func (d *cborDecDriverIO) DecodeRawExt(re *RawExt) { + if realxtag, ok := d.preDecodeExt(false, 0); ok { + re.Tag = realxtag + d.dec.decode(&re.Value) + d.bdRead = false + } +} + +func (d *cborDecDriverIO) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + if _, ok := d.preDecodeExt(true, xtag); ok { + if ext == SelfExt { + d.dec.decodeAs(rv, basetype, false) + } else { + d.dec.interfaceExtConvertAndDecode(rv, ext) + } + d.bdRead = false + } +} + +func (d *cborDecDriverIO) decTagBigIntAsFloat(neg bool) (f float64) { + bs, _ := d.DecodeBytes() + bi := new(big.Int).SetBytes(bs) + if neg { + bi0 := bi + bi = new(big.Int).Sub(big.NewInt(-1), bi0) + } + f, _ = bi.Float64() + return +} + +func (d *cborDecDriverIO) decTagBigFloatAsFloat(decimal bool) (f float64) { + if nn := d.r.readn1(); nn != 82 { + halt.errorf("(%d) decoding decimal/big.Float: expected 2 numbers", nn) + } + exp := d.DecodeInt64() + mant := d.DecodeInt64() + if decimal { + + rf := readFloatResult{exp: int8(exp)} + if mant >= 0 { + rf.mantissa = uint64(mant) + } else { + rf.neg = true + rf.mantissa = uint64(-mant) + } + f, _ = parseFloat64_reader(rf) + + } else { + + bfm := new(big.Float).SetPrec(64).SetInt64(mant) + bf := new(big.Float).SetPrec(64).SetMantExp(bfm, int(exp)) + f, _ = bf.Float64() + } + return +} + +func (d *cborDecDriverIO) DecodeNaked() { + if !d.bdRead { + d.readNextBd() + } + + n := d.d.naked() + var decodeFurther bool + switch d.bd >> 5 { + case cborMajorUint: + if d.h.SignedInteger { + n.v = valueTypeInt + n.i = d.DecodeInt64() + } else { + n.v = valueTypeUint + n.u = d.DecodeUint64() + } + case cborMajorNegInt: + n.v = valueTypeInt + n.i = d.DecodeInt64() + case cborMajorBytes: + d.d.fauxUnionReadRawBytes(d, false, d.h.RawToString) + case cborMajorString: + n.v = valueTypeString + n.s = d.d.detach2Str(d.DecodeStringAsBytes()) + case cborMajorArray: + n.v = valueTypeArray + decodeFurther = true + case cborMajorMap: + n.v = valueTypeMap + decodeFurther = true + case cborMajorTag: + n.v = valueTypeExt + n.u = d.decUint() + d.bdRead = false + n.l = nil + xx := d.h.getExtForTag(n.u) + if xx == nil { + switch n.u { + case 0, 1: + n.v = valueTypeTime + n.t = d.decodeTime(n.u) + case 2: + n.f = d.decTagBigIntAsFloat(false) + n.v = valueTypeFloat + case 3: + n.f = d.decTagBigIntAsFloat(true) + n.v = valueTypeFloat + case 4: + n.f = d.decTagBigFloatAsFloat(true) + n.v = valueTypeFloat + case 5: + n.f = d.decTagBigFloatAsFloat(false) + n.v = valueTypeFloat + case 55799: + d.DecodeNaked() + default: + if d.h.SkipUnexpectedTags { + d.DecodeNaked() + } + + } + return + } + + case cborMajorSimpleOrFloat: + switch d.bd { + case cborBdNil, cborBdUndefined: + n.v = valueTypeNil + case cborBdFalse: + n.v = valueTypeBool + n.b = false + case cborBdTrue: + n.v = valueTypeBool + n.b = true + case cborBdFloat16, cborBdFloat32, cborBdFloat64: + n.v = valueTypeFloat + n.f = d.DecodeFloat64() + default: + halt.errorf("decodeNaked: Unrecognized d.bd: 0x%x", d.bd) + } + default: + halt.errorf("decodeNaked: Unrecognized d.bd: 0x%x", d.bd) + } + if !decodeFurther { + d.bdRead = false + } +} + +func (d *cborDecDriverIO) uintBytes() (v []byte, ui uint64) { + + switch vv := d.bd & 0x1f; vv { + case 0x18: + v = d.r.readx(1) + ui = uint64(v[0]) + case 0x19: + v = d.r.readx(2) + ui = uint64(bigenstd.Uint16(v)) + case 0x1a: + v = d.r.readx(4) + ui = uint64(bigenstd.Uint32(v)) + case 0x1b: + v = d.r.readx(8) + ui = uint64(bigenstd.Uint64(v)) + default: + if vv > 0x1b { + halt.errorf("invalid descriptor decoding uint: %x/%s", d.bd, cbordesc(d.bd)) + } + ui = uint64(vv) + } + return +} + +func (d *cborDecDriverIO) nextValueBytes() (v []byte) { + if !d.bdRead { + d.readNextBd() + } + d.r.startRecording() + d.nextValueBytesBdReadR() + v = d.r.stopRecording() + d.bdRead = false + return +} + +func (d *cborDecDriverIO) nextValueBytesBdReadR() { + + var ui uint64 + + switch d.bd >> 5 { + case cborMajorUint, cborMajorNegInt: + d.uintBytes() + case cborMajorString, cborMajorBytes: + if d.bd == cborBdIndefiniteBytes || d.bd == cborBdIndefiniteString { + for { + d.readNextBd() + if d.bd == cborBdBreak { + break + } + _, ui = d.uintBytes() + d.r.skip(uint(ui)) + } + } else { + _, ui = d.uintBytes() + d.r.skip(uint(ui)) + } + case cborMajorArray: + if d.bd == cborBdIndefiniteArray { + for { + d.readNextBd() + if d.bd == cborBdBreak { + break + } + d.nextValueBytesBdReadR() + } + } else { + _, ui = d.uintBytes() + for i := uint64(0); i < ui; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + } + } + case cborMajorMap: + if d.bd == cborBdIndefiniteMap { + for { + d.readNextBd() + if d.bd == cborBdBreak { + break + } + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() + } + } else { + _, ui = d.uintBytes() + for i := uint64(0); i < ui; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() + } + } + case cborMajorTag: + d.uintBytes() + d.readNextBd() + d.nextValueBytesBdReadR() + case cborMajorSimpleOrFloat: + switch d.bd { + case cborBdNil, cborBdUndefined, cborBdFalse, cborBdTrue: + case cborBdFloat16: + d.r.skip(2) + case cborBdFloat32: + d.r.skip(4) + case cborBdFloat64: + d.r.skip(8) + default: + halt.errorf("nextValueBytes: Unrecognized d.bd: 0x%x", d.bd) + } + default: + halt.errorf("nextValueBytes: Unrecognized d.bd: 0x%x", d.bd) + } + return +} + +func (d *cborDecDriverIO) reset() { + d.bdAndBdread.reset() + +} + +func (d *cborEncDriverIO) init(hh Handle, shared *encoderBase, enc encoderI) (fp interface{}) { + callMake(&d.w) + d.h = hh.(*CborHandle) + d.e = shared + if shared.bytes { + fp = cborFpEncBytes + } else { + fp = cborFpEncIO + } + + d.init2(enc) + return +} + +func (e *cborEncDriverIO) writeBytesAsis(b []byte) { e.w.writeb(b) } + +func (e *cborEncDriverIO) writerEnd() { e.w.end() } + +func (e *cborEncDriverIO) resetOutBytes(out *[]byte) { + e.w.resetBytes(*out, out) +} + +func (e *cborEncDriverIO) resetOutIO(out io.Writer) { + e.w.resetIO(out, e.h.WriterBufferSize, &e.e.blist) +} + +func (d *cborDecDriverIO) init(hh Handle, shared *decoderBase, dec decoderI) (fp interface{}) { + callMake(&d.r) + d.h = hh.(*CborHandle) + d.d = shared + if shared.bytes { + fp = cborFpDecBytes + } else { + fp = cborFpDecIO + } + + d.init2(dec) + return +} + +func (d *cborDecDriverIO) NumBytesRead() int { + return int(d.r.numread()) +} + +func (d *cborDecDriverIO) resetInBytes(in []byte) { + d.r.resetBytes(in) +} + +func (d *cborDecDriverIO) resetInIO(r io.Reader) { + d.r.resetIO(r, d.h.ReaderBufferSize, d.h.MaxInitLen, &d.d.blist) +} + +func (d *cborDecDriverIO) descBd() string { + return sprintf("%v (%s)", d.bd, cbordesc(d.bd)) +} + +func (d *cborDecDriverIO) DecodeFloat32() (f float32) { + return float32(chkOvf.Float32V(d.DecodeFloat64())) +} + +func (d *cborEncDriverIO) init2(enc encoderI) { + d.enc = enc +} + +func (d *cborDecDriverIO) init2(dec decoderI) { + d.dec = dec + +} diff --git a/vendor/github.com/ugorji/go/codec/cbor.notfastpath.mono.generated.go b/vendor/github.com/ugorji/go/codec/cbor.notfastpath.mono.generated.go new file mode 100644 index 0000000..9ae1be2 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/cbor.notfastpath.mono.generated.go @@ -0,0 +1,52 @@ +//go:build !notmono && !codec.notmono && (notfastpath || codec.notfastpath) + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "reflect" +) + +type fastpathECborBytes struct { + rt reflect.Type + encfn func(*encoderCborBytes, *encFnInfo, reflect.Value) +} +type fastpathDCborBytes struct { + rt reflect.Type + decfn func(*decoderCborBytes, *decFnInfo, reflect.Value) +} +type fastpathEsCborBytes [0]fastpathECborBytes +type fastpathDsCborBytes [0]fastpathDCborBytes + +func (helperEncDriverCborBytes) fastpathEncodeTypeSwitch(iv interface{}, e *encoderCborBytes) bool { + return false +} +func (helperDecDriverCborBytes) fastpathDecodeTypeSwitch(iv interface{}, d *decoderCborBytes) bool { + return false +} + +func (helperEncDriverCborBytes) fastpathEList() (v *fastpathEsCborBytes) { return } +func (helperDecDriverCborBytes) fastpathDList() (v *fastpathDsCborBytes) { return } + +type fastpathECborIO struct { + rt reflect.Type + encfn func(*encoderCborIO, *encFnInfo, reflect.Value) +} +type fastpathDCborIO struct { + rt reflect.Type + decfn func(*decoderCborIO, *decFnInfo, reflect.Value) +} +type fastpathEsCborIO [0]fastpathECborIO +type fastpathDsCborIO [0]fastpathDCborIO + +func (helperEncDriverCborIO) fastpathEncodeTypeSwitch(iv interface{}, e *encoderCborIO) bool { + return false +} +func (helperDecDriverCborIO) fastpathDecodeTypeSwitch(iv interface{}, d *decoderCborIO) bool { + return false +} + +func (helperEncDriverCborIO) fastpathEList() (v *fastpathEsCborIO) { return } +func (helperDecDriverCborIO) fastpathDList() (v *fastpathDsCborIO) { return } diff --git a/vendor/github.com/ugorji/go/codec/codecgen.go b/vendor/github.com/ugorji/go/codec/codecgen.go deleted file mode 100644 index 49fb8e5..0000000 --- a/vendor/github.com/ugorji/go/codec/codecgen.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build codecgen || generated -// +build codecgen generated - -package codec - -// this file sets the codecgen variable to true -// when the build tag codecgen is set. -// -// some tests depend on knowing whether in the context of codecgen or not. -// For example, some tests should be skipped during codecgen e.g. missing fields tests. - -func init() { - codecgen = true -} diff --git a/vendor/github.com/ugorji/go/codec/custom_time.go b/vendor/github.com/ugorji/go/codec/custom_time.go new file mode 100644 index 0000000..c6d9e96 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/custom_time.go @@ -0,0 +1,191 @@ +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "math" + "time" +) + +// EncodeTime encodes a time.Time as a []byte, including +// information on the instant in time and UTC offset. +// +// Format Description +// +// A timestamp is composed of 3 components: +// +// - secs: signed integer representing seconds since unix epoch +// - nsces: unsigned integer representing fractional seconds as a +// nanosecond offset within secs, in the range 0 <= nsecs < 1e9 +// - tz: signed integer representing timezone offset in minutes east of UTC, +// and a dst (daylight savings time) flag +// +// When encoding a timestamp, the first byte is the descriptor, which +// defines which components are encoded and how many bytes are used to +// encode secs and nsecs components. *If secs/nsecs is 0 or tz is UTC, it +// is not encoded in the byte array explicitly*. +// +// Descriptor 8 bits are of the form `A B C DDD EE`: +// A: Is secs component encoded? 1 = true +// B: Is nsecs component encoded? 1 = true +// C: Is tz component encoded? 1 = true +// DDD: Number of extra bytes for secs (range 0-7). +// If A = 1, secs encoded in DDD+1 bytes. +// If A = 0, secs is not encoded, and is assumed to be 0. +// If A = 1, then we need at least 1 byte to encode secs. +// DDD says the number of extra bytes beyond that 1. +// E.g. if DDD=0, then secs is represented in 1 byte. +// if DDD=2, then secs is represented in 3 bytes. +// EE: Number of extra bytes for nsecs (range 0-3). +// If B = 1, nsecs encoded in EE+1 bytes (similar to secs/DDD above) +// +// Following the descriptor bytes, subsequent bytes are: +// +// secs component encoded in `DDD + 1` bytes (if A == 1) +// nsecs component encoded in `EE + 1` bytes (if B == 1) +// tz component encoded in 2 bytes (if C == 1) +// +// secs and nsecs components are integers encoded in a BigEndian +// 2-complement encoding format. +// +// tz component is encoded as 2 bytes (16 bits). Most significant bit 15 to +// Least significant bit 0 are described below: +// +// Timezone offset has a range of -12:00 to +14:00 (ie -720 to +840 minutes). +// Bit 15 = have\_dst: set to 1 if we set the dst flag. +// Bit 14 = dst\_on: set to 1 if dst is in effect at the time, or 0 if not. +// Bits 13..0 = timezone offset in minutes. It is a signed integer in Big Endian format. +func customEncodeTime(t time.Time) []byte { + // t := rv2i(rv).(time.Time) + tsecs, tnsecs := t.Unix(), t.Nanosecond() + var ( + bd byte + bs [16]byte + i int = 1 + ) + l := t.Location() + if l == time.UTC { + l = nil + } + if tsecs != 0 { + bd = bd | 0x80 + btmp := bigen.PutUint64(uint64(tsecs)) + f := pruneSignExt(btmp[:], tsecs >= 0) + bd = bd | (byte(7-f) << 2) + copy(bs[i:], btmp[f:]) + i = i + (8 - f) + } + if tnsecs != 0 { + bd = bd | 0x40 + btmp := bigen.PutUint32(uint32(tnsecs)) + f := pruneSignExt(btmp[:4], true) + bd = bd | byte(3-f) + copy(bs[i:], btmp[f:4]) + i = i + (4 - f) + } + if l != nil { + bd = bd | 0x20 + // Note that Go Libs do not give access to dst flag. + _, zoneOffset := t.Zone() + // zoneName, zoneOffset := t.Zone() + zoneOffset /= 60 + z := uint16(zoneOffset) + btmp0, btmp1 := bigen.PutUint16(z) + // clear dst flags + bs[i] = btmp0 & 0x3f + bs[i+1] = btmp1 + i = i + 2 + } + bs[0] = bd + return bs[0:i] +} + +// customDecodeTime decodes a []byte into a time.Time. +func customDecodeTime(bs []byte) (tt time.Time, err error) { + bd := bs[0] + var ( + tsec int64 + tnsec uint32 + tz uint16 + i byte = 1 + i2 byte + n byte + ) + if bd&(1<<7) != 0 { + var btmp [8]byte + n = ((bd >> 2) & 0x7) + 1 + i2 = i + n + copy(btmp[8-n:], bs[i:i2]) + // if first bit of bs[i] is set, then fill btmp[0..8-n] with 0xff (ie sign extend it) + if bs[i]&(1<<7) != 0 { + copy(btmp[0:8-n], bsAll0xff) + } + i = i2 + tsec = int64(bigen.Uint64(btmp)) + } + if bd&(1<<6) != 0 { + var btmp [4]byte + n = (bd & 0x3) + 1 + i2 = i + n + copy(btmp[4-n:], bs[i:i2]) + i = i2 + tnsec = bigen.Uint32(btmp) + } + if bd&(1<<5) == 0 { + tt = time.Unix(tsec, int64(tnsec)).UTC() + return + } + // In stdlib time.Parse, when a date is parsed without a zone name, it uses "" as zone name. + // However, we need name here, so it can be shown when time is printf.d. + // Zone name is in form: UTC-08:00. + // Note that Go Libs do not give access to dst flag, so we ignore dst bits + + tz = bigen.Uint16([2]byte{bs[i], bs[i+1]}) + // sign extend sign bit into top 2 MSB (which were dst bits): + if tz&(1<<13) == 0 { // positive + tz = tz & 0x3fff //clear 2 MSBs: dst bits + } else { // negative + tz = tz | 0xc000 //set 2 MSBs: dst bits + } + tzint := int16(tz) + if tzint == 0 { + tt = time.Unix(tsec, int64(tnsec)).UTC() + } else { + // For Go Time, do not use a descriptive timezone. + // It's unnecessary, and makes it harder to do a reflect.DeepEqual. + // The Offset already tells what the offset should be, if not on UTC and unknown zone name. + // var zoneName = timeLocUTCName(tzint) + tt = time.Unix(tsec, int64(tnsec)).In(time.FixedZone("", int(tzint)*60)) + } + return +} + +// customEncodeTimeAsNum encodes time.Time exactly as cbor does. +func customEncodeTimeAsNum(t time.Time) (r interface{}) { + t = t.UTC().Round(time.Microsecond) + sec, nsec := t.Unix(), uint64(t.Nanosecond()) + if nsec == 0 { + r = sec + } else { + r = float64(sec) + float64(nsec)/1e9 + } + return r +} + +// customDecodeTimeAsNum decodes time.Time exactly as cbor does. +func customDecodeTimeAsNum(v interface{}) (t time.Time) { + switch vv := v.(type) { + case int64: + t = time.Unix(vv, 0) + case uint64: + t = time.Unix((int64)(vv), 0) + case float64: + f1, f2 := math.Modf(vv) + t = time.Unix(int64(f1), int64(f2*1e9)) + default: + halt.errorf("expect int64/float64 for time.Time ext: got %T", v) + } + t = t.UTC().Round(time.Microsecond) + return +} diff --git a/vendor/github.com/ugorji/go/codec/decimal.go b/vendor/github.com/ugorji/go/codec/decimal.go index dbb3380..0c74726 100644 --- a/vendor/github.com/ugorji/go/codec/decimal.go +++ b/vendor/github.com/ugorji/go/codec/decimal.go @@ -8,6 +8,19 @@ import ( "strconv" ) +type readFloatResult struct { + mantissa uint64 + exp int8 + neg bool + trunc bool + bad bool // bad decimal string + hardexp bool // exponent is hard to handle (> 2 digits, etc) + ok bool + // sawdot bool + // sawexp bool + //_ [2]bool // padding +} + // Per go spec, floats are represented in memory as // IEEE single or double precision floating point values. // @@ -234,6 +247,10 @@ func parseFloat64_custom(b []byte) (f float64, err error) { } func parseUint64_simple(b []byte) (n uint64, ok bool) { + if len(b) > 1 && b[0] == '0' { // punt on numbers with leading zeros + return + } + var i int var n1 uint64 var c uint8 @@ -356,19 +373,6 @@ func parseNumber(b []byte, z *fauxUnion, preferSignedInt bool) (err error) { return } -type readFloatResult struct { - mantissa uint64 - exp int8 - neg bool - trunc bool - bad bool // bad decimal string - hardexp bool // exponent is hard to handle (> 2 digits, etc) - ok bool - // sawdot bool - // sawexp bool - //_ [2]bool // padding -} - func readFloat(s []byte, y floatinfo) (r readFloatResult) { var i uint // uint, so that we eliminate bounds checking var slen = uint(len(s)) @@ -384,13 +388,23 @@ func readFloat(s []byte, y floatinfo) (r readFloatResult) { i++ } - // we considered punting early if string has length > maxMantDigits, but this doesn't account + // considered punting early if string has length > maxMantDigits, but doesn't account // for trailing 0's e.g. 700000000000000000000 can be encoded exactly as it is 7e20 var nd, ndMant, dp int8 var sawdot, sawexp bool var xu uint64 + if i+1 < slen && s[i] == '0' { + switch s[i+1] { + case '.', 'e', 'E': + // ok + default: + r.bad = true + return + } + } + LOOP: for ; i < slen; i++ { switch s[i] { diff --git a/vendor/github.com/ugorji/go/codec/decode.base.go b/vendor/github.com/ugorji/go/codec/decode.base.go new file mode 100644 index 0000000..e82f402 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/decode.base.go @@ -0,0 +1,944 @@ +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "errors" + "io" + "math" + "reflect" + "slices" + "sync" + "time" +) + +func init() { + for _, v := range []interface{}{ + (*string)(nil), + (*bool)(nil), + (*int)(nil), + (*int8)(nil), + (*int16)(nil), + (*int32)(nil), + (*int64)(nil), + (*uint)(nil), + (*uint8)(nil), + (*uint16)(nil), + (*uint32)(nil), + (*uint64)(nil), + (*uintptr)(nil), + (*float32)(nil), + (*float64)(nil), + (*complex64)(nil), + (*complex128)(nil), + (*[]byte)(nil), + ([]byte)(nil), + (*time.Time)(nil), + (*Raw)(nil), + (*interface{})(nil), + } { + decBuiltinRtids = append(decBuiltinRtids, i2rtid(v)) + } + slices.Sort(decBuiltinRtids) +} + +const msgBadDesc = "unrecognized descriptor byte" + +var decBuiltinRtids []uintptr + +// decDriver calls (DecodeBytes and DecodeStringAsBytes) return a state +// of the view they return, allowing consumers to handle appropriately. +// +// sequencing of this is intentional: +// - mutable if <= dBytesAttachBuffer (buf | view | invalid) +// - noCopy if >= dBytesAttachViewZerocopy +type dBytesAttachState uint8 + +const ( + dBytesAttachInvalid dBytesAttachState = iota + dBytesAttachView // (bytes && !zerocopy && !buf) + dBytesAttachBuffer // (buf) + dBytesAttachViewZerocopy // (bytes && zerocopy && !buf) + dBytesDetach // (!bytes && !buf) +) + +type dBytesIntoState uint8 + +const ( + dBytesIntoNoChange dBytesIntoState = iota + dBytesIntoParamOut + dBytesIntoParamOutSlice + dBytesIntoNew +) + +func (x dBytesAttachState) String() string { + switch x { + case dBytesAttachInvalid: + return "invalid" + case dBytesAttachView: + return "view" + case dBytesAttachBuffer: + return "buffer" + case dBytesAttachViewZerocopy: + return "view-zerocopy" + case dBytesDetach: + return "detach" + } + return "unknown" +} + +const ( + decDefMaxDepth = 1024 // maximum depth + decDefChanCap = 64 // should be large, as cap cannot be expanded + decScratchByteArrayLen = (4 + 3) * 8 // around cacheLineSize ie ~64, depending on Decoder size + + // MARKER: massage decScratchByteArrayLen to ensure xxxDecDriver structs fit within cacheLine*N + + // decFailNonEmptyIntf configures whether we error + // when decoding naked into a non-empty interface. + // + // Typically, we cannot decode non-nil stream value into + // nil interface with methods (e.g. io.Reader). + // However, in some scenarios, this should be allowed: + // - MapType + // - SliceType + // - Extensions + // + // Consequently, we should relax this. Put it behind a const flag for now. + decFailNonEmptyIntf = false + + // decUseTransient says whether we should use the transient optimization. + // + // There's potential for GC corruption or memory overwrites if transient isn't + // used carefully, so this flag helps turn it off quickly if needed. + // + // Use it everywhere needed so we can completely remove unused code blocks. + decUseTransient = true +) + +var ( + errNeedMapOrArrayDecodeToStruct = errors.New("only encoded map or array can decode into struct") + errCannotDecodeIntoNil = errors.New("cannot decode into nil") + + errExpandSliceCannotChange = errors.New("expand slice: cannot change") + + errDecoderNotInitialized = errors.New("Decoder not initialized") + + errDecUnreadByteNothingToRead = errors.New("cannot unread - nothing has been read") + errDecUnreadByteLastByteNotRead = errors.New("cannot unread - last byte has not been read") + errDecUnreadByteUnknown = errors.New("cannot unread - reason unknown") + errMaxDepthExceeded = errors.New("maximum decoding depth exceeded") +) + +type decNotDecodeableReason uint8 + +const ( + decNotDecodeableReasonUnknown decNotDecodeableReason = iota + decNotDecodeableReasonBadKind + decNotDecodeableReasonNonAddrValue + decNotDecodeableReasonNilReference +) + +type decDriverI interface { + + // this will check if the next token is a break. + CheckBreak() bool + + // TryNil tries to decode as nil. + // If a nil is in the stream, it consumes it and returns true. + // + // Note: if TryNil returns true, that must be handled. + TryNil() bool + + // ContainerType returns one of: Bytes, String, Nil, Slice or Map. + // + // Return unSet if not known. + // + // Note: Implementations MUST fully consume sentinel container types, specifically Nil. + ContainerType() (vt valueType) + + // DecodeNaked will decode primitives (number, bool, string, []byte) and RawExt. + // For maps and arrays, it will not do the decoding in-band, but will signal + // the decoder, so that is done later, by setting the fauxUnion.valueType field. + // + // Note: Numbers are decoded as int64, uint64, float64 only (no smaller sized number types). + // for extensions, DecodeNaked must read the tag and the []byte if it exists. + // if the []byte is not read, then kInterfaceNaked will treat it as a Handle + // that stores the subsequent value in-band, and complete reading the RawExt. + // + // extensions should also use readx to decode them, for efficiency. + // kInterface will extract the detached byte slice if it has to pass it outside its realm. + DecodeNaked() + + DecodeInt64() (i int64) + DecodeUint64() (ui uint64) + + DecodeFloat32() (f float32) + DecodeFloat64() (f float64) + + DecodeBool() (b bool) + + // DecodeStringAsBytes returns the bytes representing a string. + // It will return a view into scratch buffer or input []byte (if applicable). + // + // Note: This can also decode symbols, if supported. + // + // Users should consume it right away and not store it for later use. + DecodeStringAsBytes() (v []byte, state dBytesAttachState) + + // DecodeBytes returns the bytes representing a binary value. + // It will return a view into scratch buffer or input []byte (if applicable). + DecodeBytes() (out []byte, state dBytesAttachState) + // DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) + + // DecodeExt will decode into an extension. + // ext is never nil. + DecodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) + // decodeExt(verifyTag bool, tag byte) (xtag byte, xbs []byte) + + // DecodeRawExt will decode into a *RawExt + DecodeRawExt(re *RawExt) + + DecodeTime() (t time.Time) + + // ReadArrayStart will return the length of the array. + // If the format doesn't prefix the length, it returns containerLenUnknown. + // If the expected array was a nil in the stream, it returns containerLenNil. + ReadArrayStart() int + + // ReadMapStart will return the length of the array. + // If the format doesn't prefix the length, it returns containerLenUnknown. + // If the expected array was a nil in the stream, it returns containerLenNil. + ReadMapStart() int + + decDriverContainerTracker + + reset() + + // atEndOfDecode() + + // nextValueBytes will return the bytes representing the next value in the stream. + // It generally will include the last byte read, as that is a part of the next value + // in the stream. + nextValueBytes() []byte + + // descBd will describe the token descriptor that signifies what type was decoded + descBd() string + + // isBytes() bool + + resetInBytes(in []byte) + resetInIO(r io.Reader) + + NumBytesRead() int + + init(h Handle, shared *decoderBase, dec decoderI) (fp interface{}) + + // driverStateManager + decNegintPosintFloatNumber +} + +type decInit2er struct{} + +func (decInit2er) init2(dec decoderI) {} + +type decDriverContainerTracker interface { + ReadArrayElem(firstTime bool) + ReadMapElemKey(firstTime bool) + ReadMapElemValue() + ReadArrayEnd() + ReadMapEnd() +} + +type decNegintPosintFloatNumber interface { + decInteger() (ui uint64, neg, ok bool) + decFloat() (f float64, ok bool) +} + +type decDriverNoopNumberHelper struct{} + +func (x decDriverNoopNumberHelper) decInteger() (ui uint64, neg, ok bool) { + panic("decInteger unsupported") +} +func (x decDriverNoopNumberHelper) decFloat() (f float64, ok bool) { panic("decFloat unsupported") } + +type decDriverNoopContainerReader struct{} + +func (x decDriverNoopContainerReader) ReadArrayStart() (v int) { panic("ReadArrayStart unsupported") } +func (x decDriverNoopContainerReader) ReadMapStart() (v int) { panic("ReadMapStart unsupported") } +func (x decDriverNoopContainerReader) ReadArrayEnd() {} +func (x decDriverNoopContainerReader) ReadMapEnd() {} +func (x decDriverNoopContainerReader) ReadArrayElem(firstTime bool) {} +func (x decDriverNoopContainerReader) ReadMapElemKey(firstTime bool) {} +func (x decDriverNoopContainerReader) ReadMapElemValue() {} +func (x decDriverNoopContainerReader) CheckBreak() (v bool) { return } + +// ---- + +type decFnInfo struct { + ti *typeInfo + xfFn Ext + xfTag uint64 + addrD bool // decoding into a pointer is preferred + addrDf bool // force: if addrD, then decode function MUST take a ptr +} + +// DecodeOptions captures configuration options during decode. +type DecodeOptions struct { + // MapType specifies type to use during schema-less decoding of a map in the stream. + // If nil (unset), we default to map[string]interface{} iff json handle and MapKeyAsString=true, + // else map[interface{}]interface{}. + MapType reflect.Type + + // SliceType specifies type to use during schema-less decoding of an array in the stream. + // If nil (unset), we default to []interface{} for all formats. + SliceType reflect.Type + + // MaxInitLen defines the maxinum initial length that we "make" a collection + // (string, slice, map, chan). If 0 or negative, we default to a sensible value + // based on the size of an element in the collection. + // + // For example, when decoding, a stream may say that it has 2^64 elements. + // We should not auto-matically provision a slice of that size, to prevent Out-Of-Memory crash. + // Instead, we provision up to MaxInitLen, fill that up, and start appending after that. + MaxInitLen int + + // ReaderBufferSize is the size of the buffer used when reading. + // + // if > 0, we use a smart buffer internally for performance purposes. + ReaderBufferSize int + + // MaxDepth defines the maximum depth when decoding nested + // maps and slices. If 0 or negative, we default to a suitably large number (currently 1024). + MaxDepth int16 + + // If ErrorIfNoField, return an error when decoding a map + // from a codec stream into a struct, and no matching struct field is found. + ErrorIfNoField bool + + // If ErrorIfNoArrayExpand, return an error when decoding a slice/array that cannot be expanded. + // For example, the stream contains an array of 8 items, but you are decoding into a [4]T array, + // or you are decoding into a slice of length 4 which is non-addressable (and so cannot be set). + ErrorIfNoArrayExpand bool + + // If SignedInteger, use the int64 during schema-less decoding of unsigned values (not uint64). + SignedInteger bool + + // MapValueReset controls how we decode into a map value. + // + // By default, we MAY retrieve the mapping for a key, and then decode into that. + // However, especially with big maps, that retrieval may be expensive and unnecessary + // if the stream already contains all that is necessary to recreate the value. + // + // If true, we will never retrieve the previous mapping, + // but rather decode into a new value and set that in the map. + // + // If false, we will retrieve the previous mapping if necessary e.g. + // the previous mapping is a pointer, or is a struct or array with pre-set state, + // or is an interface. + MapValueReset bool + + // SliceElementReset: on decoding a slice, reset the element to a zero value first. + // + // concern: if the slice already contained some garbage, we will decode into that garbage. + SliceElementReset bool + + // InterfaceReset controls how we decode into an interface. + // + // By default, when we see a field that is an interface{...}, + // or a map with interface{...} value, we will attempt decoding into the + // "contained" value. + // + // However, this prevents us from reading a string into an interface{} + // that formerly contained a number. + // + // If true, we will decode into a new "blank" value, and set that in the interface. + // If false, we will decode into whatever is contained in the interface. + InterfaceReset bool + + // InternString controls interning of strings during decoding. + // + // Some handles, e.g. json, typically will read map keys as strings. + // If the set of keys are finite, it may help reduce allocation to + // look them up from a map (than to allocate them afresh). + // + // Note: Handles will be smart when using the intern functionality. + // Every string should not be interned. + // An excellent use-case for interning is struct field names, + // or map keys where key type is string. + InternString bool + + // PreferArrayOverSlice controls whether to decode to an array or a slice. + // + // This only impacts decoding into a nil interface{}. + // + // Consequently, it has no effect on codecgen. + // + // *Note*: This only applies if using go1.5 and above, + // as it requires reflect.ArrayOf support which was absent before go1.5. + PreferArrayOverSlice bool + + // DeleteOnNilMapValue controls how to decode a nil value in the stream. + // + // If true, we will delete the mapping of the key. + // Else, just set the mapping to the zero value of the type. + // + // Deprecated: This does NOTHING and is left behind for compiling compatibility. + // This change is necessitated because 'nil' in a stream now consistently + // means the zero value (ie reset the value to its zero state). + DeleteOnNilMapValue bool + + // RawToString controls how raw bytes in a stream are decoded into a nil interface{}. + // By default, they are decoded as []byte, but can be decoded as string (if configured). + RawToString bool + + // ZeroCopy controls whether decoded values of []byte or string type + // point into the input []byte parameter passed to a NewDecoderBytes/ResetBytes(...) call. + // + // To illustrate, if ZeroCopy and decoding from a []byte (not io.Writer), + // then a []byte or string in the output result may just be a slice of (point into) + // the input bytes. + // + // This optimization prevents unnecessary copying. + // + // However, it is made optional, as the caller MUST ensure that the input parameter []byte is + // not modified after the Decode() happens, as any changes are mirrored in the decoded result. + ZeroCopy bool + + // PreferPointerForStructOrArray controls whether a struct or array + // is stored in a nil interface{}, or a pointer to it. + // + // This mostly impacts when we decode registered extensions. + PreferPointerForStructOrArray bool + + // ValidateUnicode controls will cause decoding to fail if an expected unicode + // string is well-formed but include invalid codepoints. + // + // This could have a performance impact. + ValidateUnicode bool +} + +// ---------------------------------------- + +type decoderBase struct { + perType decPerType + + h *BasicHandle + + rtidFn, rtidFnNoExt *atomicRtidFnSlice + + buf []byte + + // used for interning strings + is internerMap + + err error + + // sd decoderI + + blist bytesFreeList + + mtr bool // is maptype a known type? + str bool // is slicetype a known type? + jsms bool // is json handle, and MapKeyAsString + + bytes bool // uses a bytes reader + bufio bool // uses a ioDecReader with buffer size > 0 + + // ---- cpu cache line boundary? + // ---- writable fields during execution --- *try* to keep in sep cache line + maxdepth int16 + depth int16 + + // Extensions can call Decode() within a current Decode() call. + // We need to know when the top level Decode() call returns, + // so we can decide whether to Release() or not. + calls uint16 // what depth in mustDecode are we in now. + + c containerState + + // decByteState + + n fauxUnion + + // b is an always-available scratch buffer used by Decoder and decDrivers. + // By being always-available, it can be used for one-off things without + // having to get from freelist, use, and return back to freelist. + // + // Use it for a narrow set of things e.g. + // - binc uses it for parsing numbers, represented at 8 or less bytes + // - uses as potential buffer for struct field names + b [decScratchByteArrayLen]byte + + hh Handle + // cache the mapTypeId and sliceTypeId for faster comparisons + mtid uintptr + stid uintptr +} + +func (d *decoderBase) maxInitLen() uint { + return uint(max(1024, d.h.MaxInitLen)) +} + +func (d *decoderBase) naked() *fauxUnion { + return &d.n +} + +func (d *decoderBase) fauxUnionReadRawBytes(dr decDriverI, asString, rawToString bool) { //, handleZeroCopy bool) { + // fauxUnion is only used within DecodeNaked calls; consequently, we should try to intern. + d.n.l, d.n.a = dr.DecodeBytes() + if asString || rawToString { + d.n.v = valueTypeString + d.n.s = d.detach2Str(d.n.l, d.n.a) + } else { + d.n.v = valueTypeBytes + d.n.l = d.detach2Bytes(d.n.l, d.n.a) + } +} + +// Return a fixed (detached) string representation of a []byte. +// +// Possibly get an interned version of a string, +// iff InternString=true and decoding a map key. +// +// This should mostly be used for map keys, struct field names, etc +// where the key type is string. This is because keys of a map/struct are +// typically reused across many objects. +func (d *decoderBase) detach2Str(v []byte, state dBytesAttachState) (s string) { + // note: string([]byte) checks - and optimizes - for len 0 and len 1 + if len(v) <= 1 { + s = string(v) + } else if state >= dBytesAttachViewZerocopy { // !scratchBuf && d.bytes && d.h.ZeroCopy + s = stringView(v) + } else if d.is == nil || d.c != containerMapKey || len(v) > internMaxStrLen { + s = string(v) + } else { + s = d.is.string(v) + } + return +} + +func (d *decoderBase) usableStructFieldNameBytes(buf, v []byte, state dBytesAttachState) (out []byte) { + // In JSON, mapElemValue reads a colon and spaces. + // In bufio mode of ioDecReader, fillbuf could overwrite the read buffer + // which readXXX() calls return sub-slices from. + // + // Consequently, we detach the bytes in this special case. + // + // Note: ioDecReader (non-bufio) and bytesDecReader do not have + // this issue (as no fillbuf exists where bytes might be returned from). + if d.bufio && d.h.jsonHandle && state < dBytesAttachViewZerocopy { + if cap(buf) > len(v) { + out = buf[:len(v)] + } else if len(d.b) > len(v) { + out = d.b[:len(v)] + } else { + out = make([]byte, len(v), max(64, len(v))) + } + copy(out, v) + return + } + return v +} + +func (d *decoderBase) detach2Bytes(in []byte, state dBytesAttachState) (out []byte) { + if cap(in) == 0 || state >= dBytesAttachViewZerocopy { + return in + } + if len(in) == 0 { + return zeroByteSlice + } + out = make([]byte, len(in)) + copy(out, in) + return out +} + +func (d *decoderBase) attachState(usingBufFromReader bool) (r dBytesAttachState) { + if usingBufFromReader { + r = dBytesAttachBuffer + } else if !d.bytes { + r = dBytesDetach + } else if d.h.ZeroCopy { + r = dBytesAttachViewZerocopy + } else { + r = dBytesAttachView + } + return +} + +func (d *decoderBase) mapStart(v int) int { + if v != containerLenNil { + d.depthIncr() + d.c = containerMapStart + } + return v +} + +func (d *decoderBase) HandleName() string { + return d.hh.Name() +} + +func (d *decoderBase) isBytes() bool { + return d.bytes +} + +type decoderI interface { + Decode(v interface{}) (err error) + HandleName() string + MustDecode(v interface{}) + NumBytesRead() int + Release() // deprecated + Reset(r io.Reader) + ResetBytes(in []byte) + ResetString(s string) + + isBytes() bool + wrapErr(v error, err *error) + swallow() + + nextValueBytes() []byte // wrapper method, for use in tests + // getDecDriver() decDriverI + + decode(v interface{}) + decodeAs(v interface{}, t reflect.Type, ext bool) + + interfaceExtConvertAndDecode(v interface{}, ext InterfaceExt) +} + +var errDecNoResetBytesWithReader = errors.New("cannot reset an Decoder reading from []byte with a io.Reader") +var errDecNoResetReaderWithBytes = errors.New("cannot reset an Decoder reading from io.Reader with a []byte") + +func setZero(iv interface{}) { + rv, isnil := isNil(iv, false) + if isnil { + return + } + if !rv.IsValid() { + rv = reflect.ValueOf(iv) + } + if isnilBitset.isset(byte(rv.Kind())) && rvIsNil(rv) { + return + } + // var canDecode bool + switch v := iv.(type) { + case *string: + *v = "" + case *bool: + *v = false + case *int: + *v = 0 + case *int8: + *v = 0 + case *int16: + *v = 0 + case *int32: + *v = 0 + case *int64: + *v = 0 + case *uint: + *v = 0 + case *uint8: + *v = 0 + case *uint16: + *v = 0 + case *uint32: + *v = 0 + case *uint64: + *v = 0 + case *float32: + *v = 0 + case *float64: + *v = 0 + case *complex64: + *v = 0 + case *complex128: + *v = 0 + case *[]byte: + *v = nil + case *Raw: + *v = nil + case *time.Time: + *v = time.Time{} + case reflect.Value: + decSetNonNilRV2Zero(v) + default: + if !fastpathDecodeSetZeroTypeSwitch(iv) { + decSetNonNilRV2Zero(rv) + } + } +} + +// decSetNonNilRV2Zero will set the non-nil value to its zero value. +func decSetNonNilRV2Zero(v reflect.Value) { + // If not decodeable (settable), we do not touch it. + // We considered empty'ing it if not decodeable e.g. + // - if chan, drain it + // - if map, clear it + // - if slice or array, zero all elements up to len + // + // However, we decided instead that we either will set the + // whole value to the zero value, or leave AS IS. + + k := v.Kind() + if k == reflect.Interface { + decSetNonNilRV2Zero4Intf(v) + } else if k == reflect.Ptr { + decSetNonNilRV2Zero4Ptr(v) + } else if v.CanSet() { + rvSetDirectZero(v) + } +} + +func decSetNonNilRV2Zero4Ptr(v reflect.Value) { + ve := v.Elem() + if ve.CanSet() { + rvSetZero(ve) // we can have a pointer to an interface + } else if v.CanSet() { + rvSetZero(v) + } +} + +func decSetNonNilRV2Zero4Intf(v reflect.Value) { + ve := v.Elem() + if ve.CanSet() { + rvSetDirectZero(ve) // interfaces always have element as a non-interface + } else if v.CanSet() { + rvSetZero(v) + } +} + +func (d *decoderBase) arrayCannotExpand(sliceLen, streamLen int) { + if d.h.ErrorIfNoArrayExpand { + halt.errorf("cannot expand array len during decode from %v to %v", any(sliceLen), any(streamLen)) + } +} + +//go:noinline +func (d *decoderBase) haltAsNotDecodeable(rv reflect.Value) { + if !rv.IsValid() { + halt.onerror(errCannotDecodeIntoNil) + } + // check if an interface can be retrieved, before grabbing an interface + if !rv.CanInterface() { + halt.errorf("cannot decode into a value without an interface: %v", rv) + } + halt.errorf("cannot decode into value of kind: %v, %#v", rv.Kind(), rv2i(rv)) +} + +func (d *decoderBase) depthIncr() { + d.depth++ + if d.depth >= d.maxdepth { + halt.onerror(errMaxDepthExceeded) + } +} + +func (d *decoderBase) depthDecr() { + d.depth-- +} + +func (d *decoderBase) arrayStart(v int) int { + if v != containerLenNil { + d.depthIncr() + d.c = containerArrayStart + } + return v +} + +func (d *decoderBase) oneShotAddrRV(rvt reflect.Type, rvk reflect.Kind) reflect.Value { + // MARKER 2025: is this slow for calling oneShot? + if decUseTransient && d.h.getTypeInfo4RT(baseRT(rvt)).flagCanTransient { + return d.perType.TransientAddrK(rvt, rvk) + } + return rvZeroAddrK(rvt, rvk) +} + +// decNegintPosintFloatNumberHelper is used for formats that are binary +// and have distinct ways of storing positive integers vs negative integers +// vs floats, which are uniquely identified by the byte descriptor. +// +// Currently, these formats are binc, cbor and simple. +type decNegintPosintFloatNumberHelper struct { + d decDriverI +} + +func (x decNegintPosintFloatNumberHelper) uint64(ui uint64, neg, ok bool) uint64 { + if ok && !neg { + return ui + } + return x.uint64TryFloat(ok) +} + +func (x decNegintPosintFloatNumberHelper) uint64TryFloat(neg bool) (ui uint64) { + if neg { // neg = true + halt.errorStr("assigning negative signed value to unsigned type") + } + f, ok := x.d.decFloat() + if !(ok && f >= 0 && noFrac64(math.Float64bits(f))) { + halt.errorStr2("invalid number loading uint64, with descriptor: ", x.d.descBd()) + } + return uint64(f) +} + +func (x decNegintPosintFloatNumberHelper) int64(ui uint64, neg, ok, cbor bool) (i int64) { + if ok { + return decNegintPosintFloatNumberHelperInt64v(ui, neg, cbor) + } + // return x.int64TryFloat() + // } + // func (x decNegintPosintFloatNumberHelper) int64TryFloat() (i int64) { + f, ok := x.d.decFloat() + if !(ok && noFrac64(math.Float64bits(f))) { + halt.errorf("invalid number loading uint64 (%v), with descriptor: %s", f, x.d.descBd()) + } + return int64(f) +} + +func (x decNegintPosintFloatNumberHelper) float64(f float64, ok, cbor bool) float64 { + if ok { + return f + } + return x.float64TryInteger(cbor) +} + +func (x decNegintPosintFloatNumberHelper) float64TryInteger(cbor bool) float64 { + ui, neg, ok := x.d.decInteger() + if !ok { + halt.errorStr2("invalid descriptor for float: ", x.d.descBd()) + } + return float64(decNegintPosintFloatNumberHelperInt64v(ui, neg, cbor)) +} + +func decNegintPosintFloatNumberHelperInt64v(ui uint64, neg, incrIfNeg bool) (i int64) { + if neg && incrIfNeg { + ui++ + } + i = chkOvf.SignedIntV(ui) + if neg { + i = -i + } + return +} + +// isDecodeable checks if value can be decoded into +// +// decode can take any reflect.Value that is a inherently addressable i.e. +// - non-nil chan (we will SEND to it) +// - non-nil slice (we will set its elements) +// - non-nil map (we will put into it) +// - non-nil pointer (we can "update" it) +// - func: no +// - interface: no +// - array: if canAddr=true +// - any other value pointer: if canAddr=true +func isDecodeable(rv reflect.Value) (canDecode bool, reason decNotDecodeableReason) { + switch rv.Kind() { + case reflect.Ptr, reflect.Slice, reflect.Chan, reflect.Map: + canDecode = !rvIsNil(rv) + reason = decNotDecodeableReasonNilReference + case reflect.Func, reflect.Interface, reflect.Invalid, reflect.UnsafePointer: + reason = decNotDecodeableReasonBadKind + default: + canDecode = rv.CanAddr() + reason = decNotDecodeableReasonNonAddrValue + } + return +} + +// decInferLen will infer a sensible length, given the following: +// - clen: length wanted. +// - maxlen: max length to be returned. +// if <= 0, it is unset, and we infer it based on the unit size +// - unit: number of bytes for each element of the collection +func decInferLen(clen int, maxlen, unit uint) (n uint) { + // anecdotal testing showed increase in allocation with map length of 16. + // We saw same typical alloc from 0-8, then a 20% increase at 16. + // Thus, we set it to 8. + + const ( + minLenIfUnset = 8 + maxMem = 1024 * 1024 // 1 MB Memory + ) + + // handle when maxlen is not set i.e. <= 0 + + // clen==0: use 0 + // maxlen<=0, clen<0: use default + // maxlen> 0, clen<0: use default + // maxlen<=0, clen>0: infer maxlen, and cap on it + // maxlen> 0, clen>0: cap at maxlen + + if clen == 0 || clen == containerLenNil { + return 0 + } + if clen < 0 { + // if unspecified, return 64 for bytes, ... 8 for uint64, ... and everything else + return max(64/unit, minLenIfUnset) + } + if unit == 0 { + return uint(clen) + } + if maxlen == 0 { + maxlen = maxMem / unit + } + return min(uint(clen), maxlen) +} + +type Decoder struct { + decoderI +} + +// NewDecoder returns a Decoder for decoding a stream of bytes from an io.Reader. +// +// For efficiency, Users are encouraged to configure ReaderBufferSize on the handle +// OR pass in a memory buffered reader (eg bufio.Reader, bytes.Buffer). +func NewDecoder(r io.Reader, h Handle) *Decoder { + return &Decoder{h.newDecoder(r)} +} + +// NewDecoderBytes returns a Decoder which efficiently decodes directly +// from a byte slice with zero copying. +func NewDecoderBytes(in []byte, h Handle) *Decoder { + return &Decoder{h.newDecoderBytes(in)} +} + +// NewDecoderString returns a Decoder which efficiently decodes directly +// from a string with zero copying. +// +// It is a convenience function that calls NewDecoderBytes with a +// []byte view into the string. +// +// This can be an efficient zero-copy if using default mode i.e. without codec.safe tag. +func NewDecoderString(s string, h Handle) *Decoder { + return NewDecoderBytes(bytesView(s), h) +} + +// ---- + +func sideDecode(h Handle, p *sync.Pool, fn func(decoderI)) { + var s decoderI + if usePoolForSideDecode { + s = p.Get().(decoderI) + defer p.Put(s) + } else { + // initialization cycle error + // s = NewDecoderBytes(nil, h).decoderI + s = p.New().(decoderI) + } + fn(s) +} + +func oneOffDecode(sd decoderI, v interface{}, in []byte, basetype reflect.Type, ext bool) { + sd.ResetBytes(in) + sd.decodeAs(v, basetype, ext) + // d.sideDecoder(xbs) + // d.sideDecode(rv, basetype) +} + +func bytesOKdbi(v []byte, _ dBytesIntoState) []byte { + return v +} + +func bytesOKs(bs []byte, _ dBytesAttachState) []byte { + return bs +} diff --git a/vendor/github.com/ugorji/go/codec/decode.go b/vendor/github.com/ugorji/go/codec/decode.go index f98c8ff..eedea89 100644 --- a/vendor/github.com/ugorji/go/codec/decode.go +++ b/vendor/github.com/ugorji/go/codec/decode.go @@ -1,3 +1,5 @@ +//go:build notmono || codec.notmono + // Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. // Use of this source code is governed by a MIT license found in the LICENSE file. @@ -5,473 +7,163 @@ package codec import ( "encoding" - "errors" "io" - "math" "reflect" "strconv" + "sync" "time" ) -const msgBadDesc = "unrecognized descriptor byte" - -const ( - decDefMaxDepth = 1024 // maximum depth - decDefChanCap = 64 // should be large, as cap cannot be expanded - decScratchByteArrayLen = (8 + 2 + 2 + 1) * 8 // around cacheLineSize ie ~64, depending on Decoder size - - // MARKER: massage decScratchByteArrayLen to ensure xxxDecDriver structs fit within cacheLine*N - - // decFailNonEmptyIntf configures whether we error - // when decoding naked into a non-empty interface. - // - // Typically, we cannot decode non-nil stream value into - // nil interface with methods (e.g. io.Reader). - // However, in some scenarios, this should be allowed: - // - MapType - // - SliceType - // - Extensions - // - // Consequently, we should relax this. Put it behind a const flag for now. - decFailNonEmptyIntf = false - - // decUseTransient says that we should not use the transient optimization. - // - // There's potential for GC corruption or memory overwrites if transient isn't - // used carefully, so this flag helps turn it off quickly if needed. - // - // Use it everywhere needed so we can completely remove unused code blocks. - decUseTransient = true -) - -var ( - errNeedMapOrArrayDecodeToStruct = errors.New("only encoded map or array can decode into struct") - errCannotDecodeIntoNil = errors.New("cannot decode into nil") - - errExpandSliceCannotChange = errors.New("expand slice: cannot change") - - errDecoderNotInitialized = errors.New("Decoder not initialized") - - errDecUnreadByteNothingToRead = errors.New("cannot unread - nothing has been read") - errDecUnreadByteLastByteNotRead = errors.New("cannot unread - last byte has not been read") - errDecUnreadByteUnknown = errors.New("cannot unread - reason unknown") - errMaxDepthExceeded = errors.New("maximum decoding depth exceeded") -) - -// decByteState tracks where the []byte returned by the last call -// to DecodeBytes or DecodeStringAsByte came from -type decByteState uint8 - -const ( - decByteStateNone decByteState = iota - decByteStateZerocopy // view into []byte that we are decoding from - decByteStateReuseBuf // view into transient buffer used internally by decDriver - // decByteStateNewAlloc -) - -type decNotDecodeableReason uint8 - -const ( - decNotDecodeableReasonUnknown decNotDecodeableReason = iota - decNotDecodeableReasonBadKind - decNotDecodeableReasonNonAddrValue - decNotDecodeableReasonNilReference -) - -type decDriver interface { - // this will check if the next token is a break. - CheckBreak() bool - - // TryNil tries to decode as nil. - // If a nil is in the stream, it consumes it and returns true. - // - // Note: if TryNil returns true, that must be handled. - TryNil() bool - - // ContainerType returns one of: Bytes, String, Nil, Slice or Map. - // - // Return unSet if not known. - // - // Note: Implementations MUST fully consume sentinel container types, specifically Nil. - ContainerType() (vt valueType) - - // DecodeNaked will decode primitives (number, bool, string, []byte) and RawExt. - // For maps and arrays, it will not do the decoding in-band, but will signal - // the decoder, so that is done later, by setting the fauxUnion.valueType field. - // - // Note: Numbers are decoded as int64, uint64, float64 only (no smaller sized number types). - // for extensions, DecodeNaked must read the tag and the []byte if it exists. - // if the []byte is not read, then kInterfaceNaked will treat it as a Handle - // that stores the subsequent value in-band, and complete reading the RawExt. - // - // extensions should also use readx to decode them, for efficiency. - // kInterface will extract the detached byte slice if it has to pass it outside its realm. - DecodeNaked() - - DecodeInt64() (i int64) - DecodeUint64() (ui uint64) - - DecodeFloat64() (f float64) - DecodeBool() (b bool) - - // DecodeStringAsBytes returns the bytes representing a string. - // It will return a view into scratch buffer or input []byte (if applicable). - // - // Note: This can also decode symbols, if supported. - // - // Users should consume it right away and not store it for later use. - DecodeStringAsBytes() (v []byte) - - // DecodeBytes returns the bytes representing a binary value. - // It will return a view into scratch buffer or input []byte (if applicable). - // - // All implementations must honor the contract below: - // if ZeroCopy and applicable, return a view into input []byte we are decoding from - // else if in == nil, return a view into scratch buffer - // else append decoded value to in[:0] and return that - // (this can be simulated by passing []byte{} as in parameter) - // - // Implementations must also update Decoder.decByteState on each call to - // DecodeBytes or DecodeStringAsBytes. Some callers may check that and work appropriately. - // - // Note: DecodeBytes may decode past the length of the passed byte slice, up to the cap. - // Consequently, it is ok to pass a zero-len slice to DecodeBytes, as the returned - // byte slice will have the appropriate length. - DecodeBytes(in []byte) (out []byte) - // DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) - - // DecodeExt will decode into a *RawExt or into an extension. - DecodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) - // decodeExt(verifyTag bool, tag byte) (xtag byte, xbs []byte) - - DecodeTime() (t time.Time) - - // ReadArrayStart will return the length of the array. - // If the format doesn't prefix the length, it returns containerLenUnknown. - // If the expected array was a nil in the stream, it returns containerLenNil. - ReadArrayStart() int - - // ReadMapStart will return the length of the array. - // If the format doesn't prefix the length, it returns containerLenUnknown. - // If the expected array was a nil in the stream, it returns containerLenNil. - ReadMapStart() int - - reset() +type helperDecDriver[T decDriver] struct{} - // atEndOfDecode() - - // nextValueBytes will return the bytes representing the next value in the stream. - // - // if start is nil, then treat it as a request to discard the next set of bytes, - // and the return response does not matter. - // Typically, this means that the returned []byte is nil/empty/undefined. - // - // Optimize for decoding from a []byte, where the nextValueBytes will just be a sub-slice - // of the input slice. Callers that need to use this to not be a view into the input bytes - // should handle it appropriately. - nextValueBytes(start []byte) []byte - - // descBd will describe the token descriptor that signifies what type was decoded - descBd() string - - decoder() *Decoder - - driverStateManager - decNegintPosintFloatNumber -} - -type decDriverContainerTracker interface { - ReadArrayElem() - ReadMapElemKey() - ReadMapElemValue() - ReadArrayEnd() - ReadMapEnd() +// decFn encapsulates the captured variables and the encode function. +// This way, we only do some calculations one times, and pass to the +// code block that should be called (encapsulated in a function) +// instead of executing the checks every time. +type decFn[T decDriver] struct { + i decFnInfo + fd func(*decoder[T], *decFnInfo, reflect.Value) + // _ [1]uint64 // padding (cache-aligned) } -type decNegintPosintFloatNumber interface { - decInteger() (ui uint64, neg, ok bool) - decFloat() (f float64, ok bool) +type decRtidFn[T decDriver] struct { + rtid uintptr + fn *decFn[T] } -type decDriverNoopNumberHelper struct{} - -func (x decDriverNoopNumberHelper) decInteger() (ui uint64, neg, ok bool) { - panic("decInteger unsupported") -} -func (x decDriverNoopNumberHelper) decFloat() (f float64, ok bool) { panic("decFloat unsupported") } - -type decDriverNoopContainerReader struct{} - -// func (x decDriverNoopContainerReader) ReadArrayStart() (v int) { panic("ReadArrayStart unsupported") } -// func (x decDriverNoopContainerReader) ReadMapStart() (v int) { panic("ReadMapStart unsupported") } -func (x decDriverNoopContainerReader) ReadArrayEnd() {} -func (x decDriverNoopContainerReader) ReadMapEnd() {} -func (x decDriverNoopContainerReader) CheckBreak() (v bool) { return } - -// DecodeOptions captures configuration options during decode. -type DecodeOptions struct { - // MapType specifies type to use during schema-less decoding of a map in the stream. - // If nil (unset), we default to map[string]interface{} iff json handle and MapKeyAsString=true, - // else map[interface{}]interface{}. - MapType reflect.Type - - // SliceType specifies type to use during schema-less decoding of an array in the stream. - // If nil (unset), we default to []interface{} for all formats. - SliceType reflect.Type - - // MaxInitLen defines the maxinum initial length that we "make" a collection - // (string, slice, map, chan). If 0 or negative, we default to a sensible value - // based on the size of an element in the collection. - // - // For example, when decoding, a stream may say that it has 2^64 elements. - // We should not auto-matically provision a slice of that size, to prevent Out-Of-Memory crash. - // Instead, we provision up to MaxInitLen, fill that up, and start appending after that. - MaxInitLen int - - // ReaderBufferSize is the size of the buffer used when reading. - // - // if > 0, we use a smart buffer internally for performance purposes. - ReaderBufferSize int - - // MaxDepth defines the maximum depth when decoding nested - // maps and slices. If 0 or negative, we default to a suitably large number (currently 1024). - MaxDepth int16 - - // If ErrorIfNoField, return an error when decoding a map - // from a codec stream into a struct, and no matching struct field is found. - ErrorIfNoField bool - - // If ErrorIfNoArrayExpand, return an error when decoding a slice/array that cannot be expanded. - // For example, the stream contains an array of 8 items, but you are decoding into a [4]T array, - // or you are decoding into a slice of length 4 which is non-addressable (and so cannot be set). - ErrorIfNoArrayExpand bool - - // If SignedInteger, use the int64 during schema-less decoding of unsigned values (not uint64). - SignedInteger bool - - // MapValueReset controls how we decode into a map value. - // - // By default, we MAY retrieve the mapping for a key, and then decode into that. - // However, especially with big maps, that retrieval may be expensive and unnecessary - // if the stream already contains all that is necessary to recreate the value. - // - // If true, we will never retrieve the previous mapping, - // but rather decode into a new value and set that in the map. - // - // If false, we will retrieve the previous mapping if necessary e.g. - // the previous mapping is a pointer, or is a struct or array with pre-set state, - // or is an interface. - MapValueReset bool - - // SliceElementReset: on decoding a slice, reset the element to a zero value first. - // - // concern: if the slice already contained some garbage, we will decode into that garbage. - SliceElementReset bool - - // InterfaceReset controls how we decode into an interface. - // - // By default, when we see a field that is an interface{...}, - // or a map with interface{...} value, we will attempt decoding into the - // "contained" value. - // - // However, this prevents us from reading a string into an interface{} - // that formerly contained a number. - // - // If true, we will decode into a new "blank" value, and set that in the interface. - // If false, we will decode into whatever is contained in the interface. - InterfaceReset bool - - // InternString controls interning of strings during decoding. - // - // Some handles, e.g. json, typically will read map keys as strings. - // If the set of keys are finite, it may help reduce allocation to - // look them up from a map (than to allocate them afresh). - // - // Note: Handles will be smart when using the intern functionality. - // Every string should not be interned. - // An excellent use-case for interning is struct field names, - // or map keys where key type is string. - InternString bool - - // PreferArrayOverSlice controls whether to decode to an array or a slice. - // - // This only impacts decoding into a nil interface{}. - // - // Consequently, it has no effect on codecgen. - // - // *Note*: This only applies if using go1.5 and above, - // as it requires reflect.ArrayOf support which was absent before go1.5. - PreferArrayOverSlice bool - - // DeleteOnNilMapValue controls how to decode a nil value in the stream. - // - // If true, we will delete the mapping of the key. - // Else, just set the mapping to the zero value of the type. - // - // Deprecated: This does NOTHING and is left behind for compiling compatibility. - // This change is necessitated because 'nil' in a stream now consistently - // means the zero value (ie reset the value to its zero state). - DeleteOnNilMapValue bool - - // RawToString controls how raw bytes in a stream are decoded into a nil interface{}. - // By default, they are decoded as []byte, but can be decoded as string (if configured). - RawToString bool - - // ZeroCopy controls whether decoded values of []byte or string type - // point into the input []byte parameter passed to a NewDecoderBytes/ResetBytes(...) call. - // - // To illustrate, if ZeroCopy and decoding from a []byte (not io.Writer), - // then a []byte or string in the output result may just be a slice of (point into) - // the input bytes. - // - // This optimization prevents unnecessary copying. - // - // However, it is made optional, as the caller MUST ensure that the input parameter []byte is - // not modified after the Decode() happens, as any changes are mirrored in the decoded result. - ZeroCopy bool - - // PreferPointerForStructOrArray controls whether a struct or array - // is stored in a nil interface{}, or a pointer to it. - // - // This mostly impacts when we decode registered extensions. - PreferPointerForStructOrArray bool +// ---- - // ValidateUnicode controls will cause decoding to fail if an expected unicode - // string is well-formed but include invalid codepoints. - // - // This could have a performance impact. - ValidateUnicode bool +// Decoder reads and decodes an object from an input stream in a supported format. +// +// Decoder is NOT safe for concurrent use i.e. a Decoder cannot be used +// concurrently in multiple goroutines. +// +// However, as Decoder could be allocation heavy to initialize, a Reset method is provided +// so its state can be reused to decode new input streams repeatedly. +// This is the idiomatic way to use. +type decoder[T decDriver] struct { + dh helperDecDriver[T] + fp *fastpathDs[T] + d T + decoderBase } -// ---------------------------------------- - -func (d *Decoder) rawExt(f *codecFnInfo, rv reflect.Value) { - d.d.DecodeExt(rv2i(rv), f.ti.rt, 0, nil) +func (d *decoder[T]) rawExt(f *decFnInfo, rv reflect.Value) { + d.d.DecodeRawExt(rv2i(rv).(*RawExt)) } -func (d *Decoder) ext(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) ext(f *decFnInfo, rv reflect.Value) { d.d.DecodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) } -func (d *Decoder) selferUnmarshal(f *codecFnInfo, rv reflect.Value) { - rv2i(rv).(Selfer).CodecDecodeSelf(d) +func (d *decoder[T]) selferUnmarshal(_ *decFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecDecodeSelf(&Decoder{d}) } -func (d *Decoder) binaryUnmarshal(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) binaryUnmarshal(_ *decFnInfo, rv reflect.Value) { bm := rv2i(rv).(encoding.BinaryUnmarshaler) - xbs := d.d.DecodeBytes(nil) + xbs, _ := d.d.DecodeBytes() fnerr := bm.UnmarshalBinary(xbs) - d.onerror(fnerr) + halt.onerror(fnerr) } -func (d *Decoder) textUnmarshal(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) textUnmarshal(_ *decFnInfo, rv reflect.Value) { tm := rv2i(rv).(encoding.TextUnmarshaler) - fnerr := tm.UnmarshalText(d.d.DecodeStringAsBytes()) - d.onerror(fnerr) + fnerr := tm.UnmarshalText(bytesOKs(d.d.DecodeStringAsBytes())) + halt.onerror(fnerr) } -func (d *Decoder) jsonUnmarshal(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) jsonUnmarshal(_ *decFnInfo, rv reflect.Value) { d.jsonUnmarshalV(rv2i(rv).(jsonUnmarshaler)) } -func (d *Decoder) jsonUnmarshalV(tm jsonUnmarshaler) { +func (d *decoder[T]) jsonUnmarshalV(tm jsonUnmarshaler) { // grab the bytes to be read, as UnmarshalJSON needs the full JSON so as to unmarshal it itself. - var bs0 = []byte{} - if !d.bytes { - bs0 = d.blist.get(256) - } - bs := d.d.nextValueBytes(bs0) - fnerr := tm.UnmarshalJSON(bs) - if !d.bytes { - d.blist.put(bs) - if !byteSliceSameData(bs0, bs) { - d.blist.put(bs0) - } - } - d.onerror(fnerr) + halt.onerror(tm.UnmarshalJSON(d.d.nextValueBytes())) } -func (d *Decoder) kErr(f *codecFnInfo, rv reflect.Value) { - d.errorf("no decoding function defined for kind %v", rv.Kind()) +func (d *decoder[T]) kErr(_ *decFnInfo, rv reflect.Value) { + halt.errorf("unsupported decoding kind: %s, for %#v", rv.Kind(), rv) + // halt.errorStr2("no decoding function defined for kind: ", rv.Kind().String()) } -func (d *Decoder) raw(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) raw(_ *decFnInfo, rv reflect.Value) { rvSetBytes(rv, d.rawBytes()) } -func (d *Decoder) kString(f *codecFnInfo, rv reflect.Value) { - rvSetString(rv, d.stringZC(d.d.DecodeStringAsBytes())) +func (d *decoder[T]) kString(_ *decFnInfo, rv reflect.Value) { + rvSetString(rv, d.detach2Str(d.d.DecodeStringAsBytes())) } -func (d *Decoder) kBool(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kBool(_ *decFnInfo, rv reflect.Value) { rvSetBool(rv, d.d.DecodeBool()) } -func (d *Decoder) kTime(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kTime(_ *decFnInfo, rv reflect.Value) { rvSetTime(rv, d.d.DecodeTime()) } -func (d *Decoder) kFloat32(f *codecFnInfo, rv reflect.Value) { - rvSetFloat32(rv, d.decodeFloat32()) +func (d *decoder[T]) kFloat32(_ *decFnInfo, rv reflect.Value) { + rvSetFloat32(rv, d.d.DecodeFloat32()) } -func (d *Decoder) kFloat64(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kFloat64(_ *decFnInfo, rv reflect.Value) { rvSetFloat64(rv, d.d.DecodeFloat64()) } -func (d *Decoder) kComplex64(f *codecFnInfo, rv reflect.Value) { - rvSetComplex64(rv, complex(d.decodeFloat32(), 0)) +func (d *decoder[T]) kComplex64(_ *decFnInfo, rv reflect.Value) { + rvSetComplex64(rv, complex(d.d.DecodeFloat32(), 0)) } -func (d *Decoder) kComplex128(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kComplex128(_ *decFnInfo, rv reflect.Value) { rvSetComplex128(rv, complex(d.d.DecodeFloat64(), 0)) } -func (d *Decoder) kInt(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kInt(_ *decFnInfo, rv reflect.Value) { rvSetInt(rv, int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))) } -func (d *Decoder) kInt8(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kInt8(_ *decFnInfo, rv reflect.Value) { rvSetInt8(rv, int8(chkOvf.IntV(d.d.DecodeInt64(), 8))) } -func (d *Decoder) kInt16(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kInt16(_ *decFnInfo, rv reflect.Value) { rvSetInt16(rv, int16(chkOvf.IntV(d.d.DecodeInt64(), 16))) } -func (d *Decoder) kInt32(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kInt32(_ *decFnInfo, rv reflect.Value) { rvSetInt32(rv, int32(chkOvf.IntV(d.d.DecodeInt64(), 32))) } -func (d *Decoder) kInt64(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kInt64(_ *decFnInfo, rv reflect.Value) { rvSetInt64(rv, d.d.DecodeInt64()) } -func (d *Decoder) kUint(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kUint(_ *decFnInfo, rv reflect.Value) { rvSetUint(rv, uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) } -func (d *Decoder) kUintptr(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kUintptr(_ *decFnInfo, rv reflect.Value) { rvSetUintptr(rv, uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) } -func (d *Decoder) kUint8(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kUint8(_ *decFnInfo, rv reflect.Value) { rvSetUint8(rv, uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))) } -func (d *Decoder) kUint16(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kUint16(_ *decFnInfo, rv reflect.Value) { rvSetUint16(rv, uint16(chkOvf.UintV(d.d.DecodeUint64(), 16))) } -func (d *Decoder) kUint32(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kUint32(_ *decFnInfo, rv reflect.Value) { rvSetUint32(rv, uint32(chkOvf.UintV(d.d.DecodeUint64(), 32))) } -func (d *Decoder) kUint64(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kUint64(_ *decFnInfo, rv reflect.Value) { rvSetUint64(rv, d.d.DecodeUint64()) } -func (d *Decoder) kInterfaceNaked(f *codecFnInfo) (rvn reflect.Value) { +func (d *decoder[T]) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) { // nil interface: // use some hieristics to decode it appropriately // based on the detected next value in the stream. @@ -486,8 +178,12 @@ func (d *Decoder) kInterfaceNaked(f *codecFnInfo) (rvn reflect.Value) { // // Consequently, we should relax this. Put it behind a const flag for now. if decFailNonEmptyIntf && f.ti.numMeth > 0 { - d.errorf("cannot decode non-nil codec value into nil %v (%v methods)", f.ti.rt, f.ti.numMeth) + halt.errorf("cannot decode non-nil codec value into nil %v (%v methods)", f.ti.rt, f.ti.numMeth) } + + // We generally make a pointer to the container here, and pass along, + // so that they will be initialized later when we know the length of the collection. + switch n.v { case valueTypeMap: mtid := d.mtid @@ -511,6 +207,9 @@ func (d *Decoder) kInterfaceNaked(f *codecFnInfo) (rvn reflect.Value) { d.decode(rv2i(rvn)) rvn = rvn.Elem() } else { + // // made map is fully initialized for direct modification. + // // There's no need to make a pointer to it first. + // rvn = makeMapReflect(d.h.MapType, 0) rvn = rvZeroAddrK(d.h.MapType, reflect.Map) d.decodeValue(rvn, nil) } @@ -527,7 +226,7 @@ func (d *Decoder) kInterfaceNaked(f *codecFnInfo) (rvn reflect.Value) { rvn = rvZeroAddrK(d.h.SliceType, reflect.Slice) d.decodeValue(rvn, nil) } - if reflectArrayOfSupported && d.h.PreferArrayOverSlice { + if d.h.PreferArrayOverSlice { rvn = rvGetArray4Slice(rvn) } case valueTypeExt: @@ -535,20 +234,18 @@ func (d *Decoder) kInterfaceNaked(f *codecFnInfo) (rvn reflect.Value) { bfn := d.h.getExtForTag(tag) var re = RawExt{Tag: tag} if bytes == nil { - // it is one of the InterfaceExt ones: json and cbor. - // most likely cbor, as json decoding never reveals valueTypeExt (no tagging support) + // one of the InterfaceExt ones: json and cbor. + // (likely cbor, as json has no tagging support and won't reveal valueTypeExt) if bfn == nil { d.decode(&re.Value) rvn = rv4iptr(&re).Elem() + } else if bfn.ext == SelfExt { + rvn = rvZeroAddrK(bfn.rt, bfn.rt.Kind()) + d.decodeValue(rvn, d.fnNoExt(bfn.rt)) } else { - if bfn.ext == SelfExt { - rvn = rvZeroAddrK(bfn.rt, bfn.rt.Kind()) - d.decodeValue(rvn, d.h.fnNoExt(bfn.rt)) - } else { - rvn = reflect.New(bfn.rt) - d.interfaceExtConvertAndDecode(rv2i(rvn), bfn.ext) - rvn = rvn.Elem() - } + rvn = reflect.New(bfn.rt) + d.interfaceExtConvertAndDecode(rv2i(rvn), bfn.ext) + rvn = rvn.Elem() } } else { // one of the BytesExt ones: binc, msgpack, simple @@ -558,7 +255,7 @@ func (d *Decoder) kInterfaceNaked(f *codecFnInfo) (rvn reflect.Value) { } else { rvn = reflect.New(bfn.rt) if bfn.ext == SelfExt { - d.sideDecode(rv2i(rvn), bfn.rt, bytes) + sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) }) } else { bfn.ext.ReadExt(rv2i(rvn), bytes) } @@ -589,12 +286,12 @@ func (d *Decoder) kInterfaceNaked(f *codecFnInfo) (rvn reflect.Value) { case valueTypeTime: rvn = n.rt() default: - halt.errorf("kInterfaceNaked: unexpected valueType: %d", n.v) + halt.errorStr2("kInterfaceNaked: unexpected valueType: ", n.v.String()) } return } -func (d *Decoder) kInterface(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kInterface(f *decFnInfo, rv reflect.Value) { // Note: A consequence of how kInterface works, is that // if an interface already contains something, we try // to decode into what was there before. @@ -653,30 +350,78 @@ func (d *Decoder) kInterface(f *codecFnInfo, rv reflect.Value) { rvSetIntf(rv, rvn) } -func decStructFieldKeyNotString(dd decDriver, keyType valueType, b *[decScratchByteArrayLen]byte) (rvkencname []byte) { - if keyType == valueTypeInt { - rvkencname = strconv.AppendInt(b[:0], dd.DecodeInt64(), 10) - } else if keyType == valueTypeUint { - rvkencname = strconv.AppendUint(b[:0], dd.DecodeUint64(), 10) - } else if keyType == valueTypeFloat { - rvkencname = strconv.AppendFloat(b[:0], dd.DecodeFloat64(), 'f', -1, 64) +func (d *decoder[T]) kStructField(si *structFieldInfo, rv reflect.Value) { + if d.d.TryNil() { + rv = si.fieldNoAlloc(rv, true) + if rv.IsValid() { + decSetNonNilRV2Zero(rv) + } + } else if si.decBuiltin { + rv = rvAddr(si.fieldAlloc(rv), si.ptrTyp) + d.decode(rv2i(rv)) } else { - halt.errorf("invalid struct key type: %v", keyType) + fn := d.fn(si.baseTyp) + rv = si.fieldAlloc(rv) + if fn.i.addrD { + rv = rvAddr(rv, si.ptrTyp) + } + fn.fd(d, &fn.i, rv) } - return } -func (d *Decoder) kStructField(si *structFieldInfo, rv reflect.Value) { - if d.d.TryNil() { - if rv = si.path.field(rv); rv.IsValid() { - decSetNonNilRV2Zero(rv) +func (d *decoder[T]) kStructSimple(f *decFnInfo, rv reflect.Value) { + _ = d.d // early asserts d, d.d are not nil once + ctyp := d.d.ContainerType() + ti := f.ti + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return } - return + hasLen := containerLen >= 0 + var rvkencname []byte + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + // Not much gain from doing it two ways for array (used less frequently than structs). + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + // iterate all the items in the stream. + // - if mapped elem-wise to a field, handle it + // - if more stream items than can be mapped, error it + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) } - d.decodeValueNoCheckNil(si.path.fieldAlloc(rv), nil) } -func (d *Decoder) kStruct(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kStruct(f *decFnInfo, rv reflect.Value) { + _ = d.d // early asserts d, d.d are not nil once ctyp := d.d.ContainerType() ti := f.ti var mf MissingFielder @@ -693,18 +438,24 @@ func (d *Decoder) kStruct(f *codecFnInfo, rv reflect.Value) { } hasLen := containerLen >= 0 var name2 []byte - if mf != nil { - var namearr2 [16]byte - name2 = namearr2[:0] - } var rvkencname []byte + tkt := ti.keyType for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - if ti.keyType == valueTypeString { - rvkencname = d.d.DecodeStringAsBytes() + d.mapElemKey(j == 0) + // use if-else since <8 branches and we need good branch prediction for string + if tkt == valueTypeString { + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + } else if tkt == valueTypeInt { + rvkencname = strconv.AppendInt(d.b[:0], d.d.DecodeInt64(), 10) + } else if tkt == valueTypeUint { + rvkencname = strconv.AppendUint(d.b[:0], d.d.DecodeUint64(), 10) + } else if tkt == valueTypeFloat { + rvkencname = strconv.AppendFloat(d.b[:0], d.d.DecodeFloat64(), 'f', -1, 64) } else { - rvkencname = decStructFieldKeyNotString(d.d, ti.keyType, &d.b) + halt.errorStr2("invalid struct key type: ", ti.keyType.String()) } + d.mapElemValue() if si := ti.siForEncName(rvkencname); si != nil { d.kStructField(si, rv) @@ -714,7 +465,7 @@ func (d *Decoder) kStruct(f *codecFnInfo, rv reflect.Value) { var f interface{} d.decode(&f) if !mf.CodecMissingField(name2, f) && d.h.ErrorIfNoField { - d.errorf("no matching struct field when decoding stream map with key: %s ", stringView(name2)) + halt.errorStr2("no matching struct field when decoding stream map with key: ", stringView(name2)) } } else { d.structFieldNotFound(-1, stringView(rvkencname)) @@ -736,7 +487,7 @@ func (d *Decoder) kStruct(f *codecFnInfo, rv reflect.Value) { // if mapped elem-wise to a field, handle it // if more stream items than can be mapped, error it for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.arrayElem() + d.arrayElem(j == 0) if j < len(tisfi) { d.kStructField(tisfi[j], rv) } else { @@ -746,11 +497,12 @@ func (d *Decoder) kStruct(f *codecFnInfo, rv reflect.Value) { d.arrayEnd() } else { - d.onerror(errNeedMapOrArrayDecodeToStruct) + halt.onerror(errNeedMapOrArrayDecodeToStruct) } } -func (d *Decoder) kSlice(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kSlice(f *decFnInfo, rv reflect.Value) { + _ = d.d // early asserts d, d.d are not nil once // A slice can be set from a map or array in stream. // This way, the order can be kept (as order is lost with map). @@ -763,26 +515,31 @@ func (d *Decoder) kSlice(f *codecFnInfo, rv reflect.Value) { if ctyp == valueTypeBytes || ctyp == valueTypeString { // you can only decode bytes or string in the stream into a slice or array of bytes if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { - d.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) } rvbs := rvGetBytes(rv) - if !rvCanset { - // not addressable byte slice, so do not decode into it past the length - rvbs = rvbs[:len(rvbs):len(rvbs)] - } - bs2 := d.decodeBytesInto(rvbs) - // if !(len(bs2) == len(rvbs) && byteSliceSameData(rvbs, bs2)) { - if !(len(bs2) > 0 && len(bs2) == len(rvbs) && &bs2[0] == &rvbs[0]) { - if rvCanset { + if rvCanset { + bs2, bst := d.decodeBytesInto(rvbs, false) + if bst != dBytesIntoParamOut { rvSetBytes(rv, bs2) - } else if len(rvbs) > 0 && len(bs2) > 0 { - copy(rvbs, bs2) } + } else { + // not addressable byte slice, so do not decode into it past the length + d.decodeBytesInto(rvbs[:len(rvbs):len(rvbs)], true) } return } - slh, containerLenS := d.decSliceHelperStart() // only expects valueType(Array|Map) - never Nil + // only expects valueType(Array|Map) - never Nil + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } // an array can never return a nil slice. so no need to check f.array here. if containerLenS == 0 { @@ -793,7 +550,11 @@ func (d *Decoder) kSlice(f *codecFnInfo, rv reflect.Value) { rvSetSliceLen(rv, 0) } } - slh.End() + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } return } @@ -804,7 +565,7 @@ func (d *Decoder) kSlice(f *codecFnInfo, rv reflect.Value) { rtelem = rtelem.Elem() } - var fn *codecFn + var fn *decFn[T] var rvChanged bool @@ -813,11 +574,12 @@ func (d *Decoder) kSlice(f *codecFnInfo, rv reflect.Value) { rvlen := rvLenSlice(rv) rvcap := rvCapSlice(rv) - hasLen := containerLenS > 0 + maxInitLen := d.maxInitLen() + hasLen := containerLenS >= 0 if hasLen { if containerLenS > rvcap { oldRvlenGtZero := rvlen > 0 - rvlen1 := decInferLen(containerLenS, d.h.MaxInitLen, int(ti.elemsize)) + rvlen1 := int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) if rvlen1 == rvlen { } else if rvlen1 <= rvcap { if rvCanset { @@ -830,7 +592,7 @@ func (d *Decoder) kSlice(f *codecFnInfo, rv reflect.Value) { rvcap = rvlen rvChanged = !rvCanset } else { // rvlen1 > rvcap && !canSet - d.errorf("cannot decode into non-settable slice") + halt.errorStr("cannot decode into non-settable slice") } if rvChanged && oldRvlenGtZero && rtelem0Mut { rvCopySlice(rv, rv0, rtelem) // only copy up to length NOT cap i.e. rv0.Slice(0, rvcap) @@ -846,27 +608,48 @@ func (d *Decoder) kSlice(f *codecFnInfo, rv reflect.Value) { // consider creating new element once, and just decoding into it. var elemReset = d.h.SliceElementReset - var j int + // when decoding into slices, there may be more values in the stream than the slice length. + // decodeValue handles this better when coming from an addressable value (known to reflect.Value). + // Consequently, builtin handling skips slices. + + var rtelemIsPtr bool + var rtelemElem reflect.Type + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } + var j int for ; d.containerNext(j, containerLenS, hasLen); j++ { if j == 0 { if rvIsNil(rv) { // means hasLen = false if rvCanset { - rvlen = decInferLen(containerLenS, d.h.MaxInitLen, int(ti.elemsize)) + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) rvcap = rvlen rvChanged = !rvCanset } else { - d.errorf("cannot decode into non-settable slice") + halt.errorStr("cannot decode into non-settable slice") } } if fn == nil { - fn = d.h.fn(rtelem) + fn = d.fn(rtelem) } } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + // if indefinite, etc, then expand the slice if necessary if j >= rvlen { - slh.ElemContainerState(j) // expand the slice up to the cap. // Note that we did, so we have to reset it later. @@ -878,24 +661,41 @@ func (d *Decoder) kSlice(f *codecFnInfo, rv reflect.Value) { } else if rvChanged { rv = rvSlice(rv, rvlen) } else { - d.onerror(errExpandSliceCannotChange) + halt.onerror(errExpandSliceCannotChange) } } else { if !(rvCanset || rvChanged) { - d.onerror(errExpandSliceCannotChange) + halt.onerror(errExpandSliceCannotChange) } rv, rvcap, rvCanset = rvGrowSlice(rv, f.ti, rvcap, 1) + // note: 1 requested is hint/minimum - new capacity with more space rvlen = rvcap rvChanged = !rvCanset } - } else { - slh.ElemContainerState(j) } - rv9 = rvSliceIndex(rv, j, f.ti) + + // we check if we can make this an addr, and do builtin + // e.g. if []ints, then fastpath should handle it? + // but if not, we should treat it as each element is *int, and decode into it. + + rv9 = rvArrayIndex(rv, j, f.ti, true) if elemReset { rvSetZero(rv9) } - d.decodeValue(rv9, fn) + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) // d.decode(rv2i(rv9.Addr())) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } } if j < rvlen { if rvCanset { @@ -911,92 +711,139 @@ func (d *Decoder) kSlice(f *codecFnInfo, rv reflect.Value) { rvChanged = true } } - slh.End() + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } if rvChanged { // infers rvCanset=true, so it can be reset rvSetDirect(rv0, rv) } } -func (d *Decoder) kArray(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kArray(f *decFnInfo, rv reflect.Value) { + _ = d.d // early asserts d, d.d are not nil once // An array can be set from a map or array in stream. - + ti := f.ti ctyp := d.d.ContainerType() if handleBytesWithinKArray && (ctyp == valueTypeBytes || ctyp == valueTypeString) { // you can only decode bytes or string in the stream into a slice or array of bytes - if f.ti.elemkind != uint8(reflect.Uint8) { - d.errorf("bytes/string in stream can decode into array of bytes, but not %v", f.ti.rt) + if ti.elemkind != uint8(reflect.Uint8) { + halt.errorf("bytes/string in stream can decode into array of bytes, but not %v", ti.rt) } rvbs := rvGetArrayBytes(rv, nil) - bs2 := d.decodeBytesInto(rvbs) - if !byteSliceSameData(rvbs, bs2) && len(rvbs) > 0 && len(bs2) > 0 { - copy(rvbs, bs2) - } + d.decodeBytesInto(rvbs, true) return } - slh, containerLenS := d.decSliceHelperStart() // only expects valueType(Array|Map) - never Nil + // only expects valueType(Array|Map) - never Nil + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } // an array can never return a nil slice. so no need to check f.array here. if containerLenS == 0 { - slh.End() + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } return } - rtelem := f.ti.elem - for k := reflect.Kind(f.ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem := ti.elem + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { rtelem = rtelem.Elem() } - var fn *codecFn - var rv9 reflect.Value rvlen := rv.Len() // same as cap - hasLen := containerLenS > 0 + hasLen := containerLenS >= 0 if hasLen && containerLenS > rvlen { - d.errorf("cannot decode into array with length: %v, less than container length: %v", rvlen, containerLenS) + halt.errorf("cannot decode into array with length: %v, less than container length: %v", any(rvlen), any(containerLenS)) } // consider creating new element once, and just decoding into it. var elemReset = d.h.SliceElementReset + var rtelemIsPtr bool + var rtelemElem reflect.Type + var fn *decFn[T] + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } else { + fn = d.fn(rtelem) + } + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } // note that you cannot expand the array if indefinite and we go past array length if j >= rvlen { - slh.arrayCannotExpand(hasLen, rvlen, j, containerLenS) - return + d.arrayCannotExpand(rvlen, j+1) + d.swallow() + continue } - slh.ElemContainerState(j) - rv9 = rvArrayIndex(rv, j, f.ti) + rv9 = rvArrayIndex(rv, j, f.ti, false) if elemReset { rvSetZero(rv9) } - - if fn == nil { - fn = d.h.fn(rtelem) + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) // d.decode(rv2i(rv9.Addr())) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) } - d.decodeValue(rv9, fn) } - slh.End() + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } } -func (d *Decoder) kChan(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kChan(f *decFnInfo, rv reflect.Value) { + _ = d.d // early asserts d, d.d are not nil once // A slice can be set from a map or array in stream. // This way, the order can be kept (as order is lost with map). ti := f.ti if ti.chandir&uint8(reflect.SendDir) == 0 { - d.errorf("receive-only channel cannot be decoded") + halt.errorStr("receive-only channel cannot be decoded") } ctyp := d.d.ContainerType() if ctyp == valueTypeBytes || ctyp == valueTypeString { // you can only decode bytes or string in the stream into a slice or array of bytes if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { - d.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) } - bs2 := d.d.DecodeBytes(nil) + bs2, _ := d.d.DecodeBytes() irv := rv2i(rv) ch, ok := irv.(chan<- byte) if !ok { @@ -1010,15 +857,27 @@ func (d *Decoder) kChan(f *codecFnInfo, rv reflect.Value) { var rvCanset = rv.CanSet() - // only expects valueType(Array|Map - nil handled above) - slh, containerLenS := d.decSliceHelperStart() + // only expects valueType(Array|Map) - never Nil + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } // an array can never return a nil slice. so no need to check f.array here. if containerLenS == 0 { if rvCanset && rvIsNil(rv) { rvSetDirect(rv, reflect.MakeChan(ti.rt, 0)) } - slh.End() + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } return } @@ -1029,20 +888,21 @@ func (d *Decoder) kChan(f *codecFnInfo, rv reflect.Value) { rtelem = rtelem.Elem() } - var fn *codecFn + var fn *decFn[T] var rvChanged bool var rv0 = rv var rv9 reflect.Value var rvlen int // = rv.Len() - hasLen := containerLenS > 0 + hasLen := containerLenS >= 0 + maxInitLen := d.maxInitLen() for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { if j == 0 { if rvIsNil(rv) { if hasLen { - rvlen = decInferLen(containerLenS, d.h.MaxInitLen, int(ti.elemsize)) + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) } else { rvlen = decDefChanCap } @@ -1050,17 +910,25 @@ func (d *Decoder) kChan(f *codecFnInfo, rv reflect.Value) { rv = reflect.MakeChan(ti.rt, rvlen) rvChanged = true } else { - d.errorf("cannot decode into non-settable chan") + halt.errorStr("cannot decode into non-settable chan") } } if fn == nil { - fn = d.h.fn(rtelem) + fn = d.fn(rtelem) } } - slh.ElemContainerState(j) + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if rv9.IsValid() { rvSetZero(rv9) - } else if decUseTransient && useTransient { + } else if useTransient { rv9 = d.perType.TransientAddrK(ti.elem, reflect.Kind(ti.elemkind)) } else { rv9 = rvZeroAddrK(ti.elem, reflect.Kind(ti.elemkind)) @@ -1070,7 +938,11 @@ func (d *Decoder) kChan(f *codecFnInfo, rv reflect.Value) { } rv.Send(rv9) } - slh.End() + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } if rvChanged { // infers rvCanset=true, so it can be reset rvSetDirect(rv0, rv) @@ -1078,11 +950,12 @@ func (d *Decoder) kChan(f *codecFnInfo, rv reflect.Value) { } -func (d *Decoder) kMap(f *codecFnInfo, rv reflect.Value) { +func (d *decoder[T]) kMap(f *decFnInfo, rv reflect.Value) { + _ = d.d // early asserts d, d.d are not nil once containerLen := d.mapStart(d.d.ReadMapStart()) ti := f.ti if rvIsNil(rv) { - rvlen := decInferLen(containerLen, d.h.MaxInitLen, int(ti.keysize+ti.elemsize)) + rvlen := int(decInferLen(containerLen, d.maxInitLen(), uint(ti.keysize+ti.elemsize))) rvSetDirect(rv, makeMapReflect(ti.rt, rvlen)) } @@ -1095,19 +968,21 @@ func (d *Decoder) kMap(f *codecFnInfo, rv reflect.Value) { ktypeId := rt2id(ktype) vtypeKind := reflect.Kind(ti.elemkind) ktypeKind := reflect.Kind(ti.keykind) - kfast := mapKeyFastKindFor(ktypeKind) - visindirect := mapStoresElemIndirect(uintptr(ti.elemsize)) - visref := refBitset.isset(ti.elemkind) + mparams := getMapReqParams(ti) + // kfast := mapKeyFastKindFor(ktypeKind) + // visindirect := mapStoresElemIndirect(uintptr(ti.elemsize)) + // visref := refBitset.isset(ti.elemkind) vtypePtr := vtypeKind == reflect.Ptr ktypePtr := ktypeKind == reflect.Ptr vTransient := decUseTransient && !vtypePtr && ti.tielem.flagCanTransient - kTransient := decUseTransient && !ktypePtr && ti.tikey.flagCanTransient + // keys are transient iff values are transient first + kTransient := vTransient && !ktypePtr && ti.tikey.flagCanTransient var vtypeElem reflect.Type - var keyFn, valFn *codecFn + var keyFn, valFn *decFn[T] var ktypeLo, vtypeLo = ktype, vtype if ktypeKind == reflect.Ptr { @@ -1146,39 +1021,37 @@ func (d *Decoder) kMap(f *codecFnInfo, rv reflect.Value) { ktypeIsString := ktypeId == stringTypId ktypeIsIntf := ktypeId == intfTypId + hasLen := containerLen >= 0 - hasLen := containerLen > 0 + var kstr2bs []byte + var kstr string - // kstrbs is used locally for the key bytes, so we can reduce allocation. - // When we read keys, we copy to this local bytes array, and use a stringView for lookup. - // We only convert it into a true string if we have to do a set on the map. + var mapKeyStringSharesBytesBuf bool + var att dBytesAttachState - // Since kstr2bs will usually escape to the heap, declaring a [64]byte array may be wasteful. - // It is only valuable if we are sure that it is declared on the stack. - // var kstrarr [64]byte // most keys are less than 32 bytes, and even more less than 64 - // var kstrbs = kstrarr[:0] - var kstrbs []byte - var kstr2bs []byte - var s string + // Use a possibly transient (map) value (and key), to reduce allocation - var callFnRvk bool + // when decoding into slices, there may be more values in the stream than the slice length. + // decodeValue handles this better when coming from an addressable value (known to reflect.Value). + // Consequently, builtin handling skips slices. - fnRvk2 := func() (s string) { - callFnRvk = false - if len(kstr2bs) < 2 { - return string(kstr2bs) - } - return d.mapKeyString(&callFnRvk, &kstrbs, &kstr2bs) + var vElem, kElem reflect.Type + kbuiltin := ti.tikey.flagDecBuiltin && ti.keykind != uint8(reflect.Slice) + vbuiltin := ti.tielem.flagDecBuiltin // && ti.elemkind != uint8(reflect.Slice) + if kbuiltin && ktypePtr { + kElem = ti.key.Elem() + } + if vbuiltin && vtypePtr { + vElem = ti.elem.Elem() } - - // Use a possibly transient (map) value (and key), to reduce allocation for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - callFnRvk = false + mapKeyStringSharesBytesBuf = false + kstr = "" if j == 0 { // if vtypekind is a scalar and thus value will be decoded using TransientAddrK, // then it is ok to use TransientAddr2K for the map key. - if decUseTransient && vTransient && kTransient { + if kTransient { rvk = d.perType.TransientAddr2K(ktype, ktypeKind) } else { rvk = rvZeroAddrK(ktype, ktypeKind) @@ -1187,17 +1060,17 @@ func (d *Decoder) kMap(f *codecFnInfo, rv reflect.Value) { rvkn = rvk } if !rvvMut { - if decUseTransient && vTransient { + if vTransient { rvvn = d.perType.TransientAddrK(vtype, vtypeKind) } else { rvvn = rvZeroAddrK(vtype, vtypeKind) } } if !ktypeIsString && keyFn == nil { - keyFn = d.h.fn(ktypeLo) + keyFn = d.fn(ktypeLo) } if valFn == nil { - valFn = d.h.fn(vtypeLo) + valFn = d.fn(vtypeLo) } } else if rvkMut { rvSetZero(rvk) @@ -1205,39 +1078,68 @@ func (d *Decoder) kMap(f *codecFnInfo, rv reflect.Value) { rvk = rvkn } - d.mapElemKey() - if ktypeIsString { - kstr2bs = d.d.DecodeStringAsBytes() - rvSetString(rvk, fnRvk2()) + d.mapElemKey(j == 0) + + if d.d.TryNil() { + rvSetZero(rvk) + } else if ktypeIsString { + kstr2bs, att = d.d.DecodeStringAsBytes() + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, att) + rvSetString(rvk, kstr) } else { - d.decByteState = decByteStateNone - d.decodeValue(rvk, keyFn) + if kbuiltin { + if ktypePtr { + if rvIsNil(rvk) { + rvSetDirect(rvk, reflect.New(kElem)) + } + d.decode(rv2i(rvk)) + } else { + d.decode(rv2i(rvAddr(rvk, ti.tikey.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvk, keyFn) + } // special case if interface wrapping a byte slice if ktypeIsIntf { if rvk2 := rvk.Elem(); rvk2.IsValid() && rvk2.Type() == uint8SliceTyp { kstr2bs = rvGetBytes(rvk2) - rvSetIntf(rvk, rv4istr(fnRvk2())) + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, dBytesAttachView) + rvSetIntf(rvk, rv4istr(kstr)) } // NOTE: consider failing early if map/slice/func } } + // TryNil will try to read from the stream and check if a nil marker. + // + // When using ioDecReader (specifically in bufio mode), this TryNil call could + // override part of the buffer used for the string key. + // + // To mitigate this, we do a special check for ioDecReader in bufio mode. + if mapKeyStringSharesBytesBuf && d.bufio { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { // ktypeIsIntf + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + mapKeyStringSharesBytesBuf = false + } + d.mapElemValue() if d.d.TryNil() { - // since a map, we have to set zero value if needed - if !rvvz.IsValid() { - rvvz = rvZeroK(vtype, vtypeKind) - } - if callFnRvk { - s = d.string(kstr2bs) + if mapKeyStringSharesBytesBuf { if ktypeIsString { - rvSetString(rvk, s) + rvSetString(rvk, d.detach2Str(kstr2bs, att)) } else { // ktypeIsIntf - rvSetIntf(rvk, rv4istr(s)) + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) } } - mapSet(rv, rvk, rvvz, kfast, visindirect, visref) + // since a map, we have to set zero value if needed + if !rvvz.IsValid() { + rvvz = rvZeroK(vtype, vtypeKind) + } + mapSet(rv, rvk, rvvz, mparams) continue } @@ -1252,7 +1154,7 @@ func (d *Decoder) kMap(f *codecFnInfo, rv reflect.Value) { } else if !doMapGet { goto NEW_RVV } else { - rvv = mapGet(rv, rvk, rvva, kfast, visindirect, visref) + rvv = mapGet(rv, rvk, rvva, mparams) if !rvv.IsValid() || (rvvCanNil && rvIsNil(rvv)) { goto NEW_RVV } @@ -1272,7 +1174,7 @@ func (d *Decoder) kMap(f *codecFnInfo, rv reflect.Value) { rvv = rvvn default: // make addressable (so you can set the slice/array elements, etc) - if decUseTransient && vTransient { + if vTransient { rvvn = d.perType.TransientAddrK(vtype, vtypeKind) } else { rvvn = rvZeroAddrK(vtype, vtypeKind) @@ -1286,146 +1188,75 @@ func (d *Decoder) kMap(f *codecFnInfo, rv reflect.Value) { NEW_RVV: if vtypePtr { rvv = reflect.New(vtypeElem) // non-nil in stream, so allocate value - } else if decUseTransient && vTransient { + } else if vTransient { rvv = d.perType.TransientAddrK(vtype, vtypeKind) } else { rvv = rvZeroAddrK(vtype, vtypeKind) } DECODE_VALUE_NO_CHECK_NIL: - d.decodeValueNoCheckNil(rvv, valFn) - - if doMapSet { - if callFnRvk { - s = d.string(kstr2bs) - if ktypeIsString { - rvSetString(rvk, s) - } else { // ktypeIsIntf - rvSetIntf(rvk, rv4istr(s)) + if doMapSet && mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { // ktypeIsIntf + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + if vbuiltin { + if vtypePtr { + if rvIsNil(rvv) { + rvSetDirect(rvv, reflect.New(vElem)) } + d.decode(rv2i(rvv)) + } else { + d.decode(rv2i(rvAddr(rvv, ti.tielem.ptr))) } - mapSet(rv, rvk, rvv, kfast, visindirect, visref) + } else { + d.decodeValueNoCheckNil(rvv, valFn) + } + if doMapSet { + mapSet(rv, rvk, rvv, mparams) } } d.mapEnd() } -// Decoder reads and decodes an object from an input stream in a supported format. -// -// Decoder is NOT safe for concurrent use i.e. a Decoder cannot be used -// concurrently in multiple goroutines. -// -// However, as Decoder could be allocation heavy to initialize, a Reset method is provided -// so its state can be reused to decode new input streams repeatedly. -// This is the idiomatic way to use. -type Decoder struct { - panicHdl - - d decDriver - - // cache the mapTypeId and sliceTypeId for faster comparisons - mtid uintptr - stid uintptr - - h *BasicHandle - - blist bytesFreelist - - // ---- cpu cache line boundary? - decRd - - // ---- cpu cache line boundary? - n fauxUnion - - hh Handle - err error - - perType decPerType - - // used for interning strings - is internerMap - - // ---- cpu cache line boundary? - // ---- writable fields during execution --- *try* to keep in sep cache line - maxdepth int16 - depth int16 - - // Extensions can call Decode() within a current Decode() call. - // We need to know when the top level Decode() call returns, - // so we can decide whether to Release() or not. - calls uint16 // what depth in mustDecode are we in now. - - c containerState - - decByteState - - // b is an always-available scratch buffer used by Decoder and decDrivers. - // By being always-available, it can be used for one-off things without - // having to get from freelist, use, and return back to freelist. - b [decScratchByteArrayLen]byte -} - -// NewDecoder returns a Decoder for decoding a stream of bytes from an io.Reader. -// -// For efficiency, Users are encouraged to configure ReaderBufferSize on the handle -// OR pass in a memory buffered reader (eg bufio.Reader, bytes.Buffer). -func NewDecoder(r io.Reader, h Handle) *Decoder { - d := h.newDecDriver().decoder() - if r != nil { - d.Reset(r) - } - return d -} +func (d *decoder[T]) init(h Handle) { + initHandle(h) + callMake(&d.d) + d.hh = h + d.h = h.getBasicHandle() + // d.zeroCopy = d.h.ZeroCopy + // d.be = h.isBinary() + d.err = errDecoderNotInitialized -// NewDecoderBytes returns a Decoder which efficiently decodes directly -// from a byte slice with zero copying. -func NewDecoderBytes(in []byte, h Handle) *Decoder { - d := h.newDecDriver().decoder() - if in != nil { - d.ResetBytes(in) + if d.h.InternString && d.is == nil { + d.is.init() } - return d -} - -// NewDecoderString returns a Decoder which efficiently decodes directly -// from a string with zero copying. -// -// It is a convenience function that calls NewDecoderBytes with a -// []byte view into the string. -// -// This can be an efficient zero-copy if using default mode i.e. without codec.safe tag. -func NewDecoderString(s string, h Handle) *Decoder { - return NewDecoderBytes(bytesView(s), h) -} -func (d *Decoder) HandleName() string { - return d.hh.Name() -} + // d.fp = fastpathDList[T]() + d.fp = d.d.init(h, &d.decoderBase, d).(*fastpathDs[T]) // should set js, cbor, bytes, etc -func (d *Decoder) r() *decRd { - return &d.decRd -} + // d.cbreak = d.js || d.cbor -func (d *Decoder) init(h Handle) { - initHandle(h) - d.cbreak = d.js || d.cbor - d.bytes = true - d.err = errDecoderNotInitialized - d.h = h.getBasicHandle() - d.hh = h - d.be = h.isBinary() - if d.h.InternString && d.is == nil { - d.is.init() + if d.bytes { + d.rtidFn = &d.h.rtidFnsDecBytes + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtBytes + } else { + d.bufio = d.h.ReaderBufferSize > 0 + d.rtidFn = &d.h.rtidFnsDecIO + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtIO } + + d.reset() // NOTE: do not initialize d.n here. It is lazily initialized in d.naked() } -func (d *Decoder) resetCommon() { +func (d *decoder[T]) reset() { d.d.reset() d.err = nil d.c = 0 - d.decByteState = decByteStateNone d.depth = 0 d.calls = 0 // reset all things which were cached from the Handle, but could change @@ -1439,39 +1270,42 @@ func (d *Decoder) resetCommon() { d.str = false if d.h.MapType != nil { d.mtid = rt2id(d.h.MapType) - d.mtr = fastpathAvIndex(d.mtid) != -1 + _, d.mtr = fastpathAvIndex(d.mtid) } if d.h.SliceType != nil { d.stid = rt2id(d.h.SliceType) - d.str = fastpathAvIndex(d.stid) != -1 + _, d.str = fastpathAvIndex(d.stid) } } // Reset the Decoder with a new Reader to decode from, // clearing all state from last run(s). -func (d *Decoder) Reset(r io.Reader) { +func (d *decoder[T]) Reset(r io.Reader) { + if d.bytes { + halt.onerror(errDecNoResetBytesWithReader) + } + d.reset() if r == nil { r = &eofReader } - d.bytes = false - if d.ri == nil { - d.ri = new(ioDecReader) - } - d.ri.reset(r, d.h.ReaderBufferSize, &d.blist) - d.decReader = d.ri - d.resetCommon() + d.d.resetInIO(r) } // ResetBytes resets the Decoder with a new []byte to decode from, // clearing all state from last run(s). -func (d *Decoder) ResetBytes(in []byte) { +func (d *decoder[T]) ResetBytes(in []byte) { + if !d.bytes { + halt.onerror(errDecNoResetReaderWithBytes) + } + d.resetBytes(in) +} + +func (d *decoder[T]) resetBytes(in []byte) { + d.reset() if in == nil { - in = []byte{} + in = zeroByteSlice } - d.bytes = true - d.decReader = &d.rb - d.rb.reset(in) - d.resetCommon() + d.d.resetInBytes(in) } // ResetString resets the Decoder with a new string to decode from, @@ -1481,14 +1315,10 @@ func (d *Decoder) ResetBytes(in []byte) { // []byte view into the string. // // This can be an efficient zero-copy if using default mode i.e. without codec.safe tag. -func (d *Decoder) ResetString(s string) { +func (d *decoder[T]) ResetString(s string) { d.ResetBytes(bytesView(s)) } -func (d *Decoder) naked() *fauxUnion { - return &d.n -} - // Decode decodes the stream from reader and stores the result in the // value pointed to by v. v cannot be a nil pointer. v can also be // a reflect.Value of a pointer. @@ -1552,27 +1382,33 @@ func (d *Decoder) naked() *fauxUnion { // // Note: we allow nil values in the stream anywhere except for map keys. // A nil value in the encoded stream where a map key is expected is treated as an error. -func (d *Decoder) Decode(v interface{}) (err error) { +// +// Note that an error from a Decode call will make the Decoder unusable moving forward. +// This is because the state of the Decoder, it's input stream, etc are no longer stable. +// Any subsequent calls to Decode will trigger the same error. +func (d *decoder[T]) Decode(v interface{}) (err error) { // tried to use closure, as runtime optimizes defer with no params. // This seemed to be causing weird issues (like circular reference found, unexpected panic, etc). // Also, see https://github.com/golang/go/issues/14939#issuecomment-417836139 - if !debugging { - defer func() { - if x := recover(); x != nil { - panicValToErr(d, x, &d.err) - err = d.err - } - }() - } - - d.MustDecode(v) + defer panicValToErr(d, callRecoverSentinel, &d.err, &err, debugging) + d.mustDecode(v) return } // MustDecode is like Decode, but panics if unable to Decode. // // Note: This provides insight to the code location that triggered the error. -func (d *Decoder) MustDecode(v interface{}) { +// +// Note that an error from a Decode call will make the Decoder unusable moving forward. +// This is because the state of the Decoder, it's input stream, etc are no longer stable. +// Any subsequent calls to Decode will trigger the same error. +func (d *decoder[T]) MustDecode(v interface{}) { + defer panicValToErr(d, callRecoverSentinel, &d.err, nil, true) + d.mustDecode(v) + return +} + +func (d *decoder[T]) mustDecode(v interface{}) { halt.onerror(d.err) if d.hh == nil { halt.onerror(errNoFormatHandle) @@ -1588,139 +1424,31 @@ func (d *Decoder) MustDecode(v interface{}) { // // Deprecated: Pooled resources are not used with a Decoder. // This method is kept for compatibility reasons only. -func (d *Decoder) Release() { -} - -func (d *Decoder) swallow() { - d.d.nextValueBytes(nil) -} - -func (d *Decoder) swallowErr() (err error) { - if !debugging { - defer func() { - if x := recover(); x != nil { - panicValToErr(d, x, &err) - } - }() - } - d.swallow() - return -} - -func setZero(iv interface{}) { - if iv == nil { - return - } - rv, ok := isNil(iv) - if ok { - return - } - // var canDecode bool - switch v := iv.(type) { - case *string: - *v = "" - case *bool: - *v = false - case *int: - *v = 0 - case *int8: - *v = 0 - case *int16: - *v = 0 - case *int32: - *v = 0 - case *int64: - *v = 0 - case *uint: - *v = 0 - case *uint8: - *v = 0 - case *uint16: - *v = 0 - case *uint32: - *v = 0 - case *uint64: - *v = 0 - case *float32: - *v = 0 - case *float64: - *v = 0 - case *complex64: - *v = 0 - case *complex128: - *v = 0 - case *[]byte: - *v = nil - case *Raw: - *v = nil - case *time.Time: - *v = time.Time{} - case reflect.Value: - decSetNonNilRV2Zero(v) - default: - if !fastpathDecodeSetZeroTypeSwitch(iv) { - decSetNonNilRV2Zero(rv) - } - } -} - -// decSetNonNilRV2Zero will set the non-nil value to its zero value. -func decSetNonNilRV2Zero(v reflect.Value) { - // If not decodeable (settable), we do not touch it. - // We considered empty'ing it if not decodeable e.g. - // - if chan, drain it - // - if map, clear it - // - if slice or array, zero all elements up to len - // - // However, we decided instead that we either will set the - // whole value to the zero value, or leave AS IS. - - k := v.Kind() - if k == reflect.Interface { - decSetNonNilRV2Zero4Intf(v) - } else if k == reflect.Ptr { - decSetNonNilRV2Zero4Ptr(v) - } else if v.CanSet() { - rvSetDirectZero(v) - } -} +func (d *decoder[T]) Release() {} -func decSetNonNilRV2Zero4Ptr(v reflect.Value) { - ve := v.Elem() - if ve.CanSet() { - rvSetZero(ve) // we can have a pointer to an interface - } else if v.CanSet() { - rvSetZero(v) - } +func (d *decoder[T]) swallow() { + d.d.nextValueBytes() } -func decSetNonNilRV2Zero4Intf(v reflect.Value) { - ve := v.Elem() - if ve.CanSet() { - rvSetDirectZero(ve) // interfaces always have element as a non-interface - } else if v.CanSet() { - rvSetZero(v) - } +func (d *decoder[T]) nextValueBytes() []byte { + return d.d.nextValueBytes() } -func (d *Decoder) decode(iv interface{}) { +func (d *decoder[T]) decode(iv interface{}) { + _ = d.d // early asserts d, d.d are not nil once // a switch with only concrete types can be optimized. // consequently, we deal with nil and interfaces outside the switch. - if iv == nil { - d.onerror(errCannotDecodeIntoNil) + rv, ok := isNil(iv, true) // handle nil pointers also + if ok { + halt.onerror(errCannotDecodeIntoNil) } switch v := iv.(type) { // case nil: // case Selfer: - case reflect.Value: - if x, _ := isDecodeable(v); !x { - d.haltAsNotDecodeable(v) - } - d.decodeValue(v, nil) case *string: - *v = d.stringZC(d.d.DecodeStringAsBytes()) + *v = d.detach2Str(d.d.DecodeStringAsBytes()) case *bool: *v = d.d.DecodeBool() case *int: @@ -1743,22 +1471,21 @@ func (d *Decoder) decode(iv interface{}) { *v = uint32(chkOvf.UintV(d.d.DecodeUint64(), 32)) case *uint64: *v = d.d.DecodeUint64() + case *uintptr: + *v = uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) case *float32: - *v = d.decodeFloat32() + *v = d.d.DecodeFloat32() case *float64: *v = d.d.DecodeFloat64() case *complex64: - *v = complex(d.decodeFloat32(), 0) + *v = complex(d.d.DecodeFloat32(), 0) case *complex128: *v = complex(d.d.DecodeFloat64(), 0) case *[]byte: - *v = d.decodeBytesInto(*v) + *v, _ = d.decodeBytesInto(*v, false) case []byte: // not addressable byte slice, so do not decode into it past the length - b := d.decodeBytesInto(v[:len(v):len(v)]) - if !(len(b) > 0 && len(b) == len(v) && &b[0] == &v[0]) { // not same slice - copy(v, b) - } + d.decodeBytesInto(v[:len(v):len(v)], true) case *time.Time: *v = d.d.DecodeTime() case *Raw: @@ -1767,14 +1494,22 @@ func (d *Decoder) decode(iv interface{}) { case *interface{}: d.decodeValue(rv4iptr(v), nil) + case reflect.Value: + if ok, _ = isDecodeable(v); !ok { + d.haltAsNotDecodeable(v) + } + d.decodeValue(v, nil) + default: // we can't check non-predefined types, as they might be a Selfer or extension. - if skipFastpathTypeSwitchInDirectCall || !fastpathDecodeTypeSwitch(iv, d) { - v := reflect.ValueOf(iv) - if x, _ := isDecodeable(v); !x { - d.haltAsNotDecodeable(v) + if skipFastpathTypeSwitchInDirectCall || !d.dh.fastpathDecodeTypeSwitch(iv, d) { + if !rv.IsValid() { + rv = reflect.ValueOf(iv) + } + if ok, _ = isDecodeable(rv); !ok { + d.haltAsNotDecodeable(rv) } - d.decodeValue(v, nil) + d.decodeValue(rv, nil) } } } @@ -1787,15 +1522,15 @@ func (d *Decoder) decode(iv interface{}) { // // Note that decodeValue will handle nil in the stream early, so that the // subsequent calls i.e. kXXX methods, etc do not have to handle it themselves. -func (d *Decoder) decodeValue(rv reflect.Value, fn *codecFn) { +func (d *decoder[T]) decodeValue(rv reflect.Value, fn *decFn[T]) { if d.d.TryNil() { decSetNonNilRV2Zero(rv) - return + } else { + d.decodeValueNoCheckNil(rv, fn) } - d.decodeValueNoCheckNil(rv, fn) } -func (d *Decoder) decodeValueNoCheckNil(rv reflect.Value, fn *codecFn) { +func (d *decoder[T]) decodeValueNoCheckNil(rv reflect.Value, fn *decFn[T]) { // If stream is not containing a nil value, then we can deref to the base // non-pointer value, and decode into that. var rvp reflect.Value @@ -1812,7 +1547,7 @@ PTR: } if fn == nil { - fn = d.h.fn(rv.Type()) + fn = d.fn(rv.Type()) } if fn.i.addrD { if rvpValid { @@ -1820,83 +1555,68 @@ PTR: } else if rv.CanAddr() { rv = rvAddr(rv, fn.i.ti.ptr) } else if fn.i.addrDf { - d.errorf("cannot decode into a non-pointer value") + halt.errorStr("cannot decode into a non-pointer value") } } fn.fd(d, &fn.i, rv) } -func (d *Decoder) structFieldNotFound(index int, rvkencname string) { - // Note: rvkencname is used only if there is an error, to pass into d.errorf. +func (d *decoder[T]) decodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + d.decodeValue(baseRV(v), d.fn(t)) + } else { + d.decodeValue(baseRV(v), d.fnNoExt(t)) + } +} + +func (d *decoder[T]) structFieldNotFound(index int, rvkencname string) { + // Note: rvkencname is used only if there is an error, to pass into halt.errorf. // Consequently, it is ok to pass in a stringView // Since rvkencname may be a stringView, do NOT pass it to another function. if d.h.ErrorIfNoField { if index >= 0 { - d.errorf("no matching struct field found when decoding stream array at index %v", index) + halt.errorInt("no matching struct field found when decoding stream array at index ", int64(index)) } else if rvkencname != "" { - d.errorf("no matching struct field found when decoding stream map with key " + rvkencname) + halt.errorStr2("no matching struct field found when decoding stream map with key ", rvkencname) } } d.swallow() } -func (d *Decoder) arrayCannotExpand(sliceLen, streamLen int) { - if d.h.ErrorIfNoArrayExpand { - d.errorf("cannot expand array len during decode from %v to %v", sliceLen, streamLen) - } -} - -func (d *Decoder) haltAsNotDecodeable(rv reflect.Value) { - if !rv.IsValid() { - d.onerror(errCannotDecodeIntoNil) - } - // check if an interface can be retrieved, before grabbing an interface - if !rv.CanInterface() { - d.errorf("cannot decode into a value without an interface: %v", rv) - } - d.errorf("cannot decode into value of kind: %v, %#v", rv.Kind(), rv2i(rv)) -} - -func (d *Decoder) depthIncr() { - d.depth++ - if d.depth >= d.maxdepth { - d.onerror(errMaxDepthExceeded) - } -} - -func (d *Decoder) depthDecr() { - d.depth-- -} - -// Possibly get an interned version of a string, iff InternString=true and decoding a map key. -// -// This should mostly be used for map keys, where the key type is string. -// This is because keys of a map/struct are typically reused across many objects. -func (d *Decoder) string(v []byte) (s string) { - if d.is == nil || d.c != containerMapKey || len(v) < 2 || len(v) > internMaxStrLen { - return string(v) - } - return d.is.string(v) -} - -func (d *Decoder) zerocopy() bool { - return d.bytes && d.h.ZeroCopy -} - // decodeBytesInto is a convenience delegate function to decDriver.DecodeBytes. // It ensures that `in` is not a nil byte, before calling decDriver.DecodeBytes, // as decDriver.DecodeBytes treats a nil as a hint to use its internal scratch buffer. -func (d *Decoder) decodeBytesInto(in []byte) (v []byte) { - if in == nil { - in = []byte{} +func (d *decoder[T]) decodeBytesInto(out []byte, mustFit bool) (v []byte, state dBytesIntoState) { + v, att := d.d.DecodeBytes() + if cap(v) == 0 || (att >= dBytesAttachViewZerocopy && !mustFit) { + // no need to detach (since mustFit=false) + // including v has no capacity (covers v == nil and []byte{}) + return } - return d.d.DecodeBytes(in) + if len(v) == 0 { + v = zeroByteSlice // cannot be re-sliced/appended to + return + } + if len(out) == len(v) { + state = dBytesIntoParamOut + } else if cap(out) >= len(v) { + out = out[:len(v)] + state = dBytesIntoParamOutSlice + } else if mustFit { + halt.errorf("bytes capacity insufficient for decoded bytes: got/expected: %d/%d", len(v), len(out)) + } else { + out = make([]byte, len(v)) + state = dBytesIntoNew + } + copy(out, v) + v = out + return } -func (d *Decoder) rawBytes() (v []byte) { +func (d *decoder[T]) rawBytes() (v []byte) { // ensure that this is not a view into the bytes // i.e. if necessary, make new copy always. - v = d.d.nextValueBytes([]byte{}) + v = d.d.nextValueBytes() if d.bytes && !d.h.ZeroCopy { vv := make([]byte, len(v)) copy(vv, v) // using copy here triggers make+copy optimization eliding memclr @@ -1905,24 +1625,13 @@ func (d *Decoder) rawBytes() (v []byte) { return } -func (d *Decoder) wrapErr(v error, err *error) { - *err = wrapCodecErr(v, d.hh.Name(), d.NumBytesRead(), false) +func (d *decoder[T]) wrapErr(v error, err *error) { + *err = wrapCodecErr(v, d.hh.Name(), d.d.NumBytesRead(), false) } // NumBytesRead returns the number of bytes read -func (d *Decoder) NumBytesRead() int { - return int(d.r().numread()) -} - -// decodeFloat32 will delegate to an appropriate DecodeFloat32 implementation (if exists), -// else if will call DecodeFloat64 and ensure the value doesn't overflow. -// -// Note that we return float64 to reduce unnecessary conversions -func (d *Decoder) decodeFloat32() float32 { - if d.js { - return d.jsondriver().DecodeFloat32() // custom implementation for 32-bit - } - return float32(chkOvf.Float32V(d.d.DecodeFloat64())) +func (d *decoder[T]) NumBytesRead() int { + return d.d.NumBytesRead() } // ---- container tracking @@ -1938,438 +1647,315 @@ func (d *Decoder) decodeFloat32() float32 { // - Read(Map|Array)Elem(Kay|Value) is only supported by json. // Honor these in the code, to reduce the number of interface calls (even if empty). -func (d *Decoder) checkBreak() (v bool) { - // MARKER: jsonDecDriver.CheckBreak() cannot be inlined (over budget inlining cost). - // Consequently, there's no benefit in incurring the cost of this wrapping function. - // It is faster to just call the interface method directly. - - // if d.js { - // return d.jsondriver().CheckBreak() - // } - // if d.cbor { - // return d.cbordriver().CheckBreak() - // } - - if d.cbreak { - v = d.d.CheckBreak() - } - return -} - -func (d *Decoder) containerNext(j, containerLen int, hasLen bool) bool { - // MARKER: keep in sync with gen-helper.go.tmpl - - // return (hasLen && j < containerLen) || !(hasLen || slh.d.checkBreak()) +func (d *decoder[T]) containerNext(j, containerLen int, hasLen bool) bool { + // return (hasLen && (j < containerLen)) || (!hasLen && !d.d.CheckBreak()) if hasLen { return j < containerLen } - return !d.checkBreak() + return !d.d.CheckBreak() } -func (d *Decoder) mapStart(v int) int { - if v != containerLenNil { - d.depthIncr() - d.c = containerMapStart - } - return v -} - -func (d *Decoder) mapElemKey() { - if d.js { - d.jsondriver().ReadMapElemKey() - } +func (d *decoder[T]) mapElemKey(firstTime bool) { + d.d.ReadMapElemKey(firstTime) d.c = containerMapKey } -func (d *Decoder) mapElemValue() { - if d.js { - d.jsondriver().ReadMapElemValue() - } +func (d *decoder[T]) mapElemValue() { + d.d.ReadMapElemValue() d.c = containerMapValue } -func (d *Decoder) mapEnd() { - if d.js { - d.jsondriver().ReadMapEnd() - } - // d.d.ReadMapEnd() +func (d *decoder[T]) mapEnd() { + d.d.ReadMapEnd() d.depthDecr() d.c = 0 } -func (d *Decoder) arrayStart(v int) int { - if v != containerLenNil { - d.depthIncr() - d.c = containerArrayStart - } - return v -} - -func (d *Decoder) arrayElem() { - if d.js { - d.jsondriver().ReadArrayElem() - } +func (d *decoder[T]) arrayElem(firstTime bool) { + d.d.ReadArrayElem(firstTime) d.c = containerArrayElem } -func (d *Decoder) arrayEnd() { - if d.js { - d.jsondriver().ReadArrayEnd() - } - // d.d.ReadArrayEnd() +func (d *decoder[T]) arrayEnd() { + d.d.ReadArrayEnd() d.depthDecr() d.c = 0 } -func (d *Decoder) interfaceExtConvertAndDecode(v interface{}, ext InterfaceExt) { - // var v interface{} = ext.ConvertExt(rv) - // d.d.decode(&v) - // ext.UpdateExt(rv, v) - - // assume v is a pointer: - // - if struct|array, pass as is to ConvertExt - // - else make it non-addressable and pass to ConvertExt - // - make return value from ConvertExt addressable - // - decode into it - // - return the interface for passing into UpdateExt. - // - interface should be a pointer if struct|array, else a value - - var s interface{} - rv := reflect.ValueOf(v) - rv2 := rv.Elem() - rvk := rv2.Kind() - if rvk == reflect.Struct || rvk == reflect.Array { - s = ext.ConvertExt(v) - } else { - s = ext.ConvertExt(rv2i(rv2)) - } - rv = reflect.ValueOf(s) - - // We cannot use isDecodeable here, as the value converted may be nil, - // or it may not be nil but is not addressable and thus we cannot extend it, etc. - // Instead, we just ensure that the value is addressable. - - if !rv.CanAddr() { - rvk = rv.Kind() - rv2 = d.oneShotAddrRV(rv.Type(), rvk) - if rvk == reflect.Interface { - rvSetIntf(rv2, rv) - } else { - rvSetDirect(rv2, rv) - } - rv = rv2 - } - - d.decodeValue(rv, nil) - ext.UpdateExt(v, rv2i(rv)) +func (d *decoder[T]) interfaceExtConvertAndDecode(v interface{}, ext InterfaceExt) { + // The ext may support different types for performance e.g. int if no fractions, else float64 + // Consequently, best mode is: + // - decode next value into an interface{} + // - pass it to the UpdateExt + var vv interface{} + d.decode(&vv) + ext.UpdateExt(v, vv) + // rv := d.interfaceExtConvertAndDecodeGetRV(v, ext) + // d.decodeValue(rv, nil) + // ext.UpdateExt(v, rv2i(rv)) } -func (d *Decoder) sideDecode(v interface{}, basetype reflect.Type, bs []byte) { - // NewDecoderBytes(bs, d.hh).decodeValue(baseRV(v), d.h.fnNoExt(basetype)) - - defer func(rb bytesDecReader, bytes bool, - c containerState, dbs decByteState, depth int16, r decReader, state interface{}) { - d.rb = rb - d.bytes = bytes - d.c = c - d.decByteState = dbs - d.depth = depth - d.decReader = r - d.d.restoreState(state) - }(d.rb, d.bytes, d.c, d.decByteState, d.depth, d.decReader, d.d.captureState()) - - // d.rb.reset(in) - d.rb = bytesDecReader{bs[:len(bs):len(bs)], 0} - d.bytes = true - d.decReader = &d.rb - d.d.resetState() - d.c = 0 - d.decByteState = decByteStateNone - d.depth = 0 - - // must call using fnNoExt - d.decodeValue(baseRV(v), d.h.fnNoExt(basetype)) +func (d *decoder[T]) fn(t reflect.Type) *decFn[T] { + return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false) } -func (d *Decoder) fauxUnionReadRawBytes(asString bool) { - if asString || d.h.RawToString { - d.n.v = valueTypeString - // fauxUnion is only used within DecodeNaked calls; consequently, we should try to intern. - d.n.s = d.stringZC(d.d.DecodeBytes(nil)) - } else { - d.n.v = valueTypeBytes - d.n.l = d.d.DecodeBytes([]byte{}) - } +func (d *decoder[T]) fnNoExt(t reflect.Type) *decFn[T] { + return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true) } -func (d *Decoder) oneShotAddrRV(rvt reflect.Type, rvk reflect.Kind) reflect.Value { - if decUseTransient && - (numBoolStrSliceBitset.isset(byte(rvk)) || - ((rvk == reflect.Struct || rvk == reflect.Array) && - d.h.getTypeInfo(rt2id(rvt), rvt).flagCanTransient)) { - return d.perType.TransientAddrK(rvt, rvk) - } - return rvZeroAddrK(rvt, rvk) -} +// ---- -// -------------------------------------------------- - -// decSliceHelper assists when decoding into a slice, from a map or an array in the stream. -// A slice can be set from a map or array in stream. This supports the MapBySlice interface. -// -// Note: if IsNil, do not call ElemContainerState. -type decSliceHelper struct { - d *Decoder - ct valueType - Array bool - IsNil bool -} - -func (d *Decoder) decSliceHelperStart() (x decSliceHelper, clen int) { - x.ct = d.d.ContainerType() - x.d = d - switch x.ct { - case valueTypeNil: - x.IsNil = true - case valueTypeArray: - x.Array = true - clen = d.arrayStart(d.d.ReadArrayStart()) - case valueTypeMap: - clen = d.mapStart(d.d.ReadMapStart()) - clen += clen - default: - d.errorf("only encoded map or array can be decoded into a slice (%d)", x.ct) - } - return +func (helperDecDriver[T]) newDecoderBytes(in []byte, h Handle) *decoder[T] { + var c1 decoder[T] + c1.bytes = true + c1.init(h) + c1.ResetBytes(in) // MARKER check for error + return &c1 } -func (x decSliceHelper) End() { - if x.IsNil { - } else if x.Array { - x.d.arrayEnd() - } else { - x.d.mapEnd() - } -} - -func (x decSliceHelper) ElemContainerState(index int) { - // Note: if isnil, clen=0, so we never call into ElemContainerState - - if x.Array { - x.d.arrayElem() - } else if index&1 == 0 { // index%2 == 0 { - x.d.mapElemKey() - } else { - x.d.mapElemValue() - } -} - -func (x decSliceHelper) arrayCannotExpand(hasLen bool, lenv, j, containerLenS int) { - x.d.arrayCannotExpand(lenv, j+1) - // drain completely and return - x.ElemContainerState(j) - x.d.swallow() - j++ - for ; x.d.containerNext(j, containerLenS, hasLen); j++ { - x.ElemContainerState(j) - x.d.swallow() - } - x.End() -} - -// decNextValueBytesHelper helps with NextValueBytes calls. -// -// Typical usage: -// - each Handle's decDriver will implement a high level nextValueBytes, -// which will track the current cursor, delegate to a nextValueBytesR -// method, and then potentially call bytesRdV at the end. -// -// See simple.go for typical usage model. -type decNextValueBytesHelper struct { - d *Decoder -} - -func (x decNextValueBytesHelper) append1(v *[]byte, b byte) { - if *v != nil && !x.d.bytes { - *v = append(*v, b) - } -} - -func (x decNextValueBytesHelper) appendN(v *[]byte, b ...byte) { - if *v != nil && !x.d.bytes { - *v = append(*v, b...) - } -} - -func (x decNextValueBytesHelper) appendS(v *[]byte, b string) { - if *v != nil && !x.d.bytes { - *v = append(*v, b...) - } -} - -func (x decNextValueBytesHelper) bytesRdV(v *[]byte, startpos uint) { - if x.d.bytes { - *v = x.d.rb.b[startpos:x.d.rb.c] - } -} - -// decNegintPosintFloatNumberHelper is used for formats that are binary -// and have distinct ways of storing positive integers vs negative integers -// vs floats, which are uniquely identified by the byte descriptor. -// -// Currently, these formats are binc, cbor and simple. -type decNegintPosintFloatNumberHelper struct { - d *Decoder +func (helperDecDriver[T]) newDecoderIO(in io.Reader, h Handle) *decoder[T] { + var c1 decoder[T] + c1.init(h) + c1.Reset(in) + return &c1 } -func (x decNegintPosintFloatNumberHelper) uint64(ui uint64, neg, ok bool) uint64 { - if ok && !neg { - return ui - } - return x.uint64TryFloat(ok) -} +// ---- -func (x decNegintPosintFloatNumberHelper) uint64TryFloat(ok bool) (ui uint64) { - if ok { // neg = true - x.d.errorf("assigning negative signed value to unsigned type") +func (helperDecDriver[T]) decFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathDs[T]) (f *fastpathD[T], u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return } - f, ok := x.d.d.decFloat() - if ok && f >= 0 && noFrac64(math.Float64bits(f)) { - ui = uint64(f) + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) } else { - x.d.errorf("invalid number loading uint64, with descriptor: %v", x.d.d.descBd()) + u = f.rt } - return ui + return } -func decNegintPosintFloatNumberHelperInt64v(ui uint64, neg, incrIfNeg bool) (i int64) { - if neg && incrIfNeg { - ui++ +func (helperDecDriver[T]) decFindRtidFn(s []decRtidFn[T], rtid uintptr) (i uint, fn *decFn[T]) { + // binary search. Adapted from sort/search.go. Use goto (not for loop) to allow inlining. + var h uint // var h, i uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 // avoid overflow when computing h // h = i + (j-i)/2 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP } - i = chkOvf.SignedIntV(ui) - if neg { - i = -i + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn } return } -func (x decNegintPosintFloatNumberHelper) int64(ui uint64, neg, ok bool) (i int64) { - if ok { - return decNegintPosintFloatNumberHelperInt64v(ui, neg, x.d.cbor) - } - // return x.int64TryFloat() - // } - // func (x decNegintPosintFloatNumberHelper) int64TryFloat() (i int64) { - f, ok := x.d.d.decFloat() - if ok && noFrac64(math.Float64bits(f)) { - i = int64(f) - } else { - x.d.errorf("invalid number loading uint64, with descriptor: %v", x.d.d.descBd()) +func (helperDecDriver[T]) decFromRtidFnSlice(fns *atomicRtidFnSlice) (s []decRtidFn[T]) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]decRtidFn[T]](v)) } return } -func (x decNegintPosintFloatNumberHelper) float64(f float64, ok bool) float64 { - if ok { - return f - } - return x.float64TryInteger() +func (dh helperDecDriver[T]) decFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, x *BasicHandle, fp *fastpathDs[T], + checkExt bool) (fn *decFn[T]) { + return dh.decFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) } -func (x decNegintPosintFloatNumberHelper) float64TryInteger() float64 { - ui, neg, ok := x.d.d.decInteger() - if !ok { - x.d.errorf("invalid descriptor for float: %v", x.d.d.descBd()) +func (dh helperDecDriver[T]) decFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDs[T], + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFn[T]) { + rtid := rt2id(rt) + var sp []decRtidFn[T] = dh.decFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.decFindRtidFn(sp, rtid) } - return float64(decNegintPosintFloatNumberHelperInt64v(ui, neg, x.d.cbor)) -} - -// isDecodeable checks if value can be decoded into -// -// decode can take any reflect.Value that is a inherently addressable i.e. -// - non-nil chan (we will SEND to it) -// - non-nil slice (we will set its elements) -// - non-nil map (we will put into it) -// - non-nil pointer (we can "update" it) -// - func: no -// - interface: no -// - array: if canAddr=true -// - any other value pointer: if canAddr=true -func isDecodeable(rv reflect.Value) (canDecode bool, reason decNotDecodeableReason) { - switch rv.Kind() { - case reflect.Ptr, reflect.Slice, reflect.Chan, reflect.Map: - canDecode = !rvIsNil(rv) - reason = decNotDecodeableReasonNilReference - case reflect.Func, reflect.Interface, reflect.Invalid, reflect.UnsafePointer: - reason = decNotDecodeableReasonBadKind - default: - canDecode = rv.CanAddr() - reason = decNotDecodeableReasonNonAddrValue + if fn == nil { + fn = dh.decFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) } return } -func decByteSlice(r *decRd, clen, maxInitLen int, bs []byte) (bsOut []byte) { - if clen <= 0 { - bsOut = zeroByteSlice - } else if cap(bs) >= clen { - bsOut = bs[:clen] - r.readb(bsOut) +func (dh helperDecDriver[T]) decFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDs[T], + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFn[T]) { + + fn = dh.decFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []decRtidFn[T] + mu.Lock() + sp = dh.decFromRtidFnSlice(fns) + // since this is an atomic load/store, we MUST use a different array each time, + // else we have a data race when a store is happening simultaneously with a decFindRtidFn call. + if sp == nil { + sp = []decRtidFn[T]{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) } else { - var len2 int - for len2 < clen { - len3 := decInferLen(clen-len2, maxInitLen, 1) - bs3 := bsOut - bsOut = make([]byte, len2+len3) - copy(bsOut, bs3) - r.readb(bsOut[len2:]) - len2 += len3 + idx, fn2 := dh.decFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]decRtidFn[T], len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = decRtidFn[T]{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) } } + mu.Unlock() return } -// decInferLen will infer a sensible length, given the following: -// - clen: length wanted. -// - maxlen: max length to be returned. -// if <= 0, it is unset, and we infer it based on the unit size -// - unit: number of bytes for each element of the collection -func decInferLen(clen, maxlen, unit int) int { - // anecdotal testing showed increase in allocation with map length of 16. - // We saw same typical alloc from 0-8, then a 20% increase at 16. - // Thus, we set it to 8. - const ( - minLenIfUnset = 8 - maxMem = 256 * 1024 // 256Kb Memory - ) - - // handle when maxlen is not set i.e. <= 0 - - // clen==0: use 0 - // maxlen<=0, clen<0: use default - // maxlen> 0, clen<0: use default - // maxlen<=0, clen>0: infer maxlen, and cap on it - // maxlen> 0, clen>0: cap at maxlen - - if clen == 0 || clen == containerLenNil { - return 0 - } - if clen < 0 { - // if unspecified, return 64 for bytes, ... 8 for uint64, ... and everything else - clen = 64 / unit - if clen > minLenIfUnset { - return clen +func (dh helperDecDriver[T]) decFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathDs[T], + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFn[T]) { + fn = new(decFn[T]) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + // anything can be an extension except the built-in ones: time, raw and rawext. + // ensure we check for these types, then if extension, before checking if + // it implementes one of the pre-declared interfaces. + + fi.addrDf = true + + if rtid == timeTypId && timeBuiltin { + fn.fd = (*decoder[T]).kTime + } else if rtid == rawTypId { + fn.fd = (*decoder[T]).raw + } else if rtid == rawExtTypId { + fn.fd = (*decoder[T]).rawExt + fi.addrD = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fd = (*decoder[T]).ext + fi.addrD = true + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fd = (*decoder[T]).selferUnmarshal + fi.addrD = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fd = (*decoder[T]).binaryUnmarshal + fi.addrD = ti.flagBinaryUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + //If JSON, we should check JSONMarshal before textMarshal + fn.fd = (*decoder[T]).jsonUnmarshal + fi.addrD = ti.flagJsonUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fd = (*decoder[T]).textUnmarshal + fi.addrD = ti.flagTextUnmarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + var rtid2 uintptr + if !ti.flagHasPkgPath { // un-named type (slice or mpa or array) + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) // ti.key for arrays = reflect.SliceOf(ti.elem) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fd = fp[idx].decfn + fi.addrD = true + fi.addrDf = false + if rk == reflect.Array { + fi.addrD = false // decode directly into array value (slice made from it) + } + } + } else { // named type (with underlying type of map or slice or array) + // try to use mapping for underlying type + xfe, xrt := dh.decFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf2 := xfe.decfn + if rk == reflect.Array { + fi.addrD = false // decode directly into array value (slice made from it) + fn.fd = func(d *decoder[T], xf *decFnInfo, xrv reflect.Value) { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } else { + fi.addrD = true + fi.addrDf = false // meaning it can be an address(ptr) or a value + xptr2rt := reflect.PointerTo(xrt) + fn.fd = func(d *decoder[T], xf *decFnInfo, xrv reflect.Value) { + if xrv.Kind() == reflect.Ptr { + xfnf2(d, xf, rvConvert(xrv, xptr2rt)) + } else { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } + } + } + } + } + if fn.fd == nil { + switch rk { + case reflect.Bool: + fn.fd = (*decoder[T]).kBool + case reflect.String: + fn.fd = (*decoder[T]).kString + case reflect.Int: + fn.fd = (*decoder[T]).kInt + case reflect.Int8: + fn.fd = (*decoder[T]).kInt8 + case reflect.Int16: + fn.fd = (*decoder[T]).kInt16 + case reflect.Int32: + fn.fd = (*decoder[T]).kInt32 + case reflect.Int64: + fn.fd = (*decoder[T]).kInt64 + case reflect.Uint: + fn.fd = (*decoder[T]).kUint + case reflect.Uint8: + fn.fd = (*decoder[T]).kUint8 + case reflect.Uint16: + fn.fd = (*decoder[T]).kUint16 + case reflect.Uint32: + fn.fd = (*decoder[T]).kUint32 + case reflect.Uint64: + fn.fd = (*decoder[T]).kUint64 + case reflect.Uintptr: + fn.fd = (*decoder[T]).kUintptr + case reflect.Float32: + fn.fd = (*decoder[T]).kFloat32 + case reflect.Float64: + fn.fd = (*decoder[T]).kFloat64 + case reflect.Complex64: + fn.fd = (*decoder[T]).kComplex64 + case reflect.Complex128: + fn.fd = (*decoder[T]).kComplex128 + case reflect.Chan: + fn.fd = (*decoder[T]).kChan + case reflect.Slice: + fn.fd = (*decoder[T]).kSlice + case reflect.Array: + fi.addrD = false // decode directly into array value (slice made from it) + fn.fd = (*decoder[T]).kArray + case reflect.Struct: + if ti.simple { + fn.fd = (*decoder[T]).kStructSimple + } else { + fn.fd = (*decoder[T]).kStruct + } + case reflect.Map: + fn.fd = (*decoder[T]).kMap + case reflect.Interface: + // encode: reflect.Interface are handled already by preEncodeValue + fn.fd = (*decoder[T]).kInterface + default: + // reflect.Ptr and reflect.Interface are handled already by preEncodeValue + fn.fd = (*decoder[T]).kErr + } } - return minLenIfUnset - } - if unit <= 0 { - return clen - } - if maxlen <= 0 { - maxlen = maxMem / unit - } - if clen < maxlen { - return clen } - return maxlen + return } diff --git a/vendor/github.com/ugorji/go/codec/doc.go b/vendor/github.com/ugorji/go/codec/doc.go index 1a16bca..750dd23 100644 --- a/vendor/github.com/ugorji/go/codec/doc.go +++ b/vendor/github.com/ugorji/go/codec/doc.go @@ -12,7 +12,7 @@ Supported Serialization formats are: - binc: http://github.com/ugorji/binc - cbor: http://cbor.io http://tools.ietf.org/html/rfc7049 - json: http://json.org http://tools.ietf.org/html/rfc7159 - - simple: + - simple: (unpublished) This package will carefully use 'package unsafe' for performance reasons in specific places. You can build without unsafe use by passing the safe or appengine tag @@ -78,6 +78,32 @@ Rich Feature Set includes: msgpack-rpc protocol defined at: https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md +# Supported build tags + +We gain performance by code-generating fast-paths for slices and maps of built-in types, +and monomorphizing generic code explicitly so we gain inlining and de-virtualization benefits. + +The results are 20-40% performance improvements. + +Building and running is configured using build tags as below. + +At runtime: + +- codec.safe: run in safe mode (not using unsafe optimizations) +- codec.notmono: use generics code (bypassing performance-boosting monomorphized code) +- codec.notfastpath: skip fast path code for slices and maps of built-in types (number, bool, string, bytes) + +Each of these "runtime" tags have a convenience synonym i.e. safe, notmono, notfastpath. +Pls use these mostly during development - use codec.XXX in your go files. + +Build only: + +- codec.build: used to generate fastpath and monomorphization code + +Test only: + +- codec.notmammoth: skip the mammoth generated tests + # Extension Support Users can register a function to handle the encoding or decoding of @@ -203,6 +229,10 @@ You can run the tag 'codec.safe' to run tests or build in safe mode. e.g. go test -tags codec.safe -run Json go test -tags "alltests codec.safe" -run Suite +You can run the tag 'codec.notmono' to build bypassing the monomorphized code e.g. + + go test -tags codec.notmono -run Json + Running Benchmarks cd bench @@ -225,3 +255,87 @@ Embedded fields are encoded as if they exist in the top-level struct, with some caveats. See Encode documentation. */ package codec + +/* +Generics + +Generics are used across to board to reduce boilerplate, and hopefully +improve performance by +- reducing need for interface calls (de-virtualization) +- resultant inlining of those calls + +encoder/decoder --> Driver (json/cbor/...) --> input/output (bytes or io abstraction) + +There are 2 * 5 * 2 (20) combinations of monomorphized values. + +Key rules +- do not use top-level generic functions. + Due to type inference, monomorphizing them proves challenging +- only use generic methods. + Monomorphizing is done at the type once, and method names need not change +- do not have method calls have a parameter of an encWriter or decReader. + All those calls are handled directly by the driver. +- Include a helper type for each parameterized thing, and add all generic functions to them e.g. + helperEncWriter[T encWriter] + helperEncReader[T decReader] + helperEncDriver[T encDriver] + helperDecDriver[T decDriver] +- Always use T as the generic type name (when needed) +- No inline types +- No closures taking parameters of generic types + +*/ +/* +Naming convention: + +Currently, as generic and non-generic types/functions/vars are put in the same files, +we suffer because: +- build takes longer as non-generic code is built when a build tag wants only monomorphised code +- files have many lines which are not used at runtime (due to type parameters) +- code coverage is inaccurate on a single run + +To resolve this, we are streamlining our file naming strategy. + +Basically, we will have the following nomenclature for filenames: +- fastpath (tag:notfastpath): *.notfastpath.*.go vs *.fastpath.*.go +- typed parameters (tag:notmono): *.notmono.*.go vs *.mono.*.go +- safe (tag:safe): *.safe.*.go vs *.unsafe.go +- generated files: *.generated.go +- all others (tags:N/A): *.go without safe/mono/fastpath/generated in the name + +The following files will be affected and split/renamed accordingly + +Base files: +- binc.go +- cbor.go +- json.go +- msgpack.go +- simple.go +- decode.go +- encode.go + +For each base file, split into __file__.go (containing type parameters) and __file__.base.go. +__file__.go will only build with notmono. + +Other files: +- fastpath.generated.go -> base.fastpath.generated.go and base.fastpath.notmono.generated.go +- fastpath.not.go -> base.notfastpath.go +- init.go -> init.notmono.go + +Appropriate build tags will be included in the files, and the right ones only used for +monomorphization. +*/ +/* +Caching Handle options for fast runtime use + +If using cached values from Handle options, then +- re-cache them at each reset() call +- reset is always called at the start of each (Must)(En|De)code + - which calls (en|de)coder.reset([]byte|io.Reader|String) + - which calls (en|de)cDriver.reset() +- at reset, (en|de)c(oder|Driver) can re-cache Handle options before each run + +Some examples: +- json: e.rawext,di,d,ks,is / d.rawext +- decode: (decoderBase) d.jsms,mtr,str, +*/ diff --git a/vendor/github.com/ugorji/go/codec/encode.base.go b/vendor/github.com/ugorji/go/codec/encode.base.go new file mode 100644 index 0000000..0ded904 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/encode.base.go @@ -0,0 +1,461 @@ +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "cmp" + "errors" + "io" + "reflect" + "slices" + "sync" + "time" +) + +var errEncoderNotInitialized = errors.New("encoder not initialized") + +var encBuiltinRtids []uintptr + +func init() { + for _, v := range []interface{}{ + (string)(""), + (bool)(false), + (int)(0), + (int8)(0), + (int16)(0), + (int32)(0), + (int64)(0), + (uint)(0), + (uint8)(0), + (uint16)(0), + (uint32)(0), + (uint64)(0), + (uintptr)(0), + (float32)(0), + (float64)(0), + (complex64)(0), + (complex128)(0), + (time.Time{}), + ([]byte)(nil), + (Raw{}), + // (interface{})(nil), + } { + t := reflect.TypeOf(v) + encBuiltinRtids = append(encBuiltinRtids, rt2id(t), rt2id(reflect.PointerTo(t))) + } + slices.Sort(encBuiltinRtids) +} + +// encDriver abstracts the actual codec (binc vs msgpack, etc) +type encDriverI interface { + EncodeNil() + EncodeInt(i int64) + EncodeUint(i uint64) + EncodeBool(b bool) + EncodeFloat32(f float32) + EncodeFloat64(f float64) + // re is never nil + EncodeRawExt(re *RawExt) + // ext is never nil + EncodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) + // EncodeString using cUTF8, honor'ing StringToRaw flag + EncodeString(v string) + EncodeStringNoEscape4Json(v string) + // encode a non-nil []byte + EncodeStringBytesRaw(v []byte) + // encode a []byte as nil, empty or encoded sequence of bytes depending on context + EncodeBytes(v []byte) + EncodeTime(time.Time) + WriteArrayStart(length int) + WriteArrayEnd() + WriteMapStart(length int) + WriteMapEnd() + + // these write a zero-len map or array into the stream + WriteMapEmpty() + WriteArrayEmpty() + + writeNilMap() + writeNilArray() + writeNilBytes() + + // these are no-op except for json + encDriverContainerTracker + + // reset will reset current encoding runtime state, and cached information from the handle + reset() + + atEndOfEncode() + writerEnd() + + writeBytesAsis(b []byte) + // writeStringAsisDblQuoted(v string) + + resetOutBytes(out *[]byte) + resetOutIO(out io.Writer) + + init(h Handle, shared *encoderBase, enc encoderI) (fp interface{}) + + // driverStateManager +} + +type encInit2er struct{} + +func (encInit2er) init2(enc encoderI) {} + +type encDriverContainerTracker interface { + WriteArrayElem(firstTime bool) + WriteMapElemKey(firstTime bool) + WriteMapElemValue() +} + +type encDriverNoState struct{} + +// func (encDriverNoState) captureState() interface{} { return nil } +// func (encDriverNoState) resetState() {} +// func (encDriverNoState) restoreState(v interface{}) {} +func (encDriverNoState) reset() {} + +type encDriverNoopContainerWriter struct{} + +func (encDriverNoopContainerWriter) WriteArrayStart(length int) {} +func (encDriverNoopContainerWriter) WriteArrayEnd() {} +func (encDriverNoopContainerWriter) WriteMapStart(length int) {} +func (encDriverNoopContainerWriter) WriteMapEnd() {} +func (encDriverNoopContainerWriter) atEndOfEncode() {} + +// encStructFieldObj[Slice] is used for sorting when there are missing fields and canonical flag is set +type encStructFieldObj struct { + key string + rv reflect.Value + intf interface{} + isRv bool + noEsc4json bool + builtin bool +} + +type encStructFieldObjSlice []encStructFieldObj + +func (p encStructFieldObjSlice) Len() int { return len(p) } +func (p encStructFieldObjSlice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } +func (p encStructFieldObjSlice) Less(i, j int) bool { + return p[uint(i)].key < p[uint(j)].key +} + +// ---- + +type orderedRv[T cmp.Ordered] struct { + v T + r reflect.Value +} + +func cmpOrderedRv[T cmp.Ordered](v1, v2 orderedRv[T]) int { + return cmp.Compare(v1.v, v2.v) +} + +// ---- + +type encFnInfo struct { + ti *typeInfo + xfFn Ext + xfTag uint64 + addrE bool + // addrEf bool // force: if addrE, then encode function MUST take a ptr +} + +// ---- + +// EncodeOptions captures configuration options during encode. +type EncodeOptions struct { + // WriterBufferSize is the size of the buffer used when writing. + // + // if > 0, we use a smart buffer internally for performance purposes. + WriterBufferSize int + + // ChanRecvTimeout is the timeout used when selecting from a chan. + // + // Configuring this controls how we receive from a chan during the encoding process. + // - If ==0, we only consume the elements currently available in the chan. + // - if <0, we consume until the chan is closed. + // - If >0, we consume until this timeout. + ChanRecvTimeout time.Duration + + // StructToArray specifies to encode a struct as an array, and not as a map + StructToArray bool + + // Canonical representation means that encoding a value will always result in the same + // sequence of bytes. + // + // This only affects maps, as the iteration order for maps is random. + // + // The implementation MAY use the natural sort order for the map keys if possible: + // + // - If there is a natural sort order (ie for number, bool, string or []byte keys), + // then the map keys are first sorted in natural order and then written + // with corresponding map values to the strema. + // - If there is no natural sort order, then the map keys will first be + // encoded into []byte, and then sorted, + // before writing the sorted keys and the corresponding map values to the stream. + // + Canonical bool + + // CheckCircularRef controls whether we check for circular references + // and error fast during an encode. + // + // If enabled, an error is received if a pointer to a struct + // references itself either directly or through one of its fields (iteratively). + // + // This is opt-in, as there may be a performance hit to checking circular references. + CheckCircularRef bool + + // RecursiveEmptyCheck controls how we determine whether a value is empty. + // + // If true, we descend into interfaces and pointers to reursively check if value is empty. + // + // We *might* check struct fields one by one to see if empty + // (if we cannot directly check if a struct value is equal to its zero value). + // If so, we honor IsZero, Comparable, IsCodecEmpty(), etc. + // Note: This *may* make OmitEmpty more expensive due to the large number of reflect calls. + // + // If false, we check if the value is equal to its zero value (newly allocated state). + RecursiveEmptyCheck bool + + // Raw controls whether we encode Raw values. + // This is a "dangerous" option and must be explicitly set. + // If set, we blindly encode Raw values as-is, without checking + // if they are a correct representation of a value in that format. + // If unset, we error out. + Raw bool + + // StringToRaw controls how strings are encoded. + // + // As a go string is just an (immutable) sequence of bytes, + // it can be encoded either as raw bytes or as a UTF string. + // + // By default, strings are encoded as UTF-8. + // but can be treated as []byte during an encode. + // + // Note that things which we know (by definition) to be UTF-8 + // are ALWAYS encoded as UTF-8 strings. + // These include encoding.TextMarshaler, time.Format calls, struct field names, etc. + StringToRaw bool + + // OptimumSize controls whether we optimize for the smallest size. + // + // Some formats will use this flag to determine whether to encode + // in the smallest size possible, even if it takes slightly longer. + // + // For example, some formats that support half-floats might check if it is possible + // to store a float64 as a half float. Doing this check has a small performance cost, + // but the benefit is that the encoded message will be smaller. + OptimumSize bool + + // NoAddressableReadonly controls whether we try to force a non-addressable value + // to be addressable so we can call a pointer method on it e.g. for types + // that support Selfer, json.Marshaler, etc. + // + // Use it in the very rare occurrence that your types modify a pointer value when calling + // an encode callback function e.g. JsonMarshal, TextMarshal, BinaryMarshal or CodecEncodeSelf. + NoAddressableReadonly bool + + // NilCollectionToZeroLength controls whether we encode nil collections (map, slice, chan) + // as nil (e.g. null if using JSON) or as zero length collections (e.g. [] or {} if using JSON). + // + // This is useful in many scenarios e.g. + // - encoding in go, but decoding the encoded stream in python + // where context of the type is missing but needed + // + // Note: this flag ignores the MapBySlice tag, and will encode nil slices, maps and chan + // in their natural zero-length formats e.g. a slice in json encoded as [] + // (and not nil or {} if MapBySlice tag). + NilCollectionToZeroLength bool +} + +// --------------------------------------------- + +// encoderBase is shared as a field between Encoder and its encDrivers. +// This way, encDrivers need not hold a referece to the Encoder itself. +type encoderBase struct { + perType encPerType + + h *BasicHandle + + // MARKER: these fields below should belong directly in Encoder. + // There should not be any pointers here - just values. + // we pack them here for space efficiency and cache-line optimization. + + rtidFn, rtidFnNoExt *atomicRtidFnSlice + + // se encoderI + err error + + blist bytesFreeList + + // js bool // is json encoder? + // be bool // is binary encoder? + + bytes bool + + c containerState + + calls uint16 + seq uint16 // sequencer (e.g. used by binc for symbols, etc) + + // ---- cpu cache line boundary + hh Handle + + // ---- cpu cache line boundary + + // ---- writable fields during execution --- *try* to keep in sep cache line + + ci circularRefChecker + + slist sfiRvFreeList +} + +func (e *encoderBase) HandleName() string { + return e.hh.Name() +} + +// Release is a no-op. +// +// Deprecated: Pooled resources are not used with an Encoder. +// This method is kept for compatibility reasons only. +func (e *encoderBase) Release() { +} + +func (e *encoderBase) setContainerState(cs containerState) { + if cs != 0 { + e.c = cs + } +} + +func (e *encoderBase) haltOnMbsOddLen(length int) { + if length&1 != 0 { // similar to &1==1 or %2 == 1 + halt.errorInt("mapBySlice requires even slice length, but got ", int64(length)) + } +} + +// addrRV returns a addressable value given that rv is not addressable +func (e *encoderBase) addrRV(rv reflect.Value, typ, ptrType reflect.Type) (rva reflect.Value) { + // if rv.CanAddr() { + // return rvAddr(rv, ptrType) + // } + if e.h.NoAddressableReadonly { + rva = reflect.New(typ) + rvSetDirect(rva.Elem(), rv) + return + } + return rvAddr(e.perType.AddressableRO(rv), ptrType) +} + +func (e *encoderBase) wrapErr(v error, err *error) { + *err = wrapCodecErr(v, e.hh.Name(), 0, true) +} + +func (e *encoderBase) kErr(_ *encFnInfo, rv reflect.Value) { + halt.errorf("unsupported encoding kind: %s, for %#v", rv.Kind(), any(rv)) +} + +func chanToSlice(rv reflect.Value, rtslice reflect.Type, timeout time.Duration) (rvcs reflect.Value) { + rvcs = rvZeroK(rtslice, reflect.Slice) + if timeout < 0 { // consume until close + for { + recv, recvOk := rv.Recv() + if !recvOk { + break + } + rvcs = reflect.Append(rvcs, recv) + } + } else { + cases := make([]reflect.SelectCase, 2) + cases[0] = reflect.SelectCase{Dir: reflect.SelectRecv, Chan: rv} + if timeout == 0 { + cases[1] = reflect.SelectCase{Dir: reflect.SelectDefault} + } else { + tt := time.NewTimer(timeout) + cases[1] = reflect.SelectCase{Dir: reflect.SelectRecv, Chan: reflect.ValueOf(tt.C)} + } + for { + chosen, recv, recvOk := reflect.Select(cases) + if chosen == 1 || !recvOk { + break + } + rvcs = reflect.Append(rvcs, recv) + } + } + return +} + +type encoderI interface { + Encode(v interface{}) error + MustEncode(v interface{}) + Release() + Reset(w io.Writer) + ResetBytes(out *[]byte) + + wrapErr(v error, err *error) + atEndOfEncode() + writerEnd() + + encodeI(v interface{}) + encodeR(v reflect.Value) + encodeAs(v interface{}, t reflect.Type, ext bool) + + setContainerState(cs containerState) // needed for canonical encoding via side encoder +} + +var errEncNoResetBytesWithWriter = errors.New("cannot reset an Encoder which outputs to []byte with a io.Writer") +var errEncNoResetWriterWithBytes = errors.New("cannot reset an Encoder which outputs to io.Writer with a []byte") + +type encDriverContainerNoTrackerT struct{} + +func (encDriverContainerNoTrackerT) WriteArrayElem(firstTime bool) {} +func (encDriverContainerNoTrackerT) WriteMapElemKey(firstTime bool) {} +func (encDriverContainerNoTrackerT) WriteMapElemValue() {} + +type Encoder struct { + encoderI +} + +// NewEncoder returns an Encoder for encoding into an io.Writer. +// +// For efficiency, Users are encouraged to configure WriterBufferSize on the handle +// OR pass in a memory buffered writer (eg bufio.Writer, bytes.Buffer). +func NewEncoder(w io.Writer, h Handle) *Encoder { + return &Encoder{h.newEncoder(w)} +} + +// NewEncoderBytes returns an encoder for encoding directly and efficiently +// into a byte slice, using zero-copying to temporary slices. +// +// It will potentially replace the output byte slice pointed to. +// After encoding, the out parameter contains the encoded contents. +func NewEncoderBytes(out *[]byte, h Handle) *Encoder { + return &Encoder{h.newEncoderBytes(out)} +} + +// ---- + +func sideEncode(h Handle, p *sync.Pool, fn func(encoderI)) { + var s encoderI + if usePoolForSideEncode { + s = p.Get().(encoderI) + defer p.Put(s) + } else { + // initialization cycle error + // s = NewEncoderBytes(nil, h).encoderI + s = p.New().(encoderI) + } + fn(s) +} + +func oneOffEncode(se encoderI, v interface{}, out *[]byte, basetype reflect.Type, ext bool) { + se.ResetBytes(out) + se.encodeAs(v, basetype, ext) + se.atEndOfEncode() + se.writerEnd() + // e.sideEncoder(&bs) + // e.sideEncode(v, basetype, 0) +} diff --git a/vendor/github.com/ugorji/go/codec/encode.go b/vendor/github.com/ugorji/go/codec/encode.go index 0e9f0cc..b203036 100644 --- a/vendor/github.com/ugorji/go/codec/encode.go +++ b/vendor/github.com/ugorji/go/codec/encode.go @@ -1,3 +1,5 @@ +//go:build notmono || codec.notmono + // Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. // Use of this source code is governed by a MIT license found in the LICENSE file. @@ -5,412 +7,295 @@ package codec import ( "encoding" - "errors" "io" "reflect" + "slices" "sort" "strconv" + "sync" "time" ) -// defEncByteBufSize is the default size of []byte used -// for bufio buffer or []byte (when nil passed) -const defEncByteBufSize = 1 << 10 // 4:16, 6:64, 8:256, 10:1024 - -var errEncoderNotInitialized = errors.New("Encoder not initialized") - -// encDriver abstracts the actual codec (binc vs msgpack, etc) -type encDriver interface { - EncodeNil() - EncodeInt(i int64) - EncodeUint(i uint64) - EncodeBool(b bool) - EncodeFloat32(f float32) - EncodeFloat64(f float64) - EncodeRawExt(re *RawExt) - EncodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) - // EncodeString using cUTF8, honor'ing StringToRaw flag - EncodeString(v string) - EncodeStringBytesRaw(v []byte) - EncodeTime(time.Time) - WriteArrayStart(length int) - WriteArrayEnd() - WriteMapStart(length int) - WriteMapEnd() - - // reset will reset current encoding runtime state, and cached information from the handle - reset() - - encoder() *Encoder - - driverStateManager -} - -type encDriverContainerTracker interface { - WriteArrayElem() - WriteMapElemKey() - WriteMapElemValue() -} - -type encDriverNoState struct{} - -func (encDriverNoState) captureState() interface{} { return nil } -func (encDriverNoState) reset() {} -func (encDriverNoState) resetState() {} -func (encDriverNoState) restoreState(v interface{}) {} +type helperEncDriver[T encDriver] struct{} -type encDriverNoopContainerWriter struct{} - -func (encDriverNoopContainerWriter) WriteArrayStart(length int) {} -func (encDriverNoopContainerWriter) WriteArrayEnd() {} -func (encDriverNoopContainerWriter) WriteMapStart(length int) {} -func (encDriverNoopContainerWriter) WriteMapEnd() {} - -// encStructFieldObj[Slice] is used for sorting when there are missing fields and canonical flag is set -type encStructFieldObj struct { - key string - rv reflect.Value - intf interface{} - ascii bool - isRv bool +// encFn encapsulates the captured variables and the encode function. +// This way, we only do some calculations one times, and pass to the +// code block that should be called (encapsulated in a function) +// instead of executing the checks every time. +type encFn[T encDriver] struct { + i encFnInfo + fe func(*encoder[T], *encFnInfo, reflect.Value) + // _ [1]uint64 // padding (cache-aligned) } -type encStructFieldObjSlice []encStructFieldObj - -func (p encStructFieldObjSlice) Len() int { return len(p) } -func (p encStructFieldObjSlice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p encStructFieldObjSlice) Less(i, j int) bool { - return p[uint(i)].key < p[uint(j)].key +type encRtidFn[T encDriver] struct { + rtid uintptr + fn *encFn[T] } -// EncodeOptions captures configuration options during encode. -type EncodeOptions struct { - // WriterBufferSize is the size of the buffer used when writing. - // - // if > 0, we use a smart buffer internally for performance purposes. - WriterBufferSize int - - // ChanRecvTimeout is the timeout used when selecting from a chan. - // - // Configuring this controls how we receive from a chan during the encoding process. - // - If ==0, we only consume the elements currently available in the chan. - // - if <0, we consume until the chan is closed. - // - If >0, we consume until this timeout. - ChanRecvTimeout time.Duration - - // StructToArray specifies to encode a struct as an array, and not as a map - StructToArray bool - - // Canonical representation means that encoding a value will always result in the same - // sequence of bytes. - // - // This only affects maps, as the iteration order for maps is random. - // - // The implementation MAY use the natural sort order for the map keys if possible: - // - // - If there is a natural sort order (ie for number, bool, string or []byte keys), - // then the map keys are first sorted in natural order and then written - // with corresponding map values to the strema. - // - If there is no natural sort order, then the map keys will first be - // encoded into []byte, and then sorted, - // before writing the sorted keys and the corresponding map values to the stream. - // - Canonical bool - - // CheckCircularRef controls whether we check for circular references - // and error fast during an encode. - // - // If enabled, an error is received if a pointer to a struct - // references itself either directly or through one of its fields (iteratively). - // - // This is opt-in, as there may be a performance hit to checking circular references. - CheckCircularRef bool - - // RecursiveEmptyCheck controls how we determine whether a value is empty. - // - // If true, we descend into interfaces and pointers to reursively check if value is empty. - // - // We *might* check struct fields one by one to see if empty - // (if we cannot directly check if a struct value is equal to its zero value). - // If so, we honor IsZero, Comparable, IsCodecEmpty(), etc. - // Note: This *may* make OmitEmpty more expensive due to the large number of reflect calls. - // - // If false, we check if the value is equal to its zero value (newly allocated state). - RecursiveEmptyCheck bool - - // Raw controls whether we encode Raw values. - // This is a "dangerous" option and must be explicitly set. - // If set, we blindly encode Raw values as-is, without checking - // if they are a correct representation of a value in that format. - // If unset, we error out. - Raw bool - - // StringToRaw controls how strings are encoded. - // - // As a go string is just an (immutable) sequence of bytes, - // it can be encoded either as raw bytes or as a UTF string. - // - // By default, strings are encoded as UTF-8. - // but can be treated as []byte during an encode. - // - // Note that things which we know (by definition) to be UTF-8 - // are ALWAYS encoded as UTF-8 strings. - // These include encoding.TextMarshaler, time.Format calls, struct field names, etc. - StringToRaw bool - - // OptimumSize controls whether we optimize for the smallest size. - // - // Some formats will use this flag to determine whether to encode - // in the smallest size possible, even if it takes slightly longer. - // - // For example, some formats that support half-floats might check if it is possible - // to store a float64 as a half float. Doing this check has a small performance cost, - // but the benefit is that the encoded message will be smaller. - OptimumSize bool - - // NoAddressableReadonly controls whether we try to force a non-addressable value - // to be addressable so we can call a pointer method on it e.g. for types - // that support Selfer, json.Marshaler, etc. - // - // Use it in the very rare occurrence that your types modify a pointer value when calling - // an encode callback function e.g. JsonMarshal, TextMarshal, BinaryMarshal or CodecEncodeSelf. - NoAddressableReadonly bool +// Encoder writes an object to an output stream in a supported format. +// +// Encoder is NOT safe for concurrent use i.e. a Encoder cannot be used +// concurrently in multiple goroutines. +// +// However, as Encoder could be allocation heavy to initialize, a Reset method is provided +// so its state can be reused to decode new input streams repeatedly. +// This is the idiomatic way to use. +type encoder[T encDriver] struct { + dh helperEncDriver[T] + fp *fastpathEs[T] + e T + encoderBase } -// --------------------------------------------- - -func (e *Encoder) rawExt(f *codecFnInfo, rv reflect.Value) { - e.e.EncodeRawExt(rv2i(rv).(*RawExt)) +func (e *encoder[T]) rawExt(_ *encFnInfo, rv reflect.Value) { + if re := rv2i(rv).(*RawExt); re == nil { + e.e.EncodeNil() + } else { + e.e.EncodeRawExt(re) + } } -func (e *Encoder) ext(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) ext(f *encFnInfo, rv reflect.Value) { e.e.EncodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) } -func (e *Encoder) selferMarshal(f *codecFnInfo, rv reflect.Value) { - rv2i(rv).(Selfer).CodecEncodeSelf(e) +func (e *encoder[T]) selferMarshal(_ *encFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecEncodeSelf(&Encoder{e}) } -func (e *Encoder) binaryMarshal(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) binaryMarshal(_ *encFnInfo, rv reflect.Value) { bs, fnerr := rv2i(rv).(encoding.BinaryMarshaler).MarshalBinary() e.marshalRaw(bs, fnerr) } -func (e *Encoder) textMarshal(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) textMarshal(_ *encFnInfo, rv reflect.Value) { bs, fnerr := rv2i(rv).(encoding.TextMarshaler).MarshalText() e.marshalUtf8(bs, fnerr) } -func (e *Encoder) jsonMarshal(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) jsonMarshal(_ *encFnInfo, rv reflect.Value) { bs, fnerr := rv2i(rv).(jsonMarshaler).MarshalJSON() e.marshalAsis(bs, fnerr) } -func (e *Encoder) raw(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) raw(_ *encFnInfo, rv reflect.Value) { e.rawBytes(rv2i(rv).(Raw)) } -func (e *Encoder) encodeComplex64(v complex64) { +func (e *encoder[T]) encodeComplex64(v complex64) { if imag(v) != 0 { - e.errorf("cannot encode complex number: %v, with imaginary values: %v", v, imag(v)) + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) } e.e.EncodeFloat32(real(v)) } -func (e *Encoder) encodeComplex128(v complex128) { +func (e *encoder[T]) encodeComplex128(v complex128) { if imag(v) != 0 { - e.errorf("cannot encode complex number: %v, with imaginary values: %v", v, imag(v)) + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) } e.e.EncodeFloat64(real(v)) } -func (e *Encoder) kBool(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kBool(_ *encFnInfo, rv reflect.Value) { e.e.EncodeBool(rvGetBool(rv)) } -func (e *Encoder) kTime(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kTime(_ *encFnInfo, rv reflect.Value) { e.e.EncodeTime(rvGetTime(rv)) } -func (e *Encoder) kString(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kString(_ *encFnInfo, rv reflect.Value) { e.e.EncodeString(rvGetString(rv)) } -func (e *Encoder) kFloat32(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kFloat32(_ *encFnInfo, rv reflect.Value) { e.e.EncodeFloat32(rvGetFloat32(rv)) } -func (e *Encoder) kFloat64(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kFloat64(_ *encFnInfo, rv reflect.Value) { e.e.EncodeFloat64(rvGetFloat64(rv)) } -func (e *Encoder) kComplex64(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kComplex64(_ *encFnInfo, rv reflect.Value) { e.encodeComplex64(rvGetComplex64(rv)) } -func (e *Encoder) kComplex128(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kComplex128(_ *encFnInfo, rv reflect.Value) { e.encodeComplex128(rvGetComplex128(rv)) } -func (e *Encoder) kInt(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kInt(_ *encFnInfo, rv reflect.Value) { e.e.EncodeInt(int64(rvGetInt(rv))) } -func (e *Encoder) kInt8(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kInt8(_ *encFnInfo, rv reflect.Value) { e.e.EncodeInt(int64(rvGetInt8(rv))) } -func (e *Encoder) kInt16(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kInt16(_ *encFnInfo, rv reflect.Value) { e.e.EncodeInt(int64(rvGetInt16(rv))) } -func (e *Encoder) kInt32(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kInt32(_ *encFnInfo, rv reflect.Value) { e.e.EncodeInt(int64(rvGetInt32(rv))) } -func (e *Encoder) kInt64(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kInt64(_ *encFnInfo, rv reflect.Value) { e.e.EncodeInt(int64(rvGetInt64(rv))) } -func (e *Encoder) kUint(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kUint(_ *encFnInfo, rv reflect.Value) { e.e.EncodeUint(uint64(rvGetUint(rv))) } -func (e *Encoder) kUint8(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kUint8(_ *encFnInfo, rv reflect.Value) { e.e.EncodeUint(uint64(rvGetUint8(rv))) } -func (e *Encoder) kUint16(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kUint16(_ *encFnInfo, rv reflect.Value) { e.e.EncodeUint(uint64(rvGetUint16(rv))) } -func (e *Encoder) kUint32(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kUint32(_ *encFnInfo, rv reflect.Value) { e.e.EncodeUint(uint64(rvGetUint32(rv))) } -func (e *Encoder) kUint64(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kUint64(_ *encFnInfo, rv reflect.Value) { e.e.EncodeUint(uint64(rvGetUint64(rv))) } -func (e *Encoder) kUintptr(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kUintptr(_ *encFnInfo, rv reflect.Value) { e.e.EncodeUint(uint64(rvGetUintptr(rv))) } -func (e *Encoder) kErr(f *codecFnInfo, rv reflect.Value) { - e.errorf("unsupported kind %s, for %#v", rv.Kind(), rv) -} - -func chanToSlice(rv reflect.Value, rtslice reflect.Type, timeout time.Duration) (rvcs reflect.Value) { - rvcs = rvZeroK(rtslice, reflect.Slice) - if timeout < 0 { // consume until close - for { - recv, recvOk := rv.Recv() - if !recvOk { - break - } - rvcs = reflect.Append(rvcs, recv) - } - } else { - cases := make([]reflect.SelectCase, 2) - cases[0] = reflect.SelectCase{Dir: reflect.SelectRecv, Chan: rv} - if timeout == 0 { - cases[1] = reflect.SelectCase{Dir: reflect.SelectDefault} - } else { - tt := time.NewTimer(timeout) - cases[1] = reflect.SelectCase{Dir: reflect.SelectRecv, Chan: reflect.ValueOf(tt.C)} - } - for { - chosen, recv, recvOk := reflect.Select(cases) - if chosen == 1 || !recvOk { - break - } - rvcs = reflect.Append(rvcs, recv) - } - } - return -} - -func (e *Encoder) kSeqFn(rtelem reflect.Type) (fn *codecFn) { - for rtelem.Kind() == reflect.Ptr { - rtelem = rtelem.Elem() - } +func (e *encoder[T]) kSeqFn(rt reflect.Type) (fn *encFn[T]) { // if kind is reflect.Interface, do not pre-determine the encoding type, // because preEncodeValue may break it down to a concrete type and kInterface will bomb. - if rtelem.Kind() != reflect.Interface { - fn = e.h.fn(rtelem) + if rt = baseRT(rt); rt.Kind() != reflect.Interface { + fn = e.fn(rt) } return } -func (e *Encoder) kSliceWMbs(rv reflect.Value, ti *typeInfo) { - var l = rvLenSlice(rv) - if l == 0 { - e.mapStart(0) +func (e *encoder[T]) kArrayWMbs(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) } else { - e.haltOnMbsOddLen(l) - e.mapStart(l >> 1) // e.mapStart(l / 2) - fn := e.kSeqFn(ti.elem) - for j := 0; j < l; j++ { - if j&1 == 0 { // j%2 == 0 { - e.mapElemKey() - } else { - e.mapElemValue() - } - e.encodeValue(rvSliceIndex(rv, j, ti), fn) - } + l = rv.Len() } - e.mapEnd() -} + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(l) + e.mapStart(l >> 1) // e.mapStart(l / 2) -func (e *Encoder) kSliceW(rv reflect.Value, ti *typeInfo) { - var l = rvLenSlice(rv) - e.arrayStart(l) - if l > 0 { - fn := e.kSeqFn(ti.elem) - for j := 0; j < l; j++ { - e.arrayElem() - e.encodeValue(rvSliceIndex(rv, j, ti), fn) - } + var fn *encFn[T] + builtin := ti.tielem.flagEncBuiltin + if !builtin { + fn = e.kSeqFn(ti.elem) } - e.arrayEnd() -} -func (e *Encoder) kArrayWMbs(rv reflect.Value, ti *typeInfo) { - var l = rv.Len() - if l == 0 { - e.mapStart(0) - } else { - e.haltOnMbsOddLen(l) - e.mapStart(l >> 1) // e.mapStart(l / 2) - fn := e.kSeqFn(ti.elem) - for j := 0; j < l; j++ { - if j&1 == 0 { // j%2 == 0 { - e.mapElemKey() - } else { - e.mapElemValue() - } - e.encodeValue(rv.Index(j), fn) + // simulate do...while, since we already handled case of 0-length + j := 0 + e.c = containerMapKey + e.e.WriteMapElemKey(true) + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + if j&1 == 0 { // j%2 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(false) + } else { + e.mapElemValue() } } - e.mapEnd() -} + e.c = 0 + e.e.WriteMapEnd() -func (e *Encoder) kArrayW(rv reflect.Value, ti *typeInfo) { - var l = rv.Len() + // for j := 0; j < l; j++ { + // if j&1 == 0 { // j%2 == 0 { + // e.mapElemKey(j == 0) + // } else { + // e.mapElemValue() + // } + // rvv := rvSliceIndex(rv, j, ti) + // if builtin { + // e.encode(rv2i(baseRVRV(rvv))) + // } else { + // e.encodeValue(rvv, fn) + // } + // } + // e.mapEnd() +} + +func (e *encoder[T]) kArrayW(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l <= 0 { + e.e.WriteArrayEmpty() + return + } e.arrayStart(l) - if l > 0 { - fn := e.kSeqFn(ti.elem) - for j := 0; j < l; j++ { - e.arrayElem() - e.encodeValue(rv.Index(j), fn) + + var fn *encFn[T] + if !ti.tielem.flagEncBuiltin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerArrayElem + e.e.WriteArrayElem(true) + builtin := ti.tielem.flagEncBuiltin + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break } + e.c = containerArrayElem + e.e.WriteArrayElem(false) } - e.arrayEnd() + + // if ti.tielem.flagEncBuiltin { + // for j := 0; j < l; j++ { + // e.arrayElem() + // e.encode(rv2i(baseRVRV(rIndex(rv, j, ti)))) + // } + // } else { + // fn := e.kSeqFn(ti.elem) + // for j := 0; j < l; j++ { + // e.arrayElem() + // e.encodeValue(rvArrayIndex(rv, j, ti), fn) + // } + // } + + e.c = 0 + e.e.WriteArrayEnd() } -func (e *Encoder) kChan(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kChan(f *encFnInfo, rv reflect.Value) { if f.ti.chandir&uint8(reflect.RecvDir) == 0 { - e.errorf("send-only channel cannot be encoded") + halt.errorStr("send-only channel cannot be encoded") } if !f.ti.mbs && uint8TypId == rt2id(f.ti.elem) { e.kSliceBytesChan(rv) @@ -420,33 +305,34 @@ func (e *Encoder) kChan(f *codecFnInfo, rv reflect.Value) { rv = chanToSlice(rv, rtslice, e.h.ChanRecvTimeout) ti := e.h.getTypeInfo(rt2id(rtslice), rtslice) if f.ti.mbs { - e.kSliceWMbs(rv, ti) + e.kArrayWMbs(rv, ti, true) } else { - e.kSliceW(rv, ti) + e.kArrayW(rv, ti, true) } } -func (e *Encoder) kSlice(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kSlice(f *encFnInfo, rv reflect.Value) { if f.ti.mbs { - e.kSliceWMbs(rv, f.ti) + e.kArrayWMbs(rv, f.ti, true) } else if f.ti.rtid == uint8SliceTypId || uint8TypId == rt2id(f.ti.elem) { - e.e.EncodeStringBytesRaw(rvGetBytes(rv)) + // 'uint8TypId == rt2id(f.ti.elem)' checks types having underlying []byte + e.e.EncodeBytes(rvGetBytes(rv)) } else { - e.kSliceW(rv, f.ti) + e.kArrayW(rv, f.ti, true) } } -func (e *Encoder) kArray(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kArray(f *encFnInfo, rv reflect.Value) { if f.ti.mbs { - e.kArrayWMbs(rv, f.ti) + e.kArrayWMbs(rv, f.ti, false) } else if handleBytesWithinKArray && uint8TypId == rt2id(f.ti.elem) { - e.e.EncodeStringBytesRaw(rvGetArrayBytes(rv, []byte{})) + e.e.EncodeStringBytesRaw(rvGetArrayBytes(rv, nil)) // bytes from array never nil } else { - e.kArrayW(rv, f.ti) + e.kArrayW(rv, f.ti, false) } } -func (e *Encoder) kSliceBytesChan(rv reflect.Value) { +func (e *encoder[T]) kSliceBytesChan(rv reflect.Value) { // do not use range, so that the number of elements encoded // does not change, and encoding does not hang waiting on someone to close chan. @@ -487,78 +373,132 @@ L1: } } - e.e.EncodeStringBytesRaw(bs) + e.e.EncodeBytes(bs) e.blist.put(bs) if !byteSliceSameData(bs0, bs) { e.blist.put(bs0) } } -func (e *Encoder) kStructSfi(f *codecFnInfo) []*structFieldInfo { - if e.h.Canonical { - return f.ti.sfi.sorted() +func (e *encoder[T]) kStructFieldKey(keyType valueType, encName string) { + // use if (not switch) block, so that branch prediction picks valueTypeString first + if keyType == valueTypeString { + e.e.EncodeString(encName) + } else if keyType == valueTypeInt { + e.e.EncodeInt(must.Int(strconv.ParseInt(encName, 10, 64))) + } else if keyType == valueTypeUint { + e.e.EncodeUint(must.Uint(strconv.ParseUint(encName, 10, 64))) + } else if keyType == valueTypeFloat { + e.e.EncodeFloat64(must.Float(strconv.ParseFloat(encName, 64))) + } else { + halt.errorStr2("invalid struct key type: ", keyType.String()) } - return f.ti.sfi.source() + // e.dh.encStructFieldKey(e.e, encName, keyType, encNameAsciiAlphaNum, e.js) } -func (e *Encoder) kStructNoOmitempty(f *codecFnInfo, rv reflect.Value) { - var tisfi []*structFieldInfo +func (e *encoder[T]) kStructSimple(f *encFnInfo, rv reflect.Value) { + _ = e.e // early asserts e, e.e are not nil once + tisfi := f.ti.sfi.source() + + // To bypass encodeValue, we need to handle cases where + // the field is an interface kind. To do this, we need to handle an + // interface or a pointer to an interface differently. + // + // Easiest to just delegate to encodeValue. + + chkCirRef := e.h.CheckCircularRef + var si *structFieldInfo + var j int + // use value of chkCirRef ie if true, then send the addr of the value if f.ti.toArray || e.h.StructToArray { // toArray - tisfi = f.ti.sfi.source() + if len(tisfi) == 0 { + e.e.WriteArrayEmpty() + return + } e.arrayStart(len(tisfi)) - for _, si := range tisfi { - e.arrayElem() - e.encodeValue(si.path.field(rv), nil) + for j, si = range tisfi { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } } - e.arrayEnd() + e.c = 0 + e.e.WriteArrayEnd() } else { - tisfi = e.kStructSfi(f) + if len(tisfi) == 0 { + e.e.WriteMapEmpty() + return + } + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } e.mapStart(len(tisfi)) - keytyp := f.ti.keyType - for _, si := range tisfi { - e.mapElemKey() - e.kStructFieldKey(keytyp, si.path.encNameAsciiAlphaNum, si.encName) + for j, si = range tisfi { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.EncodeStringNoEscape4Json(si.encName) e.mapElemValue() - e.encodeValue(si.path.field(rv), nil) + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } } - e.mapEnd() + e.c = 0 + e.e.WriteMapEnd() } } -func (e *Encoder) kStructFieldKey(keyType valueType, encNameAsciiAlphaNum bool, encName string) { - encStructFieldKey(encName, e.e, e.w(), keyType, encNameAsciiAlphaNum, e.js) -} - -func (e *Encoder) kStruct(f *codecFnInfo, rv reflect.Value) { - var newlen int +func (e *encoder[T]) kStruct(f *encFnInfo, rv reflect.Value) { + _ = e.e // early asserts e, e.e are not nil once ti := f.ti toMap := !(ti.toArray || e.h.StructToArray) var mf map[string]interface{} if ti.flagMissingFielder { - mf = rv2i(rv).(MissingFielder).CodecMissingFields() toMap = true - newlen += len(mf) + mf = rv2i(rv).(MissingFielder).CodecMissingFields() } else if ti.flagMissingFielderPtr { - rv2 := e.addrRV(rv, ti.rt, ti.ptr) - mf = rv2i(rv2).(MissingFielder).CodecMissingFields() toMap = true - newlen += len(mf) + if rv.CanAddr() { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder).CodecMissingFields() + } else { + mf = rv2i(e.addrRV(rv, ti.rt, ti.ptr)).(MissingFielder).CodecMissingFields() + } } + newlen := len(mf) tisfi := ti.sfi.source() newlen += len(tisfi) var fkvs = e.slist.get(newlen)[:newlen] recur := e.h.RecursiveEmptyCheck + chkCirRef := e.h.CheckCircularRef + + var xlen int var kv sfiRv var j int + var sf encStructFieldObj if toMap { newlen = 0 - for _, si := range e.kStructSfi(f) { - kv.r = si.path.field(rv) - if si.path.omitEmpty && isEmptyValue(kv.r, e.h.TypeInfos, recur) { - continue + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + for _, si := range tisfi { + // kv.r = si.path.field(rv, false, si.encBuiltin || !chkCirRef) + // if si.omitEmpty && isEmptyValue(kv.r, e.h.TypeInfos, recur) { + // continue + // } + if si.omitEmpty { + kv.r = si.fieldNoAlloc(rv, false) // test actual field val + if isEmptyValue(kv.r, e.h.TypeInfos, recur) { + continue + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) } kv.v = si fkvs[newlen] = kv @@ -566,7 +506,7 @@ func (e *Encoder) kStruct(f *codecFnInfo, rv reflect.Value) { } var mf2s []stringIntf - if len(mf) > 0 { + if len(mf) != 0 { mf2s = make([]stringIntf, 0, len(mf)) for k, v := range mf { if k == "" { @@ -579,87 +519,142 @@ func (e *Encoder) kStruct(f *codecFnInfo, rv reflect.Value) { } } - e.mapStart(newlen + len(mf2s)) + xlen = newlen + len(mf2s) + if xlen == 0 { + e.e.WriteMapEmpty() + goto END + } + + e.mapStart(xlen) // When there are missing fields, and Canonical flag is set, // we cannot have the missing fields and struct fields sorted independently. // We have to capture them together and sort as a unit. - if len(mf2s) > 0 && e.h.Canonical { + if len(mf2s) != 0 && e.h.Canonical { mf2w := make([]encStructFieldObj, newlen+len(mf2s)) for j = 0; j < newlen; j++ { kv = fkvs[j] - mf2w[j] = encStructFieldObj{kv.v.encName, kv.r, nil, kv.v.path.encNameAsciiAlphaNum, true} + mf2w[j] = encStructFieldObj{kv.v.encName, kv.r, nil, true, + !kv.v.encNameEscape4Json, kv.v.encBuiltin} } for _, v := range mf2s { - mf2w[j] = encStructFieldObj{v.v, reflect.Value{}, v.i, false, false} + mf2w[j] = encStructFieldObj{v.v, reflect.Value{}, v.i, false, false, false} j++ } sort.Sort((encStructFieldObjSlice)(mf2w)) - for _, v := range mf2w { - e.mapElemKey() - e.kStructFieldKey(ti.keyType, v.ascii, v.key) + for j, sf = range mf2w { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && sf.noEsc4json { + e.e.EncodeStringNoEscape4Json(sf.key) + } else { + e.kStructFieldKey(ti.keyType, sf.key) + } e.mapElemValue() - if v.isRv { - e.encodeValue(v.rv, nil) + if sf.isRv { + if sf.builtin { + e.encodeIB(rv2i(baseRVRV(sf.rv))) + } else { + e.encodeValue(sf.rv, nil) + } } else { - e.encode(v.intf) + if !e.encodeBuiltin(sf.intf) { + e.encodeR(reflect.ValueOf(sf.intf)) + } + //e.encodeI(sf.intf) // MARKER inlined } } } else { keytyp := ti.keyType for j = 0; j < newlen; j++ { kv = fkvs[j] - e.mapElemKey() - e.kStructFieldKey(keytyp, kv.v.path.encNameAsciiAlphaNum, kv.v.encName) + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && !kv.v.encNameEscape4Json { + e.e.EncodeStringNoEscape4Json(kv.v.encName) + } else { + e.kStructFieldKey(keytyp, kv.v.encName) + } e.mapElemValue() - e.encodeValue(kv.r, nil) + if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } } for _, v := range mf2s { - e.mapElemKey() - e.kStructFieldKey(keytyp, false, v.v) + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.kStructFieldKey(keytyp, v.v) e.mapElemValue() - e.encode(v.i) + if !e.encodeBuiltin(v.i) { + e.encodeR(reflect.ValueOf(v.i)) + } + // e.encodeI(v.i) // MARKER inlined + j++ } } - e.mapEnd() + e.c = 0 + e.e.WriteMapEnd() } else { newlen = len(tisfi) for i, si := range tisfi { // use unsorted array (to match sequence in struct) - kv.r = si.path.field(rv) - // use the zero value. - // if a reference or struct, set to nil (so you do not output too much) - if si.path.omitEmpty && isEmptyValue(kv.r, e.h.TypeInfos, recur) { - switch kv.r.Kind() { - case reflect.Struct, reflect.Interface, reflect.Ptr, reflect.Array, reflect.Map, reflect.Slice: + // kv.r = si.path.field(rv, false, si.encBuiltin || !chkCirRef) + // kv.r = si.path.field(rv, false, !si.omitEmpty || si.encBuiltin || !chkCirRef) + if si.omitEmpty { + // use the zero value. + // if a reference or struct, set to nil (so you do not output too much) + kv.r = si.fieldNoAlloc(rv, false) // test actual field val + if isEmptyContainerValue(kv.r, e.h.TypeInfos, recur) { kv.r = reflect.Value{} //encode as nil } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) } + kv.v = si fkvs[i] = kv } + + if newlen == 0 { + e.e.WriteArrayEmpty() + goto END + } + // encode it all e.arrayStart(newlen) for j = 0; j < newlen; j++ { - e.arrayElem() - e.encodeValue(fkvs[j].r, nil) + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + kv = fkvs[j] + if !kv.r.IsValid() { + e.e.EncodeNil() + } else if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } } - e.arrayEnd() + e.c = 0 + e.e.WriteArrayEnd() } +END: // do not use defer. Instead, use explicit pool return at end of function. // defer has a cost we are trying to avoid. // If there is a panic and these slices are not returned, it is ok. e.slist.put(fkvs) } -func (e *Encoder) kMap(f *codecFnInfo, rv reflect.Value) { +func (e *encoder[T]) kMap(f *encFnInfo, rv reflect.Value) { + _ = e.e // early asserts e, e.e are not nil once l := rvLenMap(rv) - e.mapStart(l) if l == 0 { - e.mapEnd() + e.e.WriteMapEmpty() return } + e.mapStart(l) // determine the underlying key and val encFn's for the map. // This eliminates some work which is done for each loop iteration i.e. @@ -669,7 +664,7 @@ func (e *Encoder) kMap(f *codecFnInfo, rv reflect.Value) { // encoding type, because preEncodeValue may break it down to // a concrete type and kInterface will bomb. - var keyFn, valFn *codecFn + var keyFn, valFn *encFn[T] ktypeKind := reflect.Kind(f.ti.keykind) vtypeKind := reflect.Kind(f.ti.elemkind) @@ -681,7 +676,7 @@ func (e *Encoder) kMap(f *codecFnInfo, rv reflect.Value) { rtvalkind = rtval.Kind() } if rtvalkind != reflect.Interface { - valFn = e.h.fn(rtval) + valFn = e.fn(rtval) } var rvv = mapAddrLoopvarRV(f.ti.elem, vtypeKind) @@ -689,19 +684,20 @@ func (e *Encoder) kMap(f *codecFnInfo, rv reflect.Value) { rtkey := f.ti.key var keyTypeIsString = stringTypId == rt2id(rtkey) // rtkeyid if keyTypeIsString { - keyFn = e.h.fn(rtkey) + keyFn = e.fn(rtkey) } else { for rtkey.Kind() == reflect.Ptr { rtkey = rtkey.Elem() } if rtkey.Kind() != reflect.Interface { - keyFn = e.h.fn(rtkey) + keyFn = e.fn(rtkey) } } if e.h.Canonical { e.kMapCanonical(f.ti, rv, rvv, keyFn, valFn) - e.mapEnd() + e.c = 0 + e.e.WriteMapEnd() return } @@ -710,22 +706,35 @@ func (e *Encoder) kMap(f *codecFnInfo, rv reflect.Value) { var it mapIter mapRange(&it, rv, rvk, rvv, true) - for it.Next() { - e.mapElemKey() + kbuiltin := f.ti.tikey.flagEncBuiltin + vbuiltin := f.ti.tielem.flagEncBuiltin + for j := 0; it.Next(); j++ { + rv = it.Key() + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) if keyTypeIsString { - e.e.EncodeString(it.Key().String()) + e.e.EncodeString(rvGetString(rv)) + } else if kbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) } else { - e.encodeValue(it.Key(), keyFn) + e.encodeValue(rv, keyFn) } e.mapElemValue() - e.encodeValue(it.Value(), valFn) + rv = it.Value() + if vbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(it.Value(), valFn) + } } it.Done() - e.mapEnd() + e.c = 0 + e.e.WriteMapEnd() } -func (e *Encoder) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valFn *codecFn) { +func (e *encoder[T]) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valFn *encFn[T]) { + _ = e.e // early asserts e, e.e are not nil once // The base kind of the type of the map key is sufficient for ordering. // We only do out of band if that kind is not ordered (number or string), bool or time.Time. // If the key is a predeclared type, directly call methods on encDriver e.g. EncodeString @@ -735,9 +744,11 @@ func (e *Encoder) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valF mks := rv.MapKeys() rtkeyKind := rtkey.Kind() - kfast := mapKeyFastKindFor(rtkeyKind) - visindirect := mapStoresElemIndirect(uintptr(ti.elemsize)) - visref := refBitset.isset(ti.elemkind) + mparams := getMapReqParams(ti) + + // kfast := mapKeyFastKindFor(rtkeyKind) + // visindirect := mapStoresElemIndirect(uintptr(ti.elemsize)) + // visref := refBitset.isset(ti.elemkind) switch rtkeyKind { case reflect.Bool: @@ -751,104 +762,110 @@ func (e *Encoder) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valF mks[0], mks[1] = mks[1], mks[0] } for i := range mks { - e.mapElemKey() + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) if rtkeydecl { e.e.EncodeBool(mks[i].Bool()) } else { e.encodeValueNonNil(mks[i], keyFn) } e.mapElemValue() - e.encodeValue(mapGet(rv, mks[i], rvv, kfast, visindirect, visref), valFn) + e.encodeValue(mapGet(rv, mks[i], rvv, mparams), valFn) } case reflect.String: - mksv := make([]stringRv, len(mks)) + mksv := make([]orderedRv[string], len(mks)) for i, k := range mks { v := &mksv[i] v.r = k - v.v = k.String() + v.v = rvGetString(k) } - sort.Sort(stringRvSlice(mksv)) + slices.SortFunc(mksv, cmpOrderedRv) for i := range mksv { - e.mapElemKey() + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) if rtkeydecl { e.e.EncodeString(mksv[i].v) } else { e.encodeValueNonNil(mksv[i].r, keyFn) } e.mapElemValue() - e.encodeValue(mapGet(rv, mksv[i].r, rvv, kfast, visindirect, visref), valFn) + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) } case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr: - mksv := make([]uint64Rv, len(mks)) + mksv := make([]orderedRv[uint64], len(mks)) for i, k := range mks { v := &mksv[i] v.r = k v.v = k.Uint() } - sort.Sort(uint64RvSlice(mksv)) + slices.SortFunc(mksv, cmpOrderedRv) for i := range mksv { - e.mapElemKey() + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) if rtkeydecl { e.e.EncodeUint(mksv[i].v) } else { e.encodeValueNonNil(mksv[i].r, keyFn) } e.mapElemValue() - e.encodeValue(mapGet(rv, mksv[i].r, rvv, kfast, visindirect, visref), valFn) + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) } case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: - mksv := make([]int64Rv, len(mks)) + mksv := make([]orderedRv[int64], len(mks)) for i, k := range mks { v := &mksv[i] v.r = k v.v = k.Int() } - sort.Sort(int64RvSlice(mksv)) + slices.SortFunc(mksv, cmpOrderedRv) for i := range mksv { - e.mapElemKey() + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) if rtkeydecl { e.e.EncodeInt(mksv[i].v) } else { e.encodeValueNonNil(mksv[i].r, keyFn) } e.mapElemValue() - e.encodeValue(mapGet(rv, mksv[i].r, rvv, kfast, visindirect, visref), valFn) + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) } case reflect.Float32: - mksv := make([]float64Rv, len(mks)) + mksv := make([]orderedRv[float64], len(mks)) for i, k := range mks { v := &mksv[i] v.r = k v.v = k.Float() } - sort.Sort(float64RvSlice(mksv)) + slices.SortFunc(mksv, cmpOrderedRv) for i := range mksv { - e.mapElemKey() + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) if rtkeydecl { e.e.EncodeFloat32(float32(mksv[i].v)) } else { e.encodeValueNonNil(mksv[i].r, keyFn) } e.mapElemValue() - e.encodeValue(mapGet(rv, mksv[i].r, rvv, kfast, visindirect, visref), valFn) + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) } case reflect.Float64: - mksv := make([]float64Rv, len(mks)) + mksv := make([]orderedRv[float64], len(mks)) for i, k := range mks { v := &mksv[i] v.r = k v.v = k.Float() } - sort.Sort(float64RvSlice(mksv)) + slices.SortFunc(mksv, cmpOrderedRv) for i := range mksv { - e.mapElemKey() + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) if rtkeydecl { e.e.EncodeFloat64(mksv[i].v) } else { e.encodeValueNonNil(mksv[i].r, keyFn) } e.mapElemValue() - e.encodeValue(mapGet(rv, mksv[i].r, rvv, kfast, visindirect, visref), valFn) + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) } default: if rtkey == timeTyp { @@ -858,12 +875,13 @@ func (e *Encoder) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valF v.r = k v.v = rv2i(k).(time.Time) } - sort.Sort(timeRvSlice(mksv)) + slices.SortFunc(mksv, cmpTimeRv) for i := range mksv { - e.mapElemKey() + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) e.e.EncodeTime(mksv[i].v) e.mapElemValue() - e.encodeValue(mapGet(rv, mksv[i].r, rvv, kfast, visindirect, visref), valFn) + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) } break } @@ -874,41 +892,27 @@ func (e *Encoder) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valF mksv := bs0 mksbv := make([]bytesRv, len(mks)) - func() { - // replicate sideEncode logic - defer func(wb bytesEncAppender, bytes bool, c containerState, state interface{}) { - e.wb = wb - e.bytes = bytes - e.c = c - e.e.restoreState(state) - }(e.wb, e.bytes, e.c, e.e.captureState()) - - // e2 := NewEncoderBytes(&mksv, e.hh) - e.wb = bytesEncAppender{mksv[:0], &mksv} - e.bytes = true - e.c = 0 - e.e.resetState() - + sideEncode(e.hh, &e.h.sideEncPool, func(se encoderI) { + se.ResetBytes(&mksv) for i, k := range mks { v := &mksbv[i] l := len(mksv) - - e.c = containerMapKey - e.encodeValue(k, nil) - e.atEndOfEncode() - e.w().end() - + se.setContainerState(containerMapKey) + se.encodeR(baseRVRV(k)) + se.atEndOfEncode() + se.writerEnd() v.r = k v.v = mksv[l:] } - }() + }) - sort.Sort(bytesRvSlice(mksbv)) + slices.SortFunc(mksbv, cmpBytesRv) for j := range mksbv { - e.mapElemKey() - e.encWr.writeb(mksbv[j].v) + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.writeBytesAsis(mksbv[j].v) e.mapElemValue() - e.encodeValue(mapGet(rv, mksbv[j].r, rvv, kfast, visindirect, visref), valFn) + e.encodeValue(mapGet(rv, mksbv[j].r, rvv, mparams), valFn) } e.blist.put(mksv) if !byteSliceSameData(bs0, mksv) { @@ -917,91 +921,29 @@ func (e *Encoder) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valF } } -// Encoder writes an object to an output stream in a supported format. -// -// Encoder is NOT safe for concurrent use i.e. a Encoder cannot be used -// concurrently in multiple goroutines. -// -// However, as Encoder could be allocation heavy to initialize, a Reset method is provided -// so its state can be reused to decode new input streams repeatedly. -// This is the idiomatic way to use. -type Encoder struct { - panicHdl - - e encDriver - - h *BasicHandle - - // hopefully, reduce derefencing cost by laying the encWriter inside the Encoder - encWr - - // ---- cpu cache line boundary - hh Handle - - blist bytesFreelist - err error - - // ---- cpu cache line boundary - - // ---- writable fields during execution --- *try* to keep in sep cache line - - // ci holds interfaces during an encoding (if CheckCircularRef=true) - // - // We considered using a []uintptr (slice of pointer addresses) retrievable via rv.UnsafeAddr. - // However, it is possible for the same pointer to point to 2 different types e.g. - // type T struct { tHelper } - // Here, for var v T; &v and &v.tHelper are the same pointer. - // Consequently, we need a tuple of type and pointer, which interface{} natively provides. - ci []interface{} // []uintptr - - perType encPerType - - slist sfiRvFreelist -} - -// NewEncoder returns an Encoder for encoding into an io.Writer. -// -// For efficiency, Users are encouraged to configure WriterBufferSize on the handle -// OR pass in a memory buffered writer (eg bufio.Writer, bytes.Buffer). -func NewEncoder(w io.Writer, h Handle) *Encoder { - e := h.newEncDriver().encoder() - if w != nil { - e.Reset(w) - } - return e -} - -// NewEncoderBytes returns an encoder for encoding directly and efficiently -// into a byte slice, using zero-copying to temporary slices. -// -// It will potentially replace the output byte slice pointed to. -// After encoding, the out parameter contains the encoded contents. -func NewEncoderBytes(out *[]byte, h Handle) *Encoder { - e := h.newEncDriver().encoder() - if out != nil { - e.ResetBytes(out) - } - return e -} - -func (e *Encoder) HandleName() string { - return e.hh.Name() -} - -func (e *Encoder) init(h Handle) { +func (e *encoder[T]) init(h Handle) { initHandle(h) - e.err = errEncoderNotInitialized - e.bytes = true + callMake(&e.e) e.hh = h e.h = h.getBasicHandle() - e.be = e.hh.isBinary() -} + // e.be = e.hh.isBinary() + e.err = errEncoderNotInitialized + + // e.fp = fastpathEList[T]() + e.fp = e.e.init(h, &e.encoderBase, e).(*fastpathEs[T]) + + if e.bytes { + e.rtidFn = &e.h.rtidFnsEncBytes + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtBytes + } else { + e.rtidFn = &e.h.rtidFnsEncIO + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtIO + } -func (e *Encoder) w() *encWr { - return &e.encWr + e.reset() } -func (e *Encoder) resetCommon() { +func (e *encoder[T]) reset() { e.e.reset() if e.ci != nil { e.ci = e.ci[:0] @@ -1012,26 +954,6 @@ func (e *Encoder) resetCommon() { e.err = nil } -// Reset resets the Encoder with a new output stream. -// -// This accommodates using the state of the Encoder, -// where it has "cached" information about sub-engines. -func (e *Encoder) Reset(w io.Writer) { - e.bytes = false - if e.wf == nil { - e.wf = new(bufioEncWriter) - } - e.wf.reset(w, e.h.WriterBufferSize, &e.blist) - e.resetCommon() -} - -// ResetBytes resets the Encoder with a new destination output []byte. -func (e *Encoder) ResetBytes(out *[]byte) { - e.bytes = true - e.wb.reset(encInBytes(out), out) - e.resetCommon() -} - // Encode writes an object into a stream. // // Encoding can be configured via the struct tag for the fields. @@ -1117,73 +1039,77 @@ func (e *Encoder) ResetBytes(out *[]byte) { // Note that struct field names and keys in map[string]XXX will be treated as symbols. // Some formats support symbols (e.g. binc) and will properly encode the string // only once in the stream, and use a tag to refer to it thereafter. -func (e *Encoder) Encode(v interface{}) (err error) { +// +// Note that an error from an Encode call will make the Encoder unusable moving forward. +// This is because the state of the Encoder, it's output stream, etc are no longer stable. +// Any subsequent calls to Encode will trigger the same error. +func (e *encoder[T]) Encode(v interface{}) (err error) { // tried to use closure, as runtime optimizes defer with no params. // This seemed to be causing weird issues (like circular reference found, unexpected panic, etc). // Also, see https://github.com/golang/go/issues/14939#issuecomment-417836139 - if !debugging { - defer func() { - // if error occurred during encoding, return that error; - // else if error occurred on end'ing (i.e. during flush), return that error. - if x := recover(); x != nil { - panicValToErr(e, x, &e.err) - err = e.err - } - }() - } - - e.MustEncode(v) + defer panicValToErr(e, callRecoverSentinel, &e.err, &err, debugging) + e.mustEncode(v) return } // MustEncode is like Encode, but panics if unable to Encode. // // Note: This provides insight to the code location that triggered the error. -func (e *Encoder) MustEncode(v interface{}) { +// +// Note that an error from an Encode call will make the Encoder unusable moving forward. +// This is because the state of the Encoder, it's output stream, etc are no longer stable. +// Any subsequent calls to Encode will trigger the same error. +func (e *encoder[T]) MustEncode(v interface{}) { + defer panicValToErr(e, callRecoverSentinel, &e.err, nil, true) + e.mustEncode(v) + return +} + +func (e *encoder[T]) mustEncode(v interface{}) { halt.onerror(e.err) if e.hh == nil { halt.onerror(errNoFormatHandle) } e.calls++ - e.encode(v) + if !e.encodeBuiltin(v) { + e.encodeR(reflect.ValueOf(v)) + } + // e.encodeI(v) // MARKER inlined e.calls-- if e.calls == 0 { - e.atEndOfEncode() - e.w().end() + e.e.atEndOfEncode() + e.e.writerEnd() } } -// Release is a no-op. -// -// Deprecated: Pooled resources are not used with an Encoder. -// This method is kept for compatibility reasons only. -func (e *Encoder) Release() { +func (e *encoder[T]) encodeI(iv interface{}) { + if !e.encodeBuiltin(iv) { + e.encodeR(reflect.ValueOf(iv)) + } } -func (e *Encoder) encode(iv interface{}) { - // MARKER: a switch with only concrete types can be optimized. - // consequently, we deal with nil and interfaces outside the switch. - - if iv == nil { - e.e.EncodeNil() - return +func (e *encoder[T]) encodeIB(iv interface{}) { + if !e.encodeBuiltin(iv) { + // panic("invalid type passed to encodeBuiltin") + // halt.errorf("invalid type passed to encodeBuiltin: %T", iv) + // MARKER: calling halt.errorf pulls in fmt.Sprintf/Errorf which makes this non-inlineable + halt.errorStr("[should not happen] invalid type passed to encodeBuiltin") } +} - rv, ok := isNil(iv) - if ok { - e.e.EncodeNil() - return - } +func (e *encoder[T]) encodeR(base reflect.Value) { + e.encodeValue(base, nil) +} +func (e *encoder[T]) encodeBuiltin(iv interface{}) (ok bool) { + ok = true switch v := iv.(type) { - // case nil: + case nil: + e.e.EncodeNil() // case Selfer: case Raw: e.rawBytes(v) - case reflect.Value: - e.encodeValue(v, nil) - case string: e.e.EncodeString(v) case bool: @@ -1221,157 +1147,125 @@ func (e *Encoder) encode(iv interface{}) { case time.Time: e.e.EncodeTime(v) case []byte: - e.e.EncodeStringBytesRaw(v) - case *Raw: - e.rawBytes(*v) - case *string: - e.e.EncodeString(*v) - case *bool: - e.e.EncodeBool(*v) - case *int: - e.e.EncodeInt(int64(*v)) - case *int8: - e.e.EncodeInt(int64(*v)) - case *int16: - e.e.EncodeInt(int64(*v)) - case *int32: - e.e.EncodeInt(int64(*v)) - case *int64: - e.e.EncodeInt(*v) - case *uint: - e.e.EncodeUint(uint64(*v)) - case *uint8: - e.e.EncodeUint(uint64(*v)) - case *uint16: - e.e.EncodeUint(uint64(*v)) - case *uint32: - e.e.EncodeUint(uint64(*v)) - case *uint64: - e.e.EncodeUint(*v) - case *uintptr: - e.e.EncodeUint(uint64(*v)) - case *float32: - e.e.EncodeFloat32(*v) - case *float64: - e.e.EncodeFloat64(*v) - case *complex64: - e.encodeComplex64(*v) - case *complex128: - e.encodeComplex128(*v) - case *time.Time: - e.e.EncodeTime(*v) - case *[]byte: - if *v == nil { - e.e.EncodeNil() - } else { - e.e.EncodeStringBytesRaw(*v) - } + e.e.EncodeBytes(v) // e.e.EncodeStringBytesRaw(v) default: // we can't check non-predefined types, as they might be a Selfer or extension. - if skipFastpathTypeSwitchInDirectCall || !fastpathEncodeTypeSwitch(iv, e) { - e.encodeValue(rv, nil) - } + ok = !skipFastpathTypeSwitchInDirectCall && e.dh.fastpathEncodeTypeSwitch(iv, e) } + return } // encodeValue will encode a value. // // Note that encodeValue will handle nil in the stream early, so that the // subsequent calls i.e. kXXX methods, etc do not have to handle it themselves. -func (e *Encoder) encodeValue(rv reflect.Value, fn *codecFn) { +func (e *encoder[T]) encodeValue(rv reflect.Value, fn *encFn[T]) { + // MARKER: We check if value is nil here, so that the kXXX method do not have to. // if a valid fn is passed, it MUST BE for the dereferenced type of rv - // MARKER: We check if value is nil here, so that the kXXX method do not have to. + var ciPushes int + // if e.h.CheckCircularRef { + // ciPushes = e.ci.pushRV(rv) + // } - var sptr interface{} var rvp reflect.Value var rvpValid bool -TOP: + +RV: switch rv.Kind() { case reflect.Ptr: if rvIsNil(rv) { e.e.EncodeNil() - return + goto END } rvpValid = true rvp = rv rv = rv.Elem() - goto TOP + // fn = nil // underlying type still same - no change + if e.h.CheckCircularRef && e.ci.canPushElemKind(rv.Kind()) { + e.ci.push(rv2i(rvp)) + ciPushes++ + } + goto RV case reflect.Interface: if rvIsNil(rv) { e.e.EncodeNil() - return + goto END } rvpValid = false rvp = reflect.Value{} rv = rv.Elem() - goto TOP - case reflect.Struct: - if rvpValid && e.h.CheckCircularRef { - sptr = rv2i(rvp) - for _, vv := range e.ci { - if eq4i(sptr, vv) { // error if sptr already seen - e.errorf("circular reference found: %p, %T", sptr, sptr) - } + fn = nil // underlying type may change, so prompt a reset + goto RV + case reflect.Map: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteMapEmpty() + } else { + e.e.EncodeNil() } - e.ci = append(e.ci, sptr) + goto END } - case reflect.Slice, reflect.Map, reflect.Chan: + case reflect.Slice, reflect.Chan: if rvIsNil(rv) { - e.e.EncodeNil() - return + if e.h.NilCollectionToZeroLength { + e.e.WriteArrayEmpty() + } else { + e.e.EncodeNil() + } + goto END } case reflect.Invalid, reflect.Func: e.e.EncodeNil() - return + goto END } if fn == nil { - fn = e.h.fn(rv.Type()) + fn = e.fn(rv.Type()) } if !fn.i.addrE { // typically, addrE = false, so check it first // keep rv same } else if rvpValid { rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) } else { rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) } fn.fe(e, &fn.i, rv) - if sptr != nil { // remove sptr - e.ci = e.ci[:len(e.ci)-1] +END: + if ciPushes > 0 { + e.ci.pop(ciPushes) } } -// encodeValueNonNil can encode a number, bool, or string -// OR non-nil values of kind map, slice and chan. -func (e *Encoder) encodeValueNonNil(rv reflect.Value, fn *codecFn) { - if fn == nil { - fn = e.h.fn(rv.Type()) - } - +func (e *encoder[T]) encodeValueNonNil(rv reflect.Value, fn *encFn[T]) { + // only call this if a primitive (number, bool, string) OR + // a non-nil collection (map/slice/chan). + // + // Expects fn to be non-nil if fn.i.addrE { // typically, addrE = false, so check it first - rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } } fn.fe(e, &fn.i, rv) } -// addrRV returns a addressable value which may be readonly -func (e *Encoder) addrRV(rv reflect.Value, typ, ptrType reflect.Type) (rva reflect.Value) { - if rv.CanAddr() { - return rvAddr(rv, ptrType) - } - if e.h.NoAddressableReadonly { - rva = reflect.New(typ) - rvSetDirect(rva.Elem(), rv) - return +func (e *encoder[T]) encodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + e.encodeValue(baseRV(v), e.fn(t)) + } else { + e.encodeValue(baseRV(v), e.fnNoExt(t)) } - return rvAddr(e.perType.AddressableRO(rv), ptrType) } -func (e *Encoder) marshalUtf8(bs []byte, fnerr error) { - e.onerror(fnerr) +func (e *encoder[T]) marshalUtf8(bs []byte, fnerr error) { + halt.onerror(fnerr) if bs == nil { e.e.EncodeNil() } else { @@ -1379,148 +1273,380 @@ func (e *Encoder) marshalUtf8(bs []byte, fnerr error) { } } -func (e *Encoder) marshalAsis(bs []byte, fnerr error) { - e.onerror(fnerr) +func (e *encoder[T]) marshalAsis(bs []byte, fnerr error) { + halt.onerror(fnerr) if bs == nil { e.e.EncodeNil() } else { - e.encWr.writeb(bs) // e.asis(bs) + e.e.writeBytesAsis(bs) // e.asis(bs) } } -func (e *Encoder) marshalRaw(bs []byte, fnerr error) { - e.onerror(fnerr) - if bs == nil { - e.e.EncodeNil() - } else { - e.e.EncodeStringBytesRaw(bs) - } +func (e *encoder[T]) marshalRaw(bs []byte, fnerr error) { + halt.onerror(fnerr) + e.e.EncodeBytes(bs) } -func (e *Encoder) rawBytes(vv Raw) { +func (e *encoder[T]) rawBytes(vv Raw) { v := []byte(vv) if !e.h.Raw { - e.errorf("Raw values cannot be encoded: %v", v) + halt.errorBytes("Raw values cannot be encoded: ", v) } - e.encWr.writeb(v) + e.e.writeBytesAsis(v) } -func (e *Encoder) wrapErr(v error, err *error) { - *err = wrapCodecErr(v, e.hh.Name(), 0, true) +func (e *encoder[T]) fn(t reflect.Type) *encFn[T] { + return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false) +} + +func (e *encoder[T]) fnNoExt(t reflect.Type) *encFn[T] { + return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true) } // ---- container tracker methods // Note: We update the .c after calling the callback. -// This way, the callback can know what the last status was. +// +// Callbacks ie Write(Map|Array)XXX should not use the containerState. +// It is there for post-callback use. +// Instead, callbacks have a parameter to tell if first time or not. +// +// Some code is commented out below, as they are manually inlined. +// Commented code is retained here for convernience. -func (e *Encoder) mapStart(length int) { +func (e *encoder[T]) mapStart(length int) { e.e.WriteMapStart(length) e.c = containerMapStart } -func (e *Encoder) mapElemKey() { - if e.js { - e.jsondriver().WriteMapElemKey() - } - e.c = containerMapKey -} +// func (e *encoder[T]) mapElemKey(firstTime bool) { +// e.e.WriteMapElemKey(firstTime) +// e.c = containerMapKey +// } -func (e *Encoder) mapElemValue() { - if e.js { - e.jsondriver().WriteMapElemValue() - } +func (e *encoder[T]) mapElemValue() { + e.e.WriteMapElemValue() e.c = containerMapValue } -func (e *Encoder) mapEnd() { - e.e.WriteMapEnd() - e.c = 0 -} +// func (e *encoder[T]) mapEnd() { +// e.e.WriteMapEnd() +// e.c = 0 +// } -func (e *Encoder) arrayStart(length int) { +func (e *encoder[T]) arrayStart(length int) { e.e.WriteArrayStart(length) e.c = containerArrayStart } -func (e *Encoder) arrayElem() { - if e.js { - e.jsondriver().WriteArrayElem() - } - e.c = containerArrayElem +// func (e *encoder[T]) arrayElem(firstTime bool) { +// e.e.WriteArrayElem(firstTime) +// e.c = containerArrayElem +// } + +// func (e *encoder[T]) arrayEnd() { +// e.e.WriteArrayEnd() +// e.c = 0 +// } + +// ---------- + +func (e *encoder[T]) writerEnd() { + e.e.writerEnd() } -func (e *Encoder) arrayEnd() { - e.e.WriteArrayEnd() - e.c = 0 +func (e *encoder[T]) atEndOfEncode() { + e.e.atEndOfEncode() } -// ---------- +// Reset resets the Encoder with a new output stream. +// +// This accommodates using the state of the Encoder, +// where it has "cached" information about sub-engines. +func (e *encoder[T]) Reset(w io.Writer) { + if e.bytes { + halt.onerror(errEncNoResetBytesWithWriter) + } + e.reset() + if w == nil { + w = io.Discard + } + e.e.resetOutIO(w) +} -func (e *Encoder) haltOnMbsOddLen(length int) { - if length&1 != 0 { // similar to &1==1 or %2 == 1 - e.errorf("mapBySlice requires even slice length, but got %v", length) +// ResetBytes resets the Encoder with a new destination output []byte. +func (e *encoder[T]) ResetBytes(out *[]byte) { + if !e.bytes { + halt.onerror(errEncNoResetWriterWithBytes) } + e.resetBytes(out) } -func (e *Encoder) atEndOfEncode() { - // e.e.atEndOfEncode() - if e.js { - e.jsondriver().atEndOfEncode() +// only call this iff you are sure it is a bytes encoder +func (e *encoder[T]) resetBytes(out *[]byte) { + e.reset() + if out == nil { + out = &bytesEncAppenderDefOut } + e.e.resetOutBytes(out) } -func (e *Encoder) sideEncode(v interface{}, basetype reflect.Type, bs *[]byte) { - // rv := baseRV(v) - // e2 := NewEncoderBytes(bs, e.hh) - // e2.encodeValue(rv, e2.h.fnNoExt(basetype)) - // e2.atEndOfEncode() - // e2.w().end() +// ---- - defer func(wb bytesEncAppender, bytes bool, c containerState, state interface{}) { - e.wb = wb - e.bytes = bytes - e.c = c - e.e.restoreState(state) - }(e.wb, e.bytes, e.c, e.e.captureState()) +func (helperEncDriver[T]) newEncoderBytes(out *[]byte, h Handle) *encoder[T] { + var c1 encoder[T] + c1.bytes = true + c1.init(h) + c1.ResetBytes(out) + return &c1 +} - e.wb = bytesEncAppender{encInBytes(bs)[:0], bs} - e.bytes = true - e.c = 0 - e.e.resetState() +func (helperEncDriver[T]) newEncoderIO(out io.Writer, h Handle) *encoder[T] { + var c1 encoder[T] + c1.bytes = false + c1.init(h) + c1.Reset(out) + return &c1 +} - // must call using fnNoExt - rv := baseRV(v) - e.encodeValue(rv, e.h.fnNoExt(basetype)) - e.atEndOfEncode() - e.w().end() +func (helperEncDriver[T]) encFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathEs[T]) (f *fastpathE[T], u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +// ---- + +func (helperEncDriver[T]) encFindRtidFn(s []encRtidFn[T], rtid uintptr) (i uint, fn *encFn[T]) { + // binary search. Adapted from sort/search.go. Use goto (not for loop) to allow inlining. + var h uint // var h, i uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 // avoid overflow when computing h // h = i + (j-i)/2 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return } -func encInBytes(out *[]byte) (in []byte) { - in = *out - if in == nil { - in = make([]byte, defEncByteBufSize) +func (helperEncDriver[T]) encFromRtidFnSlice(fns *atomicRtidFnSlice) (s []encRtidFn[T]) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]encRtidFn[T]](v)) } return } -func encStructFieldKey(encName string, ee encDriver, w *encWr, - keyType valueType, encNameAsciiAlphaNum bool, js bool) { - // use if-else-if, not switch (which compiles to binary-search) - // since keyType is typically valueTypeString, branch prediction is pretty good. +func (dh helperEncDriver[T]) encFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, + x *BasicHandle, fp *fastpathEs[T], checkExt bool) (fn *encFn[T]) { + return dh.encFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} - if keyType == valueTypeString { - if js && encNameAsciiAlphaNum { // keyType == valueTypeString - w.writeqstr(encName) - } else { // keyType == valueTypeString - ee.EncodeString(encName) +func (dh helperEncDriver[T]) encFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEs[T], + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFn[T]) { + rtid := rt2id(rt) + var sp []encRtidFn[T] = dh.encFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.encFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.encFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperEncDriver[T]) encFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEs[T], + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFn[T]) { + + fn = dh.encFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []encRtidFn[T] + mu.Lock() + sp = dh.encFromRtidFnSlice(fns) + // since this is an atomic load/store, we MUST use a different array each time, + // else we have a data race when a store is happening simultaneously with a encFindRtidFn call. + if sp == nil { + sp = []encRtidFn[T]{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.encFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]encRtidFn[T], len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = encRtidFn[T]{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) } - } else if keyType == valueTypeInt { - ee.EncodeInt(must.Int(strconv.ParseInt(encName, 10, 64))) - } else if keyType == valueTypeUint { - ee.EncodeUint(must.Uint(strconv.ParseUint(encName, 10, 64))) - } else if keyType == valueTypeFloat { - ee.EncodeFloat64(must.Float(strconv.ParseFloat(encName, 64))) + } + mu.Unlock() + return +} + +func (dh helperEncDriver[T]) encFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathEs[T], + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFn[T]) { + fn = new(encFn[T]) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + // anything can be an extension except the built-in ones: time, raw and rawext. + // ensure we check for these types, then if extension, before checking if + // it implementes one of the pre-declared interfaces. + + // fi.addrEf = true + + if rtid == timeTypId && timeBuiltin { + fn.fe = (*encoder[T]).kTime + } else if rtid == rawTypId { + fn.fe = (*encoder[T]).raw + } else if rtid == rawExtTypId { + fn.fe = (*encoder[T]).rawExt + fi.addrE = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fe = (*encoder[T]).ext + if rk == reflect.Struct || rk == reflect.Array { + fi.addrE = true + } + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fe = (*encoder[T]).selferMarshal + fi.addrE = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fe = (*encoder[T]).binaryMarshal + fi.addrE = ti.flagBinaryMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + //If JSON, we should check JSONMarshal before textMarshal + fn.fe = (*encoder[T]).jsonMarshal + fi.addrE = ti.flagJsonMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fe = (*encoder[T]).textMarshal + fi.addrE = ti.flagTextMarshalerPtr } else { - halt.errorf("invalid struct key type: %v", keyType) + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + // by default (without using unsafe), + // if an array is not addressable, converting from an array to a slice + // requires an allocation (see helper_not_unsafe.go: func rvGetSlice4Array). + // + // (Non-addressable arrays mostly occur as keys/values from a map). + // + // However, fastpath functions are mostly for slices of numbers or strings, + // which are small by definition and thus allocation should be fast/cheap in time. + // + // Consequently, the value of doing this quick allocation to elide the overhead cost of + // non-optimized (not-unsafe) reflection is a fair price. + var rtid2 uintptr + if !ti.flagHasPkgPath { // un-named type (slice or mpa or array) + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) // ti.key for arrays = reflect.SliceOf(ti.elem) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fe = fp[idx].encfn + } + } else { // named type (with underlying type of map or slice or array) + // try to use mapping for underlying type + xfe, xrt := dh.encFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf := xfe.encfn + fn.fe = func(e *encoder[T], xf *encFnInfo, xrv reflect.Value) { + xfnf(e, xf, rvConvert(xrv, xrt)) + } + } + } + } + if fn.fe == nil { + switch rk { + case reflect.Bool: + fn.fe = (*encoder[T]).kBool + case reflect.String: + // Do not use different functions based on StringToRaw option, as that will statically + // set the function for a string type, and if the Handle is modified thereafter, + // behaviour is non-deterministic + // i.e. DO NOT DO: + // if x.StringToRaw { + // fn.fe = (*encoder[T]).kStringToRaw + // } else { + // fn.fe = (*encoder[T]).kStringEnc + // } + + fn.fe = (*encoder[T]).kString + case reflect.Int: + fn.fe = (*encoder[T]).kInt + case reflect.Int8: + fn.fe = (*encoder[T]).kInt8 + case reflect.Int16: + fn.fe = (*encoder[T]).kInt16 + case reflect.Int32: + fn.fe = (*encoder[T]).kInt32 + case reflect.Int64: + fn.fe = (*encoder[T]).kInt64 + case reflect.Uint: + fn.fe = (*encoder[T]).kUint + case reflect.Uint8: + fn.fe = (*encoder[T]).kUint8 + case reflect.Uint16: + fn.fe = (*encoder[T]).kUint16 + case reflect.Uint32: + fn.fe = (*encoder[T]).kUint32 + case reflect.Uint64: + fn.fe = (*encoder[T]).kUint64 + case reflect.Uintptr: + fn.fe = (*encoder[T]).kUintptr + case reflect.Float32: + fn.fe = (*encoder[T]).kFloat32 + case reflect.Float64: + fn.fe = (*encoder[T]).kFloat64 + case reflect.Complex64: + fn.fe = (*encoder[T]).kComplex64 + case reflect.Complex128: + fn.fe = (*encoder[T]).kComplex128 + case reflect.Chan: + fn.fe = (*encoder[T]).kChan + case reflect.Slice: + fn.fe = (*encoder[T]).kSlice + case reflect.Array: + fn.fe = (*encoder[T]).kArray + case reflect.Struct: + if ti.simple { + fn.fe = (*encoder[T]).kStructSimple + } else { + fn.fe = (*encoder[T]).kStruct + } + case reflect.Map: + fn.fe = (*encoder[T]).kMap + case reflect.Interface: + // encode: reflect.Interface are handled already by preEncodeValue + fn.fe = (*encoder[T]).kErr + default: + // reflect.Ptr and reflect.Interface are handled already by preEncodeValue + fn.fe = (*encoder[T]).kErr + } + } } + return } diff --git a/vendor/github.com/ugorji/go/codec/fast-path.generated.go b/vendor/github.com/ugorji/go/codec/fast-path.generated.go deleted file mode 100644 index 941ef79..0000000 --- a/vendor/github.com/ugorji/go/codec/fast-path.generated.go +++ /dev/null @@ -1,6157 +0,0 @@ -//go:build !notfastpath && !codec.notfastpath -// +build !notfastpath,!codec.notfastpath - -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -// Code generated from fast-path.go.tmpl - DO NOT EDIT. - -package codec - -// Fast path functions try to create a fast path encode or decode implementation -// for common maps and slices. -// -// We define the functions and register them in this single file -// so as not to pollute the encode.go and decode.go, and create a dependency in there. -// This file can be omitted without causing a build failure. -// -// The advantage of fast paths is: -// - Many calls bypass reflection altogether -// -// Currently support -// - slice of all builtin types (numeric, bool, string, []byte) -// - maps of builtin types to builtin or interface{} type, EXCEPT FOR -// keys of type uintptr, int8/16/32, uint16/32, float32/64, bool, interface{} -// AND values of type type int8/16/32, uint16/32 -// This should provide adequate "typical" implementations. -// -// Note that fast track decode functions must handle values for which an address cannot be obtained. -// For example: -// m2 := map[string]int{} -// p2 := []interface{}{m2} -// // decoding into p2 will bomb if fast track functions do not treat like unaddressable. -// - -import ( - "reflect" - "sort" -) - -const fastpathEnabled = true - -type fastpathT struct{} - -var fastpathTV fastpathT - -type fastpathE struct { - rt reflect.Type - encfn func(*Encoder, *codecFnInfo, reflect.Value) - decfn func(*Decoder, *codecFnInfo, reflect.Value) -} - -type fastpathA [56]fastpathE -type fastpathARtid [56]uintptr - -var fastpathAv fastpathA -var fastpathAvRtid fastpathARtid - -type fastpathAslice struct{} - -func (fastpathAslice) Len() int { return 56 } -func (fastpathAslice) Less(i, j int) bool { - return fastpathAvRtid[uint(i)] < fastpathAvRtid[uint(j)] -} -func (fastpathAslice) Swap(i, j int) { - fastpathAvRtid[uint(i)], fastpathAvRtid[uint(j)] = fastpathAvRtid[uint(j)], fastpathAvRtid[uint(i)] - fastpathAv[uint(i)], fastpathAv[uint(j)] = fastpathAv[uint(j)], fastpathAv[uint(i)] -} - -func fastpathAvIndex(rtid uintptr) int { - // use binary search to grab the index (adapted from sort/search.go) - // Note: we use goto (instead of for loop) so this can be inlined. - // h, i, j := 0, 0, 56 - var h, i uint - var j uint = 56 -LOOP: - if i < j { - h = (i + j) >> 1 // avoid overflow when computing h // h = i + (j-i)/2 - if fastpathAvRtid[h] < rtid { - i = h + 1 - } else { - j = h - } - goto LOOP - } - if i < 56 && fastpathAvRtid[i] == rtid { - return int(i) - } - return -1 -} - -// due to possible initialization loop error, make fastpath in an init() -func init() { - var i uint = 0 - fn := func(v interface{}, - fe func(*Encoder, *codecFnInfo, reflect.Value), - fd func(*Decoder, *codecFnInfo, reflect.Value)) { - xrt := reflect.TypeOf(v) - xptr := rt2id(xrt) - fastpathAvRtid[i] = xptr - fastpathAv[i] = fastpathE{xrt, fe, fd} - i++ - } - - fn([]interface{}(nil), (*Encoder).fastpathEncSliceIntfR, (*Decoder).fastpathDecSliceIntfR) - fn([]string(nil), (*Encoder).fastpathEncSliceStringR, (*Decoder).fastpathDecSliceStringR) - fn([][]byte(nil), (*Encoder).fastpathEncSliceBytesR, (*Decoder).fastpathDecSliceBytesR) - fn([]float32(nil), (*Encoder).fastpathEncSliceFloat32R, (*Decoder).fastpathDecSliceFloat32R) - fn([]float64(nil), (*Encoder).fastpathEncSliceFloat64R, (*Decoder).fastpathDecSliceFloat64R) - fn([]uint8(nil), (*Encoder).fastpathEncSliceUint8R, (*Decoder).fastpathDecSliceUint8R) - fn([]uint64(nil), (*Encoder).fastpathEncSliceUint64R, (*Decoder).fastpathDecSliceUint64R) - fn([]int(nil), (*Encoder).fastpathEncSliceIntR, (*Decoder).fastpathDecSliceIntR) - fn([]int32(nil), (*Encoder).fastpathEncSliceInt32R, (*Decoder).fastpathDecSliceInt32R) - fn([]int64(nil), (*Encoder).fastpathEncSliceInt64R, (*Decoder).fastpathDecSliceInt64R) - fn([]bool(nil), (*Encoder).fastpathEncSliceBoolR, (*Decoder).fastpathDecSliceBoolR) - - fn(map[string]interface{}(nil), (*Encoder).fastpathEncMapStringIntfR, (*Decoder).fastpathDecMapStringIntfR) - fn(map[string]string(nil), (*Encoder).fastpathEncMapStringStringR, (*Decoder).fastpathDecMapStringStringR) - fn(map[string][]byte(nil), (*Encoder).fastpathEncMapStringBytesR, (*Decoder).fastpathDecMapStringBytesR) - fn(map[string]uint8(nil), (*Encoder).fastpathEncMapStringUint8R, (*Decoder).fastpathDecMapStringUint8R) - fn(map[string]uint64(nil), (*Encoder).fastpathEncMapStringUint64R, (*Decoder).fastpathDecMapStringUint64R) - fn(map[string]int(nil), (*Encoder).fastpathEncMapStringIntR, (*Decoder).fastpathDecMapStringIntR) - fn(map[string]int32(nil), (*Encoder).fastpathEncMapStringInt32R, (*Decoder).fastpathDecMapStringInt32R) - fn(map[string]float64(nil), (*Encoder).fastpathEncMapStringFloat64R, (*Decoder).fastpathDecMapStringFloat64R) - fn(map[string]bool(nil), (*Encoder).fastpathEncMapStringBoolR, (*Decoder).fastpathDecMapStringBoolR) - fn(map[uint8]interface{}(nil), (*Encoder).fastpathEncMapUint8IntfR, (*Decoder).fastpathDecMapUint8IntfR) - fn(map[uint8]string(nil), (*Encoder).fastpathEncMapUint8StringR, (*Decoder).fastpathDecMapUint8StringR) - fn(map[uint8][]byte(nil), (*Encoder).fastpathEncMapUint8BytesR, (*Decoder).fastpathDecMapUint8BytesR) - fn(map[uint8]uint8(nil), (*Encoder).fastpathEncMapUint8Uint8R, (*Decoder).fastpathDecMapUint8Uint8R) - fn(map[uint8]uint64(nil), (*Encoder).fastpathEncMapUint8Uint64R, (*Decoder).fastpathDecMapUint8Uint64R) - fn(map[uint8]int(nil), (*Encoder).fastpathEncMapUint8IntR, (*Decoder).fastpathDecMapUint8IntR) - fn(map[uint8]int32(nil), (*Encoder).fastpathEncMapUint8Int32R, (*Decoder).fastpathDecMapUint8Int32R) - fn(map[uint8]float64(nil), (*Encoder).fastpathEncMapUint8Float64R, (*Decoder).fastpathDecMapUint8Float64R) - fn(map[uint8]bool(nil), (*Encoder).fastpathEncMapUint8BoolR, (*Decoder).fastpathDecMapUint8BoolR) - fn(map[uint64]interface{}(nil), (*Encoder).fastpathEncMapUint64IntfR, (*Decoder).fastpathDecMapUint64IntfR) - fn(map[uint64]string(nil), (*Encoder).fastpathEncMapUint64StringR, (*Decoder).fastpathDecMapUint64StringR) - fn(map[uint64][]byte(nil), (*Encoder).fastpathEncMapUint64BytesR, (*Decoder).fastpathDecMapUint64BytesR) - fn(map[uint64]uint8(nil), (*Encoder).fastpathEncMapUint64Uint8R, (*Decoder).fastpathDecMapUint64Uint8R) - fn(map[uint64]uint64(nil), (*Encoder).fastpathEncMapUint64Uint64R, (*Decoder).fastpathDecMapUint64Uint64R) - fn(map[uint64]int(nil), (*Encoder).fastpathEncMapUint64IntR, (*Decoder).fastpathDecMapUint64IntR) - fn(map[uint64]int32(nil), (*Encoder).fastpathEncMapUint64Int32R, (*Decoder).fastpathDecMapUint64Int32R) - fn(map[uint64]float64(nil), (*Encoder).fastpathEncMapUint64Float64R, (*Decoder).fastpathDecMapUint64Float64R) - fn(map[uint64]bool(nil), (*Encoder).fastpathEncMapUint64BoolR, (*Decoder).fastpathDecMapUint64BoolR) - fn(map[int]interface{}(nil), (*Encoder).fastpathEncMapIntIntfR, (*Decoder).fastpathDecMapIntIntfR) - fn(map[int]string(nil), (*Encoder).fastpathEncMapIntStringR, (*Decoder).fastpathDecMapIntStringR) - fn(map[int][]byte(nil), (*Encoder).fastpathEncMapIntBytesR, (*Decoder).fastpathDecMapIntBytesR) - fn(map[int]uint8(nil), (*Encoder).fastpathEncMapIntUint8R, (*Decoder).fastpathDecMapIntUint8R) - fn(map[int]uint64(nil), (*Encoder).fastpathEncMapIntUint64R, (*Decoder).fastpathDecMapIntUint64R) - fn(map[int]int(nil), (*Encoder).fastpathEncMapIntIntR, (*Decoder).fastpathDecMapIntIntR) - fn(map[int]int32(nil), (*Encoder).fastpathEncMapIntInt32R, (*Decoder).fastpathDecMapIntInt32R) - fn(map[int]float64(nil), (*Encoder).fastpathEncMapIntFloat64R, (*Decoder).fastpathDecMapIntFloat64R) - fn(map[int]bool(nil), (*Encoder).fastpathEncMapIntBoolR, (*Decoder).fastpathDecMapIntBoolR) - fn(map[int32]interface{}(nil), (*Encoder).fastpathEncMapInt32IntfR, (*Decoder).fastpathDecMapInt32IntfR) - fn(map[int32]string(nil), (*Encoder).fastpathEncMapInt32StringR, (*Decoder).fastpathDecMapInt32StringR) - fn(map[int32][]byte(nil), (*Encoder).fastpathEncMapInt32BytesR, (*Decoder).fastpathDecMapInt32BytesR) - fn(map[int32]uint8(nil), (*Encoder).fastpathEncMapInt32Uint8R, (*Decoder).fastpathDecMapInt32Uint8R) - fn(map[int32]uint64(nil), (*Encoder).fastpathEncMapInt32Uint64R, (*Decoder).fastpathDecMapInt32Uint64R) - fn(map[int32]int(nil), (*Encoder).fastpathEncMapInt32IntR, (*Decoder).fastpathDecMapInt32IntR) - fn(map[int32]int32(nil), (*Encoder).fastpathEncMapInt32Int32R, (*Decoder).fastpathDecMapInt32Int32R) - fn(map[int32]float64(nil), (*Encoder).fastpathEncMapInt32Float64R, (*Decoder).fastpathDecMapInt32Float64R) - fn(map[int32]bool(nil), (*Encoder).fastpathEncMapInt32BoolR, (*Decoder).fastpathDecMapInt32BoolR) - - sort.Sort(fastpathAslice{}) -} - -// -- encode - -// -- -- fast path type switch -func fastpathEncodeTypeSwitch(iv interface{}, e *Encoder) bool { - switch v := iv.(type) { - case []interface{}: - fastpathTV.EncSliceIntfV(v, e) - case *[]interface{}: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncSliceIntfV(*v, e) - } - case []string: - fastpathTV.EncSliceStringV(v, e) - case *[]string: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncSliceStringV(*v, e) - } - case [][]byte: - fastpathTV.EncSliceBytesV(v, e) - case *[][]byte: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncSliceBytesV(*v, e) - } - case []float32: - fastpathTV.EncSliceFloat32V(v, e) - case *[]float32: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncSliceFloat32V(*v, e) - } - case []float64: - fastpathTV.EncSliceFloat64V(v, e) - case *[]float64: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncSliceFloat64V(*v, e) - } - case []uint8: - fastpathTV.EncSliceUint8V(v, e) - case *[]uint8: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncSliceUint8V(*v, e) - } - case []uint64: - fastpathTV.EncSliceUint64V(v, e) - case *[]uint64: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncSliceUint64V(*v, e) - } - case []int: - fastpathTV.EncSliceIntV(v, e) - case *[]int: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncSliceIntV(*v, e) - } - case []int32: - fastpathTV.EncSliceInt32V(v, e) - case *[]int32: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncSliceInt32V(*v, e) - } - case []int64: - fastpathTV.EncSliceInt64V(v, e) - case *[]int64: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncSliceInt64V(*v, e) - } - case []bool: - fastpathTV.EncSliceBoolV(v, e) - case *[]bool: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncSliceBoolV(*v, e) - } - case map[string]interface{}: - fastpathTV.EncMapStringIntfV(v, e) - case *map[string]interface{}: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapStringIntfV(*v, e) - } - case map[string]string: - fastpathTV.EncMapStringStringV(v, e) - case *map[string]string: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapStringStringV(*v, e) - } - case map[string][]byte: - fastpathTV.EncMapStringBytesV(v, e) - case *map[string][]byte: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapStringBytesV(*v, e) - } - case map[string]uint8: - fastpathTV.EncMapStringUint8V(v, e) - case *map[string]uint8: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapStringUint8V(*v, e) - } - case map[string]uint64: - fastpathTV.EncMapStringUint64V(v, e) - case *map[string]uint64: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapStringUint64V(*v, e) - } - case map[string]int: - fastpathTV.EncMapStringIntV(v, e) - case *map[string]int: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapStringIntV(*v, e) - } - case map[string]int32: - fastpathTV.EncMapStringInt32V(v, e) - case *map[string]int32: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapStringInt32V(*v, e) - } - case map[string]float64: - fastpathTV.EncMapStringFloat64V(v, e) - case *map[string]float64: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapStringFloat64V(*v, e) - } - case map[string]bool: - fastpathTV.EncMapStringBoolV(v, e) - case *map[string]bool: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapStringBoolV(*v, e) - } - case map[uint8]interface{}: - fastpathTV.EncMapUint8IntfV(v, e) - case *map[uint8]interface{}: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint8IntfV(*v, e) - } - case map[uint8]string: - fastpathTV.EncMapUint8StringV(v, e) - case *map[uint8]string: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint8StringV(*v, e) - } - case map[uint8][]byte: - fastpathTV.EncMapUint8BytesV(v, e) - case *map[uint8][]byte: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint8BytesV(*v, e) - } - case map[uint8]uint8: - fastpathTV.EncMapUint8Uint8V(v, e) - case *map[uint8]uint8: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint8Uint8V(*v, e) - } - case map[uint8]uint64: - fastpathTV.EncMapUint8Uint64V(v, e) - case *map[uint8]uint64: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint8Uint64V(*v, e) - } - case map[uint8]int: - fastpathTV.EncMapUint8IntV(v, e) - case *map[uint8]int: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint8IntV(*v, e) - } - case map[uint8]int32: - fastpathTV.EncMapUint8Int32V(v, e) - case *map[uint8]int32: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint8Int32V(*v, e) - } - case map[uint8]float64: - fastpathTV.EncMapUint8Float64V(v, e) - case *map[uint8]float64: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint8Float64V(*v, e) - } - case map[uint8]bool: - fastpathTV.EncMapUint8BoolV(v, e) - case *map[uint8]bool: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint8BoolV(*v, e) - } - case map[uint64]interface{}: - fastpathTV.EncMapUint64IntfV(v, e) - case *map[uint64]interface{}: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint64IntfV(*v, e) - } - case map[uint64]string: - fastpathTV.EncMapUint64StringV(v, e) - case *map[uint64]string: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint64StringV(*v, e) - } - case map[uint64][]byte: - fastpathTV.EncMapUint64BytesV(v, e) - case *map[uint64][]byte: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint64BytesV(*v, e) - } - case map[uint64]uint8: - fastpathTV.EncMapUint64Uint8V(v, e) - case *map[uint64]uint8: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint64Uint8V(*v, e) - } - case map[uint64]uint64: - fastpathTV.EncMapUint64Uint64V(v, e) - case *map[uint64]uint64: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint64Uint64V(*v, e) - } - case map[uint64]int: - fastpathTV.EncMapUint64IntV(v, e) - case *map[uint64]int: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint64IntV(*v, e) - } - case map[uint64]int32: - fastpathTV.EncMapUint64Int32V(v, e) - case *map[uint64]int32: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint64Int32V(*v, e) - } - case map[uint64]float64: - fastpathTV.EncMapUint64Float64V(v, e) - case *map[uint64]float64: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint64Float64V(*v, e) - } - case map[uint64]bool: - fastpathTV.EncMapUint64BoolV(v, e) - case *map[uint64]bool: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapUint64BoolV(*v, e) - } - case map[int]interface{}: - fastpathTV.EncMapIntIntfV(v, e) - case *map[int]interface{}: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapIntIntfV(*v, e) - } - case map[int]string: - fastpathTV.EncMapIntStringV(v, e) - case *map[int]string: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapIntStringV(*v, e) - } - case map[int][]byte: - fastpathTV.EncMapIntBytesV(v, e) - case *map[int][]byte: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapIntBytesV(*v, e) - } - case map[int]uint8: - fastpathTV.EncMapIntUint8V(v, e) - case *map[int]uint8: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapIntUint8V(*v, e) - } - case map[int]uint64: - fastpathTV.EncMapIntUint64V(v, e) - case *map[int]uint64: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapIntUint64V(*v, e) - } - case map[int]int: - fastpathTV.EncMapIntIntV(v, e) - case *map[int]int: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapIntIntV(*v, e) - } - case map[int]int32: - fastpathTV.EncMapIntInt32V(v, e) - case *map[int]int32: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapIntInt32V(*v, e) - } - case map[int]float64: - fastpathTV.EncMapIntFloat64V(v, e) - case *map[int]float64: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapIntFloat64V(*v, e) - } - case map[int]bool: - fastpathTV.EncMapIntBoolV(v, e) - case *map[int]bool: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapIntBoolV(*v, e) - } - case map[int32]interface{}: - fastpathTV.EncMapInt32IntfV(v, e) - case *map[int32]interface{}: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapInt32IntfV(*v, e) - } - case map[int32]string: - fastpathTV.EncMapInt32StringV(v, e) - case *map[int32]string: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapInt32StringV(*v, e) - } - case map[int32][]byte: - fastpathTV.EncMapInt32BytesV(v, e) - case *map[int32][]byte: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapInt32BytesV(*v, e) - } - case map[int32]uint8: - fastpathTV.EncMapInt32Uint8V(v, e) - case *map[int32]uint8: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapInt32Uint8V(*v, e) - } - case map[int32]uint64: - fastpathTV.EncMapInt32Uint64V(v, e) - case *map[int32]uint64: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapInt32Uint64V(*v, e) - } - case map[int32]int: - fastpathTV.EncMapInt32IntV(v, e) - case *map[int32]int: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapInt32IntV(*v, e) - } - case map[int32]int32: - fastpathTV.EncMapInt32Int32V(v, e) - case *map[int32]int32: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapInt32Int32V(*v, e) - } - case map[int32]float64: - fastpathTV.EncMapInt32Float64V(v, e) - case *map[int32]float64: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapInt32Float64V(*v, e) - } - case map[int32]bool: - fastpathTV.EncMapInt32BoolV(v, e) - case *map[int32]bool: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.EncMapInt32BoolV(*v, e) - } - default: - _ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4 - return false - } - return true -} - -// -- -- fast path functions -func (e *Encoder) fastpathEncSliceIntfR(f *codecFnInfo, rv reflect.Value) { - var v []interface{} - if rv.Kind() == reflect.Array { - rvGetSlice4Array(rv, &v) - } else { - v = rv2i(rv).([]interface{}) - } - if f.ti.mbs { - fastpathTV.EncAsMapSliceIntfV(v, e) - } else { - fastpathTV.EncSliceIntfV(v, e) - } -} -func (fastpathT) EncSliceIntfV(v []interface{}, e *Encoder) { - e.arrayStart(len(v)) - for j := range v { - e.arrayElem() - e.encode(v[j]) - } - e.arrayEnd() -} -func (fastpathT) EncAsMapSliceIntfV(v []interface{}, e *Encoder) { - e.haltOnMbsOddLen(len(v)) - e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) - for j := range v { - if j&1 == 0 { // if j%2 == 0 { - e.mapElemKey() - } else { - e.mapElemValue() - } - e.encode(v[j]) - } - e.mapEnd() -} -func (e *Encoder) fastpathEncSliceStringR(f *codecFnInfo, rv reflect.Value) { - var v []string - if rv.Kind() == reflect.Array { - rvGetSlice4Array(rv, &v) - } else { - v = rv2i(rv).([]string) - } - if f.ti.mbs { - fastpathTV.EncAsMapSliceStringV(v, e) - } else { - fastpathTV.EncSliceStringV(v, e) - } -} -func (fastpathT) EncSliceStringV(v []string, e *Encoder) { - e.arrayStart(len(v)) - for j := range v { - e.arrayElem() - e.e.EncodeString(v[j]) - } - e.arrayEnd() -} -func (fastpathT) EncAsMapSliceStringV(v []string, e *Encoder) { - e.haltOnMbsOddLen(len(v)) - e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) - for j := range v { - if j&1 == 0 { // if j%2 == 0 { - e.mapElemKey() - } else { - e.mapElemValue() - } - e.e.EncodeString(v[j]) - } - e.mapEnd() -} -func (e *Encoder) fastpathEncSliceBytesR(f *codecFnInfo, rv reflect.Value) { - var v [][]byte - if rv.Kind() == reflect.Array { - rvGetSlice4Array(rv, &v) - } else { - v = rv2i(rv).([][]byte) - } - if f.ti.mbs { - fastpathTV.EncAsMapSliceBytesV(v, e) - } else { - fastpathTV.EncSliceBytesV(v, e) - } -} -func (fastpathT) EncSliceBytesV(v [][]byte, e *Encoder) { - e.arrayStart(len(v)) - for j := range v { - e.arrayElem() - e.e.EncodeStringBytesRaw(v[j]) - } - e.arrayEnd() -} -func (fastpathT) EncAsMapSliceBytesV(v [][]byte, e *Encoder) { - e.haltOnMbsOddLen(len(v)) - e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) - for j := range v { - if j&1 == 0 { // if j%2 == 0 { - e.mapElemKey() - } else { - e.mapElemValue() - } - e.e.EncodeStringBytesRaw(v[j]) - } - e.mapEnd() -} -func (e *Encoder) fastpathEncSliceFloat32R(f *codecFnInfo, rv reflect.Value) { - var v []float32 - if rv.Kind() == reflect.Array { - rvGetSlice4Array(rv, &v) - } else { - v = rv2i(rv).([]float32) - } - if f.ti.mbs { - fastpathTV.EncAsMapSliceFloat32V(v, e) - } else { - fastpathTV.EncSliceFloat32V(v, e) - } -} -func (fastpathT) EncSliceFloat32V(v []float32, e *Encoder) { - e.arrayStart(len(v)) - for j := range v { - e.arrayElem() - e.e.EncodeFloat32(v[j]) - } - e.arrayEnd() -} -func (fastpathT) EncAsMapSliceFloat32V(v []float32, e *Encoder) { - e.haltOnMbsOddLen(len(v)) - e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) - for j := range v { - if j&1 == 0 { // if j%2 == 0 { - e.mapElemKey() - } else { - e.mapElemValue() - } - e.e.EncodeFloat32(v[j]) - } - e.mapEnd() -} -func (e *Encoder) fastpathEncSliceFloat64R(f *codecFnInfo, rv reflect.Value) { - var v []float64 - if rv.Kind() == reflect.Array { - rvGetSlice4Array(rv, &v) - } else { - v = rv2i(rv).([]float64) - } - if f.ti.mbs { - fastpathTV.EncAsMapSliceFloat64V(v, e) - } else { - fastpathTV.EncSliceFloat64V(v, e) - } -} -func (fastpathT) EncSliceFloat64V(v []float64, e *Encoder) { - e.arrayStart(len(v)) - for j := range v { - e.arrayElem() - e.e.EncodeFloat64(v[j]) - } - e.arrayEnd() -} -func (fastpathT) EncAsMapSliceFloat64V(v []float64, e *Encoder) { - e.haltOnMbsOddLen(len(v)) - e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) - for j := range v { - if j&1 == 0 { // if j%2 == 0 { - e.mapElemKey() - } else { - e.mapElemValue() - } - e.e.EncodeFloat64(v[j]) - } - e.mapEnd() -} -func (e *Encoder) fastpathEncSliceUint8R(f *codecFnInfo, rv reflect.Value) { - var v []uint8 - if rv.Kind() == reflect.Array { - rvGetSlice4Array(rv, &v) - } else { - v = rv2i(rv).([]uint8) - } - if f.ti.mbs { - fastpathTV.EncAsMapSliceUint8V(v, e) - } else { - fastpathTV.EncSliceUint8V(v, e) - } -} -func (fastpathT) EncSliceUint8V(v []uint8, e *Encoder) { - e.e.EncodeStringBytesRaw(v) -} -func (fastpathT) EncAsMapSliceUint8V(v []uint8, e *Encoder) { - e.haltOnMbsOddLen(len(v)) - e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) - for j := range v { - if j&1 == 0 { // if j%2 == 0 { - e.mapElemKey() - } else { - e.mapElemValue() - } - e.e.EncodeUint(uint64(v[j])) - } - e.mapEnd() -} -func (e *Encoder) fastpathEncSliceUint64R(f *codecFnInfo, rv reflect.Value) { - var v []uint64 - if rv.Kind() == reflect.Array { - rvGetSlice4Array(rv, &v) - } else { - v = rv2i(rv).([]uint64) - } - if f.ti.mbs { - fastpathTV.EncAsMapSliceUint64V(v, e) - } else { - fastpathTV.EncSliceUint64V(v, e) - } -} -func (fastpathT) EncSliceUint64V(v []uint64, e *Encoder) { - e.arrayStart(len(v)) - for j := range v { - e.arrayElem() - e.e.EncodeUint(v[j]) - } - e.arrayEnd() -} -func (fastpathT) EncAsMapSliceUint64V(v []uint64, e *Encoder) { - e.haltOnMbsOddLen(len(v)) - e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) - for j := range v { - if j&1 == 0 { // if j%2 == 0 { - e.mapElemKey() - } else { - e.mapElemValue() - } - e.e.EncodeUint(v[j]) - } - e.mapEnd() -} -func (e *Encoder) fastpathEncSliceIntR(f *codecFnInfo, rv reflect.Value) { - var v []int - if rv.Kind() == reflect.Array { - rvGetSlice4Array(rv, &v) - } else { - v = rv2i(rv).([]int) - } - if f.ti.mbs { - fastpathTV.EncAsMapSliceIntV(v, e) - } else { - fastpathTV.EncSliceIntV(v, e) - } -} -func (fastpathT) EncSliceIntV(v []int, e *Encoder) { - e.arrayStart(len(v)) - for j := range v { - e.arrayElem() - e.e.EncodeInt(int64(v[j])) - } - e.arrayEnd() -} -func (fastpathT) EncAsMapSliceIntV(v []int, e *Encoder) { - e.haltOnMbsOddLen(len(v)) - e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) - for j := range v { - if j&1 == 0 { // if j%2 == 0 { - e.mapElemKey() - } else { - e.mapElemValue() - } - e.e.EncodeInt(int64(v[j])) - } - e.mapEnd() -} -func (e *Encoder) fastpathEncSliceInt32R(f *codecFnInfo, rv reflect.Value) { - var v []int32 - if rv.Kind() == reflect.Array { - rvGetSlice4Array(rv, &v) - } else { - v = rv2i(rv).([]int32) - } - if f.ti.mbs { - fastpathTV.EncAsMapSliceInt32V(v, e) - } else { - fastpathTV.EncSliceInt32V(v, e) - } -} -func (fastpathT) EncSliceInt32V(v []int32, e *Encoder) { - e.arrayStart(len(v)) - for j := range v { - e.arrayElem() - e.e.EncodeInt(int64(v[j])) - } - e.arrayEnd() -} -func (fastpathT) EncAsMapSliceInt32V(v []int32, e *Encoder) { - e.haltOnMbsOddLen(len(v)) - e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) - for j := range v { - if j&1 == 0 { // if j%2 == 0 { - e.mapElemKey() - } else { - e.mapElemValue() - } - e.e.EncodeInt(int64(v[j])) - } - e.mapEnd() -} -func (e *Encoder) fastpathEncSliceInt64R(f *codecFnInfo, rv reflect.Value) { - var v []int64 - if rv.Kind() == reflect.Array { - rvGetSlice4Array(rv, &v) - } else { - v = rv2i(rv).([]int64) - } - if f.ti.mbs { - fastpathTV.EncAsMapSliceInt64V(v, e) - } else { - fastpathTV.EncSliceInt64V(v, e) - } -} -func (fastpathT) EncSliceInt64V(v []int64, e *Encoder) { - e.arrayStart(len(v)) - for j := range v { - e.arrayElem() - e.e.EncodeInt(v[j]) - } - e.arrayEnd() -} -func (fastpathT) EncAsMapSliceInt64V(v []int64, e *Encoder) { - e.haltOnMbsOddLen(len(v)) - e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) - for j := range v { - if j&1 == 0 { // if j%2 == 0 { - e.mapElemKey() - } else { - e.mapElemValue() - } - e.e.EncodeInt(v[j]) - } - e.mapEnd() -} -func (e *Encoder) fastpathEncSliceBoolR(f *codecFnInfo, rv reflect.Value) { - var v []bool - if rv.Kind() == reflect.Array { - rvGetSlice4Array(rv, &v) - } else { - v = rv2i(rv).([]bool) - } - if f.ti.mbs { - fastpathTV.EncAsMapSliceBoolV(v, e) - } else { - fastpathTV.EncSliceBoolV(v, e) - } -} -func (fastpathT) EncSliceBoolV(v []bool, e *Encoder) { - e.arrayStart(len(v)) - for j := range v { - e.arrayElem() - e.e.EncodeBool(v[j]) - } - e.arrayEnd() -} -func (fastpathT) EncAsMapSliceBoolV(v []bool, e *Encoder) { - e.haltOnMbsOddLen(len(v)) - e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) - for j := range v { - if j&1 == 0 { // if j%2 == 0 { - e.mapElemKey() - } else { - e.mapElemValue() - } - e.e.EncodeBool(v[j]) - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapStringIntfR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapStringIntfV(rv2i(rv).(map[string]interface{}), e) -} -func (fastpathT) EncMapStringIntfV(v map[string]interface{}, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]string, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.encode(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.encode(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapStringStringR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapStringStringV(rv2i(rv).(map[string]string), e) -} -func (fastpathT) EncMapStringStringV(v map[string]string, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]string, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeString(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeString(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapStringBytesR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapStringBytesV(rv2i(rv).(map[string][]byte), e) -} -func (fastpathT) EncMapStringBytesV(v map[string][]byte, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]string, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeStringBytesRaw(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeStringBytesRaw(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapStringUint8R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapStringUint8V(rv2i(rv).(map[string]uint8), e) -} -func (fastpathT) EncMapStringUint8V(v map[string]uint8, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]string, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeUint(uint64(v[k2])) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeUint(uint64(v2)) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapStringUint64R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapStringUint64V(rv2i(rv).(map[string]uint64), e) -} -func (fastpathT) EncMapStringUint64V(v map[string]uint64, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]string, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeUint(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeUint(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapStringIntR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapStringIntV(rv2i(rv).(map[string]int), e) -} -func (fastpathT) EncMapStringIntV(v map[string]int, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]string, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeInt(int64(v[k2])) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeInt(int64(v2)) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapStringInt32R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapStringInt32V(rv2i(rv).(map[string]int32), e) -} -func (fastpathT) EncMapStringInt32V(v map[string]int32, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]string, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeInt(int64(v[k2])) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeInt(int64(v2)) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapStringFloat64R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapStringFloat64V(rv2i(rv).(map[string]float64), e) -} -func (fastpathT) EncMapStringFloat64V(v map[string]float64, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]string, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeFloat64(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeFloat64(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapStringBoolR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapStringBoolV(rv2i(rv).(map[string]bool), e) -} -func (fastpathT) EncMapStringBoolV(v map[string]bool, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]string, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeBool(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeString(k2) - e.mapElemValue() - e.e.EncodeBool(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint8IntfR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), e) -} -func (fastpathT) EncMapUint8IntfV(v map[uint8]interface{}, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint8, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint8Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.encode(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.encode(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint8StringR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint8StringV(rv2i(rv).(map[uint8]string), e) -} -func (fastpathT) EncMapUint8StringV(v map[uint8]string, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint8, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint8Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeString(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeString(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint8BytesR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint8BytesV(rv2i(rv).(map[uint8][]byte), e) -} -func (fastpathT) EncMapUint8BytesV(v map[uint8][]byte, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint8, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint8Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeStringBytesRaw(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeStringBytesRaw(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint8Uint8R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), e) -} -func (fastpathT) EncMapUint8Uint8V(v map[uint8]uint8, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint8, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint8Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeUint(uint64(v[k2])) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeUint(uint64(v2)) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint8Uint64R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), e) -} -func (fastpathT) EncMapUint8Uint64V(v map[uint8]uint64, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint8, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint8Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeUint(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeUint(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint8IntR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint8IntV(rv2i(rv).(map[uint8]int), e) -} -func (fastpathT) EncMapUint8IntV(v map[uint8]int, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint8, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint8Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeInt(int64(v[k2])) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeInt(int64(v2)) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint8Int32R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint8Int32V(rv2i(rv).(map[uint8]int32), e) -} -func (fastpathT) EncMapUint8Int32V(v map[uint8]int32, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint8, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint8Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeInt(int64(v[k2])) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeInt(int64(v2)) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint8Float64R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint8Float64V(rv2i(rv).(map[uint8]float64), e) -} -func (fastpathT) EncMapUint8Float64V(v map[uint8]float64, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint8, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint8Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeFloat64(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeFloat64(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint8BoolR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint8BoolV(rv2i(rv).(map[uint8]bool), e) -} -func (fastpathT) EncMapUint8BoolV(v map[uint8]bool, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint8, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint8Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeBool(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(uint64(k2)) - e.mapElemValue() - e.e.EncodeBool(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint64IntfR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), e) -} -func (fastpathT) EncMapUint64IntfV(v map[uint64]interface{}, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint64Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.encode(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.encode(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint64StringR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint64StringV(rv2i(rv).(map[uint64]string), e) -} -func (fastpathT) EncMapUint64StringV(v map[uint64]string, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint64Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeString(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeString(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint64BytesR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint64BytesV(rv2i(rv).(map[uint64][]byte), e) -} -func (fastpathT) EncMapUint64BytesV(v map[uint64][]byte, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint64Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeStringBytesRaw(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeStringBytesRaw(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint64Uint8R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), e) -} -func (fastpathT) EncMapUint64Uint8V(v map[uint64]uint8, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint64Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeUint(uint64(v[k2])) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeUint(uint64(v2)) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint64Uint64R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), e) -} -func (fastpathT) EncMapUint64Uint64V(v map[uint64]uint64, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint64Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeUint(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeUint(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint64IntR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint64IntV(rv2i(rv).(map[uint64]int), e) -} -func (fastpathT) EncMapUint64IntV(v map[uint64]int, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint64Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeInt(int64(v[k2])) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeInt(int64(v2)) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint64Int32R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint64Int32V(rv2i(rv).(map[uint64]int32), e) -} -func (fastpathT) EncMapUint64Int32V(v map[uint64]int32, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint64Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeInt(int64(v[k2])) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeInt(int64(v2)) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint64Float64R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint64Float64V(rv2i(rv).(map[uint64]float64), e) -} -func (fastpathT) EncMapUint64Float64V(v map[uint64]float64, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint64Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeFloat64(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeFloat64(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapUint64BoolR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapUint64BoolV(rv2i(rv).(map[uint64]bool), e) -} -func (fastpathT) EncMapUint64BoolV(v map[uint64]bool, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(uint64Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeBool(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeUint(k2) - e.mapElemValue() - e.e.EncodeBool(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapIntIntfR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapIntIntfV(rv2i(rv).(map[int]interface{}), e) -} -func (fastpathT) EncMapIntIntfV(v map[int]interface{}, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.encode(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.encode(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapIntStringR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapIntStringV(rv2i(rv).(map[int]string), e) -} -func (fastpathT) EncMapIntStringV(v map[int]string, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeString(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeString(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapIntBytesR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapIntBytesV(rv2i(rv).(map[int][]byte), e) -} -func (fastpathT) EncMapIntBytesV(v map[int][]byte, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeStringBytesRaw(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeStringBytesRaw(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapIntUint8R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapIntUint8V(rv2i(rv).(map[int]uint8), e) -} -func (fastpathT) EncMapIntUint8V(v map[int]uint8, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeUint(uint64(v[k2])) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeUint(uint64(v2)) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapIntUint64R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapIntUint64V(rv2i(rv).(map[int]uint64), e) -} -func (fastpathT) EncMapIntUint64V(v map[int]uint64, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeUint(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeUint(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapIntIntR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapIntIntV(rv2i(rv).(map[int]int), e) -} -func (fastpathT) EncMapIntIntV(v map[int]int, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeInt(int64(v[k2])) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeInt(int64(v2)) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapIntInt32R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapIntInt32V(rv2i(rv).(map[int]int32), e) -} -func (fastpathT) EncMapIntInt32V(v map[int]int32, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeInt(int64(v[k2])) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeInt(int64(v2)) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapIntFloat64R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapIntFloat64V(rv2i(rv).(map[int]float64), e) -} -func (fastpathT) EncMapIntFloat64V(v map[int]float64, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeFloat64(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeFloat64(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapIntBoolR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapIntBoolV(rv2i(rv).(map[int]bool), e) -} -func (fastpathT) EncMapIntBoolV(v map[int]bool, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeBool(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeBool(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapInt32IntfR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapInt32IntfV(rv2i(rv).(map[int32]interface{}), e) -} -func (fastpathT) EncMapInt32IntfV(v map[int32]interface{}, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int32, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(int32Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.encode(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.encode(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapInt32StringR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapInt32StringV(rv2i(rv).(map[int32]string), e) -} -func (fastpathT) EncMapInt32StringV(v map[int32]string, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int32, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(int32Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeString(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeString(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapInt32BytesR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapInt32BytesV(rv2i(rv).(map[int32][]byte), e) -} -func (fastpathT) EncMapInt32BytesV(v map[int32][]byte, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int32, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(int32Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeStringBytesRaw(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeStringBytesRaw(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapInt32Uint8R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapInt32Uint8V(rv2i(rv).(map[int32]uint8), e) -} -func (fastpathT) EncMapInt32Uint8V(v map[int32]uint8, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int32, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(int32Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeUint(uint64(v[k2])) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeUint(uint64(v2)) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapInt32Uint64R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapInt32Uint64V(rv2i(rv).(map[int32]uint64), e) -} -func (fastpathT) EncMapInt32Uint64V(v map[int32]uint64, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int32, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(int32Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeUint(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeUint(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapInt32IntR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapInt32IntV(rv2i(rv).(map[int32]int), e) -} -func (fastpathT) EncMapInt32IntV(v map[int32]int, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int32, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(int32Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeInt(int64(v[k2])) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeInt(int64(v2)) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapInt32Int32R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapInt32Int32V(rv2i(rv).(map[int32]int32), e) -} -func (fastpathT) EncMapInt32Int32V(v map[int32]int32, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int32, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(int32Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeInt(int64(v[k2])) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeInt(int64(v2)) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapInt32Float64R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapInt32Float64V(rv2i(rv).(map[int32]float64), e) -} -func (fastpathT) EncMapInt32Float64V(v map[int32]float64, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int32, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(int32Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeFloat64(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeFloat64(v2) - } - } - e.mapEnd() -} -func (e *Encoder) fastpathEncMapInt32BoolR(f *codecFnInfo, rv reflect.Value) { - fastpathTV.EncMapInt32BoolV(rv2i(rv).(map[int32]bool), e) -} -func (fastpathT) EncMapInt32BoolV(v map[int32]bool, e *Encoder) { - e.mapStart(len(v)) - if e.h.Canonical { - v2 := make([]int32, len(v)) - var i uint - for k := range v { - v2[i] = k - i++ - } - sort.Sort(int32Slice(v2)) - for _, k2 := range v2 { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeBool(v[k2]) - } - } else { - for k2, v2 := range v { - e.mapElemKey() - e.e.EncodeInt(int64(k2)) - e.mapElemValue() - e.e.EncodeBool(v2) - } - } - e.mapEnd() -} - -// -- decode - -// -- -- fast path type switch -func fastpathDecodeTypeSwitch(iv interface{}, d *Decoder) bool { - var changed bool - var containerLen int - switch v := iv.(type) { - case []interface{}: - fastpathTV.DecSliceIntfN(v, d) - case *[]interface{}: - var v2 []interface{} - if v2, changed = fastpathTV.DecSliceIntfY(*v, d); changed { - *v = v2 - } - case []string: - fastpathTV.DecSliceStringN(v, d) - case *[]string: - var v2 []string - if v2, changed = fastpathTV.DecSliceStringY(*v, d); changed { - *v = v2 - } - case [][]byte: - fastpathTV.DecSliceBytesN(v, d) - case *[][]byte: - var v2 [][]byte - if v2, changed = fastpathTV.DecSliceBytesY(*v, d); changed { - *v = v2 - } - case []float32: - fastpathTV.DecSliceFloat32N(v, d) - case *[]float32: - var v2 []float32 - if v2, changed = fastpathTV.DecSliceFloat32Y(*v, d); changed { - *v = v2 - } - case []float64: - fastpathTV.DecSliceFloat64N(v, d) - case *[]float64: - var v2 []float64 - if v2, changed = fastpathTV.DecSliceFloat64Y(*v, d); changed { - *v = v2 - } - case []uint8: - fastpathTV.DecSliceUint8N(v, d) - case *[]uint8: - var v2 []uint8 - if v2, changed = fastpathTV.DecSliceUint8Y(*v, d); changed { - *v = v2 - } - case []uint64: - fastpathTV.DecSliceUint64N(v, d) - case *[]uint64: - var v2 []uint64 - if v2, changed = fastpathTV.DecSliceUint64Y(*v, d); changed { - *v = v2 - } - case []int: - fastpathTV.DecSliceIntN(v, d) - case *[]int: - var v2 []int - if v2, changed = fastpathTV.DecSliceIntY(*v, d); changed { - *v = v2 - } - case []int32: - fastpathTV.DecSliceInt32N(v, d) - case *[]int32: - var v2 []int32 - if v2, changed = fastpathTV.DecSliceInt32Y(*v, d); changed { - *v = v2 - } - case []int64: - fastpathTV.DecSliceInt64N(v, d) - case *[]int64: - var v2 []int64 - if v2, changed = fastpathTV.DecSliceInt64Y(*v, d); changed { - *v = v2 - } - case []bool: - fastpathTV.DecSliceBoolN(v, d) - case *[]bool: - var v2 []bool - if v2, changed = fastpathTV.DecSliceBoolY(*v, d); changed { - *v = v2 - } - case map[string]interface{}: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapStringIntfL(v, containerLen, d) - } - d.mapEnd() - } - case *map[string]interface{}: - fastpathTV.DecMapStringIntfX(v, d) - case map[string]string: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapStringStringL(v, containerLen, d) - } - d.mapEnd() - } - case *map[string]string: - fastpathTV.DecMapStringStringX(v, d) - case map[string][]byte: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapStringBytesL(v, containerLen, d) - } - d.mapEnd() - } - case *map[string][]byte: - fastpathTV.DecMapStringBytesX(v, d) - case map[string]uint8: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapStringUint8L(v, containerLen, d) - } - d.mapEnd() - } - case *map[string]uint8: - fastpathTV.DecMapStringUint8X(v, d) - case map[string]uint64: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapStringUint64L(v, containerLen, d) - } - d.mapEnd() - } - case *map[string]uint64: - fastpathTV.DecMapStringUint64X(v, d) - case map[string]int: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapStringIntL(v, containerLen, d) - } - d.mapEnd() - } - case *map[string]int: - fastpathTV.DecMapStringIntX(v, d) - case map[string]int32: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapStringInt32L(v, containerLen, d) - } - d.mapEnd() - } - case *map[string]int32: - fastpathTV.DecMapStringInt32X(v, d) - case map[string]float64: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapStringFloat64L(v, containerLen, d) - } - d.mapEnd() - } - case *map[string]float64: - fastpathTV.DecMapStringFloat64X(v, d) - case map[string]bool: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapStringBoolL(v, containerLen, d) - } - d.mapEnd() - } - case *map[string]bool: - fastpathTV.DecMapStringBoolX(v, d) - case map[uint8]interface{}: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint8IntfL(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint8]interface{}: - fastpathTV.DecMapUint8IntfX(v, d) - case map[uint8]string: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint8StringL(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint8]string: - fastpathTV.DecMapUint8StringX(v, d) - case map[uint8][]byte: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint8BytesL(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint8][]byte: - fastpathTV.DecMapUint8BytesX(v, d) - case map[uint8]uint8: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint8Uint8L(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint8]uint8: - fastpathTV.DecMapUint8Uint8X(v, d) - case map[uint8]uint64: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint8Uint64L(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint8]uint64: - fastpathTV.DecMapUint8Uint64X(v, d) - case map[uint8]int: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint8IntL(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint8]int: - fastpathTV.DecMapUint8IntX(v, d) - case map[uint8]int32: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint8Int32L(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint8]int32: - fastpathTV.DecMapUint8Int32X(v, d) - case map[uint8]float64: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint8Float64L(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint8]float64: - fastpathTV.DecMapUint8Float64X(v, d) - case map[uint8]bool: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint8BoolL(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint8]bool: - fastpathTV.DecMapUint8BoolX(v, d) - case map[uint64]interface{}: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint64IntfL(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint64]interface{}: - fastpathTV.DecMapUint64IntfX(v, d) - case map[uint64]string: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint64StringL(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint64]string: - fastpathTV.DecMapUint64StringX(v, d) - case map[uint64][]byte: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint64BytesL(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint64][]byte: - fastpathTV.DecMapUint64BytesX(v, d) - case map[uint64]uint8: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint64Uint8L(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint64]uint8: - fastpathTV.DecMapUint64Uint8X(v, d) - case map[uint64]uint64: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint64Uint64L(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint64]uint64: - fastpathTV.DecMapUint64Uint64X(v, d) - case map[uint64]int: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint64IntL(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint64]int: - fastpathTV.DecMapUint64IntX(v, d) - case map[uint64]int32: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint64Int32L(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint64]int32: - fastpathTV.DecMapUint64Int32X(v, d) - case map[uint64]float64: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint64Float64L(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint64]float64: - fastpathTV.DecMapUint64Float64X(v, d) - case map[uint64]bool: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapUint64BoolL(v, containerLen, d) - } - d.mapEnd() - } - case *map[uint64]bool: - fastpathTV.DecMapUint64BoolX(v, d) - case map[int]interface{}: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapIntIntfL(v, containerLen, d) - } - d.mapEnd() - } - case *map[int]interface{}: - fastpathTV.DecMapIntIntfX(v, d) - case map[int]string: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapIntStringL(v, containerLen, d) - } - d.mapEnd() - } - case *map[int]string: - fastpathTV.DecMapIntStringX(v, d) - case map[int][]byte: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapIntBytesL(v, containerLen, d) - } - d.mapEnd() - } - case *map[int][]byte: - fastpathTV.DecMapIntBytesX(v, d) - case map[int]uint8: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapIntUint8L(v, containerLen, d) - } - d.mapEnd() - } - case *map[int]uint8: - fastpathTV.DecMapIntUint8X(v, d) - case map[int]uint64: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapIntUint64L(v, containerLen, d) - } - d.mapEnd() - } - case *map[int]uint64: - fastpathTV.DecMapIntUint64X(v, d) - case map[int]int: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapIntIntL(v, containerLen, d) - } - d.mapEnd() - } - case *map[int]int: - fastpathTV.DecMapIntIntX(v, d) - case map[int]int32: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapIntInt32L(v, containerLen, d) - } - d.mapEnd() - } - case *map[int]int32: - fastpathTV.DecMapIntInt32X(v, d) - case map[int]float64: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapIntFloat64L(v, containerLen, d) - } - d.mapEnd() - } - case *map[int]float64: - fastpathTV.DecMapIntFloat64X(v, d) - case map[int]bool: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapIntBoolL(v, containerLen, d) - } - d.mapEnd() - } - case *map[int]bool: - fastpathTV.DecMapIntBoolX(v, d) - case map[int32]interface{}: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapInt32IntfL(v, containerLen, d) - } - d.mapEnd() - } - case *map[int32]interface{}: - fastpathTV.DecMapInt32IntfX(v, d) - case map[int32]string: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapInt32StringL(v, containerLen, d) - } - d.mapEnd() - } - case *map[int32]string: - fastpathTV.DecMapInt32StringX(v, d) - case map[int32][]byte: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapInt32BytesL(v, containerLen, d) - } - d.mapEnd() - } - case *map[int32][]byte: - fastpathTV.DecMapInt32BytesX(v, d) - case map[int32]uint8: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapInt32Uint8L(v, containerLen, d) - } - d.mapEnd() - } - case *map[int32]uint8: - fastpathTV.DecMapInt32Uint8X(v, d) - case map[int32]uint64: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapInt32Uint64L(v, containerLen, d) - } - d.mapEnd() - } - case *map[int32]uint64: - fastpathTV.DecMapInt32Uint64X(v, d) - case map[int32]int: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapInt32IntL(v, containerLen, d) - } - d.mapEnd() - } - case *map[int32]int: - fastpathTV.DecMapInt32IntX(v, d) - case map[int32]int32: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapInt32Int32L(v, containerLen, d) - } - d.mapEnd() - } - case *map[int32]int32: - fastpathTV.DecMapInt32Int32X(v, d) - case map[int32]float64: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapInt32Float64L(v, containerLen, d) - } - d.mapEnd() - } - case *map[int32]float64: - fastpathTV.DecMapInt32Float64X(v, d) - case map[int32]bool: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.DecMapInt32BoolL(v, containerLen, d) - } - d.mapEnd() - } - case *map[int32]bool: - fastpathTV.DecMapInt32BoolX(v, d) - default: - _ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4 - return false - } - return true -} - -func fastpathDecodeSetZeroTypeSwitch(iv interface{}) bool { - switch v := iv.(type) { - case *[]interface{}: - *v = nil - case *[]string: - *v = nil - case *[][]byte: - *v = nil - case *[]float32: - *v = nil - case *[]float64: - *v = nil - case *[]uint8: - *v = nil - case *[]uint64: - *v = nil - case *[]int: - *v = nil - case *[]int32: - *v = nil - case *[]int64: - *v = nil - case *[]bool: - *v = nil - - case *map[string]interface{}: - *v = nil - case *map[string]string: - *v = nil - case *map[string][]byte: - *v = nil - case *map[string]uint8: - *v = nil - case *map[string]uint64: - *v = nil - case *map[string]int: - *v = nil - case *map[string]int32: - *v = nil - case *map[string]float64: - *v = nil - case *map[string]bool: - *v = nil - case *map[uint8]interface{}: - *v = nil - case *map[uint8]string: - *v = nil - case *map[uint8][]byte: - *v = nil - case *map[uint8]uint8: - *v = nil - case *map[uint8]uint64: - *v = nil - case *map[uint8]int: - *v = nil - case *map[uint8]int32: - *v = nil - case *map[uint8]float64: - *v = nil - case *map[uint8]bool: - *v = nil - case *map[uint64]interface{}: - *v = nil - case *map[uint64]string: - *v = nil - case *map[uint64][]byte: - *v = nil - case *map[uint64]uint8: - *v = nil - case *map[uint64]uint64: - *v = nil - case *map[uint64]int: - *v = nil - case *map[uint64]int32: - *v = nil - case *map[uint64]float64: - *v = nil - case *map[uint64]bool: - *v = nil - case *map[int]interface{}: - *v = nil - case *map[int]string: - *v = nil - case *map[int][]byte: - *v = nil - case *map[int]uint8: - *v = nil - case *map[int]uint64: - *v = nil - case *map[int]int: - *v = nil - case *map[int]int32: - *v = nil - case *map[int]float64: - *v = nil - case *map[int]bool: - *v = nil - case *map[int32]interface{}: - *v = nil - case *map[int32]string: - *v = nil - case *map[int32][]byte: - *v = nil - case *map[int32]uint8: - *v = nil - case *map[int32]uint64: - *v = nil - case *map[int32]int: - *v = nil - case *map[int32]int32: - *v = nil - case *map[int32]float64: - *v = nil - case *map[int32]bool: - *v = nil - - default: - _ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4 - return false - } - return true -} - -// -- -- fast path functions - -func (d *Decoder) fastpathDecSliceIntfR(f *codecFnInfo, rv reflect.Value) { - var v []interface{} - switch rv.Kind() { - case reflect.Ptr: - vp := rv2i(rv).(*[]interface{}) - var changed bool - if v, changed = fastpathTV.DecSliceIntfY(*vp, d); changed { - *vp = v - } - case reflect.Array: - rvGetSlice4Array(rv, &v) - fastpathTV.DecSliceIntfN(v, d) - default: - fastpathTV.DecSliceIntfN(rv2i(rv).([]interface{}), d) - } -} -func (f fastpathT) DecSliceIntfX(vp *[]interface{}, d *Decoder) { - if v, changed := f.DecSliceIntfY(*vp, d); changed { - *vp = v - } -} -func (fastpathT) DecSliceIntfY(v []interface{}, d *Decoder) (v2 []interface{}, changed bool) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - if v == nil { - return - } - return nil, true - } - if containerLenS == 0 { - if v == nil { - v = []interface{}{} - } else if len(v) != 0 { - v = v[:0] - } - slh.End() - return v, true - } - hasLen := containerLenS > 0 - var xlen int - if hasLen { - if containerLenS > cap(v) { - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16) - if xlen <= cap(v) { - v = v[:uint(xlen)] - } else { - v = make([]interface{}, uint(xlen)) - } - changed = true - } else if containerLenS != len(v) { - v = v[:containerLenS] - changed = true - } - } - var j int - for j = 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j == 0 && len(v) == 0 { // means hasLen == false - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16) - v = make([]interface{}, uint(xlen)) - changed = true - } - if j >= len(v) { - v = append(v, nil) - changed = true - } - slh.ElemContainerState(j) - d.decode(&v[uint(j)]) - } - if j < len(v) { - v = v[:uint(j)] - changed = true - } else if j == 0 && v == nil { - v = []interface{}{} - changed = true - } - slh.End() - return v, changed -} -func (fastpathT) DecSliceIntfN(v []interface{}, d *Decoder) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - return - } - if containerLenS == 0 { - slh.End() - return - } - hasLen := containerLenS > 0 - for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j >= len(v) { - slh.arrayCannotExpand(hasLen, len(v), j, containerLenS) - return - } - slh.ElemContainerState(j) - d.decode(&v[uint(j)]) - } - slh.End() -} - -func (d *Decoder) fastpathDecSliceStringR(f *codecFnInfo, rv reflect.Value) { - var v []string - switch rv.Kind() { - case reflect.Ptr: - vp := rv2i(rv).(*[]string) - var changed bool - if v, changed = fastpathTV.DecSliceStringY(*vp, d); changed { - *vp = v - } - case reflect.Array: - rvGetSlice4Array(rv, &v) - fastpathTV.DecSliceStringN(v, d) - default: - fastpathTV.DecSliceStringN(rv2i(rv).([]string), d) - } -} -func (f fastpathT) DecSliceStringX(vp *[]string, d *Decoder) { - if v, changed := f.DecSliceStringY(*vp, d); changed { - *vp = v - } -} -func (fastpathT) DecSliceStringY(v []string, d *Decoder) (v2 []string, changed bool) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - if v == nil { - return - } - return nil, true - } - if containerLenS == 0 { - if v == nil { - v = []string{} - } else if len(v) != 0 { - v = v[:0] - } - slh.End() - return v, true - } - hasLen := containerLenS > 0 - var xlen int - if hasLen { - if containerLenS > cap(v) { - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16) - if xlen <= cap(v) { - v = v[:uint(xlen)] - } else { - v = make([]string, uint(xlen)) - } - changed = true - } else if containerLenS != len(v) { - v = v[:containerLenS] - changed = true - } - } - var j int - for j = 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j == 0 && len(v) == 0 { // means hasLen == false - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16) - v = make([]string, uint(xlen)) - changed = true - } - if j >= len(v) { - v = append(v, "") - changed = true - } - slh.ElemContainerState(j) - v[uint(j)] = d.stringZC(d.d.DecodeStringAsBytes()) - } - if j < len(v) { - v = v[:uint(j)] - changed = true - } else if j == 0 && v == nil { - v = []string{} - changed = true - } - slh.End() - return v, changed -} -func (fastpathT) DecSliceStringN(v []string, d *Decoder) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - return - } - if containerLenS == 0 { - slh.End() - return - } - hasLen := containerLenS > 0 - for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j >= len(v) { - slh.arrayCannotExpand(hasLen, len(v), j, containerLenS) - return - } - slh.ElemContainerState(j) - v[uint(j)] = d.stringZC(d.d.DecodeStringAsBytes()) - } - slh.End() -} - -func (d *Decoder) fastpathDecSliceBytesR(f *codecFnInfo, rv reflect.Value) { - var v [][]byte - switch rv.Kind() { - case reflect.Ptr: - vp := rv2i(rv).(*[][]byte) - var changed bool - if v, changed = fastpathTV.DecSliceBytesY(*vp, d); changed { - *vp = v - } - case reflect.Array: - rvGetSlice4Array(rv, &v) - fastpathTV.DecSliceBytesN(v, d) - default: - fastpathTV.DecSliceBytesN(rv2i(rv).([][]byte), d) - } -} -func (f fastpathT) DecSliceBytesX(vp *[][]byte, d *Decoder) { - if v, changed := f.DecSliceBytesY(*vp, d); changed { - *vp = v - } -} -func (fastpathT) DecSliceBytesY(v [][]byte, d *Decoder) (v2 [][]byte, changed bool) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - if v == nil { - return - } - return nil, true - } - if containerLenS == 0 { - if v == nil { - v = [][]byte{} - } else if len(v) != 0 { - v = v[:0] - } - slh.End() - return v, true - } - hasLen := containerLenS > 0 - var xlen int - if hasLen { - if containerLenS > cap(v) { - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 24) - if xlen <= cap(v) { - v = v[:uint(xlen)] - } else { - v = make([][]byte, uint(xlen)) - } - changed = true - } else if containerLenS != len(v) { - v = v[:containerLenS] - changed = true - } - } - var j int - for j = 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j == 0 && len(v) == 0 { // means hasLen == false - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 24) - v = make([][]byte, uint(xlen)) - changed = true - } - if j >= len(v) { - v = append(v, nil) - changed = true - } - slh.ElemContainerState(j) - v[uint(j)] = d.d.DecodeBytes([]byte{}) - } - if j < len(v) { - v = v[:uint(j)] - changed = true - } else if j == 0 && v == nil { - v = [][]byte{} - changed = true - } - slh.End() - return v, changed -} -func (fastpathT) DecSliceBytesN(v [][]byte, d *Decoder) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - return - } - if containerLenS == 0 { - slh.End() - return - } - hasLen := containerLenS > 0 - for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j >= len(v) { - slh.arrayCannotExpand(hasLen, len(v), j, containerLenS) - return - } - slh.ElemContainerState(j) - v[uint(j)] = d.d.DecodeBytes([]byte{}) - } - slh.End() -} - -func (d *Decoder) fastpathDecSliceFloat32R(f *codecFnInfo, rv reflect.Value) { - var v []float32 - switch rv.Kind() { - case reflect.Ptr: - vp := rv2i(rv).(*[]float32) - var changed bool - if v, changed = fastpathTV.DecSliceFloat32Y(*vp, d); changed { - *vp = v - } - case reflect.Array: - rvGetSlice4Array(rv, &v) - fastpathTV.DecSliceFloat32N(v, d) - default: - fastpathTV.DecSliceFloat32N(rv2i(rv).([]float32), d) - } -} -func (f fastpathT) DecSliceFloat32X(vp *[]float32, d *Decoder) { - if v, changed := f.DecSliceFloat32Y(*vp, d); changed { - *vp = v - } -} -func (fastpathT) DecSliceFloat32Y(v []float32, d *Decoder) (v2 []float32, changed bool) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - if v == nil { - return - } - return nil, true - } - if containerLenS == 0 { - if v == nil { - v = []float32{} - } else if len(v) != 0 { - v = v[:0] - } - slh.End() - return v, true - } - hasLen := containerLenS > 0 - var xlen int - if hasLen { - if containerLenS > cap(v) { - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4) - if xlen <= cap(v) { - v = v[:uint(xlen)] - } else { - v = make([]float32, uint(xlen)) - } - changed = true - } else if containerLenS != len(v) { - v = v[:containerLenS] - changed = true - } - } - var j int - for j = 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j == 0 && len(v) == 0 { // means hasLen == false - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4) - v = make([]float32, uint(xlen)) - changed = true - } - if j >= len(v) { - v = append(v, 0) - changed = true - } - slh.ElemContainerState(j) - v[uint(j)] = float32(d.decodeFloat32()) - } - if j < len(v) { - v = v[:uint(j)] - changed = true - } else if j == 0 && v == nil { - v = []float32{} - changed = true - } - slh.End() - return v, changed -} -func (fastpathT) DecSliceFloat32N(v []float32, d *Decoder) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - return - } - if containerLenS == 0 { - slh.End() - return - } - hasLen := containerLenS > 0 - for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j >= len(v) { - slh.arrayCannotExpand(hasLen, len(v), j, containerLenS) - return - } - slh.ElemContainerState(j) - v[uint(j)] = float32(d.decodeFloat32()) - } - slh.End() -} - -func (d *Decoder) fastpathDecSliceFloat64R(f *codecFnInfo, rv reflect.Value) { - var v []float64 - switch rv.Kind() { - case reflect.Ptr: - vp := rv2i(rv).(*[]float64) - var changed bool - if v, changed = fastpathTV.DecSliceFloat64Y(*vp, d); changed { - *vp = v - } - case reflect.Array: - rvGetSlice4Array(rv, &v) - fastpathTV.DecSliceFloat64N(v, d) - default: - fastpathTV.DecSliceFloat64N(rv2i(rv).([]float64), d) - } -} -func (f fastpathT) DecSliceFloat64X(vp *[]float64, d *Decoder) { - if v, changed := f.DecSliceFloat64Y(*vp, d); changed { - *vp = v - } -} -func (fastpathT) DecSliceFloat64Y(v []float64, d *Decoder) (v2 []float64, changed bool) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - if v == nil { - return - } - return nil, true - } - if containerLenS == 0 { - if v == nil { - v = []float64{} - } else if len(v) != 0 { - v = v[:0] - } - slh.End() - return v, true - } - hasLen := containerLenS > 0 - var xlen int - if hasLen { - if containerLenS > cap(v) { - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8) - if xlen <= cap(v) { - v = v[:uint(xlen)] - } else { - v = make([]float64, uint(xlen)) - } - changed = true - } else if containerLenS != len(v) { - v = v[:containerLenS] - changed = true - } - } - var j int - for j = 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j == 0 && len(v) == 0 { // means hasLen == false - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8) - v = make([]float64, uint(xlen)) - changed = true - } - if j >= len(v) { - v = append(v, 0) - changed = true - } - slh.ElemContainerState(j) - v[uint(j)] = d.d.DecodeFloat64() - } - if j < len(v) { - v = v[:uint(j)] - changed = true - } else if j == 0 && v == nil { - v = []float64{} - changed = true - } - slh.End() - return v, changed -} -func (fastpathT) DecSliceFloat64N(v []float64, d *Decoder) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - return - } - if containerLenS == 0 { - slh.End() - return - } - hasLen := containerLenS > 0 - for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j >= len(v) { - slh.arrayCannotExpand(hasLen, len(v), j, containerLenS) - return - } - slh.ElemContainerState(j) - v[uint(j)] = d.d.DecodeFloat64() - } - slh.End() -} - -func (d *Decoder) fastpathDecSliceUint8R(f *codecFnInfo, rv reflect.Value) { - var v []uint8 - switch rv.Kind() { - case reflect.Ptr: - vp := rv2i(rv).(*[]uint8) - var changed bool - if v, changed = fastpathTV.DecSliceUint8Y(*vp, d); changed { - *vp = v - } - case reflect.Array: - rvGetSlice4Array(rv, &v) - fastpathTV.DecSliceUint8N(v, d) - default: - fastpathTV.DecSliceUint8N(rv2i(rv).([]uint8), d) - } -} -func (f fastpathT) DecSliceUint8X(vp *[]uint8, d *Decoder) { - if v, changed := f.DecSliceUint8Y(*vp, d); changed { - *vp = v - } -} -func (fastpathT) DecSliceUint8Y(v []uint8, d *Decoder) (v2 []uint8, changed bool) { - switch d.d.ContainerType() { - case valueTypeNil, valueTypeMap: - break - default: - v2 = d.decodeBytesInto(v[:len(v):len(v)]) - changed = !(len(v2) > 0 && len(v2) == len(v) && &v2[0] == &v[0]) // not same slice - return - } - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - if v == nil { - return - } - return nil, true - } - if containerLenS == 0 { - if v == nil { - v = []uint8{} - } else if len(v) != 0 { - v = v[:0] - } - slh.End() - return v, true - } - hasLen := containerLenS > 0 - var xlen int - if hasLen { - if containerLenS > cap(v) { - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1) - if xlen <= cap(v) { - v = v[:uint(xlen)] - } else { - v = make([]uint8, uint(xlen)) - } - changed = true - } else if containerLenS != len(v) { - v = v[:containerLenS] - changed = true - } - } - var j int - for j = 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j == 0 && len(v) == 0 { // means hasLen == false - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1) - v = make([]uint8, uint(xlen)) - changed = true - } - if j >= len(v) { - v = append(v, 0) - changed = true - } - slh.ElemContainerState(j) - v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - } - if j < len(v) { - v = v[:uint(j)] - changed = true - } else if j == 0 && v == nil { - v = []uint8{} - changed = true - } - slh.End() - return v, changed -} -func (fastpathT) DecSliceUint8N(v []uint8, d *Decoder) { - switch d.d.ContainerType() { - case valueTypeNil, valueTypeMap: - break - default: - v2 := d.decodeBytesInto(v[:len(v):len(v)]) - if !(len(v2) > 0 && len(v2) == len(v) && &v2[0] == &v[0]) { // not same slice - copy(v, v2) - } - return - } - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - return - } - if containerLenS == 0 { - slh.End() - return - } - hasLen := containerLenS > 0 - for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j >= len(v) { - slh.arrayCannotExpand(hasLen, len(v), j, containerLenS) - return - } - slh.ElemContainerState(j) - v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - } - slh.End() -} - -func (d *Decoder) fastpathDecSliceUint64R(f *codecFnInfo, rv reflect.Value) { - var v []uint64 - switch rv.Kind() { - case reflect.Ptr: - vp := rv2i(rv).(*[]uint64) - var changed bool - if v, changed = fastpathTV.DecSliceUint64Y(*vp, d); changed { - *vp = v - } - case reflect.Array: - rvGetSlice4Array(rv, &v) - fastpathTV.DecSliceUint64N(v, d) - default: - fastpathTV.DecSliceUint64N(rv2i(rv).([]uint64), d) - } -} -func (f fastpathT) DecSliceUint64X(vp *[]uint64, d *Decoder) { - if v, changed := f.DecSliceUint64Y(*vp, d); changed { - *vp = v - } -} -func (fastpathT) DecSliceUint64Y(v []uint64, d *Decoder) (v2 []uint64, changed bool) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - if v == nil { - return - } - return nil, true - } - if containerLenS == 0 { - if v == nil { - v = []uint64{} - } else if len(v) != 0 { - v = v[:0] - } - slh.End() - return v, true - } - hasLen := containerLenS > 0 - var xlen int - if hasLen { - if containerLenS > cap(v) { - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8) - if xlen <= cap(v) { - v = v[:uint(xlen)] - } else { - v = make([]uint64, uint(xlen)) - } - changed = true - } else if containerLenS != len(v) { - v = v[:containerLenS] - changed = true - } - } - var j int - for j = 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j == 0 && len(v) == 0 { // means hasLen == false - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8) - v = make([]uint64, uint(xlen)) - changed = true - } - if j >= len(v) { - v = append(v, 0) - changed = true - } - slh.ElemContainerState(j) - v[uint(j)] = d.d.DecodeUint64() - } - if j < len(v) { - v = v[:uint(j)] - changed = true - } else if j == 0 && v == nil { - v = []uint64{} - changed = true - } - slh.End() - return v, changed -} -func (fastpathT) DecSliceUint64N(v []uint64, d *Decoder) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - return - } - if containerLenS == 0 { - slh.End() - return - } - hasLen := containerLenS > 0 - for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j >= len(v) { - slh.arrayCannotExpand(hasLen, len(v), j, containerLenS) - return - } - slh.ElemContainerState(j) - v[uint(j)] = d.d.DecodeUint64() - } - slh.End() -} - -func (d *Decoder) fastpathDecSliceIntR(f *codecFnInfo, rv reflect.Value) { - var v []int - switch rv.Kind() { - case reflect.Ptr: - vp := rv2i(rv).(*[]int) - var changed bool - if v, changed = fastpathTV.DecSliceIntY(*vp, d); changed { - *vp = v - } - case reflect.Array: - rvGetSlice4Array(rv, &v) - fastpathTV.DecSliceIntN(v, d) - default: - fastpathTV.DecSliceIntN(rv2i(rv).([]int), d) - } -} -func (f fastpathT) DecSliceIntX(vp *[]int, d *Decoder) { - if v, changed := f.DecSliceIntY(*vp, d); changed { - *vp = v - } -} -func (fastpathT) DecSliceIntY(v []int, d *Decoder) (v2 []int, changed bool) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - if v == nil { - return - } - return nil, true - } - if containerLenS == 0 { - if v == nil { - v = []int{} - } else if len(v) != 0 { - v = v[:0] - } - slh.End() - return v, true - } - hasLen := containerLenS > 0 - var xlen int - if hasLen { - if containerLenS > cap(v) { - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8) - if xlen <= cap(v) { - v = v[:uint(xlen)] - } else { - v = make([]int, uint(xlen)) - } - changed = true - } else if containerLenS != len(v) { - v = v[:containerLenS] - changed = true - } - } - var j int - for j = 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j == 0 && len(v) == 0 { // means hasLen == false - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8) - v = make([]int, uint(xlen)) - changed = true - } - if j >= len(v) { - v = append(v, 0) - changed = true - } - slh.ElemContainerState(j) - v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - } - if j < len(v) { - v = v[:uint(j)] - changed = true - } else if j == 0 && v == nil { - v = []int{} - changed = true - } - slh.End() - return v, changed -} -func (fastpathT) DecSliceIntN(v []int, d *Decoder) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - return - } - if containerLenS == 0 { - slh.End() - return - } - hasLen := containerLenS > 0 - for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j >= len(v) { - slh.arrayCannotExpand(hasLen, len(v), j, containerLenS) - return - } - slh.ElemContainerState(j) - v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - } - slh.End() -} - -func (d *Decoder) fastpathDecSliceInt32R(f *codecFnInfo, rv reflect.Value) { - var v []int32 - switch rv.Kind() { - case reflect.Ptr: - vp := rv2i(rv).(*[]int32) - var changed bool - if v, changed = fastpathTV.DecSliceInt32Y(*vp, d); changed { - *vp = v - } - case reflect.Array: - rvGetSlice4Array(rv, &v) - fastpathTV.DecSliceInt32N(v, d) - default: - fastpathTV.DecSliceInt32N(rv2i(rv).([]int32), d) - } -} -func (f fastpathT) DecSliceInt32X(vp *[]int32, d *Decoder) { - if v, changed := f.DecSliceInt32Y(*vp, d); changed { - *vp = v - } -} -func (fastpathT) DecSliceInt32Y(v []int32, d *Decoder) (v2 []int32, changed bool) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - if v == nil { - return - } - return nil, true - } - if containerLenS == 0 { - if v == nil { - v = []int32{} - } else if len(v) != 0 { - v = v[:0] - } - slh.End() - return v, true - } - hasLen := containerLenS > 0 - var xlen int - if hasLen { - if containerLenS > cap(v) { - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4) - if xlen <= cap(v) { - v = v[:uint(xlen)] - } else { - v = make([]int32, uint(xlen)) - } - changed = true - } else if containerLenS != len(v) { - v = v[:containerLenS] - changed = true - } - } - var j int - for j = 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j == 0 && len(v) == 0 { // means hasLen == false - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4) - v = make([]int32, uint(xlen)) - changed = true - } - if j >= len(v) { - v = append(v, 0) - changed = true - } - slh.ElemContainerState(j) - v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - } - if j < len(v) { - v = v[:uint(j)] - changed = true - } else if j == 0 && v == nil { - v = []int32{} - changed = true - } - slh.End() - return v, changed -} -func (fastpathT) DecSliceInt32N(v []int32, d *Decoder) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - return - } - if containerLenS == 0 { - slh.End() - return - } - hasLen := containerLenS > 0 - for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j >= len(v) { - slh.arrayCannotExpand(hasLen, len(v), j, containerLenS) - return - } - slh.ElemContainerState(j) - v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - } - slh.End() -} - -func (d *Decoder) fastpathDecSliceInt64R(f *codecFnInfo, rv reflect.Value) { - var v []int64 - switch rv.Kind() { - case reflect.Ptr: - vp := rv2i(rv).(*[]int64) - var changed bool - if v, changed = fastpathTV.DecSliceInt64Y(*vp, d); changed { - *vp = v - } - case reflect.Array: - rvGetSlice4Array(rv, &v) - fastpathTV.DecSliceInt64N(v, d) - default: - fastpathTV.DecSliceInt64N(rv2i(rv).([]int64), d) - } -} -func (f fastpathT) DecSliceInt64X(vp *[]int64, d *Decoder) { - if v, changed := f.DecSliceInt64Y(*vp, d); changed { - *vp = v - } -} -func (fastpathT) DecSliceInt64Y(v []int64, d *Decoder) (v2 []int64, changed bool) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - if v == nil { - return - } - return nil, true - } - if containerLenS == 0 { - if v == nil { - v = []int64{} - } else if len(v) != 0 { - v = v[:0] - } - slh.End() - return v, true - } - hasLen := containerLenS > 0 - var xlen int - if hasLen { - if containerLenS > cap(v) { - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8) - if xlen <= cap(v) { - v = v[:uint(xlen)] - } else { - v = make([]int64, uint(xlen)) - } - changed = true - } else if containerLenS != len(v) { - v = v[:containerLenS] - changed = true - } - } - var j int - for j = 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j == 0 && len(v) == 0 { // means hasLen == false - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8) - v = make([]int64, uint(xlen)) - changed = true - } - if j >= len(v) { - v = append(v, 0) - changed = true - } - slh.ElemContainerState(j) - v[uint(j)] = d.d.DecodeInt64() - } - if j < len(v) { - v = v[:uint(j)] - changed = true - } else if j == 0 && v == nil { - v = []int64{} - changed = true - } - slh.End() - return v, changed -} -func (fastpathT) DecSliceInt64N(v []int64, d *Decoder) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - return - } - if containerLenS == 0 { - slh.End() - return - } - hasLen := containerLenS > 0 - for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j >= len(v) { - slh.arrayCannotExpand(hasLen, len(v), j, containerLenS) - return - } - slh.ElemContainerState(j) - v[uint(j)] = d.d.DecodeInt64() - } - slh.End() -} - -func (d *Decoder) fastpathDecSliceBoolR(f *codecFnInfo, rv reflect.Value) { - var v []bool - switch rv.Kind() { - case reflect.Ptr: - vp := rv2i(rv).(*[]bool) - var changed bool - if v, changed = fastpathTV.DecSliceBoolY(*vp, d); changed { - *vp = v - } - case reflect.Array: - rvGetSlice4Array(rv, &v) - fastpathTV.DecSliceBoolN(v, d) - default: - fastpathTV.DecSliceBoolN(rv2i(rv).([]bool), d) - } -} -func (f fastpathT) DecSliceBoolX(vp *[]bool, d *Decoder) { - if v, changed := f.DecSliceBoolY(*vp, d); changed { - *vp = v - } -} -func (fastpathT) DecSliceBoolY(v []bool, d *Decoder) (v2 []bool, changed bool) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - if v == nil { - return - } - return nil, true - } - if containerLenS == 0 { - if v == nil { - v = []bool{} - } else if len(v) != 0 { - v = v[:0] - } - slh.End() - return v, true - } - hasLen := containerLenS > 0 - var xlen int - if hasLen { - if containerLenS > cap(v) { - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1) - if xlen <= cap(v) { - v = v[:uint(xlen)] - } else { - v = make([]bool, uint(xlen)) - } - changed = true - } else if containerLenS != len(v) { - v = v[:containerLenS] - changed = true - } - } - var j int - for j = 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j == 0 && len(v) == 0 { // means hasLen == false - xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1) - v = make([]bool, uint(xlen)) - changed = true - } - if j >= len(v) { - v = append(v, false) - changed = true - } - slh.ElemContainerState(j) - v[uint(j)] = d.d.DecodeBool() - } - if j < len(v) { - v = v[:uint(j)] - changed = true - } else if j == 0 && v == nil { - v = []bool{} - changed = true - } - slh.End() - return v, changed -} -func (fastpathT) DecSliceBoolN(v []bool, d *Decoder) { - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - return - } - if containerLenS == 0 { - slh.End() - return - } - hasLen := containerLenS > 0 - for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j >= len(v) { - slh.arrayCannotExpand(hasLen, len(v), j, containerLenS) - return - } - slh.ElemContainerState(j) - v[uint(j)] = d.d.DecodeBool() - } - slh.End() -} -func (d *Decoder) fastpathDecMapStringIntfR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[string]interface{}) - if *vp == nil { - *vp = make(map[string]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 32)) - } - if containerLen != 0 { - fastpathTV.DecMapStringIntfL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapStringIntfL(rv2i(rv).(map[string]interface{}), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapStringIntfX(vp *map[string]interface{}, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[string]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 32)) - } - if containerLen != 0 { - f.DecMapStringIntfL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapStringIntfL(v map[string]interface{}, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[string]interface{} given stream length: %v", containerLen) - return - } - mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset - var mk string - var mv interface{} - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.stringZC(d.d.DecodeStringAsBytes()) - d.mapElemValue() - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapStringStringR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[string]string) - if *vp == nil { - *vp = make(map[string]string, decInferLen(containerLen, d.h.MaxInitLen, 32)) - } - if containerLen != 0 { - fastpathTV.DecMapStringStringL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapStringStringL(rv2i(rv).(map[string]string), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapStringStringX(vp *map[string]string, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[string]string, decInferLen(containerLen, d.h.MaxInitLen, 32)) - } - if containerLen != 0 { - f.DecMapStringStringL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapStringStringL(v map[string]string, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[string]string given stream length: %v", containerLen) - return - } - var mk string - var mv string - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.stringZC(d.d.DecodeStringAsBytes()) - d.mapElemValue() - mv = d.stringZC(d.d.DecodeStringAsBytes()) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapStringBytesR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[string][]byte) - if *vp == nil { - *vp = make(map[string][]byte, decInferLen(containerLen, d.h.MaxInitLen, 40)) - } - if containerLen != 0 { - fastpathTV.DecMapStringBytesL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapStringBytesL(rv2i(rv).(map[string][]byte), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapStringBytesX(vp *map[string][]byte, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[string][]byte, decInferLen(containerLen, d.h.MaxInitLen, 40)) - } - if containerLen != 0 { - f.DecMapStringBytesL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapStringBytesL(v map[string][]byte, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[string][]byte given stream length: %v", containerLen) - return - } - mapGet := v != nil && !d.h.MapValueReset - var mk string - var mv []byte - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.stringZC(d.d.DecodeStringAsBytes()) - d.mapElemValue() - if mapGet { - mv = v[mk] - } else { - mv = nil - } - mv = d.decodeBytesInto(mv) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapStringUint8R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[string]uint8) - if *vp == nil { - *vp = make(map[string]uint8, decInferLen(containerLen, d.h.MaxInitLen, 17)) - } - if containerLen != 0 { - fastpathTV.DecMapStringUint8L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapStringUint8L(rv2i(rv).(map[string]uint8), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapStringUint8X(vp *map[string]uint8, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[string]uint8, decInferLen(containerLen, d.h.MaxInitLen, 17)) - } - if containerLen != 0 { - f.DecMapStringUint8L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapStringUint8L(v map[string]uint8, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[string]uint8 given stream length: %v", containerLen) - return - } - var mk string - var mv uint8 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.stringZC(d.d.DecodeStringAsBytes()) - d.mapElemValue() - mv = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapStringUint64R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[string]uint64) - if *vp == nil { - *vp = make(map[string]uint64, decInferLen(containerLen, d.h.MaxInitLen, 24)) - } - if containerLen != 0 { - fastpathTV.DecMapStringUint64L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapStringUint64L(rv2i(rv).(map[string]uint64), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapStringUint64X(vp *map[string]uint64, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[string]uint64, decInferLen(containerLen, d.h.MaxInitLen, 24)) - } - if containerLen != 0 { - f.DecMapStringUint64L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapStringUint64L(v map[string]uint64, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[string]uint64 given stream length: %v", containerLen) - return - } - var mk string - var mv uint64 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.stringZC(d.d.DecodeStringAsBytes()) - d.mapElemValue() - mv = d.d.DecodeUint64() - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapStringIntR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[string]int) - if *vp == nil { - *vp = make(map[string]int, decInferLen(containerLen, d.h.MaxInitLen, 24)) - } - if containerLen != 0 { - fastpathTV.DecMapStringIntL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapStringIntL(rv2i(rv).(map[string]int), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapStringIntX(vp *map[string]int, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[string]int, decInferLen(containerLen, d.h.MaxInitLen, 24)) - } - if containerLen != 0 { - f.DecMapStringIntL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapStringIntL(v map[string]int, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[string]int given stream length: %v", containerLen) - return - } - var mk string - var mv int - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.stringZC(d.d.DecodeStringAsBytes()) - d.mapElemValue() - mv = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapStringInt32R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[string]int32) - if *vp == nil { - *vp = make(map[string]int32, decInferLen(containerLen, d.h.MaxInitLen, 20)) - } - if containerLen != 0 { - fastpathTV.DecMapStringInt32L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapStringInt32L(rv2i(rv).(map[string]int32), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapStringInt32X(vp *map[string]int32, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[string]int32, decInferLen(containerLen, d.h.MaxInitLen, 20)) - } - if containerLen != 0 { - f.DecMapStringInt32L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapStringInt32L(v map[string]int32, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[string]int32 given stream length: %v", containerLen) - return - } - var mk string - var mv int32 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.stringZC(d.d.DecodeStringAsBytes()) - d.mapElemValue() - mv = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapStringFloat64R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[string]float64) - if *vp == nil { - *vp = make(map[string]float64, decInferLen(containerLen, d.h.MaxInitLen, 24)) - } - if containerLen != 0 { - fastpathTV.DecMapStringFloat64L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapStringFloat64L(rv2i(rv).(map[string]float64), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapStringFloat64X(vp *map[string]float64, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[string]float64, decInferLen(containerLen, d.h.MaxInitLen, 24)) - } - if containerLen != 0 { - f.DecMapStringFloat64L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapStringFloat64L(v map[string]float64, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[string]float64 given stream length: %v", containerLen) - return - } - var mk string - var mv float64 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.stringZC(d.d.DecodeStringAsBytes()) - d.mapElemValue() - mv = d.d.DecodeFloat64() - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapStringBoolR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[string]bool) - if *vp == nil { - *vp = make(map[string]bool, decInferLen(containerLen, d.h.MaxInitLen, 17)) - } - if containerLen != 0 { - fastpathTV.DecMapStringBoolL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapStringBoolL(rv2i(rv).(map[string]bool), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapStringBoolX(vp *map[string]bool, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[string]bool, decInferLen(containerLen, d.h.MaxInitLen, 17)) - } - if containerLen != 0 { - f.DecMapStringBoolL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapStringBoolL(v map[string]bool, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[string]bool given stream length: %v", containerLen) - return - } - var mk string - var mv bool - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.stringZC(d.d.DecodeStringAsBytes()) - d.mapElemValue() - mv = d.d.DecodeBool() - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint8IntfR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint8]interface{}) - if *vp == nil { - *vp = make(map[uint8]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 17)) - } - if containerLen != 0 { - fastpathTV.DecMapUint8IntfL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint8IntfL(rv2i(rv).(map[uint8]interface{}), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint8IntfX(vp *map[uint8]interface{}, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint8]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 17)) - } - if containerLen != 0 { - f.DecMapUint8IntfL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint8IntfL(v map[uint8]interface{}, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint8]interface{} given stream length: %v", containerLen) - return - } - mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset - var mk uint8 - var mv interface{} - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - d.mapElemValue() - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint8StringR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint8]string) - if *vp == nil { - *vp = make(map[uint8]string, decInferLen(containerLen, d.h.MaxInitLen, 17)) - } - if containerLen != 0 { - fastpathTV.DecMapUint8StringL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint8StringL(rv2i(rv).(map[uint8]string), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint8StringX(vp *map[uint8]string, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint8]string, decInferLen(containerLen, d.h.MaxInitLen, 17)) - } - if containerLen != 0 { - f.DecMapUint8StringL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint8StringL(v map[uint8]string, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint8]string given stream length: %v", containerLen) - return - } - var mk uint8 - var mv string - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - d.mapElemValue() - mv = d.stringZC(d.d.DecodeStringAsBytes()) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint8BytesR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint8][]byte) - if *vp == nil { - *vp = make(map[uint8][]byte, decInferLen(containerLen, d.h.MaxInitLen, 25)) - } - if containerLen != 0 { - fastpathTV.DecMapUint8BytesL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint8BytesL(rv2i(rv).(map[uint8][]byte), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint8BytesX(vp *map[uint8][]byte, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint8][]byte, decInferLen(containerLen, d.h.MaxInitLen, 25)) - } - if containerLen != 0 { - f.DecMapUint8BytesL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint8BytesL(v map[uint8][]byte, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint8][]byte given stream length: %v", containerLen) - return - } - mapGet := v != nil && !d.h.MapValueReset - var mk uint8 - var mv []byte - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - d.mapElemValue() - if mapGet { - mv = v[mk] - } else { - mv = nil - } - mv = d.decodeBytesInto(mv) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint8Uint8R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint8]uint8) - if *vp == nil { - *vp = make(map[uint8]uint8, decInferLen(containerLen, d.h.MaxInitLen, 2)) - } - if containerLen != 0 { - fastpathTV.DecMapUint8Uint8L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint8Uint8L(rv2i(rv).(map[uint8]uint8), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint8Uint8X(vp *map[uint8]uint8, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint8]uint8, decInferLen(containerLen, d.h.MaxInitLen, 2)) - } - if containerLen != 0 { - f.DecMapUint8Uint8L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint8Uint8L(v map[uint8]uint8, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint8]uint8 given stream length: %v", containerLen) - return - } - var mk uint8 - var mv uint8 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - d.mapElemValue() - mv = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint8Uint64R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint8]uint64) - if *vp == nil { - *vp = make(map[uint8]uint64, decInferLen(containerLen, d.h.MaxInitLen, 9)) - } - if containerLen != 0 { - fastpathTV.DecMapUint8Uint64L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint8Uint64L(rv2i(rv).(map[uint8]uint64), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint8Uint64X(vp *map[uint8]uint64, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint8]uint64, decInferLen(containerLen, d.h.MaxInitLen, 9)) - } - if containerLen != 0 { - f.DecMapUint8Uint64L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint8Uint64L(v map[uint8]uint64, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint8]uint64 given stream length: %v", containerLen) - return - } - var mk uint8 - var mv uint64 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - d.mapElemValue() - mv = d.d.DecodeUint64() - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint8IntR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint8]int) - if *vp == nil { - *vp = make(map[uint8]int, decInferLen(containerLen, d.h.MaxInitLen, 9)) - } - if containerLen != 0 { - fastpathTV.DecMapUint8IntL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint8IntL(rv2i(rv).(map[uint8]int), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint8IntX(vp *map[uint8]int, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint8]int, decInferLen(containerLen, d.h.MaxInitLen, 9)) - } - if containerLen != 0 { - f.DecMapUint8IntL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint8IntL(v map[uint8]int, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint8]int given stream length: %v", containerLen) - return - } - var mk uint8 - var mv int - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - d.mapElemValue() - mv = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint8Int32R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint8]int32) - if *vp == nil { - *vp = make(map[uint8]int32, decInferLen(containerLen, d.h.MaxInitLen, 5)) - } - if containerLen != 0 { - fastpathTV.DecMapUint8Int32L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint8Int32L(rv2i(rv).(map[uint8]int32), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint8Int32X(vp *map[uint8]int32, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint8]int32, decInferLen(containerLen, d.h.MaxInitLen, 5)) - } - if containerLen != 0 { - f.DecMapUint8Int32L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint8Int32L(v map[uint8]int32, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint8]int32 given stream length: %v", containerLen) - return - } - var mk uint8 - var mv int32 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - d.mapElemValue() - mv = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint8Float64R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint8]float64) - if *vp == nil { - *vp = make(map[uint8]float64, decInferLen(containerLen, d.h.MaxInitLen, 9)) - } - if containerLen != 0 { - fastpathTV.DecMapUint8Float64L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint8Float64L(rv2i(rv).(map[uint8]float64), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint8Float64X(vp *map[uint8]float64, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint8]float64, decInferLen(containerLen, d.h.MaxInitLen, 9)) - } - if containerLen != 0 { - f.DecMapUint8Float64L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint8Float64L(v map[uint8]float64, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint8]float64 given stream length: %v", containerLen) - return - } - var mk uint8 - var mv float64 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - d.mapElemValue() - mv = d.d.DecodeFloat64() - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint8BoolR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint8]bool) - if *vp == nil { - *vp = make(map[uint8]bool, decInferLen(containerLen, d.h.MaxInitLen, 2)) - } - if containerLen != 0 { - fastpathTV.DecMapUint8BoolL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint8BoolL(rv2i(rv).(map[uint8]bool), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint8BoolX(vp *map[uint8]bool, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint8]bool, decInferLen(containerLen, d.h.MaxInitLen, 2)) - } - if containerLen != 0 { - f.DecMapUint8BoolL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint8BoolL(v map[uint8]bool, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint8]bool given stream length: %v", containerLen) - return - } - var mk uint8 - var mv bool - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - d.mapElemValue() - mv = d.d.DecodeBool() - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint64IntfR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint64]interface{}) - if *vp == nil { - *vp = make(map[uint64]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 24)) - } - if containerLen != 0 { - fastpathTV.DecMapUint64IntfL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint64IntfL(rv2i(rv).(map[uint64]interface{}), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint64IntfX(vp *map[uint64]interface{}, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint64]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 24)) - } - if containerLen != 0 { - f.DecMapUint64IntfL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint64IntfL(v map[uint64]interface{}, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint64]interface{} given stream length: %v", containerLen) - return - } - mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset - var mk uint64 - var mv interface{} - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.d.DecodeUint64() - d.mapElemValue() - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint64StringR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint64]string) - if *vp == nil { - *vp = make(map[uint64]string, decInferLen(containerLen, d.h.MaxInitLen, 24)) - } - if containerLen != 0 { - fastpathTV.DecMapUint64StringL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint64StringL(rv2i(rv).(map[uint64]string), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint64StringX(vp *map[uint64]string, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint64]string, decInferLen(containerLen, d.h.MaxInitLen, 24)) - } - if containerLen != 0 { - f.DecMapUint64StringL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint64StringL(v map[uint64]string, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint64]string given stream length: %v", containerLen) - return - } - var mk uint64 - var mv string - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.d.DecodeUint64() - d.mapElemValue() - mv = d.stringZC(d.d.DecodeStringAsBytes()) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint64BytesR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint64][]byte) - if *vp == nil { - *vp = make(map[uint64][]byte, decInferLen(containerLen, d.h.MaxInitLen, 32)) - } - if containerLen != 0 { - fastpathTV.DecMapUint64BytesL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint64BytesL(rv2i(rv).(map[uint64][]byte), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint64BytesX(vp *map[uint64][]byte, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint64][]byte, decInferLen(containerLen, d.h.MaxInitLen, 32)) - } - if containerLen != 0 { - f.DecMapUint64BytesL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint64BytesL(v map[uint64][]byte, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint64][]byte given stream length: %v", containerLen) - return - } - mapGet := v != nil && !d.h.MapValueReset - var mk uint64 - var mv []byte - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.d.DecodeUint64() - d.mapElemValue() - if mapGet { - mv = v[mk] - } else { - mv = nil - } - mv = d.decodeBytesInto(mv) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint64Uint8R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint64]uint8) - if *vp == nil { - *vp = make(map[uint64]uint8, decInferLen(containerLen, d.h.MaxInitLen, 9)) - } - if containerLen != 0 { - fastpathTV.DecMapUint64Uint8L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint64Uint8L(rv2i(rv).(map[uint64]uint8), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint64Uint8X(vp *map[uint64]uint8, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint64]uint8, decInferLen(containerLen, d.h.MaxInitLen, 9)) - } - if containerLen != 0 { - f.DecMapUint64Uint8L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint64Uint8L(v map[uint64]uint8, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint64]uint8 given stream length: %v", containerLen) - return - } - var mk uint64 - var mv uint8 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.d.DecodeUint64() - d.mapElemValue() - mv = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint64Uint64R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint64]uint64) - if *vp == nil { - *vp = make(map[uint64]uint64, decInferLen(containerLen, d.h.MaxInitLen, 16)) - } - if containerLen != 0 { - fastpathTV.DecMapUint64Uint64L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint64Uint64L(rv2i(rv).(map[uint64]uint64), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint64Uint64X(vp *map[uint64]uint64, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint64]uint64, decInferLen(containerLen, d.h.MaxInitLen, 16)) - } - if containerLen != 0 { - f.DecMapUint64Uint64L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint64Uint64L(v map[uint64]uint64, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint64]uint64 given stream length: %v", containerLen) - return - } - var mk uint64 - var mv uint64 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.d.DecodeUint64() - d.mapElemValue() - mv = d.d.DecodeUint64() - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint64IntR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint64]int) - if *vp == nil { - *vp = make(map[uint64]int, decInferLen(containerLen, d.h.MaxInitLen, 16)) - } - if containerLen != 0 { - fastpathTV.DecMapUint64IntL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint64IntL(rv2i(rv).(map[uint64]int), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint64IntX(vp *map[uint64]int, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint64]int, decInferLen(containerLen, d.h.MaxInitLen, 16)) - } - if containerLen != 0 { - f.DecMapUint64IntL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint64IntL(v map[uint64]int, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint64]int given stream length: %v", containerLen) - return - } - var mk uint64 - var mv int - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.d.DecodeUint64() - d.mapElemValue() - mv = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint64Int32R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint64]int32) - if *vp == nil { - *vp = make(map[uint64]int32, decInferLen(containerLen, d.h.MaxInitLen, 12)) - } - if containerLen != 0 { - fastpathTV.DecMapUint64Int32L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint64Int32L(rv2i(rv).(map[uint64]int32), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint64Int32X(vp *map[uint64]int32, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint64]int32, decInferLen(containerLen, d.h.MaxInitLen, 12)) - } - if containerLen != 0 { - f.DecMapUint64Int32L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint64Int32L(v map[uint64]int32, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint64]int32 given stream length: %v", containerLen) - return - } - var mk uint64 - var mv int32 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.d.DecodeUint64() - d.mapElemValue() - mv = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint64Float64R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint64]float64) - if *vp == nil { - *vp = make(map[uint64]float64, decInferLen(containerLen, d.h.MaxInitLen, 16)) - } - if containerLen != 0 { - fastpathTV.DecMapUint64Float64L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint64Float64L(rv2i(rv).(map[uint64]float64), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint64Float64X(vp *map[uint64]float64, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint64]float64, decInferLen(containerLen, d.h.MaxInitLen, 16)) - } - if containerLen != 0 { - f.DecMapUint64Float64L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint64Float64L(v map[uint64]float64, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint64]float64 given stream length: %v", containerLen) - return - } - var mk uint64 - var mv float64 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.d.DecodeUint64() - d.mapElemValue() - mv = d.d.DecodeFloat64() - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapUint64BoolR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[uint64]bool) - if *vp == nil { - *vp = make(map[uint64]bool, decInferLen(containerLen, d.h.MaxInitLen, 9)) - } - if containerLen != 0 { - fastpathTV.DecMapUint64BoolL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapUint64BoolL(rv2i(rv).(map[uint64]bool), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapUint64BoolX(vp *map[uint64]bool, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[uint64]bool, decInferLen(containerLen, d.h.MaxInitLen, 9)) - } - if containerLen != 0 { - f.DecMapUint64BoolL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapUint64BoolL(v map[uint64]bool, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[uint64]bool given stream length: %v", containerLen) - return - } - var mk uint64 - var mv bool - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = d.d.DecodeUint64() - d.mapElemValue() - mv = d.d.DecodeBool() - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapIntIntfR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int]interface{}) - if *vp == nil { - *vp = make(map[int]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 24)) - } - if containerLen != 0 { - fastpathTV.DecMapIntIntfL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapIntIntfL(rv2i(rv).(map[int]interface{}), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapIntIntfX(vp *map[int]interface{}, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 24)) - } - if containerLen != 0 { - f.DecMapIntIntfL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapIntIntfL(v map[int]interface{}, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int]interface{} given stream length: %v", containerLen) - return - } - mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset - var mk int - var mv interface{} - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - d.mapElemValue() - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapIntStringR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int]string) - if *vp == nil { - *vp = make(map[int]string, decInferLen(containerLen, d.h.MaxInitLen, 24)) - } - if containerLen != 0 { - fastpathTV.DecMapIntStringL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapIntStringL(rv2i(rv).(map[int]string), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapIntStringX(vp *map[int]string, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int]string, decInferLen(containerLen, d.h.MaxInitLen, 24)) - } - if containerLen != 0 { - f.DecMapIntStringL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapIntStringL(v map[int]string, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int]string given stream length: %v", containerLen) - return - } - var mk int - var mv string - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - d.mapElemValue() - mv = d.stringZC(d.d.DecodeStringAsBytes()) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapIntBytesR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int][]byte) - if *vp == nil { - *vp = make(map[int][]byte, decInferLen(containerLen, d.h.MaxInitLen, 32)) - } - if containerLen != 0 { - fastpathTV.DecMapIntBytesL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapIntBytesL(rv2i(rv).(map[int][]byte), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapIntBytesX(vp *map[int][]byte, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int][]byte, decInferLen(containerLen, d.h.MaxInitLen, 32)) - } - if containerLen != 0 { - f.DecMapIntBytesL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapIntBytesL(v map[int][]byte, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int][]byte given stream length: %v", containerLen) - return - } - mapGet := v != nil && !d.h.MapValueReset - var mk int - var mv []byte - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - d.mapElemValue() - if mapGet { - mv = v[mk] - } else { - mv = nil - } - mv = d.decodeBytesInto(mv) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapIntUint8R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int]uint8) - if *vp == nil { - *vp = make(map[int]uint8, decInferLen(containerLen, d.h.MaxInitLen, 9)) - } - if containerLen != 0 { - fastpathTV.DecMapIntUint8L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapIntUint8L(rv2i(rv).(map[int]uint8), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapIntUint8X(vp *map[int]uint8, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int]uint8, decInferLen(containerLen, d.h.MaxInitLen, 9)) - } - if containerLen != 0 { - f.DecMapIntUint8L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapIntUint8L(v map[int]uint8, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int]uint8 given stream length: %v", containerLen) - return - } - var mk int - var mv uint8 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - d.mapElemValue() - mv = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapIntUint64R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int]uint64) - if *vp == nil { - *vp = make(map[int]uint64, decInferLen(containerLen, d.h.MaxInitLen, 16)) - } - if containerLen != 0 { - fastpathTV.DecMapIntUint64L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapIntUint64L(rv2i(rv).(map[int]uint64), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapIntUint64X(vp *map[int]uint64, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int]uint64, decInferLen(containerLen, d.h.MaxInitLen, 16)) - } - if containerLen != 0 { - f.DecMapIntUint64L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapIntUint64L(v map[int]uint64, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int]uint64 given stream length: %v", containerLen) - return - } - var mk int - var mv uint64 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - d.mapElemValue() - mv = d.d.DecodeUint64() - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapIntIntR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int]int) - if *vp == nil { - *vp = make(map[int]int, decInferLen(containerLen, d.h.MaxInitLen, 16)) - } - if containerLen != 0 { - fastpathTV.DecMapIntIntL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapIntIntL(rv2i(rv).(map[int]int), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapIntIntX(vp *map[int]int, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int]int, decInferLen(containerLen, d.h.MaxInitLen, 16)) - } - if containerLen != 0 { - f.DecMapIntIntL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapIntIntL(v map[int]int, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int]int given stream length: %v", containerLen) - return - } - var mk int - var mv int - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - d.mapElemValue() - mv = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapIntInt32R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int]int32) - if *vp == nil { - *vp = make(map[int]int32, decInferLen(containerLen, d.h.MaxInitLen, 12)) - } - if containerLen != 0 { - fastpathTV.DecMapIntInt32L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapIntInt32L(rv2i(rv).(map[int]int32), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapIntInt32X(vp *map[int]int32, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int]int32, decInferLen(containerLen, d.h.MaxInitLen, 12)) - } - if containerLen != 0 { - f.DecMapIntInt32L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapIntInt32L(v map[int]int32, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int]int32 given stream length: %v", containerLen) - return - } - var mk int - var mv int32 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - d.mapElemValue() - mv = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapIntFloat64R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int]float64) - if *vp == nil { - *vp = make(map[int]float64, decInferLen(containerLen, d.h.MaxInitLen, 16)) - } - if containerLen != 0 { - fastpathTV.DecMapIntFloat64L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapIntFloat64L(rv2i(rv).(map[int]float64), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapIntFloat64X(vp *map[int]float64, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int]float64, decInferLen(containerLen, d.h.MaxInitLen, 16)) - } - if containerLen != 0 { - f.DecMapIntFloat64L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapIntFloat64L(v map[int]float64, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int]float64 given stream length: %v", containerLen) - return - } - var mk int - var mv float64 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - d.mapElemValue() - mv = d.d.DecodeFloat64() - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapIntBoolR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int]bool) - if *vp == nil { - *vp = make(map[int]bool, decInferLen(containerLen, d.h.MaxInitLen, 9)) - } - if containerLen != 0 { - fastpathTV.DecMapIntBoolL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapIntBoolL(rv2i(rv).(map[int]bool), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapIntBoolX(vp *map[int]bool, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int]bool, decInferLen(containerLen, d.h.MaxInitLen, 9)) - } - if containerLen != 0 { - f.DecMapIntBoolL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapIntBoolL(v map[int]bool, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int]bool given stream length: %v", containerLen) - return - } - var mk int - var mv bool - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - d.mapElemValue() - mv = d.d.DecodeBool() - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapInt32IntfR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int32]interface{}) - if *vp == nil { - *vp = make(map[int32]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 20)) - } - if containerLen != 0 { - fastpathTV.DecMapInt32IntfL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapInt32IntfL(rv2i(rv).(map[int32]interface{}), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapInt32IntfX(vp *map[int32]interface{}, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int32]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 20)) - } - if containerLen != 0 { - f.DecMapInt32IntfL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapInt32IntfL(v map[int32]interface{}, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int32]interface{} given stream length: %v", containerLen) - return - } - mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset - var mk int32 - var mv interface{} - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - d.mapElemValue() - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapInt32StringR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int32]string) - if *vp == nil { - *vp = make(map[int32]string, decInferLen(containerLen, d.h.MaxInitLen, 20)) - } - if containerLen != 0 { - fastpathTV.DecMapInt32StringL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapInt32StringL(rv2i(rv).(map[int32]string), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapInt32StringX(vp *map[int32]string, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int32]string, decInferLen(containerLen, d.h.MaxInitLen, 20)) - } - if containerLen != 0 { - f.DecMapInt32StringL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapInt32StringL(v map[int32]string, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int32]string given stream length: %v", containerLen) - return - } - var mk int32 - var mv string - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - d.mapElemValue() - mv = d.stringZC(d.d.DecodeStringAsBytes()) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapInt32BytesR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int32][]byte) - if *vp == nil { - *vp = make(map[int32][]byte, decInferLen(containerLen, d.h.MaxInitLen, 28)) - } - if containerLen != 0 { - fastpathTV.DecMapInt32BytesL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapInt32BytesL(rv2i(rv).(map[int32][]byte), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapInt32BytesX(vp *map[int32][]byte, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int32][]byte, decInferLen(containerLen, d.h.MaxInitLen, 28)) - } - if containerLen != 0 { - f.DecMapInt32BytesL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapInt32BytesL(v map[int32][]byte, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int32][]byte given stream length: %v", containerLen) - return - } - mapGet := v != nil && !d.h.MapValueReset - var mk int32 - var mv []byte - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - d.mapElemValue() - if mapGet { - mv = v[mk] - } else { - mv = nil - } - mv = d.decodeBytesInto(mv) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapInt32Uint8R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int32]uint8) - if *vp == nil { - *vp = make(map[int32]uint8, decInferLen(containerLen, d.h.MaxInitLen, 5)) - } - if containerLen != 0 { - fastpathTV.DecMapInt32Uint8L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapInt32Uint8L(rv2i(rv).(map[int32]uint8), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapInt32Uint8X(vp *map[int32]uint8, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int32]uint8, decInferLen(containerLen, d.h.MaxInitLen, 5)) - } - if containerLen != 0 { - f.DecMapInt32Uint8L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapInt32Uint8L(v map[int32]uint8, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int32]uint8 given stream length: %v", containerLen) - return - } - var mk int32 - var mv uint8 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - d.mapElemValue() - mv = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapInt32Uint64R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int32]uint64) - if *vp == nil { - *vp = make(map[int32]uint64, decInferLen(containerLen, d.h.MaxInitLen, 12)) - } - if containerLen != 0 { - fastpathTV.DecMapInt32Uint64L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapInt32Uint64L(rv2i(rv).(map[int32]uint64), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapInt32Uint64X(vp *map[int32]uint64, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int32]uint64, decInferLen(containerLen, d.h.MaxInitLen, 12)) - } - if containerLen != 0 { - f.DecMapInt32Uint64L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapInt32Uint64L(v map[int32]uint64, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int32]uint64 given stream length: %v", containerLen) - return - } - var mk int32 - var mv uint64 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - d.mapElemValue() - mv = d.d.DecodeUint64() - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapInt32IntR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int32]int) - if *vp == nil { - *vp = make(map[int32]int, decInferLen(containerLen, d.h.MaxInitLen, 12)) - } - if containerLen != 0 { - fastpathTV.DecMapInt32IntL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapInt32IntL(rv2i(rv).(map[int32]int), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapInt32IntX(vp *map[int32]int, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int32]int, decInferLen(containerLen, d.h.MaxInitLen, 12)) - } - if containerLen != 0 { - f.DecMapInt32IntL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapInt32IntL(v map[int32]int, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int32]int given stream length: %v", containerLen) - return - } - var mk int32 - var mv int - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - d.mapElemValue() - mv = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapInt32Int32R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int32]int32) - if *vp == nil { - *vp = make(map[int32]int32, decInferLen(containerLen, d.h.MaxInitLen, 8)) - } - if containerLen != 0 { - fastpathTV.DecMapInt32Int32L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapInt32Int32L(rv2i(rv).(map[int32]int32), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapInt32Int32X(vp *map[int32]int32, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int32]int32, decInferLen(containerLen, d.h.MaxInitLen, 8)) - } - if containerLen != 0 { - f.DecMapInt32Int32L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapInt32Int32L(v map[int32]int32, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int32]int32 given stream length: %v", containerLen) - return - } - var mk int32 - var mv int32 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - d.mapElemValue() - mv = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapInt32Float64R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int32]float64) - if *vp == nil { - *vp = make(map[int32]float64, decInferLen(containerLen, d.h.MaxInitLen, 12)) - } - if containerLen != 0 { - fastpathTV.DecMapInt32Float64L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapInt32Float64L(rv2i(rv).(map[int32]float64), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapInt32Float64X(vp *map[int32]float64, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int32]float64, decInferLen(containerLen, d.h.MaxInitLen, 12)) - } - if containerLen != 0 { - f.DecMapInt32Float64L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapInt32Float64L(v map[int32]float64, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int32]float64 given stream length: %v", containerLen) - return - } - var mk int32 - var mv float64 - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - d.mapElemValue() - mv = d.d.DecodeFloat64() - v[mk] = mv - } -} -func (d *Decoder) fastpathDecMapInt32BoolR(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[int32]bool) - if *vp == nil { - *vp = make(map[int32]bool, decInferLen(containerLen, d.h.MaxInitLen, 5)) - } - if containerLen != 0 { - fastpathTV.DecMapInt32BoolL(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.DecMapInt32BoolL(rv2i(rv).(map[int32]bool), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) DecMapInt32BoolX(vp *map[int32]bool, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[int32]bool, decInferLen(containerLen, d.h.MaxInitLen, 5)) - } - if containerLen != 0 { - f.DecMapInt32BoolL(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) DecMapInt32BoolL(v map[int32]bool, containerLen int, d *Decoder) { - if v == nil { - d.errorf("cannot decode into nil map[int32]bool given stream length: %v", containerLen) - return - } - var mk int32 - var mv bool - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) - d.mapElemValue() - mv = d.d.DecodeBool() - v[mk] = mv - } -} diff --git a/vendor/github.com/ugorji/go/codec/fast-path.go.tmpl b/vendor/github.com/ugorji/go/codec/fast-path.go.tmpl deleted file mode 100644 index 1a1cb95..0000000 --- a/vendor/github.com/ugorji/go/codec/fast-path.go.tmpl +++ /dev/null @@ -1,555 +0,0 @@ -// +build !notfastpath -// +build !codec.notfastpath - -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -// Code generated from fast-path.go.tmpl - DO NOT EDIT. - -package codec - -// Fast path functions try to create a fast path encode or decode implementation -// for common maps and slices. -// -// We define the functions and register them in this single file -// so as not to pollute the encode.go and decode.go, and create a dependency in there. -// This file can be omitted without causing a build failure. -// -// The advantage of fast paths is: -// - Many calls bypass reflection altogether -// -// Currently support -// - slice of all builtin types (numeric, bool, string, []byte) -// - maps of builtin types to builtin or interface{} type, EXCEPT FOR -// keys of type uintptr, int8/16/32, uint16/32, float32/64, bool, interface{} -// AND values of type type int8/16/32, uint16/32 -// This should provide adequate "typical" implementations. -// -// Note that fast track decode functions must handle values for which an address cannot be obtained. -// For example: -// m2 := map[string]int{} -// p2 := []interface{}{m2} -// // decoding into p2 will bomb if fast track functions do not treat like unaddressable. -// - -{{/* -fastpathEncMapStringUint64R (called by fastpath...switch) -EncMapStringUint64V (called by codecgen) - -fastpathEncSliceBoolR: (called by fastpath...switch) (checks f.ti.mbs and calls one of them below) -EncSliceBoolV (also called by codecgen) -EncAsMapSliceBoolV (delegate when mapbyslice=true) - -fastpathDecSliceIntfR (called by fastpath...switch) (calls Y or N below depending on if it can be updated) -DecSliceIntfX (called by codecgen) (calls Y below) -DecSliceIntfY (delegate when slice CAN be updated) -DecSliceIntfN (delegate when slice CANNOT be updated e.g. from array or non-addressable slice) - -fastpathDecMap...R (called by fastpath...switch) (calls L or X? below) -DecMap...X (called by codecgen) -DecMap...L (delegated to by both above) -*/ -}} - -import ( - "reflect" - "sort" -) - -const fastpathEnabled = true - -{{/* -const fastpathMapBySliceErrMsg = "mapBySlice requires even slice length, but got %v" -*/ -}} - -type fastpathT struct {} - -var fastpathTV fastpathT - -type fastpathE struct { - {{/* rtid uintptr */ -}} - rt reflect.Type - encfn func(*Encoder, *codecFnInfo, reflect.Value) - decfn func(*Decoder, *codecFnInfo, reflect.Value) -} - -type fastpathA [{{ .FastpathLen }}]fastpathE -type fastpathARtid [{{ .FastpathLen }}]uintptr - -var fastpathAv fastpathA -var fastpathAvRtid fastpathARtid - -type fastpathAslice struct{} - -func (fastpathAslice) Len() int { return {{ .FastpathLen }} } -func (fastpathAslice) Less(i, j int) bool { - return fastpathAvRtid[uint(i)] < fastpathAvRtid[uint(j)] -} -func (fastpathAslice) Swap(i, j int) { - fastpathAvRtid[uint(i)], fastpathAvRtid[uint(j)] = fastpathAvRtid[uint(j)], fastpathAvRtid[uint(i)] - fastpathAv[uint(i)], fastpathAv[uint(j)] = fastpathAv[uint(j)], fastpathAv[uint(i)] -} - -func fastpathAvIndex(rtid uintptr) int { - // use binary search to grab the index (adapted from sort/search.go) - // Note: we use goto (instead of for loop) so this can be inlined. - // h, i, j := 0, 0, {{ .FastpathLen }} - var h, i uint - var j uint = {{ .FastpathLen }} -LOOP: - if i < j { - h = (i + j) >> 1 // avoid overflow when computing h // h = i + (j-i)/2 - if fastpathAvRtid[h] < rtid { - i = h + 1 - } else { - j = h - } - goto LOOP - } - if i < {{ .FastpathLen }} && fastpathAvRtid[i] == rtid { - return int(i) - } - return -1 -} - - -// due to possible initialization loop error, make fastpath in an init() -func init() { - var i uint = 0 - fn := func(v interface{}, - fe func(*Encoder, *codecFnInfo, reflect.Value), - fd func(*Decoder, *codecFnInfo, reflect.Value)) { - xrt := reflect.TypeOf(v) - xptr := rt2id(xrt) - fastpathAvRtid[i] = xptr - fastpathAv[i] = fastpathE{xrt, fe, fd} - i++ - } - {{/* do not register []byte in fast-path */}} - {{range .Values}}{{if not .Primitive}}{{if not .MapKey -}} - fn([]{{ .Elem }}(nil), (*Encoder).{{ .MethodNamePfx "fastpathEnc" false }}R, (*Decoder).{{ .MethodNamePfx "fastpathDec" false }}R) - {{end}}{{end}}{{end}} - - {{range .Values}}{{if not .Primitive}}{{if .MapKey -}} - fn(map[{{ .MapKey }}]{{ .Elem }}(nil), (*Encoder).{{ .MethodNamePfx "fastpathEnc" false }}R, (*Decoder).{{ .MethodNamePfx "fastpathDec" false }}R) - {{end}}{{end}}{{end}} - - sort.Sort(fastpathAslice{}) -} - -// -- encode - -// -- -- fast path type switch -func fastpathEncodeTypeSwitch(iv interface{}, e *Encoder) bool { - switch v := iv.(type) { -{{range .Values}}{{if not .Primitive}}{{if not .MapKey -}} - case []{{ .Elem }}: - fastpathTV.{{ .MethodNamePfx "Enc" false }}V(v, e) - case *[]{{ .Elem }}: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.{{ .MethodNamePfx "Enc" false }}V(*v, e) - } -{{end}}{{end}}{{end -}} - -{{range .Values}}{{if not .Primitive}}{{if .MapKey -}} - case map[{{ .MapKey }}]{{ .Elem }}: - fastpathTV.{{ .MethodNamePfx "Enc" false }}V(v, e) - case *map[{{ .MapKey }}]{{ .Elem }}: - if *v == nil { - e.e.EncodeNil() - } else { - fastpathTV.{{ .MethodNamePfx "Enc" false }}V(*v, e) - } -{{end}}{{end}}{{end -}} - - default: - _ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4 - return false - } - return true -} - -// -- -- fast path functions -{{range .Values}}{{if not .Primitive}}{{if not .MapKey -}} -func (e *Encoder) {{ .MethodNamePfx "fastpathEnc" false }}R(f *codecFnInfo, rv reflect.Value) { - var v []{{ .Elem }} - if rv.Kind() == reflect.Array { - rvGetSlice4Array(rv, &v) - } else { - v = rv2i(rv).([]{{ .Elem }}) - } - if f.ti.mbs { - fastpathTV.{{ .MethodNamePfx "EncAsMap" false }}V(v, e) - } else { - fastpathTV.{{ .MethodNamePfx "Enc" false }}V(v, e) - } -} -func (fastpathT) {{ .MethodNamePfx "Enc" false }}V(v []{{ .Elem }}, e *Encoder) { - {{/* if v == nil { e.e.EncodeNil(); return } */ -}} - {{ if eq .Elem "uint8" "byte" -}} - e.e.EncodeStringBytesRaw(v) - {{ else -}} - e.arrayStart(len(v)) - for j := range v { - e.arrayElem() - {{ encmd .Elem "v[j]"}} - } - e.arrayEnd() - {{ end -}} -} -func (fastpathT) {{ .MethodNamePfx "EncAsMap" false }}V(v []{{ .Elem }}, e *Encoder) { - {{/* if v == nil { e.e.EncodeNil() } else */ -}} - e.haltOnMbsOddLen(len(v)) - {{/* - if len(v)&1 != 0 { // similar to &1==1 or %2 == 1 - e.errorf(fastpathMapBySliceErrMsg, len(v)) - } - */ -}} - e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) - for j := range v { - if j&1 == 0 { // if j%2 == 0 { - e.mapElemKey() - } else { - e.mapElemValue() - } - {{ encmd .Elem "v[j]"}} - } - e.mapEnd() -} -{{end}}{{end}}{{end -}} - -{{range .Values}}{{if not .Primitive}}{{if .MapKey -}} -func (e *Encoder) {{ .MethodNamePfx "fastpathEnc" false }}R(f *codecFnInfo, rv reflect.Value) { - fastpathTV.{{ .MethodNamePfx "Enc" false }}V(rv2i(rv).(map[{{ .MapKey }}]{{ .Elem }}), e) -} -func (fastpathT) {{ .MethodNamePfx "Enc" false }}V(v map[{{ .MapKey }}]{{ .Elem }}, e *Encoder) { - {{/* if v == nil { e.e.EncodeNil(); return } */ -}} - e.mapStart(len(v)) - if e.h.Canonical { {{/* need to figure out .NoCanonical */}} - {{if eq .MapKey "interface{}"}}{{/* out of band */ -}} - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesIntf, len(v)) - var i, l uint {{/* put loop variables outside. seems currently needed for better perf */}} - var vp *bytesIntf - for k2 := range v { - l = uint(len(mksv)) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesIntfSlice(v2)) - for j := range v2 { - e.mapElemKey() - e.asis(v2[j].v) - e.mapElemValue() - e.encode(v[v2[j].i]) - } {{else}}{{ $x := sorttype .MapKey true}}v2 := make([]{{ $x }}, len(v)) - var i uint - for k := range v { - v2[i] = {{if eq $x .MapKey}}k{{else}}{{ $x }}(k){{end}} - i++ - } - sort.Sort({{ sorttype .MapKey false}}(v2)) - for _, k2 := range v2 { - e.mapElemKey() - {{if eq .MapKey "string"}} e.e.EncodeString(k2) {{else}}{{ $y := printf "%s(k2)" .MapKey }}{{if eq $x .MapKey }}{{ $y = "k2" }}{{end}}{{ encmd .MapKey $y }}{{end}} - e.mapElemValue() - {{ $y := printf "v[%s(k2)]" .MapKey }}{{if eq $x .MapKey }}{{ $y = "v[k2]" }}{{end}}{{ encmd .Elem $y }} - } {{end}} - } else { - for k2, v2 := range v { - e.mapElemKey() - {{if eq .MapKey "string"}} e.e.EncodeString(k2) {{else}}{{ encmd .MapKey "k2"}}{{end}} - e.mapElemValue() - {{ encmd .Elem "v2"}} - } - } - e.mapEnd() -} -{{end}}{{end}}{{end -}} - -// -- decode - -// -- -- fast path type switch -func fastpathDecodeTypeSwitch(iv interface{}, d *Decoder) bool { - var changed bool - var containerLen int - switch v := iv.(type) { -{{range .Values}}{{if not .Primitive}}{{if not .MapKey -}} - case []{{ .Elem }}: - fastpathTV.{{ .MethodNamePfx "Dec" false }}N(v, d) - case *[]{{ .Elem }}: - var v2 []{{ .Elem }} - if v2, changed = fastpathTV.{{ .MethodNamePfx "Dec" false }}Y(*v, d); changed { - *v = v2 - } -{{end}}{{end}}{{end -}} -{{range .Values}}{{if not .Primitive}}{{if .MapKey }}{{/* -// maps only change if nil, and in that case, there's no point copying -*/ -}} - case map[{{ .MapKey }}]{{ .Elem }}: - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen != containerLenNil { - if containerLen != 0 { - fastpathTV.{{ .MethodNamePfx "Dec" false }}L(v, containerLen, d) - } - d.mapEnd() - } - case *map[{{ .MapKey }}]{{ .Elem }}: - {{/* - containerLen = d.mapStart(d.d.ReadMapStart()) - if containerLen == 0 { - d.mapEnd() - } else if containerLen == containerLenNil { - *v = nil - } else { - if *v == nil { - *v = make(map[{{ .MapKey }}]{{ .Elem }}, decInferLen(containerLen, d.h.MaxInitLen, {{ .Size }})) - } - fastpathTV.{{ .MethodNamePfx "Dec" false }}L(*v, containerLen, d) - } - // consider delegating fully to X - encoding *map is uncommon, so ok to pay small function call cost - */ -}} - fastpathTV.{{ .MethodNamePfx "Dec" false }}X(v, d) -{{end}}{{end}}{{end -}} - default: - _ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4 - return false - } - return true -} - -func fastpathDecodeSetZeroTypeSwitch(iv interface{}) bool { - switch v := iv.(type) { -{{range .Values}}{{if not .Primitive}}{{if not .MapKey -}} - case *[]{{ .Elem }}: - *v = nil -{{end}}{{end}}{{end}} -{{range .Values}}{{if not .Primitive}}{{if .MapKey -}} - case *map[{{ .MapKey }}]{{ .Elem }}: - *v = nil -{{end}}{{end}}{{end}} - default: - _ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4 - return false - } - return true -} - -// -- -- fast path functions -{{range .Values}}{{if not .Primitive}}{{if not .MapKey -}} -{{/* -Slices can change if they -- did not come from an array -- are addressable (from a ptr) -- are settable (e.g. contained in an interface{}) -*/}} -func (d *Decoder) {{ .MethodNamePfx "fastpathDec" false }}R(f *codecFnInfo, rv reflect.Value) { - {{/* - // seqTypeArray=true means that we are not getting a pointer, so no need to check that. - if f.seq != seqTypeArray && rv.Kind() == reflect.Ptr { - */ -}} - var v []{{ .Elem }} - switch rv.Kind() { - case reflect.Ptr: - vp := rv2i(rv).(*[]{{ .Elem }}) - var changed bool - if v, changed = fastpathTV.{{ .MethodNamePfx "Dec" false }}Y(*vp, d); changed { - *vp = v - } - case reflect.Array: - rvGetSlice4Array(rv, &v) - fastpathTV.{{ .MethodNamePfx "Dec" false }}N(v, d) - default: - fastpathTV.{{ .MethodNamePfx "Dec" false }}N(rv2i(rv).([]{{ .Elem }}), d) - } -} -func (f fastpathT) {{ .MethodNamePfx "Dec" false }}X(vp *[]{{ .Elem }}, d *Decoder) { - if v, changed := f.{{ .MethodNamePfx "Dec" false }}Y(*vp, d); changed { *vp = v } -} -func (fastpathT) {{ .MethodNamePfx "Dec" false }}Y(v []{{ .Elem }}, d *Decoder) (v2 []{{ .Elem }}, changed bool) { - {{ if eq .Elem "uint8" "byte" -}} - switch d.d.ContainerType() { - case valueTypeNil, valueTypeMap: - break - default: - v2 = d.decodeBytesInto(v[:len(v):len(v)]) - changed = !(len(v2) > 0 && len(v2) == len(v) && &v2[0] == &v[0]) // not same slice - return - } - {{ end -}} - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - if v == nil { return } - return nil, true - } - if containerLenS == 0 { - if v == nil { v = []{{ .Elem }}{} } else if len(v) != 0 { v = v[:0] } - slh.End() - return v, true - } - hasLen := containerLenS > 0 - var xlen int - if hasLen { - if containerLenS > cap(v) { - xlen = decInferLen(containerLenS, d.h.MaxInitLen, {{ .Size }}) - if xlen <= cap(v) { - v = v[:uint(xlen)] - } else { - v = make([]{{ .Elem }}, uint(xlen)) - } - changed = true - } else if containerLenS != len(v) { - v = v[:containerLenS] - changed = true - } - } - var j int - for j = 0; d.containerNext(j, containerLenS, hasLen); j++ { - if j == 0 && len(v) == 0 { // means hasLen == false - xlen = decInferLen(containerLenS, d.h.MaxInitLen, {{ .Size }}) {{/* xlen = decDefSliceCap */}} - v = make([]{{ .Elem }}, uint(xlen)) - changed = true - } - {{/* // if indefinite, etc, then expand the slice if necessary */ -}} - if j >= len(v) { - v = append(v, {{ zerocmd .Elem }}) - changed = true - } - slh.ElemContainerState(j) - {{ if eq .Elem "interface{}" }}d.decode(&v[uint(j)]){{ else }}v[uint(j)] = {{ decmd .Elem false }}{{ end }} - } - if j < len(v) { - v = v[:uint(j)] - changed = true - } else if j == 0 && v == nil { - v = []{{ .Elem }}{} - changed = true - } - slh.End() - return v, changed -} -func (fastpathT) {{ .MethodNamePfx "Dec" false }}N(v []{{ .Elem }}, d *Decoder) { - {{ if eq .Elem "uint8" "byte" -}} - switch d.d.ContainerType() { - case valueTypeNil, valueTypeMap: - break - default: - v2 := d.decodeBytesInto(v[:len(v):len(v)]) - if !(len(v2) > 0 && len(v2) == len(v) && &v2[0] == &v[0]) { // not same slice - copy(v, v2) - } - return - } - {{ end -}} - slh, containerLenS := d.decSliceHelperStart() - if slh.IsNil { - return - } - if containerLenS == 0 { - slh.End() - return - } - hasLen := containerLenS > 0 - for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { - {{/* // if indefinite, etc, then expand the slice if necessary */ -}} - if j >= len(v) { - slh.arrayCannotExpand(hasLen, len(v), j, containerLenS) - return - } - slh.ElemContainerState(j) - {{ if eq .Elem "interface{}" -}} - d.decode(&v[uint(j)]) - {{- else -}} - v[uint(j)] = {{ decmd .Elem false }} - {{- end }} - } - slh.End() -} -{{end}}{{end}}{{end -}} - -{{range .Values}}{{if not .Primitive}}{{if .MapKey -}} -{{/* -Maps can change if they are -- addressable (from a ptr) -- settable (e.g. contained in an interface{}) - -Also, these methods are called by decodeValue directly, after handling a TryNil. -Consequently, there's no need to check for containerLenNil here. -*/ -}} -func (d *Decoder) {{ .MethodNamePfx "fastpathDec" false }}R(f *codecFnInfo, rv reflect.Value) { - containerLen := d.mapStart(d.d.ReadMapStart()) - {{/* - if containerLen == containerLenNil { - if rv.Kind() == reflect.Ptr { - *(rv2i(rv).(*map[{{ .MapKey }}]{{ .Elem }})) = nil - } - return - } - */ -}} - if rv.Kind() == reflect.Ptr { - vp, _ := rv2i(rv).(*map[{{ .MapKey }}]{{ .Elem }}) - if *vp == nil { - *vp = make(map[{{ .MapKey }}]{{ .Elem }}, decInferLen(containerLen, d.h.MaxInitLen, {{ .Size }})) - } - if containerLen != 0 { - fastpathTV.{{ .MethodNamePfx "Dec" false }}L(*vp, containerLen, d) - } - } else if containerLen != 0 { - fastpathTV.{{ .MethodNamePfx "Dec" false }}L(rv2i(rv).(map[{{ .MapKey }}]{{ .Elem }}), containerLen, d) - } - d.mapEnd() -} -func (f fastpathT) {{ .MethodNamePfx "Dec" false }}X(vp *map[{{ .MapKey }}]{{ .Elem }}, d *Decoder) { - containerLen := d.mapStart(d.d.ReadMapStart()) - if containerLen == containerLenNil { - *vp = nil - } else { - if *vp == nil { - *vp = make(map[{{ .MapKey }}]{{ .Elem }}, decInferLen(containerLen, d.h.MaxInitLen, {{ .Size }})) - } - if containerLen != 0 { - f.{{ .MethodNamePfx "Dec" false }}L(*vp, containerLen, d) - } - d.mapEnd() - } -} -func (fastpathT) {{ .MethodNamePfx "Dec" false }}L(v map[{{ .MapKey }}]{{ .Elem }}, containerLen int, d *Decoder) { - {{/* No need to check if containerLen == containerLenNil, as that is checked by R and L above */ -}} - if v == nil { - d.errorf("cannot decode into nil map[{{ .MapKey }}]{{ .Elem }} given stream length: %v", containerLen) - {{/* d.swallowMapContents(containerLen) */ -}} - return - } - {{if eq .Elem "interface{}" }}mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset - {{else if eq .Elem "bytes" "[]byte" }}mapGet := v != nil && !d.h.MapValueReset - {{end -}} - var mk {{ .MapKey }} - var mv {{ .Elem }} - hasLen := containerLen > 0 - for j := 0; d.containerNext(j, containerLen, hasLen); j++ { - d.mapElemKey() - {{ if eq .MapKey "interface{}" }}mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.stringZC(bv) {{/* // maps cannot have []byte as key. switch to string. */}} - }{{ else }}mk = {{ decmd .MapKey true }}{{ end }} - d.mapElemValue() - {{ if eq .Elem "interface{}" "[]byte" "bytes" -}} - if mapGet { mv = v[mk] } else { mv = nil } - {{ end -}} - {{ if eq .Elem "interface{}" -}} - d.decode(&mv) - {{ else if eq .Elem "[]byte" "bytes" -}} - mv = d.decodeBytesInto(mv) - {{ else -}} - mv = {{ decmd .Elem false }} - {{ end -}} - v[mk] = mv - } -} -{{end}}{{end}}{{end}} diff --git a/vendor/github.com/ugorji/go/codec/fastpath.go.tmpl b/vendor/github.com/ugorji/go/codec/fastpath.go.tmpl new file mode 100644 index 0000000..db60ea8 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/fastpath.go.tmpl @@ -0,0 +1,134 @@ +//go:build !notfastpath && !codec.notfastpath + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +// Code generated from fastpath.go.tmpl - DO NOT EDIT. + +package codec + +// Fast path functions try to create a fast path encode or decode implementation +// for common maps and slices. +// +// We define the functions and register them in this single file +// so as not to pollute the encode.go and decode.go, and create a dependency in there. +// This file can be omitted without causing a build failure. +// +// The advantage of fast paths is: +// - Many calls bypass reflection altogether +// +// Currently support +// - slice of all builtin types (numeric, bool, string, []byte) +// - maps of builtin types to builtin or interface{} type, EXCEPT FOR +// keys of type uintptr, int8/16/32, uint16/32, float32/64, bool, interface{} +// AND values of type type int8/16/32, uint16/32 +// This should provide adequate "typical" implementations. +// +// Note that fast track decode functions must handle values for which an address cannot be obtained. +// For example: +// m2 := map[string]int{} +// p2 := []interface{}{m2} +// // decoding into p2 will bomb if fast track functions do not treat like unaddressable. +// + +{{/* +// ---------------- +fastpathEncMapR func (mapped to type id), routes to: +- ft.EncMapV + +fastpathEncSliceR func (mapped to type id), delegates to one of: +- ft.EncSliceV +- ft.EncAsMapSliceV (when mapbyslice ie f.ti.mbs=true) + +// ---------------- +fastpathDecSliceR func (mapped to type id), delegates to: +- ft.DecSliceIntfY (when slice CAN be updated) +- ft.DecSliceIntfN (when slice CANNOT be updated e.g. from array or non-addressable slice) + +fastpathDecMapR func (mapped to type id), routes to +- ft.DecMapL (handles ptr which is changeable, and non-pointer which cannot be made if nil) + +// ---------------- +NOTE: +- fastpath typeswitch directly calls the secondary methods for builtin maps/slices with appropriate nil handling: + - except EncAsMapSliceV which only applies to wrapper types not those in the switch +- fastpathEncXXX functions mapped to type ID MUST do nil-checks during encode + - they are only called by decodeValue/encodeValue or other code (same way kMap et al are called) +*/ -}} + +import ( + "reflect" + "sort" + "slices" +) + +const fastpathEnabled = true + +{{/* +const fastpathMapBySliceErrMsg = "mapBySlice requires even slice length, but got %v" +*/ -}} + +type fastpathARtid [{{ .FastpathLen }}]uintptr + +type fastpathRtRtid struct { + rtid uintptr + rt reflect.Type +} +type fastpathARtRtid [{{ .FastpathLen }}]fastpathRtRtid + +var ( + fastpathAvRtidArr fastpathARtid + fastpathAvRtRtidArr fastpathARtRtid + fastpathAvRtid = fastpathAvRtidArr[:] + fastpathAvRtRtid = fastpathAvRtRtidArr[:] +) + +func fastpathAvIndex(rtid uintptr) (i uint, ok bool) { + return searchRtids(fastpathAvRtid, rtid) +} + +func init() { + var i uint = 0 + fn := func(v interface{}) { + xrt := reflect.TypeOf(v) + xrtid := rt2id(xrt) + xptrtid := rt2id(reflect.PointerTo(xrt)) + {{- /* only the base slice/map rtid is put in fastpathAvIndex, since we only handle slices/map/array */}} + fastpathAvRtid[i] = xrtid + fastpathAvRtRtid[i] = fastpathRtRtid{ rtid: xrtid, rt: xrt } + {{- /* fastpath type switches however handle slices/map/array, and pointers to them */}} + encBuiltinRtids = append(encBuiltinRtids, xrtid, xptrtid) + decBuiltinRtids = append(decBuiltinRtids, xrtid, xptrtid) + i++ + } + {{/* do not register []byte in fastpath */}} + {{range .Values}}{{if not .Primitive}}{{if not .MapKey -}} + fn([]{{ .Elem }}(nil)) + {{end}}{{end}}{{end}} + + {{range .Values}}{{if not .Primitive}}{{if .MapKey -}} + fn(map[{{ .MapKey }}]{{ .Elem }}(nil)) + {{end}}{{end}}{{end}} + + sort.Slice(fastpathAvRtid, func(i, j int) bool { return fastpathAvRtid[i] < fastpathAvRtid[j] }) + sort.Slice(fastpathAvRtRtid, func(i, j int) bool { return fastpathAvRtRtid[i].rtid < fastpathAvRtRtid[j].rtid }) + slices.Sort(encBuiltinRtids) + slices.Sort(decBuiltinRtids) +} + +func fastpathDecodeSetZeroTypeSwitch(iv interface{}) bool { + switch v := iv.(type) { +{{range .Values}}{{if not .Primitive}}{{if not .MapKey -}} + case *[]{{ .Elem }}: + *v = nil +{{end}}{{end}}{{end}} +{{range .Values}}{{if not .Primitive}}{{if .MapKey -}} + case *map[{{ .MapKey }}]{{ .Elem }}: + *v = nil +{{end}}{{end}}{{end}} + default: + _ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4 + return false + } + return true +} diff --git a/vendor/github.com/ugorji/go/codec/fastpath.notmono.go.tmpl b/vendor/github.com/ugorji/go/codec/fastpath.notmono.go.tmpl new file mode 100644 index 0000000..a85a0d2 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/fastpath.notmono.go.tmpl @@ -0,0 +1,525 @@ +//go:build !notfastpath && !codec.notfastpath && (notmono || codec.notmono) + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +// Code generated from fastpath.notmono.go.tmpl - DO NOT EDIT. + +package codec + +import ( + "reflect" + "sort" + "slices" +) + +type fastpathE[T encDriver] struct { + rtid uintptr + rt reflect.Type + encfn func(*encoder[T], *encFnInfo, reflect.Value) +} +type fastpathD[T decDriver] struct { + rtid uintptr + rt reflect.Type + decfn func(*decoder[T], *decFnInfo, reflect.Value) +} +type fastpathEs[T encDriver] [{{ .FastpathLen }}]fastpathE[T] +type fastpathDs[T decDriver] [{{ .FastpathLen }}]fastpathD[T] + +type fastpathET[T encDriver] struct{} +type fastpathDT[T decDriver] struct{} + +func (helperEncDriver[T]) fastpathEList() *fastpathEs[T] { + var i uint = 0 + var s fastpathEs[T] + fn := func(v interface{}, fe func(*encoder[T], *encFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathE[T]{rt2id(xrt), xrt, fe} + i++ + } + {{/* do not register []byte in fastpath */}} + {{range .Values}}{{if not .Primitive}}{{if not .MapKey -}} + fn([]{{ .Elem }}(nil), (*encoder[T]).{{ .MethodNamePfx "fastpathEnc" false }}R) + {{end}}{{end}}{{end}} + + {{range .Values}}{{if not .Primitive}}{{if .MapKey -}} + fn(map[{{ .MapKey }}]{{ .Elem }}(nil), (*encoder[T]).{{ .MethodNamePfx "fastpathEnc" false }}R) + {{end}}{{end}}{{end}} + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperDecDriver[T]) fastpathDList() *fastpathDs[T] { + var i uint = 0 + var s fastpathDs[T] + fn := func(v interface{}, fd func(*decoder[T], *decFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathD[T]{rt2id(xrt), xrt, fd} + i++ + } + {{/* do not register []byte in fastpath */}} + {{range .Values}}{{if not .Primitive}}{{if not .MapKey -}} + fn([]{{ .Elem }}(nil), (*decoder[T]).{{ .MethodNamePfx "fastpathDec" false }}R) + {{end}}{{end}}{{end}} + + {{range .Values}}{{if not .Primitive}}{{if .MapKey -}} + fn(map[{{ .MapKey }}]{{ .Elem }}(nil), (*decoder[T]).{{ .MethodNamePfx "fastpathDec" false }}R) + {{end}}{{end}}{{end}} + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +// -- encode + +// -- -- fast path type switch +func (helperEncDriver[T]) fastpathEncodeTypeSwitch(iv interface{}, e *encoder[T]) bool { + var ft fastpathET[T] + switch v := iv.(type) { + {{range .Values}}{{if not .Primitive}}{{if not .MapKey -}} + case []{{ .Elem }}: + if v == nil { e.e.writeNilArray() } else { ft.{{ .MethodNamePfx "Enc" false }}V(v, e) } +{{end}}{{end}}{{end -}} + +{{range .Values}}{{if not .Primitive}}{{if .MapKey -}} + case map[{{ .MapKey }}]{{ .Elem }}: + if v == nil { e.e.writeNilMap() } else { ft.{{ .MethodNamePfx "Enc" false }}V(v, e) } +{{end}}{{end}}{{end -}} + + default: + _ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4 + return false + } + return true +} + +// -- -- fast path functions +{{range .Values}}{{if not .Primitive}}{{if not .MapKey -}} +func (e *encoder[T]) {{ .MethodNamePfx "fastpathEnc" false }}R(f *encFnInfo, rv reflect.Value) { + var ft fastpathET[T] + var v []{{ .Elem }} + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]{{ .Elem }}) + } + if f.ti.mbs { + ft.{{ .MethodNamePfx "EncAsMap" false }}V(v, e) + return + } + ft.{{ .MethodNamePfx "Enc" false }}V(v, e) +} +func (fastpathET[T]) {{ .MethodNamePfx "Enc" false }}V(v []{{ .Elem }}, e *encoder[T]) { + {{ if eq .Elem "uint8" "byte" -}} + e.e.EncodeStringBytesRaw(v) + {{ else -}} + if len(v) == 0 { + e.c = 0; e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem; e.e.WriteArrayElem(j == 0) + {{ encmd .Elem "v[j]"}} + } + e.c = 0; e.e.WriteArrayEnd() + {{ end -}} +} +func (fastpathET[T]) {{ .MethodNamePfx "EncAsMap" false }}V(v []{{ .Elem }}, e *encoder[T]) { + if len(v) == 0 { + e.c = 0; e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2) + for j := range v { + if j&1 == 0 { // if j%2 == 0 { + e.c = containerMapKey; e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + {{ encmd .Elem "v[j]"}} + } + e.c = 0; e.e.WriteMapEnd() +} + +{{end}}{{end}}{{end -}} + +{{range .Values}}{{if not .Primitive}}{{if .MapKey -}} +func (e *encoder[T]) {{ .MethodNamePfx "fastpathEnc" false }}R(f *encFnInfo, rv reflect.Value) { + {{/* var ft fastpathET[T] + ft.{{ .MethodNamePfx "Enc" false }}V(rv2i(rv).(map[{{ .MapKey }}]{{ .Elem }}), e) */ -}} + fastpathET[T]{}.{{ .MethodNamePfx "Enc" false }}V(rv2i(rv).(map[{{ .MapKey }}]{{ .Elem }}), e) +} +func (fastpathET[T]) {{ .MethodNamePfx "Enc" false }}V(v map[{{ .MapKey }}]{{ .Elem }}, e *encoder[T]) { + {{/* if v == nil { e.e.EncodeNil(); return } */ -}} + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { {{/* need to figure out .NoCanonical */}} + {{if eq .MapKey "interface{}"}}{{/* out of band */ -}} + var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding + e2 := NewEncoderBytes(&mksv, e.hh) + v2 := make([]bytesIntf, len(v)) + var l uint {{/* put loop variables outside. seems currently needed for better perf */}} + var vp *bytesIntf + for k2 := range v { + l = uint(len(mksv)) + e2.MustEncode(k2) + vp = &v2[i] + vp.v = mksv[l:] + vp.i = k2 + i++ + } + slices.SortFunc(v2, cmpBytesIntf) + for j := range v2 { + e.c = containerMapKey; e.e.WriteMapElemKey(j == 0) + e.asis(v2[j].v) + e.mapElemValue() + e.encode(v[v2[j].i]) + } {{else}}{{ $x := sorttype .MapKey true}}v2 := make([]{{ $x }}, len(v)) + for k := range v { + v2[i] = {{if eq $x .MapKey}}k{{else}}{{ $x }}(k){{end}} + i++ + } + slices.Sort(v2) + {{/* // sort.Sort({{ sorttype .MapKey false}}(v2)) */ -}} + for i, k2 := range v2 { + e.c = containerMapKey; e.e.WriteMapElemKey(i == 0) + {{if eq .MapKey "string"}} e.e.EncodeString(k2) {{else}}{{ $y := printf "%s(k2)" .MapKey }}{{if eq $x .MapKey }}{{ $y = "k2" }}{{end}}{{ encmd .MapKey $y }}{{end}} + e.mapElemValue() + {{ $y := printf "v[%s(k2)]" .MapKey }}{{if eq $x .MapKey }}{{ $y = "v[k2]" }}{{end}}{{ encmd .Elem $y }} + } {{end}} + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey; e.e.WriteMapElemKey(i == 0) + {{if eq .MapKey "string"}} e.e.EncodeString(k2) {{else}}{{ encmd .MapKey "k2"}}{{end}} + e.mapElemValue() + {{ encmd .Elem "v2"}} + i++ + } + } + e.c = 0; e.e.WriteMapEnd() +} +{{end}}{{end}}{{end -}} + +// -- decode + +// -- -- fast path type switch +func (helperDecDriver[T]) fastpathDecodeTypeSwitch(iv interface{}, d *decoder[T]) bool { + var ft fastpathDT[T] + var changed bool + var containerLen int + switch v := iv.(type) { +{{range .Values}}{{if not .Primitive}}{{if not .MapKey -}} + case []{{ .Elem }}: + ft.{{ .MethodNamePfx "Dec" false }}N(v, d) + case *[]{{ .Elem }}: + var v2 []{{ .Elem }} + if v2, changed = ft.{{ .MethodNamePfx "Dec" false }}Y(*v, d); changed { + *v = v2 + } +{{end}}{{end}}{{end -}} +{{range .Values}}{{if not .Primitive}}{{if .MapKey }}{{/* +// maps only change if nil, and in that case, there's no point copying +*/ -}} + case map[{{ .MapKey }}]{{ .Elem }}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.{{ .MethodNamePfx "Dec" false }}L(v, containerLen, d) + } + d.mapEnd() + } + case *map[{{ .MapKey }}]{{ .Elem }}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[{{ .MapKey }}]{{ .Elem }}, decInferLen(containerLen, d.maxInitLen(), {{ .Size }})) + } + if containerLen != 0 { + ft.{{ .MethodNamePfx "Dec" false }}L(*v, containerLen, d) + } + d.mapEnd() + } +{{end}}{{end}}{{end -}} + default: + _ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4 + return false + } + return true +} + +// -- -- fast path functions +{{range .Values}}{{if not .Primitive}}{{if not .MapKey -}} +{{/* +Slices can change if they +- did not come from an array +- are addressable (from a ptr) +- are settable (e.g. contained in an interface{}) +*/}} +func (d *decoder[T]) {{ .MethodNamePfx "fastpathDec" false }}R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + {{/* + // seqTypeArray=true means that we are not getting a pointer, so no need to check that. + if f.seq != seqTypeArray && rv.Kind() == reflect.Ptr { + */ -}} + switch rv.Kind() { + case reflect.Ptr: {{- /* this block is called for types that wrap a fastpath type e.g. wrapSliceUint64 */}} + v := rv2i(rv).(*[]{{ .Elem }}) + if vv, changed := ft.{{ .MethodNamePfx "Dec" false }}Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []{{ .Elem }} + rvGetSlice4Array(rv, &v) + ft.{{ .MethodNamePfx "Dec" false }}N(v, d) + default: + ft.{{ .MethodNamePfx "Dec" false }}N(rv2i(rv).([]{{ .Elem }}), d) + } +} +func (fastpathDT[T]) {{ .MethodNamePfx "Dec" false }}Y(v []{{ .Elem }}, d *decoder[T]) (v2 []{{ .Elem }}, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + {{ if eq .Elem "uint8" "byte" -}} + if ctyp != valueTypeMap { + var dbi dBytesIntoState + v2, dbi = d.decodeBytesInto(v[:len(v):len(v)], false) + return v2, dbi != dBytesIntoParamOut + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + {{ else -}} + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + {{ end -}} + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []{{ .Elem }}) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), {{ .Size }})); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]{{ .Elem }}, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + {{ if eq .Elem "uint8" "byte" }}{{ else -}} + if isArray { d.arrayElem(j == 0) } else + {{ end -}} + if j&1 == 0 { d.mapElemKey(j == 0) } else { d.mapElemValue() } + if j >= len(v) { {{- /* // if indefinite, json, etc, then expand the slice (if necessary) */}} + fnv(append(v, {{ zerocmd .Elem }})) + } + {{ if eq .Elem "interface{}" }}d.decode(&v[uint(j)]){{ else }}v[uint(j)] = {{ decmd .Elem false }}{{ end }} + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]{{ .Elem }}{}) + } + {{ if eq .Elem "uint8" "byte" -}} + d.mapEnd() + {{ else -}} + if isArray { d.arrayEnd() } else { d.mapEnd() } + {{ end -}} + return v, changed +} +func (fastpathDT[T]) {{ .MethodNamePfx "Dec" false }}N(v []{{ .Elem }}, d *decoder[T]) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + {{ if eq .Elem "uint8" "byte" -}} + if ctyp != valueTypeMap { + d.decodeBytesInto(v[:len(v):len(v)], true) + return + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + {{ else -}} + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + {{ end -}} + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + {{/* // if indefinite, etc, then expand the slice if necessary */ -}} + {{ if not (eq .Elem "uint8" "byte") -}} + if isArray { d.arrayElem(j == 0) } else + {{ end -}} + if j&1 == 0 { d.mapElemKey(j == 0) } else { d.mapElemValue() } + if j < len(v) { + {{ if eq .Elem "interface{}" }}d.decode(&v[uint(j)]){{ else }}v[uint(j)] = {{ decmd .Elem false }}{{ end }} + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + {{ if eq .Elem "uint8" "byte" -}} + d.mapEnd() + {{ else -}} + if isArray { d.arrayEnd() } else { d.mapEnd() } + {{ end -}} +} +{{end}}{{end}}{{end -}} + +{{range .Values}}{{if not .Primitive}}{{if .MapKey -}} +{{/* +Maps can change if they are +- addressable (from a ptr) +- settable (e.g. contained in an interface{}) +*/ -}} +func (d *decoder[T]) {{ .MethodNamePfx "fastpathDec" false }}R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDT[T] + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { {{- /* this block is called for types that wrap a fastpath type e.g. wrapMapStringUint64 */}} + vp, _ := rv2i(rv).(*map[{{ .MapKey }}]{{ .Elem }}) + if *vp == nil { + *vp = make(map[{{ .MapKey }}]{{ .Elem }}, decInferLen(containerLen, d.maxInitLen(), {{ .Size }})) + } + if containerLen != 0 { + ft.{{ .MethodNamePfx "Dec" false }}L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.{{ .MethodNamePfx "Dec" false }}L(rv2i(rv).(map[{{ .MapKey }}]{{ .Elem }}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDT[T]) {{ .MethodNamePfx "Dec" false }}L(v map[{{ .MapKey }}]{{ .Elem }}, containerLen int, d *decoder[T]) { + if v == nil { + halt.errorInt("cannot decode into nil map[{{ .MapKey }}]{{ .Elem }} given stream length: ", int64(containerLen)) + {{/* d.swallowMapContents(containerLen); return */ -}} + } + {{if eq .MapKey "interface{}" -}} + var mk {{ .MapKey }} + {{end -}} + {{ if eq .Elem "interface{}" "[]byte" "bytes" -}} + var mv {{ .Elem }} + mapGet := !d.h.MapValueReset + {{- if eq .Elem "interface{}" -}} + && !d.h.InterfaceReset + {{- end}} + {{end -}} + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + {{ if eq .MapKey "interface{}" -}} + mk = nil + d.decode(&mk) + if bv, bok := mk.([]byte); bok { + mk = d.detach2Str(bv) {{/* // maps cannot have []byte as key. switch to string. */}} + }{{ else }}mk := {{ decmd .MapKey true }}{{ end }} + d.mapElemValue() + {{ if eq .Elem "interface{}" "[]byte" "bytes" -}} + if mapGet { mv = v[mk] } else { mv = nil } + {{ end -}} + {{ if eq .Elem "interface{}" -}} + d.decode(&mv) + v[mk] = mv + {{ else if eq .Elem "[]byte" "bytes" -}} + v[mk], _ = d.decodeBytesInto(mv, false) + {{ else -}} + v[mk] = {{ decmd .Elem false }} + {{ end -}} + } +} +{{end}}{{end}}{{end}} + +{{- /* + +// -- -- fast path type switch +func (helperEncDriver[T]) fastpathEncodeTypeSwitch(iv interface{}, e *encoder[T]) bool { + var ft fastpathET[T] + switch v := iv.(type) { + {{range .Values}}{{if not .Primitive}}{{if not .MapKey -}} + case []{{ .Elem }}: + if v != nil { + ft.{{ .MethodNamePfx "Enc" false }}V(v, e) + } else if e.h.NilCollectionToZeroLength { + e.e.WriteArrayEmpty() + } else { + e.e.EncodeNil() + } + case *[]{{ .Elem }}: + if *v != nil { + ft.{{ .MethodNamePfx "Enc" false }}V(*v, e) + } else if e.h.NilCollectionToZeroLength { + e.e.WriteArrayEmpty() + } else { + e.e.EncodeNil() + } +{{end}}{{end}}{{end -}} + +{{range .Values}}{{if not .Primitive}}{{if .MapKey -}} + case map[{{ .MapKey }}]{{ .Elem }}: + if v != nil { + ft.{{ .MethodNamePfx "Enc" false }}V(v, e) + } else if e.h.NilCollectionToZeroLength { + e.e.WriteMapEmpty() + } else { + e.e.EncodeNil() + } + case *map[{{ .MapKey }}]{{ .Elem }}: + if *v != nil { + ft.{{ .MethodNamePfx "Enc" false }}V(*v, e) + } else if e.h.NilCollectionToZeroLength { + e.e.WriteMapEmpty() + } else { + e.e.EncodeNil() + } +{{end}}{{end}}{{end -}} + + default: + _ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4 + return false + } + return true +} + +// used within codecgen, which is no longer supported +func (f fastpathDT[T]) {{ .MethodNamePfx "Dec" false }}X(vp *[]{{ .Elem }}, d *decoder[T]) { + if v, changed := f.{{ .MethodNamePfx "Dec" false }}Y(*vp, d); changed { *vp = v } +} + +func (f fastpathDT[T]) {{ .MethodNamePfx "Dec" false }}X(vp *map[{{ .MapKey }}]{{ .Elem }}, d *decoder[T]) { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == containerLenNil { + *vp = nil + return + } + if *vp == nil { + *vp = make(map[{{ .MapKey }}]{{ .Elem }}, decInferLen(containerLen, d.maxInitLen(), {{ .Size }})) + } + if containerLen != 0 { + f.{{ .MethodNamePfx "Dec" false }}L(*vp, containerLen, d) + } + d.mapEnd() +} + +*/ -}} diff --git a/vendor/github.com/ugorji/go/codec/gen-dec-array.go.tmpl b/vendor/github.com/ugorji/go/codec/gen-dec-array.go.tmpl deleted file mode 100644 index 5e119e7..0000000 --- a/vendor/github.com/ugorji/go/codec/gen-dec-array.go.tmpl +++ /dev/null @@ -1,90 +0,0 @@ -{{var "v"}} := {{if not isArray}}*{{end}}{{ .Varname }} -{{var "h"}}, {{var "l"}} := z.DecSliceHelperStart() {{/* // helper, containerLenS */}} -{{if not isArray -}} -var {{var "c"}} bool {{/* // changed */}} -_ = {{var "c"}} -if {{var "h"}}.IsNil { - if {{var "v"}} != nil { - {{var "v"}} = nil - {{var "c"}} = true - } -} else {{end -}} -if {{var "l"}} == 0 { - {{if isSlice -}} - if {{var "v"}} == nil { - {{var "v"}} = []{{ .Typ }}{} - {{var "c"}} = true - } else if len({{var "v"}}) != 0 { - {{var "v"}} = {{var "v"}}[:0] - {{var "c"}} = true - } {{else if isChan }}if {{var "v"}} == nil { - {{var "v"}} = make({{ .CTyp }}, 0) - {{var "c"}} = true - } - {{end -}} -} else { - {{var "hl"}} := {{var "l"}} > 0 - var {{var "rl"}} int - _ = {{var "rl"}} - {{if isSlice }} if {{var "hl"}} { - if {{var "l"}} > cap({{var "v"}}) { - {{var "rl"}} = z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }}) - if {{var "rl"}} <= cap({{var "v"}}) { - {{var "v"}} = {{var "v"}}[:{{var "rl"}}] - } else { - {{var "v"}} = make([]{{ .Typ }}, {{var "rl"}}) - } - {{var "c"}} = true - } else if {{var "l"}} != len({{var "v"}}) { - {{var "v"}} = {{var "v"}}[:{{var "l"}}] - {{var "c"}} = true - } - } - {{end -}} - var {{var "j"}} int - {{/* // var {{var "dn"}} bool */ -}} - for {{var "j"}} = 0; z.DecContainerNext({{var "j"}}, {{var "l"}}, {{var "hl"}}); {{var "j"}}++ { - {{if not isArray}} if {{var "j"}} == 0 && {{var "v"}} == nil { - if {{var "hl"}} { - {{var "rl"}} = z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }}) - } else { - {{var "rl"}} = {{if isSlice}}8{{else if isChan}}64{{end}} - } - {{var "v"}} = make({{if isSlice}}[]{{ .Typ }}{{else if isChan}}{{.CTyp}}{{end}}, {{var "rl"}}) - {{var "c"}} = true - } - {{end -}} - {{var "h"}}.ElemContainerState({{var "j"}}) - {{/* {{var "dn"}} = r.TryDecodeAsNil() */}}{{/* commented out, as decLineVar handles this already each time */ -}} - {{if isChan}}{{ $x := printf "%[1]vvcx%[2]v" .TempVar .Rand }}var {{$x}} {{ .Typ }} - {{ decLineVar $x -}} - {{var "v"}} <- {{ $x }} - {{else}}{{/* // if indefinite, etc, then expand the slice if necessary */ -}} - var {{var "db"}} bool - if {{var "j"}} >= len({{var "v"}}) { - {{if isSlice }} {{var "v"}} = append({{var "v"}}, {{ zero }}) - {{var "c"}} = true - {{else}} z.DecArrayCannotExpand(len(v), {{var "j"}}+1); {{var "db"}} = true - {{end -}} - } - if {{var "db"}} { - z.DecSwallow() - } else { - {{ $x := printf "%[1]vv%[2]v[%[1]vj%[2]v]" .TempVar .Rand }}{{ decLineVar $x -}} - } - {{end -}} - } - {{if isSlice}} if {{var "j"}} < len({{var "v"}}) { - {{var "v"}} = {{var "v"}}[:{{var "j"}}] - {{var "c"}} = true - } else if {{var "j"}} == 0 && {{var "v"}} == nil { - {{var "v"}} = []{{ .Typ }}{} - {{var "c"}} = true - } - {{end -}} -} -{{var "h"}}.End() -{{if not isArray }}if {{var "c"}} { - *{{ .Varname }} = {{var "v"}} -} -{{end -}} diff --git a/vendor/github.com/ugorji/go/codec/gen-dec-map.go.tmpl b/vendor/github.com/ugorji/go/codec/gen-dec-map.go.tmpl deleted file mode 100644 index b32ade2..0000000 --- a/vendor/github.com/ugorji/go/codec/gen-dec-map.go.tmpl +++ /dev/null @@ -1,58 +0,0 @@ -{{var "v"}} := *{{ .Varname }} -{{var "l"}} := z.DecReadMapStart() -if {{var "l"}} == codecSelferDecContainerLenNil{{xs}} { - *{{ .Varname }} = nil -} else { -if {{var "v"}} == nil { - {{var "rl"}} := z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }}) - {{var "v"}} = make(map[{{ .KTyp }}]{{ .Typ }}, {{var "rl"}}) - *{{ .Varname }} = {{var "v"}} -} -{{ $mk := var "mk" -}} -var {{ $mk }} {{ .KTyp }} -var {{var "mv"}} {{ .Typ }} -var {{var "mg"}}, {{var "mdn"}} {{if decElemKindPtr}}, {{var "ms"}}, {{var "mok"}}{{end}} bool -if z.DecBasicHandle().MapValueReset { - {{if decElemKindPtr}}{{var "mg"}} = true - {{else if decElemKindIntf}}if !z.DecBasicHandle().InterfaceReset { {{var "mg"}} = true } - {{else if not decElemKindImmutable}}{{var "mg"}} = true - {{end}} } -if {{var "l"}} != 0 { - {{var "hl"}} := {{var "l"}} > 0 - for {{var "j"}} := 0; z.DecContainerNext({{var "j"}}, {{var "l"}}, {{var "hl"}}); {{var "j"}}++ { - z.DecReadMapElemKey() - {{ if eq .KTyp "string" -}} - {{ decLineVarK $mk -}}{{- /* decLineVarKStrZC $mk */ -}} - {{ else -}} - {{ decLineVarK $mk -}} - {{ end -}} - {{ if eq .KTyp "interface{}" }}{{/* // special case if a byte array. */ -}} - if {{var "bv"}}, {{var "bok"}} := {{var "mk"}}.([]byte); {{var "bok"}} { - {{var "mk"}} = z.DecStringZC({{var "bv"}}) - } - {{ end -}} - {{if decElemKindPtr -}} - {{var "ms"}} = true - {{end -}} - if {{var "mg"}} { - {{if decElemKindPtr -}} - {{var "mv"}}, {{var "mok"}} = {{var "v"}}[{{ $mk }}] - if {{var "mok"}} { - {{var "ms"}} = false - } - {{else -}} - {{var "mv"}} = {{var "v"}}[{{ $mk }}] - {{end -}} - } {{if not decElemKindImmutable}}else { {{var "mv"}} = {{decElemZero}} }{{end}} - z.DecReadMapElemValue() - {{var "mdn"}} = false - {{ $x := printf "%vmv%v" .TempVar .Rand }}{{ $y := printf "%vmdn%v" .TempVar .Rand }}{{ decLineVar $x $y -}} - if {{var "mdn"}} { - {{var "v"}}[{{ $mk }}] = {{decElemZero}} - } else {{if decElemKindPtr}} if {{var "ms"}} {{end}} { - {{var "v"}}[{{ $mk }}] = {{var "mv"}} - } -} -} // else len==0: leave as-is (do not clear map entries) -z.DecReadMapEnd() -} diff --git a/vendor/github.com/ugorji/go/codec/gen-enc-chan.go.tmpl b/vendor/github.com/ugorji/go/codec/gen-enc-chan.go.tmpl deleted file mode 100644 index 4249588..0000000 --- a/vendor/github.com/ugorji/go/codec/gen-enc-chan.go.tmpl +++ /dev/null @@ -1,27 +0,0 @@ -{{.Label}}: -switch timeout{{.Sfx}} := z.EncBasicHandle().ChanRecvTimeout; { -case timeout{{.Sfx}} == 0: // only consume available - for { - select { - case b{{.Sfx}} := <-{{.Chan}}: - {{ .Slice }} = append({{.Slice}}, b{{.Sfx}}) - default: - break {{.Label}} - } - } -case timeout{{.Sfx}} > 0: // consume until timeout - tt{{.Sfx}} := time.NewTimer(timeout{{.Sfx}}) - for { - select { - case b{{.Sfx}} := <-{{.Chan}}: - {{.Slice}} = append({{.Slice}}, b{{.Sfx}}) - case <-tt{{.Sfx}}.C: - // close(tt.C) - break {{.Label}} - } - } -default: // consume until close - for b{{.Sfx}} := range {{.Chan}} { - {{.Slice}} = append({{.Slice}}, b{{.Sfx}}) - } -} diff --git a/vendor/github.com/ugorji/go/codec/gen-helper.generated.go b/vendor/github.com/ugorji/go/codec/gen-helper.generated.go deleted file mode 100644 index 9a145f1..0000000 --- a/vendor/github.com/ugorji/go/codec/gen-helper.generated.go +++ /dev/null @@ -1,294 +0,0 @@ -// comment this out // + build ignore - -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -// Code generated from gen-helper.go.tmpl - DO NOT EDIT. - -package codec - -import ( - "encoding" - "reflect" -) - -// GenVersion is the current version of codecgen. -const GenVersion = 28 - -// This file is used to generate helper code for codecgen. -// The values here i.e. genHelper(En|De)coder are not to be used directly by -// library users. They WILL change continuously and without notice. - -// GenHelperEncoder is exported so that it can be used externally by codecgen. -// -// Library users: DO NOT USE IT DIRECTLY or INDIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE. -func GenHelper() (g genHelper) { return } - -type genHelper struct{} - -func (genHelper) Encoder(e *Encoder) (ge genHelperEncoder, ee genHelperEncDriver) { - ge = genHelperEncoder{e: e} - ee = genHelperEncDriver{encDriver: e.e} - return -} - -func (genHelper) Decoder(d *Decoder) (gd genHelperDecoder, dd genHelperDecDriver) { - gd = genHelperDecoder{d: d} - dd = genHelperDecDriver{decDriver: d.d} - return -} - -type genHelperEncDriver struct { - encDriver -} - -type genHelperDecDriver struct { - decDriver -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -type genHelperEncoder struct { - M mustHdl - F fastpathT - e *Encoder -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -type genHelperDecoder struct { - C checkOverflow - F fastpathT - d *Decoder -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncBasicHandle() *BasicHandle { - return f.e.h -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWr() *encWr { - return f.e.w() -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncBinary() bool { - return f.e.be // f.e.hh.isBinaryEncoding() -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) IsJSONHandle() bool { - return f.e.js -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncFallback(iv interface{}) { - // f.e.encodeI(iv, false, false) - f.e.encodeValue(reflect.ValueOf(iv), nil) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncTextMarshal(iv encoding.TextMarshaler) { - bs, fnerr := iv.MarshalText() - f.e.marshalUtf8(bs, fnerr) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncJSONMarshal(iv jsonMarshaler) { - bs, fnerr := iv.MarshalJSON() - f.e.marshalAsis(bs, fnerr) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncBinaryMarshal(iv encoding.BinaryMarshaler) { - bs, fnerr := iv.MarshalBinary() - f.e.marshalRaw(bs, fnerr) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncRaw(iv Raw) { f.e.rawBytes(iv) } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) Extension(v interface{}) (xfn *extTypeTagFn) { - return f.e.h.getExtForI(v) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncExtension(v interface{}, xfFn *extTypeTagFn) { - f.e.e.EncodeExt(v, xfFn.rt, xfFn.tag, xfFn.ext) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWriteMapStart(length int) { f.e.mapStart(length) } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWriteMapEnd() { f.e.mapEnd() } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWriteArrayStart(length int) { f.e.arrayStart(length) } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWriteArrayEnd() { f.e.arrayEnd() } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWriteArrayElem() { f.e.arrayElem() } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWriteMapElemKey() { f.e.mapElemKey() } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWriteMapElemValue() { f.e.mapElemValue() } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncEncodeComplex64(v complex64) { f.e.encodeComplex64(v) } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncEncodeComplex128(v complex128) { f.e.encodeComplex128(v) } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncEncode(v interface{}) { f.e.encode(v) } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncFnGivenAddr(v interface{}) *codecFn { - return f.e.h.fn(reflect.TypeOf(v).Elem()) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncEncodeNumBoolStrKindGivenAddr(v interface{}, encFn *codecFn) { - f.e.encodeValueNonNil(reflect.ValueOf(v).Elem(), encFn) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncEncodeMapNonNil(v interface{}) { - if skipFastpathTypeSwitchInDirectCall || !fastpathEncodeTypeSwitch(v, f.e) { - f.e.encodeValueNonNil(reflect.ValueOf(v), nil) - } -} - -// ---------------- DECODER FOLLOWS ----------------- - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecBasicHandle() *BasicHandle { - return f.d.h -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecBinary() bool { - return f.d.be // f.d.hh.isBinaryEncoding() -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecSwallow() { f.d.swallow() } - -// // FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -// func (f genHelperDecoder) DecScratchBuffer() []byte { -// return f.d.b[:] -// } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecScratchArrayBuffer() *[decScratchByteArrayLen]byte { - return &f.d.b -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecFallback(iv interface{}, chkPtr bool) { - rv := reflect.ValueOf(iv) - if chkPtr { - if x, _ := isDecodeable(rv); !x { - f.d.haltAsNotDecodeable(rv) - } - } - f.d.decodeValue(rv, nil) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecSliceHelperStart() (decSliceHelper, int) { - return f.d.decSliceHelperStart() -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecStructFieldNotFound(index int, name string) { - f.d.structFieldNotFound(index, name) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecArrayCannotExpand(sliceLen, streamLen int) { - f.d.arrayCannotExpand(sliceLen, streamLen) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecTextUnmarshal(tm encoding.TextUnmarshaler) { - halt.onerror(tm.UnmarshalText(f.d.d.DecodeStringAsBytes())) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecJSONUnmarshal(tm jsonUnmarshaler) { - f.d.jsonUnmarshalV(tm) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecBinaryUnmarshal(bm encoding.BinaryUnmarshaler) { - halt.onerror(bm.UnmarshalBinary(f.d.d.DecodeBytes(nil))) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecRaw() []byte { return f.d.rawBytes() } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) IsJSONHandle() bool { - return f.d.js -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) Extension(v interface{}) (xfn *extTypeTagFn) { - return f.d.h.getExtForI(v) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecExtension(v interface{}, xfFn *extTypeTagFn) { - f.d.d.DecodeExt(v, xfFn.rt, xfFn.tag, xfFn.ext) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecInferLen(clen, maxlen, unit int) (rvlen int) { - return decInferLen(clen, maxlen, unit) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecReadMapStart() int { return f.d.mapStart(f.d.d.ReadMapStart()) } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecReadMapEnd() { f.d.mapEnd() } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecReadArrayStart() int { return f.d.arrayStart(f.d.d.ReadArrayStart()) } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecReadArrayEnd() { f.d.arrayEnd() } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecReadArrayElem() { f.d.arrayElem() } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecReadMapElemKey() { f.d.mapElemKey() } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecReadMapElemValue() { f.d.mapElemValue() } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecDecodeFloat32() float32 { return f.d.decodeFloat32() } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecStringZC(v []byte) string { return f.d.stringZC(v) } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecodeBytesInto(v []byte) []byte { return f.d.decodeBytesInto(v) } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecContainerNext(j, containerLen int, hasLen bool) bool { - // return f.d.containerNext(j, containerLen, hasLen) - // rewriting so it can be inlined - if hasLen { - return j < containerLen - } - return !f.d.checkBreak() -} diff --git a/vendor/github.com/ugorji/go/codec/gen-helper.go.tmpl b/vendor/github.com/ugorji/go/codec/gen-helper.go.tmpl deleted file mode 100644 index bf824eb..0000000 --- a/vendor/github.com/ugorji/go/codec/gen-helper.go.tmpl +++ /dev/null @@ -1,273 +0,0 @@ -// comment this out // + build ignore - -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -// Code generated from gen-helper.go.tmpl - DO NOT EDIT. - -package codec - -import ( - "encoding" - "reflect" -) - -// GenVersion is the current version of codecgen. -const GenVersion = {{ .Version }} - -// This file is used to generate helper code for codecgen. -// The values here i.e. genHelper(En|De)coder are not to be used directly by -// library users. They WILL change continuously and without notice. - -{{/* -// To help enforce this, we create an unexported type with exported members. -// The only way to get the type is via the one exported type that we control (somewhat). -// -// When static codecs are created for types, they will use this value -// to perform encoding or decoding of primitives or known slice or map types. -*/ -}} - -// GenHelperEncoder is exported so that it can be used externally by codecgen. -// -// Library users: DO NOT USE IT DIRECTLY or INDIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE. -func GenHelper() (g genHelper) { return } - -type genHelper struct {} - -func (genHelper) Encoder(e *Encoder) (ge genHelperEncoder, ee genHelperEncDriver) { - ge = genHelperEncoder{e: e} - ee = genHelperEncDriver{encDriver: e.e} - return -} - -func (genHelper) Decoder(d *Decoder) (gd genHelperDecoder, dd genHelperDecDriver) { - gd = genHelperDecoder{d: d} - dd = genHelperDecDriver{decDriver: d.d} - return -} - -type genHelperEncDriver struct { - encDriver -} - -type genHelperDecDriver struct { - decDriver -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -type genHelperEncoder struct { - M mustHdl - F fastpathT - e *Encoder -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -type genHelperDecoder struct { - C checkOverflow - F fastpathT - d *Decoder -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncBasicHandle() *BasicHandle { - return f.e.h -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWr() *encWr { - return f.e.w() -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncBinary() bool { - return f.e.be // f.e.hh.isBinaryEncoding() -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) IsJSONHandle() bool { - return f.e.js -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncFallback(iv interface{}) { - // f.e.encodeI(iv, false, false) - f.e.encodeValue(reflect.ValueOf(iv), nil) -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncTextMarshal(iv encoding.TextMarshaler) { - bs, fnerr := iv.MarshalText() - f.e.marshalUtf8(bs, fnerr) -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncJSONMarshal(iv jsonMarshaler) { - bs, fnerr := iv.MarshalJSON() - f.e.marshalAsis(bs, fnerr) -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncBinaryMarshal(iv encoding.BinaryMarshaler) { - bs, fnerr := iv.MarshalBinary() - f.e.marshalRaw(bs, fnerr) -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncRaw(iv Raw) { f.e.rawBytes(iv) } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) Extension(v interface{}) (xfn *extTypeTagFn) { - return f.e.h.getExtForI(v) -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncExtension(v interface{}, xfFn *extTypeTagFn) { - f.e.e.EncodeExt(v, xfFn.rt, xfFn.tag, xfFn.ext) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWriteMapStart(length int) { f.e.mapStart(length) } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWriteMapEnd() { f.e.mapEnd() } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWriteArrayStart(length int) { f.e.arrayStart(length) } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWriteArrayEnd() { f.e.arrayEnd() } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWriteArrayElem() { f.e.arrayElem() } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWriteMapElemKey() { f.e.mapElemKey() } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncWriteMapElemValue() { f.e.mapElemValue() } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncEncodeComplex64(v complex64) { f.e.encodeComplex64(v) } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncEncodeComplex128(v complex128) { f.e.encodeComplex128(v) } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncEncode(v interface{}) { f.e.encode(v) } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncFnGivenAddr(v interface{}) *codecFn { return f.e.h.fn(reflect.TypeOf(v).Elem()) } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncEncodeNumBoolStrKindGivenAddr(v interface{}, encFn *codecFn) { - f.e.encodeValueNonNil(reflect.ValueOf(v).Elem(), encFn) -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncEncodeMapNonNil(v interface{}) { - if skipFastpathTypeSwitchInDirectCall || !fastpathEncodeTypeSwitch(v, f.e) { - f.e.encodeValueNonNil(reflect.ValueOf(v), nil) - } -} - -// ---------------- DECODER FOLLOWS ----------------- - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecBasicHandle() *BasicHandle { - return f.d.h -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecBinary() bool { - return f.d.be // f.d.hh.isBinaryEncoding() -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecSwallow() { f.d.swallow() } - -// // FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -// func (f genHelperDecoder) DecScratchBuffer() []byte { -// return f.d.b[:] -// } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecScratchArrayBuffer() *[decScratchByteArrayLen]byte { - return &f.d.b -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecFallback(iv interface{}, chkPtr bool) { - rv := reflect.ValueOf(iv) - if chkPtr { - if x, _ := isDecodeable(rv); !x { - f.d.haltAsNotDecodeable(rv) - } - } - f.d.decodeValue(rv, nil) -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecSliceHelperStart() (decSliceHelper, int) { - return f.d.decSliceHelperStart() -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecStructFieldNotFound(index int, name string) { - f.d.structFieldNotFound(index, name) -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecArrayCannotExpand(sliceLen, streamLen int) { - f.d.arrayCannotExpand(sliceLen, streamLen) -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecTextUnmarshal(tm encoding.TextUnmarshaler) { - halt.onerror(tm.UnmarshalText(f.d.d.DecodeStringAsBytes())) -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecJSONUnmarshal(tm jsonUnmarshaler) { - f.d.jsonUnmarshalV(tm) -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecBinaryUnmarshal(bm encoding.BinaryUnmarshaler) { - halt.onerror(bm.UnmarshalBinary(f.d.d.DecodeBytes(nil))) -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecRaw() []byte { return f.d.rawBytes() } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) IsJSONHandle() bool { - return f.d.js -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) Extension(v interface{}) (xfn *extTypeTagFn) { - return f.d.h.getExtForI(v) -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecExtension(v interface{}, xfFn *extTypeTagFn) { - f.d.d.DecodeExt(v, xfFn.rt, xfFn.tag, xfFn.ext) -} -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecInferLen(clen, maxlen, unit int) (rvlen int) { - return decInferLen(clen, maxlen, unit) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecReadMapStart() int { return f.d.mapStart(f.d.d.ReadMapStart()) } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecReadMapEnd() { f.d.mapEnd() } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecReadArrayStart() int { return f.d.arrayStart(f.d.d.ReadArrayStart()) } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecReadArrayEnd() { f.d.arrayEnd() } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecReadArrayElem() { f.d.arrayElem() } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecReadMapElemKey() { f.d.mapElemKey() } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecReadMapElemValue() { f.d.mapElemValue() } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecDecodeFloat32() float32 { return f.d.decodeFloat32() } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecStringZC(v []byte) string { return f.d.stringZC(v) } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecodeBytesInto(v []byte) []byte { return f.d.decodeBytesInto(v) } -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecContainerNext(j, containerLen int, hasLen bool) bool { - // return f.d.containerNext(j, containerLen, hasLen) - // rewriting so it can be inlined - if hasLen { - return j < containerLen - } - return !f.d.checkBreak() -} - -{{/* -// MARKER: remove WriteStr, as it cannot be inlined as of 20230201. -// Instead, generated code calls (*encWr).WriteStr directly. - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -// func (f genHelperEncoder) WriteStr(s string) { -// f.e.encWr.writestr(s) -// } - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) I2Rtid(v interface{}) uintptr { - return i2rtid(v) -} - -*/ -}} diff --git a/vendor/github.com/ugorji/go/codec/gen.generated.go b/vendor/github.com/ugorji/go/codec/gen.generated.go deleted file mode 100644 index 277180a..0000000 --- a/vendor/github.com/ugorji/go/codec/gen.generated.go +++ /dev/null @@ -1,192 +0,0 @@ -// +build codecgen.exec - -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -// DO NOT EDIT. THIS FILE IS AUTO-GENERATED FROM gen-dec-(map|array).go.tmpl - -const genDecMapTmpl = ` -{{var "v"}} := *{{ .Varname }} -{{var "l"}} := z.DecReadMapStart() -if {{var "l"}} == codecSelferDecContainerLenNil{{xs}} { - *{{ .Varname }} = nil -} else { -if {{var "v"}} == nil { - {{var "rl"}} := z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }}) - {{var "v"}} = make(map[{{ .KTyp }}]{{ .Typ }}, {{var "rl"}}) - *{{ .Varname }} = {{var "v"}} -} -{{ $mk := var "mk" -}} -var {{ $mk }} {{ .KTyp }} -var {{var "mv"}} {{ .Typ }} -var {{var "mg"}}, {{var "mdn"}} {{if decElemKindPtr}}, {{var "ms"}}, {{var "mok"}}{{end}} bool -if z.DecBasicHandle().MapValueReset { - {{if decElemKindPtr}}{{var "mg"}} = true - {{else if decElemKindIntf}}if !z.DecBasicHandle().InterfaceReset { {{var "mg"}} = true } - {{else if not decElemKindImmutable}}{{var "mg"}} = true - {{end}} } -if {{var "l"}} != 0 { - {{var "hl"}} := {{var "l"}} > 0 - for {{var "j"}} := 0; z.DecContainerNext({{var "j"}}, {{var "l"}}, {{var "hl"}}); {{var "j"}}++ { - z.DecReadMapElemKey() - {{ if eq .KTyp "string" -}} - {{ decLineVarK $mk -}}{{- /* decLineVarKStrZC $mk */ -}} - {{ else -}} - {{ decLineVarK $mk -}} - {{ end -}} - {{ if eq .KTyp "interface{}" }}{{/* // special case if a byte array. */ -}} - if {{var "bv"}}, {{var "bok"}} := {{var "mk"}}.([]byte); {{var "bok"}} { - {{var "mk"}} = z.DecStringZC({{var "bv"}}) - } - {{ end -}} - {{if decElemKindPtr -}} - {{var "ms"}} = true - {{end -}} - if {{var "mg"}} { - {{if decElemKindPtr -}} - {{var "mv"}}, {{var "mok"}} = {{var "v"}}[{{ $mk }}] - if {{var "mok"}} { - {{var "ms"}} = false - } - {{else -}} - {{var "mv"}} = {{var "v"}}[{{ $mk }}] - {{end -}} - } {{if not decElemKindImmutable}}else { {{var "mv"}} = {{decElemZero}} }{{end}} - z.DecReadMapElemValue() - {{var "mdn"}} = false - {{ $x := printf "%vmv%v" .TempVar .Rand }}{{ $y := printf "%vmdn%v" .TempVar .Rand }}{{ decLineVar $x $y -}} - if {{var "mdn"}} { - {{var "v"}}[{{ $mk }}] = {{decElemZero}} - } else {{if decElemKindPtr}} if {{var "ms"}} {{end}} { - {{var "v"}}[{{ $mk }}] = {{var "mv"}} - } -} -} // else len==0: leave as-is (do not clear map entries) -z.DecReadMapEnd() -} -` - -const genDecListTmpl = ` -{{var "v"}} := {{if not isArray}}*{{end}}{{ .Varname }} -{{var "h"}}, {{var "l"}} := z.DecSliceHelperStart() {{/* // helper, containerLenS */}} -{{if not isArray -}} -var {{var "c"}} bool {{/* // changed */}} -_ = {{var "c"}} -if {{var "h"}}.IsNil { - if {{var "v"}} != nil { - {{var "v"}} = nil - {{var "c"}} = true - } -} else {{end -}} -if {{var "l"}} == 0 { - {{if isSlice -}} - if {{var "v"}} == nil { - {{var "v"}} = []{{ .Typ }}{} - {{var "c"}} = true - } else if len({{var "v"}}) != 0 { - {{var "v"}} = {{var "v"}}[:0] - {{var "c"}} = true - } {{else if isChan }}if {{var "v"}} == nil { - {{var "v"}} = make({{ .CTyp }}, 0) - {{var "c"}} = true - } - {{end -}} -} else { - {{var "hl"}} := {{var "l"}} > 0 - var {{var "rl"}} int - _ = {{var "rl"}} - {{if isSlice }} if {{var "hl"}} { - if {{var "l"}} > cap({{var "v"}}) { - {{var "rl"}} = z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }}) - if {{var "rl"}} <= cap({{var "v"}}) { - {{var "v"}} = {{var "v"}}[:{{var "rl"}}] - } else { - {{var "v"}} = make([]{{ .Typ }}, {{var "rl"}}) - } - {{var "c"}} = true - } else if {{var "l"}} != len({{var "v"}}) { - {{var "v"}} = {{var "v"}}[:{{var "l"}}] - {{var "c"}} = true - } - } - {{end -}} - var {{var "j"}} int - {{/* // var {{var "dn"}} bool */ -}} - for {{var "j"}} = 0; z.DecContainerNext({{var "j"}}, {{var "l"}}, {{var "hl"}}); {{var "j"}}++ { - {{if not isArray}} if {{var "j"}} == 0 && {{var "v"}} == nil { - if {{var "hl"}} { - {{var "rl"}} = z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }}) - } else { - {{var "rl"}} = {{if isSlice}}8{{else if isChan}}64{{end}} - } - {{var "v"}} = make({{if isSlice}}[]{{ .Typ }}{{else if isChan}}{{.CTyp}}{{end}}, {{var "rl"}}) - {{var "c"}} = true - } - {{end -}} - {{var "h"}}.ElemContainerState({{var "j"}}) - {{/* {{var "dn"}} = r.TryDecodeAsNil() */}}{{/* commented out, as decLineVar handles this already each time */ -}} - {{if isChan}}{{ $x := printf "%[1]vvcx%[2]v" .TempVar .Rand }}var {{$x}} {{ .Typ }} - {{ decLineVar $x -}} - {{var "v"}} <- {{ $x }} - {{else}}{{/* // if indefinite, etc, then expand the slice if necessary */ -}} - var {{var "db"}} bool - if {{var "j"}} >= len({{var "v"}}) { - {{if isSlice }} {{var "v"}} = append({{var "v"}}, {{ zero }}) - {{var "c"}} = true - {{else}} z.DecArrayCannotExpand(len(v), {{var "j"}}+1); {{var "db"}} = true - {{end -}} - } - if {{var "db"}} { - z.DecSwallow() - } else { - {{ $x := printf "%[1]vv%[2]v[%[1]vj%[2]v]" .TempVar .Rand }}{{ decLineVar $x -}} - } - {{end -}} - } - {{if isSlice}} if {{var "j"}} < len({{var "v"}}) { - {{var "v"}} = {{var "v"}}[:{{var "j"}}] - {{var "c"}} = true - } else if {{var "j"}} == 0 && {{var "v"}} == nil { - {{var "v"}} = []{{ .Typ }}{} - {{var "c"}} = true - } - {{end -}} -} -{{var "h"}}.End() -{{if not isArray }}if {{var "c"}} { - *{{ .Varname }} = {{var "v"}} -} -{{end -}} -` - -const genEncChanTmpl = ` -{{.Label}}: -switch timeout{{.Sfx}} := z.EncBasicHandle().ChanRecvTimeout; { -case timeout{{.Sfx}} == 0: // only consume available - for { - select { - case b{{.Sfx}} := <-{{.Chan}}: - {{ .Slice }} = append({{.Slice}}, b{{.Sfx}}) - default: - break {{.Label}} - } - } -case timeout{{.Sfx}} > 0: // consume until timeout - tt{{.Sfx}} := time.NewTimer(timeout{{.Sfx}}) - for { - select { - case b{{.Sfx}} := <-{{.Chan}}: - {{.Slice}} = append({{.Slice}}, b{{.Sfx}}) - case <-tt{{.Sfx}}.C: - // close(tt.C) - break {{.Label}} - } - } -default: // consume until close - for b{{.Sfx}} := range {{.Chan}} { - {{.Slice}} = append({{.Slice}}, b{{.Sfx}}) - } -} -` diff --git a/vendor/github.com/ugorji/go/codec/gen.go b/vendor/github.com/ugorji/go/codec/gen.go index 0026e3e..4e521ad 100644 --- a/vendor/github.com/ugorji/go/codec/gen.go +++ b/vendor/github.com/ugorji/go/codec/gen.go @@ -1,8 +1,7 @@ // Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. // Use of this source code is governed by a MIT license found in the LICENSE file. -//go:build codecgen.exec -// +build codecgen.exec +//go:build codec.build package codec @@ -13,2145 +12,64 @@ import ( "fmt" "go/format" "io" - "io/ioutil" - "math/rand" "os" - "reflect" "regexp" - "sort" - "strconv" "strings" "sync" "text/template" - "time" // "ugorji.net/zz" - "unicode" - "unicode/utf8" ) // --------------------------------------------------- -// codecgen supports the full cycle of reflection-based codec: -// - RawExt -// - Raw -// - Extensions -// - (Binary|Text|JSON)(Unm|M)arshal -// - generic by-kind -// -// This means that, for dynamic things, we MUST use reflection to at least get the reflect.Type. -// In those areas, we try to only do reflection or interface-conversion when NECESSARY: -// - Extensions, only if Extensions are configured. -// -// However, note following codecgen caveats: -// - Canonical option. -// If Canonical=true, codecgen'ed code may delegate encoding maps to reflection-based code. -// This is due to the runtime work needed to marshal a map in canonical mode. -// However, if map key is a pre-defined/builtin numeric or string type, codecgen -// will try to write it out itself -// - CheckCircularRef option. -// When encoding a struct, a circular reference can lead to a stack overflow. -// If CheckCircularRef=true, codecgen'ed code will delegate encoding structs to reflection-based code. -// - MissingFielder implementation. -// If a type implements MissingFielder, a Selfer is not generated (with a warning message). -// Statically reproducing the runtime work needed to extract the missing fields and marshal them -// along with the struct fields, while handling the Canonical=true special case, was onerous to implement. -// -// During encode/decode, Selfer takes precedence. -// A type implementing Selfer will know how to encode/decode itself statically. -// -// The following field types are supported: -// array: [n]T -// slice: []T -// map: map[K]V -// primitive: [u]int[n], float(32|64), bool, string -// struct -// -// --------------------------------------------------- -// Note that a Selfer cannot call (e|d).(En|De)code on itself, -// as this will cause a circular reference, as (En|De)code will call Selfer methods. -// Any type that implements Selfer must implement completely and not fallback to (En|De)code. -// -// In addition, code in this file manages the generation of fast-path implementations of -// encode/decode of slices/maps of primitive keys/values. -// -// Users MUST re-generate their implementations whenever the code shape changes. -// The generated code will panic if it was generated with a version older than the supporting library. -// --------------------------------------------------- -// -// codec framework is very feature rich. -// When encoding or decoding into an interface, it depends on the runtime type of the interface. -// The type of the interface may be a named type, an extension, etc. -// Consequently, we fallback to runtime codec for encoding/decoding interfaces. -// In addition, we fallback for any value which cannot be guaranteed at runtime. -// This allows us support ANY value, including any named types, specifically those which -// do not implement our interfaces (e.g. Selfer). -// -// This explains some slowness compared to other code generation codecs (e.g. msgp). -// This reduction in speed is only seen when your refers to interfaces, -// e.g. type T struct { A interface{}; B []interface{}; C map[string]interface{} } -// -// codecgen will panic if the file was generated with an old version of the library in use. -// -// Note: -// It was a conscious decision to have gen.go always explicitly call EncodeNil or TryDecodeAsNil. -// This way, there isn't a function call overhead just to see that we should not enter a block of code. -// -// Note: -// codecgen-generated code depends on the variables defined by fast-path.generated.go. -// consequently, you cannot run with tags "codecgen codec.notfastpath". -// -// Note: -// genInternalXXX functions are used for generating fast-path and other internally generated -// files, and not for use in codecgen. - -// Size of a struct or value is not portable across machines, especially across 32-bit vs 64-bit -// operating systems. This is due to types like int, uintptr, pointers, (and derived types like slice), etc -// which use the natural word size on those machines, which may be 4 bytes (on 32-bit) or 8 bytes (on 64-bit). -// -// Within decInferLen calls, we may generate an explicit size of the entry. -// We do this because decInferLen values are expected to be approximate, -// and serve as a good hint on the size of the elements or key+value entry. -// -// Since development is done on 64-bit machines, the sizes will be roughly correctly -// on 64-bit OS, and slightly larger than expected on 32-bit OS. -// This is ok. -// -// For reference, look for 'Size' in fast-path.go.tmpl, gen-dec-(array|map).go.tmpl and gen.go (this file). - -// GenVersion is the current version of codecgen. -// -// MARKER: Increment this value each time codecgen changes fundamentally. -// Also update codecgen/gen.go (minimumCodecVersion, genVersion, etc). -// Fundamental changes are: -// - helper methods change (signature change, new ones added, some removed, etc) -// - codecgen command line changes -// -// v1: Initial Version -// v2: - -// v3: For Kubernetes: changes in signature of some unpublished helper methods and codecgen cmdline arguments. -// v4: Removed separator support from (en|de)cDriver, and refactored codec(gen) -// v5: changes to support faster json decoding. Let encoder/decoder maintain state of collections. -// v6: removed unsafe from gen, and now uses codecgen.exec tag -// v7: - -// v8: current - we now maintain compatibility with old generated code. -// v9: - skipped -// v10: modified encDriver and decDriver interfaces. -// v11: remove deprecated methods of encDriver and decDriver. -// v12: removed deprecated methods from genHelper and changed container tracking logic -// v13: 20190603 removed DecodeString - use DecodeStringAsBytes instead -// v14: 20190611 refactored nil handling: TryDecodeAsNil -> selective TryNil, etc -// v15: 20190626 encDriver.EncodeString handles StringToRaw flag inside handle -// v16: 20190629 refactoring for v1.1.6 -// v17: 20200911 reduce number of types for which we generate fast path functions (v1.1.8) -// v18: 20201004 changed definition of genHelper...Extension (to take interface{}) and eliminated I2Rtid method -// v19: 20201115 updated codecgen cmdline flags and optimized output -// v20: 20201120 refactored GenHelper to one exported function -// v21: 20210104 refactored generated code to honor ZeroCopy=true for more efficiency -// v22: 20210118 fixed issue in generated code when encoding a type which is also a codec.Selfer -// v23: 20210203 changed slice/map types for which we generate fast-path functions -// v24: 20210226 robust handling for Canonical|CheckCircularRef flags and MissingFielder implementations -// v25: 20210406 pass base reflect.Type to side(En|De)code and (En|De)codeExt calls -// v26: 20230201 genHelper changes for more inlining and consequent performance -// v27: 20230219 fix error decoding struct from array - due to misplaced counter increment -// v28: 20230224 fix decoding missing fields of struct from array, due to double counter increment -const genVersion = 28 - -const ( - genCodecPkg = "codec1978" // MARKER: keep in sync with codecgen/gen.go - genTempVarPfx = "yy" - genTopLevelVarName = "x" - - // ignore canBeNil parameter, and always set to true. - // This is because nil can appear anywhere, so we should always check. - genAnythingCanBeNil = true - - // genStructCanonical configures whether we generate 2 paths based on Canonical flag - // when encoding struct fields. - genStructCanonical = true - - // genFastpathCanonical configures whether we support Canonical in fast path. - // The savings is not much. - // - // MARKER: This MUST ALWAYS BE TRUE. fast-path.go.tmp doesn't handle it being false. - genFastpathCanonical = true - - // genFastpathTrimTypes configures whether we trim uncommon fastpath types. - genFastpathTrimTypes = true -) - -type genStringDecAsBytes string -type genStringDecZC string - -var genStringDecAsBytesTyp = reflect.TypeOf(genStringDecAsBytes("")) -var genStringDecZCTyp = reflect.TypeOf(genStringDecZC("")) -var genFormats = []string{"Json", "Cbor", "Msgpack", "Binc", "Simple"} - -var ( - errGenAllTypesSamePkg = errors.New("All types must be in the same package") - errGenExpectArrayOrMap = errors.New("unexpected type - expecting array/map/slice") - errGenUnexpectedTypeFastpath = errors.New("fast-path: unexpected type - requires map or slice") - - // don't use base64, only 63 characters allowed in valid go identifiers - // ie ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ - // - // don't use numbers, as a valid go identifer must start with a letter. - genTypenameEnc = base32.NewEncoding("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef") - genQNameRegex = regexp.MustCompile(`[A-Za-z_.]+`) -) - -type genBuf struct { - buf []byte -} - -func (x *genBuf) sIf(b bool, s, t string) *genBuf { - if b { - x.buf = append(x.buf, s...) - } else { - x.buf = append(x.buf, t...) - } - return x -} -func (x *genBuf) s(s string) *genBuf { x.buf = append(x.buf, s...); return x } -func (x *genBuf) b(s []byte) *genBuf { x.buf = append(x.buf, s...); return x } -func (x *genBuf) v() string { return string(x.buf) } -func (x *genBuf) f(s string, args ...interface{}) { x.s(fmt.Sprintf(s, args...)) } -func (x *genBuf) reset() { - if x.buf != nil { - x.buf = x.buf[:0] - } -} - -// genRunner holds some state used during a Gen run. -type genRunner struct { - w io.Writer // output - c uint64 // counter used for generating varsfx - f uint64 // counter used for saying false - - t []reflect.Type // list of types to run selfer on - tc reflect.Type // currently running selfer on this type - te map[uintptr]bool // types for which the encoder has been created - td map[uintptr]bool // types for which the decoder has been created - tz map[uintptr]bool // types for which GenIsZero has been created - - cp string // codec import path - - im map[string]reflect.Type // imports to add - imn map[string]string // package names of imports to add - imc uint64 // counter for import numbers - - is map[reflect.Type]struct{} // types seen during import search - bp string // base PkgPath, for which we are generating for - - cpfx string // codec package prefix - - ty map[reflect.Type]struct{} // types for which GenIsZero *should* be created - tm map[reflect.Type]struct{} // types for which enc/dec must be generated - ts []reflect.Type // types for which enc/dec must be generated - - xs string // top level variable/constant suffix - hn string // fn helper type name - - ti *TypeInfos - // rr *rand.Rand // random generator for file-specific types - - jsonOnlyWhen, toArrayWhen, omitEmptyWhen *bool - - nx bool // no extensions -} - -type genIfClause struct { - hasIf bool -} - -func (g *genIfClause) end(x *genRunner) { - if g.hasIf { - x.line("}") - } -} - -func (g *genIfClause) c(last bool) (v string) { - if last { - if g.hasIf { - v = " } else { " - } - } else if g.hasIf { - v = " } else if " - } else { - v = "if " - g.hasIf = true - } - return -} - -// Gen will write a complete go file containing Selfer implementations for each -// type passed. All the types must be in the same package. -// -// Library users: DO NOT USE IT DIRECTLY. IT WILL CHANGE CONTINUOUSLY WITHOUT NOTICE. -func Gen(w io.Writer, buildTags, pkgName, uid string, noExtensions bool, - jsonOnlyWhen, toArrayWhen, omitEmptyWhen *bool, - ti *TypeInfos, types ...reflect.Type) (warnings []string) { - // All types passed to this method do not have a codec.Selfer method implemented directly. - // codecgen already checks the AST and skips any types that define the codec.Selfer methods. - // Consequently, there's no need to check and trim them if they implement codec.Selfer - - if len(types) == 0 { - return - } - x := genRunner{ - w: w, - t: types, - te: make(map[uintptr]bool), - td: make(map[uintptr]bool), - tz: make(map[uintptr]bool), - im: make(map[string]reflect.Type), - imn: make(map[string]string), - is: make(map[reflect.Type]struct{}), - tm: make(map[reflect.Type]struct{}), - ty: make(map[reflect.Type]struct{}), - ts: []reflect.Type{}, - bp: genImportPath(types[0]), - xs: uid, - ti: ti, - jsonOnlyWhen: jsonOnlyWhen, - toArrayWhen: toArrayWhen, - omitEmptyWhen: omitEmptyWhen, - - nx: noExtensions, - } - if x.ti == nil { - x.ti = defTypeInfos - } - if x.xs == "" { - rr := rand.New(rand.NewSource(time.Now().UnixNano())) - x.xs = strconv.FormatInt(rr.Int63n(9999), 10) - } - - // gather imports first: - x.cp = genImportPath(reflect.TypeOf(x)) - x.imn[x.cp] = genCodecPkg - - // iterate, check if all in same package, and remove any missingfielders - for i := 0; i < len(x.t); { - t := x.t[i] - // xdebugf("###########: PkgPath: '%v', Name: '%s'\n", genImportPath(t), t.Name()) - if genImportPath(t) != x.bp { - halt.onerror(errGenAllTypesSamePkg) - } - ti1 := x.ti.get(rt2id(t), t) - if ti1.flagMissingFielder || ti1.flagMissingFielderPtr { - // output diagnostic message - that nothing generated for this type - warnings = append(warnings, fmt.Sprintf("type: '%v' not generated; implements codec.MissingFielder", t)) - copy(x.t[i:], x.t[i+1:]) - x.t = x.t[:len(x.t)-1] - continue - } - x.genRefPkgs(t) - i++ - } - - x.line("// +build go1.6") - if buildTags != "" { - x.line("// +build " + buildTags) - } - x.line(` - -// Code generated by codecgen - DO NOT EDIT. - -`) - x.line("package " + pkgName) - x.line("") - x.line("import (") - if x.cp != x.bp { - x.cpfx = genCodecPkg + "." - x.linef("%s \"%s\"", genCodecPkg, x.cp) - } - // use a sorted set of im keys, so that we can get consistent output - imKeys := make([]string, 0, len(x.im)) - for k := range x.im { - imKeys = append(imKeys, k) - } - sort.Strings(imKeys) - for _, k := range imKeys { // for k, _ := range x.im { - if k == x.imn[k] { - x.linef("\"%s\"", k) - } else { - x.linef("%s \"%s\"", x.imn[k], k) - } - } - // add required packages - for _, k := range [...]string{"runtime", "errors", "strconv", "sort"} { // "reflect", "fmt" - if _, ok := x.im[k]; !ok { - x.line("\"" + k + "\"") - } - } - x.line(")") - x.line("") - - x.line("const (") - x.linef("// ----- content types ----") - x.linef("codecSelferCcUTF8%s = %v", x.xs, int64(cUTF8)) - x.linef("codecSelferCcRAW%s = %v", x.xs, int64(cRAW)) - x.linef("// ----- value types used ----") - for _, vt := range [...]valueType{ - valueTypeArray, valueTypeMap, valueTypeString, - valueTypeInt, valueTypeUint, valueTypeFloat, - valueTypeNil, - } { - x.linef("codecSelferValueType%s%s = %v", vt.String(), x.xs, int64(vt)) - } - - x.linef("codecSelferBitsize%s = uint8(32 << (^uint(0) >> 63))", x.xs) - x.linef("codecSelferDecContainerLenNil%s = %d", x.xs, int64(containerLenNil)) - x.line(")") - x.line("var (") - x.line("errCodecSelferOnlyMapOrArrayEncodeToStruct" + x.xs + " = " + "errors.New(`only encoded map or array can be decoded into a struct`)") - x.line("_ sort.Interface = nil") - x.line(")") - x.line("") - - x.hn = "codecSelfer" + x.xs - x.line("type " + x.hn + " struct{}") - x.line("") - x.linef("func %sFalse() bool { return false }", x.hn) - x.linef("func %sTrue() bool { return true }", x.hn) - x.line("") - - // add types for sorting canonical - for _, s := range []string{"string", "uint64", "int64", "float64"} { - x.linef("type %s%sSlice []%s", x.hn, s, s) - x.linef("func (p %s%sSlice) Len() int { return len(p) }", x.hn, s) - x.linef("func (p %s%sSlice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] }", x.hn, s) - x.linef("func (p %s%sSlice) Less(i, j int) bool { return p[uint(i)] < p[uint(j)] }", x.hn, s) - } - - x.line("") - x.varsfxreset() - x.line("func init() {") - x.linef("if %sGenVersion != %v {", x.cpfx, genVersion) - x.line("_, file, _, _ := runtime.Caller(0)") - x.linef("ver := strconv.FormatInt(int64(%sGenVersion), 10)", x.cpfx) - x.outf(`panic(errors.New("codecgen version mismatch: current: %v, need " + ver + ". Re-generate file: " + file))`, genVersion) - x.linef("}") - if len(imKeys) > 0 { - x.line("if false { // reference the types, but skip this branch at build/run time") - for _, k := range imKeys { - t := x.im[k] - x.linef("var _ %s.%s", x.imn[k], t.Name()) - } - x.line("} ") // close if false - } - x.line("}") // close init - x.line("") - - // generate rest of type info - for _, t := range x.t { - x.tc = t - x.linef("func (%s) codecSelferViaCodecgen() {}", x.genTypeName(t)) - x.selfer(true) - x.selfer(false) - x.tryGenIsZero(t) - } - - for _, t := range x.ts { - rtid := rt2id(t) - // generate enc functions for all these slice/map types. - x.varsfxreset() - x.linef("func (x %s) enc%s(v %s%s, e *%sEncoder) {", x.hn, x.genMethodNameT(t), x.arr2str(t, "*"), x.genTypeName(t), x.cpfx) - x.genRequiredMethodVars(true) - switch t.Kind() { - case reflect.Array, reflect.Slice, reflect.Chan: - x.encListFallback("v", t) - case reflect.Map: - x.encMapFallback("v", t) - default: - halt.onerror(errGenExpectArrayOrMap) - } - x.line("}") - x.line("") - - // generate dec functions for all these slice/map types. - x.varsfxreset() - x.linef("func (x %s) dec%s(v *%s, d *%sDecoder) {", x.hn, x.genMethodNameT(t), x.genTypeName(t), x.cpfx) - x.genRequiredMethodVars(false) - switch t.Kind() { - case reflect.Array, reflect.Slice, reflect.Chan: - x.decListFallback("v", rtid, t) - case reflect.Map: - x.decMapFallback("v", rtid, t) - default: - halt.onerror(errGenExpectArrayOrMap) - } - x.line("}") - x.line("") - } - - for t := range x.ty { - x.tryGenIsZero(t) - x.line("") - } - - x.line("") - return -} - -func (x *genRunner) checkForSelfer(t reflect.Type, varname string) bool { - // return varname != genTopLevelVarName && t != x.tc - // the only time we checkForSelfer is if we are not at the TOP of the generated code. - return varname != genTopLevelVarName -} - -func (x *genRunner) arr2str(t reflect.Type, s string) string { - if t.Kind() == reflect.Array { - return s - } - return "" -} - -func (x *genRunner) genRequiredMethodVars(encode bool) { - x.line("var h " + x.hn) - if encode { - x.line("z, r := " + x.cpfx + "GenHelper().Encoder(e)") - } else { - x.line("z, r := " + x.cpfx + "GenHelper().Decoder(d)") - } - x.line("_, _, _ = h, z, r") -} - -func (x *genRunner) genRefPkgs(t reflect.Type) { - if _, ok := x.is[t]; ok { - return - } - x.is[t] = struct{}{} - tpkg, tname := genImportPath(t), t.Name() - if tpkg != "" && tpkg != x.bp && tpkg != x.cp && tname != "" && tname[0] >= 'A' && tname[0] <= 'Z' { - if _, ok := x.im[tpkg]; !ok { - x.im[tpkg] = t - if idx := strings.LastIndex(tpkg, "/"); idx < 0 { - x.imn[tpkg] = tpkg - } else { - x.imc++ - x.imn[tpkg] = "pkg" + strconv.FormatUint(x.imc, 10) + "_" + genGoIdentifier(tpkg[idx+1:], false) - } - } - } - switch t.Kind() { - case reflect.Array, reflect.Slice, reflect.Ptr, reflect.Chan: - x.genRefPkgs(t.Elem()) - case reflect.Map: - x.genRefPkgs(t.Elem()) - x.genRefPkgs(t.Key()) - case reflect.Struct: - for i := 0; i < t.NumField(); i++ { - if fname := t.Field(i).Name; fname != "" && fname[0] >= 'A' && fname[0] <= 'Z' { - x.genRefPkgs(t.Field(i).Type) - } - } - } -} - -// sayFalse will either say "false" or use a function call that returns false. -func (x *genRunner) sayFalse() string { - x.f++ - if x.f%2 == 0 { - return x.hn + "False()" - } - return "false" -} - -// sayFalse will either say "true" or use a function call that returns true. -func (x *genRunner) sayTrue() string { - x.f++ - if x.f%2 == 0 { - return x.hn + "True()" - } - return "true" -} - -func (x *genRunner) varsfx() string { - x.c++ - return strconv.FormatUint(x.c, 10) -} - -func (x *genRunner) varsfxreset() { - x.c = 0 -} - -func (x *genRunner) out(s string) { - _, err := io.WriteString(x.w, s) - genCheckErr(err) -} - -func (x *genRunner) outf(s string, params ...interface{}) { - _, err := fmt.Fprintf(x.w, s, params...) - genCheckErr(err) -} - -func (x *genRunner) line(s string) { - x.out(s) - if len(s) == 0 || s[len(s)-1] != '\n' { - x.out("\n") - } -} - -func (x *genRunner) lineIf(s string) { - if s != "" { - x.line(s) - } -} - -func (x *genRunner) linef(s string, params ...interface{}) { - x.outf(s, params...) - if len(s) == 0 || s[len(s)-1] != '\n' { - x.out("\n") - } -} - -func (x *genRunner) genTypeName(t reflect.Type) (n string) { - // if the type has a PkgPath, which doesn't match the current package, - // then include it. - // We cannot depend on t.String() because it includes current package, - // or t.PkgPath because it includes full import path, - // - var ptrPfx string - for t.Kind() == reflect.Ptr { - ptrPfx += "*" - t = t.Elem() - } - if tn := t.Name(); tn != "" { - return ptrPfx + x.genTypeNamePrim(t) - } - switch t.Kind() { - case reflect.Map: - return ptrPfx + "map[" + x.genTypeName(t.Key()) + "]" + x.genTypeName(t.Elem()) - case reflect.Slice: - return ptrPfx + "[]" + x.genTypeName(t.Elem()) - case reflect.Array: - return ptrPfx + "[" + strconv.FormatInt(int64(t.Len()), 10) + "]" + x.genTypeName(t.Elem()) - case reflect.Chan: - return ptrPfx + t.ChanDir().String() + " " + x.genTypeName(t.Elem()) - default: - if t == intfTyp { - return ptrPfx + "interface{}" - } else { - return ptrPfx + x.genTypeNamePrim(t) - } - } -} - -func (x *genRunner) genTypeNamePrim(t reflect.Type) (n string) { - if t.Name() == "" { - return t.String() - } else if genImportPath(t) == "" || genImportPath(t) == genImportPath(x.tc) { - return t.Name() - } else { - return x.imn[genImportPath(t)] + "." + t.Name() - // return t.String() // best way to get the package name inclusive - } -} - -func (x *genRunner) genZeroValueR(t reflect.Type) string { - // if t is a named type, w - switch t.Kind() { - case reflect.Ptr, reflect.Interface, reflect.Chan, reflect.Func, - reflect.Slice, reflect.Map, reflect.Invalid: - return "nil" - case reflect.Bool: - return "false" - case reflect.String: - return `""` - case reflect.Struct, reflect.Array: - return x.genTypeName(t) + "{}" - default: // all numbers - return "0" - } -} - -func (x *genRunner) genMethodNameT(t reflect.Type) (s string) { - return genMethodNameT(t, x.tc) -} - -func (x *genRunner) tryGenIsZero(t reflect.Type) (done bool) { - if t.Kind() != reflect.Struct || t.Implements(isCodecEmptyerTyp) { - return - } - - rtid := rt2id(t) - - if _, ok := x.tz[rtid]; ok { - delete(x.ty, t) - return - } - - x.tz[rtid] = true - delete(x.ty, t) - - ti := x.ti.get(rtid, t) - tisfi := ti.sfi.source() // always use sequence from file. decStruct expects same thing. - varname := genTopLevelVarName - - x.linef("func (%s *%s) IsCodecEmpty() bool {", varname, x.genTypeName(t)) - - anonSeen := make(map[reflect.Type]bool) - var omitline genBuf - for _, si := range tisfi { - if si.path.parent != nil { - root := si.path.root() - if anonSeen[root.typ] { - continue - } - anonSeen[root.typ] = true - } - t2 := genOmitEmptyLinePreChecks(varname, t, si, &omitline, true) - // if Ptr, we already checked if nil above - if t2.Type.Kind() != reflect.Ptr { - x.doEncOmitEmptyLine(t2, varname, &omitline) - omitline.s(" || ") - } - } - omitline.s(" false") - x.linef("return !(%s)", omitline.v()) - - x.line("}") - x.line("") - return true -} - -func (x *genRunner) selfer(encode bool) { - t := x.tc - // ti := x.ti.get(rt2id(t), t) - t0 := t - // always make decode use a pointer receiver, - // and structs/arrays always use a ptr receiver (encode|decode) - isptr := !encode || t.Kind() == reflect.Array || (t.Kind() == reflect.Struct && t != timeTyp) - x.varsfxreset() - - fnSigPfx := "func (" + genTopLevelVarName + " " - if isptr { - fnSigPfx += "*" - } - fnSigPfx += x.genTypeName(t) - x.out(fnSigPfx) - - if isptr { - t = reflect.PtrTo(t) - } - if encode { - x.line(") CodecEncodeSelf(e *" + x.cpfx + "Encoder) {") - x.genRequiredMethodVars(true) - if t0.Kind() == reflect.Struct { - x.linef("if z.EncBasicHandle().CheckCircularRef { z.EncEncode(%s); return }", genTopLevelVarName) - } - x.encVar(genTopLevelVarName, t) - } else { - x.line(") CodecDecodeSelf(d *" + x.cpfx + "Decoder) {") - x.genRequiredMethodVars(false) - // do not use decVar, as there is no need to check TryDecodeAsNil - // or way to elegantly handle that, and also setting it to a - // non-nil value doesn't affect the pointer passed. - // x.decVar(genTopLevelVarName, t, false) - x.dec(genTopLevelVarName, t0, true) - } - x.line("}") - x.line("") - - if encode || t0.Kind() != reflect.Struct { - return - } - - // write is containerMap - x.out(fnSigPfx) - x.line(") codecDecodeSelfFromMap(l int, d *" + x.cpfx + "Decoder) {") - x.genRequiredMethodVars(false) - x.decStructMap(genTopLevelVarName, "l", rt2id(t0), t0) - x.line("}") - x.line("") - - // write containerArray - x.out(fnSigPfx) - x.line(") codecDecodeSelfFromArray(l int, d *" + x.cpfx + "Decoder) {") - x.genRequiredMethodVars(false) - x.decStructArray(genTopLevelVarName, "l", "return", rt2id(t0), t0) - x.line("}") - x.line("") - -} - -// used for chan, array, slice, map -func (x *genRunner) xtraSM(varname string, t reflect.Type, ti *typeInfo, encode, isptr bool) { - var ptrPfx, addrPfx string - if isptr { - ptrPfx = "*" - } else { - addrPfx = "&" - } - if encode { - x.linef("h.enc%s((%s%s)(%s), e)", x.genMethodNameT(t), ptrPfx, x.genTypeName(t), varname) - } else { - x.linef("h.dec%s((*%s)(%s%s), d)", x.genMethodNameT(t), x.genTypeName(t), addrPfx, varname) - } - x.registerXtraT(t, ti) -} - -func (x *genRunner) registerXtraT(t reflect.Type, ti *typeInfo) { - // recursively register the types - tk := t.Kind() - if tk == reflect.Ptr { - x.registerXtraT(t.Elem(), nil) - return - } - if _, ok := x.tm[t]; ok { - return - } - - switch tk { - case reflect.Chan, reflect.Slice, reflect.Array, reflect.Map: - default: - return - } - // only register the type if it will not default to a fast-path - if ti == nil { - ti = x.ti.get(rt2id(t), t) - } - if _, rtidu := genFastpathUnderlying(t, ti.rtid, ti); fastpathAvIndex(rtidu) != -1 { - return - } - x.tm[t] = struct{}{} - x.ts = append(x.ts, t) - // check if this refers to any xtra types eg. a slice of array: add the array - x.registerXtraT(t.Elem(), nil) - if tk == reflect.Map { - x.registerXtraT(t.Key(), nil) - } -} - -// encVar will encode a variable. -// The parameter, t, is the reflect.Type of the variable itself -func (x *genRunner) encVar(varname string, t reflect.Type) { - var checkNil bool - // case reflect.Ptr, reflect.Interface, reflect.Slice, reflect.Map, reflect.Chan: - // do not include checkNil for slice and maps, as we already checkNil below it - switch t.Kind() { - case reflect.Ptr, reflect.Interface, reflect.Chan: - checkNil = true - } - x.encVarChkNil(varname, t, checkNil) -} - -func (x *genRunner) encVarChkNil(varname string, t reflect.Type, checkNil bool) { - if checkNil { - x.linef("if %s == nil { r.EncodeNil() } else {", varname) - } - - switch t.Kind() { - case reflect.Ptr: - telem := t.Elem() - tek := telem.Kind() - if tek == reflect.Array || (tek == reflect.Struct && telem != timeTyp) { - x.enc(varname, genNonPtr(t), true) - break - } - i := x.varsfx() - x.line(genTempVarPfx + i + " := *" + varname) - x.enc(genTempVarPfx+i, genNonPtr(t), false) - case reflect.Struct, reflect.Array: - if t == timeTyp { - x.enc(varname, t, false) - break - } - i := x.varsfx() - x.line(genTempVarPfx + i + " := &" + varname) - x.enc(genTempVarPfx+i, t, true) - default: - x.enc(varname, t, false) - } - - if checkNil { - x.line("}") - } -} - -// enc will encode a variable (varname) of type t, where t represents T. -// if t is !time.Time and t is of kind reflect.Struct or reflect.Array, varname is of type *T -// (to prevent copying), -// else t is of type T -func (x *genRunner) enc(varname string, t reflect.Type, isptr bool) { - rtid := rt2id(t) - ti2 := x.ti.get(rtid, t) - // We call CodecEncodeSelf if one of the following are honored: - // - the type already implements Selfer, call that - // - the type has a Selfer implementation just created, use that - // - the type is in the list of the ones we will generate for, but it is not currently being generated - - mi := x.varsfx() - // tptr := reflect.PtrTo(t) - // tk := t.Kind() - - // check if - // - type is time.Time, RawExt, Raw - // - the type implements (Text|JSON|Binary)(Unm|M)arshal - - var hasIf genIfClause - defer hasIf.end(x) // end if block (if necessary) - - var ptrPfx, addrPfx string - if isptr { - ptrPfx = "*" - } else { - addrPfx = "&" - } - - if t == timeTyp { - x.linef("%s z.EncBasicHandle().TimeBuiltin() { r.EncodeTime(%s%s)", hasIf.c(false), ptrPfx, varname) - // return - } - if t == rawTyp { - x.linef("%s z.EncRaw(%s%s)", hasIf.c(true), ptrPfx, varname) - return - } - if t == rawExtTyp { - x.linef("%s r.EncodeRawExt(%s%s)", hasIf.c(true), addrPfx, varname) - return - } - // only check for extensions if extensions are configured, - // and the type is named, and has a packagePath, - // and this is not the CodecEncodeSelf or CodecDecodeSelf method (i.e. it is not a Selfer) - if !x.nx && varname != genTopLevelVarName && t != genStringDecAsBytesTyp && - t != genStringDecZCTyp && genImportPath(t) != "" && t.Name() != "" { - yy := fmt.Sprintf("%sxt%s", genTempVarPfx, mi) - x.linef("%s %s := z.Extension(%s); %s != nil { z.EncExtension(%s, %s) ", - hasIf.c(false), yy, varname, yy, varname, yy) - } - - if x.checkForSelfer(t, varname) { - if ti2.flagSelfer { - x.linef("%s %s.CodecEncodeSelf(e)", hasIf.c(true), varname) - return - } - if ti2.flagSelferPtr { - if isptr { - x.linef("%s %s.CodecEncodeSelf(e)", hasIf.c(true), varname) - } else { - x.linef("%s %ssf%s := &%s", hasIf.c(true), genTempVarPfx, mi, varname) - x.linef("%ssf%s.CodecEncodeSelf(e)", genTempVarPfx, mi) - } - return - } - - if _, ok := x.te[rtid]; ok { - x.linef("%s %s.CodecEncodeSelf(e)", hasIf.c(true), varname) - return - } - } - - inlist := false - for _, t0 := range x.t { - if t == t0 { - inlist = true - if x.checkForSelfer(t, varname) { - x.linef("%s %s.CodecEncodeSelf(e)", hasIf.c(true), varname) - return - } - break - } - } - - var rtidAdded bool - if t == x.tc { - x.te[rtid] = true - rtidAdded = true - } - - if ti2.flagBinaryMarshaler { - x.linef("%s z.EncBinary() { z.EncBinaryMarshal(%s%v) ", hasIf.c(false), ptrPfx, varname) - } else if ti2.flagBinaryMarshalerPtr { - x.linef("%s z.EncBinary() { z.EncBinaryMarshal(%s%v) ", hasIf.c(false), addrPfx, varname) - } - - if ti2.flagJsonMarshaler { - x.linef("%s !z.EncBinary() && z.IsJSONHandle() { z.EncJSONMarshal(%s%v) ", hasIf.c(false), ptrPfx, varname) - } else if ti2.flagJsonMarshalerPtr { - x.linef("%s !z.EncBinary() && z.IsJSONHandle() { z.EncJSONMarshal(%s%v) ", hasIf.c(false), addrPfx, varname) - } else if ti2.flagTextMarshaler { - x.linef("%s !z.EncBinary() { z.EncTextMarshal(%s%v) ", hasIf.c(false), ptrPfx, varname) - } else if ti2.flagTextMarshalerPtr { - x.linef("%s !z.EncBinary() { z.EncTextMarshal(%s%v) ", hasIf.c(false), addrPfx, varname) - } - - x.lineIf(hasIf.c(true)) - - switch t.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - x.line("r.EncodeInt(int64(" + varname + "))") - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - x.line("r.EncodeUint(uint64(" + varname + "))") - case reflect.Float32: - x.line("r.EncodeFloat32(float32(" + varname + "))") - case reflect.Float64: - x.line("r.EncodeFloat64(float64(" + varname + "))") - case reflect.Complex64: - x.linef("z.EncEncodeComplex64(complex64(%s))", varname) - case reflect.Complex128: - x.linef("z.EncEncodeComplex128(complex128(%s))", varname) - case reflect.Bool: - x.line("r.EncodeBool(bool(" + varname + "))") - case reflect.String: - x.linef("r.EncodeString(string(%s))", varname) - case reflect.Chan: - x.xtraSM(varname, t, ti2, true, false) - // x.encListFallback(varname, rtid, t) - case reflect.Array: - _, rtidu := genFastpathUnderlying(t, rtid, ti2) - if fastpathAvIndex(rtidu) != -1 { - g := x.newFastpathGenV(ti2.key) - x.linef("z.F.%sV((%s)(%s[:]), e)", g.MethodNamePfx("Enc", false), x.genTypeName(ti2.key), varname) - } else { - x.xtraSM(varname, t, ti2, true, true) - } - case reflect.Slice: - // if nil, call dedicated function - // if a []byte, call dedicated function - // if a known fastpath slice, call dedicated function - // else write encode function in-line. - // - if elements are primitives or Selfers, call dedicated function on each member. - // - else call Encoder.encode(XXX) on it. - - x.linef("if %s == nil { r.EncodeNil() } else {", varname) - if rtid == uint8SliceTypId { - x.line("r.EncodeStringBytesRaw([]byte(" + varname + "))") - } else { - tu, rtidu := genFastpathUnderlying(t, rtid, ti2) - if fastpathAvIndex(rtidu) != -1 { - g := x.newFastpathGenV(tu) - if rtid == rtidu { - x.linef("z.F.%sV(%s, e)", g.MethodNamePfx("Enc", false), varname) - } else { - x.linef("z.F.%sV((%s)(%s), e)", g.MethodNamePfx("Enc", false), x.genTypeName(tu), varname) - } - } else { - x.xtraSM(varname, t, ti2, true, false) - } - } - x.linef("} // end block: if %s slice == nil", varname) - case reflect.Map: - // if nil, call dedicated function - // if a known fastpath map, call dedicated function - // else write encode function in-line. - // - if elements are primitives or Selfers, call dedicated function on each member. - // - else call Encoder.encode(XXX) on it. - x.linef("if %s == nil { r.EncodeNil() } else {", varname) - tu, rtidu := genFastpathUnderlying(t, rtid, ti2) - if fastpathAvIndex(rtidu) != -1 { - g := x.newFastpathGenV(tu) - if rtid == rtidu { - x.linef("z.F.%sV(%s, e)", g.MethodNamePfx("Enc", false), varname) - } else { - x.linef("z.F.%sV((%s)(%s), e)", g.MethodNamePfx("Enc", false), x.genTypeName(tu), varname) - } - } else { - x.xtraSM(varname, t, ti2, true, false) - } - x.linef("} // end block: if %s map == nil", varname) - case reflect.Struct: - if !inlist { - delete(x.te, rtid) - x.line("z.EncFallback(" + varname + ")") - break - } - x.encStruct(varname, rtid, t) - default: - if rtidAdded { - delete(x.te, rtid) - } - x.line("z.EncFallback(" + varname + ")") - } -} - -func (x *genRunner) encZero(t reflect.Type) { - switch t.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - x.line("r.EncodeInt(0)") - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - x.line("r.EncodeUint(0)") - case reflect.Float32: - x.line("r.EncodeFloat32(0)") - case reflect.Float64: - x.line("r.EncodeFloat64(0)") - case reflect.Complex64: - x.line("z.EncEncodeComplex64(0)") - case reflect.Complex128: - x.line("z.EncEncodeComplex128(0)") - case reflect.Bool: - x.line("r.EncodeBool(false)") - case reflect.String: - x.linef(`r.EncodeString("")`) - default: - x.line("r.EncodeNil()") - } -} - -func genOmitEmptyLinePreChecks(varname string, t reflect.Type, si *structFieldInfo, omitline *genBuf, oneLevel bool) (t2 reflect.StructField) { - // xdebug2f("calling genOmitEmptyLinePreChecks on: %v", t) - t2typ := t - varname3 := varname - // go through the loop, record the t2 field explicitly, - // and gather the omit line if embedded in pointers. - fullpath := si.path.fullpath() - for i, path := range fullpath { - for t2typ.Kind() == reflect.Ptr { - t2typ = t2typ.Elem() - } - t2 = t2typ.Field(int(path.index)) - t2typ = t2.Type - varname3 = varname3 + "." + t2.Name - // do not include actual field in the omit line. - // that is done subsequently (right after - below). - if i+1 < len(fullpath) && t2typ.Kind() == reflect.Ptr { - omitline.s(varname3).s(" != nil && ") - } - if oneLevel { - break - } - } - return -} - -func (x *genRunner) doEncOmitEmptyLine(t2 reflect.StructField, varname string, buf *genBuf) { - x.f = 0 - x.encOmitEmptyLine(t2, varname, buf) -} - -func (x *genRunner) encOmitEmptyLine(t2 reflect.StructField, varname string, buf *genBuf) { - // xdebugf("calling encOmitEmptyLine on: %v", t2.Type) - // smartly check omitEmpty on a struct type, as it may contain uncomparable map/slice/etc. - // also, for maps/slices, check if len ! 0 (not if == zero value) - varname2 := varname + "." + t2.Name - switch t2.Type.Kind() { - case reflect.Struct: - rtid2 := rt2id(t2.Type) - ti2 := x.ti.get(rtid2, t2.Type) - // xdebugf(">>>> structfield: omitempty: type: %s, field: %s\n", t2.Type.Name(), t2.Name) - if ti2.rtid == timeTypId { - buf.s("!(").s(varname2).s(".IsZero())") - break - } - if ti2.flagIsZeroerPtr || ti2.flagIsZeroer { - buf.s("!(").s(varname2).s(".IsZero())") - break - } - if t2.Type.Implements(isCodecEmptyerTyp) { - buf.s("!(").s(varname2).s(".IsCodecEmpty())") - break - } - _, ok := x.tz[rtid2] - if ok { - buf.s("!(").s(varname2).s(".IsCodecEmpty())") - break - } - // if we *should* create a IsCodecEmpty for it, but haven't yet, add it here - // _, ok = x.ty[rtid2] - if genImportPath(t2.Type) == x.bp { - x.ty[t2.Type] = struct{}{} - buf.s("!(").s(varname2).s(".IsCodecEmpty())") - break - } - if ti2.flagComparable { - buf.s(varname2).s(" != ").s(x.genZeroValueR(t2.Type)) - break - } - // buf.s("(") - buf.s(x.sayFalse()) // buf.s("false") - var wrote bool - for i, n := 0, t2.Type.NumField(); i < n; i++ { - f := t2.Type.Field(i) - if f.PkgPath != "" { // unexported - continue - } - buf.s(" || ") - x.encOmitEmptyLine(f, varname2, buf) - wrote = true - } - if !wrote { - buf.s(" || ").s(x.sayTrue()) - } - //buf.s(")") - case reflect.Bool: - buf.s("bool(").s(varname2).s(")") - case reflect.Map, reflect.Slice, reflect.Chan: - buf.s("len(").s(varname2).s(") != 0") - case reflect.Array: - tlen := t2.Type.Len() - if tlen == 0 { - buf.s(x.sayFalse()) - } else if t2.Type.Comparable() { - buf.s(varname2).s(" != ").s(x.genZeroValueR(t2.Type)) - } else { // then we cannot even compare the individual values - // TODO use playground to check if you can compare to a - // zero value of an array, even if array not comparable. - buf.s(x.sayTrue()) - } - default: - buf.s(varname2).s(" != ").s(x.genZeroValueR(t2.Type)) - } -} - -func (x *genRunner) encStruct(varname string, rtid uintptr, t reflect.Type) { - // Use knowledge from structfieldinfo (mbs, encodable fields. Ignore omitempty. ) - // replicate code in kStruct i.e. for each field, deref type to non-pointer, and call x.enc on it - - // if t === type currently running selfer on, do for all - ti := x.ti.get(rtid, t) - i := x.varsfx() - // sepVarname := genTempVarPfx + "sep" + i - numfieldsvar := genTempVarPfx + "q" + i - ti2arrayvar := genTempVarPfx + "r" + i - struct2arrvar := genTempVarPfx + "2arr" + i - - tisfi := ti.sfi.source() // always use sequence from file. decStruct expects same thing. - - type genFQN struct { - i string - fqname string - nilLine genBuf - nilVar string - canNil bool - sf reflect.StructField - } - - genFQNs := make([]genFQN, len(tisfi)) - si2Pos := make(map[*structFieldInfo]int) // stores position in sorted structFieldInfos - - for j, si := range tisfi { - si2Pos[si] = j - q := &genFQNs[j] - q.i = x.varsfx() - q.nilVar = genTempVarPfx + "n" + q.i - q.canNil = false - q.fqname = varname - { - t2typ := t - fullpath := si.path.fullpath() - for _, path := range fullpath { - for t2typ.Kind() == reflect.Ptr { - t2typ = t2typ.Elem() - } - q.sf = t2typ.Field(int(path.index)) - t2typ = q.sf.Type - q.fqname += "." + q.sf.Name - if t2typ.Kind() == reflect.Ptr { - if !q.canNil { - q.nilLine.f("%s == nil", q.fqname) - q.canNil = true - } else { - q.nilLine.f(" || %s == nil", q.fqname) - } - } - } - } - } - - // x.line(sepVarname + " := !z.EncBinary()") - x.linef("%s := z.EncBasicHandle().StructToArray", struct2arrvar) - // x.linef("_, _ = %s, %s", sepVarname, struct2arrvar) - x.linef("_ = %s", struct2arrvar) - x.linef("const %s bool = %v // struct tag has 'toArray'", ti2arrayvar, ti.toArray) - - for j := range genFQNs { - q := &genFQNs[j] - if q.canNil { - x.linef("var %s bool = %s", q.nilVar, q.nilLine.v()) - } - } - - // var nn int - // due to omitEmpty, we need to calculate the - // number of non-empty things we write out first. - // This is required as we need to pre-determine the size of the container, - // to support length-prefixing. - omitEmptySometimes := x.omitEmptyWhen == nil - omitEmptyAlways := (x.omitEmptyWhen != nil && *(x.omitEmptyWhen)) - // omitEmptyNever := (x.omitEmptyWhen != nil && !*(x.omitEmptyWhen)) - - toArraySometimes := x.toArrayWhen == nil - toArrayAlways := (x.toArrayWhen != nil && *(x.toArrayWhen)) - toArrayNever := (x.toArrayWhen != nil && !(*(x.toArrayWhen))) - - if (omitEmptySometimes && ti.anyOmitEmpty) || omitEmptyAlways { - x.linef("var %s = [%v]bool{ // should field at this index be written?", numfieldsvar, len(tisfi)) - - for _, si := range tisfi { - if omitEmptySometimes && !si.path.omitEmpty { - x.linef("true, // %s", si.encName) // si.fieldName) - continue - } - var omitline genBuf - t2 := genOmitEmptyLinePreChecks(varname, t, si, &omitline, false) - x.doEncOmitEmptyLine(t2, varname, &omitline) - x.linef("%s, // %s", omitline.v(), si.encName) // si.fieldName) - } - x.line("}") - x.linef("_ = %s", numfieldsvar) - } - - if toArraySometimes { - x.linef("if %s || %s {", ti2arrayvar, struct2arrvar) // if ti.toArray - } - if toArraySometimes || toArrayAlways { - x.linef("z.EncWriteArrayStart(%d)", len(tisfi)) - - for j, si := range tisfi { - doOmitEmptyCheck := (omitEmptySometimes && si.path.omitEmpty) || omitEmptyAlways - q := &genFQNs[j] - // if the type of the field is a Selfer, or one of the ones - if q.canNil { - x.linef("if %s { z.EncWriteArrayElem(); r.EncodeNil() } else { ", q.nilVar) - } - x.linef("z.EncWriteArrayElem()") - if doOmitEmptyCheck { - x.linef("if %s[%v] {", numfieldsvar, j) - } - x.encVarChkNil(q.fqname, q.sf.Type, false) - if doOmitEmptyCheck { - x.linef("} else {") - x.encZero(q.sf.Type) - x.linef("}") - } - if q.canNil { - x.line("}") - } - } - - x.line("z.EncWriteArrayEnd()") - } - if toArraySometimes { - x.linef("} else {") // if not ti.toArray - } - if toArraySometimes || toArrayNever { - if (omitEmptySometimes && ti.anyOmitEmpty) || omitEmptyAlways { - x.linef("var %snn%s int", genTempVarPfx, i) - x.linef("for _, b := range %s { if b { %snn%s++ } }", numfieldsvar, genTempVarPfx, i) - x.linef("z.EncWriteMapStart(%snn%s)", genTempVarPfx, i) - x.linef("%snn%s = %v", genTempVarPfx, i, 0) - } else { - x.linef("z.EncWriteMapStart(%d)", len(tisfi)) - } - - fn := func(tisfi []*structFieldInfo) { - // tisfi here may be source or sorted, so use the src position stored elsewhere - for _, si := range tisfi { - pos := si2Pos[si] - q := &genFQNs[pos] - doOmitEmptyCheck := (omitEmptySometimes && si.path.omitEmpty) || omitEmptyAlways - if doOmitEmptyCheck { - x.linef("if %s[%v] {", numfieldsvar, pos) - } - x.linef("z.EncWriteMapElemKey()") - - // emulate EncStructFieldKey - switch ti.keyType { - case valueTypeInt: - x.linef("r.EncodeInt(z.M.Int(strconv.ParseInt(`%s`, 10, 64)))", si.encName) - case valueTypeUint: - x.linef("r.EncodeUint(z.M.Uint(strconv.ParseUint(`%s`, 10, 64)))", si.encName) - case valueTypeFloat: - x.linef("r.EncodeFloat64(z.M.Float(strconv.ParseFloat(`%s`, 64)))", si.encName) - default: // string - if x.jsonOnlyWhen == nil { - if si.path.encNameAsciiAlphaNum { - x.linef(`if z.IsJSONHandle() { z.EncWr().WriteStr("\"%s\"") } else { `, si.encName) - } - x.linef("r.EncodeString(`%s`)", si.encName) - if si.path.encNameAsciiAlphaNum { - x.linef("}") - } - } else if *(x.jsonOnlyWhen) { - if si.path.encNameAsciiAlphaNum { - x.linef(`z.EncWr().WriteStr("\"%s\"")`, si.encName) - } else { - x.linef("r.EncodeString(`%s`)", si.encName) - } - } else { - x.linef("r.EncodeString(`%s`)", si.encName) - } - } - x.line("z.EncWriteMapElemValue()") - if q.canNil { - x.line("if " + q.nilVar + " { r.EncodeNil() } else { ") - x.encVarChkNil(q.fqname, q.sf.Type, false) - x.line("}") - } else { - x.encVarChkNil(q.fqname, q.sf.Type, false) - } - if doOmitEmptyCheck { - x.line("}") - } - } - } - - if genStructCanonical { - x.linef("if z.EncBasicHandle().Canonical {") // if Canonical block - fn(ti.sfi.sorted()) - x.linef("} else {") // else !Canonical block - fn(ti.sfi.source()) - x.linef("}") // end if Canonical block - } else { - fn(tisfi) - } - - x.line("z.EncWriteMapEnd()") - } - if toArraySometimes { - x.linef("} ") // end if/else ti.toArray - } -} - -func (x *genRunner) encListFallback(varname string, t reflect.Type) { - x.linef("if %s == nil { r.EncodeNil(); return }", varname) - elemBytes := t.Elem().Kind() == reflect.Uint8 - if t.AssignableTo(uint8SliceTyp) { - x.linef("r.EncodeStringBytesRaw([]byte(%s))", varname) - return - } - if t.Kind() == reflect.Array && elemBytes { - x.linef("r.EncodeStringBytesRaw(((*[%d]byte)(%s))[:])", t.Len(), varname) - return - } - i := x.varsfx() - if t.Kind() == reflect.Chan { - type ts struct { - Label, Chan, Slice, Sfx string - } - tm, err := template.New("").Parse(genEncChanTmpl) - genCheckErr(err) - x.linef("if %s == nil { r.EncodeNil() } else { ", varname) - x.linef("var sch%s []%s", i, x.genTypeName(t.Elem())) - err = tm.Execute(x.w, &ts{"Lsch" + i, varname, "sch" + i, i}) - genCheckErr(err) - if elemBytes { - x.linef("r.EncodeStringBytesRaw([]byte(%s))", "sch"+i) - x.line("}") - return - } - varname = "sch" + i - } - - x.line("z.EncWriteArrayStart(len(" + varname + "))") - - // x.linef("for _, %sv%s := range %s {", genTempVarPfx, i, varname) - // x.linef("z.EncWriteArrayElem()") - // x.encVar(genTempVarPfx+"v"+i, t.Elem()) - // x.line("}") - - x.linef("for %sv%s := range %s {", genTempVarPfx, i, varname) - x.linef("z.EncWriteArrayElem()") - x.encVar(fmt.Sprintf("%s[%sv%s]", varname, genTempVarPfx, i), t.Elem()) - x.line("}") - - x.line("z.EncWriteArrayEnd()") - if t.Kind() == reflect.Chan { - x.line("}") - } -} - -func (x *genRunner) encMapFallback(varname string, t reflect.Type) { - x.linef("if %s == nil { r.EncodeNil()", varname) - x.line("} else if z.EncBasicHandle().Canonical {") - - // Solve for easy case accomodated by sort package without reflection i.e. - // map keys of type: float, int, string (pre-defined/builtin types). - // - // To do this, we will get the keys into an array of uint64|float64|string, - // sort them, then write them out, and grab the value and encode it appropriately - tkey := t.Key() - tkind := tkey.Kind() - // tkeybase := tkey - // for tkeybase.Kind() == reflect.Ptr { - // tkeybase = tkeybase.Elem() - // } - // tikey := x.ti.get(rt2id(tkeybase), tkeybase) - - // pre-defined types have a name and no pkgpath and appropriate kind - predeclared := tkey.PkgPath() == "" && tkey.Name() != "" - - canonSortKind := reflect.Invalid - switch tkind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - canonSortKind = reflect.Int64 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - canonSortKind = reflect.Uint64 - case reflect.Float32, reflect.Float64: - canonSortKind = reflect.Float64 - case reflect.String: - canonSortKind = reflect.String - } - - var i string = x.varsfx() - - fnCanonNumBoolStrKind := func() { - if !predeclared { - x.linef("var %svv%s %s", genTempVarPfx, i, x.genTypeName(tkey)) - x.linef("%sencfn%s := z.EncFnGivenAddr(&%svv%s)", genTempVarPfx, i, genTempVarPfx, i) - } - // get the type, get the slice type its mapped to, and complete the code - x.linef("%ss%s := make([]%s, 0, len(%s))", genTempVarPfx, i, canonSortKind, varname) - x.linef("for k, _ := range %s {", varname) - x.linef(" %ss%s = append(%ss%s, %s(k))", genTempVarPfx, i, genTempVarPfx, i, canonSortKind) - x.linef("}") - x.linef("sort.Sort(%s%sSlice(%ss%s))", x.hn, canonSortKind, genTempVarPfx, i) - x.linef("z.EncWriteMapStart(len(%s))", varname) - x.linef("for _, %sv%s := range %ss%s {", genTempVarPfx, i, genTempVarPfx, i) - x.linef(" z.EncWriteMapElemKey()") - if predeclared { - switch tkind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32: - x.linef("r.EncodeInt(int64(%sv%s))", genTempVarPfx, i) - case reflect.Int64: - x.linef("r.EncodeInt(%sv%s)", genTempVarPfx, i) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uintptr: - x.linef("r.EncodeUint(%sv%s)", genTempVarPfx, i) - case reflect.Uint64: - x.linef("r.EncodeUint(uint64(%sv%s))", genTempVarPfx, i) - case reflect.Float32: - x.linef("r.EncodeFloat32(float32(%sv%s))", genTempVarPfx, i) - case reflect.Float64: - x.linef("r.EncodeFloat64(%sv%s)", genTempVarPfx, i) - case reflect.String: - x.linef("r.EncodeString(%sv%s)", genTempVarPfx, i) - } - } else { - x.linef("%svv%s = %s(%sv%s)", genTempVarPfx, i, x.genTypeName(tkey), genTempVarPfx, i) - x.linef("z.EncEncodeNumBoolStrKindGivenAddr(&%svv%s, %sencfn%s)", genTempVarPfx, i, genTempVarPfx, i) - } - x.linef(" z.EncWriteMapElemValue()") - vname := genTempVarPfx + "e" + i - if predeclared { - x.linef("%s := %s[%s(%sv%s)]", vname, varname, x.genTypeName(tkey), genTempVarPfx, i) - } else { - x.linef("%s := %s[%svv%s]", vname, varname, genTempVarPfx, i) - } - x.encVar(vname, t.Elem()) - x.linef("}") - - x.line("z.EncWriteMapEnd()") - - } - - // if canonSortKind != reflect.Invalid && !tikey.flagMarshalInterface { - // if predeclared { - // fnCanonNumBoolStrKind() - // } else { - // // handle if an extension - // x.linef("if z.Extension(%s(%s)) != nil { z.EncEncodeMapNonNil(%s) } else {", - // x.genTypeName(tkey), x.genZeroValueR(tkey), varname) - // fnCanonNumBoolStrKind() - // x.line("}") - // } - // } else { - // x.linef("z.EncEncodeMapNonNil(%s)", varname) - // } - - if canonSortKind != reflect.Invalid { - fnCanonNumBoolStrKind() - } else { - x.linef("z.EncEncodeMapNonNil(%s)", varname) - } - - x.line("} else {") - - x.linef("z.EncWriteMapStart(len(%s))", varname) - x.linef("for %sk%s, %sv%s := range %s {", genTempVarPfx, i, genTempVarPfx, i, varname) - x.linef("z.EncWriteMapElemKey()") - x.encVar(genTempVarPfx+"k"+i, t.Key()) - x.line("z.EncWriteMapElemValue()") - x.encVar(genTempVarPfx+"v"+i, t.Elem()) - x.line("}") - x.line("z.EncWriteMapEnd()") - - x.line("}") -} - -func (x *genRunner) decVarInitPtr(varname, nilvar string, t reflect.Type, si *structFieldInfo, - newbuf, nilbuf *genBuf) (varname3 string, t2 reflect.StructField) { - //we must accommodate anonymous fields, where the embedded field is a nil pointer in the value. - // t2 = t.FieldByIndex(si.is) - varname3 = varname - t2typ := t - t2kind := t2typ.Kind() - var nilbufed bool - if si != nil { - fullpath := si.path.fullpath() - for _, path := range fullpath { - // only one-level pointers can be seen in a type - if t2typ.Kind() == reflect.Ptr { - t2typ = t2typ.Elem() - } - t2 = t2typ.Field(int(path.index)) - t2typ = t2.Type - varname3 = varname3 + "." + t2.Name - t2kind = t2typ.Kind() - if t2kind != reflect.Ptr { - continue - } - if newbuf != nil { - if len(newbuf.buf) > 0 { - newbuf.s("\n") - } - newbuf.f("if %s == nil { %s = new(%s) }", varname3, varname3, x.genTypeName(t2typ.Elem())) - } - if nilbuf != nil { - if !nilbufed { - nilbuf.s("if ").s(varname3).s(" != nil") - nilbufed = true - } else { - nilbuf.s(" && ").s(varname3).s(" != nil") - } - } - } - } - if nilbuf != nil { - if nilbufed { - nilbuf.s(" { ").s("// remove the if-true\n") - } - if nilvar != "" { - nilbuf.s(nilvar).s(" = true") - } else if tk := t2typ.Kind(); tk == reflect.Ptr { - if strings.IndexByte(varname3, '.') != -1 || strings.IndexByte(varname3, '[') != -1 { - nilbuf.s(varname3).s(" = nil") - } else { - nilbuf.s("*").s(varname3).s(" = ").s(x.genZeroValueR(t2typ.Elem())) - } - } else { - nilbuf.s(varname3).s(" = ").s(x.genZeroValueR(t2typ)) - } - if nilbufed { - nilbuf.s("}") - } - } - return -} - -// decVar takes a variable called varname, of type t -func (x *genRunner) decVarMain(varname, rand string, t reflect.Type, checkNotNil bool) { - // We only encode as nil if a nillable value. - // This removes some of the wasted checks for TryDecodeAsNil. - // We need to think about this more, to see what happens if omitempty, etc - // cause a nil value to be stored when something is expected. - // This could happen when decoding from a struct encoded as an array. - // For that, decVar should be called with canNil=true, to force true as its value. - var varname2 string - if t.Kind() != reflect.Ptr { - if t.PkgPath() != "" || !x.decTryAssignPrimitive(varname, t, false) { - x.dec(varname, t, false) - } - } else { - if checkNotNil { - x.linef("if %s == nil { %s = new(%s) }", varname, varname, x.genTypeName(t.Elem())) - } - // Ensure we set underlying ptr to a non-nil value (so we can deref to it later). - // There's a chance of a **T in here which is nil. - var ptrPfx string - for t = t.Elem(); t.Kind() == reflect.Ptr; t = t.Elem() { - ptrPfx += "*" - if checkNotNil { - x.linef("if %s%s == nil { %s%s = new(%s)}", ptrPfx, varname, ptrPfx, varname, x.genTypeName(t)) - } - } - // Should we create temp var if a slice/map indexing? No. dec(...) can now handle it. - - if ptrPfx == "" { - x.dec(varname, t, true) - } else { - varname2 = genTempVarPfx + "z" + rand - x.line(varname2 + " := " + ptrPfx + varname) - x.dec(varname2, t, true) - } - } -} - -// decVar takes a variable called varname, of type t -func (x *genRunner) decVar(varname, nilvar string, t reflect.Type, canBeNil, checkNotNil bool) { - - // We only encode as nil if a nillable value. - // This removes some of the wasted checks for TryDecodeAsNil. - // We need to think about this more, to see what happens if omitempty, etc - // cause a nil value to be stored when something is expected. - // This could happen when decoding from a struct encoded as an array. - // For that, decVar should be called with canNil=true, to force true as its value. - - i := x.varsfx() - if t.Kind() == reflect.Ptr { - var buf genBuf - x.decVarInitPtr(varname, nilvar, t, nil, nil, &buf) - x.linef("if r.TryNil() { %s } else {", buf.buf) - x.decVarMain(varname, i, t, checkNotNil) - x.line("} ") - } else { - x.decVarMain(varname, i, t, checkNotNil) - } -} - -// dec will decode a variable (varname) of type t or ptrTo(t) if isptr==true. -func (x *genRunner) dec(varname string, t reflect.Type, isptr bool) { - // assumptions: - // - the varname is to a pointer already. No need to take address of it - // - t is always a baseType T (not a *T, etc). - rtid := rt2id(t) - ti2 := x.ti.get(rtid, t) - - // check if - // - type is time.Time, Raw, RawExt - // - the type implements (Text|JSON|Binary)(Unm|M)arshal - - mi := x.varsfx() - - var hasIf genIfClause - defer hasIf.end(x) - - var ptrPfx, addrPfx string - if isptr { - ptrPfx = "*" - } else { - addrPfx = "&" - } - if t == timeTyp { - x.linef("%s z.DecBasicHandle().TimeBuiltin() { %s%v = r.DecodeTime()", hasIf.c(false), ptrPfx, varname) - // return - } - if t == rawTyp { - x.linef("%s %s%v = z.DecRaw()", hasIf.c(true), ptrPfx, varname) - return - } - - if t == rawExtTyp { - x.linef("%s r.DecodeExt(%s%v, 0, nil)", hasIf.c(true), addrPfx, varname) - return - } - - // only check for extensions if extensions are configured, - // and the type is named, and has a packagePath, - // and this is not the CodecEncodeSelf or CodecDecodeSelf method (i.e. it is not a Selfer) - // xdebugf("genRunner.dec: varname: %v, t: %v, genImportPath: %v, t.Name: %v", varname, t, genImportPath(t), t.Name()) - if !x.nx && varname != genTopLevelVarName && t != genStringDecAsBytesTyp && - t != genStringDecZCTyp && genImportPath(t) != "" && t.Name() != "" { - // first check if extensions are configued, before doing the interface conversion - yy := fmt.Sprintf("%sxt%s", genTempVarPfx, mi) - x.linef("%s %s := z.Extension(%s); %s != nil { z.DecExtension(%s%s, %s) ", hasIf.c(false), yy, varname, yy, addrPfx, varname, yy) - } - - if x.checkForSelfer(t, varname) { - if ti2.flagSelfer { - x.linef("%s %s.CodecDecodeSelf(d)", hasIf.c(true), varname) - return - } - if ti2.flagSelferPtr { - x.linef("%s %s.CodecDecodeSelf(d)", hasIf.c(true), varname) - return - } - if _, ok := x.td[rtid]; ok { - x.linef("%s %s.CodecDecodeSelf(d)", hasIf.c(true), varname) - return - } - } - inlist := false - for _, t0 := range x.t { - if t == t0 { - inlist = true - if x.checkForSelfer(t, varname) { - x.linef("%s %s.CodecDecodeSelf(d)", hasIf.c(true), varname) - return - } - break - } - } +const ( + genTopLevelVarName = "x" - var rtidAdded bool - if t == x.tc { - x.td[rtid] = true - rtidAdded = true - } + // genFastpathCanonical configures whether we support Canonical in fast path. Low savings. + // + // MARKER: This MUST ALWAYS BE TRUE. fastpath.go.tmpl doesn't handle it being false. + genFastpathCanonical = true - if ti2.flagBinaryUnmarshaler { - x.linef("%s z.DecBinary() { z.DecBinaryUnmarshal(%s%v) ", hasIf.c(false), ptrPfx, varname) - } else if ti2.flagBinaryUnmarshalerPtr { - x.linef("%s z.DecBinary() { z.DecBinaryUnmarshal(%s%v) ", hasIf.c(false), addrPfx, varname) - } - if ti2.flagJsonUnmarshaler { - x.linef("%s !z.DecBinary() && z.IsJSONHandle() { z.DecJSONUnmarshal(%s%v)", hasIf.c(false), ptrPfx, varname) - } else if ti2.flagJsonUnmarshalerPtr { - x.linef("%s !z.DecBinary() && z.IsJSONHandle() { z.DecJSONUnmarshal(%s%v)", hasIf.c(false), addrPfx, varname) - } else if ti2.flagTextUnmarshaler { - x.linef("%s !z.DecBinary() { z.DecTextUnmarshal(%s%v)", hasIf.c(false), ptrPfx, varname) - } else if ti2.flagTextUnmarshalerPtr { - x.linef("%s !z.DecBinary() { z.DecTextUnmarshal(%s%v)", hasIf.c(false), addrPfx, varname) - } + // genFastpathTrimTypes configures whether we trim uncommon fastpath types. + genFastpathTrimTypes = true +) - x.lineIf(hasIf.c(true)) +var genFormats = []string{"Json", "Cbor", "Msgpack", "Binc", "Simple"} - if x.decTryAssignPrimitive(varname, t, isptr) { - return - } +var ( + errGenAllTypesSamePkg = errors.New("All types must be in the same package") + errGenExpectArrayOrMap = errors.New("unexpected type - expecting array/map/slice") + errGenUnexpectedTypeFastpath = errors.New("fastpath: unexpected type - requires map or slice") - switch t.Kind() { - case reflect.Chan: - x.xtraSM(varname, t, ti2, false, isptr) - case reflect.Array: - _, rtidu := genFastpathUnderlying(t, rtid, ti2) - if fastpathAvIndex(rtidu) != -1 { - g := x.newFastpathGenV(ti2.key) - x.linef("z.F.%sN((%s)(%s[:]), d)", g.MethodNamePfx("Dec", false), x.genTypeName(ti2.key), varname) - } else { - x.xtraSM(varname, t, ti2, false, isptr) - } - case reflect.Slice: - // if a []byte, call dedicated function - // if a known fastpath slice, call dedicated function - // else write encode function in-line. - // - if elements are primitives or Selfers, call dedicated function on each member. - // - else call Encoder.encode(XXX) on it. + // don't use base64, only 63 characters allowed in valid go identifiers + // ie ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ + // + // don't use numbers, as a valid go identifer must start with a letter. + genTypenameEnc = base32.NewEncoding("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef") + genQNameRegex = regexp.MustCompile(`[A-Za-z_.]+`) +) - if rtid == uint8SliceTypId { - x.linef("%s%s = z.DecodeBytesInto(%s(%s[]byte)(%s))", ptrPfx, varname, ptrPfx, ptrPfx, varname) - } else { - tu, rtidu := genFastpathUnderlying(t, rtid, ti2) - if fastpathAvIndex(rtidu) != -1 { - g := x.newFastpathGenV(tu) - if rtid == rtidu { - x.linef("z.F.%sX(%s%s, d)", g.MethodNamePfx("Dec", false), addrPfx, varname) - } else { - x.linef("z.F.%sX((*%s)(%s%s), d)", g.MethodNamePfx("Dec", false), x.genTypeName(tu), addrPfx, varname) - } - } else { - x.xtraSM(varname, t, ti2, false, isptr) - // x.decListFallback(varname, rtid, false, t) - } - } - case reflect.Map: - // if a known fastpath map, call dedicated function - // else write encode function in-line. - // - if elements are primitives or Selfers, call dedicated function on each member. - // - else call Encoder.encode(XXX) on it. +// -------- - tu, rtidu := genFastpathUnderlying(t, rtid, ti2) - if fastpathAvIndex(rtidu) != -1 { - g := x.newFastpathGenV(tu) - if rtid == rtidu { - x.linef("z.F.%sX(%s%s, d)", g.MethodNamePfx("Dec", false), addrPfx, varname) - } else { - x.linef("z.F.%sX((*%s)(%s%s), d)", g.MethodNamePfx("Dec", false), x.genTypeName(tu), addrPfx, varname) - } - } else { - x.xtraSM(varname, t, ti2, false, isptr) - } - case reflect.Struct: - if inlist { - // no need to create temp variable if isptr, or x.F or x[F] - if isptr || strings.IndexByte(varname, '.') != -1 || strings.IndexByte(varname, '[') != -1 { - x.decStruct(varname, rtid, t) - } else { - varname2 := genTempVarPfx + "j" + mi - x.line(varname2 + " := &" + varname) - x.decStruct(varname2, rtid, t) - } - } else { - // delete(x.td, rtid) - x.line("z.DecFallback(" + addrPfx + varname + ", false)") - } - default: - if rtidAdded { - delete(x.te, rtid) - } - x.line("z.DecFallback(" + addrPfx + varname + ", true)") - } +func genCheckErr(err error) { + halt.onerror(err) } -func (x *genRunner) decTryAssignPrimitive(varname string, t reflect.Type, isptr bool) (done bool) { - // This should only be used for exact primitives (ie un-named types). - // Named types may be implementations of Selfer, Unmarshaler, etc. - // They should be handled by dec(...) - - var ptr string - if isptr { - ptr = "*" - } - switch t.Kind() { - case reflect.Int: - x.linef("%s%s = (%s)(z.C.IntV(r.DecodeInt64(), codecSelferBitsize%s))", ptr, varname, x.genTypeName(t), x.xs) - case reflect.Int8: - x.linef("%s%s = (%s)(z.C.IntV(r.DecodeInt64(), 8))", ptr, varname, x.genTypeName(t)) - case reflect.Int16: - x.linef("%s%s = (%s)(z.C.IntV(r.DecodeInt64(), 16))", ptr, varname, x.genTypeName(t)) - case reflect.Int32: - x.linef("%s%s = (%s)(z.C.IntV(r.DecodeInt64(), 32))", ptr, varname, x.genTypeName(t)) - case reflect.Int64: - x.linef("%s%s = (%s)(r.DecodeInt64())", ptr, varname, x.genTypeName(t)) - - case reflect.Uint: - x.linef("%s%s = (%s)(z.C.UintV(r.DecodeUint64(), codecSelferBitsize%s))", ptr, varname, x.genTypeName(t), x.xs) - case reflect.Uint8: - x.linef("%s%s = (%s)(z.C.UintV(r.DecodeUint64(), 8))", ptr, varname, x.genTypeName(t)) - case reflect.Uint16: - x.linef("%s%s = (%s)(z.C.UintV(r.DecodeUint64(), 16))", ptr, varname, x.genTypeName(t)) - case reflect.Uint32: - x.linef("%s%s = (%s)(z.C.UintV(r.DecodeUint64(), 32))", ptr, varname, x.genTypeName(t)) - case reflect.Uint64: - x.linef("%s%s = (%s)(r.DecodeUint64())", ptr, varname, x.genTypeName(t)) - case reflect.Uintptr: - x.linef("%s%s = (%s)(z.C.UintV(r.DecodeUint64(), codecSelferBitsize%s))", ptr, varname, x.genTypeName(t), x.xs) - - case reflect.Float32: - x.linef("%s%s = (%s)(z.DecDecodeFloat32())", ptr, varname, x.genTypeName(t)) - case reflect.Float64: - x.linef("%s%s = (%s)(r.DecodeFloat64())", ptr, varname, x.genTypeName(t)) - - case reflect.Complex64: - x.linef("%s%s = (%s)(complex(z.DecDecodeFloat32(), 0))", ptr, varname, x.genTypeName(t)) - case reflect.Complex128: - x.linef("%s%s = (%s)(complex(r.DecodeFloat64(), 0))", ptr, varname, x.genTypeName(t)) - - case reflect.Bool: - x.linef("%s%s = (%s)(r.DecodeBool())", ptr, varname, x.genTypeName(t)) - case reflect.String: - if t == genStringDecAsBytesTyp { - x.linef("%s%s = r.DecodeStringAsBytes()", ptr, varname) - } else if t == genStringDecZCTyp { - x.linef("%s%s = (string)(z.DecStringZC(r.DecodeStringAsBytes()))", ptr, varname) - } else { - x.linef("%s%s = (%s)(z.DecStringZC(r.DecodeStringAsBytes()))", ptr, varname, x.genTypeName(t)) - } +func genTitleCaseName(s string) string { + switch s { + case "interface{}", "interface {}": + return "Intf" + case "[]byte", "[]uint8", "bytes": + return "Bytes" default: - return false - } - return true -} - -func (x *genRunner) decListFallback(varname string, rtid uintptr, t reflect.Type) { - if t.AssignableTo(uint8SliceTyp) { - x.line("*" + varname + " = z.DecodeBytesInto(*((*[]byte)(" + varname + ")))") - return - } - if t.Kind() == reflect.Array && t.Elem().Kind() == reflect.Uint8 { - x.linef("r.DecodeBytes( ((*[%d]byte)(%s))[:])", t.Len(), varname) - return - } - type tstruc struct { - TempVar string - Sfx string - Rand string - Varname string - CTyp string - Typ string - Immutable bool - Size int - } - telem := t.Elem() - ts := tstruc{genTempVarPfx, x.xs, x.varsfx(), varname, x.genTypeName(t), x.genTypeName(telem), genIsImmutable(telem), int(telem.Size())} - - funcs := make(template.FuncMap) - - funcs["decLineVar"] = func(varname string) string { - x.decVar(varname, "", telem, false, true) - return "" - } - funcs["var"] = func(s string) string { - return ts.TempVar + s + ts.Rand - } - funcs["xs"] = func() string { - return ts.Sfx - } - funcs["zero"] = func() string { - return x.genZeroValueR(telem) - } - funcs["isArray"] = func() bool { - return t.Kind() == reflect.Array - } - funcs["isSlice"] = func() bool { - return t.Kind() == reflect.Slice - } - funcs["isChan"] = func() bool { - return t.Kind() == reflect.Chan - } - tm, err := template.New("").Funcs(funcs).Parse(genDecListTmpl) - genCheckErr(err) - genCheckErr(tm.Execute(x.w, &ts)) -} - -func (x *genRunner) decMapFallback(varname string, rtid uintptr, t reflect.Type) { - type tstruc struct { - TempVar string - Sfx string - Rand string - Varname string - KTyp string - Typ string - Size int - } - telem := t.Elem() - tkey := t.Key() - ts := tstruc{ - genTempVarPfx, x.xs, x.varsfx(), varname, x.genTypeName(tkey), - x.genTypeName(telem), int(telem.Size() + tkey.Size()), - } - - funcs := make(template.FuncMap) - funcs["decElemZero"] = func() string { - return x.genZeroValueR(telem) - } - funcs["decElemKindImmutable"] = func() bool { - return genIsImmutable(telem) - } - funcs["decElemKindPtr"] = func() bool { - return telem.Kind() == reflect.Ptr - } - funcs["decElemKindIntf"] = func() bool { - return telem.Kind() == reflect.Interface - } - funcs["decLineVarKStrBytes"] = func(varname string) string { - x.decVar(varname, "", genStringDecAsBytesTyp, false, true) - return "" - } - funcs["decLineVarKStrZC"] = func(varname string) string { - x.decVar(varname, "", genStringDecZCTyp, false, true) - return "" - } - funcs["decLineVarK"] = func(varname string) string { - x.decVar(varname, "", tkey, false, true) - return "" - } - funcs["decLineVar"] = func(varname, decodedNilVarname string) string { - x.decVar(varname, decodedNilVarname, telem, false, true) - return "" - } - funcs["var"] = func(s string) string { - return ts.TempVar + s + ts.Rand - } - funcs["xs"] = func() string { - return ts.Sfx - } - - tm, err := template.New("").Funcs(funcs).Parse(genDecMapTmpl) - genCheckErr(err) - genCheckErr(tm.Execute(x.w, &ts)) -} - -func (x *genRunner) decStructMapSwitch(kName string, varname string, rtid uintptr, t reflect.Type) { - ti := x.ti.get(rtid, t) - tisfi := ti.sfi.source() // always use sequence from file. decStruct expects same thing. - x.line("switch string(" + kName + ") {") - var newbuf, nilbuf genBuf - for _, si := range tisfi { - x.line("case \"" + si.encName + "\":") - newbuf.reset() - nilbuf.reset() - varname3, t2 := x.decVarInitPtr(varname, "", t, si, &newbuf, &nilbuf) - if len(newbuf.buf) > 0 { - x.linef("if r.TryNil() { %s } else { %s", nilbuf.buf, newbuf.buf) - } - x.decVarMain(varname3, x.varsfx(), t2.Type, false) - if len(newbuf.buf) > 0 { - x.line("}") - } - } - x.line("default:") - // pass the slice here, so that the string will not escape, and maybe save allocation - x.linef("z.DecStructFieldNotFound(-1, string(%s))", kName) - x.linef("} // end switch %s", kName) -} - -func (x *genRunner) decStructMap(varname, lenvarname string, rtid uintptr, t reflect.Type) { - tpfx := genTempVarPfx - ti := x.ti.get(rtid, t) - i := x.varsfx() - kName := tpfx + "s" + i - - x.linef("var %shl%s bool = %s >= 0", tpfx, i, lenvarname) // has length - x.linef("for %sj%s := 0; z.DecContainerNext(%sj%s, %s, %shl%s); %sj%s++ {", - tpfx, i, tpfx, i, lenvarname, tpfx, i, tpfx, i) - - x.line("z.DecReadMapElemKey()") - - // emulate decstructfieldkey - switch ti.keyType { - case valueTypeInt: - x.linef("%s := strconv.AppendInt(z.DecScratchArrayBuffer()[:0], r.DecodeInt64(), 10)", kName) - case valueTypeUint: - x.linef("%s := strconv.AppendUint(z.DecScratchArrayBuffer()[:0], r.DecodeUint64(), 10)", kName) - case valueTypeFloat: - x.linef("%s := strconv.AppendFloat(z.DecScratchArrayBuffer()[:0], r.DecodeFloat64(), 'f', -1, 64)", kName) - default: // string - x.linef("%s := r.DecodeStringAsBytes()", kName) - } - - x.line("z.DecReadMapElemValue()") - x.decStructMapSwitch(kName, varname, rtid, t) - - x.line("} // end for " + tpfx + "j" + i) -} - -func (x *genRunner) decStructArray(varname, lenvarname, breakString string, rtid uintptr, t reflect.Type) { - tpfx := genTempVarPfx - i := x.varsfx() - ti := x.ti.get(rtid, t) - tisfi := ti.sfi.source() // always use sequence from file. decStruct expects same thing. - x.linef("var %sj%s int", tpfx, i) - x.linef("var %sb%s bool", tpfx, i) // break - x.linef("var %shl%s bool = %s >= 0", tpfx, i, lenvarname) // has length - var newbuf, nilbuf genBuf - for _, si := range tisfi { - x.linef("%sb%s = !z.DecContainerNext(%sj%s, %s, %shl%s)", tpfx, i, tpfx, i, lenvarname, tpfx, i) - x.linef("if %sb%s { z.DecReadArrayEnd(); %s }", tpfx, i, breakString) - x.line("z.DecReadArrayElem()") - newbuf.reset() - nilbuf.reset() - varname3, t2 := x.decVarInitPtr(varname, "", t, si, &newbuf, &nilbuf) - if len(newbuf.buf) > 0 { - x.linef("if r.TryNil() { %s } else { %s", nilbuf.buf, newbuf.buf) - } - x.decVarMain(varname3, x.varsfx(), t2.Type, false) - if len(newbuf.buf) > 0 { - x.line("}") - } - x.linef("%sj%s++", tpfx, i) + return strings.ToUpper(s[0:1]) + s[1:] } - // read remaining values and throw away. - x.linef("for ; z.DecContainerNext(%sj%s, %s, %shl%s); %sj%s++ {", - tpfx, i, lenvarname, tpfx, i, tpfx, i) - x.line("z.DecReadArrayElem()") - x.linef(`z.DecStructFieldNotFound(%sj%s - 1, "")`, tpfx, i) - x.line("}") -} - -func (x *genRunner) decStruct(varname string, rtid uintptr, t reflect.Type) { - // varname MUST be a ptr, or a struct field or a slice element. - i := x.varsfx() - x.linef("%sct%s := r.ContainerType()", genTempVarPfx, i) - x.linef("if %sct%s == codecSelferValueTypeNil%s {", genTempVarPfx, i, x.xs) - x.linef("*(%s) = %s{}", varname, x.genTypeName(t)) - x.linef("} else if %sct%s == codecSelferValueTypeMap%s {", genTempVarPfx, i, x.xs) - x.line(genTempVarPfx + "l" + i + " := z.DecReadMapStart()") - x.linef("if %sl%s == 0 {", genTempVarPfx, i) - - x.line("} else { ") - x.linef("%s.codecDecodeSelfFromMap(%sl%s, d)", varname, genTempVarPfx, i) - - x.line("}") - x.line("z.DecReadMapEnd()") - - // else if container is array - x.linef("} else if %sct%s == codecSelferValueTypeArray%s {", genTempVarPfx, i, x.xs) - x.line(genTempVarPfx + "l" + i + " := z.DecReadArrayStart()") - x.linef("if %sl%s != 0 {", genTempVarPfx, i) - x.linef("%s.codecDecodeSelfFromArray(%sl%s, d)", varname, genTempVarPfx, i) - x.line("}") - x.line("z.DecReadArrayEnd()") - // else panic - x.line("} else { ") - x.line("panic(errCodecSelferOnlyMapOrArrayEncodeToStruct" + x.xs + ")") - x.line("} ") } // -------- -type fastpathGenV struct { - // fastpathGenV is either a primitive (Primitive != "") or a map (MapKey != "") or a slice +type genFastpathV struct { + // genFastpathV is either a primitive (Primitive != "") or a map (MapKey != "") or a slice MapKey string Elem string Primitive string @@ -2159,26 +77,7 @@ type fastpathGenV struct { NoCanonical bool } -func (x *genRunner) newFastpathGenV(t reflect.Type) (v fastpathGenV) { - v.NoCanonical = !genFastpathCanonical - switch t.Kind() { - case reflect.Slice, reflect.Array: - te := t.Elem() - v.Elem = x.genTypeName(te) - v.Size = int(te.Size()) - case reflect.Map: - te := t.Elem() - tk := t.Key() - v.Elem = x.genTypeName(te) - v.MapKey = x.genTypeName(tk) - v.Size = int(te.Size() + tk.Size()) - default: - halt.onerror(errGenUnexpectedTypeFastpath) - } - return -} - -func (x *fastpathGenV) MethodNamePfx(prefix string, prim bool) string { +func (x *genFastpathV) MethodNamePfx(prefix string, prim bool) string { var name []byte if prefix != "" { name = append(name, prefix...) @@ -2197,153 +96,14 @@ func (x *fastpathGenV) MethodNamePfx(prefix string, prim bool) string { return string(name) } -// genImportPath returns import path of a non-predeclared named typed, or an empty string otherwise. -// -// This handles the misbehaviour that occurs when 1.5-style vendoring is enabled, -// where PkgPath returns the full path, including the vendoring pre-fix that should have been stripped. -// We strip it here. -func genImportPath(t reflect.Type) (s string) { - s = t.PkgPath() - if genCheckVendor { - // HACK: always handle vendoring. It should be typically on in go 1.6, 1.7 - s = genStripVendor(s) - } - return -} - -// A go identifier is (letter|_)[letter|number|_]* -func genGoIdentifier(s string, checkFirstChar bool) string { - b := make([]byte, 0, len(s)) - t := make([]byte, 4) - var n int - for i, r := range s { - if checkFirstChar && i == 0 && !unicode.IsLetter(r) { - b = append(b, '_') - } - // r must be unicode_letter, unicode_digit or _ - if unicode.IsLetter(r) || unicode.IsDigit(r) { - n = utf8.EncodeRune(t, r) - b = append(b, t[:n]...) - } else { - b = append(b, '_') - } - } - return string(b) -} - -func genNonPtr(t reflect.Type) reflect.Type { - for t.Kind() == reflect.Ptr { - t = t.Elem() - } - return t -} - -func genFastpathUnderlying(t reflect.Type, rtid uintptr, ti *typeInfo) (tu reflect.Type, rtidu uintptr) { - tu = t - rtidu = rtid - if ti.flagHasPkgPath { - tu = ti.fastpathUnderlying - rtidu = rt2id(tu) - } - return -} - -func genTitleCaseName(s string) string { - switch s { - case "interface{}", "interface {}": - return "Intf" - case "[]byte", "[]uint8", "bytes": - return "Bytes" - default: - return strings.ToUpper(s[0:1]) + s[1:] - } -} - -func genMethodNameT(t reflect.Type, tRef reflect.Type) (n string) { - var ptrPfx string - for t.Kind() == reflect.Ptr { - ptrPfx += "Ptrto" - t = t.Elem() - } - tstr := t.String() - if tn := t.Name(); tn != "" { - if tRef != nil && genImportPath(t) == genImportPath(tRef) { - return ptrPfx + tn - } else { - if genQNameRegex.MatchString(tstr) { - return ptrPfx + strings.Replace(tstr, ".", "_", 1000) - } else { - return ptrPfx + genCustomTypeName(tstr) - } - } - } - switch t.Kind() { - case reflect.Map: - return ptrPfx + "Map" + genMethodNameT(t.Key(), tRef) + genMethodNameT(t.Elem(), tRef) - case reflect.Slice: - return ptrPfx + "Slice" + genMethodNameT(t.Elem(), tRef) - case reflect.Array: - return ptrPfx + "Array" + strconv.FormatInt(int64(t.Len()), 10) + genMethodNameT(t.Elem(), tRef) - case reflect.Chan: - var cx string - switch t.ChanDir() { - case reflect.SendDir: - cx = "ChanSend" - case reflect.RecvDir: - cx = "ChanRecv" - default: - cx = "Chan" - } - return ptrPfx + cx + genMethodNameT(t.Elem(), tRef) - default: - if t == intfTyp { - return ptrPfx + "Interface" - } else { - if tRef != nil && genImportPath(t) == genImportPath(tRef) { - if t.Name() != "" { - return ptrPfx + t.Name() - } else { - return ptrPfx + genCustomTypeName(tstr) - } - } else { - // best way to get the package name inclusive - if t.Name() != "" && genQNameRegex.MatchString(tstr) { - return ptrPfx + strings.Replace(tstr, ".", "_", 1000) - } else { - return ptrPfx + genCustomTypeName(tstr) - } - } - } - } -} - -// genCustomNameForType base32 encodes the t.String() value in such a way -// that it can be used within a function name. -func genCustomTypeName(tstr string) string { - len2 := genTypenameEnc.EncodedLen(len(tstr)) - bufx := make([]byte, len2) - genTypenameEnc.Encode(bufx, []byte(tstr)) - for i := len2 - 1; i >= 0; i-- { - if bufx[i] == '=' { - len2-- - } else { - break - } - } - return string(bufx[:len2]) -} - -func genIsImmutable(t reflect.Type) (v bool) { - return scalarBitset.isset(byte(t.Kind())) -} +// -------- -type genInternal struct { - Version int - Values []fastpathGenV +type genTmpl struct { + Values []genFastpathV Formats []string } -func (x genInternal) FastpathLen() (l int) { +func (x genTmpl) FastpathLen() (l int) { for _, v := range x.Values { // if v.Primitive == "" && !(v.MapKey == "" && v.Elem == "uint8") { if v.Primitive == "" { @@ -2353,7 +113,7 @@ func (x genInternal) FastpathLen() (l int) { return } -func genInternalZeroValue(s string) string { +func genTmplZeroValue(s string) string { switch s { case "interface{}", "interface {}": return "nil" @@ -2368,8 +128,8 @@ func genInternalZeroValue(s string) string { } } -var genInternalNonZeroValueIdx [6]uint64 -var genInternalNonZeroValueStrs = [...][6]string{ +var genTmplNonZeroValueIdx [6]uint64 +var genTmplNonZeroValueStrs = [...][6]string{ {`"string-is-an-interface-1"`, "true", `"some-string-1"`, `[]byte("some-string-1")`, "11.1", "111"}, {`"string-is-an-interface-2"`, "false", `"some-string-2"`, `[]byte("some-string-2")`, "22.2", "77"}, {`"string-is-an-interface-3"`, "true", `"some-string-3"`, `[]byte("some-string-3")`, "33.3e3", "127"}, @@ -2377,7 +137,7 @@ var genInternalNonZeroValueStrs = [...][6]string{ // Note: last numbers must be in range: 0-127 (as they may be put into a int8, uint8, etc) -func genInternalNonZeroValue(s string) string { +func genTmplNonZeroValue(s string) string { var i int switch s { case "interface{}", "interface {}": @@ -2393,14 +153,14 @@ func genInternalNonZeroValue(s string) string { default: i = 5 } - genInternalNonZeroValueIdx[i]++ - idx := genInternalNonZeroValueIdx[i] - slen := uint64(len(genInternalNonZeroValueStrs)) - return genInternalNonZeroValueStrs[idx%slen][i] // return string, to remove ambiguity + genTmplNonZeroValueIdx[i]++ + idx := genTmplNonZeroValueIdx[i] + slen := uint64(len(genTmplNonZeroValueStrs)) + return genTmplNonZeroValueStrs[idx%slen][i] // return string, to remove ambiguity } // Note: used for fastpath only -func genInternalEncCommandAsString(s string, vname string) string { +func genTmplEncCommandAsString(s string, vname string) string { switch s { case "uint64": return "e.e.EncodeUint(" + vname + ")" @@ -2411,7 +171,12 @@ func genInternalEncCommandAsString(s string, vname string) string { case "int", "int8", "int16", "int32": return "e.e.EncodeInt(int64(" + vname + "))" case "[]byte", "[]uint8", "bytes": - return "e.e.EncodeStringBytesRaw(" + vname + ")" + // return fmt.Sprintf( + // "if %s != nil { e.e.EncodeStringBytesRaw(%s) } "+ + // "else if e.h.NilCollectionToZeroLength { e.e.WriteArrayEmpty() } "+ + // "else { e.e.EncodeNil() }", vname, vname) + // return "e.e.EncodeStringBytesRaw(" + vname + ")" + return "e.e.EncodeBytes(" + vname + ")" case "string": return "e.e.EncodeString(" + vname + ")" case "float32": @@ -2423,12 +188,13 @@ func genInternalEncCommandAsString(s string, vname string) string { // case "symbol": // return "e.e.EncodeSymbol(" + vname + ")" default: - return "e.encode(" + vname + ")" + return fmt.Sprintf("if !e.encodeBuiltin(%s) { e.encodeR(reflect.ValueOf(%s)) }", vname, vname) + // return "e.encodeI(" + vname + ")" } } // Note: used for fastpath only -func genInternalDecCommandAsString(s string, mapkey bool) string { +func genTmplDecCommandAsString(s string, mapkey bool) string { switch s { case "uint": return "uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))" @@ -2458,77 +224,39 @@ func genInternalDecCommandAsString(s string, mapkey bool) string { // return "d.stringZC(d.d.DecodeStringAsBytes())" // } // return "string(d.d.DecodeStringAsBytes())" - return "d.stringZC(d.d.DecodeStringAsBytes())" + return "d.detach2Str(d.d.DecodeStringAsBytes())" case "[]byte", "[]uint8", "bytes": - return "d.d.DecodeBytes([]byte{})" + // return "bytesOk(d.d.DecodeBytes())" + return "bytesOKdbi(d.decodeBytesInto(v[uint(j)], false))" case "float32": - return "float32(d.decodeFloat32())" + return "float32(d.d.DecodeFloat32())" case "float64": return "d.d.DecodeFloat64()" case "complex64": - return "complex(d.decodeFloat32(), 0)" + return "complex(d.d.DecodeFloat32(), 0)" case "complex128": return "complex(d.d.DecodeFloat64(), 0)" case "bool": return "d.d.DecodeBool()" default: - halt.onerror(errors.New("gen internal: unknown type for decode: " + s)) + halt.error(errors.New("gen internal: unknown type for decode: " + s)) } return "" } -// func genInternalSortType(s string, elem bool) string { -// for _, v := range [...]string{ -// "int", -// "uint", -// "float", -// "bool", -// "string", -// "bytes", "[]uint8", "[]byte", -// } { -// if v == "[]byte" || v == "[]uint8" { -// v = "bytes" -// } -// if strings.HasPrefix(s, v) { -// if v == "int" || v == "uint" || v == "float" { -// v += "64" -// } -// if elem { -// return v -// } -// return v + "Slice" -// } -// } -// halt.onerror(errors.New("sorttype: unexpected type: " + s)) -// } - -func genInternalSortType(s string, elem bool) string { +func genTmplSortType(s string, elem bool) string { if elem { return s } return s + "Slice" } -// MARKER: keep in sync with codecgen/gen.go -func genStripVendor(s string) string { - // HACK: Misbehaviour occurs in go 1.5. May have to re-visit this later. - // if s contains /vendor/ OR startsWith vendor/, then return everything after it. - const vendorStart = "vendor/" - const vendorInline = "/vendor/" - if i := strings.LastIndex(s, vendorInline); i >= 0 { - s = s[i+len(vendorInline):] - } else if strings.HasPrefix(s, vendorStart) { - s = s[len(vendorStart):] - } - return s -} - -// var genInternalMu sync.Mutex -var genInternalV = genInternal{Version: genVersion} -var genInternalTmplFuncs template.FuncMap -var genInternalOnce sync.Once +// var genTmplMu sync.Mutex +var genTmplV = genTmpl{} +var genTmplFuncs template.FuncMap +var genTmplOnce sync.Once -func genInternalInit() { +func genTmplInit() { wordSizeBytes := int(intBitsize) / 8 typesizes := map[string]int{ @@ -2579,78 +307,88 @@ func genInternalInit() { var primitivetypes, slicetypes, mapkeytypes, mapvaltypes []string primitivetypes = types[:] + slicetypes = types[:] mapkeytypes = types[:] mapvaltypes = types[:] if genFastpathTrimTypes { - // Note: we only create fast-paths for commonly used types. + // Note: we only create fastpaths for commonly used types. // Consequently, things like int8, uint16, uint, etc are commented out. - - slicetypes = genInternalFastpathSliceTypes() - mapkeytypes = genInternalFastpathMapKeyTypes() - mapvaltypes = genInternalFastpathMapValueTypes() - } - - // var mapkeytypes [len(&types) - 1]string // skip bool - // copy(mapkeytypes[:], types[:]) - - // var mb []byte - // mb = append(mb, '|') - // for _, s := range mapkeytypes { - // mb = append(mb, s...) - // mb = append(mb, '|') - // } - // var mapkeytypestr = string(mb) - - var gt = genInternal{Version: genVersion, Formats: genFormats} - - // For each slice or map type, there must be a (symmetrical) Encode and Decode fast-path function + slicetypes = []string{ + "interface{}", + "string", + "[]byte", + "float32", + "float64", + "uint8", // keep fastpath, so it doesn't have to go through reflection + "uint64", + "int", + "int32", // rune + "int64", + "bool", + } + mapkeytypes = []string{ + "string", + "uint8", // byte + "uint64", // used for keys + "int", // default number key + "int32", // rune + } + mapvaltypes = []string{ + "interface{}", + "string", + "[]byte", + "uint8", // byte + "uint64", // used for keys, etc + "int", // default number + "int32", // rune (mostly used for unicode) + "float64", + "bool", + } + } + + var gt = genTmpl{Formats: genFormats} + + // For each slice or map type, there must be a (symmetrical) Encode and Decode fastpath function for _, s := range primitivetypes { gt.Values = append(gt.Values, - fastpathGenV{Primitive: s, Size: typesizes[s], NoCanonical: !genFastpathCanonical}) + genFastpathV{Primitive: s, Size: typesizes[s], NoCanonical: !genFastpathCanonical}) } for _, s := range slicetypes { - // if s != "uint8" { // do not generate fast path for slice of bytes. Treat specially already. - // gt.Values = append(gt.Values, fastpathGenV{Elem: s, Size: typesizes[s]}) - // } gt.Values = append(gt.Values, - fastpathGenV{Elem: s, Size: typesizes[s], NoCanonical: !genFastpathCanonical}) + genFastpathV{Elem: s, Size: typesizes[s], NoCanonical: !genFastpathCanonical}) } for _, s := range mapkeytypes { - // if _, ok := typesizes[s]; !ok { - // if strings.Contains(mapkeytypestr, "|"+s+"|") { - // gt.Values = append(gt.Values, fastpathGenV{MapKey: s, Elem: s, Size: 2 * typesizes[s]}) - // } for _, ms := range mapvaltypes { gt.Values = append(gt.Values, - fastpathGenV{MapKey: s, Elem: ms, Size: typesizes[s] + typesizes[ms], NoCanonical: !genFastpathCanonical}) + genFastpathV{MapKey: s, Elem: ms, Size: typesizes[s] + typesizes[ms], NoCanonical: !genFastpathCanonical}) } } funcs := make(template.FuncMap) // funcs["haspfx"] = strings.HasPrefix - funcs["encmd"] = genInternalEncCommandAsString - funcs["decmd"] = genInternalDecCommandAsString - funcs["zerocmd"] = genInternalZeroValue - funcs["nonzerocmd"] = genInternalNonZeroValue + funcs["encmd"] = genTmplEncCommandAsString + funcs["decmd"] = genTmplDecCommandAsString + funcs["zerocmd"] = genTmplZeroValue + funcs["nonzerocmd"] = genTmplNonZeroValue funcs["hasprefix"] = strings.HasPrefix - funcs["sorttype"] = genInternalSortType + funcs["sorttype"] = genTmplSortType - genInternalV = gt - genInternalTmplFuncs = funcs + genTmplV = gt + genTmplFuncs = funcs } -// genInternalGoFile is used to generate source files from templates. -func genInternalGoFile(r io.Reader, w io.Writer) (err error) { - genInternalOnce.Do(genInternalInit) +// genTmplGoFile is used to generate source files from templates. +func genTmplGoFile(r io.Reader, w io.Writer) (err error) { + genTmplOnce.Do(genTmplInit) - gt := genInternalV + gt := genTmplV - t := template.New("").Funcs(genInternalTmplFuncs) + t := template.New("").Funcs(genTmplFuncs) - tmplstr, err := ioutil.ReadAll(r) + tmplstr, err := io.ReadAll(r) if err != nil { return } @@ -2675,175 +413,7 @@ func genInternalGoFile(r io.Reader, w io.Writer) (err error) { return } -func genInternalFastpathSliceTypes() []string { - return []string{ - "interface{}", - "string", - "[]byte", - "float32", - "float64", - // "uint", - // "uint8", // no need for fastpath of []uint8, as it is handled specially - "uint8", // keep fast-path, so it doesn't have to go through reflection - // "uint16", - // "uint32", - "uint64", - // "uintptr", - "int", - // "int8", - // "int16", - "int32", // rune - "int64", - "bool", - } -} - -func genInternalFastpathMapKeyTypes() []string { - return []string{ - // "interface{}", - "string", - // "[]byte", - // "float32", - // "float64", - // "uint", - "uint8", // byte - // "uint16", - // "uint32", - "uint64", // used for keys - // "uintptr", - "int", // default number key - // "int8", - // "int16", - "int32", // rune - // "int64", - // "bool", - } -} - -func genInternalFastpathMapValueTypes() []string { - return []string{ - "interface{}", - "string", - "[]byte", - // "uint", - "uint8", // byte - // "uint16", - // "uint32", - "uint64", // used for keys, etc - // "uintptr", - "int", // default number - //"int8", - // "int16", - "int32", // rune (mostly used for unicode) - // "int64", - // "float32", - "float64", - "bool", - } -} - -// sort-slice ... -// generates sort implementations for -// various slice types and combination slice+reflect.Value types. -// -// The combination slice+reflect.Value types are used -// during canonical encode, and the others are used during fast-path -// encoding of map keys. - -// genInternalSortableTypes returns the types -// that are used for fast-path canonical's encoding of maps. -// -// For now, we only support the highest sizes for -// int64, uint64, float64, bool, string, bytes. -func genInternalSortableTypes() []string { - return genInternalFastpathMapKeyTypes() -} - -// genInternalSortablePlusTypes returns the types -// that are used for reflection-based canonical's encoding of maps. -// -// For now, we only support the highest sizes for -// int64, uint64, float64, string, bytes. -func genInternalSortablePlusTypes() []string { - return []string{ - "string", - "float64", - "uint64", - // "uintptr", - "int64", - // "bool", - "time", - "bytes", - } -} - -func genTypeForShortName(s string) string { - switch s { - case "time": - return "time.Time" - case "bytes": - return "[]byte" - } - return s -} - -func genArgs(args ...interface{}) map[string]interface{} { - m := make(map[string]interface{}, len(args)/2) - for i := 0; i < len(args); { - m[args[i].(string)] = args[i+1] - i += 2 - } - return m -} - -func genEndsWith(s0 string, sn ...string) bool { - for _, s := range sn { - if strings.HasSuffix(s0, s) { - return true - } - } - return false -} - -func genCheckErr(err error) { - halt.onerror(err) -} - -func genRunSortTmpl2Go(fnameIn, fnameOut string) { - var err error - - funcs := make(template.FuncMap) - funcs["sortables"] = genInternalSortableTypes - funcs["sortablesplus"] = genInternalSortablePlusTypes - funcs["tshort"] = genTypeForShortName - funcs["endswith"] = genEndsWith - funcs["args"] = genArgs - - t := template.New("").Funcs(funcs) - fin, err := os.Open(fnameIn) - genCheckErr(err) - defer fin.Close() - fout, err := os.Create(fnameOut) - genCheckErr(err) - defer fout.Close() - tmplstr, err := ioutil.ReadAll(fin) - genCheckErr(err) - t, err = t.Parse(string(tmplstr)) - genCheckErr(err) - var out bytes.Buffer - err = t.Execute(&out, 0) - genCheckErr(err) - bout, err := format.Source(out.Bytes()) - if err != nil { - fout.Write(out.Bytes()) // write out if error, so we can still see. - } - genCheckErr(err) - // write out if error, as much as possible, so we can still see. - _, err = fout.Write(bout) - genCheckErr(err) -} - -func genRunTmpl2Go(fnameIn, fnameOut string) { +func genTmplRun2Go(fnameIn, fnameOut string) { // println("____ " + fnameIn + " --> " + fnameOut + " ______") fin, err := os.Open(fnameIn) genCheckErr(err) @@ -2851,30 +421,6 @@ func genRunTmpl2Go(fnameIn, fnameOut string) { fout, err := os.Create(fnameOut) genCheckErr(err) defer fout.Close() - err = genInternalGoFile(fin, fout) + err = genTmplGoFile(fin, fout) genCheckErr(err) } - -// --- some methods here for other types, which are only used in codecgen - -// depth returns number of valid nodes in the hierachy -func (path *structFieldInfoPathNode) root() *structFieldInfoPathNode { -TOP: - if path.parent != nil { - path = path.parent - goto TOP - } - return path -} - -func (path *structFieldInfoPathNode) fullpath() (p []*structFieldInfoPathNode) { - // this method is mostly called by a command-line tool - it's not optimized, and that's ok. - // it shouldn't be used in typical runtime use - as it does unnecessary allocation. - d := path.depth() - p = make([]*structFieldInfoPathNode, d) - for d--; d >= 0; d-- { - p[d] = path - path = path.parent - } - return -} diff --git a/vendor/github.com/ugorji/go/codec/gen_mono.go b/vendor/github.com/ugorji/go/codec/gen_mono.go new file mode 100644 index 0000000..8411478 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/gen_mono.go @@ -0,0 +1,586 @@ +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +//go:build codec.build + +package codec + +import ( + "go/ast" + "go/format" + "go/parser" + "go/token" + "os" + "slices" + "strings" +) + +// This tool will monomorphize types scoped to a specific format. +// +// This tool only monomorphized the type Name, and not a function Name. +// Explicitly, generic functions are not supported, as they cannot be monomorphized +// to a specific format without a corresponding name change. +// +// However, for types constrained to encWriter or decReader, +// which are shared across formats, there's no place to put them without duplication. + +const genMonoParserMode = parser.AllErrors | parser.SkipObjectResolution + +var genMonoSpecialFieldTypes = []string{"helperDecReader"} + +// These functions should take the address of first param when monomorphized +var genMonoSpecialFunc4Addr = []string{} // {"decByteSlice"} + +var genMonoImportsToSkip = []string{`"errors"`, `"fmt"`, `"net/rpc"`} + +var genMonoRefImportsVia_ = [][2]string{ + // {"errors", "New"}, +} + +var genMonoCallsToSkip = []string{"callMake"} + +type genMonoFieldState uint + +const ( + genMonoFieldRecv genMonoFieldState = iota << 1 + genMonoFieldParamsResult + genMonoFieldStruct +) + +type genMonoImports struct { + set map[string]struct{} + specs []*ast.ImportSpec +} + +type genMono struct { + files map[string][]byte + typParam map[string]*ast.Field + typParamTransient map[string]*ast.Field +} + +func (x *genMono) init() { + x.files = make(map[string][]byte) + x.typParam = make(map[string]*ast.Field) + x.typParamTransient = make(map[string]*ast.Field) +} + +func (x *genMono) reset() { + clear(x.typParam) + clear(x.typParamTransient) +} + +func (m *genMono) hdl(hname string) { + m.reset() + m.do(hname, []string{"encode.go", "decode.go", hname + ".go"}, []string{"base.notfastpath.go", "base.notfastpath.notmono.go"}, "", "") + m.do(hname, []string{"base.notfastpath.notmono.go"}, nil, ".notfastpath", ` && (notfastpath || codec.notfastpath)`) + m.do(hname, []string{"base.fastpath.notmono.generated.go"}, []string{"base.fastpath.generated.go"}, ".fastpath", ` && !notfastpath && !codec.notfastpath`) +} + +func (m *genMono) do(hname string, fnames, tnames []string, fnameInfx string, buildTagsSfx string) { + // keep m.typParams across whole call, as all others use it + const fnameSfx = ".mono.generated.go" + fname := hname + fnameInfx + fnameSfx + + var imports = genMonoImports{set: make(map[string]struct{})} + + r1, fset := m.merge(fnames, tnames, &imports) + m.trFile(r1, hname, true) + + r2, fset := m.merge(fnames, tnames, &imports) + m.trFile(r2, hname, false) + + r0 := genMonoOutInit(imports.specs, fname) + r0.Decls = append(r0.Decls, r1.Decls...) + r0.Decls = append(r0.Decls, r2.Decls...) + + // output r1 to a file + f, err := os.Create(fname) + halt.onerror(err) + defer f.Close() + + var s genMonoStrBuilder + s.s(`//go:build !notmono && !codec.notmono `).s(buildTagsSfx).s(` + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +`) + _, err = f.Write(s.v) + halt.onerror(err) + err = format.Node(f, fset, r0) + halt.onerror(err) +} + +func (x *genMono) file(fname string) (b []byte) { + b = x.files[fname] + if b == nil { + var err error + b, err = os.ReadFile(fname) + halt.onerror(err) + x.files[fname] = b + } + return +} + +func (x *genMono) merge(fNames, tNames []string, imports *genMonoImports) (dst *ast.File, fset *token.FileSet) { + // typParams used in fnLoadTyps + var typParams map[string]*ast.Field + var loadTyps bool + fnLoadTyps := func(node ast.Node) bool { + var ok bool + switch n := node.(type) { + case *ast.GenDecl: + if n.Tok == token.TYPE { + for _, v := range n.Specs { + nn := v.(*ast.TypeSpec) + ok = genMonoTypeParamsOk(nn.TypeParams) + if ok { + // each decl will have only 1 var/type + typParams[nn.Name.Name] = nn.TypeParams.List[0] + if loadTyps { + dst.Decls = append(dst.Decls, &ast.GenDecl{Tok: n.Tok, Specs: []ast.Spec{v}}) + } + } + } + } + return false + } + return true + } + + // we only merge top-level methods and types + fnIdX := func(n *ast.FuncDecl, n2 *ast.IndexExpr) (ok bool) { + n9, ok9 := n2.Index.(*ast.Ident) + n3, ok := n2.X.(*ast.Ident) // n3 = type name + ok = ok && ok9 && n9.Name == "T" + if ok { + _, ok = x.typParam[n3.Name] + } + return + } + + fnLoadMethodsAndImports := func(node ast.Node) bool { + var ok bool + switch n := node.(type) { + case *ast.FuncDecl: + // TypeParams is nil for methods, as it is defined at the type node + // instead, look at the name, and + // if IndexExpr.Index=T, and IndexExpr.X matches a type name seen already + // then ok = true + if n.Recv == nil || len(n.Recv.List) != 1 { + return false + } + ok = false + switch nn := n.Recv.List[0].Type.(type) { + case *ast.IndexExpr: + ok = fnIdX(n, nn) + case *ast.StarExpr: + switch nn2 := nn.X.(type) { + case *ast.IndexExpr: + ok = fnIdX(n, nn2) + } + } + if ok { + dst.Decls = append(dst.Decls, n) + } + return false + case *ast.GenDecl: + if n.Tok == token.IMPORT { + for _, v := range n.Specs { + nn := v.(*ast.ImportSpec) + if slices.Contains(genMonoImportsToSkip, nn.Path.Value) { + continue + } + if _, ok = imports.set[nn.Path.Value]; !ok { + imports.specs = append(imports.specs, nn) + imports.set[nn.Path.Value] = struct{}{} + } + } + } + return false + } + return true + } + + fset = token.NewFileSet() + fnLoadAsts := func(names []string) (asts []*ast.File) { + for _, fname := range names { + fsrc := x.file(fname) + f, err := parser.ParseFile(fset, fname, fsrc, genMonoParserMode) + halt.onerror(err) + asts = append(asts, f) + } + return + } + + clear(x.typParamTransient) + + dst = &ast.File{ + Name: &ast.Ident{Name: "codec"}, + } + + fs := fnLoadAsts(fNames) + ts := fnLoadAsts(tNames) + + loadTyps = true + typParams = x.typParam + for _, v := range fs { + ast.Inspect(v, fnLoadTyps) + } + loadTyps = false + typParams = x.typParamTransient + for _, v := range ts { + ast.Inspect(v, fnLoadTyps) + } + typParams = nil + for _, v := range fs { + ast.Inspect(v, fnLoadMethodsAndImports) + } + + return +} + +func (x *genMono) trFile(r *ast.File, hname string, isbytes bool) { + fn := func(node ast.Node) bool { + switch n := node.(type) { + case *ast.TypeSpec: + // type x[T encDriver] struct { ... } + if !genMonoTypeParamsOk(n.TypeParams) { + return false + } + x.trType(n, hname, isbytes) + return false + case *ast.FuncDecl: + if n.Recv == nil || len(n.Recv.List) != 1 { + return false + } + if _, ok := n.Recv.List[0].Type.(*ast.Ident); ok { + return false + } + tp := x.trMethodSign(n, hname, isbytes) // receiver, params, results + // handle the body + x.trMethodBody(n.Body, tp, hname, isbytes) + return false + } + return true + } + ast.Inspect(r, fn) + + // set type params to nil, and Pos to NoPos + fn = func(node ast.Node) bool { + switch n := node.(type) { + case *ast.FuncType: + if genMonoTypeParamsOk(n.TypeParams) { + n.TypeParams = nil + } + case *ast.TypeSpec: // for type ... + if genMonoTypeParamsOk(n.TypeParams) { + n.TypeParams = nil + } + } + return true + } + ast.Inspect(r, fn) +} + +func (x *genMono) trType(n *ast.TypeSpec, hname string, isbytes bool) { + sfx, _, _, hnameUp := genMonoIsBytesVals(hname, isbytes) + tp := n.TypeParams.List[0] + switch tp.Type.(*ast.Ident).Name { + case "encDriver", "decDriver": + n.Name.Name += hnameUp + sfx + case "encWriter", "decReader": + n.Name.Name += sfx + } + + // handle the Struct and Array types + switch nn := n.Type.(type) { + case *ast.StructType: + x.trStruct(nn, tp, hname, isbytes) + case *ast.ArrayType: + x.trArray(nn, tp, hname, isbytes) + } +} + +func (x *genMono) trMethodSign(n *ast.FuncDecl, hname string, isbytes bool) (tp *ast.Field) { + // check if recv type is not parameterized + tp = x.trField(n.Recv.List[0], nil, hname, isbytes, genMonoFieldRecv) + // handle params and results + x.trMethodSignNonRecv(n.Type.Params, tp, hname, isbytes) + x.trMethodSignNonRecv(n.Type.Results, tp, hname, isbytes) + return +} + +func (x *genMono) trMethodSignNonRecv(r *ast.FieldList, tp *ast.Field, hname string, isbytes bool) { + if r == nil || len(r.List) == 0 { + return + } + for _, v := range r.List { + x.trField(v, tp, hname, isbytes, genMonoFieldParamsResult) + } +} + +func (x *genMono) trStruct(r *ast.StructType, tp *ast.Field, hname string, isbytes bool) { + // search for fields, and update accordingly + // type x[T encDriver] struct { w T } + // var x *A[T] + // A[T] + if r == nil || r.Fields == nil || len(r.Fields.List) == 0 { + return + } + for _, v := range r.Fields.List { + x.trField(v, tp, hname, isbytes, genMonoFieldStruct) + } +} + +func (x *genMono) trArray(n *ast.ArrayType, tp *ast.Field, hname string, isbytes bool) { + sfx, _, _, hnameUp := genMonoIsBytesVals(hname, isbytes) + // type fastpathEs[T encDriver] [56]fastpathE[T] + // p := tp.Names[0].Name + switch elt := n.Elt.(type) { + // case *ast.InterfaceType: + case *ast.IndexExpr: + if elt.Index.(*ast.Ident).Name == "T" { // generic + n.Elt = ast.NewIdent(elt.X.(*ast.Ident).Name + hnameUp + sfx) + } + } +} + +func (x *genMono) trMethodBody(r *ast.BlockStmt, tp *ast.Field, hname string, isbytes bool) { + // find the parent node for an indexExpr, or a T/*T, and set the value back in there + + fn := func(pnode ast.Node) bool { + var pn *ast.Ident + fnUp := func() { + x.updateIdentForT(pn, hname, tp, isbytes, false) + } + switch n := pnode.(type) { + // case *ast.SelectorExpr: + // case *ast.TypeAssertExpr: + // case *ast.IndexExpr: + case *ast.StarExpr: + if genMonoUpdateIndexExprT(&pn, n.X) { + n.X = pn + fnUp() + } + case *ast.CallExpr: + for i4, n4 := range n.Args { + if genMonoUpdateIndexExprT(&pn, n4) { + n.Args[i4] = pn + fnUp() + } + } + if n4, ok4 := n.Fun.(*ast.Ident); ok4 && slices.Contains(genMonoSpecialFunc4Addr, n4.Name) { + n.Args[0] = &ast.UnaryExpr{Op: token.AND, X: n.Args[0].(*ast.SelectorExpr)} + } + case *ast.CompositeLit: + if genMonoUpdateIndexExprT(&pn, n.Type) { + n.Type = pn + fnUp() + } + case *ast.ArrayType: + if genMonoUpdateIndexExprT(&pn, n.Elt) { + n.Elt = pn + fnUp() + } + case *ast.ValueSpec: + for i2, n2 := range n.Values { + if genMonoUpdateIndexExprT(&pn, n2) { + n.Values[i2] = pn + fnUp() + } + } + if genMonoUpdateIndexExprT(&pn, n.Type) { + n.Type = pn + fnUp() + } + case *ast.BinaryExpr: + // early return here, since the 2 things can apply + if genMonoUpdateIndexExprT(&pn, n.X) { + n.X = pn + fnUp() + } + if genMonoUpdateIndexExprT(&pn, n.Y) { + n.Y = pn + fnUp() + } + return true + } + return true + } + ast.Inspect(r, fn) +} + +func (x *genMono) trField(f *ast.Field, tpt *ast.Field, hname string, isbytes bool, state genMonoFieldState) (tp *ast.Field) { + var pn *ast.Ident + switch nn := f.Type.(type) { + case *ast.IndexExpr: + if genMonoUpdateIndexExprT(&pn, nn) { + f.Type = pn + } + case *ast.StarExpr: + if genMonoUpdateIndexExprT(&pn, nn.X) { + nn.X = pn + } + case *ast.FuncType: + x.trMethodSignNonRecv(nn.Params, tpt, hname, isbytes) + x.trMethodSignNonRecv(nn.Results, tpt, hname, isbytes) + return + case *ast.ArrayType: + x.trArray(nn, tpt, hname, isbytes) + return + case *ast.Ident: + if state == genMonoFieldRecv || nn.Name != "T" { + return + } + pn = nn // "T" + if state == genMonoFieldParamsResult { + f.Type = &ast.StarExpr{X: pn} + } + } + if pn == nil { + return + } + + tp = x.updateIdentForT(pn, hname, tpt, isbytes, true) + return +} + +func (x *genMono) updateIdentForT(pn *ast.Ident, hname string, tp *ast.Field, + isbytes bool, lookupTP bool) (tp2 *ast.Field) { + sfx, writer, reader, hnameUp := genMonoIsBytesVals(hname, isbytes) + // handle special ones e.g. helperDecReader et al + if slices.Contains(genMonoSpecialFieldTypes, pn.Name) { + pn.Name += sfx + return + } + + if pn.Name != "T" && lookupTP { + tp = x.typParam[pn.Name] + if tp == nil { + tp = x.typParamTransient[pn.Name] + } + } + + paramtyp := tp.Type.(*ast.Ident).Name + if pn.Name == "T" { + switch paramtyp { + case "encDriver", "decDriver": + pn.Name = hname + genMonoTitleCase(paramtyp) + sfx + case "encWriter": + pn.Name = writer + case "decReader": + pn.Name = reader + } + } else { + switch paramtyp { + case "encDriver", "decDriver": + pn.Name += hnameUp + sfx + case "encWriter", "decReader": + pn.Name += sfx + } + } + return tp +} + +func genMonoUpdateIndexExprT(pn **ast.Ident, node ast.Node) (pnok bool) { + *pn = nil + if n2, ok := node.(*ast.IndexExpr); ok { + n9, ok9 := n2.Index.(*ast.Ident) + n3, ok := n2.X.(*ast.Ident) + if ok && ok9 && n9.Name == "T" { + *pn, pnok = ast.NewIdent(n3.Name), true + } + } + return +} + +func genMonoTitleCase(s string) string { + return strings.ToUpper(s[:1]) + s[1:] +} + +func genMonoIsBytesVals(hName string, isbytes bool) (suffix, writer, reader, hNameUp string) { + hNameUp = genMonoTitleCase(hName) + if isbytes { + return "Bytes", "bytesEncAppender", "bytesDecReader", hNameUp + } + return "IO", "bufioEncWriter", "ioDecReader", hNameUp +} + +func genMonoTypeParamsOk(v *ast.FieldList) (ok bool) { + if v == nil || v.List == nil || len(v.List) != 1 { + return false + } + pn := v.List[0] + if len(pn.Names) != 1 { + return false + } + pnName := pn.Names[0].Name + if pnName != "T" { + return false + } + // ignore any nodes which are not idents e.g. cmp.orderedRv + vv, ok := pn.Type.(*ast.Ident) + if !ok { + return false + } + switch vv.Name { + case "encDriver", "decDriver", "encWriter", "decReader": + return true + } + return false +} + +func genMonoCopy(src *ast.File) (dst *ast.File) { + dst = &ast.File{ + Name: &ast.Ident{Name: "codec"}, + } + dst.Decls = append(dst.Decls, src.Decls...) + return +} + +type genMonoStrBuilder struct { + v []byte +} + +func (x *genMonoStrBuilder) s(v string) *genMonoStrBuilder { + x.v = append(x.v, v...) + return x +} + +func genMonoOutInit(importSpecs []*ast.ImportSpec, fname string) (f *ast.File) { + // ParseFile seems to skip the //go:build stanza + // it should be written directly into the file + var s genMonoStrBuilder + s.s(` +package codec + +import ( +`) + for _, v := range importSpecs { + s.s("\t").s(v.Path.Value).s("\n") + } + s.s(")\n") + for _, v := range genMonoRefImportsVia_ { + s.s("var _ = ").s(v[0]).s(".").s(v[1]).s("\n") + } + f, err := parser.ParseFile(token.NewFileSet(), fname, s.v, genMonoParserMode) + halt.onerror(err) + return +} + +func genMonoAll() { + // hdls := []Handle{ + // (*SimpleHandle)(nil), + // (*JsonHandle)(nil), + // (*CborHandle)(nil), + // (*BincHandle)(nil), + // (*MsgpackHandle)(nil), + // } + hdls := []string{"simple", "json", "cbor", "binc", "msgpack"} + var m genMono + m.init() + for _, v := range hdls { + m.hdl(v) + } +} diff --git a/vendor/github.com/ugorji/go/codec/goversion_arrayof_gte_go15.go b/vendor/github.com/ugorji/go/codec/goversion_arrayof_gte_go15.go deleted file mode 100644 index 25c5b02..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_arrayof_gte_go15.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build go1.5 -// +build go1.5 - -package codec - -import "reflect" - -const reflectArrayOfSupported = true - -func reflectArrayOf(count int, elem reflect.Type) reflect.Type { - return reflect.ArrayOf(count, elem) -} diff --git a/vendor/github.com/ugorji/go/codec/goversion_arrayof_lt_go15.go b/vendor/github.com/ugorji/go/codec/goversion_arrayof_lt_go15.go deleted file mode 100644 index a32dfd7..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_arrayof_lt_go15.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build !go1.5 -// +build !go1.5 - -package codec - -import ( - "errors" - "reflect" -) - -const reflectArrayOfSupported = false - -var errNoReflectArrayOf = errors.New("codec: reflect.ArrayOf unsupported by this go version") - -func reflectArrayOf(count int, elem reflect.Type) reflect.Type { - panic(errNoReflectArrayOf) -} diff --git a/vendor/github.com/ugorji/go/codec/goversion_check_supported.go b/vendor/github.com/ugorji/go/codec/goversion_check_supported.go new file mode 100644 index 0000000..067c5e9 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/goversion_check_supported.go @@ -0,0 +1,20 @@ +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +//go:build !go1.21 + +package codec + +import "errors" + +// Moving forward, this codec package will support at least the last 4 major Go releases. +// +// As of early summer 2025, codec will support go 1.21, 1.22, 1.23, 1.24 releases of go. +// This allows use of the followin: +// - stabilized generics +// - min/max/clear +// - slice->array conversion + +func init() { + panic(errors.New("codec: supports go 1.21 and above only")) +} diff --git a/vendor/github.com/ugorji/go/codec/goversion_fmt_time_gte_go15.go b/vendor/github.com/ugorji/go/codec/goversion_fmt_time_gte_go15.go deleted file mode 100644 index 688d6b6..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_fmt_time_gte_go15.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build go1.5 -// +build go1.5 - -package codec - -import "time" - -func fmtTime(t time.Time, fmt string, b []byte) []byte { - return t.AppendFormat(b, fmt) -} diff --git a/vendor/github.com/ugorji/go/codec/goversion_fmt_time_lt_go15.go b/vendor/github.com/ugorji/go/codec/goversion_fmt_time_lt_go15.go deleted file mode 100644 index a1b8b97..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_fmt_time_lt_go15.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build !go1.5 -// +build !go1.5 - -package codec - -import "time" - -func fmtTime(t time.Time, fmt string, b []byte) []byte { - s := t.Format(fmt) - b = b[:len(s)] - copy(b, s) - return b -} diff --git a/vendor/github.com/ugorji/go/codec/goversion_growslice_unsafe_gte_go120.go b/vendor/github.com/ugorji/go/codec/goversion_growslice_unsafe_gte_go120.go deleted file mode 100644 index d5fed78..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_growslice_unsafe_gte_go120.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build go1.20 && !safe && !codec.safe && !appengine -// +build go1.20,!safe,!codec.safe,!appengine - -package codec - -import ( - _ "reflect" // needed for go linkname(s) - "unsafe" -) - -func growslice(typ unsafe.Pointer, old unsafeSlice, num int) (s unsafeSlice) { - // culled from GOROOT/runtime/slice.go - num -= old.Cap - old.Len - s = rtgrowslice(old.Data, old.Cap+num, old.Cap, num, typ) - s.Len = old.Len - return -} - -//go:linkname rtgrowslice runtime.growslice -//go:noescape -func rtgrowslice(oldPtr unsafe.Pointer, newLen, oldCap, num int, typ unsafe.Pointer) unsafeSlice - -// //go:linkname growslice reflect.growslice -// //go:noescape -// func growslice(typ unsafe.Pointer, old unsafeSlice, cap int) unsafeSlice diff --git a/vendor/github.com/ugorji/go/codec/goversion_growslice_unsafe_lt_go120.go b/vendor/github.com/ugorji/go/codec/goversion_growslice_unsafe_lt_go120.go deleted file mode 100644 index 550c5d9..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_growslice_unsafe_lt_go120.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build go1.9 && !go1.20 && !safe && !codec.safe && !appengine -// +build go1.9,!go1.20,!safe,!codec.safe,!appengine - -package codec - -import ( - _ "runtime" // needed for go linkname(s) - "unsafe" -) - -//go:linkname growslice runtime.growslice -//go:noescape -func growslice(typ unsafe.Pointer, old unsafeSlice, num int) unsafeSlice diff --git a/vendor/github.com/ugorji/go/codec/goversion_makemap_lt_go110.go b/vendor/github.com/ugorji/go/codec/goversion_makemap_lt_go110.go deleted file mode 100644 index 8053031..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_makemap_lt_go110.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build !go1.10 -// +build !go1.10 - -package codec - -import "reflect" - -func makeMapReflect(t reflect.Type, size int) reflect.Value { - return reflect.MakeMap(t) -} diff --git a/vendor/github.com/ugorji/go/codec/goversion_makemap_not_unsafe_gte_go110.go b/vendor/github.com/ugorji/go/codec/goversion_makemap_not_unsafe_gte_go110.go deleted file mode 100644 index 46f787d..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_makemap_not_unsafe_gte_go110.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build go1.10 && (safe || codec.safe || appengine) -// +build go1.10 -// +build safe codec.safe appengine - -package codec - -import "reflect" - -func makeMapReflect(t reflect.Type, size int) reflect.Value { - return reflect.MakeMapWithSize(t, size) -} diff --git a/vendor/github.com/ugorji/go/codec/goversion_makemap_unsafe_gte_go110.go b/vendor/github.com/ugorji/go/codec/goversion_makemap_unsafe_gte_go110.go deleted file mode 100644 index 03c069f..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_makemap_unsafe_gte_go110.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build go1.10 && !safe && !codec.safe && !appengine -// +build go1.10,!safe,!codec.safe,!appengine - -package codec - -import ( - "reflect" - "unsafe" -) - -func makeMapReflect(typ reflect.Type, size int) (rv reflect.Value) { - t := (*unsafeIntf)(unsafe.Pointer(&typ)).ptr - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - urv.typ = t - urv.flag = uintptr(reflect.Map) - urv.ptr = makemap(t, size, nil) - return -} - -//go:linkname makemap runtime.makemap -//go:noescape -func makemap(typ unsafe.Pointer, size int, h unsafe.Pointer) unsafe.Pointer diff --git a/vendor/github.com/ugorji/go/codec/goversion_maprange_gte_go112.go b/vendor/github.com/ugorji/go/codec/goversion_maprange_gte_go112.go deleted file mode 100644 index 16c8921..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_maprange_gte_go112.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build go1.12 && (safe || codec.safe || appengine) -// +build go1.12 -// +build safe codec.safe appengine - -package codec - -import "reflect" - -type mapIter struct { - t *reflect.MapIter - m reflect.Value - values bool -} - -func (t *mapIter) Next() (r bool) { - return t.t.Next() -} - -func (t *mapIter) Key() reflect.Value { - return t.t.Key() -} - -func (t *mapIter) Value() (r reflect.Value) { - if t.values { - return t.t.Value() - } - return -} - -func (t *mapIter) Done() {} - -func mapRange(t *mapIter, m, k, v reflect.Value, values bool) { - *t = mapIter{ - m: m, - t: m.MapRange(), - values: values, - } -} diff --git a/vendor/github.com/ugorji/go/codec/goversion_maprange_lt_go112.go b/vendor/github.com/ugorji/go/codec/goversion_maprange_lt_go112.go deleted file mode 100644 index 85c8ea7..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_maprange_lt_go112.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build go1.7 && !go1.12 && (safe || codec.safe || appengine) -// +build go1.7 -// +build !go1.12 -// +build safe codec.safe appengine - -package codec - -import "reflect" - -type mapIter struct { - m reflect.Value - keys []reflect.Value - j int - values bool -} - -func (t *mapIter) Next() (r bool) { - t.j++ - return t.j < len(t.keys) -} - -func (t *mapIter) Key() reflect.Value { - return t.keys[t.j] -} - -func (t *mapIter) Value() (r reflect.Value) { - if t.values { - return t.m.MapIndex(t.keys[t.j]) - } - return -} - -func (t *mapIter) Done() {} - -func mapRange(t *mapIter, m, k, v reflect.Value, values bool) { - *t = mapIter{ - m: m, - keys: m.MapKeys(), - values: values, - j: -1, - } -} diff --git a/vendor/github.com/ugorji/go/codec/goversion_noswissmap_unsafe.go b/vendor/github.com/ugorji/go/codec/goversion_noswissmap_unsafe.go new file mode 100644 index 0000000..ca61f6f --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/goversion_noswissmap_unsafe.go @@ -0,0 +1,16 @@ +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +//go:build !safe && !codec.safe && !appengine && !go1.24 + +package codec + +import "unsafe" + +// retrofited from hIter struct + +type unsafeMapIterPadding struct { + _ [6]unsafe.Pointer // padding: *maptype, *hmap, buckets, *bmap, overflow, oldoverflow, + _ [4]uintptr // padding: uintptr, uint8, bool fields + _ uintptr // padding: wasted (try to fill cache-line at multiple of 4) +} diff --git a/vendor/github.com/ugorji/go/codec/goversion_swissmap_unsafe.go b/vendor/github.com/ugorji/go/codec/goversion_swissmap_unsafe.go new file mode 100644 index 0000000..5f062e8 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/goversion_swissmap_unsafe.go @@ -0,0 +1,15 @@ +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +//go:build !safe && !codec.safe && !appengine && go1.24 + +package codec + +import "unsafe" + +// retrofited from linknameIter struct (compatibility layer for swissmaps) + +type unsafeMapIterPadding struct { + _ [2]unsafe.Pointer // padding: *abi.SwissMapType, *maps.Iter + _ uintptr // padding: wasted (try to fill cache-line at multiple of 4) +} diff --git a/vendor/github.com/ugorji/go/codec/goversion_unexportedembeddedptr_gte_go110.go b/vendor/github.com/ugorji/go/codec/goversion_unexportedembeddedptr_gte_go110.go deleted file mode 100644 index c894a30..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_unexportedembeddedptr_gte_go110.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build go1.10 -// +build go1.10 - -package codec - -const allowSetUnexportedEmbeddedPtr = false diff --git a/vendor/github.com/ugorji/go/codec/goversion_unexportedembeddedptr_lt_go110.go b/vendor/github.com/ugorji/go/codec/goversion_unexportedembeddedptr_lt_go110.go deleted file mode 100644 index 1476eac..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_unexportedembeddedptr_lt_go110.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build !go1.10 -// +build !go1.10 - -package codec - -const allowSetUnexportedEmbeddedPtr = true diff --git a/vendor/github.com/ugorji/go/codec/goversion_unsupported_lt_go14.go b/vendor/github.com/ugorji/go/codec/goversion_unsupported_lt_go14.go deleted file mode 100644 index c093eeb..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_unsupported_lt_go14.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build !go1.4 -// +build !go1.4 - -package codec - -import "errors" - -// This codec package will only work for go1.4 and above. -// This is for the following reasons: -// - go 1.4 was released in 2014 -// - go runtime is written fully in go -// - interface only holds pointers -// - reflect.Value is stabilized as 3 words - -var errCodecSupportedOnlyFromGo14 = errors.New("codec: go 1.3 and below are not supported") - -func init() { - panic(errCodecSupportedOnlyFromGo14) -} diff --git a/vendor/github.com/ugorji/go/codec/goversion_vendor_eq_go15.go b/vendor/github.com/ugorji/go/codec/goversion_vendor_eq_go15.go deleted file mode 100644 index e1dfce4..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_vendor_eq_go15.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build go1.5 && !go1.6 -// +build go1.5,!go1.6 - -package codec - -import "os" - -var genCheckVendor = os.Getenv("GO15VENDOREXPERIMENT") == "1" diff --git a/vendor/github.com/ugorji/go/codec/goversion_vendor_eq_go16.go b/vendor/github.com/ugorji/go/codec/goversion_vendor_eq_go16.go deleted file mode 100644 index 5cb4564..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_vendor_eq_go16.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build go1.6 && !go1.7 -// +build go1.6,!go1.7 - -package codec - -import "os" - -var genCheckVendor = os.Getenv("GO15VENDOREXPERIMENT") != "0" diff --git a/vendor/github.com/ugorji/go/codec/goversion_vendor_gte_go17.go b/vendor/github.com/ugorji/go/codec/goversion_vendor_gte_go17.go deleted file mode 100644 index 82ef3ef..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_vendor_gte_go17.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build go1.7 -// +build go1.7 - -package codec - -const genCheckVendor = true diff --git a/vendor/github.com/ugorji/go/codec/goversion_vendor_lt_go15.go b/vendor/github.com/ugorji/go/codec/goversion_vendor_lt_go15.go deleted file mode 100644 index 1027404..0000000 --- a/vendor/github.com/ugorji/go/codec/goversion_vendor_lt_go15.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build !go1.5 -// +build !go1.5 - -package codec - -var genCheckVendor = false diff --git a/vendor/github.com/ugorji/go/codec/helper.go b/vendor/github.com/ugorji/go/codec/helper.go index ecd87ba..e737ef2 100644 --- a/vendor/github.com/ugorji/go/codec/helper.go +++ b/vendor/github.com/ugorji/go/codec/helper.go @@ -190,14 +190,17 @@ package codec // These are the TransientAddrK and TransientAddr2K methods of decPerType. import ( + "bytes" "encoding" "encoding/binary" + "encoding/hex" "errors" "fmt" "io" "math" "reflect" "runtime" + "runtime/debug" "sort" "strconv" "strings" @@ -207,18 +210,25 @@ import ( "unicode/utf8" ) -// if debugging is true, then -// - within Encode/Decode, do not recover from panic's -// - etc -// -// Note: Negative tests that check for errors will fail, so only use this -// when debugging, and run only one test at a time preferably. -// -// Note: RPC tests depend on getting the error from an Encode/Decode call. -// Consequently, they will always fail if debugging = true. -const debugging = false - const ( + // if debugging is true, then + // - within Encode/Decode, do not recover from panic's + // - etc + // + // Note: Negative tests that check for errors will fail, so only use this + // when debugging, and run only one test at a time preferably. + // + // Note: RPC tests depend on getting the error from an Encode/Decode call. + // Consequently, they will always fail if debugging = true. + // + // It is generally set to false + debugging = false + + // if debugLogging is false, debugf calls will be a No-op. + // + // It is generally set to true + debugLogging = true + // containerLenUnknown is length returned from Read(Map|Array)Len // when a format doesn't know apiori. // For example, json doesn't pre-determine the length of a container (sequence/map). @@ -240,9 +250,6 @@ const ( // This constant flag will enable or disable it. supportMarshalInterfaces = true - // bytesFreeListNoCache is used for debugging, when we want to skip using a cache of []byte. - bytesFreeListNoCache = false - // size of the cacheline: defaulting to value for archs: amd64, arm64, 386 // should use "runtime/internal/sys".CacheLineSize, but that is not exposed. cacheLineSize = 64 @@ -250,11 +257,38 @@ const ( wordSizeBits = 32 << (^uint(0) >> 63) // strconv.IntSize wordSize = wordSizeBits / 8 + // byteBufSize is the default size of []byte used + // possibly for bufioWriter, etc + byteBufSize = 1 << 10 // 4:16, 6:64, 8:256, 10:1024 + // MARKER: determines whether to skip calling fastpath(En|De)codeTypeSwitch. // Calling the fastpath switch in encode() or decode() could be redundant, // as we still have to introspect it again within fnLoad // to determine the function to use for values of that type. skipFastpathTypeSwitchInDirectCall = false + + // maxArrayLen is the size of uint, which determines + // the maximum length of any array. + maxArrayLen = 1<<((32<<(^uint(0)>>63))-1) - 1 + + // ---- below this line, useXXX consts should be true + + usePoolForSFIs = true + useArenaForSFIs = true + + usePoolForTypeInfoLoad = true + + usePoolForSideEncode = true + + usePoolForSideDecode = true + + useBytesFreeList = true + + useSfiRvFreeList = true + + // ---- below this line, useXXX consts should be false + + useBytesFreeListPutGetSeparateCalls = false ) const cpu32Bit = ^uint(0)>>32 == 0 @@ -267,16 +301,6 @@ const ( rkindChan = rkind(reflect.Chan) ) -type mapKeyFastKind uint8 - -const ( - mapKeyFastKind32 = iota + 1 - mapKeyFastKind32ptr - mapKeyFastKind64 - mapKeyFastKind64ptr - mapKeyFastKindStr -) - var ( // use a global mutex to ensure each Handle is initialized. // We do this, so we don't have to store the basicHandle mutex @@ -289,7 +313,10 @@ var ( digitCharBitset bitset256 numCharBitset bitset256 whitespaceCharBitset bitset256 - asciiAlphaNumBitset bitset256 + // asciiAlphaNumBitset bitset256 + + jsonCharHtmlSafeBitset bitset256 + jsonCharSafeBitset bitset256 // numCharWithExpBitset64 bitset64 // numCharNoExpBitset64 bitset64 @@ -313,8 +340,6 @@ var ( // scalarBitset sets bit for all kinds which are scalars/primitives and thus immutable scalarBitset bitset32 - mapKeyFastKindVals [32]mapKeyFastKind - // codecgen is set to true by codecgen, so that tests, etc can use this information as needed. codecgen bool @@ -322,6 +347,21 @@ var ( zeroByteSlice = oneByteArr[:0:0] eofReader devNullReader + + // string containing all values of a uint8 in sequence. + // We maintain a [256]byte slice, for efficiently making strings with one byte. + // str256 string + + // handleNewFns []handleNewFn + + basicErrDecorator errDecoratorDef + + // sentinel value passed to panicValToErr, signifying to call recover yourself + callRecoverSentinel = new(byte) + + // debugstackOnce is used to put a single debugStack at a certain point (during debugging). + // To use, just call debugstackOnce() wherever you need to see a stack only once. + debugstackOnce = sync.OnceFunc(debug.PrintStack) ) var ( @@ -340,41 +380,13 @@ var ( errNoFormatHandle = errors.New("no handle (cannot identify format)") ) -var pool4tiload = sync.Pool{ +var poolForTypeInfoLoad = sync.Pool{ New: func() interface{} { - return &typeInfoLoad{ - etypes: make([]uintptr, 0, 4), - sfis: make([]structFieldInfo, 0, 4), - sfiNames: make(map[string]uint16, 4), - } + return newTypeInfoLoad() }, } func init() { - xx := func(f mapKeyFastKind, k ...reflect.Kind) { - for _, v := range k { - mapKeyFastKindVals[byte(v)&31] = f // 'v % 32' equal to 'v & 31' - } - } - - var f mapKeyFastKind - - f = mapKeyFastKind64 - if wordSizeBits == 32 { - f = mapKeyFastKind32 - } - xx(f, reflect.Int, reflect.Uint, reflect.Uintptr) - - f = mapKeyFastKind64ptr - if wordSizeBits == 32 { - f = mapKeyFastKind32ptr - } - xx(f, reflect.Ptr) - - xx(mapKeyFastKindStr, reflect.String) - xx(mapKeyFastKind32, reflect.Uint32, reflect.Int32, reflect.Float32) - xx(mapKeyFastKind64, reflect.Uint64, reflect.Int64, reflect.Float64) - numBoolBitset. set(byte(reflect.Bool)). set(byte(reflect.Int)). @@ -425,9 +437,9 @@ func init() { // set(byte(reflect.String)) for i := byte(0); i <= utf8.RuneSelf; i++ { - if (i >= '0' && i <= '9') || (i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') { - asciiAlphaNumBitset.set(i) - } + // if (i >= '0' && i <= '9') || (i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') || i == '_' { + // asciiAlphaNumBitset.set(i) + // } switch i { case ' ', '\t', '\r', '\n': whitespaceCharBitset.set(i) @@ -440,16 +452,74 @@ func init() { numCharBitset.set(i) } } + + // populate the safe values as true: note: ASCII control characters are (0-31) + // jsonCharSafeBitset: all true except (0-31) " \ + // jsonCharHtmlSafeBitset: all true except (0-31) " \ < > & + for i := byte(32); i < utf8.RuneSelf; i++ { + switch i { + case '"', '\\': + case '<', '>', '&': + jsonCharSafeBitset.set(i) // = true + default: + jsonCharSafeBitset.set(i) + jsonCharHtmlSafeBitset.set(i) + } + } } -// driverStateManager supports the runtime state of an (enc|dec)Driver. +func searchRtids(s []uintptr, v uintptr) (i uint, ok bool) { + var h uint + var j uint = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 // avoid overflow when computing h // h = i + (j-i)/2 + if s[h] < v { + i = h + 1 + } else { + j = h + } + goto LOOP + } + return i, i < uint(len(s)) && s[i] == v +} + +// circularRefChecker holds interfaces during an encoding (if CheckCircularRef=true) // -// During a side(En|De)code call, we can capture the state, reset it, -// and then restore it later to continue the primary encoding/decoding. -type driverStateManager interface { - resetState() - captureState() interface{} - restoreState(state interface{}) +// We considered using a []uintptr (slice of pointer addresses) retrievable via rv.UnsafeAddr. +// However, it is possible for the same pointer to point to 2 different types e.g. +// +// type T struct { tHelper } +// Here, for var v T; &v and &v.tHelper are the same pointer. +// +// Consequently, we need a tuple of type and pointer, which interface{} natively provides. +// +// Note: the following references, if seen, can lead to circular references +// - Pointer to struct/slice/array/map (any container) +// - map (reference, where a value in a kv pair could be the map itself) +// - addr of slice/array element +// - add of struct field +type circularRefChecker []interface{} // []uintptr + +func (ci *circularRefChecker) push(v interface{}) { + for _, vv := range *ci { + if eq4i(v, vv) { // error if sptr already seen + halt.errorf("circular reference found: %p, %T", v, v) + } + } + *ci = append(*ci, v) +} + +func (_ *circularRefChecker) canPushElemKind(elemKind reflect.Kind) bool { + switch elemKind { + case reflect.Struct, reflect.Slice, reflect.Array, reflect.Map: + return true + } + return false +} + +func (ci *circularRefChecker) pop(num int) { + *ci = (*ci)[:len(*ci)-num] } type bdAndBdread struct { @@ -457,10 +527,7 @@ type bdAndBdread struct { bd byte } -func (x bdAndBdread) captureState() interface{} { return x } -func (x *bdAndBdread) resetState() { x.bd, x.bdRead = 0, false } -func (x *bdAndBdread) reset() { x.resetState() } -func (x *bdAndBdread) restoreState(v interface{}) { *x = v.(bdAndBdread) } +func (x *bdAndBdread) reset() { x.bd, x.bdRead = 0, false } type clsErr struct { err error // error on closing @@ -570,6 +637,7 @@ type fauxUnion struct { b bool // state + a dBytesAttachState v valueType } @@ -580,12 +648,21 @@ type typeInfoLoad struct { sfiNames map[string]uint16 } +func newTypeInfoLoad() *typeInfoLoad { + return &typeInfoLoad{ + etypes: make([]uintptr, 0, 4), + sfis: make([]structFieldInfo, 0, 4), + sfiNames: make(map[string]uint16, 4), + } +} + func (x *typeInfoLoad) reset() { x.etypes = x.etypes[:0] x.sfis = x.sfis[:0] - for k := range x.sfiNames { // optimized to zero the map - delete(x.sfiNames, k) - } + clear(x.sfiNames) + // for k := range x.sfiNames { // optimized to zero the map + // delete(x.sfiNames, k) + // } } // mirror json.Marshaler and json.Unmarshaler here, @@ -606,6 +683,15 @@ type isCodecEmptyer interface { IsCodecEmpty() bool } +type outOfBoundsError struct { + capacity uint + requested uint +} + +func (x *outOfBoundsError) Error() string { + return sprintf("out of bounds with capacity = %d, requested %d", x.capacity, x.requested) +} + type codecError struct { err error name string @@ -638,6 +724,8 @@ func wrapCodecErr(in error, name string, numbytesread int, encode bool) (out err var ( bigen bigenHelper + // bigenB bigenWriter[bytesEncAppenderM] + // bigenIO bigenWriter[bufioEncWriterM] bigenstd = binary.BigEndian @@ -671,11 +759,10 @@ var ( jsonMarshalerTyp = reflect.TypeOf((*jsonMarshaler)(nil)).Elem() jsonUnmarshalerTyp = reflect.TypeOf((*jsonUnmarshaler)(nil)).Elem() - selferTyp = reflect.TypeOf((*Selfer)(nil)).Elem() - missingFielderTyp = reflect.TypeOf((*MissingFielder)(nil)).Elem() - iszeroTyp = reflect.TypeOf((*isZeroer)(nil)).Elem() - isCodecEmptyerTyp = reflect.TypeOf((*isCodecEmptyer)(nil)).Elem() - isSelferViaCodecgenerTyp = reflect.TypeOf((*isSelferViaCodecgener)(nil)).Elem() + selferTyp = reflect.TypeOf((*Selfer)(nil)).Elem() + missingFielderTyp = reflect.TypeOf((*MissingFielder)(nil)).Elem() + iszeroTyp = reflect.TypeOf((*isZeroer)(nil)).Elem() + isCodecEmptyerTyp = reflect.TypeOf((*isCodecEmptyer)(nil)).Elem() uint8TypId = rt2id(uint8Typ) uint8SliceTypId = rt2id(uint8SliceTyp) @@ -732,10 +819,6 @@ type Selfer interface { CodecDecodeSelf(*Decoder) } -type isSelferViaCodecgener interface { - codecSelferViaCodecgen() -} - // MissingFielder defines the interface allowing structs to internally decode or encode // values which do not map to struct fields. // @@ -782,6 +865,18 @@ type MapBySlice interface { MapBySlice() } +// const ( +// rtidfn_Enc_IO = iota +// rtidfn_Enc_IO_NoExt +// rtidfn_Dec_IO +// rtidfn_Dec_IO_NoExt + +// rtidfn_Enc_Bytes +// rtidfn_Enc_Bytes_NoExt +// rtidfn_Dec_Bytes +// rtidfn_Dec_Bytes_NoExt +// ) + // basicHandleRuntimeState holds onto all BasicHandle runtime and cached config information. // // Storing this outside BasicHandle allows us create shallow copies of a Handle, @@ -790,11 +885,6 @@ type MapBySlice interface { // temporarily when running tests in parallel, without running the risk that a test executing // in parallel with other tests does not see a transient modified values not meant for it. type basicHandleRuntimeState struct { - // these are used during runtime. - // At init time, they should have nothing in them. - rtidFns atomicRtidFnSlice - rtidFnsNoExt atomicRtidFnSlice - // Note: basicHandleRuntimeState is not comparable, due to these slices here (extHandle, intf2impls). // If *[]T is used instead, this becomes comparable, at the cost of extra indirection. // Thses slices are used all the time, so keep as slices (not pointers). @@ -803,16 +893,32 @@ type basicHandleRuntimeState struct { intf2impls + // these keep track of the []codecRtidFns for this handle. + // We used a non-generic value so we can: + // - keep these within BasicHandle + // - work around recursive limitations of go's generics + rtidFnsEncIO, + rtidFnsEncNoExtIO, + rtidFnsEncBytes, + rtidFnsEncNoExtBytes, + rtidFnsDecIO, + rtidFnsDecNoExtIO, + rtidFnsDecBytes, + rtidFnsDecNoExtBytes atomicRtidFnSlice + + sideEncPool sync.Pool + sideDecPool sync.Pool + mu sync.Mutex jsonHandle bool binaryHandle bool - // timeBuiltin is initialized from TimeNotBuiltin, and used internally. + // timeBuiltin is initialized from TimeNotBuiltin, and used internally by setExt. // once initialized, it cannot be changed, as the function for encoding/decoding time.Time // will have been cached and the TimeNotBuiltin value will not be consulted thereafter. timeBuiltin bool - _ bool // padding + // _ bool // padding } // BasicHandle encapsulates the common options and extension functions. @@ -827,7 +933,7 @@ type BasicHandle struct { // If not configured, the default TypeInfos is used, which uses struct tag keys: codec, json TypeInfos *TypeInfos - *basicHandleRuntimeState + basicHandleRuntimeState // ---- cache line @@ -865,6 +971,7 @@ type BasicHandle struct { // ---- cache line inited uint32 // holds if inited, and also handle flags (binary encoding, json handler, etc) + // name string } // initHandle does a one-time initialization of the handle. @@ -886,17 +993,48 @@ func initHandle(hh Handle) { // is not sufficient, since a race condition can occur within init(Handle) function. // init is made noinline, so that this function can be inlined by its caller. if atomic.LoadUint32(&x.inited) == 0 { - x.initHandle(hh) + initHandle2(x, hh) + } +} + +// initHandle2 should be called only from codec.initHandle global function. +// make it uninlineable, as it is called at most once for each handle. +// +//go:noinline +func initHandle2(x *BasicHandle, hh Handle) { + handleInitMu.Lock() + defer handleInitMu.Unlock() // use defer, as halt may panic below + if x.inited != 0 { + return + } + x.jsonHandle = hh.isJson() + x.binaryHandle = hh.isBinary() + x.basicInit() + + x.sideEncPool.New = func() any { + return NewEncoderBytes(nil, hh).encoderI + } + x.sideDecPool.New = func() any { + return NewDecoderBytes(nil, hh).decoderI } + + // hh.init() + + atomic.StoreUint32(&x.inited, 1) } func (x *BasicHandle) basicInit() { - x.rtidFns.store(nil) - x.rtidFnsNoExt.store(nil) + // ensure MapType and SliceType are of correct type + if x.MapType != nil && x.MapType.Kind() != reflect.Map { + halt.onerror(errMapTypeNotMapKind) + } + if x.SliceType != nil && x.SliceType.Kind() != reflect.Slice { + halt.onerror(errSliceTypeNotSliceKind) + } x.timeBuiltin = !x.TimeNotBuiltin } -func (x *BasicHandle) init() {} +// func (x *BasicHandle) init() {} func (x *BasicHandle) isInited() bool { return atomic.LoadUint32(&x.inited) != 0 @@ -907,20 +1045,6 @@ func (x *BasicHandle) clearInited() { atomic.StoreUint32(&x.inited, 0) } -// TimeBuiltin returns whether time.Time OOTB support is used, -// based on the initial configuration of TimeNotBuiltin -func (x *basicHandleRuntimeState) TimeBuiltin() bool { - return x.timeBuiltin -} - -func (x *basicHandleRuntimeState) isJs() bool { - return x.jsonHandle -} - -func (x *basicHandleRuntimeState) isBe() bool { - return x.binaryHandle -} - func (x *basicHandleRuntimeState) setExt(rt reflect.Type, tag uint64, ext Ext) (err error) { rk := rt.Kind() for rk == reflect.Ptr { @@ -957,32 +1081,6 @@ func (x *basicHandleRuntimeState) setExt(rt reflect.Type, tag uint64, ext Ext) ( return } -// initHandle should be called only from codec.initHandle global function. -// make it uninlineable, as it is called at most once for each handle. -// -//go:noinline -func (x *BasicHandle) initHandle(hh Handle) { - handleInitMu.Lock() - defer handleInitMu.Unlock() // use defer, as halt may panic below - if x.inited == 0 { - if x.basicHandleRuntimeState == nil { - x.basicHandleRuntimeState = new(basicHandleRuntimeState) - } - x.jsonHandle = hh.isJson() - x.binaryHandle = hh.isBinary() - // ensure MapType and SliceType are of correct type - if x.MapType != nil && x.MapType.Kind() != reflect.Map { - halt.onerror(errMapTypeNotMapKind) - } - if x.SliceType != nil && x.SliceType.Kind() != reflect.Slice { - halt.onerror(errSliceTypeNotSliceKind) - } - x.basicInit() - hh.init() - atomic.StoreUint32(&x.inited, 1) - } -} - func (x *BasicHandle) getBasicHandle() *BasicHandle { return x } @@ -994,305 +1092,13 @@ func (x *BasicHandle) typeInfos() *TypeInfos { return defTypeInfos } +// getTypeInfo expects a non-pointer func (x *BasicHandle) getTypeInfo(rtid uintptr, rt reflect.Type) (pti *typeInfo) { return x.typeInfos().get(rtid, rt) } -func findRtidFn(s []codecRtidFn, rtid uintptr) (i uint, fn *codecFn) { - // binary search. adapted from sort/search.go. - // Note: we use goto (instead of for loop) so this can be inlined. - - // h, i, j := 0, 0, len(s) - var h uint // var h, i uint - var j = uint(len(s)) -LOOP: - if i < j { - h = (i + j) >> 1 // avoid overflow when computing h // h = i + (j-i)/2 - if s[h].rtid < rtid { - i = h + 1 - } else { - j = h - } - goto LOOP - } - if i < uint(len(s)) && s[i].rtid == rtid { - fn = s[i].fn - } - return -} - -func (x *BasicHandle) fn(rt reflect.Type) (fn *codecFn) { - return x.fnVia(rt, x.typeInfos(), &x.rtidFns, x.CheckCircularRef, true) -} - -func (x *BasicHandle) fnNoExt(rt reflect.Type) (fn *codecFn) { - return x.fnVia(rt, x.typeInfos(), &x.rtidFnsNoExt, x.CheckCircularRef, false) -} - -func (x *basicHandleRuntimeState) fnVia(rt reflect.Type, tinfos *TypeInfos, fs *atomicRtidFnSlice, checkCircularRef, checkExt bool) (fn *codecFn) { - rtid := rt2id(rt) - sp := fs.load() - if sp != nil { - if _, fn = findRtidFn(sp, rtid); fn != nil { - return - } - } - - fn = x.fnLoad(rt, rtid, tinfos, checkCircularRef, checkExt) - x.mu.Lock() - sp = fs.load() - // since this is an atomic load/store, we MUST use a different array each time, - // else we have a data race when a store is happening simultaneously with a findRtidFn call. - if sp == nil { - sp = []codecRtidFn{{rtid, fn}} - fs.store(sp) - } else { - idx, fn2 := findRtidFn(sp, rtid) - if fn2 == nil { - sp2 := make([]codecRtidFn, len(sp)+1) - copy(sp2[idx+1:], sp[idx:]) - copy(sp2, sp[:idx]) - sp2[idx] = codecRtidFn{rtid, fn} - fs.store(sp2) - } - } - x.mu.Unlock() - return -} - -func fnloadFastpathUnderlying(ti *typeInfo) (f *fastpathE, u reflect.Type) { - var rtid uintptr - var idx int - rtid = rt2id(ti.fastpathUnderlying) - idx = fastpathAvIndex(rtid) - if idx == -1 { - return - } - f = &fastpathAv[idx] - if uint8(reflect.Array) == ti.kind { - u = reflectArrayOf(ti.rt.Len(), ti.elem) - } else { - u = f.rt - } - return -} - -func (x *basicHandleRuntimeState) fnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, checkCircularRef, checkExt bool) (fn *codecFn) { - fn = new(codecFn) - fi := &(fn.i) - ti := tinfos.get(rtid, rt) - fi.ti = ti - rk := reflect.Kind(ti.kind) - - // anything can be an extension except the built-in ones: time, raw and rawext. - // ensure we check for these types, then if extension, before checking if - // it implementes one of the pre-declared interfaces. - - fi.addrDf = true - // fi.addrEf = true - - if rtid == timeTypId && x.timeBuiltin { - fn.fe = (*Encoder).kTime - fn.fd = (*Decoder).kTime - } else if rtid == rawTypId { - fn.fe = (*Encoder).raw - fn.fd = (*Decoder).raw - } else if rtid == rawExtTypId { - fn.fe = (*Encoder).rawExt - fn.fd = (*Decoder).rawExt - fi.addrD = true - fi.addrE = true - } else if xfFn := x.getExt(rtid, checkExt); xfFn != nil { - fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext - fn.fe = (*Encoder).ext - fn.fd = (*Decoder).ext - fi.addrD = true - if rk == reflect.Struct || rk == reflect.Array { - fi.addrE = true - } - } else if (ti.flagSelfer || ti.flagSelferPtr) && - !(checkCircularRef && ti.flagSelferViaCodecgen && ti.kind == byte(reflect.Struct)) { - // do not use Selfer generated by codecgen if it is a struct and CheckCircularRef=true - fn.fe = (*Encoder).selferMarshal - fn.fd = (*Decoder).selferUnmarshal - fi.addrD = ti.flagSelferPtr - fi.addrE = ti.flagSelferPtr - } else if supportMarshalInterfaces && x.isBe() && - (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && - (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { - fn.fe = (*Encoder).binaryMarshal - fn.fd = (*Decoder).binaryUnmarshal - fi.addrD = ti.flagBinaryUnmarshalerPtr - fi.addrE = ti.flagBinaryMarshalerPtr - } else if supportMarshalInterfaces && !x.isBe() && x.isJs() && - (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && - (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { - //If JSON, we should check JSONMarshal before textMarshal - fn.fe = (*Encoder).jsonMarshal - fn.fd = (*Decoder).jsonUnmarshal - fi.addrD = ti.flagJsonUnmarshalerPtr - fi.addrE = ti.flagJsonMarshalerPtr - } else if supportMarshalInterfaces && !x.isBe() && - (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && - (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { - fn.fe = (*Encoder).textMarshal - fn.fd = (*Decoder).textUnmarshal - fi.addrD = ti.flagTextUnmarshalerPtr - fi.addrE = ti.flagTextMarshalerPtr - } else { - if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { - // by default (without using unsafe), - // if an array is not addressable, converting from an array to a slice - // requires an allocation (see helper_not_unsafe.go: func rvGetSlice4Array). - // - // (Non-addressable arrays mostly occur as keys/values from a map). - // - // However, fastpath functions are mostly for slices of numbers or strings, - // which are small by definition and thus allocation should be fast/cheap in time. - // - // Consequently, the value of doing this quick allocation to elide the overhead cost of - // non-optimized (not-unsafe) reflection is a fair price. - var rtid2 uintptr - if !ti.flagHasPkgPath { // un-named type (slice or mpa or array) - rtid2 = rtid - if rk == reflect.Array { - rtid2 = rt2id(ti.key) // ti.key for arrays = reflect.SliceOf(ti.elem) - } - if idx := fastpathAvIndex(rtid2); idx != -1 { - fn.fe = fastpathAv[idx].encfn - fn.fd = fastpathAv[idx].decfn - fi.addrD = true - fi.addrDf = false - if rk == reflect.Array { - fi.addrD = false // decode directly into array value (slice made from it) - } - } - } else { // named type (with underlying type of map or slice or array) - // try to use mapping for underlying type - xfe, xrt := fnloadFastpathUnderlying(ti) - if xfe != nil { - xfnf := xfe.encfn - xfnf2 := xfe.decfn - if rk == reflect.Array { - fi.addrD = false // decode directly into array value (slice made from it) - fn.fd = func(d *Decoder, xf *codecFnInfo, xrv reflect.Value) { - xfnf2(d, xf, rvConvert(xrv, xrt)) - } - } else { - fi.addrD = true - fi.addrDf = false // meaning it can be an address(ptr) or a value - xptr2rt := reflect.PtrTo(xrt) - fn.fd = func(d *Decoder, xf *codecFnInfo, xrv reflect.Value) { - if xrv.Kind() == reflect.Ptr { - xfnf2(d, xf, rvConvert(xrv, xptr2rt)) - } else { - xfnf2(d, xf, rvConvert(xrv, xrt)) - } - } - } - fn.fe = func(e *Encoder, xf *codecFnInfo, xrv reflect.Value) { - xfnf(e, xf, rvConvert(xrv, xrt)) - } - } - } - } - if fn.fe == nil && fn.fd == nil { - switch rk { - case reflect.Bool: - fn.fe = (*Encoder).kBool - fn.fd = (*Decoder).kBool - case reflect.String: - // Do not use different functions based on StringToRaw option, as that will statically - // set the function for a string type, and if the Handle is modified thereafter, - // behaviour is non-deterministic - // i.e. DO NOT DO: - // if x.StringToRaw { - // fn.fe = (*Encoder).kStringToRaw - // } else { - // fn.fe = (*Encoder).kStringEnc - // } - - fn.fe = (*Encoder).kString - fn.fd = (*Decoder).kString - case reflect.Int: - fn.fd = (*Decoder).kInt - fn.fe = (*Encoder).kInt - case reflect.Int8: - fn.fe = (*Encoder).kInt8 - fn.fd = (*Decoder).kInt8 - case reflect.Int16: - fn.fe = (*Encoder).kInt16 - fn.fd = (*Decoder).kInt16 - case reflect.Int32: - fn.fe = (*Encoder).kInt32 - fn.fd = (*Decoder).kInt32 - case reflect.Int64: - fn.fe = (*Encoder).kInt64 - fn.fd = (*Decoder).kInt64 - case reflect.Uint: - fn.fd = (*Decoder).kUint - fn.fe = (*Encoder).kUint - case reflect.Uint8: - fn.fe = (*Encoder).kUint8 - fn.fd = (*Decoder).kUint8 - case reflect.Uint16: - fn.fe = (*Encoder).kUint16 - fn.fd = (*Decoder).kUint16 - case reflect.Uint32: - fn.fe = (*Encoder).kUint32 - fn.fd = (*Decoder).kUint32 - case reflect.Uint64: - fn.fe = (*Encoder).kUint64 - fn.fd = (*Decoder).kUint64 - case reflect.Uintptr: - fn.fe = (*Encoder).kUintptr - fn.fd = (*Decoder).kUintptr - case reflect.Float32: - fn.fe = (*Encoder).kFloat32 - fn.fd = (*Decoder).kFloat32 - case reflect.Float64: - fn.fe = (*Encoder).kFloat64 - fn.fd = (*Decoder).kFloat64 - case reflect.Complex64: - fn.fe = (*Encoder).kComplex64 - fn.fd = (*Decoder).kComplex64 - case reflect.Complex128: - fn.fe = (*Encoder).kComplex128 - fn.fd = (*Decoder).kComplex128 - case reflect.Chan: - fn.fe = (*Encoder).kChan - fn.fd = (*Decoder).kChan - case reflect.Slice: - fn.fe = (*Encoder).kSlice - fn.fd = (*Decoder).kSlice - case reflect.Array: - fi.addrD = false // decode directly into array value (slice made from it) - fn.fe = (*Encoder).kArray - fn.fd = (*Decoder).kArray - case reflect.Struct: - if ti.anyOmitEmpty || - ti.flagMissingFielder || - ti.flagMissingFielderPtr { - fn.fe = (*Encoder).kStruct - } else { - fn.fe = (*Encoder).kStructNoOmitempty - } - fn.fd = (*Decoder).kStruct - case reflect.Map: - fn.fe = (*Encoder).kMap - fn.fd = (*Decoder).kMap - case reflect.Interface: - // encode: reflect.Interface are handled already by preEncodeValue - fn.fd = (*Decoder).kInterface - fn.fe = (*Encoder).kErr - default: - // reflect.Ptr and reflect.Interface are handled already by preEncodeValue - fn.fe = (*Encoder).kErr - fn.fd = (*Decoder).kErr - } - } - } - return +func (x *BasicHandle) getTypeInfo4RT(rt reflect.Type) (pti *typeInfo) { + return x.typeInfos().get(rt2id(rt), rt) } // Handle defines a specific encoding format. It also stores any runtime state @@ -1313,14 +1119,18 @@ func (x *basicHandleRuntimeState) fnLoad(rt reflect.Type, rtid uintptr, tinfos * type Handle interface { Name() string getBasicHandle() *BasicHandle - newEncDriver() encDriver - newDecDriver() decDriver isBinary() bool isJson() bool // json is special for now, so track it // desc describes the current byte descriptor, or returns "unknown[XXX]" if not understood. desc(bd byte) string // init initializes the handle based on handle-specific info (beyond what is in BasicHandle) - init() + // init() + // clone() Handle + newEncoderBytes(out *[]byte) encoderI + newEncoder(w io.Writer) encoderI + + newDecoderBytes(in []byte) decoderI + newDecoder(r io.Reader) decoderI } // Raw represents raw formatted bytes. @@ -1330,11 +1140,13 @@ type Handle interface { type Raw []byte // RawExt represents raw unprocessed extension data. +// // Some codecs will decode extension data as a *RawExt // if there is no registered extension for the tag. // -// Only one of Data or Value is nil. -// If Data is nil, then the content of the RawExt is in the Value. +// On encode, encode the Data. If nil, then try to encode the Value. +// +// On decode: store tag, then store bytes and/or decode into Value. type RawExt struct { Tag uint64 // Data is the []byte which represents the raw ext. If nil, ext is exposed in Value. @@ -1454,12 +1266,10 @@ type extFailWrapper struct { type binaryEncodingType struct{} func (binaryEncodingType) isBinary() bool { return true } -func (binaryEncodingType) isJson() bool { return false } type textEncodingType struct{} func (textEncodingType) isBinary() bool { return false } -func (textEncodingType) isJson() bool { return false } type notJsonType struct{} @@ -1487,11 +1297,8 @@ func (noBuiltInTypes) DecodeBuiltin(rt uintptr, v interface{}) {} // retrofitted from stdlib: encoding/binary/BigEndian (ByteOrder) type bigenHelper struct{} -func (z bigenHelper) PutUint16(v uint16) (b [2]byte) { - return [...]byte{ - byte(v >> 8), - byte(v), - } +func (z bigenHelper) PutUint16(v uint16) (b1, b2 byte) { + return byte(v >> 8), byte(v) } func (z bigenHelper) PutUint32(v uint32) (b [4]byte) { @@ -1539,23 +1346,6 @@ func (z bigenHelper) Uint64(b [8]byte) (v uint64) { uint64(b[0])<<56 } -func (z bigenHelper) writeUint16(w *encWr, v uint16) { - x := z.PutUint16(v) - w.writen2(x[0], x[1]) -} - -func (z bigenHelper) writeUint32(w *encWr, v uint32) { - // w.writeb((z.PutUint32(v))[:]) - // x := z.PutUint32(v) - // w.writeb(x[:]) - // w.writen4(x[0], x[1], x[2], x[3]) - w.writen4(z.PutUint32(v)) -} - -func (z bigenHelper) writeUint64(w *encWr, v uint64) { - w.writen8(z.PutUint64(v)) -} - type extTypeTagFn struct { rtid uintptr rtidptr uintptr @@ -1584,14 +1374,13 @@ func (x *BasicHandle) AddExt(rt reflect.Type, tag byte, // An error is returned if that is not honored. // To Deregister an ext, call SetExt with nil Ext. // -// Deprecated: Use SetBytesExt or SetInterfaceExt on the Handle instead. +// It will throw an error if called after the Handle has been initialized. +// +// Deprecated: Use SetBytesExt or SetInterfaceExt on the Handle instead (which *may* internally call this) func (x *BasicHandle) SetExt(rt reflect.Type, tag uint64, ext Ext) (err error) { if x.isInited() { return errHandleInited } - if x.basicHandleRuntimeState == nil { - x.basicHandleRuntimeState = new(basicHandleRuntimeState) - } return x.basicHandleRuntimeState.setExt(rt, tag, ext) } @@ -1672,6 +1461,16 @@ func (o intf2impls) intf2impl(rtid uintptr) (rv reflect.Value) { return } +type structFieldInfoNode struct { + offset uint16 + index uint16 + kind uint8 + numderef uint8 + _ uint16 // padding + + typ reflect.Type +} + // structFieldinfopathNode is a node in a tree, which allows us easily // walk the anonymous path. // @@ -1679,19 +1478,7 @@ func (o intf2impls) intf2impl(rtid uintptr) (rv reflect.Value) { // will be nil and this information becomes a value (not needing any indirection). type structFieldInfoPathNode struct { parent *structFieldInfoPathNode - - offset uint16 - index uint16 - kind uint8 - numderef uint8 - - // encNameAsciiAlphaNum and omitEmpty should be in structFieldInfo, - // but are kept here for tighter packaging. - - encNameAsciiAlphaNum bool // the encName only contains ascii alphabet and numbers - omitEmpty bool - - typ reflect.Type + structFieldInfoNode } // depth returns number of valid nodes in the hierachy @@ -1705,46 +1492,105 @@ TOP: return } -// field returns the field of the struct. -func (path *structFieldInfoPathNode) field(v reflect.Value) (rv2 reflect.Value) { - if parent := path.parent; parent != nil { - v = parent.field(v) - for j, k := uint8(0), parent.numderef; j < k; j++ { - if rvIsNil(v) { - return +// MARKER: fully working code - commented out as we inline the code in sfi.field(No)Alloc +// // field returns the field of the struct. +// func (n *structFieldInfoPathNode) field(v reflect.Value, alloc, base bool) (rv reflect.Value) { +// if n.parent != nil { +// v = n.parent.field(v, alloc, true) +// if !v.IsValid() { +// return +// } +// } +// return n.structFieldInfoNode.field(v, alloc, base) +// } + +type structFieldInfo struct { + encName string // encode name + + // encNameHash uintptr + + // fieldName string // currently unused + + encNameEscape4Json bool + omitEmpty bool + + ptrKind bool + + encBuiltin bool // is field supported for encoding as a builtin? + decBuiltin bool // is field addr supported for decoding as a builtin? + + node structFieldInfoNode + parents []structFieldInfoNode + + // path structFieldInfoPathNode + + baseTyp reflect.Type + ptrTyp reflect.Type +} + +// MARKER: fully working code - commented out as we inline the code in sfi.field(No)Alloc +// func (n *structFieldInfo) field(v reflect.Value, alloc, base bool) (rv reflect.Value) { +// for i := range n.parents { +// v = n.parents[i].field(v, alloc, true) +// if !v.IsValid() { +// return +// } +// } +// return n.node.field(v, alloc, base) +// } + +func (n *structFieldInfo) fieldAlloc(v reflect.Value) reflect.Value { + // return n.path.field(v, true, true) + // return n.field(v, true, true) + var j, nd uint8 + for i := range n.parents { + v = n.parents[i].rvField(v) + nd = n.parents[i].numderef + for j = 0; j < nd; j++ { + if rvPtrIsNil(v) { + rvSetDirect(v, reflect.New(v.Type().Elem())) } v = v.Elem() } } - return path.rvField(v) + v = n.node.rvField(v) + nd = n.node.numderef + for j = 0; j < nd; j++ { + if rvPtrIsNil(v) { + rvSetDirect(v, reflect.New(v.Type().Elem())) + } + v = v.Elem() + } + return v } -// fieldAlloc returns the field of the struct. -// It allocates if a nil value was seen while searching. -func (path *structFieldInfoPathNode) fieldAlloc(v reflect.Value) (rv2 reflect.Value) { - if parent := path.parent; parent != nil { - v = parent.fieldAlloc(v) - for j, k := uint8(0), parent.numderef; j < k; j++ { - if rvIsNil(v) { - rvSetDirect(v, reflect.New(v.Type().Elem())) +func (n *structFieldInfo) fieldNoAlloc(v reflect.Value, base bool) (rv reflect.Value) { + // return n.path.field(v, false, base) + // return n.field(v, false, base) + var j, nd uint8 + for i := range n.parents { + v = n.parents[i].rvField(v) + nd = n.parents[i].numderef + for j = 0; j < nd; j++ { + if rvPtrIsNil(v) { + return reflect.Value{} } v = v.Elem() } } - return path.rvField(v) -} - -type structFieldInfo struct { - encName string // encode name - - // encNameHash uintptr - - // fieldName string // currently unused - - // encNameAsciiAlphaNum and omitEmpty should be here, - // but are stored in structFieldInfoPathNode for tighter packaging. - - path structFieldInfoPathNode + v = n.node.rvField(v) + rv = v + nd = n.node.numderef + for j = 0; j < nd; j++ { + if rvPtrIsNil(v) { + return reflect.Value{} + } + v = v.Elem() + } + if base { + rv = v + } + return } func parseStructInfo(stag string) (toArray, omitEmpty bool, keytype valueType) { @@ -1777,22 +1623,168 @@ func parseStructInfo(stag string) (toArray, omitEmpty bool, keytype valueType) { return } -func (si *structFieldInfo) parseTag(stag string) { +func parseStructFieldTag(stag string) (encName string, omitEmpty bool) { if stag == "" { return } for i, s := range strings.Split(stag, ",") { if i == 0 { if s != "" { - si.encName = s + encName = s } - } else { - switch s { - case "omitempty": - si.path.omitEmpty = true + continue + } + if s == "omitempty" { + omitEmpty = true + } + } + return +} + +// ---- + +type uint8To32TrieNode struct { + uint8To32TrieNodeNoKids + kids uint8To32TrieNodeKids +} + +func (x *uint8To32TrieNode) reset(v uint8) { + x.key = v + x.value = 0 + x.valid = false + x.truncKids() +} + +func (x *uint8To32TrieNode) expandKids() (r *uint8To32TrieNode) { + // since we want to reuse the slices, let's not use append as it will + // always overwrite the value. Only append if we're expanding + kids := x.getKids() + if cap(kids) > len(kids) { + kids = kids[:len(kids)+1] + } else { + kids = append(kids, uint8To32TrieNode{}) + } + x.setKids(kids) + r = &kids[len(kids)-1] + return +} + +func (x *uint8To32TrieNode) put(v uint8) (r *uint8To32TrieNode) { + kids := x.getKids() + for i := range kids { + if kids[i].key == v { + return &kids[i] + } + } + + r = x.expandKids() + r.reset(v) + return r +} + +func (x *uint8To32TrieNode) puts(s string, v uint32) (r *uint8To32TrieNode) { + for _, c := range []byte(s) { + x = x.put(c) + } + x.value = v + x.valid = true + return x +} + +func (x *uint8To32TrieNode) gets(s []byte) (v uint32, ok bool) { +TOP: + for _, b := range s { + kids := x.getKids() + for i := range kids { + if kids[i].key == b { + x = &kids[i] + continue TOP } } + return 0, false + } + return x.value, x.valid +} + +func (x *uint8To32TrieNode) deepNumKids() (n int) { + kids := x.getKids() + n = len(kids) + for i := range kids { + n += kids[i].deepNumKids() } + return +} + +// arena just helps all the nodes stay close for better cache-line performance. +// It basically tries to load up all the nodes within a contiguous space of memory. +type uint8To32TrieNodeArena struct { + arena []uint8To32TrieNode + cursor int +} + +func (x *uint8To32TrieNodeArena) init(v *uint8To32TrieNode) (r *uint8To32TrieNode) { + x.arena = make([]uint8To32TrieNode, v.deepNumKids()+1) // incl one for the node, and one buffer + r = &x.arena[0] + x.cursor++ + x.clone(r, v) + return +} + +func (x *uint8To32TrieNodeArena) clone(dst, src *uint8To32TrieNode) { + dst.uint8To32TrieNodeNoKids = src.uint8To32TrieNodeNoKids + // dst.kids = nil + srckids := src.getKids() + c := len(srckids) + if c == 0 { + return + } + dstkids := x.arena[x.cursor:][:c:c] + dst.setKids(dstkids) + x.cursor += c + for i := range srckids { + x.clone(&dstkids[i], &srckids[i]) + } +} + +// ---- + +var pool4SFIs = sync.Pool{ + New: func() interface{} { + return &uint8To32TrieNode{} + }, +} + +func (x *structFieldInfos) finish() { + var src *uint8To32TrieNode + if usePoolForSFIs { + src = pool4SFIs.Get().(*uint8To32TrieNode) + } else { + src = &x.t + } + x.loadSearchTrie(src) + if useArenaForSFIs { + var ar uint8To32TrieNodeArena + x.t = *(ar.init(src)) + } + if usePoolForSFIs { + src.reset(0) + pool4SFIs.Put(src) + } +} + +func (x *structFieldInfos) loadSearchTrie(src *uint8To32TrieNode) { + // load the search trie + for i, v := range x.source() { + src.puts(v.encName, uint32(i)) + } +} + +func (x *structFieldInfos) search(name []byte) (sfi *structFieldInfo) { + n, ok := x.t.gets(name) + if ok { + sfi = x.source()[n] + } + return } type sfiSortedByEncName []*structFieldInfo @@ -1821,7 +1813,7 @@ type typeInfo4Container struct { tielem *typeInfo } -// typeInfo keeps static (non-changing readonly)information +// typeInfo keeps static (non-changing readonly) information // about each (non-ptr) type referenced in the encode/decode sequence. // // During an encode/decode sequence, we work as below: @@ -1842,12 +1834,15 @@ type typeInfo struct { kind uint8 chandir uint8 - anyOmitEmpty bool // true if a struct, and any of the fields are tagged "omitempty" - toArray bool // whether this (struct) type should be encoded as an array - keyType valueType // if struct, how is the field name stored in a stream? default is string - mbs bool // base type (T or *T) is a MapBySlice - - sfi4Name map[string]*structFieldInfo // map. used for finding sfi given a name + // simple=true if a struct, AND + // - none of the fields are tagged "omitempty" + // - no missingFielder + // - keyType is always string + // - noEsc4Json on any fields + simple bool + toArray bool // whether this (struct) type should be encoded as an array + keyType valueType // if struct, how is the field name stored in a stream? default is string + mbs bool // base type (T or *T) is a MapBySlice *typeInfo4Container @@ -1861,8 +1856,7 @@ type typeInfo struct { flagComparable bool flagCanTransient bool - flagMarshalInterface bool // does this have custom (un)marshal implementation? - flagSelferViaCodecgen bool + flagMarshalInterface bool // does this have custom (un)marshal implementation? // custom implementation flags flagIsZeroer bool @@ -1895,132 +1889,127 @@ type typeInfo struct { flagMissingFielder bool flagMissingFielderPtr bool + flagEncBuiltin bool + flagDecBuiltin bool + infoFieldOmitempty bool + // MARKER - may need padding here (like 6 bytes - auto-handled) sfi structFieldInfos } func (ti *typeInfo) siForEncName(name []byte) (si *structFieldInfo) { - return ti.sfi4Name[string(name)] + return ti.sfi.search(name) } func (ti *typeInfo) resolve(x []structFieldInfo, ss map[string]uint16) (n int) { n = len(x) - for i := range x { ui := uint16(i) - xn := x[i].encName + sf := &x[ui] + xn := sf.encName j, ok := ss[xn] - if ok { - i2clear := ui // index to be cleared - if x[i].path.depth() < x[j].path.depth() { // this one is shallower - ss[xn] = ui - i2clear = j - } - if x[i2clear].encName != "" { - x[i2clear].encName = "" - n-- - } - } else { + if !ok { + ss[xn] = ui + continue + } + if ui == j { + continue + } + // if x[i].path.depth() < x[j].path.depth() { // this one is shallower + sf2 := &x[j] + if len(sf.parents) < len(sf2.parents) { // this one is shallower ss[xn] = ui + sf = sf2 + } + if sf.encName == "" { + continue } + sf.encName = "" + n-- } - return } func (ti *typeInfo) init(x []structFieldInfo, n int) { - var anyOmitEmpty bool + simple := true + + if ti.flagMissingFielder || ti.flagMissingFielderPtr || + ti.keyType != valueTypeString { + simple = false + } // remove all the nils (non-ready) - m := make(map[string]*structFieldInfo, n) + // m := make(map[string]*structFieldInfo, n) w := make([]structFieldInfo, n) y := make([]*structFieldInfo, n+n) z := y[n:] y = y[:n] n = 0 for i := range x { - if x[i].encName == "" { + sfi := &x[i] + if sfi.encName == "" { continue } - if !anyOmitEmpty && x[i].path.omitEmpty { - anyOmitEmpty = true + if simple && (sfi.omitEmpty || sfi.encNameEscape4Json) { + simple = false } - w[n] = x[i] - y[n] = &w[n] - m[x[i].encName] = &w[n] + w[n] = *sfi + sfi = &w[n] + y[n] = sfi + // m[sfi.encName] = sfi n++ } if n != len(y) { - halt.errorf("failure reading struct %v - expecting %d of %d valid fields, got %d", ti.rt, len(y), len(x), n) + halt.errorf("failure reading struct %v - expecting %d of %d valid fields, got %d", ti.rt, len(y), len(x), any(n)) } + ti.simple = simple + copy(z, y) sort.Sort(sfiSortedByEncName(z)) - ti.anyOmitEmpty = anyOmitEmpty ti.sfi.load(y, z) - ti.sfi4Name = m + ti.sfi.finish() + // ti.sfi.byName = m } -// Handling flagCanTransient +// isCanTransient returns whether this type can be transient. +// +// # Handling flagCanTransient // // We support transient optimization if the kind of the type is -// a number, bool, string, or slice (of number/bool). -// In addition, we also support if the kind is struct or array, -// and the type does not contain any pointers recursively). +// - a number, bool, string +// - slice (of number/bool) +// - struct with no reference values (pointers, interface, etc) recursively +// - array with no reference values (pointers, interface, etc) recursively // -// Noteworthy that all reference types (string, slice, func, map, ptr, interface, etc) have pointers. +// NOTE: all reference types (string, slice, func, map, ptr, interface, etc) have pointers. // // If using transient for a type with a pointer, there is the potential for data corruption // when GC tries to follow a "transient" pointer which may become a non-pointer soon after. -// - -func transientBitsetFlags() *bitset32 { - if transientValueHasStringSlice { - return &numBoolStrSliceBitset +func isCanTransient(t reflect.Type, inclStrSlice bool) (v bool) { + k := t.Kind() + bset := &numBoolBitset + if inclStrSlice { + bset = &numBoolStrSliceBitset } - return &numBoolBitset -} - -func isCanTransient(t reflect.Type, k reflect.Kind) (v bool) { - var bs = transientBitsetFlags() - if bs.isset(byte(k)) { + if bset.isset(byte(k)) { v = true - } else if k == reflect.Slice { - elem := t.Elem() - v = numBoolBitset.isset(byte(elem.Kind())) } else if k == reflect.Array { - elem := t.Elem() - v = isCanTransient(elem, elem.Kind()) + v = isCanTransient(t.Elem(), false) } else if k == reflect.Struct { v = true for j, jlen := 0, t.NumField(); j < jlen; j++ { f := t.Field(j) - if !isCanTransient(f.Type, f.Type.Kind()) { - v = false - return + if !isCanTransient(f.Type, false) { + return false } } - } else { - v = false } return } -func (ti *typeInfo) doSetFlagCanTransient() { - if transientSizeMax > 0 { - ti.flagCanTransient = ti.size <= transientSizeMax - } else { - ti.flagCanTransient = true - } - if ti.flagCanTransient { - if !transientBitsetFlags().isset(ti.kind) { - ti.flagCanTransient = isCanTransient(ti.rt, reflect.Kind(ti.kind)) - } - } -} - type rtid2ti struct { rtid uintptr ti *typeInfo @@ -2031,7 +2020,7 @@ type rtid2ti struct { // It is configured with a set of tag keys, which are used to get // configuration for the type. type TypeInfos struct { - infos atomicTypeInfoSlice + infos atomic.Pointer[[]rtid2ti] // atomicTypeInfoSlice mu sync.Mutex _ uint64 // padding (cache-aligned) tags []string @@ -2088,9 +2077,9 @@ func (x *TypeInfos) get(rtid uintptr, rt reflect.Type) (pti *typeInfo) { } func (x *TypeInfos) find(rtid uintptr) (pti *typeInfo) { - sp := x.infos.load() + sp := x.infos.Load() if sp != nil { - _, pti = findTypeInfo(sp, rtid) + _, pti = findTypeInfo(*sp, rtid) } return } @@ -2099,7 +2088,7 @@ func (x *TypeInfos) load(rt reflect.Type) (pti *typeInfo) { rk := rt.Kind() if rk == reflect.Ptr { // || (rk == reflect.Interface && rtid != intfTypId) { - halt.errorf("invalid kind passed to TypeInfos.get: %v - %v", rk, rt) + halt.errorf("invalid kind passed to TypeInfos.get: %v - %v", rk.String(), rt) } rtid := rt2id(rt) @@ -2108,7 +2097,7 @@ func (x *TypeInfos) load(rt reflect.Type) (pti *typeInfo) { // it may lead to duplication, but that's ok. ti := typeInfo{ rt: rt, - ptr: reflect.PtrTo(rt), + ptr: reflect.PointerTo(rt), rtid: rtid, kind: uint8(rk), size: uint32(rt.Size()), @@ -2119,6 +2108,12 @@ func (x *TypeInfos) load(rt reflect.Type) (pti *typeInfo) { flagHasPkgPath: rt.PkgPath() != "", } + _, ti.flagEncBuiltin = searchRtids(encBuiltinRtids, rtid) + _, ti.flagDecBuiltin = searchRtids(decBuiltinRtids, rtid) + if !ti.flagDecBuiltin { + _, ti.flagDecBuiltin = searchRtids(decBuiltinRtids, rt2id(ti.ptr)) + } + // bset sets custom implementation flags bset := func(when bool, b *bool) { if when { @@ -2159,11 +2154,7 @@ func (x *TypeInfos) load(rt reflect.Type) (pti *typeInfo) { bset(b1, &ti.flagIsCodecEmptyer) bset(b2, &ti.flagIsCodecEmptyerPtr) - b1, b2 = implIntf(rt, isSelferViaCodecgenerTyp) - ti.flagSelferViaCodecgen = b1 || b2 - ti.flagMarshalInterface = ti.flagSelfer || ti.flagSelferPtr || - ti.flagSelferViaCodecgen || ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr || ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr || ti.flagTextMarshaler || ti.flagTextMarshalerPtr || @@ -2175,7 +2166,7 @@ func (x *TypeInfos) load(rt reflect.Type) (pti *typeInfo) { // bset(b1, &ti.flagComparable) ti.flagComparable = b1 - ti.doSetFlagCanTransient() + ti.flagCanTransient = isTransientType4Size(ti.size) && isCanTransient(ti.rt, true) var tt reflect.Type switch rk { @@ -2187,14 +2178,22 @@ func (x *TypeInfos) load(rt reflect.Type) (pti *typeInfo) { } else { ti.keyType = valueTypeString } - pp, pi := &pool4tiload, pool4tiload.Get() - pv := pi.(*typeInfoLoad) - pv.reset() + var pi interface{} + var pv *typeInfoLoad + if usePoolForTypeInfoLoad { + pi = poolForTypeInfoLoad.Get() + pv = pi.(*typeInfoLoad) + pv.reset() + } else { + pv = newTypeInfoLoad() + } pv.etypes = append(pv.etypes, ti.rtid) - x.rget(rt, rtid, nil, pv, omitEmpty) + x.rget(rt, nil, pv, omitEmpty) n := ti.resolve(pv.sfis, pv.sfiNames) ti.init(pv.sfis, n) - pp.Put(pi) + if usePoolForTypeInfoLoad { + poolForTypeInfoLoad.Put(pi) + } case reflect.Map: ti.typeInfo4Container = new(typeInfo4Container) ti.elem = rt.Elem() @@ -2265,13 +2264,16 @@ func (x *TypeInfos) load(rt reflect.Type) (pti *typeInfo) { } x.mu.Lock() - sp := x.infos.load() + var sp []rtid2ti + if spt := x.infos.Load(); spt != nil { + sp = *spt + } // since this is an atomic load/store, we MUST use a different array each time, // else we have a data race when a store is happening simultaneously with a findRtidFn call. if sp == nil { pti = &ti sp = []rtid2ti{{rtid, pti}} - x.infos.store(sp) + x.infos.Store(&sp) } else { var idx uint idx, pti = findTypeInfo(sp, rtid) @@ -2281,15 +2283,14 @@ func (x *TypeInfos) load(rt reflect.Type) (pti *typeInfo) { copy(sp2[idx+1:], sp[idx:]) copy(sp2, sp[:idx]) sp2[idx] = rtid2ti{rtid, pti} - x.infos.store(sp2) + x.infos.Store(&sp2) } } x.mu.Unlock() return } -func (x *TypeInfos) rget(rt reflect.Type, rtid uintptr, - path *structFieldInfoPathNode, pv *typeInfoLoad, omitEmpty bool) { +func (x *TypeInfos) rget(rt reflect.Type, path *structFieldInfoPathNode, pv *typeInfoLoad, defaultOmitEmpty bool) { // Read up fields and store how to access the value. // // It uses go's rules for message selectors, @@ -2318,41 +2319,40 @@ LOOP: if stag == "-" { continue } - var si structFieldInfo var numderef uint8 = 0 - for xft := f.Type; xft.Kind() == reflect.Ptr; xft = xft.Elem() { + ft := f.Type + for ; ft.Kind() == reflect.Ptr; ft = ft.Elem() { numderef++ } - var parsed bool + var encName string + var parsed, omitEmpty bool + + ftid := rt2id(ft) // if anonymous and no struct tag (or it's blank), // and a struct (or pointer to struct), inline it. if f.Anonymous && fkind != reflect.Interface { // ^^ redundant but ok: per go spec, an embedded pointer type cannot be to an interface - ft := f.Type - isPtr := ft.Kind() == reflect.Ptr - for ft.Kind() == reflect.Ptr { - ft = ft.Elem() - } + isPtr := f.Type.Kind() == reflect.Ptr isStruct := ft.Kind() == reflect.Struct // Ignore embedded fields of unexported non-struct types. // Also, from go1.10, ignore pointers to unexported struct types // because unmarshal cannot assign a new struct to an unexported field. // See https://golang.org/issue/21357 - if (isUnexported && !isStruct) || (!allowSetUnexportedEmbeddedPtr && isUnexported && isPtr) { + if isUnexported && (!isStruct || isPtr) { continue } doInline := stag == "" if !doInline { - si.parseTag(stag) + encName, omitEmpty = parseStructFieldTag(stag) parsed = true - doInline = si.encName == "" // si.isZero() + doInline = encName == "" // si.isZero() } if doInline && isStruct { // if etypes contains this, don't call rget again (as fields are already seen here) - ftid := rt2id(ft) + // // We cannot recurse forever, but we need to track other field depths. // So - we break if we see a type twice (not the first time). // This should be sufficient to handle an embedded type that refers to its @@ -2371,54 +2371,83 @@ LOOP: if processIt { pv.etypes = append(pv.etypes, ftid) path2 := &structFieldInfoPathNode{ - parent: path, - typ: f.Type, - offset: uint16(f.Offset), - index: j, - kind: uint8(fkind), - numderef: numderef, + parent: path, + structFieldInfoNode: structFieldInfoNode{ + typ: f.Type, + offset: uint16(f.Offset), + index: j, + kind: uint8(fkind), + numderef: numderef, + }, } - x.rget(ft, ftid, path2, pv, omitEmpty) + x.rget(ft, path2, pv, defaultOmitEmpty) } continue } } // after the anonymous dance: if an unexported field, skip - if isUnexported || f.Name == "" { // f.Name cannot be "", but defensively handle it + if isUnexported || f.Name == "" || f.Name == structInfoFieldName { // f.Name cannot be "", but defensively handle it continue } - si.path = structFieldInfoPathNode{ - parent: path, + if !parsed { + encName, omitEmpty = parseStructFieldTag(stag) + parsed = true + } + if encName == "" { + encName = f.Name + } + if defaultOmitEmpty { + omitEmpty = true + } + + var si = structFieldInfo{ + encName: encName, + omitEmpty: omitEmpty, + ptrKind: fkind == reflect.Ptr, + baseTyp: ft, + ptrTyp: reflect.PointerTo(ft), + } + + // si.path = structFieldInfoPathNode{ + // parent: path, + // structFieldInfoNode: structFieldInfoNode{ + // typ: f.Type, + // offset: uint16(f.Offset), + // index: j, + // kind: uint8(fkind), + // numderef: numderef, + // }, + // } + + si.node = structFieldInfoNode{ typ: f.Type, offset: uint16(f.Offset), index: j, kind: uint8(fkind), numderef: numderef, - // set asciiAlphaNum to true (default); checked and may be set to false below - encNameAsciiAlphaNum: true, - // note: omitEmpty might have been set in an earlier parseTag call, etc - so carry it forward - omitEmpty: si.path.omitEmpty, } - if !parsed { - si.encName = f.Name - si.parseTag(stag) - parsed = true - } else if si.encName == "" { - si.encName = f.Name + if path != nil { + si.parents = make([]structFieldInfoNode, path.depth()) + for k, p := len(si.parents)-1, path; k >= 0; k-- { + si.parents[k] = p.structFieldInfoNode + p = p.parent + } } - // si.encNameHash = maxUintptr() // hashShortString(bytesView(si.encName)) - - if omitEmpty { - si.path.omitEmpty = true + // ftid = rt2id(ft) where ft = si.baseTyp) + _, si.encBuiltin = searchRtids(encBuiltinRtids, ftid) + _, si.decBuiltin = searchRtids(decBuiltinRtids, ftid) + if !si.decBuiltin { + _, si.decBuiltin = searchRtids(decBuiltinRtids, rt2id(si.ptrTyp)) } + // si.encNameHash = maxUintptr() // hashShortString(bytesView(si.encName)) for i := len(si.encName) - 1; i >= 0; i-- { // bounds-check elimination - if !asciiAlphaNumBitset.isset(si.encName[i]) { - si.path.encNameAsciiAlphaNum = false + if !jsonCharSafeBitset.isset(si.encName[i]) { + si.encNameEscape4Json = true break } } @@ -2427,6 +2456,29 @@ LOOP: } } +type timeRv struct { + v time.Time + r reflect.Value +} + +type bytesRv struct { + v []byte + r reflect.Value +} + +type stringIntf struct { + v string + i interface{} +} + +func cmpTimeRv(v1, v2 timeRv) int { + return v1.v.Compare(v2.v) +} + +func cmpBytesRv(v1, v2 bytesRv) int { + return bytes.Compare(v1.v, v2.v) +} + func implIntf(rt, iTyp reflect.Type) (base bool, indir bool) { // return rt.Implements(iTyp), reflect.PtrTo(rt).Implements(iTyp) @@ -2441,11 +2493,15 @@ func implIntf(rt, iTyp reflect.Type) (base bool, indir bool) { if base { indir = true } else { - indir = reflect.PtrTo(rt).Implements(iTyp) + indir = reflect.PointerTo(rt).Implements(iTyp) } return } +func bytesOK(bs []byte, _ bool) []byte { + return bs +} + func bool2int(b bool) (v uint8) { // MARKER: optimized to be a single instruction if b { @@ -2455,25 +2511,97 @@ func bool2int(b bool) (v uint8) { } func isSliceBoundsError(s string) bool { - return strings.Contains(s, "index out of range") || - strings.Contains(s, "slice bounds out of range") + return strings.Contains(s, "index out of range") || // indexing error + strings.Contains(s, "slice bounds out of range") || // slicing error + strings.Contains(s, "cannot convert slice with length") // slice-->array error } func sprintf(format string, v ...interface{}) string { return fmt.Sprintf(format, v...) } -func panicValToErr(h errDecorator, v interface{}, err *error) { - if v == *err { +func snip(v []byte) []byte { + return v[:min(96, len(v))] +} + +// These constants are used within debugf. +// If the first parameter to debugf is one of these, it determines +// the ANSI color used within the ANSI terminal. +// +// They make it easier to write different groups of debug statements +// with a visual aid. +const ( + hlSFX = "\033[0m" + hlPFX = "\033[1;" + hlBLACK = hlPFX + "30" + "m" + hlRED = hlPFX + "31" + "m" + hlGREEN = hlPFX + "32" + "m" + hlYELLOW = hlPFX + "33" + "m" + hlBLUE = hlPFX + "34" + "m" + hlPURPLE = hlPFX + "35" + "m" + hlCYAN = hlPFX + "36" + "m" + hlWHITE = hlPFX + "37" + "m" + // hlORANGE = hlYELLOW +) + +// debugf will print debug statements to the screen whether or not debugging is on +// +// Note: if first parameter in a is one of the hlXXX vars, then we treat it as a hint +// to highlight in different colors. +// +//go:noinline +func debugf(s string, a ...any) { + if !debugLogging { + return + } + if len(s) == 0 { + return + } + if s[len(s)-1] != '\n' { + s = s + "\n" + } + if len(a) > 0 { + switch a[0] { + case hlBLACK, hlRED, hlGREEN, hlYELLOW, hlBLUE, hlPURPLE, hlCYAN, hlWHITE: + s = a[0].(string) + s + hlSFX + a = a[1:] + } + } + fmt.Printf(s, a...) +} + +func panicToErr(h errDecorator, fn func()) (err error) { + defer panicValToErr(h, callRecoverSentinel, &err, nil, debugging) + fn() + return +} + +// panicValToErr will convert a panic value into an error +// +// err and recovered are guaranteed to be not nil +func panicValToErr(h errDecorator, recovered interface{}, err, errCopy *error, panicAgain bool) { + if recovered == callRecoverSentinel { + recovered = recover() + } + if recovered == nil || err == nil { return } - switch xerr := v.(type) { - case nil: + if recovered == *err { + goto HANDLE_COPY + } + switch xerr := recovered.(type) { + case *outOfBoundsError: + h.wrapErr(xerr, err) case runtime.Error: - d, dok := h.(*Decoder) - if dok && d.bytes && isSliceBoundsError(xerr.Error()) { - *err = io.ErrUnexpectedEOF - } else { + switch d := h.(type) { + case decoderI: + if d.isBytes() && isSliceBoundsError(xerr.Error()) { + // *err = io.ErrUnexpectedEOF + h.wrapErr(io.ErrUnexpectedEOF, err) + } else { + h.wrapErr(xerr, err) + } + default: h.wrapErr(xerr, err) } case error: @@ -2481,62 +2609,55 @@ func panicValToErr(h errDecorator, v interface{}, err *error) { case nil: case io.EOF, io.ErrUnexpectedEOF, errEncoderNotInitialized, errDecoderNotInitialized: // treat as special (bubble up) - *err = xerr + // *err = xerr + h.wrapErr(xerr, err) default: h.wrapErr(xerr, err) } + case string: + h.wrapErr(errors.New(xerr), err) + // *err = errors.New(xerr) default: // we don't expect this to happen (as this library always panics with an error) - h.wrapErr(fmt.Errorf("%v", v), err) + h.wrapErr(fmt.Errorf("%v", recovered), err) + } +HANDLE_COPY: + if errCopy != nil { + *errCopy = *err + } + if panicAgain { + panic(*err) } } -func usableByteSlice(bs []byte, slen int) (out []byte, changed bool) { +func usableByteSlice(bs []byte, slen int) (out []byte, isMadeNew bool) { const maxCap = 1024 * 1024 * 64 // 64MB - const skipMaxCap = false // allow to test - if slen <= 0 { - return []byte{}, true + // const skipMaxCap = false // allow to test + + // if slen <= 0 { + // return bs[:0], false // return zeroByteSlice, true + // } + + // slen=0 means it's defined-length of 0. + // slen<0 means non-defined length which would be determined in future. + + // if bs is nil, for length=0, ensure we don't return a nil []byte, + // which will cause DecodeBytes (caller) to return a nil []byte incorrectly. + if slen == 0 { + return zeroByteSlice, false + } + if slen < 0 { + return bs[:0], false } if slen <= cap(bs) { return bs[:slen], false } // slen > cap(bs) ... handle memory overload appropriately - if skipMaxCap || slen <= maxCap { - return make([]byte, slen), true - } - return make([]byte, maxCap), true -} - -func mapKeyFastKindFor(k reflect.Kind) mapKeyFastKind { - return mapKeyFastKindVals[k&31] -} - -// ---- - -type codecFnInfo struct { - ti *typeInfo - xfFn Ext - xfTag uint64 - addrD bool - addrDf bool // force: if addrD, then decode function MUST take a ptr - addrE bool - // addrEf bool // force: if addrE, then encode function MUST take a ptr -} - -// codecFn encapsulates the captured variables and the encode function. -// This way, we only do some calculations one times, and pass to the -// code block that should be called (encapsulated in a function) -// instead of executing the checks every time. -type codecFn struct { - i codecFnInfo - fe func(*Encoder, *codecFnInfo, reflect.Value) - fd func(*Decoder, *codecFnInfo, reflect.Value) - // _ [1]uint64 // padding (cache-aligned) -} - -type codecRtidFn struct { - rtid uintptr - fn *codecFn + return make([]byte, min(slen, maxCap)), true + // if skipMaxCap || slen <= maxCap { + // return make([]byte, slen), true + // } + // return make([]byte, maxCap), true } func makeExt(ext interface{}) Ext { @@ -2552,12 +2673,25 @@ func makeExt(ext interface{}) Ext { } func baseRV(v interface{}) (rv reflect.Value) { + // MARKER TODO try using rv4i not reflect.ValueOf // use reflect.ValueOf, not rv4i, as of go 1.16beta, rv4i was not inlineable for rv = reflect.ValueOf(v); rv.Kind() == reflect.Ptr; rv = rv.Elem() { } return } +func baseRVRV(v reflect.Value) (rv reflect.Value) { + for rv = v; rv.Kind() == reflect.Ptr; rv = rv.Elem() { + } + return +} + +func baseRT(v reflect.Type) (vv reflect.Type) { + for vv = v; vv.Kind() == reflect.Ptr; vv = vv.Elem() { + } + return +} + // ---- // these "checkOverflow" functions must be inlinable, and not call anybody. @@ -2613,25 +2747,25 @@ func (checkOverflow) SignedInt(v uint64) (overflow bool) { func (x checkOverflow) Float32V(v float64) float64 { if x.Float32(v) { - halt.errorf("float32 overflow: %v", v) + halt.errorFloat("float32 overflow: ", v) } return v } func (x checkOverflow) UintV(v uint64, bitsize uint8) uint64 { if x.Uint(v, bitsize) { - halt.errorf("uint64 overflow: %v", v) + halt.errorUint("uint64 overflow: ", v) } return v } func (x checkOverflow) IntV(v int64, bitsize uint8) int64 { if x.Int(v, bitsize) { - halt.errorf("int64 overflow: %v", v) + halt.errorInt("int64 overflow: ", v) } return v } func (x checkOverflow) SignedIntV(v uint64) int64 { if x.SignedInt(v) { - halt.errorf("uint64 to int64 overflow: %v", v) + halt.errorUint("uint64 to int64 overflow: ", v) } return int64(v) } @@ -2660,6 +2794,91 @@ func isNumberChar(v byte) bool { // ----------------------- +func pruneSignExt(v []byte, pos bool) (n int) { + if len(v) < 2 { + } else if pos && v[0] == 0 { + for ; v[n] == 0 && n+1 < len(v) && (v[n+1]&(1<<7) == 0); n++ { + } + } else if !pos && v[0] == 0xff { + for ; v[n] == 0xff && n+1 < len(v) && (v[n+1]&(1<<7) != 0); n++ { + } + } + return +} + +func halfFloatToFloatBits(h uint16) (f uint32) { + // retrofitted from: + // - OGRE (Object-Oriented Graphics Rendering Engine) + // function: halfToFloatI https://www.ogre3d.org/docs/api/1.9/_ogre_bitwise_8h_source.html + + s := uint32(h >> 15) + m := uint32(h & 0x03ff) + e := int32((h >> 10) & 0x1f) + + if e == 0 { + if m == 0 { // plus or minus 0 + return s << 31 + } + // Denormalized number -- renormalize it + for (m & 0x0400) == 0 { + m <<= 1 + e -= 1 + } + e += 1 + m &= ^uint32(0x0400) + } else if e == 31 { + if m == 0 { // Inf + return (s << 31) | 0x7f800000 + } + return (s << 31) | 0x7f800000 | (m << 13) // NaN + } + e = e + (127 - 15) + m = m << 13 + return (s << 31) | (uint32(e) << 23) | m +} + +func floatToHalfFloatBits(i uint32) (h uint16) { + // retrofitted from: + // - OGRE (Object-Oriented Graphics Rendering Engine) + // function: halfToFloatI https://www.ogre3d.org/docs/api/1.9/_ogre_bitwise_8h_source.html + // - http://www.java2s.com/example/java-utility-method/float-to/floattohalf-float-f-fae00.html + s := (i >> 16) & 0x8000 + e := int32(((i >> 23) & 0xff) - (127 - 15)) + m := i & 0x7fffff + + var h32 uint32 + + if e <= 0 { + if e < -10 { // zero + h32 = s // track -0 vs +0 + } else { + m = (m | 0x800000) >> uint32(1-e) + h32 = s | (m >> 13) + } + } else if e == 0xff-(127-15) { + if m == 0 { // Inf + h32 = s | 0x7c00 + } else { // NAN + m >>= 13 + var me uint32 + if m == 0 { + me = 1 + } + h32 = s | 0x7c00 | m | me + } + } else { + if e > 30 { // Overflow + h32 = s | 0x7c00 + } else { + h32 = s | (uint32(e) << 10) | (m >> 13) + } + } + h = uint16(h32) + return +} + +// ----------------------- + type ioFlusher interface { Flush() error } @@ -2719,31 +2938,67 @@ func (x *bitset256) isset(pos byte) bool { // ------------ +// panicHdl will panic with the parameters passed. type panicHdl struct{} -// errorv will panic if err is defined (not nil) func (panicHdl) onerror(err error) { if err != nil { panic(err) } } +func (panicHdl) error(err error) { panic(err) } + +func (panicHdl) errorStr(s string) { panic(s) } + +func (panicHdl) errorStr2(s, s2 string) { panic(s + s2) } + +func (panicHdl) errorBytes(s string, p1 []byte) { panic(s + stringView(p1)) } + +func (v panicHdl) errorByte(prefix string, p1 byte) { + panic(stringView(append(panicHdlBytes(prefix), p1))) +} + +func (v panicHdl) errorInt(prefix string, p1 int64) { + panic(stringView(strconv.AppendInt(panicHdlBytes(prefix), p1, 10))) + // bs := make([]byte, len(prefix)+8) + // bs = append(bs, prefix...) + // bs = strconv.AppendInt(bs, p1, 10) + // panic(stringView(bs)) +} + +func (v panicHdl) errorUint(prefix string, p1 uint64) { + panic(stringView(strconv.AppendUint(panicHdlBytes(prefix), p1, 10))) +} + +func (v panicHdl) errorFloat(prefix string, p1 float64) { + panic(stringView(strconv.AppendFloat(panicHdlBytes(prefix), p1, 'G', -1, 64))) +} + +// MARKER +// consider adding //go:noinline to errorf and maybe other methods + // errorf will always panic, using the parameters passed. // // Note: it is ok to pass in a stringView, as it will just pass it directly // to a fmt.Sprintf call and not hold onto it. // -//go:noinline +// Since this is an unexported call, we will not be defensive. +// Callers should ensure a non-empty string and 1+ parameter. func (panicHdl) errorf(format string, params ...interface{}) { - if format == "" { - panic(errPanicUndefined) - } - if len(params) == 0 { - panic(errors.New(format)) - } + // if format == "" { + // panic(errPanicUndefined) + // } + // if len(params) == 0 { + // panic(errors.New(format)) + // } panic(fmt.Errorf(format, params...)) } +func panicHdlBytes(prefix string) []byte { + return append(make([]byte, len(prefix)+8), prefix...) +} + // ---------------------------------------------------- type errDecorator interface { @@ -2778,12 +3033,12 @@ func (mustHdl) Float(s float64, err error) float64 { // ------------------- func freelistCapacity(length int) (capacity int) { - for capacity = 8; capacity <= length; capacity *= 2 { + for capacity = 8; capacity < length; capacity *= 2 { } return } -// bytesFreelist is a list of byte buffers, sorted by cap. +// bytesFreeList is a list of byte buffers, sorted by cap. // // In anecdotal testing (running go test -tsd 1..6), we couldn't get // the length of the list > 4 at any time. So we believe a linear search @@ -2807,12 +3062,12 @@ func freelistCapacity(length int) (capacity int) { // if !byteSliceSameData(v0, v1) { // blist.put(v0) // } -type bytesFreelist [][]byte +type bytesFreeList [][]byte // peek returns a slice of possibly non-zero'ed bytes, with len=0, // and with the largest capacity from the list. -func (x *bytesFreelist) peek(length int, pop bool) (out []byte) { - if bytesFreeListNoCache { +func (x *bytesFreeList) peek(length int, pop bool) (out []byte) { + if !useBytesFreeList { return make([]byte, 0, freelistCapacity(length)) } y := *x @@ -2838,15 +3093,12 @@ func (x *bytesFreelist) peek(length int, pop bool) (out []byte) { // get returns a slice of possibly non-zero'ed bytes, with len=0, // and with cap >= length requested. -func (x *bytesFreelist) get(length int) (out []byte) { - if bytesFreeListNoCache { +func (x *bytesFreeList) get(length int) (out []byte) { + if !useBytesFreeList { return make([]byte, 0, freelistCapacity(length)) } y := *x - // MARKER: do not use range, as range is not currently inlineable as of go 1.16-beta - // for i, v := range y { - for i := 0; i < len(y); i++ { - v := y[i] + for i, v := range y { if cap(v) >= length { // *x = append(y[:i], y[i+1:]...) copy(y[i:], y[i+1:]) @@ -2857,21 +3109,21 @@ func (x *bytesFreelist) get(length int) (out []byte) { return make([]byte, 0, freelistCapacity(length)) } -func (x *bytesFreelist) put(v []byte) { - if bytesFreeListNoCache || cap(v) == 0 { +func (x *bytesFreeList) put(v []byte) { + if !useBytesFreeList || cap(v) == 0 { return } if len(v) != 0 { v = v[:0] } + // v = v[:0] // append the new value, then try to put it in a better position y := append(*x, v) *x = y - // MARKER: do not use range, as range is not currently inlineable as of go 1.16-beta + // MARKER: use simple for loop, so as not to create new slice // for i, z := range y[:len(y)-1] { for i := 0; i < len(y)-1; i++ { - z := y[i] - if cap(z) > cap(v) { + if cap(y[i]) > cap(v) { copy(y[i+1:], y[i:]) y[i] = v return @@ -2879,24 +3131,23 @@ func (x *bytesFreelist) put(v []byte) { } } -func (x *bytesFreelist) check(v []byte, length int) (out []byte) { +func (x *bytesFreeList) check(v []byte, length int) (out []byte) { // ensure inlineable, by moving slow-path out to its own function if cap(v) >= length { return v[:0] } - return x.checkPutGet(v, length) + return x.putGet(v, length) } -func (x *bytesFreelist) checkPutGet(v []byte, length int) []byte { - // checkPutGet broken out into its own function, so check is inlineable in general case - const useSeparateCalls = false +func (x *bytesFreeList) putGet(v []byte, length int) []byte { + // putGet broken out into its own function, so check is inlineable in general case - if useSeparateCalls { + if useBytesFreeListPutGetSeparateCalls { x.put(v) return x.get(length) } - if bytesFreeListNoCache { + if !useBytesFreeList { return make([]byte, 0, freelistCapacity(length)) } @@ -2907,8 +3158,9 @@ func (x *bytesFreelist) checkPutGet(v []byte, length int) []byte { y = append(y, v) *x = y } - for i := 0; i < len(y); i++ { - z := y[i] + // for i := 0; i < len(y); i++ { + // z := y[i] + for i, z := range y { if put { if cap(z) >= length { copy(y[i:], y[i+1:]) @@ -2929,7 +3181,7 @@ func (x *bytesFreelist) checkPutGet(v []byte, length int) []byte { // ------------------------- -// sfiRvFreelist is used by Encoder for encoding structs, +// sfiRvFreeList is used by Encoder for encoding structs, // where we have to gather the fields first and then // analyze them for omitEmpty, before knowing the length of the array/map to encode. // @@ -2938,9 +3190,12 @@ func (x *bytesFreelist) checkPutGet(v []byte, length int) []byte { // // In the general case, the length of this list at most times is 1, // so linear search is fine. -type sfiRvFreelist [][]sfiRv +type sfiRvFreeList [][]sfiRv -func (x *sfiRvFreelist) get(length int) (out []sfiRv) { +func (x *sfiRvFreeList) get(length int) (out []sfiRv) { + if !useSfiRvFreeList { + return make([]sfiRv, 0, freelistCapacity(length)) + } y := *x // MARKER: do not use range, as range is not currently inlineable as of go 1.16-beta @@ -2957,7 +3212,10 @@ func (x *sfiRvFreelist) get(length int) (out []sfiRv) { return make([]sfiRv, 0, freelistCapacity(length)) } -func (x *sfiRvFreelist) put(v []sfiRv) { +func (x *sfiRvFreeList) put(v []sfiRv) { + if !useSfiRvFreeList { + return + } if len(v) != 0 { v = v[:0] } @@ -3002,3 +3260,19 @@ func (x internerMap) string(v []byte) (s string) { } return } + +// ---- + +type bytesEncoder interface { + Encode(dst, src []byte) + Decode(dst, src []byte) (n int, err error) + EncodedLen(n int) int + DecodedLen(n int) int +} + +type hexEncoder struct{} + +func (hexEncoder) Encode(dst, src []byte) { hex.Encode(dst, src) } +func (hexEncoder) Decode(dst, src []byte) (n int, err error) { return hex.Decode(dst, src) } +func (hexEncoder) EncodedLen(n int) int { return hex.EncodedLen(n) } +func (hexEncoder) DecodedLen(n int) int { return hex.DecodedLen(n) } diff --git a/vendor/github.com/ugorji/go/codec/helper_internal.go b/vendor/github.com/ugorji/go/codec/helper_internal.go deleted file mode 100644 index e646249..0000000 --- a/vendor/github.com/ugorji/go/codec/helper_internal.go +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -// maxArrayLen is the size of uint, which determines -// the maximum length of any array. -const maxArrayLen = 1<<((32<<(^uint(0)>>63))-1) - 1 - -// All non-std package dependencies live in this file, -// so porting to different environment is easy (just update functions). - -func pruneSignExt(v []byte, pos bool) (n int) { - if len(v) < 2 { - } else if pos && v[0] == 0 { - for ; v[n] == 0 && n+1 < len(v) && (v[n+1]&(1<<7) == 0); n++ { - } - } else if !pos && v[0] == 0xff { - for ; v[n] == 0xff && n+1 < len(v) && (v[n+1]&(1<<7) != 0); n++ { - } - } - return -} - -func halfFloatToFloatBits(h uint16) (f uint32) { - // retrofitted from: - // - OGRE (Object-Oriented Graphics Rendering Engine) - // function: halfToFloatI https://www.ogre3d.org/docs/api/1.9/_ogre_bitwise_8h_source.html - - s := uint32(h >> 15) - m := uint32(h & 0x03ff) - e := int32((h >> 10) & 0x1f) - - if e == 0 { - if m == 0 { // plus or minus 0 - return s << 31 - } - // Denormalized number -- renormalize it - for (m & 0x0400) == 0 { - m <<= 1 - e -= 1 - } - e += 1 - m &= ^uint32(0x0400) - } else if e == 31 { - if m == 0 { // Inf - return (s << 31) | 0x7f800000 - } - return (s << 31) | 0x7f800000 | (m << 13) // NaN - } - e = e + (127 - 15) - m = m << 13 - return (s << 31) | (uint32(e) << 23) | m -} - -func floatToHalfFloatBits(i uint32) (h uint16) { - // retrofitted from: - // - OGRE (Object-Oriented Graphics Rendering Engine) - // function: halfToFloatI https://www.ogre3d.org/docs/api/1.9/_ogre_bitwise_8h_source.html - // - http://www.java2s.com/example/java-utility-method/float-to/floattohalf-float-f-fae00.html - s := (i >> 16) & 0x8000 - e := int32(((i >> 23) & 0xff) - (127 - 15)) - m := i & 0x7fffff - - var h32 uint32 - - if e <= 0 { - if e < -10 { // zero - h32 = s // track -0 vs +0 - } else { - m = (m | 0x800000) >> uint32(1-e) - h32 = s | (m >> 13) - } - } else if e == 0xff-(127-15) { - if m == 0 { // Inf - h32 = s | 0x7c00 - } else { // NAN - m >>= 13 - var me uint32 - if m == 0 { - me = 1 - } - h32 = s | 0x7c00 | m | me - } - } else { - if e > 30 { // Overflow - h32 = s | 0x7c00 - } else { - h32 = s | (uint32(e) << 10) | (m >> 13) - } - } - h = uint16(h32) - return -} - -// growCap will return a new capacity for a slice, given the following: -// - oldCap: current capacity -// - unit: in-memory size of an element -// - num: number of elements to add -func growCap(oldCap, unit, num uint) (newCap uint) { - // appendslice logic (if cap < 1024, *2, else *1.25): - // leads to many copy calls, especially when copying bytes. - // bytes.Buffer model (2*cap + n): much better for bytes. - // smarter way is to take the byte-size of the appended element(type) into account - - // maintain 1 thresholds: - // t1: if cap <= t1, newcap = 2x - // else newcap = 1.5x - // - // t1 is always >= 1024. - // This means that, if unit size >= 16, then always do 2x or 1.5x (ie t1, t2, t3 are all same) - // - // With this, appending for bytes increase by: - // 100% up to 4K - // 50% beyond that - - // unit can be 0 e.g. for struct{}{}; handle that appropriately - maxCap := num + (oldCap * 3 / 2) - if unit == 0 || maxCap > maxArrayLen || maxCap < oldCap { // handle wraparound, etc - return maxArrayLen - } - - var t1 uint = 1024 // default thresholds for large values - if unit <= 4 { - t1 = 8 * 1024 - } else if unit <= 16 { - t1 = 2 * 1024 - } - - newCap = 2 + num - if oldCap > 0 { - if oldCap <= t1 { // [0,t1] - newCap = num + (oldCap * 2) - } else { // (t1,infinity] - newCap = maxCap - } - } - - // ensure newCap takes multiples of a cache line (size is a multiple of 64) - t1 = newCap * unit - if t2 := t1 % 64; t2 != 0 { - t1 += 64 - t2 - newCap = t1 / unit - } - - return -} diff --git a/vendor/github.com/ugorji/go/codec/helper_not_unsafe.go b/vendor/github.com/ugorji/go/codec/helper_not_unsafe.go index 10034b8..413dc39 100644 --- a/vendor/github.com/ugorji/go/codec/helper_not_unsafe.go +++ b/vendor/github.com/ugorji/go/codec/helper_not_unsafe.go @@ -2,7 +2,6 @@ // Use of this source code is governed by a MIT license found in the LICENSE file. //go:build !go1.9 || safe || codec.safe || appengine -// +build !go1.9 safe codec.safe appengine package codec @@ -19,8 +18,11 @@ import ( const safeMode = true -const transientSizeMax = 0 -const transientValueHasStringSlice = true +func isTransientType4Size(size uint32) bool { return true } + +type mapReqParams struct{} + +func getMapReqParams(ti *typeInfo) (r mapReqParams) { return } func byteAt(b []byte, index uint) byte { return b[index] @@ -30,14 +32,6 @@ func setByteAt(b []byte, index uint, val byte) { b[index] = val } -func byteSliceOf(b []byte, start, end uint) []byte { - return b[start:end] -} - -// func byteSliceWithLen(b []byte, length uint) []byte { -// return b[:length] -// } - func stringView(v []byte) string { return string(v) } @@ -50,32 +44,24 @@ func byteSliceSameData(v1 []byte, v2 []byte) bool { return cap(v1) != 0 && cap(v2) != 0 && &(v1[:1][0]) == &(v2[:1][0]) } -func okBytes2(b []byte) (v [2]byte) { - copy(v[:], b) - return -} - -func okBytes3(b []byte) (v [3]byte) { - copy(v[:], b) - return -} - -func okBytes4(b []byte) (v [4]byte) { - copy(v[:], b) +func isNil(v interface{}, checkPtr bool) (rv reflect.Value, b bool) { + b = v == nil + if b || !checkPtr { + return + } + rv = reflect.ValueOf(v) + if rv.Kind() == reflect.Ptr { + b = rv.IsNil() + } return } -func okBytes8(b []byte) (v [8]byte) { - copy(v[:], b) - return +func ptrToLowLevel(v interface{}) interface{} { + return v } -func isNil(v interface{}) (rv reflect.Value, isnil bool) { - rv = reflect.ValueOf(v) - if isnilBitset.isset(byte(rv.Kind())) { - isnil = rv.IsNil() - } - return +func lowLevelToPtr[T any](v interface{}) *T { + return v.(*T) } func eq4i(i0, i1 interface{}) bool { @@ -85,17 +71,21 @@ func eq4i(i0, i1 interface{}) bool { func rv4iptr(i interface{}) reflect.Value { return reflect.ValueOf(i) } func rv4istr(i interface{}) reflect.Value { return reflect.ValueOf(i) } -// func rv4i(i interface{}) reflect.Value { return reflect.ValueOf(i) } -// func rv4iK(i interface{}, kind byte, isref bool) reflect.Value { return reflect.ValueOf(i) } - func rv2i(rv reflect.Value) interface{} { - return rv.Interface() + if rv.IsValid() { + return rv.Interface() + } + return nil } func rvAddr(rv reflect.Value, ptrType reflect.Type) reflect.Value { return rv.Addr() } +func rvPtrIsNil(rv reflect.Value) bool { + return rv.IsNil() +} + func rvIsNil(rv reflect.Value) bool { return rv.IsNil() } @@ -131,6 +121,30 @@ func i2rtid(i interface{}) uintptr { // -------------------------- +// is this an empty interface/ptr/struct/map/slice/chan/array +func isEmptyContainerValue(v reflect.Value, tinfos *TypeInfos, recursive bool) (empty bool) { + switch v.Kind() { + case reflect.Array: + for i, vlen := 0, v.Len(); i < vlen; i++ { + if !isEmptyValue(v.Index(i), tinfos, false) { + return false + } + } + return true + case reflect.Map, reflect.Slice, reflect.Chan: + return v.IsNil() || v.Len() == 0 + case reflect.Interface, reflect.Ptr: + empty = v.IsNil() + if recursive && !empty { + return isEmptyValue(v.Elem(), tinfos, recursive) + } + return empty + case reflect.Struct: + return isEmptyStruct(v, tinfos, recursive) + } + return false +} + func isEmptyValue(v reflect.Value, tinfos *TypeInfos, recursive bool) bool { switch v.Kind() { case reflect.Invalid: @@ -215,7 +229,7 @@ func isEmptyStruct(v reflect.Value, tinfos *TypeInfos, recursive bool) bool { // We only care about what we can encode/decode, // so that is what we use to check omitEmpty. for _, si := range ti.sfi.source() { - sfv := si.path.field(v) + sfv := si.fieldNoAlloc(v, true) if sfv.IsValid() && !isEmptyValue(sfv, tinfos, recursive) { return false } @@ -223,6 +237,10 @@ func isEmptyStruct(v reflect.Value, tinfos *TypeInfos, recursive bool) bool { return true } +func makeMapReflect(t reflect.Type, size int) reflect.Value { + return reflect.MakeMapWithSize(t, size) +} + // -------------------------- type perTypeElem struct { @@ -247,13 +265,9 @@ type perType struct { v []perTypeElem } -type decPerType struct { - perType -} +type decPerType = perType -type encPerType struct { - perType -} +type encPerType = perType func (x *perType) elem(t reflect.Type) *perTypeElem { rtid := rt2id(t) @@ -296,65 +310,68 @@ func (x *perType) AddressableRO(v reflect.Value) (rv reflect.Value) { } // -------------------------- -type structFieldInfos struct { - c []*structFieldInfo - s []*structFieldInfo +type mapIter struct { + t *reflect.MapIter + m reflect.Value + values bool } -func (x *structFieldInfos) load(source, sorted []*structFieldInfo) { - x.c = source - x.s = sorted +func (t *mapIter) Next() (r bool) { + return t.t.Next() } -func (x *structFieldInfos) sorted() (v []*structFieldInfo) { return x.s } -func (x *structFieldInfos) source() (v []*structFieldInfo) { return x.c } - -type atomicClsErr struct { - v atomic.Value +func (t *mapIter) Key() reflect.Value { + return t.t.Key() } -func (x *atomicClsErr) load() (e clsErr) { - if i := x.v.Load(); i != nil { - e = i.(clsErr) +func (t *mapIter) Value() (r reflect.Value) { + if t.values { + return t.t.Value() } return } -func (x *atomicClsErr) store(p clsErr) { - x.v.Store(p) +func (t *mapIter) Done() {} + +func mapRange(t *mapIter, m, k, v reflect.Value, values bool) { + *t = mapIter{ + m: m, + t: m.MapRange(), + values: values, + } } // -------------------------- -type atomicTypeInfoSlice struct { - v atomic.Value +type structFieldInfos struct { + c []*structFieldInfo + s []*structFieldInfo + t uint8To32TrieNode + // byName map[string]*structFieldInfo // find sfi given a name } -func (x *atomicTypeInfoSlice) load() (e []rtid2ti) { - if i := x.v.Load(); i != nil { - e = i.([]rtid2ti) - } - return +func (x *structFieldInfos) load(source, sorted []*structFieldInfo) { + x.c = source + x.s = sorted } -func (x *atomicTypeInfoSlice) store(p []rtid2ti) { - x.v.Store(p) -} +// func (x *structFieldInfos) count() int { return len(x.c) } +func (x *structFieldInfos) source() (v []*structFieldInfo) { return x.c } +func (x *structFieldInfos) sorted() (v []*structFieldInfo) { return x.s } // -------------------------- -type atomicRtidFnSlice struct { - v atomic.Value -} -func (x *atomicRtidFnSlice) load() (e []codecRtidFn) { - if i := x.v.Load(); i != nil { - e = i.([]codecRtidFn) - } - return +type uint8To32TrieNodeNoKids struct { + key uint8 + valid bool // the value marks the end of a full stored string + _ [2]byte // padding + value uint32 } -func (x *atomicRtidFnSlice) store(p []codecRtidFn) { - x.v.Store(p) -} +type uint8To32TrieNodeKids = []uint8To32TrieNode + +func (x *uint8To32TrieNode) setKids(kids []uint8To32TrieNode) { x.kids = kids } +func (x *uint8To32TrieNode) getKids() []uint8To32TrieNode { return x.kids } +func (x *uint8To32TrieNode) truncKids() { x.kids = x.kids[:0] } // set len to 0 // -------------------------- func (n *fauxUnion) ru() reflect.Value { @@ -501,13 +518,13 @@ func rvGrowSlice(rv reflect.Value, ti *typeInfo, cap, incr int) (v reflect.Value // ---------------- -func rvSliceIndex(rv reflect.Value, i int, ti *typeInfo) reflect.Value { +func rvArrayIndex(rv reflect.Value, i int, _ *typeInfo, _ bool) reflect.Value { return rv.Index(i) } -func rvArrayIndex(rv reflect.Value, i int, ti *typeInfo) reflect.Value { - return rv.Index(i) -} +// func rvArrayIndex(rv reflect.Value, i int, ti *typeInfo) reflect.Value { +// return rv.Index(i) +// } func rvSliceZeroCap(t reflect.Type) (v reflect.Value) { return reflect.MakeSlice(t, 0, 0) @@ -523,7 +540,7 @@ func rvCapSlice(rv reflect.Value) int { func rvGetArrayBytes(rv reflect.Value, scratch []byte) (bs []byte) { l := rv.Len() - if scratch == nil || rv.CanAddr() { + if scratch == nil && rv.CanAddr() { return rv.Slice(0, l).Bytes() } @@ -537,7 +554,7 @@ func rvGetArrayBytes(rv reflect.Value, scratch []byte) (bs []byte) { } func rvGetArray4Slice(rv reflect.Value) (v reflect.Value) { - v = rvZeroAddrK(reflectArrayOf(rvLenSlice(rv), rv.Type().Elem()), reflect.Array) + v = rvZeroAddrK(reflect.ArrayOf(rvLenSlice(rv), rv.Type().Elem()), reflect.Array) reflect.Copy(v, rv) return } @@ -647,60 +664,43 @@ func rvLenMap(rv reflect.Value) int { return rv.Len() } -// func copybytes(to, from []byte) int { -// return copy(to, from) -// } - -// func copybytestr(to []byte, from string) int { -// return copy(to, from) -// } - -// func rvLenArray(rv reflect.Value) int { return rv.Len() } - // ------------ map range and map indexing ---------- -func mapStoresElemIndirect(elemsize uintptr) bool { return false } - -func mapSet(m, k, v reflect.Value, keyFastKind mapKeyFastKind, _, _ bool) { +func mapSet(m, k, v reflect.Value, _ mapReqParams) { m.SetMapIndex(k, v) } -func mapGet(m, k, v reflect.Value, keyFastKind mapKeyFastKind, _, _ bool) (vv reflect.Value) { +func mapGet(m, k, v reflect.Value, _ mapReqParams) (vv reflect.Value) { return m.MapIndex(k) } -// func mapDelete(m, k reflect.Value) { -// m.SetMapIndex(k, reflect.Value{}) -// } - func mapAddrLoopvarRV(t reflect.Type, k reflect.Kind) (r reflect.Value) { return // reflect.New(t).Elem() } // ---------- ENCODER optimized --------------- -func (e *Encoder) jsondriver() *jsonEncDriver { - return e.e.(*jsonEncDriver) +func (d *decoderBase) bytes2Str(in []byte, att dBytesAttachState) (s string, mutable bool) { + return d.detach2Str(in, att), false } -// ---------- DECODER optimized --------------- +// ---------- structFieldInfo optimized --------------- -func (d *Decoder) jsondriver() *jsonDecDriver { - return d.d.(*jsonDecDriver) +func (n *structFieldInfoNode) rvField(v reflect.Value) reflect.Value { + return v.Field(int(n.index)) } -func (d *Decoder) stringZC(v []byte) (s string) { - return d.string(v) -} +// ---------- others --------------- -func (d *Decoder) mapKeyString(callFnRvk *bool, kstrbs, kstr2bs *[]byte) string { - return d.string(*kstr2bs) +// -------------------------- +type atomicRtidFnSlice struct { + v atomic.Value } -// ---------- structFieldInfo optimized --------------- - -func (n *structFieldInfoPathNode) rvField(v reflect.Value) reflect.Value { - return v.Field(int(n.index)) +func (x *atomicRtidFnSlice) load() interface{} { + return x.v.Load() } -// ---------- others --------------- +func (x *atomicRtidFnSlice) store(p interface{}) { + x.v.Store(p) +} diff --git a/vendor/github.com/ugorji/go/codec/helper_not_unsafe_not_gc.go b/vendor/github.com/ugorji/go/codec/helper_not_unsafe_not_gc.go deleted file mode 100644 index 502bc60..0000000 --- a/vendor/github.com/ugorji/go/codec/helper_not_unsafe_not_gc.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build !go1.9 || safe || codec.safe || appengine || !gc -// +build !go1.9 safe codec.safe appengine !gc - -package codec - -// import "reflect" - -// This files contains safe versions of the code where the unsafe versions are not supported -// in either gccgo or gollvm. -// -// - rvType: -// reflect.toType is not supported in gccgo, gollvm. - -// func rvType(rv reflect.Value) reflect.Type { -// return rv.Type() -// } - -var _ = 0 diff --git a/vendor/github.com/ugorji/go/codec/helper_notunsafe_or_notgc.go b/vendor/github.com/ugorji/go/codec/helper_notunsafe_or_notgc.go new file mode 100644 index 0000000..420d717 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/helper_notunsafe_or_notgc.go @@ -0,0 +1,59 @@ +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +//go:build safe || codec.safe || !gc + +package codec + +// growCap will return a new capacity for a slice, given the following: +// - oldCap: current capacity +// - unit: in-memory size of an element +// - num: number of elements to add +func growCap(oldCap, unit, num uint) (newCap uint) { + // appendslice logic (if cap < 1024, *2, else *1.25): + // leads to many copy calls, especially when copying bytes. + // bytes.Buffer model (2*cap + n): much better for bytes. + // smarter way is to take the byte-size of the appended element(type) into account + + // maintain 1 thresholds: + // t1: if cap <= t1, newcap = 2x + // else newcap = 1.5x + // + // t1 is always >= 1024. + // This means that, if unit size >= 16, then always do 2x or 1.5x (ie t1, t2, t3 are all same) + // + // With this, appending for bytes increase by: + // 100% up to 4K + // 50% beyond that + + // unit can be 0 e.g. for struct{}{}; handle that appropriately + maxCap := num + (oldCap * 3 / 2) + if unit == 0 || maxCap > maxArrayLen || maxCap < oldCap { // handle wraparound, etc + return maxArrayLen + } + + var t1 uint = 1024 // default thresholds for large values + if unit <= 4 { + t1 = 8 * 1024 + } else if unit <= 16 { + t1 = 2 * 1024 + } + + newCap = 2 + num + if oldCap > 0 { + if oldCap <= t1 { // [0,t1] + newCap = num + (oldCap * 2) + } else { // (t1,infinity] + newCap = maxCap + } + } + + // ensure newCap takes multiples of a cache line (size is a multiple of 64) + t1 = newCap * unit + if t2 := t1 % 64; t2 != 0 { + t1 += 64 - t2 + newCap = t1 / unit + } + + return +} diff --git a/vendor/github.com/ugorji/go/codec/helper_unsafe.go b/vendor/github.com/ugorji/go/codec/helper_unsafe.go index 4e29b03..31f3266 100644 --- a/vendor/github.com/ugorji/go/codec/helper_unsafe.go +++ b/vendor/github.com/ugorji/go/codec/helper_unsafe.go @@ -1,12 +1,15 @@ // Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. // Use of this source code is governed by a MIT license found in the LICENSE file. -//go:build !safe && !codec.safe && !appengine && go1.9 -// +build !safe,!codec.safe,!appengine,go1.9 - -// minimum of go 1.9 is needed, as that is the minimum for all features and linked functions we need -// - typedmemclr was introduced in go 1.8 -// - mapassign_fastXXX was introduced in go 1.9 +//go:build !safe && !codec.safe && !appengine && go1.21 + +// minimum of go 1.21 is needed, as that is the minimum for all features and linked functions we need +// - typedmemclr : go1.8 +// - mapassign_fastXXX: go1.9 +// - clear was added in go1.21 +// - unsafe.String(Data): go1.20 +// - unsafe.Add: go1.17 +// - generics/any: go1.18 // etc package codec @@ -21,7 +24,7 @@ import ( // This file has unsafe variants of some helper functions. // MARKER: See helper_unsafe.go for the usage documentation. - +// // There are a number of helper_*unsafe*.go files. // // - helper_unsafe @@ -41,19 +44,32 @@ import ( // As of March 2021, we cannot differentiate whether running with gccgo or gollvm // using a build constraint, as both satisfy 'gccgo' build tag. // Consequently, we must use the lowest common denominator to support both. - +// // For reflect.Value code, we decided to do the following: // - if we know the kind, we can elide conditional checks for // - SetXXX (Int, Uint, String, Bool, etc) // - SetLen // -// We can also optimize -// - IsNil - +// We can also optimize many others, incl IsNil, etc +// // MARKER: Some functions here will not be hit during code coverage runs due to optimizations, e.g. // - rvCopySlice: called by decode if rvGrowSlice did not set new slice into pointer to orig slice. // however, helper_unsafe sets it, so no need to call rvCopySlice later // - rvSlice: same as above +// +// MARKER: Handling flagIndir ---- +// +// flagIndir means that the reflect.Value holds a pointer to the data itself. +// +// flagIndir can be set for: +// - references +// Here, type.IfaceIndir() --> false +// flagIndir is usually false (except when the value is addressable, where in flagIndir may be true) +// - everything else (numbers, bools, string, slice, struct, etc). +// Here, type.IfaceIndir() --> true +// flagIndir is always true +// +// This knowlege is used across this file, e.g. in rv2i and rvRefPtr const safeMode = false @@ -88,7 +104,9 @@ const ( const transientSizeMax = 64 // should struct/array support internal strings and slices? -const transientValueHasStringSlice = false +// const transientValueHasStringSlice = false + +func isTransientType4Size(size uint32) bool { return size <= transientSizeMax } type unsafeString struct { Data unsafe.Pointer @@ -144,7 +162,8 @@ func (x *unsafePerTypeElem) addrFor(k reflect.Kind) unsafe.Pointer { x.slice = unsafeSlice{} // memclr return unsafe.Pointer(&x.slice) } - x.arr = [transientSizeMax]byte{} // memclr + clear(x.arr[:]) + // x.arr = [transientSizeMax]byte{} // memclr return unsafe.Pointer(&x.arr) } @@ -152,9 +171,7 @@ type perType struct { elems [2]unsafePerTypeElem } -type decPerType struct { - perType -} +type decPerType = perType type encPerType struct{} @@ -183,19 +200,6 @@ func byteAt(b []byte, index uint) byte { return *(*byte)(unsafe.Pointer(uintptr((*unsafeSlice)(unsafe.Pointer(&b)).Data) + uintptr(index))) } -func byteSliceOf(b []byte, start, end uint) []byte { - s := (*unsafeSlice)(unsafe.Pointer(&b)) - s.Data = unsafe.Pointer(uintptr(s.Data) + uintptr(start)) - s.Len = int(end - start) - s.Cap -= int(start) - return b -} - -// func byteSliceWithLen(b []byte, length uint) []byte { -// (*unsafeSlice)(unsafe.Pointer(&b)).Len = int(length) -// return b -// } - func setByteAt(b []byte, index uint, val byte) { // b[index] = val *(*byte)(unsafe.Pointer(uintptr((*unsafeSlice)(unsafe.Pointer(&b)).Data) + uintptr(index))) = val @@ -222,49 +226,26 @@ func byteSliceSameData(v1 []byte, v2 []byte) bool { return (*unsafeSlice)(unsafe.Pointer(&v1)).Data == (*unsafeSlice)(unsafe.Pointer(&v2)).Data } -// MARKER: okBytesN functions will copy N bytes into the top slots of the return array. -// These functions expect that the bound check already occured and are are valid. -// copy(...) does a number of checks which are unnecessary in this situation when in bounds. - -func okBytes2(b []byte) [2]byte { - return *((*[2]byte)(((*unsafeSlice)(unsafe.Pointer(&b))).Data)) -} - -func okBytes3(b []byte) [3]byte { - return *((*[3]byte)(((*unsafeSlice)(unsafe.Pointer(&b))).Data)) -} - -func okBytes4(b []byte) [4]byte { - return *((*[4]byte)(((*unsafeSlice)(unsafe.Pointer(&b))).Data)) +// isNil checks - without much effort - if an interface is nil. +// +// returned rv is not guaranteed to be valid (e.g. if v == nil). +// +// Note that this will handle all pointer-sized types e.g. +// pointer, map, chan, func, etc. +func isNil(v interface{}, checkPtr bool) (rv reflect.Value, b bool) { + b = ((*unsafeIntf)(unsafe.Pointer(&v))).ptr == nil + return } -func okBytes8(b []byte) [8]byte { - return *((*[8]byte)(((*unsafeSlice)(unsafe.Pointer(&b))).Data)) +func ptrToLowLevel[T any](ptr *T) unsafe.Pointer { + return unsafe.Pointer(ptr) } -// isNil says whether the value v is nil. -// This applies to references like map/ptr/unsafepointer/chan/func, -// and non-reference values like interface/slice. -func isNil(v interface{}) (rv reflect.Value, isnil bool) { - var ui = (*unsafeIntf)(unsafe.Pointer(&v)) - isnil = ui.ptr == nil - if !isnil { - rv, isnil = unsafeIsNilIntfOrSlice(ui, v) - } - return +func lowLevelToPtr[T any](v unsafe.Pointer) *T { + return (*T)(v) } -func unsafeIsNilIntfOrSlice(ui *unsafeIntf, v interface{}) (rv reflect.Value, isnil bool) { - rv = reflect.ValueOf(v) // reflect.ValueOf is currently not inline'able - so call it directly - tk := rv.Kind() - isnil = (tk == reflect.Interface || tk == reflect.Slice) && *(*unsafe.Pointer)(ui.ptr) == nil - return -} - -// return the pointer for a reference (map/chan/func/pointer/unsafe.Pointer). -// true references (map, func, chan, ptr - NOT slice) may be double-referenced? as flagIndir -// -// Assumes that v is a reference (map/func/chan/ptr/func) +// Given that v is a reference (map/func/chan/ptr/unsafepointer) kind, return the pointer func rvRefPtr(v *unsafeReflectValue) unsafe.Pointer { if v.flag&unsafeFlagIndir != 0 { return *(*unsafe.Pointer)(v.ptr) @@ -295,13 +276,6 @@ func rv4istr(i interface{}) (v reflect.Value) { } func rv2i(rv reflect.Value) (i interface{}) { - // We tap into implememtation details from - // the source go stdlib reflect/value.go, and trims the implementation. - // - // e.g. - // - a map/ptr is a reference, thus flagIndir is not set on it - // - an int/slice is not a reference, thus flagIndir is set on it - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) if refBitset.isset(byte(rv.Kind())) && urv.flag&unsafeFlagIndir != 0 { urv.ptr = *(*unsafe.Pointer)(urv.ptr) @@ -316,12 +290,22 @@ func rvAddr(rv reflect.Value, ptrType reflect.Type) reflect.Value { return rv } +// return true if this rv - got from a pointer kind - is nil. +// For now, only use for struct fields of pointer types, as we're guaranteed +// that flagIndir will never be set. +func rvPtrIsNil(rv reflect.Value) bool { + return rvIsNil(rv) +} + +// checks if a nil'able value is nil func rvIsNil(rv reflect.Value) bool { urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - if urv.flag&unsafeFlagIndir != 0 { - return *(*unsafe.Pointer)(urv.ptr) == nil + if urv.flag&unsafeFlagIndir == 0 { + return urv.ptr == nil } - return urv.ptr == nil + // flagIndir is set for a reference (ptr/map/func/unsafepointer/chan) + // OR kind is slice/interface + return *(*unsafe.Pointer)(urv.ptr) == nil } func rvSetSliceLen(rv reflect.Value, length int) { @@ -499,29 +483,62 @@ func isEmptyValueFallbackRecur(urv *unsafeReflectValue, v reflect.Value, tinfos return false } +// is this an empty interface/ptr/struct/map/slice/chan/array +func isEmptyContainerValue(v reflect.Value, tinfos *TypeInfos, recursive bool) bool { + urv := (*unsafeReflectValue)(unsafe.Pointer(&v)) + switch v.Kind() { + case reflect.Slice: + return (*unsafeSlice)(urv.ptr).Len == 0 + case reflect.Struct: + if tinfos == nil { + tinfos = defTypeInfos + } + ti := tinfos.find(uintptr(urv.typ)) + if ti == nil { + ti = tinfos.load(v.Type()) + } + return unsafeCmpZero(urv.ptr, int(ti.size)) + case reflect.Interface, reflect.Ptr: + // isnil := urv.ptr == nil // (not sufficient, as a pointer value encodes the type) + isnil := urv.ptr == nil || *(*unsafe.Pointer)(urv.ptr) == nil + if recursive && !isnil { + return isEmptyValue(v.Elem(), tinfos, recursive) + } + return isnil + case reflect.Chan: + return urv.ptr == nil || len_chan(rvRefPtr(urv)) == 0 + case reflect.Map: + return urv.ptr == nil || len_map(rvRefPtr(urv)) == 0 + case reflect.Array: + return v.Len() == 0 || + urv.ptr == nil || + urv.typ == nil || + rtsize2(urv.typ) == 0 || + unsafeCmpZero(urv.ptr, int(rtsize2(urv.typ))) + } + return false +} + // -------------------------- type structFieldInfos struct { - c unsafe.Pointer // source - s unsafe.Pointer // sorted + c unsafe.Pointer // source + s unsafe.Pointer // sorted + t uint8To32TrieNode + length int + + // byName map[string]*structFieldInfo // find sfi given a name } +// func (x *structFieldInfos) load(source, sorted []*structFieldInfo, sourceNames, sortedNames []string) { func (x *structFieldInfos) load(source, sorted []*structFieldInfo) { - s := (*unsafeSlice)(unsafe.Pointer(&sorted)) - x.s = s.Data - x.length = s.Len + var s *unsafeSlice s = (*unsafeSlice)(unsafe.Pointer(&source)) x.c = s.Data -} - -func (x *structFieldInfos) sorted() (v []*structFieldInfo) { - *(*unsafeSlice)(unsafe.Pointer(&v)) = unsafeSlice{x.s, x.length, x.length} - // s := (*unsafeSlice)(unsafe.Pointer(&v)) - // s.Data = x.sorted0 - // s.Len = x.length - // s.Cap = s.Len - return + x.length = s.Len + s = (*unsafeSlice)(unsafe.Pointer(&sorted)) + x.s = s.Data } func (x *structFieldInfos) source() (v []*structFieldInfo) { @@ -529,66 +546,48 @@ func (x *structFieldInfos) source() (v []*structFieldInfo) { return } -// atomicXXX is expected to be 2 words (for symmetry with atomic.Value) -// -// Note that we do not atomically load/store length and data pointer separately, -// as this could lead to some races. Instead, we atomically load/store cappedSlice. -// -// Note: with atomic.(Load|Store)Pointer, we MUST work with an unsafe.Pointer directly. - -// ---------------------- -type atomicTypeInfoSlice struct { - v unsafe.Pointer // *[]rtid2ti -} - -func (x *atomicTypeInfoSlice) load() (s []rtid2ti) { - x2 := atomic.LoadPointer(&x.v) - if x2 != nil { - s = *(*[]rtid2ti)(x2) - } +func (x *structFieldInfos) sorted() (v []*structFieldInfo) { + *(*unsafeSlice)(unsafe.Pointer(&v)) = unsafeSlice{x.s, x.length, x.length} return } -func (x *atomicTypeInfoSlice) store(p []rtid2ti) { - atomic.StorePointer(&x.v, unsafe.Pointer(&p)) +// -------------------------- + +type uint8To32TrieNodeNoKids struct { + key uint8 + valid bool // the value marks the end of a full stored string + numkids uint8 + _ byte // padding + value uint32 } -// MARKER: in safe mode, atomicXXX are atomic.Value, which contains an interface{}. -// This is 2 words. -// consider padding atomicXXX here with a uintptr, so they fit into 2 words also. +type uint8To32TrieNodeKids = *uint8To32TrieNode -// -------------------------- -type atomicRtidFnSlice struct { - v unsafe.Pointer // *[]codecRtidFn +func (x *uint8To32TrieNode) setKids(kids []uint8To32TrieNode) { + x.numkids = uint8(len(kids)) + x.kids = &kids[0] } - -func (x *atomicRtidFnSlice) load() (s []codecRtidFn) { - x2 := atomic.LoadPointer(&x.v) - if x2 != nil { - s = *(*[]codecRtidFn)(x2) - } +func (x *uint8To32TrieNode) getKids() (v []uint8To32TrieNode) { + *(*unsafeSlice)(unsafe.Pointer(&v)) = unsafeSlice{unsafe.Pointer(x.kids), int(x.numkids), int(x.numkids)} return } - -func (x *atomicRtidFnSlice) store(p []codecRtidFn) { - atomic.StorePointer(&x.v, unsafe.Pointer(&p)) -} +func (x *uint8To32TrieNode) truncKids() { x.numkids = 0 } // -------------------------- -type atomicClsErr struct { - v unsafe.Pointer // *clsErr + +// Note that we do not atomically load/store length and data pointer separately, +// as this could lead to some races. Instead, we atomically load/store cappedSlice. + +type atomicRtidFnSlice struct { + v unsafe.Pointer // *[]codecRtidFn } -func (x *atomicClsErr) load() (e clsErr) { - x2 := (*clsErr)(atomic.LoadPointer(&x.v)) - if x2 != nil { - e = *x2 - } - return +func (x *atomicRtidFnSlice) load() (s unsafe.Pointer) { + return atomic.LoadPointer(&x.v) } -func (x *atomicClsErr) store(p clsErr) { - atomic.StorePointer(&x.v, unsafe.Pointer(&p)) +func (x *atomicRtidFnSlice) store(p unsafe.Pointer) { + atomic.StorePointer(&x.v, p) } // -------------------------- @@ -660,98 +659,79 @@ func (n *fauxUnion) rb() (v reflect.Value) { // -------------------------- func rvSetBytes(rv reflect.Value, v []byte) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*[]byte)(urv.ptr) = v + *(*[]byte)(rvPtr(rv)) = v } func rvSetString(rv reflect.Value, v string) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*string)(urv.ptr) = v + *(*string)(rvPtr(rv)) = v } func rvSetBool(rv reflect.Value, v bool) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*bool)(urv.ptr) = v + *(*bool)(rvPtr(rv)) = v } func rvSetTime(rv reflect.Value, v time.Time) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*time.Time)(urv.ptr) = v + *(*time.Time)(rvPtr(rv)) = v } func rvSetFloat32(rv reflect.Value, v float32) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*float32)(urv.ptr) = v + *(*float32)(rvPtr(rv)) = v } func rvSetFloat64(rv reflect.Value, v float64) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*float64)(urv.ptr) = v + *(*float64)(rvPtr(rv)) = v } func rvSetComplex64(rv reflect.Value, v complex64) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*complex64)(urv.ptr) = v + *(*complex64)(rvPtr(rv)) = v } func rvSetComplex128(rv reflect.Value, v complex128) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*complex128)(urv.ptr) = v + *(*complex128)(rvPtr(rv)) = v } func rvSetInt(rv reflect.Value, v int) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*int)(urv.ptr) = v + *(*int)(rvPtr(rv)) = v } func rvSetInt8(rv reflect.Value, v int8) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*int8)(urv.ptr) = v + *(*int8)(rvPtr(rv)) = v } func rvSetInt16(rv reflect.Value, v int16) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*int16)(urv.ptr) = v + *(*int16)(rvPtr(rv)) = v } func rvSetInt32(rv reflect.Value, v int32) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*int32)(urv.ptr) = v + *(*int32)(rvPtr(rv)) = v } func rvSetInt64(rv reflect.Value, v int64) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*int64)(urv.ptr) = v + *(*int64)(rvPtr(rv)) = v } func rvSetUint(rv reflect.Value, v uint) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*uint)(urv.ptr) = v + *(*uint)(rvPtr(rv)) = v } func rvSetUintptr(rv reflect.Value, v uintptr) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*uintptr)(urv.ptr) = v + *(*uintptr)(rvPtr(rv)) = v } func rvSetUint8(rv reflect.Value, v uint8) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*uint8)(urv.ptr) = v + *(*uint8)(rvPtr(rv)) = v } func rvSetUint16(rv reflect.Value, v uint16) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*uint16)(urv.ptr) = v + *(*uint16)(rvPtr(rv)) = v } func rvSetUint32(rv reflect.Value, v uint32) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*uint32)(urv.ptr) = v + *(*uint32)(rvPtr(rv)) = v } func rvSetUint64(rv reflect.Value, v uint64) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - *(*uint64)(urv.ptr) = v + *(*uint64)(rvPtr(rv)) = v } // ---------------- @@ -775,12 +755,10 @@ func rvSetDirect(rv reflect.Value, v reflect.Value) { uv := (*unsafeReflectValue)(unsafe.Pointer(&v)) if uv.flag&unsafeFlagIndir == 0 { *(*unsafe.Pointer)(urv.ptr) = uv.ptr - } else if uv.ptr == unsafeZeroAddr { - if urv.ptr != unsafeZeroAddr { - typedmemclr(urv.typ, urv.ptr) - } - } else { + } else if uv.ptr != unsafeZeroAddr { typedmemmove(urv.typ, urv.ptr, uv.ptr) + } else if urv.ptr != unsafeZeroAddr { + typedmemclr(urv.typ, urv.ptr) } } @@ -812,11 +790,9 @@ func rvMakeSlice(rv reflect.Value, ti *typeInfo, xlen, xcap int) (_ reflect.Valu // It is typically called when we know that SetLen(...) cannot be done. func rvSlice(rv reflect.Value, length int) reflect.Value { urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - var x []struct{} - ux := (*unsafeSlice)(unsafe.Pointer(&x)) - *ux = *(*unsafeSlice)(urv.ptr) + ux := *(*unsafeSlice)(urv.ptr) // copy slice header ux.Len = length - urv.ptr = unsafe.Pointer(ux) + urv.ptr = unsafe.Pointer(&ux) return rv } @@ -834,10 +810,16 @@ func rvGrowSlice(rv reflect.Value, ti *typeInfo, cap, incr int) (v reflect.Value // ------------ -func rvSliceIndex(rv reflect.Value, i int, ti *typeInfo) (v reflect.Value) { +func rvArrayIndex(rv reflect.Value, i int, ti *typeInfo, isSlice bool) (v reflect.Value) { urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) uv := (*unsafeReflectValue)(unsafe.Pointer(&v)) - uv.ptr = unsafe.Pointer(uintptr(((*unsafeSlice)(urv.ptr)).Data) + uintptr(int(ti.elemsize)*i)) + if isSlice { + uv.ptr = unsafe.Pointer(uintptr(((*unsafeSlice)(urv.ptr)).Data)) + } else { + uv.ptr = unsafe.Pointer(uintptr(urv.ptr)) + } + uv.ptr = unsafe.Add(uv.ptr, ti.elemsize*uint32(i)) + // uv.ptr = unsafe.Pointer(ptr + uintptr(int(ti.elemsize)*i)) uv.typ = ((*unsafeIntf)(unsafe.Pointer(&ti.elem))).ptr uv.flag = uintptr(ti.elemkind) | unsafeFlagIndir | unsafeFlagAddr return @@ -861,19 +843,11 @@ func rvCapSlice(rv reflect.Value) int { return (*unsafeSlice)(urv.ptr).Cap } -func rvArrayIndex(rv reflect.Value, i int, ti *typeInfo) (v reflect.Value) { - urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - uv := (*unsafeReflectValue)(unsafe.Pointer(&v)) - uv.ptr = unsafe.Pointer(uintptr(urv.ptr) + uintptr(int(ti.elemsize)*i)) - uv.typ = ((*unsafeIntf)(unsafe.Pointer(&ti.elem))).ptr - uv.flag = uintptr(ti.elemkind) | unsafeFlagIndir | unsafeFlagAddr - return -} - // if scratch is nil, then return a writable view (assuming canAddr=true) -func rvGetArrayBytes(rv reflect.Value, scratch []byte) (bs []byte) { +func rvGetArrayBytes(rv reflect.Value, _ []byte) (bs []byte) { urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) bx := (*unsafeSlice)(unsafe.Pointer(&bs)) + // bx.Data, bx.Len, bx.Cap = urv.ptr, rv.Len(), bx.Len bx.Data = urv.ptr bx.Len = rv.Len() bx.Cap = bx.Len @@ -889,7 +863,7 @@ func rvGetArray4Slice(rv reflect.Value) (v reflect.Value) { // // Consequently, we use rvLenSlice, not rvCapSlice. - t := reflectArrayOf(rvLenSlice(rv), rv.Type().Elem()) + t := reflect.ArrayOf(rvLenSlice(rv), rv.Type().Elem()) // v = rvZeroAddrK(t, reflect.Array) uv := (*unsafeReflectValue)(unsafe.Pointer(&v)) @@ -921,99 +895,84 @@ func rvCopySlice(dest, src reflect.Value, elemType reflect.Type) { // ------------ +func rvPtr(rv reflect.Value) unsafe.Pointer { + return (*unsafeReflectValue)(unsafe.Pointer(&rv)).ptr +} + func rvGetBool(rv reflect.Value) bool { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*bool)(v.ptr) + return *(*bool)(rvPtr(rv)) } func rvGetBytes(rv reflect.Value) []byte { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*[]byte)(v.ptr) + return *(*[]byte)(rvPtr(rv)) } func rvGetTime(rv reflect.Value) time.Time { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*time.Time)(v.ptr) + return *(*time.Time)(rvPtr(rv)) } func rvGetString(rv reflect.Value) string { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*string)(v.ptr) + return *(*string)(rvPtr(rv)) } func rvGetFloat64(rv reflect.Value) float64 { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*float64)(v.ptr) + return *(*float64)(rvPtr(rv)) } func rvGetFloat32(rv reflect.Value) float32 { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*float32)(v.ptr) + return *(*float32)(rvPtr(rv)) } func rvGetComplex64(rv reflect.Value) complex64 { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*complex64)(v.ptr) + return *(*complex64)(rvPtr(rv)) } func rvGetComplex128(rv reflect.Value) complex128 { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*complex128)(v.ptr) + return *(*complex128)(rvPtr(rv)) } func rvGetInt(rv reflect.Value) int { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*int)(v.ptr) + return *(*int)(rvPtr(rv)) } func rvGetInt8(rv reflect.Value) int8 { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*int8)(v.ptr) + return *(*int8)(rvPtr(rv)) } func rvGetInt16(rv reflect.Value) int16 { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*int16)(v.ptr) + return *(*int16)(rvPtr(rv)) } func rvGetInt32(rv reflect.Value) int32 { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*int32)(v.ptr) + return *(*int32)(rvPtr(rv)) } func rvGetInt64(rv reflect.Value) int64 { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*int64)(v.ptr) + return *(*int64)(rvPtr(rv)) } func rvGetUint(rv reflect.Value) uint { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*uint)(v.ptr) + return *(*uint)(rvPtr(rv)) } func rvGetUint8(rv reflect.Value) uint8 { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*uint8)(v.ptr) + return *(*uint8)(rvPtr(rv)) } func rvGetUint16(rv reflect.Value) uint16 { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*uint16)(v.ptr) + return *(*uint16)(rvPtr(rv)) } func rvGetUint32(rv reflect.Value) uint32 { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*uint32)(v.ptr) + return *(*uint32)(rvPtr(rv)) } func rvGetUint64(rv reflect.Value) uint64 { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*uint64)(v.ptr) + return *(*uint64)(rvPtr(rv)) } func rvGetUintptr(rv reflect.Value) uintptr { - v := (*unsafeReflectValue)(unsafe.Pointer(&rv)) - return *(*uintptr)(v.ptr) + return *(*uintptr)(rvPtr(rv)) } func rvLenMap(rv reflect.Value) int { @@ -1027,32 +986,6 @@ func rvLenMap(rv reflect.Value) int { return len_map(rvRefPtr((*unsafeReflectValue)(unsafe.Pointer(&rv)))) } -// copy is an intrinsic, which may use asm if length is small, -// or make a runtime call to runtime.memmove if length is large. -// Performance suffers when you always call runtime.memmove function. -// -// Consequently, there's no value in a copybytes call - just call copy() directly - -// func copybytes(to, from []byte) (n int) { -// n = (*unsafeSlice)(unsafe.Pointer(&from)).Len -// memmove( -// (*unsafeSlice)(unsafe.Pointer(&to)).Data, -// (*unsafeSlice)(unsafe.Pointer(&from)).Data, -// uintptr(n), -// ) -// return -// } - -// func copybytestr(to []byte, from string) (n int) { -// n = (*unsafeSlice)(unsafe.Pointer(&from)).Len -// memmove( -// (*unsafeSlice)(unsafe.Pointer(&to)).Data, -// (*unsafeSlice)(unsafe.Pointer(&from)).Data, -// uintptr(n), -// ) -// return -// } - // Note: it is hard to find len(...) of an array type, // as that is a field in the arrayType representing the array, and hard to introspect. // @@ -1065,24 +998,26 @@ func rvLenMap(rv reflect.Value) int { // // It is more performant to provide a value that the map entry is set into, // and that elides the allocation. - -// go 1.4+ has runtime/hashmap.go or runtime/map.go which has a -// hIter struct with the first 2 values being key and value -// of the current iteration. // +// go 1.4 through go 1.23 (in runtime/hashmap.go or runtime/map.go) has a hIter struct +// with the first 2 values being pointers for key and value of the current iteration. +// The next 6 values are pointers, followed by numeric types (uintptr, uint8, bool, etc). // This *hIter is passed to mapiterinit, mapiternext, mapiterkey, mapiterelem. -// We bypass the reflect wrapper functions and just use the *hIter directly. // -// Though *hIter has many fields, we only care about the first 2. +// In go 1.24, swissmap was introduced, and it provides a compatibility layer +// for hIter (called linknameIter). This has only 2 pointer fields after the key and value pointers. +// +// Note: We bypass the reflect wrapper functions and just use the *hIter directly. // -// We directly embed this in unsafeMapIter below +// When 'faking' these types with our own, we MUST ensure that the GC sees the pointers +// appropriately. These are reflected in goversion_(no)swissmap_unsafe.go files. +// In these files, we pad the extra spaces appropriately. // -// hiter is typically about 12 words, but we just fill up unsafeMapIter to 32 words, -// so it fills multiple cache lines and can give some extra space to accomodate small growth. +// Note: the faux hIter/linknameIter is directly embedded in unsafeMapIter below type unsafeMapIter struct { mtyp, mptr unsafe.Pointer - k, v reflect.Value + k, v unsafeReflectValue kisref bool visref bool mapvalues bool @@ -1092,7 +1027,7 @@ type unsafeMapIter struct { it struct { key unsafe.Pointer value unsafe.Pointer - _ [20]uintptr // padding for other fields (to make up 32 words for enclosing struct) + _ unsafeMapIterPadding } } @@ -1112,18 +1047,16 @@ func (t *unsafeMapIter) Next() (r bool) { } if helperUnsafeDirectAssignMapEntry || t.kisref { - (*unsafeReflectValue)(unsafe.Pointer(&t.k)).ptr = t.it.key + t.k.ptr = t.it.key } else { - k := (*unsafeReflectValue)(unsafe.Pointer(&t.k)) - typedmemmove(k.typ, k.ptr, t.it.key) + typedmemmove(t.k.typ, t.k.ptr, t.it.key) } if t.mapvalues { if helperUnsafeDirectAssignMapEntry || t.visref { - (*unsafeReflectValue)(unsafe.Pointer(&t.v)).ptr = t.it.value + t.v.ptr = t.it.value } else { - v := (*unsafeReflectValue)(unsafe.Pointer(&t.v)) - typedmemmove(v.typ, v.ptr, t.it.value) + typedmemmove(t.v.typ, t.v.ptr, t.it.value) } } @@ -1131,11 +1064,11 @@ func (t *unsafeMapIter) Next() (r bool) { } func (t *unsafeMapIter) Key() (r reflect.Value) { - return t.k + return *(*reflect.Value)(unsafe.Pointer(&t.k)) } func (t *unsafeMapIter) Value() (r reflect.Value) { - return t.v + return *(*reflect.Value)(unsafe.Pointer(&t.v)) } func (t *unsafeMapIter) Done() {} @@ -1162,14 +1095,14 @@ func mapRange(t *mapIter, m, k, v reflect.Value, mapvalues bool) { // t.it = (*unsafeMapHashIter)(reflect_mapiterinit(t.mtyp, t.mptr)) mapiterinit(t.mtyp, t.mptr, unsafe.Pointer(&t.it)) - t.k = k + t.k = *(*unsafeReflectValue)(unsafe.Pointer(&k)) t.kisref = refBitset.isset(byte(k.Kind())) if mapvalues { - t.v = v + t.v = *(*unsafeReflectValue)(unsafe.Pointer(&v)) t.visref = refBitset.isset(byte(v.Kind())) } else { - t.v = reflect.Value{} + t.v = unsafeReflectValue{} } } @@ -1182,13 +1115,6 @@ func unsafeMapKVPtr(urv *unsafeReflectValue) unsafe.Pointer { return urv.ptr } -// func mapDelete(m, k reflect.Value) { -// var urv = (*unsafeReflectValue)(unsafe.Pointer(&k)) -// var kptr = unsafeMapKVPtr(urv) -// urv = (*unsafeReflectValue)(unsafe.Pointer(&m)) -// mapdelete(urv.typ, rv2ptr(urv), kptr) -// } - // return an addressable reflect value that can be used in mapRange and mapGet operations. // // all calls to mapGet or mapRange will call here to get an addressable reflect.Value. @@ -1205,53 +1131,39 @@ func mapAddrLoopvarRV(t reflect.Type, k reflect.Kind) (rv reflect.Value) { return } -// ---------- ENCODER optimized --------------- - -func (e *Encoder) jsondriver() *jsonEncDriver { - return (*jsonEncDriver)((*unsafeIntf)(unsafe.Pointer(&e.e)).ptr) -} - -func (d *Decoder) zerocopystate() bool { - return d.decByteState == decByteStateZerocopy && d.h.ZeroCopy -} - -func (d *Decoder) stringZC(v []byte) (s string) { - // MARKER: inline zerocopystate directly so genHelper forwarding function fits within inlining cost - - // if d.zerocopystate() { - if d.decByteState == decByteStateZerocopy && d.h.ZeroCopy { - return stringView(v) - } - return d.string(v) +func makeMapReflect(typ reflect.Type, size int) (rv reflect.Value) { + t := (*unsafeIntf)(unsafe.Pointer(&typ)).ptr + urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) + urv.typ = t + urv.flag = uintptr(reflect.Map) + urv.ptr = makemap(t, size, nil) + return } -func (d *Decoder) mapKeyString(callFnRvk *bool, kstrbs, kstr2bs *[]byte) string { - if !d.zerocopystate() { - *callFnRvk = true - if d.decByteState == decByteStateReuseBuf { - *kstrbs = append((*kstrbs)[:0], (*kstr2bs)...) - *kstr2bs = *kstrbs - } - } - return stringView(*kstr2bs) -} - -// ---------- DECODER optimized --------------- - -func (d *Decoder) jsondriver() *jsonDecDriver { - return (*jsonDecDriver)((*unsafeIntf)(unsafe.Pointer(&d.d)).ptr) +func (d *decoderBase) bytes2Str(in []byte, state dBytesAttachState) (s string, mutable bool) { + return stringView(in), state <= dBytesAttachBuffer } // ---------- structFieldInfo optimized --------------- -func (n *structFieldInfoPathNode) rvField(v reflect.Value) (rv reflect.Value) { +func (n *structFieldInfoNode) rvField(v reflect.Value) (rv reflect.Value) { // we already know this is exported, and maybe embedded (based on what si says) uv := (*unsafeReflectValue)(unsafe.Pointer(&v)) + urv := (*unsafeReflectValue)(unsafe.Pointer(&rv)) // clear flagEmbedRO if necessary, and inherit permission bits from v urv.flag = uv.flag&(unsafeFlagStickyRO|unsafeFlagIndir|unsafeFlagAddr) | uintptr(n.kind) urv.typ = ((*unsafeIntf)(unsafe.Pointer(&n.typ))).ptr urv.ptr = unsafe.Pointer(uintptr(uv.ptr) + uintptr(n.offset)) + + // *(*unsafeReflectValue)(unsafe.Pointer(&rv)) = unsafeReflectValue{ + // unsafeIntf: unsafeIntf{ + // typ: ((*unsafeIntf)(unsafe.Pointer(&n.typ))).ptr, + // ptr: unsafe.Pointer(uintptr(uv.ptr) + uintptr(n.offset)), + // }, + // flag: uv.flag&(unsafeFlagStickyRO|unsafeFlagIndir|unsafeFlagAddr) | uintptr(n.kind), + // } + return } @@ -1299,10 +1211,6 @@ func unsafeNew(typ unsafe.Pointer) unsafe.Pointer { // failing with "error: undefined reference" error. // however, runtime.{mallocgc, newarray} are supported, so use that instead. -//go:linkname memmove runtime.memmove -//go:noescape -func memmove(to, from unsafe.Pointer, n uintptr) - //go:linkname mallocgc runtime.mallocgc //go:noescape func mallocgc(size uintptr, typ unsafe.Pointer, needzero bool) unsafe.Pointer @@ -1319,10 +1227,6 @@ func mapiterinit(typ unsafe.Pointer, m unsafe.Pointer, it unsafe.Pointer) //go:noescape func mapiternext(it unsafe.Pointer) (key unsafe.Pointer) -//go:linkname mapdelete runtime.mapdelete -//go:noescape -func mapdelete(typ unsafe.Pointer, m unsafe.Pointer, key unsafe.Pointer) - //go:linkname mapassign runtime.mapassign //go:noescape func mapassign(typ unsafe.Pointer, m unsafe.Pointer, key unsafe.Pointer) unsafe.Pointer @@ -1331,6 +1235,10 @@ func mapassign(typ unsafe.Pointer, m unsafe.Pointer, key unsafe.Pointer) unsafe. //go:noescape func mapaccess2(typ unsafe.Pointer, m unsafe.Pointer, key unsafe.Pointer) (val unsafe.Pointer, ok bool) +//go:linkname makemap runtime.makemap +//go:noescape +func makemap(typ unsafe.Pointer, size int, h unsafe.Pointer) unsafe.Pointer + // reflect.typed{memmove, memclr, slicecopy} will handle checking if the type has pointers or not, // and if a writeBarrier is needed, before delegating to the right method in the runtime. // diff --git a/vendor/github.com/ugorji/go/codec/helper_unsafe_compiler_gc.go b/vendor/github.com/ugorji/go/codec/helper_unsafe_compiler_gc.go index a5c7d59..7d13493 100644 --- a/vendor/github.com/ugorji/go/codec/helper_unsafe_compiler_gc.go +++ b/vendor/github.com/ugorji/go/codec/helper_unsafe_compiler_gc.go @@ -2,7 +2,6 @@ // Use of this source code is governed by a MIT license found in the LICENSE file. //go:build !safe && !codec.safe && !appengine && go1.9 && gc -// +build !safe,!codec.safe,!appengine,go1.9,gc package codec @@ -24,8 +23,67 @@ const ( mapMaxElemSize = 128 ) -func unsafeGrowslice(typ unsafe.Pointer, old unsafeSlice, cap, incr int) (v unsafeSlice) { - return growslice(typ, old, cap+incr) +type mapKeyFastKind uint8 + +const ( + mapKeyFastKindAny = iota + 1 + mapKeyFastKind32 + mapKeyFastKind32ptr + mapKeyFastKind64 + mapKeyFastKind64ptr + mapKeyFastKindStr +) + +var mapKeyFastKindVals [32]mapKeyFastKind + +type mapReqParams struct { + kfast mapKeyFastKind + ref bool + indirect bool +} + +func getMapReqParams(ti *typeInfo) (r mapReqParams) { + r.indirect = mapStoresElemIndirect(uintptr(ti.elemsize)) + r.ref = refBitset.isset(ti.elemkind) + r.kfast = mapKeyFastKindFor(reflect.Kind(ti.keykind)) + return +} + +func init() { + xx := func(f mapKeyFastKind, k ...reflect.Kind) { + for _, v := range k { + mapKeyFastKindVals[byte(v)&31] = f // 'v % 32' equal to 'v & 31' + } + } + + var f mapKeyFastKind + + f = mapKeyFastKind64 + if wordSizeBits == 32 { + f = mapKeyFastKind32 + } + xx(f, reflect.Int, reflect.Uint, reflect.Uintptr) + + f = mapKeyFastKind64ptr + if wordSizeBits == 32 { + f = mapKeyFastKind32ptr + } + xx(f, reflect.Ptr) + + xx(mapKeyFastKindStr, reflect.String) + xx(mapKeyFastKind32, reflect.Uint32, reflect.Int32, reflect.Float32) + xx(mapKeyFastKind64, reflect.Uint64, reflect.Int64, reflect.Float64) +} + +func mapKeyFastKindFor(k reflect.Kind) mapKeyFastKind { + return mapKeyFastKindVals[k&31] +} + +func unsafeGrowslice(typ unsafe.Pointer, old unsafeSlice, cap, incr int) (s unsafeSlice) { + // culled from GOROOT/runtime/slice.go + s = rtgrowslice(old.Data, old.Cap+incr, old.Cap, incr, typ) + s.Len = old.Len + return } // func rvType(rv reflect.Value) reflect.Type { @@ -43,7 +101,7 @@ func mapStoresElemIndirect(elemsize uintptr) bool { return elemsize > mapMaxElemSize } -func mapSet(m, k, v reflect.Value, keyFastKind mapKeyFastKind, valIsIndirect, valIsRef bool) { +func mapSet(m, k, v reflect.Value, p mapReqParams) { // valIsRef var urv = (*unsafeReflectValue)(unsafe.Pointer(&k)) var kptr = unsafeMapKVPtr(urv) urv = (*unsafeReflectValue)(unsafe.Pointer(&v)) @@ -60,14 +118,15 @@ func mapSet(m, k, v reflect.Value, keyFastKind mapKeyFastKind, valIsIndirect, va // Sometimes, we got vvptr == nil when we dereferenced vvptr (if valIsIndirect). // Consequently, only use fastXXX functions if !valIsIndirect - if valIsIndirect { + if p.indirect { vvptr = mapassign(urv.typ, mptr, kptr) - typedmemmove(vtyp, vvptr, vptr) - // reflect_mapassign(urv.typ, mptr, kptr, vptr) - return + // typedmemmove(vtyp, vvptr, vptr) + // // reflect_mapassign(urv.typ, mptr, kptr, vptr) + // return + goto END } - switch keyFastKind { + switch p.kfast { case mapKeyFastKind32: vvptr = mapassign_fast32(urv.typ, mptr, *(*uint32)(kptr)) case mapKeyFastKind32ptr: @@ -82,14 +141,14 @@ func mapSet(m, k, v reflect.Value, keyFastKind mapKeyFastKind, valIsIndirect, va vvptr = mapassign(urv.typ, mptr, kptr) } - // if keyFastKind != 0 && valIsIndirect { + // if p.kfast != 0 && valIsIndirect { // vvptr = *(*unsafe.Pointer)(vvptr) // } - +END: typedmemmove(vtyp, vvptr, vptr) } -func mapGet(m, k, v reflect.Value, keyFastKind mapKeyFastKind, valIsIndirect, valIsRef bool) (_ reflect.Value) { +func mapGet(m, k, v reflect.Value, p mapReqParams) (_ reflect.Value) { var urv = (*unsafeReflectValue)(unsafe.Pointer(&k)) var kptr = unsafeMapKVPtr(urv) urv = (*unsafeReflectValue)(unsafe.Pointer(&m)) @@ -101,7 +160,7 @@ func mapGet(m, k, v reflect.Value, keyFastKind mapKeyFastKind, valIsIndirect, va // Note that mapaccess2_fastXXX functions do not check if the value needs to be copied. // if they do, we should dereference the pointer and return that - switch keyFastKind { + switch p.kfast { case mapKeyFastKind32, mapKeyFastKind32ptr: vvptr, ok = mapaccess2_fast32(urv.typ, mptr, *(*uint32)(kptr)) case mapKeyFastKind64, mapKeyFastKind64ptr: @@ -118,9 +177,9 @@ func mapGet(m, k, v reflect.Value, keyFastKind mapKeyFastKind, valIsIndirect, va urv = (*unsafeReflectValue)(unsafe.Pointer(&v)) - if keyFastKind != 0 && valIsIndirect { + if p.kfast != 0 && p.indirect { urv.ptr = *(*unsafe.Pointer)(vvptr) - } else if helperUnsafeDirectAssignMapEntry || valIsRef { + } else if helperUnsafeDirectAssignMapEntry || p.ref { urv.ptr = vvptr } else { typedmemmove(urv.typ, urv.ptr, vvptr) @@ -129,13 +188,11 @@ func mapGet(m, k, v reflect.Value, keyFastKind mapKeyFastKind, valIsIndirect, va return v } +// ---- + //go:linkname unsafeZeroArr runtime.zeroVal var unsafeZeroArr [1024]byte -// //go:linkname rvPtrToType reflect.toType -// //go:noescape -// func rvPtrToType(typ unsafe.Pointer) reflect.Type - //go:linkname mapassign_fast32 runtime.mapassign_fast32 //go:noescape func mapassign_fast32(typ unsafe.Pointer, m unsafe.Pointer, key uint32) unsafe.Pointer @@ -167,3 +224,19 @@ func mapaccess2_fast64(typ unsafe.Pointer, m unsafe.Pointer, key uint64) (val un //go:linkname mapaccess2_faststr runtime.mapaccess2_faststr //go:noescape func mapaccess2_faststr(typ unsafe.Pointer, m unsafe.Pointer, key string) (val unsafe.Pointer, ok bool) + +//go:linkname rtgrowslice runtime.growslice +//go:noescape +func rtgrowslice(oldPtr unsafe.Pointer, newLen, oldCap, num int, typ unsafe.Pointer) unsafeSlice + +// ---- + +// //go:linkname rvPtrToType reflect.toType +// //go:noescape +// func rvPtrToType(typ unsafe.Pointer) reflect.Type + +// //go:linkname growslice reflect.growslice +// //go:noescape +// func growslice(typ unsafe.Pointer, old unsafeSlice, cap int) unsafeSlice + +// ---- diff --git a/vendor/github.com/ugorji/go/codec/helper_unsafe_compiler_not_gc.go b/vendor/github.com/ugorji/go/codec/helper_unsafe_compiler_not_gc.go index bd9fded..e33db29 100644 --- a/vendor/github.com/ugorji/go/codec/helper_unsafe_compiler_not_gc.go +++ b/vendor/github.com/ugorji/go/codec/helper_unsafe_compiler_not_gc.go @@ -2,7 +2,6 @@ // Use of this source code is governed by a MIT license found in the LICENSE file. //go:build !safe && !codec.safe && !appengine && go1.9 && !gc -// +build !safe,!codec.safe,!appengine,go1.9,!gc package codec @@ -14,6 +13,15 @@ import ( var unsafeZeroArr [1024]byte +type mapReqParams struct { + ref bool +} + +func getMapReqParams(ti *typeInfo) (r mapReqParams) { + r.ref = refBitset.isset(ti.elemkind) + return +} + // runtime.growslice does not work with gccgo, failing with "growslice: cap out of range" error. // consequently, we just call newarray followed by typedslicecopy directly. @@ -31,18 +39,11 @@ func unsafeGrowslice(typ unsafe.Pointer, old unsafeSlice, cap, incr int) (v unsa return } -// func unsafeNew(t reflect.Type, typ unsafe.Pointer) unsafe.Pointer { -// rv := reflect.New(t) -// return ((*unsafeReflectValue)(unsafe.Pointer(&rv))).ptr -// } - // runtime.{mapassign_fastXXX, mapaccess2_fastXXX} are not supported in gollvm, // failing with "error: undefined reference" error. // so we just use runtime.{mapassign, mapaccess2} directly -func mapStoresElemIndirect(elemsize uintptr) bool { return false } - -func mapSet(m, k, v reflect.Value, _ mapKeyFastKind, _, valIsRef bool) { +func mapSet(m, k, v reflect.Value, p mapReqParams) { var urv = (*unsafeReflectValue)(unsafe.Pointer(&k)) var kptr = unsafeMapKVPtr(urv) urv = (*unsafeReflectValue)(unsafe.Pointer(&v)) @@ -56,7 +57,7 @@ func mapSet(m, k, v reflect.Value, _ mapKeyFastKind, _, valIsRef bool) { typedmemmove(vtyp, vvptr, vptr) } -func mapGet(m, k, v reflect.Value, _ mapKeyFastKind, _, valIsRef bool) (_ reflect.Value) { +func mapGet(m, k, v reflect.Value, p mapReqParams) (_ reflect.Value) { var urv = (*unsafeReflectValue)(unsafe.Pointer(&k)) var kptr = unsafeMapKVPtr(urv) urv = (*unsafeReflectValue)(unsafe.Pointer(&m)) @@ -70,7 +71,7 @@ func mapGet(m, k, v reflect.Value, _ mapKeyFastKind, _, valIsRef bool) (_ reflec urv = (*unsafeReflectValue)(unsafe.Pointer(&v)) - if helperUnsafeDirectAssignMapEntry || valIsRef { + if helperUnsafeDirectAssignMapEntry || p.ref { urv.ptr = vvptr } else { typedmemmove(urv.typ, urv.ptr, vvptr) diff --git a/vendor/github.com/ugorji/go/codec/init.mono.go b/vendor/github.com/ugorji/go/codec/init.mono.go new file mode 100644 index 0000000..f4133b0 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/init.mono.go @@ -0,0 +1,130 @@ +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +//go:build !notmono && !codec.notmono + +package codec + +import "io" + +func callMake(v interface{}) {} + +type encWriter interface{ encWriterI } +type decReader interface{ decReaderI } +type encDriver interface{ encDriverI } +type decDriver interface{ decDriverI } + +func (h *SimpleHandle) newEncoderBytes(out *[]byte) encoderI { + return helperEncDriverSimpleBytes{}.newEncoderBytes(out, h) +} + +func (h *SimpleHandle) newEncoder(w io.Writer) encoderI { + return helperEncDriverSimpleIO{}.newEncoderIO(w, h) +} + +func (h *SimpleHandle) newDecoderBytes(in []byte) decoderI { + return helperDecDriverSimpleBytes{}.newDecoderBytes(in, h) +} + +func (h *SimpleHandle) newDecoder(r io.Reader) decoderI { + return helperDecDriverSimpleIO{}.newDecoderIO(r, h) +} + +func (h *JsonHandle) newEncoderBytes(out *[]byte) encoderI { + return helperEncDriverJsonBytes{}.newEncoderBytes(out, h) +} + +func (h *JsonHandle) newEncoder(w io.Writer) encoderI { + return helperEncDriverJsonIO{}.newEncoderIO(w, h) +} + +func (h *JsonHandle) newDecoderBytes(in []byte) decoderI { + return helperDecDriverJsonBytes{}.newDecoderBytes(in, h) +} + +func (h *JsonHandle) newDecoder(r io.Reader) decoderI { + return helperDecDriverJsonIO{}.newDecoderIO(r, h) +} + +func (h *MsgpackHandle) newEncoderBytes(out *[]byte) encoderI { + return helperEncDriverMsgpackBytes{}.newEncoderBytes(out, h) +} + +func (h *MsgpackHandle) newEncoder(w io.Writer) encoderI { + return helperEncDriverMsgpackIO{}.newEncoderIO(w, h) +} + +func (h *MsgpackHandle) newDecoderBytes(in []byte) decoderI { + return helperDecDriverMsgpackBytes{}.newDecoderBytes(in, h) +} + +func (h *MsgpackHandle) newDecoder(r io.Reader) decoderI { + return helperDecDriverMsgpackIO{}.newDecoderIO(r, h) +} + +func (h *BincHandle) newEncoderBytes(out *[]byte) encoderI { + return helperEncDriverBincBytes{}.newEncoderBytes(out, h) +} + +func (h *BincHandle) newEncoder(w io.Writer) encoderI { + return helperEncDriverBincIO{}.newEncoderIO(w, h) +} + +func (h *BincHandle) newDecoderBytes(in []byte) decoderI { + return helperDecDriverBincBytes{}.newDecoderBytes(in, h) +} + +func (h *BincHandle) newDecoder(r io.Reader) decoderI { + return helperDecDriverBincIO{}.newDecoderIO(r, h) +} + +func (h *CborHandle) newEncoderBytes(out *[]byte) encoderI { + return helperEncDriverCborBytes{}.newEncoderBytes(out, h) +} + +func (h *CborHandle) newEncoder(w io.Writer) encoderI { + return helperEncDriverCborIO{}.newEncoderIO(w, h) +} + +func (h *CborHandle) newDecoderBytes(in []byte) decoderI { + return helperDecDriverCborBytes{}.newDecoderBytes(in, h) +} + +func (h *CborHandle) newDecoder(r io.Reader) decoderI { + return helperDecDriverCborIO{}.newDecoderIO(r, h) +} + +var ( + bincFpEncIO = helperEncDriverBincIO{}.fastpathEList() + bincFpEncBytes = helperEncDriverBincBytes{}.fastpathEList() + bincFpDecIO = helperDecDriverBincIO{}.fastpathDList() + bincFpDecBytes = helperDecDriverBincBytes{}.fastpathDList() +) + +var ( + cborFpEncIO = helperEncDriverCborIO{}.fastpathEList() + cborFpEncBytes = helperEncDriverCborBytes{}.fastpathEList() + cborFpDecIO = helperDecDriverCborIO{}.fastpathDList() + cborFpDecBytes = helperDecDriverCborBytes{}.fastpathDList() +) + +var ( + jsonFpEncIO = helperEncDriverJsonIO{}.fastpathEList() + jsonFpEncBytes = helperEncDriverJsonBytes{}.fastpathEList() + jsonFpDecIO = helperDecDriverJsonIO{}.fastpathDList() + jsonFpDecBytes = helperDecDriverJsonBytes{}.fastpathDList() +) + +var ( + msgpackFpEncIO = helperEncDriverMsgpackIO{}.fastpathEList() + msgpackFpEncBytes = helperEncDriverMsgpackBytes{}.fastpathEList() + msgpackFpDecIO = helperDecDriverMsgpackIO{}.fastpathDList() + msgpackFpDecBytes = helperDecDriverMsgpackBytes{}.fastpathDList() +) + +var ( + simpleFpEncIO = helperEncDriverSimpleIO{}.fastpathEList() + simpleFpEncBytes = helperEncDriverSimpleBytes{}.fastpathEList() + simpleFpDecIO = helperDecDriverSimpleIO{}.fastpathDList() + simpleFpDecBytes = helperDecDriverSimpleBytes{}.fastpathDList() +) diff --git a/vendor/github.com/ugorji/go/codec/init.notmono.go b/vendor/github.com/ugorji/go/codec/init.notmono.go new file mode 100644 index 0000000..b03fb85 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/init.notmono.go @@ -0,0 +1,313 @@ +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +//go:build notmono || codec.notmono + +package codec + +import ( + "io" +) + +// This contains all the iniatializations of generics. +// Putting it into one file, ensures that we can go generics or not. + +type maker interface{ Make() } + +func callMake(v interface{}) { + v.(maker).Make() +} + +// ---- (writer.go) + +type encWriter interface { + bufioEncWriterM | bytesEncAppenderM + encWriterI +} + +type bytesEncAppenderM struct { + *bytesEncAppender +} + +func (z *bytesEncAppenderM) Make() { + z.bytesEncAppender = new(bytesEncAppender) + z.out = &bytesEncAppenderDefOut +} + +type bufioEncWriterM struct { + *bufioEncWriter +} + +func (z *bufioEncWriterM) Make() { + z.bufioEncWriter = new(bufioEncWriter) + z.w = io.Discard +} + +// ---- reader.go + +type decReader interface { + bytesDecReaderM | ioDecReaderM + + decReaderI +} + +type bytesDecReaderM struct { + *bytesDecReader +} + +func (z *bytesDecReaderM) Make() { + z.bytesDecReader = new(bytesDecReader) +} + +type ioDecReaderM struct { + *ioDecReader +} + +func (z *ioDecReaderM) Make() { + z.ioDecReader = new(ioDecReader) +} + +// type helperEncWriter[T encWriter] struct{} +// type helperDecReader[T decReader] struct{} +// func (helperDecReader[T]) decByteSlice(r T, clen, maxInitLen int, bs []byte) (bsOut []byte) { + +// ---- (encode.go) + +type encDriver interface { + simpleEncDriverM[bufioEncWriterM] | + simpleEncDriverM[bytesEncAppenderM] | + jsonEncDriverM[bufioEncWriterM] | + jsonEncDriverM[bytesEncAppenderM] | + cborEncDriverM[bufioEncWriterM] | + cborEncDriverM[bytesEncAppenderM] | + msgpackEncDriverM[bufioEncWriterM] | + msgpackEncDriverM[bytesEncAppenderM] | + bincEncDriverM[bufioEncWriterM] | + bincEncDriverM[bytesEncAppenderM] + + encDriverI +} + +// ---- (decode.go) + +type decDriver interface { + simpleDecDriverM[bytesDecReaderM] | + simpleDecDriverM[ioDecReaderM] | + jsonDecDriverM[bytesDecReaderM] | + jsonDecDriverM[ioDecReaderM] | + cborDecDriverM[bytesDecReaderM] | + cborDecDriverM[ioDecReaderM] | + msgpackDecDriverM[bytesDecReaderM] | + msgpackDecDriverM[ioDecReaderM] | + bincDecDriverM[bytesDecReaderM] | + bincDecDriverM[ioDecReaderM] + + decDriverI +} + +// Below: .go files + +// ---- (binc.go) + +type bincEncDriverM[T encWriter] struct { + *bincEncDriver[T] +} + +func (d *bincEncDriverM[T]) Make() { + d.bincEncDriver = new(bincEncDriver[T]) +} + +type bincDecDriverM[T decReader] struct { + *bincDecDriver[T] +} + +func (d *bincDecDriverM[T]) Make() { + d.bincDecDriver = new(bincDecDriver[T]) +} + +var ( + bincFpEncIO = helperEncDriver[bincEncDriverM[bufioEncWriterM]]{}.fastpathEList() + bincFpEncBytes = helperEncDriver[bincEncDriverM[bytesEncAppenderM]]{}.fastpathEList() + bincFpDecIO = helperDecDriver[bincDecDriverM[ioDecReaderM]]{}.fastpathDList() + bincFpDecBytes = helperDecDriver[bincDecDriverM[bytesDecReaderM]]{}.fastpathDList() +) + +// ---- (cbor.go) + +type cborEncDriverM[T encWriter] struct { + *cborEncDriver[T] +} + +func (d *cborEncDriverM[T]) Make() { + d.cborEncDriver = new(cborEncDriver[T]) +} + +type cborDecDriverM[T decReader] struct { + *cborDecDriver[T] +} + +func (d *cborDecDriverM[T]) Make() { + d.cborDecDriver = new(cborDecDriver[T]) +} + +var ( + cborFpEncIO = helperEncDriver[cborEncDriverM[bufioEncWriterM]]{}.fastpathEList() + cborFpEncBytes = helperEncDriver[cborEncDriverM[bytesEncAppenderM]]{}.fastpathEList() + cborFpDecIO = helperDecDriver[cborDecDriverM[ioDecReaderM]]{}.fastpathDList() + cborFpDecBytes = helperDecDriver[cborDecDriverM[bytesDecReaderM]]{}.fastpathDList() +) + +// ---- (json.go) + +type jsonEncDriverM[T encWriter] struct { + *jsonEncDriver[T] +} + +func (d *jsonEncDriverM[T]) Make() { + d.jsonEncDriver = new(jsonEncDriver[T]) +} + +type jsonDecDriverM[T decReader] struct { + *jsonDecDriver[T] +} + +func (d *jsonDecDriverM[T]) Make() { + d.jsonDecDriver = new(jsonDecDriver[T]) +} + +var ( + jsonFpEncIO = helperEncDriver[jsonEncDriverM[bufioEncWriterM]]{}.fastpathEList() + jsonFpEncBytes = helperEncDriver[jsonEncDriverM[bytesEncAppenderM]]{}.fastpathEList() + jsonFpDecIO = helperDecDriver[jsonDecDriverM[ioDecReaderM]]{}.fastpathDList() + jsonFpDecBytes = helperDecDriver[jsonDecDriverM[bytesDecReaderM]]{}.fastpathDList() +) + +// ---- (msgpack.go) + +type msgpackEncDriverM[T encWriter] struct { + *msgpackEncDriver[T] +} + +func (d *msgpackEncDriverM[T]) Make() { + d.msgpackEncDriver = new(msgpackEncDriver[T]) +} + +type msgpackDecDriverM[T decReader] struct { + *msgpackDecDriver[T] +} + +func (d *msgpackDecDriverM[T]) Make() { + d.msgpackDecDriver = new(msgpackDecDriver[T]) +} + +var ( + msgpackFpEncIO = helperEncDriver[msgpackEncDriverM[bufioEncWriterM]]{}.fastpathEList() + msgpackFpEncBytes = helperEncDriver[msgpackEncDriverM[bytesEncAppenderM]]{}.fastpathEList() + msgpackFpDecIO = helperDecDriver[msgpackDecDriverM[ioDecReaderM]]{}.fastpathDList() + msgpackFpDecBytes = helperDecDriver[msgpackDecDriverM[bytesDecReaderM]]{}.fastpathDList() +) + +// ---- (simple.go) + +type simpleEncDriverM[T encWriter] struct { + *simpleEncDriver[T] +} + +func (d *simpleEncDriverM[T]) Make() { + d.simpleEncDriver = new(simpleEncDriver[T]) +} + +type simpleDecDriverM[T decReader] struct { + *simpleDecDriver[T] +} + +func (d *simpleDecDriverM[T]) Make() { + d.simpleDecDriver = new(simpleDecDriver[T]) +} + +var ( + simpleFpEncIO = helperEncDriver[simpleEncDriverM[bufioEncWriterM]]{}.fastpathEList() + simpleFpEncBytes = helperEncDriver[simpleEncDriverM[bytesEncAppenderM]]{}.fastpathEList() + simpleFpDecIO = helperDecDriver[simpleDecDriverM[ioDecReaderM]]{}.fastpathDList() + simpleFpDecBytes = helperDecDriver[simpleDecDriverM[bytesDecReaderM]]{}.fastpathDList() +) + +func (h *SimpleHandle) newEncoderBytes(out *[]byte) encoderI { + return helperEncDriver[simpleEncDriverM[bytesEncAppenderM]]{}.newEncoderBytes(out, h) +} + +func (h *SimpleHandle) newEncoder(w io.Writer) encoderI { + return helperEncDriver[simpleEncDriverM[bufioEncWriterM]]{}.newEncoderIO(w, h) +} + +func (h *SimpleHandle) newDecoderBytes(in []byte) decoderI { + return helperDecDriver[simpleDecDriverM[bytesDecReaderM]]{}.newDecoderBytes(in, h) +} + +func (h *SimpleHandle) newDecoder(r io.Reader) decoderI { + return helperDecDriver[simpleDecDriverM[ioDecReaderM]]{}.newDecoderIO(r, h) +} + +func (h *JsonHandle) newEncoderBytes(out *[]byte) encoderI { + return helperEncDriver[jsonEncDriverM[bytesEncAppenderM]]{}.newEncoderBytes(out, h) +} + +func (h *JsonHandle) newEncoder(w io.Writer) encoderI { + return helperEncDriver[jsonEncDriverM[bufioEncWriterM]]{}.newEncoderIO(w, h) +} + +func (h *JsonHandle) newDecoderBytes(in []byte) decoderI { + return helperDecDriver[jsonDecDriverM[bytesDecReaderM]]{}.newDecoderBytes(in, h) +} + +func (h *JsonHandle) newDecoder(r io.Reader) decoderI { + return helperDecDriver[jsonDecDriverM[ioDecReaderM]]{}.newDecoderIO(r, h) +} + +func (h *MsgpackHandle) newEncoderBytes(out *[]byte) encoderI { + return helperEncDriver[msgpackEncDriverM[bytesEncAppenderM]]{}.newEncoderBytes(out, h) +} + +func (h *MsgpackHandle) newEncoder(w io.Writer) encoderI { + return helperEncDriver[msgpackEncDriverM[bufioEncWriterM]]{}.newEncoderIO(w, h) +} + +func (h *MsgpackHandle) newDecoderBytes(in []byte) decoderI { + return helperDecDriver[msgpackDecDriverM[bytesDecReaderM]]{}.newDecoderBytes(in, h) +} + +func (h *MsgpackHandle) newDecoder(r io.Reader) decoderI { + return helperDecDriver[msgpackDecDriverM[ioDecReaderM]]{}.newDecoderIO(r, h) +} + +func (h *CborHandle) newEncoderBytes(out *[]byte) encoderI { + return helperEncDriver[cborEncDriverM[bytesEncAppenderM]]{}.newEncoderBytes(out, h) +} + +func (h *CborHandle) newEncoder(w io.Writer) encoderI { + return helperEncDriver[cborEncDriverM[bufioEncWriterM]]{}.newEncoderIO(w, h) +} + +func (h *CborHandle) newDecoderBytes(in []byte) decoderI { + return helperDecDriver[cborDecDriverM[bytesDecReaderM]]{}.newDecoderBytes(in, h) +} + +func (h *CborHandle) newDecoder(r io.Reader) decoderI { + return helperDecDriver[cborDecDriverM[ioDecReaderM]]{}.newDecoderIO(r, h) +} + +func (h *BincHandle) newEncoderBytes(out *[]byte) encoderI { + return helperEncDriver[bincEncDriverM[bytesEncAppenderM]]{}.newEncoderBytes(out, h) +} + +func (h *BincHandle) newEncoder(w io.Writer) encoderI { + return helperEncDriver[bincEncDriverM[bufioEncWriterM]]{}.newEncoderIO(w, h) +} + +func (h *BincHandle) newDecoderBytes(in []byte) decoderI { + return helperDecDriver[bincDecDriverM[bytesDecReaderM]]{}.newDecoderBytes(in, h) +} + +func (h *BincHandle) newDecoder(r io.Reader) decoderI { + return helperDecDriver[bincDecDriverM[ioDecReaderM]]{}.newDecoderIO(r, h) +} diff --git a/vendor/github.com/ugorji/go/codec/json.base.go b/vendor/github.com/ugorji/go/codec/json.base.go new file mode 100644 index 0000000..d874033 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/json.base.go @@ -0,0 +1,504 @@ +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "encoding/base32" + "encoding/base64" + "errors" + "math" + "reflect" + "strings" + "time" + "unicode" +) + +//-------------------------------- + +// jsonLits and jsonLitb are defined at the package level, +// so they are guaranteed to be stored efficiently, making +// for better append/string comparison/etc. +// +// (anecdotal evidence from some benchmarking on go 1.20 devel in 20220104) +const jsonLits = `"true"false"null"{}[]` + +const ( + jsonLitT = 1 + jsonLitF = 6 + jsonLitN = 12 + jsonLitM = 17 + jsonLitA = 19 +) + +var jsonLitb = []byte(jsonLits) +var jsonNull = jsonLitb[jsonLitN : jsonLitN+4] +var jsonArrayEmpty = jsonLitb[jsonLitA : jsonLitA+2] +var jsonMapEmpty = jsonLitb[jsonLitM : jsonLitM+2] + +const jsonEncodeUintSmallsString = "" + + "00010203040506070809" + + "10111213141516171819" + + "20212223242526272829" + + "30313233343536373839" + + "40414243444546474849" + + "50515253545556575859" + + "60616263646566676869" + + "70717273747576777879" + + "80818283848586878889" + + "90919293949596979899" + +var jsonEncodeUintSmallsStringBytes = (*[len(jsonEncodeUintSmallsString)]byte)([]byte(jsonEncodeUintSmallsString)) + +const ( + jsonU4Chk2 = '0' + jsonU4Chk1 = 'a' - 10 + jsonU4Chk0 = 'A' - 10 +) + +const ( + // If !jsonValidateSymbols, decoding will be faster, by skipping some checks: + // - If we see first character of null, false or true, + // do not validate subsequent characters. + // - e.g. if we see a n, assume null and skip next 3 characters, + // and do not validate they are ull. + // P.S. Do not expect a significant decoding boost from this. + jsonValidateSymbols = true + + // jsonEscapeMultiByteUnicodeSep controls whether some unicode characters + // that are valid json but may bomb in some contexts are escaped during encoeing. + // + // U+2028 is LINE SEPARATOR. U+2029 is PARAGRAPH SEPARATOR. + // Both technically valid JSON, but bomb on JSONP, so fix here unconditionally. + jsonEscapeMultiByteUnicodeSep = true + + // jsonNakedBoolNumInQuotedStr is used during decoding into a blank interface{} + // to control whether we detect quoted values of bools and null where a map key is expected, + // and treat as nil, true or false. + jsonNakedBoolNumInQuotedStr = true +) + +var ( + // jsonTabs and jsonSpaces are used as caches for indents + jsonTabs [32]byte + jsonSpaces [128]byte + + jsonHexEncoder hexEncoder + // jsonTimeLayout is used to validate time layouts. + // Unfortunately, we couldn't compare time.Time effectively, so punted. + // jsonTimeLayout time.Time +) + +func init() { + for i := 0; i < len(jsonTabs); i++ { + jsonTabs[i] = '\t' + } + for i := 0; i < len(jsonSpaces); i++ { + jsonSpaces[i] = ' ' + } + // jsonTimeLayout, err := time.Parse(time.Layout, time.Layout) + // halt.onerror(err) + // jsonTimeLayout = jsonTimeLayout.Round(time.Second).UTC() +} + +// ---------------- + +type jsonBytesFmt uint8 + +const ( + jsonBytesFmtArray jsonBytesFmt = iota + 1 + jsonBytesFmtBase64 + jsonBytesFmtBase64url + jsonBytesFmtBase32 + jsonBytesFmtBase32hex + jsonBytesFmtBase16 + + jsonBytesFmtHex = jsonBytesFmtBase16 +) + +type jsonTimeFmt uint8 + +const ( + jsonTimeFmtStringLayout jsonTimeFmt = iota + 1 + jsonTimeFmtUnix + jsonTimeFmtUnixMilli + jsonTimeFmtUnixMicro + jsonTimeFmtUnixNano +) + +type jsonBytesFmter = bytesEncoder + +type jsonHandleOpts struct { + rawext bool + // bytesFmt used during encode to determine how to encode []byte + bytesFmt jsonBytesFmt + // timeFmt used during encode to determine how to encode a time.Time + timeFmt jsonTimeFmt + // timeFmtNum used during decode to decode a time.Time from an int64 in the stream + timeFmtNum jsonTimeFmt + // timeFmtLayouts used on decode, to try to parse time.Time until successful + timeFmtLayouts []string + // byteFmters used on decode, to try to parse []byte from a UTF-8 string encoding (e.g. base64) + byteFmters []jsonBytesFmter +} + +func jsonCheckTimeLayout(s string) (ok bool) { + _, err := time.Parse(s, s) + // t...Equal(jsonTimeLayout) always returns false - unsure why + // return err == nil && t.Round(time.Second).UTC().Equal(jsonTimeLayout) + return err == nil +} + +func (x *jsonHandleOpts) reset(h *JsonHandle) { + x.timeFmt = 0 + x.timeFmtNum = 0 + x.timeFmtLayouts = x.timeFmtLayouts[:0] + if len(h.TimeFormat) != 0 { + switch h.TimeFormat[0] { + case "unix": + x.timeFmt = jsonTimeFmtUnix + case "unixmilli": + x.timeFmt = jsonTimeFmtUnixMilli + case "unixmicro": + x.timeFmt = jsonTimeFmtUnixMicro + case "unixnano": + x.timeFmt = jsonTimeFmtUnixNano + } + x.timeFmtNum = x.timeFmt + for _, v := range h.TimeFormat { + if !strings.HasPrefix(v, "unix") && jsonCheckTimeLayout(v) { + x.timeFmtLayouts = append(x.timeFmtLayouts, v) + } + } + } + if x.timeFmt == 0 { // both timeFmt and timeFmtNum are 0 + x.timeFmtNum = jsonTimeFmtUnix + x.timeFmt = jsonTimeFmtStringLayout + if len(x.timeFmtLayouts) == 0 { + x.timeFmtLayouts = append(x.timeFmtLayouts, time.RFC3339Nano) + } + } + + x.bytesFmt = 0 + x.byteFmters = x.byteFmters[:0] + var b64 bool + if len(h.BytesFormat) != 0 { + switch h.BytesFormat[0] { + case "array": + x.bytesFmt = jsonBytesFmtArray + case "base64": + x.bytesFmt = jsonBytesFmtBase64 + case "base64url": + x.bytesFmt = jsonBytesFmtBase64url + case "base32": + x.bytesFmt = jsonBytesFmtBase32 + case "base32hex": + x.bytesFmt = jsonBytesFmtBase32hex + case "base16", "hex": + x.bytesFmt = jsonBytesFmtBase16 + } + for _, v := range h.BytesFormat { + switch v { + // case "array": + case "base64": + x.byteFmters = append(x.byteFmters, base64.StdEncoding) + b64 = true + case "base64url": + x.byteFmters = append(x.byteFmters, base64.URLEncoding) + case "base32": + x.byteFmters = append(x.byteFmters, base32.StdEncoding) + case "base32hex": + x.byteFmters = append(x.byteFmters, base32.HexEncoding) + case "base16", "hex": + x.byteFmters = append(x.byteFmters, &jsonHexEncoder) + } + } + } + if x.bytesFmt == 0 { + // either len==0 OR gibberish was in the first element; resolve here + x.bytesFmt = jsonBytesFmtBase64 + if !b64 { // not present - so insert into pos 0 + x.byteFmters = append(x.byteFmters, nil) + copy(x.byteFmters[1:], x.byteFmters[0:]) + x.byteFmters[0] = base64.StdEncoding + } + } + // ---- + x.rawext = h.RawBytesExt != nil +} + +var jsonEncBoolStrs = [2][2]string{ + {jsonLits[jsonLitF : jsonLitF+5], jsonLits[jsonLitT : jsonLitT+4]}, + {jsonLits[jsonLitF-1 : jsonLitF+6], jsonLits[jsonLitT-1 : jsonLitT+5]}, +} + +func jsonEncodeUint(neg, quotes bool, u uint64, b *[48]byte) []byte { + // MARKER: use setByteAt/byteAt to elide the bounds-checks + // when we are sure that we don't go beyond the bounds. + + // MARKER: copied mostly from std library: strconv/itoa.go + // this should only be called on 64bit OS. + + var ss = jsonEncodeUintSmallsStringBytes[:] + + // typically, 19 or 20 bytes sufficient for decimal encoding a uint64 + var a = b[:24] + var i = uint(len(a)) + + if quotes { + i-- + setByteAt(a, i, '"') + // a[i] = '"' + } + var is, us uint // use uint, as those fit into a register on the platform + if cpu32Bit { + for u >= 1e9 { + q := u / 1e9 + us = uint(u - q*1e9) // u % 1e9 fits into a uint + for j := 4; j > 0; j-- { + is = us % 100 * 2 + us /= 100 + i -= 2 + setByteAt(a, i+1, byteAt(ss, is+1)) + setByteAt(a, i, byteAt(ss, is)) + } + i-- + setByteAt(a, i, byteAt(ss, us*2+1)) + u = q + } + // u is now < 1e9, so is guaranteed to fit into a uint + } + us = uint(u) + for us >= 100 { + is = us % 100 * 2 + us /= 100 + i -= 2 + setByteAt(a, i+1, byteAt(ss, is+1)) + setByteAt(a, i, byteAt(ss, is)) + // a[i+1], a[i] = ss[is+1], ss[is] + } + + // us < 100 + is = us * 2 + i-- + setByteAt(a, i, byteAt(ss, is+1)) + // a[i] = ss[is+1] + if us >= 10 { + i-- + setByteAt(a, i, byteAt(ss, is)) + // a[i] = ss[is] + } + if neg { + i-- + setByteAt(a, i, '-') + // a[i] = '-' + } + if quotes { + i-- + setByteAt(a, i, '"') + // a[i] = '"' + } + return a[i:] +} + +// MARKER: checkLitErr methods to prevent the got/expect parameters from escaping + +//go:noinline +func jsonCheckLitErr3(got, expect [3]byte) { + halt.errorf("expecting %s: got %s", expect, got) +} + +//go:noinline +func jsonCheckLitErr4(got, expect [4]byte) { + halt.errorf("expecting %s: got %s", expect, got) +} + +func jsonSlashURune(cs [4]byte) (rr uint32) { + for _, c := range cs { + // best to use explicit if-else + // - not a table, etc which involve memory loads, array lookup with bounds checks, etc + if c >= '0' && c <= '9' { + rr = rr*16 + uint32(c-jsonU4Chk2) + } else if c >= 'a' && c <= 'f' { + rr = rr*16 + uint32(c-jsonU4Chk1) + } else if c >= 'A' && c <= 'F' { + rr = rr*16 + uint32(c-jsonU4Chk0) + } else { + return unicode.ReplacementChar + } + } + return +} + +func jsonNakedNum(z *fauxUnion, bs []byte, preferFloat, signedInt bool) (err error) { + // Note: jsonNakedNum is NEVER called with a zero-length []byte + if preferFloat { + z.v = valueTypeFloat + z.f, err = parseFloat64(bs) + } else { + err = parseNumber(bs, z, signedInt) + } + return +} + +//---------------------- + +// JsonHandle is a handle for JSON encoding format. +// +// Json is comprehensively supported: +// - decodes numbers into interface{} as int, uint or float64 +// based on how the number looks and some config parameters e.g. PreferFloat, SignedInt, etc. +// - decode integers from float formatted numbers e.g. 1.27e+8 +// - decode any json value (numbers, bool, etc) from quoted strings +// - configurable way to encode/decode []byte . +// by default, encodes and decodes []byte using base64 Std Encoding +// - UTF-8 support for encoding and decoding +// +// It has better performance than the json library in the standard library, +// by leveraging the performance improvements of the codec library. +// +// In addition, it doesn't read more bytes than necessary during a decode, which allows +// reading multiple values from a stream containing json and non-json content. +// For example, a user can read a json value, then a cbor value, then a msgpack value, +// all from the same stream in sequence. +// +// Note that, when decoding quoted strings, invalid UTF-8 or invalid UTF-16 surrogate pairs are +// not treated as an error. Instead, they are replaced by the Unicode replacement character U+FFFD. +// +// Note also that the float values for NaN, +Inf or -Inf are encoded as null, +// as suggested by NOTE 4 of the ECMA-262 ECMAScript Language Specification 5.1 edition. +// see http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf . +// +// Note the following behaviour differences vs std-library encoding/json package: +// - struct field names matched in case-sensitive manner +type JsonHandle struct { + textEncodingType + BasicHandle + + // Indent indicates how a value is encoded. + // - If positive, indent by that number of spaces. + // - If negative, indent by that number of tabs. + Indent int8 + + // IntegerAsString controls how integers (signed and unsigned) are encoded. + // + // Per the JSON Spec, JSON numbers are 64-bit floating point numbers. + // Consequently, integers > 2^53 cannot be represented as a JSON number without losing precision. + // This can be mitigated by configuring how to encode integers. + // + // IntegerAsString interpretes the following values: + // - if 'L', then encode integers > 2^53 as a json string. + // - if 'A', then encode all integers as a json string + // containing the exact integer representation as a decimal. + // - else encode all integers as a json number (default) + IntegerAsString byte + + // HTMLCharsAsIs controls how to encode some special characters to html: < > & + // + // By default, we encode them as \uXXX + // to prevent security holes when served from some browsers. + HTMLCharsAsIs bool + + // PreferFloat says that we will default to decoding a number as a float. + // If not set, we will examine the characters of the number and decode as an + // integer type if it doesn't have any of the characters [.eE]. + PreferFloat bool + + // TermWhitespace says that we add a whitespace character + // at the end of an encoding. + // + // The whitespace is important, especially if using numbers in a context + // where multiple items are written to a stream. + TermWhitespace bool + + // MapKeyAsString says to encode all map keys as strings. + // + // Use this to enforce strict json output. + // The only caveat is that nil value is ALWAYS written as null (never as "null") + MapKeyAsString bool + + // _ uint64 // padding (cache line) + + // Note: below, we store hardly-used items e.g. RawBytesExt. + // These values below may straddle a cache line, but they are hardly-used, + // so shouldn't contribute to false-sharing except in rare cases. + + // RawBytesExt, if configured, is used to encode and decode raw bytes in a custom way. + // If not configured, raw bytes are encoded to/from base64 text. + RawBytesExt InterfaceExt + + // TimeFormat is an array of strings representing a time.Time format, with each one being either + // a layout that honor the time.Time.Format specification. + // In addition, at most one of the set below (unix, unixmilli, unixmicro, unixnana) can be specified + // supporting encoding and decoding time as a number relative to the time epoch of Jan 1, 1970. + // + // During encode of a time.Time, the first entry in the array is used (defaults to RFC 3339). + // + // During decode, + // - if a string, then each of the layout formats will be tried in order until a time.Time is decoded. + // - if a number, then the sole unix entry is used. + TimeFormat []string + + // BytesFormat is an array of strings representing how bytes are encoded. + // + // Supported values are base64 (default), base64url, base32, base32hex, base16 (synonymous with hex) and array. + // + // array is a special value configuring that bytes are encoded as a sequence of numbers. + // + // During encode of a []byte, the first entry is used (defaults to base64 if none specified). + // + // During decode + // - if a string, then attempt decoding using each format in sequence until successful. + // - if an array, then decode normally + BytesFormat []string +} + +func (h *JsonHandle) isJson() bool { return true } + +// Name returns the name of the handle: json +func (h *JsonHandle) Name() string { return "json" } + +// func (h *JsonHandle) desc(bd byte) string { return str4byte(bd) } +func (h *JsonHandle) desc(bd byte) string { return string(bd) } + +func (h *JsonHandle) typical() bool { + return h.Indent == 0 && !h.MapKeyAsString && h.IntegerAsString != 'A' && h.IntegerAsString != 'L' +} + +// SetInterfaceExt sets an extension +func (h *JsonHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) { + return h.SetExt(rt, tag, makeExt(ext)) +} + +func jsonFloatStrconvFmtPrec64(f float64) (fmt byte, prec int8) { + fmt = 'f' + prec = -1 + fbits := math.Float64bits(f) + abs := math.Float64frombits(fbits &^ (1 << 63)) + if abs == 0 || abs == 1 { + prec = 1 + } else if abs < 1e-6 || abs >= 1e21 { + fmt = 'e' + } else if noFrac64(fbits) { + prec = 1 + } + return +} + +func jsonFloatStrconvFmtPrec32(f float32) (fmt byte, prec int8) { + fmt = 'f' + prec = -1 + // directly handle Modf (to get fractions) and Abs (to get absolute) + fbits := math.Float32bits(f) + abs := math.Float32frombits(fbits &^ (1 << 31)) + if abs == 0 || abs == 1 { + prec = 1 + } else if abs < 1e-6 || abs >= 1e21 { + fmt = 'e' + } else if noFrac32(fbits) { + prec = 1 + } + return +} + +var errJsonNoBd = errors.New("descBd unsupported in json") diff --git a/vendor/github.com/ugorji/go/codec/json.fastpath.mono.generated.go b/vendor/github.com/ugorji/go/codec/json.fastpath.mono.generated.go new file mode 100644 index 0000000..b873b0a --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/json.fastpath.mono.generated.go @@ -0,0 +1,12482 @@ +//go:build !notmono && !codec.notmono && !notfastpath && !codec.notfastpath + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "reflect" + "slices" + "sort" +) + +type fastpathEJsonBytes struct { + rtid uintptr + rt reflect.Type + encfn func(*encoderJsonBytes, *encFnInfo, reflect.Value) +} +type fastpathDJsonBytes struct { + rtid uintptr + rt reflect.Type + decfn func(*decoderJsonBytes, *decFnInfo, reflect.Value) +} +type fastpathEsJsonBytes [56]fastpathEJsonBytes +type fastpathDsJsonBytes [56]fastpathDJsonBytes +type fastpathETJsonBytes struct{} +type fastpathDTJsonBytes struct{} + +func (helperEncDriverJsonBytes) fastpathEList() *fastpathEsJsonBytes { + var i uint = 0 + var s fastpathEsJsonBytes + fn := func(v interface{}, fe func(*encoderJsonBytes, *encFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathEJsonBytes{rt2id(xrt), xrt, fe} + i++ + } + + fn([]interface{}(nil), (*encoderJsonBytes).fastpathEncSliceIntfR) + fn([]string(nil), (*encoderJsonBytes).fastpathEncSliceStringR) + fn([][]byte(nil), (*encoderJsonBytes).fastpathEncSliceBytesR) + fn([]float32(nil), (*encoderJsonBytes).fastpathEncSliceFloat32R) + fn([]float64(nil), (*encoderJsonBytes).fastpathEncSliceFloat64R) + fn([]uint8(nil), (*encoderJsonBytes).fastpathEncSliceUint8R) + fn([]uint64(nil), (*encoderJsonBytes).fastpathEncSliceUint64R) + fn([]int(nil), (*encoderJsonBytes).fastpathEncSliceIntR) + fn([]int32(nil), (*encoderJsonBytes).fastpathEncSliceInt32R) + fn([]int64(nil), (*encoderJsonBytes).fastpathEncSliceInt64R) + fn([]bool(nil), (*encoderJsonBytes).fastpathEncSliceBoolR) + + fn(map[string]interface{}(nil), (*encoderJsonBytes).fastpathEncMapStringIntfR) + fn(map[string]string(nil), (*encoderJsonBytes).fastpathEncMapStringStringR) + fn(map[string][]byte(nil), (*encoderJsonBytes).fastpathEncMapStringBytesR) + fn(map[string]uint8(nil), (*encoderJsonBytes).fastpathEncMapStringUint8R) + fn(map[string]uint64(nil), (*encoderJsonBytes).fastpathEncMapStringUint64R) + fn(map[string]int(nil), (*encoderJsonBytes).fastpathEncMapStringIntR) + fn(map[string]int32(nil), (*encoderJsonBytes).fastpathEncMapStringInt32R) + fn(map[string]float64(nil), (*encoderJsonBytes).fastpathEncMapStringFloat64R) + fn(map[string]bool(nil), (*encoderJsonBytes).fastpathEncMapStringBoolR) + fn(map[uint8]interface{}(nil), (*encoderJsonBytes).fastpathEncMapUint8IntfR) + fn(map[uint8]string(nil), (*encoderJsonBytes).fastpathEncMapUint8StringR) + fn(map[uint8][]byte(nil), (*encoderJsonBytes).fastpathEncMapUint8BytesR) + fn(map[uint8]uint8(nil), (*encoderJsonBytes).fastpathEncMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*encoderJsonBytes).fastpathEncMapUint8Uint64R) + fn(map[uint8]int(nil), (*encoderJsonBytes).fastpathEncMapUint8IntR) + fn(map[uint8]int32(nil), (*encoderJsonBytes).fastpathEncMapUint8Int32R) + fn(map[uint8]float64(nil), (*encoderJsonBytes).fastpathEncMapUint8Float64R) + fn(map[uint8]bool(nil), (*encoderJsonBytes).fastpathEncMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*encoderJsonBytes).fastpathEncMapUint64IntfR) + fn(map[uint64]string(nil), (*encoderJsonBytes).fastpathEncMapUint64StringR) + fn(map[uint64][]byte(nil), (*encoderJsonBytes).fastpathEncMapUint64BytesR) + fn(map[uint64]uint8(nil), (*encoderJsonBytes).fastpathEncMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*encoderJsonBytes).fastpathEncMapUint64Uint64R) + fn(map[uint64]int(nil), (*encoderJsonBytes).fastpathEncMapUint64IntR) + fn(map[uint64]int32(nil), (*encoderJsonBytes).fastpathEncMapUint64Int32R) + fn(map[uint64]float64(nil), (*encoderJsonBytes).fastpathEncMapUint64Float64R) + fn(map[uint64]bool(nil), (*encoderJsonBytes).fastpathEncMapUint64BoolR) + fn(map[int]interface{}(nil), (*encoderJsonBytes).fastpathEncMapIntIntfR) + fn(map[int]string(nil), (*encoderJsonBytes).fastpathEncMapIntStringR) + fn(map[int][]byte(nil), (*encoderJsonBytes).fastpathEncMapIntBytesR) + fn(map[int]uint8(nil), (*encoderJsonBytes).fastpathEncMapIntUint8R) + fn(map[int]uint64(nil), (*encoderJsonBytes).fastpathEncMapIntUint64R) + fn(map[int]int(nil), (*encoderJsonBytes).fastpathEncMapIntIntR) + fn(map[int]int32(nil), (*encoderJsonBytes).fastpathEncMapIntInt32R) + fn(map[int]float64(nil), (*encoderJsonBytes).fastpathEncMapIntFloat64R) + fn(map[int]bool(nil), (*encoderJsonBytes).fastpathEncMapIntBoolR) + fn(map[int32]interface{}(nil), (*encoderJsonBytes).fastpathEncMapInt32IntfR) + fn(map[int32]string(nil), (*encoderJsonBytes).fastpathEncMapInt32StringR) + fn(map[int32][]byte(nil), (*encoderJsonBytes).fastpathEncMapInt32BytesR) + fn(map[int32]uint8(nil), (*encoderJsonBytes).fastpathEncMapInt32Uint8R) + fn(map[int32]uint64(nil), (*encoderJsonBytes).fastpathEncMapInt32Uint64R) + fn(map[int32]int(nil), (*encoderJsonBytes).fastpathEncMapInt32IntR) + fn(map[int32]int32(nil), (*encoderJsonBytes).fastpathEncMapInt32Int32R) + fn(map[int32]float64(nil), (*encoderJsonBytes).fastpathEncMapInt32Float64R) + fn(map[int32]bool(nil), (*encoderJsonBytes).fastpathEncMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperDecDriverJsonBytes) fastpathDList() *fastpathDsJsonBytes { + var i uint = 0 + var s fastpathDsJsonBytes + fn := func(v interface{}, fd func(*decoderJsonBytes, *decFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathDJsonBytes{rt2id(xrt), xrt, fd} + i++ + } + + fn([]interface{}(nil), (*decoderJsonBytes).fastpathDecSliceIntfR) + fn([]string(nil), (*decoderJsonBytes).fastpathDecSliceStringR) + fn([][]byte(nil), (*decoderJsonBytes).fastpathDecSliceBytesR) + fn([]float32(nil), (*decoderJsonBytes).fastpathDecSliceFloat32R) + fn([]float64(nil), (*decoderJsonBytes).fastpathDecSliceFloat64R) + fn([]uint8(nil), (*decoderJsonBytes).fastpathDecSliceUint8R) + fn([]uint64(nil), (*decoderJsonBytes).fastpathDecSliceUint64R) + fn([]int(nil), (*decoderJsonBytes).fastpathDecSliceIntR) + fn([]int32(nil), (*decoderJsonBytes).fastpathDecSliceInt32R) + fn([]int64(nil), (*decoderJsonBytes).fastpathDecSliceInt64R) + fn([]bool(nil), (*decoderJsonBytes).fastpathDecSliceBoolR) + + fn(map[string]interface{}(nil), (*decoderJsonBytes).fastpathDecMapStringIntfR) + fn(map[string]string(nil), (*decoderJsonBytes).fastpathDecMapStringStringR) + fn(map[string][]byte(nil), (*decoderJsonBytes).fastpathDecMapStringBytesR) + fn(map[string]uint8(nil), (*decoderJsonBytes).fastpathDecMapStringUint8R) + fn(map[string]uint64(nil), (*decoderJsonBytes).fastpathDecMapStringUint64R) + fn(map[string]int(nil), (*decoderJsonBytes).fastpathDecMapStringIntR) + fn(map[string]int32(nil), (*decoderJsonBytes).fastpathDecMapStringInt32R) + fn(map[string]float64(nil), (*decoderJsonBytes).fastpathDecMapStringFloat64R) + fn(map[string]bool(nil), (*decoderJsonBytes).fastpathDecMapStringBoolR) + fn(map[uint8]interface{}(nil), (*decoderJsonBytes).fastpathDecMapUint8IntfR) + fn(map[uint8]string(nil), (*decoderJsonBytes).fastpathDecMapUint8StringR) + fn(map[uint8][]byte(nil), (*decoderJsonBytes).fastpathDecMapUint8BytesR) + fn(map[uint8]uint8(nil), (*decoderJsonBytes).fastpathDecMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*decoderJsonBytes).fastpathDecMapUint8Uint64R) + fn(map[uint8]int(nil), (*decoderJsonBytes).fastpathDecMapUint8IntR) + fn(map[uint8]int32(nil), (*decoderJsonBytes).fastpathDecMapUint8Int32R) + fn(map[uint8]float64(nil), (*decoderJsonBytes).fastpathDecMapUint8Float64R) + fn(map[uint8]bool(nil), (*decoderJsonBytes).fastpathDecMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*decoderJsonBytes).fastpathDecMapUint64IntfR) + fn(map[uint64]string(nil), (*decoderJsonBytes).fastpathDecMapUint64StringR) + fn(map[uint64][]byte(nil), (*decoderJsonBytes).fastpathDecMapUint64BytesR) + fn(map[uint64]uint8(nil), (*decoderJsonBytes).fastpathDecMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*decoderJsonBytes).fastpathDecMapUint64Uint64R) + fn(map[uint64]int(nil), (*decoderJsonBytes).fastpathDecMapUint64IntR) + fn(map[uint64]int32(nil), (*decoderJsonBytes).fastpathDecMapUint64Int32R) + fn(map[uint64]float64(nil), (*decoderJsonBytes).fastpathDecMapUint64Float64R) + fn(map[uint64]bool(nil), (*decoderJsonBytes).fastpathDecMapUint64BoolR) + fn(map[int]interface{}(nil), (*decoderJsonBytes).fastpathDecMapIntIntfR) + fn(map[int]string(nil), (*decoderJsonBytes).fastpathDecMapIntStringR) + fn(map[int][]byte(nil), (*decoderJsonBytes).fastpathDecMapIntBytesR) + fn(map[int]uint8(nil), (*decoderJsonBytes).fastpathDecMapIntUint8R) + fn(map[int]uint64(nil), (*decoderJsonBytes).fastpathDecMapIntUint64R) + fn(map[int]int(nil), (*decoderJsonBytes).fastpathDecMapIntIntR) + fn(map[int]int32(nil), (*decoderJsonBytes).fastpathDecMapIntInt32R) + fn(map[int]float64(nil), (*decoderJsonBytes).fastpathDecMapIntFloat64R) + fn(map[int]bool(nil), (*decoderJsonBytes).fastpathDecMapIntBoolR) + fn(map[int32]interface{}(nil), (*decoderJsonBytes).fastpathDecMapInt32IntfR) + fn(map[int32]string(nil), (*decoderJsonBytes).fastpathDecMapInt32StringR) + fn(map[int32][]byte(nil), (*decoderJsonBytes).fastpathDecMapInt32BytesR) + fn(map[int32]uint8(nil), (*decoderJsonBytes).fastpathDecMapInt32Uint8R) + fn(map[int32]uint64(nil), (*decoderJsonBytes).fastpathDecMapInt32Uint64R) + fn(map[int32]int(nil), (*decoderJsonBytes).fastpathDecMapInt32IntR) + fn(map[int32]int32(nil), (*decoderJsonBytes).fastpathDecMapInt32Int32R) + fn(map[int32]float64(nil), (*decoderJsonBytes).fastpathDecMapInt32Float64R) + fn(map[int32]bool(nil), (*decoderJsonBytes).fastpathDecMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperEncDriverJsonBytes) fastpathEncodeTypeSwitch(iv interface{}, e *encoderJsonBytes) bool { + var ft fastpathETJsonBytes + switch v := iv.(type) { + case []interface{}: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntfV(v, e) + } + case []string: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceStringV(v, e) + } + case [][]byte: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBytesV(v, e) + } + case []float32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat32V(v, e) + } + case []float64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat64V(v, e) + } + case []uint8: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint8V(v, e) + } + case []uint64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint64V(v, e) + } + case []int: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntV(v, e) + } + case []int32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt32V(v, e) + } + case []int64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt64V(v, e) + } + case []bool: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBoolV(v, e) + } + case map[string]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntfV(v, e) + } + case map[string]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringStringV(v, e) + } + case map[string][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBytesV(v, e) + } + case map[string]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint8V(v, e) + } + case map[string]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint64V(v, e) + } + case map[string]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntV(v, e) + } + case map[string]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringInt32V(v, e) + } + case map[string]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringFloat64V(v, e) + } + case map[string]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBoolV(v, e) + } + case map[uint8]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntfV(v, e) + } + case map[uint8]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8StringV(v, e) + } + case map[uint8][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BytesV(v, e) + } + case map[uint8]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint8V(v, e) + } + case map[uint8]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint64V(v, e) + } + case map[uint8]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntV(v, e) + } + case map[uint8]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Int32V(v, e) + } + case map[uint8]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Float64V(v, e) + } + case map[uint8]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BoolV(v, e) + } + case map[uint64]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntfV(v, e) + } + case map[uint64]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64StringV(v, e) + } + case map[uint64][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BytesV(v, e) + } + case map[uint64]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint8V(v, e) + } + case map[uint64]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint64V(v, e) + } + case map[uint64]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntV(v, e) + } + case map[uint64]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Int32V(v, e) + } + case map[uint64]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Float64V(v, e) + } + case map[uint64]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BoolV(v, e) + } + case map[int]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntfV(v, e) + } + case map[int]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntStringV(v, e) + } + case map[int][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBytesV(v, e) + } + case map[int]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint8V(v, e) + } + case map[int]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint64V(v, e) + } + case map[int]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntV(v, e) + } + case map[int]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntInt32V(v, e) + } + case map[int]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntFloat64V(v, e) + } + case map[int]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBoolV(v, e) + } + case map[int32]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntfV(v, e) + } + case map[int32]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32StringV(v, e) + } + case map[int32][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BytesV(v, e) + } + case map[int32]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint8V(v, e) + } + case map[int32]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint64V(v, e) + } + case map[int32]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntV(v, e) + } + case map[int32]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Int32V(v, e) + } + case map[int32]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Float64V(v, e) + } + case map[int32]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BoolV(v, e) + } + default: + _ = v + return false + } + return true +} + +func (e *encoderJsonBytes) fastpathEncSliceIntfR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonBytes + var v []interface{} + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]interface{}) + } + if f.ti.mbs { + ft.EncAsMapSliceIntfV(v, e) + return + } + ft.EncSliceIntfV(v, e) +} +func (fastpathETJsonBytes) EncSliceIntfV(v []interface{}, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonBytes) EncAsMapSliceIntfV(v []interface{}, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonBytes) fastpathEncSliceStringR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonBytes + var v []string + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]string) + } + if f.ti.mbs { + ft.EncAsMapSliceStringV(v, e) + return + } + ft.EncSliceStringV(v, e) +} +func (fastpathETJsonBytes) EncSliceStringV(v []string, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonBytes) EncAsMapSliceStringV(v []string, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonBytes) fastpathEncSliceBytesR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonBytes + var v [][]byte + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([][]byte) + } + if f.ti.mbs { + ft.EncAsMapSliceBytesV(v, e) + return + } + ft.EncSliceBytesV(v, e) +} +func (fastpathETJsonBytes) EncSliceBytesV(v [][]byte, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonBytes) EncAsMapSliceBytesV(v [][]byte, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonBytes) fastpathEncSliceFloat32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonBytes + var v []float32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float32) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat32V(v, e) + return + } + ft.EncSliceFloat32V(v, e) +} +func (fastpathETJsonBytes) EncSliceFloat32V(v []float32, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonBytes) EncAsMapSliceFloat32V(v []float32, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonBytes) fastpathEncSliceFloat64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonBytes + var v []float64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float64) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat64V(v, e) + return + } + ft.EncSliceFloat64V(v, e) +} +func (fastpathETJsonBytes) EncSliceFloat64V(v []float64, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonBytes) EncAsMapSliceFloat64V(v []float64, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonBytes) fastpathEncSliceUint8R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonBytes + var v []uint8 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint8) + } + if f.ti.mbs { + ft.EncAsMapSliceUint8V(v, e) + return + } + ft.EncSliceUint8V(v, e) +} +func (fastpathETJsonBytes) EncSliceUint8V(v []uint8, e *encoderJsonBytes) { + e.e.EncodeStringBytesRaw(v) +} +func (fastpathETJsonBytes) EncAsMapSliceUint8V(v []uint8, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(uint64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonBytes) fastpathEncSliceUint64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonBytes + var v []uint64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint64) + } + if f.ti.mbs { + ft.EncAsMapSliceUint64V(v, e) + return + } + ft.EncSliceUint64V(v, e) +} +func (fastpathETJsonBytes) EncSliceUint64V(v []uint64, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonBytes) EncAsMapSliceUint64V(v []uint64, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonBytes) fastpathEncSliceIntR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonBytes + var v []int + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int) + } + if f.ti.mbs { + ft.EncAsMapSliceIntV(v, e) + return + } + ft.EncSliceIntV(v, e) +} +func (fastpathETJsonBytes) EncSliceIntV(v []int, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonBytes) EncAsMapSliceIntV(v []int, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonBytes) fastpathEncSliceInt32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonBytes + var v []int32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int32) + } + if f.ti.mbs { + ft.EncAsMapSliceInt32V(v, e) + return + } + ft.EncSliceInt32V(v, e) +} +func (fastpathETJsonBytes) EncSliceInt32V(v []int32, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonBytes) EncAsMapSliceInt32V(v []int32, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonBytes) fastpathEncSliceInt64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonBytes + var v []int64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int64) + } + if f.ti.mbs { + ft.EncAsMapSliceInt64V(v, e) + return + } + ft.EncSliceInt64V(v, e) +} +func (fastpathETJsonBytes) EncSliceInt64V(v []int64, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonBytes) EncAsMapSliceInt64V(v []int64, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonBytes) fastpathEncSliceBoolR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonBytes + var v []bool + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]bool) + } + if f.ti.mbs { + ft.EncAsMapSliceBoolV(v, e) + return + } + ft.EncSliceBoolV(v, e) +} +func (fastpathETJsonBytes) EncSliceBoolV(v []bool, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonBytes) EncAsMapSliceBoolV(v []bool, e *encoderJsonBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonBytes) fastpathEncMapStringIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapStringIntfV(rv2i(rv).(map[string]interface{}), e) +} +func (fastpathETJsonBytes) EncMapStringIntfV(v map[string]interface{}, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapStringStringR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapStringStringV(rv2i(rv).(map[string]string), e) +} +func (fastpathETJsonBytes) EncMapStringStringV(v map[string]string, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapStringBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapStringBytesV(rv2i(rv).(map[string][]byte), e) +} +func (fastpathETJsonBytes) EncMapStringBytesV(v map[string][]byte, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapStringUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapStringUint8V(rv2i(rv).(map[string]uint8), e) +} +func (fastpathETJsonBytes) EncMapStringUint8V(v map[string]uint8, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapStringUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapStringUint64V(rv2i(rv).(map[string]uint64), e) +} +func (fastpathETJsonBytes) EncMapStringUint64V(v map[string]uint64, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapStringIntR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapStringIntV(rv2i(rv).(map[string]int), e) +} +func (fastpathETJsonBytes) EncMapStringIntV(v map[string]int, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapStringInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapStringInt32V(rv2i(rv).(map[string]int32), e) +} +func (fastpathETJsonBytes) EncMapStringInt32V(v map[string]int32, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapStringFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapStringFloat64V(rv2i(rv).(map[string]float64), e) +} +func (fastpathETJsonBytes) EncMapStringFloat64V(v map[string]float64, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapStringBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapStringBoolV(rv2i(rv).(map[string]bool), e) +} +func (fastpathETJsonBytes) EncMapStringBoolV(v map[string]bool, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint8IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), e) +} +func (fastpathETJsonBytes) EncMapUint8IntfV(v map[uint8]interface{}, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint8StringR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint8StringV(rv2i(rv).(map[uint8]string), e) +} +func (fastpathETJsonBytes) EncMapUint8StringV(v map[uint8]string, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint8BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint8BytesV(rv2i(rv).(map[uint8][]byte), e) +} +func (fastpathETJsonBytes) EncMapUint8BytesV(v map[uint8][]byte, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint8Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), e) +} +func (fastpathETJsonBytes) EncMapUint8Uint8V(v map[uint8]uint8, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint8Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), e) +} +func (fastpathETJsonBytes) EncMapUint8Uint64V(v map[uint8]uint64, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint8IntR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint8IntV(rv2i(rv).(map[uint8]int), e) +} +func (fastpathETJsonBytes) EncMapUint8IntV(v map[uint8]int, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint8Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint8Int32V(rv2i(rv).(map[uint8]int32), e) +} +func (fastpathETJsonBytes) EncMapUint8Int32V(v map[uint8]int32, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint8Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint8Float64V(rv2i(rv).(map[uint8]float64), e) +} +func (fastpathETJsonBytes) EncMapUint8Float64V(v map[uint8]float64, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint8BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint8BoolV(rv2i(rv).(map[uint8]bool), e) +} +func (fastpathETJsonBytes) EncMapUint8BoolV(v map[uint8]bool, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint64IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), e) +} +func (fastpathETJsonBytes) EncMapUint64IntfV(v map[uint64]interface{}, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint64StringR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint64StringV(rv2i(rv).(map[uint64]string), e) +} +func (fastpathETJsonBytes) EncMapUint64StringV(v map[uint64]string, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint64BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint64BytesV(rv2i(rv).(map[uint64][]byte), e) +} +func (fastpathETJsonBytes) EncMapUint64BytesV(v map[uint64][]byte, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint64Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), e) +} +func (fastpathETJsonBytes) EncMapUint64Uint8V(v map[uint64]uint8, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint64Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), e) +} +func (fastpathETJsonBytes) EncMapUint64Uint64V(v map[uint64]uint64, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint64IntR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint64IntV(rv2i(rv).(map[uint64]int), e) +} +func (fastpathETJsonBytes) EncMapUint64IntV(v map[uint64]int, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint64Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint64Int32V(rv2i(rv).(map[uint64]int32), e) +} +func (fastpathETJsonBytes) EncMapUint64Int32V(v map[uint64]int32, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint64Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint64Float64V(rv2i(rv).(map[uint64]float64), e) +} +func (fastpathETJsonBytes) EncMapUint64Float64V(v map[uint64]float64, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapUint64BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapUint64BoolV(rv2i(rv).(map[uint64]bool), e) +} +func (fastpathETJsonBytes) EncMapUint64BoolV(v map[uint64]bool, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapIntIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapIntIntfV(rv2i(rv).(map[int]interface{}), e) +} +func (fastpathETJsonBytes) EncMapIntIntfV(v map[int]interface{}, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapIntStringR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapIntStringV(rv2i(rv).(map[int]string), e) +} +func (fastpathETJsonBytes) EncMapIntStringV(v map[int]string, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapIntBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapIntBytesV(rv2i(rv).(map[int][]byte), e) +} +func (fastpathETJsonBytes) EncMapIntBytesV(v map[int][]byte, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapIntUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapIntUint8V(rv2i(rv).(map[int]uint8), e) +} +func (fastpathETJsonBytes) EncMapIntUint8V(v map[int]uint8, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapIntUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapIntUint64V(rv2i(rv).(map[int]uint64), e) +} +func (fastpathETJsonBytes) EncMapIntUint64V(v map[int]uint64, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapIntIntR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapIntIntV(rv2i(rv).(map[int]int), e) +} +func (fastpathETJsonBytes) EncMapIntIntV(v map[int]int, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapIntInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapIntInt32V(rv2i(rv).(map[int]int32), e) +} +func (fastpathETJsonBytes) EncMapIntInt32V(v map[int]int32, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapIntFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapIntFloat64V(rv2i(rv).(map[int]float64), e) +} +func (fastpathETJsonBytes) EncMapIntFloat64V(v map[int]float64, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapIntBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapIntBoolV(rv2i(rv).(map[int]bool), e) +} +func (fastpathETJsonBytes) EncMapIntBoolV(v map[int]bool, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapInt32IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapInt32IntfV(rv2i(rv).(map[int32]interface{}), e) +} +func (fastpathETJsonBytes) EncMapInt32IntfV(v map[int32]interface{}, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapInt32StringR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapInt32StringV(rv2i(rv).(map[int32]string), e) +} +func (fastpathETJsonBytes) EncMapInt32StringV(v map[int32]string, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapInt32BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapInt32BytesV(rv2i(rv).(map[int32][]byte), e) +} +func (fastpathETJsonBytes) EncMapInt32BytesV(v map[int32][]byte, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapInt32Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapInt32Uint8V(rv2i(rv).(map[int32]uint8), e) +} +func (fastpathETJsonBytes) EncMapInt32Uint8V(v map[int32]uint8, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapInt32Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapInt32Uint64V(rv2i(rv).(map[int32]uint64), e) +} +func (fastpathETJsonBytes) EncMapInt32Uint64V(v map[int32]uint64, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapInt32IntR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapInt32IntV(rv2i(rv).(map[int32]int), e) +} +func (fastpathETJsonBytes) EncMapInt32IntV(v map[int32]int, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapInt32Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapInt32Int32V(rv2i(rv).(map[int32]int32), e) +} +func (fastpathETJsonBytes) EncMapInt32Int32V(v map[int32]int32, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapInt32Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapInt32Float64V(rv2i(rv).(map[int32]float64), e) +} +func (fastpathETJsonBytes) EncMapInt32Float64V(v map[int32]float64, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonBytes) fastpathEncMapInt32BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonBytes{}.EncMapInt32BoolV(rv2i(rv).(map[int32]bool), e) +} +func (fastpathETJsonBytes) EncMapInt32BoolV(v map[int32]bool, e *encoderJsonBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (helperDecDriverJsonBytes) fastpathDecodeTypeSwitch(iv interface{}, d *decoderJsonBytes) bool { + var ft fastpathDTJsonBytes + var changed bool + var containerLen int + switch v := iv.(type) { + case []interface{}: + ft.DecSliceIntfN(v, d) + case *[]interface{}: + var v2 []interface{} + if v2, changed = ft.DecSliceIntfY(*v, d); changed { + *v = v2 + } + case []string: + ft.DecSliceStringN(v, d) + case *[]string: + var v2 []string + if v2, changed = ft.DecSliceStringY(*v, d); changed { + *v = v2 + } + case [][]byte: + ft.DecSliceBytesN(v, d) + case *[][]byte: + var v2 [][]byte + if v2, changed = ft.DecSliceBytesY(*v, d); changed { + *v = v2 + } + case []float32: + ft.DecSliceFloat32N(v, d) + case *[]float32: + var v2 []float32 + if v2, changed = ft.DecSliceFloat32Y(*v, d); changed { + *v = v2 + } + case []float64: + ft.DecSliceFloat64N(v, d) + case *[]float64: + var v2 []float64 + if v2, changed = ft.DecSliceFloat64Y(*v, d); changed { + *v = v2 + } + case []uint8: + ft.DecSliceUint8N(v, d) + case *[]uint8: + var v2 []uint8 + if v2, changed = ft.DecSliceUint8Y(*v, d); changed { + *v = v2 + } + case []uint64: + ft.DecSliceUint64N(v, d) + case *[]uint64: + var v2 []uint64 + if v2, changed = ft.DecSliceUint64Y(*v, d); changed { + *v = v2 + } + case []int: + ft.DecSliceIntN(v, d) + case *[]int: + var v2 []int + if v2, changed = ft.DecSliceIntY(*v, d); changed { + *v = v2 + } + case []int32: + ft.DecSliceInt32N(v, d) + case *[]int32: + var v2 []int32 + if v2, changed = ft.DecSliceInt32Y(*v, d); changed { + *v = v2 + } + case []int64: + ft.DecSliceInt64N(v, d) + case *[]int64: + var v2 []int64 + if v2, changed = ft.DecSliceInt64Y(*v, d); changed { + *v = v2 + } + case []bool: + ft.DecSliceBoolN(v, d) + case *[]bool: + var v2 []bool + if v2, changed = ft.DecSliceBoolY(*v, d); changed { + *v = v2 + } + case map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*v, containerLen, d) + } + d.mapEnd() + } + default: + _ = v + return false + } + return true +} + +func (d *decoderJsonBytes) fastpathDecSliceIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]interface{}) + if vv, changed := ft.DecSliceIntfY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []interface{} + rvGetSlice4Array(rv, &v) + ft.DecSliceIntfN(v, d) + default: + ft.DecSliceIntfN(rv2i(rv).([]interface{}), d) + } +} +func (fastpathDTJsonBytes) DecSliceIntfY(v []interface{}, d *decoderJsonBytes) (v2 []interface{}, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []interface{}) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]interface{}, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + d.decode(&v[uint(j)]) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]interface{}{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonBytes) DecSliceIntfN(v []interface{}, d *decoderJsonBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + d.decode(&v[uint(j)]) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonBytes) fastpathDecSliceStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]string) + if vv, changed := ft.DecSliceStringY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []string + rvGetSlice4Array(rv, &v) + ft.DecSliceStringN(v, d) + default: + ft.DecSliceStringN(rv2i(rv).([]string), d) + } +} +func (fastpathDTJsonBytes) DecSliceStringY(v []string, d *decoderJsonBytes) (v2 []string, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []string) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]string, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, "")) + } + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]string{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonBytes) DecSliceStringN(v []string, d *decoderJsonBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonBytes) fastpathDecSliceBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[][]byte) + if vv, changed := ft.DecSliceBytesY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v [][]byte + rvGetSlice4Array(rv, &v) + ft.DecSliceBytesN(v, d) + default: + ft.DecSliceBytesN(rv2i(rv).([][]byte), d) + } +} +func (fastpathDTJsonBytes) DecSliceBytesY(v [][]byte, d *decoderJsonBytes) (v2 [][]byte, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst [][]byte) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 24)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([][]byte, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([][]byte{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonBytes) DecSliceBytesN(v [][]byte, d *decoderJsonBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonBytes) fastpathDecSliceFloat32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float32) + if vv, changed := ft.DecSliceFloat32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float32 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat32N(v, d) + default: + ft.DecSliceFloat32N(rv2i(rv).([]float32), d) + } +} +func (fastpathDTJsonBytes) DecSliceFloat32Y(v []float32, d *decoderJsonBytes) (v2 []float32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = float32(d.d.DecodeFloat32()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonBytes) DecSliceFloat32N(v []float32, d *decoderJsonBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = float32(d.d.DecodeFloat32()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonBytes) fastpathDecSliceFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float64) + if vv, changed := ft.DecSliceFloat64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float64 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat64N(v, d) + default: + ft.DecSliceFloat64N(rv2i(rv).([]float64), d) + } +} +func (fastpathDTJsonBytes) DecSliceFloat64Y(v []float64, d *decoderJsonBytes) (v2 []float64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeFloat64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonBytes) DecSliceFloat64N(v []float64, d *decoderJsonBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeFloat64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonBytes) fastpathDecSliceUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint8) + if vv, changed := ft.DecSliceUint8Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint8 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint8N(v, d) + default: + ft.DecSliceUint8N(rv2i(rv).([]uint8), d) + } +} +func (fastpathDTJsonBytes) DecSliceUint8Y(v []uint8, d *decoderJsonBytes) (v2 []uint8, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + if ctyp != valueTypeMap { + var dbi dBytesIntoState + v2, dbi = d.decodeBytesInto(v[:len(v):len(v)], false) + return v2, dbi != dBytesIntoParamOut + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint8) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint8, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint8{}) + } + d.mapEnd() + return v, changed +} +func (fastpathDTJsonBytes) DecSliceUint8N(v []uint8, d *decoderJsonBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + if ctyp != valueTypeMap { + d.decodeBytesInto(v[:len(v):len(v)], true) + return + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + d.mapEnd() +} + +func (d *decoderJsonBytes) fastpathDecSliceUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint64) + if vv, changed := ft.DecSliceUint64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint64 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint64N(v, d) + default: + ft.DecSliceUint64N(rv2i(rv).([]uint64), d) + } +} +func (fastpathDTJsonBytes) DecSliceUint64Y(v []uint64, d *decoderJsonBytes) (v2 []uint64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeUint64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonBytes) DecSliceUint64N(v []uint64, d *decoderJsonBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeUint64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonBytes) fastpathDecSliceIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int) + if vv, changed := ft.DecSliceIntY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int + rvGetSlice4Array(rv, &v) + ft.DecSliceIntN(v, d) + default: + ft.DecSliceIntN(rv2i(rv).([]int), d) + } +} +func (fastpathDTJsonBytes) DecSliceIntY(v []int, d *decoderJsonBytes) (v2 []int, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonBytes) DecSliceIntN(v []int, d *decoderJsonBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonBytes) fastpathDecSliceInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int32) + if vv, changed := ft.DecSliceInt32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int32 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt32N(v, d) + default: + ft.DecSliceInt32N(rv2i(rv).([]int32), d) + } +} +func (fastpathDTJsonBytes) DecSliceInt32Y(v []int32, d *decoderJsonBytes) (v2 []int32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonBytes) DecSliceInt32N(v []int32, d *decoderJsonBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonBytes) fastpathDecSliceInt64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int64) + if vv, changed := ft.DecSliceInt64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int64 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt64N(v, d) + default: + ft.DecSliceInt64N(rv2i(rv).([]int64), d) + } +} +func (fastpathDTJsonBytes) DecSliceInt64Y(v []int64, d *decoderJsonBytes) (v2 []int64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeInt64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonBytes) DecSliceInt64N(v []int64, d *decoderJsonBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeInt64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonBytes) fastpathDecSliceBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]bool) + if vv, changed := ft.DecSliceBoolY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []bool + rvGetSlice4Array(rv, &v) + ft.DecSliceBoolN(v, d) + default: + ft.DecSliceBoolN(rv2i(rv).([]bool), d) + } +} +func (fastpathDTJsonBytes) DecSliceBoolY(v []bool, d *decoderJsonBytes) (v2 []bool, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []bool) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]bool, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, false)) + } + v[uint(j)] = d.d.DecodeBool() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]bool{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonBytes) DecSliceBoolN(v []bool, d *decoderJsonBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeBool() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} +func (d *decoderJsonBytes) fastpathDecMapStringIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]interface{}) + if *vp == nil { + *vp = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntfL(rv2i(rv).(map[string]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapStringIntfL(v map[string]interface{}, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderJsonBytes) fastpathDecMapStringStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]string) + if *vp == nil { + *vp = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringStringL(rv2i(rv).(map[string]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapStringStringL(v map[string]string, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderJsonBytes) fastpathDecMapStringBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string][]byte) + if *vp == nil { + *vp = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBytesL(rv2i(rv).(map[string][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapStringBytesL(v map[string][]byte, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderJsonBytes) fastpathDecMapStringUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint8) + if *vp == nil { + *vp = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint8L(rv2i(rv).(map[string]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapStringUint8L(v map[string]uint8, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderJsonBytes) fastpathDecMapStringUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint64) + if *vp == nil { + *vp = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint64L(rv2i(rv).(map[string]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapStringUint64L(v map[string]uint64, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderJsonBytes) fastpathDecMapStringIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int) + if *vp == nil { + *vp = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntL(rv2i(rv).(map[string]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapStringIntL(v map[string]int, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderJsonBytes) fastpathDecMapStringInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int32) + if *vp == nil { + *vp = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringInt32L(rv2i(rv).(map[string]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapStringInt32L(v map[string]int32, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderJsonBytes) fastpathDecMapStringFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]float64) + if *vp == nil { + *vp = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringFloat64L(rv2i(rv).(map[string]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapStringFloat64L(v map[string]float64, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderJsonBytes) fastpathDecMapStringBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]bool) + if *vp == nil { + *vp = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBoolL(rv2i(rv).(map[string]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapStringBoolL(v map[string]bool, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderJsonBytes) fastpathDecMapUint8IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]interface{}) + if *vp == nil { + *vp = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntfL(rv2i(rv).(map[uint8]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint8IntfL(v map[uint8]interface{}, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderJsonBytes) fastpathDecMapUint8StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]string) + if *vp == nil { + *vp = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8StringL(rv2i(rv).(map[uint8]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint8StringL(v map[uint8]string, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderJsonBytes) fastpathDecMapUint8BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8][]byte) + if *vp == nil { + *vp = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BytesL(rv2i(rv).(map[uint8][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint8BytesL(v map[uint8][]byte, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderJsonBytes) fastpathDecMapUint8Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint8) + if *vp == nil { + *vp = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint8L(rv2i(rv).(map[uint8]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint8Uint8L(v map[uint8]uint8, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderJsonBytes) fastpathDecMapUint8Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint64) + if *vp == nil { + *vp = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint64L(rv2i(rv).(map[uint8]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint8Uint64L(v map[uint8]uint64, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderJsonBytes) fastpathDecMapUint8IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int) + if *vp == nil { + *vp = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntL(rv2i(rv).(map[uint8]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint8IntL(v map[uint8]int, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderJsonBytes) fastpathDecMapUint8Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int32) + if *vp == nil { + *vp = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Int32L(rv2i(rv).(map[uint8]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint8Int32L(v map[uint8]int32, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderJsonBytes) fastpathDecMapUint8Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]float64) + if *vp == nil { + *vp = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Float64L(rv2i(rv).(map[uint8]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint8Float64L(v map[uint8]float64, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderJsonBytes) fastpathDecMapUint8BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]bool) + if *vp == nil { + *vp = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BoolL(rv2i(rv).(map[uint8]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint8BoolL(v map[uint8]bool, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderJsonBytes) fastpathDecMapUint64IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]interface{}) + if *vp == nil { + *vp = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntfL(rv2i(rv).(map[uint64]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint64IntfL(v map[uint64]interface{}, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderJsonBytes) fastpathDecMapUint64StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]string) + if *vp == nil { + *vp = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64StringL(rv2i(rv).(map[uint64]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint64StringL(v map[uint64]string, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderJsonBytes) fastpathDecMapUint64BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64][]byte) + if *vp == nil { + *vp = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BytesL(rv2i(rv).(map[uint64][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint64BytesL(v map[uint64][]byte, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderJsonBytes) fastpathDecMapUint64Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint8) + if *vp == nil { + *vp = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint8L(rv2i(rv).(map[uint64]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint64Uint8L(v map[uint64]uint8, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderJsonBytes) fastpathDecMapUint64Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint64) + if *vp == nil { + *vp = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint64L(rv2i(rv).(map[uint64]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint64Uint64L(v map[uint64]uint64, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderJsonBytes) fastpathDecMapUint64IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int) + if *vp == nil { + *vp = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntL(rv2i(rv).(map[uint64]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint64IntL(v map[uint64]int, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderJsonBytes) fastpathDecMapUint64Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int32) + if *vp == nil { + *vp = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Int32L(rv2i(rv).(map[uint64]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint64Int32L(v map[uint64]int32, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderJsonBytes) fastpathDecMapUint64Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]float64) + if *vp == nil { + *vp = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Float64L(rv2i(rv).(map[uint64]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint64Float64L(v map[uint64]float64, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderJsonBytes) fastpathDecMapUint64BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]bool) + if *vp == nil { + *vp = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BoolL(rv2i(rv).(map[uint64]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapUint64BoolL(v map[uint64]bool, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderJsonBytes) fastpathDecMapIntIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]interface{}) + if *vp == nil { + *vp = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntfL(rv2i(rv).(map[int]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapIntIntfL(v map[int]interface{}, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderJsonBytes) fastpathDecMapIntStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]string) + if *vp == nil { + *vp = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntStringL(rv2i(rv).(map[int]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapIntStringL(v map[int]string, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderJsonBytes) fastpathDecMapIntBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int][]byte) + if *vp == nil { + *vp = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBytesL(rv2i(rv).(map[int][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapIntBytesL(v map[int][]byte, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderJsonBytes) fastpathDecMapIntUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint8) + if *vp == nil { + *vp = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint8L(rv2i(rv).(map[int]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapIntUint8L(v map[int]uint8, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderJsonBytes) fastpathDecMapIntUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint64) + if *vp == nil { + *vp = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint64L(rv2i(rv).(map[int]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapIntUint64L(v map[int]uint64, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderJsonBytes) fastpathDecMapIntIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int) + if *vp == nil { + *vp = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntL(rv2i(rv).(map[int]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapIntIntL(v map[int]int, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderJsonBytes) fastpathDecMapIntInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int32) + if *vp == nil { + *vp = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntInt32L(rv2i(rv).(map[int]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapIntInt32L(v map[int]int32, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderJsonBytes) fastpathDecMapIntFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]float64) + if *vp == nil { + *vp = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntFloat64L(rv2i(rv).(map[int]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapIntFloat64L(v map[int]float64, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderJsonBytes) fastpathDecMapIntBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]bool) + if *vp == nil { + *vp = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBoolL(rv2i(rv).(map[int]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapIntBoolL(v map[int]bool, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderJsonBytes) fastpathDecMapInt32IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]interface{}) + if *vp == nil { + *vp = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntfL(rv2i(rv).(map[int32]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapInt32IntfL(v map[int32]interface{}, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderJsonBytes) fastpathDecMapInt32StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]string) + if *vp == nil { + *vp = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32StringL(rv2i(rv).(map[int32]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapInt32StringL(v map[int32]string, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderJsonBytes) fastpathDecMapInt32BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32][]byte) + if *vp == nil { + *vp = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BytesL(rv2i(rv).(map[int32][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapInt32BytesL(v map[int32][]byte, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderJsonBytes) fastpathDecMapInt32Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint8) + if *vp == nil { + *vp = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint8L(rv2i(rv).(map[int32]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapInt32Uint8L(v map[int32]uint8, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderJsonBytes) fastpathDecMapInt32Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint64) + if *vp == nil { + *vp = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint64L(rv2i(rv).(map[int32]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapInt32Uint64L(v map[int32]uint64, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderJsonBytes) fastpathDecMapInt32IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int) + if *vp == nil { + *vp = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntL(rv2i(rv).(map[int32]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapInt32IntL(v map[int32]int, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderJsonBytes) fastpathDecMapInt32Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int32) + if *vp == nil { + *vp = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Int32L(rv2i(rv).(map[int32]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapInt32Int32L(v map[int32]int32, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderJsonBytes) fastpathDecMapInt32Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]float64) + if *vp == nil { + *vp = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Float64L(rv2i(rv).(map[int32]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapInt32Float64L(v map[int32]float64, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderJsonBytes) fastpathDecMapInt32BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]bool) + if *vp == nil { + *vp = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BoolL(rv2i(rv).(map[int32]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonBytes) DecMapInt32BoolL(v map[int32]bool, containerLen int, d *decoderJsonBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} + +type fastpathEJsonIO struct { + rtid uintptr + rt reflect.Type + encfn func(*encoderJsonIO, *encFnInfo, reflect.Value) +} +type fastpathDJsonIO struct { + rtid uintptr + rt reflect.Type + decfn func(*decoderJsonIO, *decFnInfo, reflect.Value) +} +type fastpathEsJsonIO [56]fastpathEJsonIO +type fastpathDsJsonIO [56]fastpathDJsonIO +type fastpathETJsonIO struct{} +type fastpathDTJsonIO struct{} + +func (helperEncDriverJsonIO) fastpathEList() *fastpathEsJsonIO { + var i uint = 0 + var s fastpathEsJsonIO + fn := func(v interface{}, fe func(*encoderJsonIO, *encFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathEJsonIO{rt2id(xrt), xrt, fe} + i++ + } + + fn([]interface{}(nil), (*encoderJsonIO).fastpathEncSliceIntfR) + fn([]string(nil), (*encoderJsonIO).fastpathEncSliceStringR) + fn([][]byte(nil), (*encoderJsonIO).fastpathEncSliceBytesR) + fn([]float32(nil), (*encoderJsonIO).fastpathEncSliceFloat32R) + fn([]float64(nil), (*encoderJsonIO).fastpathEncSliceFloat64R) + fn([]uint8(nil), (*encoderJsonIO).fastpathEncSliceUint8R) + fn([]uint64(nil), (*encoderJsonIO).fastpathEncSliceUint64R) + fn([]int(nil), (*encoderJsonIO).fastpathEncSliceIntR) + fn([]int32(nil), (*encoderJsonIO).fastpathEncSliceInt32R) + fn([]int64(nil), (*encoderJsonIO).fastpathEncSliceInt64R) + fn([]bool(nil), (*encoderJsonIO).fastpathEncSliceBoolR) + + fn(map[string]interface{}(nil), (*encoderJsonIO).fastpathEncMapStringIntfR) + fn(map[string]string(nil), (*encoderJsonIO).fastpathEncMapStringStringR) + fn(map[string][]byte(nil), (*encoderJsonIO).fastpathEncMapStringBytesR) + fn(map[string]uint8(nil), (*encoderJsonIO).fastpathEncMapStringUint8R) + fn(map[string]uint64(nil), (*encoderJsonIO).fastpathEncMapStringUint64R) + fn(map[string]int(nil), (*encoderJsonIO).fastpathEncMapStringIntR) + fn(map[string]int32(nil), (*encoderJsonIO).fastpathEncMapStringInt32R) + fn(map[string]float64(nil), (*encoderJsonIO).fastpathEncMapStringFloat64R) + fn(map[string]bool(nil), (*encoderJsonIO).fastpathEncMapStringBoolR) + fn(map[uint8]interface{}(nil), (*encoderJsonIO).fastpathEncMapUint8IntfR) + fn(map[uint8]string(nil), (*encoderJsonIO).fastpathEncMapUint8StringR) + fn(map[uint8][]byte(nil), (*encoderJsonIO).fastpathEncMapUint8BytesR) + fn(map[uint8]uint8(nil), (*encoderJsonIO).fastpathEncMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*encoderJsonIO).fastpathEncMapUint8Uint64R) + fn(map[uint8]int(nil), (*encoderJsonIO).fastpathEncMapUint8IntR) + fn(map[uint8]int32(nil), (*encoderJsonIO).fastpathEncMapUint8Int32R) + fn(map[uint8]float64(nil), (*encoderJsonIO).fastpathEncMapUint8Float64R) + fn(map[uint8]bool(nil), (*encoderJsonIO).fastpathEncMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*encoderJsonIO).fastpathEncMapUint64IntfR) + fn(map[uint64]string(nil), (*encoderJsonIO).fastpathEncMapUint64StringR) + fn(map[uint64][]byte(nil), (*encoderJsonIO).fastpathEncMapUint64BytesR) + fn(map[uint64]uint8(nil), (*encoderJsonIO).fastpathEncMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*encoderJsonIO).fastpathEncMapUint64Uint64R) + fn(map[uint64]int(nil), (*encoderJsonIO).fastpathEncMapUint64IntR) + fn(map[uint64]int32(nil), (*encoderJsonIO).fastpathEncMapUint64Int32R) + fn(map[uint64]float64(nil), (*encoderJsonIO).fastpathEncMapUint64Float64R) + fn(map[uint64]bool(nil), (*encoderJsonIO).fastpathEncMapUint64BoolR) + fn(map[int]interface{}(nil), (*encoderJsonIO).fastpathEncMapIntIntfR) + fn(map[int]string(nil), (*encoderJsonIO).fastpathEncMapIntStringR) + fn(map[int][]byte(nil), (*encoderJsonIO).fastpathEncMapIntBytesR) + fn(map[int]uint8(nil), (*encoderJsonIO).fastpathEncMapIntUint8R) + fn(map[int]uint64(nil), (*encoderJsonIO).fastpathEncMapIntUint64R) + fn(map[int]int(nil), (*encoderJsonIO).fastpathEncMapIntIntR) + fn(map[int]int32(nil), (*encoderJsonIO).fastpathEncMapIntInt32R) + fn(map[int]float64(nil), (*encoderJsonIO).fastpathEncMapIntFloat64R) + fn(map[int]bool(nil), (*encoderJsonIO).fastpathEncMapIntBoolR) + fn(map[int32]interface{}(nil), (*encoderJsonIO).fastpathEncMapInt32IntfR) + fn(map[int32]string(nil), (*encoderJsonIO).fastpathEncMapInt32StringR) + fn(map[int32][]byte(nil), (*encoderJsonIO).fastpathEncMapInt32BytesR) + fn(map[int32]uint8(nil), (*encoderJsonIO).fastpathEncMapInt32Uint8R) + fn(map[int32]uint64(nil), (*encoderJsonIO).fastpathEncMapInt32Uint64R) + fn(map[int32]int(nil), (*encoderJsonIO).fastpathEncMapInt32IntR) + fn(map[int32]int32(nil), (*encoderJsonIO).fastpathEncMapInt32Int32R) + fn(map[int32]float64(nil), (*encoderJsonIO).fastpathEncMapInt32Float64R) + fn(map[int32]bool(nil), (*encoderJsonIO).fastpathEncMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperDecDriverJsonIO) fastpathDList() *fastpathDsJsonIO { + var i uint = 0 + var s fastpathDsJsonIO + fn := func(v interface{}, fd func(*decoderJsonIO, *decFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathDJsonIO{rt2id(xrt), xrt, fd} + i++ + } + + fn([]interface{}(nil), (*decoderJsonIO).fastpathDecSliceIntfR) + fn([]string(nil), (*decoderJsonIO).fastpathDecSliceStringR) + fn([][]byte(nil), (*decoderJsonIO).fastpathDecSliceBytesR) + fn([]float32(nil), (*decoderJsonIO).fastpathDecSliceFloat32R) + fn([]float64(nil), (*decoderJsonIO).fastpathDecSliceFloat64R) + fn([]uint8(nil), (*decoderJsonIO).fastpathDecSliceUint8R) + fn([]uint64(nil), (*decoderJsonIO).fastpathDecSliceUint64R) + fn([]int(nil), (*decoderJsonIO).fastpathDecSliceIntR) + fn([]int32(nil), (*decoderJsonIO).fastpathDecSliceInt32R) + fn([]int64(nil), (*decoderJsonIO).fastpathDecSliceInt64R) + fn([]bool(nil), (*decoderJsonIO).fastpathDecSliceBoolR) + + fn(map[string]interface{}(nil), (*decoderJsonIO).fastpathDecMapStringIntfR) + fn(map[string]string(nil), (*decoderJsonIO).fastpathDecMapStringStringR) + fn(map[string][]byte(nil), (*decoderJsonIO).fastpathDecMapStringBytesR) + fn(map[string]uint8(nil), (*decoderJsonIO).fastpathDecMapStringUint8R) + fn(map[string]uint64(nil), (*decoderJsonIO).fastpathDecMapStringUint64R) + fn(map[string]int(nil), (*decoderJsonIO).fastpathDecMapStringIntR) + fn(map[string]int32(nil), (*decoderJsonIO).fastpathDecMapStringInt32R) + fn(map[string]float64(nil), (*decoderJsonIO).fastpathDecMapStringFloat64R) + fn(map[string]bool(nil), (*decoderJsonIO).fastpathDecMapStringBoolR) + fn(map[uint8]interface{}(nil), (*decoderJsonIO).fastpathDecMapUint8IntfR) + fn(map[uint8]string(nil), (*decoderJsonIO).fastpathDecMapUint8StringR) + fn(map[uint8][]byte(nil), (*decoderJsonIO).fastpathDecMapUint8BytesR) + fn(map[uint8]uint8(nil), (*decoderJsonIO).fastpathDecMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*decoderJsonIO).fastpathDecMapUint8Uint64R) + fn(map[uint8]int(nil), (*decoderJsonIO).fastpathDecMapUint8IntR) + fn(map[uint8]int32(nil), (*decoderJsonIO).fastpathDecMapUint8Int32R) + fn(map[uint8]float64(nil), (*decoderJsonIO).fastpathDecMapUint8Float64R) + fn(map[uint8]bool(nil), (*decoderJsonIO).fastpathDecMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*decoderJsonIO).fastpathDecMapUint64IntfR) + fn(map[uint64]string(nil), (*decoderJsonIO).fastpathDecMapUint64StringR) + fn(map[uint64][]byte(nil), (*decoderJsonIO).fastpathDecMapUint64BytesR) + fn(map[uint64]uint8(nil), (*decoderJsonIO).fastpathDecMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*decoderJsonIO).fastpathDecMapUint64Uint64R) + fn(map[uint64]int(nil), (*decoderJsonIO).fastpathDecMapUint64IntR) + fn(map[uint64]int32(nil), (*decoderJsonIO).fastpathDecMapUint64Int32R) + fn(map[uint64]float64(nil), (*decoderJsonIO).fastpathDecMapUint64Float64R) + fn(map[uint64]bool(nil), (*decoderJsonIO).fastpathDecMapUint64BoolR) + fn(map[int]interface{}(nil), (*decoderJsonIO).fastpathDecMapIntIntfR) + fn(map[int]string(nil), (*decoderJsonIO).fastpathDecMapIntStringR) + fn(map[int][]byte(nil), (*decoderJsonIO).fastpathDecMapIntBytesR) + fn(map[int]uint8(nil), (*decoderJsonIO).fastpathDecMapIntUint8R) + fn(map[int]uint64(nil), (*decoderJsonIO).fastpathDecMapIntUint64R) + fn(map[int]int(nil), (*decoderJsonIO).fastpathDecMapIntIntR) + fn(map[int]int32(nil), (*decoderJsonIO).fastpathDecMapIntInt32R) + fn(map[int]float64(nil), (*decoderJsonIO).fastpathDecMapIntFloat64R) + fn(map[int]bool(nil), (*decoderJsonIO).fastpathDecMapIntBoolR) + fn(map[int32]interface{}(nil), (*decoderJsonIO).fastpathDecMapInt32IntfR) + fn(map[int32]string(nil), (*decoderJsonIO).fastpathDecMapInt32StringR) + fn(map[int32][]byte(nil), (*decoderJsonIO).fastpathDecMapInt32BytesR) + fn(map[int32]uint8(nil), (*decoderJsonIO).fastpathDecMapInt32Uint8R) + fn(map[int32]uint64(nil), (*decoderJsonIO).fastpathDecMapInt32Uint64R) + fn(map[int32]int(nil), (*decoderJsonIO).fastpathDecMapInt32IntR) + fn(map[int32]int32(nil), (*decoderJsonIO).fastpathDecMapInt32Int32R) + fn(map[int32]float64(nil), (*decoderJsonIO).fastpathDecMapInt32Float64R) + fn(map[int32]bool(nil), (*decoderJsonIO).fastpathDecMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperEncDriverJsonIO) fastpathEncodeTypeSwitch(iv interface{}, e *encoderJsonIO) bool { + var ft fastpathETJsonIO + switch v := iv.(type) { + case []interface{}: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntfV(v, e) + } + case []string: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceStringV(v, e) + } + case [][]byte: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBytesV(v, e) + } + case []float32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat32V(v, e) + } + case []float64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat64V(v, e) + } + case []uint8: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint8V(v, e) + } + case []uint64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint64V(v, e) + } + case []int: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntV(v, e) + } + case []int32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt32V(v, e) + } + case []int64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt64V(v, e) + } + case []bool: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBoolV(v, e) + } + case map[string]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntfV(v, e) + } + case map[string]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringStringV(v, e) + } + case map[string][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBytesV(v, e) + } + case map[string]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint8V(v, e) + } + case map[string]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint64V(v, e) + } + case map[string]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntV(v, e) + } + case map[string]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringInt32V(v, e) + } + case map[string]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringFloat64V(v, e) + } + case map[string]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBoolV(v, e) + } + case map[uint8]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntfV(v, e) + } + case map[uint8]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8StringV(v, e) + } + case map[uint8][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BytesV(v, e) + } + case map[uint8]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint8V(v, e) + } + case map[uint8]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint64V(v, e) + } + case map[uint8]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntV(v, e) + } + case map[uint8]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Int32V(v, e) + } + case map[uint8]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Float64V(v, e) + } + case map[uint8]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BoolV(v, e) + } + case map[uint64]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntfV(v, e) + } + case map[uint64]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64StringV(v, e) + } + case map[uint64][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BytesV(v, e) + } + case map[uint64]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint8V(v, e) + } + case map[uint64]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint64V(v, e) + } + case map[uint64]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntV(v, e) + } + case map[uint64]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Int32V(v, e) + } + case map[uint64]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Float64V(v, e) + } + case map[uint64]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BoolV(v, e) + } + case map[int]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntfV(v, e) + } + case map[int]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntStringV(v, e) + } + case map[int][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBytesV(v, e) + } + case map[int]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint8V(v, e) + } + case map[int]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint64V(v, e) + } + case map[int]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntV(v, e) + } + case map[int]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntInt32V(v, e) + } + case map[int]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntFloat64V(v, e) + } + case map[int]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBoolV(v, e) + } + case map[int32]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntfV(v, e) + } + case map[int32]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32StringV(v, e) + } + case map[int32][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BytesV(v, e) + } + case map[int32]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint8V(v, e) + } + case map[int32]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint64V(v, e) + } + case map[int32]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntV(v, e) + } + case map[int32]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Int32V(v, e) + } + case map[int32]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Float64V(v, e) + } + case map[int32]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BoolV(v, e) + } + default: + _ = v + return false + } + return true +} + +func (e *encoderJsonIO) fastpathEncSliceIntfR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonIO + var v []interface{} + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]interface{}) + } + if f.ti.mbs { + ft.EncAsMapSliceIntfV(v, e) + return + } + ft.EncSliceIntfV(v, e) +} +func (fastpathETJsonIO) EncSliceIntfV(v []interface{}, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonIO) EncAsMapSliceIntfV(v []interface{}, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonIO) fastpathEncSliceStringR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonIO + var v []string + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]string) + } + if f.ti.mbs { + ft.EncAsMapSliceStringV(v, e) + return + } + ft.EncSliceStringV(v, e) +} +func (fastpathETJsonIO) EncSliceStringV(v []string, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonIO) EncAsMapSliceStringV(v []string, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonIO) fastpathEncSliceBytesR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonIO + var v [][]byte + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([][]byte) + } + if f.ti.mbs { + ft.EncAsMapSliceBytesV(v, e) + return + } + ft.EncSliceBytesV(v, e) +} +func (fastpathETJsonIO) EncSliceBytesV(v [][]byte, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonIO) EncAsMapSliceBytesV(v [][]byte, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonIO) fastpathEncSliceFloat32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonIO + var v []float32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float32) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat32V(v, e) + return + } + ft.EncSliceFloat32V(v, e) +} +func (fastpathETJsonIO) EncSliceFloat32V(v []float32, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonIO) EncAsMapSliceFloat32V(v []float32, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonIO) fastpathEncSliceFloat64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonIO + var v []float64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float64) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat64V(v, e) + return + } + ft.EncSliceFloat64V(v, e) +} +func (fastpathETJsonIO) EncSliceFloat64V(v []float64, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonIO) EncAsMapSliceFloat64V(v []float64, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonIO) fastpathEncSliceUint8R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonIO + var v []uint8 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint8) + } + if f.ti.mbs { + ft.EncAsMapSliceUint8V(v, e) + return + } + ft.EncSliceUint8V(v, e) +} +func (fastpathETJsonIO) EncSliceUint8V(v []uint8, e *encoderJsonIO) { + e.e.EncodeStringBytesRaw(v) +} +func (fastpathETJsonIO) EncAsMapSliceUint8V(v []uint8, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(uint64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonIO) fastpathEncSliceUint64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonIO + var v []uint64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint64) + } + if f.ti.mbs { + ft.EncAsMapSliceUint64V(v, e) + return + } + ft.EncSliceUint64V(v, e) +} +func (fastpathETJsonIO) EncSliceUint64V(v []uint64, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonIO) EncAsMapSliceUint64V(v []uint64, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonIO) fastpathEncSliceIntR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonIO + var v []int + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int) + } + if f.ti.mbs { + ft.EncAsMapSliceIntV(v, e) + return + } + ft.EncSliceIntV(v, e) +} +func (fastpathETJsonIO) EncSliceIntV(v []int, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonIO) EncAsMapSliceIntV(v []int, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonIO) fastpathEncSliceInt32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonIO + var v []int32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int32) + } + if f.ti.mbs { + ft.EncAsMapSliceInt32V(v, e) + return + } + ft.EncSliceInt32V(v, e) +} +func (fastpathETJsonIO) EncSliceInt32V(v []int32, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonIO) EncAsMapSliceInt32V(v []int32, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonIO) fastpathEncSliceInt64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonIO + var v []int64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int64) + } + if f.ti.mbs { + ft.EncAsMapSliceInt64V(v, e) + return + } + ft.EncSliceInt64V(v, e) +} +func (fastpathETJsonIO) EncSliceInt64V(v []int64, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonIO) EncAsMapSliceInt64V(v []int64, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonIO) fastpathEncSliceBoolR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETJsonIO + var v []bool + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]bool) + } + if f.ti.mbs { + ft.EncAsMapSliceBoolV(v, e) + return + } + ft.EncSliceBoolV(v, e) +} +func (fastpathETJsonIO) EncSliceBoolV(v []bool, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETJsonIO) EncAsMapSliceBoolV(v []bool, e *encoderJsonIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonIO) fastpathEncMapStringIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapStringIntfV(rv2i(rv).(map[string]interface{}), e) +} +func (fastpathETJsonIO) EncMapStringIntfV(v map[string]interface{}, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapStringStringR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapStringStringV(rv2i(rv).(map[string]string), e) +} +func (fastpathETJsonIO) EncMapStringStringV(v map[string]string, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapStringBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapStringBytesV(rv2i(rv).(map[string][]byte), e) +} +func (fastpathETJsonIO) EncMapStringBytesV(v map[string][]byte, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapStringUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapStringUint8V(rv2i(rv).(map[string]uint8), e) +} +func (fastpathETJsonIO) EncMapStringUint8V(v map[string]uint8, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapStringUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapStringUint64V(rv2i(rv).(map[string]uint64), e) +} +func (fastpathETJsonIO) EncMapStringUint64V(v map[string]uint64, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapStringIntR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapStringIntV(rv2i(rv).(map[string]int), e) +} +func (fastpathETJsonIO) EncMapStringIntV(v map[string]int, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapStringInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapStringInt32V(rv2i(rv).(map[string]int32), e) +} +func (fastpathETJsonIO) EncMapStringInt32V(v map[string]int32, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapStringFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapStringFloat64V(rv2i(rv).(map[string]float64), e) +} +func (fastpathETJsonIO) EncMapStringFloat64V(v map[string]float64, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapStringBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapStringBoolV(rv2i(rv).(map[string]bool), e) +} +func (fastpathETJsonIO) EncMapStringBoolV(v map[string]bool, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint8IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), e) +} +func (fastpathETJsonIO) EncMapUint8IntfV(v map[uint8]interface{}, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint8StringR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint8StringV(rv2i(rv).(map[uint8]string), e) +} +func (fastpathETJsonIO) EncMapUint8StringV(v map[uint8]string, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint8BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint8BytesV(rv2i(rv).(map[uint8][]byte), e) +} +func (fastpathETJsonIO) EncMapUint8BytesV(v map[uint8][]byte, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint8Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), e) +} +func (fastpathETJsonIO) EncMapUint8Uint8V(v map[uint8]uint8, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint8Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), e) +} +func (fastpathETJsonIO) EncMapUint8Uint64V(v map[uint8]uint64, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint8IntR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint8IntV(rv2i(rv).(map[uint8]int), e) +} +func (fastpathETJsonIO) EncMapUint8IntV(v map[uint8]int, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint8Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint8Int32V(rv2i(rv).(map[uint8]int32), e) +} +func (fastpathETJsonIO) EncMapUint8Int32V(v map[uint8]int32, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint8Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint8Float64V(rv2i(rv).(map[uint8]float64), e) +} +func (fastpathETJsonIO) EncMapUint8Float64V(v map[uint8]float64, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint8BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint8BoolV(rv2i(rv).(map[uint8]bool), e) +} +func (fastpathETJsonIO) EncMapUint8BoolV(v map[uint8]bool, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint64IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), e) +} +func (fastpathETJsonIO) EncMapUint64IntfV(v map[uint64]interface{}, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint64StringR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint64StringV(rv2i(rv).(map[uint64]string), e) +} +func (fastpathETJsonIO) EncMapUint64StringV(v map[uint64]string, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint64BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint64BytesV(rv2i(rv).(map[uint64][]byte), e) +} +func (fastpathETJsonIO) EncMapUint64BytesV(v map[uint64][]byte, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint64Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), e) +} +func (fastpathETJsonIO) EncMapUint64Uint8V(v map[uint64]uint8, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint64Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), e) +} +func (fastpathETJsonIO) EncMapUint64Uint64V(v map[uint64]uint64, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint64IntR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint64IntV(rv2i(rv).(map[uint64]int), e) +} +func (fastpathETJsonIO) EncMapUint64IntV(v map[uint64]int, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint64Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint64Int32V(rv2i(rv).(map[uint64]int32), e) +} +func (fastpathETJsonIO) EncMapUint64Int32V(v map[uint64]int32, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint64Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint64Float64V(rv2i(rv).(map[uint64]float64), e) +} +func (fastpathETJsonIO) EncMapUint64Float64V(v map[uint64]float64, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapUint64BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapUint64BoolV(rv2i(rv).(map[uint64]bool), e) +} +func (fastpathETJsonIO) EncMapUint64BoolV(v map[uint64]bool, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapIntIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapIntIntfV(rv2i(rv).(map[int]interface{}), e) +} +func (fastpathETJsonIO) EncMapIntIntfV(v map[int]interface{}, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapIntStringR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapIntStringV(rv2i(rv).(map[int]string), e) +} +func (fastpathETJsonIO) EncMapIntStringV(v map[int]string, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapIntBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapIntBytesV(rv2i(rv).(map[int][]byte), e) +} +func (fastpathETJsonIO) EncMapIntBytesV(v map[int][]byte, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapIntUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapIntUint8V(rv2i(rv).(map[int]uint8), e) +} +func (fastpathETJsonIO) EncMapIntUint8V(v map[int]uint8, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapIntUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapIntUint64V(rv2i(rv).(map[int]uint64), e) +} +func (fastpathETJsonIO) EncMapIntUint64V(v map[int]uint64, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapIntIntR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapIntIntV(rv2i(rv).(map[int]int), e) +} +func (fastpathETJsonIO) EncMapIntIntV(v map[int]int, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapIntInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapIntInt32V(rv2i(rv).(map[int]int32), e) +} +func (fastpathETJsonIO) EncMapIntInt32V(v map[int]int32, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapIntFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapIntFloat64V(rv2i(rv).(map[int]float64), e) +} +func (fastpathETJsonIO) EncMapIntFloat64V(v map[int]float64, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapIntBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapIntBoolV(rv2i(rv).(map[int]bool), e) +} +func (fastpathETJsonIO) EncMapIntBoolV(v map[int]bool, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapInt32IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapInt32IntfV(rv2i(rv).(map[int32]interface{}), e) +} +func (fastpathETJsonIO) EncMapInt32IntfV(v map[int32]interface{}, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapInt32StringR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapInt32StringV(rv2i(rv).(map[int32]string), e) +} +func (fastpathETJsonIO) EncMapInt32StringV(v map[int32]string, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapInt32BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapInt32BytesV(rv2i(rv).(map[int32][]byte), e) +} +func (fastpathETJsonIO) EncMapInt32BytesV(v map[int32][]byte, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapInt32Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapInt32Uint8V(rv2i(rv).(map[int32]uint8), e) +} +func (fastpathETJsonIO) EncMapInt32Uint8V(v map[int32]uint8, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapInt32Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapInt32Uint64V(rv2i(rv).(map[int32]uint64), e) +} +func (fastpathETJsonIO) EncMapInt32Uint64V(v map[int32]uint64, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapInt32IntR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapInt32IntV(rv2i(rv).(map[int32]int), e) +} +func (fastpathETJsonIO) EncMapInt32IntV(v map[int32]int, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapInt32Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapInt32Int32V(rv2i(rv).(map[int32]int32), e) +} +func (fastpathETJsonIO) EncMapInt32Int32V(v map[int32]int32, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapInt32Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapInt32Float64V(rv2i(rv).(map[int32]float64), e) +} +func (fastpathETJsonIO) EncMapInt32Float64V(v map[int32]float64, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderJsonIO) fastpathEncMapInt32BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETJsonIO{}.EncMapInt32BoolV(rv2i(rv).(map[int32]bool), e) +} +func (fastpathETJsonIO) EncMapInt32BoolV(v map[int32]bool, e *encoderJsonIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (helperDecDriverJsonIO) fastpathDecodeTypeSwitch(iv interface{}, d *decoderJsonIO) bool { + var ft fastpathDTJsonIO + var changed bool + var containerLen int + switch v := iv.(type) { + case []interface{}: + ft.DecSliceIntfN(v, d) + case *[]interface{}: + var v2 []interface{} + if v2, changed = ft.DecSliceIntfY(*v, d); changed { + *v = v2 + } + case []string: + ft.DecSliceStringN(v, d) + case *[]string: + var v2 []string + if v2, changed = ft.DecSliceStringY(*v, d); changed { + *v = v2 + } + case [][]byte: + ft.DecSliceBytesN(v, d) + case *[][]byte: + var v2 [][]byte + if v2, changed = ft.DecSliceBytesY(*v, d); changed { + *v = v2 + } + case []float32: + ft.DecSliceFloat32N(v, d) + case *[]float32: + var v2 []float32 + if v2, changed = ft.DecSliceFloat32Y(*v, d); changed { + *v = v2 + } + case []float64: + ft.DecSliceFloat64N(v, d) + case *[]float64: + var v2 []float64 + if v2, changed = ft.DecSliceFloat64Y(*v, d); changed { + *v = v2 + } + case []uint8: + ft.DecSliceUint8N(v, d) + case *[]uint8: + var v2 []uint8 + if v2, changed = ft.DecSliceUint8Y(*v, d); changed { + *v = v2 + } + case []uint64: + ft.DecSliceUint64N(v, d) + case *[]uint64: + var v2 []uint64 + if v2, changed = ft.DecSliceUint64Y(*v, d); changed { + *v = v2 + } + case []int: + ft.DecSliceIntN(v, d) + case *[]int: + var v2 []int + if v2, changed = ft.DecSliceIntY(*v, d); changed { + *v = v2 + } + case []int32: + ft.DecSliceInt32N(v, d) + case *[]int32: + var v2 []int32 + if v2, changed = ft.DecSliceInt32Y(*v, d); changed { + *v = v2 + } + case []int64: + ft.DecSliceInt64N(v, d) + case *[]int64: + var v2 []int64 + if v2, changed = ft.DecSliceInt64Y(*v, d); changed { + *v = v2 + } + case []bool: + ft.DecSliceBoolN(v, d) + case *[]bool: + var v2 []bool + if v2, changed = ft.DecSliceBoolY(*v, d); changed { + *v = v2 + } + case map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*v, containerLen, d) + } + d.mapEnd() + } + default: + _ = v + return false + } + return true +} + +func (d *decoderJsonIO) fastpathDecSliceIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]interface{}) + if vv, changed := ft.DecSliceIntfY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []interface{} + rvGetSlice4Array(rv, &v) + ft.DecSliceIntfN(v, d) + default: + ft.DecSliceIntfN(rv2i(rv).([]interface{}), d) + } +} +func (fastpathDTJsonIO) DecSliceIntfY(v []interface{}, d *decoderJsonIO) (v2 []interface{}, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []interface{}) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]interface{}, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + d.decode(&v[uint(j)]) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]interface{}{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonIO) DecSliceIntfN(v []interface{}, d *decoderJsonIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + d.decode(&v[uint(j)]) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonIO) fastpathDecSliceStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]string) + if vv, changed := ft.DecSliceStringY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []string + rvGetSlice4Array(rv, &v) + ft.DecSliceStringN(v, d) + default: + ft.DecSliceStringN(rv2i(rv).([]string), d) + } +} +func (fastpathDTJsonIO) DecSliceStringY(v []string, d *decoderJsonIO) (v2 []string, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []string) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]string, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, "")) + } + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]string{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonIO) DecSliceStringN(v []string, d *decoderJsonIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonIO) fastpathDecSliceBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[][]byte) + if vv, changed := ft.DecSliceBytesY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v [][]byte + rvGetSlice4Array(rv, &v) + ft.DecSliceBytesN(v, d) + default: + ft.DecSliceBytesN(rv2i(rv).([][]byte), d) + } +} +func (fastpathDTJsonIO) DecSliceBytesY(v [][]byte, d *decoderJsonIO) (v2 [][]byte, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst [][]byte) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 24)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([][]byte, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([][]byte{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonIO) DecSliceBytesN(v [][]byte, d *decoderJsonIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonIO) fastpathDecSliceFloat32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float32) + if vv, changed := ft.DecSliceFloat32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float32 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat32N(v, d) + default: + ft.DecSliceFloat32N(rv2i(rv).([]float32), d) + } +} +func (fastpathDTJsonIO) DecSliceFloat32Y(v []float32, d *decoderJsonIO) (v2 []float32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = float32(d.d.DecodeFloat32()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonIO) DecSliceFloat32N(v []float32, d *decoderJsonIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = float32(d.d.DecodeFloat32()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonIO) fastpathDecSliceFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float64) + if vv, changed := ft.DecSliceFloat64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float64 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat64N(v, d) + default: + ft.DecSliceFloat64N(rv2i(rv).([]float64), d) + } +} +func (fastpathDTJsonIO) DecSliceFloat64Y(v []float64, d *decoderJsonIO) (v2 []float64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeFloat64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonIO) DecSliceFloat64N(v []float64, d *decoderJsonIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeFloat64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonIO) fastpathDecSliceUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint8) + if vv, changed := ft.DecSliceUint8Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint8 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint8N(v, d) + default: + ft.DecSliceUint8N(rv2i(rv).([]uint8), d) + } +} +func (fastpathDTJsonIO) DecSliceUint8Y(v []uint8, d *decoderJsonIO) (v2 []uint8, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + if ctyp != valueTypeMap { + var dbi dBytesIntoState + v2, dbi = d.decodeBytesInto(v[:len(v):len(v)], false) + return v2, dbi != dBytesIntoParamOut + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint8) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint8, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint8{}) + } + d.mapEnd() + return v, changed +} +func (fastpathDTJsonIO) DecSliceUint8N(v []uint8, d *decoderJsonIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + if ctyp != valueTypeMap { + d.decodeBytesInto(v[:len(v):len(v)], true) + return + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + d.mapEnd() +} + +func (d *decoderJsonIO) fastpathDecSliceUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint64) + if vv, changed := ft.DecSliceUint64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint64 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint64N(v, d) + default: + ft.DecSliceUint64N(rv2i(rv).([]uint64), d) + } +} +func (fastpathDTJsonIO) DecSliceUint64Y(v []uint64, d *decoderJsonIO) (v2 []uint64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeUint64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonIO) DecSliceUint64N(v []uint64, d *decoderJsonIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeUint64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonIO) fastpathDecSliceIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int) + if vv, changed := ft.DecSliceIntY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int + rvGetSlice4Array(rv, &v) + ft.DecSliceIntN(v, d) + default: + ft.DecSliceIntN(rv2i(rv).([]int), d) + } +} +func (fastpathDTJsonIO) DecSliceIntY(v []int, d *decoderJsonIO) (v2 []int, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonIO) DecSliceIntN(v []int, d *decoderJsonIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonIO) fastpathDecSliceInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int32) + if vv, changed := ft.DecSliceInt32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int32 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt32N(v, d) + default: + ft.DecSliceInt32N(rv2i(rv).([]int32), d) + } +} +func (fastpathDTJsonIO) DecSliceInt32Y(v []int32, d *decoderJsonIO) (v2 []int32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonIO) DecSliceInt32N(v []int32, d *decoderJsonIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonIO) fastpathDecSliceInt64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int64) + if vv, changed := ft.DecSliceInt64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int64 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt64N(v, d) + default: + ft.DecSliceInt64N(rv2i(rv).([]int64), d) + } +} +func (fastpathDTJsonIO) DecSliceInt64Y(v []int64, d *decoderJsonIO) (v2 []int64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeInt64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonIO) DecSliceInt64N(v []int64, d *decoderJsonIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeInt64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonIO) fastpathDecSliceBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]bool) + if vv, changed := ft.DecSliceBoolY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []bool + rvGetSlice4Array(rv, &v) + ft.DecSliceBoolN(v, d) + default: + ft.DecSliceBoolN(rv2i(rv).([]bool), d) + } +} +func (fastpathDTJsonIO) DecSliceBoolY(v []bool, d *decoderJsonIO) (v2 []bool, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []bool) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]bool, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, false)) + } + v[uint(j)] = d.d.DecodeBool() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]bool{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTJsonIO) DecSliceBoolN(v []bool, d *decoderJsonIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeBool() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} +func (d *decoderJsonIO) fastpathDecMapStringIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]interface{}) + if *vp == nil { + *vp = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntfL(rv2i(rv).(map[string]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapStringIntfL(v map[string]interface{}, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderJsonIO) fastpathDecMapStringStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]string) + if *vp == nil { + *vp = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringStringL(rv2i(rv).(map[string]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapStringStringL(v map[string]string, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderJsonIO) fastpathDecMapStringBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string][]byte) + if *vp == nil { + *vp = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBytesL(rv2i(rv).(map[string][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapStringBytesL(v map[string][]byte, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderJsonIO) fastpathDecMapStringUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint8) + if *vp == nil { + *vp = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint8L(rv2i(rv).(map[string]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapStringUint8L(v map[string]uint8, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderJsonIO) fastpathDecMapStringUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint64) + if *vp == nil { + *vp = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint64L(rv2i(rv).(map[string]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapStringUint64L(v map[string]uint64, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderJsonIO) fastpathDecMapStringIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int) + if *vp == nil { + *vp = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntL(rv2i(rv).(map[string]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapStringIntL(v map[string]int, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderJsonIO) fastpathDecMapStringInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int32) + if *vp == nil { + *vp = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringInt32L(rv2i(rv).(map[string]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapStringInt32L(v map[string]int32, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderJsonIO) fastpathDecMapStringFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]float64) + if *vp == nil { + *vp = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringFloat64L(rv2i(rv).(map[string]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapStringFloat64L(v map[string]float64, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderJsonIO) fastpathDecMapStringBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]bool) + if *vp == nil { + *vp = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBoolL(rv2i(rv).(map[string]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapStringBoolL(v map[string]bool, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderJsonIO) fastpathDecMapUint8IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]interface{}) + if *vp == nil { + *vp = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntfL(rv2i(rv).(map[uint8]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint8IntfL(v map[uint8]interface{}, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderJsonIO) fastpathDecMapUint8StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]string) + if *vp == nil { + *vp = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8StringL(rv2i(rv).(map[uint8]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint8StringL(v map[uint8]string, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderJsonIO) fastpathDecMapUint8BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8][]byte) + if *vp == nil { + *vp = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BytesL(rv2i(rv).(map[uint8][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint8BytesL(v map[uint8][]byte, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderJsonIO) fastpathDecMapUint8Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint8) + if *vp == nil { + *vp = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint8L(rv2i(rv).(map[uint8]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint8Uint8L(v map[uint8]uint8, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderJsonIO) fastpathDecMapUint8Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint64) + if *vp == nil { + *vp = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint64L(rv2i(rv).(map[uint8]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint8Uint64L(v map[uint8]uint64, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderJsonIO) fastpathDecMapUint8IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int) + if *vp == nil { + *vp = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntL(rv2i(rv).(map[uint8]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint8IntL(v map[uint8]int, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderJsonIO) fastpathDecMapUint8Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int32) + if *vp == nil { + *vp = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Int32L(rv2i(rv).(map[uint8]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint8Int32L(v map[uint8]int32, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderJsonIO) fastpathDecMapUint8Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]float64) + if *vp == nil { + *vp = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Float64L(rv2i(rv).(map[uint8]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint8Float64L(v map[uint8]float64, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderJsonIO) fastpathDecMapUint8BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]bool) + if *vp == nil { + *vp = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BoolL(rv2i(rv).(map[uint8]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint8BoolL(v map[uint8]bool, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderJsonIO) fastpathDecMapUint64IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]interface{}) + if *vp == nil { + *vp = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntfL(rv2i(rv).(map[uint64]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint64IntfL(v map[uint64]interface{}, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderJsonIO) fastpathDecMapUint64StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]string) + if *vp == nil { + *vp = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64StringL(rv2i(rv).(map[uint64]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint64StringL(v map[uint64]string, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderJsonIO) fastpathDecMapUint64BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64][]byte) + if *vp == nil { + *vp = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BytesL(rv2i(rv).(map[uint64][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint64BytesL(v map[uint64][]byte, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderJsonIO) fastpathDecMapUint64Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint8) + if *vp == nil { + *vp = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint8L(rv2i(rv).(map[uint64]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint64Uint8L(v map[uint64]uint8, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderJsonIO) fastpathDecMapUint64Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint64) + if *vp == nil { + *vp = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint64L(rv2i(rv).(map[uint64]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint64Uint64L(v map[uint64]uint64, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderJsonIO) fastpathDecMapUint64IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int) + if *vp == nil { + *vp = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntL(rv2i(rv).(map[uint64]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint64IntL(v map[uint64]int, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderJsonIO) fastpathDecMapUint64Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int32) + if *vp == nil { + *vp = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Int32L(rv2i(rv).(map[uint64]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint64Int32L(v map[uint64]int32, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderJsonIO) fastpathDecMapUint64Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]float64) + if *vp == nil { + *vp = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Float64L(rv2i(rv).(map[uint64]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint64Float64L(v map[uint64]float64, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderJsonIO) fastpathDecMapUint64BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]bool) + if *vp == nil { + *vp = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BoolL(rv2i(rv).(map[uint64]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapUint64BoolL(v map[uint64]bool, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderJsonIO) fastpathDecMapIntIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]interface{}) + if *vp == nil { + *vp = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntfL(rv2i(rv).(map[int]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapIntIntfL(v map[int]interface{}, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderJsonIO) fastpathDecMapIntStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]string) + if *vp == nil { + *vp = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntStringL(rv2i(rv).(map[int]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapIntStringL(v map[int]string, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderJsonIO) fastpathDecMapIntBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int][]byte) + if *vp == nil { + *vp = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBytesL(rv2i(rv).(map[int][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapIntBytesL(v map[int][]byte, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderJsonIO) fastpathDecMapIntUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint8) + if *vp == nil { + *vp = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint8L(rv2i(rv).(map[int]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapIntUint8L(v map[int]uint8, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderJsonIO) fastpathDecMapIntUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint64) + if *vp == nil { + *vp = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint64L(rv2i(rv).(map[int]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapIntUint64L(v map[int]uint64, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderJsonIO) fastpathDecMapIntIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int) + if *vp == nil { + *vp = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntL(rv2i(rv).(map[int]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapIntIntL(v map[int]int, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderJsonIO) fastpathDecMapIntInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int32) + if *vp == nil { + *vp = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntInt32L(rv2i(rv).(map[int]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapIntInt32L(v map[int]int32, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderJsonIO) fastpathDecMapIntFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]float64) + if *vp == nil { + *vp = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntFloat64L(rv2i(rv).(map[int]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapIntFloat64L(v map[int]float64, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderJsonIO) fastpathDecMapIntBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]bool) + if *vp == nil { + *vp = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBoolL(rv2i(rv).(map[int]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapIntBoolL(v map[int]bool, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderJsonIO) fastpathDecMapInt32IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]interface{}) + if *vp == nil { + *vp = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntfL(rv2i(rv).(map[int32]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapInt32IntfL(v map[int32]interface{}, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderJsonIO) fastpathDecMapInt32StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]string) + if *vp == nil { + *vp = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32StringL(rv2i(rv).(map[int32]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapInt32StringL(v map[int32]string, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderJsonIO) fastpathDecMapInt32BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32][]byte) + if *vp == nil { + *vp = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BytesL(rv2i(rv).(map[int32][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapInt32BytesL(v map[int32][]byte, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderJsonIO) fastpathDecMapInt32Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint8) + if *vp == nil { + *vp = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint8L(rv2i(rv).(map[int32]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapInt32Uint8L(v map[int32]uint8, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderJsonIO) fastpathDecMapInt32Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint64) + if *vp == nil { + *vp = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint64L(rv2i(rv).(map[int32]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapInt32Uint64L(v map[int32]uint64, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderJsonIO) fastpathDecMapInt32IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int) + if *vp == nil { + *vp = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntL(rv2i(rv).(map[int32]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapInt32IntL(v map[int32]int, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderJsonIO) fastpathDecMapInt32Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int32) + if *vp == nil { + *vp = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Int32L(rv2i(rv).(map[int32]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapInt32Int32L(v map[int32]int32, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderJsonIO) fastpathDecMapInt32Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]float64) + if *vp == nil { + *vp = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Float64L(rv2i(rv).(map[int32]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapInt32Float64L(v map[int32]float64, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderJsonIO) fastpathDecMapInt32BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTJsonIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]bool) + if *vp == nil { + *vp = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BoolL(rv2i(rv).(map[int32]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTJsonIO) DecMapInt32BoolL(v map[int32]bool, containerLen int, d *decoderJsonIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} diff --git a/vendor/github.com/ugorji/go/codec/json.go b/vendor/github.com/ugorji/go/codec/json.go index 569b0cc..ba0e550 100644 --- a/vendor/github.com/ugorji/go/codec/json.go +++ b/vendor/github.com/ugorji/go/codec/json.go @@ -1,3 +1,5 @@ +//go:build notmono || codec.notmono + // Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. // Use of this source code is governed by a MIT license found in the LICENSE file. @@ -18,6 +20,7 @@ package codec import ( "encoding/base64" + "io" "math" "reflect" "strconv" @@ -27,154 +30,36 @@ import ( "unicode/utf8" ) -//-------------------------------- - -// jsonLits and jsonLitb are defined at the package level, -// so they are guaranteed to be stored efficiently, making -// for better append/string comparison/etc. -// -// (anecdotal evidence from some benchmarking on go 1.20 devel in 20220104) -const jsonLits = `"true"false"null"` - -var jsonLitb = []byte(jsonLits) - -const ( - jsonLitT = 1 - jsonLitF = 6 - jsonLitN = 12 -) - -const jsonEncodeUintSmallsString = "" + - "00010203040506070809" + - "10111213141516171819" + - "20212223242526272829" + - "30313233343536373839" + - "40414243444546474849" + - "50515253545556575859" + - "60616263646566676869" + - "70717273747576777879" + - "80818283848586878889" + - "90919293949596979899" - -var jsonEncodeUintSmallsStringBytes = []byte(jsonEncodeUintSmallsString) - -const ( - jsonU4Chk2 = '0' - jsonU4Chk1 = 'a' - 10 - jsonU4Chk0 = 'A' - 10 -) - -const ( - // If !jsonValidateSymbols, decoding will be faster, by skipping some checks: - // - If we see first character of null, false or true, - // do not validate subsequent characters. - // - e.g. if we see a n, assume null and skip next 3 characters, - // and do not validate they are ull. - // P.S. Do not expect a significant decoding boost from this. - jsonValidateSymbols = true - - // jsonEscapeMultiByteUnicodeSep controls whether some unicode characters - // that are valid json but may bomb in some contexts are escaped during encoeing. - // - // U+2028 is LINE SEPARATOR. U+2029 is PARAGRAPH SEPARATOR. - // Both technically valid JSON, but bomb on JSONP, so fix here unconditionally. - jsonEscapeMultiByteUnicodeSep = true - - // jsonRecognizeBoolNullInQuotedStr is used during decoding into a blank interface{} - // to control whether we detect quoted values of bools and null where a map key is expected, - // and treat as nil, true or false. - jsonNakedBoolNullInQuotedStr = true - - // jsonManualInlineDecRdInHotZones controls whether we manually inline some decReader calls. - // - // encode performance is at par with libraries that just iterate over bytes directly, - // because encWr (with inlined bytesEncAppender calls) is inlined. - // Conversely, decode performance suffers because decRd (with inlined bytesDecReader calls) - // isn't inlinable. - // - // To improve decode performamnce from json: - // - readn1 is only called for \u - // - consequently, to optimize json decoding, we specifically need inlining - // for bytes use-case of some other decReader methods: - // - jsonReadAsisChars, skipWhitespace (advance) and jsonReadNum - // - AND THEN readn3, readn4 (for ull, rue and alse). - // - (readn1 is only called when a char is escaped). - // - without inlining, we still pay the cost of a method invocationK, and this dominates time - // - To mitigate, we manually inline in hot zones - // *excluding places where used sparingly (e.g. nextValueBytes, and other atypical cases)*. - // - jsonReadAsisChars *only* called in: appendStringAsBytes - // - advance called: everywhere - // - jsonReadNum: decNumBytes, DecodeNaked - // - From running go test (our anecdotal findings): - // - calling jsonReadAsisChars in appendStringAsBytes: 23431 - // - calling jsonReadNum in decNumBytes: 15251 - // - calling jsonReadNum in DecodeNaked: 612 - // Consequently, we manually inline jsonReadAsisChars (in appendStringAsBytes) - // and jsonReadNum (in decNumbytes) - jsonManualInlineDecRdInHotZones = true - - jsonSpacesOrTabsLen = 128 - - // jsonAlwaysReturnInternString = false -) +type jsonEncDriver[T encWriter] struct { + noBuiltInTypes + h *JsonHandle + e *encoderBase + s *bitset256 // safe set for characters (taking h.HTMLAsIs into consideration) -var ( - // jsonTabs and jsonSpaces are used as caches for indents - jsonTabs, jsonSpaces [jsonSpacesOrTabsLen]byte + w T + // se interfaceExtWrapper - jsonCharHtmlSafeSet bitset256 - jsonCharSafeSet bitset256 -) + enc encoderI -func init() { - var i byte - for i = 0; i < jsonSpacesOrTabsLen; i++ { - jsonSpaces[i] = ' ' - jsonTabs[i] = '\t' - } - - // populate the safe values as true: note: ASCII control characters are (0-31) - // jsonCharSafeSet: all true except (0-31) " \ - // jsonCharHtmlSafeSet: all true except (0-31) " \ < > & - for i = 32; i < utf8.RuneSelf; i++ { - switch i { - case '"', '\\': - case '<', '>', '&': - jsonCharSafeSet.set(i) // = true - default: - jsonCharSafeSet.set(i) - jsonCharHtmlSafeSet.set(i) - } - } -} + timeFmtLayout string + byteFmter jsonBytesFmter + // ---- cpu cache line boundary??? -// ---------------- + // bytes2Arr bool + // time2Num bool + timeFmt jsonTimeFmt + bytesFmt jsonBytesFmt -type jsonEncState struct { di int8 // indent per: if negative, use tabs d bool // indenting? dl uint16 // indent level -} - -func (x jsonEncState) captureState() interface{} { return x } -func (x *jsonEncState) restoreState(v interface{}) { *x = v.(jsonEncState) } - -type jsonEncDriver struct { - noBuiltInTypes - h *JsonHandle - - // se interfaceExtWrapper - - // ---- cpu cache line boundary? - jsonEncState ks bool // map key as string is byte // integer as string typical bool - rawext bool // rawext configured on the handle - s *bitset256 // safe set for characters (taking h.HTMLAsIs into consideration) + rawext bool // rawext configured on the handle // buf *[]byte // used mostly for encoding []byte @@ -190,137 +75,132 @@ type jsonEncDriver struct { // Consequently, 35 characters should be sufficient for encoding time, integers or floats. // We use up all the remaining bytes to make this use full cache lines. b [48]byte - - e Encoder } -func (e *jsonEncDriver) encoder() *Encoder { return &e.e } - -func (e *jsonEncDriver) writeIndent() { - e.e.encWr.writen1('\n') +func (e *jsonEncDriver[T]) writeIndent() { + e.w.writen1('\n') x := int(e.di) * int(e.dl) if e.di < 0 { x = -x - for x > jsonSpacesOrTabsLen { - e.e.encWr.writeb(jsonTabs[:]) - x -= jsonSpacesOrTabsLen + for x > len(jsonTabs) { + e.w.writeb(jsonTabs[:]) + x -= len(jsonTabs) } - e.e.encWr.writeb(jsonTabs[:x]) + e.w.writeb(jsonTabs[:x]) } else { - for x > jsonSpacesOrTabsLen { - e.e.encWr.writeb(jsonSpaces[:]) - x -= jsonSpacesOrTabsLen + for x > len(jsonSpaces) { + e.w.writeb(jsonSpaces[:]) + x -= len(jsonSpaces) } - e.e.encWr.writeb(jsonSpaces[:x]) + e.w.writeb(jsonSpaces[:x]) } } -func (e *jsonEncDriver) WriteArrayElem() { - if e.e.c != containerArrayStart { - e.e.encWr.writen1(',') +func (e *jsonEncDriver[T]) WriteArrayElem(firstTime bool) { + if !firstTime { + e.w.writen1(',') } if e.d { e.writeIndent() } } -func (e *jsonEncDriver) WriteMapElemKey() { - if e.e.c != containerMapStart { - e.e.encWr.writen1(',') +func (e *jsonEncDriver[T]) WriteMapElemKey(firstTime bool) { + if !firstTime { + e.w.writen1(',') } if e.d { e.writeIndent() } } -func (e *jsonEncDriver) WriteMapElemValue() { +func (e *jsonEncDriver[T]) WriteMapElemValue() { if e.d { - e.e.encWr.writen2(':', ' ') + e.w.writen2(':', ' ') } else { - e.e.encWr.writen1(':') + e.w.writen1(':') } } -func (e *jsonEncDriver) EncodeNil() { +func (e *jsonEncDriver[T]) EncodeNil() { // We always encode nil as just null (never in quotes) // so we can easily decode if a nil in the json stream ie if initial token is n. - e.e.encWr.writestr(jsonLits[jsonLitN : jsonLitN+4]) + // e.w.writestr(jsonLits[jsonLitN : jsonLitN+4]) + e.w.writeb(jsonNull) +} + +func (e *jsonEncDriver[T]) encodeIntAsUint(v int64, quotes bool) { + neg := v < 0 + if neg { + v = -v + } + e.encodeUint(neg, quotes, uint64(v)) } -func (e *jsonEncDriver) EncodeTime(t time.Time) { +func (e *jsonEncDriver[T]) EncodeTime(t time.Time) { // Do NOT use MarshalJSON, as it allocates internally. // instead, we call AppendFormat directly, using our scratch buffer (e.b) if t.IsZero() { e.EncodeNil() - } else { + return + } + switch e.timeFmt { + case jsonTimeFmtStringLayout: e.b[0] = '"' - b := fmtTime(t, time.RFC3339Nano, e.b[1:1]) + b := t.AppendFormat(e.b[1:1], e.timeFmtLayout) e.b[len(b)+1] = '"' - e.e.encWr.writeb(e.b[:len(b)+2]) + e.w.writeb(e.b[:len(b)+2]) + case jsonTimeFmtUnix: + e.encodeIntAsUint(t.Unix(), false) + case jsonTimeFmtUnixMilli: + e.encodeIntAsUint(t.UnixMilli(), false) + case jsonTimeFmtUnixMicro: + e.encodeIntAsUint(t.UnixMicro(), false) + case jsonTimeFmtUnixNano: + e.encodeIntAsUint(t.UnixNano(), false) } } -func (e *jsonEncDriver) EncodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { +func (e *jsonEncDriver[T]) EncodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { if ext == SelfExt { - e.e.encodeValue(baseRV(rv), e.h.fnNoExt(basetype)) + e.enc.encodeAs(rv, basetype, false) } else if v := ext.ConvertExt(rv); v == nil { - e.EncodeNil() + e.writeNilBytes() } else { - e.e.encode(v) + e.enc.encodeI(v) } } -func (e *jsonEncDriver) EncodeRawExt(re *RawExt) { - // only encodes re.Value (never re.Data) - if re.Value == nil { - e.EncodeNil() +func (e *jsonEncDriver[T]) EncodeRawExt(re *RawExt) { + if re.Data != nil { + e.w.writeb(re.Data) + } else if re.Value != nil { + e.enc.encodeI(re.Value) } else { - e.e.encode(re.Value) + e.EncodeNil() } } -var jsonEncBoolStrs = [2][2]string{ - {jsonLits[jsonLitF : jsonLitF+5], jsonLits[jsonLitT : jsonLitT+4]}, - {jsonLits[jsonLitF-1 : jsonLitF+6], jsonLits[jsonLitT-1 : jsonLitT+5]}, +func (e *jsonEncDriver[T]) EncodeBool(b bool) { + e.w.writestr(jsonEncBoolStrs[bool2int(e.ks && e.e.c == containerMapKey)%2][bool2int(b)%2]) } -func (e *jsonEncDriver) EncodeBool(b bool) { - e.e.encWr.writestr( - jsonEncBoolStrs[bool2int(e.ks && e.e.c == containerMapKey)%2][bool2int(b)%2]) -} - -// func (e *jsonEncDriver) EncodeBool(b bool) { -// if e.ks && e.e.c == containerMapKey { -// if b { -// e.e.encWr.writestr(jsonLits[jsonLitT-1 : jsonLitT+5]) -// } else { -// e.e.encWr.writestr(jsonLits[jsonLitF-1 : jsonLitF+6]) -// } -// } else { -// if b { -// e.e.encWr.writestr(jsonLits[jsonLitT : jsonLitT+4]) -// } else { -// e.e.encWr.writestr(jsonLits[jsonLitF : jsonLitF+5]) -// } -// } -// } - -func (e *jsonEncDriver) encodeFloat(f float64, bitsize, fmt byte, prec int8) { +func (e *jsonEncDriver[T]) encodeFloat(f float64, bitsize, fmt byte, prec int8) { var blen uint if e.ks && e.e.c == containerMapKey { blen = 2 + uint(len(strconv.AppendFloat(e.b[1:1], f, fmt, int(prec), int(bitsize)))) // _ = e.b[:blen] e.b[0] = '"' e.b[blen-1] = '"' - e.e.encWr.writeb(e.b[:blen]) + e.w.writeb(e.b[:blen]) } else { - e.e.encWr.writeb(strconv.AppendFloat(e.b[:0], f, fmt, int(prec), int(bitsize))) + e.w.writeb(strconv.AppendFloat(e.b[:0], f, fmt, int(prec), int(bitsize))) } } -func (e *jsonEncDriver) EncodeFloat64(f float64) { +func (e *jsonEncDriver[T]) EncodeFloat64(f float64) { if math.IsNaN(f) || math.IsInf(f, 0) { e.EncodeNil() return @@ -329,7 +209,7 @@ func (e *jsonEncDriver) EncodeFloat64(f float64) { e.encodeFloat(f, 64, fmt, prec) } -func (e *jsonEncDriver) EncodeFloat32(f float32) { +func (e *jsonEncDriver[T]) EncodeFloat32(f float32) { if math.IsNaN(float64(f)) || math.IsInf(float64(f), 0) { e.EncodeNil() return @@ -338,60 +218,11 @@ func (e *jsonEncDriver) EncodeFloat32(f float32) { e.encodeFloat(float64(f), 32, fmt, prec) } -func (e *jsonEncDriver) encodeUint(neg bool, quotes bool, u uint64) { - // copied mostly from std library: strconv - // this should only be called on 64bit OS. - - // const smallsString = jsonEncodeUintSmallsString - var ss = jsonEncodeUintSmallsStringBytes - - // typically, 19 or 20 bytes sufficient for decimal encoding a uint64 - // var a [24]byte - var a = e.b[0:24] - var i = uint(len(a)) - - if quotes { - i-- - setByteAt(a, i, '"') - // a[i] = '"' - } - // u guaranteed to fit into a uint (as we are not 32bit OS) - var is uint - var us = uint(u) - for us >= 100 { - is = us % 100 * 2 - us /= 100 - i -= 2 - setByteAt(a, i+1, byteAt(ss, is+1)) - setByteAt(a, i, byteAt(ss, is)) - // a[i+1] = smallsString[is+1] - // a[i+0] = smallsString[is+0] - } - - // us < 100 - is = us * 2 - i-- - setByteAt(a, i, byteAt(ss, is+1)) - // a[i] = smallsString[is+1] - if us >= 10 { - i-- - setByteAt(a, i, byteAt(ss, is)) - // a[i] = smallsString[is] - } - if neg { - i-- - setByteAt(a, i, '-') - // a[i] = '-' - } - if quotes { - i-- - setByteAt(a, i, '"') - // a[i] = '"' - } - e.e.encWr.writeb(a[i:]) +func (e *jsonEncDriver[T]) encodeUint(neg bool, quotes bool, u uint64) { + e.w.writeb(jsonEncodeUint(neg, quotes, u, &e.b)) } -func (e *jsonEncDriver) EncodeInt(v int64) { +func (e *jsonEncDriver[T]) EncodeInt(v int64) { quotes := e.is == 'A' || e.is == 'L' && (v > 1<<53 || v < -(1<<53)) || (e.ks && e.e.c == containerMapKey) @@ -400,9 +231,9 @@ func (e *jsonEncDriver) EncodeInt(v int64) { blen := 2 + len(strconv.AppendInt(e.b[1:1], v, 10)) e.b[0] = '"' e.b[blen-1] = '"' - e.e.encWr.writeb(e.b[:blen]) + e.w.writeb(e.b[:blen]) } else { - e.e.encWr.writeb(strconv.AppendInt(e.b[:0], v, 10)) + e.w.writeb(strconv.AppendInt(e.b[:0], v, 10)) } return } @@ -414,7 +245,7 @@ func (e *jsonEncDriver) EncodeInt(v int64) { } } -func (e *jsonEncDriver) EncodeUint(v uint64) { +func (e *jsonEncDriver[T]) EncodeUint(v uint64) { quotes := e.is == 'A' || e.is == 'L' && v > 1<<53 || (e.ks && e.e.c == containerMapKey) @@ -424,9 +255,9 @@ func (e *jsonEncDriver) EncodeUint(v uint64) { blen := 2 + len(strconv.AppendUint(e.b[1:1], v, 10)) e.b[0] = '"' e.b[blen-1] = '"' - e.e.encWr.writeb(e.b[:blen]) + e.w.writeb(e.b[:blen]) } else { - e.e.encWr.writeb(strconv.AppendUint(e.b[:0], v, 10)) + e.w.writeb(strconv.AppendUint(e.b[:0], v, 10)) } return } @@ -434,7 +265,7 @@ func (e *jsonEncDriver) EncodeUint(v uint64) { e.encodeUint(false, quotes, v) } -func (e *jsonEncDriver) EncodeString(v string) { +func (e *jsonEncDriver[T]) EncodeString(v string) { if e.h.StringToRaw { e.EncodeStringBytesRaw(bytesView(v)) return @@ -442,35 +273,80 @@ func (e *jsonEncDriver) EncodeString(v string) { e.quoteStr(v) } -func (e *jsonEncDriver) EncodeStringBytesRaw(v []byte) { - // if encoding raw bytes and RawBytesExt is configured, use it to encode - if v == nil { - e.EncodeNil() - return - } +func (e *jsonEncDriver[T]) EncodeStringNoEscape4Json(v string) { e.w.writeqstr(v) } +func (e *jsonEncDriver[T]) EncodeStringBytesRaw(v []byte) { if e.rawext { - iv := e.h.RawBytesExt.ConvertExt(v) + // explicitly convert v to interface{} so that v doesn't escape to heap + iv := e.h.RawBytesExt.ConvertExt(any(v)) if iv == nil { e.EncodeNil() } else { - e.e.encode(iv) + e.enc.encodeI(iv) } return } - slen := base64.StdEncoding.EncodedLen(len(v)) + 2 + if e.bytesFmt == jsonBytesFmtArray { + e.WriteArrayStart(len(v)) + for j := range v { + e.WriteArrayElem(j == 0) + e.encodeUint(false, false, uint64(v[j])) + } + e.WriteArrayEnd() + return + } + + // hardcode base64, so we call direct (not via interface) and hopefully inline + var slen int + if e.bytesFmt == jsonBytesFmtBase64 { + slen = base64.StdEncoding.EncodedLen(len(v)) + } else { + slen = e.byteFmter.EncodedLen(len(v)) + } + slen += 2 // bs := e.e.blist.check(*e.buf, n)[:slen] // *e.buf = bs - bs := e.e.blist.peek(slen, false) - bs = bs[:slen] + bs := e.e.blist.peek(slen, false)[:slen] + + if e.bytesFmt == jsonBytesFmtBase64 { + base64.StdEncoding.Encode(bs[1:], v) + } else { + e.byteFmter.Encode(bs[1:], v) + } - base64.StdEncoding.Encode(bs[1:], v) bs[len(bs)-1] = '"' bs[0] = '"' - e.e.encWr.writeb(bs) + e.w.writeb(bs) +} + +func (e *jsonEncDriver[T]) EncodeBytes(v []byte) { + if v == nil { + e.writeNilBytes() + return + } + e.EncodeStringBytesRaw(v) +} + +func (e *jsonEncDriver[T]) writeNilOr(v []byte) { + if !e.h.NilCollectionToZeroLength { + v = jsonNull + } + e.w.writeb(v) +} + +func (e *jsonEncDriver[T]) writeNilBytes() { + e.writeNilOr(jsonArrayEmpty) +} + +func (e *jsonEncDriver[T]) writeNilArray() { + e.writeNilOr(jsonArrayEmpty) +} + +func (e *jsonEncDriver[T]) writeNilMap() { + e.writeNilOr(jsonMapEmpty) } // indent is done as below: @@ -478,78 +354,89 @@ func (e *jsonEncDriver) EncodeStringBytesRaw(v []byte) { // - newline and indent are added before each ending, // except there was no entry (so we can have {} or []) -func (e *jsonEncDriver) WriteArrayStart(length int) { +func (e *jsonEncDriver[T]) WriteArrayEmpty() { + e.w.writen2('[', ']') +} + +func (e *jsonEncDriver[T]) WriteMapEmpty() { + e.w.writen2('{', '}') +} + +func (e *jsonEncDriver[T]) WriteArrayStart(length int) { if e.d { e.dl++ } - e.e.encWr.writen1('[') + e.w.writen1('[') } -func (e *jsonEncDriver) WriteArrayEnd() { +func (e *jsonEncDriver[T]) WriteArrayEnd() { if e.d { e.dl-- + // No need as encoder handles zero-len already + // if e.e.c != containerArrayStart { e.writeIndent() } - e.e.encWr.writen1(']') + e.w.writen1(']') } -func (e *jsonEncDriver) WriteMapStart(length int) { +func (e *jsonEncDriver[T]) WriteMapStart(length int) { if e.d { e.dl++ } - e.e.encWr.writen1('{') + e.w.writen1('{') } -func (e *jsonEncDriver) WriteMapEnd() { +func (e *jsonEncDriver[T]) WriteMapEnd() { if e.d { e.dl-- - if e.e.c != containerMapStart { - e.writeIndent() - } + // No need as encoder handles zero-len already + // if e.e.c != containerMapStart { + e.writeIndent() } - e.e.encWr.writen1('}') + e.w.writen1('}') } -func (e *jsonEncDriver) quoteStr(s string) { +func (e *jsonEncDriver[T]) quoteStr(s string) { // adapted from std pkg encoding/json const hex = "0123456789abcdef" - w := e.e.w() - w.writen1('"') + e.w.writen1('"') var i, start uint for i < uint(len(s)) { // encode all bytes < 0x20 (except \r, \n). // also encode < > & to prevent security holes when served to some browsers. - // We optimize for ascii, by assumining that most characters are in the BMP + // We optimize for ascii, by assuming that most characters are in the BMP // and natively consumed by json without much computation. // if 0x20 <= b && b != '\\' && b != '"' && b != '<' && b != '>' && b != '&' { // if (htmlasis && jsonCharSafeSet.isset(b)) || jsonCharHtmlSafeSet.isset(b) { - if e.s.isset(s[i]) { + b := s[i] + if e.s.isset(b) { i++ continue } - // b := s[i] - if s[i] < utf8.RuneSelf { + if b < utf8.RuneSelf { if start < i { - w.writestr(s[start:i]) + e.w.writestr(s[start:i]) } - switch s[i] { - case '\\', '"': - w.writen2('\\', s[i]) + switch b { + case '\\': + e.w.writen2('\\', '\\') + case '"': + e.w.writen2('\\', '"') case '\n': - w.writen2('\\', 'n') + e.w.writen2('\\', 'n') + case '\t': + e.w.writen2('\\', 't') case '\r': - w.writen2('\\', 'r') + e.w.writen2('\\', 'r') case '\b': - w.writen2('\\', 'b') + e.w.writen2('\\', 'b') case '\f': - w.writen2('\\', 'f') - case '\t': - w.writen2('\\', 't') + e.w.writen2('\\', 'f') default: - w.writestr(`\u00`) - w.writen2(hex[s[i]>>4], hex[s[i]&0xF]) + e.w.writestr(`\u00`) + e.w.writen2(hex[b>>4], hex[b&0xF]) } i++ start = i @@ -558,9 +445,9 @@ func (e *jsonEncDriver) quoteStr(s string) { c, size := utf8.DecodeRuneInString(s[i:]) if c == utf8.RuneError && size == 1 { // meaning invalid encoding (so output as-is) if start < i { - w.writestr(s[start:i]) + e.w.writestr(s[start:i]) } - w.writestr(`\uFFFD`) + e.w.writestr(`\uFFFD`) i++ start = i continue @@ -569,10 +456,10 @@ func (e *jsonEncDriver) quoteStr(s string) { // Both technically valid JSON, but bomb on JSONP, so fix here *unconditionally*. if jsonEscapeMultiByteUnicodeSep && (c == '\u2028' || c == '\u2029') { if start < i { - w.writestr(s[start:i]) + e.w.writestr(s[start:i]) } - w.writestr(`\u202`) - w.writen1(hex[c&0xF]) + e.w.writestr(`\u202`) + e.w.writen1(hex[c&0xF]) i += uint(size) start = i continue @@ -580,80 +467,72 @@ func (e *jsonEncDriver) quoteStr(s string) { i += uint(size) } if start < uint(len(s)) { - w.writestr(s[start:]) + e.w.writestr(s[start:]) } - w.writen1('"') + e.w.writen1('"') } -func (e *jsonEncDriver) atEndOfEncode() { +func (e *jsonEncDriver[T]) atEndOfEncode() { if e.h.TermWhitespace { var c byte = ' ' // default is that scalar is written, so output space if e.e.c != 0 { c = '\n' // for containers (map/list), output a newline } - e.e.encWr.writen1(c) + e.w.writen1(c) } } // ---------- -type jsonDecState struct { - rawext bool // rawext configured on the handle +type jsonDecDriver[T decReader] struct { + noBuiltInTypes + decDriverNoopNumberHelper + h *JsonHandle + d *decoderBase - tok uint8 // used to store the token read right after skipWhiteSpace - _ bool // found null - _ byte // padding - bstr [4]byte // scratch used for string \UXXX parsing + r T // scratch buffer used for base64 decoding (DecodeBytes in reuseBuf mode), // or reading doubleQuoted string (DecodeStringAsBytes, DecodeNaked) - buf *[]byte -} - -func (x jsonDecState) captureState() interface{} { return x } -func (x *jsonDecState) restoreState(v interface{}) { *x = v.(jsonDecState) } + buf []byte -type jsonDecDriver struct { - noBuiltInTypes - decDriverNoopNumberHelper - h *JsonHandle + tok uint8 // used to store the token read right after skipWhiteSpace + _ bool // found null + _ byte // padding + bstr [4]byte // scratch used for string \UXXX parsing - jsonDecState + jsonHandleOpts // se interfaceExtWrapper // ---- cpu cache line boundary? - d Decoder -} - -func (d *jsonDecDriver) descBd() (s string) { panic("descBd unsupported") } + // bytes bool -func (d *jsonDecDriver) decoder() *Decoder { - return &d.d + dec decoderI } -func (d *jsonDecDriver) ReadMapStart() int { +func (d *jsonDecDriver[T]) ReadMapStart() int { d.advance() if d.tok == 'n' { - d.checkLit3([3]byte{'u', 'l', 'l'}, d.d.decRd.readn3()) + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) return containerLenNil } if d.tok != '{' { - d.d.errorf("read map - expect char '%c' but got char '%c'", '{', d.tok) + halt.errorByte("read map - expect char '{' but got char: ", d.tok) } d.tok = 0 return containerLenUnknown } -func (d *jsonDecDriver) ReadArrayStart() int { +func (d *jsonDecDriver[T]) ReadArrayStart() int { d.advance() if d.tok == 'n' { - d.checkLit3([3]byte{'u', 'l', 'l'}, d.d.decRd.readn3()) + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) return containerLenNil } if d.tok != '[' { - d.d.errorf("read array - expect char '%c' but got char '%c'", '[', d.tok) + halt.errorByte("read array - expect char '[' but got char ", d.tok) } d.tok = 0 return containerLenUnknown @@ -665,24 +544,12 @@ func (d *jsonDecDriver) ReadArrayStart() int { // However, this forces CheckBreak to always incur a function call if there was whitespace, // with no clear benefit. -func (d *jsonDecDriver) CheckBreak() bool { +func (d *jsonDecDriver[T]) CheckBreak() bool { d.advance() return d.tok == '}' || d.tok == ']' } -func (d *jsonDecDriver) ReadArrayElem() { - const xc uint8 = ',' - if d.d.c != containerArrayStart { - d.advance() - if d.tok != xc { - d.readDelimError(xc) - } - d.tok = 0 - } -} - -func (d *jsonDecDriver) ReadArrayEnd() { - const xc uint8 = ']' +func (d *jsonDecDriver[T]) checkSep(xc byte) { d.advance() if d.tok != xc { d.readDelimError(xc) @@ -690,118 +557,96 @@ func (d *jsonDecDriver) ReadArrayEnd() { d.tok = 0 } -func (d *jsonDecDriver) ReadMapElemKey() { - const xc uint8 = ',' - if d.d.c != containerMapStart { - d.advance() - if d.tok != xc { - d.readDelimError(xc) - } - d.tok = 0 +func (d *jsonDecDriver[T]) ReadArrayElem(firstTime bool) { + if !firstTime { + d.checkSep(',') } } -func (d *jsonDecDriver) ReadMapElemValue() { - const xc uint8 = ':' - d.advance() - if d.tok != xc { - d.readDelimError(xc) - } - d.tok = 0 +func (d *jsonDecDriver[T]) ReadArrayEnd() { + d.checkSep(']') } -func (d *jsonDecDriver) ReadMapEnd() { - const xc uint8 = '}' - d.advance() - if d.tok != xc { - d.readDelimError(xc) - } - d.tok = 0 +func (d *jsonDecDriver[T]) ReadMapElemKey(firstTime bool) { + d.ReadArrayElem(firstTime) } -func (d *jsonDecDriver) readDelimError(xc uint8) { - d.d.errorf("read json delimiter - expect char '%c' but got char '%c'", xc, d.tok) +func (d *jsonDecDriver[T]) ReadMapElemValue() { + d.checkSep(':') +} + +func (d *jsonDecDriver[T]) ReadMapEnd() { + d.checkSep('}') +} + +//go:inline +func (d *jsonDecDriver[T]) readDelimError(xc uint8) { + halt.errorf("read json delimiter - expect char '%c' but got char '%c'", xc, d.tok) } // MARKER: checkLit takes the readn(3|4) result as a parameter so they can be inlined. // We pass the array directly to errorf, as passing slice pushes past inlining threshold, // and passing slice also might cause allocation of the bs array on the heap. -func (d *jsonDecDriver) checkLit3(got, expect [3]byte) { - d.tok = 0 +func (d *jsonDecDriver[T]) checkLit3(got, expect [3]byte) { if jsonValidateSymbols && got != expect { - d.d.errorf("expecting %s: got %s", expect, got) + jsonCheckLitErr3(got, expect) } + d.tok = 0 } -func (d *jsonDecDriver) checkLit4(got, expect [4]byte) { - d.tok = 0 +func (d *jsonDecDriver[T]) checkLit4(got, expect [4]byte) { if jsonValidateSymbols && got != expect { - d.d.errorf("expecting %s: got %s", expect, got) + jsonCheckLitErr4(got, expect) } + d.tok = 0 } -func (d *jsonDecDriver) skipWhitespace() { - d.tok = d.d.decRd.skipWhitespace() +func (d *jsonDecDriver[T]) skipWhitespace() { + d.tok = d.r.skipWhitespace() } -func (d *jsonDecDriver) advance() { - if d.tok == 0 { +func (d *jsonDecDriver[T]) advance() { + // handles jsonReadNum returning possibly non-printable value as tok + if d.tok < 33 { // d.tok == 0 { d.skipWhitespace() } } -func (d *jsonDecDriver) nextValueBytes(v []byte) []byte { - v, cursor := d.nextValueBytesR(v) - decNextValueBytesHelper{d: &d.d}.bytesRdV(&v, cursor) - return v -} - -func (d *jsonDecDriver) nextValueBytesR(v0 []byte) (v []byte, cursor uint) { - v = v0 - var h = decNextValueBytesHelper{d: &d.d} - dr := &d.d.decRd - +func (d *jsonDecDriver[T]) nextValueBytes() []byte { consumeString := func() { TOP: - bs := dr.jsonReadAsisChars() - h.appendN(&v, bs...) - if bs[len(bs)-1] != '"' { - // last char is '\', so consume next one and try again - h.append1(&v, dr.readn1()) + _, c := d.r.jsonReadAsisChars() + if c == '\\' { // consume next one and try again + d.r.readn1() goto TOP } } - d.advance() // ignore leading whitespace - cursor = d.d.rb.c - 1 // cursor starts just before non-whitespace token + d.advance() // ignore leading whitespace + d.r.startRecording() + // cursor = d.d.rb.c - 1 // cursor starts just before non-whitespace token switch d.tok { default: - h.appendN(&v, dr.jsonReadNum()...) + _, d.tok = d.r.jsonReadNum() case 'n': - d.checkLit3([3]byte{'u', 'l', 'l'}, d.d.decRd.readn3()) - h.appendS(&v, jsonLits[jsonLitN:jsonLitN+4]) + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) case 'f': - d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.d.decRd.readn4()) - h.appendS(&v, jsonLits[jsonLitF:jsonLitF+5]) + d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.r.readn4()) case 't': - d.checkLit3([3]byte{'r', 'u', 'e'}, d.d.decRd.readn3()) - h.appendS(&v, jsonLits[jsonLitT:jsonLitT+4]) + d.checkLit3([3]byte{'r', 'u', 'e'}, d.r.readn3()) case '"': - h.append1(&v, '"') consumeString() + d.tok = 0 case '{', '[': var elem struct{} var stack []struct{} stack = append(stack, elem) - h.append1(&v, d.tok) - for len(stack) != 0 { - c := dr.readn1() - h.append1(&v, c) + c := d.r.readn1() switch c { case '"': consumeString() @@ -811,64 +656,91 @@ func (d *jsonDecDriver) nextValueBytesR(v0 []byte) (v []byte, cursor uint) { stack = stack[:len(stack)-1] } } + d.tok = 0 } - d.tok = 0 - return + return d.r.stopRecording() } -func (d *jsonDecDriver) TryNil() bool { +func (d *jsonDecDriver[T]) TryNil() bool { d.advance() - // we shouldn't try to see if quoted "null" was here, right? - // only the plain string: `null` denotes a nil (ie not quotes) + // we don't try to see if quoted "null" was here. + // only the plain string: null denotes a nil (ie not quotes) if d.tok == 'n' { - d.checkLit3([3]byte{'u', 'l', 'l'}, d.d.decRd.readn3()) + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) return true } return false } -func (d *jsonDecDriver) DecodeBool() (v bool) { +func (d *jsonDecDriver[T]) DecodeBool() (v bool) { d.advance() // bool can be in quotes if and only if it's a map key fquot := d.d.c == containerMapKey && d.tok == '"' if fquot { - d.tok = d.d.decRd.readn1() + d.tok = d.r.readn1() } switch d.tok { case 'f': - d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.d.decRd.readn4()) + d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.r.readn4()) // v = false case 't': - d.checkLit3([3]byte{'r', 'u', 'e'}, d.d.decRd.readn3()) + d.checkLit3([3]byte{'r', 'u', 'e'}, d.r.readn3()) v = true case 'n': - d.checkLit3([3]byte{'u', 'l', 'l'}, d.d.decRd.readn3()) + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) // v = false default: - d.d.errorf("decode bool: got first char %c", d.tok) + halt.errorByte("decode bool: got first char: ", d.tok) // v = false // "unreachable" } if fquot { - d.d.decRd.readn1() + d.r.readn1() } return } -func (d *jsonDecDriver) DecodeTime() (t time.Time) { +func (d *jsonDecDriver[T]) DecodeTime() (t time.Time) { // read string, and pass the string into json.unmarshal d.advance() if d.tok == 'n' { - d.checkLit3([3]byte{'u', 'l', 'l'}, d.d.decRd.readn3()) + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) return } - d.ensureReadingString() - bs := d.readUnescapedString() - t, err := time.Parse(time.RFC3339, stringView(bs)) - d.d.onerror(err) + var bs []byte + // if a number, use the timeFmtNum + if d.tok != '"' { + bs, d.tok = d.r.jsonReadNum() + i := d.parseInt64(bs) + switch d.timeFmtNum { + case jsonTimeFmtUnix: + t = time.Unix(i, 0) + case jsonTimeFmtUnixMilli: + t = time.UnixMilli(i) + case jsonTimeFmtUnixMicro: + t = time.UnixMicro(i) + case jsonTimeFmtUnixNano: + t = time.Unix(0, i) + default: + halt.errorStr("invalid timeFmtNum") + } + return + } + + // d.tok is now '"' + // d.ensureReadingString() + bs = d.readUnescapedString() + var err error + for _, v := range d.timeFmtLayouts { + t, err = time.Parse(v, stringView(bs)) + if err == nil { + return + } + } + halt.errorStr("error decoding time") return } -func (d *jsonDecDriver) ContainerType() (vt valueType) { +func (d *jsonDecDriver[T]) ContainerType() (vt valueType) { // check container type by checking the first char d.advance() @@ -882,7 +754,7 @@ func (d *jsonDecDriver) ContainerType() (vt valueType) { } else if d.tok == '[' { return valueTypeArray } else if d.tok == 'n' { - d.checkLit3([3]byte{'u', 'l', 'l'}, d.d.decRd.readn3()) + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) return valueTypeNil } else if d.tok == '"' { return valueTypeString @@ -890,48 +762,42 @@ func (d *jsonDecDriver) ContainerType() (vt valueType) { return valueTypeUnset } -func (d *jsonDecDriver) decNumBytes() (bs []byte) { +func (d *jsonDecDriver[T]) decNumBytes() (bs []byte) { d.advance() - dr := &d.d.decRd if d.tok == '"' { - bs = dr.readUntil('"') + bs = d.r.jsonReadUntilDblQuote() + d.tok = 0 } else if d.tok == 'n' { - d.checkLit3([3]byte{'u', 'l', 'l'}, dr.readn3()) + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) } else { - if jsonManualInlineDecRdInHotZones { - if dr.bytes { - bs = dr.rb.jsonReadNum() - } else { - bs = dr.ri.jsonReadNum() - } - } else { - bs = dr.jsonReadNum() - } + bs, d.tok = d.r.jsonReadNum() } - d.tok = 0 return } -func (d *jsonDecDriver) DecodeUint64() (u uint64) { +func (d *jsonDecDriver[T]) DecodeUint64() (u uint64) { b := d.decNumBytes() u, neg, ok := parseInteger_bytes(b) if neg { - d.d.errorf("negative number cannot be decoded as uint64") + halt.errorf("negative number cannot be decoded as uint64: %s", any(b)) } if !ok { - d.d.onerror(strconvParseErr(b, "ParseUint")) + halt.onerror(strconvParseErr(b, "ParseUint")) } return } -func (d *jsonDecDriver) DecodeInt64() (v int64) { - b := d.decNumBytes() +func (d *jsonDecDriver[T]) DecodeInt64() (v int64) { + return d.parseInt64(d.decNumBytes()) +} + +func (d *jsonDecDriver[T]) parseInt64(b []byte) (v int64) { u, neg, ok := parseInteger_bytes(b) if !ok { - d.d.onerror(strconvParseErr(b, "ParseInt")) + halt.onerror(strconvParseErr(b, "ParseInt")) } if chkOvf.Uint2Int(u, neg) { - d.d.errorf("overflow decoding number from %s", b) + halt.errorBytes("overflow decoding number from ", b) } if neg { v = -int64(u) @@ -941,85 +807,95 @@ func (d *jsonDecDriver) DecodeInt64() (v int64) { return } -func (d *jsonDecDriver) DecodeFloat64() (f float64) { +func (d *jsonDecDriver[T]) DecodeFloat64() (f float64) { var err error bs := d.decNumBytes() if len(bs) == 0 { return } f, err = parseFloat64(bs) - d.d.onerror(err) + halt.onerror(err) return } -func (d *jsonDecDriver) DecodeFloat32() (f float32) { +func (d *jsonDecDriver[T]) DecodeFloat32() (f float32) { var err error bs := d.decNumBytes() if len(bs) == 0 { return } f, err = parseFloat32(bs) - d.d.onerror(err) + halt.onerror(err) return } -func (d *jsonDecDriver) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { +func (d *jsonDecDriver[T]) advanceNil() (ok bool) { d.advance() if d.tok == 'n' { - d.checkLit3([3]byte{'u', 'l', 'l'}, d.d.decRd.readn3()) + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return true + } + return false +} + +func (d *jsonDecDriver[T]) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + if d.advanceNil() { return } - if ext == nil { - re := rv.(*RawExt) - re.Tag = xtag - d.d.decode(&re.Value) - } else if ext == SelfExt { - d.d.decodeValue(baseRV(rv), d.h.fnNoExt(basetype)) + if ext == SelfExt { + d.dec.decodeAs(rv, basetype, false) } else { - d.d.interfaceExtConvertAndDecode(rv, ext) + d.dec.interfaceExtConvertAndDecode(rv, ext) } } -func (d *jsonDecDriver) decBytesFromArray(bs []byte) []byte { - if bs != nil { - bs = bs[:0] +func (d *jsonDecDriver[T]) DecodeRawExt(re *RawExt) { + if d.advanceNil() { + return + } + d.dec.decode(&re.Value) +} + +func (d *jsonDecDriver[T]) decBytesFromArray(bs []byte) []byte { + d.advance() + if d.tok != ']' { + bs = append(bs, uint8(d.DecodeUint64())) + d.advance() } - d.tok = 0 - bs = append(bs, uint8(d.DecodeUint64())) - d.tok = d.d.decRd.skipWhitespace() // skip(&whitespaceCharBitset) for d.tok != ']' { if d.tok != ',' { - d.d.errorf("read array element - expect char '%c' but got char '%c'", ',', d.tok) + halt.errorByte("read array element - expect char ',' but got char: ", d.tok) } d.tok = 0 bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) - d.tok = d.d.decRd.skipWhitespace() // skip(&whitespaceCharBitset) + d.advance() } d.tok = 0 return bs } -func (d *jsonDecDriver) DecodeBytes(bs []byte) (bsOut []byte) { - d.d.decByteState = decByteStateNone +func (d *jsonDecDriver[T]) DecodeBytes() (bs []byte, state dBytesAttachState) { d.advance() + state = dBytesDetach if d.tok == 'n' { - d.checkLit3([3]byte{'u', 'l', 'l'}, d.d.decRd.readn3()) - return nil + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return } + state = dBytesAttachBuffer // if decoding into raw bytes, and the RawBytesExt is configured, use it to decode. if d.rawext { - bsOut = bs - d.d.interfaceExtConvertAndDecode(&bsOut, d.h.RawBytesExt) + d.buf = d.buf[:0] + d.dec.interfaceExtConvertAndDecode(&d.buf, d.h.RawBytesExt) + bs = d.buf return } // check if an "array" of uint8's (see ContainerType for how to infer if an array) if d.tok == '[' { + d.tok = 0 // bsOut, _ = fastpathTV.DecSliceUint8V(bs, true, d.d) - if bs == nil { - d.d.decByteState = decByteStateReuseBuf - bs = d.d.b[:] - } - return d.decBytesFromArray(bs) + bs = d.decBytesFromArray(d.buf[:0]) + d.buf = bs + return } // base64 encodes []byte{} as "", and we encode nil []byte as null. @@ -1027,115 +903,88 @@ func (d *jsonDecDriver) DecodeBytes(bs []byte) (bsOut []byte) { d.ensureReadingString() bs1 := d.readUnescapedString() + // base64 is most compact of supported formats; it's decodedlen is sufficient for all slen := base64.StdEncoding.DecodedLen(len(bs1)) if slen == 0 { - bsOut = []byte{} - } else if slen <= cap(bs) { - bsOut = bs[:slen] - } else if bs == nil { - d.d.decByteState = decByteStateReuseBuf - bsOut = d.d.blist.check(*d.buf, slen) - bsOut = bsOut[:slen] - *d.buf = bsOut + bs = zeroByteSlice + state = dBytesDetach + } else if slen <= cap(d.buf) { + bs = d.buf[:slen] } else { - bsOut = make([]byte, slen) + d.buf = d.d.blist.putGet(d.buf, slen)[:slen] + bs = d.buf } - slen2, err := base64.StdEncoding.Decode(bsOut, bs1) - if err != nil { - d.d.errorf("error decoding base64 binary '%s': %v", bs1, err) - } - if slen != slen2 { - bsOut = bsOut[:slen2] + var err error + for _, v := range d.byteFmters { + // slen := v.DecodedLen(len(bs1)) + slen, err = v.Decode(bs, bs1) + if err == nil { + bs = bs[:slen] + return + } } + halt.errorf("error decoding byte string '%s': %v", any(bs1), err) return } -func (d *jsonDecDriver) DecodeStringAsBytes() (s []byte) { - d.d.decByteState = decByteStateNone +func (d *jsonDecDriver[T]) DecodeStringAsBytes() (bs []byte, state dBytesAttachState) { d.advance() + var cond bool // common case - hoist outside the switch statement if d.tok == '"' { - return d.dblQuoteStringAsBytes() + d.tok = 0 + bs, cond = d.dblQuoteStringAsBytes() + state = d.d.attachState(cond) + return } + state = dBytesDetach // handle non-string scalar: null, true, false or a number switch d.tok { case 'n': - d.checkLit3([3]byte{'u', 'l', 'l'}, d.d.decRd.readn3()) - return nil // []byte{} + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + // out = nil // []byte{} case 'f': - d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.d.decRd.readn4()) - return jsonLitb[jsonLitF : jsonLitF+5] + d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.r.readn4()) + bs = jsonLitb[jsonLitF : jsonLitF+5] case 't': - d.checkLit3([3]byte{'r', 'u', 'e'}, d.d.decRd.readn3()) - return jsonLitb[jsonLitT : jsonLitT+4] + d.checkLit3([3]byte{'r', 'u', 'e'}, d.r.readn3()) + bs = jsonLitb[jsonLitT : jsonLitT+4] default: // try to parse a valid number - d.tok = 0 - return d.d.decRd.jsonReadNum() + bs, d.tok = d.r.jsonReadNum() + state = d.d.attachState(!d.d.bytes) } + return } -func (d *jsonDecDriver) ensureReadingString() { +func (d *jsonDecDriver[T]) ensureReadingString() { if d.tok != '"' { - d.d.errorf("expecting string starting with '\"'; got '%c'", d.tok) + halt.errorByte("expecting string starting with '\"'; got ", d.tok) } } -func (d *jsonDecDriver) readUnescapedString() (bs []byte) { +func (d *jsonDecDriver[T]) readUnescapedString() (bs []byte) { // d.ensureReadingString() - bs = d.d.decRd.readUntil('"') + bs = d.r.jsonReadUntilDblQuote() d.tok = 0 return } -func (d *jsonDecDriver) dblQuoteStringAsBytes() (buf []byte) { - checkUtf8 := d.h.ValidateUnicode - d.d.decByteState = decByteStateNone - // use a local buf variable, so we don't do pointer chasing within loop - buf = (*d.buf)[:0] - dr := &d.d.decRd - d.tok = 0 +func (d *jsonDecDriver[T]) dblQuoteStringAsBytes() (buf []byte, usingBuf bool) { + bs, c := d.r.jsonReadAsisChars() + if c == '"' { + return bs, !d.d.bytes + } + buf = append(d.buf[:0], bs...) - var bs []byte - var c byte - var firstTime bool = true + checkUtf8 := d.h.ValidateUnicode + usingBuf = true for { - if firstTime { - firstTime = false - if dr.bytes { - bs = dr.rb.jsonReadAsisChars() - if bs[len(bs)-1] == '"' { - d.d.decByteState = decByteStateZerocopy - return bs[:len(bs)-1] - } - goto APPEND - } - } - - if jsonManualInlineDecRdInHotZones { - if dr.bytes { - bs = dr.rb.jsonReadAsisChars() - } else { - bs = dr.ri.jsonReadAsisChars() - } - } else { - bs = dr.jsonReadAsisChars() - } - - APPEND: - _ = bs[0] // bounds check hint - slice must be > 0 elements - buf = append(buf, bs[:len(bs)-1]...) - c = bs[len(bs)-1] - - if c == '"' { - break - } - // c is now '\' - c = dr.readn1() + c = d.r.readn1() switch c { case '"', '\\', '/', '\'': @@ -1153,30 +1002,35 @@ func (d *jsonDecDriver) dblQuoteStringAsBytes() (buf []byte) { case 'u': rr := d.appendStringAsBytesSlashU() if checkUtf8 && rr == unicode.ReplacementChar { - d.d.errorf("invalid UTF-8 character found after: %s", buf) + d.buf = buf + halt.errorBytes("invalid UTF-8 character found after: ", buf) } buf = append(buf, d.bstr[:utf8.EncodeRune(d.bstr[:], rr)]...) default: - *d.buf = buf - d.d.errorf("unsupported escaped value: %c", c) + d.buf = buf + halt.errorByte("unsupported escaped value: ", c) + } + + bs, c = d.r.jsonReadAsisChars() + buf = append(buf, bs...) + if c == '"' { + break } } - *d.buf = buf - d.d.decByteState = decByteStateReuseBuf + d.buf = buf return } -func (d *jsonDecDriver) appendStringAsBytesSlashU() (r rune) { +func (d *jsonDecDriver[T]) appendStringAsBytesSlashU() (r rune) { var rr uint32 - var csu [2]byte - var cs [4]byte = d.d.decRd.readn4() + cs := d.r.readn4() if rr = jsonSlashURune(cs); rr == unicode.ReplacementChar { return unicode.ReplacementChar } r = rune(rr) if utf16.IsSurrogate(r) { - csu = d.d.decRd.readn2() - cs = d.d.decRd.readn4() + csu := d.r.readn2() + cs = d.r.readn4() if csu[0] == '\\' && csu[1] == 'u' { if rr = jsonSlashURune(cs); rr == unicode.ReplacementChar { return unicode.ReplacementChar @@ -1188,49 +1042,22 @@ func (d *jsonDecDriver) appendStringAsBytesSlashU() (r rune) { return } -func jsonSlashURune(cs [4]byte) (rr uint32) { - for _, c := range cs { - // best to use explicit if-else - // - not a table, etc which involve memory loads, array lookup with bounds checks, etc - if c >= '0' && c <= '9' { - rr = rr*16 + uint32(c-jsonU4Chk2) - } else if c >= 'a' && c <= 'f' { - rr = rr*16 + uint32(c-jsonU4Chk1) - } else if c >= 'A' && c <= 'F' { - rr = rr*16 + uint32(c-jsonU4Chk0) - } else { - return unicode.ReplacementChar - } - } - return -} - -func (d *jsonDecDriver) nakedNum(z *fauxUnion, bs []byte) (err error) { - // Note: nakedNum is NEVER called with a zero-length []byte - if d.h.PreferFloat { - z.v = valueTypeFloat - z.f, err = parseFloat64(bs) - } else { - err = parseNumber(bs, z, d.h.SignedInteger) - } - return -} - -func (d *jsonDecDriver) DecodeNaked() { +func (d *jsonDecDriver[T]) DecodeNaked() { z := d.d.naked() d.advance() var bs []byte + var err error switch d.tok { case 'n': - d.checkLit3([3]byte{'u', 'l', 'l'}, d.d.decRd.readn3()) + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) z.v = valueTypeNil case 'f': - d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.d.decRd.readn4()) + d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.r.readn4()) z.v = valueTypeBool z.b = false case 't': - d.checkLit3([3]byte{'r', 'u', 'e'}, d.d.decRd.readn3()) + d.checkLit3([3]byte{'r', 'u', 'e'}, d.r.readn3()) z.v = valueTypeBool z.b = true case '{': @@ -1239,8 +1066,10 @@ func (d *jsonDecDriver) DecodeNaked() { z.v = valueTypeArray // don't consume. kInterfaceNaked will call ReadArrayStart case '"': // if a string, and MapKeyAsString, then try to decode it as a bool or number first - bs = d.dblQuoteStringAsBytes() - if jsonNakedBoolNullInQuotedStr && + d.tok = 0 + bs, z.b = d.dblQuoteStringAsBytes() + att := d.d.attachState(z.b) + if jsonNakedBoolNumInQuotedStr && d.h.MapKeyAsString && len(bs) > 0 && d.d.c == containerMapKey { switch string(bs) { // case "null": // nil is never quoted @@ -1251,213 +1080,146 @@ func (d *jsonDecDriver) DecodeNaked() { case "false": z.v = valueTypeBool z.b = false - default: - // check if a number: float, int or uint - if err := d.nakedNum(z, bs); err != nil { + default: // check if a number: float, int or uint + if err = jsonNakedNum(z, bs, d.h.PreferFloat, d.h.SignedInteger); err != nil { z.v = valueTypeString - z.s = d.d.stringZC(bs) + z.s = d.d.detach2Str(bs, att) } } } else { z.v = valueTypeString - z.s = d.d.stringZC(bs) + z.s = d.d.detach2Str(bs, att) } default: // number - bs = d.d.decRd.jsonReadNum() - d.tok = 0 + bs, d.tok = d.r.jsonReadNum() if len(bs) == 0 { - d.d.errorf("decode number from empty string") + halt.errorStr("decode number from empty string") } - if err := d.nakedNum(z, bs); err != nil { - d.d.errorf("decode number from %s: %v", bs, err) + if err = jsonNakedNum(z, bs, d.h.PreferFloat, d.h.SignedInteger); err != nil { + halt.errorf("decode number from %s: %v", any(bs), err) } } } -//---------------------- - -// JsonHandle is a handle for JSON encoding format. -// -// Json is comprehensively supported: -// - decodes numbers into interface{} as int, uint or float64 -// based on how the number looks and some config parameters e.g. PreferFloat, SignedInt, etc. -// - decode integers from float formatted numbers e.g. 1.27e+8 -// - decode any json value (numbers, bool, etc) from quoted strings -// - configurable way to encode/decode []byte . -// by default, encodes and decodes []byte using base64 Std Encoding -// - UTF-8 support for encoding and decoding -// -// It has better performance than the json library in the standard library, -// by leveraging the performance improvements of the codec library. -// -// In addition, it doesn't read more bytes than necessary during a decode, which allows -// reading multiple values from a stream containing json and non-json content. -// For example, a user can read a json value, then a cbor value, then a msgpack value, -// all from the same stream in sequence. -// -// Note that, when decoding quoted strings, invalid UTF-8 or invalid UTF-16 surrogate pairs are -// not treated as an error. Instead, they are replaced by the Unicode replacement character U+FFFD. -// -// Note also that the float values for NaN, +Inf or -Inf are encoded as null, -// as suggested by NOTE 4 of the ECMA-262 ECMAScript Language Specification 5.1 edition. -// see http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf . -// -// Note the following behaviour differences vs std-library encoding/json package: -// - struct field names matched in case-sensitive manner -type JsonHandle struct { - textEncodingType - BasicHandle - - // Indent indicates how a value is encoded. - // - If positive, indent by that number of spaces. - // - If negative, indent by that number of tabs. - Indent int8 - - // IntegerAsString controls how integers (signed and unsigned) are encoded. - // - // Per the JSON Spec, JSON numbers are 64-bit floating point numbers. - // Consequently, integers > 2^53 cannot be represented as a JSON number without losing precision. - // This can be mitigated by configuring how to encode integers. - // - // IntegerAsString interpretes the following values: - // - if 'L', then encode integers > 2^53 as a json string. - // - if 'A', then encode all integers as a json string - // containing the exact integer representation as a decimal. - // - else encode all integers as a json number (default) - IntegerAsString byte - - // HTMLCharsAsIs controls how to encode some special characters to html: < > & - // - // By default, we encode them as \uXXX - // to prevent security holes when served from some browsers. - HTMLCharsAsIs bool - - // PreferFloat says that we will default to decoding a number as a float. - // If not set, we will examine the characters of the number and decode as an - // integer type if it doesn't have any of the characters [.eE]. - PreferFloat bool +func (e *jsonEncDriver[T]) reset() { + e.dl = 0 + // e.resetState() + // (htmlasis && jsonCharSafeSet.isset(b)) || jsonCharHtmlSafeSet.isset(b) + // cache values from the handle + e.typical = e.h.typical() + if e.h.HTMLCharsAsIs { + e.s = &jsonCharSafeBitset + } else { + e.s = &jsonCharHtmlSafeBitset + } + e.di = int8(e.h.Indent) + e.d = e.h.Indent != 0 + e.ks = e.h.MapKeyAsString + e.is = e.h.IntegerAsString - // TermWhitespace says that we add a whitespace character - // at the end of an encoding. - // - // The whitespace is important, especially if using numbers in a context - // where multiple items are written to a stream. - TermWhitespace bool + var ho jsonHandleOpts + ho.reset(e.h) + e.timeFmt = ho.timeFmt + e.bytesFmt = ho.bytesFmt + e.timeFmtLayout = "" + e.byteFmter = nil + if len(ho.timeFmtLayouts) > 0 { + e.timeFmtLayout = ho.timeFmtLayouts[0] + } + if len(ho.byteFmters) > 0 { + e.byteFmter = ho.byteFmters[0] + } + e.rawext = ho.rawext +} - // MapKeyAsString says to encode all map keys as strings. - // - // Use this to enforce strict json output. - // The only caveat is that nil value is ALWAYS written as null (never as "null") - MapKeyAsString bool +func (d *jsonDecDriver[T]) reset() { + d.buf = d.d.blist.check(d.buf, 256) + d.tok = 0 + // d.resetState() + d.jsonHandleOpts.reset(d.h) +} - // _ uint64 // padding (cache line) +// ---- +// +// The following below are similar across all format files (except for the format name). +// +// We keep them together here, so that we can easily copy and compare. - // Note: below, we store hardly-used items e.g. RawBytesExt. - // These values below may straddle a cache line, but they are hardly-used, - // so shouldn't contribute to false-sharing except in rare cases. +// ---- - // RawBytesExt, if configured, is used to encode and decode raw bytes in a custom way. - // If not configured, raw bytes are encoded to/from base64 text. - RawBytesExt InterfaceExt +func (d *jsonEncDriver[T]) init(hh Handle, shared *encoderBase, enc encoderI) (fp interface{}) { + callMake(&d.w) + d.h = hh.(*JsonHandle) + d.e = shared + if shared.bytes { + fp = jsonFpEncBytes + } else { + fp = jsonFpEncIO + } + // d.w.init() + d.init2(enc) + return } -func (h *JsonHandle) isJson() bool { return true } - -// Name returns the name of the handle: json -func (h *JsonHandle) Name() string { return "json" } +func (e *jsonEncDriver[T]) writeBytesAsis(b []byte) { e.w.writeb(b) } -func (h *JsonHandle) desc(bd byte) string { return string(bd) } +// func (e *jsonEncDriver[T]) writeStringAsisDblQuoted(v string) { e.w.writeqstr(v) } +func (e *jsonEncDriver[T]) writerEnd() { e.w.end() } -func (h *JsonHandle) typical() bool { - return h.Indent == 0 && !h.MapKeyAsString && h.IntegerAsString != 'A' && h.IntegerAsString != 'L' +func (e *jsonEncDriver[T]) resetOutBytes(out *[]byte) { + e.w.resetBytes(*out, out) } -func (h *JsonHandle) newEncDriver() encDriver { - var e = &jsonEncDriver{h: h} - // var x []byte - // e.buf = &x - e.e.e = e - e.e.js = true - e.e.init(h) - e.reset() - return e -} - -func (h *JsonHandle) newDecDriver() decDriver { - var d = &jsonDecDriver{h: h} - var x []byte - d.buf = &x - d.d.d = d - d.d.js = true - d.d.jsms = h.MapKeyAsString - d.d.init(h) - d.reset() - return d -} - -func (e *jsonEncDriver) resetState() { - e.dl = 0 +func (e *jsonEncDriver[T]) resetOutIO(out io.Writer) { + e.w.resetIO(out, e.h.WriterBufferSize, &e.e.blist) } -func (e *jsonEncDriver) reset() { - e.resetState() - // (htmlasis && jsonCharSafeSet.isset(b)) || jsonCharHtmlSafeSet.isset(b) - // cache values from the handle - e.typical = e.h.typical() - if e.h.HTMLCharsAsIs { - e.s = &jsonCharSafeSet +// ---- + +func (d *jsonDecDriver[T]) init(hh Handle, shared *decoderBase, dec decoderI) (fp interface{}) { + callMake(&d.r) + d.h = hh.(*JsonHandle) + d.d = shared + if shared.bytes { + fp = jsonFpDecBytes } else { - e.s = &jsonCharHtmlSafeSet + fp = jsonFpDecIO } - e.rawext = e.h.RawBytesExt != nil - e.di = int8(e.h.Indent) - e.d = e.h.Indent != 0 - e.ks = e.h.MapKeyAsString - e.is = e.h.IntegerAsString + // d.r.init() + d.init2(dec) + return } -func (d *jsonDecDriver) resetState() { - *d.buf = d.d.blist.check(*d.buf, 256) - d.tok = 0 +func (d *jsonDecDriver[T]) NumBytesRead() int { + return int(d.r.numread()) } -func (d *jsonDecDriver) reset() { - d.resetState() - d.rawext = d.h.RawBytesExt != nil +func (d *jsonDecDriver[T]) resetInBytes(in []byte) { + d.r.resetBytes(in) } -func jsonFloatStrconvFmtPrec64(f float64) (fmt byte, prec int8) { - fmt = 'f' - prec = -1 - fbits := math.Float64bits(f) - abs := math.Float64frombits(fbits &^ (1 << 63)) - if abs == 0 || abs == 1 { - prec = 1 - } else if abs < 1e-6 || abs >= 1e21 { - fmt = 'e' - } else if noFrac64(fbits) { - prec = 1 - } - return +func (d *jsonDecDriver[T]) resetInIO(r io.Reader) { + d.r.resetIO(r, d.h.ReaderBufferSize, d.h.MaxInitLen, &d.d.blist) } -func jsonFloatStrconvFmtPrec32(f float32) (fmt byte, prec int8) { - fmt = 'f' - prec = -1 - // directly handle Modf (to get fractions) and Abs (to get absolute) - fbits := math.Float32bits(f) - abs := math.Float32frombits(fbits &^ (1 << 31)) - if abs == 0 || abs == 1 { - prec = 1 - } else if abs < 1e-6 || abs >= 1e21 { - fmt = 'e' - } else if noFrac32(fbits) { - prec = 1 - } +// ---- (custom stanza) + +func (d *jsonDecDriver[T]) descBd() (s string) { + halt.onerror(errJsonNoBd) return } -var _ decDriverContainerTracker = (*jsonDecDriver)(nil) -var _ encDriverContainerTracker = (*jsonEncDriver)(nil) -var _ decDriver = (*jsonDecDriver)(nil) -var _ encDriver = (*jsonEncDriver)(nil) +func (d *jsonEncDriver[T]) init2(enc encoderI) { + d.enc = enc + // d.e.js = true +} + +func (d *jsonDecDriver[T]) init2(dec decoderI) { + d.dec = dec + // var x []byte + // d.buf = &x + // d.buf = new([]byte) + d.buf = d.buf[:0] + // d.d.js = true + d.d.jsms = d.h.MapKeyAsString +} diff --git a/vendor/github.com/ugorji/go/codec/json.mono.generated.go b/vendor/github.com/ugorji/go/codec/json.mono.generated.go new file mode 100644 index 0000000..12da25c --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/json.mono.generated.go @@ -0,0 +1,8339 @@ +//go:build !notmono && !codec.notmono + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "encoding" + + "encoding/base64" + "io" + "math" + "reflect" + "slices" + "sort" + "strconv" + "sync" + "time" + "unicode" + "unicode/utf16" + "unicode/utf8" +) + +type helperEncDriverJsonBytes struct{} +type encFnJsonBytes struct { + i encFnInfo + fe func(*encoderJsonBytes, *encFnInfo, reflect.Value) +} +type encRtidFnJsonBytes struct { + rtid uintptr + fn *encFnJsonBytes +} +type encoderJsonBytes struct { + dh helperEncDriverJsonBytes + fp *fastpathEsJsonBytes + e jsonEncDriverBytes + encoderBase +} +type helperDecDriverJsonBytes struct{} +type decFnJsonBytes struct { + i decFnInfo + fd func(*decoderJsonBytes, *decFnInfo, reflect.Value) +} +type decRtidFnJsonBytes struct { + rtid uintptr + fn *decFnJsonBytes +} +type decoderJsonBytes struct { + dh helperDecDriverJsonBytes + fp *fastpathDsJsonBytes + d jsonDecDriverBytes + decoderBase +} +type jsonEncDriverBytes struct { + noBuiltInTypes + h *JsonHandle + e *encoderBase + s *bitset256 + + w bytesEncAppender + + enc encoderI + + timeFmtLayout string + byteFmter jsonBytesFmter + + timeFmt jsonTimeFmt + bytesFmt jsonBytesFmt + + di int8 + d bool + dl uint16 + + ks bool + is byte + + typical bool + + rawext bool + + b [48]byte +} +type jsonDecDriverBytes struct { + noBuiltInTypes + decDriverNoopNumberHelper + h *JsonHandle + d *decoderBase + + r bytesDecReader + + buf []byte + + tok uint8 + _ bool + _ byte + bstr [4]byte + + jsonHandleOpts + + dec decoderI +} + +func (e *encoderJsonBytes) rawExt(_ *encFnInfo, rv reflect.Value) { + if re := rv2i(rv).(*RawExt); re == nil { + e.e.EncodeNil() + } else { + e.e.EncodeRawExt(re) + } +} + +func (e *encoderJsonBytes) ext(f *encFnInfo, rv reflect.Value) { + e.e.EncodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (e *encoderJsonBytes) selferMarshal(_ *encFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecEncodeSelf(&Encoder{e}) +} + +func (e *encoderJsonBytes) binaryMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.BinaryMarshaler).MarshalBinary() + e.marshalRaw(bs, fnerr) +} + +func (e *encoderJsonBytes) textMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.TextMarshaler).MarshalText() + e.marshalUtf8(bs, fnerr) +} + +func (e *encoderJsonBytes) jsonMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(jsonMarshaler).MarshalJSON() + e.marshalAsis(bs, fnerr) +} + +func (e *encoderJsonBytes) raw(_ *encFnInfo, rv reflect.Value) { + e.rawBytes(rv2i(rv).(Raw)) +} + +func (e *encoderJsonBytes) encodeComplex64(v complex64) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat32(real(v)) +} + +func (e *encoderJsonBytes) encodeComplex128(v complex128) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat64(real(v)) +} + +func (e *encoderJsonBytes) kBool(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeBool(rvGetBool(rv)) +} + +func (e *encoderJsonBytes) kTime(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeTime(rvGetTime(rv)) +} + +func (e *encoderJsonBytes) kString(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeString(rvGetString(rv)) +} + +func (e *encoderJsonBytes) kFloat32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat32(rvGetFloat32(rv)) +} + +func (e *encoderJsonBytes) kFloat64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat64(rvGetFloat64(rv)) +} + +func (e *encoderJsonBytes) kComplex64(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex64(rvGetComplex64(rv)) +} + +func (e *encoderJsonBytes) kComplex128(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex128(rvGetComplex128(rv)) +} + +func (e *encoderJsonBytes) kInt(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt(rv))) +} + +func (e *encoderJsonBytes) kInt8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt8(rv))) +} + +func (e *encoderJsonBytes) kInt16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt16(rv))) +} + +func (e *encoderJsonBytes) kInt32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt32(rv))) +} + +func (e *encoderJsonBytes) kInt64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt64(rv))) +} + +func (e *encoderJsonBytes) kUint(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint(rv))) +} + +func (e *encoderJsonBytes) kUint8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint8(rv))) +} + +func (e *encoderJsonBytes) kUint16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint16(rv))) +} + +func (e *encoderJsonBytes) kUint32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint32(rv))) +} + +func (e *encoderJsonBytes) kUint64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint64(rv))) +} + +func (e *encoderJsonBytes) kUintptr(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUintptr(rv))) +} + +func (e *encoderJsonBytes) kSeqFn(rt reflect.Type) (fn *encFnJsonBytes) { + + if rt = baseRT(rt); rt.Kind() != reflect.Interface { + fn = e.fn(rt) + } + return +} + +func (e *encoderJsonBytes) kArrayWMbs(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(l) + e.mapStart(l >> 1) + + var fn *encFnJsonBytes + builtin := ti.tielem.flagEncBuiltin + if !builtin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerMapKey + e.e.WriteMapElemKey(true) + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(false) + } else { + e.mapElemValue() + } + } + e.c = 0 + e.e.WriteMapEnd() + +} + +func (e *encoderJsonBytes) kArrayW(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l <= 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(l) + + var fn *encFnJsonBytes + if !ti.tielem.flagEncBuiltin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerArrayElem + e.e.WriteArrayElem(true) + builtin := ti.tielem.flagEncBuiltin + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + e.c = containerArrayElem + e.e.WriteArrayElem(false) + } + + e.c = 0 + e.e.WriteArrayEnd() +} + +func (e *encoderJsonBytes) kChan(f *encFnInfo, rv reflect.Value) { + if f.ti.chandir&uint8(reflect.RecvDir) == 0 { + halt.errorStr("send-only channel cannot be encoded") + } + if !f.ti.mbs && uint8TypId == rt2id(f.ti.elem) { + e.kSliceBytesChan(rv) + return + } + rtslice := reflect.SliceOf(f.ti.elem) + rv = chanToSlice(rv, rtslice, e.h.ChanRecvTimeout) + ti := e.h.getTypeInfo(rt2id(rtslice), rtslice) + if f.ti.mbs { + e.kArrayWMbs(rv, ti, true) + } else { + e.kArrayW(rv, ti, true) + } +} + +func (e *encoderJsonBytes) kSlice(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, true) + } else if f.ti.rtid == uint8SliceTypId || uint8TypId == rt2id(f.ti.elem) { + + e.e.EncodeBytes(rvGetBytes(rv)) + } else { + e.kArrayW(rv, f.ti, true) + } +} + +func (e *encoderJsonBytes) kArray(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, false) + } else if handleBytesWithinKArray && uint8TypId == rt2id(f.ti.elem) { + e.e.EncodeStringBytesRaw(rvGetArrayBytes(rv, nil)) + } else { + e.kArrayW(rv, f.ti, false) + } +} + +func (e *encoderJsonBytes) kSliceBytesChan(rv reflect.Value) { + + bs0 := e.blist.peek(32, true) + bs := bs0 + + irv := rv2i(rv) + ch, ok := irv.(<-chan byte) + if !ok { + ch = irv.(chan byte) + } + +L1: + switch timeout := e.h.ChanRecvTimeout; { + case timeout == 0: + for { + select { + case b := <-ch: + bs = append(bs, b) + default: + break L1 + } + } + case timeout > 0: + tt := time.NewTimer(timeout) + for { + select { + case b := <-ch: + bs = append(bs, b) + case <-tt.C: + + break L1 + } + } + default: + for b := range ch { + bs = append(bs, b) + } + } + + e.e.EncodeBytes(bs) + e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.blist.put(bs0) + } +} + +func (e *encoderJsonBytes) kStructFieldKey(keyType valueType, encName string) { + + if keyType == valueTypeString { + e.e.EncodeString(encName) + } else if keyType == valueTypeInt { + e.e.EncodeInt(must.Int(strconv.ParseInt(encName, 10, 64))) + } else if keyType == valueTypeUint { + e.e.EncodeUint(must.Uint(strconv.ParseUint(encName, 10, 64))) + } else if keyType == valueTypeFloat { + e.e.EncodeFloat64(must.Float(strconv.ParseFloat(encName, 64))) + } else { + halt.errorStr2("invalid struct key type: ", keyType.String()) + } + +} + +func (e *encoderJsonBytes) kStructSimple(f *encFnInfo, rv reflect.Value) { + _ = e.e + tisfi := f.ti.sfi.source() + + chkCirRef := e.h.CheckCircularRef + var si *structFieldInfo + var j int + + if f.ti.toArray || e.h.StructToArray { + if len(tisfi) == 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } else { + if len(tisfi) == 0 { + e.e.WriteMapEmpty() + return + } + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + e.mapStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.EncodeStringNoEscape4Json(si.encName) + e.mapElemValue() + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteMapEnd() + } +} + +func (e *encoderJsonBytes) kStruct(f *encFnInfo, rv reflect.Value) { + _ = e.e + ti := f.ti + toMap := !(ti.toArray || e.h.StructToArray) + var mf map[string]interface{} + if ti.flagMissingFielder { + toMap = true + mf = rv2i(rv).(MissingFielder).CodecMissingFields() + } else if ti.flagMissingFielderPtr { + toMap = true + if rv.CanAddr() { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder).CodecMissingFields() + } else { + mf = rv2i(e.addrRV(rv, ti.rt, ti.ptr)).(MissingFielder).CodecMissingFields() + } + } + newlen := len(mf) + tisfi := ti.sfi.source() + newlen += len(tisfi) + + var fkvs = e.slist.get(newlen)[:newlen] + + recur := e.h.RecursiveEmptyCheck + chkCirRef := e.h.CheckCircularRef + + var xlen int + + var kv sfiRv + var j int + var sf encStructFieldObj + if toMap { + newlen = 0 + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + for _, si := range tisfi { + + if si.omitEmpty { + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyValue(kv.r, e.h.TypeInfos, recur) { + continue + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[newlen] = kv + newlen++ + } + + var mf2s []stringIntf + if len(mf) != 0 { + mf2s = make([]stringIntf, 0, len(mf)) + for k, v := range mf { + if k == "" { + continue + } + if ti.infoFieldOmitempty && isEmptyValue(reflect.ValueOf(v), e.h.TypeInfos, recur) { + continue + } + mf2s = append(mf2s, stringIntf{k, v}) + } + } + + xlen = newlen + len(mf2s) + if xlen == 0 { + e.e.WriteMapEmpty() + goto END + } + + e.mapStart(xlen) + + if len(mf2s) != 0 && e.h.Canonical { + mf2w := make([]encStructFieldObj, newlen+len(mf2s)) + for j = 0; j < newlen; j++ { + kv = fkvs[j] + mf2w[j] = encStructFieldObj{kv.v.encName, kv.r, nil, true, + !kv.v.encNameEscape4Json, kv.v.encBuiltin} + } + for _, v := range mf2s { + mf2w[j] = encStructFieldObj{v.v, reflect.Value{}, v.i, false, false, false} + j++ + } + sort.Sort((encStructFieldObjSlice)(mf2w)) + for j, sf = range mf2w { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && sf.noEsc4json { + e.e.EncodeStringNoEscape4Json(sf.key) + } else { + e.kStructFieldKey(ti.keyType, sf.key) + } + e.mapElemValue() + if sf.isRv { + if sf.builtin { + e.encodeIB(rv2i(baseRVRV(sf.rv))) + } else { + e.encodeValue(sf.rv, nil) + } + } else { + if !e.encodeBuiltin(sf.intf) { + e.encodeR(reflect.ValueOf(sf.intf)) + } + + } + } + } else { + keytyp := ti.keyType + for j = 0; j < newlen; j++ { + kv = fkvs[j] + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && !kv.v.encNameEscape4Json { + e.e.EncodeStringNoEscape4Json(kv.v.encName) + } else { + e.kStructFieldKey(keytyp, kv.v.encName) + } + e.mapElemValue() + if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + for _, v := range mf2s { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.kStructFieldKey(keytyp, v.v) + e.mapElemValue() + if !e.encodeBuiltin(v.i) { + e.encodeR(reflect.ValueOf(v.i)) + } + + j++ + } + } + + e.c = 0 + e.e.WriteMapEnd() + } else { + newlen = len(tisfi) + for i, si := range tisfi { + + if si.omitEmpty { + + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyContainerValue(kv.r, e.h.TypeInfos, recur) { + kv.r = reflect.Value{} + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[i] = kv + } + + if newlen == 0 { + e.e.WriteArrayEmpty() + goto END + } + + e.arrayStart(newlen) + for j = 0; j < newlen; j++ { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + kv = fkvs[j] + if !kv.r.IsValid() { + e.e.EncodeNil() + } else if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } + +END: + + e.slist.put(fkvs) +} + +func (e *encoderJsonBytes) kMap(f *encFnInfo, rv reflect.Value) { + _ = e.e + l := rvLenMap(rv) + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.mapStart(l) + + var keyFn, valFn *encFnJsonBytes + + ktypeKind := reflect.Kind(f.ti.keykind) + vtypeKind := reflect.Kind(f.ti.elemkind) + + rtval := f.ti.elem + rtvalkind := vtypeKind + for rtvalkind == reflect.Ptr { + rtval = rtval.Elem() + rtvalkind = rtval.Kind() + } + if rtvalkind != reflect.Interface { + valFn = e.fn(rtval) + } + + var rvv = mapAddrLoopvarRV(f.ti.elem, vtypeKind) + + rtkey := f.ti.key + var keyTypeIsString = stringTypId == rt2id(rtkey) + if keyTypeIsString { + keyFn = e.fn(rtkey) + } else { + for rtkey.Kind() == reflect.Ptr { + rtkey = rtkey.Elem() + } + if rtkey.Kind() != reflect.Interface { + keyFn = e.fn(rtkey) + } + } + + if e.h.Canonical { + e.kMapCanonical(f.ti, rv, rvv, keyFn, valFn) + e.c = 0 + e.e.WriteMapEnd() + return + } + + var rvk = mapAddrLoopvarRV(f.ti.key, ktypeKind) + + var it mapIter + mapRange(&it, rv, rvk, rvv, true) + + kbuiltin := f.ti.tikey.flagEncBuiltin + vbuiltin := f.ti.tielem.flagEncBuiltin + for j := 0; it.Next(); j++ { + rv = it.Key() + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if keyTypeIsString { + e.e.EncodeString(rvGetString(rv)) + } else if kbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(rv, keyFn) + } + e.mapElemValue() + rv = it.Value() + if vbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(it.Value(), valFn) + } + } + it.Done() + + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonBytes) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valFn *encFnJsonBytes) { + _ = e.e + + rtkey := ti.key + rtkeydecl := rtkey.PkgPath() == "" && rtkey.Name() != "" + + mks := rv.MapKeys() + rtkeyKind := rtkey.Kind() + mparams := getMapReqParams(ti) + + switch rtkeyKind { + case reflect.Bool: + + if len(mks) == 2 && mks[0].Bool() { + mks[0], mks[1] = mks[1], mks[0] + } + for i := range mks { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeBool(mks[i].Bool()) + } else { + e.encodeValueNonNil(mks[i], keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mks[i], rvv, mparams), valFn) + } + case reflect.String: + mksv := make([]orderedRv[string], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rvGetString(k) + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeString(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr: + mksv := make([]orderedRv[uint64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Uint() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeUint(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + mksv := make([]orderedRv[int64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Int() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeInt(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float32: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat32(float32(mksv[i].v)) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float64: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat64(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + default: + if rtkey == timeTyp { + mksv := make([]timeRv, len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rv2i(k).(time.Time) + } + slices.SortFunc(mksv, cmpTimeRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeTime(mksv[i].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + break + } + + bs0 := e.blist.get(len(mks) * 16) + mksv := bs0 + mksbv := make([]bytesRv, len(mks)) + + sideEncode(e.hh, &e.h.sideEncPool, func(se encoderI) { + se.ResetBytes(&mksv) + for i, k := range mks { + v := &mksbv[i] + l := len(mksv) + se.setContainerState(containerMapKey) + se.encodeR(baseRVRV(k)) + se.atEndOfEncode() + se.writerEnd() + v.r = k + v.v = mksv[l:] + } + }) + + slices.SortFunc(mksbv, cmpBytesRv) + for j := range mksbv { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.writeBytesAsis(mksbv[j].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksbv[j].r, rvv, mparams), valFn) + } + e.blist.put(mksv) + if !byteSliceSameData(bs0, mksv) { + e.blist.put(bs0) + } + } +} + +func (e *encoderJsonBytes) init(h Handle) { + initHandle(h) + callMake(&e.e) + e.hh = h + e.h = h.getBasicHandle() + + e.err = errEncoderNotInitialized + + e.fp = e.e.init(h, &e.encoderBase, e).(*fastpathEsJsonBytes) + + if e.bytes { + e.rtidFn = &e.h.rtidFnsEncBytes + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtBytes + } else { + e.rtidFn = &e.h.rtidFnsEncIO + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtIO + } + + e.reset() +} + +func (e *encoderJsonBytes) reset() { + e.e.reset() + if e.ci != nil { + e.ci = e.ci[:0] + } + e.c = 0 + e.calls = 0 + e.seq = 0 + e.err = nil +} + +func (e *encoderJsonBytes) Encode(v interface{}) (err error) { + + defer panicValToErr(e, callRecoverSentinel, &e.err, &err, debugging) + e.mustEncode(v) + return +} + +func (e *encoderJsonBytes) MustEncode(v interface{}) { + defer panicValToErr(e, callRecoverSentinel, &e.err, nil, true) + e.mustEncode(v) + return +} + +func (e *encoderJsonBytes) mustEncode(v interface{}) { + halt.onerror(e.err) + if e.hh == nil { + halt.onerror(errNoFormatHandle) + } + + e.calls++ + if !e.encodeBuiltin(v) { + e.encodeR(reflect.ValueOf(v)) + } + + e.calls-- + if e.calls == 0 { + e.e.atEndOfEncode() + e.e.writerEnd() + } +} + +func (e *encoderJsonBytes) encodeI(iv interface{}) { + if !e.encodeBuiltin(iv) { + e.encodeR(reflect.ValueOf(iv)) + } +} + +func (e *encoderJsonBytes) encodeIB(iv interface{}) { + if !e.encodeBuiltin(iv) { + + halt.errorStr("[should not happen] invalid type passed to encodeBuiltin") + } +} + +func (e *encoderJsonBytes) encodeR(base reflect.Value) { + e.encodeValue(base, nil) +} + +func (e *encoderJsonBytes) encodeBuiltin(iv interface{}) (ok bool) { + ok = true + switch v := iv.(type) { + case nil: + e.e.EncodeNil() + + case Raw: + e.rawBytes(v) + case string: + e.e.EncodeString(v) + case bool: + e.e.EncodeBool(v) + case int: + e.e.EncodeInt(int64(v)) + case int8: + e.e.EncodeInt(int64(v)) + case int16: + e.e.EncodeInt(int64(v)) + case int32: + e.e.EncodeInt(int64(v)) + case int64: + e.e.EncodeInt(v) + case uint: + e.e.EncodeUint(uint64(v)) + case uint8: + e.e.EncodeUint(uint64(v)) + case uint16: + e.e.EncodeUint(uint64(v)) + case uint32: + e.e.EncodeUint(uint64(v)) + case uint64: + e.e.EncodeUint(v) + case uintptr: + e.e.EncodeUint(uint64(v)) + case float32: + e.e.EncodeFloat32(v) + case float64: + e.e.EncodeFloat64(v) + case complex64: + e.encodeComplex64(v) + case complex128: + e.encodeComplex128(v) + case time.Time: + e.e.EncodeTime(v) + case []byte: + e.e.EncodeBytes(v) + default: + + ok = !skipFastpathTypeSwitchInDirectCall && e.dh.fastpathEncodeTypeSwitch(iv, e) + } + return +} + +func (e *encoderJsonBytes) encodeValue(rv reflect.Value, fn *encFnJsonBytes) { + + var ciPushes int + + var rvp reflect.Value + var rvpValid bool + +RV: + switch rv.Kind() { + case reflect.Ptr: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = true + rvp = rv + rv = rv.Elem() + + if e.h.CheckCircularRef && e.ci.canPushElemKind(rv.Kind()) { + e.ci.push(rv2i(rvp)) + ciPushes++ + } + goto RV + case reflect.Interface: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = false + rvp = reflect.Value{} + rv = rv.Elem() + fn = nil + goto RV + case reflect.Map: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteMapEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Slice, reflect.Chan: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteArrayEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Invalid, reflect.Func: + e.e.EncodeNil() + goto END + } + + if fn == nil { + fn = e.fn(rv.Type()) + } + + if !fn.i.addrE { + + } else if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + fn.fe(e, &fn.i, rv) + +END: + if ciPushes > 0 { + e.ci.pop(ciPushes) + } +} + +func (e *encoderJsonBytes) encodeValueNonNil(rv reflect.Value, fn *encFnJsonBytes) { + + if fn.i.addrE { + if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + } + fn.fe(e, &fn.i, rv) +} + +func (e *encoderJsonBytes) encodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + e.encodeValue(baseRV(v), e.fn(t)) + } else { + e.encodeValue(baseRV(v), e.fnNoExt(t)) + } +} + +func (e *encoderJsonBytes) marshalUtf8(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.EncodeString(stringView(bs)) + } +} + +func (e *encoderJsonBytes) marshalAsis(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.writeBytesAsis(bs) + } +} + +func (e *encoderJsonBytes) marshalRaw(bs []byte, fnerr error) { + halt.onerror(fnerr) + e.e.EncodeBytes(bs) +} + +func (e *encoderJsonBytes) rawBytes(vv Raw) { + v := []byte(vv) + if !e.h.Raw { + halt.errorBytes("Raw values cannot be encoded: ", v) + } + e.e.writeBytesAsis(v) +} + +func (e *encoderJsonBytes) fn(t reflect.Type) *encFnJsonBytes { + return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false) +} + +func (e *encoderJsonBytes) fnNoExt(t reflect.Type) *encFnJsonBytes { + return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true) +} + +func (e *encoderJsonBytes) mapStart(length int) { + e.e.WriteMapStart(length) + e.c = containerMapStart +} + +func (e *encoderJsonBytes) mapElemValue() { + e.e.WriteMapElemValue() + e.c = containerMapValue +} + +func (e *encoderJsonBytes) arrayStart(length int) { + e.e.WriteArrayStart(length) + e.c = containerArrayStart +} + +func (e *encoderJsonBytes) writerEnd() { + e.e.writerEnd() +} + +func (e *encoderJsonBytes) atEndOfEncode() { + e.e.atEndOfEncode() +} + +func (e *encoderJsonBytes) Reset(w io.Writer) { + if e.bytes { + halt.onerror(errEncNoResetBytesWithWriter) + } + e.reset() + if w == nil { + w = io.Discard + } + e.e.resetOutIO(w) +} + +func (e *encoderJsonBytes) ResetBytes(out *[]byte) { + if !e.bytes { + halt.onerror(errEncNoResetWriterWithBytes) + } + e.resetBytes(out) +} + +func (e *encoderJsonBytes) resetBytes(out *[]byte) { + e.reset() + if out == nil { + out = &bytesEncAppenderDefOut + } + e.e.resetOutBytes(out) +} + +func (helperEncDriverJsonBytes) newEncoderBytes(out *[]byte, h Handle) *encoderJsonBytes { + var c1 encoderJsonBytes + c1.bytes = true + c1.init(h) + c1.ResetBytes(out) + return &c1 +} + +func (helperEncDriverJsonBytes) newEncoderIO(out io.Writer, h Handle) *encoderJsonBytes { + var c1 encoderJsonBytes + c1.bytes = false + c1.init(h) + c1.Reset(out) + return &c1 +} + +func (helperEncDriverJsonBytes) encFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathEsJsonBytes) (f *fastpathEJsonBytes, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperEncDriverJsonBytes) encFindRtidFn(s []encRtidFnJsonBytes, rtid uintptr) (i uint, fn *encFnJsonBytes) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperEncDriverJsonBytes) encFromRtidFnSlice(fns *atomicRtidFnSlice) (s []encRtidFnJsonBytes) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]encRtidFnJsonBytes](v)) + } + return +} + +func (dh helperEncDriverJsonBytes) encFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, + x *BasicHandle, fp *fastpathEsJsonBytes, checkExt bool) (fn *encFnJsonBytes) { + return dh.encFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperEncDriverJsonBytes) encFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsJsonBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnJsonBytes) { + rtid := rt2id(rt) + var sp []encRtidFnJsonBytes = dh.encFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.encFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.encFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperEncDriverJsonBytes) encFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsJsonBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnJsonBytes) { + + fn = dh.encFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []encRtidFnJsonBytes + mu.Lock() + sp = dh.encFromRtidFnSlice(fns) + + if sp == nil { + sp = []encRtidFnJsonBytes{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.encFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]encRtidFnJsonBytes, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = encRtidFnJsonBytes{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperEncDriverJsonBytes) encFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathEsJsonBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnJsonBytes) { + fn = new(encFnJsonBytes) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + if rtid == timeTypId && timeBuiltin { + fn.fe = (*encoderJsonBytes).kTime + } else if rtid == rawTypId { + fn.fe = (*encoderJsonBytes).raw + } else if rtid == rawExtTypId { + fn.fe = (*encoderJsonBytes).rawExt + fi.addrE = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fe = (*encoderJsonBytes).ext + if rk == reflect.Struct || rk == reflect.Array { + fi.addrE = true + } + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fe = (*encoderJsonBytes).selferMarshal + fi.addrE = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fe = (*encoderJsonBytes).binaryMarshal + fi.addrE = ti.flagBinaryMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fe = (*encoderJsonBytes).jsonMarshal + fi.addrE = ti.flagJsonMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fe = (*encoderJsonBytes).textMarshal + fi.addrE = ti.flagTextMarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fe = fp[idx].encfn + } + } else { + + xfe, xrt := dh.encFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf := xfe.encfn + fn.fe = func(e *encoderJsonBytes, xf *encFnInfo, xrv reflect.Value) { + xfnf(e, xf, rvConvert(xrv, xrt)) + } + } + } + } + if fn.fe == nil { + switch rk { + case reflect.Bool: + fn.fe = (*encoderJsonBytes).kBool + case reflect.String: + + fn.fe = (*encoderJsonBytes).kString + case reflect.Int: + fn.fe = (*encoderJsonBytes).kInt + case reflect.Int8: + fn.fe = (*encoderJsonBytes).kInt8 + case reflect.Int16: + fn.fe = (*encoderJsonBytes).kInt16 + case reflect.Int32: + fn.fe = (*encoderJsonBytes).kInt32 + case reflect.Int64: + fn.fe = (*encoderJsonBytes).kInt64 + case reflect.Uint: + fn.fe = (*encoderJsonBytes).kUint + case reflect.Uint8: + fn.fe = (*encoderJsonBytes).kUint8 + case reflect.Uint16: + fn.fe = (*encoderJsonBytes).kUint16 + case reflect.Uint32: + fn.fe = (*encoderJsonBytes).kUint32 + case reflect.Uint64: + fn.fe = (*encoderJsonBytes).kUint64 + case reflect.Uintptr: + fn.fe = (*encoderJsonBytes).kUintptr + case reflect.Float32: + fn.fe = (*encoderJsonBytes).kFloat32 + case reflect.Float64: + fn.fe = (*encoderJsonBytes).kFloat64 + case reflect.Complex64: + fn.fe = (*encoderJsonBytes).kComplex64 + case reflect.Complex128: + fn.fe = (*encoderJsonBytes).kComplex128 + case reflect.Chan: + fn.fe = (*encoderJsonBytes).kChan + case reflect.Slice: + fn.fe = (*encoderJsonBytes).kSlice + case reflect.Array: + fn.fe = (*encoderJsonBytes).kArray + case reflect.Struct: + if ti.simple { + fn.fe = (*encoderJsonBytes).kStructSimple + } else { + fn.fe = (*encoderJsonBytes).kStruct + } + case reflect.Map: + fn.fe = (*encoderJsonBytes).kMap + case reflect.Interface: + + fn.fe = (*encoderJsonBytes).kErr + default: + + fn.fe = (*encoderJsonBytes).kErr + } + } + } + return +} +func (d *decoderJsonBytes) rawExt(f *decFnInfo, rv reflect.Value) { + d.d.DecodeRawExt(rv2i(rv).(*RawExt)) +} + +func (d *decoderJsonBytes) ext(f *decFnInfo, rv reflect.Value) { + d.d.DecodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (d *decoderJsonBytes) selferUnmarshal(_ *decFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecDecodeSelf(&Decoder{d}) +} + +func (d *decoderJsonBytes) binaryUnmarshal(_ *decFnInfo, rv reflect.Value) { + bm := rv2i(rv).(encoding.BinaryUnmarshaler) + xbs, _ := d.d.DecodeBytes() + fnerr := bm.UnmarshalBinary(xbs) + halt.onerror(fnerr) +} + +func (d *decoderJsonBytes) textUnmarshal(_ *decFnInfo, rv reflect.Value) { + tm := rv2i(rv).(encoding.TextUnmarshaler) + fnerr := tm.UnmarshalText(bytesOKs(d.d.DecodeStringAsBytes())) + halt.onerror(fnerr) +} + +func (d *decoderJsonBytes) jsonUnmarshal(_ *decFnInfo, rv reflect.Value) { + d.jsonUnmarshalV(rv2i(rv).(jsonUnmarshaler)) +} + +func (d *decoderJsonBytes) jsonUnmarshalV(tm jsonUnmarshaler) { + + halt.onerror(tm.UnmarshalJSON(d.d.nextValueBytes())) +} + +func (d *decoderJsonBytes) kErr(_ *decFnInfo, rv reflect.Value) { + halt.errorf("unsupported decoding kind: %s, for %#v", rv.Kind(), rv) + +} + +func (d *decoderJsonBytes) raw(_ *decFnInfo, rv reflect.Value) { + rvSetBytes(rv, d.rawBytes()) +} + +func (d *decoderJsonBytes) kString(_ *decFnInfo, rv reflect.Value) { + rvSetString(rv, d.detach2Str(d.d.DecodeStringAsBytes())) +} + +func (d *decoderJsonBytes) kBool(_ *decFnInfo, rv reflect.Value) { + rvSetBool(rv, d.d.DecodeBool()) +} + +func (d *decoderJsonBytes) kTime(_ *decFnInfo, rv reflect.Value) { + rvSetTime(rv, d.d.DecodeTime()) +} + +func (d *decoderJsonBytes) kFloat32(_ *decFnInfo, rv reflect.Value) { + rvSetFloat32(rv, d.d.DecodeFloat32()) +} + +func (d *decoderJsonBytes) kFloat64(_ *decFnInfo, rv reflect.Value) { + rvSetFloat64(rv, d.d.DecodeFloat64()) +} + +func (d *decoderJsonBytes) kComplex64(_ *decFnInfo, rv reflect.Value) { + rvSetComplex64(rv, complex(d.d.DecodeFloat32(), 0)) +} + +func (d *decoderJsonBytes) kComplex128(_ *decFnInfo, rv reflect.Value) { + rvSetComplex128(rv, complex(d.d.DecodeFloat64(), 0)) +} + +func (d *decoderJsonBytes) kInt(_ *decFnInfo, rv reflect.Value) { + rvSetInt(rv, int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))) +} + +func (d *decoderJsonBytes) kInt8(_ *decFnInfo, rv reflect.Value) { + rvSetInt8(rv, int8(chkOvf.IntV(d.d.DecodeInt64(), 8))) +} + +func (d *decoderJsonBytes) kInt16(_ *decFnInfo, rv reflect.Value) { + rvSetInt16(rv, int16(chkOvf.IntV(d.d.DecodeInt64(), 16))) +} + +func (d *decoderJsonBytes) kInt32(_ *decFnInfo, rv reflect.Value) { + rvSetInt32(rv, int32(chkOvf.IntV(d.d.DecodeInt64(), 32))) +} + +func (d *decoderJsonBytes) kInt64(_ *decFnInfo, rv reflect.Value) { + rvSetInt64(rv, d.d.DecodeInt64()) +} + +func (d *decoderJsonBytes) kUint(_ *decFnInfo, rv reflect.Value) { + rvSetUint(rv, uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderJsonBytes) kUintptr(_ *decFnInfo, rv reflect.Value) { + rvSetUintptr(rv, uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderJsonBytes) kUint8(_ *decFnInfo, rv reflect.Value) { + rvSetUint8(rv, uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))) +} + +func (d *decoderJsonBytes) kUint16(_ *decFnInfo, rv reflect.Value) { + rvSetUint16(rv, uint16(chkOvf.UintV(d.d.DecodeUint64(), 16))) +} + +func (d *decoderJsonBytes) kUint32(_ *decFnInfo, rv reflect.Value) { + rvSetUint32(rv, uint32(chkOvf.UintV(d.d.DecodeUint64(), 32))) +} + +func (d *decoderJsonBytes) kUint64(_ *decFnInfo, rv reflect.Value) { + rvSetUint64(rv, d.d.DecodeUint64()) +} + +func (d *decoderJsonBytes) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) { + + n := d.naked() + d.d.DecodeNaked() + + if decFailNonEmptyIntf && f.ti.numMeth > 0 { + halt.errorf("cannot decode non-nil codec value into nil %v (%v methods)", f.ti.rt, f.ti.numMeth) + } + + switch n.v { + case valueTypeMap: + mtid := d.mtid + if mtid == 0 { + if d.jsms { + mtid = mapStrIntfTypId + } else { + mtid = mapIntfIntfTypId + } + } + if mtid == mapStrIntfTypId { + var v2 map[string]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if mtid == mapIntfIntfTypId { + var v2 map[interface{}]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.mtr { + rvn = reflect.New(d.h.MapType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + + rvn = rvZeroAddrK(d.h.MapType, reflect.Map) + d.decodeValue(rvn, nil) + } + case valueTypeArray: + if d.stid == 0 || d.stid == intfSliceTypId { + var v2 []interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.str { + rvn = reflect.New(d.h.SliceType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + rvn = rvZeroAddrK(d.h.SliceType, reflect.Slice) + d.decodeValue(rvn, nil) + } + if d.h.PreferArrayOverSlice { + rvn = rvGetArray4Slice(rvn) + } + case valueTypeExt: + tag, bytes := n.u, n.l + bfn := d.h.getExtForTag(tag) + var re = RawExt{Tag: tag} + if bytes == nil { + + if bfn == nil { + d.decode(&re.Value) + rvn = rv4iptr(&re).Elem() + } else if bfn.ext == SelfExt { + rvn = rvZeroAddrK(bfn.rt, bfn.rt.Kind()) + d.decodeValue(rvn, d.fnNoExt(bfn.rt)) + } else { + rvn = reflect.New(bfn.rt) + d.interfaceExtConvertAndDecode(rv2i(rvn), bfn.ext) + rvn = rvn.Elem() + } + } else { + + if bfn == nil { + re.setData(bytes, false) + rvn = rv4iptr(&re).Elem() + } else { + rvn = reflect.New(bfn.rt) + if bfn.ext == SelfExt { + sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) }) + } else { + bfn.ext.ReadExt(rv2i(rvn), bytes) + } + rvn = rvn.Elem() + } + } + + if d.h.PreferPointerForStructOrArray && rvn.CanAddr() { + if rk := rvn.Kind(); rk == reflect.Array || rk == reflect.Struct { + rvn = rvn.Addr() + } + } + case valueTypeNil: + + case valueTypeInt: + rvn = n.ri() + case valueTypeUint: + rvn = n.ru() + case valueTypeFloat: + rvn = n.rf() + case valueTypeBool: + rvn = n.rb() + case valueTypeString, valueTypeSymbol: + rvn = n.rs() + case valueTypeBytes: + rvn = n.rl() + case valueTypeTime: + rvn = n.rt() + default: + halt.errorStr2("kInterfaceNaked: unexpected valueType: ", n.v.String()) + } + return +} + +func (d *decoderJsonBytes) kInterface(f *decFnInfo, rv reflect.Value) { + + isnilrv := rvIsNil(rv) + + var rvn reflect.Value + + if d.h.InterfaceReset { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } else if !isnilrv { + decSetNonNilRV2Zero4Intf(rv) + } + return + } + } else if isnilrv { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } + return + } + } else { + + rvn = rv.Elem() + } + + canDecode, _ := isDecodeable(rvn) + + if !canDecode { + rvn2 := d.oneShotAddrRV(rvn.Type(), rvn.Kind()) + rvSetDirect(rvn2, rvn) + rvn = rvn2 + } + + d.decodeValue(rvn, nil) + rvSetIntf(rv, rvn) +} + +func (d *decoderJsonBytes) kStructField(si *structFieldInfo, rv reflect.Value) { + if d.d.TryNil() { + rv = si.fieldNoAlloc(rv, true) + if rv.IsValid() { + decSetNonNilRV2Zero(rv) + } + } else if si.decBuiltin { + rv = rvAddr(si.fieldAlloc(rv), si.ptrTyp) + d.decode(rv2i(rv)) + } else { + fn := d.fn(si.baseTyp) + rv = si.fieldAlloc(rv) + if fn.i.addrD { + rv = rvAddr(rv, si.ptrTyp) + } + fn.fd(d, &fn.i, rv) + } +} + +func (d *decoderJsonBytes) kStructSimple(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var rvkencname []byte + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderJsonBytes) kStruct(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + var mf MissingFielder + if ti.flagMissingFielder { + mf = rv2i(rv).(MissingFielder) + } else if ti.flagMissingFielderPtr { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder) + } + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var name2 []byte + var rvkencname []byte + tkt := ti.keyType + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + + if tkt == valueTypeString { + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + } else if tkt == valueTypeInt { + rvkencname = strconv.AppendInt(d.b[:0], d.d.DecodeInt64(), 10) + } else if tkt == valueTypeUint { + rvkencname = strconv.AppendUint(d.b[:0], d.d.DecodeUint64(), 10) + } else if tkt == valueTypeFloat { + rvkencname = strconv.AppendFloat(d.b[:0], d.d.DecodeFloat64(), 'f', -1, 64) + } else { + halt.errorStr2("invalid struct key type: ", ti.keyType.String()) + } + + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else if mf != nil { + + name2 = append(name2[:0], rvkencname...) + var f interface{} + d.decode(&f) + if !mf.CodecMissingField(name2, f) && d.h.ErrorIfNoField { + halt.errorStr2("no matching struct field when decoding stream map with key: ", stringView(name2)) + } + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderJsonBytes) kSlice(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + rvCanset := rv.CanSet() + + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + rvbs := rvGetBytes(rv) + if rvCanset { + bs2, bst := d.decodeBytesInto(rvbs, false) + if bst != dBytesIntoParamOut { + rvSetBytes(rv, bs2) + } + } else { + + d.decodeBytesInto(rvbs[:len(rvbs):len(rvbs)], true) + } + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset { + if rvIsNil(rv) { + rvSetDirect(rv, rvSliceZeroCap(ti.rt)) + } else { + rvSetSliceLen(rv, 0) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem0Mut := !scalarBitset.isset(ti.elemkind) + rtelem := ti.elem + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnJsonBytes + + var rvChanged bool + + var rv0 = rv + var rv9 reflect.Value + + rvlen := rvLenSlice(rv) + rvcap := rvCapSlice(rv) + maxInitLen := d.maxInitLen() + hasLen := containerLenS >= 0 + if hasLen { + if containerLenS > rvcap { + oldRvlenGtZero := rvlen > 0 + rvlen1 := int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + if rvlen1 == rvlen { + } else if rvlen1 <= rvcap { + if rvCanset { + rvlen = rvlen1 + rvSetSliceLen(rv, rvlen) + } + } else if rvCanset { + rvlen = rvlen1 + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + if rvChanged && oldRvlenGtZero && rtelem0Mut { + rvCopySlice(rv, rv0, rtelem) + } + } else if containerLenS != rvlen { + if rvCanset { + rvlen = containerLenS + rvSetSliceLen(rv, rvlen) + } + } + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } + + var j int + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if rvCanset { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + + if rvlen < rvcap { + rvlen = rvcap + if rvCanset { + rvSetSliceLen(rv, rvlen) + } else if rvChanged { + rv = rvSlice(rv, rvlen) + } else { + halt.onerror(errExpandSliceCannotChange) + } + } else { + if !(rvCanset || rvChanged) { + halt.onerror(errExpandSliceCannotChange) + } + rv, rvcap, rvCanset = rvGrowSlice(rv, f.ti, rvcap, 1) + + rvlen = rvcap + rvChanged = !rvCanset + } + } + + rv9 = rvArrayIndex(rv, j, f.ti, true) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if j < rvlen { + if rvCanset { + rvSetSliceLen(rv, j) + } else if rvChanged { + rv = rvSlice(rv, j) + } + + } else if j == 0 && rvIsNil(rv) { + if rvCanset { + rv = rvSliceZeroCap(ti.rt) + rvCanset = false + rvChanged = true + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } +} + +func (d *decoderJsonBytes) kArray(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + ctyp := d.d.ContainerType() + if handleBytesWithinKArray && (ctyp == valueTypeBytes || ctyp == valueTypeString) { + + if ti.elemkind != uint8(reflect.Uint8) { + halt.errorf("bytes/string in stream can decode into array of bytes, but not %v", ti.rt) + } + rvbs := rvGetArrayBytes(rv, nil) + d.decodeBytesInto(rvbs, true) + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var rv9 reflect.Value + + rvlen := rv.Len() + hasLen := containerLenS >= 0 + if hasLen && containerLenS > rvlen { + halt.errorf("cannot decode into array with length: %v, less than container length: %v", any(rvlen), any(containerLenS)) + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + var fn *decFnJsonBytes + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } else { + fn = d.fn(rtelem) + } + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + d.arrayCannotExpand(rvlen, j+1) + d.swallow() + continue + } + + rv9 = rvArrayIndex(rv, j, f.ti, false) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonBytes) kChan(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + if ti.chandir&uint8(reflect.SendDir) == 0 { + halt.errorStr("receive-only channel cannot be decoded") + } + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + bs2, _ := d.d.DecodeBytes() + irv := rv2i(rv) + ch, ok := irv.(chan<- byte) + if !ok { + ch = irv.(chan byte) + } + for _, b := range bs2 { + ch <- b + } + return + } + + var rvCanset = rv.CanSet() + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset && rvIsNil(rv) { + rvSetDirect(rv, reflect.MakeChan(ti.rt, 0)) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + useTransient := decUseTransient && ti.elemkind != byte(reflect.Ptr) && ti.tielem.flagCanTransient + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnJsonBytes + + var rvChanged bool + var rv0 = rv + var rv9 reflect.Value + + var rvlen int + hasLen := containerLenS >= 0 + maxInitLen := d.maxInitLen() + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if hasLen { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + } else { + rvlen = decDefChanCap + } + if rvCanset { + rv = reflect.MakeChan(ti.rt, rvlen) + rvChanged = true + } else { + halt.errorStr("cannot decode into non-settable chan") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if rv9.IsValid() { + rvSetZero(rv9) + } else if useTransient { + rv9 = d.perType.TransientAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } else { + rv9 = rvZeroAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } + if !d.d.TryNil() { + d.decodeValueNoCheckNil(rv9, fn) + } + rv.Send(rv9) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } + +} + +func (d *decoderJsonBytes) kMap(f *decFnInfo, rv reflect.Value) { + _ = d.d + containerLen := d.mapStart(d.d.ReadMapStart()) + ti := f.ti + if rvIsNil(rv) { + rvlen := int(decInferLen(containerLen, d.maxInitLen(), uint(ti.keysize+ti.elemsize))) + rvSetDirect(rv, makeMapReflect(ti.rt, rvlen)) + } + + if containerLen == 0 { + d.mapEnd() + return + } + + ktype, vtype := ti.key, ti.elem + ktypeId := rt2id(ktype) + vtypeKind := reflect.Kind(ti.elemkind) + ktypeKind := reflect.Kind(ti.keykind) + mparams := getMapReqParams(ti) + + vtypePtr := vtypeKind == reflect.Ptr + ktypePtr := ktypeKind == reflect.Ptr + + vTransient := decUseTransient && !vtypePtr && ti.tielem.flagCanTransient + + kTransient := vTransient && !ktypePtr && ti.tikey.flagCanTransient + + var vtypeElem reflect.Type + + var keyFn, valFn *decFnJsonBytes + var ktypeLo, vtypeLo = ktype, vtype + + if ktypeKind == reflect.Ptr { + for ktypeLo = ktype.Elem(); ktypeLo.Kind() == reflect.Ptr; ktypeLo = ktypeLo.Elem() { + } + } + + if vtypePtr { + vtypeElem = vtype.Elem() + for vtypeLo = vtypeElem; vtypeLo.Kind() == reflect.Ptr; vtypeLo = vtypeLo.Elem() { + } + } + + rvkMut := !scalarBitset.isset(ti.keykind) + rvvMut := !scalarBitset.isset(ti.elemkind) + rvvCanNil := isnilBitset.isset(ti.elemkind) + + var rvk, rvkn, rvv, rvvn, rvva, rvvz reflect.Value + + var doMapGet, doMapSet bool + + if !d.h.MapValueReset { + if rvvMut && (vtypeKind != reflect.Interface || !d.h.InterfaceReset) { + doMapGet = true + rvva = mapAddrLoopvarRV(vtype, vtypeKind) + } + } + + ktypeIsString := ktypeId == stringTypId + ktypeIsIntf := ktypeId == intfTypId + hasLen := containerLen >= 0 + + var kstr2bs []byte + var kstr string + + var mapKeyStringSharesBytesBuf bool + var att dBytesAttachState + + var vElem, kElem reflect.Type + kbuiltin := ti.tikey.flagDecBuiltin && ti.keykind != uint8(reflect.Slice) + vbuiltin := ti.tielem.flagDecBuiltin + if kbuiltin && ktypePtr { + kElem = ti.key.Elem() + } + if vbuiltin && vtypePtr { + vElem = ti.elem.Elem() + } + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + mapKeyStringSharesBytesBuf = false + kstr = "" + if j == 0 { + + if kTransient { + rvk = d.perType.TransientAddr2K(ktype, ktypeKind) + } else { + rvk = rvZeroAddrK(ktype, ktypeKind) + } + if !rvkMut { + rvkn = rvk + } + if !rvvMut { + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + } + if !ktypeIsString && keyFn == nil { + keyFn = d.fn(ktypeLo) + } + if valFn == nil { + valFn = d.fn(vtypeLo) + } + } else if rvkMut { + rvSetZero(rvk) + } else { + rvk = rvkn + } + + d.mapElemKey(j == 0) + + if d.d.TryNil() { + rvSetZero(rvk) + } else if ktypeIsString { + kstr2bs, att = d.d.DecodeStringAsBytes() + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, att) + rvSetString(rvk, kstr) + } else { + if kbuiltin { + if ktypePtr { + if rvIsNil(rvk) { + rvSetDirect(rvk, reflect.New(kElem)) + } + d.decode(rv2i(rvk)) + } else { + d.decode(rv2i(rvAddr(rvk, ti.tikey.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvk, keyFn) + } + + if ktypeIsIntf { + if rvk2 := rvk.Elem(); rvk2.IsValid() && rvk2.Type() == uint8SliceTyp { + kstr2bs = rvGetBytes(rvk2) + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, dBytesAttachView) + rvSetIntf(rvk, rv4istr(kstr)) + } + + } + } + + if mapKeyStringSharesBytesBuf && d.bufio { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + mapKeyStringSharesBytesBuf = false + } + + d.mapElemValue() + + if d.d.TryNil() { + if mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + + if !rvvz.IsValid() { + rvvz = rvZeroK(vtype, vtypeKind) + } + mapSet(rv, rvk, rvvz, mparams) + continue + } + + doMapSet = true + + if !rvvMut { + rvv = rvvn + } else if !doMapGet { + goto NEW_RVV + } else { + rvv = mapGet(rv, rvk, rvva, mparams) + if !rvv.IsValid() || (rvvCanNil && rvIsNil(rvv)) { + goto NEW_RVV + } + switch vtypeKind { + case reflect.Ptr, reflect.Map: + doMapSet = false + case reflect.Interface: + + rvvn = rvv.Elem() + if k := rvvn.Kind(); (k == reflect.Ptr || k == reflect.Map) && !rvIsNil(rvvn) { + d.decodeValueNoCheckNil(rvvn, nil) + continue + } + + rvvn = rvZeroAddrK(vtype, vtypeKind) + rvSetIntf(rvvn, rvv) + rvv = rvvn + default: + + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + rvSetDirect(rvvn, rvv) + rvv = rvvn + } + } + goto DECODE_VALUE_NO_CHECK_NIL + + NEW_RVV: + if vtypePtr { + rvv = reflect.New(vtypeElem) + } else if vTransient { + rvv = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvv = rvZeroAddrK(vtype, vtypeKind) + } + + DECODE_VALUE_NO_CHECK_NIL: + if doMapSet && mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + if vbuiltin { + if vtypePtr { + if rvIsNil(rvv) { + rvSetDirect(rvv, reflect.New(vElem)) + } + d.decode(rv2i(rvv)) + } else { + d.decode(rv2i(rvAddr(rvv, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvv, valFn) + } + if doMapSet { + mapSet(rv, rvk, rvv, mparams) + } + } + + d.mapEnd() +} + +func (d *decoderJsonBytes) init(h Handle) { + initHandle(h) + callMake(&d.d) + d.hh = h + d.h = h.getBasicHandle() + + d.err = errDecoderNotInitialized + + if d.h.InternString && d.is == nil { + d.is.init() + } + + d.fp = d.d.init(h, &d.decoderBase, d).(*fastpathDsJsonBytes) + + if d.bytes { + d.rtidFn = &d.h.rtidFnsDecBytes + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtBytes + } else { + d.bufio = d.h.ReaderBufferSize > 0 + d.rtidFn = &d.h.rtidFnsDecIO + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtIO + } + + d.reset() + +} + +func (d *decoderJsonBytes) reset() { + d.d.reset() + d.err = nil + d.c = 0 + d.depth = 0 + d.calls = 0 + + d.maxdepth = decDefMaxDepth + if d.h.MaxDepth > 0 { + d.maxdepth = d.h.MaxDepth + } + d.mtid = 0 + d.stid = 0 + d.mtr = false + d.str = false + if d.h.MapType != nil { + d.mtid = rt2id(d.h.MapType) + _, d.mtr = fastpathAvIndex(d.mtid) + } + if d.h.SliceType != nil { + d.stid = rt2id(d.h.SliceType) + _, d.str = fastpathAvIndex(d.stid) + } +} + +func (d *decoderJsonBytes) Reset(r io.Reader) { + if d.bytes { + halt.onerror(errDecNoResetBytesWithReader) + } + d.reset() + if r == nil { + r = &eofReader + } + d.d.resetInIO(r) +} + +func (d *decoderJsonBytes) ResetBytes(in []byte) { + if !d.bytes { + halt.onerror(errDecNoResetReaderWithBytes) + } + d.resetBytes(in) +} + +func (d *decoderJsonBytes) resetBytes(in []byte) { + d.reset() + if in == nil { + in = zeroByteSlice + } + d.d.resetInBytes(in) +} + +func (d *decoderJsonBytes) ResetString(s string) { + d.ResetBytes(bytesView(s)) +} + +func (d *decoderJsonBytes) Decode(v interface{}) (err error) { + + defer panicValToErr(d, callRecoverSentinel, &d.err, &err, debugging) + d.mustDecode(v) + return +} + +func (d *decoderJsonBytes) MustDecode(v interface{}) { + defer panicValToErr(d, callRecoverSentinel, &d.err, nil, true) + d.mustDecode(v) + return +} + +func (d *decoderJsonBytes) mustDecode(v interface{}) { + halt.onerror(d.err) + if d.hh == nil { + halt.onerror(errNoFormatHandle) + } + + d.calls++ + d.decode(v) + d.calls-- +} + +func (d *decoderJsonBytes) Release() {} + +func (d *decoderJsonBytes) swallow() { + d.d.nextValueBytes() +} + +func (d *decoderJsonBytes) nextValueBytes() []byte { + return d.d.nextValueBytes() +} + +func (d *decoderJsonBytes) decode(iv interface{}) { + _ = d.d + + rv, ok := isNil(iv, true) + if ok { + halt.onerror(errCannotDecodeIntoNil) + } + + switch v := iv.(type) { + + case *string: + *v = d.detach2Str(d.d.DecodeStringAsBytes()) + case *bool: + *v = d.d.DecodeBool() + case *int: + *v = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + case *int8: + *v = int8(chkOvf.IntV(d.d.DecodeInt64(), 8)) + case *int16: + *v = int16(chkOvf.IntV(d.d.DecodeInt64(), 16)) + case *int32: + *v = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + case *int64: + *v = d.d.DecodeInt64() + case *uint: + *v = uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *uint8: + *v = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + case *uint16: + *v = uint16(chkOvf.UintV(d.d.DecodeUint64(), 16)) + case *uint32: + *v = uint32(chkOvf.UintV(d.d.DecodeUint64(), 32)) + case *uint64: + *v = d.d.DecodeUint64() + case *uintptr: + *v = uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *float32: + *v = d.d.DecodeFloat32() + case *float64: + *v = d.d.DecodeFloat64() + case *complex64: + *v = complex(d.d.DecodeFloat32(), 0) + case *complex128: + *v = complex(d.d.DecodeFloat64(), 0) + case *[]byte: + *v, _ = d.decodeBytesInto(*v, false) + case []byte: + + d.decodeBytesInto(v[:len(v):len(v)], true) + case *time.Time: + *v = d.d.DecodeTime() + case *Raw: + *v = d.rawBytes() + + case *interface{}: + d.decodeValue(rv4iptr(v), nil) + + case reflect.Value: + if ok, _ = isDecodeable(v); !ok { + d.haltAsNotDecodeable(v) + } + d.decodeValue(v, nil) + + default: + + if skipFastpathTypeSwitchInDirectCall || !d.dh.fastpathDecodeTypeSwitch(iv, d) { + if !rv.IsValid() { + rv = reflect.ValueOf(iv) + } + if ok, _ = isDecodeable(rv); !ok { + d.haltAsNotDecodeable(rv) + } + d.decodeValue(rv, nil) + } + } +} + +func (d *decoderJsonBytes) decodeValue(rv reflect.Value, fn *decFnJsonBytes) { + if d.d.TryNil() { + decSetNonNilRV2Zero(rv) + } else { + d.decodeValueNoCheckNil(rv, fn) + } +} + +func (d *decoderJsonBytes) decodeValueNoCheckNil(rv reflect.Value, fn *decFnJsonBytes) { + + var rvp reflect.Value + var rvpValid bool +PTR: + if rv.Kind() == reflect.Ptr { + rvpValid = true + if rvIsNil(rv) { + rvSetDirect(rv, reflect.New(rv.Type().Elem())) + } + rvp = rv + rv = rv.Elem() + goto PTR + } + + if fn == nil { + fn = d.fn(rv.Type()) + } + if fn.i.addrD { + if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else if fn.i.addrDf { + halt.errorStr("cannot decode into a non-pointer value") + } + } + fn.fd(d, &fn.i, rv) +} + +func (d *decoderJsonBytes) decodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + d.decodeValue(baseRV(v), d.fn(t)) + } else { + d.decodeValue(baseRV(v), d.fnNoExt(t)) + } +} + +func (d *decoderJsonBytes) structFieldNotFound(index int, rvkencname string) { + + if d.h.ErrorIfNoField { + if index >= 0 { + halt.errorInt("no matching struct field found when decoding stream array at index ", int64(index)) + } else if rvkencname != "" { + halt.errorStr2("no matching struct field found when decoding stream map with key ", rvkencname) + } + } + d.swallow() +} + +func (d *decoderJsonBytes) decodeBytesInto(out []byte, mustFit bool) (v []byte, state dBytesIntoState) { + v, att := d.d.DecodeBytes() + if cap(v) == 0 || (att >= dBytesAttachViewZerocopy && !mustFit) { + + return + } + if len(v) == 0 { + v = zeroByteSlice + return + } + if len(out) == len(v) { + state = dBytesIntoParamOut + } else if cap(out) >= len(v) { + out = out[:len(v)] + state = dBytesIntoParamOutSlice + } else if mustFit { + halt.errorf("bytes capacity insufficient for decoded bytes: got/expected: %d/%d", len(v), len(out)) + } else { + out = make([]byte, len(v)) + state = dBytesIntoNew + } + copy(out, v) + v = out + return +} + +func (d *decoderJsonBytes) rawBytes() (v []byte) { + + v = d.d.nextValueBytes() + if d.bytes && !d.h.ZeroCopy { + vv := make([]byte, len(v)) + copy(vv, v) + v = vv + } + return +} + +func (d *decoderJsonBytes) wrapErr(v error, err *error) { + *err = wrapCodecErr(v, d.hh.Name(), d.d.NumBytesRead(), false) +} + +func (d *decoderJsonBytes) NumBytesRead() int { + return d.d.NumBytesRead() +} + +func (d *decoderJsonBytes) containerNext(j, containerLen int, hasLen bool) bool { + + if hasLen { + return j < containerLen + } + return !d.d.CheckBreak() +} + +func (d *decoderJsonBytes) mapElemKey(firstTime bool) { + d.d.ReadMapElemKey(firstTime) + d.c = containerMapKey +} + +func (d *decoderJsonBytes) mapElemValue() { + d.d.ReadMapElemValue() + d.c = containerMapValue +} + +func (d *decoderJsonBytes) mapEnd() { + d.d.ReadMapEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderJsonBytes) arrayElem(firstTime bool) { + d.d.ReadArrayElem(firstTime) + d.c = containerArrayElem +} + +func (d *decoderJsonBytes) arrayEnd() { + d.d.ReadArrayEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderJsonBytes) interfaceExtConvertAndDecode(v interface{}, ext InterfaceExt) { + + var vv interface{} + d.decode(&vv) + ext.UpdateExt(v, vv) + +} + +func (d *decoderJsonBytes) fn(t reflect.Type) *decFnJsonBytes { + return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false) +} + +func (d *decoderJsonBytes) fnNoExt(t reflect.Type) *decFnJsonBytes { + return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true) +} + +func (helperDecDriverJsonBytes) newDecoderBytes(in []byte, h Handle) *decoderJsonBytes { + var c1 decoderJsonBytes + c1.bytes = true + c1.init(h) + c1.ResetBytes(in) + return &c1 +} + +func (helperDecDriverJsonBytes) newDecoderIO(in io.Reader, h Handle) *decoderJsonBytes { + var c1 decoderJsonBytes + c1.init(h) + c1.Reset(in) + return &c1 +} + +func (helperDecDriverJsonBytes) decFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathDsJsonBytes) (f *fastpathDJsonBytes, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperDecDriverJsonBytes) decFindRtidFn(s []decRtidFnJsonBytes, rtid uintptr) (i uint, fn *decFnJsonBytes) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperDecDriverJsonBytes) decFromRtidFnSlice(fns *atomicRtidFnSlice) (s []decRtidFnJsonBytes) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]decRtidFnJsonBytes](v)) + } + return +} + +func (dh helperDecDriverJsonBytes) decFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, x *BasicHandle, fp *fastpathDsJsonBytes, + checkExt bool) (fn *decFnJsonBytes) { + return dh.decFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperDecDriverJsonBytes) decFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsJsonBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnJsonBytes) { + rtid := rt2id(rt) + var sp []decRtidFnJsonBytes = dh.decFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.decFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.decFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperDecDriverJsonBytes) decFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsJsonBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnJsonBytes) { + + fn = dh.decFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []decRtidFnJsonBytes + mu.Lock() + sp = dh.decFromRtidFnSlice(fns) + + if sp == nil { + sp = []decRtidFnJsonBytes{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.decFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]decRtidFnJsonBytes, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = decRtidFnJsonBytes{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperDecDriverJsonBytes) decFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathDsJsonBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnJsonBytes) { + fn = new(decFnJsonBytes) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + fi.addrDf = true + + if rtid == timeTypId && timeBuiltin { + fn.fd = (*decoderJsonBytes).kTime + } else if rtid == rawTypId { + fn.fd = (*decoderJsonBytes).raw + } else if rtid == rawExtTypId { + fn.fd = (*decoderJsonBytes).rawExt + fi.addrD = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fd = (*decoderJsonBytes).ext + fi.addrD = true + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fd = (*decoderJsonBytes).selferUnmarshal + fi.addrD = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fd = (*decoderJsonBytes).binaryUnmarshal + fi.addrD = ti.flagBinaryUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fd = (*decoderJsonBytes).jsonUnmarshal + fi.addrD = ti.flagJsonUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fd = (*decoderJsonBytes).textUnmarshal + fi.addrD = ti.flagTextUnmarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fd = fp[idx].decfn + fi.addrD = true + fi.addrDf = false + if rk == reflect.Array { + fi.addrD = false + } + } + } else { + + xfe, xrt := dh.decFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf2 := xfe.decfn + if rk == reflect.Array { + fi.addrD = false + fn.fd = func(d *decoderJsonBytes, xf *decFnInfo, xrv reflect.Value) { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } else { + fi.addrD = true + fi.addrDf = false + xptr2rt := reflect.PointerTo(xrt) + fn.fd = func(d *decoderJsonBytes, xf *decFnInfo, xrv reflect.Value) { + if xrv.Kind() == reflect.Ptr { + xfnf2(d, xf, rvConvert(xrv, xptr2rt)) + } else { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } + } + } + } + } + if fn.fd == nil { + switch rk { + case reflect.Bool: + fn.fd = (*decoderJsonBytes).kBool + case reflect.String: + fn.fd = (*decoderJsonBytes).kString + case reflect.Int: + fn.fd = (*decoderJsonBytes).kInt + case reflect.Int8: + fn.fd = (*decoderJsonBytes).kInt8 + case reflect.Int16: + fn.fd = (*decoderJsonBytes).kInt16 + case reflect.Int32: + fn.fd = (*decoderJsonBytes).kInt32 + case reflect.Int64: + fn.fd = (*decoderJsonBytes).kInt64 + case reflect.Uint: + fn.fd = (*decoderJsonBytes).kUint + case reflect.Uint8: + fn.fd = (*decoderJsonBytes).kUint8 + case reflect.Uint16: + fn.fd = (*decoderJsonBytes).kUint16 + case reflect.Uint32: + fn.fd = (*decoderJsonBytes).kUint32 + case reflect.Uint64: + fn.fd = (*decoderJsonBytes).kUint64 + case reflect.Uintptr: + fn.fd = (*decoderJsonBytes).kUintptr + case reflect.Float32: + fn.fd = (*decoderJsonBytes).kFloat32 + case reflect.Float64: + fn.fd = (*decoderJsonBytes).kFloat64 + case reflect.Complex64: + fn.fd = (*decoderJsonBytes).kComplex64 + case reflect.Complex128: + fn.fd = (*decoderJsonBytes).kComplex128 + case reflect.Chan: + fn.fd = (*decoderJsonBytes).kChan + case reflect.Slice: + fn.fd = (*decoderJsonBytes).kSlice + case reflect.Array: + fi.addrD = false + fn.fd = (*decoderJsonBytes).kArray + case reflect.Struct: + if ti.simple { + fn.fd = (*decoderJsonBytes).kStructSimple + } else { + fn.fd = (*decoderJsonBytes).kStruct + } + case reflect.Map: + fn.fd = (*decoderJsonBytes).kMap + case reflect.Interface: + + fn.fd = (*decoderJsonBytes).kInterface + default: + + fn.fd = (*decoderJsonBytes).kErr + } + } + } + return +} +func (e *jsonEncDriverBytes) writeIndent() { + e.w.writen1('\n') + x := int(e.di) * int(e.dl) + if e.di < 0 { + x = -x + for x > len(jsonTabs) { + e.w.writeb(jsonTabs[:]) + x -= len(jsonTabs) + } + e.w.writeb(jsonTabs[:x]) + } else { + for x > len(jsonSpaces) { + e.w.writeb(jsonSpaces[:]) + x -= len(jsonSpaces) + } + e.w.writeb(jsonSpaces[:x]) + } +} + +func (e *jsonEncDriverBytes) WriteArrayElem(firstTime bool) { + if !firstTime { + e.w.writen1(',') + } + if e.d { + e.writeIndent() + } +} + +func (e *jsonEncDriverBytes) WriteMapElemKey(firstTime bool) { + if !firstTime { + e.w.writen1(',') + } + if e.d { + e.writeIndent() + } +} + +func (e *jsonEncDriverBytes) WriteMapElemValue() { + if e.d { + e.w.writen2(':', ' ') + } else { + e.w.writen1(':') + } +} + +func (e *jsonEncDriverBytes) EncodeNil() { + + e.w.writeb(jsonNull) +} + +func (e *jsonEncDriverBytes) encodeIntAsUint(v int64, quotes bool) { + neg := v < 0 + if neg { + v = -v + } + e.encodeUint(neg, quotes, uint64(v)) +} + +func (e *jsonEncDriverBytes) EncodeTime(t time.Time) { + + if t.IsZero() { + e.EncodeNil() + return + } + switch e.timeFmt { + case jsonTimeFmtStringLayout: + e.b[0] = '"' + b := t.AppendFormat(e.b[1:1], e.timeFmtLayout) + e.b[len(b)+1] = '"' + e.w.writeb(e.b[:len(b)+2]) + case jsonTimeFmtUnix: + e.encodeIntAsUint(t.Unix(), false) + case jsonTimeFmtUnixMilli: + e.encodeIntAsUint(t.UnixMilli(), false) + case jsonTimeFmtUnixMicro: + e.encodeIntAsUint(t.UnixMicro(), false) + case jsonTimeFmtUnixNano: + e.encodeIntAsUint(t.UnixNano(), false) + } +} + +func (e *jsonEncDriverBytes) EncodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + if ext == SelfExt { + e.enc.encodeAs(rv, basetype, false) + } else if v := ext.ConvertExt(rv); v == nil { + e.writeNilBytes() + } else { + e.enc.encodeI(v) + } +} + +func (e *jsonEncDriverBytes) EncodeRawExt(re *RawExt) { + if re.Data != nil { + e.w.writeb(re.Data) + } else if re.Value != nil { + e.enc.encodeI(re.Value) + } else { + e.EncodeNil() + } +} + +func (e *jsonEncDriverBytes) EncodeBool(b bool) { + e.w.writestr(jsonEncBoolStrs[bool2int(e.ks && e.e.c == containerMapKey)%2][bool2int(b)%2]) +} + +func (e *jsonEncDriverBytes) encodeFloat(f float64, bitsize, fmt byte, prec int8) { + var blen uint + if e.ks && e.e.c == containerMapKey { + blen = 2 + uint(len(strconv.AppendFloat(e.b[1:1], f, fmt, int(prec), int(bitsize)))) + + e.b[0] = '"' + e.b[blen-1] = '"' + e.w.writeb(e.b[:blen]) + } else { + e.w.writeb(strconv.AppendFloat(e.b[:0], f, fmt, int(prec), int(bitsize))) + } +} + +func (e *jsonEncDriverBytes) EncodeFloat64(f float64) { + if math.IsNaN(f) || math.IsInf(f, 0) { + e.EncodeNil() + return + } + fmt, prec := jsonFloatStrconvFmtPrec64(f) + e.encodeFloat(f, 64, fmt, prec) +} + +func (e *jsonEncDriverBytes) EncodeFloat32(f float32) { + if math.IsNaN(float64(f)) || math.IsInf(float64(f), 0) { + e.EncodeNil() + return + } + fmt, prec := jsonFloatStrconvFmtPrec32(f) + e.encodeFloat(float64(f), 32, fmt, prec) +} + +func (e *jsonEncDriverBytes) encodeUint(neg bool, quotes bool, u uint64) { + e.w.writeb(jsonEncodeUint(neg, quotes, u, &e.b)) +} + +func (e *jsonEncDriverBytes) EncodeInt(v int64) { + quotes := e.is == 'A' || e.is == 'L' && (v > 1<<53 || v < -(1<<53)) || + (e.ks && e.e.c == containerMapKey) + + if cpu32Bit { + if quotes { + blen := 2 + len(strconv.AppendInt(e.b[1:1], v, 10)) + e.b[0] = '"' + e.b[blen-1] = '"' + e.w.writeb(e.b[:blen]) + } else { + e.w.writeb(strconv.AppendInt(e.b[:0], v, 10)) + } + return + } + + if v < 0 { + e.encodeUint(true, quotes, uint64(-v)) + } else { + e.encodeUint(false, quotes, uint64(v)) + } +} + +func (e *jsonEncDriverBytes) EncodeUint(v uint64) { + quotes := e.is == 'A' || e.is == 'L' && v > 1<<53 || + (e.ks && e.e.c == containerMapKey) + + if cpu32Bit { + + if quotes { + blen := 2 + len(strconv.AppendUint(e.b[1:1], v, 10)) + e.b[0] = '"' + e.b[blen-1] = '"' + e.w.writeb(e.b[:blen]) + } else { + e.w.writeb(strconv.AppendUint(e.b[:0], v, 10)) + } + return + } + + e.encodeUint(false, quotes, v) +} + +func (e *jsonEncDriverBytes) EncodeString(v string) { + if e.h.StringToRaw { + e.EncodeStringBytesRaw(bytesView(v)) + return + } + e.quoteStr(v) +} + +func (e *jsonEncDriverBytes) EncodeStringNoEscape4Json(v string) { e.w.writeqstr(v) } + +func (e *jsonEncDriverBytes) EncodeStringBytesRaw(v []byte) { + if e.rawext { + + iv := e.h.RawBytesExt.ConvertExt(any(v)) + if iv == nil { + e.EncodeNil() + } else { + e.enc.encodeI(iv) + } + return + } + + if e.bytesFmt == jsonBytesFmtArray { + e.WriteArrayStart(len(v)) + for j := range v { + e.WriteArrayElem(j == 0) + e.encodeUint(false, false, uint64(v[j])) + } + e.WriteArrayEnd() + return + } + + var slen int + if e.bytesFmt == jsonBytesFmtBase64 { + slen = base64.StdEncoding.EncodedLen(len(v)) + } else { + slen = e.byteFmter.EncodedLen(len(v)) + } + slen += 2 + + bs := e.e.blist.peek(slen, false)[:slen] + + if e.bytesFmt == jsonBytesFmtBase64 { + base64.StdEncoding.Encode(bs[1:], v) + } else { + e.byteFmter.Encode(bs[1:], v) + } + + bs[len(bs)-1] = '"' + bs[0] = '"' + e.w.writeb(bs) +} + +func (e *jsonEncDriverBytes) EncodeBytes(v []byte) { + if v == nil { + e.writeNilBytes() + return + } + e.EncodeStringBytesRaw(v) +} + +func (e *jsonEncDriverBytes) writeNilOr(v []byte) { + if !e.h.NilCollectionToZeroLength { + v = jsonNull + } + e.w.writeb(v) +} + +func (e *jsonEncDriverBytes) writeNilBytes() { + e.writeNilOr(jsonArrayEmpty) +} + +func (e *jsonEncDriverBytes) writeNilArray() { + e.writeNilOr(jsonArrayEmpty) +} + +func (e *jsonEncDriverBytes) writeNilMap() { + e.writeNilOr(jsonMapEmpty) +} + +func (e *jsonEncDriverBytes) WriteArrayEmpty() { + e.w.writen2('[', ']') +} + +func (e *jsonEncDriverBytes) WriteMapEmpty() { + e.w.writen2('{', '}') +} + +func (e *jsonEncDriverBytes) WriteArrayStart(length int) { + if e.d { + e.dl++ + } + e.w.writen1('[') +} + +func (e *jsonEncDriverBytes) WriteArrayEnd() { + if e.d { + e.dl-- + + e.writeIndent() + } + e.w.writen1(']') +} + +func (e *jsonEncDriverBytes) WriteMapStart(length int) { + if e.d { + e.dl++ + } + e.w.writen1('{') +} + +func (e *jsonEncDriverBytes) WriteMapEnd() { + if e.d { + e.dl-- + + e.writeIndent() + } + e.w.writen1('}') +} + +func (e *jsonEncDriverBytes) quoteStr(s string) { + + const hex = "0123456789abcdef" + e.w.writen1('"') + var i, start uint + for i < uint(len(s)) { + + b := s[i] + if e.s.isset(b) { + i++ + continue + } + if b < utf8.RuneSelf { + if start < i { + e.w.writestr(s[start:i]) + } + switch b { + case '\\': + e.w.writen2('\\', '\\') + case '"': + e.w.writen2('\\', '"') + case '\n': + e.w.writen2('\\', 'n') + case '\t': + e.w.writen2('\\', 't') + case '\r': + e.w.writen2('\\', 'r') + case '\b': + e.w.writen2('\\', 'b') + case '\f': + e.w.writen2('\\', 'f') + default: + e.w.writestr(`\u00`) + e.w.writen2(hex[b>>4], hex[b&0xF]) + } + i++ + start = i + continue + } + c, size := utf8.DecodeRuneInString(s[i:]) + if c == utf8.RuneError && size == 1 { + if start < i { + e.w.writestr(s[start:i]) + } + e.w.writestr(`\uFFFD`) + i++ + start = i + continue + } + + if jsonEscapeMultiByteUnicodeSep && (c == '\u2028' || c == '\u2029') { + if start < i { + e.w.writestr(s[start:i]) + } + e.w.writestr(`\u202`) + e.w.writen1(hex[c&0xF]) + i += uint(size) + start = i + continue + } + i += uint(size) + } + if start < uint(len(s)) { + e.w.writestr(s[start:]) + } + e.w.writen1('"') +} + +func (e *jsonEncDriverBytes) atEndOfEncode() { + if e.h.TermWhitespace { + var c byte = ' ' + if e.e.c != 0 { + c = '\n' + } + e.w.writen1(c) + } +} + +func (d *jsonDecDriverBytes) ReadMapStart() int { + d.advance() + if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return containerLenNil + } + if d.tok != '{' { + halt.errorByte("read map - expect char '{' but got char: ", d.tok) + } + d.tok = 0 + return containerLenUnknown +} + +func (d *jsonDecDriverBytes) ReadArrayStart() int { + d.advance() + if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return containerLenNil + } + if d.tok != '[' { + halt.errorByte("read array - expect char '[' but got char ", d.tok) + } + d.tok = 0 + return containerLenUnknown +} + +func (d *jsonDecDriverBytes) CheckBreak() bool { + d.advance() + return d.tok == '}' || d.tok == ']' +} + +func (d *jsonDecDriverBytes) checkSep(xc byte) { + d.advance() + if d.tok != xc { + d.readDelimError(xc) + } + d.tok = 0 +} + +func (d *jsonDecDriverBytes) ReadArrayElem(firstTime bool) { + if !firstTime { + d.checkSep(',') + } +} + +func (d *jsonDecDriverBytes) ReadArrayEnd() { + d.checkSep(']') +} + +func (d *jsonDecDriverBytes) ReadMapElemKey(firstTime bool) { + d.ReadArrayElem(firstTime) +} + +func (d *jsonDecDriverBytes) ReadMapElemValue() { + d.checkSep(':') +} + +func (d *jsonDecDriverBytes) ReadMapEnd() { + d.checkSep('}') +} + +func (d *jsonDecDriverBytes) readDelimError(xc uint8) { + halt.errorf("read json delimiter - expect char '%c' but got char '%c'", xc, d.tok) +} + +func (d *jsonDecDriverBytes) checkLit3(got, expect [3]byte) { + if jsonValidateSymbols && got != expect { + jsonCheckLitErr3(got, expect) + } + d.tok = 0 +} + +func (d *jsonDecDriverBytes) checkLit4(got, expect [4]byte) { + if jsonValidateSymbols && got != expect { + jsonCheckLitErr4(got, expect) + } + d.tok = 0 +} + +func (d *jsonDecDriverBytes) skipWhitespace() { + d.tok = d.r.skipWhitespace() +} + +func (d *jsonDecDriverBytes) advance() { + + if d.tok < 33 { + d.skipWhitespace() + } +} + +func (d *jsonDecDriverBytes) nextValueBytes() []byte { + consumeString := func() { + TOP: + _, c := d.r.jsonReadAsisChars() + if c == '\\' { + d.r.readn1() + goto TOP + } + } + + d.advance() + d.r.startRecording() + + switch d.tok { + default: + _, d.tok = d.r.jsonReadNum() + case 'n': + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + case 'f': + d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.r.readn4()) + case 't': + d.checkLit3([3]byte{'r', 'u', 'e'}, d.r.readn3()) + case '"': + consumeString() + d.tok = 0 + case '{', '[': + var elem struct{} + var stack []struct{} + + stack = append(stack, elem) + + for len(stack) != 0 { + c := d.r.readn1() + switch c { + case '"': + consumeString() + case '{', '[': + stack = append(stack, elem) + case '}', ']': + stack = stack[:len(stack)-1] + } + } + d.tok = 0 + } + return d.r.stopRecording() +} + +func (d *jsonDecDriverBytes) TryNil() bool { + d.advance() + + if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return true + } + return false +} + +func (d *jsonDecDriverBytes) DecodeBool() (v bool) { + d.advance() + + fquot := d.d.c == containerMapKey && d.tok == '"' + if fquot { + d.tok = d.r.readn1() + } + switch d.tok { + case 'f': + d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.r.readn4()) + + case 't': + d.checkLit3([3]byte{'r', 'u', 'e'}, d.r.readn3()) + v = true + case 'n': + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + + default: + halt.errorByte("decode bool: got first char: ", d.tok) + + } + if fquot { + d.r.readn1() + } + return +} + +func (d *jsonDecDriverBytes) DecodeTime() (t time.Time) { + + d.advance() + if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return + } + var bs []byte + + if d.tok != '"' { + bs, d.tok = d.r.jsonReadNum() + i := d.parseInt64(bs) + switch d.timeFmtNum { + case jsonTimeFmtUnix: + t = time.Unix(i, 0) + case jsonTimeFmtUnixMilli: + t = time.UnixMilli(i) + case jsonTimeFmtUnixMicro: + t = time.UnixMicro(i) + case jsonTimeFmtUnixNano: + t = time.Unix(0, i) + default: + halt.errorStr("invalid timeFmtNum") + } + return + } + + bs = d.readUnescapedString() + var err error + for _, v := range d.timeFmtLayouts { + t, err = time.Parse(v, stringView(bs)) + if err == nil { + return + } + } + halt.errorStr("error decoding time") + return +} + +func (d *jsonDecDriverBytes) ContainerType() (vt valueType) { + + d.advance() + + if d.tok == '{' { + return valueTypeMap + } else if d.tok == '[' { + return valueTypeArray + } else if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return valueTypeNil + } else if d.tok == '"' { + return valueTypeString + } + return valueTypeUnset +} + +func (d *jsonDecDriverBytes) decNumBytes() (bs []byte) { + d.advance() + if d.tok == '"' { + bs = d.r.jsonReadUntilDblQuote() + d.tok = 0 + } else if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + } else { + bs, d.tok = d.r.jsonReadNum() + } + return +} + +func (d *jsonDecDriverBytes) DecodeUint64() (u uint64) { + b := d.decNumBytes() + u, neg, ok := parseInteger_bytes(b) + if neg { + halt.errorf("negative number cannot be decoded as uint64: %s", any(b)) + } + if !ok { + halt.onerror(strconvParseErr(b, "ParseUint")) + } + return +} + +func (d *jsonDecDriverBytes) DecodeInt64() (v int64) { + return d.parseInt64(d.decNumBytes()) +} + +func (d *jsonDecDriverBytes) parseInt64(b []byte) (v int64) { + u, neg, ok := parseInteger_bytes(b) + if !ok { + halt.onerror(strconvParseErr(b, "ParseInt")) + } + if chkOvf.Uint2Int(u, neg) { + halt.errorBytes("overflow decoding number from ", b) + } + if neg { + v = -int64(u) + } else { + v = int64(u) + } + return +} + +func (d *jsonDecDriverBytes) DecodeFloat64() (f float64) { + var err error + bs := d.decNumBytes() + if len(bs) == 0 { + return + } + f, err = parseFloat64(bs) + halt.onerror(err) + return +} + +func (d *jsonDecDriverBytes) DecodeFloat32() (f float32) { + var err error + bs := d.decNumBytes() + if len(bs) == 0 { + return + } + f, err = parseFloat32(bs) + halt.onerror(err) + return +} + +func (d *jsonDecDriverBytes) advanceNil() (ok bool) { + d.advance() + if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return true + } + return false +} + +func (d *jsonDecDriverBytes) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + if d.advanceNil() { + return + } + if ext == SelfExt { + d.dec.decodeAs(rv, basetype, false) + } else { + d.dec.interfaceExtConvertAndDecode(rv, ext) + } +} + +func (d *jsonDecDriverBytes) DecodeRawExt(re *RawExt) { + if d.advanceNil() { + return + } + d.dec.decode(&re.Value) +} + +func (d *jsonDecDriverBytes) decBytesFromArray(bs []byte) []byte { + d.advance() + if d.tok != ']' { + bs = append(bs, uint8(d.DecodeUint64())) + d.advance() + } + for d.tok != ']' { + if d.tok != ',' { + halt.errorByte("read array element - expect char ',' but got char: ", d.tok) + } + d.tok = 0 + bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) + d.advance() + } + d.tok = 0 + return bs +} + +func (d *jsonDecDriverBytes) DecodeBytes() (bs []byte, state dBytesAttachState) { + d.advance() + state = dBytesDetach + if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return + } + state = dBytesAttachBuffer + + if d.rawext { + d.buf = d.buf[:0] + d.dec.interfaceExtConvertAndDecode(&d.buf, d.h.RawBytesExt) + bs = d.buf + return + } + + if d.tok == '[' { + d.tok = 0 + + bs = d.decBytesFromArray(d.buf[:0]) + d.buf = bs + return + } + + d.ensureReadingString() + bs1 := d.readUnescapedString() + + slen := base64.StdEncoding.DecodedLen(len(bs1)) + if slen == 0 { + bs = zeroByteSlice + state = dBytesDetach + } else if slen <= cap(d.buf) { + bs = d.buf[:slen] + } else { + d.buf = d.d.blist.putGet(d.buf, slen)[:slen] + bs = d.buf + } + var err error + for _, v := range d.byteFmters { + + slen, err = v.Decode(bs, bs1) + if err == nil { + bs = bs[:slen] + return + } + } + halt.errorf("error decoding byte string '%s': %v", any(bs1), err) + return +} + +func (d *jsonDecDriverBytes) DecodeStringAsBytes() (bs []byte, state dBytesAttachState) { + d.advance() + + var cond bool + + if d.tok == '"' { + d.tok = 0 + bs, cond = d.dblQuoteStringAsBytes() + state = d.d.attachState(cond) + return + } + + state = dBytesDetach + + switch d.tok { + case 'n': + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + + case 'f': + d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.r.readn4()) + bs = jsonLitb[jsonLitF : jsonLitF+5] + case 't': + d.checkLit3([3]byte{'r', 'u', 'e'}, d.r.readn3()) + bs = jsonLitb[jsonLitT : jsonLitT+4] + default: + + bs, d.tok = d.r.jsonReadNum() + state = d.d.attachState(!d.d.bytes) + } + return +} + +func (d *jsonDecDriverBytes) ensureReadingString() { + if d.tok != '"' { + halt.errorByte("expecting string starting with '\"'; got ", d.tok) + } +} + +func (d *jsonDecDriverBytes) readUnescapedString() (bs []byte) { + + bs = d.r.jsonReadUntilDblQuote() + d.tok = 0 + return +} + +func (d *jsonDecDriverBytes) dblQuoteStringAsBytes() (buf []byte, usingBuf bool) { + bs, c := d.r.jsonReadAsisChars() + if c == '"' { + return bs, !d.d.bytes + } + buf = append(d.buf[:0], bs...) + + checkUtf8 := d.h.ValidateUnicode + usingBuf = true + + for { + + c = d.r.readn1() + + switch c { + case '"', '\\', '/', '\'': + buf = append(buf, c) + case 'b': + buf = append(buf, '\b') + case 'f': + buf = append(buf, '\f') + case 'n': + buf = append(buf, '\n') + case 'r': + buf = append(buf, '\r') + case 't': + buf = append(buf, '\t') + case 'u': + rr := d.appendStringAsBytesSlashU() + if checkUtf8 && rr == unicode.ReplacementChar { + d.buf = buf + halt.errorBytes("invalid UTF-8 character found after: ", buf) + } + buf = append(buf, d.bstr[:utf8.EncodeRune(d.bstr[:], rr)]...) + default: + d.buf = buf + halt.errorByte("unsupported escaped value: ", c) + } + + bs, c = d.r.jsonReadAsisChars() + buf = append(buf, bs...) + if c == '"' { + break + } + } + d.buf = buf + return +} + +func (d *jsonDecDriverBytes) appendStringAsBytesSlashU() (r rune) { + var rr uint32 + cs := d.r.readn4() + if rr = jsonSlashURune(cs); rr == unicode.ReplacementChar { + return unicode.ReplacementChar + } + r = rune(rr) + if utf16.IsSurrogate(r) { + csu := d.r.readn2() + cs = d.r.readn4() + if csu[0] == '\\' && csu[1] == 'u' { + if rr = jsonSlashURune(cs); rr == unicode.ReplacementChar { + return unicode.ReplacementChar + } + return utf16.DecodeRune(r, rune(rr)) + } + return unicode.ReplacementChar + } + return +} + +func (d *jsonDecDriverBytes) DecodeNaked() { + z := d.d.naked() + + d.advance() + var bs []byte + var err error + switch d.tok { + case 'n': + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + z.v = valueTypeNil + case 'f': + d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.r.readn4()) + z.v = valueTypeBool + z.b = false + case 't': + d.checkLit3([3]byte{'r', 'u', 'e'}, d.r.readn3()) + z.v = valueTypeBool + z.b = true + case '{': + z.v = valueTypeMap + case '[': + z.v = valueTypeArray + case '"': + + d.tok = 0 + bs, z.b = d.dblQuoteStringAsBytes() + att := d.d.attachState(z.b) + if jsonNakedBoolNumInQuotedStr && + d.h.MapKeyAsString && len(bs) > 0 && d.d.c == containerMapKey { + switch string(bs) { + + case "true": + z.v = valueTypeBool + z.b = true + case "false": + z.v = valueTypeBool + z.b = false + default: + if err = jsonNakedNum(z, bs, d.h.PreferFloat, d.h.SignedInteger); err != nil { + z.v = valueTypeString + z.s = d.d.detach2Str(bs, att) + } + } + } else { + z.v = valueTypeString + z.s = d.d.detach2Str(bs, att) + } + default: + bs, d.tok = d.r.jsonReadNum() + if len(bs) == 0 { + halt.errorStr("decode number from empty string") + } + if err = jsonNakedNum(z, bs, d.h.PreferFloat, d.h.SignedInteger); err != nil { + halt.errorf("decode number from %s: %v", any(bs), err) + } + } +} + +func (e *jsonEncDriverBytes) reset() { + e.dl = 0 + + e.typical = e.h.typical() + if e.h.HTMLCharsAsIs { + e.s = &jsonCharSafeBitset + } else { + e.s = &jsonCharHtmlSafeBitset + } + e.di = int8(e.h.Indent) + e.d = e.h.Indent != 0 + e.ks = e.h.MapKeyAsString + e.is = e.h.IntegerAsString + + var ho jsonHandleOpts + ho.reset(e.h) + e.timeFmt = ho.timeFmt + e.bytesFmt = ho.bytesFmt + e.timeFmtLayout = "" + e.byteFmter = nil + if len(ho.timeFmtLayouts) > 0 { + e.timeFmtLayout = ho.timeFmtLayouts[0] + } + if len(ho.byteFmters) > 0 { + e.byteFmter = ho.byteFmters[0] + } + e.rawext = ho.rawext +} + +func (d *jsonDecDriverBytes) reset() { + d.buf = d.d.blist.check(d.buf, 256) + d.tok = 0 + + d.jsonHandleOpts.reset(d.h) +} + +func (d *jsonEncDriverBytes) init(hh Handle, shared *encoderBase, enc encoderI) (fp interface{}) { + callMake(&d.w) + d.h = hh.(*JsonHandle) + d.e = shared + if shared.bytes { + fp = jsonFpEncBytes + } else { + fp = jsonFpEncIO + } + + d.init2(enc) + return +} + +func (e *jsonEncDriverBytes) writeBytesAsis(b []byte) { e.w.writeb(b) } + +func (e *jsonEncDriverBytes) writerEnd() { e.w.end() } + +func (e *jsonEncDriverBytes) resetOutBytes(out *[]byte) { + e.w.resetBytes(*out, out) +} + +func (e *jsonEncDriverBytes) resetOutIO(out io.Writer) { + e.w.resetIO(out, e.h.WriterBufferSize, &e.e.blist) +} + +func (d *jsonDecDriverBytes) init(hh Handle, shared *decoderBase, dec decoderI) (fp interface{}) { + callMake(&d.r) + d.h = hh.(*JsonHandle) + d.d = shared + if shared.bytes { + fp = jsonFpDecBytes + } else { + fp = jsonFpDecIO + } + + d.init2(dec) + return +} + +func (d *jsonDecDriverBytes) NumBytesRead() int { + return int(d.r.numread()) +} + +func (d *jsonDecDriverBytes) resetInBytes(in []byte) { + d.r.resetBytes(in) +} + +func (d *jsonDecDriverBytes) resetInIO(r io.Reader) { + d.r.resetIO(r, d.h.ReaderBufferSize, d.h.MaxInitLen, &d.d.blist) +} + +func (d *jsonDecDriverBytes) descBd() (s string) { + halt.onerror(errJsonNoBd) + return +} + +func (d *jsonEncDriverBytes) init2(enc encoderI) { + d.enc = enc + +} + +func (d *jsonDecDriverBytes) init2(dec decoderI) { + d.dec = dec + + d.buf = d.buf[:0] + + d.d.jsms = d.h.MapKeyAsString +} + +type helperEncDriverJsonIO struct{} +type encFnJsonIO struct { + i encFnInfo + fe func(*encoderJsonIO, *encFnInfo, reflect.Value) +} +type encRtidFnJsonIO struct { + rtid uintptr + fn *encFnJsonIO +} +type encoderJsonIO struct { + dh helperEncDriverJsonIO + fp *fastpathEsJsonIO + e jsonEncDriverIO + encoderBase +} +type helperDecDriverJsonIO struct{} +type decFnJsonIO struct { + i decFnInfo + fd func(*decoderJsonIO, *decFnInfo, reflect.Value) +} +type decRtidFnJsonIO struct { + rtid uintptr + fn *decFnJsonIO +} +type decoderJsonIO struct { + dh helperDecDriverJsonIO + fp *fastpathDsJsonIO + d jsonDecDriverIO + decoderBase +} +type jsonEncDriverIO struct { + noBuiltInTypes + h *JsonHandle + e *encoderBase + s *bitset256 + + w bufioEncWriter + + enc encoderI + + timeFmtLayout string + byteFmter jsonBytesFmter + + timeFmt jsonTimeFmt + bytesFmt jsonBytesFmt + + di int8 + d bool + dl uint16 + + ks bool + is byte + + typical bool + + rawext bool + + b [48]byte +} +type jsonDecDriverIO struct { + noBuiltInTypes + decDriverNoopNumberHelper + h *JsonHandle + d *decoderBase + + r ioDecReader + + buf []byte + + tok uint8 + _ bool + _ byte + bstr [4]byte + + jsonHandleOpts + + dec decoderI +} + +func (e *encoderJsonIO) rawExt(_ *encFnInfo, rv reflect.Value) { + if re := rv2i(rv).(*RawExt); re == nil { + e.e.EncodeNil() + } else { + e.e.EncodeRawExt(re) + } +} + +func (e *encoderJsonIO) ext(f *encFnInfo, rv reflect.Value) { + e.e.EncodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (e *encoderJsonIO) selferMarshal(_ *encFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecEncodeSelf(&Encoder{e}) +} + +func (e *encoderJsonIO) binaryMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.BinaryMarshaler).MarshalBinary() + e.marshalRaw(bs, fnerr) +} + +func (e *encoderJsonIO) textMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.TextMarshaler).MarshalText() + e.marshalUtf8(bs, fnerr) +} + +func (e *encoderJsonIO) jsonMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(jsonMarshaler).MarshalJSON() + e.marshalAsis(bs, fnerr) +} + +func (e *encoderJsonIO) raw(_ *encFnInfo, rv reflect.Value) { + e.rawBytes(rv2i(rv).(Raw)) +} + +func (e *encoderJsonIO) encodeComplex64(v complex64) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat32(real(v)) +} + +func (e *encoderJsonIO) encodeComplex128(v complex128) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat64(real(v)) +} + +func (e *encoderJsonIO) kBool(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeBool(rvGetBool(rv)) +} + +func (e *encoderJsonIO) kTime(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeTime(rvGetTime(rv)) +} + +func (e *encoderJsonIO) kString(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeString(rvGetString(rv)) +} + +func (e *encoderJsonIO) kFloat32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat32(rvGetFloat32(rv)) +} + +func (e *encoderJsonIO) kFloat64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat64(rvGetFloat64(rv)) +} + +func (e *encoderJsonIO) kComplex64(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex64(rvGetComplex64(rv)) +} + +func (e *encoderJsonIO) kComplex128(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex128(rvGetComplex128(rv)) +} + +func (e *encoderJsonIO) kInt(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt(rv))) +} + +func (e *encoderJsonIO) kInt8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt8(rv))) +} + +func (e *encoderJsonIO) kInt16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt16(rv))) +} + +func (e *encoderJsonIO) kInt32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt32(rv))) +} + +func (e *encoderJsonIO) kInt64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt64(rv))) +} + +func (e *encoderJsonIO) kUint(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint(rv))) +} + +func (e *encoderJsonIO) kUint8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint8(rv))) +} + +func (e *encoderJsonIO) kUint16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint16(rv))) +} + +func (e *encoderJsonIO) kUint32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint32(rv))) +} + +func (e *encoderJsonIO) kUint64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint64(rv))) +} + +func (e *encoderJsonIO) kUintptr(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUintptr(rv))) +} + +func (e *encoderJsonIO) kSeqFn(rt reflect.Type) (fn *encFnJsonIO) { + + if rt = baseRT(rt); rt.Kind() != reflect.Interface { + fn = e.fn(rt) + } + return +} + +func (e *encoderJsonIO) kArrayWMbs(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(l) + e.mapStart(l >> 1) + + var fn *encFnJsonIO + builtin := ti.tielem.flagEncBuiltin + if !builtin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerMapKey + e.e.WriteMapElemKey(true) + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(false) + } else { + e.mapElemValue() + } + } + e.c = 0 + e.e.WriteMapEnd() + +} + +func (e *encoderJsonIO) kArrayW(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l <= 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(l) + + var fn *encFnJsonIO + if !ti.tielem.flagEncBuiltin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerArrayElem + e.e.WriteArrayElem(true) + builtin := ti.tielem.flagEncBuiltin + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + e.c = containerArrayElem + e.e.WriteArrayElem(false) + } + + e.c = 0 + e.e.WriteArrayEnd() +} + +func (e *encoderJsonIO) kChan(f *encFnInfo, rv reflect.Value) { + if f.ti.chandir&uint8(reflect.RecvDir) == 0 { + halt.errorStr("send-only channel cannot be encoded") + } + if !f.ti.mbs && uint8TypId == rt2id(f.ti.elem) { + e.kSliceBytesChan(rv) + return + } + rtslice := reflect.SliceOf(f.ti.elem) + rv = chanToSlice(rv, rtslice, e.h.ChanRecvTimeout) + ti := e.h.getTypeInfo(rt2id(rtslice), rtslice) + if f.ti.mbs { + e.kArrayWMbs(rv, ti, true) + } else { + e.kArrayW(rv, ti, true) + } +} + +func (e *encoderJsonIO) kSlice(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, true) + } else if f.ti.rtid == uint8SliceTypId || uint8TypId == rt2id(f.ti.elem) { + + e.e.EncodeBytes(rvGetBytes(rv)) + } else { + e.kArrayW(rv, f.ti, true) + } +} + +func (e *encoderJsonIO) kArray(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, false) + } else if handleBytesWithinKArray && uint8TypId == rt2id(f.ti.elem) { + e.e.EncodeStringBytesRaw(rvGetArrayBytes(rv, nil)) + } else { + e.kArrayW(rv, f.ti, false) + } +} + +func (e *encoderJsonIO) kSliceBytesChan(rv reflect.Value) { + + bs0 := e.blist.peek(32, true) + bs := bs0 + + irv := rv2i(rv) + ch, ok := irv.(<-chan byte) + if !ok { + ch = irv.(chan byte) + } + +L1: + switch timeout := e.h.ChanRecvTimeout; { + case timeout == 0: + for { + select { + case b := <-ch: + bs = append(bs, b) + default: + break L1 + } + } + case timeout > 0: + tt := time.NewTimer(timeout) + for { + select { + case b := <-ch: + bs = append(bs, b) + case <-tt.C: + + break L1 + } + } + default: + for b := range ch { + bs = append(bs, b) + } + } + + e.e.EncodeBytes(bs) + e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.blist.put(bs0) + } +} + +func (e *encoderJsonIO) kStructFieldKey(keyType valueType, encName string) { + + if keyType == valueTypeString { + e.e.EncodeString(encName) + } else if keyType == valueTypeInt { + e.e.EncodeInt(must.Int(strconv.ParseInt(encName, 10, 64))) + } else if keyType == valueTypeUint { + e.e.EncodeUint(must.Uint(strconv.ParseUint(encName, 10, 64))) + } else if keyType == valueTypeFloat { + e.e.EncodeFloat64(must.Float(strconv.ParseFloat(encName, 64))) + } else { + halt.errorStr2("invalid struct key type: ", keyType.String()) + } + +} + +func (e *encoderJsonIO) kStructSimple(f *encFnInfo, rv reflect.Value) { + _ = e.e + tisfi := f.ti.sfi.source() + + chkCirRef := e.h.CheckCircularRef + var si *structFieldInfo + var j int + + if f.ti.toArray || e.h.StructToArray { + if len(tisfi) == 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } else { + if len(tisfi) == 0 { + e.e.WriteMapEmpty() + return + } + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + e.mapStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.EncodeStringNoEscape4Json(si.encName) + e.mapElemValue() + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteMapEnd() + } +} + +func (e *encoderJsonIO) kStruct(f *encFnInfo, rv reflect.Value) { + _ = e.e + ti := f.ti + toMap := !(ti.toArray || e.h.StructToArray) + var mf map[string]interface{} + if ti.flagMissingFielder { + toMap = true + mf = rv2i(rv).(MissingFielder).CodecMissingFields() + } else if ti.flagMissingFielderPtr { + toMap = true + if rv.CanAddr() { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder).CodecMissingFields() + } else { + mf = rv2i(e.addrRV(rv, ti.rt, ti.ptr)).(MissingFielder).CodecMissingFields() + } + } + newlen := len(mf) + tisfi := ti.sfi.source() + newlen += len(tisfi) + + var fkvs = e.slist.get(newlen)[:newlen] + + recur := e.h.RecursiveEmptyCheck + chkCirRef := e.h.CheckCircularRef + + var xlen int + + var kv sfiRv + var j int + var sf encStructFieldObj + if toMap { + newlen = 0 + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + for _, si := range tisfi { + + if si.omitEmpty { + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyValue(kv.r, e.h.TypeInfos, recur) { + continue + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[newlen] = kv + newlen++ + } + + var mf2s []stringIntf + if len(mf) != 0 { + mf2s = make([]stringIntf, 0, len(mf)) + for k, v := range mf { + if k == "" { + continue + } + if ti.infoFieldOmitempty && isEmptyValue(reflect.ValueOf(v), e.h.TypeInfos, recur) { + continue + } + mf2s = append(mf2s, stringIntf{k, v}) + } + } + + xlen = newlen + len(mf2s) + if xlen == 0 { + e.e.WriteMapEmpty() + goto END + } + + e.mapStart(xlen) + + if len(mf2s) != 0 && e.h.Canonical { + mf2w := make([]encStructFieldObj, newlen+len(mf2s)) + for j = 0; j < newlen; j++ { + kv = fkvs[j] + mf2w[j] = encStructFieldObj{kv.v.encName, kv.r, nil, true, + !kv.v.encNameEscape4Json, kv.v.encBuiltin} + } + for _, v := range mf2s { + mf2w[j] = encStructFieldObj{v.v, reflect.Value{}, v.i, false, false, false} + j++ + } + sort.Sort((encStructFieldObjSlice)(mf2w)) + for j, sf = range mf2w { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && sf.noEsc4json { + e.e.EncodeStringNoEscape4Json(sf.key) + } else { + e.kStructFieldKey(ti.keyType, sf.key) + } + e.mapElemValue() + if sf.isRv { + if sf.builtin { + e.encodeIB(rv2i(baseRVRV(sf.rv))) + } else { + e.encodeValue(sf.rv, nil) + } + } else { + if !e.encodeBuiltin(sf.intf) { + e.encodeR(reflect.ValueOf(sf.intf)) + } + + } + } + } else { + keytyp := ti.keyType + for j = 0; j < newlen; j++ { + kv = fkvs[j] + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && !kv.v.encNameEscape4Json { + e.e.EncodeStringNoEscape4Json(kv.v.encName) + } else { + e.kStructFieldKey(keytyp, kv.v.encName) + } + e.mapElemValue() + if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + for _, v := range mf2s { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.kStructFieldKey(keytyp, v.v) + e.mapElemValue() + if !e.encodeBuiltin(v.i) { + e.encodeR(reflect.ValueOf(v.i)) + } + + j++ + } + } + + e.c = 0 + e.e.WriteMapEnd() + } else { + newlen = len(tisfi) + for i, si := range tisfi { + + if si.omitEmpty { + + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyContainerValue(kv.r, e.h.TypeInfos, recur) { + kv.r = reflect.Value{} + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[i] = kv + } + + if newlen == 0 { + e.e.WriteArrayEmpty() + goto END + } + + e.arrayStart(newlen) + for j = 0; j < newlen; j++ { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + kv = fkvs[j] + if !kv.r.IsValid() { + e.e.EncodeNil() + } else if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } + +END: + + e.slist.put(fkvs) +} + +func (e *encoderJsonIO) kMap(f *encFnInfo, rv reflect.Value) { + _ = e.e + l := rvLenMap(rv) + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.mapStart(l) + + var keyFn, valFn *encFnJsonIO + + ktypeKind := reflect.Kind(f.ti.keykind) + vtypeKind := reflect.Kind(f.ti.elemkind) + + rtval := f.ti.elem + rtvalkind := vtypeKind + for rtvalkind == reflect.Ptr { + rtval = rtval.Elem() + rtvalkind = rtval.Kind() + } + if rtvalkind != reflect.Interface { + valFn = e.fn(rtval) + } + + var rvv = mapAddrLoopvarRV(f.ti.elem, vtypeKind) + + rtkey := f.ti.key + var keyTypeIsString = stringTypId == rt2id(rtkey) + if keyTypeIsString { + keyFn = e.fn(rtkey) + } else { + for rtkey.Kind() == reflect.Ptr { + rtkey = rtkey.Elem() + } + if rtkey.Kind() != reflect.Interface { + keyFn = e.fn(rtkey) + } + } + + if e.h.Canonical { + e.kMapCanonical(f.ti, rv, rvv, keyFn, valFn) + e.c = 0 + e.e.WriteMapEnd() + return + } + + var rvk = mapAddrLoopvarRV(f.ti.key, ktypeKind) + + var it mapIter + mapRange(&it, rv, rvk, rvv, true) + + kbuiltin := f.ti.tikey.flagEncBuiltin + vbuiltin := f.ti.tielem.flagEncBuiltin + for j := 0; it.Next(); j++ { + rv = it.Key() + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if keyTypeIsString { + e.e.EncodeString(rvGetString(rv)) + } else if kbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(rv, keyFn) + } + e.mapElemValue() + rv = it.Value() + if vbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(it.Value(), valFn) + } + } + it.Done() + + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderJsonIO) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valFn *encFnJsonIO) { + _ = e.e + + rtkey := ti.key + rtkeydecl := rtkey.PkgPath() == "" && rtkey.Name() != "" + + mks := rv.MapKeys() + rtkeyKind := rtkey.Kind() + mparams := getMapReqParams(ti) + + switch rtkeyKind { + case reflect.Bool: + + if len(mks) == 2 && mks[0].Bool() { + mks[0], mks[1] = mks[1], mks[0] + } + for i := range mks { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeBool(mks[i].Bool()) + } else { + e.encodeValueNonNil(mks[i], keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mks[i], rvv, mparams), valFn) + } + case reflect.String: + mksv := make([]orderedRv[string], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rvGetString(k) + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeString(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr: + mksv := make([]orderedRv[uint64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Uint() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeUint(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + mksv := make([]orderedRv[int64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Int() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeInt(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float32: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat32(float32(mksv[i].v)) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float64: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat64(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + default: + if rtkey == timeTyp { + mksv := make([]timeRv, len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rv2i(k).(time.Time) + } + slices.SortFunc(mksv, cmpTimeRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeTime(mksv[i].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + break + } + + bs0 := e.blist.get(len(mks) * 16) + mksv := bs0 + mksbv := make([]bytesRv, len(mks)) + + sideEncode(e.hh, &e.h.sideEncPool, func(se encoderI) { + se.ResetBytes(&mksv) + for i, k := range mks { + v := &mksbv[i] + l := len(mksv) + se.setContainerState(containerMapKey) + se.encodeR(baseRVRV(k)) + se.atEndOfEncode() + se.writerEnd() + v.r = k + v.v = mksv[l:] + } + }) + + slices.SortFunc(mksbv, cmpBytesRv) + for j := range mksbv { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.writeBytesAsis(mksbv[j].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksbv[j].r, rvv, mparams), valFn) + } + e.blist.put(mksv) + if !byteSliceSameData(bs0, mksv) { + e.blist.put(bs0) + } + } +} + +func (e *encoderJsonIO) init(h Handle) { + initHandle(h) + callMake(&e.e) + e.hh = h + e.h = h.getBasicHandle() + + e.err = errEncoderNotInitialized + + e.fp = e.e.init(h, &e.encoderBase, e).(*fastpathEsJsonIO) + + if e.bytes { + e.rtidFn = &e.h.rtidFnsEncBytes + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtBytes + } else { + e.rtidFn = &e.h.rtidFnsEncIO + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtIO + } + + e.reset() +} + +func (e *encoderJsonIO) reset() { + e.e.reset() + if e.ci != nil { + e.ci = e.ci[:0] + } + e.c = 0 + e.calls = 0 + e.seq = 0 + e.err = nil +} + +func (e *encoderJsonIO) Encode(v interface{}) (err error) { + + defer panicValToErr(e, callRecoverSentinel, &e.err, &err, debugging) + e.mustEncode(v) + return +} + +func (e *encoderJsonIO) MustEncode(v interface{}) { + defer panicValToErr(e, callRecoverSentinel, &e.err, nil, true) + e.mustEncode(v) + return +} + +func (e *encoderJsonIO) mustEncode(v interface{}) { + halt.onerror(e.err) + if e.hh == nil { + halt.onerror(errNoFormatHandle) + } + + e.calls++ + if !e.encodeBuiltin(v) { + e.encodeR(reflect.ValueOf(v)) + } + + e.calls-- + if e.calls == 0 { + e.e.atEndOfEncode() + e.e.writerEnd() + } +} + +func (e *encoderJsonIO) encodeI(iv interface{}) { + if !e.encodeBuiltin(iv) { + e.encodeR(reflect.ValueOf(iv)) + } +} + +func (e *encoderJsonIO) encodeIB(iv interface{}) { + if !e.encodeBuiltin(iv) { + + halt.errorStr("[should not happen] invalid type passed to encodeBuiltin") + } +} + +func (e *encoderJsonIO) encodeR(base reflect.Value) { + e.encodeValue(base, nil) +} + +func (e *encoderJsonIO) encodeBuiltin(iv interface{}) (ok bool) { + ok = true + switch v := iv.(type) { + case nil: + e.e.EncodeNil() + + case Raw: + e.rawBytes(v) + case string: + e.e.EncodeString(v) + case bool: + e.e.EncodeBool(v) + case int: + e.e.EncodeInt(int64(v)) + case int8: + e.e.EncodeInt(int64(v)) + case int16: + e.e.EncodeInt(int64(v)) + case int32: + e.e.EncodeInt(int64(v)) + case int64: + e.e.EncodeInt(v) + case uint: + e.e.EncodeUint(uint64(v)) + case uint8: + e.e.EncodeUint(uint64(v)) + case uint16: + e.e.EncodeUint(uint64(v)) + case uint32: + e.e.EncodeUint(uint64(v)) + case uint64: + e.e.EncodeUint(v) + case uintptr: + e.e.EncodeUint(uint64(v)) + case float32: + e.e.EncodeFloat32(v) + case float64: + e.e.EncodeFloat64(v) + case complex64: + e.encodeComplex64(v) + case complex128: + e.encodeComplex128(v) + case time.Time: + e.e.EncodeTime(v) + case []byte: + e.e.EncodeBytes(v) + default: + + ok = !skipFastpathTypeSwitchInDirectCall && e.dh.fastpathEncodeTypeSwitch(iv, e) + } + return +} + +func (e *encoderJsonIO) encodeValue(rv reflect.Value, fn *encFnJsonIO) { + + var ciPushes int + + var rvp reflect.Value + var rvpValid bool + +RV: + switch rv.Kind() { + case reflect.Ptr: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = true + rvp = rv + rv = rv.Elem() + + if e.h.CheckCircularRef && e.ci.canPushElemKind(rv.Kind()) { + e.ci.push(rv2i(rvp)) + ciPushes++ + } + goto RV + case reflect.Interface: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = false + rvp = reflect.Value{} + rv = rv.Elem() + fn = nil + goto RV + case reflect.Map: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteMapEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Slice, reflect.Chan: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteArrayEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Invalid, reflect.Func: + e.e.EncodeNil() + goto END + } + + if fn == nil { + fn = e.fn(rv.Type()) + } + + if !fn.i.addrE { + + } else if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + fn.fe(e, &fn.i, rv) + +END: + if ciPushes > 0 { + e.ci.pop(ciPushes) + } +} + +func (e *encoderJsonIO) encodeValueNonNil(rv reflect.Value, fn *encFnJsonIO) { + + if fn.i.addrE { + if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + } + fn.fe(e, &fn.i, rv) +} + +func (e *encoderJsonIO) encodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + e.encodeValue(baseRV(v), e.fn(t)) + } else { + e.encodeValue(baseRV(v), e.fnNoExt(t)) + } +} + +func (e *encoderJsonIO) marshalUtf8(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.EncodeString(stringView(bs)) + } +} + +func (e *encoderJsonIO) marshalAsis(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.writeBytesAsis(bs) + } +} + +func (e *encoderJsonIO) marshalRaw(bs []byte, fnerr error) { + halt.onerror(fnerr) + e.e.EncodeBytes(bs) +} + +func (e *encoderJsonIO) rawBytes(vv Raw) { + v := []byte(vv) + if !e.h.Raw { + halt.errorBytes("Raw values cannot be encoded: ", v) + } + e.e.writeBytesAsis(v) +} + +func (e *encoderJsonIO) fn(t reflect.Type) *encFnJsonIO { + return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false) +} + +func (e *encoderJsonIO) fnNoExt(t reflect.Type) *encFnJsonIO { + return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true) +} + +func (e *encoderJsonIO) mapStart(length int) { + e.e.WriteMapStart(length) + e.c = containerMapStart +} + +func (e *encoderJsonIO) mapElemValue() { + e.e.WriteMapElemValue() + e.c = containerMapValue +} + +func (e *encoderJsonIO) arrayStart(length int) { + e.e.WriteArrayStart(length) + e.c = containerArrayStart +} + +func (e *encoderJsonIO) writerEnd() { + e.e.writerEnd() +} + +func (e *encoderJsonIO) atEndOfEncode() { + e.e.atEndOfEncode() +} + +func (e *encoderJsonIO) Reset(w io.Writer) { + if e.bytes { + halt.onerror(errEncNoResetBytesWithWriter) + } + e.reset() + if w == nil { + w = io.Discard + } + e.e.resetOutIO(w) +} + +func (e *encoderJsonIO) ResetBytes(out *[]byte) { + if !e.bytes { + halt.onerror(errEncNoResetWriterWithBytes) + } + e.resetBytes(out) +} + +func (e *encoderJsonIO) resetBytes(out *[]byte) { + e.reset() + if out == nil { + out = &bytesEncAppenderDefOut + } + e.e.resetOutBytes(out) +} + +func (helperEncDriverJsonIO) newEncoderBytes(out *[]byte, h Handle) *encoderJsonIO { + var c1 encoderJsonIO + c1.bytes = true + c1.init(h) + c1.ResetBytes(out) + return &c1 +} + +func (helperEncDriverJsonIO) newEncoderIO(out io.Writer, h Handle) *encoderJsonIO { + var c1 encoderJsonIO + c1.bytes = false + c1.init(h) + c1.Reset(out) + return &c1 +} + +func (helperEncDriverJsonIO) encFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathEsJsonIO) (f *fastpathEJsonIO, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperEncDriverJsonIO) encFindRtidFn(s []encRtidFnJsonIO, rtid uintptr) (i uint, fn *encFnJsonIO) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperEncDriverJsonIO) encFromRtidFnSlice(fns *atomicRtidFnSlice) (s []encRtidFnJsonIO) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]encRtidFnJsonIO](v)) + } + return +} + +func (dh helperEncDriverJsonIO) encFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, + x *BasicHandle, fp *fastpathEsJsonIO, checkExt bool) (fn *encFnJsonIO) { + return dh.encFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperEncDriverJsonIO) encFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsJsonIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnJsonIO) { + rtid := rt2id(rt) + var sp []encRtidFnJsonIO = dh.encFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.encFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.encFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperEncDriverJsonIO) encFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsJsonIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnJsonIO) { + + fn = dh.encFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []encRtidFnJsonIO + mu.Lock() + sp = dh.encFromRtidFnSlice(fns) + + if sp == nil { + sp = []encRtidFnJsonIO{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.encFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]encRtidFnJsonIO, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = encRtidFnJsonIO{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperEncDriverJsonIO) encFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathEsJsonIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnJsonIO) { + fn = new(encFnJsonIO) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + if rtid == timeTypId && timeBuiltin { + fn.fe = (*encoderJsonIO).kTime + } else if rtid == rawTypId { + fn.fe = (*encoderJsonIO).raw + } else if rtid == rawExtTypId { + fn.fe = (*encoderJsonIO).rawExt + fi.addrE = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fe = (*encoderJsonIO).ext + if rk == reflect.Struct || rk == reflect.Array { + fi.addrE = true + } + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fe = (*encoderJsonIO).selferMarshal + fi.addrE = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fe = (*encoderJsonIO).binaryMarshal + fi.addrE = ti.flagBinaryMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fe = (*encoderJsonIO).jsonMarshal + fi.addrE = ti.flagJsonMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fe = (*encoderJsonIO).textMarshal + fi.addrE = ti.flagTextMarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fe = fp[idx].encfn + } + } else { + + xfe, xrt := dh.encFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf := xfe.encfn + fn.fe = func(e *encoderJsonIO, xf *encFnInfo, xrv reflect.Value) { + xfnf(e, xf, rvConvert(xrv, xrt)) + } + } + } + } + if fn.fe == nil { + switch rk { + case reflect.Bool: + fn.fe = (*encoderJsonIO).kBool + case reflect.String: + + fn.fe = (*encoderJsonIO).kString + case reflect.Int: + fn.fe = (*encoderJsonIO).kInt + case reflect.Int8: + fn.fe = (*encoderJsonIO).kInt8 + case reflect.Int16: + fn.fe = (*encoderJsonIO).kInt16 + case reflect.Int32: + fn.fe = (*encoderJsonIO).kInt32 + case reflect.Int64: + fn.fe = (*encoderJsonIO).kInt64 + case reflect.Uint: + fn.fe = (*encoderJsonIO).kUint + case reflect.Uint8: + fn.fe = (*encoderJsonIO).kUint8 + case reflect.Uint16: + fn.fe = (*encoderJsonIO).kUint16 + case reflect.Uint32: + fn.fe = (*encoderJsonIO).kUint32 + case reflect.Uint64: + fn.fe = (*encoderJsonIO).kUint64 + case reflect.Uintptr: + fn.fe = (*encoderJsonIO).kUintptr + case reflect.Float32: + fn.fe = (*encoderJsonIO).kFloat32 + case reflect.Float64: + fn.fe = (*encoderJsonIO).kFloat64 + case reflect.Complex64: + fn.fe = (*encoderJsonIO).kComplex64 + case reflect.Complex128: + fn.fe = (*encoderJsonIO).kComplex128 + case reflect.Chan: + fn.fe = (*encoderJsonIO).kChan + case reflect.Slice: + fn.fe = (*encoderJsonIO).kSlice + case reflect.Array: + fn.fe = (*encoderJsonIO).kArray + case reflect.Struct: + if ti.simple { + fn.fe = (*encoderJsonIO).kStructSimple + } else { + fn.fe = (*encoderJsonIO).kStruct + } + case reflect.Map: + fn.fe = (*encoderJsonIO).kMap + case reflect.Interface: + + fn.fe = (*encoderJsonIO).kErr + default: + + fn.fe = (*encoderJsonIO).kErr + } + } + } + return +} +func (d *decoderJsonIO) rawExt(f *decFnInfo, rv reflect.Value) { + d.d.DecodeRawExt(rv2i(rv).(*RawExt)) +} + +func (d *decoderJsonIO) ext(f *decFnInfo, rv reflect.Value) { + d.d.DecodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (d *decoderJsonIO) selferUnmarshal(_ *decFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecDecodeSelf(&Decoder{d}) +} + +func (d *decoderJsonIO) binaryUnmarshal(_ *decFnInfo, rv reflect.Value) { + bm := rv2i(rv).(encoding.BinaryUnmarshaler) + xbs, _ := d.d.DecodeBytes() + fnerr := bm.UnmarshalBinary(xbs) + halt.onerror(fnerr) +} + +func (d *decoderJsonIO) textUnmarshal(_ *decFnInfo, rv reflect.Value) { + tm := rv2i(rv).(encoding.TextUnmarshaler) + fnerr := tm.UnmarshalText(bytesOKs(d.d.DecodeStringAsBytes())) + halt.onerror(fnerr) +} + +func (d *decoderJsonIO) jsonUnmarshal(_ *decFnInfo, rv reflect.Value) { + d.jsonUnmarshalV(rv2i(rv).(jsonUnmarshaler)) +} + +func (d *decoderJsonIO) jsonUnmarshalV(tm jsonUnmarshaler) { + + halt.onerror(tm.UnmarshalJSON(d.d.nextValueBytes())) +} + +func (d *decoderJsonIO) kErr(_ *decFnInfo, rv reflect.Value) { + halt.errorf("unsupported decoding kind: %s, for %#v", rv.Kind(), rv) + +} + +func (d *decoderJsonIO) raw(_ *decFnInfo, rv reflect.Value) { + rvSetBytes(rv, d.rawBytes()) +} + +func (d *decoderJsonIO) kString(_ *decFnInfo, rv reflect.Value) { + rvSetString(rv, d.detach2Str(d.d.DecodeStringAsBytes())) +} + +func (d *decoderJsonIO) kBool(_ *decFnInfo, rv reflect.Value) { + rvSetBool(rv, d.d.DecodeBool()) +} + +func (d *decoderJsonIO) kTime(_ *decFnInfo, rv reflect.Value) { + rvSetTime(rv, d.d.DecodeTime()) +} + +func (d *decoderJsonIO) kFloat32(_ *decFnInfo, rv reflect.Value) { + rvSetFloat32(rv, d.d.DecodeFloat32()) +} + +func (d *decoderJsonIO) kFloat64(_ *decFnInfo, rv reflect.Value) { + rvSetFloat64(rv, d.d.DecodeFloat64()) +} + +func (d *decoderJsonIO) kComplex64(_ *decFnInfo, rv reflect.Value) { + rvSetComplex64(rv, complex(d.d.DecodeFloat32(), 0)) +} + +func (d *decoderJsonIO) kComplex128(_ *decFnInfo, rv reflect.Value) { + rvSetComplex128(rv, complex(d.d.DecodeFloat64(), 0)) +} + +func (d *decoderJsonIO) kInt(_ *decFnInfo, rv reflect.Value) { + rvSetInt(rv, int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))) +} + +func (d *decoderJsonIO) kInt8(_ *decFnInfo, rv reflect.Value) { + rvSetInt8(rv, int8(chkOvf.IntV(d.d.DecodeInt64(), 8))) +} + +func (d *decoderJsonIO) kInt16(_ *decFnInfo, rv reflect.Value) { + rvSetInt16(rv, int16(chkOvf.IntV(d.d.DecodeInt64(), 16))) +} + +func (d *decoderJsonIO) kInt32(_ *decFnInfo, rv reflect.Value) { + rvSetInt32(rv, int32(chkOvf.IntV(d.d.DecodeInt64(), 32))) +} + +func (d *decoderJsonIO) kInt64(_ *decFnInfo, rv reflect.Value) { + rvSetInt64(rv, d.d.DecodeInt64()) +} + +func (d *decoderJsonIO) kUint(_ *decFnInfo, rv reflect.Value) { + rvSetUint(rv, uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderJsonIO) kUintptr(_ *decFnInfo, rv reflect.Value) { + rvSetUintptr(rv, uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderJsonIO) kUint8(_ *decFnInfo, rv reflect.Value) { + rvSetUint8(rv, uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))) +} + +func (d *decoderJsonIO) kUint16(_ *decFnInfo, rv reflect.Value) { + rvSetUint16(rv, uint16(chkOvf.UintV(d.d.DecodeUint64(), 16))) +} + +func (d *decoderJsonIO) kUint32(_ *decFnInfo, rv reflect.Value) { + rvSetUint32(rv, uint32(chkOvf.UintV(d.d.DecodeUint64(), 32))) +} + +func (d *decoderJsonIO) kUint64(_ *decFnInfo, rv reflect.Value) { + rvSetUint64(rv, d.d.DecodeUint64()) +} + +func (d *decoderJsonIO) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) { + + n := d.naked() + d.d.DecodeNaked() + + if decFailNonEmptyIntf && f.ti.numMeth > 0 { + halt.errorf("cannot decode non-nil codec value into nil %v (%v methods)", f.ti.rt, f.ti.numMeth) + } + + switch n.v { + case valueTypeMap: + mtid := d.mtid + if mtid == 0 { + if d.jsms { + mtid = mapStrIntfTypId + } else { + mtid = mapIntfIntfTypId + } + } + if mtid == mapStrIntfTypId { + var v2 map[string]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if mtid == mapIntfIntfTypId { + var v2 map[interface{}]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.mtr { + rvn = reflect.New(d.h.MapType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + + rvn = rvZeroAddrK(d.h.MapType, reflect.Map) + d.decodeValue(rvn, nil) + } + case valueTypeArray: + if d.stid == 0 || d.stid == intfSliceTypId { + var v2 []interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.str { + rvn = reflect.New(d.h.SliceType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + rvn = rvZeroAddrK(d.h.SliceType, reflect.Slice) + d.decodeValue(rvn, nil) + } + if d.h.PreferArrayOverSlice { + rvn = rvGetArray4Slice(rvn) + } + case valueTypeExt: + tag, bytes := n.u, n.l + bfn := d.h.getExtForTag(tag) + var re = RawExt{Tag: tag} + if bytes == nil { + + if bfn == nil { + d.decode(&re.Value) + rvn = rv4iptr(&re).Elem() + } else if bfn.ext == SelfExt { + rvn = rvZeroAddrK(bfn.rt, bfn.rt.Kind()) + d.decodeValue(rvn, d.fnNoExt(bfn.rt)) + } else { + rvn = reflect.New(bfn.rt) + d.interfaceExtConvertAndDecode(rv2i(rvn), bfn.ext) + rvn = rvn.Elem() + } + } else { + + if bfn == nil { + re.setData(bytes, false) + rvn = rv4iptr(&re).Elem() + } else { + rvn = reflect.New(bfn.rt) + if bfn.ext == SelfExt { + sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) }) + } else { + bfn.ext.ReadExt(rv2i(rvn), bytes) + } + rvn = rvn.Elem() + } + } + + if d.h.PreferPointerForStructOrArray && rvn.CanAddr() { + if rk := rvn.Kind(); rk == reflect.Array || rk == reflect.Struct { + rvn = rvn.Addr() + } + } + case valueTypeNil: + + case valueTypeInt: + rvn = n.ri() + case valueTypeUint: + rvn = n.ru() + case valueTypeFloat: + rvn = n.rf() + case valueTypeBool: + rvn = n.rb() + case valueTypeString, valueTypeSymbol: + rvn = n.rs() + case valueTypeBytes: + rvn = n.rl() + case valueTypeTime: + rvn = n.rt() + default: + halt.errorStr2("kInterfaceNaked: unexpected valueType: ", n.v.String()) + } + return +} + +func (d *decoderJsonIO) kInterface(f *decFnInfo, rv reflect.Value) { + + isnilrv := rvIsNil(rv) + + var rvn reflect.Value + + if d.h.InterfaceReset { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } else if !isnilrv { + decSetNonNilRV2Zero4Intf(rv) + } + return + } + } else if isnilrv { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } + return + } + } else { + + rvn = rv.Elem() + } + + canDecode, _ := isDecodeable(rvn) + + if !canDecode { + rvn2 := d.oneShotAddrRV(rvn.Type(), rvn.Kind()) + rvSetDirect(rvn2, rvn) + rvn = rvn2 + } + + d.decodeValue(rvn, nil) + rvSetIntf(rv, rvn) +} + +func (d *decoderJsonIO) kStructField(si *structFieldInfo, rv reflect.Value) { + if d.d.TryNil() { + rv = si.fieldNoAlloc(rv, true) + if rv.IsValid() { + decSetNonNilRV2Zero(rv) + } + } else if si.decBuiltin { + rv = rvAddr(si.fieldAlloc(rv), si.ptrTyp) + d.decode(rv2i(rv)) + } else { + fn := d.fn(si.baseTyp) + rv = si.fieldAlloc(rv) + if fn.i.addrD { + rv = rvAddr(rv, si.ptrTyp) + } + fn.fd(d, &fn.i, rv) + } +} + +func (d *decoderJsonIO) kStructSimple(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var rvkencname []byte + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderJsonIO) kStruct(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + var mf MissingFielder + if ti.flagMissingFielder { + mf = rv2i(rv).(MissingFielder) + } else if ti.flagMissingFielderPtr { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder) + } + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var name2 []byte + var rvkencname []byte + tkt := ti.keyType + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + + if tkt == valueTypeString { + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + } else if tkt == valueTypeInt { + rvkencname = strconv.AppendInt(d.b[:0], d.d.DecodeInt64(), 10) + } else if tkt == valueTypeUint { + rvkencname = strconv.AppendUint(d.b[:0], d.d.DecodeUint64(), 10) + } else if tkt == valueTypeFloat { + rvkencname = strconv.AppendFloat(d.b[:0], d.d.DecodeFloat64(), 'f', -1, 64) + } else { + halt.errorStr2("invalid struct key type: ", ti.keyType.String()) + } + + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else if mf != nil { + + name2 = append(name2[:0], rvkencname...) + var f interface{} + d.decode(&f) + if !mf.CodecMissingField(name2, f) && d.h.ErrorIfNoField { + halt.errorStr2("no matching struct field when decoding stream map with key: ", stringView(name2)) + } + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderJsonIO) kSlice(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + rvCanset := rv.CanSet() + + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + rvbs := rvGetBytes(rv) + if rvCanset { + bs2, bst := d.decodeBytesInto(rvbs, false) + if bst != dBytesIntoParamOut { + rvSetBytes(rv, bs2) + } + } else { + + d.decodeBytesInto(rvbs[:len(rvbs):len(rvbs)], true) + } + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset { + if rvIsNil(rv) { + rvSetDirect(rv, rvSliceZeroCap(ti.rt)) + } else { + rvSetSliceLen(rv, 0) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem0Mut := !scalarBitset.isset(ti.elemkind) + rtelem := ti.elem + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnJsonIO + + var rvChanged bool + + var rv0 = rv + var rv9 reflect.Value + + rvlen := rvLenSlice(rv) + rvcap := rvCapSlice(rv) + maxInitLen := d.maxInitLen() + hasLen := containerLenS >= 0 + if hasLen { + if containerLenS > rvcap { + oldRvlenGtZero := rvlen > 0 + rvlen1 := int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + if rvlen1 == rvlen { + } else if rvlen1 <= rvcap { + if rvCanset { + rvlen = rvlen1 + rvSetSliceLen(rv, rvlen) + } + } else if rvCanset { + rvlen = rvlen1 + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + if rvChanged && oldRvlenGtZero && rtelem0Mut { + rvCopySlice(rv, rv0, rtelem) + } + } else if containerLenS != rvlen { + if rvCanset { + rvlen = containerLenS + rvSetSliceLen(rv, rvlen) + } + } + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } + + var j int + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if rvCanset { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + + if rvlen < rvcap { + rvlen = rvcap + if rvCanset { + rvSetSliceLen(rv, rvlen) + } else if rvChanged { + rv = rvSlice(rv, rvlen) + } else { + halt.onerror(errExpandSliceCannotChange) + } + } else { + if !(rvCanset || rvChanged) { + halt.onerror(errExpandSliceCannotChange) + } + rv, rvcap, rvCanset = rvGrowSlice(rv, f.ti, rvcap, 1) + + rvlen = rvcap + rvChanged = !rvCanset + } + } + + rv9 = rvArrayIndex(rv, j, f.ti, true) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if j < rvlen { + if rvCanset { + rvSetSliceLen(rv, j) + } else if rvChanged { + rv = rvSlice(rv, j) + } + + } else if j == 0 && rvIsNil(rv) { + if rvCanset { + rv = rvSliceZeroCap(ti.rt) + rvCanset = false + rvChanged = true + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } +} + +func (d *decoderJsonIO) kArray(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + ctyp := d.d.ContainerType() + if handleBytesWithinKArray && (ctyp == valueTypeBytes || ctyp == valueTypeString) { + + if ti.elemkind != uint8(reflect.Uint8) { + halt.errorf("bytes/string in stream can decode into array of bytes, but not %v", ti.rt) + } + rvbs := rvGetArrayBytes(rv, nil) + d.decodeBytesInto(rvbs, true) + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var rv9 reflect.Value + + rvlen := rv.Len() + hasLen := containerLenS >= 0 + if hasLen && containerLenS > rvlen { + halt.errorf("cannot decode into array with length: %v, less than container length: %v", any(rvlen), any(containerLenS)) + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + var fn *decFnJsonIO + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } else { + fn = d.fn(rtelem) + } + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + d.arrayCannotExpand(rvlen, j+1) + d.swallow() + continue + } + + rv9 = rvArrayIndex(rv, j, f.ti, false) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderJsonIO) kChan(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + if ti.chandir&uint8(reflect.SendDir) == 0 { + halt.errorStr("receive-only channel cannot be decoded") + } + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + bs2, _ := d.d.DecodeBytes() + irv := rv2i(rv) + ch, ok := irv.(chan<- byte) + if !ok { + ch = irv.(chan byte) + } + for _, b := range bs2 { + ch <- b + } + return + } + + var rvCanset = rv.CanSet() + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset && rvIsNil(rv) { + rvSetDirect(rv, reflect.MakeChan(ti.rt, 0)) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + useTransient := decUseTransient && ti.elemkind != byte(reflect.Ptr) && ti.tielem.flagCanTransient + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnJsonIO + + var rvChanged bool + var rv0 = rv + var rv9 reflect.Value + + var rvlen int + hasLen := containerLenS >= 0 + maxInitLen := d.maxInitLen() + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if hasLen { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + } else { + rvlen = decDefChanCap + } + if rvCanset { + rv = reflect.MakeChan(ti.rt, rvlen) + rvChanged = true + } else { + halt.errorStr("cannot decode into non-settable chan") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if rv9.IsValid() { + rvSetZero(rv9) + } else if useTransient { + rv9 = d.perType.TransientAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } else { + rv9 = rvZeroAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } + if !d.d.TryNil() { + d.decodeValueNoCheckNil(rv9, fn) + } + rv.Send(rv9) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } + +} + +func (d *decoderJsonIO) kMap(f *decFnInfo, rv reflect.Value) { + _ = d.d + containerLen := d.mapStart(d.d.ReadMapStart()) + ti := f.ti + if rvIsNil(rv) { + rvlen := int(decInferLen(containerLen, d.maxInitLen(), uint(ti.keysize+ti.elemsize))) + rvSetDirect(rv, makeMapReflect(ti.rt, rvlen)) + } + + if containerLen == 0 { + d.mapEnd() + return + } + + ktype, vtype := ti.key, ti.elem + ktypeId := rt2id(ktype) + vtypeKind := reflect.Kind(ti.elemkind) + ktypeKind := reflect.Kind(ti.keykind) + mparams := getMapReqParams(ti) + + vtypePtr := vtypeKind == reflect.Ptr + ktypePtr := ktypeKind == reflect.Ptr + + vTransient := decUseTransient && !vtypePtr && ti.tielem.flagCanTransient + + kTransient := vTransient && !ktypePtr && ti.tikey.flagCanTransient + + var vtypeElem reflect.Type + + var keyFn, valFn *decFnJsonIO + var ktypeLo, vtypeLo = ktype, vtype + + if ktypeKind == reflect.Ptr { + for ktypeLo = ktype.Elem(); ktypeLo.Kind() == reflect.Ptr; ktypeLo = ktypeLo.Elem() { + } + } + + if vtypePtr { + vtypeElem = vtype.Elem() + for vtypeLo = vtypeElem; vtypeLo.Kind() == reflect.Ptr; vtypeLo = vtypeLo.Elem() { + } + } + + rvkMut := !scalarBitset.isset(ti.keykind) + rvvMut := !scalarBitset.isset(ti.elemkind) + rvvCanNil := isnilBitset.isset(ti.elemkind) + + var rvk, rvkn, rvv, rvvn, rvva, rvvz reflect.Value + + var doMapGet, doMapSet bool + + if !d.h.MapValueReset { + if rvvMut && (vtypeKind != reflect.Interface || !d.h.InterfaceReset) { + doMapGet = true + rvva = mapAddrLoopvarRV(vtype, vtypeKind) + } + } + + ktypeIsString := ktypeId == stringTypId + ktypeIsIntf := ktypeId == intfTypId + hasLen := containerLen >= 0 + + var kstr2bs []byte + var kstr string + + var mapKeyStringSharesBytesBuf bool + var att dBytesAttachState + + var vElem, kElem reflect.Type + kbuiltin := ti.tikey.flagDecBuiltin && ti.keykind != uint8(reflect.Slice) + vbuiltin := ti.tielem.flagDecBuiltin + if kbuiltin && ktypePtr { + kElem = ti.key.Elem() + } + if vbuiltin && vtypePtr { + vElem = ti.elem.Elem() + } + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + mapKeyStringSharesBytesBuf = false + kstr = "" + if j == 0 { + + if kTransient { + rvk = d.perType.TransientAddr2K(ktype, ktypeKind) + } else { + rvk = rvZeroAddrK(ktype, ktypeKind) + } + if !rvkMut { + rvkn = rvk + } + if !rvvMut { + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + } + if !ktypeIsString && keyFn == nil { + keyFn = d.fn(ktypeLo) + } + if valFn == nil { + valFn = d.fn(vtypeLo) + } + } else if rvkMut { + rvSetZero(rvk) + } else { + rvk = rvkn + } + + d.mapElemKey(j == 0) + + if d.d.TryNil() { + rvSetZero(rvk) + } else if ktypeIsString { + kstr2bs, att = d.d.DecodeStringAsBytes() + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, att) + rvSetString(rvk, kstr) + } else { + if kbuiltin { + if ktypePtr { + if rvIsNil(rvk) { + rvSetDirect(rvk, reflect.New(kElem)) + } + d.decode(rv2i(rvk)) + } else { + d.decode(rv2i(rvAddr(rvk, ti.tikey.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvk, keyFn) + } + + if ktypeIsIntf { + if rvk2 := rvk.Elem(); rvk2.IsValid() && rvk2.Type() == uint8SliceTyp { + kstr2bs = rvGetBytes(rvk2) + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, dBytesAttachView) + rvSetIntf(rvk, rv4istr(kstr)) + } + + } + } + + if mapKeyStringSharesBytesBuf && d.bufio { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + mapKeyStringSharesBytesBuf = false + } + + d.mapElemValue() + + if d.d.TryNil() { + if mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + + if !rvvz.IsValid() { + rvvz = rvZeroK(vtype, vtypeKind) + } + mapSet(rv, rvk, rvvz, mparams) + continue + } + + doMapSet = true + + if !rvvMut { + rvv = rvvn + } else if !doMapGet { + goto NEW_RVV + } else { + rvv = mapGet(rv, rvk, rvva, mparams) + if !rvv.IsValid() || (rvvCanNil && rvIsNil(rvv)) { + goto NEW_RVV + } + switch vtypeKind { + case reflect.Ptr, reflect.Map: + doMapSet = false + case reflect.Interface: + + rvvn = rvv.Elem() + if k := rvvn.Kind(); (k == reflect.Ptr || k == reflect.Map) && !rvIsNil(rvvn) { + d.decodeValueNoCheckNil(rvvn, nil) + continue + } + + rvvn = rvZeroAddrK(vtype, vtypeKind) + rvSetIntf(rvvn, rvv) + rvv = rvvn + default: + + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + rvSetDirect(rvvn, rvv) + rvv = rvvn + } + } + goto DECODE_VALUE_NO_CHECK_NIL + + NEW_RVV: + if vtypePtr { + rvv = reflect.New(vtypeElem) + } else if vTransient { + rvv = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvv = rvZeroAddrK(vtype, vtypeKind) + } + + DECODE_VALUE_NO_CHECK_NIL: + if doMapSet && mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + if vbuiltin { + if vtypePtr { + if rvIsNil(rvv) { + rvSetDirect(rvv, reflect.New(vElem)) + } + d.decode(rv2i(rvv)) + } else { + d.decode(rv2i(rvAddr(rvv, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvv, valFn) + } + if doMapSet { + mapSet(rv, rvk, rvv, mparams) + } + } + + d.mapEnd() +} + +func (d *decoderJsonIO) init(h Handle) { + initHandle(h) + callMake(&d.d) + d.hh = h + d.h = h.getBasicHandle() + + d.err = errDecoderNotInitialized + + if d.h.InternString && d.is == nil { + d.is.init() + } + + d.fp = d.d.init(h, &d.decoderBase, d).(*fastpathDsJsonIO) + + if d.bytes { + d.rtidFn = &d.h.rtidFnsDecBytes + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtBytes + } else { + d.bufio = d.h.ReaderBufferSize > 0 + d.rtidFn = &d.h.rtidFnsDecIO + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtIO + } + + d.reset() + +} + +func (d *decoderJsonIO) reset() { + d.d.reset() + d.err = nil + d.c = 0 + d.depth = 0 + d.calls = 0 + + d.maxdepth = decDefMaxDepth + if d.h.MaxDepth > 0 { + d.maxdepth = d.h.MaxDepth + } + d.mtid = 0 + d.stid = 0 + d.mtr = false + d.str = false + if d.h.MapType != nil { + d.mtid = rt2id(d.h.MapType) + _, d.mtr = fastpathAvIndex(d.mtid) + } + if d.h.SliceType != nil { + d.stid = rt2id(d.h.SliceType) + _, d.str = fastpathAvIndex(d.stid) + } +} + +func (d *decoderJsonIO) Reset(r io.Reader) { + if d.bytes { + halt.onerror(errDecNoResetBytesWithReader) + } + d.reset() + if r == nil { + r = &eofReader + } + d.d.resetInIO(r) +} + +func (d *decoderJsonIO) ResetBytes(in []byte) { + if !d.bytes { + halt.onerror(errDecNoResetReaderWithBytes) + } + d.resetBytes(in) +} + +func (d *decoderJsonIO) resetBytes(in []byte) { + d.reset() + if in == nil { + in = zeroByteSlice + } + d.d.resetInBytes(in) +} + +func (d *decoderJsonIO) ResetString(s string) { + d.ResetBytes(bytesView(s)) +} + +func (d *decoderJsonIO) Decode(v interface{}) (err error) { + + defer panicValToErr(d, callRecoverSentinel, &d.err, &err, debugging) + d.mustDecode(v) + return +} + +func (d *decoderJsonIO) MustDecode(v interface{}) { + defer panicValToErr(d, callRecoverSentinel, &d.err, nil, true) + d.mustDecode(v) + return +} + +func (d *decoderJsonIO) mustDecode(v interface{}) { + halt.onerror(d.err) + if d.hh == nil { + halt.onerror(errNoFormatHandle) + } + + d.calls++ + d.decode(v) + d.calls-- +} + +func (d *decoderJsonIO) Release() {} + +func (d *decoderJsonIO) swallow() { + d.d.nextValueBytes() +} + +func (d *decoderJsonIO) nextValueBytes() []byte { + return d.d.nextValueBytes() +} + +func (d *decoderJsonIO) decode(iv interface{}) { + _ = d.d + + rv, ok := isNil(iv, true) + if ok { + halt.onerror(errCannotDecodeIntoNil) + } + + switch v := iv.(type) { + + case *string: + *v = d.detach2Str(d.d.DecodeStringAsBytes()) + case *bool: + *v = d.d.DecodeBool() + case *int: + *v = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + case *int8: + *v = int8(chkOvf.IntV(d.d.DecodeInt64(), 8)) + case *int16: + *v = int16(chkOvf.IntV(d.d.DecodeInt64(), 16)) + case *int32: + *v = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + case *int64: + *v = d.d.DecodeInt64() + case *uint: + *v = uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *uint8: + *v = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + case *uint16: + *v = uint16(chkOvf.UintV(d.d.DecodeUint64(), 16)) + case *uint32: + *v = uint32(chkOvf.UintV(d.d.DecodeUint64(), 32)) + case *uint64: + *v = d.d.DecodeUint64() + case *uintptr: + *v = uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *float32: + *v = d.d.DecodeFloat32() + case *float64: + *v = d.d.DecodeFloat64() + case *complex64: + *v = complex(d.d.DecodeFloat32(), 0) + case *complex128: + *v = complex(d.d.DecodeFloat64(), 0) + case *[]byte: + *v, _ = d.decodeBytesInto(*v, false) + case []byte: + + d.decodeBytesInto(v[:len(v):len(v)], true) + case *time.Time: + *v = d.d.DecodeTime() + case *Raw: + *v = d.rawBytes() + + case *interface{}: + d.decodeValue(rv4iptr(v), nil) + + case reflect.Value: + if ok, _ = isDecodeable(v); !ok { + d.haltAsNotDecodeable(v) + } + d.decodeValue(v, nil) + + default: + + if skipFastpathTypeSwitchInDirectCall || !d.dh.fastpathDecodeTypeSwitch(iv, d) { + if !rv.IsValid() { + rv = reflect.ValueOf(iv) + } + if ok, _ = isDecodeable(rv); !ok { + d.haltAsNotDecodeable(rv) + } + d.decodeValue(rv, nil) + } + } +} + +func (d *decoderJsonIO) decodeValue(rv reflect.Value, fn *decFnJsonIO) { + if d.d.TryNil() { + decSetNonNilRV2Zero(rv) + } else { + d.decodeValueNoCheckNil(rv, fn) + } +} + +func (d *decoderJsonIO) decodeValueNoCheckNil(rv reflect.Value, fn *decFnJsonIO) { + + var rvp reflect.Value + var rvpValid bool +PTR: + if rv.Kind() == reflect.Ptr { + rvpValid = true + if rvIsNil(rv) { + rvSetDirect(rv, reflect.New(rv.Type().Elem())) + } + rvp = rv + rv = rv.Elem() + goto PTR + } + + if fn == nil { + fn = d.fn(rv.Type()) + } + if fn.i.addrD { + if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else if fn.i.addrDf { + halt.errorStr("cannot decode into a non-pointer value") + } + } + fn.fd(d, &fn.i, rv) +} + +func (d *decoderJsonIO) decodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + d.decodeValue(baseRV(v), d.fn(t)) + } else { + d.decodeValue(baseRV(v), d.fnNoExt(t)) + } +} + +func (d *decoderJsonIO) structFieldNotFound(index int, rvkencname string) { + + if d.h.ErrorIfNoField { + if index >= 0 { + halt.errorInt("no matching struct field found when decoding stream array at index ", int64(index)) + } else if rvkencname != "" { + halt.errorStr2("no matching struct field found when decoding stream map with key ", rvkencname) + } + } + d.swallow() +} + +func (d *decoderJsonIO) decodeBytesInto(out []byte, mustFit bool) (v []byte, state dBytesIntoState) { + v, att := d.d.DecodeBytes() + if cap(v) == 0 || (att >= dBytesAttachViewZerocopy && !mustFit) { + + return + } + if len(v) == 0 { + v = zeroByteSlice + return + } + if len(out) == len(v) { + state = dBytesIntoParamOut + } else if cap(out) >= len(v) { + out = out[:len(v)] + state = dBytesIntoParamOutSlice + } else if mustFit { + halt.errorf("bytes capacity insufficient for decoded bytes: got/expected: %d/%d", len(v), len(out)) + } else { + out = make([]byte, len(v)) + state = dBytesIntoNew + } + copy(out, v) + v = out + return +} + +func (d *decoderJsonIO) rawBytes() (v []byte) { + + v = d.d.nextValueBytes() + if d.bytes && !d.h.ZeroCopy { + vv := make([]byte, len(v)) + copy(vv, v) + v = vv + } + return +} + +func (d *decoderJsonIO) wrapErr(v error, err *error) { + *err = wrapCodecErr(v, d.hh.Name(), d.d.NumBytesRead(), false) +} + +func (d *decoderJsonIO) NumBytesRead() int { + return d.d.NumBytesRead() +} + +func (d *decoderJsonIO) containerNext(j, containerLen int, hasLen bool) bool { + + if hasLen { + return j < containerLen + } + return !d.d.CheckBreak() +} + +func (d *decoderJsonIO) mapElemKey(firstTime bool) { + d.d.ReadMapElemKey(firstTime) + d.c = containerMapKey +} + +func (d *decoderJsonIO) mapElemValue() { + d.d.ReadMapElemValue() + d.c = containerMapValue +} + +func (d *decoderJsonIO) mapEnd() { + d.d.ReadMapEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderJsonIO) arrayElem(firstTime bool) { + d.d.ReadArrayElem(firstTime) + d.c = containerArrayElem +} + +func (d *decoderJsonIO) arrayEnd() { + d.d.ReadArrayEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderJsonIO) interfaceExtConvertAndDecode(v interface{}, ext InterfaceExt) { + + var vv interface{} + d.decode(&vv) + ext.UpdateExt(v, vv) + +} + +func (d *decoderJsonIO) fn(t reflect.Type) *decFnJsonIO { + return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false) +} + +func (d *decoderJsonIO) fnNoExt(t reflect.Type) *decFnJsonIO { + return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true) +} + +func (helperDecDriverJsonIO) newDecoderBytes(in []byte, h Handle) *decoderJsonIO { + var c1 decoderJsonIO + c1.bytes = true + c1.init(h) + c1.ResetBytes(in) + return &c1 +} + +func (helperDecDriverJsonIO) newDecoderIO(in io.Reader, h Handle) *decoderJsonIO { + var c1 decoderJsonIO + c1.init(h) + c1.Reset(in) + return &c1 +} + +func (helperDecDriverJsonIO) decFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathDsJsonIO) (f *fastpathDJsonIO, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperDecDriverJsonIO) decFindRtidFn(s []decRtidFnJsonIO, rtid uintptr) (i uint, fn *decFnJsonIO) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperDecDriverJsonIO) decFromRtidFnSlice(fns *atomicRtidFnSlice) (s []decRtidFnJsonIO) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]decRtidFnJsonIO](v)) + } + return +} + +func (dh helperDecDriverJsonIO) decFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, x *BasicHandle, fp *fastpathDsJsonIO, + checkExt bool) (fn *decFnJsonIO) { + return dh.decFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperDecDriverJsonIO) decFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsJsonIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnJsonIO) { + rtid := rt2id(rt) + var sp []decRtidFnJsonIO = dh.decFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.decFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.decFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperDecDriverJsonIO) decFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsJsonIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnJsonIO) { + + fn = dh.decFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []decRtidFnJsonIO + mu.Lock() + sp = dh.decFromRtidFnSlice(fns) + + if sp == nil { + sp = []decRtidFnJsonIO{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.decFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]decRtidFnJsonIO, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = decRtidFnJsonIO{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperDecDriverJsonIO) decFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathDsJsonIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnJsonIO) { + fn = new(decFnJsonIO) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + fi.addrDf = true + + if rtid == timeTypId && timeBuiltin { + fn.fd = (*decoderJsonIO).kTime + } else if rtid == rawTypId { + fn.fd = (*decoderJsonIO).raw + } else if rtid == rawExtTypId { + fn.fd = (*decoderJsonIO).rawExt + fi.addrD = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fd = (*decoderJsonIO).ext + fi.addrD = true + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fd = (*decoderJsonIO).selferUnmarshal + fi.addrD = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fd = (*decoderJsonIO).binaryUnmarshal + fi.addrD = ti.flagBinaryUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fd = (*decoderJsonIO).jsonUnmarshal + fi.addrD = ti.flagJsonUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fd = (*decoderJsonIO).textUnmarshal + fi.addrD = ti.flagTextUnmarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fd = fp[idx].decfn + fi.addrD = true + fi.addrDf = false + if rk == reflect.Array { + fi.addrD = false + } + } + } else { + + xfe, xrt := dh.decFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf2 := xfe.decfn + if rk == reflect.Array { + fi.addrD = false + fn.fd = func(d *decoderJsonIO, xf *decFnInfo, xrv reflect.Value) { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } else { + fi.addrD = true + fi.addrDf = false + xptr2rt := reflect.PointerTo(xrt) + fn.fd = func(d *decoderJsonIO, xf *decFnInfo, xrv reflect.Value) { + if xrv.Kind() == reflect.Ptr { + xfnf2(d, xf, rvConvert(xrv, xptr2rt)) + } else { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } + } + } + } + } + if fn.fd == nil { + switch rk { + case reflect.Bool: + fn.fd = (*decoderJsonIO).kBool + case reflect.String: + fn.fd = (*decoderJsonIO).kString + case reflect.Int: + fn.fd = (*decoderJsonIO).kInt + case reflect.Int8: + fn.fd = (*decoderJsonIO).kInt8 + case reflect.Int16: + fn.fd = (*decoderJsonIO).kInt16 + case reflect.Int32: + fn.fd = (*decoderJsonIO).kInt32 + case reflect.Int64: + fn.fd = (*decoderJsonIO).kInt64 + case reflect.Uint: + fn.fd = (*decoderJsonIO).kUint + case reflect.Uint8: + fn.fd = (*decoderJsonIO).kUint8 + case reflect.Uint16: + fn.fd = (*decoderJsonIO).kUint16 + case reflect.Uint32: + fn.fd = (*decoderJsonIO).kUint32 + case reflect.Uint64: + fn.fd = (*decoderJsonIO).kUint64 + case reflect.Uintptr: + fn.fd = (*decoderJsonIO).kUintptr + case reflect.Float32: + fn.fd = (*decoderJsonIO).kFloat32 + case reflect.Float64: + fn.fd = (*decoderJsonIO).kFloat64 + case reflect.Complex64: + fn.fd = (*decoderJsonIO).kComplex64 + case reflect.Complex128: + fn.fd = (*decoderJsonIO).kComplex128 + case reflect.Chan: + fn.fd = (*decoderJsonIO).kChan + case reflect.Slice: + fn.fd = (*decoderJsonIO).kSlice + case reflect.Array: + fi.addrD = false + fn.fd = (*decoderJsonIO).kArray + case reflect.Struct: + if ti.simple { + fn.fd = (*decoderJsonIO).kStructSimple + } else { + fn.fd = (*decoderJsonIO).kStruct + } + case reflect.Map: + fn.fd = (*decoderJsonIO).kMap + case reflect.Interface: + + fn.fd = (*decoderJsonIO).kInterface + default: + + fn.fd = (*decoderJsonIO).kErr + } + } + } + return +} +func (e *jsonEncDriverIO) writeIndent() { + e.w.writen1('\n') + x := int(e.di) * int(e.dl) + if e.di < 0 { + x = -x + for x > len(jsonTabs) { + e.w.writeb(jsonTabs[:]) + x -= len(jsonTabs) + } + e.w.writeb(jsonTabs[:x]) + } else { + for x > len(jsonSpaces) { + e.w.writeb(jsonSpaces[:]) + x -= len(jsonSpaces) + } + e.w.writeb(jsonSpaces[:x]) + } +} + +func (e *jsonEncDriverIO) WriteArrayElem(firstTime bool) { + if !firstTime { + e.w.writen1(',') + } + if e.d { + e.writeIndent() + } +} + +func (e *jsonEncDriverIO) WriteMapElemKey(firstTime bool) { + if !firstTime { + e.w.writen1(',') + } + if e.d { + e.writeIndent() + } +} + +func (e *jsonEncDriverIO) WriteMapElemValue() { + if e.d { + e.w.writen2(':', ' ') + } else { + e.w.writen1(':') + } +} + +func (e *jsonEncDriverIO) EncodeNil() { + + e.w.writeb(jsonNull) +} + +func (e *jsonEncDriverIO) encodeIntAsUint(v int64, quotes bool) { + neg := v < 0 + if neg { + v = -v + } + e.encodeUint(neg, quotes, uint64(v)) +} + +func (e *jsonEncDriverIO) EncodeTime(t time.Time) { + + if t.IsZero() { + e.EncodeNil() + return + } + switch e.timeFmt { + case jsonTimeFmtStringLayout: + e.b[0] = '"' + b := t.AppendFormat(e.b[1:1], e.timeFmtLayout) + e.b[len(b)+1] = '"' + e.w.writeb(e.b[:len(b)+2]) + case jsonTimeFmtUnix: + e.encodeIntAsUint(t.Unix(), false) + case jsonTimeFmtUnixMilli: + e.encodeIntAsUint(t.UnixMilli(), false) + case jsonTimeFmtUnixMicro: + e.encodeIntAsUint(t.UnixMicro(), false) + case jsonTimeFmtUnixNano: + e.encodeIntAsUint(t.UnixNano(), false) + } +} + +func (e *jsonEncDriverIO) EncodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + if ext == SelfExt { + e.enc.encodeAs(rv, basetype, false) + } else if v := ext.ConvertExt(rv); v == nil { + e.writeNilBytes() + } else { + e.enc.encodeI(v) + } +} + +func (e *jsonEncDriverIO) EncodeRawExt(re *RawExt) { + if re.Data != nil { + e.w.writeb(re.Data) + } else if re.Value != nil { + e.enc.encodeI(re.Value) + } else { + e.EncodeNil() + } +} + +func (e *jsonEncDriverIO) EncodeBool(b bool) { + e.w.writestr(jsonEncBoolStrs[bool2int(e.ks && e.e.c == containerMapKey)%2][bool2int(b)%2]) +} + +func (e *jsonEncDriverIO) encodeFloat(f float64, bitsize, fmt byte, prec int8) { + var blen uint + if e.ks && e.e.c == containerMapKey { + blen = 2 + uint(len(strconv.AppendFloat(e.b[1:1], f, fmt, int(prec), int(bitsize)))) + + e.b[0] = '"' + e.b[blen-1] = '"' + e.w.writeb(e.b[:blen]) + } else { + e.w.writeb(strconv.AppendFloat(e.b[:0], f, fmt, int(prec), int(bitsize))) + } +} + +func (e *jsonEncDriverIO) EncodeFloat64(f float64) { + if math.IsNaN(f) || math.IsInf(f, 0) { + e.EncodeNil() + return + } + fmt, prec := jsonFloatStrconvFmtPrec64(f) + e.encodeFloat(f, 64, fmt, prec) +} + +func (e *jsonEncDriverIO) EncodeFloat32(f float32) { + if math.IsNaN(float64(f)) || math.IsInf(float64(f), 0) { + e.EncodeNil() + return + } + fmt, prec := jsonFloatStrconvFmtPrec32(f) + e.encodeFloat(float64(f), 32, fmt, prec) +} + +func (e *jsonEncDriverIO) encodeUint(neg bool, quotes bool, u uint64) { + e.w.writeb(jsonEncodeUint(neg, quotes, u, &e.b)) +} + +func (e *jsonEncDriverIO) EncodeInt(v int64) { + quotes := e.is == 'A' || e.is == 'L' && (v > 1<<53 || v < -(1<<53)) || + (e.ks && e.e.c == containerMapKey) + + if cpu32Bit { + if quotes { + blen := 2 + len(strconv.AppendInt(e.b[1:1], v, 10)) + e.b[0] = '"' + e.b[blen-1] = '"' + e.w.writeb(e.b[:blen]) + } else { + e.w.writeb(strconv.AppendInt(e.b[:0], v, 10)) + } + return + } + + if v < 0 { + e.encodeUint(true, quotes, uint64(-v)) + } else { + e.encodeUint(false, quotes, uint64(v)) + } +} + +func (e *jsonEncDriverIO) EncodeUint(v uint64) { + quotes := e.is == 'A' || e.is == 'L' && v > 1<<53 || + (e.ks && e.e.c == containerMapKey) + + if cpu32Bit { + + if quotes { + blen := 2 + len(strconv.AppendUint(e.b[1:1], v, 10)) + e.b[0] = '"' + e.b[blen-1] = '"' + e.w.writeb(e.b[:blen]) + } else { + e.w.writeb(strconv.AppendUint(e.b[:0], v, 10)) + } + return + } + + e.encodeUint(false, quotes, v) +} + +func (e *jsonEncDriverIO) EncodeString(v string) { + if e.h.StringToRaw { + e.EncodeStringBytesRaw(bytesView(v)) + return + } + e.quoteStr(v) +} + +func (e *jsonEncDriverIO) EncodeStringNoEscape4Json(v string) { e.w.writeqstr(v) } + +func (e *jsonEncDriverIO) EncodeStringBytesRaw(v []byte) { + if e.rawext { + + iv := e.h.RawBytesExt.ConvertExt(any(v)) + if iv == nil { + e.EncodeNil() + } else { + e.enc.encodeI(iv) + } + return + } + + if e.bytesFmt == jsonBytesFmtArray { + e.WriteArrayStart(len(v)) + for j := range v { + e.WriteArrayElem(j == 0) + e.encodeUint(false, false, uint64(v[j])) + } + e.WriteArrayEnd() + return + } + + var slen int + if e.bytesFmt == jsonBytesFmtBase64 { + slen = base64.StdEncoding.EncodedLen(len(v)) + } else { + slen = e.byteFmter.EncodedLen(len(v)) + } + slen += 2 + + bs := e.e.blist.peek(slen, false)[:slen] + + if e.bytesFmt == jsonBytesFmtBase64 { + base64.StdEncoding.Encode(bs[1:], v) + } else { + e.byteFmter.Encode(bs[1:], v) + } + + bs[len(bs)-1] = '"' + bs[0] = '"' + e.w.writeb(bs) +} + +func (e *jsonEncDriverIO) EncodeBytes(v []byte) { + if v == nil { + e.writeNilBytes() + return + } + e.EncodeStringBytesRaw(v) +} + +func (e *jsonEncDriverIO) writeNilOr(v []byte) { + if !e.h.NilCollectionToZeroLength { + v = jsonNull + } + e.w.writeb(v) +} + +func (e *jsonEncDriverIO) writeNilBytes() { + e.writeNilOr(jsonArrayEmpty) +} + +func (e *jsonEncDriverIO) writeNilArray() { + e.writeNilOr(jsonArrayEmpty) +} + +func (e *jsonEncDriverIO) writeNilMap() { + e.writeNilOr(jsonMapEmpty) +} + +func (e *jsonEncDriverIO) WriteArrayEmpty() { + e.w.writen2('[', ']') +} + +func (e *jsonEncDriverIO) WriteMapEmpty() { + e.w.writen2('{', '}') +} + +func (e *jsonEncDriverIO) WriteArrayStart(length int) { + if e.d { + e.dl++ + } + e.w.writen1('[') +} + +func (e *jsonEncDriverIO) WriteArrayEnd() { + if e.d { + e.dl-- + + e.writeIndent() + } + e.w.writen1(']') +} + +func (e *jsonEncDriverIO) WriteMapStart(length int) { + if e.d { + e.dl++ + } + e.w.writen1('{') +} + +func (e *jsonEncDriverIO) WriteMapEnd() { + if e.d { + e.dl-- + + e.writeIndent() + } + e.w.writen1('}') +} + +func (e *jsonEncDriverIO) quoteStr(s string) { + + const hex = "0123456789abcdef" + e.w.writen1('"') + var i, start uint + for i < uint(len(s)) { + + b := s[i] + if e.s.isset(b) { + i++ + continue + } + if b < utf8.RuneSelf { + if start < i { + e.w.writestr(s[start:i]) + } + switch b { + case '\\': + e.w.writen2('\\', '\\') + case '"': + e.w.writen2('\\', '"') + case '\n': + e.w.writen2('\\', 'n') + case '\t': + e.w.writen2('\\', 't') + case '\r': + e.w.writen2('\\', 'r') + case '\b': + e.w.writen2('\\', 'b') + case '\f': + e.w.writen2('\\', 'f') + default: + e.w.writestr(`\u00`) + e.w.writen2(hex[b>>4], hex[b&0xF]) + } + i++ + start = i + continue + } + c, size := utf8.DecodeRuneInString(s[i:]) + if c == utf8.RuneError && size == 1 { + if start < i { + e.w.writestr(s[start:i]) + } + e.w.writestr(`\uFFFD`) + i++ + start = i + continue + } + + if jsonEscapeMultiByteUnicodeSep && (c == '\u2028' || c == '\u2029') { + if start < i { + e.w.writestr(s[start:i]) + } + e.w.writestr(`\u202`) + e.w.writen1(hex[c&0xF]) + i += uint(size) + start = i + continue + } + i += uint(size) + } + if start < uint(len(s)) { + e.w.writestr(s[start:]) + } + e.w.writen1('"') +} + +func (e *jsonEncDriverIO) atEndOfEncode() { + if e.h.TermWhitespace { + var c byte = ' ' + if e.e.c != 0 { + c = '\n' + } + e.w.writen1(c) + } +} + +func (d *jsonDecDriverIO) ReadMapStart() int { + d.advance() + if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return containerLenNil + } + if d.tok != '{' { + halt.errorByte("read map - expect char '{' but got char: ", d.tok) + } + d.tok = 0 + return containerLenUnknown +} + +func (d *jsonDecDriverIO) ReadArrayStart() int { + d.advance() + if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return containerLenNil + } + if d.tok != '[' { + halt.errorByte("read array - expect char '[' but got char ", d.tok) + } + d.tok = 0 + return containerLenUnknown +} + +func (d *jsonDecDriverIO) CheckBreak() bool { + d.advance() + return d.tok == '}' || d.tok == ']' +} + +func (d *jsonDecDriverIO) checkSep(xc byte) { + d.advance() + if d.tok != xc { + d.readDelimError(xc) + } + d.tok = 0 +} + +func (d *jsonDecDriverIO) ReadArrayElem(firstTime bool) { + if !firstTime { + d.checkSep(',') + } +} + +func (d *jsonDecDriverIO) ReadArrayEnd() { + d.checkSep(']') +} + +func (d *jsonDecDriverIO) ReadMapElemKey(firstTime bool) { + d.ReadArrayElem(firstTime) +} + +func (d *jsonDecDriverIO) ReadMapElemValue() { + d.checkSep(':') +} + +func (d *jsonDecDriverIO) ReadMapEnd() { + d.checkSep('}') +} + +func (d *jsonDecDriverIO) readDelimError(xc uint8) { + halt.errorf("read json delimiter - expect char '%c' but got char '%c'", xc, d.tok) +} + +func (d *jsonDecDriverIO) checkLit3(got, expect [3]byte) { + if jsonValidateSymbols && got != expect { + jsonCheckLitErr3(got, expect) + } + d.tok = 0 +} + +func (d *jsonDecDriverIO) checkLit4(got, expect [4]byte) { + if jsonValidateSymbols && got != expect { + jsonCheckLitErr4(got, expect) + } + d.tok = 0 +} + +func (d *jsonDecDriverIO) skipWhitespace() { + d.tok = d.r.skipWhitespace() +} + +func (d *jsonDecDriverIO) advance() { + + if d.tok < 33 { + d.skipWhitespace() + } +} + +func (d *jsonDecDriverIO) nextValueBytes() []byte { + consumeString := func() { + TOP: + _, c := d.r.jsonReadAsisChars() + if c == '\\' { + d.r.readn1() + goto TOP + } + } + + d.advance() + d.r.startRecording() + + switch d.tok { + default: + _, d.tok = d.r.jsonReadNum() + case 'n': + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + case 'f': + d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.r.readn4()) + case 't': + d.checkLit3([3]byte{'r', 'u', 'e'}, d.r.readn3()) + case '"': + consumeString() + d.tok = 0 + case '{', '[': + var elem struct{} + var stack []struct{} + + stack = append(stack, elem) + + for len(stack) != 0 { + c := d.r.readn1() + switch c { + case '"': + consumeString() + case '{', '[': + stack = append(stack, elem) + case '}', ']': + stack = stack[:len(stack)-1] + } + } + d.tok = 0 + } + return d.r.stopRecording() +} + +func (d *jsonDecDriverIO) TryNil() bool { + d.advance() + + if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return true + } + return false +} + +func (d *jsonDecDriverIO) DecodeBool() (v bool) { + d.advance() + + fquot := d.d.c == containerMapKey && d.tok == '"' + if fquot { + d.tok = d.r.readn1() + } + switch d.tok { + case 'f': + d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.r.readn4()) + + case 't': + d.checkLit3([3]byte{'r', 'u', 'e'}, d.r.readn3()) + v = true + case 'n': + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + + default: + halt.errorByte("decode bool: got first char: ", d.tok) + + } + if fquot { + d.r.readn1() + } + return +} + +func (d *jsonDecDriverIO) DecodeTime() (t time.Time) { + + d.advance() + if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return + } + var bs []byte + + if d.tok != '"' { + bs, d.tok = d.r.jsonReadNum() + i := d.parseInt64(bs) + switch d.timeFmtNum { + case jsonTimeFmtUnix: + t = time.Unix(i, 0) + case jsonTimeFmtUnixMilli: + t = time.UnixMilli(i) + case jsonTimeFmtUnixMicro: + t = time.UnixMicro(i) + case jsonTimeFmtUnixNano: + t = time.Unix(0, i) + default: + halt.errorStr("invalid timeFmtNum") + } + return + } + + bs = d.readUnescapedString() + var err error + for _, v := range d.timeFmtLayouts { + t, err = time.Parse(v, stringView(bs)) + if err == nil { + return + } + } + halt.errorStr("error decoding time") + return +} + +func (d *jsonDecDriverIO) ContainerType() (vt valueType) { + + d.advance() + + if d.tok == '{' { + return valueTypeMap + } else if d.tok == '[' { + return valueTypeArray + } else if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return valueTypeNil + } else if d.tok == '"' { + return valueTypeString + } + return valueTypeUnset +} + +func (d *jsonDecDriverIO) decNumBytes() (bs []byte) { + d.advance() + if d.tok == '"' { + bs = d.r.jsonReadUntilDblQuote() + d.tok = 0 + } else if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + } else { + bs, d.tok = d.r.jsonReadNum() + } + return +} + +func (d *jsonDecDriverIO) DecodeUint64() (u uint64) { + b := d.decNumBytes() + u, neg, ok := parseInteger_bytes(b) + if neg { + halt.errorf("negative number cannot be decoded as uint64: %s", any(b)) + } + if !ok { + halt.onerror(strconvParseErr(b, "ParseUint")) + } + return +} + +func (d *jsonDecDriverIO) DecodeInt64() (v int64) { + return d.parseInt64(d.decNumBytes()) +} + +func (d *jsonDecDriverIO) parseInt64(b []byte) (v int64) { + u, neg, ok := parseInteger_bytes(b) + if !ok { + halt.onerror(strconvParseErr(b, "ParseInt")) + } + if chkOvf.Uint2Int(u, neg) { + halt.errorBytes("overflow decoding number from ", b) + } + if neg { + v = -int64(u) + } else { + v = int64(u) + } + return +} + +func (d *jsonDecDriverIO) DecodeFloat64() (f float64) { + var err error + bs := d.decNumBytes() + if len(bs) == 0 { + return + } + f, err = parseFloat64(bs) + halt.onerror(err) + return +} + +func (d *jsonDecDriverIO) DecodeFloat32() (f float32) { + var err error + bs := d.decNumBytes() + if len(bs) == 0 { + return + } + f, err = parseFloat32(bs) + halt.onerror(err) + return +} + +func (d *jsonDecDriverIO) advanceNil() (ok bool) { + d.advance() + if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return true + } + return false +} + +func (d *jsonDecDriverIO) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + if d.advanceNil() { + return + } + if ext == SelfExt { + d.dec.decodeAs(rv, basetype, false) + } else { + d.dec.interfaceExtConvertAndDecode(rv, ext) + } +} + +func (d *jsonDecDriverIO) DecodeRawExt(re *RawExt) { + if d.advanceNil() { + return + } + d.dec.decode(&re.Value) +} + +func (d *jsonDecDriverIO) decBytesFromArray(bs []byte) []byte { + d.advance() + if d.tok != ']' { + bs = append(bs, uint8(d.DecodeUint64())) + d.advance() + } + for d.tok != ']' { + if d.tok != ',' { + halt.errorByte("read array element - expect char ',' but got char: ", d.tok) + } + d.tok = 0 + bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) + d.advance() + } + d.tok = 0 + return bs +} + +func (d *jsonDecDriverIO) DecodeBytes() (bs []byte, state dBytesAttachState) { + d.advance() + state = dBytesDetach + if d.tok == 'n' { + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + return + } + state = dBytesAttachBuffer + + if d.rawext { + d.buf = d.buf[:0] + d.dec.interfaceExtConvertAndDecode(&d.buf, d.h.RawBytesExt) + bs = d.buf + return + } + + if d.tok == '[' { + d.tok = 0 + + bs = d.decBytesFromArray(d.buf[:0]) + d.buf = bs + return + } + + d.ensureReadingString() + bs1 := d.readUnescapedString() + + slen := base64.StdEncoding.DecodedLen(len(bs1)) + if slen == 0 { + bs = zeroByteSlice + state = dBytesDetach + } else if slen <= cap(d.buf) { + bs = d.buf[:slen] + } else { + d.buf = d.d.blist.putGet(d.buf, slen)[:slen] + bs = d.buf + } + var err error + for _, v := range d.byteFmters { + + slen, err = v.Decode(bs, bs1) + if err == nil { + bs = bs[:slen] + return + } + } + halt.errorf("error decoding byte string '%s': %v", any(bs1), err) + return +} + +func (d *jsonDecDriverIO) DecodeStringAsBytes() (bs []byte, state dBytesAttachState) { + d.advance() + + var cond bool + + if d.tok == '"' { + d.tok = 0 + bs, cond = d.dblQuoteStringAsBytes() + state = d.d.attachState(cond) + return + } + + state = dBytesDetach + + switch d.tok { + case 'n': + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + + case 'f': + d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.r.readn4()) + bs = jsonLitb[jsonLitF : jsonLitF+5] + case 't': + d.checkLit3([3]byte{'r', 'u', 'e'}, d.r.readn3()) + bs = jsonLitb[jsonLitT : jsonLitT+4] + default: + + bs, d.tok = d.r.jsonReadNum() + state = d.d.attachState(!d.d.bytes) + } + return +} + +func (d *jsonDecDriverIO) ensureReadingString() { + if d.tok != '"' { + halt.errorByte("expecting string starting with '\"'; got ", d.tok) + } +} + +func (d *jsonDecDriverIO) readUnescapedString() (bs []byte) { + + bs = d.r.jsonReadUntilDblQuote() + d.tok = 0 + return +} + +func (d *jsonDecDriverIO) dblQuoteStringAsBytes() (buf []byte, usingBuf bool) { + bs, c := d.r.jsonReadAsisChars() + if c == '"' { + return bs, !d.d.bytes + } + buf = append(d.buf[:0], bs...) + + checkUtf8 := d.h.ValidateUnicode + usingBuf = true + + for { + + c = d.r.readn1() + + switch c { + case '"', '\\', '/', '\'': + buf = append(buf, c) + case 'b': + buf = append(buf, '\b') + case 'f': + buf = append(buf, '\f') + case 'n': + buf = append(buf, '\n') + case 'r': + buf = append(buf, '\r') + case 't': + buf = append(buf, '\t') + case 'u': + rr := d.appendStringAsBytesSlashU() + if checkUtf8 && rr == unicode.ReplacementChar { + d.buf = buf + halt.errorBytes("invalid UTF-8 character found after: ", buf) + } + buf = append(buf, d.bstr[:utf8.EncodeRune(d.bstr[:], rr)]...) + default: + d.buf = buf + halt.errorByte("unsupported escaped value: ", c) + } + + bs, c = d.r.jsonReadAsisChars() + buf = append(buf, bs...) + if c == '"' { + break + } + } + d.buf = buf + return +} + +func (d *jsonDecDriverIO) appendStringAsBytesSlashU() (r rune) { + var rr uint32 + cs := d.r.readn4() + if rr = jsonSlashURune(cs); rr == unicode.ReplacementChar { + return unicode.ReplacementChar + } + r = rune(rr) + if utf16.IsSurrogate(r) { + csu := d.r.readn2() + cs = d.r.readn4() + if csu[0] == '\\' && csu[1] == 'u' { + if rr = jsonSlashURune(cs); rr == unicode.ReplacementChar { + return unicode.ReplacementChar + } + return utf16.DecodeRune(r, rune(rr)) + } + return unicode.ReplacementChar + } + return +} + +func (d *jsonDecDriverIO) DecodeNaked() { + z := d.d.naked() + + d.advance() + var bs []byte + var err error + switch d.tok { + case 'n': + d.checkLit3([3]byte{'u', 'l', 'l'}, d.r.readn3()) + z.v = valueTypeNil + case 'f': + d.checkLit4([4]byte{'a', 'l', 's', 'e'}, d.r.readn4()) + z.v = valueTypeBool + z.b = false + case 't': + d.checkLit3([3]byte{'r', 'u', 'e'}, d.r.readn3()) + z.v = valueTypeBool + z.b = true + case '{': + z.v = valueTypeMap + case '[': + z.v = valueTypeArray + case '"': + + d.tok = 0 + bs, z.b = d.dblQuoteStringAsBytes() + att := d.d.attachState(z.b) + if jsonNakedBoolNumInQuotedStr && + d.h.MapKeyAsString && len(bs) > 0 && d.d.c == containerMapKey { + switch string(bs) { + + case "true": + z.v = valueTypeBool + z.b = true + case "false": + z.v = valueTypeBool + z.b = false + default: + if err = jsonNakedNum(z, bs, d.h.PreferFloat, d.h.SignedInteger); err != nil { + z.v = valueTypeString + z.s = d.d.detach2Str(bs, att) + } + } + } else { + z.v = valueTypeString + z.s = d.d.detach2Str(bs, att) + } + default: + bs, d.tok = d.r.jsonReadNum() + if len(bs) == 0 { + halt.errorStr("decode number from empty string") + } + if err = jsonNakedNum(z, bs, d.h.PreferFloat, d.h.SignedInteger); err != nil { + halt.errorf("decode number from %s: %v", any(bs), err) + } + } +} + +func (e *jsonEncDriverIO) reset() { + e.dl = 0 + + e.typical = e.h.typical() + if e.h.HTMLCharsAsIs { + e.s = &jsonCharSafeBitset + } else { + e.s = &jsonCharHtmlSafeBitset + } + e.di = int8(e.h.Indent) + e.d = e.h.Indent != 0 + e.ks = e.h.MapKeyAsString + e.is = e.h.IntegerAsString + + var ho jsonHandleOpts + ho.reset(e.h) + e.timeFmt = ho.timeFmt + e.bytesFmt = ho.bytesFmt + e.timeFmtLayout = "" + e.byteFmter = nil + if len(ho.timeFmtLayouts) > 0 { + e.timeFmtLayout = ho.timeFmtLayouts[0] + } + if len(ho.byteFmters) > 0 { + e.byteFmter = ho.byteFmters[0] + } + e.rawext = ho.rawext +} + +func (d *jsonDecDriverIO) reset() { + d.buf = d.d.blist.check(d.buf, 256) + d.tok = 0 + + d.jsonHandleOpts.reset(d.h) +} + +func (d *jsonEncDriverIO) init(hh Handle, shared *encoderBase, enc encoderI) (fp interface{}) { + callMake(&d.w) + d.h = hh.(*JsonHandle) + d.e = shared + if shared.bytes { + fp = jsonFpEncBytes + } else { + fp = jsonFpEncIO + } + + d.init2(enc) + return +} + +func (e *jsonEncDriverIO) writeBytesAsis(b []byte) { e.w.writeb(b) } + +func (e *jsonEncDriverIO) writerEnd() { e.w.end() } + +func (e *jsonEncDriverIO) resetOutBytes(out *[]byte) { + e.w.resetBytes(*out, out) +} + +func (e *jsonEncDriverIO) resetOutIO(out io.Writer) { + e.w.resetIO(out, e.h.WriterBufferSize, &e.e.blist) +} + +func (d *jsonDecDriverIO) init(hh Handle, shared *decoderBase, dec decoderI) (fp interface{}) { + callMake(&d.r) + d.h = hh.(*JsonHandle) + d.d = shared + if shared.bytes { + fp = jsonFpDecBytes + } else { + fp = jsonFpDecIO + } + + d.init2(dec) + return +} + +func (d *jsonDecDriverIO) NumBytesRead() int { + return int(d.r.numread()) +} + +func (d *jsonDecDriverIO) resetInBytes(in []byte) { + d.r.resetBytes(in) +} + +func (d *jsonDecDriverIO) resetInIO(r io.Reader) { + d.r.resetIO(r, d.h.ReaderBufferSize, d.h.MaxInitLen, &d.d.blist) +} + +func (d *jsonDecDriverIO) descBd() (s string) { + halt.onerror(errJsonNoBd) + return +} + +func (d *jsonEncDriverIO) init2(enc encoderI) { + d.enc = enc + +} + +func (d *jsonDecDriverIO) init2(dec decoderI) { + d.dec = dec + + d.buf = d.buf[:0] + + d.d.jsms = d.h.MapKeyAsString +} diff --git a/vendor/github.com/ugorji/go/codec/json.notfastpath.mono.generated.go b/vendor/github.com/ugorji/go/codec/json.notfastpath.mono.generated.go new file mode 100644 index 0000000..d23c173 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/json.notfastpath.mono.generated.go @@ -0,0 +1,52 @@ +//go:build !notmono && !codec.notmono && (notfastpath || codec.notfastpath) + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "reflect" +) + +type fastpathEJsonBytes struct { + rt reflect.Type + encfn func(*encoderJsonBytes, *encFnInfo, reflect.Value) +} +type fastpathDJsonBytes struct { + rt reflect.Type + decfn func(*decoderJsonBytes, *decFnInfo, reflect.Value) +} +type fastpathEsJsonBytes [0]fastpathEJsonBytes +type fastpathDsJsonBytes [0]fastpathDJsonBytes + +func (helperEncDriverJsonBytes) fastpathEncodeTypeSwitch(iv interface{}, e *encoderJsonBytes) bool { + return false +} +func (helperDecDriverJsonBytes) fastpathDecodeTypeSwitch(iv interface{}, d *decoderJsonBytes) bool { + return false +} + +func (helperEncDriverJsonBytes) fastpathEList() (v *fastpathEsJsonBytes) { return } +func (helperDecDriverJsonBytes) fastpathDList() (v *fastpathDsJsonBytes) { return } + +type fastpathEJsonIO struct { + rt reflect.Type + encfn func(*encoderJsonIO, *encFnInfo, reflect.Value) +} +type fastpathDJsonIO struct { + rt reflect.Type + decfn func(*decoderJsonIO, *decFnInfo, reflect.Value) +} +type fastpathEsJsonIO [0]fastpathEJsonIO +type fastpathDsJsonIO [0]fastpathDJsonIO + +func (helperEncDriverJsonIO) fastpathEncodeTypeSwitch(iv interface{}, e *encoderJsonIO) bool { + return false +} +func (helperDecDriverJsonIO) fastpathDecodeTypeSwitch(iv interface{}, d *decoderJsonIO) bool { + return false +} + +func (helperEncDriverJsonIO) fastpathEList() (v *fastpathEsJsonIO) { return } +func (helperDecDriverJsonIO) fastpathDList() (v *fastpathDsJsonIO) { return } diff --git a/vendor/github.com/ugorji/go/codec/mammoth-test.go.tmpl b/vendor/github.com/ugorji/go/codec/mammoth-test.go.tmpl deleted file mode 100644 index 5319806..0000000 --- a/vendor/github.com/ugorji/go/codec/mammoth-test.go.tmpl +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -//go:build !codec.notmammoth -// +build codec.notmammoth - -// Code generated from mammoth-test.go.tmpl - DO NOT EDIT. - -package codec - -import "testing" -import "fmt" -import "reflect" - -// TestMammoth has all the different paths optimized in fast-path -// It has all the primitives, slices and maps. -// -// For each of those types, it has a pointer and a non-pointer field. - -func init() { _ = fmt.Printf } // so we can include fmt as needed - -type TestMammoth struct { - -{{range .Values }}{{if .Primitive -}} -{{ .MethodNamePfx "F" true }} {{ .Primitive }} -{{ .MethodNamePfx "Fptr" true }} *{{ .Primitive }} -{{end}}{{end}} - -{{range .Values }}{{if not .Primitive }}{{if not .MapKey -}} -{{ .MethodNamePfx "F" false }} []{{ .Elem }} -{{ .MethodNamePfx "Fptr" false }} *[]{{ .Elem }} -{{ .MethodNamePfx "Farr4" false }} [4]{{ .Elem }} -{{end}}{{end}}{{end}} - -{{range .Values }}{{if not .Primitive }}{{if .MapKey -}} -{{ .MethodNamePfx "F" false }} map[{{ .MapKey }}]{{ .Elem }} -{{ .MethodNamePfx "Fptr" false }} *map[{{ .MapKey }}]{{ .Elem }} -{{end}}{{end}}{{end}} - -} - -{{range .Values }}{{if not .Primitive }}{{if not .MapKey -}} -type {{ .MethodNamePfx "typMbs" false }} []{{ .Elem }} -func (_ {{ .MethodNamePfx "typMbs" false }}) MapBySlice() { } -{{end}}{{end}}{{end}} - -{{range .Values }}{{if not .Primitive }}{{if .MapKey -}} -type {{ .MethodNamePfx "typMap" false }} map[{{ .MapKey }}]{{ .Elem }} -{{end}}{{end}}{{end}} - -func __doTestMammothSlices(t *testing.T, h Handle) { -{{range $i, $e := .Values }}{{if not .Primitive }}{{if not .MapKey -}} - var v{{$i}}va [8]{{ .Elem }} - for _, v := range [][]{{ .Elem }}{ nil, {}, { {{ nonzerocmd .Elem }}, {{ zerocmd .Elem }}, {{ zerocmd .Elem }}, {{ nonzerocmd .Elem }} } } { - {{/* - // fmt.Printf(">>>> running mammoth slice v{{$i}}: %v\n", v) - // - encode value to some []byte - // - decode into a length-wise-equal []byte - // - check if equal to initial slice - // - encode ptr to the value - // - check if encode bytes are same - // - decode into ptrs to: nil, then 1-elem slice, equal-length, then large len slice - // - decode into non-addressable slice of equal length, then larger len - // - for each decode, compare elem-by-elem to the original slice - // - - // - rinse and repeat for a MapBySlice version - // - - */ -}} - var v{{$i}}v1, v{{$i}}v2 []{{ .Elem }} - var bs{{$i}} []byte - v{{$i}}v1 = v - bs{{$i}} = testMarshalErr(v{{$i}}v1, h, t, "enc-slice-v{{$i}}") - if v == nil { - v{{$i}}v2 = make([]{{ .Elem }}, 2) - testUnmarshalErr(v{{$i}}v2, bs{{$i}}, h, t, "dec-slice-v{{$i}}") - testDeepEqualErr(v{{$i}}v2[0], v{{$i}}v2[1], t, "equal-slice-v{{$i}}") // should not change - testDeepEqualErr(len(v{{$i}}v2), 2, t, "equal-slice-v{{$i}}") // should not change - v{{$i}}v2 = make([]{{ .Elem }}, 2) - testUnmarshalErr(reflect.ValueOf(v{{$i}}v2), bs{{$i}}, h, t, "dec-slice-v{{$i}}-noaddr") // non-addressable value - testDeepEqualErr(v{{$i}}v2[0], v{{$i}}v2[1], t, "equal-slice-v{{$i}}-noaddr") // should not change - testDeepEqualErr(len(v{{$i}}v2), 2, t, "equal-slice-v{{$i}}") // should not change - } else { - v{{$i}}v2 = make([]{{ .Elem }}, len(v)) - testUnmarshalErr(v{{$i}}v2, bs{{$i}}, h, t, "dec-slice-v{{$i}}") - testDeepEqualErr(v{{$i}}v1, v{{$i}}v2, t, "equal-slice-v{{$i}}") - v{{$i}}v2 = make([]{{ .Elem }}, len(v)) - testUnmarshalErr(reflect.ValueOf(v{{$i}}v2), bs{{$i}}, h, t, "dec-slice-v{{$i}}-noaddr") // non-addressable value - testDeepEqualErr(v{{$i}}v1, v{{$i}}v2, t, "equal-slice-v{{$i}}-noaddr") - } - testReleaseBytes(bs{{$i}}) - // ... - bs{{$i}} = testMarshalErr(&v{{$i}}v1, h, t, "enc-slice-v{{$i}}-p") - v{{$i}}v2 = nil - testUnmarshalErr(&v{{$i}}v2, bs{{$i}}, h, t, "dec-slice-v{{$i}}-p") - testDeepEqualErr(v{{$i}}v1, v{{$i}}v2, t, "equal-slice-v{{$i}}-p") - v{{$i}}va = [8]{{ .Elem }}{} // clear the array - testUnmarshalErr(&v{{$i}}va, bs{{$i}}, h, t, "dec-array-v{{$i}}-p-1") - if v{{$i}}v1 == nil && v{{$i}}v2 == nil { v{{$i}}v2 = []{{ .Elem }}{} } // so we can compare to zero len slice below - testDeepEqualErr(v{{$i}}va[:len(v{{$i}}v2)], v{{$i}}v2, t, "equal-array-v{{$i}}-p-1") - v{{$i}}va = [8]{{ .Elem }}{} // clear the array - v{{$i}}v2 = v{{$i}}va[:1:1] - testUnmarshalErr(&v{{$i}}v2, bs{{$i}}, h, t, "dec-slice-v{{$i}}-p-1") - testDeepEqualErr(v{{$i}}v1, v{{$i}}v2, t, "equal-slice-v{{$i}}-p-1") - v{{$i}}va = [8]{{ .Elem }}{} // clear the array - v{{$i}}v2 = v{{$i}}va[:len(v{{$i}}v1):len(v{{$i}}v1)] - testUnmarshalErr(&v{{$i}}v2, bs{{$i}}, h, t, "dec-slice-v{{$i}}-p-len") - testDeepEqualErr(v{{$i}}v1, v{{$i}}v2, t, "equal-slice-v{{$i}}-p-len") - v{{$i}}va = [8]{{ .Elem }}{} // clear the array - v{{$i}}v2 = v{{$i}}va[:] - testUnmarshalErr(&v{{$i}}v2, bs{{$i}}, h, t, "dec-slice-v{{$i}}-p-cap") - testDeepEqualErr(v{{$i}}v1, v{{$i}}v2, t, "equal-slice-v{{$i}}-p-cap") - if len(v{{$i}}v1) > 1 { - v{{$i}}va = [8]{{ .Elem }}{} // clear the array - testUnmarshalErr((&v{{$i}}va)[:len(v{{$i}}v1)], bs{{$i}}, h, t, "dec-slice-v{{$i}}-p-len-noaddr") - testDeepEqualErr(v{{$i}}v1, v{{$i}}va[:len(v{{$i}}v1)], t, "equal-slice-v{{$i}}-p-len-noaddr") - v{{$i}}va = [8]{{ .Elem }}{} // clear the array - testUnmarshalErr((&v{{$i}}va)[:], bs{{$i}}, h, t, "dec-slice-v{{$i}}-p-cap-noaddr") - testDeepEqualErr(v{{$i}}v1, v{{$i}}va[:len(v{{$i}}v1)], t, "equal-slice-v{{$i}}-p-cap-noaddr") - } - testReleaseBytes(bs{{$i}}) - // ... - var v{{$i}}v3, v{{$i}}v4 {{ .MethodNamePfx "typMbs" false }} - v{{$i}}v2 = nil - if v != nil { v{{$i}}v2 = make([]{{ .Elem }}, len(v)) } - v{{$i}}v3 = {{ .MethodNamePfx "typMbs" false }}(v{{$i}}v1) - v{{$i}}v4 = {{ .MethodNamePfx "typMbs" false }}(v{{$i}}v2) - if v != nil { - bs{{$i}} = testMarshalErr(v{{$i}}v3, h, t, "enc-slice-v{{$i}}-custom") - testUnmarshalErr(v{{$i}}v4, bs{{$i}}, h, t, "dec-slice-v{{$i}}-custom") - testDeepEqualErr(v{{$i}}v3, v{{$i}}v4, t, "equal-slice-v{{$i}}-custom") - testReleaseBytes(bs{{$i}}) - } - bs{{$i}} = testMarshalErr(&v{{$i}}v3, h, t, "enc-slice-v{{$i}}-custom-p") - v{{$i}}v2 = nil - v{{$i}}v4 = {{ .MethodNamePfx "typMbs" false }}(v{{$i}}v2) - testUnmarshalErr(&v{{$i}}v4, bs{{$i}}, h, t, "dec-slice-v{{$i}}-custom-p") - testDeepEqualErr(v{{$i}}v3, v{{$i}}v4, t, "equal-slice-v{{$i}}-custom-p") - testReleaseBytes(bs{{$i}}) - } -{{end}}{{end}}{{end}} -} - -func __doTestMammothMaps(t *testing.T, h Handle) { -{{range $i, $e := .Values }}{{if not .Primitive }}{{if .MapKey -}} - for _, v := range []map[{{ .MapKey }}]{{ .Elem }}{ nil, {}, { {{ nonzerocmd .MapKey }}:{{ zerocmd .Elem }} {{if ne "bool" .MapKey}}, {{ nonzerocmd .MapKey }}:{{ nonzerocmd .Elem }} {{end}} } } { - // fmt.Printf(">>>> running mammoth map v{{$i}}: %v\n", v) - var v{{$i}}v1, v{{$i}}v2 map[{{ .MapKey }}]{{ .Elem }} - var bs{{$i}} []byte - v{{$i}}v1 = v - bs{{$i}} = testMarshalErr(v{{$i}}v1, h, t, "enc-map-v{{$i}}") - if v != nil { - if v == nil { v{{$i}}v2 = nil } else { v{{$i}}v2 = make(map[{{ .MapKey }}]{{ .Elem }}, len(v)) } // reset map - testUnmarshalErr(v{{$i}}v2, bs{{$i}}, h, t, "dec-map-v{{$i}}") - testDeepEqualErr(v{{$i}}v1, v{{$i}}v2, t, "equal-map-v{{$i}}") - if v == nil { v{{$i}}v2 = nil } else { v{{$i}}v2 = make(map[{{ .MapKey }}]{{ .Elem }}, len(v)) } // reset map - testUnmarshalErr(reflect.ValueOf(v{{$i}}v2), bs{{$i}}, h, t, "dec-map-v{{$i}}-noaddr") // decode into non-addressable map value - testDeepEqualErr(v{{$i}}v1, v{{$i}}v2, t, "equal-map-v{{$i}}-noaddr") - } - if v == nil { v{{$i}}v2 = nil } else { v{{$i}}v2 = make(map[{{ .MapKey }}]{{ .Elem }}, len(v)) } // reset map - testUnmarshalErr(&v{{$i}}v2, bs{{$i}}, h, t, "dec-map-v{{$i}}-p-len") - testDeepEqualErr(v{{$i}}v1, v{{$i}}v2, t, "equal-map-v{{$i}}-p-len") - testReleaseBytes(bs{{$i}}) - bs{{$i}} = testMarshalErr(&v{{$i}}v1, h, t, "enc-map-v{{$i}}-p") - v{{$i}}v2 = nil - testUnmarshalErr(&v{{$i}}v2, bs{{$i}}, h, t, "dec-map-v{{$i}}-p-nil") - testDeepEqualErr(v{{$i}}v1, v{{$i}}v2, t, "equal-map-v{{$i}}-p-nil") - testReleaseBytes(bs{{$i}}) - // ... - if v == nil { v{{$i}}v2 = nil } else { v{{$i}}v2 = make(map[{{ .MapKey }}]{{ .Elem }}, len(v)) } // reset map - var v{{$i}}v3, v{{$i}}v4 {{ .MethodNamePfx "typMap" false }} - v{{$i}}v3 = {{ .MethodNamePfx "typMap" false }}(v{{$i}}v1) - v{{$i}}v4 = {{ .MethodNamePfx "typMap" false }}(v{{$i}}v2) - if v != nil { - bs{{$i}} = testMarshalErr(v{{$i}}v3, h, t, "enc-map-v{{$i}}-custom") - testUnmarshalErr(v{{$i}}v4, bs{{$i}}, h, t, "dec-map-v{{$i}}-p-len") - testDeepEqualErr(v{{$i}}v3, v{{$i}}v4, t, "equal-map-v{{$i}}-p-len") - testReleaseBytes(bs{{$i}}) - } - } -{{end}}{{end}}{{end}} - -} - -func doTestMammothMapsAndSlices(t *testing.T, h Handle) { - defer testSetup(t, &h)() - if mh, ok := h.(*MsgpackHandle); ok { - defer func(b bool) { mh.RawToString = b }(mh.RawToString) - mh.RawToString = true - } - __doTestMammothSlices(t, h) - __doTestMammothMaps(t, h) -} - -func doTestMammoth(t *testing.T, h Handle) { - defer testSetup(t, &h)() - if mh, ok := h.(*MsgpackHandle); ok { - defer func(b bool) { mh.RawToString = b }(mh.RawToString) - mh.RawToString = true - } - - name := h.Name() - var b []byte - - var m, m2 TestMammoth - testRandomFillRV(reflect.ValueOf(&m).Elem()) - b = testMarshalErr(&m, h, t, "mammoth-"+name) - - testUnmarshalErr(&m2, b, h, t, "mammoth-"+name) - testDeepEqualErr(&m, &m2, t, "mammoth-"+name) - testReleaseBytes(b) - - if testing.Short() { - t.Skipf("skipping rest of mammoth test in -short mode") - } - - var mm, mm2 TestMammoth2Wrapper - testRandomFillRV(reflect.ValueOf(&mm).Elem()) - b = testMarshalErr(&mm, h, t, "mammoth2-"+name) - // os.Stderr.Write([]byte("\n\n\n\n" + string(b) + "\n\n\n\n")) - testUnmarshalErr(&mm2, b, h, t, "mammoth2-"+name) - testDeepEqualErr(&mm, &mm2, t, "mammoth2-"+name) - // testMammoth2(t, name, h) - testReleaseBytes(b) -} - -{{range $i, $e := .Formats -}} -func Test{{ . }}Mammoth(t *testing.T) { - doTestMammoth(t, test{{ . }}H) -} -{{end}} -{{range $i, $e := .Formats -}} -func Test{{ . }}MammothMapsAndSlices(t *testing.T) { - doTestMammothMapsAndSlices(t, test{{ . }}H) -} -{{end}} diff --git a/vendor/github.com/ugorji/go/codec/mammoth2-test.go.tmpl b/vendor/github.com/ugorji/go/codec/mammoth2-test.go.tmpl deleted file mode 100644 index 9fe56ec..0000000 --- a/vendor/github.com/ugorji/go/codec/mammoth2-test.go.tmpl +++ /dev/null @@ -1,101 +0,0 @@ -// +build !codec.notmammoth - -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -// Code generated from mammoth2-test.go.tmpl - DO NOT EDIT. - -package codec - -// Increase codecoverage by covering all the codecgen paths, in fast-path and gen-helper.go.... -// -// Note: even though this is built based on fast-path and gen-helper, we will run these tests -// in all modes, including notfastpath, etc. -// -// Add test file for creating a mammoth generated file as _mammoth_generated.go -// - generate a second mammoth files in a different file: mammoth2_generated_test.go -// mammoth-test.go.tmpl will do this -// - run codecgen on it, into mammoth2_codecgen_generated_test.go (no build tags) -// - as part of TestMammoth, run it also -// - this will cover all the codecgen, gen-helper, etc in one full run -// - check in mammoth* files into github also -// -// Now, add some types: -// - some that implement BinaryMarshal, TextMarshal, JSONMarshal, and one that implements none of it -// - create a wrapper type that includes TestMammoth2, with it in slices, and maps, and the custom types -// - this wrapper object is what we work encode/decode (so that the codecgen methods are called) - - -// import "encoding/binary" - -import "fmt" - -type TestMammoth2 struct { - -{{range .Values }}{{if .Primitive }}{{/* -*/}}{{ .MethodNamePfx "F" true }} {{ .Primitive }} -{{ .MethodNamePfx "Fptr" true }} *{{ .Primitive }} -{{end}}{{end}} - -{{range .Values }}{{if not .Primitive }}{{if not .MapKey }}{{/* -*/}}{{ .MethodNamePfx "F" false }} []{{ .Elem }} -{{ .MethodNamePfx "Fptr" false }} *[]{{ .Elem }} -{{end}}{{end}}{{end}} - -{{range .Values }}{{if not .Primitive }}{{if .MapKey }}{{/* -*/}}{{ .MethodNamePfx "F" false }} map[{{ .MapKey }}]{{ .Elem }} -{{ .MethodNamePfx "Fptr" false }} *map[{{ .MapKey }}]{{ .Elem }} -{{end}}{{end}}{{end}} - -} - -// ----------- - -type testMammoth2Binary uint64 -func (x testMammoth2Binary) MarshalBinary() (data []byte, err error) { -data = make([]byte, 8) -bigenstd.PutUint64(data, uint64(x)) -return -} -func (x *testMammoth2Binary) UnmarshalBinary(data []byte) (err error) { -*x = testMammoth2Binary(bigenstd.Uint64(data)) -return -} - -type testMammoth2Text uint64 -func (x testMammoth2Text) MarshalText() (data []byte, err error) { -data = []byte(fmt.Sprintf("%b", uint64(x))) -return -} -func (x *testMammoth2Text) UnmarshalText(data []byte) (err error) { -_, err = fmt.Sscanf(string(data), "%b", (*uint64)(x)) -return -} - -type testMammoth2Json uint64 -func (x testMammoth2Json) MarshalJSON() (data []byte, err error) { -data = []byte(fmt.Sprintf("%v", uint64(x))) -return -} -func (x *testMammoth2Json) UnmarshalJSON(data []byte) (err error) { -_, err = fmt.Sscanf(string(data), "%v", (*uint64)(x)) -return -} - -type testMammoth2Basic [4]uint64 - -type TestMammoth2Wrapper struct { - V TestMammoth2 - T testMammoth2Text - B testMammoth2Binary - J testMammoth2Json - C testMammoth2Basic - M map[testMammoth2Basic]TestMammoth2 - L []TestMammoth2 - A [4]int64 - - Tcomplex128 complex128 - Tcomplex64 complex64 - Tbytes []uint8 - Tpbytes *[]uint8 -} diff --git a/vendor/github.com/ugorji/go/codec/mammoth_test.go.tmpl b/vendor/github.com/ugorji/go/codec/mammoth_test.go.tmpl new file mode 100644 index 0000000..f6a0243 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/mammoth_test.go.tmpl @@ -0,0 +1,324 @@ +//go:build !codec.notmammoth + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +// Code generated from mammoth_test.go.tmpl - DO NOT EDIT. + +package codec + +import "testing" +import "fmt" +import "reflect" + +// TestMammoth has all the different paths optimized in fastpath +// It has all the primitives, slices and maps. +// +// For each of those types, it has a pointer and a non-pointer field. + +func init() { _ = fmt.Printf } // so we can include fmt as needed + +type TestMammoth struct { + +{{range .Values }}{{if .Primitive -}} +{{ .MethodNamePfx "F" true }} {{ .Primitive }} +{{ .MethodNamePfx "Fptr" true }} *{{ .Primitive }} +{{end}}{{end}} + +{{range .Values }}{{if not .Primitive }}{{if not .MapKey -}} +{{ .MethodNamePfx "F" false }} []{{ .Elem }} +{{ .MethodNamePfx "Fptr" false }} *[]{{ .Elem }} +{{ .MethodNamePfx "Farr4" false }} [4]{{ .Elem }} +{{end}}{{end}}{{end}} + +{{range .Values }}{{if not .Primitive }}{{if .MapKey -}} +{{ .MethodNamePfx "F" false }} map[{{ .MapKey }}]{{ .Elem }} +{{ .MethodNamePfx "Fptr" false }} *map[{{ .MapKey }}]{{ .Elem }} +{{end}}{{end}}{{end}} + +} + +// ----------- + +// Increase codecoverage by covering all the codecgen paths, in fastpath .... +// +// Note: even though this is built based on fastpath, we will run these tests +// in all modes, including notfastpath, etc. +// +// Add test file for creating a mammoth generated file as _mammoth_generated.go +// +// Now, add some types: +// - some that implement BinaryMarshal, TextMarshal, JSONMarshal, and one that implements none of it +// - create a wrapper type that includes TestMammoth2, with it in slices, and maps, and the custom types +// - this wrapper object is what we work encode/decode (so that the codecgen methods are called) + +type testMammoth2Binary uint64 +func (x testMammoth2Binary) MarshalBinary() (data []byte, err error) { +data = make([]byte, 8) +bigenstd.PutUint64(data, uint64(x)) +return +} +func (x *testMammoth2Binary) UnmarshalBinary(data []byte) (err error) { +*x = testMammoth2Binary(bigenstd.Uint64(data)) +return +} + +type testMammoth2Text uint64 +func (x testMammoth2Text) MarshalText() (data []byte, err error) { +data = []byte(fmt.Sprintf("%b", uint64(x))) +return +} +func (x *testMammoth2Text) UnmarshalText(data []byte) (err error) { +_, err = fmt.Sscanf(string(data), "%b", (*uint64)(x)) +return +} + +type testMammoth2Json uint64 +func (x testMammoth2Json) MarshalJSON() (data []byte, err error) { +data = []byte(fmt.Sprintf("%v", uint64(x))) +return +} +func (x *testMammoth2Json) UnmarshalJSON(data []byte) (err error) { +_, err = fmt.Sscanf(string(data), "%v", (*uint64)(x)) +return +} + +type testMammoth2Basic [4]uint64 + +type TestMammoth2Wrapper struct { + V TestMammoth + T testMammoth2Text + B testMammoth2Binary + J testMammoth2Json + C testMammoth2Basic + M map[testMammoth2Basic]TestMammoth + L []TestMammoth + A [4]int64 + + Tcomplex128 complex128 + Tcomplex64 complex64 + Tbytes []uint8 + Tpbytes *[]uint8 +} + +// ----------- + +{{range .Values }}{{if not .Primitive }}{{if not .MapKey -}} +type {{ .MethodNamePfx "typMbs" false }} []{{ .Elem }} +func (_ {{ .MethodNamePfx "typMbs" false }}) MapBySlice() { } +{{end}}{{end}}{{end}} + +{{range .Values }}{{if not .Primitive }}{{if .MapKey -}} +type {{ .MethodNamePfx "typMap" false }} map[{{ .MapKey }}]{{ .Elem }} +{{end}}{{end}}{{end}} + +func __doTestMammothSlices(t *testing.T, h Handle) { +{{range $i, $e := .Values }}{{if not .Primitive }}{{if not .MapKey -}} + var v{{$i}}va [8]{{ .Elem }} + for _, v := range [][]{{ .Elem }}{ nil, {}, { {{ nonzerocmd .Elem }}, {{ zerocmd .Elem }}, {{ zerocmd .Elem }}, {{ nonzerocmd .Elem }} } } { + {{/* + // fmt.Printf(">>>> running mammoth slice v{{$i}}: %v\n", v) + // - encode value to some []byte + // - decode into a length-wise-equal []byte + // - check if equal to initial slice + // - encode ptr to the value + // - check if encode bytes are same + // - decode into ptrs to: nil, then 1-elem slice, equal-length, then large len slice + // - decode into non-addressable slice of equal length, then larger len + // - for each decode, compare elem-by-elem to the original slice + // - + // - rinse and repeat for a MapBySlice version + // - + */ -}} + var v{{$i}}v1, v{{$i}}v2 []{{ .Elem }} + var bs{{$i}} []byte + v{{$i}}v1 = v + bs{{$i}} = testMarshalErr(v{{$i}}v1, h, t, "enc-slice-v{{$i}}") + if v == nil { + v{{$i}}v2 = make([]{{ .Elem }}, 2) + testUnmarshalErr(v{{$i}}v2, bs{{$i}}, h, t, "dec-slice-v{{$i}}") + testDeepEqualErr(v{{$i}}v2[0], v{{$i}}v2[1], t, "equal-slice-v{{$i}}") // should not change + testDeepEqualErr(len(v{{$i}}v2), 2, t, "equal-slice-v{{$i}}") // should not change + v{{$i}}v2 = make([]{{ .Elem }}, 2) + testUnmarshalErr(reflect.ValueOf(v{{$i}}v2), bs{{$i}}, h, t, "dec-slice-v{{$i}}-noaddr") // non-addressable value + testDeepEqualErr(v{{$i}}v2[0], v{{$i}}v2[1], t, "equal-slice-v{{$i}}-noaddr") // should not change + testDeepEqualErr(len(v{{$i}}v2), 2, t, "equal-slice-v{{$i}}") // should not change + } else { + v{{$i}}v2 = make([]{{ .Elem }}, len(v)) + testUnmarshalErr(v{{$i}}v2, bs{{$i}}, h, t, "dec-slice-v{{$i}}") + testDeepEqualErrHandle(v{{$i}}v1, v{{$i}}v2, h, t, "equal-slice-v{{$i}}") + v{{$i}}v2 = make([]{{ .Elem }}, len(v)) + testUnmarshalErr(reflect.ValueOf(v{{$i}}v2), bs{{$i}}, h, t, "dec-slice-v{{$i}}-noaddr") // non-addressable value + testDeepEqualErrHandle(v{{$i}}v1, v{{$i}}v2, h, t, "equal-slice-v{{$i}}-noaddr") + } + testReleaseBytes(bs{{$i}}) + // ... + bs{{$i}} = testMarshalErr(&v{{$i}}v1, h, t, "enc-slice-v{{$i}}-p") + v{{$i}}v2 = nil + testUnmarshalErr(&v{{$i}}v2, bs{{$i}}, h, t, "dec-slice-v{{$i}}-p") + testDeepEqualErrHandle(v{{$i}}v1, v{{$i}}v2, h, t, "equal-slice-v{{$i}}-p") + v{{$i}}va = [8]{{ .Elem }}{} // clear the array + testUnmarshalErr(&v{{$i}}va, bs{{$i}}, h, t, "dec-array-v{{$i}}-p-1") + if v{{$i}}v1 == nil && v{{$i}}v2 == nil { v{{$i}}v2 = []{{ .Elem }}{} } // so we can compare to zero len slice below + testDeepEqualErrHandle(v{{$i}}va[:len(v{{$i}}v2)], v{{$i}}v2, h, t, "equal-array-v{{$i}}-p-1") + v{{$i}}va = [8]{{ .Elem }}{} // clear the array + v{{$i}}v2 = v{{$i}}va[:1:1] + testUnmarshalErr(&v{{$i}}v2, bs{{$i}}, h, t, "dec-slice-v{{$i}}-p-1") + testDeepEqualErrHandle(v{{$i}}v1, v{{$i}}v2, h, t, "equal-slice-v{{$i}}-p-1") + v{{$i}}va = [8]{{ .Elem }}{} // clear the array + v{{$i}}v2 = v{{$i}}va[:len(v{{$i}}v1):len(v{{$i}}v1)] + testUnmarshalErr(&v{{$i}}v2, bs{{$i}}, h, t, "dec-slice-v{{$i}}-p-len") + testDeepEqualErrHandle(v{{$i}}v1, v{{$i}}v2, h, t, "equal-slice-v{{$i}}-p-len") + v{{$i}}va = [8]{{ .Elem }}{} // clear the array + v{{$i}}v2 = v{{$i}}va[:] + testUnmarshalErr(&v{{$i}}v2, bs{{$i}}, h, t, "dec-slice-v{{$i}}-p-cap") + testDeepEqualErrHandle(v{{$i}}v1, v{{$i}}v2, h, t, "equal-slice-v{{$i}}-p-cap") + if len(v{{$i}}v1) > 1 { + v{{$i}}va = [8]{{ .Elem }}{} // clear the array + testUnmarshalErr((&v{{$i}}va)[:len(v{{$i}}v1)], bs{{$i}}, h, t, "dec-slice-v{{$i}}-p-len-noaddr") + testDeepEqualErrHandle(v{{$i}}v1, v{{$i}}va[:len(v{{$i}}v1)], h, t, "equal-slice-v{{$i}}-p-len-noaddr") + v{{$i}}va = [8]{{ .Elem }}{} // clear the array + testUnmarshalErr((&v{{$i}}va)[:], bs{{$i}}, h, t, "dec-slice-v{{$i}}-p-cap-noaddr") + testDeepEqualErrHandle(v{{$i}}v1, v{{$i}}va[:len(v{{$i}}v1)], h, t, "equal-slice-v{{$i}}-p-cap-noaddr") + } + testReleaseBytes(bs{{$i}}) + // ... + var v{{$i}}v3, v{{$i}}v4 {{ .MethodNamePfx "typMbs" false }} + v{{$i}}v2 = nil + if v != nil { v{{$i}}v2 = make([]{{ .Elem }}, len(v)) } + v{{$i}}v3 = {{ .MethodNamePfx "typMbs" false }}(v{{$i}}v1) + v{{$i}}v4 = {{ .MethodNamePfx "typMbs" false }}(v{{$i}}v2) + if v != nil { + bs{{$i}} = testMarshalErr(v{{$i}}v3, h, t, "enc-slice-v{{$i}}-custom") + testUnmarshalErr(v{{$i}}v4, bs{{$i}}, h, t, "dec-slice-v{{$i}}-custom") + testDeepEqualErrHandle(v{{$i}}v3, v{{$i}}v4, h, t, "equal-slice-v{{$i}}-custom") + testReleaseBytes(bs{{$i}}) + } + bs{{$i}} = testMarshalErr(&v{{$i}}v3, h, t, "enc-slice-v{{$i}}-custom-p") + v{{$i}}v2 = nil + v{{$i}}v4 = {{ .MethodNamePfx "typMbs" false }}(v{{$i}}v2) + testUnmarshalErr(&v{{$i}}v4, bs{{$i}}, h, t, "dec-slice-v{{$i}}-custom-p") + testDeepEqualErrHandle(v{{$i}}v3, v{{$i}}v4, h, t, "equal-slice-v{{$i}}-custom-p") + testReleaseBytes(bs{{$i}}) + } +{{end}}{{end}}{{end}} +} + +func __doTestMammothMaps(t *testing.T, h Handle) { +{{range $i, $e := .Values }}{{if not .Primitive }}{{if .MapKey -}} + for _, v := range []map[{{ .MapKey }}]{{ .Elem }}{ nil, {}, { {{ nonzerocmd .MapKey }}:{{ zerocmd .Elem }} {{if ne "bool" .MapKey}}, {{ nonzerocmd .MapKey }}:{{ nonzerocmd .Elem }} {{end}} } } { + {{/* // fmt.Printf(">>>> running mammoth map v{{$i}}: %v\n", v) */ -}} + var v{{$i}}v1, v{{$i}}v2 map[{{ .MapKey }}]{{ .Elem }} + var bs{{$i}} []byte + v{{$i}}v1 = v + bs{{$i}} = testMarshalErr(v{{$i}}v1, h, t, "enc-map-v{{$i}}") + if v != nil { + v{{$i}}v2 = make(map[{{ .MapKey }}]{{ .Elem }}, len(v)) // reset map + testUnmarshalErr(v{{$i}}v2, bs{{$i}}, h, t, "dec-map-v{{$i}}") + testDeepEqualErrHandle(v{{$i}}v1, v{{$i}}v2, h, t, "equal-map-v{{$i}}") + v{{$i}}v2 = make(map[{{ .MapKey }}]{{ .Elem }}, len(v)) // reset map + testUnmarshalErr(reflect.ValueOf(v{{$i}}v2), bs{{$i}}, h, t, "dec-map-v{{$i}}-noaddr") // decode into non-addressable map value + testDeepEqualErrHandle(v{{$i}}v1, v{{$i}}v2, h, t, "equal-map-v{{$i}}-noaddr") + } + if v == nil { v{{$i}}v2 = nil } else { v{{$i}}v2 = make(map[{{ .MapKey }}]{{ .Elem }}, len(v)) } // reset map + testUnmarshalErr(&v{{$i}}v2, bs{{$i}}, h, t, "dec-map-v{{$i}}-p-len") + testDeepEqualErrHandle(v{{$i}}v1, v{{$i}}v2, h, t, "equal-map-v{{$i}}-p-len") + testReleaseBytes(bs{{$i}}) + bs{{$i}} = testMarshalErr(&v{{$i}}v1, h, t, "enc-map-v{{$i}}-p") + v{{$i}}v2 = nil + testUnmarshalErr(&v{{$i}}v2, bs{{$i}}, h, t, "dec-map-v{{$i}}-p-nil") + testDeepEqualErrHandle(v{{$i}}v1, v{{$i}}v2, h, t, "equal-map-v{{$i}}-p-nil") + testReleaseBytes(bs{{$i}}) + // ... + if v == nil { v{{$i}}v2 = nil } else { v{{$i}}v2 = make(map[{{ .MapKey }}]{{ .Elem }}, len(v)) } // reset map + var v{{$i}}v3, v{{$i}}v4 {{ .MethodNamePfx "typMap" false }} + v{{$i}}v3 = {{ .MethodNamePfx "typMap" false }}(v{{$i}}v1) + v{{$i}}v4 = {{ .MethodNamePfx "typMap" false }}(v{{$i}}v2) + if v != nil { + bs{{$i}} = testMarshalErr(v{{$i}}v3, h, t, "enc-map-v{{$i}}-custom") + testUnmarshalErr(v{{$i}}v4, bs{{$i}}, h, t, "dec-map-v{{$i}}-p-len") + testDeepEqualErrHandle(v{{$i}}v3, v{{$i}}v4, h, t, "equal-map-v{{$i}}-p-len") + testReleaseBytes(bs{{$i}}) + } + type s{{$i}}T struct { + M map[{{ .MapKey }}]{{ .Elem }} + Mp *map[{{ .MapKey }}]{{ .Elem }} + } + var m{{$i}}v99 = map[{{ .MapKey }}]{{ .Elem }}{ + {{ zerocmd .MapKey }}: {{ zerocmd .Elem }}, + {{ nonzerocmd .MapKey }}:{{ nonzerocmd .Elem }}, + } + var s{{$i}}v1, s{{$i}}v2 s{{$i}}T + bs{{$i}} = testMarshalErr(s{{$i}}v1, h, t, "enc-map-v{{$i}}-custom") + testUnmarshalErr(&s{{$i}}v2, bs{{$i}}, h, t, "dec-map-v{{$i}}-p-len") + testDeepEqualErrHandle(s{{$i}}v1, s{{$i}}v2, h, t, "equal-map-v{{$i}}-p-len") + testReleaseBytes(bs{{$i}}) + s{{$i}}v2 = s{{$i}}T{} + s{{$i}}v1.M = m{{$i}}v99 + bs{{$i}} = testMarshalErr(s{{$i}}v1, h, t, "enc-map-v{{$i}}-custom") + testUnmarshalErr(&s{{$i}}v2, bs{{$i}}, h, t, "dec-map-v{{$i}}-p-len") + testDeepEqualErrHandle(s{{$i}}v1, s{{$i}}v2, h, t, "equal-map-v{{$i}}-p-len") + testReleaseBytes(bs{{$i}}) + s{{$i}}v2 = s{{$i}}T{} + s{{$i}}v1.Mp = &m{{$i}}v99 + bs{{$i}} = testMarshalErr(s{{$i}}v1, h, t, "enc-map-v{{$i}}-custom") + testUnmarshalErr(&s{{$i}}v2, bs{{$i}}, h, t, "dec-map-v{{$i}}-p-len") + testDeepEqualErrHandle(s{{$i}}v1, s{{$i}}v2, h, t, "equal-map-v{{$i}}-p-len") + testReleaseBytes(bs{{$i}}) + } +{{end}}{{end}}{{end}} + +} + +func doTestMammothMapsAndSlices(t *testing.T, h Handle) { + defer testSetup(t, &h)() + if mh, ok := h.(*MsgpackHandle); ok { + defer func(b bool) { mh.RawToString = b }(mh.RawToString) + mh.RawToString = true + } + __doTestMammothSlices(t, h) + __doTestMammothMaps(t, h) +} + +func doTestMammoth(t *testing.T, h Handle) { + defer testSetup(t, &h)() + if mh, ok := h.(*MsgpackHandle); ok { + defer func(b bool) { mh.RawToString = b }(mh.RawToString) + mh.RawToString = true + } + + name := h.Name() + var b []byte + + var m, m2 TestMammoth + testRandomFillRV(reflect.ValueOf(&m).Elem()) + b = testMarshalErr(&m, h, t, "mammoth-"+name) + + testUnmarshalErr(&m2, b, h, t, "mammoth-"+name) + testDeepEqualErrHandle(&m, &m2, h, t, "mammoth-"+name) + testReleaseBytes(b) + + if testing.Short() { + t.Skipf("skipping rest of mammoth test in -short mode") + } + + var mm, mm2 TestMammoth2Wrapper + testRandomFillRV(reflect.ValueOf(&mm).Elem()) + b = testMarshalErr(&mm, h, t, "mammoth2-"+name) + // os.Stderr.Write([]byte("\n\n\n\n" + string(b) + "\n\n\n\n")) + testUnmarshalErr(&mm2, b, h, t, "mammoth2-"+name) + testDeepEqualErrHandle(&mm, &mm2, h, t, "mammoth2-"+name) + // testMammoth2(t, name, h) + testReleaseBytes(b) +} + +{{range $i, $e := .Formats -}} +func Test{{ . }}Mammoth(t *testing.T) { + doTestMammoth(t, test{{ . }}H) +} +{{end}} +{{range $i, $e := .Formats -}} +func Test{{ . }}MammothMapsAndSlices(t *testing.T) { + doTestMammothMapsAndSlices(t, test{{ . }}H) +} +{{end}} diff --git a/vendor/github.com/ugorji/go/codec/msgpack.base.go b/vendor/github.com/ugorji/go/codec/msgpack.base.go new file mode 100644 index 0000000..0388f0c --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/msgpack.base.go @@ -0,0 +1,299 @@ +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "fmt" + "io" + "net/rpc" + "reflect" +) + +const ( + mpPosFixNumMin byte = 0x00 + mpPosFixNumMax byte = 0x7f + mpFixMapMin byte = 0x80 + mpFixMapMax byte = 0x8f + mpFixArrayMin byte = 0x90 + mpFixArrayMax byte = 0x9f + mpFixStrMin byte = 0xa0 + mpFixStrMax byte = 0xbf + mpNil byte = 0xc0 + _ byte = 0xc1 + mpFalse byte = 0xc2 + mpTrue byte = 0xc3 + mpFloat byte = 0xca + mpDouble byte = 0xcb + mpUint8 byte = 0xcc + mpUint16 byte = 0xcd + mpUint32 byte = 0xce + mpUint64 byte = 0xcf + mpInt8 byte = 0xd0 + mpInt16 byte = 0xd1 + mpInt32 byte = 0xd2 + mpInt64 byte = 0xd3 + + // extensions below + mpBin8 byte = 0xc4 + mpBin16 byte = 0xc5 + mpBin32 byte = 0xc6 + mpExt8 byte = 0xc7 + mpExt16 byte = 0xc8 + mpExt32 byte = 0xc9 + mpFixExt1 byte = 0xd4 + mpFixExt2 byte = 0xd5 + mpFixExt4 byte = 0xd6 + mpFixExt8 byte = 0xd7 + mpFixExt16 byte = 0xd8 + + mpStr8 byte = 0xd9 // new + mpStr16 byte = 0xda + mpStr32 byte = 0xdb + + mpArray16 byte = 0xdc + mpArray32 byte = 0xdd + + mpMap16 byte = 0xde + mpMap32 byte = 0xdf + + mpNegFixNumMin byte = 0xe0 + mpNegFixNumMax byte = 0xff +) + +var mpTimeExtTag int8 = -1 +var mpTimeExtTagU = uint8(mpTimeExtTag) + +var mpdescNames = map[byte]string{ + mpNil: "nil", + mpFalse: "false", + mpTrue: "true", + mpFloat: "float", + mpDouble: "float", + mpUint8: "uuint", + mpUint16: "uint", + mpUint32: "uint", + mpUint64: "uint", + mpInt8: "int", + mpInt16: "int", + mpInt32: "int", + mpInt64: "int", + + mpStr8: "string|bytes", + mpStr16: "string|bytes", + mpStr32: "string|bytes", + + mpBin8: "bytes", + mpBin16: "bytes", + mpBin32: "bytes", + + mpArray16: "array", + mpArray32: "array", + + mpMap16: "map", + mpMap32: "map", +} + +func mpdesc(bd byte) (s string) { + s = mpdescNames[bd] + if s == "" { + switch { + case bd >= mpPosFixNumMin && bd <= mpPosFixNumMax, + bd >= mpNegFixNumMin && bd <= mpNegFixNumMax: + s = "int" + case bd >= mpFixStrMin && bd <= mpFixStrMax: + s = "string|bytes" + case bd >= mpFixArrayMin && bd <= mpFixArrayMax: + s = "array" + case bd >= mpFixMapMin && bd <= mpFixMapMax: + s = "map" + case bd >= mpFixExt1 && bd <= mpFixExt16, + bd >= mpExt8 && bd <= mpExt32: + s = "ext" + default: + s = "unknown" + } + } + return +} + +// MsgpackSpecRpcMultiArgs is a special type which signifies to the MsgpackSpecRpcCodec +// that the backend RPC service takes multiple arguments, which have been arranged +// in sequence in the slice. +// +// The Codec then passes it AS-IS to the rpc service (without wrapping it in an +// array of 1 element). +type MsgpackSpecRpcMultiArgs []interface{} + +// A MsgpackContainer type specifies the different types of msgpackContainers. +type msgpackContainerType struct { + fixCutoff, bFixMin, b8, b16, b32 byte + // hasFixMin, has8, has8Always bool +} + +var ( + msgpackContainerRawLegacy = msgpackContainerType{ + 32, mpFixStrMin, 0, mpStr16, mpStr32, + } + msgpackContainerStr = msgpackContainerType{ + 32, mpFixStrMin, mpStr8, mpStr16, mpStr32, // true, true, false, + } + msgpackContainerBin = msgpackContainerType{ + 0, 0, mpBin8, mpBin16, mpBin32, // false, true, true, + } + msgpackContainerList = msgpackContainerType{ + 16, mpFixArrayMin, 0, mpArray16, mpArray32, // true, false, false, + } + msgpackContainerMap = msgpackContainerType{ + 16, mpFixMapMin, 0, mpMap16, mpMap32, // true, false, false, + } +) + +//-------------------------------------------------- + +// MsgpackHandle is a Handle for the Msgpack Schema-Free Encoding Format. +type MsgpackHandle struct { + binaryEncodingType + notJsonType + BasicHandle + + // NoFixedNum says to output all signed integers as 2-bytes, never as 1-byte fixednum. + NoFixedNum bool + + // WriteExt controls whether the new spec is honored. + // + // With WriteExt=true, we can encode configured extensions with extension tags + // and encode string/[]byte/extensions in a way compatible with the new spec + // but incompatible with the old spec. + // + // For compatibility with the old spec, set WriteExt=false. + // + // With WriteExt=false: + // configured extensions are serialized as raw bytes (not msgpack extensions). + // reserved byte descriptors like Str8 and those enabling the new msgpack Binary type + // are not encoded. + WriteExt bool + + // PositiveIntUnsigned says to encode positive integers as unsigned. + PositiveIntUnsigned bool +} + +// Name returns the name of the handle: msgpack +func (h *MsgpackHandle) Name() string { return "msgpack" } + +func (h *MsgpackHandle) desc(bd byte) string { return mpdesc(bd) } + +// SetBytesExt sets an extension +func (h *MsgpackHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) { + return h.SetExt(rt, tag, makeExt(ext)) +} + +//-------------------------------------------------- + +type msgpackSpecRpcCodec struct { + *rpcCodec +} + +// /////////////// Spec RPC Codec /////////////////// +func (c *msgpackSpecRpcCodec) WriteRequest(r *rpc.Request, body interface{}) error { + // WriteRequest can write to both a Go service, and other services that do + // not abide by the 1 argument rule of a Go service. + // We discriminate based on if the body is a MsgpackSpecRpcMultiArgs + var bodyArr []interface{} + if m, ok := body.(MsgpackSpecRpcMultiArgs); ok { + bodyArr = ([]interface{})(m) + } else { + bodyArr = []interface{}{body} + } + r2 := []interface{}{0, uint32(r.Seq), r.ServiceMethod, bodyArr} + return c.write(r2) +} + +func (c *msgpackSpecRpcCodec) WriteResponse(r *rpc.Response, body interface{}) error { + var moe interface{} + if r.Error != "" { + moe = r.Error + } + if moe != nil && body != nil { + body = nil + } + r2 := []interface{}{1, uint32(r.Seq), moe, body} + return c.write(r2) +} + +func (c *msgpackSpecRpcCodec) ReadResponseHeader(r *rpc.Response) error { + return c.parseCustomHeader(1, &r.Seq, &r.Error) +} + +func (c *msgpackSpecRpcCodec) ReadRequestHeader(r *rpc.Request) error { + return c.parseCustomHeader(0, &r.Seq, &r.ServiceMethod) +} + +func (c *msgpackSpecRpcCodec) ReadRequestBody(body interface{}) error { + if body == nil { // read and discard + return c.read(nil) + } + bodyArr := []interface{}{body} + return c.read(&bodyArr) +} + +func (c *msgpackSpecRpcCodec) parseCustomHeader(expectTypeByte byte, msgid *uint64, methodOrError *string) (err error) { + if c.cls.Load().closed { + return io.ErrUnexpectedEOF + } + + // We read the response header by hand + // so that the body can be decoded on its own from the stream at a later time. + + const fia byte = 0x94 //four item array descriptor value + + var ba [1]byte + var n int + for { + n, err = c.r.Read(ba[:]) + if err != nil { + return + } + if n == 1 { + break + } + } + + var b = ba[0] + if b != fia { + err = fmt.Errorf("not array - %s %x/%s", msgBadDesc, b, mpdesc(b)) + } else { + err = c.read(&b) + if err == nil { + if b != expectTypeByte { + err = fmt.Errorf("%s - expecting %v but got %x/%s", msgBadDesc, expectTypeByte, b, mpdesc(b)) + } else { + err = c.read(msgid) + if err == nil { + err = c.read(methodOrError) + } + } + } + } + return +} + +//-------------------------------------------------- + +// msgpackSpecRpc is the implementation of Rpc that uses custom communication protocol +// as defined in the msgpack spec at https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md +type msgpackSpecRpc struct{} + +// MsgpackSpecRpc implements Rpc using the communication protocol defined in +// the msgpack spec at https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md . +// +// See GoRpc documentation, for information on buffering for better performance. +var MsgpackSpecRpc msgpackSpecRpc + +func (x msgpackSpecRpc) ServerCodec(conn io.ReadWriteCloser, h Handle) rpc.ServerCodec { + return &msgpackSpecRpcCodec{newRPCCodec(conn, h)} +} + +func (x msgpackSpecRpc) ClientCodec(conn io.ReadWriteCloser, h Handle) rpc.ClientCodec { + return &msgpackSpecRpcCodec{newRPCCodec(conn, h)} +} diff --git a/vendor/github.com/ugorji/go/codec/msgpack.fastpath.mono.generated.go b/vendor/github.com/ugorji/go/codec/msgpack.fastpath.mono.generated.go new file mode 100644 index 0000000..6d6a880 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/msgpack.fastpath.mono.generated.go @@ -0,0 +1,12482 @@ +//go:build !notmono && !codec.notmono && !notfastpath && !codec.notfastpath + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "reflect" + "slices" + "sort" +) + +type fastpathEMsgpackBytes struct { + rtid uintptr + rt reflect.Type + encfn func(*encoderMsgpackBytes, *encFnInfo, reflect.Value) +} +type fastpathDMsgpackBytes struct { + rtid uintptr + rt reflect.Type + decfn func(*decoderMsgpackBytes, *decFnInfo, reflect.Value) +} +type fastpathEsMsgpackBytes [56]fastpathEMsgpackBytes +type fastpathDsMsgpackBytes [56]fastpathDMsgpackBytes +type fastpathETMsgpackBytes struct{} +type fastpathDTMsgpackBytes struct{} + +func (helperEncDriverMsgpackBytes) fastpathEList() *fastpathEsMsgpackBytes { + var i uint = 0 + var s fastpathEsMsgpackBytes + fn := func(v interface{}, fe func(*encoderMsgpackBytes, *encFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathEMsgpackBytes{rt2id(xrt), xrt, fe} + i++ + } + + fn([]interface{}(nil), (*encoderMsgpackBytes).fastpathEncSliceIntfR) + fn([]string(nil), (*encoderMsgpackBytes).fastpathEncSliceStringR) + fn([][]byte(nil), (*encoderMsgpackBytes).fastpathEncSliceBytesR) + fn([]float32(nil), (*encoderMsgpackBytes).fastpathEncSliceFloat32R) + fn([]float64(nil), (*encoderMsgpackBytes).fastpathEncSliceFloat64R) + fn([]uint8(nil), (*encoderMsgpackBytes).fastpathEncSliceUint8R) + fn([]uint64(nil), (*encoderMsgpackBytes).fastpathEncSliceUint64R) + fn([]int(nil), (*encoderMsgpackBytes).fastpathEncSliceIntR) + fn([]int32(nil), (*encoderMsgpackBytes).fastpathEncSliceInt32R) + fn([]int64(nil), (*encoderMsgpackBytes).fastpathEncSliceInt64R) + fn([]bool(nil), (*encoderMsgpackBytes).fastpathEncSliceBoolR) + + fn(map[string]interface{}(nil), (*encoderMsgpackBytes).fastpathEncMapStringIntfR) + fn(map[string]string(nil), (*encoderMsgpackBytes).fastpathEncMapStringStringR) + fn(map[string][]byte(nil), (*encoderMsgpackBytes).fastpathEncMapStringBytesR) + fn(map[string]uint8(nil), (*encoderMsgpackBytes).fastpathEncMapStringUint8R) + fn(map[string]uint64(nil), (*encoderMsgpackBytes).fastpathEncMapStringUint64R) + fn(map[string]int(nil), (*encoderMsgpackBytes).fastpathEncMapStringIntR) + fn(map[string]int32(nil), (*encoderMsgpackBytes).fastpathEncMapStringInt32R) + fn(map[string]float64(nil), (*encoderMsgpackBytes).fastpathEncMapStringFloat64R) + fn(map[string]bool(nil), (*encoderMsgpackBytes).fastpathEncMapStringBoolR) + fn(map[uint8]interface{}(nil), (*encoderMsgpackBytes).fastpathEncMapUint8IntfR) + fn(map[uint8]string(nil), (*encoderMsgpackBytes).fastpathEncMapUint8StringR) + fn(map[uint8][]byte(nil), (*encoderMsgpackBytes).fastpathEncMapUint8BytesR) + fn(map[uint8]uint8(nil), (*encoderMsgpackBytes).fastpathEncMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*encoderMsgpackBytes).fastpathEncMapUint8Uint64R) + fn(map[uint8]int(nil), (*encoderMsgpackBytes).fastpathEncMapUint8IntR) + fn(map[uint8]int32(nil), (*encoderMsgpackBytes).fastpathEncMapUint8Int32R) + fn(map[uint8]float64(nil), (*encoderMsgpackBytes).fastpathEncMapUint8Float64R) + fn(map[uint8]bool(nil), (*encoderMsgpackBytes).fastpathEncMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*encoderMsgpackBytes).fastpathEncMapUint64IntfR) + fn(map[uint64]string(nil), (*encoderMsgpackBytes).fastpathEncMapUint64StringR) + fn(map[uint64][]byte(nil), (*encoderMsgpackBytes).fastpathEncMapUint64BytesR) + fn(map[uint64]uint8(nil), (*encoderMsgpackBytes).fastpathEncMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*encoderMsgpackBytes).fastpathEncMapUint64Uint64R) + fn(map[uint64]int(nil), (*encoderMsgpackBytes).fastpathEncMapUint64IntR) + fn(map[uint64]int32(nil), (*encoderMsgpackBytes).fastpathEncMapUint64Int32R) + fn(map[uint64]float64(nil), (*encoderMsgpackBytes).fastpathEncMapUint64Float64R) + fn(map[uint64]bool(nil), (*encoderMsgpackBytes).fastpathEncMapUint64BoolR) + fn(map[int]interface{}(nil), (*encoderMsgpackBytes).fastpathEncMapIntIntfR) + fn(map[int]string(nil), (*encoderMsgpackBytes).fastpathEncMapIntStringR) + fn(map[int][]byte(nil), (*encoderMsgpackBytes).fastpathEncMapIntBytesR) + fn(map[int]uint8(nil), (*encoderMsgpackBytes).fastpathEncMapIntUint8R) + fn(map[int]uint64(nil), (*encoderMsgpackBytes).fastpathEncMapIntUint64R) + fn(map[int]int(nil), (*encoderMsgpackBytes).fastpathEncMapIntIntR) + fn(map[int]int32(nil), (*encoderMsgpackBytes).fastpathEncMapIntInt32R) + fn(map[int]float64(nil), (*encoderMsgpackBytes).fastpathEncMapIntFloat64R) + fn(map[int]bool(nil), (*encoderMsgpackBytes).fastpathEncMapIntBoolR) + fn(map[int32]interface{}(nil), (*encoderMsgpackBytes).fastpathEncMapInt32IntfR) + fn(map[int32]string(nil), (*encoderMsgpackBytes).fastpathEncMapInt32StringR) + fn(map[int32][]byte(nil), (*encoderMsgpackBytes).fastpathEncMapInt32BytesR) + fn(map[int32]uint8(nil), (*encoderMsgpackBytes).fastpathEncMapInt32Uint8R) + fn(map[int32]uint64(nil), (*encoderMsgpackBytes).fastpathEncMapInt32Uint64R) + fn(map[int32]int(nil), (*encoderMsgpackBytes).fastpathEncMapInt32IntR) + fn(map[int32]int32(nil), (*encoderMsgpackBytes).fastpathEncMapInt32Int32R) + fn(map[int32]float64(nil), (*encoderMsgpackBytes).fastpathEncMapInt32Float64R) + fn(map[int32]bool(nil), (*encoderMsgpackBytes).fastpathEncMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperDecDriverMsgpackBytes) fastpathDList() *fastpathDsMsgpackBytes { + var i uint = 0 + var s fastpathDsMsgpackBytes + fn := func(v interface{}, fd func(*decoderMsgpackBytes, *decFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathDMsgpackBytes{rt2id(xrt), xrt, fd} + i++ + } + + fn([]interface{}(nil), (*decoderMsgpackBytes).fastpathDecSliceIntfR) + fn([]string(nil), (*decoderMsgpackBytes).fastpathDecSliceStringR) + fn([][]byte(nil), (*decoderMsgpackBytes).fastpathDecSliceBytesR) + fn([]float32(nil), (*decoderMsgpackBytes).fastpathDecSliceFloat32R) + fn([]float64(nil), (*decoderMsgpackBytes).fastpathDecSliceFloat64R) + fn([]uint8(nil), (*decoderMsgpackBytes).fastpathDecSliceUint8R) + fn([]uint64(nil), (*decoderMsgpackBytes).fastpathDecSliceUint64R) + fn([]int(nil), (*decoderMsgpackBytes).fastpathDecSliceIntR) + fn([]int32(nil), (*decoderMsgpackBytes).fastpathDecSliceInt32R) + fn([]int64(nil), (*decoderMsgpackBytes).fastpathDecSliceInt64R) + fn([]bool(nil), (*decoderMsgpackBytes).fastpathDecSliceBoolR) + + fn(map[string]interface{}(nil), (*decoderMsgpackBytes).fastpathDecMapStringIntfR) + fn(map[string]string(nil), (*decoderMsgpackBytes).fastpathDecMapStringStringR) + fn(map[string][]byte(nil), (*decoderMsgpackBytes).fastpathDecMapStringBytesR) + fn(map[string]uint8(nil), (*decoderMsgpackBytes).fastpathDecMapStringUint8R) + fn(map[string]uint64(nil), (*decoderMsgpackBytes).fastpathDecMapStringUint64R) + fn(map[string]int(nil), (*decoderMsgpackBytes).fastpathDecMapStringIntR) + fn(map[string]int32(nil), (*decoderMsgpackBytes).fastpathDecMapStringInt32R) + fn(map[string]float64(nil), (*decoderMsgpackBytes).fastpathDecMapStringFloat64R) + fn(map[string]bool(nil), (*decoderMsgpackBytes).fastpathDecMapStringBoolR) + fn(map[uint8]interface{}(nil), (*decoderMsgpackBytes).fastpathDecMapUint8IntfR) + fn(map[uint8]string(nil), (*decoderMsgpackBytes).fastpathDecMapUint8StringR) + fn(map[uint8][]byte(nil), (*decoderMsgpackBytes).fastpathDecMapUint8BytesR) + fn(map[uint8]uint8(nil), (*decoderMsgpackBytes).fastpathDecMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*decoderMsgpackBytes).fastpathDecMapUint8Uint64R) + fn(map[uint8]int(nil), (*decoderMsgpackBytes).fastpathDecMapUint8IntR) + fn(map[uint8]int32(nil), (*decoderMsgpackBytes).fastpathDecMapUint8Int32R) + fn(map[uint8]float64(nil), (*decoderMsgpackBytes).fastpathDecMapUint8Float64R) + fn(map[uint8]bool(nil), (*decoderMsgpackBytes).fastpathDecMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*decoderMsgpackBytes).fastpathDecMapUint64IntfR) + fn(map[uint64]string(nil), (*decoderMsgpackBytes).fastpathDecMapUint64StringR) + fn(map[uint64][]byte(nil), (*decoderMsgpackBytes).fastpathDecMapUint64BytesR) + fn(map[uint64]uint8(nil), (*decoderMsgpackBytes).fastpathDecMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*decoderMsgpackBytes).fastpathDecMapUint64Uint64R) + fn(map[uint64]int(nil), (*decoderMsgpackBytes).fastpathDecMapUint64IntR) + fn(map[uint64]int32(nil), (*decoderMsgpackBytes).fastpathDecMapUint64Int32R) + fn(map[uint64]float64(nil), (*decoderMsgpackBytes).fastpathDecMapUint64Float64R) + fn(map[uint64]bool(nil), (*decoderMsgpackBytes).fastpathDecMapUint64BoolR) + fn(map[int]interface{}(nil), (*decoderMsgpackBytes).fastpathDecMapIntIntfR) + fn(map[int]string(nil), (*decoderMsgpackBytes).fastpathDecMapIntStringR) + fn(map[int][]byte(nil), (*decoderMsgpackBytes).fastpathDecMapIntBytesR) + fn(map[int]uint8(nil), (*decoderMsgpackBytes).fastpathDecMapIntUint8R) + fn(map[int]uint64(nil), (*decoderMsgpackBytes).fastpathDecMapIntUint64R) + fn(map[int]int(nil), (*decoderMsgpackBytes).fastpathDecMapIntIntR) + fn(map[int]int32(nil), (*decoderMsgpackBytes).fastpathDecMapIntInt32R) + fn(map[int]float64(nil), (*decoderMsgpackBytes).fastpathDecMapIntFloat64R) + fn(map[int]bool(nil), (*decoderMsgpackBytes).fastpathDecMapIntBoolR) + fn(map[int32]interface{}(nil), (*decoderMsgpackBytes).fastpathDecMapInt32IntfR) + fn(map[int32]string(nil), (*decoderMsgpackBytes).fastpathDecMapInt32StringR) + fn(map[int32][]byte(nil), (*decoderMsgpackBytes).fastpathDecMapInt32BytesR) + fn(map[int32]uint8(nil), (*decoderMsgpackBytes).fastpathDecMapInt32Uint8R) + fn(map[int32]uint64(nil), (*decoderMsgpackBytes).fastpathDecMapInt32Uint64R) + fn(map[int32]int(nil), (*decoderMsgpackBytes).fastpathDecMapInt32IntR) + fn(map[int32]int32(nil), (*decoderMsgpackBytes).fastpathDecMapInt32Int32R) + fn(map[int32]float64(nil), (*decoderMsgpackBytes).fastpathDecMapInt32Float64R) + fn(map[int32]bool(nil), (*decoderMsgpackBytes).fastpathDecMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperEncDriverMsgpackBytes) fastpathEncodeTypeSwitch(iv interface{}, e *encoderMsgpackBytes) bool { + var ft fastpathETMsgpackBytes + switch v := iv.(type) { + case []interface{}: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntfV(v, e) + } + case []string: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceStringV(v, e) + } + case [][]byte: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBytesV(v, e) + } + case []float32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat32V(v, e) + } + case []float64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat64V(v, e) + } + case []uint8: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint8V(v, e) + } + case []uint64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint64V(v, e) + } + case []int: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntV(v, e) + } + case []int32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt32V(v, e) + } + case []int64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt64V(v, e) + } + case []bool: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBoolV(v, e) + } + case map[string]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntfV(v, e) + } + case map[string]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringStringV(v, e) + } + case map[string][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBytesV(v, e) + } + case map[string]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint8V(v, e) + } + case map[string]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint64V(v, e) + } + case map[string]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntV(v, e) + } + case map[string]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringInt32V(v, e) + } + case map[string]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringFloat64V(v, e) + } + case map[string]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBoolV(v, e) + } + case map[uint8]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntfV(v, e) + } + case map[uint8]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8StringV(v, e) + } + case map[uint8][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BytesV(v, e) + } + case map[uint8]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint8V(v, e) + } + case map[uint8]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint64V(v, e) + } + case map[uint8]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntV(v, e) + } + case map[uint8]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Int32V(v, e) + } + case map[uint8]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Float64V(v, e) + } + case map[uint8]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BoolV(v, e) + } + case map[uint64]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntfV(v, e) + } + case map[uint64]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64StringV(v, e) + } + case map[uint64][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BytesV(v, e) + } + case map[uint64]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint8V(v, e) + } + case map[uint64]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint64V(v, e) + } + case map[uint64]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntV(v, e) + } + case map[uint64]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Int32V(v, e) + } + case map[uint64]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Float64V(v, e) + } + case map[uint64]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BoolV(v, e) + } + case map[int]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntfV(v, e) + } + case map[int]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntStringV(v, e) + } + case map[int][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBytesV(v, e) + } + case map[int]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint8V(v, e) + } + case map[int]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint64V(v, e) + } + case map[int]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntV(v, e) + } + case map[int]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntInt32V(v, e) + } + case map[int]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntFloat64V(v, e) + } + case map[int]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBoolV(v, e) + } + case map[int32]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntfV(v, e) + } + case map[int32]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32StringV(v, e) + } + case map[int32][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BytesV(v, e) + } + case map[int32]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint8V(v, e) + } + case map[int32]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint64V(v, e) + } + case map[int32]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntV(v, e) + } + case map[int32]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Int32V(v, e) + } + case map[int32]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Float64V(v, e) + } + case map[int32]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BoolV(v, e) + } + default: + _ = v + return false + } + return true +} + +func (e *encoderMsgpackBytes) fastpathEncSliceIntfR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackBytes + var v []interface{} + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]interface{}) + } + if f.ti.mbs { + ft.EncAsMapSliceIntfV(v, e) + return + } + ft.EncSliceIntfV(v, e) +} +func (fastpathETMsgpackBytes) EncSliceIntfV(v []interface{}, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackBytes) EncAsMapSliceIntfV(v []interface{}, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackBytes) fastpathEncSliceStringR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackBytes + var v []string + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]string) + } + if f.ti.mbs { + ft.EncAsMapSliceStringV(v, e) + return + } + ft.EncSliceStringV(v, e) +} +func (fastpathETMsgpackBytes) EncSliceStringV(v []string, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackBytes) EncAsMapSliceStringV(v []string, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackBytes) fastpathEncSliceBytesR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackBytes + var v [][]byte + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([][]byte) + } + if f.ti.mbs { + ft.EncAsMapSliceBytesV(v, e) + return + } + ft.EncSliceBytesV(v, e) +} +func (fastpathETMsgpackBytes) EncSliceBytesV(v [][]byte, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackBytes) EncAsMapSliceBytesV(v [][]byte, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackBytes) fastpathEncSliceFloat32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackBytes + var v []float32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float32) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat32V(v, e) + return + } + ft.EncSliceFloat32V(v, e) +} +func (fastpathETMsgpackBytes) EncSliceFloat32V(v []float32, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackBytes) EncAsMapSliceFloat32V(v []float32, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackBytes) fastpathEncSliceFloat64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackBytes + var v []float64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float64) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat64V(v, e) + return + } + ft.EncSliceFloat64V(v, e) +} +func (fastpathETMsgpackBytes) EncSliceFloat64V(v []float64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackBytes) EncAsMapSliceFloat64V(v []float64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackBytes) fastpathEncSliceUint8R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackBytes + var v []uint8 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint8) + } + if f.ti.mbs { + ft.EncAsMapSliceUint8V(v, e) + return + } + ft.EncSliceUint8V(v, e) +} +func (fastpathETMsgpackBytes) EncSliceUint8V(v []uint8, e *encoderMsgpackBytes) { + e.e.EncodeStringBytesRaw(v) +} +func (fastpathETMsgpackBytes) EncAsMapSliceUint8V(v []uint8, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(uint64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackBytes) fastpathEncSliceUint64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackBytes + var v []uint64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint64) + } + if f.ti.mbs { + ft.EncAsMapSliceUint64V(v, e) + return + } + ft.EncSliceUint64V(v, e) +} +func (fastpathETMsgpackBytes) EncSliceUint64V(v []uint64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackBytes) EncAsMapSliceUint64V(v []uint64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackBytes) fastpathEncSliceIntR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackBytes + var v []int + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int) + } + if f.ti.mbs { + ft.EncAsMapSliceIntV(v, e) + return + } + ft.EncSliceIntV(v, e) +} +func (fastpathETMsgpackBytes) EncSliceIntV(v []int, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackBytes) EncAsMapSliceIntV(v []int, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackBytes) fastpathEncSliceInt32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackBytes + var v []int32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int32) + } + if f.ti.mbs { + ft.EncAsMapSliceInt32V(v, e) + return + } + ft.EncSliceInt32V(v, e) +} +func (fastpathETMsgpackBytes) EncSliceInt32V(v []int32, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackBytes) EncAsMapSliceInt32V(v []int32, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackBytes) fastpathEncSliceInt64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackBytes + var v []int64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int64) + } + if f.ti.mbs { + ft.EncAsMapSliceInt64V(v, e) + return + } + ft.EncSliceInt64V(v, e) +} +func (fastpathETMsgpackBytes) EncSliceInt64V(v []int64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackBytes) EncAsMapSliceInt64V(v []int64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackBytes) fastpathEncSliceBoolR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackBytes + var v []bool + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]bool) + } + if f.ti.mbs { + ft.EncAsMapSliceBoolV(v, e) + return + } + ft.EncSliceBoolV(v, e) +} +func (fastpathETMsgpackBytes) EncSliceBoolV(v []bool, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackBytes) EncAsMapSliceBoolV(v []bool, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackBytes) fastpathEncMapStringIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapStringIntfV(rv2i(rv).(map[string]interface{}), e) +} +func (fastpathETMsgpackBytes) EncMapStringIntfV(v map[string]interface{}, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapStringStringR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapStringStringV(rv2i(rv).(map[string]string), e) +} +func (fastpathETMsgpackBytes) EncMapStringStringV(v map[string]string, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapStringBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapStringBytesV(rv2i(rv).(map[string][]byte), e) +} +func (fastpathETMsgpackBytes) EncMapStringBytesV(v map[string][]byte, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapStringUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapStringUint8V(rv2i(rv).(map[string]uint8), e) +} +func (fastpathETMsgpackBytes) EncMapStringUint8V(v map[string]uint8, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapStringUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapStringUint64V(rv2i(rv).(map[string]uint64), e) +} +func (fastpathETMsgpackBytes) EncMapStringUint64V(v map[string]uint64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapStringIntR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapStringIntV(rv2i(rv).(map[string]int), e) +} +func (fastpathETMsgpackBytes) EncMapStringIntV(v map[string]int, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapStringInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapStringInt32V(rv2i(rv).(map[string]int32), e) +} +func (fastpathETMsgpackBytes) EncMapStringInt32V(v map[string]int32, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapStringFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapStringFloat64V(rv2i(rv).(map[string]float64), e) +} +func (fastpathETMsgpackBytes) EncMapStringFloat64V(v map[string]float64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapStringBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapStringBoolV(rv2i(rv).(map[string]bool), e) +} +func (fastpathETMsgpackBytes) EncMapStringBoolV(v map[string]bool, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint8IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), e) +} +func (fastpathETMsgpackBytes) EncMapUint8IntfV(v map[uint8]interface{}, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint8StringR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint8StringV(rv2i(rv).(map[uint8]string), e) +} +func (fastpathETMsgpackBytes) EncMapUint8StringV(v map[uint8]string, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint8BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint8BytesV(rv2i(rv).(map[uint8][]byte), e) +} +func (fastpathETMsgpackBytes) EncMapUint8BytesV(v map[uint8][]byte, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint8Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), e) +} +func (fastpathETMsgpackBytes) EncMapUint8Uint8V(v map[uint8]uint8, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint8Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), e) +} +func (fastpathETMsgpackBytes) EncMapUint8Uint64V(v map[uint8]uint64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint8IntR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint8IntV(rv2i(rv).(map[uint8]int), e) +} +func (fastpathETMsgpackBytes) EncMapUint8IntV(v map[uint8]int, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint8Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint8Int32V(rv2i(rv).(map[uint8]int32), e) +} +func (fastpathETMsgpackBytes) EncMapUint8Int32V(v map[uint8]int32, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint8Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint8Float64V(rv2i(rv).(map[uint8]float64), e) +} +func (fastpathETMsgpackBytes) EncMapUint8Float64V(v map[uint8]float64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint8BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint8BoolV(rv2i(rv).(map[uint8]bool), e) +} +func (fastpathETMsgpackBytes) EncMapUint8BoolV(v map[uint8]bool, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint64IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), e) +} +func (fastpathETMsgpackBytes) EncMapUint64IntfV(v map[uint64]interface{}, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint64StringR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint64StringV(rv2i(rv).(map[uint64]string), e) +} +func (fastpathETMsgpackBytes) EncMapUint64StringV(v map[uint64]string, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint64BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint64BytesV(rv2i(rv).(map[uint64][]byte), e) +} +func (fastpathETMsgpackBytes) EncMapUint64BytesV(v map[uint64][]byte, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint64Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), e) +} +func (fastpathETMsgpackBytes) EncMapUint64Uint8V(v map[uint64]uint8, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint64Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), e) +} +func (fastpathETMsgpackBytes) EncMapUint64Uint64V(v map[uint64]uint64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint64IntR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint64IntV(rv2i(rv).(map[uint64]int), e) +} +func (fastpathETMsgpackBytes) EncMapUint64IntV(v map[uint64]int, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint64Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint64Int32V(rv2i(rv).(map[uint64]int32), e) +} +func (fastpathETMsgpackBytes) EncMapUint64Int32V(v map[uint64]int32, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint64Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint64Float64V(rv2i(rv).(map[uint64]float64), e) +} +func (fastpathETMsgpackBytes) EncMapUint64Float64V(v map[uint64]float64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapUint64BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapUint64BoolV(rv2i(rv).(map[uint64]bool), e) +} +func (fastpathETMsgpackBytes) EncMapUint64BoolV(v map[uint64]bool, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapIntIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapIntIntfV(rv2i(rv).(map[int]interface{}), e) +} +func (fastpathETMsgpackBytes) EncMapIntIntfV(v map[int]interface{}, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapIntStringR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapIntStringV(rv2i(rv).(map[int]string), e) +} +func (fastpathETMsgpackBytes) EncMapIntStringV(v map[int]string, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapIntBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapIntBytesV(rv2i(rv).(map[int][]byte), e) +} +func (fastpathETMsgpackBytes) EncMapIntBytesV(v map[int][]byte, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapIntUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapIntUint8V(rv2i(rv).(map[int]uint8), e) +} +func (fastpathETMsgpackBytes) EncMapIntUint8V(v map[int]uint8, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapIntUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapIntUint64V(rv2i(rv).(map[int]uint64), e) +} +func (fastpathETMsgpackBytes) EncMapIntUint64V(v map[int]uint64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapIntIntR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapIntIntV(rv2i(rv).(map[int]int), e) +} +func (fastpathETMsgpackBytes) EncMapIntIntV(v map[int]int, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapIntInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapIntInt32V(rv2i(rv).(map[int]int32), e) +} +func (fastpathETMsgpackBytes) EncMapIntInt32V(v map[int]int32, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapIntFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapIntFloat64V(rv2i(rv).(map[int]float64), e) +} +func (fastpathETMsgpackBytes) EncMapIntFloat64V(v map[int]float64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapIntBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapIntBoolV(rv2i(rv).(map[int]bool), e) +} +func (fastpathETMsgpackBytes) EncMapIntBoolV(v map[int]bool, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapInt32IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapInt32IntfV(rv2i(rv).(map[int32]interface{}), e) +} +func (fastpathETMsgpackBytes) EncMapInt32IntfV(v map[int32]interface{}, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapInt32StringR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapInt32StringV(rv2i(rv).(map[int32]string), e) +} +func (fastpathETMsgpackBytes) EncMapInt32StringV(v map[int32]string, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapInt32BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapInt32BytesV(rv2i(rv).(map[int32][]byte), e) +} +func (fastpathETMsgpackBytes) EncMapInt32BytesV(v map[int32][]byte, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapInt32Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapInt32Uint8V(rv2i(rv).(map[int32]uint8), e) +} +func (fastpathETMsgpackBytes) EncMapInt32Uint8V(v map[int32]uint8, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapInt32Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapInt32Uint64V(rv2i(rv).(map[int32]uint64), e) +} +func (fastpathETMsgpackBytes) EncMapInt32Uint64V(v map[int32]uint64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapInt32IntR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapInt32IntV(rv2i(rv).(map[int32]int), e) +} +func (fastpathETMsgpackBytes) EncMapInt32IntV(v map[int32]int, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapInt32Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapInt32Int32V(rv2i(rv).(map[int32]int32), e) +} +func (fastpathETMsgpackBytes) EncMapInt32Int32V(v map[int32]int32, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapInt32Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapInt32Float64V(rv2i(rv).(map[int32]float64), e) +} +func (fastpathETMsgpackBytes) EncMapInt32Float64V(v map[int32]float64, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackBytes) fastpathEncMapInt32BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackBytes{}.EncMapInt32BoolV(rv2i(rv).(map[int32]bool), e) +} +func (fastpathETMsgpackBytes) EncMapInt32BoolV(v map[int32]bool, e *encoderMsgpackBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (helperDecDriverMsgpackBytes) fastpathDecodeTypeSwitch(iv interface{}, d *decoderMsgpackBytes) bool { + var ft fastpathDTMsgpackBytes + var changed bool + var containerLen int + switch v := iv.(type) { + case []interface{}: + ft.DecSliceIntfN(v, d) + case *[]interface{}: + var v2 []interface{} + if v2, changed = ft.DecSliceIntfY(*v, d); changed { + *v = v2 + } + case []string: + ft.DecSliceStringN(v, d) + case *[]string: + var v2 []string + if v2, changed = ft.DecSliceStringY(*v, d); changed { + *v = v2 + } + case [][]byte: + ft.DecSliceBytesN(v, d) + case *[][]byte: + var v2 [][]byte + if v2, changed = ft.DecSliceBytesY(*v, d); changed { + *v = v2 + } + case []float32: + ft.DecSliceFloat32N(v, d) + case *[]float32: + var v2 []float32 + if v2, changed = ft.DecSliceFloat32Y(*v, d); changed { + *v = v2 + } + case []float64: + ft.DecSliceFloat64N(v, d) + case *[]float64: + var v2 []float64 + if v2, changed = ft.DecSliceFloat64Y(*v, d); changed { + *v = v2 + } + case []uint8: + ft.DecSliceUint8N(v, d) + case *[]uint8: + var v2 []uint8 + if v2, changed = ft.DecSliceUint8Y(*v, d); changed { + *v = v2 + } + case []uint64: + ft.DecSliceUint64N(v, d) + case *[]uint64: + var v2 []uint64 + if v2, changed = ft.DecSliceUint64Y(*v, d); changed { + *v = v2 + } + case []int: + ft.DecSliceIntN(v, d) + case *[]int: + var v2 []int + if v2, changed = ft.DecSliceIntY(*v, d); changed { + *v = v2 + } + case []int32: + ft.DecSliceInt32N(v, d) + case *[]int32: + var v2 []int32 + if v2, changed = ft.DecSliceInt32Y(*v, d); changed { + *v = v2 + } + case []int64: + ft.DecSliceInt64N(v, d) + case *[]int64: + var v2 []int64 + if v2, changed = ft.DecSliceInt64Y(*v, d); changed { + *v = v2 + } + case []bool: + ft.DecSliceBoolN(v, d) + case *[]bool: + var v2 []bool + if v2, changed = ft.DecSliceBoolY(*v, d); changed { + *v = v2 + } + case map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*v, containerLen, d) + } + d.mapEnd() + } + default: + _ = v + return false + } + return true +} + +func (d *decoderMsgpackBytes) fastpathDecSliceIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]interface{}) + if vv, changed := ft.DecSliceIntfY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []interface{} + rvGetSlice4Array(rv, &v) + ft.DecSliceIntfN(v, d) + default: + ft.DecSliceIntfN(rv2i(rv).([]interface{}), d) + } +} +func (fastpathDTMsgpackBytes) DecSliceIntfY(v []interface{}, d *decoderMsgpackBytes) (v2 []interface{}, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []interface{}) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]interface{}, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + d.decode(&v[uint(j)]) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]interface{}{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackBytes) DecSliceIntfN(v []interface{}, d *decoderMsgpackBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + d.decode(&v[uint(j)]) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackBytes) fastpathDecSliceStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]string) + if vv, changed := ft.DecSliceStringY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []string + rvGetSlice4Array(rv, &v) + ft.DecSliceStringN(v, d) + default: + ft.DecSliceStringN(rv2i(rv).([]string), d) + } +} +func (fastpathDTMsgpackBytes) DecSliceStringY(v []string, d *decoderMsgpackBytes) (v2 []string, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []string) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]string, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, "")) + } + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]string{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackBytes) DecSliceStringN(v []string, d *decoderMsgpackBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackBytes) fastpathDecSliceBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[][]byte) + if vv, changed := ft.DecSliceBytesY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v [][]byte + rvGetSlice4Array(rv, &v) + ft.DecSliceBytesN(v, d) + default: + ft.DecSliceBytesN(rv2i(rv).([][]byte), d) + } +} +func (fastpathDTMsgpackBytes) DecSliceBytesY(v [][]byte, d *decoderMsgpackBytes) (v2 [][]byte, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst [][]byte) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 24)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([][]byte, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([][]byte{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackBytes) DecSliceBytesN(v [][]byte, d *decoderMsgpackBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackBytes) fastpathDecSliceFloat32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float32) + if vv, changed := ft.DecSliceFloat32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float32 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat32N(v, d) + default: + ft.DecSliceFloat32N(rv2i(rv).([]float32), d) + } +} +func (fastpathDTMsgpackBytes) DecSliceFloat32Y(v []float32, d *decoderMsgpackBytes) (v2 []float32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = float32(d.d.DecodeFloat32()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackBytes) DecSliceFloat32N(v []float32, d *decoderMsgpackBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = float32(d.d.DecodeFloat32()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackBytes) fastpathDecSliceFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float64) + if vv, changed := ft.DecSliceFloat64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float64 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat64N(v, d) + default: + ft.DecSliceFloat64N(rv2i(rv).([]float64), d) + } +} +func (fastpathDTMsgpackBytes) DecSliceFloat64Y(v []float64, d *decoderMsgpackBytes) (v2 []float64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeFloat64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackBytes) DecSliceFloat64N(v []float64, d *decoderMsgpackBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeFloat64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackBytes) fastpathDecSliceUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint8) + if vv, changed := ft.DecSliceUint8Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint8 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint8N(v, d) + default: + ft.DecSliceUint8N(rv2i(rv).([]uint8), d) + } +} +func (fastpathDTMsgpackBytes) DecSliceUint8Y(v []uint8, d *decoderMsgpackBytes) (v2 []uint8, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + if ctyp != valueTypeMap { + var dbi dBytesIntoState + v2, dbi = d.decodeBytesInto(v[:len(v):len(v)], false) + return v2, dbi != dBytesIntoParamOut + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint8) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint8, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint8{}) + } + d.mapEnd() + return v, changed +} +func (fastpathDTMsgpackBytes) DecSliceUint8N(v []uint8, d *decoderMsgpackBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + if ctyp != valueTypeMap { + d.decodeBytesInto(v[:len(v):len(v)], true) + return + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + d.mapEnd() +} + +func (d *decoderMsgpackBytes) fastpathDecSliceUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint64) + if vv, changed := ft.DecSliceUint64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint64 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint64N(v, d) + default: + ft.DecSliceUint64N(rv2i(rv).([]uint64), d) + } +} +func (fastpathDTMsgpackBytes) DecSliceUint64Y(v []uint64, d *decoderMsgpackBytes) (v2 []uint64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeUint64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackBytes) DecSliceUint64N(v []uint64, d *decoderMsgpackBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeUint64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackBytes) fastpathDecSliceIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int) + if vv, changed := ft.DecSliceIntY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int + rvGetSlice4Array(rv, &v) + ft.DecSliceIntN(v, d) + default: + ft.DecSliceIntN(rv2i(rv).([]int), d) + } +} +func (fastpathDTMsgpackBytes) DecSliceIntY(v []int, d *decoderMsgpackBytes) (v2 []int, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackBytes) DecSliceIntN(v []int, d *decoderMsgpackBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackBytes) fastpathDecSliceInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int32) + if vv, changed := ft.DecSliceInt32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int32 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt32N(v, d) + default: + ft.DecSliceInt32N(rv2i(rv).([]int32), d) + } +} +func (fastpathDTMsgpackBytes) DecSliceInt32Y(v []int32, d *decoderMsgpackBytes) (v2 []int32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackBytes) DecSliceInt32N(v []int32, d *decoderMsgpackBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackBytes) fastpathDecSliceInt64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int64) + if vv, changed := ft.DecSliceInt64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int64 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt64N(v, d) + default: + ft.DecSliceInt64N(rv2i(rv).([]int64), d) + } +} +func (fastpathDTMsgpackBytes) DecSliceInt64Y(v []int64, d *decoderMsgpackBytes) (v2 []int64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeInt64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackBytes) DecSliceInt64N(v []int64, d *decoderMsgpackBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeInt64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackBytes) fastpathDecSliceBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]bool) + if vv, changed := ft.DecSliceBoolY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []bool + rvGetSlice4Array(rv, &v) + ft.DecSliceBoolN(v, d) + default: + ft.DecSliceBoolN(rv2i(rv).([]bool), d) + } +} +func (fastpathDTMsgpackBytes) DecSliceBoolY(v []bool, d *decoderMsgpackBytes) (v2 []bool, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []bool) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]bool, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, false)) + } + v[uint(j)] = d.d.DecodeBool() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]bool{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackBytes) DecSliceBoolN(v []bool, d *decoderMsgpackBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeBool() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} +func (d *decoderMsgpackBytes) fastpathDecMapStringIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]interface{}) + if *vp == nil { + *vp = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntfL(rv2i(rv).(map[string]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapStringIntfL(v map[string]interface{}, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderMsgpackBytes) fastpathDecMapStringStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]string) + if *vp == nil { + *vp = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringStringL(rv2i(rv).(map[string]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapStringStringL(v map[string]string, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapStringBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string][]byte) + if *vp == nil { + *vp = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBytesL(rv2i(rv).(map[string][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapStringBytesL(v map[string][]byte, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapStringUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint8) + if *vp == nil { + *vp = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint8L(rv2i(rv).(map[string]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapStringUint8L(v map[string]uint8, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapStringUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint64) + if *vp == nil { + *vp = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint64L(rv2i(rv).(map[string]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapStringUint64L(v map[string]uint64, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderMsgpackBytes) fastpathDecMapStringIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int) + if *vp == nil { + *vp = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntL(rv2i(rv).(map[string]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapStringIntL(v map[string]int, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapStringInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int32) + if *vp == nil { + *vp = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringInt32L(rv2i(rv).(map[string]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapStringInt32L(v map[string]int32, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapStringFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]float64) + if *vp == nil { + *vp = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringFloat64L(rv2i(rv).(map[string]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapStringFloat64L(v map[string]float64, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderMsgpackBytes) fastpathDecMapStringBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]bool) + if *vp == nil { + *vp = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBoolL(rv2i(rv).(map[string]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapStringBoolL(v map[string]bool, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint8IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]interface{}) + if *vp == nil { + *vp = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntfL(rv2i(rv).(map[uint8]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint8IntfL(v map[uint8]interface{}, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint8StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]string) + if *vp == nil { + *vp = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8StringL(rv2i(rv).(map[uint8]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint8StringL(v map[uint8]string, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint8BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8][]byte) + if *vp == nil { + *vp = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BytesL(rv2i(rv).(map[uint8][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint8BytesL(v map[uint8][]byte, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint8Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint8) + if *vp == nil { + *vp = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint8L(rv2i(rv).(map[uint8]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint8Uint8L(v map[uint8]uint8, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint8Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint64) + if *vp == nil { + *vp = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint64L(rv2i(rv).(map[uint8]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint8Uint64L(v map[uint8]uint64, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint8IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int) + if *vp == nil { + *vp = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntL(rv2i(rv).(map[uint8]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint8IntL(v map[uint8]int, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint8Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int32) + if *vp == nil { + *vp = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Int32L(rv2i(rv).(map[uint8]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint8Int32L(v map[uint8]int32, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint8Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]float64) + if *vp == nil { + *vp = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Float64L(rv2i(rv).(map[uint8]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint8Float64L(v map[uint8]float64, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint8BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]bool) + if *vp == nil { + *vp = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BoolL(rv2i(rv).(map[uint8]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint8BoolL(v map[uint8]bool, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint64IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]interface{}) + if *vp == nil { + *vp = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntfL(rv2i(rv).(map[uint64]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint64IntfL(v map[uint64]interface{}, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint64StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]string) + if *vp == nil { + *vp = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64StringL(rv2i(rv).(map[uint64]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint64StringL(v map[uint64]string, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint64BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64][]byte) + if *vp == nil { + *vp = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BytesL(rv2i(rv).(map[uint64][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint64BytesL(v map[uint64][]byte, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint64Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint8) + if *vp == nil { + *vp = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint8L(rv2i(rv).(map[uint64]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint64Uint8L(v map[uint64]uint8, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint64Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint64) + if *vp == nil { + *vp = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint64L(rv2i(rv).(map[uint64]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint64Uint64L(v map[uint64]uint64, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint64IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int) + if *vp == nil { + *vp = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntL(rv2i(rv).(map[uint64]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint64IntL(v map[uint64]int, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint64Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int32) + if *vp == nil { + *vp = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Int32L(rv2i(rv).(map[uint64]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint64Int32L(v map[uint64]int32, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint64Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]float64) + if *vp == nil { + *vp = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Float64L(rv2i(rv).(map[uint64]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint64Float64L(v map[uint64]float64, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderMsgpackBytes) fastpathDecMapUint64BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]bool) + if *vp == nil { + *vp = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BoolL(rv2i(rv).(map[uint64]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapUint64BoolL(v map[uint64]bool, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderMsgpackBytes) fastpathDecMapIntIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]interface{}) + if *vp == nil { + *vp = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntfL(rv2i(rv).(map[int]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapIntIntfL(v map[int]interface{}, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderMsgpackBytes) fastpathDecMapIntStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]string) + if *vp == nil { + *vp = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntStringL(rv2i(rv).(map[int]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapIntStringL(v map[int]string, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapIntBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int][]byte) + if *vp == nil { + *vp = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBytesL(rv2i(rv).(map[int][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapIntBytesL(v map[int][]byte, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapIntUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint8) + if *vp == nil { + *vp = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint8L(rv2i(rv).(map[int]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapIntUint8L(v map[int]uint8, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapIntUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint64) + if *vp == nil { + *vp = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint64L(rv2i(rv).(map[int]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapIntUint64L(v map[int]uint64, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderMsgpackBytes) fastpathDecMapIntIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int) + if *vp == nil { + *vp = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntL(rv2i(rv).(map[int]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapIntIntL(v map[int]int, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapIntInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int32) + if *vp == nil { + *vp = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntInt32L(rv2i(rv).(map[int]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapIntInt32L(v map[int]int32, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapIntFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]float64) + if *vp == nil { + *vp = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntFloat64L(rv2i(rv).(map[int]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapIntFloat64L(v map[int]float64, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderMsgpackBytes) fastpathDecMapIntBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]bool) + if *vp == nil { + *vp = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBoolL(rv2i(rv).(map[int]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapIntBoolL(v map[int]bool, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderMsgpackBytes) fastpathDecMapInt32IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]interface{}) + if *vp == nil { + *vp = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntfL(rv2i(rv).(map[int32]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapInt32IntfL(v map[int32]interface{}, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderMsgpackBytes) fastpathDecMapInt32StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]string) + if *vp == nil { + *vp = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32StringL(rv2i(rv).(map[int32]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapInt32StringL(v map[int32]string, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapInt32BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32][]byte) + if *vp == nil { + *vp = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BytesL(rv2i(rv).(map[int32][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapInt32BytesL(v map[int32][]byte, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapInt32Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint8) + if *vp == nil { + *vp = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint8L(rv2i(rv).(map[int32]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapInt32Uint8L(v map[int32]uint8, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapInt32Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint64) + if *vp == nil { + *vp = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint64L(rv2i(rv).(map[int32]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapInt32Uint64L(v map[int32]uint64, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderMsgpackBytes) fastpathDecMapInt32IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int) + if *vp == nil { + *vp = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntL(rv2i(rv).(map[int32]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapInt32IntL(v map[int32]int, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapInt32Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int32) + if *vp == nil { + *vp = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Int32L(rv2i(rv).(map[int32]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapInt32Int32L(v map[int32]int32, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderMsgpackBytes) fastpathDecMapInt32Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]float64) + if *vp == nil { + *vp = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Float64L(rv2i(rv).(map[int32]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapInt32Float64L(v map[int32]float64, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderMsgpackBytes) fastpathDecMapInt32BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]bool) + if *vp == nil { + *vp = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BoolL(rv2i(rv).(map[int32]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackBytes) DecMapInt32BoolL(v map[int32]bool, containerLen int, d *decoderMsgpackBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} + +type fastpathEMsgpackIO struct { + rtid uintptr + rt reflect.Type + encfn func(*encoderMsgpackIO, *encFnInfo, reflect.Value) +} +type fastpathDMsgpackIO struct { + rtid uintptr + rt reflect.Type + decfn func(*decoderMsgpackIO, *decFnInfo, reflect.Value) +} +type fastpathEsMsgpackIO [56]fastpathEMsgpackIO +type fastpathDsMsgpackIO [56]fastpathDMsgpackIO +type fastpathETMsgpackIO struct{} +type fastpathDTMsgpackIO struct{} + +func (helperEncDriverMsgpackIO) fastpathEList() *fastpathEsMsgpackIO { + var i uint = 0 + var s fastpathEsMsgpackIO + fn := func(v interface{}, fe func(*encoderMsgpackIO, *encFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathEMsgpackIO{rt2id(xrt), xrt, fe} + i++ + } + + fn([]interface{}(nil), (*encoderMsgpackIO).fastpathEncSliceIntfR) + fn([]string(nil), (*encoderMsgpackIO).fastpathEncSliceStringR) + fn([][]byte(nil), (*encoderMsgpackIO).fastpathEncSliceBytesR) + fn([]float32(nil), (*encoderMsgpackIO).fastpathEncSliceFloat32R) + fn([]float64(nil), (*encoderMsgpackIO).fastpathEncSliceFloat64R) + fn([]uint8(nil), (*encoderMsgpackIO).fastpathEncSliceUint8R) + fn([]uint64(nil), (*encoderMsgpackIO).fastpathEncSliceUint64R) + fn([]int(nil), (*encoderMsgpackIO).fastpathEncSliceIntR) + fn([]int32(nil), (*encoderMsgpackIO).fastpathEncSliceInt32R) + fn([]int64(nil), (*encoderMsgpackIO).fastpathEncSliceInt64R) + fn([]bool(nil), (*encoderMsgpackIO).fastpathEncSliceBoolR) + + fn(map[string]interface{}(nil), (*encoderMsgpackIO).fastpathEncMapStringIntfR) + fn(map[string]string(nil), (*encoderMsgpackIO).fastpathEncMapStringStringR) + fn(map[string][]byte(nil), (*encoderMsgpackIO).fastpathEncMapStringBytesR) + fn(map[string]uint8(nil), (*encoderMsgpackIO).fastpathEncMapStringUint8R) + fn(map[string]uint64(nil), (*encoderMsgpackIO).fastpathEncMapStringUint64R) + fn(map[string]int(nil), (*encoderMsgpackIO).fastpathEncMapStringIntR) + fn(map[string]int32(nil), (*encoderMsgpackIO).fastpathEncMapStringInt32R) + fn(map[string]float64(nil), (*encoderMsgpackIO).fastpathEncMapStringFloat64R) + fn(map[string]bool(nil), (*encoderMsgpackIO).fastpathEncMapStringBoolR) + fn(map[uint8]interface{}(nil), (*encoderMsgpackIO).fastpathEncMapUint8IntfR) + fn(map[uint8]string(nil), (*encoderMsgpackIO).fastpathEncMapUint8StringR) + fn(map[uint8][]byte(nil), (*encoderMsgpackIO).fastpathEncMapUint8BytesR) + fn(map[uint8]uint8(nil), (*encoderMsgpackIO).fastpathEncMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*encoderMsgpackIO).fastpathEncMapUint8Uint64R) + fn(map[uint8]int(nil), (*encoderMsgpackIO).fastpathEncMapUint8IntR) + fn(map[uint8]int32(nil), (*encoderMsgpackIO).fastpathEncMapUint8Int32R) + fn(map[uint8]float64(nil), (*encoderMsgpackIO).fastpathEncMapUint8Float64R) + fn(map[uint8]bool(nil), (*encoderMsgpackIO).fastpathEncMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*encoderMsgpackIO).fastpathEncMapUint64IntfR) + fn(map[uint64]string(nil), (*encoderMsgpackIO).fastpathEncMapUint64StringR) + fn(map[uint64][]byte(nil), (*encoderMsgpackIO).fastpathEncMapUint64BytesR) + fn(map[uint64]uint8(nil), (*encoderMsgpackIO).fastpathEncMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*encoderMsgpackIO).fastpathEncMapUint64Uint64R) + fn(map[uint64]int(nil), (*encoderMsgpackIO).fastpathEncMapUint64IntR) + fn(map[uint64]int32(nil), (*encoderMsgpackIO).fastpathEncMapUint64Int32R) + fn(map[uint64]float64(nil), (*encoderMsgpackIO).fastpathEncMapUint64Float64R) + fn(map[uint64]bool(nil), (*encoderMsgpackIO).fastpathEncMapUint64BoolR) + fn(map[int]interface{}(nil), (*encoderMsgpackIO).fastpathEncMapIntIntfR) + fn(map[int]string(nil), (*encoderMsgpackIO).fastpathEncMapIntStringR) + fn(map[int][]byte(nil), (*encoderMsgpackIO).fastpathEncMapIntBytesR) + fn(map[int]uint8(nil), (*encoderMsgpackIO).fastpathEncMapIntUint8R) + fn(map[int]uint64(nil), (*encoderMsgpackIO).fastpathEncMapIntUint64R) + fn(map[int]int(nil), (*encoderMsgpackIO).fastpathEncMapIntIntR) + fn(map[int]int32(nil), (*encoderMsgpackIO).fastpathEncMapIntInt32R) + fn(map[int]float64(nil), (*encoderMsgpackIO).fastpathEncMapIntFloat64R) + fn(map[int]bool(nil), (*encoderMsgpackIO).fastpathEncMapIntBoolR) + fn(map[int32]interface{}(nil), (*encoderMsgpackIO).fastpathEncMapInt32IntfR) + fn(map[int32]string(nil), (*encoderMsgpackIO).fastpathEncMapInt32StringR) + fn(map[int32][]byte(nil), (*encoderMsgpackIO).fastpathEncMapInt32BytesR) + fn(map[int32]uint8(nil), (*encoderMsgpackIO).fastpathEncMapInt32Uint8R) + fn(map[int32]uint64(nil), (*encoderMsgpackIO).fastpathEncMapInt32Uint64R) + fn(map[int32]int(nil), (*encoderMsgpackIO).fastpathEncMapInt32IntR) + fn(map[int32]int32(nil), (*encoderMsgpackIO).fastpathEncMapInt32Int32R) + fn(map[int32]float64(nil), (*encoderMsgpackIO).fastpathEncMapInt32Float64R) + fn(map[int32]bool(nil), (*encoderMsgpackIO).fastpathEncMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperDecDriverMsgpackIO) fastpathDList() *fastpathDsMsgpackIO { + var i uint = 0 + var s fastpathDsMsgpackIO + fn := func(v interface{}, fd func(*decoderMsgpackIO, *decFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathDMsgpackIO{rt2id(xrt), xrt, fd} + i++ + } + + fn([]interface{}(nil), (*decoderMsgpackIO).fastpathDecSliceIntfR) + fn([]string(nil), (*decoderMsgpackIO).fastpathDecSliceStringR) + fn([][]byte(nil), (*decoderMsgpackIO).fastpathDecSliceBytesR) + fn([]float32(nil), (*decoderMsgpackIO).fastpathDecSliceFloat32R) + fn([]float64(nil), (*decoderMsgpackIO).fastpathDecSliceFloat64R) + fn([]uint8(nil), (*decoderMsgpackIO).fastpathDecSliceUint8R) + fn([]uint64(nil), (*decoderMsgpackIO).fastpathDecSliceUint64R) + fn([]int(nil), (*decoderMsgpackIO).fastpathDecSliceIntR) + fn([]int32(nil), (*decoderMsgpackIO).fastpathDecSliceInt32R) + fn([]int64(nil), (*decoderMsgpackIO).fastpathDecSliceInt64R) + fn([]bool(nil), (*decoderMsgpackIO).fastpathDecSliceBoolR) + + fn(map[string]interface{}(nil), (*decoderMsgpackIO).fastpathDecMapStringIntfR) + fn(map[string]string(nil), (*decoderMsgpackIO).fastpathDecMapStringStringR) + fn(map[string][]byte(nil), (*decoderMsgpackIO).fastpathDecMapStringBytesR) + fn(map[string]uint8(nil), (*decoderMsgpackIO).fastpathDecMapStringUint8R) + fn(map[string]uint64(nil), (*decoderMsgpackIO).fastpathDecMapStringUint64R) + fn(map[string]int(nil), (*decoderMsgpackIO).fastpathDecMapStringIntR) + fn(map[string]int32(nil), (*decoderMsgpackIO).fastpathDecMapStringInt32R) + fn(map[string]float64(nil), (*decoderMsgpackIO).fastpathDecMapStringFloat64R) + fn(map[string]bool(nil), (*decoderMsgpackIO).fastpathDecMapStringBoolR) + fn(map[uint8]interface{}(nil), (*decoderMsgpackIO).fastpathDecMapUint8IntfR) + fn(map[uint8]string(nil), (*decoderMsgpackIO).fastpathDecMapUint8StringR) + fn(map[uint8][]byte(nil), (*decoderMsgpackIO).fastpathDecMapUint8BytesR) + fn(map[uint8]uint8(nil), (*decoderMsgpackIO).fastpathDecMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*decoderMsgpackIO).fastpathDecMapUint8Uint64R) + fn(map[uint8]int(nil), (*decoderMsgpackIO).fastpathDecMapUint8IntR) + fn(map[uint8]int32(nil), (*decoderMsgpackIO).fastpathDecMapUint8Int32R) + fn(map[uint8]float64(nil), (*decoderMsgpackIO).fastpathDecMapUint8Float64R) + fn(map[uint8]bool(nil), (*decoderMsgpackIO).fastpathDecMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*decoderMsgpackIO).fastpathDecMapUint64IntfR) + fn(map[uint64]string(nil), (*decoderMsgpackIO).fastpathDecMapUint64StringR) + fn(map[uint64][]byte(nil), (*decoderMsgpackIO).fastpathDecMapUint64BytesR) + fn(map[uint64]uint8(nil), (*decoderMsgpackIO).fastpathDecMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*decoderMsgpackIO).fastpathDecMapUint64Uint64R) + fn(map[uint64]int(nil), (*decoderMsgpackIO).fastpathDecMapUint64IntR) + fn(map[uint64]int32(nil), (*decoderMsgpackIO).fastpathDecMapUint64Int32R) + fn(map[uint64]float64(nil), (*decoderMsgpackIO).fastpathDecMapUint64Float64R) + fn(map[uint64]bool(nil), (*decoderMsgpackIO).fastpathDecMapUint64BoolR) + fn(map[int]interface{}(nil), (*decoderMsgpackIO).fastpathDecMapIntIntfR) + fn(map[int]string(nil), (*decoderMsgpackIO).fastpathDecMapIntStringR) + fn(map[int][]byte(nil), (*decoderMsgpackIO).fastpathDecMapIntBytesR) + fn(map[int]uint8(nil), (*decoderMsgpackIO).fastpathDecMapIntUint8R) + fn(map[int]uint64(nil), (*decoderMsgpackIO).fastpathDecMapIntUint64R) + fn(map[int]int(nil), (*decoderMsgpackIO).fastpathDecMapIntIntR) + fn(map[int]int32(nil), (*decoderMsgpackIO).fastpathDecMapIntInt32R) + fn(map[int]float64(nil), (*decoderMsgpackIO).fastpathDecMapIntFloat64R) + fn(map[int]bool(nil), (*decoderMsgpackIO).fastpathDecMapIntBoolR) + fn(map[int32]interface{}(nil), (*decoderMsgpackIO).fastpathDecMapInt32IntfR) + fn(map[int32]string(nil), (*decoderMsgpackIO).fastpathDecMapInt32StringR) + fn(map[int32][]byte(nil), (*decoderMsgpackIO).fastpathDecMapInt32BytesR) + fn(map[int32]uint8(nil), (*decoderMsgpackIO).fastpathDecMapInt32Uint8R) + fn(map[int32]uint64(nil), (*decoderMsgpackIO).fastpathDecMapInt32Uint64R) + fn(map[int32]int(nil), (*decoderMsgpackIO).fastpathDecMapInt32IntR) + fn(map[int32]int32(nil), (*decoderMsgpackIO).fastpathDecMapInt32Int32R) + fn(map[int32]float64(nil), (*decoderMsgpackIO).fastpathDecMapInt32Float64R) + fn(map[int32]bool(nil), (*decoderMsgpackIO).fastpathDecMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperEncDriverMsgpackIO) fastpathEncodeTypeSwitch(iv interface{}, e *encoderMsgpackIO) bool { + var ft fastpathETMsgpackIO + switch v := iv.(type) { + case []interface{}: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntfV(v, e) + } + case []string: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceStringV(v, e) + } + case [][]byte: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBytesV(v, e) + } + case []float32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat32V(v, e) + } + case []float64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat64V(v, e) + } + case []uint8: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint8V(v, e) + } + case []uint64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint64V(v, e) + } + case []int: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntV(v, e) + } + case []int32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt32V(v, e) + } + case []int64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt64V(v, e) + } + case []bool: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBoolV(v, e) + } + case map[string]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntfV(v, e) + } + case map[string]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringStringV(v, e) + } + case map[string][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBytesV(v, e) + } + case map[string]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint8V(v, e) + } + case map[string]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint64V(v, e) + } + case map[string]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntV(v, e) + } + case map[string]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringInt32V(v, e) + } + case map[string]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringFloat64V(v, e) + } + case map[string]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBoolV(v, e) + } + case map[uint8]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntfV(v, e) + } + case map[uint8]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8StringV(v, e) + } + case map[uint8][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BytesV(v, e) + } + case map[uint8]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint8V(v, e) + } + case map[uint8]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint64V(v, e) + } + case map[uint8]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntV(v, e) + } + case map[uint8]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Int32V(v, e) + } + case map[uint8]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Float64V(v, e) + } + case map[uint8]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BoolV(v, e) + } + case map[uint64]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntfV(v, e) + } + case map[uint64]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64StringV(v, e) + } + case map[uint64][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BytesV(v, e) + } + case map[uint64]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint8V(v, e) + } + case map[uint64]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint64V(v, e) + } + case map[uint64]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntV(v, e) + } + case map[uint64]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Int32V(v, e) + } + case map[uint64]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Float64V(v, e) + } + case map[uint64]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BoolV(v, e) + } + case map[int]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntfV(v, e) + } + case map[int]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntStringV(v, e) + } + case map[int][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBytesV(v, e) + } + case map[int]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint8V(v, e) + } + case map[int]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint64V(v, e) + } + case map[int]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntV(v, e) + } + case map[int]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntInt32V(v, e) + } + case map[int]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntFloat64V(v, e) + } + case map[int]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBoolV(v, e) + } + case map[int32]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntfV(v, e) + } + case map[int32]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32StringV(v, e) + } + case map[int32][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BytesV(v, e) + } + case map[int32]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint8V(v, e) + } + case map[int32]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint64V(v, e) + } + case map[int32]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntV(v, e) + } + case map[int32]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Int32V(v, e) + } + case map[int32]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Float64V(v, e) + } + case map[int32]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BoolV(v, e) + } + default: + _ = v + return false + } + return true +} + +func (e *encoderMsgpackIO) fastpathEncSliceIntfR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackIO + var v []interface{} + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]interface{}) + } + if f.ti.mbs { + ft.EncAsMapSliceIntfV(v, e) + return + } + ft.EncSliceIntfV(v, e) +} +func (fastpathETMsgpackIO) EncSliceIntfV(v []interface{}, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackIO) EncAsMapSliceIntfV(v []interface{}, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackIO) fastpathEncSliceStringR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackIO + var v []string + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]string) + } + if f.ti.mbs { + ft.EncAsMapSliceStringV(v, e) + return + } + ft.EncSliceStringV(v, e) +} +func (fastpathETMsgpackIO) EncSliceStringV(v []string, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackIO) EncAsMapSliceStringV(v []string, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackIO) fastpathEncSliceBytesR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackIO + var v [][]byte + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([][]byte) + } + if f.ti.mbs { + ft.EncAsMapSliceBytesV(v, e) + return + } + ft.EncSliceBytesV(v, e) +} +func (fastpathETMsgpackIO) EncSliceBytesV(v [][]byte, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackIO) EncAsMapSliceBytesV(v [][]byte, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackIO) fastpathEncSliceFloat32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackIO + var v []float32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float32) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat32V(v, e) + return + } + ft.EncSliceFloat32V(v, e) +} +func (fastpathETMsgpackIO) EncSliceFloat32V(v []float32, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackIO) EncAsMapSliceFloat32V(v []float32, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackIO) fastpathEncSliceFloat64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackIO + var v []float64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float64) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat64V(v, e) + return + } + ft.EncSliceFloat64V(v, e) +} +func (fastpathETMsgpackIO) EncSliceFloat64V(v []float64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackIO) EncAsMapSliceFloat64V(v []float64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackIO) fastpathEncSliceUint8R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackIO + var v []uint8 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint8) + } + if f.ti.mbs { + ft.EncAsMapSliceUint8V(v, e) + return + } + ft.EncSliceUint8V(v, e) +} +func (fastpathETMsgpackIO) EncSliceUint8V(v []uint8, e *encoderMsgpackIO) { + e.e.EncodeStringBytesRaw(v) +} +func (fastpathETMsgpackIO) EncAsMapSliceUint8V(v []uint8, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(uint64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackIO) fastpathEncSliceUint64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackIO + var v []uint64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint64) + } + if f.ti.mbs { + ft.EncAsMapSliceUint64V(v, e) + return + } + ft.EncSliceUint64V(v, e) +} +func (fastpathETMsgpackIO) EncSliceUint64V(v []uint64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackIO) EncAsMapSliceUint64V(v []uint64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackIO) fastpathEncSliceIntR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackIO + var v []int + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int) + } + if f.ti.mbs { + ft.EncAsMapSliceIntV(v, e) + return + } + ft.EncSliceIntV(v, e) +} +func (fastpathETMsgpackIO) EncSliceIntV(v []int, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackIO) EncAsMapSliceIntV(v []int, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackIO) fastpathEncSliceInt32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackIO + var v []int32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int32) + } + if f.ti.mbs { + ft.EncAsMapSliceInt32V(v, e) + return + } + ft.EncSliceInt32V(v, e) +} +func (fastpathETMsgpackIO) EncSliceInt32V(v []int32, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackIO) EncAsMapSliceInt32V(v []int32, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackIO) fastpathEncSliceInt64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackIO + var v []int64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int64) + } + if f.ti.mbs { + ft.EncAsMapSliceInt64V(v, e) + return + } + ft.EncSliceInt64V(v, e) +} +func (fastpathETMsgpackIO) EncSliceInt64V(v []int64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackIO) EncAsMapSliceInt64V(v []int64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackIO) fastpathEncSliceBoolR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETMsgpackIO + var v []bool + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]bool) + } + if f.ti.mbs { + ft.EncAsMapSliceBoolV(v, e) + return + } + ft.EncSliceBoolV(v, e) +} +func (fastpathETMsgpackIO) EncSliceBoolV(v []bool, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETMsgpackIO) EncAsMapSliceBoolV(v []bool, e *encoderMsgpackIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackIO) fastpathEncMapStringIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapStringIntfV(rv2i(rv).(map[string]interface{}), e) +} +func (fastpathETMsgpackIO) EncMapStringIntfV(v map[string]interface{}, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapStringStringR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapStringStringV(rv2i(rv).(map[string]string), e) +} +func (fastpathETMsgpackIO) EncMapStringStringV(v map[string]string, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapStringBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapStringBytesV(rv2i(rv).(map[string][]byte), e) +} +func (fastpathETMsgpackIO) EncMapStringBytesV(v map[string][]byte, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapStringUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapStringUint8V(rv2i(rv).(map[string]uint8), e) +} +func (fastpathETMsgpackIO) EncMapStringUint8V(v map[string]uint8, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapStringUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapStringUint64V(rv2i(rv).(map[string]uint64), e) +} +func (fastpathETMsgpackIO) EncMapStringUint64V(v map[string]uint64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapStringIntR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapStringIntV(rv2i(rv).(map[string]int), e) +} +func (fastpathETMsgpackIO) EncMapStringIntV(v map[string]int, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapStringInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapStringInt32V(rv2i(rv).(map[string]int32), e) +} +func (fastpathETMsgpackIO) EncMapStringInt32V(v map[string]int32, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapStringFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapStringFloat64V(rv2i(rv).(map[string]float64), e) +} +func (fastpathETMsgpackIO) EncMapStringFloat64V(v map[string]float64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapStringBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapStringBoolV(rv2i(rv).(map[string]bool), e) +} +func (fastpathETMsgpackIO) EncMapStringBoolV(v map[string]bool, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint8IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), e) +} +func (fastpathETMsgpackIO) EncMapUint8IntfV(v map[uint8]interface{}, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint8StringR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint8StringV(rv2i(rv).(map[uint8]string), e) +} +func (fastpathETMsgpackIO) EncMapUint8StringV(v map[uint8]string, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint8BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint8BytesV(rv2i(rv).(map[uint8][]byte), e) +} +func (fastpathETMsgpackIO) EncMapUint8BytesV(v map[uint8][]byte, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint8Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), e) +} +func (fastpathETMsgpackIO) EncMapUint8Uint8V(v map[uint8]uint8, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint8Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), e) +} +func (fastpathETMsgpackIO) EncMapUint8Uint64V(v map[uint8]uint64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint8IntR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint8IntV(rv2i(rv).(map[uint8]int), e) +} +func (fastpathETMsgpackIO) EncMapUint8IntV(v map[uint8]int, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint8Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint8Int32V(rv2i(rv).(map[uint8]int32), e) +} +func (fastpathETMsgpackIO) EncMapUint8Int32V(v map[uint8]int32, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint8Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint8Float64V(rv2i(rv).(map[uint8]float64), e) +} +func (fastpathETMsgpackIO) EncMapUint8Float64V(v map[uint8]float64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint8BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint8BoolV(rv2i(rv).(map[uint8]bool), e) +} +func (fastpathETMsgpackIO) EncMapUint8BoolV(v map[uint8]bool, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint64IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), e) +} +func (fastpathETMsgpackIO) EncMapUint64IntfV(v map[uint64]interface{}, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint64StringR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint64StringV(rv2i(rv).(map[uint64]string), e) +} +func (fastpathETMsgpackIO) EncMapUint64StringV(v map[uint64]string, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint64BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint64BytesV(rv2i(rv).(map[uint64][]byte), e) +} +func (fastpathETMsgpackIO) EncMapUint64BytesV(v map[uint64][]byte, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint64Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), e) +} +func (fastpathETMsgpackIO) EncMapUint64Uint8V(v map[uint64]uint8, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint64Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), e) +} +func (fastpathETMsgpackIO) EncMapUint64Uint64V(v map[uint64]uint64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint64IntR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint64IntV(rv2i(rv).(map[uint64]int), e) +} +func (fastpathETMsgpackIO) EncMapUint64IntV(v map[uint64]int, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint64Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint64Int32V(rv2i(rv).(map[uint64]int32), e) +} +func (fastpathETMsgpackIO) EncMapUint64Int32V(v map[uint64]int32, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint64Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint64Float64V(rv2i(rv).(map[uint64]float64), e) +} +func (fastpathETMsgpackIO) EncMapUint64Float64V(v map[uint64]float64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapUint64BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapUint64BoolV(rv2i(rv).(map[uint64]bool), e) +} +func (fastpathETMsgpackIO) EncMapUint64BoolV(v map[uint64]bool, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapIntIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapIntIntfV(rv2i(rv).(map[int]interface{}), e) +} +func (fastpathETMsgpackIO) EncMapIntIntfV(v map[int]interface{}, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapIntStringR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapIntStringV(rv2i(rv).(map[int]string), e) +} +func (fastpathETMsgpackIO) EncMapIntStringV(v map[int]string, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapIntBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapIntBytesV(rv2i(rv).(map[int][]byte), e) +} +func (fastpathETMsgpackIO) EncMapIntBytesV(v map[int][]byte, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapIntUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapIntUint8V(rv2i(rv).(map[int]uint8), e) +} +func (fastpathETMsgpackIO) EncMapIntUint8V(v map[int]uint8, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapIntUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapIntUint64V(rv2i(rv).(map[int]uint64), e) +} +func (fastpathETMsgpackIO) EncMapIntUint64V(v map[int]uint64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapIntIntR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapIntIntV(rv2i(rv).(map[int]int), e) +} +func (fastpathETMsgpackIO) EncMapIntIntV(v map[int]int, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapIntInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapIntInt32V(rv2i(rv).(map[int]int32), e) +} +func (fastpathETMsgpackIO) EncMapIntInt32V(v map[int]int32, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapIntFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapIntFloat64V(rv2i(rv).(map[int]float64), e) +} +func (fastpathETMsgpackIO) EncMapIntFloat64V(v map[int]float64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapIntBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapIntBoolV(rv2i(rv).(map[int]bool), e) +} +func (fastpathETMsgpackIO) EncMapIntBoolV(v map[int]bool, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapInt32IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapInt32IntfV(rv2i(rv).(map[int32]interface{}), e) +} +func (fastpathETMsgpackIO) EncMapInt32IntfV(v map[int32]interface{}, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapInt32StringR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapInt32StringV(rv2i(rv).(map[int32]string), e) +} +func (fastpathETMsgpackIO) EncMapInt32StringV(v map[int32]string, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapInt32BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapInt32BytesV(rv2i(rv).(map[int32][]byte), e) +} +func (fastpathETMsgpackIO) EncMapInt32BytesV(v map[int32][]byte, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapInt32Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapInt32Uint8V(rv2i(rv).(map[int32]uint8), e) +} +func (fastpathETMsgpackIO) EncMapInt32Uint8V(v map[int32]uint8, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapInt32Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapInt32Uint64V(rv2i(rv).(map[int32]uint64), e) +} +func (fastpathETMsgpackIO) EncMapInt32Uint64V(v map[int32]uint64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapInt32IntR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapInt32IntV(rv2i(rv).(map[int32]int), e) +} +func (fastpathETMsgpackIO) EncMapInt32IntV(v map[int32]int, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapInt32Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapInt32Int32V(rv2i(rv).(map[int32]int32), e) +} +func (fastpathETMsgpackIO) EncMapInt32Int32V(v map[int32]int32, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapInt32Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapInt32Float64V(rv2i(rv).(map[int32]float64), e) +} +func (fastpathETMsgpackIO) EncMapInt32Float64V(v map[int32]float64, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderMsgpackIO) fastpathEncMapInt32BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETMsgpackIO{}.EncMapInt32BoolV(rv2i(rv).(map[int32]bool), e) +} +func (fastpathETMsgpackIO) EncMapInt32BoolV(v map[int32]bool, e *encoderMsgpackIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (helperDecDriverMsgpackIO) fastpathDecodeTypeSwitch(iv interface{}, d *decoderMsgpackIO) bool { + var ft fastpathDTMsgpackIO + var changed bool + var containerLen int + switch v := iv.(type) { + case []interface{}: + ft.DecSliceIntfN(v, d) + case *[]interface{}: + var v2 []interface{} + if v2, changed = ft.DecSliceIntfY(*v, d); changed { + *v = v2 + } + case []string: + ft.DecSliceStringN(v, d) + case *[]string: + var v2 []string + if v2, changed = ft.DecSliceStringY(*v, d); changed { + *v = v2 + } + case [][]byte: + ft.DecSliceBytesN(v, d) + case *[][]byte: + var v2 [][]byte + if v2, changed = ft.DecSliceBytesY(*v, d); changed { + *v = v2 + } + case []float32: + ft.DecSliceFloat32N(v, d) + case *[]float32: + var v2 []float32 + if v2, changed = ft.DecSliceFloat32Y(*v, d); changed { + *v = v2 + } + case []float64: + ft.DecSliceFloat64N(v, d) + case *[]float64: + var v2 []float64 + if v2, changed = ft.DecSliceFloat64Y(*v, d); changed { + *v = v2 + } + case []uint8: + ft.DecSliceUint8N(v, d) + case *[]uint8: + var v2 []uint8 + if v2, changed = ft.DecSliceUint8Y(*v, d); changed { + *v = v2 + } + case []uint64: + ft.DecSliceUint64N(v, d) + case *[]uint64: + var v2 []uint64 + if v2, changed = ft.DecSliceUint64Y(*v, d); changed { + *v = v2 + } + case []int: + ft.DecSliceIntN(v, d) + case *[]int: + var v2 []int + if v2, changed = ft.DecSliceIntY(*v, d); changed { + *v = v2 + } + case []int32: + ft.DecSliceInt32N(v, d) + case *[]int32: + var v2 []int32 + if v2, changed = ft.DecSliceInt32Y(*v, d); changed { + *v = v2 + } + case []int64: + ft.DecSliceInt64N(v, d) + case *[]int64: + var v2 []int64 + if v2, changed = ft.DecSliceInt64Y(*v, d); changed { + *v = v2 + } + case []bool: + ft.DecSliceBoolN(v, d) + case *[]bool: + var v2 []bool + if v2, changed = ft.DecSliceBoolY(*v, d); changed { + *v = v2 + } + case map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*v, containerLen, d) + } + d.mapEnd() + } + default: + _ = v + return false + } + return true +} + +func (d *decoderMsgpackIO) fastpathDecSliceIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]interface{}) + if vv, changed := ft.DecSliceIntfY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []interface{} + rvGetSlice4Array(rv, &v) + ft.DecSliceIntfN(v, d) + default: + ft.DecSliceIntfN(rv2i(rv).([]interface{}), d) + } +} +func (fastpathDTMsgpackIO) DecSliceIntfY(v []interface{}, d *decoderMsgpackIO) (v2 []interface{}, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []interface{}) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]interface{}, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + d.decode(&v[uint(j)]) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]interface{}{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackIO) DecSliceIntfN(v []interface{}, d *decoderMsgpackIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + d.decode(&v[uint(j)]) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackIO) fastpathDecSliceStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]string) + if vv, changed := ft.DecSliceStringY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []string + rvGetSlice4Array(rv, &v) + ft.DecSliceStringN(v, d) + default: + ft.DecSliceStringN(rv2i(rv).([]string), d) + } +} +func (fastpathDTMsgpackIO) DecSliceStringY(v []string, d *decoderMsgpackIO) (v2 []string, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []string) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]string, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, "")) + } + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]string{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackIO) DecSliceStringN(v []string, d *decoderMsgpackIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackIO) fastpathDecSliceBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[][]byte) + if vv, changed := ft.DecSliceBytesY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v [][]byte + rvGetSlice4Array(rv, &v) + ft.DecSliceBytesN(v, d) + default: + ft.DecSliceBytesN(rv2i(rv).([][]byte), d) + } +} +func (fastpathDTMsgpackIO) DecSliceBytesY(v [][]byte, d *decoderMsgpackIO) (v2 [][]byte, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst [][]byte) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 24)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([][]byte, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([][]byte{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackIO) DecSliceBytesN(v [][]byte, d *decoderMsgpackIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackIO) fastpathDecSliceFloat32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float32) + if vv, changed := ft.DecSliceFloat32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float32 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat32N(v, d) + default: + ft.DecSliceFloat32N(rv2i(rv).([]float32), d) + } +} +func (fastpathDTMsgpackIO) DecSliceFloat32Y(v []float32, d *decoderMsgpackIO) (v2 []float32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = float32(d.d.DecodeFloat32()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackIO) DecSliceFloat32N(v []float32, d *decoderMsgpackIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = float32(d.d.DecodeFloat32()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackIO) fastpathDecSliceFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float64) + if vv, changed := ft.DecSliceFloat64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float64 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat64N(v, d) + default: + ft.DecSliceFloat64N(rv2i(rv).([]float64), d) + } +} +func (fastpathDTMsgpackIO) DecSliceFloat64Y(v []float64, d *decoderMsgpackIO) (v2 []float64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeFloat64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackIO) DecSliceFloat64N(v []float64, d *decoderMsgpackIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeFloat64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackIO) fastpathDecSliceUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint8) + if vv, changed := ft.DecSliceUint8Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint8 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint8N(v, d) + default: + ft.DecSliceUint8N(rv2i(rv).([]uint8), d) + } +} +func (fastpathDTMsgpackIO) DecSliceUint8Y(v []uint8, d *decoderMsgpackIO) (v2 []uint8, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + if ctyp != valueTypeMap { + var dbi dBytesIntoState + v2, dbi = d.decodeBytesInto(v[:len(v):len(v)], false) + return v2, dbi != dBytesIntoParamOut + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint8) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint8, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint8{}) + } + d.mapEnd() + return v, changed +} +func (fastpathDTMsgpackIO) DecSliceUint8N(v []uint8, d *decoderMsgpackIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + if ctyp != valueTypeMap { + d.decodeBytesInto(v[:len(v):len(v)], true) + return + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + d.mapEnd() +} + +func (d *decoderMsgpackIO) fastpathDecSliceUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint64) + if vv, changed := ft.DecSliceUint64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint64 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint64N(v, d) + default: + ft.DecSliceUint64N(rv2i(rv).([]uint64), d) + } +} +func (fastpathDTMsgpackIO) DecSliceUint64Y(v []uint64, d *decoderMsgpackIO) (v2 []uint64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeUint64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackIO) DecSliceUint64N(v []uint64, d *decoderMsgpackIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeUint64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackIO) fastpathDecSliceIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int) + if vv, changed := ft.DecSliceIntY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int + rvGetSlice4Array(rv, &v) + ft.DecSliceIntN(v, d) + default: + ft.DecSliceIntN(rv2i(rv).([]int), d) + } +} +func (fastpathDTMsgpackIO) DecSliceIntY(v []int, d *decoderMsgpackIO) (v2 []int, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackIO) DecSliceIntN(v []int, d *decoderMsgpackIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackIO) fastpathDecSliceInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int32) + if vv, changed := ft.DecSliceInt32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int32 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt32N(v, d) + default: + ft.DecSliceInt32N(rv2i(rv).([]int32), d) + } +} +func (fastpathDTMsgpackIO) DecSliceInt32Y(v []int32, d *decoderMsgpackIO) (v2 []int32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackIO) DecSliceInt32N(v []int32, d *decoderMsgpackIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackIO) fastpathDecSliceInt64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int64) + if vv, changed := ft.DecSliceInt64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int64 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt64N(v, d) + default: + ft.DecSliceInt64N(rv2i(rv).([]int64), d) + } +} +func (fastpathDTMsgpackIO) DecSliceInt64Y(v []int64, d *decoderMsgpackIO) (v2 []int64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeInt64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackIO) DecSliceInt64N(v []int64, d *decoderMsgpackIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeInt64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackIO) fastpathDecSliceBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]bool) + if vv, changed := ft.DecSliceBoolY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []bool + rvGetSlice4Array(rv, &v) + ft.DecSliceBoolN(v, d) + default: + ft.DecSliceBoolN(rv2i(rv).([]bool), d) + } +} +func (fastpathDTMsgpackIO) DecSliceBoolY(v []bool, d *decoderMsgpackIO) (v2 []bool, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []bool) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]bool, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, false)) + } + v[uint(j)] = d.d.DecodeBool() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]bool{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTMsgpackIO) DecSliceBoolN(v []bool, d *decoderMsgpackIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeBool() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} +func (d *decoderMsgpackIO) fastpathDecMapStringIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]interface{}) + if *vp == nil { + *vp = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntfL(rv2i(rv).(map[string]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapStringIntfL(v map[string]interface{}, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderMsgpackIO) fastpathDecMapStringStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]string) + if *vp == nil { + *vp = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringStringL(rv2i(rv).(map[string]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapStringStringL(v map[string]string, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderMsgpackIO) fastpathDecMapStringBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string][]byte) + if *vp == nil { + *vp = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBytesL(rv2i(rv).(map[string][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapStringBytesL(v map[string][]byte, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderMsgpackIO) fastpathDecMapStringUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint8) + if *vp == nil { + *vp = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint8L(rv2i(rv).(map[string]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapStringUint8L(v map[string]uint8, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderMsgpackIO) fastpathDecMapStringUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint64) + if *vp == nil { + *vp = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint64L(rv2i(rv).(map[string]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapStringUint64L(v map[string]uint64, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderMsgpackIO) fastpathDecMapStringIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int) + if *vp == nil { + *vp = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntL(rv2i(rv).(map[string]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapStringIntL(v map[string]int, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderMsgpackIO) fastpathDecMapStringInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int32) + if *vp == nil { + *vp = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringInt32L(rv2i(rv).(map[string]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapStringInt32L(v map[string]int32, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderMsgpackIO) fastpathDecMapStringFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]float64) + if *vp == nil { + *vp = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringFloat64L(rv2i(rv).(map[string]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapStringFloat64L(v map[string]float64, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderMsgpackIO) fastpathDecMapStringBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]bool) + if *vp == nil { + *vp = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBoolL(rv2i(rv).(map[string]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapStringBoolL(v map[string]bool, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint8IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]interface{}) + if *vp == nil { + *vp = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntfL(rv2i(rv).(map[uint8]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint8IntfL(v map[uint8]interface{}, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint8StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]string) + if *vp == nil { + *vp = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8StringL(rv2i(rv).(map[uint8]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint8StringL(v map[uint8]string, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint8BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8][]byte) + if *vp == nil { + *vp = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BytesL(rv2i(rv).(map[uint8][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint8BytesL(v map[uint8][]byte, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint8Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint8) + if *vp == nil { + *vp = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint8L(rv2i(rv).(map[uint8]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint8Uint8L(v map[uint8]uint8, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint8Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint64) + if *vp == nil { + *vp = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint64L(rv2i(rv).(map[uint8]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint8Uint64L(v map[uint8]uint64, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint8IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int) + if *vp == nil { + *vp = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntL(rv2i(rv).(map[uint8]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint8IntL(v map[uint8]int, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint8Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int32) + if *vp == nil { + *vp = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Int32L(rv2i(rv).(map[uint8]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint8Int32L(v map[uint8]int32, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint8Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]float64) + if *vp == nil { + *vp = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Float64L(rv2i(rv).(map[uint8]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint8Float64L(v map[uint8]float64, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint8BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]bool) + if *vp == nil { + *vp = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BoolL(rv2i(rv).(map[uint8]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint8BoolL(v map[uint8]bool, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint64IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]interface{}) + if *vp == nil { + *vp = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntfL(rv2i(rv).(map[uint64]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint64IntfL(v map[uint64]interface{}, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint64StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]string) + if *vp == nil { + *vp = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64StringL(rv2i(rv).(map[uint64]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint64StringL(v map[uint64]string, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint64BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64][]byte) + if *vp == nil { + *vp = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BytesL(rv2i(rv).(map[uint64][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint64BytesL(v map[uint64][]byte, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint64Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint8) + if *vp == nil { + *vp = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint8L(rv2i(rv).(map[uint64]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint64Uint8L(v map[uint64]uint8, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint64Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint64) + if *vp == nil { + *vp = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint64L(rv2i(rv).(map[uint64]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint64Uint64L(v map[uint64]uint64, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint64IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int) + if *vp == nil { + *vp = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntL(rv2i(rv).(map[uint64]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint64IntL(v map[uint64]int, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint64Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int32) + if *vp == nil { + *vp = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Int32L(rv2i(rv).(map[uint64]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint64Int32L(v map[uint64]int32, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint64Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]float64) + if *vp == nil { + *vp = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Float64L(rv2i(rv).(map[uint64]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint64Float64L(v map[uint64]float64, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderMsgpackIO) fastpathDecMapUint64BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]bool) + if *vp == nil { + *vp = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BoolL(rv2i(rv).(map[uint64]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapUint64BoolL(v map[uint64]bool, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderMsgpackIO) fastpathDecMapIntIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]interface{}) + if *vp == nil { + *vp = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntfL(rv2i(rv).(map[int]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapIntIntfL(v map[int]interface{}, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderMsgpackIO) fastpathDecMapIntStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]string) + if *vp == nil { + *vp = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntStringL(rv2i(rv).(map[int]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapIntStringL(v map[int]string, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderMsgpackIO) fastpathDecMapIntBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int][]byte) + if *vp == nil { + *vp = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBytesL(rv2i(rv).(map[int][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapIntBytesL(v map[int][]byte, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderMsgpackIO) fastpathDecMapIntUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint8) + if *vp == nil { + *vp = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint8L(rv2i(rv).(map[int]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapIntUint8L(v map[int]uint8, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderMsgpackIO) fastpathDecMapIntUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint64) + if *vp == nil { + *vp = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint64L(rv2i(rv).(map[int]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapIntUint64L(v map[int]uint64, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderMsgpackIO) fastpathDecMapIntIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int) + if *vp == nil { + *vp = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntL(rv2i(rv).(map[int]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapIntIntL(v map[int]int, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderMsgpackIO) fastpathDecMapIntInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int32) + if *vp == nil { + *vp = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntInt32L(rv2i(rv).(map[int]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapIntInt32L(v map[int]int32, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderMsgpackIO) fastpathDecMapIntFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]float64) + if *vp == nil { + *vp = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntFloat64L(rv2i(rv).(map[int]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapIntFloat64L(v map[int]float64, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderMsgpackIO) fastpathDecMapIntBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]bool) + if *vp == nil { + *vp = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBoolL(rv2i(rv).(map[int]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapIntBoolL(v map[int]bool, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderMsgpackIO) fastpathDecMapInt32IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]interface{}) + if *vp == nil { + *vp = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntfL(rv2i(rv).(map[int32]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapInt32IntfL(v map[int32]interface{}, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderMsgpackIO) fastpathDecMapInt32StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]string) + if *vp == nil { + *vp = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32StringL(rv2i(rv).(map[int32]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapInt32StringL(v map[int32]string, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderMsgpackIO) fastpathDecMapInt32BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32][]byte) + if *vp == nil { + *vp = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BytesL(rv2i(rv).(map[int32][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapInt32BytesL(v map[int32][]byte, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderMsgpackIO) fastpathDecMapInt32Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint8) + if *vp == nil { + *vp = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint8L(rv2i(rv).(map[int32]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapInt32Uint8L(v map[int32]uint8, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderMsgpackIO) fastpathDecMapInt32Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint64) + if *vp == nil { + *vp = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint64L(rv2i(rv).(map[int32]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapInt32Uint64L(v map[int32]uint64, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderMsgpackIO) fastpathDecMapInt32IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int) + if *vp == nil { + *vp = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntL(rv2i(rv).(map[int32]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapInt32IntL(v map[int32]int, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderMsgpackIO) fastpathDecMapInt32Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int32) + if *vp == nil { + *vp = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Int32L(rv2i(rv).(map[int32]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapInt32Int32L(v map[int32]int32, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderMsgpackIO) fastpathDecMapInt32Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]float64) + if *vp == nil { + *vp = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Float64L(rv2i(rv).(map[int32]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapInt32Float64L(v map[int32]float64, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderMsgpackIO) fastpathDecMapInt32BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTMsgpackIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]bool) + if *vp == nil { + *vp = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BoolL(rv2i(rv).(map[int32]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTMsgpackIO) DecMapInt32BoolL(v map[int32]bool, containerLen int, d *decoderMsgpackIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} diff --git a/vendor/github.com/ugorji/go/codec/msgpack.go b/vendor/github.com/ugorji/go/codec/msgpack.go index c0861df..ed8ca99 100644 --- a/vendor/github.com/ugorji/go/codec/msgpack.go +++ b/vendor/github.com/ugorji/go/codec/msgpack.go @@ -1,3 +1,5 @@ +//go:build notmono || codec.notmono + // Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. // Use of this source code is governed by a MIT license found in the LICENSE file. @@ -18,247 +20,106 @@ For compatibility with behaviour of msgpack-c reference implementation: package codec import ( - "fmt" "io" "math" - "net/rpc" "reflect" "time" "unicode/utf8" ) -const ( - mpPosFixNumMin byte = 0x00 - mpPosFixNumMax byte = 0x7f - mpFixMapMin byte = 0x80 - mpFixMapMax byte = 0x8f - mpFixArrayMin byte = 0x90 - mpFixArrayMax byte = 0x9f - mpFixStrMin byte = 0xa0 - mpFixStrMax byte = 0xbf - mpNil byte = 0xc0 - _ byte = 0xc1 - mpFalse byte = 0xc2 - mpTrue byte = 0xc3 - mpFloat byte = 0xca - mpDouble byte = 0xcb - mpUint8 byte = 0xcc - mpUint16 byte = 0xcd - mpUint32 byte = 0xce - mpUint64 byte = 0xcf - mpInt8 byte = 0xd0 - mpInt16 byte = 0xd1 - mpInt32 byte = 0xd2 - mpInt64 byte = 0xd3 - - // extensions below - mpBin8 byte = 0xc4 - mpBin16 byte = 0xc5 - mpBin32 byte = 0xc6 - mpExt8 byte = 0xc7 - mpExt16 byte = 0xc8 - mpExt32 byte = 0xc9 - mpFixExt1 byte = 0xd4 - mpFixExt2 byte = 0xd5 - mpFixExt4 byte = 0xd6 - mpFixExt8 byte = 0xd7 - mpFixExt16 byte = 0xd8 - - mpStr8 byte = 0xd9 // new - mpStr16 byte = 0xda - mpStr32 byte = 0xdb - - mpArray16 byte = 0xdc - mpArray32 byte = 0xdd - - mpMap16 byte = 0xde - mpMap32 byte = 0xdf - - mpNegFixNumMin byte = 0xe0 - mpNegFixNumMax byte = 0xff -) - -var mpTimeExtTag int8 = -1 -var mpTimeExtTagU = uint8(mpTimeExtTag) - -var mpdescNames = map[byte]string{ - mpNil: "nil", - mpFalse: "false", - mpTrue: "true", - mpFloat: "float", - mpDouble: "float", - mpUint8: "uuint", - mpUint16: "uint", - mpUint32: "uint", - mpUint64: "uint", - mpInt8: "int", - mpInt16: "int", - mpInt32: "int", - mpInt64: "int", - - mpStr8: "string|bytes", - mpStr16: "string|bytes", - mpStr32: "string|bytes", - - mpBin8: "bytes", - mpBin16: "bytes", - mpBin32: "bytes", - - mpArray16: "array", - mpArray32: "array", - - mpMap16: "map", - mpMap32: "map", -} - -func mpdesc(bd byte) (s string) { - s = mpdescNames[bd] - if s == "" { - switch { - case bd >= mpPosFixNumMin && bd <= mpPosFixNumMax, - bd >= mpNegFixNumMin && bd <= mpNegFixNumMax: - s = "int" - case bd >= mpFixStrMin && bd <= mpFixStrMax: - s = "string|bytes" - case bd >= mpFixArrayMin && bd <= mpFixArrayMax: - s = "array" - case bd >= mpFixMapMin && bd <= mpFixMapMax: - s = "map" - case bd >= mpFixExt1 && bd <= mpFixExt16, - bd >= mpExt8 && bd <= mpExt32: - s = "ext" - default: - s = "unknown" - } - } - return -} - -// MsgpackSpecRpcMultiArgs is a special type which signifies to the MsgpackSpecRpcCodec -// that the backend RPC service takes multiple arguments, which have been arranged -// in sequence in the slice. -// -// The Codec then passes it AS-IS to the rpc service (without wrapping it in an -// array of 1 element). -type MsgpackSpecRpcMultiArgs []interface{} - -// A MsgpackContainer type specifies the different types of msgpackContainers. -type msgpackContainerType struct { - fixCutoff, bFixMin, b8, b16, b32 byte - // hasFixMin, has8, has8Always bool -} - -var ( - msgpackContainerRawLegacy = msgpackContainerType{ - 32, mpFixStrMin, 0, mpStr16, mpStr32, - } - msgpackContainerStr = msgpackContainerType{ - 32, mpFixStrMin, mpStr8, mpStr16, mpStr32, // true, true, false, - } - msgpackContainerBin = msgpackContainerType{ - 0, 0, mpBin8, mpBin16, mpBin32, // false, true, true, - } - msgpackContainerList = msgpackContainerType{ - 16, mpFixArrayMin, 0, mpArray16, mpArray32, // true, false, false, - } - msgpackContainerMap = msgpackContainerType{ - 16, mpFixMapMin, 0, mpMap16, mpMap32, // true, false, false, - } -) - //--------------------------------------------- -type msgpackEncDriver struct { +type msgpackEncDriver[T encWriter] struct { noBuiltInTypes encDriverNoopContainerWriter encDriverNoState + encDriverContainerNoTrackerT + encInit2er + h *MsgpackHandle + e *encoderBase + w T // x [8]byte - e Encoder } -func (e *msgpackEncDriver) encoder() *Encoder { - return &e.e +func (e *msgpackEncDriver[T]) EncodeNil() { + e.w.writen1(mpNil) } -func (e *msgpackEncDriver) EncodeNil() { - e.e.encWr.writen1(mpNil) -} - -func (e *msgpackEncDriver) EncodeInt(i int64) { +func (e *msgpackEncDriver[T]) EncodeInt(i int64) { if e.h.PositiveIntUnsigned && i >= 0 { e.EncodeUint(uint64(i)) } else if i > math.MaxInt8 { if i <= math.MaxInt16 { - e.e.encWr.writen1(mpInt16) - bigen.writeUint16(e.e.w(), uint16(i)) + e.w.writen1(mpInt16) + e.w.writen2(bigen.PutUint16(uint16(i))) } else if i <= math.MaxInt32 { - e.e.encWr.writen1(mpInt32) - bigen.writeUint32(e.e.w(), uint32(i)) + e.w.writen1(mpInt32) + e.w.writen4(bigen.PutUint32(uint32(i))) } else { - e.e.encWr.writen1(mpInt64) - bigen.writeUint64(e.e.w(), uint64(i)) + e.w.writen1(mpInt64) + e.w.writen8(bigen.PutUint64(uint64(i))) } } else if i >= -32 { if e.h.NoFixedNum { - e.e.encWr.writen2(mpInt8, byte(i)) + e.w.writen2(mpInt8, byte(i)) } else { - e.e.encWr.writen1(byte(i)) + e.w.writen1(byte(i)) } } else if i >= math.MinInt8 { - e.e.encWr.writen2(mpInt8, byte(i)) + e.w.writen2(mpInt8, byte(i)) } else if i >= math.MinInt16 { - e.e.encWr.writen1(mpInt16) - bigen.writeUint16(e.e.w(), uint16(i)) + e.w.writen1(mpInt16) + e.w.writen2(bigen.PutUint16(uint16(i))) } else if i >= math.MinInt32 { - e.e.encWr.writen1(mpInt32) - bigen.writeUint32(e.e.w(), uint32(i)) + e.w.writen1(mpInt32) + e.w.writen4(bigen.PutUint32(uint32(i))) } else { - e.e.encWr.writen1(mpInt64) - bigen.writeUint64(e.e.w(), uint64(i)) + e.w.writen1(mpInt64) + e.w.writen8(bigen.PutUint64(uint64(i))) } } -func (e *msgpackEncDriver) EncodeUint(i uint64) { +func (e *msgpackEncDriver[T]) EncodeUint(i uint64) { if i <= math.MaxInt8 { if e.h.NoFixedNum { - e.e.encWr.writen2(mpUint8, byte(i)) + e.w.writen2(mpUint8, byte(i)) } else { - e.e.encWr.writen1(byte(i)) + e.w.writen1(byte(i)) } } else if i <= math.MaxUint8 { - e.e.encWr.writen2(mpUint8, byte(i)) + e.w.writen2(mpUint8, byte(i)) } else if i <= math.MaxUint16 { - e.e.encWr.writen1(mpUint16) - bigen.writeUint16(e.e.w(), uint16(i)) + e.w.writen1(mpUint16) + e.w.writen2(bigen.PutUint16(uint16(i))) } else if i <= math.MaxUint32 { - e.e.encWr.writen1(mpUint32) - bigen.writeUint32(e.e.w(), uint32(i)) + e.w.writen1(mpUint32) + e.w.writen4(bigen.PutUint32(uint32(i))) } else { - e.e.encWr.writen1(mpUint64) - bigen.writeUint64(e.e.w(), uint64(i)) + e.w.writen1(mpUint64) + e.w.writen8(bigen.PutUint64(uint64(i))) } } -func (e *msgpackEncDriver) EncodeBool(b bool) { +func (e *msgpackEncDriver[T]) EncodeBool(b bool) { if b { - e.e.encWr.writen1(mpTrue) + e.w.writen1(mpTrue) } else { - e.e.encWr.writen1(mpFalse) + e.w.writen1(mpFalse) } } -func (e *msgpackEncDriver) EncodeFloat32(f float32) { - e.e.encWr.writen1(mpFloat) - bigen.writeUint32(e.e.w(), math.Float32bits(f)) +func (e *msgpackEncDriver[T]) EncodeFloat32(f float32) { + e.w.writen1(mpFloat) + e.w.writen4(bigen.PutUint32(math.Float32bits(f))) } -func (e *msgpackEncDriver) EncodeFloat64(f float64) { - e.e.encWr.writen1(mpDouble) - bigen.writeUint64(e.e.w(), math.Float64bits(f)) +func (e *msgpackEncDriver[T]) EncodeFloat64(f float64) { + e.w.writen1(mpDouble) + e.w.writen8(bigen.PutUint64(math.Float64bits(f))) } -func (e *msgpackEncDriver) EncodeTime(t time.Time) { +func (e *msgpackEncDriver[T]) EncodeTime(t time.Time) { if t.IsZero() { e.EncodeNil() return @@ -282,33 +143,33 @@ func (e *msgpackEncDriver) EncodeTime(t time.Time) { } switch l { case 4: - bigen.writeUint32(e.e.w(), uint32(data64)) + e.w.writen4(bigen.PutUint32(uint32(data64))) case 8: - bigen.writeUint64(e.e.w(), data64) + e.w.writen8(bigen.PutUint64(data64)) case 12: - bigen.writeUint32(e.e.w(), uint32(nsec)) - bigen.writeUint64(e.e.w(), uint64(sec)) + e.w.writen4(bigen.PutUint32(uint32(nsec))) + e.w.writen8(bigen.PutUint64(uint64(sec))) } } -func (e *msgpackEncDriver) EncodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) { +func (e *msgpackEncDriver[T]) EncodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) { var bs0, bs []byte if ext == SelfExt { bs0 = e.e.blist.get(1024) bs = bs0 - e.e.sideEncode(v, basetype, &bs) + sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, true) }) } else { bs = ext.WriteExt(v) } if bs == nil { - e.EncodeNil() + e.writeNilBytes() goto END } if e.h.WriteExt { e.encodeExtPreamble(uint8(xtag), len(bs)) - e.e.encWr.writeb(bs) + e.w.writeb(bs) } else { - e.EncodeStringBytesRaw(bs) + e.EncodeBytes(bs) } END: if ext == SelfExt { @@ -319,45 +180,55 @@ END: } } -func (e *msgpackEncDriver) EncodeRawExt(re *RawExt) { +func (e *msgpackEncDriver[T]) EncodeRawExt(re *RawExt) { e.encodeExtPreamble(uint8(re.Tag), len(re.Data)) - e.e.encWr.writeb(re.Data) + e.w.writeb(re.Data) } -func (e *msgpackEncDriver) encodeExtPreamble(xtag byte, l int) { +func (e *msgpackEncDriver[T]) encodeExtPreamble(xtag byte, l int) { if l == 1 { - e.e.encWr.writen2(mpFixExt1, xtag) + e.w.writen2(mpFixExt1, xtag) } else if l == 2 { - e.e.encWr.writen2(mpFixExt2, xtag) + e.w.writen2(mpFixExt2, xtag) } else if l == 4 { - e.e.encWr.writen2(mpFixExt4, xtag) + e.w.writen2(mpFixExt4, xtag) } else if l == 8 { - e.e.encWr.writen2(mpFixExt8, xtag) + e.w.writen2(mpFixExt8, xtag) } else if l == 16 { - e.e.encWr.writen2(mpFixExt16, xtag) + e.w.writen2(mpFixExt16, xtag) } else if l < 256 { - e.e.encWr.writen2(mpExt8, byte(l)) - e.e.encWr.writen1(xtag) + e.w.writen2(mpExt8, byte(l)) + e.w.writen1(xtag) } else if l < 65536 { - e.e.encWr.writen1(mpExt16) - bigen.writeUint16(e.e.w(), uint16(l)) - e.e.encWr.writen1(xtag) + e.w.writen1(mpExt16) + e.w.writen2(bigen.PutUint16(uint16(l))) + e.w.writen1(xtag) } else { - e.e.encWr.writen1(mpExt32) - bigen.writeUint32(e.e.w(), uint32(l)) - e.e.encWr.writen1(xtag) + e.w.writen1(mpExt32) + e.w.writen4(bigen.PutUint32(uint32(l))) + e.w.writen1(xtag) } } -func (e *msgpackEncDriver) WriteArrayStart(length int) { +func (e *msgpackEncDriver[T]) WriteArrayStart(length int) { e.writeContainerLen(msgpackContainerList, length) } -func (e *msgpackEncDriver) WriteMapStart(length int) { +func (e *msgpackEncDriver[T]) WriteMapStart(length int) { e.writeContainerLen(msgpackContainerMap, length) } -func (e *msgpackEncDriver) EncodeString(s string) { +func (e *msgpackEncDriver[T]) WriteArrayEmpty() { + // e.WriteArrayStart(0) = e.writeContainerLen(msgpackContainerList, 0) + e.w.writen1(mpFixArrayMin) +} + +func (e *msgpackEncDriver[T]) WriteMapEmpty() { + // e.WriteMapStart(0) = e.writeContainerLen(msgpackContainerMap, 0) + e.w.writen1(mpFixMapMin) +} + +func (e *msgpackEncDriver[T]) EncodeString(s string) { var ct msgpackContainerType if e.h.WriteExt { if e.h.StringToRaw { @@ -370,53 +241,78 @@ func (e *msgpackEncDriver) EncodeString(s string) { } e.writeContainerLen(ct, len(s)) if len(s) > 0 { - e.e.encWr.writestr(s) + e.w.writestr(s) } } -func (e *msgpackEncDriver) EncodeStringBytesRaw(bs []byte) { - if bs == nil { - e.EncodeNil() - return - } +func (e *msgpackEncDriver[T]) EncodeStringNoEscape4Json(v string) { e.EncodeString(v) } + +func (e *msgpackEncDriver[T]) EncodeStringBytesRaw(bs []byte) { if e.h.WriteExt { e.writeContainerLen(msgpackContainerBin, len(bs)) } else { e.writeContainerLen(msgpackContainerRawLegacy, len(bs)) } if len(bs) > 0 { - e.e.encWr.writeb(bs) + e.w.writeb(bs) + } +} + +func (e *msgpackEncDriver[T]) EncodeBytes(v []byte) { + if v == nil { + e.writeNilBytes() + return + } + e.EncodeStringBytesRaw(v) +} + +func (e *msgpackEncDriver[T]) writeNilOr(v byte) { + if !e.h.NilCollectionToZeroLength { + v = mpNil } + e.w.writen1(v) } -func (e *msgpackEncDriver) writeContainerLen(ct msgpackContainerType, l int) { +func (e *msgpackEncDriver[T]) writeNilArray() { + e.writeNilOr(mpFixArrayMin) +} + +func (e *msgpackEncDriver[T]) writeNilMap() { + e.writeNilOr(mpFixMapMin) +} + +func (e *msgpackEncDriver[T]) writeNilBytes() { + e.writeNilOr(mpFixStrMin) +} + +func (e *msgpackEncDriver[T]) writeContainerLen(ct msgpackContainerType, l int) { if ct.fixCutoff > 0 && l < int(ct.fixCutoff) { - e.e.encWr.writen1(ct.bFixMin | byte(l)) + e.w.writen1(ct.bFixMin | byte(l)) } else if ct.b8 > 0 && l < 256 { - e.e.encWr.writen2(ct.b8, uint8(l)) + e.w.writen2(ct.b8, uint8(l)) } else if l < 65536 { - e.e.encWr.writen1(ct.b16) - bigen.writeUint16(e.e.w(), uint16(l)) + e.w.writen1(ct.b16) + e.w.writen2(bigen.PutUint16(uint16(l))) } else { - e.e.encWr.writen1(ct.b32) - bigen.writeUint32(e.e.w(), uint32(l)) + e.w.writen1(ct.b32) + e.w.writen4(bigen.PutUint32(uint32(l))) } } //--------------------------------------------- -type msgpackDecDriver struct { +type msgpackDecDriver[T decReader] struct { decDriverNoopContainerReader decDriverNoopNumberHelper + decInit2er + h *MsgpackHandle + d *decoderBase + r T + bdAndBdread - _ bool + // bytes bool noBuiltInTypes - d Decoder -} - -func (d *msgpackDecDriver) decoder() *Decoder { - return &d.d } // Note: This returns either a primitive (int, bool, etc) for non-containers, @@ -424,7 +320,7 @@ func (d *msgpackDecDriver) decoder() *Decoder { // It is called when a nil interface{} is passed, leaving it up to the DecDriver // to introspect the stream and decide how best to decode. // It deciphers the value by looking at the stream first. -func (d *msgpackDecDriver) DecodeNaked() { +func (d *msgpackDecDriver[T]) DecodeNaked() { if !d.bdRead { d.readNextBd() } @@ -445,36 +341,36 @@ func (d *msgpackDecDriver) DecodeNaked() { case mpFloat: n.v = valueTypeFloat - n.f = float64(math.Float32frombits(bigen.Uint32(d.d.decRd.readn4()))) + n.f = float64(math.Float32frombits(bigen.Uint32(d.r.readn4()))) case mpDouble: n.v = valueTypeFloat - n.f = math.Float64frombits(bigen.Uint64(d.d.decRd.readn8())) + n.f = math.Float64frombits(bigen.Uint64(d.r.readn8())) case mpUint8: n.v = valueTypeUint - n.u = uint64(d.d.decRd.readn1()) + n.u = uint64(d.r.readn1()) case mpUint16: n.v = valueTypeUint - n.u = uint64(bigen.Uint16(d.d.decRd.readn2())) + n.u = uint64(bigen.Uint16(d.r.readn2())) case mpUint32: n.v = valueTypeUint - n.u = uint64(bigen.Uint32(d.d.decRd.readn4())) + n.u = uint64(bigen.Uint32(d.r.readn4())) case mpUint64: n.v = valueTypeUint - n.u = uint64(bigen.Uint64(d.d.decRd.readn8())) + n.u = uint64(bigen.Uint64(d.r.readn8())) case mpInt8: n.v = valueTypeInt - n.i = int64(int8(d.d.decRd.readn1())) + n.i = int64(int8(d.r.readn1())) case mpInt16: n.v = valueTypeInt - n.i = int64(int16(bigen.Uint16(d.d.decRd.readn2()))) + n.i = int64(int16(bigen.Uint16(d.r.readn2()))) case mpInt32: n.v = valueTypeInt - n.i = int64(int32(bigen.Uint32(d.d.decRd.readn4()))) + n.i = int64(int32(bigen.Uint32(d.r.readn4()))) case mpInt64: n.v = valueTypeInt - n.i = int64(int64(bigen.Uint64(d.d.decRd.readn8()))) + n.i = int64(int64(bigen.Uint64(d.r.readn8()))) default: switch { @@ -487,7 +383,7 @@ func (d *msgpackDecDriver) DecodeNaked() { n.v = valueTypeInt n.i = int64(int8(bd)) case bd == mpStr8, bd == mpStr16, bd == mpStr32, bd >= mpFixStrMin && bd <= mpFixStrMax: - d.d.fauxUnionReadRawBytes(d.h.WriteExt) + d.d.fauxUnionReadRawBytes(d, d.h.WriteExt, d.h.RawToString) //, d.h.ZeroCopy) // if d.h.WriteExt || d.h.RawToString { // n.v = valueTypeString // n.s = d.d.stringZC(d.DecodeStringAsBytes()) @@ -496,7 +392,7 @@ func (d *msgpackDecDriver) DecodeNaked() { // n.l = d.DecodeBytes([]byte{}) // } case bd == mpBin8, bd == mpBin16, bd == mpBin32: - d.d.fauxUnionReadRawBytes(false) + d.d.fauxUnionReadRawBytes(d, false, d.h.RawToString) //, d.h.ZeroCopy) case bd == mpArray16, bd == mpArray32, bd >= mpFixArrayMin && bd <= mpFixArrayMax: n.v = valueTypeArray decodeFurther = true @@ -506,17 +402,15 @@ func (d *msgpackDecDriver) DecodeNaked() { case bd >= mpFixExt1 && bd <= mpFixExt16, bd >= mpExt8 && bd <= mpExt32: n.v = valueTypeExt clen := d.readExtLen() - n.u = uint64(d.d.decRd.readn1()) + n.u = uint64(d.r.readn1()) if n.u == uint64(mpTimeExtTagU) { n.v = valueTypeTime n.t = d.decodeTime(clen) - } else if d.d.bytes { - n.l = d.d.decRd.rb.readx(uint(clen)) } else { - n.l = decByteSlice(d.d.r(), clen, d.d.h.MaxInitLen, d.d.b[:]) + n.l = d.r.readx(uint(clen)) } default: - d.d.errorf("cannot infer value: %s: Ox%x/%d/%s", msgBadDesc, bd, bd, mpdesc(bd)) + halt.errorf("cannot infer value: %s: Ox%x/%d/%s", msgBadDesc, bd, bd, mpdesc(bd)) } } if !decodeFurther { @@ -528,32 +422,18 @@ func (d *msgpackDecDriver) DecodeNaked() { } } -func (d *msgpackDecDriver) nextValueBytes(v0 []byte) (v []byte) { +func (d *msgpackDecDriver[T]) nextValueBytes() (v []byte) { if !d.bdRead { d.readNextBd() } - v = v0 - var h = decNextValueBytesHelper{d: &d.d} - var cursor = d.d.rb.c - 1 - h.append1(&v, d.bd) - v = d.nextValueBytesBdReadR(v) + d.r.startRecording() + d.nextValueBytesBdReadR() + v = d.r.stopRecording() d.bdRead = false - h.bytesRdV(&v, cursor) return } -func (d *msgpackDecDriver) nextValueBytesR(v0 []byte) (v []byte) { - d.readNextBd() - v = v0 - var h = decNextValueBytesHelper{d: &d.d} - h.append1(&v, d.bd) - return d.nextValueBytesBdReadR(v) -} - -func (d *msgpackDecDriver) nextValueBytesBdReadR(v0 []byte) (v []byte) { - v = v0 - var h = decNextValueBytesHelper{d: &d.d} - +func (d *msgpackDecDriver[T]) nextValueBytesBdReadR() { bd := d.bd var clen uint @@ -561,88 +441,84 @@ func (d *msgpackDecDriver) nextValueBytesBdReadR(v0 []byte) (v []byte) { switch bd { case mpNil, mpFalse, mpTrue: // pass case mpUint8, mpInt8: - h.append1(&v, d.d.decRd.readn1()) + d.r.readn1() case mpUint16, mpInt16: - h.appendN(&v, d.d.decRd.readx(2)...) + d.r.skip(2) case mpFloat, mpUint32, mpInt32: - h.appendN(&v, d.d.decRd.readx(4)...) + d.r.skip(4) case mpDouble, mpUint64, mpInt64: - h.appendN(&v, d.d.decRd.readx(8)...) + d.r.skip(8) case mpStr8, mpBin8: - clen = uint(d.d.decRd.readn1()) - h.append1(&v, byte(clen)) - h.appendN(&v, d.d.decRd.readx(clen)...) + clen = uint(d.r.readn1()) + d.r.skip(clen) case mpStr16, mpBin16: - x := d.d.decRd.readn2() - h.appendN(&v, x[:]...) + x := d.r.readn2() clen = uint(bigen.Uint16(x)) - h.appendN(&v, d.d.decRd.readx(clen)...) + d.r.skip(clen) case mpStr32, mpBin32: - x := d.d.decRd.readn4() - h.appendN(&v, x[:]...) + x := d.r.readn4() clen = uint(bigen.Uint32(x)) - h.appendN(&v, d.d.decRd.readx(clen)...) + d.r.skip(clen) case mpFixExt1: - h.append1(&v, d.d.decRd.readn1()) // tag - h.append1(&v, d.d.decRd.readn1()) + d.r.readn1() // tag + d.r.readn1() case mpFixExt2: - h.append1(&v, d.d.decRd.readn1()) // tag - h.appendN(&v, d.d.decRd.readx(2)...) + d.r.readn1() // tag + d.r.skip(2) case mpFixExt4: - h.append1(&v, d.d.decRd.readn1()) // tag - h.appendN(&v, d.d.decRd.readx(4)...) + d.r.readn1() // tag + d.r.skip(4) case mpFixExt8: - h.append1(&v, d.d.decRd.readn1()) // tag - h.appendN(&v, d.d.decRd.readx(8)...) + d.r.readn1() // tag + d.r.skip(8) case mpFixExt16: - h.append1(&v, d.d.decRd.readn1()) // tag - h.appendN(&v, d.d.decRd.readx(16)...) + d.r.readn1() // tag + d.r.skip(16) case mpExt8: - clen = uint(d.d.decRd.readn1()) - h.append1(&v, uint8(clen)) - h.append1(&v, d.d.decRd.readn1()) // tag - h.appendN(&v, d.d.decRd.readx(clen)...) + clen = uint(d.r.readn1()) + d.r.readn1() // tag + d.r.skip(clen) case mpExt16: - x := d.d.decRd.readn2() + x := d.r.readn2() clen = uint(bigen.Uint16(x)) - h.appendN(&v, x[:]...) - h.append1(&v, d.d.decRd.readn1()) // tag - h.appendN(&v, d.d.decRd.readx(clen)...) + d.r.readn1() // tag + d.r.skip(clen) case mpExt32: - x := d.d.decRd.readn4() + x := d.r.readn4() clen = uint(bigen.Uint32(x)) - h.appendN(&v, x[:]...) - h.append1(&v, d.d.decRd.readn1()) // tag - h.appendN(&v, d.d.decRd.readx(clen)...) + d.r.readn1() // tag + d.r.skip(clen) case mpArray16: - x := d.d.decRd.readn2() + x := d.r.readn2() clen = uint(bigen.Uint16(x)) - h.appendN(&v, x[:]...) for i := uint(0); i < clen; i++ { - v = d.nextValueBytesR(v) + d.readNextBd() + d.nextValueBytesBdReadR() } case mpArray32: - x := d.d.decRd.readn4() + x := d.r.readn4() clen = uint(bigen.Uint32(x)) - h.appendN(&v, x[:]...) for i := uint(0); i < clen; i++ { - v = d.nextValueBytesR(v) + d.readNextBd() + d.nextValueBytesBdReadR() } case mpMap16: - x := d.d.decRd.readn2() + x := d.r.readn2() clen = uint(bigen.Uint16(x)) - h.appendN(&v, x[:]...) for i := uint(0); i < clen; i++ { - v = d.nextValueBytesR(v) - v = d.nextValueBytesR(v) + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() } case mpMap32: - x := d.d.decRd.readn4() + x := d.r.readn4() clen = uint(bigen.Uint32(x)) - h.appendN(&v, x[:]...) for i := uint(0); i < clen; i++ { - v = d.nextValueBytesR(v) - v = d.nextValueBytesR(v) + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() } default: switch { @@ -650,65 +526,68 @@ func (d *msgpackDecDriver) nextValueBytesBdReadR(v0 []byte) (v []byte) { case bd >= mpNegFixNumMin && bd <= mpNegFixNumMax: // pass case bd >= mpFixStrMin && bd <= mpFixStrMax: clen = uint(mpFixStrMin ^ bd) - h.appendN(&v, d.d.decRd.readx(clen)...) + d.r.skip(clen) case bd >= mpFixArrayMin && bd <= mpFixArrayMax: clen = uint(mpFixArrayMin ^ bd) for i := uint(0); i < clen; i++ { - v = d.nextValueBytesR(v) + d.readNextBd() + d.nextValueBytesBdReadR() } case bd >= mpFixMapMin && bd <= mpFixMapMax: clen = uint(mpFixMapMin ^ bd) for i := uint(0); i < clen; i++ { - v = d.nextValueBytesR(v) - v = d.nextValueBytesR(v) + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() } default: - d.d.errorf("nextValueBytes: cannot infer value: %s: Ox%x/%d/%s", msgBadDesc, bd, bd, mpdesc(bd)) + halt.errorf("nextValueBytes: cannot infer value: %s: Ox%x/%d/%s", msgBadDesc, bd, bd, mpdesc(bd)) } } return } -func (d *msgpackDecDriver) decFloat4Int32() (f float32) { - fbits := bigen.Uint32(d.d.decRd.readn4()) +func (d *msgpackDecDriver[T]) decFloat4Int32() (f float32) { + fbits := bigen.Uint32(d.r.readn4()) f = math.Float32frombits(fbits) if !noFrac32(fbits) { - d.d.errorf("assigning integer value from float32 with a fraction: %v", f) + halt.errorf("assigning integer value from float32 with a fraction: %v", f) } return } -func (d *msgpackDecDriver) decFloat4Int64() (f float64) { - fbits := bigen.Uint64(d.d.decRd.readn8()) +func (d *msgpackDecDriver[T]) decFloat4Int64() (f float64) { + fbits := bigen.Uint64(d.r.readn8()) f = math.Float64frombits(fbits) if !noFrac64(fbits) { - d.d.errorf("assigning integer value from float64 with a fraction: %v", f) + halt.errorf("assigning integer value from float64 with a fraction: %v", f) } return } // int can be decoded from msgpack type: intXXX or uintXXX -func (d *msgpackDecDriver) DecodeInt64() (i int64) { +func (d *msgpackDecDriver[T]) DecodeInt64() (i int64) { if d.advanceNil() { return } switch d.bd { case mpUint8: - i = int64(uint64(d.d.decRd.readn1())) + i = int64(uint64(d.r.readn1())) case mpUint16: - i = int64(uint64(bigen.Uint16(d.d.decRd.readn2()))) + i = int64(uint64(bigen.Uint16(d.r.readn2()))) case mpUint32: - i = int64(uint64(bigen.Uint32(d.d.decRd.readn4()))) + i = int64(uint64(bigen.Uint32(d.r.readn4()))) case mpUint64: - i = int64(bigen.Uint64(d.d.decRd.readn8())) + i = int64(bigen.Uint64(d.r.readn8())) case mpInt8: - i = int64(int8(d.d.decRd.readn1())) + i = int64(int8(d.r.readn1())) case mpInt16: - i = int64(int16(bigen.Uint16(d.d.decRd.readn2()))) + i = int64(int16(bigen.Uint16(d.r.readn2()))) case mpInt32: - i = int64(int32(bigen.Uint32(d.d.decRd.readn4()))) + i = int64(int32(bigen.Uint32(d.r.readn4()))) case mpInt64: - i = int64(bigen.Uint64(d.d.decRd.readn8())) + i = int64(bigen.Uint64(d.r.readn8())) case mpFloat: i = int64(d.decFloat4Int32()) case mpDouble: @@ -720,7 +599,7 @@ func (d *msgpackDecDriver) DecodeInt64() (i int64) { case d.bd >= mpNegFixNumMin && d.bd <= mpNegFixNumMax: i = int64(int8(d.bd)) default: - d.d.errorf("cannot decode signed integer: %s: %x/%s", msgBadDesc, d.bd, mpdesc(d.bd)) + halt.errorf("cannot decode signed integer: %s: %x/%s", msgBadDesc, d.bd, mpdesc(d.bd)) } } d.bdRead = false @@ -728,63 +607,63 @@ func (d *msgpackDecDriver) DecodeInt64() (i int64) { } // uint can be decoded from msgpack type: intXXX or uintXXX -func (d *msgpackDecDriver) DecodeUint64() (ui uint64) { +func (d *msgpackDecDriver[T]) DecodeUint64() (ui uint64) { if d.advanceNil() { return } switch d.bd { case mpUint8: - ui = uint64(d.d.decRd.readn1()) + ui = uint64(d.r.readn1()) case mpUint16: - ui = uint64(bigen.Uint16(d.d.decRd.readn2())) + ui = uint64(bigen.Uint16(d.r.readn2())) case mpUint32: - ui = uint64(bigen.Uint32(d.d.decRd.readn4())) + ui = uint64(bigen.Uint32(d.r.readn4())) case mpUint64: - ui = bigen.Uint64(d.d.decRd.readn8()) + ui = bigen.Uint64(d.r.readn8()) case mpInt8: - if i := int64(int8(d.d.decRd.readn1())); i >= 0 { + if i := int64(int8(d.r.readn1())); i >= 0 { ui = uint64(i) } else { - d.d.errorf("assigning negative signed value: %v, to unsigned type", i) + halt.errorf("assigning negative signed value: %v, to unsigned type", i) } case mpInt16: - if i := int64(int16(bigen.Uint16(d.d.decRd.readn2()))); i >= 0 { + if i := int64(int16(bigen.Uint16(d.r.readn2()))); i >= 0 { ui = uint64(i) } else { - d.d.errorf("assigning negative signed value: %v, to unsigned type", i) + halt.errorf("assigning negative signed value: %v, to unsigned type", i) } case mpInt32: - if i := int64(int32(bigen.Uint32(d.d.decRd.readn4()))); i >= 0 { + if i := int64(int32(bigen.Uint32(d.r.readn4()))); i >= 0 { ui = uint64(i) } else { - d.d.errorf("assigning negative signed value: %v, to unsigned type", i) + halt.errorf("assigning negative signed value: %v, to unsigned type", i) } case mpInt64: - if i := int64(bigen.Uint64(d.d.decRd.readn8())); i >= 0 { + if i := int64(bigen.Uint64(d.r.readn8())); i >= 0 { ui = uint64(i) } else { - d.d.errorf("assigning negative signed value: %v, to unsigned type", i) + halt.errorf("assigning negative signed value: %v, to unsigned type", i) } case mpFloat: if f := d.decFloat4Int32(); f >= 0 { ui = uint64(f) } else { - d.d.errorf("assigning negative float value: %v, to unsigned type", f) + halt.errorf("assigning negative float value: %v, to unsigned type", f) } case mpDouble: if f := d.decFloat4Int64(); f >= 0 { ui = uint64(f) } else { - d.d.errorf("assigning negative float value: %v, to unsigned type", f) + halt.errorf("assigning negative float value: %v, to unsigned type", f) } default: switch { case d.bd >= mpPosFixNumMin && d.bd <= mpPosFixNumMax: ui = uint64(d.bd) case d.bd >= mpNegFixNumMin && d.bd <= mpNegFixNumMax: - d.d.errorf("assigning negative signed value: %v, to unsigned type", int(d.bd)) + halt.errorf("assigning negative signed value: %v, to unsigned type", int(d.bd)) default: - d.d.errorf("cannot decode unsigned integer: %s: %x/%s", msgBadDesc, d.bd, mpdesc(d.bd)) + halt.errorf("cannot decode unsigned integer: %s: %x/%s", msgBadDesc, d.bd, mpdesc(d.bd)) } } d.bdRead = false @@ -792,14 +671,14 @@ func (d *msgpackDecDriver) DecodeUint64() (ui uint64) { } // float can either be decoded from msgpack type: float, double or intX -func (d *msgpackDecDriver) DecodeFloat64() (f float64) { +func (d *msgpackDecDriver[T]) DecodeFloat64() (f float64) { if d.advanceNil() { return } if d.bd == mpFloat { - f = float64(math.Float32frombits(bigen.Uint32(d.d.decRd.readn4()))) + f = float64(math.Float32frombits(bigen.Uint32(d.r.readn4()))) } else if d.bd == mpDouble { - f = math.Float64frombits(bigen.Uint64(d.d.decRd.readn8())) + f = math.Float64frombits(bigen.Uint64(d.r.readn8())) } else { f = float64(d.DecodeInt64()) } @@ -808,7 +687,7 @@ func (d *msgpackDecDriver) DecodeFloat64() (f float64) { } // bool can be decoded from bool, fixnum 0 or 1. -func (d *msgpackDecDriver) DecodeBool() (b bool) { +func (d *msgpackDecDriver[T]) DecodeBool() (b bool) { if d.advanceNil() { return } @@ -817,18 +696,18 @@ func (d *msgpackDecDriver) DecodeBool() (b bool) { } else if d.bd == mpTrue || d.bd == 1 { b = true } else { - d.d.errorf("cannot decode bool: %s: %x/%s", msgBadDesc, d.bd, mpdesc(d.bd)) + halt.errorf("cannot decode bool: %s: %x/%s", msgBadDesc, d.bd, mpdesc(d.bd)) } d.bdRead = false return } -func (d *msgpackDecDriver) DecodeBytes(bs []byte) (bsOut []byte) { - d.d.decByteState = decByteStateNone +func (d *msgpackDecDriver[T]) DecodeBytes() (bs []byte, state dBytesAttachState) { if d.advanceNil() { return } + var cond bool bd := d.bd var clen int if bd == mpBin8 || bd == mpBin16 || bd == mpBin32 { @@ -838,58 +717,43 @@ func (d *msgpackDecDriver) DecodeBytes(bs []byte) (bsOut []byte) { clen = d.readContainerLen(msgpackContainerStr) // string/raw } else if bd == mpArray16 || bd == mpArray32 || (bd >= mpFixArrayMin && bd <= mpFixArrayMax) { - // check if an "array" of uint8's - if bs == nil { - d.d.decByteState = decByteStateReuseBuf - bs = d.d.b[:] - } - // bsOut, _ = fastpathTV.DecSliceUint8V(bs, true, d.d) slen := d.ReadArrayStart() - var changed bool - if bs, changed = usableByteSlice(bs, slen); changed { - d.d.decByteState = decByteStateNone - } + bs, cond = usableByteSlice(d.d.buf, slen) for i := 0; i < len(bs); i++ { bs[i] = uint8(chkOvf.UintV(d.DecodeUint64(), 8)) } for i := len(bs); i < slen; i++ { bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) } - return bs + if cond { + d.d.buf = bs + } + state = dBytesAttachBuffer + return } else { - d.d.errorf("invalid byte descriptor for decoding bytes, got: 0x%x", d.bd) + halt.errorf("invalid byte descriptor for decoding bytes, got: 0x%x", d.bd) } d.bdRead = false - if d.d.zerocopy() { - d.d.decByteState = decByteStateZerocopy - return d.d.decRd.rb.readx(uint(clen)) - } - if bs == nil { - d.d.decByteState = decByteStateReuseBuf - bs = d.d.b[:] - } - return decByteSlice(d.d.r(), clen, d.h.MaxInitLen, bs) + bs, cond = d.r.readxb(uint(clen)) + state = d.d.attachState(cond) + return } -func (d *msgpackDecDriver) DecodeStringAsBytes() (s []byte) { - s = d.DecodeBytes(nil) - if d.h.ValidateUnicode && !utf8.Valid(s) { - d.d.errorf("DecodeStringAsBytes: invalid UTF-8: %s", s) +func (d *msgpackDecDriver[T]) DecodeStringAsBytes() (out []byte, state dBytesAttachState) { + out, state = d.DecodeBytes() + if d.h.ValidateUnicode && !utf8.Valid(out) { + halt.errorf("DecodeStringAsBytes: invalid UTF-8: %s", out) } return } -func (d *msgpackDecDriver) descBd() string { - return sprintf("%v (%s)", d.bd, mpdesc(d.bd)) -} - -func (d *msgpackDecDriver) readNextBd() { - d.bd = d.d.decRd.readn1() +func (d *msgpackDecDriver[T]) readNextBd() { + d.bd = d.r.readn1() d.bdRead = true } -func (d *msgpackDecDriver) advanceNil() (null bool) { +func (d *msgpackDecDriver[T]) advanceNil() (null bool) { if !d.bdRead { d.readNextBd() } @@ -900,11 +764,11 @@ func (d *msgpackDecDriver) advanceNil() (null bool) { return } -func (d *msgpackDecDriver) TryNil() (v bool) { +func (d *msgpackDecDriver[T]) TryNil() (v bool) { return d.advanceNil() } -func (d *msgpackDecDriver) ContainerType() (vt valueType) { +func (d *msgpackDecDriver[T]) ContainerType() (vt valueType) { if !d.bdRead { d.readNextBd() } @@ -928,38 +792,38 @@ func (d *msgpackDecDriver) ContainerType() (vt valueType) { return valueTypeUnset } -func (d *msgpackDecDriver) readContainerLen(ct msgpackContainerType) (clen int) { +func (d *msgpackDecDriver[T]) readContainerLen(ct msgpackContainerType) (clen int) { bd := d.bd if bd == ct.b8 { - clen = int(d.d.decRd.readn1()) + clen = int(d.r.readn1()) } else if bd == ct.b16 { - clen = int(bigen.Uint16(d.d.decRd.readn2())) + clen = int(bigen.Uint16(d.r.readn2())) } else if bd == ct.b32 { - clen = int(bigen.Uint32(d.d.decRd.readn4())) + clen = int(bigen.Uint32(d.r.readn4())) } else if (ct.bFixMin & bd) == ct.bFixMin { clen = int(ct.bFixMin ^ bd) } else { - d.d.errorf("cannot read container length: %s: hex: %x, decimal: %d", msgBadDesc, bd, bd) + halt.errorf("cannot read container length: %s: hex: %x, decimal: %d", msgBadDesc, bd, bd) } d.bdRead = false return } -func (d *msgpackDecDriver) ReadMapStart() int { +func (d *msgpackDecDriver[T]) ReadMapStart() int { if d.advanceNil() { return containerLenNil } return d.readContainerLen(msgpackContainerMap) } -func (d *msgpackDecDriver) ReadArrayStart() int { +func (d *msgpackDecDriver[T]) ReadArrayStart() int { if d.advanceNil() { return containerLenNil } return d.readContainerLen(msgpackContainerList) } -func (d *msgpackDecDriver) readExtLen() (clen int) { +func (d *msgpackDecDriver[T]) readExtLen() (clen int) { switch d.bd { case mpFixExt1: clen = 1 @@ -972,18 +836,18 @@ func (d *msgpackDecDriver) readExtLen() (clen int) { case mpFixExt16: clen = 16 case mpExt8: - clen = int(d.d.decRd.readn1()) + clen = int(d.r.readn1()) case mpExt16: - clen = int(bigen.Uint16(d.d.decRd.readn2())) + clen = int(bigen.Uint16(d.r.readn2())) case mpExt32: - clen = int(bigen.Uint32(d.d.decRd.readn4())) + clen = int(bigen.Uint32(d.r.readn4())) default: - d.d.errorf("decoding ext bytes: found unexpected byte: %x", d.bd) + halt.errorf("decoding ext bytes: found unexpected byte: %x", d.bd) } return } -func (d *msgpackDecDriver) DecodeTime() (t time.Time) { +func (d *msgpackDecDriver[T]) DecodeTime() (t time.Time) { // decode time from string bytes or ext if d.advanceNil() { return @@ -998,240 +862,158 @@ func (d *msgpackDecDriver) DecodeTime() (t time.Time) { } else { // expect to see mpFixExt4,-1 OR mpFixExt8,-1 OR mpExt8,12,-1 d.bdRead = false - b2 := d.d.decRd.readn1() + b2 := d.r.readn1() if d.bd == mpFixExt4 && b2 == mpTimeExtTagU { clen = 4 } else if d.bd == mpFixExt8 && b2 == mpTimeExtTagU { clen = 8 - } else if d.bd == mpExt8 && b2 == 12 && d.d.decRd.readn1() == mpTimeExtTagU { + } else if d.bd == mpExt8 && b2 == 12 && d.r.readn1() == mpTimeExtTagU { clen = 12 } else { - d.d.errorf("invalid stream for decoding time as extension: got 0x%x, 0x%x", d.bd, b2) + halt.errorf("invalid stream for decoding time as extension: got 0x%x, 0x%x", d.bd, b2) } } return d.decodeTime(clen) } -func (d *msgpackDecDriver) decodeTime(clen int) (t time.Time) { +func (d *msgpackDecDriver[T]) decodeTime(clen int) (t time.Time) { d.bdRead = false switch clen { case 4: - t = time.Unix(int64(bigen.Uint32(d.d.decRd.readn4())), 0).UTC() + t = time.Unix(int64(bigen.Uint32(d.r.readn4())), 0).UTC() case 8: - tv := bigen.Uint64(d.d.decRd.readn8()) + tv := bigen.Uint64(d.r.readn8()) t = time.Unix(int64(tv&0x00000003ffffffff), int64(tv>>34)).UTC() case 12: - nsec := bigen.Uint32(d.d.decRd.readn4()) - sec := bigen.Uint64(d.d.decRd.readn8()) + nsec := bigen.Uint32(d.r.readn4()) + sec := bigen.Uint64(d.r.readn8()) t = time.Unix(int64(sec), int64(nsec)).UTC() default: - d.d.errorf("invalid length of bytes for decoding time - expecting 4 or 8 or 12, got %d", clen) + halt.errorf("invalid length of bytes for decoding time - expecting 4 or 8 or 12, got %d", clen) } return } -func (d *msgpackDecDriver) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { - if xtag > 0xff { - d.d.errorf("ext: tag must be <= 0xff; got: %v", xtag) - } - if d.advanceNil() { +func (d *msgpackDecDriver[T]) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + xbs, _, _, ok := d.decodeExtV(ext != nil, xtag) + if !ok { return } - xbs, realxtag1, zerocopy := d.decodeExtV(ext != nil, uint8(xtag)) - realxtag := uint64(realxtag1) - if ext == nil { - re := rv.(*RawExt) - re.Tag = realxtag - re.setData(xbs, zerocopy) - } else if ext == SelfExt { - d.d.sideDecode(rv, basetype, xbs) + if ext == SelfExt { + sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, true) }) } else { ext.ReadExt(rv, xbs) } } -func (d *msgpackDecDriver) decodeExtV(verifyTag bool, tag byte) (xbs []byte, xtag byte, zerocopy bool) { +func (d *msgpackDecDriver[T]) DecodeRawExt(re *RawExt) { + xbs, realxtag, state, ok := d.decodeExtV(false, 0) + if !ok { + return + } + re.Tag = uint64(realxtag) + re.setData(xbs, state >= dBytesAttachViewZerocopy) +} + +func (d *msgpackDecDriver[T]) decodeExtV(verifyTag bool, xtagIn uint64) (xbs []byte, xtag byte, bstate dBytesAttachState, ok bool) { + if xtagIn > 0xff { + halt.errorf("ext: tag must be <= 0xff; got: %v", xtagIn) + } + if d.advanceNil() { + return + } + tag := uint8(xtagIn) xbd := d.bd if xbd == mpBin8 || xbd == mpBin16 || xbd == mpBin32 { - xbs = d.DecodeBytes(nil) + xbs, bstate = d.DecodeBytes() } else if xbd == mpStr8 || xbd == mpStr16 || xbd == mpStr32 || (xbd >= mpFixStrMin && xbd <= mpFixStrMax) { - xbs = d.DecodeStringAsBytes() + xbs, bstate = d.DecodeStringAsBytes() } else { clen := d.readExtLen() - xtag = d.d.decRd.readn1() + xtag = d.r.readn1() if verifyTag && xtag != tag { - d.d.errorf("wrong extension tag - got %b, expecting %v", xtag, tag) - } - if d.d.bytes { - xbs = d.d.decRd.rb.readx(uint(clen)) - zerocopy = true - } else { - xbs = decByteSlice(d.d.r(), clen, d.d.h.MaxInitLen, d.d.b[:]) + halt.errorf("wrong extension tag - got %b, expecting %v", xtag, tag) } + xbs, ok = d.r.readxb(uint(clen)) + bstate = d.d.attachState(ok) + // zerocopy = d.d.bytes } d.bdRead = false + ok = true return } -//-------------------------------------------------- - -// MsgpackHandle is a Handle for the Msgpack Schema-Free Encoding Format. -type MsgpackHandle struct { - binaryEncodingType - BasicHandle - - // NoFixedNum says to output all signed integers as 2-bytes, never as 1-byte fixednum. - NoFixedNum bool - - // WriteExt controls whether the new spec is honored. - // - // With WriteExt=true, we can encode configured extensions with extension tags - // and encode string/[]byte/extensions in a way compatible with the new spec - // but incompatible with the old spec. - // - // For compatibility with the old spec, set WriteExt=false. - // - // With WriteExt=false: - // configured extensions are serialized as raw bytes (not msgpack extensions). - // reserved byte descriptors like Str8 and those enabling the new msgpack Binary type - // are not encoded. - WriteExt bool - - // PositiveIntUnsigned says to encode positive integers as unsigned. - PositiveIntUnsigned bool -} - -// Name returns the name of the handle: msgpack -func (h *MsgpackHandle) Name() string { return "msgpack" } - -func (h *MsgpackHandle) desc(bd byte) string { return mpdesc(bd) } - -func (h *MsgpackHandle) newEncDriver() encDriver { - var e = &msgpackEncDriver{h: h} - e.e.e = e - e.e.init(h) - e.reset() - return e -} - -func (h *MsgpackHandle) newDecDriver() decDriver { - d := &msgpackDecDriver{h: h} - d.d.d = d - d.d.init(h) - d.reset() - return d -} - -//-------------------------------------------------- +// ---- +// +// The following below are similar across all format files (except for the format name). +// +// We keep them together here, so that we can easily copy and compare. -type msgpackSpecRpcCodec struct { - rpcCodec -} +// ---- -// /////////////// Spec RPC Codec /////////////////// -func (c *msgpackSpecRpcCodec) WriteRequest(r *rpc.Request, body interface{}) error { - // WriteRequest can write to both a Go service, and other services that do - // not abide by the 1 argument rule of a Go service. - // We discriminate based on if the body is a MsgpackSpecRpcMultiArgs - var bodyArr []interface{} - if m, ok := body.(MsgpackSpecRpcMultiArgs); ok { - bodyArr = ([]interface{})(m) +func (d *msgpackEncDriver[T]) init(hh Handle, shared *encoderBase, enc encoderI) (fp interface{}) { + callMake(&d.w) + d.h = hh.(*MsgpackHandle) + d.e = shared + if shared.bytes { + fp = msgpackFpEncBytes } else { - bodyArr = []interface{}{body} + fp = msgpackFpEncIO } - r2 := []interface{}{0, uint32(r.Seq), r.ServiceMethod, bodyArr} - return c.write(r2) + // d.w.init() + d.init2(enc) + return } -func (c *msgpackSpecRpcCodec) WriteResponse(r *rpc.Response, body interface{}) error { - var moe interface{} - if r.Error != "" { - moe = r.Error - } - if moe != nil && body != nil { - body = nil - } - r2 := []interface{}{1, uint32(r.Seq), moe, body} - return c.write(r2) -} +func (e *msgpackEncDriver[T]) writeBytesAsis(b []byte) { e.w.writeb(b) } -func (c *msgpackSpecRpcCodec) ReadResponseHeader(r *rpc.Response) error { - return c.parseCustomHeader(1, &r.Seq, &r.Error) -} +// func (e *msgpackEncDriver[T]) writeStringAsisDblQuoted(v string) { e.w.writeqstr(v) } -func (c *msgpackSpecRpcCodec) ReadRequestHeader(r *rpc.Request) error { - return c.parseCustomHeader(0, &r.Seq, &r.ServiceMethod) -} +func (e *msgpackEncDriver[T]) writerEnd() { e.w.end() } -func (c *msgpackSpecRpcCodec) ReadRequestBody(body interface{}) error { - if body == nil { // read and discard - return c.read(nil) - } - bodyArr := []interface{}{body} - return c.read(&bodyArr) +func (e *msgpackEncDriver[T]) resetOutBytes(out *[]byte) { + e.w.resetBytes(*out, out) } -func (c *msgpackSpecRpcCodec) parseCustomHeader(expectTypeByte byte, msgid *uint64, methodOrError *string) (err error) { - if cls := c.cls.load(); cls.closed { - return io.ErrUnexpectedEOF - } - - // We read the response header by hand - // so that the body can be decoded on its own from the stream at a later time. - - const fia byte = 0x94 //four item array descriptor value +func (e *msgpackEncDriver[T]) resetOutIO(out io.Writer) { + e.w.resetIO(out, e.h.WriterBufferSize, &e.e.blist) +} - var ba [1]byte - var n int - for { - n, err = c.r.Read(ba[:]) - if err != nil { - return - } - if n == 1 { - break - } - } +// ---- - var b = ba[0] - if b != fia { - err = fmt.Errorf("not array - %s %x/%s", msgBadDesc, b, mpdesc(b)) +func (d *msgpackDecDriver[T]) init(hh Handle, shared *decoderBase, dec decoderI) (fp interface{}) { + callMake(&d.r) + d.h = hh.(*MsgpackHandle) + d.d = shared + if shared.bytes { + fp = msgpackFpDecBytes } else { - err = c.read(&b) - if err == nil { - if b != expectTypeByte { - err = fmt.Errorf("%s - expecting %v but got %x/%s", msgBadDesc, expectTypeByte, b, mpdesc(b)) - } else { - err = c.read(msgid) - if err == nil { - err = c.read(methodOrError) - } - } - } + fp = msgpackFpDecIO } + // d.r.init() + d.init2(dec) return } -//-------------------------------------------------- - -// msgpackSpecRpc is the implementation of Rpc that uses custom communication protocol -// as defined in the msgpack spec at https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md -type msgpackSpecRpc struct{} +func (d *msgpackDecDriver[T]) NumBytesRead() int { + return int(d.r.numread()) +} -// MsgpackSpecRpc implements Rpc using the communication protocol defined in -// the msgpack spec at https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md . -// -// See GoRpc documentation, for information on buffering for better performance. -var MsgpackSpecRpc msgpackSpecRpc +func (d *msgpackDecDriver[T]) resetInBytes(in []byte) { + d.r.resetBytes(in) +} -func (x msgpackSpecRpc) ServerCodec(conn io.ReadWriteCloser, h Handle) rpc.ServerCodec { - return &msgpackSpecRpcCodec{newRPCCodec(conn, h)} +func (d *msgpackDecDriver[T]) resetInIO(r io.Reader) { + d.r.resetIO(r, d.h.ReaderBufferSize, d.h.MaxInitLen, &d.d.blist) } -func (x msgpackSpecRpc) ClientCodec(conn io.ReadWriteCloser, h Handle) rpc.ClientCodec { - return &msgpackSpecRpcCodec{newRPCCodec(conn, h)} +// ---- (custom stanza) + +func (d *msgpackDecDriver[T]) descBd() string { + return sprintf("%v (%s)", d.bd, mpdesc(d.bd)) } -var _ decDriver = (*msgpackDecDriver)(nil) -var _ encDriver = (*msgpackEncDriver)(nil) +func (d *msgpackDecDriver[T]) DecodeFloat32() (f float32) { + return float32(chkOvf.Float32V(d.DecodeFloat64())) +} diff --git a/vendor/github.com/ugorji/go/codec/msgpack.mono.generated.go b/vendor/github.com/ugorji/go/codec/msgpack.mono.generated.go new file mode 100644 index 0000000..ff2fe4a --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/msgpack.mono.generated.go @@ -0,0 +1,8046 @@ +//go:build !notmono && !codec.notmono + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "encoding" + + "io" + "math" + "reflect" + "slices" + "sort" + "strconv" + "sync" + "time" + "unicode/utf8" +) + +type helperEncDriverMsgpackBytes struct{} +type encFnMsgpackBytes struct { + i encFnInfo + fe func(*encoderMsgpackBytes, *encFnInfo, reflect.Value) +} +type encRtidFnMsgpackBytes struct { + rtid uintptr + fn *encFnMsgpackBytes +} +type encoderMsgpackBytes struct { + dh helperEncDriverMsgpackBytes + fp *fastpathEsMsgpackBytes + e msgpackEncDriverBytes + encoderBase +} +type helperDecDriverMsgpackBytes struct{} +type decFnMsgpackBytes struct { + i decFnInfo + fd func(*decoderMsgpackBytes, *decFnInfo, reflect.Value) +} +type decRtidFnMsgpackBytes struct { + rtid uintptr + fn *decFnMsgpackBytes +} +type decoderMsgpackBytes struct { + dh helperDecDriverMsgpackBytes + fp *fastpathDsMsgpackBytes + d msgpackDecDriverBytes + decoderBase +} +type msgpackEncDriverBytes struct { + noBuiltInTypes + encDriverNoopContainerWriter + encDriverNoState + encDriverContainerNoTrackerT + encInit2er + + h *MsgpackHandle + e *encoderBase + w bytesEncAppender +} +type msgpackDecDriverBytes struct { + decDriverNoopContainerReader + decDriverNoopNumberHelper + decInit2er + + h *MsgpackHandle + d *decoderBase + r bytesDecReader + + bdAndBdread + + noBuiltInTypes +} + +func (e *encoderMsgpackBytes) rawExt(_ *encFnInfo, rv reflect.Value) { + if re := rv2i(rv).(*RawExt); re == nil { + e.e.EncodeNil() + } else { + e.e.EncodeRawExt(re) + } +} + +func (e *encoderMsgpackBytes) ext(f *encFnInfo, rv reflect.Value) { + e.e.EncodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (e *encoderMsgpackBytes) selferMarshal(_ *encFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecEncodeSelf(&Encoder{e}) +} + +func (e *encoderMsgpackBytes) binaryMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.BinaryMarshaler).MarshalBinary() + e.marshalRaw(bs, fnerr) +} + +func (e *encoderMsgpackBytes) textMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.TextMarshaler).MarshalText() + e.marshalUtf8(bs, fnerr) +} + +func (e *encoderMsgpackBytes) jsonMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(jsonMarshaler).MarshalJSON() + e.marshalAsis(bs, fnerr) +} + +func (e *encoderMsgpackBytes) raw(_ *encFnInfo, rv reflect.Value) { + e.rawBytes(rv2i(rv).(Raw)) +} + +func (e *encoderMsgpackBytes) encodeComplex64(v complex64) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat32(real(v)) +} + +func (e *encoderMsgpackBytes) encodeComplex128(v complex128) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat64(real(v)) +} + +func (e *encoderMsgpackBytes) kBool(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeBool(rvGetBool(rv)) +} + +func (e *encoderMsgpackBytes) kTime(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeTime(rvGetTime(rv)) +} + +func (e *encoderMsgpackBytes) kString(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeString(rvGetString(rv)) +} + +func (e *encoderMsgpackBytes) kFloat32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat32(rvGetFloat32(rv)) +} + +func (e *encoderMsgpackBytes) kFloat64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat64(rvGetFloat64(rv)) +} + +func (e *encoderMsgpackBytes) kComplex64(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex64(rvGetComplex64(rv)) +} + +func (e *encoderMsgpackBytes) kComplex128(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex128(rvGetComplex128(rv)) +} + +func (e *encoderMsgpackBytes) kInt(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt(rv))) +} + +func (e *encoderMsgpackBytes) kInt8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt8(rv))) +} + +func (e *encoderMsgpackBytes) kInt16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt16(rv))) +} + +func (e *encoderMsgpackBytes) kInt32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt32(rv))) +} + +func (e *encoderMsgpackBytes) kInt64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt64(rv))) +} + +func (e *encoderMsgpackBytes) kUint(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint(rv))) +} + +func (e *encoderMsgpackBytes) kUint8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint8(rv))) +} + +func (e *encoderMsgpackBytes) kUint16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint16(rv))) +} + +func (e *encoderMsgpackBytes) kUint32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint32(rv))) +} + +func (e *encoderMsgpackBytes) kUint64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint64(rv))) +} + +func (e *encoderMsgpackBytes) kUintptr(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUintptr(rv))) +} + +func (e *encoderMsgpackBytes) kSeqFn(rt reflect.Type) (fn *encFnMsgpackBytes) { + + if rt = baseRT(rt); rt.Kind() != reflect.Interface { + fn = e.fn(rt) + } + return +} + +func (e *encoderMsgpackBytes) kArrayWMbs(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(l) + e.mapStart(l >> 1) + + var fn *encFnMsgpackBytes + builtin := ti.tielem.flagEncBuiltin + if !builtin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerMapKey + e.e.WriteMapElemKey(true) + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(false) + } else { + e.mapElemValue() + } + } + e.c = 0 + e.e.WriteMapEnd() + +} + +func (e *encoderMsgpackBytes) kArrayW(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l <= 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(l) + + var fn *encFnMsgpackBytes + if !ti.tielem.flagEncBuiltin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerArrayElem + e.e.WriteArrayElem(true) + builtin := ti.tielem.flagEncBuiltin + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + e.c = containerArrayElem + e.e.WriteArrayElem(false) + } + + e.c = 0 + e.e.WriteArrayEnd() +} + +func (e *encoderMsgpackBytes) kChan(f *encFnInfo, rv reflect.Value) { + if f.ti.chandir&uint8(reflect.RecvDir) == 0 { + halt.errorStr("send-only channel cannot be encoded") + } + if !f.ti.mbs && uint8TypId == rt2id(f.ti.elem) { + e.kSliceBytesChan(rv) + return + } + rtslice := reflect.SliceOf(f.ti.elem) + rv = chanToSlice(rv, rtslice, e.h.ChanRecvTimeout) + ti := e.h.getTypeInfo(rt2id(rtslice), rtslice) + if f.ti.mbs { + e.kArrayWMbs(rv, ti, true) + } else { + e.kArrayW(rv, ti, true) + } +} + +func (e *encoderMsgpackBytes) kSlice(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, true) + } else if f.ti.rtid == uint8SliceTypId || uint8TypId == rt2id(f.ti.elem) { + + e.e.EncodeBytes(rvGetBytes(rv)) + } else { + e.kArrayW(rv, f.ti, true) + } +} + +func (e *encoderMsgpackBytes) kArray(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, false) + } else if handleBytesWithinKArray && uint8TypId == rt2id(f.ti.elem) { + e.e.EncodeStringBytesRaw(rvGetArrayBytes(rv, nil)) + } else { + e.kArrayW(rv, f.ti, false) + } +} + +func (e *encoderMsgpackBytes) kSliceBytesChan(rv reflect.Value) { + + bs0 := e.blist.peek(32, true) + bs := bs0 + + irv := rv2i(rv) + ch, ok := irv.(<-chan byte) + if !ok { + ch = irv.(chan byte) + } + +L1: + switch timeout := e.h.ChanRecvTimeout; { + case timeout == 0: + for { + select { + case b := <-ch: + bs = append(bs, b) + default: + break L1 + } + } + case timeout > 0: + tt := time.NewTimer(timeout) + for { + select { + case b := <-ch: + bs = append(bs, b) + case <-tt.C: + + break L1 + } + } + default: + for b := range ch { + bs = append(bs, b) + } + } + + e.e.EncodeBytes(bs) + e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.blist.put(bs0) + } +} + +func (e *encoderMsgpackBytes) kStructFieldKey(keyType valueType, encName string) { + + if keyType == valueTypeString { + e.e.EncodeString(encName) + } else if keyType == valueTypeInt { + e.e.EncodeInt(must.Int(strconv.ParseInt(encName, 10, 64))) + } else if keyType == valueTypeUint { + e.e.EncodeUint(must.Uint(strconv.ParseUint(encName, 10, 64))) + } else if keyType == valueTypeFloat { + e.e.EncodeFloat64(must.Float(strconv.ParseFloat(encName, 64))) + } else { + halt.errorStr2("invalid struct key type: ", keyType.String()) + } + +} + +func (e *encoderMsgpackBytes) kStructSimple(f *encFnInfo, rv reflect.Value) { + _ = e.e + tisfi := f.ti.sfi.source() + + chkCirRef := e.h.CheckCircularRef + var si *structFieldInfo + var j int + + if f.ti.toArray || e.h.StructToArray { + if len(tisfi) == 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } else { + if len(tisfi) == 0 { + e.e.WriteMapEmpty() + return + } + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + e.mapStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.EncodeStringNoEscape4Json(si.encName) + e.mapElemValue() + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteMapEnd() + } +} + +func (e *encoderMsgpackBytes) kStruct(f *encFnInfo, rv reflect.Value) { + _ = e.e + ti := f.ti + toMap := !(ti.toArray || e.h.StructToArray) + var mf map[string]interface{} + if ti.flagMissingFielder { + toMap = true + mf = rv2i(rv).(MissingFielder).CodecMissingFields() + } else if ti.flagMissingFielderPtr { + toMap = true + if rv.CanAddr() { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder).CodecMissingFields() + } else { + mf = rv2i(e.addrRV(rv, ti.rt, ti.ptr)).(MissingFielder).CodecMissingFields() + } + } + newlen := len(mf) + tisfi := ti.sfi.source() + newlen += len(tisfi) + + var fkvs = e.slist.get(newlen)[:newlen] + + recur := e.h.RecursiveEmptyCheck + chkCirRef := e.h.CheckCircularRef + + var xlen int + + var kv sfiRv + var j int + var sf encStructFieldObj + if toMap { + newlen = 0 + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + for _, si := range tisfi { + + if si.omitEmpty { + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyValue(kv.r, e.h.TypeInfos, recur) { + continue + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[newlen] = kv + newlen++ + } + + var mf2s []stringIntf + if len(mf) != 0 { + mf2s = make([]stringIntf, 0, len(mf)) + for k, v := range mf { + if k == "" { + continue + } + if ti.infoFieldOmitempty && isEmptyValue(reflect.ValueOf(v), e.h.TypeInfos, recur) { + continue + } + mf2s = append(mf2s, stringIntf{k, v}) + } + } + + xlen = newlen + len(mf2s) + if xlen == 0 { + e.e.WriteMapEmpty() + goto END + } + + e.mapStart(xlen) + + if len(mf2s) != 0 && e.h.Canonical { + mf2w := make([]encStructFieldObj, newlen+len(mf2s)) + for j = 0; j < newlen; j++ { + kv = fkvs[j] + mf2w[j] = encStructFieldObj{kv.v.encName, kv.r, nil, true, + !kv.v.encNameEscape4Json, kv.v.encBuiltin} + } + for _, v := range mf2s { + mf2w[j] = encStructFieldObj{v.v, reflect.Value{}, v.i, false, false, false} + j++ + } + sort.Sort((encStructFieldObjSlice)(mf2w)) + for j, sf = range mf2w { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && sf.noEsc4json { + e.e.EncodeStringNoEscape4Json(sf.key) + } else { + e.kStructFieldKey(ti.keyType, sf.key) + } + e.mapElemValue() + if sf.isRv { + if sf.builtin { + e.encodeIB(rv2i(baseRVRV(sf.rv))) + } else { + e.encodeValue(sf.rv, nil) + } + } else { + if !e.encodeBuiltin(sf.intf) { + e.encodeR(reflect.ValueOf(sf.intf)) + } + + } + } + } else { + keytyp := ti.keyType + for j = 0; j < newlen; j++ { + kv = fkvs[j] + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && !kv.v.encNameEscape4Json { + e.e.EncodeStringNoEscape4Json(kv.v.encName) + } else { + e.kStructFieldKey(keytyp, kv.v.encName) + } + e.mapElemValue() + if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + for _, v := range mf2s { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.kStructFieldKey(keytyp, v.v) + e.mapElemValue() + if !e.encodeBuiltin(v.i) { + e.encodeR(reflect.ValueOf(v.i)) + } + + j++ + } + } + + e.c = 0 + e.e.WriteMapEnd() + } else { + newlen = len(tisfi) + for i, si := range tisfi { + + if si.omitEmpty { + + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyContainerValue(kv.r, e.h.TypeInfos, recur) { + kv.r = reflect.Value{} + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[i] = kv + } + + if newlen == 0 { + e.e.WriteArrayEmpty() + goto END + } + + e.arrayStart(newlen) + for j = 0; j < newlen; j++ { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + kv = fkvs[j] + if !kv.r.IsValid() { + e.e.EncodeNil() + } else if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } + +END: + + e.slist.put(fkvs) +} + +func (e *encoderMsgpackBytes) kMap(f *encFnInfo, rv reflect.Value) { + _ = e.e + l := rvLenMap(rv) + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.mapStart(l) + + var keyFn, valFn *encFnMsgpackBytes + + ktypeKind := reflect.Kind(f.ti.keykind) + vtypeKind := reflect.Kind(f.ti.elemkind) + + rtval := f.ti.elem + rtvalkind := vtypeKind + for rtvalkind == reflect.Ptr { + rtval = rtval.Elem() + rtvalkind = rtval.Kind() + } + if rtvalkind != reflect.Interface { + valFn = e.fn(rtval) + } + + var rvv = mapAddrLoopvarRV(f.ti.elem, vtypeKind) + + rtkey := f.ti.key + var keyTypeIsString = stringTypId == rt2id(rtkey) + if keyTypeIsString { + keyFn = e.fn(rtkey) + } else { + for rtkey.Kind() == reflect.Ptr { + rtkey = rtkey.Elem() + } + if rtkey.Kind() != reflect.Interface { + keyFn = e.fn(rtkey) + } + } + + if e.h.Canonical { + e.kMapCanonical(f.ti, rv, rvv, keyFn, valFn) + e.c = 0 + e.e.WriteMapEnd() + return + } + + var rvk = mapAddrLoopvarRV(f.ti.key, ktypeKind) + + var it mapIter + mapRange(&it, rv, rvk, rvv, true) + + kbuiltin := f.ti.tikey.flagEncBuiltin + vbuiltin := f.ti.tielem.flagEncBuiltin + for j := 0; it.Next(); j++ { + rv = it.Key() + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if keyTypeIsString { + e.e.EncodeString(rvGetString(rv)) + } else if kbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(rv, keyFn) + } + e.mapElemValue() + rv = it.Value() + if vbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(it.Value(), valFn) + } + } + it.Done() + + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackBytes) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valFn *encFnMsgpackBytes) { + _ = e.e + + rtkey := ti.key + rtkeydecl := rtkey.PkgPath() == "" && rtkey.Name() != "" + + mks := rv.MapKeys() + rtkeyKind := rtkey.Kind() + mparams := getMapReqParams(ti) + + switch rtkeyKind { + case reflect.Bool: + + if len(mks) == 2 && mks[0].Bool() { + mks[0], mks[1] = mks[1], mks[0] + } + for i := range mks { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeBool(mks[i].Bool()) + } else { + e.encodeValueNonNil(mks[i], keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mks[i], rvv, mparams), valFn) + } + case reflect.String: + mksv := make([]orderedRv[string], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rvGetString(k) + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeString(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr: + mksv := make([]orderedRv[uint64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Uint() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeUint(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + mksv := make([]orderedRv[int64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Int() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeInt(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float32: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat32(float32(mksv[i].v)) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float64: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat64(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + default: + if rtkey == timeTyp { + mksv := make([]timeRv, len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rv2i(k).(time.Time) + } + slices.SortFunc(mksv, cmpTimeRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeTime(mksv[i].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + break + } + + bs0 := e.blist.get(len(mks) * 16) + mksv := bs0 + mksbv := make([]bytesRv, len(mks)) + + sideEncode(e.hh, &e.h.sideEncPool, func(se encoderI) { + se.ResetBytes(&mksv) + for i, k := range mks { + v := &mksbv[i] + l := len(mksv) + se.setContainerState(containerMapKey) + se.encodeR(baseRVRV(k)) + se.atEndOfEncode() + se.writerEnd() + v.r = k + v.v = mksv[l:] + } + }) + + slices.SortFunc(mksbv, cmpBytesRv) + for j := range mksbv { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.writeBytesAsis(mksbv[j].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksbv[j].r, rvv, mparams), valFn) + } + e.blist.put(mksv) + if !byteSliceSameData(bs0, mksv) { + e.blist.put(bs0) + } + } +} + +func (e *encoderMsgpackBytes) init(h Handle) { + initHandle(h) + callMake(&e.e) + e.hh = h + e.h = h.getBasicHandle() + + e.err = errEncoderNotInitialized + + e.fp = e.e.init(h, &e.encoderBase, e).(*fastpathEsMsgpackBytes) + + if e.bytes { + e.rtidFn = &e.h.rtidFnsEncBytes + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtBytes + } else { + e.rtidFn = &e.h.rtidFnsEncIO + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtIO + } + + e.reset() +} + +func (e *encoderMsgpackBytes) reset() { + e.e.reset() + if e.ci != nil { + e.ci = e.ci[:0] + } + e.c = 0 + e.calls = 0 + e.seq = 0 + e.err = nil +} + +func (e *encoderMsgpackBytes) Encode(v interface{}) (err error) { + + defer panicValToErr(e, callRecoverSentinel, &e.err, &err, debugging) + e.mustEncode(v) + return +} + +func (e *encoderMsgpackBytes) MustEncode(v interface{}) { + defer panicValToErr(e, callRecoverSentinel, &e.err, nil, true) + e.mustEncode(v) + return +} + +func (e *encoderMsgpackBytes) mustEncode(v interface{}) { + halt.onerror(e.err) + if e.hh == nil { + halt.onerror(errNoFormatHandle) + } + + e.calls++ + if !e.encodeBuiltin(v) { + e.encodeR(reflect.ValueOf(v)) + } + + e.calls-- + if e.calls == 0 { + e.e.atEndOfEncode() + e.e.writerEnd() + } +} + +func (e *encoderMsgpackBytes) encodeI(iv interface{}) { + if !e.encodeBuiltin(iv) { + e.encodeR(reflect.ValueOf(iv)) + } +} + +func (e *encoderMsgpackBytes) encodeIB(iv interface{}) { + if !e.encodeBuiltin(iv) { + + halt.errorStr("[should not happen] invalid type passed to encodeBuiltin") + } +} + +func (e *encoderMsgpackBytes) encodeR(base reflect.Value) { + e.encodeValue(base, nil) +} + +func (e *encoderMsgpackBytes) encodeBuiltin(iv interface{}) (ok bool) { + ok = true + switch v := iv.(type) { + case nil: + e.e.EncodeNil() + + case Raw: + e.rawBytes(v) + case string: + e.e.EncodeString(v) + case bool: + e.e.EncodeBool(v) + case int: + e.e.EncodeInt(int64(v)) + case int8: + e.e.EncodeInt(int64(v)) + case int16: + e.e.EncodeInt(int64(v)) + case int32: + e.e.EncodeInt(int64(v)) + case int64: + e.e.EncodeInt(v) + case uint: + e.e.EncodeUint(uint64(v)) + case uint8: + e.e.EncodeUint(uint64(v)) + case uint16: + e.e.EncodeUint(uint64(v)) + case uint32: + e.e.EncodeUint(uint64(v)) + case uint64: + e.e.EncodeUint(v) + case uintptr: + e.e.EncodeUint(uint64(v)) + case float32: + e.e.EncodeFloat32(v) + case float64: + e.e.EncodeFloat64(v) + case complex64: + e.encodeComplex64(v) + case complex128: + e.encodeComplex128(v) + case time.Time: + e.e.EncodeTime(v) + case []byte: + e.e.EncodeBytes(v) + default: + + ok = !skipFastpathTypeSwitchInDirectCall && e.dh.fastpathEncodeTypeSwitch(iv, e) + } + return +} + +func (e *encoderMsgpackBytes) encodeValue(rv reflect.Value, fn *encFnMsgpackBytes) { + + var ciPushes int + + var rvp reflect.Value + var rvpValid bool + +RV: + switch rv.Kind() { + case reflect.Ptr: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = true + rvp = rv + rv = rv.Elem() + + if e.h.CheckCircularRef && e.ci.canPushElemKind(rv.Kind()) { + e.ci.push(rv2i(rvp)) + ciPushes++ + } + goto RV + case reflect.Interface: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = false + rvp = reflect.Value{} + rv = rv.Elem() + fn = nil + goto RV + case reflect.Map: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteMapEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Slice, reflect.Chan: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteArrayEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Invalid, reflect.Func: + e.e.EncodeNil() + goto END + } + + if fn == nil { + fn = e.fn(rv.Type()) + } + + if !fn.i.addrE { + + } else if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + fn.fe(e, &fn.i, rv) + +END: + if ciPushes > 0 { + e.ci.pop(ciPushes) + } +} + +func (e *encoderMsgpackBytes) encodeValueNonNil(rv reflect.Value, fn *encFnMsgpackBytes) { + + if fn.i.addrE { + if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + } + fn.fe(e, &fn.i, rv) +} + +func (e *encoderMsgpackBytes) encodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + e.encodeValue(baseRV(v), e.fn(t)) + } else { + e.encodeValue(baseRV(v), e.fnNoExt(t)) + } +} + +func (e *encoderMsgpackBytes) marshalUtf8(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.EncodeString(stringView(bs)) + } +} + +func (e *encoderMsgpackBytes) marshalAsis(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.writeBytesAsis(bs) + } +} + +func (e *encoderMsgpackBytes) marshalRaw(bs []byte, fnerr error) { + halt.onerror(fnerr) + e.e.EncodeBytes(bs) +} + +func (e *encoderMsgpackBytes) rawBytes(vv Raw) { + v := []byte(vv) + if !e.h.Raw { + halt.errorBytes("Raw values cannot be encoded: ", v) + } + e.e.writeBytesAsis(v) +} + +func (e *encoderMsgpackBytes) fn(t reflect.Type) *encFnMsgpackBytes { + return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false) +} + +func (e *encoderMsgpackBytes) fnNoExt(t reflect.Type) *encFnMsgpackBytes { + return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true) +} + +func (e *encoderMsgpackBytes) mapStart(length int) { + e.e.WriteMapStart(length) + e.c = containerMapStart +} + +func (e *encoderMsgpackBytes) mapElemValue() { + e.e.WriteMapElemValue() + e.c = containerMapValue +} + +func (e *encoderMsgpackBytes) arrayStart(length int) { + e.e.WriteArrayStart(length) + e.c = containerArrayStart +} + +func (e *encoderMsgpackBytes) writerEnd() { + e.e.writerEnd() +} + +func (e *encoderMsgpackBytes) atEndOfEncode() { + e.e.atEndOfEncode() +} + +func (e *encoderMsgpackBytes) Reset(w io.Writer) { + if e.bytes { + halt.onerror(errEncNoResetBytesWithWriter) + } + e.reset() + if w == nil { + w = io.Discard + } + e.e.resetOutIO(w) +} + +func (e *encoderMsgpackBytes) ResetBytes(out *[]byte) { + if !e.bytes { + halt.onerror(errEncNoResetWriterWithBytes) + } + e.resetBytes(out) +} + +func (e *encoderMsgpackBytes) resetBytes(out *[]byte) { + e.reset() + if out == nil { + out = &bytesEncAppenderDefOut + } + e.e.resetOutBytes(out) +} + +func (helperEncDriverMsgpackBytes) newEncoderBytes(out *[]byte, h Handle) *encoderMsgpackBytes { + var c1 encoderMsgpackBytes + c1.bytes = true + c1.init(h) + c1.ResetBytes(out) + return &c1 +} + +func (helperEncDriverMsgpackBytes) newEncoderIO(out io.Writer, h Handle) *encoderMsgpackBytes { + var c1 encoderMsgpackBytes + c1.bytes = false + c1.init(h) + c1.Reset(out) + return &c1 +} + +func (helperEncDriverMsgpackBytes) encFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathEsMsgpackBytes) (f *fastpathEMsgpackBytes, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperEncDriverMsgpackBytes) encFindRtidFn(s []encRtidFnMsgpackBytes, rtid uintptr) (i uint, fn *encFnMsgpackBytes) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperEncDriverMsgpackBytes) encFromRtidFnSlice(fns *atomicRtidFnSlice) (s []encRtidFnMsgpackBytes) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]encRtidFnMsgpackBytes](v)) + } + return +} + +func (dh helperEncDriverMsgpackBytes) encFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, + x *BasicHandle, fp *fastpathEsMsgpackBytes, checkExt bool) (fn *encFnMsgpackBytes) { + return dh.encFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperEncDriverMsgpackBytes) encFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsMsgpackBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnMsgpackBytes) { + rtid := rt2id(rt) + var sp []encRtidFnMsgpackBytes = dh.encFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.encFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.encFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperEncDriverMsgpackBytes) encFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsMsgpackBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnMsgpackBytes) { + + fn = dh.encFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []encRtidFnMsgpackBytes + mu.Lock() + sp = dh.encFromRtidFnSlice(fns) + + if sp == nil { + sp = []encRtidFnMsgpackBytes{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.encFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]encRtidFnMsgpackBytes, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = encRtidFnMsgpackBytes{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperEncDriverMsgpackBytes) encFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathEsMsgpackBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnMsgpackBytes) { + fn = new(encFnMsgpackBytes) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + if rtid == timeTypId && timeBuiltin { + fn.fe = (*encoderMsgpackBytes).kTime + } else if rtid == rawTypId { + fn.fe = (*encoderMsgpackBytes).raw + } else if rtid == rawExtTypId { + fn.fe = (*encoderMsgpackBytes).rawExt + fi.addrE = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fe = (*encoderMsgpackBytes).ext + if rk == reflect.Struct || rk == reflect.Array { + fi.addrE = true + } + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fe = (*encoderMsgpackBytes).selferMarshal + fi.addrE = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fe = (*encoderMsgpackBytes).binaryMarshal + fi.addrE = ti.flagBinaryMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fe = (*encoderMsgpackBytes).jsonMarshal + fi.addrE = ti.flagJsonMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fe = (*encoderMsgpackBytes).textMarshal + fi.addrE = ti.flagTextMarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fe = fp[idx].encfn + } + } else { + + xfe, xrt := dh.encFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf := xfe.encfn + fn.fe = func(e *encoderMsgpackBytes, xf *encFnInfo, xrv reflect.Value) { + xfnf(e, xf, rvConvert(xrv, xrt)) + } + } + } + } + if fn.fe == nil { + switch rk { + case reflect.Bool: + fn.fe = (*encoderMsgpackBytes).kBool + case reflect.String: + + fn.fe = (*encoderMsgpackBytes).kString + case reflect.Int: + fn.fe = (*encoderMsgpackBytes).kInt + case reflect.Int8: + fn.fe = (*encoderMsgpackBytes).kInt8 + case reflect.Int16: + fn.fe = (*encoderMsgpackBytes).kInt16 + case reflect.Int32: + fn.fe = (*encoderMsgpackBytes).kInt32 + case reflect.Int64: + fn.fe = (*encoderMsgpackBytes).kInt64 + case reflect.Uint: + fn.fe = (*encoderMsgpackBytes).kUint + case reflect.Uint8: + fn.fe = (*encoderMsgpackBytes).kUint8 + case reflect.Uint16: + fn.fe = (*encoderMsgpackBytes).kUint16 + case reflect.Uint32: + fn.fe = (*encoderMsgpackBytes).kUint32 + case reflect.Uint64: + fn.fe = (*encoderMsgpackBytes).kUint64 + case reflect.Uintptr: + fn.fe = (*encoderMsgpackBytes).kUintptr + case reflect.Float32: + fn.fe = (*encoderMsgpackBytes).kFloat32 + case reflect.Float64: + fn.fe = (*encoderMsgpackBytes).kFloat64 + case reflect.Complex64: + fn.fe = (*encoderMsgpackBytes).kComplex64 + case reflect.Complex128: + fn.fe = (*encoderMsgpackBytes).kComplex128 + case reflect.Chan: + fn.fe = (*encoderMsgpackBytes).kChan + case reflect.Slice: + fn.fe = (*encoderMsgpackBytes).kSlice + case reflect.Array: + fn.fe = (*encoderMsgpackBytes).kArray + case reflect.Struct: + if ti.simple { + fn.fe = (*encoderMsgpackBytes).kStructSimple + } else { + fn.fe = (*encoderMsgpackBytes).kStruct + } + case reflect.Map: + fn.fe = (*encoderMsgpackBytes).kMap + case reflect.Interface: + + fn.fe = (*encoderMsgpackBytes).kErr + default: + + fn.fe = (*encoderMsgpackBytes).kErr + } + } + } + return +} +func (d *decoderMsgpackBytes) rawExt(f *decFnInfo, rv reflect.Value) { + d.d.DecodeRawExt(rv2i(rv).(*RawExt)) +} + +func (d *decoderMsgpackBytes) ext(f *decFnInfo, rv reflect.Value) { + d.d.DecodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (d *decoderMsgpackBytes) selferUnmarshal(_ *decFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecDecodeSelf(&Decoder{d}) +} + +func (d *decoderMsgpackBytes) binaryUnmarshal(_ *decFnInfo, rv reflect.Value) { + bm := rv2i(rv).(encoding.BinaryUnmarshaler) + xbs, _ := d.d.DecodeBytes() + fnerr := bm.UnmarshalBinary(xbs) + halt.onerror(fnerr) +} + +func (d *decoderMsgpackBytes) textUnmarshal(_ *decFnInfo, rv reflect.Value) { + tm := rv2i(rv).(encoding.TextUnmarshaler) + fnerr := tm.UnmarshalText(bytesOKs(d.d.DecodeStringAsBytes())) + halt.onerror(fnerr) +} + +func (d *decoderMsgpackBytes) jsonUnmarshal(_ *decFnInfo, rv reflect.Value) { + d.jsonUnmarshalV(rv2i(rv).(jsonUnmarshaler)) +} + +func (d *decoderMsgpackBytes) jsonUnmarshalV(tm jsonUnmarshaler) { + + halt.onerror(tm.UnmarshalJSON(d.d.nextValueBytes())) +} + +func (d *decoderMsgpackBytes) kErr(_ *decFnInfo, rv reflect.Value) { + halt.errorf("unsupported decoding kind: %s, for %#v", rv.Kind(), rv) + +} + +func (d *decoderMsgpackBytes) raw(_ *decFnInfo, rv reflect.Value) { + rvSetBytes(rv, d.rawBytes()) +} + +func (d *decoderMsgpackBytes) kString(_ *decFnInfo, rv reflect.Value) { + rvSetString(rv, d.detach2Str(d.d.DecodeStringAsBytes())) +} + +func (d *decoderMsgpackBytes) kBool(_ *decFnInfo, rv reflect.Value) { + rvSetBool(rv, d.d.DecodeBool()) +} + +func (d *decoderMsgpackBytes) kTime(_ *decFnInfo, rv reflect.Value) { + rvSetTime(rv, d.d.DecodeTime()) +} + +func (d *decoderMsgpackBytes) kFloat32(_ *decFnInfo, rv reflect.Value) { + rvSetFloat32(rv, d.d.DecodeFloat32()) +} + +func (d *decoderMsgpackBytes) kFloat64(_ *decFnInfo, rv reflect.Value) { + rvSetFloat64(rv, d.d.DecodeFloat64()) +} + +func (d *decoderMsgpackBytes) kComplex64(_ *decFnInfo, rv reflect.Value) { + rvSetComplex64(rv, complex(d.d.DecodeFloat32(), 0)) +} + +func (d *decoderMsgpackBytes) kComplex128(_ *decFnInfo, rv reflect.Value) { + rvSetComplex128(rv, complex(d.d.DecodeFloat64(), 0)) +} + +func (d *decoderMsgpackBytes) kInt(_ *decFnInfo, rv reflect.Value) { + rvSetInt(rv, int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))) +} + +func (d *decoderMsgpackBytes) kInt8(_ *decFnInfo, rv reflect.Value) { + rvSetInt8(rv, int8(chkOvf.IntV(d.d.DecodeInt64(), 8))) +} + +func (d *decoderMsgpackBytes) kInt16(_ *decFnInfo, rv reflect.Value) { + rvSetInt16(rv, int16(chkOvf.IntV(d.d.DecodeInt64(), 16))) +} + +func (d *decoderMsgpackBytes) kInt32(_ *decFnInfo, rv reflect.Value) { + rvSetInt32(rv, int32(chkOvf.IntV(d.d.DecodeInt64(), 32))) +} + +func (d *decoderMsgpackBytes) kInt64(_ *decFnInfo, rv reflect.Value) { + rvSetInt64(rv, d.d.DecodeInt64()) +} + +func (d *decoderMsgpackBytes) kUint(_ *decFnInfo, rv reflect.Value) { + rvSetUint(rv, uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderMsgpackBytes) kUintptr(_ *decFnInfo, rv reflect.Value) { + rvSetUintptr(rv, uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderMsgpackBytes) kUint8(_ *decFnInfo, rv reflect.Value) { + rvSetUint8(rv, uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))) +} + +func (d *decoderMsgpackBytes) kUint16(_ *decFnInfo, rv reflect.Value) { + rvSetUint16(rv, uint16(chkOvf.UintV(d.d.DecodeUint64(), 16))) +} + +func (d *decoderMsgpackBytes) kUint32(_ *decFnInfo, rv reflect.Value) { + rvSetUint32(rv, uint32(chkOvf.UintV(d.d.DecodeUint64(), 32))) +} + +func (d *decoderMsgpackBytes) kUint64(_ *decFnInfo, rv reflect.Value) { + rvSetUint64(rv, d.d.DecodeUint64()) +} + +func (d *decoderMsgpackBytes) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) { + + n := d.naked() + d.d.DecodeNaked() + + if decFailNonEmptyIntf && f.ti.numMeth > 0 { + halt.errorf("cannot decode non-nil codec value into nil %v (%v methods)", f.ti.rt, f.ti.numMeth) + } + + switch n.v { + case valueTypeMap: + mtid := d.mtid + if mtid == 0 { + if d.jsms { + mtid = mapStrIntfTypId + } else { + mtid = mapIntfIntfTypId + } + } + if mtid == mapStrIntfTypId { + var v2 map[string]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if mtid == mapIntfIntfTypId { + var v2 map[interface{}]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.mtr { + rvn = reflect.New(d.h.MapType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + + rvn = rvZeroAddrK(d.h.MapType, reflect.Map) + d.decodeValue(rvn, nil) + } + case valueTypeArray: + if d.stid == 0 || d.stid == intfSliceTypId { + var v2 []interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.str { + rvn = reflect.New(d.h.SliceType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + rvn = rvZeroAddrK(d.h.SliceType, reflect.Slice) + d.decodeValue(rvn, nil) + } + if d.h.PreferArrayOverSlice { + rvn = rvGetArray4Slice(rvn) + } + case valueTypeExt: + tag, bytes := n.u, n.l + bfn := d.h.getExtForTag(tag) + var re = RawExt{Tag: tag} + if bytes == nil { + + if bfn == nil { + d.decode(&re.Value) + rvn = rv4iptr(&re).Elem() + } else if bfn.ext == SelfExt { + rvn = rvZeroAddrK(bfn.rt, bfn.rt.Kind()) + d.decodeValue(rvn, d.fnNoExt(bfn.rt)) + } else { + rvn = reflect.New(bfn.rt) + d.interfaceExtConvertAndDecode(rv2i(rvn), bfn.ext) + rvn = rvn.Elem() + } + } else { + + if bfn == nil { + re.setData(bytes, false) + rvn = rv4iptr(&re).Elem() + } else { + rvn = reflect.New(bfn.rt) + if bfn.ext == SelfExt { + sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) }) + } else { + bfn.ext.ReadExt(rv2i(rvn), bytes) + } + rvn = rvn.Elem() + } + } + + if d.h.PreferPointerForStructOrArray && rvn.CanAddr() { + if rk := rvn.Kind(); rk == reflect.Array || rk == reflect.Struct { + rvn = rvn.Addr() + } + } + case valueTypeNil: + + case valueTypeInt: + rvn = n.ri() + case valueTypeUint: + rvn = n.ru() + case valueTypeFloat: + rvn = n.rf() + case valueTypeBool: + rvn = n.rb() + case valueTypeString, valueTypeSymbol: + rvn = n.rs() + case valueTypeBytes: + rvn = n.rl() + case valueTypeTime: + rvn = n.rt() + default: + halt.errorStr2("kInterfaceNaked: unexpected valueType: ", n.v.String()) + } + return +} + +func (d *decoderMsgpackBytes) kInterface(f *decFnInfo, rv reflect.Value) { + + isnilrv := rvIsNil(rv) + + var rvn reflect.Value + + if d.h.InterfaceReset { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } else if !isnilrv { + decSetNonNilRV2Zero4Intf(rv) + } + return + } + } else if isnilrv { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } + return + } + } else { + + rvn = rv.Elem() + } + + canDecode, _ := isDecodeable(rvn) + + if !canDecode { + rvn2 := d.oneShotAddrRV(rvn.Type(), rvn.Kind()) + rvSetDirect(rvn2, rvn) + rvn = rvn2 + } + + d.decodeValue(rvn, nil) + rvSetIntf(rv, rvn) +} + +func (d *decoderMsgpackBytes) kStructField(si *structFieldInfo, rv reflect.Value) { + if d.d.TryNil() { + rv = si.fieldNoAlloc(rv, true) + if rv.IsValid() { + decSetNonNilRV2Zero(rv) + } + } else if si.decBuiltin { + rv = rvAddr(si.fieldAlloc(rv), si.ptrTyp) + d.decode(rv2i(rv)) + } else { + fn := d.fn(si.baseTyp) + rv = si.fieldAlloc(rv) + if fn.i.addrD { + rv = rvAddr(rv, si.ptrTyp) + } + fn.fd(d, &fn.i, rv) + } +} + +func (d *decoderMsgpackBytes) kStructSimple(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var rvkencname []byte + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderMsgpackBytes) kStruct(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + var mf MissingFielder + if ti.flagMissingFielder { + mf = rv2i(rv).(MissingFielder) + } else if ti.flagMissingFielderPtr { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder) + } + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var name2 []byte + var rvkencname []byte + tkt := ti.keyType + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + + if tkt == valueTypeString { + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + } else if tkt == valueTypeInt { + rvkencname = strconv.AppendInt(d.b[:0], d.d.DecodeInt64(), 10) + } else if tkt == valueTypeUint { + rvkencname = strconv.AppendUint(d.b[:0], d.d.DecodeUint64(), 10) + } else if tkt == valueTypeFloat { + rvkencname = strconv.AppendFloat(d.b[:0], d.d.DecodeFloat64(), 'f', -1, 64) + } else { + halt.errorStr2("invalid struct key type: ", ti.keyType.String()) + } + + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else if mf != nil { + + name2 = append(name2[:0], rvkencname...) + var f interface{} + d.decode(&f) + if !mf.CodecMissingField(name2, f) && d.h.ErrorIfNoField { + halt.errorStr2("no matching struct field when decoding stream map with key: ", stringView(name2)) + } + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderMsgpackBytes) kSlice(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + rvCanset := rv.CanSet() + + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + rvbs := rvGetBytes(rv) + if rvCanset { + bs2, bst := d.decodeBytesInto(rvbs, false) + if bst != dBytesIntoParamOut { + rvSetBytes(rv, bs2) + } + } else { + + d.decodeBytesInto(rvbs[:len(rvbs):len(rvbs)], true) + } + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset { + if rvIsNil(rv) { + rvSetDirect(rv, rvSliceZeroCap(ti.rt)) + } else { + rvSetSliceLen(rv, 0) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem0Mut := !scalarBitset.isset(ti.elemkind) + rtelem := ti.elem + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnMsgpackBytes + + var rvChanged bool + + var rv0 = rv + var rv9 reflect.Value + + rvlen := rvLenSlice(rv) + rvcap := rvCapSlice(rv) + maxInitLen := d.maxInitLen() + hasLen := containerLenS >= 0 + if hasLen { + if containerLenS > rvcap { + oldRvlenGtZero := rvlen > 0 + rvlen1 := int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + if rvlen1 == rvlen { + } else if rvlen1 <= rvcap { + if rvCanset { + rvlen = rvlen1 + rvSetSliceLen(rv, rvlen) + } + } else if rvCanset { + rvlen = rvlen1 + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + if rvChanged && oldRvlenGtZero && rtelem0Mut { + rvCopySlice(rv, rv0, rtelem) + } + } else if containerLenS != rvlen { + if rvCanset { + rvlen = containerLenS + rvSetSliceLen(rv, rvlen) + } + } + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } + + var j int + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if rvCanset { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + + if rvlen < rvcap { + rvlen = rvcap + if rvCanset { + rvSetSliceLen(rv, rvlen) + } else if rvChanged { + rv = rvSlice(rv, rvlen) + } else { + halt.onerror(errExpandSliceCannotChange) + } + } else { + if !(rvCanset || rvChanged) { + halt.onerror(errExpandSliceCannotChange) + } + rv, rvcap, rvCanset = rvGrowSlice(rv, f.ti, rvcap, 1) + + rvlen = rvcap + rvChanged = !rvCanset + } + } + + rv9 = rvArrayIndex(rv, j, f.ti, true) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if j < rvlen { + if rvCanset { + rvSetSliceLen(rv, j) + } else if rvChanged { + rv = rvSlice(rv, j) + } + + } else if j == 0 && rvIsNil(rv) { + if rvCanset { + rv = rvSliceZeroCap(ti.rt) + rvCanset = false + rvChanged = true + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } +} + +func (d *decoderMsgpackBytes) kArray(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + ctyp := d.d.ContainerType() + if handleBytesWithinKArray && (ctyp == valueTypeBytes || ctyp == valueTypeString) { + + if ti.elemkind != uint8(reflect.Uint8) { + halt.errorf("bytes/string in stream can decode into array of bytes, but not %v", ti.rt) + } + rvbs := rvGetArrayBytes(rv, nil) + d.decodeBytesInto(rvbs, true) + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var rv9 reflect.Value + + rvlen := rv.Len() + hasLen := containerLenS >= 0 + if hasLen && containerLenS > rvlen { + halt.errorf("cannot decode into array with length: %v, less than container length: %v", any(rvlen), any(containerLenS)) + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + var fn *decFnMsgpackBytes + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } else { + fn = d.fn(rtelem) + } + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + d.arrayCannotExpand(rvlen, j+1) + d.swallow() + continue + } + + rv9 = rvArrayIndex(rv, j, f.ti, false) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackBytes) kChan(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + if ti.chandir&uint8(reflect.SendDir) == 0 { + halt.errorStr("receive-only channel cannot be decoded") + } + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + bs2, _ := d.d.DecodeBytes() + irv := rv2i(rv) + ch, ok := irv.(chan<- byte) + if !ok { + ch = irv.(chan byte) + } + for _, b := range bs2 { + ch <- b + } + return + } + + var rvCanset = rv.CanSet() + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset && rvIsNil(rv) { + rvSetDirect(rv, reflect.MakeChan(ti.rt, 0)) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + useTransient := decUseTransient && ti.elemkind != byte(reflect.Ptr) && ti.tielem.flagCanTransient + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnMsgpackBytes + + var rvChanged bool + var rv0 = rv + var rv9 reflect.Value + + var rvlen int + hasLen := containerLenS >= 0 + maxInitLen := d.maxInitLen() + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if hasLen { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + } else { + rvlen = decDefChanCap + } + if rvCanset { + rv = reflect.MakeChan(ti.rt, rvlen) + rvChanged = true + } else { + halt.errorStr("cannot decode into non-settable chan") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if rv9.IsValid() { + rvSetZero(rv9) + } else if useTransient { + rv9 = d.perType.TransientAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } else { + rv9 = rvZeroAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } + if !d.d.TryNil() { + d.decodeValueNoCheckNil(rv9, fn) + } + rv.Send(rv9) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } + +} + +func (d *decoderMsgpackBytes) kMap(f *decFnInfo, rv reflect.Value) { + _ = d.d + containerLen := d.mapStart(d.d.ReadMapStart()) + ti := f.ti + if rvIsNil(rv) { + rvlen := int(decInferLen(containerLen, d.maxInitLen(), uint(ti.keysize+ti.elemsize))) + rvSetDirect(rv, makeMapReflect(ti.rt, rvlen)) + } + + if containerLen == 0 { + d.mapEnd() + return + } + + ktype, vtype := ti.key, ti.elem + ktypeId := rt2id(ktype) + vtypeKind := reflect.Kind(ti.elemkind) + ktypeKind := reflect.Kind(ti.keykind) + mparams := getMapReqParams(ti) + + vtypePtr := vtypeKind == reflect.Ptr + ktypePtr := ktypeKind == reflect.Ptr + + vTransient := decUseTransient && !vtypePtr && ti.tielem.flagCanTransient + + kTransient := vTransient && !ktypePtr && ti.tikey.flagCanTransient + + var vtypeElem reflect.Type + + var keyFn, valFn *decFnMsgpackBytes + var ktypeLo, vtypeLo = ktype, vtype + + if ktypeKind == reflect.Ptr { + for ktypeLo = ktype.Elem(); ktypeLo.Kind() == reflect.Ptr; ktypeLo = ktypeLo.Elem() { + } + } + + if vtypePtr { + vtypeElem = vtype.Elem() + for vtypeLo = vtypeElem; vtypeLo.Kind() == reflect.Ptr; vtypeLo = vtypeLo.Elem() { + } + } + + rvkMut := !scalarBitset.isset(ti.keykind) + rvvMut := !scalarBitset.isset(ti.elemkind) + rvvCanNil := isnilBitset.isset(ti.elemkind) + + var rvk, rvkn, rvv, rvvn, rvva, rvvz reflect.Value + + var doMapGet, doMapSet bool + + if !d.h.MapValueReset { + if rvvMut && (vtypeKind != reflect.Interface || !d.h.InterfaceReset) { + doMapGet = true + rvva = mapAddrLoopvarRV(vtype, vtypeKind) + } + } + + ktypeIsString := ktypeId == stringTypId + ktypeIsIntf := ktypeId == intfTypId + hasLen := containerLen >= 0 + + var kstr2bs []byte + var kstr string + + var mapKeyStringSharesBytesBuf bool + var att dBytesAttachState + + var vElem, kElem reflect.Type + kbuiltin := ti.tikey.flagDecBuiltin && ti.keykind != uint8(reflect.Slice) + vbuiltin := ti.tielem.flagDecBuiltin + if kbuiltin && ktypePtr { + kElem = ti.key.Elem() + } + if vbuiltin && vtypePtr { + vElem = ti.elem.Elem() + } + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + mapKeyStringSharesBytesBuf = false + kstr = "" + if j == 0 { + + if kTransient { + rvk = d.perType.TransientAddr2K(ktype, ktypeKind) + } else { + rvk = rvZeroAddrK(ktype, ktypeKind) + } + if !rvkMut { + rvkn = rvk + } + if !rvvMut { + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + } + if !ktypeIsString && keyFn == nil { + keyFn = d.fn(ktypeLo) + } + if valFn == nil { + valFn = d.fn(vtypeLo) + } + } else if rvkMut { + rvSetZero(rvk) + } else { + rvk = rvkn + } + + d.mapElemKey(j == 0) + + if d.d.TryNil() { + rvSetZero(rvk) + } else if ktypeIsString { + kstr2bs, att = d.d.DecodeStringAsBytes() + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, att) + rvSetString(rvk, kstr) + } else { + if kbuiltin { + if ktypePtr { + if rvIsNil(rvk) { + rvSetDirect(rvk, reflect.New(kElem)) + } + d.decode(rv2i(rvk)) + } else { + d.decode(rv2i(rvAddr(rvk, ti.tikey.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvk, keyFn) + } + + if ktypeIsIntf { + if rvk2 := rvk.Elem(); rvk2.IsValid() && rvk2.Type() == uint8SliceTyp { + kstr2bs = rvGetBytes(rvk2) + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, dBytesAttachView) + rvSetIntf(rvk, rv4istr(kstr)) + } + + } + } + + if mapKeyStringSharesBytesBuf && d.bufio { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + mapKeyStringSharesBytesBuf = false + } + + d.mapElemValue() + + if d.d.TryNil() { + if mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + + if !rvvz.IsValid() { + rvvz = rvZeroK(vtype, vtypeKind) + } + mapSet(rv, rvk, rvvz, mparams) + continue + } + + doMapSet = true + + if !rvvMut { + rvv = rvvn + } else if !doMapGet { + goto NEW_RVV + } else { + rvv = mapGet(rv, rvk, rvva, mparams) + if !rvv.IsValid() || (rvvCanNil && rvIsNil(rvv)) { + goto NEW_RVV + } + switch vtypeKind { + case reflect.Ptr, reflect.Map: + doMapSet = false + case reflect.Interface: + + rvvn = rvv.Elem() + if k := rvvn.Kind(); (k == reflect.Ptr || k == reflect.Map) && !rvIsNil(rvvn) { + d.decodeValueNoCheckNil(rvvn, nil) + continue + } + + rvvn = rvZeroAddrK(vtype, vtypeKind) + rvSetIntf(rvvn, rvv) + rvv = rvvn + default: + + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + rvSetDirect(rvvn, rvv) + rvv = rvvn + } + } + goto DECODE_VALUE_NO_CHECK_NIL + + NEW_RVV: + if vtypePtr { + rvv = reflect.New(vtypeElem) + } else if vTransient { + rvv = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvv = rvZeroAddrK(vtype, vtypeKind) + } + + DECODE_VALUE_NO_CHECK_NIL: + if doMapSet && mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + if vbuiltin { + if vtypePtr { + if rvIsNil(rvv) { + rvSetDirect(rvv, reflect.New(vElem)) + } + d.decode(rv2i(rvv)) + } else { + d.decode(rv2i(rvAddr(rvv, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvv, valFn) + } + if doMapSet { + mapSet(rv, rvk, rvv, mparams) + } + } + + d.mapEnd() +} + +func (d *decoderMsgpackBytes) init(h Handle) { + initHandle(h) + callMake(&d.d) + d.hh = h + d.h = h.getBasicHandle() + + d.err = errDecoderNotInitialized + + if d.h.InternString && d.is == nil { + d.is.init() + } + + d.fp = d.d.init(h, &d.decoderBase, d).(*fastpathDsMsgpackBytes) + + if d.bytes { + d.rtidFn = &d.h.rtidFnsDecBytes + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtBytes + } else { + d.bufio = d.h.ReaderBufferSize > 0 + d.rtidFn = &d.h.rtidFnsDecIO + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtIO + } + + d.reset() + +} + +func (d *decoderMsgpackBytes) reset() { + d.d.reset() + d.err = nil + d.c = 0 + d.depth = 0 + d.calls = 0 + + d.maxdepth = decDefMaxDepth + if d.h.MaxDepth > 0 { + d.maxdepth = d.h.MaxDepth + } + d.mtid = 0 + d.stid = 0 + d.mtr = false + d.str = false + if d.h.MapType != nil { + d.mtid = rt2id(d.h.MapType) + _, d.mtr = fastpathAvIndex(d.mtid) + } + if d.h.SliceType != nil { + d.stid = rt2id(d.h.SliceType) + _, d.str = fastpathAvIndex(d.stid) + } +} + +func (d *decoderMsgpackBytes) Reset(r io.Reader) { + if d.bytes { + halt.onerror(errDecNoResetBytesWithReader) + } + d.reset() + if r == nil { + r = &eofReader + } + d.d.resetInIO(r) +} + +func (d *decoderMsgpackBytes) ResetBytes(in []byte) { + if !d.bytes { + halt.onerror(errDecNoResetReaderWithBytes) + } + d.resetBytes(in) +} + +func (d *decoderMsgpackBytes) resetBytes(in []byte) { + d.reset() + if in == nil { + in = zeroByteSlice + } + d.d.resetInBytes(in) +} + +func (d *decoderMsgpackBytes) ResetString(s string) { + d.ResetBytes(bytesView(s)) +} + +func (d *decoderMsgpackBytes) Decode(v interface{}) (err error) { + + defer panicValToErr(d, callRecoverSentinel, &d.err, &err, debugging) + d.mustDecode(v) + return +} + +func (d *decoderMsgpackBytes) MustDecode(v interface{}) { + defer panicValToErr(d, callRecoverSentinel, &d.err, nil, true) + d.mustDecode(v) + return +} + +func (d *decoderMsgpackBytes) mustDecode(v interface{}) { + halt.onerror(d.err) + if d.hh == nil { + halt.onerror(errNoFormatHandle) + } + + d.calls++ + d.decode(v) + d.calls-- +} + +func (d *decoderMsgpackBytes) Release() {} + +func (d *decoderMsgpackBytes) swallow() { + d.d.nextValueBytes() +} + +func (d *decoderMsgpackBytes) nextValueBytes() []byte { + return d.d.nextValueBytes() +} + +func (d *decoderMsgpackBytes) decode(iv interface{}) { + _ = d.d + + rv, ok := isNil(iv, true) + if ok { + halt.onerror(errCannotDecodeIntoNil) + } + + switch v := iv.(type) { + + case *string: + *v = d.detach2Str(d.d.DecodeStringAsBytes()) + case *bool: + *v = d.d.DecodeBool() + case *int: + *v = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + case *int8: + *v = int8(chkOvf.IntV(d.d.DecodeInt64(), 8)) + case *int16: + *v = int16(chkOvf.IntV(d.d.DecodeInt64(), 16)) + case *int32: + *v = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + case *int64: + *v = d.d.DecodeInt64() + case *uint: + *v = uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *uint8: + *v = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + case *uint16: + *v = uint16(chkOvf.UintV(d.d.DecodeUint64(), 16)) + case *uint32: + *v = uint32(chkOvf.UintV(d.d.DecodeUint64(), 32)) + case *uint64: + *v = d.d.DecodeUint64() + case *uintptr: + *v = uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *float32: + *v = d.d.DecodeFloat32() + case *float64: + *v = d.d.DecodeFloat64() + case *complex64: + *v = complex(d.d.DecodeFloat32(), 0) + case *complex128: + *v = complex(d.d.DecodeFloat64(), 0) + case *[]byte: + *v, _ = d.decodeBytesInto(*v, false) + case []byte: + + d.decodeBytesInto(v[:len(v):len(v)], true) + case *time.Time: + *v = d.d.DecodeTime() + case *Raw: + *v = d.rawBytes() + + case *interface{}: + d.decodeValue(rv4iptr(v), nil) + + case reflect.Value: + if ok, _ = isDecodeable(v); !ok { + d.haltAsNotDecodeable(v) + } + d.decodeValue(v, nil) + + default: + + if skipFastpathTypeSwitchInDirectCall || !d.dh.fastpathDecodeTypeSwitch(iv, d) { + if !rv.IsValid() { + rv = reflect.ValueOf(iv) + } + if ok, _ = isDecodeable(rv); !ok { + d.haltAsNotDecodeable(rv) + } + d.decodeValue(rv, nil) + } + } +} + +func (d *decoderMsgpackBytes) decodeValue(rv reflect.Value, fn *decFnMsgpackBytes) { + if d.d.TryNil() { + decSetNonNilRV2Zero(rv) + } else { + d.decodeValueNoCheckNil(rv, fn) + } +} + +func (d *decoderMsgpackBytes) decodeValueNoCheckNil(rv reflect.Value, fn *decFnMsgpackBytes) { + + var rvp reflect.Value + var rvpValid bool +PTR: + if rv.Kind() == reflect.Ptr { + rvpValid = true + if rvIsNil(rv) { + rvSetDirect(rv, reflect.New(rv.Type().Elem())) + } + rvp = rv + rv = rv.Elem() + goto PTR + } + + if fn == nil { + fn = d.fn(rv.Type()) + } + if fn.i.addrD { + if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else if fn.i.addrDf { + halt.errorStr("cannot decode into a non-pointer value") + } + } + fn.fd(d, &fn.i, rv) +} + +func (d *decoderMsgpackBytes) decodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + d.decodeValue(baseRV(v), d.fn(t)) + } else { + d.decodeValue(baseRV(v), d.fnNoExt(t)) + } +} + +func (d *decoderMsgpackBytes) structFieldNotFound(index int, rvkencname string) { + + if d.h.ErrorIfNoField { + if index >= 0 { + halt.errorInt("no matching struct field found when decoding stream array at index ", int64(index)) + } else if rvkencname != "" { + halt.errorStr2("no matching struct field found when decoding stream map with key ", rvkencname) + } + } + d.swallow() +} + +func (d *decoderMsgpackBytes) decodeBytesInto(out []byte, mustFit bool) (v []byte, state dBytesIntoState) { + v, att := d.d.DecodeBytes() + if cap(v) == 0 || (att >= dBytesAttachViewZerocopy && !mustFit) { + + return + } + if len(v) == 0 { + v = zeroByteSlice + return + } + if len(out) == len(v) { + state = dBytesIntoParamOut + } else if cap(out) >= len(v) { + out = out[:len(v)] + state = dBytesIntoParamOutSlice + } else if mustFit { + halt.errorf("bytes capacity insufficient for decoded bytes: got/expected: %d/%d", len(v), len(out)) + } else { + out = make([]byte, len(v)) + state = dBytesIntoNew + } + copy(out, v) + v = out + return +} + +func (d *decoderMsgpackBytes) rawBytes() (v []byte) { + + v = d.d.nextValueBytes() + if d.bytes && !d.h.ZeroCopy { + vv := make([]byte, len(v)) + copy(vv, v) + v = vv + } + return +} + +func (d *decoderMsgpackBytes) wrapErr(v error, err *error) { + *err = wrapCodecErr(v, d.hh.Name(), d.d.NumBytesRead(), false) +} + +func (d *decoderMsgpackBytes) NumBytesRead() int { + return d.d.NumBytesRead() +} + +func (d *decoderMsgpackBytes) containerNext(j, containerLen int, hasLen bool) bool { + + if hasLen { + return j < containerLen + } + return !d.d.CheckBreak() +} + +func (d *decoderMsgpackBytes) mapElemKey(firstTime bool) { + d.d.ReadMapElemKey(firstTime) + d.c = containerMapKey +} + +func (d *decoderMsgpackBytes) mapElemValue() { + d.d.ReadMapElemValue() + d.c = containerMapValue +} + +func (d *decoderMsgpackBytes) mapEnd() { + d.d.ReadMapEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderMsgpackBytes) arrayElem(firstTime bool) { + d.d.ReadArrayElem(firstTime) + d.c = containerArrayElem +} + +func (d *decoderMsgpackBytes) arrayEnd() { + d.d.ReadArrayEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderMsgpackBytes) interfaceExtConvertAndDecode(v interface{}, ext InterfaceExt) { + + var vv interface{} + d.decode(&vv) + ext.UpdateExt(v, vv) + +} + +func (d *decoderMsgpackBytes) fn(t reflect.Type) *decFnMsgpackBytes { + return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false) +} + +func (d *decoderMsgpackBytes) fnNoExt(t reflect.Type) *decFnMsgpackBytes { + return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true) +} + +func (helperDecDriverMsgpackBytes) newDecoderBytes(in []byte, h Handle) *decoderMsgpackBytes { + var c1 decoderMsgpackBytes + c1.bytes = true + c1.init(h) + c1.ResetBytes(in) + return &c1 +} + +func (helperDecDriverMsgpackBytes) newDecoderIO(in io.Reader, h Handle) *decoderMsgpackBytes { + var c1 decoderMsgpackBytes + c1.init(h) + c1.Reset(in) + return &c1 +} + +func (helperDecDriverMsgpackBytes) decFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathDsMsgpackBytes) (f *fastpathDMsgpackBytes, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperDecDriverMsgpackBytes) decFindRtidFn(s []decRtidFnMsgpackBytes, rtid uintptr) (i uint, fn *decFnMsgpackBytes) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperDecDriverMsgpackBytes) decFromRtidFnSlice(fns *atomicRtidFnSlice) (s []decRtidFnMsgpackBytes) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]decRtidFnMsgpackBytes](v)) + } + return +} + +func (dh helperDecDriverMsgpackBytes) decFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, x *BasicHandle, fp *fastpathDsMsgpackBytes, + checkExt bool) (fn *decFnMsgpackBytes) { + return dh.decFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperDecDriverMsgpackBytes) decFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsMsgpackBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnMsgpackBytes) { + rtid := rt2id(rt) + var sp []decRtidFnMsgpackBytes = dh.decFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.decFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.decFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperDecDriverMsgpackBytes) decFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsMsgpackBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnMsgpackBytes) { + + fn = dh.decFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []decRtidFnMsgpackBytes + mu.Lock() + sp = dh.decFromRtidFnSlice(fns) + + if sp == nil { + sp = []decRtidFnMsgpackBytes{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.decFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]decRtidFnMsgpackBytes, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = decRtidFnMsgpackBytes{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperDecDriverMsgpackBytes) decFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathDsMsgpackBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnMsgpackBytes) { + fn = new(decFnMsgpackBytes) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + fi.addrDf = true + + if rtid == timeTypId && timeBuiltin { + fn.fd = (*decoderMsgpackBytes).kTime + } else if rtid == rawTypId { + fn.fd = (*decoderMsgpackBytes).raw + } else if rtid == rawExtTypId { + fn.fd = (*decoderMsgpackBytes).rawExt + fi.addrD = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fd = (*decoderMsgpackBytes).ext + fi.addrD = true + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fd = (*decoderMsgpackBytes).selferUnmarshal + fi.addrD = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fd = (*decoderMsgpackBytes).binaryUnmarshal + fi.addrD = ti.flagBinaryUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fd = (*decoderMsgpackBytes).jsonUnmarshal + fi.addrD = ti.flagJsonUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fd = (*decoderMsgpackBytes).textUnmarshal + fi.addrD = ti.flagTextUnmarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fd = fp[idx].decfn + fi.addrD = true + fi.addrDf = false + if rk == reflect.Array { + fi.addrD = false + } + } + } else { + + xfe, xrt := dh.decFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf2 := xfe.decfn + if rk == reflect.Array { + fi.addrD = false + fn.fd = func(d *decoderMsgpackBytes, xf *decFnInfo, xrv reflect.Value) { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } else { + fi.addrD = true + fi.addrDf = false + xptr2rt := reflect.PointerTo(xrt) + fn.fd = func(d *decoderMsgpackBytes, xf *decFnInfo, xrv reflect.Value) { + if xrv.Kind() == reflect.Ptr { + xfnf2(d, xf, rvConvert(xrv, xptr2rt)) + } else { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } + } + } + } + } + if fn.fd == nil { + switch rk { + case reflect.Bool: + fn.fd = (*decoderMsgpackBytes).kBool + case reflect.String: + fn.fd = (*decoderMsgpackBytes).kString + case reflect.Int: + fn.fd = (*decoderMsgpackBytes).kInt + case reflect.Int8: + fn.fd = (*decoderMsgpackBytes).kInt8 + case reflect.Int16: + fn.fd = (*decoderMsgpackBytes).kInt16 + case reflect.Int32: + fn.fd = (*decoderMsgpackBytes).kInt32 + case reflect.Int64: + fn.fd = (*decoderMsgpackBytes).kInt64 + case reflect.Uint: + fn.fd = (*decoderMsgpackBytes).kUint + case reflect.Uint8: + fn.fd = (*decoderMsgpackBytes).kUint8 + case reflect.Uint16: + fn.fd = (*decoderMsgpackBytes).kUint16 + case reflect.Uint32: + fn.fd = (*decoderMsgpackBytes).kUint32 + case reflect.Uint64: + fn.fd = (*decoderMsgpackBytes).kUint64 + case reflect.Uintptr: + fn.fd = (*decoderMsgpackBytes).kUintptr + case reflect.Float32: + fn.fd = (*decoderMsgpackBytes).kFloat32 + case reflect.Float64: + fn.fd = (*decoderMsgpackBytes).kFloat64 + case reflect.Complex64: + fn.fd = (*decoderMsgpackBytes).kComplex64 + case reflect.Complex128: + fn.fd = (*decoderMsgpackBytes).kComplex128 + case reflect.Chan: + fn.fd = (*decoderMsgpackBytes).kChan + case reflect.Slice: + fn.fd = (*decoderMsgpackBytes).kSlice + case reflect.Array: + fi.addrD = false + fn.fd = (*decoderMsgpackBytes).kArray + case reflect.Struct: + if ti.simple { + fn.fd = (*decoderMsgpackBytes).kStructSimple + } else { + fn.fd = (*decoderMsgpackBytes).kStruct + } + case reflect.Map: + fn.fd = (*decoderMsgpackBytes).kMap + case reflect.Interface: + + fn.fd = (*decoderMsgpackBytes).kInterface + default: + + fn.fd = (*decoderMsgpackBytes).kErr + } + } + } + return +} +func (e *msgpackEncDriverBytes) EncodeNil() { + e.w.writen1(mpNil) +} + +func (e *msgpackEncDriverBytes) EncodeInt(i int64) { + if e.h.PositiveIntUnsigned && i >= 0 { + e.EncodeUint(uint64(i)) + } else if i > math.MaxInt8 { + if i <= math.MaxInt16 { + e.w.writen1(mpInt16) + e.w.writen2(bigen.PutUint16(uint16(i))) + } else if i <= math.MaxInt32 { + e.w.writen1(mpInt32) + e.w.writen4(bigen.PutUint32(uint32(i))) + } else { + e.w.writen1(mpInt64) + e.w.writen8(bigen.PutUint64(uint64(i))) + } + } else if i >= -32 { + if e.h.NoFixedNum { + e.w.writen2(mpInt8, byte(i)) + } else { + e.w.writen1(byte(i)) + } + } else if i >= math.MinInt8 { + e.w.writen2(mpInt8, byte(i)) + } else if i >= math.MinInt16 { + e.w.writen1(mpInt16) + e.w.writen2(bigen.PutUint16(uint16(i))) + } else if i >= math.MinInt32 { + e.w.writen1(mpInt32) + e.w.writen4(bigen.PutUint32(uint32(i))) + } else { + e.w.writen1(mpInt64) + e.w.writen8(bigen.PutUint64(uint64(i))) + } +} + +func (e *msgpackEncDriverBytes) EncodeUint(i uint64) { + if i <= math.MaxInt8 { + if e.h.NoFixedNum { + e.w.writen2(mpUint8, byte(i)) + } else { + e.w.writen1(byte(i)) + } + } else if i <= math.MaxUint8 { + e.w.writen2(mpUint8, byte(i)) + } else if i <= math.MaxUint16 { + e.w.writen1(mpUint16) + e.w.writen2(bigen.PutUint16(uint16(i))) + } else if i <= math.MaxUint32 { + e.w.writen1(mpUint32) + e.w.writen4(bigen.PutUint32(uint32(i))) + } else { + e.w.writen1(mpUint64) + e.w.writen8(bigen.PutUint64(uint64(i))) + } +} + +func (e *msgpackEncDriverBytes) EncodeBool(b bool) { + if b { + e.w.writen1(mpTrue) + } else { + e.w.writen1(mpFalse) + } +} + +func (e *msgpackEncDriverBytes) EncodeFloat32(f float32) { + e.w.writen1(mpFloat) + e.w.writen4(bigen.PutUint32(math.Float32bits(f))) +} + +func (e *msgpackEncDriverBytes) EncodeFloat64(f float64) { + e.w.writen1(mpDouble) + e.w.writen8(bigen.PutUint64(math.Float64bits(f))) +} + +func (e *msgpackEncDriverBytes) EncodeTime(t time.Time) { + if t.IsZero() { + e.EncodeNil() + return + } + t = t.UTC() + sec, nsec := t.Unix(), uint64(t.Nanosecond()) + var data64 uint64 + var l = 4 + if sec >= 0 && sec>>34 == 0 { + data64 = (nsec << 34) | uint64(sec) + if data64&0xffffffff00000000 != 0 { + l = 8 + } + } else { + l = 12 + } + if e.h.WriteExt { + e.encodeExtPreamble(mpTimeExtTagU, l) + } else { + e.writeContainerLen(msgpackContainerRawLegacy, l) + } + switch l { + case 4: + e.w.writen4(bigen.PutUint32(uint32(data64))) + case 8: + e.w.writen8(bigen.PutUint64(data64)) + case 12: + e.w.writen4(bigen.PutUint32(uint32(nsec))) + e.w.writen8(bigen.PutUint64(uint64(sec))) + } +} + +func (e *msgpackEncDriverBytes) EncodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + var bs0, bs []byte + if ext == SelfExt { + bs0 = e.e.blist.get(1024) + bs = bs0 + sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, true) }) + } else { + bs = ext.WriteExt(v) + } + if bs == nil { + e.writeNilBytes() + goto END + } + if e.h.WriteExt { + e.encodeExtPreamble(uint8(xtag), len(bs)) + e.w.writeb(bs) + } else { + e.EncodeBytes(bs) + } +END: + if ext == SelfExt { + e.e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.e.blist.put(bs0) + } + } +} + +func (e *msgpackEncDriverBytes) EncodeRawExt(re *RawExt) { + e.encodeExtPreamble(uint8(re.Tag), len(re.Data)) + e.w.writeb(re.Data) +} + +func (e *msgpackEncDriverBytes) encodeExtPreamble(xtag byte, l int) { + if l == 1 { + e.w.writen2(mpFixExt1, xtag) + } else if l == 2 { + e.w.writen2(mpFixExt2, xtag) + } else if l == 4 { + e.w.writen2(mpFixExt4, xtag) + } else if l == 8 { + e.w.writen2(mpFixExt8, xtag) + } else if l == 16 { + e.w.writen2(mpFixExt16, xtag) + } else if l < 256 { + e.w.writen2(mpExt8, byte(l)) + e.w.writen1(xtag) + } else if l < 65536 { + e.w.writen1(mpExt16) + e.w.writen2(bigen.PutUint16(uint16(l))) + e.w.writen1(xtag) + } else { + e.w.writen1(mpExt32) + e.w.writen4(bigen.PutUint32(uint32(l))) + e.w.writen1(xtag) + } +} + +func (e *msgpackEncDriverBytes) WriteArrayStart(length int) { + e.writeContainerLen(msgpackContainerList, length) +} + +func (e *msgpackEncDriverBytes) WriteMapStart(length int) { + e.writeContainerLen(msgpackContainerMap, length) +} + +func (e *msgpackEncDriverBytes) WriteArrayEmpty() { + + e.w.writen1(mpFixArrayMin) +} + +func (e *msgpackEncDriverBytes) WriteMapEmpty() { + + e.w.writen1(mpFixMapMin) +} + +func (e *msgpackEncDriverBytes) EncodeString(s string) { + var ct msgpackContainerType + if e.h.WriteExt { + if e.h.StringToRaw { + ct = msgpackContainerBin + } else { + ct = msgpackContainerStr + } + } else { + ct = msgpackContainerRawLegacy + } + e.writeContainerLen(ct, len(s)) + if len(s) > 0 { + e.w.writestr(s) + } +} + +func (e *msgpackEncDriverBytes) EncodeStringNoEscape4Json(v string) { e.EncodeString(v) } + +func (e *msgpackEncDriverBytes) EncodeStringBytesRaw(bs []byte) { + if e.h.WriteExt { + e.writeContainerLen(msgpackContainerBin, len(bs)) + } else { + e.writeContainerLen(msgpackContainerRawLegacy, len(bs)) + } + if len(bs) > 0 { + e.w.writeb(bs) + } +} + +func (e *msgpackEncDriverBytes) EncodeBytes(v []byte) { + if v == nil { + e.writeNilBytes() + return + } + e.EncodeStringBytesRaw(v) +} + +func (e *msgpackEncDriverBytes) writeNilOr(v byte) { + if !e.h.NilCollectionToZeroLength { + v = mpNil + } + e.w.writen1(v) +} + +func (e *msgpackEncDriverBytes) writeNilArray() { + e.writeNilOr(mpFixArrayMin) +} + +func (e *msgpackEncDriverBytes) writeNilMap() { + e.writeNilOr(mpFixMapMin) +} + +func (e *msgpackEncDriverBytes) writeNilBytes() { + e.writeNilOr(mpFixStrMin) +} + +func (e *msgpackEncDriverBytes) writeContainerLen(ct msgpackContainerType, l int) { + if ct.fixCutoff > 0 && l < int(ct.fixCutoff) { + e.w.writen1(ct.bFixMin | byte(l)) + } else if ct.b8 > 0 && l < 256 { + e.w.writen2(ct.b8, uint8(l)) + } else if l < 65536 { + e.w.writen1(ct.b16) + e.w.writen2(bigen.PutUint16(uint16(l))) + } else { + e.w.writen1(ct.b32) + e.w.writen4(bigen.PutUint32(uint32(l))) + } +} + +func (d *msgpackDecDriverBytes) DecodeNaked() { + if !d.bdRead { + d.readNextBd() + } + bd := d.bd + n := d.d.naked() + var decodeFurther bool + + switch bd { + case mpNil: + n.v = valueTypeNil + d.bdRead = false + case mpFalse: + n.v = valueTypeBool + n.b = false + case mpTrue: + n.v = valueTypeBool + n.b = true + + case mpFloat: + n.v = valueTypeFloat + n.f = float64(math.Float32frombits(bigen.Uint32(d.r.readn4()))) + case mpDouble: + n.v = valueTypeFloat + n.f = math.Float64frombits(bigen.Uint64(d.r.readn8())) + + case mpUint8: + n.v = valueTypeUint + n.u = uint64(d.r.readn1()) + case mpUint16: + n.v = valueTypeUint + n.u = uint64(bigen.Uint16(d.r.readn2())) + case mpUint32: + n.v = valueTypeUint + n.u = uint64(bigen.Uint32(d.r.readn4())) + case mpUint64: + n.v = valueTypeUint + n.u = uint64(bigen.Uint64(d.r.readn8())) + + case mpInt8: + n.v = valueTypeInt + n.i = int64(int8(d.r.readn1())) + case mpInt16: + n.v = valueTypeInt + n.i = int64(int16(bigen.Uint16(d.r.readn2()))) + case mpInt32: + n.v = valueTypeInt + n.i = int64(int32(bigen.Uint32(d.r.readn4()))) + case mpInt64: + n.v = valueTypeInt + n.i = int64(int64(bigen.Uint64(d.r.readn8()))) + + default: + switch { + case bd >= mpPosFixNumMin && bd <= mpPosFixNumMax: + + n.v = valueTypeInt + n.i = int64(int8(bd)) + case bd >= mpNegFixNumMin && bd <= mpNegFixNumMax: + + n.v = valueTypeInt + n.i = int64(int8(bd)) + case bd == mpStr8, bd == mpStr16, bd == mpStr32, bd >= mpFixStrMin && bd <= mpFixStrMax: + d.d.fauxUnionReadRawBytes(d, d.h.WriteExt, d.h.RawToString) + + case bd == mpBin8, bd == mpBin16, bd == mpBin32: + d.d.fauxUnionReadRawBytes(d, false, d.h.RawToString) + case bd == mpArray16, bd == mpArray32, bd >= mpFixArrayMin && bd <= mpFixArrayMax: + n.v = valueTypeArray + decodeFurther = true + case bd == mpMap16, bd == mpMap32, bd >= mpFixMapMin && bd <= mpFixMapMax: + n.v = valueTypeMap + decodeFurther = true + case bd >= mpFixExt1 && bd <= mpFixExt16, bd >= mpExt8 && bd <= mpExt32: + n.v = valueTypeExt + clen := d.readExtLen() + n.u = uint64(d.r.readn1()) + if n.u == uint64(mpTimeExtTagU) { + n.v = valueTypeTime + n.t = d.decodeTime(clen) + } else { + n.l = d.r.readx(uint(clen)) + } + default: + halt.errorf("cannot infer value: %s: Ox%x/%d/%s", msgBadDesc, bd, bd, mpdesc(bd)) + } + } + if !decodeFurther { + d.bdRead = false + } + if n.v == valueTypeUint && d.h.SignedInteger { + n.v = valueTypeInt + n.i = int64(n.u) + } +} + +func (d *msgpackDecDriverBytes) nextValueBytes() (v []byte) { + if !d.bdRead { + d.readNextBd() + } + d.r.startRecording() + d.nextValueBytesBdReadR() + v = d.r.stopRecording() + d.bdRead = false + return +} + +func (d *msgpackDecDriverBytes) nextValueBytesBdReadR() { + bd := d.bd + + var clen uint + + switch bd { + case mpNil, mpFalse, mpTrue: + case mpUint8, mpInt8: + d.r.readn1() + case mpUint16, mpInt16: + d.r.skip(2) + case mpFloat, mpUint32, mpInt32: + d.r.skip(4) + case mpDouble, mpUint64, mpInt64: + d.r.skip(8) + case mpStr8, mpBin8: + clen = uint(d.r.readn1()) + d.r.skip(clen) + case mpStr16, mpBin16: + x := d.r.readn2() + clen = uint(bigen.Uint16(x)) + d.r.skip(clen) + case mpStr32, mpBin32: + x := d.r.readn4() + clen = uint(bigen.Uint32(x)) + d.r.skip(clen) + case mpFixExt1: + d.r.readn1() + d.r.readn1() + case mpFixExt2: + d.r.readn1() + d.r.skip(2) + case mpFixExt4: + d.r.readn1() + d.r.skip(4) + case mpFixExt8: + d.r.readn1() + d.r.skip(8) + case mpFixExt16: + d.r.readn1() + d.r.skip(16) + case mpExt8: + clen = uint(d.r.readn1()) + d.r.readn1() + d.r.skip(clen) + case mpExt16: + x := d.r.readn2() + clen = uint(bigen.Uint16(x)) + d.r.readn1() + d.r.skip(clen) + case mpExt32: + x := d.r.readn4() + clen = uint(bigen.Uint32(x)) + d.r.readn1() + d.r.skip(clen) + case mpArray16: + x := d.r.readn2() + clen = uint(bigen.Uint16(x)) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + } + case mpArray32: + x := d.r.readn4() + clen = uint(bigen.Uint32(x)) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + } + case mpMap16: + x := d.r.readn2() + clen = uint(bigen.Uint16(x)) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() + } + case mpMap32: + x := d.r.readn4() + clen = uint(bigen.Uint32(x)) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() + } + default: + switch { + case bd >= mpPosFixNumMin && bd <= mpPosFixNumMax: + case bd >= mpNegFixNumMin && bd <= mpNegFixNumMax: + case bd >= mpFixStrMin && bd <= mpFixStrMax: + clen = uint(mpFixStrMin ^ bd) + d.r.skip(clen) + case bd >= mpFixArrayMin && bd <= mpFixArrayMax: + clen = uint(mpFixArrayMin ^ bd) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + } + case bd >= mpFixMapMin && bd <= mpFixMapMax: + clen = uint(mpFixMapMin ^ bd) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() + } + default: + halt.errorf("nextValueBytes: cannot infer value: %s: Ox%x/%d/%s", msgBadDesc, bd, bd, mpdesc(bd)) + } + } + return +} + +func (d *msgpackDecDriverBytes) decFloat4Int32() (f float32) { + fbits := bigen.Uint32(d.r.readn4()) + f = math.Float32frombits(fbits) + if !noFrac32(fbits) { + halt.errorf("assigning integer value from float32 with a fraction: %v", f) + } + return +} + +func (d *msgpackDecDriverBytes) decFloat4Int64() (f float64) { + fbits := bigen.Uint64(d.r.readn8()) + f = math.Float64frombits(fbits) + if !noFrac64(fbits) { + halt.errorf("assigning integer value from float64 with a fraction: %v", f) + } + return +} + +func (d *msgpackDecDriverBytes) DecodeInt64() (i int64) { + if d.advanceNil() { + return + } + switch d.bd { + case mpUint8: + i = int64(uint64(d.r.readn1())) + case mpUint16: + i = int64(uint64(bigen.Uint16(d.r.readn2()))) + case mpUint32: + i = int64(uint64(bigen.Uint32(d.r.readn4()))) + case mpUint64: + i = int64(bigen.Uint64(d.r.readn8())) + case mpInt8: + i = int64(int8(d.r.readn1())) + case mpInt16: + i = int64(int16(bigen.Uint16(d.r.readn2()))) + case mpInt32: + i = int64(int32(bigen.Uint32(d.r.readn4()))) + case mpInt64: + i = int64(bigen.Uint64(d.r.readn8())) + case mpFloat: + i = int64(d.decFloat4Int32()) + case mpDouble: + i = int64(d.decFloat4Int64()) + default: + switch { + case d.bd >= mpPosFixNumMin && d.bd <= mpPosFixNumMax: + i = int64(int8(d.bd)) + case d.bd >= mpNegFixNumMin && d.bd <= mpNegFixNumMax: + i = int64(int8(d.bd)) + default: + halt.errorf("cannot decode signed integer: %s: %x/%s", msgBadDesc, d.bd, mpdesc(d.bd)) + } + } + d.bdRead = false + return +} + +func (d *msgpackDecDriverBytes) DecodeUint64() (ui uint64) { + if d.advanceNil() { + return + } + switch d.bd { + case mpUint8: + ui = uint64(d.r.readn1()) + case mpUint16: + ui = uint64(bigen.Uint16(d.r.readn2())) + case mpUint32: + ui = uint64(bigen.Uint32(d.r.readn4())) + case mpUint64: + ui = bigen.Uint64(d.r.readn8()) + case mpInt8: + if i := int64(int8(d.r.readn1())); i >= 0 { + ui = uint64(i) + } else { + halt.errorf("assigning negative signed value: %v, to unsigned type", i) + } + case mpInt16: + if i := int64(int16(bigen.Uint16(d.r.readn2()))); i >= 0 { + ui = uint64(i) + } else { + halt.errorf("assigning negative signed value: %v, to unsigned type", i) + } + case mpInt32: + if i := int64(int32(bigen.Uint32(d.r.readn4()))); i >= 0 { + ui = uint64(i) + } else { + halt.errorf("assigning negative signed value: %v, to unsigned type", i) + } + case mpInt64: + if i := int64(bigen.Uint64(d.r.readn8())); i >= 0 { + ui = uint64(i) + } else { + halt.errorf("assigning negative signed value: %v, to unsigned type", i) + } + case mpFloat: + if f := d.decFloat4Int32(); f >= 0 { + ui = uint64(f) + } else { + halt.errorf("assigning negative float value: %v, to unsigned type", f) + } + case mpDouble: + if f := d.decFloat4Int64(); f >= 0 { + ui = uint64(f) + } else { + halt.errorf("assigning negative float value: %v, to unsigned type", f) + } + default: + switch { + case d.bd >= mpPosFixNumMin && d.bd <= mpPosFixNumMax: + ui = uint64(d.bd) + case d.bd >= mpNegFixNumMin && d.bd <= mpNegFixNumMax: + halt.errorf("assigning negative signed value: %v, to unsigned type", int(d.bd)) + default: + halt.errorf("cannot decode unsigned integer: %s: %x/%s", msgBadDesc, d.bd, mpdesc(d.bd)) + } + } + d.bdRead = false + return +} + +func (d *msgpackDecDriverBytes) DecodeFloat64() (f float64) { + if d.advanceNil() { + return + } + if d.bd == mpFloat { + f = float64(math.Float32frombits(bigen.Uint32(d.r.readn4()))) + } else if d.bd == mpDouble { + f = math.Float64frombits(bigen.Uint64(d.r.readn8())) + } else { + f = float64(d.DecodeInt64()) + } + d.bdRead = false + return +} + +func (d *msgpackDecDriverBytes) DecodeBool() (b bool) { + if d.advanceNil() { + return + } + if d.bd == mpFalse || d.bd == 0 { + + } else if d.bd == mpTrue || d.bd == 1 { + b = true + } else { + halt.errorf("cannot decode bool: %s: %x/%s", msgBadDesc, d.bd, mpdesc(d.bd)) + } + d.bdRead = false + return +} + +func (d *msgpackDecDriverBytes) DecodeBytes() (bs []byte, state dBytesAttachState) { + if d.advanceNil() { + return + } + + var cond bool + bd := d.bd + var clen int + if bd == mpBin8 || bd == mpBin16 || bd == mpBin32 { + clen = d.readContainerLen(msgpackContainerBin) + } else if bd == mpStr8 || bd == mpStr16 || bd == mpStr32 || + (bd >= mpFixStrMin && bd <= mpFixStrMax) { + clen = d.readContainerLen(msgpackContainerStr) + } else if bd == mpArray16 || bd == mpArray32 || + (bd >= mpFixArrayMin && bd <= mpFixArrayMax) { + slen := d.ReadArrayStart() + bs, cond = usableByteSlice(d.d.buf, slen) + for i := 0; i < len(bs); i++ { + bs[i] = uint8(chkOvf.UintV(d.DecodeUint64(), 8)) + } + for i := len(bs); i < slen; i++ { + bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) + } + if cond { + d.d.buf = bs + } + state = dBytesAttachBuffer + return + } else { + halt.errorf("invalid byte descriptor for decoding bytes, got: 0x%x", d.bd) + } + + d.bdRead = false + bs, cond = d.r.readxb(uint(clen)) + state = d.d.attachState(cond) + return +} + +func (d *msgpackDecDriverBytes) DecodeStringAsBytes() (out []byte, state dBytesAttachState) { + out, state = d.DecodeBytes() + if d.h.ValidateUnicode && !utf8.Valid(out) { + halt.errorf("DecodeStringAsBytes: invalid UTF-8: %s", out) + } + return +} + +func (d *msgpackDecDriverBytes) readNextBd() { + d.bd = d.r.readn1() + d.bdRead = true +} + +func (d *msgpackDecDriverBytes) advanceNil() (null bool) { + if !d.bdRead { + d.readNextBd() + } + if d.bd == mpNil { + d.bdRead = false + return true + } + return +} + +func (d *msgpackDecDriverBytes) TryNil() (v bool) { + return d.advanceNil() +} + +func (d *msgpackDecDriverBytes) ContainerType() (vt valueType) { + if !d.bdRead { + d.readNextBd() + } + bd := d.bd + if bd == mpNil { + d.bdRead = false + return valueTypeNil + } else if bd == mpBin8 || bd == mpBin16 || bd == mpBin32 { + return valueTypeBytes + } else if bd == mpStr8 || bd == mpStr16 || bd == mpStr32 || + (bd >= mpFixStrMin && bd <= mpFixStrMax) { + if d.h.WriteExt || d.h.RawToString { + return valueTypeString + } + return valueTypeBytes + } else if bd == mpArray16 || bd == mpArray32 || (bd >= mpFixArrayMin && bd <= mpFixArrayMax) { + return valueTypeArray + } else if bd == mpMap16 || bd == mpMap32 || (bd >= mpFixMapMin && bd <= mpFixMapMax) { + return valueTypeMap + } + return valueTypeUnset +} + +func (d *msgpackDecDriverBytes) readContainerLen(ct msgpackContainerType) (clen int) { + bd := d.bd + if bd == ct.b8 { + clen = int(d.r.readn1()) + } else if bd == ct.b16 { + clen = int(bigen.Uint16(d.r.readn2())) + } else if bd == ct.b32 { + clen = int(bigen.Uint32(d.r.readn4())) + } else if (ct.bFixMin & bd) == ct.bFixMin { + clen = int(ct.bFixMin ^ bd) + } else { + halt.errorf("cannot read container length: %s: hex: %x, decimal: %d", msgBadDesc, bd, bd) + } + d.bdRead = false + return +} + +func (d *msgpackDecDriverBytes) ReadMapStart() int { + if d.advanceNil() { + return containerLenNil + } + return d.readContainerLen(msgpackContainerMap) +} + +func (d *msgpackDecDriverBytes) ReadArrayStart() int { + if d.advanceNil() { + return containerLenNil + } + return d.readContainerLen(msgpackContainerList) +} + +func (d *msgpackDecDriverBytes) readExtLen() (clen int) { + switch d.bd { + case mpFixExt1: + clen = 1 + case mpFixExt2: + clen = 2 + case mpFixExt4: + clen = 4 + case mpFixExt8: + clen = 8 + case mpFixExt16: + clen = 16 + case mpExt8: + clen = int(d.r.readn1()) + case mpExt16: + clen = int(bigen.Uint16(d.r.readn2())) + case mpExt32: + clen = int(bigen.Uint32(d.r.readn4())) + default: + halt.errorf("decoding ext bytes: found unexpected byte: %x", d.bd) + } + return +} + +func (d *msgpackDecDriverBytes) DecodeTime() (t time.Time) { + + if d.advanceNil() { + return + } + bd := d.bd + var clen int + if bd == mpBin8 || bd == mpBin16 || bd == mpBin32 { + clen = d.readContainerLen(msgpackContainerBin) + } else if bd == mpStr8 || bd == mpStr16 || bd == mpStr32 || + (bd >= mpFixStrMin && bd <= mpFixStrMax) { + clen = d.readContainerLen(msgpackContainerStr) + } else { + + d.bdRead = false + b2 := d.r.readn1() + if d.bd == mpFixExt4 && b2 == mpTimeExtTagU { + clen = 4 + } else if d.bd == mpFixExt8 && b2 == mpTimeExtTagU { + clen = 8 + } else if d.bd == mpExt8 && b2 == 12 && d.r.readn1() == mpTimeExtTagU { + clen = 12 + } else { + halt.errorf("invalid stream for decoding time as extension: got 0x%x, 0x%x", d.bd, b2) + } + } + return d.decodeTime(clen) +} + +func (d *msgpackDecDriverBytes) decodeTime(clen int) (t time.Time) { + d.bdRead = false + switch clen { + case 4: + t = time.Unix(int64(bigen.Uint32(d.r.readn4())), 0).UTC() + case 8: + tv := bigen.Uint64(d.r.readn8()) + t = time.Unix(int64(tv&0x00000003ffffffff), int64(tv>>34)).UTC() + case 12: + nsec := bigen.Uint32(d.r.readn4()) + sec := bigen.Uint64(d.r.readn8()) + t = time.Unix(int64(sec), int64(nsec)).UTC() + default: + halt.errorf("invalid length of bytes for decoding time - expecting 4 or 8 or 12, got %d", clen) + } + return +} + +func (d *msgpackDecDriverBytes) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + xbs, _, _, ok := d.decodeExtV(ext != nil, xtag) + if !ok { + return + } + if ext == SelfExt { + sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, true) }) + } else { + ext.ReadExt(rv, xbs) + } +} + +func (d *msgpackDecDriverBytes) DecodeRawExt(re *RawExt) { + xbs, realxtag, state, ok := d.decodeExtV(false, 0) + if !ok { + return + } + re.Tag = uint64(realxtag) + re.setData(xbs, state >= dBytesAttachViewZerocopy) +} + +func (d *msgpackDecDriverBytes) decodeExtV(verifyTag bool, xtagIn uint64) (xbs []byte, xtag byte, bstate dBytesAttachState, ok bool) { + if xtagIn > 0xff { + halt.errorf("ext: tag must be <= 0xff; got: %v", xtagIn) + } + if d.advanceNil() { + return + } + tag := uint8(xtagIn) + xbd := d.bd + if xbd == mpBin8 || xbd == mpBin16 || xbd == mpBin32 { + xbs, bstate = d.DecodeBytes() + } else if xbd == mpStr8 || xbd == mpStr16 || xbd == mpStr32 || + (xbd >= mpFixStrMin && xbd <= mpFixStrMax) { + xbs, bstate = d.DecodeStringAsBytes() + } else { + clen := d.readExtLen() + xtag = d.r.readn1() + if verifyTag && xtag != tag { + halt.errorf("wrong extension tag - got %b, expecting %v", xtag, tag) + } + xbs, ok = d.r.readxb(uint(clen)) + bstate = d.d.attachState(ok) + + } + d.bdRead = false + ok = true + return +} + +func (d *msgpackEncDriverBytes) init(hh Handle, shared *encoderBase, enc encoderI) (fp interface{}) { + callMake(&d.w) + d.h = hh.(*MsgpackHandle) + d.e = shared + if shared.bytes { + fp = msgpackFpEncBytes + } else { + fp = msgpackFpEncIO + } + + d.init2(enc) + return +} + +func (e *msgpackEncDriverBytes) writeBytesAsis(b []byte) { e.w.writeb(b) } + +func (e *msgpackEncDriverBytes) writerEnd() { e.w.end() } + +func (e *msgpackEncDriverBytes) resetOutBytes(out *[]byte) { + e.w.resetBytes(*out, out) +} + +func (e *msgpackEncDriverBytes) resetOutIO(out io.Writer) { + e.w.resetIO(out, e.h.WriterBufferSize, &e.e.blist) +} + +func (d *msgpackDecDriverBytes) init(hh Handle, shared *decoderBase, dec decoderI) (fp interface{}) { + callMake(&d.r) + d.h = hh.(*MsgpackHandle) + d.d = shared + if shared.bytes { + fp = msgpackFpDecBytes + } else { + fp = msgpackFpDecIO + } + + d.init2(dec) + return +} + +func (d *msgpackDecDriverBytes) NumBytesRead() int { + return int(d.r.numread()) +} + +func (d *msgpackDecDriverBytes) resetInBytes(in []byte) { + d.r.resetBytes(in) +} + +func (d *msgpackDecDriverBytes) resetInIO(r io.Reader) { + d.r.resetIO(r, d.h.ReaderBufferSize, d.h.MaxInitLen, &d.d.blist) +} + +func (d *msgpackDecDriverBytes) descBd() string { + return sprintf("%v (%s)", d.bd, mpdesc(d.bd)) +} + +func (d *msgpackDecDriverBytes) DecodeFloat32() (f float32) { + return float32(chkOvf.Float32V(d.DecodeFloat64())) +} + +type helperEncDriverMsgpackIO struct{} +type encFnMsgpackIO struct { + i encFnInfo + fe func(*encoderMsgpackIO, *encFnInfo, reflect.Value) +} +type encRtidFnMsgpackIO struct { + rtid uintptr + fn *encFnMsgpackIO +} +type encoderMsgpackIO struct { + dh helperEncDriverMsgpackIO + fp *fastpathEsMsgpackIO + e msgpackEncDriverIO + encoderBase +} +type helperDecDriverMsgpackIO struct{} +type decFnMsgpackIO struct { + i decFnInfo + fd func(*decoderMsgpackIO, *decFnInfo, reflect.Value) +} +type decRtidFnMsgpackIO struct { + rtid uintptr + fn *decFnMsgpackIO +} +type decoderMsgpackIO struct { + dh helperDecDriverMsgpackIO + fp *fastpathDsMsgpackIO + d msgpackDecDriverIO + decoderBase +} +type msgpackEncDriverIO struct { + noBuiltInTypes + encDriverNoopContainerWriter + encDriverNoState + encDriverContainerNoTrackerT + encInit2er + + h *MsgpackHandle + e *encoderBase + w bufioEncWriter +} +type msgpackDecDriverIO struct { + decDriverNoopContainerReader + decDriverNoopNumberHelper + decInit2er + + h *MsgpackHandle + d *decoderBase + r ioDecReader + + bdAndBdread + + noBuiltInTypes +} + +func (e *encoderMsgpackIO) rawExt(_ *encFnInfo, rv reflect.Value) { + if re := rv2i(rv).(*RawExt); re == nil { + e.e.EncodeNil() + } else { + e.e.EncodeRawExt(re) + } +} + +func (e *encoderMsgpackIO) ext(f *encFnInfo, rv reflect.Value) { + e.e.EncodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (e *encoderMsgpackIO) selferMarshal(_ *encFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecEncodeSelf(&Encoder{e}) +} + +func (e *encoderMsgpackIO) binaryMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.BinaryMarshaler).MarshalBinary() + e.marshalRaw(bs, fnerr) +} + +func (e *encoderMsgpackIO) textMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.TextMarshaler).MarshalText() + e.marshalUtf8(bs, fnerr) +} + +func (e *encoderMsgpackIO) jsonMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(jsonMarshaler).MarshalJSON() + e.marshalAsis(bs, fnerr) +} + +func (e *encoderMsgpackIO) raw(_ *encFnInfo, rv reflect.Value) { + e.rawBytes(rv2i(rv).(Raw)) +} + +func (e *encoderMsgpackIO) encodeComplex64(v complex64) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat32(real(v)) +} + +func (e *encoderMsgpackIO) encodeComplex128(v complex128) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat64(real(v)) +} + +func (e *encoderMsgpackIO) kBool(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeBool(rvGetBool(rv)) +} + +func (e *encoderMsgpackIO) kTime(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeTime(rvGetTime(rv)) +} + +func (e *encoderMsgpackIO) kString(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeString(rvGetString(rv)) +} + +func (e *encoderMsgpackIO) kFloat32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat32(rvGetFloat32(rv)) +} + +func (e *encoderMsgpackIO) kFloat64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat64(rvGetFloat64(rv)) +} + +func (e *encoderMsgpackIO) kComplex64(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex64(rvGetComplex64(rv)) +} + +func (e *encoderMsgpackIO) kComplex128(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex128(rvGetComplex128(rv)) +} + +func (e *encoderMsgpackIO) kInt(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt(rv))) +} + +func (e *encoderMsgpackIO) kInt8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt8(rv))) +} + +func (e *encoderMsgpackIO) kInt16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt16(rv))) +} + +func (e *encoderMsgpackIO) kInt32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt32(rv))) +} + +func (e *encoderMsgpackIO) kInt64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt64(rv))) +} + +func (e *encoderMsgpackIO) kUint(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint(rv))) +} + +func (e *encoderMsgpackIO) kUint8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint8(rv))) +} + +func (e *encoderMsgpackIO) kUint16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint16(rv))) +} + +func (e *encoderMsgpackIO) kUint32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint32(rv))) +} + +func (e *encoderMsgpackIO) kUint64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint64(rv))) +} + +func (e *encoderMsgpackIO) kUintptr(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUintptr(rv))) +} + +func (e *encoderMsgpackIO) kSeqFn(rt reflect.Type) (fn *encFnMsgpackIO) { + + if rt = baseRT(rt); rt.Kind() != reflect.Interface { + fn = e.fn(rt) + } + return +} + +func (e *encoderMsgpackIO) kArrayWMbs(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(l) + e.mapStart(l >> 1) + + var fn *encFnMsgpackIO + builtin := ti.tielem.flagEncBuiltin + if !builtin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerMapKey + e.e.WriteMapElemKey(true) + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(false) + } else { + e.mapElemValue() + } + } + e.c = 0 + e.e.WriteMapEnd() + +} + +func (e *encoderMsgpackIO) kArrayW(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l <= 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(l) + + var fn *encFnMsgpackIO + if !ti.tielem.flagEncBuiltin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerArrayElem + e.e.WriteArrayElem(true) + builtin := ti.tielem.flagEncBuiltin + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + e.c = containerArrayElem + e.e.WriteArrayElem(false) + } + + e.c = 0 + e.e.WriteArrayEnd() +} + +func (e *encoderMsgpackIO) kChan(f *encFnInfo, rv reflect.Value) { + if f.ti.chandir&uint8(reflect.RecvDir) == 0 { + halt.errorStr("send-only channel cannot be encoded") + } + if !f.ti.mbs && uint8TypId == rt2id(f.ti.elem) { + e.kSliceBytesChan(rv) + return + } + rtslice := reflect.SliceOf(f.ti.elem) + rv = chanToSlice(rv, rtslice, e.h.ChanRecvTimeout) + ti := e.h.getTypeInfo(rt2id(rtslice), rtslice) + if f.ti.mbs { + e.kArrayWMbs(rv, ti, true) + } else { + e.kArrayW(rv, ti, true) + } +} + +func (e *encoderMsgpackIO) kSlice(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, true) + } else if f.ti.rtid == uint8SliceTypId || uint8TypId == rt2id(f.ti.elem) { + + e.e.EncodeBytes(rvGetBytes(rv)) + } else { + e.kArrayW(rv, f.ti, true) + } +} + +func (e *encoderMsgpackIO) kArray(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, false) + } else if handleBytesWithinKArray && uint8TypId == rt2id(f.ti.elem) { + e.e.EncodeStringBytesRaw(rvGetArrayBytes(rv, nil)) + } else { + e.kArrayW(rv, f.ti, false) + } +} + +func (e *encoderMsgpackIO) kSliceBytesChan(rv reflect.Value) { + + bs0 := e.blist.peek(32, true) + bs := bs0 + + irv := rv2i(rv) + ch, ok := irv.(<-chan byte) + if !ok { + ch = irv.(chan byte) + } + +L1: + switch timeout := e.h.ChanRecvTimeout; { + case timeout == 0: + for { + select { + case b := <-ch: + bs = append(bs, b) + default: + break L1 + } + } + case timeout > 0: + tt := time.NewTimer(timeout) + for { + select { + case b := <-ch: + bs = append(bs, b) + case <-tt.C: + + break L1 + } + } + default: + for b := range ch { + bs = append(bs, b) + } + } + + e.e.EncodeBytes(bs) + e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.blist.put(bs0) + } +} + +func (e *encoderMsgpackIO) kStructFieldKey(keyType valueType, encName string) { + + if keyType == valueTypeString { + e.e.EncodeString(encName) + } else if keyType == valueTypeInt { + e.e.EncodeInt(must.Int(strconv.ParseInt(encName, 10, 64))) + } else if keyType == valueTypeUint { + e.e.EncodeUint(must.Uint(strconv.ParseUint(encName, 10, 64))) + } else if keyType == valueTypeFloat { + e.e.EncodeFloat64(must.Float(strconv.ParseFloat(encName, 64))) + } else { + halt.errorStr2("invalid struct key type: ", keyType.String()) + } + +} + +func (e *encoderMsgpackIO) kStructSimple(f *encFnInfo, rv reflect.Value) { + _ = e.e + tisfi := f.ti.sfi.source() + + chkCirRef := e.h.CheckCircularRef + var si *structFieldInfo + var j int + + if f.ti.toArray || e.h.StructToArray { + if len(tisfi) == 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } else { + if len(tisfi) == 0 { + e.e.WriteMapEmpty() + return + } + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + e.mapStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.EncodeStringNoEscape4Json(si.encName) + e.mapElemValue() + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteMapEnd() + } +} + +func (e *encoderMsgpackIO) kStruct(f *encFnInfo, rv reflect.Value) { + _ = e.e + ti := f.ti + toMap := !(ti.toArray || e.h.StructToArray) + var mf map[string]interface{} + if ti.flagMissingFielder { + toMap = true + mf = rv2i(rv).(MissingFielder).CodecMissingFields() + } else if ti.flagMissingFielderPtr { + toMap = true + if rv.CanAddr() { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder).CodecMissingFields() + } else { + mf = rv2i(e.addrRV(rv, ti.rt, ti.ptr)).(MissingFielder).CodecMissingFields() + } + } + newlen := len(mf) + tisfi := ti.sfi.source() + newlen += len(tisfi) + + var fkvs = e.slist.get(newlen)[:newlen] + + recur := e.h.RecursiveEmptyCheck + chkCirRef := e.h.CheckCircularRef + + var xlen int + + var kv sfiRv + var j int + var sf encStructFieldObj + if toMap { + newlen = 0 + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + for _, si := range tisfi { + + if si.omitEmpty { + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyValue(kv.r, e.h.TypeInfos, recur) { + continue + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[newlen] = kv + newlen++ + } + + var mf2s []stringIntf + if len(mf) != 0 { + mf2s = make([]stringIntf, 0, len(mf)) + for k, v := range mf { + if k == "" { + continue + } + if ti.infoFieldOmitempty && isEmptyValue(reflect.ValueOf(v), e.h.TypeInfos, recur) { + continue + } + mf2s = append(mf2s, stringIntf{k, v}) + } + } + + xlen = newlen + len(mf2s) + if xlen == 0 { + e.e.WriteMapEmpty() + goto END + } + + e.mapStart(xlen) + + if len(mf2s) != 0 && e.h.Canonical { + mf2w := make([]encStructFieldObj, newlen+len(mf2s)) + for j = 0; j < newlen; j++ { + kv = fkvs[j] + mf2w[j] = encStructFieldObj{kv.v.encName, kv.r, nil, true, + !kv.v.encNameEscape4Json, kv.v.encBuiltin} + } + for _, v := range mf2s { + mf2w[j] = encStructFieldObj{v.v, reflect.Value{}, v.i, false, false, false} + j++ + } + sort.Sort((encStructFieldObjSlice)(mf2w)) + for j, sf = range mf2w { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && sf.noEsc4json { + e.e.EncodeStringNoEscape4Json(sf.key) + } else { + e.kStructFieldKey(ti.keyType, sf.key) + } + e.mapElemValue() + if sf.isRv { + if sf.builtin { + e.encodeIB(rv2i(baseRVRV(sf.rv))) + } else { + e.encodeValue(sf.rv, nil) + } + } else { + if !e.encodeBuiltin(sf.intf) { + e.encodeR(reflect.ValueOf(sf.intf)) + } + + } + } + } else { + keytyp := ti.keyType + for j = 0; j < newlen; j++ { + kv = fkvs[j] + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && !kv.v.encNameEscape4Json { + e.e.EncodeStringNoEscape4Json(kv.v.encName) + } else { + e.kStructFieldKey(keytyp, kv.v.encName) + } + e.mapElemValue() + if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + for _, v := range mf2s { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.kStructFieldKey(keytyp, v.v) + e.mapElemValue() + if !e.encodeBuiltin(v.i) { + e.encodeR(reflect.ValueOf(v.i)) + } + + j++ + } + } + + e.c = 0 + e.e.WriteMapEnd() + } else { + newlen = len(tisfi) + for i, si := range tisfi { + + if si.omitEmpty { + + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyContainerValue(kv.r, e.h.TypeInfos, recur) { + kv.r = reflect.Value{} + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[i] = kv + } + + if newlen == 0 { + e.e.WriteArrayEmpty() + goto END + } + + e.arrayStart(newlen) + for j = 0; j < newlen; j++ { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + kv = fkvs[j] + if !kv.r.IsValid() { + e.e.EncodeNil() + } else if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } + +END: + + e.slist.put(fkvs) +} + +func (e *encoderMsgpackIO) kMap(f *encFnInfo, rv reflect.Value) { + _ = e.e + l := rvLenMap(rv) + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.mapStart(l) + + var keyFn, valFn *encFnMsgpackIO + + ktypeKind := reflect.Kind(f.ti.keykind) + vtypeKind := reflect.Kind(f.ti.elemkind) + + rtval := f.ti.elem + rtvalkind := vtypeKind + for rtvalkind == reflect.Ptr { + rtval = rtval.Elem() + rtvalkind = rtval.Kind() + } + if rtvalkind != reflect.Interface { + valFn = e.fn(rtval) + } + + var rvv = mapAddrLoopvarRV(f.ti.elem, vtypeKind) + + rtkey := f.ti.key + var keyTypeIsString = stringTypId == rt2id(rtkey) + if keyTypeIsString { + keyFn = e.fn(rtkey) + } else { + for rtkey.Kind() == reflect.Ptr { + rtkey = rtkey.Elem() + } + if rtkey.Kind() != reflect.Interface { + keyFn = e.fn(rtkey) + } + } + + if e.h.Canonical { + e.kMapCanonical(f.ti, rv, rvv, keyFn, valFn) + e.c = 0 + e.e.WriteMapEnd() + return + } + + var rvk = mapAddrLoopvarRV(f.ti.key, ktypeKind) + + var it mapIter + mapRange(&it, rv, rvk, rvv, true) + + kbuiltin := f.ti.tikey.flagEncBuiltin + vbuiltin := f.ti.tielem.flagEncBuiltin + for j := 0; it.Next(); j++ { + rv = it.Key() + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if keyTypeIsString { + e.e.EncodeString(rvGetString(rv)) + } else if kbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(rv, keyFn) + } + e.mapElemValue() + rv = it.Value() + if vbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(it.Value(), valFn) + } + } + it.Done() + + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderMsgpackIO) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valFn *encFnMsgpackIO) { + _ = e.e + + rtkey := ti.key + rtkeydecl := rtkey.PkgPath() == "" && rtkey.Name() != "" + + mks := rv.MapKeys() + rtkeyKind := rtkey.Kind() + mparams := getMapReqParams(ti) + + switch rtkeyKind { + case reflect.Bool: + + if len(mks) == 2 && mks[0].Bool() { + mks[0], mks[1] = mks[1], mks[0] + } + for i := range mks { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeBool(mks[i].Bool()) + } else { + e.encodeValueNonNil(mks[i], keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mks[i], rvv, mparams), valFn) + } + case reflect.String: + mksv := make([]orderedRv[string], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rvGetString(k) + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeString(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr: + mksv := make([]orderedRv[uint64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Uint() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeUint(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + mksv := make([]orderedRv[int64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Int() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeInt(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float32: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat32(float32(mksv[i].v)) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float64: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat64(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + default: + if rtkey == timeTyp { + mksv := make([]timeRv, len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rv2i(k).(time.Time) + } + slices.SortFunc(mksv, cmpTimeRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeTime(mksv[i].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + break + } + + bs0 := e.blist.get(len(mks) * 16) + mksv := bs0 + mksbv := make([]bytesRv, len(mks)) + + sideEncode(e.hh, &e.h.sideEncPool, func(se encoderI) { + se.ResetBytes(&mksv) + for i, k := range mks { + v := &mksbv[i] + l := len(mksv) + se.setContainerState(containerMapKey) + se.encodeR(baseRVRV(k)) + se.atEndOfEncode() + se.writerEnd() + v.r = k + v.v = mksv[l:] + } + }) + + slices.SortFunc(mksbv, cmpBytesRv) + for j := range mksbv { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.writeBytesAsis(mksbv[j].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksbv[j].r, rvv, mparams), valFn) + } + e.blist.put(mksv) + if !byteSliceSameData(bs0, mksv) { + e.blist.put(bs0) + } + } +} + +func (e *encoderMsgpackIO) init(h Handle) { + initHandle(h) + callMake(&e.e) + e.hh = h + e.h = h.getBasicHandle() + + e.err = errEncoderNotInitialized + + e.fp = e.e.init(h, &e.encoderBase, e).(*fastpathEsMsgpackIO) + + if e.bytes { + e.rtidFn = &e.h.rtidFnsEncBytes + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtBytes + } else { + e.rtidFn = &e.h.rtidFnsEncIO + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtIO + } + + e.reset() +} + +func (e *encoderMsgpackIO) reset() { + e.e.reset() + if e.ci != nil { + e.ci = e.ci[:0] + } + e.c = 0 + e.calls = 0 + e.seq = 0 + e.err = nil +} + +func (e *encoderMsgpackIO) Encode(v interface{}) (err error) { + + defer panicValToErr(e, callRecoverSentinel, &e.err, &err, debugging) + e.mustEncode(v) + return +} + +func (e *encoderMsgpackIO) MustEncode(v interface{}) { + defer panicValToErr(e, callRecoverSentinel, &e.err, nil, true) + e.mustEncode(v) + return +} + +func (e *encoderMsgpackIO) mustEncode(v interface{}) { + halt.onerror(e.err) + if e.hh == nil { + halt.onerror(errNoFormatHandle) + } + + e.calls++ + if !e.encodeBuiltin(v) { + e.encodeR(reflect.ValueOf(v)) + } + + e.calls-- + if e.calls == 0 { + e.e.atEndOfEncode() + e.e.writerEnd() + } +} + +func (e *encoderMsgpackIO) encodeI(iv interface{}) { + if !e.encodeBuiltin(iv) { + e.encodeR(reflect.ValueOf(iv)) + } +} + +func (e *encoderMsgpackIO) encodeIB(iv interface{}) { + if !e.encodeBuiltin(iv) { + + halt.errorStr("[should not happen] invalid type passed to encodeBuiltin") + } +} + +func (e *encoderMsgpackIO) encodeR(base reflect.Value) { + e.encodeValue(base, nil) +} + +func (e *encoderMsgpackIO) encodeBuiltin(iv interface{}) (ok bool) { + ok = true + switch v := iv.(type) { + case nil: + e.e.EncodeNil() + + case Raw: + e.rawBytes(v) + case string: + e.e.EncodeString(v) + case bool: + e.e.EncodeBool(v) + case int: + e.e.EncodeInt(int64(v)) + case int8: + e.e.EncodeInt(int64(v)) + case int16: + e.e.EncodeInt(int64(v)) + case int32: + e.e.EncodeInt(int64(v)) + case int64: + e.e.EncodeInt(v) + case uint: + e.e.EncodeUint(uint64(v)) + case uint8: + e.e.EncodeUint(uint64(v)) + case uint16: + e.e.EncodeUint(uint64(v)) + case uint32: + e.e.EncodeUint(uint64(v)) + case uint64: + e.e.EncodeUint(v) + case uintptr: + e.e.EncodeUint(uint64(v)) + case float32: + e.e.EncodeFloat32(v) + case float64: + e.e.EncodeFloat64(v) + case complex64: + e.encodeComplex64(v) + case complex128: + e.encodeComplex128(v) + case time.Time: + e.e.EncodeTime(v) + case []byte: + e.e.EncodeBytes(v) + default: + + ok = !skipFastpathTypeSwitchInDirectCall && e.dh.fastpathEncodeTypeSwitch(iv, e) + } + return +} + +func (e *encoderMsgpackIO) encodeValue(rv reflect.Value, fn *encFnMsgpackIO) { + + var ciPushes int + + var rvp reflect.Value + var rvpValid bool + +RV: + switch rv.Kind() { + case reflect.Ptr: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = true + rvp = rv + rv = rv.Elem() + + if e.h.CheckCircularRef && e.ci.canPushElemKind(rv.Kind()) { + e.ci.push(rv2i(rvp)) + ciPushes++ + } + goto RV + case reflect.Interface: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = false + rvp = reflect.Value{} + rv = rv.Elem() + fn = nil + goto RV + case reflect.Map: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteMapEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Slice, reflect.Chan: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteArrayEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Invalid, reflect.Func: + e.e.EncodeNil() + goto END + } + + if fn == nil { + fn = e.fn(rv.Type()) + } + + if !fn.i.addrE { + + } else if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + fn.fe(e, &fn.i, rv) + +END: + if ciPushes > 0 { + e.ci.pop(ciPushes) + } +} + +func (e *encoderMsgpackIO) encodeValueNonNil(rv reflect.Value, fn *encFnMsgpackIO) { + + if fn.i.addrE { + if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + } + fn.fe(e, &fn.i, rv) +} + +func (e *encoderMsgpackIO) encodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + e.encodeValue(baseRV(v), e.fn(t)) + } else { + e.encodeValue(baseRV(v), e.fnNoExt(t)) + } +} + +func (e *encoderMsgpackIO) marshalUtf8(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.EncodeString(stringView(bs)) + } +} + +func (e *encoderMsgpackIO) marshalAsis(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.writeBytesAsis(bs) + } +} + +func (e *encoderMsgpackIO) marshalRaw(bs []byte, fnerr error) { + halt.onerror(fnerr) + e.e.EncodeBytes(bs) +} + +func (e *encoderMsgpackIO) rawBytes(vv Raw) { + v := []byte(vv) + if !e.h.Raw { + halt.errorBytes("Raw values cannot be encoded: ", v) + } + e.e.writeBytesAsis(v) +} + +func (e *encoderMsgpackIO) fn(t reflect.Type) *encFnMsgpackIO { + return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false) +} + +func (e *encoderMsgpackIO) fnNoExt(t reflect.Type) *encFnMsgpackIO { + return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true) +} + +func (e *encoderMsgpackIO) mapStart(length int) { + e.e.WriteMapStart(length) + e.c = containerMapStart +} + +func (e *encoderMsgpackIO) mapElemValue() { + e.e.WriteMapElemValue() + e.c = containerMapValue +} + +func (e *encoderMsgpackIO) arrayStart(length int) { + e.e.WriteArrayStart(length) + e.c = containerArrayStart +} + +func (e *encoderMsgpackIO) writerEnd() { + e.e.writerEnd() +} + +func (e *encoderMsgpackIO) atEndOfEncode() { + e.e.atEndOfEncode() +} + +func (e *encoderMsgpackIO) Reset(w io.Writer) { + if e.bytes { + halt.onerror(errEncNoResetBytesWithWriter) + } + e.reset() + if w == nil { + w = io.Discard + } + e.e.resetOutIO(w) +} + +func (e *encoderMsgpackIO) ResetBytes(out *[]byte) { + if !e.bytes { + halt.onerror(errEncNoResetWriterWithBytes) + } + e.resetBytes(out) +} + +func (e *encoderMsgpackIO) resetBytes(out *[]byte) { + e.reset() + if out == nil { + out = &bytesEncAppenderDefOut + } + e.e.resetOutBytes(out) +} + +func (helperEncDriverMsgpackIO) newEncoderBytes(out *[]byte, h Handle) *encoderMsgpackIO { + var c1 encoderMsgpackIO + c1.bytes = true + c1.init(h) + c1.ResetBytes(out) + return &c1 +} + +func (helperEncDriverMsgpackIO) newEncoderIO(out io.Writer, h Handle) *encoderMsgpackIO { + var c1 encoderMsgpackIO + c1.bytes = false + c1.init(h) + c1.Reset(out) + return &c1 +} + +func (helperEncDriverMsgpackIO) encFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathEsMsgpackIO) (f *fastpathEMsgpackIO, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperEncDriverMsgpackIO) encFindRtidFn(s []encRtidFnMsgpackIO, rtid uintptr) (i uint, fn *encFnMsgpackIO) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperEncDriverMsgpackIO) encFromRtidFnSlice(fns *atomicRtidFnSlice) (s []encRtidFnMsgpackIO) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]encRtidFnMsgpackIO](v)) + } + return +} + +func (dh helperEncDriverMsgpackIO) encFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, + x *BasicHandle, fp *fastpathEsMsgpackIO, checkExt bool) (fn *encFnMsgpackIO) { + return dh.encFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperEncDriverMsgpackIO) encFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsMsgpackIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnMsgpackIO) { + rtid := rt2id(rt) + var sp []encRtidFnMsgpackIO = dh.encFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.encFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.encFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperEncDriverMsgpackIO) encFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsMsgpackIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnMsgpackIO) { + + fn = dh.encFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []encRtidFnMsgpackIO + mu.Lock() + sp = dh.encFromRtidFnSlice(fns) + + if sp == nil { + sp = []encRtidFnMsgpackIO{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.encFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]encRtidFnMsgpackIO, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = encRtidFnMsgpackIO{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperEncDriverMsgpackIO) encFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathEsMsgpackIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnMsgpackIO) { + fn = new(encFnMsgpackIO) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + if rtid == timeTypId && timeBuiltin { + fn.fe = (*encoderMsgpackIO).kTime + } else if rtid == rawTypId { + fn.fe = (*encoderMsgpackIO).raw + } else if rtid == rawExtTypId { + fn.fe = (*encoderMsgpackIO).rawExt + fi.addrE = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fe = (*encoderMsgpackIO).ext + if rk == reflect.Struct || rk == reflect.Array { + fi.addrE = true + } + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fe = (*encoderMsgpackIO).selferMarshal + fi.addrE = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fe = (*encoderMsgpackIO).binaryMarshal + fi.addrE = ti.flagBinaryMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fe = (*encoderMsgpackIO).jsonMarshal + fi.addrE = ti.flagJsonMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fe = (*encoderMsgpackIO).textMarshal + fi.addrE = ti.flagTextMarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fe = fp[idx].encfn + } + } else { + + xfe, xrt := dh.encFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf := xfe.encfn + fn.fe = func(e *encoderMsgpackIO, xf *encFnInfo, xrv reflect.Value) { + xfnf(e, xf, rvConvert(xrv, xrt)) + } + } + } + } + if fn.fe == nil { + switch rk { + case reflect.Bool: + fn.fe = (*encoderMsgpackIO).kBool + case reflect.String: + + fn.fe = (*encoderMsgpackIO).kString + case reflect.Int: + fn.fe = (*encoderMsgpackIO).kInt + case reflect.Int8: + fn.fe = (*encoderMsgpackIO).kInt8 + case reflect.Int16: + fn.fe = (*encoderMsgpackIO).kInt16 + case reflect.Int32: + fn.fe = (*encoderMsgpackIO).kInt32 + case reflect.Int64: + fn.fe = (*encoderMsgpackIO).kInt64 + case reflect.Uint: + fn.fe = (*encoderMsgpackIO).kUint + case reflect.Uint8: + fn.fe = (*encoderMsgpackIO).kUint8 + case reflect.Uint16: + fn.fe = (*encoderMsgpackIO).kUint16 + case reflect.Uint32: + fn.fe = (*encoderMsgpackIO).kUint32 + case reflect.Uint64: + fn.fe = (*encoderMsgpackIO).kUint64 + case reflect.Uintptr: + fn.fe = (*encoderMsgpackIO).kUintptr + case reflect.Float32: + fn.fe = (*encoderMsgpackIO).kFloat32 + case reflect.Float64: + fn.fe = (*encoderMsgpackIO).kFloat64 + case reflect.Complex64: + fn.fe = (*encoderMsgpackIO).kComplex64 + case reflect.Complex128: + fn.fe = (*encoderMsgpackIO).kComplex128 + case reflect.Chan: + fn.fe = (*encoderMsgpackIO).kChan + case reflect.Slice: + fn.fe = (*encoderMsgpackIO).kSlice + case reflect.Array: + fn.fe = (*encoderMsgpackIO).kArray + case reflect.Struct: + if ti.simple { + fn.fe = (*encoderMsgpackIO).kStructSimple + } else { + fn.fe = (*encoderMsgpackIO).kStruct + } + case reflect.Map: + fn.fe = (*encoderMsgpackIO).kMap + case reflect.Interface: + + fn.fe = (*encoderMsgpackIO).kErr + default: + + fn.fe = (*encoderMsgpackIO).kErr + } + } + } + return +} +func (d *decoderMsgpackIO) rawExt(f *decFnInfo, rv reflect.Value) { + d.d.DecodeRawExt(rv2i(rv).(*RawExt)) +} + +func (d *decoderMsgpackIO) ext(f *decFnInfo, rv reflect.Value) { + d.d.DecodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (d *decoderMsgpackIO) selferUnmarshal(_ *decFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecDecodeSelf(&Decoder{d}) +} + +func (d *decoderMsgpackIO) binaryUnmarshal(_ *decFnInfo, rv reflect.Value) { + bm := rv2i(rv).(encoding.BinaryUnmarshaler) + xbs, _ := d.d.DecodeBytes() + fnerr := bm.UnmarshalBinary(xbs) + halt.onerror(fnerr) +} + +func (d *decoderMsgpackIO) textUnmarshal(_ *decFnInfo, rv reflect.Value) { + tm := rv2i(rv).(encoding.TextUnmarshaler) + fnerr := tm.UnmarshalText(bytesOKs(d.d.DecodeStringAsBytes())) + halt.onerror(fnerr) +} + +func (d *decoderMsgpackIO) jsonUnmarshal(_ *decFnInfo, rv reflect.Value) { + d.jsonUnmarshalV(rv2i(rv).(jsonUnmarshaler)) +} + +func (d *decoderMsgpackIO) jsonUnmarshalV(tm jsonUnmarshaler) { + + halt.onerror(tm.UnmarshalJSON(d.d.nextValueBytes())) +} + +func (d *decoderMsgpackIO) kErr(_ *decFnInfo, rv reflect.Value) { + halt.errorf("unsupported decoding kind: %s, for %#v", rv.Kind(), rv) + +} + +func (d *decoderMsgpackIO) raw(_ *decFnInfo, rv reflect.Value) { + rvSetBytes(rv, d.rawBytes()) +} + +func (d *decoderMsgpackIO) kString(_ *decFnInfo, rv reflect.Value) { + rvSetString(rv, d.detach2Str(d.d.DecodeStringAsBytes())) +} + +func (d *decoderMsgpackIO) kBool(_ *decFnInfo, rv reflect.Value) { + rvSetBool(rv, d.d.DecodeBool()) +} + +func (d *decoderMsgpackIO) kTime(_ *decFnInfo, rv reflect.Value) { + rvSetTime(rv, d.d.DecodeTime()) +} + +func (d *decoderMsgpackIO) kFloat32(_ *decFnInfo, rv reflect.Value) { + rvSetFloat32(rv, d.d.DecodeFloat32()) +} + +func (d *decoderMsgpackIO) kFloat64(_ *decFnInfo, rv reflect.Value) { + rvSetFloat64(rv, d.d.DecodeFloat64()) +} + +func (d *decoderMsgpackIO) kComplex64(_ *decFnInfo, rv reflect.Value) { + rvSetComplex64(rv, complex(d.d.DecodeFloat32(), 0)) +} + +func (d *decoderMsgpackIO) kComplex128(_ *decFnInfo, rv reflect.Value) { + rvSetComplex128(rv, complex(d.d.DecodeFloat64(), 0)) +} + +func (d *decoderMsgpackIO) kInt(_ *decFnInfo, rv reflect.Value) { + rvSetInt(rv, int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))) +} + +func (d *decoderMsgpackIO) kInt8(_ *decFnInfo, rv reflect.Value) { + rvSetInt8(rv, int8(chkOvf.IntV(d.d.DecodeInt64(), 8))) +} + +func (d *decoderMsgpackIO) kInt16(_ *decFnInfo, rv reflect.Value) { + rvSetInt16(rv, int16(chkOvf.IntV(d.d.DecodeInt64(), 16))) +} + +func (d *decoderMsgpackIO) kInt32(_ *decFnInfo, rv reflect.Value) { + rvSetInt32(rv, int32(chkOvf.IntV(d.d.DecodeInt64(), 32))) +} + +func (d *decoderMsgpackIO) kInt64(_ *decFnInfo, rv reflect.Value) { + rvSetInt64(rv, d.d.DecodeInt64()) +} + +func (d *decoderMsgpackIO) kUint(_ *decFnInfo, rv reflect.Value) { + rvSetUint(rv, uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderMsgpackIO) kUintptr(_ *decFnInfo, rv reflect.Value) { + rvSetUintptr(rv, uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderMsgpackIO) kUint8(_ *decFnInfo, rv reflect.Value) { + rvSetUint8(rv, uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))) +} + +func (d *decoderMsgpackIO) kUint16(_ *decFnInfo, rv reflect.Value) { + rvSetUint16(rv, uint16(chkOvf.UintV(d.d.DecodeUint64(), 16))) +} + +func (d *decoderMsgpackIO) kUint32(_ *decFnInfo, rv reflect.Value) { + rvSetUint32(rv, uint32(chkOvf.UintV(d.d.DecodeUint64(), 32))) +} + +func (d *decoderMsgpackIO) kUint64(_ *decFnInfo, rv reflect.Value) { + rvSetUint64(rv, d.d.DecodeUint64()) +} + +func (d *decoderMsgpackIO) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) { + + n := d.naked() + d.d.DecodeNaked() + + if decFailNonEmptyIntf && f.ti.numMeth > 0 { + halt.errorf("cannot decode non-nil codec value into nil %v (%v methods)", f.ti.rt, f.ti.numMeth) + } + + switch n.v { + case valueTypeMap: + mtid := d.mtid + if mtid == 0 { + if d.jsms { + mtid = mapStrIntfTypId + } else { + mtid = mapIntfIntfTypId + } + } + if mtid == mapStrIntfTypId { + var v2 map[string]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if mtid == mapIntfIntfTypId { + var v2 map[interface{}]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.mtr { + rvn = reflect.New(d.h.MapType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + + rvn = rvZeroAddrK(d.h.MapType, reflect.Map) + d.decodeValue(rvn, nil) + } + case valueTypeArray: + if d.stid == 0 || d.stid == intfSliceTypId { + var v2 []interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.str { + rvn = reflect.New(d.h.SliceType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + rvn = rvZeroAddrK(d.h.SliceType, reflect.Slice) + d.decodeValue(rvn, nil) + } + if d.h.PreferArrayOverSlice { + rvn = rvGetArray4Slice(rvn) + } + case valueTypeExt: + tag, bytes := n.u, n.l + bfn := d.h.getExtForTag(tag) + var re = RawExt{Tag: tag} + if bytes == nil { + + if bfn == nil { + d.decode(&re.Value) + rvn = rv4iptr(&re).Elem() + } else if bfn.ext == SelfExt { + rvn = rvZeroAddrK(bfn.rt, bfn.rt.Kind()) + d.decodeValue(rvn, d.fnNoExt(bfn.rt)) + } else { + rvn = reflect.New(bfn.rt) + d.interfaceExtConvertAndDecode(rv2i(rvn), bfn.ext) + rvn = rvn.Elem() + } + } else { + + if bfn == nil { + re.setData(bytes, false) + rvn = rv4iptr(&re).Elem() + } else { + rvn = reflect.New(bfn.rt) + if bfn.ext == SelfExt { + sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) }) + } else { + bfn.ext.ReadExt(rv2i(rvn), bytes) + } + rvn = rvn.Elem() + } + } + + if d.h.PreferPointerForStructOrArray && rvn.CanAddr() { + if rk := rvn.Kind(); rk == reflect.Array || rk == reflect.Struct { + rvn = rvn.Addr() + } + } + case valueTypeNil: + + case valueTypeInt: + rvn = n.ri() + case valueTypeUint: + rvn = n.ru() + case valueTypeFloat: + rvn = n.rf() + case valueTypeBool: + rvn = n.rb() + case valueTypeString, valueTypeSymbol: + rvn = n.rs() + case valueTypeBytes: + rvn = n.rl() + case valueTypeTime: + rvn = n.rt() + default: + halt.errorStr2("kInterfaceNaked: unexpected valueType: ", n.v.String()) + } + return +} + +func (d *decoderMsgpackIO) kInterface(f *decFnInfo, rv reflect.Value) { + + isnilrv := rvIsNil(rv) + + var rvn reflect.Value + + if d.h.InterfaceReset { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } else if !isnilrv { + decSetNonNilRV2Zero4Intf(rv) + } + return + } + } else if isnilrv { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } + return + } + } else { + + rvn = rv.Elem() + } + + canDecode, _ := isDecodeable(rvn) + + if !canDecode { + rvn2 := d.oneShotAddrRV(rvn.Type(), rvn.Kind()) + rvSetDirect(rvn2, rvn) + rvn = rvn2 + } + + d.decodeValue(rvn, nil) + rvSetIntf(rv, rvn) +} + +func (d *decoderMsgpackIO) kStructField(si *structFieldInfo, rv reflect.Value) { + if d.d.TryNil() { + rv = si.fieldNoAlloc(rv, true) + if rv.IsValid() { + decSetNonNilRV2Zero(rv) + } + } else if si.decBuiltin { + rv = rvAddr(si.fieldAlloc(rv), si.ptrTyp) + d.decode(rv2i(rv)) + } else { + fn := d.fn(si.baseTyp) + rv = si.fieldAlloc(rv) + if fn.i.addrD { + rv = rvAddr(rv, si.ptrTyp) + } + fn.fd(d, &fn.i, rv) + } +} + +func (d *decoderMsgpackIO) kStructSimple(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var rvkencname []byte + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderMsgpackIO) kStruct(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + var mf MissingFielder + if ti.flagMissingFielder { + mf = rv2i(rv).(MissingFielder) + } else if ti.flagMissingFielderPtr { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder) + } + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var name2 []byte + var rvkencname []byte + tkt := ti.keyType + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + + if tkt == valueTypeString { + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + } else if tkt == valueTypeInt { + rvkencname = strconv.AppendInt(d.b[:0], d.d.DecodeInt64(), 10) + } else if tkt == valueTypeUint { + rvkencname = strconv.AppendUint(d.b[:0], d.d.DecodeUint64(), 10) + } else if tkt == valueTypeFloat { + rvkencname = strconv.AppendFloat(d.b[:0], d.d.DecodeFloat64(), 'f', -1, 64) + } else { + halt.errorStr2("invalid struct key type: ", ti.keyType.String()) + } + + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else if mf != nil { + + name2 = append(name2[:0], rvkencname...) + var f interface{} + d.decode(&f) + if !mf.CodecMissingField(name2, f) && d.h.ErrorIfNoField { + halt.errorStr2("no matching struct field when decoding stream map with key: ", stringView(name2)) + } + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderMsgpackIO) kSlice(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + rvCanset := rv.CanSet() + + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + rvbs := rvGetBytes(rv) + if rvCanset { + bs2, bst := d.decodeBytesInto(rvbs, false) + if bst != dBytesIntoParamOut { + rvSetBytes(rv, bs2) + } + } else { + + d.decodeBytesInto(rvbs[:len(rvbs):len(rvbs)], true) + } + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset { + if rvIsNil(rv) { + rvSetDirect(rv, rvSliceZeroCap(ti.rt)) + } else { + rvSetSliceLen(rv, 0) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem0Mut := !scalarBitset.isset(ti.elemkind) + rtelem := ti.elem + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnMsgpackIO + + var rvChanged bool + + var rv0 = rv + var rv9 reflect.Value + + rvlen := rvLenSlice(rv) + rvcap := rvCapSlice(rv) + maxInitLen := d.maxInitLen() + hasLen := containerLenS >= 0 + if hasLen { + if containerLenS > rvcap { + oldRvlenGtZero := rvlen > 0 + rvlen1 := int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + if rvlen1 == rvlen { + } else if rvlen1 <= rvcap { + if rvCanset { + rvlen = rvlen1 + rvSetSliceLen(rv, rvlen) + } + } else if rvCanset { + rvlen = rvlen1 + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + if rvChanged && oldRvlenGtZero && rtelem0Mut { + rvCopySlice(rv, rv0, rtelem) + } + } else if containerLenS != rvlen { + if rvCanset { + rvlen = containerLenS + rvSetSliceLen(rv, rvlen) + } + } + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } + + var j int + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if rvCanset { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + + if rvlen < rvcap { + rvlen = rvcap + if rvCanset { + rvSetSliceLen(rv, rvlen) + } else if rvChanged { + rv = rvSlice(rv, rvlen) + } else { + halt.onerror(errExpandSliceCannotChange) + } + } else { + if !(rvCanset || rvChanged) { + halt.onerror(errExpandSliceCannotChange) + } + rv, rvcap, rvCanset = rvGrowSlice(rv, f.ti, rvcap, 1) + + rvlen = rvcap + rvChanged = !rvCanset + } + } + + rv9 = rvArrayIndex(rv, j, f.ti, true) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if j < rvlen { + if rvCanset { + rvSetSliceLen(rv, j) + } else if rvChanged { + rv = rvSlice(rv, j) + } + + } else if j == 0 && rvIsNil(rv) { + if rvCanset { + rv = rvSliceZeroCap(ti.rt) + rvCanset = false + rvChanged = true + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } +} + +func (d *decoderMsgpackIO) kArray(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + ctyp := d.d.ContainerType() + if handleBytesWithinKArray && (ctyp == valueTypeBytes || ctyp == valueTypeString) { + + if ti.elemkind != uint8(reflect.Uint8) { + halt.errorf("bytes/string in stream can decode into array of bytes, but not %v", ti.rt) + } + rvbs := rvGetArrayBytes(rv, nil) + d.decodeBytesInto(rvbs, true) + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var rv9 reflect.Value + + rvlen := rv.Len() + hasLen := containerLenS >= 0 + if hasLen && containerLenS > rvlen { + halt.errorf("cannot decode into array with length: %v, less than container length: %v", any(rvlen), any(containerLenS)) + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + var fn *decFnMsgpackIO + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } else { + fn = d.fn(rtelem) + } + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + d.arrayCannotExpand(rvlen, j+1) + d.swallow() + continue + } + + rv9 = rvArrayIndex(rv, j, f.ti, false) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderMsgpackIO) kChan(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + if ti.chandir&uint8(reflect.SendDir) == 0 { + halt.errorStr("receive-only channel cannot be decoded") + } + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + bs2, _ := d.d.DecodeBytes() + irv := rv2i(rv) + ch, ok := irv.(chan<- byte) + if !ok { + ch = irv.(chan byte) + } + for _, b := range bs2 { + ch <- b + } + return + } + + var rvCanset = rv.CanSet() + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset && rvIsNil(rv) { + rvSetDirect(rv, reflect.MakeChan(ti.rt, 0)) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + useTransient := decUseTransient && ti.elemkind != byte(reflect.Ptr) && ti.tielem.flagCanTransient + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnMsgpackIO + + var rvChanged bool + var rv0 = rv + var rv9 reflect.Value + + var rvlen int + hasLen := containerLenS >= 0 + maxInitLen := d.maxInitLen() + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if hasLen { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + } else { + rvlen = decDefChanCap + } + if rvCanset { + rv = reflect.MakeChan(ti.rt, rvlen) + rvChanged = true + } else { + halt.errorStr("cannot decode into non-settable chan") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if rv9.IsValid() { + rvSetZero(rv9) + } else if useTransient { + rv9 = d.perType.TransientAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } else { + rv9 = rvZeroAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } + if !d.d.TryNil() { + d.decodeValueNoCheckNil(rv9, fn) + } + rv.Send(rv9) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } + +} + +func (d *decoderMsgpackIO) kMap(f *decFnInfo, rv reflect.Value) { + _ = d.d + containerLen := d.mapStart(d.d.ReadMapStart()) + ti := f.ti + if rvIsNil(rv) { + rvlen := int(decInferLen(containerLen, d.maxInitLen(), uint(ti.keysize+ti.elemsize))) + rvSetDirect(rv, makeMapReflect(ti.rt, rvlen)) + } + + if containerLen == 0 { + d.mapEnd() + return + } + + ktype, vtype := ti.key, ti.elem + ktypeId := rt2id(ktype) + vtypeKind := reflect.Kind(ti.elemkind) + ktypeKind := reflect.Kind(ti.keykind) + mparams := getMapReqParams(ti) + + vtypePtr := vtypeKind == reflect.Ptr + ktypePtr := ktypeKind == reflect.Ptr + + vTransient := decUseTransient && !vtypePtr && ti.tielem.flagCanTransient + + kTransient := vTransient && !ktypePtr && ti.tikey.flagCanTransient + + var vtypeElem reflect.Type + + var keyFn, valFn *decFnMsgpackIO + var ktypeLo, vtypeLo = ktype, vtype + + if ktypeKind == reflect.Ptr { + for ktypeLo = ktype.Elem(); ktypeLo.Kind() == reflect.Ptr; ktypeLo = ktypeLo.Elem() { + } + } + + if vtypePtr { + vtypeElem = vtype.Elem() + for vtypeLo = vtypeElem; vtypeLo.Kind() == reflect.Ptr; vtypeLo = vtypeLo.Elem() { + } + } + + rvkMut := !scalarBitset.isset(ti.keykind) + rvvMut := !scalarBitset.isset(ti.elemkind) + rvvCanNil := isnilBitset.isset(ti.elemkind) + + var rvk, rvkn, rvv, rvvn, rvva, rvvz reflect.Value + + var doMapGet, doMapSet bool + + if !d.h.MapValueReset { + if rvvMut && (vtypeKind != reflect.Interface || !d.h.InterfaceReset) { + doMapGet = true + rvva = mapAddrLoopvarRV(vtype, vtypeKind) + } + } + + ktypeIsString := ktypeId == stringTypId + ktypeIsIntf := ktypeId == intfTypId + hasLen := containerLen >= 0 + + var kstr2bs []byte + var kstr string + + var mapKeyStringSharesBytesBuf bool + var att dBytesAttachState + + var vElem, kElem reflect.Type + kbuiltin := ti.tikey.flagDecBuiltin && ti.keykind != uint8(reflect.Slice) + vbuiltin := ti.tielem.flagDecBuiltin + if kbuiltin && ktypePtr { + kElem = ti.key.Elem() + } + if vbuiltin && vtypePtr { + vElem = ti.elem.Elem() + } + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + mapKeyStringSharesBytesBuf = false + kstr = "" + if j == 0 { + + if kTransient { + rvk = d.perType.TransientAddr2K(ktype, ktypeKind) + } else { + rvk = rvZeroAddrK(ktype, ktypeKind) + } + if !rvkMut { + rvkn = rvk + } + if !rvvMut { + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + } + if !ktypeIsString && keyFn == nil { + keyFn = d.fn(ktypeLo) + } + if valFn == nil { + valFn = d.fn(vtypeLo) + } + } else if rvkMut { + rvSetZero(rvk) + } else { + rvk = rvkn + } + + d.mapElemKey(j == 0) + + if d.d.TryNil() { + rvSetZero(rvk) + } else if ktypeIsString { + kstr2bs, att = d.d.DecodeStringAsBytes() + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, att) + rvSetString(rvk, kstr) + } else { + if kbuiltin { + if ktypePtr { + if rvIsNil(rvk) { + rvSetDirect(rvk, reflect.New(kElem)) + } + d.decode(rv2i(rvk)) + } else { + d.decode(rv2i(rvAddr(rvk, ti.tikey.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvk, keyFn) + } + + if ktypeIsIntf { + if rvk2 := rvk.Elem(); rvk2.IsValid() && rvk2.Type() == uint8SliceTyp { + kstr2bs = rvGetBytes(rvk2) + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, dBytesAttachView) + rvSetIntf(rvk, rv4istr(kstr)) + } + + } + } + + if mapKeyStringSharesBytesBuf && d.bufio { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + mapKeyStringSharesBytesBuf = false + } + + d.mapElemValue() + + if d.d.TryNil() { + if mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + + if !rvvz.IsValid() { + rvvz = rvZeroK(vtype, vtypeKind) + } + mapSet(rv, rvk, rvvz, mparams) + continue + } + + doMapSet = true + + if !rvvMut { + rvv = rvvn + } else if !doMapGet { + goto NEW_RVV + } else { + rvv = mapGet(rv, rvk, rvva, mparams) + if !rvv.IsValid() || (rvvCanNil && rvIsNil(rvv)) { + goto NEW_RVV + } + switch vtypeKind { + case reflect.Ptr, reflect.Map: + doMapSet = false + case reflect.Interface: + + rvvn = rvv.Elem() + if k := rvvn.Kind(); (k == reflect.Ptr || k == reflect.Map) && !rvIsNil(rvvn) { + d.decodeValueNoCheckNil(rvvn, nil) + continue + } + + rvvn = rvZeroAddrK(vtype, vtypeKind) + rvSetIntf(rvvn, rvv) + rvv = rvvn + default: + + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + rvSetDirect(rvvn, rvv) + rvv = rvvn + } + } + goto DECODE_VALUE_NO_CHECK_NIL + + NEW_RVV: + if vtypePtr { + rvv = reflect.New(vtypeElem) + } else if vTransient { + rvv = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvv = rvZeroAddrK(vtype, vtypeKind) + } + + DECODE_VALUE_NO_CHECK_NIL: + if doMapSet && mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + if vbuiltin { + if vtypePtr { + if rvIsNil(rvv) { + rvSetDirect(rvv, reflect.New(vElem)) + } + d.decode(rv2i(rvv)) + } else { + d.decode(rv2i(rvAddr(rvv, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvv, valFn) + } + if doMapSet { + mapSet(rv, rvk, rvv, mparams) + } + } + + d.mapEnd() +} + +func (d *decoderMsgpackIO) init(h Handle) { + initHandle(h) + callMake(&d.d) + d.hh = h + d.h = h.getBasicHandle() + + d.err = errDecoderNotInitialized + + if d.h.InternString && d.is == nil { + d.is.init() + } + + d.fp = d.d.init(h, &d.decoderBase, d).(*fastpathDsMsgpackIO) + + if d.bytes { + d.rtidFn = &d.h.rtidFnsDecBytes + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtBytes + } else { + d.bufio = d.h.ReaderBufferSize > 0 + d.rtidFn = &d.h.rtidFnsDecIO + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtIO + } + + d.reset() + +} + +func (d *decoderMsgpackIO) reset() { + d.d.reset() + d.err = nil + d.c = 0 + d.depth = 0 + d.calls = 0 + + d.maxdepth = decDefMaxDepth + if d.h.MaxDepth > 0 { + d.maxdepth = d.h.MaxDepth + } + d.mtid = 0 + d.stid = 0 + d.mtr = false + d.str = false + if d.h.MapType != nil { + d.mtid = rt2id(d.h.MapType) + _, d.mtr = fastpathAvIndex(d.mtid) + } + if d.h.SliceType != nil { + d.stid = rt2id(d.h.SliceType) + _, d.str = fastpathAvIndex(d.stid) + } +} + +func (d *decoderMsgpackIO) Reset(r io.Reader) { + if d.bytes { + halt.onerror(errDecNoResetBytesWithReader) + } + d.reset() + if r == nil { + r = &eofReader + } + d.d.resetInIO(r) +} + +func (d *decoderMsgpackIO) ResetBytes(in []byte) { + if !d.bytes { + halt.onerror(errDecNoResetReaderWithBytes) + } + d.resetBytes(in) +} + +func (d *decoderMsgpackIO) resetBytes(in []byte) { + d.reset() + if in == nil { + in = zeroByteSlice + } + d.d.resetInBytes(in) +} + +func (d *decoderMsgpackIO) ResetString(s string) { + d.ResetBytes(bytesView(s)) +} + +func (d *decoderMsgpackIO) Decode(v interface{}) (err error) { + + defer panicValToErr(d, callRecoverSentinel, &d.err, &err, debugging) + d.mustDecode(v) + return +} + +func (d *decoderMsgpackIO) MustDecode(v interface{}) { + defer panicValToErr(d, callRecoverSentinel, &d.err, nil, true) + d.mustDecode(v) + return +} + +func (d *decoderMsgpackIO) mustDecode(v interface{}) { + halt.onerror(d.err) + if d.hh == nil { + halt.onerror(errNoFormatHandle) + } + + d.calls++ + d.decode(v) + d.calls-- +} + +func (d *decoderMsgpackIO) Release() {} + +func (d *decoderMsgpackIO) swallow() { + d.d.nextValueBytes() +} + +func (d *decoderMsgpackIO) nextValueBytes() []byte { + return d.d.nextValueBytes() +} + +func (d *decoderMsgpackIO) decode(iv interface{}) { + _ = d.d + + rv, ok := isNil(iv, true) + if ok { + halt.onerror(errCannotDecodeIntoNil) + } + + switch v := iv.(type) { + + case *string: + *v = d.detach2Str(d.d.DecodeStringAsBytes()) + case *bool: + *v = d.d.DecodeBool() + case *int: + *v = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + case *int8: + *v = int8(chkOvf.IntV(d.d.DecodeInt64(), 8)) + case *int16: + *v = int16(chkOvf.IntV(d.d.DecodeInt64(), 16)) + case *int32: + *v = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + case *int64: + *v = d.d.DecodeInt64() + case *uint: + *v = uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *uint8: + *v = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + case *uint16: + *v = uint16(chkOvf.UintV(d.d.DecodeUint64(), 16)) + case *uint32: + *v = uint32(chkOvf.UintV(d.d.DecodeUint64(), 32)) + case *uint64: + *v = d.d.DecodeUint64() + case *uintptr: + *v = uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *float32: + *v = d.d.DecodeFloat32() + case *float64: + *v = d.d.DecodeFloat64() + case *complex64: + *v = complex(d.d.DecodeFloat32(), 0) + case *complex128: + *v = complex(d.d.DecodeFloat64(), 0) + case *[]byte: + *v, _ = d.decodeBytesInto(*v, false) + case []byte: + + d.decodeBytesInto(v[:len(v):len(v)], true) + case *time.Time: + *v = d.d.DecodeTime() + case *Raw: + *v = d.rawBytes() + + case *interface{}: + d.decodeValue(rv4iptr(v), nil) + + case reflect.Value: + if ok, _ = isDecodeable(v); !ok { + d.haltAsNotDecodeable(v) + } + d.decodeValue(v, nil) + + default: + + if skipFastpathTypeSwitchInDirectCall || !d.dh.fastpathDecodeTypeSwitch(iv, d) { + if !rv.IsValid() { + rv = reflect.ValueOf(iv) + } + if ok, _ = isDecodeable(rv); !ok { + d.haltAsNotDecodeable(rv) + } + d.decodeValue(rv, nil) + } + } +} + +func (d *decoderMsgpackIO) decodeValue(rv reflect.Value, fn *decFnMsgpackIO) { + if d.d.TryNil() { + decSetNonNilRV2Zero(rv) + } else { + d.decodeValueNoCheckNil(rv, fn) + } +} + +func (d *decoderMsgpackIO) decodeValueNoCheckNil(rv reflect.Value, fn *decFnMsgpackIO) { + + var rvp reflect.Value + var rvpValid bool +PTR: + if rv.Kind() == reflect.Ptr { + rvpValid = true + if rvIsNil(rv) { + rvSetDirect(rv, reflect.New(rv.Type().Elem())) + } + rvp = rv + rv = rv.Elem() + goto PTR + } + + if fn == nil { + fn = d.fn(rv.Type()) + } + if fn.i.addrD { + if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else if fn.i.addrDf { + halt.errorStr("cannot decode into a non-pointer value") + } + } + fn.fd(d, &fn.i, rv) +} + +func (d *decoderMsgpackIO) decodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + d.decodeValue(baseRV(v), d.fn(t)) + } else { + d.decodeValue(baseRV(v), d.fnNoExt(t)) + } +} + +func (d *decoderMsgpackIO) structFieldNotFound(index int, rvkencname string) { + + if d.h.ErrorIfNoField { + if index >= 0 { + halt.errorInt("no matching struct field found when decoding stream array at index ", int64(index)) + } else if rvkencname != "" { + halt.errorStr2("no matching struct field found when decoding stream map with key ", rvkencname) + } + } + d.swallow() +} + +func (d *decoderMsgpackIO) decodeBytesInto(out []byte, mustFit bool) (v []byte, state dBytesIntoState) { + v, att := d.d.DecodeBytes() + if cap(v) == 0 || (att >= dBytesAttachViewZerocopy && !mustFit) { + + return + } + if len(v) == 0 { + v = zeroByteSlice + return + } + if len(out) == len(v) { + state = dBytesIntoParamOut + } else if cap(out) >= len(v) { + out = out[:len(v)] + state = dBytesIntoParamOutSlice + } else if mustFit { + halt.errorf("bytes capacity insufficient for decoded bytes: got/expected: %d/%d", len(v), len(out)) + } else { + out = make([]byte, len(v)) + state = dBytesIntoNew + } + copy(out, v) + v = out + return +} + +func (d *decoderMsgpackIO) rawBytes() (v []byte) { + + v = d.d.nextValueBytes() + if d.bytes && !d.h.ZeroCopy { + vv := make([]byte, len(v)) + copy(vv, v) + v = vv + } + return +} + +func (d *decoderMsgpackIO) wrapErr(v error, err *error) { + *err = wrapCodecErr(v, d.hh.Name(), d.d.NumBytesRead(), false) +} + +func (d *decoderMsgpackIO) NumBytesRead() int { + return d.d.NumBytesRead() +} + +func (d *decoderMsgpackIO) containerNext(j, containerLen int, hasLen bool) bool { + + if hasLen { + return j < containerLen + } + return !d.d.CheckBreak() +} + +func (d *decoderMsgpackIO) mapElemKey(firstTime bool) { + d.d.ReadMapElemKey(firstTime) + d.c = containerMapKey +} + +func (d *decoderMsgpackIO) mapElemValue() { + d.d.ReadMapElemValue() + d.c = containerMapValue +} + +func (d *decoderMsgpackIO) mapEnd() { + d.d.ReadMapEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderMsgpackIO) arrayElem(firstTime bool) { + d.d.ReadArrayElem(firstTime) + d.c = containerArrayElem +} + +func (d *decoderMsgpackIO) arrayEnd() { + d.d.ReadArrayEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderMsgpackIO) interfaceExtConvertAndDecode(v interface{}, ext InterfaceExt) { + + var vv interface{} + d.decode(&vv) + ext.UpdateExt(v, vv) + +} + +func (d *decoderMsgpackIO) fn(t reflect.Type) *decFnMsgpackIO { + return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false) +} + +func (d *decoderMsgpackIO) fnNoExt(t reflect.Type) *decFnMsgpackIO { + return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true) +} + +func (helperDecDriverMsgpackIO) newDecoderBytes(in []byte, h Handle) *decoderMsgpackIO { + var c1 decoderMsgpackIO + c1.bytes = true + c1.init(h) + c1.ResetBytes(in) + return &c1 +} + +func (helperDecDriverMsgpackIO) newDecoderIO(in io.Reader, h Handle) *decoderMsgpackIO { + var c1 decoderMsgpackIO + c1.init(h) + c1.Reset(in) + return &c1 +} + +func (helperDecDriverMsgpackIO) decFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathDsMsgpackIO) (f *fastpathDMsgpackIO, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperDecDriverMsgpackIO) decFindRtidFn(s []decRtidFnMsgpackIO, rtid uintptr) (i uint, fn *decFnMsgpackIO) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperDecDriverMsgpackIO) decFromRtidFnSlice(fns *atomicRtidFnSlice) (s []decRtidFnMsgpackIO) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]decRtidFnMsgpackIO](v)) + } + return +} + +func (dh helperDecDriverMsgpackIO) decFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, x *BasicHandle, fp *fastpathDsMsgpackIO, + checkExt bool) (fn *decFnMsgpackIO) { + return dh.decFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperDecDriverMsgpackIO) decFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsMsgpackIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnMsgpackIO) { + rtid := rt2id(rt) + var sp []decRtidFnMsgpackIO = dh.decFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.decFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.decFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperDecDriverMsgpackIO) decFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsMsgpackIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnMsgpackIO) { + + fn = dh.decFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []decRtidFnMsgpackIO + mu.Lock() + sp = dh.decFromRtidFnSlice(fns) + + if sp == nil { + sp = []decRtidFnMsgpackIO{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.decFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]decRtidFnMsgpackIO, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = decRtidFnMsgpackIO{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperDecDriverMsgpackIO) decFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathDsMsgpackIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnMsgpackIO) { + fn = new(decFnMsgpackIO) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + fi.addrDf = true + + if rtid == timeTypId && timeBuiltin { + fn.fd = (*decoderMsgpackIO).kTime + } else if rtid == rawTypId { + fn.fd = (*decoderMsgpackIO).raw + } else if rtid == rawExtTypId { + fn.fd = (*decoderMsgpackIO).rawExt + fi.addrD = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fd = (*decoderMsgpackIO).ext + fi.addrD = true + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fd = (*decoderMsgpackIO).selferUnmarshal + fi.addrD = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fd = (*decoderMsgpackIO).binaryUnmarshal + fi.addrD = ti.flagBinaryUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fd = (*decoderMsgpackIO).jsonUnmarshal + fi.addrD = ti.flagJsonUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fd = (*decoderMsgpackIO).textUnmarshal + fi.addrD = ti.flagTextUnmarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fd = fp[idx].decfn + fi.addrD = true + fi.addrDf = false + if rk == reflect.Array { + fi.addrD = false + } + } + } else { + + xfe, xrt := dh.decFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf2 := xfe.decfn + if rk == reflect.Array { + fi.addrD = false + fn.fd = func(d *decoderMsgpackIO, xf *decFnInfo, xrv reflect.Value) { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } else { + fi.addrD = true + fi.addrDf = false + xptr2rt := reflect.PointerTo(xrt) + fn.fd = func(d *decoderMsgpackIO, xf *decFnInfo, xrv reflect.Value) { + if xrv.Kind() == reflect.Ptr { + xfnf2(d, xf, rvConvert(xrv, xptr2rt)) + } else { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } + } + } + } + } + if fn.fd == nil { + switch rk { + case reflect.Bool: + fn.fd = (*decoderMsgpackIO).kBool + case reflect.String: + fn.fd = (*decoderMsgpackIO).kString + case reflect.Int: + fn.fd = (*decoderMsgpackIO).kInt + case reflect.Int8: + fn.fd = (*decoderMsgpackIO).kInt8 + case reflect.Int16: + fn.fd = (*decoderMsgpackIO).kInt16 + case reflect.Int32: + fn.fd = (*decoderMsgpackIO).kInt32 + case reflect.Int64: + fn.fd = (*decoderMsgpackIO).kInt64 + case reflect.Uint: + fn.fd = (*decoderMsgpackIO).kUint + case reflect.Uint8: + fn.fd = (*decoderMsgpackIO).kUint8 + case reflect.Uint16: + fn.fd = (*decoderMsgpackIO).kUint16 + case reflect.Uint32: + fn.fd = (*decoderMsgpackIO).kUint32 + case reflect.Uint64: + fn.fd = (*decoderMsgpackIO).kUint64 + case reflect.Uintptr: + fn.fd = (*decoderMsgpackIO).kUintptr + case reflect.Float32: + fn.fd = (*decoderMsgpackIO).kFloat32 + case reflect.Float64: + fn.fd = (*decoderMsgpackIO).kFloat64 + case reflect.Complex64: + fn.fd = (*decoderMsgpackIO).kComplex64 + case reflect.Complex128: + fn.fd = (*decoderMsgpackIO).kComplex128 + case reflect.Chan: + fn.fd = (*decoderMsgpackIO).kChan + case reflect.Slice: + fn.fd = (*decoderMsgpackIO).kSlice + case reflect.Array: + fi.addrD = false + fn.fd = (*decoderMsgpackIO).kArray + case reflect.Struct: + if ti.simple { + fn.fd = (*decoderMsgpackIO).kStructSimple + } else { + fn.fd = (*decoderMsgpackIO).kStruct + } + case reflect.Map: + fn.fd = (*decoderMsgpackIO).kMap + case reflect.Interface: + + fn.fd = (*decoderMsgpackIO).kInterface + default: + + fn.fd = (*decoderMsgpackIO).kErr + } + } + } + return +} +func (e *msgpackEncDriverIO) EncodeNil() { + e.w.writen1(mpNil) +} + +func (e *msgpackEncDriverIO) EncodeInt(i int64) { + if e.h.PositiveIntUnsigned && i >= 0 { + e.EncodeUint(uint64(i)) + } else if i > math.MaxInt8 { + if i <= math.MaxInt16 { + e.w.writen1(mpInt16) + e.w.writen2(bigen.PutUint16(uint16(i))) + } else if i <= math.MaxInt32 { + e.w.writen1(mpInt32) + e.w.writen4(bigen.PutUint32(uint32(i))) + } else { + e.w.writen1(mpInt64) + e.w.writen8(bigen.PutUint64(uint64(i))) + } + } else if i >= -32 { + if e.h.NoFixedNum { + e.w.writen2(mpInt8, byte(i)) + } else { + e.w.writen1(byte(i)) + } + } else if i >= math.MinInt8 { + e.w.writen2(mpInt8, byte(i)) + } else if i >= math.MinInt16 { + e.w.writen1(mpInt16) + e.w.writen2(bigen.PutUint16(uint16(i))) + } else if i >= math.MinInt32 { + e.w.writen1(mpInt32) + e.w.writen4(bigen.PutUint32(uint32(i))) + } else { + e.w.writen1(mpInt64) + e.w.writen8(bigen.PutUint64(uint64(i))) + } +} + +func (e *msgpackEncDriverIO) EncodeUint(i uint64) { + if i <= math.MaxInt8 { + if e.h.NoFixedNum { + e.w.writen2(mpUint8, byte(i)) + } else { + e.w.writen1(byte(i)) + } + } else if i <= math.MaxUint8 { + e.w.writen2(mpUint8, byte(i)) + } else if i <= math.MaxUint16 { + e.w.writen1(mpUint16) + e.w.writen2(bigen.PutUint16(uint16(i))) + } else if i <= math.MaxUint32 { + e.w.writen1(mpUint32) + e.w.writen4(bigen.PutUint32(uint32(i))) + } else { + e.w.writen1(mpUint64) + e.w.writen8(bigen.PutUint64(uint64(i))) + } +} + +func (e *msgpackEncDriverIO) EncodeBool(b bool) { + if b { + e.w.writen1(mpTrue) + } else { + e.w.writen1(mpFalse) + } +} + +func (e *msgpackEncDriverIO) EncodeFloat32(f float32) { + e.w.writen1(mpFloat) + e.w.writen4(bigen.PutUint32(math.Float32bits(f))) +} + +func (e *msgpackEncDriverIO) EncodeFloat64(f float64) { + e.w.writen1(mpDouble) + e.w.writen8(bigen.PutUint64(math.Float64bits(f))) +} + +func (e *msgpackEncDriverIO) EncodeTime(t time.Time) { + if t.IsZero() { + e.EncodeNil() + return + } + t = t.UTC() + sec, nsec := t.Unix(), uint64(t.Nanosecond()) + var data64 uint64 + var l = 4 + if sec >= 0 && sec>>34 == 0 { + data64 = (nsec << 34) | uint64(sec) + if data64&0xffffffff00000000 != 0 { + l = 8 + } + } else { + l = 12 + } + if e.h.WriteExt { + e.encodeExtPreamble(mpTimeExtTagU, l) + } else { + e.writeContainerLen(msgpackContainerRawLegacy, l) + } + switch l { + case 4: + e.w.writen4(bigen.PutUint32(uint32(data64))) + case 8: + e.w.writen8(bigen.PutUint64(data64)) + case 12: + e.w.writen4(bigen.PutUint32(uint32(nsec))) + e.w.writen8(bigen.PutUint64(uint64(sec))) + } +} + +func (e *msgpackEncDriverIO) EncodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + var bs0, bs []byte + if ext == SelfExt { + bs0 = e.e.blist.get(1024) + bs = bs0 + sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, true) }) + } else { + bs = ext.WriteExt(v) + } + if bs == nil { + e.writeNilBytes() + goto END + } + if e.h.WriteExt { + e.encodeExtPreamble(uint8(xtag), len(bs)) + e.w.writeb(bs) + } else { + e.EncodeBytes(bs) + } +END: + if ext == SelfExt { + e.e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.e.blist.put(bs0) + } + } +} + +func (e *msgpackEncDriverIO) EncodeRawExt(re *RawExt) { + e.encodeExtPreamble(uint8(re.Tag), len(re.Data)) + e.w.writeb(re.Data) +} + +func (e *msgpackEncDriverIO) encodeExtPreamble(xtag byte, l int) { + if l == 1 { + e.w.writen2(mpFixExt1, xtag) + } else if l == 2 { + e.w.writen2(mpFixExt2, xtag) + } else if l == 4 { + e.w.writen2(mpFixExt4, xtag) + } else if l == 8 { + e.w.writen2(mpFixExt8, xtag) + } else if l == 16 { + e.w.writen2(mpFixExt16, xtag) + } else if l < 256 { + e.w.writen2(mpExt8, byte(l)) + e.w.writen1(xtag) + } else if l < 65536 { + e.w.writen1(mpExt16) + e.w.writen2(bigen.PutUint16(uint16(l))) + e.w.writen1(xtag) + } else { + e.w.writen1(mpExt32) + e.w.writen4(bigen.PutUint32(uint32(l))) + e.w.writen1(xtag) + } +} + +func (e *msgpackEncDriverIO) WriteArrayStart(length int) { + e.writeContainerLen(msgpackContainerList, length) +} + +func (e *msgpackEncDriverIO) WriteMapStart(length int) { + e.writeContainerLen(msgpackContainerMap, length) +} + +func (e *msgpackEncDriverIO) WriteArrayEmpty() { + + e.w.writen1(mpFixArrayMin) +} + +func (e *msgpackEncDriverIO) WriteMapEmpty() { + + e.w.writen1(mpFixMapMin) +} + +func (e *msgpackEncDriverIO) EncodeString(s string) { + var ct msgpackContainerType + if e.h.WriteExt { + if e.h.StringToRaw { + ct = msgpackContainerBin + } else { + ct = msgpackContainerStr + } + } else { + ct = msgpackContainerRawLegacy + } + e.writeContainerLen(ct, len(s)) + if len(s) > 0 { + e.w.writestr(s) + } +} + +func (e *msgpackEncDriverIO) EncodeStringNoEscape4Json(v string) { e.EncodeString(v) } + +func (e *msgpackEncDriverIO) EncodeStringBytesRaw(bs []byte) { + if e.h.WriteExt { + e.writeContainerLen(msgpackContainerBin, len(bs)) + } else { + e.writeContainerLen(msgpackContainerRawLegacy, len(bs)) + } + if len(bs) > 0 { + e.w.writeb(bs) + } +} + +func (e *msgpackEncDriverIO) EncodeBytes(v []byte) { + if v == nil { + e.writeNilBytes() + return + } + e.EncodeStringBytesRaw(v) +} + +func (e *msgpackEncDriverIO) writeNilOr(v byte) { + if !e.h.NilCollectionToZeroLength { + v = mpNil + } + e.w.writen1(v) +} + +func (e *msgpackEncDriverIO) writeNilArray() { + e.writeNilOr(mpFixArrayMin) +} + +func (e *msgpackEncDriverIO) writeNilMap() { + e.writeNilOr(mpFixMapMin) +} + +func (e *msgpackEncDriverIO) writeNilBytes() { + e.writeNilOr(mpFixStrMin) +} + +func (e *msgpackEncDriverIO) writeContainerLen(ct msgpackContainerType, l int) { + if ct.fixCutoff > 0 && l < int(ct.fixCutoff) { + e.w.writen1(ct.bFixMin | byte(l)) + } else if ct.b8 > 0 && l < 256 { + e.w.writen2(ct.b8, uint8(l)) + } else if l < 65536 { + e.w.writen1(ct.b16) + e.w.writen2(bigen.PutUint16(uint16(l))) + } else { + e.w.writen1(ct.b32) + e.w.writen4(bigen.PutUint32(uint32(l))) + } +} + +func (d *msgpackDecDriverIO) DecodeNaked() { + if !d.bdRead { + d.readNextBd() + } + bd := d.bd + n := d.d.naked() + var decodeFurther bool + + switch bd { + case mpNil: + n.v = valueTypeNil + d.bdRead = false + case mpFalse: + n.v = valueTypeBool + n.b = false + case mpTrue: + n.v = valueTypeBool + n.b = true + + case mpFloat: + n.v = valueTypeFloat + n.f = float64(math.Float32frombits(bigen.Uint32(d.r.readn4()))) + case mpDouble: + n.v = valueTypeFloat + n.f = math.Float64frombits(bigen.Uint64(d.r.readn8())) + + case mpUint8: + n.v = valueTypeUint + n.u = uint64(d.r.readn1()) + case mpUint16: + n.v = valueTypeUint + n.u = uint64(bigen.Uint16(d.r.readn2())) + case mpUint32: + n.v = valueTypeUint + n.u = uint64(bigen.Uint32(d.r.readn4())) + case mpUint64: + n.v = valueTypeUint + n.u = uint64(bigen.Uint64(d.r.readn8())) + + case mpInt8: + n.v = valueTypeInt + n.i = int64(int8(d.r.readn1())) + case mpInt16: + n.v = valueTypeInt + n.i = int64(int16(bigen.Uint16(d.r.readn2()))) + case mpInt32: + n.v = valueTypeInt + n.i = int64(int32(bigen.Uint32(d.r.readn4()))) + case mpInt64: + n.v = valueTypeInt + n.i = int64(int64(bigen.Uint64(d.r.readn8()))) + + default: + switch { + case bd >= mpPosFixNumMin && bd <= mpPosFixNumMax: + + n.v = valueTypeInt + n.i = int64(int8(bd)) + case bd >= mpNegFixNumMin && bd <= mpNegFixNumMax: + + n.v = valueTypeInt + n.i = int64(int8(bd)) + case bd == mpStr8, bd == mpStr16, bd == mpStr32, bd >= mpFixStrMin && bd <= mpFixStrMax: + d.d.fauxUnionReadRawBytes(d, d.h.WriteExt, d.h.RawToString) + + case bd == mpBin8, bd == mpBin16, bd == mpBin32: + d.d.fauxUnionReadRawBytes(d, false, d.h.RawToString) + case bd == mpArray16, bd == mpArray32, bd >= mpFixArrayMin && bd <= mpFixArrayMax: + n.v = valueTypeArray + decodeFurther = true + case bd == mpMap16, bd == mpMap32, bd >= mpFixMapMin && bd <= mpFixMapMax: + n.v = valueTypeMap + decodeFurther = true + case bd >= mpFixExt1 && bd <= mpFixExt16, bd >= mpExt8 && bd <= mpExt32: + n.v = valueTypeExt + clen := d.readExtLen() + n.u = uint64(d.r.readn1()) + if n.u == uint64(mpTimeExtTagU) { + n.v = valueTypeTime + n.t = d.decodeTime(clen) + } else { + n.l = d.r.readx(uint(clen)) + } + default: + halt.errorf("cannot infer value: %s: Ox%x/%d/%s", msgBadDesc, bd, bd, mpdesc(bd)) + } + } + if !decodeFurther { + d.bdRead = false + } + if n.v == valueTypeUint && d.h.SignedInteger { + n.v = valueTypeInt + n.i = int64(n.u) + } +} + +func (d *msgpackDecDriverIO) nextValueBytes() (v []byte) { + if !d.bdRead { + d.readNextBd() + } + d.r.startRecording() + d.nextValueBytesBdReadR() + v = d.r.stopRecording() + d.bdRead = false + return +} + +func (d *msgpackDecDriverIO) nextValueBytesBdReadR() { + bd := d.bd + + var clen uint + + switch bd { + case mpNil, mpFalse, mpTrue: + case mpUint8, mpInt8: + d.r.readn1() + case mpUint16, mpInt16: + d.r.skip(2) + case mpFloat, mpUint32, mpInt32: + d.r.skip(4) + case mpDouble, mpUint64, mpInt64: + d.r.skip(8) + case mpStr8, mpBin8: + clen = uint(d.r.readn1()) + d.r.skip(clen) + case mpStr16, mpBin16: + x := d.r.readn2() + clen = uint(bigen.Uint16(x)) + d.r.skip(clen) + case mpStr32, mpBin32: + x := d.r.readn4() + clen = uint(bigen.Uint32(x)) + d.r.skip(clen) + case mpFixExt1: + d.r.readn1() + d.r.readn1() + case mpFixExt2: + d.r.readn1() + d.r.skip(2) + case mpFixExt4: + d.r.readn1() + d.r.skip(4) + case mpFixExt8: + d.r.readn1() + d.r.skip(8) + case mpFixExt16: + d.r.readn1() + d.r.skip(16) + case mpExt8: + clen = uint(d.r.readn1()) + d.r.readn1() + d.r.skip(clen) + case mpExt16: + x := d.r.readn2() + clen = uint(bigen.Uint16(x)) + d.r.readn1() + d.r.skip(clen) + case mpExt32: + x := d.r.readn4() + clen = uint(bigen.Uint32(x)) + d.r.readn1() + d.r.skip(clen) + case mpArray16: + x := d.r.readn2() + clen = uint(bigen.Uint16(x)) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + } + case mpArray32: + x := d.r.readn4() + clen = uint(bigen.Uint32(x)) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + } + case mpMap16: + x := d.r.readn2() + clen = uint(bigen.Uint16(x)) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() + } + case mpMap32: + x := d.r.readn4() + clen = uint(bigen.Uint32(x)) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() + } + default: + switch { + case bd >= mpPosFixNumMin && bd <= mpPosFixNumMax: + case bd >= mpNegFixNumMin && bd <= mpNegFixNumMax: + case bd >= mpFixStrMin && bd <= mpFixStrMax: + clen = uint(mpFixStrMin ^ bd) + d.r.skip(clen) + case bd >= mpFixArrayMin && bd <= mpFixArrayMax: + clen = uint(mpFixArrayMin ^ bd) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + } + case bd >= mpFixMapMin && bd <= mpFixMapMax: + clen = uint(mpFixMapMin ^ bd) + for i := uint(0); i < clen; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() + } + default: + halt.errorf("nextValueBytes: cannot infer value: %s: Ox%x/%d/%s", msgBadDesc, bd, bd, mpdesc(bd)) + } + } + return +} + +func (d *msgpackDecDriverIO) decFloat4Int32() (f float32) { + fbits := bigen.Uint32(d.r.readn4()) + f = math.Float32frombits(fbits) + if !noFrac32(fbits) { + halt.errorf("assigning integer value from float32 with a fraction: %v", f) + } + return +} + +func (d *msgpackDecDriverIO) decFloat4Int64() (f float64) { + fbits := bigen.Uint64(d.r.readn8()) + f = math.Float64frombits(fbits) + if !noFrac64(fbits) { + halt.errorf("assigning integer value from float64 with a fraction: %v", f) + } + return +} + +func (d *msgpackDecDriverIO) DecodeInt64() (i int64) { + if d.advanceNil() { + return + } + switch d.bd { + case mpUint8: + i = int64(uint64(d.r.readn1())) + case mpUint16: + i = int64(uint64(bigen.Uint16(d.r.readn2()))) + case mpUint32: + i = int64(uint64(bigen.Uint32(d.r.readn4()))) + case mpUint64: + i = int64(bigen.Uint64(d.r.readn8())) + case mpInt8: + i = int64(int8(d.r.readn1())) + case mpInt16: + i = int64(int16(bigen.Uint16(d.r.readn2()))) + case mpInt32: + i = int64(int32(bigen.Uint32(d.r.readn4()))) + case mpInt64: + i = int64(bigen.Uint64(d.r.readn8())) + case mpFloat: + i = int64(d.decFloat4Int32()) + case mpDouble: + i = int64(d.decFloat4Int64()) + default: + switch { + case d.bd >= mpPosFixNumMin && d.bd <= mpPosFixNumMax: + i = int64(int8(d.bd)) + case d.bd >= mpNegFixNumMin && d.bd <= mpNegFixNumMax: + i = int64(int8(d.bd)) + default: + halt.errorf("cannot decode signed integer: %s: %x/%s", msgBadDesc, d.bd, mpdesc(d.bd)) + } + } + d.bdRead = false + return +} + +func (d *msgpackDecDriverIO) DecodeUint64() (ui uint64) { + if d.advanceNil() { + return + } + switch d.bd { + case mpUint8: + ui = uint64(d.r.readn1()) + case mpUint16: + ui = uint64(bigen.Uint16(d.r.readn2())) + case mpUint32: + ui = uint64(bigen.Uint32(d.r.readn4())) + case mpUint64: + ui = bigen.Uint64(d.r.readn8()) + case mpInt8: + if i := int64(int8(d.r.readn1())); i >= 0 { + ui = uint64(i) + } else { + halt.errorf("assigning negative signed value: %v, to unsigned type", i) + } + case mpInt16: + if i := int64(int16(bigen.Uint16(d.r.readn2()))); i >= 0 { + ui = uint64(i) + } else { + halt.errorf("assigning negative signed value: %v, to unsigned type", i) + } + case mpInt32: + if i := int64(int32(bigen.Uint32(d.r.readn4()))); i >= 0 { + ui = uint64(i) + } else { + halt.errorf("assigning negative signed value: %v, to unsigned type", i) + } + case mpInt64: + if i := int64(bigen.Uint64(d.r.readn8())); i >= 0 { + ui = uint64(i) + } else { + halt.errorf("assigning negative signed value: %v, to unsigned type", i) + } + case mpFloat: + if f := d.decFloat4Int32(); f >= 0 { + ui = uint64(f) + } else { + halt.errorf("assigning negative float value: %v, to unsigned type", f) + } + case mpDouble: + if f := d.decFloat4Int64(); f >= 0 { + ui = uint64(f) + } else { + halt.errorf("assigning negative float value: %v, to unsigned type", f) + } + default: + switch { + case d.bd >= mpPosFixNumMin && d.bd <= mpPosFixNumMax: + ui = uint64(d.bd) + case d.bd >= mpNegFixNumMin && d.bd <= mpNegFixNumMax: + halt.errorf("assigning negative signed value: %v, to unsigned type", int(d.bd)) + default: + halt.errorf("cannot decode unsigned integer: %s: %x/%s", msgBadDesc, d.bd, mpdesc(d.bd)) + } + } + d.bdRead = false + return +} + +func (d *msgpackDecDriverIO) DecodeFloat64() (f float64) { + if d.advanceNil() { + return + } + if d.bd == mpFloat { + f = float64(math.Float32frombits(bigen.Uint32(d.r.readn4()))) + } else if d.bd == mpDouble { + f = math.Float64frombits(bigen.Uint64(d.r.readn8())) + } else { + f = float64(d.DecodeInt64()) + } + d.bdRead = false + return +} + +func (d *msgpackDecDriverIO) DecodeBool() (b bool) { + if d.advanceNil() { + return + } + if d.bd == mpFalse || d.bd == 0 { + + } else if d.bd == mpTrue || d.bd == 1 { + b = true + } else { + halt.errorf("cannot decode bool: %s: %x/%s", msgBadDesc, d.bd, mpdesc(d.bd)) + } + d.bdRead = false + return +} + +func (d *msgpackDecDriverIO) DecodeBytes() (bs []byte, state dBytesAttachState) { + if d.advanceNil() { + return + } + + var cond bool + bd := d.bd + var clen int + if bd == mpBin8 || bd == mpBin16 || bd == mpBin32 { + clen = d.readContainerLen(msgpackContainerBin) + } else if bd == mpStr8 || bd == mpStr16 || bd == mpStr32 || + (bd >= mpFixStrMin && bd <= mpFixStrMax) { + clen = d.readContainerLen(msgpackContainerStr) + } else if bd == mpArray16 || bd == mpArray32 || + (bd >= mpFixArrayMin && bd <= mpFixArrayMax) { + slen := d.ReadArrayStart() + bs, cond = usableByteSlice(d.d.buf, slen) + for i := 0; i < len(bs); i++ { + bs[i] = uint8(chkOvf.UintV(d.DecodeUint64(), 8)) + } + for i := len(bs); i < slen; i++ { + bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) + } + if cond { + d.d.buf = bs + } + state = dBytesAttachBuffer + return + } else { + halt.errorf("invalid byte descriptor for decoding bytes, got: 0x%x", d.bd) + } + + d.bdRead = false + bs, cond = d.r.readxb(uint(clen)) + state = d.d.attachState(cond) + return +} + +func (d *msgpackDecDriverIO) DecodeStringAsBytes() (out []byte, state dBytesAttachState) { + out, state = d.DecodeBytes() + if d.h.ValidateUnicode && !utf8.Valid(out) { + halt.errorf("DecodeStringAsBytes: invalid UTF-8: %s", out) + } + return +} + +func (d *msgpackDecDriverIO) readNextBd() { + d.bd = d.r.readn1() + d.bdRead = true +} + +func (d *msgpackDecDriverIO) advanceNil() (null bool) { + if !d.bdRead { + d.readNextBd() + } + if d.bd == mpNil { + d.bdRead = false + return true + } + return +} + +func (d *msgpackDecDriverIO) TryNil() (v bool) { + return d.advanceNil() +} + +func (d *msgpackDecDriverIO) ContainerType() (vt valueType) { + if !d.bdRead { + d.readNextBd() + } + bd := d.bd + if bd == mpNil { + d.bdRead = false + return valueTypeNil + } else if bd == mpBin8 || bd == mpBin16 || bd == mpBin32 { + return valueTypeBytes + } else if bd == mpStr8 || bd == mpStr16 || bd == mpStr32 || + (bd >= mpFixStrMin && bd <= mpFixStrMax) { + if d.h.WriteExt || d.h.RawToString { + return valueTypeString + } + return valueTypeBytes + } else if bd == mpArray16 || bd == mpArray32 || (bd >= mpFixArrayMin && bd <= mpFixArrayMax) { + return valueTypeArray + } else if bd == mpMap16 || bd == mpMap32 || (bd >= mpFixMapMin && bd <= mpFixMapMax) { + return valueTypeMap + } + return valueTypeUnset +} + +func (d *msgpackDecDriverIO) readContainerLen(ct msgpackContainerType) (clen int) { + bd := d.bd + if bd == ct.b8 { + clen = int(d.r.readn1()) + } else if bd == ct.b16 { + clen = int(bigen.Uint16(d.r.readn2())) + } else if bd == ct.b32 { + clen = int(bigen.Uint32(d.r.readn4())) + } else if (ct.bFixMin & bd) == ct.bFixMin { + clen = int(ct.bFixMin ^ bd) + } else { + halt.errorf("cannot read container length: %s: hex: %x, decimal: %d", msgBadDesc, bd, bd) + } + d.bdRead = false + return +} + +func (d *msgpackDecDriverIO) ReadMapStart() int { + if d.advanceNil() { + return containerLenNil + } + return d.readContainerLen(msgpackContainerMap) +} + +func (d *msgpackDecDriverIO) ReadArrayStart() int { + if d.advanceNil() { + return containerLenNil + } + return d.readContainerLen(msgpackContainerList) +} + +func (d *msgpackDecDriverIO) readExtLen() (clen int) { + switch d.bd { + case mpFixExt1: + clen = 1 + case mpFixExt2: + clen = 2 + case mpFixExt4: + clen = 4 + case mpFixExt8: + clen = 8 + case mpFixExt16: + clen = 16 + case mpExt8: + clen = int(d.r.readn1()) + case mpExt16: + clen = int(bigen.Uint16(d.r.readn2())) + case mpExt32: + clen = int(bigen.Uint32(d.r.readn4())) + default: + halt.errorf("decoding ext bytes: found unexpected byte: %x", d.bd) + } + return +} + +func (d *msgpackDecDriverIO) DecodeTime() (t time.Time) { + + if d.advanceNil() { + return + } + bd := d.bd + var clen int + if bd == mpBin8 || bd == mpBin16 || bd == mpBin32 { + clen = d.readContainerLen(msgpackContainerBin) + } else if bd == mpStr8 || bd == mpStr16 || bd == mpStr32 || + (bd >= mpFixStrMin && bd <= mpFixStrMax) { + clen = d.readContainerLen(msgpackContainerStr) + } else { + + d.bdRead = false + b2 := d.r.readn1() + if d.bd == mpFixExt4 && b2 == mpTimeExtTagU { + clen = 4 + } else if d.bd == mpFixExt8 && b2 == mpTimeExtTagU { + clen = 8 + } else if d.bd == mpExt8 && b2 == 12 && d.r.readn1() == mpTimeExtTagU { + clen = 12 + } else { + halt.errorf("invalid stream for decoding time as extension: got 0x%x, 0x%x", d.bd, b2) + } + } + return d.decodeTime(clen) +} + +func (d *msgpackDecDriverIO) decodeTime(clen int) (t time.Time) { + d.bdRead = false + switch clen { + case 4: + t = time.Unix(int64(bigen.Uint32(d.r.readn4())), 0).UTC() + case 8: + tv := bigen.Uint64(d.r.readn8()) + t = time.Unix(int64(tv&0x00000003ffffffff), int64(tv>>34)).UTC() + case 12: + nsec := bigen.Uint32(d.r.readn4()) + sec := bigen.Uint64(d.r.readn8()) + t = time.Unix(int64(sec), int64(nsec)).UTC() + default: + halt.errorf("invalid length of bytes for decoding time - expecting 4 or 8 or 12, got %d", clen) + } + return +} + +func (d *msgpackDecDriverIO) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + xbs, _, _, ok := d.decodeExtV(ext != nil, xtag) + if !ok { + return + } + if ext == SelfExt { + sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, true) }) + } else { + ext.ReadExt(rv, xbs) + } +} + +func (d *msgpackDecDriverIO) DecodeRawExt(re *RawExt) { + xbs, realxtag, state, ok := d.decodeExtV(false, 0) + if !ok { + return + } + re.Tag = uint64(realxtag) + re.setData(xbs, state >= dBytesAttachViewZerocopy) +} + +func (d *msgpackDecDriverIO) decodeExtV(verifyTag bool, xtagIn uint64) (xbs []byte, xtag byte, bstate dBytesAttachState, ok bool) { + if xtagIn > 0xff { + halt.errorf("ext: tag must be <= 0xff; got: %v", xtagIn) + } + if d.advanceNil() { + return + } + tag := uint8(xtagIn) + xbd := d.bd + if xbd == mpBin8 || xbd == mpBin16 || xbd == mpBin32 { + xbs, bstate = d.DecodeBytes() + } else if xbd == mpStr8 || xbd == mpStr16 || xbd == mpStr32 || + (xbd >= mpFixStrMin && xbd <= mpFixStrMax) { + xbs, bstate = d.DecodeStringAsBytes() + } else { + clen := d.readExtLen() + xtag = d.r.readn1() + if verifyTag && xtag != tag { + halt.errorf("wrong extension tag - got %b, expecting %v", xtag, tag) + } + xbs, ok = d.r.readxb(uint(clen)) + bstate = d.d.attachState(ok) + + } + d.bdRead = false + ok = true + return +} + +func (d *msgpackEncDriverIO) init(hh Handle, shared *encoderBase, enc encoderI) (fp interface{}) { + callMake(&d.w) + d.h = hh.(*MsgpackHandle) + d.e = shared + if shared.bytes { + fp = msgpackFpEncBytes + } else { + fp = msgpackFpEncIO + } + + d.init2(enc) + return +} + +func (e *msgpackEncDriverIO) writeBytesAsis(b []byte) { e.w.writeb(b) } + +func (e *msgpackEncDriverIO) writerEnd() { e.w.end() } + +func (e *msgpackEncDriverIO) resetOutBytes(out *[]byte) { + e.w.resetBytes(*out, out) +} + +func (e *msgpackEncDriverIO) resetOutIO(out io.Writer) { + e.w.resetIO(out, e.h.WriterBufferSize, &e.e.blist) +} + +func (d *msgpackDecDriverIO) init(hh Handle, shared *decoderBase, dec decoderI) (fp interface{}) { + callMake(&d.r) + d.h = hh.(*MsgpackHandle) + d.d = shared + if shared.bytes { + fp = msgpackFpDecBytes + } else { + fp = msgpackFpDecIO + } + + d.init2(dec) + return +} + +func (d *msgpackDecDriverIO) NumBytesRead() int { + return int(d.r.numread()) +} + +func (d *msgpackDecDriverIO) resetInBytes(in []byte) { + d.r.resetBytes(in) +} + +func (d *msgpackDecDriverIO) resetInIO(r io.Reader) { + d.r.resetIO(r, d.h.ReaderBufferSize, d.h.MaxInitLen, &d.d.blist) +} + +func (d *msgpackDecDriverIO) descBd() string { + return sprintf("%v (%s)", d.bd, mpdesc(d.bd)) +} + +func (d *msgpackDecDriverIO) DecodeFloat32() (f float32) { + return float32(chkOvf.Float32V(d.DecodeFloat64())) +} diff --git a/vendor/github.com/ugorji/go/codec/msgpack.notfastpath.mono.generated.go b/vendor/github.com/ugorji/go/codec/msgpack.notfastpath.mono.generated.go new file mode 100644 index 0000000..b4f7d24 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/msgpack.notfastpath.mono.generated.go @@ -0,0 +1,52 @@ +//go:build !notmono && !codec.notmono && (notfastpath || codec.notfastpath) + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "reflect" +) + +type fastpathEMsgpackBytes struct { + rt reflect.Type + encfn func(*encoderMsgpackBytes, *encFnInfo, reflect.Value) +} +type fastpathDMsgpackBytes struct { + rt reflect.Type + decfn func(*decoderMsgpackBytes, *decFnInfo, reflect.Value) +} +type fastpathEsMsgpackBytes [0]fastpathEMsgpackBytes +type fastpathDsMsgpackBytes [0]fastpathDMsgpackBytes + +func (helperEncDriverMsgpackBytes) fastpathEncodeTypeSwitch(iv interface{}, e *encoderMsgpackBytes) bool { + return false +} +func (helperDecDriverMsgpackBytes) fastpathDecodeTypeSwitch(iv interface{}, d *decoderMsgpackBytes) bool { + return false +} + +func (helperEncDriverMsgpackBytes) fastpathEList() (v *fastpathEsMsgpackBytes) { return } +func (helperDecDriverMsgpackBytes) fastpathDList() (v *fastpathDsMsgpackBytes) { return } + +type fastpathEMsgpackIO struct { + rt reflect.Type + encfn func(*encoderMsgpackIO, *encFnInfo, reflect.Value) +} +type fastpathDMsgpackIO struct { + rt reflect.Type + decfn func(*decoderMsgpackIO, *decFnInfo, reflect.Value) +} +type fastpathEsMsgpackIO [0]fastpathEMsgpackIO +type fastpathDsMsgpackIO [0]fastpathDMsgpackIO + +func (helperEncDriverMsgpackIO) fastpathEncodeTypeSwitch(iv interface{}, e *encoderMsgpackIO) bool { + return false +} +func (helperDecDriverMsgpackIO) fastpathDecodeTypeSwitch(iv interface{}, d *decoderMsgpackIO) bool { + return false +} + +func (helperEncDriverMsgpackIO) fastpathEList() (v *fastpathEsMsgpackIO) { return } +func (helperDecDriverMsgpackIO) fastpathDList() (v *fastpathDsMsgpackIO) { return } diff --git a/vendor/github.com/ugorji/go/codec/reader.go b/vendor/github.com/ugorji/go/codec/reader.go index ec5dac0..86c403a 100644 --- a/vendor/github.com/ugorji/go/codec/reader.go +++ b/vendor/github.com/ugorji/go/codec/reader.go @@ -4,22 +4,30 @@ package codec import ( - "bufio" - "bytes" + "errors" "io" - "strings" + "os" ) // decReader abstracts the reading source, allowing implementations that can // read from an io.Reader or directly off a byte slice with zero-copying. -type decReader interface { - // readx will return a view of the []byte if decoding from a []byte, OR - // read into the implementation scratch buffer if possible i.e. n < len(scratchbuf), OR - // create a new []byte and read into that +type decReaderI interface { + // readx will return a view of the []byte in one of 2 ways: + // - direct view into []byte which decoding is happening from (if bytes) + // - view into a mutable []byte which the ioReader is using (if IO) + // + // Users should directly consume the contents read, and not store for future use. readx(n uint) []byte + // skip n bytes + skip(n uint) + readb([]byte) + // readxb will read n bytes, returning as out, and a flag stating whether + // an internal buffer (not the view) was used. + readxb(n uint) (out []byte, usingBuf bool) + readn1() byte readn2() [2]byte readn3() [3]byte @@ -35,14 +43,22 @@ type decReader interface { // skip any whitespace characters, and return the first non-matching byte skipWhitespace() (token byte) - // jsonReadNum will include last read byte in first element of slice, - // and continue numeric characters until it sees a non-numeric char - // or EOF. If it sees a non-numeric character, it will unread that. - jsonReadNum() []byte + // jsonReadNum will read a sequence of numeric characters, checking from the last + // read byte. It will return a sequence of numeric characters (v), + // and the next token character (tok - returned separately), + // + // if an EOF is found before the next token is seen, it returns a token value of 0. + jsonReadNum() (v []byte, token byte) - // jsonReadAsisChars will read json plain characters (anything but " or \) - // and return a slice terminated by a non-json asis character. - jsonReadAsisChars() []byte + // jsonReadAsisChars recognizes 2 terminal characters (" or \). + // jsonReadAsisChars will read json plain characters until it reaches a terminal char, + // and returns a slice up to the terminal char (excluded), + // and also returns the terminal char separately (" or \). + jsonReadAsisChars() (v []byte, terminal byte) + + // readUntil will read characters until it reaches a ", + // return a slice up to " (excluded) + jsonReadUntilDblQuote() (v []byte) // skip will skip any byte that matches, and return the first non-matching byte // skip(accept *bitset256) (token byte) @@ -50,21 +66,28 @@ type decReader interface { // readTo will read any byte that matches, stopping once no-longer matching. // readTo(accept *bitset256) (out []byte) - // readUntil will read, only stopping once it matches the 'stop' byte (which it excludes). - readUntil(stop byte) (out []byte) -} + // // readUntil will read characters until it reaches a stop char, + // // return a slice up to the terminal byte (excluded) + // readUntil(stop byte) (out []byte) -// ------------------------------------------------ + // only supported when reading from bytes + // bytesReadFrom(startpos uint) []byte -type unreadByteStatus uint8 + // isBytes() bool + resetIO(r io.Reader, bufsize int, maxInitLen int, blist *bytesFreeList) -// unreadByteStatus goes from -// undefined (when initialized) -- (read) --> canUnread -- (unread) --> canRead ... -const ( - unreadByteUndefined unreadByteStatus = iota - unreadByteCanRead - unreadByteCanUnread -) + resetBytes(in []byte) + + // nextValueBytes() captures bytes read between a call to startRecording and stopRecording. + // startRecording will always includes the last byte read. + startRecording() + // stopRecording will include all bytes read between the point of startRecording and now. + stopRecording() []byte +} + +// // ------------------------------------------------ + +const maxConsecutiveEmptyReads = 16 // 2 is sufficient, 16 is enough, 64 is optimal // const defBufReaderSize = 4096 @@ -74,276 +97,568 @@ const ( type ioReaderByteScanner interface { io.Reader io.ByteScanner - // ReadByte() (byte, error) - // UnreadByte() error - // Read(p []byte) (n int, err error) } -// ioReaderByteScannerT does a simple wrapper of a io.ByteScanner -// over a io.Reader -type ioReaderByteScannerT struct { +// MARKER: why not separate bufioDecReader from ioDecReader? +// +// We tried, but only readn1 of bufioDecReader came close to being +// inlined (at inline cost 82). All other methods were at inline cost >= 90. +// +// Consequently, there's no performance impact from having both together +// (except a single if z.bufio branch, which is likely well predicted and happens +// only once per call (right at the top). + +// ioDecReader is a decReader that reads off an io.Reader. +type ioDecReader struct { r io.Reader - l byte // last byte - ls unreadByteStatus // last byte status + blist *bytesFreeList - _ [2]byte // padding - b [4]byte // tiny buffer for reading single bytes + maxInitLen uint + + n uint // num read + + bufsize uint + + bufio bool // are we buffering (rc and wc are valid) + rbr bool // r is a byte reader + recording bool // are we recording (src and erc are valid) + done bool // did we reach EOF and are we done? + + // valid when: bufio=false + b [1]byte // tiny buffer for reading single byte (if z.br == nil) + l byte // last byte read + br io.ByteReader // main reader used for ReadByte + + // valid when: bufio=true + wc uint // read cursor + rc uint // write cursor + err error + + // valid when: recording=true + recc uint // start-recording cursor (valid: recording=true) + + buf []byte // buffer for bufio OR recording (if !bufio) +} + +func (z *ioDecReader) resetBytes(in []byte) { + halt.errorStr("resetBytes unsupported by ioDecReader") } -func (z *ioReaderByteScannerT) ReadByte() (c byte, err error) { - if z.ls == unreadByteCanRead { - z.ls = unreadByteCanUnread - c = z.l +func (z *ioDecReader) resetIO(r io.Reader, bufsize int, maxInitLen int, blist *bytesFreeList) { + buf := z.buf + *z = ioDecReader{} + z.maxInitLen = max(1024, uint(maxInitLen)) + z.blist = blist + z.buf = blist.check(buf, max(256, bufsize)) + z.bufsize = uint(max(0, bufsize)) + z.bufio = z.bufsize > 0 + if z.bufio { + z.buf = z.buf[:cap(z.buf)] } else { - _, err = z.Read(z.b[:1]) - c = z.b[0] + z.buf = z.buf[:0] } - return + if r == nil { + z.r = &eofReader + } else { + z.r = r + } + z.br, z.rbr = z.r.(io.ByteReader) } -func (z *ioReaderByteScannerT) UnreadByte() (err error) { - switch z.ls { - case unreadByteCanUnread: - z.ls = unreadByteCanRead - case unreadByteCanRead: - err = errDecUnreadByteLastByteNotRead - case unreadByteUndefined: - err = errDecUnreadByteNothingToRead - default: - err = errDecUnreadByteUnknown - } - return +func (z *ioDecReader) numread() uint { + return z.n } -func (z *ioReaderByteScannerT) Read(p []byte) (n int, err error) { - if len(p) == 0 { - return - } - var firstByte bool - if z.ls == unreadByteCanRead { - z.ls = unreadByteCanUnread - p[0] = z.l - if len(p) == 1 { - n = 1 - return - } - firstByte = true - p = p[1:] - } - n, err = z.r.Read(p) - if n > 0 { - if err == io.EOF && n == len(p) { - err = nil // read was successful, so postpone EOF (till next time) - } - z.l = p[n-1] - z.ls = unreadByteCanUnread - } - if firstByte { - n++ - } - return +func (z *ioDecReader) readn2() [2]byte { + return ([2]byte)(z.readx(2)) + // using readb forced return bs onto heap, unnecessarily + // z.readb(bs[:]) + // return } -func (z *ioReaderByteScannerT) reset(r io.Reader) { - z.r = r - z.ls = unreadByteUndefined - z.l = 0 +func (z *ioDecReader) readn3() [3]byte { + return ([3]byte)(z.readx(3)) } -// ioDecReader is a decReader that reads off an io.Reader. -type ioDecReader struct { - rr ioReaderByteScannerT // the reader passed in, wrapped into a reader+bytescanner +func (z *ioDecReader) readn4() [4]byte { + return ([4]byte)(z.readx(4)) +} - n uint // num read +func (z *ioDecReader) readn8() [8]byte { + return ([8]byte)(z.readx(8)) +} - blist *bytesFreelist +func (z *ioDecReader) readx(n uint) (bs []byte) { + return bytesOK(z.readxb(n)) +} - bufr []byte // buffer for readTo/readUntil - br ioReaderByteScanner // main reader used for Read|ReadByte|UnreadByte - bb *bufio.Reader // created internally, and reused on reset if needed +func (z *ioDecReader) readErr() (err error) { + err, z.err = z.err, nil + return +} - x [64 + 40]byte // for: get struct field name, swallow valueTypeBytes, etc +func (z *ioDecReader) checkErr() { + halt.onerror(z.readErr()) } -func (z *ioDecReader) reset(r io.Reader, bufsize int, blist *bytesFreelist) { - z.blist = blist - z.n = 0 - z.bufr = z.blist.check(z.bufr, 256) - z.br = nil +func (z *ioDecReader) readOne() (b byte, err error) { + n, err := z.r.Read(z.b[:]) + if n == 1 { + err = nil + b = z.b[0] + } + return +} - var ok bool +// fillbuf reads a new chunk into the buffer. +func (z *ioDecReader) fillbuf(bufsize uint) (numShift, numRead uint) { + z.checkErr() + bufsize = max(bufsize, z.bufsize) - if bufsize <= 0 { - z.br, ok = r.(ioReaderByteScanner) - if !ok { - z.rr.reset(r) - z.br = &z.rr + // Slide existing data to beginning. + if z.recording { + numShift = z.recc // recc is always <= rc + } else { + numShift = z.rc + } + if numShift > 0 { + numShift-- // never shift last byte read out + } + copy(z.buf, z.buf[numShift:z.wc]) + z.wc -= numShift + z.rc -= numShift + if z.recording { + z.recc -= numShift + } + // add enough to allow u to read up to bufsize again iff + // - buf is fully written + // - NOTE: don't pre-allocate more until needed + if uint(len(z.buf)) == z.wc { + if bufsize+z.wc < uint(cap(z.buf)) { + z.buf = z.buf[:uint(cap(z.buf))] + } else { + bufsize = max(uint(cap(z.buf)*3/2), bufsize+z.wc) + buf := z.blist.get(int(bufsize)) + buf = buf[:cap(buf)] + copy(buf, z.buf[:z.wc]) + z.blist.put(z.buf) + z.buf = buf } - return } + // Read new data: try a limited number of times. + // if n == 0: try up to maxConsecutiveEmptyReads + // if n > 0 and err == nil: try one more time (to see if we get n == 0 and EOF) + for i := maxConsecutiveEmptyReads; i > 0; i-- { + n, err := z.r.Read(z.buf[z.wc:]) + numRead += uint(n) + z.wc += uint(n) + if err != nil { + // if os read dealine, and we have read something, return + z.err = err + if err == io.EOF { + z.done = true + } else if errors.Is(err, os.ErrDeadlineExceeded) { + // os read deadline, but some bytes read: return (don't store err) + z.err = nil + } + return + } - // bufsize > 0 ... - - // if bytes.[Buffer|Reader], no value in adding extra buffer - // if bufio.Reader, no value in extra buffer unless size changes - switch bb := r.(type) { - case *strings.Reader: - z.br = bb - case *bytes.Buffer: - z.br = bb - case *bytes.Reader: - z.br = bb - case *bufio.Reader: - if bb.Size() == bufsize { - z.br = bb + // if z.wc == uint(len(z.buf)) { + // return + // } + // only read one time if results returned + // if n > 0 && i > 2 { + // i = 2 // try max one more time (to see about getting EOF) + // } + + // Once you have some data from this read call, move on. + // Consequently, a blocked Read has less chance of happening. + if n > 0 { + return } } + z.err = io.ErrNoProgress // either no data read OR not enough data read, without an EOF + return +} - if z.br == nil { - if z.bb != nil && z.bb.Size() == bufsize { - z.bb.Reset(r) - } else { - z.bb = bufio.NewReaderSize(r, bufsize) +func (z *ioDecReader) readb(bs []byte) { + if len(bs) == 0 { + return + } + var err error + var n int + if z.bufio { + BUFIO: + for z.rc == z.wc { + z.fillbuf(0) } - z.br = z.bb + n = copy(bs, z.buf[z.rc:z.wc]) + z.rc += uint(n) + z.n += uint(n) + if n == len(bs) { + return + } + bs = bs[n:] + goto BUFIO } -} -func (z *ioDecReader) numread() uint { - return z.n + // -------- NOT BUFIO ------ + + var nn uint + bs0 := bs +READER: + n, err = z.r.Read(bs) + if n > 0 { + z.l = bs[n-1] + nn += uint(n) + bs = bs[n:] + } + if len(bs) != 0 && err == nil { + goto READER + } + if z.recording { + z.buf = append(z.buf, bs0[:nn]...) + } + z.n += nn + if len(bs) != 0 { + halt.onerror(err) + halt.errorf("ioDecReader.readb read %d out of %d bytes requested", nn, len(bs0)) + } + return } func (z *ioDecReader) readn1() (b uint8) { - b, err := z.br.ReadByte() + if z.bufio { + for z.rc == z.wc { + z.fillbuf(0) + } + b = z.buf[z.rc] + z.rc++ + z.n++ + return + } + + // -------- NOT BUFIO ------ + + var err error + if z.rbr { + b, err = z.br.ReadByte() + } else { + b, err = z.readOne() + } halt.onerror(err) + z.l = b z.n++ + if z.recording { + z.buf = append(z.buf, b) + } return } -func (z *ioDecReader) readn2() (bs [2]byte) { - z.readb(bs[:]) - return -} +func (z *ioDecReader) readxb(n uint) (out []byte, useBuf bool) { + if n == 0 { + return zeroByteSlice, false + } -func (z *ioDecReader) readn3() (bs [3]byte) { - z.readb(bs[:]) - return -} + if z.bufio { + BUFIO: + nn := int(n+z.rc) - int(z.wc) + if nn > 0 { + z.fillbuf(decInferLen(nn, z.maxInitLen, 1)) + goto BUFIO + } + pos := z.rc + z.rc += uint(n) + z.n += uint(n) + out = z.buf[pos:z.rc] + useBuf = true + return + } -func (z *ioDecReader) readn4() (bs [4]byte) { - z.readb(bs[:]) + // -------- NOT BUFIO ------ + + useBuf = true + out = z.buf + r0 := uint(len(out)) + r := r0 + nn := int(n) + var n2 uint + for nn > 0 { + n2 = r + decInferLen(int(nn), z.maxInitLen, 1) + if cap(out) < int(n2) { + out2 := z.blist.putGet(out, int(n2))[:n2] // make([]byte, len2+len3) + copy(out2, out) + out = out2 + } else { + out = out[:n2] + } + n3, err := z.r.Read(out[r:n2]) + if n3 > 0 { + z.l = out[r+uint(n3)-1] + nn -= n3 + r += uint(n3) + } + halt.onerror(err) + } + z.buf = out[:r0+n] + out = out[r0 : r0+n] + z.n += n return } -func (z *ioDecReader) readn8() (bs [8]byte) { - z.readb(bs[:]) +func (z *ioDecReader) skip(n uint) { + if n == 0 { + return + } + + if z.bufio { + BUFIO: + n2 := min(n, z.wc-z.rc) + // handle in-line, so z.buf doesn't grow much (since we're skipping) + // ie by setting z.rc, fillbuf should keep shifting left (unless recording) + z.rc += n2 + z.n += n2 + n -= n2 + if n > 0 { + z.fillbuf(decInferLen(int(n+z.rc)-int(z.wc), z.maxInitLen, 1)) + goto BUFIO + } + return + } + + // -------- NOT BUFIO ------ + + var out []byte + var fromBlist bool + if z.recording { + out = z.buf + } else { + nn := int(decInferLen(int(n), z.maxInitLen, 1)) + if cap(z.buf) >= nn/2 { + out = z.buf[:cap(z.buf)] + } else { + fromBlist = true + out = z.blist.get(nn) + } + } + + var r, n2 uint + nn := int(n) + for nn > 0 { + n2 = uint(nn) + if z.recording { + r = uint(len(out)) + n2 = r + decInferLen(int(nn), z.maxInitLen, 1) + if cap(out) < int(n2) { + out2 := z.blist.putGet(out, int(n2))[:n2] // make([]byte, len2+len3) + copy(out2, out) + out = out2 + } else { + out = out[:n2] + } + } + n3, err := z.r.Read(out[r:n2]) + if n3 > 0 { + z.l = out[r+uint(n3)-1] + z.n += uint(n3) + nn -= n3 + } + halt.onerror(err) + } + if z.recording { + z.buf = out + } else if fromBlist { + z.blist.put(out) + } return } -func (z *ioDecReader) readx(n uint) (bs []byte) { - if n == 0 { - return zeroByteSlice +// ---- JSON SPECIFIC HELPERS HERE ---- + +func (z *ioDecReader) jsonReadNum() (bs []byte, token byte) { + var start, pos, end uint + if z.bufio { + // read and fill into buf, then take substring + start = z.rc - 1 // include last byte read + pos = start + BUFIO: + if pos == z.wc { + if z.done { + end = pos + goto END + } + numshift, numread := z.fillbuf(0) + start -= numshift + pos -= numshift + if numread == 0 { + end = pos + goto END + } + } + token = z.buf[pos] + pos++ + if isNumberChar(token) { + goto BUFIO + } + end = pos - 1 + END: + z.n += (pos - z.rc) + z.rc = pos + return z.buf[start:end], token } - if n < uint(len(z.x)) { - bs = z.x[:n] + + // if not recording, add the last read byte into buf + if !z.recording { + z.buf = append(z.buf[:0], z.l) + } + start = uint(len(z.buf) - 1) // incl last byte in z.buf + var b byte + var err error + +READER: + if z.rbr { + b, err = z.br.ReadByte() } else { - bs = make([]byte, n) + b, err = z.readOne() + } + if err == io.EOF { + return z.buf[start:], 0 } - nn, err := readFull(z.br, bs) - z.n += nn halt.onerror(err) - return + z.l = b + z.n++ + z.buf = append(z.buf, b) + if isNumberChar(b) { + goto READER + } + return z.buf[start : len(z.buf)-1], b } -func (z *ioDecReader) readb(bs []byte) { - if len(bs) == 0 { - return +func (z *ioDecReader) skipWhitespace() (tok byte) { + var pos uint + if z.bufio { + pos = z.rc + BUFIO: + if pos == z.wc { + if z.done { + halt.onerror(io.ErrUnexpectedEOF) + } + numshift, numread := z.fillbuf(0) + pos -= numshift + if numread == 0 { + halt.onerror(io.ErrUnexpectedEOF) + } + } + tok = z.buf[pos] + pos++ + if isWhitespaceChar(tok) { + goto BUFIO + } + z.n += (pos - z.rc) + z.rc = pos + return tok + } + + var err error +READER: + if z.rbr { + tok, err = z.br.ReadByte() + } else { + tok, err = z.readOne() } - nn, err := readFull(z.br, bs) - z.n += nn halt.onerror(err) -} + z.n++ + z.l = tok + if z.recording { + z.buf = append(z.buf, tok) + } + if isWhitespaceChar(tok) { + goto READER + } + return tok +} + +func (z *ioDecReader) readUntil(stop1, stop2 byte) (bs []byte, tok byte) { + var start, pos uint + if z.bufio { + start = z.rc + pos = start + BUFIO: + if pos == z.wc { + if z.done { + halt.onerror(io.ErrUnexpectedEOF) + } + numshift, numread := z.fillbuf(0) + start -= numshift + pos -= numshift + if numread == 0 { + halt.onerror(io.ErrUnexpectedEOF) + } + } + tok = z.buf[pos] + pos++ + if tok == stop1 || tok == stop2 { + z.n += (pos - z.rc) + z.rc = pos + return z.buf[start : pos-1], tok + } + goto BUFIO + } -// func (z *ioDecReader) readn1eof() (b uint8, eof bool) { -// b, err := z.br.ReadByte() -// if err == nil { -// z.n++ -// } else if err == io.EOF { -// eof = true -// } else { -// halt.onerror(err) -// } -// return -// } - -func (z *ioDecReader) jsonReadNum() (bs []byte) { - z.unreadn1() - z.bufr = z.bufr[:0] -LOOP: - // i, eof := z.readn1eof() - i, err := z.br.ReadByte() - if err == io.EOF { - return z.bufr + var err error + if !z.recording { + z.buf = z.buf[:0] } - if err != nil { - halt.onerror(err) + start = uint(len(z.buf)) +READER: + if z.rbr { + tok, err = z.br.ReadByte() + } else { + tok, err = z.readOne() } + halt.onerror(err) z.n++ - if isNumberChar(i) { - z.bufr = append(z.bufr, i) - goto LOOP + z.l = tok + z.buf = append(z.buf, tok) + if tok == stop1 || tok == stop2 { + return z.buf[start : len(z.buf)-1], tok } - z.unreadn1() - return z.bufr + goto READER } -func (z *ioDecReader) jsonReadAsisChars() (bs []byte) { - z.bufr = z.bufr[:0] -LOOP: - i := z.readn1() - z.bufr = append(z.bufr, i) - if i == '"' || i == '\\' { - return z.bufr - } - goto LOOP +func (z *ioDecReader) jsonReadAsisChars() (bs []byte, tok byte) { + return z.readUntil('"', '\\') } -func (z *ioDecReader) skipWhitespace() (token byte) { -LOOP: - token = z.readn1() - if isWhitespaceChar(token) { - goto LOOP - } +func (z *ioDecReader) jsonReadUntilDblQuote() (bs []byte) { + bs, _ = z.readUntil('"', 0) return } -// func (z *ioDecReader) readUntil(stop byte) []byte { -// z.bufr = z.bufr[:0] -// LOOP: -// token := z.readn1() -// z.bufr = append(z.bufr, token) -// if token == stop { -// return z.bufr[:len(z.bufr)-1] -// } -// goto LOOP -// } +// ---- start/stop recording ---- -func (z *ioDecReader) readUntil(stop byte) []byte { - z.bufr = z.bufr[:0] -LOOP: - token := z.readn1() - if token == stop { - return z.bufr +func (z *ioDecReader) startRecording() { + z.recording = true + // always include last byte read + if z.bufio { + z.recc = z.rc - 1 + } else { + z.buf = append(z.buf[:0], z.l) } - z.bufr = append(z.bufr, token) - goto LOOP } -func (z *ioDecReader) unreadn1() { - err := z.br.UnreadByte() - halt.onerror(err) - z.n-- +func (z *ioDecReader) stopRecording() (v []byte) { + z.recording = false + if z.bufio { + v = z.buf[z.recc:z.rc] + z.recc = 0 + } else { + v = z.buf + z.buf = z.buf[:0] + } + return } // ------------------------------------ @@ -359,11 +674,18 @@ func (z *ioDecReader) unreadn1() { // // see panicValToErr(...) function in helper.go. type bytesDecReader struct { - b []byte // data - c uint // cursor + b []byte // data + c uint // cursor + r uint // recording cursor + xb []byte // buffer for readxb } -func (z *bytesDecReader) reset(in []byte) { +func (z *bytesDecReader) resetIO(r io.Reader, bufsize int, maxInitLen int, blist *bytesFreeList) { + halt.errorStr("resetIO unsupported by bytesDecReader") +} + +func (z *bytesDecReader) resetBytes(in []byte) { + // it's ok to resize a nil slice, so long as it's not past 0 z.b = in[:len(in):len(in)] // reslicing must not go past capacity z.c = 0 } @@ -377,40 +699,25 @@ func (z *bytesDecReader) numread() uint { // However, we do it only once, and it's better than reslicing both z.b and return value. func (z *bytesDecReader) readx(n uint) (bs []byte) { - // x := z.c + n - // bs = z.b[z.c:x] - // z.c = x bs = z.b[z.c : z.c+n] z.c += n return } -func (z *bytesDecReader) readb(bs []byte) { - copy(bs, z.readx(uint(len(bs)))) +func (z *bytesDecReader) skip(n uint) { + if z.c+n > uint(cap(z.b)) { + halt.error(&outOfBoundsError{uint(cap(z.b)), z.c + n}) + } + z.c += n } -// MARKER: do not use this - as it calls into memmove (as the size of data to move is unknown) -// func (z *bytesDecReader) readnn(bs []byte, n uint) { -// x := z.c -// copy(bs, z.b[x:x+n]) -// z.c += n -// } - -// func (z *bytesDecReader) readn(num uint8) (bs [8]byte) { -// x := z.c + uint(num) -// copy(bs[:], z.b[z.c:x]) // slice z.b completely, so we get bounds error if past -// z.c = x -// return -// } - -// func (z *bytesDecReader) readn1() uint8 { -// z.c++ -// return z.b[z.c-1] -// } +func (z *bytesDecReader) readxb(n uint) (out []byte, usingBuf bool) { + return z.readx(n), false +} -// MARKER: readn{1,2,3,4,8} should throw an out of bounds error if past length. -// MARKER: readn1: explicitly ensure bounds check is done -// MARKER: readn{2,3,4,8}: ensure you slice z.b completely so we get bounds error if past end. +func (z *bytesDecReader) readb(bs []byte) { + copy(bs, z.readx(uint(len(bs)))) +} func (z *bytesDecReader) readn1() (v uint8) { v = z.b[z.c] @@ -419,59 +726,58 @@ func (z *bytesDecReader) readn1() (v uint8) { } func (z *bytesDecReader) readn2() (bs [2]byte) { - // copy(bs[:], z.b[z.c:z.c+2]) - // bs[1] = z.b[z.c+1] - // bs[0] = z.b[z.c] - bs = okBytes2(z.b[z.c : z.c+2]) + bs = [2]byte(z.b[z.c:]) z.c += 2 return } func (z *bytesDecReader) readn3() (bs [3]byte) { - // copy(bs[1:], z.b[z.c:z.c+3]) - bs = okBytes3(z.b[z.c : z.c+3]) + bs = [3]byte(z.b[z.c:]) z.c += 3 return } func (z *bytesDecReader) readn4() (bs [4]byte) { - // copy(bs[:], z.b[z.c:z.c+4]) - bs = okBytes4(z.b[z.c : z.c+4]) + bs = [4]byte(z.b[z.c:]) z.c += 4 return } func (z *bytesDecReader) readn8() (bs [8]byte) { - // copy(bs[:], z.b[z.c:z.c+8]) - bs = okBytes8(z.b[z.c : z.c+8]) + bs = [8]byte(z.b[z.c:]) z.c += 8 return } -func (z *bytesDecReader) jsonReadNum() []byte { - z.c-- // unread - i := z.c +func (z *bytesDecReader) jsonReadNum() (bs []byte, token byte) { + start := z.c - 1 // include last byte + i := start LOOP: - // gracefully handle end of slice, as end of stream is meaningful here - if i < uint(len(z.b)) && isNumberChar(z.b[i]) { - i++ - goto LOOP + // gracefully handle end of slice (~= EOF) + if i < uint(len(z.b)) { + if isNumberChar(z.b[i]) { + i++ + goto LOOP + } + token = z.b[i] } - z.c, i = i, z.c - // MARKER: 20230103: byteSliceOf here prevents inlining of jsonReadNum - // return byteSliceOf(z.b, i, z.c) - return z.b[i:z.c] + z.c = i + 1 + bs = z.b[start:i] // byteSliceOf(z.b, start, i) + return } -func (z *bytesDecReader) jsonReadAsisChars() []byte { +func (z *bytesDecReader) jsonReadAsisChars() (bs []byte, token byte) { i := z.c LOOP: - token := z.b[i] + token = z.b[i] i++ if token == '"' || token == '\\' { - z.c, i = i, z.c - return byteSliceOf(z.b, i, z.c) - // return z.b[i:z.c] + // z.c, i = i, z.c + // return byteSliceOf(z.b, i, z.c-1), token + bs = z.b[z.c : i-1] + z.c = i + return + // return z.b[i : z.c-1], token } goto LOOP } @@ -479,21 +785,22 @@ LOOP: func (z *bytesDecReader) skipWhitespace() (token byte) { i := z.c LOOP: + // setting token before check reduces inlining cost, + // making containerNext inlineable token = z.b[i] - if isWhitespaceChar(token) { - i++ - goto LOOP + if !isWhitespaceChar(token) { + z.c = i + 1 + return } - z.c = i + 1 - return + i++ + goto LOOP } -func (z *bytesDecReader) readUntil(stop byte) (out []byte) { +func (z *bytesDecReader) jsonReadUntilDblQuote() (out []byte) { i := z.c LOOP: - if z.b[i] == stop { - out = byteSliceOf(z.b, z.c, i) - // out = z.b[z.c:i] + if z.b[i] == '"' { + out = z.b[z.c:i] // byteSliceOf(z.b, z.c, i) z.c = i + 1 return } @@ -501,107 +808,23 @@ LOOP: goto LOOP } -// -------------- - -type decRd struct { - rb bytesDecReader - ri *ioDecReader - - decReader - - bytes bool // is bytes reader - - // MARKER: these fields below should belong directly in Encoder. - // we pack them here for space efficiency and cache-line optimization. - - mtr bool // is maptype a known type? - str bool // is slicetype a known type? - - be bool // is binary encoding - js bool // is json handle - jsms bool // is json handle, and MapKeyAsString - cbor bool // is cbor handle - - cbreak bool // is a check breaker - +func (z *bytesDecReader) startRecording() { + z.r = z.c - 1 } -// From out benchmarking, we see the following impact performance: -// -// - functions that are too big to inline -// - interface calls (as no inlining can occur) -// -// decRd is designed to embed a decReader, and then re-implement some of the decReader -// methods using a conditional branch. -// -// We only override the ones where the bytes version is inlined AND the wrapper method -// (containing the bytes version alongside a conditional branch) is also inlined. -// -// We use ./run.sh -z to check. -// -// Right now, only numread and "carefully crafted" readn1 can be inlined. - -func (z *decRd) numread() uint { - if z.bytes { - return z.rb.numread() - } - return z.ri.numread() -} - -func (z *decRd) readn1() (v uint8) { - if z.bytes { - // return z.rb.readn1() - // MARKER: calling z.rb.readn1() prevents decRd.readn1 from being inlined. - // copy code, to manually inline and explicitly return here. - // Keep in sync with bytesDecReader.readn1 - v = z.rb.b[z.rb.c] - z.rb.c++ - return - } - return z.ri.readn1() +func (z *bytesDecReader) stopRecording() (v []byte) { + v = z.b[z.r:z.c] + z.r = 0 + return } -// func (z *decRd) readn4() [4]byte { -// if z.bytes { -// return z.rb.readn4() -// } -// return z.ri.readn4() -// } - -// func (z *decRd) readn3() [3]byte { -// if z.bytes { -// return z.rb.readn3() -// } -// return z.ri.readn3() -// } - -// func (z *decRd) skipWhitespace() byte { -// if z.bytes { -// return z.rb.skipWhitespace() -// } -// return z.ri.skipWhitespace() -// } - type devNullReader struct{} func (devNullReader) Read(p []byte) (int, error) { return 0, io.EOF } func (devNullReader) Close() error { return nil } +func (devNullReader) ReadByte() (byte, error) { return 0, io.EOF } +func (devNullReader) UnreadByte() error { return io.EOF } -func readFull(r io.Reader, bs []byte) (n uint, err error) { - var nn int - for n < uint(len(bs)) && err == nil { - nn, err = r.Read(bs[n:]) - if nn > 0 { - if err == io.EOF { - // leave EOF for next time - err = nil - } - n += uint(nn) - } - } - // do not do this below - it serves no purpose - // if n != len(bs) && err == io.EOF { err = io.ErrUnexpectedEOF } - return -} - -var _ decReader = (*decRd)(nil) +// MARKER: readn{1,2,3,4,8} should throw an out of bounds error if past length. +// MARKER: readn1: explicitly ensure bounds check is done +// MARKER: readn{2,3,4,8}: ensure you slice z.b completely so we get bounds error if past end. diff --git a/vendor/github.com/ugorji/go/codec/register_ext.go b/vendor/github.com/ugorji/go/codec/register_ext.go deleted file mode 100644 index 65e4553..0000000 --- a/vendor/github.com/ugorji/go/codec/register_ext.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -import "reflect" - -// This file exists, so that the files for specific formats do not all import reflect. -// This just helps us ensure that reflect package is isolated to a few files. - -// SetInterfaceExt sets an extension -func (h *JsonHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) { - return h.SetExt(rt, tag, makeExt(ext)) -} - -// SetInterfaceExt sets an extension -func (h *CborHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) { - return h.SetExt(rt, tag, makeExt(ext)) -} - -// SetBytesExt sets an extension -func (h *MsgpackHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) { - return h.SetExt(rt, tag, makeExt(ext)) -} - -// SetBytesExt sets an extension -func (h *SimpleHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) { - return h.SetExt(rt, tag, makeExt(ext)) -} - -// SetBytesExt sets an extension -func (h *BincHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) { - return h.SetExt(rt, tag, makeExt(ext)) -} - -// func (h *XMLHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) { -// return h.SetExt(rt, tag, &interfaceExtWrapper{InterfaceExt: ext}) -// } diff --git a/vendor/github.com/ugorji/go/codec/rpc.go b/vendor/github.com/ugorji/go/codec/rpc.go index 0da8ad5..bdc535b 100644 --- a/vendor/github.com/ugorji/go/codec/rpc.go +++ b/vendor/github.com/ugorji/go/codec/rpc.go @@ -4,10 +4,11 @@ package codec import ( - "bufio" "errors" "io" + "net" "net/rpc" + "sync/atomic" ) var ( @@ -28,57 +29,44 @@ type RPCOptions struct { // RPCNoBuffer configures whether we attempt to buffer reads and writes during RPC calls. // // Set RPCNoBuffer=true to turn buffering off. + // // Buffering can still be done if buffered connections are passed in, or // buffering is configured on the handle. + // + // Deprecated: Buffering should be configured at the Handle or by using a buffer Reader. + // Setting this has no effect anymore (after v1.2.12 - authored 2025-05-06) RPCNoBuffer bool } // rpcCodec defines the struct members and common methods. type rpcCodec struct { - c io.Closer - r io.Reader - w io.Writer - f ioFlusher - + c io.Closer + r io.Reader + w io.Writer + f ioFlusher + nc net.Conn dec *Decoder enc *Encoder h Handle - cls atomicClsErr + cls atomic.Pointer[clsErr] } -func newRPCCodec(conn io.ReadWriteCloser, h Handle) rpcCodec { - return newRPCCodec2(conn, conn, conn, h) -} - -func newRPCCodec2(r io.Reader, w io.Writer, c io.Closer, h Handle) rpcCodec { - bh := h.getBasicHandle() - // if the writer can flush, ensure we leverage it, else - // we may hang waiting on read if write isn't flushed. - // var f ioFlusher - f, ok := w.(ioFlusher) - if !bh.RPCNoBuffer { - if bh.WriterBufferSize <= 0 { - if !ok { // a flusher means there's already a buffer - bw := bufio.NewWriter(w) - f, w = bw, bw - } - } - if bh.ReaderBufferSize <= 0 { - if _, ok = w.(ioBuffered); !ok { - r = bufio.NewReader(r) - } - } - } - return rpcCodec{ - c: c, - w: w, - r: r, - f: f, +func newRPCCodec(conn io.ReadWriteCloser, h Handle) *rpcCodec { + nc, _ := conn.(net.Conn) + f, _ := conn.(ioFlusher) + rc := &rpcCodec{ h: h, - enc: NewEncoder(w, h), - dec: NewDecoder(r, h), + c: conn, + w: conn, + r: conn, + f: f, + nc: nc, + enc: NewEncoder(conn, h), + dec: NewDecoder(conn, h), } + rc.cls.Store(new(clsErr)) + return rc } func (c *rpcCodec) write(obj ...interface{}) (err error) { @@ -116,10 +104,16 @@ func (c *rpcCodec) write(obj ...interface{}) (err error) { func (c *rpcCodec) read(obj interface{}) (err error) { err = c.ready() if err == nil { - //If nil is passed in, we should read and discard + // Setting ReadDeadline should not be necessary, + // especially since it only works for net.Conn (not generic ioReadCloser). + // if c.nc != nil { + // c.nc.SetReadDeadline(time.Now().Add(1 * time.Second)) + // } + + // Note: If nil is passed in, we should read and discard if obj == nil { // return c.dec.Decode(&obj) - err = c.dec.swallowErr() + err = panicToErr(c.dec, func() { c.dec.swallow() }) } else { err = c.dec.Decode(obj) } @@ -129,11 +123,11 @@ func (c *rpcCodec) read(obj interface{}) (err error) { func (c *rpcCodec) Close() (err error) { if c.c != nil { - cls := c.cls.load() + cls := c.cls.Load() if !cls.closed { - cls.err = c.c.Close() - cls.closed = true - c.cls.store(cls) + // writing to same pointer could lead to a data race (always make new one) + cls = &clsErr{closed: true, err: c.c.Close()} + c.cls.Store(cls) } err = cls.err } @@ -144,8 +138,8 @@ func (c *rpcCodec) ready() (err error) { if c.c == nil { err = errRpcNoConn } else { - cls := c.cls.load() - if cls.closed { + cls := c.cls.Load() + if cls != nil && cls.closed { if err = cls.err; err == nil { err = errRpcIsClosed } @@ -161,7 +155,7 @@ func (c *rpcCodec) ReadResponseBody(body interface{}) error { // ------------------------------------- type goRpcCodec struct { - rpcCodec + *rpcCodec } func (c *goRpcCodec) WriteRequest(r *rpc.Request, body interface{}) error { diff --git a/vendor/github.com/ugorji/go/codec/simple.base.go b/vendor/github.com/ugorji/go/codec/simple.base.go new file mode 100644 index 0000000..2522282 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/simple.base.go @@ -0,0 +1,97 @@ +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "reflect" +) + +const ( + _ uint8 = iota + simpleVdNil = 1 + simpleVdFalse = 2 + simpleVdTrue = 3 + simpleVdFloat32 = 4 + simpleVdFloat64 = 5 + + // each lasts for 4 (ie n, n+1, n+2, n+3) + simpleVdPosInt = 8 + simpleVdNegInt = 12 + + simpleVdTime = 24 + + // containers: each lasts for 8 (ie n, n+1, n+2, ... n+7) + simpleVdString = 216 + simpleVdByteArray = 224 + simpleVdArray = 232 + simpleVdMap = 240 + simpleVdExt = 248 +) + +var simpledescNames = map[byte]string{ + simpleVdNil: "null", + simpleVdFalse: "false", + simpleVdTrue: "true", + simpleVdFloat32: "float32", + simpleVdFloat64: "float64", + + simpleVdPosInt: "+int", + simpleVdNegInt: "-int", + + simpleVdTime: "time", + + simpleVdString: "string", + simpleVdByteArray: "binary", + simpleVdArray: "array", + simpleVdMap: "map", + simpleVdExt: "ext", +} + +func simpledesc(bd byte) (s string) { + s = simpledescNames[bd] + if s == "" { + s = "unknown" + } + return +} + +//------------------------------------ + +// SimpleHandle is a Handle for a very simple encoding format. +// +// simple is a simplistic codec similar to binc, but not as compact. +// - Encoding of a value is always preceded by the descriptor byte (bd) +// - True, false, nil are encoded fully in 1 byte (the descriptor) +// - Integers (intXXX, uintXXX) are encoded in 1, 2, 4 or 8 bytes (plus a descriptor byte). +// There are positive (uintXXX and intXXX >= 0) and negative (intXXX < 0) integers. +// - Floats are encoded in 4 or 8 bytes (plus a descriptor byte) +// - Length of containers (strings, bytes, array, map, extensions) +// are encoded in 0, 1, 2, 4 or 8 bytes. +// Zero-length containers have no length encoded. +// For others, the number of bytes is given by pow(2, bd%3) +// - maps are encoded as [bd] [length] [[key][value]]... +// - arrays are encoded as [bd] [length] [value]... +// - extensions are encoded as [bd] [length] [tag] [byte]... +// - strings/bytearrays are encoded as [bd] [length] [byte]... +// - time.Time are encoded as [bd] [length] [byte]... +// +// The full spec will be published soon. +type SimpleHandle struct { + binaryEncodingType + notJsonType + BasicHandle + + // EncZeroValuesAsNil says to encode zero values for numbers, bool, string, etc as nil + EncZeroValuesAsNil bool +} + +// Name returns the name of the handle: simple +func (h *SimpleHandle) Name() string { return "simple" } + +func (h *SimpleHandle) desc(bd byte) string { return simpledesc(bd) } + +// SetBytesExt sets an extension +func (h *SimpleHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) { + return h.SetExt(rt, tag, makeExt(ext)) +} diff --git a/vendor/github.com/ugorji/go/codec/simple.fastpath.mono.generated.go b/vendor/github.com/ugorji/go/codec/simple.fastpath.mono.generated.go new file mode 100644 index 0000000..329c4bf --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/simple.fastpath.mono.generated.go @@ -0,0 +1,12482 @@ +//go:build !notmono && !codec.notmono && !notfastpath && !codec.notfastpath + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "reflect" + "slices" + "sort" +) + +type fastpathESimpleBytes struct { + rtid uintptr + rt reflect.Type + encfn func(*encoderSimpleBytes, *encFnInfo, reflect.Value) +} +type fastpathDSimpleBytes struct { + rtid uintptr + rt reflect.Type + decfn func(*decoderSimpleBytes, *decFnInfo, reflect.Value) +} +type fastpathEsSimpleBytes [56]fastpathESimpleBytes +type fastpathDsSimpleBytes [56]fastpathDSimpleBytes +type fastpathETSimpleBytes struct{} +type fastpathDTSimpleBytes struct{} + +func (helperEncDriverSimpleBytes) fastpathEList() *fastpathEsSimpleBytes { + var i uint = 0 + var s fastpathEsSimpleBytes + fn := func(v interface{}, fe func(*encoderSimpleBytes, *encFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathESimpleBytes{rt2id(xrt), xrt, fe} + i++ + } + + fn([]interface{}(nil), (*encoderSimpleBytes).fastpathEncSliceIntfR) + fn([]string(nil), (*encoderSimpleBytes).fastpathEncSliceStringR) + fn([][]byte(nil), (*encoderSimpleBytes).fastpathEncSliceBytesR) + fn([]float32(nil), (*encoderSimpleBytes).fastpathEncSliceFloat32R) + fn([]float64(nil), (*encoderSimpleBytes).fastpathEncSliceFloat64R) + fn([]uint8(nil), (*encoderSimpleBytes).fastpathEncSliceUint8R) + fn([]uint64(nil), (*encoderSimpleBytes).fastpathEncSliceUint64R) + fn([]int(nil), (*encoderSimpleBytes).fastpathEncSliceIntR) + fn([]int32(nil), (*encoderSimpleBytes).fastpathEncSliceInt32R) + fn([]int64(nil), (*encoderSimpleBytes).fastpathEncSliceInt64R) + fn([]bool(nil), (*encoderSimpleBytes).fastpathEncSliceBoolR) + + fn(map[string]interface{}(nil), (*encoderSimpleBytes).fastpathEncMapStringIntfR) + fn(map[string]string(nil), (*encoderSimpleBytes).fastpathEncMapStringStringR) + fn(map[string][]byte(nil), (*encoderSimpleBytes).fastpathEncMapStringBytesR) + fn(map[string]uint8(nil), (*encoderSimpleBytes).fastpathEncMapStringUint8R) + fn(map[string]uint64(nil), (*encoderSimpleBytes).fastpathEncMapStringUint64R) + fn(map[string]int(nil), (*encoderSimpleBytes).fastpathEncMapStringIntR) + fn(map[string]int32(nil), (*encoderSimpleBytes).fastpathEncMapStringInt32R) + fn(map[string]float64(nil), (*encoderSimpleBytes).fastpathEncMapStringFloat64R) + fn(map[string]bool(nil), (*encoderSimpleBytes).fastpathEncMapStringBoolR) + fn(map[uint8]interface{}(nil), (*encoderSimpleBytes).fastpathEncMapUint8IntfR) + fn(map[uint8]string(nil), (*encoderSimpleBytes).fastpathEncMapUint8StringR) + fn(map[uint8][]byte(nil), (*encoderSimpleBytes).fastpathEncMapUint8BytesR) + fn(map[uint8]uint8(nil), (*encoderSimpleBytes).fastpathEncMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*encoderSimpleBytes).fastpathEncMapUint8Uint64R) + fn(map[uint8]int(nil), (*encoderSimpleBytes).fastpathEncMapUint8IntR) + fn(map[uint8]int32(nil), (*encoderSimpleBytes).fastpathEncMapUint8Int32R) + fn(map[uint8]float64(nil), (*encoderSimpleBytes).fastpathEncMapUint8Float64R) + fn(map[uint8]bool(nil), (*encoderSimpleBytes).fastpathEncMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*encoderSimpleBytes).fastpathEncMapUint64IntfR) + fn(map[uint64]string(nil), (*encoderSimpleBytes).fastpathEncMapUint64StringR) + fn(map[uint64][]byte(nil), (*encoderSimpleBytes).fastpathEncMapUint64BytesR) + fn(map[uint64]uint8(nil), (*encoderSimpleBytes).fastpathEncMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*encoderSimpleBytes).fastpathEncMapUint64Uint64R) + fn(map[uint64]int(nil), (*encoderSimpleBytes).fastpathEncMapUint64IntR) + fn(map[uint64]int32(nil), (*encoderSimpleBytes).fastpathEncMapUint64Int32R) + fn(map[uint64]float64(nil), (*encoderSimpleBytes).fastpathEncMapUint64Float64R) + fn(map[uint64]bool(nil), (*encoderSimpleBytes).fastpathEncMapUint64BoolR) + fn(map[int]interface{}(nil), (*encoderSimpleBytes).fastpathEncMapIntIntfR) + fn(map[int]string(nil), (*encoderSimpleBytes).fastpathEncMapIntStringR) + fn(map[int][]byte(nil), (*encoderSimpleBytes).fastpathEncMapIntBytesR) + fn(map[int]uint8(nil), (*encoderSimpleBytes).fastpathEncMapIntUint8R) + fn(map[int]uint64(nil), (*encoderSimpleBytes).fastpathEncMapIntUint64R) + fn(map[int]int(nil), (*encoderSimpleBytes).fastpathEncMapIntIntR) + fn(map[int]int32(nil), (*encoderSimpleBytes).fastpathEncMapIntInt32R) + fn(map[int]float64(nil), (*encoderSimpleBytes).fastpathEncMapIntFloat64R) + fn(map[int]bool(nil), (*encoderSimpleBytes).fastpathEncMapIntBoolR) + fn(map[int32]interface{}(nil), (*encoderSimpleBytes).fastpathEncMapInt32IntfR) + fn(map[int32]string(nil), (*encoderSimpleBytes).fastpathEncMapInt32StringR) + fn(map[int32][]byte(nil), (*encoderSimpleBytes).fastpathEncMapInt32BytesR) + fn(map[int32]uint8(nil), (*encoderSimpleBytes).fastpathEncMapInt32Uint8R) + fn(map[int32]uint64(nil), (*encoderSimpleBytes).fastpathEncMapInt32Uint64R) + fn(map[int32]int(nil), (*encoderSimpleBytes).fastpathEncMapInt32IntR) + fn(map[int32]int32(nil), (*encoderSimpleBytes).fastpathEncMapInt32Int32R) + fn(map[int32]float64(nil), (*encoderSimpleBytes).fastpathEncMapInt32Float64R) + fn(map[int32]bool(nil), (*encoderSimpleBytes).fastpathEncMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperDecDriverSimpleBytes) fastpathDList() *fastpathDsSimpleBytes { + var i uint = 0 + var s fastpathDsSimpleBytes + fn := func(v interface{}, fd func(*decoderSimpleBytes, *decFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathDSimpleBytes{rt2id(xrt), xrt, fd} + i++ + } + + fn([]interface{}(nil), (*decoderSimpleBytes).fastpathDecSliceIntfR) + fn([]string(nil), (*decoderSimpleBytes).fastpathDecSliceStringR) + fn([][]byte(nil), (*decoderSimpleBytes).fastpathDecSliceBytesR) + fn([]float32(nil), (*decoderSimpleBytes).fastpathDecSliceFloat32R) + fn([]float64(nil), (*decoderSimpleBytes).fastpathDecSliceFloat64R) + fn([]uint8(nil), (*decoderSimpleBytes).fastpathDecSliceUint8R) + fn([]uint64(nil), (*decoderSimpleBytes).fastpathDecSliceUint64R) + fn([]int(nil), (*decoderSimpleBytes).fastpathDecSliceIntR) + fn([]int32(nil), (*decoderSimpleBytes).fastpathDecSliceInt32R) + fn([]int64(nil), (*decoderSimpleBytes).fastpathDecSliceInt64R) + fn([]bool(nil), (*decoderSimpleBytes).fastpathDecSliceBoolR) + + fn(map[string]interface{}(nil), (*decoderSimpleBytes).fastpathDecMapStringIntfR) + fn(map[string]string(nil), (*decoderSimpleBytes).fastpathDecMapStringStringR) + fn(map[string][]byte(nil), (*decoderSimpleBytes).fastpathDecMapStringBytesR) + fn(map[string]uint8(nil), (*decoderSimpleBytes).fastpathDecMapStringUint8R) + fn(map[string]uint64(nil), (*decoderSimpleBytes).fastpathDecMapStringUint64R) + fn(map[string]int(nil), (*decoderSimpleBytes).fastpathDecMapStringIntR) + fn(map[string]int32(nil), (*decoderSimpleBytes).fastpathDecMapStringInt32R) + fn(map[string]float64(nil), (*decoderSimpleBytes).fastpathDecMapStringFloat64R) + fn(map[string]bool(nil), (*decoderSimpleBytes).fastpathDecMapStringBoolR) + fn(map[uint8]interface{}(nil), (*decoderSimpleBytes).fastpathDecMapUint8IntfR) + fn(map[uint8]string(nil), (*decoderSimpleBytes).fastpathDecMapUint8StringR) + fn(map[uint8][]byte(nil), (*decoderSimpleBytes).fastpathDecMapUint8BytesR) + fn(map[uint8]uint8(nil), (*decoderSimpleBytes).fastpathDecMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*decoderSimpleBytes).fastpathDecMapUint8Uint64R) + fn(map[uint8]int(nil), (*decoderSimpleBytes).fastpathDecMapUint8IntR) + fn(map[uint8]int32(nil), (*decoderSimpleBytes).fastpathDecMapUint8Int32R) + fn(map[uint8]float64(nil), (*decoderSimpleBytes).fastpathDecMapUint8Float64R) + fn(map[uint8]bool(nil), (*decoderSimpleBytes).fastpathDecMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*decoderSimpleBytes).fastpathDecMapUint64IntfR) + fn(map[uint64]string(nil), (*decoderSimpleBytes).fastpathDecMapUint64StringR) + fn(map[uint64][]byte(nil), (*decoderSimpleBytes).fastpathDecMapUint64BytesR) + fn(map[uint64]uint8(nil), (*decoderSimpleBytes).fastpathDecMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*decoderSimpleBytes).fastpathDecMapUint64Uint64R) + fn(map[uint64]int(nil), (*decoderSimpleBytes).fastpathDecMapUint64IntR) + fn(map[uint64]int32(nil), (*decoderSimpleBytes).fastpathDecMapUint64Int32R) + fn(map[uint64]float64(nil), (*decoderSimpleBytes).fastpathDecMapUint64Float64R) + fn(map[uint64]bool(nil), (*decoderSimpleBytes).fastpathDecMapUint64BoolR) + fn(map[int]interface{}(nil), (*decoderSimpleBytes).fastpathDecMapIntIntfR) + fn(map[int]string(nil), (*decoderSimpleBytes).fastpathDecMapIntStringR) + fn(map[int][]byte(nil), (*decoderSimpleBytes).fastpathDecMapIntBytesR) + fn(map[int]uint8(nil), (*decoderSimpleBytes).fastpathDecMapIntUint8R) + fn(map[int]uint64(nil), (*decoderSimpleBytes).fastpathDecMapIntUint64R) + fn(map[int]int(nil), (*decoderSimpleBytes).fastpathDecMapIntIntR) + fn(map[int]int32(nil), (*decoderSimpleBytes).fastpathDecMapIntInt32R) + fn(map[int]float64(nil), (*decoderSimpleBytes).fastpathDecMapIntFloat64R) + fn(map[int]bool(nil), (*decoderSimpleBytes).fastpathDecMapIntBoolR) + fn(map[int32]interface{}(nil), (*decoderSimpleBytes).fastpathDecMapInt32IntfR) + fn(map[int32]string(nil), (*decoderSimpleBytes).fastpathDecMapInt32StringR) + fn(map[int32][]byte(nil), (*decoderSimpleBytes).fastpathDecMapInt32BytesR) + fn(map[int32]uint8(nil), (*decoderSimpleBytes).fastpathDecMapInt32Uint8R) + fn(map[int32]uint64(nil), (*decoderSimpleBytes).fastpathDecMapInt32Uint64R) + fn(map[int32]int(nil), (*decoderSimpleBytes).fastpathDecMapInt32IntR) + fn(map[int32]int32(nil), (*decoderSimpleBytes).fastpathDecMapInt32Int32R) + fn(map[int32]float64(nil), (*decoderSimpleBytes).fastpathDecMapInt32Float64R) + fn(map[int32]bool(nil), (*decoderSimpleBytes).fastpathDecMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperEncDriverSimpleBytes) fastpathEncodeTypeSwitch(iv interface{}, e *encoderSimpleBytes) bool { + var ft fastpathETSimpleBytes + switch v := iv.(type) { + case []interface{}: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntfV(v, e) + } + case []string: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceStringV(v, e) + } + case [][]byte: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBytesV(v, e) + } + case []float32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat32V(v, e) + } + case []float64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat64V(v, e) + } + case []uint8: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint8V(v, e) + } + case []uint64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint64V(v, e) + } + case []int: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntV(v, e) + } + case []int32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt32V(v, e) + } + case []int64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt64V(v, e) + } + case []bool: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBoolV(v, e) + } + case map[string]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntfV(v, e) + } + case map[string]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringStringV(v, e) + } + case map[string][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBytesV(v, e) + } + case map[string]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint8V(v, e) + } + case map[string]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint64V(v, e) + } + case map[string]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntV(v, e) + } + case map[string]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringInt32V(v, e) + } + case map[string]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringFloat64V(v, e) + } + case map[string]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBoolV(v, e) + } + case map[uint8]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntfV(v, e) + } + case map[uint8]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8StringV(v, e) + } + case map[uint8][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BytesV(v, e) + } + case map[uint8]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint8V(v, e) + } + case map[uint8]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint64V(v, e) + } + case map[uint8]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntV(v, e) + } + case map[uint8]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Int32V(v, e) + } + case map[uint8]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Float64V(v, e) + } + case map[uint8]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BoolV(v, e) + } + case map[uint64]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntfV(v, e) + } + case map[uint64]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64StringV(v, e) + } + case map[uint64][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BytesV(v, e) + } + case map[uint64]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint8V(v, e) + } + case map[uint64]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint64V(v, e) + } + case map[uint64]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntV(v, e) + } + case map[uint64]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Int32V(v, e) + } + case map[uint64]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Float64V(v, e) + } + case map[uint64]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BoolV(v, e) + } + case map[int]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntfV(v, e) + } + case map[int]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntStringV(v, e) + } + case map[int][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBytesV(v, e) + } + case map[int]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint8V(v, e) + } + case map[int]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint64V(v, e) + } + case map[int]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntV(v, e) + } + case map[int]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntInt32V(v, e) + } + case map[int]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntFloat64V(v, e) + } + case map[int]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBoolV(v, e) + } + case map[int32]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntfV(v, e) + } + case map[int32]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32StringV(v, e) + } + case map[int32][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BytesV(v, e) + } + case map[int32]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint8V(v, e) + } + case map[int32]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint64V(v, e) + } + case map[int32]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntV(v, e) + } + case map[int32]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Int32V(v, e) + } + case map[int32]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Float64V(v, e) + } + case map[int32]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BoolV(v, e) + } + default: + _ = v + return false + } + return true +} + +func (e *encoderSimpleBytes) fastpathEncSliceIntfR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleBytes + var v []interface{} + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]interface{}) + } + if f.ti.mbs { + ft.EncAsMapSliceIntfV(v, e) + return + } + ft.EncSliceIntfV(v, e) +} +func (fastpathETSimpleBytes) EncSliceIntfV(v []interface{}, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleBytes) EncAsMapSliceIntfV(v []interface{}, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleBytes) fastpathEncSliceStringR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleBytes + var v []string + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]string) + } + if f.ti.mbs { + ft.EncAsMapSliceStringV(v, e) + return + } + ft.EncSliceStringV(v, e) +} +func (fastpathETSimpleBytes) EncSliceStringV(v []string, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleBytes) EncAsMapSliceStringV(v []string, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleBytes) fastpathEncSliceBytesR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleBytes + var v [][]byte + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([][]byte) + } + if f.ti.mbs { + ft.EncAsMapSliceBytesV(v, e) + return + } + ft.EncSliceBytesV(v, e) +} +func (fastpathETSimpleBytes) EncSliceBytesV(v [][]byte, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleBytes) EncAsMapSliceBytesV(v [][]byte, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleBytes) fastpathEncSliceFloat32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleBytes + var v []float32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float32) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat32V(v, e) + return + } + ft.EncSliceFloat32V(v, e) +} +func (fastpathETSimpleBytes) EncSliceFloat32V(v []float32, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleBytes) EncAsMapSliceFloat32V(v []float32, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleBytes) fastpathEncSliceFloat64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleBytes + var v []float64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float64) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat64V(v, e) + return + } + ft.EncSliceFloat64V(v, e) +} +func (fastpathETSimpleBytes) EncSliceFloat64V(v []float64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleBytes) EncAsMapSliceFloat64V(v []float64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleBytes) fastpathEncSliceUint8R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleBytes + var v []uint8 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint8) + } + if f.ti.mbs { + ft.EncAsMapSliceUint8V(v, e) + return + } + ft.EncSliceUint8V(v, e) +} +func (fastpathETSimpleBytes) EncSliceUint8V(v []uint8, e *encoderSimpleBytes) { + e.e.EncodeStringBytesRaw(v) +} +func (fastpathETSimpleBytes) EncAsMapSliceUint8V(v []uint8, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(uint64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleBytes) fastpathEncSliceUint64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleBytes + var v []uint64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint64) + } + if f.ti.mbs { + ft.EncAsMapSliceUint64V(v, e) + return + } + ft.EncSliceUint64V(v, e) +} +func (fastpathETSimpleBytes) EncSliceUint64V(v []uint64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleBytes) EncAsMapSliceUint64V(v []uint64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleBytes) fastpathEncSliceIntR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleBytes + var v []int + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int) + } + if f.ti.mbs { + ft.EncAsMapSliceIntV(v, e) + return + } + ft.EncSliceIntV(v, e) +} +func (fastpathETSimpleBytes) EncSliceIntV(v []int, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleBytes) EncAsMapSliceIntV(v []int, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleBytes) fastpathEncSliceInt32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleBytes + var v []int32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int32) + } + if f.ti.mbs { + ft.EncAsMapSliceInt32V(v, e) + return + } + ft.EncSliceInt32V(v, e) +} +func (fastpathETSimpleBytes) EncSliceInt32V(v []int32, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleBytes) EncAsMapSliceInt32V(v []int32, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleBytes) fastpathEncSliceInt64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleBytes + var v []int64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int64) + } + if f.ti.mbs { + ft.EncAsMapSliceInt64V(v, e) + return + } + ft.EncSliceInt64V(v, e) +} +func (fastpathETSimpleBytes) EncSliceInt64V(v []int64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleBytes) EncAsMapSliceInt64V(v []int64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleBytes) fastpathEncSliceBoolR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleBytes + var v []bool + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]bool) + } + if f.ti.mbs { + ft.EncAsMapSliceBoolV(v, e) + return + } + ft.EncSliceBoolV(v, e) +} +func (fastpathETSimpleBytes) EncSliceBoolV(v []bool, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleBytes) EncAsMapSliceBoolV(v []bool, e *encoderSimpleBytes) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleBytes) fastpathEncMapStringIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapStringIntfV(rv2i(rv).(map[string]interface{}), e) +} +func (fastpathETSimpleBytes) EncMapStringIntfV(v map[string]interface{}, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapStringStringR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapStringStringV(rv2i(rv).(map[string]string), e) +} +func (fastpathETSimpleBytes) EncMapStringStringV(v map[string]string, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapStringBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapStringBytesV(rv2i(rv).(map[string][]byte), e) +} +func (fastpathETSimpleBytes) EncMapStringBytesV(v map[string][]byte, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapStringUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapStringUint8V(rv2i(rv).(map[string]uint8), e) +} +func (fastpathETSimpleBytes) EncMapStringUint8V(v map[string]uint8, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapStringUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapStringUint64V(rv2i(rv).(map[string]uint64), e) +} +func (fastpathETSimpleBytes) EncMapStringUint64V(v map[string]uint64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapStringIntR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapStringIntV(rv2i(rv).(map[string]int), e) +} +func (fastpathETSimpleBytes) EncMapStringIntV(v map[string]int, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapStringInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapStringInt32V(rv2i(rv).(map[string]int32), e) +} +func (fastpathETSimpleBytes) EncMapStringInt32V(v map[string]int32, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapStringFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapStringFloat64V(rv2i(rv).(map[string]float64), e) +} +func (fastpathETSimpleBytes) EncMapStringFloat64V(v map[string]float64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapStringBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapStringBoolV(rv2i(rv).(map[string]bool), e) +} +func (fastpathETSimpleBytes) EncMapStringBoolV(v map[string]bool, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint8IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), e) +} +func (fastpathETSimpleBytes) EncMapUint8IntfV(v map[uint8]interface{}, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint8StringR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint8StringV(rv2i(rv).(map[uint8]string), e) +} +func (fastpathETSimpleBytes) EncMapUint8StringV(v map[uint8]string, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint8BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint8BytesV(rv2i(rv).(map[uint8][]byte), e) +} +func (fastpathETSimpleBytes) EncMapUint8BytesV(v map[uint8][]byte, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint8Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), e) +} +func (fastpathETSimpleBytes) EncMapUint8Uint8V(v map[uint8]uint8, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint8Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), e) +} +func (fastpathETSimpleBytes) EncMapUint8Uint64V(v map[uint8]uint64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint8IntR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint8IntV(rv2i(rv).(map[uint8]int), e) +} +func (fastpathETSimpleBytes) EncMapUint8IntV(v map[uint8]int, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint8Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint8Int32V(rv2i(rv).(map[uint8]int32), e) +} +func (fastpathETSimpleBytes) EncMapUint8Int32V(v map[uint8]int32, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint8Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint8Float64V(rv2i(rv).(map[uint8]float64), e) +} +func (fastpathETSimpleBytes) EncMapUint8Float64V(v map[uint8]float64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint8BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint8BoolV(rv2i(rv).(map[uint8]bool), e) +} +func (fastpathETSimpleBytes) EncMapUint8BoolV(v map[uint8]bool, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint64IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), e) +} +func (fastpathETSimpleBytes) EncMapUint64IntfV(v map[uint64]interface{}, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint64StringR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint64StringV(rv2i(rv).(map[uint64]string), e) +} +func (fastpathETSimpleBytes) EncMapUint64StringV(v map[uint64]string, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint64BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint64BytesV(rv2i(rv).(map[uint64][]byte), e) +} +func (fastpathETSimpleBytes) EncMapUint64BytesV(v map[uint64][]byte, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint64Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), e) +} +func (fastpathETSimpleBytes) EncMapUint64Uint8V(v map[uint64]uint8, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint64Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), e) +} +func (fastpathETSimpleBytes) EncMapUint64Uint64V(v map[uint64]uint64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint64IntR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint64IntV(rv2i(rv).(map[uint64]int), e) +} +func (fastpathETSimpleBytes) EncMapUint64IntV(v map[uint64]int, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint64Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint64Int32V(rv2i(rv).(map[uint64]int32), e) +} +func (fastpathETSimpleBytes) EncMapUint64Int32V(v map[uint64]int32, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint64Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint64Float64V(rv2i(rv).(map[uint64]float64), e) +} +func (fastpathETSimpleBytes) EncMapUint64Float64V(v map[uint64]float64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapUint64BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapUint64BoolV(rv2i(rv).(map[uint64]bool), e) +} +func (fastpathETSimpleBytes) EncMapUint64BoolV(v map[uint64]bool, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapIntIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapIntIntfV(rv2i(rv).(map[int]interface{}), e) +} +func (fastpathETSimpleBytes) EncMapIntIntfV(v map[int]interface{}, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapIntStringR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapIntStringV(rv2i(rv).(map[int]string), e) +} +func (fastpathETSimpleBytes) EncMapIntStringV(v map[int]string, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapIntBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapIntBytesV(rv2i(rv).(map[int][]byte), e) +} +func (fastpathETSimpleBytes) EncMapIntBytesV(v map[int][]byte, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapIntUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapIntUint8V(rv2i(rv).(map[int]uint8), e) +} +func (fastpathETSimpleBytes) EncMapIntUint8V(v map[int]uint8, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapIntUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapIntUint64V(rv2i(rv).(map[int]uint64), e) +} +func (fastpathETSimpleBytes) EncMapIntUint64V(v map[int]uint64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapIntIntR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapIntIntV(rv2i(rv).(map[int]int), e) +} +func (fastpathETSimpleBytes) EncMapIntIntV(v map[int]int, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapIntInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapIntInt32V(rv2i(rv).(map[int]int32), e) +} +func (fastpathETSimpleBytes) EncMapIntInt32V(v map[int]int32, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapIntFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapIntFloat64V(rv2i(rv).(map[int]float64), e) +} +func (fastpathETSimpleBytes) EncMapIntFloat64V(v map[int]float64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapIntBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapIntBoolV(rv2i(rv).(map[int]bool), e) +} +func (fastpathETSimpleBytes) EncMapIntBoolV(v map[int]bool, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapInt32IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapInt32IntfV(rv2i(rv).(map[int32]interface{}), e) +} +func (fastpathETSimpleBytes) EncMapInt32IntfV(v map[int32]interface{}, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapInt32StringR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapInt32StringV(rv2i(rv).(map[int32]string), e) +} +func (fastpathETSimpleBytes) EncMapInt32StringV(v map[int32]string, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapInt32BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapInt32BytesV(rv2i(rv).(map[int32][]byte), e) +} +func (fastpathETSimpleBytes) EncMapInt32BytesV(v map[int32][]byte, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapInt32Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapInt32Uint8V(rv2i(rv).(map[int32]uint8), e) +} +func (fastpathETSimpleBytes) EncMapInt32Uint8V(v map[int32]uint8, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapInt32Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapInt32Uint64V(rv2i(rv).(map[int32]uint64), e) +} +func (fastpathETSimpleBytes) EncMapInt32Uint64V(v map[int32]uint64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapInt32IntR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapInt32IntV(rv2i(rv).(map[int32]int), e) +} +func (fastpathETSimpleBytes) EncMapInt32IntV(v map[int32]int, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapInt32Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapInt32Int32V(rv2i(rv).(map[int32]int32), e) +} +func (fastpathETSimpleBytes) EncMapInt32Int32V(v map[int32]int32, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapInt32Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapInt32Float64V(rv2i(rv).(map[int32]float64), e) +} +func (fastpathETSimpleBytes) EncMapInt32Float64V(v map[int32]float64, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleBytes) fastpathEncMapInt32BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleBytes{}.EncMapInt32BoolV(rv2i(rv).(map[int32]bool), e) +} +func (fastpathETSimpleBytes) EncMapInt32BoolV(v map[int32]bool, e *encoderSimpleBytes) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (helperDecDriverSimpleBytes) fastpathDecodeTypeSwitch(iv interface{}, d *decoderSimpleBytes) bool { + var ft fastpathDTSimpleBytes + var changed bool + var containerLen int + switch v := iv.(type) { + case []interface{}: + ft.DecSliceIntfN(v, d) + case *[]interface{}: + var v2 []interface{} + if v2, changed = ft.DecSliceIntfY(*v, d); changed { + *v = v2 + } + case []string: + ft.DecSliceStringN(v, d) + case *[]string: + var v2 []string + if v2, changed = ft.DecSliceStringY(*v, d); changed { + *v = v2 + } + case [][]byte: + ft.DecSliceBytesN(v, d) + case *[][]byte: + var v2 [][]byte + if v2, changed = ft.DecSliceBytesY(*v, d); changed { + *v = v2 + } + case []float32: + ft.DecSliceFloat32N(v, d) + case *[]float32: + var v2 []float32 + if v2, changed = ft.DecSliceFloat32Y(*v, d); changed { + *v = v2 + } + case []float64: + ft.DecSliceFloat64N(v, d) + case *[]float64: + var v2 []float64 + if v2, changed = ft.DecSliceFloat64Y(*v, d); changed { + *v = v2 + } + case []uint8: + ft.DecSliceUint8N(v, d) + case *[]uint8: + var v2 []uint8 + if v2, changed = ft.DecSliceUint8Y(*v, d); changed { + *v = v2 + } + case []uint64: + ft.DecSliceUint64N(v, d) + case *[]uint64: + var v2 []uint64 + if v2, changed = ft.DecSliceUint64Y(*v, d); changed { + *v = v2 + } + case []int: + ft.DecSliceIntN(v, d) + case *[]int: + var v2 []int + if v2, changed = ft.DecSliceIntY(*v, d); changed { + *v = v2 + } + case []int32: + ft.DecSliceInt32N(v, d) + case *[]int32: + var v2 []int32 + if v2, changed = ft.DecSliceInt32Y(*v, d); changed { + *v = v2 + } + case []int64: + ft.DecSliceInt64N(v, d) + case *[]int64: + var v2 []int64 + if v2, changed = ft.DecSliceInt64Y(*v, d); changed { + *v = v2 + } + case []bool: + ft.DecSliceBoolN(v, d) + case *[]bool: + var v2 []bool + if v2, changed = ft.DecSliceBoolY(*v, d); changed { + *v = v2 + } + case map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*v, containerLen, d) + } + d.mapEnd() + } + default: + _ = v + return false + } + return true +} + +func (d *decoderSimpleBytes) fastpathDecSliceIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]interface{}) + if vv, changed := ft.DecSliceIntfY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []interface{} + rvGetSlice4Array(rv, &v) + ft.DecSliceIntfN(v, d) + default: + ft.DecSliceIntfN(rv2i(rv).([]interface{}), d) + } +} +func (fastpathDTSimpleBytes) DecSliceIntfY(v []interface{}, d *decoderSimpleBytes) (v2 []interface{}, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []interface{}) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]interface{}, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + d.decode(&v[uint(j)]) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]interface{}{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleBytes) DecSliceIntfN(v []interface{}, d *decoderSimpleBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + d.decode(&v[uint(j)]) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleBytes) fastpathDecSliceStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]string) + if vv, changed := ft.DecSliceStringY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []string + rvGetSlice4Array(rv, &v) + ft.DecSliceStringN(v, d) + default: + ft.DecSliceStringN(rv2i(rv).([]string), d) + } +} +func (fastpathDTSimpleBytes) DecSliceStringY(v []string, d *decoderSimpleBytes) (v2 []string, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []string) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]string, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, "")) + } + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]string{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleBytes) DecSliceStringN(v []string, d *decoderSimpleBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleBytes) fastpathDecSliceBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[][]byte) + if vv, changed := ft.DecSliceBytesY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v [][]byte + rvGetSlice4Array(rv, &v) + ft.DecSliceBytesN(v, d) + default: + ft.DecSliceBytesN(rv2i(rv).([][]byte), d) + } +} +func (fastpathDTSimpleBytes) DecSliceBytesY(v [][]byte, d *decoderSimpleBytes) (v2 [][]byte, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst [][]byte) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 24)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([][]byte, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([][]byte{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleBytes) DecSliceBytesN(v [][]byte, d *decoderSimpleBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleBytes) fastpathDecSliceFloat32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float32) + if vv, changed := ft.DecSliceFloat32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float32 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat32N(v, d) + default: + ft.DecSliceFloat32N(rv2i(rv).([]float32), d) + } +} +func (fastpathDTSimpleBytes) DecSliceFloat32Y(v []float32, d *decoderSimpleBytes) (v2 []float32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = float32(d.d.DecodeFloat32()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleBytes) DecSliceFloat32N(v []float32, d *decoderSimpleBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = float32(d.d.DecodeFloat32()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleBytes) fastpathDecSliceFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float64) + if vv, changed := ft.DecSliceFloat64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float64 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat64N(v, d) + default: + ft.DecSliceFloat64N(rv2i(rv).([]float64), d) + } +} +func (fastpathDTSimpleBytes) DecSliceFloat64Y(v []float64, d *decoderSimpleBytes) (v2 []float64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeFloat64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleBytes) DecSliceFloat64N(v []float64, d *decoderSimpleBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeFloat64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleBytes) fastpathDecSliceUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint8) + if vv, changed := ft.DecSliceUint8Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint8 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint8N(v, d) + default: + ft.DecSliceUint8N(rv2i(rv).([]uint8), d) + } +} +func (fastpathDTSimpleBytes) DecSliceUint8Y(v []uint8, d *decoderSimpleBytes) (v2 []uint8, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + if ctyp != valueTypeMap { + var dbi dBytesIntoState + v2, dbi = d.decodeBytesInto(v[:len(v):len(v)], false) + return v2, dbi != dBytesIntoParamOut + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint8) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint8, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint8{}) + } + d.mapEnd() + return v, changed +} +func (fastpathDTSimpleBytes) DecSliceUint8N(v []uint8, d *decoderSimpleBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + if ctyp != valueTypeMap { + d.decodeBytesInto(v[:len(v):len(v)], true) + return + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + d.mapEnd() +} + +func (d *decoderSimpleBytes) fastpathDecSliceUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint64) + if vv, changed := ft.DecSliceUint64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint64 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint64N(v, d) + default: + ft.DecSliceUint64N(rv2i(rv).([]uint64), d) + } +} +func (fastpathDTSimpleBytes) DecSliceUint64Y(v []uint64, d *decoderSimpleBytes) (v2 []uint64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeUint64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleBytes) DecSliceUint64N(v []uint64, d *decoderSimpleBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeUint64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleBytes) fastpathDecSliceIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int) + if vv, changed := ft.DecSliceIntY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int + rvGetSlice4Array(rv, &v) + ft.DecSliceIntN(v, d) + default: + ft.DecSliceIntN(rv2i(rv).([]int), d) + } +} +func (fastpathDTSimpleBytes) DecSliceIntY(v []int, d *decoderSimpleBytes) (v2 []int, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleBytes) DecSliceIntN(v []int, d *decoderSimpleBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleBytes) fastpathDecSliceInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int32) + if vv, changed := ft.DecSliceInt32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int32 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt32N(v, d) + default: + ft.DecSliceInt32N(rv2i(rv).([]int32), d) + } +} +func (fastpathDTSimpleBytes) DecSliceInt32Y(v []int32, d *decoderSimpleBytes) (v2 []int32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleBytes) DecSliceInt32N(v []int32, d *decoderSimpleBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleBytes) fastpathDecSliceInt64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int64) + if vv, changed := ft.DecSliceInt64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int64 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt64N(v, d) + default: + ft.DecSliceInt64N(rv2i(rv).([]int64), d) + } +} +func (fastpathDTSimpleBytes) DecSliceInt64Y(v []int64, d *decoderSimpleBytes) (v2 []int64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeInt64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleBytes) DecSliceInt64N(v []int64, d *decoderSimpleBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeInt64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleBytes) fastpathDecSliceBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]bool) + if vv, changed := ft.DecSliceBoolY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []bool + rvGetSlice4Array(rv, &v) + ft.DecSliceBoolN(v, d) + default: + ft.DecSliceBoolN(rv2i(rv).([]bool), d) + } +} +func (fastpathDTSimpleBytes) DecSliceBoolY(v []bool, d *decoderSimpleBytes) (v2 []bool, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []bool) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]bool, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, false)) + } + v[uint(j)] = d.d.DecodeBool() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]bool{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleBytes) DecSliceBoolN(v []bool, d *decoderSimpleBytes) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeBool() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} +func (d *decoderSimpleBytes) fastpathDecMapStringIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]interface{}) + if *vp == nil { + *vp = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntfL(rv2i(rv).(map[string]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapStringIntfL(v map[string]interface{}, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderSimpleBytes) fastpathDecMapStringStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]string) + if *vp == nil { + *vp = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringStringL(rv2i(rv).(map[string]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapStringStringL(v map[string]string, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderSimpleBytes) fastpathDecMapStringBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string][]byte) + if *vp == nil { + *vp = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBytesL(rv2i(rv).(map[string][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapStringBytesL(v map[string][]byte, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderSimpleBytes) fastpathDecMapStringUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint8) + if *vp == nil { + *vp = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint8L(rv2i(rv).(map[string]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapStringUint8L(v map[string]uint8, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderSimpleBytes) fastpathDecMapStringUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint64) + if *vp == nil { + *vp = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint64L(rv2i(rv).(map[string]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapStringUint64L(v map[string]uint64, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderSimpleBytes) fastpathDecMapStringIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int) + if *vp == nil { + *vp = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntL(rv2i(rv).(map[string]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapStringIntL(v map[string]int, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderSimpleBytes) fastpathDecMapStringInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int32) + if *vp == nil { + *vp = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringInt32L(rv2i(rv).(map[string]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapStringInt32L(v map[string]int32, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderSimpleBytes) fastpathDecMapStringFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]float64) + if *vp == nil { + *vp = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringFloat64L(rv2i(rv).(map[string]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapStringFloat64L(v map[string]float64, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderSimpleBytes) fastpathDecMapStringBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]bool) + if *vp == nil { + *vp = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBoolL(rv2i(rv).(map[string]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapStringBoolL(v map[string]bool, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint8IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]interface{}) + if *vp == nil { + *vp = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntfL(rv2i(rv).(map[uint8]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint8IntfL(v map[uint8]interface{}, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint8StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]string) + if *vp == nil { + *vp = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8StringL(rv2i(rv).(map[uint8]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint8StringL(v map[uint8]string, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint8BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8][]byte) + if *vp == nil { + *vp = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BytesL(rv2i(rv).(map[uint8][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint8BytesL(v map[uint8][]byte, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint8Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint8) + if *vp == nil { + *vp = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint8L(rv2i(rv).(map[uint8]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint8Uint8L(v map[uint8]uint8, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint8Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint64) + if *vp == nil { + *vp = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint64L(rv2i(rv).(map[uint8]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint8Uint64L(v map[uint8]uint64, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint8IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int) + if *vp == nil { + *vp = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntL(rv2i(rv).(map[uint8]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint8IntL(v map[uint8]int, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint8Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int32) + if *vp == nil { + *vp = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Int32L(rv2i(rv).(map[uint8]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint8Int32L(v map[uint8]int32, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint8Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]float64) + if *vp == nil { + *vp = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Float64L(rv2i(rv).(map[uint8]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint8Float64L(v map[uint8]float64, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint8BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]bool) + if *vp == nil { + *vp = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BoolL(rv2i(rv).(map[uint8]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint8BoolL(v map[uint8]bool, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint64IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]interface{}) + if *vp == nil { + *vp = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntfL(rv2i(rv).(map[uint64]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint64IntfL(v map[uint64]interface{}, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint64StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]string) + if *vp == nil { + *vp = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64StringL(rv2i(rv).(map[uint64]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint64StringL(v map[uint64]string, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint64BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64][]byte) + if *vp == nil { + *vp = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BytesL(rv2i(rv).(map[uint64][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint64BytesL(v map[uint64][]byte, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint64Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint8) + if *vp == nil { + *vp = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint8L(rv2i(rv).(map[uint64]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint64Uint8L(v map[uint64]uint8, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint64Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint64) + if *vp == nil { + *vp = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint64L(rv2i(rv).(map[uint64]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint64Uint64L(v map[uint64]uint64, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint64IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int) + if *vp == nil { + *vp = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntL(rv2i(rv).(map[uint64]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint64IntL(v map[uint64]int, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint64Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int32) + if *vp == nil { + *vp = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Int32L(rv2i(rv).(map[uint64]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint64Int32L(v map[uint64]int32, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint64Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]float64) + if *vp == nil { + *vp = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Float64L(rv2i(rv).(map[uint64]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint64Float64L(v map[uint64]float64, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderSimpleBytes) fastpathDecMapUint64BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]bool) + if *vp == nil { + *vp = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BoolL(rv2i(rv).(map[uint64]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapUint64BoolL(v map[uint64]bool, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderSimpleBytes) fastpathDecMapIntIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]interface{}) + if *vp == nil { + *vp = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntfL(rv2i(rv).(map[int]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapIntIntfL(v map[int]interface{}, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderSimpleBytes) fastpathDecMapIntStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]string) + if *vp == nil { + *vp = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntStringL(rv2i(rv).(map[int]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapIntStringL(v map[int]string, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderSimpleBytes) fastpathDecMapIntBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int][]byte) + if *vp == nil { + *vp = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBytesL(rv2i(rv).(map[int][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapIntBytesL(v map[int][]byte, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderSimpleBytes) fastpathDecMapIntUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint8) + if *vp == nil { + *vp = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint8L(rv2i(rv).(map[int]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapIntUint8L(v map[int]uint8, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderSimpleBytes) fastpathDecMapIntUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint64) + if *vp == nil { + *vp = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint64L(rv2i(rv).(map[int]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapIntUint64L(v map[int]uint64, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderSimpleBytes) fastpathDecMapIntIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int) + if *vp == nil { + *vp = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntL(rv2i(rv).(map[int]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapIntIntL(v map[int]int, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderSimpleBytes) fastpathDecMapIntInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int32) + if *vp == nil { + *vp = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntInt32L(rv2i(rv).(map[int]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapIntInt32L(v map[int]int32, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderSimpleBytes) fastpathDecMapIntFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]float64) + if *vp == nil { + *vp = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntFloat64L(rv2i(rv).(map[int]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapIntFloat64L(v map[int]float64, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderSimpleBytes) fastpathDecMapIntBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]bool) + if *vp == nil { + *vp = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBoolL(rv2i(rv).(map[int]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapIntBoolL(v map[int]bool, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderSimpleBytes) fastpathDecMapInt32IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]interface{}) + if *vp == nil { + *vp = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntfL(rv2i(rv).(map[int32]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapInt32IntfL(v map[int32]interface{}, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderSimpleBytes) fastpathDecMapInt32StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]string) + if *vp == nil { + *vp = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32StringL(rv2i(rv).(map[int32]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapInt32StringL(v map[int32]string, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderSimpleBytes) fastpathDecMapInt32BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32][]byte) + if *vp == nil { + *vp = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BytesL(rv2i(rv).(map[int32][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapInt32BytesL(v map[int32][]byte, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderSimpleBytes) fastpathDecMapInt32Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint8) + if *vp == nil { + *vp = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint8L(rv2i(rv).(map[int32]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapInt32Uint8L(v map[int32]uint8, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderSimpleBytes) fastpathDecMapInt32Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint64) + if *vp == nil { + *vp = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint64L(rv2i(rv).(map[int32]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapInt32Uint64L(v map[int32]uint64, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderSimpleBytes) fastpathDecMapInt32IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int) + if *vp == nil { + *vp = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntL(rv2i(rv).(map[int32]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapInt32IntL(v map[int32]int, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderSimpleBytes) fastpathDecMapInt32Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int32) + if *vp == nil { + *vp = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Int32L(rv2i(rv).(map[int32]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapInt32Int32L(v map[int32]int32, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderSimpleBytes) fastpathDecMapInt32Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]float64) + if *vp == nil { + *vp = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Float64L(rv2i(rv).(map[int32]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapInt32Float64L(v map[int32]float64, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderSimpleBytes) fastpathDecMapInt32BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleBytes + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]bool) + if *vp == nil { + *vp = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BoolL(rv2i(rv).(map[int32]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleBytes) DecMapInt32BoolL(v map[int32]bool, containerLen int, d *decoderSimpleBytes) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} + +type fastpathESimpleIO struct { + rtid uintptr + rt reflect.Type + encfn func(*encoderSimpleIO, *encFnInfo, reflect.Value) +} +type fastpathDSimpleIO struct { + rtid uintptr + rt reflect.Type + decfn func(*decoderSimpleIO, *decFnInfo, reflect.Value) +} +type fastpathEsSimpleIO [56]fastpathESimpleIO +type fastpathDsSimpleIO [56]fastpathDSimpleIO +type fastpathETSimpleIO struct{} +type fastpathDTSimpleIO struct{} + +func (helperEncDriverSimpleIO) fastpathEList() *fastpathEsSimpleIO { + var i uint = 0 + var s fastpathEsSimpleIO + fn := func(v interface{}, fe func(*encoderSimpleIO, *encFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathESimpleIO{rt2id(xrt), xrt, fe} + i++ + } + + fn([]interface{}(nil), (*encoderSimpleIO).fastpathEncSliceIntfR) + fn([]string(nil), (*encoderSimpleIO).fastpathEncSliceStringR) + fn([][]byte(nil), (*encoderSimpleIO).fastpathEncSliceBytesR) + fn([]float32(nil), (*encoderSimpleIO).fastpathEncSliceFloat32R) + fn([]float64(nil), (*encoderSimpleIO).fastpathEncSliceFloat64R) + fn([]uint8(nil), (*encoderSimpleIO).fastpathEncSliceUint8R) + fn([]uint64(nil), (*encoderSimpleIO).fastpathEncSliceUint64R) + fn([]int(nil), (*encoderSimpleIO).fastpathEncSliceIntR) + fn([]int32(nil), (*encoderSimpleIO).fastpathEncSliceInt32R) + fn([]int64(nil), (*encoderSimpleIO).fastpathEncSliceInt64R) + fn([]bool(nil), (*encoderSimpleIO).fastpathEncSliceBoolR) + + fn(map[string]interface{}(nil), (*encoderSimpleIO).fastpathEncMapStringIntfR) + fn(map[string]string(nil), (*encoderSimpleIO).fastpathEncMapStringStringR) + fn(map[string][]byte(nil), (*encoderSimpleIO).fastpathEncMapStringBytesR) + fn(map[string]uint8(nil), (*encoderSimpleIO).fastpathEncMapStringUint8R) + fn(map[string]uint64(nil), (*encoderSimpleIO).fastpathEncMapStringUint64R) + fn(map[string]int(nil), (*encoderSimpleIO).fastpathEncMapStringIntR) + fn(map[string]int32(nil), (*encoderSimpleIO).fastpathEncMapStringInt32R) + fn(map[string]float64(nil), (*encoderSimpleIO).fastpathEncMapStringFloat64R) + fn(map[string]bool(nil), (*encoderSimpleIO).fastpathEncMapStringBoolR) + fn(map[uint8]interface{}(nil), (*encoderSimpleIO).fastpathEncMapUint8IntfR) + fn(map[uint8]string(nil), (*encoderSimpleIO).fastpathEncMapUint8StringR) + fn(map[uint8][]byte(nil), (*encoderSimpleIO).fastpathEncMapUint8BytesR) + fn(map[uint8]uint8(nil), (*encoderSimpleIO).fastpathEncMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*encoderSimpleIO).fastpathEncMapUint8Uint64R) + fn(map[uint8]int(nil), (*encoderSimpleIO).fastpathEncMapUint8IntR) + fn(map[uint8]int32(nil), (*encoderSimpleIO).fastpathEncMapUint8Int32R) + fn(map[uint8]float64(nil), (*encoderSimpleIO).fastpathEncMapUint8Float64R) + fn(map[uint8]bool(nil), (*encoderSimpleIO).fastpathEncMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*encoderSimpleIO).fastpathEncMapUint64IntfR) + fn(map[uint64]string(nil), (*encoderSimpleIO).fastpathEncMapUint64StringR) + fn(map[uint64][]byte(nil), (*encoderSimpleIO).fastpathEncMapUint64BytesR) + fn(map[uint64]uint8(nil), (*encoderSimpleIO).fastpathEncMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*encoderSimpleIO).fastpathEncMapUint64Uint64R) + fn(map[uint64]int(nil), (*encoderSimpleIO).fastpathEncMapUint64IntR) + fn(map[uint64]int32(nil), (*encoderSimpleIO).fastpathEncMapUint64Int32R) + fn(map[uint64]float64(nil), (*encoderSimpleIO).fastpathEncMapUint64Float64R) + fn(map[uint64]bool(nil), (*encoderSimpleIO).fastpathEncMapUint64BoolR) + fn(map[int]interface{}(nil), (*encoderSimpleIO).fastpathEncMapIntIntfR) + fn(map[int]string(nil), (*encoderSimpleIO).fastpathEncMapIntStringR) + fn(map[int][]byte(nil), (*encoderSimpleIO).fastpathEncMapIntBytesR) + fn(map[int]uint8(nil), (*encoderSimpleIO).fastpathEncMapIntUint8R) + fn(map[int]uint64(nil), (*encoderSimpleIO).fastpathEncMapIntUint64R) + fn(map[int]int(nil), (*encoderSimpleIO).fastpathEncMapIntIntR) + fn(map[int]int32(nil), (*encoderSimpleIO).fastpathEncMapIntInt32R) + fn(map[int]float64(nil), (*encoderSimpleIO).fastpathEncMapIntFloat64R) + fn(map[int]bool(nil), (*encoderSimpleIO).fastpathEncMapIntBoolR) + fn(map[int32]interface{}(nil), (*encoderSimpleIO).fastpathEncMapInt32IntfR) + fn(map[int32]string(nil), (*encoderSimpleIO).fastpathEncMapInt32StringR) + fn(map[int32][]byte(nil), (*encoderSimpleIO).fastpathEncMapInt32BytesR) + fn(map[int32]uint8(nil), (*encoderSimpleIO).fastpathEncMapInt32Uint8R) + fn(map[int32]uint64(nil), (*encoderSimpleIO).fastpathEncMapInt32Uint64R) + fn(map[int32]int(nil), (*encoderSimpleIO).fastpathEncMapInt32IntR) + fn(map[int32]int32(nil), (*encoderSimpleIO).fastpathEncMapInt32Int32R) + fn(map[int32]float64(nil), (*encoderSimpleIO).fastpathEncMapInt32Float64R) + fn(map[int32]bool(nil), (*encoderSimpleIO).fastpathEncMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperDecDriverSimpleIO) fastpathDList() *fastpathDsSimpleIO { + var i uint = 0 + var s fastpathDsSimpleIO + fn := func(v interface{}, fd func(*decoderSimpleIO, *decFnInfo, reflect.Value)) { + xrt := reflect.TypeOf(v) + s[i] = fastpathDSimpleIO{rt2id(xrt), xrt, fd} + i++ + } + + fn([]interface{}(nil), (*decoderSimpleIO).fastpathDecSliceIntfR) + fn([]string(nil), (*decoderSimpleIO).fastpathDecSliceStringR) + fn([][]byte(nil), (*decoderSimpleIO).fastpathDecSliceBytesR) + fn([]float32(nil), (*decoderSimpleIO).fastpathDecSliceFloat32R) + fn([]float64(nil), (*decoderSimpleIO).fastpathDecSliceFloat64R) + fn([]uint8(nil), (*decoderSimpleIO).fastpathDecSliceUint8R) + fn([]uint64(nil), (*decoderSimpleIO).fastpathDecSliceUint64R) + fn([]int(nil), (*decoderSimpleIO).fastpathDecSliceIntR) + fn([]int32(nil), (*decoderSimpleIO).fastpathDecSliceInt32R) + fn([]int64(nil), (*decoderSimpleIO).fastpathDecSliceInt64R) + fn([]bool(nil), (*decoderSimpleIO).fastpathDecSliceBoolR) + + fn(map[string]interface{}(nil), (*decoderSimpleIO).fastpathDecMapStringIntfR) + fn(map[string]string(nil), (*decoderSimpleIO).fastpathDecMapStringStringR) + fn(map[string][]byte(nil), (*decoderSimpleIO).fastpathDecMapStringBytesR) + fn(map[string]uint8(nil), (*decoderSimpleIO).fastpathDecMapStringUint8R) + fn(map[string]uint64(nil), (*decoderSimpleIO).fastpathDecMapStringUint64R) + fn(map[string]int(nil), (*decoderSimpleIO).fastpathDecMapStringIntR) + fn(map[string]int32(nil), (*decoderSimpleIO).fastpathDecMapStringInt32R) + fn(map[string]float64(nil), (*decoderSimpleIO).fastpathDecMapStringFloat64R) + fn(map[string]bool(nil), (*decoderSimpleIO).fastpathDecMapStringBoolR) + fn(map[uint8]interface{}(nil), (*decoderSimpleIO).fastpathDecMapUint8IntfR) + fn(map[uint8]string(nil), (*decoderSimpleIO).fastpathDecMapUint8StringR) + fn(map[uint8][]byte(nil), (*decoderSimpleIO).fastpathDecMapUint8BytesR) + fn(map[uint8]uint8(nil), (*decoderSimpleIO).fastpathDecMapUint8Uint8R) + fn(map[uint8]uint64(nil), (*decoderSimpleIO).fastpathDecMapUint8Uint64R) + fn(map[uint8]int(nil), (*decoderSimpleIO).fastpathDecMapUint8IntR) + fn(map[uint8]int32(nil), (*decoderSimpleIO).fastpathDecMapUint8Int32R) + fn(map[uint8]float64(nil), (*decoderSimpleIO).fastpathDecMapUint8Float64R) + fn(map[uint8]bool(nil), (*decoderSimpleIO).fastpathDecMapUint8BoolR) + fn(map[uint64]interface{}(nil), (*decoderSimpleIO).fastpathDecMapUint64IntfR) + fn(map[uint64]string(nil), (*decoderSimpleIO).fastpathDecMapUint64StringR) + fn(map[uint64][]byte(nil), (*decoderSimpleIO).fastpathDecMapUint64BytesR) + fn(map[uint64]uint8(nil), (*decoderSimpleIO).fastpathDecMapUint64Uint8R) + fn(map[uint64]uint64(nil), (*decoderSimpleIO).fastpathDecMapUint64Uint64R) + fn(map[uint64]int(nil), (*decoderSimpleIO).fastpathDecMapUint64IntR) + fn(map[uint64]int32(nil), (*decoderSimpleIO).fastpathDecMapUint64Int32R) + fn(map[uint64]float64(nil), (*decoderSimpleIO).fastpathDecMapUint64Float64R) + fn(map[uint64]bool(nil), (*decoderSimpleIO).fastpathDecMapUint64BoolR) + fn(map[int]interface{}(nil), (*decoderSimpleIO).fastpathDecMapIntIntfR) + fn(map[int]string(nil), (*decoderSimpleIO).fastpathDecMapIntStringR) + fn(map[int][]byte(nil), (*decoderSimpleIO).fastpathDecMapIntBytesR) + fn(map[int]uint8(nil), (*decoderSimpleIO).fastpathDecMapIntUint8R) + fn(map[int]uint64(nil), (*decoderSimpleIO).fastpathDecMapIntUint64R) + fn(map[int]int(nil), (*decoderSimpleIO).fastpathDecMapIntIntR) + fn(map[int]int32(nil), (*decoderSimpleIO).fastpathDecMapIntInt32R) + fn(map[int]float64(nil), (*decoderSimpleIO).fastpathDecMapIntFloat64R) + fn(map[int]bool(nil), (*decoderSimpleIO).fastpathDecMapIntBoolR) + fn(map[int32]interface{}(nil), (*decoderSimpleIO).fastpathDecMapInt32IntfR) + fn(map[int32]string(nil), (*decoderSimpleIO).fastpathDecMapInt32StringR) + fn(map[int32][]byte(nil), (*decoderSimpleIO).fastpathDecMapInt32BytesR) + fn(map[int32]uint8(nil), (*decoderSimpleIO).fastpathDecMapInt32Uint8R) + fn(map[int32]uint64(nil), (*decoderSimpleIO).fastpathDecMapInt32Uint64R) + fn(map[int32]int(nil), (*decoderSimpleIO).fastpathDecMapInt32IntR) + fn(map[int32]int32(nil), (*decoderSimpleIO).fastpathDecMapInt32Int32R) + fn(map[int32]float64(nil), (*decoderSimpleIO).fastpathDecMapInt32Float64R) + fn(map[int32]bool(nil), (*decoderSimpleIO).fastpathDecMapInt32BoolR) + + sort.Slice(s[:], func(i, j int) bool { return s[i].rtid < s[j].rtid }) + return &s +} + +func (helperEncDriverSimpleIO) fastpathEncodeTypeSwitch(iv interface{}, e *encoderSimpleIO) bool { + var ft fastpathETSimpleIO + switch v := iv.(type) { + case []interface{}: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntfV(v, e) + } + case []string: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceStringV(v, e) + } + case [][]byte: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBytesV(v, e) + } + case []float32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat32V(v, e) + } + case []float64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceFloat64V(v, e) + } + case []uint8: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint8V(v, e) + } + case []uint64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceUint64V(v, e) + } + case []int: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceIntV(v, e) + } + case []int32: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt32V(v, e) + } + case []int64: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceInt64V(v, e) + } + case []bool: + if v == nil { + e.e.writeNilArray() + } else { + ft.EncSliceBoolV(v, e) + } + case map[string]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntfV(v, e) + } + case map[string]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringStringV(v, e) + } + case map[string][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBytesV(v, e) + } + case map[string]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint8V(v, e) + } + case map[string]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringUint64V(v, e) + } + case map[string]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringIntV(v, e) + } + case map[string]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringInt32V(v, e) + } + case map[string]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringFloat64V(v, e) + } + case map[string]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapStringBoolV(v, e) + } + case map[uint8]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntfV(v, e) + } + case map[uint8]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8StringV(v, e) + } + case map[uint8][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BytesV(v, e) + } + case map[uint8]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint8V(v, e) + } + case map[uint8]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Uint64V(v, e) + } + case map[uint8]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8IntV(v, e) + } + case map[uint8]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Int32V(v, e) + } + case map[uint8]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8Float64V(v, e) + } + case map[uint8]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint8BoolV(v, e) + } + case map[uint64]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntfV(v, e) + } + case map[uint64]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64StringV(v, e) + } + case map[uint64][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BytesV(v, e) + } + case map[uint64]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint8V(v, e) + } + case map[uint64]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Uint64V(v, e) + } + case map[uint64]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64IntV(v, e) + } + case map[uint64]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Int32V(v, e) + } + case map[uint64]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64Float64V(v, e) + } + case map[uint64]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapUint64BoolV(v, e) + } + case map[int]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntfV(v, e) + } + case map[int]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntStringV(v, e) + } + case map[int][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBytesV(v, e) + } + case map[int]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint8V(v, e) + } + case map[int]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntUint64V(v, e) + } + case map[int]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntIntV(v, e) + } + case map[int]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntInt32V(v, e) + } + case map[int]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntFloat64V(v, e) + } + case map[int]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapIntBoolV(v, e) + } + case map[int32]interface{}: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntfV(v, e) + } + case map[int32]string: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32StringV(v, e) + } + case map[int32][]byte: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BytesV(v, e) + } + case map[int32]uint8: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint8V(v, e) + } + case map[int32]uint64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Uint64V(v, e) + } + case map[int32]int: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32IntV(v, e) + } + case map[int32]int32: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Int32V(v, e) + } + case map[int32]float64: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32Float64V(v, e) + } + case map[int32]bool: + if v == nil { + e.e.writeNilMap() + } else { + ft.EncMapInt32BoolV(v, e) + } + default: + _ = v + return false + } + return true +} + +func (e *encoderSimpleIO) fastpathEncSliceIntfR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleIO + var v []interface{} + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]interface{}) + } + if f.ti.mbs { + ft.EncAsMapSliceIntfV(v, e) + return + } + ft.EncSliceIntfV(v, e) +} +func (fastpathETSimpleIO) EncSliceIntfV(v []interface{}, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleIO) EncAsMapSliceIntfV(v []interface{}, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + if !e.encodeBuiltin(v[j]) { + e.encodeR(reflect.ValueOf(v[j])) + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleIO) fastpathEncSliceStringR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleIO + var v []string + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]string) + } + if f.ti.mbs { + ft.EncAsMapSliceStringV(v, e) + return + } + ft.EncSliceStringV(v, e) +} +func (fastpathETSimpleIO) EncSliceStringV(v []string, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleIO) EncAsMapSliceStringV(v []string, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeString(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleIO) fastpathEncSliceBytesR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleIO + var v [][]byte + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([][]byte) + } + if f.ti.mbs { + ft.EncAsMapSliceBytesV(v, e) + return + } + ft.EncSliceBytesV(v, e) +} +func (fastpathETSimpleIO) EncSliceBytesV(v [][]byte, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleIO) EncAsMapSliceBytesV(v [][]byte, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBytes(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleIO) fastpathEncSliceFloat32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleIO + var v []float32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float32) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat32V(v, e) + return + } + ft.EncSliceFloat32V(v, e) +} +func (fastpathETSimpleIO) EncSliceFloat32V(v []float32, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleIO) EncAsMapSliceFloat32V(v []float32, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat32(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleIO) fastpathEncSliceFloat64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleIO + var v []float64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]float64) + } + if f.ti.mbs { + ft.EncAsMapSliceFloat64V(v, e) + return + } + ft.EncSliceFloat64V(v, e) +} +func (fastpathETSimpleIO) EncSliceFloat64V(v []float64, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleIO) EncAsMapSliceFloat64V(v []float64, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeFloat64(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleIO) fastpathEncSliceUint8R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleIO + var v []uint8 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint8) + } + if f.ti.mbs { + ft.EncAsMapSliceUint8V(v, e) + return + } + ft.EncSliceUint8V(v, e) +} +func (fastpathETSimpleIO) EncSliceUint8V(v []uint8, e *encoderSimpleIO) { + e.e.EncodeStringBytesRaw(v) +} +func (fastpathETSimpleIO) EncAsMapSliceUint8V(v []uint8, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(uint64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleIO) fastpathEncSliceUint64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleIO + var v []uint64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]uint64) + } + if f.ti.mbs { + ft.EncAsMapSliceUint64V(v, e) + return + } + ft.EncSliceUint64V(v, e) +} +func (fastpathETSimpleIO) EncSliceUint64V(v []uint64, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleIO) EncAsMapSliceUint64V(v []uint64, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeUint(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleIO) fastpathEncSliceIntR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleIO + var v []int + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int) + } + if f.ti.mbs { + ft.EncAsMapSliceIntV(v, e) + return + } + ft.EncSliceIntV(v, e) +} +func (fastpathETSimpleIO) EncSliceIntV(v []int, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleIO) EncAsMapSliceIntV(v []int, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleIO) fastpathEncSliceInt32R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleIO + var v []int32 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int32) + } + if f.ti.mbs { + ft.EncAsMapSliceInt32V(v, e) + return + } + ft.EncSliceInt32V(v, e) +} +func (fastpathETSimpleIO) EncSliceInt32V(v []int32, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleIO) EncAsMapSliceInt32V(v []int32, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(int64(v[j])) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleIO) fastpathEncSliceInt64R(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleIO + var v []int64 + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]int64) + } + if f.ti.mbs { + ft.EncAsMapSliceInt64V(v, e) + return + } + ft.EncSliceInt64V(v, e) +} +func (fastpathETSimpleIO) EncSliceInt64V(v []int64, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleIO) EncAsMapSliceInt64V(v []int64, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeInt(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleIO) fastpathEncSliceBoolR(f *encFnInfo, rv reflect.Value) { + var ft fastpathETSimpleIO + var v []bool + if rv.Kind() == reflect.Array { + rvGetSlice4Array(rv, &v) + } else { + v = rv2i(rv).([]bool) + } + if f.ti.mbs { + ft.EncAsMapSliceBoolV(v, e) + return + } + ft.EncSliceBoolV(v, e) +} +func (fastpathETSimpleIO) EncSliceBoolV(v []bool, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(v)) + for j := range v { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteArrayEnd() +} +func (fastpathETSimpleIO) EncAsMapSliceBoolV(v []bool, e *encoderSimpleIO) { + if len(v) == 0 { + e.c = 0 + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(len(v)) + e.mapStart(len(v) >> 1) + for j := range v { + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + } else { + e.mapElemValue() + } + e.e.EncodeBool(v[j]) + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleIO) fastpathEncMapStringIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapStringIntfV(rv2i(rv).(map[string]interface{}), e) +} +func (fastpathETSimpleIO) EncMapStringIntfV(v map[string]interface{}, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapStringStringR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapStringStringV(rv2i(rv).(map[string]string), e) +} +func (fastpathETSimpleIO) EncMapStringStringV(v map[string]string, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapStringBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapStringBytesV(rv2i(rv).(map[string][]byte), e) +} +func (fastpathETSimpleIO) EncMapStringBytesV(v map[string][]byte, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapStringUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapStringUint8V(rv2i(rv).(map[string]uint8), e) +} +func (fastpathETSimpleIO) EncMapStringUint8V(v map[string]uint8, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapStringUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapStringUint64V(rv2i(rv).(map[string]uint64), e) +} +func (fastpathETSimpleIO) EncMapStringUint64V(v map[string]uint64, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapStringIntR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapStringIntV(rv2i(rv).(map[string]int), e) +} +func (fastpathETSimpleIO) EncMapStringIntV(v map[string]int, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapStringInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapStringInt32V(rv2i(rv).(map[string]int32), e) +} +func (fastpathETSimpleIO) EncMapStringInt32V(v map[string]int32, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapStringFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapStringFloat64V(rv2i(rv).(map[string]float64), e) +} +func (fastpathETSimpleIO) EncMapStringFloat64V(v map[string]float64, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapStringBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapStringBoolV(rv2i(rv).(map[string]bool), e) +} +func (fastpathETSimpleIO) EncMapStringBoolV(v map[string]bool, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]string, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeString(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint8IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), e) +} +func (fastpathETSimpleIO) EncMapUint8IntfV(v map[uint8]interface{}, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint8StringR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint8StringV(rv2i(rv).(map[uint8]string), e) +} +func (fastpathETSimpleIO) EncMapUint8StringV(v map[uint8]string, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint8BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint8BytesV(rv2i(rv).(map[uint8][]byte), e) +} +func (fastpathETSimpleIO) EncMapUint8BytesV(v map[uint8][]byte, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint8Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), e) +} +func (fastpathETSimpleIO) EncMapUint8Uint8V(v map[uint8]uint8, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint8Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), e) +} +func (fastpathETSimpleIO) EncMapUint8Uint64V(v map[uint8]uint64, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint8IntR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint8IntV(rv2i(rv).(map[uint8]int), e) +} +func (fastpathETSimpleIO) EncMapUint8IntV(v map[uint8]int, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint8Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint8Int32V(rv2i(rv).(map[uint8]int32), e) +} +func (fastpathETSimpleIO) EncMapUint8Int32V(v map[uint8]int32, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint8Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint8Float64V(rv2i(rv).(map[uint8]float64), e) +} +func (fastpathETSimpleIO) EncMapUint8Float64V(v map[uint8]float64, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint8BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint8BoolV(rv2i(rv).(map[uint8]bool), e) +} +func (fastpathETSimpleIO) EncMapUint8BoolV(v map[uint8]bool, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint8, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(uint64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint64IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), e) +} +func (fastpathETSimpleIO) EncMapUint64IntfV(v map[uint64]interface{}, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint64StringR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint64StringV(rv2i(rv).(map[uint64]string), e) +} +func (fastpathETSimpleIO) EncMapUint64StringV(v map[uint64]string, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint64BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint64BytesV(rv2i(rv).(map[uint64][]byte), e) +} +func (fastpathETSimpleIO) EncMapUint64BytesV(v map[uint64][]byte, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint64Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), e) +} +func (fastpathETSimpleIO) EncMapUint64Uint8V(v map[uint64]uint8, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint64Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), e) +} +func (fastpathETSimpleIO) EncMapUint64Uint64V(v map[uint64]uint64, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint64IntR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint64IntV(rv2i(rv).(map[uint64]int), e) +} +func (fastpathETSimpleIO) EncMapUint64IntV(v map[uint64]int, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint64Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint64Int32V(rv2i(rv).(map[uint64]int32), e) +} +func (fastpathETSimpleIO) EncMapUint64Int32V(v map[uint64]int32, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint64Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint64Float64V(rv2i(rv).(map[uint64]float64), e) +} +func (fastpathETSimpleIO) EncMapUint64Float64V(v map[uint64]float64, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapUint64BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapUint64BoolV(rv2i(rv).(map[uint64]bool), e) +} +func (fastpathETSimpleIO) EncMapUint64BoolV(v map[uint64]bool, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]uint64, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeUint(k2) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapIntIntfR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapIntIntfV(rv2i(rv).(map[int]interface{}), e) +} +func (fastpathETSimpleIO) EncMapIntIntfV(v map[int]interface{}, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapIntStringR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapIntStringV(rv2i(rv).(map[int]string), e) +} +func (fastpathETSimpleIO) EncMapIntStringV(v map[int]string, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapIntBytesR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapIntBytesV(rv2i(rv).(map[int][]byte), e) +} +func (fastpathETSimpleIO) EncMapIntBytesV(v map[int][]byte, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapIntUint8R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapIntUint8V(rv2i(rv).(map[int]uint8), e) +} +func (fastpathETSimpleIO) EncMapIntUint8V(v map[int]uint8, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapIntUint64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapIntUint64V(rv2i(rv).(map[int]uint64), e) +} +func (fastpathETSimpleIO) EncMapIntUint64V(v map[int]uint64, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapIntIntR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapIntIntV(rv2i(rv).(map[int]int), e) +} +func (fastpathETSimpleIO) EncMapIntIntV(v map[int]int, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapIntInt32R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapIntInt32V(rv2i(rv).(map[int]int32), e) +} +func (fastpathETSimpleIO) EncMapIntInt32V(v map[int]int32, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapIntFloat64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapIntFloat64V(rv2i(rv).(map[int]float64), e) +} +func (fastpathETSimpleIO) EncMapIntFloat64V(v map[int]float64, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapIntBoolR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapIntBoolV(rv2i(rv).(map[int]bool), e) +} +func (fastpathETSimpleIO) EncMapIntBoolV(v map[int]bool, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapInt32IntfR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapInt32IntfV(rv2i(rv).(map[int32]interface{}), e) +} +func (fastpathETSimpleIO) EncMapInt32IntfV(v map[int32]interface{}, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v[k2]) { + e.encodeR(reflect.ValueOf(v[k2])) + } + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + if !e.encodeBuiltin(v2) { + e.encodeR(reflect.ValueOf(v2)) + } + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapInt32StringR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapInt32StringV(rv2i(rv).(map[int32]string), e) +} +func (fastpathETSimpleIO) EncMapInt32StringV(v map[int32]string, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeString(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapInt32BytesR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapInt32BytesV(rv2i(rv).(map[int32][]byte), e) +} +func (fastpathETSimpleIO) EncMapInt32BytesV(v map[int32][]byte, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBytes(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapInt32Uint8R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapInt32Uint8V(rv2i(rv).(map[int32]uint8), e) +} +func (fastpathETSimpleIO) EncMapInt32Uint8V(v map[int32]uint8, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(uint64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapInt32Uint64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapInt32Uint64V(rv2i(rv).(map[int32]uint64), e) +} +func (fastpathETSimpleIO) EncMapInt32Uint64V(v map[int32]uint64, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeUint(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapInt32IntR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapInt32IntV(rv2i(rv).(map[int32]int), e) +} +func (fastpathETSimpleIO) EncMapInt32IntV(v map[int32]int, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapInt32Int32R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapInt32Int32V(rv2i(rv).(map[int32]int32), e) +} +func (fastpathETSimpleIO) EncMapInt32Int32V(v map[int32]int32, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v[k2])) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeInt(int64(v2)) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapInt32Float64R(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapInt32Float64V(rv2i(rv).(map[int32]float64), e) +} +func (fastpathETSimpleIO) EncMapInt32Float64V(v map[int32]float64, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeFloat64(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} +func (e *encoderSimpleIO) fastpathEncMapInt32BoolR(f *encFnInfo, rv reflect.Value) { + fastpathETSimpleIO{}.EncMapInt32BoolV(rv2i(rv).(map[int32]bool), e) +} +func (fastpathETSimpleIO) EncMapInt32BoolV(v map[int32]bool, e *encoderSimpleIO) { + if len(v) == 0 { + e.e.WriteMapEmpty() + return + } + var i uint + e.mapStart(len(v)) + if e.h.Canonical { + v2 := make([]int32, len(v)) + for k := range v { + v2[i] = k + i++ + } + slices.Sort(v2) + for i, k2 := range v2 { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v[k2]) + } + } else { + i = 0 + for k2, v2 := range v { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeInt(int64(k2)) + e.mapElemValue() + e.e.EncodeBool(v2) + i++ + } + } + e.c = 0 + e.e.WriteMapEnd() +} + +func (helperDecDriverSimpleIO) fastpathDecodeTypeSwitch(iv interface{}, d *decoderSimpleIO) bool { + var ft fastpathDTSimpleIO + var changed bool + var containerLen int + switch v := iv.(type) { + case []interface{}: + ft.DecSliceIntfN(v, d) + case *[]interface{}: + var v2 []interface{} + if v2, changed = ft.DecSliceIntfY(*v, d); changed { + *v = v2 + } + case []string: + ft.DecSliceStringN(v, d) + case *[]string: + var v2 []string + if v2, changed = ft.DecSliceStringY(*v, d); changed { + *v = v2 + } + case [][]byte: + ft.DecSliceBytesN(v, d) + case *[][]byte: + var v2 [][]byte + if v2, changed = ft.DecSliceBytesY(*v, d); changed { + *v = v2 + } + case []float32: + ft.DecSliceFloat32N(v, d) + case *[]float32: + var v2 []float32 + if v2, changed = ft.DecSliceFloat32Y(*v, d); changed { + *v = v2 + } + case []float64: + ft.DecSliceFloat64N(v, d) + case *[]float64: + var v2 []float64 + if v2, changed = ft.DecSliceFloat64Y(*v, d); changed { + *v = v2 + } + case []uint8: + ft.DecSliceUint8N(v, d) + case *[]uint8: + var v2 []uint8 + if v2, changed = ft.DecSliceUint8Y(*v, d); changed { + *v = v2 + } + case []uint64: + ft.DecSliceUint64N(v, d) + case *[]uint64: + var v2 []uint64 + if v2, changed = ft.DecSliceUint64Y(*v, d); changed { + *v = v2 + } + case []int: + ft.DecSliceIntN(v, d) + case *[]int: + var v2 []int + if v2, changed = ft.DecSliceIntY(*v, d); changed { + *v = v2 + } + case []int32: + ft.DecSliceInt32N(v, d) + case *[]int32: + var v2 []int32 + if v2, changed = ft.DecSliceInt32Y(*v, d); changed { + *v = v2 + } + case []int64: + ft.DecSliceInt64N(v, d) + case *[]int64: + var v2 []int64 + if v2, changed = ft.DecSliceInt64Y(*v, d); changed { + *v = v2 + } + case []bool: + ft.DecSliceBoolN(v, d) + case *[]bool: + var v2 []bool + if v2, changed = ft.DecSliceBoolY(*v, d); changed { + *v = v2 + } + case map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapStringBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[string]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint8BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint8]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapUint64BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[uint64]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntStringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntUint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntIntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntInt32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntFloat64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapIntBoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntfL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]interface{}: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32StringL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]string: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BytesL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32][]byte: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint8L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint8: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Uint64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]uint64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32IntL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Int32L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]int32: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32Float64L(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]float64: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*v, containerLen, d) + } + d.mapEnd() + } + case map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen != containerLenNil { + if containerLen != 0 { + ft.DecMapInt32BoolL(v, containerLen, d) + } + d.mapEnd() + } + case *map[int32]bool: + if containerLen = d.mapStart(d.d.ReadMapStart()); containerLen == containerLenNil { + *v = nil + } else { + if *v == nil { + *v = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*v, containerLen, d) + } + d.mapEnd() + } + default: + _ = v + return false + } + return true +} + +func (d *decoderSimpleIO) fastpathDecSliceIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]interface{}) + if vv, changed := ft.DecSliceIntfY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []interface{} + rvGetSlice4Array(rv, &v) + ft.DecSliceIntfN(v, d) + default: + ft.DecSliceIntfN(rv2i(rv).([]interface{}), d) + } +} +func (fastpathDTSimpleIO) DecSliceIntfY(v []interface{}, d *decoderSimpleIO) (v2 []interface{}, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []interface{}) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]interface{}, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + d.decode(&v[uint(j)]) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]interface{}{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleIO) DecSliceIntfN(v []interface{}, d *decoderSimpleIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + d.decode(&v[uint(j)]) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleIO) fastpathDecSliceStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]string) + if vv, changed := ft.DecSliceStringY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []string + rvGetSlice4Array(rv, &v) + ft.DecSliceStringN(v, d) + default: + ft.DecSliceStringN(rv2i(rv).([]string), d) + } +} +func (fastpathDTSimpleIO) DecSliceStringY(v []string, d *decoderSimpleIO) (v2 []string, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []string) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 16)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]string, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, "")) + } + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]string{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleIO) DecSliceStringN(v []string, d *decoderSimpleIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.detach2Str(d.d.DecodeStringAsBytes()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleIO) fastpathDecSliceBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[][]byte) + if vv, changed := ft.DecSliceBytesY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v [][]byte + rvGetSlice4Array(rv, &v) + ft.DecSliceBytesN(v, d) + default: + ft.DecSliceBytesN(rv2i(rv).([][]byte), d) + } +} +func (fastpathDTSimpleIO) DecSliceBytesY(v [][]byte, d *decoderSimpleIO) (v2 [][]byte, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst [][]byte) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 24)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([][]byte, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, nil)) + } + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([][]byte{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleIO) DecSliceBytesN(v [][]byte, d *decoderSimpleIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = bytesOKdbi(d.decodeBytesInto(v[uint(j)], false)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleIO) fastpathDecSliceFloat32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float32) + if vv, changed := ft.DecSliceFloat32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float32 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat32N(v, d) + default: + ft.DecSliceFloat32N(rv2i(rv).([]float32), d) + } +} +func (fastpathDTSimpleIO) DecSliceFloat32Y(v []float32, d *decoderSimpleIO) (v2 []float32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = float32(d.d.DecodeFloat32()) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleIO) DecSliceFloat32N(v []float32, d *decoderSimpleIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = float32(d.d.DecodeFloat32()) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleIO) fastpathDecSliceFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]float64) + if vv, changed := ft.DecSliceFloat64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []float64 + rvGetSlice4Array(rv, &v) + ft.DecSliceFloat64N(v, d) + default: + ft.DecSliceFloat64N(rv2i(rv).([]float64), d) + } +} +func (fastpathDTSimpleIO) DecSliceFloat64Y(v []float64, d *decoderSimpleIO) (v2 []float64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []float64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]float64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeFloat64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]float64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleIO) DecSliceFloat64N(v []float64, d *decoderSimpleIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeFloat64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleIO) fastpathDecSliceUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint8) + if vv, changed := ft.DecSliceUint8Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint8 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint8N(v, d) + default: + ft.DecSliceUint8N(rv2i(rv).([]uint8), d) + } +} +func (fastpathDTSimpleIO) DecSliceUint8Y(v []uint8, d *decoderSimpleIO) (v2 []uint8, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + if ctyp != valueTypeMap { + var dbi dBytesIntoState + v2, dbi = d.decodeBytesInto(v[:len(v):len(v)], false) + return v2, dbi != dBytesIntoParamOut + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint8) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint8, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint8{}) + } + d.mapEnd() + return v, changed +} +func (fastpathDTSimpleIO) DecSliceUint8N(v []uint8, d *decoderSimpleIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + if ctyp != valueTypeMap { + d.decodeBytesInto(v[:len(v):len(v)], true) + return + } + containerLenS := d.mapStart(d.d.ReadMapStart()) * 2 + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + d.mapEnd() +} + +func (d *decoderSimpleIO) fastpathDecSliceUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]uint64) + if vv, changed := ft.DecSliceUint64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []uint64 + rvGetSlice4Array(rv, &v) + ft.DecSliceUint64N(v, d) + default: + ft.DecSliceUint64N(rv2i(rv).([]uint64), d) + } +} +func (fastpathDTSimpleIO) DecSliceUint64Y(v []uint64, d *decoderSimpleIO) (v2 []uint64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []uint64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]uint64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeUint64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]uint64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleIO) DecSliceUint64N(v []uint64, d *decoderSimpleIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeUint64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleIO) fastpathDecSliceIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int) + if vv, changed := ft.DecSliceIntY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int + rvGetSlice4Array(rv, &v) + ft.DecSliceIntN(v, d) + default: + ft.DecSliceIntN(rv2i(rv).([]int), d) + } +} +func (fastpathDTSimpleIO) DecSliceIntY(v []int, d *decoderSimpleIO) (v2 []int, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleIO) DecSliceIntN(v []int, d *decoderSimpleIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleIO) fastpathDecSliceInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int32) + if vv, changed := ft.DecSliceInt32Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int32 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt32N(v, d) + default: + ft.DecSliceInt32N(rv2i(rv).([]int32), d) + } +} +func (fastpathDTSimpleIO) DecSliceInt32Y(v []int32, d *decoderSimpleIO) (v2 []int32, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int32) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 4)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int32, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int32{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleIO) DecSliceInt32N(v []int32, d *decoderSimpleIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleIO) fastpathDecSliceInt64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]int64) + if vv, changed := ft.DecSliceInt64Y(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []int64 + rvGetSlice4Array(rv, &v) + ft.DecSliceInt64N(v, d) + default: + ft.DecSliceInt64N(rv2i(rv).([]int64), d) + } +} +func (fastpathDTSimpleIO) DecSliceInt64Y(v []int64, d *decoderSimpleIO) (v2 []int64, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []int64) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 8)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]int64, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, 0)) + } + v[uint(j)] = d.d.DecodeInt64() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]int64{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleIO) DecSliceInt64N(v []int64, d *decoderSimpleIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeInt64() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleIO) fastpathDecSliceBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + switch rv.Kind() { + case reflect.Ptr: + v := rv2i(rv).(*[]bool) + if vv, changed := ft.DecSliceBoolY(*v, d); changed { + *v = vv + } + case reflect.Array: + var v []bool + rvGetSlice4Array(rv, &v) + ft.DecSliceBoolN(v, d) + default: + ft.DecSliceBoolN(rv2i(rv).([]bool), d) + } +} +func (fastpathDTSimpleIO) DecSliceBoolY(v []bool, d *decoderSimpleIO) (v2 []bool, changed bool) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return nil, v != nil + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + var j int + fnv := func(dst []bool) { v, changed = dst, true } + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if containerLenS == len(v) { + } else if containerLenS < 0 || containerLenS > cap(v) { + if xlen := int(decInferLen(containerLenS, d.maxInitLen(), 1)); xlen <= cap(v) { + fnv(v[:uint(xlen)]) + } else { + v2 = make([]bool, uint(xlen)) + copy(v2, v) + fnv(v2) + } + } else { + fnv(v[:containerLenS]) + } + } + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j >= len(v) { + fnv(append(v, false)) + } + v[uint(j)] = d.d.DecodeBool() + } + if j < len(v) { + fnv(v[:uint(j)]) + } else if j == 0 && v == nil { + fnv([]bool{}) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return v, changed +} +func (fastpathDTSimpleIO) DecSliceBoolN(v []bool, d *decoderSimpleIO) { + ctyp := d.d.ContainerType() + if ctyp == valueTypeNil { + return + } + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + hasLen := containerLenS >= 0 + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if isArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + if j < len(v) { + v[uint(j)] = d.d.DecodeBool() + } else { + d.arrayCannotExpand(len(v), j+1) + d.swallow() + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} +func (d *decoderSimpleIO) fastpathDecMapStringIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]interface{}) + if *vp == nil { + *vp = make(map[string]interface{}, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntfL(rv2i(rv).(map[string]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapStringIntfL(v map[string]interface{}, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderSimpleIO) fastpathDecMapStringStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]string) + if *vp == nil { + *vp = make(map[string]string, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapStringStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringStringL(rv2i(rv).(map[string]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapStringStringL(v map[string]string, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderSimpleIO) fastpathDecMapStringBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string][]byte) + if *vp == nil { + *vp = make(map[string][]byte, decInferLen(containerLen, d.maxInitLen(), 40)) + } + if containerLen != 0 { + ft.DecMapStringBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBytesL(rv2i(rv).(map[string][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapStringBytesL(v map[string][]byte, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderSimpleIO) fastpathDecMapStringUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint8) + if *vp == nil { + *vp = make(map[string]uint8, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint8L(rv2i(rv).(map[string]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapStringUint8L(v map[string]uint8, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderSimpleIO) fastpathDecMapStringUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]uint64) + if *vp == nil { + *vp = make(map[string]uint64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringUint64L(rv2i(rv).(map[string]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapStringUint64L(v map[string]uint64, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderSimpleIO) fastpathDecMapStringIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int) + if *vp == nil { + *vp = make(map[string]int, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringIntL(rv2i(rv).(map[string]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapStringIntL(v map[string]int, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderSimpleIO) fastpathDecMapStringInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]int32) + if *vp == nil { + *vp = make(map[string]int32, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapStringInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringInt32L(rv2i(rv).(map[string]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapStringInt32L(v map[string]int32, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderSimpleIO) fastpathDecMapStringFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]float64) + if *vp == nil { + *vp = make(map[string]float64, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapStringFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringFloat64L(rv2i(rv).(map[string]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapStringFloat64L(v map[string]float64, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderSimpleIO) fastpathDecMapStringBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[string]bool) + if *vp == nil { + *vp = make(map[string]bool, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapStringBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapStringBoolL(rv2i(rv).(map[string]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapStringBoolL(v map[string]bool, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[string]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.detach2Str(d.d.DecodeStringAsBytes()) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderSimpleIO) fastpathDecMapUint8IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]interface{}) + if *vp == nil { + *vp = make(map[uint8]interface{}, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntfL(rv2i(rv).(map[uint8]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint8IntfL(v map[uint8]interface{}, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderSimpleIO) fastpathDecMapUint8StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]string) + if *vp == nil { + *vp = make(map[uint8]string, decInferLen(containerLen, d.maxInitLen(), 17)) + } + if containerLen != 0 { + ft.DecMapUint8StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8StringL(rv2i(rv).(map[uint8]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint8StringL(v map[uint8]string, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderSimpleIO) fastpathDecMapUint8BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8][]byte) + if *vp == nil { + *vp = make(map[uint8][]byte, decInferLen(containerLen, d.maxInitLen(), 25)) + } + if containerLen != 0 { + ft.DecMapUint8BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BytesL(rv2i(rv).(map[uint8][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint8BytesL(v map[uint8][]byte, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderSimpleIO) fastpathDecMapUint8Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint8) + if *vp == nil { + *vp = make(map[uint8]uint8, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint8L(rv2i(rv).(map[uint8]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint8Uint8L(v map[uint8]uint8, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderSimpleIO) fastpathDecMapUint8Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]uint64) + if *vp == nil { + *vp = make(map[uint8]uint64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Uint64L(rv2i(rv).(map[uint8]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint8Uint64L(v map[uint8]uint64, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderSimpleIO) fastpathDecMapUint8IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int) + if *vp == nil { + *vp = make(map[uint8]int, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8IntL(rv2i(rv).(map[uint8]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint8IntL(v map[uint8]int, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderSimpleIO) fastpathDecMapUint8Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]int32) + if *vp == nil { + *vp = make(map[uint8]int32, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapUint8Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Int32L(rv2i(rv).(map[uint8]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint8Int32L(v map[uint8]int32, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderSimpleIO) fastpathDecMapUint8Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]float64) + if *vp == nil { + *vp = make(map[uint8]float64, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint8Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8Float64L(rv2i(rv).(map[uint8]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint8Float64L(v map[uint8]float64, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderSimpleIO) fastpathDecMapUint8BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint8]bool) + if *vp == nil { + *vp = make(map[uint8]bool, decInferLen(containerLen, d.maxInitLen(), 2)) + } + if containerLen != 0 { + ft.DecMapUint8BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint8BoolL(rv2i(rv).(map[uint8]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint8BoolL(v map[uint8]bool, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint8]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderSimpleIO) fastpathDecMapUint64IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]interface{}) + if *vp == nil { + *vp = make(map[uint64]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntfL(rv2i(rv).(map[uint64]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint64IntfL(v map[uint64]interface{}, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderSimpleIO) fastpathDecMapUint64StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]string) + if *vp == nil { + *vp = make(map[uint64]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapUint64StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64StringL(rv2i(rv).(map[uint64]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint64StringL(v map[uint64]string, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderSimpleIO) fastpathDecMapUint64BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64][]byte) + if *vp == nil { + *vp = make(map[uint64][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapUint64BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BytesL(rv2i(rv).(map[uint64][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint64BytesL(v map[uint64][]byte, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderSimpleIO) fastpathDecMapUint64Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint8) + if *vp == nil { + *vp = make(map[uint64]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint8L(rv2i(rv).(map[uint64]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint64Uint8L(v map[uint64]uint8, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderSimpleIO) fastpathDecMapUint64Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]uint64) + if *vp == nil { + *vp = make(map[uint64]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Uint64L(rv2i(rv).(map[uint64]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint64Uint64L(v map[uint64]uint64, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderSimpleIO) fastpathDecMapUint64IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int) + if *vp == nil { + *vp = make(map[uint64]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64IntL(rv2i(rv).(map[uint64]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint64IntL(v map[uint64]int, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderSimpleIO) fastpathDecMapUint64Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]int32) + if *vp == nil { + *vp = make(map[uint64]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapUint64Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Int32L(rv2i(rv).(map[uint64]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint64Int32L(v map[uint64]int32, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderSimpleIO) fastpathDecMapUint64Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]float64) + if *vp == nil { + *vp = make(map[uint64]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapUint64Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64Float64L(rv2i(rv).(map[uint64]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint64Float64L(v map[uint64]float64, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderSimpleIO) fastpathDecMapUint64BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[uint64]bool) + if *vp == nil { + *vp = make(map[uint64]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapUint64BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapUint64BoolL(rv2i(rv).(map[uint64]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapUint64BoolL(v map[uint64]bool, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[uint64]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := d.d.DecodeUint64() + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderSimpleIO) fastpathDecMapIntIntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]interface{}) + if *vp == nil { + *vp = make(map[int]interface{}, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntIntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntfL(rv2i(rv).(map[int]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapIntIntfL(v map[int]interface{}, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderSimpleIO) fastpathDecMapIntStringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]string) + if *vp == nil { + *vp = make(map[int]string, decInferLen(containerLen, d.maxInitLen(), 24)) + } + if containerLen != 0 { + ft.DecMapIntStringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntStringL(rv2i(rv).(map[int]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapIntStringL(v map[int]string, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderSimpleIO) fastpathDecMapIntBytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int][]byte) + if *vp == nil { + *vp = make(map[int][]byte, decInferLen(containerLen, d.maxInitLen(), 32)) + } + if containerLen != 0 { + ft.DecMapIntBytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBytesL(rv2i(rv).(map[int][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapIntBytesL(v map[int][]byte, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderSimpleIO) fastpathDecMapIntUint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint8) + if *vp == nil { + *vp = make(map[int]uint8, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntUint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint8L(rv2i(rv).(map[int]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapIntUint8L(v map[int]uint8, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderSimpleIO) fastpathDecMapIntUint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]uint64) + if *vp == nil { + *vp = make(map[int]uint64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntUint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntUint64L(rv2i(rv).(map[int]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapIntUint64L(v map[int]uint64, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderSimpleIO) fastpathDecMapIntIntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int) + if *vp == nil { + *vp = make(map[int]int, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntIntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntIntL(rv2i(rv).(map[int]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapIntIntL(v map[int]int, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderSimpleIO) fastpathDecMapIntInt32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]int32) + if *vp == nil { + *vp = make(map[int]int32, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapIntInt32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntInt32L(rv2i(rv).(map[int]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapIntInt32L(v map[int]int32, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderSimpleIO) fastpathDecMapIntFloat64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]float64) + if *vp == nil { + *vp = make(map[int]float64, decInferLen(containerLen, d.maxInitLen(), 16)) + } + if containerLen != 0 { + ft.DecMapIntFloat64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntFloat64L(rv2i(rv).(map[int]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapIntFloat64L(v map[int]float64, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderSimpleIO) fastpathDecMapIntBoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int]bool) + if *vp == nil { + *vp = make(map[int]bool, decInferLen(containerLen, d.maxInitLen(), 9)) + } + if containerLen != 0 { + ft.DecMapIntBoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapIntBoolL(rv2i(rv).(map[int]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapIntBoolL(v map[int]bool, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} +func (d *decoderSimpleIO) fastpathDecMapInt32IntfR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]interface{}) + if *vp == nil { + *vp = make(map[int32]interface{}, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32IntfL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntfL(rv2i(rv).(map[int32]interface{}), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapInt32IntfL(v map[int32]interface{}, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]interface{} given stream length: ", int64(containerLen)) + } + var mv interface{} + mapGet := !d.h.MapValueReset && !d.h.InterfaceReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + d.decode(&mv) + v[mk] = mv + } +} +func (d *decoderSimpleIO) fastpathDecMapInt32StringR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]string) + if *vp == nil { + *vp = make(map[int32]string, decInferLen(containerLen, d.maxInitLen(), 20)) + } + if containerLen != 0 { + ft.DecMapInt32StringL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32StringL(rv2i(rv).(map[int32]string), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapInt32StringL(v map[int32]string, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]string given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.detach2Str(d.d.DecodeStringAsBytes()) + } +} +func (d *decoderSimpleIO) fastpathDecMapInt32BytesR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32][]byte) + if *vp == nil { + *vp = make(map[int32][]byte, decInferLen(containerLen, d.maxInitLen(), 28)) + } + if containerLen != 0 { + ft.DecMapInt32BytesL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BytesL(rv2i(rv).(map[int32][]byte), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapInt32BytesL(v map[int32][]byte, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32][]byte given stream length: ", int64(containerLen)) + } + var mv []byte + mapGet := !d.h.MapValueReset + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + if mapGet { + mv = v[mk] + } else { + mv = nil + } + v[mk], _ = d.decodeBytesInto(mv, false) + } +} +func (d *decoderSimpleIO) fastpathDecMapInt32Uint8R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint8) + if *vp == nil { + *vp = make(map[int32]uint8, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32Uint8L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint8L(rv2i(rv).(map[int32]uint8), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapInt32Uint8L(v map[int32]uint8, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint8 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + } +} +func (d *decoderSimpleIO) fastpathDecMapInt32Uint64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]uint64) + if *vp == nil { + *vp = make(map[int32]uint64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Uint64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Uint64L(rv2i(rv).(map[int32]uint64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapInt32Uint64L(v map[int32]uint64, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]uint64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeUint64() + } +} +func (d *decoderSimpleIO) fastpathDecMapInt32IntR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int) + if *vp == nil { + *vp = make(map[int32]int, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32IntL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32IntL(rv2i(rv).(map[int32]int), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapInt32IntL(v map[int32]int, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + } +} +func (d *decoderSimpleIO) fastpathDecMapInt32Int32R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]int32) + if *vp == nil { + *vp = make(map[int32]int32, decInferLen(containerLen, d.maxInitLen(), 8)) + } + if containerLen != 0 { + ft.DecMapInt32Int32L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Int32L(rv2i(rv).(map[int32]int32), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapInt32Int32L(v map[int32]int32, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]int32 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + } +} +func (d *decoderSimpleIO) fastpathDecMapInt32Float64R(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]float64) + if *vp == nil { + *vp = make(map[int32]float64, decInferLen(containerLen, d.maxInitLen(), 12)) + } + if containerLen != 0 { + ft.DecMapInt32Float64L(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32Float64L(rv2i(rv).(map[int32]float64), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapInt32Float64L(v map[int32]float64, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]float64 given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeFloat64() + } +} +func (d *decoderSimpleIO) fastpathDecMapInt32BoolR(f *decFnInfo, rv reflect.Value) { + var ft fastpathDTSimpleIO + containerLen := d.mapStart(d.d.ReadMapStart()) + if rv.Kind() == reflect.Ptr { + vp, _ := rv2i(rv).(*map[int32]bool) + if *vp == nil { + *vp = make(map[int32]bool, decInferLen(containerLen, d.maxInitLen(), 5)) + } + if containerLen != 0 { + ft.DecMapInt32BoolL(*vp, containerLen, d) + } + } else if containerLen != 0 { + ft.DecMapInt32BoolL(rv2i(rv).(map[int32]bool), containerLen, d) + } + d.mapEnd() +} +func (fastpathDTSimpleIO) DecMapInt32BoolL(v map[int32]bool, containerLen int, d *decoderSimpleIO) { + if v == nil { + halt.errorInt("cannot decode into nil map[int32]bool given stream length: ", int64(containerLen)) + } + hasLen := containerLen >= 0 + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + mk := int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + d.mapElemValue() + v[mk] = d.d.DecodeBool() + } +} diff --git a/vendor/github.com/ugorji/go/codec/simple.go b/vendor/github.com/ugorji/go/codec/simple.go index e8a6371..64df60f 100644 --- a/vendor/github.com/ugorji/go/codec/simple.go +++ b/vendor/github.com/ugorji/go/codec/simple.go @@ -1,111 +1,65 @@ +//go:build notmono || codec.notmono + // Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. // Use of this source code is governed by a MIT license found in the LICENSE file. package codec import ( + "io" "math" "reflect" "time" ) -const ( - _ uint8 = iota - simpleVdNil = 1 - simpleVdFalse = 2 - simpleVdTrue = 3 - simpleVdFloat32 = 4 - simpleVdFloat64 = 5 - - // each lasts for 4 (ie n, n+1, n+2, n+3) - simpleVdPosInt = 8 - simpleVdNegInt = 12 - - simpleVdTime = 24 - - // containers: each lasts for 4 (ie n, n+1, n+2, ... n+7) - simpleVdString = 216 - simpleVdByteArray = 224 - simpleVdArray = 232 - simpleVdMap = 240 - simpleVdExt = 248 -) - -var simpledescNames = map[byte]string{ - simpleVdNil: "null", - simpleVdFalse: "false", - simpleVdTrue: "true", - simpleVdFloat32: "float32", - simpleVdFloat64: "float64", - - simpleVdPosInt: "+int", - simpleVdNegInt: "-int", - - simpleVdTime: "time", - - simpleVdString: "string", - simpleVdByteArray: "binary", - simpleVdArray: "array", - simpleVdMap: "map", - simpleVdExt: "ext", -} - -func simpledesc(bd byte) (s string) { - s = simpledescNames[bd] - if s == "" { - s = "unknown" - } - return -} - -type simpleEncDriver struct { +type simpleEncDriver[T encWriter] struct { noBuiltInTypes encDriverNoopContainerWriter encDriverNoState + encDriverContainerNoTrackerT + encInit2er + h *SimpleHandle + e *encoderBase // b [8]byte - e Encoder -} - -func (e *simpleEncDriver) encoder() *Encoder { - return &e.e + w T } -func (e *simpleEncDriver) EncodeNil() { - e.e.encWr.writen1(simpleVdNil) +func (e *simpleEncDriver[T]) EncodeNil() { + e.w.writen1(simpleVdNil) } -func (e *simpleEncDriver) EncodeBool(b bool) { +func (e *simpleEncDriver[T]) EncodeBool(b bool) { if e.h.EncZeroValuesAsNil && e.e.c != containerMapKey && !b { e.EncodeNil() return } if b { - e.e.encWr.writen1(simpleVdTrue) + e.w.writen1(simpleVdTrue) } else { - e.e.encWr.writen1(simpleVdFalse) + e.w.writen1(simpleVdFalse) } } -func (e *simpleEncDriver) EncodeFloat32(f float32) { +func (e *simpleEncDriver[T]) EncodeFloat32(f float32) { if e.h.EncZeroValuesAsNil && e.e.c != containerMapKey && f == 0.0 { e.EncodeNil() return } - e.e.encWr.writen1(simpleVdFloat32) - bigen.writeUint32(e.e.w(), math.Float32bits(f)) + e.w.writen1(simpleVdFloat32) + e.w.writen4(bigen.PutUint32(math.Float32bits(f))) } -func (e *simpleEncDriver) EncodeFloat64(f float64) { +func (e *simpleEncDriver[T]) EncodeFloat64(f float64) { if e.h.EncZeroValuesAsNil && e.e.c != containerMapKey && f == 0.0 { e.EncodeNil() return } - e.e.encWr.writen1(simpleVdFloat64) - bigen.writeUint64(e.e.w(), math.Float64bits(f)) + e.w.writen1(simpleVdFloat64) + e.w.writen8(bigen.PutUint64(math.Float64bits(f))) } -func (e *simpleEncDriver) EncodeInt(v int64) { +func (e *simpleEncDriver[T]) EncodeInt(v int64) { if v < 0 { e.encUint(uint64(-v), simpleVdNegInt) } else { @@ -113,62 +67,62 @@ func (e *simpleEncDriver) EncodeInt(v int64) { } } -func (e *simpleEncDriver) EncodeUint(v uint64) { +func (e *simpleEncDriver[T]) EncodeUint(v uint64) { e.encUint(v, simpleVdPosInt) } -func (e *simpleEncDriver) encUint(v uint64, bd uint8) { +func (e *simpleEncDriver[T]) encUint(v uint64, bd uint8) { if e.h.EncZeroValuesAsNil && e.e.c != containerMapKey && v == 0 { e.EncodeNil() return } if v <= math.MaxUint8 { - e.e.encWr.writen2(bd, uint8(v)) + e.w.writen2(bd, uint8(v)) } else if v <= math.MaxUint16 { - e.e.encWr.writen1(bd + 1) - bigen.writeUint16(e.e.w(), uint16(v)) + e.w.writen1(bd + 1) + e.w.writen2(bigen.PutUint16(uint16(v))) } else if v <= math.MaxUint32 { - e.e.encWr.writen1(bd + 2) - bigen.writeUint32(e.e.w(), uint32(v)) + e.w.writen1(bd + 2) + e.w.writen4(bigen.PutUint32(uint32(v))) } else { // if v <= math.MaxUint64 { - e.e.encWr.writen1(bd + 3) - bigen.writeUint64(e.e.w(), v) + e.w.writen1(bd + 3) + e.w.writen8(bigen.PutUint64(v)) } } -func (e *simpleEncDriver) encLen(bd byte, length int) { +func (e *simpleEncDriver[T]) encLen(bd byte, length int) { if length == 0 { - e.e.encWr.writen1(bd) + e.w.writen1(bd) } else if length <= math.MaxUint8 { - e.e.encWr.writen1(bd + 1) - e.e.encWr.writen1(uint8(length)) + e.w.writen1(bd + 1) + e.w.writen1(uint8(length)) } else if length <= math.MaxUint16 { - e.e.encWr.writen1(bd + 2) - bigen.writeUint16(e.e.w(), uint16(length)) + e.w.writen1(bd + 2) + e.w.writen2(bigen.PutUint16(uint16(length))) } else if int64(length) <= math.MaxUint32 { - e.e.encWr.writen1(bd + 3) - bigen.writeUint32(e.e.w(), uint32(length)) + e.w.writen1(bd + 3) + e.w.writen4(bigen.PutUint32(uint32(length))) } else { - e.e.encWr.writen1(bd + 4) - bigen.writeUint64(e.e.w(), uint64(length)) + e.w.writen1(bd + 4) + e.w.writen8(bigen.PutUint64(uint64(length))) } } -func (e *simpleEncDriver) EncodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) { +func (e *simpleEncDriver[T]) EncodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) { var bs0, bs []byte if ext == SelfExt { bs0 = e.e.blist.get(1024) bs = bs0 - e.e.sideEncode(v, basetype, &bs) + sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, true) }) } else { bs = ext.WriteExt(v) } if bs == nil { - e.EncodeNil() + e.writeNilBytes() goto END } e.encodeExtPreamble(uint8(xtag), len(bs)) - e.e.encWr.writeb(bs) + e.w.writeb(bs) END: if ext == SelfExt { e.e.blist.put(bs) @@ -178,25 +132,35 @@ END: } } -func (e *simpleEncDriver) EncodeRawExt(re *RawExt) { +func (e *simpleEncDriver[T]) EncodeRawExt(re *RawExt) { e.encodeExtPreamble(uint8(re.Tag), len(re.Data)) - e.e.encWr.writeb(re.Data) + e.w.writeb(re.Data) } -func (e *simpleEncDriver) encodeExtPreamble(xtag byte, length int) { +func (e *simpleEncDriver[T]) encodeExtPreamble(xtag byte, length int) { e.encLen(simpleVdExt, length) - e.e.encWr.writen1(xtag) + e.w.writen1(xtag) } -func (e *simpleEncDriver) WriteArrayStart(length int) { +func (e *simpleEncDriver[T]) WriteArrayStart(length int) { e.encLen(simpleVdArray, length) } -func (e *simpleEncDriver) WriteMapStart(length int) { +func (e *simpleEncDriver[T]) WriteMapStart(length int) { e.encLen(simpleVdMap, length) } -func (e *simpleEncDriver) EncodeString(v string) { +func (e *simpleEncDriver[T]) WriteArrayEmpty() { + // e.WriteArrayStart(0) = e.encLen(simpleVdArray, 0) + e.w.writen1(simpleVdArray) +} + +func (e *simpleEncDriver[T]) WriteMapEmpty() { + // e.WriteMapStart(0) = e.encLen(simpleVdMap, 0) + e.w.writen1(simpleVdMap) +} + +func (e *simpleEncDriver[T]) EncodeString(v string) { if e.h.EncZeroValuesAsNil && e.e.c != containerMapKey && v == "" { e.EncodeNil() return @@ -206,57 +170,88 @@ func (e *simpleEncDriver) EncodeString(v string) { } else { e.encLen(simpleVdString, len(v)) } - e.e.encWr.writestr(v) + e.w.writestr(v) } -func (e *simpleEncDriver) EncodeStringBytesRaw(v []byte) { +func (e *simpleEncDriver[T]) EncodeStringNoEscape4Json(v string) { e.EncodeString(v) } + +func (e *simpleEncDriver[T]) EncodeStringBytesRaw(v []byte) { // if e.h.EncZeroValuesAsNil && e.c != containerMapKey && v == nil { + e.encLen(simpleVdByteArray, len(v)) + e.w.writeb(v) +} + +func (e *simpleEncDriver[T]) EncodeBytes(v []byte) { if v == nil { - e.EncodeNil() + e.writeNilBytes() return } - e.encLen(simpleVdByteArray, len(v)) - e.e.encWr.writeb(v) + e.EncodeStringBytesRaw(v) +} + +func (e *simpleEncDriver[T]) encodeNilBytes() { + b := byte(simpleVdNil) + if e.h.NilCollectionToZeroLength { + b = simpleVdArray + } + e.w.writen1(b) +} + +func (e *simpleEncDriver[T]) writeNilOr(v byte) { + if !e.h.NilCollectionToZeroLength { + v = simpleVdNil + } + e.w.writen1(v) +} + +func (e *simpleEncDriver[T]) writeNilArray() { + e.writeNilOr(simpleVdArray) +} + +func (e *simpleEncDriver[T]) writeNilMap() { + e.writeNilOr(simpleVdMap) } -func (e *simpleEncDriver) EncodeTime(t time.Time) { +func (e *simpleEncDriver[T]) writeNilBytes() { + e.writeNilOr(simpleVdByteArray) +} + +func (e *simpleEncDriver[T]) EncodeTime(t time.Time) { // if e.h.EncZeroValuesAsNil && e.c != containerMapKey && t.IsZero() { if t.IsZero() { e.EncodeNil() return } v, err := t.MarshalBinary() - e.e.onerror(err) - e.e.encWr.writen2(simpleVdTime, uint8(len(v))) - e.e.encWr.writeb(v) + halt.onerror(err) + e.w.writen2(simpleVdTime, uint8(len(v))) + e.w.writeb(v) } //------------------------------------ -type simpleDecDriver struct { +type simpleDecDriver[T decReader] struct { h *SimpleHandle + d *decoderBase + r T + bdAndBdread - _ bool + // bytes bool + noBuiltInTypes + // decDriverNoopNumberHelper decDriverNoopContainerReader - decDriverNoopNumberHelper - d Decoder -} - -func (d *simpleDecDriver) decoder() *Decoder { - return &d.d -} + decInit2er -func (d *simpleDecDriver) descBd() string { - return sprintf("%v (%s)", d.bd, simpledesc(d.bd)) + // ds interface{} // must be *decoder[simpleDecDriverM[bytes...]] } -func (d *simpleDecDriver) readNextBd() { - d.bd = d.d.decRd.readn1() +func (d *simpleDecDriver[T]) readNextBd() { + d.bd = d.r.readn1() d.bdRead = true } -func (d *simpleDecDriver) advanceNil() (null bool) { +func (d *simpleDecDriver[T]) advanceNil() (null bool) { if !d.bdRead { d.readNextBd() } @@ -267,7 +262,7 @@ func (d *simpleDecDriver) advanceNil() (null bool) { return } -func (d *simpleDecDriver) ContainerType() (vt valueType) { +func (d *simpleDecDriver[T]) ContainerType() (vt valueType) { if !d.bdRead { d.readNextBd() } @@ -291,88 +286,90 @@ func (d *simpleDecDriver) ContainerType() (vt valueType) { return valueTypeUnset } -func (d *simpleDecDriver) TryNil() bool { +func (d *simpleDecDriver[T]) TryNil() bool { return d.advanceNil() } -func (d *simpleDecDriver) decFloat() (f float64, ok bool) { +func (d *simpleDecDriver[T]) decFloat() (f float64, ok bool) { ok = true switch d.bd { case simpleVdFloat32: - f = float64(math.Float32frombits(bigen.Uint32(d.d.decRd.readn4()))) + f = float64(math.Float32frombits(bigen.Uint32(d.r.readn4()))) case simpleVdFloat64: - f = math.Float64frombits(bigen.Uint64(d.d.decRd.readn8())) + f = math.Float64frombits(bigen.Uint64(d.r.readn8())) default: ok = false } return } -func (d *simpleDecDriver) decInteger() (ui uint64, neg, ok bool) { +func (d *simpleDecDriver[T]) decInteger() (ui uint64, neg, ok bool) { ok = true switch d.bd { case simpleVdPosInt: - ui = uint64(d.d.decRd.readn1()) + ui = uint64(d.r.readn1()) case simpleVdPosInt + 1: - ui = uint64(bigen.Uint16(d.d.decRd.readn2())) + ui = uint64(bigen.Uint16(d.r.readn2())) case simpleVdPosInt + 2: - ui = uint64(bigen.Uint32(d.d.decRd.readn4())) + ui = uint64(bigen.Uint32(d.r.readn4())) case simpleVdPosInt + 3: - ui = uint64(bigen.Uint64(d.d.decRd.readn8())) + ui = uint64(bigen.Uint64(d.r.readn8())) case simpleVdNegInt: - ui = uint64(d.d.decRd.readn1()) + ui = uint64(d.r.readn1()) neg = true case simpleVdNegInt + 1: - ui = uint64(bigen.Uint16(d.d.decRd.readn2())) + ui = uint64(bigen.Uint16(d.r.readn2())) neg = true case simpleVdNegInt + 2: - ui = uint64(bigen.Uint32(d.d.decRd.readn4())) + ui = uint64(bigen.Uint32(d.r.readn4())) neg = true case simpleVdNegInt + 3: - ui = uint64(bigen.Uint64(d.d.decRd.readn8())) + ui = uint64(bigen.Uint64(d.r.readn8())) neg = true default: ok = false - // d.d.errorf("integer only valid from pos/neg integer1..8. Invalid descriptor: %v", d.bd) + // halt.errorf("integer only valid from pos/neg integer1..8. Invalid descriptor: %v", d.bd) } // DO NOT do this check below, because callers may only want the unsigned value: // // if ui > math.MaxInt64 { - // d.d.errorf("decIntAny: Integer out of range for signed int64: %v", ui) + // halt.errorf("decIntAny: Integer out of range for signed int64: %v", ui) // return // } return } -func (d *simpleDecDriver) DecodeInt64() (i int64) { +func (d *simpleDecDriver[T]) DecodeInt64() (i int64) { if d.advanceNil() { return } - i = decNegintPosintFloatNumberHelper{&d.d}.int64(d.decInteger()) + v1, v2, v3 := d.decInteger() + i = decNegintPosintFloatNumberHelper{d}.int64(v1, v2, v3, false) d.bdRead = false return } -func (d *simpleDecDriver) DecodeUint64() (ui uint64) { +func (d *simpleDecDriver[T]) DecodeUint64() (ui uint64) { if d.advanceNil() { return } - ui = decNegintPosintFloatNumberHelper{&d.d}.uint64(d.decInteger()) + ui = decNegintPosintFloatNumberHelper{d}.uint64(d.decInteger()) d.bdRead = false return } -func (d *simpleDecDriver) DecodeFloat64() (f float64) { +func (d *simpleDecDriver[T]) DecodeFloat64() (f float64) { if d.advanceNil() { return } - f = decNegintPosintFloatNumberHelper{&d.d}.float64(d.decFloat()) + v1, v2 := d.decFloat() + f = decNegintPosintFloatNumberHelper{d}.float64(v1, v2, false) d.bdRead = false return } // bool can be decoded from bool only (single byte). -func (d *simpleDecDriver) DecodeBool() (b bool) { +func (d *simpleDecDriver[T]) DecodeBool() (b bool) { if d.advanceNil() { return } @@ -380,13 +377,13 @@ func (d *simpleDecDriver) DecodeBool() (b bool) { } else if d.bd == simpleVdTrue { b = true } else { - d.d.errorf("cannot decode bool - %s: %x", msgBadDesc, d.bd) + halt.errorf("cannot decode bool - %s: %x", msgBadDesc, d.bd) } d.bdRead = false return } -func (d *simpleDecDriver) ReadMapStart() (length int) { +func (d *simpleDecDriver[T]) ReadMapStart() (length int) { if d.advanceNil() { return containerLenNil } @@ -394,7 +391,7 @@ func (d *simpleDecDriver) ReadMapStart() (length int) { return d.decLen() } -func (d *simpleDecDriver) ReadArrayStart() (length int) { +func (d *simpleDecDriver[T]) ReadArrayStart() (length int) { if d.advanceNil() { return containerLenNil } @@ -402,131 +399,128 @@ func (d *simpleDecDriver) ReadArrayStart() (length int) { return d.decLen() } -func (d *simpleDecDriver) uint2Len(ui uint64) int { +func (d *simpleDecDriver[T]) uint2Len(ui uint64) int { if chkOvf.Uint(ui, intBitsize) { - d.d.errorf("overflow integer: %v", ui) + halt.errorf("overflow integer: %v", ui) } return int(ui) } -func (d *simpleDecDriver) decLen() int { +func (d *simpleDecDriver[T]) decLen() int { switch d.bd & 7 { // d.bd % 8 { case 0: return 0 case 1: - return int(d.d.decRd.readn1()) + return int(d.r.readn1()) case 2: - return int(bigen.Uint16(d.d.decRd.readn2())) + return int(bigen.Uint16(d.r.readn2())) case 3: - return d.uint2Len(uint64(bigen.Uint32(d.d.decRd.readn4()))) + return d.uint2Len(uint64(bigen.Uint32(d.r.readn4()))) case 4: - return d.uint2Len(bigen.Uint64(d.d.decRd.readn8())) + return d.uint2Len(bigen.Uint64(d.r.readn8())) } - d.d.errorf("cannot read length: bd%%8 must be in range 0..4. Got: %d", d.bd%8) + halt.errorf("cannot read length: bd%%8 must be in range 0..4. Got: %d", d.bd%8) return -1 } -func (d *simpleDecDriver) DecodeStringAsBytes() (s []byte) { - return d.DecodeBytes(nil) +func (d *simpleDecDriver[T]) DecodeStringAsBytes() ([]byte, dBytesAttachState) { + return d.DecodeBytes() } -func (d *simpleDecDriver) DecodeBytes(bs []byte) (bsOut []byte) { - d.d.decByteState = decByteStateNone +func (d *simpleDecDriver[T]) DecodeBytes() (bs []byte, state dBytesAttachState) { if d.advanceNil() { return } + var cond bool // check if an "array" of uint8's (see ContainerType for how to infer if an array) - if d.bd >= simpleVdArray && d.bd <= simpleVdMap+4 { - if bs == nil { - d.d.decByteState = decByteStateReuseBuf - bs = d.d.b[:] - } + if d.bd >= simpleVdArray && d.bd <= simpleVdArray+4 { slen := d.ReadArrayStart() - var changed bool - if bs, changed = usableByteSlice(bs, slen); changed { - d.d.decByteState = decByteStateNone - } + bs, cond = usableByteSlice(d.d.buf, slen) for i := 0; i < len(bs); i++ { bs[i] = uint8(chkOvf.UintV(d.DecodeUint64(), 8)) } for i := len(bs); i < slen; i++ { bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) } - return bs + if cond { + d.d.buf = bs + } + state = dBytesAttachBuffer + + return } clen := d.decLen() d.bdRead = false - if d.d.zerocopy() { - d.d.decByteState = decByteStateZerocopy - return d.d.decRd.rb.readx(uint(clen)) - } - if bs == nil { - d.d.decByteState = decByteStateReuseBuf - bs = d.d.b[:] - } - return decByteSlice(d.d.r(), clen, d.d.h.MaxInitLen, bs) + bs, cond = d.r.readxb(uint(clen)) + state = d.d.attachState(cond) + return } -func (d *simpleDecDriver) DecodeTime() (t time.Time) { +func (d *simpleDecDriver[T]) DecodeTime() (t time.Time) { if d.advanceNil() { return } if d.bd != simpleVdTime { - d.d.errorf("invalid descriptor for time.Time - expect 0x%x, received 0x%x", simpleVdTime, d.bd) + halt.errorf("invalid descriptor for time.Time - expect 0x%x, received 0x%x", simpleVdTime, d.bd) } d.bdRead = false - clen := uint(d.d.decRd.readn1()) - b := d.d.decRd.readx(clen) - d.d.onerror((&t).UnmarshalBinary(b)) + clen := uint(d.r.readn1()) + b := d.r.readx(clen) + halt.onerror((&t).UnmarshalBinary(b)) return } -func (d *simpleDecDriver) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { - if xtag > 0xff { - d.d.errorf("ext: tag must be <= 0xff; got: %v", xtag) - } - if d.advanceNil() { +func (d *simpleDecDriver[T]) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + xbs, _, _, ok := d.decodeExtV(ext != nil, xtag) + if !ok { return } - xbs, realxtag1, zerocopy := d.decodeExtV(ext != nil, uint8(xtag)) - realxtag := uint64(realxtag1) - if ext == nil { - re := rv.(*RawExt) - re.Tag = realxtag - re.setData(xbs, zerocopy) - } else if ext == SelfExt { - d.d.sideDecode(rv, basetype, xbs) + if ext == SelfExt { + sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, true) }) } else { ext.ReadExt(rv, xbs) } } -func (d *simpleDecDriver) decodeExtV(verifyTag bool, tag byte) (xbs []byte, xtag byte, zerocopy bool) { +func (d *simpleDecDriver[T]) DecodeRawExt(re *RawExt) { + xbs, realxtag, state, ok := d.decodeExtV(false, 0) + if !ok { + return + } + re.Tag = uint64(realxtag) + re.setData(xbs, state >= dBytesAttachViewZerocopy) +} + +func (d *simpleDecDriver[T]) decodeExtV(verifyTag bool, xtagIn uint64) (xbs []byte, xtag byte, bstate dBytesAttachState, ok bool) { + if xtagIn > 0xff { + halt.errorf("ext: tag must be <= 0xff; got: %v", xtagIn) + } + if d.advanceNil() { + return + } + tag := uint8(xtagIn) switch d.bd { case simpleVdExt, simpleVdExt + 1, simpleVdExt + 2, simpleVdExt + 3, simpleVdExt + 4: l := d.decLen() - xtag = d.d.decRd.readn1() + xtag = d.r.readn1() if verifyTag && xtag != tag { - d.d.errorf("wrong extension tag. Got %b. Expecting: %v", xtag, tag) - } - if d.d.bytes { - xbs = d.d.decRd.rb.readx(uint(l)) - zerocopy = true - } else { - xbs = decByteSlice(d.d.r(), l, d.d.h.MaxInitLen, d.d.b[:]) + halt.errorf("wrong extension tag. Got %b. Expecting: %v", xtag, tag) } + xbs, ok = d.r.readxb(uint(l)) + bstate = d.d.attachState(ok) case simpleVdByteArray, simpleVdByteArray + 1, simpleVdByteArray + 2, simpleVdByteArray + 3, simpleVdByteArray + 4: - xbs = d.DecodeBytes(nil) + xbs, bstate = d.DecodeBytes() default: - d.d.errorf("ext - %s - expecting extensions/bytearray, got: 0x%x", msgBadDesc, d.bd) + halt.errorf("ext - %s - expecting extensions/bytearray, got: 0x%x", msgBadDesc, d.bd) } d.bdRead = false + ok = true return } -func (d *simpleDecDriver) DecodeNaked() { +func (d *simpleDecDriver[T]) DecodeNaked() { if !d.bdRead { d.readNextBd() } @@ -566,19 +560,20 @@ func (d *simpleDecDriver) DecodeNaked() { case simpleVdString, simpleVdString + 1, simpleVdString + 2, simpleVdString + 3, simpleVdString + 4: n.v = valueTypeString - n.s = d.d.stringZC(d.DecodeStringAsBytes()) + n.s = d.d.detach2Str(d.DecodeStringAsBytes()) case simpleVdByteArray, simpleVdByteArray + 1, simpleVdByteArray + 2, simpleVdByteArray + 3, simpleVdByteArray + 4: - d.d.fauxUnionReadRawBytes(false) + d.d.fauxUnionReadRawBytes(d, false, d.h.RawToString) //, d.h.ZeroCopy) case simpleVdExt, simpleVdExt + 1, simpleVdExt + 2, simpleVdExt + 3, simpleVdExt + 4: n.v = valueTypeExt l := d.decLen() - n.u = uint64(d.d.decRd.readn1()) - if d.d.bytes { - n.l = d.d.decRd.rb.readx(uint(l)) - } else { - n.l = decByteSlice(d.d.r(), l, d.d.h.MaxInitLen, d.d.b[:]) - } + n.u = uint64(d.r.readn1()) + n.l = d.r.readx(uint(l)) + // MARKER: not necessary to detach for extensions + // var useBuf bool + // n.l, useBuf = d.r.readxb(uint(l)) + // n.a = d.d.attachState(useBuf) + // n.l = d.d.detach2Bytes(n.l, nil, n.a) case simpleVdArray, simpleVdArray + 1, simpleVdArray + 2, simpleVdArray + 3, simpleVdArray + 4: n.v = valueTypeArray @@ -587,7 +582,7 @@ func (d *simpleDecDriver) DecodeNaked() { n.v = valueTypeMap decodeFurther = true default: - d.d.errorf("cannot infer value - %s 0x%x", msgBadDesc, d.bd) + halt.errorf("cannot infer value - %s 0x%x", msgBadDesc, d.bd) } if !decodeFurther { @@ -595,32 +590,18 @@ func (d *simpleDecDriver) DecodeNaked() { } } -func (d *simpleDecDriver) nextValueBytes(v0 []byte) (v []byte) { +func (d *simpleDecDriver[T]) nextValueBytes() (v []byte) { if !d.bdRead { d.readNextBd() } - v = v0 - var h = decNextValueBytesHelper{d: &d.d} - var cursor = d.d.rb.c - 1 - h.append1(&v, d.bd) - v = d.nextValueBytesBdReadR(v) + d.r.startRecording() + d.nextValueBytesBdReadR() + v = d.r.stopRecording() d.bdRead = false - h.bytesRdV(&v, cursor) return } -func (d *simpleDecDriver) nextValueBytesR(v0 []byte) (v []byte) { - d.readNextBd() - v = v0 - var h = decNextValueBytesHelper{d: &d.d} - h.append1(&v, d.bd) - return d.nextValueBytesBdReadR(v) -} - -func (d *simpleDecDriver) nextValueBytesBdReadR(v0 []byte) (v []byte) { - v = v0 - var h = decNextValueBytesHelper{d: &d.d} - +func (d *simpleDecDriver[T]) nextValueBytesBdReadR() { c := d.bd var length uint @@ -629,38 +610,33 @@ func (d *simpleDecDriver) nextValueBytesBdReadR(v0 []byte) (v []byte) { case simpleVdNil, simpleVdFalse, simpleVdTrue, simpleVdString, simpleVdByteArray: // pass case simpleVdPosInt, simpleVdNegInt: - h.append1(&v, d.d.decRd.readn1()) + d.r.readn1() case simpleVdPosInt + 1, simpleVdNegInt + 1: - h.appendN(&v, d.d.decRd.readx(2)...) + d.r.skip(2) case simpleVdPosInt + 2, simpleVdNegInt + 2, simpleVdFloat32: - h.appendN(&v, d.d.decRd.readx(4)...) + d.r.skip(4) case simpleVdPosInt + 3, simpleVdNegInt + 3, simpleVdFloat64: - h.appendN(&v, d.d.decRd.readx(8)...) + d.r.skip(8) case simpleVdTime: - c = d.d.decRd.readn1() - h.append1(&v, c) - h.appendN(&v, d.d.decRd.readx(uint(c))...) + c = d.r.readn1() + d.r.skip(uint(c)) default: switch c & 7 { // c % 8 { case 0: length = 0 case 1: - b := d.d.decRd.readn1() + b := d.r.readn1() length = uint(b) - h.append1(&v, b) case 2: - x := d.d.decRd.readn2() + x := d.r.readn2() length = uint(bigen.Uint16(x)) - h.appendN(&v, x[:]...) case 3: - x := d.d.decRd.readn4() + x := d.r.readn4() length = uint(bigen.Uint32(x)) - h.appendN(&v, x[:]...) case 4: - x := d.d.decRd.readn8() + x := d.r.readn8() length = uint(bigen.Uint64(x)) - h.appendN(&v, x[:]...) } bExt := c >= simpleVdExt && c <= simpleVdExt+7 @@ -670,11 +646,11 @@ func (d *simpleDecDriver) nextValueBytesBdReadR(v0 []byte) (v []byte) { bMap := c >= simpleVdMap && c <= simpleVdMap+7 if !(bExt || bStr || bByteArray || bArray || bMap) { - d.d.errorf("cannot infer value - %s 0x%x", msgBadDesc, c) + halt.errorf("cannot infer value - %s 0x%x", msgBadDesc, c) } if bExt { - h.append1(&v, d.d.decRd.readn1()) // tag + d.r.readn1() // tag } if length == 0 { @@ -683,68 +659,91 @@ func (d *simpleDecDriver) nextValueBytesBdReadR(v0 []byte) (v []byte) { if bArray { for i := uint(0); i < length; i++ { - v = d.nextValueBytesR(v) + d.readNextBd() + d.nextValueBytesBdReadR() } } else if bMap { for i := uint(0); i < length; i++ { - v = d.nextValueBytesR(v) - v = d.nextValueBytesR(v) + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() } } else { - h.appendN(&v, d.d.decRd.readx(length)...) + d.r.skip(length) } } return } -//------------------------------------ - -// SimpleHandle is a Handle for a very simple encoding format. +// ---- // -// simple is a simplistic codec similar to binc, but not as compact. -// - Encoding of a value is always preceded by the descriptor byte (bd) -// - True, false, nil are encoded fully in 1 byte (the descriptor) -// - Integers (intXXX, uintXXX) are encoded in 1, 2, 4 or 8 bytes (plus a descriptor byte). -// There are positive (uintXXX and intXXX >= 0) and negative (intXXX < 0) integers. -// - Floats are encoded in 4 or 8 bytes (plus a descriptor byte) -// - Length of containers (strings, bytes, array, map, extensions) -// are encoded in 0, 1, 2, 4 or 8 bytes. -// Zero-length containers have no length encoded. -// For others, the number of bytes is given by pow(2, bd%3) -// - maps are encoded as [bd] [length] [[key][value]]... -// - arrays are encoded as [bd] [length] [value]... -// - extensions are encoded as [bd] [length] [tag] [byte]... -// - strings/bytearrays are encoded as [bd] [length] [byte]... -// - time.Time are encoded as [bd] [length] [byte]... +// The following below are similar across all format files (except for the format name). // -// The full spec will be published soon. -type SimpleHandle struct { - binaryEncodingType - BasicHandle - // EncZeroValuesAsNil says to encode zero values for numbers, bool, string, etc as nil - EncZeroValuesAsNil bool +// We keep them together here, so that we can easily copy and compare. + +// ---- + +func (d *simpleEncDriver[T]) init(hh Handle, shared *encoderBase, enc encoderI) (fp interface{}) { + callMake(&d.w) + d.h = hh.(*SimpleHandle) + d.e = shared + if shared.bytes { + fp = simpleFpEncBytes + } else { + fp = simpleFpEncIO + } + // d.w.init() + d.init2(enc) + return +} + +func (e *simpleEncDriver[T]) writeBytesAsis(b []byte) { e.w.writeb(b) } + +func (e *simpleEncDriver[T]) writerEnd() { e.w.end() } + +func (e *simpleEncDriver[T]) resetOutBytes(out *[]byte) { + e.w.resetBytes(*out, out) +} + +func (e *simpleEncDriver[T]) resetOutIO(out io.Writer) { + e.w.resetIO(out, e.h.WriterBufferSize, &e.e.blist) +} + +// ---- + +func (d *simpleDecDriver[T]) init(hh Handle, shared *decoderBase, dec decoderI) (fp interface{}) { + callMake(&d.r) + d.h = hh.(*SimpleHandle) + d.d = shared + if shared.bytes { + fp = simpleFpDecBytes + } else { + fp = simpleFpDecIO + } + // d.r.init() + d.init2(dec) + return } -// Name returns the name of the handle: simple -func (h *SimpleHandle) Name() string { return "simple" } +func (d *simpleDecDriver[T]) NumBytesRead() int { + return int(d.r.numread()) +} -func (h *SimpleHandle) desc(bd byte) string { return simpledesc(bd) } +func (d *simpleDecDriver[T]) resetInBytes(in []byte) { + d.r.resetBytes(in) +} -func (h *SimpleHandle) newEncDriver() encDriver { - var e = &simpleEncDriver{h: h} - e.e.e = e - e.e.init(h) - e.reset() - return e +func (d *simpleDecDriver[T]) resetInIO(r io.Reader) { + d.r.resetIO(r, d.h.ReaderBufferSize, d.h.MaxInitLen, &d.d.blist) } -func (h *SimpleHandle) newDecDriver() decDriver { - d := &simpleDecDriver{h: h} - d.d.d = d - d.d.init(h) - d.reset() - return d +// ---- (custom stanza) + +func (d *simpleDecDriver[T]) descBd() string { + return sprintf("%v (%s)", d.bd, simpledesc(d.bd)) } -var _ decDriver = (*simpleDecDriver)(nil) -var _ encDriver = (*simpleEncDriver)(nil) +func (d *simpleDecDriver[T]) DecodeFloat32() (f float32) { + return float32(chkOvf.Float32V(d.DecodeFloat64())) +} diff --git a/vendor/github.com/ugorji/go/codec/simple.mono.generated.go b/vendor/github.com/ugorji/go/codec/simple.mono.generated.go new file mode 100644 index 0000000..ff1b022 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/simple.mono.generated.go @@ -0,0 +1,7549 @@ +//go:build !notmono && !codec.notmono + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "encoding" + + "io" + "math" + "reflect" + "slices" + "sort" + "strconv" + "sync" + "time" +) + +type helperEncDriverSimpleBytes struct{} +type encFnSimpleBytes struct { + i encFnInfo + fe func(*encoderSimpleBytes, *encFnInfo, reflect.Value) +} +type encRtidFnSimpleBytes struct { + rtid uintptr + fn *encFnSimpleBytes +} +type encoderSimpleBytes struct { + dh helperEncDriverSimpleBytes + fp *fastpathEsSimpleBytes + e simpleEncDriverBytes + encoderBase +} +type helperDecDriverSimpleBytes struct{} +type decFnSimpleBytes struct { + i decFnInfo + fd func(*decoderSimpleBytes, *decFnInfo, reflect.Value) +} +type decRtidFnSimpleBytes struct { + rtid uintptr + fn *decFnSimpleBytes +} +type decoderSimpleBytes struct { + dh helperDecDriverSimpleBytes + fp *fastpathDsSimpleBytes + d simpleDecDriverBytes + decoderBase +} +type simpleEncDriverBytes struct { + noBuiltInTypes + encDriverNoopContainerWriter + encDriverNoState + encDriverContainerNoTrackerT + encInit2er + + h *SimpleHandle + e *encoderBase + + w bytesEncAppender +} +type simpleDecDriverBytes struct { + h *SimpleHandle + d *decoderBase + r bytesDecReader + + bdAndBdread + + noBuiltInTypes + + decDriverNoopContainerReader + decInit2er +} + +func (e *encoderSimpleBytes) rawExt(_ *encFnInfo, rv reflect.Value) { + if re := rv2i(rv).(*RawExt); re == nil { + e.e.EncodeNil() + } else { + e.e.EncodeRawExt(re) + } +} + +func (e *encoderSimpleBytes) ext(f *encFnInfo, rv reflect.Value) { + e.e.EncodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (e *encoderSimpleBytes) selferMarshal(_ *encFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecEncodeSelf(&Encoder{e}) +} + +func (e *encoderSimpleBytes) binaryMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.BinaryMarshaler).MarshalBinary() + e.marshalRaw(bs, fnerr) +} + +func (e *encoderSimpleBytes) textMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.TextMarshaler).MarshalText() + e.marshalUtf8(bs, fnerr) +} + +func (e *encoderSimpleBytes) jsonMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(jsonMarshaler).MarshalJSON() + e.marshalAsis(bs, fnerr) +} + +func (e *encoderSimpleBytes) raw(_ *encFnInfo, rv reflect.Value) { + e.rawBytes(rv2i(rv).(Raw)) +} + +func (e *encoderSimpleBytes) encodeComplex64(v complex64) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat32(real(v)) +} + +func (e *encoderSimpleBytes) encodeComplex128(v complex128) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat64(real(v)) +} + +func (e *encoderSimpleBytes) kBool(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeBool(rvGetBool(rv)) +} + +func (e *encoderSimpleBytes) kTime(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeTime(rvGetTime(rv)) +} + +func (e *encoderSimpleBytes) kString(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeString(rvGetString(rv)) +} + +func (e *encoderSimpleBytes) kFloat32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat32(rvGetFloat32(rv)) +} + +func (e *encoderSimpleBytes) kFloat64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat64(rvGetFloat64(rv)) +} + +func (e *encoderSimpleBytes) kComplex64(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex64(rvGetComplex64(rv)) +} + +func (e *encoderSimpleBytes) kComplex128(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex128(rvGetComplex128(rv)) +} + +func (e *encoderSimpleBytes) kInt(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt(rv))) +} + +func (e *encoderSimpleBytes) kInt8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt8(rv))) +} + +func (e *encoderSimpleBytes) kInt16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt16(rv))) +} + +func (e *encoderSimpleBytes) kInt32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt32(rv))) +} + +func (e *encoderSimpleBytes) kInt64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt64(rv))) +} + +func (e *encoderSimpleBytes) kUint(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint(rv))) +} + +func (e *encoderSimpleBytes) kUint8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint8(rv))) +} + +func (e *encoderSimpleBytes) kUint16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint16(rv))) +} + +func (e *encoderSimpleBytes) kUint32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint32(rv))) +} + +func (e *encoderSimpleBytes) kUint64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint64(rv))) +} + +func (e *encoderSimpleBytes) kUintptr(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUintptr(rv))) +} + +func (e *encoderSimpleBytes) kSeqFn(rt reflect.Type) (fn *encFnSimpleBytes) { + + if rt = baseRT(rt); rt.Kind() != reflect.Interface { + fn = e.fn(rt) + } + return +} + +func (e *encoderSimpleBytes) kArrayWMbs(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(l) + e.mapStart(l >> 1) + + var fn *encFnSimpleBytes + builtin := ti.tielem.flagEncBuiltin + if !builtin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerMapKey + e.e.WriteMapElemKey(true) + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(false) + } else { + e.mapElemValue() + } + } + e.c = 0 + e.e.WriteMapEnd() + +} + +func (e *encoderSimpleBytes) kArrayW(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l <= 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(l) + + var fn *encFnSimpleBytes + if !ti.tielem.flagEncBuiltin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerArrayElem + e.e.WriteArrayElem(true) + builtin := ti.tielem.flagEncBuiltin + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + e.c = containerArrayElem + e.e.WriteArrayElem(false) + } + + e.c = 0 + e.e.WriteArrayEnd() +} + +func (e *encoderSimpleBytes) kChan(f *encFnInfo, rv reflect.Value) { + if f.ti.chandir&uint8(reflect.RecvDir) == 0 { + halt.errorStr("send-only channel cannot be encoded") + } + if !f.ti.mbs && uint8TypId == rt2id(f.ti.elem) { + e.kSliceBytesChan(rv) + return + } + rtslice := reflect.SliceOf(f.ti.elem) + rv = chanToSlice(rv, rtslice, e.h.ChanRecvTimeout) + ti := e.h.getTypeInfo(rt2id(rtslice), rtslice) + if f.ti.mbs { + e.kArrayWMbs(rv, ti, true) + } else { + e.kArrayW(rv, ti, true) + } +} + +func (e *encoderSimpleBytes) kSlice(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, true) + } else if f.ti.rtid == uint8SliceTypId || uint8TypId == rt2id(f.ti.elem) { + + e.e.EncodeBytes(rvGetBytes(rv)) + } else { + e.kArrayW(rv, f.ti, true) + } +} + +func (e *encoderSimpleBytes) kArray(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, false) + } else if handleBytesWithinKArray && uint8TypId == rt2id(f.ti.elem) { + e.e.EncodeStringBytesRaw(rvGetArrayBytes(rv, nil)) + } else { + e.kArrayW(rv, f.ti, false) + } +} + +func (e *encoderSimpleBytes) kSliceBytesChan(rv reflect.Value) { + + bs0 := e.blist.peek(32, true) + bs := bs0 + + irv := rv2i(rv) + ch, ok := irv.(<-chan byte) + if !ok { + ch = irv.(chan byte) + } + +L1: + switch timeout := e.h.ChanRecvTimeout; { + case timeout == 0: + for { + select { + case b := <-ch: + bs = append(bs, b) + default: + break L1 + } + } + case timeout > 0: + tt := time.NewTimer(timeout) + for { + select { + case b := <-ch: + bs = append(bs, b) + case <-tt.C: + + break L1 + } + } + default: + for b := range ch { + bs = append(bs, b) + } + } + + e.e.EncodeBytes(bs) + e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.blist.put(bs0) + } +} + +func (e *encoderSimpleBytes) kStructFieldKey(keyType valueType, encName string) { + + if keyType == valueTypeString { + e.e.EncodeString(encName) + } else if keyType == valueTypeInt { + e.e.EncodeInt(must.Int(strconv.ParseInt(encName, 10, 64))) + } else if keyType == valueTypeUint { + e.e.EncodeUint(must.Uint(strconv.ParseUint(encName, 10, 64))) + } else if keyType == valueTypeFloat { + e.e.EncodeFloat64(must.Float(strconv.ParseFloat(encName, 64))) + } else { + halt.errorStr2("invalid struct key type: ", keyType.String()) + } + +} + +func (e *encoderSimpleBytes) kStructSimple(f *encFnInfo, rv reflect.Value) { + _ = e.e + tisfi := f.ti.sfi.source() + + chkCirRef := e.h.CheckCircularRef + var si *structFieldInfo + var j int + + if f.ti.toArray || e.h.StructToArray { + if len(tisfi) == 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } else { + if len(tisfi) == 0 { + e.e.WriteMapEmpty() + return + } + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + e.mapStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.EncodeStringNoEscape4Json(si.encName) + e.mapElemValue() + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteMapEnd() + } +} + +func (e *encoderSimpleBytes) kStruct(f *encFnInfo, rv reflect.Value) { + _ = e.e + ti := f.ti + toMap := !(ti.toArray || e.h.StructToArray) + var mf map[string]interface{} + if ti.flagMissingFielder { + toMap = true + mf = rv2i(rv).(MissingFielder).CodecMissingFields() + } else if ti.flagMissingFielderPtr { + toMap = true + if rv.CanAddr() { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder).CodecMissingFields() + } else { + mf = rv2i(e.addrRV(rv, ti.rt, ti.ptr)).(MissingFielder).CodecMissingFields() + } + } + newlen := len(mf) + tisfi := ti.sfi.source() + newlen += len(tisfi) + + var fkvs = e.slist.get(newlen)[:newlen] + + recur := e.h.RecursiveEmptyCheck + chkCirRef := e.h.CheckCircularRef + + var xlen int + + var kv sfiRv + var j int + var sf encStructFieldObj + if toMap { + newlen = 0 + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + for _, si := range tisfi { + + if si.omitEmpty { + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyValue(kv.r, e.h.TypeInfos, recur) { + continue + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[newlen] = kv + newlen++ + } + + var mf2s []stringIntf + if len(mf) != 0 { + mf2s = make([]stringIntf, 0, len(mf)) + for k, v := range mf { + if k == "" { + continue + } + if ti.infoFieldOmitempty && isEmptyValue(reflect.ValueOf(v), e.h.TypeInfos, recur) { + continue + } + mf2s = append(mf2s, stringIntf{k, v}) + } + } + + xlen = newlen + len(mf2s) + if xlen == 0 { + e.e.WriteMapEmpty() + goto END + } + + e.mapStart(xlen) + + if len(mf2s) != 0 && e.h.Canonical { + mf2w := make([]encStructFieldObj, newlen+len(mf2s)) + for j = 0; j < newlen; j++ { + kv = fkvs[j] + mf2w[j] = encStructFieldObj{kv.v.encName, kv.r, nil, true, + !kv.v.encNameEscape4Json, kv.v.encBuiltin} + } + for _, v := range mf2s { + mf2w[j] = encStructFieldObj{v.v, reflect.Value{}, v.i, false, false, false} + j++ + } + sort.Sort((encStructFieldObjSlice)(mf2w)) + for j, sf = range mf2w { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && sf.noEsc4json { + e.e.EncodeStringNoEscape4Json(sf.key) + } else { + e.kStructFieldKey(ti.keyType, sf.key) + } + e.mapElemValue() + if sf.isRv { + if sf.builtin { + e.encodeIB(rv2i(baseRVRV(sf.rv))) + } else { + e.encodeValue(sf.rv, nil) + } + } else { + if !e.encodeBuiltin(sf.intf) { + e.encodeR(reflect.ValueOf(sf.intf)) + } + + } + } + } else { + keytyp := ti.keyType + for j = 0; j < newlen; j++ { + kv = fkvs[j] + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && !kv.v.encNameEscape4Json { + e.e.EncodeStringNoEscape4Json(kv.v.encName) + } else { + e.kStructFieldKey(keytyp, kv.v.encName) + } + e.mapElemValue() + if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + for _, v := range mf2s { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.kStructFieldKey(keytyp, v.v) + e.mapElemValue() + if !e.encodeBuiltin(v.i) { + e.encodeR(reflect.ValueOf(v.i)) + } + + j++ + } + } + + e.c = 0 + e.e.WriteMapEnd() + } else { + newlen = len(tisfi) + for i, si := range tisfi { + + if si.omitEmpty { + + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyContainerValue(kv.r, e.h.TypeInfos, recur) { + kv.r = reflect.Value{} + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[i] = kv + } + + if newlen == 0 { + e.e.WriteArrayEmpty() + goto END + } + + e.arrayStart(newlen) + for j = 0; j < newlen; j++ { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + kv = fkvs[j] + if !kv.r.IsValid() { + e.e.EncodeNil() + } else if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } + +END: + + e.slist.put(fkvs) +} + +func (e *encoderSimpleBytes) kMap(f *encFnInfo, rv reflect.Value) { + _ = e.e + l := rvLenMap(rv) + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.mapStart(l) + + var keyFn, valFn *encFnSimpleBytes + + ktypeKind := reflect.Kind(f.ti.keykind) + vtypeKind := reflect.Kind(f.ti.elemkind) + + rtval := f.ti.elem + rtvalkind := vtypeKind + for rtvalkind == reflect.Ptr { + rtval = rtval.Elem() + rtvalkind = rtval.Kind() + } + if rtvalkind != reflect.Interface { + valFn = e.fn(rtval) + } + + var rvv = mapAddrLoopvarRV(f.ti.elem, vtypeKind) + + rtkey := f.ti.key + var keyTypeIsString = stringTypId == rt2id(rtkey) + if keyTypeIsString { + keyFn = e.fn(rtkey) + } else { + for rtkey.Kind() == reflect.Ptr { + rtkey = rtkey.Elem() + } + if rtkey.Kind() != reflect.Interface { + keyFn = e.fn(rtkey) + } + } + + if e.h.Canonical { + e.kMapCanonical(f.ti, rv, rvv, keyFn, valFn) + e.c = 0 + e.e.WriteMapEnd() + return + } + + var rvk = mapAddrLoopvarRV(f.ti.key, ktypeKind) + + var it mapIter + mapRange(&it, rv, rvk, rvv, true) + + kbuiltin := f.ti.tikey.flagEncBuiltin + vbuiltin := f.ti.tielem.flagEncBuiltin + for j := 0; it.Next(); j++ { + rv = it.Key() + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if keyTypeIsString { + e.e.EncodeString(rvGetString(rv)) + } else if kbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(rv, keyFn) + } + e.mapElemValue() + rv = it.Value() + if vbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(it.Value(), valFn) + } + } + it.Done() + + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleBytes) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valFn *encFnSimpleBytes) { + _ = e.e + + rtkey := ti.key + rtkeydecl := rtkey.PkgPath() == "" && rtkey.Name() != "" + + mks := rv.MapKeys() + rtkeyKind := rtkey.Kind() + mparams := getMapReqParams(ti) + + switch rtkeyKind { + case reflect.Bool: + + if len(mks) == 2 && mks[0].Bool() { + mks[0], mks[1] = mks[1], mks[0] + } + for i := range mks { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeBool(mks[i].Bool()) + } else { + e.encodeValueNonNil(mks[i], keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mks[i], rvv, mparams), valFn) + } + case reflect.String: + mksv := make([]orderedRv[string], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rvGetString(k) + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeString(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr: + mksv := make([]orderedRv[uint64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Uint() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeUint(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + mksv := make([]orderedRv[int64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Int() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeInt(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float32: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat32(float32(mksv[i].v)) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float64: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat64(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + default: + if rtkey == timeTyp { + mksv := make([]timeRv, len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rv2i(k).(time.Time) + } + slices.SortFunc(mksv, cmpTimeRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeTime(mksv[i].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + break + } + + bs0 := e.blist.get(len(mks) * 16) + mksv := bs0 + mksbv := make([]bytesRv, len(mks)) + + sideEncode(e.hh, &e.h.sideEncPool, func(se encoderI) { + se.ResetBytes(&mksv) + for i, k := range mks { + v := &mksbv[i] + l := len(mksv) + se.setContainerState(containerMapKey) + se.encodeR(baseRVRV(k)) + se.atEndOfEncode() + se.writerEnd() + v.r = k + v.v = mksv[l:] + } + }) + + slices.SortFunc(mksbv, cmpBytesRv) + for j := range mksbv { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.writeBytesAsis(mksbv[j].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksbv[j].r, rvv, mparams), valFn) + } + e.blist.put(mksv) + if !byteSliceSameData(bs0, mksv) { + e.blist.put(bs0) + } + } +} + +func (e *encoderSimpleBytes) init(h Handle) { + initHandle(h) + callMake(&e.e) + e.hh = h + e.h = h.getBasicHandle() + + e.err = errEncoderNotInitialized + + e.fp = e.e.init(h, &e.encoderBase, e).(*fastpathEsSimpleBytes) + + if e.bytes { + e.rtidFn = &e.h.rtidFnsEncBytes + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtBytes + } else { + e.rtidFn = &e.h.rtidFnsEncIO + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtIO + } + + e.reset() +} + +func (e *encoderSimpleBytes) reset() { + e.e.reset() + if e.ci != nil { + e.ci = e.ci[:0] + } + e.c = 0 + e.calls = 0 + e.seq = 0 + e.err = nil +} + +func (e *encoderSimpleBytes) Encode(v interface{}) (err error) { + + defer panicValToErr(e, callRecoverSentinel, &e.err, &err, debugging) + e.mustEncode(v) + return +} + +func (e *encoderSimpleBytes) MustEncode(v interface{}) { + defer panicValToErr(e, callRecoverSentinel, &e.err, nil, true) + e.mustEncode(v) + return +} + +func (e *encoderSimpleBytes) mustEncode(v interface{}) { + halt.onerror(e.err) + if e.hh == nil { + halt.onerror(errNoFormatHandle) + } + + e.calls++ + if !e.encodeBuiltin(v) { + e.encodeR(reflect.ValueOf(v)) + } + + e.calls-- + if e.calls == 0 { + e.e.atEndOfEncode() + e.e.writerEnd() + } +} + +func (e *encoderSimpleBytes) encodeI(iv interface{}) { + if !e.encodeBuiltin(iv) { + e.encodeR(reflect.ValueOf(iv)) + } +} + +func (e *encoderSimpleBytes) encodeIB(iv interface{}) { + if !e.encodeBuiltin(iv) { + + halt.errorStr("[should not happen] invalid type passed to encodeBuiltin") + } +} + +func (e *encoderSimpleBytes) encodeR(base reflect.Value) { + e.encodeValue(base, nil) +} + +func (e *encoderSimpleBytes) encodeBuiltin(iv interface{}) (ok bool) { + ok = true + switch v := iv.(type) { + case nil: + e.e.EncodeNil() + + case Raw: + e.rawBytes(v) + case string: + e.e.EncodeString(v) + case bool: + e.e.EncodeBool(v) + case int: + e.e.EncodeInt(int64(v)) + case int8: + e.e.EncodeInt(int64(v)) + case int16: + e.e.EncodeInt(int64(v)) + case int32: + e.e.EncodeInt(int64(v)) + case int64: + e.e.EncodeInt(v) + case uint: + e.e.EncodeUint(uint64(v)) + case uint8: + e.e.EncodeUint(uint64(v)) + case uint16: + e.e.EncodeUint(uint64(v)) + case uint32: + e.e.EncodeUint(uint64(v)) + case uint64: + e.e.EncodeUint(v) + case uintptr: + e.e.EncodeUint(uint64(v)) + case float32: + e.e.EncodeFloat32(v) + case float64: + e.e.EncodeFloat64(v) + case complex64: + e.encodeComplex64(v) + case complex128: + e.encodeComplex128(v) + case time.Time: + e.e.EncodeTime(v) + case []byte: + e.e.EncodeBytes(v) + default: + + ok = !skipFastpathTypeSwitchInDirectCall && e.dh.fastpathEncodeTypeSwitch(iv, e) + } + return +} + +func (e *encoderSimpleBytes) encodeValue(rv reflect.Value, fn *encFnSimpleBytes) { + + var ciPushes int + + var rvp reflect.Value + var rvpValid bool + +RV: + switch rv.Kind() { + case reflect.Ptr: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = true + rvp = rv + rv = rv.Elem() + + if e.h.CheckCircularRef && e.ci.canPushElemKind(rv.Kind()) { + e.ci.push(rv2i(rvp)) + ciPushes++ + } + goto RV + case reflect.Interface: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = false + rvp = reflect.Value{} + rv = rv.Elem() + fn = nil + goto RV + case reflect.Map: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteMapEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Slice, reflect.Chan: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteArrayEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Invalid, reflect.Func: + e.e.EncodeNil() + goto END + } + + if fn == nil { + fn = e.fn(rv.Type()) + } + + if !fn.i.addrE { + + } else if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + fn.fe(e, &fn.i, rv) + +END: + if ciPushes > 0 { + e.ci.pop(ciPushes) + } +} + +func (e *encoderSimpleBytes) encodeValueNonNil(rv reflect.Value, fn *encFnSimpleBytes) { + + if fn.i.addrE { + if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + } + fn.fe(e, &fn.i, rv) +} + +func (e *encoderSimpleBytes) encodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + e.encodeValue(baseRV(v), e.fn(t)) + } else { + e.encodeValue(baseRV(v), e.fnNoExt(t)) + } +} + +func (e *encoderSimpleBytes) marshalUtf8(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.EncodeString(stringView(bs)) + } +} + +func (e *encoderSimpleBytes) marshalAsis(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.writeBytesAsis(bs) + } +} + +func (e *encoderSimpleBytes) marshalRaw(bs []byte, fnerr error) { + halt.onerror(fnerr) + e.e.EncodeBytes(bs) +} + +func (e *encoderSimpleBytes) rawBytes(vv Raw) { + v := []byte(vv) + if !e.h.Raw { + halt.errorBytes("Raw values cannot be encoded: ", v) + } + e.e.writeBytesAsis(v) +} + +func (e *encoderSimpleBytes) fn(t reflect.Type) *encFnSimpleBytes { + return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false) +} + +func (e *encoderSimpleBytes) fnNoExt(t reflect.Type) *encFnSimpleBytes { + return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true) +} + +func (e *encoderSimpleBytes) mapStart(length int) { + e.e.WriteMapStart(length) + e.c = containerMapStart +} + +func (e *encoderSimpleBytes) mapElemValue() { + e.e.WriteMapElemValue() + e.c = containerMapValue +} + +func (e *encoderSimpleBytes) arrayStart(length int) { + e.e.WriteArrayStart(length) + e.c = containerArrayStart +} + +func (e *encoderSimpleBytes) writerEnd() { + e.e.writerEnd() +} + +func (e *encoderSimpleBytes) atEndOfEncode() { + e.e.atEndOfEncode() +} + +func (e *encoderSimpleBytes) Reset(w io.Writer) { + if e.bytes { + halt.onerror(errEncNoResetBytesWithWriter) + } + e.reset() + if w == nil { + w = io.Discard + } + e.e.resetOutIO(w) +} + +func (e *encoderSimpleBytes) ResetBytes(out *[]byte) { + if !e.bytes { + halt.onerror(errEncNoResetWriterWithBytes) + } + e.resetBytes(out) +} + +func (e *encoderSimpleBytes) resetBytes(out *[]byte) { + e.reset() + if out == nil { + out = &bytesEncAppenderDefOut + } + e.e.resetOutBytes(out) +} + +func (helperEncDriverSimpleBytes) newEncoderBytes(out *[]byte, h Handle) *encoderSimpleBytes { + var c1 encoderSimpleBytes + c1.bytes = true + c1.init(h) + c1.ResetBytes(out) + return &c1 +} + +func (helperEncDriverSimpleBytes) newEncoderIO(out io.Writer, h Handle) *encoderSimpleBytes { + var c1 encoderSimpleBytes + c1.bytes = false + c1.init(h) + c1.Reset(out) + return &c1 +} + +func (helperEncDriverSimpleBytes) encFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathEsSimpleBytes) (f *fastpathESimpleBytes, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperEncDriverSimpleBytes) encFindRtidFn(s []encRtidFnSimpleBytes, rtid uintptr) (i uint, fn *encFnSimpleBytes) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperEncDriverSimpleBytes) encFromRtidFnSlice(fns *atomicRtidFnSlice) (s []encRtidFnSimpleBytes) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]encRtidFnSimpleBytes](v)) + } + return +} + +func (dh helperEncDriverSimpleBytes) encFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, + x *BasicHandle, fp *fastpathEsSimpleBytes, checkExt bool) (fn *encFnSimpleBytes) { + return dh.encFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperEncDriverSimpleBytes) encFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsSimpleBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnSimpleBytes) { + rtid := rt2id(rt) + var sp []encRtidFnSimpleBytes = dh.encFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.encFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.encFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperEncDriverSimpleBytes) encFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsSimpleBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnSimpleBytes) { + + fn = dh.encFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []encRtidFnSimpleBytes + mu.Lock() + sp = dh.encFromRtidFnSlice(fns) + + if sp == nil { + sp = []encRtidFnSimpleBytes{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.encFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]encRtidFnSimpleBytes, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = encRtidFnSimpleBytes{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperEncDriverSimpleBytes) encFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathEsSimpleBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnSimpleBytes) { + fn = new(encFnSimpleBytes) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + if rtid == timeTypId && timeBuiltin { + fn.fe = (*encoderSimpleBytes).kTime + } else if rtid == rawTypId { + fn.fe = (*encoderSimpleBytes).raw + } else if rtid == rawExtTypId { + fn.fe = (*encoderSimpleBytes).rawExt + fi.addrE = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fe = (*encoderSimpleBytes).ext + if rk == reflect.Struct || rk == reflect.Array { + fi.addrE = true + } + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fe = (*encoderSimpleBytes).selferMarshal + fi.addrE = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fe = (*encoderSimpleBytes).binaryMarshal + fi.addrE = ti.flagBinaryMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fe = (*encoderSimpleBytes).jsonMarshal + fi.addrE = ti.flagJsonMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fe = (*encoderSimpleBytes).textMarshal + fi.addrE = ti.flagTextMarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fe = fp[idx].encfn + } + } else { + + xfe, xrt := dh.encFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf := xfe.encfn + fn.fe = func(e *encoderSimpleBytes, xf *encFnInfo, xrv reflect.Value) { + xfnf(e, xf, rvConvert(xrv, xrt)) + } + } + } + } + if fn.fe == nil { + switch rk { + case reflect.Bool: + fn.fe = (*encoderSimpleBytes).kBool + case reflect.String: + + fn.fe = (*encoderSimpleBytes).kString + case reflect.Int: + fn.fe = (*encoderSimpleBytes).kInt + case reflect.Int8: + fn.fe = (*encoderSimpleBytes).kInt8 + case reflect.Int16: + fn.fe = (*encoderSimpleBytes).kInt16 + case reflect.Int32: + fn.fe = (*encoderSimpleBytes).kInt32 + case reflect.Int64: + fn.fe = (*encoderSimpleBytes).kInt64 + case reflect.Uint: + fn.fe = (*encoderSimpleBytes).kUint + case reflect.Uint8: + fn.fe = (*encoderSimpleBytes).kUint8 + case reflect.Uint16: + fn.fe = (*encoderSimpleBytes).kUint16 + case reflect.Uint32: + fn.fe = (*encoderSimpleBytes).kUint32 + case reflect.Uint64: + fn.fe = (*encoderSimpleBytes).kUint64 + case reflect.Uintptr: + fn.fe = (*encoderSimpleBytes).kUintptr + case reflect.Float32: + fn.fe = (*encoderSimpleBytes).kFloat32 + case reflect.Float64: + fn.fe = (*encoderSimpleBytes).kFloat64 + case reflect.Complex64: + fn.fe = (*encoderSimpleBytes).kComplex64 + case reflect.Complex128: + fn.fe = (*encoderSimpleBytes).kComplex128 + case reflect.Chan: + fn.fe = (*encoderSimpleBytes).kChan + case reflect.Slice: + fn.fe = (*encoderSimpleBytes).kSlice + case reflect.Array: + fn.fe = (*encoderSimpleBytes).kArray + case reflect.Struct: + if ti.simple { + fn.fe = (*encoderSimpleBytes).kStructSimple + } else { + fn.fe = (*encoderSimpleBytes).kStruct + } + case reflect.Map: + fn.fe = (*encoderSimpleBytes).kMap + case reflect.Interface: + + fn.fe = (*encoderSimpleBytes).kErr + default: + + fn.fe = (*encoderSimpleBytes).kErr + } + } + } + return +} +func (d *decoderSimpleBytes) rawExt(f *decFnInfo, rv reflect.Value) { + d.d.DecodeRawExt(rv2i(rv).(*RawExt)) +} + +func (d *decoderSimpleBytes) ext(f *decFnInfo, rv reflect.Value) { + d.d.DecodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (d *decoderSimpleBytes) selferUnmarshal(_ *decFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecDecodeSelf(&Decoder{d}) +} + +func (d *decoderSimpleBytes) binaryUnmarshal(_ *decFnInfo, rv reflect.Value) { + bm := rv2i(rv).(encoding.BinaryUnmarshaler) + xbs, _ := d.d.DecodeBytes() + fnerr := bm.UnmarshalBinary(xbs) + halt.onerror(fnerr) +} + +func (d *decoderSimpleBytes) textUnmarshal(_ *decFnInfo, rv reflect.Value) { + tm := rv2i(rv).(encoding.TextUnmarshaler) + fnerr := tm.UnmarshalText(bytesOKs(d.d.DecodeStringAsBytes())) + halt.onerror(fnerr) +} + +func (d *decoderSimpleBytes) jsonUnmarshal(_ *decFnInfo, rv reflect.Value) { + d.jsonUnmarshalV(rv2i(rv).(jsonUnmarshaler)) +} + +func (d *decoderSimpleBytes) jsonUnmarshalV(tm jsonUnmarshaler) { + + halt.onerror(tm.UnmarshalJSON(d.d.nextValueBytes())) +} + +func (d *decoderSimpleBytes) kErr(_ *decFnInfo, rv reflect.Value) { + halt.errorf("unsupported decoding kind: %s, for %#v", rv.Kind(), rv) + +} + +func (d *decoderSimpleBytes) raw(_ *decFnInfo, rv reflect.Value) { + rvSetBytes(rv, d.rawBytes()) +} + +func (d *decoderSimpleBytes) kString(_ *decFnInfo, rv reflect.Value) { + rvSetString(rv, d.detach2Str(d.d.DecodeStringAsBytes())) +} + +func (d *decoderSimpleBytes) kBool(_ *decFnInfo, rv reflect.Value) { + rvSetBool(rv, d.d.DecodeBool()) +} + +func (d *decoderSimpleBytes) kTime(_ *decFnInfo, rv reflect.Value) { + rvSetTime(rv, d.d.DecodeTime()) +} + +func (d *decoderSimpleBytes) kFloat32(_ *decFnInfo, rv reflect.Value) { + rvSetFloat32(rv, d.d.DecodeFloat32()) +} + +func (d *decoderSimpleBytes) kFloat64(_ *decFnInfo, rv reflect.Value) { + rvSetFloat64(rv, d.d.DecodeFloat64()) +} + +func (d *decoderSimpleBytes) kComplex64(_ *decFnInfo, rv reflect.Value) { + rvSetComplex64(rv, complex(d.d.DecodeFloat32(), 0)) +} + +func (d *decoderSimpleBytes) kComplex128(_ *decFnInfo, rv reflect.Value) { + rvSetComplex128(rv, complex(d.d.DecodeFloat64(), 0)) +} + +func (d *decoderSimpleBytes) kInt(_ *decFnInfo, rv reflect.Value) { + rvSetInt(rv, int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))) +} + +func (d *decoderSimpleBytes) kInt8(_ *decFnInfo, rv reflect.Value) { + rvSetInt8(rv, int8(chkOvf.IntV(d.d.DecodeInt64(), 8))) +} + +func (d *decoderSimpleBytes) kInt16(_ *decFnInfo, rv reflect.Value) { + rvSetInt16(rv, int16(chkOvf.IntV(d.d.DecodeInt64(), 16))) +} + +func (d *decoderSimpleBytes) kInt32(_ *decFnInfo, rv reflect.Value) { + rvSetInt32(rv, int32(chkOvf.IntV(d.d.DecodeInt64(), 32))) +} + +func (d *decoderSimpleBytes) kInt64(_ *decFnInfo, rv reflect.Value) { + rvSetInt64(rv, d.d.DecodeInt64()) +} + +func (d *decoderSimpleBytes) kUint(_ *decFnInfo, rv reflect.Value) { + rvSetUint(rv, uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderSimpleBytes) kUintptr(_ *decFnInfo, rv reflect.Value) { + rvSetUintptr(rv, uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderSimpleBytes) kUint8(_ *decFnInfo, rv reflect.Value) { + rvSetUint8(rv, uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))) +} + +func (d *decoderSimpleBytes) kUint16(_ *decFnInfo, rv reflect.Value) { + rvSetUint16(rv, uint16(chkOvf.UintV(d.d.DecodeUint64(), 16))) +} + +func (d *decoderSimpleBytes) kUint32(_ *decFnInfo, rv reflect.Value) { + rvSetUint32(rv, uint32(chkOvf.UintV(d.d.DecodeUint64(), 32))) +} + +func (d *decoderSimpleBytes) kUint64(_ *decFnInfo, rv reflect.Value) { + rvSetUint64(rv, d.d.DecodeUint64()) +} + +func (d *decoderSimpleBytes) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) { + + n := d.naked() + d.d.DecodeNaked() + + if decFailNonEmptyIntf && f.ti.numMeth > 0 { + halt.errorf("cannot decode non-nil codec value into nil %v (%v methods)", f.ti.rt, f.ti.numMeth) + } + + switch n.v { + case valueTypeMap: + mtid := d.mtid + if mtid == 0 { + if d.jsms { + mtid = mapStrIntfTypId + } else { + mtid = mapIntfIntfTypId + } + } + if mtid == mapStrIntfTypId { + var v2 map[string]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if mtid == mapIntfIntfTypId { + var v2 map[interface{}]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.mtr { + rvn = reflect.New(d.h.MapType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + + rvn = rvZeroAddrK(d.h.MapType, reflect.Map) + d.decodeValue(rvn, nil) + } + case valueTypeArray: + if d.stid == 0 || d.stid == intfSliceTypId { + var v2 []interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.str { + rvn = reflect.New(d.h.SliceType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + rvn = rvZeroAddrK(d.h.SliceType, reflect.Slice) + d.decodeValue(rvn, nil) + } + if d.h.PreferArrayOverSlice { + rvn = rvGetArray4Slice(rvn) + } + case valueTypeExt: + tag, bytes := n.u, n.l + bfn := d.h.getExtForTag(tag) + var re = RawExt{Tag: tag} + if bytes == nil { + + if bfn == nil { + d.decode(&re.Value) + rvn = rv4iptr(&re).Elem() + } else if bfn.ext == SelfExt { + rvn = rvZeroAddrK(bfn.rt, bfn.rt.Kind()) + d.decodeValue(rvn, d.fnNoExt(bfn.rt)) + } else { + rvn = reflect.New(bfn.rt) + d.interfaceExtConvertAndDecode(rv2i(rvn), bfn.ext) + rvn = rvn.Elem() + } + } else { + + if bfn == nil { + re.setData(bytes, false) + rvn = rv4iptr(&re).Elem() + } else { + rvn = reflect.New(bfn.rt) + if bfn.ext == SelfExt { + sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) }) + } else { + bfn.ext.ReadExt(rv2i(rvn), bytes) + } + rvn = rvn.Elem() + } + } + + if d.h.PreferPointerForStructOrArray && rvn.CanAddr() { + if rk := rvn.Kind(); rk == reflect.Array || rk == reflect.Struct { + rvn = rvn.Addr() + } + } + case valueTypeNil: + + case valueTypeInt: + rvn = n.ri() + case valueTypeUint: + rvn = n.ru() + case valueTypeFloat: + rvn = n.rf() + case valueTypeBool: + rvn = n.rb() + case valueTypeString, valueTypeSymbol: + rvn = n.rs() + case valueTypeBytes: + rvn = n.rl() + case valueTypeTime: + rvn = n.rt() + default: + halt.errorStr2("kInterfaceNaked: unexpected valueType: ", n.v.String()) + } + return +} + +func (d *decoderSimpleBytes) kInterface(f *decFnInfo, rv reflect.Value) { + + isnilrv := rvIsNil(rv) + + var rvn reflect.Value + + if d.h.InterfaceReset { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } else if !isnilrv { + decSetNonNilRV2Zero4Intf(rv) + } + return + } + } else if isnilrv { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } + return + } + } else { + + rvn = rv.Elem() + } + + canDecode, _ := isDecodeable(rvn) + + if !canDecode { + rvn2 := d.oneShotAddrRV(rvn.Type(), rvn.Kind()) + rvSetDirect(rvn2, rvn) + rvn = rvn2 + } + + d.decodeValue(rvn, nil) + rvSetIntf(rv, rvn) +} + +func (d *decoderSimpleBytes) kStructField(si *structFieldInfo, rv reflect.Value) { + if d.d.TryNil() { + rv = si.fieldNoAlloc(rv, true) + if rv.IsValid() { + decSetNonNilRV2Zero(rv) + } + } else if si.decBuiltin { + rv = rvAddr(si.fieldAlloc(rv), si.ptrTyp) + d.decode(rv2i(rv)) + } else { + fn := d.fn(si.baseTyp) + rv = si.fieldAlloc(rv) + if fn.i.addrD { + rv = rvAddr(rv, si.ptrTyp) + } + fn.fd(d, &fn.i, rv) + } +} + +func (d *decoderSimpleBytes) kStructSimple(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var rvkencname []byte + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderSimpleBytes) kStruct(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + var mf MissingFielder + if ti.flagMissingFielder { + mf = rv2i(rv).(MissingFielder) + } else if ti.flagMissingFielderPtr { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder) + } + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var name2 []byte + var rvkencname []byte + tkt := ti.keyType + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + + if tkt == valueTypeString { + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + } else if tkt == valueTypeInt { + rvkencname = strconv.AppendInt(d.b[:0], d.d.DecodeInt64(), 10) + } else if tkt == valueTypeUint { + rvkencname = strconv.AppendUint(d.b[:0], d.d.DecodeUint64(), 10) + } else if tkt == valueTypeFloat { + rvkencname = strconv.AppendFloat(d.b[:0], d.d.DecodeFloat64(), 'f', -1, 64) + } else { + halt.errorStr2("invalid struct key type: ", ti.keyType.String()) + } + + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else if mf != nil { + + name2 = append(name2[:0], rvkencname...) + var f interface{} + d.decode(&f) + if !mf.CodecMissingField(name2, f) && d.h.ErrorIfNoField { + halt.errorStr2("no matching struct field when decoding stream map with key: ", stringView(name2)) + } + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderSimpleBytes) kSlice(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + rvCanset := rv.CanSet() + + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + rvbs := rvGetBytes(rv) + if rvCanset { + bs2, bst := d.decodeBytesInto(rvbs, false) + if bst != dBytesIntoParamOut { + rvSetBytes(rv, bs2) + } + } else { + + d.decodeBytesInto(rvbs[:len(rvbs):len(rvbs)], true) + } + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset { + if rvIsNil(rv) { + rvSetDirect(rv, rvSliceZeroCap(ti.rt)) + } else { + rvSetSliceLen(rv, 0) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem0Mut := !scalarBitset.isset(ti.elemkind) + rtelem := ti.elem + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnSimpleBytes + + var rvChanged bool + + var rv0 = rv + var rv9 reflect.Value + + rvlen := rvLenSlice(rv) + rvcap := rvCapSlice(rv) + maxInitLen := d.maxInitLen() + hasLen := containerLenS >= 0 + if hasLen { + if containerLenS > rvcap { + oldRvlenGtZero := rvlen > 0 + rvlen1 := int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + if rvlen1 == rvlen { + } else if rvlen1 <= rvcap { + if rvCanset { + rvlen = rvlen1 + rvSetSliceLen(rv, rvlen) + } + } else if rvCanset { + rvlen = rvlen1 + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + if rvChanged && oldRvlenGtZero && rtelem0Mut { + rvCopySlice(rv, rv0, rtelem) + } + } else if containerLenS != rvlen { + if rvCanset { + rvlen = containerLenS + rvSetSliceLen(rv, rvlen) + } + } + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } + + var j int + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if rvCanset { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + + if rvlen < rvcap { + rvlen = rvcap + if rvCanset { + rvSetSliceLen(rv, rvlen) + } else if rvChanged { + rv = rvSlice(rv, rvlen) + } else { + halt.onerror(errExpandSliceCannotChange) + } + } else { + if !(rvCanset || rvChanged) { + halt.onerror(errExpandSliceCannotChange) + } + rv, rvcap, rvCanset = rvGrowSlice(rv, f.ti, rvcap, 1) + + rvlen = rvcap + rvChanged = !rvCanset + } + } + + rv9 = rvArrayIndex(rv, j, f.ti, true) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if j < rvlen { + if rvCanset { + rvSetSliceLen(rv, j) + } else if rvChanged { + rv = rvSlice(rv, j) + } + + } else if j == 0 && rvIsNil(rv) { + if rvCanset { + rv = rvSliceZeroCap(ti.rt) + rvCanset = false + rvChanged = true + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } +} + +func (d *decoderSimpleBytes) kArray(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + ctyp := d.d.ContainerType() + if handleBytesWithinKArray && (ctyp == valueTypeBytes || ctyp == valueTypeString) { + + if ti.elemkind != uint8(reflect.Uint8) { + halt.errorf("bytes/string in stream can decode into array of bytes, but not %v", ti.rt) + } + rvbs := rvGetArrayBytes(rv, nil) + d.decodeBytesInto(rvbs, true) + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var rv9 reflect.Value + + rvlen := rv.Len() + hasLen := containerLenS >= 0 + if hasLen && containerLenS > rvlen { + halt.errorf("cannot decode into array with length: %v, less than container length: %v", any(rvlen), any(containerLenS)) + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + var fn *decFnSimpleBytes + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } else { + fn = d.fn(rtelem) + } + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + d.arrayCannotExpand(rvlen, j+1) + d.swallow() + continue + } + + rv9 = rvArrayIndex(rv, j, f.ti, false) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleBytes) kChan(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + if ti.chandir&uint8(reflect.SendDir) == 0 { + halt.errorStr("receive-only channel cannot be decoded") + } + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + bs2, _ := d.d.DecodeBytes() + irv := rv2i(rv) + ch, ok := irv.(chan<- byte) + if !ok { + ch = irv.(chan byte) + } + for _, b := range bs2 { + ch <- b + } + return + } + + var rvCanset = rv.CanSet() + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset && rvIsNil(rv) { + rvSetDirect(rv, reflect.MakeChan(ti.rt, 0)) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + useTransient := decUseTransient && ti.elemkind != byte(reflect.Ptr) && ti.tielem.flagCanTransient + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnSimpleBytes + + var rvChanged bool + var rv0 = rv + var rv9 reflect.Value + + var rvlen int + hasLen := containerLenS >= 0 + maxInitLen := d.maxInitLen() + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if hasLen { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + } else { + rvlen = decDefChanCap + } + if rvCanset { + rv = reflect.MakeChan(ti.rt, rvlen) + rvChanged = true + } else { + halt.errorStr("cannot decode into non-settable chan") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if rv9.IsValid() { + rvSetZero(rv9) + } else if useTransient { + rv9 = d.perType.TransientAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } else { + rv9 = rvZeroAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } + if !d.d.TryNil() { + d.decodeValueNoCheckNil(rv9, fn) + } + rv.Send(rv9) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } + +} + +func (d *decoderSimpleBytes) kMap(f *decFnInfo, rv reflect.Value) { + _ = d.d + containerLen := d.mapStart(d.d.ReadMapStart()) + ti := f.ti + if rvIsNil(rv) { + rvlen := int(decInferLen(containerLen, d.maxInitLen(), uint(ti.keysize+ti.elemsize))) + rvSetDirect(rv, makeMapReflect(ti.rt, rvlen)) + } + + if containerLen == 0 { + d.mapEnd() + return + } + + ktype, vtype := ti.key, ti.elem + ktypeId := rt2id(ktype) + vtypeKind := reflect.Kind(ti.elemkind) + ktypeKind := reflect.Kind(ti.keykind) + mparams := getMapReqParams(ti) + + vtypePtr := vtypeKind == reflect.Ptr + ktypePtr := ktypeKind == reflect.Ptr + + vTransient := decUseTransient && !vtypePtr && ti.tielem.flagCanTransient + + kTransient := vTransient && !ktypePtr && ti.tikey.flagCanTransient + + var vtypeElem reflect.Type + + var keyFn, valFn *decFnSimpleBytes + var ktypeLo, vtypeLo = ktype, vtype + + if ktypeKind == reflect.Ptr { + for ktypeLo = ktype.Elem(); ktypeLo.Kind() == reflect.Ptr; ktypeLo = ktypeLo.Elem() { + } + } + + if vtypePtr { + vtypeElem = vtype.Elem() + for vtypeLo = vtypeElem; vtypeLo.Kind() == reflect.Ptr; vtypeLo = vtypeLo.Elem() { + } + } + + rvkMut := !scalarBitset.isset(ti.keykind) + rvvMut := !scalarBitset.isset(ti.elemkind) + rvvCanNil := isnilBitset.isset(ti.elemkind) + + var rvk, rvkn, rvv, rvvn, rvva, rvvz reflect.Value + + var doMapGet, doMapSet bool + + if !d.h.MapValueReset { + if rvvMut && (vtypeKind != reflect.Interface || !d.h.InterfaceReset) { + doMapGet = true + rvva = mapAddrLoopvarRV(vtype, vtypeKind) + } + } + + ktypeIsString := ktypeId == stringTypId + ktypeIsIntf := ktypeId == intfTypId + hasLen := containerLen >= 0 + + var kstr2bs []byte + var kstr string + + var mapKeyStringSharesBytesBuf bool + var att dBytesAttachState + + var vElem, kElem reflect.Type + kbuiltin := ti.tikey.flagDecBuiltin && ti.keykind != uint8(reflect.Slice) + vbuiltin := ti.tielem.flagDecBuiltin + if kbuiltin && ktypePtr { + kElem = ti.key.Elem() + } + if vbuiltin && vtypePtr { + vElem = ti.elem.Elem() + } + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + mapKeyStringSharesBytesBuf = false + kstr = "" + if j == 0 { + + if kTransient { + rvk = d.perType.TransientAddr2K(ktype, ktypeKind) + } else { + rvk = rvZeroAddrK(ktype, ktypeKind) + } + if !rvkMut { + rvkn = rvk + } + if !rvvMut { + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + } + if !ktypeIsString && keyFn == nil { + keyFn = d.fn(ktypeLo) + } + if valFn == nil { + valFn = d.fn(vtypeLo) + } + } else if rvkMut { + rvSetZero(rvk) + } else { + rvk = rvkn + } + + d.mapElemKey(j == 0) + + if d.d.TryNil() { + rvSetZero(rvk) + } else if ktypeIsString { + kstr2bs, att = d.d.DecodeStringAsBytes() + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, att) + rvSetString(rvk, kstr) + } else { + if kbuiltin { + if ktypePtr { + if rvIsNil(rvk) { + rvSetDirect(rvk, reflect.New(kElem)) + } + d.decode(rv2i(rvk)) + } else { + d.decode(rv2i(rvAddr(rvk, ti.tikey.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvk, keyFn) + } + + if ktypeIsIntf { + if rvk2 := rvk.Elem(); rvk2.IsValid() && rvk2.Type() == uint8SliceTyp { + kstr2bs = rvGetBytes(rvk2) + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, dBytesAttachView) + rvSetIntf(rvk, rv4istr(kstr)) + } + + } + } + + if mapKeyStringSharesBytesBuf && d.bufio { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + mapKeyStringSharesBytesBuf = false + } + + d.mapElemValue() + + if d.d.TryNil() { + if mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + + if !rvvz.IsValid() { + rvvz = rvZeroK(vtype, vtypeKind) + } + mapSet(rv, rvk, rvvz, mparams) + continue + } + + doMapSet = true + + if !rvvMut { + rvv = rvvn + } else if !doMapGet { + goto NEW_RVV + } else { + rvv = mapGet(rv, rvk, rvva, mparams) + if !rvv.IsValid() || (rvvCanNil && rvIsNil(rvv)) { + goto NEW_RVV + } + switch vtypeKind { + case reflect.Ptr, reflect.Map: + doMapSet = false + case reflect.Interface: + + rvvn = rvv.Elem() + if k := rvvn.Kind(); (k == reflect.Ptr || k == reflect.Map) && !rvIsNil(rvvn) { + d.decodeValueNoCheckNil(rvvn, nil) + continue + } + + rvvn = rvZeroAddrK(vtype, vtypeKind) + rvSetIntf(rvvn, rvv) + rvv = rvvn + default: + + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + rvSetDirect(rvvn, rvv) + rvv = rvvn + } + } + goto DECODE_VALUE_NO_CHECK_NIL + + NEW_RVV: + if vtypePtr { + rvv = reflect.New(vtypeElem) + } else if vTransient { + rvv = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvv = rvZeroAddrK(vtype, vtypeKind) + } + + DECODE_VALUE_NO_CHECK_NIL: + if doMapSet && mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + if vbuiltin { + if vtypePtr { + if rvIsNil(rvv) { + rvSetDirect(rvv, reflect.New(vElem)) + } + d.decode(rv2i(rvv)) + } else { + d.decode(rv2i(rvAddr(rvv, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvv, valFn) + } + if doMapSet { + mapSet(rv, rvk, rvv, mparams) + } + } + + d.mapEnd() +} + +func (d *decoderSimpleBytes) init(h Handle) { + initHandle(h) + callMake(&d.d) + d.hh = h + d.h = h.getBasicHandle() + + d.err = errDecoderNotInitialized + + if d.h.InternString && d.is == nil { + d.is.init() + } + + d.fp = d.d.init(h, &d.decoderBase, d).(*fastpathDsSimpleBytes) + + if d.bytes { + d.rtidFn = &d.h.rtidFnsDecBytes + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtBytes + } else { + d.bufio = d.h.ReaderBufferSize > 0 + d.rtidFn = &d.h.rtidFnsDecIO + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtIO + } + + d.reset() + +} + +func (d *decoderSimpleBytes) reset() { + d.d.reset() + d.err = nil + d.c = 0 + d.depth = 0 + d.calls = 0 + + d.maxdepth = decDefMaxDepth + if d.h.MaxDepth > 0 { + d.maxdepth = d.h.MaxDepth + } + d.mtid = 0 + d.stid = 0 + d.mtr = false + d.str = false + if d.h.MapType != nil { + d.mtid = rt2id(d.h.MapType) + _, d.mtr = fastpathAvIndex(d.mtid) + } + if d.h.SliceType != nil { + d.stid = rt2id(d.h.SliceType) + _, d.str = fastpathAvIndex(d.stid) + } +} + +func (d *decoderSimpleBytes) Reset(r io.Reader) { + if d.bytes { + halt.onerror(errDecNoResetBytesWithReader) + } + d.reset() + if r == nil { + r = &eofReader + } + d.d.resetInIO(r) +} + +func (d *decoderSimpleBytes) ResetBytes(in []byte) { + if !d.bytes { + halt.onerror(errDecNoResetReaderWithBytes) + } + d.resetBytes(in) +} + +func (d *decoderSimpleBytes) resetBytes(in []byte) { + d.reset() + if in == nil { + in = zeroByteSlice + } + d.d.resetInBytes(in) +} + +func (d *decoderSimpleBytes) ResetString(s string) { + d.ResetBytes(bytesView(s)) +} + +func (d *decoderSimpleBytes) Decode(v interface{}) (err error) { + + defer panicValToErr(d, callRecoverSentinel, &d.err, &err, debugging) + d.mustDecode(v) + return +} + +func (d *decoderSimpleBytes) MustDecode(v interface{}) { + defer panicValToErr(d, callRecoverSentinel, &d.err, nil, true) + d.mustDecode(v) + return +} + +func (d *decoderSimpleBytes) mustDecode(v interface{}) { + halt.onerror(d.err) + if d.hh == nil { + halt.onerror(errNoFormatHandle) + } + + d.calls++ + d.decode(v) + d.calls-- +} + +func (d *decoderSimpleBytes) Release() {} + +func (d *decoderSimpleBytes) swallow() { + d.d.nextValueBytes() +} + +func (d *decoderSimpleBytes) nextValueBytes() []byte { + return d.d.nextValueBytes() +} + +func (d *decoderSimpleBytes) decode(iv interface{}) { + _ = d.d + + rv, ok := isNil(iv, true) + if ok { + halt.onerror(errCannotDecodeIntoNil) + } + + switch v := iv.(type) { + + case *string: + *v = d.detach2Str(d.d.DecodeStringAsBytes()) + case *bool: + *v = d.d.DecodeBool() + case *int: + *v = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + case *int8: + *v = int8(chkOvf.IntV(d.d.DecodeInt64(), 8)) + case *int16: + *v = int16(chkOvf.IntV(d.d.DecodeInt64(), 16)) + case *int32: + *v = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + case *int64: + *v = d.d.DecodeInt64() + case *uint: + *v = uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *uint8: + *v = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + case *uint16: + *v = uint16(chkOvf.UintV(d.d.DecodeUint64(), 16)) + case *uint32: + *v = uint32(chkOvf.UintV(d.d.DecodeUint64(), 32)) + case *uint64: + *v = d.d.DecodeUint64() + case *uintptr: + *v = uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *float32: + *v = d.d.DecodeFloat32() + case *float64: + *v = d.d.DecodeFloat64() + case *complex64: + *v = complex(d.d.DecodeFloat32(), 0) + case *complex128: + *v = complex(d.d.DecodeFloat64(), 0) + case *[]byte: + *v, _ = d.decodeBytesInto(*v, false) + case []byte: + + d.decodeBytesInto(v[:len(v):len(v)], true) + case *time.Time: + *v = d.d.DecodeTime() + case *Raw: + *v = d.rawBytes() + + case *interface{}: + d.decodeValue(rv4iptr(v), nil) + + case reflect.Value: + if ok, _ = isDecodeable(v); !ok { + d.haltAsNotDecodeable(v) + } + d.decodeValue(v, nil) + + default: + + if skipFastpathTypeSwitchInDirectCall || !d.dh.fastpathDecodeTypeSwitch(iv, d) { + if !rv.IsValid() { + rv = reflect.ValueOf(iv) + } + if ok, _ = isDecodeable(rv); !ok { + d.haltAsNotDecodeable(rv) + } + d.decodeValue(rv, nil) + } + } +} + +func (d *decoderSimpleBytes) decodeValue(rv reflect.Value, fn *decFnSimpleBytes) { + if d.d.TryNil() { + decSetNonNilRV2Zero(rv) + } else { + d.decodeValueNoCheckNil(rv, fn) + } +} + +func (d *decoderSimpleBytes) decodeValueNoCheckNil(rv reflect.Value, fn *decFnSimpleBytes) { + + var rvp reflect.Value + var rvpValid bool +PTR: + if rv.Kind() == reflect.Ptr { + rvpValid = true + if rvIsNil(rv) { + rvSetDirect(rv, reflect.New(rv.Type().Elem())) + } + rvp = rv + rv = rv.Elem() + goto PTR + } + + if fn == nil { + fn = d.fn(rv.Type()) + } + if fn.i.addrD { + if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else if fn.i.addrDf { + halt.errorStr("cannot decode into a non-pointer value") + } + } + fn.fd(d, &fn.i, rv) +} + +func (d *decoderSimpleBytes) decodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + d.decodeValue(baseRV(v), d.fn(t)) + } else { + d.decodeValue(baseRV(v), d.fnNoExt(t)) + } +} + +func (d *decoderSimpleBytes) structFieldNotFound(index int, rvkencname string) { + + if d.h.ErrorIfNoField { + if index >= 0 { + halt.errorInt("no matching struct field found when decoding stream array at index ", int64(index)) + } else if rvkencname != "" { + halt.errorStr2("no matching struct field found when decoding stream map with key ", rvkencname) + } + } + d.swallow() +} + +func (d *decoderSimpleBytes) decodeBytesInto(out []byte, mustFit bool) (v []byte, state dBytesIntoState) { + v, att := d.d.DecodeBytes() + if cap(v) == 0 || (att >= dBytesAttachViewZerocopy && !mustFit) { + + return + } + if len(v) == 0 { + v = zeroByteSlice + return + } + if len(out) == len(v) { + state = dBytesIntoParamOut + } else if cap(out) >= len(v) { + out = out[:len(v)] + state = dBytesIntoParamOutSlice + } else if mustFit { + halt.errorf("bytes capacity insufficient for decoded bytes: got/expected: %d/%d", len(v), len(out)) + } else { + out = make([]byte, len(v)) + state = dBytesIntoNew + } + copy(out, v) + v = out + return +} + +func (d *decoderSimpleBytes) rawBytes() (v []byte) { + + v = d.d.nextValueBytes() + if d.bytes && !d.h.ZeroCopy { + vv := make([]byte, len(v)) + copy(vv, v) + v = vv + } + return +} + +func (d *decoderSimpleBytes) wrapErr(v error, err *error) { + *err = wrapCodecErr(v, d.hh.Name(), d.d.NumBytesRead(), false) +} + +func (d *decoderSimpleBytes) NumBytesRead() int { + return d.d.NumBytesRead() +} + +func (d *decoderSimpleBytes) containerNext(j, containerLen int, hasLen bool) bool { + + if hasLen { + return j < containerLen + } + return !d.d.CheckBreak() +} + +func (d *decoderSimpleBytes) mapElemKey(firstTime bool) { + d.d.ReadMapElemKey(firstTime) + d.c = containerMapKey +} + +func (d *decoderSimpleBytes) mapElemValue() { + d.d.ReadMapElemValue() + d.c = containerMapValue +} + +func (d *decoderSimpleBytes) mapEnd() { + d.d.ReadMapEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderSimpleBytes) arrayElem(firstTime bool) { + d.d.ReadArrayElem(firstTime) + d.c = containerArrayElem +} + +func (d *decoderSimpleBytes) arrayEnd() { + d.d.ReadArrayEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderSimpleBytes) interfaceExtConvertAndDecode(v interface{}, ext InterfaceExt) { + + var vv interface{} + d.decode(&vv) + ext.UpdateExt(v, vv) + +} + +func (d *decoderSimpleBytes) fn(t reflect.Type) *decFnSimpleBytes { + return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false) +} + +func (d *decoderSimpleBytes) fnNoExt(t reflect.Type) *decFnSimpleBytes { + return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true) +} + +func (helperDecDriverSimpleBytes) newDecoderBytes(in []byte, h Handle) *decoderSimpleBytes { + var c1 decoderSimpleBytes + c1.bytes = true + c1.init(h) + c1.ResetBytes(in) + return &c1 +} + +func (helperDecDriverSimpleBytes) newDecoderIO(in io.Reader, h Handle) *decoderSimpleBytes { + var c1 decoderSimpleBytes + c1.init(h) + c1.Reset(in) + return &c1 +} + +func (helperDecDriverSimpleBytes) decFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathDsSimpleBytes) (f *fastpathDSimpleBytes, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperDecDriverSimpleBytes) decFindRtidFn(s []decRtidFnSimpleBytes, rtid uintptr) (i uint, fn *decFnSimpleBytes) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperDecDriverSimpleBytes) decFromRtidFnSlice(fns *atomicRtidFnSlice) (s []decRtidFnSimpleBytes) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]decRtidFnSimpleBytes](v)) + } + return +} + +func (dh helperDecDriverSimpleBytes) decFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, x *BasicHandle, fp *fastpathDsSimpleBytes, + checkExt bool) (fn *decFnSimpleBytes) { + return dh.decFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperDecDriverSimpleBytes) decFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsSimpleBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnSimpleBytes) { + rtid := rt2id(rt) + var sp []decRtidFnSimpleBytes = dh.decFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.decFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.decFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperDecDriverSimpleBytes) decFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsSimpleBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnSimpleBytes) { + + fn = dh.decFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []decRtidFnSimpleBytes + mu.Lock() + sp = dh.decFromRtidFnSlice(fns) + + if sp == nil { + sp = []decRtidFnSimpleBytes{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.decFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]decRtidFnSimpleBytes, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = decRtidFnSimpleBytes{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperDecDriverSimpleBytes) decFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathDsSimpleBytes, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnSimpleBytes) { + fn = new(decFnSimpleBytes) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + fi.addrDf = true + + if rtid == timeTypId && timeBuiltin { + fn.fd = (*decoderSimpleBytes).kTime + } else if rtid == rawTypId { + fn.fd = (*decoderSimpleBytes).raw + } else if rtid == rawExtTypId { + fn.fd = (*decoderSimpleBytes).rawExt + fi.addrD = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fd = (*decoderSimpleBytes).ext + fi.addrD = true + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fd = (*decoderSimpleBytes).selferUnmarshal + fi.addrD = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fd = (*decoderSimpleBytes).binaryUnmarshal + fi.addrD = ti.flagBinaryUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fd = (*decoderSimpleBytes).jsonUnmarshal + fi.addrD = ti.flagJsonUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fd = (*decoderSimpleBytes).textUnmarshal + fi.addrD = ti.flagTextUnmarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fd = fp[idx].decfn + fi.addrD = true + fi.addrDf = false + if rk == reflect.Array { + fi.addrD = false + } + } + } else { + + xfe, xrt := dh.decFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf2 := xfe.decfn + if rk == reflect.Array { + fi.addrD = false + fn.fd = func(d *decoderSimpleBytes, xf *decFnInfo, xrv reflect.Value) { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } else { + fi.addrD = true + fi.addrDf = false + xptr2rt := reflect.PointerTo(xrt) + fn.fd = func(d *decoderSimpleBytes, xf *decFnInfo, xrv reflect.Value) { + if xrv.Kind() == reflect.Ptr { + xfnf2(d, xf, rvConvert(xrv, xptr2rt)) + } else { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } + } + } + } + } + if fn.fd == nil { + switch rk { + case reflect.Bool: + fn.fd = (*decoderSimpleBytes).kBool + case reflect.String: + fn.fd = (*decoderSimpleBytes).kString + case reflect.Int: + fn.fd = (*decoderSimpleBytes).kInt + case reflect.Int8: + fn.fd = (*decoderSimpleBytes).kInt8 + case reflect.Int16: + fn.fd = (*decoderSimpleBytes).kInt16 + case reflect.Int32: + fn.fd = (*decoderSimpleBytes).kInt32 + case reflect.Int64: + fn.fd = (*decoderSimpleBytes).kInt64 + case reflect.Uint: + fn.fd = (*decoderSimpleBytes).kUint + case reflect.Uint8: + fn.fd = (*decoderSimpleBytes).kUint8 + case reflect.Uint16: + fn.fd = (*decoderSimpleBytes).kUint16 + case reflect.Uint32: + fn.fd = (*decoderSimpleBytes).kUint32 + case reflect.Uint64: + fn.fd = (*decoderSimpleBytes).kUint64 + case reflect.Uintptr: + fn.fd = (*decoderSimpleBytes).kUintptr + case reflect.Float32: + fn.fd = (*decoderSimpleBytes).kFloat32 + case reflect.Float64: + fn.fd = (*decoderSimpleBytes).kFloat64 + case reflect.Complex64: + fn.fd = (*decoderSimpleBytes).kComplex64 + case reflect.Complex128: + fn.fd = (*decoderSimpleBytes).kComplex128 + case reflect.Chan: + fn.fd = (*decoderSimpleBytes).kChan + case reflect.Slice: + fn.fd = (*decoderSimpleBytes).kSlice + case reflect.Array: + fi.addrD = false + fn.fd = (*decoderSimpleBytes).kArray + case reflect.Struct: + if ti.simple { + fn.fd = (*decoderSimpleBytes).kStructSimple + } else { + fn.fd = (*decoderSimpleBytes).kStruct + } + case reflect.Map: + fn.fd = (*decoderSimpleBytes).kMap + case reflect.Interface: + + fn.fd = (*decoderSimpleBytes).kInterface + default: + + fn.fd = (*decoderSimpleBytes).kErr + } + } + } + return +} +func (e *simpleEncDriverBytes) EncodeNil() { + e.w.writen1(simpleVdNil) +} + +func (e *simpleEncDriverBytes) EncodeBool(b bool) { + if e.h.EncZeroValuesAsNil && e.e.c != containerMapKey && !b { + e.EncodeNil() + return + } + if b { + e.w.writen1(simpleVdTrue) + } else { + e.w.writen1(simpleVdFalse) + } +} + +func (e *simpleEncDriverBytes) EncodeFloat32(f float32) { + if e.h.EncZeroValuesAsNil && e.e.c != containerMapKey && f == 0.0 { + e.EncodeNil() + return + } + e.w.writen1(simpleVdFloat32) + e.w.writen4(bigen.PutUint32(math.Float32bits(f))) +} + +func (e *simpleEncDriverBytes) EncodeFloat64(f float64) { + if e.h.EncZeroValuesAsNil && e.e.c != containerMapKey && f == 0.0 { + e.EncodeNil() + return + } + e.w.writen1(simpleVdFloat64) + e.w.writen8(bigen.PutUint64(math.Float64bits(f))) +} + +func (e *simpleEncDriverBytes) EncodeInt(v int64) { + if v < 0 { + e.encUint(uint64(-v), simpleVdNegInt) + } else { + e.encUint(uint64(v), simpleVdPosInt) + } +} + +func (e *simpleEncDriverBytes) EncodeUint(v uint64) { + e.encUint(v, simpleVdPosInt) +} + +func (e *simpleEncDriverBytes) encUint(v uint64, bd uint8) { + if e.h.EncZeroValuesAsNil && e.e.c != containerMapKey && v == 0 { + e.EncodeNil() + return + } + if v <= math.MaxUint8 { + e.w.writen2(bd, uint8(v)) + } else if v <= math.MaxUint16 { + e.w.writen1(bd + 1) + e.w.writen2(bigen.PutUint16(uint16(v))) + } else if v <= math.MaxUint32 { + e.w.writen1(bd + 2) + e.w.writen4(bigen.PutUint32(uint32(v))) + } else { + e.w.writen1(bd + 3) + e.w.writen8(bigen.PutUint64(v)) + } +} + +func (e *simpleEncDriverBytes) encLen(bd byte, length int) { + if length == 0 { + e.w.writen1(bd) + } else if length <= math.MaxUint8 { + e.w.writen1(bd + 1) + e.w.writen1(uint8(length)) + } else if length <= math.MaxUint16 { + e.w.writen1(bd + 2) + e.w.writen2(bigen.PutUint16(uint16(length))) + } else if int64(length) <= math.MaxUint32 { + e.w.writen1(bd + 3) + e.w.writen4(bigen.PutUint32(uint32(length))) + } else { + e.w.writen1(bd + 4) + e.w.writen8(bigen.PutUint64(uint64(length))) + } +} + +func (e *simpleEncDriverBytes) EncodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + var bs0, bs []byte + if ext == SelfExt { + bs0 = e.e.blist.get(1024) + bs = bs0 + sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, true) }) + } else { + bs = ext.WriteExt(v) + } + if bs == nil { + e.writeNilBytes() + goto END + } + e.encodeExtPreamble(uint8(xtag), len(bs)) + e.w.writeb(bs) +END: + if ext == SelfExt { + e.e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.e.blist.put(bs0) + } + } +} + +func (e *simpleEncDriverBytes) EncodeRawExt(re *RawExt) { + e.encodeExtPreamble(uint8(re.Tag), len(re.Data)) + e.w.writeb(re.Data) +} + +func (e *simpleEncDriverBytes) encodeExtPreamble(xtag byte, length int) { + e.encLen(simpleVdExt, length) + e.w.writen1(xtag) +} + +func (e *simpleEncDriverBytes) WriteArrayStart(length int) { + e.encLen(simpleVdArray, length) +} + +func (e *simpleEncDriverBytes) WriteMapStart(length int) { + e.encLen(simpleVdMap, length) +} + +func (e *simpleEncDriverBytes) WriteArrayEmpty() { + + e.w.writen1(simpleVdArray) +} + +func (e *simpleEncDriverBytes) WriteMapEmpty() { + + e.w.writen1(simpleVdMap) +} + +func (e *simpleEncDriverBytes) EncodeString(v string) { + if e.h.EncZeroValuesAsNil && e.e.c != containerMapKey && v == "" { + e.EncodeNil() + return + } + if e.h.StringToRaw { + e.encLen(simpleVdByteArray, len(v)) + } else { + e.encLen(simpleVdString, len(v)) + } + e.w.writestr(v) +} + +func (e *simpleEncDriverBytes) EncodeStringNoEscape4Json(v string) { e.EncodeString(v) } + +func (e *simpleEncDriverBytes) EncodeStringBytesRaw(v []byte) { + + e.encLen(simpleVdByteArray, len(v)) + e.w.writeb(v) +} + +func (e *simpleEncDriverBytes) EncodeBytes(v []byte) { + if v == nil { + e.writeNilBytes() + return + } + e.EncodeStringBytesRaw(v) +} + +func (e *simpleEncDriverBytes) encodeNilBytes() { + b := byte(simpleVdNil) + if e.h.NilCollectionToZeroLength { + b = simpleVdArray + } + e.w.writen1(b) +} + +func (e *simpleEncDriverBytes) writeNilOr(v byte) { + if !e.h.NilCollectionToZeroLength { + v = simpleVdNil + } + e.w.writen1(v) +} + +func (e *simpleEncDriverBytes) writeNilArray() { + e.writeNilOr(simpleVdArray) +} + +func (e *simpleEncDriverBytes) writeNilMap() { + e.writeNilOr(simpleVdMap) +} + +func (e *simpleEncDriverBytes) writeNilBytes() { + e.writeNilOr(simpleVdByteArray) +} + +func (e *simpleEncDriverBytes) EncodeTime(t time.Time) { + + if t.IsZero() { + e.EncodeNil() + return + } + v, err := t.MarshalBinary() + halt.onerror(err) + e.w.writen2(simpleVdTime, uint8(len(v))) + e.w.writeb(v) +} + +func (d *simpleDecDriverBytes) readNextBd() { + d.bd = d.r.readn1() + d.bdRead = true +} + +func (d *simpleDecDriverBytes) advanceNil() (null bool) { + if !d.bdRead { + d.readNextBd() + } + if d.bd == simpleVdNil { + d.bdRead = false + return true + } + return +} + +func (d *simpleDecDriverBytes) ContainerType() (vt valueType) { + if !d.bdRead { + d.readNextBd() + } + switch d.bd { + case simpleVdNil: + d.bdRead = false + return valueTypeNil + case simpleVdByteArray, simpleVdByteArray + 1, + simpleVdByteArray + 2, simpleVdByteArray + 3, simpleVdByteArray + 4: + return valueTypeBytes + case simpleVdString, simpleVdString + 1, + simpleVdString + 2, simpleVdString + 3, simpleVdString + 4: + return valueTypeString + case simpleVdArray, simpleVdArray + 1, + simpleVdArray + 2, simpleVdArray + 3, simpleVdArray + 4: + return valueTypeArray + case simpleVdMap, simpleVdMap + 1, + simpleVdMap + 2, simpleVdMap + 3, simpleVdMap + 4: + return valueTypeMap + } + return valueTypeUnset +} + +func (d *simpleDecDriverBytes) TryNil() bool { + return d.advanceNil() +} + +func (d *simpleDecDriverBytes) decFloat() (f float64, ok bool) { + ok = true + switch d.bd { + case simpleVdFloat32: + f = float64(math.Float32frombits(bigen.Uint32(d.r.readn4()))) + case simpleVdFloat64: + f = math.Float64frombits(bigen.Uint64(d.r.readn8())) + default: + ok = false + } + return +} + +func (d *simpleDecDriverBytes) decInteger() (ui uint64, neg, ok bool) { + ok = true + switch d.bd { + case simpleVdPosInt: + ui = uint64(d.r.readn1()) + case simpleVdPosInt + 1: + ui = uint64(bigen.Uint16(d.r.readn2())) + case simpleVdPosInt + 2: + ui = uint64(bigen.Uint32(d.r.readn4())) + case simpleVdPosInt + 3: + ui = uint64(bigen.Uint64(d.r.readn8())) + case simpleVdNegInt: + ui = uint64(d.r.readn1()) + neg = true + case simpleVdNegInt + 1: + ui = uint64(bigen.Uint16(d.r.readn2())) + neg = true + case simpleVdNegInt + 2: + ui = uint64(bigen.Uint32(d.r.readn4())) + neg = true + case simpleVdNegInt + 3: + ui = uint64(bigen.Uint64(d.r.readn8())) + neg = true + default: + ok = false + + } + + return +} + +func (d *simpleDecDriverBytes) DecodeInt64() (i int64) { + if d.advanceNil() { + return + } + v1, v2, v3 := d.decInteger() + i = decNegintPosintFloatNumberHelper{d}.int64(v1, v2, v3, false) + d.bdRead = false + return +} + +func (d *simpleDecDriverBytes) DecodeUint64() (ui uint64) { + if d.advanceNil() { + return + } + ui = decNegintPosintFloatNumberHelper{d}.uint64(d.decInteger()) + d.bdRead = false + return +} + +func (d *simpleDecDriverBytes) DecodeFloat64() (f float64) { + if d.advanceNil() { + return + } + v1, v2 := d.decFloat() + f = decNegintPosintFloatNumberHelper{d}.float64(v1, v2, false) + d.bdRead = false + return +} + +func (d *simpleDecDriverBytes) DecodeBool() (b bool) { + if d.advanceNil() { + return + } + if d.bd == simpleVdFalse { + } else if d.bd == simpleVdTrue { + b = true + } else { + halt.errorf("cannot decode bool - %s: %x", msgBadDesc, d.bd) + } + d.bdRead = false + return +} + +func (d *simpleDecDriverBytes) ReadMapStart() (length int) { + if d.advanceNil() { + return containerLenNil + } + d.bdRead = false + return d.decLen() +} + +func (d *simpleDecDriverBytes) ReadArrayStart() (length int) { + if d.advanceNil() { + return containerLenNil + } + d.bdRead = false + return d.decLen() +} + +func (d *simpleDecDriverBytes) uint2Len(ui uint64) int { + if chkOvf.Uint(ui, intBitsize) { + halt.errorf("overflow integer: %v", ui) + } + return int(ui) +} + +func (d *simpleDecDriverBytes) decLen() int { + switch d.bd & 7 { + case 0: + return 0 + case 1: + return int(d.r.readn1()) + case 2: + return int(bigen.Uint16(d.r.readn2())) + case 3: + return d.uint2Len(uint64(bigen.Uint32(d.r.readn4()))) + case 4: + return d.uint2Len(bigen.Uint64(d.r.readn8())) + } + halt.errorf("cannot read length: bd%%8 must be in range 0..4. Got: %d", d.bd%8) + return -1 +} + +func (d *simpleDecDriverBytes) DecodeStringAsBytes() ([]byte, dBytesAttachState) { + return d.DecodeBytes() +} + +func (d *simpleDecDriverBytes) DecodeBytes() (bs []byte, state dBytesAttachState) { + if d.advanceNil() { + return + } + var cond bool + + if d.bd >= simpleVdArray && d.bd <= simpleVdArray+4 { + slen := d.ReadArrayStart() + bs, cond = usableByteSlice(d.d.buf, slen) + for i := 0; i < len(bs); i++ { + bs[i] = uint8(chkOvf.UintV(d.DecodeUint64(), 8)) + } + for i := len(bs); i < slen; i++ { + bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) + } + if cond { + d.d.buf = bs + } + state = dBytesAttachBuffer + + return + } + + clen := d.decLen() + d.bdRead = false + bs, cond = d.r.readxb(uint(clen)) + state = d.d.attachState(cond) + return +} + +func (d *simpleDecDriverBytes) DecodeTime() (t time.Time) { + if d.advanceNil() { + return + } + if d.bd != simpleVdTime { + halt.errorf("invalid descriptor for time.Time - expect 0x%x, received 0x%x", simpleVdTime, d.bd) + } + d.bdRead = false + clen := uint(d.r.readn1()) + b := d.r.readx(clen) + halt.onerror((&t).UnmarshalBinary(b)) + return +} + +func (d *simpleDecDriverBytes) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + xbs, _, _, ok := d.decodeExtV(ext != nil, xtag) + if !ok { + return + } + if ext == SelfExt { + sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, true) }) + } else { + ext.ReadExt(rv, xbs) + } +} + +func (d *simpleDecDriverBytes) DecodeRawExt(re *RawExt) { + xbs, realxtag, state, ok := d.decodeExtV(false, 0) + if !ok { + return + } + re.Tag = uint64(realxtag) + re.setData(xbs, state >= dBytesAttachViewZerocopy) +} + +func (d *simpleDecDriverBytes) decodeExtV(verifyTag bool, xtagIn uint64) (xbs []byte, xtag byte, bstate dBytesAttachState, ok bool) { + if xtagIn > 0xff { + halt.errorf("ext: tag must be <= 0xff; got: %v", xtagIn) + } + if d.advanceNil() { + return + } + tag := uint8(xtagIn) + switch d.bd { + case simpleVdExt, simpleVdExt + 1, simpleVdExt + 2, simpleVdExt + 3, simpleVdExt + 4: + l := d.decLen() + xtag = d.r.readn1() + if verifyTag && xtag != tag { + halt.errorf("wrong extension tag. Got %b. Expecting: %v", xtag, tag) + } + xbs, ok = d.r.readxb(uint(l)) + bstate = d.d.attachState(ok) + case simpleVdByteArray, simpleVdByteArray + 1, + simpleVdByteArray + 2, simpleVdByteArray + 3, simpleVdByteArray + 4: + xbs, bstate = d.DecodeBytes() + default: + halt.errorf("ext - %s - expecting extensions/bytearray, got: 0x%x", msgBadDesc, d.bd) + } + d.bdRead = false + ok = true + return +} + +func (d *simpleDecDriverBytes) DecodeNaked() { + if !d.bdRead { + d.readNextBd() + } + + n := d.d.naked() + var decodeFurther bool + + switch d.bd { + case simpleVdNil: + n.v = valueTypeNil + case simpleVdFalse: + n.v = valueTypeBool + n.b = false + case simpleVdTrue: + n.v = valueTypeBool + n.b = true + case simpleVdPosInt, simpleVdPosInt + 1, simpleVdPosInt + 2, simpleVdPosInt + 3: + if d.h.SignedInteger { + n.v = valueTypeInt + n.i = d.DecodeInt64() + } else { + n.v = valueTypeUint + n.u = d.DecodeUint64() + } + case simpleVdNegInt, simpleVdNegInt + 1, simpleVdNegInt + 2, simpleVdNegInt + 3: + n.v = valueTypeInt + n.i = d.DecodeInt64() + case simpleVdFloat32: + n.v = valueTypeFloat + n.f = d.DecodeFloat64() + case simpleVdFloat64: + n.v = valueTypeFloat + n.f = d.DecodeFloat64() + case simpleVdTime: + n.v = valueTypeTime + n.t = d.DecodeTime() + case simpleVdString, simpleVdString + 1, + simpleVdString + 2, simpleVdString + 3, simpleVdString + 4: + n.v = valueTypeString + n.s = d.d.detach2Str(d.DecodeStringAsBytes()) + case simpleVdByteArray, simpleVdByteArray + 1, + simpleVdByteArray + 2, simpleVdByteArray + 3, simpleVdByteArray + 4: + d.d.fauxUnionReadRawBytes(d, false, d.h.RawToString) + case simpleVdExt, simpleVdExt + 1, simpleVdExt + 2, simpleVdExt + 3, simpleVdExt + 4: + n.v = valueTypeExt + l := d.decLen() + n.u = uint64(d.r.readn1()) + n.l = d.r.readx(uint(l)) + + case simpleVdArray, simpleVdArray + 1, simpleVdArray + 2, + simpleVdArray + 3, simpleVdArray + 4: + n.v = valueTypeArray + decodeFurther = true + case simpleVdMap, simpleVdMap + 1, simpleVdMap + 2, simpleVdMap + 3, simpleVdMap + 4: + n.v = valueTypeMap + decodeFurther = true + default: + halt.errorf("cannot infer value - %s 0x%x", msgBadDesc, d.bd) + } + + if !decodeFurther { + d.bdRead = false + } +} + +func (d *simpleDecDriverBytes) nextValueBytes() (v []byte) { + if !d.bdRead { + d.readNextBd() + } + d.r.startRecording() + d.nextValueBytesBdReadR() + v = d.r.stopRecording() + d.bdRead = false + return +} + +func (d *simpleDecDriverBytes) nextValueBytesBdReadR() { + c := d.bd + + var length uint + + switch c { + case simpleVdNil, simpleVdFalse, simpleVdTrue, simpleVdString, simpleVdByteArray: + + case simpleVdPosInt, simpleVdNegInt: + d.r.readn1() + case simpleVdPosInt + 1, simpleVdNegInt + 1: + d.r.skip(2) + case simpleVdPosInt + 2, simpleVdNegInt + 2, simpleVdFloat32: + d.r.skip(4) + case simpleVdPosInt + 3, simpleVdNegInt + 3, simpleVdFloat64: + d.r.skip(8) + case simpleVdTime: + c = d.r.readn1() + d.r.skip(uint(c)) + + default: + switch c & 7 { + case 0: + length = 0 + case 1: + b := d.r.readn1() + length = uint(b) + case 2: + x := d.r.readn2() + length = uint(bigen.Uint16(x)) + case 3: + x := d.r.readn4() + length = uint(bigen.Uint32(x)) + case 4: + x := d.r.readn8() + length = uint(bigen.Uint64(x)) + } + + bExt := c >= simpleVdExt && c <= simpleVdExt+7 + bStr := c >= simpleVdString && c <= simpleVdString+7 + bByteArray := c >= simpleVdByteArray && c <= simpleVdByteArray+7 + bArray := c >= simpleVdArray && c <= simpleVdArray+7 + bMap := c >= simpleVdMap && c <= simpleVdMap+7 + + if !(bExt || bStr || bByteArray || bArray || bMap) { + halt.errorf("cannot infer value - %s 0x%x", msgBadDesc, c) + } + + if bExt { + d.r.readn1() + } + + if length == 0 { + break + } + + if bArray { + for i := uint(0); i < length; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + } + } else if bMap { + for i := uint(0); i < length; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() + } + } else { + d.r.skip(length) + } + } + return +} + +func (d *simpleEncDriverBytes) init(hh Handle, shared *encoderBase, enc encoderI) (fp interface{}) { + callMake(&d.w) + d.h = hh.(*SimpleHandle) + d.e = shared + if shared.bytes { + fp = simpleFpEncBytes + } else { + fp = simpleFpEncIO + } + + d.init2(enc) + return +} + +func (e *simpleEncDriverBytes) writeBytesAsis(b []byte) { e.w.writeb(b) } + +func (e *simpleEncDriverBytes) writerEnd() { e.w.end() } + +func (e *simpleEncDriverBytes) resetOutBytes(out *[]byte) { + e.w.resetBytes(*out, out) +} + +func (e *simpleEncDriverBytes) resetOutIO(out io.Writer) { + e.w.resetIO(out, e.h.WriterBufferSize, &e.e.blist) +} + +func (d *simpleDecDriverBytes) init(hh Handle, shared *decoderBase, dec decoderI) (fp interface{}) { + callMake(&d.r) + d.h = hh.(*SimpleHandle) + d.d = shared + if shared.bytes { + fp = simpleFpDecBytes + } else { + fp = simpleFpDecIO + } + + d.init2(dec) + return +} + +func (d *simpleDecDriverBytes) NumBytesRead() int { + return int(d.r.numread()) +} + +func (d *simpleDecDriverBytes) resetInBytes(in []byte) { + d.r.resetBytes(in) +} + +func (d *simpleDecDriverBytes) resetInIO(r io.Reader) { + d.r.resetIO(r, d.h.ReaderBufferSize, d.h.MaxInitLen, &d.d.blist) +} + +func (d *simpleDecDriverBytes) descBd() string { + return sprintf("%v (%s)", d.bd, simpledesc(d.bd)) +} + +func (d *simpleDecDriverBytes) DecodeFloat32() (f float32) { + return float32(chkOvf.Float32V(d.DecodeFloat64())) +} + +type helperEncDriverSimpleIO struct{} +type encFnSimpleIO struct { + i encFnInfo + fe func(*encoderSimpleIO, *encFnInfo, reflect.Value) +} +type encRtidFnSimpleIO struct { + rtid uintptr + fn *encFnSimpleIO +} +type encoderSimpleIO struct { + dh helperEncDriverSimpleIO + fp *fastpathEsSimpleIO + e simpleEncDriverIO + encoderBase +} +type helperDecDriverSimpleIO struct{} +type decFnSimpleIO struct { + i decFnInfo + fd func(*decoderSimpleIO, *decFnInfo, reflect.Value) +} +type decRtidFnSimpleIO struct { + rtid uintptr + fn *decFnSimpleIO +} +type decoderSimpleIO struct { + dh helperDecDriverSimpleIO + fp *fastpathDsSimpleIO + d simpleDecDriverIO + decoderBase +} +type simpleEncDriverIO struct { + noBuiltInTypes + encDriverNoopContainerWriter + encDriverNoState + encDriverContainerNoTrackerT + encInit2er + + h *SimpleHandle + e *encoderBase + + w bufioEncWriter +} +type simpleDecDriverIO struct { + h *SimpleHandle + d *decoderBase + r ioDecReader + + bdAndBdread + + noBuiltInTypes + + decDriverNoopContainerReader + decInit2er +} + +func (e *encoderSimpleIO) rawExt(_ *encFnInfo, rv reflect.Value) { + if re := rv2i(rv).(*RawExt); re == nil { + e.e.EncodeNil() + } else { + e.e.EncodeRawExt(re) + } +} + +func (e *encoderSimpleIO) ext(f *encFnInfo, rv reflect.Value) { + e.e.EncodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (e *encoderSimpleIO) selferMarshal(_ *encFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecEncodeSelf(&Encoder{e}) +} + +func (e *encoderSimpleIO) binaryMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.BinaryMarshaler).MarshalBinary() + e.marshalRaw(bs, fnerr) +} + +func (e *encoderSimpleIO) textMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(encoding.TextMarshaler).MarshalText() + e.marshalUtf8(bs, fnerr) +} + +func (e *encoderSimpleIO) jsonMarshal(_ *encFnInfo, rv reflect.Value) { + bs, fnerr := rv2i(rv).(jsonMarshaler).MarshalJSON() + e.marshalAsis(bs, fnerr) +} + +func (e *encoderSimpleIO) raw(_ *encFnInfo, rv reflect.Value) { + e.rawBytes(rv2i(rv).(Raw)) +} + +func (e *encoderSimpleIO) encodeComplex64(v complex64) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat32(real(v)) +} + +func (e *encoderSimpleIO) encodeComplex128(v complex128) { + if imag(v) != 0 { + halt.errorf("cannot encode complex number: %v, with imaginary values: %v", any(v), any(imag(v))) + } + e.e.EncodeFloat64(real(v)) +} + +func (e *encoderSimpleIO) kBool(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeBool(rvGetBool(rv)) +} + +func (e *encoderSimpleIO) kTime(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeTime(rvGetTime(rv)) +} + +func (e *encoderSimpleIO) kString(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeString(rvGetString(rv)) +} + +func (e *encoderSimpleIO) kFloat32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat32(rvGetFloat32(rv)) +} + +func (e *encoderSimpleIO) kFloat64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeFloat64(rvGetFloat64(rv)) +} + +func (e *encoderSimpleIO) kComplex64(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex64(rvGetComplex64(rv)) +} + +func (e *encoderSimpleIO) kComplex128(_ *encFnInfo, rv reflect.Value) { + e.encodeComplex128(rvGetComplex128(rv)) +} + +func (e *encoderSimpleIO) kInt(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt(rv))) +} + +func (e *encoderSimpleIO) kInt8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt8(rv))) +} + +func (e *encoderSimpleIO) kInt16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt16(rv))) +} + +func (e *encoderSimpleIO) kInt32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt32(rv))) +} + +func (e *encoderSimpleIO) kInt64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeInt(int64(rvGetInt64(rv))) +} + +func (e *encoderSimpleIO) kUint(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint(rv))) +} + +func (e *encoderSimpleIO) kUint8(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint8(rv))) +} + +func (e *encoderSimpleIO) kUint16(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint16(rv))) +} + +func (e *encoderSimpleIO) kUint32(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint32(rv))) +} + +func (e *encoderSimpleIO) kUint64(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUint64(rv))) +} + +func (e *encoderSimpleIO) kUintptr(_ *encFnInfo, rv reflect.Value) { + e.e.EncodeUint(uint64(rvGetUintptr(rv))) +} + +func (e *encoderSimpleIO) kSeqFn(rt reflect.Type) (fn *encFnSimpleIO) { + + if rt = baseRT(rt); rt.Kind() != reflect.Interface { + fn = e.fn(rt) + } + return +} + +func (e *encoderSimpleIO) kArrayWMbs(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.haltOnMbsOddLen(l) + e.mapStart(l >> 1) + + var fn *encFnSimpleIO + builtin := ti.tielem.flagEncBuiltin + if !builtin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerMapKey + e.e.WriteMapElemKey(true) + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + if j&1 == 0 { + e.c = containerMapKey + e.e.WriteMapElemKey(false) + } else { + e.mapElemValue() + } + } + e.c = 0 + e.e.WriteMapEnd() + +} + +func (e *encoderSimpleIO) kArrayW(rv reflect.Value, ti *typeInfo, isSlice bool) { + var l int + if isSlice { + l = rvLenSlice(rv) + } else { + l = rv.Len() + } + if l <= 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(l) + + var fn *encFnSimpleIO + if !ti.tielem.flagEncBuiltin { + fn = e.kSeqFn(ti.elem) + } + + j := 0 + e.c = containerArrayElem + e.e.WriteArrayElem(true) + builtin := ti.tielem.flagEncBuiltin + for { + rvv := rvArrayIndex(rv, j, ti, isSlice) + if builtin { + e.encodeIB(rv2i(baseRVRV(rvv))) + } else { + e.encodeValue(rvv, fn) + } + j++ + if j == l { + break + } + e.c = containerArrayElem + e.e.WriteArrayElem(false) + } + + e.c = 0 + e.e.WriteArrayEnd() +} + +func (e *encoderSimpleIO) kChan(f *encFnInfo, rv reflect.Value) { + if f.ti.chandir&uint8(reflect.RecvDir) == 0 { + halt.errorStr("send-only channel cannot be encoded") + } + if !f.ti.mbs && uint8TypId == rt2id(f.ti.elem) { + e.kSliceBytesChan(rv) + return + } + rtslice := reflect.SliceOf(f.ti.elem) + rv = chanToSlice(rv, rtslice, e.h.ChanRecvTimeout) + ti := e.h.getTypeInfo(rt2id(rtslice), rtslice) + if f.ti.mbs { + e.kArrayWMbs(rv, ti, true) + } else { + e.kArrayW(rv, ti, true) + } +} + +func (e *encoderSimpleIO) kSlice(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, true) + } else if f.ti.rtid == uint8SliceTypId || uint8TypId == rt2id(f.ti.elem) { + + e.e.EncodeBytes(rvGetBytes(rv)) + } else { + e.kArrayW(rv, f.ti, true) + } +} + +func (e *encoderSimpleIO) kArray(f *encFnInfo, rv reflect.Value) { + if f.ti.mbs { + e.kArrayWMbs(rv, f.ti, false) + } else if handleBytesWithinKArray && uint8TypId == rt2id(f.ti.elem) { + e.e.EncodeStringBytesRaw(rvGetArrayBytes(rv, nil)) + } else { + e.kArrayW(rv, f.ti, false) + } +} + +func (e *encoderSimpleIO) kSliceBytesChan(rv reflect.Value) { + + bs0 := e.blist.peek(32, true) + bs := bs0 + + irv := rv2i(rv) + ch, ok := irv.(<-chan byte) + if !ok { + ch = irv.(chan byte) + } + +L1: + switch timeout := e.h.ChanRecvTimeout; { + case timeout == 0: + for { + select { + case b := <-ch: + bs = append(bs, b) + default: + break L1 + } + } + case timeout > 0: + tt := time.NewTimer(timeout) + for { + select { + case b := <-ch: + bs = append(bs, b) + case <-tt.C: + + break L1 + } + } + default: + for b := range ch { + bs = append(bs, b) + } + } + + e.e.EncodeBytes(bs) + e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.blist.put(bs0) + } +} + +func (e *encoderSimpleIO) kStructFieldKey(keyType valueType, encName string) { + + if keyType == valueTypeString { + e.e.EncodeString(encName) + } else if keyType == valueTypeInt { + e.e.EncodeInt(must.Int(strconv.ParseInt(encName, 10, 64))) + } else if keyType == valueTypeUint { + e.e.EncodeUint(must.Uint(strconv.ParseUint(encName, 10, 64))) + } else if keyType == valueTypeFloat { + e.e.EncodeFloat64(must.Float(strconv.ParseFloat(encName, 64))) + } else { + halt.errorStr2("invalid struct key type: ", keyType.String()) + } + +} + +func (e *encoderSimpleIO) kStructSimple(f *encFnInfo, rv reflect.Value) { + _ = e.e + tisfi := f.ti.sfi.source() + + chkCirRef := e.h.CheckCircularRef + var si *structFieldInfo + var j int + + if f.ti.toArray || e.h.StructToArray { + if len(tisfi) == 0 { + e.e.WriteArrayEmpty() + return + } + e.arrayStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } else { + if len(tisfi) == 0 { + e.e.WriteMapEmpty() + return + } + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + e.mapStart(len(tisfi)) + for j, si = range tisfi { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.EncodeStringNoEscape4Json(si.encName) + e.mapElemValue() + if si.encBuiltin { + e.encodeIB(rv2i(si.fieldNoAlloc(rv, true))) + } else { + e.encodeValue(si.fieldNoAlloc(rv, !chkCirRef), nil) + } + } + e.c = 0 + e.e.WriteMapEnd() + } +} + +func (e *encoderSimpleIO) kStruct(f *encFnInfo, rv reflect.Value) { + _ = e.e + ti := f.ti + toMap := !(ti.toArray || e.h.StructToArray) + var mf map[string]interface{} + if ti.flagMissingFielder { + toMap = true + mf = rv2i(rv).(MissingFielder).CodecMissingFields() + } else if ti.flagMissingFielderPtr { + toMap = true + if rv.CanAddr() { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder).CodecMissingFields() + } else { + mf = rv2i(e.addrRV(rv, ti.rt, ti.ptr)).(MissingFielder).CodecMissingFields() + } + } + newlen := len(mf) + tisfi := ti.sfi.source() + newlen += len(tisfi) + + var fkvs = e.slist.get(newlen)[:newlen] + + recur := e.h.RecursiveEmptyCheck + chkCirRef := e.h.CheckCircularRef + + var xlen int + + var kv sfiRv + var j int + var sf encStructFieldObj + if toMap { + newlen = 0 + if e.h.Canonical { + tisfi = f.ti.sfi.sorted() + } + for _, si := range tisfi { + + if si.omitEmpty { + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyValue(kv.r, e.h.TypeInfos, recur) { + continue + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[newlen] = kv + newlen++ + } + + var mf2s []stringIntf + if len(mf) != 0 { + mf2s = make([]stringIntf, 0, len(mf)) + for k, v := range mf { + if k == "" { + continue + } + if ti.infoFieldOmitempty && isEmptyValue(reflect.ValueOf(v), e.h.TypeInfos, recur) { + continue + } + mf2s = append(mf2s, stringIntf{k, v}) + } + } + + xlen = newlen + len(mf2s) + if xlen == 0 { + e.e.WriteMapEmpty() + goto END + } + + e.mapStart(xlen) + + if len(mf2s) != 0 && e.h.Canonical { + mf2w := make([]encStructFieldObj, newlen+len(mf2s)) + for j = 0; j < newlen; j++ { + kv = fkvs[j] + mf2w[j] = encStructFieldObj{kv.v.encName, kv.r, nil, true, + !kv.v.encNameEscape4Json, kv.v.encBuiltin} + } + for _, v := range mf2s { + mf2w[j] = encStructFieldObj{v.v, reflect.Value{}, v.i, false, false, false} + j++ + } + sort.Sort((encStructFieldObjSlice)(mf2w)) + for j, sf = range mf2w { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && sf.noEsc4json { + e.e.EncodeStringNoEscape4Json(sf.key) + } else { + e.kStructFieldKey(ti.keyType, sf.key) + } + e.mapElemValue() + if sf.isRv { + if sf.builtin { + e.encodeIB(rv2i(baseRVRV(sf.rv))) + } else { + e.encodeValue(sf.rv, nil) + } + } else { + if !e.encodeBuiltin(sf.intf) { + e.encodeR(reflect.ValueOf(sf.intf)) + } + + } + } + } else { + keytyp := ti.keyType + for j = 0; j < newlen; j++ { + kv = fkvs[j] + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if ti.keyType == valueTypeString && !kv.v.encNameEscape4Json { + e.e.EncodeStringNoEscape4Json(kv.v.encName) + } else { + e.kStructFieldKey(keytyp, kv.v.encName) + } + e.mapElemValue() + if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + for _, v := range mf2s { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.kStructFieldKey(keytyp, v.v) + e.mapElemValue() + if !e.encodeBuiltin(v.i) { + e.encodeR(reflect.ValueOf(v.i)) + } + + j++ + } + } + + e.c = 0 + e.e.WriteMapEnd() + } else { + newlen = len(tisfi) + for i, si := range tisfi { + + if si.omitEmpty { + + kv.r = si.fieldNoAlloc(rv, false) + if isEmptyContainerValue(kv.r, e.h.TypeInfos, recur) { + kv.r = reflect.Value{} + } + } else { + kv.r = si.fieldNoAlloc(rv, si.encBuiltin || !chkCirRef) + } + kv.v = si + fkvs[i] = kv + } + + if newlen == 0 { + e.e.WriteArrayEmpty() + goto END + } + + e.arrayStart(newlen) + for j = 0; j < newlen; j++ { + e.c = containerArrayElem + e.e.WriteArrayElem(j == 0) + kv = fkvs[j] + if !kv.r.IsValid() { + e.e.EncodeNil() + } else if kv.v.encBuiltin { + e.encodeIB(rv2i(baseRVRV(kv.r))) + } else { + e.encodeValue(kv.r, nil) + } + } + e.c = 0 + e.e.WriteArrayEnd() + } + +END: + + e.slist.put(fkvs) +} + +func (e *encoderSimpleIO) kMap(f *encFnInfo, rv reflect.Value) { + _ = e.e + l := rvLenMap(rv) + if l == 0 { + e.e.WriteMapEmpty() + return + } + e.mapStart(l) + + var keyFn, valFn *encFnSimpleIO + + ktypeKind := reflect.Kind(f.ti.keykind) + vtypeKind := reflect.Kind(f.ti.elemkind) + + rtval := f.ti.elem + rtvalkind := vtypeKind + for rtvalkind == reflect.Ptr { + rtval = rtval.Elem() + rtvalkind = rtval.Kind() + } + if rtvalkind != reflect.Interface { + valFn = e.fn(rtval) + } + + var rvv = mapAddrLoopvarRV(f.ti.elem, vtypeKind) + + rtkey := f.ti.key + var keyTypeIsString = stringTypId == rt2id(rtkey) + if keyTypeIsString { + keyFn = e.fn(rtkey) + } else { + for rtkey.Kind() == reflect.Ptr { + rtkey = rtkey.Elem() + } + if rtkey.Kind() != reflect.Interface { + keyFn = e.fn(rtkey) + } + } + + if e.h.Canonical { + e.kMapCanonical(f.ti, rv, rvv, keyFn, valFn) + e.c = 0 + e.e.WriteMapEnd() + return + } + + var rvk = mapAddrLoopvarRV(f.ti.key, ktypeKind) + + var it mapIter + mapRange(&it, rv, rvk, rvv, true) + + kbuiltin := f.ti.tikey.flagEncBuiltin + vbuiltin := f.ti.tielem.flagEncBuiltin + for j := 0; it.Next(); j++ { + rv = it.Key() + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + if keyTypeIsString { + e.e.EncodeString(rvGetString(rv)) + } else if kbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(rv, keyFn) + } + e.mapElemValue() + rv = it.Value() + if vbuiltin { + e.encodeIB(rv2i(baseRVRV(rv))) + } else { + e.encodeValue(it.Value(), valFn) + } + } + it.Done() + + e.c = 0 + e.e.WriteMapEnd() +} + +func (e *encoderSimpleIO) kMapCanonical(ti *typeInfo, rv, rvv reflect.Value, keyFn, valFn *encFnSimpleIO) { + _ = e.e + + rtkey := ti.key + rtkeydecl := rtkey.PkgPath() == "" && rtkey.Name() != "" + + mks := rv.MapKeys() + rtkeyKind := rtkey.Kind() + mparams := getMapReqParams(ti) + + switch rtkeyKind { + case reflect.Bool: + + if len(mks) == 2 && mks[0].Bool() { + mks[0], mks[1] = mks[1], mks[0] + } + for i := range mks { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeBool(mks[i].Bool()) + } else { + e.encodeValueNonNil(mks[i], keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mks[i], rvv, mparams), valFn) + } + case reflect.String: + mksv := make([]orderedRv[string], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rvGetString(k) + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeString(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr: + mksv := make([]orderedRv[uint64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Uint() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeUint(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + mksv := make([]orderedRv[int64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Int() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeInt(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float32: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat32(float32(mksv[i].v)) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + case reflect.Float64: + mksv := make([]orderedRv[float64], len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = k.Float() + } + slices.SortFunc(mksv, cmpOrderedRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + if rtkeydecl { + e.e.EncodeFloat64(mksv[i].v) + } else { + e.encodeValueNonNil(mksv[i].r, keyFn) + } + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + default: + if rtkey == timeTyp { + mksv := make([]timeRv, len(mks)) + for i, k := range mks { + v := &mksv[i] + v.r = k + v.v = rv2i(k).(time.Time) + } + slices.SortFunc(mksv, cmpTimeRv) + for i := range mksv { + e.c = containerMapKey + e.e.WriteMapElemKey(i == 0) + e.e.EncodeTime(mksv[i].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksv[i].r, rvv, mparams), valFn) + } + break + } + + bs0 := e.blist.get(len(mks) * 16) + mksv := bs0 + mksbv := make([]bytesRv, len(mks)) + + sideEncode(e.hh, &e.h.sideEncPool, func(se encoderI) { + se.ResetBytes(&mksv) + for i, k := range mks { + v := &mksbv[i] + l := len(mksv) + se.setContainerState(containerMapKey) + se.encodeR(baseRVRV(k)) + se.atEndOfEncode() + se.writerEnd() + v.r = k + v.v = mksv[l:] + } + }) + + slices.SortFunc(mksbv, cmpBytesRv) + for j := range mksbv { + e.c = containerMapKey + e.e.WriteMapElemKey(j == 0) + e.e.writeBytesAsis(mksbv[j].v) + e.mapElemValue() + e.encodeValue(mapGet(rv, mksbv[j].r, rvv, mparams), valFn) + } + e.blist.put(mksv) + if !byteSliceSameData(bs0, mksv) { + e.blist.put(bs0) + } + } +} + +func (e *encoderSimpleIO) init(h Handle) { + initHandle(h) + callMake(&e.e) + e.hh = h + e.h = h.getBasicHandle() + + e.err = errEncoderNotInitialized + + e.fp = e.e.init(h, &e.encoderBase, e).(*fastpathEsSimpleIO) + + if e.bytes { + e.rtidFn = &e.h.rtidFnsEncBytes + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtBytes + } else { + e.rtidFn = &e.h.rtidFnsEncIO + e.rtidFnNoExt = &e.h.rtidFnsEncNoExtIO + } + + e.reset() +} + +func (e *encoderSimpleIO) reset() { + e.e.reset() + if e.ci != nil { + e.ci = e.ci[:0] + } + e.c = 0 + e.calls = 0 + e.seq = 0 + e.err = nil +} + +func (e *encoderSimpleIO) Encode(v interface{}) (err error) { + + defer panicValToErr(e, callRecoverSentinel, &e.err, &err, debugging) + e.mustEncode(v) + return +} + +func (e *encoderSimpleIO) MustEncode(v interface{}) { + defer panicValToErr(e, callRecoverSentinel, &e.err, nil, true) + e.mustEncode(v) + return +} + +func (e *encoderSimpleIO) mustEncode(v interface{}) { + halt.onerror(e.err) + if e.hh == nil { + halt.onerror(errNoFormatHandle) + } + + e.calls++ + if !e.encodeBuiltin(v) { + e.encodeR(reflect.ValueOf(v)) + } + + e.calls-- + if e.calls == 0 { + e.e.atEndOfEncode() + e.e.writerEnd() + } +} + +func (e *encoderSimpleIO) encodeI(iv interface{}) { + if !e.encodeBuiltin(iv) { + e.encodeR(reflect.ValueOf(iv)) + } +} + +func (e *encoderSimpleIO) encodeIB(iv interface{}) { + if !e.encodeBuiltin(iv) { + + halt.errorStr("[should not happen] invalid type passed to encodeBuiltin") + } +} + +func (e *encoderSimpleIO) encodeR(base reflect.Value) { + e.encodeValue(base, nil) +} + +func (e *encoderSimpleIO) encodeBuiltin(iv interface{}) (ok bool) { + ok = true + switch v := iv.(type) { + case nil: + e.e.EncodeNil() + + case Raw: + e.rawBytes(v) + case string: + e.e.EncodeString(v) + case bool: + e.e.EncodeBool(v) + case int: + e.e.EncodeInt(int64(v)) + case int8: + e.e.EncodeInt(int64(v)) + case int16: + e.e.EncodeInt(int64(v)) + case int32: + e.e.EncodeInt(int64(v)) + case int64: + e.e.EncodeInt(v) + case uint: + e.e.EncodeUint(uint64(v)) + case uint8: + e.e.EncodeUint(uint64(v)) + case uint16: + e.e.EncodeUint(uint64(v)) + case uint32: + e.e.EncodeUint(uint64(v)) + case uint64: + e.e.EncodeUint(v) + case uintptr: + e.e.EncodeUint(uint64(v)) + case float32: + e.e.EncodeFloat32(v) + case float64: + e.e.EncodeFloat64(v) + case complex64: + e.encodeComplex64(v) + case complex128: + e.encodeComplex128(v) + case time.Time: + e.e.EncodeTime(v) + case []byte: + e.e.EncodeBytes(v) + default: + + ok = !skipFastpathTypeSwitchInDirectCall && e.dh.fastpathEncodeTypeSwitch(iv, e) + } + return +} + +func (e *encoderSimpleIO) encodeValue(rv reflect.Value, fn *encFnSimpleIO) { + + var ciPushes int + + var rvp reflect.Value + var rvpValid bool + +RV: + switch rv.Kind() { + case reflect.Ptr: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = true + rvp = rv + rv = rv.Elem() + + if e.h.CheckCircularRef && e.ci.canPushElemKind(rv.Kind()) { + e.ci.push(rv2i(rvp)) + ciPushes++ + } + goto RV + case reflect.Interface: + if rvIsNil(rv) { + e.e.EncodeNil() + goto END + } + rvpValid = false + rvp = reflect.Value{} + rv = rv.Elem() + fn = nil + goto RV + case reflect.Map: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteMapEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Slice, reflect.Chan: + if rvIsNil(rv) { + if e.h.NilCollectionToZeroLength { + e.e.WriteArrayEmpty() + } else { + e.e.EncodeNil() + } + goto END + } + case reflect.Invalid, reflect.Func: + e.e.EncodeNil() + goto END + } + + if fn == nil { + fn = e.fn(rv.Type()) + } + + if !fn.i.addrE { + + } else if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + fn.fe(e, &fn.i, rv) + +END: + if ciPushes > 0 { + e.ci.pop(ciPushes) + } +} + +func (e *encoderSimpleIO) encodeValueNonNil(rv reflect.Value, fn *encFnSimpleIO) { + + if fn.i.addrE { + if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else { + rv = e.addrRV(rv, fn.i.ti.rt, fn.i.ti.ptr) + } + } + fn.fe(e, &fn.i, rv) +} + +func (e *encoderSimpleIO) encodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + e.encodeValue(baseRV(v), e.fn(t)) + } else { + e.encodeValue(baseRV(v), e.fnNoExt(t)) + } +} + +func (e *encoderSimpleIO) marshalUtf8(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.EncodeString(stringView(bs)) + } +} + +func (e *encoderSimpleIO) marshalAsis(bs []byte, fnerr error) { + halt.onerror(fnerr) + if bs == nil { + e.e.EncodeNil() + } else { + e.e.writeBytesAsis(bs) + } +} + +func (e *encoderSimpleIO) marshalRaw(bs []byte, fnerr error) { + halt.onerror(fnerr) + e.e.EncodeBytes(bs) +} + +func (e *encoderSimpleIO) rawBytes(vv Raw) { + v := []byte(vv) + if !e.h.Raw { + halt.errorBytes("Raw values cannot be encoded: ", v) + } + e.e.writeBytesAsis(v) +} + +func (e *encoderSimpleIO) fn(t reflect.Type) *encFnSimpleIO { + return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false) +} + +func (e *encoderSimpleIO) fnNoExt(t reflect.Type) *encFnSimpleIO { + return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true) +} + +func (e *encoderSimpleIO) mapStart(length int) { + e.e.WriteMapStart(length) + e.c = containerMapStart +} + +func (e *encoderSimpleIO) mapElemValue() { + e.e.WriteMapElemValue() + e.c = containerMapValue +} + +func (e *encoderSimpleIO) arrayStart(length int) { + e.e.WriteArrayStart(length) + e.c = containerArrayStart +} + +func (e *encoderSimpleIO) writerEnd() { + e.e.writerEnd() +} + +func (e *encoderSimpleIO) atEndOfEncode() { + e.e.atEndOfEncode() +} + +func (e *encoderSimpleIO) Reset(w io.Writer) { + if e.bytes { + halt.onerror(errEncNoResetBytesWithWriter) + } + e.reset() + if w == nil { + w = io.Discard + } + e.e.resetOutIO(w) +} + +func (e *encoderSimpleIO) ResetBytes(out *[]byte) { + if !e.bytes { + halt.onerror(errEncNoResetWriterWithBytes) + } + e.resetBytes(out) +} + +func (e *encoderSimpleIO) resetBytes(out *[]byte) { + e.reset() + if out == nil { + out = &bytesEncAppenderDefOut + } + e.e.resetOutBytes(out) +} + +func (helperEncDriverSimpleIO) newEncoderBytes(out *[]byte, h Handle) *encoderSimpleIO { + var c1 encoderSimpleIO + c1.bytes = true + c1.init(h) + c1.ResetBytes(out) + return &c1 +} + +func (helperEncDriverSimpleIO) newEncoderIO(out io.Writer, h Handle) *encoderSimpleIO { + var c1 encoderSimpleIO + c1.bytes = false + c1.init(h) + c1.Reset(out) + return &c1 +} + +func (helperEncDriverSimpleIO) encFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathEsSimpleIO) (f *fastpathESimpleIO, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperEncDriverSimpleIO) encFindRtidFn(s []encRtidFnSimpleIO, rtid uintptr) (i uint, fn *encFnSimpleIO) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperEncDriverSimpleIO) encFromRtidFnSlice(fns *atomicRtidFnSlice) (s []encRtidFnSimpleIO) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]encRtidFnSimpleIO](v)) + } + return +} + +func (dh helperEncDriverSimpleIO) encFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, + x *BasicHandle, fp *fastpathEsSimpleIO, checkExt bool) (fn *encFnSimpleIO) { + return dh.encFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperEncDriverSimpleIO) encFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsSimpleIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnSimpleIO) { + rtid := rt2id(rt) + var sp []encRtidFnSimpleIO = dh.encFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.encFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.encFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperEncDriverSimpleIO) encFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathEsSimpleIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnSimpleIO) { + + fn = dh.encFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []encRtidFnSimpleIO + mu.Lock() + sp = dh.encFromRtidFnSlice(fns) + + if sp == nil { + sp = []encRtidFnSimpleIO{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.encFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]encRtidFnSimpleIO, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = encRtidFnSimpleIO{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperEncDriverSimpleIO) encFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathEsSimpleIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *encFnSimpleIO) { + fn = new(encFnSimpleIO) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + if rtid == timeTypId && timeBuiltin { + fn.fe = (*encoderSimpleIO).kTime + } else if rtid == rawTypId { + fn.fe = (*encoderSimpleIO).raw + } else if rtid == rawExtTypId { + fn.fe = (*encoderSimpleIO).rawExt + fi.addrE = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fe = (*encoderSimpleIO).ext + if rk == reflect.Struct || rk == reflect.Array { + fi.addrE = true + } + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fe = (*encoderSimpleIO).selferMarshal + fi.addrE = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fe = (*encoderSimpleIO).binaryMarshal + fi.addrE = ti.flagBinaryMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fe = (*encoderSimpleIO).jsonMarshal + fi.addrE = ti.flagJsonMarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fe = (*encoderSimpleIO).textMarshal + fi.addrE = ti.flagTextMarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fe = fp[idx].encfn + } + } else { + + xfe, xrt := dh.encFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf := xfe.encfn + fn.fe = func(e *encoderSimpleIO, xf *encFnInfo, xrv reflect.Value) { + xfnf(e, xf, rvConvert(xrv, xrt)) + } + } + } + } + if fn.fe == nil { + switch rk { + case reflect.Bool: + fn.fe = (*encoderSimpleIO).kBool + case reflect.String: + + fn.fe = (*encoderSimpleIO).kString + case reflect.Int: + fn.fe = (*encoderSimpleIO).kInt + case reflect.Int8: + fn.fe = (*encoderSimpleIO).kInt8 + case reflect.Int16: + fn.fe = (*encoderSimpleIO).kInt16 + case reflect.Int32: + fn.fe = (*encoderSimpleIO).kInt32 + case reflect.Int64: + fn.fe = (*encoderSimpleIO).kInt64 + case reflect.Uint: + fn.fe = (*encoderSimpleIO).kUint + case reflect.Uint8: + fn.fe = (*encoderSimpleIO).kUint8 + case reflect.Uint16: + fn.fe = (*encoderSimpleIO).kUint16 + case reflect.Uint32: + fn.fe = (*encoderSimpleIO).kUint32 + case reflect.Uint64: + fn.fe = (*encoderSimpleIO).kUint64 + case reflect.Uintptr: + fn.fe = (*encoderSimpleIO).kUintptr + case reflect.Float32: + fn.fe = (*encoderSimpleIO).kFloat32 + case reflect.Float64: + fn.fe = (*encoderSimpleIO).kFloat64 + case reflect.Complex64: + fn.fe = (*encoderSimpleIO).kComplex64 + case reflect.Complex128: + fn.fe = (*encoderSimpleIO).kComplex128 + case reflect.Chan: + fn.fe = (*encoderSimpleIO).kChan + case reflect.Slice: + fn.fe = (*encoderSimpleIO).kSlice + case reflect.Array: + fn.fe = (*encoderSimpleIO).kArray + case reflect.Struct: + if ti.simple { + fn.fe = (*encoderSimpleIO).kStructSimple + } else { + fn.fe = (*encoderSimpleIO).kStruct + } + case reflect.Map: + fn.fe = (*encoderSimpleIO).kMap + case reflect.Interface: + + fn.fe = (*encoderSimpleIO).kErr + default: + + fn.fe = (*encoderSimpleIO).kErr + } + } + } + return +} +func (d *decoderSimpleIO) rawExt(f *decFnInfo, rv reflect.Value) { + d.d.DecodeRawExt(rv2i(rv).(*RawExt)) +} + +func (d *decoderSimpleIO) ext(f *decFnInfo, rv reflect.Value) { + d.d.DecodeExt(rv2i(rv), f.ti.rt, f.xfTag, f.xfFn) +} + +func (d *decoderSimpleIO) selferUnmarshal(_ *decFnInfo, rv reflect.Value) { + rv2i(rv).(Selfer).CodecDecodeSelf(&Decoder{d}) +} + +func (d *decoderSimpleIO) binaryUnmarshal(_ *decFnInfo, rv reflect.Value) { + bm := rv2i(rv).(encoding.BinaryUnmarshaler) + xbs, _ := d.d.DecodeBytes() + fnerr := bm.UnmarshalBinary(xbs) + halt.onerror(fnerr) +} + +func (d *decoderSimpleIO) textUnmarshal(_ *decFnInfo, rv reflect.Value) { + tm := rv2i(rv).(encoding.TextUnmarshaler) + fnerr := tm.UnmarshalText(bytesOKs(d.d.DecodeStringAsBytes())) + halt.onerror(fnerr) +} + +func (d *decoderSimpleIO) jsonUnmarshal(_ *decFnInfo, rv reflect.Value) { + d.jsonUnmarshalV(rv2i(rv).(jsonUnmarshaler)) +} + +func (d *decoderSimpleIO) jsonUnmarshalV(tm jsonUnmarshaler) { + + halt.onerror(tm.UnmarshalJSON(d.d.nextValueBytes())) +} + +func (d *decoderSimpleIO) kErr(_ *decFnInfo, rv reflect.Value) { + halt.errorf("unsupported decoding kind: %s, for %#v", rv.Kind(), rv) + +} + +func (d *decoderSimpleIO) raw(_ *decFnInfo, rv reflect.Value) { + rvSetBytes(rv, d.rawBytes()) +} + +func (d *decoderSimpleIO) kString(_ *decFnInfo, rv reflect.Value) { + rvSetString(rv, d.detach2Str(d.d.DecodeStringAsBytes())) +} + +func (d *decoderSimpleIO) kBool(_ *decFnInfo, rv reflect.Value) { + rvSetBool(rv, d.d.DecodeBool()) +} + +func (d *decoderSimpleIO) kTime(_ *decFnInfo, rv reflect.Value) { + rvSetTime(rv, d.d.DecodeTime()) +} + +func (d *decoderSimpleIO) kFloat32(_ *decFnInfo, rv reflect.Value) { + rvSetFloat32(rv, d.d.DecodeFloat32()) +} + +func (d *decoderSimpleIO) kFloat64(_ *decFnInfo, rv reflect.Value) { + rvSetFloat64(rv, d.d.DecodeFloat64()) +} + +func (d *decoderSimpleIO) kComplex64(_ *decFnInfo, rv reflect.Value) { + rvSetComplex64(rv, complex(d.d.DecodeFloat32(), 0)) +} + +func (d *decoderSimpleIO) kComplex128(_ *decFnInfo, rv reflect.Value) { + rvSetComplex128(rv, complex(d.d.DecodeFloat64(), 0)) +} + +func (d *decoderSimpleIO) kInt(_ *decFnInfo, rv reflect.Value) { + rvSetInt(rv, int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))) +} + +func (d *decoderSimpleIO) kInt8(_ *decFnInfo, rv reflect.Value) { + rvSetInt8(rv, int8(chkOvf.IntV(d.d.DecodeInt64(), 8))) +} + +func (d *decoderSimpleIO) kInt16(_ *decFnInfo, rv reflect.Value) { + rvSetInt16(rv, int16(chkOvf.IntV(d.d.DecodeInt64(), 16))) +} + +func (d *decoderSimpleIO) kInt32(_ *decFnInfo, rv reflect.Value) { + rvSetInt32(rv, int32(chkOvf.IntV(d.d.DecodeInt64(), 32))) +} + +func (d *decoderSimpleIO) kInt64(_ *decFnInfo, rv reflect.Value) { + rvSetInt64(rv, d.d.DecodeInt64()) +} + +func (d *decoderSimpleIO) kUint(_ *decFnInfo, rv reflect.Value) { + rvSetUint(rv, uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderSimpleIO) kUintptr(_ *decFnInfo, rv reflect.Value) { + rvSetUintptr(rv, uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize))) +} + +func (d *decoderSimpleIO) kUint8(_ *decFnInfo, rv reflect.Value) { + rvSetUint8(rv, uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))) +} + +func (d *decoderSimpleIO) kUint16(_ *decFnInfo, rv reflect.Value) { + rvSetUint16(rv, uint16(chkOvf.UintV(d.d.DecodeUint64(), 16))) +} + +func (d *decoderSimpleIO) kUint32(_ *decFnInfo, rv reflect.Value) { + rvSetUint32(rv, uint32(chkOvf.UintV(d.d.DecodeUint64(), 32))) +} + +func (d *decoderSimpleIO) kUint64(_ *decFnInfo, rv reflect.Value) { + rvSetUint64(rv, d.d.DecodeUint64()) +} + +func (d *decoderSimpleIO) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) { + + n := d.naked() + d.d.DecodeNaked() + + if decFailNonEmptyIntf && f.ti.numMeth > 0 { + halt.errorf("cannot decode non-nil codec value into nil %v (%v methods)", f.ti.rt, f.ti.numMeth) + } + + switch n.v { + case valueTypeMap: + mtid := d.mtid + if mtid == 0 { + if d.jsms { + mtid = mapStrIntfTypId + } else { + mtid = mapIntfIntfTypId + } + } + if mtid == mapStrIntfTypId { + var v2 map[string]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if mtid == mapIntfIntfTypId { + var v2 map[interface{}]interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.mtr { + rvn = reflect.New(d.h.MapType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + + rvn = rvZeroAddrK(d.h.MapType, reflect.Map) + d.decodeValue(rvn, nil) + } + case valueTypeArray: + if d.stid == 0 || d.stid == intfSliceTypId { + var v2 []interface{} + d.decode(&v2) + rvn = rv4iptr(&v2).Elem() + } else if d.str { + rvn = reflect.New(d.h.SliceType) + d.decode(rv2i(rvn)) + rvn = rvn.Elem() + } else { + rvn = rvZeroAddrK(d.h.SliceType, reflect.Slice) + d.decodeValue(rvn, nil) + } + if d.h.PreferArrayOverSlice { + rvn = rvGetArray4Slice(rvn) + } + case valueTypeExt: + tag, bytes := n.u, n.l + bfn := d.h.getExtForTag(tag) + var re = RawExt{Tag: tag} + if bytes == nil { + + if bfn == nil { + d.decode(&re.Value) + rvn = rv4iptr(&re).Elem() + } else if bfn.ext == SelfExt { + rvn = rvZeroAddrK(bfn.rt, bfn.rt.Kind()) + d.decodeValue(rvn, d.fnNoExt(bfn.rt)) + } else { + rvn = reflect.New(bfn.rt) + d.interfaceExtConvertAndDecode(rv2i(rvn), bfn.ext) + rvn = rvn.Elem() + } + } else { + + if bfn == nil { + re.setData(bytes, false) + rvn = rv4iptr(&re).Elem() + } else { + rvn = reflect.New(bfn.rt) + if bfn.ext == SelfExt { + sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) }) + } else { + bfn.ext.ReadExt(rv2i(rvn), bytes) + } + rvn = rvn.Elem() + } + } + + if d.h.PreferPointerForStructOrArray && rvn.CanAddr() { + if rk := rvn.Kind(); rk == reflect.Array || rk == reflect.Struct { + rvn = rvn.Addr() + } + } + case valueTypeNil: + + case valueTypeInt: + rvn = n.ri() + case valueTypeUint: + rvn = n.ru() + case valueTypeFloat: + rvn = n.rf() + case valueTypeBool: + rvn = n.rb() + case valueTypeString, valueTypeSymbol: + rvn = n.rs() + case valueTypeBytes: + rvn = n.rl() + case valueTypeTime: + rvn = n.rt() + default: + halt.errorStr2("kInterfaceNaked: unexpected valueType: ", n.v.String()) + } + return +} + +func (d *decoderSimpleIO) kInterface(f *decFnInfo, rv reflect.Value) { + + isnilrv := rvIsNil(rv) + + var rvn reflect.Value + + if d.h.InterfaceReset { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } else if !isnilrv { + decSetNonNilRV2Zero4Intf(rv) + } + return + } + } else if isnilrv { + + rvn = d.h.intf2impl(f.ti.rtid) + if !rvn.IsValid() { + rvn = d.kInterfaceNaked(f) + if rvn.IsValid() { + rvSetIntf(rv, rvn) + } + return + } + } else { + + rvn = rv.Elem() + } + + canDecode, _ := isDecodeable(rvn) + + if !canDecode { + rvn2 := d.oneShotAddrRV(rvn.Type(), rvn.Kind()) + rvSetDirect(rvn2, rvn) + rvn = rvn2 + } + + d.decodeValue(rvn, nil) + rvSetIntf(rv, rvn) +} + +func (d *decoderSimpleIO) kStructField(si *structFieldInfo, rv reflect.Value) { + if d.d.TryNil() { + rv = si.fieldNoAlloc(rv, true) + if rv.IsValid() { + decSetNonNilRV2Zero(rv) + } + } else if si.decBuiltin { + rv = rvAddr(si.fieldAlloc(rv), si.ptrTyp) + d.decode(rv2i(rv)) + } else { + fn := d.fn(si.baseTyp) + rv = si.fieldAlloc(rv) + if fn.i.addrD { + rv = rvAddr(rv, si.ptrTyp) + } + fn.fd(d, &fn.i, rv) + } +} + +func (d *decoderSimpleIO) kStructSimple(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var rvkencname []byte + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderSimpleIO) kStruct(f *decFnInfo, rv reflect.Value) { + _ = d.d + ctyp := d.d.ContainerType() + ti := f.ti + var mf MissingFielder + if ti.flagMissingFielder { + mf = rv2i(rv).(MissingFielder) + } else if ti.flagMissingFielderPtr { + mf = rv2i(rvAddr(rv, ti.ptr)).(MissingFielder) + } + if ctyp == valueTypeMap { + containerLen := d.mapStart(d.d.ReadMapStart()) + if containerLen == 0 { + d.mapEnd() + return + } + hasLen := containerLen >= 0 + var name2 []byte + var rvkencname []byte + tkt := ti.keyType + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.mapElemKey(j == 0) + + if tkt == valueTypeString { + sab, att := d.d.DecodeStringAsBytes() + rvkencname = d.usableStructFieldNameBytes(rvkencname, sab, att) + } else if tkt == valueTypeInt { + rvkencname = strconv.AppendInt(d.b[:0], d.d.DecodeInt64(), 10) + } else if tkt == valueTypeUint { + rvkencname = strconv.AppendUint(d.b[:0], d.d.DecodeUint64(), 10) + } else if tkt == valueTypeFloat { + rvkencname = strconv.AppendFloat(d.b[:0], d.d.DecodeFloat64(), 'f', -1, 64) + } else { + halt.errorStr2("invalid struct key type: ", ti.keyType.String()) + } + + d.mapElemValue() + if si := ti.siForEncName(rvkencname); si != nil { + d.kStructField(si, rv) + } else if mf != nil { + + name2 = append(name2[:0], rvkencname...) + var f interface{} + d.decode(&f) + if !mf.CodecMissingField(name2, f) && d.h.ErrorIfNoField { + halt.errorStr2("no matching struct field when decoding stream map with key: ", stringView(name2)) + } + } else { + d.structFieldNotFound(-1, stringView(rvkencname)) + } + } + d.mapEnd() + } else if ctyp == valueTypeArray { + containerLen := d.arrayStart(d.d.ReadArrayStart()) + if containerLen == 0 { + d.arrayEnd() + return + } + + tisfi := ti.sfi.source() + hasLen := containerLen >= 0 + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + d.arrayElem(j == 0) + if j < len(tisfi) { + d.kStructField(tisfi[j], rv) + } else { + d.structFieldNotFound(j, "") + } + } + + d.arrayEnd() + } else { + halt.onerror(errNeedMapOrArrayDecodeToStruct) + } +} + +func (d *decoderSimpleIO) kSlice(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + rvCanset := rv.CanSet() + + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + rvbs := rvGetBytes(rv) + if rvCanset { + bs2, bst := d.decodeBytesInto(rvbs, false) + if bst != dBytesIntoParamOut { + rvSetBytes(rv, bs2) + } + } else { + + d.decodeBytesInto(rvbs[:len(rvbs):len(rvbs)], true) + } + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset { + if rvIsNil(rv) { + rvSetDirect(rv, rvSliceZeroCap(ti.rt)) + } else { + rvSetSliceLen(rv, 0) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem0Mut := !scalarBitset.isset(ti.elemkind) + rtelem := ti.elem + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnSimpleIO + + var rvChanged bool + + var rv0 = rv + var rv9 reflect.Value + + rvlen := rvLenSlice(rv) + rvcap := rvCapSlice(rv) + maxInitLen := d.maxInitLen() + hasLen := containerLenS >= 0 + if hasLen { + if containerLenS > rvcap { + oldRvlenGtZero := rvlen > 0 + rvlen1 := int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + if rvlen1 == rvlen { + } else if rvlen1 <= rvcap { + if rvCanset { + rvlen = rvlen1 + rvSetSliceLen(rv, rvlen) + } + } else if rvCanset { + rvlen = rvlen1 + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + if rvChanged && oldRvlenGtZero && rtelem0Mut { + rvCopySlice(rv, rv0, rtelem) + } + } else if containerLenS != rvlen { + if rvCanset { + rvlen = containerLenS + rvSetSliceLen(rv, rvlen) + } + } + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } + + var j int + for ; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if rvCanset { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + rv, rvCanset = rvMakeSlice(rv, f.ti, rvlen, rvlen) + rvcap = rvlen + rvChanged = !rvCanset + } else { + halt.errorStr("cannot decode into non-settable slice") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + + if rvlen < rvcap { + rvlen = rvcap + if rvCanset { + rvSetSliceLen(rv, rvlen) + } else if rvChanged { + rv = rvSlice(rv, rvlen) + } else { + halt.onerror(errExpandSliceCannotChange) + } + } else { + if !(rvCanset || rvChanged) { + halt.onerror(errExpandSliceCannotChange) + } + rv, rvcap, rvCanset = rvGrowSlice(rv, f.ti, rvcap, 1) + + rvlen = rvcap + rvChanged = !rvCanset + } + } + + rv9 = rvArrayIndex(rv, j, f.ti, true) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if j < rvlen { + if rvCanset { + rvSetSliceLen(rv, j) + } else if rvChanged { + rv = rvSlice(rv, j) + } + + } else if j == 0 && rvIsNil(rv) { + if rvCanset { + rv = rvSliceZeroCap(ti.rt) + rvCanset = false + rvChanged = true + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } +} + +func (d *decoderSimpleIO) kArray(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + ctyp := d.d.ContainerType() + if handleBytesWithinKArray && (ctyp == valueTypeBytes || ctyp == valueTypeString) { + + if ti.elemkind != uint8(reflect.Uint8) { + halt.errorf("bytes/string in stream can decode into array of bytes, but not %v", ti.rt) + } + rvbs := rvGetArrayBytes(rv, nil) + d.decodeBytesInto(rvbs, true) + return + } + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var rv9 reflect.Value + + rvlen := rv.Len() + hasLen := containerLenS >= 0 + if hasLen && containerLenS > rvlen { + halt.errorf("cannot decode into array with length: %v, less than container length: %v", any(rvlen), any(containerLenS)) + } + + var elemReset = d.h.SliceElementReset + + var rtelemIsPtr bool + var rtelemElem reflect.Type + var fn *decFnSimpleIO + builtin := ti.tielem.flagDecBuiltin + if builtin { + rtelemIsPtr = ti.elemkind == uint8(reflect.Ptr) + if rtelemIsPtr { + rtelemElem = ti.elem.Elem() + } + } else { + fn = d.fn(rtelem) + } + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if j >= rvlen { + d.arrayCannotExpand(rvlen, j+1) + d.swallow() + continue + } + + rv9 = rvArrayIndex(rv, j, f.ti, false) + if elemReset { + rvSetZero(rv9) + } + if d.d.TryNil() { + rvSetZero(rv9) + } else if builtin { + if rtelemIsPtr { + if rvIsNil(rv9) { + rvSetDirect(rv9, reflect.New(rtelemElem)) + } + d.decode(rv2i(rv9)) + } else { + d.decode(rv2i(rvAddr(rv9, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rv9, fn) + } + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } +} + +func (d *decoderSimpleIO) kChan(f *decFnInfo, rv reflect.Value) { + _ = d.d + + ti := f.ti + if ti.chandir&uint8(reflect.SendDir) == 0 { + halt.errorStr("receive-only channel cannot be decoded") + } + ctyp := d.d.ContainerType() + if ctyp == valueTypeBytes || ctyp == valueTypeString { + + if !(ti.rtid == uint8SliceTypId || ti.elemkind == uint8(reflect.Uint8)) { + halt.errorf("bytes/string in stream must decode into slice/array of bytes, not %v", ti.rt) + } + bs2, _ := d.d.DecodeBytes() + irv := rv2i(rv) + ch, ok := irv.(chan<- byte) + if !ok { + ch = irv.(chan byte) + } + for _, b := range bs2 { + ch <- b + } + return + } + + var rvCanset = rv.CanSet() + + var containerLenS int + isArray := ctyp == valueTypeArray + if isArray { + containerLenS = d.arrayStart(d.d.ReadArrayStart()) + } else if ctyp == valueTypeMap { + containerLenS = d.mapStart(d.d.ReadMapStart()) * 2 + } else { + halt.errorStr2("decoding into a slice, expect map/array - got ", ctyp.String()) + } + + if containerLenS == 0 { + if rvCanset && rvIsNil(rv) { + rvSetDirect(rv, reflect.MakeChan(ti.rt, 0)) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + return + } + + rtelem := ti.elem + useTransient := decUseTransient && ti.elemkind != byte(reflect.Ptr) && ti.tielem.flagCanTransient + + for k := reflect.Kind(ti.elemkind); k == reflect.Ptr; k = rtelem.Kind() { + rtelem = rtelem.Elem() + } + + var fn *decFnSimpleIO + + var rvChanged bool + var rv0 = rv + var rv9 reflect.Value + + var rvlen int + hasLen := containerLenS >= 0 + maxInitLen := d.maxInitLen() + + for j := 0; d.containerNext(j, containerLenS, hasLen); j++ { + if j == 0 { + if rvIsNil(rv) { + if hasLen { + rvlen = int(decInferLen(containerLenS, maxInitLen, uint(ti.elemsize))) + } else { + rvlen = decDefChanCap + } + if rvCanset { + rv = reflect.MakeChan(ti.rt, rvlen) + rvChanged = true + } else { + halt.errorStr("cannot decode into non-settable chan") + } + } + if fn == nil { + fn = d.fn(rtelem) + } + } + + if ctyp == valueTypeArray { + d.arrayElem(j == 0) + } else if j&1 == 0 { + d.mapElemKey(j == 0) + } else { + d.mapElemValue() + } + + if rv9.IsValid() { + rvSetZero(rv9) + } else if useTransient { + rv9 = d.perType.TransientAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } else { + rv9 = rvZeroAddrK(ti.elem, reflect.Kind(ti.elemkind)) + } + if !d.d.TryNil() { + d.decodeValueNoCheckNil(rv9, fn) + } + rv.Send(rv9) + } + if isArray { + d.arrayEnd() + } else { + d.mapEnd() + } + + if rvChanged { + rvSetDirect(rv0, rv) + } + +} + +func (d *decoderSimpleIO) kMap(f *decFnInfo, rv reflect.Value) { + _ = d.d + containerLen := d.mapStart(d.d.ReadMapStart()) + ti := f.ti + if rvIsNil(rv) { + rvlen := int(decInferLen(containerLen, d.maxInitLen(), uint(ti.keysize+ti.elemsize))) + rvSetDirect(rv, makeMapReflect(ti.rt, rvlen)) + } + + if containerLen == 0 { + d.mapEnd() + return + } + + ktype, vtype := ti.key, ti.elem + ktypeId := rt2id(ktype) + vtypeKind := reflect.Kind(ti.elemkind) + ktypeKind := reflect.Kind(ti.keykind) + mparams := getMapReqParams(ti) + + vtypePtr := vtypeKind == reflect.Ptr + ktypePtr := ktypeKind == reflect.Ptr + + vTransient := decUseTransient && !vtypePtr && ti.tielem.flagCanTransient + + kTransient := vTransient && !ktypePtr && ti.tikey.flagCanTransient + + var vtypeElem reflect.Type + + var keyFn, valFn *decFnSimpleIO + var ktypeLo, vtypeLo = ktype, vtype + + if ktypeKind == reflect.Ptr { + for ktypeLo = ktype.Elem(); ktypeLo.Kind() == reflect.Ptr; ktypeLo = ktypeLo.Elem() { + } + } + + if vtypePtr { + vtypeElem = vtype.Elem() + for vtypeLo = vtypeElem; vtypeLo.Kind() == reflect.Ptr; vtypeLo = vtypeLo.Elem() { + } + } + + rvkMut := !scalarBitset.isset(ti.keykind) + rvvMut := !scalarBitset.isset(ti.elemkind) + rvvCanNil := isnilBitset.isset(ti.elemkind) + + var rvk, rvkn, rvv, rvvn, rvva, rvvz reflect.Value + + var doMapGet, doMapSet bool + + if !d.h.MapValueReset { + if rvvMut && (vtypeKind != reflect.Interface || !d.h.InterfaceReset) { + doMapGet = true + rvva = mapAddrLoopvarRV(vtype, vtypeKind) + } + } + + ktypeIsString := ktypeId == stringTypId + ktypeIsIntf := ktypeId == intfTypId + hasLen := containerLen >= 0 + + var kstr2bs []byte + var kstr string + + var mapKeyStringSharesBytesBuf bool + var att dBytesAttachState + + var vElem, kElem reflect.Type + kbuiltin := ti.tikey.flagDecBuiltin && ti.keykind != uint8(reflect.Slice) + vbuiltin := ti.tielem.flagDecBuiltin + if kbuiltin && ktypePtr { + kElem = ti.key.Elem() + } + if vbuiltin && vtypePtr { + vElem = ti.elem.Elem() + } + + for j := 0; d.containerNext(j, containerLen, hasLen); j++ { + mapKeyStringSharesBytesBuf = false + kstr = "" + if j == 0 { + + if kTransient { + rvk = d.perType.TransientAddr2K(ktype, ktypeKind) + } else { + rvk = rvZeroAddrK(ktype, ktypeKind) + } + if !rvkMut { + rvkn = rvk + } + if !rvvMut { + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + } + if !ktypeIsString && keyFn == nil { + keyFn = d.fn(ktypeLo) + } + if valFn == nil { + valFn = d.fn(vtypeLo) + } + } else if rvkMut { + rvSetZero(rvk) + } else { + rvk = rvkn + } + + d.mapElemKey(j == 0) + + if d.d.TryNil() { + rvSetZero(rvk) + } else if ktypeIsString { + kstr2bs, att = d.d.DecodeStringAsBytes() + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, att) + rvSetString(rvk, kstr) + } else { + if kbuiltin { + if ktypePtr { + if rvIsNil(rvk) { + rvSetDirect(rvk, reflect.New(kElem)) + } + d.decode(rv2i(rvk)) + } else { + d.decode(rv2i(rvAddr(rvk, ti.tikey.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvk, keyFn) + } + + if ktypeIsIntf { + if rvk2 := rvk.Elem(); rvk2.IsValid() && rvk2.Type() == uint8SliceTyp { + kstr2bs = rvGetBytes(rvk2) + kstr, mapKeyStringSharesBytesBuf = d.bytes2Str(kstr2bs, dBytesAttachView) + rvSetIntf(rvk, rv4istr(kstr)) + } + + } + } + + if mapKeyStringSharesBytesBuf && d.bufio { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + mapKeyStringSharesBytesBuf = false + } + + d.mapElemValue() + + if d.d.TryNil() { + if mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + + if !rvvz.IsValid() { + rvvz = rvZeroK(vtype, vtypeKind) + } + mapSet(rv, rvk, rvvz, mparams) + continue + } + + doMapSet = true + + if !rvvMut { + rvv = rvvn + } else if !doMapGet { + goto NEW_RVV + } else { + rvv = mapGet(rv, rvk, rvva, mparams) + if !rvv.IsValid() || (rvvCanNil && rvIsNil(rvv)) { + goto NEW_RVV + } + switch vtypeKind { + case reflect.Ptr, reflect.Map: + doMapSet = false + case reflect.Interface: + + rvvn = rvv.Elem() + if k := rvvn.Kind(); (k == reflect.Ptr || k == reflect.Map) && !rvIsNil(rvvn) { + d.decodeValueNoCheckNil(rvvn, nil) + continue + } + + rvvn = rvZeroAddrK(vtype, vtypeKind) + rvSetIntf(rvvn, rvv) + rvv = rvvn + default: + + if vTransient { + rvvn = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvvn = rvZeroAddrK(vtype, vtypeKind) + } + rvSetDirect(rvvn, rvv) + rvv = rvvn + } + } + goto DECODE_VALUE_NO_CHECK_NIL + + NEW_RVV: + if vtypePtr { + rvv = reflect.New(vtypeElem) + } else if vTransient { + rvv = d.perType.TransientAddrK(vtype, vtypeKind) + } else { + rvv = rvZeroAddrK(vtype, vtypeKind) + } + + DECODE_VALUE_NO_CHECK_NIL: + if doMapSet && mapKeyStringSharesBytesBuf { + if ktypeIsString { + rvSetString(rvk, d.detach2Str(kstr2bs, att)) + } else { + rvSetIntf(rvk, rv4istr(d.detach2Str(kstr2bs, att))) + } + } + if vbuiltin { + if vtypePtr { + if rvIsNil(rvv) { + rvSetDirect(rvv, reflect.New(vElem)) + } + d.decode(rv2i(rvv)) + } else { + d.decode(rv2i(rvAddr(rvv, ti.tielem.ptr))) + } + } else { + d.decodeValueNoCheckNil(rvv, valFn) + } + if doMapSet { + mapSet(rv, rvk, rvv, mparams) + } + } + + d.mapEnd() +} + +func (d *decoderSimpleIO) init(h Handle) { + initHandle(h) + callMake(&d.d) + d.hh = h + d.h = h.getBasicHandle() + + d.err = errDecoderNotInitialized + + if d.h.InternString && d.is == nil { + d.is.init() + } + + d.fp = d.d.init(h, &d.decoderBase, d).(*fastpathDsSimpleIO) + + if d.bytes { + d.rtidFn = &d.h.rtidFnsDecBytes + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtBytes + } else { + d.bufio = d.h.ReaderBufferSize > 0 + d.rtidFn = &d.h.rtidFnsDecIO + d.rtidFnNoExt = &d.h.rtidFnsDecNoExtIO + } + + d.reset() + +} + +func (d *decoderSimpleIO) reset() { + d.d.reset() + d.err = nil + d.c = 0 + d.depth = 0 + d.calls = 0 + + d.maxdepth = decDefMaxDepth + if d.h.MaxDepth > 0 { + d.maxdepth = d.h.MaxDepth + } + d.mtid = 0 + d.stid = 0 + d.mtr = false + d.str = false + if d.h.MapType != nil { + d.mtid = rt2id(d.h.MapType) + _, d.mtr = fastpathAvIndex(d.mtid) + } + if d.h.SliceType != nil { + d.stid = rt2id(d.h.SliceType) + _, d.str = fastpathAvIndex(d.stid) + } +} + +func (d *decoderSimpleIO) Reset(r io.Reader) { + if d.bytes { + halt.onerror(errDecNoResetBytesWithReader) + } + d.reset() + if r == nil { + r = &eofReader + } + d.d.resetInIO(r) +} + +func (d *decoderSimpleIO) ResetBytes(in []byte) { + if !d.bytes { + halt.onerror(errDecNoResetReaderWithBytes) + } + d.resetBytes(in) +} + +func (d *decoderSimpleIO) resetBytes(in []byte) { + d.reset() + if in == nil { + in = zeroByteSlice + } + d.d.resetInBytes(in) +} + +func (d *decoderSimpleIO) ResetString(s string) { + d.ResetBytes(bytesView(s)) +} + +func (d *decoderSimpleIO) Decode(v interface{}) (err error) { + + defer panicValToErr(d, callRecoverSentinel, &d.err, &err, debugging) + d.mustDecode(v) + return +} + +func (d *decoderSimpleIO) MustDecode(v interface{}) { + defer panicValToErr(d, callRecoverSentinel, &d.err, nil, true) + d.mustDecode(v) + return +} + +func (d *decoderSimpleIO) mustDecode(v interface{}) { + halt.onerror(d.err) + if d.hh == nil { + halt.onerror(errNoFormatHandle) + } + + d.calls++ + d.decode(v) + d.calls-- +} + +func (d *decoderSimpleIO) Release() {} + +func (d *decoderSimpleIO) swallow() { + d.d.nextValueBytes() +} + +func (d *decoderSimpleIO) nextValueBytes() []byte { + return d.d.nextValueBytes() +} + +func (d *decoderSimpleIO) decode(iv interface{}) { + _ = d.d + + rv, ok := isNil(iv, true) + if ok { + halt.onerror(errCannotDecodeIntoNil) + } + + switch v := iv.(type) { + + case *string: + *v = d.detach2Str(d.d.DecodeStringAsBytes()) + case *bool: + *v = d.d.DecodeBool() + case *int: + *v = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize)) + case *int8: + *v = int8(chkOvf.IntV(d.d.DecodeInt64(), 8)) + case *int16: + *v = int16(chkOvf.IntV(d.d.DecodeInt64(), 16)) + case *int32: + *v = int32(chkOvf.IntV(d.d.DecodeInt64(), 32)) + case *int64: + *v = d.d.DecodeInt64() + case *uint: + *v = uint(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *uint8: + *v = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8)) + case *uint16: + *v = uint16(chkOvf.UintV(d.d.DecodeUint64(), 16)) + case *uint32: + *v = uint32(chkOvf.UintV(d.d.DecodeUint64(), 32)) + case *uint64: + *v = d.d.DecodeUint64() + case *uintptr: + *v = uintptr(chkOvf.UintV(d.d.DecodeUint64(), uintBitsize)) + case *float32: + *v = d.d.DecodeFloat32() + case *float64: + *v = d.d.DecodeFloat64() + case *complex64: + *v = complex(d.d.DecodeFloat32(), 0) + case *complex128: + *v = complex(d.d.DecodeFloat64(), 0) + case *[]byte: + *v, _ = d.decodeBytesInto(*v, false) + case []byte: + + d.decodeBytesInto(v[:len(v):len(v)], true) + case *time.Time: + *v = d.d.DecodeTime() + case *Raw: + *v = d.rawBytes() + + case *interface{}: + d.decodeValue(rv4iptr(v), nil) + + case reflect.Value: + if ok, _ = isDecodeable(v); !ok { + d.haltAsNotDecodeable(v) + } + d.decodeValue(v, nil) + + default: + + if skipFastpathTypeSwitchInDirectCall || !d.dh.fastpathDecodeTypeSwitch(iv, d) { + if !rv.IsValid() { + rv = reflect.ValueOf(iv) + } + if ok, _ = isDecodeable(rv); !ok { + d.haltAsNotDecodeable(rv) + } + d.decodeValue(rv, nil) + } + } +} + +func (d *decoderSimpleIO) decodeValue(rv reflect.Value, fn *decFnSimpleIO) { + if d.d.TryNil() { + decSetNonNilRV2Zero(rv) + } else { + d.decodeValueNoCheckNil(rv, fn) + } +} + +func (d *decoderSimpleIO) decodeValueNoCheckNil(rv reflect.Value, fn *decFnSimpleIO) { + + var rvp reflect.Value + var rvpValid bool +PTR: + if rv.Kind() == reflect.Ptr { + rvpValid = true + if rvIsNil(rv) { + rvSetDirect(rv, reflect.New(rv.Type().Elem())) + } + rvp = rv + rv = rv.Elem() + goto PTR + } + + if fn == nil { + fn = d.fn(rv.Type()) + } + if fn.i.addrD { + if rvpValid { + rv = rvp + } else if rv.CanAddr() { + rv = rvAddr(rv, fn.i.ti.ptr) + } else if fn.i.addrDf { + halt.errorStr("cannot decode into a non-pointer value") + } + } + fn.fd(d, &fn.i, rv) +} + +func (d *decoderSimpleIO) decodeAs(v interface{}, t reflect.Type, ext bool) { + if ext { + d.decodeValue(baseRV(v), d.fn(t)) + } else { + d.decodeValue(baseRV(v), d.fnNoExt(t)) + } +} + +func (d *decoderSimpleIO) structFieldNotFound(index int, rvkencname string) { + + if d.h.ErrorIfNoField { + if index >= 0 { + halt.errorInt("no matching struct field found when decoding stream array at index ", int64(index)) + } else if rvkencname != "" { + halt.errorStr2("no matching struct field found when decoding stream map with key ", rvkencname) + } + } + d.swallow() +} + +func (d *decoderSimpleIO) decodeBytesInto(out []byte, mustFit bool) (v []byte, state dBytesIntoState) { + v, att := d.d.DecodeBytes() + if cap(v) == 0 || (att >= dBytesAttachViewZerocopy && !mustFit) { + + return + } + if len(v) == 0 { + v = zeroByteSlice + return + } + if len(out) == len(v) { + state = dBytesIntoParamOut + } else if cap(out) >= len(v) { + out = out[:len(v)] + state = dBytesIntoParamOutSlice + } else if mustFit { + halt.errorf("bytes capacity insufficient for decoded bytes: got/expected: %d/%d", len(v), len(out)) + } else { + out = make([]byte, len(v)) + state = dBytesIntoNew + } + copy(out, v) + v = out + return +} + +func (d *decoderSimpleIO) rawBytes() (v []byte) { + + v = d.d.nextValueBytes() + if d.bytes && !d.h.ZeroCopy { + vv := make([]byte, len(v)) + copy(vv, v) + v = vv + } + return +} + +func (d *decoderSimpleIO) wrapErr(v error, err *error) { + *err = wrapCodecErr(v, d.hh.Name(), d.d.NumBytesRead(), false) +} + +func (d *decoderSimpleIO) NumBytesRead() int { + return d.d.NumBytesRead() +} + +func (d *decoderSimpleIO) containerNext(j, containerLen int, hasLen bool) bool { + + if hasLen { + return j < containerLen + } + return !d.d.CheckBreak() +} + +func (d *decoderSimpleIO) mapElemKey(firstTime bool) { + d.d.ReadMapElemKey(firstTime) + d.c = containerMapKey +} + +func (d *decoderSimpleIO) mapElemValue() { + d.d.ReadMapElemValue() + d.c = containerMapValue +} + +func (d *decoderSimpleIO) mapEnd() { + d.d.ReadMapEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderSimpleIO) arrayElem(firstTime bool) { + d.d.ReadArrayElem(firstTime) + d.c = containerArrayElem +} + +func (d *decoderSimpleIO) arrayEnd() { + d.d.ReadArrayEnd() + d.depthDecr() + d.c = 0 +} + +func (d *decoderSimpleIO) interfaceExtConvertAndDecode(v interface{}, ext InterfaceExt) { + + var vv interface{} + d.decode(&vv) + ext.UpdateExt(v, vv) + +} + +func (d *decoderSimpleIO) fn(t reflect.Type) *decFnSimpleIO { + return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false) +} + +func (d *decoderSimpleIO) fnNoExt(t reflect.Type) *decFnSimpleIO { + return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true) +} + +func (helperDecDriverSimpleIO) newDecoderBytes(in []byte, h Handle) *decoderSimpleIO { + var c1 decoderSimpleIO + c1.bytes = true + c1.init(h) + c1.ResetBytes(in) + return &c1 +} + +func (helperDecDriverSimpleIO) newDecoderIO(in io.Reader, h Handle) *decoderSimpleIO { + var c1 decoderSimpleIO + c1.init(h) + c1.Reset(in) + return &c1 +} + +func (helperDecDriverSimpleIO) decFnloadFastpathUnderlying(ti *typeInfo, fp *fastpathDsSimpleIO) (f *fastpathDSimpleIO, u reflect.Type) { + rtid := rt2id(ti.fastpathUnderlying) + idx, ok := fastpathAvIndex(rtid) + if !ok { + return + } + f = &fp[idx] + if uint8(reflect.Array) == ti.kind { + u = reflect.ArrayOf(ti.rt.Len(), ti.elem) + } else { + u = f.rt + } + return +} + +func (helperDecDriverSimpleIO) decFindRtidFn(s []decRtidFnSimpleIO, rtid uintptr) (i uint, fn *decFnSimpleIO) { + + var h uint + var j = uint(len(s)) +LOOP: + if i < j { + h = (i + j) >> 1 + if s[h].rtid < rtid { + i = h + 1 + } else { + j = h + } + goto LOOP + } + if i < uint(len(s)) && s[i].rtid == rtid { + fn = s[i].fn + } + return +} + +func (helperDecDriverSimpleIO) decFromRtidFnSlice(fns *atomicRtidFnSlice) (s []decRtidFnSimpleIO) { + if v := fns.load(); v != nil { + s = *(lowLevelToPtr[[]decRtidFnSimpleIO](v)) + } + return +} + +func (dh helperDecDriverSimpleIO) decFnViaBH(rt reflect.Type, fns *atomicRtidFnSlice, x *BasicHandle, fp *fastpathDsSimpleIO, + checkExt bool) (fn *decFnSimpleIO) { + return dh.decFnVia(rt, fns, x.typeInfos(), &x.mu, x.extHandle, fp, + checkExt, x.CheckCircularRef, x.timeBuiltin, x.binaryHandle, x.jsonHandle) +} + +func (dh helperDecDriverSimpleIO) decFnVia(rt reflect.Type, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsSimpleIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnSimpleIO) { + rtid := rt2id(rt) + var sp []decRtidFnSimpleIO = dh.decFromRtidFnSlice(fns) + if sp != nil { + _, fn = dh.decFindRtidFn(sp, rtid) + } + if fn == nil { + fn = dh.decFnViaLoader(rt, rtid, fns, tinfos, mu, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + } + return +} + +func (dh helperDecDriverSimpleIO) decFnViaLoader(rt reflect.Type, rtid uintptr, fns *atomicRtidFnSlice, + tinfos *TypeInfos, mu *sync.Mutex, exth extHandle, fp *fastpathDsSimpleIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnSimpleIO) { + + fn = dh.decFnLoad(rt, rtid, tinfos, exth, fp, checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json) + var sp []decRtidFnSimpleIO + mu.Lock() + sp = dh.decFromRtidFnSlice(fns) + + if sp == nil { + sp = []decRtidFnSimpleIO{{rtid, fn}} + fns.store(ptrToLowLevel(&sp)) + } else { + idx, fn2 := dh.decFindRtidFn(sp, rtid) + if fn2 == nil { + sp2 := make([]decRtidFnSimpleIO, len(sp)+1) + copy(sp2[idx+1:], sp[idx:]) + copy(sp2, sp[:idx]) + sp2[idx] = decRtidFnSimpleIO{rtid, fn} + fns.store(ptrToLowLevel(&sp2)) + } + } + mu.Unlock() + return +} + +func (dh helperDecDriverSimpleIO) decFnLoad(rt reflect.Type, rtid uintptr, tinfos *TypeInfos, + exth extHandle, fp *fastpathDsSimpleIO, + checkExt, checkCircularRef, timeBuiltin, binaryEncoding, json bool) (fn *decFnSimpleIO) { + fn = new(decFnSimpleIO) + fi := &(fn.i) + ti := tinfos.get(rtid, rt) + fi.ti = ti + rk := reflect.Kind(ti.kind) + + fi.addrDf = true + + if rtid == timeTypId && timeBuiltin { + fn.fd = (*decoderSimpleIO).kTime + } else if rtid == rawTypId { + fn.fd = (*decoderSimpleIO).raw + } else if rtid == rawExtTypId { + fn.fd = (*decoderSimpleIO).rawExt + fi.addrD = true + } else if xfFn := exth.getExt(rtid, checkExt); xfFn != nil { + fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext + fn.fd = (*decoderSimpleIO).ext + fi.addrD = true + } else if ti.flagSelfer || ti.flagSelferPtr { + fn.fd = (*decoderSimpleIO).selferUnmarshal + fi.addrD = ti.flagSelferPtr + } else if supportMarshalInterfaces && binaryEncoding && + (ti.flagBinaryMarshaler || ti.flagBinaryMarshalerPtr) && + (ti.flagBinaryUnmarshaler || ti.flagBinaryUnmarshalerPtr) { + fn.fd = (*decoderSimpleIO).binaryUnmarshal + fi.addrD = ti.flagBinaryUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && json && + (ti.flagJsonMarshaler || ti.flagJsonMarshalerPtr) && + (ti.flagJsonUnmarshaler || ti.flagJsonUnmarshalerPtr) { + + fn.fd = (*decoderSimpleIO).jsonUnmarshal + fi.addrD = ti.flagJsonUnmarshalerPtr + } else if supportMarshalInterfaces && !binaryEncoding && + (ti.flagTextMarshaler || ti.flagTextMarshalerPtr) && + (ti.flagTextUnmarshaler || ti.flagTextUnmarshalerPtr) { + fn.fd = (*decoderSimpleIO).textUnmarshal + fi.addrD = ti.flagTextUnmarshalerPtr + } else { + if fastpathEnabled && (rk == reflect.Map || rk == reflect.Slice || rk == reflect.Array) { + var rtid2 uintptr + if !ti.flagHasPkgPath { + rtid2 = rtid + if rk == reflect.Array { + rtid2 = rt2id(ti.key) + } + if idx, ok := fastpathAvIndex(rtid2); ok { + fn.fd = fp[idx].decfn + fi.addrD = true + fi.addrDf = false + if rk == reflect.Array { + fi.addrD = false + } + } + } else { + + xfe, xrt := dh.decFnloadFastpathUnderlying(ti, fp) + if xfe != nil { + xfnf2 := xfe.decfn + if rk == reflect.Array { + fi.addrD = false + fn.fd = func(d *decoderSimpleIO, xf *decFnInfo, xrv reflect.Value) { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } else { + fi.addrD = true + fi.addrDf = false + xptr2rt := reflect.PointerTo(xrt) + fn.fd = func(d *decoderSimpleIO, xf *decFnInfo, xrv reflect.Value) { + if xrv.Kind() == reflect.Ptr { + xfnf2(d, xf, rvConvert(xrv, xptr2rt)) + } else { + xfnf2(d, xf, rvConvert(xrv, xrt)) + } + } + } + } + } + } + if fn.fd == nil { + switch rk { + case reflect.Bool: + fn.fd = (*decoderSimpleIO).kBool + case reflect.String: + fn.fd = (*decoderSimpleIO).kString + case reflect.Int: + fn.fd = (*decoderSimpleIO).kInt + case reflect.Int8: + fn.fd = (*decoderSimpleIO).kInt8 + case reflect.Int16: + fn.fd = (*decoderSimpleIO).kInt16 + case reflect.Int32: + fn.fd = (*decoderSimpleIO).kInt32 + case reflect.Int64: + fn.fd = (*decoderSimpleIO).kInt64 + case reflect.Uint: + fn.fd = (*decoderSimpleIO).kUint + case reflect.Uint8: + fn.fd = (*decoderSimpleIO).kUint8 + case reflect.Uint16: + fn.fd = (*decoderSimpleIO).kUint16 + case reflect.Uint32: + fn.fd = (*decoderSimpleIO).kUint32 + case reflect.Uint64: + fn.fd = (*decoderSimpleIO).kUint64 + case reflect.Uintptr: + fn.fd = (*decoderSimpleIO).kUintptr + case reflect.Float32: + fn.fd = (*decoderSimpleIO).kFloat32 + case reflect.Float64: + fn.fd = (*decoderSimpleIO).kFloat64 + case reflect.Complex64: + fn.fd = (*decoderSimpleIO).kComplex64 + case reflect.Complex128: + fn.fd = (*decoderSimpleIO).kComplex128 + case reflect.Chan: + fn.fd = (*decoderSimpleIO).kChan + case reflect.Slice: + fn.fd = (*decoderSimpleIO).kSlice + case reflect.Array: + fi.addrD = false + fn.fd = (*decoderSimpleIO).kArray + case reflect.Struct: + if ti.simple { + fn.fd = (*decoderSimpleIO).kStructSimple + } else { + fn.fd = (*decoderSimpleIO).kStruct + } + case reflect.Map: + fn.fd = (*decoderSimpleIO).kMap + case reflect.Interface: + + fn.fd = (*decoderSimpleIO).kInterface + default: + + fn.fd = (*decoderSimpleIO).kErr + } + } + } + return +} +func (e *simpleEncDriverIO) EncodeNil() { + e.w.writen1(simpleVdNil) +} + +func (e *simpleEncDriverIO) EncodeBool(b bool) { + if e.h.EncZeroValuesAsNil && e.e.c != containerMapKey && !b { + e.EncodeNil() + return + } + if b { + e.w.writen1(simpleVdTrue) + } else { + e.w.writen1(simpleVdFalse) + } +} + +func (e *simpleEncDriverIO) EncodeFloat32(f float32) { + if e.h.EncZeroValuesAsNil && e.e.c != containerMapKey && f == 0.0 { + e.EncodeNil() + return + } + e.w.writen1(simpleVdFloat32) + e.w.writen4(bigen.PutUint32(math.Float32bits(f))) +} + +func (e *simpleEncDriverIO) EncodeFloat64(f float64) { + if e.h.EncZeroValuesAsNil && e.e.c != containerMapKey && f == 0.0 { + e.EncodeNil() + return + } + e.w.writen1(simpleVdFloat64) + e.w.writen8(bigen.PutUint64(math.Float64bits(f))) +} + +func (e *simpleEncDriverIO) EncodeInt(v int64) { + if v < 0 { + e.encUint(uint64(-v), simpleVdNegInt) + } else { + e.encUint(uint64(v), simpleVdPosInt) + } +} + +func (e *simpleEncDriverIO) EncodeUint(v uint64) { + e.encUint(v, simpleVdPosInt) +} + +func (e *simpleEncDriverIO) encUint(v uint64, bd uint8) { + if e.h.EncZeroValuesAsNil && e.e.c != containerMapKey && v == 0 { + e.EncodeNil() + return + } + if v <= math.MaxUint8 { + e.w.writen2(bd, uint8(v)) + } else if v <= math.MaxUint16 { + e.w.writen1(bd + 1) + e.w.writen2(bigen.PutUint16(uint16(v))) + } else if v <= math.MaxUint32 { + e.w.writen1(bd + 2) + e.w.writen4(bigen.PutUint32(uint32(v))) + } else { + e.w.writen1(bd + 3) + e.w.writen8(bigen.PutUint64(v)) + } +} + +func (e *simpleEncDriverIO) encLen(bd byte, length int) { + if length == 0 { + e.w.writen1(bd) + } else if length <= math.MaxUint8 { + e.w.writen1(bd + 1) + e.w.writen1(uint8(length)) + } else if length <= math.MaxUint16 { + e.w.writen1(bd + 2) + e.w.writen2(bigen.PutUint16(uint16(length))) + } else if int64(length) <= math.MaxUint32 { + e.w.writen1(bd + 3) + e.w.writen4(bigen.PutUint32(uint32(length))) + } else { + e.w.writen1(bd + 4) + e.w.writen8(bigen.PutUint64(uint64(length))) + } +} + +func (e *simpleEncDriverIO) EncodeExt(v interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + var bs0, bs []byte + if ext == SelfExt { + bs0 = e.e.blist.get(1024) + bs = bs0 + sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, true) }) + } else { + bs = ext.WriteExt(v) + } + if bs == nil { + e.writeNilBytes() + goto END + } + e.encodeExtPreamble(uint8(xtag), len(bs)) + e.w.writeb(bs) +END: + if ext == SelfExt { + e.e.blist.put(bs) + if !byteSliceSameData(bs0, bs) { + e.e.blist.put(bs0) + } + } +} + +func (e *simpleEncDriverIO) EncodeRawExt(re *RawExt) { + e.encodeExtPreamble(uint8(re.Tag), len(re.Data)) + e.w.writeb(re.Data) +} + +func (e *simpleEncDriverIO) encodeExtPreamble(xtag byte, length int) { + e.encLen(simpleVdExt, length) + e.w.writen1(xtag) +} + +func (e *simpleEncDriverIO) WriteArrayStart(length int) { + e.encLen(simpleVdArray, length) +} + +func (e *simpleEncDriverIO) WriteMapStart(length int) { + e.encLen(simpleVdMap, length) +} + +func (e *simpleEncDriverIO) WriteArrayEmpty() { + + e.w.writen1(simpleVdArray) +} + +func (e *simpleEncDriverIO) WriteMapEmpty() { + + e.w.writen1(simpleVdMap) +} + +func (e *simpleEncDriverIO) EncodeString(v string) { + if e.h.EncZeroValuesAsNil && e.e.c != containerMapKey && v == "" { + e.EncodeNil() + return + } + if e.h.StringToRaw { + e.encLen(simpleVdByteArray, len(v)) + } else { + e.encLen(simpleVdString, len(v)) + } + e.w.writestr(v) +} + +func (e *simpleEncDriverIO) EncodeStringNoEscape4Json(v string) { e.EncodeString(v) } + +func (e *simpleEncDriverIO) EncodeStringBytesRaw(v []byte) { + + e.encLen(simpleVdByteArray, len(v)) + e.w.writeb(v) +} + +func (e *simpleEncDriverIO) EncodeBytes(v []byte) { + if v == nil { + e.writeNilBytes() + return + } + e.EncodeStringBytesRaw(v) +} + +func (e *simpleEncDriverIO) encodeNilBytes() { + b := byte(simpleVdNil) + if e.h.NilCollectionToZeroLength { + b = simpleVdArray + } + e.w.writen1(b) +} + +func (e *simpleEncDriverIO) writeNilOr(v byte) { + if !e.h.NilCollectionToZeroLength { + v = simpleVdNil + } + e.w.writen1(v) +} + +func (e *simpleEncDriverIO) writeNilArray() { + e.writeNilOr(simpleVdArray) +} + +func (e *simpleEncDriverIO) writeNilMap() { + e.writeNilOr(simpleVdMap) +} + +func (e *simpleEncDriverIO) writeNilBytes() { + e.writeNilOr(simpleVdByteArray) +} + +func (e *simpleEncDriverIO) EncodeTime(t time.Time) { + + if t.IsZero() { + e.EncodeNil() + return + } + v, err := t.MarshalBinary() + halt.onerror(err) + e.w.writen2(simpleVdTime, uint8(len(v))) + e.w.writeb(v) +} + +func (d *simpleDecDriverIO) readNextBd() { + d.bd = d.r.readn1() + d.bdRead = true +} + +func (d *simpleDecDriverIO) advanceNil() (null bool) { + if !d.bdRead { + d.readNextBd() + } + if d.bd == simpleVdNil { + d.bdRead = false + return true + } + return +} + +func (d *simpleDecDriverIO) ContainerType() (vt valueType) { + if !d.bdRead { + d.readNextBd() + } + switch d.bd { + case simpleVdNil: + d.bdRead = false + return valueTypeNil + case simpleVdByteArray, simpleVdByteArray + 1, + simpleVdByteArray + 2, simpleVdByteArray + 3, simpleVdByteArray + 4: + return valueTypeBytes + case simpleVdString, simpleVdString + 1, + simpleVdString + 2, simpleVdString + 3, simpleVdString + 4: + return valueTypeString + case simpleVdArray, simpleVdArray + 1, + simpleVdArray + 2, simpleVdArray + 3, simpleVdArray + 4: + return valueTypeArray + case simpleVdMap, simpleVdMap + 1, + simpleVdMap + 2, simpleVdMap + 3, simpleVdMap + 4: + return valueTypeMap + } + return valueTypeUnset +} + +func (d *simpleDecDriverIO) TryNil() bool { + return d.advanceNil() +} + +func (d *simpleDecDriverIO) decFloat() (f float64, ok bool) { + ok = true + switch d.bd { + case simpleVdFloat32: + f = float64(math.Float32frombits(bigen.Uint32(d.r.readn4()))) + case simpleVdFloat64: + f = math.Float64frombits(bigen.Uint64(d.r.readn8())) + default: + ok = false + } + return +} + +func (d *simpleDecDriverIO) decInteger() (ui uint64, neg, ok bool) { + ok = true + switch d.bd { + case simpleVdPosInt: + ui = uint64(d.r.readn1()) + case simpleVdPosInt + 1: + ui = uint64(bigen.Uint16(d.r.readn2())) + case simpleVdPosInt + 2: + ui = uint64(bigen.Uint32(d.r.readn4())) + case simpleVdPosInt + 3: + ui = uint64(bigen.Uint64(d.r.readn8())) + case simpleVdNegInt: + ui = uint64(d.r.readn1()) + neg = true + case simpleVdNegInt + 1: + ui = uint64(bigen.Uint16(d.r.readn2())) + neg = true + case simpleVdNegInt + 2: + ui = uint64(bigen.Uint32(d.r.readn4())) + neg = true + case simpleVdNegInt + 3: + ui = uint64(bigen.Uint64(d.r.readn8())) + neg = true + default: + ok = false + + } + + return +} + +func (d *simpleDecDriverIO) DecodeInt64() (i int64) { + if d.advanceNil() { + return + } + v1, v2, v3 := d.decInteger() + i = decNegintPosintFloatNumberHelper{d}.int64(v1, v2, v3, false) + d.bdRead = false + return +} + +func (d *simpleDecDriverIO) DecodeUint64() (ui uint64) { + if d.advanceNil() { + return + } + ui = decNegintPosintFloatNumberHelper{d}.uint64(d.decInteger()) + d.bdRead = false + return +} + +func (d *simpleDecDriverIO) DecodeFloat64() (f float64) { + if d.advanceNil() { + return + } + v1, v2 := d.decFloat() + f = decNegintPosintFloatNumberHelper{d}.float64(v1, v2, false) + d.bdRead = false + return +} + +func (d *simpleDecDriverIO) DecodeBool() (b bool) { + if d.advanceNil() { + return + } + if d.bd == simpleVdFalse { + } else if d.bd == simpleVdTrue { + b = true + } else { + halt.errorf("cannot decode bool - %s: %x", msgBadDesc, d.bd) + } + d.bdRead = false + return +} + +func (d *simpleDecDriverIO) ReadMapStart() (length int) { + if d.advanceNil() { + return containerLenNil + } + d.bdRead = false + return d.decLen() +} + +func (d *simpleDecDriverIO) ReadArrayStart() (length int) { + if d.advanceNil() { + return containerLenNil + } + d.bdRead = false + return d.decLen() +} + +func (d *simpleDecDriverIO) uint2Len(ui uint64) int { + if chkOvf.Uint(ui, intBitsize) { + halt.errorf("overflow integer: %v", ui) + } + return int(ui) +} + +func (d *simpleDecDriverIO) decLen() int { + switch d.bd & 7 { + case 0: + return 0 + case 1: + return int(d.r.readn1()) + case 2: + return int(bigen.Uint16(d.r.readn2())) + case 3: + return d.uint2Len(uint64(bigen.Uint32(d.r.readn4()))) + case 4: + return d.uint2Len(bigen.Uint64(d.r.readn8())) + } + halt.errorf("cannot read length: bd%%8 must be in range 0..4. Got: %d", d.bd%8) + return -1 +} + +func (d *simpleDecDriverIO) DecodeStringAsBytes() ([]byte, dBytesAttachState) { + return d.DecodeBytes() +} + +func (d *simpleDecDriverIO) DecodeBytes() (bs []byte, state dBytesAttachState) { + if d.advanceNil() { + return + } + var cond bool + + if d.bd >= simpleVdArray && d.bd <= simpleVdArray+4 { + slen := d.ReadArrayStart() + bs, cond = usableByteSlice(d.d.buf, slen) + for i := 0; i < len(bs); i++ { + bs[i] = uint8(chkOvf.UintV(d.DecodeUint64(), 8)) + } + for i := len(bs); i < slen; i++ { + bs = append(bs, uint8(chkOvf.UintV(d.DecodeUint64(), 8))) + } + if cond { + d.d.buf = bs + } + state = dBytesAttachBuffer + + return + } + + clen := d.decLen() + d.bdRead = false + bs, cond = d.r.readxb(uint(clen)) + state = d.d.attachState(cond) + return +} + +func (d *simpleDecDriverIO) DecodeTime() (t time.Time) { + if d.advanceNil() { + return + } + if d.bd != simpleVdTime { + halt.errorf("invalid descriptor for time.Time - expect 0x%x, received 0x%x", simpleVdTime, d.bd) + } + d.bdRead = false + clen := uint(d.r.readn1()) + b := d.r.readx(clen) + halt.onerror((&t).UnmarshalBinary(b)) + return +} + +func (d *simpleDecDriverIO) DecodeExt(rv interface{}, basetype reflect.Type, xtag uint64, ext Ext) { + xbs, _, _, ok := d.decodeExtV(ext != nil, xtag) + if !ok { + return + } + if ext == SelfExt { + sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, true) }) + } else { + ext.ReadExt(rv, xbs) + } +} + +func (d *simpleDecDriverIO) DecodeRawExt(re *RawExt) { + xbs, realxtag, state, ok := d.decodeExtV(false, 0) + if !ok { + return + } + re.Tag = uint64(realxtag) + re.setData(xbs, state >= dBytesAttachViewZerocopy) +} + +func (d *simpleDecDriverIO) decodeExtV(verifyTag bool, xtagIn uint64) (xbs []byte, xtag byte, bstate dBytesAttachState, ok bool) { + if xtagIn > 0xff { + halt.errorf("ext: tag must be <= 0xff; got: %v", xtagIn) + } + if d.advanceNil() { + return + } + tag := uint8(xtagIn) + switch d.bd { + case simpleVdExt, simpleVdExt + 1, simpleVdExt + 2, simpleVdExt + 3, simpleVdExt + 4: + l := d.decLen() + xtag = d.r.readn1() + if verifyTag && xtag != tag { + halt.errorf("wrong extension tag. Got %b. Expecting: %v", xtag, tag) + } + xbs, ok = d.r.readxb(uint(l)) + bstate = d.d.attachState(ok) + case simpleVdByteArray, simpleVdByteArray + 1, + simpleVdByteArray + 2, simpleVdByteArray + 3, simpleVdByteArray + 4: + xbs, bstate = d.DecodeBytes() + default: + halt.errorf("ext - %s - expecting extensions/bytearray, got: 0x%x", msgBadDesc, d.bd) + } + d.bdRead = false + ok = true + return +} + +func (d *simpleDecDriverIO) DecodeNaked() { + if !d.bdRead { + d.readNextBd() + } + + n := d.d.naked() + var decodeFurther bool + + switch d.bd { + case simpleVdNil: + n.v = valueTypeNil + case simpleVdFalse: + n.v = valueTypeBool + n.b = false + case simpleVdTrue: + n.v = valueTypeBool + n.b = true + case simpleVdPosInt, simpleVdPosInt + 1, simpleVdPosInt + 2, simpleVdPosInt + 3: + if d.h.SignedInteger { + n.v = valueTypeInt + n.i = d.DecodeInt64() + } else { + n.v = valueTypeUint + n.u = d.DecodeUint64() + } + case simpleVdNegInt, simpleVdNegInt + 1, simpleVdNegInt + 2, simpleVdNegInt + 3: + n.v = valueTypeInt + n.i = d.DecodeInt64() + case simpleVdFloat32: + n.v = valueTypeFloat + n.f = d.DecodeFloat64() + case simpleVdFloat64: + n.v = valueTypeFloat + n.f = d.DecodeFloat64() + case simpleVdTime: + n.v = valueTypeTime + n.t = d.DecodeTime() + case simpleVdString, simpleVdString + 1, + simpleVdString + 2, simpleVdString + 3, simpleVdString + 4: + n.v = valueTypeString + n.s = d.d.detach2Str(d.DecodeStringAsBytes()) + case simpleVdByteArray, simpleVdByteArray + 1, + simpleVdByteArray + 2, simpleVdByteArray + 3, simpleVdByteArray + 4: + d.d.fauxUnionReadRawBytes(d, false, d.h.RawToString) + case simpleVdExt, simpleVdExt + 1, simpleVdExt + 2, simpleVdExt + 3, simpleVdExt + 4: + n.v = valueTypeExt + l := d.decLen() + n.u = uint64(d.r.readn1()) + n.l = d.r.readx(uint(l)) + + case simpleVdArray, simpleVdArray + 1, simpleVdArray + 2, + simpleVdArray + 3, simpleVdArray + 4: + n.v = valueTypeArray + decodeFurther = true + case simpleVdMap, simpleVdMap + 1, simpleVdMap + 2, simpleVdMap + 3, simpleVdMap + 4: + n.v = valueTypeMap + decodeFurther = true + default: + halt.errorf("cannot infer value - %s 0x%x", msgBadDesc, d.bd) + } + + if !decodeFurther { + d.bdRead = false + } +} + +func (d *simpleDecDriverIO) nextValueBytes() (v []byte) { + if !d.bdRead { + d.readNextBd() + } + d.r.startRecording() + d.nextValueBytesBdReadR() + v = d.r.stopRecording() + d.bdRead = false + return +} + +func (d *simpleDecDriverIO) nextValueBytesBdReadR() { + c := d.bd + + var length uint + + switch c { + case simpleVdNil, simpleVdFalse, simpleVdTrue, simpleVdString, simpleVdByteArray: + + case simpleVdPosInt, simpleVdNegInt: + d.r.readn1() + case simpleVdPosInt + 1, simpleVdNegInt + 1: + d.r.skip(2) + case simpleVdPosInt + 2, simpleVdNegInt + 2, simpleVdFloat32: + d.r.skip(4) + case simpleVdPosInt + 3, simpleVdNegInt + 3, simpleVdFloat64: + d.r.skip(8) + case simpleVdTime: + c = d.r.readn1() + d.r.skip(uint(c)) + + default: + switch c & 7 { + case 0: + length = 0 + case 1: + b := d.r.readn1() + length = uint(b) + case 2: + x := d.r.readn2() + length = uint(bigen.Uint16(x)) + case 3: + x := d.r.readn4() + length = uint(bigen.Uint32(x)) + case 4: + x := d.r.readn8() + length = uint(bigen.Uint64(x)) + } + + bExt := c >= simpleVdExt && c <= simpleVdExt+7 + bStr := c >= simpleVdString && c <= simpleVdString+7 + bByteArray := c >= simpleVdByteArray && c <= simpleVdByteArray+7 + bArray := c >= simpleVdArray && c <= simpleVdArray+7 + bMap := c >= simpleVdMap && c <= simpleVdMap+7 + + if !(bExt || bStr || bByteArray || bArray || bMap) { + halt.errorf("cannot infer value - %s 0x%x", msgBadDesc, c) + } + + if bExt { + d.r.readn1() + } + + if length == 0 { + break + } + + if bArray { + for i := uint(0); i < length; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + } + } else if bMap { + for i := uint(0); i < length; i++ { + d.readNextBd() + d.nextValueBytesBdReadR() + d.readNextBd() + d.nextValueBytesBdReadR() + } + } else { + d.r.skip(length) + } + } + return +} + +func (d *simpleEncDriverIO) init(hh Handle, shared *encoderBase, enc encoderI) (fp interface{}) { + callMake(&d.w) + d.h = hh.(*SimpleHandle) + d.e = shared + if shared.bytes { + fp = simpleFpEncBytes + } else { + fp = simpleFpEncIO + } + + d.init2(enc) + return +} + +func (e *simpleEncDriverIO) writeBytesAsis(b []byte) { e.w.writeb(b) } + +func (e *simpleEncDriverIO) writerEnd() { e.w.end() } + +func (e *simpleEncDriverIO) resetOutBytes(out *[]byte) { + e.w.resetBytes(*out, out) +} + +func (e *simpleEncDriverIO) resetOutIO(out io.Writer) { + e.w.resetIO(out, e.h.WriterBufferSize, &e.e.blist) +} + +func (d *simpleDecDriverIO) init(hh Handle, shared *decoderBase, dec decoderI) (fp interface{}) { + callMake(&d.r) + d.h = hh.(*SimpleHandle) + d.d = shared + if shared.bytes { + fp = simpleFpDecBytes + } else { + fp = simpleFpDecIO + } + + d.init2(dec) + return +} + +func (d *simpleDecDriverIO) NumBytesRead() int { + return int(d.r.numread()) +} + +func (d *simpleDecDriverIO) resetInBytes(in []byte) { + d.r.resetBytes(in) +} + +func (d *simpleDecDriverIO) resetInIO(r io.Reader) { + d.r.resetIO(r, d.h.ReaderBufferSize, d.h.MaxInitLen, &d.d.blist) +} + +func (d *simpleDecDriverIO) descBd() string { + return sprintf("%v (%s)", d.bd, simpledesc(d.bd)) +} + +func (d *simpleDecDriverIO) DecodeFloat32() (f float32) { + return float32(chkOvf.Float32V(d.DecodeFloat64())) +} diff --git a/vendor/github.com/ugorji/go/codec/simple.notfastpath.mono.generated.go b/vendor/github.com/ugorji/go/codec/simple.notfastpath.mono.generated.go new file mode 100644 index 0000000..04edb74 --- /dev/null +++ b/vendor/github.com/ugorji/go/codec/simple.notfastpath.mono.generated.go @@ -0,0 +1,52 @@ +//go:build !notmono && !codec.notmono && (notfastpath || codec.notfastpath) + +// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package codec + +import ( + "reflect" +) + +type fastpathESimpleBytes struct { + rt reflect.Type + encfn func(*encoderSimpleBytes, *encFnInfo, reflect.Value) +} +type fastpathDSimpleBytes struct { + rt reflect.Type + decfn func(*decoderSimpleBytes, *decFnInfo, reflect.Value) +} +type fastpathEsSimpleBytes [0]fastpathESimpleBytes +type fastpathDsSimpleBytes [0]fastpathDSimpleBytes + +func (helperEncDriverSimpleBytes) fastpathEncodeTypeSwitch(iv interface{}, e *encoderSimpleBytes) bool { + return false +} +func (helperDecDriverSimpleBytes) fastpathDecodeTypeSwitch(iv interface{}, d *decoderSimpleBytes) bool { + return false +} + +func (helperEncDriverSimpleBytes) fastpathEList() (v *fastpathEsSimpleBytes) { return } +func (helperDecDriverSimpleBytes) fastpathDList() (v *fastpathDsSimpleBytes) { return } + +type fastpathESimpleIO struct { + rt reflect.Type + encfn func(*encoderSimpleIO, *encFnInfo, reflect.Value) +} +type fastpathDSimpleIO struct { + rt reflect.Type + decfn func(*decoderSimpleIO, *decFnInfo, reflect.Value) +} +type fastpathEsSimpleIO [0]fastpathESimpleIO +type fastpathDsSimpleIO [0]fastpathDSimpleIO + +func (helperEncDriverSimpleIO) fastpathEncodeTypeSwitch(iv interface{}, e *encoderSimpleIO) bool { + return false +} +func (helperDecDriverSimpleIO) fastpathDecodeTypeSwitch(iv interface{}, d *decoderSimpleIO) bool { + return false +} + +func (helperEncDriverSimpleIO) fastpathEList() (v *fastpathEsSimpleIO) { return } +func (helperDecDriverSimpleIO) fastpathDList() (v *fastpathDsSimpleIO) { return } diff --git a/vendor/github.com/ugorji/go/codec/sort-slice.generated.go b/vendor/github.com/ugorji/go/codec/sort-slice.generated.go deleted file mode 100644 index a755a02..0000000 --- a/vendor/github.com/ugorji/go/codec/sort-slice.generated.go +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -// Code generated from sort-slice.go.tmpl - DO NOT EDIT. - -package codec - -import ( - "bytes" - "reflect" - "time" -) - -type stringSlice []string - -func (p stringSlice) Len() int { return len(p) } -func (p stringSlice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p stringSlice) Less(i, j int) bool { - return p[uint(i)] < p[uint(j)] -} - -type uint8Slice []uint8 - -func (p uint8Slice) Len() int { return len(p) } -func (p uint8Slice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p uint8Slice) Less(i, j int) bool { - return p[uint(i)] < p[uint(j)] -} - -type uint64Slice []uint64 - -func (p uint64Slice) Len() int { return len(p) } -func (p uint64Slice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p uint64Slice) Less(i, j int) bool { - return p[uint(i)] < p[uint(j)] -} - -type intSlice []int - -func (p intSlice) Len() int { return len(p) } -func (p intSlice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p intSlice) Less(i, j int) bool { - return p[uint(i)] < p[uint(j)] -} - -type int32Slice []int32 - -func (p int32Slice) Len() int { return len(p) } -func (p int32Slice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p int32Slice) Less(i, j int) bool { - return p[uint(i)] < p[uint(j)] -} - -type stringRv struct { - v string - r reflect.Value -} -type stringRvSlice []stringRv - -func (p stringRvSlice) Len() int { return len(p) } -func (p stringRvSlice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p stringRvSlice) Less(i, j int) bool { - return p[uint(i)].v < p[uint(j)].v -} - -type stringIntf struct { - v string - i interface{} -} -type stringIntfSlice []stringIntf - -func (p stringIntfSlice) Len() int { return len(p) } -func (p stringIntfSlice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p stringIntfSlice) Less(i, j int) bool { - return p[uint(i)].v < p[uint(j)].v -} - -type float64Rv struct { - v float64 - r reflect.Value -} -type float64RvSlice []float64Rv - -func (p float64RvSlice) Len() int { return len(p) } -func (p float64RvSlice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p float64RvSlice) Less(i, j int) bool { - return p[uint(i)].v < p[uint(j)].v || isNaN64(p[uint(i)].v) && !isNaN64(p[uint(j)].v) -} - -type uint64Rv struct { - v uint64 - r reflect.Value -} -type uint64RvSlice []uint64Rv - -func (p uint64RvSlice) Len() int { return len(p) } -func (p uint64RvSlice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p uint64RvSlice) Less(i, j int) bool { - return p[uint(i)].v < p[uint(j)].v -} - -type int64Rv struct { - v int64 - r reflect.Value -} -type int64RvSlice []int64Rv - -func (p int64RvSlice) Len() int { return len(p) } -func (p int64RvSlice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p int64RvSlice) Less(i, j int) bool { - return p[uint(i)].v < p[uint(j)].v -} - -type timeRv struct { - v time.Time - r reflect.Value -} -type timeRvSlice []timeRv - -func (p timeRvSlice) Len() int { return len(p) } -func (p timeRvSlice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p timeRvSlice) Less(i, j int) bool { - return p[uint(i)].v.Before(p[uint(j)].v) -} - -type bytesRv struct { - v []byte - r reflect.Value -} -type bytesRvSlice []bytesRv - -func (p bytesRvSlice) Len() int { return len(p) } -func (p bytesRvSlice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p bytesRvSlice) Less(i, j int) bool { - return bytes.Compare(p[uint(i)].v, p[uint(j)].v) == -1 -} - -type bytesIntf struct { - v []byte - i interface{} -} -type bytesIntfSlice []bytesIntf - -func (p bytesIntfSlice) Len() int { return len(p) } -func (p bytesIntfSlice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p bytesIntfSlice) Less(i, j int) bool { - return bytes.Compare(p[uint(i)].v, p[uint(j)].v) == -1 -} diff --git a/vendor/github.com/ugorji/go/codec/sort-slice.go.tmpl b/vendor/github.com/ugorji/go/codec/sort-slice.go.tmpl deleted file mode 100644 index 9820960..0000000 --- a/vendor/github.com/ugorji/go/codec/sort-slice.go.tmpl +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -// Code generated from sort-slice.go.tmpl - DO NOT EDIT. - -{{/* -xxxSlice -xxxIntf -xxxIntfSlice -xxxRv -xxxRvSlice - -I'm now going to create them for -- sortables -- sortablesplus - -With the parameters passed in sortables or sortablesplus, -'time, 'bytes' are special, and correspond to time.Time and []byte respectively. -*/}} - -package codec - -import ( - "time" - "reflect" - "bytes" -) - -{{/* func init() { _ = time.Unix } */}} - -{{define "T"}} -func (p {{ .Type }}) Len() int { return len(p) } -func (p {{ .Type }}) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p {{ .Type }}) Less(i, j int) bool { - {{ if eq .Kind "bool" }} return !p[uint(i)]{{.V}} && p[uint(j)]{{.V}} - {{ else if eq .Kind "float32" }} return p[uint(i)]{{.V}} < p[uint(j)]{{.V}} || isNaN32(p[uint(i)]{{.V}}) && !isNaN32(p[uint(j)]{{.V}}) - {{ else if eq .Kind "float64" }} return p[uint(i)]{{.V}} < p[uint(j)]{{.V}} || isNaN64(p[uint(i)]{{.V}}) && !isNaN64(p[uint(j)]{{.V}}) - {{ else if eq .Kind "time" }} return p[uint(i)]{{.V}}.Before(p[uint(j)]{{.V}}) - {{ else if eq .Kind "bytes" }} return bytes.Compare(p[uint(i)]{{.V}}, p[uint(j)]{{.V}}) == -1 - {{ else }} return p[uint(i)]{{.V}} < p[uint(j)]{{.V}} - {{ end -}} -} -{{end}} - -{{range $i, $v := sortables }}{{ $t := tshort $v }} -type {{ $v }}Slice []{{ $t }} -{{template "T" args "Kind" $v "Type" (print $v "Slice") "V" ""}} -{{end}} - -{{range $i, $v := sortablesplus }}{{ $t := tshort $v }} - -type {{ $v }}Rv struct { - v {{ $t }} - r reflect.Value -} -type {{ $v }}RvSlice []{{ $v }}Rv -{{template "T" args "Kind" $v "Type" (print $v "RvSlice") "V" ".v"}} - -{{if eq $v "bytes" "string" -}} -type {{ $v }}Intf struct { - v {{ $t }} - i interface{} -} -type {{ $v }}IntfSlice []{{ $v }}Intf -{{template "T" args "Kind" $v "Type" (print $v "IntfSlice") "V" ".v"}} -{{end}} - -{{end}} diff --git a/vendor/github.com/ugorji/go/codec/writer.go b/vendor/github.com/ugorji/go/codec/writer.go index b6e4813..fcfce61 100644 --- a/vendor/github.com/ugorji/go/codec/writer.go +++ b/vendor/github.com/ugorji/go/codec/writer.go @@ -3,10 +3,14 @@ package codec -import "io" +import ( + "io" +) + +const maxConsecutiveEmptyWrites = 16 // 2 is sufficient, 16 is enough, 64 is optimal // encWriter abstracts writing to a byte array or to an io.Writer. -type encWriter interface { +type encWriterI interface { writeb([]byte) writestr(string) writeqstr(string) // write string wrapped in quotes ie "..." @@ -17,7 +21,11 @@ type encWriter interface { writen4([4]byte) writen8([8]byte) + // isBytes() bool end() + + resetIO(w io.Writer, bufsize int, blist *bytesFreeList) + resetBytes(in []byte, out *[]byte) } // --------------------------------------------- @@ -32,16 +40,18 @@ type bufioEncWriter struct { b [16]byte // scratch buffer and padding (cache-aligned) } -func (z *bufioEncWriter) reset(w io.Writer, bufsize int, blist *bytesFreelist) { +// MARKER: use setByteAt/byteAt to elide the bounds-checks +// when we are sure that we don't go beyond the bounds. + +func (z *bufioEncWriter) resetBytes(in []byte, out *[]byte) { + halt.errorStr("resetBytes is unsupported by bufioEncWriter") +} + +func (z *bufioEncWriter) resetIO(w io.Writer, bufsize int, blist *bytesFreeList) { z.w = w z.n = 0 - if bufsize <= 0 { - bufsize = defEncByteBufSize - } - // bufsize must be >= 8, to accomodate writen methods (where n <= 8) - if bufsize <= 8 { - bufsize = 8 - } + // use minimum bufsize of 16, matching the array z.b and accomodating writen methods (where n <= 8) + bufsize = max(16, bufsize) // max(byteBufSize, bufsize) if cap(z.buf) < bufsize { if len(z.buf) > 0 && &z.buf[0] != &z.b[0] { blist.put(z.buf) @@ -56,17 +66,19 @@ func (z *bufioEncWriter) reset(w io.Writer, bufsize int, blist *bytesFreelist) { } func (z *bufioEncWriter) flushErr() (err error) { - n, err := z.w.Write(z.buf[:z.n]) - z.n -= n - if z.n > 0 { - if err == nil { - err = io.ErrShortWrite + var n int + for i := maxConsecutiveEmptyReads; i > 0; i-- { + n, err = z.w.Write(z.buf[:z.n]) + z.n -= n + if z.n == 0 || err != nil { + return } + // at this point: z.n > 0 && err == nil if n > 0 { copy(z.buf, z.buf[n:z.n+n]) } } - return err + return io.ErrShortWrite // OR io.ErrNoProgress: not enough (or no) data written } func (z *bufioEncWriter) flush() { @@ -131,6 +143,7 @@ func (z *bufioEncWriter) writen1(b1 byte) { // z.buf[z.n] = b1 z.n++ } + func (z *bufioEncWriter) writen2(b1, b2 byte) { if 2 > len(z.buf)-z.n { z.flush() @@ -169,8 +182,14 @@ func (z *bufioEncWriter) endErr() (err error) { return } +func (z *bufioEncWriter) end() { + halt.onerror(z.endErr()) +} + // --------------------------------------------- +var bytesEncAppenderDefOut = []byte{} + // bytesEncAppender implements encWriter and can write to an byte slice. type bytesEncAppender struct { b []byte @@ -203,122 +222,18 @@ func (z *bytesEncAppender) writen4(b [4]byte) { func (z *bytesEncAppender) writen8(b [8]byte) { z.b = append(z.b, b[:]...) - // z.b = append(z.b, b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7]) // prevents inlining encWr.writen4 + // z.b = append(z.b, b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7]) } -func (z *bytesEncAppender) endErr() error { +func (z *bytesEncAppender) end() { *(z.out) = z.b - return nil } -func (z *bytesEncAppender) reset(in []byte, out *[]byte) { + +func (z *bytesEncAppender) resetBytes(in []byte, out *[]byte) { z.b = in[:0] z.out = out } -// -------------------------------------------------- - -type encWr struct { - wb bytesEncAppender - wf *bufioEncWriter - - bytes bool // encoding to []byte - - // MARKER: these fields below should belong directly in Encoder. - // we pack them here for space efficiency and cache-line optimization. - - js bool // is json encoder? - be bool // is binary encoder? - - c containerState - - calls uint16 - seq uint16 // sequencer (e.g. used by binc for symbols, etc) -} - -// MARKER: manually inline bytesEncAppender.writenx/writeqstr methods, -// as calling them causes encWr.writenx/writeqstr methods to not be inlined (cost > 80). -// -// i.e. e.g. instead of writing z.wb.writen2(b1, b2), use z.wb.b = append(z.wb.b, b1, b2) - -func (z *encWr) writeb(s []byte) { - if z.bytes { - z.wb.writeb(s) - } else { - z.wf.writeb(s) - } -} -func (z *encWr) writestr(s string) { - if z.bytes { - z.wb.writestr(s) - } else { - z.wf.writestr(s) - } +func (z *bytesEncAppender) resetIO(w io.Writer, bufsize int, blist *bytesFreeList) { + halt.errorStr("resetIO is unsupported by bytesEncAppender") } - -// MARKER: Add WriteStr to be called directly by generated code without a genHelper forwarding function. -// Go's inlining model adds cost for forwarding functions, preventing inlining (cost goes above 80 budget). - -func (z *encWr) WriteStr(s string) { - if z.bytes { - z.wb.writestr(s) - } else { - z.wf.writestr(s) - } -} - -func (z *encWr) writen1(b1 byte) { - if z.bytes { - z.wb.writen1(b1) - } else { - z.wf.writen1(b1) - } -} - -func (z *encWr) writen2(b1, b2 byte) { - if z.bytes { - // MARKER: z.wb.writen2(b1, b2) - z.wb.b = append(z.wb.b, b1, b2) - } else { - z.wf.writen2(b1, b2) - } -} - -func (z *encWr) writen4(b [4]byte) { - if z.bytes { - // MARKER: z.wb.writen4(b1, b2, b3, b4) - z.wb.b = append(z.wb.b, b[:]...) - // z.wb.writen4(b) - } else { - z.wf.writen4(b) - } -} -func (z *encWr) writen8(b [8]byte) { - if z.bytes { - // z.wb.b = append(z.wb.b, b[:]...) - z.wb.writen8(b) - } else { - z.wf.writen8(b) - } -} - -func (z *encWr) writeqstr(s string) { - if z.bytes { - // MARKER: z.wb.writeqstr(s) - z.wb.b = append(append(append(z.wb.b, '"'), s...), '"') - } else { - z.wf.writeqstr(s) - } -} - -func (z *encWr) endErr() error { - if z.bytes { - return z.wb.endErr() - } - return z.wf.endErr() -} - -func (z *encWr) end() { - halt.onerror(z.endErr()) -} - -var _ encWriter = (*encWr)(nil) diff --git a/vendor/go.uber.org/mock/mockgen/deprecated.go b/vendor/go.uber.org/mock/mockgen/deprecated.go new file mode 100644 index 0000000..0b45a2e --- /dev/null +++ b/vendor/go.uber.org/mock/mockgen/deprecated.go @@ -0,0 +1,41 @@ +package main + +import ( + "flag" + "log" + "os" +) + +const ( + deprecatedFlagProgOnly = "prog_only" + deprecatedFlagExecOnly = "exec_only" +) + +var ( + _ = flag.Bool("prog_only", false, "DEPRECATED (reflect mode) Only generate the reflection program; write it to stdout and exit.") + _ = flag.String("exec_only", "", "DEPRECATED (reflect mode) If set, execute this reflection program.") +) + +// notifyAboutDeprecatedFlags prints a warning message for a deprecated flags if they are set. +func notifyAboutDeprecatedFlags() { + const resetColorPostfix = "\033[0m" + logger := initWarningLogger() + + flag.Visit(func(f *flag.Flag) { + switch f.Name { + case deprecatedFlagProgOnly: + logger.Println("The -prog_only flag is deprecated and has no effect.", resetColorPostfix) + case deprecatedFlagExecOnly: + logger.Println("The -exec_only flag is deprecated and has no effect.", resetColorPostfix) + } + }) +} + +func initWarningLogger() *log.Logger { + const ( + yellowColor = "\033[33m" + warningPrefix = yellowColor + "WARNING: " + ) + + return log.New(os.Stdout, warningPrefix, log.Ldate|log.Ltime) +} diff --git a/vendor/go.uber.org/mock/mockgen/generic.go b/vendor/go.uber.org/mock/mockgen/generic.go new file mode 100644 index 0000000..c2289c2 --- /dev/null +++ b/vendor/go.uber.org/mock/mockgen/generic.go @@ -0,0 +1,103 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "errors" + "fmt" + "go/ast" + "go/token" + + "go.uber.org/mock/mockgen/model" +) + +func getTypeSpecTypeParams(ts *ast.TypeSpec) []*ast.Field { + if ts == nil || ts.TypeParams == nil { + return nil + } + return ts.TypeParams.List +} + +func (p *fileParser) parseGenericType(pkg string, typ ast.Expr, tps map[string]model.Type) (model.Type, error) { + switch v := typ.(type) { + case *ast.IndexExpr: + m, err := p.parseType(pkg, v.X, tps) + if err != nil { + return nil, err + } + nm, ok := m.(*model.NamedType) + if !ok { + return m, nil + } + t, err := p.parseType(pkg, v.Index, tps) + if err != nil { + return nil, err + } + nm.TypeParams = &model.TypeParametersType{TypeParameters: []model.Type{t}} + return m, nil + case *ast.IndexListExpr: + m, err := p.parseType(pkg, v.X, tps) + if err != nil { + return nil, err + } + nm, ok := m.(*model.NamedType) + if !ok { + return m, nil + } + var ts []model.Type + for _, expr := range v.Indices { + t, err := p.parseType(pkg, expr, tps) + if err != nil { + return nil, err + } + ts = append(ts, t) + } + nm.TypeParams = &model.TypeParametersType{TypeParameters: ts} + return m, nil + } + return nil, nil +} + +func (p *fileParser) parseGenericMethod(field *ast.Field, it *namedInterface, iface *model.Interface, pkg string, tps map[string]model.Type) ([]*model.Method, error) { + var indices []ast.Expr + var typ ast.Expr + switch v := field.Type.(type) { + case *ast.IndexExpr: + indices = []ast.Expr{v.Index} + typ = v.X + case *ast.IndexListExpr: + indices = v.Indices + typ = v.X + case *ast.UnaryExpr: + if v.Op == token.TILDE { + return nil, errConstraintInterface + } + return nil, fmt.Errorf("~T may only appear as constraint for %T", field.Type) + case *ast.BinaryExpr: + if v.Op == token.OR { + return nil, errConstraintInterface + } + return nil, fmt.Errorf("A|B may only appear as constraint for %T", field.Type) + default: + return nil, fmt.Errorf("don't know how to mock method of type %T", field.Type) + } + + nf := &ast.Field{ + Doc: field.Comment, + Names: field.Names, + Type: typ, + Tag: field.Tag, + Comment: field.Comment, + } + + it.embeddedInstTypeParams = indices + + return p.parseMethod(nf, it, iface, pkg, tps) +} + +var errConstraintInterface = errors.New("interface contains constraints") diff --git a/vendor/go.uber.org/mock/mockgen/gob.go b/vendor/go.uber.org/mock/mockgen/gob.go new file mode 100644 index 0000000..b5ab066 --- /dev/null +++ b/vendor/go.uber.org/mock/mockgen/gob.go @@ -0,0 +1,21 @@ +package main + +import ( + "encoding/gob" + "os" + + "go.uber.org/mock/mockgen/model" +) + +func gobMode(path string) (*model.Package, error) { + in, err := os.Open(path) + if err != nil { + return nil, err + } + defer in.Close() + var pkg model.Package + if err := gob.NewDecoder(in).Decode(&pkg); err != nil { + return nil, err + } + return &pkg, nil +} diff --git a/vendor/go.uber.org/mock/mockgen/mockgen.go b/vendor/go.uber.org/mock/mockgen/mockgen.go new file mode 100644 index 0000000..b5365de --- /dev/null +++ b/vendor/go.uber.org/mock/mockgen/mockgen.go @@ -0,0 +1,906 @@ +// Copyright 2010 Google Inc. +// +// 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. + +// MockGen generates mock implementations of Go interfaces. +package main + +// TODO: This does not support recursive embedded interfaces. +// TODO: This does not support embedding package-local interfaces in a separate file. + +import ( + "bytes" + "encoding/json" + "errors" + "flag" + "fmt" + "go/token" + "io" + "log" + "os" + "os/exec" + "path" + "path/filepath" + "runtime" + "sort" + "strconv" + "strings" + "unicode" + + "golang.org/x/mod/modfile" + toolsimports "golang.org/x/tools/imports" + + "go.uber.org/mock/mockgen/model" +) + +const ( + gomockImportPath = "go.uber.org/mock/gomock" +) + +var ( + version = "" + commit = "none" + date = "unknown" +) + +var ( + source = flag.String("source", "", "(source mode) Input Go source file; enables source mode.") + destination = flag.String("destination", "", "Output file; defaults to stdout.") + mockNames = flag.String("mock_names", "", "Comma-separated interfaceName=mockName pairs of explicit mock names to use. Mock names default to 'Mock'+ interfaceName suffix.") + packageOut = flag.String("package", "", "Package of the generated code; defaults to the package of the input with a 'mock_' prefix.") + selfPackage = flag.String("self_package", "", "The full package import path for the generated code. The purpose of this flag is to prevent import cycles in the generated code by trying to include its own package. This can happen if the mock's package is set to one of its inputs (usually the main one) and the output is stdio so mockgen cannot detect the final output package. Setting this flag will then tell mockgen which import to exclude.") + writeCmdComment = flag.Bool("write_command_comment", true, "Writes the command used as a comment if true.") + writePkgComment = flag.Bool("write_package_comment", true, "Writes package documentation comment (godoc) if true.") + writeSourceComment = flag.Bool("write_source_comment", true, "Writes original file (source mode) or interface names (package mode) comment if true.") + writeGenerateDirective = flag.Bool("write_generate_directive", false, "Add //go:generate directive to regenerate the mock") + copyrightFile = flag.String("copyright_file", "", "Copyright file used to add copyright header") + buildConstraint = flag.String("build_constraint", "", "If non-empty, added as //go:build ") + typed = flag.Bool("typed", false, "Generate Type-safe 'Return', 'Do', 'DoAndReturn' function") + imports = flag.String("imports", "", "(source mode) Comma-separated name=path pairs of explicit imports to use.") + auxFiles = flag.String("aux_files", "", "(source mode) Comma-separated pkg=path pairs of auxiliary Go source files.") + excludeInterfaces = flag.String("exclude_interfaces", "", "(source mode) Comma-separated names of interfaces to be excluded") + modelGob = flag.String("model_gob", "", "Skip package/source loading entirely and use the gob encoded model.Package at the given path") + + debugParser = flag.Bool("debug_parser", false, "Print out parser results only.") + showVersion = flag.Bool("version", false, "Print version.") +) + +func main() { + flag.Usage = usage + flag.Parse() + + notifyAboutDeprecatedFlags() + + if *showVersion { + printVersion() + return + } + + var pkg *model.Package + var err error + var packageName string + if *modelGob != "" { + pkg, err = gobMode(*modelGob) + } else if *source != "" { + pkg, err = sourceMode(*source) + } else { + if flag.NArg() != 2 { + usage() + log.Fatal("Expected exactly two arguments") + } + packageName = flag.Arg(0) + interfaces := strings.Split(flag.Arg(1), ",") + if packageName == "." { + dir, err := os.Getwd() + if err != nil { + log.Fatalf("Get current directory failed: %v", err) + } + packageName, err = packageNameOfDir(dir) + if err != nil { + log.Fatalf("Parse package name failed: %v", err) + } + } + parser := packageModeParser{} + pkg, err = parser.parsePackage(packageName, interfaces) + } + if err != nil { + log.Fatalf("Loading input failed: %v", err) + } + + if *debugParser { + pkg.Print(os.Stdout) + return + } + + outputPackageName := *packageOut + if outputPackageName == "" { + // pkg.Name in package mode is the base name of the import path, + // which might have characters that are illegal to have in package names. + outputPackageName = "mock_" + sanitize(pkg.Name) + } + + // outputPackagePath represents the fully qualified name of the package of + // the generated code. Its purposes are to prevent the module from importing + // itself and to prevent qualifying type names that come from its own + // package (i.e. if there is a type called X then we want to print "X" not + // "package.X" since "package" is this package). This can happen if the mock + // is output into an already existing package. + outputPackagePath := *selfPackage + if outputPackagePath == "" && *destination != "" { + dstPath, err := filepath.Abs(filepath.Dir(*destination)) + if err == nil { + pkgPath, err := parsePackageImport(dstPath) + if err == nil { + outputPackagePath = pkgPath + } else { + log.Println("Unable to infer -self_package from destination file path:", err) + } + } else { + log.Println("Unable to determine destination file path:", err) + } + } + + g := &generator{ + buildConstraint: *buildConstraint, + } + if *source != "" { + g.filename = *source + } else { + g.srcPackage = packageName + g.srcInterfaces = flag.Arg(1) + } + g.destination = *destination + + if *mockNames != "" { + g.mockNames = parseMockNames(*mockNames) + } + if *copyrightFile != "" { + header, err := os.ReadFile(*copyrightFile) + if err != nil { + log.Fatalf("Failed reading copyright file: %v", err) + } + + g.copyrightHeader = string(header) + } + if err := g.Generate(pkg, outputPackageName, outputPackagePath); err != nil { + log.Fatalf("Failed generating mock: %v", err) + } + output := g.Output() + dst := os.Stdout + if len(*destination) > 0 { + if err := os.MkdirAll(filepath.Dir(*destination), os.ModePerm); err != nil { + log.Fatalf("Unable to create directory: %v", err) + } + existing, err := os.ReadFile(*destination) + if err != nil && !errors.Is(err, os.ErrNotExist) { + log.Fatalf("Failed reading pre-exiting destination file: %v", err) + } + if len(existing) == len(output) && bytes.Equal(existing, output) { + return + } + f, err := os.Create(*destination) + if err != nil { + log.Fatalf("Failed opening destination file: %v", err) + } + defer f.Close() + dst = f + } + if _, err := dst.Write(output); err != nil { + log.Fatalf("Failed writing to destination: %v", err) + } +} + +func parseMockNames(names string) map[string]string { + mocksMap := make(map[string]string) + for _, kv := range strings.Split(names, ",") { + parts := strings.SplitN(kv, "=", 2) + if len(parts) != 2 || parts[1] == "" { + log.Fatalf("bad mock names spec: %v", kv) + } + mocksMap[parts[0]] = parts[1] + } + return mocksMap +} + +func parseExcludeInterfaces(names string) map[string]struct{} { + splitNames := strings.Split(names, ",") + namesSet := make(map[string]struct{}, len(splitNames)) + for _, name := range splitNames { + if name == "" { + continue + } + + namesSet[name] = struct{}{} + } + + if len(namesSet) == 0 { + return nil + } + + return namesSet +} + +func usage() { + _, _ = io.WriteString(os.Stderr, usageText) + flag.PrintDefaults() +} + +const usageText = `mockgen has two modes of operation: source and package. + +Source mode generates mock interfaces from a source file. +It is enabled by using the -source flag. Other flags that +may be useful in this mode are -imports, -aux_files and -exclude_interfaces. +Example: + mockgen -source=foo.go [other options] + +Package mode works by specifying the package and interface names. +It is enabled by passing two non-flag arguments: an import path, and a +comma-separated list of symbols. +You can use "." to refer to the current path's package. +Example: + mockgen database/sql/driver Conn,Driver + mockgen . SomeInterface + +` + +type generator struct { + buf bytes.Buffer + indent string + mockNames map[string]string // may be empty + filename string // may be empty + destination string // may be empty + srcPackage, srcInterfaces string // may be empty + copyrightHeader string + buildConstraint string // may be empty + + packageMap map[string]string // map from import path to package name +} + +func (g *generator) p(format string, args ...any) { + _, _ = fmt.Fprintf(&g.buf, g.indent+format+"\n", args...) +} + +func (g *generator) in() { + g.indent += "\t" +} + +func (g *generator) out() { + if len(g.indent) > 0 { + g.indent = g.indent[0 : len(g.indent)-1] + } +} + +// sanitize cleans up a string to make a suitable package name. +func sanitize(s string) string { + t := "" + for _, r := range s { + if t == "" { + if unicode.IsLetter(r) || r == '_' { + t += string(r) + continue + } + } else { + if unicode.IsLetter(r) || unicode.IsDigit(r) || r == '_' { + t += string(r) + continue + } + } + t += "_" + } + if t == "_" { + t = "x" + } + return t +} + +func (g *generator) Generate(pkg *model.Package, outputPkgName string, outputPackagePath string) error { + if outputPkgName != pkg.Name && *selfPackage == "" { + // reset outputPackagePath if it's not passed in through -self_package + outputPackagePath = "" + } + + if g.copyrightHeader != "" { + lines := strings.Split(g.copyrightHeader, "\n") + for _, line := range lines { + g.p("// %s", line) + } + g.p("") + } + + if g.buildConstraint != "" { + g.p("//go:build %s", g.buildConstraint) + // https://pkg.go.dev/cmd/go#hdr-Build_constraints:~:text=a%20build%20constraint%20should%20be%20followed%20by%20a%20blank%20line + g.p("") + } + + g.p("// Code generated by MockGen. DO NOT EDIT.") + if *writeSourceComment { + if g.filename != "" { + g.p("// Source: %v", g.filename) + } else { + g.p("// Source: %v (interfaces: %v)", g.srcPackage, g.srcInterfaces) + } + } + if *writeCmdComment { + g.p("//") + g.p("// Generated by this command:") + g.p("//") + // only log the name of the executable, not the full path + name := filepath.Base(os.Args[0]) + if runtime.GOOS == "windows" { + name = strings.TrimSuffix(name, ".exe") + } + g.p("//\t%v", strings.Join(append([]string{name}, os.Args[1:]...), " ")) + g.p("//") + } + + // Get all required imports, and generate unique names for them all. + im := pkg.Imports() + im[gomockImportPath] = true + + // Only import reflect if it's used. We only use reflect in mocked methods + // so only import if any of the mocked interfaces have methods. + for _, intf := range pkg.Interfaces { + if len(intf.Methods) > 0 { + im["reflect"] = true + break + } + } + + // Sort keys to make import alias generation predictable + sortedPaths := make([]string, len(im)) + x := 0 + for pth := range im { + sortedPaths[x] = pth + x++ + } + sort.Strings(sortedPaths) + + packagesName := createPackageMap(sortedPaths) + + definedImports := make(map[string]string, len(im)) + if *imports != "" { + for _, kv := range strings.Split(*imports, ",") { + eq := strings.Index(kv, "=") + if k, v := kv[:eq], kv[eq+1:]; k != "." { + definedImports[v] = k + } + } + } + + g.packageMap = make(map[string]string, len(im)) + localNames := make(map[string]bool, len(im)) + for _, pth := range sortedPaths { + base, ok := packagesName[pth] + if !ok { + base = sanitize(path.Base(pth)) + } + + // Local names for an imported package can usually be the basename of the import path. + // A couple of situations don't permit that, such as duplicate local names + // (e.g. importing "html/template" and "text/template"), or where the basename is + // a keyword (e.g. "foo/case") or when defining a name for that by using the -imports flag. + // try base0, base1, ... + pkgName := base + + if _, ok := definedImports[base]; ok { + pkgName = definedImports[base] + } + + i := 0 + for localNames[pkgName] || token.Lookup(pkgName).IsKeyword() || pkgName == "any" { + pkgName = base + strconv.Itoa(i) + i++ + } + + // Avoid importing package if source pkg == output pkg + if pth == pkg.PkgPath && outputPackagePath == pkg.PkgPath { + continue + } + + g.packageMap[pth] = pkgName + localNames[pkgName] = true + } + + // Ensure there is an empty line between “generated by” block and + // package documentation comments to follow the recommendations: + // https://go.dev/wiki/CodeReviewComments#package-comments + // That is, “generated by” should not be a package comment. + g.p("") + + if *writePkgComment { + g.p("// Package %v is a generated GoMock package.", outputPkgName) + } + g.p("package %v", outputPkgName) + g.p("") + g.p("import (") + g.in() + for pkgPath, pkgName := range g.packageMap { + if pkgPath == outputPackagePath { + continue + } + g.p("%v %q", pkgName, pkgPath) + } + for _, pkgPath := range pkg.DotImports { + g.p(". %q", pkgPath) + } + g.out() + g.p(")") + + if *writeGenerateDirective { + g.p("//go:generate %v", strings.Join(os.Args, " ")) + } + + for _, intf := range pkg.Interfaces { + if err := g.GenerateMockInterface(intf, outputPackagePath); err != nil { + return err + } + } + + return nil +} + +// The name of the mock type to use for the given interface identifier. +func (g *generator) mockName(typeName string) string { + if mockName, ok := g.mockNames[typeName]; ok { + return mockName + } + + return "Mock" + typeName +} + +// formattedTypeParams returns a long and short form of type param info used for +// printing. If analyzing a interface with type param [I any, O any] the result +// will be: +// "[I any, O any]", "[I, O]" +func (g *generator) formattedTypeParams(it *model.Interface, pkgOverride string) (string, string) { + if len(it.TypeParams) == 0 { + return "", "" + } + var long, short strings.Builder + long.WriteString("[") + short.WriteString("[") + for i, v := range it.TypeParams { + if i != 0 { + long.WriteString(", ") + short.WriteString(", ") + } + long.WriteString(v.Name) + short.WriteString(v.Name) + long.WriteString(fmt.Sprintf(" %s", v.Type.String(g.packageMap, pkgOverride))) + } + long.WriteString("]") + short.WriteString("]") + return long.String(), short.String() +} + +func (g *generator) GenerateMockInterface(intf *model.Interface, outputPackagePath string) error { + mockType := g.mockName(intf.Name) + longTp, shortTp := g.formattedTypeParams(intf, outputPackagePath) + + g.p("") + g.p("// %v is a mock of %v interface.", mockType, intf.Name) + g.p("type %v%v struct {", mockType, longTp) + g.in() + g.p("ctrl *gomock.Controller") + g.p("recorder *%vMockRecorder%v", mockType, shortTp) + g.p("isgomock struct{}") + g.out() + g.p("}") + g.p("") + + g.p("// %vMockRecorder is the mock recorder for %v.", mockType, mockType) + g.p("type %vMockRecorder%v struct {", mockType, longTp) + g.in() + g.p("mock *%v%v", mockType, shortTp) + g.out() + g.p("}") + g.p("") + + g.p("// New%v creates a new mock instance.", mockType) + g.p("func New%v%v(ctrl *gomock.Controller) *%v%v {", mockType, longTp, mockType, shortTp) + g.in() + g.p("mock := &%v%v{ctrl: ctrl}", mockType, shortTp) + g.p("mock.recorder = &%vMockRecorder%v{mock}", mockType, shortTp) + g.p("return mock") + g.out() + g.p("}") + g.p("") + + // XXX: possible name collision here if someone has EXPECT in their interface. + g.p("// EXPECT returns an object that allows the caller to indicate expected use.") + g.p("func (m *%v%v) EXPECT() *%vMockRecorder%v {", mockType, shortTp, mockType, shortTp) + g.in() + g.p("return m.recorder") + g.out() + g.p("}") + + g.GenerateMockMethods(mockType, intf, outputPackagePath, longTp, shortTp, *typed) + + return nil +} + +type byMethodName []*model.Method + +func (b byMethodName) Len() int { return len(b) } +func (b byMethodName) Swap(i, j int) { b[i], b[j] = b[j], b[i] } +func (b byMethodName) Less(i, j int) bool { return b[i].Name < b[j].Name } + +func (g *generator) GenerateMockMethods(mockType string, intf *model.Interface, pkgOverride, longTp, shortTp string, typed bool) { + sort.Sort(byMethodName(intf.Methods)) + for _, m := range intf.Methods { + g.p("") + _ = g.GenerateMockMethod(mockType, m, pkgOverride, shortTp) + g.p("") + _ = g.GenerateMockRecorderMethod(intf, m, shortTp, typed) + if typed { + g.p("") + _ = g.GenerateMockReturnCallMethod(intf, m, pkgOverride, longTp, shortTp) + } + } +} + +func makeArgString(argNames, argTypes []string) string { + args := make([]string, len(argNames)) + for i, name := range argNames { + // specify the type only once for consecutive args of the same type + if i+1 < len(argTypes) && argTypes[i] == argTypes[i+1] { + args[i] = name + } else { + args[i] = name + " " + argTypes[i] + } + } + return strings.Join(args, ", ") +} + +// GenerateMockMethod generates a mock method implementation. +// If non-empty, pkgOverride is the package in which unqualified types reside. +func (g *generator) GenerateMockMethod(mockType string, m *model.Method, pkgOverride, shortTp string) error { + argNames := g.getArgNames(m, true /* in */) + argTypes := g.getArgTypes(m, pkgOverride, true /* in */) + argString := makeArgString(argNames, argTypes) + + rets := make([]string, len(m.Out)) + for i, p := range m.Out { + rets[i] = p.Type.String(g.packageMap, pkgOverride) + } + retString := strings.Join(rets, ", ") + if len(rets) > 1 { + retString = "(" + retString + ")" + } + if retString != "" { + retString = " " + retString + } + + ia := newIdentifierAllocator(argNames) + idRecv := ia.allocateIdentifier("m") + + g.p("// %v mocks base method.", m.Name) + g.p("func (%v *%v%v) %v(%v)%v {", idRecv, mockType, shortTp, m.Name, argString, retString) + g.in() + g.p("%s.ctrl.T.Helper()", idRecv) + + var callArgs string + if m.Variadic == nil { + if len(argNames) > 0 { + callArgs = ", " + strings.Join(argNames, ", ") + } + } else { + // Non-trivial. The generated code must build a []any, + // but the variadic argument may be any type. + idVarArgs := ia.allocateIdentifier("varargs") + idVArg := ia.allocateIdentifier("a") + g.p("%s := []any{%s}", idVarArgs, strings.Join(argNames[:len(argNames)-1], ", ")) + g.p("for _, %s := range %s {", idVArg, argNames[len(argNames)-1]) + g.in() + g.p("%s = append(%s, %s)", idVarArgs, idVarArgs, idVArg) + g.out() + g.p("}") + callArgs = ", " + idVarArgs + "..." + } + if len(m.Out) == 0 { + g.p(`%v.ctrl.Call(%v, %q%v)`, idRecv, idRecv, m.Name, callArgs) + } else { + idRet := ia.allocateIdentifier("ret") + g.p(`%v := %v.ctrl.Call(%v, %q%v)`, idRet, idRecv, idRecv, m.Name, callArgs) + + // Go does not allow "naked" type assertions on nil values, so we use the two-value form here. + // The value of that is either (x.(T), true) or (Z, false), where Z is the zero value for T. + // Happily, this coincides with the semantics we want here. + retNames := make([]string, len(rets)) + for i, t := range rets { + retNames[i] = ia.allocateIdentifier(fmt.Sprintf("ret%d", i)) + g.p("%s, _ := %s[%d].(%s)", retNames[i], idRet, i, t) + } + g.p("return " + strings.Join(retNames, ", ")) + } + + g.out() + g.p("}") + return nil +} + +func (g *generator) GenerateMockRecorderMethod(intf *model.Interface, m *model.Method, shortTp string, typed bool) error { + mockType := g.mockName(intf.Name) + argNames := g.getArgNames(m, true) + + var argString string + if m.Variadic == nil { + argString = strings.Join(argNames, ", ") + } else { + argString = strings.Join(argNames[:len(argNames)-1], ", ") + } + if argString != "" { + argString += " any" + } + + if m.Variadic != nil { + if argString != "" { + argString += ", " + } + argString += fmt.Sprintf("%s ...any", argNames[len(argNames)-1]) + } + + ia := newIdentifierAllocator(argNames) + idRecv := ia.allocateIdentifier("mr") + + g.p("// %v indicates an expected call of %v.", m.Name, m.Name) + if typed { + g.p("func (%s *%vMockRecorder%v) %v(%v) *%s%sCall%s {", idRecv, mockType, shortTp, m.Name, argString, mockType, m.Name, shortTp) + } else { + g.p("func (%s *%vMockRecorder%v) %v(%v) *gomock.Call {", idRecv, mockType, shortTp, m.Name, argString) + } + + g.in() + g.p("%s.mock.ctrl.T.Helper()", idRecv) + + var callArgs string + if m.Variadic == nil { + if len(argNames) > 0 { + callArgs = ", " + strings.Join(argNames, ", ") + } + } else { + if len(argNames) == 1 { + // Easy: just use ... to push the arguments through. + callArgs = ", " + argNames[0] + "..." + } else { + // Hard: create a temporary slice. + idVarArgs := ia.allocateIdentifier("varargs") + g.p("%s := append([]any{%s}, %s...)", + idVarArgs, + strings.Join(argNames[:len(argNames)-1], ", "), + argNames[len(argNames)-1]) + callArgs = ", " + idVarArgs + "..." + } + } + if typed { + g.p(`call := %s.mock.ctrl.RecordCallWithMethodType(%s.mock, "%s", reflect.TypeOf((*%s%s)(nil).%s)%s)`, idRecv, idRecv, m.Name, mockType, shortTp, m.Name, callArgs) + g.p(`return &%s%sCall%s{Call: call}`, mockType, m.Name, shortTp) + } else { + g.p(`return %s.mock.ctrl.RecordCallWithMethodType(%s.mock, "%s", reflect.TypeOf((*%s%s)(nil).%s)%s)`, idRecv, idRecv, m.Name, mockType, shortTp, m.Name, callArgs) + } + + g.out() + g.p("}") + return nil +} + +func (g *generator) GenerateMockReturnCallMethod(intf *model.Interface, m *model.Method, pkgOverride, longTp, shortTp string) error { + mockType := g.mockName(intf.Name) + argNames := g.getArgNames(m, true /* in */) + retNames := g.getArgNames(m, false /* out */) + argTypes := g.getArgTypes(m, pkgOverride, true /* in */) + retTypes := g.getArgTypes(m, pkgOverride, false /* out */) + argString := strings.Join(argTypes, ", ") + + rets := make([]string, len(m.Out)) + for i, p := range m.Out { + rets[i] = p.Type.String(g.packageMap, pkgOverride) + } + + var retString string + switch { + case len(rets) == 1: + retString = " " + rets[0] + case len(rets) > 1: + retString = " (" + strings.Join(rets, ", ") + ")" + } + + ia := newIdentifierAllocator(argNames) + idRecv := ia.allocateIdentifier("c") + + recvStructName := mockType + m.Name + + g.p("// %s%sCall wrap *gomock.Call", mockType, m.Name) + g.p("type %s%sCall%s struct{", mockType, m.Name, longTp) + g.in() + g.p("*gomock.Call") + g.out() + g.p("}") + + g.p("// Return rewrite *gomock.Call.Return") + g.p("func (%s *%sCall%s) Return(%v) *%sCall%s {", idRecv, recvStructName, shortTp, makeArgString(retNames, retTypes), recvStructName, shortTp) + g.in() + var retArgs string + if len(retNames) > 0 { + retArgs = strings.Join(retNames, ", ") + } + g.p(`%s.Call = %v.Call.Return(%v)`, idRecv, idRecv, retArgs) + g.p("return %s", idRecv) + g.out() + g.p("}") + + g.p("// Do rewrite *gomock.Call.Do") + g.p("func (%s *%sCall%s) Do(f func(%v)%v) *%sCall%s {", idRecv, recvStructName, shortTp, argString, retString, recvStructName, shortTp) + g.in() + g.p(`%s.Call = %v.Call.Do(f)`, idRecv, idRecv) + g.p("return %s", idRecv) + g.out() + g.p("}") + + g.p("// DoAndReturn rewrite *gomock.Call.DoAndReturn") + g.p("func (%s *%sCall%s) DoAndReturn(f func(%v)%v) *%sCall%s {", idRecv, recvStructName, shortTp, argString, retString, recvStructName, shortTp) + g.in() + g.p(`%s.Call = %v.Call.DoAndReturn(f)`, idRecv, idRecv) + g.p("return %s", idRecv) + g.out() + g.p("}") + return nil +} + +func (g *generator) getArgNames(m *model.Method, in bool) []string { + var params []*model.Parameter + if in { + params = m.In + } else { + params = m.Out + } + argNames := make([]string, len(params)) + for i, p := range params { + name := p.Name + if name == "" || name == "_" { + name = fmt.Sprintf("arg%d", i) + } + argNames[i] = name + } + if m.Variadic != nil && in { + name := m.Variadic.Name + if name == "" { + name = fmt.Sprintf("arg%d", len(params)) + } + argNames = append(argNames, name) + } + return argNames +} + +func (g *generator) getArgTypes(m *model.Method, pkgOverride string, in bool) []string { + var params []*model.Parameter + if in { + params = m.In + } else { + params = m.Out + } + argTypes := make([]string, len(params)) + for i, p := range params { + argTypes[i] = p.Type.String(g.packageMap, pkgOverride) + } + if m.Variadic != nil { + argTypes = append(argTypes, "..."+m.Variadic.Type.String(g.packageMap, pkgOverride)) + } + return argTypes +} + +type identifierAllocator map[string]struct{} + +func newIdentifierAllocator(taken []string) identifierAllocator { + a := make(identifierAllocator, len(taken)) + for _, s := range taken { + a[s] = struct{}{} + } + return a +} + +func (o identifierAllocator) allocateIdentifier(want string) string { + id := want + for i := 2; ; i++ { + if _, ok := o[id]; !ok { + o[id] = struct{}{} + return id + } + id = want + "_" + strconv.Itoa(i) + } +} + +// Output returns the generator's output, formatted in the standard Go style. +func (g *generator) Output() []byte { + src, err := toolsimports.Process(g.destination, g.buf.Bytes(), nil) + if err != nil { + log.Fatalf("Failed to format generated source code: %s\n%s", err, g.buf.String()) + } + return src +} + +// createPackageMap returns a map of import path to package name +// for specified importPaths. +func createPackageMap(importPaths []string) map[string]string { + var pkg struct { + Name string + ImportPath string + } + pkgMap := make(map[string]string) + b := bytes.NewBuffer(nil) + args := []string{"list", "-json=ImportPath,Name"} + args = append(args, importPaths...) + cmd := exec.Command("go", args...) + cmd.Stdout = b + cmd.Run() + dec := json.NewDecoder(b) + for dec.More() { + err := dec.Decode(&pkg) + if err != nil { + log.Printf("failed to decode 'go list' output: %v", err) + continue + } + pkgMap[pkg.ImportPath] = pkg.Name + } + return pkgMap +} + +func printVersion() { + if version != "" { + fmt.Printf("v%s\nCommit: %s\nDate: %s\n", version, commit, date) + } else { + printModuleVersion() + } +} + +// parseImportPackage get package import path via source file +// an alternative implementation is to use: +// cfg := &packages.Config{Mode: packages.NeedName, Tests: true, Dir: srcDir} +// pkgs, err := packages.Load(cfg, "file="+source) +// However, it will call "go list" and slow down the performance +func parsePackageImport(srcDir string) (string, error) { + moduleMode := os.Getenv("GO111MODULE") + // trying to find the module + if moduleMode != "off" { + currentDir := srcDir + for { + dat, err := os.ReadFile(filepath.Join(currentDir, "go.mod")) + if os.IsNotExist(err) { + if currentDir == filepath.Dir(currentDir) { + // at the root + break + } + currentDir = filepath.Dir(currentDir) + continue + } else if err != nil { + return "", err + } + modulePath := modfile.ModulePath(dat) + return filepath.ToSlash(filepath.Join(modulePath, strings.TrimPrefix(srcDir, currentDir))), nil + } + } + // fall back to GOPATH mode + goPaths := os.Getenv("GOPATH") + if goPaths == "" { + return "", fmt.Errorf("GOPATH is not set") + } + goPathList := strings.Split(goPaths, string(os.PathListSeparator)) + for _, goPath := range goPathList { + sourceRoot := filepath.Join(goPath, "src") + string(os.PathSeparator) + if strings.HasPrefix(srcDir, sourceRoot) { + return filepath.ToSlash(strings.TrimPrefix(srcDir, sourceRoot)), nil + } + } + return "", errOutsideGoPath +} diff --git a/vendor/go.uber.org/mock/mockgen/model/model.go b/vendor/go.uber.org/mock/mockgen/model/model.go new file mode 100644 index 0000000..853dbf2 --- /dev/null +++ b/vendor/go.uber.org/mock/mockgen/model/model.go @@ -0,0 +1,533 @@ +// Copyright 2012 Google Inc. +// +// 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 model contains the data model necessary for generating mock implementations. +package model + +import ( + "encoding/gob" + "fmt" + "io" + "reflect" + "strings" +) + +// pkgPath is the importable path for package model +const pkgPath = "go.uber.org/mock/mockgen/model" + +// Package is a Go package. It may be a subset. +type Package struct { + Name string + PkgPath string + Interfaces []*Interface + DotImports []string +} + +// Print writes the package name and its exported interfaces. +func (pkg *Package) Print(w io.Writer) { + _, _ = fmt.Fprintf(w, "package %s\n", pkg.Name) + for _, intf := range pkg.Interfaces { + intf.Print(w) + } +} + +// Imports returns the imports needed by the Package as a set of import paths. +func (pkg *Package) Imports() map[string]bool { + im := make(map[string]bool) + for _, intf := range pkg.Interfaces { + intf.addImports(im) + for _, tp := range intf.TypeParams { + tp.Type.addImports(im) + } + } + return im +} + +// Interface is a Go interface. +type Interface struct { + Name string + Methods []*Method + TypeParams []*Parameter +} + +// Print writes the interface name and its methods. +func (intf *Interface) Print(w io.Writer) { + _, _ = fmt.Fprintf(w, "interface %s\n", intf.Name) + for _, m := range intf.Methods { + m.Print(w) + } +} + +func (intf *Interface) addImports(im map[string]bool) { + for _, m := range intf.Methods { + m.addImports(im) + } +} + +// AddMethod adds a new method, de-duplicating by method name. +func (intf *Interface) AddMethod(m *Method) { + for _, me := range intf.Methods { + if me.Name == m.Name { + return + } + } + intf.Methods = append(intf.Methods, m) +} + +// Method is a single method of an interface. +type Method struct { + Name string + In, Out []*Parameter + Variadic *Parameter // may be nil +} + +// Print writes the method name and its signature. +func (m *Method) Print(w io.Writer) { + _, _ = fmt.Fprintf(w, " - method %s\n", m.Name) + if len(m.In) > 0 { + _, _ = fmt.Fprintf(w, " in:\n") + for _, p := range m.In { + p.Print(w) + } + } + if m.Variadic != nil { + _, _ = fmt.Fprintf(w, " ...:\n") + m.Variadic.Print(w) + } + if len(m.Out) > 0 { + _, _ = fmt.Fprintf(w, " out:\n") + for _, p := range m.Out { + p.Print(w) + } + } +} + +func (m *Method) addImports(im map[string]bool) { + for _, p := range m.In { + p.Type.addImports(im) + } + if m.Variadic != nil { + m.Variadic.Type.addImports(im) + } + for _, p := range m.Out { + p.Type.addImports(im) + } +} + +// Parameter is an argument or return parameter of a method. +type Parameter struct { + Name string // may be empty + Type Type +} + +// Print writes a method parameter. +func (p *Parameter) Print(w io.Writer) { + n := p.Name + if n == "" { + n = `""` + } + _, _ = fmt.Fprintf(w, " - %v: %v\n", n, p.Type.String(nil, "")) +} + +// Type is a Go type. +type Type interface { + String(pm map[string]string, pkgOverride string) string + addImports(im map[string]bool) +} + +func init() { + // Call gob.RegisterName with pkgPath as prefix to avoid conflicting with + // github.com/golang/mock/mockgen/model 's registration. + gob.RegisterName(pkgPath+".ArrayType", &ArrayType{}) + gob.RegisterName(pkgPath+".ChanType", &ChanType{}) + gob.RegisterName(pkgPath+".FuncType", &FuncType{}) + gob.RegisterName(pkgPath+".MapType", &MapType{}) + gob.RegisterName(pkgPath+".NamedType", &NamedType{}) + gob.RegisterName(pkgPath+".PointerType", &PointerType{}) + + // Call gob.RegisterName to make sure it has the consistent name registered + // for both gob decoder and encoder. + // + // For a non-pointer type, gob.Register will try to get package full path by + // calling rt.PkgPath() for a name to register. If your project has vendor + // directory, it is possible that PkgPath will get a path like this: + // ../../../vendor/go.uber.org/mock/mockgen/model + gob.RegisterName(pkgPath+".PredeclaredType", PredeclaredType("")) +} + +// ArrayType is an array or slice type. +type ArrayType struct { + Len int // -1 for slices, >= 0 for arrays + Type Type +} + +func (at *ArrayType) String(pm map[string]string, pkgOverride string) string { + s := "[]" + if at.Len > -1 { + s = fmt.Sprintf("[%d]", at.Len) + } + return s + at.Type.String(pm, pkgOverride) +} + +func (at *ArrayType) addImports(im map[string]bool) { at.Type.addImports(im) } + +// ChanType is a channel type. +type ChanType struct { + Dir ChanDir // 0, 1 or 2 + Type Type +} + +func (ct *ChanType) String(pm map[string]string, pkgOverride string) string { + s := ct.Type.String(pm, pkgOverride) + if ct.Dir == RecvDir { + return "<-chan " + s + } + if ct.Dir == SendDir { + return "chan<- " + s + } + return "chan " + s +} + +func (ct *ChanType) addImports(im map[string]bool) { ct.Type.addImports(im) } + +// ChanDir is a channel direction. +type ChanDir int + +// Constants for channel directions. +const ( + RecvDir ChanDir = 1 + SendDir ChanDir = 2 +) + +// FuncType is a function type. +type FuncType struct { + In, Out []*Parameter + Variadic *Parameter // may be nil +} + +func (ft *FuncType) String(pm map[string]string, pkgOverride string) string { + args := make([]string, len(ft.In)) + for i, p := range ft.In { + args[i] = p.Type.String(pm, pkgOverride) + } + if ft.Variadic != nil { + args = append(args, "..."+ft.Variadic.Type.String(pm, pkgOverride)) + } + rets := make([]string, len(ft.Out)) + for i, p := range ft.Out { + rets[i] = p.Type.String(pm, pkgOverride) + } + retString := strings.Join(rets, ", ") + if nOut := len(ft.Out); nOut == 1 { + retString = " " + retString + } else if nOut > 1 { + retString = " (" + retString + ")" + } + return "func(" + strings.Join(args, ", ") + ")" + retString +} + +func (ft *FuncType) addImports(im map[string]bool) { + for _, p := range ft.In { + p.Type.addImports(im) + } + if ft.Variadic != nil { + ft.Variadic.Type.addImports(im) + } + for _, p := range ft.Out { + p.Type.addImports(im) + } +} + +// MapType is a map type. +type MapType struct { + Key, Value Type +} + +func (mt *MapType) String(pm map[string]string, pkgOverride string) string { + return "map[" + mt.Key.String(pm, pkgOverride) + "]" + mt.Value.String(pm, pkgOverride) +} + +func (mt *MapType) addImports(im map[string]bool) { + mt.Key.addImports(im) + mt.Value.addImports(im) +} + +// NamedType is an exported type in a package. +type NamedType struct { + Package string // may be empty + Type string + TypeParams *TypeParametersType +} + +func (nt *NamedType) String(pm map[string]string, pkgOverride string) string { + if pkgOverride == nt.Package { + return nt.Type + nt.TypeParams.String(pm, pkgOverride) + } + prefix := pm[nt.Package] + if prefix != "" { + return prefix + "." + nt.Type + nt.TypeParams.String(pm, pkgOverride) + } + + return nt.Type + nt.TypeParams.String(pm, pkgOverride) +} + +func (nt *NamedType) addImports(im map[string]bool) { + if nt.Package != "" { + im[nt.Package] = true + } + nt.TypeParams.addImports(im) +} + +// PointerType is a pointer to another type. +type PointerType struct { + Type Type +} + +func (pt *PointerType) String(pm map[string]string, pkgOverride string) string { + return "*" + pt.Type.String(pm, pkgOverride) +} +func (pt *PointerType) addImports(im map[string]bool) { pt.Type.addImports(im) } + +// PredeclaredType is a predeclared type such as "int". +type PredeclaredType string + +func (pt PredeclaredType) String(map[string]string, string) string { return string(pt) } +func (pt PredeclaredType) addImports(map[string]bool) {} + +// TypeParametersType contains type parameters for a NamedType. +type TypeParametersType struct { + TypeParameters []Type +} + +func (tp *TypeParametersType) String(pm map[string]string, pkgOverride string) string { + if tp == nil || len(tp.TypeParameters) == 0 { + return "" + } + var sb strings.Builder + sb.WriteString("[") + for i, v := range tp.TypeParameters { + if i != 0 { + sb.WriteString(", ") + } + sb.WriteString(v.String(pm, pkgOverride)) + } + sb.WriteString("]") + return sb.String() +} + +func (tp *TypeParametersType) addImports(im map[string]bool) { + if tp == nil { + return + } + for _, v := range tp.TypeParameters { + v.addImports(im) + } +} + +// The following code is intended to be called by the program generated by ../reflect.go. + +// InterfaceFromInterfaceType returns a pointer to an interface for the +// given reflection interface type. +func InterfaceFromInterfaceType(it reflect.Type) (*Interface, error) { + if it.Kind() != reflect.Interface { + return nil, fmt.Errorf("%v is not an interface", it) + } + intf := &Interface{} + + for i := 0; i < it.NumMethod(); i++ { + mt := it.Method(i) + // TODO: need to skip unexported methods? or just raise an error? + m := &Method{ + Name: mt.Name, + } + + var err error + m.In, m.Variadic, m.Out, err = funcArgsFromType(mt.Type) + if err != nil { + return nil, err + } + + intf.AddMethod(m) + } + + return intf, nil +} + +// t's Kind must be a reflect.Func. +func funcArgsFromType(t reflect.Type) (in []*Parameter, variadic *Parameter, out []*Parameter, err error) { + nin := t.NumIn() + if t.IsVariadic() { + nin-- + } + var p *Parameter + for i := 0; i < nin; i++ { + p, err = parameterFromType(t.In(i)) + if err != nil { + return + } + in = append(in, p) + } + if t.IsVariadic() { + p, err = parameterFromType(t.In(nin).Elem()) + if err != nil { + return + } + variadic = p + } + for i := 0; i < t.NumOut(); i++ { + p, err = parameterFromType(t.Out(i)) + if err != nil { + return + } + out = append(out, p) + } + return +} + +func parameterFromType(t reflect.Type) (*Parameter, error) { + tt, err := typeFromType(t) + if err != nil { + return nil, err + } + return &Parameter{Type: tt}, nil +} + +var errorType = reflect.TypeOf((*error)(nil)).Elem() + +var byteType = reflect.TypeOf(byte(0)) + +func typeFromType(t reflect.Type) (Type, error) { + // Hack workaround for https://golang.org/issue/3853. + // This explicit check should not be necessary. + if t == byteType { + return PredeclaredType("byte"), nil + } + + if imp := t.PkgPath(); imp != "" { + return &NamedType{ + Package: impPath(imp), + Type: t.Name(), + }, nil + } + + // only unnamed or predeclared types after here + + // Lots of types have element types. Let's do the parsing and error checking for all of them. + var elemType Type + switch t.Kind() { + case reflect.Array, reflect.Chan, reflect.Map, reflect.Ptr, reflect.Slice: + var err error + elemType, err = typeFromType(t.Elem()) + if err != nil { + return nil, err + } + } + + switch t.Kind() { + case reflect.Array: + return &ArrayType{ + Len: t.Len(), + Type: elemType, + }, nil + case reflect.Bool, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, + reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr, + reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128, reflect.String: + return PredeclaredType(t.Kind().String()), nil + case reflect.Chan: + var dir ChanDir + switch t.ChanDir() { + case reflect.RecvDir: + dir = RecvDir + case reflect.SendDir: + dir = SendDir + } + return &ChanType{ + Dir: dir, + Type: elemType, + }, nil + case reflect.Func: + in, variadic, out, err := funcArgsFromType(t) + if err != nil { + return nil, err + } + return &FuncType{ + In: in, + Out: out, + Variadic: variadic, + }, nil + case reflect.Interface: + // Two special interfaces. + if t.NumMethod() == 0 { + return PredeclaredType("any"), nil + } + if t == errorType { + return PredeclaredType("error"), nil + } + case reflect.Map: + kt, err := typeFromType(t.Key()) + if err != nil { + return nil, err + } + return &MapType{ + Key: kt, + Value: elemType, + }, nil + case reflect.Ptr: + return &PointerType{ + Type: elemType, + }, nil + case reflect.Slice: + return &ArrayType{ + Len: -1, + Type: elemType, + }, nil + case reflect.Struct: + if t.NumField() == 0 { + return PredeclaredType("struct{}"), nil + } + } + + // TODO: Struct, UnsafePointer + return nil, fmt.Errorf("can't yet turn %v (%v) into a model.Type", t, t.Kind()) +} + +// impPath sanitizes the package path returned by `PkgPath` method of a reflect Type so that +// it is importable. PkgPath might return a path that includes "vendor". These paths do not +// compile, so we need to remove everything up to and including "/vendor/". +// See https://github.com/golang/go/issues/12019. +func impPath(imp string) string { + if strings.HasPrefix(imp, "vendor/") { + imp = "/" + imp + } + if i := strings.LastIndex(imp, "/vendor/"); i != -1 { + imp = imp[i+len("/vendor/"):] + } + return imp +} + +// ErrorInterface represent built-in error interface. +var ErrorInterface = Interface{ + Name: "error", + Methods: []*Method{ + { + Name: "Error", + Out: []*Parameter{ + { + Name: "", + Type: PredeclaredType("string"), + }, + }, + }, + }, +} diff --git a/vendor/go.uber.org/mock/mockgen/package_mode.go b/vendor/go.uber.org/mock/mockgen/package_mode.go new file mode 100644 index 0000000..abc9c7a --- /dev/null +++ b/vendor/go.uber.org/mock/mockgen/package_mode.go @@ -0,0 +1,358 @@ +package main + +import ( + "errors" + "flag" + "fmt" + "go/types" + "strings" + + "go.uber.org/mock/mockgen/model" + "golang.org/x/tools/go/packages" +) + +var ( + buildFlags = flag.String("build_flags", "", "(package mode) Additional flags for go build.") +) + +type packageModeParser struct { + pkgName string +} + +func (p *packageModeParser) parsePackage(packageName string, ifaces []string) (*model.Package, error) { + p.pkgName = packageName + + pkg, err := p.loadPackage(packageName) + if err != nil { + return nil, fmt.Errorf("load package: %w", err) + } + + interfaces, err := p.extractInterfacesFromPackage(pkg, ifaces) + if err != nil { + return nil, fmt.Errorf("extract interfaces from package: %w", err) + } + + return &model.Package{ + Name: pkg.Types.Name(), + PkgPath: packageName, + Interfaces: interfaces, + }, nil +} + +func (p *packageModeParser) loadPackage(packageName string) (*packages.Package, error) { + var buildFlagsSet []string + if *buildFlags != "" { + buildFlagsSet = strings.Split(*buildFlags, " ") + } + + cfg := &packages.Config{ + Mode: packages.NeedDeps | packages.NeedImports | packages.NeedTypes | packages.NeedTypesInfo | packages.NeedEmbedFiles, + BuildFlags: buildFlagsSet, + } + pkgs, err := packages.Load(cfg, packageName) + if err != nil { + return nil, fmt.Errorf("load packages: %w", err) + } + + if len(pkgs) != 1 { + return nil, fmt.Errorf("packages length must be 1: %d", len(pkgs)) + } + + if len(pkgs[0].Errors) > 0 { + errs := make([]error, len(pkgs[0].Errors)) + for i, err := range pkgs[0].Errors { + errs[i] = err + } + + return nil, errors.Join(errs...) + } + + return pkgs[0], nil +} + +func (p *packageModeParser) extractInterfacesFromPackage(pkg *packages.Package, ifaces []string) ([]*model.Interface, error) { + interfaces := make([]*model.Interface, len(ifaces)) + for i, iface := range ifaces { + obj := pkg.Types.Scope().Lookup(iface) + if obj == nil { + return nil, fmt.Errorf("interface %s does not exist", iface) + } + + modelIface, err := p.parseInterface(obj) + if err != nil { + return nil, newParseTypeError("parse interface", obj.Name(), err) + } + + interfaces[i] = modelIface + } + + return interfaces, nil +} + +func (p *packageModeParser) parseInterface(obj types.Object) (*model.Interface, error) { + named, ok := types.Unalias(obj.Type()).(*types.Named) + if !ok { + return nil, fmt.Errorf("%s is not an interface. it is a %T", obj.Name(), obj.Type().Underlying()) + } + + iface, ok := named.Underlying().(*types.Interface) + if !ok { + return nil, fmt.Errorf("%s is not an interface. it is a %T", obj.Name(), obj.Type().Underlying()) + } + + if p.isConstraint(iface) { + return nil, fmt.Errorf("interface %s is a constraint", obj.Name()) + } + + methods := make([]*model.Method, iface.NumMethods()) + for i := range iface.NumMethods() { + method := iface.Method(i) + typedMethod, ok := method.Type().(*types.Signature) + if !ok { + return nil, fmt.Errorf("method %s is not a signature", method.Name()) + } + + modelFunc, err := p.parseFunc(typedMethod) + if err != nil { + return nil, newParseTypeError("parse method", typedMethod.String(), err) + } + + methods[i] = &model.Method{ + Name: method.Name(), + In: modelFunc.In, + Out: modelFunc.Out, + Variadic: modelFunc.Variadic, + } + } + + if named.TypeParams() == nil { + return &model.Interface{Name: obj.Name(), Methods: methods}, nil + } + + typeParams := make([]*model.Parameter, named.TypeParams().Len()) + for i := range named.TypeParams().Len() { + param := named.TypeParams().At(i) + typeParam, err := p.parseConstraint(param) + if err != nil { + return nil, newParseTypeError("parse type parameter", param.String(), err) + } + + typeParams[i] = &model.Parameter{Name: param.Obj().Name(), Type: typeParam} + } + + return &model.Interface{Name: obj.Name(), Methods: methods, TypeParams: typeParams}, nil +} + +func (o *packageModeParser) isConstraint(t *types.Interface) bool { + for i := range t.NumEmbeddeds() { + embed := t.EmbeddedType(i) + if _, ok := embed.Underlying().(*types.Interface); !ok { + return true + } + } + + return false +} + +func (p *packageModeParser) parseType(t types.Type) (model.Type, error) { + switch t := t.(type) { + case *types.Array: + elementType, err := p.parseType(t.Elem()) + if err != nil { + return nil, newParseTypeError("parse array type", t.Elem().String(), err) + } + return &model.ArrayType{Len: int(t.Len()), Type: elementType}, nil + case *types.Slice: + elementType, err := p.parseType(t.Elem()) + if err != nil { + return nil, newParseTypeError("parse slice type", t.Elem().String(), err) + } + + return &model.ArrayType{Len: -1, Type: elementType}, nil + case *types.Chan: + var dir model.ChanDir + switch t.Dir() { + case types.RecvOnly: + dir = model.RecvDir + case types.SendOnly: + dir = model.SendDir + } + + chanType, err := p.parseType(t.Elem()) + if err != nil { + return nil, newParseTypeError("parse chan type", t.Elem().String(), err) + } + + return &model.ChanType{Dir: dir, Type: chanType}, nil + case *types.Signature: + sig, err := p.parseFunc(t) + if err != nil { + return nil, newParseTypeError("parse signature", t.String(), err) + } + + return sig, nil + case *types.Named, *types.Alias: + object := t.(interface{ Obj() *types.TypeName }) + var pkg string + if object.Obj().Pkg() != nil { + pkg = object.Obj().Pkg().Path() + } + + // TypeArgs method not available for aliases in go1.22 + genericType, ok := t.(interface{ TypeArgs() *types.TypeList }) + if !ok || genericType.TypeArgs() == nil { + return &model.NamedType{ + Package: pkg, + Type: object.Obj().Name(), + }, nil + } + + typeParams := &model.TypeParametersType{TypeParameters: make([]model.Type, genericType.TypeArgs().Len())} + for i := range genericType.TypeArgs().Len() { + typeParam := genericType.TypeArgs().At(i) + typedParam, err := p.parseType(typeParam) + if err != nil { + return nil, newParseTypeError("parse type parameter", typeParam.String(), err) + } + + typeParams.TypeParameters[i] = typedParam + } + + return &model.NamedType{ + Package: pkg, + Type: object.Obj().Name(), + TypeParams: typeParams, + }, nil + case *types.Interface: + if t.Empty() { + return model.PredeclaredType("any"), nil + } + + return nil, fmt.Errorf("cannot handle non-empty unnamed interfaces") + case *types.Map: + key, err := p.parseType(t.Key()) + if err != nil { + return nil, newParseTypeError("parse map key", t.Key().String(), err) + } + value, err := p.parseType(t.Elem()) + if err != nil { + return nil, newParseTypeError("parse map value", t.Elem().String(), err) + } + + return &model.MapType{Key: key, Value: value}, nil + case *types.Pointer: + valueType, err := p.parseType(t.Elem()) + if err != nil { + return nil, newParseTypeError("parse pointer type", t.Elem().String(), err) + } + + return &model.PointerType{Type: valueType}, nil + case *types.Struct: + if t.NumFields() > 0 { + return nil, fmt.Errorf("cannot handle non-empty unnamed structs") + } + + return model.PredeclaredType("struct{}"), nil + case *types.Basic: + return model.PredeclaredType(t.Name()), nil + case *types.Tuple: + panic("tuple field") // TODO + case *types.TypeParam: + return &model.NamedType{Type: t.Obj().Name()}, nil + default: + panic("unknown type") // TODO + } +} + +func (p *packageModeParser) parseFunc(sig *types.Signature) (*model.FuncType, error) { + var variadic *model.Parameter + params := make([]*model.Parameter, 0, sig.Params().Len()) + for i := range sig.Params().Len() { + param := sig.Params().At(i) + + isVariadicParam := i == sig.Params().Len()-1 && sig.Variadic() + parseType := param.Type() + if isVariadicParam { + sliceType, ok := param.Type().(*types.Slice) + if !ok { + return nil, newParseTypeError("variadic parameter is not a slice", param.String(), nil) + } + + parseType = sliceType.Elem() + } + + paramType, err := p.parseType(parseType) + if err != nil { + return nil, newParseTypeError("parse parameter type", parseType.String(), err) + } + + modelParameter := &model.Parameter{Type: paramType, Name: param.Name()} + + if isVariadicParam { + variadic = modelParameter + } else { + params = append(params, modelParameter) + } + } + + if len(params) == 0 { + params = nil + } + + results := make([]*model.Parameter, sig.Results().Len()) + for i := range sig.Results().Len() { + result := sig.Results().At(i) + + resultType, err := p.parseType(result.Type()) + if err != nil { + return nil, newParseTypeError("parse result type", result.Type().String(), err) + } + + results[i] = &model.Parameter{Type: resultType, Name: result.Name()} + } + + if len(results) == 0 { + results = nil + } + + return &model.FuncType{ + In: params, + Out: results, + Variadic: variadic, + }, nil +} + +func (p *packageModeParser) parseConstraint(t *types.TypeParam) (model.Type, error) { + if t == nil { + return nil, fmt.Errorf("nil type param") + } + + typeParam, err := p.parseType(t.Constraint()) + if err != nil { + return nil, newParseTypeError("parse constraint type", t.Constraint().String(), err) + } + + return typeParam, nil +} + +type parseTypeError struct { + message string + typeString string + error error +} + +func newParseTypeError(message string, typeString string, error error) *parseTypeError { + return &parseTypeError{typeString: typeString, error: error, message: message} +} + +func (p parseTypeError) Error() string { + if p.error != nil { + return fmt.Sprintf("%s: error parsing %s: %s", p.message, p.typeString, p.error) + } + + return fmt.Sprintf("%s: error parsing type %s", p.message, p.typeString) +} + +func (p parseTypeError) Unwrap() error { + return p.error +} diff --git a/vendor/go.uber.org/mock/mockgen/parse.go b/vendor/go.uber.org/mock/mockgen/parse.go new file mode 100644 index 0000000..f43321c --- /dev/null +++ b/vendor/go.uber.org/mock/mockgen/parse.go @@ -0,0 +1,805 @@ +// Copyright 2012 Google Inc. +// +// 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 main + +// This file contains the model construction by parsing source files. + +import ( + "errors" + "fmt" + "go/ast" + "go/build" + "go/importer" + "go/parser" + "go/token" + "go/types" + "log" + "os" + "path" + "path/filepath" + "strconv" + "strings" + + "go.uber.org/mock/mockgen/model" +) + +// sourceMode generates mocks via source file. +func sourceMode(source string) (*model.Package, error) { + srcDir, err := filepath.Abs(filepath.Dir(source)) + if err != nil { + return nil, fmt.Errorf("failed getting source directory: %v", err) + } + + packageImport, err := parsePackageImport(srcDir) + if err != nil { + return nil, err + } + + fs := token.NewFileSet() + file, err := parser.ParseFile(fs, source, nil, 0) + if err != nil { + return nil, fmt.Errorf("failed parsing source file %v: %v", source, err) + } + + p := &fileParser{ + fileSet: fs, + imports: make(map[string]importedPackage), + importedInterfaces: newInterfaceCache(), + auxInterfaces: newInterfaceCache(), + srcDir: srcDir, + } + + // Handle -imports. + dotImports := make(map[string]bool) + if *imports != "" { + for _, kv := range strings.Split(*imports, ",") { + eq := strings.Index(kv, "=") + k, v := kv[:eq], kv[eq+1:] + if k == "." { + dotImports[v] = true + } else { + p.imports[k] = importedPkg{path: v} + } + } + } + + if *excludeInterfaces != "" { + p.excludeNamesSet = parseExcludeInterfaces(*excludeInterfaces) + } + + // Handle -aux_files. + if err := p.parseAuxFiles(*auxFiles); err != nil { + return nil, err + } + p.addAuxInterfacesFromFile(packageImport, file) // this file + + pkg, err := p.parseFile(packageImport, file) + if err != nil { + return nil, err + } + for pkgPath := range dotImports { + pkg.DotImports = append(pkg.DotImports, pkgPath) + } + return pkg, nil +} + +type importedPackage interface { + Path() string + Parser() *fileParser +} + +type importedPkg struct { + path string + parser *fileParser +} + +func (i importedPkg) Path() string { return i.path } +func (i importedPkg) Parser() *fileParser { return i.parser } + +// duplicateImport is a bit of a misnomer. Currently the parser can't +// handle cases of multi-file packages importing different packages +// under the same name. Often these imports would not be problematic, +// so this type lets us defer raising an error unless the package name +// is actually used. +type duplicateImport struct { + name string + duplicates []string +} + +func (d duplicateImport) Error() string { + return fmt.Sprintf("%q is ambiguous because of duplicate imports: %v", d.name, d.duplicates) +} + +func (d duplicateImport) Path() string { log.Fatal(d.Error()); return "" } +func (d duplicateImport) Parser() *fileParser { log.Fatal(d.Error()); return nil } + +type interfaceCache struct { + m map[string]map[string]*namedInterface +} + +func newInterfaceCache() *interfaceCache { + return &interfaceCache{ + m: make(map[string]map[string]*namedInterface), + } +} + +func (i *interfaceCache) Set(pkg, name string, it *namedInterface) { + if _, ok := i.m[pkg]; !ok { + i.m[pkg] = make(map[string]*namedInterface) + } + i.m[pkg][name] = it +} + +func (i *interfaceCache) Get(pkg, name string) *namedInterface { + if _, ok := i.m[pkg]; !ok { + return nil + } + return i.m[pkg][name] +} + +func (i *interfaceCache) GetASTIface(pkg, name string) *ast.InterfaceType { + if _, ok := i.m[pkg]; !ok { + return nil + } + it, ok := i.m[pkg][name] + if !ok { + return nil + } + return it.it +} + +type fileParser struct { + fileSet *token.FileSet + imports map[string]importedPackage // package name => imported package + importedInterfaces *interfaceCache + auxFiles []*ast.File + auxInterfaces *interfaceCache + srcDir string + excludeNamesSet map[string]struct{} +} + +func (p *fileParser) errorf(pos token.Pos, format string, args ...any) error { + ps := p.fileSet.Position(pos) + format = "%s:%d:%d: " + format + args = append([]any{ps.Filename, ps.Line, ps.Column}, args...) + return fmt.Errorf(format, args...) +} + +func (p *fileParser) parseAuxFiles(auxFiles string) error { + auxFiles = strings.TrimSpace(auxFiles) + if auxFiles == "" { + return nil + } + for _, kv := range strings.Split(auxFiles, ",") { + parts := strings.SplitN(kv, "=", 2) + if len(parts) != 2 { + return fmt.Errorf("bad aux file spec: %v", kv) + } + pkg, fpath := parts[0], parts[1] + + file, err := parser.ParseFile(p.fileSet, fpath, nil, 0) + if err != nil { + return err + } + p.auxFiles = append(p.auxFiles, file) + p.addAuxInterfacesFromFile(pkg, file) + } + return nil +} + +func (p *fileParser) addAuxInterfacesFromFile(pkg string, file *ast.File) { + for ni := range iterInterfaces(file) { + p.auxInterfaces.Set(pkg, ni.name.Name, ni) + } +} + +// parseFile loads all file imports and auxiliary files import into the +// fileParser, parses all file interfaces and returns package model. +func (p *fileParser) parseFile(importPath string, file *ast.File) (*model.Package, error) { + allImports, dotImports := importsOfFile(file) + // Don't stomp imports provided by -imports. Those should take precedence. + for pkg, pkgI := range allImports { + if _, ok := p.imports[pkg]; !ok { + p.imports[pkg] = pkgI + } + } + // Add imports from auxiliary files, which might be needed for embedded interfaces. + // Don't stomp any other imports. + for _, f := range p.auxFiles { + auxImports, _ := importsOfFile(f) + for pkg, pkgI := range auxImports { + if _, ok := p.imports[pkg]; !ok { + p.imports[pkg] = pkgI + } + } + } + + var is []*model.Interface + for ni := range iterInterfaces(file) { + if _, ok := p.excludeNamesSet[ni.name.String()]; ok { + continue + } + i, err := p.parseInterface(ni.name.String(), importPath, ni) + if errors.Is(err, errConstraintInterface) { + continue + } + if err != nil { + return nil, err + } + is = append(is, i) + } + return &model.Package{ + Name: file.Name.String(), + PkgPath: importPath, + Interfaces: is, + DotImports: dotImports, + }, nil +} + +// parsePackage loads package specified by path, parses it and returns +// a new fileParser with the parsed imports and interfaces. +func (p *fileParser) parsePackage(path string) (*fileParser, error) { + newP := &fileParser{ + fileSet: token.NewFileSet(), + imports: make(map[string]importedPackage), + importedInterfaces: newInterfaceCache(), + auxInterfaces: newInterfaceCache(), + srcDir: p.srcDir, + } + + var pkgs map[string]*ast.Package + if imp, err := build.Import(path, newP.srcDir, build.FindOnly); err != nil { + return nil, err + } else if pkgs, err = parser.ParseDir(newP.fileSet, imp.Dir, nil, 0); err != nil { + return nil, err + } + + for _, pkg := range pkgs { + file := ast.MergePackageFiles(pkg, ast.FilterFuncDuplicates|ast.FilterUnassociatedComments|ast.FilterImportDuplicates) + for ni := range iterInterfaces(file) { + newP.importedInterfaces.Set(path, ni.name.Name, ni) + } + imports, _ := importsOfFile(file) + for pkgName, pkgI := range imports { + newP.imports[pkgName] = pkgI + } + } + return newP, nil +} + +func (p *fileParser) constructInstParams(pkg string, params []*ast.Field, instParams []model.Type, embeddedInstParams []ast.Expr, tps map[string]model.Type) ([]model.Type, error) { + pm := make(map[string]int) + var i int + for _, v := range params { + for _, n := range v.Names { + pm[n.Name] = i + instParams = append(instParams, model.PredeclaredType(n.Name)) + i++ + } + } + + var runtimeInstParams []model.Type + for _, instParam := range embeddedInstParams { + switch t := instParam.(type) { + case *ast.Ident: + if idx, ok := pm[t.Name]; ok { + runtimeInstParams = append(runtimeInstParams, instParams[idx]) + continue + } + } + modelType, err := p.parseType(pkg, instParam, tps) + if err != nil { + return nil, err + } + runtimeInstParams = append(runtimeInstParams, modelType) + } + + return runtimeInstParams, nil +} + +func (p *fileParser) constructTps(it *namedInterface) (tps map[string]model.Type) { + tps = make(map[string]model.Type) + n := 0 + for _, tp := range it.typeParams { + for _, tm := range tp.Names { + tps[tm.Name] = nil + if len(it.instTypes) != 0 { + tps[tm.Name] = it.instTypes[n] + n++ + } + } + } + return tps +} + +// parseInterface loads interface specified by pkg and name, parses it and returns +// a new model with the parsed. +func (p *fileParser) parseInterface(name, pkg string, it *namedInterface) (*model.Interface, error) { + iface := &model.Interface{Name: name} + tps := p.constructTps(it) + tp, err := p.parseFieldList(pkg, it.typeParams, tps) + if err != nil { + return nil, fmt.Errorf("unable to parse interface type parameters: %v", name) + } + + iface.TypeParams = tp + for _, field := range it.it.Methods.List { + var methods []*model.Method + if methods, err = p.parseMethod(field, it, iface, pkg, tps); err != nil { + return nil, err + } + for _, m := range methods { + iface.AddMethod(m) + } + } + return iface, nil +} + +func (p *fileParser) parseMethod(field *ast.Field, it *namedInterface, iface *model.Interface, pkg string, tps map[string]model.Type) ([]*model.Method, error) { + // {} for git diff + { + switch v := field.Type.(type) { + case *ast.FuncType: + if nn := len(field.Names); nn != 1 { + return nil, fmt.Errorf("expected one name for interface %v, got %d", iface.Name, nn) + } + m := &model.Method{ + Name: field.Names[0].String(), + } + var err error + m.In, m.Variadic, m.Out, err = p.parseFunc(pkg, v, tps) + if err != nil { + return nil, err + } + return []*model.Method{m}, nil + case *ast.Ident: + // Embedded interface in this package. + embeddedIfaceType := p.auxInterfaces.Get(pkg, v.String()) + if embeddedIfaceType == nil { + embeddedIfaceType = p.importedInterfaces.Get(pkg, v.String()) + } + + var embeddedIface *model.Interface + if embeddedIfaceType != nil { + var err error + embeddedIfaceType.instTypes, err = p.constructInstParams(pkg, it.typeParams, it.instTypes, it.embeddedInstTypeParams, tps) + if err != nil { + return nil, err + } + embeddedIface, err = p.parseInterface(v.String(), pkg, embeddedIfaceType) + if err != nil { + return nil, err + } + + } else { + // This is built-in error interface. + if v.String() == model.ErrorInterface.Name { + embeddedIface = &model.ErrorInterface + } else { + ip, err := p.parsePackage(pkg) + if err != nil { + return nil, p.errorf(v.Pos(), "could not parse package %s: %v", pkg, err) + } + + if embeddedIfaceType = ip.importedInterfaces.Get(pkg, v.String()); embeddedIfaceType == nil { + return nil, p.errorf(v.Pos(), "unknown embedded interface %s.%s", pkg, v.String()) + } + + embeddedIfaceType.instTypes, err = p.constructInstParams(pkg, it.typeParams, it.instTypes, it.embeddedInstTypeParams, tps) + if err != nil { + return nil, err + } + embeddedIface, err = ip.parseInterface(v.String(), pkg, embeddedIfaceType) + if err != nil { + return nil, err + } + } + } + return embeddedIface.Methods, nil + case *ast.SelectorExpr: + // Embedded interface in another package. + filePkg, sel := v.X.(*ast.Ident).String(), v.Sel.String() + embeddedPkg, ok := p.imports[filePkg] + if !ok { + return nil, p.errorf(v.X.Pos(), "unknown package %s", filePkg) + } + + var embeddedIface *model.Interface + var err error + embeddedIfaceType := p.auxInterfaces.Get(filePkg, sel) + if embeddedIfaceType != nil { + embeddedIfaceType.instTypes, err = p.constructInstParams(pkg, it.typeParams, it.instTypes, it.embeddedInstTypeParams, tps) + if err != nil { + return nil, err + } + embeddedIface, err = p.parseInterface(sel, filePkg, embeddedIfaceType) + if err != nil { + return nil, err + } + } else { + path := embeddedPkg.Path() + parser := embeddedPkg.Parser() + if parser == nil { + ip, err := p.parsePackage(path) + if err != nil { + return nil, p.errorf(v.Pos(), "could not parse package %s: %v", path, err) + } + parser = ip + p.imports[filePkg] = importedPkg{ + path: embeddedPkg.Path(), + parser: parser, + } + } + if embeddedIfaceType = parser.importedInterfaces.Get(path, sel); embeddedIfaceType == nil { + return nil, p.errorf(v.Pos(), "unknown embedded interface %s.%s", path, sel) + } + + embeddedIfaceType.instTypes, err = p.constructInstParams(pkg, it.typeParams, it.instTypes, it.embeddedInstTypeParams, tps) + if err != nil { + return nil, err + } + embeddedIface, err = parser.parseInterface(sel, path, embeddedIfaceType) + if err != nil { + return nil, err + } + } + // TODO: apply shadowing rules. + return embeddedIface.Methods, nil + default: + return p.parseGenericMethod(field, it, iface, pkg, tps) + } + } +} + +func (p *fileParser) parseFunc(pkg string, f *ast.FuncType, tps map[string]model.Type) (inParam []*model.Parameter, variadic *model.Parameter, outParam []*model.Parameter, err error) { + if f.Params != nil { + regParams := f.Params.List + if isVariadic(f) { + n := len(regParams) + varParams := regParams[n-1:] + regParams = regParams[:n-1] + vp, err := p.parseFieldList(pkg, varParams, tps) + if err != nil { + return nil, nil, nil, p.errorf(varParams[0].Pos(), "failed parsing variadic argument: %v", err) + } + variadic = vp[0] + } + inParam, err = p.parseFieldList(pkg, regParams, tps) + if err != nil { + return nil, nil, nil, p.errorf(f.Pos(), "failed parsing arguments: %v", err) + } + } + if f.Results != nil { + outParam, err = p.parseFieldList(pkg, f.Results.List, tps) + if err != nil { + return nil, nil, nil, p.errorf(f.Pos(), "failed parsing returns: %v", err) + } + } + return +} + +func (p *fileParser) parseFieldList(pkg string, fields []*ast.Field, tps map[string]model.Type) ([]*model.Parameter, error) { + nf := 0 + for _, f := range fields { + nn := len(f.Names) + if nn == 0 { + nn = 1 // anonymous parameter + } + nf += nn + } + if nf == 0 { + return nil, nil + } + ps := make([]*model.Parameter, nf) + i := 0 // destination index + for _, f := range fields { + t, err := p.parseType(pkg, f.Type, tps) + if err != nil { + return nil, err + } + + if len(f.Names) == 0 { + // anonymous arg + ps[i] = &model.Parameter{Type: t} + i++ + continue + } + for _, name := range f.Names { + ps[i] = &model.Parameter{Name: name.Name, Type: t} + i++ + } + } + return ps, nil +} + +func (p *fileParser) parseType(pkg string, typ ast.Expr, tps map[string]model.Type) (model.Type, error) { + switch v := typ.(type) { + case *ast.ArrayType: + ln := -1 + if v.Len != nil { + value, err := p.parseArrayLength(v.Len) + if err != nil { + return nil, err + } + ln, err = strconv.Atoi(value) + if err != nil { + return nil, p.errorf(v.Len.Pos(), "bad array size: %v", err) + } + } + t, err := p.parseType(pkg, v.Elt, tps) + if err != nil { + return nil, err + } + return &model.ArrayType{Len: ln, Type: t}, nil + case *ast.ChanType: + t, err := p.parseType(pkg, v.Value, tps) + if err != nil { + return nil, err + } + var dir model.ChanDir + if v.Dir == ast.SEND { + dir = model.SendDir + } + if v.Dir == ast.RECV { + dir = model.RecvDir + } + return &model.ChanType{Dir: dir, Type: t}, nil + case *ast.Ellipsis: + // assume we're parsing a variadic argument + return p.parseType(pkg, v.Elt, tps) + case *ast.FuncType: + in, variadic, out, err := p.parseFunc(pkg, v, tps) + if err != nil { + return nil, err + } + return &model.FuncType{In: in, Out: out, Variadic: variadic}, nil + case *ast.Ident: + it, ok := tps[v.Name] + if v.IsExported() && !ok { + // `pkg` may be an aliased imported pkg + // if so, patch the import w/ the fully qualified import + maybeImportedPkg, ok := p.imports[pkg] + if ok { + pkg = maybeImportedPkg.Path() + } + // assume type in this package + return &model.NamedType{Package: pkg, Type: v.Name}, nil + } + if ok && it != nil { + return it, nil + } + // assume predeclared type + return model.PredeclaredType(v.Name), nil + case *ast.InterfaceType: + if v.Methods != nil && len(v.Methods.List) > 0 { + return nil, p.errorf(v.Pos(), "can't handle non-empty unnamed interface types") + } + return model.PredeclaredType("any"), nil + case *ast.MapType: + key, err := p.parseType(pkg, v.Key, tps) + if err != nil { + return nil, err + } + value, err := p.parseType(pkg, v.Value, tps) + if err != nil { + return nil, err + } + return &model.MapType{Key: key, Value: value}, nil + case *ast.SelectorExpr: + pkgName := v.X.(*ast.Ident).String() + pkg, ok := p.imports[pkgName] + if !ok { + return nil, p.errorf(v.Pos(), "unknown package %q", pkgName) + } + return &model.NamedType{Package: pkg.Path(), Type: v.Sel.String()}, nil + case *ast.StarExpr: + t, err := p.parseType(pkg, v.X, tps) + if err != nil { + return nil, err + } + return &model.PointerType{Type: t}, nil + case *ast.StructType: + if v.Fields != nil && len(v.Fields.List) > 0 { + return nil, p.errorf(v.Pos(), "can't handle non-empty unnamed struct types") + } + return model.PredeclaredType("struct{}"), nil + case *ast.ParenExpr: + return p.parseType(pkg, v.X, tps) + default: + mt, err := p.parseGenericType(pkg, typ, tps) + if err != nil { + return nil, err + } + if mt == nil { + break + } + return mt, nil + } + + return nil, fmt.Errorf("don't know how to parse type %T", typ) +} + +func (p *fileParser) parseArrayLength(expr ast.Expr) (string, error) { + switch val := expr.(type) { + case (*ast.BasicLit): + return val.Value, nil + case (*ast.Ident): + // when the length is a const defined locally + return val.Obj.Decl.(*ast.ValueSpec).Values[0].(*ast.BasicLit).Value, nil + case (*ast.SelectorExpr): + // when the length is a const defined in an external package + usedPkg, err := importer.Default().Import(fmt.Sprintf("%s", val.X)) + if err != nil { + return "", p.errorf(expr.Pos(), "unknown package in array length: %v", err) + } + ev, err := types.Eval(token.NewFileSet(), usedPkg, token.NoPos, val.Sel.Name) + if err != nil { + return "", p.errorf(expr.Pos(), "unknown constant in array length: %v", err) + } + return ev.Value.String(), nil + case (*ast.ParenExpr): + return p.parseArrayLength(val.X) + case (*ast.BinaryExpr): + x, err := p.parseArrayLength(val.X) + if err != nil { + return "", err + } + y, err := p.parseArrayLength(val.Y) + if err != nil { + return "", err + } + biExpr := fmt.Sprintf("%s%v%s", x, val.Op, y) + tv, err := types.Eval(token.NewFileSet(), nil, token.NoPos, biExpr) + if err != nil { + return "", p.errorf(expr.Pos(), "invalid expression in array length: %v", err) + } + return tv.Value.String(), nil + default: + return "", p.errorf(expr.Pos(), "invalid expression in array length: %v", val) + } +} + +// importsOfFile returns a map of package name to import path +// of the imports in file. +func importsOfFile(file *ast.File) (normalImports map[string]importedPackage, dotImports []string) { + var importPaths []string + for _, is := range file.Imports { + if is.Name != nil { + continue + } + importPath := is.Path.Value[1 : len(is.Path.Value)-1] // remove quotes + importPaths = append(importPaths, importPath) + } + packagesName := createPackageMap(importPaths) + normalImports = make(map[string]importedPackage) + dotImports = make([]string, 0) + for _, is := range file.Imports { + var pkgName string + importPath := is.Path.Value[1 : len(is.Path.Value)-1] // remove quotes + + if is.Name != nil { + // Named imports are always certain. + if is.Name.Name == "_" { + continue + } + pkgName = is.Name.Name + } else { + pkg, ok := packagesName[importPath] + if !ok { + // Fallback to import path suffix. Note that this is uncertain. + _, last := path.Split(importPath) + // If the last path component has dots, the first dot-delimited + // field is used as the name. + pkgName = strings.SplitN(last, ".", 2)[0] + } else { + pkgName = pkg + } + } + + if pkgName == "." { + dotImports = append(dotImports, importPath) + } else { + if pkg, ok := normalImports[pkgName]; ok { + switch p := pkg.(type) { + case duplicateImport: + normalImports[pkgName] = duplicateImport{ + name: p.name, + duplicates: append([]string{importPath}, p.duplicates...), + } + case importedPkg: + normalImports[pkgName] = duplicateImport{ + name: pkgName, + duplicates: []string{p.path, importPath}, + } + } + } else { + normalImports[pkgName] = importedPkg{path: importPath} + } + } + } + return +} + +type namedInterface struct { + name *ast.Ident + it *ast.InterfaceType + typeParams []*ast.Field + embeddedInstTypeParams []ast.Expr + instTypes []model.Type +} + +// Create an iterator over all interfaces in file. +func iterInterfaces(file *ast.File) <-chan *namedInterface { + ch := make(chan *namedInterface) + go func() { + for _, decl := range file.Decls { + gd, ok := decl.(*ast.GenDecl) + if !ok || gd.Tok != token.TYPE { + continue + } + for _, spec := range gd.Specs { + ts, ok := spec.(*ast.TypeSpec) + if !ok { + continue + } + it, ok := ts.Type.(*ast.InterfaceType) + if !ok { + continue + } + + ch <- &namedInterface{name: ts.Name, it: it, typeParams: getTypeSpecTypeParams(ts)} + } + } + close(ch) + }() + return ch +} + +// isVariadic returns whether the function is variadic. +func isVariadic(f *ast.FuncType) bool { + nargs := len(f.Params.List) + if nargs == 0 { + return false + } + _, ok := f.Params.List[nargs-1].Type.(*ast.Ellipsis) + return ok +} + +// packageNameOfDir get package import path via dir +func packageNameOfDir(srcDir string) (string, error) { + files, err := os.ReadDir(srcDir) + if err != nil { + log.Fatal(err) + } + + var goFilePath string + for _, file := range files { + if !file.IsDir() && strings.HasSuffix(file.Name(), ".go") { + goFilePath = file.Name() + break + } + } + if goFilePath == "" { + return "", fmt.Errorf("go source file not found %s", srcDir) + } + + packageImport, err := parsePackageImport(srcDir) + if err != nil { + return "", err + } + return packageImport, nil +} + +var errOutsideGoPath = errors.New("source directory is outside GOPATH") diff --git a/vendor/go.uber.org/mock/mockgen/version.go b/vendor/go.uber.org/mock/mockgen/version.go new file mode 100644 index 0000000..6db160a --- /dev/null +++ b/vendor/go.uber.org/mock/mockgen/version.go @@ -0,0 +1,31 @@ +// Copyright 2022 Google LLC +// +// 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 main + +import ( + "fmt" + "log" + "runtime/debug" +) + +func printModuleVersion() { + if bi, exists := debug.ReadBuildInfo(); exists { + fmt.Println(bi.Main.Version) + } else { + log.Printf("No version information found. Make sure to use " + + "GO111MODULE=on when running 'go get' in order to use specific " + + "version of the binary.") + } +} diff --git a/vendor/golang.org/x/arch/x86/x86asm/gnu.go b/vendor/golang.org/x/arch/x86/x86asm/gnu.go index 8eba1fd..864f32c 100644 --- a/vendor/golang.org/x/arch/x86/x86asm/gnu.go +++ b/vendor/golang.org/x/arch/x86/x86asm/gnu.go @@ -667,12 +667,14 @@ func gnuArg(inst *Inst, pc uint64, symname SymLookup, x Arg, usedPrefixes *bool) } } case Imm: - if s, base := symname(uint64(x)); s != "" { - suffix := "" - if uint64(x) != base { - suffix = fmt.Sprintf("%+d", uint64(x)-base) + if (inst.Op == MOV || inst.Op == PUSH) && inst.DataSize == 32 { // See comment in plan9x.go. + if s, base := symname(uint64(x)); s != "" { + suffix := "" + if uint64(x) != base { + suffix = fmt.Sprintf("%+d", uint64(x)-base) + } + return fmt.Sprintf("$%s%s", s, suffix) } - return fmt.Sprintf("$%s%s", s, suffix) } if inst.Mode == 32 { return fmt.Sprintf("$%#x", uint32(x)) diff --git a/vendor/golang.org/x/arch/x86/x86asm/intel.go b/vendor/golang.org/x/arch/x86/x86asm/intel.go index 472eabd..a062299 100644 --- a/vendor/golang.org/x/arch/x86/x86asm/intel.go +++ b/vendor/golang.org/x/arch/x86/x86asm/intel.go @@ -341,12 +341,14 @@ func IntelSyntax(inst Inst, pc uint64, symname SymLookup) string { func intelArg(inst *Inst, pc uint64, symname SymLookup, arg Arg) string { switch a := arg.(type) { case Imm: - if s, base := symname(uint64(a)); s != "" { - suffix := "" - if uint64(a) != base { - suffix = fmt.Sprintf("%+d", uint64(a)-base) + if (inst.Op == MOV || inst.Op == PUSH) && inst.DataSize == 32 { // See comment in plan9x.go. + if s, base := symname(uint64(a)); s != "" { + suffix := "" + if uint64(a) != base { + suffix = fmt.Sprintf("%+d", uint64(a)-base) + } + return fmt.Sprintf("$%s%s", s, suffix) } - return fmt.Sprintf("$%s%s", s, suffix) } if inst.Mode == 32 { return fmt.Sprintf("%#x", uint32(a)) diff --git a/vendor/golang.org/x/arch/x86/x86asm/plan9x.go b/vendor/golang.org/x/arch/x86/x86asm/plan9x.go index 9e866d8..e82349c 100644 --- a/vendor/golang.org/x/arch/x86/x86asm/plan9x.go +++ b/vendor/golang.org/x/arch/x86/x86asm/plan9x.go @@ -116,12 +116,23 @@ func plan9Arg(inst *Inst, pc uint64, symname func(uint64) (string, uint64), arg return fmt.Sprintf("%#x", addr) case Imm: - if s, base := symname(uint64(a)); s != "" { - suffix := "" - if uint64(a) != base { - suffix = fmt.Sprintf("%+d", uint64(a)-base) + if (inst.Op == MOV || inst.Op == PUSH) && inst.DataSize == 32 { + // Only try to convert an immediate to a symbol in certain + // special circumstances. See issue 72942. + // + // On 64-bit, symbol addresses always hit the Mem case below. + // Particularly, we use LEAQ to materialize the address of + // a global or function. + // + // On 32-bit, we sometimes use MOVL. Still try to symbolize + // those immediates. + if s, base := symname(uint64(a)); s != "" { + suffix := "" + if uint64(a) != base { + suffix = fmt.Sprintf("%+d", uint64(a)-base) + } + return fmt.Sprintf("$%s%s(SB)", s, suffix) } - return fmt.Sprintf("$%s%s(SB)", s, suffix) } if inst.Mode == 32 { return fmt.Sprintf("$%#x", uint32(a)) diff --git a/vendor/golang.org/x/crypto/bcrypt/bcrypt.go b/vendor/golang.org/x/crypto/bcrypt/bcrypt.go index dc93118..3e7f8df 100644 --- a/vendor/golang.org/x/crypto/bcrypt/bcrypt.go +++ b/vendor/golang.org/x/crypto/bcrypt/bcrypt.go @@ -50,7 +50,7 @@ func (ih InvalidHashPrefixError) Error() string { type InvalidCostError int func (ic InvalidCostError) Error() string { - return fmt.Sprintf("crypto/bcrypt: cost %d is outside allowed range (%d,%d)", int(ic), MinCost, MaxCost) + return fmt.Sprintf("crypto/bcrypt: cost %d is outside allowed inclusive range %d..%d", int(ic), MinCost, MaxCost) } const ( diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_arm64.go b/vendor/golang.org/x/crypto/chacha20/chacha_arm64.go new file mode 100644 index 0000000..661ea13 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20/chacha_arm64.go @@ -0,0 +1,16 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego + +package chacha20 + +const bufSize = 256 + +//go:noescape +func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32) + +func (c *Cipher) xorKeyStreamBlocks(dst, src []byte) { + xorKeyStreamVX(dst, src, &c.key, &c.nonce, &c.counter) +} diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_arm64.s b/vendor/golang.org/x/crypto/chacha20/chacha_arm64.s new file mode 100644 index 0000000..7dd2638 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20/chacha_arm64.s @@ -0,0 +1,307 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego + +#include "textflag.h" + +#define NUM_ROUNDS 10 + +// func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32) +TEXT ·xorKeyStreamVX(SB), NOSPLIT, $0 + MOVD dst+0(FP), R1 + MOVD src+24(FP), R2 + MOVD src_len+32(FP), R3 + MOVD key+48(FP), R4 + MOVD nonce+56(FP), R6 + MOVD counter+64(FP), R7 + + MOVD $·constants(SB), R10 + MOVD $·incRotMatrix(SB), R11 + + MOVW (R7), R20 + + AND $~255, R3, R13 + ADD R2, R13, R12 // R12 for block end + AND $255, R3, R13 +loop: + MOVD $NUM_ROUNDS, R21 + VLD1 (R11), [V30.S4, V31.S4] + + // load contants + // VLD4R (R10), [V0.S4, V1.S4, V2.S4, V3.S4] + WORD $0x4D60E940 + + // load keys + // VLD4R 16(R4), [V4.S4, V5.S4, V6.S4, V7.S4] + WORD $0x4DFFE884 + // VLD4R 16(R4), [V8.S4, V9.S4, V10.S4, V11.S4] + WORD $0x4DFFE888 + SUB $32, R4 + + // load counter + nonce + // VLD1R (R7), [V12.S4] + WORD $0x4D40C8EC + + // VLD3R (R6), [V13.S4, V14.S4, V15.S4] + WORD $0x4D40E8CD + + // update counter + VADD V30.S4, V12.S4, V12.S4 + +chacha: + // V0..V3 += V4..V7 + // V12..V15 <<<= ((V12..V15 XOR V0..V3), 16) + VADD V0.S4, V4.S4, V0.S4 + VADD V1.S4, V5.S4, V1.S4 + VADD V2.S4, V6.S4, V2.S4 + VADD V3.S4, V7.S4, V3.S4 + VEOR V12.B16, V0.B16, V12.B16 + VEOR V13.B16, V1.B16, V13.B16 + VEOR V14.B16, V2.B16, V14.B16 + VEOR V15.B16, V3.B16, V15.B16 + VREV32 V12.H8, V12.H8 + VREV32 V13.H8, V13.H8 + VREV32 V14.H8, V14.H8 + VREV32 V15.H8, V15.H8 + // V8..V11 += V12..V15 + // V4..V7 <<<= ((V4..V7 XOR V8..V11), 12) + VADD V8.S4, V12.S4, V8.S4 + VADD V9.S4, V13.S4, V9.S4 + VADD V10.S4, V14.S4, V10.S4 + VADD V11.S4, V15.S4, V11.S4 + VEOR V8.B16, V4.B16, V16.B16 + VEOR V9.B16, V5.B16, V17.B16 + VEOR V10.B16, V6.B16, V18.B16 + VEOR V11.B16, V7.B16, V19.B16 + VSHL $12, V16.S4, V4.S4 + VSHL $12, V17.S4, V5.S4 + VSHL $12, V18.S4, V6.S4 + VSHL $12, V19.S4, V7.S4 + VSRI $20, V16.S4, V4.S4 + VSRI $20, V17.S4, V5.S4 + VSRI $20, V18.S4, V6.S4 + VSRI $20, V19.S4, V7.S4 + + // V0..V3 += V4..V7 + // V12..V15 <<<= ((V12..V15 XOR V0..V3), 8) + VADD V0.S4, V4.S4, V0.S4 + VADD V1.S4, V5.S4, V1.S4 + VADD V2.S4, V6.S4, V2.S4 + VADD V3.S4, V7.S4, V3.S4 + VEOR V12.B16, V0.B16, V12.B16 + VEOR V13.B16, V1.B16, V13.B16 + VEOR V14.B16, V2.B16, V14.B16 + VEOR V15.B16, V3.B16, V15.B16 + VTBL V31.B16, [V12.B16], V12.B16 + VTBL V31.B16, [V13.B16], V13.B16 + VTBL V31.B16, [V14.B16], V14.B16 + VTBL V31.B16, [V15.B16], V15.B16 + + // V8..V11 += V12..V15 + // V4..V7 <<<= ((V4..V7 XOR V8..V11), 7) + VADD V12.S4, V8.S4, V8.S4 + VADD V13.S4, V9.S4, V9.S4 + VADD V14.S4, V10.S4, V10.S4 + VADD V15.S4, V11.S4, V11.S4 + VEOR V8.B16, V4.B16, V16.B16 + VEOR V9.B16, V5.B16, V17.B16 + VEOR V10.B16, V6.B16, V18.B16 + VEOR V11.B16, V7.B16, V19.B16 + VSHL $7, V16.S4, V4.S4 + VSHL $7, V17.S4, V5.S4 + VSHL $7, V18.S4, V6.S4 + VSHL $7, V19.S4, V7.S4 + VSRI $25, V16.S4, V4.S4 + VSRI $25, V17.S4, V5.S4 + VSRI $25, V18.S4, V6.S4 + VSRI $25, V19.S4, V7.S4 + + // V0..V3 += V5..V7, V4 + // V15,V12-V14 <<<= ((V15,V12-V14 XOR V0..V3), 16) + VADD V0.S4, V5.S4, V0.S4 + VADD V1.S4, V6.S4, V1.S4 + VADD V2.S4, V7.S4, V2.S4 + VADD V3.S4, V4.S4, V3.S4 + VEOR V15.B16, V0.B16, V15.B16 + VEOR V12.B16, V1.B16, V12.B16 + VEOR V13.B16, V2.B16, V13.B16 + VEOR V14.B16, V3.B16, V14.B16 + VREV32 V12.H8, V12.H8 + VREV32 V13.H8, V13.H8 + VREV32 V14.H8, V14.H8 + VREV32 V15.H8, V15.H8 + + // V10 += V15; V5 <<<= ((V10 XOR V5), 12) + // ... + VADD V15.S4, V10.S4, V10.S4 + VADD V12.S4, V11.S4, V11.S4 + VADD V13.S4, V8.S4, V8.S4 + VADD V14.S4, V9.S4, V9.S4 + VEOR V10.B16, V5.B16, V16.B16 + VEOR V11.B16, V6.B16, V17.B16 + VEOR V8.B16, V7.B16, V18.B16 + VEOR V9.B16, V4.B16, V19.B16 + VSHL $12, V16.S4, V5.S4 + VSHL $12, V17.S4, V6.S4 + VSHL $12, V18.S4, V7.S4 + VSHL $12, V19.S4, V4.S4 + VSRI $20, V16.S4, V5.S4 + VSRI $20, V17.S4, V6.S4 + VSRI $20, V18.S4, V7.S4 + VSRI $20, V19.S4, V4.S4 + + // V0 += V5; V15 <<<= ((V0 XOR V15), 8) + // ... + VADD V5.S4, V0.S4, V0.S4 + VADD V6.S4, V1.S4, V1.S4 + VADD V7.S4, V2.S4, V2.S4 + VADD V4.S4, V3.S4, V3.S4 + VEOR V0.B16, V15.B16, V15.B16 + VEOR V1.B16, V12.B16, V12.B16 + VEOR V2.B16, V13.B16, V13.B16 + VEOR V3.B16, V14.B16, V14.B16 + VTBL V31.B16, [V12.B16], V12.B16 + VTBL V31.B16, [V13.B16], V13.B16 + VTBL V31.B16, [V14.B16], V14.B16 + VTBL V31.B16, [V15.B16], V15.B16 + + // V10 += V15; V5 <<<= ((V10 XOR V5), 7) + // ... + VADD V15.S4, V10.S4, V10.S4 + VADD V12.S4, V11.S4, V11.S4 + VADD V13.S4, V8.S4, V8.S4 + VADD V14.S4, V9.S4, V9.S4 + VEOR V10.B16, V5.B16, V16.B16 + VEOR V11.B16, V6.B16, V17.B16 + VEOR V8.B16, V7.B16, V18.B16 + VEOR V9.B16, V4.B16, V19.B16 + VSHL $7, V16.S4, V5.S4 + VSHL $7, V17.S4, V6.S4 + VSHL $7, V18.S4, V7.S4 + VSHL $7, V19.S4, V4.S4 + VSRI $25, V16.S4, V5.S4 + VSRI $25, V17.S4, V6.S4 + VSRI $25, V18.S4, V7.S4 + VSRI $25, V19.S4, V4.S4 + + SUB $1, R21 + CBNZ R21, chacha + + // VLD4R (R10), [V16.S4, V17.S4, V18.S4, V19.S4] + WORD $0x4D60E950 + + // VLD4R 16(R4), [V20.S4, V21.S4, V22.S4, V23.S4] + WORD $0x4DFFE894 + VADD V30.S4, V12.S4, V12.S4 + VADD V16.S4, V0.S4, V0.S4 + VADD V17.S4, V1.S4, V1.S4 + VADD V18.S4, V2.S4, V2.S4 + VADD V19.S4, V3.S4, V3.S4 + // VLD4R 16(R4), [V24.S4, V25.S4, V26.S4, V27.S4] + WORD $0x4DFFE898 + // restore R4 + SUB $32, R4 + + // load counter + nonce + // VLD1R (R7), [V28.S4] + WORD $0x4D40C8FC + // VLD3R (R6), [V29.S4, V30.S4, V31.S4] + WORD $0x4D40E8DD + + VADD V20.S4, V4.S4, V4.S4 + VADD V21.S4, V5.S4, V5.S4 + VADD V22.S4, V6.S4, V6.S4 + VADD V23.S4, V7.S4, V7.S4 + VADD V24.S4, V8.S4, V8.S4 + VADD V25.S4, V9.S4, V9.S4 + VADD V26.S4, V10.S4, V10.S4 + VADD V27.S4, V11.S4, V11.S4 + VADD V28.S4, V12.S4, V12.S4 + VADD V29.S4, V13.S4, V13.S4 + VADD V30.S4, V14.S4, V14.S4 + VADD V31.S4, V15.S4, V15.S4 + + VZIP1 V1.S4, V0.S4, V16.S4 + VZIP2 V1.S4, V0.S4, V17.S4 + VZIP1 V3.S4, V2.S4, V18.S4 + VZIP2 V3.S4, V2.S4, V19.S4 + VZIP1 V5.S4, V4.S4, V20.S4 + VZIP2 V5.S4, V4.S4, V21.S4 + VZIP1 V7.S4, V6.S4, V22.S4 + VZIP2 V7.S4, V6.S4, V23.S4 + VZIP1 V9.S4, V8.S4, V24.S4 + VZIP2 V9.S4, V8.S4, V25.S4 + VZIP1 V11.S4, V10.S4, V26.S4 + VZIP2 V11.S4, V10.S4, V27.S4 + VZIP1 V13.S4, V12.S4, V28.S4 + VZIP2 V13.S4, V12.S4, V29.S4 + VZIP1 V15.S4, V14.S4, V30.S4 + VZIP2 V15.S4, V14.S4, V31.S4 + VZIP1 V18.D2, V16.D2, V0.D2 + VZIP2 V18.D2, V16.D2, V4.D2 + VZIP1 V19.D2, V17.D2, V8.D2 + VZIP2 V19.D2, V17.D2, V12.D2 + VLD1.P 64(R2), [V16.B16, V17.B16, V18.B16, V19.B16] + + VZIP1 V22.D2, V20.D2, V1.D2 + VZIP2 V22.D2, V20.D2, V5.D2 + VZIP1 V23.D2, V21.D2, V9.D2 + VZIP2 V23.D2, V21.D2, V13.D2 + VLD1.P 64(R2), [V20.B16, V21.B16, V22.B16, V23.B16] + VZIP1 V26.D2, V24.D2, V2.D2 + VZIP2 V26.D2, V24.D2, V6.D2 + VZIP1 V27.D2, V25.D2, V10.D2 + VZIP2 V27.D2, V25.D2, V14.D2 + VLD1.P 64(R2), [V24.B16, V25.B16, V26.B16, V27.B16] + VZIP1 V30.D2, V28.D2, V3.D2 + VZIP2 V30.D2, V28.D2, V7.D2 + VZIP1 V31.D2, V29.D2, V11.D2 + VZIP2 V31.D2, V29.D2, V15.D2 + VLD1.P 64(R2), [V28.B16, V29.B16, V30.B16, V31.B16] + VEOR V0.B16, V16.B16, V16.B16 + VEOR V1.B16, V17.B16, V17.B16 + VEOR V2.B16, V18.B16, V18.B16 + VEOR V3.B16, V19.B16, V19.B16 + VST1.P [V16.B16, V17.B16, V18.B16, V19.B16], 64(R1) + VEOR V4.B16, V20.B16, V20.B16 + VEOR V5.B16, V21.B16, V21.B16 + VEOR V6.B16, V22.B16, V22.B16 + VEOR V7.B16, V23.B16, V23.B16 + VST1.P [V20.B16, V21.B16, V22.B16, V23.B16], 64(R1) + VEOR V8.B16, V24.B16, V24.B16 + VEOR V9.B16, V25.B16, V25.B16 + VEOR V10.B16, V26.B16, V26.B16 + VEOR V11.B16, V27.B16, V27.B16 + VST1.P [V24.B16, V25.B16, V26.B16, V27.B16], 64(R1) + VEOR V12.B16, V28.B16, V28.B16 + VEOR V13.B16, V29.B16, V29.B16 + VEOR V14.B16, V30.B16, V30.B16 + VEOR V15.B16, V31.B16, V31.B16 + VST1.P [V28.B16, V29.B16, V30.B16, V31.B16], 64(R1) + + ADD $4, R20 + MOVW R20, (R7) // update counter + + CMP R2, R12 + BGT loop + + RET + + +DATA ·constants+0x00(SB)/4, $0x61707865 +DATA ·constants+0x04(SB)/4, $0x3320646e +DATA ·constants+0x08(SB)/4, $0x79622d32 +DATA ·constants+0x0c(SB)/4, $0x6b206574 +GLOBL ·constants(SB), NOPTR|RODATA, $32 + +DATA ·incRotMatrix+0x00(SB)/4, $0x00000000 +DATA ·incRotMatrix+0x04(SB)/4, $0x00000001 +DATA ·incRotMatrix+0x08(SB)/4, $0x00000002 +DATA ·incRotMatrix+0x0c(SB)/4, $0x00000003 +DATA ·incRotMatrix+0x10(SB)/4, $0x02010003 +DATA ·incRotMatrix+0x14(SB)/4, $0x06050407 +DATA ·incRotMatrix+0x18(SB)/4, $0x0A09080B +DATA ·incRotMatrix+0x1c(SB)/4, $0x0E0D0C0F +GLOBL ·incRotMatrix(SB), NOPTR|RODATA, $32 diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_generic.go b/vendor/golang.org/x/crypto/chacha20/chacha_generic.go new file mode 100644 index 0000000..93eb5ae --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20/chacha_generic.go @@ -0,0 +1,398 @@ +// 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. + +// Package chacha20 implements the ChaCha20 and XChaCha20 encryption algorithms +// as specified in RFC 8439 and draft-irtf-cfrg-xchacha-01. +package chacha20 + +import ( + "crypto/cipher" + "encoding/binary" + "errors" + "math/bits" + + "golang.org/x/crypto/internal/alias" +) + +const ( + // KeySize is the size of the key used by this cipher, in bytes. + KeySize = 32 + + // NonceSize is the size of the nonce used with the standard variant of this + // cipher, in bytes. + // + // Note that this is too short to be safely generated at random if the same + // key is reused more than 2³² times. + NonceSize = 12 + + // NonceSizeX is the size of the nonce used with the XChaCha20 variant of + // this cipher, in bytes. + NonceSizeX = 24 +) + +// Cipher is a stateful instance of ChaCha20 or XChaCha20 using a particular key +// and nonce. A *Cipher implements the cipher.Stream interface. +type Cipher struct { + // The ChaCha20 state is 16 words: 4 constant, 8 of key, 1 of counter + // (incremented after each block), and 3 of nonce. + key [8]uint32 + counter uint32 + nonce [3]uint32 + + // The last len bytes of buf are leftover key stream bytes from the previous + // XORKeyStream invocation. The size of buf depends on how many blocks are + // computed at a time by xorKeyStreamBlocks. + buf [bufSize]byte + len int + + // overflow is set when the counter overflowed, no more blocks can be + // generated, and the next XORKeyStream call should panic. + overflow bool + + // The counter-independent results of the first round are cached after they + // are computed the first time. + precompDone bool + p1, p5, p9, p13 uint32 + p2, p6, p10, p14 uint32 + p3, p7, p11, p15 uint32 +} + +var _ cipher.Stream = (*Cipher)(nil) + +// NewUnauthenticatedCipher creates a new ChaCha20 stream cipher with the given +// 32 bytes key and a 12 or 24 bytes nonce. If a nonce of 24 bytes is provided, +// the XChaCha20 construction will be used. It returns an error if key or nonce +// have any other length. +// +// Note that ChaCha20, like all stream ciphers, is not authenticated and allows +// attackers to silently tamper with the plaintext. For this reason, it is more +// appropriate as a building block than as a standalone encryption mechanism. +// Instead, consider using package golang.org/x/crypto/chacha20poly1305. +func NewUnauthenticatedCipher(key, nonce []byte) (*Cipher, error) { + // This function is split into a wrapper so that the Cipher allocation will + // be inlined, and depending on how the caller uses the return value, won't + // escape to the heap. + c := &Cipher{} + return newUnauthenticatedCipher(c, key, nonce) +} + +func newUnauthenticatedCipher(c *Cipher, key, nonce []byte) (*Cipher, error) { + if len(key) != KeySize { + return nil, errors.New("chacha20: wrong key size") + } + if len(nonce) == NonceSizeX { + // XChaCha20 uses the ChaCha20 core to mix 16 bytes of the nonce into a + // derived key, allowing it to operate on a nonce of 24 bytes. See + // draft-irtf-cfrg-xchacha-01, Section 2.3. + key, _ = HChaCha20(key, nonce[0:16]) + cNonce := make([]byte, NonceSize) + copy(cNonce[4:12], nonce[16:24]) + nonce = cNonce + } else if len(nonce) != NonceSize { + return nil, errors.New("chacha20: wrong nonce size") + } + + key, nonce = key[:KeySize], nonce[:NonceSize] // bounds check elimination hint + c.key = [8]uint32{ + binary.LittleEndian.Uint32(key[0:4]), + binary.LittleEndian.Uint32(key[4:8]), + binary.LittleEndian.Uint32(key[8:12]), + binary.LittleEndian.Uint32(key[12:16]), + binary.LittleEndian.Uint32(key[16:20]), + binary.LittleEndian.Uint32(key[20:24]), + binary.LittleEndian.Uint32(key[24:28]), + binary.LittleEndian.Uint32(key[28:32]), + } + c.nonce = [3]uint32{ + binary.LittleEndian.Uint32(nonce[0:4]), + binary.LittleEndian.Uint32(nonce[4:8]), + binary.LittleEndian.Uint32(nonce[8:12]), + } + return c, nil +} + +// The constant first 4 words of the ChaCha20 state. +const ( + j0 uint32 = 0x61707865 // expa + j1 uint32 = 0x3320646e // nd 3 + j2 uint32 = 0x79622d32 // 2-by + j3 uint32 = 0x6b206574 // te k +) + +const blockSize = 64 + +// quarterRound is the core of ChaCha20. It shuffles the bits of 4 state words. +// It's executed 4 times for each of the 20 ChaCha20 rounds, operating on all 16 +// words each round, in columnar or diagonal groups of 4 at a time. +func quarterRound(a, b, c, d uint32) (uint32, uint32, uint32, uint32) { + a += b + d ^= a + d = bits.RotateLeft32(d, 16) + c += d + b ^= c + b = bits.RotateLeft32(b, 12) + a += b + d ^= a + d = bits.RotateLeft32(d, 8) + c += d + b ^= c + b = bits.RotateLeft32(b, 7) + return a, b, c, d +} + +// SetCounter sets the Cipher counter. The next invocation of XORKeyStream will +// behave as if (64 * counter) bytes had been encrypted so far. +// +// To prevent accidental counter reuse, SetCounter panics if counter is less +// than the current value. +// +// Note that the execution time of XORKeyStream is not independent of the +// counter value. +func (s *Cipher) SetCounter(counter uint32) { + // Internally, s may buffer multiple blocks, which complicates this + // implementation slightly. When checking whether the counter has rolled + // back, we must use both s.counter and s.len to determine how many blocks + // we have already output. + outputCounter := s.counter - uint32(s.len)/blockSize + if s.overflow || counter < outputCounter { + panic("chacha20: SetCounter attempted to rollback counter") + } + + // In the general case, we set the new counter value and reset s.len to 0, + // causing the next call to XORKeyStream to refill the buffer. However, if + // we're advancing within the existing buffer, we can save work by simply + // setting s.len. + if counter < s.counter { + s.len = int(s.counter-counter) * blockSize + } else { + s.counter = counter + s.len = 0 + } +} + +// XORKeyStream XORs each byte in the given slice with a byte from the +// cipher's key stream. Dst and src must overlap entirely or not at all. +// +// If len(dst) < len(src), XORKeyStream will panic. It is acceptable +// to pass a dst bigger than src, and in that case, XORKeyStream will +// only update dst[:len(src)] and will not touch the rest of dst. +// +// Multiple calls to XORKeyStream behave as if the concatenation of +// the src buffers was passed in a single run. That is, Cipher +// maintains state and does not reset at each XORKeyStream call. +func (s *Cipher) XORKeyStream(dst, src []byte) { + if len(src) == 0 { + return + } + if len(dst) < len(src) { + panic("chacha20: output smaller than input") + } + dst = dst[:len(src)] + if alias.InexactOverlap(dst, src) { + panic("chacha20: invalid buffer overlap") + } + + // First, drain any remaining key stream from a previous XORKeyStream. + if s.len != 0 { + keyStream := s.buf[bufSize-s.len:] + if len(src) < len(keyStream) { + keyStream = keyStream[:len(src)] + } + _ = src[len(keyStream)-1] // bounds check elimination hint + for i, b := range keyStream { + dst[i] = src[i] ^ b + } + s.len -= len(keyStream) + dst, src = dst[len(keyStream):], src[len(keyStream):] + } + if len(src) == 0 { + return + } + + // If we'd need to let the counter overflow and keep generating output, + // panic immediately. If instead we'd only reach the last block, remember + // not to generate any more output after the buffer is drained. + numBlocks := (uint64(len(src)) + blockSize - 1) / blockSize + if s.overflow || uint64(s.counter)+numBlocks > 1<<32 { + panic("chacha20: counter overflow") + } else if uint64(s.counter)+numBlocks == 1<<32 { + s.overflow = true + } + + // xorKeyStreamBlocks implementations expect input lengths that are a + // multiple of bufSize. Platform-specific ones process multiple blocks at a + // time, so have bufSizes that are a multiple of blockSize. + + full := len(src) - len(src)%bufSize + if full > 0 { + s.xorKeyStreamBlocks(dst[:full], src[:full]) + } + dst, src = dst[full:], src[full:] + + // If using a multi-block xorKeyStreamBlocks would overflow, use the generic + // one that does one block at a time. + const blocksPerBuf = bufSize / blockSize + if uint64(s.counter)+blocksPerBuf > 1<<32 { + s.buf = [bufSize]byte{} + numBlocks := (len(src) + blockSize - 1) / blockSize + buf := s.buf[bufSize-numBlocks*blockSize:] + copy(buf, src) + s.xorKeyStreamBlocksGeneric(buf, buf) + s.len = len(buf) - copy(dst, buf) + return + } + + // If we have a partial (multi-)block, pad it for xorKeyStreamBlocks, and + // keep the leftover keystream for the next XORKeyStream invocation. + if len(src) > 0 { + s.buf = [bufSize]byte{} + copy(s.buf[:], src) + s.xorKeyStreamBlocks(s.buf[:], s.buf[:]) + s.len = bufSize - copy(dst, s.buf[:]) + } +} + +func (s *Cipher) xorKeyStreamBlocksGeneric(dst, src []byte) { + if len(dst) != len(src) || len(dst)%blockSize != 0 { + panic("chacha20: internal error: wrong dst and/or src length") + } + + // To generate each block of key stream, the initial cipher state + // (represented below) is passed through 20 rounds of shuffling, + // alternatively applying quarterRounds by columns (like 1, 5, 9, 13) + // or by diagonals (like 1, 6, 11, 12). + // + // 0:cccccccc 1:cccccccc 2:cccccccc 3:cccccccc + // 4:kkkkkkkk 5:kkkkkkkk 6:kkkkkkkk 7:kkkkkkkk + // 8:kkkkkkkk 9:kkkkkkkk 10:kkkkkkkk 11:kkkkkkkk + // 12:bbbbbbbb 13:nnnnnnnn 14:nnnnnnnn 15:nnnnnnnn + // + // c=constant k=key b=blockcount n=nonce + var ( + c0, c1, c2, c3 = j0, j1, j2, j3 + c4, c5, c6, c7 = s.key[0], s.key[1], s.key[2], s.key[3] + c8, c9, c10, c11 = s.key[4], s.key[5], s.key[6], s.key[7] + _, c13, c14, c15 = s.counter, s.nonce[0], s.nonce[1], s.nonce[2] + ) + + // Three quarters of the first round don't depend on the counter, so we can + // calculate them here, and reuse them for multiple blocks in the loop, and + // for future XORKeyStream invocations. + if !s.precompDone { + s.p1, s.p5, s.p9, s.p13 = quarterRound(c1, c5, c9, c13) + s.p2, s.p6, s.p10, s.p14 = quarterRound(c2, c6, c10, c14) + s.p3, s.p7, s.p11, s.p15 = quarterRound(c3, c7, c11, c15) + s.precompDone = true + } + + // A condition of len(src) > 0 would be sufficient, but this also + // acts as a bounds check elimination hint. + for len(src) >= 64 && len(dst) >= 64 { + // The remainder of the first column round. + fcr0, fcr4, fcr8, fcr12 := quarterRound(c0, c4, c8, s.counter) + + // The second diagonal round. + x0, x5, x10, x15 := quarterRound(fcr0, s.p5, s.p10, s.p15) + x1, x6, x11, x12 := quarterRound(s.p1, s.p6, s.p11, fcr12) + x2, x7, x8, x13 := quarterRound(s.p2, s.p7, fcr8, s.p13) + x3, x4, x9, x14 := quarterRound(s.p3, fcr4, s.p9, s.p14) + + // The remaining 18 rounds. + for i := 0; i < 9; i++ { + // Column round. + x0, x4, x8, x12 = quarterRound(x0, x4, x8, x12) + x1, x5, x9, x13 = quarterRound(x1, x5, x9, x13) + x2, x6, x10, x14 = quarterRound(x2, x6, x10, x14) + x3, x7, x11, x15 = quarterRound(x3, x7, x11, x15) + + // Diagonal round. + x0, x5, x10, x15 = quarterRound(x0, x5, x10, x15) + x1, x6, x11, x12 = quarterRound(x1, x6, x11, x12) + x2, x7, x8, x13 = quarterRound(x2, x7, x8, x13) + x3, x4, x9, x14 = quarterRound(x3, x4, x9, x14) + } + + // Add back the initial state to generate the key stream, then + // XOR the key stream with the source and write out the result. + addXor(dst[0:4], src[0:4], x0, c0) + addXor(dst[4:8], src[4:8], x1, c1) + addXor(dst[8:12], src[8:12], x2, c2) + addXor(dst[12:16], src[12:16], x3, c3) + addXor(dst[16:20], src[16:20], x4, c4) + addXor(dst[20:24], src[20:24], x5, c5) + addXor(dst[24:28], src[24:28], x6, c6) + addXor(dst[28:32], src[28:32], x7, c7) + addXor(dst[32:36], src[32:36], x8, c8) + addXor(dst[36:40], src[36:40], x9, c9) + addXor(dst[40:44], src[40:44], x10, c10) + addXor(dst[44:48], src[44:48], x11, c11) + addXor(dst[48:52], src[48:52], x12, s.counter) + addXor(dst[52:56], src[52:56], x13, c13) + addXor(dst[56:60], src[56:60], x14, c14) + addXor(dst[60:64], src[60:64], x15, c15) + + s.counter += 1 + + src, dst = src[blockSize:], dst[blockSize:] + } +} + +// HChaCha20 uses the ChaCha20 core to generate a derived key from a 32 bytes +// key and a 16 bytes nonce. It returns an error if key or nonce have any other +// length. It is used as part of the XChaCha20 construction. +func HChaCha20(key, nonce []byte) ([]byte, error) { + // This function is split into a wrapper so that the slice allocation will + // be inlined, and depending on how the caller uses the return value, won't + // escape to the heap. + out := make([]byte, 32) + return hChaCha20(out, key, nonce) +} + +func hChaCha20(out, key, nonce []byte) ([]byte, error) { + if len(key) != KeySize { + return nil, errors.New("chacha20: wrong HChaCha20 key size") + } + if len(nonce) != 16 { + return nil, errors.New("chacha20: wrong HChaCha20 nonce size") + } + + x0, x1, x2, x3 := j0, j1, j2, j3 + x4 := binary.LittleEndian.Uint32(key[0:4]) + x5 := binary.LittleEndian.Uint32(key[4:8]) + x6 := binary.LittleEndian.Uint32(key[8:12]) + x7 := binary.LittleEndian.Uint32(key[12:16]) + x8 := binary.LittleEndian.Uint32(key[16:20]) + x9 := binary.LittleEndian.Uint32(key[20:24]) + x10 := binary.LittleEndian.Uint32(key[24:28]) + x11 := binary.LittleEndian.Uint32(key[28:32]) + x12 := binary.LittleEndian.Uint32(nonce[0:4]) + x13 := binary.LittleEndian.Uint32(nonce[4:8]) + x14 := binary.LittleEndian.Uint32(nonce[8:12]) + x15 := binary.LittleEndian.Uint32(nonce[12:16]) + + for i := 0; i < 10; i++ { + // Diagonal round. + x0, x4, x8, x12 = quarterRound(x0, x4, x8, x12) + x1, x5, x9, x13 = quarterRound(x1, x5, x9, x13) + x2, x6, x10, x14 = quarterRound(x2, x6, x10, x14) + x3, x7, x11, x15 = quarterRound(x3, x7, x11, x15) + + // Column round. + x0, x5, x10, x15 = quarterRound(x0, x5, x10, x15) + x1, x6, x11, x12 = quarterRound(x1, x6, x11, x12) + x2, x7, x8, x13 = quarterRound(x2, x7, x8, x13) + x3, x4, x9, x14 = quarterRound(x3, x4, x9, x14) + } + + _ = out[31] // bounds check elimination hint + binary.LittleEndian.PutUint32(out[0:4], x0) + binary.LittleEndian.PutUint32(out[4:8], x1) + binary.LittleEndian.PutUint32(out[8:12], x2) + binary.LittleEndian.PutUint32(out[12:16], x3) + binary.LittleEndian.PutUint32(out[16:20], x12) + binary.LittleEndian.PutUint32(out[20:24], x13) + binary.LittleEndian.PutUint32(out[24:28], x14) + binary.LittleEndian.PutUint32(out[28:32], x15) + return out, nil +} diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go b/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go new file mode 100644 index 0000000..c709b72 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go @@ -0,0 +1,13 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build (!arm64 && !s390x && !ppc64 && !ppc64le) || !gc || purego + +package chacha20 + +const bufSize = blockSize + +func (s *Cipher) xorKeyStreamBlocks(dst, src []byte) { + s.xorKeyStreamBlocksGeneric(dst, src) +} diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.go b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.go new file mode 100644 index 0000000..bd183d9 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.go @@ -0,0 +1,16 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego && (ppc64 || ppc64le) + +package chacha20 + +const bufSize = 256 + +//go:noescape +func chaCha20_ctr32_vsx(out, inp *byte, len int, key *[8]uint32, counter *uint32) + +func (c *Cipher) xorKeyStreamBlocks(dst, src []byte) { + chaCha20_ctr32_vsx(&dst[0], &src[0], len(src), &c.key, &c.counter) +} diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.s b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.s new file mode 100644 index 0000000..a660b41 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.s @@ -0,0 +1,501 @@ +// Copyright 2019 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. + +// Based on CRYPTOGAMS code with the following comment: +// # ==================================================================== +// # Written by Andy Polyakov for the OpenSSL +// # project. The module is, however, dual licensed under OpenSSL and +// # CRYPTOGAMS licenses depending on where you obtain it. For further +// # details see http://www.openssl.org/~appro/cryptogams/. +// # ==================================================================== + +// Code for the perl script that generates the ppc64 assembler +// can be found in the cryptogams repository at the link below. It is based on +// the original from openssl. + +// https://github.com/dot-asm/cryptogams/commit/a60f5b50ed908e91 + +// The differences in this and the original implementation are +// due to the calling conventions and initialization of constants. + +//go:build gc && !purego && (ppc64 || ppc64le) + +#include "textflag.h" + +#define OUT R3 +#define INP R4 +#define LEN R5 +#define KEY R6 +#define CNT R7 +#define TMP R15 + +#define CONSTBASE R16 +#define BLOCKS R17 + +// for VPERMXOR +#define MASK R18 + +DATA consts<>+0x00(SB)/4, $0x61707865 +DATA consts<>+0x04(SB)/4, $0x3320646e +DATA consts<>+0x08(SB)/4, $0x79622d32 +DATA consts<>+0x0c(SB)/4, $0x6b206574 +DATA consts<>+0x10(SB)/4, $0x00000001 +DATA consts<>+0x14(SB)/4, $0x00000000 +DATA consts<>+0x18(SB)/4, $0x00000000 +DATA consts<>+0x1c(SB)/4, $0x00000000 +DATA consts<>+0x20(SB)/4, $0x00000004 +DATA consts<>+0x24(SB)/4, $0x00000000 +DATA consts<>+0x28(SB)/4, $0x00000000 +DATA consts<>+0x2c(SB)/4, $0x00000000 +DATA consts<>+0x30(SB)/4, $0x0e0f0c0d +DATA consts<>+0x34(SB)/4, $0x0a0b0809 +DATA consts<>+0x38(SB)/4, $0x06070405 +DATA consts<>+0x3c(SB)/4, $0x02030001 +DATA consts<>+0x40(SB)/4, $0x0d0e0f0c +DATA consts<>+0x44(SB)/4, $0x090a0b08 +DATA consts<>+0x48(SB)/4, $0x05060704 +DATA consts<>+0x4c(SB)/4, $0x01020300 +DATA consts<>+0x50(SB)/4, $0x61707865 +DATA consts<>+0x54(SB)/4, $0x61707865 +DATA consts<>+0x58(SB)/4, $0x61707865 +DATA consts<>+0x5c(SB)/4, $0x61707865 +DATA consts<>+0x60(SB)/4, $0x3320646e +DATA consts<>+0x64(SB)/4, $0x3320646e +DATA consts<>+0x68(SB)/4, $0x3320646e +DATA consts<>+0x6c(SB)/4, $0x3320646e +DATA consts<>+0x70(SB)/4, $0x79622d32 +DATA consts<>+0x74(SB)/4, $0x79622d32 +DATA consts<>+0x78(SB)/4, $0x79622d32 +DATA consts<>+0x7c(SB)/4, $0x79622d32 +DATA consts<>+0x80(SB)/4, $0x6b206574 +DATA consts<>+0x84(SB)/4, $0x6b206574 +DATA consts<>+0x88(SB)/4, $0x6b206574 +DATA consts<>+0x8c(SB)/4, $0x6b206574 +DATA consts<>+0x90(SB)/4, $0x00000000 +DATA consts<>+0x94(SB)/4, $0x00000001 +DATA consts<>+0x98(SB)/4, $0x00000002 +DATA consts<>+0x9c(SB)/4, $0x00000003 +DATA consts<>+0xa0(SB)/4, $0x11223300 +DATA consts<>+0xa4(SB)/4, $0x55667744 +DATA consts<>+0xa8(SB)/4, $0x99aabb88 +DATA consts<>+0xac(SB)/4, $0xddeeffcc +DATA consts<>+0xb0(SB)/4, $0x22330011 +DATA consts<>+0xb4(SB)/4, $0x66774455 +DATA consts<>+0xb8(SB)/4, $0xaabb8899 +DATA consts<>+0xbc(SB)/4, $0xeeffccdd +GLOBL consts<>(SB), RODATA, $0xc0 + +#ifdef GOARCH_ppc64 +#define BE_XXBRW_INIT() \ + LVSL (R0)(R0), V24 \ + VSPLTISB $3, V25 \ + VXOR V24, V25, V24 \ + +#define BE_XXBRW(vr) VPERM vr, vr, V24, vr +#else +#define BE_XXBRW_INIT() +#define BE_XXBRW(vr) +#endif + +//func chaCha20_ctr32_vsx(out, inp *byte, len int, key *[8]uint32, counter *uint32) +TEXT ·chaCha20_ctr32_vsx(SB),NOSPLIT,$64-40 + MOVD out+0(FP), OUT + MOVD inp+8(FP), INP + MOVD len+16(FP), LEN + MOVD key+24(FP), KEY + MOVD counter+32(FP), CNT + + // Addressing for constants + MOVD $consts<>+0x00(SB), CONSTBASE + MOVD $16, R8 + MOVD $32, R9 + MOVD $48, R10 + MOVD $64, R11 + SRD $6, LEN, BLOCKS + // for VPERMXOR + MOVD $consts<>+0xa0(SB), MASK + MOVD $16, R20 + // V16 + LXVW4X (CONSTBASE)(R0), VS48 + ADD $80,CONSTBASE + + // Load key into V17,V18 + LXVW4X (KEY)(R0), VS49 + LXVW4X (KEY)(R8), VS50 + + // Load CNT, NONCE into V19 + LXVW4X (CNT)(R0), VS51 + + // Clear V27 + VXOR V27, V27, V27 + + BE_XXBRW_INIT() + + // V28 + LXVW4X (CONSTBASE)(R11), VS60 + + // Load mask constants for VPERMXOR + LXVW4X (MASK)(R0), V20 + LXVW4X (MASK)(R20), V21 + + // splat slot from V19 -> V26 + VSPLTW $0, V19, V26 + + VSLDOI $4, V19, V27, V19 + VSLDOI $12, V27, V19, V19 + + VADDUWM V26, V28, V26 + + MOVD $10, R14 + MOVD R14, CTR + PCALIGN $16 +loop_outer_vsx: + // V0, V1, V2, V3 + LXVW4X (R0)(CONSTBASE), VS32 + LXVW4X (R8)(CONSTBASE), VS33 + LXVW4X (R9)(CONSTBASE), VS34 + LXVW4X (R10)(CONSTBASE), VS35 + + // splat values from V17, V18 into V4-V11 + VSPLTW $0, V17, V4 + VSPLTW $1, V17, V5 + VSPLTW $2, V17, V6 + VSPLTW $3, V17, V7 + VSPLTW $0, V18, V8 + VSPLTW $1, V18, V9 + VSPLTW $2, V18, V10 + VSPLTW $3, V18, V11 + + // VOR + VOR V26, V26, V12 + + // splat values from V19 -> V13, V14, V15 + VSPLTW $1, V19, V13 + VSPLTW $2, V19, V14 + VSPLTW $3, V19, V15 + + // splat const values + VSPLTISW $-16, V27 + VSPLTISW $12, V28 + VSPLTISW $8, V29 + VSPLTISW $7, V30 + PCALIGN $16 +loop_vsx: + VADDUWM V0, V4, V0 + VADDUWM V1, V5, V1 + VADDUWM V2, V6, V2 + VADDUWM V3, V7, V3 + + VPERMXOR V12, V0, V21, V12 + VPERMXOR V13, V1, V21, V13 + VPERMXOR V14, V2, V21, V14 + VPERMXOR V15, V3, V21, V15 + + VADDUWM V8, V12, V8 + VADDUWM V9, V13, V9 + VADDUWM V10, V14, V10 + VADDUWM V11, V15, V11 + + VXOR V4, V8, V4 + VXOR V5, V9, V5 + VXOR V6, V10, V6 + VXOR V7, V11, V7 + + VRLW V4, V28, V4 + VRLW V5, V28, V5 + VRLW V6, V28, V6 + VRLW V7, V28, V7 + + VADDUWM V0, V4, V0 + VADDUWM V1, V5, V1 + VADDUWM V2, V6, V2 + VADDUWM V3, V7, V3 + + VPERMXOR V12, V0, V20, V12 + VPERMXOR V13, V1, V20, V13 + VPERMXOR V14, V2, V20, V14 + VPERMXOR V15, V3, V20, V15 + + VADDUWM V8, V12, V8 + VADDUWM V9, V13, V9 + VADDUWM V10, V14, V10 + VADDUWM V11, V15, V11 + + VXOR V4, V8, V4 + VXOR V5, V9, V5 + VXOR V6, V10, V6 + VXOR V7, V11, V7 + + VRLW V4, V30, V4 + VRLW V5, V30, V5 + VRLW V6, V30, V6 + VRLW V7, V30, V7 + + VADDUWM V0, V5, V0 + VADDUWM V1, V6, V1 + VADDUWM V2, V7, V2 + VADDUWM V3, V4, V3 + + VPERMXOR V15, V0, V21, V15 + VPERMXOR V12, V1, V21, V12 + VPERMXOR V13, V2, V21, V13 + VPERMXOR V14, V3, V21, V14 + + VADDUWM V10, V15, V10 + VADDUWM V11, V12, V11 + VADDUWM V8, V13, V8 + VADDUWM V9, V14, V9 + + VXOR V5, V10, V5 + VXOR V6, V11, V6 + VXOR V7, V8, V7 + VXOR V4, V9, V4 + + VRLW V5, V28, V5 + VRLW V6, V28, V6 + VRLW V7, V28, V7 + VRLW V4, V28, V4 + + VADDUWM V0, V5, V0 + VADDUWM V1, V6, V1 + VADDUWM V2, V7, V2 + VADDUWM V3, V4, V3 + + VPERMXOR V15, V0, V20, V15 + VPERMXOR V12, V1, V20, V12 + VPERMXOR V13, V2, V20, V13 + VPERMXOR V14, V3, V20, V14 + + VADDUWM V10, V15, V10 + VADDUWM V11, V12, V11 + VADDUWM V8, V13, V8 + VADDUWM V9, V14, V9 + + VXOR V5, V10, V5 + VXOR V6, V11, V6 + VXOR V7, V8, V7 + VXOR V4, V9, V4 + + VRLW V5, V30, V5 + VRLW V6, V30, V6 + VRLW V7, V30, V7 + VRLW V4, V30, V4 + BDNZ loop_vsx + + VADDUWM V12, V26, V12 + + VMRGEW V0, V1, V27 + VMRGEW V2, V3, V28 + + VMRGOW V0, V1, V0 + VMRGOW V2, V3, V2 + + VMRGEW V4, V5, V29 + VMRGEW V6, V7, V30 + + XXPERMDI VS32, VS34, $0, VS33 + XXPERMDI VS32, VS34, $3, VS35 + XXPERMDI VS59, VS60, $0, VS32 + XXPERMDI VS59, VS60, $3, VS34 + + VMRGOW V4, V5, V4 + VMRGOW V6, V7, V6 + + VMRGEW V8, V9, V27 + VMRGEW V10, V11, V28 + + XXPERMDI VS36, VS38, $0, VS37 + XXPERMDI VS36, VS38, $3, VS39 + XXPERMDI VS61, VS62, $0, VS36 + XXPERMDI VS61, VS62, $3, VS38 + + VMRGOW V8, V9, V8 + VMRGOW V10, V11, V10 + + VMRGEW V12, V13, V29 + VMRGEW V14, V15, V30 + + XXPERMDI VS40, VS42, $0, VS41 + XXPERMDI VS40, VS42, $3, VS43 + XXPERMDI VS59, VS60, $0, VS40 + XXPERMDI VS59, VS60, $3, VS42 + + VMRGOW V12, V13, V12 + VMRGOW V14, V15, V14 + + VSPLTISW $4, V27 + VADDUWM V26, V27, V26 + + XXPERMDI VS44, VS46, $0, VS45 + XXPERMDI VS44, VS46, $3, VS47 + XXPERMDI VS61, VS62, $0, VS44 + XXPERMDI VS61, VS62, $3, VS46 + + VADDUWM V0, V16, V0 + VADDUWM V4, V17, V4 + VADDUWM V8, V18, V8 + VADDUWM V12, V19, V12 + + BE_XXBRW(V0) + BE_XXBRW(V4) + BE_XXBRW(V8) + BE_XXBRW(V12) + + CMPU LEN, $64 + BLT tail_vsx + + // Bottom of loop + LXVW4X (INP)(R0), VS59 + LXVW4X (INP)(R8), VS60 + LXVW4X (INP)(R9), VS61 + LXVW4X (INP)(R10), VS62 + + VXOR V27, V0, V27 + VXOR V28, V4, V28 + VXOR V29, V8, V29 + VXOR V30, V12, V30 + + STXVW4X VS59, (OUT)(R0) + STXVW4X VS60, (OUT)(R8) + ADD $64, INP + STXVW4X VS61, (OUT)(R9) + ADD $-64, LEN + STXVW4X VS62, (OUT)(R10) + ADD $64, OUT + BEQ done_vsx + + VADDUWM V1, V16, V0 + VADDUWM V5, V17, V4 + VADDUWM V9, V18, V8 + VADDUWM V13, V19, V12 + + BE_XXBRW(V0) + BE_XXBRW(V4) + BE_XXBRW(V8) + BE_XXBRW(V12) + + CMPU LEN, $64 + BLT tail_vsx + + LXVW4X (INP)(R0), VS59 + LXVW4X (INP)(R8), VS60 + LXVW4X (INP)(R9), VS61 + LXVW4X (INP)(R10), VS62 + + VXOR V27, V0, V27 + VXOR V28, V4, V28 + VXOR V29, V8, V29 + VXOR V30, V12, V30 + + STXVW4X VS59, (OUT)(R0) + STXVW4X VS60, (OUT)(R8) + ADD $64, INP + STXVW4X VS61, (OUT)(R9) + ADD $-64, LEN + STXVW4X VS62, (OUT)(V10) + ADD $64, OUT + BEQ done_vsx + + VADDUWM V2, V16, V0 + VADDUWM V6, V17, V4 + VADDUWM V10, V18, V8 + VADDUWM V14, V19, V12 + + BE_XXBRW(V0) + BE_XXBRW(V4) + BE_XXBRW(V8) + BE_XXBRW(V12) + + CMPU LEN, $64 + BLT tail_vsx + + LXVW4X (INP)(R0), VS59 + LXVW4X (INP)(R8), VS60 + LXVW4X (INP)(R9), VS61 + LXVW4X (INP)(R10), VS62 + + VXOR V27, V0, V27 + VXOR V28, V4, V28 + VXOR V29, V8, V29 + VXOR V30, V12, V30 + + STXVW4X VS59, (OUT)(R0) + STXVW4X VS60, (OUT)(R8) + ADD $64, INP + STXVW4X VS61, (OUT)(R9) + ADD $-64, LEN + STXVW4X VS62, (OUT)(R10) + ADD $64, OUT + BEQ done_vsx + + VADDUWM V3, V16, V0 + VADDUWM V7, V17, V4 + VADDUWM V11, V18, V8 + VADDUWM V15, V19, V12 + + BE_XXBRW(V0) + BE_XXBRW(V4) + BE_XXBRW(V8) + BE_XXBRW(V12) + + CMPU LEN, $64 + BLT tail_vsx + + LXVW4X (INP)(R0), VS59 + LXVW4X (INP)(R8), VS60 + LXVW4X (INP)(R9), VS61 + LXVW4X (INP)(R10), VS62 + + VXOR V27, V0, V27 + VXOR V28, V4, V28 + VXOR V29, V8, V29 + VXOR V30, V12, V30 + + STXVW4X VS59, (OUT)(R0) + STXVW4X VS60, (OUT)(R8) + ADD $64, INP + STXVW4X VS61, (OUT)(R9) + ADD $-64, LEN + STXVW4X VS62, (OUT)(R10) + ADD $64, OUT + + MOVD $10, R14 + MOVD R14, CTR + BNE loop_outer_vsx + +done_vsx: + // Increment counter by number of 64 byte blocks + MOVWZ (CNT), R14 + ADD BLOCKS, R14 + MOVWZ R14, (CNT) + RET + +tail_vsx: + ADD $32, R1, R11 + MOVD LEN, CTR + + // Save values on stack to copy from + STXVW4X VS32, (R11)(R0) + STXVW4X VS36, (R11)(R8) + STXVW4X VS40, (R11)(R9) + STXVW4X VS44, (R11)(R10) + ADD $-1, R11, R12 + ADD $-1, INP + ADD $-1, OUT + PCALIGN $16 +looptail_vsx: + // Copying the result to OUT + // in bytes. + MOVBZU 1(R12), KEY + MOVBZU 1(INP), TMP + XOR KEY, TMP, KEY + MOVBU KEY, 1(OUT) + BDNZ looptail_vsx + + // Clear the stack values + STXVW4X VS48, (R11)(R0) + STXVW4X VS48, (R11)(R8) + STXVW4X VS48, (R11)(R9) + STXVW4X VS48, (R11)(R10) + BR done_vsx diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_s390x.go b/vendor/golang.org/x/crypto/chacha20/chacha_s390x.go new file mode 100644 index 0000000..683ccfd --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20/chacha_s390x.go @@ -0,0 +1,27 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego + +package chacha20 + +import "golang.org/x/sys/cpu" + +var haveAsm = cpu.S390X.HasVX + +const bufSize = 256 + +// xorKeyStreamVX is an assembly implementation of XORKeyStream. It must only +// be called when the vector facility is available. Implementation in asm_s390x.s. +// +//go:noescape +func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32) + +func (c *Cipher) xorKeyStreamBlocks(dst, src []byte) { + if cpu.S390X.HasVX { + xorKeyStreamVX(dst, src, &c.key, &c.nonce, &c.counter) + } else { + c.xorKeyStreamBlocksGeneric(dst, src) + } +} diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_s390x.s b/vendor/golang.org/x/crypto/chacha20/chacha_s390x.s new file mode 100644 index 0000000..1eda91a --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20/chacha_s390x.s @@ -0,0 +1,224 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego + +#include "go_asm.h" +#include "textflag.h" + +// This is an implementation of the ChaCha20 encryption algorithm as +// specified in RFC 7539. It uses vector instructions to compute +// 4 keystream blocks in parallel (256 bytes) which are then XORed +// with the bytes in the input slice. + +GLOBL ·constants<>(SB), RODATA|NOPTR, $32 +// BSWAP: swap bytes in each 4-byte element +DATA ·constants<>+0x00(SB)/4, $0x03020100 +DATA ·constants<>+0x04(SB)/4, $0x07060504 +DATA ·constants<>+0x08(SB)/4, $0x0b0a0908 +DATA ·constants<>+0x0c(SB)/4, $0x0f0e0d0c +// J0: [j0, j1, j2, j3] +DATA ·constants<>+0x10(SB)/4, $0x61707865 +DATA ·constants<>+0x14(SB)/4, $0x3320646e +DATA ·constants<>+0x18(SB)/4, $0x79622d32 +DATA ·constants<>+0x1c(SB)/4, $0x6b206574 + +#define BSWAP V5 +#define J0 V6 +#define KEY0 V7 +#define KEY1 V8 +#define NONCE V9 +#define CTR V10 +#define M0 V11 +#define M1 V12 +#define M2 V13 +#define M3 V14 +#define INC V15 +#define X0 V16 +#define X1 V17 +#define X2 V18 +#define X3 V19 +#define X4 V20 +#define X5 V21 +#define X6 V22 +#define X7 V23 +#define X8 V24 +#define X9 V25 +#define X10 V26 +#define X11 V27 +#define X12 V28 +#define X13 V29 +#define X14 V30 +#define X15 V31 + +#define NUM_ROUNDS 20 + +#define ROUND4(a0, a1, a2, a3, b0, b1, b2, b3, c0, c1, c2, c3, d0, d1, d2, d3) \ + VAF a1, a0, a0 \ + VAF b1, b0, b0 \ + VAF c1, c0, c0 \ + VAF d1, d0, d0 \ + VX a0, a2, a2 \ + VX b0, b2, b2 \ + VX c0, c2, c2 \ + VX d0, d2, d2 \ + VERLLF $16, a2, a2 \ + VERLLF $16, b2, b2 \ + VERLLF $16, c2, c2 \ + VERLLF $16, d2, d2 \ + VAF a2, a3, a3 \ + VAF b2, b3, b3 \ + VAF c2, c3, c3 \ + VAF d2, d3, d3 \ + VX a3, a1, a1 \ + VX b3, b1, b1 \ + VX c3, c1, c1 \ + VX d3, d1, d1 \ + VERLLF $12, a1, a1 \ + VERLLF $12, b1, b1 \ + VERLLF $12, c1, c1 \ + VERLLF $12, d1, d1 \ + VAF a1, a0, a0 \ + VAF b1, b0, b0 \ + VAF c1, c0, c0 \ + VAF d1, d0, d0 \ + VX a0, a2, a2 \ + VX b0, b2, b2 \ + VX c0, c2, c2 \ + VX d0, d2, d2 \ + VERLLF $8, a2, a2 \ + VERLLF $8, b2, b2 \ + VERLLF $8, c2, c2 \ + VERLLF $8, d2, d2 \ + VAF a2, a3, a3 \ + VAF b2, b3, b3 \ + VAF c2, c3, c3 \ + VAF d2, d3, d3 \ + VX a3, a1, a1 \ + VX b3, b1, b1 \ + VX c3, c1, c1 \ + VX d3, d1, d1 \ + VERLLF $7, a1, a1 \ + VERLLF $7, b1, b1 \ + VERLLF $7, c1, c1 \ + VERLLF $7, d1, d1 + +#define PERMUTE(mask, v0, v1, v2, v3) \ + VPERM v0, v0, mask, v0 \ + VPERM v1, v1, mask, v1 \ + VPERM v2, v2, mask, v2 \ + VPERM v3, v3, mask, v3 + +#define ADDV(x, v0, v1, v2, v3) \ + VAF x, v0, v0 \ + VAF x, v1, v1 \ + VAF x, v2, v2 \ + VAF x, v3, v3 + +#define XORV(off, dst, src, v0, v1, v2, v3) \ + VLM off(src), M0, M3 \ + PERMUTE(BSWAP, v0, v1, v2, v3) \ + VX v0, M0, M0 \ + VX v1, M1, M1 \ + VX v2, M2, M2 \ + VX v3, M3, M3 \ + VSTM M0, M3, off(dst) + +#define SHUFFLE(a, b, c, d, t, u, v, w) \ + VMRHF a, c, t \ // t = {a[0], c[0], a[1], c[1]} + VMRHF b, d, u \ // u = {b[0], d[0], b[1], d[1]} + VMRLF a, c, v \ // v = {a[2], c[2], a[3], c[3]} + VMRLF b, d, w \ // w = {b[2], d[2], b[3], d[3]} + VMRHF t, u, a \ // a = {a[0], b[0], c[0], d[0]} + VMRLF t, u, b \ // b = {a[1], b[1], c[1], d[1]} + VMRHF v, w, c \ // c = {a[2], b[2], c[2], d[2]} + VMRLF v, w, d // d = {a[3], b[3], c[3], d[3]} + +// func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32) +TEXT ·xorKeyStreamVX(SB), NOSPLIT, $0 + MOVD $·constants<>(SB), R1 + MOVD dst+0(FP), R2 // R2=&dst[0] + LMG src+24(FP), R3, R4 // R3=&src[0] R4=len(src) + MOVD key+48(FP), R5 // R5=key + MOVD nonce+56(FP), R6 // R6=nonce + MOVD counter+64(FP), R7 // R7=counter + + // load BSWAP and J0 + VLM (R1), BSWAP, J0 + + // setup + MOVD $95, R0 + VLM (R5), KEY0, KEY1 + VLL R0, (R6), NONCE + VZERO M0 + VLEIB $7, $32, M0 + VSRLB M0, NONCE, NONCE + + // initialize counter values + VLREPF (R7), CTR + VZERO INC + VLEIF $1, $1, INC + VLEIF $2, $2, INC + VLEIF $3, $3, INC + VAF INC, CTR, CTR + VREPIF $4, INC + +chacha: + VREPF $0, J0, X0 + VREPF $1, J0, X1 + VREPF $2, J0, X2 + VREPF $3, J0, X3 + VREPF $0, KEY0, X4 + VREPF $1, KEY0, X5 + VREPF $2, KEY0, X6 + VREPF $3, KEY0, X7 + VREPF $0, KEY1, X8 + VREPF $1, KEY1, X9 + VREPF $2, KEY1, X10 + VREPF $3, KEY1, X11 + VLR CTR, X12 + VREPF $1, NONCE, X13 + VREPF $2, NONCE, X14 + VREPF $3, NONCE, X15 + + MOVD $(NUM_ROUNDS/2), R1 + +loop: + ROUND4(X0, X4, X12, X8, X1, X5, X13, X9, X2, X6, X14, X10, X3, X7, X15, X11) + ROUND4(X0, X5, X15, X10, X1, X6, X12, X11, X2, X7, X13, X8, X3, X4, X14, X9) + + ADD $-1, R1 + BNE loop + + // decrement length + ADD $-256, R4 + + // rearrange vectors + SHUFFLE(X0, X1, X2, X3, M0, M1, M2, M3) + ADDV(J0, X0, X1, X2, X3) + SHUFFLE(X4, X5, X6, X7, M0, M1, M2, M3) + ADDV(KEY0, X4, X5, X6, X7) + SHUFFLE(X8, X9, X10, X11, M0, M1, M2, M3) + ADDV(KEY1, X8, X9, X10, X11) + VAF CTR, X12, X12 + SHUFFLE(X12, X13, X14, X15, M0, M1, M2, M3) + ADDV(NONCE, X12, X13, X14, X15) + + // increment counters + VAF INC, CTR, CTR + + // xor keystream with plaintext + XORV(0*64, R2, R3, X0, X4, X8, X12) + XORV(1*64, R2, R3, X1, X5, X9, X13) + XORV(2*64, R2, R3, X2, X6, X10, X14) + XORV(3*64, R2, R3, X3, X7, X11, X15) + + // increment pointers + MOVD $256(R2), R2 + MOVD $256(R3), R3 + + CMPBNE R4, $0, chacha + + VSTEF $0, CTR, (R7) + RET diff --git a/vendor/golang.org/x/crypto/chacha20/xor.go b/vendor/golang.org/x/crypto/chacha20/xor.go new file mode 100644 index 0000000..c2d0485 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20/xor.go @@ -0,0 +1,42 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found src the LICENSE file. + +package chacha20 + +import "runtime" + +// Platforms that have fast unaligned 32-bit little endian accesses. +const unaligned = runtime.GOARCH == "386" || + runtime.GOARCH == "amd64" || + runtime.GOARCH == "arm64" || + runtime.GOARCH == "ppc64le" || + runtime.GOARCH == "s390x" + +// addXor reads a little endian uint32 from src, XORs it with (a + b) and +// places the result in little endian byte order in dst. +func addXor(dst, src []byte, a, b uint32) { + _, _ = src[3], dst[3] // bounds check elimination hint + if unaligned { + // The compiler should optimize this code into + // 32-bit unaligned little endian loads and stores. + // TODO: delete once the compiler does a reliably + // good job with the generic code below. + // See issue #25111 for more details. + v := uint32(src[0]) + v |= uint32(src[1]) << 8 + v |= uint32(src[2]) << 16 + v |= uint32(src[3]) << 24 + v ^= a + b + dst[0] = byte(v) + dst[1] = byte(v >> 8) + dst[2] = byte(v >> 16) + dst[3] = byte(v >> 24) + } else { + a += b + dst[0] = src[0] ^ byte(a) + dst[1] = src[1] ^ byte(a>>8) + dst[2] = src[2] ^ byte(a>>16) + dst[3] = src[3] ^ byte(a>>24) + } +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go new file mode 100644 index 0000000..8cf5d81 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go @@ -0,0 +1,98 @@ +// 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. + +// Package chacha20poly1305 implements the ChaCha20-Poly1305 AEAD and its +// extended nonce variant XChaCha20-Poly1305, as specified in RFC 8439 and +// draft-irtf-cfrg-xchacha-01. +package chacha20poly1305 + +import ( + "crypto/cipher" + "errors" +) + +const ( + // KeySize is the size of the key used by this AEAD, in bytes. + KeySize = 32 + + // NonceSize is the size of the nonce used with the standard variant of this + // AEAD, in bytes. + // + // Note that this is too short to be safely generated at random if the same + // key is reused more than 2³² times. + NonceSize = 12 + + // NonceSizeX is the size of the nonce used with the XChaCha20-Poly1305 + // variant of this AEAD, in bytes. + NonceSizeX = 24 + + // Overhead is the size of the Poly1305 authentication tag, and the + // difference between a ciphertext length and its plaintext. + Overhead = 16 +) + +type chacha20poly1305 struct { + key [KeySize]byte +} + +// New returns a ChaCha20-Poly1305 AEAD that uses the given 256-bit key. +func New(key []byte) (cipher.AEAD, error) { + if len(key) != KeySize { + return nil, errors.New("chacha20poly1305: bad key length") + } + ret := new(chacha20poly1305) + copy(ret.key[:], key) + return ret, nil +} + +func (c *chacha20poly1305) NonceSize() int { + return NonceSize +} + +func (c *chacha20poly1305) Overhead() int { + return Overhead +} + +func (c *chacha20poly1305) Seal(dst, nonce, plaintext, additionalData []byte) []byte { + if len(nonce) != NonceSize { + panic("chacha20poly1305: bad nonce length passed to Seal") + } + + if uint64(len(plaintext)) > (1<<38)-64 { + panic("chacha20poly1305: plaintext too large") + } + + return c.seal(dst, nonce, plaintext, additionalData) +} + +var errOpen = errors.New("chacha20poly1305: message authentication failed") + +func (c *chacha20poly1305) Open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { + if len(nonce) != NonceSize { + panic("chacha20poly1305: bad nonce length passed to Open") + } + if len(ciphertext) < 16 { + return nil, errOpen + } + if uint64(len(ciphertext)) > (1<<38)-48 { + panic("chacha20poly1305: ciphertext too large") + } + + return c.open(dst, nonce, ciphertext, additionalData) +} + +// sliceForAppend takes a slice and a requested number of bytes. It returns a +// slice with the contents of the given slice followed by that many bytes and a +// second slice that aliases into it and contains only the extra bytes. If the +// original slice has sufficient capacity then no allocation is performed. +func sliceForAppend(in []byte, n int) (head, tail []byte) { + if total := len(in) + n; cap(in) >= total { + head = in[:total] + } else { + head = make([]byte, total) + copy(head, in) + } + tail = head[len(in):] + return +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go new file mode 100644 index 0000000..50695a1 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go @@ -0,0 +1,86 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego + +package chacha20poly1305 + +import ( + "encoding/binary" + + "golang.org/x/crypto/internal/alias" + "golang.org/x/sys/cpu" +) + +//go:noescape +func chacha20Poly1305Open(dst []byte, key []uint32, src, ad []byte) bool + +//go:noescape +func chacha20Poly1305Seal(dst []byte, key []uint32, src, ad []byte) + +var ( + useAVX2 = cpu.X86.HasAVX2 && cpu.X86.HasBMI2 +) + +// setupState writes a ChaCha20 input matrix to state. See +// https://tools.ietf.org/html/rfc7539#section-2.3. +func setupState(state *[16]uint32, key *[32]byte, nonce []byte) { + state[0] = 0x61707865 + state[1] = 0x3320646e + state[2] = 0x79622d32 + state[3] = 0x6b206574 + + state[4] = binary.LittleEndian.Uint32(key[0:4]) + state[5] = binary.LittleEndian.Uint32(key[4:8]) + state[6] = binary.LittleEndian.Uint32(key[8:12]) + state[7] = binary.LittleEndian.Uint32(key[12:16]) + state[8] = binary.LittleEndian.Uint32(key[16:20]) + state[9] = binary.LittleEndian.Uint32(key[20:24]) + state[10] = binary.LittleEndian.Uint32(key[24:28]) + state[11] = binary.LittleEndian.Uint32(key[28:32]) + + state[12] = 0 + state[13] = binary.LittleEndian.Uint32(nonce[0:4]) + state[14] = binary.LittleEndian.Uint32(nonce[4:8]) + state[15] = binary.LittleEndian.Uint32(nonce[8:12]) +} + +func (c *chacha20poly1305) seal(dst, nonce, plaintext, additionalData []byte) []byte { + if !cpu.X86.HasSSSE3 { + return c.sealGeneric(dst, nonce, plaintext, additionalData) + } + + var state [16]uint32 + setupState(&state, &c.key, nonce) + + ret, out := sliceForAppend(dst, len(plaintext)+16) + if alias.InexactOverlap(out, plaintext) { + panic("chacha20poly1305: invalid buffer overlap") + } + chacha20Poly1305Seal(out[:], state[:], plaintext, additionalData) + return ret +} + +func (c *chacha20poly1305) open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { + if !cpu.X86.HasSSSE3 { + return c.openGeneric(dst, nonce, ciphertext, additionalData) + } + + var state [16]uint32 + setupState(&state, &c.key, nonce) + + ciphertext = ciphertext[:len(ciphertext)-16] + ret, out := sliceForAppend(dst, len(ciphertext)) + if alias.InexactOverlap(out, ciphertext) { + panic("chacha20poly1305: invalid buffer overlap") + } + if !chacha20Poly1305Open(out, state[:], ciphertext, additionalData) { + for i := range out { + out[i] = 0 + } + return nil, errOpen + } + + return ret, nil +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s new file mode 100644 index 0000000..fd5ee84 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s @@ -0,0 +1,9762 @@ +// Code generated by command: go run chacha20poly1305_amd64_asm.go -out ../chacha20poly1305_amd64.s -pkg chacha20poly1305. DO NOT EDIT. + +//go:build gc && !purego + +#include "textflag.h" + +// func polyHashADInternal<>() +TEXT polyHashADInternal<>(SB), NOSPLIT, $0 + // Hack: Must declare #define macros inside of a function due to Avo constraints + // ROL rotates the uint32s in register R left by N bits, using temporary T. + #define ROL(N, R, T) \ + MOVO R, T; \ + PSLLL $(N), T; \ + PSRLL $(32-(N)), R; \ + PXOR T, R + + // ROL8 rotates the uint32s in register R left by 8, using temporary T if needed. + #ifdef GOAMD64_v2 + #define ROL8(R, T) PSHUFB ·rol8<>(SB), R + #else + #define ROL8(R, T) ROL(8, R, T) + #endif + + // ROL16 rotates the uint32s in register R left by 16, using temporary T if needed. + #ifdef GOAMD64_v2 + #define ROL16(R, T) PSHUFB ·rol16<>(SB), R + #else + #define ROL16(R, T) ROL(16, R, T) + #endif + XORQ R10, R10 + XORQ R11, R11 + XORQ R12, R12 + CMPQ R9, $0x0d + JNE hashADLoop + MOVQ (CX), R10 + MOVQ 5(CX), R11 + SHRQ $0x18, R11 + MOVQ $0x00000001, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + RET + +hashADLoop: + // Hash in 16 byte chunks + CMPQ R9, $0x10 + JB hashADTail + ADDQ (CX), R10 + ADCQ 8(CX), R11 + ADCQ $0x01, R12 + LEAQ 16(CX), CX + SUBQ $0x10, R9 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + JMP hashADLoop + +hashADTail: + CMPQ R9, $0x00 + JE hashADDone + + // Hash last < 16 byte tail + XORQ R13, R13 + XORQ R14, R14 + XORQ R15, R15 + ADDQ R9, CX + +hashADTailLoop: + SHLQ $0x08, R13, R14 + SHLQ $0x08, R13 + MOVB -1(CX), R15 + XORQ R15, R13 + DECQ CX + DECQ R9 + JNE hashADTailLoop + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + +hashADDone: + RET + +// func chacha20Poly1305Open(dst []byte, key []uint32, src []byte, ad []byte) bool +// Requires: AVX, AVX2, BMI2, CMOV, SSE2 +TEXT ·chacha20Poly1305Open(SB), $288-97 + // For aligned stack access + MOVQ SP, BP + ADDQ $0x20, BP + ANDQ $-32, BP + MOVQ dst_base+0(FP), DI + MOVQ key_base+24(FP), R8 + MOVQ src_base+48(FP), SI + MOVQ src_len+56(FP), BX + MOVQ ad_base+72(FP), CX + + // Check for AVX2 support + CMPB ·useAVX2+0(SB), $0x01 + JE chacha20Poly1305Open_AVX2 + + // Special optimization, for very short buffers + CMPQ BX, $0x80 + JBE openSSE128 + + // For long buffers, prepare the poly key first + MOVOU ·chacha20Constants<>+0(SB), X0 + MOVOU 16(R8), X3 + MOVOU 32(R8), X6 + MOVOU 48(R8), X9 + MOVO X9, X13 + + // Store state on stack for future use + MOVO X3, 32(BP) + MOVO X6, 48(BP) + MOVO X9, 128(BP) + MOVQ $0x0000000a, R9 + +openSSEPreparePolyKey: + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + DECQ R9 + JNE openSSEPreparePolyKey + + // A0|B0 hold the Poly1305 32-byte key, C0,D0 can be discarded + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL 32(BP), X3 + + // Clamp and store the key + PAND ·polyClampMask<>+0(SB), X0 + MOVO X0, (BP) + MOVO X3, 16(BP) + + // Hash AAD + MOVQ ad_len+80(FP), R9 + CALL polyHashADInternal<>(SB) + +openSSEMainLoop: + CMPQ BX, $0x00000100 + JB openSSEMainLoopDone + + // Load state, increment counter blocks + MOVO ·chacha20Constants<>+0(SB), X0 + MOVO 32(BP), X3 + MOVO 48(BP), X6 + MOVO 128(BP), X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X1, X2 + MOVO X4, X5 + MOVO X7, X8 + MOVO X10, X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X2, X12 + MOVO X5, X13 + MOVO X8, X14 + MOVO X11, X15 + PADDL ·sseIncMask<>+0(SB), X15 + + // Store counters + MOVO X9, 80(BP) + MOVO X10, 96(BP) + MOVO X11, 112(BP) + MOVO X15, 128(BP) + + // There are 10 ChaCha20 iterations of 2QR each, so for 6 iterations we hash + // 2 blocks, and for the remaining 4 only 1 block - for a total of 16 + MOVQ $0x00000004, CX + MOVQ SI, R9 + +openSSEInternalLoop: + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + ADDQ (R9), R10 + ADCQ 8(R9), R11 + ADCQ $0x01, R12 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x0c + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + LEAQ 16(R9), R9 + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x04 + DECQ CX + JGE openSSEInternalLoop + ADDQ (R9), R10 + ADCQ 8(R9), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(R9), R9 + CMPQ CX, $-6 + JG openSSEInternalLoop + + // Add in the state + PADDD ·chacha20Constants<>+0(SB), X0 + PADDD ·chacha20Constants<>+0(SB), X1 + PADDD ·chacha20Constants<>+0(SB), X2 + PADDD ·chacha20Constants<>+0(SB), X12 + PADDD 32(BP), X3 + PADDD 32(BP), X4 + PADDD 32(BP), X5 + PADDD 32(BP), X13 + PADDD 48(BP), X6 + PADDD 48(BP), X7 + PADDD 48(BP), X8 + PADDD 48(BP), X14 + PADDD 80(BP), X9 + PADDD 96(BP), X10 + PADDD 112(BP), X11 + PADDD 128(BP), X15 + + // Load - xor - store + MOVO X15, 64(BP) + MOVOU (SI), X15 + PXOR X15, X0 + MOVOU X0, (DI) + MOVOU 16(SI), X15 + PXOR X15, X3 + MOVOU X3, 16(DI) + MOVOU 32(SI), X15 + PXOR X15, X6 + MOVOU X6, 32(DI) + MOVOU 48(SI), X15 + PXOR X15, X9 + MOVOU X9, 48(DI) + MOVOU 64(SI), X9 + PXOR X9, X1 + MOVOU X1, 64(DI) + MOVOU 80(SI), X9 + PXOR X9, X4 + MOVOU X4, 80(DI) + MOVOU 96(SI), X9 + PXOR X9, X7 + MOVOU X7, 96(DI) + MOVOU 112(SI), X9 + PXOR X9, X10 + MOVOU X10, 112(DI) + MOVOU 128(SI), X9 + PXOR X9, X2 + MOVOU X2, 128(DI) + MOVOU 144(SI), X9 + PXOR X9, X5 + MOVOU X5, 144(DI) + MOVOU 160(SI), X9 + PXOR X9, X8 + MOVOU X8, 160(DI) + MOVOU 176(SI), X9 + PXOR X9, X11 + MOVOU X11, 176(DI) + MOVOU 192(SI), X9 + PXOR X9, X12 + MOVOU X12, 192(DI) + MOVOU 208(SI), X9 + PXOR X9, X13 + MOVOU X13, 208(DI) + MOVOU 224(SI), X9 + PXOR X9, X14 + MOVOU X14, 224(DI) + MOVOU 240(SI), X9 + PXOR 64(BP), X9 + MOVOU X9, 240(DI) + LEAQ 256(SI), SI + LEAQ 256(DI), DI + SUBQ $0x00000100, BX + JMP openSSEMainLoop + +openSSEMainLoopDone: + // Handle the various tail sizes efficiently + TESTQ BX, BX + JE openSSEFinalize + CMPQ BX, $0x40 + JBE openSSETail64 + CMPQ BX, $0x80 + JBE openSSETail128 + CMPQ BX, $0xc0 + JBE openSSETail192 + JMP openSSETail256 + +openSSEFinalize: + // Hash in the PT, AAD lengths + ADDQ ad_len+80(FP), R10 + ADCQ src_len+56(FP), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + + // Final reduce + MOVQ R10, R13 + MOVQ R11, R14 + MOVQ R12, R15 + SUBQ $-5, R10 + SBBQ $-1, R11 + SBBQ $0x03, R12 + CMOVQCS R13, R10 + CMOVQCS R14, R11 + CMOVQCS R15, R12 + + // Add in the "s" part of the key + ADDQ 16(BP), R10 + ADCQ 24(BP), R11 + + // Finally, constant time compare to the tag at the end of the message + XORQ AX, AX + MOVQ $0x00000001, DX + XORQ (SI), R10 + XORQ 8(SI), R11 + ORQ R11, R10 + CMOVQEQ DX, AX + + // Return true iff tags are equal + MOVB AX, ret+96(FP) + RET + +openSSE128: + MOVOU ·chacha20Constants<>+0(SB), X0 + MOVOU 16(R8), X3 + MOVOU 32(R8), X6 + MOVOU 48(R8), X9 + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X1, X2 + MOVO X4, X5 + MOVO X7, X8 + MOVO X10, X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X3, X13 + MOVO X6, X14 + MOVO X10, X15 + MOVQ $0x0000000a, R9 + +openSSE128InnerCipherLoop: + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + DECQ R9 + JNE openSSE128InnerCipherLoop + + // A0|B0 hold the Poly1305 32-byte key, C0,D0 can be discarded + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL ·chacha20Constants<>+0(SB), X1 + PADDL ·chacha20Constants<>+0(SB), X2 + PADDL X13, X3 + PADDL X13, X4 + PADDL X13, X5 + PADDL X14, X7 + PADDL X14, X8 + PADDL X15, X10 + PADDL ·sseIncMask<>+0(SB), X15 + PADDL X15, X11 + + // Clamp and store the key + PAND ·polyClampMask<>+0(SB), X0 + MOVOU X0, (BP) + MOVOU X3, 16(BP) + + // Hash + MOVQ ad_len+80(FP), R9 + CALL polyHashADInternal<>(SB) + +openSSE128Open: + CMPQ BX, $0x10 + JB openSSETail16 + SUBQ $0x10, BX + + // Load for hashing + ADDQ (SI), R10 + ADCQ 8(SI), R11 + ADCQ $0x01, R12 + + // Load for decryption + MOVOU (SI), X12 + PXOR X12, X1 + MOVOU X1, (DI) + LEAQ 16(SI), SI + LEAQ 16(DI), DI + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + + // Shift the stream "left" + MOVO X4, X1 + MOVO X7, X4 + MOVO X10, X7 + MOVO X2, X10 + MOVO X5, X2 + MOVO X8, X5 + MOVO X11, X8 + JMP openSSE128Open + +openSSETail16: + TESTQ BX, BX + JE openSSEFinalize + + // We can safely load the CT from the end, because it is padded with the MAC + MOVQ BX, R9 + SHLQ $0x04, R9 + LEAQ ·andMask<>+0(SB), R13 + MOVOU (SI), X12 + ADDQ BX, SI + PAND -16(R13)(R9*1), X12 + MOVO X12, 64(BP) + MOVQ X12, R13 + MOVQ 72(BP), R14 + PXOR X1, X12 + + // We can only store one byte at a time, since plaintext can be shorter than 16 bytes +openSSETail16Store: + MOVQ X12, R8 + MOVB R8, (DI) + PSRLDQ $0x01, X12 + INCQ DI + DECQ BX + JNE openSSETail16Store + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + JMP openSSEFinalize + +openSSETail64: + MOVO ·chacha20Constants<>+0(SB), X0 + MOVO 32(BP), X3 + MOVO 48(BP), X6 + MOVO 128(BP), X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X9, 80(BP) + XORQ R9, R9 + MOVQ BX, CX + CMPQ CX, $0x10 + JB openSSETail64LoopB + +openSSETail64LoopA: + ADDQ (SI)(R9*1), R10 + ADCQ 8(SI)(R9*1), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + SUBQ $0x10, CX + +openSSETail64LoopB: + ADDQ $0x10, R9 + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + CMPQ CX, $0x10 + JAE openSSETail64LoopA + CMPQ R9, $0xa0 + JNE openSSETail64LoopB + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL 32(BP), X3 + PADDL 48(BP), X6 + PADDL 80(BP), X9 + +openSSETail64DecLoop: + CMPQ BX, $0x10 + JB openSSETail64DecLoopDone + SUBQ $0x10, BX + MOVOU (SI), X12 + PXOR X12, X0 + MOVOU X0, (DI) + LEAQ 16(SI), SI + LEAQ 16(DI), DI + MOVO X3, X0 + MOVO X6, X3 + MOVO X9, X6 + JMP openSSETail64DecLoop + +openSSETail64DecLoopDone: + MOVO X0, X1 + JMP openSSETail16 + +openSSETail128: + MOVO ·chacha20Constants<>+0(SB), X1 + MOVO 32(BP), X4 + MOVO 48(BP), X7 + MOVO 128(BP), X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X10, 80(BP) + MOVO X1, X0 + MOVO X4, X3 + MOVO X7, X6 + MOVO X10, X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X9, 96(BP) + XORQ R9, R9 + MOVQ BX, CX + ANDQ $-16, CX + +openSSETail128LoopA: + ADDQ (SI)(R9*1), R10 + ADCQ 8(SI)(R9*1), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + +openSSETail128LoopB: + ADDQ $0x10, R9 + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + CMPQ R9, CX + JB openSSETail128LoopA + CMPQ R9, $0xa0 + JNE openSSETail128LoopB + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL ·chacha20Constants<>+0(SB), X1 + PADDL 32(BP), X3 + PADDL 32(BP), X4 + PADDL 48(BP), X6 + PADDL 48(BP), X7 + PADDL 96(BP), X9 + PADDL 80(BP), X10 + MOVOU (SI), X12 + MOVOU 16(SI), X13 + MOVOU 32(SI), X14 + MOVOU 48(SI), X15 + PXOR X12, X1 + PXOR X13, X4 + PXOR X14, X7 + PXOR X15, X10 + MOVOU X1, (DI) + MOVOU X4, 16(DI) + MOVOU X7, 32(DI) + MOVOU X10, 48(DI) + SUBQ $0x40, BX + LEAQ 64(SI), SI + LEAQ 64(DI), DI + JMP openSSETail64DecLoop + +openSSETail192: + MOVO ·chacha20Constants<>+0(SB), X2 + MOVO 32(BP), X5 + MOVO 48(BP), X8 + MOVO 128(BP), X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X11, 80(BP) + MOVO X2, X1 + MOVO X5, X4 + MOVO X8, X7 + MOVO X11, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X10, 96(BP) + MOVO X1, X0 + MOVO X4, X3 + MOVO X7, X6 + MOVO X10, X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X9, 112(BP) + MOVQ BX, CX + MOVQ $0x000000a0, R9 + CMPQ CX, $0xa0 + CMOVQGT R9, CX + ANDQ $-16, CX + XORQ R9, R9 + +openSSLTail192LoopA: + ADDQ (SI)(R9*1), R10 + ADCQ 8(SI)(R9*1), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + +openSSLTail192LoopB: + ADDQ $0x10, R9 + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + CMPQ R9, CX + JB openSSLTail192LoopA + CMPQ R9, $0xa0 + JNE openSSLTail192LoopB + CMPQ BX, $0xb0 + JB openSSLTail192Store + ADDQ 160(SI), R10 + ADCQ 168(SI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + CMPQ BX, $0xc0 + JB openSSLTail192Store + ADDQ 176(SI), R10 + ADCQ 184(SI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + +openSSLTail192Store: + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL ·chacha20Constants<>+0(SB), X1 + PADDL ·chacha20Constants<>+0(SB), X2 + PADDL 32(BP), X3 + PADDL 32(BP), X4 + PADDL 32(BP), X5 + PADDL 48(BP), X6 + PADDL 48(BP), X7 + PADDL 48(BP), X8 + PADDL 112(BP), X9 + PADDL 96(BP), X10 + PADDL 80(BP), X11 + MOVOU (SI), X12 + MOVOU 16(SI), X13 + MOVOU 32(SI), X14 + MOVOU 48(SI), X15 + PXOR X12, X2 + PXOR X13, X5 + PXOR X14, X8 + PXOR X15, X11 + MOVOU X2, (DI) + MOVOU X5, 16(DI) + MOVOU X8, 32(DI) + MOVOU X11, 48(DI) + MOVOU 64(SI), X12 + MOVOU 80(SI), X13 + MOVOU 96(SI), X14 + MOVOU 112(SI), X15 + PXOR X12, X1 + PXOR X13, X4 + PXOR X14, X7 + PXOR X15, X10 + MOVOU X1, 64(DI) + MOVOU X4, 80(DI) + MOVOU X7, 96(DI) + MOVOU X10, 112(DI) + SUBQ $0x80, BX + LEAQ 128(SI), SI + LEAQ 128(DI), DI + JMP openSSETail64DecLoop + +openSSETail256: + MOVO ·chacha20Constants<>+0(SB), X0 + MOVO 32(BP), X3 + MOVO 48(BP), X6 + MOVO 128(BP), X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X1, X2 + MOVO X4, X5 + MOVO X7, X8 + MOVO X10, X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X2, X12 + MOVO X5, X13 + MOVO X8, X14 + MOVO X11, X15 + PADDL ·sseIncMask<>+0(SB), X15 + + // Store counters + MOVO X9, 80(BP) + MOVO X10, 96(BP) + MOVO X11, 112(BP) + MOVO X15, 128(BP) + XORQ R9, R9 + +openSSETail256Loop: + ADDQ (SI)(R9*1), R10 + ADCQ 8(SI)(R9*1), R11 + ADCQ $0x01, R12 + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x0c + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x04 + ADDQ $0x10, R9 + CMPQ R9, $0xa0 + JB openSSETail256Loop + MOVQ BX, CX + ANDQ $-16, CX + +openSSETail256HashLoop: + ADDQ (SI)(R9*1), R10 + ADCQ 8(SI)(R9*1), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + ADDQ $0x10, R9 + CMPQ R9, CX + JB openSSETail256HashLoop + + // Add in the state + PADDD ·chacha20Constants<>+0(SB), X0 + PADDD ·chacha20Constants<>+0(SB), X1 + PADDD ·chacha20Constants<>+0(SB), X2 + PADDD ·chacha20Constants<>+0(SB), X12 + PADDD 32(BP), X3 + PADDD 32(BP), X4 + PADDD 32(BP), X5 + PADDD 32(BP), X13 + PADDD 48(BP), X6 + PADDD 48(BP), X7 + PADDD 48(BP), X8 + PADDD 48(BP), X14 + PADDD 80(BP), X9 + PADDD 96(BP), X10 + PADDD 112(BP), X11 + PADDD 128(BP), X15 + MOVO X15, 64(BP) + + // Load - xor - store + MOVOU (SI), X15 + PXOR X15, X0 + MOVOU 16(SI), X15 + PXOR X15, X3 + MOVOU 32(SI), X15 + PXOR X15, X6 + MOVOU 48(SI), X15 + PXOR X15, X9 + MOVOU X0, (DI) + MOVOU X3, 16(DI) + MOVOU X6, 32(DI) + MOVOU X9, 48(DI) + MOVOU 64(SI), X0 + MOVOU 80(SI), X3 + MOVOU 96(SI), X6 + MOVOU 112(SI), X9 + PXOR X0, X1 + PXOR X3, X4 + PXOR X6, X7 + PXOR X9, X10 + MOVOU X1, 64(DI) + MOVOU X4, 80(DI) + MOVOU X7, 96(DI) + MOVOU X10, 112(DI) + MOVOU 128(SI), X0 + MOVOU 144(SI), X3 + MOVOU 160(SI), X6 + MOVOU 176(SI), X9 + PXOR X0, X2 + PXOR X3, X5 + PXOR X6, X8 + PXOR X9, X11 + MOVOU X2, 128(DI) + MOVOU X5, 144(DI) + MOVOU X8, 160(DI) + MOVOU X11, 176(DI) + LEAQ 192(SI), SI + LEAQ 192(DI), DI + SUBQ $0xc0, BX + MOVO X12, X0 + MOVO X13, X3 + MOVO X14, X6 + MOVO 64(BP), X9 + JMP openSSETail64DecLoop + +chacha20Poly1305Open_AVX2: + VZEROUPPER + VMOVDQU ·chacha20Constants<>+0(SB), Y0 + BYTE $0xc4 + BYTE $0x42 + BYTE $0x7d + BYTE $0x5a + BYTE $0x70 + BYTE $0x10 + BYTE $0xc4 + BYTE $0x42 + BYTE $0x7d + BYTE $0x5a + BYTE $0x60 + BYTE $0x20 + BYTE $0xc4 + BYTE $0xc2 + BYTE $0x7d + BYTE $0x5a + BYTE $0x60 + BYTE $0x30 + VPADDD ·avx2InitMask<>+0(SB), Y4, Y4 + + // Special optimization, for very short buffers + CMPQ BX, $0xc0 + JBE openAVX2192 + CMPQ BX, $0x00000140 + JBE openAVX2320 + + // For the general key prepare the key first - as a byproduct we have 64 bytes of cipher stream + VMOVDQA Y14, 32(BP) + VMOVDQA Y12, 64(BP) + VMOVDQA Y4, 192(BP) + MOVQ $0x0000000a, R9 + +openAVX2PreparePolyKey: + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x04, Y4, Y4, Y4 + DECQ R9 + JNE openAVX2PreparePolyKey + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD 32(BP), Y14, Y14 + VPADDD 64(BP), Y12, Y12 + VPADDD 192(BP), Y4, Y4 + VPERM2I128 $0x02, Y0, Y14, Y3 + + // Clamp and store poly key + VPAND ·polyClampMask<>+0(SB), Y3, Y3 + VMOVDQA Y3, (BP) + + // Stream for the first 64 bytes + VPERM2I128 $0x13, Y0, Y14, Y0 + VPERM2I128 $0x13, Y12, Y4, Y14 + + // Hash AD + first 64 bytes + MOVQ ad_len+80(FP), R9 + CALL polyHashADInternal<>(SB) + XORQ CX, CX + +openAVX2InitialHash64: + ADDQ (SI)(CX*1), R10 + ADCQ 8(SI)(CX*1), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + ADDQ $0x10, CX + CMPQ CX, $0x40 + JNE openAVX2InitialHash64 + + // Decrypt the first 64 bytes + VPXOR (SI), Y0, Y0 + VPXOR 32(SI), Y14, Y14 + VMOVDQU Y0, (DI) + VMOVDQU Y14, 32(DI) + LEAQ 64(SI), SI + LEAQ 64(DI), DI + SUBQ $0x40, BX + +openAVX2MainLoop: + CMPQ BX, $0x00000200 + JB openAVX2MainLoopDone + + // Load state, increment counter blocks, store the incremented counters + VMOVDQU ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA Y0, Y7 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA Y14, Y11 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA Y12, Y15 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VPADDD ·avx2IncMask<>+0(SB), Y2, Y3 + VMOVDQA Y4, 96(BP) + VMOVDQA Y1, 128(BP) + VMOVDQA Y2, 160(BP) + VMOVDQA Y3, 192(BP) + XORQ CX, CX + +openAVX2InternalLoop: + ADDQ (SI)(CX*1), R10 + ADCQ 8(SI)(CX*1), R11 + ADCQ $0x01, R12 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + ADDQ 16(SI)(CX*1), R10 + ADCQ 24(SI)(CX*1), R11 + ADCQ $0x01, R12 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x04, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPALIGNR $0x0c, Y3, Y3, Y3 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + ADDQ 32(SI)(CX*1), R10 + ADCQ 40(SI)(CX*1), R11 + ADCQ $0x01, R12 + LEAQ 48(CX), CX + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x0c, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + VPALIGNR $0x04, Y3, Y3, Y3 + CMPQ CX, $0x000001e0 + JNE openAVX2InternalLoop + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD ·chacha20Constants<>+0(SB), Y6, Y6 + VPADDD ·chacha20Constants<>+0(SB), Y7, Y7 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 32(BP), Y10, Y10 + VPADDD 32(BP), Y11, Y11 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD 64(BP), Y8, Y8 + VPADDD 64(BP), Y15, Y15 + VPADDD 96(BP), Y4, Y4 + VPADDD 128(BP), Y1, Y1 + VPADDD 160(BP), Y2, Y2 + VPADDD 192(BP), Y3, Y3 + VMOVDQA Y15, 224(BP) + + // We only hashed 480 of the 512 bytes available - hash the remaining 32 here + ADDQ 480(SI), R10 + ADCQ 488(SI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPERM2I128 $0x02, Y0, Y14, Y15 + VPERM2I128 $0x13, Y0, Y14, Y14 + VPERM2I128 $0x02, Y12, Y4, Y0 + VPERM2I128 $0x13, Y12, Y4, Y12 + VPXOR (SI), Y15, Y15 + VPXOR 32(SI), Y0, Y0 + VPXOR 64(SI), Y14, Y14 + VPXOR 96(SI), Y12, Y12 + VMOVDQU Y15, (DI) + VMOVDQU Y0, 32(DI) + VMOVDQU Y14, 64(DI) + VMOVDQU Y12, 96(DI) + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + VPXOR 128(SI), Y0, Y0 + VPXOR 160(SI), Y14, Y14 + VPXOR 192(SI), Y12, Y12 + VPXOR 224(SI), Y4, Y4 + VMOVDQU Y0, 128(DI) + VMOVDQU Y14, 160(DI) + VMOVDQU Y12, 192(DI) + VMOVDQU Y4, 224(DI) + + // and here + ADDQ 496(SI), R10 + ADCQ 504(SI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPERM2I128 $0x02, Y6, Y10, Y0 + VPERM2I128 $0x02, Y8, Y2, Y14 + VPERM2I128 $0x13, Y6, Y10, Y12 + VPERM2I128 $0x13, Y8, Y2, Y4 + VPXOR 256(SI), Y0, Y0 + VPXOR 288(SI), Y14, Y14 + VPXOR 320(SI), Y12, Y12 + VPXOR 352(SI), Y4, Y4 + VMOVDQU Y0, 256(DI) + VMOVDQU Y14, 288(DI) + VMOVDQU Y12, 320(DI) + VMOVDQU Y4, 352(DI) + VPERM2I128 $0x02, Y7, Y11, Y0 + VPERM2I128 $0x02, 224(BP), Y3, Y14 + VPERM2I128 $0x13, Y7, Y11, Y12 + VPERM2I128 $0x13, 224(BP), Y3, Y4 + VPXOR 384(SI), Y0, Y0 + VPXOR 416(SI), Y14, Y14 + VPXOR 448(SI), Y12, Y12 + VPXOR 480(SI), Y4, Y4 + VMOVDQU Y0, 384(DI) + VMOVDQU Y14, 416(DI) + VMOVDQU Y12, 448(DI) + VMOVDQU Y4, 480(DI) + LEAQ 512(SI), SI + LEAQ 512(DI), DI + SUBQ $0x00000200, BX + JMP openAVX2MainLoop + +openAVX2MainLoopDone: + // Handle the various tail sizes efficiently + TESTQ BX, BX + JE openSSEFinalize + CMPQ BX, $0x80 + JBE openAVX2Tail128 + CMPQ BX, $0x00000100 + JBE openAVX2Tail256 + CMPQ BX, $0x00000180 + JBE openAVX2Tail384 + JMP openAVX2Tail512 + +openAVX2192: + VMOVDQA Y0, Y5 + VMOVDQA Y14, Y9 + VMOVDQA Y12, Y13 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VMOVDQA Y0, Y6 + VMOVDQA Y14, Y10 + VMOVDQA Y12, Y8 + VMOVDQA Y4, Y2 + VMOVDQA Y1, Y15 + MOVQ $0x0000000a, R9 + +openAVX2192InnerCipherLoop: + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + DECQ R9 + JNE openAVX2192InnerCipherLoop + VPADDD Y6, Y0, Y0 + VPADDD Y6, Y5, Y5 + VPADDD Y10, Y14, Y14 + VPADDD Y10, Y9, Y9 + VPADDD Y8, Y12, Y12 + VPADDD Y8, Y13, Y13 + VPADDD Y2, Y4, Y4 + VPADDD Y15, Y1, Y1 + VPERM2I128 $0x02, Y0, Y14, Y3 + + // Clamp and store poly key + VPAND ·polyClampMask<>+0(SB), Y3, Y3 + VMOVDQA Y3, (BP) + + // Stream for up to 192 bytes + VPERM2I128 $0x13, Y0, Y14, Y0 + VPERM2I128 $0x13, Y12, Y4, Y14 + VPERM2I128 $0x02, Y5, Y9, Y12 + VPERM2I128 $0x02, Y13, Y1, Y4 + VPERM2I128 $0x13, Y5, Y9, Y5 + VPERM2I128 $0x13, Y13, Y1, Y9 + +openAVX2ShortOpen: + // Hash + MOVQ ad_len+80(FP), R9 + CALL polyHashADInternal<>(SB) + +openAVX2ShortOpenLoop: + CMPQ BX, $0x20 + JB openAVX2ShortTail32 + SUBQ $0x20, BX + + // Load for hashing + ADDQ (SI), R10 + ADCQ 8(SI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + ADDQ 16(SI), R10 + ADCQ 24(SI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + + // Load for decryption + VPXOR (SI), Y0, Y0 + VMOVDQU Y0, (DI) + LEAQ 32(SI), SI + LEAQ 32(DI), DI + + // Shift stream left + VMOVDQA Y14, Y0 + VMOVDQA Y12, Y14 + VMOVDQA Y4, Y12 + VMOVDQA Y5, Y4 + VMOVDQA Y9, Y5 + VMOVDQA Y13, Y9 + VMOVDQA Y1, Y13 + VMOVDQA Y6, Y1 + VMOVDQA Y10, Y6 + JMP openAVX2ShortOpenLoop + +openAVX2ShortTail32: + CMPQ BX, $0x10 + VMOVDQA X0, X1 + JB openAVX2ShortDone + SUBQ $0x10, BX + + // Load for hashing + ADDQ (SI), R10 + ADCQ 8(SI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + + // Load for decryption + VPXOR (SI), X0, X12 + VMOVDQU X12, (DI) + LEAQ 16(SI), SI + LEAQ 16(DI), DI + VPERM2I128 $0x11, Y0, Y0, Y0 + VMOVDQA X0, X1 + +openAVX2ShortDone: + VZEROUPPER + JMP openSSETail16 + +openAVX2320: + VMOVDQA Y0, Y5 + VMOVDQA Y14, Y9 + VMOVDQA Y12, Y13 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VMOVDQA Y0, Y6 + VMOVDQA Y14, Y10 + VMOVDQA Y12, Y8 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VMOVDQA Y14, Y7 + VMOVDQA Y12, Y11 + VMOVDQA Y4, Y15 + MOVQ $0x0000000a, R9 + +openAVX2320InnerCipherLoop: + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + DECQ R9 + JNE openAVX2320InnerCipherLoop + VMOVDQA ·chacha20Constants<>+0(SB), Y3 + VPADDD Y3, Y0, Y0 + VPADDD Y3, Y5, Y5 + VPADDD Y3, Y6, Y6 + VPADDD Y7, Y14, Y14 + VPADDD Y7, Y9, Y9 + VPADDD Y7, Y10, Y10 + VPADDD Y11, Y12, Y12 + VPADDD Y11, Y13, Y13 + VPADDD Y11, Y8, Y8 + VMOVDQA ·avx2IncMask<>+0(SB), Y3 + VPADDD Y15, Y4, Y4 + VPADDD Y3, Y15, Y15 + VPADDD Y15, Y1, Y1 + VPADDD Y3, Y15, Y15 + VPADDD Y15, Y2, Y2 + + // Clamp and store poly key + VPERM2I128 $0x02, Y0, Y14, Y3 + VPAND ·polyClampMask<>+0(SB), Y3, Y3 + VMOVDQA Y3, (BP) + + // Stream for up to 320 bytes + VPERM2I128 $0x13, Y0, Y14, Y0 + VPERM2I128 $0x13, Y12, Y4, Y14 + VPERM2I128 $0x02, Y5, Y9, Y12 + VPERM2I128 $0x02, Y13, Y1, Y4 + VPERM2I128 $0x13, Y5, Y9, Y5 + VPERM2I128 $0x13, Y13, Y1, Y9 + VPERM2I128 $0x02, Y6, Y10, Y13 + VPERM2I128 $0x02, Y8, Y2, Y1 + VPERM2I128 $0x13, Y6, Y10, Y6 + VPERM2I128 $0x13, Y8, Y2, Y10 + JMP openAVX2ShortOpen + +openAVX2Tail128: + // Need to decrypt up to 128 bytes - prepare two blocks + VMOVDQA ·chacha20Constants<>+0(SB), Y5 + VMOVDQA 32(BP), Y9 + VMOVDQA 64(BP), Y13 + VMOVDQA 192(BP), Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y1 + VMOVDQA Y1, Y4 + XORQ R9, R9 + MOVQ BX, CX + ANDQ $-16, CX + TESTQ CX, CX + JE openAVX2Tail128LoopB + +openAVX2Tail128LoopA: + ADDQ (SI)(R9*1), R10 + ADCQ 8(SI)(R9*1), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + +openAVX2Tail128LoopB: + ADDQ $0x10, R9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x04, Y1, Y1, Y1 + CMPQ R9, CX + JB openAVX2Tail128LoopA + CMPQ R9, $0xa0 + JNE openAVX2Tail128LoopB + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD 32(BP), Y9, Y9 + VPADDD 64(BP), Y13, Y13 + VPADDD Y4, Y1, Y1 + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + +openAVX2TailLoop: + CMPQ BX, $0x20 + JB openAVX2Tail + SUBQ $0x20, BX + + // Load for decryption + VPXOR (SI), Y0, Y0 + VMOVDQU Y0, (DI) + LEAQ 32(SI), SI + LEAQ 32(DI), DI + VMOVDQA Y14, Y0 + VMOVDQA Y12, Y14 + VMOVDQA Y4, Y12 + JMP openAVX2TailLoop + +openAVX2Tail: + CMPQ BX, $0x10 + VMOVDQA X0, X1 + JB openAVX2TailDone + SUBQ $0x10, BX + + // Load for decryption + VPXOR (SI), X0, X12 + VMOVDQU X12, (DI) + LEAQ 16(SI), SI + LEAQ 16(DI), DI + VPERM2I128 $0x11, Y0, Y0, Y0 + VMOVDQA X0, X1 + +openAVX2TailDone: + VZEROUPPER + JMP openSSETail16 + +openAVX2Tail256: + VMOVDQA ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VMOVDQA Y4, Y7 + VMOVDQA Y1, Y11 + + // Compute the number of iterations that will hash data + MOVQ BX, 224(BP) + MOVQ BX, CX + SUBQ $0x80, CX + SHRQ $0x04, CX + MOVQ $0x0000000a, R9 + CMPQ CX, $0x0a + CMOVQGT R9, CX + MOVQ SI, BX + XORQ R9, R9 + +openAVX2Tail256LoopA: + ADDQ (BX), R10 + ADCQ 8(BX), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(BX), BX + +openAVX2Tail256LoopB: + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + INCQ R9 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + CMPQ R9, CX + JB openAVX2Tail256LoopA + CMPQ R9, $0x0a + JNE openAVX2Tail256LoopB + MOVQ BX, R9 + SUBQ SI, BX + MOVQ BX, CX + MOVQ 224(BP), BX + +openAVX2Tail256Hash: + ADDQ $0x10, CX + CMPQ CX, BX + JGT openAVX2Tail256HashEnd + ADDQ (R9), R10 + ADCQ 8(R9), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(R9), R9 + JMP openAVX2Tail256Hash + +openAVX2Tail256HashEnd: + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD Y7, Y4, Y4 + VPADDD Y11, Y1, Y1 + VPERM2I128 $0x02, Y0, Y14, Y6 + VPERM2I128 $0x02, Y12, Y4, Y10 + VPERM2I128 $0x13, Y0, Y14, Y8 + VPERM2I128 $0x13, Y12, Y4, Y2 + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + VPXOR (SI), Y6, Y6 + VPXOR 32(SI), Y10, Y10 + VPXOR 64(SI), Y8, Y8 + VPXOR 96(SI), Y2, Y2 + VMOVDQU Y6, (DI) + VMOVDQU Y10, 32(DI) + VMOVDQU Y8, 64(DI) + VMOVDQU Y2, 96(DI) + LEAQ 128(SI), SI + LEAQ 128(DI), DI + SUBQ $0x80, BX + JMP openAVX2TailLoop + +openAVX2Tail384: + // Need to decrypt up to 384 bytes - prepare six blocks + VMOVDQA ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VMOVDQA Y4, 96(BP) + VMOVDQA Y1, 128(BP) + VMOVDQA Y2, 160(BP) + + // Compute the number of iterations that will hash two blocks of data + MOVQ BX, 224(BP) + MOVQ BX, CX + SUBQ $0x00000100, CX + SHRQ $0x04, CX + ADDQ $0x06, CX + MOVQ $0x0000000a, R9 + CMPQ CX, $0x0a + CMOVQGT R9, CX + MOVQ SI, BX + XORQ R9, R9 + +openAVX2Tail384LoopB: + ADDQ (BX), R10 + ADCQ 8(BX), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(BX), BX + +openAVX2Tail384LoopA: + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + ADDQ (BX), R10 + ADCQ 8(BX), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(BX), BX + INCQ R9 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + CMPQ R9, CX + JB openAVX2Tail384LoopB + CMPQ R9, $0x0a + JNE openAVX2Tail384LoopA + MOVQ BX, R9 + SUBQ SI, BX + MOVQ BX, CX + MOVQ 224(BP), BX + +openAVX2Tail384Hash: + ADDQ $0x10, CX + CMPQ CX, BX + JGT openAVX2Tail384HashEnd + ADDQ (R9), R10 + ADCQ 8(R9), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(R9), R9 + JMP openAVX2Tail384Hash + +openAVX2Tail384HashEnd: + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD ·chacha20Constants<>+0(SB), Y6, Y6 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 32(BP), Y10, Y10 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD 64(BP), Y8, Y8 + VPADDD 96(BP), Y4, Y4 + VPADDD 128(BP), Y1, Y1 + VPADDD 160(BP), Y2, Y2 + VPERM2I128 $0x02, Y0, Y14, Y3 + VPERM2I128 $0x02, Y12, Y4, Y7 + VPERM2I128 $0x13, Y0, Y14, Y11 + VPERM2I128 $0x13, Y12, Y4, Y15 + VPXOR (SI), Y3, Y3 + VPXOR 32(SI), Y7, Y7 + VPXOR 64(SI), Y11, Y11 + VPXOR 96(SI), Y15, Y15 + VMOVDQU Y3, (DI) + VMOVDQU Y7, 32(DI) + VMOVDQU Y11, 64(DI) + VMOVDQU Y15, 96(DI) + VPERM2I128 $0x02, Y5, Y9, Y3 + VPERM2I128 $0x02, Y13, Y1, Y7 + VPERM2I128 $0x13, Y5, Y9, Y11 + VPERM2I128 $0x13, Y13, Y1, Y15 + VPXOR 128(SI), Y3, Y3 + VPXOR 160(SI), Y7, Y7 + VPXOR 192(SI), Y11, Y11 + VPXOR 224(SI), Y15, Y15 + VMOVDQU Y3, 128(DI) + VMOVDQU Y7, 160(DI) + VMOVDQU Y11, 192(DI) + VMOVDQU Y15, 224(DI) + VPERM2I128 $0x02, Y6, Y10, Y0 + VPERM2I128 $0x02, Y8, Y2, Y14 + VPERM2I128 $0x13, Y6, Y10, Y12 + VPERM2I128 $0x13, Y8, Y2, Y4 + LEAQ 256(SI), SI + LEAQ 256(DI), DI + SUBQ $0x00000100, BX + JMP openAVX2TailLoop + +openAVX2Tail512: + VMOVDQU ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA Y0, Y7 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA Y14, Y11 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA Y12, Y15 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VPADDD ·avx2IncMask<>+0(SB), Y2, Y3 + VMOVDQA Y4, 96(BP) + VMOVDQA Y1, 128(BP) + VMOVDQA Y2, 160(BP) + VMOVDQA Y3, 192(BP) + XORQ CX, CX + MOVQ SI, R9 + +openAVX2Tail512LoopB: + ADDQ (R9), R10 + ADCQ 8(R9), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(R9), R9 + +openAVX2Tail512LoopA: + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + ADDQ (R9), R10 + ADCQ 8(R9), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x04, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPALIGNR $0x0c, Y3, Y3, Y3 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + ADDQ 16(R9), R10 + ADCQ 24(R9), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(R9), R9 + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x0c, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + VPALIGNR $0x04, Y3, Y3, Y3 + INCQ CX + CMPQ CX, $0x04 + JLT openAVX2Tail512LoopB + CMPQ CX, $0x0a + JNE openAVX2Tail512LoopA + MOVQ BX, CX + SUBQ $0x00000180, CX + ANDQ $-16, CX + +openAVX2Tail512HashLoop: + TESTQ CX, CX + JE openAVX2Tail512HashEnd + ADDQ (R9), R10 + ADCQ 8(R9), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(R9), R9 + SUBQ $0x10, CX + JMP openAVX2Tail512HashLoop + +openAVX2Tail512HashEnd: + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD ·chacha20Constants<>+0(SB), Y6, Y6 + VPADDD ·chacha20Constants<>+0(SB), Y7, Y7 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 32(BP), Y10, Y10 + VPADDD 32(BP), Y11, Y11 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD 64(BP), Y8, Y8 + VPADDD 64(BP), Y15, Y15 + VPADDD 96(BP), Y4, Y4 + VPADDD 128(BP), Y1, Y1 + VPADDD 160(BP), Y2, Y2 + VPADDD 192(BP), Y3, Y3 + VMOVDQA Y15, 224(BP) + VPERM2I128 $0x02, Y0, Y14, Y15 + VPERM2I128 $0x13, Y0, Y14, Y14 + VPERM2I128 $0x02, Y12, Y4, Y0 + VPERM2I128 $0x13, Y12, Y4, Y12 + VPXOR (SI), Y15, Y15 + VPXOR 32(SI), Y0, Y0 + VPXOR 64(SI), Y14, Y14 + VPXOR 96(SI), Y12, Y12 + VMOVDQU Y15, (DI) + VMOVDQU Y0, 32(DI) + VMOVDQU Y14, 64(DI) + VMOVDQU Y12, 96(DI) + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + VPXOR 128(SI), Y0, Y0 + VPXOR 160(SI), Y14, Y14 + VPXOR 192(SI), Y12, Y12 + VPXOR 224(SI), Y4, Y4 + VMOVDQU Y0, 128(DI) + VMOVDQU Y14, 160(DI) + VMOVDQU Y12, 192(DI) + VMOVDQU Y4, 224(DI) + VPERM2I128 $0x02, Y6, Y10, Y0 + VPERM2I128 $0x02, Y8, Y2, Y14 + VPERM2I128 $0x13, Y6, Y10, Y12 + VPERM2I128 $0x13, Y8, Y2, Y4 + VPXOR 256(SI), Y0, Y0 + VPXOR 288(SI), Y14, Y14 + VPXOR 320(SI), Y12, Y12 + VPXOR 352(SI), Y4, Y4 + VMOVDQU Y0, 256(DI) + VMOVDQU Y14, 288(DI) + VMOVDQU Y12, 320(DI) + VMOVDQU Y4, 352(DI) + VPERM2I128 $0x02, Y7, Y11, Y0 + VPERM2I128 $0x02, 224(BP), Y3, Y14 + VPERM2I128 $0x13, Y7, Y11, Y12 + VPERM2I128 $0x13, 224(BP), Y3, Y4 + LEAQ 384(SI), SI + LEAQ 384(DI), DI + SUBQ $0x00000180, BX + JMP openAVX2TailLoop + +DATA ·chacha20Constants<>+0(SB)/4, $0x61707865 +DATA ·chacha20Constants<>+4(SB)/4, $0x3320646e +DATA ·chacha20Constants<>+8(SB)/4, $0x79622d32 +DATA ·chacha20Constants<>+12(SB)/4, $0x6b206574 +DATA ·chacha20Constants<>+16(SB)/4, $0x61707865 +DATA ·chacha20Constants<>+20(SB)/4, $0x3320646e +DATA ·chacha20Constants<>+24(SB)/4, $0x79622d32 +DATA ·chacha20Constants<>+28(SB)/4, $0x6b206574 +GLOBL ·chacha20Constants<>(SB), RODATA|NOPTR, $32 + +DATA ·polyClampMask<>+0(SB)/8, $0x0ffffffc0fffffff +DATA ·polyClampMask<>+8(SB)/8, $0x0ffffffc0ffffffc +DATA ·polyClampMask<>+16(SB)/8, $0xffffffffffffffff +DATA ·polyClampMask<>+24(SB)/8, $0xffffffffffffffff +GLOBL ·polyClampMask<>(SB), RODATA|NOPTR, $32 + +DATA ·sseIncMask<>+0(SB)/8, $0x0000000000000001 +DATA ·sseIncMask<>+8(SB)/8, $0x0000000000000000 +GLOBL ·sseIncMask<>(SB), RODATA|NOPTR, $16 + +DATA ·andMask<>+0(SB)/8, $0x00000000000000ff +DATA ·andMask<>+8(SB)/8, $0x0000000000000000 +DATA ·andMask<>+16(SB)/8, $0x000000000000ffff +DATA ·andMask<>+24(SB)/8, $0x0000000000000000 +DATA ·andMask<>+32(SB)/8, $0x0000000000ffffff +DATA ·andMask<>+40(SB)/8, $0x0000000000000000 +DATA ·andMask<>+48(SB)/8, $0x00000000ffffffff +DATA ·andMask<>+56(SB)/8, $0x0000000000000000 +DATA ·andMask<>+64(SB)/8, $0x000000ffffffffff +DATA ·andMask<>+72(SB)/8, $0x0000000000000000 +DATA ·andMask<>+80(SB)/8, $0x0000ffffffffffff +DATA ·andMask<>+88(SB)/8, $0x0000000000000000 +DATA ·andMask<>+96(SB)/8, $0x00ffffffffffffff +DATA ·andMask<>+104(SB)/8, $0x0000000000000000 +DATA ·andMask<>+112(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+120(SB)/8, $0x0000000000000000 +DATA ·andMask<>+128(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+136(SB)/8, $0x00000000000000ff +DATA ·andMask<>+144(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+152(SB)/8, $0x000000000000ffff +DATA ·andMask<>+160(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+168(SB)/8, $0x0000000000ffffff +DATA ·andMask<>+176(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+184(SB)/8, $0x00000000ffffffff +DATA ·andMask<>+192(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+200(SB)/8, $0x000000ffffffffff +DATA ·andMask<>+208(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+216(SB)/8, $0x0000ffffffffffff +DATA ·andMask<>+224(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+232(SB)/8, $0x00ffffffffffffff +GLOBL ·andMask<>(SB), RODATA|NOPTR, $240 + +DATA ·avx2InitMask<>+0(SB)/8, $0x0000000000000000 +DATA ·avx2InitMask<>+8(SB)/8, $0x0000000000000000 +DATA ·avx2InitMask<>+16(SB)/8, $0x0000000000000001 +DATA ·avx2InitMask<>+24(SB)/8, $0x0000000000000000 +GLOBL ·avx2InitMask<>(SB), RODATA|NOPTR, $32 + +DATA ·rol16<>+0(SB)/8, $0x0504070601000302 +DATA ·rol16<>+8(SB)/8, $0x0d0c0f0e09080b0a +DATA ·rol16<>+16(SB)/8, $0x0504070601000302 +DATA ·rol16<>+24(SB)/8, $0x0d0c0f0e09080b0a +GLOBL ·rol16<>(SB), RODATA|NOPTR, $32 + +DATA ·rol8<>+0(SB)/8, $0x0605040702010003 +DATA ·rol8<>+8(SB)/8, $0x0e0d0c0f0a09080b +DATA ·rol8<>+16(SB)/8, $0x0605040702010003 +DATA ·rol8<>+24(SB)/8, $0x0e0d0c0f0a09080b +GLOBL ·rol8<>(SB), RODATA|NOPTR, $32 + +DATA ·avx2IncMask<>+0(SB)/8, $0x0000000000000002 +DATA ·avx2IncMask<>+8(SB)/8, $0x0000000000000000 +DATA ·avx2IncMask<>+16(SB)/8, $0x0000000000000002 +DATA ·avx2IncMask<>+24(SB)/8, $0x0000000000000000 +GLOBL ·avx2IncMask<>(SB), RODATA|NOPTR, $32 + +// func chacha20Poly1305Seal(dst []byte, key []uint32, src []byte, ad []byte) +// Requires: AVX, AVX2, BMI2, CMOV, SSE2 +TEXT ·chacha20Poly1305Seal(SB), $288-96 + MOVQ SP, BP + ADDQ $0x20, BP + ANDQ $-32, BP + MOVQ dst_base+0(FP), DI + MOVQ key_base+24(FP), R8 + MOVQ src_base+48(FP), SI + MOVQ src_len+56(FP), BX + MOVQ ad_base+72(FP), CX + CMPB ·useAVX2+0(SB), $0x01 + JE chacha20Poly1305Seal_AVX2 + + // Special optimization, for very short buffers + CMPQ BX, $0x80 + JBE sealSSE128 + + // In the seal case - prepare the poly key + 3 blocks of stream in the first iteration + MOVOU ·chacha20Constants<>+0(SB), X0 + MOVOU 16(R8), X3 + MOVOU 32(R8), X6 + MOVOU 48(R8), X9 + + // Store state on stack for future use + MOVO X3, 32(BP) + MOVO X6, 48(BP) + + // Load state, increment counter blocks + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X1, X2 + MOVO X4, X5 + MOVO X7, X8 + MOVO X10, X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X2, X12 + MOVO X5, X13 + MOVO X8, X14 + MOVO X11, X15 + PADDL ·sseIncMask<>+0(SB), X15 + + // Store counters + MOVO X9, 80(BP) + MOVO X10, 96(BP) + MOVO X11, 112(BP) + MOVO X15, 128(BP) + MOVQ $0x0000000a, R9 + +sealSSEIntroLoop: + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x0c + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x04 + DECQ R9 + JNE sealSSEIntroLoop + + // Add in the state + PADDD ·chacha20Constants<>+0(SB), X0 + PADDD ·chacha20Constants<>+0(SB), X1 + PADDD ·chacha20Constants<>+0(SB), X2 + PADDD ·chacha20Constants<>+0(SB), X12 + PADDD 32(BP), X3 + PADDD 32(BP), X4 + PADDD 32(BP), X5 + PADDD 32(BP), X13 + PADDD 48(BP), X7 + PADDD 48(BP), X8 + PADDD 48(BP), X14 + PADDD 96(BP), X10 + PADDD 112(BP), X11 + PADDD 128(BP), X15 + + // Clamp and store the key + PAND ·polyClampMask<>+0(SB), X0 + MOVO X0, (BP) + MOVO X3, 16(BP) + + // Hash AAD + MOVQ ad_len+80(FP), R9 + CALL polyHashADInternal<>(SB) + MOVOU (SI), X0 + MOVOU 16(SI), X3 + MOVOU 32(SI), X6 + MOVOU 48(SI), X9 + PXOR X0, X1 + PXOR X3, X4 + PXOR X6, X7 + PXOR X9, X10 + MOVOU X1, (DI) + MOVOU X4, 16(DI) + MOVOU X7, 32(DI) + MOVOU X10, 48(DI) + MOVOU 64(SI), X0 + MOVOU 80(SI), X3 + MOVOU 96(SI), X6 + MOVOU 112(SI), X9 + PXOR X0, X2 + PXOR X3, X5 + PXOR X6, X8 + PXOR X9, X11 + MOVOU X2, 64(DI) + MOVOU X5, 80(DI) + MOVOU X8, 96(DI) + MOVOU X11, 112(DI) + MOVQ $0x00000080, CX + SUBQ $0x80, BX + LEAQ 128(SI), SI + MOVO X12, X1 + MOVO X13, X4 + MOVO X14, X7 + MOVO X15, X10 + CMPQ BX, $0x40 + JBE sealSSE128SealHash + MOVOU (SI), X0 + MOVOU 16(SI), X3 + MOVOU 32(SI), X6 + MOVOU 48(SI), X9 + PXOR X0, X12 + PXOR X3, X13 + PXOR X6, X14 + PXOR X9, X15 + MOVOU X12, 128(DI) + MOVOU X13, 144(DI) + MOVOU X14, 160(DI) + MOVOU X15, 176(DI) + ADDQ $0x40, CX + SUBQ $0x40, BX + LEAQ 64(SI), SI + MOVQ $0x00000002, CX + MOVQ $0x00000008, R9 + CMPQ BX, $0x40 + JBE sealSSETail64 + CMPQ BX, $0x80 + JBE sealSSETail128 + CMPQ BX, $0xc0 + JBE sealSSETail192 + +sealSSEMainLoop: + // Load state, increment counter blocks + MOVO ·chacha20Constants<>+0(SB), X0 + MOVO 32(BP), X3 + MOVO 48(BP), X6 + MOVO 128(BP), X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X1, X2 + MOVO X4, X5 + MOVO X7, X8 + MOVO X10, X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X2, X12 + MOVO X5, X13 + MOVO X8, X14 + MOVO X11, X15 + PADDL ·sseIncMask<>+0(SB), X15 + + // Store counters + MOVO X9, 80(BP) + MOVO X10, 96(BP) + MOVO X11, 112(BP) + MOVO X15, 128(BP) + +sealSSEInnerLoop: + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x0c + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + LEAQ 16(DI), DI + MOVO X14, 64(BP) + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X3 + PXOR X14, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X14) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X3 + PXOR X14, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X4 + PXOR X14, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X14) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X4 + PXOR X14, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x0c, X14 + PSRLL $0x14, X5 + PXOR X14, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X14) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X14 + PSLLL $0x07, X14 + PSRLL $0x19, X5 + PXOR X14, X5 + MOVO 64(BP), X14 + MOVO X7, 64(BP) + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + PADDD X13, X12 + PXOR X12, X15 + ROL16(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x0c, X7 + PSRLL $0x14, X13 + PXOR X7, X13 + PADDD X13, X12 + PXOR X12, X15 + ROL8(X15, X7) + PADDD X15, X14 + PXOR X14, X13 + MOVO X13, X7 + PSLLL $0x07, X7 + PSRLL $0x19, X13 + PXOR X7, X13 + MOVO 64(BP), X7 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x04 + DECQ R9 + JGE sealSSEInnerLoop + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + DECQ CX + JG sealSSEInnerLoop + + // Add in the state + PADDD ·chacha20Constants<>+0(SB), X0 + PADDD ·chacha20Constants<>+0(SB), X1 + PADDD ·chacha20Constants<>+0(SB), X2 + PADDD ·chacha20Constants<>+0(SB), X12 + PADDD 32(BP), X3 + PADDD 32(BP), X4 + PADDD 32(BP), X5 + PADDD 32(BP), X13 + PADDD 48(BP), X6 + PADDD 48(BP), X7 + PADDD 48(BP), X8 + PADDD 48(BP), X14 + PADDD 80(BP), X9 + PADDD 96(BP), X10 + PADDD 112(BP), X11 + PADDD 128(BP), X15 + MOVO X15, 64(BP) + + // Load - xor - store + MOVOU (SI), X15 + PXOR X15, X0 + MOVOU 16(SI), X15 + PXOR X15, X3 + MOVOU 32(SI), X15 + PXOR X15, X6 + MOVOU 48(SI), X15 + PXOR X15, X9 + MOVOU X0, (DI) + MOVOU X3, 16(DI) + MOVOU X6, 32(DI) + MOVOU X9, 48(DI) + MOVO 64(BP), X15 + MOVOU 64(SI), X0 + MOVOU 80(SI), X3 + MOVOU 96(SI), X6 + MOVOU 112(SI), X9 + PXOR X0, X1 + PXOR X3, X4 + PXOR X6, X7 + PXOR X9, X10 + MOVOU X1, 64(DI) + MOVOU X4, 80(DI) + MOVOU X7, 96(DI) + MOVOU X10, 112(DI) + MOVOU 128(SI), X0 + MOVOU 144(SI), X3 + MOVOU 160(SI), X6 + MOVOU 176(SI), X9 + PXOR X0, X2 + PXOR X3, X5 + PXOR X6, X8 + PXOR X9, X11 + MOVOU X2, 128(DI) + MOVOU X5, 144(DI) + MOVOU X8, 160(DI) + MOVOU X11, 176(DI) + ADDQ $0xc0, SI + MOVQ $0x000000c0, CX + SUBQ $0xc0, BX + MOVO X12, X1 + MOVO X13, X4 + MOVO X14, X7 + MOVO X15, X10 + CMPQ BX, $0x40 + JBE sealSSE128SealHash + MOVOU (SI), X0 + MOVOU 16(SI), X3 + MOVOU 32(SI), X6 + MOVOU 48(SI), X9 + PXOR X0, X12 + PXOR X3, X13 + PXOR X6, X14 + PXOR X9, X15 + MOVOU X12, 192(DI) + MOVOU X13, 208(DI) + MOVOU X14, 224(DI) + MOVOU X15, 240(DI) + LEAQ 64(SI), SI + SUBQ $0x40, BX + MOVQ $0x00000006, CX + MOVQ $0x00000004, R9 + CMPQ BX, $0xc0 + JG sealSSEMainLoop + MOVQ BX, CX + TESTQ BX, BX + JE sealSSE128SealHash + MOVQ $0x00000006, CX + CMPQ BX, $0x40 + JBE sealSSETail64 + CMPQ BX, $0x80 + JBE sealSSETail128 + JMP sealSSETail192 + +sealSSETail64: + MOVO ·chacha20Constants<>+0(SB), X1 + MOVO 32(BP), X4 + MOVO 48(BP), X7 + MOVO 128(BP), X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X10, 80(BP) + +sealSSETail64LoopA: + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + +sealSSETail64LoopB: + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X13) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X13 + PSLLL $0x0c, X13 + PSRLL $0x14, X4 + PXOR X13, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X13) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X13 + PSLLL $0x07, X13 + PSRLL $0x19, X4 + PXOR X13, X4 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X13) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X13 + PSLLL $0x0c, X13 + PSRLL $0x14, X4 + PXOR X13, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X13) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X13 + PSLLL $0x07, X13 + PSRLL $0x19, X4 + PXOR X13, X4 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + DECQ CX + JG sealSSETail64LoopA + DECQ R9 + JGE sealSSETail64LoopB + PADDL ·chacha20Constants<>+0(SB), X1 + PADDL 32(BP), X4 + PADDL 48(BP), X7 + PADDL 80(BP), X10 + JMP sealSSE128Seal + +sealSSETail128: + MOVO ·chacha20Constants<>+0(SB), X0 + MOVO 32(BP), X3 + MOVO 48(BP), X6 + MOVO 128(BP), X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X9, 80(BP) + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X10, 96(BP) + +sealSSETail128LoopA: + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + +sealSSETail128LoopB: + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + DECQ CX + JG sealSSETail128LoopA + DECQ R9 + JGE sealSSETail128LoopB + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL ·chacha20Constants<>+0(SB), X1 + PADDL 32(BP), X3 + PADDL 32(BP), X4 + PADDL 48(BP), X6 + PADDL 48(BP), X7 + PADDL 80(BP), X9 + PADDL 96(BP), X10 + MOVOU (SI), X12 + MOVOU 16(SI), X13 + MOVOU 32(SI), X14 + MOVOU 48(SI), X15 + PXOR X12, X0 + PXOR X13, X3 + PXOR X14, X6 + PXOR X15, X9 + MOVOU X0, (DI) + MOVOU X3, 16(DI) + MOVOU X6, 32(DI) + MOVOU X9, 48(DI) + MOVQ $0x00000040, CX + LEAQ 64(SI), SI + SUBQ $0x40, BX + JMP sealSSE128SealHash + +sealSSETail192: + MOVO ·chacha20Constants<>+0(SB), X0 + MOVO 32(BP), X3 + MOVO 48(BP), X6 + MOVO 128(BP), X9 + PADDL ·sseIncMask<>+0(SB), X9 + MOVO X9, 80(BP) + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X10, 96(BP) + MOVO X1, X2 + MOVO X4, X5 + MOVO X7, X8 + MOVO X10, X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X11, 112(BP) + +sealSSETail192LoopA: + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + +sealSSETail192LoopB: + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + DECQ CX + JG sealSSETail192LoopA + DECQ R9 + JGE sealSSETail192LoopB + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL ·chacha20Constants<>+0(SB), X1 + PADDL ·chacha20Constants<>+0(SB), X2 + PADDL 32(BP), X3 + PADDL 32(BP), X4 + PADDL 32(BP), X5 + PADDL 48(BP), X6 + PADDL 48(BP), X7 + PADDL 48(BP), X8 + PADDL 80(BP), X9 + PADDL 96(BP), X10 + PADDL 112(BP), X11 + MOVOU (SI), X12 + MOVOU 16(SI), X13 + MOVOU 32(SI), X14 + MOVOU 48(SI), X15 + PXOR X12, X0 + PXOR X13, X3 + PXOR X14, X6 + PXOR X15, X9 + MOVOU X0, (DI) + MOVOU X3, 16(DI) + MOVOU X6, 32(DI) + MOVOU X9, 48(DI) + MOVOU 64(SI), X12 + MOVOU 80(SI), X13 + MOVOU 96(SI), X14 + MOVOU 112(SI), X15 + PXOR X12, X1 + PXOR X13, X4 + PXOR X14, X7 + PXOR X15, X10 + MOVOU X1, 64(DI) + MOVOU X4, 80(DI) + MOVOU X7, 96(DI) + MOVOU X10, 112(DI) + MOVO X2, X1 + MOVO X5, X4 + MOVO X8, X7 + MOVO X11, X10 + MOVQ $0x00000080, CX + LEAQ 128(SI), SI + SUBQ $0x80, BX + JMP sealSSE128SealHash + +sealSSE128: + MOVOU ·chacha20Constants<>+0(SB), X0 + MOVOU 16(R8), X3 + MOVOU 32(R8), X6 + MOVOU 48(R8), X9 + MOVO X0, X1 + MOVO X3, X4 + MOVO X6, X7 + MOVO X9, X10 + PADDL ·sseIncMask<>+0(SB), X10 + MOVO X1, X2 + MOVO X4, X5 + MOVO X7, X8 + MOVO X10, X11 + PADDL ·sseIncMask<>+0(SB), X11 + MOVO X3, X13 + MOVO X6, X14 + MOVO X10, X15 + MOVQ $0x0000000a, R9 + +sealSSE128InnerCipherLoop: + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x04 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x0c + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + PADDD X3, X0 + PXOR X0, X9 + ROL16(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X3 + PXOR X12, X3 + PADDD X3, X0 + PXOR X0, X9 + ROL8(X9, X12) + PADDD X9, X6 + PXOR X6, X3 + MOVO X3, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X3 + PXOR X12, X3 + PADDD X4, X1 + PXOR X1, X10 + ROL16(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X4 + PXOR X12, X4 + PADDD X4, X1 + PXOR X1, X10 + ROL8(X10, X12) + PADDD X10, X7 + PXOR X7, X4 + MOVO X4, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X4 + PXOR X12, X4 + PADDD X5, X2 + PXOR X2, X11 + ROL16(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x0c, X12 + PSRLL $0x14, X5 + PXOR X12, X5 + PADDD X5, X2 + PXOR X2, X11 + ROL8(X11, X12) + PADDD X11, X8 + PXOR X8, X5 + MOVO X5, X12 + PSLLL $0x07, X12 + PSRLL $0x19, X5 + PXOR X12, X5 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xe4 + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xed + BYTE $0x0c + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xf6 + BYTE $0x08 + BYTE $0x66 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xff + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc0 + BYTE $0x08 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xc9 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xd2 + BYTE $0x04 + BYTE $0x66 + BYTE $0x45 + BYTE $0x0f + BYTE $0x3a + BYTE $0x0f + BYTE $0xdb + BYTE $0x04 + DECQ R9 + JNE sealSSE128InnerCipherLoop + + // A0|B0 hold the Poly1305 32-byte key, C0,D0 can be discarded + PADDL ·chacha20Constants<>+0(SB), X0 + PADDL ·chacha20Constants<>+0(SB), X1 + PADDL ·chacha20Constants<>+0(SB), X2 + PADDL X13, X3 + PADDL X13, X4 + PADDL X13, X5 + PADDL X14, X7 + PADDL X14, X8 + PADDL X15, X10 + PADDL ·sseIncMask<>+0(SB), X15 + PADDL X15, X11 + PAND ·polyClampMask<>+0(SB), X0 + MOVOU X0, (BP) + MOVOU X3, 16(BP) + + // Hash + MOVQ ad_len+80(FP), R9 + CALL polyHashADInternal<>(SB) + XORQ CX, CX + +sealSSE128SealHash: + CMPQ CX, $0x10 + JB sealSSE128Seal + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + SUBQ $0x10, CX + ADDQ $0x10, DI + JMP sealSSE128SealHash + +sealSSE128Seal: + CMPQ BX, $0x10 + JB sealSSETail + SUBQ $0x10, BX + + // Load for decryption + MOVOU (SI), X12 + PXOR X12, X1 + MOVOU X1, (DI) + LEAQ 16(SI), SI + LEAQ 16(DI), DI + + // Extract for hashing + MOVQ X1, R13 + PSRLDQ $0x08, X1 + MOVQ X1, R14 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + + // Shift the stream "left" + MOVO X4, X1 + MOVO X7, X4 + MOVO X10, X7 + MOVO X2, X10 + MOVO X5, X2 + MOVO X8, X5 + MOVO X11, X8 + JMP sealSSE128Seal + +sealSSETail: + TESTQ BX, BX + JE sealSSEFinalize + + // We can only load the PT one byte at a time to avoid read after end of buffer + MOVQ BX, R9 + SHLQ $0x04, R9 + LEAQ ·andMask<>+0(SB), R13 + MOVQ BX, CX + LEAQ -1(SI)(BX*1), SI + XORQ R15, R15 + XORQ R8, R8 + XORQ AX, AX + +sealSSETailLoadLoop: + SHLQ $0x08, R15, R8 + SHLQ $0x08, R15 + MOVB (SI), AX + XORQ AX, R15 + LEAQ -1(SI), SI + DECQ CX + JNE sealSSETailLoadLoop + MOVQ R15, 64(BP) + MOVQ R8, 72(BP) + PXOR 64(BP), X1 + MOVOU X1, (DI) + MOVOU -16(R13)(R9*1), X12 + PAND X12, X1 + MOVQ X1, R13 + PSRLDQ $0x08, X1 + MOVQ X1, R14 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + ADDQ BX, DI + +sealSSEFinalize: + // Hash in the buffer lengths + ADDQ ad_len+80(FP), R10 + ADCQ src_len+56(FP), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + + // Final reduce + MOVQ R10, R13 + MOVQ R11, R14 + MOVQ R12, R15 + SUBQ $-5, R10 + SBBQ $-1, R11 + SBBQ $0x03, R12 + CMOVQCS R13, R10 + CMOVQCS R14, R11 + CMOVQCS R15, R12 + + // Add in the "s" part of the key + ADDQ 16(BP), R10 + ADCQ 24(BP), R11 + + // Finally store the tag at the end of the message + MOVQ R10, (DI) + MOVQ R11, 8(DI) + RET + +chacha20Poly1305Seal_AVX2: + VZEROUPPER + VMOVDQU ·chacha20Constants<>+0(SB), Y0 + BYTE $0xc4 + BYTE $0x42 + BYTE $0x7d + BYTE $0x5a + BYTE $0x70 + BYTE $0x10 + BYTE $0xc4 + BYTE $0x42 + BYTE $0x7d + BYTE $0x5a + BYTE $0x60 + BYTE $0x20 + BYTE $0xc4 + BYTE $0xc2 + BYTE $0x7d + BYTE $0x5a + BYTE $0x60 + BYTE $0x30 + VPADDD ·avx2InitMask<>+0(SB), Y4, Y4 + + // Special optimizations, for very short buffers + CMPQ BX, $0x000000c0 + JBE seal192AVX2 + CMPQ BX, $0x00000140 + JBE seal320AVX2 + + // For the general key prepare the key first - as a byproduct we have 64 bytes of cipher stream + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA Y0, Y7 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA Y14, Y11 + VMOVDQA Y14, 32(BP) + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA Y12, Y15 + VMOVDQA Y12, 64(BP) + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VMOVDQA Y4, 96(BP) + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VMOVDQA Y1, 128(BP) + VPADDD ·avx2IncMask<>+0(SB), Y2, Y3 + VMOVDQA Y2, 160(BP) + VMOVDQA Y3, 192(BP) + MOVQ $0x0000000a, R9 + +sealAVX2IntroLoop: + VMOVDQA Y15, 224(BP) + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VMOVDQA 224(BP), Y15 + VMOVDQA Y13, 224(BP) + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x0c, Y11, Y13 + VPSRLD $0x14, Y11, Y11 + VPXOR Y13, Y11, Y11 + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x07, Y11, Y13 + VPSRLD $0x19, Y11, Y11 + VPXOR Y13, Y11, Y11 + VMOVDQA 224(BP), Y13 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPALIGNR $0x04, Y11, Y11, Y11 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x0c, Y3, Y3, Y3 + VMOVDQA Y15, 224(BP) + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VMOVDQA 224(BP), Y15 + VMOVDQA Y13, 224(BP) + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x0c, Y11, Y13 + VPSRLD $0x14, Y11, Y11 + VPXOR Y13, Y11, Y11 + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x07, Y11, Y13 + VPSRLD $0x19, Y11, Y11 + VPXOR Y13, Y11, Y11 + VMOVDQA 224(BP), Y13 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x04, Y2, Y2, Y2 + VPALIGNR $0x0c, Y11, Y11, Y11 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x04, Y3, Y3, Y3 + DECQ R9 + JNE sealAVX2IntroLoop + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD ·chacha20Constants<>+0(SB), Y6, Y6 + VPADDD ·chacha20Constants<>+0(SB), Y7, Y7 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 32(BP), Y10, Y10 + VPADDD 32(BP), Y11, Y11 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD 64(BP), Y8, Y8 + VPADDD 64(BP), Y15, Y15 + VPADDD 96(BP), Y4, Y4 + VPADDD 128(BP), Y1, Y1 + VPADDD 160(BP), Y2, Y2 + VPADDD 192(BP), Y3, Y3 + VPERM2I128 $0x13, Y12, Y4, Y12 + VPERM2I128 $0x02, Y0, Y14, Y4 + VPERM2I128 $0x13, Y0, Y14, Y0 + + // Clamp and store poly key + VPAND ·polyClampMask<>+0(SB), Y4, Y4 + VMOVDQA Y4, (BP) + + // Hash AD + MOVQ ad_len+80(FP), R9 + CALL polyHashADInternal<>(SB) + + // Can store at least 320 bytes + VPXOR (SI), Y0, Y0 + VPXOR 32(SI), Y12, Y12 + VMOVDQU Y0, (DI) + VMOVDQU Y12, 32(DI) + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + VPXOR 64(SI), Y0, Y0 + VPXOR 96(SI), Y14, Y14 + VPXOR 128(SI), Y12, Y12 + VPXOR 160(SI), Y4, Y4 + VMOVDQU Y0, 64(DI) + VMOVDQU Y14, 96(DI) + VMOVDQU Y12, 128(DI) + VMOVDQU Y4, 160(DI) + VPERM2I128 $0x02, Y6, Y10, Y0 + VPERM2I128 $0x02, Y8, Y2, Y14 + VPERM2I128 $0x13, Y6, Y10, Y12 + VPERM2I128 $0x13, Y8, Y2, Y4 + VPXOR 192(SI), Y0, Y0 + VPXOR 224(SI), Y14, Y14 + VPXOR 256(SI), Y12, Y12 + VPXOR 288(SI), Y4, Y4 + VMOVDQU Y0, 192(DI) + VMOVDQU Y14, 224(DI) + VMOVDQU Y12, 256(DI) + VMOVDQU Y4, 288(DI) + MOVQ $0x00000140, CX + SUBQ $0x00000140, BX + LEAQ 320(SI), SI + VPERM2I128 $0x02, Y7, Y11, Y0 + VPERM2I128 $0x02, Y15, Y3, Y14 + VPERM2I128 $0x13, Y7, Y11, Y12 + VPERM2I128 $0x13, Y15, Y3, Y4 + CMPQ BX, $0x80 + JBE sealAVX2SealHash + VPXOR (SI), Y0, Y0 + VPXOR 32(SI), Y14, Y14 + VPXOR 64(SI), Y12, Y12 + VPXOR 96(SI), Y4, Y4 + VMOVDQU Y0, 320(DI) + VMOVDQU Y14, 352(DI) + VMOVDQU Y12, 384(DI) + VMOVDQU Y4, 416(DI) + SUBQ $0x80, BX + LEAQ 128(SI), SI + MOVQ $0x00000008, CX + MOVQ $0x00000002, R9 + CMPQ BX, $0x80 + JBE sealAVX2Tail128 + CMPQ BX, $0x00000100 + JBE sealAVX2Tail256 + CMPQ BX, $0x00000180 + JBE sealAVX2Tail384 + CMPQ BX, $0x00000200 + JBE sealAVX2Tail512 + + // We have 448 bytes to hash, but main loop hashes 512 bytes at a time - perform some rounds, before the main loop + VMOVDQA ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA Y0, Y7 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA Y14, Y11 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA Y12, Y15 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VPADDD ·avx2IncMask<>+0(SB), Y2, Y3 + VMOVDQA Y4, 96(BP) + VMOVDQA Y1, 128(BP) + VMOVDQA Y2, 160(BP) + VMOVDQA Y3, 192(BP) + VMOVDQA Y15, 224(BP) + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VMOVDQA 224(BP), Y15 + VMOVDQA Y13, 224(BP) + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x0c, Y11, Y13 + VPSRLD $0x14, Y11, Y11 + VPXOR Y13, Y11, Y11 + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x07, Y11, Y13 + VPSRLD $0x19, Y11, Y11 + VPXOR Y13, Y11, Y11 + VMOVDQA 224(BP), Y13 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPALIGNR $0x04, Y11, Y11, Y11 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x0c, Y3, Y3, Y3 + VMOVDQA Y15, 224(BP) + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VMOVDQA 224(BP), Y15 + VMOVDQA Y13, 224(BP) + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x0c, Y11, Y13 + VPSRLD $0x14, Y11, Y11 + VPXOR Y13, Y11, Y11 + VPADDD Y11, Y7, Y7 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y3, Y15, Y15 + VPXOR Y15, Y11, Y11 + VPSLLD $0x07, Y11, Y13 + VPSRLD $0x19, Y11, Y11 + VPXOR Y13, Y11, Y11 + VMOVDQA 224(BP), Y13 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x04, Y2, Y2, Y2 + VPALIGNR $0x0c, Y11, Y11, Y11 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x04, Y3, Y3, Y3 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + SUBQ $0x10, DI + MOVQ $0x00000009, CX + JMP sealAVX2InternalLoopStart + +sealAVX2MainLoop: + VMOVDQU ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA Y0, Y7 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA Y14, Y11 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA Y12, Y15 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VPADDD ·avx2IncMask<>+0(SB), Y2, Y3 + VMOVDQA Y4, 96(BP) + VMOVDQA Y1, 128(BP) + VMOVDQA Y2, 160(BP) + VMOVDQA Y3, 192(BP) + MOVQ $0x0000000a, CX + +sealAVX2InternalLoop: + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + +sealAVX2InternalLoopStart: + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + ADDQ 16(DI), R10 + ADCQ 24(DI), R11 + ADCQ $0x01, R12 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x04, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPALIGNR $0x0c, Y3, Y3, Y3 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + ADDQ 32(DI), R10 + ADCQ 40(DI), R11 + ADCQ $0x01, R12 + LEAQ 48(DI), DI + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x0c, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + VPALIGNR $0x04, Y3, Y3, Y3 + DECQ CX + JNE sealAVX2InternalLoop + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD ·chacha20Constants<>+0(SB), Y6, Y6 + VPADDD ·chacha20Constants<>+0(SB), Y7, Y7 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 32(BP), Y10, Y10 + VPADDD 32(BP), Y11, Y11 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD 64(BP), Y8, Y8 + VPADDD 64(BP), Y15, Y15 + VPADDD 96(BP), Y4, Y4 + VPADDD 128(BP), Y1, Y1 + VPADDD 160(BP), Y2, Y2 + VPADDD 192(BP), Y3, Y3 + VMOVDQA Y15, 224(BP) + + // We only hashed 480 of the 512 bytes available - hash the remaining 32 here + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(DI), DI + VPERM2I128 $0x02, Y0, Y14, Y15 + VPERM2I128 $0x13, Y0, Y14, Y14 + VPERM2I128 $0x02, Y12, Y4, Y0 + VPERM2I128 $0x13, Y12, Y4, Y12 + VPXOR (SI), Y15, Y15 + VPXOR 32(SI), Y0, Y0 + VPXOR 64(SI), Y14, Y14 + VPXOR 96(SI), Y12, Y12 + VMOVDQU Y15, (DI) + VMOVDQU Y0, 32(DI) + VMOVDQU Y14, 64(DI) + VMOVDQU Y12, 96(DI) + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + VPXOR 128(SI), Y0, Y0 + VPXOR 160(SI), Y14, Y14 + VPXOR 192(SI), Y12, Y12 + VPXOR 224(SI), Y4, Y4 + VMOVDQU Y0, 128(DI) + VMOVDQU Y14, 160(DI) + VMOVDQU Y12, 192(DI) + VMOVDQU Y4, 224(DI) + + // and here + ADDQ -16(DI), R10 + ADCQ -8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPERM2I128 $0x02, Y6, Y10, Y0 + VPERM2I128 $0x02, Y8, Y2, Y14 + VPERM2I128 $0x13, Y6, Y10, Y12 + VPERM2I128 $0x13, Y8, Y2, Y4 + VPXOR 256(SI), Y0, Y0 + VPXOR 288(SI), Y14, Y14 + VPXOR 320(SI), Y12, Y12 + VPXOR 352(SI), Y4, Y4 + VMOVDQU Y0, 256(DI) + VMOVDQU Y14, 288(DI) + VMOVDQU Y12, 320(DI) + VMOVDQU Y4, 352(DI) + VPERM2I128 $0x02, Y7, Y11, Y0 + VPERM2I128 $0x02, 224(BP), Y3, Y14 + VPERM2I128 $0x13, Y7, Y11, Y12 + VPERM2I128 $0x13, 224(BP), Y3, Y4 + VPXOR 384(SI), Y0, Y0 + VPXOR 416(SI), Y14, Y14 + VPXOR 448(SI), Y12, Y12 + VPXOR 480(SI), Y4, Y4 + VMOVDQU Y0, 384(DI) + VMOVDQU Y14, 416(DI) + VMOVDQU Y12, 448(DI) + VMOVDQU Y4, 480(DI) + LEAQ 512(SI), SI + SUBQ $0x00000200, BX + CMPQ BX, $0x00000200 + JG sealAVX2MainLoop + + // Tail can only hash 480 bytes + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + ADDQ 16(DI), R10 + ADCQ 24(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(DI), DI + MOVQ $0x0000000a, CX + MOVQ $0x00000000, R9 + CMPQ BX, $0x80 + JBE sealAVX2Tail128 + CMPQ BX, $0x00000100 + JBE sealAVX2Tail256 + CMPQ BX, $0x00000180 + JBE sealAVX2Tail384 + JMP sealAVX2Tail512 + +seal192AVX2: + VMOVDQA Y0, Y5 + VMOVDQA Y14, Y9 + VMOVDQA Y12, Y13 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VMOVDQA Y0, Y6 + VMOVDQA Y14, Y10 + VMOVDQA Y12, Y8 + VMOVDQA Y4, Y2 + VMOVDQA Y1, Y15 + MOVQ $0x0000000a, R9 + +sealAVX2192InnerCipherLoop: + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + DECQ R9 + JNE sealAVX2192InnerCipherLoop + VPADDD Y6, Y0, Y0 + VPADDD Y6, Y5, Y5 + VPADDD Y10, Y14, Y14 + VPADDD Y10, Y9, Y9 + VPADDD Y8, Y12, Y12 + VPADDD Y8, Y13, Y13 + VPADDD Y2, Y4, Y4 + VPADDD Y15, Y1, Y1 + VPERM2I128 $0x02, Y0, Y14, Y3 + + // Clamp and store poly key + VPAND ·polyClampMask<>+0(SB), Y3, Y3 + VMOVDQA Y3, (BP) + + // Stream for up to 192 bytes + VPERM2I128 $0x13, Y0, Y14, Y0 + VPERM2I128 $0x13, Y12, Y4, Y14 + VPERM2I128 $0x02, Y5, Y9, Y12 + VPERM2I128 $0x02, Y13, Y1, Y4 + VPERM2I128 $0x13, Y5, Y9, Y5 + VPERM2I128 $0x13, Y13, Y1, Y9 + +sealAVX2ShortSeal: + // Hash aad + MOVQ ad_len+80(FP), R9 + CALL polyHashADInternal<>(SB) + XORQ CX, CX + +sealAVX2SealHash: + // itr1 holds the number of bytes encrypted but not yet hashed + CMPQ CX, $0x10 + JB sealAVX2ShortSealLoop + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + SUBQ $0x10, CX + ADDQ $0x10, DI + JMP sealAVX2SealHash + +sealAVX2ShortSealLoop: + CMPQ BX, $0x20 + JB sealAVX2ShortTail32 + SUBQ $0x20, BX + + // Load for encryption + VPXOR (SI), Y0, Y0 + VMOVDQU Y0, (DI) + LEAQ 32(SI), SI + + // Now can hash + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + ADDQ 16(DI), R10 + ADCQ 24(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(DI), DI + + // Shift stream left + VMOVDQA Y14, Y0 + VMOVDQA Y12, Y14 + VMOVDQA Y4, Y12 + VMOVDQA Y5, Y4 + VMOVDQA Y9, Y5 + VMOVDQA Y13, Y9 + VMOVDQA Y1, Y13 + VMOVDQA Y6, Y1 + VMOVDQA Y10, Y6 + JMP sealAVX2ShortSealLoop + +sealAVX2ShortTail32: + CMPQ BX, $0x10 + VMOVDQA X0, X1 + JB sealAVX2ShortDone + SUBQ $0x10, BX + + // Load for encryption + VPXOR (SI), X0, X12 + VMOVDQU X12, (DI) + LEAQ 16(SI), SI + + // Hash + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + VPERM2I128 $0x11, Y0, Y0, Y0 + VMOVDQA X0, X1 + +sealAVX2ShortDone: + VZEROUPPER + JMP sealSSETail + +seal320AVX2: + VMOVDQA Y0, Y5 + VMOVDQA Y14, Y9 + VMOVDQA Y12, Y13 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VMOVDQA Y0, Y6 + VMOVDQA Y14, Y10 + VMOVDQA Y12, Y8 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VMOVDQA Y14, Y7 + VMOVDQA Y12, Y11 + VMOVDQA Y4, Y15 + MOVQ $0x0000000a, R9 + +sealAVX2320InnerCipherLoop: + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + DECQ R9 + JNE sealAVX2320InnerCipherLoop + VMOVDQA ·chacha20Constants<>+0(SB), Y3 + VPADDD Y3, Y0, Y0 + VPADDD Y3, Y5, Y5 + VPADDD Y3, Y6, Y6 + VPADDD Y7, Y14, Y14 + VPADDD Y7, Y9, Y9 + VPADDD Y7, Y10, Y10 + VPADDD Y11, Y12, Y12 + VPADDD Y11, Y13, Y13 + VPADDD Y11, Y8, Y8 + VMOVDQA ·avx2IncMask<>+0(SB), Y3 + VPADDD Y15, Y4, Y4 + VPADDD Y3, Y15, Y15 + VPADDD Y15, Y1, Y1 + VPADDD Y3, Y15, Y15 + VPADDD Y15, Y2, Y2 + + // Clamp and store poly key + VPERM2I128 $0x02, Y0, Y14, Y3 + VPAND ·polyClampMask<>+0(SB), Y3, Y3 + VMOVDQA Y3, (BP) + + // Stream for up to 320 bytes + VPERM2I128 $0x13, Y0, Y14, Y0 + VPERM2I128 $0x13, Y12, Y4, Y14 + VPERM2I128 $0x02, Y5, Y9, Y12 + VPERM2I128 $0x02, Y13, Y1, Y4 + VPERM2I128 $0x13, Y5, Y9, Y5 + VPERM2I128 $0x13, Y13, Y1, Y9 + VPERM2I128 $0x02, Y6, Y10, Y13 + VPERM2I128 $0x02, Y8, Y2, Y1 + VPERM2I128 $0x13, Y6, Y10, Y6 + VPERM2I128 $0x13, Y8, Y2, Y10 + JMP sealAVX2ShortSeal + +sealAVX2Tail128: + VMOVDQA ·chacha20Constants<>+0(SB), Y0 + VMOVDQA 32(BP), Y14 + VMOVDQA 64(BP), Y12 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VMOVDQA Y4, Y1 + +sealAVX2Tail128LoopA: + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + +sealAVX2Tail128LoopB: + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + ADDQ 16(DI), R10 + ADCQ 24(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(DI), DI + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x04, Y4, Y4, Y4 + DECQ CX + JG sealAVX2Tail128LoopA + DECQ R9 + JGE sealAVX2Tail128LoopB + VPADDD ·chacha20Constants<>+0(SB), Y0, Y5 + VPADDD 32(BP), Y14, Y9 + VPADDD 64(BP), Y12, Y13 + VPADDD Y1, Y4, Y1 + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + JMP sealAVX2ShortSealLoop + +sealAVX2Tail256: + VMOVDQA ·chacha20Constants<>+0(SB), Y0 + VMOVDQA ·chacha20Constants<>+0(SB), Y5 + VMOVDQA 32(BP), Y14 + VMOVDQA 32(BP), Y9 + VMOVDQA 64(BP), Y12 + VMOVDQA 64(BP), Y13 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VMOVDQA Y4, Y7 + VMOVDQA Y1, Y11 + +sealAVX2Tail256LoopA: + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + +sealAVX2Tail256LoopB: + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + ADDQ 16(DI), R10 + ADCQ 24(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(DI), DI + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + DECQ CX + JG sealAVX2Tail256LoopA + DECQ R9 + JGE sealAVX2Tail256LoopB + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD Y7, Y4, Y4 + VPADDD Y11, Y1, Y1 + VPERM2I128 $0x02, Y0, Y14, Y3 + VPERM2I128 $0x02, Y12, Y4, Y7 + VPERM2I128 $0x13, Y0, Y14, Y11 + VPERM2I128 $0x13, Y12, Y4, Y15 + VPXOR (SI), Y3, Y3 + VPXOR 32(SI), Y7, Y7 + VPXOR 64(SI), Y11, Y11 + VPXOR 96(SI), Y15, Y15 + VMOVDQU Y3, (DI) + VMOVDQU Y7, 32(DI) + VMOVDQU Y11, 64(DI) + VMOVDQU Y15, 96(DI) + MOVQ $0x00000080, CX + LEAQ 128(SI), SI + SUBQ $0x80, BX + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + JMP sealAVX2SealHash + +sealAVX2Tail384: + VMOVDQA ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VMOVDQA Y4, Y7 + VMOVDQA Y1, Y11 + VMOVDQA Y2, Y15 + +sealAVX2Tail384LoopA: + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + +sealAVX2Tail384LoopB: + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x0c, Y14, Y3 + VPSRLD $0x14, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y14, Y0, Y0 + VPXOR Y0, Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPADDD Y4, Y12, Y12 + VPXOR Y12, Y14, Y14 + VPSLLD $0x07, Y14, Y3 + VPSRLD $0x19, Y14, Y14 + VPXOR Y3, Y14, Y14 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x0c, Y9, Y3 + VPSRLD $0x14, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y9, Y5, Y5 + VPXOR Y5, Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPADDD Y1, Y13, Y13 + VPXOR Y13, Y9, Y9 + VPSLLD $0x07, Y9, Y3 + VPSRLD $0x19, Y9, Y9 + VPXOR Y3, Y9, Y9 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x0c, Y10, Y3 + VPSRLD $0x14, Y10, Y10 + VPXOR Y3, Y10, Y10 + VPADDD Y10, Y6, Y6 + VPXOR Y6, Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPADDD Y2, Y8, Y8 + VPXOR Y8, Y10, Y10 + VPSLLD $0x07, Y10, Y3 + VPSRLD $0x19, Y10, Y10 + VPXOR Y3, Y10, Y10 + ADDQ 16(DI), R10 + ADCQ 24(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(DI), DI + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + DECQ CX + JG sealAVX2Tail384LoopA + DECQ R9 + JGE sealAVX2Tail384LoopB + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD ·chacha20Constants<>+0(SB), Y6, Y6 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 32(BP), Y10, Y10 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD 64(BP), Y8, Y8 + VPADDD Y7, Y4, Y4 + VPADDD Y11, Y1, Y1 + VPADDD Y15, Y2, Y2 + VPERM2I128 $0x02, Y0, Y14, Y3 + VPERM2I128 $0x02, Y12, Y4, Y7 + VPERM2I128 $0x13, Y0, Y14, Y11 + VPERM2I128 $0x13, Y12, Y4, Y15 + VPXOR (SI), Y3, Y3 + VPXOR 32(SI), Y7, Y7 + VPXOR 64(SI), Y11, Y11 + VPXOR 96(SI), Y15, Y15 + VMOVDQU Y3, (DI) + VMOVDQU Y7, 32(DI) + VMOVDQU Y11, 64(DI) + VMOVDQU Y15, 96(DI) + VPERM2I128 $0x02, Y5, Y9, Y3 + VPERM2I128 $0x02, Y13, Y1, Y7 + VPERM2I128 $0x13, Y5, Y9, Y11 + VPERM2I128 $0x13, Y13, Y1, Y15 + VPXOR 128(SI), Y3, Y3 + VPXOR 160(SI), Y7, Y7 + VPXOR 192(SI), Y11, Y11 + VPXOR 224(SI), Y15, Y15 + VMOVDQU Y3, 128(DI) + VMOVDQU Y7, 160(DI) + VMOVDQU Y11, 192(DI) + VMOVDQU Y15, 224(DI) + MOVQ $0x00000100, CX + LEAQ 256(SI), SI + SUBQ $0x00000100, BX + VPERM2I128 $0x02, Y6, Y10, Y0 + VPERM2I128 $0x02, Y8, Y2, Y14 + VPERM2I128 $0x13, Y6, Y10, Y12 + VPERM2I128 $0x13, Y8, Y2, Y4 + JMP sealAVX2SealHash + +sealAVX2Tail512: + VMOVDQA ·chacha20Constants<>+0(SB), Y0 + VMOVDQA Y0, Y5 + VMOVDQA Y0, Y6 + VMOVDQA Y0, Y7 + VMOVDQA 32(BP), Y14 + VMOVDQA Y14, Y9 + VMOVDQA Y14, Y10 + VMOVDQA Y14, Y11 + VMOVDQA 64(BP), Y12 + VMOVDQA Y12, Y13 + VMOVDQA Y12, Y8 + VMOVDQA Y12, Y15 + VMOVDQA 192(BP), Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y4 + VPADDD ·avx2IncMask<>+0(SB), Y4, Y1 + VPADDD ·avx2IncMask<>+0(SB), Y1, Y2 + VPADDD ·avx2IncMask<>+0(SB), Y2, Y3 + VMOVDQA Y4, 96(BP) + VMOVDQA Y1, 128(BP) + VMOVDQA Y2, 160(BP) + VMOVDQA Y3, 192(BP) + +sealAVX2Tail512LoopA: + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), AX + MOVQ AX, R15 + MULQ R10 + MOVQ AX, R13 + MOVQ DX, R14 + MOVQ (BP), AX + MULQ R11 + IMULQ R12, R15 + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), AX + MOVQ AX, R8 + MULQ R10 + ADDQ AX, R14 + ADCQ $0x00, DX + MOVQ DX, R10 + MOVQ 8(BP), AX + MULQ R11 + ADDQ AX, R15 + ADCQ $0x00, DX + IMULQ R12, R8 + ADDQ R10, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 16(DI), DI + +sealAVX2Tail512LoopB: + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + ADDQ (DI), R10 + ADCQ 8(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + VPALIGNR $0x04, Y14, Y14, Y14 + VPALIGNR $0x04, Y9, Y9, Y9 + VPALIGNR $0x04, Y10, Y10, Y10 + VPALIGNR $0x04, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x0c, Y4, Y4, Y4 + VPALIGNR $0x0c, Y1, Y1, Y1 + VPALIGNR $0x0c, Y2, Y2, Y2 + VPALIGNR $0x0c, Y3, Y3, Y3 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol16<>+0(SB), Y4, Y4 + VPSHUFB ·rol16<>+0(SB), Y1, Y1 + VPSHUFB ·rol16<>+0(SB), Y2, Y2 + VPSHUFB ·rol16<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + ADDQ 16(DI), R10 + ADCQ 24(DI), R11 + ADCQ $0x01, R12 + MOVQ (BP), DX + MOVQ DX, R15 + MULXQ R10, R13, R14 + IMULQ R12, R15 + MULXQ R11, AX, DX + ADDQ AX, R14 + ADCQ DX, R15 + MOVQ 8(BP), DX + MULXQ R10, R10, AX + ADDQ R10, R14 + MULXQ R11, R11, R8 + ADCQ R11, R15 + ADCQ $0x00, R8 + IMULQ R12, DX + ADDQ AX, R15 + ADCQ DX, R8 + MOVQ R13, R10 + MOVQ R14, R11 + MOVQ R15, R12 + ANDQ $0x03, R12 + MOVQ R15, R13 + ANDQ $-4, R13 + MOVQ R8, R14 + SHRQ $0x02, R8, R15 + SHRQ $0x02, R8 + ADDQ R13, R10 + ADCQ R14, R11 + ADCQ $0x00, R12 + ADDQ R15, R10 + ADCQ R8, R11 + ADCQ $0x00, R12 + LEAQ 32(DI), DI + VMOVDQA Y15, 224(BP) + VPSLLD $0x0c, Y14, Y15 + VPSRLD $0x14, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x0c, Y9, Y15 + VPSRLD $0x14, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x0c, Y10, Y15 + VPSRLD $0x14, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x0c, Y11, Y15 + VPSRLD $0x14, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + VPADDD Y14, Y0, Y0 + VPADDD Y9, Y5, Y5 + VPADDD Y10, Y6, Y6 + VPADDD Y11, Y7, Y7 + VPXOR Y0, Y4, Y4 + VPXOR Y5, Y1, Y1 + VPXOR Y6, Y2, Y2 + VPXOR Y7, Y3, Y3 + VPSHUFB ·rol8<>+0(SB), Y4, Y4 + VPSHUFB ·rol8<>+0(SB), Y1, Y1 + VPSHUFB ·rol8<>+0(SB), Y2, Y2 + VPSHUFB ·rol8<>+0(SB), Y3, Y3 + VPADDD Y4, Y12, Y12 + VPADDD Y1, Y13, Y13 + VPADDD Y2, Y8, Y8 + VPADDD Y3, Y15, Y15 + VPXOR Y12, Y14, Y14 + VPXOR Y13, Y9, Y9 + VPXOR Y8, Y10, Y10 + VPXOR Y15, Y11, Y11 + VMOVDQA Y15, 224(BP) + VPSLLD $0x07, Y14, Y15 + VPSRLD $0x19, Y14, Y14 + VPXOR Y15, Y14, Y14 + VPSLLD $0x07, Y9, Y15 + VPSRLD $0x19, Y9, Y9 + VPXOR Y15, Y9, Y9 + VPSLLD $0x07, Y10, Y15 + VPSRLD $0x19, Y10, Y10 + VPXOR Y15, Y10, Y10 + VPSLLD $0x07, Y11, Y15 + VPSRLD $0x19, Y11, Y11 + VPXOR Y15, Y11, Y11 + VMOVDQA 224(BP), Y15 + VPALIGNR $0x0c, Y14, Y14, Y14 + VPALIGNR $0x0c, Y9, Y9, Y9 + VPALIGNR $0x0c, Y10, Y10, Y10 + VPALIGNR $0x0c, Y11, Y11, Y11 + VPALIGNR $0x08, Y12, Y12, Y12 + VPALIGNR $0x08, Y13, Y13, Y13 + VPALIGNR $0x08, Y8, Y8, Y8 + VPALIGNR $0x08, Y15, Y15, Y15 + VPALIGNR $0x04, Y4, Y4, Y4 + VPALIGNR $0x04, Y1, Y1, Y1 + VPALIGNR $0x04, Y2, Y2, Y2 + VPALIGNR $0x04, Y3, Y3, Y3 + DECQ CX + JG sealAVX2Tail512LoopA + DECQ R9 + JGE sealAVX2Tail512LoopB + VPADDD ·chacha20Constants<>+0(SB), Y0, Y0 + VPADDD ·chacha20Constants<>+0(SB), Y5, Y5 + VPADDD ·chacha20Constants<>+0(SB), Y6, Y6 + VPADDD ·chacha20Constants<>+0(SB), Y7, Y7 + VPADDD 32(BP), Y14, Y14 + VPADDD 32(BP), Y9, Y9 + VPADDD 32(BP), Y10, Y10 + VPADDD 32(BP), Y11, Y11 + VPADDD 64(BP), Y12, Y12 + VPADDD 64(BP), Y13, Y13 + VPADDD 64(BP), Y8, Y8 + VPADDD 64(BP), Y15, Y15 + VPADDD 96(BP), Y4, Y4 + VPADDD 128(BP), Y1, Y1 + VPADDD 160(BP), Y2, Y2 + VPADDD 192(BP), Y3, Y3 + VMOVDQA Y15, 224(BP) + VPERM2I128 $0x02, Y0, Y14, Y15 + VPXOR (SI), Y15, Y15 + VMOVDQU Y15, (DI) + VPERM2I128 $0x02, Y12, Y4, Y15 + VPXOR 32(SI), Y15, Y15 + VMOVDQU Y15, 32(DI) + VPERM2I128 $0x13, Y0, Y14, Y15 + VPXOR 64(SI), Y15, Y15 + VMOVDQU Y15, 64(DI) + VPERM2I128 $0x13, Y12, Y4, Y15 + VPXOR 96(SI), Y15, Y15 + VMOVDQU Y15, 96(DI) + VPERM2I128 $0x02, Y5, Y9, Y0 + VPERM2I128 $0x02, Y13, Y1, Y14 + VPERM2I128 $0x13, Y5, Y9, Y12 + VPERM2I128 $0x13, Y13, Y1, Y4 + VPXOR 128(SI), Y0, Y0 + VPXOR 160(SI), Y14, Y14 + VPXOR 192(SI), Y12, Y12 + VPXOR 224(SI), Y4, Y4 + VMOVDQU Y0, 128(DI) + VMOVDQU Y14, 160(DI) + VMOVDQU Y12, 192(DI) + VMOVDQU Y4, 224(DI) + VPERM2I128 $0x02, Y6, Y10, Y0 + VPERM2I128 $0x02, Y8, Y2, Y14 + VPERM2I128 $0x13, Y6, Y10, Y12 + VPERM2I128 $0x13, Y8, Y2, Y4 + VPXOR 256(SI), Y0, Y0 + VPXOR 288(SI), Y14, Y14 + VPXOR 320(SI), Y12, Y12 + VPXOR 352(SI), Y4, Y4 + VMOVDQU Y0, 256(DI) + VMOVDQU Y14, 288(DI) + VMOVDQU Y12, 320(DI) + VMOVDQU Y4, 352(DI) + MOVQ $0x00000180, CX + LEAQ 384(SI), SI + SUBQ $0x00000180, BX + VPERM2I128 $0x02, Y7, Y11, Y0 + VPERM2I128 $0x02, 224(BP), Y3, Y14 + VPERM2I128 $0x13, Y7, Y11, Y12 + VPERM2I128 $0x13, 224(BP), Y3, Y4 + JMP sealAVX2SealHash diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go new file mode 100644 index 0000000..6313898 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go @@ -0,0 +1,81 @@ +// 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. + +package chacha20poly1305 + +import ( + "encoding/binary" + + "golang.org/x/crypto/chacha20" + "golang.org/x/crypto/internal/alias" + "golang.org/x/crypto/internal/poly1305" +) + +func writeWithPadding(p *poly1305.MAC, b []byte) { + p.Write(b) + if rem := len(b) % 16; rem != 0 { + var buf [16]byte + padLen := 16 - rem + p.Write(buf[:padLen]) + } +} + +func writeUint64(p *poly1305.MAC, n int) { + var buf [8]byte + binary.LittleEndian.PutUint64(buf[:], uint64(n)) + p.Write(buf[:]) +} + +func (c *chacha20poly1305) sealGeneric(dst, nonce, plaintext, additionalData []byte) []byte { + ret, out := sliceForAppend(dst, len(plaintext)+poly1305.TagSize) + ciphertext, tag := out[:len(plaintext)], out[len(plaintext):] + if alias.InexactOverlap(out, plaintext) { + panic("chacha20poly1305: invalid buffer overlap") + } + + var polyKey [32]byte + s, _ := chacha20.NewUnauthenticatedCipher(c.key[:], nonce) + s.XORKeyStream(polyKey[:], polyKey[:]) + s.SetCounter(1) // set the counter to 1, skipping 32 bytes + s.XORKeyStream(ciphertext, plaintext) + + p := poly1305.New(&polyKey) + writeWithPadding(p, additionalData) + writeWithPadding(p, ciphertext) + writeUint64(p, len(additionalData)) + writeUint64(p, len(plaintext)) + p.Sum(tag[:0]) + + return ret +} + +func (c *chacha20poly1305) openGeneric(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { + tag := ciphertext[len(ciphertext)-16:] + ciphertext = ciphertext[:len(ciphertext)-16] + + var polyKey [32]byte + s, _ := chacha20.NewUnauthenticatedCipher(c.key[:], nonce) + s.XORKeyStream(polyKey[:], polyKey[:]) + s.SetCounter(1) // set the counter to 1, skipping 32 bytes + + p := poly1305.New(&polyKey) + writeWithPadding(p, additionalData) + writeWithPadding(p, ciphertext) + writeUint64(p, len(additionalData)) + writeUint64(p, len(ciphertext)) + + ret, out := sliceForAppend(dst, len(ciphertext)) + if alias.InexactOverlap(out, ciphertext) { + panic("chacha20poly1305: invalid buffer overlap") + } + if !p.Verify(tag) { + for i := range out { + out[i] = 0 + } + return nil, errOpen + } + + s.XORKeyStream(out, ciphertext) + return ret, nil +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go new file mode 100644 index 0000000..34e6ab1 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go @@ -0,0 +1,15 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !amd64 || !gc || purego + +package chacha20poly1305 + +func (c *chacha20poly1305) seal(dst, nonce, plaintext, additionalData []byte) []byte { + return c.sealGeneric(dst, nonce, plaintext, additionalData) +} + +func (c *chacha20poly1305) open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { + return c.openGeneric(dst, nonce, ciphertext, additionalData) +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/xchacha20poly1305.go b/vendor/golang.org/x/crypto/chacha20poly1305/xchacha20poly1305.go new file mode 100644 index 0000000..1cebfe9 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/xchacha20poly1305.go @@ -0,0 +1,86 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package chacha20poly1305 + +import ( + "crypto/cipher" + "errors" + + "golang.org/x/crypto/chacha20" +) + +type xchacha20poly1305 struct { + key [KeySize]byte +} + +// NewX returns a XChaCha20-Poly1305 AEAD that uses the given 256-bit key. +// +// XChaCha20-Poly1305 is a ChaCha20-Poly1305 variant that takes a longer nonce, +// suitable to be generated randomly without risk of collisions. It should be +// preferred when nonce uniqueness cannot be trivially ensured, or whenever +// nonces are randomly generated. +func NewX(key []byte) (cipher.AEAD, error) { + if len(key) != KeySize { + return nil, errors.New("chacha20poly1305: bad key length") + } + ret := new(xchacha20poly1305) + copy(ret.key[:], key) + return ret, nil +} + +func (*xchacha20poly1305) NonceSize() int { + return NonceSizeX +} + +func (*xchacha20poly1305) Overhead() int { + return Overhead +} + +func (x *xchacha20poly1305) Seal(dst, nonce, plaintext, additionalData []byte) []byte { + if len(nonce) != NonceSizeX { + panic("chacha20poly1305: bad nonce length passed to Seal") + } + + // XChaCha20-Poly1305 technically supports a 64-bit counter, so there is no + // size limit. However, since we reuse the ChaCha20-Poly1305 implementation, + // the second half of the counter is not available. This is unlikely to be + // an issue because the cipher.AEAD API requires the entire message to be in + // memory, and the counter overflows at 256 GB. + if uint64(len(plaintext)) > (1<<38)-64 { + panic("chacha20poly1305: plaintext too large") + } + + c := new(chacha20poly1305) + hKey, _ := chacha20.HChaCha20(x.key[:], nonce[0:16]) + copy(c.key[:], hKey) + + // The first 4 bytes of the final nonce are unused counter space. + cNonce := make([]byte, NonceSize) + copy(cNonce[4:12], nonce[16:24]) + + return c.seal(dst, cNonce[:], plaintext, additionalData) +} + +func (x *xchacha20poly1305) Open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { + if len(nonce) != NonceSizeX { + panic("chacha20poly1305: bad nonce length passed to Open") + } + if len(ciphertext) < 16 { + return nil, errOpen + } + if uint64(len(ciphertext)) > (1<<38)-48 { + panic("chacha20poly1305: ciphertext too large") + } + + c := new(chacha20poly1305) + hKey, _ := chacha20.HChaCha20(x.key[:], nonce[0:16]) + copy(c.key[:], hKey) + + // The first 4 bytes of the final nonce are unused counter space. + cNonce := make([]byte, NonceSize) + copy(cNonce[4:12], nonce[16:24]) + + return c.open(dst, cNonce[:], ciphertext, additionalData) +} diff --git a/vendor/golang.org/x/crypto/hkdf/hkdf.go b/vendor/golang.org/x/crypto/hkdf/hkdf.go new file mode 100644 index 0000000..3bee662 --- /dev/null +++ b/vendor/golang.org/x/crypto/hkdf/hkdf.go @@ -0,0 +1,95 @@ +// 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 hkdf implements the HMAC-based Extract-and-Expand Key Derivation +// Function (HKDF) as defined in RFC 5869. +// +// HKDF is a cryptographic key derivation function (KDF) with the goal of +// expanding limited input keying material into one or more cryptographically +// strong secret keys. +package hkdf + +import ( + "crypto/hmac" + "errors" + "hash" + "io" +) + +// Extract generates a pseudorandom key for use with Expand from an input secret +// and an optional independent salt. +// +// Only use this function if you need to reuse the extracted key with multiple +// Expand invocations and different context values. Most common scenarios, +// including the generation of multiple keys, should use New instead. +func Extract(hash func() hash.Hash, secret, salt []byte) []byte { + if salt == nil { + salt = make([]byte, hash().Size()) + } + extractor := hmac.New(hash, salt) + extractor.Write(secret) + return extractor.Sum(nil) +} + +type hkdf struct { + expander hash.Hash + size int + + info []byte + counter byte + + prev []byte + buf []byte +} + +func (f *hkdf) Read(p []byte) (int, error) { + // Check whether enough data can be generated + need := len(p) + remains := len(f.buf) + int(255-f.counter+1)*f.size + if remains < need { + return 0, errors.New("hkdf: entropy limit reached") + } + // Read any leftover from the buffer + n := copy(p, f.buf) + p = p[n:] + + // Fill the rest of the buffer + for len(p) > 0 { + if f.counter > 1 { + f.expander.Reset() + } + f.expander.Write(f.prev) + f.expander.Write(f.info) + f.expander.Write([]byte{f.counter}) + f.prev = f.expander.Sum(f.prev[:0]) + f.counter++ + + // Copy the new batch into p + f.buf = f.prev + n = copy(p, f.buf) + p = p[n:] + } + // Save leftovers for next run + f.buf = f.buf[n:] + + return need, nil +} + +// Expand returns a Reader, from which keys can be read, using the given +// pseudorandom key and optional context info, skipping the extraction step. +// +// The pseudorandomKey should have been generated by Extract, or be a uniformly +// random or pseudorandom cryptographically strong key. See RFC 5869, Section +// 3.3. Most common scenarios will want to use New instead. +func Expand(hash func() hash.Hash, pseudorandomKey, info []byte) io.Reader { + expander := hmac.New(hash, pseudorandomKey) + return &hkdf{expander, expander.Size(), info, 1, nil, nil} +} + +// New returns a Reader, from which keys can be read, using the given hash, +// secret, salt and context info. Salt and info can be nil. +func New(hash func() hash.Hash, secret, salt, info []byte) io.Reader { + prk := Extract(hash, secret, salt) + return Expand(hash, prk, info) +} diff --git a/vendor/golang.org/x/crypto/internal/alias/alias.go b/vendor/golang.org/x/crypto/internal/alias/alias.go new file mode 100644 index 0000000..551ff0c --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/alias/alias.go @@ -0,0 +1,31 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !purego + +// Package alias implements memory aliasing tests. +package alias + +import "unsafe" + +// AnyOverlap reports whether x and y share memory at any (not necessarily +// corresponding) index. The memory beyond the slice length is ignored. +func AnyOverlap(x, y []byte) bool { + return len(x) > 0 && len(y) > 0 && + uintptr(unsafe.Pointer(&x[0])) <= uintptr(unsafe.Pointer(&y[len(y)-1])) && + uintptr(unsafe.Pointer(&y[0])) <= uintptr(unsafe.Pointer(&x[len(x)-1])) +} + +// InexactOverlap reports whether x and y share memory at any non-corresponding +// index. The memory beyond the slice length is ignored. Note that x and y can +// have different lengths and still not have any inexact overlap. +// +// InexactOverlap can be used to implement the requirements of the crypto/cipher +// AEAD, Block, BlockMode and Stream interfaces. +func InexactOverlap(x, y []byte) bool { + if len(x) == 0 || len(y) == 0 || &x[0] == &y[0] { + return false + } + return AnyOverlap(x, y) +} diff --git a/vendor/golang.org/x/crypto/internal/alias/alias_purego.go b/vendor/golang.org/x/crypto/internal/alias/alias_purego.go new file mode 100644 index 0000000..6fe61b5 --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/alias/alias_purego.go @@ -0,0 +1,34 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build purego + +// Package alias implements memory aliasing tests. +package alias + +// This is the Google App Engine standard variant based on reflect +// because the unsafe package and cgo are disallowed. + +import "reflect" + +// AnyOverlap reports whether x and y share memory at any (not necessarily +// corresponding) index. The memory beyond the slice length is ignored. +func AnyOverlap(x, y []byte) bool { + return len(x) > 0 && len(y) > 0 && + reflect.ValueOf(&x[0]).Pointer() <= reflect.ValueOf(&y[len(y)-1]).Pointer() && + reflect.ValueOf(&y[0]).Pointer() <= reflect.ValueOf(&x[len(x)-1]).Pointer() +} + +// InexactOverlap reports whether x and y share memory at any non-corresponding +// index. The memory beyond the slice length is ignored. Note that x and y can +// have different lengths and still not have any inexact overlap. +// +// InexactOverlap can be used to implement the requirements of the crypto/cipher +// AEAD, Block, BlockMode and Stream interfaces. +func InexactOverlap(x, y []byte) bool { + if len(x) == 0 || len(y) == 0 || &x[0] == &y[0] { + return false + } + return AnyOverlap(x, y) +} diff --git a/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go b/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go new file mode 100644 index 0000000..8d99551 --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go @@ -0,0 +1,9 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build (!amd64 && !loong64 && !ppc64le && !ppc64 && !s390x) || !gc || purego + +package poly1305 + +type mac struct{ macGeneric } diff --git a/vendor/golang.org/x/crypto/internal/poly1305/poly1305.go b/vendor/golang.org/x/crypto/internal/poly1305/poly1305.go new file mode 100644 index 0000000..4aaea81 --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/poly1305/poly1305.go @@ -0,0 +1,99 @@ +// 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. + +// Package poly1305 implements Poly1305 one-time message authentication code as +// specified in https://cr.yp.to/mac/poly1305-20050329.pdf. +// +// Poly1305 is a fast, one-time authentication function. It is infeasible for an +// attacker to generate an authenticator for a message without the key. However, a +// key must only be used for a single message. Authenticating two different +// messages with the same key allows an attacker to forge authenticators for other +// messages with the same key. +// +// Poly1305 was originally coupled with AES in order to make Poly1305-AES. AES was +// used with a fixed key in order to generate one-time keys from an nonce. +// However, in this package AES isn't used and the one-time key is specified +// directly. +package poly1305 + +import "crypto/subtle" + +// TagSize is the size, in bytes, of a poly1305 authenticator. +const TagSize = 16 + +// 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) { + h := New(key) + h.Write(m) + h.Sum(out[:0]) +} + +// Verify returns true if mac is a valid authenticator for m with the given key. +func Verify(mac *[16]byte, m []byte, key *[32]byte) bool { + var tmp [16]byte + Sum(&tmp, m, key) + return subtle.ConstantTimeCompare(tmp[:], mac[:]) == 1 +} + +// New returns a new MAC computing an authentication +// tag of all data written to it with the given key. +// This allows writing the message progressively instead +// of passing it as a single slice. Common users should use +// the Sum function instead. +// +// The key must be unique for each message, as authenticating +// two different messages with the same key allows an attacker +// to forge messages at will. +func New(key *[32]byte) *MAC { + m := &MAC{} + initialize(key, &m.macState) + return m +} + +// MAC is an io.Writer computing an authentication tag +// of the data written to it. +// +// MAC cannot be used like common hash.Hash implementations, +// because using a poly1305 key twice breaks its security. +// Therefore writing data to a running MAC after calling +// Sum or Verify causes it to panic. +type MAC struct { + mac // platform-dependent implementation + + finalized bool +} + +// Size returns the number of bytes Sum will return. +func (h *MAC) Size() int { return TagSize } + +// Write adds more data to the running message authentication code. +// It never returns an error. +// +// It must not be called after the first call of Sum or Verify. +func (h *MAC) Write(p []byte) (n int, err error) { + if h.finalized { + panic("poly1305: write to MAC after Sum or Verify") + } + return h.mac.Write(p) +} + +// Sum computes the authenticator of all data written to the +// message authentication code. +func (h *MAC) Sum(b []byte) []byte { + var mac [TagSize]byte + h.mac.Sum(&mac) + h.finalized = true + return append(b, mac[:]...) +} + +// Verify returns whether the authenticator of all data written to +// the message authentication code matches the expected value. +func (h *MAC) Verify(expected []byte) bool { + var mac [TagSize]byte + h.mac.Sum(&mac) + h.finalized = true + return subtle.ConstantTimeCompare(expected, mac[:]) == 1 +} diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s b/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s new file mode 100644 index 0000000..1337573 --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s @@ -0,0 +1,93 @@ +// Code generated by command: go run sum_amd64_asm.go -out ../sum_amd64.s -pkg poly1305. DO NOT EDIT. + +//go:build gc && !purego + +// func update(state *macState, msg []byte) +TEXT ·update(SB), $0-32 + MOVQ state+0(FP), DI + MOVQ msg_base+8(FP), SI + MOVQ msg_len+16(FP), R15 + MOVQ (DI), R8 + MOVQ 8(DI), R9 + MOVQ 16(DI), R10 + MOVQ 24(DI), R11 + MOVQ 32(DI), R12 + CMPQ R15, $0x10 + JB bytes_between_0_and_15 + +loop: + ADDQ (SI), R8 + ADCQ 8(SI), R9 + ADCQ $0x01, R10 + LEAQ 16(SI), SI + +multiply: + MOVQ R11, AX + MULQ R8 + MOVQ AX, BX + MOVQ DX, CX + MOVQ R11, AX + MULQ R9 + ADDQ AX, CX + ADCQ $0x00, DX + MOVQ R11, R13 + IMULQ R10, R13 + ADDQ DX, R13 + MOVQ R12, AX + MULQ R8 + ADDQ AX, CX + ADCQ $0x00, DX + MOVQ DX, R8 + MOVQ R12, R14 + IMULQ R10, R14 + MOVQ R12, AX + MULQ R9 + ADDQ AX, R13 + ADCQ DX, R14 + ADDQ R8, R13 + ADCQ $0x00, R14 + MOVQ BX, R8 + MOVQ CX, R9 + MOVQ R13, R10 + ANDQ $0x03, R10 + MOVQ R13, BX + ANDQ $-4, BX + ADDQ BX, R8 + ADCQ R14, R9 + ADCQ $0x00, R10 + SHRQ $0x02, R14, R13 + SHRQ $0x02, R14 + ADDQ R13, R8 + ADCQ R14, R9 + ADCQ $0x00, R10 + SUBQ $0x10, R15 + CMPQ R15, $0x10 + JAE loop + +bytes_between_0_and_15: + TESTQ R15, R15 + JZ done + MOVQ $0x00000001, BX + XORQ CX, CX + XORQ R13, R13 + ADDQ R15, SI + +flush_buffer: + SHLQ $0x08, BX, CX + SHLQ $0x08, BX + MOVB -1(SI), R13 + XORQ R13, BX + DECQ SI + DECQ R15 + JNZ flush_buffer + ADDQ BX, R8 + ADCQ CX, R9 + ADCQ $0x00, R10 + MOVQ $0x00000010, R15 + JMP multiply + +done: + MOVQ R8, (DI) + MOVQ R9, 8(DI) + MOVQ R10, 16(DI) + RET diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_asm.go b/vendor/golang.org/x/crypto/internal/poly1305/sum_asm.go new file mode 100644 index 0000000..315b84a --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_asm.go @@ -0,0 +1,47 @@ +// 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. + +//go:build gc && !purego && (amd64 || loong64 || ppc64 || ppc64le) + +package poly1305 + +//go:noescape +func update(state *macState, msg []byte) + +// mac is a wrapper for macGeneric that redirects calls that would have gone to +// updateGeneric to update. +// +// Its Write and Sum methods are otherwise identical to the macGeneric ones, but +// using function pointers would carry a major performance cost. +type mac struct{ macGeneric } + +func (h *mac) Write(p []byte) (int, error) { + nn := len(p) + if h.offset > 0 { + n := copy(h.buffer[h.offset:], p) + if h.offset+n < TagSize { + h.offset += n + return nn, nil + } + p = p[n:] + h.offset = 0 + update(&h.macState, h.buffer[:]) + } + if n := len(p) - (len(p) % TagSize); n > 0 { + update(&h.macState, p[:n]) + p = p[n:] + } + if len(p) > 0 { + h.offset += copy(h.buffer[h.offset:], p) + } + return nn, nil +} + +func (h *mac) Sum(out *[16]byte) { + state := h.macState + if h.offset > 0 { + update(&state, h.buffer[:h.offset]) + } + finalize(out, &state.h, &state.s) +} diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_generic.go b/vendor/golang.org/x/crypto/internal/poly1305/sum_generic.go new file mode 100644 index 0000000..ec2202b --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_generic.go @@ -0,0 +1,312 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file provides the generic implementation of Sum and MAC. Other files +// might provide optimized assembly implementations of some of this code. + +package poly1305 + +import ( + "encoding/binary" + "math/bits" +) + +// Poly1305 [RFC 7539] is a relatively simple algorithm: the authentication tag +// for a 64 bytes message is approximately +// +// s + m[0:16] * r⁴ + m[16:32] * r³ + m[32:48] * r² + m[48:64] * r mod 2¹³⁰ - 5 +// +// for some secret r and s. It can be computed sequentially like +// +// for len(msg) > 0: +// h += read(msg, 16) +// h *= r +// h %= 2¹³⁰ - 5 +// return h + s +// +// All the complexity is about doing performant constant-time math on numbers +// larger than any available numeric type. + +func sumGeneric(out *[TagSize]byte, msg []byte, key *[32]byte) { + h := newMACGeneric(key) + h.Write(msg) + h.Sum(out) +} + +func newMACGeneric(key *[32]byte) macGeneric { + m := macGeneric{} + initialize(key, &m.macState) + return m +} + +// macState holds numbers in saturated 64-bit little-endian limbs. That is, +// the value of [x0, x1, x2] is x[0] + x[1] * 2⁶⁴ + x[2] * 2¹²⁸. +type macState struct { + // h is the main accumulator. It is to be interpreted modulo 2¹³⁰ - 5, but + // can grow larger during and after rounds. It must, however, remain below + // 2 * (2¹³⁰ - 5). + h [3]uint64 + // r and s are the private key components. + r [2]uint64 + s [2]uint64 +} + +type macGeneric struct { + macState + + buffer [TagSize]byte + offset int +} + +// Write splits the incoming message into TagSize chunks, and passes them to +// update. It buffers incomplete chunks. +func (h *macGeneric) Write(p []byte) (int, error) { + nn := len(p) + if h.offset > 0 { + n := copy(h.buffer[h.offset:], p) + if h.offset+n < TagSize { + h.offset += n + return nn, nil + } + p = p[n:] + h.offset = 0 + updateGeneric(&h.macState, h.buffer[:]) + } + if n := len(p) - (len(p) % TagSize); n > 0 { + updateGeneric(&h.macState, p[:n]) + p = p[n:] + } + if len(p) > 0 { + h.offset += copy(h.buffer[h.offset:], p) + } + return nn, nil +} + +// Sum flushes the last incomplete chunk from the buffer, if any, and generates +// the MAC output. It does not modify its state, in order to allow for multiple +// calls to Sum, even if no Write is allowed after Sum. +func (h *macGeneric) Sum(out *[TagSize]byte) { + state := h.macState + if h.offset > 0 { + updateGeneric(&state, h.buffer[:h.offset]) + } + finalize(out, &state.h, &state.s) +} + +// [rMask0, rMask1] is the specified Poly1305 clamping mask in little-endian. It +// clears some bits of the secret coefficient to make it possible to implement +// multiplication more efficiently. +const ( + rMask0 = 0x0FFFFFFC0FFFFFFF + rMask1 = 0x0FFFFFFC0FFFFFFC +) + +// initialize loads the 256-bit key into the two 128-bit secret values r and s. +func initialize(key *[32]byte, m *macState) { + m.r[0] = binary.LittleEndian.Uint64(key[0:8]) & rMask0 + m.r[1] = binary.LittleEndian.Uint64(key[8:16]) & rMask1 + m.s[0] = binary.LittleEndian.Uint64(key[16:24]) + m.s[1] = binary.LittleEndian.Uint64(key[24:32]) +} + +// uint128 holds a 128-bit number as two 64-bit limbs, for use with the +// bits.Mul64 and bits.Add64 intrinsics. +type uint128 struct { + lo, hi uint64 +} + +func mul64(a, b uint64) uint128 { + hi, lo := bits.Mul64(a, b) + return uint128{lo, hi} +} + +func add128(a, b uint128) uint128 { + lo, c := bits.Add64(a.lo, b.lo, 0) + hi, c := bits.Add64(a.hi, b.hi, c) + if c != 0 { + panic("poly1305: unexpected overflow") + } + return uint128{lo, hi} +} + +func shiftRightBy2(a uint128) uint128 { + a.lo = a.lo>>2 | (a.hi&3)<<62 + a.hi = a.hi >> 2 + return a +} + +// updateGeneric absorbs msg into the state.h accumulator. For each chunk m of +// 128 bits of message, it computes +// +// h₊ = (h + m) * r mod 2¹³⁰ - 5 +// +// If the msg length is not a multiple of TagSize, it assumes the last +// incomplete chunk is the final one. +func updateGeneric(state *macState, msg []byte) { + h0, h1, h2 := state.h[0], state.h[1], state.h[2] + r0, r1 := state.r[0], state.r[1] + + for len(msg) > 0 { + var c uint64 + + // For the first step, h + m, we use a chain of bits.Add64 intrinsics. + // The resulting value of h might exceed 2¹³⁰ - 5, but will be partially + // reduced at the end of the multiplication below. + // + // The spec requires us to set a bit just above the message size, not to + // hide leading zeroes. For full chunks, that's 1 << 128, so we can just + // add 1 to the most significant (2¹²⁸) limb, h2. + if len(msg) >= TagSize { + h0, c = bits.Add64(h0, binary.LittleEndian.Uint64(msg[0:8]), 0) + h1, c = bits.Add64(h1, binary.LittleEndian.Uint64(msg[8:16]), c) + h2 += c + 1 + + msg = msg[TagSize:] + } else { + var buf [TagSize]byte + copy(buf[:], msg) + buf[len(msg)] = 1 + + h0, c = bits.Add64(h0, binary.LittleEndian.Uint64(buf[0:8]), 0) + h1, c = bits.Add64(h1, binary.LittleEndian.Uint64(buf[8:16]), c) + h2 += c + + msg = nil + } + + // Multiplication of big number limbs is similar to elementary school + // columnar multiplication. Instead of digits, there are 64-bit limbs. + // + // We are multiplying a 3 limbs number, h, by a 2 limbs number, r. + // + // h2 h1 h0 x + // r1 r0 = + // ---------------- + // h2r0 h1r0 h0r0 <-- individual 128-bit products + // + h2r1 h1r1 h0r1 + // ------------------------ + // m3 m2 m1 m0 <-- result in 128-bit overlapping limbs + // ------------------------ + // m3.hi m2.hi m1.hi m0.hi <-- carry propagation + // + m3.lo m2.lo m1.lo m0.lo + // ------------------------------- + // t4 t3 t2 t1 t0 <-- final result in 64-bit limbs + // + // The main difference from pen-and-paper multiplication is that we do + // carry propagation in a separate step, as if we wrote two digit sums + // at first (the 128-bit limbs), and then carried the tens all at once. + + h0r0 := mul64(h0, r0) + h1r0 := mul64(h1, r0) + h2r0 := mul64(h2, r0) + h0r1 := mul64(h0, r1) + h1r1 := mul64(h1, r1) + h2r1 := mul64(h2, r1) + + // Since h2 is known to be at most 7 (5 + 1 + 1), and r0 and r1 have their + // top 4 bits cleared by rMask{0,1}, we know that their product is not going + // to overflow 64 bits, so we can ignore the high part of the products. + // + // This also means that the product doesn't have a fifth limb (t4). + if h2r0.hi != 0 { + panic("poly1305: unexpected overflow") + } + if h2r1.hi != 0 { + panic("poly1305: unexpected overflow") + } + + m0 := h0r0 + m1 := add128(h1r0, h0r1) // These two additions don't overflow thanks again + m2 := add128(h2r0, h1r1) // to the 4 masked bits at the top of r0 and r1. + m3 := h2r1 + + t0 := m0.lo + t1, c := bits.Add64(m1.lo, m0.hi, 0) + t2, c := bits.Add64(m2.lo, m1.hi, c) + t3, _ := bits.Add64(m3.lo, m2.hi, c) + + // Now we have the result as 4 64-bit limbs, and we need to reduce it + // modulo 2¹³⁰ - 5. The special shape of this Crandall prime lets us do + // a cheap partial reduction according to the reduction identity + // + // c * 2¹³⁰ + n = c * 5 + n mod 2¹³⁰ - 5 + // + // because 2¹³⁰ = 5 mod 2¹³⁰ - 5. Partial reduction since the result is + // likely to be larger than 2¹³⁰ - 5, but still small enough to fit the + // assumptions we make about h in the rest of the code. + // + // See also https://speakerdeck.com/gtank/engineering-prime-numbers?slide=23 + + // We split the final result at the 2¹³⁰ mark into h and cc, the carry. + // Note that the carry bits are effectively shifted left by 2, in other + // words, cc = c * 4 for the c in the reduction identity. + h0, h1, h2 = t0, t1, t2&maskLow2Bits + cc := uint128{t2 & maskNotLow2Bits, t3} + + // To add c * 5 to h, we first add cc = c * 4, and then add (cc >> 2) = c. + + h0, c = bits.Add64(h0, cc.lo, 0) + h1, c = bits.Add64(h1, cc.hi, c) + h2 += c + + cc = shiftRightBy2(cc) + + h0, c = bits.Add64(h0, cc.lo, 0) + h1, c = bits.Add64(h1, cc.hi, c) + h2 += c + + // h2 is at most 3 + 1 + 1 = 5, making the whole of h at most + // + // 5 * 2¹²⁸ + (2¹²⁸ - 1) = 6 * 2¹²⁸ - 1 + } + + state.h[0], state.h[1], state.h[2] = h0, h1, h2 +} + +const ( + maskLow2Bits uint64 = 0x0000000000000003 + maskNotLow2Bits uint64 = ^maskLow2Bits +) + +// select64 returns x if v == 1 and y if v == 0, in constant time. +func select64(v, x, y uint64) uint64 { return ^(v-1)&x | (v-1)&y } + +// [p0, p1, p2] is 2¹³⁰ - 5 in little endian order. +const ( + p0 = 0xFFFFFFFFFFFFFFFB + p1 = 0xFFFFFFFFFFFFFFFF + p2 = 0x0000000000000003 +) + +// finalize completes the modular reduction of h and computes +// +// out = h + s mod 2¹²⁸ +func finalize(out *[TagSize]byte, h *[3]uint64, s *[2]uint64) { + h0, h1, h2 := h[0], h[1], h[2] + + // After the partial reduction in updateGeneric, h might be more than + // 2¹³⁰ - 5, but will be less than 2 * (2¹³⁰ - 5). To complete the reduction + // in constant time, we compute t = h - (2¹³⁰ - 5), and select h as the + // result if the subtraction underflows, and t otherwise. + + hMinusP0, b := bits.Sub64(h0, p0, 0) + hMinusP1, b := bits.Sub64(h1, p1, b) + _, b = bits.Sub64(h2, p2, b) + + // h = h if h < p else h - p + h0 = select64(b, h0, hMinusP0) + h1 = select64(b, h1, hMinusP1) + + // Finally, we compute the last Poly1305 step + // + // tag = h + s mod 2¹²⁸ + // + // by just doing a wide addition with the 128 low bits of h and discarding + // the overflow. + h0, c := bits.Add64(h0, s[0], 0) + h1, _ = bits.Add64(h1, s[1], c) + + binary.LittleEndian.PutUint64(out[0:8], h0) + binary.LittleEndian.PutUint64(out[8:16], h1) +} diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_loong64.s b/vendor/golang.org/x/crypto/internal/poly1305/sum_loong64.s new file mode 100644 index 0000000..bc8361d --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_loong64.s @@ -0,0 +1,123 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego + +// func update(state *macState, msg []byte) +TEXT ·update(SB), $0-32 + MOVV state+0(FP), R4 + MOVV msg_base+8(FP), R5 + MOVV msg_len+16(FP), R6 + + MOVV $0x10, R7 + + MOVV (R4), R8 // h0 + MOVV 8(R4), R9 // h1 + MOVV 16(R4), R10 // h2 + MOVV 24(R4), R11 // r0 + MOVV 32(R4), R12 // r1 + + BLT R6, R7, bytes_between_0_and_15 + +loop: + MOVV (R5), R14 // msg[0:8] + MOVV 8(R5), R16 // msg[8:16] + ADDV R14, R8, R8 // h0 (x1 + y1 = z1', if z1' < x1 then z1' overflow) + ADDV R16, R9, R27 + SGTU R14, R8, R24 // h0.carry + SGTU R9, R27, R28 + ADDV R27, R24, R9 // h1 + SGTU R27, R9, R24 + OR R24, R28, R24 // h1.carry + ADDV $0x01, R24, R24 + ADDV R10, R24, R10 // h2 + + ADDV $16, R5, R5 // msg = msg[16:] + +multiply: + MULV R8, R11, R14 // h0r0.lo + MULHVU R8, R11, R15 // h0r0.hi + MULV R9, R11, R13 // h1r0.lo + MULHVU R9, R11, R16 // h1r0.hi + ADDV R13, R15, R15 + SGTU R13, R15, R24 + ADDV R24, R16, R16 + MULV R10, R11, R25 + ADDV R16, R25, R25 + MULV R8, R12, R13 // h0r1.lo + MULHVU R8, R12, R16 // h0r1.hi + ADDV R13, R15, R15 + SGTU R13, R15, R24 + ADDV R24, R16, R16 + MOVV R16, R8 + MULV R10, R12, R26 // h2r1 + MULV R9, R12, R13 // h1r1.lo + MULHVU R9, R12, R16 // h1r1.hi + ADDV R13, R25, R25 + ADDV R16, R26, R27 + SGTU R13, R25, R24 + ADDV R27, R24, R26 + ADDV R8, R25, R25 + SGTU R8, R25, R24 + ADDV R24, R26, R26 + AND $3, R25, R10 + AND $-4, R25, R17 + ADDV R17, R14, R8 + ADDV R26, R15, R27 + SGTU R17, R8, R24 + SGTU R26, R27, R28 + ADDV R27, R24, R9 + SGTU R27, R9, R24 + OR R24, R28, R24 + ADDV R24, R10, R10 + SLLV $62, R26, R27 + SRLV $2, R25, R28 + SRLV $2, R26, R26 + OR R27, R28, R25 + ADDV R25, R8, R8 + ADDV R26, R9, R27 + SGTU R25, R8, R24 + SGTU R26, R27, R28 + ADDV R27, R24, R9 + SGTU R27, R9, R24 + OR R24, R28, R24 + ADDV R24, R10, R10 + + SUBV $16, R6, R6 + BGE R6, R7, loop + +bytes_between_0_and_15: + BEQ R6, R0, done + MOVV $1, R14 + XOR R15, R15 + ADDV R6, R5, R5 + +flush_buffer: + MOVBU -1(R5), R25 + SRLV $56, R14, R24 + SLLV $8, R15, R28 + SLLV $8, R14, R14 + OR R24, R28, R15 + XOR R25, R14, R14 + SUBV $1, R6, R6 + SUBV $1, R5, R5 + BNE R6, R0, flush_buffer + + ADDV R14, R8, R8 + SGTU R14, R8, R24 + ADDV R15, R9, R27 + SGTU R15, R27, R28 + ADDV R27, R24, R9 + SGTU R27, R9, R24 + OR R24, R28, R24 + ADDV R10, R24, R10 + + MOVV $16, R6 + JMP multiply + +done: + MOVV R8, (R4) + MOVV R9, 8(R4) + MOVV R10, 16(R4) + RET diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.s b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.s new file mode 100644 index 0000000..6899a1d --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.s @@ -0,0 +1,187 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego && (ppc64 || ppc64le) + +#include "textflag.h" + +// This was ported from the amd64 implementation. + +#ifdef GOARCH_ppc64le +#define LE_MOVD MOVD +#define LE_MOVWZ MOVWZ +#define LE_MOVHZ MOVHZ +#else +#define LE_MOVD MOVDBR +#define LE_MOVWZ MOVWBR +#define LE_MOVHZ MOVHBR +#endif + +#define POLY1305_ADD(msg, h0, h1, h2, t0, t1, t2) \ + LE_MOVD (msg)( R0), t0; \ + LE_MOVD (msg)(R24), t1; \ + MOVD $1, t2; \ + ADDC t0, h0, h0; \ + ADDE t1, h1, h1; \ + ADDE t2, h2; \ + ADD $16, msg + +#define POLY1305_MUL(h0, h1, h2, r0, r1, t0, t1, t2, t3, t4, t5) \ + MULLD r0, h0, t0; \ + MULHDU r0, h0, t1; \ + MULLD r0, h1, t4; \ + MULHDU r0, h1, t5; \ + ADDC t4, t1, t1; \ + MULLD r0, h2, t2; \ + MULHDU r1, h0, t4; \ + MULLD r1, h0, h0; \ + ADDE t5, t2, t2; \ + ADDC h0, t1, t1; \ + MULLD h2, r1, t3; \ + ADDZE t4, h0; \ + MULHDU r1, h1, t5; \ + MULLD r1, h1, t4; \ + ADDC t4, t2, t2; \ + ADDE t5, t3, t3; \ + ADDC h0, t2, t2; \ + MOVD $-4, t4; \ + ADDZE t3; \ + RLDICL $0, t2, $62, h2; \ + AND t2, t4, h0; \ + ADDC t0, h0, h0; \ + ADDE t3, t1, h1; \ + SLD $62, t3, t4; \ + SRD $2, t2; \ + ADDZE h2; \ + OR t4, t2, t2; \ + SRD $2, t3; \ + ADDC t2, h0, h0; \ + ADDE t3, h1, h1; \ + ADDZE h2 + +// func update(state *[7]uint64, msg []byte) +TEXT ·update(SB), $0-32 + MOVD state+0(FP), R3 + MOVD msg_base+8(FP), R4 + MOVD msg_len+16(FP), R5 + + MOVD 0(R3), R8 // h0 + MOVD 8(R3), R9 // h1 + MOVD 16(R3), R10 // h2 + MOVD 24(R3), R11 // r0 + MOVD 32(R3), R12 // r1 + + MOVD $8, R24 + + CMP R5, $16 + BLT bytes_between_0_and_15 + +loop: + POLY1305_ADD(R4, R8, R9, R10, R20, R21, R22) + + PCALIGN $16 +multiply: + POLY1305_MUL(R8, R9, R10, R11, R12, R16, R17, R18, R14, R20, R21) + ADD $-16, R5 + CMP R5, $16 + BGE loop + +bytes_between_0_and_15: + CMP R5, $0 + BEQ done + MOVD $0, R16 // h0 + MOVD $0, R17 // h1 + +flush_buffer: + CMP R5, $8 + BLE just1 + + MOVD $8, R21 + SUB R21, R5, R21 + + // Greater than 8 -- load the rightmost remaining bytes in msg + // and put into R17 (h1) + LE_MOVD (R4)(R21), R17 + MOVD $16, R22 + + // Find the offset to those bytes + SUB R5, R22, R22 + SLD $3, R22 + + // Shift to get only the bytes in msg + SRD R22, R17, R17 + + // Put 1 at high end + MOVD $1, R23 + SLD $3, R21 + SLD R21, R23, R23 + OR R23, R17, R17 + + // Remainder is 8 + MOVD $8, R5 + +just1: + CMP R5, $8 + BLT less8 + + // Exactly 8 + LE_MOVD (R4), R16 + + CMP R17, $0 + + // Check if we've already set R17; if not + // set 1 to indicate end of msg. + BNE carry + MOVD $1, R17 + BR carry + +less8: + MOVD $0, R16 // h0 + MOVD $0, R22 // shift count + CMP R5, $4 + BLT less4 + LE_MOVWZ (R4), R16 + ADD $4, R4 + ADD $-4, R5 + MOVD $32, R22 + +less4: + CMP R5, $2 + BLT less2 + LE_MOVHZ (R4), R21 + SLD R22, R21, R21 + OR R16, R21, R16 + ADD $16, R22 + ADD $-2, R5 + ADD $2, R4 + +less2: + CMP R5, $0 + BEQ insert1 + MOVBZ (R4), R21 + SLD R22, R21, R21 + OR R16, R21, R16 + ADD $8, R22 + +insert1: + // Insert 1 at end of msg + MOVD $1, R21 + SLD R22, R21, R21 + OR R16, R21, R16 + +carry: + // Add new values to h0, h1, h2 + ADDC R16, R8 + ADDE R17, R9 + ADDZE R10, R10 + MOVD $16, R5 + ADD R5, R4 + BR multiply + +done: + // Save h0, h1, h2 in state + MOVD R8, 0(R3) + MOVD R9, 8(R3) + MOVD R10, 16(R3) + RET diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.go b/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.go new file mode 100644 index 0000000..e1d033a --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.go @@ -0,0 +1,76 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego + +package poly1305 + +import ( + "golang.org/x/sys/cpu" +) + +// updateVX is an assembly implementation of Poly1305 that uses vector +// instructions. It must only be called if the vector facility (vx) is +// available. +// +//go:noescape +func updateVX(state *macState, msg []byte) + +// mac is a replacement for macGeneric that uses a larger buffer and redirects +// calls that would have gone to updateGeneric to updateVX if the vector +// facility is installed. +// +// A larger buffer is required for good performance because the vector +// implementation has a higher fixed cost per call than the generic +// implementation. +type mac struct { + macState + + buffer [16 * TagSize]byte // size must be a multiple of block size (16) + offset int +} + +func (h *mac) Write(p []byte) (int, error) { + nn := len(p) + if h.offset > 0 { + n := copy(h.buffer[h.offset:], p) + if h.offset+n < len(h.buffer) { + h.offset += n + return nn, nil + } + p = p[n:] + h.offset = 0 + if cpu.S390X.HasVX { + updateVX(&h.macState, h.buffer[:]) + } else { + updateGeneric(&h.macState, h.buffer[:]) + } + } + + tail := len(p) % len(h.buffer) // number of bytes to copy into buffer + body := len(p) - tail // number of bytes to process now + if body > 0 { + if cpu.S390X.HasVX { + updateVX(&h.macState, p[:body]) + } else { + updateGeneric(&h.macState, p[:body]) + } + } + h.offset = copy(h.buffer[:], p[body:]) // copy tail bytes - can be 0 + return nn, nil +} + +func (h *mac) Sum(out *[TagSize]byte) { + state := h.macState + remainder := h.buffer[:h.offset] + + // Use the generic implementation if we have 2 or fewer blocks left + // to sum. The vector implementation has a higher startup time. + if cpu.S390X.HasVX && len(remainder) > 2*TagSize { + updateVX(&state, remainder) + } else if len(remainder) > 0 { + updateGeneric(&state, remainder) + } + finalize(out, &state.h, &state.s) +} diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.s b/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.s new file mode 100644 index 0000000..0fe3a7c --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.s @@ -0,0 +1,503 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego + +#include "textflag.h" + +// This implementation of Poly1305 uses the vector facility (vx) +// to process up to 2 blocks (32 bytes) per iteration using an +// algorithm based on the one described in: +// +// NEON crypto, Daniel J. Bernstein & Peter Schwabe +// https://cryptojedi.org/papers/neoncrypto-20120320.pdf +// +// This algorithm uses 5 26-bit limbs to represent a 130-bit +// value. These limbs are, for the most part, zero extended and +// placed into 64-bit vector register elements. Each vector +// register is 128-bits wide and so holds 2 of these elements. +// Using 26-bit limbs allows us plenty of headroom to accommodate +// accumulations before and after multiplication without +// overflowing either 32-bits (before multiplication) or 64-bits +// (after multiplication). +// +// In order to parallelise the operations required to calculate +// the sum we use two separate accumulators and then sum those +// in an extra final step. For compatibility with the generic +// implementation we perform this summation at the end of every +// updateVX call. +// +// To use two accumulators we must multiply the message blocks +// by r² rather than r. Only the final message block should be +// multiplied by r. +// +// Example: +// +// We want to calculate the sum (h) for a 64 byte message (m): +// +// h = m[0:16]r⁴ + m[16:32]r³ + m[32:48]r² + m[48:64]r +// +// To do this we split the calculation into the even indices +// and odd indices of the message. These form our SIMD 'lanes': +// +// h = m[ 0:16]r⁴ + m[32:48]r² + <- lane 0 +// m[16:32]r³ + m[48:64]r <- lane 1 +// +// To calculate this iteratively we refactor so that both lanes +// are written in terms of r² and r: +// +// h = (m[ 0:16]r² + m[32:48])r² + <- lane 0 +// (m[16:32]r² + m[48:64])r <- lane 1 +// ^ ^ +// | coefficients for second iteration +// coefficients for first iteration +// +// So in this case we would have two iterations. In the first +// both lanes are multiplied by r². In the second only the +// first lane is multiplied by r² and the second lane is +// instead multiplied by r. This gives use the odd and even +// powers of r that we need from the original equation. +// +// Notation: +// +// h - accumulator +// r - key +// m - message +// +// [a, b] - SIMD register holding two 64-bit values +// [a, b, c, d] - SIMD register holding four 32-bit values +// xᵢ[n] - limb n of variable x with bit width i +// +// Limbs are expressed in little endian order, so for 26-bit +// limbs x₂₆[4] will be the most significant limb and x₂₆[0] +// will be the least significant limb. + +// masking constants +#define MOD24 V0 // [0x0000000000ffffff, 0x0000000000ffffff] - mask low 24-bits +#define MOD26 V1 // [0x0000000003ffffff, 0x0000000003ffffff] - mask low 26-bits + +// expansion constants (see EXPAND macro) +#define EX0 V2 +#define EX1 V3 +#define EX2 V4 + +// key (r², r or 1 depending on context) +#define R_0 V5 +#define R_1 V6 +#define R_2 V7 +#define R_3 V8 +#define R_4 V9 + +// precalculated coefficients (5r², 5r or 0 depending on context) +#define R5_1 V10 +#define R5_2 V11 +#define R5_3 V12 +#define R5_4 V13 + +// message block (m) +#define M_0 V14 +#define M_1 V15 +#define M_2 V16 +#define M_3 V17 +#define M_4 V18 + +// accumulator (h) +#define H_0 V19 +#define H_1 V20 +#define H_2 V21 +#define H_3 V22 +#define H_4 V23 + +// temporary registers (for short-lived values) +#define T_0 V24 +#define T_1 V25 +#define T_2 V26 +#define T_3 V27 +#define T_4 V28 + +GLOBL ·constants<>(SB), RODATA, $0x30 +// EX0 +DATA ·constants<>+0x00(SB)/8, $0x0006050403020100 +DATA ·constants<>+0x08(SB)/8, $0x1016151413121110 +// EX1 +DATA ·constants<>+0x10(SB)/8, $0x060c0b0a09080706 +DATA ·constants<>+0x18(SB)/8, $0x161c1b1a19181716 +// EX2 +DATA ·constants<>+0x20(SB)/8, $0x0d0d0d0d0d0f0e0d +DATA ·constants<>+0x28(SB)/8, $0x1d1d1d1d1d1f1e1d + +// MULTIPLY multiplies each lane of f and g, partially reduced +// modulo 2¹³⁰ - 5. The result, h, consists of partial products +// in each lane that need to be reduced further to produce the +// final result. +// +// h₁₃₀ = (f₁₃₀g₁₃₀) % 2¹³⁰ + (5f₁₃₀g₁₃₀) / 2¹³⁰ +// +// Note that the multiplication by 5 of the high bits is +// achieved by precalculating the multiplication of four of the +// g coefficients by 5. These are g51-g54. +#define MULTIPLY(f0, f1, f2, f3, f4, g0, g1, g2, g3, g4, g51, g52, g53, g54, h0, h1, h2, h3, h4) \ + VMLOF f0, g0, h0 \ + VMLOF f0, g3, h3 \ + VMLOF f0, g1, h1 \ + VMLOF f0, g4, h4 \ + VMLOF f0, g2, h2 \ + VMLOF f1, g54, T_0 \ + VMLOF f1, g2, T_3 \ + VMLOF f1, g0, T_1 \ + VMLOF f1, g3, T_4 \ + VMLOF f1, g1, T_2 \ + VMALOF f2, g53, h0, h0 \ + VMALOF f2, g1, h3, h3 \ + VMALOF f2, g54, h1, h1 \ + VMALOF f2, g2, h4, h4 \ + VMALOF f2, g0, h2, h2 \ + VMALOF f3, g52, T_0, T_0 \ + VMALOF f3, g0, T_3, T_3 \ + VMALOF f3, g53, T_1, T_1 \ + VMALOF f3, g1, T_4, T_4 \ + VMALOF f3, g54, T_2, T_2 \ + VMALOF f4, g51, h0, h0 \ + VMALOF f4, g54, h3, h3 \ + VMALOF f4, g52, h1, h1 \ + VMALOF f4, g0, h4, h4 \ + VMALOF f4, g53, h2, h2 \ + VAG T_0, h0, h0 \ + VAG T_3, h3, h3 \ + VAG T_1, h1, h1 \ + VAG T_4, h4, h4 \ + VAG T_2, h2, h2 + +// REDUCE performs the following carry operations in four +// stages, as specified in Bernstein & Schwabe: +// +// 1: h₂₆[0]->h₂₆[1] h₂₆[3]->h₂₆[4] +// 2: h₂₆[1]->h₂₆[2] h₂₆[4]->h₂₆[0] +// 3: h₂₆[0]->h₂₆[1] h₂₆[2]->h₂₆[3] +// 4: h₂₆[3]->h₂₆[4] +// +// The result is that all of the limbs are limited to 26-bits +// except for h₂₆[1] and h₂₆[4] which are limited to 27-bits. +// +// Note that although each limb is aligned at 26-bit intervals +// they may contain values that exceed 2²⁶ - 1, hence the need +// to carry the excess bits in each limb. +#define REDUCE(h0, h1, h2, h3, h4) \ + VESRLG $26, h0, T_0 \ + VESRLG $26, h3, T_1 \ + VN MOD26, h0, h0 \ + VN MOD26, h3, h3 \ + VAG T_0, h1, h1 \ + VAG T_1, h4, h4 \ + VESRLG $26, h1, T_2 \ + VESRLG $26, h4, T_3 \ + VN MOD26, h1, h1 \ + VN MOD26, h4, h4 \ + VESLG $2, T_3, T_4 \ + VAG T_3, T_4, T_4 \ + VAG T_2, h2, h2 \ + VAG T_4, h0, h0 \ + VESRLG $26, h2, T_0 \ + VESRLG $26, h0, T_1 \ + VN MOD26, h2, h2 \ + VN MOD26, h0, h0 \ + VAG T_0, h3, h3 \ + VAG T_1, h1, h1 \ + VESRLG $26, h3, T_2 \ + VN MOD26, h3, h3 \ + VAG T_2, h4, h4 + +// EXPAND splits the 128-bit little-endian values in0 and in1 +// into 26-bit big-endian limbs and places the results into +// the first and second lane of d₂₆[0:4] respectively. +// +// The EX0, EX1 and EX2 constants are arrays of byte indices +// for permutation. The permutation both reverses the bytes +// in the input and ensures the bytes are copied into the +// destination limb ready to be shifted into their final +// position. +#define EXPAND(in0, in1, d0, d1, d2, d3, d4) \ + VPERM in0, in1, EX0, d0 \ + VPERM in0, in1, EX1, d2 \ + VPERM in0, in1, EX2, d4 \ + VESRLG $26, d0, d1 \ + VESRLG $30, d2, d3 \ + VESRLG $4, d2, d2 \ + VN MOD26, d0, d0 \ // [in0₂₆[0], in1₂₆[0]] + VN MOD26, d3, d3 \ // [in0₂₆[3], in1₂₆[3]] + VN MOD26, d1, d1 \ // [in0₂₆[1], in1₂₆[1]] + VN MOD24, d4, d4 \ // [in0₂₆[4], in1₂₆[4]] + VN MOD26, d2, d2 // [in0₂₆[2], in1₂₆[2]] + +// func updateVX(state *macState, msg []byte) +TEXT ·updateVX(SB), NOSPLIT, $0 + MOVD state+0(FP), R1 + LMG msg+8(FP), R2, R3 // R2=msg_base, R3=msg_len + + // load EX0, EX1 and EX2 + MOVD $·constants<>(SB), R5 + VLM (R5), EX0, EX2 + + // generate masks + VGMG $(64-24), $63, MOD24 // [0x00ffffff, 0x00ffffff] + VGMG $(64-26), $63, MOD26 // [0x03ffffff, 0x03ffffff] + + // load h (accumulator) and r (key) from state + VZERO T_1 // [0, 0] + VL 0(R1), T_0 // [h₆₄[0], h₆₄[1]] + VLEG $0, 16(R1), T_1 // [h₆₄[2], 0] + VL 24(R1), T_2 // [r₆₄[0], r₆₄[1]] + VPDI $0, T_0, T_2, T_3 // [h₆₄[0], r₆₄[0]] + VPDI $5, T_0, T_2, T_4 // [h₆₄[1], r₆₄[1]] + + // unpack h and r into 26-bit limbs + // note: h₆₄[2] may have the low 3 bits set, so h₂₆[4] is a 27-bit value + VN MOD26, T_3, H_0 // [h₂₆[0], r₂₆[0]] + VZERO H_1 // [0, 0] + VZERO H_3 // [0, 0] + VGMG $(64-12-14), $(63-12), T_0 // [0x03fff000, 0x03fff000] - 26-bit mask with low 12 bits masked out + VESLG $24, T_1, T_1 // [h₆₄[2]<<24, 0] + VERIMG $-26&63, T_3, MOD26, H_1 // [h₂₆[1], r₂₆[1]] + VESRLG $+52&63, T_3, H_2 // [h₂₆[2], r₂₆[2]] - low 12 bits only + VERIMG $-14&63, T_4, MOD26, H_3 // [h₂₆[1], r₂₆[1]] + VESRLG $40, T_4, H_4 // [h₂₆[4], r₂₆[4]] - low 24 bits only + VERIMG $+12&63, T_4, T_0, H_2 // [h₂₆[2], r₂₆[2]] - complete + VO T_1, H_4, H_4 // [h₂₆[4], r₂₆[4]] - complete + + // replicate r across all 4 vector elements + VREPF $3, H_0, R_0 // [r₂₆[0], r₂₆[0], r₂₆[0], r₂₆[0]] + VREPF $3, H_1, R_1 // [r₂₆[1], r₂₆[1], r₂₆[1], r₂₆[1]] + VREPF $3, H_2, R_2 // [r₂₆[2], r₂₆[2], r₂₆[2], r₂₆[2]] + VREPF $3, H_3, R_3 // [r₂₆[3], r₂₆[3], r₂₆[3], r₂₆[3]] + VREPF $3, H_4, R_4 // [r₂₆[4], r₂₆[4], r₂₆[4], r₂₆[4]] + + // zero out lane 1 of h + VLEIG $1, $0, H_0 // [h₂₆[0], 0] + VLEIG $1, $0, H_1 // [h₂₆[1], 0] + VLEIG $1, $0, H_2 // [h₂₆[2], 0] + VLEIG $1, $0, H_3 // [h₂₆[3], 0] + VLEIG $1, $0, H_4 // [h₂₆[4], 0] + + // calculate 5r (ignore least significant limb) + VREPIF $5, T_0 + VMLF T_0, R_1, R5_1 // [5r₂₆[1], 5r₂₆[1], 5r₂₆[1], 5r₂₆[1]] + VMLF T_0, R_2, R5_2 // [5r₂₆[2], 5r₂₆[2], 5r₂₆[2], 5r₂₆[2]] + VMLF T_0, R_3, R5_3 // [5r₂₆[3], 5r₂₆[3], 5r₂₆[3], 5r₂₆[3]] + VMLF T_0, R_4, R5_4 // [5r₂₆[4], 5r₂₆[4], 5r₂₆[4], 5r₂₆[4]] + + // skip r² calculation if we are only calculating one block + CMPBLE R3, $16, skip + + // calculate r² + MULTIPLY(R_0, R_1, R_2, R_3, R_4, R_0, R_1, R_2, R_3, R_4, R5_1, R5_2, R5_3, R5_4, M_0, M_1, M_2, M_3, M_4) + REDUCE(M_0, M_1, M_2, M_3, M_4) + VGBM $0x0f0f, T_0 + VERIMG $0, M_0, T_0, R_0 // [r₂₆[0], r²₂₆[0], r₂₆[0], r²₂₆[0]] + VERIMG $0, M_1, T_0, R_1 // [r₂₆[1], r²₂₆[1], r₂₆[1], r²₂₆[1]] + VERIMG $0, M_2, T_0, R_2 // [r₂₆[2], r²₂₆[2], r₂₆[2], r²₂₆[2]] + VERIMG $0, M_3, T_0, R_3 // [r₂₆[3], r²₂₆[3], r₂₆[3], r²₂₆[3]] + VERIMG $0, M_4, T_0, R_4 // [r₂₆[4], r²₂₆[4], r₂₆[4], r²₂₆[4]] + + // calculate 5r² (ignore least significant limb) + VREPIF $5, T_0 + VMLF T_0, R_1, R5_1 // [5r₂₆[1], 5r²₂₆[1], 5r₂₆[1], 5r²₂₆[1]] + VMLF T_0, R_2, R5_2 // [5r₂₆[2], 5r²₂₆[2], 5r₂₆[2], 5r²₂₆[2]] + VMLF T_0, R_3, R5_3 // [5r₂₆[3], 5r²₂₆[3], 5r₂₆[3], 5r²₂₆[3]] + VMLF T_0, R_4, R5_4 // [5r₂₆[4], 5r²₂₆[4], 5r₂₆[4], 5r²₂₆[4]] + +loop: + CMPBLE R3, $32, b2 // 2 or fewer blocks remaining, need to change key coefficients + + // load next 2 blocks from message + VLM (R2), T_0, T_1 + + // update message slice + SUB $32, R3 + MOVD $32(R2), R2 + + // unpack message blocks into 26-bit big-endian limbs + EXPAND(T_0, T_1, M_0, M_1, M_2, M_3, M_4) + + // add 2¹²⁸ to each message block value + VLEIB $4, $1, M_4 + VLEIB $12, $1, M_4 + +multiply: + // accumulate the incoming message + VAG H_0, M_0, M_0 + VAG H_3, M_3, M_3 + VAG H_1, M_1, M_1 + VAG H_4, M_4, M_4 + VAG H_2, M_2, M_2 + + // multiply the accumulator by the key coefficient + MULTIPLY(M_0, M_1, M_2, M_3, M_4, R_0, R_1, R_2, R_3, R_4, R5_1, R5_2, R5_3, R5_4, H_0, H_1, H_2, H_3, H_4) + + // carry and partially reduce the partial products + REDUCE(H_0, H_1, H_2, H_3, H_4) + + CMPBNE R3, $0, loop + +finish: + // sum lane 0 and lane 1 and put the result in lane 1 + VZERO T_0 + VSUMQG H_0, T_0, H_0 + VSUMQG H_3, T_0, H_3 + VSUMQG H_1, T_0, H_1 + VSUMQG H_4, T_0, H_4 + VSUMQG H_2, T_0, H_2 + + // reduce again after summation + // TODO(mundaym): there might be a more efficient way to do this + // now that we only have 1 active lane. For example, we could + // simultaneously pack the values as we reduce them. + REDUCE(H_0, H_1, H_2, H_3, H_4) + + // carry h[1] through to h[4] so that only h[4] can exceed 2²⁶ - 1 + // TODO(mundaym): in testing this final carry was unnecessary. + // Needs a proof before it can be removed though. + VESRLG $26, H_1, T_1 + VN MOD26, H_1, H_1 + VAQ T_1, H_2, H_2 + VESRLG $26, H_2, T_2 + VN MOD26, H_2, H_2 + VAQ T_2, H_3, H_3 + VESRLG $26, H_3, T_3 + VN MOD26, H_3, H_3 + VAQ T_3, H_4, H_4 + + // h is now < 2(2¹³⁰ - 5) + // Pack each lane in h₂₆[0:4] into h₁₂₈[0:1]. + VESLG $26, H_1, H_1 + VESLG $26, H_3, H_3 + VO H_0, H_1, H_0 + VO H_2, H_3, H_2 + VESLG $4, H_2, H_2 + VLEIB $7, $48, H_1 + VSLB H_1, H_2, H_2 + VO H_0, H_2, H_0 + VLEIB $7, $104, H_1 + VSLB H_1, H_4, H_3 + VO H_3, H_0, H_0 + VLEIB $7, $24, H_1 + VSRLB H_1, H_4, H_1 + + // update state + VSTEG $1, H_0, 0(R1) + VSTEG $0, H_0, 8(R1) + VSTEG $1, H_1, 16(R1) + RET + +b2: // 2 or fewer blocks remaining + CMPBLE R3, $16, b1 + + // Load the 2 remaining blocks (17-32 bytes remaining). + MOVD $-17(R3), R0 // index of final byte to load modulo 16 + VL (R2), T_0 // load full 16 byte block + VLL R0, 16(R2), T_1 // load final (possibly partial) block and pad with zeros to 16 bytes + + // The Poly1305 algorithm requires that a 1 bit be appended to + // each message block. If the final block is less than 16 bytes + // long then it is easiest to insert the 1 before the message + // block is split into 26-bit limbs. If, on the other hand, the + // final message block is 16 bytes long then we append the 1 bit + // after expansion as normal. + MOVBZ $1, R0 + MOVD $-16(R3), R3 // index of byte in last block to insert 1 at (could be 16) + CMPBEQ R3, $16, 2(PC) // skip the insertion if the final block is 16 bytes long + VLVGB R3, R0, T_1 // insert 1 into the byte at index R3 + + // Split both blocks into 26-bit limbs in the appropriate lanes. + EXPAND(T_0, T_1, M_0, M_1, M_2, M_3, M_4) + + // Append a 1 byte to the end of the second to last block. + VLEIB $4, $1, M_4 + + // Append a 1 byte to the end of the last block only if it is a + // full 16 byte block. + CMPBNE R3, $16, 2(PC) + VLEIB $12, $1, M_4 + + // Finally, set up the coefficients for the final multiplication. + // We have previously saved r and 5r in the 32-bit even indexes + // of the R_[0-4] and R5_[1-4] coefficient registers. + // + // We want lane 0 to be multiplied by r² so that can be kept the + // same. We want lane 1 to be multiplied by r so we need to move + // the saved r value into the 32-bit odd index in lane 1 by + // rotating the 64-bit lane by 32. + VGBM $0x00ff, T_0 // [0, 0xffffffffffffffff] - mask lane 1 only + VERIMG $32, R_0, T_0, R_0 // [_, r²₂₆[0], _, r₂₆[0]] + VERIMG $32, R_1, T_0, R_1 // [_, r²₂₆[1], _, r₂₆[1]] + VERIMG $32, R_2, T_0, R_2 // [_, r²₂₆[2], _, r₂₆[2]] + VERIMG $32, R_3, T_0, R_3 // [_, r²₂₆[3], _, r₂₆[3]] + VERIMG $32, R_4, T_0, R_4 // [_, r²₂₆[4], _, r₂₆[4]] + VERIMG $32, R5_1, T_0, R5_1 // [_, 5r²₂₆[1], _, 5r₂₆[1]] + VERIMG $32, R5_2, T_0, R5_2 // [_, 5r²₂₆[2], _, 5r₂₆[2]] + VERIMG $32, R5_3, T_0, R5_3 // [_, 5r²₂₆[3], _, 5r₂₆[3]] + VERIMG $32, R5_4, T_0, R5_4 // [_, 5r²₂₆[4], _, 5r₂₆[4]] + + MOVD $0, R3 + BR multiply + +skip: + CMPBEQ R3, $0, finish + +b1: // 1 block remaining + + // Load the final block (1-16 bytes). This will be placed into + // lane 0. + MOVD $-1(R3), R0 + VLL R0, (R2), T_0 // pad to 16 bytes with zeros + + // The Poly1305 algorithm requires that a 1 bit be appended to + // each message block. If the final block is less than 16 bytes + // long then it is easiest to insert the 1 before the message + // block is split into 26-bit limbs. If, on the other hand, the + // final message block is 16 bytes long then we append the 1 bit + // after expansion as normal. + MOVBZ $1, R0 + CMPBEQ R3, $16, 2(PC) + VLVGB R3, R0, T_0 + + // Set the message block in lane 1 to the value 0 so that it + // can be accumulated without affecting the final result. + VZERO T_1 + + // Split the final message block into 26-bit limbs in lane 0. + // Lane 1 will be contain 0. + EXPAND(T_0, T_1, M_0, M_1, M_2, M_3, M_4) + + // Append a 1 byte to the end of the last block only if it is a + // full 16 byte block. + CMPBNE R3, $16, 2(PC) + VLEIB $4, $1, M_4 + + // We have previously saved r and 5r in the 32-bit even indexes + // of the R_[0-4] and R5_[1-4] coefficient registers. + // + // We want lane 0 to be multiplied by r so we need to move the + // saved r value into the 32-bit odd index in lane 0. We want + // lane 1 to be set to the value 1. This makes multiplication + // a no-op. We do this by setting lane 1 in every register to 0 + // and then just setting the 32-bit index 3 in R_0 to 1. + VZERO T_0 + MOVD $0, R0 + MOVD $0x10111213, R12 + VLVGP R12, R0, T_1 // [_, 0x10111213, _, 0x00000000] + VPERM T_0, R_0, T_1, R_0 // [_, r₂₆[0], _, 0] + VPERM T_0, R_1, T_1, R_1 // [_, r₂₆[1], _, 0] + VPERM T_0, R_2, T_1, R_2 // [_, r₂₆[2], _, 0] + VPERM T_0, R_3, T_1, R_3 // [_, r₂₆[3], _, 0] + VPERM T_0, R_4, T_1, R_4 // [_, r₂₆[4], _, 0] + VPERM T_0, R5_1, T_1, R5_1 // [_, 5r₂₆[1], _, 0] + VPERM T_0, R5_2, T_1, R5_2 // [_, 5r₂₆[2], _, 0] + VPERM T_0, R5_3, T_1, R5_3 // [_, 5r₂₆[3], _, 0] + VPERM T_0, R5_4, T_1, R5_4 // [_, 5r₂₆[4], _, 0] + + // Set the value of lane 1 to be 1. + VLEIF $3, $1, R_0 // [_, r₂₆[0], _, 1] + + MOVD $0, R3 + BR multiply diff --git a/vendor/golang.org/x/mod/LICENSE b/vendor/golang.org/x/mod/LICENSE new file mode 100644 index 0000000..2a7cf70 --- /dev/null +++ b/vendor/golang.org/x/mod/LICENSE @@ -0,0 +1,27 @@ +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/mod/PATENTS b/vendor/golang.org/x/mod/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/vendor/golang.org/x/mod/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go b/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go new file mode 100644 index 0000000..150f887 --- /dev/null +++ b/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go @@ -0,0 +1,78 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package lazyregexp is a thin wrapper over regexp, allowing the use of global +// regexp variables without forcing them to be compiled at init. +package lazyregexp + +import ( + "os" + "regexp" + "strings" + "sync" +) + +// Regexp is a wrapper around [regexp.Regexp], where the underlying regexp will be +// compiled the first time it is needed. +type Regexp struct { + str string + once sync.Once + rx *regexp.Regexp +} + +func (r *Regexp) re() *regexp.Regexp { + r.once.Do(r.build) + return r.rx +} + +func (r *Regexp) build() { + r.rx = regexp.MustCompile(r.str) + r.str = "" +} + +func (r *Regexp) FindSubmatch(s []byte) [][]byte { + return r.re().FindSubmatch(s) +} + +func (r *Regexp) FindStringSubmatch(s string) []string { + return r.re().FindStringSubmatch(s) +} + +func (r *Regexp) FindStringSubmatchIndex(s string) []int { + return r.re().FindStringSubmatchIndex(s) +} + +func (r *Regexp) ReplaceAllString(src, repl string) string { + return r.re().ReplaceAllString(src, repl) +} + +func (r *Regexp) FindString(s string) string { + return r.re().FindString(s) +} + +func (r *Regexp) FindAllString(s string, n int) []string { + return r.re().FindAllString(s, n) +} + +func (r *Regexp) MatchString(s string) bool { + return r.re().MatchString(s) +} + +func (r *Regexp) SubexpNames() []string { + return r.re().SubexpNames() +} + +var inTest = len(os.Args) > 0 && strings.HasSuffix(strings.TrimSuffix(os.Args[0], ".exe"), ".test") + +// New creates a new lazy regexp, delaying the compiling work until it is first +// needed. If the code is being run as part of tests, the regexp compiling will +// happen immediately. +func New(str string) *Regexp { + lr := &Regexp{str: str} + if inTest { + // In tests, always compile the regexps early. + lr.re() + } + return lr +} diff --git a/vendor/golang.org/x/mod/modfile/print.go b/vendor/golang.org/x/mod/modfile/print.go new file mode 100644 index 0000000..2a0123d --- /dev/null +++ b/vendor/golang.org/x/mod/modfile/print.go @@ -0,0 +1,184 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Module file printer. + +package modfile + +import ( + "bytes" + "fmt" + "strings" +) + +// Format returns a go.mod file as a byte slice, formatted in standard style. +func Format(f *FileSyntax) []byte { + pr := &printer{} + pr.file(f) + + // remove trailing blank lines + b := pr.Bytes() + for len(b) > 0 && b[len(b)-1] == '\n' && (len(b) == 1 || b[len(b)-2] == '\n') { + b = b[:len(b)-1] + } + return b +} + +// A printer collects the state during printing of a file or expression. +type printer struct { + bytes.Buffer // output buffer + comment []Comment // pending end-of-line comments + margin int // left margin (indent), a number of tabs +} + +// printf prints to the buffer. +func (p *printer) printf(format string, args ...interface{}) { + fmt.Fprintf(p, format, args...) +} + +// indent returns the position on the current line, in bytes, 0-indexed. +func (p *printer) indent() int { + b := p.Bytes() + n := 0 + for n < len(b) && b[len(b)-1-n] != '\n' { + n++ + } + return n +} + +// newline ends the current line, flushing end-of-line comments. +func (p *printer) newline() { + if len(p.comment) > 0 { + p.printf(" ") + for i, com := range p.comment { + if i > 0 { + p.trim() + p.printf("\n") + for i := 0; i < p.margin; i++ { + p.printf("\t") + } + } + p.printf("%s", strings.TrimSpace(com.Token)) + } + p.comment = p.comment[:0] + } + + p.trim() + if b := p.Bytes(); len(b) == 0 || (len(b) >= 2 && b[len(b)-1] == '\n' && b[len(b)-2] == '\n') { + // skip the blank line at top of file or after a blank line + } else { + p.printf("\n") + } + for i := 0; i < p.margin; i++ { + p.printf("\t") + } +} + +// trim removes trailing spaces and tabs from the current line. +func (p *printer) trim() { + // Remove trailing spaces and tabs from line we're about to end. + b := p.Bytes() + n := len(b) + for n > 0 && (b[n-1] == '\t' || b[n-1] == ' ') { + n-- + } + p.Truncate(n) +} + +// file formats the given file into the print buffer. +func (p *printer) file(f *FileSyntax) { + for _, com := range f.Before { + p.printf("%s", strings.TrimSpace(com.Token)) + p.newline() + } + + for i, stmt := range f.Stmt { + switch x := stmt.(type) { + case *CommentBlock: + // comments already handled + p.expr(x) + + default: + p.expr(x) + p.newline() + } + + for _, com := range stmt.Comment().After { + p.printf("%s", strings.TrimSpace(com.Token)) + p.newline() + } + + if i+1 < len(f.Stmt) { + p.newline() + } + } +} + +func (p *printer) expr(x Expr) { + // Emit line-comments preceding this expression. + if before := x.Comment().Before; len(before) > 0 { + // Want to print a line comment. + // Line comments must be at the current margin. + p.trim() + if p.indent() > 0 { + // There's other text on the line. Start a new line. + p.printf("\n") + } + // Re-indent to margin. + for i := 0; i < p.margin; i++ { + p.printf("\t") + } + for _, com := range before { + p.printf("%s", strings.TrimSpace(com.Token)) + p.newline() + } + } + + switch x := x.(type) { + default: + panic(fmt.Errorf("printer: unexpected type %T", x)) + + case *CommentBlock: + // done + + case *LParen: + p.printf("(") + case *RParen: + p.printf(")") + + case *Line: + p.tokens(x.Token) + + case *LineBlock: + p.tokens(x.Token) + p.printf(" ") + p.expr(&x.LParen) + p.margin++ + for _, l := range x.Line { + p.newline() + p.expr(l) + } + p.margin-- + p.newline() + p.expr(&x.RParen) + } + + // Queue end-of-line comments for printing when we + // reach the end of the line. + p.comment = append(p.comment, x.Comment().Suffix...) +} + +func (p *printer) tokens(tokens []string) { + sep := "" + for _, t := range tokens { + if t == "," || t == ")" || t == "]" || t == "}" { + sep = "" + } + p.printf("%s%s", sep, t) + sep = " " + if t == "(" || t == "[" || t == "{" { + sep = "" + } + } +} diff --git a/vendor/golang.org/x/mod/modfile/read.go b/vendor/golang.org/x/mod/modfile/read.go new file mode 100644 index 0000000..2d74868 --- /dev/null +++ b/vendor/golang.org/x/mod/modfile/read.go @@ -0,0 +1,964 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package modfile + +import ( + "bytes" + "errors" + "fmt" + "os" + "strconv" + "strings" + "unicode" + "unicode/utf8" +) + +// A Position describes an arbitrary source position in a file, including the +// file, line, column, and byte offset. +type Position struct { + Line int // line in input (starting at 1) + LineRune int // rune in line (starting at 1) + Byte int // byte in input (starting at 0) +} + +// add returns the position at the end of s, assuming it starts at p. +func (p Position) add(s string) Position { + p.Byte += len(s) + if n := strings.Count(s, "\n"); n > 0 { + p.Line += n + s = s[strings.LastIndex(s, "\n")+1:] + p.LineRune = 1 + } + p.LineRune += utf8.RuneCountInString(s) + return p +} + +// An Expr represents an input element. +type Expr interface { + // Span returns the start and end position of the expression, + // excluding leading or trailing comments. + Span() (start, end Position) + + // Comment returns the comments attached to the expression. + // This method would normally be named 'Comments' but that + // would interfere with embedding a type of the same name. + Comment() *Comments +} + +// A Comment represents a single // comment. +type Comment struct { + Start Position + Token string // without trailing newline + Suffix bool // an end of line (not whole line) comment +} + +// Comments collects the comments associated with an expression. +type Comments struct { + Before []Comment // whole-line comments before this expression + Suffix []Comment // end-of-line comments after this expression + + // For top-level expressions only, After lists whole-line + // comments following the expression. + After []Comment +} + +// Comment returns the receiver. This isn't useful by itself, but +// a [Comments] struct is embedded into all the expression +// implementation types, and this gives each of those a Comment +// method to satisfy the Expr interface. +func (c *Comments) Comment() *Comments { + return c +} + +// A FileSyntax represents an entire go.mod file. +type FileSyntax struct { + Name string // file path + Comments + Stmt []Expr +} + +func (x *FileSyntax) Span() (start, end Position) { + if len(x.Stmt) == 0 { + return + } + start, _ = x.Stmt[0].Span() + _, end = x.Stmt[len(x.Stmt)-1].Span() + return start, end +} + +// addLine adds a line containing the given tokens to the file. +// +// If the first token of the hint matches the first token of the +// line, the new line is added at the end of the block containing hint, +// extracting hint into a new block if it is not yet in one. +// +// If the hint is non-nil buts its first token does not match, +// the new line is added after the block containing hint +// (or hint itself, if not in a block). +// +// If no hint is provided, addLine appends the line to the end of +// the last block with a matching first token, +// or to the end of the file if no such block exists. +func (x *FileSyntax) addLine(hint Expr, tokens ...string) *Line { + if hint == nil { + // If no hint given, add to the last statement of the given type. + Loop: + for i := len(x.Stmt) - 1; i >= 0; i-- { + stmt := x.Stmt[i] + switch stmt := stmt.(type) { + case *Line: + if stmt.Token != nil && stmt.Token[0] == tokens[0] { + hint = stmt + break Loop + } + case *LineBlock: + if stmt.Token[0] == tokens[0] { + hint = stmt + break Loop + } + } + } + } + + newLineAfter := func(i int) *Line { + new := &Line{Token: tokens} + if i == len(x.Stmt) { + x.Stmt = append(x.Stmt, new) + } else { + x.Stmt = append(x.Stmt, nil) + copy(x.Stmt[i+2:], x.Stmt[i+1:]) + x.Stmt[i+1] = new + } + return new + } + + if hint != nil { + for i, stmt := range x.Stmt { + switch stmt := stmt.(type) { + case *Line: + if stmt == hint { + if stmt.Token == nil || stmt.Token[0] != tokens[0] { + return newLineAfter(i) + } + + // Convert line to line block. + stmt.InBlock = true + block := &LineBlock{Token: stmt.Token[:1], Line: []*Line{stmt}} + stmt.Token = stmt.Token[1:] + x.Stmt[i] = block + new := &Line{Token: tokens[1:], InBlock: true} + block.Line = append(block.Line, new) + return new + } + + case *LineBlock: + if stmt == hint { + if stmt.Token[0] != tokens[0] { + return newLineAfter(i) + } + + new := &Line{Token: tokens[1:], InBlock: true} + stmt.Line = append(stmt.Line, new) + return new + } + + for j, line := range stmt.Line { + if line == hint { + if stmt.Token[0] != tokens[0] { + return newLineAfter(i) + } + + // Add new line after hint within the block. + stmt.Line = append(stmt.Line, nil) + copy(stmt.Line[j+2:], stmt.Line[j+1:]) + new := &Line{Token: tokens[1:], InBlock: true} + stmt.Line[j+1] = new + return new + } + } + } + } + } + + new := &Line{Token: tokens} + x.Stmt = append(x.Stmt, new) + return new +} + +func (x *FileSyntax) updateLine(line *Line, tokens ...string) { + if line.InBlock { + tokens = tokens[1:] + } + line.Token = tokens +} + +// markRemoved modifies line so that it (and its end-of-line comment, if any) +// will be dropped by (*FileSyntax).Cleanup. +func (line *Line) markRemoved() { + line.Token = nil + line.Comments.Suffix = nil +} + +// Cleanup cleans up the file syntax x after any edit operations. +// To avoid quadratic behavior, (*Line).markRemoved marks the line as dead +// by setting line.Token = nil but does not remove it from the slice +// in which it appears. After edits have all been indicated, +// calling Cleanup cleans out the dead lines. +func (x *FileSyntax) Cleanup() { + w := 0 + for _, stmt := range x.Stmt { + switch stmt := stmt.(type) { + case *Line: + if stmt.Token == nil { + continue + } + case *LineBlock: + ww := 0 + for _, line := range stmt.Line { + if line.Token != nil { + stmt.Line[ww] = line + ww++ + } + } + if ww == 0 { + continue + } + if ww == 1 && len(stmt.RParen.Comments.Before) == 0 { + // Collapse block into single line but keep the Line reference used by the + // parsed File structure. + *stmt.Line[0] = Line{ + Comments: Comments{ + Before: commentsAdd(stmt.Before, stmt.Line[0].Before), + Suffix: commentsAdd(stmt.Line[0].Suffix, stmt.Suffix), + After: commentsAdd(stmt.Line[0].After, stmt.After), + }, + Token: stringsAdd(stmt.Token, stmt.Line[0].Token), + } + x.Stmt[w] = stmt.Line[0] + w++ + continue + } + stmt.Line = stmt.Line[:ww] + } + x.Stmt[w] = stmt + w++ + } + x.Stmt = x.Stmt[:w] +} + +func commentsAdd(x, y []Comment) []Comment { + return append(x[:len(x):len(x)], y...) +} + +func stringsAdd(x, y []string) []string { + return append(x[:len(x):len(x)], y...) +} + +// A CommentBlock represents a top-level block of comments separate +// from any rule. +type CommentBlock struct { + Comments + Start Position +} + +func (x *CommentBlock) Span() (start, end Position) { + return x.Start, x.Start +} + +// A Line is a single line of tokens. +type Line struct { + Comments + Start Position + Token []string + InBlock bool + End Position +} + +func (x *Line) Span() (start, end Position) { + return x.Start, x.End +} + +// A LineBlock is a factored block of lines, like +// +// require ( +// "x" +// "y" +// ) +type LineBlock struct { + Comments + Start Position + LParen LParen + Token []string + Line []*Line + RParen RParen +} + +func (x *LineBlock) Span() (start, end Position) { + return x.Start, x.RParen.Pos.add(")") +} + +// An LParen represents the beginning of a parenthesized line block. +// It is a place to store suffix comments. +type LParen struct { + Comments + Pos Position +} + +func (x *LParen) Span() (start, end Position) { + return x.Pos, x.Pos.add(")") +} + +// An RParen represents the end of a parenthesized line block. +// It is a place to store whole-line (before) comments. +type RParen struct { + Comments + Pos Position +} + +func (x *RParen) Span() (start, end Position) { + return x.Pos, x.Pos.add(")") +} + +// An input represents a single input file being parsed. +type input struct { + // Lexing state. + filename string // name of input file, for errors + complete []byte // entire input + remaining []byte // remaining input + tokenStart []byte // token being scanned to end of input + token token // next token to be returned by lex, peek + pos Position // current input position + comments []Comment // accumulated comments + + // Parser state. + file *FileSyntax // returned top-level syntax tree + parseErrors ErrorList // errors encountered during parsing + + // Comment assignment state. + pre []Expr // all expressions, in preorder traversal + post []Expr // all expressions, in postorder traversal +} + +func newInput(filename string, data []byte) *input { + return &input{ + filename: filename, + complete: data, + remaining: data, + pos: Position{Line: 1, LineRune: 1, Byte: 0}, + } +} + +// parse parses the input file. +func parse(file string, data []byte) (f *FileSyntax, err error) { + // The parser panics for both routine errors like syntax errors + // and for programmer bugs like array index errors. + // Turn both into error returns. Catching bug panics is + // especially important when processing many files. + in := newInput(file, data) + defer func() { + if e := recover(); e != nil && e != &in.parseErrors { + in.parseErrors = append(in.parseErrors, Error{ + Filename: in.filename, + Pos: in.pos, + Err: fmt.Errorf("internal error: %v", e), + }) + } + if err == nil && len(in.parseErrors) > 0 { + err = in.parseErrors + } + }() + + // Prime the lexer by reading in the first token. It will be available + // in the next peek() or lex() call. + in.readToken() + + // Invoke the parser. + in.parseFile() + if len(in.parseErrors) > 0 { + return nil, in.parseErrors + } + in.file.Name = in.filename + + // Assign comments to nearby syntax. + in.assignComments() + + return in.file, nil +} + +// Error is called to report an error. +// Error does not return: it panics. +func (in *input) Error(s string) { + in.parseErrors = append(in.parseErrors, Error{ + Filename: in.filename, + Pos: in.pos, + Err: errors.New(s), + }) + panic(&in.parseErrors) +} + +// eof reports whether the input has reached end of file. +func (in *input) eof() bool { + return len(in.remaining) == 0 +} + +// peekRune returns the next rune in the input without consuming it. +func (in *input) peekRune() int { + if len(in.remaining) == 0 { + return 0 + } + r, _ := utf8.DecodeRune(in.remaining) + return int(r) +} + +// peekPrefix reports whether the remaining input begins with the given prefix. +func (in *input) peekPrefix(prefix string) bool { + // This is like bytes.HasPrefix(in.remaining, []byte(prefix)) + // but without the allocation of the []byte copy of prefix. + for i := 0; i < len(prefix); i++ { + if i >= len(in.remaining) || in.remaining[i] != prefix[i] { + return false + } + } + return true +} + +// readRune consumes and returns the next rune in the input. +func (in *input) readRune() int { + if len(in.remaining) == 0 { + in.Error("internal lexer error: readRune at EOF") + } + r, size := utf8.DecodeRune(in.remaining) + in.remaining = in.remaining[size:] + if r == '\n' { + in.pos.Line++ + in.pos.LineRune = 1 + } else { + in.pos.LineRune++ + } + in.pos.Byte += size + return int(r) +} + +type token struct { + kind tokenKind + pos Position + endPos Position + text string +} + +type tokenKind int + +const ( + _EOF tokenKind = -(iota + 1) + _EOLCOMMENT + _IDENT + _STRING + _COMMENT + + // newlines and punctuation tokens are allowed as ASCII codes. +) + +func (k tokenKind) isComment() bool { + return k == _COMMENT || k == _EOLCOMMENT +} + +// isEOL returns whether a token terminates a line. +func (k tokenKind) isEOL() bool { + return k == _EOF || k == _EOLCOMMENT || k == '\n' +} + +// startToken marks the beginning of the next input token. +// It must be followed by a call to endToken, once the token's text has +// been consumed using readRune. +func (in *input) startToken() { + in.tokenStart = in.remaining + in.token.text = "" + in.token.pos = in.pos +} + +// endToken marks the end of an input token. +// It records the actual token string in tok.text. +// A single trailing newline (LF or CRLF) will be removed from comment tokens. +func (in *input) endToken(kind tokenKind) { + in.token.kind = kind + text := string(in.tokenStart[:len(in.tokenStart)-len(in.remaining)]) + if kind.isComment() { + if strings.HasSuffix(text, "\r\n") { + text = text[:len(text)-2] + } else { + text = strings.TrimSuffix(text, "\n") + } + } + in.token.text = text + in.token.endPos = in.pos +} + +// peek returns the kind of the next token returned by lex. +func (in *input) peek() tokenKind { + return in.token.kind +} + +// lex is called from the parser to obtain the next input token. +func (in *input) lex() token { + tok := in.token + in.readToken() + return tok +} + +// readToken lexes the next token from the text and stores it in in.token. +func (in *input) readToken() { + // Skip past spaces, stopping at non-space or EOF. + for !in.eof() { + c := in.peekRune() + if c == ' ' || c == '\t' || c == '\r' { + in.readRune() + continue + } + + // Comment runs to end of line. + if in.peekPrefix("//") { + in.startToken() + + // Is this comment the only thing on its line? + // Find the last \n before this // and see if it's all + // spaces from there to here. + i := bytes.LastIndex(in.complete[:in.pos.Byte], []byte("\n")) + suffix := len(bytes.TrimSpace(in.complete[i+1:in.pos.Byte])) > 0 + in.readRune() + in.readRune() + + // Consume comment. + for len(in.remaining) > 0 && in.readRune() != '\n' { + } + + // If we are at top level (not in a statement), hand the comment to + // the parser as a _COMMENT token. The grammar is written + // to handle top-level comments itself. + if !suffix { + in.endToken(_COMMENT) + return + } + + // Otherwise, save comment for later attachment to syntax tree. + in.endToken(_EOLCOMMENT) + in.comments = append(in.comments, Comment{in.token.pos, in.token.text, suffix}) + return + } + + if in.peekPrefix("/*") { + in.Error("mod files must use // comments (not /* */ comments)") + } + + // Found non-space non-comment. + break + } + + // Found the beginning of the next token. + in.startToken() + + // End of file. + if in.eof() { + in.endToken(_EOF) + return + } + + // Punctuation tokens. + switch c := in.peekRune(); c { + case '\n', '(', ')', '[', ']', '{', '}', ',': + in.readRune() + in.endToken(tokenKind(c)) + return + + case '"', '`': // quoted string + quote := c + in.readRune() + for { + if in.eof() { + in.pos = in.token.pos + in.Error("unexpected EOF in string") + } + if in.peekRune() == '\n' { + in.Error("unexpected newline in string") + } + c := in.readRune() + if c == quote { + break + } + if c == '\\' && quote != '`' { + if in.eof() { + in.pos = in.token.pos + in.Error("unexpected EOF in string") + } + in.readRune() + } + } + in.endToken(_STRING) + return + } + + // Checked all punctuation. Must be identifier token. + if c := in.peekRune(); !isIdent(c) { + in.Error(fmt.Sprintf("unexpected input character %#q", c)) + } + + // Scan over identifier. + for isIdent(in.peekRune()) { + if in.peekPrefix("//") { + break + } + if in.peekPrefix("/*") { + in.Error("mod files must use // comments (not /* */ comments)") + } + in.readRune() + } + in.endToken(_IDENT) +} + +// isIdent reports whether c is an identifier rune. +// We treat most printable runes as identifier runes, except for a handful of +// ASCII punctuation characters. +func isIdent(c int) bool { + switch r := rune(c); r { + case ' ', '(', ')', '[', ']', '{', '}', ',': + return false + default: + return !unicode.IsSpace(r) && unicode.IsPrint(r) + } +} + +// Comment assignment. +// We build two lists of all subexpressions, preorder and postorder. +// The preorder list is ordered by start location, with outer expressions first. +// The postorder list is ordered by end location, with outer expressions last. +// We use the preorder list to assign each whole-line comment to the syntax +// immediately following it, and we use the postorder list to assign each +// end-of-line comment to the syntax immediately preceding it. + +// order walks the expression adding it and its subexpressions to the +// preorder and postorder lists. +func (in *input) order(x Expr) { + if x != nil { + in.pre = append(in.pre, x) + } + switch x := x.(type) { + default: + panic(fmt.Errorf("order: unexpected type %T", x)) + case nil: + // nothing + case *LParen, *RParen: + // nothing + case *CommentBlock: + // nothing + case *Line: + // nothing + case *FileSyntax: + for _, stmt := range x.Stmt { + in.order(stmt) + } + case *LineBlock: + in.order(&x.LParen) + for _, l := range x.Line { + in.order(l) + } + in.order(&x.RParen) + } + if x != nil { + in.post = append(in.post, x) + } +} + +// assignComments attaches comments to nearby syntax. +func (in *input) assignComments() { + const debug = false + + // Generate preorder and postorder lists. + in.order(in.file) + + // Split into whole-line comments and suffix comments. + var line, suffix []Comment + for _, com := range in.comments { + if com.Suffix { + suffix = append(suffix, com) + } else { + line = append(line, com) + } + } + + if debug { + for _, c := range line { + fmt.Fprintf(os.Stderr, "LINE %q :%d:%d #%d\n", c.Token, c.Start.Line, c.Start.LineRune, c.Start.Byte) + } + } + + // Assign line comments to syntax immediately following. + for _, x := range in.pre { + start, _ := x.Span() + if debug { + fmt.Fprintf(os.Stderr, "pre %T :%d:%d #%d\n", x, start.Line, start.LineRune, start.Byte) + } + xcom := x.Comment() + for len(line) > 0 && start.Byte >= line[0].Start.Byte { + if debug { + fmt.Fprintf(os.Stderr, "ASSIGN LINE %q #%d\n", line[0].Token, line[0].Start.Byte) + } + xcom.Before = append(xcom.Before, line[0]) + line = line[1:] + } + } + + // Remaining line comments go at end of file. + in.file.After = append(in.file.After, line...) + + if debug { + for _, c := range suffix { + fmt.Fprintf(os.Stderr, "SUFFIX %q :%d:%d #%d\n", c.Token, c.Start.Line, c.Start.LineRune, c.Start.Byte) + } + } + + // Assign suffix comments to syntax immediately before. + for i := len(in.post) - 1; i >= 0; i-- { + x := in.post[i] + + start, end := x.Span() + if debug { + fmt.Fprintf(os.Stderr, "post %T :%d:%d #%d :%d:%d #%d\n", x, start.Line, start.LineRune, start.Byte, end.Line, end.LineRune, end.Byte) + } + + // Do not assign suffix comments to end of line block or whole file. + // Instead assign them to the last element inside. + switch x.(type) { + case *FileSyntax: + continue + } + + // Do not assign suffix comments to something that starts + // on an earlier line, so that in + // + // x ( y + // z ) // comment + // + // we assign the comment to z and not to x ( ... ). + if start.Line != end.Line { + continue + } + xcom := x.Comment() + for len(suffix) > 0 && end.Byte <= suffix[len(suffix)-1].Start.Byte { + if debug { + fmt.Fprintf(os.Stderr, "ASSIGN SUFFIX %q #%d\n", suffix[len(suffix)-1].Token, suffix[len(suffix)-1].Start.Byte) + } + xcom.Suffix = append(xcom.Suffix, suffix[len(suffix)-1]) + suffix = suffix[:len(suffix)-1] + } + } + + // We assigned suffix comments in reverse. + // If multiple suffix comments were appended to the same + // expression node, they are now in reverse. Fix that. + for _, x := range in.post { + reverseComments(x.Comment().Suffix) + } + + // Remaining suffix comments go at beginning of file. + in.file.Before = append(in.file.Before, suffix...) +} + +// reverseComments reverses the []Comment list. +func reverseComments(list []Comment) { + for i, j := 0, len(list)-1; i < j; i, j = i+1, j-1 { + list[i], list[j] = list[j], list[i] + } +} + +func (in *input) parseFile() { + in.file = new(FileSyntax) + var cb *CommentBlock + for { + switch in.peek() { + case '\n': + in.lex() + if cb != nil { + in.file.Stmt = append(in.file.Stmt, cb) + cb = nil + } + case _COMMENT: + tok := in.lex() + if cb == nil { + cb = &CommentBlock{Start: tok.pos} + } + com := cb.Comment() + com.Before = append(com.Before, Comment{Start: tok.pos, Token: tok.text}) + case _EOF: + if cb != nil { + in.file.Stmt = append(in.file.Stmt, cb) + } + return + default: + in.parseStmt() + if cb != nil { + in.file.Stmt[len(in.file.Stmt)-1].Comment().Before = cb.Before + cb = nil + } + } + } +} + +func (in *input) parseStmt() { + tok := in.lex() + start := tok.pos + end := tok.endPos + tokens := []string{tok.text} + for { + tok := in.lex() + switch { + case tok.kind.isEOL(): + in.file.Stmt = append(in.file.Stmt, &Line{ + Start: start, + Token: tokens, + End: end, + }) + return + + case tok.kind == '(': + if next := in.peek(); next.isEOL() { + // Start of block: no more tokens on this line. + in.file.Stmt = append(in.file.Stmt, in.parseLineBlock(start, tokens, tok)) + return + } else if next == ')' { + rparen := in.lex() + if in.peek().isEOL() { + // Empty block. + in.lex() + in.file.Stmt = append(in.file.Stmt, &LineBlock{ + Start: start, + Token: tokens, + LParen: LParen{Pos: tok.pos}, + RParen: RParen{Pos: rparen.pos}, + }) + return + } + // '( )' in the middle of the line, not a block. + tokens = append(tokens, tok.text, rparen.text) + } else { + // '(' in the middle of the line, not a block. + tokens = append(tokens, tok.text) + } + + default: + tokens = append(tokens, tok.text) + end = tok.endPos + } + } +} + +func (in *input) parseLineBlock(start Position, token []string, lparen token) *LineBlock { + x := &LineBlock{ + Start: start, + Token: token, + LParen: LParen{Pos: lparen.pos}, + } + var comments []Comment + for { + switch in.peek() { + case _EOLCOMMENT: + // Suffix comment, will be attached later by assignComments. + in.lex() + case '\n': + // Blank line. Add an empty comment to preserve it. + in.lex() + if len(comments) == 0 && len(x.Line) > 0 || len(comments) > 0 && comments[len(comments)-1].Token != "" { + comments = append(comments, Comment{}) + } + case _COMMENT: + tok := in.lex() + comments = append(comments, Comment{Start: tok.pos, Token: tok.text}) + case _EOF: + in.Error(fmt.Sprintf("syntax error (unterminated block started at %s:%d:%d)", in.filename, x.Start.Line, x.Start.LineRune)) + case ')': + rparen := in.lex() + // Don't preserve blank lines (denoted by a single empty comment, added above) + // at the end of the block. + if len(comments) == 1 && comments[0] == (Comment{}) { + comments = nil + } + x.RParen.Before = comments + x.RParen.Pos = rparen.pos + if !in.peek().isEOL() { + in.Error("syntax error (expected newline after closing paren)") + } + in.lex() + return x + default: + l := in.parseLine() + x.Line = append(x.Line, l) + l.Comment().Before = comments + comments = nil + } + } +} + +func (in *input) parseLine() *Line { + tok := in.lex() + if tok.kind.isEOL() { + in.Error("internal parse error: parseLine at end of line") + } + start := tok.pos + end := tok.endPos + tokens := []string{tok.text} + for { + tok := in.lex() + if tok.kind.isEOL() { + return &Line{ + Start: start, + Token: tokens, + End: end, + InBlock: true, + } + } + tokens = append(tokens, tok.text) + end = tok.endPos + } +} + +var ( + slashSlash = []byte("//") + moduleStr = []byte("module") +) + +// ModulePath returns the module path from the gomod file text. +// If it cannot find a module path, it returns an empty string. +// It is tolerant of unrelated problems in the go.mod file. +func ModulePath(mod []byte) string { + for len(mod) > 0 { + line := mod + mod = nil + if i := bytes.IndexByte(line, '\n'); i >= 0 { + line, mod = line[:i], line[i+1:] + } + if i := bytes.Index(line, slashSlash); i >= 0 { + line = line[:i] + } + line = bytes.TrimSpace(line) + if !bytes.HasPrefix(line, moduleStr) { + continue + } + line = line[len(moduleStr):] + n := len(line) + line = bytes.TrimSpace(line) + if len(line) == n || len(line) == 0 { + continue + } + + if line[0] == '"' || line[0] == '`' { + p, err := strconv.Unquote(string(line)) + if err != nil { + return "" // malformed quoted string or multiline module path + } + return p + } + + return string(line) + } + return "" // missing module path +} diff --git a/vendor/golang.org/x/mod/modfile/rule.go b/vendor/golang.org/x/mod/modfile/rule.go new file mode 100644 index 0000000..a86ee4f --- /dev/null +++ b/vendor/golang.org/x/mod/modfile/rule.go @@ -0,0 +1,1904 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package modfile implements a parser and formatter for go.mod files. +// +// The go.mod syntax is described in +// https://pkg.go.dev/cmd/go/#hdr-The_go_mod_file. +// +// The [Parse] and [ParseLax] functions both parse a go.mod file and return an +// abstract syntax tree. ParseLax ignores unknown statements and may be used to +// parse go.mod files that may have been developed with newer versions of Go. +// +// The [File] struct returned by Parse and ParseLax represent an abstract +// go.mod file. File has several methods like [File.AddNewRequire] and +// [File.DropReplace] that can be used to programmatically edit a file. +// +// The [Format] function formats a File back to a byte slice which can be +// written to a file. +package modfile + +import ( + "cmp" + "errors" + "fmt" + "path/filepath" + "slices" + "strconv" + "strings" + "unicode" + + "golang.org/x/mod/internal/lazyregexp" + "golang.org/x/mod/module" + "golang.org/x/mod/semver" +) + +// A File is the parsed, interpreted form of a go.mod file. +type File struct { + Module *Module + Go *Go + Toolchain *Toolchain + Godebug []*Godebug + Require []*Require + Exclude []*Exclude + Replace []*Replace + Retract []*Retract + Tool []*Tool + Ignore []*Ignore + + Syntax *FileSyntax +} + +// A Module is the module statement. +type Module struct { + Mod module.Version + Deprecated string + Syntax *Line +} + +// A Go is the go statement. +type Go struct { + Version string // "1.23" + Syntax *Line +} + +// A Toolchain is the toolchain statement. +type Toolchain struct { + Name string // "go1.21rc1" + Syntax *Line +} + +// A Godebug is a single godebug key=value statement. +type Godebug struct { + Key string + Value string + Syntax *Line +} + +// An Exclude is a single exclude statement. +type Exclude struct { + Mod module.Version + Syntax *Line +} + +// A Replace is a single replace statement. +type Replace struct { + Old module.Version + New module.Version + Syntax *Line +} + +// A Retract is a single retract statement. +type Retract struct { + VersionInterval + Rationale string + Syntax *Line +} + +// A Tool is a single tool statement. +type Tool struct { + Path string + Syntax *Line +} + +// An Ignore is a single ignore statement. +type Ignore struct { + Path string + Syntax *Line +} + +// A VersionInterval represents a range of versions with upper and lower bounds. +// Intervals are closed: both bounds are included. When Low is equal to High, +// the interval may refer to a single version ('v1.2.3') or an interval +// ('[v1.2.3, v1.2.3]'); both have the same representation. +type VersionInterval struct { + Low, High string +} + +// A Require is a single require statement. +type Require struct { + Mod module.Version + Indirect bool // has "// indirect" comment + Syntax *Line +} + +func (r *Require) markRemoved() { + r.Syntax.markRemoved() + *r = Require{} +} + +func (r *Require) setVersion(v string) { + r.Mod.Version = v + + if line := r.Syntax; len(line.Token) > 0 { + if line.InBlock { + // If the line is preceded by an empty line, remove it; see + // https://golang.org/issue/33779. + if len(line.Comments.Before) == 1 && len(line.Comments.Before[0].Token) == 0 { + line.Comments.Before = line.Comments.Before[:0] + } + if len(line.Token) >= 2 { // example.com v1.2.3 + line.Token[1] = v + } + } else { + if len(line.Token) >= 3 { // require example.com v1.2.3 + line.Token[2] = v + } + } + } +} + +// setIndirect sets line to have (or not have) a "// indirect" comment. +func (r *Require) setIndirect(indirect bool) { + r.Indirect = indirect + line := r.Syntax + if isIndirect(line) == indirect { + return + } + if indirect { + // Adding comment. + if len(line.Suffix) == 0 { + // New comment. + line.Suffix = []Comment{{Token: "// indirect", Suffix: true}} + return + } + + com := &line.Suffix[0] + text := strings.TrimSpace(strings.TrimPrefix(com.Token, string(slashSlash))) + if text == "" { + // Empty comment. + com.Token = "// indirect" + return + } + + // Insert at beginning of existing comment. + com.Token = "// indirect; " + text + return + } + + // Removing comment. + f := strings.TrimSpace(strings.TrimPrefix(line.Suffix[0].Token, string(slashSlash))) + if f == "indirect" { + // Remove whole comment. + line.Suffix = nil + return + } + + // Remove comment prefix. + com := &line.Suffix[0] + i := strings.Index(com.Token, "indirect;") + com.Token = "//" + com.Token[i+len("indirect;"):] +} + +// isIndirect reports whether line has a "// indirect" comment, +// meaning it is in go.mod only for its effect on indirect dependencies, +// so that it can be dropped entirely once the effective version of the +// indirect dependency reaches the given minimum version. +func isIndirect(line *Line) bool { + if len(line.Suffix) == 0 { + return false + } + f := strings.Fields(strings.TrimPrefix(line.Suffix[0].Token, string(slashSlash))) + return (len(f) == 1 && f[0] == "indirect" || len(f) > 1 && f[0] == "indirect;") +} + +func (f *File) AddModuleStmt(path string) error { + if f.Syntax == nil { + f.Syntax = new(FileSyntax) + } + if f.Module == nil { + f.Module = &Module{ + Mod: module.Version{Path: path}, + Syntax: f.Syntax.addLine(nil, "module", AutoQuote(path)), + } + } else { + f.Module.Mod.Path = path + f.Syntax.updateLine(f.Module.Syntax, "module", AutoQuote(path)) + } + return nil +} + +func (f *File) AddComment(text string) { + if f.Syntax == nil { + f.Syntax = new(FileSyntax) + } + f.Syntax.Stmt = append(f.Syntax.Stmt, &CommentBlock{ + Comments: Comments{ + Before: []Comment{ + { + Token: text, + }, + }, + }, + }) +} + +type VersionFixer func(path, version string) (string, error) + +// errDontFix is returned by a VersionFixer to indicate the version should be +// left alone, even if it's not canonical. +var dontFixRetract VersionFixer = func(_, vers string) (string, error) { + return vers, nil +} + +// Parse parses and returns a go.mod file. +// +// file is the name of the file, used in positions and errors. +// +// data is the content of the file. +// +// fix is an optional function that canonicalizes module versions. +// If fix is nil, all module versions must be canonical ([module.CanonicalVersion] +// must return the same string). +func Parse(file string, data []byte, fix VersionFixer) (*File, error) { + return parseToFile(file, data, fix, true) +} + +// ParseLax is like Parse but ignores unknown statements. +// It is used when parsing go.mod files other than the main module, +// under the theory that most statement types we add in the future will +// only apply in the main module, like exclude and replace, +// and so we get better gradual deployments if old go commands +// simply ignore those statements when found in go.mod files +// in dependencies. +func ParseLax(file string, data []byte, fix VersionFixer) (*File, error) { + return parseToFile(file, data, fix, false) +} + +func parseToFile(file string, data []byte, fix VersionFixer, strict bool) (parsed *File, err error) { + fs, err := parse(file, data) + if err != nil { + return nil, err + } + f := &File{ + Syntax: fs, + } + var errs ErrorList + + // fix versions in retract directives after the file is parsed. + // We need the module path to fix versions, and it might be at the end. + defer func() { + oldLen := len(errs) + f.fixRetract(fix, &errs) + if len(errs) > oldLen { + parsed, err = nil, errs + } + }() + + for _, x := range fs.Stmt { + switch x := x.(type) { + case *Line: + f.add(&errs, nil, x, x.Token[0], x.Token[1:], fix, strict) + + case *LineBlock: + if len(x.Token) > 1 { + if strict { + errs = append(errs, Error{ + Filename: file, + Pos: x.Start, + Err: fmt.Errorf("unknown block type: %s", strings.Join(x.Token, " ")), + }) + } + continue + } + switch x.Token[0] { + default: + if strict { + errs = append(errs, Error{ + Filename: file, + Pos: x.Start, + Err: fmt.Errorf("unknown block type: %s", strings.Join(x.Token, " ")), + }) + } + continue + case "module", "godebug", "require", "exclude", "replace", "retract", "tool", "ignore": + for _, l := range x.Line { + f.add(&errs, x, l, x.Token[0], l.Token, fix, strict) + } + } + } + } + + if len(errs) > 0 { + return nil, errs + } + return f, nil +} + +var GoVersionRE = lazyregexp.New(`^([1-9][0-9]*)\.(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*))?([a-z]+[0-9]+)?$`) +var laxGoVersionRE = lazyregexp.New(`^v?(([1-9][0-9]*)\.(0|[1-9][0-9]*))([^0-9].*)$`) + +// Toolchains must be named beginning with `go1`, +// like "go1.20.3" or "go1.20.3-gccgo". As a special case, "default" is also permitted. +// Note that this regexp is a much looser condition than go/version.IsValid, +// for forward compatibility. +// (This code has to be work to identify new toolchains even if we tweak the syntax in the future.) +var ToolchainRE = lazyregexp.New(`^default$|^go1($|\.)`) + +func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, args []string, fix VersionFixer, strict bool) { + // If strict is false, this module is a dependency. + // We ignore all unknown directives as well as main-module-only + // directives like replace and exclude. It will work better for + // forward compatibility if we can depend on modules that have unknown + // statements (presumed relevant only when acting as the main module) + // and simply ignore those statements. + if !strict { + switch verb { + case "go", "module", "retract", "require", "ignore": + // want these even for dependency go.mods + default: + return + } + } + + wrapModPathError := func(modPath string, err error) { + *errs = append(*errs, Error{ + Filename: f.Syntax.Name, + Pos: line.Start, + ModPath: modPath, + Verb: verb, + Err: err, + }) + } + wrapError := func(err error) { + *errs = append(*errs, Error{ + Filename: f.Syntax.Name, + Pos: line.Start, + Err: err, + }) + } + errorf := func(format string, args ...interface{}) { + wrapError(fmt.Errorf(format, args...)) + } + + switch verb { + default: + errorf("unknown directive: %s", verb) + + case "go": + if f.Go != nil { + errorf("repeated go statement") + return + } + if len(args) != 1 { + errorf("go directive expects exactly one argument") + return + } else if !GoVersionRE.MatchString(args[0]) { + fixed := false + if !strict { + if m := laxGoVersionRE.FindStringSubmatch(args[0]); m != nil { + args[0] = m[1] + fixed = true + } + } + if !fixed { + errorf("invalid go version '%s': must match format 1.23.0", args[0]) + return + } + } + + f.Go = &Go{Syntax: line} + f.Go.Version = args[0] + + case "toolchain": + if f.Toolchain != nil { + errorf("repeated toolchain statement") + return + } + if len(args) != 1 { + errorf("toolchain directive expects exactly one argument") + return + } else if !ToolchainRE.MatchString(args[0]) { + errorf("invalid toolchain version '%s': must match format go1.23.0 or default", args[0]) + return + } + f.Toolchain = &Toolchain{Syntax: line} + f.Toolchain.Name = args[0] + + case "module": + if f.Module != nil { + errorf("repeated module statement") + return + } + deprecated := parseDeprecation(block, line) + f.Module = &Module{ + Syntax: line, + Deprecated: deprecated, + } + if len(args) != 1 { + errorf("usage: module module/path") + return + } + s, err := parseString(&args[0]) + if err != nil { + errorf("invalid quoted string: %v", err) + return + } + f.Module.Mod = module.Version{Path: s} + + case "godebug": + if len(args) != 1 || strings.ContainsAny(args[0], "\"`',") { + errorf("usage: godebug key=value") + return + } + key, value, ok := strings.Cut(args[0], "=") + if !ok { + errorf("usage: godebug key=value") + return + } + f.Godebug = append(f.Godebug, &Godebug{ + Key: key, + Value: value, + Syntax: line, + }) + + case "require", "exclude": + if len(args) != 2 { + errorf("usage: %s module/path v1.2.3", verb) + return + } + s, err := parseString(&args[0]) + if err != nil { + errorf("invalid quoted string: %v", err) + return + } + v, err := parseVersion(verb, s, &args[1], fix) + if err != nil { + wrapError(err) + return + } + pathMajor, err := modulePathMajor(s) + if err != nil { + wrapError(err) + return + } + if err := module.CheckPathMajor(v, pathMajor); err != nil { + wrapModPathError(s, err) + return + } + if verb == "require" { + f.Require = append(f.Require, &Require{ + Mod: module.Version{Path: s, Version: v}, + Syntax: line, + Indirect: isIndirect(line), + }) + } else { + f.Exclude = append(f.Exclude, &Exclude{ + Mod: module.Version{Path: s, Version: v}, + Syntax: line, + }) + } + + case "replace": + replace, wrappederr := parseReplace(f.Syntax.Name, line, verb, args, fix) + if wrappederr != nil { + *errs = append(*errs, *wrappederr) + return + } + f.Replace = append(f.Replace, replace) + + case "retract": + rationale := parseDirectiveComment(block, line) + vi, err := parseVersionInterval(verb, "", &args, dontFixRetract) + if err != nil { + if strict { + wrapError(err) + return + } else { + // Only report errors parsing intervals in the main module. We may + // support additional syntax in the future, such as open and half-open + // intervals. Those can't be supported now, because they break the + // go.mod parser, even in lax mode. + return + } + } + if len(args) > 0 && strict { + // In the future, there may be additional information after the version. + errorf("unexpected token after version: %q", args[0]) + return + } + retract := &Retract{ + VersionInterval: vi, + Rationale: rationale, + Syntax: line, + } + f.Retract = append(f.Retract, retract) + + case "tool": + if len(args) != 1 { + errorf("tool directive expects exactly one argument") + return + } + s, err := parseString(&args[0]) + if err != nil { + errorf("invalid quoted string: %v", err) + return + } + f.Tool = append(f.Tool, &Tool{ + Path: s, + Syntax: line, + }) + + case "ignore": + if len(args) != 1 { + errorf("ignore directive expects exactly one argument") + return + } + s, err := parseString(&args[0]) + if err != nil { + errorf("invalid quoted string: %v", err) + return + } + f.Ignore = append(f.Ignore, &Ignore{ + Path: s, + Syntax: line, + }) + } +} + +func parseReplace(filename string, line *Line, verb string, args []string, fix VersionFixer) (*Replace, *Error) { + wrapModPathError := func(modPath string, err error) *Error { + return &Error{ + Filename: filename, + Pos: line.Start, + ModPath: modPath, + Verb: verb, + Err: err, + } + } + wrapError := func(err error) *Error { + return &Error{ + Filename: filename, + Pos: line.Start, + Err: err, + } + } + errorf := func(format string, args ...interface{}) *Error { + return wrapError(fmt.Errorf(format, args...)) + } + + arrow := 2 + if len(args) >= 2 && args[1] == "=>" { + arrow = 1 + } + if len(args) < arrow+2 || len(args) > arrow+3 || args[arrow] != "=>" { + return nil, errorf("usage: %s module/path [v1.2.3] => other/module v1.4\n\t or %s module/path [v1.2.3] => ../local/directory", verb, verb) + } + s, err := parseString(&args[0]) + if err != nil { + return nil, errorf("invalid quoted string: %v", err) + } + pathMajor, err := modulePathMajor(s) + if err != nil { + return nil, wrapModPathError(s, err) + + } + var v string + if arrow == 2 { + v, err = parseVersion(verb, s, &args[1], fix) + if err != nil { + return nil, wrapError(err) + } + if err := module.CheckPathMajor(v, pathMajor); err != nil { + return nil, wrapModPathError(s, err) + } + } + ns, err := parseString(&args[arrow+1]) + if err != nil { + return nil, errorf("invalid quoted string: %v", err) + } + nv := "" + if len(args) == arrow+2 { + if !IsDirectoryPath(ns) { + if strings.Contains(ns, "@") { + return nil, errorf("replacement module must match format 'path version', not 'path@version'") + } + return nil, errorf("replacement module without version must be directory path (rooted or starting with . or ..)") + } + if filepath.Separator == '/' && strings.Contains(ns, `\`) { + return nil, errorf("replacement directory appears to be Windows path (on a non-windows system)") + } + } + if len(args) == arrow+3 { + nv, err = parseVersion(verb, ns, &args[arrow+2], fix) + if err != nil { + return nil, wrapError(err) + } + if IsDirectoryPath(ns) { + return nil, errorf("replacement module directory path %q cannot have version", ns) + } + } + return &Replace{ + Old: module.Version{Path: s, Version: v}, + New: module.Version{Path: ns, Version: nv}, + Syntax: line, + }, nil +} + +// fixRetract applies fix to each retract directive in f, appending any errors +// to errs. +// +// Most versions are fixed as we parse the file, but for retract directives, +// the relevant module path is the one specified with the module directive, +// and that might appear at the end of the file (or not at all). +func (f *File) fixRetract(fix VersionFixer, errs *ErrorList) { + if fix == nil { + return + } + path := "" + if f.Module != nil { + path = f.Module.Mod.Path + } + var r *Retract + wrapError := func(err error) { + *errs = append(*errs, Error{ + Filename: f.Syntax.Name, + Pos: r.Syntax.Start, + Err: err, + }) + } + + for _, r = range f.Retract { + if path == "" { + wrapError(errors.New("no module directive found, so retract cannot be used")) + return // only print the first one of these + } + + args := r.Syntax.Token + if args[0] == "retract" { + args = args[1:] + } + vi, err := parseVersionInterval("retract", path, &args, fix) + if err != nil { + wrapError(err) + } + r.VersionInterval = vi + } +} + +func (f *WorkFile) add(errs *ErrorList, line *Line, verb string, args []string, fix VersionFixer) { + wrapError := func(err error) { + *errs = append(*errs, Error{ + Filename: f.Syntax.Name, + Pos: line.Start, + Err: err, + }) + } + errorf := func(format string, args ...interface{}) { + wrapError(fmt.Errorf(format, args...)) + } + + switch verb { + default: + errorf("unknown directive: %s", verb) + + case "go": + if f.Go != nil { + errorf("repeated go statement") + return + } + if len(args) != 1 { + errorf("go directive expects exactly one argument") + return + } else if !GoVersionRE.MatchString(args[0]) { + errorf("invalid go version '%s': must match format 1.23.0", args[0]) + return + } + + f.Go = &Go{Syntax: line} + f.Go.Version = args[0] + + case "toolchain": + if f.Toolchain != nil { + errorf("repeated toolchain statement") + return + } + if len(args) != 1 { + errorf("toolchain directive expects exactly one argument") + return + } else if !ToolchainRE.MatchString(args[0]) { + errorf("invalid toolchain version '%s': must match format go1.23.0 or default", args[0]) + return + } + + f.Toolchain = &Toolchain{Syntax: line} + f.Toolchain.Name = args[0] + + case "godebug": + if len(args) != 1 || strings.ContainsAny(args[0], "\"`',") { + errorf("usage: godebug key=value") + return + } + key, value, ok := strings.Cut(args[0], "=") + if !ok { + errorf("usage: godebug key=value") + return + } + f.Godebug = append(f.Godebug, &Godebug{ + Key: key, + Value: value, + Syntax: line, + }) + + case "use": + if len(args) != 1 { + errorf("usage: %s local/dir", verb) + return + } + s, err := parseString(&args[0]) + if err != nil { + errorf("invalid quoted string: %v", err) + return + } + f.Use = append(f.Use, &Use{ + Path: s, + Syntax: line, + }) + + case "replace": + replace, wrappederr := parseReplace(f.Syntax.Name, line, verb, args, fix) + if wrappederr != nil { + *errs = append(*errs, *wrappederr) + return + } + f.Replace = append(f.Replace, replace) + } +} + +// IsDirectoryPath reports whether the given path should be interpreted as a directory path. +// Just like on the go command line, relative paths starting with a '.' or '..' path component +// and rooted paths are directory paths; the rest are module paths. +func IsDirectoryPath(ns string) bool { + // Because go.mod files can move from one system to another, + // we check all known path syntaxes, both Unix and Windows. + return ns == "." || strings.HasPrefix(ns, "./") || strings.HasPrefix(ns, `.\`) || + ns == ".." || strings.HasPrefix(ns, "../") || strings.HasPrefix(ns, `..\`) || + strings.HasPrefix(ns, "/") || strings.HasPrefix(ns, `\`) || + len(ns) >= 2 && ('A' <= ns[0] && ns[0] <= 'Z' || 'a' <= ns[0] && ns[0] <= 'z') && ns[1] == ':' +} + +// MustQuote reports whether s must be quoted in order to appear as +// a single token in a go.mod line. +func MustQuote(s string) bool { + for _, r := range s { + switch r { + case ' ', '"', '\'', '`': + return true + + case '(', ')', '[', ']', '{', '}', ',': + if len(s) > 1 { + return true + } + + default: + if !unicode.IsPrint(r) { + return true + } + } + } + return s == "" || strings.Contains(s, "//") || strings.Contains(s, "/*") +} + +// AutoQuote returns s or, if quoting is required for s to appear in a go.mod, +// the quotation of s. +func AutoQuote(s string) string { + if MustQuote(s) { + return strconv.Quote(s) + } + return s +} + +func parseVersionInterval(verb string, path string, args *[]string, fix VersionFixer) (VersionInterval, error) { + toks := *args + if len(toks) == 0 || toks[0] == "(" { + return VersionInterval{}, fmt.Errorf("expected '[' or version") + } + if toks[0] != "[" { + v, err := parseVersion(verb, path, &toks[0], fix) + if err != nil { + return VersionInterval{}, err + } + *args = toks[1:] + return VersionInterval{Low: v, High: v}, nil + } + toks = toks[1:] + + if len(toks) == 0 { + return VersionInterval{}, fmt.Errorf("expected version after '['") + } + low, err := parseVersion(verb, path, &toks[0], fix) + if err != nil { + return VersionInterval{}, err + } + toks = toks[1:] + + if len(toks) == 0 || toks[0] != "," { + return VersionInterval{}, fmt.Errorf("expected ',' after version") + } + toks = toks[1:] + + if len(toks) == 0 { + return VersionInterval{}, fmt.Errorf("expected version after ','") + } + high, err := parseVersion(verb, path, &toks[0], fix) + if err != nil { + return VersionInterval{}, err + } + toks = toks[1:] + + if len(toks) == 0 || toks[0] != "]" { + return VersionInterval{}, fmt.Errorf("expected ']' after version") + } + toks = toks[1:] + + *args = toks + return VersionInterval{Low: low, High: high}, nil +} + +func parseString(s *string) (string, error) { + t := *s + if strings.HasPrefix(t, `"`) { + var err error + if t, err = strconv.Unquote(t); err != nil { + return "", err + } + } else if strings.ContainsAny(t, "\"'`") { + // Other quotes are reserved both for possible future expansion + // and to avoid confusion. For example if someone types 'x' + // we want that to be a syntax error and not a literal x in literal quotation marks. + return "", fmt.Errorf("unquoted string cannot contain quote") + } + *s = AutoQuote(t) + return t, nil +} + +var deprecatedRE = lazyregexp.New(`(?s)(?:^|\n\n)Deprecated: *(.*?)(?:$|\n\n)`) + +// parseDeprecation extracts the text of comments on a "module" directive and +// extracts a deprecation message from that. +// +// A deprecation message is contained in a paragraph within a block of comments +// that starts with "Deprecated:" (case sensitive). The message runs until the +// end of the paragraph and does not include the "Deprecated:" prefix. If the +// comment block has multiple paragraphs that start with "Deprecated:", +// parseDeprecation returns the message from the first. +func parseDeprecation(block *LineBlock, line *Line) string { + text := parseDirectiveComment(block, line) + m := deprecatedRE.FindStringSubmatch(text) + if m == nil { + return "" + } + return m[1] +} + +// parseDirectiveComment extracts the text of comments on a directive. +// If the directive's line does not have comments and is part of a block that +// does have comments, the block's comments are used. +func parseDirectiveComment(block *LineBlock, line *Line) string { + comments := line.Comment() + if block != nil && len(comments.Before) == 0 && len(comments.Suffix) == 0 { + comments = block.Comment() + } + groups := [][]Comment{comments.Before, comments.Suffix} + var lines []string + for _, g := range groups { + for _, c := range g { + if !strings.HasPrefix(c.Token, "//") { + continue // blank line + } + lines = append(lines, strings.TrimSpace(strings.TrimPrefix(c.Token, "//"))) + } + } + return strings.Join(lines, "\n") +} + +type ErrorList []Error + +func (e ErrorList) Error() string { + errStrs := make([]string, len(e)) + for i, err := range e { + errStrs[i] = err.Error() + } + return strings.Join(errStrs, "\n") +} + +type Error struct { + Filename string + Pos Position + Verb string + ModPath string + Err error +} + +func (e *Error) Error() string { + var pos string + if e.Pos.LineRune > 1 { + // Don't print LineRune if it's 1 (beginning of line). + // It's always 1 except in scanner errors, which are rare. + pos = fmt.Sprintf("%s:%d:%d: ", e.Filename, e.Pos.Line, e.Pos.LineRune) + } else if e.Pos.Line > 0 { + pos = fmt.Sprintf("%s:%d: ", e.Filename, e.Pos.Line) + } else if e.Filename != "" { + pos = fmt.Sprintf("%s: ", e.Filename) + } + + var directive string + if e.ModPath != "" { + directive = fmt.Sprintf("%s %s: ", e.Verb, e.ModPath) + } else if e.Verb != "" { + directive = fmt.Sprintf("%s: ", e.Verb) + } + + return pos + directive + e.Err.Error() +} + +func (e *Error) Unwrap() error { return e.Err } + +func parseVersion(verb string, path string, s *string, fix VersionFixer) (string, error) { + t, err := parseString(s) + if err != nil { + return "", &Error{ + Verb: verb, + ModPath: path, + Err: &module.InvalidVersionError{ + Version: *s, + Err: err, + }, + } + } + if fix != nil { + fixed, err := fix(path, t) + if err != nil { + if err, ok := err.(*module.ModuleError); ok { + return "", &Error{ + Verb: verb, + ModPath: path, + Err: err.Err, + } + } + return "", err + } + t = fixed + } else { + cv := module.CanonicalVersion(t) + if cv == "" { + return "", &Error{ + Verb: verb, + ModPath: path, + Err: &module.InvalidVersionError{ + Version: t, + Err: errors.New("must be of the form v1.2.3"), + }, + } + } + t = cv + } + *s = t + return *s, nil +} + +func modulePathMajor(path string) (string, error) { + _, major, ok := module.SplitPathVersion(path) + if !ok { + return "", fmt.Errorf("invalid module path") + } + return major, nil +} + +func (f *File) Format() ([]byte, error) { + return Format(f.Syntax), nil +} + +// Cleanup cleans up the file f after any edit operations. +// To avoid quadratic behavior, modifications like [File.DropRequire] +// clear the entry but do not remove it from the slice. +// Cleanup cleans out all the cleared entries. +func (f *File) Cleanup() { + w := 0 + for _, g := range f.Godebug { + if g.Key != "" { + f.Godebug[w] = g + w++ + } + } + f.Godebug = f.Godebug[:w] + + w = 0 + for _, r := range f.Require { + if r.Mod.Path != "" { + f.Require[w] = r + w++ + } + } + f.Require = f.Require[:w] + + w = 0 + for _, x := range f.Exclude { + if x.Mod.Path != "" { + f.Exclude[w] = x + w++ + } + } + f.Exclude = f.Exclude[:w] + + w = 0 + for _, r := range f.Replace { + if r.Old.Path != "" { + f.Replace[w] = r + w++ + } + } + f.Replace = f.Replace[:w] + + w = 0 + for _, r := range f.Retract { + if r.Low != "" || r.High != "" { + f.Retract[w] = r + w++ + } + } + f.Retract = f.Retract[:w] + + f.Syntax.Cleanup() +} + +func (f *File) AddGoStmt(version string) error { + if !GoVersionRE.MatchString(version) { + return fmt.Errorf("invalid language version %q", version) + } + if f.Go == nil { + var hint Expr + if f.Module != nil && f.Module.Syntax != nil { + hint = f.Module.Syntax + } else if f.Syntax == nil { + f.Syntax = new(FileSyntax) + } + f.Go = &Go{ + Version: version, + Syntax: f.Syntax.addLine(hint, "go", version), + } + } else { + f.Go.Version = version + f.Syntax.updateLine(f.Go.Syntax, "go", version) + } + return nil +} + +// DropGoStmt deletes the go statement from the file. +func (f *File) DropGoStmt() { + if f.Go != nil { + f.Go.Syntax.markRemoved() + f.Go = nil + } +} + +// DropToolchainStmt deletes the toolchain statement from the file. +func (f *File) DropToolchainStmt() { + if f.Toolchain != nil { + f.Toolchain.Syntax.markRemoved() + f.Toolchain = nil + } +} + +func (f *File) AddToolchainStmt(name string) error { + if !ToolchainRE.MatchString(name) { + return fmt.Errorf("invalid toolchain name %q", name) + } + if f.Toolchain == nil { + var hint Expr + if f.Go != nil && f.Go.Syntax != nil { + hint = f.Go.Syntax + } else if f.Module != nil && f.Module.Syntax != nil { + hint = f.Module.Syntax + } + f.Toolchain = &Toolchain{ + Name: name, + Syntax: f.Syntax.addLine(hint, "toolchain", name), + } + } else { + f.Toolchain.Name = name + f.Syntax.updateLine(f.Toolchain.Syntax, "toolchain", name) + } + return nil +} + +// AddGodebug sets the first godebug line for key to value, +// preserving any existing comments for that line and removing all +// other godebug lines for key. +// +// If no line currently exists for key, AddGodebug adds a new line +// at the end of the last godebug block. +func (f *File) AddGodebug(key, value string) error { + need := true + for _, g := range f.Godebug { + if g.Key == key { + if need { + g.Value = value + f.Syntax.updateLine(g.Syntax, "godebug", key+"="+value) + need = false + } else { + g.Syntax.markRemoved() + *g = Godebug{} + } + } + } + + if need { + f.addNewGodebug(key, value) + } + return nil +} + +// addNewGodebug adds a new godebug key=value line at the end +// of the last godebug block, regardless of any existing godebug lines for key. +func (f *File) addNewGodebug(key, value string) { + line := f.Syntax.addLine(nil, "godebug", key+"="+value) + g := &Godebug{ + Key: key, + Value: value, + Syntax: line, + } + f.Godebug = append(f.Godebug, g) +} + +// AddRequire sets the first require line for path to version vers, +// preserving any existing comments for that line and removing all +// other lines for path. +// +// If no line currently exists for path, AddRequire adds a new line +// at the end of the last require block. +func (f *File) AddRequire(path, vers string) error { + need := true + for _, r := range f.Require { + if r.Mod.Path == path { + if need { + r.Mod.Version = vers + f.Syntax.updateLine(r.Syntax, "require", AutoQuote(path), vers) + need = false + } else { + r.Syntax.markRemoved() + *r = Require{} + } + } + } + + if need { + f.AddNewRequire(path, vers, false) + } + return nil +} + +// AddNewRequire adds a new require line for path at version vers at the end of +// the last require block, regardless of any existing require lines for path. +func (f *File) AddNewRequire(path, vers string, indirect bool) { + line := f.Syntax.addLine(nil, "require", AutoQuote(path), vers) + r := &Require{ + Mod: module.Version{Path: path, Version: vers}, + Syntax: line, + } + r.setIndirect(indirect) + f.Require = append(f.Require, r) +} + +// SetRequire updates the requirements of f to contain exactly req, preserving +// the existing block structure and line comment contents (except for 'indirect' +// markings) for the first requirement on each named module path. +// +// The Syntax field is ignored for the requirements in req. +// +// Any requirements not already present in the file are added to the block +// containing the last require line. +// +// The requirements in req must specify at most one distinct version for each +// module path. +// +// If any existing requirements may be removed, the caller should call +// [File.Cleanup] after all edits are complete. +func (f *File) SetRequire(req []*Require) { + type elem struct { + version string + indirect bool + } + need := make(map[string]elem) + for _, r := range req { + if prev, dup := need[r.Mod.Path]; dup && prev.version != r.Mod.Version { + panic(fmt.Errorf("SetRequire called with conflicting versions for path %s (%s and %s)", r.Mod.Path, prev.version, r.Mod.Version)) + } + need[r.Mod.Path] = elem{r.Mod.Version, r.Indirect} + } + + // Update or delete the existing Require entries to preserve + // only the first for each module path in req. + for _, r := range f.Require { + e, ok := need[r.Mod.Path] + if ok { + r.setVersion(e.version) + r.setIndirect(e.indirect) + } else { + r.markRemoved() + } + delete(need, r.Mod.Path) + } + + // Add new entries in the last block of the file for any paths that weren't + // already present. + // + // This step is nondeterministic, but the final result will be deterministic + // because we will sort the block. + for path, e := range need { + f.AddNewRequire(path, e.version, e.indirect) + } + + f.SortBlocks() +} + +// SetRequireSeparateIndirect updates the requirements of f to contain the given +// requirements. Comment contents (except for 'indirect' markings) are retained +// from the first existing requirement for each module path. Like SetRequire, +// SetRequireSeparateIndirect adds requirements for new paths in req, +// updates the version and "// indirect" comment on existing requirements, +// and deletes requirements on paths not in req. Existing duplicate requirements +// are deleted. +// +// As its name suggests, SetRequireSeparateIndirect puts direct and indirect +// requirements into two separate blocks, one containing only direct +// requirements, and the other containing only indirect requirements. +// SetRequireSeparateIndirect may move requirements between these two blocks +// when their indirect markings change. However, SetRequireSeparateIndirect +// won't move requirements from other blocks, especially blocks with comments. +// +// If the file initially has one uncommented block of requirements, +// SetRequireSeparateIndirect will split it into a direct-only and indirect-only +// block. This aids in the transition to separate blocks. +func (f *File) SetRequireSeparateIndirect(req []*Require) { + // hasComments returns whether a line or block has comments + // other than "indirect". + hasComments := func(c Comments) bool { + return len(c.Before) > 0 || len(c.After) > 0 || len(c.Suffix) > 1 || + (len(c.Suffix) == 1 && + strings.TrimSpace(strings.TrimPrefix(c.Suffix[0].Token, string(slashSlash))) != "indirect") + } + + // moveReq adds r to block. If r was in another block, moveReq deletes + // it from that block and transfers its comments. + moveReq := func(r *Require, block *LineBlock) { + var line *Line + if r.Syntax == nil { + line = &Line{Token: []string{AutoQuote(r.Mod.Path), r.Mod.Version}} + r.Syntax = line + if r.Indirect { + r.setIndirect(true) + } + } else { + line = new(Line) + *line = *r.Syntax + if !line.InBlock && len(line.Token) > 0 && line.Token[0] == "require" { + line.Token = line.Token[1:] + } + r.Syntax.Token = nil // Cleanup will delete the old line. + r.Syntax = line + } + line.InBlock = true + block.Line = append(block.Line, line) + } + + // Examine existing require lines and blocks. + var ( + // We may insert new requirements into the last uncommented + // direct-only and indirect-only blocks. We may also move requirements + // to the opposite block if their indirect markings change. + lastDirectIndex = -1 + lastIndirectIndex = -1 + + // If there are no direct-only or indirect-only blocks, a new block may + // be inserted after the last require line or block. + lastRequireIndex = -1 + + // If there's only one require line or block, and it's uncommented, + // we'll move its requirements to the direct-only or indirect-only blocks. + requireLineOrBlockCount = 0 + + // Track the block each requirement belongs to (if any) so we can + // move them later. + lineToBlock = make(map[*Line]*LineBlock) + ) + for i, stmt := range f.Syntax.Stmt { + switch stmt := stmt.(type) { + case *Line: + if len(stmt.Token) == 0 || stmt.Token[0] != "require" { + continue + } + lastRequireIndex = i + requireLineOrBlockCount++ + if !hasComments(stmt.Comments) { + if isIndirect(stmt) { + lastIndirectIndex = i + } else { + lastDirectIndex = i + } + } + + case *LineBlock: + if len(stmt.Token) == 0 || stmt.Token[0] != "require" { + continue + } + lastRequireIndex = i + requireLineOrBlockCount++ + allDirect := len(stmt.Line) > 0 && !hasComments(stmt.Comments) + allIndirect := len(stmt.Line) > 0 && !hasComments(stmt.Comments) + for _, line := range stmt.Line { + lineToBlock[line] = stmt + if hasComments(line.Comments) { + allDirect = false + allIndirect = false + } else if isIndirect(line) { + allDirect = false + } else { + allIndirect = false + } + } + if allDirect { + lastDirectIndex = i + } + if allIndirect { + lastIndirectIndex = i + } + } + } + + oneFlatUncommentedBlock := requireLineOrBlockCount == 1 && + !hasComments(*f.Syntax.Stmt[lastRequireIndex].Comment()) + + // Create direct and indirect blocks if needed. Convert lines into blocks + // if needed. If we end up with an empty block or a one-line block, + // Cleanup will delete it or convert it to a line later. + insertBlock := func(i int) *LineBlock { + block := &LineBlock{Token: []string{"require"}} + f.Syntax.Stmt = append(f.Syntax.Stmt, nil) + copy(f.Syntax.Stmt[i+1:], f.Syntax.Stmt[i:]) + f.Syntax.Stmt[i] = block + return block + } + + ensureBlock := func(i int) *LineBlock { + switch stmt := f.Syntax.Stmt[i].(type) { + case *LineBlock: + return stmt + case *Line: + block := &LineBlock{ + Token: []string{"require"}, + Line: []*Line{stmt}, + } + stmt.Token = stmt.Token[1:] // remove "require" + stmt.InBlock = true + f.Syntax.Stmt[i] = block + return block + default: + panic(fmt.Sprintf("unexpected statement: %v", stmt)) + } + } + + var lastDirectBlock *LineBlock + if lastDirectIndex < 0 { + if lastIndirectIndex >= 0 { + lastDirectIndex = lastIndirectIndex + lastIndirectIndex++ + } else if lastRequireIndex >= 0 { + lastDirectIndex = lastRequireIndex + 1 + } else { + lastDirectIndex = len(f.Syntax.Stmt) + } + lastDirectBlock = insertBlock(lastDirectIndex) + } else { + lastDirectBlock = ensureBlock(lastDirectIndex) + } + + var lastIndirectBlock *LineBlock + if lastIndirectIndex < 0 { + lastIndirectIndex = lastDirectIndex + 1 + lastIndirectBlock = insertBlock(lastIndirectIndex) + } else { + lastIndirectBlock = ensureBlock(lastIndirectIndex) + } + + // Delete requirements we don't want anymore. + // Update versions and indirect comments on requirements we want to keep. + // If a requirement is in last{Direct,Indirect}Block with the wrong + // indirect marking after this, or if the requirement is in an single + // uncommented mixed block (oneFlatUncommentedBlock), move it to the + // correct block. + // + // Some blocks may be empty after this. Cleanup will remove them. + need := make(map[string]*Require) + for _, r := range req { + need[r.Mod.Path] = r + } + have := make(map[string]*Require) + for _, r := range f.Require { + path := r.Mod.Path + if need[path] == nil || have[path] != nil { + // Requirement not needed, or duplicate requirement. Delete. + r.markRemoved() + continue + } + have[r.Mod.Path] = r + r.setVersion(need[path].Mod.Version) + r.setIndirect(need[path].Indirect) + if need[path].Indirect && + (oneFlatUncommentedBlock || lineToBlock[r.Syntax] == lastDirectBlock) { + moveReq(r, lastIndirectBlock) + } else if !need[path].Indirect && + (oneFlatUncommentedBlock || lineToBlock[r.Syntax] == lastIndirectBlock) { + moveReq(r, lastDirectBlock) + } + } + + // Add new requirements. + for path, r := range need { + if have[path] == nil { + if r.Indirect { + moveReq(r, lastIndirectBlock) + } else { + moveReq(r, lastDirectBlock) + } + f.Require = append(f.Require, r) + } + } + + f.SortBlocks() +} + +func (f *File) DropGodebug(key string) error { + for _, g := range f.Godebug { + if g.Key == key { + g.Syntax.markRemoved() + *g = Godebug{} + } + } + return nil +} + +func (f *File) DropRequire(path string) error { + for _, r := range f.Require { + if r.Mod.Path == path { + r.Syntax.markRemoved() + *r = Require{} + } + } + return nil +} + +// AddExclude adds a exclude statement to the mod file. Errors if the provided +// version is not a canonical version string +func (f *File) AddExclude(path, vers string) error { + if err := checkCanonicalVersion(path, vers); err != nil { + return err + } + + var hint *Line + for _, x := range f.Exclude { + if x.Mod.Path == path && x.Mod.Version == vers { + return nil + } + if x.Mod.Path == path { + hint = x.Syntax + } + } + + f.Exclude = append(f.Exclude, &Exclude{Mod: module.Version{Path: path, Version: vers}, Syntax: f.Syntax.addLine(hint, "exclude", AutoQuote(path), vers)}) + return nil +} + +func (f *File) DropExclude(path, vers string) error { + for _, x := range f.Exclude { + if x.Mod.Path == path && x.Mod.Version == vers { + x.Syntax.markRemoved() + *x = Exclude{} + } + } + return nil +} + +func (f *File) AddReplace(oldPath, oldVers, newPath, newVers string) error { + return addReplace(f.Syntax, &f.Replace, oldPath, oldVers, newPath, newVers) +} + +func addReplace(syntax *FileSyntax, replace *[]*Replace, oldPath, oldVers, newPath, newVers string) error { + need := true + old := module.Version{Path: oldPath, Version: oldVers} + new := module.Version{Path: newPath, Version: newVers} + tokens := []string{"replace", AutoQuote(oldPath)} + if oldVers != "" { + tokens = append(tokens, oldVers) + } + tokens = append(tokens, "=>", AutoQuote(newPath)) + if newVers != "" { + tokens = append(tokens, newVers) + } + + var hint *Line + for _, r := range *replace { + if r.Old.Path == oldPath && (oldVers == "" || r.Old.Version == oldVers) { + if need { + // Found replacement for old; update to use new. + r.New = new + syntax.updateLine(r.Syntax, tokens...) + need = false + continue + } + // Already added; delete other replacements for same. + r.Syntax.markRemoved() + *r = Replace{} + } + if r.Old.Path == oldPath { + hint = r.Syntax + } + } + if need { + *replace = append(*replace, &Replace{Old: old, New: new, Syntax: syntax.addLine(hint, tokens...)}) + } + return nil +} + +func (f *File) DropReplace(oldPath, oldVers string) error { + for _, r := range f.Replace { + if r.Old.Path == oldPath && r.Old.Version == oldVers { + r.Syntax.markRemoved() + *r = Replace{} + } + } + return nil +} + +// AddRetract adds a retract statement to the mod file. Errors if the provided +// version interval does not consist of canonical version strings +func (f *File) AddRetract(vi VersionInterval, rationale string) error { + var path string + if f.Module != nil { + path = f.Module.Mod.Path + } + if err := checkCanonicalVersion(path, vi.High); err != nil { + return err + } + if err := checkCanonicalVersion(path, vi.Low); err != nil { + return err + } + + r := &Retract{ + VersionInterval: vi, + } + if vi.Low == vi.High { + r.Syntax = f.Syntax.addLine(nil, "retract", AutoQuote(vi.Low)) + } else { + r.Syntax = f.Syntax.addLine(nil, "retract", "[", AutoQuote(vi.Low), ",", AutoQuote(vi.High), "]") + } + if rationale != "" { + for _, line := range strings.Split(rationale, "\n") { + com := Comment{Token: "// " + line} + r.Syntax.Comment().Before = append(r.Syntax.Comment().Before, com) + } + } + return nil +} + +func (f *File) DropRetract(vi VersionInterval) error { + for _, r := range f.Retract { + if r.VersionInterval == vi { + r.Syntax.markRemoved() + *r = Retract{} + } + } + return nil +} + +// AddTool adds a new tool directive with the given path. +// It does nothing if the tool line already exists. +func (f *File) AddTool(path string) error { + for _, t := range f.Tool { + if t.Path == path { + return nil + } + } + + f.Tool = append(f.Tool, &Tool{ + Path: path, + Syntax: f.Syntax.addLine(nil, "tool", path), + }) + + f.SortBlocks() + return nil +} + +// RemoveTool removes a tool directive with the given path. +// It does nothing if no such tool directive exists. +func (f *File) DropTool(path string) error { + for _, t := range f.Tool { + if t.Path == path { + t.Syntax.markRemoved() + *t = Tool{} + } + } + return nil +} + +// AddIgnore adds a new ignore directive with the given path. +// It does nothing if the ignore line already exists. +func (f *File) AddIgnore(path string) error { + for _, t := range f.Ignore { + if t.Path == path { + return nil + } + } + + f.Ignore = append(f.Ignore, &Ignore{ + Path: path, + Syntax: f.Syntax.addLine(nil, "ignore", path), + }) + + f.SortBlocks() + return nil +} + +// DropIgnore removes a ignore directive with the given path. +// It does nothing if no such ignore directive exists. +func (f *File) DropIgnore(path string) error { + for _, t := range f.Ignore { + if t.Path == path { + t.Syntax.markRemoved() + *t = Ignore{} + } + } + return nil +} + +func (f *File) SortBlocks() { + f.removeDups() // otherwise sorting is unsafe + + // semanticSortForExcludeVersionV is the Go version (plus leading "v") at which + // lines in exclude blocks start to use semantic sort instead of lexicographic sort. + // See go.dev/issue/60028. + const semanticSortForExcludeVersionV = "v1.21" + useSemanticSortForExclude := f.Go != nil && semver.Compare("v"+f.Go.Version, semanticSortForExcludeVersionV) >= 0 + + for _, stmt := range f.Syntax.Stmt { + block, ok := stmt.(*LineBlock) + if !ok { + continue + } + less := compareLine + if block.Token[0] == "exclude" && useSemanticSortForExclude { + less = compareLineExclude + } else if block.Token[0] == "retract" { + less = compareLineRetract + } + slices.SortStableFunc(block.Line, less) + } +} + +// removeDups removes duplicate exclude, replace and tool directives. +// +// Earlier exclude and tool directives take priority. +// +// Later replace directives take priority. +// +// require directives are not de-duplicated. That's left up to higher-level +// logic (MVS). +// +// retract directives are not de-duplicated since comments are +// meaningful, and versions may be retracted multiple times. +func (f *File) removeDups() { + removeDups(f.Syntax, &f.Exclude, &f.Replace, &f.Tool, &f.Ignore) +} + +func removeDups(syntax *FileSyntax, exclude *[]*Exclude, replace *[]*Replace, tool *[]*Tool, ignore *[]*Ignore) { + kill := make(map[*Line]bool) + + // Remove duplicate excludes. + if exclude != nil { + haveExclude := make(map[module.Version]bool) + for _, x := range *exclude { + if haveExclude[x.Mod] { + kill[x.Syntax] = true + continue + } + haveExclude[x.Mod] = true + } + var excl []*Exclude + for _, x := range *exclude { + if !kill[x.Syntax] { + excl = append(excl, x) + } + } + *exclude = excl + } + + // Remove duplicate replacements. + // Later replacements take priority over earlier ones. + haveReplace := make(map[module.Version]bool) + for i := len(*replace) - 1; i >= 0; i-- { + x := (*replace)[i] + if haveReplace[x.Old] { + kill[x.Syntax] = true + continue + } + haveReplace[x.Old] = true + } + var repl []*Replace + for _, x := range *replace { + if !kill[x.Syntax] { + repl = append(repl, x) + } + } + *replace = repl + + if tool != nil { + haveTool := make(map[string]bool) + for _, t := range *tool { + if haveTool[t.Path] { + kill[t.Syntax] = true + continue + } + haveTool[t.Path] = true + } + var newTool []*Tool + for _, t := range *tool { + if !kill[t.Syntax] { + newTool = append(newTool, t) + } + } + *tool = newTool + } + + if ignore != nil { + haveIgnore := make(map[string]bool) + for _, i := range *ignore { + if haveIgnore[i.Path] { + kill[i.Syntax] = true + continue + } + haveIgnore[i.Path] = true + } + var newIgnore []*Ignore + for _, i := range *ignore { + if !kill[i.Syntax] { + newIgnore = append(newIgnore, i) + } + } + *ignore = newIgnore + } + + // Duplicate require and retract directives are not removed. + + // Drop killed statements from the syntax tree. + var stmts []Expr + for _, stmt := range syntax.Stmt { + switch stmt := stmt.(type) { + case *Line: + if kill[stmt] { + continue + } + case *LineBlock: + var lines []*Line + for _, line := range stmt.Line { + if !kill[line] { + lines = append(lines, line) + } + } + stmt.Line = lines + if len(lines) == 0 { + continue + } + } + stmts = append(stmts, stmt) + } + syntax.Stmt = stmts +} + +// compareLine compares li and lj. It sorts lexicographically without assigning +// any special meaning to tokens. +func compareLine(li, lj *Line) int { + for k := 0; k < len(li.Token) && k < len(lj.Token); k++ { + if li.Token[k] != lj.Token[k] { + return cmp.Compare(li.Token[k], lj.Token[k]) + } + } + return cmp.Compare(len(li.Token), len(lj.Token)) +} + +// compareLineExclude compares li and lj for lines in an "exclude" block. +func compareLineExclude(li, lj *Line) int { + if len(li.Token) != 2 || len(lj.Token) != 2 { + // Not a known exclude specification. + // Fall back to sorting lexicographically. + return compareLine(li, lj) + } + // An exclude specification has two tokens: ModulePath and Version. + // Compare module path by string order and version by semver rules. + if pi, pj := li.Token[0], lj.Token[0]; pi != pj { + return cmp.Compare(pi, pj) + } + return semver.Compare(li.Token[1], lj.Token[1]) +} + +// compareLineRetract compares li and lj for lines in a "retract" block. +// It treats each line as a version interval. Single versions are compared as +// if they were intervals with the same low and high version. +// Intervals are sorted in descending order, first by low version, then by +// high version, using [semver.Compare]. +func compareLineRetract(li, lj *Line) int { + interval := func(l *Line) VersionInterval { + if len(l.Token) == 1 { + return VersionInterval{Low: l.Token[0], High: l.Token[0]} + } else if len(l.Token) == 5 && l.Token[0] == "[" && l.Token[2] == "," && l.Token[4] == "]" { + return VersionInterval{Low: l.Token[1], High: l.Token[3]} + } else { + // Line in unknown format. Treat as an invalid version. + return VersionInterval{} + } + } + vii := interval(li) + vij := interval(lj) + if cmp := semver.Compare(vii.Low, vij.Low); cmp != 0 { + return -cmp + } + return -semver.Compare(vii.High, vij.High) +} + +// checkCanonicalVersion returns a non-nil error if vers is not a canonical +// version string or does not match the major version of path. +// +// If path is non-empty, the error text suggests a format with a major version +// corresponding to the path. +func checkCanonicalVersion(path, vers string) error { + _, pathMajor, pathMajorOk := module.SplitPathVersion(path) + + if vers == "" || vers != module.CanonicalVersion(vers) { + if pathMajor == "" { + return &module.InvalidVersionError{ + Version: vers, + Err: fmt.Errorf("must be of the form v1.2.3"), + } + } + return &module.InvalidVersionError{ + Version: vers, + Err: fmt.Errorf("must be of the form %s.2.3", module.PathMajorPrefix(pathMajor)), + } + } + + if pathMajorOk { + if err := module.CheckPathMajor(vers, pathMajor); err != nil { + if pathMajor == "" { + // In this context, the user probably wrote "v2.3.4" when they meant + // "v2.3.4+incompatible". Suggest that instead of "v0 or v1". + return &module.InvalidVersionError{ + Version: vers, + Err: fmt.Errorf("should be %s+incompatible (or module %s/%v)", vers, path, semver.Major(vers)), + } + } + return err + } + } + + return nil +} diff --git a/vendor/golang.org/x/mod/modfile/work.go b/vendor/golang.org/x/mod/modfile/work.go new file mode 100644 index 0000000..09df5ea --- /dev/null +++ b/vendor/golang.org/x/mod/modfile/work.go @@ -0,0 +1,333 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package modfile + +import ( + "fmt" + "slices" + "strings" +) + +// A WorkFile is the parsed, interpreted form of a go.work file. +type WorkFile struct { + Go *Go + Toolchain *Toolchain + Godebug []*Godebug + Use []*Use + Replace []*Replace + + Syntax *FileSyntax +} + +// A Use is a single directory statement. +type Use struct { + Path string // Use path of module. + ModulePath string // Module path in the comment. + Syntax *Line +} + +// ParseWork parses and returns a go.work file. +// +// file is the name of the file, used in positions and errors. +// +// data is the content of the file. +// +// fix is an optional function that canonicalizes module versions. +// If fix is nil, all module versions must be canonical ([module.CanonicalVersion] +// must return the same string). +func ParseWork(file string, data []byte, fix VersionFixer) (*WorkFile, error) { + fs, err := parse(file, data) + if err != nil { + return nil, err + } + f := &WorkFile{ + Syntax: fs, + } + var errs ErrorList + + for _, x := range fs.Stmt { + switch x := x.(type) { + case *Line: + f.add(&errs, x, x.Token[0], x.Token[1:], fix) + + case *LineBlock: + if len(x.Token) > 1 { + errs = append(errs, Error{ + Filename: file, + Pos: x.Start, + Err: fmt.Errorf("unknown block type: %s", strings.Join(x.Token, " ")), + }) + continue + } + switch x.Token[0] { + default: + errs = append(errs, Error{ + Filename: file, + Pos: x.Start, + Err: fmt.Errorf("unknown block type: %s", strings.Join(x.Token, " ")), + }) + continue + case "godebug", "use", "replace": + for _, l := range x.Line { + f.add(&errs, l, x.Token[0], l.Token, fix) + } + } + } + } + + if len(errs) > 0 { + return nil, errs + } + return f, nil +} + +// Cleanup cleans up the file f after any edit operations. +// To avoid quadratic behavior, modifications like [WorkFile.DropRequire] +// clear the entry but do not remove it from the slice. +// Cleanup cleans out all the cleared entries. +func (f *WorkFile) Cleanup() { + w := 0 + for _, r := range f.Use { + if r.Path != "" { + f.Use[w] = r + w++ + } + } + f.Use = f.Use[:w] + + w = 0 + for _, r := range f.Replace { + if r.Old.Path != "" { + f.Replace[w] = r + w++ + } + } + f.Replace = f.Replace[:w] + + f.Syntax.Cleanup() +} + +func (f *WorkFile) AddGoStmt(version string) error { + if !GoVersionRE.MatchString(version) { + return fmt.Errorf("invalid language version %q", version) + } + if f.Go == nil { + stmt := &Line{Token: []string{"go", version}} + f.Go = &Go{ + Version: version, + Syntax: stmt, + } + // Find the first non-comment-only block and add + // the go statement before it. That will keep file comments at the top. + i := 0 + for i = 0; i < len(f.Syntax.Stmt); i++ { + if _, ok := f.Syntax.Stmt[i].(*CommentBlock); !ok { + break + } + } + f.Syntax.Stmt = append(append(f.Syntax.Stmt[:i:i], stmt), f.Syntax.Stmt[i:]...) + } else { + f.Go.Version = version + f.Syntax.updateLine(f.Go.Syntax, "go", version) + } + return nil +} + +func (f *WorkFile) AddToolchainStmt(name string) error { + if !ToolchainRE.MatchString(name) { + return fmt.Errorf("invalid toolchain name %q", name) + } + if f.Toolchain == nil { + stmt := &Line{Token: []string{"toolchain", name}} + f.Toolchain = &Toolchain{ + Name: name, + Syntax: stmt, + } + // Find the go line and add the toolchain line after it. + // Or else find the first non-comment-only block and add + // the toolchain line before it. That will keep file comments at the top. + i := 0 + for i = 0; i < len(f.Syntax.Stmt); i++ { + if line, ok := f.Syntax.Stmt[i].(*Line); ok && len(line.Token) > 0 && line.Token[0] == "go" { + i++ + goto Found + } + } + for i = 0; i < len(f.Syntax.Stmt); i++ { + if _, ok := f.Syntax.Stmt[i].(*CommentBlock); !ok { + break + } + } + Found: + f.Syntax.Stmt = append(append(f.Syntax.Stmt[:i:i], stmt), f.Syntax.Stmt[i:]...) + } else { + f.Toolchain.Name = name + f.Syntax.updateLine(f.Toolchain.Syntax, "toolchain", name) + } + return nil +} + +// DropGoStmt deletes the go statement from the file. +func (f *WorkFile) DropGoStmt() { + if f.Go != nil { + f.Go.Syntax.markRemoved() + f.Go = nil + } +} + +// DropToolchainStmt deletes the toolchain statement from the file. +func (f *WorkFile) DropToolchainStmt() { + if f.Toolchain != nil { + f.Toolchain.Syntax.markRemoved() + f.Toolchain = nil + } +} + +// AddGodebug sets the first godebug line for key to value, +// preserving any existing comments for that line and removing all +// other godebug lines for key. +// +// If no line currently exists for key, AddGodebug adds a new line +// at the end of the last godebug block. +func (f *WorkFile) AddGodebug(key, value string) error { + need := true + for _, g := range f.Godebug { + if g.Key == key { + if need { + g.Value = value + f.Syntax.updateLine(g.Syntax, "godebug", key+"="+value) + need = false + } else { + g.Syntax.markRemoved() + *g = Godebug{} + } + } + } + + if need { + f.addNewGodebug(key, value) + } + return nil +} + +// addNewGodebug adds a new godebug key=value line at the end +// of the last godebug block, regardless of any existing godebug lines for key. +func (f *WorkFile) addNewGodebug(key, value string) { + line := f.Syntax.addLine(nil, "godebug", key+"="+value) + g := &Godebug{ + Key: key, + Value: value, + Syntax: line, + } + f.Godebug = append(f.Godebug, g) +} + +func (f *WorkFile) DropGodebug(key string) error { + for _, g := range f.Godebug { + if g.Key == key { + g.Syntax.markRemoved() + *g = Godebug{} + } + } + return nil +} + +func (f *WorkFile) AddUse(diskPath, modulePath string) error { + need := true + for _, d := range f.Use { + if d.Path == diskPath { + if need { + d.ModulePath = modulePath + f.Syntax.updateLine(d.Syntax, "use", AutoQuote(diskPath)) + need = false + } else { + d.Syntax.markRemoved() + *d = Use{} + } + } + } + + if need { + f.AddNewUse(diskPath, modulePath) + } + return nil +} + +func (f *WorkFile) AddNewUse(diskPath, modulePath string) { + line := f.Syntax.addLine(nil, "use", AutoQuote(diskPath)) + f.Use = append(f.Use, &Use{Path: diskPath, ModulePath: modulePath, Syntax: line}) +} + +func (f *WorkFile) SetUse(dirs []*Use) { + need := make(map[string]string) + for _, d := range dirs { + need[d.Path] = d.ModulePath + } + + for _, d := range f.Use { + if modulePath, ok := need[d.Path]; ok { + d.ModulePath = modulePath + } else { + d.Syntax.markRemoved() + *d = Use{} + } + } + + // TODO(#45713): Add module path to comment. + + for diskPath, modulePath := range need { + f.AddNewUse(diskPath, modulePath) + } + f.SortBlocks() +} + +func (f *WorkFile) DropUse(path string) error { + for _, d := range f.Use { + if d.Path == path { + d.Syntax.markRemoved() + *d = Use{} + } + } + return nil +} + +func (f *WorkFile) AddReplace(oldPath, oldVers, newPath, newVers string) error { + return addReplace(f.Syntax, &f.Replace, oldPath, oldVers, newPath, newVers) +} + +func (f *WorkFile) DropReplace(oldPath, oldVers string) error { + for _, r := range f.Replace { + if r.Old.Path == oldPath && r.Old.Version == oldVers { + r.Syntax.markRemoved() + *r = Replace{} + } + } + return nil +} + +func (f *WorkFile) SortBlocks() { + f.removeDups() // otherwise sorting is unsafe + + for _, stmt := range f.Syntax.Stmt { + block, ok := stmt.(*LineBlock) + if !ok { + continue + } + slices.SortStableFunc(block.Line, compareLine) + } +} + +// removeDups removes duplicate replace directives. +// +// Later replace directives take priority. +// +// require directives are not de-duplicated. That's left up to higher-level +// logic (MVS). +// +// retract directives are not de-duplicated since comments are +// meaningful, and versions may be retracted multiple times. +func (f *WorkFile) removeDups() { + removeDups(f.Syntax, nil, &f.Replace, nil, nil) +} diff --git a/vendor/golang.org/x/mod/module/module.go b/vendor/golang.org/x/mod/module/module.go new file mode 100644 index 0000000..16e1aa7 --- /dev/null +++ b/vendor/golang.org/x/mod/module/module.go @@ -0,0 +1,840 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package module defines the module.Version type along with support code. +// +// The [module.Version] type is a simple Path, Version pair: +// +// type Version struct { +// Path string +// Version string +// } +// +// There are no restrictions imposed directly by use of this structure, +// but additional checking functions, most notably [Check], verify that +// a particular path, version pair is valid. +// +// # Escaped Paths +// +// Module paths appear as substrings of file system paths +// (in the download cache) and of web server URLs in the proxy protocol. +// In general we cannot rely on file systems to be case-sensitive, +// nor can we rely on web servers, since they read from file systems. +// That is, we cannot rely on the file system to keep rsc.io/QUOTE +// and rsc.io/quote separate. Windows and macOS don't. +// Instead, we must never require two different casings of a file path. +// Because we want the download cache to match the proxy protocol, +// and because we want the proxy protocol to be possible to serve +// from a tree of static files (which might be stored on a case-insensitive +// file system), the proxy protocol must never require two different casings +// of a URL path either. +// +// One possibility would be to make the escaped form be the lowercase +// hexadecimal encoding of the actual path bytes. This would avoid ever +// needing different casings of a file path, but it would be fairly illegible +// to most programmers when those paths appeared in the file system +// (including in file paths in compiler errors and stack traces) +// in web server logs, and so on. Instead, we want a safe escaped form that +// leaves most paths unaltered. +// +// The safe escaped form is to replace every uppercase letter +// with an exclamation mark followed by the letter's lowercase equivalent. +// +// For example, +// +// github.com/Azure/azure-sdk-for-go -> github.com/!azure/azure-sdk-for-go. +// github.com/GoogleCloudPlatform/cloudsql-proxy -> github.com/!google!cloud!platform/cloudsql-proxy +// github.com/Sirupsen/logrus -> github.com/!sirupsen/logrus. +// +// Import paths that avoid upper-case letters are left unchanged. +// Note that because import paths are ASCII-only and avoid various +// problematic punctuation (like : < and >), the escaped form is also ASCII-only +// and avoids the same problematic punctuation. +// +// Import paths have never allowed exclamation marks, so there is no +// need to define how to escape a literal !. +// +// # Unicode Restrictions +// +// Today, paths are disallowed from using Unicode. +// +// Although paths are currently disallowed from using Unicode, +// we would like at some point to allow Unicode letters as well, to assume that +// file systems and URLs are Unicode-safe (storing UTF-8), and apply +// the !-for-uppercase convention for escaping them in the file system. +// But there are at least two subtle considerations. +// +// First, note that not all case-fold equivalent distinct runes +// form an upper/lower pair. +// For example, U+004B ('K'), U+006B ('k'), and U+212A ('K' for Kelvin) +// are three distinct runes that case-fold to each other. +// When we do add Unicode letters, we must not assume that upper/lower +// are the only case-equivalent pairs. +// Perhaps the Kelvin symbol would be disallowed entirely, for example. +// Or perhaps it would escape as "!!k", or perhaps as "(212A)". +// +// Second, it would be nice to allow Unicode marks as well as letters, +// but marks include combining marks, and then we must deal not +// only with case folding but also normalization: both U+00E9 ('é') +// and U+0065 U+0301 ('e' followed by combining acute accent) +// look the same on the page and are treated by some file systems +// as the same path. If we do allow Unicode marks in paths, there +// must be some kind of normalization to allow only one canonical +// encoding of any character used in an import path. +package module + +// IMPORTANT NOTE +// +// This file essentially defines the set of valid import paths for the go command. +// There are many subtle considerations, including Unicode ambiguity, +// security, network, and file system representations. +// +// This file also defines the set of valid module path and version combinations, +// another topic with many subtle considerations. +// +// Changes to the semantics in this file require approval from rsc. + +import ( + "cmp" + "errors" + "fmt" + "path" + "slices" + "strings" + "unicode" + "unicode/utf8" + + "golang.org/x/mod/semver" +) + +// A Version (for clients, a module.Version) is defined by a module path and version pair. +// These are stored in their plain (unescaped) form. +type Version struct { + // Path is a module path, like "golang.org/x/text" or "rsc.io/quote/v2". + Path string + + // Version is usually a semantic version in canonical form. + // There are three exceptions to this general rule. + // First, the top-level target of a build has no specific version + // and uses Version = "". + // Second, during MVS calculations the version "none" is used + // to represent the decision to take no version of a given module. + // Third, filesystem paths found in "replace" directives are + // represented by a path with an empty version. + Version string `json:",omitempty"` +} + +// String returns a representation of the Version suitable for logging +// (Path@Version, or just Path if Version is empty). +func (m Version) String() string { + if m.Version == "" { + return m.Path + } + return m.Path + "@" + m.Version +} + +// A ModuleError indicates an error specific to a module. +type ModuleError struct { + Path string + Version string + Err error +} + +// VersionError returns a [ModuleError] derived from a [Version] and error, +// or err itself if it is already such an error. +func VersionError(v Version, err error) error { + var mErr *ModuleError + if errors.As(err, &mErr) && mErr.Path == v.Path && mErr.Version == v.Version { + return err + } + return &ModuleError{ + Path: v.Path, + Version: v.Version, + Err: err, + } +} + +func (e *ModuleError) Error() string { + if v, ok := e.Err.(*InvalidVersionError); ok { + return fmt.Sprintf("%s@%s: invalid %s: %v", e.Path, v.Version, v.noun(), v.Err) + } + if e.Version != "" { + return fmt.Sprintf("%s@%s: %v", e.Path, e.Version, e.Err) + } + return fmt.Sprintf("module %s: %v", e.Path, e.Err) +} + +func (e *ModuleError) Unwrap() error { return e.Err } + +// An InvalidVersionError indicates an error specific to a version, with the +// module path unknown or specified externally. +// +// A [ModuleError] may wrap an InvalidVersionError, but an InvalidVersionError +// must not wrap a ModuleError. +type InvalidVersionError struct { + Version string + Pseudo bool + Err error +} + +// noun returns either "version" or "pseudo-version", depending on whether +// e.Version is a pseudo-version. +func (e *InvalidVersionError) noun() string { + if e.Pseudo { + return "pseudo-version" + } + return "version" +} + +func (e *InvalidVersionError) Error() string { + return fmt.Sprintf("%s %q invalid: %s", e.noun(), e.Version, e.Err) +} + +func (e *InvalidVersionError) Unwrap() error { return e.Err } + +// An InvalidPathError indicates a module, import, or file path doesn't +// satisfy all naming constraints. See [CheckPath], [CheckImportPath], +// and [CheckFilePath] for specific restrictions. +type InvalidPathError struct { + Kind string // "module", "import", or "file" + Path string + Err error +} + +func (e *InvalidPathError) Error() string { + return fmt.Sprintf("malformed %s path %q: %v", e.Kind, e.Path, e.Err) +} + +func (e *InvalidPathError) Unwrap() error { return e.Err } + +// Check checks that a given module path, version pair is valid. +// In addition to the path being a valid module path +// and the version being a valid semantic version, +// the two must correspond. +// For example, the path "yaml/v2" only corresponds to +// semantic versions beginning with "v2.". +func Check(path, version string) error { + if err := CheckPath(path); err != nil { + return err + } + if !semver.IsValid(version) { + return &ModuleError{ + Path: path, + Err: &InvalidVersionError{Version: version, Err: errors.New("not a semantic version")}, + } + } + _, pathMajor, _ := SplitPathVersion(path) + if err := CheckPathMajor(version, pathMajor); err != nil { + return &ModuleError{Path: path, Err: err} + } + return nil +} + +// firstPathOK reports whether r can appear in the first element of a module path. +// The first element of the path must be an LDH domain name, at least for now. +// To avoid case ambiguity, the domain name must be entirely lower case. +func firstPathOK(r rune) bool { + return r == '-' || r == '.' || + '0' <= r && r <= '9' || + 'a' <= r && r <= 'z' +} + +// modPathOK reports whether r can appear in a module path element. +// Paths can be ASCII letters, ASCII digits, and limited ASCII punctuation: - . _ and ~. +// +// This matches what "go get" has historically recognized in import paths, +// and avoids confusing sequences like '%20' or '+' that would change meaning +// if used in a URL. +// +// TODO(rsc): We would like to allow Unicode letters, but that requires additional +// care in the safe encoding (see "escaped paths" above). +func modPathOK(r rune) bool { + if r < utf8.RuneSelf { + return r == '-' || r == '.' || r == '_' || r == '~' || + '0' <= r && r <= '9' || + 'A' <= r && r <= 'Z' || + 'a' <= r && r <= 'z' + } + return false +} + +// importPathOK reports whether r can appear in a package import path element. +// +// Import paths are intermediate between module paths and file paths: we allow +// disallow characters that would be confusing or ambiguous as arguments to +// 'go get' (such as '@' and ' ' ), but allow certain characters that are +// otherwise-unambiguous on the command line and historically used for some +// binary names (such as '++' as a suffix for compiler binaries and wrappers). +func importPathOK(r rune) bool { + return modPathOK(r) || r == '+' +} + +// fileNameOK reports whether r can appear in a file name. +// For now we allow all Unicode letters but otherwise limit to pathOK plus a few more punctuation characters. +// If we expand the set of allowed characters here, we have to +// work harder at detecting potential case-folding and normalization collisions. +// See note about "escaped paths" above. +func fileNameOK(r rune) bool { + if r < utf8.RuneSelf { + // Entire set of ASCII punctuation, from which we remove characters: + // ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ + // We disallow some shell special characters: " ' * < > ? ` | + // (Note that some of those are disallowed by the Windows file system as well.) + // We also disallow path separators / : and \ (fileNameOK is only called on path element characters). + // We allow spaces (U+0020) in file names. + const allowed = "!#$%&()+,-.=@[]^_{}~ " + if '0' <= r && r <= '9' || 'A' <= r && r <= 'Z' || 'a' <= r && r <= 'z' { + return true + } + return strings.ContainsRune(allowed, r) + } + // It may be OK to add more ASCII punctuation here, but only carefully. + // For example Windows disallows < > \, and macOS disallows :, so we must not allow those. + return unicode.IsLetter(r) +} + +// CheckPath checks that a module path is valid. +// A valid module path is a valid import path, as checked by [CheckImportPath], +// with three additional constraints. +// First, the leading path element (up to the first slash, if any), +// by convention a domain name, must contain only lower-case ASCII letters, +// ASCII digits, dots (U+002E), and dashes (U+002D); +// it must contain at least one dot and cannot start with a dash. +// Second, for a final path element of the form /vN, where N looks numeric +// (ASCII digits and dots) must not begin with a leading zero, must not be /v1, +// and must not contain any dots. For paths beginning with "gopkg.in/", +// this second requirement is replaced by a requirement that the path +// follow the gopkg.in server's conventions. +// Third, no path element may begin with a dot. +func CheckPath(path string) (err error) { + defer func() { + if err != nil { + err = &InvalidPathError{Kind: "module", Path: path, Err: err} + } + }() + + if err := checkPath(path, modulePath); err != nil { + return err + } + i := strings.Index(path, "/") + if i < 0 { + i = len(path) + } + if i == 0 { + return fmt.Errorf("leading slash") + } + if !strings.Contains(path[:i], ".") { + return fmt.Errorf("missing dot in first path element") + } + if path[0] == '-' { + return fmt.Errorf("leading dash in first path element") + } + for _, r := range path[:i] { + if !firstPathOK(r) { + return fmt.Errorf("invalid char %q in first path element", r) + } + } + if _, _, ok := SplitPathVersion(path); !ok { + return fmt.Errorf("invalid version") + } + return nil +} + +// CheckImportPath checks that an import path is valid. +// +// A valid import path consists of one or more valid path elements +// separated by slashes (U+002F). (It must not begin with nor end in a slash.) +// +// A valid path element is a non-empty string made up of +// ASCII letters, ASCII digits, and limited ASCII punctuation: - . _ and ~. +// It must not end with a dot (U+002E), nor contain two dots in a row. +// +// The element prefix up to the first dot must not be a reserved file name +// on Windows, regardless of case (CON, com1, NuL, and so on). The element +// must not have a suffix of a tilde followed by one or more ASCII digits +// (to exclude paths elements that look like Windows short-names). +// +// CheckImportPath may be less restrictive in the future, but see the +// top-level package documentation for additional information about +// subtleties of Unicode. +func CheckImportPath(path string) error { + if err := checkPath(path, importPath); err != nil { + return &InvalidPathError{Kind: "import", Path: path, Err: err} + } + return nil +} + +// pathKind indicates what kind of path we're checking. Module paths, +// import paths, and file paths have different restrictions. +type pathKind int + +const ( + modulePath pathKind = iota + importPath + filePath +) + +// checkPath checks that a general path is valid. kind indicates what +// specific constraints should be applied. +// +// checkPath returns an error describing why the path is not valid. +// Because these checks apply to module, import, and file paths, +// and because other checks may be applied, the caller is expected to wrap +// this error with [InvalidPathError]. +func checkPath(path string, kind pathKind) error { + if !utf8.ValidString(path) { + return fmt.Errorf("invalid UTF-8") + } + if path == "" { + return fmt.Errorf("empty string") + } + if path[0] == '-' && kind != filePath { + return fmt.Errorf("leading dash") + } + if strings.Contains(path, "//") { + return fmt.Errorf("double slash") + } + if path[len(path)-1] == '/' { + return fmt.Errorf("trailing slash") + } + elemStart := 0 + for i, r := range path { + if r == '/' { + if err := checkElem(path[elemStart:i], kind); err != nil { + return err + } + elemStart = i + 1 + } + } + if err := checkElem(path[elemStart:], kind); err != nil { + return err + } + return nil +} + +// checkElem checks whether an individual path element is valid. +func checkElem(elem string, kind pathKind) error { + if elem == "" { + return fmt.Errorf("empty path element") + } + if strings.Count(elem, ".") == len(elem) { + return fmt.Errorf("invalid path element %q", elem) + } + if elem[0] == '.' && kind == modulePath { + return fmt.Errorf("leading dot in path element") + } + if elem[len(elem)-1] == '.' { + return fmt.Errorf("trailing dot in path element") + } + for _, r := range elem { + ok := false + switch kind { + case modulePath: + ok = modPathOK(r) + case importPath: + ok = importPathOK(r) + case filePath: + ok = fileNameOK(r) + default: + panic(fmt.Sprintf("internal error: invalid kind %v", kind)) + } + if !ok { + return fmt.Errorf("invalid char %q", r) + } + } + + // Windows disallows a bunch of path elements, sadly. + // See https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file + short := elem + if i := strings.Index(short, "."); i >= 0 { + short = short[:i] + } + for _, bad := range badWindowsNames { + if strings.EqualFold(bad, short) { + return fmt.Errorf("%q disallowed as path element component on Windows", short) + } + } + + if kind == filePath { + // don't check for Windows short-names in file names. They're + // only an issue for import paths. + return nil + } + + // Reject path components that look like Windows short-names. + // Those usually end in a tilde followed by one or more ASCII digits. + if tilde := strings.LastIndexByte(short, '~'); tilde >= 0 && tilde < len(short)-1 { + suffix := short[tilde+1:] + suffixIsDigits := true + for _, r := range suffix { + if r < '0' || r > '9' { + suffixIsDigits = false + break + } + } + if suffixIsDigits { + return fmt.Errorf("trailing tilde and digits in path element") + } + } + + return nil +} + +// CheckFilePath checks that a slash-separated file path is valid. +// The definition of a valid file path is the same as the definition +// of a valid import path except that the set of allowed characters is larger: +// all Unicode letters, ASCII digits, the ASCII space character (U+0020), +// and the ASCII punctuation characters +// “!#$%&()+,-.=@[]^_{}~”. +// (The excluded punctuation characters, " * < > ? ` ' | / \ and :, +// have special meanings in certain shells or operating systems.) +// +// CheckFilePath may be less restrictive in the future, but see the +// top-level package documentation for additional information about +// subtleties of Unicode. +func CheckFilePath(path string) error { + if err := checkPath(path, filePath); err != nil { + return &InvalidPathError{Kind: "file", Path: path, Err: err} + } + return nil +} + +// badWindowsNames are the reserved file path elements on Windows. +// See https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file +var badWindowsNames = []string{ + "CON", + "PRN", + "AUX", + "NUL", + "COM1", + "COM2", + "COM3", + "COM4", + "COM5", + "COM6", + "COM7", + "COM8", + "COM9", + "LPT1", + "LPT2", + "LPT3", + "LPT4", + "LPT5", + "LPT6", + "LPT7", + "LPT8", + "LPT9", +} + +// SplitPathVersion returns prefix and major version such that prefix+pathMajor == path +// and version is either empty or "/vN" for N >= 2. +// As a special case, gopkg.in paths are recognized directly; +// they require ".vN" instead of "/vN", and for all N, not just N >= 2. +// SplitPathVersion returns with ok = false when presented with +// a path whose last path element does not satisfy the constraints +// applied by [CheckPath], such as "example.com/pkg/v1" or "example.com/pkg/v1.2". +func SplitPathVersion(path string) (prefix, pathMajor string, ok bool) { + if strings.HasPrefix(path, "gopkg.in/") { + return splitGopkgIn(path) + } + + i := len(path) + dot := false + for i > 0 && ('0' <= path[i-1] && path[i-1] <= '9' || path[i-1] == '.') { + if path[i-1] == '.' { + dot = true + } + i-- + } + if i <= 1 || i == len(path) || path[i-1] != 'v' || path[i-2] != '/' { + return path, "", true + } + prefix, pathMajor = path[:i-2], path[i-2:] + if dot || len(pathMajor) <= 2 || pathMajor[2] == '0' || pathMajor == "/v1" { + return path, "", false + } + return prefix, pathMajor, true +} + +// splitGopkgIn is like SplitPathVersion but only for gopkg.in paths. +func splitGopkgIn(path string) (prefix, pathMajor string, ok bool) { + if !strings.HasPrefix(path, "gopkg.in/") { + return path, "", false + } + i := len(path) + if strings.HasSuffix(path, "-unstable") { + i -= len("-unstable") + } + for i > 0 && ('0' <= path[i-1] && path[i-1] <= '9') { + i-- + } + if i <= 1 || path[i-1] != 'v' || path[i-2] != '.' { + // All gopkg.in paths must end in vN for some N. + return path, "", false + } + prefix, pathMajor = path[:i-2], path[i-2:] + if len(pathMajor) <= 2 || pathMajor[2] == '0' && pathMajor != ".v0" { + return path, "", false + } + return prefix, pathMajor, true +} + +// MatchPathMajor reports whether the semantic version v +// matches the path major version pathMajor. +// +// MatchPathMajor returns true if and only if [CheckPathMajor] returns nil. +func MatchPathMajor(v, pathMajor string) bool { + return CheckPathMajor(v, pathMajor) == nil +} + +// CheckPathMajor returns a non-nil error if the semantic version v +// does not match the path major version pathMajor. +func CheckPathMajor(v, pathMajor string) error { + // TODO(jayconrod): return errors or panic for invalid inputs. This function + // (and others) was covered by integration tests for cmd/go, and surrounding + // code protected against invalid inputs like non-canonical versions. + if strings.HasPrefix(pathMajor, ".v") && strings.HasSuffix(pathMajor, "-unstable") { + pathMajor = strings.TrimSuffix(pathMajor, "-unstable") + } + if strings.HasPrefix(v, "v0.0.0-") && pathMajor == ".v1" { + // Allow old bug in pseudo-versions that generated v0.0.0- pseudoversion for gopkg .v1. + // For example, gopkg.in/yaml.v2@v2.2.1's go.mod requires gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405. + return nil + } + m := semver.Major(v) + if pathMajor == "" { + if m == "v0" || m == "v1" || semver.Build(v) == "+incompatible" { + return nil + } + pathMajor = "v0 or v1" + } else if pathMajor[0] == '/' || pathMajor[0] == '.' { + if m == pathMajor[1:] { + return nil + } + pathMajor = pathMajor[1:] + } + return &InvalidVersionError{ + Version: v, + Err: fmt.Errorf("should be %s, not %s", pathMajor, semver.Major(v)), + } +} + +// PathMajorPrefix returns the major-version tag prefix implied by pathMajor. +// An empty PathMajorPrefix allows either v0 or v1. +// +// Note that [MatchPathMajor] may accept some versions that do not actually begin +// with this prefix: namely, it accepts a 'v0.0.0-' prefix for a '.v1' +// pathMajor, even though that pathMajor implies 'v1' tagging. +func PathMajorPrefix(pathMajor string) string { + if pathMajor == "" { + return "" + } + if pathMajor[0] != '/' && pathMajor[0] != '.' { + panic("pathMajor suffix " + pathMajor + " passed to PathMajorPrefix lacks separator") + } + if strings.HasPrefix(pathMajor, ".v") && strings.HasSuffix(pathMajor, "-unstable") { + pathMajor = strings.TrimSuffix(pathMajor, "-unstable") + } + m := pathMajor[1:] + if m != semver.Major(m) { + panic("pathMajor suffix " + pathMajor + "passed to PathMajorPrefix is not a valid major version") + } + return m +} + +// CanonicalVersion returns the canonical form of the version string v. +// It is the same as [semver.Canonical] except that it preserves the special build suffix "+incompatible". +func CanonicalVersion(v string) string { + cv := semver.Canonical(v) + if semver.Build(v) == "+incompatible" { + cv += "+incompatible" + } + return cv +} + +// Sort sorts the list by Path, breaking ties by comparing [Version] fields. +// The Version fields are interpreted as semantic versions (using [semver.Compare]) +// optionally followed by a tie-breaking suffix introduced by a slash character, +// like in "v0.0.1/go.mod". +func Sort(list []Version) { + slices.SortFunc(list, func(i, j Version) int { + if i.Path != j.Path { + return strings.Compare(i.Path, j.Path) + } + // To help go.sum formatting, allow version/file. + // Compare semver prefix by semver rules, + // file by string order. + vi := i.Version + vj := j.Version + var fi, fj string + if k := strings.Index(vi, "/"); k >= 0 { + vi, fi = vi[:k], vi[k:] + } + if k := strings.Index(vj, "/"); k >= 0 { + vj, fj = vj[:k], vj[k:] + } + if vi != vj { + return semver.Compare(vi, vj) + } + return cmp.Compare(fi, fj) + }) +} + +// EscapePath returns the escaped form of the given module path. +// It fails if the module path is invalid. +func EscapePath(path string) (escaped string, err error) { + if err := CheckPath(path); err != nil { + return "", err + } + + return escapeString(path) +} + +// EscapeVersion returns the escaped form of the given module version. +// Versions are allowed to be in non-semver form but must be valid file names +// and not contain exclamation marks. +func EscapeVersion(v string) (escaped string, err error) { + if err := checkElem(v, filePath); err != nil || strings.Contains(v, "!") { + return "", &InvalidVersionError{ + Version: v, + Err: fmt.Errorf("disallowed version string"), + } + } + return escapeString(v) +} + +func escapeString(s string) (escaped string, err error) { + haveUpper := false + for _, r := range s { + if r == '!' || r >= utf8.RuneSelf { + // This should be disallowed by CheckPath, but diagnose anyway. + // The correctness of the escaping loop below depends on it. + return "", fmt.Errorf("internal error: inconsistency in EscapePath") + } + if 'A' <= r && r <= 'Z' { + haveUpper = true + } + } + + if !haveUpper { + return s, nil + } + + var buf []byte + for _, r := range s { + if 'A' <= r && r <= 'Z' { + buf = append(buf, '!', byte(r+'a'-'A')) + } else { + buf = append(buf, byte(r)) + } + } + return string(buf), nil +} + +// UnescapePath returns the module path for the given escaped path. +// It fails if the escaped path is invalid or describes an invalid path. +func UnescapePath(escaped string) (path string, err error) { + path, ok := unescapeString(escaped) + if !ok { + return "", fmt.Errorf("invalid escaped module path %q", escaped) + } + if err := CheckPath(path); err != nil { + return "", fmt.Errorf("invalid escaped module path %q: %v", escaped, err) + } + return path, nil +} + +// UnescapeVersion returns the version string for the given escaped version. +// It fails if the escaped form is invalid or describes an invalid version. +// Versions are allowed to be in non-semver form but must be valid file names +// and not contain exclamation marks. +func UnescapeVersion(escaped string) (v string, err error) { + v, ok := unescapeString(escaped) + if !ok { + return "", fmt.Errorf("invalid escaped version %q", escaped) + } + if err := checkElem(v, filePath); err != nil { + return "", fmt.Errorf("invalid escaped version %q: %v", v, err) + } + return v, nil +} + +func unescapeString(escaped string) (string, bool) { + var buf []byte + + bang := false + for _, r := range escaped { + if r >= utf8.RuneSelf { + return "", false + } + if bang { + bang = false + if r < 'a' || 'z' < r { + return "", false + } + buf = append(buf, byte(r+'A'-'a')) + continue + } + if r == '!' { + bang = true + continue + } + if 'A' <= r && r <= 'Z' { + return "", false + } + buf = append(buf, byte(r)) + } + if bang { + return "", false + } + return string(buf), true +} + +// MatchPrefixPatterns reports whether any path prefix of target matches one of +// the glob patterns (as defined by [path.Match]) in the comma-separated globs +// list. This implements the algorithm used when matching a module path to the +// GOPRIVATE environment variable, as described by 'go help module-private'. +// +// It ignores any empty or malformed patterns in the list. +// Trailing slashes on patterns are ignored. +func MatchPrefixPatterns(globs, target string) bool { + for globs != "" { + // Extract next non-empty glob in comma-separated list. + var glob string + if i := strings.Index(globs, ","); i >= 0 { + glob, globs = globs[:i], globs[i+1:] + } else { + glob, globs = globs, "" + } + glob = strings.TrimSuffix(glob, "/") + if glob == "" { + continue + } + + // A glob with N+1 path elements (N slashes) needs to be matched + // against the first N+1 path elements of target, + // which end just before the N+1'th slash. + n := strings.Count(glob, "/") + prefix := target + // Walk target, counting slashes, truncating at the N+1'th slash. + for i := 0; i < len(target); i++ { + if target[i] == '/' { + if n == 0 { + prefix = target[:i] + break + } + n-- + } + } + if n > 0 { + // Not enough prefix elements. + continue + } + matched, _ := path.Match(glob, prefix) + if matched { + return true + } + } + return false +} diff --git a/vendor/golang.org/x/mod/module/pseudo.go b/vendor/golang.org/x/mod/module/pseudo.go new file mode 100644 index 0000000..9cf19d3 --- /dev/null +++ b/vendor/golang.org/x/mod/module/pseudo.go @@ -0,0 +1,250 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Pseudo-versions +// +// Code authors are expected to tag the revisions they want users to use, +// including prereleases. However, not all authors tag versions at all, +// and not all commits a user might want to try will have tags. +// A pseudo-version is a version with a special form that allows us to +// address an untagged commit and order that version with respect to +// other versions we might encounter. +// +// A pseudo-version takes one of the general forms: +// +// (1) vX.0.0-yyyymmddhhmmss-abcdef123456 +// (2) vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdef123456 +// (3) vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdef123456+incompatible +// (4) vX.Y.Z-pre.0.yyyymmddhhmmss-abcdef123456 +// (5) vX.Y.Z-pre.0.yyyymmddhhmmss-abcdef123456+incompatible +// +// If there is no recently tagged version with the right major version vX, +// then form (1) is used, creating a space of pseudo-versions at the bottom +// of the vX version range, less than any tagged version, including the unlikely v0.0.0. +// +// If the most recent tagged version before the target commit is vX.Y.Z or vX.Y.Z+incompatible, +// then the pseudo-version uses form (2) or (3), making it a prerelease for the next +// possible semantic version after vX.Y.Z. The leading 0 segment in the prerelease string +// ensures that the pseudo-version compares less than possible future explicit prereleases +// like vX.Y.(Z+1)-rc1 or vX.Y.(Z+1)-1. +// +// If the most recent tagged version before the target commit is vX.Y.Z-pre or vX.Y.Z-pre+incompatible, +// then the pseudo-version uses form (4) or (5), making it a slightly later prerelease. + +package module + +import ( + "errors" + "fmt" + "strings" + "time" + + "golang.org/x/mod/internal/lazyregexp" + "golang.org/x/mod/semver" +) + +var pseudoVersionRE = lazyregexp.New(`^v[0-9]+\.(0\.0-|\d+\.\d+-([^+]*\.)?0\.)\d{14}-[A-Za-z0-9]+(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$`) + +const PseudoVersionTimestampFormat = "20060102150405" + +// PseudoVersion returns a pseudo-version for the given major version ("v1") +// preexisting older tagged version ("" or "v1.2.3" or "v1.2.3-pre"), revision time, +// and revision identifier (usually a 12-byte commit hash prefix). +func PseudoVersion(major, older string, t time.Time, rev string) string { + if major == "" { + major = "v0" + } + segment := fmt.Sprintf("%s-%s", t.UTC().Format(PseudoVersionTimestampFormat), rev) + build := semver.Build(older) + older = semver.Canonical(older) + if older == "" { + return major + ".0.0-" + segment // form (1) + } + if semver.Prerelease(older) != "" { + return older + ".0." + segment + build // form (4), (5) + } + + // Form (2), (3). + // Extract patch from vMAJOR.MINOR.PATCH + i := strings.LastIndex(older, ".") + 1 + v, patch := older[:i], older[i:] + + // Reassemble. + return v + incDecimal(patch) + "-0." + segment + build +} + +// ZeroPseudoVersion returns a pseudo-version with a zero timestamp and +// revision, which may be used as a placeholder. +func ZeroPseudoVersion(major string) string { + return PseudoVersion(major, "", time.Time{}, "000000000000") +} + +// incDecimal returns the decimal string incremented by 1. +func incDecimal(decimal string) string { + // Scan right to left turning 9s to 0s until you find a digit to increment. + digits := []byte(decimal) + i := len(digits) - 1 + for ; i >= 0 && digits[i] == '9'; i-- { + digits[i] = '0' + } + if i >= 0 { + digits[i]++ + } else { + // digits is all zeros + digits[0] = '1' + digits = append(digits, '0') + } + return string(digits) +} + +// decDecimal returns the decimal string decremented by 1, or the empty string +// if the decimal is all zeroes. +func decDecimal(decimal string) string { + // Scan right to left turning 0s to 9s until you find a digit to decrement. + digits := []byte(decimal) + i := len(digits) - 1 + for ; i >= 0 && digits[i] == '0'; i-- { + digits[i] = '9' + } + if i < 0 { + // decimal is all zeros + return "" + } + if i == 0 && digits[i] == '1' && len(digits) > 1 { + digits = digits[1:] + } else { + digits[i]-- + } + return string(digits) +} + +// IsPseudoVersion reports whether v is a pseudo-version. +func IsPseudoVersion(v string) bool { + return strings.Count(v, "-") >= 2 && semver.IsValid(v) && pseudoVersionRE.MatchString(v) +} + +// IsZeroPseudoVersion returns whether v is a pseudo-version with a zero base, +// timestamp, and revision, as returned by [ZeroPseudoVersion]. +func IsZeroPseudoVersion(v string) bool { + return v == ZeroPseudoVersion(semver.Major(v)) +} + +// PseudoVersionTime returns the time stamp of the pseudo-version v. +// It returns an error if v is not a pseudo-version or if the time stamp +// embedded in the pseudo-version is not a valid time. +func PseudoVersionTime(v string) (time.Time, error) { + _, timestamp, _, _, err := parsePseudoVersion(v) + if err != nil { + return time.Time{}, err + } + t, err := time.Parse("20060102150405", timestamp) + if err != nil { + return time.Time{}, &InvalidVersionError{ + Version: v, + Pseudo: true, + Err: fmt.Errorf("malformed time %q", timestamp), + } + } + return t, nil +} + +// PseudoVersionRev returns the revision identifier of the pseudo-version v. +// It returns an error if v is not a pseudo-version. +func PseudoVersionRev(v string) (rev string, err error) { + _, _, rev, _, err = parsePseudoVersion(v) + return +} + +// PseudoVersionBase returns the canonical parent version, if any, upon which +// the pseudo-version v is based. +// +// If v has no parent version (that is, if it is "vX.0.0-[…]"), +// PseudoVersionBase returns the empty string and a nil error. +func PseudoVersionBase(v string) (string, error) { + base, _, _, build, err := parsePseudoVersion(v) + if err != nil { + return "", err + } + + switch pre := semver.Prerelease(base); pre { + case "": + // vX.0.0-yyyymmddhhmmss-abcdef123456 → "" + if build != "" { + // Pseudo-versions of the form vX.0.0-yyyymmddhhmmss-abcdef123456+incompatible + // are nonsensical: the "vX.0.0-" prefix implies that there is no parent tag, + // but the "+incompatible" suffix implies that the major version of + // the parent tag is not compatible with the module's import path. + // + // There are a few such entries in the index generated by proxy.golang.org, + // but we believe those entries were generated by the proxy itself. + return "", &InvalidVersionError{ + Version: v, + Pseudo: true, + Err: fmt.Errorf("lacks base version, but has build metadata %q", build), + } + } + return "", nil + + case "-0": + // vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdef123456 → vX.Y.Z + // vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdef123456+incompatible → vX.Y.Z+incompatible + base = strings.TrimSuffix(base, pre) + i := strings.LastIndexByte(base, '.') + if i < 0 { + panic("base from parsePseudoVersion missing patch number: " + base) + } + patch := decDecimal(base[i+1:]) + if patch == "" { + // vX.0.0-0 is invalid, but has been observed in the wild in the index + // generated by requests to proxy.golang.org. + // + // NOTE(bcmills): I cannot find a historical bug that accounts for + // pseudo-versions of this form, nor have I seen such versions in any + // actual go.mod files. If we find actual examples of this form and a + // reasonable theory of how they came into existence, it seems fine to + // treat them as equivalent to vX.0.0 (especially since the invalid + // pseudo-versions have lower precedence than the real ones). For now, we + // reject them. + return "", &InvalidVersionError{ + Version: v, + Pseudo: true, + Err: fmt.Errorf("version before %s would have negative patch number", base), + } + } + return base[:i+1] + patch + build, nil + + default: + // vX.Y.Z-pre.0.yyyymmddhhmmss-abcdef123456 → vX.Y.Z-pre + // vX.Y.Z-pre.0.yyyymmddhhmmss-abcdef123456+incompatible → vX.Y.Z-pre+incompatible + if !strings.HasSuffix(base, ".0") { + panic(`base from parsePseudoVersion missing ".0" before date: ` + base) + } + return strings.TrimSuffix(base, ".0") + build, nil + } +} + +var errPseudoSyntax = errors.New("syntax error") + +func parsePseudoVersion(v string) (base, timestamp, rev, build string, err error) { + if !IsPseudoVersion(v) { + return "", "", "", "", &InvalidVersionError{ + Version: v, + Pseudo: true, + Err: errPseudoSyntax, + } + } + build = semver.Build(v) + v = strings.TrimSuffix(v, build) + j := strings.LastIndex(v, "-") + v, rev = v[:j], v[j+1:] + i := strings.LastIndex(v, "-") + if j := strings.LastIndex(v, "."); j > i { + base = v[:j] // "vX.Y.Z-pre.0" or "vX.Y.(Z+1)-0" + timestamp = v[j+1:] + } else { + base = v[:i] // "vX.0.0" + timestamp = v[i+1:] + } + return base, timestamp, rev, build, nil +} diff --git a/vendor/golang.org/x/mod/semver/semver.go b/vendor/golang.org/x/mod/semver/semver.go new file mode 100644 index 0000000..628f8fd --- /dev/null +++ b/vendor/golang.org/x/mod/semver/semver.go @@ -0,0 +1,407 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package semver implements comparison of semantic version strings. +// In this package, semantic version strings must begin with a leading "v", +// as in "v1.0.0". +// +// The general form of a semantic version string accepted by this package is +// +// vMAJOR[.MINOR[.PATCH[-PRERELEASE][+BUILD]]] +// +// where square brackets indicate optional parts of the syntax; +// MAJOR, MINOR, and PATCH are decimal integers without extra leading zeros; +// PRERELEASE and BUILD are each a series of non-empty dot-separated identifiers +// using only alphanumeric characters and hyphens; and +// all-numeric PRERELEASE identifiers must not have leading zeros. +// +// This package follows Semantic Versioning 2.0.0 (see semver.org) +// with two exceptions. First, it requires the "v" prefix. Second, it recognizes +// vMAJOR and vMAJOR.MINOR (with no prerelease or build suffixes) +// as shorthands for vMAJOR.0.0 and vMAJOR.MINOR.0. +package semver + +import ( + "slices" + "strings" +) + +// parsed returns the parsed form of a semantic version string. +type parsed struct { + major string + minor string + patch string + short string + prerelease string + build string +} + +// IsValid reports whether v is a valid semantic version string. +func IsValid(v string) bool { + _, ok := parse(v) + return ok +} + +// Canonical returns the canonical formatting of the semantic version v. +// It fills in any missing .MINOR or .PATCH and discards build metadata. +// Two semantic versions compare equal only if their canonical formattings +// are identical strings. +// The canonical invalid semantic version is the empty string. +func Canonical(v string) string { + p, ok := parse(v) + if !ok { + return "" + } + if p.build != "" { + return v[:len(v)-len(p.build)] + } + if p.short != "" { + return v + p.short + } + return v +} + +// Major returns the major version prefix of the semantic version v. +// For example, Major("v2.1.0") == "v2". +// If v is an invalid semantic version string, Major returns the empty string. +func Major(v string) string { + pv, ok := parse(v) + if !ok { + return "" + } + return v[:1+len(pv.major)] +} + +// MajorMinor returns the major.minor version prefix of the semantic version v. +// For example, MajorMinor("v2.1.0") == "v2.1". +// If v is an invalid semantic version string, MajorMinor returns the empty string. +func MajorMinor(v string) string { + pv, ok := parse(v) + if !ok { + return "" + } + i := 1 + len(pv.major) + if j := i + 1 + len(pv.minor); j <= len(v) && v[i] == '.' && v[i+1:j] == pv.minor { + return v[:j] + } + return v[:i] + "." + pv.minor +} + +// Prerelease returns the prerelease suffix of the semantic version v. +// For example, Prerelease("v2.1.0-pre+meta") == "-pre". +// If v is an invalid semantic version string, Prerelease returns the empty string. +func Prerelease(v string) string { + pv, ok := parse(v) + if !ok { + return "" + } + return pv.prerelease +} + +// Build returns the build suffix of the semantic version v. +// For example, Build("v2.1.0+meta") == "+meta". +// If v is an invalid semantic version string, Build returns the empty string. +func Build(v string) string { + pv, ok := parse(v) + if !ok { + return "" + } + return pv.build +} + +// Compare returns an integer comparing two versions according to +// semantic version precedence. +// The result will be 0 if v == w, -1 if v < w, or +1 if v > w. +// +// An invalid semantic version string is considered less than a valid one. +// All invalid semantic version strings compare equal to each other. +func Compare(v, w string) int { + pv, ok1 := parse(v) + pw, ok2 := parse(w) + if !ok1 && !ok2 { + return 0 + } + if !ok1 { + return -1 + } + if !ok2 { + return +1 + } + if c := compareInt(pv.major, pw.major); c != 0 { + return c + } + if c := compareInt(pv.minor, pw.minor); c != 0 { + return c + } + if c := compareInt(pv.patch, pw.patch); c != 0 { + return c + } + return comparePrerelease(pv.prerelease, pw.prerelease) +} + +// Max canonicalizes its arguments and then returns the version string +// that compares greater. +// +// Deprecated: use [Compare] instead. In most cases, returning a canonicalized +// version is not expected or desired. +func Max(v, w string) string { + v = Canonical(v) + w = Canonical(w) + if Compare(v, w) > 0 { + return v + } + return w +} + +// ByVersion implements [sort.Interface] for sorting semantic version strings. +type ByVersion []string + +func (vs ByVersion) Len() int { return len(vs) } +func (vs ByVersion) Swap(i, j int) { vs[i], vs[j] = vs[j], vs[i] } +func (vs ByVersion) Less(i, j int) bool { return compareVersion(vs[i], vs[j]) < 0 } + +// Sort sorts a list of semantic version strings using [Compare] and falls back +// to use [strings.Compare] if both versions are considered equal. +func Sort(list []string) { + slices.SortFunc(list, compareVersion) +} + +func compareVersion(a, b string) int { + cmp := Compare(a, b) + if cmp != 0 { + return cmp + } + return strings.Compare(a, b) +} + +func parse(v string) (p parsed, ok bool) { + if v == "" || v[0] != 'v' { + return + } + p.major, v, ok = parseInt(v[1:]) + if !ok { + return + } + if v == "" { + p.minor = "0" + p.patch = "0" + p.short = ".0.0" + return + } + if v[0] != '.' { + ok = false + return + } + p.minor, v, ok = parseInt(v[1:]) + if !ok { + return + } + if v == "" { + p.patch = "0" + p.short = ".0" + return + } + if v[0] != '.' { + ok = false + return + } + p.patch, v, ok = parseInt(v[1:]) + if !ok { + return + } + if len(v) > 0 && v[0] == '-' { + p.prerelease, v, ok = parsePrerelease(v) + if !ok { + return + } + } + if len(v) > 0 && v[0] == '+' { + p.build, v, ok = parseBuild(v) + if !ok { + return + } + } + if v != "" { + ok = false + return + } + ok = true + return +} + +func parseInt(v string) (t, rest string, ok bool) { + if v == "" { + return + } + if v[0] < '0' || '9' < v[0] { + return + } + i := 1 + for i < len(v) && '0' <= v[i] && v[i] <= '9' { + i++ + } + if v[0] == '0' && i != 1 { + return + } + return v[:i], v[i:], true +} + +func parsePrerelease(v string) (t, rest string, ok bool) { + // "A pre-release version MAY be denoted by appending a hyphen and + // a series of dot separated identifiers immediately following the patch version. + // Identifiers MUST comprise only ASCII alphanumerics and hyphen [0-9A-Za-z-]. + // Identifiers MUST NOT be empty. Numeric identifiers MUST NOT include leading zeroes." + if v == "" || v[0] != '-' { + return + } + i := 1 + start := 1 + for i < len(v) && v[i] != '+' { + if !isIdentChar(v[i]) && v[i] != '.' { + return + } + if v[i] == '.' { + if start == i || isBadNum(v[start:i]) { + return + } + start = i + 1 + } + i++ + } + if start == i || isBadNum(v[start:i]) { + return + } + return v[:i], v[i:], true +} + +func parseBuild(v string) (t, rest string, ok bool) { + if v == "" || v[0] != '+' { + return + } + i := 1 + start := 1 + for i < len(v) { + if !isIdentChar(v[i]) && v[i] != '.' { + return + } + if v[i] == '.' { + if start == i { + return + } + start = i + 1 + } + i++ + } + if start == i { + return + } + return v[:i], v[i:], true +} + +func isIdentChar(c byte) bool { + return 'A' <= c && c <= 'Z' || 'a' <= c && c <= 'z' || '0' <= c && c <= '9' || c == '-' +} + +func isBadNum(v string) bool { + i := 0 + for i < len(v) && '0' <= v[i] && v[i] <= '9' { + i++ + } + return i == len(v) && i > 1 && v[0] == '0' +} + +func isNum(v string) bool { + i := 0 + for i < len(v) && '0' <= v[i] && v[i] <= '9' { + i++ + } + return i == len(v) +} + +func compareInt(x, y string) int { + if x == y { + return 0 + } + if len(x) < len(y) { + return -1 + } + if len(x) > len(y) { + return +1 + } + if x < y { + return -1 + } else { + return +1 + } +} + +func comparePrerelease(x, y string) int { + // "When major, minor, and patch are equal, a pre-release version has + // lower precedence than a normal version. + // Example: 1.0.0-alpha < 1.0.0. + // Precedence for two pre-release versions with the same major, minor, + // and patch version MUST be determined by comparing each dot separated + // identifier from left to right until a difference is found as follows: + // identifiers consisting of only digits are compared numerically and + // identifiers with letters or hyphens are compared lexically in ASCII + // sort order. Numeric identifiers always have lower precedence than + // non-numeric identifiers. A larger set of pre-release fields has a + // higher precedence than a smaller set, if all of the preceding + // identifiers are equal. + // Example: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < + // 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0." + if x == y { + return 0 + } + if x == "" { + return +1 + } + if y == "" { + return -1 + } + for x != "" && y != "" { + x = x[1:] // skip - or . + y = y[1:] // skip - or . + var dx, dy string + dx, x = nextIdent(x) + dy, y = nextIdent(y) + if dx != dy { + ix := isNum(dx) + iy := isNum(dy) + if ix != iy { + if ix { + return -1 + } else { + return +1 + } + } + if ix { + if len(dx) < len(dy) { + return -1 + } + if len(dx) > len(dy) { + return +1 + } + } + if dx < dy { + return -1 + } else { + return +1 + } + } + } + if x == "" { + return -1 + } else { + return +1 + } +} + +func nextIdent(x string) (dx, rest string) { + i := 0 + for i < len(x) && x[i] != '.' { + i++ + } + return x[:i], x[i:] +} diff --git a/vendor/golang.org/x/net/bpf/asm.go b/vendor/golang.org/x/net/bpf/asm.go new file mode 100644 index 0000000..15e21b1 --- /dev/null +++ b/vendor/golang.org/x/net/bpf/asm.go @@ -0,0 +1,41 @@ +// 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. + +package bpf + +import "fmt" + +// Assemble converts insts into raw instructions suitable for loading +// into a BPF virtual machine. +// +// Currently, no optimization is attempted, the assembled program flow +// is exactly as provided. +func Assemble(insts []Instruction) ([]RawInstruction, error) { + ret := make([]RawInstruction, len(insts)) + var err error + for i, inst := range insts { + ret[i], err = inst.Assemble() + if err != nil { + return nil, fmt.Errorf("assembling instruction %d: %s", i+1, err) + } + } + return ret, nil +} + +// Disassemble attempts to parse raw back into +// Instructions. Unrecognized RawInstructions are assumed to be an +// extension not implemented by this package, and are passed through +// unchanged to the output. The allDecoded value reports whether insts +// contains no RawInstructions. +func Disassemble(raw []RawInstruction) (insts []Instruction, allDecoded bool) { + insts = make([]Instruction, len(raw)) + allDecoded = true + for i, r := range raw { + insts[i] = r.Disassemble() + if _, ok := insts[i].(RawInstruction); ok { + allDecoded = false + } + } + return insts, allDecoded +} diff --git a/vendor/golang.org/x/net/bpf/constants.go b/vendor/golang.org/x/net/bpf/constants.go new file mode 100644 index 0000000..12f3ee8 --- /dev/null +++ b/vendor/golang.org/x/net/bpf/constants.go @@ -0,0 +1,222 @@ +// 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. + +package bpf + +// A Register is a register of the BPF virtual machine. +type Register uint16 + +const ( + // RegA is the accumulator register. RegA is always the + // destination register of ALU operations. + RegA Register = iota + // RegX is the indirection register, used by LoadIndirect + // operations. + RegX +) + +// An ALUOp is an arithmetic or logic operation. +type ALUOp uint16 + +// ALU binary operation types. +const ( + ALUOpAdd ALUOp = iota << 4 + ALUOpSub + ALUOpMul + ALUOpDiv + ALUOpOr + ALUOpAnd + ALUOpShiftLeft + ALUOpShiftRight + aluOpNeg // Not exported because it's the only unary ALU operation, and gets its own instruction type. + ALUOpMod + ALUOpXor +) + +// A JumpTest is a comparison operator used in conditional jumps. +type JumpTest uint16 + +// Supported operators for conditional jumps. +// K can be RegX for JumpIfX +const ( + // K == A + JumpEqual JumpTest = iota + // K != A + JumpNotEqual + // K > A + JumpGreaterThan + // K < A + JumpLessThan + // K >= A + JumpGreaterOrEqual + // K <= A + JumpLessOrEqual + // K & A != 0 + JumpBitsSet + // K & A == 0 + JumpBitsNotSet +) + +// An Extension is a function call provided by the kernel that +// performs advanced operations that are expensive or impossible +// within the BPF virtual machine. +// +// Extensions are only implemented by the Linux kernel. +// +// TODO: should we prune this list? Some of these extensions seem +// either broken or near-impossible to use correctly, whereas other +// (len, random, ifindex) are quite useful. +type Extension int + +// Extension functions available in the Linux kernel. +const ( + // extOffset is the negative maximum number of instructions used + // to load instructions by overloading the K argument. + extOffset = -0x1000 + // ExtLen returns the length of the packet. + ExtLen Extension = 1 + // ExtProto returns the packet's L3 protocol type. + ExtProto Extension = 0 + // ExtType returns the packet's type (skb->pkt_type in the kernel) + // + // TODO: better documentation. How nice an API do we want to + // provide for these esoteric extensions? + ExtType Extension = 4 + // ExtPayloadOffset returns the offset of the packet payload, or + // the first protocol header that the kernel does not know how to + // parse. + ExtPayloadOffset Extension = 52 + // ExtInterfaceIndex returns the index of the interface on which + // the packet was received. + ExtInterfaceIndex Extension = 8 + // ExtNetlinkAttr returns the netlink attribute of type X at + // offset A. + ExtNetlinkAttr Extension = 12 + // ExtNetlinkAttrNested returns the nested netlink attribute of + // type X at offset A. + ExtNetlinkAttrNested Extension = 16 + // ExtMark returns the packet's mark value. + ExtMark Extension = 20 + // ExtQueue returns the packet's assigned hardware queue. + ExtQueue Extension = 24 + // ExtLinkLayerType returns the packet's hardware address type + // (e.g. Ethernet, Infiniband). + ExtLinkLayerType Extension = 28 + // ExtRXHash returns the packets receive hash. + // + // TODO: figure out what this rxhash actually is. + ExtRXHash Extension = 32 + // ExtCPUID returns the ID of the CPU processing the current + // packet. + ExtCPUID Extension = 36 + // ExtVLANTag returns the packet's VLAN tag. + ExtVLANTag Extension = 44 + // ExtVLANTagPresent returns non-zero if the packet has a VLAN + // tag. + // + // TODO: I think this might be a lie: it reads bit 0x1000 of the + // VLAN header, which changed meaning in recent revisions of the + // spec - this extension may now return meaningless information. + ExtVLANTagPresent Extension = 48 + // ExtVLANProto returns 0x8100 if the frame has a VLAN header, + // 0x88a8 if the frame has a "Q-in-Q" double VLAN header, or some + // other value if no VLAN information is present. + ExtVLANProto Extension = 60 + // ExtRand returns a uniformly random uint32. + ExtRand Extension = 56 +) + +// The following gives names to various bit patterns used in opcode construction. + +const ( + opMaskCls uint16 = 0x7 + // opClsLoad masks + opMaskLoadDest = 0x01 + opMaskLoadWidth = 0x18 + opMaskLoadMode = 0xe0 + // opClsALU & opClsJump + opMaskOperand = 0x08 + opMaskOperator = 0xf0 +) + +const ( + // +---------------+-----------------+---+---+---+ + // | AddrMode (3b) | LoadWidth (2b) | 0 | 0 | 0 | + // +---------------+-----------------+---+---+---+ + opClsLoadA uint16 = iota + // +---------------+-----------------+---+---+---+ + // | AddrMode (3b) | LoadWidth (2b) | 0 | 0 | 1 | + // +---------------+-----------------+---+---+---+ + opClsLoadX + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + // +---+---+---+---+---+---+---+---+ + opClsStoreA + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | + // +---+---+---+---+---+---+---+---+ + opClsStoreX + // +---------------+-----------------+---+---+---+ + // | Operator (4b) | OperandSrc (1b) | 1 | 0 | 0 | + // +---------------+-----------------+---+---+---+ + opClsALU + // +-----------------------------+---+---+---+---+ + // | TestOperator (4b) | 0 | 1 | 0 | 1 | + // +-----------------------------+---+---+---+---+ + opClsJump + // +---+-------------------------+---+---+---+---+ + // | 0 | 0 | 0 | RetSrc (1b) | 0 | 1 | 1 | 0 | + // +---+-------------------------+---+---+---+---+ + opClsReturn + // +---+-------------------------+---+---+---+---+ + // | 0 | 0 | 0 | TXAorTAX (1b) | 0 | 1 | 1 | 1 | + // +---+-------------------------+---+---+---+---+ + opClsMisc +) + +const ( + opAddrModeImmediate uint16 = iota << 5 + opAddrModeAbsolute + opAddrModeIndirect + opAddrModeScratch + opAddrModePacketLen // actually an extension, not an addressing mode. + opAddrModeMemShift +) + +const ( + opLoadWidth4 uint16 = iota << 3 + opLoadWidth2 + opLoadWidth1 +) + +// Operand for ALU and Jump instructions +type opOperand uint16 + +// Supported operand sources. +const ( + opOperandConstant opOperand = iota << 3 + opOperandX +) + +// An jumpOp is a conditional jump condition. +type jumpOp uint16 + +// Supported jump conditions. +const ( + opJumpAlways jumpOp = iota << 4 + opJumpEqual + opJumpGT + opJumpGE + opJumpSet +) + +const ( + opRetSrcConstant uint16 = iota << 4 + opRetSrcA +) + +const ( + opMiscTAX = 0x00 + opMiscTXA = 0x80 +) diff --git a/vendor/golang.org/x/net/bpf/doc.go b/vendor/golang.org/x/net/bpf/doc.go new file mode 100644 index 0000000..04ec1c8 --- /dev/null +++ b/vendor/golang.org/x/net/bpf/doc.go @@ -0,0 +1,80 @@ +// 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. + +/* +Package bpf implements marshaling and unmarshaling of programs for the +Berkeley Packet Filter virtual machine, and provides a Go implementation +of the virtual machine. + +BPF's main use is to specify a packet filter for network taps, so that +the kernel doesn't have to expensively copy every packet it sees to +userspace. However, it's been repurposed to other areas where running +user code in-kernel is needed. For example, Linux's seccomp uses BPF +to apply security policies to system calls. For simplicity, this +documentation refers only to packets, but other uses of BPF have their +own data payloads. + +BPF programs run in a restricted virtual machine. It has almost no +access to kernel functions, and while conditional branches are +allowed, they can only jump forwards, to guarantee that there are no +infinite loops. + +# The virtual machine + +The BPF VM is an accumulator machine. Its main register, called +register A, is an implicit source and destination in all arithmetic +and logic operations. The machine also has 16 scratch registers for +temporary storage, and an indirection register (register X) for +indirect memory access. All registers are 32 bits wide. + +Each run of a BPF program is given one packet, which is placed in the +VM's read-only "main memory". LoadAbsolute and LoadIndirect +instructions can fetch up to 32 bits at a time into register A for +examination. + +The goal of a BPF program is to produce and return a verdict (uint32), +which tells the kernel what to do with the packet. In the context of +packet filtering, the returned value is the number of bytes of the +packet to forward to userspace, or 0 to ignore the packet. Other +contexts like seccomp define their own return values. + +In order to simplify programs, attempts to read past the end of the +packet terminate the program execution with a verdict of 0 (ignore +packet). This means that the vast majority of BPF programs don't need +to do any explicit bounds checking. + +In addition to the bytes of the packet, some BPF programs have access +to extensions, which are essentially calls to kernel utility +functions. Currently, the only extensions supported by this package +are the Linux packet filter extensions. + +# Examples + +This packet filter selects all ARP packets. + + bpf.Assemble([]bpf.Instruction{ + // Load "EtherType" field from the ethernet header. + bpf.LoadAbsolute{Off: 12, Size: 2}, + // Skip over the next instruction if EtherType is not ARP. + bpf.JumpIf{Cond: bpf.JumpNotEqual, Val: 0x0806, SkipTrue: 1}, + // Verdict is "send up to 4k of the packet to userspace." + bpf.RetConstant{Val: 4096}, + // Verdict is "ignore packet." + bpf.RetConstant{Val: 0}, + }) + +This packet filter captures a random 1% sample of traffic. + + bpf.Assemble([]bpf.Instruction{ + // Get a 32-bit random number from the Linux kernel. + bpf.LoadExtension{Num: bpf.ExtRand}, + // 1% dice roll? + bpf.JumpIf{Cond: bpf.JumpLessThan, Val: 2^32/100, SkipFalse: 1}, + // Capture. + bpf.RetConstant{Val: 4096}, + // Ignore. + bpf.RetConstant{Val: 0}, + }) +*/ +package bpf // import "golang.org/x/net/bpf" diff --git a/vendor/golang.org/x/net/bpf/instructions.go b/vendor/golang.org/x/net/bpf/instructions.go new file mode 100644 index 0000000..3cffcaa --- /dev/null +++ b/vendor/golang.org/x/net/bpf/instructions.go @@ -0,0 +1,726 @@ +// 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. + +package bpf + +import "fmt" + +// An Instruction is one instruction executed by the BPF virtual +// machine. +type Instruction interface { + // Assemble assembles the Instruction into a RawInstruction. + Assemble() (RawInstruction, error) +} + +// A RawInstruction is a raw BPF virtual machine instruction. +type RawInstruction struct { + // Operation to execute. + Op uint16 + // For conditional jump instructions, the number of instructions + // to skip if the condition is true/false. + Jt uint8 + Jf uint8 + // Constant parameter. The meaning depends on the Op. + K uint32 +} + +// Assemble implements the Instruction Assemble method. +func (ri RawInstruction) Assemble() (RawInstruction, error) { return ri, nil } + +// Disassemble parses ri into an Instruction and returns it. If ri is +// not recognized by this package, ri itself is returned. +func (ri RawInstruction) Disassemble() Instruction { + switch ri.Op & opMaskCls { + case opClsLoadA, opClsLoadX: + reg := Register(ri.Op & opMaskLoadDest) + sz := 0 + switch ri.Op & opMaskLoadWidth { + case opLoadWidth4: + sz = 4 + case opLoadWidth2: + sz = 2 + case opLoadWidth1: + sz = 1 + default: + return ri + } + switch ri.Op & opMaskLoadMode { + case opAddrModeImmediate: + if sz != 4 { + return ri + } + return LoadConstant{Dst: reg, Val: ri.K} + case opAddrModeScratch: + if sz != 4 || ri.K > 15 { + return ri + } + return LoadScratch{Dst: reg, N: int(ri.K)} + case opAddrModeAbsolute: + if ri.K > extOffset+0xffffffff { + return LoadExtension{Num: Extension(-extOffset + ri.K)} + } + return LoadAbsolute{Size: sz, Off: ri.K} + case opAddrModeIndirect: + return LoadIndirect{Size: sz, Off: ri.K} + case opAddrModePacketLen: + if sz != 4 { + return ri + } + return LoadExtension{Num: ExtLen} + case opAddrModeMemShift: + return LoadMemShift{Off: ri.K} + default: + return ri + } + + case opClsStoreA: + if ri.Op != opClsStoreA || ri.K > 15 { + return ri + } + return StoreScratch{Src: RegA, N: int(ri.K)} + + case opClsStoreX: + if ri.Op != opClsStoreX || ri.K > 15 { + return ri + } + return StoreScratch{Src: RegX, N: int(ri.K)} + + case opClsALU: + switch op := ALUOp(ri.Op & opMaskOperator); op { + case ALUOpAdd, ALUOpSub, ALUOpMul, ALUOpDiv, ALUOpOr, ALUOpAnd, ALUOpShiftLeft, ALUOpShiftRight, ALUOpMod, ALUOpXor: + switch operand := opOperand(ri.Op & opMaskOperand); operand { + case opOperandX: + return ALUOpX{Op: op} + case opOperandConstant: + return ALUOpConstant{Op: op, Val: ri.K} + default: + return ri + } + case aluOpNeg: + return NegateA{} + default: + return ri + } + + case opClsJump: + switch op := jumpOp(ri.Op & opMaskOperator); op { + case opJumpAlways: + return Jump{Skip: ri.K} + case opJumpEqual, opJumpGT, opJumpGE, opJumpSet: + cond, skipTrue, skipFalse := jumpOpToTest(op, ri.Jt, ri.Jf) + switch operand := opOperand(ri.Op & opMaskOperand); operand { + case opOperandX: + return JumpIfX{Cond: cond, SkipTrue: skipTrue, SkipFalse: skipFalse} + case opOperandConstant: + return JumpIf{Cond: cond, Val: ri.K, SkipTrue: skipTrue, SkipFalse: skipFalse} + default: + return ri + } + default: + return ri + } + + case opClsReturn: + switch ri.Op { + case opClsReturn | opRetSrcA: + return RetA{} + case opClsReturn | opRetSrcConstant: + return RetConstant{Val: ri.K} + default: + return ri + } + + case opClsMisc: + switch ri.Op { + case opClsMisc | opMiscTAX: + return TAX{} + case opClsMisc | opMiscTXA: + return TXA{} + default: + return ri + } + + default: + panic("unreachable") // switch is exhaustive on the bit pattern + } +} + +func jumpOpToTest(op jumpOp, skipTrue uint8, skipFalse uint8) (JumpTest, uint8, uint8) { + var test JumpTest + + // Decode "fake" jump conditions that don't appear in machine code + // Ensures the Assemble -> Disassemble stage recreates the same instructions + // See https://github.com/golang/go/issues/18470 + if skipTrue == 0 { + switch op { + case opJumpEqual: + test = JumpNotEqual + case opJumpGT: + test = JumpLessOrEqual + case opJumpGE: + test = JumpLessThan + case opJumpSet: + test = JumpBitsNotSet + } + + return test, skipFalse, 0 + } + + switch op { + case opJumpEqual: + test = JumpEqual + case opJumpGT: + test = JumpGreaterThan + case opJumpGE: + test = JumpGreaterOrEqual + case opJumpSet: + test = JumpBitsSet + } + + return test, skipTrue, skipFalse +} + +// LoadConstant loads Val into register Dst. +type LoadConstant struct { + Dst Register + Val uint32 +} + +// Assemble implements the Instruction Assemble method. +func (a LoadConstant) Assemble() (RawInstruction, error) { + return assembleLoad(a.Dst, 4, opAddrModeImmediate, a.Val) +} + +// String returns the instruction in assembler notation. +func (a LoadConstant) String() string { + switch a.Dst { + case RegA: + return fmt.Sprintf("ld #%d", a.Val) + case RegX: + return fmt.Sprintf("ldx #%d", a.Val) + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// LoadScratch loads scratch[N] into register Dst. +type LoadScratch struct { + Dst Register + N int // 0-15 +} + +// Assemble implements the Instruction Assemble method. +func (a LoadScratch) Assemble() (RawInstruction, error) { + if a.N < 0 || a.N > 15 { + return RawInstruction{}, fmt.Errorf("invalid scratch slot %d", a.N) + } + return assembleLoad(a.Dst, 4, opAddrModeScratch, uint32(a.N)) +} + +// String returns the instruction in assembler notation. +func (a LoadScratch) String() string { + switch a.Dst { + case RegA: + return fmt.Sprintf("ld M[%d]", a.N) + case RegX: + return fmt.Sprintf("ldx M[%d]", a.N) + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// LoadAbsolute loads packet[Off:Off+Size] as an integer value into +// register A. +type LoadAbsolute struct { + Off uint32 + Size int // 1, 2 or 4 +} + +// Assemble implements the Instruction Assemble method. +func (a LoadAbsolute) Assemble() (RawInstruction, error) { + return assembleLoad(RegA, a.Size, opAddrModeAbsolute, a.Off) +} + +// String returns the instruction in assembler notation. +func (a LoadAbsolute) String() string { + switch a.Size { + case 1: // byte + return fmt.Sprintf("ldb [%d]", a.Off) + case 2: // half word + return fmt.Sprintf("ldh [%d]", a.Off) + case 4: // word + if a.Off > extOffset+0xffffffff { + return LoadExtension{Num: Extension(a.Off + 0x1000)}.String() + } + return fmt.Sprintf("ld [%d]", a.Off) + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// LoadIndirect loads packet[X+Off:X+Off+Size] as an integer value +// into register A. +type LoadIndirect struct { + Off uint32 + Size int // 1, 2 or 4 +} + +// Assemble implements the Instruction Assemble method. +func (a LoadIndirect) Assemble() (RawInstruction, error) { + return assembleLoad(RegA, a.Size, opAddrModeIndirect, a.Off) +} + +// String returns the instruction in assembler notation. +func (a LoadIndirect) String() string { + switch a.Size { + case 1: // byte + return fmt.Sprintf("ldb [x + %d]", a.Off) + case 2: // half word + return fmt.Sprintf("ldh [x + %d]", a.Off) + case 4: // word + return fmt.Sprintf("ld [x + %d]", a.Off) + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// LoadMemShift multiplies the first 4 bits of the byte at packet[Off] +// by 4 and stores the result in register X. +// +// This instruction is mainly useful to load into X the length of an +// IPv4 packet header in a single instruction, rather than have to do +// the arithmetic on the header's first byte by hand. +type LoadMemShift struct { + Off uint32 +} + +// Assemble implements the Instruction Assemble method. +func (a LoadMemShift) Assemble() (RawInstruction, error) { + return assembleLoad(RegX, 1, opAddrModeMemShift, a.Off) +} + +// String returns the instruction in assembler notation. +func (a LoadMemShift) String() string { + return fmt.Sprintf("ldx 4*([%d]&0xf)", a.Off) +} + +// LoadExtension invokes a linux-specific extension and stores the +// result in register A. +type LoadExtension struct { + Num Extension +} + +// Assemble implements the Instruction Assemble method. +func (a LoadExtension) Assemble() (RawInstruction, error) { + if a.Num == ExtLen { + return assembleLoad(RegA, 4, opAddrModePacketLen, 0) + } + return assembleLoad(RegA, 4, opAddrModeAbsolute, uint32(extOffset+a.Num)) +} + +// String returns the instruction in assembler notation. +func (a LoadExtension) String() string { + switch a.Num { + case ExtLen: + return "ld #len" + case ExtProto: + return "ld #proto" + case ExtType: + return "ld #type" + case ExtPayloadOffset: + return "ld #poff" + case ExtInterfaceIndex: + return "ld #ifidx" + case ExtNetlinkAttr: + return "ld #nla" + case ExtNetlinkAttrNested: + return "ld #nlan" + case ExtMark: + return "ld #mark" + case ExtQueue: + return "ld #queue" + case ExtLinkLayerType: + return "ld #hatype" + case ExtRXHash: + return "ld #rxhash" + case ExtCPUID: + return "ld #cpu" + case ExtVLANTag: + return "ld #vlan_tci" + case ExtVLANTagPresent: + return "ld #vlan_avail" + case ExtVLANProto: + return "ld #vlan_tpid" + case ExtRand: + return "ld #rand" + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// StoreScratch stores register Src into scratch[N]. +type StoreScratch struct { + Src Register + N int // 0-15 +} + +// Assemble implements the Instruction Assemble method. +func (a StoreScratch) Assemble() (RawInstruction, error) { + if a.N < 0 || a.N > 15 { + return RawInstruction{}, fmt.Errorf("invalid scratch slot %d", a.N) + } + var op uint16 + switch a.Src { + case RegA: + op = opClsStoreA + case RegX: + op = opClsStoreX + default: + return RawInstruction{}, fmt.Errorf("invalid source register %v", a.Src) + } + + return RawInstruction{ + Op: op, + K: uint32(a.N), + }, nil +} + +// String returns the instruction in assembler notation. +func (a StoreScratch) String() string { + switch a.Src { + case RegA: + return fmt.Sprintf("st M[%d]", a.N) + case RegX: + return fmt.Sprintf("stx M[%d]", a.N) + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// ALUOpConstant executes A = A Val. +type ALUOpConstant struct { + Op ALUOp + Val uint32 +} + +// Assemble implements the Instruction Assemble method. +func (a ALUOpConstant) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsALU | uint16(opOperandConstant) | uint16(a.Op), + K: a.Val, + }, nil +} + +// String returns the instruction in assembler notation. +func (a ALUOpConstant) String() string { + switch a.Op { + case ALUOpAdd: + return fmt.Sprintf("add #%d", a.Val) + case ALUOpSub: + return fmt.Sprintf("sub #%d", a.Val) + case ALUOpMul: + return fmt.Sprintf("mul #%d", a.Val) + case ALUOpDiv: + return fmt.Sprintf("div #%d", a.Val) + case ALUOpMod: + return fmt.Sprintf("mod #%d", a.Val) + case ALUOpAnd: + return fmt.Sprintf("and #%d", a.Val) + case ALUOpOr: + return fmt.Sprintf("or #%d", a.Val) + case ALUOpXor: + return fmt.Sprintf("xor #%d", a.Val) + case ALUOpShiftLeft: + return fmt.Sprintf("lsh #%d", a.Val) + case ALUOpShiftRight: + return fmt.Sprintf("rsh #%d", a.Val) + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// ALUOpX executes A = A X +type ALUOpX struct { + Op ALUOp +} + +// Assemble implements the Instruction Assemble method. +func (a ALUOpX) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsALU | uint16(opOperandX) | uint16(a.Op), + }, nil +} + +// String returns the instruction in assembler notation. +func (a ALUOpX) String() string { + switch a.Op { + case ALUOpAdd: + return "add x" + case ALUOpSub: + return "sub x" + case ALUOpMul: + return "mul x" + case ALUOpDiv: + return "div x" + case ALUOpMod: + return "mod x" + case ALUOpAnd: + return "and x" + case ALUOpOr: + return "or x" + case ALUOpXor: + return "xor x" + case ALUOpShiftLeft: + return "lsh x" + case ALUOpShiftRight: + return "rsh x" + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// NegateA executes A = -A. +type NegateA struct{} + +// Assemble implements the Instruction Assemble method. +func (a NegateA) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsALU | uint16(aluOpNeg), + }, nil +} + +// String returns the instruction in assembler notation. +func (a NegateA) String() string { + return fmt.Sprintf("neg") +} + +// Jump skips the following Skip instructions in the program. +type Jump struct { + Skip uint32 +} + +// Assemble implements the Instruction Assemble method. +func (a Jump) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsJump | uint16(opJumpAlways), + K: a.Skip, + }, nil +} + +// String returns the instruction in assembler notation. +func (a Jump) String() string { + return fmt.Sprintf("ja %d", a.Skip) +} + +// JumpIf skips the following Skip instructions in the program if A +// Val is true. +type JumpIf struct { + Cond JumpTest + Val uint32 + SkipTrue uint8 + SkipFalse uint8 +} + +// Assemble implements the Instruction Assemble method. +func (a JumpIf) Assemble() (RawInstruction, error) { + return jumpToRaw(a.Cond, opOperandConstant, a.Val, a.SkipTrue, a.SkipFalse) +} + +// String returns the instruction in assembler notation. +func (a JumpIf) String() string { + return jumpToString(a.Cond, fmt.Sprintf("#%d", a.Val), a.SkipTrue, a.SkipFalse) +} + +// JumpIfX skips the following Skip instructions in the program if A +// X is true. +type JumpIfX struct { + Cond JumpTest + SkipTrue uint8 + SkipFalse uint8 +} + +// Assemble implements the Instruction Assemble method. +func (a JumpIfX) Assemble() (RawInstruction, error) { + return jumpToRaw(a.Cond, opOperandX, 0, a.SkipTrue, a.SkipFalse) +} + +// String returns the instruction in assembler notation. +func (a JumpIfX) String() string { + return jumpToString(a.Cond, "x", a.SkipTrue, a.SkipFalse) +} + +// jumpToRaw assembles a jump instruction into a RawInstruction +func jumpToRaw(test JumpTest, operand opOperand, k uint32, skipTrue, skipFalse uint8) (RawInstruction, error) { + var ( + cond jumpOp + flip bool + ) + switch test { + case JumpEqual: + cond = opJumpEqual + case JumpNotEqual: + cond, flip = opJumpEqual, true + case JumpGreaterThan: + cond = opJumpGT + case JumpLessThan: + cond, flip = opJumpGE, true + case JumpGreaterOrEqual: + cond = opJumpGE + case JumpLessOrEqual: + cond, flip = opJumpGT, true + case JumpBitsSet: + cond = opJumpSet + case JumpBitsNotSet: + cond, flip = opJumpSet, true + default: + return RawInstruction{}, fmt.Errorf("unknown JumpTest %v", test) + } + jt, jf := skipTrue, skipFalse + if flip { + jt, jf = jf, jt + } + return RawInstruction{ + Op: opClsJump | uint16(cond) | uint16(operand), + Jt: jt, + Jf: jf, + K: k, + }, nil +} + +// jumpToString converts a jump instruction to assembler notation +func jumpToString(cond JumpTest, operand string, skipTrue, skipFalse uint8) string { + switch cond { + // K == A + case JumpEqual: + return conditionalJump(operand, skipTrue, skipFalse, "jeq", "jneq") + // K != A + case JumpNotEqual: + return fmt.Sprintf("jneq %s,%d", operand, skipTrue) + // K > A + case JumpGreaterThan: + return conditionalJump(operand, skipTrue, skipFalse, "jgt", "jle") + // K < A + case JumpLessThan: + return fmt.Sprintf("jlt %s,%d", operand, skipTrue) + // K >= A + case JumpGreaterOrEqual: + return conditionalJump(operand, skipTrue, skipFalse, "jge", "jlt") + // K <= A + case JumpLessOrEqual: + return fmt.Sprintf("jle %s,%d", operand, skipTrue) + // K & A != 0 + case JumpBitsSet: + if skipFalse > 0 { + return fmt.Sprintf("jset %s,%d,%d", operand, skipTrue, skipFalse) + } + return fmt.Sprintf("jset %s,%d", operand, skipTrue) + // K & A == 0, there is no assembler instruction for JumpBitNotSet, use JumpBitSet and invert skips + case JumpBitsNotSet: + return jumpToString(JumpBitsSet, operand, skipFalse, skipTrue) + default: + return fmt.Sprintf("unknown JumpTest %#v", cond) + } +} + +func conditionalJump(operand string, skipTrue, skipFalse uint8, positiveJump, negativeJump string) string { + if skipTrue > 0 { + if skipFalse > 0 { + return fmt.Sprintf("%s %s,%d,%d", positiveJump, operand, skipTrue, skipFalse) + } + return fmt.Sprintf("%s %s,%d", positiveJump, operand, skipTrue) + } + return fmt.Sprintf("%s %s,%d", negativeJump, operand, skipFalse) +} + +// RetA exits the BPF program, returning the value of register A. +type RetA struct{} + +// Assemble implements the Instruction Assemble method. +func (a RetA) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsReturn | opRetSrcA, + }, nil +} + +// String returns the instruction in assembler notation. +func (a RetA) String() string { + return fmt.Sprintf("ret a") +} + +// RetConstant exits the BPF program, returning a constant value. +type RetConstant struct { + Val uint32 +} + +// Assemble implements the Instruction Assemble method. +func (a RetConstant) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsReturn | opRetSrcConstant, + K: a.Val, + }, nil +} + +// String returns the instruction in assembler notation. +func (a RetConstant) String() string { + return fmt.Sprintf("ret #%d", a.Val) +} + +// TXA copies the value of register X to register A. +type TXA struct{} + +// Assemble implements the Instruction Assemble method. +func (a TXA) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsMisc | opMiscTXA, + }, nil +} + +// String returns the instruction in assembler notation. +func (a TXA) String() string { + return fmt.Sprintf("txa") +} + +// TAX copies the value of register A to register X. +type TAX struct{} + +// Assemble implements the Instruction Assemble method. +func (a TAX) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsMisc | opMiscTAX, + }, nil +} + +// String returns the instruction in assembler notation. +func (a TAX) String() string { + return fmt.Sprintf("tax") +} + +func assembleLoad(dst Register, loadSize int, mode uint16, k uint32) (RawInstruction, error) { + var ( + cls uint16 + sz uint16 + ) + switch dst { + case RegA: + cls = opClsLoadA + case RegX: + cls = opClsLoadX + default: + return RawInstruction{}, fmt.Errorf("invalid target register %v", dst) + } + switch loadSize { + case 1: + sz = opLoadWidth1 + case 2: + sz = opLoadWidth2 + case 4: + sz = opLoadWidth4 + default: + return RawInstruction{}, fmt.Errorf("invalid load byte length %d", sz) + } + return RawInstruction{ + Op: cls | sz | mode, + K: k, + }, nil +} diff --git a/vendor/golang.org/x/net/bpf/setter.go b/vendor/golang.org/x/net/bpf/setter.go new file mode 100644 index 0000000..43e35f0 --- /dev/null +++ b/vendor/golang.org/x/net/bpf/setter.go @@ -0,0 +1,10 @@ +// 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 bpf + +// A Setter is a type which can attach a compiled BPF filter to itself. +type Setter interface { + SetBPF(filter []RawInstruction) error +} diff --git a/vendor/golang.org/x/net/bpf/vm.go b/vendor/golang.org/x/net/bpf/vm.go new file mode 100644 index 0000000..73f57f1 --- /dev/null +++ b/vendor/golang.org/x/net/bpf/vm.go @@ -0,0 +1,150 @@ +// 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. + +package bpf + +import ( + "errors" + "fmt" +) + +// A VM is an emulated BPF virtual machine. +type VM struct { + filter []Instruction +} + +// NewVM returns a new VM using the input BPF program. +func NewVM(filter []Instruction) (*VM, error) { + if len(filter) == 0 { + return nil, errors.New("one or more Instructions must be specified") + } + + for i, ins := range filter { + check := len(filter) - (i + 1) + switch ins := ins.(type) { + // Check for out-of-bounds jumps in instructions + case Jump: + if check <= int(ins.Skip) { + return nil, fmt.Errorf("cannot jump %d instructions; jumping past program bounds", ins.Skip) + } + case JumpIf: + if check <= int(ins.SkipTrue) { + return nil, fmt.Errorf("cannot jump %d instructions in true case; jumping past program bounds", ins.SkipTrue) + } + if check <= int(ins.SkipFalse) { + return nil, fmt.Errorf("cannot jump %d instructions in false case; jumping past program bounds", ins.SkipFalse) + } + case JumpIfX: + if check <= int(ins.SkipTrue) { + return nil, fmt.Errorf("cannot jump %d instructions in true case; jumping past program bounds", ins.SkipTrue) + } + if check <= int(ins.SkipFalse) { + return nil, fmt.Errorf("cannot jump %d instructions in false case; jumping past program bounds", ins.SkipFalse) + } + // Check for division or modulus by zero + case ALUOpConstant: + if ins.Val != 0 { + break + } + + switch ins.Op { + case ALUOpDiv, ALUOpMod: + return nil, errors.New("cannot divide by zero using ALUOpConstant") + } + // Check for unknown extensions + case LoadExtension: + switch ins.Num { + case ExtLen: + default: + return nil, fmt.Errorf("extension %d not implemented", ins.Num) + } + } + } + + // Make sure last instruction is a return instruction + switch filter[len(filter)-1].(type) { + case RetA, RetConstant: + default: + return nil, errors.New("BPF program must end with RetA or RetConstant") + } + + // Though our VM works using disassembled instructions, we + // attempt to assemble the input filter anyway to ensure it is compatible + // with an operating system VM. + _, err := Assemble(filter) + + return &VM{ + filter: filter, + }, err +} + +// Run runs the VM's BPF program against the input bytes. +// Run returns the number of bytes accepted by the BPF program, and any errors +// which occurred while processing the program. +func (v *VM) Run(in []byte) (int, error) { + var ( + // Registers of the virtual machine + regA uint32 + regX uint32 + regScratch [16]uint32 + + // OK is true if the program should continue processing the next + // instruction, or false if not, causing the loop to break + ok = true + ) + + // TODO(mdlayher): implement: + // - NegateA: + // - would require a change from uint32 registers to int32 + // registers + + // TODO(mdlayher): add interop tests that check signedness of ALU + // operations against kernel implementation, and make sure Go + // implementation matches behavior + + for i := 0; i < len(v.filter) && ok; i++ { + ins := v.filter[i] + + switch ins := ins.(type) { + case ALUOpConstant: + regA = aluOpConstant(ins, regA) + case ALUOpX: + regA, ok = aluOpX(ins, regA, regX) + case Jump: + i += int(ins.Skip) + case JumpIf: + jump := jumpIf(ins, regA) + i += jump + case JumpIfX: + jump := jumpIfX(ins, regA, regX) + i += jump + case LoadAbsolute: + regA, ok = loadAbsolute(ins, in) + case LoadConstant: + regA, regX = loadConstant(ins, regA, regX) + case LoadExtension: + regA = loadExtension(ins, in) + case LoadIndirect: + regA, ok = loadIndirect(ins, in, regX) + case LoadMemShift: + regX, ok = loadMemShift(ins, in) + case LoadScratch: + regA, regX = loadScratch(ins, regScratch, regA, regX) + case RetA: + return int(regA), nil + case RetConstant: + return int(ins.Val), nil + case StoreScratch: + regScratch = storeScratch(ins, regScratch, regA, regX) + case TAX: + regX = regA + case TXA: + regA = regX + default: + return 0, fmt.Errorf("unknown Instruction at index %d: %T", i, ins) + } + } + + return 0, nil +} diff --git a/vendor/golang.org/x/net/bpf/vm_instructions.go b/vendor/golang.org/x/net/bpf/vm_instructions.go new file mode 100644 index 0000000..0aa307c --- /dev/null +++ b/vendor/golang.org/x/net/bpf/vm_instructions.go @@ -0,0 +1,182 @@ +// 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. + +package bpf + +import ( + "encoding/binary" + "fmt" +) + +func aluOpConstant(ins ALUOpConstant, regA uint32) uint32 { + return aluOpCommon(ins.Op, regA, ins.Val) +} + +func aluOpX(ins ALUOpX, regA uint32, regX uint32) (uint32, bool) { + // Guard against division or modulus by zero by terminating + // the program, as the OS BPF VM does + if regX == 0 { + switch ins.Op { + case ALUOpDiv, ALUOpMod: + return 0, false + } + } + + return aluOpCommon(ins.Op, regA, regX), true +} + +func aluOpCommon(op ALUOp, regA uint32, value uint32) uint32 { + switch op { + case ALUOpAdd: + return regA + value + case ALUOpSub: + return regA - value + case ALUOpMul: + return regA * value + case ALUOpDiv: + // Division by zero not permitted by NewVM and aluOpX checks + return regA / value + case ALUOpOr: + return regA | value + case ALUOpAnd: + return regA & value + case ALUOpShiftLeft: + return regA << value + case ALUOpShiftRight: + return regA >> value + case ALUOpMod: + // Modulus by zero not permitted by NewVM and aluOpX checks + return regA % value + case ALUOpXor: + return regA ^ value + default: + return regA + } +} + +func jumpIf(ins JumpIf, regA uint32) int { + return jumpIfCommon(ins.Cond, ins.SkipTrue, ins.SkipFalse, regA, ins.Val) +} + +func jumpIfX(ins JumpIfX, regA uint32, regX uint32) int { + return jumpIfCommon(ins.Cond, ins.SkipTrue, ins.SkipFalse, regA, regX) +} + +func jumpIfCommon(cond JumpTest, skipTrue, skipFalse uint8, regA uint32, value uint32) int { + var ok bool + + switch cond { + case JumpEqual: + ok = regA == value + case JumpNotEqual: + ok = regA != value + case JumpGreaterThan: + ok = regA > value + case JumpLessThan: + ok = regA < value + case JumpGreaterOrEqual: + ok = regA >= value + case JumpLessOrEqual: + ok = regA <= value + case JumpBitsSet: + ok = (regA & value) != 0 + case JumpBitsNotSet: + ok = (regA & value) == 0 + } + + if ok { + return int(skipTrue) + } + + return int(skipFalse) +} + +func loadAbsolute(ins LoadAbsolute, in []byte) (uint32, bool) { + offset := int(ins.Off) + size := ins.Size + + return loadCommon(in, offset, size) +} + +func loadConstant(ins LoadConstant, regA uint32, regX uint32) (uint32, uint32) { + switch ins.Dst { + case RegA: + regA = ins.Val + case RegX: + regX = ins.Val + } + + return regA, regX +} + +func loadExtension(ins LoadExtension, in []byte) uint32 { + switch ins.Num { + case ExtLen: + return uint32(len(in)) + default: + panic(fmt.Sprintf("unimplemented extension: %d", ins.Num)) + } +} + +func loadIndirect(ins LoadIndirect, in []byte, regX uint32) (uint32, bool) { + offset := int(ins.Off) + int(regX) + size := ins.Size + + return loadCommon(in, offset, size) +} + +func loadMemShift(ins LoadMemShift, in []byte) (uint32, bool) { + offset := int(ins.Off) + + // Size of LoadMemShift is always 1 byte + if !inBounds(len(in), offset, 1) { + return 0, false + } + + // Mask off high 4 bits and multiply low 4 bits by 4 + return uint32(in[offset]&0x0f) * 4, true +} + +func inBounds(inLen int, offset int, size int) bool { + return offset+size <= inLen +} + +func loadCommon(in []byte, offset int, size int) (uint32, bool) { + if !inBounds(len(in), offset, size) { + return 0, false + } + + switch size { + case 1: + return uint32(in[offset]), true + case 2: + return uint32(binary.BigEndian.Uint16(in[offset : offset+size])), true + case 4: + return uint32(binary.BigEndian.Uint32(in[offset : offset+size])), true + default: + panic(fmt.Sprintf("invalid load size: %d", size)) + } +} + +func loadScratch(ins LoadScratch, regScratch [16]uint32, regA uint32, regX uint32) (uint32, uint32) { + switch ins.Dst { + case RegA: + regA = regScratch[ins.N] + case RegX: + regX = regScratch[ins.N] + } + + return regA, regX +} + +func storeScratch(ins StoreScratch, regScratch [16]uint32, regA uint32, regX uint32) [16]uint32 { + switch ins.Src { + case RegA: + regScratch[ins.N] = regA + case RegX: + regScratch[ins.N] = regX + } + + return regScratch +} diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go index 97bd8b0..db3264d 100644 --- a/vendor/golang.org/x/net/http2/frame.go +++ b/vendor/golang.org/x/net/http2/frame.go @@ -39,7 +39,7 @@ const ( FrameContinuation FrameType = 0x9 ) -var frameName = map[FrameType]string{ +var frameNames = [...]string{ FrameData: "DATA", FrameHeaders: "HEADERS", FramePriority: "PRIORITY", @@ -53,10 +53,10 @@ var frameName = map[FrameType]string{ } func (t FrameType) String() string { - if s, ok := frameName[t]; ok { - return s + if int(t) < len(frameNames) { + return frameNames[t] } - return fmt.Sprintf("UNKNOWN_FRAME_TYPE_%d", uint8(t)) + return fmt.Sprintf("UNKNOWN_FRAME_TYPE_%d", t) } // Flags is a bitmask of HTTP/2 flags. @@ -124,7 +124,7 @@ var flagName = map[FrameType]map[Flags]string{ // might be 0). type frameParser func(fc *frameCache, fh FrameHeader, countError func(string), payload []byte) (Frame, error) -var frameParsers = map[FrameType]frameParser{ +var frameParsers = [...]frameParser{ FrameData: parseDataFrame, FrameHeaders: parseHeadersFrame, FramePriority: parsePriorityFrame, @@ -138,8 +138,8 @@ var frameParsers = map[FrameType]frameParser{ } func typeFrameParser(t FrameType) frameParser { - if f := frameParsers[t]; f != nil { - return f + if int(t) < len(frameParsers) { + return frameParsers[t] } return parseUnknownFrame } @@ -509,7 +509,7 @@ func (fr *Framer) ReadFrame() (Frame, error) { } if fh.Length > fr.maxReadSize { if fh == invalidHTTP1LookingFrameHeader() { - return nil, fmt.Errorf("http2: failed reading the frame payload: %w, note that the frame header looked like an HTTP/1.1 header", err) + return nil, fmt.Errorf("http2: failed reading the frame payload: %w, note that the frame header looked like an HTTP/1.1 header", ErrFrameTooLarge) } return nil, ErrFrameTooLarge } diff --git a/vendor/golang.org/x/net/internal/iana/const.go b/vendor/golang.org/x/net/internal/iana/const.go new file mode 100644 index 0000000..cea712f --- /dev/null +++ b/vendor/golang.org/x/net/internal/iana/const.go @@ -0,0 +1,223 @@ +// go generate gen.go +// Code generated by the command above; DO NOT EDIT. + +// Package iana provides protocol number resources managed by the Internet Assigned Numbers Authority (IANA). +package iana // import "golang.org/x/net/internal/iana" + +// Differentiated Services Field Codepoints (DSCP), Updated: 2018-05-04 +const ( + DiffServCS0 = 0x00 // CS0 + DiffServCS1 = 0x20 // CS1 + DiffServCS2 = 0x40 // CS2 + DiffServCS3 = 0x60 // CS3 + DiffServCS4 = 0x80 // CS4 + DiffServCS5 = 0xa0 // CS5 + DiffServCS6 = 0xc0 // CS6 + DiffServCS7 = 0xe0 // CS7 + DiffServAF11 = 0x28 // AF11 + DiffServAF12 = 0x30 // AF12 + DiffServAF13 = 0x38 // AF13 + DiffServAF21 = 0x48 // AF21 + DiffServAF22 = 0x50 // AF22 + DiffServAF23 = 0x58 // AF23 + DiffServAF31 = 0x68 // AF31 + DiffServAF32 = 0x70 // AF32 + DiffServAF33 = 0x78 // AF33 + DiffServAF41 = 0x88 // AF41 + DiffServAF42 = 0x90 // AF42 + DiffServAF43 = 0x98 // AF43 + DiffServEF = 0xb8 // EF + DiffServVOICEADMIT = 0xb0 // VOICE-ADMIT + NotECNTransport = 0x00 // Not-ECT (Not ECN-Capable Transport) + ECNTransport1 = 0x01 // ECT(1) (ECN-Capable Transport(1)) + ECNTransport0 = 0x02 // ECT(0) (ECN-Capable Transport(0)) + CongestionExperienced = 0x03 // CE (Congestion Experienced) +) + +// Protocol Numbers, Updated: 2017-10-13 +const ( + ProtocolIP = 0 // IPv4 encapsulation, pseudo protocol number + ProtocolHOPOPT = 0 // IPv6 Hop-by-Hop Option + ProtocolICMP = 1 // Internet Control Message + ProtocolIGMP = 2 // Internet Group Management + ProtocolGGP = 3 // Gateway-to-Gateway + ProtocolIPv4 = 4 // IPv4 encapsulation + ProtocolST = 5 // Stream + ProtocolTCP = 6 // Transmission Control + ProtocolCBT = 7 // CBT + ProtocolEGP = 8 // Exterior Gateway Protocol + ProtocolIGP = 9 // any private interior gateway (used by Cisco for their IGRP) + ProtocolBBNRCCMON = 10 // BBN RCC Monitoring + ProtocolNVPII = 11 // Network Voice Protocol + ProtocolPUP = 12 // PUP + ProtocolEMCON = 14 // EMCON + ProtocolXNET = 15 // Cross Net Debugger + ProtocolCHAOS = 16 // Chaos + ProtocolUDP = 17 // User Datagram + ProtocolMUX = 18 // Multiplexing + ProtocolDCNMEAS = 19 // DCN Measurement Subsystems + ProtocolHMP = 20 // Host Monitoring + ProtocolPRM = 21 // Packet Radio Measurement + ProtocolXNSIDP = 22 // XEROX NS IDP + ProtocolTRUNK1 = 23 // Trunk-1 + ProtocolTRUNK2 = 24 // Trunk-2 + ProtocolLEAF1 = 25 // Leaf-1 + ProtocolLEAF2 = 26 // Leaf-2 + ProtocolRDP = 27 // Reliable Data Protocol + ProtocolIRTP = 28 // Internet Reliable Transaction + ProtocolISOTP4 = 29 // ISO Transport Protocol Class 4 + ProtocolNETBLT = 30 // Bulk Data Transfer Protocol + ProtocolMFENSP = 31 // MFE Network Services Protocol + ProtocolMERITINP = 32 // MERIT Internodal Protocol + ProtocolDCCP = 33 // Datagram Congestion Control Protocol + Protocol3PC = 34 // Third Party Connect Protocol + ProtocolIDPR = 35 // Inter-Domain Policy Routing Protocol + ProtocolXTP = 36 // XTP + ProtocolDDP = 37 // Datagram Delivery Protocol + ProtocolIDPRCMTP = 38 // IDPR Control Message Transport Proto + ProtocolTPPP = 39 // TP++ Transport Protocol + ProtocolIL = 40 // IL Transport Protocol + ProtocolIPv6 = 41 // IPv6 encapsulation + ProtocolSDRP = 42 // Source Demand Routing Protocol + ProtocolIPv6Route = 43 // Routing Header for IPv6 + ProtocolIPv6Frag = 44 // Fragment Header for IPv6 + ProtocolIDRP = 45 // Inter-Domain Routing Protocol + ProtocolRSVP = 46 // Reservation Protocol + ProtocolGRE = 47 // Generic Routing Encapsulation + ProtocolDSR = 48 // Dynamic Source Routing Protocol + ProtocolBNA = 49 // BNA + ProtocolESP = 50 // Encap Security Payload + ProtocolAH = 51 // Authentication Header + ProtocolINLSP = 52 // Integrated Net Layer Security TUBA + ProtocolNARP = 54 // NBMA Address Resolution Protocol + ProtocolMOBILE = 55 // IP Mobility + ProtocolTLSP = 56 // Transport Layer Security Protocol using Kryptonet key management + ProtocolSKIP = 57 // SKIP + ProtocolIPv6ICMP = 58 // ICMP for IPv6 + ProtocolIPv6NoNxt = 59 // No Next Header for IPv6 + ProtocolIPv6Opts = 60 // Destination Options for IPv6 + ProtocolCFTP = 62 // CFTP + ProtocolSATEXPAK = 64 // SATNET and Backroom EXPAK + ProtocolKRYPTOLAN = 65 // Kryptolan + ProtocolRVD = 66 // MIT Remote Virtual Disk Protocol + ProtocolIPPC = 67 // Internet Pluribus Packet Core + ProtocolSATMON = 69 // SATNET Monitoring + ProtocolVISA = 70 // VISA Protocol + ProtocolIPCV = 71 // Internet Packet Core Utility + ProtocolCPNX = 72 // Computer Protocol Network Executive + ProtocolCPHB = 73 // Computer Protocol Heart Beat + ProtocolWSN = 74 // Wang Span Network + ProtocolPVP = 75 // Packet Video Protocol + ProtocolBRSATMON = 76 // Backroom SATNET Monitoring + ProtocolSUNND = 77 // SUN ND PROTOCOL-Temporary + ProtocolWBMON = 78 // WIDEBAND Monitoring + ProtocolWBEXPAK = 79 // WIDEBAND EXPAK + ProtocolISOIP = 80 // ISO Internet Protocol + ProtocolVMTP = 81 // VMTP + ProtocolSECUREVMTP = 82 // SECURE-VMTP + ProtocolVINES = 83 // VINES + ProtocolTTP = 84 // Transaction Transport Protocol + ProtocolIPTM = 84 // Internet Protocol Traffic Manager + ProtocolNSFNETIGP = 85 // NSFNET-IGP + ProtocolDGP = 86 // Dissimilar Gateway Protocol + ProtocolTCF = 87 // TCF + ProtocolEIGRP = 88 // EIGRP + ProtocolOSPFIGP = 89 // OSPFIGP + ProtocolSpriteRPC = 90 // Sprite RPC Protocol + ProtocolLARP = 91 // Locus Address Resolution Protocol + ProtocolMTP = 92 // Multicast Transport Protocol + ProtocolAX25 = 93 // AX.25 Frames + ProtocolIPIP = 94 // IP-within-IP Encapsulation Protocol + ProtocolSCCSP = 96 // Semaphore Communications Sec. Pro. + ProtocolETHERIP = 97 // Ethernet-within-IP Encapsulation + ProtocolENCAP = 98 // Encapsulation Header + ProtocolGMTP = 100 // GMTP + ProtocolIFMP = 101 // Ipsilon Flow Management Protocol + ProtocolPNNI = 102 // PNNI over IP + ProtocolPIM = 103 // Protocol Independent Multicast + ProtocolARIS = 104 // ARIS + ProtocolSCPS = 105 // SCPS + ProtocolQNX = 106 // QNX + ProtocolAN = 107 // Active Networks + ProtocolIPComp = 108 // IP Payload Compression Protocol + ProtocolSNP = 109 // Sitara Networks Protocol + ProtocolCompaqPeer = 110 // Compaq Peer Protocol + ProtocolIPXinIP = 111 // IPX in IP + ProtocolVRRP = 112 // Virtual Router Redundancy Protocol + ProtocolPGM = 113 // PGM Reliable Transport Protocol + ProtocolL2TP = 115 // Layer Two Tunneling Protocol + ProtocolDDX = 116 // D-II Data Exchange (DDX) + ProtocolIATP = 117 // Interactive Agent Transfer Protocol + ProtocolSTP = 118 // Schedule Transfer Protocol + ProtocolSRP = 119 // SpectraLink Radio Protocol + ProtocolUTI = 120 // UTI + ProtocolSMP = 121 // Simple Message Protocol + ProtocolPTP = 123 // Performance Transparency Protocol + ProtocolISIS = 124 // ISIS over IPv4 + ProtocolFIRE = 125 // FIRE + ProtocolCRTP = 126 // Combat Radio Transport Protocol + ProtocolCRUDP = 127 // Combat Radio User Datagram + ProtocolSSCOPMCE = 128 // SSCOPMCE + ProtocolIPLT = 129 // IPLT + ProtocolSPS = 130 // Secure Packet Shield + ProtocolPIPE = 131 // Private IP Encapsulation within IP + ProtocolSCTP = 132 // Stream Control Transmission Protocol + ProtocolFC = 133 // Fibre Channel + ProtocolRSVPE2EIGNORE = 134 // RSVP-E2E-IGNORE + ProtocolMobilityHeader = 135 // Mobility Header + ProtocolUDPLite = 136 // UDPLite + ProtocolMPLSinIP = 137 // MPLS-in-IP + ProtocolMANET = 138 // MANET Protocols + ProtocolHIP = 139 // Host Identity Protocol + ProtocolShim6 = 140 // Shim6 Protocol + ProtocolWESP = 141 // Wrapped Encapsulating Security Payload + ProtocolROHC = 142 // Robust Header Compression + ProtocolReserved = 255 // Reserved +) + +// Address Family Numbers, Updated: 2018-04-02 +const ( + AddrFamilyIPv4 = 1 // IP (IP version 4) + AddrFamilyIPv6 = 2 // IP6 (IP version 6) + AddrFamilyNSAP = 3 // NSAP + AddrFamilyHDLC = 4 // HDLC (8-bit multidrop) + AddrFamilyBBN1822 = 5 // BBN 1822 + AddrFamily802 = 6 // 802 (includes all 802 media plus Ethernet "canonical format") + AddrFamilyE163 = 7 // E.163 + AddrFamilyE164 = 8 // E.164 (SMDS, Frame Relay, ATM) + AddrFamilyF69 = 9 // F.69 (Telex) + AddrFamilyX121 = 10 // X.121 (X.25, Frame Relay) + AddrFamilyIPX = 11 // IPX + AddrFamilyAppletalk = 12 // Appletalk + AddrFamilyDecnetIV = 13 // Decnet IV + AddrFamilyBanyanVines = 14 // Banyan Vines + AddrFamilyE164withSubaddress = 15 // E.164 with NSAP format subaddress + AddrFamilyDNS = 16 // DNS (Domain Name System) + AddrFamilyDistinguishedName = 17 // Distinguished Name + AddrFamilyASNumber = 18 // AS Number + AddrFamilyXTPoverIPv4 = 19 // XTP over IP version 4 + AddrFamilyXTPoverIPv6 = 20 // XTP over IP version 6 + AddrFamilyXTPnativemodeXTP = 21 // XTP native mode XTP + AddrFamilyFibreChannelWorldWidePortName = 22 // Fibre Channel World-Wide Port Name + AddrFamilyFibreChannelWorldWideNodeName = 23 // Fibre Channel World-Wide Node Name + AddrFamilyGWID = 24 // GWID + AddrFamilyL2VPN = 25 // AFI for L2VPN information + AddrFamilyMPLSTPSectionEndpointID = 26 // MPLS-TP Section Endpoint Identifier + AddrFamilyMPLSTPLSPEndpointID = 27 // MPLS-TP LSP Endpoint Identifier + AddrFamilyMPLSTPPseudowireEndpointID = 28 // MPLS-TP Pseudowire Endpoint Identifier + AddrFamilyMTIPv4 = 29 // MT IP: Multi-Topology IP version 4 + AddrFamilyMTIPv6 = 30 // MT IPv6: Multi-Topology IP version 6 + AddrFamilyEIGRPCommonServiceFamily = 16384 // EIGRP Common Service Family + AddrFamilyEIGRPIPv4ServiceFamily = 16385 // EIGRP IPv4 Service Family + AddrFamilyEIGRPIPv6ServiceFamily = 16386 // EIGRP IPv6 Service Family + AddrFamilyLISPCanonicalAddressFormat = 16387 // LISP Canonical Address Format (LCAF) + AddrFamilyBGPLS = 16388 // BGP-LS + AddrFamily48bitMAC = 16389 // 48-bit MAC + AddrFamily64bitMAC = 16390 // 64-bit MAC + AddrFamilyOUI = 16391 // OUI + AddrFamilyMACFinal24bits = 16392 // MAC/24 + AddrFamilyMACFinal40bits = 16393 // MAC/40 + AddrFamilyIPv6Initial64bits = 16394 // IPv6/64 + AddrFamilyRBridgePortID = 16395 // RBridge Port ID + AddrFamilyTRILLNickname = 16396 // TRILL Nickname +) diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr.go b/vendor/golang.org/x/net/internal/socket/cmsghdr.go new file mode 100644 index 0000000..33a5bf5 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr.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. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos + +package socket + +func (h *cmsghdr) len() int { return int(h.Len) } +func (h *cmsghdr) lvl() int { return int(h.Level) } +func (h *cmsghdr) typ() int { return int(h.Type) } diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go new file mode 100644 index 0000000..68f438c --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go @@ -0,0 +1,13 @@ +// 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. + +//go:build aix || darwin || dragonfly || freebsd || netbsd || openbsd + +package socket + +func (h *cmsghdr) set(l, lvl, typ int) { + h.Len = uint32(l) + h.Level = int32(lvl) + h.Type = int32(typ) +} diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go new file mode 100644 index 0000000..058ea8d --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go @@ -0,0 +1,13 @@ +// 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. + +//go:build (arm || mips || mipsle || 386 || ppc) && linux + +package socket + +func (h *cmsghdr) set(l, lvl, typ int) { + h.Len = uint32(l) + h.Level = int32(lvl) + h.Type = int32(typ) +} diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go new file mode 100644 index 0000000..3ca0d3a --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go @@ -0,0 +1,13 @@ +// 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. + +//go:build (arm64 || amd64 || loong64 || ppc64 || ppc64le || mips64 || mips64le || riscv64 || s390x) && linux + +package socket + +func (h *cmsghdr) set(l, lvl, typ int) { + h.Len = uint64(l) + h.Level = int32(lvl) + h.Type = int32(typ) +} diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go new file mode 100644 index 0000000..6d0e426 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go @@ -0,0 +1,13 @@ +// 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. + +//go:build amd64 && solaris + +package socket + +func (h *cmsghdr) set(l, lvl, typ int) { + h.Len = uint32(l) + h.Level = int32(lvl) + h.Type = int32(typ) +} diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go new file mode 100644 index 0000000..7ca9cb7 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go @@ -0,0 +1,27 @@ +// 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. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !zos + +package socket + +func controlHeaderLen() int { + return 0 +} + +func controlMessageLen(dataLen int) int { + return 0 +} + +func controlMessageSpace(dataLen int) int { + return 0 +} + +type cmsghdr struct{} + +func (h *cmsghdr) len() int { return 0 } +func (h *cmsghdr) lvl() int { return 0 } +func (h *cmsghdr) typ() int { return 0 } + +func (h *cmsghdr) set(l, lvl, typ int) {} diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_unix.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_unix.go new file mode 100644 index 0000000..0211f22 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_unix.go @@ -0,0 +1,21 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos + +package socket + +import "golang.org/x/sys/unix" + +func controlHeaderLen() int { + return unix.CmsgLen(0) +} + +func controlMessageLen(dataLen int) int { + return unix.CmsgLen(dataLen) +} + +func controlMessageSpace(dataLen int) int { + return unix.CmsgSpace(dataLen) +} diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_zos_s390x.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_zos_s390x.go new file mode 100644 index 0000000..68dc8ad --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_zos_s390x.go @@ -0,0 +1,11 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +func (h *cmsghdr) set(l, lvl, typ int) { + h.Len = int32(l) + h.Level = int32(lvl) + h.Type = int32(typ) +} diff --git a/vendor/golang.org/x/net/internal/socket/complete_dontwait.go b/vendor/golang.org/x/net/internal/socket/complete_dontwait.go new file mode 100644 index 0000000..2038f29 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/complete_dontwait.go @@ -0,0 +1,25 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris + +package socket + +import ( + "syscall" +) + +// ioComplete checks the flags and result of a syscall, to be used as return +// value in a syscall.RawConn.Read or Write callback. +func ioComplete(flags int, operr error) bool { + if flags&syscall.MSG_DONTWAIT != 0 { + // Caller explicitly said don't wait, so always return immediately. + return true + } + if operr == syscall.EAGAIN || operr == syscall.EWOULDBLOCK { + // No data available, block for I/O and try again. + return false + } + return true +} diff --git a/vendor/golang.org/x/net/internal/socket/complete_nodontwait.go b/vendor/golang.org/x/net/internal/socket/complete_nodontwait.go new file mode 100644 index 0000000..70e6f44 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/complete_nodontwait.go @@ -0,0 +1,21 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || windows || zos + +package socket + +import ( + "syscall" +) + +// ioComplete checks the flags and result of a syscall, to be used as return +// value in a syscall.RawConn.Read or Write callback. +func ioComplete(flags int, operr error) bool { + if operr == syscall.EAGAIN || operr == syscall.EWOULDBLOCK { + // No data available, block for I/O and try again. + return false + } + return true +} diff --git a/vendor/golang.org/x/net/internal/socket/empty.s b/vendor/golang.org/x/net/internal/socket/empty.s new file mode 100644 index 0000000..49d7979 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/empty.s @@ -0,0 +1,7 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build darwin && go1.12 + +// This exists solely so we can linkname in symbols from syscall. diff --git a/vendor/golang.org/x/net/internal/socket/error_unix.go b/vendor/golang.org/x/net/internal/socket/error_unix.go new file mode 100644 index 0000000..7a5cc5c --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/error_unix.go @@ -0,0 +1,31 @@ +// 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. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos + +package socket + +import "syscall" + +var ( + errEAGAIN error = syscall.EAGAIN + errEINVAL error = syscall.EINVAL + errENOENT error = syscall.ENOENT +) + +// errnoErr returns common boxed Errno values, to prevent allocations +// at runtime. +func errnoErr(errno syscall.Errno) error { + switch errno { + case 0: + return nil + case syscall.EAGAIN: + return errEAGAIN + case syscall.EINVAL: + return errEINVAL + case syscall.ENOENT: + return errENOENT + } + return errno +} diff --git a/vendor/golang.org/x/net/internal/socket/error_windows.go b/vendor/golang.org/x/net/internal/socket/error_windows.go new file mode 100644 index 0000000..6a6379a --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/error_windows.go @@ -0,0 +1,26 @@ +// 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 socket + +import "syscall" + +var ( + errERROR_IO_PENDING error = syscall.ERROR_IO_PENDING + errEINVAL error = syscall.EINVAL +) + +// errnoErr returns common boxed Errno values, to prevent allocations +// at runtime. +func errnoErr(errno syscall.Errno) error { + switch errno { + case 0: + return nil + case syscall.ERROR_IO_PENDING: + return errERROR_IO_PENDING + case syscall.EINVAL: + return errEINVAL + } + return errno +} diff --git a/vendor/golang.org/x/net/internal/socket/iovec_32bit.go b/vendor/golang.org/x/net/internal/socket/iovec_32bit.go new file mode 100644 index 0000000..340e53f --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/iovec_32bit.go @@ -0,0 +1,18 @@ +// 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. + +//go:build (arm || mips || mipsle || 386 || ppc) && (darwin || dragonfly || freebsd || linux || netbsd || openbsd) + +package socket + +import "unsafe" + +func (v *iovec) set(b []byte) { + l := len(b) + if l == 0 { + return + } + v.Base = (*byte)(unsafe.Pointer(&b[0])) + v.Len = uint32(l) +} diff --git a/vendor/golang.org/x/net/internal/socket/iovec_64bit.go b/vendor/golang.org/x/net/internal/socket/iovec_64bit.go new file mode 100644 index 0000000..26470c1 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/iovec_64bit.go @@ -0,0 +1,18 @@ +// 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. + +//go:build (arm64 || amd64 || loong64 || ppc64 || ppc64le || mips64 || mips64le || riscv64 || s390x) && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || zos) + +package socket + +import "unsafe" + +func (v *iovec) set(b []byte) { + l := len(b) + if l == 0 { + return + } + v.Base = (*byte)(unsafe.Pointer(&b[0])) + v.Len = uint64(l) +} diff --git a/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go b/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go new file mode 100644 index 0000000..8859ce1 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go @@ -0,0 +1,18 @@ +// 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. + +//go:build amd64 && solaris + +package socket + +import "unsafe" + +func (v *iovec) set(b []byte) { + l := len(b) + if l == 0 { + return + } + v.Base = (*int8)(unsafe.Pointer(&b[0])) + v.Len = uint64(l) +} diff --git a/vendor/golang.org/x/net/internal/socket/iovec_stub.go b/vendor/golang.org/x/net/internal/socket/iovec_stub.go new file mode 100644 index 0000000..da886b0 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/iovec_stub.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. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !zos + +package socket + +type iovec struct{} + +func (v *iovec) set(b []byte) {} diff --git a/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go b/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go new file mode 100644 index 0000000..4825b21 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.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. + +//go:build !aix && !linux && !netbsd + +package socket + +import "net" + +type mmsghdr struct{} + +type mmsghdrs []mmsghdr + +func (hs mmsghdrs) pack(ms []Message, parseFn func([]byte, string) (net.Addr, error), marshalFn func(net.Addr) []byte) error { + return nil +} + +func (hs mmsghdrs) unpack(ms []Message, parseFn func([]byte, string) (net.Addr, error), hint string) error { + return nil +} diff --git a/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go b/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go new file mode 100644 index 0000000..311fd2c --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go @@ -0,0 +1,195 @@ +// 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. + +//go:build aix || linux || netbsd + +package socket + +import ( + "net" + "os" + "sync" + "syscall" +) + +type mmsghdrs []mmsghdr + +func (hs mmsghdrs) unpack(ms []Message, parseFn func([]byte, string) (net.Addr, error), hint string) error { + for i := range hs { + ms[i].N = int(hs[i].Len) + ms[i].NN = hs[i].Hdr.controllen() + ms[i].Flags = hs[i].Hdr.flags() + if parseFn != nil { + var err error + ms[i].Addr, err = parseFn(hs[i].Hdr.name(), hint) + if err != nil { + return err + } + } + } + return nil +} + +// mmsghdrsPacker packs Message-slices into mmsghdrs (re-)using pre-allocated buffers. +type mmsghdrsPacker struct { + // hs are the pre-allocated mmsghdrs. + hs mmsghdrs + // sockaddrs is the pre-allocated buffer for the Hdr.Name buffers. + // We use one large buffer for all messages and slice it up. + sockaddrs []byte + // vs are the pre-allocated iovecs. + // We allocate one large buffer for all messages and slice it up. This allows to reuse the buffer + // if the number of buffers per message is distributed differently between calls. + vs []iovec +} + +func (p *mmsghdrsPacker) prepare(ms []Message) { + n := len(ms) + if n <= cap(p.hs) { + p.hs = p.hs[:n] + } else { + p.hs = make(mmsghdrs, n) + } + if n*sizeofSockaddrInet6 <= cap(p.sockaddrs) { + p.sockaddrs = p.sockaddrs[:n*sizeofSockaddrInet6] + } else { + p.sockaddrs = make([]byte, n*sizeofSockaddrInet6) + } + + nb := 0 + for _, m := range ms { + nb += len(m.Buffers) + } + if nb <= cap(p.vs) { + p.vs = p.vs[:nb] + } else { + p.vs = make([]iovec, nb) + } +} + +func (p *mmsghdrsPacker) pack(ms []Message, parseFn func([]byte, string) (net.Addr, error), marshalFn func(net.Addr, []byte) int) mmsghdrs { + p.prepare(ms) + hs := p.hs + vsRest := p.vs + saRest := p.sockaddrs + for i := range hs { + nvs := len(ms[i].Buffers) + vs := vsRest[:nvs] + vsRest = vsRest[nvs:] + + var sa []byte + if parseFn != nil { + sa = saRest[:sizeofSockaddrInet6] + saRest = saRest[sizeofSockaddrInet6:] + } else if marshalFn != nil { + n := marshalFn(ms[i].Addr, saRest) + if n > 0 { + sa = saRest[:n] + saRest = saRest[n:] + } + } + hs[i].Hdr.pack(vs, ms[i].Buffers, ms[i].OOB, sa) + } + return hs +} + +// syscaller is a helper to invoke recvmmsg and sendmmsg via the RawConn.Read/Write interface. +// It is reusable, to amortize the overhead of allocating a closure for the function passed to +// RawConn.Read/Write. +type syscaller struct { + n int + operr error + hs mmsghdrs + flags int + + boundRecvmmsgF func(uintptr) bool + boundSendmmsgF func(uintptr) bool +} + +func (r *syscaller) init() { + r.boundRecvmmsgF = r.recvmmsgF + r.boundSendmmsgF = r.sendmmsgF +} + +func (r *syscaller) recvmmsg(c syscall.RawConn, hs mmsghdrs, flags int) (int, error) { + r.n = 0 + r.operr = nil + r.hs = hs + r.flags = flags + if err := c.Read(r.boundRecvmmsgF); err != nil { + return r.n, err + } + if r.operr != nil { + return r.n, os.NewSyscallError("recvmmsg", r.operr) + } + return r.n, nil +} + +func (r *syscaller) recvmmsgF(s uintptr) bool { + r.n, r.operr = recvmmsg(s, r.hs, r.flags) + return ioComplete(r.flags, r.operr) +} + +func (r *syscaller) sendmmsg(c syscall.RawConn, hs mmsghdrs, flags int) (int, error) { + r.n = 0 + r.operr = nil + r.hs = hs + r.flags = flags + if err := c.Write(r.boundSendmmsgF); err != nil { + return r.n, err + } + if r.operr != nil { + return r.n, os.NewSyscallError("sendmmsg", r.operr) + } + return r.n, nil +} + +func (r *syscaller) sendmmsgF(s uintptr) bool { + r.n, r.operr = sendmmsg(s, r.hs, r.flags) + return ioComplete(r.flags, r.operr) +} + +// mmsgTmps holds reusable temporary helpers for recvmmsg and sendmmsg. +type mmsgTmps struct { + packer mmsghdrsPacker + syscaller syscaller +} + +var defaultMmsgTmpsPool = mmsgTmpsPool{ + p: sync.Pool{ + New: func() interface{} { + tmps := new(mmsgTmps) + tmps.syscaller.init() + return tmps + }, + }, +} + +type mmsgTmpsPool struct { + p sync.Pool +} + +func (p *mmsgTmpsPool) Get() *mmsgTmps { + m := p.p.Get().(*mmsgTmps) + // Clear fields up to the len (not the cap) of the slice, + // assuming that the previous caller only used that many elements. + for i := range m.packer.sockaddrs { + m.packer.sockaddrs[i] = 0 + } + m.packer.sockaddrs = m.packer.sockaddrs[:0] + for i := range m.packer.vs { + m.packer.vs[i] = iovec{} + } + m.packer.vs = m.packer.vs[:0] + for i := range m.packer.hs { + m.packer.hs[i].Len = 0 + m.packer.hs[i].Hdr = msghdr{} + } + m.packer.hs = m.packer.hs[:0] + return m +} + +func (p *mmsgTmpsPool) Put(tmps *mmsgTmps) { + p.p.Put(tmps) +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go b/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go new file mode 100644 index 0000000..ebff4f6 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go @@ -0,0 +1,39 @@ +// 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. + +//go:build aix || darwin || dragonfly || freebsd || netbsd || openbsd + +package socket + +import "unsafe" + +func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) { + for i := range vs { + vs[i].set(bs[i]) + } + h.setIov(vs) + if len(oob) > 0 { + h.Control = (*byte)(unsafe.Pointer(&oob[0])) + h.Controllen = uint32(len(oob)) + } + if sa != nil { + h.Name = (*byte)(unsafe.Pointer(&sa[0])) + h.Namelen = uint32(len(sa)) + } +} + +func (h *msghdr) name() []byte { + if h.Name != nil && h.Namelen > 0 { + return (*[sizeofSockaddrInet6]byte)(unsafe.Pointer(h.Name))[:h.Namelen] + } + return nil +} + +func (h *msghdr) controllen() int { + return int(h.Controllen) +} + +func (h *msghdr) flags() int { + return int(h.Flags) +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go b/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go new file mode 100644 index 0000000..62e6fe8 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go @@ -0,0 +1,16 @@ +// 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. + +//go:build aix || darwin || dragonfly || freebsd || netbsd + +package socket + +func (h *msghdr) setIov(vs []iovec) { + l := len(vs) + if l == 0 { + return + } + h.Iov = &vs[0] + h.Iovlen = int32(l) +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_linux.go b/vendor/golang.org/x/net/internal/socket/msghdr_linux.go new file mode 100644 index 0000000..5a38798 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_linux.go @@ -0,0 +1,36 @@ +// 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 socket + +import "unsafe" + +func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) { + for i := range vs { + vs[i].set(bs[i]) + } + h.setIov(vs) + if len(oob) > 0 { + h.setControl(oob) + } + if sa != nil { + h.Name = (*byte)(unsafe.Pointer(&sa[0])) + h.Namelen = uint32(len(sa)) + } +} + +func (h *msghdr) name() []byte { + if h.Name != nil && h.Namelen > 0 { + return (*[sizeofSockaddrInet6]byte)(unsafe.Pointer(h.Name))[:h.Namelen] + } + return nil +} + +func (h *msghdr) controllen() int { + return int(h.Controllen) +} + +func (h *msghdr) flags() int { + return int(h.Flags) +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go b/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go new file mode 100644 index 0000000..3dd0725 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go @@ -0,0 +1,23 @@ +// 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. + +//go:build (arm || mips || mipsle || 386 || ppc) && linux + +package socket + +import "unsafe" + +func (h *msghdr) setIov(vs []iovec) { + l := len(vs) + if l == 0 { + return + } + h.Iov = &vs[0] + h.Iovlen = uint32(l) +} + +func (h *msghdr) setControl(b []byte) { + h.Control = (*byte)(unsafe.Pointer(&b[0])) + h.Controllen = uint32(len(b)) +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go b/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go new file mode 100644 index 0000000..5af9ddd --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go @@ -0,0 +1,23 @@ +// 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. + +//go:build (arm64 || amd64 || loong64 || ppc64 || ppc64le || mips64 || mips64le || riscv64 || s390x) && linux + +package socket + +import "unsafe" + +func (h *msghdr) setIov(vs []iovec) { + l := len(vs) + if l == 0 { + return + } + h.Iov = &vs[0] + h.Iovlen = uint64(l) +} + +func (h *msghdr) setControl(b []byte) { + h.Control = (*byte)(unsafe.Pointer(&b[0])) + h.Controllen = uint64(len(b)) +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go b/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go new file mode 100644 index 0000000..71a69e2 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go @@ -0,0 +1,14 @@ +// 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 socket + +func (h *msghdr) setIov(vs []iovec) { + l := len(vs) + if l == 0 { + return + } + h.Iov = &vs[0] + h.Iovlen = uint32(l) +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go b/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go new file mode 100644 index 0000000..e212b50 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go @@ -0,0 +1,35 @@ +// 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. + +//go:build amd64 && solaris + +package socket + +import "unsafe" + +func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) { + for i := range vs { + vs[i].set(bs[i]) + } + if len(vs) > 0 { + h.Iov = &vs[0] + h.Iovlen = int32(len(vs)) + } + if len(oob) > 0 { + h.Accrights = (*int8)(unsafe.Pointer(&oob[0])) + h.Accrightslen = int32(len(oob)) + } + if sa != nil { + h.Name = (*byte)(unsafe.Pointer(&sa[0])) + h.Namelen = uint32(len(sa)) + } +} + +func (h *msghdr) controllen() int { + return int(h.Accrightslen) +} + +func (h *msghdr) flags() int { + return int(NativeEndian.Uint32(h.Pad_cgo_2[:])) +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_stub.go b/vendor/golang.org/x/net/internal/socket/msghdr_stub.go new file mode 100644 index 0000000..e876776 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_stub.go @@ -0,0 +1,14 @@ +// 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. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !zos + +package socket + +type msghdr struct{} + +func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) {} +func (h *msghdr) name() []byte { return nil } +func (h *msghdr) controllen() int { return 0 } +func (h *msghdr) flags() int { return 0 } diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_zos_s390x.go b/vendor/golang.org/x/net/internal/socket/msghdr_zos_s390x.go new file mode 100644 index 0000000..529db68 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_zos_s390x.go @@ -0,0 +1,35 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build s390x && zos + +package socket + +import "unsafe" + +func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) { + for i := range vs { + vs[i].set(bs[i]) + } + if len(vs) > 0 { + h.Iov = &vs[0] + h.Iovlen = int32(len(vs)) + } + if len(oob) > 0 { + h.Control = (*byte)(unsafe.Pointer(&oob[0])) + h.Controllen = uint32(len(oob)) + } + if sa != nil { + h.Name = (*byte)(unsafe.Pointer(&sa[0])) + h.Namelen = uint32(len(sa)) + } +} + +func (h *msghdr) controllen() int { + return int(h.Controllen) +} + +func (h *msghdr) flags() int { + return int(h.Flags) +} diff --git a/vendor/golang.org/x/net/internal/socket/norace.go b/vendor/golang.org/x/net/internal/socket/norace.go new file mode 100644 index 0000000..8af30ec --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/norace.go @@ -0,0 +1,12 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !race + +package socket + +func (m *Message) raceRead() { +} +func (m *Message) raceWrite() { +} diff --git a/vendor/golang.org/x/net/internal/socket/race.go b/vendor/golang.org/x/net/internal/socket/race.go new file mode 100644 index 0000000..9afa958 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/race.go @@ -0,0 +1,37 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build race + +package socket + +import ( + "runtime" + "unsafe" +) + +// This package reads and writes the Message buffers using a +// direct system call, which the race detector can't see. +// These functions tell the race detector what is going on during the syscall. + +func (m *Message) raceRead() { + for _, b := range m.Buffers { + if len(b) > 0 { + runtime.RaceReadRange(unsafe.Pointer(&b[0]), len(b)) + } + } + if b := m.OOB; len(b) > 0 { + runtime.RaceReadRange(unsafe.Pointer(&b[0]), len(b)) + } +} +func (m *Message) raceWrite() { + for _, b := range m.Buffers { + if len(b) > 0 { + runtime.RaceWriteRange(unsafe.Pointer(&b[0]), len(b)) + } + } + if b := m.OOB; len(b) > 0 { + runtime.RaceWriteRange(unsafe.Pointer(&b[0]), len(b)) + } +} diff --git a/vendor/golang.org/x/net/internal/socket/rawconn.go b/vendor/golang.org/x/net/internal/socket/rawconn.go new file mode 100644 index 0000000..87e8107 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/rawconn.go @@ -0,0 +1,91 @@ +// 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 socket + +import ( + "errors" + "net" + "os" + "syscall" +) + +// A Conn represents a raw connection. +type Conn struct { + network string + c syscall.RawConn +} + +// tcpConn is an interface implemented by net.TCPConn. +// It can be used for interface assertions to check if a net.Conn is a TCP connection. +type tcpConn interface { + SyscallConn() (syscall.RawConn, error) + SetLinger(int) error +} + +var _ tcpConn = (*net.TCPConn)(nil) + +// udpConn is an interface implemented by net.UDPConn. +// It can be used for interface assertions to check if a net.Conn is a UDP connection. +type udpConn interface { + SyscallConn() (syscall.RawConn, error) + ReadMsgUDP(b, oob []byte) (n, oobn, flags int, addr *net.UDPAddr, err error) +} + +var _ udpConn = (*net.UDPConn)(nil) + +// ipConn is an interface implemented by net.IPConn. +// It can be used for interface assertions to check if a net.Conn is an IP connection. +type ipConn interface { + SyscallConn() (syscall.RawConn, error) + ReadMsgIP(b, oob []byte) (n, oobn, flags int, addr *net.IPAddr, err error) +} + +var _ ipConn = (*net.IPConn)(nil) + +// NewConn returns a new raw connection. +func NewConn(c net.Conn) (*Conn, error) { + var err error + var cc Conn + switch c := c.(type) { + case tcpConn: + cc.network = "tcp" + cc.c, err = c.SyscallConn() + case udpConn: + cc.network = "udp" + cc.c, err = c.SyscallConn() + case ipConn: + cc.network = "ip" + cc.c, err = c.SyscallConn() + default: + return nil, errors.New("unknown connection type") + } + if err != nil { + return nil, err + } + return &cc, nil +} + +func (o *Option) get(c *Conn, b []byte) (int, error) { + var operr error + var n int + fn := func(s uintptr) { + n, operr = getsockopt(s, o.Level, o.Name, b) + } + if err := c.c.Control(fn); err != nil { + return 0, err + } + return n, os.NewSyscallError("getsockopt", operr) +} + +func (o *Option) set(c *Conn, b []byte) error { + var operr error + fn := func(s uintptr) { + operr = setsockopt(s, o.Level, o.Name, b) + } + if err := c.c.Control(fn); err != nil { + return err + } + return os.NewSyscallError("setsockopt", operr) +} diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go b/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go new file mode 100644 index 0000000..0431390 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go @@ -0,0 +1,53 @@ +// 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. + +//go:build linux + +package socket + +import ( + "net" +) + +func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) { + for i := range ms { + ms[i].raceWrite() + } + tmps := defaultMmsgTmpsPool.Get() + defer defaultMmsgTmpsPool.Put(tmps) + var parseFn func([]byte, string) (net.Addr, error) + if c.network != "tcp" { + parseFn = parseInetAddr + } + hs := tmps.packer.pack(ms, parseFn, nil) + n, err := tmps.syscaller.recvmmsg(c.c, hs, flags) + if err != nil { + return n, err + } + if err := hs[:n].unpack(ms[:n], parseFn, c.network); err != nil { + return n, err + } + return n, nil +} + +func (c *Conn) sendMsgs(ms []Message, flags int) (int, error) { + for i := range ms { + ms[i].raceRead() + } + tmps := defaultMmsgTmpsPool.Get() + defer defaultMmsgTmpsPool.Put(tmps) + var marshalFn func(net.Addr, []byte) int + if c.network != "tcp" { + marshalFn = marshalInetAddr + } + hs := tmps.packer.pack(ms, nil, marshalFn) + n, err := tmps.syscaller.sendmmsg(c.c, hs, flags) + if err != nil { + return n, err + } + if err := hs[:n].unpack(ms[:n], nil, ""); err != nil { + return n, err + } + return n, nil +} diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_msg.go b/vendor/golang.org/x/net/internal/socket/rawconn_msg.go new file mode 100644 index 0000000..7c0d741 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/rawconn_msg.go @@ -0,0 +1,59 @@ +// 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. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || windows || zos + +package socket + +import ( + "net" + "os" +) + +func (c *Conn) recvMsg(m *Message, flags int) error { + m.raceWrite() + var ( + operr error + n int + oobn int + recvflags int + from net.Addr + ) + fn := func(s uintptr) bool { + n, oobn, recvflags, from, operr = recvmsg(s, m.Buffers, m.OOB, flags, c.network) + return ioComplete(flags, operr) + } + if err := c.c.Read(fn); err != nil { + return err + } + if operr != nil { + return os.NewSyscallError("recvmsg", operr) + } + m.Addr = from + m.N = n + m.NN = oobn + m.Flags = recvflags + return nil +} + +func (c *Conn) sendMsg(m *Message, flags int) error { + m.raceRead() + var ( + operr error + n int + ) + fn := func(s uintptr) bool { + n, operr = sendmsg(s, m.Buffers, m.OOB, m.Addr, flags) + return ioComplete(flags, operr) + } + if err := c.c.Write(fn); err != nil { + return err + } + if operr != nil { + return os.NewSyscallError("sendmsg", operr) + } + m.N = n + m.NN = len(m.OOB) + return nil +} diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go b/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go new file mode 100644 index 0000000..e363fb5 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go @@ -0,0 +1,15 @@ +// 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. + +//go:build !linux + +package socket + +func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) { + return 0, errNotImplemented +} + +func (c *Conn) sendMsgs(ms []Message, flags int) (int, error) { + return 0, errNotImplemented +} diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go b/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go new file mode 100644 index 0000000..ff7a8ba --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go @@ -0,0 +1,15 @@ +// 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. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos + +package socket + +func (c *Conn) recvMsg(m *Message, flags int) error { + return errNotImplemented +} + +func (c *Conn) sendMsg(m *Message, flags int) error { + return errNotImplemented +} diff --git a/vendor/golang.org/x/net/internal/socket/socket.go b/vendor/golang.org/x/net/internal/socket/socket.go new file mode 100644 index 0000000..dba47bf --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/socket.go @@ -0,0 +1,280 @@ +// 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 socket provides a portable interface for socket system +// calls. +package socket // import "golang.org/x/net/internal/socket" + +import ( + "errors" + "net" + "runtime" + "unsafe" +) + +var errNotImplemented = errors.New("not implemented on " + runtime.GOOS + "/" + runtime.GOARCH) + +// An Option represents a sticky socket option. +type Option struct { + Level int // level + Name int // name; must be equal or greater than 1 + Len int // length of value in bytes; must be equal or greater than 1 +} + +// Get reads a value for the option from the kernel. +// It returns the number of bytes written into b. +func (o *Option) Get(c *Conn, b []byte) (int, error) { + if o.Name < 1 || o.Len < 1 { + return 0, errors.New("invalid option") + } + if len(b) < o.Len { + return 0, errors.New("short buffer") + } + return o.get(c, b) +} + +// GetInt returns an integer value for the option. +// +// The Len field of Option must be either 1 or 4. +func (o *Option) GetInt(c *Conn) (int, error) { + if o.Len != 1 && o.Len != 4 { + return 0, errors.New("invalid option") + } + var b []byte + var bb [4]byte + if o.Len == 1 { + b = bb[:1] + } else { + b = bb[:4] + } + n, err := o.get(c, b) + if err != nil { + return 0, err + } + if n != o.Len { + return 0, errors.New("invalid option length") + } + if o.Len == 1 { + return int(b[0]), nil + } + return int(NativeEndian.Uint32(b[:4])), nil +} + +// Set writes the option and value to the kernel. +func (o *Option) Set(c *Conn, b []byte) error { + if o.Name < 1 || o.Len < 1 { + return errors.New("invalid option") + } + if len(b) < o.Len { + return errors.New("short buffer") + } + return o.set(c, b) +} + +// SetInt writes the option and value to the kernel. +// +// The Len field of Option must be either 1 or 4. +func (o *Option) SetInt(c *Conn, v int) error { + if o.Len != 1 && o.Len != 4 { + return errors.New("invalid option") + } + var b []byte + if o.Len == 1 { + b = []byte{byte(v)} + } else { + var bb [4]byte + NativeEndian.PutUint32(bb[:o.Len], uint32(v)) + b = bb[:4] + } + return o.set(c, b) +} + +// ControlMessageSpace returns the whole length of control message. +func ControlMessageSpace(dataLen int) int { + return controlMessageSpace(dataLen) +} + +// A ControlMessage represents the head message in a stream of control +// messages. +// +// A control message comprises of a header, data and a few padding +// fields to conform to the interface to the kernel. +// +// See RFC 3542 for further information. +type ControlMessage []byte + +// Data returns the data field of the control message at the head on +// m. +func (m ControlMessage) Data(dataLen int) []byte { + l := controlHeaderLen() + if len(m) < l || len(m) < l+dataLen { + return nil + } + return m[l : l+dataLen] +} + +// Next returns the control message at the next on m. +// +// Next works only for standard control messages. +func (m ControlMessage) Next(dataLen int) ControlMessage { + l := ControlMessageSpace(dataLen) + if len(m) < l { + return nil + } + return m[l:] +} + +// MarshalHeader marshals the header fields of the control message at +// the head on m. +func (m ControlMessage) MarshalHeader(lvl, typ, dataLen int) error { + if len(m) < controlHeaderLen() { + return errors.New("short message") + } + h := (*cmsghdr)(unsafe.Pointer(&m[0])) + h.set(controlMessageLen(dataLen), lvl, typ) + return nil +} + +// ParseHeader parses and returns the header fields of the control +// message at the head on m. +func (m ControlMessage) ParseHeader() (lvl, typ, dataLen int, err error) { + l := controlHeaderLen() + if len(m) < l { + return 0, 0, 0, errors.New("short message") + } + h := (*cmsghdr)(unsafe.Pointer(&m[0])) + return h.lvl(), h.typ(), int(uint64(h.len()) - uint64(l)), nil +} + +// Marshal marshals the control message at the head on m, and returns +// the next control message. +func (m ControlMessage) Marshal(lvl, typ int, data []byte) (ControlMessage, error) { + l := len(data) + if len(m) < ControlMessageSpace(l) { + return nil, errors.New("short message") + } + h := (*cmsghdr)(unsafe.Pointer(&m[0])) + h.set(controlMessageLen(l), lvl, typ) + if l > 0 { + copy(m.Data(l), data) + } + return m.Next(l), nil +} + +// Parse parses m as a single or multiple control messages. +// +// Parse works for both standard and compatible messages. +func (m ControlMessage) Parse() ([]ControlMessage, error) { + var ms []ControlMessage + for len(m) >= controlHeaderLen() { + h := (*cmsghdr)(unsafe.Pointer(&m[0])) + l := h.len() + if l <= 0 { + return nil, errors.New("invalid header length") + } + if uint64(l) < uint64(controlHeaderLen()) { + return nil, errors.New("invalid message length") + } + if uint64(l) > uint64(len(m)) { + return nil, errors.New("short buffer") + } + // On message reception: + // + // |<- ControlMessageSpace --------------->| + // |<- controlMessageLen ---------->| | + // |<- controlHeaderLen ->| | | + // +---------------+------+---------+------+ + // | Header | PadH | Data | PadD | + // +---------------+------+---------+------+ + // + // On compatible message reception: + // + // | ... |<- controlMessageLen ----------->| + // | ... |<- controlHeaderLen ->| | + // +-----+---------------+------+----------+ + // | ... | Header | PadH | Data | + // +-----+---------------+------+----------+ + ms = append(ms, ControlMessage(m[:l])) + ll := l - controlHeaderLen() + if len(m) >= ControlMessageSpace(ll) { + m = m[ControlMessageSpace(ll):] + } else { + m = m[controlMessageLen(ll):] + } + } + return ms, nil +} + +// NewControlMessage returns a new stream of control messages. +func NewControlMessage(dataLen []int) ControlMessage { + var l int + for i := range dataLen { + l += ControlMessageSpace(dataLen[i]) + } + return make([]byte, l) +} + +// A Message represents an IO message. +type Message struct { + // When writing, the Buffers field must contain at least one + // byte to write. + // When reading, the Buffers field will always contain a byte + // to read. + Buffers [][]byte + + // OOB contains protocol-specific control or miscellaneous + // ancillary data known as out-of-band data. + OOB []byte + + // Addr specifies a destination address when writing. + // It can be nil when the underlying protocol of the raw + // connection uses connection-oriented communication. + // After a successful read, it may contain the source address + // on the received packet. + Addr net.Addr + + N int // # of bytes read or written from/to Buffers + NN int // # of bytes read or written from/to OOB + Flags int // protocol-specific information on the received message +} + +// RecvMsg wraps recvmsg system call. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_PEEK. +func (c *Conn) RecvMsg(m *Message, flags int) error { + return c.recvMsg(m, flags) +} + +// SendMsg wraps sendmsg system call. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_DONTROUTE. +func (c *Conn) SendMsg(m *Message, flags int) error { + return c.sendMsg(m, flags) +} + +// RecvMsgs wraps recvmmsg system call. +// +// It returns the number of processed messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_PEEK. +// +// Only Linux supports this. +func (c *Conn) RecvMsgs(ms []Message, flags int) (int, error) { + return c.recvMsgs(ms, flags) +} + +// SendMsgs wraps sendmmsg system call. +// +// It returns the number of processed messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_DONTROUTE. +// +// Only Linux supports this. +func (c *Conn) SendMsgs(ms []Message, flags int) (int, error) { + return c.sendMsgs(ms, flags) +} diff --git a/vendor/golang.org/x/net/internal/socket/sys.go b/vendor/golang.org/x/net/internal/socket/sys.go new file mode 100644 index 0000000..4a26af1 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys.go @@ -0,0 +1,23 @@ +// 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 socket + +import ( + "encoding/binary" + "unsafe" +) + +// NativeEndian is the machine native endian implementation of ByteOrder. +var NativeEndian binary.ByteOrder + +func init() { + i := uint32(1) + b := (*[4]byte)(unsafe.Pointer(&i)) + if b[0] == 1 { + NativeEndian = binary.LittleEndian + } else { + NativeEndian = binary.BigEndian + } +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_bsd.go b/vendor/golang.org/x/net/internal/socket/sys_bsd.go new file mode 100644 index 0000000..e7664d4 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_bsd.go @@ -0,0 +1,15 @@ +// 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. + +//go:build aix || darwin || dragonfly || freebsd || openbsd || solaris + +package socket + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errNotImplemented +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errNotImplemented +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_const_unix.go b/vendor/golang.org/x/net/internal/socket/sys_const_unix.go new file mode 100644 index 0000000..d7627f8 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_const_unix.go @@ -0,0 +1,20 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos + +package socket + +import "golang.org/x/sys/unix" + +const ( + sysAF_UNSPEC = unix.AF_UNSPEC + sysAF_INET = unix.AF_INET + sysAF_INET6 = unix.AF_INET6 + + sysSOCK_RAW = unix.SOCK_RAW + + sizeofSockaddrInet4 = unix.SizeofSockaddrInet4 + sizeofSockaddrInet6 = unix.SizeofSockaddrInet6 +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux.go b/vendor/golang.org/x/net/internal/socket/sys_linux.go new file mode 100644 index 0000000..08d4910 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux.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. + +//go:build linux && !s390x && !386 + +package socket + +import ( + "syscall" + "unsafe" +) + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall6(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall6(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_386.go b/vendor/golang.org/x/net/internal/socket/sys_linux_386.go new file mode 100644 index 0000000..c877ef2 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_386.go @@ -0,0 +1,28 @@ +// 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 socket + +import ( + "syscall" + "unsafe" +) + +const ( + sysRECVMMSG = 0x13 + sysSENDMMSG = 0x14 +) + +func socketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno) +func rawsocketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno) + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, errno := socketcall(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, errno := socketcall(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_386.s b/vendor/golang.org/x/net/internal/socket/sys_linux_386.s new file mode 100644 index 0000000..93e7d75 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_386.s @@ -0,0 +1,11 @@ +// 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. + +#include "textflag.h" + +TEXT ·socketcall(SB),NOSPLIT,$0-36 + JMP syscall·socketcall(SB) + +TEXT ·rawsocketcall(SB),NOSPLIT,$0-36 + JMP syscall·rawsocketcall(SB) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go b/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go new file mode 100644 index 0000000..9decee2 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go @@ -0,0 +1,10 @@ +// 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 socket + +const ( + sysRECVMMSG = 0x12b + sysSENDMMSG = 0x133 +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go b/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go new file mode 100644 index 0000000..d753b43 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go @@ -0,0 +1,10 @@ +// 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 socket + +const ( + sysRECVMMSG = 0x16d + sysSENDMMSG = 0x176 +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go b/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go new file mode 100644 index 0000000..b670894 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go @@ -0,0 +1,10 @@ +// 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 socket + +const ( + sysRECVMMSG = 0xf3 + sysSENDMMSG = 0x10d +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_loong64.go b/vendor/golang.org/x/net/internal/socket/sys_linux_loong64.go new file mode 100644 index 0000000..1d18247 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_loong64.go @@ -0,0 +1,12 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build loong64 + +package socket + +const ( + sysRECVMMSG = 0xf3 + sysSENDMMSG = 0x10d +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go b/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go new file mode 100644 index 0000000..9c0d740 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go @@ -0,0 +1,10 @@ +// 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 socket + +const ( + sysRECVMMSG = 0x10ef + sysSENDMMSG = 0x10f7 +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go b/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go new file mode 100644 index 0000000..071a4ab --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go @@ -0,0 +1,10 @@ +// 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 socket + +const ( + sysRECVMMSG = 0x14ae + sysSENDMMSG = 0x14b6 +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go b/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go new file mode 100644 index 0000000..071a4ab --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go @@ -0,0 +1,10 @@ +// 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 socket + +const ( + sysRECVMMSG = 0x14ae + sysSENDMMSG = 0x14b6 +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go b/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go new file mode 100644 index 0000000..9c0d740 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go @@ -0,0 +1,10 @@ +// 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 socket + +const ( + sysRECVMMSG = 0x10ef + sysSENDMMSG = 0x10f7 +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_ppc.go b/vendor/golang.org/x/net/internal/socket/sys_linux_ppc.go new file mode 100644 index 0000000..90cfaa9 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_ppc.go @@ -0,0 +1,10 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +const ( + sysRECVMMSG = 0x157 + sysSENDMMSG = 0x15d +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go b/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go new file mode 100644 index 0000000..21c1e3f --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go @@ -0,0 +1,10 @@ +// 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 socket + +const ( + sysRECVMMSG = 0x157 + sysSENDMMSG = 0x15d +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go b/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go new file mode 100644 index 0000000..21c1e3f --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go @@ -0,0 +1,10 @@ +// 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 socket + +const ( + sysRECVMMSG = 0x157 + sysSENDMMSG = 0x15d +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_riscv64.go b/vendor/golang.org/x/net/internal/socket/sys_linux_riscv64.go new file mode 100644 index 0000000..0e407d1 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_riscv64.go @@ -0,0 +1,12 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build riscv64 + +package socket + +const ( + sysRECVMMSG = 0xf3 + sysSENDMMSG = 0x10d +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go b/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go new file mode 100644 index 0000000..c877ef2 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go @@ -0,0 +1,28 @@ +// 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 socket + +import ( + "syscall" + "unsafe" +) + +const ( + sysRECVMMSG = 0x13 + sysSENDMMSG = 0x14 +) + +func socketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno) +func rawsocketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno) + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, errno := socketcall(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, errno := socketcall(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s b/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s new file mode 100644 index 0000000..06d7562 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s @@ -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. + +#include "textflag.h" + +TEXT ·socketcall(SB),NOSPLIT,$0-72 + JMP syscall·socketcall(SB) + +TEXT ·rawsocketcall(SB),NOSPLIT,$0-72 + JMP syscall·rawsocketcall(SB) diff --git a/vendor/golang.org/x/net/internal/socket/sys_netbsd.go b/vendor/golang.org/x/net/internal/socket/sys_netbsd.go new file mode 100644 index 0000000..431851c --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_netbsd.go @@ -0,0 +1,25 @@ +// 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 socket + +import ( + "syscall" + "unsafe" +) + +const ( + sysRECVMMSG = 0x1db + sysSENDMMSG = 0x1dc +) + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall6(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall6(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_posix.go b/vendor/golang.org/x/net/internal/socket/sys_posix.go new file mode 100644 index 0000000..58d8654 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_posix.go @@ -0,0 +1,184 @@ +// 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. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || windows || zos + +package socket + +import ( + "encoding/binary" + "errors" + "net" + "runtime" + "strconv" + "sync" + "time" +) + +// marshalInetAddr writes a in sockaddr format into the buffer b. +// The buffer must be sufficiently large (sizeofSockaddrInet4/6). +// Returns the number of bytes written. +func marshalInetAddr(a net.Addr, b []byte) int { + switch a := a.(type) { + case *net.TCPAddr: + return marshalSockaddr(a.IP, a.Port, a.Zone, b) + case *net.UDPAddr: + return marshalSockaddr(a.IP, a.Port, a.Zone, b) + case *net.IPAddr: + return marshalSockaddr(a.IP, 0, a.Zone, b) + default: + return 0 + } +} + +func marshalSockaddr(ip net.IP, port int, zone string, b []byte) int { + if ip4 := ip.To4(); ip4 != nil { + switch runtime.GOOS { + case "android", "illumos", "linux", "solaris", "windows": + NativeEndian.PutUint16(b[:2], uint16(sysAF_INET)) + default: + b[0] = sizeofSockaddrInet4 + b[1] = sysAF_INET + } + binary.BigEndian.PutUint16(b[2:4], uint16(port)) + copy(b[4:8], ip4) + return sizeofSockaddrInet4 + } + if ip6 := ip.To16(); ip6 != nil && ip.To4() == nil { + switch runtime.GOOS { + case "android", "illumos", "linux", "solaris", "windows": + NativeEndian.PutUint16(b[:2], uint16(sysAF_INET6)) + default: + b[0] = sizeofSockaddrInet6 + b[1] = sysAF_INET6 + } + binary.BigEndian.PutUint16(b[2:4], uint16(port)) + copy(b[8:24], ip6) + if zone != "" { + NativeEndian.PutUint32(b[24:28], uint32(zoneCache.index(zone))) + } + return sizeofSockaddrInet6 + } + return 0 +} + +func parseInetAddr(b []byte, network string) (net.Addr, error) { + if len(b) < 2 { + return nil, errors.New("invalid address") + } + var af int + switch runtime.GOOS { + case "android", "illumos", "linux", "solaris", "windows": + af = int(NativeEndian.Uint16(b[:2])) + default: + af = int(b[1]) + } + var ip net.IP + var zone string + if af == sysAF_INET { + if len(b) < sizeofSockaddrInet4 { + return nil, errors.New("short address") + } + ip = make(net.IP, net.IPv4len) + copy(ip, b[4:8]) + } + if af == sysAF_INET6 { + if len(b) < sizeofSockaddrInet6 { + return nil, errors.New("short address") + } + ip = make(net.IP, net.IPv6len) + copy(ip, b[8:24]) + if id := int(NativeEndian.Uint32(b[24:28])); id > 0 { + zone = zoneCache.name(id) + } + } + switch network { + case "tcp", "tcp4", "tcp6": + return &net.TCPAddr{IP: ip, Port: int(binary.BigEndian.Uint16(b[2:4])), Zone: zone}, nil + case "udp", "udp4", "udp6": + return &net.UDPAddr{IP: ip, Port: int(binary.BigEndian.Uint16(b[2:4])), Zone: zone}, nil + default: + return &net.IPAddr{IP: ip, Zone: zone}, nil + } +} + +// An ipv6ZoneCache represents a cache holding partial network +// interface information. It is used for reducing the cost of IPv6 +// addressing scope zone resolution. +// +// Multiple names sharing the index are managed by first-come +// first-served basis for consistency. +type ipv6ZoneCache struct { + sync.RWMutex // guard the following + lastFetched time.Time // last time routing information was fetched + toIndex map[string]int // interface name to its index + toName map[int]string // interface index to its name +} + +var zoneCache = ipv6ZoneCache{ + toIndex: make(map[string]int), + toName: make(map[int]string), +} + +// update refreshes the network interface information if the cache was last +// updated more than 1 minute ago, or if force is set. It returns whether the +// cache was updated. +func (zc *ipv6ZoneCache) update(ift []net.Interface, force bool) (updated bool) { + zc.Lock() + defer zc.Unlock() + now := time.Now() + if !force && zc.lastFetched.After(now.Add(-60*time.Second)) { + return false + } + zc.lastFetched = now + if len(ift) == 0 { + var err error + if ift, err = net.Interfaces(); err != nil { + return false + } + } + zc.toIndex = make(map[string]int, len(ift)) + zc.toName = make(map[int]string, len(ift)) + for _, ifi := range ift { + zc.toIndex[ifi.Name] = ifi.Index + if _, ok := zc.toName[ifi.Index]; !ok { + zc.toName[ifi.Index] = ifi.Name + } + } + return true +} + +func (zc *ipv6ZoneCache) name(zone int) string { + updated := zoneCache.update(nil, false) + zoneCache.RLock() + name, ok := zoneCache.toName[zone] + zoneCache.RUnlock() + if !ok && !updated { + zoneCache.update(nil, true) + zoneCache.RLock() + name, ok = zoneCache.toName[zone] + zoneCache.RUnlock() + } + if !ok { // last resort + name = strconv.Itoa(zone) + } + return name +} + +func (zc *ipv6ZoneCache) index(zone string) int { + updated := zoneCache.update(nil, false) + zoneCache.RLock() + index, ok := zoneCache.toIndex[zone] + zoneCache.RUnlock() + if !ok && !updated { + zoneCache.update(nil, true) + zoneCache.RLock() + index, ok = zoneCache.toIndex[zone] + zoneCache.RUnlock() + } + if !ok { // last resort + index, _ = strconv.Atoi(zone) + } + return index +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_stub.go b/vendor/golang.org/x/net/internal/socket/sys_stub.go new file mode 100644 index 0000000..2e5b473 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_stub.go @@ -0,0 +1,52 @@ +// 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. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos + +package socket + +import "net" + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 + + sizeofSockaddrInet4 = 0x10 + sizeofSockaddrInet6 = 0x1c +) + +func marshalInetAddr(ip net.IP, port int, zone string) []byte { + return nil +} + +func parseInetAddr(b []byte, network string) (net.Addr, error) { + return nil, errNotImplemented +} + +func getsockopt(s uintptr, level, name int, b []byte) (int, error) { + return 0, errNotImplemented +} + +func setsockopt(s uintptr, level, name int, b []byte) error { + return errNotImplemented +} + +func recvmsg(s uintptr, buffers [][]byte, oob []byte, flags int, network string) (n, oobn int, recvflags int, from net.Addr, err error) { + return 0, 0, 0, nil, errNotImplemented +} + +func sendmsg(s uintptr, buffers [][]byte, oob []byte, to net.Addr, flags int) (int, error) { + return 0, errNotImplemented +} + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errNotImplemented +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errNotImplemented +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_unix.go b/vendor/golang.org/x/net/internal/socket/sys_unix.go new file mode 100644 index 0000000..93058db --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_unix.go @@ -0,0 +1,121 @@ +// 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. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris + +package socket + +import ( + "net" + "unsafe" + + "golang.org/x/sys/unix" +) + +//go:linkname syscall_getsockopt syscall.getsockopt +func syscall_getsockopt(s, level, name int, val unsafe.Pointer, vallen *uint32) error + +//go:linkname syscall_setsockopt syscall.setsockopt +func syscall_setsockopt(s, level, name int, val unsafe.Pointer, vallen uintptr) error + +func getsockopt(s uintptr, level, name int, b []byte) (int, error) { + l := uint32(len(b)) + err := syscall_getsockopt(int(s), level, name, unsafe.Pointer(&b[0]), &l) + return int(l), err +} + +func setsockopt(s uintptr, level, name int, b []byte) error { + return syscall_setsockopt(int(s), level, name, unsafe.Pointer(&b[0]), uintptr(len(b))) +} + +func recvmsg(s uintptr, buffers [][]byte, oob []byte, flags int, network string) (n, oobn int, recvflags int, from net.Addr, err error) { + var unixFrom unix.Sockaddr + n, oobn, recvflags, unixFrom, err = unix.RecvmsgBuffers(int(s), buffers, oob, flags) + if unixFrom != nil { + from = sockaddrToAddr(unixFrom, network) + } + return +} + +func sendmsg(s uintptr, buffers [][]byte, oob []byte, to net.Addr, flags int) (int, error) { + var unixTo unix.Sockaddr + if to != nil { + unixTo = addrToSockaddr(to) + } + return unix.SendmsgBuffers(int(s), buffers, oob, unixTo, flags) +} + +// addrToSockaddr converts a net.Addr to a unix.Sockaddr. +func addrToSockaddr(a net.Addr) unix.Sockaddr { + var ( + ip net.IP + port int + zone string + ) + switch a := a.(type) { + case *net.TCPAddr: + ip = a.IP + port = a.Port + zone = a.Zone + case *net.UDPAddr: + ip = a.IP + port = a.Port + zone = a.Zone + case *net.IPAddr: + ip = a.IP + zone = a.Zone + default: + return nil + } + + if ip4 := ip.To4(); ip4 != nil { + sa := unix.SockaddrInet4{Port: port} + copy(sa.Addr[:], ip4) + return &sa + } + + if ip6 := ip.To16(); ip6 != nil && ip.To4() == nil { + sa := unix.SockaddrInet6{Port: port} + copy(sa.Addr[:], ip6) + if zone != "" { + sa.ZoneId = uint32(zoneCache.index(zone)) + } + return &sa + } + + return nil +} + +// sockaddrToAddr converts a unix.Sockaddr to a net.Addr. +func sockaddrToAddr(sa unix.Sockaddr, network string) net.Addr { + var ( + ip net.IP + port int + zone string + ) + switch sa := sa.(type) { + case *unix.SockaddrInet4: + ip = make(net.IP, net.IPv4len) + copy(ip, sa.Addr[:]) + port = sa.Port + case *unix.SockaddrInet6: + ip = make(net.IP, net.IPv6len) + copy(ip, sa.Addr[:]) + port = sa.Port + if sa.ZoneId > 0 { + zone = zoneCache.name(int(sa.ZoneId)) + } + default: + return nil + } + + switch network { + case "tcp", "tcp4", "tcp6": + return &net.TCPAddr{IP: ip, Port: port, Zone: zone} + case "udp", "udp4", "udp6": + return &net.UDPAddr{IP: ip, Port: port, Zone: zone} + default: + return &net.IPAddr{IP: ip, Zone: zone} + } +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_windows.go b/vendor/golang.org/x/net/internal/socket/sys_windows.go new file mode 100644 index 0000000..b738b89 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_windows.go @@ -0,0 +1,55 @@ +// 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 socket + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/sys/windows" +) + +func probeProtocolStack() int { + var p uintptr + return int(unsafe.Sizeof(p)) +} + +const ( + sysAF_UNSPEC = windows.AF_UNSPEC + sysAF_INET = windows.AF_INET + sysAF_INET6 = windows.AF_INET6 + + sysSOCK_RAW = windows.SOCK_RAW + + sizeofSockaddrInet4 = 0x10 + sizeofSockaddrInet6 = 0x1c +) + +func getsockopt(s uintptr, level, name int, b []byte) (int, error) { + l := uint32(len(b)) + err := syscall.Getsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(unsafe.Pointer(&b[0])), (*int32)(unsafe.Pointer(&l))) + return int(l), err +} + +func setsockopt(s uintptr, level, name int, b []byte) error { + return syscall.Setsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(unsafe.Pointer(&b[0])), int32(len(b))) +} + +func recvmsg(s uintptr, buffers [][]byte, oob []byte, flags int, network string) (n, oobn int, recvflags int, from net.Addr, err error) { + return 0, 0, 0, nil, errNotImplemented +} + +func sendmsg(s uintptr, buffers [][]byte, oob []byte, to net.Addr, flags int) (int, error) { + return 0, errNotImplemented +} + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errNotImplemented +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errNotImplemented +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_zos_s390x.go b/vendor/golang.org/x/net/internal/socket/sys_zos_s390x.go new file mode 100644 index 0000000..eaa896c --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_zos_s390x.go @@ -0,0 +1,66 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +import ( + "net" + "syscall" + "unsafe" +) + +func syscall_syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) +func syscall_syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func probeProtocolStack() int { + return 4 // sizeof(int) on GOOS=zos GOARCH=s390x +} + +func getsockopt(s uintptr, level, name int, b []byte) (int, error) { + l := uint32(len(b)) + _, _, errno := syscall_syscall6(syscall.SYS_GETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(unsafe.Pointer(&l)), 0) + return int(l), errnoErr(errno) +} + +func setsockopt(s uintptr, level, name int, b []byte) error { + _, _, errno := syscall_syscall6(syscall.SYS_SETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) + return errnoErr(errno) +} + +func recvmsg(s uintptr, buffers [][]byte, oob []byte, flags int, network string) (n, oobn int, recvflags int, from net.Addr, err error) { + var h msghdr + vs := make([]iovec, len(buffers)) + var sa []byte + if network != "tcp" { + sa = make([]byte, sizeofSockaddrInet6) + } + h.pack(vs, buffers, oob, sa) + sn, _, errno := syscall_syscall(syscall.SYS___RECVMSG_A, s, uintptr(unsafe.Pointer(&h)), uintptr(flags)) + n = int(sn) + oobn = h.controllen() + recvflags = h.flags() + err = errnoErr(errno) + if network != "tcp" { + var err2 error + from, err2 = parseInetAddr(sa, network) + if err2 != nil && err == nil { + err = err2 + } + } + return +} + +func sendmsg(s uintptr, buffers [][]byte, oob []byte, to net.Addr, flags int) (int, error) { + var h msghdr + vs := make([]iovec, len(buffers)) + var sa []byte + if to != nil { + var a [sizeofSockaddrInet6]byte + n := marshalInetAddr(to, a[:]) + sa = a[:n] + } + h.pack(vs, buffers, oob, sa) + n, _, errno := syscall_syscall(syscall.SYS___SENDMSG_A, s, uintptr(unsafe.Pointer(&h)), uintptr(flags)) + return int(n), errnoErr(errno) +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_zos_s390x.s b/vendor/golang.org/x/net/internal/socket/sys_zos_s390x.s new file mode 100644 index 0000000..60d5839 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_zos_s390x.s @@ -0,0 +1,11 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +TEXT ·syscall_syscall(SB),NOSPLIT,$0 + JMP syscall·_syscall(SB) + +TEXT ·syscall_syscall6(SB),NOSPLIT,$0 + JMP syscall·_syscall6(SB) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_aix_ppc64.go b/vendor/golang.org/x/net/internal/socket/zsys_aix_ppc64.go new file mode 100644 index 0000000..45bab00 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_aix_ppc64.go @@ -0,0 +1,39 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_aix.go + +// Added for go1.11 compatibility +//go:build aix + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go new file mode 100644 index 0000000..98dcfe4 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go @@ -0,0 +1,32 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_darwin.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go b/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go new file mode 100644 index 0000000..98dcfe4 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go @@ -0,0 +1,32 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_darwin.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go new file mode 100644 index 0000000..636d129 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go @@ -0,0 +1,32 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_dragonfly.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go new file mode 100644 index 0000000..87707fe --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go @@ -0,0 +1,30 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package socket + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go new file mode 100644 index 0000000..7db7781 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go @@ -0,0 +1,32 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go new file mode 100644 index 0000000..87707fe --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go @@ -0,0 +1,30 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package socket + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm64.go b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm64.go new file mode 100644 index 0000000..7db7781 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm64.go @@ -0,0 +1,32 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_freebsd_riscv64.go b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_riscv64.go new file mode 100644 index 0000000..965c0b2 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_riscv64.go @@ -0,0 +1,30 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go new file mode 100644 index 0000000..4c19269 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go @@ -0,0 +1,35 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package socket + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go new file mode 100644 index 0000000..3dcd5c8 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go @@ -0,0 +1,38 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go new file mode 100644 index 0000000..4c19269 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go @@ -0,0 +1,35 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package socket + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go new file mode 100644 index 0000000..3dcd5c8 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go @@ -0,0 +1,38 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_loong64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_loong64.go new file mode 100644 index 0000000..b6fc15a --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_loong64.go @@ -0,0 +1,39 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +//go:build loong64 + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_0 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go new file mode 100644 index 0000000..4c19269 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go @@ -0,0 +1,35 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package socket + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go new file mode 100644 index 0000000..3dcd5c8 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go @@ -0,0 +1,38 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go new file mode 100644 index 0000000..3dcd5c8 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go @@ -0,0 +1,38 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go new file mode 100644 index 0000000..4c19269 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go @@ -0,0 +1,35 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package socket + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc.go new file mode 100644 index 0000000..4c19269 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc.go @@ -0,0 +1,35 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package socket + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go new file mode 100644 index 0000000..3dcd5c8 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go @@ -0,0 +1,38 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go new file mode 100644 index 0000000..3dcd5c8 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go @@ -0,0 +1,38 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_riscv64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_riscv64.go new file mode 100644 index 0000000..e67fc3c --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_riscv64.go @@ -0,0 +1,39 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +//go:build riscv64 + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_0 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go new file mode 100644 index 0000000..3dcd5c8 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go @@ -0,0 +1,38 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go new file mode 100644 index 0000000..f95572d --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go @@ -0,0 +1,35 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_netbsd.go + +package socket + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go new file mode 100644 index 0000000..a92fd60 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go @@ -0,0 +1,38 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_netbsd.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go new file mode 100644 index 0000000..f95572d --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go @@ -0,0 +1,35 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_netbsd.go + +package socket + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm64.go b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm64.go new file mode 100644 index 0000000..a92fd60 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm64.go @@ -0,0 +1,38 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_netbsd.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go new file mode 100644 index 0000000..e792ec2 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go @@ -0,0 +1,30 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_openbsd.go + +package socket + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go new file mode 100644 index 0000000..b68ff2d --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go @@ -0,0 +1,32 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_openbsd.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go new file mode 100644 index 0000000..e792ec2 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go @@ -0,0 +1,30 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_openbsd.go + +package socket + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm64.go b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm64.go new file mode 100644 index 0000000..b68ff2d --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm64.go @@ -0,0 +1,32 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_openbsd.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_mips64.go b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_mips64.go new file mode 100644 index 0000000..3c9576e --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_mips64.go @@ -0,0 +1,30 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_openbsd.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_ppc64.go b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_ppc64.go new file mode 100644 index 0000000..3c9576e --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_ppc64.go @@ -0,0 +1,30 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_openbsd.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_riscv64.go b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_riscv64.go new file mode 100644 index 0000000..3c9576e --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_riscv64.go @@ -0,0 +1,30 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_openbsd.go + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go new file mode 100644 index 0000000..359cfec --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go @@ -0,0 +1,32 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_solaris.go + +package socket + +type iovec struct { + Base *int8 + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Accrights *int8 + Accrightslen int32 + Pad_cgo_2 [4]byte +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_zos_s390x.go b/vendor/golang.org/x/net/internal/socket/zsys_zos_s390x.go new file mode 100644 index 0000000..49b62c8 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_zos_s390x.go @@ -0,0 +1,28 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Iov *iovec + Control *byte + Flags int32 + Namelen uint32 + Iovlen int32 + Controllen uint32 +} + +type cmsghdr struct { + Len int32 + Level int32 + Type int32 +} + +const sizeofCmsghdr = 12 diff --git a/vendor/golang.org/x/net/ipv4/batch.go b/vendor/golang.org/x/net/ipv4/batch.go new file mode 100644 index 0000000..1a3a4fc --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/batch.go @@ -0,0 +1,194 @@ +// 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 ( + "net" + "runtime" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the ReadBatch and WriteBatch methods of +// PacketConn are not implemented. + +// BUG(mikio): On Windows, the ReadBatch and WriteBatch methods of +// RawConn are not implemented. + +// A Message represents an IO message. +// +// type Message struct { +// Buffers [][]byte +// OOB []byte +// Addr net.Addr +// N int +// NN int +// Flags int +// } +// +// The Buffers fields represents a list of contiguous buffers, which +// can be used for vectored IO, for example, putting a header and a +// payload in each slice. +// When writing, the Buffers field must contain at least one byte to +// write. +// When reading, the Buffers field will always contain a byte to read. +// +// The OOB field contains protocol-specific control or miscellaneous +// ancillary data known as out-of-band data. +// It can be nil when not required. +// +// The Addr field specifies a destination address when writing. +// It can be nil when the underlying protocol of the endpoint uses +// connection-oriented communication. +// After a successful read, it may contain the source address on the +// received packet. +// +// The N field indicates the number of bytes read or written from/to +// Buffers. +// +// The NN field indicates the number of bytes read or written from/to +// OOB. +// +// The Flags field contains protocol-specific information on the +// received message. +type Message = socket.Message + +// ReadBatch reads a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_PEEK. +// +// On a successful read it returns the number of messages received, up +// to len(ms). +// +// On Linux, a batch read will be optimized. +// On other platforms, this method will read only a single message. +// +// Unlike the ReadFrom method, it doesn't strip the IPv4 header +// followed by option headers from the received IPv4 datagram when the +// underlying transport is net.IPConn. Each Buffers field of Message +// must be large enough to accommodate an IPv4 header and option +// headers. +func (c *payloadHandler) ReadBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + switch runtime.GOOS { + case "linux": + n, err := c.RecvMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.RecvMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + if compatFreeBSD32 && ms[0].NN > 0 { + adjustFreeBSD32(&ms[0]) + } + return n, err + } +} + +// WriteBatch writes a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_DONTROUTE. +// +// It returns the number of messages written on a successful write. +// +// On Linux, a batch write will be optimized. +// On other platforms, this method will write only a single message. +func (c *payloadHandler) WriteBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + switch runtime.GOOS { + case "linux": + n, err := c.SendMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.SendMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + } +} + +// ReadBatch reads a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_PEEK. +// +// On a successful read it returns the number of messages received, up +// to len(ms). +// +// On Linux, a batch read will be optimized. +// On other platforms, this method will read only a single message. +func (c *packetHandler) ReadBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + switch runtime.GOOS { + case "linux": + n, err := c.RecvMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.RecvMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + if compatFreeBSD32 && ms[0].NN > 0 { + adjustFreeBSD32(&ms[0]) + } + return n, err + } +} + +// WriteBatch writes a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_DONTROUTE. +// +// It returns the number of messages written on a successful write. +// +// On Linux, a batch write will be optimized. +// On other platforms, this method will write only a single message. +func (c *packetHandler) WriteBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + switch runtime.GOOS { + case "linux": + n, err := c.SendMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "write", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.SendMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "write", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + return n, err + } +} diff --git a/vendor/golang.org/x/net/ipv4/control.go b/vendor/golang.org/x/net/ipv4/control.go new file mode 100644 index 0000000..a2b02ca --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control.go @@ -0,0 +1,144 @@ +// 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. + +package ipv4 + +import ( + "fmt" + "net" + "sync" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +type rawOpt struct { + sync.RWMutex + cflags ControlFlags +} + +func (c *rawOpt) set(f ControlFlags) { c.cflags |= f } +func (c *rawOpt) clear(f ControlFlags) { c.cflags &^= f } +func (c *rawOpt) isset(f ControlFlags) bool { return c.cflags&f != 0 } + +type ControlFlags uint + +const ( + FlagTTL ControlFlags = 1 << iota // pass the TTL on the received packet + FlagSrc // pass the source address on the received packet + FlagDst // pass the destination address on the received packet + FlagInterface // pass the interface index on the received packet +) + +// A ControlMessage represents per packet basis IP-level socket options. +type ControlMessage struct { + // Receiving socket options: SetControlMessage allows to + // receive the options from the protocol stack using ReadFrom + // method of PacketConn or RawConn. + // + // Specifying socket options: ControlMessage for WriteTo + // method of PacketConn or RawConn allows to send the options + // to the protocol stack. + // + TTL int // time-to-live, receiving only + Src net.IP // source address, specifying only + Dst net.IP // destination address, receiving only + IfIndex int // interface index, must be 1 <= value when specifying +} + +func (cm *ControlMessage) String() string { + if cm == nil { + return "" + } + return fmt.Sprintf("ttl=%d src=%v dst=%v ifindex=%d", cm.TTL, cm.Src, cm.Dst, cm.IfIndex) +} + +// Marshal returns the binary encoding of cm. +func (cm *ControlMessage) Marshal() []byte { + if cm == nil { + return nil + } + var m socket.ControlMessage + if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To4() != nil || cm.IfIndex > 0) { + m = socket.NewControlMessage([]int{ctlOpts[ctlPacketInfo].length}) + } + if len(m) > 0 { + ctlOpts[ctlPacketInfo].marshal(m, cm) + } + return m +} + +// Parse parses b as a control message and stores the result in cm. +func (cm *ControlMessage) Parse(b []byte) error { + ms, err := socket.ControlMessage(b).Parse() + if err != nil { + return err + } + for _, m := range ms { + lvl, typ, l, err := m.ParseHeader() + if err != nil { + return err + } + if lvl != iana.ProtocolIP { + continue + } + switch { + case typ == ctlOpts[ctlTTL].name && l >= ctlOpts[ctlTTL].length: + ctlOpts[ctlTTL].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlDst].name && l >= ctlOpts[ctlDst].length: + ctlOpts[ctlDst].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlInterface].name && l >= ctlOpts[ctlInterface].length: + ctlOpts[ctlInterface].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlPacketInfo].name && l >= ctlOpts[ctlPacketInfo].length: + ctlOpts[ctlPacketInfo].parse(cm, m.Data(l)) + } + } + return nil +} + +// NewControlMessage returns a new control message. +// +// The returned message is large enough for options specified by cf. +func NewControlMessage(cf ControlFlags) []byte { + opt := rawOpt{cflags: cf} + var l int + if opt.isset(FlagTTL) && ctlOpts[ctlTTL].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlTTL].length) + } + if ctlOpts[ctlPacketInfo].name > 0 { + if opt.isset(FlagSrc | FlagDst | FlagInterface) { + l += socket.ControlMessageSpace(ctlOpts[ctlPacketInfo].length) + } + } else { + if opt.isset(FlagDst) && ctlOpts[ctlDst].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlDst].length) + } + if opt.isset(FlagInterface) && ctlOpts[ctlInterface].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlInterface].length) + } + } + var b []byte + if l > 0 { + b = make([]byte, l) + } + return b +} + +// Ancillary data socket options +const ( + ctlTTL = iota // header field + ctlSrc // header field + ctlDst // header field + ctlInterface // inbound or outbound interface + ctlPacketInfo // inbound or outbound packet path + ctlMax +) + +// A ctlOpt represents a binding for ancillary data socket option. +type ctlOpt struct { + name int // option name, must be equal or greater than 1 + length int // option length + marshal func([]byte, *ControlMessage) []byte + parse func(*ControlMessage, []byte) +} diff --git a/vendor/golang.org/x/net/ipv4/control_bsd.go b/vendor/golang.org/x/net/ipv4/control_bsd.go new file mode 100644 index 0000000..c88da8c --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_bsd.go @@ -0,0 +1,43 @@ +// 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. + +//go:build aix || darwin || dragonfly || freebsd || netbsd || openbsd + +package ipv4 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +func marshalDst(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIP, unix.IP_RECVDSTADDR, net.IPv4len) + return m.Next(net.IPv4len) +} + +func parseDst(cm *ControlMessage, b []byte) { + if len(cm.Dst) < net.IPv4len { + cm.Dst = make(net.IP, net.IPv4len) + } + copy(cm.Dst, b[:net.IPv4len]) +} + +func marshalInterface(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIP, sockoptReceiveInterface, syscall.SizeofSockaddrDatalink) + return m.Next(syscall.SizeofSockaddrDatalink) +} + +func parseInterface(cm *ControlMessage, b []byte) { + var sadl syscall.SockaddrDatalink + copy((*[unsafe.Sizeof(sadl)]byte)(unsafe.Pointer(&sadl))[:], b) + cm.IfIndex = int(sadl.Index) +} diff --git a/vendor/golang.org/x/net/ipv4/control_pktinfo.go b/vendor/golang.org/x/net/ipv4/control_pktinfo.go new file mode 100644 index 0000000..14ae2da --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_pktinfo.go @@ -0,0 +1,41 @@ +// 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. + +//go:build darwin || linux || solaris + +package ipv4 + +import ( + "net" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +func marshalPacketInfo(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIP, unix.IP_PKTINFO, sizeofInetPktinfo) + if cm != nil { + pi := (*inetPktinfo)(unsafe.Pointer(&m.Data(sizeofInetPktinfo)[0])) + if ip := cm.Src.To4(); ip != nil { + copy(pi.Spec_dst[:], ip) + } + if cm.IfIndex > 0 { + pi.setIfindex(cm.IfIndex) + } + } + return m.Next(sizeofInetPktinfo) +} + +func parsePacketInfo(cm *ControlMessage, b []byte) { + pi := (*inetPktinfo)(unsafe.Pointer(&b[0])) + cm.IfIndex = int(pi.Ifindex) + if len(cm.Dst) < net.IPv4len { + cm.Dst = make(net.IP, net.IPv4len) + } + copy(cm.Dst, pi.Addr[:]) +} diff --git a/vendor/golang.org/x/net/ipv4/control_stub.go b/vendor/golang.org/x/net/ipv4/control_stub.go new file mode 100644 index 0000000..3ba6611 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_stub.go @@ -0,0 +1,13 @@ +// 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. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos + +package ipv4 + +import "golang.org/x/net/internal/socket" + +func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { + return errNotImplemented +} diff --git a/vendor/golang.org/x/net/ipv4/control_unix.go b/vendor/golang.org/x/net/ipv4/control_unix.go new file mode 100644 index 0000000..2e76554 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_unix.go @@ -0,0 +1,75 @@ +// 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. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris + +package ipv4 + +import ( + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { + opt.Lock() + defer opt.Unlock() + if so, ok := sockOpts[ssoReceiveTTL]; ok && cf&FlagTTL != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagTTL) + } else { + opt.clear(FlagTTL) + } + } + if so, ok := sockOpts[ssoPacketInfo]; ok { + if cf&(FlagSrc|FlagDst|FlagInterface) != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(cf & (FlagSrc | FlagDst | FlagInterface)) + } else { + opt.clear(cf & (FlagSrc | FlagDst | FlagInterface)) + } + } + } else { + if so, ok := sockOpts[ssoReceiveDst]; ok && cf&FlagDst != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagDst) + } else { + opt.clear(FlagDst) + } + } + if so, ok := sockOpts[ssoReceiveInterface]; ok && cf&FlagInterface != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagInterface) + } else { + opt.clear(FlagInterface) + } + } + } + return nil +} + +func marshalTTL(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIP, unix.IP_RECVTTL, 1) + return m.Next(1) +} + +func parseTTL(cm *ControlMessage, b []byte) { + cm.TTL = int(*(*byte)(unsafe.Pointer(&b[:1][0]))) +} diff --git a/vendor/golang.org/x/net/ipv4/control_windows.go b/vendor/golang.org/x/net/ipv4/control_windows.go new file mode 100644 index 0000000..82c6306 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_windows.go @@ -0,0 +1,12 @@ +// 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. + +package ipv4 + +import "golang.org/x/net/internal/socket" + +func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { + // TODO(mikio): implement this + return errNotImplemented +} diff --git a/vendor/golang.org/x/net/ipv4/control_zos.go b/vendor/golang.org/x/net/ipv4/control_zos.go new file mode 100644 index 0000000..de11c42 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_zos.go @@ -0,0 +1,88 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +func marshalPacketInfo(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIP, unix.IP_PKTINFO, sizeofInetPktinfo) + if cm != nil { + pi := (*inetPktinfo)(unsafe.Pointer(&m.Data(sizeofInetPktinfo)[0])) + if ip := cm.Src.To4(); ip != nil { + copy(pi.Addr[:], ip) + } + if cm.IfIndex > 0 { + pi.setIfindex(cm.IfIndex) + } + } + return m.Next(sizeofInetPktinfo) +} + +func parsePacketInfo(cm *ControlMessage, b []byte) { + pi := (*inetPktinfo)(unsafe.Pointer(&b[0])) + cm.IfIndex = int(pi.Ifindex) + if len(cm.Dst) < net.IPv4len { + cm.Dst = make(net.IP, net.IPv4len) + } + copy(cm.Dst, pi.Addr[:]) +} + +func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { + opt.Lock() + defer opt.Unlock() + if so, ok := sockOpts[ssoReceiveTTL]; ok && cf&FlagTTL != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagTTL) + } else { + opt.clear(FlagTTL) + } + } + if so, ok := sockOpts[ssoPacketInfo]; ok { + if cf&(FlagSrc|FlagDst|FlagInterface) != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(cf & (FlagSrc | FlagDst | FlagInterface)) + } else { + opt.clear(cf & (FlagSrc | FlagDst | FlagInterface)) + } + } + } else { + if so, ok := sockOpts[ssoReceiveDst]; ok && cf&FlagDst != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagDst) + } else { + opt.clear(FlagDst) + } + } + if so, ok := sockOpts[ssoReceiveInterface]; ok && cf&FlagInterface != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagInterface) + } else { + opt.clear(FlagInterface) + } + } + } + return nil +} diff --git a/vendor/golang.org/x/net/ipv4/dgramopt.go b/vendor/golang.org/x/net/ipv4/dgramopt.go new file mode 100644 index 0000000..c191c22 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/dgramopt.go @@ -0,0 +1,264 @@ +// 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. + +package ipv4 + +import ( + "net" + + "golang.org/x/net/bpf" +) + +// MulticastTTL returns the time-to-live field value for outgoing +// multicast packets. +func (c *dgramOpt) MulticastTTL() (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + so, ok := sockOpts[ssoMulticastTTL] + if !ok { + return 0, errNotImplemented + } + return so.GetInt(c.Conn) +} + +// SetMulticastTTL sets the time-to-live field value for future +// outgoing multicast packets. +func (c *dgramOpt) SetMulticastTTL(ttl int) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoMulticastTTL] + if !ok { + return errNotImplemented + } + return so.SetInt(c.Conn, ttl) +} + +// MulticastInterface returns the default interface for multicast +// packet transmissions. +func (c *dgramOpt) MulticastInterface() (*net.Interface, error) { + if !c.ok() { + return nil, errInvalidConn + } + so, ok := sockOpts[ssoMulticastInterface] + if !ok { + return nil, errNotImplemented + } + return so.getMulticastInterface(c.Conn) +} + +// SetMulticastInterface sets the default interface for future +// multicast packet transmissions. +func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoMulticastInterface] + if !ok { + return errNotImplemented + } + return so.setMulticastInterface(c.Conn, ifi) +} + +// MulticastLoopback reports whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) MulticastLoopback() (bool, error) { + if !c.ok() { + return false, errInvalidConn + } + so, ok := sockOpts[ssoMulticastLoopback] + if !ok { + return false, errNotImplemented + } + on, err := so.GetInt(c.Conn) + if err != nil { + return false, err + } + return on == 1, nil +} + +// SetMulticastLoopback sets whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) SetMulticastLoopback(on bool) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoMulticastLoopback] + if !ok { + return errNotImplemented + } + return so.SetInt(c.Conn, boolint(on)) +} + +// JoinGroup joins the group address group on the interface ifi. +// By default all sources that can cast data to group are accepted. +// It's possible to mute and unmute data transmission from a specific +// source by using ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup. +// JoinGroup uses the system assigned multicast interface when ifi is +// nil, although this is not recommended because the assignment +// depends on platforms and sometimes it might require routing +// configuration. +func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoJoinGroup] + if !ok { + return errNotImplemented + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + return so.setGroup(c.Conn, ifi, grp) +} + +// LeaveGroup leaves the group address group on the interface ifi +// regardless of whether the group is any-source group or +// source-specific group. +func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoLeaveGroup] + if !ok { + return errNotImplemented + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + return so.setGroup(c.Conn, ifi, grp) +} + +// JoinSourceSpecificGroup joins the source-specific group comprising +// group and source on the interface ifi. +// JoinSourceSpecificGroup uses the system assigned multicast +// interface when ifi is nil, although this is not recommended because +// the assignment depends on platforms and sometimes it might require +// routing configuration. +func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoJoinSourceGroup] + if !ok { + return errNotImplemented + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP4(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// LeaveSourceSpecificGroup leaves the source-specific group on the +// interface ifi. +func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoLeaveSourceGroup] + if !ok { + return errNotImplemented + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP4(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// ExcludeSourceSpecificGroup excludes the source-specific group from +// the already joined any-source groups by JoinGroup on the interface +// ifi. +func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoBlockSourceGroup] + if !ok { + return errNotImplemented + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP4(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// IncludeSourceSpecificGroup includes the excluded source-specific +// group by ExcludeSourceSpecificGroup again on the interface ifi. +func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoUnblockSourceGroup] + if !ok { + return errNotImplemented + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP4(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// ICMPFilter returns an ICMP filter. +// Currently only Linux supports this. +func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) { + if !c.ok() { + return nil, errInvalidConn + } + so, ok := sockOpts[ssoICMPFilter] + if !ok { + return nil, errNotImplemented + } + return so.getICMPFilter(c.Conn) +} + +// SetICMPFilter deploys the ICMP filter. +// Currently only Linux supports this. +func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoICMPFilter] + if !ok { + return errNotImplemented + } + return so.setICMPFilter(c.Conn, f) +} + +// SetBPF attaches a BPF program to the connection. +// +// Only supported on Linux. +func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoAttachFilter] + if !ok { + return errNotImplemented + } + return so.setBPF(c.Conn, filter) +} diff --git a/vendor/golang.org/x/net/ipv4/doc.go b/vendor/golang.org/x/net/ipv4/doc.go new file mode 100644 index 0000000..6fbdc52 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/doc.go @@ -0,0 +1,240 @@ +// 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. + +// Package ipv4 implements IP-level socket options for the Internet +// Protocol version 4. +// +// The package provides IP-level socket options that allow +// manipulation of IPv4 facilities. +// +// The IPv4 protocol and basic host requirements for IPv4 are defined +// in RFC 791 and RFC 1122. +// Host extensions for multicasting and socket interface extensions +// for multicast source filters are defined in RFC 1112 and RFC 3678. +// IGMPv1, IGMPv2 and IGMPv3 are defined in RFC 1112, RFC 2236 and RFC +// 3376. +// Source-specific multicast is defined in RFC 4607. +// +// # Unicasting +// +// 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 +// 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. +// +// ln, err := net.Listen("tcp4", "0.0.0.0:1024") +// if err != nil { +// // error handling +// } +// defer ln.Close() +// for { +// c, err := ln.Accept() +// if err != nil { +// // error handling +// } +// go func(c net.Conn) { +// defer c.Close() +// +// The outgoing packets will be labeled DiffServ assured forwarding +// class 1 low drop precedence, known as AF11 packets. +// +// if err := ipv4.NewConn(c).SetTOS(0x28); err != nil { +// // error handling +// } +// if _, err := c.Write(data); err != nil { +// // error handling +// } +// }(c) +// } +// +// # Multicasting +// +// 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 +// you begin multicasting, at a minimum joining network interfaces and +// multicast groups. +// +// en0, err := net.InterfaceByName("en0") +// if err != nil { +// // error handling +// } +// en1, err := net.InterfaceByIndex(911) +// if err != nil { +// // error handling +// } +// group := net.IPv4(224, 0, 0, 250) +// +// First, an application listens to an appropriate address with an +// appropriate service port. +// +// c, err := net.ListenPacket("udp4", "0.0.0.0:1024") +// if err != nil { +// // error handling +// } +// defer c.Close() +// +// Second, the application joins multicast groups, starts listening to +// 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. +// +// p := ipv4.NewPacketConn(c) +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: group}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en1, &net.UDPAddr{IP: group}); err != nil { +// // error handling +// } +// +// The application might set per packet control message transmissions +// 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. +// +// if err := p.SetControlMessage(ipv4.FlagDst, true); err != nil { +// // error handling +// } +// +// The application could identify whether the received packets are +// of interest by using the control message that contains the +// destination address of the received packet. +// +// b := make([]byte, 1500) +// for { +// n, cm, src, err := p.ReadFrom(b) +// if err != nil { +// // error handling +// } +// if cm.Dst.IsMulticast() { +// if cm.Dst.Equal(group) { +// // joined group, do something +// } else { +// // unknown group, discard +// continue +// } +// } +// +// The application can also send both unicast and multicast packets. +// +// p.SetTOS(0x0) +// p.SetTTL(16) +// if _, err := p.WriteTo(data, nil, src); err != nil { +// // error handling +// } +// dst := &net.UDPAddr{IP: group, Port: 1024} +// for _, ifi := range []*net.Interface{en0, en1} { +// if err := p.SetMulticastInterface(ifi); err != nil { +// // error handling +// } +// p.SetMulticastTTL(2) +// if _, err := p.WriteTo(data, nil, dst); err != nil { +// // error handling +// } +// } +// } +// +// # More multicasting +// +// An application that uses PacketConn or RawConn may join multiple +// multicast groups. For example, a UDP listener with port 1024 might +// join two different groups across over two different network +// interfaces by using: +// +// c, err := net.ListenPacket("udp4", "0.0.0.0:1024") +// if err != nil { +// // error handling +// } +// defer c.Close() +// p := ipv4.NewPacketConn(c) +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en1, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}); err != nil { +// // error handling +// } +// +// It is possible for multiple UDP listeners that listen on the same +// 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. +// +// c1, err := net.ListenPacket("udp4", "224.0.0.0:1024") +// if err != nil { +// // error handling +// } +// defer c1.Close() +// c2, err := net.ListenPacket("udp4", "224.0.0.0:1024") +// if err != nil { +// // error handling +// } +// defer c2.Close() +// p1 := ipv4.NewPacketConn(c1) +// if err := p1.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil { +// // error handling +// } +// p2 := ipv4.NewPacketConn(c2) +// if err := p2.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil { +// // error handling +// } +// +// Also it is possible for the application to leave or rejoin a +// multicast group on the network interface. +// +// if err := p.LeaveGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 250)}); err != nil { +// // error handling +// } +// +// # Source-specific multicasting +// +// An application that uses PacketConn or RawConn on IGMPv3 supported +// platform is able to join source-specific multicast groups. +// The application may use JoinSourceSpecificGroup and +// LeaveSourceSpecificGroup for the operation known as "include" mode, +// +// ssmgroup := net.UDPAddr{IP: net.IPv4(232, 7, 8, 9)} +// ssmsource := net.UDPAddr{IP: net.IPv4(192, 168, 0, 1)} +// if err := p.JoinSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil { +// // error handling +// } +// if err := p.LeaveSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil { +// // error handling +// } +// +// or JoinGroup, ExcludeSourceSpecificGroup, +// IncludeSourceSpecificGroup and LeaveGroup for the operation known +// as "exclude" mode. +// +// exclsource := net.UDPAddr{IP: net.IPv4(192, 168, 0, 254)} +// if err := p.JoinGroup(en0, &ssmgroup); err != nil { +// // error handling +// } +// if err := p.ExcludeSourceSpecificGroup(en0, &ssmgroup, &exclsource); err != nil { +// // error handling +// } +// if err := p.LeaveGroup(en0, &ssmgroup); err != nil { +// // error handling +// } +// +// Note that it depends on each platform implementation what happens +// when an application which runs on IGMPv3 unsupported platform uses +// JoinSourceSpecificGroup and LeaveSourceSpecificGroup. +// In general the platform tries to fall back to conversations using +// IGMPv1 or IGMPv2 and starts to listen to multicast traffic. +// In the fallback case, ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup may return an error. +package ipv4 // import "golang.org/x/net/ipv4" + +// BUG(mikio): This package is not implemented on JS, NaCl and Plan 9. diff --git a/vendor/golang.org/x/net/ipv4/endpoint.go b/vendor/golang.org/x/net/ipv4/endpoint.go new file mode 100644 index 0000000..4a6d7a8 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/endpoint.go @@ -0,0 +1,186 @@ +// 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. + +package ipv4 + +import ( + "net" + "time" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the JoinSourceSpecificGroup, +// LeaveSourceSpecificGroup, ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup methods of PacketConn and RawConn are +// not implemented. + +// A Conn represents a network endpoint that uses the IPv4 transport. +// It is used to control basic IP-level socket options such as TOS and +// TTL. +type Conn struct { + genericOpt +} + +type genericOpt struct { + *socket.Conn +} + +func (c *genericOpt) ok() bool { return c != nil && c.Conn != nil } + +// NewConn returns a new Conn. +func NewConn(c net.Conn) *Conn { + cc, _ := socket.NewConn(c) + return &Conn{ + genericOpt: genericOpt{Conn: cc}, + } +} + +// 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 +// network I/O methods specific to the IPv4 and higher layer protocols +// such as UDP. +type PacketConn struct { + genericOpt + dgramOpt + payloadHandler +} + +type dgramOpt struct { + *socket.Conn +} + +func (c *dgramOpt) ok() bool { return c != nil && c.Conn != nil } + +// SetControlMessage sets the per packet IP-level socket options. +func (c *PacketConn) SetControlMessage(cf ControlFlags, on bool) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return setControlMessage(c.dgramOpt.Conn, &c.payloadHandler.rawOpt, cf, on) +} + +// SetDeadline sets the read and write deadlines associated with the +// endpoint. +func (c *PacketConn) SetDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.PacketConn.SetDeadline(t) +} + +// SetReadDeadline sets the read deadline associated with the +// endpoint. +func (c *PacketConn) SetReadDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.PacketConn.SetReadDeadline(t) +} + +// SetWriteDeadline sets the write deadline associated with the +// endpoint. +func (c *PacketConn) SetWriteDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.PacketConn.SetWriteDeadline(t) +} + +// Close closes the endpoint. +func (c *PacketConn) Close() error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.PacketConn.Close() +} + +// NewPacketConn returns a new PacketConn using c as its underlying +// transport. +func NewPacketConn(c net.PacketConn) *PacketConn { + cc, _ := socket.NewConn(c.(net.Conn)) + p := &PacketConn{ + genericOpt: genericOpt{Conn: cc}, + dgramOpt: dgramOpt{Conn: cc}, + payloadHandler: payloadHandler{PacketConn: c, Conn: cc}, + } + return p +} + +// 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 +// 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 { + genericOpt + dgramOpt + packetHandler +} + +// SetControlMessage sets the per packet IP-level socket options. +func (c *RawConn) SetControlMessage(cf ControlFlags, on bool) error { + if !c.packetHandler.ok() { + return errInvalidConn + } + return setControlMessage(c.dgramOpt.Conn, &c.packetHandler.rawOpt, cf, on) +} + +// SetDeadline sets the read and write deadlines associated with the +// endpoint. +func (c *RawConn) SetDeadline(t time.Time) error { + if !c.packetHandler.ok() { + return errInvalidConn + } + return c.packetHandler.IPConn.SetDeadline(t) +} + +// SetReadDeadline sets the read deadline associated with the +// endpoint. +func (c *RawConn) SetReadDeadline(t time.Time) error { + if !c.packetHandler.ok() { + return errInvalidConn + } + return c.packetHandler.IPConn.SetReadDeadline(t) +} + +// SetWriteDeadline sets the write deadline associated with the +// endpoint. +func (c *RawConn) SetWriteDeadline(t time.Time) error { + if !c.packetHandler.ok() { + return errInvalidConn + } + return c.packetHandler.IPConn.SetWriteDeadline(t) +} + +// Close closes the endpoint. +func (c *RawConn) Close() error { + if !c.packetHandler.ok() { + return errInvalidConn + } + return c.packetHandler.IPConn.Close() +} + +// NewRawConn returns a new RawConn using c as its underlying +// transport. +func NewRawConn(c net.PacketConn) (*RawConn, error) { + cc, err := socket.NewConn(c.(net.Conn)) + if err != nil { + return nil, err + } + r := &RawConn{ + genericOpt: genericOpt{Conn: cc}, + dgramOpt: dgramOpt{Conn: cc}, + packetHandler: packetHandler{IPConn: c.(*net.IPConn), Conn: cc}, + } + so, ok := sockOpts[ssoHeaderPrepend] + if !ok { + return nil, errNotImplemented + } + if err := so.SetInt(r.dgramOpt.Conn, boolint(true)); err != nil { + return nil, err + } + return r, nil +} diff --git a/vendor/golang.org/x/net/ipv4/genericopt.go b/vendor/golang.org/x/net/ipv4/genericopt.go new file mode 100644 index 0000000..51c1237 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/genericopt.go @@ -0,0 +1,55 @@ +// 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. + +package ipv4 + +// TOS returns the type-of-service field value for outgoing packets. +func (c *genericOpt) TOS() (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + so, ok := sockOpts[ssoTOS] + if !ok { + return 0, errNotImplemented + } + return so.GetInt(c.Conn) +} + +// SetTOS sets the type-of-service field value for future outgoing +// packets. +func (c *genericOpt) SetTOS(tos int) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoTOS] + if !ok { + return errNotImplemented + } + return so.SetInt(c.Conn, tos) +} + +// TTL returns the time-to-live field value for outgoing packets. +func (c *genericOpt) TTL() (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + so, ok := sockOpts[ssoTTL] + if !ok { + return 0, errNotImplemented + } + return so.GetInt(c.Conn) +} + +// SetTTL sets the time-to-live field value for future outgoing +// packets. +func (c *genericOpt) SetTTL(ttl int) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoTTL] + if !ok { + return errNotImplemented + } + return so.SetInt(c.Conn, ttl) +} diff --git a/vendor/golang.org/x/net/ipv4/header.go b/vendor/golang.org/x/net/ipv4/header.go new file mode 100644 index 0000000..a00a3ea --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/header.go @@ -0,0 +1,172 @@ +// 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. + +package ipv4 + +import ( + "encoding/binary" + "fmt" + "net" + "runtime" + + "golang.org/x/net/internal/socket" +) + +const ( + Version = 4 // protocol version + HeaderLen = 20 // header length without extension headers +) + +type HeaderFlags int + +const ( + MoreFragments HeaderFlags = 1 << iota // more fragments flag + DontFragment // don't fragment flag +) + +// A Header represents an IPv4 header. +type Header struct { + Version int // protocol version + Len int // header length + TOS int // type-of-service + TotalLen int // packet total length + ID int // identification + Flags HeaderFlags // flags + FragOff int // fragment offset + TTL int // time-to-live + Protocol int // next protocol + Checksum int // checksum + Src net.IP // source address + Dst net.IP // destination address + Options []byte // options, extension headers +} + +func (h *Header) String() string { + if h == nil { + return "" + } + return fmt.Sprintf("ver=%d hdrlen=%d tos=%#x totallen=%d id=%#x flags=%#x fragoff=%#x ttl=%d proto=%d cksum=%#x src=%v dst=%v", h.Version, h.Len, h.TOS, h.TotalLen, h.ID, h.Flags, h.FragOff, h.TTL, h.Protocol, h.Checksum, h.Src, h.Dst) +} + +// Marshal returns the binary encoding of h. +// +// The returned slice is in the format used by a raw IP socket on the +// local system. +// This may differ from the wire format, depending on the system. +func (h *Header) Marshal() ([]byte, error) { + if h == nil { + return nil, errNilHeader + } + if h.Len < HeaderLen { + return nil, errHeaderTooShort + } + hdrlen := HeaderLen + len(h.Options) + b := make([]byte, hdrlen) + b[0] = byte(Version<<4 | (hdrlen >> 2 & 0x0f)) + b[1] = byte(h.TOS) + flagsAndFragOff := (h.FragOff & 0x1fff) | int(h.Flags<<13) + switch runtime.GOOS { + case "darwin", "ios", "dragonfly", "netbsd": + socket.NativeEndian.PutUint16(b[2:4], uint16(h.TotalLen)) + socket.NativeEndian.PutUint16(b[6:8], uint16(flagsAndFragOff)) + case "freebsd": + if freebsdVersion < 1100000 { + socket.NativeEndian.PutUint16(b[2:4], uint16(h.TotalLen)) + socket.NativeEndian.PutUint16(b[6:8], uint16(flagsAndFragOff)) + } else { + binary.BigEndian.PutUint16(b[2:4], uint16(h.TotalLen)) + binary.BigEndian.PutUint16(b[6:8], uint16(flagsAndFragOff)) + } + default: + binary.BigEndian.PutUint16(b[2:4], uint16(h.TotalLen)) + binary.BigEndian.PutUint16(b[6:8], uint16(flagsAndFragOff)) + } + binary.BigEndian.PutUint16(b[4:6], uint16(h.ID)) + b[8] = byte(h.TTL) + b[9] = byte(h.Protocol) + binary.BigEndian.PutUint16(b[10:12], uint16(h.Checksum)) + if ip := h.Src.To4(); ip != nil { + copy(b[12:16], ip[:net.IPv4len]) + } + if ip := h.Dst.To4(); ip != nil { + copy(b[16:20], ip[:net.IPv4len]) + } else { + return nil, errMissingAddress + } + if len(h.Options) > 0 { + copy(b[HeaderLen:], h.Options) + } + return b, nil +} + +// Parse parses b as an IPv4 header and stores the result in h. +// +// The provided b must be in the format used by a raw IP socket on the +// local system. +// This may differ from the wire format, depending on the system. +func (h *Header) Parse(b []byte) error { + if h == nil || b == nil { + return errNilHeader + } + if len(b) < HeaderLen { + return errHeaderTooShort + } + hdrlen := int(b[0]&0x0f) << 2 + if len(b) < hdrlen { + return errExtHeaderTooShort + } + h.Version = int(b[0] >> 4) + h.Len = hdrlen + h.TOS = int(b[1]) + h.ID = int(binary.BigEndian.Uint16(b[4:6])) + h.TTL = int(b[8]) + h.Protocol = int(b[9]) + h.Checksum = int(binary.BigEndian.Uint16(b[10:12])) + h.Src = net.IPv4(b[12], b[13], b[14], b[15]) + h.Dst = net.IPv4(b[16], b[17], b[18], b[19]) + switch runtime.GOOS { + case "darwin", "ios", "dragonfly", "netbsd": + h.TotalLen = int(socket.NativeEndian.Uint16(b[2:4])) + hdrlen + h.FragOff = int(socket.NativeEndian.Uint16(b[6:8])) + case "freebsd": + if freebsdVersion < 1100000 { + h.TotalLen = int(socket.NativeEndian.Uint16(b[2:4])) + if freebsdVersion < 1000000 { + h.TotalLen += hdrlen + } + h.FragOff = int(socket.NativeEndian.Uint16(b[6:8])) + } else { + h.TotalLen = int(binary.BigEndian.Uint16(b[2:4])) + h.FragOff = int(binary.BigEndian.Uint16(b[6:8])) + } + default: + h.TotalLen = int(binary.BigEndian.Uint16(b[2:4])) + h.FragOff = int(binary.BigEndian.Uint16(b[6:8])) + } + h.Flags = HeaderFlags(h.FragOff&0xe000) >> 13 + h.FragOff = h.FragOff & 0x1fff + optlen := hdrlen - HeaderLen + if optlen > 0 && len(b) >= hdrlen { + if cap(h.Options) < optlen { + h.Options = make([]byte, optlen) + } else { + h.Options = h.Options[:optlen] + } + copy(h.Options, b[HeaderLen:hdrlen]) + } + return nil +} + +// ParseHeader parses b as an IPv4 header. +// +// The provided b must be in the format used by a raw IP socket on the +// local system. +// This may differ from the wire format, depending on the system. +func ParseHeader(b []byte) (*Header, error) { + h := new(Header) + if err := h.Parse(b); err != nil { + return nil, err + } + return h, nil +} diff --git a/vendor/golang.org/x/net/ipv4/helper.go b/vendor/golang.org/x/net/ipv4/helper.go new file mode 100644 index 0000000..e845a73 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/helper.go @@ -0,0 +1,77 @@ +// 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. + +package ipv4 + +import ( + "errors" + "net" + "runtime" + + "golang.org/x/net/internal/socket" +) + +var ( + errInvalidConn = errors.New("invalid connection") + errMissingAddress = errors.New("missing address") + errNilHeader = errors.New("nil header") + errHeaderTooShort = errors.New("header too short") + errExtHeaderTooShort = errors.New("extension header too short") + errInvalidConnType = errors.New("invalid conn type") + errNotImplemented = errors.New("not implemented on " + runtime.GOOS + "/" + runtime.GOARCH) + + // See https://www.freebsd.org/doc/en/books/porters-handbook/versions.html. + freebsdVersion uint32 + compatFreeBSD32 bool // 386 emulation on amd64 +) + +// See golang.org/issue/30899. +func adjustFreeBSD32(m *socket.Message) { + // FreeBSD 12.0-RELEASE is affected by https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236737 + if 1200086 <= freebsdVersion && freebsdVersion < 1201000 { + l := (m.NN + 4 - 1) &^ (4 - 1) + if m.NN < l && l <= len(m.OOB) { + m.NN = l + } + } +} + +func boolint(b bool) int { + if b { + return 1 + } + return 0 +} + +func netAddrToIP4(a net.Addr) net.IP { + switch v := a.(type) { + case *net.UDPAddr: + if ip := v.IP.To4(); ip != nil { + return ip + } + case *net.IPAddr: + if ip := v.IP.To4(); ip != nil { + return ip + } + } + return nil +} + +func opAddr(a net.Addr) net.Addr { + switch a.(type) { + case *net.TCPAddr: + if a == nil { + return nil + } + case *net.UDPAddr: + if a == nil { + return nil + } + case *net.IPAddr: + if a == nil { + return nil + } + } + return a +} diff --git a/vendor/golang.org/x/net/ipv4/iana.go b/vendor/golang.org/x/net/ipv4/iana.go new file mode 100644 index 0000000..4375b40 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/iana.go @@ -0,0 +1,38 @@ +// go generate gen.go +// Code generated by the command above; DO NOT EDIT. + +package ipv4 + +// Internet Control Message Protocol (ICMP) Parameters, Updated: 2018-02-26 +const ( + ICMPTypeEchoReply ICMPType = 0 // Echo Reply + ICMPTypeDestinationUnreachable ICMPType = 3 // Destination Unreachable + ICMPTypeRedirect ICMPType = 5 // Redirect + ICMPTypeEcho ICMPType = 8 // Echo + ICMPTypeRouterAdvertisement ICMPType = 9 // Router Advertisement + ICMPTypeRouterSolicitation ICMPType = 10 // Router Solicitation + ICMPTypeTimeExceeded ICMPType = 11 // Time Exceeded + ICMPTypeParameterProblem ICMPType = 12 // Parameter Problem + ICMPTypeTimestamp ICMPType = 13 // Timestamp + ICMPTypeTimestampReply ICMPType = 14 // Timestamp Reply + ICMPTypePhoturis ICMPType = 40 // Photuris + ICMPTypeExtendedEchoRequest ICMPType = 42 // Extended Echo Request + ICMPTypeExtendedEchoReply ICMPType = 43 // Extended Echo Reply +) + +// Internet Control Message Protocol (ICMP) Parameters, Updated: 2018-02-26 +var icmpTypes = map[ICMPType]string{ + 0: "echo reply", + 3: "destination unreachable", + 5: "redirect", + 8: "echo", + 9: "router advertisement", + 10: "router solicitation", + 11: "time exceeded", + 12: "parameter problem", + 13: "timestamp", + 14: "timestamp reply", + 40: "photuris", + 42: "extended echo request", + 43: "extended echo reply", +} diff --git a/vendor/golang.org/x/net/ipv4/icmp.go b/vendor/golang.org/x/net/ipv4/icmp.go new file mode 100644 index 0000000..9902bb3 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/icmp.go @@ -0,0 +1,57 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import "golang.org/x/net/internal/iana" + +// An ICMPType represents a type of ICMP message. +type ICMPType int + +func (typ ICMPType) String() string { + s, ok := icmpTypes[typ] + if !ok { + return "" + } + return s +} + +// Protocol returns the ICMPv4 protocol number. +func (typ ICMPType) Protocol() int { + return iana.ProtocolICMP +} + +// An ICMPFilter represents an ICMP message filter for incoming +// packets. The filter belongs to a packet delivery path on a host and +// it cannot interact with forwarding packets or tunnel-outer packets. +// +// Note: RFC 8200 defines a reasonable role model and it works not +// only for IPv6 but IPv4. A node means a device that implements IP. +// A router means a node that forwards IP packets not explicitly +// addressed to itself, and a host means a node that is not a router. +type ICMPFilter struct { + icmpFilter +} + +// Accept accepts incoming ICMP packets including the type field value +// typ. +func (f *ICMPFilter) Accept(typ ICMPType) { + f.accept(typ) +} + +// Block blocks incoming ICMP packets including the type field value +// typ. +func (f *ICMPFilter) Block(typ ICMPType) { + f.block(typ) +} + +// SetAll sets the filter action to the filter. +func (f *ICMPFilter) SetAll(block bool) { + f.setAll(block) +} + +// WillBlock reports whether the ICMP type will be blocked. +func (f *ICMPFilter) WillBlock(typ ICMPType) bool { + return f.willBlock(typ) +} diff --git a/vendor/golang.org/x/net/ipv4/icmp_linux.go b/vendor/golang.org/x/net/ipv4/icmp_linux.go new file mode 100644 index 0000000..6e1c5c8 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/icmp_linux.go @@ -0,0 +1,25 @@ +// 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 ipv4 + +func (f *icmpFilter) accept(typ ICMPType) { + f.Data &^= 1 << (uint32(typ) & 31) +} + +func (f *icmpFilter) block(typ ICMPType) { + f.Data |= 1 << (uint32(typ) & 31) +} + +func (f *icmpFilter) setAll(block bool) { + if block { + f.Data = 1<<32 - 1 + } else { + f.Data = 0 + } +} + +func (f *icmpFilter) willBlock(typ ICMPType) bool { + return f.Data&(1<<(uint32(typ)&31)) != 0 +} diff --git a/vendor/golang.org/x/net/ipv4/icmp_stub.go b/vendor/golang.org/x/net/ipv4/icmp_stub.go new file mode 100644 index 0000000..c2c4ce7 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/icmp_stub.go @@ -0,0 +1,25 @@ +// 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. + +//go:build !linux + +package ipv4 + +const sizeofICMPFilter = 0x0 + +type icmpFilter struct { +} + +func (f *icmpFilter) accept(typ ICMPType) { +} + +func (f *icmpFilter) block(typ ICMPType) { +} + +func (f *icmpFilter) setAll(block bool) { +} + +func (f *icmpFilter) willBlock(typ ICMPType) bool { + return false +} diff --git a/vendor/golang.org/x/net/ipv4/packet.go b/vendor/golang.org/x/net/ipv4/packet.go new file mode 100644 index 0000000..7d784e0 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/packet.go @@ -0,0 +1,117 @@ +// 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. + +package ipv4 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the ReadFrom and WriteTo methods of RawConn +// are not implemented. + +// A packetHandler represents the IPv4 datagram handler. +type packetHandler struct { + *net.IPConn + *socket.Conn + rawOpt +} + +func (c *packetHandler) ok() bool { return c != nil && c.IPConn != nil && c.Conn != nil } + +// ReadFrom reads an IPv4 datagram from the endpoint c, copying the +// 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() { + return nil, nil, nil, errInvalidConn + } + c.rawOpt.RLock() + m := socket.Message{ + Buffers: [][]byte{b}, + OOB: NewControlMessage(c.rawOpt.cflags), + } + c.rawOpt.RUnlock() + if err := c.RecvMsg(&m, 0); err != nil { + return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + var hs []byte + if hs, p, err = slicePacket(b[:m.N]); err != nil { + return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + if h, err = ParseHeader(hs); err != nil { + return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + if m.NN > 0 { + if compatFreeBSD32 { + adjustFreeBSD32(&m) + } + cm = new(ControlMessage) + if err := cm.Parse(m.OOB[:m.NN]); err != nil { + return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + } + if src, ok := m.Addr.(*net.IPAddr); ok && cm != nil { + cm.Src = src.IP + } + return +} + +func slicePacket(b []byte) (h, p []byte, err error) { + if len(b) < HeaderLen { + return nil, nil, errHeaderTooShort + } + hdrlen := int(b[0]&0x0f) << 2 + return b[:hdrlen], b[hdrlen:], nil +} + +// WriteTo writes an IPv4 datagram through the endpoint c, copying the +// 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 +// may be nil if control of the outgoing datagram is not required. +// +// The IPv4 header h must contain appropriate fields that include: +// +// Version = +// Len = +// TOS = +// TotalLen = +// ID = platform sets an appropriate value if ID is zero +// FragOff = +// TTL = +// Protocol = +// Checksum = platform sets an appropriate value if Checksum is zero +// Src = platform sets an appropriate value if Src is nil +// Dst = +// Options = optional +func (c *packetHandler) WriteTo(h *Header, p []byte, cm *ControlMessage) error { + if !c.ok() { + return errInvalidConn + } + m := socket.Message{ + OOB: cm.Marshal(), + } + wh, err := h.Marshal() + if err != nil { + return err + } + m.Buffers = [][]byte{wh, p} + dst := new(net.IPAddr) + if cm != nil { + if ip := cm.Dst.To4(); ip != nil { + dst.IP = ip + } + } + if dst.IP == nil { + dst.IP = h.Dst + } + m.Addr = dst + if err := c.SendMsg(&m, 0); err != nil { + return &net.OpError{Op: "write", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Addr: opAddr(dst), Err: err} + } + return nil +} diff --git a/vendor/golang.org/x/net/ipv4/payload.go b/vendor/golang.org/x/net/ipv4/payload.go new file mode 100644 index 0000000..f95f811 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/payload.go @@ -0,0 +1,23 @@ +// 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. + +package ipv4 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the ControlMessage for ReadFrom and WriteTo +// methods of PacketConn is not implemented. + +// A payloadHandler represents the IPv4 datagram payload handler. +type payloadHandler struct { + net.PacketConn + *socket.Conn + rawOpt +} + +func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil && c.Conn != nil } diff --git a/vendor/golang.org/x/net/ipv4/payload_cmsg.go b/vendor/golang.org/x/net/ipv4/payload_cmsg.go new file mode 100644 index 0000000..91c685e --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/payload_cmsg.go @@ -0,0 +1,84 @@ +// 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. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos + +package ipv4 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +// ReadFrom reads a payload of the received IPv4 datagram, from the +// 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) { + if !c.ok() { + return 0, nil, nil, errInvalidConn + } + c.rawOpt.RLock() + m := socket.Message{ + OOB: NewControlMessage(c.rawOpt.cflags), + } + c.rawOpt.RUnlock() + switch c.PacketConn.(type) { + case *net.UDPConn: + m.Buffers = [][]byte{b} + if err := c.RecvMsg(&m, 0); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + case *net.IPConn: + h := make([]byte, HeaderLen) + m.Buffers = [][]byte{h, b} + if err := c.RecvMsg(&m, 0); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + hdrlen := int(h[0]&0x0f) << 2 + if hdrlen > len(h) { + d := hdrlen - len(h) + copy(b, b[d:]) + m.N -= d + } else { + m.N -= hdrlen + } + default: + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: errInvalidConnType} + } + if m.NN > 0 { + if compatFreeBSD32 { + adjustFreeBSD32(&m) + } + cm = new(ControlMessage) + if err := cm.Parse(m.OOB[:m.NN]); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + cm.Src = netAddrToIP4(m.Addr) + } + return m.N, cm, m.Addr, nil +} + +// 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 +// the datagram path and the outgoing interface to be specified. +// 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() { + return 0, errInvalidConn + } + m := socket.Message{ + Buffers: [][]byte{b}, + OOB: cm.Marshal(), + Addr: dst, + } + err = c.SendMsg(&m, 0) + if err != nil { + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Addr: opAddr(dst), Err: err} + } + return m.N, err +} diff --git a/vendor/golang.org/x/net/ipv4/payload_nocmsg.go b/vendor/golang.org/x/net/ipv4/payload_nocmsg.go new file mode 100644 index 0000000..2afd4b5 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/payload_nocmsg.go @@ -0,0 +1,39 @@ +// 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. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !zos + +package ipv4 + +import "net" + +// ReadFrom reads a payload of the received IPv4 datagram, from the +// 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) { + if !c.ok() { + return 0, nil, nil, errInvalidConn + } + if n, src, err = c.PacketConn.ReadFrom(b); err != nil { + return 0, nil, nil, err + } + return +} + +// 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 +// the datagram path and the outgoing interface to be specified. +// 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() { + return 0, errInvalidConn + } + if dst == nil { + return 0, errMissingAddress + } + return c.PacketConn.WriteTo(b, dst) +} diff --git a/vendor/golang.org/x/net/ipv4/sockopt.go b/vendor/golang.org/x/net/ipv4/sockopt.go new file mode 100644 index 0000000..22e90c0 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sockopt.go @@ -0,0 +1,44 @@ +// 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 ipv4 + +import "golang.org/x/net/internal/socket" + +// Sticky socket options +const ( + ssoTOS = iota // header field for unicast packet + ssoTTL // header field for unicast packet + ssoMulticastTTL // header field for multicast packet + ssoMulticastInterface // outbound interface for multicast packet + ssoMulticastLoopback // loopback for multicast packet + ssoReceiveTTL // header field on received packet + ssoReceiveDst // header field on received packet + ssoReceiveInterface // inbound interface on received packet + ssoPacketInfo // incbound or outbound packet path + ssoHeaderPrepend // ipv4 header prepend + ssoStripHeader // strip ipv4 header + ssoICMPFilter // icmp filter + ssoJoinGroup // any-source multicast + ssoLeaveGroup // any-source multicast + ssoJoinSourceGroup // source-specific multicast + ssoLeaveSourceGroup // source-specific multicast + ssoBlockSourceGroup // any-source or source-specific multicast + ssoUnblockSourceGroup // any-source or source-specific multicast + ssoAttachFilter // attach BPF for filtering inbound traffic +) + +// Sticky socket option value types +const ( + ssoTypeIPMreq = iota + 1 + ssoTypeIPMreqn + ssoTypeGroupReq + ssoTypeGroupSourceReq +) + +// A sockOpt represents a binding for sticky socket option. +type sockOpt struct { + socket.Option + typ int // hint for option value type; optional +} diff --git a/vendor/golang.org/x/net/ipv4/sockopt_posix.go b/vendor/golang.org/x/net/ipv4/sockopt_posix.go new file mode 100644 index 0000000..82e2c37 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sockopt_posix.go @@ -0,0 +1,71 @@ +// 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. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || windows || zos + +package ipv4 + +import ( + "net" + "unsafe" + + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) getMulticastInterface(c *socket.Conn) (*net.Interface, error) { + switch so.typ { + case ssoTypeIPMreqn: + return so.getIPMreqn(c) + default: + return so.getMulticastIf(c) + } +} + +func (so *sockOpt) setMulticastInterface(c *socket.Conn, ifi *net.Interface) error { + switch so.typ { + case ssoTypeIPMreqn: + return so.setIPMreqn(c, ifi, nil) + default: + return so.setMulticastIf(c, ifi) + } +} + +func (so *sockOpt) getICMPFilter(c *socket.Conn) (*ICMPFilter, error) { + b := make([]byte, so.Len) + n, err := so.Get(c, b) + if err != nil { + return nil, err + } + if n != sizeofICMPFilter { + return nil, errNotImplemented + } + return (*ICMPFilter)(unsafe.Pointer(&b[0])), nil +} + +func (so *sockOpt) setICMPFilter(c *socket.Conn, f *ICMPFilter) error { + b := (*[sizeofICMPFilter]byte)(unsafe.Pointer(f))[:sizeofICMPFilter] + return so.Set(c, b) +} + +func (so *sockOpt) setGroup(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + switch so.typ { + case ssoTypeIPMreq: + return so.setIPMreq(c, ifi, grp) + case ssoTypeIPMreqn: + return so.setIPMreqn(c, ifi, grp) + case ssoTypeGroupReq: + return so.setGroupReq(c, ifi, grp) + default: + return errNotImplemented + } +} + +func (so *sockOpt) setSourceGroup(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + return so.setGroupSourceReq(c, ifi, grp, src) +} + +func (so *sockOpt) setBPF(c *socket.Conn, f []bpf.RawInstruction) error { + return so.setAttachFilter(c, f) +} diff --git a/vendor/golang.org/x/net/ipv4/sockopt_stub.go b/vendor/golang.org/x/net/ipv4/sockopt_stub.go new file mode 100644 index 0000000..840108b --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sockopt_stub.go @@ -0,0 +1,42 @@ +// 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. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos + +package ipv4 + +import ( + "net" + + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) getMulticastInterface(c *socket.Conn) (*net.Interface, error) { + return nil, errNotImplemented +} + +func (so *sockOpt) setMulticastInterface(c *socket.Conn, ifi *net.Interface) error { + return errNotImplemented +} + +func (so *sockOpt) getICMPFilter(c *socket.Conn) (*ICMPFilter, error) { + return nil, errNotImplemented +} + +func (so *sockOpt) setICMPFilter(c *socket.Conn, f *ICMPFilter) error { + return errNotImplemented +} + +func (so *sockOpt) setGroup(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + return errNotImplemented +} + +func (so *sockOpt) setSourceGroup(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + return errNotImplemented +} + +func (so *sockOpt) setBPF(c *socket.Conn, f []bpf.RawInstruction) error { + return errNotImplemented +} diff --git a/vendor/golang.org/x/net/ipv4/sys_aix.go b/vendor/golang.org/x/net/ipv4/sys_aix.go new file mode 100644 index 0000000..9244a68 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_aix.go @@ -0,0 +1,43 @@ +// Copyright 2019 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. + +// Added for go1.11 compatibility +//go:build aix + +package ipv4 + +import ( + "net" + "syscall" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +// IP_RECVIF is defined on AIX but doesn't work. IP_RECVINTERFACE must be used instead. +const sockoptReceiveInterface = unix.IP_RECVINTERFACE + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {unix.IP_RECVTTL, 1, marshalTTL, parseTTL}, + ctlDst: {unix.IP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst}, + ctlInterface: {unix.IP_RECVINTERFACE, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface}, + } + + sockOpts = map[int]*sockOpt{ + ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_TOS, Len: 4}}, + ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_TTL, Len: 4}}, + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_TTL, Len: 1}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_IF, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_LOOP, Len: 1}}, + ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVTTL, Len: 4}}, + ssoReceiveDst: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVDSTADDR, Len: 4}}, + ssoReceiveInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVINTERFACE, Len: 4}}, + ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_HDRINCL, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_ADD_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_DROP_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + } +) diff --git a/vendor/golang.org/x/net/ipv4/sys_asmreq.go b/vendor/golang.org/x/net/ipv4/sys_asmreq.go new file mode 100644 index 0000000..645f254 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_asmreq.go @@ -0,0 +1,122 @@ +// 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. + +//go:build aix || darwin || dragonfly || freebsd || netbsd || openbsd || solaris || windows + +package ipv4 + +import ( + "errors" + "net" + "unsafe" + + "golang.org/x/net/internal/socket" +) + +var errNoSuchInterface = errors.New("no such interface") + +func (so *sockOpt) setIPMreq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + mreq := ipMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}} + if err := setIPMreqInterface(&mreq, ifi); err != nil { + return err + } + b := (*[sizeofIPMreq]byte)(unsafe.Pointer(&mreq))[:sizeofIPMreq] + return so.Set(c, b) +} + +func (so *sockOpt) getMulticastIf(c *socket.Conn) (*net.Interface, error) { + var b [4]byte + if _, err := so.Get(c, b[:]); err != nil { + return nil, err + } + ifi, err := netIP4ToInterface(net.IPv4(b[0], b[1], b[2], b[3])) + if err != nil { + return nil, err + } + return ifi, nil +} + +func (so *sockOpt) setMulticastIf(c *socket.Conn, ifi *net.Interface) error { + ip, err := netInterfaceToIP4(ifi) + if err != nil { + return err + } + var b [4]byte + copy(b[:], ip) + return so.Set(c, b[:]) +} + +func setIPMreqInterface(mreq *ipMreq, ifi *net.Interface) error { + if ifi == nil { + return nil + } + ifat, err := ifi.Addrs() + if err != nil { + return err + } + for _, ifa := range ifat { + switch ifa := ifa.(type) { + case *net.IPAddr: + if ip := ifa.IP.To4(); ip != nil { + copy(mreq.Interface[:], ip) + return nil + } + case *net.IPNet: + if ip := ifa.IP.To4(); ip != nil { + copy(mreq.Interface[:], ip) + return nil + } + } + } + return errNoSuchInterface +} + +func netIP4ToInterface(ip net.IP) (*net.Interface, error) { + ift, err := net.Interfaces() + if err != nil { + return nil, err + } + for _, ifi := range ift { + ifat, err := ifi.Addrs() + if err != nil { + return nil, err + } + for _, ifa := range ifat { + switch ifa := ifa.(type) { + case *net.IPAddr: + if ip.Equal(ifa.IP) { + return &ifi, nil + } + case *net.IPNet: + if ip.Equal(ifa.IP) { + return &ifi, nil + } + } + } + } + return nil, errNoSuchInterface +} + +func netInterfaceToIP4(ifi *net.Interface) (net.IP, error) { + if ifi == nil { + return net.IPv4zero.To4(), nil + } + ifat, err := ifi.Addrs() + if err != nil { + return nil, err + } + for _, ifa := range ifat { + switch ifa := ifa.(type) { + case *net.IPAddr: + if ip := ifa.IP.To4(); ip != nil { + return ip, nil + } + case *net.IPNet: + if ip := ifa.IP.To4(); ip != nil { + return ip, nil + } + } + } + return nil, errNoSuchInterface +} diff --git a/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go b/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go new file mode 100644 index 0000000..48cfb6d --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go @@ -0,0 +1,25 @@ +// 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. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !netbsd && !openbsd && !solaris && !windows + +package ipv4 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setIPMreq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + return errNotImplemented +} + +func (so *sockOpt) getMulticastIf(c *socket.Conn) (*net.Interface, error) { + return nil, errNotImplemented +} + +func (so *sockOpt) setMulticastIf(c *socket.Conn, ifi *net.Interface) error { + return errNotImplemented +} diff --git a/vendor/golang.org/x/net/ipv4/sys_asmreqn.go b/vendor/golang.org/x/net/ipv4/sys_asmreqn.go new file mode 100644 index 0000000..0b27b63 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_asmreqn.go @@ -0,0 +1,44 @@ +// 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. + +//go:build darwin || freebsd || linux + +package ipv4 + +import ( + "net" + "unsafe" + + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +func (so *sockOpt) getIPMreqn(c *socket.Conn) (*net.Interface, error) { + b := make([]byte, so.Len) + if _, err := so.Get(c, b); err != nil { + return nil, err + } + mreqn := (*unix.IPMreqn)(unsafe.Pointer(&b[0])) + if mreqn.Ifindex == 0 { + return nil, nil + } + ifi, err := net.InterfaceByIndex(int(mreqn.Ifindex)) + if err != nil { + return nil, err + } + return ifi, nil +} + +func (so *sockOpt) setIPMreqn(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + var mreqn unix.IPMreqn + if ifi != nil { + mreqn.Ifindex = int32(ifi.Index) + } + if grp != nil { + mreqn.Multiaddr = [4]byte{grp[0], grp[1], grp[2], grp[3]} + } + b := (*[unix.SizeofIPMreqn]byte)(unsafe.Pointer(&mreqn))[:unix.SizeofIPMreqn] + return so.Set(c, b) +} diff --git a/vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go b/vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go new file mode 100644 index 0000000..303a5e2 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go @@ -0,0 +1,21 @@ +// 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. + +//go:build !darwin && !freebsd && !linux + +package ipv4 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) getIPMreqn(c *socket.Conn) (*net.Interface, error) { + return nil, errNotImplemented +} + +func (so *sockOpt) setIPMreqn(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + return errNotImplemented +} diff --git a/vendor/golang.org/x/net/ipv4/sys_bpf.go b/vendor/golang.org/x/net/ipv4/sys_bpf.go new file mode 100644 index 0000000..1b4780d --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_bpf.go @@ -0,0 +1,24 @@ +// 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. + +//go:build linux + +package ipv4 + +import ( + "unsafe" + + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" + "golang.org/x/sys/unix" +) + +func (so *sockOpt) setAttachFilter(c *socket.Conn, f []bpf.RawInstruction) error { + prog := unix.SockFprog{ + Len: uint16(len(f)), + Filter: (*unix.SockFilter)(unsafe.Pointer(&f[0])), + } + b := (*[unix.SizeofSockFprog]byte)(unsafe.Pointer(&prog))[:unix.SizeofSockFprog] + return so.Set(c, b) +} diff --git a/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go b/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go new file mode 100644 index 0000000..b1f779b --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go @@ -0,0 +1,16 @@ +// 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. + +//go:build !linux + +package ipv4 + +import ( + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setAttachFilter(c *socket.Conn, f []bpf.RawInstruction) error { + return errNotImplemented +} diff --git a/vendor/golang.org/x/net/ipv4/sys_bsd.go b/vendor/golang.org/x/net/ipv4/sys_bsd.go new file mode 100644 index 0000000..b7b032d --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_bsd.go @@ -0,0 +1,41 @@ +// 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. + +//go:build netbsd || openbsd + +package ipv4 + +import ( + "net" + "syscall" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +const sockoptReceiveInterface = unix.IP_RECVIF + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {unix.IP_RECVTTL, 1, marshalTTL, parseTTL}, + ctlDst: {unix.IP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst}, + ctlInterface: {unix.IP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface}, + } + + sockOpts = map[int]*sockOpt{ + ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_TOS, Len: 4}}, + ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_TTL, Len: 4}}, + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_TTL, Len: 1}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_IF, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_LOOP, Len: 1}}, + ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVTTL, Len: 4}}, + ssoReceiveDst: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVDSTADDR, Len: 4}}, + ssoReceiveInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVIF, Len: 4}}, + ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_HDRINCL, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_ADD_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_DROP_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + } +) diff --git a/vendor/golang.org/x/net/ipv4/sys_darwin.go b/vendor/golang.org/x/net/ipv4/sys_darwin.go new file mode 100644 index 0000000..cac6f3c --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_darwin.go @@ -0,0 +1,69 @@ +// 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 ipv4 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +const sockoptReceiveInterface = unix.IP_RECVIF + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {unix.IP_RECVTTL, 1, marshalTTL, parseTTL}, + ctlDst: {unix.IP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst}, + ctlInterface: {unix.IP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface}, + ctlPacketInfo: {unix.IP_PKTINFO, sizeofInetPktinfo, marshalPacketInfo, parsePacketInfo}, + } + + sockOpts = map[int]*sockOpt{ + ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_TOS, Len: 4}}, + ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_TTL, Len: 4}}, + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_TTL, Len: 1}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_IF, Len: unix.SizeofIPMreqn}, typ: ssoTypeIPMreqn}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVTTL, Len: 4}}, + ssoReceiveDst: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVDSTADDR, Len: 4}}, + ssoReceiveInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVIF, Len: 4}}, + ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_HDRINCL, Len: 4}}, + ssoStripHeader: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_STRIPHDR, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoPacketInfo: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVPKTINFO, Len: 4}}, + } +) + +func (pi *inetPktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) + sa = (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 132)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv4/sys_dragonfly.go b/vendor/golang.org/x/net/ipv4/sys_dragonfly.go new file mode 100644 index 0000000..0620d0e --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_dragonfly.go @@ -0,0 +1,39 @@ +// 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 ( + "net" + "syscall" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +const sockoptReceiveInterface = unix.IP_RECVIF + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {unix.IP_RECVTTL, 1, marshalTTL, parseTTL}, + ctlDst: {unix.IP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst}, + ctlInterface: {unix.IP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface}, + } + + sockOpts = map[int]*sockOpt{ + ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_TOS, Len: 4}}, + ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_TTL, Len: 4}}, + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_TTL, Len: 1}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_IF, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVTTL, Len: 4}}, + ssoReceiveDst: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVDSTADDR, Len: 4}}, + ssoReceiveInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVIF, Len: 4}}, + ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_HDRINCL, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_ADD_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_DROP_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + } +) diff --git a/vendor/golang.org/x/net/ipv4/sys_freebsd.go b/vendor/golang.org/x/net/ipv4/sys_freebsd.go new file mode 100644 index 0000000..8961228 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_freebsd.go @@ -0,0 +1,80 @@ +// 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 ipv4 + +import ( + "net" + "runtime" + "strings" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +const sockoptReceiveInterface = unix.IP_RECVIF + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {unix.IP_RECVTTL, 1, marshalTTL, parseTTL}, + ctlDst: {unix.IP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst}, + ctlInterface: {unix.IP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface}, + } + + sockOpts = map[int]*sockOpt{ + ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_TOS, Len: 4}}, + ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_TTL, Len: 4}}, + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_TTL, Len: 1}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_IF, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVTTL, Len: 4}}, + ssoReceiveDst: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVDSTADDR, Len: 4}}, + ssoReceiveInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVIF, Len: 4}}, + ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_HDRINCL, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + } +) + +func init() { + freebsdVersion, _ = syscall.SysctlUint32("kern.osreldate") + if freebsdVersion >= 1000000 { + sockOpts[ssoMulticastInterface] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_IF, Len: unix.SizeofIPMreqn}, typ: ssoTypeIPMreqn} + } + if runtime.GOOS == "freebsd" && runtime.GOARCH == "386" { + archs, _ := syscall.Sysctl("kern.supported_archs") + for _, s := range strings.Fields(archs) { + if s == "amd64" { + compatFreeBSD32 = true + break + } + } + } +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(&gr.Group)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(&gsr.Group)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) + sa = (*sockaddrInet)(unsafe.Pointer(&gsr.Source)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv4/sys_linux.go b/vendor/golang.org/x/net/ipv4/sys_linux.go new file mode 100644 index 0000000..4588a5f --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_linux.go @@ -0,0 +1,61 @@ +// 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 ipv4 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {unix.IP_TTL, 1, marshalTTL, parseTTL}, + ctlPacketInfo: {unix.IP_PKTINFO, sizeofInetPktinfo, marshalPacketInfo, parsePacketInfo}, + } + + sockOpts = map[int]*sockOpt{ + ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_TOS, Len: 4}}, + ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_TTL, Len: 4}}, + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_TTL, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_IF, Len: unix.SizeofIPMreqn}, typ: ssoTypeIPMreqn}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVTTL, Len: 4}}, + ssoPacketInfo: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_PKTINFO, Len: 4}}, + ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_HDRINCL, Len: 4}}, + ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolReserved, Name: unix.ICMP_FILTER, Len: sizeofICMPFilter}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoAttachFilter: {Option: socket.Option{Level: unix.SOL_SOCKET, Name: unix.SO_ATTACH_FILTER, Len: unix.SizeofSockFprog}}, + } +) + +func (pi *inetPktinfo) setIfindex(i int) { + pi.Ifindex = int32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(&gr.Group)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(&gsr.Group)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) + sa = (*sockaddrInet)(unsafe.Pointer(&gsr.Source)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv4/sys_solaris.go b/vendor/golang.org/x/net/ipv4/sys_solaris.go new file mode 100644 index 0000000..0bb9f3e --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_solaris.go @@ -0,0 +1,61 @@ +// 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. + +package ipv4 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +const sockoptReceiveInterface = unix.IP_RECVIF + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {unix.IP_RECVTTL, 4, marshalTTL, parseTTL}, + ctlPacketInfo: {unix.IP_PKTINFO, sizeofInetPktinfo, marshalPacketInfo, parsePacketInfo}, + } + + sockOpts = map[int]sockOpt{ + ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_TOS, Len: 4}}, + ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_TTL, Len: 4}}, + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_TTL, Len: 1}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_IF, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_LOOP, Len: 1}}, + ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVTTL, Len: 4}}, + ssoPacketInfo: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVPKTINFO, Len: 4}}, + ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_HDRINCL, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + } +) + +func (pi *inetPktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) + sa = (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 260)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv4/sys_ssmreq.go b/vendor/golang.org/x/net/ipv4/sys_ssmreq.go new file mode 100644 index 0000000..a295e15 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_ssmreq.go @@ -0,0 +1,52 @@ +// 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. + +//go:build darwin || freebsd || linux || solaris + +package ipv4 + +import ( + "net" + "unsafe" + + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setGroupReq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + var gr groupReq + if ifi != nil { + gr.Interface = uint32(ifi.Index) + } + gr.setGroup(grp) + var b []byte + if compatFreeBSD32 { + var d [sizeofGroupReq + 4]byte + s := (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr)) + copy(d[:4], s[:4]) + copy(d[8:], s[4:]) + b = d[:] + } else { + b = (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr))[:sizeofGroupReq] + } + return so.Set(c, b) +} + +func (so *sockOpt) setGroupSourceReq(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + var gsr groupSourceReq + if ifi != nil { + gsr.Interface = uint32(ifi.Index) + } + gsr.setSourceGroup(grp, src) + var b []byte + if compatFreeBSD32 { + var d [sizeofGroupSourceReq + 4]byte + s := (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr)) + copy(d[:4], s[:4]) + copy(d[8:], s[4:]) + b = d[:] + } else { + b = (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))[:sizeofGroupSourceReq] + } + return so.Set(c, b) +} diff --git a/vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go b/vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go new file mode 100644 index 0000000..74bd454 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go @@ -0,0 +1,21 @@ +// 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. + +//go:build !darwin && !freebsd && !linux && !solaris + +package ipv4 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setGroupReq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + return errNotImplemented +} + +func (so *sockOpt) setGroupSourceReq(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + return errNotImplemented +} diff --git a/vendor/golang.org/x/net/ipv4/sys_stub.go b/vendor/golang.org/x/net/ipv4/sys_stub.go new file mode 100644 index 0000000..20af407 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_stub.go @@ -0,0 +1,13 @@ +// 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. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos + +package ipv4 + +var ( + ctlOpts = [ctlMax]ctlOpt{} + + sockOpts = map[int]*sockOpt{} +) diff --git a/vendor/golang.org/x/net/ipv4/sys_windows.go b/vendor/golang.org/x/net/ipv4/sys_windows.go new file mode 100644 index 0000000..c5e9506 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_windows.go @@ -0,0 +1,44 @@ +// 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 ipv4 + +import ( + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/windows" +) + +const ( + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc +) + +type ipMreq struct { + Multiaddr [4]byte + Interface [4]byte +} + +type ipMreqSource struct { + Multiaddr [4]byte + Sourceaddr [4]byte + Interface [4]byte +} + +// See http://msdn.microsoft.com/en-us/library/windows/desktop/ms738586(v=vs.85).aspx +var ( + ctlOpts = [ctlMax]ctlOpt{} + + sockOpts = map[int]*sockOpt{ + ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_TOS, Len: 4}}, + ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_TTL, Len: 4}}, + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_MULTICAST_TTL, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_MULTICAST_IF, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_MULTICAST_LOOP, Len: 4}}, + ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_HDRINCL, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_ADD_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_DROP_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + } +) diff --git a/vendor/golang.org/x/net/ipv4/sys_zos.go b/vendor/golang.org/x/net/ipv4/sys_zos.go new file mode 100644 index 0000000..be20640 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/sys_zos.go @@ -0,0 +1,57 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlPacketInfo: {unix.IP_PKTINFO, sizeofInetPktinfo, marshalPacketInfo, parsePacketInfo}, + } + + sockOpts = map[int]*sockOpt{ + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_TTL, Len: 1}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_IF, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_MULTICAST_LOOP, Len: 1}}, + ssoPacketInfo: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.IP_RECVPKTINFO, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: unix.MCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + } +) + +func (pi *inetPktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet4)(unsafe.Pointer(&gr.Group)) + sa.Family = syscall.AF_INET + sa.Len = sizeofSockaddrInet4 + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet4)(unsafe.Pointer(&gsr.Group)) + sa.Family = syscall.AF_INET + sa.Len = sizeofSockaddrInet4 + copy(sa.Addr[:], grp) + sa = (*sockaddrInet4)(unsafe.Pointer(&gsr.Source)) + sa.Family = syscall.AF_INET + sa.Len = sizeofSockaddrInet4 + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_aix_ppc64.go b/vendor/golang.org/x/net/ipv4/zsys_aix_ppc64.go new file mode 100644 index 0000000..dd45402 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_aix_ppc64.go @@ -0,0 +1,16 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_aix.go + +// Added for go1.11 compatibility +//go:build aix + +package ipv4 + +const ( + sizeofIPMreq = 0x8 +) + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_darwin.go b/vendor/golang.org/x/net/ipv4/zsys_darwin.go new file mode 100644 index 0000000..6c1b705 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_darwin.go @@ -0,0 +1,59 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_darwin.go + +package ipv4 + +const ( + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type inetPktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [128]byte +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [128]byte + Pad_cgo_1 [128]byte +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go b/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go new file mode 100644 index 0000000..2155df1 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go @@ -0,0 +1,13 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_dragonfly.go + +package ipv4 + +const ( + sizeofIPMreq = 0x8 +) + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go b/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go new file mode 100644 index 0000000..ae40482 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go @@ -0,0 +1,52 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package ipv4 + +const ( + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group sockaddrStorage + Source sockaddrStorage +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go b/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go new file mode 100644 index 0000000..9018186 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go @@ -0,0 +1,54 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package ipv4 + +const ( + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage + Source sockaddrStorage +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go b/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go new file mode 100644 index 0000000..9018186 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go @@ -0,0 +1,54 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package ipv4 + +const ( + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage + Source sockaddrStorage +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm64.go b/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm64.go new file mode 100644 index 0000000..0feb9a7 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm64.go @@ -0,0 +1,52 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package ipv4 + +const ( + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]uint8 + X__ss_align int64 + X__ss_pad2 [112]uint8 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group sockaddrStorage + Source sockaddrStorage +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_freebsd_riscv64.go b/vendor/golang.org/x/net/ipv4/zsys_freebsd_riscv64.go new file mode 100644 index 0000000..0feb9a7 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_freebsd_riscv64.go @@ -0,0 +1,52 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package ipv4 + +const ( + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]uint8 + X__ss_align int64 + X__ss_pad2 [112]uint8 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group sockaddrStorage + Source sockaddrStorage +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_386.go b/vendor/golang.org/x/net/ipv4/zsys_linux_386.go new file mode 100644 index 0000000..d510357 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_386.go @@ -0,0 +1,72 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go new file mode 100644 index 0000000..eb10cc7 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go @@ -0,0 +1,74 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go b/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go new file mode 100644 index 0000000..d510357 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go @@ -0,0 +1,72 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go new file mode 100644 index 0000000..eb10cc7 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go @@ -0,0 +1,74 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_loong64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_loong64.go new file mode 100644 index 0000000..54f9e13 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_loong64.go @@ -0,0 +1,76 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +//go:build loong64 + +package ipv4 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go new file mode 100644 index 0000000..d510357 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go @@ -0,0 +1,72 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go new file mode 100644 index 0000000..eb10cc7 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go @@ -0,0 +1,74 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go new file mode 100644 index 0000000..eb10cc7 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go @@ -0,0 +1,74 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go new file mode 100644 index 0000000..d510357 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go @@ -0,0 +1,72 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go new file mode 100644 index 0000000..29202e4 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go @@ -0,0 +1,72 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]uint8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go new file mode 100644 index 0000000..eb10cc7 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go @@ -0,0 +1,74 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go new file mode 100644 index 0000000..eb10cc7 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go @@ -0,0 +1,74 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_riscv64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_riscv64.go new file mode 100644 index 0000000..78374a5 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_riscv64.go @@ -0,0 +1,76 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +//go:build riscv64 + +package ipv4 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go b/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go new file mode 100644 index 0000000..eb10cc7 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go @@ -0,0 +1,74 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_netbsd.go b/vendor/golang.org/x/net/ipv4/zsys_netbsd.go new file mode 100644 index 0000000..a2ef2f6 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_netbsd.go @@ -0,0 +1,13 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_netbsd.go + +package ipv4 + +const ( + sizeofIPMreq = 0x8 +) + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_openbsd.go b/vendor/golang.org/x/net/ipv4/zsys_openbsd.go new file mode 100644 index 0000000..b293a33 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_openbsd.go @@ -0,0 +1,13 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_openbsd.go + +package ipv4 + +const ( + sizeofIPMreq = 0x8 +) + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_solaris.go b/vendor/golang.org/x/net/ipv4/zsys_solaris.go new file mode 100644 index 0000000..e1a961b --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_solaris.go @@ -0,0 +1,57 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_solaris.go + +package ipv4 + +const ( + sizeofSockaddrStorage = 0x100 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x104 + sizeofGroupSourceReq = 0x204 +) + +type sockaddrStorage struct { + Family uint16 + X_ss_pad1 [6]int8 + X_ss_align float64 + X_ss_pad2 [240]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type inetPktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [256]byte +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [256]byte + Pad_cgo_1 [256]byte +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_zos_s390x.go b/vendor/golang.org/x/net/ipv4/zsys_zos_s390x.go new file mode 100644 index 0000000..692abf6 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_zos_s390x.go @@ -0,0 +1,56 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Hand edited based on zerrors_zos_s390x.go +// TODO(Bill O'Farrell): auto-generate. + +package ipv4 + +const ( + sizeofIPMreq = 8 + sizeofSockaddrInet4 = 16 + sizeofSockaddrStorage = 128 + sizeofGroupReq = 136 + sizeofGroupSourceReq = 264 + sizeofInetPktinfo = 8 +) + +type sockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte + Zero [8]uint8 +} + +type inetPktinfo struct { + Addr [4]byte + Ifindex uint32 +} + +type sockaddrStorage struct { + Len uint8 + Family byte + ss_pad1 [6]byte + ss_align int64 + ss_pad2 [112]byte +} + +type groupReq struct { + Interface uint32 + reserved uint32 + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + reserved uint32 + Group sockaddrStorage + Source sockaddrStorage +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} diff --git a/vendor/golang.org/x/net/ipv6/batch.go b/vendor/golang.org/x/net/ipv6/batch.go new file mode 100644 index 0000000..2ccb984 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/batch.go @@ -0,0 +1,116 @@ +// 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 ( + "net" + "runtime" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the ReadBatch and WriteBatch methods of +// PacketConn are not implemented. + +// A Message represents an IO message. +// +// type Message struct { +// Buffers [][]byte +// OOB []byte +// Addr net.Addr +// N int +// NN int +// Flags int +// } +// +// The Buffers fields represents a list of contiguous buffers, which +// can be used for vectored IO, for example, putting a header and a +// payload in each slice. +// When writing, the Buffers field must contain at least one byte to +// write. +// When reading, the Buffers field will always contain a byte to read. +// +// The OOB field contains protocol-specific control or miscellaneous +// ancillary data known as out-of-band data. +// It can be nil when not required. +// +// The Addr field specifies a destination address when writing. +// It can be nil when the underlying protocol of the endpoint uses +// connection-oriented communication. +// After a successful read, it may contain the source address on the +// received packet. +// +// The N field indicates the number of bytes read or written from/to +// Buffers. +// +// The NN field indicates the number of bytes read or written from/to +// OOB. +// +// The Flags field contains protocol-specific information on the +// received message. +type Message = socket.Message + +// ReadBatch reads a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_PEEK. +// +// On a successful read it returns the number of messages received, up +// to len(ms). +// +// On Linux, a batch read will be optimized. +// On other platforms, this method will read only a single message. +func (c *payloadHandler) ReadBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + switch runtime.GOOS { + case "linux": + n, err := c.RecvMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.RecvMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + } +} + +// WriteBatch writes a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_DONTROUTE. +// +// It returns the number of messages written on a successful write. +// +// On Linux, a batch write will be optimized. +// On other platforms, this method will write only a single message. +func (c *payloadHandler) WriteBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + switch runtime.GOOS { + case "linux": + n, err := c.SendMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.SendMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + } +} diff --git a/vendor/golang.org/x/net/ipv6/control.go b/vendor/golang.org/x/net/ipv6/control.go new file mode 100644 index 0000000..2da6444 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control.go @@ -0,0 +1,187 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "fmt" + "net" + "sync" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +// Note that RFC 3542 obsoletes RFC 2292 but OS X Snow Leopard and the +// former still support RFC 2292 only. Please be aware that almost +// all protocol implementations prohibit using a combination of RFC +// 2292 and RFC 3542 for some practical reasons. + +type rawOpt struct { + sync.RWMutex + cflags ControlFlags +} + +func (c *rawOpt) set(f ControlFlags) { c.cflags |= f } +func (c *rawOpt) clear(f ControlFlags) { c.cflags &^= f } +func (c *rawOpt) isset(f ControlFlags) bool { return c.cflags&f != 0 } + +// A ControlFlags represents per packet basis IP-level socket option +// control flags. +type ControlFlags uint + +const ( + FlagTrafficClass ControlFlags = 1 << iota // pass the traffic class on the received packet + FlagHopLimit // pass the hop limit on the received packet + FlagSrc // pass the source address on the received packet + FlagDst // pass the destination address on the received packet + FlagInterface // pass the interface index on the received packet + FlagPathMTU // pass the path MTU on the received packet path +) + +const flagPacketInfo = FlagDst | FlagInterface + +// A ControlMessage represents per packet basis IP-level socket +// options. +type ControlMessage struct { + // Receiving socket options: SetControlMessage allows to + // receive the options from the protocol stack using ReadFrom + // method of PacketConn. + // + // Specifying socket options: ControlMessage for WriteTo + // method of PacketConn allows to send the options to the + // protocol stack. + // + TrafficClass int // traffic class, must be 1 <= value <= 255 when specifying + HopLimit int // hop limit, must be 1 <= value <= 255 when specifying + Src net.IP // source address, specifying only + Dst net.IP // destination address, receiving only + IfIndex int // interface index, must be 1 <= value when specifying + NextHop net.IP // next hop address, specifying only + MTU int // path MTU, receiving only +} + +func (cm *ControlMessage) String() string { + if cm == nil { + return "" + } + return fmt.Sprintf("tclass=%#x hoplim=%d src=%v dst=%v ifindex=%d nexthop=%v mtu=%d", cm.TrafficClass, cm.HopLimit, cm.Src, cm.Dst, cm.IfIndex, cm.NextHop, cm.MTU) +} + +// Marshal returns the binary encoding of cm. +func (cm *ControlMessage) Marshal() []byte { + if cm == nil { + return nil + } + var l int + tclass := false + if ctlOpts[ctlTrafficClass].name > 0 && cm.TrafficClass > 0 { + tclass = true + l += socket.ControlMessageSpace(ctlOpts[ctlTrafficClass].length) + } + hoplimit := false + if ctlOpts[ctlHopLimit].name > 0 && cm.HopLimit > 0 { + hoplimit = true + l += socket.ControlMessageSpace(ctlOpts[ctlHopLimit].length) + } + pktinfo := false + if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To16() != nil && cm.Src.To4() == nil || cm.IfIndex > 0) { + pktinfo = true + l += socket.ControlMessageSpace(ctlOpts[ctlPacketInfo].length) + } + nexthop := false + if ctlOpts[ctlNextHop].name > 0 && cm.NextHop.To16() != nil && cm.NextHop.To4() == nil { + nexthop = true + l += socket.ControlMessageSpace(ctlOpts[ctlNextHop].length) + } + var b []byte + if l > 0 { + b = make([]byte, l) + bb := b + if tclass { + bb = ctlOpts[ctlTrafficClass].marshal(bb, cm) + } + if hoplimit { + bb = ctlOpts[ctlHopLimit].marshal(bb, cm) + } + if pktinfo { + bb = ctlOpts[ctlPacketInfo].marshal(bb, cm) + } + if nexthop { + bb = ctlOpts[ctlNextHop].marshal(bb, cm) + } + } + return b +} + +// Parse parses b as a control message and stores the result in cm. +func (cm *ControlMessage) Parse(b []byte) error { + ms, err := socket.ControlMessage(b).Parse() + if err != nil { + return err + } + for _, m := range ms { + lvl, typ, l, err := m.ParseHeader() + if err != nil { + return err + } + if lvl != iana.ProtocolIPv6 { + continue + } + switch { + case typ == ctlOpts[ctlTrafficClass].name && l >= ctlOpts[ctlTrafficClass].length: + ctlOpts[ctlTrafficClass].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlHopLimit].name && l >= ctlOpts[ctlHopLimit].length: + ctlOpts[ctlHopLimit].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlPacketInfo].name && l >= ctlOpts[ctlPacketInfo].length: + ctlOpts[ctlPacketInfo].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlPathMTU].name && l >= ctlOpts[ctlPathMTU].length: + ctlOpts[ctlPathMTU].parse(cm, m.Data(l)) + } + } + return nil +} + +// NewControlMessage returns a new control message. +// +// The returned message is large enough for options specified by cf. +func NewControlMessage(cf ControlFlags) []byte { + opt := rawOpt{cflags: cf} + var l int + if opt.isset(FlagTrafficClass) && ctlOpts[ctlTrafficClass].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlTrafficClass].length) + } + if opt.isset(FlagHopLimit) && ctlOpts[ctlHopLimit].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlHopLimit].length) + } + if opt.isset(flagPacketInfo) && ctlOpts[ctlPacketInfo].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlPacketInfo].length) + } + if opt.isset(FlagPathMTU) && ctlOpts[ctlPathMTU].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlPathMTU].length) + } + var b []byte + if l > 0 { + b = make([]byte, l) + } + return b +} + +// Ancillary data socket options +const ( + ctlTrafficClass = iota // header field + ctlHopLimit // header field + ctlPacketInfo // inbound or outbound packet path + ctlNextHop // nexthop + ctlPathMTU // path mtu + ctlMax +) + +// A ctlOpt represents a binding for ancillary data socket option. +type ctlOpt struct { + name int // option name, must be equal or greater than 1 + length int // option length + marshal func([]byte, *ControlMessage) []byte + parse func(*ControlMessage, []byte) +} diff --git a/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go b/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go new file mode 100644 index 0000000..a8f04e7 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go @@ -0,0 +1,50 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build darwin + +package ipv6 + +import ( + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +func marshal2292HopLimit(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, unix.IPV6_2292HOPLIMIT, 4) + if cm != nil { + socket.NativeEndian.PutUint32(m.Data(4), uint32(cm.HopLimit)) + } + return m.Next(4) +} + +func marshal2292PacketInfo(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, unix.IPV6_2292PKTINFO, sizeofInet6Pktinfo) + if cm != nil { + pi := (*inet6Pktinfo)(unsafe.Pointer(&m.Data(sizeofInet6Pktinfo)[0])) + if ip := cm.Src.To16(); ip != nil && ip.To4() == nil { + copy(pi.Addr[:], ip) + } + if cm.IfIndex > 0 { + pi.setIfindex(cm.IfIndex) + } + } + return m.Next(sizeofInet6Pktinfo) +} + +func marshal2292NextHop(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, unix.IPV6_2292NEXTHOP, sizeofSockaddrInet6) + if cm != nil { + sa := (*sockaddrInet6)(unsafe.Pointer(&m.Data(sizeofSockaddrInet6)[0])) + sa.setSockaddr(cm.NextHop, cm.IfIndex) + } + return m.Next(sizeofSockaddrInet6) +} diff --git a/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go b/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go new file mode 100644 index 0000000..51fbbb1 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go @@ -0,0 +1,96 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos + +package ipv6 + +import ( + "net" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +func marshalTrafficClass(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, unix.IPV6_TCLASS, 4) + if cm != nil { + socket.NativeEndian.PutUint32(m.Data(4), uint32(cm.TrafficClass)) + } + return m.Next(4) +} + +func parseTrafficClass(cm *ControlMessage, b []byte) { + cm.TrafficClass = int(socket.NativeEndian.Uint32(b[:4])) +} + +func marshalHopLimit(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, unix.IPV6_HOPLIMIT, 4) + if cm != nil { + socket.NativeEndian.PutUint32(m.Data(4), uint32(cm.HopLimit)) + } + return m.Next(4) +} + +func parseHopLimit(cm *ControlMessage, b []byte) { + cm.HopLimit = int(socket.NativeEndian.Uint32(b[:4])) +} + +func marshalPacketInfo(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, unix.IPV6_PKTINFO, sizeofInet6Pktinfo) + if cm != nil { + pi := (*inet6Pktinfo)(unsafe.Pointer(&m.Data(sizeofInet6Pktinfo)[0])) + if ip := cm.Src.To16(); ip != nil && ip.To4() == nil { + copy(pi.Addr[:], ip) + } + if cm.IfIndex > 0 { + pi.setIfindex(cm.IfIndex) + } + } + return m.Next(sizeofInet6Pktinfo) +} + +func parsePacketInfo(cm *ControlMessage, b []byte) { + pi := (*inet6Pktinfo)(unsafe.Pointer(&b[0])) + if len(cm.Dst) < net.IPv6len { + cm.Dst = make(net.IP, net.IPv6len) + } + copy(cm.Dst, pi.Addr[:]) + cm.IfIndex = int(pi.Ifindex) +} + +func marshalNextHop(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, unix.IPV6_NEXTHOP, sizeofSockaddrInet6) + if cm != nil { + sa := (*sockaddrInet6)(unsafe.Pointer(&m.Data(sizeofSockaddrInet6)[0])) + sa.setSockaddr(cm.NextHop, cm.IfIndex) + } + return m.Next(sizeofSockaddrInet6) +} + +func parseNextHop(cm *ControlMessage, b []byte) { +} + +func marshalPathMTU(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, unix.IPV6_PATHMTU, sizeofIPv6Mtuinfo) + return m.Next(sizeofIPv6Mtuinfo) +} + +func parsePathMTU(cm *ControlMessage, b []byte) { + mi := (*ipv6Mtuinfo)(unsafe.Pointer(&b[0])) + if len(cm.Dst) < net.IPv6len { + cm.Dst = make(net.IP, net.IPv6len) + } + copy(cm.Dst, mi.Addr.Addr[:]) + cm.IfIndex = int(mi.Addr.Scope_id) + cm.MTU = int(mi.Mtu) +} diff --git a/vendor/golang.org/x/net/ipv6/control_stub.go b/vendor/golang.org/x/net/ipv6/control_stub.go new file mode 100644 index 0000000..eb28ce7 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control_stub.go @@ -0,0 +1,13 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos + +package ipv6 + +import "golang.org/x/net/internal/socket" + +func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { + return errNotImplemented +} diff --git a/vendor/golang.org/x/net/ipv6/control_unix.go b/vendor/golang.org/x/net/ipv6/control_unix.go new file mode 100644 index 0000000..9c73b86 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control_unix.go @@ -0,0 +1,55 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos + +package ipv6 + +import "golang.org/x/net/internal/socket" + +func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { + opt.Lock() + defer opt.Unlock() + if so, ok := sockOpts[ssoReceiveTrafficClass]; ok && cf&FlagTrafficClass != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagTrafficClass) + } else { + opt.clear(FlagTrafficClass) + } + } + if so, ok := sockOpts[ssoReceiveHopLimit]; ok && cf&FlagHopLimit != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagHopLimit) + } else { + opt.clear(FlagHopLimit) + } + } + if so, ok := sockOpts[ssoReceivePacketInfo]; ok && cf&flagPacketInfo != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(cf & flagPacketInfo) + } else { + opt.clear(cf & flagPacketInfo) + } + } + if so, ok := sockOpts[ssoReceivePathMTU]; ok && cf&FlagPathMTU != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagPathMTU) + } else { + opt.clear(FlagPathMTU) + } + } + return nil +} diff --git a/vendor/golang.org/x/net/ipv6/control_windows.go b/vendor/golang.org/x/net/ipv6/control_windows.go new file mode 100644 index 0000000..8882d81 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control_windows.go @@ -0,0 +1,12 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import "golang.org/x/net/internal/socket" + +func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { + // TODO(mikio): implement this + return errNotImplemented +} diff --git a/vendor/golang.org/x/net/ipv6/dgramopt.go b/vendor/golang.org/x/net/ipv6/dgramopt.go new file mode 100644 index 0000000..846f0e1 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/dgramopt.go @@ -0,0 +1,301 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + + "golang.org/x/net/bpf" +) + +// MulticastHopLimit returns the hop limit field value for outgoing +// multicast packets. +func (c *dgramOpt) MulticastHopLimit() (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + so, ok := sockOpts[ssoMulticastHopLimit] + if !ok { + return 0, errNotImplemented + } + return so.GetInt(c.Conn) +} + +// SetMulticastHopLimit sets the hop limit field value for future +// outgoing multicast packets. +func (c *dgramOpt) SetMulticastHopLimit(hoplim int) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoMulticastHopLimit] + if !ok { + return errNotImplemented + } + return so.SetInt(c.Conn, hoplim) +} + +// MulticastInterface returns the default interface for multicast +// packet transmissions. +func (c *dgramOpt) MulticastInterface() (*net.Interface, error) { + if !c.ok() { + return nil, errInvalidConn + } + so, ok := sockOpts[ssoMulticastInterface] + if !ok { + return nil, errNotImplemented + } + return so.getMulticastInterface(c.Conn) +} + +// SetMulticastInterface sets the default interface for future +// multicast packet transmissions. +func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoMulticastInterface] + if !ok { + return errNotImplemented + } + return so.setMulticastInterface(c.Conn, ifi) +} + +// MulticastLoopback reports whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) MulticastLoopback() (bool, error) { + if !c.ok() { + return false, errInvalidConn + } + so, ok := sockOpts[ssoMulticastLoopback] + if !ok { + return false, errNotImplemented + } + on, err := so.GetInt(c.Conn) + if err != nil { + return false, err + } + return on == 1, nil +} + +// SetMulticastLoopback sets whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) SetMulticastLoopback(on bool) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoMulticastLoopback] + if !ok { + return errNotImplemented + } + return so.SetInt(c.Conn, boolint(on)) +} + +// JoinGroup joins the group address group on the interface ifi. +// By default all sources that can cast data to group are accepted. +// It's possible to mute and unmute data transmission from a specific +// source by using ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup. +// JoinGroup uses the system assigned multicast interface when ifi is +// nil, although this is not recommended because the assignment +// depends on platforms and sometimes it might require routing +// configuration. +func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoJoinGroup] + if !ok { + return errNotImplemented + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + return so.setGroup(c.Conn, ifi, grp) +} + +// LeaveGroup leaves the group address group on the interface ifi +// regardless of whether the group is any-source group or +// source-specific group. +func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoLeaveGroup] + if !ok { + return errNotImplemented + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + return so.setGroup(c.Conn, ifi, grp) +} + +// JoinSourceSpecificGroup joins the source-specific group comprising +// group and source on the interface ifi. +// JoinSourceSpecificGroup uses the system assigned multicast +// interface when ifi is nil, although this is not recommended because +// the assignment depends on platforms and sometimes it might require +// routing configuration. +func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoJoinSourceGroup] + if !ok { + return errNotImplemented + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP16(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// LeaveSourceSpecificGroup leaves the source-specific group on the +// interface ifi. +func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoLeaveSourceGroup] + if !ok { + return errNotImplemented + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP16(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// ExcludeSourceSpecificGroup excludes the source-specific group from +// the already joined any-source groups by JoinGroup on the interface +// ifi. +func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoBlockSourceGroup] + if !ok { + return errNotImplemented + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP16(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// IncludeSourceSpecificGroup includes the excluded source-specific +// group by ExcludeSourceSpecificGroup again on the interface ifi. +func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoUnblockSourceGroup] + if !ok { + return errNotImplemented + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP16(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// Checksum reports whether the kernel will compute, store or verify a +// 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) { + if !c.ok() { + return false, 0, errInvalidConn + } + so, ok := sockOpts[ssoChecksum] + if !ok { + return false, 0, errNotImplemented + } + offset, err = so.GetInt(c.Conn) + if err != nil { + return false, 0, err + } + if offset < 0 { + return false, 0, nil + } + return true, offset, nil +} + +// SetChecksum enables the kernel checksum processing. If on is true, +// 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 { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoChecksum] + if !ok { + return errNotImplemented + } + if !on { + offset = -1 + } + return so.SetInt(c.Conn, offset) +} + +// ICMPFilter returns an ICMP filter. +func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) { + if !c.ok() { + return nil, errInvalidConn + } + so, ok := sockOpts[ssoICMPFilter] + if !ok { + return nil, errNotImplemented + } + return so.getICMPFilter(c.Conn) +} + +// SetICMPFilter deploys the ICMP filter. +func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoICMPFilter] + if !ok { + return errNotImplemented + } + return so.setICMPFilter(c.Conn, f) +} + +// SetBPF attaches a BPF program to the connection. +// +// Only supported on Linux. +func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoAttachFilter] + if !ok { + return errNotImplemented + } + return so.setBPF(c.Conn, filter) +} diff --git a/vendor/golang.org/x/net/ipv6/doc.go b/vendor/golang.org/x/net/ipv6/doc.go new file mode 100644 index 0000000..2148b81 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/doc.go @@ -0,0 +1,239 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ipv6 implements IP-level socket options for the Internet +// Protocol version 6. +// +// The package provides IP-level socket options that allow +// manipulation of IPv6 facilities. +// +// The IPv6 protocol is defined in RFC 8200. +// Socket interface extensions are defined in RFC 3493, RFC 3542 and +// RFC 3678. +// MLDv1 and MLDv2 are defined in RFC 2710 and RFC 3810. +// Source-specific multicast is defined in RFC 4607. +// +// On Darwin, this package requires OS X Mavericks version 10.9 or +// above, or equivalent. +// +// # Unicasting +// +// 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 +// 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. +// +// ln, err := net.Listen("tcp6", "[::]:1024") +// if err != nil { +// // error handling +// } +// defer ln.Close() +// for { +// c, err := ln.Accept() +// if err != nil { +// // error handling +// } +// go func(c net.Conn) { +// defer c.Close() +// +// The outgoing packets will be labeled DiffServ assured forwarding +// class 1 low drop precedence, known as AF11 packets. +// +// if err := ipv6.NewConn(c).SetTrafficClass(0x28); err != nil { +// // error handling +// } +// if _, err := c.Write(data); err != nil { +// // error handling +// } +// }(c) +// } +// +// # Multicasting +// +// 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 +// you begin multicasting, at a minimum joining network interfaces and +// multicast groups. +// +// en0, err := net.InterfaceByName("en0") +// if err != nil { +// // error handling +// } +// en1, err := net.InterfaceByIndex(911) +// if err != nil { +// // error handling +// } +// group := net.ParseIP("ff02::114") +// +// First, an application listens to an appropriate address with an +// appropriate service port. +// +// c, err := net.ListenPacket("udp6", "[::]:1024") +// if err != nil { +// // error handling +// } +// defer c.Close() +// +// Second, the application joins multicast groups, starts listening to +// 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. +// +// p := ipv6.NewPacketConn(c) +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: group}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en1, &net.UDPAddr{IP: group}); err != nil { +// // error handling +// } +// +// The application might set per packet control message transmissions +// 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. +// +// if err := p.SetControlMessage(ipv6.FlagDst, true); err != nil { +// // error handling +// } +// +// The application could identify whether the received packets are +// of interest by using the control message that contains the +// destination address of the received packet. +// +// b := make([]byte, 1500) +// for { +// n, rcm, src, err := p.ReadFrom(b) +// if err != nil { +// // error handling +// } +// if rcm.Dst.IsMulticast() { +// if rcm.Dst.Equal(group) { +// // joined group, do something +// } else { +// // unknown group, discard +// continue +// } +// } +// +// The application can also send both unicast and multicast packets. +// +// p.SetTrafficClass(0x0) +// p.SetHopLimit(16) +// if _, err := p.WriteTo(data[:n], nil, src); err != nil { +// // error handling +// } +// dst := &net.UDPAddr{IP: group, Port: 1024} +// wcm := ipv6.ControlMessage{TrafficClass: 0xe0, HopLimit: 1} +// for _, ifi := range []*net.Interface{en0, en1} { +// wcm.IfIndex = ifi.Index +// if _, err := p.WriteTo(data[:n], &wcm, dst); err != nil { +// // error handling +// } +// } +// } +// +// # More multicasting +// +// An application that uses PacketConn may join multiple multicast +// groups. For example, a UDP listener with port 1024 might join two +// different groups across over two different network interfaces by +// using: +// +// c, err := net.ListenPacket("udp6", "[::]:1024") +// if err != nil { +// // error handling +// } +// defer c.Close() +// p := ipv6.NewPacketConn(c) +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::1:114")}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::2:114")}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en1, &net.UDPAddr{IP: net.ParseIP("ff02::2:114")}); err != nil { +// // error handling +// } +// +// It is possible for multiple UDP listeners that listen on the same +// 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. +// +// c1, err := net.ListenPacket("udp6", "[ff02::]:1024") +// if err != nil { +// // error handling +// } +// defer c1.Close() +// c2, err := net.ListenPacket("udp6", "[ff02::]:1024") +// if err != nil { +// // error handling +// } +// defer c2.Close() +// p1 := ipv6.NewPacketConn(c1) +// if err := p1.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::114")}); err != nil { +// // error handling +// } +// p2 := ipv6.NewPacketConn(c2) +// if err := p2.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::114")}); err != nil { +// // error handling +// } +// +// Also it is possible for the application to leave or rejoin a +// multicast group on the network interface. +// +// if err := p.LeaveGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::114")}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff01::114")}); err != nil { +// // error handling +// } +// +// # Source-specific multicasting +// +// An application that uses PacketConn on MLDv2 supported platform is +// able to join source-specific multicast groups. +// The application may use JoinSourceSpecificGroup and +// LeaveSourceSpecificGroup for the operation known as "include" mode, +// +// ssmgroup := net.UDPAddr{IP: net.ParseIP("ff32::8000:9")} +// ssmsource := net.UDPAddr{IP: net.ParseIP("fe80::cafe")} +// if err := p.JoinSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil { +// // error handling +// } +// if err := p.LeaveSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil { +// // error handling +// } +// +// or JoinGroup, ExcludeSourceSpecificGroup, +// IncludeSourceSpecificGroup and LeaveGroup for the operation known +// as "exclude" mode. +// +// exclsource := net.UDPAddr{IP: net.ParseIP("fe80::dead")} +// if err := p.JoinGroup(en0, &ssmgroup); err != nil { +// // error handling +// } +// if err := p.ExcludeSourceSpecificGroup(en0, &ssmgroup, &exclsource); err != nil { +// // error handling +// } +// if err := p.LeaveGroup(en0, &ssmgroup); err != nil { +// // error handling +// } +// +// Note that it depends on each platform implementation what happens +// when an application which runs on MLDv2 unsupported platform uses +// JoinSourceSpecificGroup and LeaveSourceSpecificGroup. +// In general the platform tries to fall back to conversations using +// MLDv1 and starts to listen to multicast traffic. +// In the fallback case, ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup may return an error. +package ipv6 // import "golang.org/x/net/ipv6" + +// BUG(mikio): This package is not implemented on JS, NaCl and Plan 9. diff --git a/vendor/golang.org/x/net/ipv6/endpoint.go b/vendor/golang.org/x/net/ipv6/endpoint.go new file mode 100644 index 0000000..f534a0b --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/endpoint.go @@ -0,0 +1,127 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "time" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the JoinSourceSpecificGroup, +// LeaveSourceSpecificGroup, ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup methods of PacketConn are not +// implemented. + +// A Conn represents a network endpoint that uses IPv6 transport. +// It allows to set basic IP-level socket options such as traffic +// class and hop limit. +type Conn struct { + genericOpt +} + +type genericOpt struct { + *socket.Conn +} + +func (c *genericOpt) ok() bool { return c != nil && c.Conn != nil } + +// PathMTU returns a path MTU value for the destination associated +// with the endpoint. +func (c *Conn) PathMTU() (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + so, ok := sockOpts[ssoPathMTU] + if !ok { + return 0, errNotImplemented + } + _, mtu, err := so.getMTUInfo(c.Conn) + if err != nil { + return 0, err + } + return mtu, nil +} + +// NewConn returns a new Conn. +func NewConn(c net.Conn) *Conn { + cc, _ := socket.NewConn(c) + return &Conn{ + genericOpt: genericOpt{Conn: cc}, + } +} + +// 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 +// based network I/O methods specific to the IPv6 and higher layer +// protocols such as OSPF, GRE, and UDP. +type PacketConn struct { + genericOpt + dgramOpt + payloadHandler +} + +type dgramOpt struct { + *socket.Conn +} + +func (c *dgramOpt) ok() bool { return c != nil && c.Conn != nil } + +// SetControlMessage allows to receive the per packet basis IP-level +// socket options. +func (c *PacketConn) SetControlMessage(cf ControlFlags, on bool) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return setControlMessage(c.dgramOpt.Conn, &c.payloadHandler.rawOpt, cf, on) +} + +// SetDeadline sets the read and write deadlines associated with the +// endpoint. +func (c *PacketConn) SetDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.SetDeadline(t) +} + +// SetReadDeadline sets the read deadline associated with the +// endpoint. +func (c *PacketConn) SetReadDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.SetReadDeadline(t) +} + +// SetWriteDeadline sets the write deadline associated with the +// endpoint. +func (c *PacketConn) SetWriteDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.SetWriteDeadline(t) +} + +// Close closes the endpoint. +func (c *PacketConn) Close() error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.Close() +} + +// NewPacketConn returns a new PacketConn using c as its underlying +// transport. +func NewPacketConn(c net.PacketConn) *PacketConn { + cc, _ := socket.NewConn(c.(net.Conn)) + return &PacketConn{ + genericOpt: genericOpt{Conn: cc}, + dgramOpt: dgramOpt{Conn: cc}, + payloadHandler: payloadHandler{PacketConn: c, Conn: cc}, + } +} diff --git a/vendor/golang.org/x/net/ipv6/genericopt.go b/vendor/golang.org/x/net/ipv6/genericopt.go new file mode 100644 index 0000000..0326aed --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/genericopt.go @@ -0,0 +1,56 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +// TrafficClass returns the traffic class field value for outgoing +// packets. +func (c *genericOpt) TrafficClass() (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + so, ok := sockOpts[ssoTrafficClass] + if !ok { + return 0, errNotImplemented + } + return so.GetInt(c.Conn) +} + +// SetTrafficClass sets the traffic class field value for future +// outgoing packets. +func (c *genericOpt) SetTrafficClass(tclass int) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoTrafficClass] + if !ok { + return errNotImplemented + } + return so.SetInt(c.Conn, tclass) +} + +// HopLimit returns the hop limit field value for outgoing packets. +func (c *genericOpt) HopLimit() (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + so, ok := sockOpts[ssoHopLimit] + if !ok { + return 0, errNotImplemented + } + return so.GetInt(c.Conn) +} + +// SetHopLimit sets the hop limit field value for future outgoing +// packets. +func (c *genericOpt) SetHopLimit(hoplim int) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoHopLimit] + if !ok { + return errNotImplemented + } + return so.SetInt(c.Conn, hoplim) +} diff --git a/vendor/golang.org/x/net/ipv6/header.go b/vendor/golang.org/x/net/ipv6/header.go new file mode 100644 index 0000000..e05cb08 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/header.go @@ -0,0 +1,55 @@ +// 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 ipv6 + +import ( + "encoding/binary" + "fmt" + "net" +) + +const ( + Version = 6 // protocol version + HeaderLen = 40 // header length +) + +// A Header represents an IPv6 base header. +type Header struct { + Version int // protocol version + TrafficClass int // traffic class + FlowLabel int // flow label + PayloadLen int // payload length + NextHeader int // next header + HopLimit int // hop limit + Src net.IP // source address + Dst net.IP // destination address +} + +func (h *Header) String() string { + if h == nil { + return "" + } + return fmt.Sprintf("ver=%d tclass=%#x flowlbl=%#x payloadlen=%d nxthdr=%d hoplim=%d src=%v dst=%v", h.Version, h.TrafficClass, h.FlowLabel, h.PayloadLen, h.NextHeader, h.HopLimit, h.Src, h.Dst) +} + +// ParseHeader parses b as an IPv6 base header. +func ParseHeader(b []byte) (*Header, error) { + if len(b) < HeaderLen { + return nil, errHeaderTooShort + } + h := &Header{ + Version: int(b[0]) >> 4, + TrafficClass: int(b[0]&0x0f)<<4 | int(b[1])>>4, + FlowLabel: int(b[1]&0x0f)<<16 | int(b[2])<<8 | int(b[3]), + PayloadLen: int(binary.BigEndian.Uint16(b[4:6])), + NextHeader: int(b[6]), + HopLimit: int(b[7]), + } + h.Src = make(net.IP, net.IPv6len) + copy(h.Src, b[8:24]) + h.Dst = make(net.IP, net.IPv6len) + copy(h.Dst, b[24:40]) + return h, nil +} diff --git a/vendor/golang.org/x/net/ipv6/helper.go b/vendor/golang.org/x/net/ipv6/helper.go new file mode 100644 index 0000000..c2d508f --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/helper.go @@ -0,0 +1,58 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "errors" + "net" + "runtime" +) + +var ( + errInvalidConn = errors.New("invalid connection") + errMissingAddress = errors.New("missing address") + errHeaderTooShort = errors.New("header too short") + errInvalidConnType = errors.New("invalid conn type") + errNotImplemented = errors.New("not implemented on " + runtime.GOOS + "/" + runtime.GOARCH) +) + +func boolint(b bool) int { + if b { + return 1 + } + return 0 +} + +func netAddrToIP16(a net.Addr) net.IP { + switch v := a.(type) { + case *net.UDPAddr: + if ip := v.IP.To16(); ip != nil && ip.To4() == nil { + return ip + } + case *net.IPAddr: + if ip := v.IP.To16(); ip != nil && ip.To4() == nil { + return ip + } + } + return nil +} + +func opAddr(a net.Addr) net.Addr { + switch a.(type) { + case *net.TCPAddr: + if a == nil { + return nil + } + case *net.UDPAddr: + if a == nil { + return nil + } + case *net.IPAddr: + if a == nil { + return nil + } + } + return a +} diff --git a/vendor/golang.org/x/net/ipv6/iana.go b/vendor/golang.org/x/net/ipv6/iana.go new file mode 100644 index 0000000..32db1aa --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/iana.go @@ -0,0 +1,86 @@ +// go generate gen.go +// Code generated by the command above; DO NOT EDIT. + +package ipv6 + +// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2018-03-09 +const ( + ICMPTypeDestinationUnreachable ICMPType = 1 // Destination Unreachable + ICMPTypePacketTooBig ICMPType = 2 // Packet Too Big + ICMPTypeTimeExceeded ICMPType = 3 // Time Exceeded + ICMPTypeParameterProblem ICMPType = 4 // Parameter Problem + ICMPTypeEchoRequest ICMPType = 128 // Echo Request + ICMPTypeEchoReply ICMPType = 129 // Echo Reply + ICMPTypeMulticastListenerQuery ICMPType = 130 // Multicast Listener Query + ICMPTypeMulticastListenerReport ICMPType = 131 // Multicast Listener Report + ICMPTypeMulticastListenerDone ICMPType = 132 // Multicast Listener Done + ICMPTypeRouterSolicitation ICMPType = 133 // Router Solicitation + ICMPTypeRouterAdvertisement ICMPType = 134 // Router Advertisement + ICMPTypeNeighborSolicitation ICMPType = 135 // Neighbor Solicitation + ICMPTypeNeighborAdvertisement ICMPType = 136 // Neighbor Advertisement + ICMPTypeRedirect ICMPType = 137 // Redirect Message + ICMPTypeRouterRenumbering ICMPType = 138 // Router Renumbering + ICMPTypeNodeInformationQuery ICMPType = 139 // ICMP Node Information Query + ICMPTypeNodeInformationResponse ICMPType = 140 // ICMP Node Information Response + ICMPTypeInverseNeighborDiscoverySolicitation ICMPType = 141 // Inverse Neighbor Discovery Solicitation Message + ICMPTypeInverseNeighborDiscoveryAdvertisement ICMPType = 142 // Inverse Neighbor Discovery Advertisement Message + ICMPTypeVersion2MulticastListenerReport ICMPType = 143 // Version 2 Multicast Listener Report + ICMPTypeHomeAgentAddressDiscoveryRequest ICMPType = 144 // Home Agent Address Discovery Request Message + ICMPTypeHomeAgentAddressDiscoveryReply ICMPType = 145 // Home Agent Address Discovery Reply Message + ICMPTypeMobilePrefixSolicitation ICMPType = 146 // Mobile Prefix Solicitation + ICMPTypeMobilePrefixAdvertisement ICMPType = 147 // Mobile Prefix Advertisement + ICMPTypeCertificationPathSolicitation ICMPType = 148 // Certification Path Solicitation Message + ICMPTypeCertificationPathAdvertisement ICMPType = 149 // Certification Path Advertisement Message + ICMPTypeMulticastRouterAdvertisement ICMPType = 151 // Multicast Router Advertisement + ICMPTypeMulticastRouterSolicitation ICMPType = 152 // Multicast Router Solicitation + ICMPTypeMulticastRouterTermination ICMPType = 153 // Multicast Router Termination + ICMPTypeFMIPv6 ICMPType = 154 // FMIPv6 Messages + ICMPTypeRPLControl ICMPType = 155 // RPL Control Message + ICMPTypeILNPv6LocatorUpdate ICMPType = 156 // ILNPv6 Locator Update Message + ICMPTypeDuplicateAddressRequest ICMPType = 157 // Duplicate Address Request + ICMPTypeDuplicateAddressConfirmation ICMPType = 158 // Duplicate Address Confirmation + ICMPTypeMPLControl ICMPType = 159 // MPL Control Message + ICMPTypeExtendedEchoRequest ICMPType = 160 // Extended Echo Request + ICMPTypeExtendedEchoReply ICMPType = 161 // Extended Echo Reply +) + +// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2018-03-09 +var icmpTypes = map[ICMPType]string{ + 1: "destination unreachable", + 2: "packet too big", + 3: "time exceeded", + 4: "parameter problem", + 128: "echo request", + 129: "echo reply", + 130: "multicast listener query", + 131: "multicast listener report", + 132: "multicast listener done", + 133: "router solicitation", + 134: "router advertisement", + 135: "neighbor solicitation", + 136: "neighbor advertisement", + 137: "redirect message", + 138: "router renumbering", + 139: "icmp node information query", + 140: "icmp node information response", + 141: "inverse neighbor discovery solicitation message", + 142: "inverse neighbor discovery advertisement message", + 143: "version 2 multicast listener report", + 144: "home agent address discovery request message", + 145: "home agent address discovery reply message", + 146: "mobile prefix solicitation", + 147: "mobile prefix advertisement", + 148: "certification path solicitation message", + 149: "certification path advertisement message", + 151: "multicast router advertisement", + 152: "multicast router solicitation", + 153: "multicast router termination", + 154: "fmipv6 messages", + 155: "rpl control message", + 156: "ilnpv6 locator update message", + 157: "duplicate address request", + 158: "duplicate address confirmation", + 159: "mpl control message", + 160: "extended echo request", + 161: "extended echo reply", +} diff --git a/vendor/golang.org/x/net/ipv6/icmp.go b/vendor/golang.org/x/net/ipv6/icmp.go new file mode 100644 index 0000000..b7f48e2 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp.go @@ -0,0 +1,60 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import "golang.org/x/net/internal/iana" + +// BUG(mikio): On Windows, methods related to ICMPFilter are not +// implemented. + +// An ICMPType represents a type of ICMP message. +type ICMPType int + +func (typ ICMPType) String() string { + s, ok := icmpTypes[typ] + if !ok { + return "" + } + return s +} + +// Protocol returns the ICMPv6 protocol number. +func (typ ICMPType) Protocol() int { + return iana.ProtocolIPv6ICMP +} + +// An ICMPFilter represents an ICMP message filter for incoming +// packets. The filter belongs to a packet delivery path on a host and +// it cannot interact with forwarding packets or tunnel-outer packets. +// +// Note: RFC 8200 defines a reasonable role model. A node means a +// device that implements IP. A router means a node that forwards IP +// packets not explicitly addressed to itself, and a host means a node +// that is not a router. +type ICMPFilter struct { + icmpv6Filter +} + +// Accept accepts incoming ICMP packets including the type field value +// typ. +func (f *ICMPFilter) Accept(typ ICMPType) { + f.accept(typ) +} + +// Block blocks incoming ICMP packets including the type field value +// typ. +func (f *ICMPFilter) Block(typ ICMPType) { + f.block(typ) +} + +// SetAll sets the filter action to the filter. +func (f *ICMPFilter) SetAll(block bool) { + f.setAll(block) +} + +// WillBlock reports whether the ICMP type will be blocked. +func (f *ICMPFilter) WillBlock(typ ICMPType) bool { + return f.willBlock(typ) +} diff --git a/vendor/golang.org/x/net/ipv6/icmp_bsd.go b/vendor/golang.org/x/net/ipv6/icmp_bsd.go new file mode 100644 index 0000000..2814534 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp_bsd.go @@ -0,0 +1,29 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || darwin || dragonfly || freebsd || netbsd || openbsd + +package ipv6 + +func (f *icmpv6Filter) accept(typ ICMPType) { + f.Filt[typ>>5] |= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) block(typ ICMPType) { + f.Filt[typ>>5] &^= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) setAll(block bool) { + for i := range f.Filt { + if block { + f.Filt[i] = 0 + } else { + f.Filt[i] = 1<<32 - 1 + } + } +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + return f.Filt[typ>>5]&(1<<(uint32(typ)&31)) == 0 +} diff --git a/vendor/golang.org/x/net/ipv6/icmp_linux.go b/vendor/golang.org/x/net/ipv6/icmp_linux.go new file mode 100644 index 0000000..647f6b4 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp_linux.go @@ -0,0 +1,27 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +func (f *icmpv6Filter) accept(typ ICMPType) { + f.Data[typ>>5] &^= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) block(typ ICMPType) { + f.Data[typ>>5] |= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) setAll(block bool) { + for i := range f.Data { + if block { + f.Data[i] = 1<<32 - 1 + } else { + f.Data[i] = 0 + } + } +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + return f.Data[typ>>5]&(1<<(uint32(typ)&31)) != 0 +} diff --git a/vendor/golang.org/x/net/ipv6/icmp_solaris.go b/vendor/golang.org/x/net/ipv6/icmp_solaris.go new file mode 100644 index 0000000..7c23bb1 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp_solaris.go @@ -0,0 +1,27 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +func (f *icmpv6Filter) accept(typ ICMPType) { + f.X__icmp6_filt[typ>>5] |= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) block(typ ICMPType) { + f.X__icmp6_filt[typ>>5] &^= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) setAll(block bool) { + for i := range f.X__icmp6_filt { + if block { + f.X__icmp6_filt[i] = 0 + } else { + f.X__icmp6_filt[i] = 1<<32 - 1 + } + } +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + return f.X__icmp6_filt[typ>>5]&(1<<(uint32(typ)&31)) == 0 +} diff --git a/vendor/golang.org/x/net/ipv6/icmp_stub.go b/vendor/golang.org/x/net/ipv6/icmp_stub.go new file mode 100644 index 0000000..c92c9b5 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp_stub.go @@ -0,0 +1,23 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos + +package ipv6 + +type icmpv6Filter struct { +} + +func (f *icmpv6Filter) accept(typ ICMPType) { +} + +func (f *icmpv6Filter) block(typ ICMPType) { +} + +func (f *icmpv6Filter) setAll(block bool) { +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + return false +} diff --git a/vendor/golang.org/x/net/ipv6/icmp_windows.go b/vendor/golang.org/x/net/ipv6/icmp_windows.go new file mode 100644 index 0000000..443cd07 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp_windows.go @@ -0,0 +1,22 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +func (f *icmpv6Filter) accept(typ ICMPType) { + // TODO(mikio): implement this +} + +func (f *icmpv6Filter) block(typ ICMPType) { + // TODO(mikio): implement this +} + +func (f *icmpv6Filter) setAll(block bool) { + // TODO(mikio): implement this +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + // TODO(mikio): implement this + return false +} diff --git a/vendor/golang.org/x/net/ipv6/icmp_zos.go b/vendor/golang.org/x/net/ipv6/icmp_zos.go new file mode 100644 index 0000000..ddf8f09 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/icmp_zos.go @@ -0,0 +1,29 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +func (f *icmpv6Filter) accept(typ ICMPType) { + f.Filt[typ>>5] |= 1 << (uint32(typ) & 31) + +} + +func (f *icmpv6Filter) block(typ ICMPType) { + f.Filt[typ>>5] &^= 1 << (uint32(typ) & 31) + +} + +func (f *icmpv6Filter) setAll(block bool) { + for i := range f.Filt { + if block { + f.Filt[i] = 0 + } else { + f.Filt[i] = 1<<32 - 1 + } + } +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + return f.Filt[typ>>5]&(1<<(uint32(typ)&31)) == 0 +} diff --git a/vendor/golang.org/x/net/ipv6/payload.go b/vendor/golang.org/x/net/ipv6/payload.go new file mode 100644 index 0000000..a8197f1 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/payload.go @@ -0,0 +1,23 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the ControlMessage for ReadFrom and WriteTo +// methods of PacketConn is not implemented. + +// A payloadHandler represents the IPv6 datagram payload handler. +type payloadHandler struct { + net.PacketConn + *socket.Conn + rawOpt +} + +func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil && c.Conn != nil } diff --git a/vendor/golang.org/x/net/ipv6/payload_cmsg.go b/vendor/golang.org/x/net/ipv6/payload_cmsg.go new file mode 100644 index 0000000..be04e4d --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/payload_cmsg.go @@ -0,0 +1,70 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos + +package ipv6 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +// ReadFrom reads a payload of the received IPv6 datagram, from the +// 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) { + if !c.ok() { + return 0, nil, nil, errInvalidConn + } + c.rawOpt.RLock() + m := socket.Message{ + Buffers: [][]byte{b}, + OOB: NewControlMessage(c.rawOpt.cflags), + } + c.rawOpt.RUnlock() + switch c.PacketConn.(type) { + case *net.UDPConn: + if err := c.RecvMsg(&m, 0); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + case *net.IPConn: + if err := c.RecvMsg(&m, 0); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + default: + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: errInvalidConnType} + } + if m.NN > 0 { + cm = new(ControlMessage) + if err := cm.Parse(m.OOB[:m.NN]); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + cm.Src = netAddrToIP16(m.Addr) + } + return m.N, cm, m.Addr, nil +} + +// 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 +// 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() { + return 0, errInvalidConn + } + m := socket.Message{ + Buffers: [][]byte{b}, + OOB: cm.Marshal(), + Addr: dst, + } + err = c.SendMsg(&m, 0) + if err != nil { + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Addr: opAddr(dst), Err: err} + } + return m.N, err +} diff --git a/vendor/golang.org/x/net/ipv6/payload_nocmsg.go b/vendor/golang.org/x/net/ipv6/payload_nocmsg.go new file mode 100644 index 0000000..29b9ccf --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/payload_nocmsg.go @@ -0,0 +1,38 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !zos + +package ipv6 + +import "net" + +// ReadFrom reads a payload of the received IPv6 datagram, from the +// 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) { + if !c.ok() { + return 0, nil, nil, errInvalidConn + } + if n, src, err = c.PacketConn.ReadFrom(b); err != nil { + return 0, nil, nil, err + } + return +} + +// 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 +// 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() { + return 0, errInvalidConn + } + if dst == nil { + return 0, errMissingAddress + } + return c.PacketConn.WriteTo(b, dst) +} diff --git a/vendor/golang.org/x/net/ipv6/sockopt.go b/vendor/golang.org/x/net/ipv6/sockopt.go new file mode 100644 index 0000000..cc3907d --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sockopt.go @@ -0,0 +1,43 @@ +// 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 ipv6 + +import "golang.org/x/net/internal/socket" + +// Sticky socket options +const ( + ssoTrafficClass = iota // header field for unicast packet, RFC 3542 + ssoHopLimit // header field for unicast packet, RFC 3493 + ssoMulticastInterface // outbound interface for multicast packet, RFC 3493 + ssoMulticastHopLimit // header field for multicast packet, RFC 3493 + ssoMulticastLoopback // loopback for multicast packet, RFC 3493 + ssoReceiveTrafficClass // header field on received packet, RFC 3542 + ssoReceiveHopLimit // header field on received packet, RFC 2292 or 3542 + ssoReceivePacketInfo // incbound or outbound packet path, RFC 2292 or 3542 + ssoReceivePathMTU // path mtu, RFC 3542 + ssoPathMTU // path mtu, RFC 3542 + ssoChecksum // packet checksum, RFC 2292 or 3542 + ssoICMPFilter // icmp filter, RFC 2292 or 3542 + ssoJoinGroup // any-source multicast, RFC 3493 + ssoLeaveGroup // any-source multicast, RFC 3493 + ssoJoinSourceGroup // source-specific multicast + ssoLeaveSourceGroup // source-specific multicast + ssoBlockSourceGroup // any-source or source-specific multicast + ssoUnblockSourceGroup // any-source or source-specific multicast + ssoAttachFilter // attach BPF for filtering inbound traffic +) + +// Sticky socket option value types +const ( + ssoTypeIPMreq = iota + 1 + ssoTypeGroupReq + ssoTypeGroupSourceReq +) + +// A sockOpt represents a binding for sticky socket option. +type sockOpt struct { + socket.Option + typ int // hint for option value type; optional +} diff --git a/vendor/golang.org/x/net/ipv6/sockopt_posix.go b/vendor/golang.org/x/net/ipv6/sockopt_posix.go new file mode 100644 index 0000000..34dfed5 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sockopt_posix.go @@ -0,0 +1,89 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || windows || zos + +package ipv6 + +import ( + "net" + "runtime" + "unsafe" + + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) getMulticastInterface(c *socket.Conn) (*net.Interface, error) { + n, err := so.GetInt(c) + if err != nil { + return nil, err + } + return net.InterfaceByIndex(n) +} + +func (so *sockOpt) setMulticastInterface(c *socket.Conn, ifi *net.Interface) error { + var n int + if ifi != nil { + n = ifi.Index + } + return so.SetInt(c, n) +} + +func (so *sockOpt) getICMPFilter(c *socket.Conn) (*ICMPFilter, error) { + b := make([]byte, so.Len) + n, err := so.Get(c, b) + if err != nil { + return nil, err + } + if n != sizeofICMPv6Filter { + return nil, errNotImplemented + } + return (*ICMPFilter)(unsafe.Pointer(&b[0])), nil +} + +func (so *sockOpt) setICMPFilter(c *socket.Conn, f *ICMPFilter) error { + b := (*[sizeofICMPv6Filter]byte)(unsafe.Pointer(f))[:sizeofICMPv6Filter] + return so.Set(c, b) +} + +func (so *sockOpt) getMTUInfo(c *socket.Conn) (*net.Interface, int, error) { + b := make([]byte, so.Len) + n, err := so.Get(c, b) + if err != nil { + return nil, 0, err + } + if n != sizeofIPv6Mtuinfo { + return nil, 0, errNotImplemented + } + mi := (*ipv6Mtuinfo)(unsafe.Pointer(&b[0])) + if mi.Addr.Scope_id == 0 || runtime.GOOS == "aix" { + // AIX kernel might return a wrong address. + return nil, int(mi.Mtu), nil + } + ifi, err := net.InterfaceByIndex(int(mi.Addr.Scope_id)) + if err != nil { + return nil, 0, err + } + return ifi, int(mi.Mtu), nil +} + +func (so *sockOpt) setGroup(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + switch so.typ { + case ssoTypeIPMreq: + return so.setIPMreq(c, ifi, grp) + case ssoTypeGroupReq: + return so.setGroupReq(c, ifi, grp) + default: + return errNotImplemented + } +} + +func (so *sockOpt) setSourceGroup(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + return so.setGroupSourceReq(c, ifi, grp, src) +} + +func (so *sockOpt) setBPF(c *socket.Conn, f []bpf.RawInstruction) error { + return so.setAttachFilter(c, f) +} diff --git a/vendor/golang.org/x/net/ipv6/sockopt_stub.go b/vendor/golang.org/x/net/ipv6/sockopt_stub.go new file mode 100644 index 0000000..a09c3aa --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sockopt_stub.go @@ -0,0 +1,46 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos + +package ipv6 + +import ( + "net" + + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) getMulticastInterface(c *socket.Conn) (*net.Interface, error) { + return nil, errNotImplemented +} + +func (so *sockOpt) setMulticastInterface(c *socket.Conn, ifi *net.Interface) error { + return errNotImplemented +} + +func (so *sockOpt) getICMPFilter(c *socket.Conn) (*ICMPFilter, error) { + return nil, errNotImplemented +} + +func (so *sockOpt) setICMPFilter(c *socket.Conn, f *ICMPFilter) error { + return errNotImplemented +} + +func (so *sockOpt) getMTUInfo(c *socket.Conn) (*net.Interface, int, error) { + return nil, 0, errNotImplemented +} + +func (so *sockOpt) setGroup(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + return errNotImplemented +} + +func (so *sockOpt) setSourceGroup(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + return errNotImplemented +} + +func (so *sockOpt) setBPF(c *socket.Conn, f []bpf.RawInstruction) error { + return errNotImplemented +} diff --git a/vendor/golang.org/x/net/ipv6/sys_aix.go b/vendor/golang.org/x/net/ipv6/sys_aix.go new file mode 100644 index 0000000..93c8efc --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_aix.go @@ -0,0 +1,79 @@ +// Copyright 2019 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. + +// Added for go1.11 compatibility +//go:build aix + +package ipv6 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTrafficClass: {unix.IPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass}, + ctlHopLimit: {unix.IPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}, + ctlPacketInfo: {unix.IPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}, + ctlNextHop: {unix.IPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop}, + ctlPathMTU: {unix.IPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}, + } + + sockOpts = map[int]*sockOpt{ + ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_TCLASS, Len: 4}}, + ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_UNICAST_HOPS, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_IF, Len: 4}}, + ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_HOPS, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVTCLASS, Len: 4}}, + ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVHOPLIMIT, Len: 4}}, + ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVPKTINFO, Len: 4}}, + ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVPATHMTU, Len: 4}}, + ssoPathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}}, + ssoChecksum: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_CHECKSUM, Len: 4}}, + ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: unix.ICMP6_FILTER, Len: sizeofICMPv6Filter}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_JOIN_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_LEAVE_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq}, + } +) + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = int32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) + sa = (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 132)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv6/sys_asmreq.go b/vendor/golang.org/x/net/ipv6/sys_asmreq.go new file mode 100644 index 0000000..5c9cb44 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_asmreq.go @@ -0,0 +1,24 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || windows + +package ipv6 + +import ( + "net" + "unsafe" + + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setIPMreq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + var mreq ipv6Mreq + copy(mreq.Multiaddr[:], grp) + if ifi != nil { + mreq.setIfindex(ifi.Index) + } + b := (*[sizeofIPv6Mreq]byte)(unsafe.Pointer(&mreq))[:sizeofIPv6Mreq] + return so.Set(c, b) +} diff --git a/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go b/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go new file mode 100644 index 0000000..dc70494 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go @@ -0,0 +1,17 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows + +package ipv6 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setIPMreq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + return errNotImplemented +} diff --git a/vendor/golang.org/x/net/ipv6/sys_bpf.go b/vendor/golang.org/x/net/ipv6/sys_bpf.go new file mode 100644 index 0000000..e39f75f --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_bpf.go @@ -0,0 +1,24 @@ +// 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. + +//go:build linux + +package ipv6 + +import ( + "unsafe" + + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" + "golang.org/x/sys/unix" +) + +func (so *sockOpt) setAttachFilter(c *socket.Conn, f []bpf.RawInstruction) error { + prog := unix.SockFprog{ + Len: uint16(len(f)), + Filter: (*unix.SockFilter)(unsafe.Pointer(&f[0])), + } + b := (*[unix.SizeofSockFprog]byte)(unsafe.Pointer(&prog))[:unix.SizeofSockFprog] + return so.Set(c, b) +} diff --git a/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go b/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go new file mode 100644 index 0000000..8532a8f --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go @@ -0,0 +1,16 @@ +// 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. + +//go:build !linux + +package ipv6 + +import ( + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setAttachFilter(c *socket.Conn, f []bpf.RawInstruction) error { + return errNotImplemented +} diff --git a/vendor/golang.org/x/net/ipv6/sys_bsd.go b/vendor/golang.org/x/net/ipv6/sys_bsd.go new file mode 100644 index 0000000..9f3bc2a --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_bsd.go @@ -0,0 +1,59 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build dragonfly || netbsd || openbsd + +package ipv6 + +import ( + "net" + "syscall" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTrafficClass: {unix.IPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass}, + ctlHopLimit: {unix.IPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}, + ctlPacketInfo: {unix.IPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}, + ctlNextHop: {unix.IPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop}, + ctlPathMTU: {unix.IPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}, + } + + sockOpts = map[int]*sockOpt{ + ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_TCLASS, Len: 4}}, + ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_UNICAST_HOPS, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_IF, Len: 4}}, + ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_HOPS, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVTCLASS, Len: 4}}, + ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVHOPLIMIT, Len: 4}}, + ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVPKTINFO, Len: 4}}, + ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVPATHMTU, Len: 4}}, + ssoPathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}}, + ssoChecksum: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_CHECKSUM, Len: 4}}, + ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: unix.ICMP6_FILTER, Len: sizeofICMPv6Filter}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_JOIN_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_LEAVE_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq}, + } +) + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} diff --git a/vendor/golang.org/x/net/ipv6/sys_darwin.go b/vendor/golang.org/x/net/ipv6/sys_darwin.go new file mode 100644 index 0000000..b80ec80 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_darwin.go @@ -0,0 +1,80 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTrafficClass: {unix.IPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass}, + ctlHopLimit: {unix.IPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}, + ctlPacketInfo: {unix.IPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}, + ctlNextHop: {unix.IPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop}, + ctlPathMTU: {unix.IPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}, + } + + sockOpts = map[int]*sockOpt{ + ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_UNICAST_HOPS, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_IF, Len: 4}}, + ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_HOPS, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_LOOP, Len: 4}}, + ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_TCLASS, Len: 4}}, + ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVTCLASS, Len: 4}}, + ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVHOPLIMIT, Len: 4}}, + ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVPKTINFO, Len: 4}}, + ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVPATHMTU, Len: 4}}, + ssoPathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}}, + ssoChecksum: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_CHECKSUM, Len: 4}}, + ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: unix.ICMP6_FILTER, Len: sizeofICMPv6Filter}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + } +) + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) + sa = (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 132)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv6/sys_freebsd.go b/vendor/golang.org/x/net/ipv6/sys_freebsd.go new file mode 100644 index 0000000..6282cf9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_freebsd.go @@ -0,0 +1,94 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "runtime" + "strings" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTrafficClass: {unix.IPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass}, + ctlHopLimit: {unix.IPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}, + ctlPacketInfo: {unix.IPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}, + ctlNextHop: {unix.IPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop}, + ctlPathMTU: {unix.IPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}, + } + + sockOpts = map[int]sockOpt{ + ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_TCLASS, Len: 4}}, + ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_UNICAST_HOPS, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_IF, Len: 4}}, + ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_HOPS, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVTCLASS, Len: 4}}, + ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVHOPLIMIT, Len: 4}}, + ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVPKTINFO, Len: 4}}, + ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVPATHMTU, Len: 4}}, + ssoPathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}}, + ssoChecksum: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_CHECKSUM, Len: 4}}, + ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: unix.ICMP6_FILTER, Len: sizeofICMPv6Filter}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + } +) + +func init() { + if runtime.GOOS == "freebsd" && runtime.GOARCH == "386" { + archs, _ := syscall.Sysctl("kern.supported_archs") + for _, s := range strings.Fields(archs) { + if s == "amd64" { + compatFreeBSD32 = true + break + } + } + } +} + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(&gr.Group)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(&gsr.Group)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) + sa = (*sockaddrInet6)(unsafe.Pointer(&gsr.Source)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv6/sys_linux.go b/vendor/golang.org/x/net/ipv6/sys_linux.go new file mode 100644 index 0000000..82e2121 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_linux.go @@ -0,0 +1,76 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTrafficClass: {unix.IPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass}, + ctlHopLimit: {unix.IPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}, + ctlPacketInfo: {unix.IPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}, + ctlPathMTU: {unix.IPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}, + } + + sockOpts = map[int]*sockOpt{ + ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_TCLASS, Len: 4}}, + ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_UNICAST_HOPS, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_IF, Len: 4}}, + ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_HOPS, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVTCLASS, Len: 4}}, + ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVHOPLIMIT, Len: 4}}, + ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVPKTINFO, Len: 4}}, + ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVPATHMTU, Len: 4}}, + ssoPathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}}, + ssoChecksum: {Option: socket.Option{Level: iana.ProtocolReserved, Name: unix.IPV6_CHECKSUM, Len: 4}}, + ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: unix.ICMPV6_FILTER, Len: sizeofICMPv6Filter}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoAttachFilter: {Option: socket.Option{Level: unix.SOL_SOCKET, Name: unix.SO_ATTACH_FILTER, Len: unix.SizeofSockFprog}}, + } +) + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = int32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Ifindex = int32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(&gr.Group)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(&gsr.Group)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) + sa = (*sockaddrInet6)(unsafe.Pointer(&gsr.Source)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv6/sys_solaris.go b/vendor/golang.org/x/net/ipv6/sys_solaris.go new file mode 100644 index 0000000..1fc30ad --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_solaris.go @@ -0,0 +1,76 @@ +// 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. + +package ipv6 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTrafficClass: {unix.IPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass}, + ctlHopLimit: {unix.IPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}, + ctlPacketInfo: {unix.IPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}, + ctlNextHop: {unix.IPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop}, + ctlPathMTU: {unix.IPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}, + } + + sockOpts = map[int]*sockOpt{ + ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_TCLASS, Len: 4}}, + ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_UNICAST_HOPS, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_IF, Len: 4}}, + ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_HOPS, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVTCLASS, Len: 4}}, + ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVHOPLIMIT, Len: 4}}, + ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVPKTINFO, Len: 4}}, + ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVPATHMTU, Len: 4}}, + ssoPathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}}, + ssoChecksum: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_CHECKSUM, Len: 4}}, + ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: unix.ICMP6_FILTER, Len: sizeofICMPv6Filter}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + } +) + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) + sa = (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 260)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv6/sys_ssmreq.go b/vendor/golang.org/x/net/ipv6/sys_ssmreq.go new file mode 100644 index 0000000..b40f5c6 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_ssmreq.go @@ -0,0 +1,54 @@ +// 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. + +//go:build aix || darwin || freebsd || linux || solaris || zos + +package ipv6 + +import ( + "net" + "unsafe" + + "golang.org/x/net/internal/socket" +) + +var compatFreeBSD32 bool // 386 emulation on amd64 + +func (so *sockOpt) setGroupReq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + var gr groupReq + if ifi != nil { + gr.Interface = uint32(ifi.Index) + } + gr.setGroup(grp) + var b []byte + if compatFreeBSD32 { + var d [sizeofGroupReq + 4]byte + s := (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr)) + copy(d[:4], s[:4]) + copy(d[8:], s[4:]) + b = d[:] + } else { + b = (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr))[:sizeofGroupReq] + } + return so.Set(c, b) +} + +func (so *sockOpt) setGroupSourceReq(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + var gsr groupSourceReq + if ifi != nil { + gsr.Interface = uint32(ifi.Index) + } + gsr.setSourceGroup(grp, src) + var b []byte + if compatFreeBSD32 { + var d [sizeofGroupSourceReq + 4]byte + s := (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr)) + copy(d[:4], s[:4]) + copy(d[8:], s[4:]) + b = d[:] + } else { + b = (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))[:sizeofGroupSourceReq] + } + return so.Set(c, b) +} diff --git a/vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go b/vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go new file mode 100644 index 0000000..6526aad --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go @@ -0,0 +1,21 @@ +// 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. + +//go:build !aix && !darwin && !freebsd && !linux && !solaris && !zos + +package ipv6 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setGroupReq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + return errNotImplemented +} + +func (so *sockOpt) setGroupSourceReq(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + return errNotImplemented +} diff --git a/vendor/golang.org/x/net/ipv6/sys_stub.go b/vendor/golang.org/x/net/ipv6/sys_stub.go new file mode 100644 index 0000000..76602c3 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_stub.go @@ -0,0 +1,13 @@ +// 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. + +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows && !zos + +package ipv6 + +var ( + ctlOpts = [ctlMax]ctlOpt{} + + sockOpts = map[int]*sockOpt{} +) diff --git a/vendor/golang.org/x/net/ipv6/sys_windows.go b/vendor/golang.org/x/net/ipv6/sys_windows.go new file mode 100644 index 0000000..fda8a29 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_windows.go @@ -0,0 +1,68 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "syscall" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/windows" +) + +const ( + sizeofSockaddrInet6 = 0x1c + + sizeofIPv6Mreq = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofICMPv6Filter = 0 +) + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type icmpv6Filter struct { + // TODO(mikio): implement this +} + +var ( + ctlOpts = [ctlMax]ctlOpt{} + + sockOpts = map[int]*sockOpt{ + ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: windows.IPV6_UNICAST_HOPS, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: windows.IPV6_MULTICAST_IF, Len: 4}}, + ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: windows.IPV6_MULTICAST_HOPS, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: windows.IPV6_MULTICAST_LOOP, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: windows.IPV6_JOIN_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: windows.IPV6_LEAVE_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq}, + } +) + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} diff --git a/vendor/golang.org/x/net/ipv6/sys_zos.go b/vendor/golang.org/x/net/ipv6/sys_zos.go new file mode 100644 index 0000000..31adc86 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/sys_zos.go @@ -0,0 +1,72 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" + + "golang.org/x/sys/unix" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlHopLimit: {unix.IPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}, + ctlPacketInfo: {unix.IPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}, + ctlPathMTU: {unix.IPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}, + } + + sockOpts = map[int]*sockOpt{ + ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_TCLASS, Len: 4}}, + ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_UNICAST_HOPS, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_IF, Len: 4}}, + ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_HOPS, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVTCLASS, Len: 4}}, + ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVHOPLIMIT, Len: 4}}, + ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVPKTINFO, Len: 4}}, + ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_RECVPATHMTU, Len: 4}}, + ssoChecksum: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.IPV6_CHECKSUM, Len: 4}}, + ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: unix.ICMP6_FILTER, Len: sizeofICMPv6Filter}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: unix.MCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + } +) + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(&gr.Group)) + sa.Family = syscall.AF_INET6 + sa.Len = sizeofSockaddrInet6 + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(&gsr.Group)) + sa.Family = syscall.AF_INET6 + sa.Len = sizeofSockaddrInet6 + copy(sa.Addr[:], grp) + sa = (*sockaddrInet6)(unsafe.Pointer(&gsr.Source)) + sa.Family = syscall.AF_INET6 + sa.Len = sizeofSockaddrInet6 + copy(sa.Addr[:], src) +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_aix_ppc64.go b/vendor/golang.org/x/net/ipv6/zsys_aix_ppc64.go new file mode 100644 index 0000000..668716d --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_aix_ppc64.go @@ -0,0 +1,68 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_aix.go + +// Added for go1.11 compatibility +//go:build aix + +package ipv6 + +const ( + sizeofSockaddrStorage = 0x508 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x510 + sizeofGroupSourceReq = 0xa18 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + X__ss_len uint8 + Family uint8 + X__ss_pad1 [6]uint8 + X__ss_align int64 + X__ss_pad2 [1265]uint8 + Pad_cgo_0 [7]byte +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type icmpv6Filter struct { + Filt [8]uint32 +} + +type groupReq struct { + Interface uint32 + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group sockaddrStorage + Source sockaddrStorage +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_darwin.go b/vendor/golang.org/x/net/ipv6/zsys_darwin.go new file mode 100644 index 0000000..dd6f7b2 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_darwin.go @@ -0,0 +1,64 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_darwin.go + +package ipv6 + +const ( + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type icmpv6Filter struct { + Filt [8]uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [128]byte +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [128]byte + Pad_cgo_1 [128]byte +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go b/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go new file mode 100644 index 0000000..6b45a94 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go @@ -0,0 +1,42 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_dragonfly.go + +package ipv6 + +const ( + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go b/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go new file mode 100644 index 0000000..8da5592 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go @@ -0,0 +1,64 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package ipv6 + +const ( + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type groupReq struct { + Interface uint32 + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group sockaddrStorage + Source sockaddrStorage +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go b/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go new file mode 100644 index 0000000..72a1a65 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go @@ -0,0 +1,66 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package ipv6 + +const ( + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage + Source sockaddrStorage +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go b/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go new file mode 100644 index 0000000..72a1a65 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go @@ -0,0 +1,66 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package ipv6 + +const ( + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage + Source sockaddrStorage +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm64.go b/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm64.go new file mode 100644 index 0000000..5b39eb8 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm64.go @@ -0,0 +1,64 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package ipv6 + +const ( + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]uint8 + X__ss_align int64 + X__ss_pad2 [112]uint8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type groupReq struct { + Interface uint32 + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group sockaddrStorage + Source sockaddrStorage +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_freebsd_riscv64.go b/vendor/golang.org/x/net/ipv6/zsys_freebsd_riscv64.go new file mode 100644 index 0000000..5b39eb8 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_freebsd_riscv64.go @@ -0,0 +1,64 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package ipv6 + +const ( + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]uint8 + X__ss_align int64 + X__ss_pad2 [112]uint8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type groupReq struct { + Interface uint32 + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group sockaddrStorage + Source sockaddrStorage +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_386.go b/vendor/golang.org/x/net/ipv6/zsys_linux_386.go new file mode 100644 index 0000000..ad71871 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_386.go @@ -0,0 +1,72 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go new file mode 100644 index 0000000..2514ab9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go @@ -0,0 +1,74 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go b/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go new file mode 100644 index 0000000..ad71871 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go @@ -0,0 +1,72 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go new file mode 100644 index 0000000..2514ab9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go @@ -0,0 +1,74 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_loong64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_loong64.go new file mode 100644 index 0000000..6a53284 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_loong64.go @@ -0,0 +1,76 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +//go:build loong64 + +package ipv6 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go new file mode 100644 index 0000000..ad71871 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go @@ -0,0 +1,72 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go new file mode 100644 index 0000000..2514ab9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go @@ -0,0 +1,74 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go new file mode 100644 index 0000000..2514ab9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go @@ -0,0 +1,74 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go new file mode 100644 index 0000000..ad71871 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go @@ -0,0 +1,72 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go new file mode 100644 index 0000000..d06c2ad --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go @@ -0,0 +1,72 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go new file mode 100644 index 0000000..2514ab9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go @@ -0,0 +1,74 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go new file mode 100644 index 0000000..2514ab9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go @@ -0,0 +1,74 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_riscv64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_riscv64.go new file mode 100644 index 0000000..13b3472 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_riscv64.go @@ -0,0 +1,76 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +//go:build riscv64 + +package ipv6 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go b/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go new file mode 100644 index 0000000..2514ab9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go @@ -0,0 +1,74 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_netbsd.go b/vendor/golang.org/x/net/ipv6/zsys_netbsd.go new file mode 100644 index 0000000..f7335d5 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_netbsd.go @@ -0,0 +1,42 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_netbsd.go + +package ipv6 + +const ( + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_openbsd.go b/vendor/golang.org/x/net/ipv6/zsys_openbsd.go new file mode 100644 index 0000000..6d15928 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_openbsd.go @@ -0,0 +1,42 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_openbsd.go + +package ipv6 + +const ( + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_solaris.go b/vendor/golang.org/x/net/ipv6/zsys_solaris.go new file mode 100644 index 0000000..1716197 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_solaris.go @@ -0,0 +1,63 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_solaris.go + +package ipv6 + +const ( + sizeofSockaddrStorage = 0x100 + sizeofSockaddrInet6 = 0x20 + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x24 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x104 + sizeofGroupSourceReq = 0x204 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Family uint16 + X_ss_pad1 [6]int8 + X_ss_align float64 + X_ss_pad2 [240]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 + X__sin6_src_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [256]byte +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [256]byte + Pad_cgo_1 [256]byte +} + +type icmpv6Filter struct { + X__icmp6_filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_zos_s390x.go b/vendor/golang.org/x/net/ipv6/zsys_zos_s390x.go new file mode 100644 index 0000000..7c75645 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_zos_s390x.go @@ -0,0 +1,62 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Hand edited based on zerrors_zos_s390x.go +// TODO(Bill O'Farrell): auto-generate. + +package ipv6 + +const ( + sizeofSockaddrStorage = 128 + sizeofICMPv6Filter = 32 + sizeofInet6Pktinfo = 20 + sizeofIPv6Mtuinfo = 32 + sizeofSockaddrInet6 = 28 + sizeofGroupReq = 136 + sizeofGroupSourceReq = 264 +) + +type sockaddrStorage struct { + Len uint8 + Family byte + ss_pad1 [6]byte + ss_align int64 + ss_pad2 [112]byte +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type groupReq struct { + Interface uint32 + reserved uint32 + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + reserved uint32 + Group sockaddrStorage + Source sockaddrStorage +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/sync/errgroup/errgroup.go b/vendor/golang.org/x/sync/errgroup/errgroup.go index a4ea5d1..1d8cffa 100644 --- a/vendor/golang.org/x/sync/errgroup/errgroup.go +++ b/vendor/golang.org/x/sync/errgroup/errgroup.go @@ -18,7 +18,7 @@ import ( type token struct{} // A Group is a collection of goroutines working on subtasks that are part of -// the same overall task. +// the same overall task. A Group should not be reused for different tasks. // // A zero Group is valid, has no limit on the number of active goroutines, // and does not cancel on error. @@ -61,11 +61,14 @@ func (g *Group) Wait() error { } // Go calls the given function in a new goroutine. +// +// The first call to Go must happen before a Wait. // It blocks until the new goroutine can be added without the number of -// active goroutines in the group exceeding the configured limit. +// goroutines in the group exceeding the configured limit. // -// The first call to return a non-nil error cancels the group's context, if the -// group was created by calling WithContext. The error will be returned by Wait. +// The first goroutine in the group that returns a non-nil error will +// cancel the associated Context, if any. The error will be returned +// by Wait. func (g *Group) Go(f func() error) { if g.sem != nil { g.sem <- token{} @@ -75,6 +78,18 @@ func (g *Group) Go(f func() error) { go func() { defer g.done() + // It is tempting to propagate panics from f() + // up to the goroutine that calls Wait, but + // it creates more problems than it solves: + // - it delays panics arbitrarily, + // making bugs harder to detect; + // - it turns f's panic stack into a mere value, + // hiding it from crash-monitoring tools; + // - it risks deadlocks that hide the panic entirely, + // if f's panic leaves the program in a state + // that prevents the Wait call from being reached. + // See #53757, #74275, #74304, #74306. + if err := f(); err != nil { g.errOnce.Do(func() { g.err = err diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go index 9c105f2..6354199 100644 --- a/vendor/golang.org/x/sys/cpu/cpu.go +++ b/vendor/golang.org/x/sys/cpu/cpu.go @@ -149,6 +149,18 @@ var ARM struct { _ CacheLinePad } +// The booleans in Loong64 contain the correspondingly named cpu feature bit. +// The struct is padded to avoid false sharing. +var Loong64 struct { + _ CacheLinePad + HasLSX bool // support 128-bit vector extension + HasLASX bool // support 256-bit vector extension + HasCRC32 bool // support CRC instruction + HasLAM_BH bool // support AM{SWAP/ADD}[_DB].{B/H} instruction + HasLAMCAS bool // support AMCAS[_DB].{B/H/W/D} instruction + _ CacheLinePad +} + // MIPS64X contains the supported CPU features of the current mips64/mips64le // platforms. If the current platform is not mips64/mips64le or the current // operating system is not Linux then all feature flags are false. @@ -220,6 +232,17 @@ var RISCV64 struct { HasZba bool // Address generation instructions extension HasZbb bool // Basic bit-manipulation extension HasZbs bool // Single-bit instructions extension + HasZvbb bool // Vector Basic Bit-manipulation + HasZvbc bool // Vector Carryless Multiplication + HasZvkb bool // Vector Cryptography Bit-manipulation + HasZvkt bool // Vector Data-Independent Execution Latency + HasZvkg bool // Vector GCM/GMAC + HasZvkn bool // NIST Algorithm Suite (AES/SHA256/SHA512) + HasZvknc bool // NIST Algorithm Suite with carryless multiply + HasZvkng bool // NIST Algorithm Suite with GCM + HasZvks bool // ShangMi Algorithm Suite + HasZvksc bool // ShangMi Algorithm Suite with carryless multiplication + HasZvksg bool // ShangMi Algorithm Suite with GCM _ CacheLinePad } diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_loong64.go b/vendor/golang.org/x/sys/cpu/cpu_linux_loong64.go new file mode 100644 index 0000000..4f34114 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_loong64.go @@ -0,0 +1,22 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cpu + +// HWCAP bits. These are exposed by the Linux kernel. +const ( + hwcap_LOONGARCH_LSX = 1 << 4 + hwcap_LOONGARCH_LASX = 1 << 5 +) + +func doinit() { + // TODO: Features that require kernel support like LSX and LASX can + // be detected here once needed in std library or by the compiler. + Loong64.HasLSX = hwcIsSet(hwCap, hwcap_LOONGARCH_LSX) + Loong64.HasLASX = hwcIsSet(hwCap, hwcap_LOONGARCH_LASX) +} + +func hwcIsSet(hwc uint, val uint) bool { + return hwc&val != 0 +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go b/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go index 7d902b6..a428dec 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build linux && !arm && !arm64 && !mips64 && !mips64le && !ppc64 && !ppc64le && !s390x && !riscv64 +//go:build linux && !arm && !arm64 && !loong64 && !mips64 && !mips64le && !ppc64 && !ppc64le && !s390x && !riscv64 package cpu diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go b/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go index cb4a0c5..ad74153 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go @@ -58,6 +58,15 @@ const ( riscv_HWPROBE_EXT_ZBA = 0x8 riscv_HWPROBE_EXT_ZBB = 0x10 riscv_HWPROBE_EXT_ZBS = 0x20 + riscv_HWPROBE_EXT_ZVBB = 0x20000 + riscv_HWPROBE_EXT_ZVBC = 0x40000 + riscv_HWPROBE_EXT_ZVKB = 0x80000 + riscv_HWPROBE_EXT_ZVKG = 0x100000 + riscv_HWPROBE_EXT_ZVKNED = 0x200000 + riscv_HWPROBE_EXT_ZVKNHB = 0x800000 + riscv_HWPROBE_EXT_ZVKSED = 0x1000000 + riscv_HWPROBE_EXT_ZVKSH = 0x2000000 + riscv_HWPROBE_EXT_ZVKT = 0x4000000 riscv_HWPROBE_KEY_CPUPERF_0 = 0x5 riscv_HWPROBE_MISALIGNED_FAST = 0x3 riscv_HWPROBE_MISALIGNED_MASK = 0x7 @@ -99,6 +108,20 @@ func doinit() { RISCV64.HasZba = isSet(v, riscv_HWPROBE_EXT_ZBA) RISCV64.HasZbb = isSet(v, riscv_HWPROBE_EXT_ZBB) RISCV64.HasZbs = isSet(v, riscv_HWPROBE_EXT_ZBS) + RISCV64.HasZvbb = isSet(v, riscv_HWPROBE_EXT_ZVBB) + RISCV64.HasZvbc = isSet(v, riscv_HWPROBE_EXT_ZVBC) + RISCV64.HasZvkb = isSet(v, riscv_HWPROBE_EXT_ZVKB) + RISCV64.HasZvkg = isSet(v, riscv_HWPROBE_EXT_ZVKG) + RISCV64.HasZvkt = isSet(v, riscv_HWPROBE_EXT_ZVKT) + // Cryptography shorthand extensions + RISCV64.HasZvkn = isSet(v, riscv_HWPROBE_EXT_ZVKNED) && + isSet(v, riscv_HWPROBE_EXT_ZVKNHB) && RISCV64.HasZvkb && RISCV64.HasZvkt + RISCV64.HasZvknc = RISCV64.HasZvkn && RISCV64.HasZvbc + RISCV64.HasZvkng = RISCV64.HasZvkn && RISCV64.HasZvkg + RISCV64.HasZvks = isSet(v, riscv_HWPROBE_EXT_ZVKSED) && + isSet(v, riscv_HWPROBE_EXT_ZVKSH) && RISCV64.HasZvkb && RISCV64.HasZvkt + RISCV64.HasZvksc = RISCV64.HasZvks && RISCV64.HasZvbc + RISCV64.HasZvksg = RISCV64.HasZvks && RISCV64.HasZvkg } if pairs[1].key != -1 { v := pairs[1].value & riscv_HWPROBE_MISALIGNED_MASK diff --git a/vendor/golang.org/x/sys/cpu/cpu_loong64.go b/vendor/golang.org/x/sys/cpu/cpu_loong64.go index 5586358..45ecb29 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_loong64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_loong64.go @@ -8,5 +8,43 @@ package cpu const cacheLineSize = 64 +// Bit fields for CPUCFG registers, Related reference documents: +// https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html#_cpucfg +const ( + // CPUCFG1 bits + cpucfg1_CRC32 = 1 << 25 + + // CPUCFG2 bits + cpucfg2_LAM_BH = 1 << 27 + cpucfg2_LAMCAS = 1 << 28 +) + func initOptions() { + options = []option{ + {Name: "lsx", Feature: &Loong64.HasLSX}, + {Name: "lasx", Feature: &Loong64.HasLASX}, + {Name: "crc32", Feature: &Loong64.HasCRC32}, + {Name: "lam_bh", Feature: &Loong64.HasLAM_BH}, + {Name: "lamcas", Feature: &Loong64.HasLAMCAS}, + } + + // The CPUCFG data on Loong64 only reflects the hardware capabilities, + // not the kernel support status, so features such as LSX and LASX that + // require kernel support cannot be obtained from the CPUCFG data. + // + // These features only require hardware capability support and do not + // require kernel specific support, so they can be obtained directly + // through CPUCFG + cfg1 := get_cpucfg(1) + cfg2 := get_cpucfg(2) + + Loong64.HasCRC32 = cfgIsSet(cfg1, cpucfg1_CRC32) + Loong64.HasLAMCAS = cfgIsSet(cfg2, cpucfg2_LAMCAS) + Loong64.HasLAM_BH = cfgIsSet(cfg2, cpucfg2_LAM_BH) +} + +func get_cpucfg(reg uint32) uint32 + +func cfgIsSet(cfg uint32, val uint32) bool { + return cfg&val != 0 } diff --git a/vendor/golang.org/x/sys/cpu/cpu_loong64.s b/vendor/golang.org/x/sys/cpu/cpu_loong64.s new file mode 100644 index 0000000..71cbaf1 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_loong64.s @@ -0,0 +1,13 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +// func get_cpucfg(reg uint32) uint32 +TEXT ·get_cpucfg(SB), NOSPLIT|NOFRAME, $0 + MOVW reg+0(FP), R5 + // CPUCFG R5, R4 = 0x00006ca4 + WORD $0x00006ca4 + MOVW R4, ret+8(FP) + RET diff --git a/vendor/golang.org/x/sys/cpu/cpu_riscv64.go b/vendor/golang.org/x/sys/cpu/cpu_riscv64.go index aca3199..0f617ae 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_riscv64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_riscv64.go @@ -16,5 +16,17 @@ func initOptions() { {Name: "zba", Feature: &RISCV64.HasZba}, {Name: "zbb", Feature: &RISCV64.HasZbb}, {Name: "zbs", Feature: &RISCV64.HasZbs}, + // RISC-V Cryptography Extensions + {Name: "zvbb", Feature: &RISCV64.HasZvbb}, + {Name: "zvbc", Feature: &RISCV64.HasZvbc}, + {Name: "zvkb", Feature: &RISCV64.HasZvkb}, + {Name: "zvkg", Feature: &RISCV64.HasZvkg}, + {Name: "zvkt", Feature: &RISCV64.HasZvkt}, + {Name: "zvkn", Feature: &RISCV64.HasZvkn}, + {Name: "zvknc", Feature: &RISCV64.HasZvknc}, + {Name: "zvkng", Feature: &RISCV64.HasZvkng}, + {Name: "zvks", Feature: &RISCV64.HasZvks}, + {Name: "zvksc", Feature: &RISCV64.HasZvksc}, + {Name: "zvksg", Feature: &RISCV64.HasZvksg}, } } diff --git a/vendor/golang.org/x/sys/cpu/parse.go b/vendor/golang.org/x/sys/cpu/parse.go index 762b63d..56a7e1a 100644 --- a/vendor/golang.org/x/sys/cpu/parse.go +++ b/vendor/golang.org/x/sys/cpu/parse.go @@ -13,7 +13,7 @@ import "strconv" // https://golang.org/cl/209597. func parseRelease(rel string) (major, minor, patch int, ok bool) { // Strip anything after a dash or plus. - for i := 0; i < len(rel); i++ { + for i := range len(rel) { if rel[i] == '-' || rel[i] == '+' { rel = rel[:i] break @@ -21,7 +21,7 @@ func parseRelease(rel string) (major, minor, patch int, ok bool) { } next := func() (int, bool) { - for i := 0; i < len(rel); i++ { + for i := range len(rel) { if rel[i] == '.' { ver, err := strconv.Atoi(rel[:i]) rel = rel[i+1:] diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index 6ab02b6..d1c8b26 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -349,6 +349,9 @@ struct ltchars { #define _HIDIOCGRAWPHYS HIDIOCGRAWPHYS(_HIDIOCGRAWPHYS_LEN) #define _HIDIOCGRAWUNIQ HIDIOCGRAWUNIQ(_HIDIOCGRAWUNIQ_LEN) +// Renamed in v6.16, commit c6d732c38f93 ("net: ethtool: remove duplicate defines for family info") +#define ETHTOOL_FAMILY_NAME ETHTOOL_GENL_NAME +#define ETHTOOL_FAMILY_VERSION ETHTOOL_GENL_VERSION ' includes_NetBSD=' diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 099867d..7838ca5 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -602,6 +602,95 @@ func Connectx(fd int, srcIf uint32, srcAddr, dstAddr Sockaddr, associd SaeAssocI return } +const minIovec = 8 + +func Readv(fd int, iovs [][]byte) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + n, err = readv(fd, iovecs) + readvRacedetect(iovecs, n, err) + return n, err +} + +func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + n, err = preadv(fd, iovecs, offset) + readvRacedetect(iovecs, n, err) + return n, err +} + +func Writev(fd int, iovs [][]byte) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = writev(fd, iovecs) + writevRacedetect(iovecs, n) + return n, err +} + +func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = pwritev(fd, iovecs, offset) + writevRacedetect(iovecs, n) + return n, err +} + +func appendBytes(vecs []Iovec, bs [][]byte) []Iovec { + for _, b := range bs { + var v Iovec + v.SetLen(len(b)) + if len(b) > 0 { + v.Base = &b[0] + } else { + v.Base = (*byte)(unsafe.Pointer(&_zero)) + } + vecs = append(vecs, v) + } + return vecs +} + +func writevRacedetect(iovecs []Iovec, n int) { + if !raceenabled { + return + } + for i := 0; n > 0 && i < len(iovecs); i++ { + m := int(iovecs[i].Len) + if m > n { + m = n + } + n -= m + if m > 0 { + raceReadRange(unsafe.Pointer(iovecs[i].Base), m) + } + } +} + +func readvRacedetect(iovecs []Iovec, n int, err error) { + if !raceenabled { + return + } + for i := 0; n > 0 && i < len(iovecs); i++ { + m := int(iovecs[i].Len) + if m > n { + m = n + } + n -= m + if m > 0 { + raceWriteRange(unsafe.Pointer(iovecs[i].Base), m) + } + } + if err == nil { + raceAcquire(unsafe.Pointer(&ioSync)) + } +} + //sys connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) //sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) @@ -705,3 +794,7 @@ func Connectx(fd int, srcIf uint32, srcAddr, dstAddr Sockaddr, associd SaeAssocI //sys write(fd int, p []byte) (n int, err error) //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) //sys munmap(addr uintptr, length uintptr) (err error) +//sys readv(fd int, iovecs []Iovec) (n int, err error) +//sys preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) +//sys writev(fd int, iovecs []Iovec) (n int, err error) +//sys pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index 230a945..4958a65 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -13,6 +13,7 @@ package unix import ( "encoding/binary" + "slices" "strconv" "syscall" "time" @@ -417,7 +418,7 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { return nil, 0, EINVAL } sa.raw.Family = AF_UNIX - for i := 0; i < n; i++ { + for i := range n { sa.raw.Path[i] = int8(name[i]) } // length is family (uint16), name, NUL. @@ -507,7 +508,7 @@ func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) { psm := (*[2]byte)(unsafe.Pointer(&sa.raw.Psm)) psm[0] = byte(sa.PSM) psm[1] = byte(sa.PSM >> 8) - for i := 0; i < len(sa.Addr); i++ { + for i := range len(sa.Addr) { sa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i] } cid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid)) @@ -589,11 +590,11 @@ func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) { sa.raw.Family = AF_CAN sa.raw.Ifindex = int32(sa.Ifindex) rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) - for i := 0; i < 4; i++ { + for i := range 4 { sa.raw.Addr[i] = rx[i] } tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) - for i := 0; i < 4; i++ { + for i := range 4 { sa.raw.Addr[i+4] = tx[i] } return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil @@ -618,11 +619,11 @@ func (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) { sa.raw.Family = AF_CAN sa.raw.Ifindex = int32(sa.Ifindex) n := (*[8]byte)(unsafe.Pointer(&sa.Name)) - for i := 0; i < 8; i++ { + for i := range 8 { sa.raw.Addr[i] = n[i] } p := (*[4]byte)(unsafe.Pointer(&sa.PGN)) - for i := 0; i < 4; i++ { + for i := range 4 { sa.raw.Addr[i+8] = p[i] } sa.raw.Addr[12] = sa.Addr @@ -911,7 +912,7 @@ func (sa *SockaddrIUCV) sockaddr() (unsafe.Pointer, _Socklen, error) { // These are EBCDIC encoded by the kernel, but we still need to pad them // with blanks. Initializing with blanks allows the caller to feed in either // a padded or an unpadded string. - for i := 0; i < 8; i++ { + for i := range 8 { sa.raw.Nodeid[i] = ' ' sa.raw.User_id[i] = ' ' sa.raw.Name[i] = ' ' @@ -1148,7 +1149,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { var user [8]byte var name [8]byte - for i := 0; i < 8; i++ { + for i := range 8 { user[i] = byte(pp.User_id[i]) name[i] = byte(pp.Name[i]) } @@ -1173,11 +1174,11 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { Ifindex: int(pp.Ifindex), } name := (*[8]byte)(unsafe.Pointer(&sa.Name)) - for i := 0; i < 8; i++ { + for i := range 8 { name[i] = pp.Addr[i] } pgn := (*[4]byte)(unsafe.Pointer(&sa.PGN)) - for i := 0; i < 4; i++ { + for i := range 4 { pgn[i] = pp.Addr[i+8] } addr := (*[1]byte)(unsafe.Pointer(&sa.Addr)) @@ -1188,11 +1189,11 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { Ifindex: int(pp.Ifindex), } rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) - for i := 0; i < 4; i++ { + for i := range 4 { rx[i] = pp.Addr[i] } tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) - for i := 0; i < 4; i++ { + for i := range 4 { tx[i] = pp.Addr[i+4] } return sa, nil @@ -2216,10 +2217,7 @@ func readvRacedetect(iovecs []Iovec, n int, err error) { return } for i := 0; n > 0 && i < len(iovecs); i++ { - m := int(iovecs[i].Len) - if m > n { - m = n - } + m := min(int(iovecs[i].Len), n) n -= m if m > 0 { raceWriteRange(unsafe.Pointer(iovecs[i].Base), m) @@ -2270,10 +2268,7 @@ func writevRacedetect(iovecs []Iovec, n int) { return } for i := 0; n > 0 && i < len(iovecs); i++ { - m := int(iovecs[i].Len) - if m > n { - m = n - } + m := min(int(iovecs[i].Len), n) n -= m if m > 0 { raceReadRange(unsafe.Pointer(iovecs[i].Base), m) @@ -2320,12 +2315,7 @@ func isGroupMember(gid int) bool { return false } - for _, g := range groups { - if g == gid { - return true - } - } - return false + return slices.Contains(groups, gid) } func isCapDacOverrideSet() bool { diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index 4f432bf..b6db27d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -319,6 +319,7 @@ const ( AUDIT_INTEGRITY_POLICY_RULE = 0x70f AUDIT_INTEGRITY_RULE = 0x70d AUDIT_INTEGRITY_STATUS = 0x70a + AUDIT_INTEGRITY_USERSPACE = 0x710 AUDIT_IPC = 0x517 AUDIT_IPC_SET_PERM = 0x51f AUDIT_IPE_ACCESS = 0x58c @@ -327,6 +328,8 @@ const ( AUDIT_KERNEL = 0x7d0 AUDIT_KERNEL_OTHER = 0x524 AUDIT_KERN_MODULE = 0x532 + AUDIT_LANDLOCK_ACCESS = 0x58f + AUDIT_LANDLOCK_DOMAIN = 0x590 AUDIT_LAST_FEATURE = 0x1 AUDIT_LAST_KERN_ANOM_MSG = 0x707 AUDIT_LAST_USER_MSG = 0x4af @@ -491,6 +494,7 @@ const ( BPF_F_BEFORE = 0x8 BPF_F_ID = 0x20 BPF_F_NETFILTER_IP_DEFRAG = 0x1 + BPF_F_PREORDER = 0x40 BPF_F_QUERY_EFFECTIVE = 0x1 BPF_F_REDIRECT_FLAGS = 0x19 BPF_F_REPLACE = 0x4 @@ -527,6 +531,7 @@ const ( BPF_LDX = 0x1 BPF_LEN = 0x80 BPF_LL_OFF = -0x200000 + BPF_LOAD_ACQ = 0x100 BPF_LSH = 0x60 BPF_MAJOR_VERSION = 0x1 BPF_MAXINSNS = 0x1000 @@ -554,6 +559,7 @@ const ( BPF_RET = 0x6 BPF_RSH = 0x70 BPF_ST = 0x2 + BPF_STORE_REL = 0x110 BPF_STX = 0x3 BPF_SUB = 0x10 BPF_TAG_SIZE = 0x8 @@ -843,9 +849,9 @@ const ( DM_UUID_FLAG = 0x4000 DM_UUID_LEN = 0x81 DM_VERSION = 0xc138fd00 - DM_VERSION_EXTRA = "-ioctl (2023-03-01)" + DM_VERSION_EXTRA = "-ioctl (2025-04-28)" DM_VERSION_MAJOR = 0x4 - DM_VERSION_MINOR = 0x30 + DM_VERSION_MINOR = 0x32 DM_VERSION_PATCHLEVEL = 0x0 DT_BLK = 0x6 DT_CHR = 0x2 @@ -936,11 +942,10 @@ const ( EPOLL_CTL_MOD = 0x3 EPOLL_IOC_TYPE = 0x8a EROFS_SUPER_MAGIC_V1 = 0xe0f5e1e2 - ESP_V4_FLOW = 0xa - ESP_V6_FLOW = 0xc - ETHER_FLOW = 0x12 ETHTOOL_BUSINFO_LEN = 0x20 ETHTOOL_EROMVERS_LEN = 0x20 + ETHTOOL_FAMILY_NAME = "ethtool" + ETHTOOL_FAMILY_VERSION = 0x1 ETHTOOL_FEC_AUTO = 0x2 ETHTOOL_FEC_BASER = 0x10 ETHTOOL_FEC_LLRS = 0x20 @@ -1203,13 +1208,18 @@ const ( FAN_DENY = 0x2 FAN_ENABLE_AUDIT = 0x40 FAN_EPIDFD = -0x2 + FAN_ERRNO_BITS = 0x8 + FAN_ERRNO_MASK = 0xff + FAN_ERRNO_SHIFT = 0x18 FAN_EVENT_INFO_TYPE_DFID = 0x3 FAN_EVENT_INFO_TYPE_DFID_NAME = 0x2 FAN_EVENT_INFO_TYPE_ERROR = 0x5 FAN_EVENT_INFO_TYPE_FID = 0x1 + FAN_EVENT_INFO_TYPE_MNT = 0x7 FAN_EVENT_INFO_TYPE_NEW_DFID_NAME = 0xc FAN_EVENT_INFO_TYPE_OLD_DFID_NAME = 0xa FAN_EVENT_INFO_TYPE_PIDFD = 0x4 + FAN_EVENT_INFO_TYPE_RANGE = 0x6 FAN_EVENT_METADATA_LEN = 0x18 FAN_EVENT_ON_CHILD = 0x8000000 FAN_FS_ERROR = 0x8000 @@ -1224,9 +1234,12 @@ const ( FAN_MARK_IGNORED_SURV_MODIFY = 0x40 FAN_MARK_IGNORE_SURV = 0x440 FAN_MARK_INODE = 0x0 + FAN_MARK_MNTNS = 0x110 FAN_MARK_MOUNT = 0x10 FAN_MARK_ONLYDIR = 0x8 FAN_MARK_REMOVE = 0x2 + FAN_MNT_ATTACH = 0x1000000 + FAN_MNT_DETACH = 0x2000000 FAN_MODIFY = 0x2 FAN_MOVE = 0xc0 FAN_MOVED_FROM = 0x40 @@ -1240,6 +1253,7 @@ const ( FAN_OPEN_EXEC = 0x1000 FAN_OPEN_EXEC_PERM = 0x40000 FAN_OPEN_PERM = 0x10000 + FAN_PRE_ACCESS = 0x100000 FAN_Q_OVERFLOW = 0x4000 FAN_RENAME = 0x10000000 FAN_REPORT_DFID_NAME = 0xc00 @@ -1247,6 +1261,7 @@ const ( FAN_REPORT_DIR_FID = 0x400 FAN_REPORT_FD_ERROR = 0x2000 FAN_REPORT_FID = 0x200 + FAN_REPORT_MNT = 0x4000 FAN_REPORT_NAME = 0x800 FAN_REPORT_PIDFD = 0x80 FAN_REPORT_TARGET_FID = 0x1000 @@ -1266,6 +1281,7 @@ const ( FIB_RULE_PERMANENT = 0x1 FIB_RULE_UNRESOLVED = 0x4 FIDEDUPERANGE = 0xc0189436 + FSCRYPT_ADD_KEY_FLAG_HW_WRAPPED = 0x1 FSCRYPT_KEY_DESCRIPTOR_SIZE = 0x8 FSCRYPT_KEY_DESC_PREFIX = "fscrypt:" FSCRYPT_KEY_DESC_PREFIX_SIZE = 0x8 @@ -1574,7 +1590,6 @@ const ( IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 IPV6_DSTOPTS = 0x3b - IPV6_FLOW = 0x11 IPV6_FREEBIND = 0x4e IPV6_HDRINCL = 0x24 IPV6_HOPLIMIT = 0x34 @@ -1625,7 +1640,6 @@ const ( IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 IPV6_UNICAST_IF = 0x4c - IPV6_USER_FLOW = 0xe IPV6_V6ONLY = 0x1a IPV6_VERSION = 0x60 IPV6_VERSION_MASK = 0xf0 @@ -1687,7 +1701,6 @@ const ( IP_TTL = 0x2 IP_UNBLOCK_SOURCE = 0x25 IP_UNICAST_IF = 0x32 - IP_USER_FLOW = 0xd IP_XFRM_POLICY = 0x11 ISOFS_SUPER_MAGIC = 0x9660 ISTRIP = 0x20 @@ -1809,7 +1822,11 @@ const ( LANDLOCK_ACCESS_FS_WRITE_FILE = 0x2 LANDLOCK_ACCESS_NET_BIND_TCP = 0x1 LANDLOCK_ACCESS_NET_CONNECT_TCP = 0x2 + LANDLOCK_CREATE_RULESET_ERRATA = 0x2 LANDLOCK_CREATE_RULESET_VERSION = 0x1 + LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON = 0x2 + LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF = 0x1 + LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF = 0x4 LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET = 0x1 LANDLOCK_SCOPE_SIGNAL = 0x2 LINUX_REBOOT_CMD_CAD_OFF = 0x0 @@ -2485,6 +2502,10 @@ const ( PR_FP_EXC_UND = 0x40000 PR_FP_MODE_FR = 0x1 PR_FP_MODE_FRE = 0x2 + PR_FUTEX_HASH = 0x4e + PR_FUTEX_HASH_GET_IMMUTABLE = 0x3 + PR_FUTEX_HASH_GET_SLOTS = 0x2 + PR_FUTEX_HASH_SET_SLOTS = 0x1 PR_GET_AUXV = 0x41555856 PR_GET_CHILD_SUBREAPER = 0x25 PR_GET_DUMPABLE = 0x3 @@ -2644,6 +2665,10 @@ const ( PR_TAGGED_ADDR_ENABLE = 0x1 PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMER_CREATE_RESTORE_IDS = 0x4d + PR_TIMER_CREATE_RESTORE_IDS_GET = 0x2 + PR_TIMER_CREATE_RESTORE_IDS_OFF = 0x0 + PR_TIMER_CREATE_RESTORE_IDS_ON = 0x1 PR_TIMING_STATISTICAL = 0x0 PR_TIMING_TIMESTAMP = 0x1 PR_TSC_ENABLE = 0x1 @@ -2724,6 +2749,7 @@ const ( PTRACE_SETREGSET = 0x4205 PTRACE_SETSIGINFO = 0x4203 PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_SYSCALL_INFO = 0x4212 PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG = 0x4210 PTRACE_SINGLESTEP = 0x9 PTRACE_SYSCALL = 0x18 @@ -2787,7 +2813,7 @@ const ( RTAX_UNSPEC = 0x0 RTAX_WINDOW = 0x3 RTA_ALIGNTO = 0x4 - RTA_MAX = 0x1e + RTA_MAX = 0x1f RTCF_DIRECTSRC = 0x4000000 RTCF_DOREDIRECT = 0x1000000 RTCF_LOG = 0x2000000 @@ -2864,10 +2890,12 @@ const ( RTM_DELACTION = 0x31 RTM_DELADDR = 0x15 RTM_DELADDRLABEL = 0x49 + RTM_DELANYCAST = 0x3d RTM_DELCHAIN = 0x65 RTM_DELLINK = 0x11 RTM_DELLINKPROP = 0x6d RTM_DELMDB = 0x55 + RTM_DELMULTICAST = 0x39 RTM_DELNEIGH = 0x1d RTM_DELNETCONF = 0x51 RTM_DELNEXTHOP = 0x69 @@ -2917,11 +2945,13 @@ const ( RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 + RTM_NEWANYCAST = 0x3c RTM_NEWCACHEREPORT = 0x60 RTM_NEWCHAIN = 0x64 RTM_NEWLINK = 0x10 RTM_NEWLINKPROP = 0x6c RTM_NEWMDB = 0x54 + RTM_NEWMULTICAST = 0x38 RTM_NEWNDUSEROPT = 0x44 RTM_NEWNEIGH = 0x1c RTM_NEWNEIGHTBL = 0x40 @@ -2970,6 +3000,7 @@ const ( RTPROT_NTK = 0xf RTPROT_OPENR = 0x63 RTPROT_OSPF = 0xbc + RTPROT_OVN = 0x54 RTPROT_RA = 0x9 RTPROT_REDIRECT = 0x1 RTPROT_RIP = 0xbd @@ -2987,11 +3018,12 @@ const ( RUSAGE_THREAD = 0x1 RWF_APPEND = 0x10 RWF_ATOMIC = 0x40 + RWF_DONTCACHE = 0x80 RWF_DSYNC = 0x2 RWF_HIPRI = 0x1 RWF_NOAPPEND = 0x20 RWF_NOWAIT = 0x8 - RWF_SUPPORTED = 0x7f + RWF_SUPPORTED = 0xff RWF_SYNC = 0x4 RWF_WRITE_LIFE_NOT_SET = 0x0 SCHED_BATCH = 0x3 @@ -3271,6 +3303,7 @@ const ( STATX_BTIME = 0x800 STATX_CTIME = 0x80 STATX_DIOALIGN = 0x2000 + STATX_DIO_READ_ALIGN = 0x20000 STATX_GID = 0x10 STATX_INO = 0x100 STATX_MNT_ID = 0x1000 @@ -3322,7 +3355,7 @@ const ( TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 - TASKSTATS_VERSION = 0xe + TASKSTATS_VERSION = 0x10 TCIFLUSH = 0x0 TCIOFF = 0x2 TCIOFLUSH = 0x2 @@ -3392,8 +3425,6 @@ const ( TCP_TX_DELAY = 0x25 TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 - TCP_V4_FLOW = 0x1 - TCP_V6_FLOW = 0x5 TCP_WINDOW_CLAMP = 0xa TCP_ZEROCOPY_RECEIVE = 0x23 TFD_TIMER_ABSTIME = 0x1 @@ -3503,6 +3534,7 @@ const ( TP_STATUS_WRONG_FORMAT = 0x4 TRACEFS_MAGIC = 0x74726163 TS_COMM_LEN = 0x20 + UBI_IOCECNFO = 0xc01c6f06 UDF_SUPER_MAGIC = 0x15013346 UDP_CORK = 0x1 UDP_ENCAP = 0x64 @@ -3515,8 +3547,6 @@ const ( UDP_NO_CHECK6_RX = 0x66 UDP_NO_CHECK6_TX = 0x65 UDP_SEGMENT = 0x67 - UDP_V4_FLOW = 0x2 - UDP_V6_FLOW = 0x6 UMOUNT_NOFOLLOW = 0x8 USBDEVICE_SUPER_MAGIC = 0x9fa2 UTIME_NOW = 0x3fffffff @@ -3559,7 +3589,7 @@ const ( WDIOS_TEMPPANIC = 0x4 WDIOS_UNKNOWN = -0x1 WEXITED = 0x4 - WGALLOWEDIP_A_MAX = 0x3 + WGALLOWEDIP_A_MAX = 0x4 WGDEVICE_A_MAX = 0x8 WGPEER_A_MAX = 0xa WG_CMD_MAX = 0x1 @@ -3673,6 +3703,7 @@ const ( XDP_SHARED_UMEM = 0x1 XDP_STATISTICS = 0x7 XDP_TXMD_FLAGS_CHECKSUM = 0x2 + XDP_TXMD_FLAGS_LAUNCH_TIME = 0x4 XDP_TXMD_FLAGS_TIMESTAMP = 0x1 XDP_TX_METADATA = 0x2 XDP_TX_RING = 0x3 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 7520761..1c37f9f 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -360,6 +361,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -372,6 +374,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 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 c68acda..6f54d34 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -361,6 +362,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -373,6 +375,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 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 a8c607a..783ec5c 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -366,6 +367,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -378,6 +380,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 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 18563dd..ca83d3b 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -359,6 +360,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -371,6 +373,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go index 22912cd..607e611 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -353,6 +354,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -365,6 +367,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 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 29344eb..b9cb5bd 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -359,6 +360,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -371,6 +373,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 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 20d51fb..65b078a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -359,6 +360,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -371,6 +373,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 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 321b609..5298a30 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -359,6 +360,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -371,6 +373,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 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 9bacdf1..7bc557c 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -359,6 +360,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -371,6 +373,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index c224272..152399b 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -68,6 +68,7 @@ const ( CS8 = 0x300 CSIZE = 0x300 CSTOPB = 0x400 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x40 @@ -414,6 +415,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x14 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x15 @@ -426,6 +428,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x10 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 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 6270c8e..1a1ce24 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x300 CSIZE = 0x300 CSTOPB = 0x400 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x40 @@ -418,6 +419,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x14 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x15 @@ -430,6 +432,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x10 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 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 9966c19..4231a1f 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -68,6 +68,7 @@ const ( CS8 = 0x300 CSIZE = 0x300 CSTOPB = 0x400 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x40 @@ -418,6 +419,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x14 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x15 @@ -430,6 +432,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x10 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index 848e5fc..21c0e95 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -350,6 +351,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -362,6 +364,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 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 669b2ad..f00d1cd 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -422,6 +423,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -434,6 +436,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 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 4834e57..bc8d539 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -71,6 +71,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -461,6 +462,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x2 SO_PASSPIDFD = 0x55 + SO_PASSRIGHTS = 0x5c SO_PASSSEC = 0x1f SO_PEEK_OFF = 0x26 SO_PEERCRED = 0x40 @@ -473,6 +475,7 @@ const ( SO_RCVBUFFORCE = 0x100b SO_RCVLOWAT = 0x800 SO_RCVMARK = 0x54 + SO_RCVPRIORITY = 0x5b SO_RCVTIMEO = 0x2000 SO_RCVTIMEO_NEW = 0x44 SO_RCVTIMEO_OLD = 0x2000 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 24b346e..813c05b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -2512,6 +2512,90 @@ var libc_munmap_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func readv(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readv readv "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_preadv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_preadv preadv "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writev(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_writev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_writev writev "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pwritev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwritev pwritev "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstat(fd int, stat *Stat_t) (err error) { _, _, e1 := syscall_syscall(libc_fstat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s index ebd2131..fda3285 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -738,6 +738,26 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) +TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readv(SB) +GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB) + +TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_preadv(SB) +GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB) + +TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_writev(SB) +GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB) + +TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwritev(SB) +GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB) + TEXT libc_fstat64_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fstat64(SB) GLOBL ·libc_fstat64_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index 824b9c2..e6f58f3 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -2512,6 +2512,90 @@ var libc_munmap_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func readv(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readv readv "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_preadv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_preadv preadv "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writev(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_writev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_writev writev "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pwritev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwritev pwritev "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstat(fd int, stat *Stat_t) (err error) { _, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s index 4f178a2..7f8998b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -738,6 +738,26 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) +TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readv(SB) +GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB) + +TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_preadv(SB) +GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB) + +TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_writev(SB) +GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB) + +TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwritev(SB) +GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB) + TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fstat(SB) GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go index c79aaff..aca56ee 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -462,4 +462,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) 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 5eb4506..2ea1ef5 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -385,4 +385,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) 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 05e5029..d22c8af 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -426,4 +426,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) 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 38c53ec..5ee264a 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -329,4 +329,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go index 31d2e71..f9f03eb 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go @@ -325,4 +325,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) 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 f4184a3..87c2118 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -446,4 +446,5 @@ const ( SYS_GETXATTRAT = 4464 SYS_LISTXATTRAT = 4465 SYS_REMOVEXATTRAT = 4466 + SYS_OPEN_TREE_ATTR = 4467 ) 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 05b9962..391ad10 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -376,4 +376,5 @@ const ( SYS_GETXATTRAT = 5464 SYS_LISTXATTRAT = 5465 SYS_REMOVEXATTRAT = 5466 + SYS_OPEN_TREE_ATTR = 5467 ) 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 43a256e..5656157 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -376,4 +376,5 @@ const ( SYS_GETXATTRAT = 5464 SYS_LISTXATTRAT = 5465 SYS_REMOVEXATTRAT = 5466 + SYS_OPEN_TREE_ATTR = 5467 ) 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 eea5ddf..0482b52 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -446,4 +446,5 @@ const ( SYS_GETXATTRAT = 4464 SYS_LISTXATTRAT = 4465 SYS_REMOVEXATTRAT = 4466 + SYS_OPEN_TREE_ATTR = 4467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go index 0d777bf..71806f0 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -453,4 +453,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) 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 b446365..e35a710 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -425,4 +425,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) 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 0c7d21c..2aea476 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -425,4 +425,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index 8405391..6c9bb4e 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -330,4 +330,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) 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 fcf1b79..680bc99 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -391,4 +391,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) 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 52d15b5..620f271 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -404,4 +404,5 @@ const ( SYS_GETXATTRAT = 464 SYS_LISTXATTRAT = 465 SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index a46abe6..cd23644 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -114,8 +114,10 @@ type Statx_t struct { Atomic_write_unit_min uint32 Atomic_write_unit_max uint32 Atomic_write_segments_max uint32 + Dio_read_offset_align uint32 + Atomic_write_unit_max_opt uint32 _ [1]uint32 - _ [9]uint64 + _ [8]uint64 } type Fsid struct { @@ -199,7 +201,8 @@ type FscryptAddKeyArg struct { Key_spec FscryptKeySpecifier Raw_size uint32 Key_id uint32 - _ [8]uint32 + Flags uint32 + _ [7]uint32 } type FscryptRemoveKeyArg struct { @@ -2226,8 +2229,11 @@ const ( NFT_PAYLOAD_LL_HEADER = 0x0 NFT_PAYLOAD_NETWORK_HEADER = 0x1 NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_INNER_HEADER = 0x3 + NFT_PAYLOAD_TUN_HEADER = 0x4 NFT_PAYLOAD_CSUM_NONE = 0x0 NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_CSUM_SCTP = 0x2 NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 NFTA_PAYLOAD_UNSPEC = 0x0 NFTA_PAYLOAD_DREG = 0x1 @@ -2314,6 +2320,11 @@ const ( NFT_CT_AVGPKT = 0x10 NFT_CT_ZONE = 0x11 NFT_CT_EVENTMASK = 0x12 + NFT_CT_SRC_IP = 0x13 + NFT_CT_DST_IP = 0x14 + NFT_CT_SRC_IP6 = 0x15 + NFT_CT_DST_IP6 = 0x16 + NFT_CT_ID = 0x17 NFTA_CT_UNSPEC = 0x0 NFTA_CT_DREG = 0x1 NFTA_CT_KEY = 0x2 @@ -2594,8 +2605,8 @@ const ( SOF_TIMESTAMPING_BIND_PHC = 0x8000 SOF_TIMESTAMPING_OPT_ID_TCP = 0x10000 - SOF_TIMESTAMPING_LAST = 0x20000 - SOF_TIMESTAMPING_MASK = 0x3ffff + SOF_TIMESTAMPING_LAST = 0x40000 + SOF_TIMESTAMPING_MASK = 0x7ffff SCM_TSTAMP_SND = 0x0 SCM_TSTAMP_SCHED = 0x1 @@ -3802,7 +3813,16 @@ const ( ETHTOOL_MSG_PSE_GET = 0x24 ETHTOOL_MSG_PSE_SET = 0x25 ETHTOOL_MSG_RSS_GET = 0x26 - ETHTOOL_MSG_USER_MAX = 0x2d + ETHTOOL_MSG_PLCA_GET_CFG = 0x27 + ETHTOOL_MSG_PLCA_SET_CFG = 0x28 + ETHTOOL_MSG_PLCA_GET_STATUS = 0x29 + ETHTOOL_MSG_MM_GET = 0x2a + ETHTOOL_MSG_MM_SET = 0x2b + ETHTOOL_MSG_MODULE_FW_FLASH_ACT = 0x2c + ETHTOOL_MSG_PHY_GET = 0x2d + ETHTOOL_MSG_TSCONFIG_GET = 0x2e + ETHTOOL_MSG_TSCONFIG_SET = 0x2f + ETHTOOL_MSG_USER_MAX = 0x2f ETHTOOL_MSG_KERNEL_NONE = 0x0 ETHTOOL_MSG_STRSET_GET_REPLY = 0x1 ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2 @@ -3842,7 +3862,17 @@ const ( ETHTOOL_MSG_MODULE_NTF = 0x24 ETHTOOL_MSG_PSE_GET_REPLY = 0x25 ETHTOOL_MSG_RSS_GET_REPLY = 0x26 - ETHTOOL_MSG_KERNEL_MAX = 0x2e + ETHTOOL_MSG_PLCA_GET_CFG_REPLY = 0x27 + ETHTOOL_MSG_PLCA_GET_STATUS_REPLY = 0x28 + ETHTOOL_MSG_PLCA_NTF = 0x29 + ETHTOOL_MSG_MM_GET_REPLY = 0x2a + ETHTOOL_MSG_MM_NTF = 0x2b + ETHTOOL_MSG_MODULE_FW_FLASH_NTF = 0x2c + ETHTOOL_MSG_PHY_GET_REPLY = 0x2d + ETHTOOL_MSG_PHY_NTF = 0x2e + ETHTOOL_MSG_TSCONFIG_GET_REPLY = 0x2f + ETHTOOL_MSG_TSCONFIG_SET_REPLY = 0x30 + ETHTOOL_MSG_KERNEL_MAX = 0x30 ETHTOOL_FLAG_COMPACT_BITSETS = 0x1 ETHTOOL_FLAG_OMIT_REPLY = 0x2 ETHTOOL_FLAG_STATS = 0x4 @@ -3949,7 +3979,12 @@ const ( ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 0xb ETHTOOL_A_RINGS_CQE_SIZE = 0xc ETHTOOL_A_RINGS_TX_PUSH = 0xd - ETHTOOL_A_RINGS_MAX = 0x10 + ETHTOOL_A_RINGS_RX_PUSH = 0xe + ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN = 0xf + ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN_MAX = 0x10 + ETHTOOL_A_RINGS_HDS_THRESH = 0x11 + ETHTOOL_A_RINGS_HDS_THRESH_MAX = 0x12 + ETHTOOL_A_RINGS_MAX = 0x12 ETHTOOL_A_CHANNELS_UNSPEC = 0x0 ETHTOOL_A_CHANNELS_HEADER = 0x1 ETHTOOL_A_CHANNELS_RX_MAX = 0x2 @@ -4015,7 +4050,9 @@ const ( ETHTOOL_A_TSINFO_TX_TYPES = 0x3 ETHTOOL_A_TSINFO_RX_FILTERS = 0x4 ETHTOOL_A_TSINFO_PHC_INDEX = 0x5 - ETHTOOL_A_TSINFO_MAX = 0x6 + ETHTOOL_A_TSINFO_STATS = 0x6 + ETHTOOL_A_TSINFO_HWTSTAMP_PROVIDER = 0x7 + ETHTOOL_A_TSINFO_MAX = 0x9 ETHTOOL_A_CABLE_TEST_UNSPEC = 0x0 ETHTOOL_A_CABLE_TEST_HEADER = 0x1 ETHTOOL_A_CABLE_TEST_MAX = 0x1 @@ -4101,6 +4138,19 @@ const ( ETHTOOL_A_TUNNEL_INFO_MAX = 0x2 ) +const ( + TCP_V4_FLOW = 0x1 + UDP_V4_FLOW = 0x2 + TCP_V6_FLOW = 0x5 + UDP_V6_FLOW = 0x6 + ESP_V4_FLOW = 0xa + ESP_V6_FLOW = 0xc + IP_USER_FLOW = 0xd + IPV6_USER_FLOW = 0xe + IPV6_FLOW = 0x11 + ETHER_FLOW = 0x12 +) + const SPEED_UNKNOWN = -0x1 type EthtoolDrvinfo struct { @@ -4613,6 +4663,7 @@ const ( NL80211_ATTR_AKM_SUITES = 0x4c NL80211_ATTR_AP_ISOLATE = 0x60 NL80211_ATTR_AP_SETTINGS_FLAGS = 0x135 + NL80211_ATTR_ASSOC_SPP_AMSDU = 0x14a NL80211_ATTR_AUTH_DATA = 0x9c NL80211_ATTR_AUTH_TYPE = 0x35 NL80211_ATTR_BANDS = 0xef @@ -4623,6 +4674,7 @@ const ( NL80211_ATTR_BSS_BASIC_RATES = 0x24 NL80211_ATTR_BSS = 0x2f NL80211_ATTR_BSS_CTS_PROT = 0x1c + NL80211_ATTR_BSS_DUMP_INCLUDE_USE_DATA = 0x147 NL80211_ATTR_BSS_HT_OPMODE = 0x6d NL80211_ATTR_BSSID = 0xf5 NL80211_ATTR_BSS_SELECT = 0xe3 @@ -4682,6 +4734,7 @@ const ( NL80211_ATTR_DTIM_PERIOD = 0xd NL80211_ATTR_DURATION = 0x57 NL80211_ATTR_EHT_CAPABILITY = 0x136 + NL80211_ATTR_EMA_RNR_ELEMS = 0x145 NL80211_ATTR_EML_CAPABILITY = 0x13d NL80211_ATTR_EXT_CAPA = 0xa9 NL80211_ATTR_EXT_CAPA_MASK = 0xaa @@ -4717,6 +4770,7 @@ const ( NL80211_ATTR_HIDDEN_SSID = 0x7e NL80211_ATTR_HT_CAPABILITY = 0x1f NL80211_ATTR_HT_CAPABILITY_MASK = 0x94 + NL80211_ATTR_HW_TIMESTAMP_ENABLED = 0x144 NL80211_ATTR_IE_ASSOC_RESP = 0x80 NL80211_ATTR_IE = 0x2a NL80211_ATTR_IE_PROBE_RESP = 0x7f @@ -4747,9 +4801,10 @@ const ( NL80211_ATTR_MAC_HINT = 0xc8 NL80211_ATTR_MAC_MASK = 0xd7 NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x14d + NL80211_ATTR_MAX = 0x151 NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 NL80211_ATTR_MAX_CSA_COUNTERS = 0xce + NL80211_ATTR_MAX_HW_TIMESTAMP_PEERS = 0x143 NL80211_ATTR_MAX_MATCH_SETS = 0x85 NL80211_ATTR_MAX_NUM_AKM_SUITES = 0x13c NL80211_ATTR_MAX_NUM_PMKIDS = 0x56 @@ -4774,9 +4829,12 @@ const ( NL80211_ATTR_MGMT_SUBTYPE = 0x29 NL80211_ATTR_MLD_ADDR = 0x13a NL80211_ATTR_MLD_CAPA_AND_OPS = 0x13e + NL80211_ATTR_MLO_LINK_DISABLED = 0x146 NL80211_ATTR_MLO_LINK_ID = 0x139 NL80211_ATTR_MLO_LINKS = 0x138 NL80211_ATTR_MLO_SUPPORT = 0x13b + NL80211_ATTR_MLO_TTLM_DLINK = 0x148 + NL80211_ATTR_MLO_TTLM_ULINK = 0x149 NL80211_ATTR_MNTR_FLAGS = 0x17 NL80211_ATTR_MPATH_INFO = 0x1b NL80211_ATTR_MPATH_NEXT_HOP = 0x1a @@ -4809,12 +4867,14 @@ const ( NL80211_ATTR_PORT_AUTHORIZED = 0x103 NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN = 0x5 NL80211_ATTR_POWER_RULE_MAX_EIRP = 0x6 + NL80211_ATTR_POWER_RULE_PSD = 0x8 NL80211_ATTR_PREV_BSSID = 0x4f NL80211_ATTR_PRIVACY = 0x46 NL80211_ATTR_PROBE_RESP = 0x91 NL80211_ATTR_PROBE_RESP_OFFLOAD = 0x90 NL80211_ATTR_PROTOCOL_FEATURES = 0xad NL80211_ATTR_PS_STATE = 0x5d + NL80211_ATTR_PUNCT_BITMAP = 0x142 NL80211_ATTR_QOS_MAP = 0xc7 NL80211_ATTR_RADAR_BACKGROUND = 0x134 NL80211_ATTR_RADAR_EVENT = 0xa8 @@ -4943,7 +5003,9 @@ const ( NL80211_ATTR_WIPHY_FREQ = 0x26 NL80211_ATTR_WIPHY_FREQ_HINT = 0xc9 NL80211_ATTR_WIPHY_FREQ_OFFSET = 0x122 + NL80211_ATTR_WIPHY_INTERFACE_COMBINATIONS = 0x14c NL80211_ATTR_WIPHY_NAME = 0x2 + NL80211_ATTR_WIPHY_RADIOS = 0x14b NL80211_ATTR_WIPHY_RETRY_LONG = 0x3e NL80211_ATTR_WIPHY_RETRY_SHORT = 0x3d NL80211_ATTR_WIPHY_RTS_THRESHOLD = 0x40 @@ -4978,6 +5040,8 @@ const ( NL80211_BAND_ATTR_IFTYPE_DATA = 0x9 NL80211_BAND_ATTR_MAX = 0xd NL80211_BAND_ATTR_RATES = 0x2 + NL80211_BAND_ATTR_S1G_CAPA = 0xd + NL80211_BAND_ATTR_S1G_MCS_NSS_SET = 0xc NL80211_BAND_ATTR_VHT_CAPA = 0x8 NL80211_BAND_ATTR_VHT_MCS_SET = 0x7 NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC = 0x8 @@ -5001,6 +5065,10 @@ const ( NL80211_BSS_BEACON_INTERVAL = 0x4 NL80211_BSS_BEACON_TSF = 0xd NL80211_BSS_BSSID = 0x1 + NL80211_BSS_CANNOT_USE_6GHZ_PWR_MISMATCH = 0x2 + NL80211_BSS_CANNOT_USE_NSTR_NONPRIMARY = 0x1 + NL80211_BSS_CANNOT_USE_REASONS = 0x18 + NL80211_BSS_CANNOT_USE_UHB_PWR_MISMATCH = 0x2 NL80211_BSS_CAPABILITY = 0x5 NL80211_BSS_CHAIN_SIGNAL = 0x13 NL80211_BSS_CHAN_WIDTH_10 = 0x1 @@ -5032,6 +5100,9 @@ const ( NL80211_BSS_STATUS = 0x9 NL80211_BSS_STATUS_IBSS_JOINED = 0x2 NL80211_BSS_TSF = 0x3 + NL80211_BSS_USE_FOR = 0x17 + NL80211_BSS_USE_FOR_MLD_LINK = 0x2 + NL80211_BSS_USE_FOR_NORMAL = 0x1 NL80211_CHAN_HT20 = 0x1 NL80211_CHAN_HT40MINUS = 0x2 NL80211_CHAN_HT40PLUS = 0x3 @@ -5117,7 +5188,8 @@ const ( NL80211_CMD_LEAVE_IBSS = 0x2c NL80211_CMD_LEAVE_MESH = 0x45 NL80211_CMD_LEAVE_OCB = 0x6d - NL80211_CMD_MAX = 0x9b + NL80211_CMD_LINKS_REMOVED = 0x9a + NL80211_CMD_MAX = 0x9d NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 NL80211_CMD_MODIFY_LINK_STA = 0x97 NL80211_CMD_NAN_MATCH = 0x78 @@ -5161,6 +5233,7 @@ const ( NL80211_CMD_SET_COALESCE = 0x65 NL80211_CMD_SET_CQM = 0x3f NL80211_CMD_SET_FILS_AAD = 0x92 + NL80211_CMD_SET_HW_TIMESTAMP = 0x99 NL80211_CMD_SET_INTERFACE = 0x6 NL80211_CMD_SET_KEY = 0xa NL80211_CMD_SET_MAC_ACL = 0x5d @@ -5180,6 +5253,7 @@ const ( NL80211_CMD_SET_SAR_SPECS = 0x8c NL80211_CMD_SET_STATION = 0x12 NL80211_CMD_SET_TID_CONFIG = 0x89 + NL80211_CMD_SET_TID_TO_LINK_MAPPING = 0x9b NL80211_CMD_SET_TX_BITRATE_MASK = 0x39 NL80211_CMD_SET_WDS_PEER = 0x42 NL80211_CMD_SET_WIPHY = 0x2 @@ -5247,6 +5321,7 @@ const ( NL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 0x21 NL80211_EXT_FEATURE_AP_PMKSA_CACHING = 0x22 NL80211_EXT_FEATURE_AQL = 0x28 + NL80211_EXT_FEATURE_AUTH_AND_DEAUTH_RANDOM_TA = 0x40 NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT = 0x2e NL80211_EXT_FEATURE_BEACON_PROTECTION = 0x29 NL80211_EXT_FEATURE_BEACON_RATE_HE = 0x36 @@ -5262,6 +5337,7 @@ const ( NL80211_EXT_FEATURE_CQM_RSSI_LIST = 0xd NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT = 0x1b NL80211_EXT_FEATURE_DEL_IBSS_STA = 0x2c + NL80211_EXT_FEATURE_DFS_CONCURRENT = 0x43 NL80211_EXT_FEATURE_DFS_OFFLOAD = 0x19 NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 0x20 NL80211_EXT_FEATURE_EXT_KEY_ID = 0x24 @@ -5281,9 +5357,12 @@ const ( NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 0x14 NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE = 0x13 NL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION = 0x31 + NL80211_EXT_FEATURE_OWE_OFFLOAD_AP = 0x42 + NL80211_EXT_FEATURE_OWE_OFFLOAD = 0x41 NL80211_EXT_FEATURE_POWERED_ADDR_CHANGE = 0x3d NL80211_EXT_FEATURE_PROTECTED_TWT = 0x2b NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE = 0x39 + NL80211_EXT_FEATURE_PUNCT = 0x3e NL80211_EXT_FEATURE_RADAR_BACKGROUND = 0x3c NL80211_EXT_FEATURE_RRM = 0x1 NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 0x33 @@ -5295,8 +5374,10 @@ const ( NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 0x23 NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI = 0xc NL80211_EXT_FEATURE_SECURE_LTF = 0x37 + NL80211_EXT_FEATURE_SECURE_NAN = 0x3f NL80211_EXT_FEATURE_SECURE_RTT = 0x38 NL80211_EXT_FEATURE_SET_SCAN_DWELL = 0x5 + NL80211_EXT_FEATURE_SPP_AMSDU_SUPPORT = 0x44 NL80211_EXT_FEATURE_STA_TX_PWR = 0x25 NL80211_EXT_FEATURE_TXQS = 0x1c NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 0x35 @@ -5343,7 +5424,10 @@ const ( NL80211_FREQUENCY_ATTR_2MHZ = 0x16 NL80211_FREQUENCY_ATTR_4MHZ = 0x17 NL80211_FREQUENCY_ATTR_8MHZ = 0x18 + NL80211_FREQUENCY_ATTR_ALLOW_6GHZ_VLP_AP = 0x21 + NL80211_FREQUENCY_ATTR_CAN_MONITOR = 0x20 NL80211_FREQUENCY_ATTR_DFS_CAC_TIME = 0xd + NL80211_FREQUENCY_ATTR_DFS_CONCURRENT = 0x1d NL80211_FREQUENCY_ATTR_DFS_STATE = 0x7 NL80211_FREQUENCY_ATTR_DFS_TIME = 0x8 NL80211_FREQUENCY_ATTR_DISABLED = 0x2 @@ -5351,12 +5435,14 @@ const ( NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf - NL80211_FREQUENCY_ATTR_MAX = 0x21 + NL80211_FREQUENCY_ATTR_MAX = 0x22 NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 0x6 NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11 NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc NL80211_FREQUENCY_ATTR_NO_20MHZ = 0x10 NL80211_FREQUENCY_ATTR_NO_320MHZ = 0x1a + NL80211_FREQUENCY_ATTR_NO_6GHZ_AFC_CLIENT = 0x1f + NL80211_FREQUENCY_ATTR_NO_6GHZ_VLP_CLIENT = 0x1e NL80211_FREQUENCY_ATTR_NO_80MHZ = 0xb NL80211_FREQUENCY_ATTR_NO_EHT = 0x1b NL80211_FREQUENCY_ATTR_NO_HE = 0x13 @@ -5364,8 +5450,11 @@ const ( NL80211_FREQUENCY_ATTR_NO_HT40_PLUS = 0xa NL80211_FREQUENCY_ATTR_NO_IBSS = 0x3 NL80211_FREQUENCY_ATTR_NO_IR = 0x3 + NL80211_FREQUENCY_ATTR_NO_UHB_AFC_CLIENT = 0x1f + NL80211_FREQUENCY_ATTR_NO_UHB_VLP_CLIENT = 0x1e NL80211_FREQUENCY_ATTR_OFFSET = 0x14 NL80211_FREQUENCY_ATTR_PASSIVE_SCAN = 0x3 + NL80211_FREQUENCY_ATTR_PSD = 0x1c NL80211_FREQUENCY_ATTR_RADAR = 0x5 NL80211_FREQUENCY_ATTR_WMM = 0x12 NL80211_FTM_RESP_ATTR_CIVICLOC = 0x3 @@ -5430,6 +5519,7 @@ const ( NL80211_IFTYPE_STATION = 0x2 NL80211_IFTYPE_UNSPECIFIED = 0x0 NL80211_IFTYPE_WDS = 0x5 + NL80211_KCK_EXT_LEN_32 = 0x20 NL80211_KCK_EXT_LEN = 0x18 NL80211_KCK_LEN = 0x10 NL80211_KEK_EXT_LEN = 0x20 @@ -5458,9 +5548,10 @@ const ( NL80211_MAX_SUPP_HT_RATES = 0x4d NL80211_MAX_SUPP_RATES = 0x20 NL80211_MAX_SUPP_REG_RULES = 0x80 + NL80211_MAX_SUPP_SELECTORS = 0x80 NL80211_MBSSID_CONFIG_ATTR_EMA = 0x5 NL80211_MBSSID_CONFIG_ATTR_INDEX = 0x3 - NL80211_MBSSID_CONFIG_ATTR_MAX = 0x5 + NL80211_MBSSID_CONFIG_ATTR_MAX = 0x6 NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY = 0x2 NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES = 0x1 NL80211_MBSSID_CONFIG_ATTR_TX_IFINDEX = 0x4 @@ -5703,11 +5794,16 @@ const ( NL80211_RADAR_PRE_CAC_EXPIRED = 0x4 NL80211_RATE_INFO_10_MHZ_WIDTH = 0xb NL80211_RATE_INFO_160_MHZ_WIDTH = 0xa + NL80211_RATE_INFO_16_MHZ_WIDTH = 0x1d + NL80211_RATE_INFO_1_MHZ_WIDTH = 0x19 + NL80211_RATE_INFO_2_MHZ_WIDTH = 0x1a NL80211_RATE_INFO_320_MHZ_WIDTH = 0x12 NL80211_RATE_INFO_40_MHZ_WIDTH = 0x3 + NL80211_RATE_INFO_4_MHZ_WIDTH = 0x1b NL80211_RATE_INFO_5_MHZ_WIDTH = 0xc NL80211_RATE_INFO_80_MHZ_WIDTH = 0x8 NL80211_RATE_INFO_80P80_MHZ_WIDTH = 0x9 + NL80211_RATE_INFO_8_MHZ_WIDTH = 0x1c NL80211_RATE_INFO_BITRATE32 = 0x5 NL80211_RATE_INFO_BITRATE = 0x1 NL80211_RATE_INFO_EHT_GI_0_8 = 0x0 @@ -5753,6 +5849,8 @@ const ( NL80211_RATE_INFO_HE_RU_ALLOC = 0x11 NL80211_RATE_INFO_MAX = 0x1d NL80211_RATE_INFO_MCS = 0x2 + NL80211_RATE_INFO_S1G_MCS = 0x17 + NL80211_RATE_INFO_S1G_NSS = 0x18 NL80211_RATE_INFO_SHORT_GI = 0x4 NL80211_RATE_INFO_VHT_MCS = 0x6 NL80211_RATE_INFO_VHT_NSS = 0x7 @@ -5770,14 +5868,19 @@ const ( NL80211_REKEY_DATA_KEK = 0x1 NL80211_REKEY_DATA_REPLAY_CTR = 0x3 NL80211_REPLAY_CTR_LEN = 0x8 + NL80211_RRF_ALLOW_6GHZ_VLP_AP = 0x1000000 NL80211_RRF_AUTO_BW = 0x800 NL80211_RRF_DFS = 0x10 + NL80211_RRF_DFS_CONCURRENT = 0x200000 NL80211_RRF_GO_CONCURRENT = 0x1000 NL80211_RRF_IR_CONCURRENT = 0x1000 NL80211_RRF_NO_160MHZ = 0x10000 NL80211_RRF_NO_320MHZ = 0x40000 + NL80211_RRF_NO_6GHZ_AFC_CLIENT = 0x800000 + NL80211_RRF_NO_6GHZ_VLP_CLIENT = 0x400000 NL80211_RRF_NO_80MHZ = 0x8000 NL80211_RRF_NO_CCK = 0x2 + NL80211_RRF_NO_EHT = 0x80000 NL80211_RRF_NO_HE = 0x20000 NL80211_RRF_NO_HT40 = 0x6000 NL80211_RRF_NO_HT40MINUS = 0x2000 @@ -5788,7 +5891,10 @@ const ( NL80211_RRF_NO_IR = 0x80 NL80211_RRF_NO_OFDM = 0x1 NL80211_RRF_NO_OUTDOOR = 0x8 + NL80211_RRF_NO_UHB_AFC_CLIENT = 0x800000 + NL80211_RRF_NO_UHB_VLP_CLIENT = 0x400000 NL80211_RRF_PASSIVE_SCAN = 0x80 + NL80211_RRF_PSD = 0x100000 NL80211_RRF_PTMP_ONLY = 0x40 NL80211_RRF_PTP_ONLY = 0x20 NL80211_RXMGMT_FLAG_ANSWERED = 0x1 @@ -5849,6 +5955,7 @@ const ( NL80211_STA_FLAG_MAX_OLD_API = 0x6 NL80211_STA_FLAG_MFP = 0x4 NL80211_STA_FLAG_SHORT_PREAMBLE = 0x2 + NL80211_STA_FLAG_SPP_AMSDU = 0x8 NL80211_STA_FLAG_TDLS_PEER = 0x6 NL80211_STA_FLAG_WME = 0x3 NL80211_STA_INFO_ACK_SIGNAL_AVG = 0x23 @@ -6007,6 +6114,13 @@ const ( NL80211_VHT_CAPABILITY_LEN = 0xc NL80211_VHT_NSS_MAX = 0x8 NL80211_WIPHY_NAME_MAXLEN = 0x40 + NL80211_WIPHY_RADIO_ATTR_FREQ_RANGE = 0x2 + NL80211_WIPHY_RADIO_ATTR_INDEX = 0x1 + NL80211_WIPHY_RADIO_ATTR_INTERFACE_COMBINATION = 0x3 + NL80211_WIPHY_RADIO_ATTR_MAX = 0x4 + NL80211_WIPHY_RADIO_FREQ_ATTR_END = 0x2 + NL80211_WIPHY_RADIO_FREQ_ATTR_MAX = 0x2 + NL80211_WIPHY_RADIO_FREQ_ATTR_START = 0x1 NL80211_WMMR_AIFSN = 0x3 NL80211_WMMR_CW_MAX = 0x2 NL80211_WMMR_CW_MIN = 0x1 @@ -6038,6 +6152,7 @@ const ( NL80211_WOWLAN_TRIG_PKT_PATTERN = 0x4 NL80211_WOWLAN_TRIG_RFKILL_RELEASE = 0x9 NL80211_WOWLAN_TRIG_TCP_CONNECTION = 0xe + NL80211_WOWLAN_TRIG_UNPROTECTED_DEAUTH_DISASSOC = 0x14 NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211 = 0xa NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN = 0xb NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023 = 0xc 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 fd402da..485f2d3 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -282,7 +282,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -338,6 +338,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 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 eb7a5e1..ecbd1ad 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -351,6 +351,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 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 d78ac10..02f0463 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -91,7 +91,7 @@ type Stat_t struct { Gid uint32 Rdev uint64 _ uint16 - _ [4]byte + _ [6]byte Size int64 Blksize int32 _ [4]byte @@ -273,7 +273,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -329,6 +329,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 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 cd06d47..6f4d400 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -330,6 +330,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go index 2f28fe2..cd532cf 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go @@ -331,6 +331,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 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 71d6cac..4133620 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -278,7 +278,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -334,6 +334,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 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 8596d45..eaa37eb 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -333,6 +333,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 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 cd60ea1..98ae6a1 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -333,6 +333,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 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 b0ae420..cae1961 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -278,7 +278,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -334,6 +334,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go index 8359728..6ce3b4e 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -90,7 +90,7 @@ type Stat_t struct { Gid uint32 Rdev uint64 _ uint16 - _ [4]byte + _ [6]byte Size int64 Blksize int32 _ [4]byte @@ -285,7 +285,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -341,6 +341,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 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 69eb6a5..c7429c6 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -340,6 +340,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 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 5f583cb..4bf4baf 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -340,6 +340,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index ad05b51..e9709d7 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -358,6 +358,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 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 cf3ce90..fb44268 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -353,6 +353,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 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 590b567..9c38265 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -335,6 +335,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/windows/aliases.go b/vendor/golang.org/x/sys/windows/aliases.go new file mode 100644 index 0000000..16f9056 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/aliases.go @@ -0,0 +1,12 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build windows + +package windows + +import "syscall" + +type Errno = syscall.Errno +type SysProcAttr = syscall.SysProcAttr diff --git a/vendor/golang.org/x/sys/windows/dll_windows.go b/vendor/golang.org/x/sys/windows/dll_windows.go new file mode 100644 index 0000000..3ca814f --- /dev/null +++ b/vendor/golang.org/x/sys/windows/dll_windows.go @@ -0,0 +1,415 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +import ( + "sync" + "sync/atomic" + "syscall" + "unsafe" +) + +// We need to use LoadLibrary and GetProcAddress from the Go runtime, because +// the these symbols are loaded by the system linker and are required to +// dynamically load additional symbols. Note that in the Go runtime, these +// return syscall.Handle and syscall.Errno, but these are the same, in fact, +// as windows.Handle and windows.Errno, and we intend to keep these the same. + +//go:linkname syscall_loadlibrary syscall.loadlibrary +func syscall_loadlibrary(filename *uint16) (handle Handle, err Errno) + +//go:linkname syscall_getprocaddress syscall.getprocaddress +func syscall_getprocaddress(handle Handle, procname *uint8) (proc uintptr, err Errno) + +// DLLError describes reasons for DLL load failures. +type DLLError struct { + Err error + ObjName string + Msg string +} + +func (e *DLLError) Error() string { return e.Msg } + +func (e *DLLError) Unwrap() error { return e.Err } + +// A DLL implements access to a single DLL. +type DLL struct { + Name string + Handle Handle +} + +// LoadDLL loads DLL file into memory. +// +// Warning: using LoadDLL without an absolute path name is subject to +// DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL], +// or use [LoadLibraryEx] directly. +func LoadDLL(name string) (dll *DLL, err error) { + namep, err := UTF16PtrFromString(name) + if err != nil { + return nil, err + } + h, e := syscall_loadlibrary(namep) + if e != 0 { + return nil, &DLLError{ + Err: e, + ObjName: name, + Msg: "Failed to load " + name + ": " + e.Error(), + } + } + d := &DLL{ + Name: name, + Handle: h, + } + return d, nil +} + +// MustLoadDLL is like LoadDLL but panics if load operation fails. +func MustLoadDLL(name string) *DLL { + d, e := LoadDLL(name) + if e != nil { + panic(e) + } + return d +} + +// FindProc searches DLL d for procedure named name and returns *Proc +// if found. It returns an error if search fails. +func (d *DLL) FindProc(name string) (proc *Proc, err error) { + namep, err := BytePtrFromString(name) + if err != nil { + return nil, err + } + a, e := syscall_getprocaddress(d.Handle, namep) + if e != 0 { + return nil, &DLLError{ + Err: e, + ObjName: name, + Msg: "Failed to find " + name + " procedure in " + d.Name + ": " + e.Error(), + } + } + p := &Proc{ + Dll: d, + Name: name, + addr: a, + } + return p, nil +} + +// MustFindProc is like FindProc but panics if search fails. +func (d *DLL) MustFindProc(name string) *Proc { + p, e := d.FindProc(name) + if e != nil { + panic(e) + } + return p +} + +// FindProcByOrdinal searches DLL d for procedure by ordinal and returns *Proc +// if found. It returns an error if search fails. +func (d *DLL) FindProcByOrdinal(ordinal uintptr) (proc *Proc, err error) { + a, e := GetProcAddressByOrdinal(d.Handle, ordinal) + name := "#" + itoa(int(ordinal)) + if e != nil { + return nil, &DLLError{ + Err: e, + ObjName: name, + Msg: "Failed to find " + name + " procedure in " + d.Name + ": " + e.Error(), + } + } + p := &Proc{ + Dll: d, + Name: name, + addr: a, + } + return p, nil +} + +// MustFindProcByOrdinal is like FindProcByOrdinal but panics if search fails. +func (d *DLL) MustFindProcByOrdinal(ordinal uintptr) *Proc { + p, e := d.FindProcByOrdinal(ordinal) + if e != nil { + panic(e) + } + return p +} + +// Release unloads DLL d from memory. +func (d *DLL) Release() (err error) { + return FreeLibrary(d.Handle) +} + +// A Proc implements access to a procedure inside a DLL. +type Proc struct { + Dll *DLL + Name string + addr uintptr +} + +// Addr returns the address of the procedure represented by p. +// The return value can be passed to Syscall to run the procedure. +func (p *Proc) Addr() uintptr { + return p.addr +} + +//go:uintptrescapes + +// Call executes procedure p with arguments a. It will panic, if more than 15 arguments +// are supplied. +// +// The returned error is always non-nil, constructed from the result of GetLastError. +// Callers must inspect the primary return value to decide whether an error occurred +// (according to the semantics of the specific function being called) before consulting +// the error. The error will be guaranteed to contain windows.Errno. +func (p *Proc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) { + switch len(a) { + case 0: + return syscall.Syscall(p.Addr(), uintptr(len(a)), 0, 0, 0) + case 1: + return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], 0, 0) + case 2: + return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], 0) + case 3: + return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], a[2]) + case 4: + return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], 0, 0) + case 5: + return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], 0) + case 6: + return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5]) + case 7: + return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], 0, 0) + case 8: + return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 0) + case 9: + return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]) + case 10: + return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], 0, 0) + case 11: + return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], 0) + case 12: + return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11]) + case 13: + return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], 0, 0) + case 14: + return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], 0) + case 15: + return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14]) + default: + panic("Call " + p.Name + " with too many arguments " + itoa(len(a)) + ".") + } +} + +// A LazyDLL implements access to a single DLL. +// It will delay the load of the DLL until the first +// call to its Handle method or to one of its +// LazyProc's Addr method. +type LazyDLL struct { + Name string + + // System determines whether the DLL must be loaded from the + // Windows System directory, bypassing the normal DLL search + // path. + System bool + + mu sync.Mutex + dll *DLL // non nil once DLL is loaded +} + +// Load loads DLL file d.Name into memory. It returns an error if fails. +// Load will not try to load DLL, if it is already loaded into memory. +func (d *LazyDLL) Load() error { + // Non-racy version of: + // if d.dll != nil { + if atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&d.dll))) != nil { + return nil + } + d.mu.Lock() + defer d.mu.Unlock() + if d.dll != nil { + return nil + } + + // kernel32.dll is special, since it's where LoadLibraryEx comes from. + // The kernel already special-cases its name, so it's always + // loaded from system32. + var dll *DLL + var err error + if d.Name == "kernel32.dll" { + dll, err = LoadDLL(d.Name) + } else { + dll, err = loadLibraryEx(d.Name, d.System) + } + if err != nil { + return err + } + + // Non-racy version of: + // d.dll = dll + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&d.dll)), unsafe.Pointer(dll)) + return nil +} + +// mustLoad is like Load but panics if search fails. +func (d *LazyDLL) mustLoad() { + e := d.Load() + if e != nil { + panic(e) + } +} + +// Handle returns d's module handle. +func (d *LazyDLL) Handle() uintptr { + d.mustLoad() + return uintptr(d.dll.Handle) +} + +// NewProc returns a LazyProc for accessing the named procedure in the DLL d. +func (d *LazyDLL) NewProc(name string) *LazyProc { + return &LazyProc{l: d, Name: name} +} + +// NewLazyDLL creates new LazyDLL associated with DLL file. +// +// Warning: using NewLazyDLL without an absolute path name is subject to +// DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL]. +func NewLazyDLL(name string) *LazyDLL { + return &LazyDLL{Name: name} +} + +// NewLazySystemDLL is like NewLazyDLL, but will only +// search Windows System directory for the DLL if name is +// a base name (like "advapi32.dll"). +func NewLazySystemDLL(name string) *LazyDLL { + return &LazyDLL{Name: name, System: true} +} + +// A LazyProc implements access to a procedure inside a LazyDLL. +// It delays the lookup until the Addr method is called. +type LazyProc struct { + Name string + + mu sync.Mutex + l *LazyDLL + proc *Proc +} + +// Find searches DLL for procedure named p.Name. It returns +// an error if search fails. Find will not search procedure, +// if it is already found and loaded into memory. +func (p *LazyProc) Find() error { + // Non-racy version of: + // if p.proc == nil { + if atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&p.proc))) == nil { + p.mu.Lock() + defer p.mu.Unlock() + if p.proc == nil { + e := p.l.Load() + if e != nil { + return e + } + proc, e := p.l.dll.FindProc(p.Name) + if e != nil { + return e + } + // Non-racy version of: + // p.proc = proc + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&p.proc)), unsafe.Pointer(proc)) + } + } + return nil +} + +// mustFind is like Find but panics if search fails. +func (p *LazyProc) mustFind() { + e := p.Find() + if e != nil { + panic(e) + } +} + +// Addr returns the address of the procedure represented by p. +// The return value can be passed to Syscall to run the procedure. +// It will panic if the procedure cannot be found. +func (p *LazyProc) Addr() uintptr { + p.mustFind() + return p.proc.Addr() +} + +//go:uintptrescapes + +// Call executes procedure p with arguments a. It will panic, if more than 15 arguments +// are supplied. It will also panic if the procedure cannot be found. +// +// The returned error is always non-nil, constructed from the result of GetLastError. +// Callers must inspect the primary return value to decide whether an error occurred +// (according to the semantics of the specific function being called) before consulting +// the error. The error will be guaranteed to contain windows.Errno. +func (p *LazyProc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) { + p.mustFind() + return p.proc.Call(a...) +} + +var canDoSearchSystem32Once struct { + sync.Once + v bool +} + +func initCanDoSearchSystem32() { + // https://msdn.microsoft.com/en-us/library/ms684179(v=vs.85).aspx says: + // "Windows 7, Windows Server 2008 R2, Windows Vista, and Windows + // Server 2008: The LOAD_LIBRARY_SEARCH_* flags are available on + // systems that have KB2533623 installed. To determine whether the + // flags are available, use GetProcAddress to get the address of the + // AddDllDirectory, RemoveDllDirectory, or SetDefaultDllDirectories + // function. If GetProcAddress succeeds, the LOAD_LIBRARY_SEARCH_* + // flags can be used with LoadLibraryEx." + canDoSearchSystem32Once.v = (modkernel32.NewProc("AddDllDirectory").Find() == nil) +} + +func canDoSearchSystem32() bool { + canDoSearchSystem32Once.Do(initCanDoSearchSystem32) + return canDoSearchSystem32Once.v +} + +func isBaseName(name string) bool { + for _, c := range name { + if c == ':' || c == '/' || c == '\\' { + return false + } + } + return true +} + +// loadLibraryEx wraps the Windows LoadLibraryEx function. +// +// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms684179(v=vs.85).aspx +// +// If name is not an absolute path, LoadLibraryEx searches for the DLL +// in a variety of automatic locations unless constrained by flags. +// See: https://msdn.microsoft.com/en-us/library/ff919712%28VS.85%29.aspx +func loadLibraryEx(name string, system bool) (*DLL, error) { + loadDLL := name + var flags uintptr + if system { + if canDoSearchSystem32() { + flags = LOAD_LIBRARY_SEARCH_SYSTEM32 + } else if isBaseName(name) { + // WindowsXP or unpatched Windows machine + // trying to load "foo.dll" out of the system + // folder, but LoadLibraryEx doesn't support + // that yet on their system, so emulate it. + systemdir, err := GetSystemDirectory() + if err != nil { + return nil, err + } + loadDLL = systemdir + "\\" + name + } + } + h, err := LoadLibraryEx(loadDLL, 0, flags) + if err != nil { + return nil, err + } + return &DLL{Name: name, Handle: h}, nil +} diff --git a/vendor/golang.org/x/sys/windows/env_windows.go b/vendor/golang.org/x/sys/windows/env_windows.go new file mode 100644 index 0000000..d4577a4 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/env_windows.go @@ -0,0 +1,57 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Windows environment variables. + +package windows + +import ( + "syscall" + "unsafe" +) + +func Getenv(key string) (value string, found bool) { + return syscall.Getenv(key) +} + +func Setenv(key, value string) error { + return syscall.Setenv(key, value) +} + +func Clearenv() { + syscall.Clearenv() +} + +func Environ() []string { + return syscall.Environ() +} + +// Returns a default environment associated with the token, rather than the current +// process. If inheritExisting is true, then this environment also inherits the +// environment of the current process. +func (token Token) Environ(inheritExisting bool) (env []string, err error) { + var block *uint16 + err = CreateEnvironmentBlock(&block, token, inheritExisting) + if err != nil { + return nil, err + } + defer DestroyEnvironmentBlock(block) + size := unsafe.Sizeof(*block) + for *block != 0 { + // find NUL terminator + end := unsafe.Pointer(block) + for *(*uint16)(end) != 0 { + end = unsafe.Add(end, size) + } + + entry := unsafe.Slice(block, (uintptr(end)-uintptr(unsafe.Pointer(block)))/size) + env = append(env, UTF16ToString(entry)) + block = (*uint16)(unsafe.Add(end, size)) + } + return env, nil +} + +func Unsetenv(key string) error { + return syscall.Unsetenv(key) +} diff --git a/vendor/golang.org/x/sys/windows/eventlog.go b/vendor/golang.org/x/sys/windows/eventlog.go new file mode 100644 index 0000000..6c36695 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/eventlog.go @@ -0,0 +1,20 @@ +// 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. + +//go:build windows + +package windows + +const ( + EVENTLOG_SUCCESS = 0 + EVENTLOG_ERROR_TYPE = 1 + EVENTLOG_WARNING_TYPE = 2 + EVENTLOG_INFORMATION_TYPE = 4 + EVENTLOG_AUDIT_SUCCESS = 8 + EVENTLOG_AUDIT_FAILURE = 16 +) + +//sys RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) [failretval==0] = advapi32.RegisterEventSourceW +//sys DeregisterEventSource(handle Handle) (err error) = advapi32.DeregisterEventSource +//sys ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) = advapi32.ReportEventW diff --git a/vendor/golang.org/x/sys/windows/exec_windows.go b/vendor/golang.org/x/sys/windows/exec_windows.go new file mode 100644 index 0000000..9cabbb6 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/exec_windows.go @@ -0,0 +1,248 @@ +// 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. + +// Fork, exec, wait, etc. + +package windows + +import ( + errorspkg "errors" + "unsafe" +) + +// EscapeArg rewrites command line argument s as prescribed +// in http://msdn.microsoft.com/en-us/library/ms880421. +// This function returns "" (2 double quotes) if s is empty. +// Alternatively, these transformations are done: +// - every back slash (\) is doubled, but only if immediately +// followed by double quote ("); +// - every double quote (") is escaped by back slash (\); +// - finally, s is wrapped with double quotes (arg -> "arg"), +// but only if there is space or tab inside s. +func EscapeArg(s string) string { + if len(s) == 0 { + return `""` + } + n := len(s) + hasSpace := false + for i := 0; i < len(s); i++ { + switch s[i] { + case '"', '\\': + n++ + case ' ', '\t': + hasSpace = true + } + } + if hasSpace { + n += 2 // Reserve space for quotes. + } + if n == len(s) { + return s + } + + qs := make([]byte, n) + j := 0 + if hasSpace { + qs[j] = '"' + j++ + } + slashes := 0 + for i := 0; i < len(s); i++ { + switch s[i] { + default: + slashes = 0 + qs[j] = s[i] + case '\\': + slashes++ + qs[j] = s[i] + case '"': + for ; slashes > 0; slashes-- { + qs[j] = '\\' + j++ + } + qs[j] = '\\' + j++ + qs[j] = s[i] + } + j++ + } + if hasSpace { + for ; slashes > 0; slashes-- { + qs[j] = '\\' + j++ + } + qs[j] = '"' + j++ + } + return string(qs[:j]) +} + +// ComposeCommandLine escapes and joins the given arguments suitable for use as a Windows command line, +// in CreateProcess's CommandLine argument, CreateService/ChangeServiceConfig's BinaryPathName argument, +// or any program that uses CommandLineToArgv. +func ComposeCommandLine(args []string) string { + if len(args) == 0 { + return "" + } + + // Per https://learn.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-commandlinetoargvw: + // “This function accepts command lines that contain a program name; the + // program name can be enclosed in quotation marks or not.” + // + // Unfortunately, it provides no means of escaping interior quotation marks + // within that program name, and we have no way to report them here. + prog := args[0] + mustQuote := len(prog) == 0 + for i := 0; i < len(prog); i++ { + c := prog[i] + if c <= ' ' || (c == '"' && i == 0) { + // Force quotes for not only the ASCII space and tab as described in the + // MSDN article, but also ASCII control characters. + // The documentation for CommandLineToArgvW doesn't say what happens when + // the first argument is not a valid program name, but it empirically + // seems to drop unquoted control characters. + mustQuote = true + break + } + } + var commandLine []byte + if mustQuote { + commandLine = make([]byte, 0, len(prog)+2) + commandLine = append(commandLine, '"') + for i := 0; i < len(prog); i++ { + c := prog[i] + if c == '"' { + // This quote would interfere with our surrounding quotes. + // We have no way to report an error, so just strip out + // the offending character instead. + continue + } + commandLine = append(commandLine, c) + } + commandLine = append(commandLine, '"') + } else { + if len(args) == 1 { + // args[0] is a valid command line representing itself. + // No need to allocate a new slice or string for it. + return prog + } + commandLine = []byte(prog) + } + + for _, arg := range args[1:] { + commandLine = append(commandLine, ' ') + // TODO(bcmills): since we're already appending to a slice, it would be nice + // to avoid the intermediate allocations of EscapeArg. + // Perhaps we can factor out an appendEscapedArg function. + commandLine = append(commandLine, EscapeArg(arg)...) + } + return string(commandLine) +} + +// DecomposeCommandLine breaks apart its argument command line into unescaped parts using CommandLineToArgv, +// as gathered from GetCommandLine, QUERY_SERVICE_CONFIG's BinaryPathName argument, or elsewhere that +// command lines are passed around. +// DecomposeCommandLine returns an error if commandLine contains NUL. +func DecomposeCommandLine(commandLine string) ([]string, error) { + if len(commandLine) == 0 { + return []string{}, nil + } + utf16CommandLine, err := UTF16FromString(commandLine) + if err != nil { + return nil, errorspkg.New("string with NUL passed to DecomposeCommandLine") + } + var argc int32 + argv, err := commandLineToArgv(&utf16CommandLine[0], &argc) + if err != nil { + return nil, err + } + defer LocalFree(Handle(unsafe.Pointer(argv))) + + var args []string + for _, p := range unsafe.Slice(argv, argc) { + args = append(args, UTF16PtrToString(p)) + } + return args, nil +} + +// CommandLineToArgv parses a Unicode command line string and sets +// argc to the number of parsed arguments. +// +// The returned memory should be freed using a single call to LocalFree. +// +// Note that although the return type of CommandLineToArgv indicates 8192 +// entries of up to 8192 characters each, the actual count of parsed arguments +// may exceed 8192, and the documentation for CommandLineToArgvW does not mention +// any bound on the lengths of the individual argument strings. +// (See https://go.dev/issue/63236.) +func CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) { + argp, err := commandLineToArgv(cmd, argc) + argv = (*[8192]*[8192]uint16)(unsafe.Pointer(argp)) + return argv, err +} + +func CloseOnExec(fd Handle) { + SetHandleInformation(Handle(fd), HANDLE_FLAG_INHERIT, 0) +} + +// FullPath retrieves the full path of the specified file. +func FullPath(name string) (path string, err error) { + p, err := UTF16PtrFromString(name) + if err != nil { + return "", err + } + n := uint32(100) + for { + buf := make([]uint16, n) + n, err = GetFullPathName(p, uint32(len(buf)), &buf[0], nil) + if err != nil { + return "", err + } + if n <= uint32(len(buf)) { + return UTF16ToString(buf[:n]), nil + } + } +} + +// NewProcThreadAttributeList allocates a new ProcThreadAttributeListContainer, with the requested maximum number of attributes. +func NewProcThreadAttributeList(maxAttrCount uint32) (*ProcThreadAttributeListContainer, error) { + var size uintptr + err := initializeProcThreadAttributeList(nil, maxAttrCount, 0, &size) + if err != ERROR_INSUFFICIENT_BUFFER { + if err == nil { + return nil, errorspkg.New("unable to query buffer size from InitializeProcThreadAttributeList") + } + return nil, err + } + alloc, err := LocalAlloc(LMEM_FIXED, uint32(size)) + if err != nil { + return nil, err + } + // size is guaranteed to be ≥1 by InitializeProcThreadAttributeList. + al := &ProcThreadAttributeListContainer{data: (*ProcThreadAttributeList)(unsafe.Pointer(alloc))} + err = initializeProcThreadAttributeList(al.data, maxAttrCount, 0, &size) + if err != nil { + return nil, err + } + return al, err +} + +// Update modifies the ProcThreadAttributeList using UpdateProcThreadAttribute. +func (al *ProcThreadAttributeListContainer) Update(attribute uintptr, value unsafe.Pointer, size uintptr) error { + al.pointers = append(al.pointers, value) + return updateProcThreadAttribute(al.data, 0, attribute, value, size, nil, nil) +} + +// Delete frees ProcThreadAttributeList's resources. +func (al *ProcThreadAttributeListContainer) Delete() { + deleteProcThreadAttributeList(al.data) + LocalFree(Handle(unsafe.Pointer(al.data))) + al.data = nil + al.pointers = nil +} + +// List returns the actual ProcThreadAttributeList to be passed to StartupInfoEx. +func (al *ProcThreadAttributeListContainer) List() *ProcThreadAttributeList { + return al.data +} diff --git a/vendor/golang.org/x/sys/windows/memory_windows.go b/vendor/golang.org/x/sys/windows/memory_windows.go new file mode 100644 index 0000000..6dc0920 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/memory_windows.go @@ -0,0 +1,48 @@ +// 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 windows + +const ( + MEM_COMMIT = 0x00001000 + MEM_RESERVE = 0x00002000 + MEM_DECOMMIT = 0x00004000 + MEM_RELEASE = 0x00008000 + MEM_RESET = 0x00080000 + MEM_TOP_DOWN = 0x00100000 + MEM_WRITE_WATCH = 0x00200000 + MEM_PHYSICAL = 0x00400000 + MEM_RESET_UNDO = 0x01000000 + MEM_LARGE_PAGES = 0x20000000 + + PAGE_NOACCESS = 0x00000001 + PAGE_READONLY = 0x00000002 + PAGE_READWRITE = 0x00000004 + PAGE_WRITECOPY = 0x00000008 + PAGE_EXECUTE = 0x00000010 + PAGE_EXECUTE_READ = 0x00000020 + PAGE_EXECUTE_READWRITE = 0x00000040 + PAGE_EXECUTE_WRITECOPY = 0x00000080 + PAGE_GUARD = 0x00000100 + PAGE_NOCACHE = 0x00000200 + PAGE_WRITECOMBINE = 0x00000400 + PAGE_TARGETS_INVALID = 0x40000000 + PAGE_TARGETS_NO_UPDATE = 0x40000000 + + QUOTA_LIMITS_HARDWS_MIN_DISABLE = 0x00000002 + QUOTA_LIMITS_HARDWS_MIN_ENABLE = 0x00000001 + QUOTA_LIMITS_HARDWS_MAX_DISABLE = 0x00000008 + QUOTA_LIMITS_HARDWS_MAX_ENABLE = 0x00000004 +) + +type MemoryBasicInformation struct { + BaseAddress uintptr + AllocationBase uintptr + AllocationProtect uint32 + PartitionId uint16 + RegionSize uintptr + State uint32 + Protect uint32 + Type uint32 +} diff --git a/vendor/golang.org/x/sys/windows/mkerrors.bash b/vendor/golang.org/x/sys/windows/mkerrors.bash new file mode 100644 index 0000000..58e0188 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/mkerrors.bash @@ -0,0 +1,70 @@ +#!/bin/bash + +# Copyright 2019 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. + +set -e +shopt -s nullglob + +winerror="$(printf '%s\n' "/mnt/c/Program Files (x86)/Windows Kits/"/*/Include/*/shared/winerror.h | sort -Vr | head -n 1)" +[[ -n $winerror ]] || { echo "Unable to find winerror.h" >&2; exit 1; } +ntstatus="$(printf '%s\n' "/mnt/c/Program Files (x86)/Windows Kits/"/*/Include/*/shared/ntstatus.h | sort -Vr | head -n 1)" +[[ -n $ntstatus ]] || { echo "Unable to find ntstatus.h" >&2; exit 1; } + +declare -A errors + +{ + echo "// Code generated by 'mkerrors.bash'; DO NOT EDIT." + echo + echo "package windows" + echo "import \"syscall\"" + echo "const (" + + while read -r line; do + unset vtype + if [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +([A-Z0-9_]+\()?([A-Z][A-Z0-9_]+k?)\)? ]]; then + key="${BASH_REMATCH[1]}" + value="${BASH_REMATCH[3]}" + elif [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +([A-Z0-9_]+\()?((0x)?[0-9A-Fa-f]+)L?\)? ]]; then + key="${BASH_REMATCH[1]}" + value="${BASH_REMATCH[3]}" + vtype="${BASH_REMATCH[2]}" + elif [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +\(\(([A-Z]+)\)((0x)?[0-9A-Fa-f]+)L?\) ]]; then + key="${BASH_REMATCH[1]}" + value="${BASH_REMATCH[3]}" + vtype="${BASH_REMATCH[2]}" + else + continue + fi + [[ -n $key && -n $value ]] || continue + [[ -z ${errors["$key"]} ]] || continue + errors["$key"]="$value" + if [[ -v vtype ]]; then + if [[ $key == FACILITY_* || $key == NO_ERROR ]]; then + vtype="" + elif [[ $vtype == *HANDLE* || $vtype == *HRESULT* ]]; then + vtype="Handle" + else + vtype="syscall.Errno" + fi + last_vtype="$vtype" + else + vtype="" + if [[ $last_vtype == Handle && $value == NO_ERROR ]]; then + value="S_OK" + elif [[ $last_vtype == syscall.Errno && $value == NO_ERROR ]]; then + value="ERROR_SUCCESS" + fi + fi + + echo "$key $vtype = $value" + done < "$winerror" + + while read -r line; do + [[ $line =~ ^#define\ (STATUS_[^\s]+)\ +\(\(NTSTATUS\)((0x)?[0-9a-fA-F]+)L?\) ]] || continue + echo "${BASH_REMATCH[1]} NTStatus = ${BASH_REMATCH[2]}" + done < "$ntstatus" + + echo ")" +} | gofmt > "zerrors_windows.go" diff --git a/vendor/golang.org/x/sys/windows/mkknownfolderids.bash b/vendor/golang.org/x/sys/windows/mkknownfolderids.bash new file mode 100644 index 0000000..ab8924e --- /dev/null +++ b/vendor/golang.org/x/sys/windows/mkknownfolderids.bash @@ -0,0 +1,27 @@ +#!/bin/bash + +# Copyright 2019 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. + +set -e +shopt -s nullglob + +knownfolders="$(printf '%s\n' "/mnt/c/Program Files (x86)/Windows Kits/"/*/Include/*/um/KnownFolders.h | sort -Vr | head -n 1)" +[[ -n $knownfolders ]] || { echo "Unable to find KnownFolders.h" >&2; exit 1; } + +{ + echo "// Code generated by 'mkknownfolderids.bash'; DO NOT EDIT." + echo + echo "package windows" + echo "type KNOWNFOLDERID GUID" + echo "var (" + while read -r line; do + [[ $line =~ DEFINE_KNOWN_FOLDER\((FOLDERID_[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+)\) ]] || continue + printf "%s = &KNOWNFOLDERID{0x%08x, 0x%04x, 0x%04x, [8]byte{0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x}}\n" \ + "${BASH_REMATCH[1]}" $(( "${BASH_REMATCH[2]}" )) $(( "${BASH_REMATCH[3]}" )) $(( "${BASH_REMATCH[4]}" )) \ + $(( "${BASH_REMATCH[5]}" )) $(( "${BASH_REMATCH[6]}" )) $(( "${BASH_REMATCH[7]}" )) $(( "${BASH_REMATCH[8]}" )) \ + $(( "${BASH_REMATCH[9]}" )) $(( "${BASH_REMATCH[10]}" )) $(( "${BASH_REMATCH[11]}" )) $(( "${BASH_REMATCH[12]}" )) + done < "$knownfolders" + echo ")" +} | gofmt > "zknownfolderids_windows.go" diff --git a/vendor/golang.org/x/sys/windows/mksyscall.go b/vendor/golang.org/x/sys/windows/mksyscall.go new file mode 100644 index 0000000..dbcdb09 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/mksyscall.go @@ -0,0 +1,9 @@ +// 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. + +//go:build generate + +package windows + +//go:generate go run golang.org/x/sys/windows/mkwinsyscall -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go setupapi_windows.go diff --git a/vendor/golang.org/x/sys/windows/race.go b/vendor/golang.org/x/sys/windows/race.go new file mode 100644 index 0000000..0f1bdc3 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/race.go @@ -0,0 +1,30 @@ +// 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. + +//go:build windows && race + +package windows + +import ( + "runtime" + "unsafe" +) + +const raceenabled = true + +func raceAcquire(addr unsafe.Pointer) { + runtime.RaceAcquire(addr) +} + +func raceReleaseMerge(addr unsafe.Pointer) { + runtime.RaceReleaseMerge(addr) +} + +func raceReadRange(addr unsafe.Pointer, len int) { + runtime.RaceReadRange(addr, len) +} + +func raceWriteRange(addr unsafe.Pointer, len int) { + runtime.RaceWriteRange(addr, len) +} diff --git a/vendor/golang.org/x/sys/windows/race0.go b/vendor/golang.org/x/sys/windows/race0.go new file mode 100644 index 0000000..0c78da7 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/race0.go @@ -0,0 +1,25 @@ +// 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. + +//go:build windows && !race + +package windows + +import ( + "unsafe" +) + +const raceenabled = false + +func raceAcquire(addr unsafe.Pointer) { +} + +func raceReleaseMerge(addr unsafe.Pointer) { +} + +func raceReadRange(addr unsafe.Pointer, len int) { +} + +func raceWriteRange(addr unsafe.Pointer, len int) { +} diff --git a/vendor/golang.org/x/sys/windows/security_windows.go b/vendor/golang.org/x/sys/windows/security_windows.go new file mode 100644 index 0000000..a8b0364 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/security_windows.go @@ -0,0 +1,1497 @@ +// 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. + +package windows + +import ( + "syscall" + "unsafe" +) + +const ( + NameUnknown = 0 + NameFullyQualifiedDN = 1 + NameSamCompatible = 2 + NameDisplay = 3 + NameUniqueId = 6 + NameCanonical = 7 + NameUserPrincipal = 8 + NameCanonicalEx = 9 + NameServicePrincipal = 10 + NameDnsDomain = 12 +) + +// This function returns 1 byte BOOLEAN rather than the 4 byte BOOL. +// http://blogs.msdn.com/b/drnick/archive/2007/12/19/windows-and-upn-format-credentials.aspx +//sys TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) [failretval&0xff==0] = secur32.TranslateNameW +//sys GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) [failretval&0xff==0] = secur32.GetUserNameExW + +// TranslateAccountName converts a directory service +// object name from one format to another. +func TranslateAccountName(username string, from, to uint32, initSize int) (string, error) { + u, e := UTF16PtrFromString(username) + if e != nil { + return "", e + } + n := uint32(50) + for { + b := make([]uint16, n) + e = TranslateName(u, from, to, &b[0], &n) + if e == nil { + return UTF16ToString(b[:n]), nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return "", e + } + if n <= uint32(len(b)) { + return "", e + } + } +} + +const ( + // do not reorder + NetSetupUnknownStatus = iota + NetSetupUnjoined + NetSetupWorkgroupName + NetSetupDomainName +) + +type UserInfo10 struct { + Name *uint16 + Comment *uint16 + UsrComment *uint16 + FullName *uint16 +} + +//sys NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) = netapi32.NetUserGetInfo +//sys NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) = netapi32.NetGetJoinInformation +//sys NetApiBufferFree(buf *byte) (neterr error) = netapi32.NetApiBufferFree +//sys NetUserEnum(serverName *uint16, level uint32, filter uint32, buf **byte, prefMaxLen uint32, entriesRead *uint32, totalEntries *uint32, resumeHandle *uint32) (neterr error) = netapi32.NetUserEnum + +const ( + // do not reorder + SidTypeUser = 1 + iota + SidTypeGroup + SidTypeDomain + SidTypeAlias + SidTypeWellKnownGroup + SidTypeDeletedAccount + SidTypeInvalid + SidTypeUnknown + SidTypeComputer + SidTypeLabel +) + +type SidIdentifierAuthority struct { + Value [6]byte +} + +var ( + SECURITY_NULL_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 0}} + SECURITY_WORLD_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 1}} + SECURITY_LOCAL_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 2}} + SECURITY_CREATOR_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 3}} + SECURITY_NON_UNIQUE_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 4}} + SECURITY_NT_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 5}} + SECURITY_MANDATORY_LABEL_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 16}} +) + +const ( + SECURITY_NULL_RID = 0 + SECURITY_WORLD_RID = 0 + SECURITY_LOCAL_RID = 0 + SECURITY_CREATOR_OWNER_RID = 0 + SECURITY_CREATOR_GROUP_RID = 1 + SECURITY_DIALUP_RID = 1 + SECURITY_NETWORK_RID = 2 + SECURITY_BATCH_RID = 3 + SECURITY_INTERACTIVE_RID = 4 + SECURITY_LOGON_IDS_RID = 5 + SECURITY_SERVICE_RID = 6 + SECURITY_LOCAL_SYSTEM_RID = 18 + SECURITY_BUILTIN_DOMAIN_RID = 32 + SECURITY_PRINCIPAL_SELF_RID = 10 + SECURITY_CREATOR_OWNER_SERVER_RID = 0x2 + SECURITY_CREATOR_GROUP_SERVER_RID = 0x3 + SECURITY_LOGON_IDS_RID_COUNT = 0x3 + SECURITY_ANONYMOUS_LOGON_RID = 0x7 + SECURITY_PROXY_RID = 0x8 + SECURITY_ENTERPRISE_CONTROLLERS_RID = 0x9 + SECURITY_SERVER_LOGON_RID = SECURITY_ENTERPRISE_CONTROLLERS_RID + SECURITY_AUTHENTICATED_USER_RID = 0xb + SECURITY_RESTRICTED_CODE_RID = 0xc + SECURITY_NT_NON_UNIQUE_RID = 0x15 +) + +// Predefined domain-relative RIDs for local groups. +// See https://msdn.microsoft.com/en-us/library/windows/desktop/aa379649(v=vs.85).aspx +const ( + DOMAIN_ALIAS_RID_ADMINS = 0x220 + DOMAIN_ALIAS_RID_USERS = 0x221 + DOMAIN_ALIAS_RID_GUESTS = 0x222 + DOMAIN_ALIAS_RID_POWER_USERS = 0x223 + DOMAIN_ALIAS_RID_ACCOUNT_OPS = 0x224 + DOMAIN_ALIAS_RID_SYSTEM_OPS = 0x225 + DOMAIN_ALIAS_RID_PRINT_OPS = 0x226 + DOMAIN_ALIAS_RID_BACKUP_OPS = 0x227 + DOMAIN_ALIAS_RID_REPLICATOR = 0x228 + DOMAIN_ALIAS_RID_RAS_SERVERS = 0x229 + DOMAIN_ALIAS_RID_PREW2KCOMPACCESS = 0x22a + DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS = 0x22b + DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS = 0x22c + DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS = 0x22d + DOMAIN_ALIAS_RID_MONITORING_USERS = 0x22e + DOMAIN_ALIAS_RID_LOGGING_USERS = 0x22f + DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS = 0x230 + DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS = 0x231 + DOMAIN_ALIAS_RID_DCOM_USERS = 0x232 + DOMAIN_ALIAS_RID_IUSERS = 0x238 + DOMAIN_ALIAS_RID_CRYPTO_OPERATORS = 0x239 + DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP = 0x23b + DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP = 0x23c + DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP = 0x23d + DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP = 0x23e +) + +//sys LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountSidW +//sys LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountNameW +//sys ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) = advapi32.ConvertSidToStringSidW +//sys ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) = advapi32.ConvertStringSidToSidW +//sys GetLengthSid(sid *SID) (len uint32) = advapi32.GetLengthSid +//sys CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) = advapi32.CopySid +//sys AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) = advapi32.AllocateAndInitializeSid +//sys createWellKnownSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID, sid *SID, sizeSid *uint32) (err error) = advapi32.CreateWellKnownSid +//sys isWellKnownSid(sid *SID, sidType WELL_KNOWN_SID_TYPE) (isWellKnown bool) = advapi32.IsWellKnownSid +//sys FreeSid(sid *SID) (err error) [failretval!=0] = advapi32.FreeSid +//sys EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) = advapi32.EqualSid +//sys getSidIdentifierAuthority(sid *SID) (authority *SidIdentifierAuthority) = advapi32.GetSidIdentifierAuthority +//sys getSidSubAuthorityCount(sid *SID) (count *uint8) = advapi32.GetSidSubAuthorityCount +//sys getSidSubAuthority(sid *SID, index uint32) (subAuthority *uint32) = advapi32.GetSidSubAuthority +//sys isValidSid(sid *SID) (isValid bool) = advapi32.IsValidSid + +// The security identifier (SID) structure is a variable-length +// structure used to uniquely identify users or groups. +type SID struct{} + +// StringToSid converts a string-format security identifier +// SID into a valid, functional SID. +func StringToSid(s string) (*SID, error) { + var sid *SID + p, e := UTF16PtrFromString(s) + if e != nil { + return nil, e + } + e = ConvertStringSidToSid(p, &sid) + if e != nil { + return nil, e + } + defer LocalFree((Handle)(unsafe.Pointer(sid))) + return sid.Copy() +} + +// LookupSID retrieves a security identifier SID for the account +// and the name of the domain on which the account was found. +// System specify target computer to search. +func LookupSID(system, account string) (sid *SID, domain string, accType uint32, err error) { + if len(account) == 0 { + return nil, "", 0, syscall.EINVAL + } + acc, e := UTF16PtrFromString(account) + if e != nil { + return nil, "", 0, e + } + var sys *uint16 + if len(system) > 0 { + sys, e = UTF16PtrFromString(system) + if e != nil { + return nil, "", 0, e + } + } + n := uint32(50) + dn := uint32(50) + for { + b := make([]byte, n) + db := make([]uint16, dn) + sid = (*SID)(unsafe.Pointer(&b[0])) + e = LookupAccountName(sys, acc, sid, &n, &db[0], &dn, &accType) + if e == nil { + return sid, UTF16ToString(db), accType, nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return nil, "", 0, e + } + if n <= uint32(len(b)) { + return nil, "", 0, e + } + } +} + +// String converts SID to a string format suitable for display, storage, or transmission. +func (sid *SID) String() string { + var s *uint16 + e := ConvertSidToStringSid(sid, &s) + if e != nil { + return "" + } + defer LocalFree((Handle)(unsafe.Pointer(s))) + return UTF16ToString((*[256]uint16)(unsafe.Pointer(s))[:]) +} + +// Len returns the length, in bytes, of a valid security identifier SID. +func (sid *SID) Len() int { + return int(GetLengthSid(sid)) +} + +// Copy creates a duplicate of security identifier SID. +func (sid *SID) Copy() (*SID, error) { + b := make([]byte, sid.Len()) + sid2 := (*SID)(unsafe.Pointer(&b[0])) + e := CopySid(uint32(len(b)), sid2, sid) + if e != nil { + return nil, e + } + return sid2, nil +} + +// IdentifierAuthority returns the identifier authority of the SID. +func (sid *SID) IdentifierAuthority() SidIdentifierAuthority { + return *getSidIdentifierAuthority(sid) +} + +// SubAuthorityCount returns the number of sub-authorities in the SID. +func (sid *SID) SubAuthorityCount() uint8 { + return *getSidSubAuthorityCount(sid) +} + +// SubAuthority returns the sub-authority of the SID as specified by +// the index, which must be less than sid.SubAuthorityCount(). +func (sid *SID) SubAuthority(idx uint32) uint32 { + if idx >= uint32(sid.SubAuthorityCount()) { + panic("sub-authority index out of range") + } + return *getSidSubAuthority(sid, idx) +} + +// IsValid returns whether the SID has a valid revision and length. +func (sid *SID) IsValid() bool { + return isValidSid(sid) +} + +// Equals compares two SIDs for equality. +func (sid *SID) Equals(sid2 *SID) bool { + return EqualSid(sid, sid2) +} + +// IsWellKnown determines whether the SID matches the well-known sidType. +func (sid *SID) IsWellKnown(sidType WELL_KNOWN_SID_TYPE) bool { + return isWellKnownSid(sid, sidType) +} + +// LookupAccount retrieves the name of the account for this SID +// and the name of the first domain on which this SID is found. +// System specify target computer to search for. +func (sid *SID) LookupAccount(system string) (account, domain string, accType uint32, err error) { + var sys *uint16 + if len(system) > 0 { + sys, err = UTF16PtrFromString(system) + if err != nil { + return "", "", 0, err + } + } + n := uint32(50) + dn := uint32(50) + for { + b := make([]uint16, n) + db := make([]uint16, dn) + e := LookupAccountSid(sys, sid, &b[0], &n, &db[0], &dn, &accType) + if e == nil { + return UTF16ToString(b), UTF16ToString(db), accType, nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return "", "", 0, e + } + if n <= uint32(len(b)) { + return "", "", 0, e + } + } +} + +// Various types of pre-specified SIDs that can be synthesized and compared at runtime. +type WELL_KNOWN_SID_TYPE uint32 + +const ( + WinNullSid = 0 + WinWorldSid = 1 + WinLocalSid = 2 + WinCreatorOwnerSid = 3 + WinCreatorGroupSid = 4 + WinCreatorOwnerServerSid = 5 + WinCreatorGroupServerSid = 6 + WinNtAuthoritySid = 7 + WinDialupSid = 8 + WinNetworkSid = 9 + WinBatchSid = 10 + WinInteractiveSid = 11 + WinServiceSid = 12 + WinAnonymousSid = 13 + WinProxySid = 14 + WinEnterpriseControllersSid = 15 + WinSelfSid = 16 + WinAuthenticatedUserSid = 17 + WinRestrictedCodeSid = 18 + WinTerminalServerSid = 19 + WinRemoteLogonIdSid = 20 + WinLogonIdsSid = 21 + WinLocalSystemSid = 22 + WinLocalServiceSid = 23 + WinNetworkServiceSid = 24 + WinBuiltinDomainSid = 25 + WinBuiltinAdministratorsSid = 26 + WinBuiltinUsersSid = 27 + WinBuiltinGuestsSid = 28 + WinBuiltinPowerUsersSid = 29 + WinBuiltinAccountOperatorsSid = 30 + WinBuiltinSystemOperatorsSid = 31 + WinBuiltinPrintOperatorsSid = 32 + WinBuiltinBackupOperatorsSid = 33 + WinBuiltinReplicatorSid = 34 + WinBuiltinPreWindows2000CompatibleAccessSid = 35 + WinBuiltinRemoteDesktopUsersSid = 36 + WinBuiltinNetworkConfigurationOperatorsSid = 37 + WinAccountAdministratorSid = 38 + WinAccountGuestSid = 39 + WinAccountKrbtgtSid = 40 + WinAccountDomainAdminsSid = 41 + WinAccountDomainUsersSid = 42 + WinAccountDomainGuestsSid = 43 + WinAccountComputersSid = 44 + WinAccountControllersSid = 45 + WinAccountCertAdminsSid = 46 + WinAccountSchemaAdminsSid = 47 + WinAccountEnterpriseAdminsSid = 48 + WinAccountPolicyAdminsSid = 49 + WinAccountRasAndIasServersSid = 50 + WinNTLMAuthenticationSid = 51 + WinDigestAuthenticationSid = 52 + WinSChannelAuthenticationSid = 53 + WinThisOrganizationSid = 54 + WinOtherOrganizationSid = 55 + WinBuiltinIncomingForestTrustBuildersSid = 56 + WinBuiltinPerfMonitoringUsersSid = 57 + WinBuiltinPerfLoggingUsersSid = 58 + WinBuiltinAuthorizationAccessSid = 59 + WinBuiltinTerminalServerLicenseServersSid = 60 + WinBuiltinDCOMUsersSid = 61 + WinBuiltinIUsersSid = 62 + WinIUserSid = 63 + WinBuiltinCryptoOperatorsSid = 64 + WinUntrustedLabelSid = 65 + WinLowLabelSid = 66 + WinMediumLabelSid = 67 + WinHighLabelSid = 68 + WinSystemLabelSid = 69 + WinWriteRestrictedCodeSid = 70 + WinCreatorOwnerRightsSid = 71 + WinCacheablePrincipalsGroupSid = 72 + WinNonCacheablePrincipalsGroupSid = 73 + WinEnterpriseReadonlyControllersSid = 74 + WinAccountReadonlyControllersSid = 75 + WinBuiltinEventLogReadersGroup = 76 + WinNewEnterpriseReadonlyControllersSid = 77 + WinBuiltinCertSvcDComAccessGroup = 78 + WinMediumPlusLabelSid = 79 + WinLocalLogonSid = 80 + WinConsoleLogonSid = 81 + WinThisOrganizationCertificateSid = 82 + WinApplicationPackageAuthoritySid = 83 + WinBuiltinAnyPackageSid = 84 + WinCapabilityInternetClientSid = 85 + WinCapabilityInternetClientServerSid = 86 + WinCapabilityPrivateNetworkClientServerSid = 87 + WinCapabilityPicturesLibrarySid = 88 + WinCapabilityVideosLibrarySid = 89 + WinCapabilityMusicLibrarySid = 90 + WinCapabilityDocumentsLibrarySid = 91 + WinCapabilitySharedUserCertificatesSid = 92 + WinCapabilityEnterpriseAuthenticationSid = 93 + WinCapabilityRemovableStorageSid = 94 + WinBuiltinRDSRemoteAccessServersSid = 95 + WinBuiltinRDSEndpointServersSid = 96 + WinBuiltinRDSManagementServersSid = 97 + WinUserModeDriversSid = 98 + WinBuiltinHyperVAdminsSid = 99 + WinAccountCloneableControllersSid = 100 + WinBuiltinAccessControlAssistanceOperatorsSid = 101 + WinBuiltinRemoteManagementUsersSid = 102 + WinAuthenticationAuthorityAssertedSid = 103 + WinAuthenticationServiceAssertedSid = 104 + WinLocalAccountSid = 105 + WinLocalAccountAndAdministratorSid = 106 + WinAccountProtectedUsersSid = 107 + WinCapabilityAppointmentsSid = 108 + WinCapabilityContactsSid = 109 + WinAccountDefaultSystemManagedSid = 110 + WinBuiltinDefaultSystemManagedGroupSid = 111 + WinBuiltinStorageReplicaAdminsSid = 112 + WinAccountKeyAdminsSid = 113 + WinAccountEnterpriseKeyAdminsSid = 114 + WinAuthenticationKeyTrustSid = 115 + WinAuthenticationKeyPropertyMFASid = 116 + WinAuthenticationKeyPropertyAttestationSid = 117 + WinAuthenticationFreshKeyAuthSid = 118 + WinBuiltinDeviceOwnersSid = 119 +) + +// Creates a SID for a well-known predefined alias, generally using the constants of the form +// Win*Sid, for the local machine. +func CreateWellKnownSid(sidType WELL_KNOWN_SID_TYPE) (*SID, error) { + return CreateWellKnownDomainSid(sidType, nil) +} + +// Creates a SID for a well-known predefined alias, generally using the constants of the form +// Win*Sid, for the domain specified by the domainSid parameter. +func CreateWellKnownDomainSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID) (*SID, error) { + n := uint32(50) + for { + b := make([]byte, n) + sid := (*SID)(unsafe.Pointer(&b[0])) + err := createWellKnownSid(sidType, domainSid, sid, &n) + if err == nil { + return sid, nil + } + if err != ERROR_INSUFFICIENT_BUFFER { + return nil, err + } + if n <= uint32(len(b)) { + return nil, err + } + } +} + +const ( + // do not reorder + TOKEN_ASSIGN_PRIMARY = 1 << iota + TOKEN_DUPLICATE + TOKEN_IMPERSONATE + TOKEN_QUERY + TOKEN_QUERY_SOURCE + TOKEN_ADJUST_PRIVILEGES + TOKEN_ADJUST_GROUPS + TOKEN_ADJUST_DEFAULT + TOKEN_ADJUST_SESSIONID + + TOKEN_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | + TOKEN_ASSIGN_PRIMARY | + TOKEN_DUPLICATE | + TOKEN_IMPERSONATE | + TOKEN_QUERY | + TOKEN_QUERY_SOURCE | + TOKEN_ADJUST_PRIVILEGES | + TOKEN_ADJUST_GROUPS | + TOKEN_ADJUST_DEFAULT | + TOKEN_ADJUST_SESSIONID + TOKEN_READ = STANDARD_RIGHTS_READ | TOKEN_QUERY + TOKEN_WRITE = STANDARD_RIGHTS_WRITE | + TOKEN_ADJUST_PRIVILEGES | + TOKEN_ADJUST_GROUPS | + TOKEN_ADJUST_DEFAULT + TOKEN_EXECUTE = STANDARD_RIGHTS_EXECUTE +) + +const ( + // do not reorder + TokenUser = 1 + iota + TokenGroups + TokenPrivileges + TokenOwner + TokenPrimaryGroup + TokenDefaultDacl + TokenSource + TokenType + TokenImpersonationLevel + TokenStatistics + TokenRestrictedSids + TokenSessionId + TokenGroupsAndPrivileges + TokenSessionReference + TokenSandBoxInert + TokenAuditPolicy + TokenOrigin + TokenElevationType + TokenLinkedToken + TokenElevation + TokenHasRestrictions + TokenAccessInformation + TokenVirtualizationAllowed + TokenVirtualizationEnabled + TokenIntegrityLevel + TokenUIAccess + TokenMandatoryPolicy + TokenLogonSid + MaxTokenInfoClass +) + +// Group attributes inside of Tokengroups.Groups[i].Attributes +const ( + SE_GROUP_MANDATORY = 0x00000001 + SE_GROUP_ENABLED_BY_DEFAULT = 0x00000002 + SE_GROUP_ENABLED = 0x00000004 + SE_GROUP_OWNER = 0x00000008 + SE_GROUP_USE_FOR_DENY_ONLY = 0x00000010 + SE_GROUP_INTEGRITY = 0x00000020 + SE_GROUP_INTEGRITY_ENABLED = 0x00000040 + SE_GROUP_LOGON_ID = 0xC0000000 + SE_GROUP_RESOURCE = 0x20000000 + SE_GROUP_VALID_ATTRIBUTES = SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_ENABLED | SE_GROUP_OWNER | SE_GROUP_USE_FOR_DENY_ONLY | SE_GROUP_LOGON_ID | SE_GROUP_RESOURCE | SE_GROUP_INTEGRITY | SE_GROUP_INTEGRITY_ENABLED +) + +// Privilege attributes +const ( + SE_PRIVILEGE_ENABLED_BY_DEFAULT = 0x00000001 + SE_PRIVILEGE_ENABLED = 0x00000002 + SE_PRIVILEGE_REMOVED = 0x00000004 + SE_PRIVILEGE_USED_FOR_ACCESS = 0x80000000 + SE_PRIVILEGE_VALID_ATTRIBUTES = SE_PRIVILEGE_ENABLED_BY_DEFAULT | SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_REMOVED | SE_PRIVILEGE_USED_FOR_ACCESS +) + +// Token types +const ( + TokenPrimary = 1 + TokenImpersonation = 2 +) + +// Impersonation levels +const ( + SecurityAnonymous = 0 + SecurityIdentification = 1 + SecurityImpersonation = 2 + SecurityDelegation = 3 +) + +type LUID struct { + LowPart uint32 + HighPart int32 +} + +type LUIDAndAttributes struct { + Luid LUID + Attributes uint32 +} + +type SIDAndAttributes struct { + Sid *SID + Attributes uint32 +} + +type Tokenuser struct { + User SIDAndAttributes +} + +type Tokenprimarygroup struct { + PrimaryGroup *SID +} + +type Tokengroups struct { + GroupCount uint32 + Groups [1]SIDAndAttributes // Use AllGroups() for iterating. +} + +// AllGroups returns a slice that can be used to iterate over the groups in g. +func (g *Tokengroups) AllGroups() []SIDAndAttributes { + return (*[(1 << 28) - 1]SIDAndAttributes)(unsafe.Pointer(&g.Groups[0]))[:g.GroupCount:g.GroupCount] +} + +type Tokenprivileges struct { + PrivilegeCount uint32 + Privileges [1]LUIDAndAttributes // Use AllPrivileges() for iterating. +} + +// AllPrivileges returns a slice that can be used to iterate over the privileges in p. +func (p *Tokenprivileges) AllPrivileges() []LUIDAndAttributes { + return (*[(1 << 27) - 1]LUIDAndAttributes)(unsafe.Pointer(&p.Privileges[0]))[:p.PrivilegeCount:p.PrivilegeCount] +} + +type Tokenmandatorylabel struct { + Label SIDAndAttributes +} + +func (tml *Tokenmandatorylabel) Size() uint32 { + return uint32(unsafe.Sizeof(Tokenmandatorylabel{})) + GetLengthSid(tml.Label.Sid) +} + +// Authorization Functions +//sys checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) = advapi32.CheckTokenMembership +//sys isTokenRestricted(tokenHandle Token) (ret bool, err error) [!failretval] = advapi32.IsTokenRestricted +//sys OpenProcessToken(process Handle, access uint32, token *Token) (err error) = advapi32.OpenProcessToken +//sys OpenThreadToken(thread Handle, access uint32, openAsSelf bool, token *Token) (err error) = advapi32.OpenThreadToken +//sys ImpersonateSelf(impersonationlevel uint32) (err error) = advapi32.ImpersonateSelf +//sys RevertToSelf() (err error) = advapi32.RevertToSelf +//sys SetThreadToken(thread *Handle, token Token) (err error) = advapi32.SetThreadToken +//sys LookupPrivilegeValue(systemname *uint16, name *uint16, luid *LUID) (err error) = advapi32.LookupPrivilegeValueW +//sys AdjustTokenPrivileges(token Token, disableAllPrivileges bool, newstate *Tokenprivileges, buflen uint32, prevstate *Tokenprivileges, returnlen *uint32) (err error) = advapi32.AdjustTokenPrivileges +//sys AdjustTokenGroups(token Token, resetToDefault bool, newstate *Tokengroups, buflen uint32, prevstate *Tokengroups, returnlen *uint32) (err error) = advapi32.AdjustTokenGroups +//sys GetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) = advapi32.GetTokenInformation +//sys SetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32) (err error) = advapi32.SetTokenInformation +//sys DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes *SecurityAttributes, impersonationLevel uint32, tokenType uint32, newToken *Token) (err error) = advapi32.DuplicateTokenEx +//sys GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) = userenv.GetUserProfileDirectoryW +//sys getSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetSystemDirectoryW +//sys getWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetWindowsDirectoryW +//sys getSystemWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetSystemWindowsDirectoryW + +// An access token contains the security information for a logon session. +// The system creates an access token when a user logs on, and every +// process executed on behalf of the user has a copy of the token. +// The token identifies the user, the user's groups, and the user's +// privileges. The system uses the token to control access to securable +// objects and to control the ability of the user to perform various +// system-related operations on the local computer. +type Token Handle + +// OpenCurrentProcessToken opens an access token associated with current +// process with TOKEN_QUERY access. It is a real token that needs to be closed. +// +// Deprecated: Explicitly call OpenProcessToken(CurrentProcess(), ...) +// with the desired access instead, or use GetCurrentProcessToken for a +// TOKEN_QUERY token. +func OpenCurrentProcessToken() (Token, error) { + var token Token + err := OpenProcessToken(CurrentProcess(), TOKEN_QUERY, &token) + return token, err +} + +// GetCurrentProcessToken returns the access token associated with +// the current process. It is a pseudo token that does not need +// to be closed. +func GetCurrentProcessToken() Token { + return Token(^uintptr(4 - 1)) +} + +// GetCurrentThreadToken return the access token associated with +// the current thread. It is a pseudo token that does not need +// to be closed. +func GetCurrentThreadToken() Token { + return Token(^uintptr(5 - 1)) +} + +// GetCurrentThreadEffectiveToken returns the effective access token +// associated with the current thread. It is a pseudo token that does +// not need to be closed. +func GetCurrentThreadEffectiveToken() Token { + return Token(^uintptr(6 - 1)) +} + +// Close releases access to access token. +func (t Token) Close() error { + return CloseHandle(Handle(t)) +} + +// getInfo retrieves a specified type of information about an access token. +func (t Token) getInfo(class uint32, initSize int) (unsafe.Pointer, error) { + n := uint32(initSize) + for { + b := make([]byte, n) + e := GetTokenInformation(t, class, &b[0], uint32(len(b)), &n) + if e == nil { + return unsafe.Pointer(&b[0]), nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return nil, e + } + if n <= uint32(len(b)) { + return nil, e + } + } +} + +// GetTokenUser retrieves access token t user account information. +func (t Token) GetTokenUser() (*Tokenuser, error) { + i, e := t.getInfo(TokenUser, 50) + if e != nil { + return nil, e + } + return (*Tokenuser)(i), nil +} + +// GetTokenGroups retrieves group accounts associated with access token t. +func (t Token) GetTokenGroups() (*Tokengroups, error) { + i, e := t.getInfo(TokenGroups, 50) + if e != nil { + return nil, e + } + return (*Tokengroups)(i), nil +} + +// GetTokenPrimaryGroup retrieves access token t primary group information. +// A pointer to a SID structure representing a group that will become +// the primary group of any objects created by a process using this access token. +func (t Token) GetTokenPrimaryGroup() (*Tokenprimarygroup, error) { + i, e := t.getInfo(TokenPrimaryGroup, 50) + if e != nil { + return nil, e + } + return (*Tokenprimarygroup)(i), nil +} + +// GetUserProfileDirectory retrieves path to the +// root directory of the access token t user's profile. +func (t Token) GetUserProfileDirectory() (string, error) { + n := uint32(100) + for { + b := make([]uint16, n) + e := GetUserProfileDirectory(t, &b[0], &n) + if e == nil { + return UTF16ToString(b), nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return "", e + } + if n <= uint32(len(b)) { + return "", e + } + } +} + +// IsElevated returns whether the current token is elevated from a UAC perspective. +func (token Token) IsElevated() bool { + var isElevated uint32 + var outLen uint32 + err := GetTokenInformation(token, TokenElevation, (*byte)(unsafe.Pointer(&isElevated)), uint32(unsafe.Sizeof(isElevated)), &outLen) + if err != nil { + return false + } + return outLen == uint32(unsafe.Sizeof(isElevated)) && isElevated != 0 +} + +// GetLinkedToken returns the linked token, which may be an elevated UAC token. +func (token Token) GetLinkedToken() (Token, error) { + var linkedToken Token + var outLen uint32 + err := GetTokenInformation(token, TokenLinkedToken, (*byte)(unsafe.Pointer(&linkedToken)), uint32(unsafe.Sizeof(linkedToken)), &outLen) + if err != nil { + return Token(0), err + } + return linkedToken, nil +} + +// GetSystemDirectory retrieves the path to current location of the system +// directory, which is typically, though not always, `C:\Windows\System32`. +func GetSystemDirectory() (string, error) { + n := uint32(MAX_PATH) + for { + b := make([]uint16, n) + l, e := getSystemDirectory(&b[0], n) + if e != nil { + return "", e + } + if l <= n { + return UTF16ToString(b[:l]), nil + } + n = l + } +} + +// GetWindowsDirectory retrieves the path to current location of the Windows +// directory, which is typically, though not always, `C:\Windows`. This may +// be a private user directory in the case that the application is running +// under a terminal server. +func GetWindowsDirectory() (string, error) { + n := uint32(MAX_PATH) + for { + b := make([]uint16, n) + l, e := getWindowsDirectory(&b[0], n) + if e != nil { + return "", e + } + if l <= n { + return UTF16ToString(b[:l]), nil + } + n = l + } +} + +// GetSystemWindowsDirectory retrieves the path to current location of the +// Windows directory, which is typically, though not always, `C:\Windows`. +func GetSystemWindowsDirectory() (string, error) { + n := uint32(MAX_PATH) + for { + b := make([]uint16, n) + l, e := getSystemWindowsDirectory(&b[0], n) + if e != nil { + return "", e + } + if l <= n { + return UTF16ToString(b[:l]), nil + } + n = l + } +} + +// IsMember reports whether the access token t is a member of the provided SID. +func (t Token) IsMember(sid *SID) (bool, error) { + var b int32 + if e := checkTokenMembership(t, sid, &b); e != nil { + return false, e + } + return b != 0, nil +} + +// IsRestricted reports whether the access token t is a restricted token. +func (t Token) IsRestricted() (isRestricted bool, err error) { + isRestricted, err = isTokenRestricted(t) + if !isRestricted && err == syscall.EINVAL { + // If err is EINVAL, this returned ERROR_SUCCESS indicating a non-restricted token. + err = nil + } + return +} + +const ( + WTS_CONSOLE_CONNECT = 0x1 + WTS_CONSOLE_DISCONNECT = 0x2 + WTS_REMOTE_CONNECT = 0x3 + WTS_REMOTE_DISCONNECT = 0x4 + WTS_SESSION_LOGON = 0x5 + WTS_SESSION_LOGOFF = 0x6 + WTS_SESSION_LOCK = 0x7 + WTS_SESSION_UNLOCK = 0x8 + WTS_SESSION_REMOTE_CONTROL = 0x9 + WTS_SESSION_CREATE = 0xa + WTS_SESSION_TERMINATE = 0xb +) + +const ( + WTSActive = 0 + WTSConnected = 1 + WTSConnectQuery = 2 + WTSShadow = 3 + WTSDisconnected = 4 + WTSIdle = 5 + WTSListen = 6 + WTSReset = 7 + WTSDown = 8 + WTSInit = 9 +) + +type WTSSESSION_NOTIFICATION struct { + Size uint32 + SessionID uint32 +} + +type WTS_SESSION_INFO struct { + SessionID uint32 + WindowStationName *uint16 + State uint32 +} + +//sys WTSQueryUserToken(session uint32, token *Token) (err error) = wtsapi32.WTSQueryUserToken +//sys WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessions **WTS_SESSION_INFO, count *uint32) (err error) = wtsapi32.WTSEnumerateSessionsW +//sys WTSFreeMemory(ptr uintptr) = wtsapi32.WTSFreeMemory +//sys WTSGetActiveConsoleSessionId() (sessionID uint32) + +type ACL struct { + aclRevision byte + sbz1 byte + aclSize uint16 + AceCount uint16 + sbz2 uint16 +} + +type SECURITY_DESCRIPTOR struct { + revision byte + sbz1 byte + control SECURITY_DESCRIPTOR_CONTROL + owner *SID + group *SID + sacl *ACL + dacl *ACL +} + +type SECURITY_QUALITY_OF_SERVICE struct { + Length uint32 + ImpersonationLevel uint32 + ContextTrackingMode byte + EffectiveOnly byte +} + +// Constants for the ContextTrackingMode field of SECURITY_QUALITY_OF_SERVICE. +const ( + SECURITY_STATIC_TRACKING = 0 + SECURITY_DYNAMIC_TRACKING = 1 +) + +type SecurityAttributes struct { + Length uint32 + SecurityDescriptor *SECURITY_DESCRIPTOR + InheritHandle uint32 +} + +type SE_OBJECT_TYPE uint32 + +// Constants for type SE_OBJECT_TYPE +const ( + SE_UNKNOWN_OBJECT_TYPE = 0 + SE_FILE_OBJECT = 1 + SE_SERVICE = 2 + SE_PRINTER = 3 + SE_REGISTRY_KEY = 4 + SE_LMSHARE = 5 + SE_KERNEL_OBJECT = 6 + SE_WINDOW_OBJECT = 7 + SE_DS_OBJECT = 8 + SE_DS_OBJECT_ALL = 9 + SE_PROVIDER_DEFINED_OBJECT = 10 + SE_WMIGUID_OBJECT = 11 + SE_REGISTRY_WOW64_32KEY = 12 + SE_REGISTRY_WOW64_64KEY = 13 +) + +type SECURITY_INFORMATION uint32 + +// Constants for type SECURITY_INFORMATION +const ( + OWNER_SECURITY_INFORMATION = 0x00000001 + GROUP_SECURITY_INFORMATION = 0x00000002 + DACL_SECURITY_INFORMATION = 0x00000004 + SACL_SECURITY_INFORMATION = 0x00000008 + LABEL_SECURITY_INFORMATION = 0x00000010 + ATTRIBUTE_SECURITY_INFORMATION = 0x00000020 + SCOPE_SECURITY_INFORMATION = 0x00000040 + BACKUP_SECURITY_INFORMATION = 0x00010000 + PROTECTED_DACL_SECURITY_INFORMATION = 0x80000000 + PROTECTED_SACL_SECURITY_INFORMATION = 0x40000000 + UNPROTECTED_DACL_SECURITY_INFORMATION = 0x20000000 + UNPROTECTED_SACL_SECURITY_INFORMATION = 0x10000000 +) + +type SECURITY_DESCRIPTOR_CONTROL uint16 + +// Constants for type SECURITY_DESCRIPTOR_CONTROL +const ( + SE_OWNER_DEFAULTED = 0x0001 + SE_GROUP_DEFAULTED = 0x0002 + SE_DACL_PRESENT = 0x0004 + SE_DACL_DEFAULTED = 0x0008 + SE_SACL_PRESENT = 0x0010 + SE_SACL_DEFAULTED = 0x0020 + SE_DACL_AUTO_INHERIT_REQ = 0x0100 + SE_SACL_AUTO_INHERIT_REQ = 0x0200 + SE_DACL_AUTO_INHERITED = 0x0400 + SE_SACL_AUTO_INHERITED = 0x0800 + SE_DACL_PROTECTED = 0x1000 + SE_SACL_PROTECTED = 0x2000 + SE_RM_CONTROL_VALID = 0x4000 + SE_SELF_RELATIVE = 0x8000 +) + +type ACCESS_MASK uint32 + +// Constants for type ACCESS_MASK +const ( + DELETE = 0x00010000 + READ_CONTROL = 0x00020000 + WRITE_DAC = 0x00040000 + WRITE_OWNER = 0x00080000 + SYNCHRONIZE = 0x00100000 + STANDARD_RIGHTS_REQUIRED = 0x000F0000 + STANDARD_RIGHTS_READ = READ_CONTROL + STANDARD_RIGHTS_WRITE = READ_CONTROL + STANDARD_RIGHTS_EXECUTE = READ_CONTROL + STANDARD_RIGHTS_ALL = 0x001F0000 + SPECIFIC_RIGHTS_ALL = 0x0000FFFF + ACCESS_SYSTEM_SECURITY = 0x01000000 + MAXIMUM_ALLOWED = 0x02000000 + GENERIC_READ = 0x80000000 + GENERIC_WRITE = 0x40000000 + GENERIC_EXECUTE = 0x20000000 + GENERIC_ALL = 0x10000000 +) + +type ACCESS_MODE uint32 + +// Constants for type ACCESS_MODE +const ( + NOT_USED_ACCESS = 0 + GRANT_ACCESS = 1 + SET_ACCESS = 2 + DENY_ACCESS = 3 + REVOKE_ACCESS = 4 + SET_AUDIT_SUCCESS = 5 + SET_AUDIT_FAILURE = 6 +) + +// Constants for AceFlags and Inheritance fields +const ( + NO_INHERITANCE = 0x0 + SUB_OBJECTS_ONLY_INHERIT = 0x1 + SUB_CONTAINERS_ONLY_INHERIT = 0x2 + SUB_CONTAINERS_AND_OBJECTS_INHERIT = 0x3 + INHERIT_NO_PROPAGATE = 0x4 + INHERIT_ONLY = 0x8 + INHERITED_ACCESS_ENTRY = 0x10 + INHERITED_PARENT = 0x10000000 + INHERITED_GRANDPARENT = 0x20000000 + OBJECT_INHERIT_ACE = 0x1 + CONTAINER_INHERIT_ACE = 0x2 + NO_PROPAGATE_INHERIT_ACE = 0x4 + INHERIT_ONLY_ACE = 0x8 + INHERITED_ACE = 0x10 + VALID_INHERIT_FLAGS = 0x1F +) + +type MULTIPLE_TRUSTEE_OPERATION uint32 + +// Constants for MULTIPLE_TRUSTEE_OPERATION +const ( + NO_MULTIPLE_TRUSTEE = 0 + TRUSTEE_IS_IMPERSONATE = 1 +) + +type TRUSTEE_FORM uint32 + +// Constants for TRUSTEE_FORM +const ( + TRUSTEE_IS_SID = 0 + TRUSTEE_IS_NAME = 1 + TRUSTEE_BAD_FORM = 2 + TRUSTEE_IS_OBJECTS_AND_SID = 3 + TRUSTEE_IS_OBJECTS_AND_NAME = 4 +) + +type TRUSTEE_TYPE uint32 + +// Constants for TRUSTEE_TYPE +const ( + TRUSTEE_IS_UNKNOWN = 0 + TRUSTEE_IS_USER = 1 + TRUSTEE_IS_GROUP = 2 + TRUSTEE_IS_DOMAIN = 3 + TRUSTEE_IS_ALIAS = 4 + TRUSTEE_IS_WELL_KNOWN_GROUP = 5 + TRUSTEE_IS_DELETED = 6 + TRUSTEE_IS_INVALID = 7 + TRUSTEE_IS_COMPUTER = 8 +) + +// Constants for ObjectsPresent field +const ( + ACE_OBJECT_TYPE_PRESENT = 0x1 + ACE_INHERITED_OBJECT_TYPE_PRESENT = 0x2 +) + +type EXPLICIT_ACCESS struct { + AccessPermissions ACCESS_MASK + AccessMode ACCESS_MODE + Inheritance uint32 + Trustee TRUSTEE +} + +// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-ace_header +type ACE_HEADER struct { + AceType uint8 + AceFlags uint8 + AceSize uint16 +} + +// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-access_allowed_ace +type ACCESS_ALLOWED_ACE struct { + Header ACE_HEADER + Mask ACCESS_MASK + SidStart uint32 +} + +const ( + // Constants for AceType + // https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-ace_header + ACCESS_ALLOWED_ACE_TYPE = 0 + ACCESS_DENIED_ACE_TYPE = 1 +) + +// This type is the union inside of TRUSTEE and must be created using one of the TrusteeValueFrom* functions. +type TrusteeValue uintptr + +func TrusteeValueFromString(str string) TrusteeValue { + return TrusteeValue(unsafe.Pointer(StringToUTF16Ptr(str))) +} +func TrusteeValueFromSID(sid *SID) TrusteeValue { + return TrusteeValue(unsafe.Pointer(sid)) +} +func TrusteeValueFromObjectsAndSid(objectsAndSid *OBJECTS_AND_SID) TrusteeValue { + return TrusteeValue(unsafe.Pointer(objectsAndSid)) +} +func TrusteeValueFromObjectsAndName(objectsAndName *OBJECTS_AND_NAME) TrusteeValue { + return TrusteeValue(unsafe.Pointer(objectsAndName)) +} + +type TRUSTEE struct { + MultipleTrustee *TRUSTEE + MultipleTrusteeOperation MULTIPLE_TRUSTEE_OPERATION + TrusteeForm TRUSTEE_FORM + TrusteeType TRUSTEE_TYPE + TrusteeValue TrusteeValue +} + +type OBJECTS_AND_SID struct { + ObjectsPresent uint32 + ObjectTypeGuid GUID + InheritedObjectTypeGuid GUID + Sid *SID +} + +type OBJECTS_AND_NAME struct { + ObjectsPresent uint32 + ObjectType SE_OBJECT_TYPE + ObjectTypeName *uint16 + InheritedObjectTypeName *uint16 + Name *uint16 +} + +//sys getSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) = advapi32.GetSecurityInfo +//sys SetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) = advapi32.SetSecurityInfo +//sys getNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) = advapi32.GetNamedSecurityInfoW +//sys SetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) = advapi32.SetNamedSecurityInfoW +//sys SetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) = advapi32.SetKernelObjectSecurity + +//sys buildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, countAccessEntries uint32, accessEntries *EXPLICIT_ACCESS, countAuditEntries uint32, auditEntries *EXPLICIT_ACCESS, oldSecurityDescriptor *SECURITY_DESCRIPTOR, sizeNewSecurityDescriptor *uint32, newSecurityDescriptor **SECURITY_DESCRIPTOR) (ret error) = advapi32.BuildSecurityDescriptorW +//sys initializeSecurityDescriptor(absoluteSD *SECURITY_DESCRIPTOR, revision uint32) (err error) = advapi32.InitializeSecurityDescriptor + +//sys getSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, control *SECURITY_DESCRIPTOR_CONTROL, revision *uint32) (err error) = advapi32.GetSecurityDescriptorControl +//sys getSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent *bool, dacl **ACL, daclDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorDacl +//sys getSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent *bool, sacl **ACL, saclDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorSacl +//sys getSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner **SID, ownerDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorOwner +//sys getSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group **SID, groupDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorGroup +//sys getSecurityDescriptorLength(sd *SECURITY_DESCRIPTOR) (len uint32) = advapi32.GetSecurityDescriptorLength +//sys getSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) (ret error) [failretval!=0] = advapi32.GetSecurityDescriptorRMControl +//sys isValidSecurityDescriptor(sd *SECURITY_DESCRIPTOR) (isValid bool) = advapi32.IsValidSecurityDescriptor + +//sys setSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) (err error) = advapi32.SetSecurityDescriptorControl +//sys setSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent bool, dacl *ACL, daclDefaulted bool) (err error) = advapi32.SetSecurityDescriptorDacl +//sys setSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent bool, sacl *ACL, saclDefaulted bool) (err error) = advapi32.SetSecurityDescriptorSacl +//sys setSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner *SID, ownerDefaulted bool) (err error) = advapi32.SetSecurityDescriptorOwner +//sys setSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group *SID, groupDefaulted bool) (err error) = advapi32.SetSecurityDescriptorGroup +//sys setSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) = advapi32.SetSecurityDescriptorRMControl + +//sys convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd **SECURITY_DESCRIPTOR, size *uint32) (err error) = advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW +//sys convertSecurityDescriptorToStringSecurityDescriptor(sd *SECURITY_DESCRIPTOR, revision uint32, securityInformation SECURITY_INFORMATION, str **uint16, strLen *uint32) (err error) = advapi32.ConvertSecurityDescriptorToStringSecurityDescriptorW + +//sys makeAbsoluteSD(selfRelativeSD *SECURITY_DESCRIPTOR, absoluteSD *SECURITY_DESCRIPTOR, absoluteSDSize *uint32, dacl *ACL, daclSize *uint32, sacl *ACL, saclSize *uint32, owner *SID, ownerSize *uint32, group *SID, groupSize *uint32) (err error) = advapi32.MakeAbsoluteSD +//sys makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) = advapi32.MakeSelfRelativeSD + +//sys setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) = advapi32.SetEntriesInAclW +//sys GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (err error) = advapi32.GetAce + +// Control returns the security descriptor control bits. +func (sd *SECURITY_DESCRIPTOR) Control() (control SECURITY_DESCRIPTOR_CONTROL, revision uint32, err error) { + err = getSecurityDescriptorControl(sd, &control, &revision) + return +} + +// SetControl sets the security descriptor control bits. +func (sd *SECURITY_DESCRIPTOR) SetControl(controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) error { + return setSecurityDescriptorControl(sd, controlBitsOfInterest, controlBitsToSet) +} + +// RMControl returns the security descriptor resource manager control bits. +func (sd *SECURITY_DESCRIPTOR) RMControl() (control uint8, err error) { + err = getSecurityDescriptorRMControl(sd, &control) + return +} + +// SetRMControl sets the security descriptor resource manager control bits. +func (sd *SECURITY_DESCRIPTOR) SetRMControl(rmControl uint8) { + setSecurityDescriptorRMControl(sd, &rmControl) +} + +// DACL returns the security descriptor DACL and whether it was defaulted. The dacl return value may be nil +// if a DACL exists but is an "empty DACL", meaning fully permissive. If the DACL does not exist, err returns +// ERROR_OBJECT_NOT_FOUND. +func (sd *SECURITY_DESCRIPTOR) DACL() (dacl *ACL, defaulted bool, err error) { + var present bool + err = getSecurityDescriptorDacl(sd, &present, &dacl, &defaulted) + if !present { + err = ERROR_OBJECT_NOT_FOUND + } + return +} + +// SetDACL sets the absolute security descriptor DACL. +func (absoluteSD *SECURITY_DESCRIPTOR) SetDACL(dacl *ACL, present, defaulted bool) error { + return setSecurityDescriptorDacl(absoluteSD, present, dacl, defaulted) +} + +// SACL returns the security descriptor SACL and whether it was defaulted. The sacl return value may be nil +// if a SACL exists but is an "empty SACL", meaning fully permissive. If the SACL does not exist, err returns +// ERROR_OBJECT_NOT_FOUND. +func (sd *SECURITY_DESCRIPTOR) SACL() (sacl *ACL, defaulted bool, err error) { + var present bool + err = getSecurityDescriptorSacl(sd, &present, &sacl, &defaulted) + if !present { + err = ERROR_OBJECT_NOT_FOUND + } + return +} + +// SetSACL sets the absolute security descriptor SACL. +func (absoluteSD *SECURITY_DESCRIPTOR) SetSACL(sacl *ACL, present, defaulted bool) error { + return setSecurityDescriptorSacl(absoluteSD, present, sacl, defaulted) +} + +// Owner returns the security descriptor owner and whether it was defaulted. +func (sd *SECURITY_DESCRIPTOR) Owner() (owner *SID, defaulted bool, err error) { + err = getSecurityDescriptorOwner(sd, &owner, &defaulted) + return +} + +// SetOwner sets the absolute security descriptor owner. +func (absoluteSD *SECURITY_DESCRIPTOR) SetOwner(owner *SID, defaulted bool) error { + return setSecurityDescriptorOwner(absoluteSD, owner, defaulted) +} + +// Group returns the security descriptor group and whether it was defaulted. +func (sd *SECURITY_DESCRIPTOR) Group() (group *SID, defaulted bool, err error) { + err = getSecurityDescriptorGroup(sd, &group, &defaulted) + return +} + +// SetGroup sets the absolute security descriptor owner. +func (absoluteSD *SECURITY_DESCRIPTOR) SetGroup(group *SID, defaulted bool) error { + return setSecurityDescriptorGroup(absoluteSD, group, defaulted) +} + +// Length returns the length of the security descriptor. +func (sd *SECURITY_DESCRIPTOR) Length() uint32 { + return getSecurityDescriptorLength(sd) +} + +// IsValid returns whether the security descriptor is valid. +func (sd *SECURITY_DESCRIPTOR) IsValid() bool { + return isValidSecurityDescriptor(sd) +} + +// String returns the SDDL form of the security descriptor, with a function signature that can be +// used with %v formatting directives. +func (sd *SECURITY_DESCRIPTOR) String() string { + var sddl *uint16 + err := convertSecurityDescriptorToStringSecurityDescriptor(sd, 1, 0xff, &sddl, nil) + if err != nil { + return "" + } + defer LocalFree(Handle(unsafe.Pointer(sddl))) + return UTF16PtrToString(sddl) +} + +// ToAbsolute converts a self-relative security descriptor into an absolute one. +func (selfRelativeSD *SECURITY_DESCRIPTOR) ToAbsolute() (absoluteSD *SECURITY_DESCRIPTOR, err error) { + control, _, err := selfRelativeSD.Control() + if err != nil { + return + } + if control&SE_SELF_RELATIVE == 0 { + err = ERROR_INVALID_PARAMETER + return + } + var absoluteSDSize, daclSize, saclSize, ownerSize, groupSize uint32 + err = makeAbsoluteSD(selfRelativeSD, nil, &absoluteSDSize, + nil, &daclSize, nil, &saclSize, nil, &ownerSize, nil, &groupSize) + switch err { + case ERROR_INSUFFICIENT_BUFFER: + case nil: + // makeAbsoluteSD is expected to fail, but it succeeds. + return nil, ERROR_INTERNAL_ERROR + default: + return nil, err + } + if absoluteSDSize > 0 { + absoluteSD = new(SECURITY_DESCRIPTOR) + if unsafe.Sizeof(*absoluteSD) < uintptr(absoluteSDSize) { + panic("sizeof(SECURITY_DESCRIPTOR) too small") + } + } + var ( + dacl *ACL + sacl *ACL + owner *SID + group *SID + ) + if daclSize > 0 { + dacl = (*ACL)(unsafe.Pointer(unsafe.SliceData(make([]byte, daclSize)))) + } + if saclSize > 0 { + sacl = (*ACL)(unsafe.Pointer(unsafe.SliceData(make([]byte, saclSize)))) + } + if ownerSize > 0 { + owner = (*SID)(unsafe.Pointer(unsafe.SliceData(make([]byte, ownerSize)))) + } + if groupSize > 0 { + group = (*SID)(unsafe.Pointer(unsafe.SliceData(make([]byte, groupSize)))) + } + // We call into Windows via makeAbsoluteSD, which sets up + // pointers within absoluteSD that point to other chunks of memory + // we pass into makeAbsoluteSD, and that happens outside the view of the GC. + // We therefore take some care here to then verify the pointers are as we expect + // and set them explicitly in view of the GC. See https://go.dev/issue/73199. + // TODO: consider weak pointers once Go 1.24 is appropriate. See suggestion in https://go.dev/cl/663575. + err = makeAbsoluteSD(selfRelativeSD, absoluteSD, &absoluteSDSize, + dacl, &daclSize, sacl, &saclSize, owner, &ownerSize, group, &groupSize) + if err != nil { + // Don't return absoluteSD, which might be partially initialized. + return nil, err + } + // Before using any fields, verify absoluteSD is in the format we expect according to Windows. + // See https://learn.microsoft.com/en-us/windows/win32/secauthz/absolute-and-self-relative-security-descriptors + absControl, _, err := absoluteSD.Control() + if err != nil { + panic("absoluteSD: " + err.Error()) + } + if absControl&SE_SELF_RELATIVE != 0 { + panic("absoluteSD not in absolute format") + } + if absoluteSD.dacl != dacl { + panic("dacl pointer mismatch") + } + if absoluteSD.sacl != sacl { + panic("sacl pointer mismatch") + } + if absoluteSD.owner != owner { + panic("owner pointer mismatch") + } + if absoluteSD.group != group { + panic("group pointer mismatch") + } + absoluteSD.dacl = dacl + absoluteSD.sacl = sacl + absoluteSD.owner = owner + absoluteSD.group = group + + return +} + +// ToSelfRelative converts an absolute security descriptor into a self-relative one. +func (absoluteSD *SECURITY_DESCRIPTOR) ToSelfRelative() (selfRelativeSD *SECURITY_DESCRIPTOR, err error) { + control, _, err := absoluteSD.Control() + if err != nil { + return + } + if control&SE_SELF_RELATIVE != 0 { + err = ERROR_INVALID_PARAMETER + return + } + var selfRelativeSDSize uint32 + err = makeSelfRelativeSD(absoluteSD, nil, &selfRelativeSDSize) + switch err { + case ERROR_INSUFFICIENT_BUFFER: + case nil: + // makeSelfRelativeSD is expected to fail, but it succeeds. + return nil, ERROR_INTERNAL_ERROR + default: + return nil, err + } + if selfRelativeSDSize > 0 { + selfRelativeSD = (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&make([]byte, selfRelativeSDSize)[0])) + } + err = makeSelfRelativeSD(absoluteSD, selfRelativeSD, &selfRelativeSDSize) + return +} + +func (selfRelativeSD *SECURITY_DESCRIPTOR) copySelfRelativeSecurityDescriptor() *SECURITY_DESCRIPTOR { + sdLen := int(selfRelativeSD.Length()) + const min = int(unsafe.Sizeof(SECURITY_DESCRIPTOR{})) + if sdLen < min { + sdLen = min + } + + src := unsafe.Slice((*byte)(unsafe.Pointer(selfRelativeSD)), sdLen) + // SECURITY_DESCRIPTOR has pointers in it, which means checkptr expects for it to + // be aligned properly. When we're copying a Windows-allocated struct to a + // Go-allocated one, make sure that the Go allocation is aligned to the + // pointer size. + const psize = int(unsafe.Sizeof(uintptr(0))) + alloc := make([]uintptr, (sdLen+psize-1)/psize) + dst := unsafe.Slice((*byte)(unsafe.Pointer(&alloc[0])), sdLen) + copy(dst, src) + return (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&dst[0])) +} + +// SecurityDescriptorFromString converts an SDDL string describing a security descriptor into a +// self-relative security descriptor object allocated on the Go heap. +func SecurityDescriptorFromString(sddl string) (sd *SECURITY_DESCRIPTOR, err error) { + var winHeapSD *SECURITY_DESCRIPTOR + err = convertStringSecurityDescriptorToSecurityDescriptor(sddl, 1, &winHeapSD, nil) + if err != nil { + return + } + defer LocalFree(Handle(unsafe.Pointer(winHeapSD))) + return winHeapSD.copySelfRelativeSecurityDescriptor(), nil +} + +// GetSecurityInfo queries the security information for a given handle and returns the self-relative security +// descriptor result on the Go heap. +func GetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION) (sd *SECURITY_DESCRIPTOR, err error) { + var winHeapSD *SECURITY_DESCRIPTOR + err = getSecurityInfo(handle, objectType, securityInformation, nil, nil, nil, nil, &winHeapSD) + if err != nil { + return + } + defer LocalFree(Handle(unsafe.Pointer(winHeapSD))) + return winHeapSD.copySelfRelativeSecurityDescriptor(), nil +} + +// GetNamedSecurityInfo queries the security information for a given named object and returns the self-relative security +// descriptor result on the Go heap. +func GetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION) (sd *SECURITY_DESCRIPTOR, err error) { + var winHeapSD *SECURITY_DESCRIPTOR + err = getNamedSecurityInfo(objectName, objectType, securityInformation, nil, nil, nil, nil, &winHeapSD) + if err != nil { + return + } + defer LocalFree(Handle(unsafe.Pointer(winHeapSD))) + return winHeapSD.copySelfRelativeSecurityDescriptor(), nil +} + +// BuildSecurityDescriptor makes a new security descriptor using the input trustees, explicit access lists, and +// prior security descriptor to be merged, any of which can be nil, returning the self-relative security descriptor +// result on the Go heap. +func BuildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, accessEntries []EXPLICIT_ACCESS, auditEntries []EXPLICIT_ACCESS, mergedSecurityDescriptor *SECURITY_DESCRIPTOR) (sd *SECURITY_DESCRIPTOR, err error) { + var winHeapSD *SECURITY_DESCRIPTOR + var winHeapSDSize uint32 + var firstAccessEntry *EXPLICIT_ACCESS + if len(accessEntries) > 0 { + firstAccessEntry = &accessEntries[0] + } + var firstAuditEntry *EXPLICIT_ACCESS + if len(auditEntries) > 0 { + firstAuditEntry = &auditEntries[0] + } + err = buildSecurityDescriptor(owner, group, uint32(len(accessEntries)), firstAccessEntry, uint32(len(auditEntries)), firstAuditEntry, mergedSecurityDescriptor, &winHeapSDSize, &winHeapSD) + if err != nil { + return + } + defer LocalFree(Handle(unsafe.Pointer(winHeapSD))) + return winHeapSD.copySelfRelativeSecurityDescriptor(), nil +} + +// NewSecurityDescriptor creates and initializes a new absolute security descriptor. +func NewSecurityDescriptor() (absoluteSD *SECURITY_DESCRIPTOR, err error) { + absoluteSD = &SECURITY_DESCRIPTOR{} + err = initializeSecurityDescriptor(absoluteSD, 1) + return +} + +// ACLFromEntries returns a new ACL on the Go heap containing a list of explicit entries as well as those of another ACL. +// Both explicitEntries and mergedACL are optional and can be nil. +func ACLFromEntries(explicitEntries []EXPLICIT_ACCESS, mergedACL *ACL) (acl *ACL, err error) { + var firstExplicitEntry *EXPLICIT_ACCESS + if len(explicitEntries) > 0 { + firstExplicitEntry = &explicitEntries[0] + } + var winHeapACL *ACL + err = setEntriesInAcl(uint32(len(explicitEntries)), firstExplicitEntry, mergedACL, &winHeapACL) + if err != nil { + return + } + defer LocalFree(Handle(unsafe.Pointer(winHeapACL))) + aclBytes := make([]byte, winHeapACL.aclSize) + copy(aclBytes, (*[(1 << 31) - 1]byte)(unsafe.Pointer(winHeapACL))[:len(aclBytes):len(aclBytes)]) + return (*ACL)(unsafe.Pointer(&aclBytes[0])), nil +} diff --git a/vendor/golang.org/x/sys/windows/service.go b/vendor/golang.org/x/sys/windows/service.go new file mode 100644 index 0000000..a9dc630 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/service.go @@ -0,0 +1,257 @@ +// 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. + +//go:build windows + +package windows + +const ( + SC_MANAGER_CONNECT = 1 + SC_MANAGER_CREATE_SERVICE = 2 + SC_MANAGER_ENUMERATE_SERVICE = 4 + SC_MANAGER_LOCK = 8 + SC_MANAGER_QUERY_LOCK_STATUS = 16 + SC_MANAGER_MODIFY_BOOT_CONFIG = 32 + SC_MANAGER_ALL_ACCESS = 0xf003f +) + +const ( + SERVICE_KERNEL_DRIVER = 1 + SERVICE_FILE_SYSTEM_DRIVER = 2 + SERVICE_ADAPTER = 4 + SERVICE_RECOGNIZER_DRIVER = 8 + SERVICE_WIN32_OWN_PROCESS = 16 + SERVICE_WIN32_SHARE_PROCESS = 32 + SERVICE_WIN32 = SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS + SERVICE_INTERACTIVE_PROCESS = 256 + SERVICE_DRIVER = SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER + SERVICE_TYPE_ALL = SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS + + SERVICE_BOOT_START = 0 + SERVICE_SYSTEM_START = 1 + SERVICE_AUTO_START = 2 + SERVICE_DEMAND_START = 3 + SERVICE_DISABLED = 4 + + SERVICE_ERROR_IGNORE = 0 + SERVICE_ERROR_NORMAL = 1 + SERVICE_ERROR_SEVERE = 2 + SERVICE_ERROR_CRITICAL = 3 + + SC_STATUS_PROCESS_INFO = 0 + + SC_ACTION_NONE = 0 + SC_ACTION_RESTART = 1 + SC_ACTION_REBOOT = 2 + SC_ACTION_RUN_COMMAND = 3 + + SERVICE_STOPPED = 1 + SERVICE_START_PENDING = 2 + SERVICE_STOP_PENDING = 3 + SERVICE_RUNNING = 4 + SERVICE_CONTINUE_PENDING = 5 + SERVICE_PAUSE_PENDING = 6 + SERVICE_PAUSED = 7 + SERVICE_NO_CHANGE = 0xffffffff + + SERVICE_ACCEPT_STOP = 1 + SERVICE_ACCEPT_PAUSE_CONTINUE = 2 + SERVICE_ACCEPT_SHUTDOWN = 4 + SERVICE_ACCEPT_PARAMCHANGE = 8 + SERVICE_ACCEPT_NETBINDCHANGE = 16 + SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 32 + SERVICE_ACCEPT_POWEREVENT = 64 + SERVICE_ACCEPT_SESSIONCHANGE = 128 + SERVICE_ACCEPT_PRESHUTDOWN = 256 + + SERVICE_CONTROL_STOP = 1 + SERVICE_CONTROL_PAUSE = 2 + SERVICE_CONTROL_CONTINUE = 3 + SERVICE_CONTROL_INTERROGATE = 4 + SERVICE_CONTROL_SHUTDOWN = 5 + SERVICE_CONTROL_PARAMCHANGE = 6 + SERVICE_CONTROL_NETBINDADD = 7 + SERVICE_CONTROL_NETBINDREMOVE = 8 + SERVICE_CONTROL_NETBINDENABLE = 9 + SERVICE_CONTROL_NETBINDDISABLE = 10 + SERVICE_CONTROL_DEVICEEVENT = 11 + SERVICE_CONTROL_HARDWAREPROFILECHANGE = 12 + SERVICE_CONTROL_POWEREVENT = 13 + SERVICE_CONTROL_SESSIONCHANGE = 14 + SERVICE_CONTROL_PRESHUTDOWN = 15 + + SERVICE_ACTIVE = 1 + SERVICE_INACTIVE = 2 + SERVICE_STATE_ALL = 3 + + SERVICE_QUERY_CONFIG = 1 + SERVICE_CHANGE_CONFIG = 2 + SERVICE_QUERY_STATUS = 4 + SERVICE_ENUMERATE_DEPENDENTS = 8 + SERVICE_START = 16 + SERVICE_STOP = 32 + SERVICE_PAUSE_CONTINUE = 64 + SERVICE_INTERROGATE = 128 + SERVICE_USER_DEFINED_CONTROL = 256 + SERVICE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE_START | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL + + SERVICE_RUNS_IN_SYSTEM_PROCESS = 1 + + SERVICE_CONFIG_DESCRIPTION = 1 + SERVICE_CONFIG_FAILURE_ACTIONS = 2 + SERVICE_CONFIG_DELAYED_AUTO_START_INFO = 3 + SERVICE_CONFIG_FAILURE_ACTIONS_FLAG = 4 + SERVICE_CONFIG_SERVICE_SID_INFO = 5 + SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO = 6 + SERVICE_CONFIG_PRESHUTDOWN_INFO = 7 + SERVICE_CONFIG_TRIGGER_INFO = 8 + SERVICE_CONFIG_PREFERRED_NODE = 9 + SERVICE_CONFIG_LAUNCH_PROTECTED = 12 + + SERVICE_SID_TYPE_NONE = 0 + SERVICE_SID_TYPE_UNRESTRICTED = 1 + SERVICE_SID_TYPE_RESTRICTED = 2 | SERVICE_SID_TYPE_UNRESTRICTED + + SC_ENUM_PROCESS_INFO = 0 + + SERVICE_NOTIFY_STATUS_CHANGE = 2 + SERVICE_NOTIFY_STOPPED = 0x00000001 + SERVICE_NOTIFY_START_PENDING = 0x00000002 + SERVICE_NOTIFY_STOP_PENDING = 0x00000004 + SERVICE_NOTIFY_RUNNING = 0x00000008 + SERVICE_NOTIFY_CONTINUE_PENDING = 0x00000010 + SERVICE_NOTIFY_PAUSE_PENDING = 0x00000020 + SERVICE_NOTIFY_PAUSED = 0x00000040 + SERVICE_NOTIFY_CREATED = 0x00000080 + SERVICE_NOTIFY_DELETED = 0x00000100 + SERVICE_NOTIFY_DELETE_PENDING = 0x00000200 + + SC_EVENT_DATABASE_CHANGE = 0 + SC_EVENT_PROPERTY_CHANGE = 1 + SC_EVENT_STATUS_CHANGE = 2 + + SERVICE_START_REASON_DEMAND = 0x00000001 + SERVICE_START_REASON_AUTO = 0x00000002 + SERVICE_START_REASON_TRIGGER = 0x00000004 + SERVICE_START_REASON_RESTART_ON_FAILURE = 0x00000008 + SERVICE_START_REASON_DELAYEDAUTO = 0x00000010 + + SERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON = 1 +) + +type ENUM_SERVICE_STATUS struct { + ServiceName *uint16 + DisplayName *uint16 + ServiceStatus SERVICE_STATUS +} + +type SERVICE_STATUS struct { + ServiceType uint32 + CurrentState uint32 + ControlsAccepted uint32 + Win32ExitCode uint32 + ServiceSpecificExitCode uint32 + CheckPoint uint32 + WaitHint uint32 +} + +type SERVICE_TABLE_ENTRY struct { + ServiceName *uint16 + ServiceProc uintptr +} + +type QUERY_SERVICE_CONFIG struct { + ServiceType uint32 + StartType uint32 + ErrorControl uint32 + BinaryPathName *uint16 + LoadOrderGroup *uint16 + TagId uint32 + Dependencies *uint16 + ServiceStartName *uint16 + DisplayName *uint16 +} + +type SERVICE_DESCRIPTION struct { + Description *uint16 +} + +type SERVICE_DELAYED_AUTO_START_INFO struct { + IsDelayedAutoStartUp uint32 +} + +type SERVICE_STATUS_PROCESS struct { + ServiceType uint32 + CurrentState uint32 + ControlsAccepted uint32 + Win32ExitCode uint32 + ServiceSpecificExitCode uint32 + CheckPoint uint32 + WaitHint uint32 + ProcessId uint32 + ServiceFlags uint32 +} + +type ENUM_SERVICE_STATUS_PROCESS struct { + ServiceName *uint16 + DisplayName *uint16 + ServiceStatusProcess SERVICE_STATUS_PROCESS +} + +type SERVICE_NOTIFY struct { + Version uint32 + NotifyCallback uintptr + Context uintptr + NotificationStatus uint32 + ServiceStatus SERVICE_STATUS_PROCESS + NotificationTriggered uint32 + ServiceNames *uint16 +} + +type SERVICE_FAILURE_ACTIONS struct { + ResetPeriod uint32 + RebootMsg *uint16 + Command *uint16 + ActionsCount uint32 + Actions *SC_ACTION +} + +type SERVICE_FAILURE_ACTIONS_FLAG struct { + FailureActionsOnNonCrashFailures int32 +} + +type SC_ACTION struct { + Type uint32 + Delay uint32 +} + +type QUERY_SERVICE_LOCK_STATUS struct { + IsLocked uint32 + LockOwner *uint16 + LockDuration uint32 +} + +//sys OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenSCManagerW +//sys CloseServiceHandle(handle Handle) (err error) = advapi32.CloseServiceHandle +//sys CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) [failretval==0] = advapi32.CreateServiceW +//sys OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenServiceW +//sys DeleteService(service Handle) (err error) = advapi32.DeleteService +//sys StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) = advapi32.StartServiceW +//sys QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) = advapi32.QueryServiceStatus +//sys QueryServiceLockStatus(mgr Handle, lockStatus *QUERY_SERVICE_LOCK_STATUS, bufSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceLockStatusW +//sys ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) = advapi32.ControlService +//sys StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) = advapi32.StartServiceCtrlDispatcherW +//sys SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) = advapi32.SetServiceStatus +//sys ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) = advapi32.ChangeServiceConfigW +//sys QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfigW +//sys ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) = advapi32.ChangeServiceConfig2W +//sys QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfig2W +//sys EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) = advapi32.EnumServicesStatusExW +//sys QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceStatusEx +//sys NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERVICE_NOTIFY) (ret error) = advapi32.NotifyServiceStatusChangeW +//sys SubscribeServiceChangeNotifications(service Handle, eventType uint32, callback uintptr, callbackCtx uintptr, subscription *uintptr) (ret error) = sechost.SubscribeServiceChangeNotifications? +//sys UnsubscribeServiceChangeNotifications(subscription uintptr) = sechost.UnsubscribeServiceChangeNotifications? +//sys RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) = advapi32.RegisterServiceCtrlHandlerExW +//sys QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) = advapi32.QueryServiceDynamicInformation? +//sys EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) = advapi32.EnumDependentServicesW diff --git a/vendor/golang.org/x/sys/windows/setupapi_windows.go b/vendor/golang.org/x/sys/windows/setupapi_windows.go new file mode 100644 index 0000000..f812648 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/setupapi_windows.go @@ -0,0 +1,1425 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +import ( + "encoding/binary" + "errors" + "fmt" + "runtime" + "strings" + "syscall" + "unsafe" +) + +// This file contains functions that wrap SetupAPI.dll and CfgMgr32.dll, +// core system functions for managing hardware devices, drivers, and the PnP tree. +// Information about these APIs can be found at: +// https://docs.microsoft.com/en-us/windows-hardware/drivers/install/setupapi +// https://docs.microsoft.com/en-us/windows/win32/devinst/cfgmgr32- + +const ( + ERROR_EXPECTED_SECTION_NAME Errno = 0x20000000 | 0xC0000000 | 0 + ERROR_BAD_SECTION_NAME_LINE Errno = 0x20000000 | 0xC0000000 | 1 + ERROR_SECTION_NAME_TOO_LONG Errno = 0x20000000 | 0xC0000000 | 2 + ERROR_GENERAL_SYNTAX Errno = 0x20000000 | 0xC0000000 | 3 + ERROR_WRONG_INF_STYLE Errno = 0x20000000 | 0xC0000000 | 0x100 + ERROR_SECTION_NOT_FOUND Errno = 0x20000000 | 0xC0000000 | 0x101 + ERROR_LINE_NOT_FOUND Errno = 0x20000000 | 0xC0000000 | 0x102 + ERROR_NO_BACKUP Errno = 0x20000000 | 0xC0000000 | 0x103 + ERROR_NO_ASSOCIATED_CLASS Errno = 0x20000000 | 0xC0000000 | 0x200 + ERROR_CLASS_MISMATCH Errno = 0x20000000 | 0xC0000000 | 0x201 + ERROR_DUPLICATE_FOUND Errno = 0x20000000 | 0xC0000000 | 0x202 + ERROR_NO_DRIVER_SELECTED Errno = 0x20000000 | 0xC0000000 | 0x203 + ERROR_KEY_DOES_NOT_EXIST Errno = 0x20000000 | 0xC0000000 | 0x204 + ERROR_INVALID_DEVINST_NAME Errno = 0x20000000 | 0xC0000000 | 0x205 + ERROR_INVALID_CLASS Errno = 0x20000000 | 0xC0000000 | 0x206 + ERROR_DEVINST_ALREADY_EXISTS Errno = 0x20000000 | 0xC0000000 | 0x207 + ERROR_DEVINFO_NOT_REGISTERED Errno = 0x20000000 | 0xC0000000 | 0x208 + ERROR_INVALID_REG_PROPERTY Errno = 0x20000000 | 0xC0000000 | 0x209 + ERROR_NO_INF Errno = 0x20000000 | 0xC0000000 | 0x20A + ERROR_NO_SUCH_DEVINST Errno = 0x20000000 | 0xC0000000 | 0x20B + ERROR_CANT_LOAD_CLASS_ICON Errno = 0x20000000 | 0xC0000000 | 0x20C + ERROR_INVALID_CLASS_INSTALLER Errno = 0x20000000 | 0xC0000000 | 0x20D + ERROR_DI_DO_DEFAULT Errno = 0x20000000 | 0xC0000000 | 0x20E + ERROR_DI_NOFILECOPY Errno = 0x20000000 | 0xC0000000 | 0x20F + ERROR_INVALID_HWPROFILE Errno = 0x20000000 | 0xC0000000 | 0x210 + ERROR_NO_DEVICE_SELECTED Errno = 0x20000000 | 0xC0000000 | 0x211 + ERROR_DEVINFO_LIST_LOCKED Errno = 0x20000000 | 0xC0000000 | 0x212 + ERROR_DEVINFO_DATA_LOCKED Errno = 0x20000000 | 0xC0000000 | 0x213 + ERROR_DI_BAD_PATH Errno = 0x20000000 | 0xC0000000 | 0x214 + ERROR_NO_CLASSINSTALL_PARAMS Errno = 0x20000000 | 0xC0000000 | 0x215 + ERROR_FILEQUEUE_LOCKED Errno = 0x20000000 | 0xC0000000 | 0x216 + ERROR_BAD_SERVICE_INSTALLSECT Errno = 0x20000000 | 0xC0000000 | 0x217 + ERROR_NO_CLASS_DRIVER_LIST Errno = 0x20000000 | 0xC0000000 | 0x218 + ERROR_NO_ASSOCIATED_SERVICE Errno = 0x20000000 | 0xC0000000 | 0x219 + ERROR_NO_DEFAULT_DEVICE_INTERFACE Errno = 0x20000000 | 0xC0000000 | 0x21A + ERROR_DEVICE_INTERFACE_ACTIVE Errno = 0x20000000 | 0xC0000000 | 0x21B + ERROR_DEVICE_INTERFACE_REMOVED Errno = 0x20000000 | 0xC0000000 | 0x21C + ERROR_BAD_INTERFACE_INSTALLSECT Errno = 0x20000000 | 0xC0000000 | 0x21D + ERROR_NO_SUCH_INTERFACE_CLASS Errno = 0x20000000 | 0xC0000000 | 0x21E + ERROR_INVALID_REFERENCE_STRING Errno = 0x20000000 | 0xC0000000 | 0x21F + ERROR_INVALID_MACHINENAME Errno = 0x20000000 | 0xC0000000 | 0x220 + ERROR_REMOTE_COMM_FAILURE Errno = 0x20000000 | 0xC0000000 | 0x221 + ERROR_MACHINE_UNAVAILABLE Errno = 0x20000000 | 0xC0000000 | 0x222 + ERROR_NO_CONFIGMGR_SERVICES Errno = 0x20000000 | 0xC0000000 | 0x223 + ERROR_INVALID_PROPPAGE_PROVIDER Errno = 0x20000000 | 0xC0000000 | 0x224 + ERROR_NO_SUCH_DEVICE_INTERFACE Errno = 0x20000000 | 0xC0000000 | 0x225 + ERROR_DI_POSTPROCESSING_REQUIRED Errno = 0x20000000 | 0xC0000000 | 0x226 + ERROR_INVALID_COINSTALLER Errno = 0x20000000 | 0xC0000000 | 0x227 + ERROR_NO_COMPAT_DRIVERS Errno = 0x20000000 | 0xC0000000 | 0x228 + ERROR_NO_DEVICE_ICON Errno = 0x20000000 | 0xC0000000 | 0x229 + ERROR_INVALID_INF_LOGCONFIG Errno = 0x20000000 | 0xC0000000 | 0x22A + ERROR_DI_DONT_INSTALL Errno = 0x20000000 | 0xC0000000 | 0x22B + ERROR_INVALID_FILTER_DRIVER Errno = 0x20000000 | 0xC0000000 | 0x22C + ERROR_NON_WINDOWS_NT_DRIVER Errno = 0x20000000 | 0xC0000000 | 0x22D + ERROR_NON_WINDOWS_DRIVER Errno = 0x20000000 | 0xC0000000 | 0x22E + ERROR_NO_CATALOG_FOR_OEM_INF Errno = 0x20000000 | 0xC0000000 | 0x22F + ERROR_DEVINSTALL_QUEUE_NONNATIVE Errno = 0x20000000 | 0xC0000000 | 0x230 + ERROR_NOT_DISABLEABLE Errno = 0x20000000 | 0xC0000000 | 0x231 + ERROR_CANT_REMOVE_DEVINST Errno = 0x20000000 | 0xC0000000 | 0x232 + ERROR_INVALID_TARGET Errno = 0x20000000 | 0xC0000000 | 0x233 + ERROR_DRIVER_NONNATIVE Errno = 0x20000000 | 0xC0000000 | 0x234 + ERROR_IN_WOW64 Errno = 0x20000000 | 0xC0000000 | 0x235 + ERROR_SET_SYSTEM_RESTORE_POINT Errno = 0x20000000 | 0xC0000000 | 0x236 + ERROR_SCE_DISABLED Errno = 0x20000000 | 0xC0000000 | 0x238 + ERROR_UNKNOWN_EXCEPTION Errno = 0x20000000 | 0xC0000000 | 0x239 + ERROR_PNP_REGISTRY_ERROR Errno = 0x20000000 | 0xC0000000 | 0x23A + ERROR_REMOTE_REQUEST_UNSUPPORTED Errno = 0x20000000 | 0xC0000000 | 0x23B + ERROR_NOT_AN_INSTALLED_OEM_INF Errno = 0x20000000 | 0xC0000000 | 0x23C + ERROR_INF_IN_USE_BY_DEVICES Errno = 0x20000000 | 0xC0000000 | 0x23D + ERROR_DI_FUNCTION_OBSOLETE Errno = 0x20000000 | 0xC0000000 | 0x23E + ERROR_NO_AUTHENTICODE_CATALOG Errno = 0x20000000 | 0xC0000000 | 0x23F + ERROR_AUTHENTICODE_DISALLOWED Errno = 0x20000000 | 0xC0000000 | 0x240 + ERROR_AUTHENTICODE_TRUSTED_PUBLISHER Errno = 0x20000000 | 0xC0000000 | 0x241 + ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED Errno = 0x20000000 | 0xC0000000 | 0x242 + ERROR_AUTHENTICODE_PUBLISHER_NOT_TRUSTED Errno = 0x20000000 | 0xC0000000 | 0x243 + ERROR_SIGNATURE_OSATTRIBUTE_MISMATCH Errno = 0x20000000 | 0xC0000000 | 0x244 + ERROR_ONLY_VALIDATE_VIA_AUTHENTICODE Errno = 0x20000000 | 0xC0000000 | 0x245 + ERROR_DEVICE_INSTALLER_NOT_READY Errno = 0x20000000 | 0xC0000000 | 0x246 + ERROR_DRIVER_STORE_ADD_FAILED Errno = 0x20000000 | 0xC0000000 | 0x247 + ERROR_DEVICE_INSTALL_BLOCKED Errno = 0x20000000 | 0xC0000000 | 0x248 + ERROR_DRIVER_INSTALL_BLOCKED Errno = 0x20000000 | 0xC0000000 | 0x249 + ERROR_WRONG_INF_TYPE Errno = 0x20000000 | 0xC0000000 | 0x24A + ERROR_FILE_HASH_NOT_IN_CATALOG Errno = 0x20000000 | 0xC0000000 | 0x24B + ERROR_DRIVER_STORE_DELETE_FAILED Errno = 0x20000000 | 0xC0000000 | 0x24C + ERROR_UNRECOVERABLE_STACK_OVERFLOW Errno = 0x20000000 | 0xC0000000 | 0x300 + EXCEPTION_SPAPI_UNRECOVERABLE_STACK_OVERFLOW Errno = ERROR_UNRECOVERABLE_STACK_OVERFLOW + ERROR_NO_DEFAULT_INTERFACE_DEVICE Errno = ERROR_NO_DEFAULT_DEVICE_INTERFACE + ERROR_INTERFACE_DEVICE_ACTIVE Errno = ERROR_DEVICE_INTERFACE_ACTIVE + ERROR_INTERFACE_DEVICE_REMOVED Errno = ERROR_DEVICE_INTERFACE_REMOVED + ERROR_NO_SUCH_INTERFACE_DEVICE Errno = ERROR_NO_SUCH_DEVICE_INTERFACE +) + +const ( + MAX_DEVICE_ID_LEN = 200 + MAX_DEVNODE_ID_LEN = MAX_DEVICE_ID_LEN + MAX_GUID_STRING_LEN = 39 // 38 chars + terminator null + MAX_CLASS_NAME_LEN = 32 + MAX_PROFILE_LEN = 80 + MAX_CONFIG_VALUE = 9999 + MAX_INSTANCE_VALUE = 9999 + CONFIGMG_VERSION = 0x0400 +) + +// Maximum string length constants +const ( + LINE_LEN = 256 // Windows 9x-compatible maximum for displayable strings coming from a device INF. + MAX_INF_STRING_LENGTH = 4096 // Actual maximum size of an INF string (including string substitutions). + MAX_INF_SECTION_NAME_LENGTH = 255 // For Windows 9x compatibility, INF section names should be constrained to 32 characters. + MAX_TITLE_LEN = 60 + MAX_INSTRUCTION_LEN = 256 + MAX_LABEL_LEN = 30 + MAX_SERVICE_NAME_LEN = 256 + MAX_SUBTITLE_LEN = 256 +) + +const ( + // SP_MAX_MACHINENAME_LENGTH defines maximum length of a machine name in the format expected by ConfigMgr32 CM_Connect_Machine (i.e., "\\\\MachineName\0"). + SP_MAX_MACHINENAME_LENGTH = MAX_PATH + 3 +) + +// HSPFILEQ is type for setup file queue +type HSPFILEQ uintptr + +// DevInfo holds reference to device information set +type DevInfo Handle + +// DEVINST is a handle usually recognized by cfgmgr32 APIs +type DEVINST uint32 + +// DevInfoData is a device information structure (references a device instance that is a member of a device information set) +type DevInfoData struct { + size uint32 + ClassGUID GUID + DevInst DEVINST + _ uintptr +} + +// DevInfoListDetailData is a structure for detailed information on a device information set (used for SetupDiGetDeviceInfoListDetail which supersedes the functionality of SetupDiGetDeviceInfoListClass). +type DevInfoListDetailData struct { + size uint32 // Use unsafeSizeOf method + ClassGUID GUID + RemoteMachineHandle Handle + remoteMachineName [SP_MAX_MACHINENAME_LENGTH]uint16 +} + +func (*DevInfoListDetailData) unsafeSizeOf() uint32 { + if unsafe.Sizeof(uintptr(0)) == 4 { + // Windows declares this with pshpack1.h + return uint32(unsafe.Offsetof(DevInfoListDetailData{}.remoteMachineName) + unsafe.Sizeof(DevInfoListDetailData{}.remoteMachineName)) + } + return uint32(unsafe.Sizeof(DevInfoListDetailData{})) +} + +func (data *DevInfoListDetailData) RemoteMachineName() string { + return UTF16ToString(data.remoteMachineName[:]) +} + +func (data *DevInfoListDetailData) SetRemoteMachineName(remoteMachineName string) error { + str, err := UTF16FromString(remoteMachineName) + if err != nil { + return err + } + copy(data.remoteMachineName[:], str) + return nil +} + +// DI_FUNCTION is function type for device installer +type DI_FUNCTION uint32 + +const ( + DIF_SELECTDEVICE DI_FUNCTION = 0x00000001 + DIF_INSTALLDEVICE DI_FUNCTION = 0x00000002 + DIF_ASSIGNRESOURCES DI_FUNCTION = 0x00000003 + DIF_PROPERTIES DI_FUNCTION = 0x00000004 + DIF_REMOVE DI_FUNCTION = 0x00000005 + DIF_FIRSTTIMESETUP DI_FUNCTION = 0x00000006 + DIF_FOUNDDEVICE DI_FUNCTION = 0x00000007 + DIF_SELECTCLASSDRIVERS DI_FUNCTION = 0x00000008 + DIF_VALIDATECLASSDRIVERS DI_FUNCTION = 0x00000009 + DIF_INSTALLCLASSDRIVERS DI_FUNCTION = 0x0000000A + DIF_CALCDISKSPACE DI_FUNCTION = 0x0000000B + DIF_DESTROYPRIVATEDATA DI_FUNCTION = 0x0000000C + DIF_VALIDATEDRIVER DI_FUNCTION = 0x0000000D + DIF_DETECT DI_FUNCTION = 0x0000000F + DIF_INSTALLWIZARD DI_FUNCTION = 0x00000010 + DIF_DESTROYWIZARDDATA DI_FUNCTION = 0x00000011 + DIF_PROPERTYCHANGE DI_FUNCTION = 0x00000012 + DIF_ENABLECLASS DI_FUNCTION = 0x00000013 + DIF_DETECTVERIFY DI_FUNCTION = 0x00000014 + DIF_INSTALLDEVICEFILES DI_FUNCTION = 0x00000015 + DIF_UNREMOVE DI_FUNCTION = 0x00000016 + DIF_SELECTBESTCOMPATDRV DI_FUNCTION = 0x00000017 + DIF_ALLOW_INSTALL DI_FUNCTION = 0x00000018 + DIF_REGISTERDEVICE DI_FUNCTION = 0x00000019 + DIF_NEWDEVICEWIZARD_PRESELECT DI_FUNCTION = 0x0000001A + DIF_NEWDEVICEWIZARD_SELECT DI_FUNCTION = 0x0000001B + DIF_NEWDEVICEWIZARD_PREANALYZE DI_FUNCTION = 0x0000001C + DIF_NEWDEVICEWIZARD_POSTANALYZE DI_FUNCTION = 0x0000001D + DIF_NEWDEVICEWIZARD_FINISHINSTALL DI_FUNCTION = 0x0000001E + DIF_INSTALLINTERFACES DI_FUNCTION = 0x00000020 + DIF_DETECTCANCEL DI_FUNCTION = 0x00000021 + DIF_REGISTER_COINSTALLERS DI_FUNCTION = 0x00000022 + DIF_ADDPROPERTYPAGE_ADVANCED DI_FUNCTION = 0x00000023 + DIF_ADDPROPERTYPAGE_BASIC DI_FUNCTION = 0x00000024 + DIF_TROUBLESHOOTER DI_FUNCTION = 0x00000026 + DIF_POWERMESSAGEWAKE DI_FUNCTION = 0x00000027 + DIF_ADDREMOTEPROPERTYPAGE_ADVANCED DI_FUNCTION = 0x00000028 + DIF_UPDATEDRIVER_UI DI_FUNCTION = 0x00000029 + DIF_FINISHINSTALL_ACTION DI_FUNCTION = 0x0000002A +) + +// DevInstallParams is device installation parameters structure (associated with a particular device information element, or globally with a device information set) +type DevInstallParams struct { + size uint32 + Flags DI_FLAGS + FlagsEx DI_FLAGSEX + hwndParent uintptr + InstallMsgHandler uintptr + InstallMsgHandlerContext uintptr + FileQueue HSPFILEQ + _ uintptr + _ uint32 + driverPath [MAX_PATH]uint16 +} + +func (params *DevInstallParams) DriverPath() string { + return UTF16ToString(params.driverPath[:]) +} + +func (params *DevInstallParams) SetDriverPath(driverPath string) error { + str, err := UTF16FromString(driverPath) + if err != nil { + return err + } + copy(params.driverPath[:], str) + return nil +} + +// DI_FLAGS is SP_DEVINSTALL_PARAMS.Flags values +type DI_FLAGS uint32 + +const ( + // Flags for choosing a device + DI_SHOWOEM DI_FLAGS = 0x00000001 // support Other... button + DI_SHOWCOMPAT DI_FLAGS = 0x00000002 // show compatibility list + DI_SHOWCLASS DI_FLAGS = 0x00000004 // show class list + DI_SHOWALL DI_FLAGS = 0x00000007 // both class & compat list shown + DI_NOVCP DI_FLAGS = 0x00000008 // don't create a new copy queue--use caller-supplied FileQueue + DI_DIDCOMPAT DI_FLAGS = 0x00000010 // Searched for compatible devices + DI_DIDCLASS DI_FLAGS = 0x00000020 // Searched for class devices + DI_AUTOASSIGNRES DI_FLAGS = 0x00000040 // No UI for resources if possible + + // Flags returned by DiInstallDevice to indicate need to reboot/restart + DI_NEEDRESTART DI_FLAGS = 0x00000080 // Reboot required to take effect + DI_NEEDREBOOT DI_FLAGS = 0x00000100 // "" + + // Flags for device installation + DI_NOBROWSE DI_FLAGS = 0x00000200 // no Browse... in InsertDisk + + // Flags set by DiBuildDriverInfoList + DI_MULTMFGS DI_FLAGS = 0x00000400 // Set if multiple manufacturers in class driver list + + // Flag indicates that device is disabled + DI_DISABLED DI_FLAGS = 0x00000800 // Set if device disabled + + // Flags for Device/Class Properties + DI_GENERALPAGE_ADDED DI_FLAGS = 0x00001000 + DI_RESOURCEPAGE_ADDED DI_FLAGS = 0x00002000 + + // Flag to indicate the setting properties for this Device (or class) caused a change so the Dev Mgr UI probably needs to be updated. + DI_PROPERTIES_CHANGE DI_FLAGS = 0x00004000 + + // Flag to indicate that the sorting from the INF file should be used. + DI_INF_IS_SORTED DI_FLAGS = 0x00008000 + + // Flag to indicate that only the INF specified by SP_DEVINSTALL_PARAMS.DriverPath should be searched. + DI_ENUMSINGLEINF DI_FLAGS = 0x00010000 + + // Flag that prevents ConfigMgr from removing/re-enumerating devices during device + // registration, installation, and deletion. + DI_DONOTCALLCONFIGMG DI_FLAGS = 0x00020000 + + // The following flag can be used to install a device disabled + DI_INSTALLDISABLED DI_FLAGS = 0x00040000 + + // Flag that causes SetupDiBuildDriverInfoList to build a device's compatible driver + // list from its existing class driver list, instead of the normal INF search. + DI_COMPAT_FROM_CLASS DI_FLAGS = 0x00080000 + + // This flag is set if the Class Install params should be used. + DI_CLASSINSTALLPARAMS DI_FLAGS = 0x00100000 + + // This flag is set if the caller of DiCallClassInstaller does NOT want the internal default action performed if the Class installer returns ERROR_DI_DO_DEFAULT. + DI_NODI_DEFAULTACTION DI_FLAGS = 0x00200000 + + // Flags for device installation + DI_QUIETINSTALL DI_FLAGS = 0x00800000 // don't confuse the user with questions or excess info + DI_NOFILECOPY DI_FLAGS = 0x01000000 // No file Copy necessary + DI_FORCECOPY DI_FLAGS = 0x02000000 // Force files to be copied from install path + DI_DRIVERPAGE_ADDED DI_FLAGS = 0x04000000 // Prop provider added Driver page. + DI_USECI_SELECTSTRINGS DI_FLAGS = 0x08000000 // Use Class Installer Provided strings in the Select Device Dlg + DI_OVERRIDE_INFFLAGS DI_FLAGS = 0x10000000 // Override INF flags + DI_PROPS_NOCHANGEUSAGE DI_FLAGS = 0x20000000 // No Enable/Disable in General Props + + DI_NOSELECTICONS DI_FLAGS = 0x40000000 // No small icons in select device dialogs + + DI_NOWRITE_IDS DI_FLAGS = 0x80000000 // Don't write HW & Compat IDs on install +) + +// DI_FLAGSEX is SP_DEVINSTALL_PARAMS.FlagsEx values +type DI_FLAGSEX uint32 + +const ( + DI_FLAGSEX_CI_FAILED DI_FLAGSEX = 0x00000004 // Failed to Load/Call class installer + DI_FLAGSEX_FINISHINSTALL_ACTION DI_FLAGSEX = 0x00000008 // Class/co-installer wants to get a DIF_FINISH_INSTALL action in client context. + DI_FLAGSEX_DIDINFOLIST DI_FLAGSEX = 0x00000010 // Did the Class Info List + DI_FLAGSEX_DIDCOMPATINFO DI_FLAGSEX = 0x00000020 // Did the Compat Info List + DI_FLAGSEX_FILTERCLASSES DI_FLAGSEX = 0x00000040 + DI_FLAGSEX_SETFAILEDINSTALL DI_FLAGSEX = 0x00000080 + DI_FLAGSEX_DEVICECHANGE DI_FLAGSEX = 0x00000100 + DI_FLAGSEX_ALWAYSWRITEIDS DI_FLAGSEX = 0x00000200 + DI_FLAGSEX_PROPCHANGE_PENDING DI_FLAGSEX = 0x00000400 // One or more device property sheets have had changes made to them, and need to have a DIF_PROPERTYCHANGE occur. + DI_FLAGSEX_ALLOWEXCLUDEDDRVS DI_FLAGSEX = 0x00000800 + DI_FLAGSEX_NOUIONQUERYREMOVE DI_FLAGSEX = 0x00001000 + DI_FLAGSEX_USECLASSFORCOMPAT DI_FLAGSEX = 0x00002000 // Use the device's class when building compat drv list. (Ignored if DI_COMPAT_FROM_CLASS flag is specified.) + DI_FLAGSEX_NO_DRVREG_MODIFY DI_FLAGSEX = 0x00008000 // Don't run AddReg and DelReg for device's software (driver) key. + DI_FLAGSEX_IN_SYSTEM_SETUP DI_FLAGSEX = 0x00010000 // Installation is occurring during initial system setup. + DI_FLAGSEX_INET_DRIVER DI_FLAGSEX = 0x00020000 // Driver came from Windows Update + DI_FLAGSEX_APPENDDRIVERLIST DI_FLAGSEX = 0x00040000 // Cause SetupDiBuildDriverInfoList to append a new driver list to an existing list. + DI_FLAGSEX_PREINSTALLBACKUP DI_FLAGSEX = 0x00080000 // not used + DI_FLAGSEX_BACKUPONREPLACE DI_FLAGSEX = 0x00100000 // not used + DI_FLAGSEX_DRIVERLIST_FROM_URL DI_FLAGSEX = 0x00200000 // build driver list from INF(s) retrieved from URL specified in SP_DEVINSTALL_PARAMS.DriverPath (empty string means Windows Update website) + DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS DI_FLAGSEX = 0x00800000 // Don't include old Internet drivers when building a driver list. Ignored on Windows Vista and later. + DI_FLAGSEX_POWERPAGE_ADDED DI_FLAGSEX = 0x01000000 // class installer added their own power page + DI_FLAGSEX_FILTERSIMILARDRIVERS DI_FLAGSEX = 0x02000000 // only include similar drivers in class list + DI_FLAGSEX_INSTALLEDDRIVER DI_FLAGSEX = 0x04000000 // only add the installed driver to the class or compat driver list. Used in calls to SetupDiBuildDriverInfoList + DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE DI_FLAGSEX = 0x08000000 // Don't remove identical driver nodes from the class list + DI_FLAGSEX_ALTPLATFORM_DRVSEARCH DI_FLAGSEX = 0x10000000 // Build driver list based on alternate platform information specified in associated file queue + DI_FLAGSEX_RESTART_DEVICE_ONLY DI_FLAGSEX = 0x20000000 // only restart the device drivers are being installed on as opposed to restarting all devices using those drivers. + DI_FLAGSEX_RECURSIVESEARCH DI_FLAGSEX = 0x40000000 // Tell SetupDiBuildDriverInfoList to do a recursive search + DI_FLAGSEX_SEARCH_PUBLISHED_INFS DI_FLAGSEX = 0x80000000 // Tell SetupDiBuildDriverInfoList to do a "published INF" search +) + +// ClassInstallHeader is the first member of any class install parameters structure. It contains the device installation request code that defines the format of the rest of the install parameters structure. +type ClassInstallHeader struct { + size uint32 + InstallFunction DI_FUNCTION +} + +func MakeClassInstallHeader(installFunction DI_FUNCTION) *ClassInstallHeader { + hdr := &ClassInstallHeader{InstallFunction: installFunction} + hdr.size = uint32(unsafe.Sizeof(*hdr)) + return hdr +} + +// DICS_STATE specifies values indicating a change in a device's state +type DICS_STATE uint32 + +const ( + DICS_ENABLE DICS_STATE = 0x00000001 // The device is being enabled. + DICS_DISABLE DICS_STATE = 0x00000002 // The device is being disabled. + DICS_PROPCHANGE DICS_STATE = 0x00000003 // The properties of the device have changed. + DICS_START DICS_STATE = 0x00000004 // The device is being started (if the request is for the currently active hardware profile). + DICS_STOP DICS_STATE = 0x00000005 // The device is being stopped. The driver stack will be unloaded and the CSCONFIGFLAG_DO_NOT_START flag will be set for the device. +) + +// DICS_FLAG specifies the scope of a device property change +type DICS_FLAG uint32 + +const ( + DICS_FLAG_GLOBAL DICS_FLAG = 0x00000001 // make change in all hardware profiles + DICS_FLAG_CONFIGSPECIFIC DICS_FLAG = 0x00000002 // make change in specified profile only + DICS_FLAG_CONFIGGENERAL DICS_FLAG = 0x00000004 // 1 or more hardware profile-specific changes to follow (obsolete) +) + +// PropChangeParams is a structure corresponding to a DIF_PROPERTYCHANGE install function. +type PropChangeParams struct { + ClassInstallHeader ClassInstallHeader + StateChange DICS_STATE + Scope DICS_FLAG + HwProfile uint32 +} + +// DI_REMOVEDEVICE specifies the scope of the device removal +type DI_REMOVEDEVICE uint32 + +const ( + DI_REMOVEDEVICE_GLOBAL DI_REMOVEDEVICE = 0x00000001 // Make this change in all hardware profiles. Remove information about the device from the registry. + DI_REMOVEDEVICE_CONFIGSPECIFIC DI_REMOVEDEVICE = 0x00000002 // Make this change to only the hardware profile specified by HwProfile. this flag only applies to root-enumerated devices. When Windows removes the device from the last hardware profile in which it was configured, Windows performs a global removal. +) + +// RemoveDeviceParams is a structure corresponding to a DIF_REMOVE install function. +type RemoveDeviceParams struct { + ClassInstallHeader ClassInstallHeader + Scope DI_REMOVEDEVICE + HwProfile uint32 +} + +// DrvInfoData is driver information structure (member of a driver info list that may be associated with a particular device instance, or (globally) with a device information set) +type DrvInfoData struct { + size uint32 + DriverType uint32 + _ uintptr + description [LINE_LEN]uint16 + mfgName [LINE_LEN]uint16 + providerName [LINE_LEN]uint16 + DriverDate Filetime + DriverVersion uint64 +} + +func (data *DrvInfoData) Description() string { + return UTF16ToString(data.description[:]) +} + +func (data *DrvInfoData) SetDescription(description string) error { + str, err := UTF16FromString(description) + if err != nil { + return err + } + copy(data.description[:], str) + return nil +} + +func (data *DrvInfoData) MfgName() string { + return UTF16ToString(data.mfgName[:]) +} + +func (data *DrvInfoData) SetMfgName(mfgName string) error { + str, err := UTF16FromString(mfgName) + if err != nil { + return err + } + copy(data.mfgName[:], str) + return nil +} + +func (data *DrvInfoData) ProviderName() string { + return UTF16ToString(data.providerName[:]) +} + +func (data *DrvInfoData) SetProviderName(providerName string) error { + str, err := UTF16FromString(providerName) + if err != nil { + return err + } + copy(data.providerName[:], str) + return nil +} + +// IsNewer method returns true if DrvInfoData date and version is newer than supplied parameters. +func (data *DrvInfoData) IsNewer(driverDate Filetime, driverVersion uint64) bool { + if data.DriverDate.HighDateTime > driverDate.HighDateTime { + return true + } + if data.DriverDate.HighDateTime < driverDate.HighDateTime { + return false + } + + if data.DriverDate.LowDateTime > driverDate.LowDateTime { + return true + } + if data.DriverDate.LowDateTime < driverDate.LowDateTime { + return false + } + + if data.DriverVersion > driverVersion { + return true + } + if data.DriverVersion < driverVersion { + return false + } + + return false +} + +// DrvInfoDetailData is driver information details structure (provides detailed information about a particular driver information structure) +type DrvInfoDetailData struct { + size uint32 // Use unsafeSizeOf method + InfDate Filetime + compatIDsOffset uint32 + compatIDsLength uint32 + _ uintptr + sectionName [LINE_LEN]uint16 + infFileName [MAX_PATH]uint16 + drvDescription [LINE_LEN]uint16 + hardwareID [1]uint16 +} + +func (*DrvInfoDetailData) unsafeSizeOf() uint32 { + if unsafe.Sizeof(uintptr(0)) == 4 { + // Windows declares this with pshpack1.h + return uint32(unsafe.Offsetof(DrvInfoDetailData{}.hardwareID) + unsafe.Sizeof(DrvInfoDetailData{}.hardwareID)) + } + return uint32(unsafe.Sizeof(DrvInfoDetailData{})) +} + +func (data *DrvInfoDetailData) SectionName() string { + return UTF16ToString(data.sectionName[:]) +} + +func (data *DrvInfoDetailData) InfFileName() string { + return UTF16ToString(data.infFileName[:]) +} + +func (data *DrvInfoDetailData) DrvDescription() string { + return UTF16ToString(data.drvDescription[:]) +} + +func (data *DrvInfoDetailData) HardwareID() string { + if data.compatIDsOffset > 1 { + bufW := data.getBuf() + return UTF16ToString(bufW[:wcslen(bufW)]) + } + + return "" +} + +func (data *DrvInfoDetailData) CompatIDs() []string { + a := make([]string, 0) + + if data.compatIDsLength > 0 { + bufW := data.getBuf() + bufW = bufW[data.compatIDsOffset : data.compatIDsOffset+data.compatIDsLength] + for i := 0; i < len(bufW); { + j := i + wcslen(bufW[i:]) + if i < j { + a = append(a, UTF16ToString(bufW[i:j])) + } + i = j + 1 + } + } + + return a +} + +func (data *DrvInfoDetailData) getBuf() []uint16 { + len := (data.size - uint32(unsafe.Offsetof(data.hardwareID))) / 2 + sl := struct { + addr *uint16 + len int + cap int + }{&data.hardwareID[0], int(len), int(len)} + return *(*[]uint16)(unsafe.Pointer(&sl)) +} + +// IsCompatible method tests if given hardware ID matches the driver or is listed on the compatible ID list. +func (data *DrvInfoDetailData) IsCompatible(hwid string) bool { + hwidLC := strings.ToLower(hwid) + if strings.ToLower(data.HardwareID()) == hwidLC { + return true + } + a := data.CompatIDs() + for i := range a { + if strings.ToLower(a[i]) == hwidLC { + return true + } + } + + return false +} + +// DICD flags control SetupDiCreateDeviceInfo +type DICD uint32 + +const ( + DICD_GENERATE_ID DICD = 0x00000001 + DICD_INHERIT_CLASSDRVS DICD = 0x00000002 +) + +// SUOI flags control SetupUninstallOEMInf +type SUOI uint32 + +const ( + SUOI_FORCEDELETE SUOI = 0x0001 +) + +// SPDIT flags to distinguish between class drivers and +// device drivers. (Passed in 'DriverType' parameter of +// driver information list APIs) +type SPDIT uint32 + +const ( + SPDIT_NODRIVER SPDIT = 0x00000000 + SPDIT_CLASSDRIVER SPDIT = 0x00000001 + SPDIT_COMPATDRIVER SPDIT = 0x00000002 +) + +// DIGCF flags control what is included in the device information set built by SetupDiGetClassDevs +type DIGCF uint32 + +const ( + DIGCF_DEFAULT DIGCF = 0x00000001 // only valid with DIGCF_DEVICEINTERFACE + DIGCF_PRESENT DIGCF = 0x00000002 + DIGCF_ALLCLASSES DIGCF = 0x00000004 + DIGCF_PROFILE DIGCF = 0x00000008 + DIGCF_DEVICEINTERFACE DIGCF = 0x00000010 +) + +// DIREG specifies values for SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and SetupDiDeleteDevRegKey. +type DIREG uint32 + +const ( + DIREG_DEV DIREG = 0x00000001 // Open/Create/Delete device key + DIREG_DRV DIREG = 0x00000002 // Open/Create/Delete driver key + DIREG_BOTH DIREG = 0x00000004 // Delete both driver and Device key +) + +// SPDRP specifies device registry property codes +// (Codes marked as read-only (R) may only be used for +// SetupDiGetDeviceRegistryProperty) +// +// These values should cover the same set of registry properties +// as defined by the CM_DRP codes in cfgmgr32.h. +// +// Note that SPDRP codes are zero based while CM_DRP codes are one based! +type SPDRP uint32 + +const ( + SPDRP_DEVICEDESC SPDRP = 0x00000000 // DeviceDesc (R/W) + SPDRP_HARDWAREID SPDRP = 0x00000001 // HardwareID (R/W) + SPDRP_COMPATIBLEIDS SPDRP = 0x00000002 // CompatibleIDs (R/W) + SPDRP_SERVICE SPDRP = 0x00000004 // Service (R/W) + SPDRP_CLASS SPDRP = 0x00000007 // Class (R--tied to ClassGUID) + SPDRP_CLASSGUID SPDRP = 0x00000008 // ClassGUID (R/W) + SPDRP_DRIVER SPDRP = 0x00000009 // Driver (R/W) + SPDRP_CONFIGFLAGS SPDRP = 0x0000000A // ConfigFlags (R/W) + SPDRP_MFG SPDRP = 0x0000000B // Mfg (R/W) + SPDRP_FRIENDLYNAME SPDRP = 0x0000000C // FriendlyName (R/W) + SPDRP_LOCATION_INFORMATION SPDRP = 0x0000000D // LocationInformation (R/W) + SPDRP_PHYSICAL_DEVICE_OBJECT_NAME SPDRP = 0x0000000E // PhysicalDeviceObjectName (R) + SPDRP_CAPABILITIES SPDRP = 0x0000000F // Capabilities (R) + SPDRP_UI_NUMBER SPDRP = 0x00000010 // UiNumber (R) + SPDRP_UPPERFILTERS SPDRP = 0x00000011 // UpperFilters (R/W) + SPDRP_LOWERFILTERS SPDRP = 0x00000012 // LowerFilters (R/W) + SPDRP_BUSTYPEGUID SPDRP = 0x00000013 // BusTypeGUID (R) + SPDRP_LEGACYBUSTYPE SPDRP = 0x00000014 // LegacyBusType (R) + SPDRP_BUSNUMBER SPDRP = 0x00000015 // BusNumber (R) + SPDRP_ENUMERATOR_NAME SPDRP = 0x00000016 // Enumerator Name (R) + SPDRP_SECURITY SPDRP = 0x00000017 // Security (R/W, binary form) + SPDRP_SECURITY_SDS SPDRP = 0x00000018 // Security (W, SDS form) + SPDRP_DEVTYPE SPDRP = 0x00000019 // Device Type (R/W) + SPDRP_EXCLUSIVE SPDRP = 0x0000001A // Device is exclusive-access (R/W) + SPDRP_CHARACTERISTICS SPDRP = 0x0000001B // Device Characteristics (R/W) + SPDRP_ADDRESS SPDRP = 0x0000001C // Device Address (R) + SPDRP_UI_NUMBER_DESC_FORMAT SPDRP = 0x0000001D // UiNumberDescFormat (R/W) + SPDRP_DEVICE_POWER_DATA SPDRP = 0x0000001E // Device Power Data (R) + SPDRP_REMOVAL_POLICY SPDRP = 0x0000001F // Removal Policy (R) + SPDRP_REMOVAL_POLICY_HW_DEFAULT SPDRP = 0x00000020 // Hardware Removal Policy (R) + SPDRP_REMOVAL_POLICY_OVERRIDE SPDRP = 0x00000021 // Removal Policy Override (RW) + SPDRP_INSTALL_STATE SPDRP = 0x00000022 // Device Install State (R) + SPDRP_LOCATION_PATHS SPDRP = 0x00000023 // Device Location Paths (R) + SPDRP_BASE_CONTAINERID SPDRP = 0x00000024 // Base ContainerID (R) + + SPDRP_MAXIMUM_PROPERTY SPDRP = 0x00000025 // Upper bound on ordinals +) + +// DEVPROPTYPE represents the property-data-type identifier that specifies the +// data type of a device property value in the unified device property model. +type DEVPROPTYPE uint32 + +const ( + DEVPROP_TYPEMOD_ARRAY DEVPROPTYPE = 0x00001000 + DEVPROP_TYPEMOD_LIST DEVPROPTYPE = 0x00002000 + + DEVPROP_TYPE_EMPTY DEVPROPTYPE = 0x00000000 + DEVPROP_TYPE_NULL DEVPROPTYPE = 0x00000001 + DEVPROP_TYPE_SBYTE DEVPROPTYPE = 0x00000002 + DEVPROP_TYPE_BYTE DEVPROPTYPE = 0x00000003 + DEVPROP_TYPE_INT16 DEVPROPTYPE = 0x00000004 + DEVPROP_TYPE_UINT16 DEVPROPTYPE = 0x00000005 + DEVPROP_TYPE_INT32 DEVPROPTYPE = 0x00000006 + DEVPROP_TYPE_UINT32 DEVPROPTYPE = 0x00000007 + DEVPROP_TYPE_INT64 DEVPROPTYPE = 0x00000008 + DEVPROP_TYPE_UINT64 DEVPROPTYPE = 0x00000009 + DEVPROP_TYPE_FLOAT DEVPROPTYPE = 0x0000000A + DEVPROP_TYPE_DOUBLE DEVPROPTYPE = 0x0000000B + DEVPROP_TYPE_DECIMAL DEVPROPTYPE = 0x0000000C + DEVPROP_TYPE_GUID DEVPROPTYPE = 0x0000000D + DEVPROP_TYPE_CURRENCY DEVPROPTYPE = 0x0000000E + DEVPROP_TYPE_DATE DEVPROPTYPE = 0x0000000F + DEVPROP_TYPE_FILETIME DEVPROPTYPE = 0x00000010 + DEVPROP_TYPE_BOOLEAN DEVPROPTYPE = 0x00000011 + DEVPROP_TYPE_STRING DEVPROPTYPE = 0x00000012 + DEVPROP_TYPE_STRING_LIST DEVPROPTYPE = DEVPROP_TYPE_STRING | DEVPROP_TYPEMOD_LIST + DEVPROP_TYPE_SECURITY_DESCRIPTOR DEVPROPTYPE = 0x00000013 + DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING DEVPROPTYPE = 0x00000014 + DEVPROP_TYPE_DEVPROPKEY DEVPROPTYPE = 0x00000015 + DEVPROP_TYPE_DEVPROPTYPE DEVPROPTYPE = 0x00000016 + DEVPROP_TYPE_BINARY DEVPROPTYPE = DEVPROP_TYPE_BYTE | DEVPROP_TYPEMOD_ARRAY + DEVPROP_TYPE_ERROR DEVPROPTYPE = 0x00000017 + DEVPROP_TYPE_NTSTATUS DEVPROPTYPE = 0x00000018 + DEVPROP_TYPE_STRING_INDIRECT DEVPROPTYPE = 0x00000019 + + MAX_DEVPROP_TYPE DEVPROPTYPE = 0x00000019 + MAX_DEVPROP_TYPEMOD DEVPROPTYPE = 0x00002000 + + DEVPROP_MASK_TYPE DEVPROPTYPE = 0x00000FFF + DEVPROP_MASK_TYPEMOD DEVPROPTYPE = 0x0000F000 +) + +// DEVPROPGUID specifies a property category. +type DEVPROPGUID GUID + +// DEVPROPID uniquely identifies the property within the property category. +type DEVPROPID uint32 + +const DEVPROPID_FIRST_USABLE DEVPROPID = 2 + +// DEVPROPKEY represents a device property key for a device property in the +// unified device property model. +type DEVPROPKEY struct { + FmtID DEVPROPGUID + PID DEVPROPID +} + +// CONFIGRET is a return value or error code from cfgmgr32 APIs +type CONFIGRET uint32 + +func (ret CONFIGRET) Error() string { + if win32Error, ok := ret.Unwrap().(Errno); ok { + return fmt.Sprintf("%s (CfgMgr error: 0x%08x)", win32Error.Error(), uint32(ret)) + } + return fmt.Sprintf("CfgMgr error: 0x%08x", uint32(ret)) +} + +func (ret CONFIGRET) Win32Error(defaultError Errno) Errno { + return cm_MapCrToWin32Err(ret, defaultError) +} + +func (ret CONFIGRET) Unwrap() error { + const noMatch = Errno(^uintptr(0)) + win32Error := ret.Win32Error(noMatch) + if win32Error == noMatch { + return nil + } + return win32Error +} + +const ( + CR_SUCCESS CONFIGRET = 0x00000000 + CR_DEFAULT CONFIGRET = 0x00000001 + CR_OUT_OF_MEMORY CONFIGRET = 0x00000002 + CR_INVALID_POINTER CONFIGRET = 0x00000003 + CR_INVALID_FLAG CONFIGRET = 0x00000004 + CR_INVALID_DEVNODE CONFIGRET = 0x00000005 + CR_INVALID_DEVINST = CR_INVALID_DEVNODE + CR_INVALID_RES_DES CONFIGRET = 0x00000006 + CR_INVALID_LOG_CONF CONFIGRET = 0x00000007 + CR_INVALID_ARBITRATOR CONFIGRET = 0x00000008 + CR_INVALID_NODELIST CONFIGRET = 0x00000009 + CR_DEVNODE_HAS_REQS CONFIGRET = 0x0000000A + CR_DEVINST_HAS_REQS = CR_DEVNODE_HAS_REQS + CR_INVALID_RESOURCEID CONFIGRET = 0x0000000B + CR_DLVXD_NOT_FOUND CONFIGRET = 0x0000000C + CR_NO_SUCH_DEVNODE CONFIGRET = 0x0000000D + CR_NO_SUCH_DEVINST = CR_NO_SUCH_DEVNODE + CR_NO_MORE_LOG_CONF CONFIGRET = 0x0000000E + CR_NO_MORE_RES_DES CONFIGRET = 0x0000000F + CR_ALREADY_SUCH_DEVNODE CONFIGRET = 0x00000010 + CR_ALREADY_SUCH_DEVINST = CR_ALREADY_SUCH_DEVNODE + CR_INVALID_RANGE_LIST CONFIGRET = 0x00000011 + CR_INVALID_RANGE CONFIGRET = 0x00000012 + CR_FAILURE CONFIGRET = 0x00000013 + CR_NO_SUCH_LOGICAL_DEV CONFIGRET = 0x00000014 + CR_CREATE_BLOCKED CONFIGRET = 0x00000015 + CR_NOT_SYSTEM_VM CONFIGRET = 0x00000016 + CR_REMOVE_VETOED CONFIGRET = 0x00000017 + CR_APM_VETOED CONFIGRET = 0x00000018 + CR_INVALID_LOAD_TYPE CONFIGRET = 0x00000019 + CR_BUFFER_SMALL CONFIGRET = 0x0000001A + CR_NO_ARBITRATOR CONFIGRET = 0x0000001B + CR_NO_REGISTRY_HANDLE CONFIGRET = 0x0000001C + CR_REGISTRY_ERROR CONFIGRET = 0x0000001D + CR_INVALID_DEVICE_ID CONFIGRET = 0x0000001E + CR_INVALID_DATA CONFIGRET = 0x0000001F + CR_INVALID_API CONFIGRET = 0x00000020 + CR_DEVLOADER_NOT_READY CONFIGRET = 0x00000021 + CR_NEED_RESTART CONFIGRET = 0x00000022 + CR_NO_MORE_HW_PROFILES CONFIGRET = 0x00000023 + CR_DEVICE_NOT_THERE CONFIGRET = 0x00000024 + CR_NO_SUCH_VALUE CONFIGRET = 0x00000025 + CR_WRONG_TYPE CONFIGRET = 0x00000026 + CR_INVALID_PRIORITY CONFIGRET = 0x00000027 + CR_NOT_DISABLEABLE CONFIGRET = 0x00000028 + CR_FREE_RESOURCES CONFIGRET = 0x00000029 + CR_QUERY_VETOED CONFIGRET = 0x0000002A + CR_CANT_SHARE_IRQ CONFIGRET = 0x0000002B + CR_NO_DEPENDENT CONFIGRET = 0x0000002C + CR_SAME_RESOURCES CONFIGRET = 0x0000002D + CR_NO_SUCH_REGISTRY_KEY CONFIGRET = 0x0000002E + CR_INVALID_MACHINENAME CONFIGRET = 0x0000002F + CR_REMOTE_COMM_FAILURE CONFIGRET = 0x00000030 + CR_MACHINE_UNAVAILABLE CONFIGRET = 0x00000031 + CR_NO_CM_SERVICES CONFIGRET = 0x00000032 + CR_ACCESS_DENIED CONFIGRET = 0x00000033 + CR_CALL_NOT_IMPLEMENTED CONFIGRET = 0x00000034 + CR_INVALID_PROPERTY CONFIGRET = 0x00000035 + CR_DEVICE_INTERFACE_ACTIVE CONFIGRET = 0x00000036 + CR_NO_SUCH_DEVICE_INTERFACE CONFIGRET = 0x00000037 + CR_INVALID_REFERENCE_STRING CONFIGRET = 0x00000038 + CR_INVALID_CONFLICT_LIST CONFIGRET = 0x00000039 + CR_INVALID_INDEX CONFIGRET = 0x0000003A + CR_INVALID_STRUCTURE_SIZE CONFIGRET = 0x0000003B + NUM_CR_RESULTS CONFIGRET = 0x0000003C +) + +const ( + CM_GET_DEVICE_INTERFACE_LIST_PRESENT = 0 // only currently 'live' device interfaces + CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES = 1 // all registered device interfaces, live or not +) + +const ( + DN_ROOT_ENUMERATED = 0x00000001 // Was enumerated by ROOT + DN_DRIVER_LOADED = 0x00000002 // Has Register_Device_Driver + DN_ENUM_LOADED = 0x00000004 // Has Register_Enumerator + DN_STARTED = 0x00000008 // Is currently configured + DN_MANUAL = 0x00000010 // Manually installed + DN_NEED_TO_ENUM = 0x00000020 // May need reenumeration + DN_NOT_FIRST_TIME = 0x00000040 // Has received a config + DN_HARDWARE_ENUM = 0x00000080 // Enum generates hardware ID + DN_LIAR = 0x00000100 // Lied about can reconfig once + DN_HAS_MARK = 0x00000200 // Not CM_Create_DevInst lately + DN_HAS_PROBLEM = 0x00000400 // Need device installer + DN_FILTERED = 0x00000800 // Is filtered + DN_MOVED = 0x00001000 // Has been moved + DN_DISABLEABLE = 0x00002000 // Can be disabled + DN_REMOVABLE = 0x00004000 // Can be removed + DN_PRIVATE_PROBLEM = 0x00008000 // Has a private problem + DN_MF_PARENT = 0x00010000 // Multi function parent + DN_MF_CHILD = 0x00020000 // Multi function child + DN_WILL_BE_REMOVED = 0x00040000 // DevInst is being removed + DN_NOT_FIRST_TIMEE = 0x00080000 // Has received a config enumerate + DN_STOP_FREE_RES = 0x00100000 // When child is stopped, free resources + DN_REBAL_CANDIDATE = 0x00200000 // Don't skip during rebalance + DN_BAD_PARTIAL = 0x00400000 // This devnode's log_confs do not have same resources + DN_NT_ENUMERATOR = 0x00800000 // This devnode's is an NT enumerator + DN_NT_DRIVER = 0x01000000 // This devnode's is an NT driver + DN_NEEDS_LOCKING = 0x02000000 // Devnode need lock resume processing + DN_ARM_WAKEUP = 0x04000000 // Devnode can be the wakeup device + DN_APM_ENUMERATOR = 0x08000000 // APM aware enumerator + DN_APM_DRIVER = 0x10000000 // APM aware driver + DN_SILENT_INSTALL = 0x20000000 // Silent install + DN_NO_SHOW_IN_DM = 0x40000000 // No show in device manager + DN_BOOT_LOG_PROB = 0x80000000 // Had a problem during preassignment of boot log conf + DN_NEED_RESTART = DN_LIAR // System needs to be restarted for this Devnode to work properly + DN_DRIVER_BLOCKED = DN_NOT_FIRST_TIME // One or more drivers are blocked from loading for this Devnode + DN_LEGACY_DRIVER = DN_MOVED // This device is using a legacy driver + DN_CHILD_WITH_INVALID_ID = DN_HAS_MARK // One or more children have invalid IDs + DN_DEVICE_DISCONNECTED = DN_NEEDS_LOCKING // The function driver for a device reported that the device is not connected. Typically this means a wireless device is out of range. + DN_QUERY_REMOVE_PENDING = DN_MF_PARENT // Device is part of a set of related devices collectively pending query-removal + DN_QUERY_REMOVE_ACTIVE = DN_MF_CHILD // Device is actively engaged in a query-remove IRP + DN_CHANGEABLE_FLAGS = DN_NOT_FIRST_TIME | DN_HARDWARE_ENUM | DN_HAS_MARK | DN_DISABLEABLE | DN_REMOVABLE | DN_MF_CHILD | DN_MF_PARENT | DN_NOT_FIRST_TIMEE | DN_STOP_FREE_RES | DN_REBAL_CANDIDATE | DN_NT_ENUMERATOR | DN_NT_DRIVER | DN_SILENT_INSTALL | DN_NO_SHOW_IN_DM +) + +//sys setupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName *uint16, reserved uintptr) (handle DevInfo, err error) [failretval==DevInfo(InvalidHandle)] = setupapi.SetupDiCreateDeviceInfoListExW + +// SetupDiCreateDeviceInfoListEx function creates an empty device information set on a remote or a local computer and optionally associates the set with a device setup class. +func SetupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName string) (deviceInfoSet DevInfo, err error) { + var machineNameUTF16 *uint16 + if machineName != "" { + machineNameUTF16, err = UTF16PtrFromString(machineName) + if err != nil { + return + } + } + return setupDiCreateDeviceInfoListEx(classGUID, hwndParent, machineNameUTF16, 0) +} + +//sys setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) = setupapi.SetupDiGetDeviceInfoListDetailW + +// SetupDiGetDeviceInfoListDetail function retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name. +func SetupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo) (deviceInfoSetDetailData *DevInfoListDetailData, err error) { + data := &DevInfoListDetailData{} + data.size = data.unsafeSizeOf() + + return data, setupDiGetDeviceInfoListDetail(deviceInfoSet, data) +} + +// DeviceInfoListDetail method retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name. +func (deviceInfoSet DevInfo) DeviceInfoListDetail() (*DevInfoListDetailData, error) { + return SetupDiGetDeviceInfoListDetail(deviceInfoSet) +} + +//sys setupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUID *GUID, DeviceDescription *uint16, hwndParent uintptr, CreationFlags DICD, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiCreateDeviceInfoW + +// SetupDiCreateDeviceInfo function creates a new device information element and adds it as a new member to the specified device information set. +func SetupDiCreateDeviceInfo(deviceInfoSet DevInfo, deviceName string, classGUID *GUID, deviceDescription string, hwndParent uintptr, creationFlags DICD) (deviceInfoData *DevInfoData, err error) { + deviceNameUTF16, err := UTF16PtrFromString(deviceName) + if err != nil { + return + } + + var deviceDescriptionUTF16 *uint16 + if deviceDescription != "" { + deviceDescriptionUTF16, err = UTF16PtrFromString(deviceDescription) + if err != nil { + return + } + } + + data := &DevInfoData{} + data.size = uint32(unsafe.Sizeof(*data)) + + return data, setupDiCreateDeviceInfo(deviceInfoSet, deviceNameUTF16, classGUID, deviceDescriptionUTF16, hwndParent, creationFlags, data) +} + +// CreateDeviceInfo method creates a new device information element and adds it as a new member to the specified device information set. +func (deviceInfoSet DevInfo) CreateDeviceInfo(deviceName string, classGUID *GUID, deviceDescription string, hwndParent uintptr, creationFlags DICD) (*DevInfoData, error) { + return SetupDiCreateDeviceInfo(deviceInfoSet, deviceName, classGUID, deviceDescription, hwndParent, creationFlags) +} + +//sys setupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiEnumDeviceInfo + +// SetupDiEnumDeviceInfo function returns a DevInfoData structure that specifies a device information element in a device information set. +func SetupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex int) (*DevInfoData, error) { + data := &DevInfoData{} + data.size = uint32(unsafe.Sizeof(*data)) + + return data, setupDiEnumDeviceInfo(deviceInfoSet, uint32(memberIndex), data) +} + +// EnumDeviceInfo method returns a DevInfoData structure that specifies a device information element in a device information set. +func (deviceInfoSet DevInfo) EnumDeviceInfo(memberIndex int) (*DevInfoData, error) { + return SetupDiEnumDeviceInfo(deviceInfoSet, memberIndex) +} + +// SetupDiDestroyDeviceInfoList function deletes a device information set and frees all associated memory. +//sys SetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) = setupapi.SetupDiDestroyDeviceInfoList + +// Close method deletes a device information set and frees all associated memory. +func (deviceInfoSet DevInfo) Close() error { + return SetupDiDestroyDeviceInfoList(deviceInfoSet) +} + +//sys SetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) = setupapi.SetupDiBuildDriverInfoList + +// BuildDriverInfoList method builds a list of drivers that is associated with a specific device or with the global class driver list for a device information set. +func (deviceInfoSet DevInfo) BuildDriverInfoList(deviceInfoData *DevInfoData, driverType SPDIT) error { + return SetupDiBuildDriverInfoList(deviceInfoSet, deviceInfoData, driverType) +} + +//sys SetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) = setupapi.SetupDiCancelDriverInfoSearch + +// CancelDriverInfoSearch method cancels a driver list search that is currently in progress in a different thread. +func (deviceInfoSet DevInfo) CancelDriverInfoSearch() error { + return SetupDiCancelDriverInfoSearch(deviceInfoSet) +} + +//sys setupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex uint32, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiEnumDriverInfoW + +// SetupDiEnumDriverInfo function enumerates the members of a driver list. +func SetupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex int) (*DrvInfoData, error) { + data := &DrvInfoData{} + data.size = uint32(unsafe.Sizeof(*data)) + + return data, setupDiEnumDriverInfo(deviceInfoSet, deviceInfoData, driverType, uint32(memberIndex), data) +} + +// EnumDriverInfo method enumerates the members of a driver list. +func (deviceInfoSet DevInfo) EnumDriverInfo(deviceInfoData *DevInfoData, driverType SPDIT, memberIndex int) (*DrvInfoData, error) { + return SetupDiEnumDriverInfo(deviceInfoSet, deviceInfoData, driverType, memberIndex) +} + +//sys setupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiGetSelectedDriverW + +// SetupDiGetSelectedDriver function retrieves the selected driver for a device information set or a particular device information element. +func SetupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (*DrvInfoData, error) { + data := &DrvInfoData{} + data.size = uint32(unsafe.Sizeof(*data)) + + return data, setupDiGetSelectedDriver(deviceInfoSet, deviceInfoData, data) +} + +// SelectedDriver method retrieves the selected driver for a device information set or a particular device information element. +func (deviceInfoSet DevInfo) SelectedDriver(deviceInfoData *DevInfoData) (*DrvInfoData, error) { + return SetupDiGetSelectedDriver(deviceInfoSet, deviceInfoData) +} + +//sys SetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiSetSelectedDriverW + +// SetSelectedDriver method sets, or resets, the selected driver for a device information element or the selected class driver for a device information set. +func (deviceInfoSet DevInfo) SetSelectedDriver(deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) error { + return SetupDiSetSelectedDriver(deviceInfoSet, deviceInfoData, driverInfoData) +} + +//sys setupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData, driverInfoDetailData *DrvInfoDetailData, driverInfoDetailDataSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetDriverInfoDetailW + +// SetupDiGetDriverInfoDetail function retrieves driver information detail for a device information set or a particular device information element in the device information set. +func SetupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (*DrvInfoDetailData, error) { + reqSize := uint32(2048) + for { + buf := make([]byte, reqSize) + data := (*DrvInfoDetailData)(unsafe.Pointer(&buf[0])) + data.size = data.unsafeSizeOf() + err := setupDiGetDriverInfoDetail(deviceInfoSet, deviceInfoData, driverInfoData, data, uint32(len(buf)), &reqSize) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return nil, err + } + data.size = reqSize + return data, nil + } +} + +// DriverInfoDetail method retrieves driver information detail for a device information set or a particular device information element in the device information set. +func (deviceInfoSet DevInfo) DriverInfoDetail(deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (*DrvInfoDetailData, error) { + return SetupDiGetDriverInfoDetail(deviceInfoSet, deviceInfoData, driverInfoData) +} + +//sys SetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) = setupapi.SetupDiDestroyDriverInfoList + +// DestroyDriverInfoList method deletes a driver list. +func (deviceInfoSet DevInfo) DestroyDriverInfoList(deviceInfoData *DevInfoData, driverType SPDIT) error { + return SetupDiDestroyDriverInfoList(deviceInfoSet, deviceInfoData, driverType) +} + +//sys setupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, deviceInfoSet DevInfo, machineName *uint16, reserved uintptr) (handle DevInfo, err error) [failretval==DevInfo(InvalidHandle)] = setupapi.SetupDiGetClassDevsExW + +// SetupDiGetClassDevsEx function returns a handle to a device information set that contains requested device information elements for a local or a remote computer. +func SetupDiGetClassDevsEx(classGUID *GUID, enumerator string, hwndParent uintptr, flags DIGCF, deviceInfoSet DevInfo, machineName string) (handle DevInfo, err error) { + var enumeratorUTF16 *uint16 + if enumerator != "" { + enumeratorUTF16, err = UTF16PtrFromString(enumerator) + if err != nil { + return + } + } + var machineNameUTF16 *uint16 + if machineName != "" { + machineNameUTF16, err = UTF16PtrFromString(machineName) + if err != nil { + return + } + } + return setupDiGetClassDevsEx(classGUID, enumeratorUTF16, hwndParent, flags, deviceInfoSet, machineNameUTF16, 0) +} + +// SetupDiCallClassInstaller function calls the appropriate class installer, and any registered co-installers, with the specified installation request (DIF code). +//sys SetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiCallClassInstaller + +// CallClassInstaller member calls the appropriate class installer, and any registered co-installers, with the specified installation request (DIF code). +func (deviceInfoSet DevInfo) CallClassInstaller(installFunction DI_FUNCTION, deviceInfoData *DevInfoData) error { + return SetupDiCallClassInstaller(installFunction, deviceInfoSet, deviceInfoData) +} + +// SetupDiOpenDevRegKey function opens a registry key for device-specific configuration information. +//sys SetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key Handle, err error) [failretval==InvalidHandle] = setupapi.SetupDiOpenDevRegKey + +// OpenDevRegKey method opens a registry key for device-specific configuration information. +func (deviceInfoSet DevInfo) OpenDevRegKey(DeviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (Handle, error) { + return SetupDiOpenDevRegKey(deviceInfoSet, DeviceInfoData, Scope, HwProfile, KeyType, samDesired) +} + +//sys setupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY, propertyType *DEVPROPTYPE, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32, flags uint32) (err error) = setupapi.SetupDiGetDevicePropertyW + +// SetupDiGetDeviceProperty function retrieves a specified device instance property. +func SetupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY) (value interface{}, err error) { + reqSize := uint32(256) + for { + var dataType DEVPROPTYPE + buf := make([]byte, reqSize) + err = setupDiGetDeviceProperty(deviceInfoSet, deviceInfoData, propertyKey, &dataType, &buf[0], uint32(len(buf)), &reqSize, 0) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return + } + switch dataType { + case DEVPROP_TYPE_STRING: + ret := UTF16ToString(bufToUTF16(buf)) + runtime.KeepAlive(buf) + return ret, nil + } + return nil, errors.New("unimplemented property type") + } +} + +//sys setupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyRegDataType *uint32, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetDeviceRegistryPropertyW + +// SetupDiGetDeviceRegistryProperty function retrieves a specified Plug and Play device property. +func SetupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP) (value interface{}, err error) { + reqSize := uint32(256) + for { + var dataType uint32 + buf := make([]byte, reqSize) + err = setupDiGetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, &dataType, &buf[0], uint32(len(buf)), &reqSize) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return + } + return getRegistryValue(buf[:reqSize], dataType) + } +} + +func getRegistryValue(buf []byte, dataType uint32) (interface{}, error) { + switch dataType { + case REG_SZ: + ret := UTF16ToString(bufToUTF16(buf)) + runtime.KeepAlive(buf) + return ret, nil + case REG_EXPAND_SZ: + value := UTF16ToString(bufToUTF16(buf)) + if value == "" { + return "", nil + } + p, err := syscall.UTF16PtrFromString(value) + if err != nil { + return "", err + } + ret := make([]uint16, 100) + for { + n, err := ExpandEnvironmentStrings(p, &ret[0], uint32(len(ret))) + if err != nil { + return "", err + } + if n <= uint32(len(ret)) { + return UTF16ToString(ret[:n]), nil + } + ret = make([]uint16, n) + } + case REG_BINARY: + return buf, nil + case REG_DWORD_LITTLE_ENDIAN: + return binary.LittleEndian.Uint32(buf), nil + case REG_DWORD_BIG_ENDIAN: + return binary.BigEndian.Uint32(buf), nil + case REG_MULTI_SZ: + bufW := bufToUTF16(buf) + a := []string{} + for i := 0; i < len(bufW); { + j := i + wcslen(bufW[i:]) + if i < j { + a = append(a, UTF16ToString(bufW[i:j])) + } + i = j + 1 + } + runtime.KeepAlive(buf) + return a, nil + case REG_QWORD_LITTLE_ENDIAN: + return binary.LittleEndian.Uint64(buf), nil + default: + return nil, fmt.Errorf("Unsupported registry value type: %v", dataType) + } +} + +// bufToUTF16 function reinterprets []byte buffer as []uint16 +func bufToUTF16(buf []byte) []uint16 { + sl := struct { + addr *uint16 + len int + cap int + }{(*uint16)(unsafe.Pointer(&buf[0])), len(buf) / 2, cap(buf) / 2} + return *(*[]uint16)(unsafe.Pointer(&sl)) +} + +// utf16ToBuf function reinterprets []uint16 as []byte +func utf16ToBuf(buf []uint16) []byte { + sl := struct { + addr *byte + len int + cap int + }{(*byte)(unsafe.Pointer(&buf[0])), len(buf) * 2, cap(buf) * 2} + return *(*[]byte)(unsafe.Pointer(&sl)) +} + +func wcslen(str []uint16) int { + for i := 0; i < len(str); i++ { + if str[i] == 0 { + return i + } + } + return len(str) +} + +// DeviceRegistryProperty method retrieves a specified Plug and Play device property. +func (deviceInfoSet DevInfo) DeviceRegistryProperty(deviceInfoData *DevInfoData, property SPDRP) (interface{}, error) { + return SetupDiGetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property) +} + +//sys setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffer *byte, propertyBufferSize uint32) (err error) = setupapi.SetupDiSetDeviceRegistryPropertyW + +// SetupDiSetDeviceRegistryProperty function sets a Plug and Play device property for a device. +func SetupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffers []byte) error { + return setupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, &propertyBuffers[0], uint32(len(propertyBuffers))) +} + +// SetDeviceRegistryProperty function sets a Plug and Play device property for a device. +func (deviceInfoSet DevInfo) SetDeviceRegistryProperty(deviceInfoData *DevInfoData, property SPDRP, propertyBuffers []byte) error { + return SetupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, propertyBuffers) +} + +// SetDeviceRegistryPropertyString method sets a Plug and Play device property string for a device. +func (deviceInfoSet DevInfo) SetDeviceRegistryPropertyString(deviceInfoData *DevInfoData, property SPDRP, str string) error { + str16, err := UTF16FromString(str) + if err != nil { + return err + } + err = SetupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, utf16ToBuf(append(str16, 0))) + runtime.KeepAlive(str16) + return err +} + +//sys setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) = setupapi.SetupDiGetDeviceInstallParamsW + +// SetupDiGetDeviceInstallParams function retrieves device installation parameters for a device information set or a particular device information element. +func SetupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (*DevInstallParams, error) { + params := &DevInstallParams{} + params.size = uint32(unsafe.Sizeof(*params)) + + return params, setupDiGetDeviceInstallParams(deviceInfoSet, deviceInfoData, params) +} + +// DeviceInstallParams method retrieves device installation parameters for a device information set or a particular device information element. +func (deviceInfoSet DevInfo) DeviceInstallParams(deviceInfoData *DevInfoData) (*DevInstallParams, error) { + return SetupDiGetDeviceInstallParams(deviceInfoSet, deviceInfoData) +} + +//sys setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, instanceId *uint16, instanceIdSize uint32, instanceIdRequiredSize *uint32) (err error) = setupapi.SetupDiGetDeviceInstanceIdW + +// SetupDiGetDeviceInstanceId function retrieves the instance ID of the device. +func SetupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (string, error) { + reqSize := uint32(1024) + for { + buf := make([]uint16, reqSize) + err := setupDiGetDeviceInstanceId(deviceInfoSet, deviceInfoData, &buf[0], uint32(len(buf)), &reqSize) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return "", err + } + return UTF16ToString(buf), nil + } +} + +// DeviceInstanceID method retrieves the instance ID of the device. +func (deviceInfoSet DevInfo) DeviceInstanceID(deviceInfoData *DevInfoData) (string, error) { + return SetupDiGetDeviceInstanceId(deviceInfoSet, deviceInfoData) +} + +// SetupDiGetClassInstallParams function retrieves class installation parameters for a device information set or a particular device information element. +//sys SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetClassInstallParamsW + +// ClassInstallParams method retrieves class installation parameters for a device information set or a particular device information element. +func (deviceInfoSet DevInfo) ClassInstallParams(deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) error { + return SetupDiGetClassInstallParams(deviceInfoSet, deviceInfoData, classInstallParams, classInstallParamsSize, requiredSize) +} + +//sys SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) = setupapi.SetupDiSetDeviceInstallParamsW + +// SetDeviceInstallParams member sets device installation parameters for a device information set or a particular device information element. +func (deviceInfoSet DevInfo) SetDeviceInstallParams(deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) error { + return SetupDiSetDeviceInstallParams(deviceInfoSet, deviceInfoData, deviceInstallParams) +} + +// SetupDiSetClassInstallParams function sets or clears class install parameters for a device information set or a particular device information element. +//sys SetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) (err error) = setupapi.SetupDiSetClassInstallParamsW + +// SetClassInstallParams method sets or clears class install parameters for a device information set or a particular device information element. +func (deviceInfoSet DevInfo) SetClassInstallParams(deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) error { + return SetupDiSetClassInstallParams(deviceInfoSet, deviceInfoData, classInstallParams, classInstallParamsSize) +} + +//sys setupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) = setupapi.SetupDiClassNameFromGuidExW + +// SetupDiClassNameFromGuidEx function retrieves the class name associated with a class GUID. The class can be installed on a local or remote computer. +func SetupDiClassNameFromGuidEx(classGUID *GUID, machineName string) (className string, err error) { + var classNameUTF16 [MAX_CLASS_NAME_LEN]uint16 + + var machineNameUTF16 *uint16 + if machineName != "" { + machineNameUTF16, err = UTF16PtrFromString(machineName) + if err != nil { + return + } + } + + err = setupDiClassNameFromGuidEx(classGUID, &classNameUTF16[0], MAX_CLASS_NAME_LEN, nil, machineNameUTF16, 0) + if err != nil { + return + } + + className = UTF16ToString(classNameUTF16[:]) + return +} + +//sys setupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGuidListSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) = setupapi.SetupDiClassGuidsFromNameExW + +// SetupDiClassGuidsFromNameEx function retrieves the GUIDs associated with the specified class name. This resulting list contains the classes currently installed on a local or remote computer. +func SetupDiClassGuidsFromNameEx(className string, machineName string) ([]GUID, error) { + classNameUTF16, err := UTF16PtrFromString(className) + if err != nil { + return nil, err + } + + var machineNameUTF16 *uint16 + if machineName != "" { + machineNameUTF16, err = UTF16PtrFromString(machineName) + if err != nil { + return nil, err + } + } + + reqSize := uint32(4) + for { + buf := make([]GUID, reqSize) + err = setupDiClassGuidsFromNameEx(classNameUTF16, &buf[0], uint32(len(buf)), &reqSize, machineNameUTF16, 0) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return nil, err + } + return buf[:reqSize], nil + } +} + +//sys setupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiGetSelectedDevice + +// SetupDiGetSelectedDevice function retrieves the selected device information element in a device information set. +func SetupDiGetSelectedDevice(deviceInfoSet DevInfo) (*DevInfoData, error) { + data := &DevInfoData{} + data.size = uint32(unsafe.Sizeof(*data)) + + return data, setupDiGetSelectedDevice(deviceInfoSet, data) +} + +// SelectedDevice method retrieves the selected device information element in a device information set. +func (deviceInfoSet DevInfo) SelectedDevice() (*DevInfoData, error) { + return SetupDiGetSelectedDevice(deviceInfoSet) +} + +// SetupDiSetSelectedDevice function sets a device information element as the selected member of a device information set. This function is typically used by an installation wizard. +//sys SetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiSetSelectedDevice + +// SetSelectedDevice method sets a device information element as the selected member of a device information set. This function is typically used by an installation wizard. +func (deviceInfoSet DevInfo) SetSelectedDevice(deviceInfoData *DevInfoData) error { + return SetupDiSetSelectedDevice(deviceInfoSet, deviceInfoData) +} + +//sys setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (err error) = setupapi.SetupUninstallOEMInfW + +// SetupUninstallOEMInf uninstalls the specified driver. +func SetupUninstallOEMInf(infFileName string, flags SUOI) error { + infFileName16, err := UTF16PtrFromString(infFileName) + if err != nil { + return err + } + return setupUninstallOEMInf(infFileName16, flags, 0) +} + +//sys cm_MapCrToWin32Err(configRet CONFIGRET, defaultWin32Error Errno) (ret Errno) = CfgMgr32.CM_MapCrToWin32Err + +//sys cm_Get_Device_Interface_List_Size(len *uint32, interfaceClass *GUID, deviceID *uint16, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_Device_Interface_List_SizeW +//sys cm_Get_Device_Interface_List(interfaceClass *GUID, deviceID *uint16, buffer *uint16, bufferLen uint32, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_Device_Interface_ListW + +func CM_Get_Device_Interface_List(deviceID string, interfaceClass *GUID, flags uint32) ([]string, error) { + deviceID16, err := UTF16PtrFromString(deviceID) + if err != nil { + return nil, err + } + var buf []uint16 + var buflen uint32 + for { + if ret := cm_Get_Device_Interface_List_Size(&buflen, interfaceClass, deviceID16, flags); ret != CR_SUCCESS { + return nil, ret + } + buf = make([]uint16, buflen) + if ret := cm_Get_Device_Interface_List(interfaceClass, deviceID16, &buf[0], buflen, flags); ret == CR_SUCCESS { + break + } else if ret != CR_BUFFER_SMALL { + return nil, ret + } + } + var interfaces []string + for i := 0; i < len(buf); { + j := i + wcslen(buf[i:]) + if i < j { + interfaces = append(interfaces, UTF16ToString(buf[i:j])) + } + i = j + 1 + } + if interfaces == nil { + return nil, ERROR_NO_SUCH_DEVICE_INTERFACE + } + return interfaces, nil +} + +//sys cm_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_DevNode_Status + +func CM_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) error { + ret := cm_Get_DevNode_Status(status, problemNumber, devInst, flags) + if ret == CR_SUCCESS { + return nil + } + return ret +} diff --git a/vendor/golang.org/x/sys/windows/str.go b/vendor/golang.org/x/sys/windows/str.go new file mode 100644 index 0000000..6a4f9ce --- /dev/null +++ b/vendor/golang.org/x/sys/windows/str.go @@ -0,0 +1,22 @@ +// 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. + +//go:build windows + +package windows + +func itoa(val int) string { // do it here rather than with fmt to avoid dependency + if val < 0 { + return "-" + itoa(-val) + } + var buf [32]byte // big enough for int64 + i := len(buf) - 1 + for val >= 10 { + buf[i] = byte(val%10 + '0') + i-- + val /= 10 + } + buf[i] = byte(val + '0') + return string(buf[i:]) +} diff --git a/vendor/golang.org/x/sys/windows/syscall.go b/vendor/golang.org/x/sys/windows/syscall.go new file mode 100644 index 0000000..e85ed6b --- /dev/null +++ b/vendor/golang.org/x/sys/windows/syscall.go @@ -0,0 +1,104 @@ +// 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. + +//go:build windows + +// Package windows contains an interface to the low-level operating system +// primitives. OS details vary depending on the underlying system, and +// by default, godoc will display the OS-specific documentation for the current +// system. If you want godoc to display syscall documentation for another +// system, set $GOOS and $GOARCH to the desired system. For example, if +// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS +// to freebsd and $GOARCH to arm. +// +// The primary use of this package is inside other packages that provide a more +// portable interface to the system, such as "os", "time" and "net". Use +// those packages rather than this one if you can. +// +// For details of the functions and data types in this package consult +// the manuals for the appropriate operating system. +// +// These calls return err == nil to indicate success; otherwise +// err represents an operating system error describing the failure and +// holds a value of type syscall.Errno. +package windows // import "golang.org/x/sys/windows" + +import ( + "bytes" + "strings" + "syscall" + "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, syscall.EINVAL). +func ByteSliceFromString(s string) ([]byte, error) { + if strings.IndexByte(s, 0) != -1 { + return nil, syscall.EINVAL + } + a := make([]byte, len(s)+1) + copy(a, s) + return a, nil +} + +// BytePtrFromString returns a pointer to a NUL-terminated array of +// bytes containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, syscall.EINVAL). +func BytePtrFromString(s string) (*byte, error) { + a, err := ByteSliceFromString(s) + if err != nil { + return nil, err + } + return &a[0], nil +} + +// ByteSliceToString returns a string form of the text represented by the slice s, with a terminating NUL and any +// bytes after the NUL removed. +func ByteSliceToString(s []byte) string { + if i := bytes.IndexByte(s, 0); i != -1 { + s = s[:i] + } + return string(s) +} + +// BytePtrToString takes a pointer to a sequence of text and returns the corresponding string. +// If the pointer is nil, it returns the empty string. It assumes that the text sequence is terminated +// at a zero byte; if the zero byte is not present, the program may crash. +func BytePtrToString(p *byte) string { + if p == nil { + return "" + } + if *p == 0 { + return "" + } + + // Find NUL terminator. + n := 0 + for ptr := unsafe.Pointer(p); *(*byte)(ptr) != 0; n++ { + ptr = unsafe.Pointer(uintptr(ptr) + 1) + } + + return string(unsafe.Slice(p, n)) +} + +// Single-word zero for use when we need a valid pointer to 0 bytes. +// See mksyscall.pl. +var _zero uintptr + +func (ts *Timespec) Unix() (sec int64, nsec int64) { + return int64(ts.Sec), int64(ts.Nsec) +} + +func (tv *Timeval) Unix() (sec int64, nsec int64) { + return int64(tv.Sec), int64(tv.Usec) * 1000 +} + +func (ts *Timespec) Nano() int64 { + return int64(ts.Sec)*1e9 + int64(ts.Nsec) +} + +func (tv *Timeval) Nano() int64 { + return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 +} diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go new file mode 100644 index 0000000..640f6b1 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -0,0 +1,1934 @@ +// 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. + +// Windows system calls. + +package windows + +import ( + errorspkg "errors" + "fmt" + "runtime" + "sync" + "syscall" + "time" + "unicode/utf16" + "unsafe" +) + +type ( + Handle uintptr + HWND uintptr +) + +const ( + InvalidHandle = ^Handle(0) + InvalidHWND = ^HWND(0) + + // Flags for DefineDosDevice. + DDD_EXACT_MATCH_ON_REMOVE = 0x00000004 + DDD_NO_BROADCAST_SYSTEM = 0x00000008 + DDD_RAW_TARGET_PATH = 0x00000001 + DDD_REMOVE_DEFINITION = 0x00000002 + + // Return values for GetDriveType. + DRIVE_UNKNOWN = 0 + DRIVE_NO_ROOT_DIR = 1 + DRIVE_REMOVABLE = 2 + DRIVE_FIXED = 3 + DRIVE_REMOTE = 4 + DRIVE_CDROM = 5 + DRIVE_RAMDISK = 6 + + // File system flags from GetVolumeInformation and GetVolumeInformationByHandle. + FILE_CASE_SENSITIVE_SEARCH = 0x00000001 + FILE_CASE_PRESERVED_NAMES = 0x00000002 + FILE_FILE_COMPRESSION = 0x00000010 + FILE_DAX_VOLUME = 0x20000000 + FILE_NAMED_STREAMS = 0x00040000 + FILE_PERSISTENT_ACLS = 0x00000008 + FILE_READ_ONLY_VOLUME = 0x00080000 + FILE_SEQUENTIAL_WRITE_ONCE = 0x00100000 + FILE_SUPPORTS_ENCRYPTION = 0x00020000 + FILE_SUPPORTS_EXTENDED_ATTRIBUTES = 0x00800000 + FILE_SUPPORTS_HARD_LINKS = 0x00400000 + FILE_SUPPORTS_OBJECT_IDS = 0x00010000 + FILE_SUPPORTS_OPEN_BY_FILE_ID = 0x01000000 + FILE_SUPPORTS_REPARSE_POINTS = 0x00000080 + FILE_SUPPORTS_SPARSE_FILES = 0x00000040 + FILE_SUPPORTS_TRANSACTIONS = 0x00200000 + FILE_SUPPORTS_USN_JOURNAL = 0x02000000 + FILE_UNICODE_ON_DISK = 0x00000004 + FILE_VOLUME_IS_COMPRESSED = 0x00008000 + FILE_VOLUME_QUOTAS = 0x00000020 + + // Flags for LockFileEx. + LOCKFILE_FAIL_IMMEDIATELY = 0x00000001 + LOCKFILE_EXCLUSIVE_LOCK = 0x00000002 + + // Return value of SleepEx and other APC functions + WAIT_IO_COMPLETION = 0x000000C0 +) + +// StringToUTF16 is deprecated. Use UTF16FromString instead. +// If s contains a NUL byte this function panics instead of +// returning an error. +func StringToUTF16(s string) []uint16 { + a, err := UTF16FromString(s) + if err != nil { + panic("windows: string with NUL passed to StringToUTF16") + } + return a +} + +// UTF16FromString returns the UTF-16 encoding of the UTF-8 string +// s, with a terminating NUL added. If s contains a NUL byte at any +// location, it returns (nil, syscall.EINVAL). +func UTF16FromString(s string) ([]uint16, error) { + return syscall.UTF16FromString(s) +} + +// UTF16ToString returns the UTF-8 encoding of the UTF-16 sequence s, +// with a terminating NUL and any bytes after the NUL removed. +func UTF16ToString(s []uint16) string { + return syscall.UTF16ToString(s) +} + +// StringToUTF16Ptr is deprecated. Use UTF16PtrFromString instead. +// If s contains a NUL byte this function panics instead of +// returning an error. +func StringToUTF16Ptr(s string) *uint16 { return &StringToUTF16(s)[0] } + +// UTF16PtrFromString returns pointer to the UTF-16 encoding of +// the UTF-8 string s, with a terminating NUL added. If s +// contains a NUL byte at any location, it returns (nil, syscall.EINVAL). +func UTF16PtrFromString(s string) (*uint16, error) { + a, err := UTF16FromString(s) + if err != nil { + return nil, err + } + return &a[0], nil +} + +// UTF16PtrToString takes a pointer to a UTF-16 sequence and returns the corresponding UTF-8 encoded string. +// If the pointer is nil, it returns the empty string. It assumes that the UTF-16 sequence is terminated +// at a zero word; if the zero word is not present, the program may crash. +func UTF16PtrToString(p *uint16) string { + if p == nil { + return "" + } + if *p == 0 { + return "" + } + + // Find NUL terminator. + n := 0 + for ptr := unsafe.Pointer(p); *(*uint16)(ptr) != 0; n++ { + ptr = unsafe.Pointer(uintptr(ptr) + unsafe.Sizeof(*p)) + } + return UTF16ToString(unsafe.Slice(p, n)) +} + +func Getpagesize() int { return 4096 } + +// NewCallback converts a Go function to a function pointer conforming to the stdcall calling convention. +// This is useful when interoperating with Windows code requiring callbacks. +// The argument is expected to be a function with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. +func NewCallback(fn interface{}) uintptr { + return syscall.NewCallback(fn) +} + +// NewCallbackCDecl converts a Go function to a function pointer conforming to the cdecl calling convention. +// This is useful when interoperating with Windows code requiring callbacks. +// The argument is expected to be a function with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. +func NewCallbackCDecl(fn interface{}) uintptr { + return syscall.NewCallbackCDecl(fn) +} + +// windows api calls + +//sys GetLastError() (lasterr error) +//sys LoadLibrary(libname string) (handle Handle, err error) = LoadLibraryW +//sys LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) = LoadLibraryExW +//sys FreeLibrary(handle Handle) (err error) +//sys GetProcAddress(module Handle, procname string) (proc uintptr, err error) +//sys GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) = kernel32.GetModuleFileNameW +//sys GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err error) = kernel32.GetModuleHandleExW +//sys SetDefaultDllDirectories(directoryFlags uint32) (err error) +//sys AddDllDirectory(path *uint16) (cookie uintptr, err error) = kernel32.AddDllDirectory +//sys RemoveDllDirectory(cookie uintptr) (err error) = kernel32.RemoveDllDirectory +//sys SetDllDirectory(path string) (err error) = kernel32.SetDllDirectoryW +//sys GetVersion() (ver uint32, err error) +//sys FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) = FormatMessageW +//sys ExitProcess(exitcode uint32) +//sys IsWow64Process(handle Handle, isWow64 *bool) (err error) = IsWow64Process +//sys IsWow64Process2(handle Handle, processMachine *uint16, nativeMachine *uint16) (err error) = IsWow64Process2? +//sys CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile Handle) (handle Handle, err error) [failretval==InvalidHandle] = CreateFileW +//sys CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error) [failretval==InvalidHandle] = CreateNamedPipeW +//sys ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error) +//sys DisconnectNamedPipe(pipe Handle) (err error) +//sys GetNamedPipeClientProcessId(pipe Handle, clientProcessID *uint32) (err error) +//sys GetNamedPipeServerProcessId(pipe Handle, serverProcessID *uint32) (err error) +//sys GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) +//sys GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW +//sys SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) = SetNamedPipeHandleState +//sys readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = ReadFile +//sys writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = WriteFile +//sys GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error) +//sys SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) [failretval==0xffffffff] +//sys CloseHandle(handle Handle) (err error) +//sys GetStdHandle(stdhandle uint32) (handle Handle, err error) [failretval==InvalidHandle] +//sys SetStdHandle(stdhandle uint32, handle Handle) (err error) +//sys findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstFileW +//sys findNextFile1(handle Handle, data *win32finddata1) (err error) = FindNextFileW +//sys FindClose(handle Handle) (err error) +//sys GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) +//sys GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, outBufferLen uint32) (err error) +//sys SetFileInformationByHandle(handle Handle, class uint32, inBuffer *byte, inBufferLen uint32) (err error) +//sys GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) = GetCurrentDirectoryW +//sys SetCurrentDirectory(path *uint16) (err error) = SetCurrentDirectoryW +//sys CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) = CreateDirectoryW +//sys RemoveDirectory(path *uint16) (err error) = RemoveDirectoryW +//sys DeleteFile(path *uint16) (err error) = DeleteFileW +//sys MoveFile(from *uint16, to *uint16) (err error) = MoveFileW +//sys MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) = MoveFileExW +//sys LockFileEx(file Handle, flags uint32, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) +//sys UnlockFileEx(file Handle, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) +//sys GetComputerName(buf *uint16, n *uint32) (err error) = GetComputerNameW +//sys GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW +//sys SetEndOfFile(handle Handle) (err error) +//sys SetFileValidData(handle Handle, validDataLength int64) (err error) +//sys GetSystemTimeAsFileTime(time *Filetime) +//sys GetSystemTimePreciseAsFileTime(time *Filetime) +//sys GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) [failretval==0xffffffff] +//sys CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uintptr, threadcnt uint32) (handle Handle, err error) +//sys GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uintptr, overlapped **Overlapped, timeout uint32) (err error) +//sys PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uintptr, overlapped *Overlapped) (err error) +//sys CancelIo(s Handle) (err error) +//sys CancelIoEx(s Handle, o *Overlapped) (err error) +//sys CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = CreateProcessW +//sys CreateProcessAsUser(token Token, appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = advapi32.CreateProcessAsUserW +//sys initializeProcThreadAttributeList(attrlist *ProcThreadAttributeList, attrcount uint32, flags uint32, size *uintptr) (err error) = InitializeProcThreadAttributeList +//sys deleteProcThreadAttributeList(attrlist *ProcThreadAttributeList) = DeleteProcThreadAttributeList +//sys updateProcThreadAttribute(attrlist *ProcThreadAttributeList, flags uint32, attr uintptr, value unsafe.Pointer, size uintptr, prevvalue unsafe.Pointer, returnedsize *uintptr) (err error) = UpdateProcThreadAttribute +//sys OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error) +//sys ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) [failretval<=32] = shell32.ShellExecuteW +//sys GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) = user32.GetWindowThreadProcessId +//sys LoadKeyboardLayout(name *uint16, flags uint32) (hkl Handle, err error) [failretval==0] = user32.LoadKeyboardLayoutW +//sys UnloadKeyboardLayout(hkl Handle) (err error) = user32.UnloadKeyboardLayout +//sys GetKeyboardLayout(tid uint32) (hkl Handle) = user32.GetKeyboardLayout +//sys ToUnicodeEx(vkey uint32, scancode uint32, keystate *byte, pwszBuff *uint16, cchBuff int32, flags uint32, hkl Handle) (ret int32) = user32.ToUnicodeEx +//sys GetShellWindow() (shellWindow HWND) = user32.GetShellWindow +//sys MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) [failretval==0] = user32.MessageBoxW +//sys ExitWindowsEx(flags uint32, reason uint32) (err error) = user32.ExitWindowsEx +//sys shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) = shell32.SHGetKnownFolderPath +//sys TerminateProcess(handle Handle, exitcode uint32) (err error) +//sys GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) +//sys getStartupInfo(startupInfo *StartupInfo) = GetStartupInfoW +//sys GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) +//sys DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) +//sys WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) [failretval==0xffffffff] +//sys waitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMilliseconds uint32) (event uint32, err error) [failretval==0xffffffff] = WaitForMultipleObjects +//sys GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) = GetTempPathW +//sys CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error) +//sys GetFileType(filehandle Handle) (n uint32, err error) +//sys CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) = advapi32.CryptAcquireContextW +//sys CryptReleaseContext(provhandle Handle, flags uint32) (err error) = advapi32.CryptReleaseContext +//sys CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) = advapi32.CryptGenRandom +//sys GetEnvironmentStrings() (envs *uint16, err error) [failretval==nil] = kernel32.GetEnvironmentStringsW +//sys FreeEnvironmentStrings(envs *uint16) (err error) = kernel32.FreeEnvironmentStringsW +//sys GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) = kernel32.GetEnvironmentVariableW +//sys SetEnvironmentVariable(name *uint16, value *uint16) (err error) = kernel32.SetEnvironmentVariableW +//sys ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) = kernel32.ExpandEnvironmentStringsW +//sys CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) (err error) = userenv.CreateEnvironmentBlock +//sys DestroyEnvironmentBlock(block *uint16) (err error) = userenv.DestroyEnvironmentBlock +//sys getTickCount64() (ms uint64) = kernel32.GetTickCount64 +//sys GetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) +//sys SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) +//sys GetFileAttributes(name *uint16) (attrs uint32, err error) [failretval==INVALID_FILE_ATTRIBUTES] = kernel32.GetFileAttributesW +//sys SetFileAttributes(name *uint16, attrs uint32) (err error) = kernel32.SetFileAttributesW +//sys GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) = kernel32.GetFileAttributesExW +//sys GetCommandLine() (cmd *uint16) = kernel32.GetCommandLineW +//sys commandLineToArgv(cmd *uint16, argc *int32) (argv **uint16, err error) [failretval==nil] = shell32.CommandLineToArgvW +//sys LocalFree(hmem Handle) (handle Handle, err error) [failretval!=0] +//sys LocalAlloc(flags uint32, length uint32) (ptr uintptr, err error) +//sys SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) +//sys FlushFileBuffers(handle Handle) (err error) +//sys GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) = kernel32.GetFullPathNameW +//sys GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) = kernel32.GetLongPathNameW +//sys GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) = kernel32.GetShortPathNameW +//sys GetFinalPathNameByHandle(file Handle, filePath *uint16, filePathSize uint32, flags uint32) (n uint32, err error) = kernel32.GetFinalPathNameByHandleW +//sys CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateFileMappingW +//sys MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error) +//sys UnmapViewOfFile(addr uintptr) (err error) +//sys FlushViewOfFile(addr uintptr, length uintptr) (err error) +//sys VirtualLock(addr uintptr, length uintptr) (err error) +//sys VirtualUnlock(addr uintptr, length uintptr) (err error) +//sys VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) = kernel32.VirtualAlloc +//sys VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) = kernel32.VirtualFree +//sys VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) = kernel32.VirtualProtect +//sys VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) = kernel32.VirtualProtectEx +//sys VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQuery +//sys VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQueryEx +//sys ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) = kernel32.ReadProcessMemory +//sys WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) = kernel32.WriteProcessMemory +//sys TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) = mswsock.TransmitFile +//sys ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) = kernel32.ReadDirectoryChangesW +//sys FindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.FindFirstChangeNotificationW +//sys FindNextChangeNotification(handle Handle) (err error) +//sys FindCloseChangeNotification(handle Handle) (err error) +//sys CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) = crypt32.CertOpenSystemStoreW +//sys CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) = crypt32.CertOpenStore +//sys CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) [failretval==nil] = crypt32.CertEnumCertificatesInStore +//sys CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) = crypt32.CertAddCertificateContextToStore +//sys CertCloseStore(store Handle, flags uint32) (err error) = crypt32.CertCloseStore +//sys CertDeleteCertificateFromStore(certContext *CertContext) (err error) = crypt32.CertDeleteCertificateFromStore +//sys CertDuplicateCertificateContext(certContext *CertContext) (dupContext *CertContext) = crypt32.CertDuplicateCertificateContext +//sys PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) = crypt32.PFXImportCertStore +//sys CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) = crypt32.CertGetCertificateChain +//sys CertFreeCertificateChain(ctx *CertChainContext) = crypt32.CertFreeCertificateChain +//sys CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) [failretval==nil] = crypt32.CertCreateCertificateContext +//sys CertFreeCertificateContext(ctx *CertContext) (err error) = crypt32.CertFreeCertificateContext +//sys CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) = crypt32.CertVerifyCertificateChainPolicy +//sys CertGetNameString(certContext *CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) = crypt32.CertGetNameStringW +//sys CertFindExtension(objId *byte, countExtensions uint32, extensions *CertExtension) (ret *CertExtension) = crypt32.CertFindExtension +//sys CertFindCertificateInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevCertContext *CertContext) (cert *CertContext, err error) [failretval==nil] = crypt32.CertFindCertificateInStore +//sys CertFindChainInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevChainContext *CertChainContext) (certchain *CertChainContext, err error) [failretval==nil] = crypt32.CertFindChainInStore +//sys CryptAcquireCertificatePrivateKey(cert *CertContext, flags uint32, parameters unsafe.Pointer, cryptProvOrNCryptKey *Handle, keySpec *uint32, callerFreeProvOrNCryptKey *bool) (err error) = crypt32.CryptAcquireCertificatePrivateKey +//sys CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *Handle, msg *Handle, context *unsafe.Pointer) (err error) = crypt32.CryptQueryObject +//sys CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) = crypt32.CryptDecodeObject +//sys CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) = crypt32.CryptProtectData +//sys CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) = crypt32.CryptUnprotectData +//sys WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) = wintrust.WinVerifyTrustEx +//sys RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) = advapi32.RegOpenKeyExW +//sys RegCloseKey(key Handle) (regerrno error) = advapi32.RegCloseKey +//sys RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegQueryInfoKeyW +//sys RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegEnumKeyExW +//sys RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegQueryValueExW +//sys RegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, event Handle, asynchronous bool) (regerrno error) = advapi32.RegNotifyChangeKeyValue +//sys GetCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId +//sys ProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) = kernel32.ProcessIdToSessionId +//sys ClosePseudoConsole(console Handle) = kernel32.ClosePseudoConsole +//sys createPseudoConsole(size uint32, in Handle, out Handle, flags uint32, pconsole *Handle) (hr error) = kernel32.CreatePseudoConsole +//sys GetConsoleMode(console Handle, mode *uint32) (err error) = kernel32.GetConsoleMode +//sys SetConsoleMode(console Handle, mode uint32) (err error) = kernel32.SetConsoleMode +//sys GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) = kernel32.GetConsoleScreenBufferInfo +//sys setConsoleCursorPosition(console Handle, position uint32) (err error) = kernel32.SetConsoleCursorPosition +//sys GetConsoleCP() (cp uint32, err error) = kernel32.GetConsoleCP +//sys GetConsoleOutputCP() (cp uint32, err error) = kernel32.GetConsoleOutputCP +//sys SetConsoleCP(cp uint32) (err error) = kernel32.SetConsoleCP +//sys SetConsoleOutputCP(cp uint32) (err error) = kernel32.SetConsoleOutputCP +//sys WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW +//sys ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW +//sys resizePseudoConsole(pconsole Handle, size uint32) (hr error) = kernel32.ResizePseudoConsole +//sys CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.CreateToolhelp32Snapshot +//sys Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32FirstW +//sys Module32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32NextW +//sys Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32FirstW +//sys Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32NextW +//sys Thread32First(snapshot Handle, threadEntry *ThreadEntry32) (err error) +//sys Thread32Next(snapshot Handle, threadEntry *ThreadEntry32) (err error) +//sys DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) +// This function returns 1 byte BOOLEAN rather than the 4 byte BOOL. +//sys CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) [failretval&0xff==0] = CreateSymbolicLinkW +//sys CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) [failretval&0xff==0] = CreateHardLinkW +//sys GetCurrentThreadId() (id uint32) +//sys CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateEventW +//sys CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateEventExW +//sys OpenEvent(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) = kernel32.OpenEventW +//sys SetEvent(event Handle) (err error) = kernel32.SetEvent +//sys ResetEvent(event Handle) (err error) = kernel32.ResetEvent +//sys PulseEvent(event Handle) (err error) = kernel32.PulseEvent +//sys CreateMutex(mutexAttrs *SecurityAttributes, initialOwner bool, name *uint16) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateMutexW +//sys CreateMutexEx(mutexAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateMutexExW +//sys OpenMutex(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) = kernel32.OpenMutexW +//sys ReleaseMutex(mutex Handle) (err error) = kernel32.ReleaseMutex +//sys SleepEx(milliseconds uint32, alertable bool) (ret uint32) = kernel32.SleepEx +//sys CreateJobObject(jobAttr *SecurityAttributes, name *uint16) (handle Handle, err error) = kernel32.CreateJobObjectW +//sys AssignProcessToJobObject(job Handle, process Handle) (err error) = kernel32.AssignProcessToJobObject +//sys TerminateJobObject(job Handle, exitCode uint32) (err error) = kernel32.TerminateJobObject +//sys SetErrorMode(mode uint32) (ret uint32) = kernel32.SetErrorMode +//sys ResumeThread(thread Handle) (ret uint32, err error) [failretval==0xffffffff] = kernel32.ResumeThread +//sys SetPriorityClass(process Handle, priorityClass uint32) (err error) = kernel32.SetPriorityClass +//sys GetPriorityClass(process Handle) (ret uint32, err error) = kernel32.GetPriorityClass +//sys QueryInformationJobObject(job Handle, JobObjectInformationClass int32, JobObjectInformation uintptr, JobObjectInformationLength uint32, retlen *uint32) (err error) = kernel32.QueryInformationJobObject +//sys SetInformationJobObject(job Handle, JobObjectInformationClass uint32, JobObjectInformation uintptr, JobObjectInformationLength uint32) (ret int, err error) +//sys GenerateConsoleCtrlEvent(ctrlEvent uint32, processGroupID uint32) (err error) +//sys GetProcessId(process Handle) (id uint32, err error) +//sys QueryFullProcessImageName(proc Handle, flags uint32, exeName *uint16, size *uint32) (err error) = kernel32.QueryFullProcessImageNameW +//sys OpenThread(desiredAccess uint32, inheritHandle bool, threadId uint32) (handle Handle, err error) +//sys SetProcessPriorityBoost(process Handle, disable bool) (err error) = kernel32.SetProcessPriorityBoost +//sys GetProcessWorkingSetSizeEx(hProcess Handle, lpMinimumWorkingSetSize *uintptr, lpMaximumWorkingSetSize *uintptr, flags *uint32) +//sys SetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr, dwMaximumWorkingSetSize uintptr, flags uint32) (err error) +//sys ClearCommBreak(handle Handle) (err error) +//sys ClearCommError(handle Handle, lpErrors *uint32, lpStat *ComStat) (err error) +//sys EscapeCommFunction(handle Handle, dwFunc uint32) (err error) +//sys GetCommState(handle Handle, lpDCB *DCB) (err error) +//sys GetCommModemStatus(handle Handle, lpModemStat *uint32) (err error) +//sys GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) +//sys PurgeComm(handle Handle, dwFlags uint32) (err error) +//sys SetCommBreak(handle Handle) (err error) +//sys SetCommMask(handle Handle, dwEvtMask uint32) (err error) +//sys SetCommState(handle Handle, lpDCB *DCB) (err error) +//sys SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) +//sys SetupComm(handle Handle, dwInQueue uint32, dwOutQueue uint32) (err error) +//sys WaitCommEvent(handle Handle, lpEvtMask *uint32, lpOverlapped *Overlapped) (err error) +//sys GetActiveProcessorCount(groupNumber uint16) (ret uint32) +//sys GetMaximumProcessorCount(groupNumber uint16) (ret uint32) +//sys EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) = user32.EnumWindows +//sys EnumChildWindows(hwnd HWND, enumFunc uintptr, param unsafe.Pointer) = user32.EnumChildWindows +//sys GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, err error) = user32.GetClassNameW +//sys GetDesktopWindow() (hwnd HWND) = user32.GetDesktopWindow +//sys GetForegroundWindow() (hwnd HWND) = user32.GetForegroundWindow +//sys IsWindow(hwnd HWND) (isWindow bool) = user32.IsWindow +//sys IsWindowUnicode(hwnd HWND) (isUnicode bool) = user32.IsWindowUnicode +//sys IsWindowVisible(hwnd HWND) (isVisible bool) = user32.IsWindowVisible +//sys GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) = user32.GetGUIThreadInfo +//sys GetLargePageMinimum() (size uintptr) + +// Volume Management Functions +//sys DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW +//sys DeleteVolumeMountPoint(volumeMountPoint *uint16) (err error) = DeleteVolumeMountPointW +//sys FindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstVolumeW +//sys FindFirstVolumeMountPoint(rootPathName *uint16, volumeMountPoint *uint16, bufferLength uint32) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstVolumeMountPointW +//sys FindNextVolume(findVolume Handle, volumeName *uint16, bufferLength uint32) (err error) = FindNextVolumeW +//sys FindNextVolumeMountPoint(findVolumeMountPoint Handle, volumeMountPoint *uint16, bufferLength uint32) (err error) = FindNextVolumeMountPointW +//sys FindVolumeClose(findVolume Handle) (err error) +//sys FindVolumeMountPointClose(findVolumeMountPoint Handle) (err error) +//sys GetDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *uint64, totalNumberOfBytes *uint64, totalNumberOfFreeBytes *uint64) (err error) = GetDiskFreeSpaceExW +//sys GetDriveType(rootPathName *uint16) (driveType uint32) = GetDriveTypeW +//sys GetLogicalDrives() (drivesBitMask uint32, err error) [failretval==0] +//sys GetLogicalDriveStrings(bufferLength uint32, buffer *uint16) (n uint32, err error) [failretval==0] = GetLogicalDriveStringsW +//sys GetVolumeInformation(rootPathName *uint16, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) = GetVolumeInformationW +//sys GetVolumeInformationByHandle(file Handle, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) = GetVolumeInformationByHandleW +//sys GetVolumeNameForVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16, bufferlength uint32) (err error) = GetVolumeNameForVolumeMountPointW +//sys GetVolumePathName(fileName *uint16, volumePathName *uint16, bufferLength uint32) (err error) = GetVolumePathNameW +//sys GetVolumePathNamesForVolumeName(volumeName *uint16, volumePathNames *uint16, bufferLength uint32, returnLength *uint32) (err error) = GetVolumePathNamesForVolumeNameW +//sys QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) [failretval==0] = QueryDosDeviceW +//sys SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) = SetVolumeLabelW +//sys SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err error) = SetVolumeMountPointW +//sys InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint32, forceAppsClosed bool, rebootAfterShutdown bool, reason uint32) (err error) = advapi32.InitiateSystemShutdownExW +//sys SetProcessShutdownParameters(level uint32, flags uint32) (err error) = kernel32.SetProcessShutdownParameters +//sys GetProcessShutdownParameters(level *uint32, flags *uint32) (err error) = kernel32.GetProcessShutdownParameters +//sys clsidFromString(lpsz *uint16, pclsid *GUID) (ret error) = ole32.CLSIDFromString +//sys stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) = ole32.StringFromGUID2 +//sys coCreateGuid(pguid *GUID) (ret error) = ole32.CoCreateGuid +//sys CoTaskMemFree(address unsafe.Pointer) = ole32.CoTaskMemFree +//sys CoInitializeEx(reserved uintptr, coInit uint32) (ret error) = ole32.CoInitializeEx +//sys CoUninitialize() = ole32.CoUninitialize +//sys CoGetObject(name *uint16, bindOpts *BIND_OPTS3, guid *GUID, functionTable **uintptr) (ret error) = ole32.CoGetObject +//sys getProcessPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetProcessPreferredUILanguages +//sys getThreadPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetThreadPreferredUILanguages +//sys getUserPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetUserPreferredUILanguages +//sys getSystemPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetSystemPreferredUILanguages +//sys findResource(module Handle, name uintptr, resType uintptr) (resInfo Handle, err error) = kernel32.FindResourceW +//sys SizeofResource(module Handle, resInfo Handle) (size uint32, err error) = kernel32.SizeofResource +//sys LoadResource(module Handle, resInfo Handle) (resData Handle, err error) = kernel32.LoadResource +//sys LockResource(resData Handle) (addr uintptr, err error) = kernel32.LockResource + +// Version APIs +//sys GetFileVersionInfoSize(filename string, zeroHandle *Handle) (bufSize uint32, err error) = version.GetFileVersionInfoSizeW +//sys GetFileVersionInfo(filename string, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) = version.GetFileVersionInfoW +//sys VerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) = version.VerQueryValueW + +// Process Status API (PSAPI) +//sys enumProcesses(processIds *uint32, nSize uint32, bytesReturned *uint32) (err error) = psapi.EnumProcesses +//sys EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) = psapi.EnumProcessModules +//sys EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) = psapi.EnumProcessModulesEx +//sys GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) = psapi.GetModuleInformation +//sys GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size uint32) (err error) = psapi.GetModuleFileNameExW +//sys GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uint32) (err error) = psapi.GetModuleBaseNameW +//sys QueryWorkingSetEx(process Handle, pv uintptr, cb uint32) (err error) = psapi.QueryWorkingSetEx + +// NT Native APIs +//sys rtlNtStatusToDosErrorNoTeb(ntstatus NTStatus) (ret syscall.Errno) = ntdll.RtlNtStatusToDosErrorNoTeb +//sys rtlGetVersion(info *OsVersionInfoEx) (ntstatus error) = ntdll.RtlGetVersion +//sys rtlGetNtVersionNumbers(majorVersion *uint32, minorVersion *uint32, buildNumber *uint32) = ntdll.RtlGetNtVersionNumbers +//sys RtlGetCurrentPeb() (peb *PEB) = ntdll.RtlGetCurrentPeb +//sys RtlInitUnicodeString(destinationString *NTUnicodeString, sourceString *uint16) = ntdll.RtlInitUnicodeString +//sys RtlInitString(destinationString *NTString, sourceString *byte) = ntdll.RtlInitString +//sys NtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, allocationSize *int64, attributes uint32, share uint32, disposition uint32, options uint32, eabuffer uintptr, ealength uint32) (ntstatus error) = ntdll.NtCreateFile +//sys NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (ntstatus error) = ntdll.NtCreateNamedPipeFile +//sys NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) = ntdll.NtSetInformationFile +//sys RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToNtPathName_U_WithStatus +//sys RtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToRelativeNtPathName_U_WithStatus +//sys RtlDefaultNpAcl(acl **ACL) (ntstatus error) = ntdll.RtlDefaultNpAcl +//sys NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32, retLen *uint32) (ntstatus error) = ntdll.NtQueryInformationProcess +//sys NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) = ntdll.NtSetInformationProcess +//sys NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) = ntdll.NtQuerySystemInformation +//sys NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) = ntdll.NtSetSystemInformation +//sys RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) = ntdll.RtlAddFunctionTable +//sys RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) = ntdll.RtlDeleteFunctionTable + +// Desktop Window Manager API (Dwmapi) +//sys DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmGetWindowAttribute +//sys DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmSetWindowAttribute + +// Windows Multimedia API +//sys TimeBeginPeriod (period uint32) (err error) [failretval != 0] = winmm.timeBeginPeriod +//sys TimeEndPeriod (period uint32) (err error) [failretval != 0] = winmm.timeEndPeriod + +// syscall interface implementation for other packages + +// GetCurrentProcess returns the handle for the current process. +// It is a pseudo handle that does not need to be closed. +// The returned error is always nil. +// +// Deprecated: use CurrentProcess for the same Handle without the nil +// error. +func GetCurrentProcess() (Handle, error) { + return CurrentProcess(), nil +} + +// CurrentProcess returns the handle for the current process. +// It is a pseudo handle that does not need to be closed. +func CurrentProcess() Handle { return Handle(^uintptr(1 - 1)) } + +// GetCurrentThread returns the handle for the current thread. +// It is a pseudo handle that does not need to be closed. +// The returned error is always nil. +// +// Deprecated: use CurrentThread for the same Handle without the nil +// error. +func GetCurrentThread() (Handle, error) { + return CurrentThread(), nil +} + +// CurrentThread returns the handle for the current thread. +// It is a pseudo handle that does not need to be closed. +func CurrentThread() Handle { return Handle(^uintptr(2 - 1)) } + +// GetProcAddressByOrdinal retrieves the address of the exported +// function from module by ordinal. +func GetProcAddressByOrdinal(module Handle, ordinal uintptr) (proc uintptr, err error) { + r0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), ordinal, 0) + proc = uintptr(r0) + if proc == 0 { + err = errnoErr(e1) + } + return +} + +func Exit(code int) { ExitProcess(uint32(code)) } + +func makeInheritSa() *SecurityAttributes { + var sa SecurityAttributes + sa.Length = uint32(unsafe.Sizeof(sa)) + sa.InheritHandle = 1 + return &sa +} + +func Open(path string, mode int, perm uint32) (fd Handle, err error) { + if len(path) == 0 { + return InvalidHandle, ERROR_FILE_NOT_FOUND + } + pathp, err := UTF16PtrFromString(path) + if err != nil { + return InvalidHandle, err + } + var access uint32 + switch mode & (O_RDONLY | O_WRONLY | O_RDWR) { + case O_RDONLY: + access = GENERIC_READ + case O_WRONLY: + access = GENERIC_WRITE + case O_RDWR: + access = GENERIC_READ | GENERIC_WRITE + } + if mode&O_CREAT != 0 { + access |= GENERIC_WRITE + } + if mode&O_APPEND != 0 { + access &^= GENERIC_WRITE + access |= FILE_APPEND_DATA + } + sharemode := uint32(FILE_SHARE_READ | FILE_SHARE_WRITE) + var sa *SecurityAttributes + if mode&O_CLOEXEC == 0 { + sa = makeInheritSa() + } + var createmode uint32 + switch { + case mode&(O_CREAT|O_EXCL) == (O_CREAT | O_EXCL): + createmode = CREATE_NEW + case mode&(O_CREAT|O_TRUNC) == (O_CREAT | O_TRUNC): + createmode = CREATE_ALWAYS + case mode&O_CREAT == O_CREAT: + createmode = OPEN_ALWAYS + case mode&O_TRUNC == O_TRUNC: + createmode = TRUNCATE_EXISTING + default: + createmode = OPEN_EXISTING + } + var attrs uint32 = FILE_ATTRIBUTE_NORMAL + if perm&S_IWRITE == 0 { + attrs = FILE_ATTRIBUTE_READONLY + } + h, e := CreateFile(pathp, access, sharemode, sa, createmode, attrs, 0) + return h, e +} + +func Read(fd Handle, p []byte) (n int, err error) { + var done uint32 + e := ReadFile(fd, p, &done, nil) + if e != nil { + if e == ERROR_BROKEN_PIPE { + // NOTE(brainman): work around ERROR_BROKEN_PIPE is returned on reading EOF from stdin + return 0, nil + } + return 0, e + } + return int(done), nil +} + +func Write(fd Handle, p []byte) (n int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + var done uint32 + e := WriteFile(fd, p, &done, nil) + if e != nil { + return 0, e + } + return int(done), nil +} + +func ReadFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error { + err := readFile(fd, p, done, overlapped) + if raceenabled { + if *done > 0 { + raceWriteRange(unsafe.Pointer(&p[0]), int(*done)) + } + raceAcquire(unsafe.Pointer(&ioSync)) + } + return err +} + +func WriteFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + err := writeFile(fd, p, done, overlapped) + if raceenabled && *done > 0 { + raceReadRange(unsafe.Pointer(&p[0]), int(*done)) + } + return err +} + +var ioSync int64 + +func Seek(fd Handle, offset int64, whence int) (newoffset int64, err error) { + var w uint32 + switch whence { + case 0: + w = FILE_BEGIN + case 1: + w = FILE_CURRENT + case 2: + w = FILE_END + } + hi := int32(offset >> 32) + lo := int32(offset) + // use GetFileType to check pipe, pipe can't do seek + ft, _ := GetFileType(fd) + if ft == FILE_TYPE_PIPE { + return 0, syscall.EPIPE + } + rlo, e := SetFilePointer(fd, lo, &hi, w) + if e != nil { + return 0, e + } + return int64(hi)<<32 + int64(rlo), nil +} + +func Close(fd Handle) (err error) { + return CloseHandle(fd) +} + +var ( + Stdin = getStdHandle(STD_INPUT_HANDLE) + Stdout = getStdHandle(STD_OUTPUT_HANDLE) + Stderr = getStdHandle(STD_ERROR_HANDLE) +) + +func getStdHandle(stdhandle uint32) (fd Handle) { + r, _ := GetStdHandle(stdhandle) + return r +} + +const ImplementsGetwd = true + +func Getwd() (wd string, err error) { + b := make([]uint16, 300) + n, e := GetCurrentDirectory(uint32(len(b)), &b[0]) + if e != nil { + return "", e + } + return string(utf16.Decode(b[0:n])), nil +} + +func Chdir(path string) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return SetCurrentDirectory(pathp) +} + +func Mkdir(path string, mode uint32) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return CreateDirectory(pathp, nil) +} + +func Rmdir(path string) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return RemoveDirectory(pathp) +} + +func Unlink(path string) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return DeleteFile(pathp) +} + +func Rename(oldpath, newpath string) (err error) { + from, err := UTF16PtrFromString(oldpath) + if err != nil { + return err + } + to, err := UTF16PtrFromString(newpath) + if err != nil { + return err + } + return MoveFileEx(from, to, MOVEFILE_REPLACE_EXISTING) +} + +func ComputerName() (name string, err error) { + var n uint32 = MAX_COMPUTERNAME_LENGTH + 1 + b := make([]uint16, n) + e := GetComputerName(&b[0], &n) + if e != nil { + return "", e + } + return string(utf16.Decode(b[0:n])), nil +} + +func DurationSinceBoot() time.Duration { + return time.Duration(getTickCount64()) * time.Millisecond +} + +func Ftruncate(fd Handle, length int64) (err error) { + type _FILE_END_OF_FILE_INFO struct { + EndOfFile int64 + } + var info _FILE_END_OF_FILE_INFO + info.EndOfFile = length + return SetFileInformationByHandle(fd, FileEndOfFileInfo, (*byte)(unsafe.Pointer(&info)), uint32(unsafe.Sizeof(info))) +} + +func Gettimeofday(tv *Timeval) (err error) { + var ft Filetime + GetSystemTimeAsFileTime(&ft) + *tv = NsecToTimeval(ft.Nanoseconds()) + return nil +} + +func Pipe(p []Handle) (err error) { + if len(p) != 2 { + return syscall.EINVAL + } + var r, w Handle + e := CreatePipe(&r, &w, makeInheritSa(), 0) + if e != nil { + return e + } + p[0] = r + p[1] = w + return nil +} + +func Utimes(path string, tv []Timeval) (err error) { + if len(tv) != 2 { + return syscall.EINVAL + } + pathp, e := UTF16PtrFromString(path) + if e != nil { + return e + } + h, e := CreateFile(pathp, + FILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, nil, + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0) + if e != nil { + return e + } + defer CloseHandle(h) + a := NsecToFiletime(tv[0].Nanoseconds()) + w := NsecToFiletime(tv[1].Nanoseconds()) + return SetFileTime(h, nil, &a, &w) +} + +func UtimesNano(path string, ts []Timespec) (err error) { + if len(ts) != 2 { + return syscall.EINVAL + } + pathp, e := UTF16PtrFromString(path) + if e != nil { + return e + } + h, e := CreateFile(pathp, + FILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, nil, + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0) + if e != nil { + return e + } + defer CloseHandle(h) + a := NsecToFiletime(TimespecToNsec(ts[0])) + w := NsecToFiletime(TimespecToNsec(ts[1])) + return SetFileTime(h, nil, &a, &w) +} + +func Fsync(fd Handle) (err error) { + return FlushFileBuffers(fd) +} + +func Chmod(path string, mode uint32) (err error) { + p, e := UTF16PtrFromString(path) + if e != nil { + return e + } + attrs, e := GetFileAttributes(p) + if e != nil { + return e + } + if mode&S_IWRITE != 0 { + attrs &^= FILE_ATTRIBUTE_READONLY + } else { + attrs |= FILE_ATTRIBUTE_READONLY + } + return SetFileAttributes(p, attrs) +} + +func LoadGetSystemTimePreciseAsFileTime() error { + return procGetSystemTimePreciseAsFileTime.Find() +} + +func LoadCancelIoEx() error { + return procCancelIoEx.Find() +} + +func LoadSetFileCompletionNotificationModes() error { + return procSetFileCompletionNotificationModes.Find() +} + +func WaitForMultipleObjects(handles []Handle, waitAll bool, waitMilliseconds uint32) (event uint32, err error) { + // Every other win32 array API takes arguments as "pointer, count", except for this function. So we + // can't declare it as a usual [] type, because mksyscall will use the opposite order. We therefore + // trivially stub this ourselves. + + var handlePtr *Handle + if len(handles) > 0 { + handlePtr = &handles[0] + } + return waitForMultipleObjects(uint32(len(handles)), uintptr(unsafe.Pointer(handlePtr)), waitAll, waitMilliseconds) +} + +// net api calls + +const socket_error = uintptr(^uint32(0)) + +//sys WSAStartup(verreq uint32, data *WSAData) (sockerr error) = ws2_32.WSAStartup +//sys WSACleanup() (err error) [failretval==socket_error] = ws2_32.WSACleanup +//sys WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) [failretval==socket_error] = ws2_32.WSAIoctl +//sys WSALookupServiceBegin(querySet *WSAQUERYSET, flags uint32, handle *Handle) (err error) [failretval==socket_error] = ws2_32.WSALookupServiceBeginW +//sys WSALookupServiceNext(handle Handle, flags uint32, size *int32, querySet *WSAQUERYSET) (err error) [failretval==socket_error] = ws2_32.WSALookupServiceNextW +//sys WSALookupServiceEnd(handle Handle) (err error) [failretval==socket_error] = ws2_32.WSALookupServiceEnd +//sys socket(af int32, typ int32, protocol int32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.socket +//sys sendto(s Handle, buf []byte, flags int32, to unsafe.Pointer, tolen int32) (err error) [failretval==socket_error] = ws2_32.sendto +//sys recvfrom(s Handle, buf []byte, flags int32, from *RawSockaddrAny, fromlen *int32) (n int32, err error) [failretval==-1] = ws2_32.recvfrom +//sys Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) [failretval==socket_error] = ws2_32.setsockopt +//sys Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) [failretval==socket_error] = ws2_32.getsockopt +//sys bind(s Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socket_error] = ws2_32.bind +//sys connect(s Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socket_error] = ws2_32.connect +//sys getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) [failretval==socket_error] = ws2_32.getsockname +//sys getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) [failretval==socket_error] = ws2_32.getpeername +//sys listen(s Handle, backlog int32) (err error) [failretval==socket_error] = ws2_32.listen +//sys shutdown(s Handle, how int32) (err error) [failretval==socket_error] = ws2_32.shutdown +//sys Closesocket(s Handle) (err error) [failretval==socket_error] = ws2_32.closesocket +//sys AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) = mswsock.AcceptEx +//sys GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) = mswsock.GetAcceptExSockaddrs +//sys WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecv +//sys WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASend +//sys WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecvFrom +//sys WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASendTo +//sys WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, group uint32, flags uint32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.WSASocketW +//sys WSADuplicateSocket(s Handle, processID uint32, info *WSAProtocolInfo) (err error) [failretval!=0] = ws2_32.WSADuplicateSocketW +//sys GetHostByName(name string) (h *Hostent, err error) [failretval==nil] = ws2_32.gethostbyname +//sys GetServByName(name string, proto string) (s *Servent, err error) [failretval==nil] = ws2_32.getservbyname +//sys Ntohs(netshort uint16) (u uint16) = ws2_32.ntohs +//sys GetProtoByName(name string) (p *Protoent, err error) [failretval==nil] = ws2_32.getprotobyname +//sys DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) = dnsapi.DnsQuery_W +//sys DnsRecordListFree(rl *DNSRecord, freetype uint32) = dnsapi.DnsRecordListFree +//sys DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) = dnsapi.DnsNameCompare_W +//sys GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) = ws2_32.GetAddrInfoW +//sys FreeAddrInfoW(addrinfo *AddrinfoW) = ws2_32.FreeAddrInfoW +//sys GetIfEntry(pIfRow *MibIfRow) (errcode error) = iphlpapi.GetIfEntry +//sys GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) = iphlpapi.GetAdaptersInfo +//sys SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) = kernel32.SetFileCompletionNotificationModes +//sys WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) [failretval==-1] = ws2_32.WSAEnumProtocolsW +//sys WSAGetOverlappedResult(h Handle, o *Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) = ws2_32.WSAGetOverlappedResult +//sys GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) = iphlpapi.GetAdaptersAddresses +//sys GetACP() (acp uint32) = kernel32.GetACP +//sys MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar +//sys getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) = iphlpapi.GetBestInterfaceEx +//sys GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) = iphlpapi.GetIfEntry2Ex +//sys GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) = iphlpapi.GetUnicastIpAddressEntry +//sys NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyIpInterfaceChange +//sys NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyUnicastIpAddressChange +//sys CancelMibChangeNotify2(notificationHandle Handle) (errcode error) = iphlpapi.CancelMibChangeNotify2 + +// For testing: clients can set this flag to force +// creation of IPv6 sockets to return EAFNOSUPPORT. +var SocketDisableIPv6 bool + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [100]int8 +} + +type Sockaddr interface { + sockaddr() (ptr unsafe.Pointer, len int32, err error) // lowercase; only we can define Sockaddrs +} + +type SockaddrInet4 struct { + Port int + Addr [4]byte + raw RawSockaddrInet4 +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, int32, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, syscall.EINVAL + } + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Addr = sa.Addr + return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil +} + +type SockaddrInet6 struct { + Port int + ZoneId uint32 + Addr [16]byte + raw RawSockaddrInet6 +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, int32, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, syscall.EINVAL + } + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + sa.raw.Addr = sa.Addr + return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil +} + +type RawSockaddrUnix struct { + Family uint16 + Path [UNIX_PATH_MAX]int8 +} + +type SockaddrUnix struct { + Name string + raw RawSockaddrUnix +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, int32, error) { + name := sa.Name + n := len(name) + if n > len(sa.raw.Path) { + return nil, 0, syscall.EINVAL + } + if n == len(sa.raw.Path) && name[0] != '@' { + return nil, 0, syscall.EINVAL + } + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + // length is family (uint16), name, NUL. + sl := int32(2) + if n > 0 { + sl += int32(n) + 1 + } + if sa.raw.Path[0] == '@' || (sa.raw.Path[0] == 0 && sl > 3) { + // Check sl > 3 so we don't change unnamed socket behavior. + sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- + } + + return unsafe.Pointer(&sa.raw), sl, nil +} + +type RawSockaddrBth struct { + AddressFamily [2]byte + BtAddr [8]byte + ServiceClassId [16]byte + Port [4]byte +} + +type SockaddrBth struct { + BtAddr uint64 + ServiceClassId GUID + Port uint32 + + raw RawSockaddrBth +} + +func (sa *SockaddrBth) sockaddr() (unsafe.Pointer, int32, error) { + family := AF_BTH + sa.raw = RawSockaddrBth{ + AddressFamily: *(*[2]byte)(unsafe.Pointer(&family)), + BtAddr: *(*[8]byte)(unsafe.Pointer(&sa.BtAddr)), + Port: *(*[4]byte)(unsafe.Pointer(&sa.Port)), + ServiceClassId: *(*[16]byte)(unsafe.Pointer(&sa.ServiceClassId)), + } + return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil +} + +func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + sa := new(SockaddrUnix) + if pp.Path[0] == 0 { + // "Abstract" Unix domain socket. + // Rewrite leading NUL as @ for textual display. + // (This is the standard convention.) + // Not friendly to overwrite in place, + // but the callers below don't care. + pp.Path[0] = '@' + } + + // Assume path ends at NUL. + // This is not technically the Linux semantics for + // abstract Unix domain sockets--they are supposed + // to be uninterpreted fixed-size binary blobs--but + // everyone uses this convention. + n := 0 + for n < len(pp.Path) && pp.Path[n] != 0 { + n++ + } + sa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n)) + return sa, nil + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.Addr = pp.Addr + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + sa.Addr = pp.Addr + return sa, nil + } + return nil, syscall.EAFNOSUPPORT +} + +func Socket(domain, typ, proto int) (fd Handle, err error) { + if domain == AF_INET6 && SocketDisableIPv6 { + return InvalidHandle, syscall.EAFNOSUPPORT + } + return socket(int32(domain), int32(typ), int32(proto)) +} + +func SetsockoptInt(fd Handle, level, opt int, value int) (err error) { + v := int32(value) + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&v)), int32(unsafe.Sizeof(v))) +} + +func Bind(fd Handle, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return bind(fd, ptr, n) +} + +func Connect(fd Handle, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return connect(fd, ptr, n) +} + +func GetBestInterfaceEx(sa Sockaddr, pdwBestIfIndex *uint32) (err error) { + ptr, _, err := sa.sockaddr() + if err != nil { + return err + } + return getBestInterfaceEx(ptr, pdwBestIfIndex) +} + +func Getsockname(fd Handle) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + l := int32(unsafe.Sizeof(rsa)) + if err = getsockname(fd, &rsa, &l); err != nil { + return + } + return rsa.Sockaddr() +} + +func Getpeername(fd Handle) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + l := int32(unsafe.Sizeof(rsa)) + if err = getpeername(fd, &rsa, &l); err != nil { + return + } + return rsa.Sockaddr() +} + +func Listen(s Handle, n int) (err error) { + return listen(s, int32(n)) +} + +func Shutdown(fd Handle, how int) (err error) { + return shutdown(fd, int32(how)) +} + +func WSASendto(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to Sockaddr, overlapped *Overlapped, croutine *byte) (err error) { + var rsa unsafe.Pointer + var l int32 + if to != nil { + rsa, l, err = to.sockaddr() + if err != nil { + return err + } + } + return WSASendTo(s, bufs, bufcnt, sent, flags, (*RawSockaddrAny)(unsafe.Pointer(rsa)), l, overlapped, croutine) +} + +func LoadGetAddrInfo() error { + return procGetAddrInfoW.Find() +} + +var connectExFunc struct { + once sync.Once + addr uintptr + err error +} + +func LoadConnectEx() error { + connectExFunc.once.Do(func() { + var s Handle + s, connectExFunc.err = Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) + if connectExFunc.err != nil { + return + } + defer CloseHandle(s) + var n uint32 + connectExFunc.err = WSAIoctl(s, + SIO_GET_EXTENSION_FUNCTION_POINTER, + (*byte)(unsafe.Pointer(&WSAID_CONNECTEX)), + uint32(unsafe.Sizeof(WSAID_CONNECTEX)), + (*byte)(unsafe.Pointer(&connectExFunc.addr)), + uint32(unsafe.Sizeof(connectExFunc.addr)), + &n, nil, 0) + }) + return connectExFunc.err +} + +func connectEx(s Handle, name unsafe.Pointer, namelen int32, sendBuf *byte, sendDataLen uint32, bytesSent *uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall9(connectExFunc.addr, 7, uintptr(s), uintptr(name), uintptr(namelen), uintptr(unsafe.Pointer(sendBuf)), uintptr(sendDataLen), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ConnectEx(fd Handle, sa Sockaddr, sendBuf *byte, sendDataLen uint32, bytesSent *uint32, overlapped *Overlapped) error { + err := LoadConnectEx() + if err != nil { + return errorspkg.New("failed to find ConnectEx: " + err.Error()) + } + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return connectEx(fd, ptr, n, sendBuf, sendDataLen, bytesSent, overlapped) +} + +var sendRecvMsgFunc struct { + once sync.Once + sendAddr uintptr + recvAddr uintptr + err error +} + +func loadWSASendRecvMsg() error { + sendRecvMsgFunc.once.Do(func() { + var s Handle + s, sendRecvMsgFunc.err = Socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) + if sendRecvMsgFunc.err != nil { + return + } + defer CloseHandle(s) + var n uint32 + sendRecvMsgFunc.err = WSAIoctl(s, + SIO_GET_EXTENSION_FUNCTION_POINTER, + (*byte)(unsafe.Pointer(&WSAID_WSARECVMSG)), + uint32(unsafe.Sizeof(WSAID_WSARECVMSG)), + (*byte)(unsafe.Pointer(&sendRecvMsgFunc.recvAddr)), + uint32(unsafe.Sizeof(sendRecvMsgFunc.recvAddr)), + &n, nil, 0) + if sendRecvMsgFunc.err != nil { + return + } + sendRecvMsgFunc.err = WSAIoctl(s, + SIO_GET_EXTENSION_FUNCTION_POINTER, + (*byte)(unsafe.Pointer(&WSAID_WSASENDMSG)), + uint32(unsafe.Sizeof(WSAID_WSASENDMSG)), + (*byte)(unsafe.Pointer(&sendRecvMsgFunc.sendAddr)), + uint32(unsafe.Sizeof(sendRecvMsgFunc.sendAddr)), + &n, nil, 0) + }) + return sendRecvMsgFunc.err +} + +func WSASendMsg(fd Handle, msg *WSAMsg, flags uint32, bytesSent *uint32, overlapped *Overlapped, croutine *byte) error { + err := loadWSASendRecvMsg() + if err != nil { + return err + } + r1, _, e1 := syscall.Syscall6(sendRecvMsgFunc.sendAddr, 6, uintptr(fd), uintptr(unsafe.Pointer(msg)), uintptr(flags), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) + if r1 == socket_error { + err = errnoErr(e1) + } + return err +} + +func WSARecvMsg(fd Handle, msg *WSAMsg, bytesReceived *uint32, overlapped *Overlapped, croutine *byte) error { + err := loadWSASendRecvMsg() + if err != nil { + return err + } + r1, _, e1 := syscall.Syscall6(sendRecvMsgFunc.recvAddr, 5, uintptr(fd), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(bytesReceived)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return err +} + +// Invented structures to support what package os expects. +type Rusage struct { + CreationTime Filetime + ExitTime Filetime + KernelTime Filetime + UserTime Filetime +} + +type WaitStatus struct { + ExitCode uint32 +} + +func (w WaitStatus) Exited() bool { return true } + +func (w WaitStatus) ExitStatus() int { return int(w.ExitCode) } + +func (w WaitStatus) Signal() Signal { return -1 } + +func (w WaitStatus) CoreDump() bool { return false } + +func (w WaitStatus) Stopped() bool { return false } + +func (w WaitStatus) Continued() bool { return false } + +func (w WaitStatus) StopSignal() Signal { return -1 } + +func (w WaitStatus) Signaled() bool { return false } + +func (w WaitStatus) TrapCause() int { return -1 } + +// Timespec is an invented structure on Windows, but here for +// consistency with the corresponding package for other operating systems. +type Timespec struct { + Sec int64 + Nsec int64 +} + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +// TODO(brainman): fix all needed for net + +func Accept(fd Handle) (nfd Handle, sa Sockaddr, err error) { return 0, nil, syscall.EWINDOWS } + +func Recvfrom(fd Handle, p []byte, flags int) (n int, from Sockaddr, err error) { + var rsa RawSockaddrAny + l := int32(unsafe.Sizeof(rsa)) + n32, err := recvfrom(fd, p, int32(flags), &rsa, &l) + n = int(n32) + if err != nil { + return + } + from, err = rsa.Sockaddr() + return +} + +func Sendto(fd Handle, p []byte, flags int, to Sockaddr) (err error) { + ptr, l, err := to.sockaddr() + if err != nil { + return err + } + return sendto(fd, p, int32(flags), ptr, l) +} + +func SetsockoptTimeval(fd Handle, level, opt int, tv *Timeval) (err error) { return syscall.EWINDOWS } + +// The Linger struct is wrong but we only noticed after Go 1. +// sysLinger is the real system call structure. + +// BUG(brainman): The definition of Linger is not appropriate for direct use +// with Setsockopt and Getsockopt. +// Use SetsockoptLinger instead. + +type Linger struct { + Onoff int32 + Linger int32 +} + +type sysLinger struct { + Onoff uint16 + Linger uint16 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +func GetsockoptInt(fd Handle, level, opt int) (int, error) { + v := int32(0) + l := int32(unsafe.Sizeof(v)) + err := Getsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&v)), &l) + return int(v), err +} + +func SetsockoptLinger(fd Handle, level, opt int, l *Linger) (err error) { + sys := sysLinger{Onoff: uint16(l.Onoff), Linger: uint16(l.Linger)} + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&sys)), int32(unsafe.Sizeof(sys))) +} + +func SetsockoptInet4Addr(fd Handle, level, opt int, value [4]byte) (err error) { + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&value[0])), 4) +} + +func SetsockoptIPMreq(fd Handle, level, opt int, mreq *IPMreq) (err error) { + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(mreq)), int32(unsafe.Sizeof(*mreq))) +} + +func SetsockoptIPv6Mreq(fd Handle, level, opt int, mreq *IPv6Mreq) (err error) { + return syscall.EWINDOWS +} + +func EnumProcesses(processIds []uint32, bytesReturned *uint32) error { + // EnumProcesses syscall expects the size parameter to be in bytes, but the code generated with mksyscall uses + // the length of the processIds slice instead. Hence, this wrapper function is added to fix the discrepancy. + var p *uint32 + if len(processIds) > 0 { + p = &processIds[0] + } + size := uint32(len(processIds) * 4) + return enumProcesses(p, size, bytesReturned) +} + +func Getpid() (pid int) { return int(GetCurrentProcessId()) } + +func FindFirstFile(name *uint16, data *Win32finddata) (handle Handle, err error) { + // NOTE(rsc): The Win32finddata struct is wrong for the system call: + // the two paths are each one uint16 short. Use the correct struct, + // a win32finddata1, and then copy the results out. + // There is no loss of expressivity here, because the final + // uint16, if it is used, is supposed to be a NUL, and Go doesn't need that. + // For Go 1.1, we might avoid the allocation of win32finddata1 here + // by adding a final Bug [2]uint16 field to the struct and then + // adjusting the fields in the result directly. + var data1 win32finddata1 + handle, err = findFirstFile1(name, &data1) + if err == nil { + copyFindData(data, &data1) + } + return +} + +func FindNextFile(handle Handle, data *Win32finddata) (err error) { + var data1 win32finddata1 + err = findNextFile1(handle, &data1) + if err == nil { + copyFindData(data, &data1) + } + return +} + +func getProcessEntry(pid int) (*ProcessEntry32, error) { + snapshot, err := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) + if err != nil { + return nil, err + } + defer CloseHandle(snapshot) + var procEntry ProcessEntry32 + procEntry.Size = uint32(unsafe.Sizeof(procEntry)) + if err = Process32First(snapshot, &procEntry); err != nil { + return nil, err + } + for { + if procEntry.ProcessID == uint32(pid) { + return &procEntry, nil + } + err = Process32Next(snapshot, &procEntry) + if err != nil { + return nil, err + } + } +} + +func Getppid() (ppid int) { + pe, err := getProcessEntry(Getpid()) + if err != nil { + return -1 + } + return int(pe.ParentProcessID) +} + +// TODO(brainman): fix all needed for os +func Fchdir(fd Handle) (err error) { return syscall.EWINDOWS } +func Link(oldpath, newpath string) (err error) { return syscall.EWINDOWS } +func Symlink(path, link string) (err error) { return syscall.EWINDOWS } + +func Fchmod(fd Handle, mode uint32) (err error) { return syscall.EWINDOWS } +func Chown(path string, uid int, gid int) (err error) { return syscall.EWINDOWS } +func Lchown(path string, uid int, gid int) (err error) { return syscall.EWINDOWS } +func Fchown(fd Handle, uid int, gid int) (err error) { return syscall.EWINDOWS } + +func Getuid() (uid int) { return -1 } +func Geteuid() (euid int) { return -1 } +func Getgid() (gid int) { return -1 } +func Getegid() (egid int) { return -1 } +func Getgroups() (gids []int, err error) { return nil, syscall.EWINDOWS } + +type Signal int + +func (s Signal) Signal() {} + +func (s Signal) String() string { + if 0 <= s && int(s) < len(signals) { + str := signals[s] + if str != "" { + return str + } + } + return "signal " + itoa(int(s)) +} + +func LoadCreateSymbolicLink() error { + return procCreateSymbolicLinkW.Find() +} + +// Readlink returns the destination of the named symbolic link. +func Readlink(path string, buf []byte) (n int, err error) { + fd, err := CreateFile(StringToUTF16Ptr(path), GENERIC_READ, 0, nil, OPEN_EXISTING, + FILE_FLAG_OPEN_REPARSE_POINT|FILE_FLAG_BACKUP_SEMANTICS, 0) + if err != nil { + return -1, err + } + defer CloseHandle(fd) + + rdbbuf := make([]byte, MAXIMUM_REPARSE_DATA_BUFFER_SIZE) + var bytesReturned uint32 + err = DeviceIoControl(fd, FSCTL_GET_REPARSE_POINT, nil, 0, &rdbbuf[0], uint32(len(rdbbuf)), &bytesReturned, nil) + if err != nil { + return -1, err + } + + rdb := (*reparseDataBuffer)(unsafe.Pointer(&rdbbuf[0])) + var s string + switch rdb.ReparseTag { + case IO_REPARSE_TAG_SYMLINK: + data := (*symbolicLinkReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer)) + p := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0])) + s = UTF16ToString(p[data.PrintNameOffset/2 : (data.PrintNameLength-data.PrintNameOffset)/2]) + case IO_REPARSE_TAG_MOUNT_POINT: + data := (*mountPointReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer)) + p := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0])) + s = UTF16ToString(p[data.PrintNameOffset/2 : (data.PrintNameLength-data.PrintNameOffset)/2]) + default: + // the path is not a symlink or junction but another type of reparse + // point + return -1, syscall.ENOENT + } + n = copy(buf, []byte(s)) + + return n, nil +} + +// GUIDFromString parses a string in the form of +// "{XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" into a GUID. +func GUIDFromString(str string) (GUID, error) { + guid := GUID{} + str16, err := syscall.UTF16PtrFromString(str) + if err != nil { + return guid, err + } + err = clsidFromString(str16, &guid) + if err != nil { + return guid, err + } + return guid, nil +} + +// GenerateGUID creates a new random GUID. +func GenerateGUID() (GUID, error) { + guid := GUID{} + err := coCreateGuid(&guid) + if err != nil { + return guid, err + } + return guid, nil +} + +// String returns the canonical string form of the GUID, +// in the form of "{XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}". +func (guid GUID) String() string { + var str [100]uint16 + chars := stringFromGUID2(&guid, &str[0], int32(len(str))) + if chars <= 1 { + return "" + } + return string(utf16.Decode(str[:chars-1])) +} + +// KnownFolderPath returns a well-known folder path for the current user, specified by one of +// the FOLDERID_ constants, and chosen and optionally created based on a KF_ flag. +func KnownFolderPath(folderID *KNOWNFOLDERID, flags uint32) (string, error) { + return Token(0).KnownFolderPath(folderID, flags) +} + +// KnownFolderPath returns a well-known folder path for the user token, specified by one of +// the FOLDERID_ constants, and chosen and optionally created based on a KF_ flag. +func (t Token) KnownFolderPath(folderID *KNOWNFOLDERID, flags uint32) (string, error) { + var p *uint16 + err := shGetKnownFolderPath(folderID, flags, t, &p) + if err != nil { + return "", err + } + defer CoTaskMemFree(unsafe.Pointer(p)) + return UTF16PtrToString(p), nil +} + +// RtlGetVersion returns the version of the underlying operating system, ignoring +// manifest semantics but is affected by the application compatibility layer. +func RtlGetVersion() *OsVersionInfoEx { + info := &OsVersionInfoEx{} + info.osVersionInfoSize = uint32(unsafe.Sizeof(*info)) + // According to documentation, this function always succeeds. + // The function doesn't even check the validity of the + // osVersionInfoSize member. Disassembling ntdll.dll indicates + // that the documentation is indeed correct about that. + _ = rtlGetVersion(info) + return info +} + +// RtlGetNtVersionNumbers returns the version of the underlying operating system, +// ignoring manifest semantics and the application compatibility layer. +func RtlGetNtVersionNumbers() (majorVersion, minorVersion, buildNumber uint32) { + rtlGetNtVersionNumbers(&majorVersion, &minorVersion, &buildNumber) + buildNumber &= 0xffff + return +} + +// GetProcessPreferredUILanguages retrieves the process preferred UI languages. +func GetProcessPreferredUILanguages(flags uint32) ([]string, error) { + return getUILanguages(flags, getProcessPreferredUILanguages) +} + +// GetThreadPreferredUILanguages retrieves the thread preferred UI languages for the current thread. +func GetThreadPreferredUILanguages(flags uint32) ([]string, error) { + return getUILanguages(flags, getThreadPreferredUILanguages) +} + +// GetUserPreferredUILanguages retrieves information about the user preferred UI languages. +func GetUserPreferredUILanguages(flags uint32) ([]string, error) { + return getUILanguages(flags, getUserPreferredUILanguages) +} + +// GetSystemPreferredUILanguages retrieves the system preferred UI languages. +func GetSystemPreferredUILanguages(flags uint32) ([]string, error) { + return getUILanguages(flags, getSystemPreferredUILanguages) +} + +func getUILanguages(flags uint32, f func(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) error) ([]string, error) { + size := uint32(128) + for { + var numLanguages uint32 + buf := make([]uint16, size) + err := f(flags, &numLanguages, &buf[0], &size) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return nil, err + } + buf = buf[:size] + if numLanguages == 0 || len(buf) == 0 { // GetProcessPreferredUILanguages may return numLanguages==0 with "\0\0" + return []string{}, nil + } + if buf[len(buf)-1] == 0 { + buf = buf[:len(buf)-1] // remove terminating null + } + languages := make([]string, 0, numLanguages) + from := 0 + for i, c := range buf { + if c == 0 { + languages = append(languages, string(utf16.Decode(buf[from:i]))) + from = i + 1 + } + } + return languages, nil + } +} + +func SetConsoleCursorPosition(console Handle, position Coord) error { + return setConsoleCursorPosition(console, *((*uint32)(unsafe.Pointer(&position)))) +} + +func GetStartupInfo(startupInfo *StartupInfo) error { + getStartupInfo(startupInfo) + return nil +} + +func (s NTStatus) Errno() syscall.Errno { + return rtlNtStatusToDosErrorNoTeb(s) +} + +func langID(pri, sub uint16) uint32 { return uint32(sub)<<10 | uint32(pri) } + +func (s NTStatus) Error() string { + b := make([]uint16, 300) + n, err := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_FROM_HMODULE|FORMAT_MESSAGE_ARGUMENT_ARRAY, modntdll.Handle(), uint32(s), langID(LANG_ENGLISH, SUBLANG_ENGLISH_US), b, nil) + if err != nil { + return fmt.Sprintf("NTSTATUS 0x%08x", uint32(s)) + } + // trim terminating \r and \n + for ; n > 0 && (b[n-1] == '\n' || b[n-1] == '\r'); n-- { + } + return string(utf16.Decode(b[:n])) +} + +// NewNTUnicodeString returns a new NTUnicodeString structure for use with native +// NT APIs that work over the NTUnicodeString type. Note that most Windows APIs +// do not use NTUnicodeString, and instead UTF16PtrFromString should be used for +// the more common *uint16 string type. +func NewNTUnicodeString(s string) (*NTUnicodeString, error) { + s16, err := UTF16FromString(s) + if err != nil { + return nil, err + } + n := uint16(len(s16) * 2) + return &NTUnicodeString{ + Length: n - 2, // subtract 2 bytes for the NULL terminator + MaximumLength: n, + Buffer: &s16[0], + }, nil +} + +// Slice returns a uint16 slice that aliases the data in the NTUnicodeString. +func (s *NTUnicodeString) Slice() []uint16 { + // Note: this rounds the length down, if it happens + // to (incorrectly) be odd. Probably safer than rounding up. + return unsafe.Slice(s.Buffer, s.MaximumLength/2)[:s.Length/2] +} + +func (s *NTUnicodeString) String() string { + return UTF16ToString(s.Slice()) +} + +// NewNTString returns a new NTString structure for use with native +// NT APIs that work over the NTString type. Note that most Windows APIs +// do not use NTString, and instead UTF16PtrFromString should be used for +// the more common *uint16 string type. +func NewNTString(s string) (*NTString, error) { + var nts NTString + s8, err := BytePtrFromString(s) + if err != nil { + return nil, err + } + RtlInitString(&nts, s8) + return &nts, nil +} + +// Slice returns a byte slice that aliases the data in the NTString. +func (s *NTString) Slice() []byte { + slice := unsafe.Slice(s.Buffer, s.MaximumLength) + return slice[:s.Length] +} + +func (s *NTString) String() string { + return ByteSliceToString(s.Slice()) +} + +// FindResource resolves a resource of the given name and resource type. +func FindResource(module Handle, name, resType ResourceIDOrString) (Handle, error) { + var namePtr, resTypePtr uintptr + var name16, resType16 *uint16 + var err error + resolvePtr := func(i interface{}, keep **uint16) (uintptr, error) { + switch v := i.(type) { + case string: + *keep, err = UTF16PtrFromString(v) + if err != nil { + return 0, err + } + return uintptr(unsafe.Pointer(*keep)), nil + case ResourceID: + return uintptr(v), nil + } + return 0, errorspkg.New("parameter must be a ResourceID or a string") + } + namePtr, err = resolvePtr(name, &name16) + if err != nil { + return 0, err + } + resTypePtr, err = resolvePtr(resType, &resType16) + if err != nil { + return 0, err + } + resInfo, err := findResource(module, namePtr, resTypePtr) + runtime.KeepAlive(name16) + runtime.KeepAlive(resType16) + return resInfo, err +} + +func LoadResourceData(module, resInfo Handle) (data []byte, err error) { + size, err := SizeofResource(module, resInfo) + if err != nil { + return + } + resData, err := LoadResource(module, resInfo) + if err != nil { + return + } + ptr, err := LockResource(resData) + if err != nil { + return + } + data = unsafe.Slice((*byte)(unsafe.Pointer(ptr)), size) + return +} + +// PSAPI_WORKING_SET_EX_BLOCK contains extended working set information for a page. +type PSAPI_WORKING_SET_EX_BLOCK uint64 + +// Valid returns the validity of this page. +// If this bit is 1, the subsequent members are valid; otherwise they should be ignored. +func (b PSAPI_WORKING_SET_EX_BLOCK) Valid() bool { + return (b & 1) == 1 +} + +// ShareCount is the number of processes that share this page. The maximum value of this member is 7. +func (b PSAPI_WORKING_SET_EX_BLOCK) ShareCount() uint64 { + return b.intField(1, 3) +} + +// Win32Protection is the memory protection attributes of the page. For a list of values, see +// https://docs.microsoft.com/en-us/windows/win32/memory/memory-protection-constants +func (b PSAPI_WORKING_SET_EX_BLOCK) Win32Protection() uint64 { + return b.intField(4, 11) +} + +// Shared returns the shared status of this page. +// If this bit is 1, the page can be shared. +func (b PSAPI_WORKING_SET_EX_BLOCK) Shared() bool { + return (b & (1 << 15)) == 1 +} + +// Node is the NUMA node. The maximum value of this member is 63. +func (b PSAPI_WORKING_SET_EX_BLOCK) Node() uint64 { + return b.intField(16, 6) +} + +// Locked returns the locked status of this page. +// If this bit is 1, the virtual page is locked in physical memory. +func (b PSAPI_WORKING_SET_EX_BLOCK) Locked() bool { + return (b & (1 << 22)) == 1 +} + +// LargePage returns the large page status of this page. +// If this bit is 1, the page is a large page. +func (b PSAPI_WORKING_SET_EX_BLOCK) LargePage() bool { + return (b & (1 << 23)) == 1 +} + +// Bad returns the bad status of this page. +// If this bit is 1, the page is has been reported as bad. +func (b PSAPI_WORKING_SET_EX_BLOCK) Bad() bool { + return (b & (1 << 31)) == 1 +} + +// intField extracts an integer field in the PSAPI_WORKING_SET_EX_BLOCK union. +func (b PSAPI_WORKING_SET_EX_BLOCK) intField(start, length int) uint64 { + var mask PSAPI_WORKING_SET_EX_BLOCK + for pos := start; pos < start+length; pos++ { + mask |= (1 << pos) + } + + masked := b & mask + return uint64(masked >> start) +} + +// PSAPI_WORKING_SET_EX_INFORMATION contains extended working set information for a process. +type PSAPI_WORKING_SET_EX_INFORMATION struct { + // The virtual address. + VirtualAddress Pointer + // A PSAPI_WORKING_SET_EX_BLOCK union that indicates the attributes of the page at VirtualAddress. + VirtualAttributes PSAPI_WORKING_SET_EX_BLOCK +} + +// CreatePseudoConsole creates a windows pseudo console. +func CreatePseudoConsole(size Coord, in Handle, out Handle, flags uint32, pconsole *Handle) error { + // We need this wrapper to manually cast Coord to uint32. The autogenerated wrappers only + // accept arguments that can be casted to uintptr, and Coord can't. + return createPseudoConsole(*((*uint32)(unsafe.Pointer(&size))), in, out, flags, pconsole) +} + +// ResizePseudoConsole resizes the internal buffers of the pseudo console to the width and height specified in `size`. +func ResizePseudoConsole(pconsole Handle, size Coord) error { + // We need this wrapper to manually cast Coord to uint32. The autogenerated wrappers only + // accept arguments that can be casted to uintptr, and Coord can't. + return resizePseudoConsole(pconsole, *((*uint32)(unsafe.Pointer(&size)))) +} + +// DCB constants. See https://learn.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-dcb. +const ( + CBR_110 = 110 + CBR_300 = 300 + CBR_600 = 600 + CBR_1200 = 1200 + CBR_2400 = 2400 + CBR_4800 = 4800 + CBR_9600 = 9600 + CBR_14400 = 14400 + CBR_19200 = 19200 + CBR_38400 = 38400 + CBR_57600 = 57600 + CBR_115200 = 115200 + CBR_128000 = 128000 + CBR_256000 = 256000 + + DTR_CONTROL_DISABLE = 0x00000000 + DTR_CONTROL_ENABLE = 0x00000010 + DTR_CONTROL_HANDSHAKE = 0x00000020 + + RTS_CONTROL_DISABLE = 0x00000000 + RTS_CONTROL_ENABLE = 0x00001000 + RTS_CONTROL_HANDSHAKE = 0x00002000 + RTS_CONTROL_TOGGLE = 0x00003000 + + NOPARITY = 0 + ODDPARITY = 1 + EVENPARITY = 2 + MARKPARITY = 3 + SPACEPARITY = 4 + + ONESTOPBIT = 0 + ONE5STOPBITS = 1 + TWOSTOPBITS = 2 +) + +// EscapeCommFunction constants. See https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-escapecommfunction. +const ( + SETXOFF = 1 + SETXON = 2 + SETRTS = 3 + CLRRTS = 4 + SETDTR = 5 + CLRDTR = 6 + SETBREAK = 8 + CLRBREAK = 9 +) + +// PurgeComm constants. See https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-purgecomm. +const ( + PURGE_TXABORT = 0x0001 + PURGE_RXABORT = 0x0002 + PURGE_TXCLEAR = 0x0004 + PURGE_RXCLEAR = 0x0008 +) + +// SetCommMask constants. See https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setcommmask. +const ( + EV_RXCHAR = 0x0001 + EV_RXFLAG = 0x0002 + EV_TXEMPTY = 0x0004 + EV_CTS = 0x0008 + EV_DSR = 0x0010 + EV_RLSD = 0x0020 + EV_BREAK = 0x0040 + EV_ERR = 0x0080 + EV_RING = 0x0100 +) diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go new file mode 100644 index 0000000..958bcf4 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -0,0 +1,3842 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +import ( + "net" + "syscall" + "unsafe" +) + +// NTStatus corresponds with NTSTATUS, error values returned by ntdll.dll and +// other native functions. +type NTStatus uint32 + +const ( + // Invented values to support what package os expects. + O_RDONLY = 0x00000 + O_WRONLY = 0x00001 + O_RDWR = 0x00002 + O_CREAT = 0x00040 + O_EXCL = 0x00080 + O_NOCTTY = 0x00100 + O_TRUNC = 0x00200 + O_NONBLOCK = 0x00800 + O_APPEND = 0x00400 + O_SYNC = 0x01000 + O_ASYNC = 0x02000 + O_CLOEXEC = 0x80000 +) + +const ( + // More invented values for signals + SIGHUP = Signal(0x1) + SIGINT = Signal(0x2) + SIGQUIT = Signal(0x3) + SIGILL = Signal(0x4) + SIGTRAP = Signal(0x5) + SIGABRT = Signal(0x6) + SIGBUS = Signal(0x7) + SIGFPE = Signal(0x8) + SIGKILL = Signal(0x9) + SIGSEGV = Signal(0xb) + SIGPIPE = Signal(0xd) + SIGALRM = Signal(0xe) + SIGTERM = Signal(0xf) +) + +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", +} + +const ( + FILE_READ_DATA = 0x00000001 + FILE_READ_ATTRIBUTES = 0x00000080 + FILE_READ_EA = 0x00000008 + FILE_WRITE_DATA = 0x00000002 + FILE_WRITE_ATTRIBUTES = 0x00000100 + FILE_WRITE_EA = 0x00000010 + FILE_APPEND_DATA = 0x00000004 + FILE_EXECUTE = 0x00000020 + + FILE_GENERIC_READ = STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE + FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE + FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE + + FILE_LIST_DIRECTORY = 0x00000001 + FILE_TRAVERSE = 0x00000020 + + FILE_SHARE_READ = 0x00000001 + FILE_SHARE_WRITE = 0x00000002 + FILE_SHARE_DELETE = 0x00000004 + + FILE_ATTRIBUTE_READONLY = 0x00000001 + FILE_ATTRIBUTE_HIDDEN = 0x00000002 + FILE_ATTRIBUTE_SYSTEM = 0x00000004 + FILE_ATTRIBUTE_DIRECTORY = 0x00000010 + FILE_ATTRIBUTE_ARCHIVE = 0x00000020 + FILE_ATTRIBUTE_DEVICE = 0x00000040 + FILE_ATTRIBUTE_NORMAL = 0x00000080 + FILE_ATTRIBUTE_TEMPORARY = 0x00000100 + FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200 + FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400 + FILE_ATTRIBUTE_COMPRESSED = 0x00000800 + FILE_ATTRIBUTE_OFFLINE = 0x00001000 + FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000 + FILE_ATTRIBUTE_ENCRYPTED = 0x00004000 + FILE_ATTRIBUTE_INTEGRITY_STREAM = 0x00008000 + FILE_ATTRIBUTE_VIRTUAL = 0x00010000 + FILE_ATTRIBUTE_NO_SCRUB_DATA = 0x00020000 + FILE_ATTRIBUTE_RECALL_ON_OPEN = 0x00040000 + FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS = 0x00400000 + + INVALID_FILE_ATTRIBUTES = 0xffffffff + + CREATE_NEW = 1 + CREATE_ALWAYS = 2 + OPEN_EXISTING = 3 + OPEN_ALWAYS = 4 + TRUNCATE_EXISTING = 5 + + FILE_FLAG_OPEN_REQUIRING_OPLOCK = 0x00040000 + FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000 + FILE_FLAG_OPEN_NO_RECALL = 0x00100000 + FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000 + FILE_FLAG_SESSION_AWARE = 0x00800000 + FILE_FLAG_POSIX_SEMANTICS = 0x01000000 + FILE_FLAG_BACKUP_SEMANTICS = 0x02000000 + FILE_FLAG_DELETE_ON_CLOSE = 0x04000000 + FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000 + FILE_FLAG_RANDOM_ACCESS = 0x10000000 + FILE_FLAG_NO_BUFFERING = 0x20000000 + FILE_FLAG_OVERLAPPED = 0x40000000 + FILE_FLAG_WRITE_THROUGH = 0x80000000 + + HANDLE_FLAG_INHERIT = 0x00000001 + STARTF_USESTDHANDLES = 0x00000100 + STARTF_USESHOWWINDOW = 0x00000001 + DUPLICATE_CLOSE_SOURCE = 0x00000001 + DUPLICATE_SAME_ACCESS = 0x00000002 + + STD_INPUT_HANDLE = -10 & (1<<32 - 1) + STD_OUTPUT_HANDLE = -11 & (1<<32 - 1) + STD_ERROR_HANDLE = -12 & (1<<32 - 1) + + FILE_BEGIN = 0 + FILE_CURRENT = 1 + FILE_END = 2 + + LANG_ENGLISH = 0x09 + SUBLANG_ENGLISH_US = 0x01 + + FORMAT_MESSAGE_ALLOCATE_BUFFER = 256 + FORMAT_MESSAGE_IGNORE_INSERTS = 512 + FORMAT_MESSAGE_FROM_STRING = 1024 + FORMAT_MESSAGE_FROM_HMODULE = 2048 + FORMAT_MESSAGE_FROM_SYSTEM = 4096 + FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192 + FORMAT_MESSAGE_MAX_WIDTH_MASK = 255 + + MAX_PATH = 260 + MAX_LONG_PATH = 32768 + + MAX_MODULE_NAME32 = 255 + + MAX_COMPUTERNAME_LENGTH = 15 + + MAX_DHCPV6_DUID_LENGTH = 130 + + MAX_DNS_SUFFIX_STRING_LENGTH = 256 + + TIME_ZONE_ID_UNKNOWN = 0 + TIME_ZONE_ID_STANDARD = 1 + + TIME_ZONE_ID_DAYLIGHT = 2 + IGNORE = 0 + INFINITE = 0xffffffff + + WAIT_ABANDONED = 0x00000080 + WAIT_OBJECT_0 = 0x00000000 + WAIT_FAILED = 0xFFFFFFFF + + // Access rights for process. + PROCESS_ALL_ACCESS = 0xFFFF + PROCESS_CREATE_PROCESS = 0x0080 + PROCESS_CREATE_THREAD = 0x0002 + PROCESS_DUP_HANDLE = 0x0040 + PROCESS_QUERY_INFORMATION = 0x0400 + PROCESS_QUERY_LIMITED_INFORMATION = 0x1000 + PROCESS_SET_INFORMATION = 0x0200 + PROCESS_SET_QUOTA = 0x0100 + PROCESS_SUSPEND_RESUME = 0x0800 + PROCESS_TERMINATE = 0x0001 + PROCESS_VM_OPERATION = 0x0008 + PROCESS_VM_READ = 0x0010 + PROCESS_VM_WRITE = 0x0020 + + // Access rights for thread. + THREAD_DIRECT_IMPERSONATION = 0x0200 + THREAD_GET_CONTEXT = 0x0008 + THREAD_IMPERSONATE = 0x0100 + THREAD_QUERY_INFORMATION = 0x0040 + THREAD_QUERY_LIMITED_INFORMATION = 0x0800 + THREAD_SET_CONTEXT = 0x0010 + THREAD_SET_INFORMATION = 0x0020 + THREAD_SET_LIMITED_INFORMATION = 0x0400 + THREAD_SET_THREAD_TOKEN = 0x0080 + THREAD_SUSPEND_RESUME = 0x0002 + THREAD_TERMINATE = 0x0001 + + FILE_MAP_COPY = 0x01 + FILE_MAP_WRITE = 0x02 + FILE_MAP_READ = 0x04 + FILE_MAP_EXECUTE = 0x20 + + CTRL_C_EVENT = 0 + CTRL_BREAK_EVENT = 1 + CTRL_CLOSE_EVENT = 2 + CTRL_LOGOFF_EVENT = 5 + CTRL_SHUTDOWN_EVENT = 6 + + // Windows reserves errors >= 1<<29 for application use. + APPLICATION_ERROR = 1 << 29 +) + +const ( + // Process creation flags. + CREATE_BREAKAWAY_FROM_JOB = 0x01000000 + CREATE_DEFAULT_ERROR_MODE = 0x04000000 + CREATE_NEW_CONSOLE = 0x00000010 + CREATE_NEW_PROCESS_GROUP = 0x00000200 + CREATE_NO_WINDOW = 0x08000000 + CREATE_PROTECTED_PROCESS = 0x00040000 + CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000 + CREATE_SEPARATE_WOW_VDM = 0x00000800 + CREATE_SHARED_WOW_VDM = 0x00001000 + CREATE_SUSPENDED = 0x00000004 + CREATE_UNICODE_ENVIRONMENT = 0x00000400 + DEBUG_ONLY_THIS_PROCESS = 0x00000002 + DEBUG_PROCESS = 0x00000001 + DETACHED_PROCESS = 0x00000008 + EXTENDED_STARTUPINFO_PRESENT = 0x00080000 + INHERIT_PARENT_AFFINITY = 0x00010000 +) + +const ( + // attributes for ProcThreadAttributeList + PROC_THREAD_ATTRIBUTE_PARENT_PROCESS = 0x00020000 + PROC_THREAD_ATTRIBUTE_HANDLE_LIST = 0x00020002 + PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY = 0x00030003 + PROC_THREAD_ATTRIBUTE_PREFERRED_NODE = 0x00020004 + PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR = 0x00030005 + PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY = 0x00020007 + PROC_THREAD_ATTRIBUTE_UMS_THREAD = 0x00030006 + PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL = 0x0002000b + PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE = 0x00020016 +) + +const ( + // flags for CreateToolhelp32Snapshot + TH32CS_SNAPHEAPLIST = 0x01 + TH32CS_SNAPPROCESS = 0x02 + TH32CS_SNAPTHREAD = 0x04 + TH32CS_SNAPMODULE = 0x08 + TH32CS_SNAPMODULE32 = 0x10 + TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD + TH32CS_INHERIT = 0x80000000 +) + +const ( + // flags for EnumProcessModulesEx + LIST_MODULES_32BIT = 0x01 + LIST_MODULES_64BIT = 0x02 + LIST_MODULES_ALL = 0x03 + LIST_MODULES_DEFAULT = 0x00 +) + +const ( + // filters for ReadDirectoryChangesW and FindFirstChangeNotificationW + FILE_NOTIFY_CHANGE_FILE_NAME = 0x001 + FILE_NOTIFY_CHANGE_DIR_NAME = 0x002 + FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x004 + FILE_NOTIFY_CHANGE_SIZE = 0x008 + FILE_NOTIFY_CHANGE_LAST_WRITE = 0x010 + FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x020 + FILE_NOTIFY_CHANGE_CREATION = 0x040 + FILE_NOTIFY_CHANGE_SECURITY = 0x100 +) + +const ( + // do not reorder + FILE_ACTION_ADDED = iota + 1 + FILE_ACTION_REMOVED + FILE_ACTION_MODIFIED + FILE_ACTION_RENAMED_OLD_NAME + FILE_ACTION_RENAMED_NEW_NAME +) + +const ( + // wincrypt.h + /* certenrolld_begin -- PROV_RSA_*/ + PROV_RSA_FULL = 1 + PROV_RSA_SIG = 2 + PROV_DSS = 3 + PROV_FORTEZZA = 4 + PROV_MS_EXCHANGE = 5 + PROV_SSL = 6 + PROV_RSA_SCHANNEL = 12 + PROV_DSS_DH = 13 + PROV_EC_ECDSA_SIG = 14 + PROV_EC_ECNRA_SIG = 15 + PROV_EC_ECDSA_FULL = 16 + PROV_EC_ECNRA_FULL = 17 + PROV_DH_SCHANNEL = 18 + PROV_SPYRUS_LYNKS = 20 + PROV_RNG = 21 + PROV_INTEL_SEC = 22 + PROV_REPLACE_OWF = 23 + PROV_RSA_AES = 24 + + /* dwFlags definitions for CryptAcquireContext */ + CRYPT_VERIFYCONTEXT = 0xF0000000 + CRYPT_NEWKEYSET = 0x00000008 + CRYPT_DELETEKEYSET = 0x00000010 + CRYPT_MACHINE_KEYSET = 0x00000020 + CRYPT_SILENT = 0x00000040 + CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080 + + /* Flags for PFXImportCertStore */ + CRYPT_EXPORTABLE = 0x00000001 + CRYPT_USER_PROTECTED = 0x00000002 + CRYPT_USER_KEYSET = 0x00001000 + PKCS12_PREFER_CNG_KSP = 0x00000100 + PKCS12_ALWAYS_CNG_KSP = 0x00000200 + PKCS12_ALLOW_OVERWRITE_KEY = 0x00004000 + PKCS12_NO_PERSIST_KEY = 0x00008000 + PKCS12_INCLUDE_EXTENDED_PROPERTIES = 0x00000010 + + /* Flags for CryptAcquireCertificatePrivateKey */ + CRYPT_ACQUIRE_CACHE_FLAG = 0x00000001 + CRYPT_ACQUIRE_USE_PROV_INFO_FLAG = 0x00000002 + CRYPT_ACQUIRE_COMPARE_KEY_FLAG = 0x00000004 + CRYPT_ACQUIRE_NO_HEALING = 0x00000008 + CRYPT_ACQUIRE_SILENT_FLAG = 0x00000040 + CRYPT_ACQUIRE_WINDOW_HANDLE_FLAG = 0x00000080 + CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK = 0x00070000 + CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG = 0x00010000 + CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG = 0x00020000 + CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG = 0x00040000 + + /* pdwKeySpec for CryptAcquireCertificatePrivateKey */ + AT_KEYEXCHANGE = 1 + AT_SIGNATURE = 2 + CERT_NCRYPT_KEY_SPEC = 0xFFFFFFFF + + /* Default usage match type is AND with value zero */ + USAGE_MATCH_TYPE_AND = 0 + USAGE_MATCH_TYPE_OR = 1 + + /* msgAndCertEncodingType values for CertOpenStore function */ + X509_ASN_ENCODING = 0x00000001 + PKCS_7_ASN_ENCODING = 0x00010000 + + /* storeProvider values for CertOpenStore function */ + CERT_STORE_PROV_MSG = 1 + CERT_STORE_PROV_MEMORY = 2 + CERT_STORE_PROV_FILE = 3 + CERT_STORE_PROV_REG = 4 + CERT_STORE_PROV_PKCS7 = 5 + CERT_STORE_PROV_SERIALIZED = 6 + CERT_STORE_PROV_FILENAME_A = 7 + CERT_STORE_PROV_FILENAME_W = 8 + CERT_STORE_PROV_FILENAME = CERT_STORE_PROV_FILENAME_W + CERT_STORE_PROV_SYSTEM_A = 9 + CERT_STORE_PROV_SYSTEM_W = 10 + CERT_STORE_PROV_SYSTEM = CERT_STORE_PROV_SYSTEM_W + CERT_STORE_PROV_COLLECTION = 11 + CERT_STORE_PROV_SYSTEM_REGISTRY_A = 12 + CERT_STORE_PROV_SYSTEM_REGISTRY_W = 13 + CERT_STORE_PROV_SYSTEM_REGISTRY = CERT_STORE_PROV_SYSTEM_REGISTRY_W + CERT_STORE_PROV_PHYSICAL_W = 14 + CERT_STORE_PROV_PHYSICAL = CERT_STORE_PROV_PHYSICAL_W + CERT_STORE_PROV_SMART_CARD_W = 15 + CERT_STORE_PROV_SMART_CARD = CERT_STORE_PROV_SMART_CARD_W + CERT_STORE_PROV_LDAP_W = 16 + CERT_STORE_PROV_LDAP = CERT_STORE_PROV_LDAP_W + CERT_STORE_PROV_PKCS12 = 17 + + /* store characteristics (low WORD of flag) for CertOpenStore function */ + CERT_STORE_NO_CRYPT_RELEASE_FLAG = 0x00000001 + CERT_STORE_SET_LOCALIZED_NAME_FLAG = 0x00000002 + CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004 + CERT_STORE_DELETE_FLAG = 0x00000010 + CERT_STORE_UNSAFE_PHYSICAL_FLAG = 0x00000020 + CERT_STORE_SHARE_STORE_FLAG = 0x00000040 + CERT_STORE_SHARE_CONTEXT_FLAG = 0x00000080 + CERT_STORE_MANIFOLD_FLAG = 0x00000100 + CERT_STORE_ENUM_ARCHIVED_FLAG = 0x00000200 + CERT_STORE_UPDATE_KEYID_FLAG = 0x00000400 + CERT_STORE_BACKUP_RESTORE_FLAG = 0x00000800 + CERT_STORE_MAXIMUM_ALLOWED_FLAG = 0x00001000 + CERT_STORE_CREATE_NEW_FLAG = 0x00002000 + CERT_STORE_OPEN_EXISTING_FLAG = 0x00004000 + CERT_STORE_READONLY_FLAG = 0x00008000 + + /* store locations (high WORD of flag) for CertOpenStore function */ + CERT_SYSTEM_STORE_CURRENT_USER = 0x00010000 + CERT_SYSTEM_STORE_LOCAL_MACHINE = 0x00020000 + CERT_SYSTEM_STORE_CURRENT_SERVICE = 0x00040000 + CERT_SYSTEM_STORE_SERVICES = 0x00050000 + CERT_SYSTEM_STORE_USERS = 0x00060000 + CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY = 0x00070000 + CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = 0x00080000 + CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = 0x00090000 + CERT_SYSTEM_STORE_UNPROTECTED_FLAG = 0x40000000 + CERT_SYSTEM_STORE_RELOCATE_FLAG = 0x80000000 + + /* Miscellaneous high-WORD flags for CertOpenStore function */ + CERT_REGISTRY_STORE_REMOTE_FLAG = 0x00010000 + CERT_REGISTRY_STORE_SERIALIZED_FLAG = 0x00020000 + CERT_REGISTRY_STORE_ROAMING_FLAG = 0x00040000 + CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG = 0x00080000 + CERT_REGISTRY_STORE_LM_GPT_FLAG = 0x01000000 + CERT_REGISTRY_STORE_CLIENT_GPT_FLAG = 0x80000000 + CERT_FILE_STORE_COMMIT_ENABLE_FLAG = 0x00010000 + CERT_LDAP_STORE_SIGN_FLAG = 0x00010000 + CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG = 0x00020000 + CERT_LDAP_STORE_OPENED_FLAG = 0x00040000 + CERT_LDAP_STORE_UNBIND_FLAG = 0x00080000 + + /* addDisposition values for CertAddCertificateContextToStore function */ + CERT_STORE_ADD_NEW = 1 + CERT_STORE_ADD_USE_EXISTING = 2 + CERT_STORE_ADD_REPLACE_EXISTING = 3 + CERT_STORE_ADD_ALWAYS = 4 + CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES = 5 + CERT_STORE_ADD_NEWER = 6 + CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES = 7 + + /* ErrorStatus values for CertTrustStatus struct */ + CERT_TRUST_NO_ERROR = 0x00000000 + CERT_TRUST_IS_NOT_TIME_VALID = 0x00000001 + CERT_TRUST_IS_REVOKED = 0x00000004 + CERT_TRUST_IS_NOT_SIGNATURE_VALID = 0x00000008 + CERT_TRUST_IS_NOT_VALID_FOR_USAGE = 0x00000010 + CERT_TRUST_IS_UNTRUSTED_ROOT = 0x00000020 + CERT_TRUST_REVOCATION_STATUS_UNKNOWN = 0x00000040 + CERT_TRUST_IS_CYCLIC = 0x00000080 + CERT_TRUST_INVALID_EXTENSION = 0x00000100 + CERT_TRUST_INVALID_POLICY_CONSTRAINTS = 0x00000200 + CERT_TRUST_INVALID_BASIC_CONSTRAINTS = 0x00000400 + CERT_TRUST_INVALID_NAME_CONSTRAINTS = 0x00000800 + CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000 + CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT = 0x00002000 + CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000 + CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT = 0x00008000 + CERT_TRUST_IS_PARTIAL_CHAIN = 0x00010000 + CERT_TRUST_CTL_IS_NOT_TIME_VALID = 0x00020000 + CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID = 0x00040000 + CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE = 0x00080000 + CERT_TRUST_HAS_WEAK_SIGNATURE = 0x00100000 + CERT_TRUST_IS_OFFLINE_REVOCATION = 0x01000000 + CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY = 0x02000000 + CERT_TRUST_IS_EXPLICIT_DISTRUST = 0x04000000 + CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT = 0x08000000 + + /* InfoStatus values for CertTrustStatus struct */ + CERT_TRUST_HAS_EXACT_MATCH_ISSUER = 0x00000001 + CERT_TRUST_HAS_KEY_MATCH_ISSUER = 0x00000002 + CERT_TRUST_HAS_NAME_MATCH_ISSUER = 0x00000004 + CERT_TRUST_IS_SELF_SIGNED = 0x00000008 + CERT_TRUST_HAS_PREFERRED_ISSUER = 0x00000100 + CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY = 0x00000400 + CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS = 0x00000400 + CERT_TRUST_IS_PEER_TRUSTED = 0x00000800 + CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED = 0x00001000 + CERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE = 0x00002000 + CERT_TRUST_IS_CA_TRUSTED = 0x00004000 + CERT_TRUST_IS_COMPLEX_CHAIN = 0x00010000 + + /* Certificate Information Flags */ + CERT_INFO_VERSION_FLAG = 1 + CERT_INFO_SERIAL_NUMBER_FLAG = 2 + CERT_INFO_SIGNATURE_ALGORITHM_FLAG = 3 + CERT_INFO_ISSUER_FLAG = 4 + CERT_INFO_NOT_BEFORE_FLAG = 5 + CERT_INFO_NOT_AFTER_FLAG = 6 + CERT_INFO_SUBJECT_FLAG = 7 + CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG = 8 + CERT_INFO_ISSUER_UNIQUE_ID_FLAG = 9 + CERT_INFO_SUBJECT_UNIQUE_ID_FLAG = 10 + CERT_INFO_EXTENSION_FLAG = 11 + + /* dwFindType for CertFindCertificateInStore */ + CERT_COMPARE_MASK = 0xFFFF + CERT_COMPARE_SHIFT = 16 + CERT_COMPARE_ANY = 0 + CERT_COMPARE_SHA1_HASH = 1 + CERT_COMPARE_NAME = 2 + CERT_COMPARE_ATTR = 3 + CERT_COMPARE_MD5_HASH = 4 + CERT_COMPARE_PROPERTY = 5 + CERT_COMPARE_PUBLIC_KEY = 6 + CERT_COMPARE_HASH = CERT_COMPARE_SHA1_HASH + CERT_COMPARE_NAME_STR_A = 7 + CERT_COMPARE_NAME_STR_W = 8 + CERT_COMPARE_KEY_SPEC = 9 + CERT_COMPARE_ENHKEY_USAGE = 10 + CERT_COMPARE_CTL_USAGE = CERT_COMPARE_ENHKEY_USAGE + CERT_COMPARE_SUBJECT_CERT = 11 + CERT_COMPARE_ISSUER_OF = 12 + CERT_COMPARE_EXISTING = 13 + CERT_COMPARE_SIGNATURE_HASH = 14 + CERT_COMPARE_KEY_IDENTIFIER = 15 + CERT_COMPARE_CERT_ID = 16 + CERT_COMPARE_CROSS_CERT_DIST_POINTS = 17 + CERT_COMPARE_PUBKEY_MD5_HASH = 18 + CERT_COMPARE_SUBJECT_INFO_ACCESS = 19 + CERT_COMPARE_HASH_STR = 20 + CERT_COMPARE_HAS_PRIVATE_KEY = 21 + CERT_FIND_ANY = (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT) + CERT_FIND_SHA1_HASH = (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT) + CERT_FIND_MD5_HASH = (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT) + CERT_FIND_SIGNATURE_HASH = (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT) + CERT_FIND_KEY_IDENTIFIER = (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT) + CERT_FIND_HASH = CERT_FIND_SHA1_HASH + CERT_FIND_PROPERTY = (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT) + CERT_FIND_PUBLIC_KEY = (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT) + CERT_FIND_SUBJECT_NAME = (CERT_COMPARE_NAME<> 32 & 0xffffffff) + return ft +} + +type Win32finddata struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + FileSizeHigh uint32 + FileSizeLow uint32 + Reserved0 uint32 + Reserved1 uint32 + FileName [MAX_PATH - 1]uint16 + AlternateFileName [13]uint16 +} + +// This is the actual system call structure. +// Win32finddata is what we committed to in Go 1. +type win32finddata1 struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + FileSizeHigh uint32 + FileSizeLow uint32 + Reserved0 uint32 + Reserved1 uint32 + FileName [MAX_PATH]uint16 + AlternateFileName [14]uint16 + + // The Microsoft documentation for this struct¹ describes three additional + // fields: dwFileType, dwCreatorType, and wFinderFlags. However, those fields + // are empirically only present in the macOS port of the Win32 API,² and thus + // not needed for binaries built for Windows. + // + // ¹ https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-win32_find_dataw describe + // ² https://golang.org/issue/42637#issuecomment-760715755. +} + +func copyFindData(dst *Win32finddata, src *win32finddata1) { + dst.FileAttributes = src.FileAttributes + dst.CreationTime = src.CreationTime + dst.LastAccessTime = src.LastAccessTime + dst.LastWriteTime = src.LastWriteTime + dst.FileSizeHigh = src.FileSizeHigh + dst.FileSizeLow = src.FileSizeLow + dst.Reserved0 = src.Reserved0 + dst.Reserved1 = src.Reserved1 + + // The src is 1 element bigger than dst, but it must be NUL. + copy(dst.FileName[:], src.FileName[:]) + copy(dst.AlternateFileName[:], src.AlternateFileName[:]) +} + +type ByHandleFileInformation struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + VolumeSerialNumber uint32 + FileSizeHigh uint32 + FileSizeLow uint32 + NumberOfLinks uint32 + FileIndexHigh uint32 + FileIndexLow uint32 +} + +const ( + GetFileExInfoStandard = 0 + GetFileExMaxInfoLevel = 1 +) + +type Win32FileAttributeData struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + FileSizeHigh uint32 + FileSizeLow uint32 +} + +// ShowWindow constants +const ( + // winuser.h + SW_HIDE = 0 + SW_NORMAL = 1 + SW_SHOWNORMAL = 1 + SW_SHOWMINIMIZED = 2 + SW_SHOWMAXIMIZED = 3 + SW_MAXIMIZE = 3 + SW_SHOWNOACTIVATE = 4 + SW_SHOW = 5 + SW_MINIMIZE = 6 + SW_SHOWMINNOACTIVE = 7 + SW_SHOWNA = 8 + SW_RESTORE = 9 + SW_SHOWDEFAULT = 10 + SW_FORCEMINIMIZE = 11 +) + +type StartupInfo struct { + Cb uint32 + _ *uint16 + Desktop *uint16 + Title *uint16 + X uint32 + Y uint32 + XSize uint32 + YSize uint32 + XCountChars uint32 + YCountChars uint32 + FillAttribute uint32 + Flags uint32 + ShowWindow uint16 + _ uint16 + _ *byte + StdInput Handle + StdOutput Handle + StdErr Handle +} + +type StartupInfoEx struct { + StartupInfo + ProcThreadAttributeList *ProcThreadAttributeList +} + +// ProcThreadAttributeList is a placeholder type to represent a PROC_THREAD_ATTRIBUTE_LIST. +// +// To create a *ProcThreadAttributeList, use NewProcThreadAttributeList, update +// it with ProcThreadAttributeListContainer.Update, free its memory using +// ProcThreadAttributeListContainer.Delete, and access the list itself using +// ProcThreadAttributeListContainer.List. +type ProcThreadAttributeList struct{} + +type ProcThreadAttributeListContainer struct { + data *ProcThreadAttributeList + pointers []unsafe.Pointer +} + +type ProcessInformation struct { + Process Handle + Thread Handle + ProcessId uint32 + ThreadId uint32 +} + +type ProcessEntry32 struct { + Size uint32 + Usage uint32 + ProcessID uint32 + DefaultHeapID uintptr + ModuleID uint32 + Threads uint32 + ParentProcessID uint32 + PriClassBase int32 + Flags uint32 + ExeFile [MAX_PATH]uint16 +} + +type ThreadEntry32 struct { + Size uint32 + Usage uint32 + ThreadID uint32 + OwnerProcessID uint32 + BasePri int32 + DeltaPri int32 + Flags uint32 +} + +type ModuleEntry32 struct { + Size uint32 + ModuleID uint32 + ProcessID uint32 + GlblcntUsage uint32 + ProccntUsage uint32 + ModBaseAddr uintptr + ModBaseSize uint32 + ModuleHandle Handle + Module [MAX_MODULE_NAME32 + 1]uint16 + ExePath [MAX_PATH]uint16 +} + +const SizeofModuleEntry32 = unsafe.Sizeof(ModuleEntry32{}) + +type Systemtime struct { + Year uint16 + Month uint16 + DayOfWeek uint16 + Day uint16 + Hour uint16 + Minute uint16 + Second uint16 + Milliseconds uint16 +} + +type Timezoneinformation struct { + Bias int32 + StandardName [32]uint16 + StandardDate Systemtime + StandardBias int32 + DaylightName [32]uint16 + DaylightDate Systemtime + DaylightBias int32 +} + +// Socket related. + +const ( + AF_UNSPEC = 0 + AF_UNIX = 1 + AF_INET = 2 + AF_NETBIOS = 17 + AF_INET6 = 23 + AF_IRDA = 26 + AF_BTH = 32 + + SOCK_STREAM = 1 + SOCK_DGRAM = 2 + SOCK_RAW = 3 + SOCK_RDM = 4 + SOCK_SEQPACKET = 5 + + IPPROTO_IP = 0 + IPPROTO_ICMP = 1 + IPPROTO_IGMP = 2 + BTHPROTO_RFCOMM = 3 + IPPROTO_TCP = 6 + IPPROTO_UDP = 17 + IPPROTO_IPV6 = 41 + IPPROTO_ICMPV6 = 58 + IPPROTO_RM = 113 + + SOL_SOCKET = 0xffff + SO_REUSEADDR = 4 + SO_KEEPALIVE = 8 + SO_DONTROUTE = 16 + SO_BROADCAST = 32 + SO_LINGER = 128 + SO_RCVBUF = 0x1002 + SO_RCVTIMEO = 0x1006 + SO_SNDBUF = 0x1001 + SO_UPDATE_ACCEPT_CONTEXT = 0x700b + SO_UPDATE_CONNECT_CONTEXT = 0x7010 + + IOC_OUT = 0x40000000 + IOC_IN = 0x80000000 + IOC_VENDOR = 0x18000000 + IOC_INOUT = IOC_IN | IOC_OUT + IOC_WS2 = 0x08000000 + SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6 + SIO_KEEPALIVE_VALS = IOC_IN | IOC_VENDOR | 4 + SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12 + SIO_UDP_NETRESET = IOC_IN | IOC_VENDOR | 15 + + // cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460 + + IP_HDRINCL = 0x2 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_LOOP = 0xb + IP_ADD_MEMBERSHIP = 0xc + IP_DROP_MEMBERSHIP = 0xd + IP_PKTINFO = 0x13 + IP_MTU_DISCOVER = 0x47 + + IPV6_V6ONLY = 0x1b + IPV6_UNICAST_HOPS = 0x4 + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_LOOP = 0xb + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_PKTINFO = 0x13 + IPV6_MTU_DISCOVER = 0x47 + + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_DONTROUTE = 0x4 + MSG_WAITALL = 0x8 + + MSG_TRUNC = 0x0100 + MSG_CTRUNC = 0x0200 + MSG_BCAST = 0x0400 + MSG_MCAST = 0x0800 + + SOMAXCONN = 0x7fffffff + + TCP_NODELAY = 1 + TCP_EXPEDITED_1122 = 2 + TCP_KEEPALIVE = 3 + TCP_MAXSEG = 4 + TCP_MAXRT = 5 + TCP_STDURG = 6 + TCP_NOURG = 7 + TCP_ATMARK = 8 + TCP_NOSYNRETRIES = 9 + TCP_TIMESTAMPS = 10 + TCP_OFFLOAD_PREFERENCE = 11 + TCP_CONGESTION_ALGORITHM = 12 + TCP_DELAY_FIN_ACK = 13 + TCP_MAXRTMS = 14 + TCP_FASTOPEN = 15 + TCP_KEEPCNT = 16 + TCP_KEEPIDLE = TCP_KEEPALIVE + TCP_KEEPINTVL = 17 + TCP_FAIL_CONNECT_ON_ICMP_ERROR = 18 + TCP_ICMP_ERROR_INFO = 19 + + UDP_NOCHECKSUM = 1 + UDP_SEND_MSG_SIZE = 2 + UDP_RECV_MAX_COALESCED_SIZE = 3 + UDP_CHECKSUM_COVERAGE = 20 + + UDP_COALESCED_INFO = 3 + + SHUT_RD = 0 + SHUT_WR = 1 + SHUT_RDWR = 2 + + WSADESCRIPTION_LEN = 256 + WSASYS_STATUS_LEN = 128 +) + +// enum PMTUD_STATE from ws2ipdef.h +const ( + IP_PMTUDISC_NOT_SET = 0 + IP_PMTUDISC_DO = 1 + IP_PMTUDISC_DONT = 2 + IP_PMTUDISC_PROBE = 3 + IP_PMTUDISC_MAX = 4 +) + +type WSABuf struct { + Len uint32 + Buf *byte +} + +type WSAMsg struct { + Name *syscall.RawSockaddrAny + Namelen int32 + Buffers *WSABuf + BufferCount uint32 + Control WSABuf + Flags uint32 +} + +type WSACMSGHDR struct { + Len uintptr + Level int32 + Type int32 +} + +type IN_PKTINFO struct { + Addr [4]byte + Ifindex uint32 +} + +type IN6_PKTINFO struct { + Addr [16]byte + Ifindex uint32 +} + +// Flags for WSASocket +const ( + WSA_FLAG_OVERLAPPED = 0x01 + WSA_FLAG_MULTIPOINT_C_ROOT = 0x02 + WSA_FLAG_MULTIPOINT_C_LEAF = 0x04 + WSA_FLAG_MULTIPOINT_D_ROOT = 0x08 + WSA_FLAG_MULTIPOINT_D_LEAF = 0x10 + WSA_FLAG_ACCESS_SYSTEM_SECURITY = 0x40 + WSA_FLAG_NO_HANDLE_INHERIT = 0x80 + WSA_FLAG_REGISTERED_IO = 0x100 +) + +// Invented values to support what package os expects. +const ( + S_IFMT = 0x1f000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +const ( + FILE_TYPE_CHAR = 0x0002 + FILE_TYPE_DISK = 0x0001 + FILE_TYPE_PIPE = 0x0003 + FILE_TYPE_REMOTE = 0x8000 + FILE_TYPE_UNKNOWN = 0x0000 +) + +type Hostent struct { + Name *byte + Aliases **byte + AddrType uint16 + Length uint16 + AddrList **byte +} + +type Protoent struct { + Name *byte + Aliases **byte + Proto uint16 +} + +const ( + DNS_TYPE_A = 0x0001 + DNS_TYPE_NS = 0x0002 + DNS_TYPE_MD = 0x0003 + DNS_TYPE_MF = 0x0004 + DNS_TYPE_CNAME = 0x0005 + DNS_TYPE_SOA = 0x0006 + DNS_TYPE_MB = 0x0007 + DNS_TYPE_MG = 0x0008 + DNS_TYPE_MR = 0x0009 + DNS_TYPE_NULL = 0x000a + DNS_TYPE_WKS = 0x000b + DNS_TYPE_PTR = 0x000c + DNS_TYPE_HINFO = 0x000d + DNS_TYPE_MINFO = 0x000e + DNS_TYPE_MX = 0x000f + DNS_TYPE_TEXT = 0x0010 + DNS_TYPE_RP = 0x0011 + DNS_TYPE_AFSDB = 0x0012 + DNS_TYPE_X25 = 0x0013 + DNS_TYPE_ISDN = 0x0014 + DNS_TYPE_RT = 0x0015 + DNS_TYPE_NSAP = 0x0016 + DNS_TYPE_NSAPPTR = 0x0017 + DNS_TYPE_SIG = 0x0018 + DNS_TYPE_KEY = 0x0019 + DNS_TYPE_PX = 0x001a + DNS_TYPE_GPOS = 0x001b + DNS_TYPE_AAAA = 0x001c + DNS_TYPE_LOC = 0x001d + DNS_TYPE_NXT = 0x001e + DNS_TYPE_EID = 0x001f + DNS_TYPE_NIMLOC = 0x0020 + DNS_TYPE_SRV = 0x0021 + DNS_TYPE_ATMA = 0x0022 + DNS_TYPE_NAPTR = 0x0023 + DNS_TYPE_KX = 0x0024 + DNS_TYPE_CERT = 0x0025 + DNS_TYPE_A6 = 0x0026 + DNS_TYPE_DNAME = 0x0027 + DNS_TYPE_SINK = 0x0028 + DNS_TYPE_OPT = 0x0029 + DNS_TYPE_DS = 0x002B + DNS_TYPE_RRSIG = 0x002E + DNS_TYPE_NSEC = 0x002F + DNS_TYPE_DNSKEY = 0x0030 + DNS_TYPE_DHCID = 0x0031 + DNS_TYPE_UINFO = 0x0064 + DNS_TYPE_UID = 0x0065 + DNS_TYPE_GID = 0x0066 + DNS_TYPE_UNSPEC = 0x0067 + DNS_TYPE_ADDRS = 0x00f8 + DNS_TYPE_TKEY = 0x00f9 + DNS_TYPE_TSIG = 0x00fa + DNS_TYPE_IXFR = 0x00fb + DNS_TYPE_AXFR = 0x00fc + DNS_TYPE_MAILB = 0x00fd + DNS_TYPE_MAILA = 0x00fe + DNS_TYPE_ALL = 0x00ff + DNS_TYPE_ANY = 0x00ff + DNS_TYPE_WINS = 0xff01 + DNS_TYPE_WINSR = 0xff02 + DNS_TYPE_NBSTAT = 0xff01 +) + +const ( + // flags inside DNSRecord.Dw + DnsSectionQuestion = 0x0000 + DnsSectionAnswer = 0x0001 + DnsSectionAuthority = 0x0002 + DnsSectionAdditional = 0x0003 +) + +const ( + // flags of WSALookupService + LUP_DEEP = 0x0001 + LUP_CONTAINERS = 0x0002 + LUP_NOCONTAINERS = 0x0004 + LUP_NEAREST = 0x0008 + LUP_RETURN_NAME = 0x0010 + LUP_RETURN_TYPE = 0x0020 + LUP_RETURN_VERSION = 0x0040 + LUP_RETURN_COMMENT = 0x0080 + LUP_RETURN_ADDR = 0x0100 + LUP_RETURN_BLOB = 0x0200 + LUP_RETURN_ALIASES = 0x0400 + LUP_RETURN_QUERY_STRING = 0x0800 + LUP_RETURN_ALL = 0x0FF0 + LUP_RES_SERVICE = 0x8000 + + LUP_FLUSHCACHE = 0x1000 + LUP_FLUSHPREVIOUS = 0x2000 + + LUP_NON_AUTHORITATIVE = 0x4000 + LUP_SECURE = 0x8000 + LUP_RETURN_PREFERRED_NAMES = 0x10000 + LUP_DNS_ONLY = 0x20000 + + LUP_ADDRCONFIG = 0x100000 + LUP_DUAL_ADDR = 0x200000 + LUP_FILESERVER = 0x400000 + LUP_DISABLE_IDN_ENCODING = 0x00800000 + LUP_API_ANSI = 0x01000000 + + LUP_RESOLUTION_HANDLE = 0x80000000 +) + +const ( + // values of WSAQUERYSET's namespace + NS_ALL = 0 + NS_DNS = 12 + NS_NLA = 15 + NS_BTH = 16 + NS_EMAIL = 37 + NS_PNRPNAME = 38 + NS_PNRPCLOUD = 39 +) + +type DNSSRVData struct { + Target *uint16 + Priority uint16 + Weight uint16 + Port uint16 + Pad uint16 +} + +type DNSPTRData struct { + Host *uint16 +} + +type DNSMXData struct { + NameExchange *uint16 + Preference uint16 + Pad uint16 +} + +type DNSTXTData struct { + StringCount uint16 + StringArray [1]*uint16 +} + +type DNSRecord struct { + Next *DNSRecord + Name *uint16 + Type uint16 + Length uint16 + Dw uint32 + Ttl uint32 + Reserved uint32 + Data [40]byte +} + +const ( + TF_DISCONNECT = 1 + TF_REUSE_SOCKET = 2 + TF_WRITE_BEHIND = 4 + TF_USE_DEFAULT_WORKER = 0 + TF_USE_SYSTEM_THREAD = 16 + TF_USE_KERNEL_APC = 32 +) + +type TransmitFileBuffers struct { + Head uintptr + HeadLength uint32 + Tail uintptr + TailLength uint32 +} + +const ( + IFF_UP = 1 + IFF_BROADCAST = 2 + IFF_LOOPBACK = 4 + IFF_POINTTOPOINT = 8 + IFF_MULTICAST = 16 +) + +const SIO_GET_INTERFACE_LIST = 0x4004747F + +// TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old. +// will be fixed to change variable type as suitable. + +type SockaddrGen [24]byte + +type InterfaceInfo struct { + Flags uint32 + Address SockaddrGen + BroadcastAddress SockaddrGen + Netmask SockaddrGen +} + +type IpAddressString struct { + String [16]byte +} + +type IpMaskString IpAddressString + +type IpAddrString struct { + Next *IpAddrString + IpAddress IpAddressString + IpMask IpMaskString + Context uint32 +} + +const MAX_ADAPTER_NAME_LENGTH = 256 +const MAX_ADAPTER_DESCRIPTION_LENGTH = 128 +const MAX_ADAPTER_ADDRESS_LENGTH = 8 + +type IpAdapterInfo struct { + Next *IpAdapterInfo + ComboIndex uint32 + AdapterName [MAX_ADAPTER_NAME_LENGTH + 4]byte + Description [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte + AddressLength uint32 + Address [MAX_ADAPTER_ADDRESS_LENGTH]byte + Index uint32 + Type uint32 + DhcpEnabled uint32 + CurrentIpAddress *IpAddrString + IpAddressList IpAddrString + GatewayList IpAddrString + DhcpServer IpAddrString + HaveWins bool + PrimaryWinsServer IpAddrString + SecondaryWinsServer IpAddrString + LeaseObtained int64 + LeaseExpires int64 +} + +const MAXLEN_PHYSADDR = 8 +const MAX_INTERFACE_NAME_LEN = 256 +const MAXLEN_IFDESCR = 256 + +type MibIfRow struct { + Name [MAX_INTERFACE_NAME_LEN]uint16 + Index uint32 + Type uint32 + Mtu uint32 + Speed uint32 + PhysAddrLen uint32 + PhysAddr [MAXLEN_PHYSADDR]byte + AdminStatus uint32 + OperStatus uint32 + LastChange uint32 + InOctets uint32 + InUcastPkts uint32 + InNUcastPkts uint32 + InDiscards uint32 + InErrors uint32 + InUnknownProtos uint32 + OutOctets uint32 + OutUcastPkts uint32 + OutNUcastPkts uint32 + OutDiscards uint32 + OutErrors uint32 + OutQLen uint32 + DescrLen uint32 + Descr [MAXLEN_IFDESCR]byte +} + +type CertInfo struct { + Version uint32 + SerialNumber CryptIntegerBlob + SignatureAlgorithm CryptAlgorithmIdentifier + Issuer CertNameBlob + NotBefore Filetime + NotAfter Filetime + Subject CertNameBlob + SubjectPublicKeyInfo CertPublicKeyInfo + IssuerUniqueId CryptBitBlob + SubjectUniqueId CryptBitBlob + CountExtensions uint32 + Extensions *CertExtension +} + +type CertExtension struct { + ObjId *byte + Critical int32 + Value CryptObjidBlob +} + +type CryptAlgorithmIdentifier struct { + ObjId *byte + Parameters CryptObjidBlob +} + +type CertPublicKeyInfo struct { + Algorithm CryptAlgorithmIdentifier + PublicKey CryptBitBlob +} + +type DataBlob struct { + Size uint32 + Data *byte +} +type CryptIntegerBlob DataBlob +type CryptUintBlob DataBlob +type CryptObjidBlob DataBlob +type CertNameBlob DataBlob +type CertRdnValueBlob DataBlob +type CertBlob DataBlob +type CrlBlob DataBlob +type CryptDataBlob DataBlob +type CryptHashBlob DataBlob +type CryptDigestBlob DataBlob +type CryptDerBlob DataBlob +type CryptAttrBlob DataBlob + +type CryptBitBlob struct { + Size uint32 + Data *byte + UnusedBits uint32 +} + +type CertContext struct { + EncodingType uint32 + EncodedCert *byte + Length uint32 + CertInfo *CertInfo + Store Handle +} + +type CertChainContext struct { + Size uint32 + TrustStatus CertTrustStatus + ChainCount uint32 + Chains **CertSimpleChain + LowerQualityChainCount uint32 + LowerQualityChains **CertChainContext + HasRevocationFreshnessTime uint32 + RevocationFreshnessTime uint32 +} + +type CertTrustListInfo struct { + // Not implemented +} + +type CertSimpleChain struct { + Size uint32 + TrustStatus CertTrustStatus + NumElements uint32 + Elements **CertChainElement + TrustListInfo *CertTrustListInfo + HasRevocationFreshnessTime uint32 + RevocationFreshnessTime uint32 +} + +type CertChainElement struct { + Size uint32 + CertContext *CertContext + TrustStatus CertTrustStatus + RevocationInfo *CertRevocationInfo + IssuanceUsage *CertEnhKeyUsage + ApplicationUsage *CertEnhKeyUsage + ExtendedErrorInfo *uint16 +} + +type CertRevocationCrlInfo struct { + // Not implemented +} + +type CertRevocationInfo struct { + Size uint32 + RevocationResult uint32 + RevocationOid *byte + OidSpecificInfo Pointer + HasFreshnessTime uint32 + FreshnessTime uint32 + CrlInfo *CertRevocationCrlInfo +} + +type CertTrustStatus struct { + ErrorStatus uint32 + InfoStatus uint32 +} + +type CertUsageMatch struct { + Type uint32 + Usage CertEnhKeyUsage +} + +type CertEnhKeyUsage struct { + Length uint32 + UsageIdentifiers **byte +} + +type CertChainPara struct { + Size uint32 + RequestedUsage CertUsageMatch + RequstedIssuancePolicy CertUsageMatch + URLRetrievalTimeout uint32 + CheckRevocationFreshnessTime uint32 + RevocationFreshnessTime uint32 + CacheResync *Filetime +} + +type CertChainPolicyPara struct { + Size uint32 + Flags uint32 + ExtraPolicyPara Pointer +} + +type SSLExtraCertChainPolicyPara struct { + Size uint32 + AuthType uint32 + Checks uint32 + ServerName *uint16 +} + +type CertChainPolicyStatus struct { + Size uint32 + Error uint32 + ChainIndex uint32 + ElementIndex uint32 + ExtraPolicyStatus Pointer +} + +type CertPolicyInfo struct { + Identifier *byte + CountQualifiers uint32 + Qualifiers *CertPolicyQualifierInfo +} + +type CertPoliciesInfo struct { + Count uint32 + PolicyInfos *CertPolicyInfo +} + +type CertPolicyQualifierInfo struct { + // Not implemented +} + +type CertStrongSignPara struct { + Size uint32 + InfoChoice uint32 + InfoOrSerializedInfoOrOID unsafe.Pointer +} + +type CryptProtectPromptStruct struct { + Size uint32 + PromptFlags uint32 + App HWND + Prompt *uint16 +} + +type CertChainFindByIssuerPara struct { + Size uint32 + UsageIdentifier *byte + KeySpec uint32 + AcquirePrivateKeyFlags uint32 + IssuerCount uint32 + Issuer Pointer + FindCallback Pointer + FindArg Pointer + IssuerChainIndex *uint32 + IssuerElementIndex *uint32 +} + +type WinTrustData struct { + Size uint32 + PolicyCallbackData uintptr + SIPClientData uintptr + UIChoice uint32 + RevocationChecks uint32 + UnionChoice uint32 + FileOrCatalogOrBlobOrSgnrOrCert unsafe.Pointer + StateAction uint32 + StateData Handle + URLReference *uint16 + ProvFlags uint32 + UIContext uint32 + SignatureSettings *WinTrustSignatureSettings +} + +type WinTrustFileInfo struct { + Size uint32 + FilePath *uint16 + File Handle + KnownSubject *GUID +} + +type WinTrustSignatureSettings struct { + Size uint32 + Index uint32 + Flags uint32 + SecondarySigs uint32 + VerifiedSigIndex uint32 + CryptoPolicy *CertStrongSignPara +} + +const ( + // do not reorder + HKEY_CLASSES_ROOT = 0x80000000 + iota + HKEY_CURRENT_USER + HKEY_LOCAL_MACHINE + HKEY_USERS + HKEY_PERFORMANCE_DATA + HKEY_CURRENT_CONFIG + HKEY_DYN_DATA + + KEY_QUERY_VALUE = 1 + KEY_SET_VALUE = 2 + KEY_CREATE_SUB_KEY = 4 + KEY_ENUMERATE_SUB_KEYS = 8 + KEY_NOTIFY = 16 + KEY_CREATE_LINK = 32 + KEY_WRITE = 0x20006 + KEY_EXECUTE = 0x20019 + KEY_READ = 0x20019 + KEY_WOW64_64KEY = 0x0100 + KEY_WOW64_32KEY = 0x0200 + KEY_ALL_ACCESS = 0xf003f +) + +const ( + // do not reorder + REG_NONE = iota + REG_SZ + REG_EXPAND_SZ + REG_BINARY + REG_DWORD_LITTLE_ENDIAN + REG_DWORD_BIG_ENDIAN + REG_LINK + REG_MULTI_SZ + REG_RESOURCE_LIST + REG_FULL_RESOURCE_DESCRIPTOR + REG_RESOURCE_REQUIREMENTS_LIST + REG_QWORD_LITTLE_ENDIAN + REG_DWORD = REG_DWORD_LITTLE_ENDIAN + REG_QWORD = REG_QWORD_LITTLE_ENDIAN +) + +const ( + EVENT_MODIFY_STATE = 0x0002 + EVENT_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3 + + MUTANT_QUERY_STATE = 0x0001 + MUTANT_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | MUTANT_QUERY_STATE + + SEMAPHORE_MODIFY_STATE = 0x0002 + SEMAPHORE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3 + + TIMER_QUERY_STATE = 0x0001 + TIMER_MODIFY_STATE = 0x0002 + TIMER_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | TIMER_QUERY_STATE | TIMER_MODIFY_STATE + + MUTEX_MODIFY_STATE = MUTANT_QUERY_STATE + MUTEX_ALL_ACCESS = MUTANT_ALL_ACCESS + + CREATE_EVENT_MANUAL_RESET = 0x1 + CREATE_EVENT_INITIAL_SET = 0x2 + CREATE_MUTEX_INITIAL_OWNER = 0x1 +) + +type AddrinfoW struct { + Flags int32 + Family int32 + Socktype int32 + Protocol int32 + Addrlen uintptr + Canonname *uint16 + Addr uintptr + Next *AddrinfoW +} + +const ( + AI_PASSIVE = 1 + AI_CANONNAME = 2 + AI_NUMERICHOST = 4 +) + +type GUID struct { + Data1 uint32 + Data2 uint16 + Data3 uint16 + Data4 [8]byte +} + +var WSAID_CONNECTEX = GUID{ + 0x25a207b9, + 0xddf3, + 0x4660, + [8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}, +} + +var WSAID_WSASENDMSG = GUID{ + 0xa441e712, + 0x754f, + 0x43ca, + [8]byte{0x84, 0xa7, 0x0d, 0xee, 0x44, 0xcf, 0x60, 0x6d}, +} + +var WSAID_WSARECVMSG = GUID{ + 0xf689d7c8, + 0x6f1f, + 0x436b, + [8]byte{0x8a, 0x53, 0xe5, 0x4f, 0xe3, 0x51, 0xc3, 0x22}, +} + +const ( + FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1 + FILE_SKIP_SET_EVENT_ON_HANDLE = 2 +) + +const ( + WSAPROTOCOL_LEN = 255 + MAX_PROTOCOL_CHAIN = 7 + BASE_PROTOCOL = 1 + LAYERED_PROTOCOL = 0 + + XP1_CONNECTIONLESS = 0x00000001 + XP1_GUARANTEED_DELIVERY = 0x00000002 + XP1_GUARANTEED_ORDER = 0x00000004 + XP1_MESSAGE_ORIENTED = 0x00000008 + XP1_PSEUDO_STREAM = 0x00000010 + XP1_GRACEFUL_CLOSE = 0x00000020 + XP1_EXPEDITED_DATA = 0x00000040 + XP1_CONNECT_DATA = 0x00000080 + XP1_DISCONNECT_DATA = 0x00000100 + XP1_SUPPORT_BROADCAST = 0x00000200 + XP1_SUPPORT_MULTIPOINT = 0x00000400 + XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800 + XP1_MULTIPOINT_DATA_PLANE = 0x00001000 + XP1_QOS_SUPPORTED = 0x00002000 + XP1_UNI_SEND = 0x00008000 + XP1_UNI_RECV = 0x00010000 + XP1_IFS_HANDLES = 0x00020000 + XP1_PARTIAL_MESSAGE = 0x00040000 + XP1_SAN_SUPPORT_SDP = 0x00080000 + + PFL_MULTIPLE_PROTO_ENTRIES = 0x00000001 + PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002 + PFL_HIDDEN = 0x00000004 + PFL_MATCHES_PROTOCOL_ZERO = 0x00000008 + PFL_NETWORKDIRECT_PROVIDER = 0x00000010 +) + +type WSAProtocolInfo struct { + ServiceFlags1 uint32 + ServiceFlags2 uint32 + ServiceFlags3 uint32 + ServiceFlags4 uint32 + ProviderFlags uint32 + ProviderId GUID + CatalogEntryId uint32 + ProtocolChain WSAProtocolChain + Version int32 + AddressFamily int32 + MaxSockAddr int32 + MinSockAddr int32 + SocketType int32 + Protocol int32 + ProtocolMaxOffset int32 + NetworkByteOrder int32 + SecurityScheme int32 + MessageSize uint32 + ProviderReserved uint32 + ProtocolName [WSAPROTOCOL_LEN + 1]uint16 +} + +type WSAProtocolChain struct { + ChainLen int32 + ChainEntries [MAX_PROTOCOL_CHAIN]uint32 +} + +type TCPKeepalive struct { + OnOff uint32 + Time uint32 + Interval uint32 +} + +type symbolicLinkReparseBuffer struct { + SubstituteNameOffset uint16 + SubstituteNameLength uint16 + PrintNameOffset uint16 + PrintNameLength uint16 + Flags uint32 + PathBuffer [1]uint16 +} + +type mountPointReparseBuffer struct { + SubstituteNameOffset uint16 + SubstituteNameLength uint16 + PrintNameOffset uint16 + PrintNameLength uint16 + PathBuffer [1]uint16 +} + +type reparseDataBuffer struct { + ReparseTag uint32 + ReparseDataLength uint16 + Reserved uint16 + + // GenericReparseBuffer + reparseBuffer byte +} + +const ( + FSCTL_CREATE_OR_GET_OBJECT_ID = 0x0900C0 + FSCTL_DELETE_OBJECT_ID = 0x0900A0 + FSCTL_DELETE_REPARSE_POINT = 0x0900AC + FSCTL_DUPLICATE_EXTENTS_TO_FILE = 0x098344 + FSCTL_DUPLICATE_EXTENTS_TO_FILE_EX = 0x0983E8 + FSCTL_FILESYSTEM_GET_STATISTICS = 0x090060 + FSCTL_FILE_LEVEL_TRIM = 0x098208 + FSCTL_FIND_FILES_BY_SID = 0x09008F + FSCTL_GET_COMPRESSION = 0x09003C + FSCTL_GET_INTEGRITY_INFORMATION = 0x09027C + FSCTL_GET_NTFS_VOLUME_DATA = 0x090064 + FSCTL_GET_REFS_VOLUME_DATA = 0x0902D8 + FSCTL_GET_OBJECT_ID = 0x09009C + FSCTL_GET_REPARSE_POINT = 0x0900A8 + FSCTL_GET_RETRIEVAL_POINTER_COUNT = 0x09042B + FSCTL_GET_RETRIEVAL_POINTERS = 0x090073 + FSCTL_GET_RETRIEVAL_POINTERS_AND_REFCOUNT = 0x0903D3 + FSCTL_IS_PATHNAME_VALID = 0x09002C + FSCTL_LMR_SET_LINK_TRACKING_INFORMATION = 0x1400EC + FSCTL_MARK_HANDLE = 0x0900FC + FSCTL_OFFLOAD_READ = 0x094264 + FSCTL_OFFLOAD_WRITE = 0x098268 + FSCTL_PIPE_PEEK = 0x11400C + FSCTL_PIPE_TRANSCEIVE = 0x11C017 + FSCTL_PIPE_WAIT = 0x110018 + FSCTL_QUERY_ALLOCATED_RANGES = 0x0940CF + FSCTL_QUERY_FAT_BPB = 0x090058 + FSCTL_QUERY_FILE_REGIONS = 0x090284 + FSCTL_QUERY_ON_DISK_VOLUME_INFO = 0x09013C + FSCTL_QUERY_SPARING_INFO = 0x090138 + FSCTL_READ_FILE_USN_DATA = 0x0900EB + FSCTL_RECALL_FILE = 0x090117 + FSCTL_REFS_STREAM_SNAPSHOT_MANAGEMENT = 0x090440 + FSCTL_SET_COMPRESSION = 0x09C040 + FSCTL_SET_DEFECT_MANAGEMENT = 0x098134 + FSCTL_SET_ENCRYPTION = 0x0900D7 + FSCTL_SET_INTEGRITY_INFORMATION = 0x09C280 + FSCTL_SET_INTEGRITY_INFORMATION_EX = 0x090380 + FSCTL_SET_OBJECT_ID = 0x090098 + FSCTL_SET_OBJECT_ID_EXTENDED = 0x0900BC + FSCTL_SET_REPARSE_POINT = 0x0900A4 + FSCTL_SET_SPARSE = 0x0900C4 + FSCTL_SET_ZERO_DATA = 0x0980C8 + FSCTL_SET_ZERO_ON_DEALLOCATION = 0x090194 + FSCTL_SIS_COPYFILE = 0x090100 + FSCTL_WRITE_USN_CLOSE_RECORD = 0x0900EF + + MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024 + IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003 + IO_REPARSE_TAG_SYMLINK = 0xA000000C + SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1 +) + +const ( + ComputerNameNetBIOS = 0 + ComputerNameDnsHostname = 1 + ComputerNameDnsDomain = 2 + ComputerNameDnsFullyQualified = 3 + ComputerNamePhysicalNetBIOS = 4 + ComputerNamePhysicalDnsHostname = 5 + ComputerNamePhysicalDnsDomain = 6 + ComputerNamePhysicalDnsFullyQualified = 7 + ComputerNameMax = 8 +) + +// For MessageBox() +const ( + MB_OK = 0x00000000 + MB_OKCANCEL = 0x00000001 + MB_ABORTRETRYIGNORE = 0x00000002 + MB_YESNOCANCEL = 0x00000003 + MB_YESNO = 0x00000004 + MB_RETRYCANCEL = 0x00000005 + MB_CANCELTRYCONTINUE = 0x00000006 + MB_ICONHAND = 0x00000010 + MB_ICONQUESTION = 0x00000020 + MB_ICONEXCLAMATION = 0x00000030 + MB_ICONASTERISK = 0x00000040 + MB_USERICON = 0x00000080 + MB_ICONWARNING = MB_ICONEXCLAMATION + MB_ICONERROR = MB_ICONHAND + MB_ICONINFORMATION = MB_ICONASTERISK + MB_ICONSTOP = MB_ICONHAND + MB_DEFBUTTON1 = 0x00000000 + MB_DEFBUTTON2 = 0x00000100 + MB_DEFBUTTON3 = 0x00000200 + MB_DEFBUTTON4 = 0x00000300 + MB_APPLMODAL = 0x00000000 + MB_SYSTEMMODAL = 0x00001000 + MB_TASKMODAL = 0x00002000 + MB_HELP = 0x00004000 + MB_NOFOCUS = 0x00008000 + MB_SETFOREGROUND = 0x00010000 + MB_DEFAULT_DESKTOP_ONLY = 0x00020000 + MB_TOPMOST = 0x00040000 + MB_RIGHT = 0x00080000 + MB_RTLREADING = 0x00100000 + MB_SERVICE_NOTIFICATION = 0x00200000 +) + +const ( + MOVEFILE_REPLACE_EXISTING = 0x1 + MOVEFILE_COPY_ALLOWED = 0x2 + MOVEFILE_DELAY_UNTIL_REBOOT = 0x4 + MOVEFILE_WRITE_THROUGH = 0x8 + MOVEFILE_CREATE_HARDLINK = 0x10 + MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20 +) + +// Flags for GetAdaptersAddresses, see +// https://learn.microsoft.com/en-us/windows/win32/api/iphlpapi/nf-iphlpapi-getadaptersaddresses. +const ( + GAA_FLAG_SKIP_UNICAST = 0x1 + GAA_FLAG_SKIP_ANYCAST = 0x2 + GAA_FLAG_SKIP_MULTICAST = 0x4 + GAA_FLAG_SKIP_DNS_SERVER = 0x8 + GAA_FLAG_INCLUDE_PREFIX = 0x10 + GAA_FLAG_SKIP_FRIENDLY_NAME = 0x20 + GAA_FLAG_INCLUDE_WINS_INFO = 0x40 + GAA_FLAG_INCLUDE_GATEWAYS = 0x80 + GAA_FLAG_INCLUDE_ALL_INTERFACES = 0x100 + GAA_FLAG_INCLUDE_ALL_COMPARTMENTS = 0x200 + GAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER = 0x400 +) + +const ( + IF_TYPE_OTHER = 1 + IF_TYPE_ETHERNET_CSMACD = 6 + IF_TYPE_ISO88025_TOKENRING = 9 + IF_TYPE_PPP = 23 + IF_TYPE_SOFTWARE_LOOPBACK = 24 + IF_TYPE_ATM = 37 + IF_TYPE_IEEE80211 = 71 + IF_TYPE_TUNNEL = 131 + IF_TYPE_IEEE1394 = 144 +) + +// Enum NL_PREFIX_ORIGIN for [IpAdapterUnicastAddress], see +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_prefix_origin +const ( + IpPrefixOriginOther = 0 + IpPrefixOriginManual = 1 + IpPrefixOriginWellKnown = 2 + IpPrefixOriginDhcp = 3 + IpPrefixOriginRouterAdvertisement = 4 + IpPrefixOriginUnchanged = 1 << 4 +) + +// Enum NL_SUFFIX_ORIGIN for [IpAdapterUnicastAddress], see +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_suffix_origin +const ( + NlsoOther = 0 + NlsoManual = 1 + NlsoWellKnown = 2 + NlsoDhcp = 3 + NlsoLinkLayerAddress = 4 + NlsoRandom = 5 + IpSuffixOriginOther = 0 + IpSuffixOriginManual = 1 + IpSuffixOriginWellKnown = 2 + IpSuffixOriginDhcp = 3 + IpSuffixOriginLinkLayerAddress = 4 + IpSuffixOriginRandom = 5 + IpSuffixOriginUnchanged = 1 << 4 +) + +// Enum NL_DAD_STATE for [IpAdapterUnicastAddress], see +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_dad_state +const ( + NldsInvalid = 0 + NldsTentative = 1 + NldsDuplicate = 2 + NldsDeprecated = 3 + NldsPreferred = 4 + IpDadStateInvalid = 0 + IpDadStateTentative = 1 + IpDadStateDuplicate = 2 + IpDadStateDeprecated = 3 + IpDadStatePreferred = 4 +) + +type SocketAddress struct { + Sockaddr *syscall.RawSockaddrAny + SockaddrLength int32 +} + +// IP returns an IPv4 or IPv6 address, or nil if the underlying SocketAddress is neither. +func (addr *SocketAddress) IP() net.IP { + if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet4{}) && addr.Sockaddr.Addr.Family == AF_INET { + return (*RawSockaddrInet4)(unsafe.Pointer(addr.Sockaddr)).Addr[:] + } else if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet6{}) && addr.Sockaddr.Addr.Family == AF_INET6 { + return (*RawSockaddrInet6)(unsafe.Pointer(addr.Sockaddr)).Addr[:] + } + return nil +} + +type IpAdapterUnicastAddress struct { + Length uint32 + Flags uint32 + Next *IpAdapterUnicastAddress + Address SocketAddress + PrefixOrigin int32 + SuffixOrigin int32 + DadState int32 + ValidLifetime uint32 + PreferredLifetime uint32 + LeaseLifetime uint32 + OnLinkPrefixLength uint8 +} + +type IpAdapterAnycastAddress struct { + Length uint32 + Flags uint32 + Next *IpAdapterAnycastAddress + Address SocketAddress +} + +type IpAdapterMulticastAddress struct { + Length uint32 + Flags uint32 + Next *IpAdapterMulticastAddress + Address SocketAddress +} + +type IpAdapterDnsServerAdapter struct { + Length uint32 + Reserved uint32 + Next *IpAdapterDnsServerAdapter + Address SocketAddress +} + +type IpAdapterPrefix struct { + Length uint32 + Flags uint32 + Next *IpAdapterPrefix + Address SocketAddress + PrefixLength uint32 +} + +type IpAdapterAddresses struct { + Length uint32 + IfIndex uint32 + Next *IpAdapterAddresses + AdapterName *byte + FirstUnicastAddress *IpAdapterUnicastAddress + FirstAnycastAddress *IpAdapterAnycastAddress + FirstMulticastAddress *IpAdapterMulticastAddress + FirstDnsServerAddress *IpAdapterDnsServerAdapter + DnsSuffix *uint16 + Description *uint16 + FriendlyName *uint16 + PhysicalAddress [syscall.MAX_ADAPTER_ADDRESS_LENGTH]byte + PhysicalAddressLength uint32 + Flags uint32 + Mtu uint32 + IfType uint32 + OperStatus uint32 + Ipv6IfIndex uint32 + ZoneIndices [16]uint32 + FirstPrefix *IpAdapterPrefix + TransmitLinkSpeed uint64 + ReceiveLinkSpeed uint64 + FirstWinsServerAddress *IpAdapterWinsServerAddress + FirstGatewayAddress *IpAdapterGatewayAddress + Ipv4Metric uint32 + Ipv6Metric uint32 + Luid uint64 + Dhcpv4Server SocketAddress + CompartmentId uint32 + NetworkGuid GUID + ConnectionType uint32 + TunnelType uint32 + Dhcpv6Server SocketAddress + Dhcpv6ClientDuid [MAX_DHCPV6_DUID_LENGTH]byte + Dhcpv6ClientDuidLength uint32 + Dhcpv6Iaid uint32 + FirstDnsSuffix *IpAdapterDNSSuffix +} + +type IpAdapterWinsServerAddress struct { + Length uint32 + Reserved uint32 + Next *IpAdapterWinsServerAddress + Address SocketAddress +} + +type IpAdapterGatewayAddress struct { + Length uint32 + Reserved uint32 + Next *IpAdapterGatewayAddress + Address SocketAddress +} + +type IpAdapterDNSSuffix struct { + Next *IpAdapterDNSSuffix + String [MAX_DNS_SUFFIX_STRING_LENGTH]uint16 +} + +const ( + IfOperStatusUp = 1 + IfOperStatusDown = 2 + IfOperStatusTesting = 3 + IfOperStatusUnknown = 4 + IfOperStatusDormant = 5 + IfOperStatusNotPresent = 6 + IfOperStatusLowerLayerDown = 7 +) + +const ( + IF_MAX_PHYS_ADDRESS_LENGTH = 32 + IF_MAX_STRING_SIZE = 256 +) + +// MIB_IF_ENTRY_LEVEL enumeration from netioapi.h or +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/nf-netioapi-getifentry2ex. +const ( + MibIfEntryNormal = 0 + MibIfEntryNormalWithoutStatistics = 2 +) + +// MIB_NOTIFICATION_TYPE enumeration from netioapi.h or +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ne-netioapi-mib_notification_type. +const ( + MibParameterNotification = 0 + MibAddInstance = 1 + MibDeleteInstance = 2 + MibInitialNotification = 3 +) + +// MibIfRow2 stores information about a particular interface. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_if_row2. +type MibIfRow2 struct { + InterfaceLuid uint64 + InterfaceIndex uint32 + InterfaceGuid GUID + Alias [IF_MAX_STRING_SIZE + 1]uint16 + Description [IF_MAX_STRING_SIZE + 1]uint16 + PhysicalAddressLength uint32 + PhysicalAddress [IF_MAX_PHYS_ADDRESS_LENGTH]uint8 + PermanentPhysicalAddress [IF_MAX_PHYS_ADDRESS_LENGTH]uint8 + Mtu uint32 + Type uint32 + TunnelType uint32 + MediaType uint32 + PhysicalMediumType uint32 + AccessType uint32 + DirectionType uint32 + InterfaceAndOperStatusFlags uint8 + OperStatus uint32 + AdminStatus uint32 + MediaConnectState uint32 + NetworkGuid GUID + ConnectionType uint32 + TransmitLinkSpeed uint64 + ReceiveLinkSpeed uint64 + InOctets uint64 + InUcastPkts uint64 + InNUcastPkts uint64 + InDiscards uint64 + InErrors uint64 + InUnknownProtos uint64 + InUcastOctets uint64 + InMulticastOctets uint64 + InBroadcastOctets uint64 + OutOctets uint64 + OutUcastPkts uint64 + OutNUcastPkts uint64 + OutDiscards uint64 + OutErrors uint64 + OutUcastOctets uint64 + OutMulticastOctets uint64 + OutBroadcastOctets uint64 + OutQLen uint64 +} + +// MIB_UNICASTIPADDRESS_ROW stores information about a unicast IP address. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_unicastipaddress_row. +type MibUnicastIpAddressRow struct { + Address RawSockaddrInet6 // SOCKADDR_INET union + InterfaceLuid uint64 + InterfaceIndex uint32 + PrefixOrigin uint32 + SuffixOrigin uint32 + ValidLifetime uint32 + PreferredLifetime uint32 + OnLinkPrefixLength uint8 + SkipAsSource uint8 + DadState uint32 + ScopeId uint32 + CreationTimeStamp Filetime +} + +const ScopeLevelCount = 16 + +// MIB_IPINTERFACE_ROW stores interface management information for a particular IP address family on a network interface. +// See https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipinterface_row. +type MibIpInterfaceRow struct { + Family uint16 + InterfaceLuid uint64 + InterfaceIndex uint32 + MaxReassemblySize uint32 + InterfaceIdentifier uint64 + MinRouterAdvertisementInterval uint32 + MaxRouterAdvertisementInterval uint32 + AdvertisingEnabled uint8 + ForwardingEnabled uint8 + WeakHostSend uint8 + WeakHostReceive uint8 + UseAutomaticMetric uint8 + UseNeighborUnreachabilityDetection uint8 + ManagedAddressConfigurationSupported uint8 + OtherStatefulConfigurationSupported uint8 + AdvertiseDefaultRoute uint8 + RouterDiscoveryBehavior uint32 + DadTransmits uint32 + BaseReachableTime uint32 + RetransmitTime uint32 + PathMtuDiscoveryTimeout uint32 + LinkLocalAddressBehavior uint32 + LinkLocalAddressTimeout uint32 + ZoneIndices [ScopeLevelCount]uint32 + SitePrefixLength uint32 + Metric uint32 + NlMtu uint32 + Connected uint8 + SupportsWakeUpPatterns uint8 + SupportsNeighborDiscovery uint8 + SupportsRouterDiscovery uint8 + ReachableTime uint32 + TransmitOffload uint32 + ReceiveOffload uint32 + DisableDefaultRoutes uint8 +} + +// Console related constants used for the mode parameter to SetConsoleMode. See +// https://docs.microsoft.com/en-us/windows/console/setconsolemode for details. + +const ( + ENABLE_PROCESSED_INPUT = 0x1 + ENABLE_LINE_INPUT = 0x2 + ENABLE_ECHO_INPUT = 0x4 + ENABLE_WINDOW_INPUT = 0x8 + ENABLE_MOUSE_INPUT = 0x10 + ENABLE_INSERT_MODE = 0x20 + ENABLE_QUICK_EDIT_MODE = 0x40 + ENABLE_EXTENDED_FLAGS = 0x80 + ENABLE_AUTO_POSITION = 0x100 + ENABLE_VIRTUAL_TERMINAL_INPUT = 0x200 + + ENABLE_PROCESSED_OUTPUT = 0x1 + ENABLE_WRAP_AT_EOL_OUTPUT = 0x2 + ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4 + DISABLE_NEWLINE_AUTO_RETURN = 0x8 + ENABLE_LVB_GRID_WORLDWIDE = 0x10 +) + +// Pseudo console related constants used for the flags parameter to +// CreatePseudoConsole. See: https://learn.microsoft.com/en-us/windows/console/createpseudoconsole +const ( + PSEUDOCONSOLE_INHERIT_CURSOR = 0x1 +) + +type Coord struct { + X int16 + Y int16 +} + +type SmallRect struct { + Left int16 + Top int16 + Right int16 + Bottom int16 +} + +// Used with GetConsoleScreenBuffer to retrieve information about a console +// screen buffer. See +// https://docs.microsoft.com/en-us/windows/console/console-screen-buffer-info-str +// for details. + +type ConsoleScreenBufferInfo struct { + Size Coord + CursorPosition Coord + Attributes uint16 + Window SmallRect + MaximumWindowSize Coord +} + +const UNIX_PATH_MAX = 108 // defined in afunix.h + +const ( + // flags for JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags + JOB_OBJECT_LIMIT_ACTIVE_PROCESS = 0x00000008 + JOB_OBJECT_LIMIT_AFFINITY = 0x00000010 + JOB_OBJECT_LIMIT_BREAKAWAY_OK = 0x00000800 + JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x00000400 + JOB_OBJECT_LIMIT_JOB_MEMORY = 0x00000200 + JOB_OBJECT_LIMIT_JOB_TIME = 0x00000004 + JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE = 0x00002000 + JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME = 0x00000040 + JOB_OBJECT_LIMIT_PRIORITY_CLASS = 0x00000020 + JOB_OBJECT_LIMIT_PROCESS_MEMORY = 0x00000100 + JOB_OBJECT_LIMIT_PROCESS_TIME = 0x00000002 + JOB_OBJECT_LIMIT_SCHEDULING_CLASS = 0x00000080 + JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK = 0x00001000 + JOB_OBJECT_LIMIT_SUBSET_AFFINITY = 0x00004000 + JOB_OBJECT_LIMIT_WORKINGSET = 0x00000001 +) + +type IO_COUNTERS struct { + ReadOperationCount uint64 + WriteOperationCount uint64 + OtherOperationCount uint64 + ReadTransferCount uint64 + WriteTransferCount uint64 + OtherTransferCount uint64 +} + +type JOBOBJECT_EXTENDED_LIMIT_INFORMATION struct { + BasicLimitInformation JOBOBJECT_BASIC_LIMIT_INFORMATION + IoInfo IO_COUNTERS + ProcessMemoryLimit uintptr + JobMemoryLimit uintptr + PeakProcessMemoryUsed uintptr + PeakJobMemoryUsed uintptr +} + +const ( + // UIRestrictionsClass + JOB_OBJECT_UILIMIT_DESKTOP = 0x00000040 + JOB_OBJECT_UILIMIT_DISPLAYSETTINGS = 0x00000010 + JOB_OBJECT_UILIMIT_EXITWINDOWS = 0x00000080 + JOB_OBJECT_UILIMIT_GLOBALATOMS = 0x00000020 + JOB_OBJECT_UILIMIT_HANDLES = 0x00000001 + JOB_OBJECT_UILIMIT_READCLIPBOARD = 0x00000002 + JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = 0x00000008 + JOB_OBJECT_UILIMIT_WRITECLIPBOARD = 0x00000004 +) + +type JOBOBJECT_BASIC_UI_RESTRICTIONS struct { + UIRestrictionsClass uint32 +} + +const ( + // JobObjectInformationClass for QueryInformationJobObject and SetInformationJobObject + JobObjectAssociateCompletionPortInformation = 7 + JobObjectBasicAccountingInformation = 1 + JobObjectBasicAndIoAccountingInformation = 8 + JobObjectBasicLimitInformation = 2 + JobObjectBasicProcessIdList = 3 + JobObjectBasicUIRestrictions = 4 + JobObjectCpuRateControlInformation = 15 + JobObjectEndOfJobTimeInformation = 6 + JobObjectExtendedLimitInformation = 9 + JobObjectGroupInformation = 11 + JobObjectGroupInformationEx = 14 + JobObjectLimitViolationInformation = 13 + JobObjectLimitViolationInformation2 = 34 + JobObjectNetRateControlInformation = 32 + JobObjectNotificationLimitInformation = 12 + JobObjectNotificationLimitInformation2 = 33 + JobObjectSecurityLimitInformation = 5 +) + +const ( + KF_FLAG_DEFAULT = 0x00000000 + KF_FLAG_FORCE_APP_DATA_REDIRECTION = 0x00080000 + KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET = 0x00040000 + KF_FLAG_FORCE_PACKAGE_REDIRECTION = 0x00020000 + KF_FLAG_NO_PACKAGE_REDIRECTION = 0x00010000 + KF_FLAG_FORCE_APPCONTAINER_REDIRECTION = 0x00020000 + KF_FLAG_NO_APPCONTAINER_REDIRECTION = 0x00010000 + KF_FLAG_CREATE = 0x00008000 + KF_FLAG_DONT_VERIFY = 0x00004000 + KF_FLAG_DONT_UNEXPAND = 0x00002000 + KF_FLAG_NO_ALIAS = 0x00001000 + KF_FLAG_INIT = 0x00000800 + KF_FLAG_DEFAULT_PATH = 0x00000400 + KF_FLAG_NOT_PARENT_RELATIVE = 0x00000200 + KF_FLAG_SIMPLE_IDLIST = 0x00000100 + KF_FLAG_ALIAS_ONLY = 0x80000000 +) + +type OsVersionInfoEx struct { + osVersionInfoSize uint32 + MajorVersion uint32 + MinorVersion uint32 + BuildNumber uint32 + PlatformId uint32 + CsdVersion [128]uint16 + ServicePackMajor uint16 + ServicePackMinor uint16 + SuiteMask uint16 + ProductType byte + _ byte +} + +const ( + EWX_LOGOFF = 0x00000000 + EWX_SHUTDOWN = 0x00000001 + EWX_REBOOT = 0x00000002 + EWX_FORCE = 0x00000004 + EWX_POWEROFF = 0x00000008 + EWX_FORCEIFHUNG = 0x00000010 + EWX_QUICKRESOLVE = 0x00000020 + EWX_RESTARTAPPS = 0x00000040 + EWX_HYBRID_SHUTDOWN = 0x00400000 + EWX_BOOTOPTIONS = 0x01000000 + + SHTDN_REASON_FLAG_COMMENT_REQUIRED = 0x01000000 + SHTDN_REASON_FLAG_DIRTY_PROBLEM_ID_REQUIRED = 0x02000000 + SHTDN_REASON_FLAG_CLEAN_UI = 0x04000000 + SHTDN_REASON_FLAG_DIRTY_UI = 0x08000000 + SHTDN_REASON_FLAG_USER_DEFINED = 0x40000000 + SHTDN_REASON_FLAG_PLANNED = 0x80000000 + SHTDN_REASON_MAJOR_OTHER = 0x00000000 + SHTDN_REASON_MAJOR_NONE = 0x00000000 + SHTDN_REASON_MAJOR_HARDWARE = 0x00010000 + SHTDN_REASON_MAJOR_OPERATINGSYSTEM = 0x00020000 + SHTDN_REASON_MAJOR_SOFTWARE = 0x00030000 + SHTDN_REASON_MAJOR_APPLICATION = 0x00040000 + SHTDN_REASON_MAJOR_SYSTEM = 0x00050000 + SHTDN_REASON_MAJOR_POWER = 0x00060000 + SHTDN_REASON_MAJOR_LEGACY_API = 0x00070000 + SHTDN_REASON_MINOR_OTHER = 0x00000000 + SHTDN_REASON_MINOR_NONE = 0x000000ff + SHTDN_REASON_MINOR_MAINTENANCE = 0x00000001 + SHTDN_REASON_MINOR_INSTALLATION = 0x00000002 + SHTDN_REASON_MINOR_UPGRADE = 0x00000003 + SHTDN_REASON_MINOR_RECONFIG = 0x00000004 + SHTDN_REASON_MINOR_HUNG = 0x00000005 + SHTDN_REASON_MINOR_UNSTABLE = 0x00000006 + SHTDN_REASON_MINOR_DISK = 0x00000007 + SHTDN_REASON_MINOR_PROCESSOR = 0x00000008 + SHTDN_REASON_MINOR_NETWORKCARD = 0x00000009 + SHTDN_REASON_MINOR_POWER_SUPPLY = 0x0000000a + SHTDN_REASON_MINOR_CORDUNPLUGGED = 0x0000000b + SHTDN_REASON_MINOR_ENVIRONMENT = 0x0000000c + SHTDN_REASON_MINOR_HARDWARE_DRIVER = 0x0000000d + SHTDN_REASON_MINOR_OTHERDRIVER = 0x0000000e + SHTDN_REASON_MINOR_BLUESCREEN = 0x0000000F + SHTDN_REASON_MINOR_SERVICEPACK = 0x00000010 + SHTDN_REASON_MINOR_HOTFIX = 0x00000011 + SHTDN_REASON_MINOR_SECURITYFIX = 0x00000012 + SHTDN_REASON_MINOR_SECURITY = 0x00000013 + SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY = 0x00000014 + SHTDN_REASON_MINOR_WMI = 0x00000015 + SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL = 0x00000016 + SHTDN_REASON_MINOR_HOTFIX_UNINSTALL = 0x00000017 + SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL = 0x00000018 + SHTDN_REASON_MINOR_MMC = 0x00000019 + SHTDN_REASON_MINOR_SYSTEMRESTORE = 0x0000001a + SHTDN_REASON_MINOR_TERMSRV = 0x00000020 + SHTDN_REASON_MINOR_DC_PROMOTION = 0x00000021 + SHTDN_REASON_MINOR_DC_DEMOTION = 0x00000022 + SHTDN_REASON_UNKNOWN = SHTDN_REASON_MINOR_NONE + SHTDN_REASON_LEGACY_API = SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED + SHTDN_REASON_VALID_BIT_MASK = 0xc0ffffff + + SHUTDOWN_NORETRY = 0x1 +) + +// Flags used for GetModuleHandleEx +const ( + GET_MODULE_HANDLE_EX_FLAG_PIN = 1 + GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2 + GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS = 4 +) + +// MUI function flag values +const ( + MUI_LANGUAGE_ID = 0x4 + MUI_LANGUAGE_NAME = 0x8 + MUI_MERGE_SYSTEM_FALLBACK = 0x10 + MUI_MERGE_USER_FALLBACK = 0x20 + MUI_UI_FALLBACK = MUI_MERGE_SYSTEM_FALLBACK | MUI_MERGE_USER_FALLBACK + MUI_THREAD_LANGUAGES = 0x40 + MUI_CONSOLE_FILTER = 0x100 + MUI_COMPLEX_SCRIPT_FILTER = 0x200 + MUI_RESET_FILTERS = 0x001 + MUI_USER_PREFERRED_UI_LANGUAGES = 0x10 + MUI_USE_INSTALLED_LANGUAGES = 0x20 + MUI_USE_SEARCH_ALL_LANGUAGES = 0x40 + MUI_LANG_NEUTRAL_PE_FILE = 0x100 + MUI_NON_LANG_NEUTRAL_FILE = 0x200 + MUI_MACHINE_LANGUAGE_SETTINGS = 0x400 + MUI_FILETYPE_NOT_LANGUAGE_NEUTRAL = 0x001 + MUI_FILETYPE_LANGUAGE_NEUTRAL_MAIN = 0x002 + MUI_FILETYPE_LANGUAGE_NEUTRAL_MUI = 0x004 + MUI_QUERY_TYPE = 0x001 + MUI_QUERY_CHECKSUM = 0x002 + MUI_QUERY_LANGUAGE_NAME = 0x004 + MUI_QUERY_RESOURCE_TYPES = 0x008 + MUI_FILEINFO_VERSION = 0x001 + + MUI_FULL_LANGUAGE = 0x01 + MUI_PARTIAL_LANGUAGE = 0x02 + MUI_LIP_LANGUAGE = 0x04 + MUI_LANGUAGE_INSTALLED = 0x20 + MUI_LANGUAGE_LICENSED = 0x40 +) + +// FILE_INFO_BY_HANDLE_CLASS constants for SetFileInformationByHandle/GetFileInformationByHandleEx +const ( + FileBasicInfo = 0 + FileStandardInfo = 1 + FileNameInfo = 2 + FileRenameInfo = 3 + FileDispositionInfo = 4 + FileAllocationInfo = 5 + FileEndOfFileInfo = 6 + FileStreamInfo = 7 + FileCompressionInfo = 8 + FileAttributeTagInfo = 9 + FileIdBothDirectoryInfo = 10 + FileIdBothDirectoryRestartInfo = 11 + FileIoPriorityHintInfo = 12 + FileRemoteProtocolInfo = 13 + FileFullDirectoryInfo = 14 + FileFullDirectoryRestartInfo = 15 + FileStorageInfo = 16 + FileAlignmentInfo = 17 + FileIdInfo = 18 + FileIdExtdDirectoryInfo = 19 + FileIdExtdDirectoryRestartInfo = 20 + FileDispositionInfoEx = 21 + FileRenameInfoEx = 22 + FileCaseSensitiveInfo = 23 + FileNormalizedNameInfo = 24 +) + +// LoadLibrary flags for determining from where to search for a DLL +const ( + DONT_RESOLVE_DLL_REFERENCES = 0x1 + LOAD_LIBRARY_AS_DATAFILE = 0x2 + LOAD_WITH_ALTERED_SEARCH_PATH = 0x8 + LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x10 + LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x20 + LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x40 + LOAD_LIBRARY_REQUIRE_SIGNED_TARGET = 0x80 + LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR = 0x100 + LOAD_LIBRARY_SEARCH_APPLICATION_DIR = 0x200 + LOAD_LIBRARY_SEARCH_USER_DIRS = 0x400 + LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x800 + LOAD_LIBRARY_SEARCH_DEFAULT_DIRS = 0x1000 + LOAD_LIBRARY_SAFE_CURRENT_DIRS = 0x00002000 + LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER = 0x00004000 + LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY = 0x00008000 +) + +// RegNotifyChangeKeyValue notifyFilter flags. +const ( + // REG_NOTIFY_CHANGE_NAME notifies the caller if a subkey is added or deleted. + REG_NOTIFY_CHANGE_NAME = 0x00000001 + + // REG_NOTIFY_CHANGE_ATTRIBUTES notifies the caller of changes to the attributes of the key, such as the security descriptor information. + REG_NOTIFY_CHANGE_ATTRIBUTES = 0x00000002 + + // REG_NOTIFY_CHANGE_LAST_SET notifies the caller of changes to a value of the key. This can include adding or deleting a value, or changing an existing value. + REG_NOTIFY_CHANGE_LAST_SET = 0x00000004 + + // REG_NOTIFY_CHANGE_SECURITY notifies the caller of changes to the security descriptor of the key. + REG_NOTIFY_CHANGE_SECURITY = 0x00000008 + + // REG_NOTIFY_THREAD_AGNOSTIC indicates that the lifetime of the registration must not be tied to the lifetime of the thread issuing the RegNotifyChangeKeyValue call. Note: This flag value is only supported in Windows 8 and later. + REG_NOTIFY_THREAD_AGNOSTIC = 0x10000000 +) + +type CommTimeouts struct { + ReadIntervalTimeout uint32 + ReadTotalTimeoutMultiplier uint32 + ReadTotalTimeoutConstant uint32 + WriteTotalTimeoutMultiplier uint32 + WriteTotalTimeoutConstant uint32 +} + +// NTUnicodeString is a UTF-16 string for NT native APIs, corresponding to UNICODE_STRING. +type NTUnicodeString struct { + // Note: Length and MaximumLength are in *bytes*, not uint16s. + // They should always be even. + Length uint16 + MaximumLength uint16 + Buffer *uint16 +} + +// NTString is an ANSI string for NT native APIs, corresponding to STRING. +type NTString struct { + Length uint16 + MaximumLength uint16 + Buffer *byte +} + +type LIST_ENTRY struct { + Flink *LIST_ENTRY + Blink *LIST_ENTRY +} + +type RUNTIME_FUNCTION struct { + BeginAddress uint32 + EndAddress uint32 + UnwindData uint32 +} + +type LDR_DATA_TABLE_ENTRY struct { + reserved1 [2]uintptr + InMemoryOrderLinks LIST_ENTRY + reserved2 [2]uintptr + DllBase uintptr + reserved3 [2]uintptr + FullDllName NTUnicodeString + reserved4 [8]byte + reserved5 [3]uintptr + reserved6 uintptr + TimeDateStamp uint32 +} + +type PEB_LDR_DATA struct { + reserved1 [8]byte + reserved2 [3]uintptr + InMemoryOrderModuleList LIST_ENTRY +} + +type CURDIR struct { + DosPath NTUnicodeString + Handle Handle +} + +type RTL_DRIVE_LETTER_CURDIR struct { + Flags uint16 + Length uint16 + TimeStamp uint32 + DosPath NTString +} + +type RTL_USER_PROCESS_PARAMETERS struct { + MaximumLength, Length uint32 + + Flags, DebugFlags uint32 + + ConsoleHandle Handle + ConsoleFlags uint32 + StandardInput, StandardOutput, StandardError Handle + + CurrentDirectory CURDIR + DllPath NTUnicodeString + ImagePathName NTUnicodeString + CommandLine NTUnicodeString + Environment unsafe.Pointer + + StartingX, StartingY, CountX, CountY, CountCharsX, CountCharsY, FillAttribute uint32 + + WindowFlags, ShowWindowFlags uint32 + WindowTitle, DesktopInfo, ShellInfo, RuntimeData NTUnicodeString + CurrentDirectories [32]RTL_DRIVE_LETTER_CURDIR + + EnvironmentSize, EnvironmentVersion uintptr + + PackageDependencyData unsafe.Pointer + ProcessGroupId uint32 + LoaderThreads uint32 + + RedirectionDllName NTUnicodeString + HeapPartitionName NTUnicodeString + DefaultThreadpoolCpuSetMasks uintptr + DefaultThreadpoolCpuSetMaskCount uint32 +} + +type PEB struct { + reserved1 [2]byte + BeingDebugged byte + BitField byte + reserved3 uintptr + ImageBaseAddress uintptr + Ldr *PEB_LDR_DATA + ProcessParameters *RTL_USER_PROCESS_PARAMETERS + reserved4 [3]uintptr + AtlThunkSListPtr uintptr + reserved5 uintptr + reserved6 uint32 + reserved7 uintptr + reserved8 uint32 + AtlThunkSListPtr32 uint32 + reserved9 [45]uintptr + reserved10 [96]byte + PostProcessInitRoutine uintptr + reserved11 [128]byte + reserved12 [1]uintptr + SessionId uint32 +} + +type OBJECT_ATTRIBUTES struct { + Length uint32 + RootDirectory Handle + ObjectName *NTUnicodeString + Attributes uint32 + SecurityDescriptor *SECURITY_DESCRIPTOR + SecurityQoS *SECURITY_QUALITY_OF_SERVICE +} + +// Values for the Attributes member of OBJECT_ATTRIBUTES. +const ( + OBJ_INHERIT = 0x00000002 + OBJ_PERMANENT = 0x00000010 + OBJ_EXCLUSIVE = 0x00000020 + OBJ_CASE_INSENSITIVE = 0x00000040 + OBJ_OPENIF = 0x00000080 + OBJ_OPENLINK = 0x00000100 + OBJ_KERNEL_HANDLE = 0x00000200 + OBJ_FORCE_ACCESS_CHECK = 0x00000400 + OBJ_IGNORE_IMPERSONATED_DEVICEMAP = 0x00000800 + OBJ_DONT_REPARSE = 0x00001000 + OBJ_VALID_ATTRIBUTES = 0x00001FF2 +) + +type IO_STATUS_BLOCK struct { + Status NTStatus + Information uintptr +} + +type RTLP_CURDIR_REF struct { + RefCount int32 + Handle Handle +} + +type RTL_RELATIVE_NAME struct { + RelativeName NTUnicodeString + ContainingDirectory Handle + CurDirRef *RTLP_CURDIR_REF +} + +const ( + // CreateDisposition flags for NtCreateFile and NtCreateNamedPipeFile. + FILE_SUPERSEDE = 0x00000000 + FILE_OPEN = 0x00000001 + FILE_CREATE = 0x00000002 + FILE_OPEN_IF = 0x00000003 + FILE_OVERWRITE = 0x00000004 + FILE_OVERWRITE_IF = 0x00000005 + FILE_MAXIMUM_DISPOSITION = 0x00000005 + + // CreateOptions flags for NtCreateFile and NtCreateNamedPipeFile. + FILE_DIRECTORY_FILE = 0x00000001 + FILE_WRITE_THROUGH = 0x00000002 + FILE_SEQUENTIAL_ONLY = 0x00000004 + FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008 + FILE_SYNCHRONOUS_IO_ALERT = 0x00000010 + FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020 + FILE_NON_DIRECTORY_FILE = 0x00000040 + FILE_CREATE_TREE_CONNECTION = 0x00000080 + FILE_COMPLETE_IF_OPLOCKED = 0x00000100 + FILE_NO_EA_KNOWLEDGE = 0x00000200 + FILE_OPEN_REMOTE_INSTANCE = 0x00000400 + FILE_RANDOM_ACCESS = 0x00000800 + FILE_DELETE_ON_CLOSE = 0x00001000 + FILE_OPEN_BY_FILE_ID = 0x00002000 + FILE_OPEN_FOR_BACKUP_INTENT = 0x00004000 + FILE_NO_COMPRESSION = 0x00008000 + FILE_OPEN_REQUIRING_OPLOCK = 0x00010000 + FILE_DISALLOW_EXCLUSIVE = 0x00020000 + FILE_RESERVE_OPFILTER = 0x00100000 + FILE_OPEN_REPARSE_POINT = 0x00200000 + FILE_OPEN_NO_RECALL = 0x00400000 + FILE_OPEN_FOR_FREE_SPACE_QUERY = 0x00800000 + + // Parameter constants for NtCreateNamedPipeFile. + + FILE_PIPE_BYTE_STREAM_TYPE = 0x00000000 + FILE_PIPE_MESSAGE_TYPE = 0x00000001 + + FILE_PIPE_ACCEPT_REMOTE_CLIENTS = 0x00000000 + FILE_PIPE_REJECT_REMOTE_CLIENTS = 0x00000002 + + FILE_PIPE_TYPE_VALID_MASK = 0x00000003 + + FILE_PIPE_BYTE_STREAM_MODE = 0x00000000 + FILE_PIPE_MESSAGE_MODE = 0x00000001 + + FILE_PIPE_QUEUE_OPERATION = 0x00000000 + FILE_PIPE_COMPLETE_OPERATION = 0x00000001 + + FILE_PIPE_INBOUND = 0x00000000 + FILE_PIPE_OUTBOUND = 0x00000001 + FILE_PIPE_FULL_DUPLEX = 0x00000002 + + FILE_PIPE_DISCONNECTED_STATE = 0x00000001 + FILE_PIPE_LISTENING_STATE = 0x00000002 + FILE_PIPE_CONNECTED_STATE = 0x00000003 + FILE_PIPE_CLOSING_STATE = 0x00000004 + + FILE_PIPE_CLIENT_END = 0x00000000 + FILE_PIPE_SERVER_END = 0x00000001 +) + +const ( + // FileInformationClass for NtSetInformationFile + FileBasicInformation = 4 + FileRenameInformation = 10 + FileDispositionInformation = 13 + FilePositionInformation = 14 + FileEndOfFileInformation = 20 + FileValidDataLengthInformation = 39 + FileShortNameInformation = 40 + FileIoPriorityHintInformation = 43 + FileReplaceCompletionInformation = 61 + FileDispositionInformationEx = 64 + FileCaseSensitiveInformation = 71 + FileLinkInformation = 72 + FileCaseSensitiveInformationForceAccessCheck = 75 + FileKnownFolderInformation = 76 + + // Flags for FILE_RENAME_INFORMATION + FILE_RENAME_REPLACE_IF_EXISTS = 0x00000001 + FILE_RENAME_POSIX_SEMANTICS = 0x00000002 + FILE_RENAME_SUPPRESS_PIN_STATE_INHERITANCE = 0x00000004 + FILE_RENAME_SUPPRESS_STORAGE_RESERVE_INHERITANCE = 0x00000008 + FILE_RENAME_NO_INCREASE_AVAILABLE_SPACE = 0x00000010 + FILE_RENAME_NO_DECREASE_AVAILABLE_SPACE = 0x00000020 + FILE_RENAME_PRESERVE_AVAILABLE_SPACE = 0x00000030 + FILE_RENAME_IGNORE_READONLY_ATTRIBUTE = 0x00000040 + FILE_RENAME_FORCE_RESIZE_TARGET_SR = 0x00000080 + FILE_RENAME_FORCE_RESIZE_SOURCE_SR = 0x00000100 + FILE_RENAME_FORCE_RESIZE_SR = 0x00000180 + + // Flags for FILE_DISPOSITION_INFORMATION_EX + FILE_DISPOSITION_DO_NOT_DELETE = 0x00000000 + FILE_DISPOSITION_DELETE = 0x00000001 + FILE_DISPOSITION_POSIX_SEMANTICS = 0x00000002 + FILE_DISPOSITION_FORCE_IMAGE_SECTION_CHECK = 0x00000004 + FILE_DISPOSITION_ON_CLOSE = 0x00000008 + FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE = 0x00000010 + + // Flags for FILE_CASE_SENSITIVE_INFORMATION + FILE_CS_FLAG_CASE_SENSITIVE_DIR = 0x00000001 + + // Flags for FILE_LINK_INFORMATION + FILE_LINK_REPLACE_IF_EXISTS = 0x00000001 + FILE_LINK_POSIX_SEMANTICS = 0x00000002 + FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE = 0x00000008 + FILE_LINK_NO_INCREASE_AVAILABLE_SPACE = 0x00000010 + FILE_LINK_NO_DECREASE_AVAILABLE_SPACE = 0x00000020 + FILE_LINK_PRESERVE_AVAILABLE_SPACE = 0x00000030 + FILE_LINK_IGNORE_READONLY_ATTRIBUTE = 0x00000040 + FILE_LINK_FORCE_RESIZE_TARGET_SR = 0x00000080 + FILE_LINK_FORCE_RESIZE_SOURCE_SR = 0x00000100 + FILE_LINK_FORCE_RESIZE_SR = 0x00000180 +) + +// ProcessInformationClasses for NtQueryInformationProcess and NtSetInformationProcess. +const ( + ProcessBasicInformation = iota + ProcessQuotaLimits + ProcessIoCounters + ProcessVmCounters + ProcessTimes + ProcessBasePriority + ProcessRaisePriority + ProcessDebugPort + ProcessExceptionPort + ProcessAccessToken + ProcessLdtInformation + ProcessLdtSize + ProcessDefaultHardErrorMode + ProcessIoPortHandlers + ProcessPooledUsageAndLimits + ProcessWorkingSetWatch + ProcessUserModeIOPL + ProcessEnableAlignmentFaultFixup + ProcessPriorityClass + ProcessWx86Information + ProcessHandleCount + ProcessAffinityMask + ProcessPriorityBoost + ProcessDeviceMap + ProcessSessionInformation + ProcessForegroundInformation + ProcessWow64Information + ProcessImageFileName + ProcessLUIDDeviceMapsEnabled + ProcessBreakOnTermination + ProcessDebugObjectHandle + ProcessDebugFlags + ProcessHandleTracing + ProcessIoPriority + ProcessExecuteFlags + ProcessTlsInformation + ProcessCookie + ProcessImageInformation + ProcessCycleTime + ProcessPagePriority + ProcessInstrumentationCallback + ProcessThreadStackAllocation + ProcessWorkingSetWatchEx + ProcessImageFileNameWin32 + ProcessImageFileMapping + ProcessAffinityUpdateMode + ProcessMemoryAllocationMode + ProcessGroupInformation + ProcessTokenVirtualizationEnabled + ProcessConsoleHostProcess + ProcessWindowInformation + ProcessHandleInformation + ProcessMitigationPolicy + ProcessDynamicFunctionTableInformation + ProcessHandleCheckingMode + ProcessKeepAliveCount + ProcessRevokeFileHandles + ProcessWorkingSetControl + ProcessHandleTable + ProcessCheckStackExtentsMode + ProcessCommandLineInformation + ProcessProtectionInformation + ProcessMemoryExhaustion + ProcessFaultInformation + ProcessTelemetryIdInformation + ProcessCommitReleaseInformation + ProcessDefaultCpuSetsInformation + ProcessAllowedCpuSetsInformation + ProcessSubsystemProcess + ProcessJobMemoryInformation + ProcessInPrivate + ProcessRaiseUMExceptionOnInvalidHandleClose + ProcessIumChallengeResponse + ProcessChildProcessInformation + ProcessHighGraphicsPriorityInformation + ProcessSubsystemInformation + ProcessEnergyValues + ProcessActivityThrottleState + ProcessActivityThrottlePolicy + ProcessWin32kSyscallFilterInformation + ProcessDisableSystemAllowedCpuSets + ProcessWakeInformation + ProcessEnergyTrackingState + ProcessManageWritesToExecutableMemory + ProcessCaptureTrustletLiveDump + ProcessTelemetryCoverage + ProcessEnclaveInformation + ProcessEnableReadWriteVmLogging + ProcessUptimeInformation + ProcessImageSection + ProcessDebugAuthInformation + ProcessSystemResourceManagement + ProcessSequenceNumber + ProcessLoaderDetour + ProcessSecurityDomainInformation + ProcessCombineSecurityDomainsInformation + ProcessEnableLogging + ProcessLeapSecondInformation + ProcessFiberShadowStackAllocation + ProcessFreeFiberShadowStackAllocation + ProcessAltSystemCallInformation + ProcessDynamicEHContinuationTargets + ProcessDynamicEnforcedCetCompatibleRanges +) + +type PROCESS_BASIC_INFORMATION struct { + ExitStatus NTStatus + PebBaseAddress *PEB + AffinityMask uintptr + BasePriority int32 + UniqueProcessId uintptr + InheritedFromUniqueProcessId uintptr +} + +type SYSTEM_PROCESS_INFORMATION struct { + NextEntryOffset uint32 + NumberOfThreads uint32 + WorkingSetPrivateSize int64 + HardFaultCount uint32 + NumberOfThreadsHighWatermark uint32 + CycleTime uint64 + CreateTime int64 + UserTime int64 + KernelTime int64 + ImageName NTUnicodeString + BasePriority int32 + UniqueProcessID uintptr + InheritedFromUniqueProcessID uintptr + HandleCount uint32 + SessionID uint32 + UniqueProcessKey *uint32 + PeakVirtualSize uintptr + VirtualSize uintptr + PageFaultCount uint32 + PeakWorkingSetSize uintptr + WorkingSetSize uintptr + QuotaPeakPagedPoolUsage uintptr + QuotaPagedPoolUsage uintptr + QuotaPeakNonPagedPoolUsage uintptr + QuotaNonPagedPoolUsage uintptr + PagefileUsage uintptr + PeakPagefileUsage uintptr + PrivatePageCount uintptr + ReadOperationCount int64 + WriteOperationCount int64 + OtherOperationCount int64 + ReadTransferCount int64 + WriteTransferCount int64 + OtherTransferCount int64 +} + +// SystemInformationClasses for NtQuerySystemInformation and NtSetSystemInformation +const ( + SystemBasicInformation = iota + SystemProcessorInformation + SystemPerformanceInformation + SystemTimeOfDayInformation + SystemPathInformation + SystemProcessInformation + SystemCallCountInformation + SystemDeviceInformation + SystemProcessorPerformanceInformation + SystemFlagsInformation + SystemCallTimeInformation + SystemModuleInformation + SystemLocksInformation + SystemStackTraceInformation + SystemPagedPoolInformation + SystemNonPagedPoolInformation + SystemHandleInformation + SystemObjectInformation + SystemPageFileInformation + SystemVdmInstemulInformation + SystemVdmBopInformation + SystemFileCacheInformation + SystemPoolTagInformation + SystemInterruptInformation + SystemDpcBehaviorInformation + SystemFullMemoryInformation + SystemLoadGdiDriverInformation + SystemUnloadGdiDriverInformation + SystemTimeAdjustmentInformation + SystemSummaryMemoryInformation + SystemMirrorMemoryInformation + SystemPerformanceTraceInformation + systemObsolete0 + SystemExceptionInformation + SystemCrashDumpStateInformation + SystemKernelDebuggerInformation + SystemContextSwitchInformation + SystemRegistryQuotaInformation + SystemExtendServiceTableInformation + SystemPrioritySeperation + SystemVerifierAddDriverInformation + SystemVerifierRemoveDriverInformation + SystemProcessorIdleInformation + SystemLegacyDriverInformation + SystemCurrentTimeZoneInformation + SystemLookasideInformation + SystemTimeSlipNotification + SystemSessionCreate + SystemSessionDetach + SystemSessionInformation + SystemRangeStartInformation + SystemVerifierInformation + SystemVerifierThunkExtend + SystemSessionProcessInformation + SystemLoadGdiDriverInSystemSpace + SystemNumaProcessorMap + SystemPrefetcherInformation + SystemExtendedProcessInformation + SystemRecommendedSharedDataAlignment + SystemComPlusPackage + SystemNumaAvailableMemory + SystemProcessorPowerInformation + SystemEmulationBasicInformation + SystemEmulationProcessorInformation + SystemExtendedHandleInformation + SystemLostDelayedWriteInformation + SystemBigPoolInformation + SystemSessionPoolTagInformation + SystemSessionMappedViewInformation + SystemHotpatchInformation + SystemObjectSecurityMode + SystemWatchdogTimerHandler + SystemWatchdogTimerInformation + SystemLogicalProcessorInformation + SystemWow64SharedInformationObsolete + SystemRegisterFirmwareTableInformationHandler + SystemFirmwareTableInformation + SystemModuleInformationEx + SystemVerifierTriageInformation + SystemSuperfetchInformation + SystemMemoryListInformation + SystemFileCacheInformationEx + SystemThreadPriorityClientIdInformation + SystemProcessorIdleCycleTimeInformation + SystemVerifierCancellationInformation + SystemProcessorPowerInformationEx + SystemRefTraceInformation + SystemSpecialPoolInformation + SystemProcessIdInformation + SystemErrorPortInformation + SystemBootEnvironmentInformation + SystemHypervisorInformation + SystemVerifierInformationEx + SystemTimeZoneInformation + SystemImageFileExecutionOptionsInformation + SystemCoverageInformation + SystemPrefetchPatchInformation + SystemVerifierFaultsInformation + SystemSystemPartitionInformation + SystemSystemDiskInformation + SystemProcessorPerformanceDistribution + SystemNumaProximityNodeInformation + SystemDynamicTimeZoneInformation + SystemCodeIntegrityInformation + SystemProcessorMicrocodeUpdateInformation + SystemProcessorBrandString + SystemVirtualAddressInformation + SystemLogicalProcessorAndGroupInformation + SystemProcessorCycleTimeInformation + SystemStoreInformation + SystemRegistryAppendString + SystemAitSamplingValue + SystemVhdBootInformation + SystemCpuQuotaInformation + SystemNativeBasicInformation + systemSpare1 + SystemLowPriorityIoInformation + SystemTpmBootEntropyInformation + SystemVerifierCountersInformation + SystemPagedPoolInformationEx + SystemSystemPtesInformationEx + SystemNodeDistanceInformation + SystemAcpiAuditInformation + SystemBasicPerformanceInformation + SystemQueryPerformanceCounterInformation + SystemSessionBigPoolInformation + SystemBootGraphicsInformation + SystemScrubPhysicalMemoryInformation + SystemBadPageInformation + SystemProcessorProfileControlArea + SystemCombinePhysicalMemoryInformation + SystemEntropyInterruptTimingCallback + SystemConsoleInformation + SystemPlatformBinaryInformation + SystemThrottleNotificationInformation + SystemHypervisorProcessorCountInformation + SystemDeviceDataInformation + SystemDeviceDataEnumerationInformation + SystemMemoryTopologyInformation + SystemMemoryChannelInformation + SystemBootLogoInformation + SystemProcessorPerformanceInformationEx + systemSpare0 + SystemSecureBootPolicyInformation + SystemPageFileInformationEx + SystemSecureBootInformation + SystemEntropyInterruptTimingRawInformation + SystemPortableWorkspaceEfiLauncherInformation + SystemFullProcessInformation + SystemKernelDebuggerInformationEx + SystemBootMetadataInformation + SystemSoftRebootInformation + SystemElamCertificateInformation + SystemOfflineDumpConfigInformation + SystemProcessorFeaturesInformation + SystemRegistryReconciliationInformation + SystemEdidInformation + SystemManufacturingInformation + SystemEnergyEstimationConfigInformation + SystemHypervisorDetailInformation + SystemProcessorCycleStatsInformation + SystemVmGenerationCountInformation + SystemTrustedPlatformModuleInformation + SystemKernelDebuggerFlags + SystemCodeIntegrityPolicyInformation + SystemIsolatedUserModeInformation + SystemHardwareSecurityTestInterfaceResultsInformation + SystemSingleModuleInformation + SystemAllowedCpuSetsInformation + SystemDmaProtectionInformation + SystemInterruptCpuSetsInformation + SystemSecureBootPolicyFullInformation + SystemCodeIntegrityPolicyFullInformation + SystemAffinitizedInterruptProcessorInformation + SystemRootSiloInformation +) + +type RTL_PROCESS_MODULE_INFORMATION struct { + Section Handle + MappedBase uintptr + ImageBase uintptr + ImageSize uint32 + Flags uint32 + LoadOrderIndex uint16 + InitOrderIndex uint16 + LoadCount uint16 + OffsetToFileName uint16 + FullPathName [256]byte +} + +type RTL_PROCESS_MODULES struct { + NumberOfModules uint32 + Modules [1]RTL_PROCESS_MODULE_INFORMATION +} + +// Constants for LocalAlloc flags. +const ( + LMEM_FIXED = 0x0 + LMEM_MOVEABLE = 0x2 + LMEM_NOCOMPACT = 0x10 + LMEM_NODISCARD = 0x20 + LMEM_ZEROINIT = 0x40 + LMEM_MODIFY = 0x80 + LMEM_DISCARDABLE = 0xf00 + LMEM_VALID_FLAGS = 0xf72 + LMEM_INVALID_HANDLE = 0x8000 + LHND = LMEM_MOVEABLE | LMEM_ZEROINIT + LPTR = LMEM_FIXED | LMEM_ZEROINIT + NONZEROLHND = LMEM_MOVEABLE + NONZEROLPTR = LMEM_FIXED +) + +// Constants for the CreateNamedPipe-family of functions. +const ( + PIPE_ACCESS_INBOUND = 0x1 + PIPE_ACCESS_OUTBOUND = 0x2 + PIPE_ACCESS_DUPLEX = 0x3 + + PIPE_CLIENT_END = 0x0 + PIPE_SERVER_END = 0x1 + + PIPE_WAIT = 0x0 + PIPE_NOWAIT = 0x1 + PIPE_READMODE_BYTE = 0x0 + PIPE_READMODE_MESSAGE = 0x2 + PIPE_TYPE_BYTE = 0x0 + PIPE_TYPE_MESSAGE = 0x4 + PIPE_ACCEPT_REMOTE_CLIENTS = 0x0 + PIPE_REJECT_REMOTE_CLIENTS = 0x8 + + PIPE_UNLIMITED_INSTANCES = 255 +) + +// Constants for security attributes when opening named pipes. +const ( + SECURITY_ANONYMOUS = SecurityAnonymous << 16 + SECURITY_IDENTIFICATION = SecurityIdentification << 16 + SECURITY_IMPERSONATION = SecurityImpersonation << 16 + SECURITY_DELEGATION = SecurityDelegation << 16 + + SECURITY_CONTEXT_TRACKING = 0x40000 + SECURITY_EFFECTIVE_ONLY = 0x80000 + + SECURITY_SQOS_PRESENT = 0x100000 + SECURITY_VALID_SQOS_FLAGS = 0x1f0000 +) + +// ResourceID represents a 16-bit resource identifier, traditionally created with the MAKEINTRESOURCE macro. +type ResourceID uint16 + +// ResourceIDOrString must be either a ResourceID, to specify a resource or resource type by ID, +// or a string, to specify a resource or resource type by name. +type ResourceIDOrString interface{} + +// Predefined resource names and types. +var ( + // Predefined names. + CREATEPROCESS_MANIFEST_RESOURCE_ID ResourceID = 1 + ISOLATIONAWARE_MANIFEST_RESOURCE_ID ResourceID = 2 + ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID ResourceID = 3 + ISOLATIONPOLICY_MANIFEST_RESOURCE_ID ResourceID = 4 + ISOLATIONPOLICY_BROWSER_MANIFEST_RESOURCE_ID ResourceID = 5 + MINIMUM_RESERVED_MANIFEST_RESOURCE_ID ResourceID = 1 // inclusive + MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID ResourceID = 16 // inclusive + + // Predefined types. + RT_CURSOR ResourceID = 1 + RT_BITMAP ResourceID = 2 + RT_ICON ResourceID = 3 + RT_MENU ResourceID = 4 + RT_DIALOG ResourceID = 5 + RT_STRING ResourceID = 6 + RT_FONTDIR ResourceID = 7 + RT_FONT ResourceID = 8 + RT_ACCELERATOR ResourceID = 9 + RT_RCDATA ResourceID = 10 + RT_MESSAGETABLE ResourceID = 11 + RT_GROUP_CURSOR ResourceID = 12 + RT_GROUP_ICON ResourceID = 14 + RT_VERSION ResourceID = 16 + RT_DLGINCLUDE ResourceID = 17 + RT_PLUGPLAY ResourceID = 19 + RT_VXD ResourceID = 20 + RT_ANICURSOR ResourceID = 21 + RT_ANIICON ResourceID = 22 + RT_HTML ResourceID = 23 + RT_MANIFEST ResourceID = 24 +) + +type VS_FIXEDFILEINFO struct { + Signature uint32 + StrucVersion uint32 + FileVersionMS uint32 + FileVersionLS uint32 + ProductVersionMS uint32 + ProductVersionLS uint32 + FileFlagsMask uint32 + FileFlags uint32 + FileOS uint32 + FileType uint32 + FileSubtype uint32 + FileDateMS uint32 + FileDateLS uint32 +} + +type COAUTHIDENTITY struct { + User *uint16 + UserLength uint32 + Domain *uint16 + DomainLength uint32 + Password *uint16 + PasswordLength uint32 + Flags uint32 +} + +type COAUTHINFO struct { + AuthnSvc uint32 + AuthzSvc uint32 + ServerPrincName *uint16 + AuthnLevel uint32 + ImpersonationLevel uint32 + AuthIdentityData *COAUTHIDENTITY + Capabilities uint32 +} + +type COSERVERINFO struct { + Reserved1 uint32 + Aame *uint16 + AuthInfo *COAUTHINFO + Reserved2 uint32 +} + +type BIND_OPTS3 struct { + CbStruct uint32 + Flags uint32 + Mode uint32 + TickCountDeadline uint32 + TrackFlags uint32 + ClassContext uint32 + Locale uint32 + ServerInfo *COSERVERINFO + Hwnd HWND +} + +const ( + CLSCTX_INPROC_SERVER = 0x1 + CLSCTX_INPROC_HANDLER = 0x2 + CLSCTX_LOCAL_SERVER = 0x4 + CLSCTX_INPROC_SERVER16 = 0x8 + CLSCTX_REMOTE_SERVER = 0x10 + CLSCTX_INPROC_HANDLER16 = 0x20 + CLSCTX_RESERVED1 = 0x40 + CLSCTX_RESERVED2 = 0x80 + CLSCTX_RESERVED3 = 0x100 + CLSCTX_RESERVED4 = 0x200 + CLSCTX_NO_CODE_DOWNLOAD = 0x400 + CLSCTX_RESERVED5 = 0x800 + CLSCTX_NO_CUSTOM_MARSHAL = 0x1000 + CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000 + CLSCTX_NO_FAILURE_LOG = 0x4000 + CLSCTX_DISABLE_AAA = 0x8000 + CLSCTX_ENABLE_AAA = 0x10000 + CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000 + CLSCTX_ACTIVATE_32_BIT_SERVER = 0x40000 + CLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000 + CLSCTX_ENABLE_CLOAKING = 0x100000 + CLSCTX_APPCONTAINER = 0x400000 + CLSCTX_ACTIVATE_AAA_AS_IU = 0x800000 + CLSCTX_PS_DLL = 0x80000000 + + COINIT_MULTITHREADED = 0x0 + COINIT_APARTMENTTHREADED = 0x2 + COINIT_DISABLE_OLE1DDE = 0x4 + COINIT_SPEED_OVER_MEMORY = 0x8 +) + +// Flag for QueryFullProcessImageName. +const PROCESS_NAME_NATIVE = 1 + +type ModuleInfo struct { + BaseOfDll uintptr + SizeOfImage uint32 + EntryPoint uintptr +} + +const ALL_PROCESSOR_GROUPS = 0xFFFF + +type Rect struct { + Left int32 + Top int32 + Right int32 + Bottom int32 +} + +type GUIThreadInfo struct { + Size uint32 + Flags uint32 + Active HWND + Focus HWND + Capture HWND + MenuOwner HWND + MoveSize HWND + CaretHandle HWND + CaretRect Rect +} + +const ( + DWMWA_NCRENDERING_ENABLED = 1 + DWMWA_NCRENDERING_POLICY = 2 + DWMWA_TRANSITIONS_FORCEDISABLED = 3 + DWMWA_ALLOW_NCPAINT = 4 + DWMWA_CAPTION_BUTTON_BOUNDS = 5 + DWMWA_NONCLIENT_RTL_LAYOUT = 6 + DWMWA_FORCE_ICONIC_REPRESENTATION = 7 + DWMWA_FLIP3D_POLICY = 8 + DWMWA_EXTENDED_FRAME_BOUNDS = 9 + DWMWA_HAS_ICONIC_BITMAP = 10 + DWMWA_DISALLOW_PEEK = 11 + DWMWA_EXCLUDED_FROM_PEEK = 12 + DWMWA_CLOAK = 13 + DWMWA_CLOAKED = 14 + DWMWA_FREEZE_REPRESENTATION = 15 + DWMWA_PASSIVE_UPDATE_MODE = 16 + DWMWA_USE_HOSTBACKDROPBRUSH = 17 + DWMWA_USE_IMMERSIVE_DARK_MODE = 20 + DWMWA_WINDOW_CORNER_PREFERENCE = 33 + DWMWA_BORDER_COLOR = 34 + DWMWA_CAPTION_COLOR = 35 + DWMWA_TEXT_COLOR = 36 + DWMWA_VISIBLE_FRAME_BORDER_THICKNESS = 37 +) + +type WSAQUERYSET struct { + Size uint32 + ServiceInstanceName *uint16 + ServiceClassId *GUID + Version *WSAVersion + Comment *uint16 + NameSpace uint32 + NSProviderId *GUID + Context *uint16 + NumberOfProtocols uint32 + AfpProtocols *AFProtocols + QueryString *uint16 + NumberOfCsAddrs uint32 + SaBuffer *CSAddrInfo + OutputFlags uint32 + Blob *BLOB +} + +type WSAVersion struct { + Version uint32 + EnumerationOfComparison int32 +} + +type AFProtocols struct { + AddressFamily int32 + Protocol int32 +} + +type CSAddrInfo struct { + LocalAddr SocketAddress + RemoteAddr SocketAddress + SocketType int32 + Protocol int32 +} + +type BLOB struct { + Size uint32 + BlobData *byte +} + +type ComStat struct { + Flags uint32 + CBInQue uint32 + CBOutQue uint32 +} + +type DCB struct { + DCBlength uint32 + BaudRate uint32 + Flags uint32 + wReserved uint16 + XonLim uint16 + XoffLim uint16 + ByteSize uint8 + Parity uint8 + StopBits uint8 + XonChar byte + XoffChar byte + ErrorChar byte + EofChar byte + EvtChar byte + wReserved1 uint16 +} + +// Keyboard Layout Flags. +// See https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-loadkeyboardlayoutw +const ( + KLF_ACTIVATE = 0x00000001 + KLF_SUBSTITUTE_OK = 0x00000002 + KLF_REORDER = 0x00000008 + KLF_REPLACELANG = 0x00000010 + KLF_NOTELLSHELL = 0x00000080 + KLF_SETFORPROCESS = 0x00000100 +) + +// Virtual Key codes +// https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes +const ( + VK_LBUTTON = 0x01 + VK_RBUTTON = 0x02 + VK_CANCEL = 0x03 + VK_MBUTTON = 0x04 + VK_XBUTTON1 = 0x05 + VK_XBUTTON2 = 0x06 + VK_BACK = 0x08 + VK_TAB = 0x09 + VK_CLEAR = 0x0C + VK_RETURN = 0x0D + VK_SHIFT = 0x10 + VK_CONTROL = 0x11 + VK_MENU = 0x12 + VK_PAUSE = 0x13 + VK_CAPITAL = 0x14 + VK_KANA = 0x15 + VK_HANGEUL = 0x15 + VK_HANGUL = 0x15 + VK_IME_ON = 0x16 + VK_JUNJA = 0x17 + VK_FINAL = 0x18 + VK_HANJA = 0x19 + VK_KANJI = 0x19 + VK_IME_OFF = 0x1A + VK_ESCAPE = 0x1B + VK_CONVERT = 0x1C + VK_NONCONVERT = 0x1D + VK_ACCEPT = 0x1E + VK_MODECHANGE = 0x1F + VK_SPACE = 0x20 + VK_PRIOR = 0x21 + VK_NEXT = 0x22 + VK_END = 0x23 + VK_HOME = 0x24 + VK_LEFT = 0x25 + VK_UP = 0x26 + VK_RIGHT = 0x27 + VK_DOWN = 0x28 + VK_SELECT = 0x29 + VK_PRINT = 0x2A + VK_EXECUTE = 0x2B + VK_SNAPSHOT = 0x2C + VK_INSERT = 0x2D + VK_DELETE = 0x2E + VK_HELP = 0x2F + VK_LWIN = 0x5B + VK_RWIN = 0x5C + VK_APPS = 0x5D + VK_SLEEP = 0x5F + VK_NUMPAD0 = 0x60 + VK_NUMPAD1 = 0x61 + VK_NUMPAD2 = 0x62 + VK_NUMPAD3 = 0x63 + VK_NUMPAD4 = 0x64 + VK_NUMPAD5 = 0x65 + VK_NUMPAD6 = 0x66 + VK_NUMPAD7 = 0x67 + VK_NUMPAD8 = 0x68 + VK_NUMPAD9 = 0x69 + VK_MULTIPLY = 0x6A + VK_ADD = 0x6B + VK_SEPARATOR = 0x6C + VK_SUBTRACT = 0x6D + VK_DECIMAL = 0x6E + VK_DIVIDE = 0x6F + VK_F1 = 0x70 + VK_F2 = 0x71 + VK_F3 = 0x72 + VK_F4 = 0x73 + VK_F5 = 0x74 + VK_F6 = 0x75 + VK_F7 = 0x76 + VK_F8 = 0x77 + VK_F9 = 0x78 + VK_F10 = 0x79 + VK_F11 = 0x7A + VK_F12 = 0x7B + VK_F13 = 0x7C + VK_F14 = 0x7D + VK_F15 = 0x7E + VK_F16 = 0x7F + VK_F17 = 0x80 + VK_F18 = 0x81 + VK_F19 = 0x82 + VK_F20 = 0x83 + VK_F21 = 0x84 + VK_F22 = 0x85 + VK_F23 = 0x86 + VK_F24 = 0x87 + VK_NUMLOCK = 0x90 + VK_SCROLL = 0x91 + VK_OEM_NEC_EQUAL = 0x92 + VK_OEM_FJ_JISHO = 0x92 + VK_OEM_FJ_MASSHOU = 0x93 + VK_OEM_FJ_TOUROKU = 0x94 + VK_OEM_FJ_LOYA = 0x95 + VK_OEM_FJ_ROYA = 0x96 + VK_LSHIFT = 0xA0 + VK_RSHIFT = 0xA1 + VK_LCONTROL = 0xA2 + VK_RCONTROL = 0xA3 + VK_LMENU = 0xA4 + VK_RMENU = 0xA5 + VK_BROWSER_BACK = 0xA6 + VK_BROWSER_FORWARD = 0xA7 + VK_BROWSER_REFRESH = 0xA8 + VK_BROWSER_STOP = 0xA9 + VK_BROWSER_SEARCH = 0xAA + VK_BROWSER_FAVORITES = 0xAB + VK_BROWSER_HOME = 0xAC + VK_VOLUME_MUTE = 0xAD + VK_VOLUME_DOWN = 0xAE + VK_VOLUME_UP = 0xAF + VK_MEDIA_NEXT_TRACK = 0xB0 + VK_MEDIA_PREV_TRACK = 0xB1 + VK_MEDIA_STOP = 0xB2 + VK_MEDIA_PLAY_PAUSE = 0xB3 + VK_LAUNCH_MAIL = 0xB4 + VK_LAUNCH_MEDIA_SELECT = 0xB5 + VK_LAUNCH_APP1 = 0xB6 + VK_LAUNCH_APP2 = 0xB7 + VK_OEM_1 = 0xBA + VK_OEM_PLUS = 0xBB + VK_OEM_COMMA = 0xBC + VK_OEM_MINUS = 0xBD + VK_OEM_PERIOD = 0xBE + VK_OEM_2 = 0xBF + VK_OEM_3 = 0xC0 + VK_OEM_4 = 0xDB + VK_OEM_5 = 0xDC + VK_OEM_6 = 0xDD + VK_OEM_7 = 0xDE + VK_OEM_8 = 0xDF + VK_OEM_AX = 0xE1 + VK_OEM_102 = 0xE2 + VK_ICO_HELP = 0xE3 + VK_ICO_00 = 0xE4 + VK_PROCESSKEY = 0xE5 + VK_ICO_CLEAR = 0xE6 + VK_OEM_RESET = 0xE9 + VK_OEM_JUMP = 0xEA + VK_OEM_PA1 = 0xEB + VK_OEM_PA2 = 0xEC + VK_OEM_PA3 = 0xED + VK_OEM_WSCTRL = 0xEE + VK_OEM_CUSEL = 0xEF + VK_OEM_ATTN = 0xF0 + VK_OEM_FINISH = 0xF1 + VK_OEM_COPY = 0xF2 + VK_OEM_AUTO = 0xF3 + VK_OEM_ENLW = 0xF4 + VK_OEM_BACKTAB = 0xF5 + VK_ATTN = 0xF6 + VK_CRSEL = 0xF7 + VK_EXSEL = 0xF8 + VK_EREOF = 0xF9 + VK_PLAY = 0xFA + VK_ZOOM = 0xFB + VK_NONAME = 0xFC + VK_PA1 = 0xFD + VK_OEM_CLEAR = 0xFE +) + +// Mouse button constants. +// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str +const ( + FROM_LEFT_1ST_BUTTON_PRESSED = 0x0001 + RIGHTMOST_BUTTON_PRESSED = 0x0002 + FROM_LEFT_2ND_BUTTON_PRESSED = 0x0004 + FROM_LEFT_3RD_BUTTON_PRESSED = 0x0008 + FROM_LEFT_4TH_BUTTON_PRESSED = 0x0010 +) + +// Control key state constaints. +// https://docs.microsoft.com/en-us/windows/console/key-event-record-str +// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str +const ( + CAPSLOCK_ON = 0x0080 + ENHANCED_KEY = 0x0100 + LEFT_ALT_PRESSED = 0x0002 + LEFT_CTRL_PRESSED = 0x0008 + NUMLOCK_ON = 0x0020 + RIGHT_ALT_PRESSED = 0x0001 + RIGHT_CTRL_PRESSED = 0x0004 + SCROLLLOCK_ON = 0x0040 + SHIFT_PRESSED = 0x0010 +) + +// Mouse event record event flags. +// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str +const ( + MOUSE_MOVED = 0x0001 + DOUBLE_CLICK = 0x0002 + MOUSE_WHEELED = 0x0004 + MOUSE_HWHEELED = 0x0008 +) + +// Input Record Event Types +// https://learn.microsoft.com/en-us/windows/console/input-record-str +const ( + FOCUS_EVENT = 0x0010 + KEY_EVENT = 0x0001 + MENU_EVENT = 0x0008 + MOUSE_EVENT = 0x0002 + WINDOW_BUFFER_SIZE_EVENT = 0x0004 +) diff --git a/vendor/golang.org/x/sys/windows/types_windows_386.go b/vendor/golang.org/x/sys/windows/types_windows_386.go new file mode 100644 index 0000000..8bce3e2 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows_386.go @@ -0,0 +1,35 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +type WSAData struct { + Version uint16 + HighVersion uint16 + Description [WSADESCRIPTION_LEN + 1]byte + SystemStatus [WSASYS_STATUS_LEN + 1]byte + MaxSockets uint16 + MaxUdpDg uint16 + VendorInfo *byte +} + +type Servent struct { + Name *byte + Aliases **byte + Port uint16 + Proto *byte +} + +type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { + PerProcessUserTimeLimit int64 + PerJobUserTimeLimit int64 + LimitFlags uint32 + MinimumWorkingSetSize uintptr + MaximumWorkingSetSize uintptr + ActiveProcessLimit uint32 + Affinity uintptr + PriorityClass uint32 + SchedulingClass uint32 + _ uint32 // pad to 8 byte boundary +} diff --git a/vendor/golang.org/x/sys/windows/types_windows_amd64.go b/vendor/golang.org/x/sys/windows/types_windows_amd64.go new file mode 100644 index 0000000..fdddc0c --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows_amd64.go @@ -0,0 +1,34 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +type WSAData struct { + Version uint16 + HighVersion uint16 + MaxSockets uint16 + MaxUdpDg uint16 + VendorInfo *byte + Description [WSADESCRIPTION_LEN + 1]byte + SystemStatus [WSASYS_STATUS_LEN + 1]byte +} + +type Servent struct { + Name *byte + Aliases **byte + Proto *byte + Port uint16 +} + +type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { + PerProcessUserTimeLimit int64 + PerJobUserTimeLimit int64 + LimitFlags uint32 + MinimumWorkingSetSize uintptr + MaximumWorkingSetSize uintptr + ActiveProcessLimit uint32 + Affinity uintptr + PriorityClass uint32 + SchedulingClass uint32 +} diff --git a/vendor/golang.org/x/sys/windows/types_windows_arm.go b/vendor/golang.org/x/sys/windows/types_windows_arm.go new file mode 100644 index 0000000..321872c --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows_arm.go @@ -0,0 +1,35 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +type WSAData struct { + Version uint16 + HighVersion uint16 + Description [WSADESCRIPTION_LEN + 1]byte + SystemStatus [WSASYS_STATUS_LEN + 1]byte + MaxSockets uint16 + MaxUdpDg uint16 + VendorInfo *byte +} + +type Servent struct { + Name *byte + Aliases **byte + Port uint16 + Proto *byte +} + +type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { + PerProcessUserTimeLimit int64 + PerJobUserTimeLimit int64 + LimitFlags uint32 + MinimumWorkingSetSize uintptr + MaximumWorkingSetSize uintptr + ActiveProcessLimit uint32 + Affinity uintptr + PriorityClass uint32 + SchedulingClass uint32 + _ uint32 // pad to 8 byte boundary +} diff --git a/vendor/golang.org/x/sys/windows/types_windows_arm64.go b/vendor/golang.org/x/sys/windows/types_windows_arm64.go new file mode 100644 index 0000000..fdddc0c --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows_arm64.go @@ -0,0 +1,34 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +type WSAData struct { + Version uint16 + HighVersion uint16 + MaxSockets uint16 + MaxUdpDg uint16 + VendorInfo *byte + Description [WSADESCRIPTION_LEN + 1]byte + SystemStatus [WSASYS_STATUS_LEN + 1]byte +} + +type Servent struct { + Name *byte + Aliases **byte + Proto *byte + Port uint16 +} + +type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { + PerProcessUserTimeLimit int64 + PerJobUserTimeLimit int64 + LimitFlags uint32 + MinimumWorkingSetSize uintptr + MaximumWorkingSetSize uintptr + ActiveProcessLimit uint32 + Affinity uintptr + PriorityClass uint32 + SchedulingClass uint32 +} diff --git a/vendor/golang.org/x/sys/windows/zerrors_windows.go b/vendor/golang.org/x/sys/windows/zerrors_windows.go new file mode 100644 index 0000000..0cf658f --- /dev/null +++ b/vendor/golang.org/x/sys/windows/zerrors_windows.go @@ -0,0 +1,9468 @@ +// Code generated by 'mkerrors.bash'; DO NOT EDIT. + +package windows + +import "syscall" + +const ( + FACILITY_NULL = 0 + FACILITY_RPC = 1 + FACILITY_DISPATCH = 2 + FACILITY_STORAGE = 3 + FACILITY_ITF = 4 + FACILITY_WIN32 = 7 + FACILITY_WINDOWS = 8 + FACILITY_SSPI = 9 + FACILITY_SECURITY = 9 + FACILITY_CONTROL = 10 + FACILITY_CERT = 11 + FACILITY_INTERNET = 12 + FACILITY_MEDIASERVER = 13 + FACILITY_MSMQ = 14 + FACILITY_SETUPAPI = 15 + FACILITY_SCARD = 16 + FACILITY_COMPLUS = 17 + FACILITY_AAF = 18 + FACILITY_URT = 19 + FACILITY_ACS = 20 + FACILITY_DPLAY = 21 + FACILITY_UMI = 22 + FACILITY_SXS = 23 + FACILITY_WINDOWS_CE = 24 + FACILITY_HTTP = 25 + FACILITY_USERMODE_COMMONLOG = 26 + FACILITY_WER = 27 + FACILITY_USERMODE_FILTER_MANAGER = 31 + FACILITY_BACKGROUNDCOPY = 32 + FACILITY_CONFIGURATION = 33 + FACILITY_WIA = 33 + FACILITY_STATE_MANAGEMENT = 34 + FACILITY_METADIRECTORY = 35 + FACILITY_WINDOWSUPDATE = 36 + FACILITY_DIRECTORYSERVICE = 37 + FACILITY_GRAPHICS = 38 + FACILITY_SHELL = 39 + FACILITY_NAP = 39 + FACILITY_TPM_SERVICES = 40 + FACILITY_TPM_SOFTWARE = 41 + FACILITY_UI = 42 + FACILITY_XAML = 43 + FACILITY_ACTION_QUEUE = 44 + FACILITY_PLA = 48 + FACILITY_WINDOWS_SETUP = 48 + FACILITY_FVE = 49 + FACILITY_FWP = 50 + FACILITY_WINRM = 51 + FACILITY_NDIS = 52 + FACILITY_USERMODE_HYPERVISOR = 53 + FACILITY_CMI = 54 + FACILITY_USERMODE_VIRTUALIZATION = 55 + FACILITY_USERMODE_VOLMGR = 56 + FACILITY_BCD = 57 + FACILITY_USERMODE_VHD = 58 + FACILITY_USERMODE_HNS = 59 + FACILITY_SDIAG = 60 + FACILITY_WEBSERVICES = 61 + FACILITY_WINPE = 61 + FACILITY_WPN = 62 + FACILITY_WINDOWS_STORE = 63 + FACILITY_INPUT = 64 + FACILITY_EAP = 66 + FACILITY_WINDOWS_DEFENDER = 80 + FACILITY_OPC = 81 + FACILITY_XPS = 82 + FACILITY_MBN = 84 + FACILITY_POWERSHELL = 84 + FACILITY_RAS = 83 + FACILITY_P2P_INT = 98 + FACILITY_P2P = 99 + FACILITY_DAF = 100 + FACILITY_BLUETOOTH_ATT = 101 + FACILITY_AUDIO = 102 + FACILITY_STATEREPOSITORY = 103 + FACILITY_VISUALCPP = 109 + FACILITY_SCRIPT = 112 + FACILITY_PARSE = 113 + FACILITY_BLB = 120 + FACILITY_BLB_CLI = 121 + FACILITY_WSBAPP = 122 + FACILITY_BLBUI = 128 + FACILITY_USN = 129 + FACILITY_USERMODE_VOLSNAP = 130 + FACILITY_TIERING = 131 + FACILITY_WSB_ONLINE = 133 + FACILITY_ONLINE_ID = 134 + FACILITY_DEVICE_UPDATE_AGENT = 135 + FACILITY_DRVSERVICING = 136 + FACILITY_DLS = 153 + FACILITY_DELIVERY_OPTIMIZATION = 208 + FACILITY_USERMODE_SPACES = 231 + FACILITY_USER_MODE_SECURITY_CORE = 232 + FACILITY_USERMODE_LICENSING = 234 + FACILITY_SOS = 160 + FACILITY_DEBUGGERS = 176 + FACILITY_SPP = 256 + FACILITY_RESTORE = 256 + FACILITY_DMSERVER = 256 + FACILITY_DEPLOYMENT_SERVICES_SERVER = 257 + FACILITY_DEPLOYMENT_SERVICES_IMAGING = 258 + FACILITY_DEPLOYMENT_SERVICES_MANAGEMENT = 259 + FACILITY_DEPLOYMENT_SERVICES_UTIL = 260 + FACILITY_DEPLOYMENT_SERVICES_BINLSVC = 261 + FACILITY_DEPLOYMENT_SERVICES_PXE = 263 + FACILITY_DEPLOYMENT_SERVICES_TFTP = 264 + FACILITY_DEPLOYMENT_SERVICES_TRANSPORT_MANAGEMENT = 272 + FACILITY_DEPLOYMENT_SERVICES_DRIVER_PROVISIONING = 278 + FACILITY_DEPLOYMENT_SERVICES_MULTICAST_SERVER = 289 + FACILITY_DEPLOYMENT_SERVICES_MULTICAST_CLIENT = 290 + FACILITY_DEPLOYMENT_SERVICES_CONTENT_PROVIDER = 293 + FACILITY_LINGUISTIC_SERVICES = 305 + FACILITY_AUDIOSTREAMING = 1094 + FACILITY_ACCELERATOR = 1536 + FACILITY_WMAAECMA = 1996 + FACILITY_DIRECTMUSIC = 2168 + FACILITY_DIRECT3D10 = 2169 + FACILITY_DXGI = 2170 + FACILITY_DXGI_DDI = 2171 + FACILITY_DIRECT3D11 = 2172 + FACILITY_DIRECT3D11_DEBUG = 2173 + FACILITY_DIRECT3D12 = 2174 + FACILITY_DIRECT3D12_DEBUG = 2175 + FACILITY_LEAP = 2184 + FACILITY_AUDCLNT = 2185 + FACILITY_WINCODEC_DWRITE_DWM = 2200 + FACILITY_WINML = 2192 + FACILITY_DIRECT2D = 2201 + FACILITY_DEFRAG = 2304 + FACILITY_USERMODE_SDBUS = 2305 + FACILITY_JSCRIPT = 2306 + FACILITY_PIDGENX = 2561 + FACILITY_EAS = 85 + FACILITY_WEB = 885 + FACILITY_WEB_SOCKET = 886 + FACILITY_MOBILE = 1793 + FACILITY_SQLITE = 1967 + FACILITY_UTC = 1989 + FACILITY_WEP = 2049 + FACILITY_SYNCENGINE = 2050 + FACILITY_XBOX = 2339 + FACILITY_GAME = 2340 + FACILITY_PIX = 2748 + ERROR_SUCCESS syscall.Errno = 0 + NO_ERROR = 0 + SEC_E_OK Handle = 0x00000000 + ERROR_INVALID_FUNCTION syscall.Errno = 1 + ERROR_FILE_NOT_FOUND syscall.Errno = 2 + ERROR_PATH_NOT_FOUND syscall.Errno = 3 + ERROR_TOO_MANY_OPEN_FILES syscall.Errno = 4 + ERROR_ACCESS_DENIED syscall.Errno = 5 + ERROR_INVALID_HANDLE syscall.Errno = 6 + ERROR_ARENA_TRASHED syscall.Errno = 7 + ERROR_NOT_ENOUGH_MEMORY syscall.Errno = 8 + ERROR_INVALID_BLOCK syscall.Errno = 9 + ERROR_BAD_ENVIRONMENT syscall.Errno = 10 + ERROR_BAD_FORMAT syscall.Errno = 11 + ERROR_INVALID_ACCESS syscall.Errno = 12 + ERROR_INVALID_DATA syscall.Errno = 13 + ERROR_OUTOFMEMORY syscall.Errno = 14 + ERROR_INVALID_DRIVE syscall.Errno = 15 + ERROR_CURRENT_DIRECTORY syscall.Errno = 16 + ERROR_NOT_SAME_DEVICE syscall.Errno = 17 + ERROR_NO_MORE_FILES syscall.Errno = 18 + ERROR_WRITE_PROTECT syscall.Errno = 19 + ERROR_BAD_UNIT syscall.Errno = 20 + ERROR_NOT_READY syscall.Errno = 21 + ERROR_BAD_COMMAND syscall.Errno = 22 + ERROR_CRC syscall.Errno = 23 + ERROR_BAD_LENGTH syscall.Errno = 24 + ERROR_SEEK syscall.Errno = 25 + ERROR_NOT_DOS_DISK syscall.Errno = 26 + ERROR_SECTOR_NOT_FOUND syscall.Errno = 27 + ERROR_OUT_OF_PAPER syscall.Errno = 28 + ERROR_WRITE_FAULT syscall.Errno = 29 + ERROR_READ_FAULT syscall.Errno = 30 + ERROR_GEN_FAILURE syscall.Errno = 31 + ERROR_SHARING_VIOLATION syscall.Errno = 32 + ERROR_LOCK_VIOLATION syscall.Errno = 33 + ERROR_WRONG_DISK syscall.Errno = 34 + ERROR_SHARING_BUFFER_EXCEEDED syscall.Errno = 36 + ERROR_HANDLE_EOF syscall.Errno = 38 + ERROR_HANDLE_DISK_FULL syscall.Errno = 39 + ERROR_NOT_SUPPORTED syscall.Errno = 50 + ERROR_REM_NOT_LIST syscall.Errno = 51 + ERROR_DUP_NAME syscall.Errno = 52 + ERROR_BAD_NETPATH syscall.Errno = 53 + ERROR_NETWORK_BUSY syscall.Errno = 54 + ERROR_DEV_NOT_EXIST syscall.Errno = 55 + ERROR_TOO_MANY_CMDS syscall.Errno = 56 + ERROR_ADAP_HDW_ERR syscall.Errno = 57 + ERROR_BAD_NET_RESP syscall.Errno = 58 + ERROR_UNEXP_NET_ERR syscall.Errno = 59 + ERROR_BAD_REM_ADAP syscall.Errno = 60 + ERROR_PRINTQ_FULL syscall.Errno = 61 + ERROR_NO_SPOOL_SPACE syscall.Errno = 62 + ERROR_PRINT_CANCELLED syscall.Errno = 63 + ERROR_NETNAME_DELETED syscall.Errno = 64 + ERROR_NETWORK_ACCESS_DENIED syscall.Errno = 65 + ERROR_BAD_DEV_TYPE syscall.Errno = 66 + ERROR_BAD_NET_NAME syscall.Errno = 67 + ERROR_TOO_MANY_NAMES syscall.Errno = 68 + ERROR_TOO_MANY_SESS syscall.Errno = 69 + ERROR_SHARING_PAUSED syscall.Errno = 70 + ERROR_REQ_NOT_ACCEP syscall.Errno = 71 + ERROR_REDIR_PAUSED syscall.Errno = 72 + ERROR_FILE_EXISTS syscall.Errno = 80 + ERROR_CANNOT_MAKE syscall.Errno = 82 + ERROR_FAIL_I24 syscall.Errno = 83 + ERROR_OUT_OF_STRUCTURES syscall.Errno = 84 + ERROR_ALREADY_ASSIGNED syscall.Errno = 85 + ERROR_INVALID_PASSWORD syscall.Errno = 86 + ERROR_INVALID_PARAMETER syscall.Errno = 87 + ERROR_NET_WRITE_FAULT syscall.Errno = 88 + ERROR_NO_PROC_SLOTS syscall.Errno = 89 + ERROR_TOO_MANY_SEMAPHORES syscall.Errno = 100 + ERROR_EXCL_SEM_ALREADY_OWNED syscall.Errno = 101 + ERROR_SEM_IS_SET syscall.Errno = 102 + ERROR_TOO_MANY_SEM_REQUESTS syscall.Errno = 103 + ERROR_INVALID_AT_INTERRUPT_TIME syscall.Errno = 104 + ERROR_SEM_OWNER_DIED syscall.Errno = 105 + ERROR_SEM_USER_LIMIT syscall.Errno = 106 + ERROR_DISK_CHANGE syscall.Errno = 107 + ERROR_DRIVE_LOCKED syscall.Errno = 108 + ERROR_BROKEN_PIPE syscall.Errno = 109 + ERROR_OPEN_FAILED syscall.Errno = 110 + ERROR_BUFFER_OVERFLOW syscall.Errno = 111 + ERROR_DISK_FULL syscall.Errno = 112 + ERROR_NO_MORE_SEARCH_HANDLES syscall.Errno = 113 + ERROR_INVALID_TARGET_HANDLE syscall.Errno = 114 + ERROR_INVALID_CATEGORY syscall.Errno = 117 + ERROR_INVALID_VERIFY_SWITCH syscall.Errno = 118 + ERROR_BAD_DRIVER_LEVEL syscall.Errno = 119 + ERROR_CALL_NOT_IMPLEMENTED syscall.Errno = 120 + ERROR_SEM_TIMEOUT syscall.Errno = 121 + ERROR_INSUFFICIENT_BUFFER syscall.Errno = 122 + ERROR_INVALID_NAME syscall.Errno = 123 + ERROR_INVALID_LEVEL syscall.Errno = 124 + ERROR_NO_VOLUME_LABEL syscall.Errno = 125 + ERROR_MOD_NOT_FOUND syscall.Errno = 126 + ERROR_PROC_NOT_FOUND syscall.Errno = 127 + ERROR_WAIT_NO_CHILDREN syscall.Errno = 128 + ERROR_CHILD_NOT_COMPLETE syscall.Errno = 129 + ERROR_DIRECT_ACCESS_HANDLE syscall.Errno = 130 + ERROR_NEGATIVE_SEEK syscall.Errno = 131 + ERROR_SEEK_ON_DEVICE syscall.Errno = 132 + ERROR_IS_JOIN_TARGET syscall.Errno = 133 + ERROR_IS_JOINED syscall.Errno = 134 + ERROR_IS_SUBSTED syscall.Errno = 135 + ERROR_NOT_JOINED syscall.Errno = 136 + ERROR_NOT_SUBSTED syscall.Errno = 137 + ERROR_JOIN_TO_JOIN syscall.Errno = 138 + ERROR_SUBST_TO_SUBST syscall.Errno = 139 + ERROR_JOIN_TO_SUBST syscall.Errno = 140 + ERROR_SUBST_TO_JOIN syscall.Errno = 141 + ERROR_BUSY_DRIVE syscall.Errno = 142 + ERROR_SAME_DRIVE syscall.Errno = 143 + ERROR_DIR_NOT_ROOT syscall.Errno = 144 + ERROR_DIR_NOT_EMPTY syscall.Errno = 145 + ERROR_IS_SUBST_PATH syscall.Errno = 146 + ERROR_IS_JOIN_PATH syscall.Errno = 147 + ERROR_PATH_BUSY syscall.Errno = 148 + ERROR_IS_SUBST_TARGET syscall.Errno = 149 + ERROR_SYSTEM_TRACE syscall.Errno = 150 + ERROR_INVALID_EVENT_COUNT syscall.Errno = 151 + ERROR_TOO_MANY_MUXWAITERS syscall.Errno = 152 + ERROR_INVALID_LIST_FORMAT syscall.Errno = 153 + ERROR_LABEL_TOO_LONG syscall.Errno = 154 + ERROR_TOO_MANY_TCBS syscall.Errno = 155 + ERROR_SIGNAL_REFUSED syscall.Errno = 156 + ERROR_DISCARDED syscall.Errno = 157 + ERROR_NOT_LOCKED syscall.Errno = 158 + ERROR_BAD_THREADID_ADDR syscall.Errno = 159 + ERROR_BAD_ARGUMENTS syscall.Errno = 160 + ERROR_BAD_PATHNAME syscall.Errno = 161 + ERROR_SIGNAL_PENDING syscall.Errno = 162 + ERROR_MAX_THRDS_REACHED syscall.Errno = 164 + ERROR_LOCK_FAILED syscall.Errno = 167 + ERROR_BUSY syscall.Errno = 170 + ERROR_DEVICE_SUPPORT_IN_PROGRESS syscall.Errno = 171 + ERROR_CANCEL_VIOLATION syscall.Errno = 173 + ERROR_ATOMIC_LOCKS_NOT_SUPPORTED syscall.Errno = 174 + ERROR_INVALID_SEGMENT_NUMBER syscall.Errno = 180 + ERROR_INVALID_ORDINAL syscall.Errno = 182 + ERROR_ALREADY_EXISTS syscall.Errno = 183 + ERROR_INVALID_FLAG_NUMBER syscall.Errno = 186 + ERROR_SEM_NOT_FOUND syscall.Errno = 187 + ERROR_INVALID_STARTING_CODESEG syscall.Errno = 188 + ERROR_INVALID_STACKSEG syscall.Errno = 189 + ERROR_INVALID_MODULETYPE syscall.Errno = 190 + ERROR_INVALID_EXE_SIGNATURE syscall.Errno = 191 + ERROR_EXE_MARKED_INVALID syscall.Errno = 192 + ERROR_BAD_EXE_FORMAT syscall.Errno = 193 + ERROR_ITERATED_DATA_EXCEEDS_64k syscall.Errno = 194 + ERROR_INVALID_MINALLOCSIZE syscall.Errno = 195 + ERROR_DYNLINK_FROM_INVALID_RING syscall.Errno = 196 + ERROR_IOPL_NOT_ENABLED syscall.Errno = 197 + ERROR_INVALID_SEGDPL syscall.Errno = 198 + ERROR_AUTODATASEG_EXCEEDS_64k syscall.Errno = 199 + ERROR_RING2SEG_MUST_BE_MOVABLE syscall.Errno = 200 + ERROR_RELOC_CHAIN_XEEDS_SEGLIM syscall.Errno = 201 + ERROR_INFLOOP_IN_RELOC_CHAIN syscall.Errno = 202 + ERROR_ENVVAR_NOT_FOUND syscall.Errno = 203 + ERROR_NO_SIGNAL_SENT syscall.Errno = 205 + ERROR_FILENAME_EXCED_RANGE syscall.Errno = 206 + ERROR_RING2_STACK_IN_USE syscall.Errno = 207 + ERROR_META_EXPANSION_TOO_LONG syscall.Errno = 208 + ERROR_INVALID_SIGNAL_NUMBER syscall.Errno = 209 + ERROR_THREAD_1_INACTIVE syscall.Errno = 210 + ERROR_LOCKED syscall.Errno = 212 + ERROR_TOO_MANY_MODULES syscall.Errno = 214 + ERROR_NESTING_NOT_ALLOWED syscall.Errno = 215 + ERROR_EXE_MACHINE_TYPE_MISMATCH syscall.Errno = 216 + ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY syscall.Errno = 217 + ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY syscall.Errno = 218 + ERROR_FILE_CHECKED_OUT syscall.Errno = 220 + ERROR_CHECKOUT_REQUIRED syscall.Errno = 221 + ERROR_BAD_FILE_TYPE syscall.Errno = 222 + ERROR_FILE_TOO_LARGE syscall.Errno = 223 + ERROR_FORMS_AUTH_REQUIRED syscall.Errno = 224 + ERROR_VIRUS_INFECTED syscall.Errno = 225 + ERROR_VIRUS_DELETED syscall.Errno = 226 + ERROR_PIPE_LOCAL syscall.Errno = 229 + ERROR_BAD_PIPE syscall.Errno = 230 + ERROR_PIPE_BUSY syscall.Errno = 231 + ERROR_NO_DATA syscall.Errno = 232 + ERROR_PIPE_NOT_CONNECTED syscall.Errno = 233 + ERROR_MORE_DATA syscall.Errno = 234 + ERROR_NO_WORK_DONE syscall.Errno = 235 + ERROR_VC_DISCONNECTED syscall.Errno = 240 + ERROR_INVALID_EA_NAME syscall.Errno = 254 + ERROR_EA_LIST_INCONSISTENT syscall.Errno = 255 + WAIT_TIMEOUT syscall.Errno = 258 + ERROR_NO_MORE_ITEMS syscall.Errno = 259 + ERROR_CANNOT_COPY syscall.Errno = 266 + ERROR_DIRECTORY syscall.Errno = 267 + ERROR_EAS_DIDNT_FIT syscall.Errno = 275 + ERROR_EA_FILE_CORRUPT syscall.Errno = 276 + ERROR_EA_TABLE_FULL syscall.Errno = 277 + ERROR_INVALID_EA_HANDLE syscall.Errno = 278 + ERROR_EAS_NOT_SUPPORTED syscall.Errno = 282 + ERROR_NOT_OWNER syscall.Errno = 288 + ERROR_TOO_MANY_POSTS syscall.Errno = 298 + ERROR_PARTIAL_COPY syscall.Errno = 299 + ERROR_OPLOCK_NOT_GRANTED syscall.Errno = 300 + ERROR_INVALID_OPLOCK_PROTOCOL syscall.Errno = 301 + ERROR_DISK_TOO_FRAGMENTED syscall.Errno = 302 + ERROR_DELETE_PENDING syscall.Errno = 303 + ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING syscall.Errno = 304 + ERROR_SHORT_NAMES_NOT_ENABLED_ON_VOLUME syscall.Errno = 305 + ERROR_SECURITY_STREAM_IS_INCONSISTENT syscall.Errno = 306 + ERROR_INVALID_LOCK_RANGE syscall.Errno = 307 + ERROR_IMAGE_SUBSYSTEM_NOT_PRESENT syscall.Errno = 308 + ERROR_NOTIFICATION_GUID_ALREADY_DEFINED syscall.Errno = 309 + ERROR_INVALID_EXCEPTION_HANDLER syscall.Errno = 310 + ERROR_DUPLICATE_PRIVILEGES syscall.Errno = 311 + ERROR_NO_RANGES_PROCESSED syscall.Errno = 312 + ERROR_NOT_ALLOWED_ON_SYSTEM_FILE syscall.Errno = 313 + ERROR_DISK_RESOURCES_EXHAUSTED syscall.Errno = 314 + ERROR_INVALID_TOKEN syscall.Errno = 315 + ERROR_DEVICE_FEATURE_NOT_SUPPORTED syscall.Errno = 316 + ERROR_MR_MID_NOT_FOUND syscall.Errno = 317 + ERROR_SCOPE_NOT_FOUND syscall.Errno = 318 + ERROR_UNDEFINED_SCOPE syscall.Errno = 319 + ERROR_INVALID_CAP syscall.Errno = 320 + ERROR_DEVICE_UNREACHABLE syscall.Errno = 321 + ERROR_DEVICE_NO_RESOURCES syscall.Errno = 322 + ERROR_DATA_CHECKSUM_ERROR syscall.Errno = 323 + ERROR_INTERMIXED_KERNEL_EA_OPERATION syscall.Errno = 324 + ERROR_FILE_LEVEL_TRIM_NOT_SUPPORTED syscall.Errno = 326 + ERROR_OFFSET_ALIGNMENT_VIOLATION syscall.Errno = 327 + ERROR_INVALID_FIELD_IN_PARAMETER_LIST syscall.Errno = 328 + ERROR_OPERATION_IN_PROGRESS syscall.Errno = 329 + ERROR_BAD_DEVICE_PATH syscall.Errno = 330 + ERROR_TOO_MANY_DESCRIPTORS syscall.Errno = 331 + ERROR_SCRUB_DATA_DISABLED syscall.Errno = 332 + ERROR_NOT_REDUNDANT_STORAGE syscall.Errno = 333 + ERROR_RESIDENT_FILE_NOT_SUPPORTED syscall.Errno = 334 + ERROR_COMPRESSED_FILE_NOT_SUPPORTED syscall.Errno = 335 + ERROR_DIRECTORY_NOT_SUPPORTED syscall.Errno = 336 + ERROR_NOT_READ_FROM_COPY syscall.Errno = 337 + ERROR_FT_WRITE_FAILURE syscall.Errno = 338 + ERROR_FT_DI_SCAN_REQUIRED syscall.Errno = 339 + ERROR_INVALID_KERNEL_INFO_VERSION syscall.Errno = 340 + ERROR_INVALID_PEP_INFO_VERSION syscall.Errno = 341 + ERROR_OBJECT_NOT_EXTERNALLY_BACKED syscall.Errno = 342 + ERROR_EXTERNAL_BACKING_PROVIDER_UNKNOWN syscall.Errno = 343 + ERROR_COMPRESSION_NOT_BENEFICIAL syscall.Errno = 344 + ERROR_STORAGE_TOPOLOGY_ID_MISMATCH syscall.Errno = 345 + ERROR_BLOCKED_BY_PARENTAL_CONTROLS syscall.Errno = 346 + ERROR_BLOCK_TOO_MANY_REFERENCES syscall.Errno = 347 + ERROR_MARKED_TO_DISALLOW_WRITES syscall.Errno = 348 + ERROR_ENCLAVE_FAILURE syscall.Errno = 349 + ERROR_FAIL_NOACTION_REBOOT syscall.Errno = 350 + ERROR_FAIL_SHUTDOWN syscall.Errno = 351 + ERROR_FAIL_RESTART syscall.Errno = 352 + ERROR_MAX_SESSIONS_REACHED syscall.Errno = 353 + ERROR_NETWORK_ACCESS_DENIED_EDP syscall.Errno = 354 + ERROR_DEVICE_HINT_NAME_BUFFER_TOO_SMALL syscall.Errno = 355 + ERROR_EDP_POLICY_DENIES_OPERATION syscall.Errno = 356 + ERROR_EDP_DPL_POLICY_CANT_BE_SATISFIED syscall.Errno = 357 + ERROR_CLOUD_FILE_SYNC_ROOT_METADATA_CORRUPT syscall.Errno = 358 + ERROR_DEVICE_IN_MAINTENANCE syscall.Errno = 359 + ERROR_NOT_SUPPORTED_ON_DAX syscall.Errno = 360 + ERROR_DAX_MAPPING_EXISTS syscall.Errno = 361 + ERROR_CLOUD_FILE_PROVIDER_NOT_RUNNING syscall.Errno = 362 + ERROR_CLOUD_FILE_METADATA_CORRUPT syscall.Errno = 363 + ERROR_CLOUD_FILE_METADATA_TOO_LARGE syscall.Errno = 364 + ERROR_CLOUD_FILE_PROPERTY_BLOB_TOO_LARGE syscall.Errno = 365 + ERROR_CLOUD_FILE_PROPERTY_BLOB_CHECKSUM_MISMATCH syscall.Errno = 366 + ERROR_CHILD_PROCESS_BLOCKED syscall.Errno = 367 + ERROR_STORAGE_LOST_DATA_PERSISTENCE syscall.Errno = 368 + ERROR_FILE_SYSTEM_VIRTUALIZATION_UNAVAILABLE syscall.Errno = 369 + ERROR_FILE_SYSTEM_VIRTUALIZATION_METADATA_CORRUPT syscall.Errno = 370 + ERROR_FILE_SYSTEM_VIRTUALIZATION_BUSY syscall.Errno = 371 + ERROR_FILE_SYSTEM_VIRTUALIZATION_PROVIDER_UNKNOWN syscall.Errno = 372 + ERROR_GDI_HANDLE_LEAK syscall.Errno = 373 + ERROR_CLOUD_FILE_TOO_MANY_PROPERTY_BLOBS syscall.Errno = 374 + ERROR_CLOUD_FILE_PROPERTY_VERSION_NOT_SUPPORTED syscall.Errno = 375 + ERROR_NOT_A_CLOUD_FILE syscall.Errno = 376 + ERROR_CLOUD_FILE_NOT_IN_SYNC syscall.Errno = 377 + ERROR_CLOUD_FILE_ALREADY_CONNECTED syscall.Errno = 378 + ERROR_CLOUD_FILE_NOT_SUPPORTED syscall.Errno = 379 + ERROR_CLOUD_FILE_INVALID_REQUEST syscall.Errno = 380 + ERROR_CLOUD_FILE_READ_ONLY_VOLUME syscall.Errno = 381 + ERROR_CLOUD_FILE_CONNECTED_PROVIDER_ONLY syscall.Errno = 382 + ERROR_CLOUD_FILE_VALIDATION_FAILED syscall.Errno = 383 + ERROR_SMB1_NOT_AVAILABLE syscall.Errno = 384 + ERROR_FILE_SYSTEM_VIRTUALIZATION_INVALID_OPERATION syscall.Errno = 385 + ERROR_CLOUD_FILE_AUTHENTICATION_FAILED syscall.Errno = 386 + ERROR_CLOUD_FILE_INSUFFICIENT_RESOURCES syscall.Errno = 387 + ERROR_CLOUD_FILE_NETWORK_UNAVAILABLE syscall.Errno = 388 + ERROR_CLOUD_FILE_UNSUCCESSFUL syscall.Errno = 389 + ERROR_CLOUD_FILE_NOT_UNDER_SYNC_ROOT syscall.Errno = 390 + ERROR_CLOUD_FILE_IN_USE syscall.Errno = 391 + ERROR_CLOUD_FILE_PINNED syscall.Errno = 392 + ERROR_CLOUD_FILE_REQUEST_ABORTED syscall.Errno = 393 + ERROR_CLOUD_FILE_PROPERTY_CORRUPT syscall.Errno = 394 + ERROR_CLOUD_FILE_ACCESS_DENIED syscall.Errno = 395 + ERROR_CLOUD_FILE_INCOMPATIBLE_HARDLINKS syscall.Errno = 396 + ERROR_CLOUD_FILE_PROPERTY_LOCK_CONFLICT syscall.Errno = 397 + ERROR_CLOUD_FILE_REQUEST_CANCELED syscall.Errno = 398 + ERROR_EXTERNAL_SYSKEY_NOT_SUPPORTED syscall.Errno = 399 + ERROR_THREAD_MODE_ALREADY_BACKGROUND syscall.Errno = 400 + ERROR_THREAD_MODE_NOT_BACKGROUND syscall.Errno = 401 + ERROR_PROCESS_MODE_ALREADY_BACKGROUND syscall.Errno = 402 + ERROR_PROCESS_MODE_NOT_BACKGROUND syscall.Errno = 403 + ERROR_CLOUD_FILE_PROVIDER_TERMINATED syscall.Errno = 404 + ERROR_NOT_A_CLOUD_SYNC_ROOT syscall.Errno = 405 + ERROR_FILE_PROTECTED_UNDER_DPL syscall.Errno = 406 + ERROR_VOLUME_NOT_CLUSTER_ALIGNED syscall.Errno = 407 + ERROR_NO_PHYSICALLY_ALIGNED_FREE_SPACE_FOUND syscall.Errno = 408 + ERROR_APPX_FILE_NOT_ENCRYPTED syscall.Errno = 409 + ERROR_RWRAW_ENCRYPTED_FILE_NOT_ENCRYPTED syscall.Errno = 410 + ERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILEOFFSET syscall.Errno = 411 + ERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILERANGE syscall.Errno = 412 + ERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_PARAMETER syscall.Errno = 413 + ERROR_LINUX_SUBSYSTEM_NOT_PRESENT syscall.Errno = 414 + ERROR_FT_READ_FAILURE syscall.Errno = 415 + ERROR_STORAGE_RESERVE_ID_INVALID syscall.Errno = 416 + ERROR_STORAGE_RESERVE_DOES_NOT_EXIST syscall.Errno = 417 + ERROR_STORAGE_RESERVE_ALREADY_EXISTS syscall.Errno = 418 + ERROR_STORAGE_RESERVE_NOT_EMPTY syscall.Errno = 419 + ERROR_NOT_A_DAX_VOLUME syscall.Errno = 420 + ERROR_NOT_DAX_MAPPABLE syscall.Errno = 421 + ERROR_TIME_SENSITIVE_THREAD syscall.Errno = 422 + ERROR_DPL_NOT_SUPPORTED_FOR_USER syscall.Errno = 423 + ERROR_CASE_DIFFERING_NAMES_IN_DIR syscall.Errno = 424 + ERROR_FILE_NOT_SUPPORTED syscall.Errno = 425 + ERROR_CLOUD_FILE_REQUEST_TIMEOUT syscall.Errno = 426 + ERROR_NO_TASK_QUEUE syscall.Errno = 427 + ERROR_SRC_SRV_DLL_LOAD_FAILED syscall.Errno = 428 + ERROR_NOT_SUPPORTED_WITH_BTT syscall.Errno = 429 + ERROR_ENCRYPTION_DISABLED syscall.Errno = 430 + ERROR_ENCRYPTING_METADATA_DISALLOWED syscall.Errno = 431 + ERROR_CANT_CLEAR_ENCRYPTION_FLAG syscall.Errno = 432 + ERROR_NO_SUCH_DEVICE syscall.Errno = 433 + ERROR_CAPAUTHZ_NOT_DEVUNLOCKED syscall.Errno = 450 + ERROR_CAPAUTHZ_CHANGE_TYPE syscall.Errno = 451 + ERROR_CAPAUTHZ_NOT_PROVISIONED syscall.Errno = 452 + ERROR_CAPAUTHZ_NOT_AUTHORIZED syscall.Errno = 453 + ERROR_CAPAUTHZ_NO_POLICY syscall.Errno = 454 + ERROR_CAPAUTHZ_DB_CORRUPTED syscall.Errno = 455 + ERROR_CAPAUTHZ_SCCD_INVALID_CATALOG syscall.Errno = 456 + ERROR_CAPAUTHZ_SCCD_NO_AUTH_ENTITY syscall.Errno = 457 + ERROR_CAPAUTHZ_SCCD_PARSE_ERROR syscall.Errno = 458 + ERROR_CAPAUTHZ_SCCD_DEV_MODE_REQUIRED syscall.Errno = 459 + ERROR_CAPAUTHZ_SCCD_NO_CAPABILITY_MATCH syscall.Errno = 460 + ERROR_PNP_QUERY_REMOVE_DEVICE_TIMEOUT syscall.Errno = 480 + ERROR_PNP_QUERY_REMOVE_RELATED_DEVICE_TIMEOUT syscall.Errno = 481 + ERROR_PNP_QUERY_REMOVE_UNRELATED_DEVICE_TIMEOUT syscall.Errno = 482 + ERROR_DEVICE_HARDWARE_ERROR syscall.Errno = 483 + ERROR_INVALID_ADDRESS syscall.Errno = 487 + ERROR_VRF_CFG_ENABLED syscall.Errno = 1183 + ERROR_PARTITION_TERMINATING syscall.Errno = 1184 + ERROR_USER_PROFILE_LOAD syscall.Errno = 500 + ERROR_ARITHMETIC_OVERFLOW syscall.Errno = 534 + ERROR_PIPE_CONNECTED syscall.Errno = 535 + ERROR_PIPE_LISTENING syscall.Errno = 536 + ERROR_VERIFIER_STOP syscall.Errno = 537 + ERROR_ABIOS_ERROR syscall.Errno = 538 + ERROR_WX86_WARNING syscall.Errno = 539 + ERROR_WX86_ERROR syscall.Errno = 540 + ERROR_TIMER_NOT_CANCELED syscall.Errno = 541 + ERROR_UNWIND syscall.Errno = 542 + ERROR_BAD_STACK syscall.Errno = 543 + ERROR_INVALID_UNWIND_TARGET syscall.Errno = 544 + ERROR_INVALID_PORT_ATTRIBUTES syscall.Errno = 545 + ERROR_PORT_MESSAGE_TOO_LONG syscall.Errno = 546 + ERROR_INVALID_QUOTA_LOWER syscall.Errno = 547 + ERROR_DEVICE_ALREADY_ATTACHED syscall.Errno = 548 + ERROR_INSTRUCTION_MISALIGNMENT syscall.Errno = 549 + ERROR_PROFILING_NOT_STARTED syscall.Errno = 550 + ERROR_PROFILING_NOT_STOPPED syscall.Errno = 551 + ERROR_COULD_NOT_INTERPRET syscall.Errno = 552 + ERROR_PROFILING_AT_LIMIT syscall.Errno = 553 + ERROR_CANT_WAIT syscall.Errno = 554 + ERROR_CANT_TERMINATE_SELF syscall.Errno = 555 + ERROR_UNEXPECTED_MM_CREATE_ERR syscall.Errno = 556 + ERROR_UNEXPECTED_MM_MAP_ERROR syscall.Errno = 557 + ERROR_UNEXPECTED_MM_EXTEND_ERR syscall.Errno = 558 + ERROR_BAD_FUNCTION_TABLE syscall.Errno = 559 + ERROR_NO_GUID_TRANSLATION syscall.Errno = 560 + ERROR_INVALID_LDT_SIZE syscall.Errno = 561 + ERROR_INVALID_LDT_OFFSET syscall.Errno = 563 + ERROR_INVALID_LDT_DESCRIPTOR syscall.Errno = 564 + ERROR_TOO_MANY_THREADS syscall.Errno = 565 + ERROR_THREAD_NOT_IN_PROCESS syscall.Errno = 566 + ERROR_PAGEFILE_QUOTA_EXCEEDED syscall.Errno = 567 + ERROR_LOGON_SERVER_CONFLICT syscall.Errno = 568 + ERROR_SYNCHRONIZATION_REQUIRED syscall.Errno = 569 + ERROR_NET_OPEN_FAILED syscall.Errno = 570 + ERROR_IO_PRIVILEGE_FAILED syscall.Errno = 571 + ERROR_CONTROL_C_EXIT syscall.Errno = 572 + ERROR_MISSING_SYSTEMFILE syscall.Errno = 573 + ERROR_UNHANDLED_EXCEPTION syscall.Errno = 574 + ERROR_APP_INIT_FAILURE syscall.Errno = 575 + ERROR_PAGEFILE_CREATE_FAILED syscall.Errno = 576 + ERROR_INVALID_IMAGE_HASH syscall.Errno = 577 + ERROR_NO_PAGEFILE syscall.Errno = 578 + ERROR_ILLEGAL_FLOAT_CONTEXT syscall.Errno = 579 + ERROR_NO_EVENT_PAIR syscall.Errno = 580 + ERROR_DOMAIN_CTRLR_CONFIG_ERROR syscall.Errno = 581 + ERROR_ILLEGAL_CHARACTER syscall.Errno = 582 + ERROR_UNDEFINED_CHARACTER syscall.Errno = 583 + ERROR_FLOPPY_VOLUME syscall.Errno = 584 + ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT syscall.Errno = 585 + ERROR_BACKUP_CONTROLLER syscall.Errno = 586 + ERROR_MUTANT_LIMIT_EXCEEDED syscall.Errno = 587 + ERROR_FS_DRIVER_REQUIRED syscall.Errno = 588 + ERROR_CANNOT_LOAD_REGISTRY_FILE syscall.Errno = 589 + ERROR_DEBUG_ATTACH_FAILED syscall.Errno = 590 + ERROR_SYSTEM_PROCESS_TERMINATED syscall.Errno = 591 + ERROR_DATA_NOT_ACCEPTED syscall.Errno = 592 + ERROR_VDM_HARD_ERROR syscall.Errno = 593 + ERROR_DRIVER_CANCEL_TIMEOUT syscall.Errno = 594 + ERROR_REPLY_MESSAGE_MISMATCH syscall.Errno = 595 + ERROR_LOST_WRITEBEHIND_DATA syscall.Errno = 596 + ERROR_CLIENT_SERVER_PARAMETERS_INVALID syscall.Errno = 597 + ERROR_NOT_TINY_STREAM syscall.Errno = 598 + ERROR_STACK_OVERFLOW_READ syscall.Errno = 599 + ERROR_CONVERT_TO_LARGE syscall.Errno = 600 + ERROR_FOUND_OUT_OF_SCOPE syscall.Errno = 601 + ERROR_ALLOCATE_BUCKET syscall.Errno = 602 + ERROR_MARSHALL_OVERFLOW syscall.Errno = 603 + ERROR_INVALID_VARIANT syscall.Errno = 604 + ERROR_BAD_COMPRESSION_BUFFER syscall.Errno = 605 + ERROR_AUDIT_FAILED syscall.Errno = 606 + ERROR_TIMER_RESOLUTION_NOT_SET syscall.Errno = 607 + ERROR_INSUFFICIENT_LOGON_INFO syscall.Errno = 608 + ERROR_BAD_DLL_ENTRYPOINT syscall.Errno = 609 + ERROR_BAD_SERVICE_ENTRYPOINT syscall.Errno = 610 + ERROR_IP_ADDRESS_CONFLICT1 syscall.Errno = 611 + ERROR_IP_ADDRESS_CONFLICT2 syscall.Errno = 612 + ERROR_REGISTRY_QUOTA_LIMIT syscall.Errno = 613 + ERROR_NO_CALLBACK_ACTIVE syscall.Errno = 614 + ERROR_PWD_TOO_SHORT syscall.Errno = 615 + ERROR_PWD_TOO_RECENT syscall.Errno = 616 + ERROR_PWD_HISTORY_CONFLICT syscall.Errno = 617 + ERROR_UNSUPPORTED_COMPRESSION syscall.Errno = 618 + ERROR_INVALID_HW_PROFILE syscall.Errno = 619 + ERROR_INVALID_PLUGPLAY_DEVICE_PATH syscall.Errno = 620 + ERROR_QUOTA_LIST_INCONSISTENT syscall.Errno = 621 + ERROR_EVALUATION_EXPIRATION syscall.Errno = 622 + ERROR_ILLEGAL_DLL_RELOCATION syscall.Errno = 623 + ERROR_DLL_INIT_FAILED_LOGOFF syscall.Errno = 624 + ERROR_VALIDATE_CONTINUE syscall.Errno = 625 + ERROR_NO_MORE_MATCHES syscall.Errno = 626 + ERROR_RANGE_LIST_CONFLICT syscall.Errno = 627 + ERROR_SERVER_SID_MISMATCH syscall.Errno = 628 + ERROR_CANT_ENABLE_DENY_ONLY syscall.Errno = 629 + ERROR_FLOAT_MULTIPLE_FAULTS syscall.Errno = 630 + ERROR_FLOAT_MULTIPLE_TRAPS syscall.Errno = 631 + ERROR_NOINTERFACE syscall.Errno = 632 + ERROR_DRIVER_FAILED_SLEEP syscall.Errno = 633 + ERROR_CORRUPT_SYSTEM_FILE syscall.Errno = 634 + ERROR_COMMITMENT_MINIMUM syscall.Errno = 635 + ERROR_PNP_RESTART_ENUMERATION syscall.Errno = 636 + ERROR_SYSTEM_IMAGE_BAD_SIGNATURE syscall.Errno = 637 + ERROR_PNP_REBOOT_REQUIRED syscall.Errno = 638 + ERROR_INSUFFICIENT_POWER syscall.Errno = 639 + ERROR_MULTIPLE_FAULT_VIOLATION syscall.Errno = 640 + ERROR_SYSTEM_SHUTDOWN syscall.Errno = 641 + ERROR_PORT_NOT_SET syscall.Errno = 642 + ERROR_DS_VERSION_CHECK_FAILURE syscall.Errno = 643 + ERROR_RANGE_NOT_FOUND syscall.Errno = 644 + ERROR_NOT_SAFE_MODE_DRIVER syscall.Errno = 646 + ERROR_FAILED_DRIVER_ENTRY syscall.Errno = 647 + ERROR_DEVICE_ENUMERATION_ERROR syscall.Errno = 648 + ERROR_MOUNT_POINT_NOT_RESOLVED syscall.Errno = 649 + ERROR_INVALID_DEVICE_OBJECT_PARAMETER syscall.Errno = 650 + ERROR_MCA_OCCURED syscall.Errno = 651 + ERROR_DRIVER_DATABASE_ERROR syscall.Errno = 652 + ERROR_SYSTEM_HIVE_TOO_LARGE syscall.Errno = 653 + ERROR_DRIVER_FAILED_PRIOR_UNLOAD syscall.Errno = 654 + ERROR_VOLSNAP_PREPARE_HIBERNATE syscall.Errno = 655 + ERROR_HIBERNATION_FAILURE syscall.Errno = 656 + ERROR_PWD_TOO_LONG syscall.Errno = 657 + ERROR_FILE_SYSTEM_LIMITATION syscall.Errno = 665 + ERROR_ASSERTION_FAILURE syscall.Errno = 668 + ERROR_ACPI_ERROR syscall.Errno = 669 + ERROR_WOW_ASSERTION syscall.Errno = 670 + ERROR_PNP_BAD_MPS_TABLE syscall.Errno = 671 + ERROR_PNP_TRANSLATION_FAILED syscall.Errno = 672 + ERROR_PNP_IRQ_TRANSLATION_FAILED syscall.Errno = 673 + ERROR_PNP_INVALID_ID syscall.Errno = 674 + ERROR_WAKE_SYSTEM_DEBUGGER syscall.Errno = 675 + ERROR_HANDLES_CLOSED syscall.Errno = 676 + ERROR_EXTRANEOUS_INFORMATION syscall.Errno = 677 + ERROR_RXACT_COMMIT_NECESSARY syscall.Errno = 678 + ERROR_MEDIA_CHECK syscall.Errno = 679 + ERROR_GUID_SUBSTITUTION_MADE syscall.Errno = 680 + ERROR_STOPPED_ON_SYMLINK syscall.Errno = 681 + ERROR_LONGJUMP syscall.Errno = 682 + ERROR_PLUGPLAY_QUERY_VETOED syscall.Errno = 683 + ERROR_UNWIND_CONSOLIDATE syscall.Errno = 684 + ERROR_REGISTRY_HIVE_RECOVERED syscall.Errno = 685 + ERROR_DLL_MIGHT_BE_INSECURE syscall.Errno = 686 + ERROR_DLL_MIGHT_BE_INCOMPATIBLE syscall.Errno = 687 + ERROR_DBG_EXCEPTION_NOT_HANDLED syscall.Errno = 688 + ERROR_DBG_REPLY_LATER syscall.Errno = 689 + ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE syscall.Errno = 690 + ERROR_DBG_TERMINATE_THREAD syscall.Errno = 691 + ERROR_DBG_TERMINATE_PROCESS syscall.Errno = 692 + ERROR_DBG_CONTROL_C syscall.Errno = 693 + ERROR_DBG_PRINTEXCEPTION_C syscall.Errno = 694 + ERROR_DBG_RIPEXCEPTION syscall.Errno = 695 + ERROR_DBG_CONTROL_BREAK syscall.Errno = 696 + ERROR_DBG_COMMAND_EXCEPTION syscall.Errno = 697 + ERROR_OBJECT_NAME_EXISTS syscall.Errno = 698 + ERROR_THREAD_WAS_SUSPENDED syscall.Errno = 699 + ERROR_IMAGE_NOT_AT_BASE syscall.Errno = 700 + ERROR_RXACT_STATE_CREATED syscall.Errno = 701 + ERROR_SEGMENT_NOTIFICATION syscall.Errno = 702 + ERROR_BAD_CURRENT_DIRECTORY syscall.Errno = 703 + ERROR_FT_READ_RECOVERY_FROM_BACKUP syscall.Errno = 704 + ERROR_FT_WRITE_RECOVERY syscall.Errno = 705 + ERROR_IMAGE_MACHINE_TYPE_MISMATCH syscall.Errno = 706 + ERROR_RECEIVE_PARTIAL syscall.Errno = 707 + ERROR_RECEIVE_EXPEDITED syscall.Errno = 708 + ERROR_RECEIVE_PARTIAL_EXPEDITED syscall.Errno = 709 + ERROR_EVENT_DONE syscall.Errno = 710 + ERROR_EVENT_PENDING syscall.Errno = 711 + ERROR_CHECKING_FILE_SYSTEM syscall.Errno = 712 + ERROR_FATAL_APP_EXIT syscall.Errno = 713 + ERROR_PREDEFINED_HANDLE syscall.Errno = 714 + ERROR_WAS_UNLOCKED syscall.Errno = 715 + ERROR_SERVICE_NOTIFICATION syscall.Errno = 716 + ERROR_WAS_LOCKED syscall.Errno = 717 + ERROR_LOG_HARD_ERROR syscall.Errno = 718 + ERROR_ALREADY_WIN32 syscall.Errno = 719 + ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE syscall.Errno = 720 + ERROR_NO_YIELD_PERFORMED syscall.Errno = 721 + ERROR_TIMER_RESUME_IGNORED syscall.Errno = 722 + ERROR_ARBITRATION_UNHANDLED syscall.Errno = 723 + ERROR_CARDBUS_NOT_SUPPORTED syscall.Errno = 724 + ERROR_MP_PROCESSOR_MISMATCH syscall.Errno = 725 + ERROR_HIBERNATED syscall.Errno = 726 + ERROR_RESUME_HIBERNATION syscall.Errno = 727 + ERROR_FIRMWARE_UPDATED syscall.Errno = 728 + ERROR_DRIVERS_LEAKING_LOCKED_PAGES syscall.Errno = 729 + ERROR_WAKE_SYSTEM syscall.Errno = 730 + ERROR_WAIT_1 syscall.Errno = 731 + ERROR_WAIT_2 syscall.Errno = 732 + ERROR_WAIT_3 syscall.Errno = 733 + ERROR_WAIT_63 syscall.Errno = 734 + ERROR_ABANDONED_WAIT_0 syscall.Errno = 735 + ERROR_ABANDONED_WAIT_63 syscall.Errno = 736 + ERROR_USER_APC syscall.Errno = 737 + ERROR_KERNEL_APC syscall.Errno = 738 + ERROR_ALERTED syscall.Errno = 739 + ERROR_ELEVATION_REQUIRED syscall.Errno = 740 + ERROR_REPARSE syscall.Errno = 741 + ERROR_OPLOCK_BREAK_IN_PROGRESS syscall.Errno = 742 + ERROR_VOLUME_MOUNTED syscall.Errno = 743 + ERROR_RXACT_COMMITTED syscall.Errno = 744 + ERROR_NOTIFY_CLEANUP syscall.Errno = 745 + ERROR_PRIMARY_TRANSPORT_CONNECT_FAILED syscall.Errno = 746 + ERROR_PAGE_FAULT_TRANSITION syscall.Errno = 747 + ERROR_PAGE_FAULT_DEMAND_ZERO syscall.Errno = 748 + ERROR_PAGE_FAULT_COPY_ON_WRITE syscall.Errno = 749 + ERROR_PAGE_FAULT_GUARD_PAGE syscall.Errno = 750 + ERROR_PAGE_FAULT_PAGING_FILE syscall.Errno = 751 + ERROR_CACHE_PAGE_LOCKED syscall.Errno = 752 + ERROR_CRASH_DUMP syscall.Errno = 753 + ERROR_BUFFER_ALL_ZEROS syscall.Errno = 754 + ERROR_REPARSE_OBJECT syscall.Errno = 755 + ERROR_RESOURCE_REQUIREMENTS_CHANGED syscall.Errno = 756 + ERROR_TRANSLATION_COMPLETE syscall.Errno = 757 + ERROR_NOTHING_TO_TERMINATE syscall.Errno = 758 + ERROR_PROCESS_NOT_IN_JOB syscall.Errno = 759 + ERROR_PROCESS_IN_JOB syscall.Errno = 760 + ERROR_VOLSNAP_HIBERNATE_READY syscall.Errno = 761 + ERROR_FSFILTER_OP_COMPLETED_SUCCESSFULLY syscall.Errno = 762 + ERROR_INTERRUPT_VECTOR_ALREADY_CONNECTED syscall.Errno = 763 + ERROR_INTERRUPT_STILL_CONNECTED syscall.Errno = 764 + ERROR_WAIT_FOR_OPLOCK syscall.Errno = 765 + ERROR_DBG_EXCEPTION_HANDLED syscall.Errno = 766 + ERROR_DBG_CONTINUE syscall.Errno = 767 + ERROR_CALLBACK_POP_STACK syscall.Errno = 768 + ERROR_COMPRESSION_DISABLED syscall.Errno = 769 + ERROR_CANTFETCHBACKWARDS syscall.Errno = 770 + ERROR_CANTSCROLLBACKWARDS syscall.Errno = 771 + ERROR_ROWSNOTRELEASED syscall.Errno = 772 + ERROR_BAD_ACCESSOR_FLAGS syscall.Errno = 773 + ERROR_ERRORS_ENCOUNTERED syscall.Errno = 774 + ERROR_NOT_CAPABLE syscall.Errno = 775 + ERROR_REQUEST_OUT_OF_SEQUENCE syscall.Errno = 776 + ERROR_VERSION_PARSE_ERROR syscall.Errno = 777 + ERROR_BADSTARTPOSITION syscall.Errno = 778 + ERROR_MEMORY_HARDWARE syscall.Errno = 779 + ERROR_DISK_REPAIR_DISABLED syscall.Errno = 780 + ERROR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE syscall.Errno = 781 + ERROR_SYSTEM_POWERSTATE_TRANSITION syscall.Errno = 782 + ERROR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION syscall.Errno = 783 + ERROR_MCA_EXCEPTION syscall.Errno = 784 + ERROR_ACCESS_AUDIT_BY_POLICY syscall.Errno = 785 + ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY syscall.Errno = 786 + ERROR_ABANDON_HIBERFILE syscall.Errno = 787 + ERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED syscall.Errno = 788 + ERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR syscall.Errno = 789 + ERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR syscall.Errno = 790 + ERROR_BAD_MCFG_TABLE syscall.Errno = 791 + ERROR_DISK_REPAIR_REDIRECTED syscall.Errno = 792 + ERROR_DISK_REPAIR_UNSUCCESSFUL syscall.Errno = 793 + ERROR_CORRUPT_LOG_OVERFULL syscall.Errno = 794 + ERROR_CORRUPT_LOG_CORRUPTED syscall.Errno = 795 + ERROR_CORRUPT_LOG_UNAVAILABLE syscall.Errno = 796 + ERROR_CORRUPT_LOG_DELETED_FULL syscall.Errno = 797 + ERROR_CORRUPT_LOG_CLEARED syscall.Errno = 798 + ERROR_ORPHAN_NAME_EXHAUSTED syscall.Errno = 799 + ERROR_OPLOCK_SWITCHED_TO_NEW_HANDLE syscall.Errno = 800 + ERROR_CANNOT_GRANT_REQUESTED_OPLOCK syscall.Errno = 801 + ERROR_CANNOT_BREAK_OPLOCK syscall.Errno = 802 + ERROR_OPLOCK_HANDLE_CLOSED syscall.Errno = 803 + ERROR_NO_ACE_CONDITION syscall.Errno = 804 + ERROR_INVALID_ACE_CONDITION syscall.Errno = 805 + ERROR_FILE_HANDLE_REVOKED syscall.Errno = 806 + ERROR_IMAGE_AT_DIFFERENT_BASE syscall.Errno = 807 + ERROR_ENCRYPTED_IO_NOT_POSSIBLE syscall.Errno = 808 + ERROR_FILE_METADATA_OPTIMIZATION_IN_PROGRESS syscall.Errno = 809 + ERROR_QUOTA_ACTIVITY syscall.Errno = 810 + ERROR_HANDLE_REVOKED syscall.Errno = 811 + ERROR_CALLBACK_INVOKE_INLINE syscall.Errno = 812 + ERROR_CPU_SET_INVALID syscall.Errno = 813 + ERROR_ENCLAVE_NOT_TERMINATED syscall.Errno = 814 + ERROR_ENCLAVE_VIOLATION syscall.Errno = 815 + ERROR_EA_ACCESS_DENIED syscall.Errno = 994 + ERROR_OPERATION_ABORTED syscall.Errno = 995 + ERROR_IO_INCOMPLETE syscall.Errno = 996 + ERROR_IO_PENDING syscall.Errno = 997 + ERROR_NOACCESS syscall.Errno = 998 + ERROR_SWAPERROR syscall.Errno = 999 + ERROR_STACK_OVERFLOW syscall.Errno = 1001 + ERROR_INVALID_MESSAGE syscall.Errno = 1002 + ERROR_CAN_NOT_COMPLETE syscall.Errno = 1003 + ERROR_INVALID_FLAGS syscall.Errno = 1004 + ERROR_UNRECOGNIZED_VOLUME syscall.Errno = 1005 + ERROR_FILE_INVALID syscall.Errno = 1006 + ERROR_FULLSCREEN_MODE syscall.Errno = 1007 + ERROR_NO_TOKEN syscall.Errno = 1008 + ERROR_BADDB syscall.Errno = 1009 + ERROR_BADKEY syscall.Errno = 1010 + ERROR_CANTOPEN syscall.Errno = 1011 + ERROR_CANTREAD syscall.Errno = 1012 + ERROR_CANTWRITE syscall.Errno = 1013 + ERROR_REGISTRY_RECOVERED syscall.Errno = 1014 + ERROR_REGISTRY_CORRUPT syscall.Errno = 1015 + ERROR_REGISTRY_IO_FAILED syscall.Errno = 1016 + ERROR_NOT_REGISTRY_FILE syscall.Errno = 1017 + ERROR_KEY_DELETED syscall.Errno = 1018 + ERROR_NO_LOG_SPACE syscall.Errno = 1019 + ERROR_KEY_HAS_CHILDREN syscall.Errno = 1020 + ERROR_CHILD_MUST_BE_VOLATILE syscall.Errno = 1021 + ERROR_NOTIFY_ENUM_DIR syscall.Errno = 1022 + ERROR_DEPENDENT_SERVICES_RUNNING syscall.Errno = 1051 + ERROR_INVALID_SERVICE_CONTROL syscall.Errno = 1052 + ERROR_SERVICE_REQUEST_TIMEOUT syscall.Errno = 1053 + ERROR_SERVICE_NO_THREAD syscall.Errno = 1054 + ERROR_SERVICE_DATABASE_LOCKED syscall.Errno = 1055 + ERROR_SERVICE_ALREADY_RUNNING syscall.Errno = 1056 + ERROR_INVALID_SERVICE_ACCOUNT syscall.Errno = 1057 + ERROR_SERVICE_DISABLED syscall.Errno = 1058 + ERROR_CIRCULAR_DEPENDENCY syscall.Errno = 1059 + ERROR_SERVICE_DOES_NOT_EXIST syscall.Errno = 1060 + ERROR_SERVICE_CANNOT_ACCEPT_CTRL syscall.Errno = 1061 + ERROR_SERVICE_NOT_ACTIVE syscall.Errno = 1062 + ERROR_FAILED_SERVICE_CONTROLLER_CONNECT syscall.Errno = 1063 + ERROR_EXCEPTION_IN_SERVICE syscall.Errno = 1064 + ERROR_DATABASE_DOES_NOT_EXIST syscall.Errno = 1065 + ERROR_SERVICE_SPECIFIC_ERROR syscall.Errno = 1066 + ERROR_PROCESS_ABORTED syscall.Errno = 1067 + ERROR_SERVICE_DEPENDENCY_FAIL syscall.Errno = 1068 + ERROR_SERVICE_LOGON_FAILED syscall.Errno = 1069 + ERROR_SERVICE_START_HANG syscall.Errno = 1070 + ERROR_INVALID_SERVICE_LOCK syscall.Errno = 1071 + ERROR_SERVICE_MARKED_FOR_DELETE syscall.Errno = 1072 + ERROR_SERVICE_EXISTS syscall.Errno = 1073 + ERROR_ALREADY_RUNNING_LKG syscall.Errno = 1074 + ERROR_SERVICE_DEPENDENCY_DELETED syscall.Errno = 1075 + ERROR_BOOT_ALREADY_ACCEPTED syscall.Errno = 1076 + ERROR_SERVICE_NEVER_STARTED syscall.Errno = 1077 + ERROR_DUPLICATE_SERVICE_NAME syscall.Errno = 1078 + ERROR_DIFFERENT_SERVICE_ACCOUNT syscall.Errno = 1079 + ERROR_CANNOT_DETECT_DRIVER_FAILURE syscall.Errno = 1080 + ERROR_CANNOT_DETECT_PROCESS_ABORT syscall.Errno = 1081 + ERROR_NO_RECOVERY_PROGRAM syscall.Errno = 1082 + ERROR_SERVICE_NOT_IN_EXE syscall.Errno = 1083 + ERROR_NOT_SAFEBOOT_SERVICE syscall.Errno = 1084 + ERROR_END_OF_MEDIA syscall.Errno = 1100 + ERROR_FILEMARK_DETECTED syscall.Errno = 1101 + ERROR_BEGINNING_OF_MEDIA syscall.Errno = 1102 + ERROR_SETMARK_DETECTED syscall.Errno = 1103 + ERROR_NO_DATA_DETECTED syscall.Errno = 1104 + ERROR_PARTITION_FAILURE syscall.Errno = 1105 + ERROR_INVALID_BLOCK_LENGTH syscall.Errno = 1106 + ERROR_DEVICE_NOT_PARTITIONED syscall.Errno = 1107 + ERROR_UNABLE_TO_LOCK_MEDIA syscall.Errno = 1108 + ERROR_UNABLE_TO_UNLOAD_MEDIA syscall.Errno = 1109 + ERROR_MEDIA_CHANGED syscall.Errno = 1110 + ERROR_BUS_RESET syscall.Errno = 1111 + ERROR_NO_MEDIA_IN_DRIVE syscall.Errno = 1112 + ERROR_NO_UNICODE_TRANSLATION syscall.Errno = 1113 + ERROR_DLL_INIT_FAILED syscall.Errno = 1114 + ERROR_SHUTDOWN_IN_PROGRESS syscall.Errno = 1115 + ERROR_NO_SHUTDOWN_IN_PROGRESS syscall.Errno = 1116 + ERROR_IO_DEVICE syscall.Errno = 1117 + ERROR_SERIAL_NO_DEVICE syscall.Errno = 1118 + ERROR_IRQ_BUSY syscall.Errno = 1119 + ERROR_MORE_WRITES syscall.Errno = 1120 + ERROR_COUNTER_TIMEOUT syscall.Errno = 1121 + ERROR_FLOPPY_ID_MARK_NOT_FOUND syscall.Errno = 1122 + ERROR_FLOPPY_WRONG_CYLINDER syscall.Errno = 1123 + ERROR_FLOPPY_UNKNOWN_ERROR syscall.Errno = 1124 + ERROR_FLOPPY_BAD_REGISTERS syscall.Errno = 1125 + ERROR_DISK_RECALIBRATE_FAILED syscall.Errno = 1126 + ERROR_DISK_OPERATION_FAILED syscall.Errno = 1127 + ERROR_DISK_RESET_FAILED syscall.Errno = 1128 + ERROR_EOM_OVERFLOW syscall.Errno = 1129 + ERROR_NOT_ENOUGH_SERVER_MEMORY syscall.Errno = 1130 + ERROR_POSSIBLE_DEADLOCK syscall.Errno = 1131 + ERROR_MAPPED_ALIGNMENT syscall.Errno = 1132 + ERROR_SET_POWER_STATE_VETOED syscall.Errno = 1140 + ERROR_SET_POWER_STATE_FAILED syscall.Errno = 1141 + ERROR_TOO_MANY_LINKS syscall.Errno = 1142 + ERROR_OLD_WIN_VERSION syscall.Errno = 1150 + ERROR_APP_WRONG_OS syscall.Errno = 1151 + ERROR_SINGLE_INSTANCE_APP syscall.Errno = 1152 + ERROR_RMODE_APP syscall.Errno = 1153 + ERROR_INVALID_DLL syscall.Errno = 1154 + ERROR_NO_ASSOCIATION syscall.Errno = 1155 + ERROR_DDE_FAIL syscall.Errno = 1156 + ERROR_DLL_NOT_FOUND syscall.Errno = 1157 + ERROR_NO_MORE_USER_HANDLES syscall.Errno = 1158 + ERROR_MESSAGE_SYNC_ONLY syscall.Errno = 1159 + ERROR_SOURCE_ELEMENT_EMPTY syscall.Errno = 1160 + ERROR_DESTINATION_ELEMENT_FULL syscall.Errno = 1161 + ERROR_ILLEGAL_ELEMENT_ADDRESS syscall.Errno = 1162 + ERROR_MAGAZINE_NOT_PRESENT syscall.Errno = 1163 + ERROR_DEVICE_REINITIALIZATION_NEEDED syscall.Errno = 1164 + ERROR_DEVICE_REQUIRES_CLEANING syscall.Errno = 1165 + ERROR_DEVICE_DOOR_OPEN syscall.Errno = 1166 + ERROR_DEVICE_NOT_CONNECTED syscall.Errno = 1167 + ERROR_NOT_FOUND syscall.Errno = 1168 + ERROR_NO_MATCH syscall.Errno = 1169 + ERROR_SET_NOT_FOUND syscall.Errno = 1170 + ERROR_POINT_NOT_FOUND syscall.Errno = 1171 + ERROR_NO_TRACKING_SERVICE syscall.Errno = 1172 + ERROR_NO_VOLUME_ID syscall.Errno = 1173 + ERROR_UNABLE_TO_REMOVE_REPLACED syscall.Errno = 1175 + ERROR_UNABLE_TO_MOVE_REPLACEMENT syscall.Errno = 1176 + ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 syscall.Errno = 1177 + ERROR_JOURNAL_DELETE_IN_PROGRESS syscall.Errno = 1178 + ERROR_JOURNAL_NOT_ACTIVE syscall.Errno = 1179 + ERROR_POTENTIAL_FILE_FOUND syscall.Errno = 1180 + ERROR_JOURNAL_ENTRY_DELETED syscall.Errno = 1181 + ERROR_SHUTDOWN_IS_SCHEDULED syscall.Errno = 1190 + ERROR_SHUTDOWN_USERS_LOGGED_ON syscall.Errno = 1191 + ERROR_BAD_DEVICE syscall.Errno = 1200 + ERROR_CONNECTION_UNAVAIL syscall.Errno = 1201 + ERROR_DEVICE_ALREADY_REMEMBERED syscall.Errno = 1202 + ERROR_NO_NET_OR_BAD_PATH syscall.Errno = 1203 + ERROR_BAD_PROVIDER syscall.Errno = 1204 + ERROR_CANNOT_OPEN_PROFILE syscall.Errno = 1205 + ERROR_BAD_PROFILE syscall.Errno = 1206 + ERROR_NOT_CONTAINER syscall.Errno = 1207 + ERROR_EXTENDED_ERROR syscall.Errno = 1208 + ERROR_INVALID_GROUPNAME syscall.Errno = 1209 + ERROR_INVALID_COMPUTERNAME syscall.Errno = 1210 + ERROR_INVALID_EVENTNAME syscall.Errno = 1211 + ERROR_INVALID_DOMAINNAME syscall.Errno = 1212 + ERROR_INVALID_SERVICENAME syscall.Errno = 1213 + ERROR_INVALID_NETNAME syscall.Errno = 1214 + ERROR_INVALID_SHARENAME syscall.Errno = 1215 + ERROR_INVALID_PASSWORDNAME syscall.Errno = 1216 + ERROR_INVALID_MESSAGENAME syscall.Errno = 1217 + ERROR_INVALID_MESSAGEDEST syscall.Errno = 1218 + ERROR_SESSION_CREDENTIAL_CONFLICT syscall.Errno = 1219 + ERROR_REMOTE_SESSION_LIMIT_EXCEEDED syscall.Errno = 1220 + ERROR_DUP_DOMAINNAME syscall.Errno = 1221 + ERROR_NO_NETWORK syscall.Errno = 1222 + ERROR_CANCELLED syscall.Errno = 1223 + ERROR_USER_MAPPED_FILE syscall.Errno = 1224 + ERROR_CONNECTION_REFUSED syscall.Errno = 1225 + ERROR_GRACEFUL_DISCONNECT syscall.Errno = 1226 + ERROR_ADDRESS_ALREADY_ASSOCIATED syscall.Errno = 1227 + ERROR_ADDRESS_NOT_ASSOCIATED syscall.Errno = 1228 + ERROR_CONNECTION_INVALID syscall.Errno = 1229 + ERROR_CONNECTION_ACTIVE syscall.Errno = 1230 + ERROR_NETWORK_UNREACHABLE syscall.Errno = 1231 + ERROR_HOST_UNREACHABLE syscall.Errno = 1232 + ERROR_PROTOCOL_UNREACHABLE syscall.Errno = 1233 + ERROR_PORT_UNREACHABLE syscall.Errno = 1234 + ERROR_REQUEST_ABORTED syscall.Errno = 1235 + ERROR_CONNECTION_ABORTED syscall.Errno = 1236 + ERROR_RETRY syscall.Errno = 1237 + ERROR_CONNECTION_COUNT_LIMIT syscall.Errno = 1238 + ERROR_LOGIN_TIME_RESTRICTION syscall.Errno = 1239 + ERROR_LOGIN_WKSTA_RESTRICTION syscall.Errno = 1240 + ERROR_INCORRECT_ADDRESS syscall.Errno = 1241 + ERROR_ALREADY_REGISTERED syscall.Errno = 1242 + ERROR_SERVICE_NOT_FOUND syscall.Errno = 1243 + ERROR_NOT_AUTHENTICATED syscall.Errno = 1244 + ERROR_NOT_LOGGED_ON syscall.Errno = 1245 + ERROR_CONTINUE syscall.Errno = 1246 + ERROR_ALREADY_INITIALIZED syscall.Errno = 1247 + ERROR_NO_MORE_DEVICES syscall.Errno = 1248 + ERROR_NO_SUCH_SITE syscall.Errno = 1249 + ERROR_DOMAIN_CONTROLLER_EXISTS syscall.Errno = 1250 + ERROR_ONLY_IF_CONNECTED syscall.Errno = 1251 + ERROR_OVERRIDE_NOCHANGES syscall.Errno = 1252 + ERROR_BAD_USER_PROFILE syscall.Errno = 1253 + ERROR_NOT_SUPPORTED_ON_SBS syscall.Errno = 1254 + ERROR_SERVER_SHUTDOWN_IN_PROGRESS syscall.Errno = 1255 + ERROR_HOST_DOWN syscall.Errno = 1256 + ERROR_NON_ACCOUNT_SID syscall.Errno = 1257 + ERROR_NON_DOMAIN_SID syscall.Errno = 1258 + ERROR_APPHELP_BLOCK syscall.Errno = 1259 + ERROR_ACCESS_DISABLED_BY_POLICY syscall.Errno = 1260 + ERROR_REG_NAT_CONSUMPTION syscall.Errno = 1261 + ERROR_CSCSHARE_OFFLINE syscall.Errno = 1262 + ERROR_PKINIT_FAILURE syscall.Errno = 1263 + ERROR_SMARTCARD_SUBSYSTEM_FAILURE syscall.Errno = 1264 + ERROR_DOWNGRADE_DETECTED syscall.Errno = 1265 + ERROR_MACHINE_LOCKED syscall.Errno = 1271 + ERROR_SMB_GUEST_LOGON_BLOCKED syscall.Errno = 1272 + ERROR_CALLBACK_SUPPLIED_INVALID_DATA syscall.Errno = 1273 + ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED syscall.Errno = 1274 + ERROR_DRIVER_BLOCKED syscall.Errno = 1275 + ERROR_INVALID_IMPORT_OF_NON_DLL syscall.Errno = 1276 + ERROR_ACCESS_DISABLED_WEBBLADE syscall.Errno = 1277 + ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER syscall.Errno = 1278 + ERROR_RECOVERY_FAILURE syscall.Errno = 1279 + ERROR_ALREADY_FIBER syscall.Errno = 1280 + ERROR_ALREADY_THREAD syscall.Errno = 1281 + ERROR_STACK_BUFFER_OVERRUN syscall.Errno = 1282 + ERROR_PARAMETER_QUOTA_EXCEEDED syscall.Errno = 1283 + ERROR_DEBUGGER_INACTIVE syscall.Errno = 1284 + ERROR_DELAY_LOAD_FAILED syscall.Errno = 1285 + ERROR_VDM_DISALLOWED syscall.Errno = 1286 + ERROR_UNIDENTIFIED_ERROR syscall.Errno = 1287 + ERROR_INVALID_CRUNTIME_PARAMETER syscall.Errno = 1288 + ERROR_BEYOND_VDL syscall.Errno = 1289 + ERROR_INCOMPATIBLE_SERVICE_SID_TYPE syscall.Errno = 1290 + ERROR_DRIVER_PROCESS_TERMINATED syscall.Errno = 1291 + ERROR_IMPLEMENTATION_LIMIT syscall.Errno = 1292 + ERROR_PROCESS_IS_PROTECTED syscall.Errno = 1293 + ERROR_SERVICE_NOTIFY_CLIENT_LAGGING syscall.Errno = 1294 + ERROR_DISK_QUOTA_EXCEEDED syscall.Errno = 1295 + ERROR_CONTENT_BLOCKED syscall.Errno = 1296 + ERROR_INCOMPATIBLE_SERVICE_PRIVILEGE syscall.Errno = 1297 + ERROR_APP_HANG syscall.Errno = 1298 + ERROR_INVALID_LABEL syscall.Errno = 1299 + ERROR_NOT_ALL_ASSIGNED syscall.Errno = 1300 + ERROR_SOME_NOT_MAPPED syscall.Errno = 1301 + ERROR_NO_QUOTAS_FOR_ACCOUNT syscall.Errno = 1302 + ERROR_LOCAL_USER_SESSION_KEY syscall.Errno = 1303 + ERROR_NULL_LM_PASSWORD syscall.Errno = 1304 + ERROR_UNKNOWN_REVISION syscall.Errno = 1305 + ERROR_REVISION_MISMATCH syscall.Errno = 1306 + ERROR_INVALID_OWNER syscall.Errno = 1307 + ERROR_INVALID_PRIMARY_GROUP syscall.Errno = 1308 + ERROR_NO_IMPERSONATION_TOKEN syscall.Errno = 1309 + ERROR_CANT_DISABLE_MANDATORY syscall.Errno = 1310 + ERROR_NO_LOGON_SERVERS syscall.Errno = 1311 + ERROR_NO_SUCH_LOGON_SESSION syscall.Errno = 1312 + ERROR_NO_SUCH_PRIVILEGE syscall.Errno = 1313 + ERROR_PRIVILEGE_NOT_HELD syscall.Errno = 1314 + ERROR_INVALID_ACCOUNT_NAME syscall.Errno = 1315 + ERROR_USER_EXISTS syscall.Errno = 1316 + ERROR_NO_SUCH_USER syscall.Errno = 1317 + ERROR_GROUP_EXISTS syscall.Errno = 1318 + ERROR_NO_SUCH_GROUP syscall.Errno = 1319 + ERROR_MEMBER_IN_GROUP syscall.Errno = 1320 + ERROR_MEMBER_NOT_IN_GROUP syscall.Errno = 1321 + ERROR_LAST_ADMIN syscall.Errno = 1322 + ERROR_WRONG_PASSWORD syscall.Errno = 1323 + ERROR_ILL_FORMED_PASSWORD syscall.Errno = 1324 + ERROR_PASSWORD_RESTRICTION syscall.Errno = 1325 + ERROR_LOGON_FAILURE syscall.Errno = 1326 + ERROR_ACCOUNT_RESTRICTION syscall.Errno = 1327 + ERROR_INVALID_LOGON_HOURS syscall.Errno = 1328 + ERROR_INVALID_WORKSTATION syscall.Errno = 1329 + ERROR_PASSWORD_EXPIRED syscall.Errno = 1330 + ERROR_ACCOUNT_DISABLED syscall.Errno = 1331 + ERROR_NONE_MAPPED syscall.Errno = 1332 + ERROR_TOO_MANY_LUIDS_REQUESTED syscall.Errno = 1333 + ERROR_LUIDS_EXHAUSTED syscall.Errno = 1334 + ERROR_INVALID_SUB_AUTHORITY syscall.Errno = 1335 + ERROR_INVALID_ACL syscall.Errno = 1336 + ERROR_INVALID_SID syscall.Errno = 1337 + ERROR_INVALID_SECURITY_DESCR syscall.Errno = 1338 + ERROR_BAD_INHERITANCE_ACL syscall.Errno = 1340 + ERROR_SERVER_DISABLED syscall.Errno = 1341 + ERROR_SERVER_NOT_DISABLED syscall.Errno = 1342 + ERROR_INVALID_ID_AUTHORITY syscall.Errno = 1343 + ERROR_ALLOTTED_SPACE_EXCEEDED syscall.Errno = 1344 + ERROR_INVALID_GROUP_ATTRIBUTES syscall.Errno = 1345 + ERROR_BAD_IMPERSONATION_LEVEL syscall.Errno = 1346 + ERROR_CANT_OPEN_ANONYMOUS syscall.Errno = 1347 + ERROR_BAD_VALIDATION_CLASS syscall.Errno = 1348 + ERROR_BAD_TOKEN_TYPE syscall.Errno = 1349 + ERROR_NO_SECURITY_ON_OBJECT syscall.Errno = 1350 + ERROR_CANT_ACCESS_DOMAIN_INFO syscall.Errno = 1351 + ERROR_INVALID_SERVER_STATE syscall.Errno = 1352 + ERROR_INVALID_DOMAIN_STATE syscall.Errno = 1353 + ERROR_INVALID_DOMAIN_ROLE syscall.Errno = 1354 + ERROR_NO_SUCH_DOMAIN syscall.Errno = 1355 + ERROR_DOMAIN_EXISTS syscall.Errno = 1356 + ERROR_DOMAIN_LIMIT_EXCEEDED syscall.Errno = 1357 + ERROR_INTERNAL_DB_CORRUPTION syscall.Errno = 1358 + ERROR_INTERNAL_ERROR syscall.Errno = 1359 + ERROR_GENERIC_NOT_MAPPED syscall.Errno = 1360 + ERROR_BAD_DESCRIPTOR_FORMAT syscall.Errno = 1361 + ERROR_NOT_LOGON_PROCESS syscall.Errno = 1362 + ERROR_LOGON_SESSION_EXISTS syscall.Errno = 1363 + ERROR_NO_SUCH_PACKAGE syscall.Errno = 1364 + ERROR_BAD_LOGON_SESSION_STATE syscall.Errno = 1365 + ERROR_LOGON_SESSION_COLLISION syscall.Errno = 1366 + ERROR_INVALID_LOGON_TYPE syscall.Errno = 1367 + ERROR_CANNOT_IMPERSONATE syscall.Errno = 1368 + ERROR_RXACT_INVALID_STATE syscall.Errno = 1369 + ERROR_RXACT_COMMIT_FAILURE syscall.Errno = 1370 + ERROR_SPECIAL_ACCOUNT syscall.Errno = 1371 + ERROR_SPECIAL_GROUP syscall.Errno = 1372 + ERROR_SPECIAL_USER syscall.Errno = 1373 + ERROR_MEMBERS_PRIMARY_GROUP syscall.Errno = 1374 + ERROR_TOKEN_ALREADY_IN_USE syscall.Errno = 1375 + ERROR_NO_SUCH_ALIAS syscall.Errno = 1376 + ERROR_MEMBER_NOT_IN_ALIAS syscall.Errno = 1377 + ERROR_MEMBER_IN_ALIAS syscall.Errno = 1378 + ERROR_ALIAS_EXISTS syscall.Errno = 1379 + ERROR_LOGON_NOT_GRANTED syscall.Errno = 1380 + ERROR_TOO_MANY_SECRETS syscall.Errno = 1381 + ERROR_SECRET_TOO_LONG syscall.Errno = 1382 + ERROR_INTERNAL_DB_ERROR syscall.Errno = 1383 + ERROR_TOO_MANY_CONTEXT_IDS syscall.Errno = 1384 + ERROR_LOGON_TYPE_NOT_GRANTED syscall.Errno = 1385 + ERROR_NT_CROSS_ENCRYPTION_REQUIRED syscall.Errno = 1386 + ERROR_NO_SUCH_MEMBER syscall.Errno = 1387 + ERROR_INVALID_MEMBER syscall.Errno = 1388 + ERROR_TOO_MANY_SIDS syscall.Errno = 1389 + ERROR_LM_CROSS_ENCRYPTION_REQUIRED syscall.Errno = 1390 + ERROR_NO_INHERITANCE syscall.Errno = 1391 + ERROR_FILE_CORRUPT syscall.Errno = 1392 + ERROR_DISK_CORRUPT syscall.Errno = 1393 + ERROR_NO_USER_SESSION_KEY syscall.Errno = 1394 + ERROR_LICENSE_QUOTA_EXCEEDED syscall.Errno = 1395 + ERROR_WRONG_TARGET_NAME syscall.Errno = 1396 + ERROR_MUTUAL_AUTH_FAILED syscall.Errno = 1397 + ERROR_TIME_SKEW syscall.Errno = 1398 + ERROR_CURRENT_DOMAIN_NOT_ALLOWED syscall.Errno = 1399 + ERROR_INVALID_WINDOW_HANDLE syscall.Errno = 1400 + ERROR_INVALID_MENU_HANDLE syscall.Errno = 1401 + ERROR_INVALID_CURSOR_HANDLE syscall.Errno = 1402 + ERROR_INVALID_ACCEL_HANDLE syscall.Errno = 1403 + ERROR_INVALID_HOOK_HANDLE syscall.Errno = 1404 + ERROR_INVALID_DWP_HANDLE syscall.Errno = 1405 + ERROR_TLW_WITH_WSCHILD syscall.Errno = 1406 + ERROR_CANNOT_FIND_WND_CLASS syscall.Errno = 1407 + ERROR_WINDOW_OF_OTHER_THREAD syscall.Errno = 1408 + ERROR_HOTKEY_ALREADY_REGISTERED syscall.Errno = 1409 + ERROR_CLASS_ALREADY_EXISTS syscall.Errno = 1410 + ERROR_CLASS_DOES_NOT_EXIST syscall.Errno = 1411 + ERROR_CLASS_HAS_WINDOWS syscall.Errno = 1412 + ERROR_INVALID_INDEX syscall.Errno = 1413 + ERROR_INVALID_ICON_HANDLE syscall.Errno = 1414 + ERROR_PRIVATE_DIALOG_INDEX syscall.Errno = 1415 + ERROR_LISTBOX_ID_NOT_FOUND syscall.Errno = 1416 + ERROR_NO_WILDCARD_CHARACTERS syscall.Errno = 1417 + ERROR_CLIPBOARD_NOT_OPEN syscall.Errno = 1418 + ERROR_HOTKEY_NOT_REGISTERED syscall.Errno = 1419 + ERROR_WINDOW_NOT_DIALOG syscall.Errno = 1420 + ERROR_CONTROL_ID_NOT_FOUND syscall.Errno = 1421 + ERROR_INVALID_COMBOBOX_MESSAGE syscall.Errno = 1422 + ERROR_WINDOW_NOT_COMBOBOX syscall.Errno = 1423 + ERROR_INVALID_EDIT_HEIGHT syscall.Errno = 1424 + ERROR_DC_NOT_FOUND syscall.Errno = 1425 + ERROR_INVALID_HOOK_FILTER syscall.Errno = 1426 + ERROR_INVALID_FILTER_PROC syscall.Errno = 1427 + ERROR_HOOK_NEEDS_HMOD syscall.Errno = 1428 + ERROR_GLOBAL_ONLY_HOOK syscall.Errno = 1429 + ERROR_JOURNAL_HOOK_SET syscall.Errno = 1430 + ERROR_HOOK_NOT_INSTALLED syscall.Errno = 1431 + ERROR_INVALID_LB_MESSAGE syscall.Errno = 1432 + ERROR_SETCOUNT_ON_BAD_LB syscall.Errno = 1433 + ERROR_LB_WITHOUT_TABSTOPS syscall.Errno = 1434 + ERROR_DESTROY_OBJECT_OF_OTHER_THREAD syscall.Errno = 1435 + ERROR_CHILD_WINDOW_MENU syscall.Errno = 1436 + ERROR_NO_SYSTEM_MENU syscall.Errno = 1437 + ERROR_INVALID_MSGBOX_STYLE syscall.Errno = 1438 + ERROR_INVALID_SPI_VALUE syscall.Errno = 1439 + ERROR_SCREEN_ALREADY_LOCKED syscall.Errno = 1440 + ERROR_HWNDS_HAVE_DIFF_PARENT syscall.Errno = 1441 + ERROR_NOT_CHILD_WINDOW syscall.Errno = 1442 + ERROR_INVALID_GW_COMMAND syscall.Errno = 1443 + ERROR_INVALID_THREAD_ID syscall.Errno = 1444 + ERROR_NON_MDICHILD_WINDOW syscall.Errno = 1445 + ERROR_POPUP_ALREADY_ACTIVE syscall.Errno = 1446 + ERROR_NO_SCROLLBARS syscall.Errno = 1447 + ERROR_INVALID_SCROLLBAR_RANGE syscall.Errno = 1448 + ERROR_INVALID_SHOWWIN_COMMAND syscall.Errno = 1449 + ERROR_NO_SYSTEM_RESOURCES syscall.Errno = 1450 + ERROR_NONPAGED_SYSTEM_RESOURCES syscall.Errno = 1451 + ERROR_PAGED_SYSTEM_RESOURCES syscall.Errno = 1452 + ERROR_WORKING_SET_QUOTA syscall.Errno = 1453 + ERROR_PAGEFILE_QUOTA syscall.Errno = 1454 + ERROR_COMMITMENT_LIMIT syscall.Errno = 1455 + ERROR_MENU_ITEM_NOT_FOUND syscall.Errno = 1456 + ERROR_INVALID_KEYBOARD_HANDLE syscall.Errno = 1457 + ERROR_HOOK_TYPE_NOT_ALLOWED syscall.Errno = 1458 + ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION syscall.Errno = 1459 + ERROR_TIMEOUT syscall.Errno = 1460 + ERROR_INVALID_MONITOR_HANDLE syscall.Errno = 1461 + ERROR_INCORRECT_SIZE syscall.Errno = 1462 + ERROR_SYMLINK_CLASS_DISABLED syscall.Errno = 1463 + ERROR_SYMLINK_NOT_SUPPORTED syscall.Errno = 1464 + ERROR_XML_PARSE_ERROR syscall.Errno = 1465 + ERROR_XMLDSIG_ERROR syscall.Errno = 1466 + ERROR_RESTART_APPLICATION syscall.Errno = 1467 + ERROR_WRONG_COMPARTMENT syscall.Errno = 1468 + ERROR_AUTHIP_FAILURE syscall.Errno = 1469 + ERROR_NO_NVRAM_RESOURCES syscall.Errno = 1470 + ERROR_NOT_GUI_PROCESS syscall.Errno = 1471 + ERROR_EVENTLOG_FILE_CORRUPT syscall.Errno = 1500 + ERROR_EVENTLOG_CANT_START syscall.Errno = 1501 + ERROR_LOG_FILE_FULL syscall.Errno = 1502 + ERROR_EVENTLOG_FILE_CHANGED syscall.Errno = 1503 + ERROR_CONTAINER_ASSIGNED syscall.Errno = 1504 + ERROR_JOB_NO_CONTAINER syscall.Errno = 1505 + ERROR_INVALID_TASK_NAME syscall.Errno = 1550 + ERROR_INVALID_TASK_INDEX syscall.Errno = 1551 + ERROR_THREAD_ALREADY_IN_TASK syscall.Errno = 1552 + ERROR_INSTALL_SERVICE_FAILURE syscall.Errno = 1601 + ERROR_INSTALL_USEREXIT syscall.Errno = 1602 + ERROR_INSTALL_FAILURE syscall.Errno = 1603 + ERROR_INSTALL_SUSPEND syscall.Errno = 1604 + ERROR_UNKNOWN_PRODUCT syscall.Errno = 1605 + ERROR_UNKNOWN_FEATURE syscall.Errno = 1606 + ERROR_UNKNOWN_COMPONENT syscall.Errno = 1607 + ERROR_UNKNOWN_PROPERTY syscall.Errno = 1608 + ERROR_INVALID_HANDLE_STATE syscall.Errno = 1609 + ERROR_BAD_CONFIGURATION syscall.Errno = 1610 + ERROR_INDEX_ABSENT syscall.Errno = 1611 + ERROR_INSTALL_SOURCE_ABSENT syscall.Errno = 1612 + ERROR_INSTALL_PACKAGE_VERSION syscall.Errno = 1613 + ERROR_PRODUCT_UNINSTALLED syscall.Errno = 1614 + ERROR_BAD_QUERY_SYNTAX syscall.Errno = 1615 + ERROR_INVALID_FIELD syscall.Errno = 1616 + ERROR_DEVICE_REMOVED syscall.Errno = 1617 + ERROR_INSTALL_ALREADY_RUNNING syscall.Errno = 1618 + ERROR_INSTALL_PACKAGE_OPEN_FAILED syscall.Errno = 1619 + ERROR_INSTALL_PACKAGE_INVALID syscall.Errno = 1620 + ERROR_INSTALL_UI_FAILURE syscall.Errno = 1621 + ERROR_INSTALL_LOG_FAILURE syscall.Errno = 1622 + ERROR_INSTALL_LANGUAGE_UNSUPPORTED syscall.Errno = 1623 + ERROR_INSTALL_TRANSFORM_FAILURE syscall.Errno = 1624 + ERROR_INSTALL_PACKAGE_REJECTED syscall.Errno = 1625 + ERROR_FUNCTION_NOT_CALLED syscall.Errno = 1626 + ERROR_FUNCTION_FAILED syscall.Errno = 1627 + ERROR_INVALID_TABLE syscall.Errno = 1628 + ERROR_DATATYPE_MISMATCH syscall.Errno = 1629 + ERROR_UNSUPPORTED_TYPE syscall.Errno = 1630 + ERROR_CREATE_FAILED syscall.Errno = 1631 + ERROR_INSTALL_TEMP_UNWRITABLE syscall.Errno = 1632 + ERROR_INSTALL_PLATFORM_UNSUPPORTED syscall.Errno = 1633 + ERROR_INSTALL_NOTUSED syscall.Errno = 1634 + ERROR_PATCH_PACKAGE_OPEN_FAILED syscall.Errno = 1635 + ERROR_PATCH_PACKAGE_INVALID syscall.Errno = 1636 + ERROR_PATCH_PACKAGE_UNSUPPORTED syscall.Errno = 1637 + ERROR_PRODUCT_VERSION syscall.Errno = 1638 + ERROR_INVALID_COMMAND_LINE syscall.Errno = 1639 + ERROR_INSTALL_REMOTE_DISALLOWED syscall.Errno = 1640 + ERROR_SUCCESS_REBOOT_INITIATED syscall.Errno = 1641 + ERROR_PATCH_TARGET_NOT_FOUND syscall.Errno = 1642 + ERROR_PATCH_PACKAGE_REJECTED syscall.Errno = 1643 + ERROR_INSTALL_TRANSFORM_REJECTED syscall.Errno = 1644 + ERROR_INSTALL_REMOTE_PROHIBITED syscall.Errno = 1645 + ERROR_PATCH_REMOVAL_UNSUPPORTED syscall.Errno = 1646 + ERROR_UNKNOWN_PATCH syscall.Errno = 1647 + ERROR_PATCH_NO_SEQUENCE syscall.Errno = 1648 + ERROR_PATCH_REMOVAL_DISALLOWED syscall.Errno = 1649 + ERROR_INVALID_PATCH_XML syscall.Errno = 1650 + ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT syscall.Errno = 1651 + ERROR_INSTALL_SERVICE_SAFEBOOT syscall.Errno = 1652 + ERROR_FAIL_FAST_EXCEPTION syscall.Errno = 1653 + ERROR_INSTALL_REJECTED syscall.Errno = 1654 + ERROR_DYNAMIC_CODE_BLOCKED syscall.Errno = 1655 + ERROR_NOT_SAME_OBJECT syscall.Errno = 1656 + ERROR_STRICT_CFG_VIOLATION syscall.Errno = 1657 + ERROR_SET_CONTEXT_DENIED syscall.Errno = 1660 + ERROR_CROSS_PARTITION_VIOLATION syscall.Errno = 1661 + RPC_S_INVALID_STRING_BINDING syscall.Errno = 1700 + RPC_S_WRONG_KIND_OF_BINDING syscall.Errno = 1701 + RPC_S_INVALID_BINDING syscall.Errno = 1702 + RPC_S_PROTSEQ_NOT_SUPPORTED syscall.Errno = 1703 + RPC_S_INVALID_RPC_PROTSEQ syscall.Errno = 1704 + RPC_S_INVALID_STRING_UUID syscall.Errno = 1705 + RPC_S_INVALID_ENDPOINT_FORMAT syscall.Errno = 1706 + RPC_S_INVALID_NET_ADDR syscall.Errno = 1707 + RPC_S_NO_ENDPOINT_FOUND syscall.Errno = 1708 + RPC_S_INVALID_TIMEOUT syscall.Errno = 1709 + RPC_S_OBJECT_NOT_FOUND syscall.Errno = 1710 + RPC_S_ALREADY_REGISTERED syscall.Errno = 1711 + RPC_S_TYPE_ALREADY_REGISTERED syscall.Errno = 1712 + RPC_S_ALREADY_LISTENING syscall.Errno = 1713 + RPC_S_NO_PROTSEQS_REGISTERED syscall.Errno = 1714 + RPC_S_NOT_LISTENING syscall.Errno = 1715 + RPC_S_UNKNOWN_MGR_TYPE syscall.Errno = 1716 + RPC_S_UNKNOWN_IF syscall.Errno = 1717 + RPC_S_NO_BINDINGS syscall.Errno = 1718 + RPC_S_NO_PROTSEQS syscall.Errno = 1719 + RPC_S_CANT_CREATE_ENDPOINT syscall.Errno = 1720 + RPC_S_OUT_OF_RESOURCES syscall.Errno = 1721 + RPC_S_SERVER_UNAVAILABLE syscall.Errno = 1722 + RPC_S_SERVER_TOO_BUSY syscall.Errno = 1723 + RPC_S_INVALID_NETWORK_OPTIONS syscall.Errno = 1724 + RPC_S_NO_CALL_ACTIVE syscall.Errno = 1725 + RPC_S_CALL_FAILED syscall.Errno = 1726 + RPC_S_CALL_FAILED_DNE syscall.Errno = 1727 + RPC_S_PROTOCOL_ERROR syscall.Errno = 1728 + RPC_S_PROXY_ACCESS_DENIED syscall.Errno = 1729 + RPC_S_UNSUPPORTED_TRANS_SYN syscall.Errno = 1730 + RPC_S_UNSUPPORTED_TYPE syscall.Errno = 1732 + RPC_S_INVALID_TAG syscall.Errno = 1733 + RPC_S_INVALID_BOUND syscall.Errno = 1734 + RPC_S_NO_ENTRY_NAME syscall.Errno = 1735 + RPC_S_INVALID_NAME_SYNTAX syscall.Errno = 1736 + RPC_S_UNSUPPORTED_NAME_SYNTAX syscall.Errno = 1737 + RPC_S_UUID_NO_ADDRESS syscall.Errno = 1739 + RPC_S_DUPLICATE_ENDPOINT syscall.Errno = 1740 + RPC_S_UNKNOWN_AUTHN_TYPE syscall.Errno = 1741 + RPC_S_MAX_CALLS_TOO_SMALL syscall.Errno = 1742 + RPC_S_STRING_TOO_LONG syscall.Errno = 1743 + RPC_S_PROTSEQ_NOT_FOUND syscall.Errno = 1744 + RPC_S_PROCNUM_OUT_OF_RANGE syscall.Errno = 1745 + RPC_S_BINDING_HAS_NO_AUTH syscall.Errno = 1746 + RPC_S_UNKNOWN_AUTHN_SERVICE syscall.Errno = 1747 + RPC_S_UNKNOWN_AUTHN_LEVEL syscall.Errno = 1748 + RPC_S_INVALID_AUTH_IDENTITY syscall.Errno = 1749 + RPC_S_UNKNOWN_AUTHZ_SERVICE syscall.Errno = 1750 + EPT_S_INVALID_ENTRY syscall.Errno = 1751 + EPT_S_CANT_PERFORM_OP syscall.Errno = 1752 + EPT_S_NOT_REGISTERED syscall.Errno = 1753 + RPC_S_NOTHING_TO_EXPORT syscall.Errno = 1754 + RPC_S_INCOMPLETE_NAME syscall.Errno = 1755 + RPC_S_INVALID_VERS_OPTION syscall.Errno = 1756 + RPC_S_NO_MORE_MEMBERS syscall.Errno = 1757 + RPC_S_NOT_ALL_OBJS_UNEXPORTED syscall.Errno = 1758 + RPC_S_INTERFACE_NOT_FOUND syscall.Errno = 1759 + RPC_S_ENTRY_ALREADY_EXISTS syscall.Errno = 1760 + RPC_S_ENTRY_NOT_FOUND syscall.Errno = 1761 + RPC_S_NAME_SERVICE_UNAVAILABLE syscall.Errno = 1762 + RPC_S_INVALID_NAF_ID syscall.Errno = 1763 + RPC_S_CANNOT_SUPPORT syscall.Errno = 1764 + RPC_S_NO_CONTEXT_AVAILABLE syscall.Errno = 1765 + RPC_S_INTERNAL_ERROR syscall.Errno = 1766 + RPC_S_ZERO_DIVIDE syscall.Errno = 1767 + RPC_S_ADDRESS_ERROR syscall.Errno = 1768 + RPC_S_FP_DIV_ZERO syscall.Errno = 1769 + RPC_S_FP_UNDERFLOW syscall.Errno = 1770 + RPC_S_FP_OVERFLOW syscall.Errno = 1771 + RPC_X_NO_MORE_ENTRIES syscall.Errno = 1772 + RPC_X_SS_CHAR_TRANS_OPEN_FAIL syscall.Errno = 1773 + RPC_X_SS_CHAR_TRANS_SHORT_FILE syscall.Errno = 1774 + RPC_X_SS_IN_NULL_CONTEXT syscall.Errno = 1775 + RPC_X_SS_CONTEXT_DAMAGED syscall.Errno = 1777 + RPC_X_SS_HANDLES_MISMATCH syscall.Errno = 1778 + RPC_X_SS_CANNOT_GET_CALL_HANDLE syscall.Errno = 1779 + RPC_X_NULL_REF_POINTER syscall.Errno = 1780 + RPC_X_ENUM_VALUE_OUT_OF_RANGE syscall.Errno = 1781 + RPC_X_BYTE_COUNT_TOO_SMALL syscall.Errno = 1782 + RPC_X_BAD_STUB_DATA syscall.Errno = 1783 + ERROR_INVALID_USER_BUFFER syscall.Errno = 1784 + ERROR_UNRECOGNIZED_MEDIA syscall.Errno = 1785 + ERROR_NO_TRUST_LSA_SECRET syscall.Errno = 1786 + ERROR_NO_TRUST_SAM_ACCOUNT syscall.Errno = 1787 + ERROR_TRUSTED_DOMAIN_FAILURE syscall.Errno = 1788 + ERROR_TRUSTED_RELATIONSHIP_FAILURE syscall.Errno = 1789 + ERROR_TRUST_FAILURE syscall.Errno = 1790 + RPC_S_CALL_IN_PROGRESS syscall.Errno = 1791 + ERROR_NETLOGON_NOT_STARTED syscall.Errno = 1792 + ERROR_ACCOUNT_EXPIRED syscall.Errno = 1793 + ERROR_REDIRECTOR_HAS_OPEN_HANDLES syscall.Errno = 1794 + ERROR_PRINTER_DRIVER_ALREADY_INSTALLED syscall.Errno = 1795 + ERROR_UNKNOWN_PORT syscall.Errno = 1796 + ERROR_UNKNOWN_PRINTER_DRIVER syscall.Errno = 1797 + ERROR_UNKNOWN_PRINTPROCESSOR syscall.Errno = 1798 + ERROR_INVALID_SEPARATOR_FILE syscall.Errno = 1799 + ERROR_INVALID_PRIORITY syscall.Errno = 1800 + ERROR_INVALID_PRINTER_NAME syscall.Errno = 1801 + ERROR_PRINTER_ALREADY_EXISTS syscall.Errno = 1802 + ERROR_INVALID_PRINTER_COMMAND syscall.Errno = 1803 + ERROR_INVALID_DATATYPE syscall.Errno = 1804 + ERROR_INVALID_ENVIRONMENT syscall.Errno = 1805 + RPC_S_NO_MORE_BINDINGS syscall.Errno = 1806 + ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT syscall.Errno = 1807 + ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT syscall.Errno = 1808 + ERROR_NOLOGON_SERVER_TRUST_ACCOUNT syscall.Errno = 1809 + ERROR_DOMAIN_TRUST_INCONSISTENT syscall.Errno = 1810 + ERROR_SERVER_HAS_OPEN_HANDLES syscall.Errno = 1811 + ERROR_RESOURCE_DATA_NOT_FOUND syscall.Errno = 1812 + ERROR_RESOURCE_TYPE_NOT_FOUND syscall.Errno = 1813 + ERROR_RESOURCE_NAME_NOT_FOUND syscall.Errno = 1814 + ERROR_RESOURCE_LANG_NOT_FOUND syscall.Errno = 1815 + ERROR_NOT_ENOUGH_QUOTA syscall.Errno = 1816 + RPC_S_NO_INTERFACES syscall.Errno = 1817 + RPC_S_CALL_CANCELLED syscall.Errno = 1818 + RPC_S_BINDING_INCOMPLETE syscall.Errno = 1819 + RPC_S_COMM_FAILURE syscall.Errno = 1820 + RPC_S_UNSUPPORTED_AUTHN_LEVEL syscall.Errno = 1821 + RPC_S_NO_PRINC_NAME syscall.Errno = 1822 + RPC_S_NOT_RPC_ERROR syscall.Errno = 1823 + RPC_S_UUID_LOCAL_ONLY syscall.Errno = 1824 + RPC_S_SEC_PKG_ERROR syscall.Errno = 1825 + RPC_S_NOT_CANCELLED syscall.Errno = 1826 + RPC_X_INVALID_ES_ACTION syscall.Errno = 1827 + RPC_X_WRONG_ES_VERSION syscall.Errno = 1828 + RPC_X_WRONG_STUB_VERSION syscall.Errno = 1829 + RPC_X_INVALID_PIPE_OBJECT syscall.Errno = 1830 + RPC_X_WRONG_PIPE_ORDER syscall.Errno = 1831 + RPC_X_WRONG_PIPE_VERSION syscall.Errno = 1832 + RPC_S_COOKIE_AUTH_FAILED syscall.Errno = 1833 + RPC_S_DO_NOT_DISTURB syscall.Errno = 1834 + RPC_S_SYSTEM_HANDLE_COUNT_EXCEEDED syscall.Errno = 1835 + RPC_S_SYSTEM_HANDLE_TYPE_MISMATCH syscall.Errno = 1836 + RPC_S_GROUP_MEMBER_NOT_FOUND syscall.Errno = 1898 + EPT_S_CANT_CREATE syscall.Errno = 1899 + RPC_S_INVALID_OBJECT syscall.Errno = 1900 + ERROR_INVALID_TIME syscall.Errno = 1901 + ERROR_INVALID_FORM_NAME syscall.Errno = 1902 + ERROR_INVALID_FORM_SIZE syscall.Errno = 1903 + ERROR_ALREADY_WAITING syscall.Errno = 1904 + ERROR_PRINTER_DELETED syscall.Errno = 1905 + ERROR_INVALID_PRINTER_STATE syscall.Errno = 1906 + ERROR_PASSWORD_MUST_CHANGE syscall.Errno = 1907 + ERROR_DOMAIN_CONTROLLER_NOT_FOUND syscall.Errno = 1908 + ERROR_ACCOUNT_LOCKED_OUT syscall.Errno = 1909 + OR_INVALID_OXID syscall.Errno = 1910 + OR_INVALID_OID syscall.Errno = 1911 + OR_INVALID_SET syscall.Errno = 1912 + RPC_S_SEND_INCOMPLETE syscall.Errno = 1913 + RPC_S_INVALID_ASYNC_HANDLE syscall.Errno = 1914 + RPC_S_INVALID_ASYNC_CALL syscall.Errno = 1915 + RPC_X_PIPE_CLOSED syscall.Errno = 1916 + RPC_X_PIPE_DISCIPLINE_ERROR syscall.Errno = 1917 + RPC_X_PIPE_EMPTY syscall.Errno = 1918 + ERROR_NO_SITENAME syscall.Errno = 1919 + ERROR_CANT_ACCESS_FILE syscall.Errno = 1920 + ERROR_CANT_RESOLVE_FILENAME syscall.Errno = 1921 + RPC_S_ENTRY_TYPE_MISMATCH syscall.Errno = 1922 + RPC_S_NOT_ALL_OBJS_EXPORTED syscall.Errno = 1923 + RPC_S_INTERFACE_NOT_EXPORTED syscall.Errno = 1924 + RPC_S_PROFILE_NOT_ADDED syscall.Errno = 1925 + RPC_S_PRF_ELT_NOT_ADDED syscall.Errno = 1926 + RPC_S_PRF_ELT_NOT_REMOVED syscall.Errno = 1927 + RPC_S_GRP_ELT_NOT_ADDED syscall.Errno = 1928 + RPC_S_GRP_ELT_NOT_REMOVED syscall.Errno = 1929 + ERROR_KM_DRIVER_BLOCKED syscall.Errno = 1930 + ERROR_CONTEXT_EXPIRED syscall.Errno = 1931 + ERROR_PER_USER_TRUST_QUOTA_EXCEEDED syscall.Errno = 1932 + ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED syscall.Errno = 1933 + ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED syscall.Errno = 1934 + ERROR_AUTHENTICATION_FIREWALL_FAILED syscall.Errno = 1935 + ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED syscall.Errno = 1936 + ERROR_NTLM_BLOCKED syscall.Errno = 1937 + ERROR_PASSWORD_CHANGE_REQUIRED syscall.Errno = 1938 + ERROR_LOST_MODE_LOGON_RESTRICTION syscall.Errno = 1939 + ERROR_INVALID_PIXEL_FORMAT syscall.Errno = 2000 + ERROR_BAD_DRIVER syscall.Errno = 2001 + ERROR_INVALID_WINDOW_STYLE syscall.Errno = 2002 + ERROR_METAFILE_NOT_SUPPORTED syscall.Errno = 2003 + ERROR_TRANSFORM_NOT_SUPPORTED syscall.Errno = 2004 + ERROR_CLIPPING_NOT_SUPPORTED syscall.Errno = 2005 + ERROR_INVALID_CMM syscall.Errno = 2010 + ERROR_INVALID_PROFILE syscall.Errno = 2011 + ERROR_TAG_NOT_FOUND syscall.Errno = 2012 + ERROR_TAG_NOT_PRESENT syscall.Errno = 2013 + ERROR_DUPLICATE_TAG syscall.Errno = 2014 + ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE syscall.Errno = 2015 + ERROR_PROFILE_NOT_FOUND syscall.Errno = 2016 + ERROR_INVALID_COLORSPACE syscall.Errno = 2017 + ERROR_ICM_NOT_ENABLED syscall.Errno = 2018 + ERROR_DELETING_ICM_XFORM syscall.Errno = 2019 + ERROR_INVALID_TRANSFORM syscall.Errno = 2020 + ERROR_COLORSPACE_MISMATCH syscall.Errno = 2021 + ERROR_INVALID_COLORINDEX syscall.Errno = 2022 + ERROR_PROFILE_DOES_NOT_MATCH_DEVICE syscall.Errno = 2023 + ERROR_CONNECTED_OTHER_PASSWORD syscall.Errno = 2108 + ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT syscall.Errno = 2109 + ERROR_BAD_USERNAME syscall.Errno = 2202 + ERROR_NOT_CONNECTED syscall.Errno = 2250 + ERROR_OPEN_FILES syscall.Errno = 2401 + ERROR_ACTIVE_CONNECTIONS syscall.Errno = 2402 + ERROR_DEVICE_IN_USE syscall.Errno = 2404 + ERROR_UNKNOWN_PRINT_MONITOR syscall.Errno = 3000 + ERROR_PRINTER_DRIVER_IN_USE syscall.Errno = 3001 + ERROR_SPOOL_FILE_NOT_FOUND syscall.Errno = 3002 + ERROR_SPL_NO_STARTDOC syscall.Errno = 3003 + ERROR_SPL_NO_ADDJOB syscall.Errno = 3004 + ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED syscall.Errno = 3005 + ERROR_PRINT_MONITOR_ALREADY_INSTALLED syscall.Errno = 3006 + ERROR_INVALID_PRINT_MONITOR syscall.Errno = 3007 + ERROR_PRINT_MONITOR_IN_USE syscall.Errno = 3008 + ERROR_PRINTER_HAS_JOBS_QUEUED syscall.Errno = 3009 + ERROR_SUCCESS_REBOOT_REQUIRED syscall.Errno = 3010 + ERROR_SUCCESS_RESTART_REQUIRED syscall.Errno = 3011 + ERROR_PRINTER_NOT_FOUND syscall.Errno = 3012 + ERROR_PRINTER_DRIVER_WARNED syscall.Errno = 3013 + ERROR_PRINTER_DRIVER_BLOCKED syscall.Errno = 3014 + ERROR_PRINTER_DRIVER_PACKAGE_IN_USE syscall.Errno = 3015 + ERROR_CORE_DRIVER_PACKAGE_NOT_FOUND syscall.Errno = 3016 + ERROR_FAIL_REBOOT_REQUIRED syscall.Errno = 3017 + ERROR_FAIL_REBOOT_INITIATED syscall.Errno = 3018 + ERROR_PRINTER_DRIVER_DOWNLOAD_NEEDED syscall.Errno = 3019 + ERROR_PRINT_JOB_RESTART_REQUIRED syscall.Errno = 3020 + ERROR_INVALID_PRINTER_DRIVER_MANIFEST syscall.Errno = 3021 + ERROR_PRINTER_NOT_SHAREABLE syscall.Errno = 3022 + ERROR_REQUEST_PAUSED syscall.Errno = 3050 + ERROR_APPEXEC_CONDITION_NOT_SATISFIED syscall.Errno = 3060 + ERROR_APPEXEC_HANDLE_INVALIDATED syscall.Errno = 3061 + ERROR_APPEXEC_INVALID_HOST_GENERATION syscall.Errno = 3062 + ERROR_APPEXEC_UNEXPECTED_PROCESS_REGISTRATION syscall.Errno = 3063 + ERROR_APPEXEC_INVALID_HOST_STATE syscall.Errno = 3064 + ERROR_APPEXEC_NO_DONOR syscall.Errno = 3065 + ERROR_APPEXEC_HOST_ID_MISMATCH syscall.Errno = 3066 + ERROR_APPEXEC_UNKNOWN_USER syscall.Errno = 3067 + ERROR_IO_REISSUE_AS_CACHED syscall.Errno = 3950 + ERROR_WINS_INTERNAL syscall.Errno = 4000 + ERROR_CAN_NOT_DEL_LOCAL_WINS syscall.Errno = 4001 + ERROR_STATIC_INIT syscall.Errno = 4002 + ERROR_INC_BACKUP syscall.Errno = 4003 + ERROR_FULL_BACKUP syscall.Errno = 4004 + ERROR_REC_NON_EXISTENT syscall.Errno = 4005 + ERROR_RPL_NOT_ALLOWED syscall.Errno = 4006 + PEERDIST_ERROR_CONTENTINFO_VERSION_UNSUPPORTED syscall.Errno = 4050 + PEERDIST_ERROR_CANNOT_PARSE_CONTENTINFO syscall.Errno = 4051 + PEERDIST_ERROR_MISSING_DATA syscall.Errno = 4052 + PEERDIST_ERROR_NO_MORE syscall.Errno = 4053 + PEERDIST_ERROR_NOT_INITIALIZED syscall.Errno = 4054 + PEERDIST_ERROR_ALREADY_INITIALIZED syscall.Errno = 4055 + PEERDIST_ERROR_SHUTDOWN_IN_PROGRESS syscall.Errno = 4056 + PEERDIST_ERROR_INVALIDATED syscall.Errno = 4057 + PEERDIST_ERROR_ALREADY_EXISTS syscall.Errno = 4058 + PEERDIST_ERROR_OPERATION_NOTFOUND syscall.Errno = 4059 + PEERDIST_ERROR_ALREADY_COMPLETED syscall.Errno = 4060 + PEERDIST_ERROR_OUT_OF_BOUNDS syscall.Errno = 4061 + PEERDIST_ERROR_VERSION_UNSUPPORTED syscall.Errno = 4062 + PEERDIST_ERROR_INVALID_CONFIGURATION syscall.Errno = 4063 + PEERDIST_ERROR_NOT_LICENSED syscall.Errno = 4064 + PEERDIST_ERROR_SERVICE_UNAVAILABLE syscall.Errno = 4065 + PEERDIST_ERROR_TRUST_FAILURE syscall.Errno = 4066 + ERROR_DHCP_ADDRESS_CONFLICT syscall.Errno = 4100 + ERROR_WMI_GUID_NOT_FOUND syscall.Errno = 4200 + ERROR_WMI_INSTANCE_NOT_FOUND syscall.Errno = 4201 + ERROR_WMI_ITEMID_NOT_FOUND syscall.Errno = 4202 + ERROR_WMI_TRY_AGAIN syscall.Errno = 4203 + ERROR_WMI_DP_NOT_FOUND syscall.Errno = 4204 + ERROR_WMI_UNRESOLVED_INSTANCE_REF syscall.Errno = 4205 + ERROR_WMI_ALREADY_ENABLED syscall.Errno = 4206 + ERROR_WMI_GUID_DISCONNECTED syscall.Errno = 4207 + ERROR_WMI_SERVER_UNAVAILABLE syscall.Errno = 4208 + ERROR_WMI_DP_FAILED syscall.Errno = 4209 + ERROR_WMI_INVALID_MOF syscall.Errno = 4210 + ERROR_WMI_INVALID_REGINFO syscall.Errno = 4211 + ERROR_WMI_ALREADY_DISABLED syscall.Errno = 4212 + ERROR_WMI_READ_ONLY syscall.Errno = 4213 + ERROR_WMI_SET_FAILURE syscall.Errno = 4214 + ERROR_NOT_APPCONTAINER syscall.Errno = 4250 + ERROR_APPCONTAINER_REQUIRED syscall.Errno = 4251 + ERROR_NOT_SUPPORTED_IN_APPCONTAINER syscall.Errno = 4252 + ERROR_INVALID_PACKAGE_SID_LENGTH syscall.Errno = 4253 + ERROR_INVALID_MEDIA syscall.Errno = 4300 + ERROR_INVALID_LIBRARY syscall.Errno = 4301 + ERROR_INVALID_MEDIA_POOL syscall.Errno = 4302 + ERROR_DRIVE_MEDIA_MISMATCH syscall.Errno = 4303 + ERROR_MEDIA_OFFLINE syscall.Errno = 4304 + ERROR_LIBRARY_OFFLINE syscall.Errno = 4305 + ERROR_EMPTY syscall.Errno = 4306 + ERROR_NOT_EMPTY syscall.Errno = 4307 + ERROR_MEDIA_UNAVAILABLE syscall.Errno = 4308 + ERROR_RESOURCE_DISABLED syscall.Errno = 4309 + ERROR_INVALID_CLEANER syscall.Errno = 4310 + ERROR_UNABLE_TO_CLEAN syscall.Errno = 4311 + ERROR_OBJECT_NOT_FOUND syscall.Errno = 4312 + ERROR_DATABASE_FAILURE syscall.Errno = 4313 + ERROR_DATABASE_FULL syscall.Errno = 4314 + ERROR_MEDIA_INCOMPATIBLE syscall.Errno = 4315 + ERROR_RESOURCE_NOT_PRESENT syscall.Errno = 4316 + ERROR_INVALID_OPERATION syscall.Errno = 4317 + ERROR_MEDIA_NOT_AVAILABLE syscall.Errno = 4318 + ERROR_DEVICE_NOT_AVAILABLE syscall.Errno = 4319 + ERROR_REQUEST_REFUSED syscall.Errno = 4320 + ERROR_INVALID_DRIVE_OBJECT syscall.Errno = 4321 + ERROR_LIBRARY_FULL syscall.Errno = 4322 + ERROR_MEDIUM_NOT_ACCESSIBLE syscall.Errno = 4323 + ERROR_UNABLE_TO_LOAD_MEDIUM syscall.Errno = 4324 + ERROR_UNABLE_TO_INVENTORY_DRIVE syscall.Errno = 4325 + ERROR_UNABLE_TO_INVENTORY_SLOT syscall.Errno = 4326 + ERROR_UNABLE_TO_INVENTORY_TRANSPORT syscall.Errno = 4327 + ERROR_TRANSPORT_FULL syscall.Errno = 4328 + ERROR_CONTROLLING_IEPORT syscall.Errno = 4329 + ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA syscall.Errno = 4330 + ERROR_CLEANER_SLOT_SET syscall.Errno = 4331 + ERROR_CLEANER_SLOT_NOT_SET syscall.Errno = 4332 + ERROR_CLEANER_CARTRIDGE_SPENT syscall.Errno = 4333 + ERROR_UNEXPECTED_OMID syscall.Errno = 4334 + ERROR_CANT_DELETE_LAST_ITEM syscall.Errno = 4335 + ERROR_MESSAGE_EXCEEDS_MAX_SIZE syscall.Errno = 4336 + ERROR_VOLUME_CONTAINS_SYS_FILES syscall.Errno = 4337 + ERROR_INDIGENOUS_TYPE syscall.Errno = 4338 + ERROR_NO_SUPPORTING_DRIVES syscall.Errno = 4339 + ERROR_CLEANER_CARTRIDGE_INSTALLED syscall.Errno = 4340 + ERROR_IEPORT_FULL syscall.Errno = 4341 + ERROR_FILE_OFFLINE syscall.Errno = 4350 + ERROR_REMOTE_STORAGE_NOT_ACTIVE syscall.Errno = 4351 + ERROR_REMOTE_STORAGE_MEDIA_ERROR syscall.Errno = 4352 + ERROR_NOT_A_REPARSE_POINT syscall.Errno = 4390 + ERROR_REPARSE_ATTRIBUTE_CONFLICT syscall.Errno = 4391 + ERROR_INVALID_REPARSE_DATA syscall.Errno = 4392 + ERROR_REPARSE_TAG_INVALID syscall.Errno = 4393 + ERROR_REPARSE_TAG_MISMATCH syscall.Errno = 4394 + ERROR_REPARSE_POINT_ENCOUNTERED syscall.Errno = 4395 + ERROR_APP_DATA_NOT_FOUND syscall.Errno = 4400 + ERROR_APP_DATA_EXPIRED syscall.Errno = 4401 + ERROR_APP_DATA_CORRUPT syscall.Errno = 4402 + ERROR_APP_DATA_LIMIT_EXCEEDED syscall.Errno = 4403 + ERROR_APP_DATA_REBOOT_REQUIRED syscall.Errno = 4404 + ERROR_SECUREBOOT_ROLLBACK_DETECTED syscall.Errno = 4420 + ERROR_SECUREBOOT_POLICY_VIOLATION syscall.Errno = 4421 + ERROR_SECUREBOOT_INVALID_POLICY syscall.Errno = 4422 + ERROR_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND syscall.Errno = 4423 + ERROR_SECUREBOOT_POLICY_NOT_SIGNED syscall.Errno = 4424 + ERROR_SECUREBOOT_NOT_ENABLED syscall.Errno = 4425 + ERROR_SECUREBOOT_FILE_REPLACED syscall.Errno = 4426 + ERROR_SECUREBOOT_POLICY_NOT_AUTHORIZED syscall.Errno = 4427 + ERROR_SECUREBOOT_POLICY_UNKNOWN syscall.Errno = 4428 + ERROR_SECUREBOOT_POLICY_MISSING_ANTIROLLBACKVERSION syscall.Errno = 4429 + ERROR_SECUREBOOT_PLATFORM_ID_MISMATCH syscall.Errno = 4430 + ERROR_SECUREBOOT_POLICY_ROLLBACK_DETECTED syscall.Errno = 4431 + ERROR_SECUREBOOT_POLICY_UPGRADE_MISMATCH syscall.Errno = 4432 + ERROR_SECUREBOOT_REQUIRED_POLICY_FILE_MISSING syscall.Errno = 4433 + ERROR_SECUREBOOT_NOT_BASE_POLICY syscall.Errno = 4434 + ERROR_SECUREBOOT_NOT_SUPPLEMENTAL_POLICY syscall.Errno = 4435 + ERROR_OFFLOAD_READ_FLT_NOT_SUPPORTED syscall.Errno = 4440 + ERROR_OFFLOAD_WRITE_FLT_NOT_SUPPORTED syscall.Errno = 4441 + ERROR_OFFLOAD_READ_FILE_NOT_SUPPORTED syscall.Errno = 4442 + ERROR_OFFLOAD_WRITE_FILE_NOT_SUPPORTED syscall.Errno = 4443 + ERROR_ALREADY_HAS_STREAM_ID syscall.Errno = 4444 + ERROR_SMR_GARBAGE_COLLECTION_REQUIRED syscall.Errno = 4445 + ERROR_WOF_WIM_HEADER_CORRUPT syscall.Errno = 4446 + ERROR_WOF_WIM_RESOURCE_TABLE_CORRUPT syscall.Errno = 4447 + ERROR_WOF_FILE_RESOURCE_TABLE_CORRUPT syscall.Errno = 4448 + ERROR_VOLUME_NOT_SIS_ENABLED syscall.Errno = 4500 + ERROR_SYSTEM_INTEGRITY_ROLLBACK_DETECTED syscall.Errno = 4550 + ERROR_SYSTEM_INTEGRITY_POLICY_VIOLATION syscall.Errno = 4551 + ERROR_SYSTEM_INTEGRITY_INVALID_POLICY syscall.Errno = 4552 + ERROR_SYSTEM_INTEGRITY_POLICY_NOT_SIGNED syscall.Errno = 4553 + ERROR_SYSTEM_INTEGRITY_TOO_MANY_POLICIES syscall.Errno = 4554 + ERROR_SYSTEM_INTEGRITY_SUPPLEMENTAL_POLICY_NOT_AUTHORIZED syscall.Errno = 4555 + ERROR_VSM_NOT_INITIALIZED syscall.Errno = 4560 + ERROR_VSM_DMA_PROTECTION_NOT_IN_USE syscall.Errno = 4561 + ERROR_PLATFORM_MANIFEST_NOT_AUTHORIZED syscall.Errno = 4570 + ERROR_PLATFORM_MANIFEST_INVALID syscall.Errno = 4571 + ERROR_PLATFORM_MANIFEST_FILE_NOT_AUTHORIZED syscall.Errno = 4572 + ERROR_PLATFORM_MANIFEST_CATALOG_NOT_AUTHORIZED syscall.Errno = 4573 + ERROR_PLATFORM_MANIFEST_BINARY_ID_NOT_FOUND syscall.Errno = 4574 + ERROR_PLATFORM_MANIFEST_NOT_ACTIVE syscall.Errno = 4575 + ERROR_PLATFORM_MANIFEST_NOT_SIGNED syscall.Errno = 4576 + ERROR_DEPENDENT_RESOURCE_EXISTS syscall.Errno = 5001 + ERROR_DEPENDENCY_NOT_FOUND syscall.Errno = 5002 + ERROR_DEPENDENCY_ALREADY_EXISTS syscall.Errno = 5003 + ERROR_RESOURCE_NOT_ONLINE syscall.Errno = 5004 + ERROR_HOST_NODE_NOT_AVAILABLE syscall.Errno = 5005 + ERROR_RESOURCE_NOT_AVAILABLE syscall.Errno = 5006 + ERROR_RESOURCE_NOT_FOUND syscall.Errno = 5007 + ERROR_SHUTDOWN_CLUSTER syscall.Errno = 5008 + ERROR_CANT_EVICT_ACTIVE_NODE syscall.Errno = 5009 + ERROR_OBJECT_ALREADY_EXISTS syscall.Errno = 5010 + ERROR_OBJECT_IN_LIST syscall.Errno = 5011 + ERROR_GROUP_NOT_AVAILABLE syscall.Errno = 5012 + ERROR_GROUP_NOT_FOUND syscall.Errno = 5013 + ERROR_GROUP_NOT_ONLINE syscall.Errno = 5014 + ERROR_HOST_NODE_NOT_RESOURCE_OWNER syscall.Errno = 5015 + ERROR_HOST_NODE_NOT_GROUP_OWNER syscall.Errno = 5016 + ERROR_RESMON_CREATE_FAILED syscall.Errno = 5017 + ERROR_RESMON_ONLINE_FAILED syscall.Errno = 5018 + ERROR_RESOURCE_ONLINE syscall.Errno = 5019 + ERROR_QUORUM_RESOURCE syscall.Errno = 5020 + ERROR_NOT_QUORUM_CAPABLE syscall.Errno = 5021 + ERROR_CLUSTER_SHUTTING_DOWN syscall.Errno = 5022 + ERROR_INVALID_STATE syscall.Errno = 5023 + ERROR_RESOURCE_PROPERTIES_STORED syscall.Errno = 5024 + ERROR_NOT_QUORUM_CLASS syscall.Errno = 5025 + ERROR_CORE_RESOURCE syscall.Errno = 5026 + ERROR_QUORUM_RESOURCE_ONLINE_FAILED syscall.Errno = 5027 + ERROR_QUORUMLOG_OPEN_FAILED syscall.Errno = 5028 + ERROR_CLUSTERLOG_CORRUPT syscall.Errno = 5029 + ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE syscall.Errno = 5030 + ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE syscall.Errno = 5031 + ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND syscall.Errno = 5032 + ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE syscall.Errno = 5033 + ERROR_QUORUM_OWNER_ALIVE syscall.Errno = 5034 + ERROR_NETWORK_NOT_AVAILABLE syscall.Errno = 5035 + ERROR_NODE_NOT_AVAILABLE syscall.Errno = 5036 + ERROR_ALL_NODES_NOT_AVAILABLE syscall.Errno = 5037 + ERROR_RESOURCE_FAILED syscall.Errno = 5038 + ERROR_CLUSTER_INVALID_NODE syscall.Errno = 5039 + ERROR_CLUSTER_NODE_EXISTS syscall.Errno = 5040 + ERROR_CLUSTER_JOIN_IN_PROGRESS syscall.Errno = 5041 + ERROR_CLUSTER_NODE_NOT_FOUND syscall.Errno = 5042 + ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND syscall.Errno = 5043 + ERROR_CLUSTER_NETWORK_EXISTS syscall.Errno = 5044 + ERROR_CLUSTER_NETWORK_NOT_FOUND syscall.Errno = 5045 + ERROR_CLUSTER_NETINTERFACE_EXISTS syscall.Errno = 5046 + ERROR_CLUSTER_NETINTERFACE_NOT_FOUND syscall.Errno = 5047 + ERROR_CLUSTER_INVALID_REQUEST syscall.Errno = 5048 + ERROR_CLUSTER_INVALID_NETWORK_PROVIDER syscall.Errno = 5049 + ERROR_CLUSTER_NODE_DOWN syscall.Errno = 5050 + ERROR_CLUSTER_NODE_UNREACHABLE syscall.Errno = 5051 + ERROR_CLUSTER_NODE_NOT_MEMBER syscall.Errno = 5052 + ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS syscall.Errno = 5053 + ERROR_CLUSTER_INVALID_NETWORK syscall.Errno = 5054 + ERROR_CLUSTER_NODE_UP syscall.Errno = 5056 + ERROR_CLUSTER_IPADDR_IN_USE syscall.Errno = 5057 + ERROR_CLUSTER_NODE_NOT_PAUSED syscall.Errno = 5058 + ERROR_CLUSTER_NO_SECURITY_CONTEXT syscall.Errno = 5059 + ERROR_CLUSTER_NETWORK_NOT_INTERNAL syscall.Errno = 5060 + ERROR_CLUSTER_NODE_ALREADY_UP syscall.Errno = 5061 + ERROR_CLUSTER_NODE_ALREADY_DOWN syscall.Errno = 5062 + ERROR_CLUSTER_NETWORK_ALREADY_ONLINE syscall.Errno = 5063 + ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE syscall.Errno = 5064 + ERROR_CLUSTER_NODE_ALREADY_MEMBER syscall.Errno = 5065 + ERROR_CLUSTER_LAST_INTERNAL_NETWORK syscall.Errno = 5066 + ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS syscall.Errno = 5067 + ERROR_INVALID_OPERATION_ON_QUORUM syscall.Errno = 5068 + ERROR_DEPENDENCY_NOT_ALLOWED syscall.Errno = 5069 + ERROR_CLUSTER_NODE_PAUSED syscall.Errno = 5070 + ERROR_NODE_CANT_HOST_RESOURCE syscall.Errno = 5071 + ERROR_CLUSTER_NODE_NOT_READY syscall.Errno = 5072 + ERROR_CLUSTER_NODE_SHUTTING_DOWN syscall.Errno = 5073 + ERROR_CLUSTER_JOIN_ABORTED syscall.Errno = 5074 + ERROR_CLUSTER_INCOMPATIBLE_VERSIONS syscall.Errno = 5075 + ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED syscall.Errno = 5076 + ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED syscall.Errno = 5077 + ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND syscall.Errno = 5078 + ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED syscall.Errno = 5079 + ERROR_CLUSTER_RESNAME_NOT_FOUND syscall.Errno = 5080 + ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED syscall.Errno = 5081 + ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST syscall.Errno = 5082 + ERROR_CLUSTER_DATABASE_SEQMISMATCH syscall.Errno = 5083 + ERROR_RESMON_INVALID_STATE syscall.Errno = 5084 + ERROR_CLUSTER_GUM_NOT_LOCKER syscall.Errno = 5085 + ERROR_QUORUM_DISK_NOT_FOUND syscall.Errno = 5086 + ERROR_DATABASE_BACKUP_CORRUPT syscall.Errno = 5087 + ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT syscall.Errno = 5088 + ERROR_RESOURCE_PROPERTY_UNCHANGEABLE syscall.Errno = 5089 + ERROR_NO_ADMIN_ACCESS_POINT syscall.Errno = 5090 + ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE syscall.Errno = 5890 + ERROR_CLUSTER_QUORUMLOG_NOT_FOUND syscall.Errno = 5891 + ERROR_CLUSTER_MEMBERSHIP_HALT syscall.Errno = 5892 + ERROR_CLUSTER_INSTANCE_ID_MISMATCH syscall.Errno = 5893 + ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP syscall.Errno = 5894 + ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH syscall.Errno = 5895 + ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP syscall.Errno = 5896 + ERROR_CLUSTER_PARAMETER_MISMATCH syscall.Errno = 5897 + ERROR_NODE_CANNOT_BE_CLUSTERED syscall.Errno = 5898 + ERROR_CLUSTER_WRONG_OS_VERSION syscall.Errno = 5899 + ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME syscall.Errno = 5900 + ERROR_CLUSCFG_ALREADY_COMMITTED syscall.Errno = 5901 + ERROR_CLUSCFG_ROLLBACK_FAILED syscall.Errno = 5902 + ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT syscall.Errno = 5903 + ERROR_CLUSTER_OLD_VERSION syscall.Errno = 5904 + ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME syscall.Errno = 5905 + ERROR_CLUSTER_NO_NET_ADAPTERS syscall.Errno = 5906 + ERROR_CLUSTER_POISONED syscall.Errno = 5907 + ERROR_CLUSTER_GROUP_MOVING syscall.Errno = 5908 + ERROR_CLUSTER_RESOURCE_TYPE_BUSY syscall.Errno = 5909 + ERROR_RESOURCE_CALL_TIMED_OUT syscall.Errno = 5910 + ERROR_INVALID_CLUSTER_IPV6_ADDRESS syscall.Errno = 5911 + ERROR_CLUSTER_INTERNAL_INVALID_FUNCTION syscall.Errno = 5912 + ERROR_CLUSTER_PARAMETER_OUT_OF_BOUNDS syscall.Errno = 5913 + ERROR_CLUSTER_PARTIAL_SEND syscall.Errno = 5914 + ERROR_CLUSTER_REGISTRY_INVALID_FUNCTION syscall.Errno = 5915 + ERROR_CLUSTER_INVALID_STRING_TERMINATION syscall.Errno = 5916 + ERROR_CLUSTER_INVALID_STRING_FORMAT syscall.Errno = 5917 + ERROR_CLUSTER_DATABASE_TRANSACTION_IN_PROGRESS syscall.Errno = 5918 + ERROR_CLUSTER_DATABASE_TRANSACTION_NOT_IN_PROGRESS syscall.Errno = 5919 + ERROR_CLUSTER_NULL_DATA syscall.Errno = 5920 + ERROR_CLUSTER_PARTIAL_READ syscall.Errno = 5921 + ERROR_CLUSTER_PARTIAL_WRITE syscall.Errno = 5922 + ERROR_CLUSTER_CANT_DESERIALIZE_DATA syscall.Errno = 5923 + ERROR_DEPENDENT_RESOURCE_PROPERTY_CONFLICT syscall.Errno = 5924 + ERROR_CLUSTER_NO_QUORUM syscall.Errno = 5925 + ERROR_CLUSTER_INVALID_IPV6_NETWORK syscall.Errno = 5926 + ERROR_CLUSTER_INVALID_IPV6_TUNNEL_NETWORK syscall.Errno = 5927 + ERROR_QUORUM_NOT_ALLOWED_IN_THIS_GROUP syscall.Errno = 5928 + ERROR_DEPENDENCY_TREE_TOO_COMPLEX syscall.Errno = 5929 + ERROR_EXCEPTION_IN_RESOURCE_CALL syscall.Errno = 5930 + ERROR_CLUSTER_RHS_FAILED_INITIALIZATION syscall.Errno = 5931 + ERROR_CLUSTER_NOT_INSTALLED syscall.Errno = 5932 + ERROR_CLUSTER_RESOURCES_MUST_BE_ONLINE_ON_THE_SAME_NODE syscall.Errno = 5933 + ERROR_CLUSTER_MAX_NODES_IN_CLUSTER syscall.Errno = 5934 + ERROR_CLUSTER_TOO_MANY_NODES syscall.Errno = 5935 + ERROR_CLUSTER_OBJECT_ALREADY_USED syscall.Errno = 5936 + ERROR_NONCORE_GROUPS_FOUND syscall.Errno = 5937 + ERROR_FILE_SHARE_RESOURCE_CONFLICT syscall.Errno = 5938 + ERROR_CLUSTER_EVICT_INVALID_REQUEST syscall.Errno = 5939 + ERROR_CLUSTER_SINGLETON_RESOURCE syscall.Errno = 5940 + ERROR_CLUSTER_GROUP_SINGLETON_RESOURCE syscall.Errno = 5941 + ERROR_CLUSTER_RESOURCE_PROVIDER_FAILED syscall.Errno = 5942 + ERROR_CLUSTER_RESOURCE_CONFIGURATION_ERROR syscall.Errno = 5943 + ERROR_CLUSTER_GROUP_BUSY syscall.Errno = 5944 + ERROR_CLUSTER_NOT_SHARED_VOLUME syscall.Errno = 5945 + ERROR_CLUSTER_INVALID_SECURITY_DESCRIPTOR syscall.Errno = 5946 + ERROR_CLUSTER_SHARED_VOLUMES_IN_USE syscall.Errno = 5947 + ERROR_CLUSTER_USE_SHARED_VOLUMES_API syscall.Errno = 5948 + ERROR_CLUSTER_BACKUP_IN_PROGRESS syscall.Errno = 5949 + ERROR_NON_CSV_PATH syscall.Errno = 5950 + ERROR_CSV_VOLUME_NOT_LOCAL syscall.Errno = 5951 + ERROR_CLUSTER_WATCHDOG_TERMINATING syscall.Errno = 5952 + ERROR_CLUSTER_RESOURCE_VETOED_MOVE_INCOMPATIBLE_NODES syscall.Errno = 5953 + ERROR_CLUSTER_INVALID_NODE_WEIGHT syscall.Errno = 5954 + ERROR_CLUSTER_RESOURCE_VETOED_CALL syscall.Errno = 5955 + ERROR_RESMON_SYSTEM_RESOURCES_LACKING syscall.Errno = 5956 + ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_DESTINATION syscall.Errno = 5957 + ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_SOURCE syscall.Errno = 5958 + ERROR_CLUSTER_GROUP_QUEUED syscall.Errno = 5959 + ERROR_CLUSTER_RESOURCE_LOCKED_STATUS syscall.Errno = 5960 + ERROR_CLUSTER_SHARED_VOLUME_FAILOVER_NOT_ALLOWED syscall.Errno = 5961 + ERROR_CLUSTER_NODE_DRAIN_IN_PROGRESS syscall.Errno = 5962 + ERROR_CLUSTER_DISK_NOT_CONNECTED syscall.Errno = 5963 + ERROR_DISK_NOT_CSV_CAPABLE syscall.Errno = 5964 + ERROR_RESOURCE_NOT_IN_AVAILABLE_STORAGE syscall.Errno = 5965 + ERROR_CLUSTER_SHARED_VOLUME_REDIRECTED syscall.Errno = 5966 + ERROR_CLUSTER_SHARED_VOLUME_NOT_REDIRECTED syscall.Errno = 5967 + ERROR_CLUSTER_CANNOT_RETURN_PROPERTIES syscall.Errno = 5968 + ERROR_CLUSTER_RESOURCE_CONTAINS_UNSUPPORTED_DIFF_AREA_FOR_SHARED_VOLUMES syscall.Errno = 5969 + ERROR_CLUSTER_RESOURCE_IS_IN_MAINTENANCE_MODE syscall.Errno = 5970 + ERROR_CLUSTER_AFFINITY_CONFLICT syscall.Errno = 5971 + ERROR_CLUSTER_RESOURCE_IS_REPLICA_VIRTUAL_MACHINE syscall.Errno = 5972 + ERROR_CLUSTER_UPGRADE_INCOMPATIBLE_VERSIONS syscall.Errno = 5973 + ERROR_CLUSTER_UPGRADE_FIX_QUORUM_NOT_SUPPORTED syscall.Errno = 5974 + ERROR_CLUSTER_UPGRADE_RESTART_REQUIRED syscall.Errno = 5975 + ERROR_CLUSTER_UPGRADE_IN_PROGRESS syscall.Errno = 5976 + ERROR_CLUSTER_UPGRADE_INCOMPLETE syscall.Errno = 5977 + ERROR_CLUSTER_NODE_IN_GRACE_PERIOD syscall.Errno = 5978 + ERROR_CLUSTER_CSV_IO_PAUSE_TIMEOUT syscall.Errno = 5979 + ERROR_NODE_NOT_ACTIVE_CLUSTER_MEMBER syscall.Errno = 5980 + ERROR_CLUSTER_RESOURCE_NOT_MONITORED syscall.Errno = 5981 + ERROR_CLUSTER_RESOURCE_DOES_NOT_SUPPORT_UNMONITORED syscall.Errno = 5982 + ERROR_CLUSTER_RESOURCE_IS_REPLICATED syscall.Errno = 5983 + ERROR_CLUSTER_NODE_ISOLATED syscall.Errno = 5984 + ERROR_CLUSTER_NODE_QUARANTINED syscall.Errno = 5985 + ERROR_CLUSTER_DATABASE_UPDATE_CONDITION_FAILED syscall.Errno = 5986 + ERROR_CLUSTER_SPACE_DEGRADED syscall.Errno = 5987 + ERROR_CLUSTER_TOKEN_DELEGATION_NOT_SUPPORTED syscall.Errno = 5988 + ERROR_CLUSTER_CSV_INVALID_HANDLE syscall.Errno = 5989 + ERROR_CLUSTER_CSV_SUPPORTED_ONLY_ON_COORDINATOR syscall.Errno = 5990 + ERROR_GROUPSET_NOT_AVAILABLE syscall.Errno = 5991 + ERROR_GROUPSET_NOT_FOUND syscall.Errno = 5992 + ERROR_GROUPSET_CANT_PROVIDE syscall.Errno = 5993 + ERROR_CLUSTER_FAULT_DOMAIN_PARENT_NOT_FOUND syscall.Errno = 5994 + ERROR_CLUSTER_FAULT_DOMAIN_INVALID_HIERARCHY syscall.Errno = 5995 + ERROR_CLUSTER_FAULT_DOMAIN_FAILED_S2D_VALIDATION syscall.Errno = 5996 + ERROR_CLUSTER_FAULT_DOMAIN_S2D_CONNECTIVITY_LOSS syscall.Errno = 5997 + ERROR_CLUSTER_INVALID_INFRASTRUCTURE_FILESERVER_NAME syscall.Errno = 5998 + ERROR_CLUSTERSET_MANAGEMENT_CLUSTER_UNREACHABLE syscall.Errno = 5999 + ERROR_ENCRYPTION_FAILED syscall.Errno = 6000 + ERROR_DECRYPTION_FAILED syscall.Errno = 6001 + ERROR_FILE_ENCRYPTED syscall.Errno = 6002 + ERROR_NO_RECOVERY_POLICY syscall.Errno = 6003 + ERROR_NO_EFS syscall.Errno = 6004 + ERROR_WRONG_EFS syscall.Errno = 6005 + ERROR_NO_USER_KEYS syscall.Errno = 6006 + ERROR_FILE_NOT_ENCRYPTED syscall.Errno = 6007 + ERROR_NOT_EXPORT_FORMAT syscall.Errno = 6008 + ERROR_FILE_READ_ONLY syscall.Errno = 6009 + ERROR_DIR_EFS_DISALLOWED syscall.Errno = 6010 + ERROR_EFS_SERVER_NOT_TRUSTED syscall.Errno = 6011 + ERROR_BAD_RECOVERY_POLICY syscall.Errno = 6012 + ERROR_EFS_ALG_BLOB_TOO_BIG syscall.Errno = 6013 + ERROR_VOLUME_NOT_SUPPORT_EFS syscall.Errno = 6014 + ERROR_EFS_DISABLED syscall.Errno = 6015 + ERROR_EFS_VERSION_NOT_SUPPORT syscall.Errno = 6016 + ERROR_CS_ENCRYPTION_INVALID_SERVER_RESPONSE syscall.Errno = 6017 + ERROR_CS_ENCRYPTION_UNSUPPORTED_SERVER syscall.Errno = 6018 + ERROR_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE syscall.Errno = 6019 + ERROR_CS_ENCRYPTION_NEW_ENCRYPTED_FILE syscall.Errno = 6020 + ERROR_CS_ENCRYPTION_FILE_NOT_CSE syscall.Errno = 6021 + ERROR_ENCRYPTION_POLICY_DENIES_OPERATION syscall.Errno = 6022 + ERROR_WIP_ENCRYPTION_FAILED syscall.Errno = 6023 + ERROR_NO_BROWSER_SERVERS_FOUND syscall.Errno = 6118 + SCHED_E_SERVICE_NOT_LOCALSYSTEM syscall.Errno = 6200 + ERROR_LOG_SECTOR_INVALID syscall.Errno = 6600 + ERROR_LOG_SECTOR_PARITY_INVALID syscall.Errno = 6601 + ERROR_LOG_SECTOR_REMAPPED syscall.Errno = 6602 + ERROR_LOG_BLOCK_INCOMPLETE syscall.Errno = 6603 + ERROR_LOG_INVALID_RANGE syscall.Errno = 6604 + ERROR_LOG_BLOCKS_EXHAUSTED syscall.Errno = 6605 + ERROR_LOG_READ_CONTEXT_INVALID syscall.Errno = 6606 + ERROR_LOG_RESTART_INVALID syscall.Errno = 6607 + ERROR_LOG_BLOCK_VERSION syscall.Errno = 6608 + ERROR_LOG_BLOCK_INVALID syscall.Errno = 6609 + ERROR_LOG_READ_MODE_INVALID syscall.Errno = 6610 + ERROR_LOG_NO_RESTART syscall.Errno = 6611 + ERROR_LOG_METADATA_CORRUPT syscall.Errno = 6612 + ERROR_LOG_METADATA_INVALID syscall.Errno = 6613 + ERROR_LOG_METADATA_INCONSISTENT syscall.Errno = 6614 + ERROR_LOG_RESERVATION_INVALID syscall.Errno = 6615 + ERROR_LOG_CANT_DELETE syscall.Errno = 6616 + ERROR_LOG_CONTAINER_LIMIT_EXCEEDED syscall.Errno = 6617 + ERROR_LOG_START_OF_LOG syscall.Errno = 6618 + ERROR_LOG_POLICY_ALREADY_INSTALLED syscall.Errno = 6619 + ERROR_LOG_POLICY_NOT_INSTALLED syscall.Errno = 6620 + ERROR_LOG_POLICY_INVALID syscall.Errno = 6621 + ERROR_LOG_POLICY_CONFLICT syscall.Errno = 6622 + ERROR_LOG_PINNED_ARCHIVE_TAIL syscall.Errno = 6623 + ERROR_LOG_RECORD_NONEXISTENT syscall.Errno = 6624 + ERROR_LOG_RECORDS_RESERVED_INVALID syscall.Errno = 6625 + ERROR_LOG_SPACE_RESERVED_INVALID syscall.Errno = 6626 + ERROR_LOG_TAIL_INVALID syscall.Errno = 6627 + ERROR_LOG_FULL syscall.Errno = 6628 + ERROR_COULD_NOT_RESIZE_LOG syscall.Errno = 6629 + ERROR_LOG_MULTIPLEXED syscall.Errno = 6630 + ERROR_LOG_DEDICATED syscall.Errno = 6631 + ERROR_LOG_ARCHIVE_NOT_IN_PROGRESS syscall.Errno = 6632 + ERROR_LOG_ARCHIVE_IN_PROGRESS syscall.Errno = 6633 + ERROR_LOG_EPHEMERAL syscall.Errno = 6634 + ERROR_LOG_NOT_ENOUGH_CONTAINERS syscall.Errno = 6635 + ERROR_LOG_CLIENT_ALREADY_REGISTERED syscall.Errno = 6636 + ERROR_LOG_CLIENT_NOT_REGISTERED syscall.Errno = 6637 + ERROR_LOG_FULL_HANDLER_IN_PROGRESS syscall.Errno = 6638 + ERROR_LOG_CONTAINER_READ_FAILED syscall.Errno = 6639 + ERROR_LOG_CONTAINER_WRITE_FAILED syscall.Errno = 6640 + ERROR_LOG_CONTAINER_OPEN_FAILED syscall.Errno = 6641 + ERROR_LOG_CONTAINER_STATE_INVALID syscall.Errno = 6642 + ERROR_LOG_STATE_INVALID syscall.Errno = 6643 + ERROR_LOG_PINNED syscall.Errno = 6644 + ERROR_LOG_METADATA_FLUSH_FAILED syscall.Errno = 6645 + ERROR_LOG_INCONSISTENT_SECURITY syscall.Errno = 6646 + ERROR_LOG_APPENDED_FLUSH_FAILED syscall.Errno = 6647 + ERROR_LOG_PINNED_RESERVATION syscall.Errno = 6648 + ERROR_INVALID_TRANSACTION syscall.Errno = 6700 + ERROR_TRANSACTION_NOT_ACTIVE syscall.Errno = 6701 + ERROR_TRANSACTION_REQUEST_NOT_VALID syscall.Errno = 6702 + ERROR_TRANSACTION_NOT_REQUESTED syscall.Errno = 6703 + ERROR_TRANSACTION_ALREADY_ABORTED syscall.Errno = 6704 + ERROR_TRANSACTION_ALREADY_COMMITTED syscall.Errno = 6705 + ERROR_TM_INITIALIZATION_FAILED syscall.Errno = 6706 + ERROR_RESOURCEMANAGER_READ_ONLY syscall.Errno = 6707 + ERROR_TRANSACTION_NOT_JOINED syscall.Errno = 6708 + ERROR_TRANSACTION_SUPERIOR_EXISTS syscall.Errno = 6709 + ERROR_CRM_PROTOCOL_ALREADY_EXISTS syscall.Errno = 6710 + ERROR_TRANSACTION_PROPAGATION_FAILED syscall.Errno = 6711 + ERROR_CRM_PROTOCOL_NOT_FOUND syscall.Errno = 6712 + ERROR_TRANSACTION_INVALID_MARSHALL_BUFFER syscall.Errno = 6713 + ERROR_CURRENT_TRANSACTION_NOT_VALID syscall.Errno = 6714 + ERROR_TRANSACTION_NOT_FOUND syscall.Errno = 6715 + ERROR_RESOURCEMANAGER_NOT_FOUND syscall.Errno = 6716 + ERROR_ENLISTMENT_NOT_FOUND syscall.Errno = 6717 + ERROR_TRANSACTIONMANAGER_NOT_FOUND syscall.Errno = 6718 + ERROR_TRANSACTIONMANAGER_NOT_ONLINE syscall.Errno = 6719 + ERROR_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION syscall.Errno = 6720 + ERROR_TRANSACTION_NOT_ROOT syscall.Errno = 6721 + ERROR_TRANSACTION_OBJECT_EXPIRED syscall.Errno = 6722 + ERROR_TRANSACTION_RESPONSE_NOT_ENLISTED syscall.Errno = 6723 + ERROR_TRANSACTION_RECORD_TOO_LONG syscall.Errno = 6724 + ERROR_IMPLICIT_TRANSACTION_NOT_SUPPORTED syscall.Errno = 6725 + ERROR_TRANSACTION_INTEGRITY_VIOLATED syscall.Errno = 6726 + ERROR_TRANSACTIONMANAGER_IDENTITY_MISMATCH syscall.Errno = 6727 + ERROR_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT syscall.Errno = 6728 + ERROR_TRANSACTION_MUST_WRITETHROUGH syscall.Errno = 6729 + ERROR_TRANSACTION_NO_SUPERIOR syscall.Errno = 6730 + ERROR_HEURISTIC_DAMAGE_POSSIBLE syscall.Errno = 6731 + ERROR_TRANSACTIONAL_CONFLICT syscall.Errno = 6800 + ERROR_RM_NOT_ACTIVE syscall.Errno = 6801 + ERROR_RM_METADATA_CORRUPT syscall.Errno = 6802 + ERROR_DIRECTORY_NOT_RM syscall.Errno = 6803 + ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE syscall.Errno = 6805 + ERROR_LOG_RESIZE_INVALID_SIZE syscall.Errno = 6806 + ERROR_OBJECT_NO_LONGER_EXISTS syscall.Errno = 6807 + ERROR_STREAM_MINIVERSION_NOT_FOUND syscall.Errno = 6808 + ERROR_STREAM_MINIVERSION_NOT_VALID syscall.Errno = 6809 + ERROR_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION syscall.Errno = 6810 + ERROR_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT syscall.Errno = 6811 + ERROR_CANT_CREATE_MORE_STREAM_MINIVERSIONS syscall.Errno = 6812 + ERROR_REMOTE_FILE_VERSION_MISMATCH syscall.Errno = 6814 + ERROR_HANDLE_NO_LONGER_VALID syscall.Errno = 6815 + ERROR_NO_TXF_METADATA syscall.Errno = 6816 + ERROR_LOG_CORRUPTION_DETECTED syscall.Errno = 6817 + ERROR_CANT_RECOVER_WITH_HANDLE_OPEN syscall.Errno = 6818 + ERROR_RM_DISCONNECTED syscall.Errno = 6819 + ERROR_ENLISTMENT_NOT_SUPERIOR syscall.Errno = 6820 + ERROR_RECOVERY_NOT_NEEDED syscall.Errno = 6821 + ERROR_RM_ALREADY_STARTED syscall.Errno = 6822 + ERROR_FILE_IDENTITY_NOT_PERSISTENT syscall.Errno = 6823 + ERROR_CANT_BREAK_TRANSACTIONAL_DEPENDENCY syscall.Errno = 6824 + ERROR_CANT_CROSS_RM_BOUNDARY syscall.Errno = 6825 + ERROR_TXF_DIR_NOT_EMPTY syscall.Errno = 6826 + ERROR_INDOUBT_TRANSACTIONS_EXIST syscall.Errno = 6827 + ERROR_TM_VOLATILE syscall.Errno = 6828 + ERROR_ROLLBACK_TIMER_EXPIRED syscall.Errno = 6829 + ERROR_TXF_ATTRIBUTE_CORRUPT syscall.Errno = 6830 + ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION syscall.Errno = 6831 + ERROR_TRANSACTIONAL_OPEN_NOT_ALLOWED syscall.Errno = 6832 + ERROR_LOG_GROWTH_FAILED syscall.Errno = 6833 + ERROR_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE syscall.Errno = 6834 + ERROR_TXF_METADATA_ALREADY_PRESENT syscall.Errno = 6835 + ERROR_TRANSACTION_SCOPE_CALLBACKS_NOT_SET syscall.Errno = 6836 + ERROR_TRANSACTION_REQUIRED_PROMOTION syscall.Errno = 6837 + ERROR_CANNOT_EXECUTE_FILE_IN_TRANSACTION syscall.Errno = 6838 + ERROR_TRANSACTIONS_NOT_FROZEN syscall.Errno = 6839 + ERROR_TRANSACTION_FREEZE_IN_PROGRESS syscall.Errno = 6840 + ERROR_NOT_SNAPSHOT_VOLUME syscall.Errno = 6841 + ERROR_NO_SAVEPOINT_WITH_OPEN_FILES syscall.Errno = 6842 + ERROR_DATA_LOST_REPAIR syscall.Errno = 6843 + ERROR_SPARSE_NOT_ALLOWED_IN_TRANSACTION syscall.Errno = 6844 + ERROR_TM_IDENTITY_MISMATCH syscall.Errno = 6845 + ERROR_FLOATED_SECTION syscall.Errno = 6846 + ERROR_CANNOT_ACCEPT_TRANSACTED_WORK syscall.Errno = 6847 + ERROR_CANNOT_ABORT_TRANSACTIONS syscall.Errno = 6848 + ERROR_BAD_CLUSTERS syscall.Errno = 6849 + ERROR_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION syscall.Errno = 6850 + ERROR_VOLUME_DIRTY syscall.Errno = 6851 + ERROR_NO_LINK_TRACKING_IN_TRANSACTION syscall.Errno = 6852 + ERROR_OPERATION_NOT_SUPPORTED_IN_TRANSACTION syscall.Errno = 6853 + ERROR_EXPIRED_HANDLE syscall.Errno = 6854 + ERROR_TRANSACTION_NOT_ENLISTED syscall.Errno = 6855 + ERROR_CTX_WINSTATION_NAME_INVALID syscall.Errno = 7001 + ERROR_CTX_INVALID_PD syscall.Errno = 7002 + ERROR_CTX_PD_NOT_FOUND syscall.Errno = 7003 + ERROR_CTX_WD_NOT_FOUND syscall.Errno = 7004 + ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY syscall.Errno = 7005 + ERROR_CTX_SERVICE_NAME_COLLISION syscall.Errno = 7006 + ERROR_CTX_CLOSE_PENDING syscall.Errno = 7007 + ERROR_CTX_NO_OUTBUF syscall.Errno = 7008 + ERROR_CTX_MODEM_INF_NOT_FOUND syscall.Errno = 7009 + ERROR_CTX_INVALID_MODEMNAME syscall.Errno = 7010 + ERROR_CTX_MODEM_RESPONSE_ERROR syscall.Errno = 7011 + ERROR_CTX_MODEM_RESPONSE_TIMEOUT syscall.Errno = 7012 + ERROR_CTX_MODEM_RESPONSE_NO_CARRIER syscall.Errno = 7013 + ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE syscall.Errno = 7014 + ERROR_CTX_MODEM_RESPONSE_BUSY syscall.Errno = 7015 + ERROR_CTX_MODEM_RESPONSE_VOICE syscall.Errno = 7016 + ERROR_CTX_TD_ERROR syscall.Errno = 7017 + ERROR_CTX_WINSTATION_NOT_FOUND syscall.Errno = 7022 + ERROR_CTX_WINSTATION_ALREADY_EXISTS syscall.Errno = 7023 + ERROR_CTX_WINSTATION_BUSY syscall.Errno = 7024 + ERROR_CTX_BAD_VIDEO_MODE syscall.Errno = 7025 + ERROR_CTX_GRAPHICS_INVALID syscall.Errno = 7035 + ERROR_CTX_LOGON_DISABLED syscall.Errno = 7037 + ERROR_CTX_NOT_CONSOLE syscall.Errno = 7038 + ERROR_CTX_CLIENT_QUERY_TIMEOUT syscall.Errno = 7040 + ERROR_CTX_CONSOLE_DISCONNECT syscall.Errno = 7041 + ERROR_CTX_CONSOLE_CONNECT syscall.Errno = 7042 + ERROR_CTX_SHADOW_DENIED syscall.Errno = 7044 + ERROR_CTX_WINSTATION_ACCESS_DENIED syscall.Errno = 7045 + ERROR_CTX_INVALID_WD syscall.Errno = 7049 + ERROR_CTX_SHADOW_INVALID syscall.Errno = 7050 + ERROR_CTX_SHADOW_DISABLED syscall.Errno = 7051 + ERROR_CTX_CLIENT_LICENSE_IN_USE syscall.Errno = 7052 + ERROR_CTX_CLIENT_LICENSE_NOT_SET syscall.Errno = 7053 + ERROR_CTX_LICENSE_NOT_AVAILABLE syscall.Errno = 7054 + ERROR_CTX_LICENSE_CLIENT_INVALID syscall.Errno = 7055 + ERROR_CTX_LICENSE_EXPIRED syscall.Errno = 7056 + ERROR_CTX_SHADOW_NOT_RUNNING syscall.Errno = 7057 + ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE syscall.Errno = 7058 + ERROR_ACTIVATION_COUNT_EXCEEDED syscall.Errno = 7059 + ERROR_CTX_WINSTATIONS_DISABLED syscall.Errno = 7060 + ERROR_CTX_ENCRYPTION_LEVEL_REQUIRED syscall.Errno = 7061 + ERROR_CTX_SESSION_IN_USE syscall.Errno = 7062 + ERROR_CTX_NO_FORCE_LOGOFF syscall.Errno = 7063 + ERROR_CTX_ACCOUNT_RESTRICTION syscall.Errno = 7064 + ERROR_RDP_PROTOCOL_ERROR syscall.Errno = 7065 + ERROR_CTX_CDM_CONNECT syscall.Errno = 7066 + ERROR_CTX_CDM_DISCONNECT syscall.Errno = 7067 + ERROR_CTX_SECURITY_LAYER_ERROR syscall.Errno = 7068 + ERROR_TS_INCOMPATIBLE_SESSIONS syscall.Errno = 7069 + ERROR_TS_VIDEO_SUBSYSTEM_ERROR syscall.Errno = 7070 + FRS_ERR_INVALID_API_SEQUENCE syscall.Errno = 8001 + FRS_ERR_STARTING_SERVICE syscall.Errno = 8002 + FRS_ERR_STOPPING_SERVICE syscall.Errno = 8003 + FRS_ERR_INTERNAL_API syscall.Errno = 8004 + FRS_ERR_INTERNAL syscall.Errno = 8005 + FRS_ERR_SERVICE_COMM syscall.Errno = 8006 + FRS_ERR_INSUFFICIENT_PRIV syscall.Errno = 8007 + FRS_ERR_AUTHENTICATION syscall.Errno = 8008 + FRS_ERR_PARENT_INSUFFICIENT_PRIV syscall.Errno = 8009 + FRS_ERR_PARENT_AUTHENTICATION syscall.Errno = 8010 + FRS_ERR_CHILD_TO_PARENT_COMM syscall.Errno = 8011 + FRS_ERR_PARENT_TO_CHILD_COMM syscall.Errno = 8012 + FRS_ERR_SYSVOL_POPULATE syscall.Errno = 8013 + FRS_ERR_SYSVOL_POPULATE_TIMEOUT syscall.Errno = 8014 + FRS_ERR_SYSVOL_IS_BUSY syscall.Errno = 8015 + FRS_ERR_SYSVOL_DEMOTE syscall.Errno = 8016 + FRS_ERR_INVALID_SERVICE_PARAMETER syscall.Errno = 8017 + DS_S_SUCCESS = ERROR_SUCCESS + ERROR_DS_NOT_INSTALLED syscall.Errno = 8200 + ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY syscall.Errno = 8201 + ERROR_DS_NO_ATTRIBUTE_OR_VALUE syscall.Errno = 8202 + ERROR_DS_INVALID_ATTRIBUTE_SYNTAX syscall.Errno = 8203 + ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED syscall.Errno = 8204 + ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS syscall.Errno = 8205 + ERROR_DS_BUSY syscall.Errno = 8206 + ERROR_DS_UNAVAILABLE syscall.Errno = 8207 + ERROR_DS_NO_RIDS_ALLOCATED syscall.Errno = 8208 + ERROR_DS_NO_MORE_RIDS syscall.Errno = 8209 + ERROR_DS_INCORRECT_ROLE_OWNER syscall.Errno = 8210 + ERROR_DS_RIDMGR_INIT_ERROR syscall.Errno = 8211 + ERROR_DS_OBJ_CLASS_VIOLATION syscall.Errno = 8212 + ERROR_DS_CANT_ON_NON_LEAF syscall.Errno = 8213 + ERROR_DS_CANT_ON_RDN syscall.Errno = 8214 + ERROR_DS_CANT_MOD_OBJ_CLASS syscall.Errno = 8215 + ERROR_DS_CROSS_DOM_MOVE_ERROR syscall.Errno = 8216 + ERROR_DS_GC_NOT_AVAILABLE syscall.Errno = 8217 + ERROR_SHARED_POLICY syscall.Errno = 8218 + ERROR_POLICY_OBJECT_NOT_FOUND syscall.Errno = 8219 + ERROR_POLICY_ONLY_IN_DS syscall.Errno = 8220 + ERROR_PROMOTION_ACTIVE syscall.Errno = 8221 + ERROR_NO_PROMOTION_ACTIVE syscall.Errno = 8222 + ERROR_DS_OPERATIONS_ERROR syscall.Errno = 8224 + ERROR_DS_PROTOCOL_ERROR syscall.Errno = 8225 + ERROR_DS_TIMELIMIT_EXCEEDED syscall.Errno = 8226 + ERROR_DS_SIZELIMIT_EXCEEDED syscall.Errno = 8227 + ERROR_DS_ADMIN_LIMIT_EXCEEDED syscall.Errno = 8228 + ERROR_DS_COMPARE_FALSE syscall.Errno = 8229 + ERROR_DS_COMPARE_TRUE syscall.Errno = 8230 + ERROR_DS_AUTH_METHOD_NOT_SUPPORTED syscall.Errno = 8231 + ERROR_DS_STRONG_AUTH_REQUIRED syscall.Errno = 8232 + ERROR_DS_INAPPROPRIATE_AUTH syscall.Errno = 8233 + ERROR_DS_AUTH_UNKNOWN syscall.Errno = 8234 + ERROR_DS_REFERRAL syscall.Errno = 8235 + ERROR_DS_UNAVAILABLE_CRIT_EXTENSION syscall.Errno = 8236 + ERROR_DS_CONFIDENTIALITY_REQUIRED syscall.Errno = 8237 + ERROR_DS_INAPPROPRIATE_MATCHING syscall.Errno = 8238 + ERROR_DS_CONSTRAINT_VIOLATION syscall.Errno = 8239 + ERROR_DS_NO_SUCH_OBJECT syscall.Errno = 8240 + ERROR_DS_ALIAS_PROBLEM syscall.Errno = 8241 + ERROR_DS_INVALID_DN_SYNTAX syscall.Errno = 8242 + ERROR_DS_IS_LEAF syscall.Errno = 8243 + ERROR_DS_ALIAS_DEREF_PROBLEM syscall.Errno = 8244 + ERROR_DS_UNWILLING_TO_PERFORM syscall.Errno = 8245 + ERROR_DS_LOOP_DETECT syscall.Errno = 8246 + ERROR_DS_NAMING_VIOLATION syscall.Errno = 8247 + ERROR_DS_OBJECT_RESULTS_TOO_LARGE syscall.Errno = 8248 + ERROR_DS_AFFECTS_MULTIPLE_DSAS syscall.Errno = 8249 + ERROR_DS_SERVER_DOWN syscall.Errno = 8250 + ERROR_DS_LOCAL_ERROR syscall.Errno = 8251 + ERROR_DS_ENCODING_ERROR syscall.Errno = 8252 + ERROR_DS_DECODING_ERROR syscall.Errno = 8253 + ERROR_DS_FILTER_UNKNOWN syscall.Errno = 8254 + ERROR_DS_PARAM_ERROR syscall.Errno = 8255 + ERROR_DS_NOT_SUPPORTED syscall.Errno = 8256 + ERROR_DS_NO_RESULTS_RETURNED syscall.Errno = 8257 + ERROR_DS_CONTROL_NOT_FOUND syscall.Errno = 8258 + ERROR_DS_CLIENT_LOOP syscall.Errno = 8259 + ERROR_DS_REFERRAL_LIMIT_EXCEEDED syscall.Errno = 8260 + ERROR_DS_SORT_CONTROL_MISSING syscall.Errno = 8261 + ERROR_DS_OFFSET_RANGE_ERROR syscall.Errno = 8262 + ERROR_DS_RIDMGR_DISABLED syscall.Errno = 8263 + ERROR_DS_ROOT_MUST_BE_NC syscall.Errno = 8301 + ERROR_DS_ADD_REPLICA_INHIBITED syscall.Errno = 8302 + ERROR_DS_ATT_NOT_DEF_IN_SCHEMA syscall.Errno = 8303 + ERROR_DS_MAX_OBJ_SIZE_EXCEEDED syscall.Errno = 8304 + ERROR_DS_OBJ_STRING_NAME_EXISTS syscall.Errno = 8305 + ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA syscall.Errno = 8306 + ERROR_DS_RDN_DOESNT_MATCH_SCHEMA syscall.Errno = 8307 + ERROR_DS_NO_REQUESTED_ATTS_FOUND syscall.Errno = 8308 + ERROR_DS_USER_BUFFER_TO_SMALL syscall.Errno = 8309 + ERROR_DS_ATT_IS_NOT_ON_OBJ syscall.Errno = 8310 + ERROR_DS_ILLEGAL_MOD_OPERATION syscall.Errno = 8311 + ERROR_DS_OBJ_TOO_LARGE syscall.Errno = 8312 + ERROR_DS_BAD_INSTANCE_TYPE syscall.Errno = 8313 + ERROR_DS_MASTERDSA_REQUIRED syscall.Errno = 8314 + ERROR_DS_OBJECT_CLASS_REQUIRED syscall.Errno = 8315 + ERROR_DS_MISSING_REQUIRED_ATT syscall.Errno = 8316 + ERROR_DS_ATT_NOT_DEF_FOR_CLASS syscall.Errno = 8317 + ERROR_DS_ATT_ALREADY_EXISTS syscall.Errno = 8318 + ERROR_DS_CANT_ADD_ATT_VALUES syscall.Errno = 8320 + ERROR_DS_SINGLE_VALUE_CONSTRAINT syscall.Errno = 8321 + ERROR_DS_RANGE_CONSTRAINT syscall.Errno = 8322 + ERROR_DS_ATT_VAL_ALREADY_EXISTS syscall.Errno = 8323 + ERROR_DS_CANT_REM_MISSING_ATT syscall.Errno = 8324 + ERROR_DS_CANT_REM_MISSING_ATT_VAL syscall.Errno = 8325 + ERROR_DS_ROOT_CANT_BE_SUBREF syscall.Errno = 8326 + ERROR_DS_NO_CHAINING syscall.Errno = 8327 + ERROR_DS_NO_CHAINED_EVAL syscall.Errno = 8328 + ERROR_DS_NO_PARENT_OBJECT syscall.Errno = 8329 + ERROR_DS_PARENT_IS_AN_ALIAS syscall.Errno = 8330 + ERROR_DS_CANT_MIX_MASTER_AND_REPS syscall.Errno = 8331 + ERROR_DS_CHILDREN_EXIST syscall.Errno = 8332 + ERROR_DS_OBJ_NOT_FOUND syscall.Errno = 8333 + ERROR_DS_ALIASED_OBJ_MISSING syscall.Errno = 8334 + ERROR_DS_BAD_NAME_SYNTAX syscall.Errno = 8335 + ERROR_DS_ALIAS_POINTS_TO_ALIAS syscall.Errno = 8336 + ERROR_DS_CANT_DEREF_ALIAS syscall.Errno = 8337 + ERROR_DS_OUT_OF_SCOPE syscall.Errno = 8338 + ERROR_DS_OBJECT_BEING_REMOVED syscall.Errno = 8339 + ERROR_DS_CANT_DELETE_DSA_OBJ syscall.Errno = 8340 + ERROR_DS_GENERIC_ERROR syscall.Errno = 8341 + ERROR_DS_DSA_MUST_BE_INT_MASTER syscall.Errno = 8342 + ERROR_DS_CLASS_NOT_DSA syscall.Errno = 8343 + ERROR_DS_INSUFF_ACCESS_RIGHTS syscall.Errno = 8344 + ERROR_DS_ILLEGAL_SUPERIOR syscall.Errno = 8345 + ERROR_DS_ATTRIBUTE_OWNED_BY_SAM syscall.Errno = 8346 + ERROR_DS_NAME_TOO_MANY_PARTS syscall.Errno = 8347 + ERROR_DS_NAME_TOO_LONG syscall.Errno = 8348 + ERROR_DS_NAME_VALUE_TOO_LONG syscall.Errno = 8349 + ERROR_DS_NAME_UNPARSEABLE syscall.Errno = 8350 + ERROR_DS_NAME_TYPE_UNKNOWN syscall.Errno = 8351 + ERROR_DS_NOT_AN_OBJECT syscall.Errno = 8352 + ERROR_DS_SEC_DESC_TOO_SHORT syscall.Errno = 8353 + ERROR_DS_SEC_DESC_INVALID syscall.Errno = 8354 + ERROR_DS_NO_DELETED_NAME syscall.Errno = 8355 + ERROR_DS_SUBREF_MUST_HAVE_PARENT syscall.Errno = 8356 + ERROR_DS_NCNAME_MUST_BE_NC syscall.Errno = 8357 + ERROR_DS_CANT_ADD_SYSTEM_ONLY syscall.Errno = 8358 + ERROR_DS_CLASS_MUST_BE_CONCRETE syscall.Errno = 8359 + ERROR_DS_INVALID_DMD syscall.Errno = 8360 + ERROR_DS_OBJ_GUID_EXISTS syscall.Errno = 8361 + ERROR_DS_NOT_ON_BACKLINK syscall.Errno = 8362 + ERROR_DS_NO_CROSSREF_FOR_NC syscall.Errno = 8363 + ERROR_DS_SHUTTING_DOWN syscall.Errno = 8364 + ERROR_DS_UNKNOWN_OPERATION syscall.Errno = 8365 + ERROR_DS_INVALID_ROLE_OWNER syscall.Errno = 8366 + ERROR_DS_COULDNT_CONTACT_FSMO syscall.Errno = 8367 + ERROR_DS_CROSS_NC_DN_RENAME syscall.Errno = 8368 + ERROR_DS_CANT_MOD_SYSTEM_ONLY syscall.Errno = 8369 + ERROR_DS_REPLICATOR_ONLY syscall.Errno = 8370 + ERROR_DS_OBJ_CLASS_NOT_DEFINED syscall.Errno = 8371 + ERROR_DS_OBJ_CLASS_NOT_SUBCLASS syscall.Errno = 8372 + ERROR_DS_NAME_REFERENCE_INVALID syscall.Errno = 8373 + ERROR_DS_CROSS_REF_EXISTS syscall.Errno = 8374 + ERROR_DS_CANT_DEL_MASTER_CROSSREF syscall.Errno = 8375 + ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD syscall.Errno = 8376 + ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX syscall.Errno = 8377 + ERROR_DS_DUP_RDN syscall.Errno = 8378 + ERROR_DS_DUP_OID syscall.Errno = 8379 + ERROR_DS_DUP_MAPI_ID syscall.Errno = 8380 + ERROR_DS_DUP_SCHEMA_ID_GUID syscall.Errno = 8381 + ERROR_DS_DUP_LDAP_DISPLAY_NAME syscall.Errno = 8382 + ERROR_DS_SEMANTIC_ATT_TEST syscall.Errno = 8383 + ERROR_DS_SYNTAX_MISMATCH syscall.Errno = 8384 + ERROR_DS_EXISTS_IN_MUST_HAVE syscall.Errno = 8385 + ERROR_DS_EXISTS_IN_MAY_HAVE syscall.Errno = 8386 + ERROR_DS_NONEXISTENT_MAY_HAVE syscall.Errno = 8387 + ERROR_DS_NONEXISTENT_MUST_HAVE syscall.Errno = 8388 + ERROR_DS_AUX_CLS_TEST_FAIL syscall.Errno = 8389 + ERROR_DS_NONEXISTENT_POSS_SUP syscall.Errno = 8390 + ERROR_DS_SUB_CLS_TEST_FAIL syscall.Errno = 8391 + ERROR_DS_BAD_RDN_ATT_ID_SYNTAX syscall.Errno = 8392 + ERROR_DS_EXISTS_IN_AUX_CLS syscall.Errno = 8393 + ERROR_DS_EXISTS_IN_SUB_CLS syscall.Errno = 8394 + ERROR_DS_EXISTS_IN_POSS_SUP syscall.Errno = 8395 + ERROR_DS_RECALCSCHEMA_FAILED syscall.Errno = 8396 + ERROR_DS_TREE_DELETE_NOT_FINISHED syscall.Errno = 8397 + ERROR_DS_CANT_DELETE syscall.Errno = 8398 + ERROR_DS_ATT_SCHEMA_REQ_ID syscall.Errno = 8399 + ERROR_DS_BAD_ATT_SCHEMA_SYNTAX syscall.Errno = 8400 + ERROR_DS_CANT_CACHE_ATT syscall.Errno = 8401 + ERROR_DS_CANT_CACHE_CLASS syscall.Errno = 8402 + ERROR_DS_CANT_REMOVE_ATT_CACHE syscall.Errno = 8403 + ERROR_DS_CANT_REMOVE_CLASS_CACHE syscall.Errno = 8404 + ERROR_DS_CANT_RETRIEVE_DN syscall.Errno = 8405 + ERROR_DS_MISSING_SUPREF syscall.Errno = 8406 + ERROR_DS_CANT_RETRIEVE_INSTANCE syscall.Errno = 8407 + ERROR_DS_CODE_INCONSISTENCY syscall.Errno = 8408 + ERROR_DS_DATABASE_ERROR syscall.Errno = 8409 + ERROR_DS_GOVERNSID_MISSING syscall.Errno = 8410 + ERROR_DS_MISSING_EXPECTED_ATT syscall.Errno = 8411 + ERROR_DS_NCNAME_MISSING_CR_REF syscall.Errno = 8412 + ERROR_DS_SECURITY_CHECKING_ERROR syscall.Errno = 8413 + ERROR_DS_SCHEMA_NOT_LOADED syscall.Errno = 8414 + ERROR_DS_SCHEMA_ALLOC_FAILED syscall.Errno = 8415 + ERROR_DS_ATT_SCHEMA_REQ_SYNTAX syscall.Errno = 8416 + ERROR_DS_GCVERIFY_ERROR syscall.Errno = 8417 + ERROR_DS_DRA_SCHEMA_MISMATCH syscall.Errno = 8418 + ERROR_DS_CANT_FIND_DSA_OBJ syscall.Errno = 8419 + ERROR_DS_CANT_FIND_EXPECTED_NC syscall.Errno = 8420 + ERROR_DS_CANT_FIND_NC_IN_CACHE syscall.Errno = 8421 + ERROR_DS_CANT_RETRIEVE_CHILD syscall.Errno = 8422 + ERROR_DS_SECURITY_ILLEGAL_MODIFY syscall.Errno = 8423 + ERROR_DS_CANT_REPLACE_HIDDEN_REC syscall.Errno = 8424 + ERROR_DS_BAD_HIERARCHY_FILE syscall.Errno = 8425 + ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED syscall.Errno = 8426 + ERROR_DS_CONFIG_PARAM_MISSING syscall.Errno = 8427 + ERROR_DS_COUNTING_AB_INDICES_FAILED syscall.Errno = 8428 + ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED syscall.Errno = 8429 + ERROR_DS_INTERNAL_FAILURE syscall.Errno = 8430 + ERROR_DS_UNKNOWN_ERROR syscall.Errno = 8431 + ERROR_DS_ROOT_REQUIRES_CLASS_TOP syscall.Errno = 8432 + ERROR_DS_REFUSING_FSMO_ROLES syscall.Errno = 8433 + ERROR_DS_MISSING_FSMO_SETTINGS syscall.Errno = 8434 + ERROR_DS_UNABLE_TO_SURRENDER_ROLES syscall.Errno = 8435 + ERROR_DS_DRA_GENERIC syscall.Errno = 8436 + ERROR_DS_DRA_INVALID_PARAMETER syscall.Errno = 8437 + ERROR_DS_DRA_BUSY syscall.Errno = 8438 + ERROR_DS_DRA_BAD_DN syscall.Errno = 8439 + ERROR_DS_DRA_BAD_NC syscall.Errno = 8440 + ERROR_DS_DRA_DN_EXISTS syscall.Errno = 8441 + ERROR_DS_DRA_INTERNAL_ERROR syscall.Errno = 8442 + ERROR_DS_DRA_INCONSISTENT_DIT syscall.Errno = 8443 + ERROR_DS_DRA_CONNECTION_FAILED syscall.Errno = 8444 + ERROR_DS_DRA_BAD_INSTANCE_TYPE syscall.Errno = 8445 + ERROR_DS_DRA_OUT_OF_MEM syscall.Errno = 8446 + ERROR_DS_DRA_MAIL_PROBLEM syscall.Errno = 8447 + ERROR_DS_DRA_REF_ALREADY_EXISTS syscall.Errno = 8448 + ERROR_DS_DRA_REF_NOT_FOUND syscall.Errno = 8449 + ERROR_DS_DRA_OBJ_IS_REP_SOURCE syscall.Errno = 8450 + ERROR_DS_DRA_DB_ERROR syscall.Errno = 8451 + ERROR_DS_DRA_NO_REPLICA syscall.Errno = 8452 + ERROR_DS_DRA_ACCESS_DENIED syscall.Errno = 8453 + ERROR_DS_DRA_NOT_SUPPORTED syscall.Errno = 8454 + ERROR_DS_DRA_RPC_CANCELLED syscall.Errno = 8455 + ERROR_DS_DRA_SOURCE_DISABLED syscall.Errno = 8456 + ERROR_DS_DRA_SINK_DISABLED syscall.Errno = 8457 + ERROR_DS_DRA_NAME_COLLISION syscall.Errno = 8458 + ERROR_DS_DRA_SOURCE_REINSTALLED syscall.Errno = 8459 + ERROR_DS_DRA_MISSING_PARENT syscall.Errno = 8460 + ERROR_DS_DRA_PREEMPTED syscall.Errno = 8461 + ERROR_DS_DRA_ABANDON_SYNC syscall.Errno = 8462 + ERROR_DS_DRA_SHUTDOWN syscall.Errno = 8463 + ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET syscall.Errno = 8464 + ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA syscall.Errno = 8465 + ERROR_DS_DRA_EXTN_CONNECTION_FAILED syscall.Errno = 8466 + ERROR_DS_INSTALL_SCHEMA_MISMATCH syscall.Errno = 8467 + ERROR_DS_DUP_LINK_ID syscall.Errno = 8468 + ERROR_DS_NAME_ERROR_RESOLVING syscall.Errno = 8469 + ERROR_DS_NAME_ERROR_NOT_FOUND syscall.Errno = 8470 + ERROR_DS_NAME_ERROR_NOT_UNIQUE syscall.Errno = 8471 + ERROR_DS_NAME_ERROR_NO_MAPPING syscall.Errno = 8472 + ERROR_DS_NAME_ERROR_DOMAIN_ONLY syscall.Errno = 8473 + ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING syscall.Errno = 8474 + ERROR_DS_CONSTRUCTED_ATT_MOD syscall.Errno = 8475 + ERROR_DS_WRONG_OM_OBJ_CLASS syscall.Errno = 8476 + ERROR_DS_DRA_REPL_PENDING syscall.Errno = 8477 + ERROR_DS_DS_REQUIRED syscall.Errno = 8478 + ERROR_DS_INVALID_LDAP_DISPLAY_NAME syscall.Errno = 8479 + ERROR_DS_NON_BASE_SEARCH syscall.Errno = 8480 + ERROR_DS_CANT_RETRIEVE_ATTS syscall.Errno = 8481 + ERROR_DS_BACKLINK_WITHOUT_LINK syscall.Errno = 8482 + ERROR_DS_EPOCH_MISMATCH syscall.Errno = 8483 + ERROR_DS_SRC_NAME_MISMATCH syscall.Errno = 8484 + ERROR_DS_SRC_AND_DST_NC_IDENTICAL syscall.Errno = 8485 + ERROR_DS_DST_NC_MISMATCH syscall.Errno = 8486 + ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC syscall.Errno = 8487 + ERROR_DS_SRC_GUID_MISMATCH syscall.Errno = 8488 + ERROR_DS_CANT_MOVE_DELETED_OBJECT syscall.Errno = 8489 + ERROR_DS_PDC_OPERATION_IN_PROGRESS syscall.Errno = 8490 + ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD syscall.Errno = 8491 + ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION syscall.Errno = 8492 + ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS syscall.Errno = 8493 + ERROR_DS_NC_MUST_HAVE_NC_PARENT syscall.Errno = 8494 + ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE syscall.Errno = 8495 + ERROR_DS_DST_DOMAIN_NOT_NATIVE syscall.Errno = 8496 + ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER syscall.Errno = 8497 + ERROR_DS_CANT_MOVE_ACCOUNT_GROUP syscall.Errno = 8498 + ERROR_DS_CANT_MOVE_RESOURCE_GROUP syscall.Errno = 8499 + ERROR_DS_INVALID_SEARCH_FLAG syscall.Errno = 8500 + ERROR_DS_NO_TREE_DELETE_ABOVE_NC syscall.Errno = 8501 + ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE syscall.Errno = 8502 + ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE syscall.Errno = 8503 + ERROR_DS_SAM_INIT_FAILURE syscall.Errno = 8504 + ERROR_DS_SENSITIVE_GROUP_VIOLATION syscall.Errno = 8505 + ERROR_DS_CANT_MOD_PRIMARYGROUPID syscall.Errno = 8506 + ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD syscall.Errno = 8507 + ERROR_DS_NONSAFE_SCHEMA_CHANGE syscall.Errno = 8508 + ERROR_DS_SCHEMA_UPDATE_DISALLOWED syscall.Errno = 8509 + ERROR_DS_CANT_CREATE_UNDER_SCHEMA syscall.Errno = 8510 + ERROR_DS_INSTALL_NO_SRC_SCH_VERSION syscall.Errno = 8511 + ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE syscall.Errno = 8512 + ERROR_DS_INVALID_GROUP_TYPE syscall.Errno = 8513 + ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN syscall.Errno = 8514 + ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN syscall.Errno = 8515 + ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER syscall.Errno = 8516 + ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER syscall.Errno = 8517 + ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER syscall.Errno = 8518 + ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER syscall.Errno = 8519 + ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER syscall.Errno = 8520 + ERROR_DS_HAVE_PRIMARY_MEMBERS syscall.Errno = 8521 + ERROR_DS_STRING_SD_CONVERSION_FAILED syscall.Errno = 8522 + ERROR_DS_NAMING_MASTER_GC syscall.Errno = 8523 + ERROR_DS_DNS_LOOKUP_FAILURE syscall.Errno = 8524 + ERROR_DS_COULDNT_UPDATE_SPNS syscall.Errno = 8525 + ERROR_DS_CANT_RETRIEVE_SD syscall.Errno = 8526 + ERROR_DS_KEY_NOT_UNIQUE syscall.Errno = 8527 + ERROR_DS_WRONG_LINKED_ATT_SYNTAX syscall.Errno = 8528 + ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD syscall.Errno = 8529 + ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY syscall.Errno = 8530 + ERROR_DS_CANT_START syscall.Errno = 8531 + ERROR_DS_INIT_FAILURE syscall.Errno = 8532 + ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION syscall.Errno = 8533 + ERROR_DS_SOURCE_DOMAIN_IN_FOREST syscall.Errno = 8534 + ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST syscall.Errno = 8535 + ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED syscall.Errno = 8536 + ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN syscall.Errno = 8537 + ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER syscall.Errno = 8538 + ERROR_DS_SRC_SID_EXISTS_IN_FOREST syscall.Errno = 8539 + ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH syscall.Errno = 8540 + ERROR_SAM_INIT_FAILURE syscall.Errno = 8541 + ERROR_DS_DRA_SCHEMA_INFO_SHIP syscall.Errno = 8542 + ERROR_DS_DRA_SCHEMA_CONFLICT syscall.Errno = 8543 + ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT syscall.Errno = 8544 + ERROR_DS_DRA_OBJ_NC_MISMATCH syscall.Errno = 8545 + ERROR_DS_NC_STILL_HAS_DSAS syscall.Errno = 8546 + ERROR_DS_GC_REQUIRED syscall.Errno = 8547 + ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY syscall.Errno = 8548 + ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS syscall.Errno = 8549 + ERROR_DS_CANT_ADD_TO_GC syscall.Errno = 8550 + ERROR_DS_NO_CHECKPOINT_WITH_PDC syscall.Errno = 8551 + ERROR_DS_SOURCE_AUDITING_NOT_ENABLED syscall.Errno = 8552 + ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC syscall.Errno = 8553 + ERROR_DS_INVALID_NAME_FOR_SPN syscall.Errno = 8554 + ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS syscall.Errno = 8555 + ERROR_DS_UNICODEPWD_NOT_IN_QUOTES syscall.Errno = 8556 + ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED syscall.Errno = 8557 + ERROR_DS_MUST_BE_RUN_ON_DST_DC syscall.Errno = 8558 + ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER syscall.Errno = 8559 + ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ syscall.Errno = 8560 + ERROR_DS_INIT_FAILURE_CONSOLE syscall.Errno = 8561 + ERROR_DS_SAM_INIT_FAILURE_CONSOLE syscall.Errno = 8562 + ERROR_DS_FOREST_VERSION_TOO_HIGH syscall.Errno = 8563 + ERROR_DS_DOMAIN_VERSION_TOO_HIGH syscall.Errno = 8564 + ERROR_DS_FOREST_VERSION_TOO_LOW syscall.Errno = 8565 + ERROR_DS_DOMAIN_VERSION_TOO_LOW syscall.Errno = 8566 + ERROR_DS_INCOMPATIBLE_VERSION syscall.Errno = 8567 + ERROR_DS_LOW_DSA_VERSION syscall.Errno = 8568 + ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN syscall.Errno = 8569 + ERROR_DS_NOT_SUPPORTED_SORT_ORDER syscall.Errno = 8570 + ERROR_DS_NAME_NOT_UNIQUE syscall.Errno = 8571 + ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4 syscall.Errno = 8572 + ERROR_DS_OUT_OF_VERSION_STORE syscall.Errno = 8573 + ERROR_DS_INCOMPATIBLE_CONTROLS_USED syscall.Errno = 8574 + ERROR_DS_NO_REF_DOMAIN syscall.Errno = 8575 + ERROR_DS_RESERVED_LINK_ID syscall.Errno = 8576 + ERROR_DS_LINK_ID_NOT_AVAILABLE syscall.Errno = 8577 + ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER syscall.Errno = 8578 + ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE syscall.Errno = 8579 + ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC syscall.Errno = 8580 + ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG syscall.Errno = 8581 + ERROR_DS_MODIFYDN_WRONG_GRANDPARENT syscall.Errno = 8582 + ERROR_DS_NAME_ERROR_TRUST_REFERRAL syscall.Errno = 8583 + ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER syscall.Errno = 8584 + ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD syscall.Errno = 8585 + ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2 syscall.Errno = 8586 + ERROR_DS_THREAD_LIMIT_EXCEEDED syscall.Errno = 8587 + ERROR_DS_NOT_CLOSEST syscall.Errno = 8588 + ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF syscall.Errno = 8589 + ERROR_DS_SINGLE_USER_MODE_FAILED syscall.Errno = 8590 + ERROR_DS_NTDSCRIPT_SYNTAX_ERROR syscall.Errno = 8591 + ERROR_DS_NTDSCRIPT_PROCESS_ERROR syscall.Errno = 8592 + ERROR_DS_DIFFERENT_REPL_EPOCHS syscall.Errno = 8593 + ERROR_DS_DRS_EXTENSIONS_CHANGED syscall.Errno = 8594 + ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR syscall.Errno = 8595 + ERROR_DS_NO_MSDS_INTID syscall.Errno = 8596 + ERROR_DS_DUP_MSDS_INTID syscall.Errno = 8597 + ERROR_DS_EXISTS_IN_RDNATTID syscall.Errno = 8598 + ERROR_DS_AUTHORIZATION_FAILED syscall.Errno = 8599 + ERROR_DS_INVALID_SCRIPT syscall.Errno = 8600 + ERROR_DS_REMOTE_CROSSREF_OP_FAILED syscall.Errno = 8601 + ERROR_DS_CROSS_REF_BUSY syscall.Errno = 8602 + ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN syscall.Errno = 8603 + ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC syscall.Errno = 8604 + ERROR_DS_DUPLICATE_ID_FOUND syscall.Errno = 8605 + ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT syscall.Errno = 8606 + ERROR_DS_GROUP_CONVERSION_ERROR syscall.Errno = 8607 + ERROR_DS_CANT_MOVE_APP_BASIC_GROUP syscall.Errno = 8608 + ERROR_DS_CANT_MOVE_APP_QUERY_GROUP syscall.Errno = 8609 + ERROR_DS_ROLE_NOT_VERIFIED syscall.Errno = 8610 + ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL syscall.Errno = 8611 + ERROR_DS_DOMAIN_RENAME_IN_PROGRESS syscall.Errno = 8612 + ERROR_DS_EXISTING_AD_CHILD_NC syscall.Errno = 8613 + ERROR_DS_REPL_LIFETIME_EXCEEDED syscall.Errno = 8614 + ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER syscall.Errno = 8615 + ERROR_DS_LDAP_SEND_QUEUE_FULL syscall.Errno = 8616 + ERROR_DS_DRA_OUT_SCHEDULE_WINDOW syscall.Errno = 8617 + ERROR_DS_POLICY_NOT_KNOWN syscall.Errno = 8618 + ERROR_NO_SITE_SETTINGS_OBJECT syscall.Errno = 8619 + ERROR_NO_SECRETS syscall.Errno = 8620 + ERROR_NO_WRITABLE_DC_FOUND syscall.Errno = 8621 + ERROR_DS_NO_SERVER_OBJECT syscall.Errno = 8622 + ERROR_DS_NO_NTDSA_OBJECT syscall.Errno = 8623 + ERROR_DS_NON_ASQ_SEARCH syscall.Errno = 8624 + ERROR_DS_AUDIT_FAILURE syscall.Errno = 8625 + ERROR_DS_INVALID_SEARCH_FLAG_SUBTREE syscall.Errno = 8626 + ERROR_DS_INVALID_SEARCH_FLAG_TUPLE syscall.Errno = 8627 + ERROR_DS_HIERARCHY_TABLE_TOO_DEEP syscall.Errno = 8628 + ERROR_DS_DRA_CORRUPT_UTD_VECTOR syscall.Errno = 8629 + ERROR_DS_DRA_SECRETS_DENIED syscall.Errno = 8630 + ERROR_DS_RESERVED_MAPI_ID syscall.Errno = 8631 + ERROR_DS_MAPI_ID_NOT_AVAILABLE syscall.Errno = 8632 + ERROR_DS_DRA_MISSING_KRBTGT_SECRET syscall.Errno = 8633 + ERROR_DS_DOMAIN_NAME_EXISTS_IN_FOREST syscall.Errno = 8634 + ERROR_DS_FLAT_NAME_EXISTS_IN_FOREST syscall.Errno = 8635 + ERROR_INVALID_USER_PRINCIPAL_NAME syscall.Errno = 8636 + ERROR_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS syscall.Errno = 8637 + ERROR_DS_OID_NOT_FOUND syscall.Errno = 8638 + ERROR_DS_DRA_RECYCLED_TARGET syscall.Errno = 8639 + ERROR_DS_DISALLOWED_NC_REDIRECT syscall.Errno = 8640 + ERROR_DS_HIGH_ADLDS_FFL syscall.Errno = 8641 + ERROR_DS_HIGH_DSA_VERSION syscall.Errno = 8642 + ERROR_DS_LOW_ADLDS_FFL syscall.Errno = 8643 + ERROR_DOMAIN_SID_SAME_AS_LOCAL_WORKSTATION syscall.Errno = 8644 + ERROR_DS_UNDELETE_SAM_VALIDATION_FAILED syscall.Errno = 8645 + ERROR_INCORRECT_ACCOUNT_TYPE syscall.Errno = 8646 + ERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST syscall.Errno = 8647 + ERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST syscall.Errno = 8648 + ERROR_DS_MISSING_FOREST_TRUST syscall.Errno = 8649 + ERROR_DS_VALUE_KEY_NOT_UNIQUE syscall.Errno = 8650 + DNS_ERROR_RESPONSE_CODES_BASE syscall.Errno = 9000 + DNS_ERROR_RCODE_NO_ERROR = ERROR_SUCCESS + DNS_ERROR_MASK syscall.Errno = 0x00002328 + DNS_ERROR_RCODE_FORMAT_ERROR syscall.Errno = 9001 + DNS_ERROR_RCODE_SERVER_FAILURE syscall.Errno = 9002 + DNS_ERROR_RCODE_NAME_ERROR syscall.Errno = 9003 + DNS_ERROR_RCODE_NOT_IMPLEMENTED syscall.Errno = 9004 + DNS_ERROR_RCODE_REFUSED syscall.Errno = 9005 + DNS_ERROR_RCODE_YXDOMAIN syscall.Errno = 9006 + DNS_ERROR_RCODE_YXRRSET syscall.Errno = 9007 + DNS_ERROR_RCODE_NXRRSET syscall.Errno = 9008 + DNS_ERROR_RCODE_NOTAUTH syscall.Errno = 9009 + DNS_ERROR_RCODE_NOTZONE syscall.Errno = 9010 + DNS_ERROR_RCODE_BADSIG syscall.Errno = 9016 + DNS_ERROR_RCODE_BADKEY syscall.Errno = 9017 + DNS_ERROR_RCODE_BADTIME syscall.Errno = 9018 + DNS_ERROR_RCODE_LAST = DNS_ERROR_RCODE_BADTIME + DNS_ERROR_DNSSEC_BASE syscall.Errno = 9100 + DNS_ERROR_KEYMASTER_REQUIRED syscall.Errno = 9101 + DNS_ERROR_NOT_ALLOWED_ON_SIGNED_ZONE syscall.Errno = 9102 + DNS_ERROR_NSEC3_INCOMPATIBLE_WITH_RSA_SHA1 syscall.Errno = 9103 + DNS_ERROR_NOT_ENOUGH_SIGNING_KEY_DESCRIPTORS syscall.Errno = 9104 + DNS_ERROR_UNSUPPORTED_ALGORITHM syscall.Errno = 9105 + DNS_ERROR_INVALID_KEY_SIZE syscall.Errno = 9106 + DNS_ERROR_SIGNING_KEY_NOT_ACCESSIBLE syscall.Errno = 9107 + DNS_ERROR_KSP_DOES_NOT_SUPPORT_PROTECTION syscall.Errno = 9108 + DNS_ERROR_UNEXPECTED_DATA_PROTECTION_ERROR syscall.Errno = 9109 + DNS_ERROR_UNEXPECTED_CNG_ERROR syscall.Errno = 9110 + DNS_ERROR_UNKNOWN_SIGNING_PARAMETER_VERSION syscall.Errno = 9111 + DNS_ERROR_KSP_NOT_ACCESSIBLE syscall.Errno = 9112 + DNS_ERROR_TOO_MANY_SKDS syscall.Errno = 9113 + DNS_ERROR_INVALID_ROLLOVER_PERIOD syscall.Errno = 9114 + DNS_ERROR_INVALID_INITIAL_ROLLOVER_OFFSET syscall.Errno = 9115 + DNS_ERROR_ROLLOVER_IN_PROGRESS syscall.Errno = 9116 + DNS_ERROR_STANDBY_KEY_NOT_PRESENT syscall.Errno = 9117 + DNS_ERROR_NOT_ALLOWED_ON_ZSK syscall.Errno = 9118 + DNS_ERROR_NOT_ALLOWED_ON_ACTIVE_SKD syscall.Errno = 9119 + DNS_ERROR_ROLLOVER_ALREADY_QUEUED syscall.Errno = 9120 + DNS_ERROR_NOT_ALLOWED_ON_UNSIGNED_ZONE syscall.Errno = 9121 + DNS_ERROR_BAD_KEYMASTER syscall.Errno = 9122 + DNS_ERROR_INVALID_SIGNATURE_VALIDITY_PERIOD syscall.Errno = 9123 + DNS_ERROR_INVALID_NSEC3_ITERATION_COUNT syscall.Errno = 9124 + DNS_ERROR_DNSSEC_IS_DISABLED syscall.Errno = 9125 + DNS_ERROR_INVALID_XML syscall.Errno = 9126 + DNS_ERROR_NO_VALID_TRUST_ANCHORS syscall.Errno = 9127 + DNS_ERROR_ROLLOVER_NOT_POKEABLE syscall.Errno = 9128 + DNS_ERROR_NSEC3_NAME_COLLISION syscall.Errno = 9129 + DNS_ERROR_NSEC_INCOMPATIBLE_WITH_NSEC3_RSA_SHA1 syscall.Errno = 9130 + DNS_ERROR_PACKET_FMT_BASE syscall.Errno = 9500 + DNS_INFO_NO_RECORDS syscall.Errno = 9501 + DNS_ERROR_BAD_PACKET syscall.Errno = 9502 + DNS_ERROR_NO_PACKET syscall.Errno = 9503 + DNS_ERROR_RCODE syscall.Errno = 9504 + DNS_ERROR_UNSECURE_PACKET syscall.Errno = 9505 + DNS_STATUS_PACKET_UNSECURE = DNS_ERROR_UNSECURE_PACKET + DNS_REQUEST_PENDING syscall.Errno = 9506 + DNS_ERROR_NO_MEMORY = ERROR_OUTOFMEMORY + DNS_ERROR_INVALID_NAME = ERROR_INVALID_NAME + DNS_ERROR_INVALID_DATA = ERROR_INVALID_DATA + DNS_ERROR_GENERAL_API_BASE syscall.Errno = 9550 + DNS_ERROR_INVALID_TYPE syscall.Errno = 9551 + DNS_ERROR_INVALID_IP_ADDRESS syscall.Errno = 9552 + DNS_ERROR_INVALID_PROPERTY syscall.Errno = 9553 + DNS_ERROR_TRY_AGAIN_LATER syscall.Errno = 9554 + DNS_ERROR_NOT_UNIQUE syscall.Errno = 9555 + DNS_ERROR_NON_RFC_NAME syscall.Errno = 9556 + DNS_STATUS_FQDN syscall.Errno = 9557 + DNS_STATUS_DOTTED_NAME syscall.Errno = 9558 + DNS_STATUS_SINGLE_PART_NAME syscall.Errno = 9559 + DNS_ERROR_INVALID_NAME_CHAR syscall.Errno = 9560 + DNS_ERROR_NUMERIC_NAME syscall.Errno = 9561 + DNS_ERROR_NOT_ALLOWED_ON_ROOT_SERVER syscall.Errno = 9562 + DNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION syscall.Errno = 9563 + DNS_ERROR_CANNOT_FIND_ROOT_HINTS syscall.Errno = 9564 + DNS_ERROR_INCONSISTENT_ROOT_HINTS syscall.Errno = 9565 + DNS_ERROR_DWORD_VALUE_TOO_SMALL syscall.Errno = 9566 + DNS_ERROR_DWORD_VALUE_TOO_LARGE syscall.Errno = 9567 + DNS_ERROR_BACKGROUND_LOADING syscall.Errno = 9568 + DNS_ERROR_NOT_ALLOWED_ON_RODC syscall.Errno = 9569 + DNS_ERROR_NOT_ALLOWED_UNDER_DNAME syscall.Errno = 9570 + DNS_ERROR_DELEGATION_REQUIRED syscall.Errno = 9571 + DNS_ERROR_INVALID_POLICY_TABLE syscall.Errno = 9572 + DNS_ERROR_ADDRESS_REQUIRED syscall.Errno = 9573 + DNS_ERROR_ZONE_BASE syscall.Errno = 9600 + DNS_ERROR_ZONE_DOES_NOT_EXIST syscall.Errno = 9601 + DNS_ERROR_NO_ZONE_INFO syscall.Errno = 9602 + DNS_ERROR_INVALID_ZONE_OPERATION syscall.Errno = 9603 + DNS_ERROR_ZONE_CONFIGURATION_ERROR syscall.Errno = 9604 + DNS_ERROR_ZONE_HAS_NO_SOA_RECORD syscall.Errno = 9605 + DNS_ERROR_ZONE_HAS_NO_NS_RECORDS syscall.Errno = 9606 + DNS_ERROR_ZONE_LOCKED syscall.Errno = 9607 + DNS_ERROR_ZONE_CREATION_FAILED syscall.Errno = 9608 + DNS_ERROR_ZONE_ALREADY_EXISTS syscall.Errno = 9609 + DNS_ERROR_AUTOZONE_ALREADY_EXISTS syscall.Errno = 9610 + DNS_ERROR_INVALID_ZONE_TYPE syscall.Errno = 9611 + DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP syscall.Errno = 9612 + DNS_ERROR_ZONE_NOT_SECONDARY syscall.Errno = 9613 + DNS_ERROR_NEED_SECONDARY_ADDRESSES syscall.Errno = 9614 + DNS_ERROR_WINS_INIT_FAILED syscall.Errno = 9615 + DNS_ERROR_NEED_WINS_SERVERS syscall.Errno = 9616 + DNS_ERROR_NBSTAT_INIT_FAILED syscall.Errno = 9617 + DNS_ERROR_SOA_DELETE_INVALID syscall.Errno = 9618 + DNS_ERROR_FORWARDER_ALREADY_EXISTS syscall.Errno = 9619 + DNS_ERROR_ZONE_REQUIRES_MASTER_IP syscall.Errno = 9620 + DNS_ERROR_ZONE_IS_SHUTDOWN syscall.Errno = 9621 + DNS_ERROR_ZONE_LOCKED_FOR_SIGNING syscall.Errno = 9622 + DNS_ERROR_DATAFILE_BASE syscall.Errno = 9650 + DNS_ERROR_PRIMARY_REQUIRES_DATAFILE syscall.Errno = 9651 + DNS_ERROR_INVALID_DATAFILE_NAME syscall.Errno = 9652 + DNS_ERROR_DATAFILE_OPEN_FAILURE syscall.Errno = 9653 + DNS_ERROR_FILE_WRITEBACK_FAILED syscall.Errno = 9654 + DNS_ERROR_DATAFILE_PARSING syscall.Errno = 9655 + DNS_ERROR_DATABASE_BASE syscall.Errno = 9700 + DNS_ERROR_RECORD_DOES_NOT_EXIST syscall.Errno = 9701 + DNS_ERROR_RECORD_FORMAT syscall.Errno = 9702 + DNS_ERROR_NODE_CREATION_FAILED syscall.Errno = 9703 + DNS_ERROR_UNKNOWN_RECORD_TYPE syscall.Errno = 9704 + DNS_ERROR_RECORD_TIMED_OUT syscall.Errno = 9705 + DNS_ERROR_NAME_NOT_IN_ZONE syscall.Errno = 9706 + DNS_ERROR_CNAME_LOOP syscall.Errno = 9707 + DNS_ERROR_NODE_IS_CNAME syscall.Errno = 9708 + DNS_ERROR_CNAME_COLLISION syscall.Errno = 9709 + DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT syscall.Errno = 9710 + DNS_ERROR_RECORD_ALREADY_EXISTS syscall.Errno = 9711 + DNS_ERROR_SECONDARY_DATA syscall.Errno = 9712 + DNS_ERROR_NO_CREATE_CACHE_DATA syscall.Errno = 9713 + DNS_ERROR_NAME_DOES_NOT_EXIST syscall.Errno = 9714 + DNS_WARNING_PTR_CREATE_FAILED syscall.Errno = 9715 + DNS_WARNING_DOMAIN_UNDELETED syscall.Errno = 9716 + DNS_ERROR_DS_UNAVAILABLE syscall.Errno = 9717 + DNS_ERROR_DS_ZONE_ALREADY_EXISTS syscall.Errno = 9718 + DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE syscall.Errno = 9719 + DNS_ERROR_NODE_IS_DNAME syscall.Errno = 9720 + DNS_ERROR_DNAME_COLLISION syscall.Errno = 9721 + DNS_ERROR_ALIAS_LOOP syscall.Errno = 9722 + DNS_ERROR_OPERATION_BASE syscall.Errno = 9750 + DNS_INFO_AXFR_COMPLETE syscall.Errno = 9751 + DNS_ERROR_AXFR syscall.Errno = 9752 + DNS_INFO_ADDED_LOCAL_WINS syscall.Errno = 9753 + DNS_ERROR_SECURE_BASE syscall.Errno = 9800 + DNS_STATUS_CONTINUE_NEEDED syscall.Errno = 9801 + DNS_ERROR_SETUP_BASE syscall.Errno = 9850 + DNS_ERROR_NO_TCPIP syscall.Errno = 9851 + DNS_ERROR_NO_DNS_SERVERS syscall.Errno = 9852 + DNS_ERROR_DP_BASE syscall.Errno = 9900 + DNS_ERROR_DP_DOES_NOT_EXIST syscall.Errno = 9901 + DNS_ERROR_DP_ALREADY_EXISTS syscall.Errno = 9902 + DNS_ERROR_DP_NOT_ENLISTED syscall.Errno = 9903 + DNS_ERROR_DP_ALREADY_ENLISTED syscall.Errno = 9904 + DNS_ERROR_DP_NOT_AVAILABLE syscall.Errno = 9905 + DNS_ERROR_DP_FSMO_ERROR syscall.Errno = 9906 + DNS_ERROR_RRL_NOT_ENABLED syscall.Errno = 9911 + DNS_ERROR_RRL_INVALID_WINDOW_SIZE syscall.Errno = 9912 + DNS_ERROR_RRL_INVALID_IPV4_PREFIX syscall.Errno = 9913 + DNS_ERROR_RRL_INVALID_IPV6_PREFIX syscall.Errno = 9914 + DNS_ERROR_RRL_INVALID_TC_RATE syscall.Errno = 9915 + DNS_ERROR_RRL_INVALID_LEAK_RATE syscall.Errno = 9916 + DNS_ERROR_RRL_LEAK_RATE_LESSTHAN_TC_RATE syscall.Errno = 9917 + DNS_ERROR_VIRTUALIZATION_INSTANCE_ALREADY_EXISTS syscall.Errno = 9921 + DNS_ERROR_VIRTUALIZATION_INSTANCE_DOES_NOT_EXIST syscall.Errno = 9922 + DNS_ERROR_VIRTUALIZATION_TREE_LOCKED syscall.Errno = 9923 + DNS_ERROR_INVAILD_VIRTUALIZATION_INSTANCE_NAME syscall.Errno = 9924 + DNS_ERROR_DEFAULT_VIRTUALIZATION_INSTANCE syscall.Errno = 9925 + DNS_ERROR_ZONESCOPE_ALREADY_EXISTS syscall.Errno = 9951 + DNS_ERROR_ZONESCOPE_DOES_NOT_EXIST syscall.Errno = 9952 + DNS_ERROR_DEFAULT_ZONESCOPE syscall.Errno = 9953 + DNS_ERROR_INVALID_ZONESCOPE_NAME syscall.Errno = 9954 + DNS_ERROR_NOT_ALLOWED_WITH_ZONESCOPES syscall.Errno = 9955 + DNS_ERROR_LOAD_ZONESCOPE_FAILED syscall.Errno = 9956 + DNS_ERROR_ZONESCOPE_FILE_WRITEBACK_FAILED syscall.Errno = 9957 + DNS_ERROR_INVALID_SCOPE_NAME syscall.Errno = 9958 + DNS_ERROR_SCOPE_DOES_NOT_EXIST syscall.Errno = 9959 + DNS_ERROR_DEFAULT_SCOPE syscall.Errno = 9960 + DNS_ERROR_INVALID_SCOPE_OPERATION syscall.Errno = 9961 + DNS_ERROR_SCOPE_LOCKED syscall.Errno = 9962 + DNS_ERROR_SCOPE_ALREADY_EXISTS syscall.Errno = 9963 + DNS_ERROR_POLICY_ALREADY_EXISTS syscall.Errno = 9971 + DNS_ERROR_POLICY_DOES_NOT_EXIST syscall.Errno = 9972 + DNS_ERROR_POLICY_INVALID_CRITERIA syscall.Errno = 9973 + DNS_ERROR_POLICY_INVALID_SETTINGS syscall.Errno = 9974 + DNS_ERROR_CLIENT_SUBNET_IS_ACCESSED syscall.Errno = 9975 + DNS_ERROR_CLIENT_SUBNET_DOES_NOT_EXIST syscall.Errno = 9976 + DNS_ERROR_CLIENT_SUBNET_ALREADY_EXISTS syscall.Errno = 9977 + DNS_ERROR_SUBNET_DOES_NOT_EXIST syscall.Errno = 9978 + DNS_ERROR_SUBNET_ALREADY_EXISTS syscall.Errno = 9979 + DNS_ERROR_POLICY_LOCKED syscall.Errno = 9980 + DNS_ERROR_POLICY_INVALID_WEIGHT syscall.Errno = 9981 + DNS_ERROR_POLICY_INVALID_NAME syscall.Errno = 9982 + DNS_ERROR_POLICY_MISSING_CRITERIA syscall.Errno = 9983 + DNS_ERROR_INVALID_CLIENT_SUBNET_NAME syscall.Errno = 9984 + DNS_ERROR_POLICY_PROCESSING_ORDER_INVALID syscall.Errno = 9985 + DNS_ERROR_POLICY_SCOPE_MISSING syscall.Errno = 9986 + DNS_ERROR_POLICY_SCOPE_NOT_ALLOWED syscall.Errno = 9987 + DNS_ERROR_SERVERSCOPE_IS_REFERENCED syscall.Errno = 9988 + DNS_ERROR_ZONESCOPE_IS_REFERENCED syscall.Errno = 9989 + DNS_ERROR_POLICY_INVALID_CRITERIA_CLIENT_SUBNET syscall.Errno = 9990 + DNS_ERROR_POLICY_INVALID_CRITERIA_TRANSPORT_PROTOCOL syscall.Errno = 9991 + DNS_ERROR_POLICY_INVALID_CRITERIA_NETWORK_PROTOCOL syscall.Errno = 9992 + DNS_ERROR_POLICY_INVALID_CRITERIA_INTERFACE syscall.Errno = 9993 + DNS_ERROR_POLICY_INVALID_CRITERIA_FQDN syscall.Errno = 9994 + DNS_ERROR_POLICY_INVALID_CRITERIA_QUERY_TYPE syscall.Errno = 9995 + DNS_ERROR_POLICY_INVALID_CRITERIA_TIME_OF_DAY syscall.Errno = 9996 + WSABASEERR syscall.Errno = 10000 + WSAEINTR syscall.Errno = 10004 + WSAEBADF syscall.Errno = 10009 + WSAEACCES syscall.Errno = 10013 + WSAEFAULT syscall.Errno = 10014 + WSAEINVAL syscall.Errno = 10022 + WSAEMFILE syscall.Errno = 10024 + WSAEWOULDBLOCK syscall.Errno = 10035 + WSAEINPROGRESS syscall.Errno = 10036 + WSAEALREADY syscall.Errno = 10037 + WSAENOTSOCK syscall.Errno = 10038 + WSAEDESTADDRREQ syscall.Errno = 10039 + WSAEMSGSIZE syscall.Errno = 10040 + WSAEPROTOTYPE syscall.Errno = 10041 + WSAENOPROTOOPT syscall.Errno = 10042 + WSAEPROTONOSUPPORT syscall.Errno = 10043 + WSAESOCKTNOSUPPORT syscall.Errno = 10044 + WSAEOPNOTSUPP syscall.Errno = 10045 + WSAEPFNOSUPPORT syscall.Errno = 10046 + WSAEAFNOSUPPORT syscall.Errno = 10047 + WSAEADDRINUSE syscall.Errno = 10048 + WSAEADDRNOTAVAIL syscall.Errno = 10049 + WSAENETDOWN syscall.Errno = 10050 + WSAENETUNREACH syscall.Errno = 10051 + WSAENETRESET syscall.Errno = 10052 + WSAECONNABORTED syscall.Errno = 10053 + WSAECONNRESET syscall.Errno = 10054 + WSAENOBUFS syscall.Errno = 10055 + WSAEISCONN syscall.Errno = 10056 + WSAENOTCONN syscall.Errno = 10057 + WSAESHUTDOWN syscall.Errno = 10058 + WSAETOOMANYREFS syscall.Errno = 10059 + WSAETIMEDOUT syscall.Errno = 10060 + WSAECONNREFUSED syscall.Errno = 10061 + WSAELOOP syscall.Errno = 10062 + WSAENAMETOOLONG syscall.Errno = 10063 + WSAEHOSTDOWN syscall.Errno = 10064 + WSAEHOSTUNREACH syscall.Errno = 10065 + WSAENOTEMPTY syscall.Errno = 10066 + WSAEPROCLIM syscall.Errno = 10067 + WSAEUSERS syscall.Errno = 10068 + WSAEDQUOT syscall.Errno = 10069 + WSAESTALE syscall.Errno = 10070 + WSAEREMOTE syscall.Errno = 10071 + WSASYSNOTREADY syscall.Errno = 10091 + WSAVERNOTSUPPORTED syscall.Errno = 10092 + WSANOTINITIALISED syscall.Errno = 10093 + WSAEDISCON syscall.Errno = 10101 + WSAENOMORE syscall.Errno = 10102 + WSAECANCELLED syscall.Errno = 10103 + WSAEINVALIDPROCTABLE syscall.Errno = 10104 + WSAEINVALIDPROVIDER syscall.Errno = 10105 + WSAEPROVIDERFAILEDINIT syscall.Errno = 10106 + WSASYSCALLFAILURE syscall.Errno = 10107 + WSASERVICE_NOT_FOUND syscall.Errno = 10108 + WSATYPE_NOT_FOUND syscall.Errno = 10109 + WSA_E_NO_MORE syscall.Errno = 10110 + WSA_E_CANCELLED syscall.Errno = 10111 + WSAEREFUSED syscall.Errno = 10112 + WSAHOST_NOT_FOUND syscall.Errno = 11001 + WSATRY_AGAIN syscall.Errno = 11002 + WSANO_RECOVERY syscall.Errno = 11003 + WSANO_DATA syscall.Errno = 11004 + WSA_QOS_RECEIVERS syscall.Errno = 11005 + WSA_QOS_SENDERS syscall.Errno = 11006 + WSA_QOS_NO_SENDERS syscall.Errno = 11007 + WSA_QOS_NO_RECEIVERS syscall.Errno = 11008 + WSA_QOS_REQUEST_CONFIRMED syscall.Errno = 11009 + WSA_QOS_ADMISSION_FAILURE syscall.Errno = 11010 + WSA_QOS_POLICY_FAILURE syscall.Errno = 11011 + WSA_QOS_BAD_STYLE syscall.Errno = 11012 + WSA_QOS_BAD_OBJECT syscall.Errno = 11013 + WSA_QOS_TRAFFIC_CTRL_ERROR syscall.Errno = 11014 + WSA_QOS_GENERIC_ERROR syscall.Errno = 11015 + WSA_QOS_ESERVICETYPE syscall.Errno = 11016 + WSA_QOS_EFLOWSPEC syscall.Errno = 11017 + WSA_QOS_EPROVSPECBUF syscall.Errno = 11018 + WSA_QOS_EFILTERSTYLE syscall.Errno = 11019 + WSA_QOS_EFILTERTYPE syscall.Errno = 11020 + WSA_QOS_EFILTERCOUNT syscall.Errno = 11021 + WSA_QOS_EOBJLENGTH syscall.Errno = 11022 + WSA_QOS_EFLOWCOUNT syscall.Errno = 11023 + WSA_QOS_EUNKOWNPSOBJ syscall.Errno = 11024 + WSA_QOS_EPOLICYOBJ syscall.Errno = 11025 + WSA_QOS_EFLOWDESC syscall.Errno = 11026 + WSA_QOS_EPSFLOWSPEC syscall.Errno = 11027 + WSA_QOS_EPSFILTERSPEC syscall.Errno = 11028 + WSA_QOS_ESDMODEOBJ syscall.Errno = 11029 + WSA_QOS_ESHAPERATEOBJ syscall.Errno = 11030 + WSA_QOS_RESERVED_PETYPE syscall.Errno = 11031 + WSA_SECURE_HOST_NOT_FOUND syscall.Errno = 11032 + WSA_IPSEC_NAME_POLICY_ERROR syscall.Errno = 11033 + ERROR_IPSEC_QM_POLICY_EXISTS syscall.Errno = 13000 + ERROR_IPSEC_QM_POLICY_NOT_FOUND syscall.Errno = 13001 + ERROR_IPSEC_QM_POLICY_IN_USE syscall.Errno = 13002 + ERROR_IPSEC_MM_POLICY_EXISTS syscall.Errno = 13003 + ERROR_IPSEC_MM_POLICY_NOT_FOUND syscall.Errno = 13004 + ERROR_IPSEC_MM_POLICY_IN_USE syscall.Errno = 13005 + ERROR_IPSEC_MM_FILTER_EXISTS syscall.Errno = 13006 + ERROR_IPSEC_MM_FILTER_NOT_FOUND syscall.Errno = 13007 + ERROR_IPSEC_TRANSPORT_FILTER_EXISTS syscall.Errno = 13008 + ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND syscall.Errno = 13009 + ERROR_IPSEC_MM_AUTH_EXISTS syscall.Errno = 13010 + ERROR_IPSEC_MM_AUTH_NOT_FOUND syscall.Errno = 13011 + ERROR_IPSEC_MM_AUTH_IN_USE syscall.Errno = 13012 + ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND syscall.Errno = 13013 + ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND syscall.Errno = 13014 + ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND syscall.Errno = 13015 + ERROR_IPSEC_TUNNEL_FILTER_EXISTS syscall.Errno = 13016 + ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND syscall.Errno = 13017 + ERROR_IPSEC_MM_FILTER_PENDING_DELETION syscall.Errno = 13018 + ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION syscall.Errno = 13019 + ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION syscall.Errno = 13020 + ERROR_IPSEC_MM_POLICY_PENDING_DELETION syscall.Errno = 13021 + ERROR_IPSEC_MM_AUTH_PENDING_DELETION syscall.Errno = 13022 + ERROR_IPSEC_QM_POLICY_PENDING_DELETION syscall.Errno = 13023 + WARNING_IPSEC_MM_POLICY_PRUNED syscall.Errno = 13024 + WARNING_IPSEC_QM_POLICY_PRUNED syscall.Errno = 13025 + ERROR_IPSEC_IKE_NEG_STATUS_BEGIN syscall.Errno = 13800 + ERROR_IPSEC_IKE_AUTH_FAIL syscall.Errno = 13801 + ERROR_IPSEC_IKE_ATTRIB_FAIL syscall.Errno = 13802 + ERROR_IPSEC_IKE_NEGOTIATION_PENDING syscall.Errno = 13803 + ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR syscall.Errno = 13804 + ERROR_IPSEC_IKE_TIMED_OUT syscall.Errno = 13805 + ERROR_IPSEC_IKE_NO_CERT syscall.Errno = 13806 + ERROR_IPSEC_IKE_SA_DELETED syscall.Errno = 13807 + ERROR_IPSEC_IKE_SA_REAPED syscall.Errno = 13808 + ERROR_IPSEC_IKE_MM_ACQUIRE_DROP syscall.Errno = 13809 + ERROR_IPSEC_IKE_QM_ACQUIRE_DROP syscall.Errno = 13810 + ERROR_IPSEC_IKE_QUEUE_DROP_MM syscall.Errno = 13811 + ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM syscall.Errno = 13812 + ERROR_IPSEC_IKE_DROP_NO_RESPONSE syscall.Errno = 13813 + ERROR_IPSEC_IKE_MM_DELAY_DROP syscall.Errno = 13814 + ERROR_IPSEC_IKE_QM_DELAY_DROP syscall.Errno = 13815 + ERROR_IPSEC_IKE_ERROR syscall.Errno = 13816 + ERROR_IPSEC_IKE_CRL_FAILED syscall.Errno = 13817 + ERROR_IPSEC_IKE_INVALID_KEY_USAGE syscall.Errno = 13818 + ERROR_IPSEC_IKE_INVALID_CERT_TYPE syscall.Errno = 13819 + ERROR_IPSEC_IKE_NO_PRIVATE_KEY syscall.Errno = 13820 + ERROR_IPSEC_IKE_SIMULTANEOUS_REKEY syscall.Errno = 13821 + ERROR_IPSEC_IKE_DH_FAIL syscall.Errno = 13822 + ERROR_IPSEC_IKE_CRITICAL_PAYLOAD_NOT_RECOGNIZED syscall.Errno = 13823 + ERROR_IPSEC_IKE_INVALID_HEADER syscall.Errno = 13824 + ERROR_IPSEC_IKE_NO_POLICY syscall.Errno = 13825 + ERROR_IPSEC_IKE_INVALID_SIGNATURE syscall.Errno = 13826 + ERROR_IPSEC_IKE_KERBEROS_ERROR syscall.Errno = 13827 + ERROR_IPSEC_IKE_NO_PUBLIC_KEY syscall.Errno = 13828 + ERROR_IPSEC_IKE_PROCESS_ERR syscall.Errno = 13829 + ERROR_IPSEC_IKE_PROCESS_ERR_SA syscall.Errno = 13830 + ERROR_IPSEC_IKE_PROCESS_ERR_PROP syscall.Errno = 13831 + ERROR_IPSEC_IKE_PROCESS_ERR_TRANS syscall.Errno = 13832 + ERROR_IPSEC_IKE_PROCESS_ERR_KE syscall.Errno = 13833 + ERROR_IPSEC_IKE_PROCESS_ERR_ID syscall.Errno = 13834 + ERROR_IPSEC_IKE_PROCESS_ERR_CERT syscall.Errno = 13835 + ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ syscall.Errno = 13836 + ERROR_IPSEC_IKE_PROCESS_ERR_HASH syscall.Errno = 13837 + ERROR_IPSEC_IKE_PROCESS_ERR_SIG syscall.Errno = 13838 + ERROR_IPSEC_IKE_PROCESS_ERR_NONCE syscall.Errno = 13839 + ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY syscall.Errno = 13840 + ERROR_IPSEC_IKE_PROCESS_ERR_DELETE syscall.Errno = 13841 + ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR syscall.Errno = 13842 + ERROR_IPSEC_IKE_INVALID_PAYLOAD syscall.Errno = 13843 + ERROR_IPSEC_IKE_LOAD_SOFT_SA syscall.Errno = 13844 + ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN syscall.Errno = 13845 + ERROR_IPSEC_IKE_INVALID_COOKIE syscall.Errno = 13846 + ERROR_IPSEC_IKE_NO_PEER_CERT syscall.Errno = 13847 + ERROR_IPSEC_IKE_PEER_CRL_FAILED syscall.Errno = 13848 + ERROR_IPSEC_IKE_POLICY_CHANGE syscall.Errno = 13849 + ERROR_IPSEC_IKE_NO_MM_POLICY syscall.Errno = 13850 + ERROR_IPSEC_IKE_NOTCBPRIV syscall.Errno = 13851 + ERROR_IPSEC_IKE_SECLOADFAIL syscall.Errno = 13852 + ERROR_IPSEC_IKE_FAILSSPINIT syscall.Errno = 13853 + ERROR_IPSEC_IKE_FAILQUERYSSP syscall.Errno = 13854 + ERROR_IPSEC_IKE_SRVACQFAIL syscall.Errno = 13855 + ERROR_IPSEC_IKE_SRVQUERYCRED syscall.Errno = 13856 + ERROR_IPSEC_IKE_GETSPIFAIL syscall.Errno = 13857 + ERROR_IPSEC_IKE_INVALID_FILTER syscall.Errno = 13858 + ERROR_IPSEC_IKE_OUT_OF_MEMORY syscall.Errno = 13859 + ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED syscall.Errno = 13860 + ERROR_IPSEC_IKE_INVALID_POLICY syscall.Errno = 13861 + ERROR_IPSEC_IKE_UNKNOWN_DOI syscall.Errno = 13862 + ERROR_IPSEC_IKE_INVALID_SITUATION syscall.Errno = 13863 + ERROR_IPSEC_IKE_DH_FAILURE syscall.Errno = 13864 + ERROR_IPSEC_IKE_INVALID_GROUP syscall.Errno = 13865 + ERROR_IPSEC_IKE_ENCRYPT syscall.Errno = 13866 + ERROR_IPSEC_IKE_DECRYPT syscall.Errno = 13867 + ERROR_IPSEC_IKE_POLICY_MATCH syscall.Errno = 13868 + ERROR_IPSEC_IKE_UNSUPPORTED_ID syscall.Errno = 13869 + ERROR_IPSEC_IKE_INVALID_HASH syscall.Errno = 13870 + ERROR_IPSEC_IKE_INVALID_HASH_ALG syscall.Errno = 13871 + ERROR_IPSEC_IKE_INVALID_HASH_SIZE syscall.Errno = 13872 + ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG syscall.Errno = 13873 + ERROR_IPSEC_IKE_INVALID_AUTH_ALG syscall.Errno = 13874 + ERROR_IPSEC_IKE_INVALID_SIG syscall.Errno = 13875 + ERROR_IPSEC_IKE_LOAD_FAILED syscall.Errno = 13876 + ERROR_IPSEC_IKE_RPC_DELETE syscall.Errno = 13877 + ERROR_IPSEC_IKE_BENIGN_REINIT syscall.Errno = 13878 + ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY syscall.Errno = 13879 + ERROR_IPSEC_IKE_INVALID_MAJOR_VERSION syscall.Errno = 13880 + ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN syscall.Errno = 13881 + ERROR_IPSEC_IKE_MM_LIMIT syscall.Errno = 13882 + ERROR_IPSEC_IKE_NEGOTIATION_DISABLED syscall.Errno = 13883 + ERROR_IPSEC_IKE_QM_LIMIT syscall.Errno = 13884 + ERROR_IPSEC_IKE_MM_EXPIRED syscall.Errno = 13885 + ERROR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID syscall.Errno = 13886 + ERROR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH syscall.Errno = 13887 + ERROR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID syscall.Errno = 13888 + ERROR_IPSEC_IKE_INVALID_AUTH_PAYLOAD syscall.Errno = 13889 + ERROR_IPSEC_IKE_DOS_COOKIE_SENT syscall.Errno = 13890 + ERROR_IPSEC_IKE_SHUTTING_DOWN syscall.Errno = 13891 + ERROR_IPSEC_IKE_CGA_AUTH_FAILED syscall.Errno = 13892 + ERROR_IPSEC_IKE_PROCESS_ERR_NATOA syscall.Errno = 13893 + ERROR_IPSEC_IKE_INVALID_MM_FOR_QM syscall.Errno = 13894 + ERROR_IPSEC_IKE_QM_EXPIRED syscall.Errno = 13895 + ERROR_IPSEC_IKE_TOO_MANY_FILTERS syscall.Errno = 13896 + ERROR_IPSEC_IKE_NEG_STATUS_END syscall.Errno = 13897 + ERROR_IPSEC_IKE_KILL_DUMMY_NAP_TUNNEL syscall.Errno = 13898 + ERROR_IPSEC_IKE_INNER_IP_ASSIGNMENT_FAILURE syscall.Errno = 13899 + ERROR_IPSEC_IKE_REQUIRE_CP_PAYLOAD_MISSING syscall.Errno = 13900 + ERROR_IPSEC_KEY_MODULE_IMPERSONATION_NEGOTIATION_PENDING syscall.Errno = 13901 + ERROR_IPSEC_IKE_COEXISTENCE_SUPPRESS syscall.Errno = 13902 + ERROR_IPSEC_IKE_RATELIMIT_DROP syscall.Errno = 13903 + ERROR_IPSEC_IKE_PEER_DOESNT_SUPPORT_MOBIKE syscall.Errno = 13904 + ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE syscall.Errno = 13905 + ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_FAILURE syscall.Errno = 13906 + ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE_WITH_OPTIONAL_RETRY syscall.Errno = 13907 + ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_AND_CERTMAP_FAILURE syscall.Errno = 13908 + ERROR_IPSEC_IKE_NEG_STATUS_EXTENDED_END syscall.Errno = 13909 + ERROR_IPSEC_BAD_SPI syscall.Errno = 13910 + ERROR_IPSEC_SA_LIFETIME_EXPIRED syscall.Errno = 13911 + ERROR_IPSEC_WRONG_SA syscall.Errno = 13912 + ERROR_IPSEC_REPLAY_CHECK_FAILED syscall.Errno = 13913 + ERROR_IPSEC_INVALID_PACKET syscall.Errno = 13914 + ERROR_IPSEC_INTEGRITY_CHECK_FAILED syscall.Errno = 13915 + ERROR_IPSEC_CLEAR_TEXT_DROP syscall.Errno = 13916 + ERROR_IPSEC_AUTH_FIREWALL_DROP syscall.Errno = 13917 + ERROR_IPSEC_THROTTLE_DROP syscall.Errno = 13918 + ERROR_IPSEC_DOSP_BLOCK syscall.Errno = 13925 + ERROR_IPSEC_DOSP_RECEIVED_MULTICAST syscall.Errno = 13926 + ERROR_IPSEC_DOSP_INVALID_PACKET syscall.Errno = 13927 + ERROR_IPSEC_DOSP_STATE_LOOKUP_FAILED syscall.Errno = 13928 + ERROR_IPSEC_DOSP_MAX_ENTRIES syscall.Errno = 13929 + ERROR_IPSEC_DOSP_KEYMOD_NOT_ALLOWED syscall.Errno = 13930 + ERROR_IPSEC_DOSP_NOT_INSTALLED syscall.Errno = 13931 + ERROR_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES syscall.Errno = 13932 + ERROR_SXS_SECTION_NOT_FOUND syscall.Errno = 14000 + ERROR_SXS_CANT_GEN_ACTCTX syscall.Errno = 14001 + ERROR_SXS_INVALID_ACTCTXDATA_FORMAT syscall.Errno = 14002 + ERROR_SXS_ASSEMBLY_NOT_FOUND syscall.Errno = 14003 + ERROR_SXS_MANIFEST_FORMAT_ERROR syscall.Errno = 14004 + ERROR_SXS_MANIFEST_PARSE_ERROR syscall.Errno = 14005 + ERROR_SXS_ACTIVATION_CONTEXT_DISABLED syscall.Errno = 14006 + ERROR_SXS_KEY_NOT_FOUND syscall.Errno = 14007 + ERROR_SXS_VERSION_CONFLICT syscall.Errno = 14008 + ERROR_SXS_WRONG_SECTION_TYPE syscall.Errno = 14009 + ERROR_SXS_THREAD_QUERIES_DISABLED syscall.Errno = 14010 + ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET syscall.Errno = 14011 + ERROR_SXS_UNKNOWN_ENCODING_GROUP syscall.Errno = 14012 + ERROR_SXS_UNKNOWN_ENCODING syscall.Errno = 14013 + ERROR_SXS_INVALID_XML_NAMESPACE_URI syscall.Errno = 14014 + ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED syscall.Errno = 14015 + ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED syscall.Errno = 14016 + ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE syscall.Errno = 14017 + ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE syscall.Errno = 14018 + ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE syscall.Errno = 14019 + ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT syscall.Errno = 14020 + ERROR_SXS_DUPLICATE_DLL_NAME syscall.Errno = 14021 + ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME syscall.Errno = 14022 + ERROR_SXS_DUPLICATE_CLSID syscall.Errno = 14023 + ERROR_SXS_DUPLICATE_IID syscall.Errno = 14024 + ERROR_SXS_DUPLICATE_TLBID syscall.Errno = 14025 + ERROR_SXS_DUPLICATE_PROGID syscall.Errno = 14026 + ERROR_SXS_DUPLICATE_ASSEMBLY_NAME syscall.Errno = 14027 + ERROR_SXS_FILE_HASH_MISMATCH syscall.Errno = 14028 + ERROR_SXS_POLICY_PARSE_ERROR syscall.Errno = 14029 + ERROR_SXS_XML_E_MISSINGQUOTE syscall.Errno = 14030 + ERROR_SXS_XML_E_COMMENTSYNTAX syscall.Errno = 14031 + ERROR_SXS_XML_E_BADSTARTNAMECHAR syscall.Errno = 14032 + ERROR_SXS_XML_E_BADNAMECHAR syscall.Errno = 14033 + ERROR_SXS_XML_E_BADCHARINSTRING syscall.Errno = 14034 + ERROR_SXS_XML_E_XMLDECLSYNTAX syscall.Errno = 14035 + ERROR_SXS_XML_E_BADCHARDATA syscall.Errno = 14036 + ERROR_SXS_XML_E_MISSINGWHITESPACE syscall.Errno = 14037 + ERROR_SXS_XML_E_EXPECTINGTAGEND syscall.Errno = 14038 + ERROR_SXS_XML_E_MISSINGSEMICOLON syscall.Errno = 14039 + ERROR_SXS_XML_E_UNBALANCEDPAREN syscall.Errno = 14040 + ERROR_SXS_XML_E_INTERNALERROR syscall.Errno = 14041 + ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE syscall.Errno = 14042 + ERROR_SXS_XML_E_INCOMPLETE_ENCODING syscall.Errno = 14043 + ERROR_SXS_XML_E_MISSING_PAREN syscall.Errno = 14044 + ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE syscall.Errno = 14045 + ERROR_SXS_XML_E_MULTIPLE_COLONS syscall.Errno = 14046 + ERROR_SXS_XML_E_INVALID_DECIMAL syscall.Errno = 14047 + ERROR_SXS_XML_E_INVALID_HEXIDECIMAL syscall.Errno = 14048 + ERROR_SXS_XML_E_INVALID_UNICODE syscall.Errno = 14049 + ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK syscall.Errno = 14050 + ERROR_SXS_XML_E_UNEXPECTEDENDTAG syscall.Errno = 14051 + ERROR_SXS_XML_E_UNCLOSEDTAG syscall.Errno = 14052 + ERROR_SXS_XML_E_DUPLICATEATTRIBUTE syscall.Errno = 14053 + ERROR_SXS_XML_E_MULTIPLEROOTS syscall.Errno = 14054 + ERROR_SXS_XML_E_INVALIDATROOTLEVEL syscall.Errno = 14055 + ERROR_SXS_XML_E_BADXMLDECL syscall.Errno = 14056 + ERROR_SXS_XML_E_MISSINGROOT syscall.Errno = 14057 + ERROR_SXS_XML_E_UNEXPECTEDEOF syscall.Errno = 14058 + ERROR_SXS_XML_E_BADPEREFINSUBSET syscall.Errno = 14059 + ERROR_SXS_XML_E_UNCLOSEDSTARTTAG syscall.Errno = 14060 + ERROR_SXS_XML_E_UNCLOSEDENDTAG syscall.Errno = 14061 + ERROR_SXS_XML_E_UNCLOSEDSTRING syscall.Errno = 14062 + ERROR_SXS_XML_E_UNCLOSEDCOMMENT syscall.Errno = 14063 + ERROR_SXS_XML_E_UNCLOSEDDECL syscall.Errno = 14064 + ERROR_SXS_XML_E_UNCLOSEDCDATA syscall.Errno = 14065 + ERROR_SXS_XML_E_RESERVEDNAMESPACE syscall.Errno = 14066 + ERROR_SXS_XML_E_INVALIDENCODING syscall.Errno = 14067 + ERROR_SXS_XML_E_INVALIDSWITCH syscall.Errno = 14068 + ERROR_SXS_XML_E_BADXMLCASE syscall.Errno = 14069 + ERROR_SXS_XML_E_INVALID_STANDALONE syscall.Errno = 14070 + ERROR_SXS_XML_E_UNEXPECTED_STANDALONE syscall.Errno = 14071 + ERROR_SXS_XML_E_INVALID_VERSION syscall.Errno = 14072 + ERROR_SXS_XML_E_MISSINGEQUALS syscall.Errno = 14073 + ERROR_SXS_PROTECTION_RECOVERY_FAILED syscall.Errno = 14074 + ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT syscall.Errno = 14075 + ERROR_SXS_PROTECTION_CATALOG_NOT_VALID syscall.Errno = 14076 + ERROR_SXS_UNTRANSLATABLE_HRESULT syscall.Errno = 14077 + ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING syscall.Errno = 14078 + ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE syscall.Errno = 14079 + ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME syscall.Errno = 14080 + ERROR_SXS_ASSEMBLY_MISSING syscall.Errno = 14081 + ERROR_SXS_CORRUPT_ACTIVATION_STACK syscall.Errno = 14082 + ERROR_SXS_CORRUPTION syscall.Errno = 14083 + ERROR_SXS_EARLY_DEACTIVATION syscall.Errno = 14084 + ERROR_SXS_INVALID_DEACTIVATION syscall.Errno = 14085 + ERROR_SXS_MULTIPLE_DEACTIVATION syscall.Errno = 14086 + ERROR_SXS_PROCESS_TERMINATION_REQUESTED syscall.Errno = 14087 + ERROR_SXS_RELEASE_ACTIVATION_CONTEXT syscall.Errno = 14088 + ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY syscall.Errno = 14089 + ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE syscall.Errno = 14090 + ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME syscall.Errno = 14091 + ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE syscall.Errno = 14092 + ERROR_SXS_IDENTITY_PARSE_ERROR syscall.Errno = 14093 + ERROR_MALFORMED_SUBSTITUTION_STRING syscall.Errno = 14094 + ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN syscall.Errno = 14095 + ERROR_UNMAPPED_SUBSTITUTION_STRING syscall.Errno = 14096 + ERROR_SXS_ASSEMBLY_NOT_LOCKED syscall.Errno = 14097 + ERROR_SXS_COMPONENT_STORE_CORRUPT syscall.Errno = 14098 + ERROR_ADVANCED_INSTALLER_FAILED syscall.Errno = 14099 + ERROR_XML_ENCODING_MISMATCH syscall.Errno = 14100 + ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT syscall.Errno = 14101 + ERROR_SXS_IDENTITIES_DIFFERENT syscall.Errno = 14102 + ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT syscall.Errno = 14103 + ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY syscall.Errno = 14104 + ERROR_SXS_MANIFEST_TOO_BIG syscall.Errno = 14105 + ERROR_SXS_SETTING_NOT_REGISTERED syscall.Errno = 14106 + ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE syscall.Errno = 14107 + ERROR_SMI_PRIMITIVE_INSTALLER_FAILED syscall.Errno = 14108 + ERROR_GENERIC_COMMAND_FAILED syscall.Errno = 14109 + ERROR_SXS_FILE_HASH_MISSING syscall.Errno = 14110 + ERROR_SXS_DUPLICATE_ACTIVATABLE_CLASS syscall.Errno = 14111 + ERROR_EVT_INVALID_CHANNEL_PATH syscall.Errno = 15000 + ERROR_EVT_INVALID_QUERY syscall.Errno = 15001 + ERROR_EVT_PUBLISHER_METADATA_NOT_FOUND syscall.Errno = 15002 + ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND syscall.Errno = 15003 + ERROR_EVT_INVALID_PUBLISHER_NAME syscall.Errno = 15004 + ERROR_EVT_INVALID_EVENT_DATA syscall.Errno = 15005 + ERROR_EVT_CHANNEL_NOT_FOUND syscall.Errno = 15007 + ERROR_EVT_MALFORMED_XML_TEXT syscall.Errno = 15008 + ERROR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL syscall.Errno = 15009 + ERROR_EVT_CONFIGURATION_ERROR syscall.Errno = 15010 + ERROR_EVT_QUERY_RESULT_STALE syscall.Errno = 15011 + ERROR_EVT_QUERY_RESULT_INVALID_POSITION syscall.Errno = 15012 + ERROR_EVT_NON_VALIDATING_MSXML syscall.Errno = 15013 + ERROR_EVT_FILTER_ALREADYSCOPED syscall.Errno = 15014 + ERROR_EVT_FILTER_NOTELTSET syscall.Errno = 15015 + ERROR_EVT_FILTER_INVARG syscall.Errno = 15016 + ERROR_EVT_FILTER_INVTEST syscall.Errno = 15017 + ERROR_EVT_FILTER_INVTYPE syscall.Errno = 15018 + ERROR_EVT_FILTER_PARSEERR syscall.Errno = 15019 + ERROR_EVT_FILTER_UNSUPPORTEDOP syscall.Errno = 15020 + ERROR_EVT_FILTER_UNEXPECTEDTOKEN syscall.Errno = 15021 + ERROR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL syscall.Errno = 15022 + ERROR_EVT_INVALID_CHANNEL_PROPERTY_VALUE syscall.Errno = 15023 + ERROR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE syscall.Errno = 15024 + ERROR_EVT_CHANNEL_CANNOT_ACTIVATE syscall.Errno = 15025 + ERROR_EVT_FILTER_TOO_COMPLEX syscall.Errno = 15026 + ERROR_EVT_MESSAGE_NOT_FOUND syscall.Errno = 15027 + ERROR_EVT_MESSAGE_ID_NOT_FOUND syscall.Errno = 15028 + ERROR_EVT_UNRESOLVED_VALUE_INSERT syscall.Errno = 15029 + ERROR_EVT_UNRESOLVED_PARAMETER_INSERT syscall.Errno = 15030 + ERROR_EVT_MAX_INSERTS_REACHED syscall.Errno = 15031 + ERROR_EVT_EVENT_DEFINITION_NOT_FOUND syscall.Errno = 15032 + ERROR_EVT_MESSAGE_LOCALE_NOT_FOUND syscall.Errno = 15033 + ERROR_EVT_VERSION_TOO_OLD syscall.Errno = 15034 + ERROR_EVT_VERSION_TOO_NEW syscall.Errno = 15035 + ERROR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY syscall.Errno = 15036 + ERROR_EVT_PUBLISHER_DISABLED syscall.Errno = 15037 + ERROR_EVT_FILTER_OUT_OF_RANGE syscall.Errno = 15038 + ERROR_EC_SUBSCRIPTION_CANNOT_ACTIVATE syscall.Errno = 15080 + ERROR_EC_LOG_DISABLED syscall.Errno = 15081 + ERROR_EC_CIRCULAR_FORWARDING syscall.Errno = 15082 + ERROR_EC_CREDSTORE_FULL syscall.Errno = 15083 + ERROR_EC_CRED_NOT_FOUND syscall.Errno = 15084 + ERROR_EC_NO_ACTIVE_CHANNEL syscall.Errno = 15085 + ERROR_MUI_FILE_NOT_FOUND syscall.Errno = 15100 + ERROR_MUI_INVALID_FILE syscall.Errno = 15101 + ERROR_MUI_INVALID_RC_CONFIG syscall.Errno = 15102 + ERROR_MUI_INVALID_LOCALE_NAME syscall.Errno = 15103 + ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME syscall.Errno = 15104 + ERROR_MUI_FILE_NOT_LOADED syscall.Errno = 15105 + ERROR_RESOURCE_ENUM_USER_STOP syscall.Errno = 15106 + ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED syscall.Errno = 15107 + ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME syscall.Errno = 15108 + ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE syscall.Errno = 15110 + ERROR_MRM_INVALID_PRICONFIG syscall.Errno = 15111 + ERROR_MRM_INVALID_FILE_TYPE syscall.Errno = 15112 + ERROR_MRM_UNKNOWN_QUALIFIER syscall.Errno = 15113 + ERROR_MRM_INVALID_QUALIFIER_VALUE syscall.Errno = 15114 + ERROR_MRM_NO_CANDIDATE syscall.Errno = 15115 + ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE syscall.Errno = 15116 + ERROR_MRM_RESOURCE_TYPE_MISMATCH syscall.Errno = 15117 + ERROR_MRM_DUPLICATE_MAP_NAME syscall.Errno = 15118 + ERROR_MRM_DUPLICATE_ENTRY syscall.Errno = 15119 + ERROR_MRM_INVALID_RESOURCE_IDENTIFIER syscall.Errno = 15120 + ERROR_MRM_FILEPATH_TOO_LONG syscall.Errno = 15121 + ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE syscall.Errno = 15122 + ERROR_MRM_INVALID_PRI_FILE syscall.Errno = 15126 + ERROR_MRM_NAMED_RESOURCE_NOT_FOUND syscall.Errno = 15127 + ERROR_MRM_MAP_NOT_FOUND syscall.Errno = 15135 + ERROR_MRM_UNSUPPORTED_PROFILE_TYPE syscall.Errno = 15136 + ERROR_MRM_INVALID_QUALIFIER_OPERATOR syscall.Errno = 15137 + ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE syscall.Errno = 15138 + ERROR_MRM_AUTOMERGE_ENABLED syscall.Errno = 15139 + ERROR_MRM_TOO_MANY_RESOURCES syscall.Errno = 15140 + ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_MERGE syscall.Errno = 15141 + ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_LOAD_UNLOAD_PRI_FILE syscall.Errno = 15142 + ERROR_MRM_NO_CURRENT_VIEW_ON_THREAD syscall.Errno = 15143 + ERROR_DIFFERENT_PROFILE_RESOURCE_MANAGER_EXIST syscall.Errno = 15144 + ERROR_OPERATION_NOT_ALLOWED_FROM_SYSTEM_COMPONENT syscall.Errno = 15145 + ERROR_MRM_DIRECT_REF_TO_NON_DEFAULT_RESOURCE syscall.Errno = 15146 + ERROR_MRM_GENERATION_COUNT_MISMATCH syscall.Errno = 15147 + ERROR_PRI_MERGE_VERSION_MISMATCH syscall.Errno = 15148 + ERROR_PRI_MERGE_MISSING_SCHEMA syscall.Errno = 15149 + ERROR_PRI_MERGE_LOAD_FILE_FAILED syscall.Errno = 15150 + ERROR_PRI_MERGE_ADD_FILE_FAILED syscall.Errno = 15151 + ERROR_PRI_MERGE_WRITE_FILE_FAILED syscall.Errno = 15152 + ERROR_PRI_MERGE_MULTIPLE_PACKAGE_FAMILIES_NOT_ALLOWED syscall.Errno = 15153 + ERROR_PRI_MERGE_MULTIPLE_MAIN_PACKAGES_NOT_ALLOWED syscall.Errno = 15154 + ERROR_PRI_MERGE_BUNDLE_PACKAGES_NOT_ALLOWED syscall.Errno = 15155 + ERROR_PRI_MERGE_MAIN_PACKAGE_REQUIRED syscall.Errno = 15156 + ERROR_PRI_MERGE_RESOURCE_PACKAGE_REQUIRED syscall.Errno = 15157 + ERROR_PRI_MERGE_INVALID_FILE_NAME syscall.Errno = 15158 + ERROR_MRM_PACKAGE_NOT_FOUND syscall.Errno = 15159 + ERROR_MRM_MISSING_DEFAULT_LANGUAGE syscall.Errno = 15160 + ERROR_MCA_INVALID_CAPABILITIES_STRING syscall.Errno = 15200 + ERROR_MCA_INVALID_VCP_VERSION syscall.Errno = 15201 + ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION syscall.Errno = 15202 + ERROR_MCA_MCCS_VERSION_MISMATCH syscall.Errno = 15203 + ERROR_MCA_UNSUPPORTED_MCCS_VERSION syscall.Errno = 15204 + ERROR_MCA_INTERNAL_ERROR syscall.Errno = 15205 + ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED syscall.Errno = 15206 + ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE syscall.Errno = 15207 + ERROR_AMBIGUOUS_SYSTEM_DEVICE syscall.Errno = 15250 + ERROR_SYSTEM_DEVICE_NOT_FOUND syscall.Errno = 15299 + ERROR_HASH_NOT_SUPPORTED syscall.Errno = 15300 + ERROR_HASH_NOT_PRESENT syscall.Errno = 15301 + ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED syscall.Errno = 15321 + ERROR_GPIO_CLIENT_INFORMATION_INVALID syscall.Errno = 15322 + ERROR_GPIO_VERSION_NOT_SUPPORTED syscall.Errno = 15323 + ERROR_GPIO_INVALID_REGISTRATION_PACKET syscall.Errno = 15324 + ERROR_GPIO_OPERATION_DENIED syscall.Errno = 15325 + ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE syscall.Errno = 15326 + ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED syscall.Errno = 15327 + ERROR_CANNOT_SWITCH_RUNLEVEL syscall.Errno = 15400 + ERROR_INVALID_RUNLEVEL_SETTING syscall.Errno = 15401 + ERROR_RUNLEVEL_SWITCH_TIMEOUT syscall.Errno = 15402 + ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT syscall.Errno = 15403 + ERROR_RUNLEVEL_SWITCH_IN_PROGRESS syscall.Errno = 15404 + ERROR_SERVICES_FAILED_AUTOSTART syscall.Errno = 15405 + ERROR_COM_TASK_STOP_PENDING syscall.Errno = 15501 + ERROR_INSTALL_OPEN_PACKAGE_FAILED syscall.Errno = 15600 + ERROR_INSTALL_PACKAGE_NOT_FOUND syscall.Errno = 15601 + ERROR_INSTALL_INVALID_PACKAGE syscall.Errno = 15602 + ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED syscall.Errno = 15603 + ERROR_INSTALL_OUT_OF_DISK_SPACE syscall.Errno = 15604 + ERROR_INSTALL_NETWORK_FAILURE syscall.Errno = 15605 + ERROR_INSTALL_REGISTRATION_FAILURE syscall.Errno = 15606 + ERROR_INSTALL_DEREGISTRATION_FAILURE syscall.Errno = 15607 + ERROR_INSTALL_CANCEL syscall.Errno = 15608 + ERROR_INSTALL_FAILED syscall.Errno = 15609 + ERROR_REMOVE_FAILED syscall.Errno = 15610 + ERROR_PACKAGE_ALREADY_EXISTS syscall.Errno = 15611 + ERROR_NEEDS_REMEDIATION syscall.Errno = 15612 + ERROR_INSTALL_PREREQUISITE_FAILED syscall.Errno = 15613 + ERROR_PACKAGE_REPOSITORY_CORRUPTED syscall.Errno = 15614 + ERROR_INSTALL_POLICY_FAILURE syscall.Errno = 15615 + ERROR_PACKAGE_UPDATING syscall.Errno = 15616 + ERROR_DEPLOYMENT_BLOCKED_BY_POLICY syscall.Errno = 15617 + ERROR_PACKAGES_IN_USE syscall.Errno = 15618 + ERROR_RECOVERY_FILE_CORRUPT syscall.Errno = 15619 + ERROR_INVALID_STAGED_SIGNATURE syscall.Errno = 15620 + ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED syscall.Errno = 15621 + ERROR_INSTALL_PACKAGE_DOWNGRADE syscall.Errno = 15622 + ERROR_SYSTEM_NEEDS_REMEDIATION syscall.Errno = 15623 + ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN syscall.Errno = 15624 + ERROR_RESILIENCY_FILE_CORRUPT syscall.Errno = 15625 + ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING syscall.Errno = 15626 + ERROR_PACKAGE_MOVE_FAILED syscall.Errno = 15627 + ERROR_INSTALL_VOLUME_NOT_EMPTY syscall.Errno = 15628 + ERROR_INSTALL_VOLUME_OFFLINE syscall.Errno = 15629 + ERROR_INSTALL_VOLUME_CORRUPT syscall.Errno = 15630 + ERROR_NEEDS_REGISTRATION syscall.Errno = 15631 + ERROR_INSTALL_WRONG_PROCESSOR_ARCHITECTURE syscall.Errno = 15632 + ERROR_DEV_SIDELOAD_LIMIT_EXCEEDED syscall.Errno = 15633 + ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE syscall.Errno = 15634 + ERROR_PACKAGE_NOT_SUPPORTED_ON_FILESYSTEM syscall.Errno = 15635 + ERROR_PACKAGE_MOVE_BLOCKED_BY_STREAMING syscall.Errno = 15636 + ERROR_INSTALL_OPTIONAL_PACKAGE_APPLICATIONID_NOT_UNIQUE syscall.Errno = 15637 + ERROR_PACKAGE_STAGING_ONHOLD syscall.Errno = 15638 + ERROR_INSTALL_INVALID_RELATED_SET_UPDATE syscall.Errno = 15639 + ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_FULLTRUST_CAPABILITY syscall.Errno = 15640 + ERROR_DEPLOYMENT_BLOCKED_BY_USER_LOG_OFF syscall.Errno = 15641 + ERROR_PROVISION_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_PROVISIONED syscall.Errno = 15642 + ERROR_PACKAGES_REPUTATION_CHECK_FAILED syscall.Errno = 15643 + ERROR_PACKAGES_REPUTATION_CHECK_TIMEDOUT syscall.Errno = 15644 + ERROR_DEPLOYMENT_OPTION_NOT_SUPPORTED syscall.Errno = 15645 + ERROR_APPINSTALLER_ACTIVATION_BLOCKED syscall.Errno = 15646 + ERROR_REGISTRATION_FROM_REMOTE_DRIVE_NOT_SUPPORTED syscall.Errno = 15647 + ERROR_APPX_RAW_DATA_WRITE_FAILED syscall.Errno = 15648 + ERROR_DEPLOYMENT_BLOCKED_BY_VOLUME_POLICY_PACKAGE syscall.Errno = 15649 + ERROR_DEPLOYMENT_BLOCKED_BY_VOLUME_POLICY_MACHINE syscall.Errno = 15650 + ERROR_DEPLOYMENT_BLOCKED_BY_PROFILE_POLICY syscall.Errno = 15651 + ERROR_DEPLOYMENT_FAILED_CONFLICTING_MUTABLE_PACKAGE_DIRECTORY syscall.Errno = 15652 + ERROR_SINGLETON_RESOURCE_INSTALLED_IN_ACTIVE_USER syscall.Errno = 15653 + ERROR_DIFFERENT_VERSION_OF_PACKAGED_SERVICE_INSTALLED syscall.Errno = 15654 + ERROR_SERVICE_EXISTS_AS_NON_PACKAGED_SERVICE syscall.Errno = 15655 + ERROR_PACKAGED_SERVICE_REQUIRES_ADMIN_PRIVILEGES syscall.Errno = 15656 + APPMODEL_ERROR_NO_PACKAGE syscall.Errno = 15700 + APPMODEL_ERROR_PACKAGE_RUNTIME_CORRUPT syscall.Errno = 15701 + APPMODEL_ERROR_PACKAGE_IDENTITY_CORRUPT syscall.Errno = 15702 + APPMODEL_ERROR_NO_APPLICATION syscall.Errno = 15703 + APPMODEL_ERROR_DYNAMIC_PROPERTY_READ_FAILED syscall.Errno = 15704 + APPMODEL_ERROR_DYNAMIC_PROPERTY_INVALID syscall.Errno = 15705 + APPMODEL_ERROR_PACKAGE_NOT_AVAILABLE syscall.Errno = 15706 + APPMODEL_ERROR_NO_MUTABLE_DIRECTORY syscall.Errno = 15707 + ERROR_STATE_LOAD_STORE_FAILED syscall.Errno = 15800 + ERROR_STATE_GET_VERSION_FAILED syscall.Errno = 15801 + ERROR_STATE_SET_VERSION_FAILED syscall.Errno = 15802 + ERROR_STATE_STRUCTURED_RESET_FAILED syscall.Errno = 15803 + ERROR_STATE_OPEN_CONTAINER_FAILED syscall.Errno = 15804 + ERROR_STATE_CREATE_CONTAINER_FAILED syscall.Errno = 15805 + ERROR_STATE_DELETE_CONTAINER_FAILED syscall.Errno = 15806 + ERROR_STATE_READ_SETTING_FAILED syscall.Errno = 15807 + ERROR_STATE_WRITE_SETTING_FAILED syscall.Errno = 15808 + ERROR_STATE_DELETE_SETTING_FAILED syscall.Errno = 15809 + ERROR_STATE_QUERY_SETTING_FAILED syscall.Errno = 15810 + ERROR_STATE_READ_COMPOSITE_SETTING_FAILED syscall.Errno = 15811 + ERROR_STATE_WRITE_COMPOSITE_SETTING_FAILED syscall.Errno = 15812 + ERROR_STATE_ENUMERATE_CONTAINER_FAILED syscall.Errno = 15813 + ERROR_STATE_ENUMERATE_SETTINGS_FAILED syscall.Errno = 15814 + ERROR_STATE_COMPOSITE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED syscall.Errno = 15815 + ERROR_STATE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED syscall.Errno = 15816 + ERROR_STATE_SETTING_NAME_SIZE_LIMIT_EXCEEDED syscall.Errno = 15817 + ERROR_STATE_CONTAINER_NAME_SIZE_LIMIT_EXCEEDED syscall.Errno = 15818 + ERROR_API_UNAVAILABLE syscall.Errno = 15841 + STORE_ERROR_UNLICENSED syscall.Errno = 15861 + STORE_ERROR_UNLICENSED_USER syscall.Errno = 15862 + STORE_ERROR_PENDING_COM_TRANSACTION syscall.Errno = 15863 + STORE_ERROR_LICENSE_REVOKED syscall.Errno = 15864 + SEVERITY_SUCCESS syscall.Errno = 0 + SEVERITY_ERROR syscall.Errno = 1 + FACILITY_NT_BIT = 0x10000000 + E_NOT_SET = ERROR_NOT_FOUND + E_NOT_VALID_STATE = ERROR_INVALID_STATE + E_NOT_SUFFICIENT_BUFFER = ERROR_INSUFFICIENT_BUFFER + E_TIME_SENSITIVE_THREAD = ERROR_TIME_SENSITIVE_THREAD + E_NO_TASK_QUEUE = ERROR_NO_TASK_QUEUE + NOERROR syscall.Errno = 0 + E_UNEXPECTED Handle = 0x8000FFFF + E_NOTIMPL Handle = 0x80004001 + E_OUTOFMEMORY Handle = 0x8007000E + E_INVALIDARG Handle = 0x80070057 + E_NOINTERFACE Handle = 0x80004002 + E_POINTER Handle = 0x80004003 + E_HANDLE Handle = 0x80070006 + E_ABORT Handle = 0x80004004 + E_FAIL Handle = 0x80004005 + E_ACCESSDENIED Handle = 0x80070005 + E_PENDING Handle = 0x8000000A + E_BOUNDS Handle = 0x8000000B + E_CHANGED_STATE Handle = 0x8000000C + E_ILLEGAL_STATE_CHANGE Handle = 0x8000000D + E_ILLEGAL_METHOD_CALL Handle = 0x8000000E + RO_E_METADATA_NAME_NOT_FOUND Handle = 0x8000000F + RO_E_METADATA_NAME_IS_NAMESPACE Handle = 0x80000010 + RO_E_METADATA_INVALID_TYPE_FORMAT Handle = 0x80000011 + RO_E_INVALID_METADATA_FILE Handle = 0x80000012 + RO_E_CLOSED Handle = 0x80000013 + RO_E_EXCLUSIVE_WRITE Handle = 0x80000014 + RO_E_CHANGE_NOTIFICATION_IN_PROGRESS Handle = 0x80000015 + RO_E_ERROR_STRING_NOT_FOUND Handle = 0x80000016 + E_STRING_NOT_NULL_TERMINATED Handle = 0x80000017 + E_ILLEGAL_DELEGATE_ASSIGNMENT Handle = 0x80000018 + E_ASYNC_OPERATION_NOT_STARTED Handle = 0x80000019 + E_APPLICATION_EXITING Handle = 0x8000001A + E_APPLICATION_VIEW_EXITING Handle = 0x8000001B + RO_E_MUST_BE_AGILE Handle = 0x8000001C + RO_E_UNSUPPORTED_FROM_MTA Handle = 0x8000001D + RO_E_COMMITTED Handle = 0x8000001E + RO_E_BLOCKED_CROSS_ASTA_CALL Handle = 0x8000001F + RO_E_CANNOT_ACTIVATE_FULL_TRUST_SERVER Handle = 0x80000020 + RO_E_CANNOT_ACTIVATE_UNIVERSAL_APPLICATION_SERVER Handle = 0x80000021 + CO_E_INIT_TLS Handle = 0x80004006 + CO_E_INIT_SHARED_ALLOCATOR Handle = 0x80004007 + CO_E_INIT_MEMORY_ALLOCATOR Handle = 0x80004008 + CO_E_INIT_CLASS_CACHE Handle = 0x80004009 + CO_E_INIT_RPC_CHANNEL Handle = 0x8000400A + CO_E_INIT_TLS_SET_CHANNEL_CONTROL Handle = 0x8000400B + CO_E_INIT_TLS_CHANNEL_CONTROL Handle = 0x8000400C + CO_E_INIT_UNACCEPTED_USER_ALLOCATOR Handle = 0x8000400D + CO_E_INIT_SCM_MUTEX_EXISTS Handle = 0x8000400E + CO_E_INIT_SCM_FILE_MAPPING_EXISTS Handle = 0x8000400F + CO_E_INIT_SCM_MAP_VIEW_OF_FILE Handle = 0x80004010 + CO_E_INIT_SCM_EXEC_FAILURE Handle = 0x80004011 + CO_E_INIT_ONLY_SINGLE_THREADED Handle = 0x80004012 + CO_E_CANT_REMOTE Handle = 0x80004013 + CO_E_BAD_SERVER_NAME Handle = 0x80004014 + CO_E_WRONG_SERVER_IDENTITY Handle = 0x80004015 + CO_E_OLE1DDE_DISABLED Handle = 0x80004016 + CO_E_RUNAS_SYNTAX Handle = 0x80004017 + CO_E_CREATEPROCESS_FAILURE Handle = 0x80004018 + CO_E_RUNAS_CREATEPROCESS_FAILURE Handle = 0x80004019 + CO_E_RUNAS_LOGON_FAILURE Handle = 0x8000401A + CO_E_LAUNCH_PERMSSION_DENIED Handle = 0x8000401B + CO_E_START_SERVICE_FAILURE Handle = 0x8000401C + CO_E_REMOTE_COMMUNICATION_FAILURE Handle = 0x8000401D + CO_E_SERVER_START_TIMEOUT Handle = 0x8000401E + CO_E_CLSREG_INCONSISTENT Handle = 0x8000401F + CO_E_IIDREG_INCONSISTENT Handle = 0x80004020 + CO_E_NOT_SUPPORTED Handle = 0x80004021 + CO_E_RELOAD_DLL Handle = 0x80004022 + CO_E_MSI_ERROR Handle = 0x80004023 + CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT Handle = 0x80004024 + CO_E_SERVER_PAUSED Handle = 0x80004025 + CO_E_SERVER_NOT_PAUSED Handle = 0x80004026 + CO_E_CLASS_DISABLED Handle = 0x80004027 + CO_E_CLRNOTAVAILABLE Handle = 0x80004028 + CO_E_ASYNC_WORK_REJECTED Handle = 0x80004029 + CO_E_SERVER_INIT_TIMEOUT Handle = 0x8000402A + CO_E_NO_SECCTX_IN_ACTIVATE Handle = 0x8000402B + CO_E_TRACKER_CONFIG Handle = 0x80004030 + CO_E_THREADPOOL_CONFIG Handle = 0x80004031 + CO_E_SXS_CONFIG Handle = 0x80004032 + CO_E_MALFORMED_SPN Handle = 0x80004033 + CO_E_UNREVOKED_REGISTRATION_ON_APARTMENT_SHUTDOWN Handle = 0x80004034 + CO_E_PREMATURE_STUB_RUNDOWN Handle = 0x80004035 + S_OK Handle = 0 + S_FALSE Handle = 1 + OLE_E_FIRST Handle = 0x80040000 + OLE_E_LAST Handle = 0x800400FF + OLE_S_FIRST Handle = 0x00040000 + OLE_S_LAST Handle = 0x000400FF + OLE_E_OLEVERB Handle = 0x80040000 + OLE_E_ADVF Handle = 0x80040001 + OLE_E_ENUM_NOMORE Handle = 0x80040002 + OLE_E_ADVISENOTSUPPORTED Handle = 0x80040003 + OLE_E_NOCONNECTION Handle = 0x80040004 + OLE_E_NOTRUNNING Handle = 0x80040005 + OLE_E_NOCACHE Handle = 0x80040006 + OLE_E_BLANK Handle = 0x80040007 + OLE_E_CLASSDIFF Handle = 0x80040008 + OLE_E_CANT_GETMONIKER Handle = 0x80040009 + OLE_E_CANT_BINDTOSOURCE Handle = 0x8004000A + OLE_E_STATIC Handle = 0x8004000B + OLE_E_PROMPTSAVECANCELLED Handle = 0x8004000C + OLE_E_INVALIDRECT Handle = 0x8004000D + OLE_E_WRONGCOMPOBJ Handle = 0x8004000E + OLE_E_INVALIDHWND Handle = 0x8004000F + OLE_E_NOT_INPLACEACTIVE Handle = 0x80040010 + OLE_E_CANTCONVERT Handle = 0x80040011 + OLE_E_NOSTORAGE Handle = 0x80040012 + DV_E_FORMATETC Handle = 0x80040064 + DV_E_DVTARGETDEVICE Handle = 0x80040065 + DV_E_STGMEDIUM Handle = 0x80040066 + DV_E_STATDATA Handle = 0x80040067 + DV_E_LINDEX Handle = 0x80040068 + DV_E_TYMED Handle = 0x80040069 + DV_E_CLIPFORMAT Handle = 0x8004006A + DV_E_DVASPECT Handle = 0x8004006B + DV_E_DVTARGETDEVICE_SIZE Handle = 0x8004006C + DV_E_NOIVIEWOBJECT Handle = 0x8004006D + DRAGDROP_E_FIRST syscall.Errno = 0x80040100 + DRAGDROP_E_LAST syscall.Errno = 0x8004010F + DRAGDROP_S_FIRST syscall.Errno = 0x00040100 + DRAGDROP_S_LAST syscall.Errno = 0x0004010F + DRAGDROP_E_NOTREGISTERED Handle = 0x80040100 + DRAGDROP_E_ALREADYREGISTERED Handle = 0x80040101 + DRAGDROP_E_INVALIDHWND Handle = 0x80040102 + DRAGDROP_E_CONCURRENT_DRAG_ATTEMPTED Handle = 0x80040103 + CLASSFACTORY_E_FIRST syscall.Errno = 0x80040110 + CLASSFACTORY_E_LAST syscall.Errno = 0x8004011F + CLASSFACTORY_S_FIRST syscall.Errno = 0x00040110 + CLASSFACTORY_S_LAST syscall.Errno = 0x0004011F + CLASS_E_NOAGGREGATION Handle = 0x80040110 + CLASS_E_CLASSNOTAVAILABLE Handle = 0x80040111 + CLASS_E_NOTLICENSED Handle = 0x80040112 + MARSHAL_E_FIRST syscall.Errno = 0x80040120 + MARSHAL_E_LAST syscall.Errno = 0x8004012F + MARSHAL_S_FIRST syscall.Errno = 0x00040120 + MARSHAL_S_LAST syscall.Errno = 0x0004012F + DATA_E_FIRST syscall.Errno = 0x80040130 + DATA_E_LAST syscall.Errno = 0x8004013F + DATA_S_FIRST syscall.Errno = 0x00040130 + DATA_S_LAST syscall.Errno = 0x0004013F + VIEW_E_FIRST syscall.Errno = 0x80040140 + VIEW_E_LAST syscall.Errno = 0x8004014F + VIEW_S_FIRST syscall.Errno = 0x00040140 + VIEW_S_LAST syscall.Errno = 0x0004014F + VIEW_E_DRAW Handle = 0x80040140 + REGDB_E_FIRST syscall.Errno = 0x80040150 + REGDB_E_LAST syscall.Errno = 0x8004015F + REGDB_S_FIRST syscall.Errno = 0x00040150 + REGDB_S_LAST syscall.Errno = 0x0004015F + REGDB_E_READREGDB Handle = 0x80040150 + REGDB_E_WRITEREGDB Handle = 0x80040151 + REGDB_E_KEYMISSING Handle = 0x80040152 + REGDB_E_INVALIDVALUE Handle = 0x80040153 + REGDB_E_CLASSNOTREG Handle = 0x80040154 + REGDB_E_IIDNOTREG Handle = 0x80040155 + REGDB_E_BADTHREADINGMODEL Handle = 0x80040156 + REGDB_E_PACKAGEPOLICYVIOLATION Handle = 0x80040157 + CAT_E_FIRST syscall.Errno = 0x80040160 + CAT_E_LAST syscall.Errno = 0x80040161 + CAT_E_CATIDNOEXIST Handle = 0x80040160 + CAT_E_NODESCRIPTION Handle = 0x80040161 + CS_E_FIRST syscall.Errno = 0x80040164 + CS_E_LAST syscall.Errno = 0x8004016F + CS_E_PACKAGE_NOTFOUND Handle = 0x80040164 + CS_E_NOT_DELETABLE Handle = 0x80040165 + CS_E_CLASS_NOTFOUND Handle = 0x80040166 + CS_E_INVALID_VERSION Handle = 0x80040167 + CS_E_NO_CLASSSTORE Handle = 0x80040168 + CS_E_OBJECT_NOTFOUND Handle = 0x80040169 + CS_E_OBJECT_ALREADY_EXISTS Handle = 0x8004016A + CS_E_INVALID_PATH Handle = 0x8004016B + CS_E_NETWORK_ERROR Handle = 0x8004016C + CS_E_ADMIN_LIMIT_EXCEEDED Handle = 0x8004016D + CS_E_SCHEMA_MISMATCH Handle = 0x8004016E + CS_E_INTERNAL_ERROR Handle = 0x8004016F + CACHE_E_FIRST syscall.Errno = 0x80040170 + CACHE_E_LAST syscall.Errno = 0x8004017F + CACHE_S_FIRST syscall.Errno = 0x00040170 + CACHE_S_LAST syscall.Errno = 0x0004017F + CACHE_E_NOCACHE_UPDATED Handle = 0x80040170 + OLEOBJ_E_FIRST syscall.Errno = 0x80040180 + OLEOBJ_E_LAST syscall.Errno = 0x8004018F + OLEOBJ_S_FIRST syscall.Errno = 0x00040180 + OLEOBJ_S_LAST syscall.Errno = 0x0004018F + OLEOBJ_E_NOVERBS Handle = 0x80040180 + OLEOBJ_E_INVALIDVERB Handle = 0x80040181 + CLIENTSITE_E_FIRST syscall.Errno = 0x80040190 + CLIENTSITE_E_LAST syscall.Errno = 0x8004019F + CLIENTSITE_S_FIRST syscall.Errno = 0x00040190 + CLIENTSITE_S_LAST syscall.Errno = 0x0004019F + INPLACE_E_NOTUNDOABLE Handle = 0x800401A0 + INPLACE_E_NOTOOLSPACE Handle = 0x800401A1 + INPLACE_E_FIRST syscall.Errno = 0x800401A0 + INPLACE_E_LAST syscall.Errno = 0x800401AF + INPLACE_S_FIRST syscall.Errno = 0x000401A0 + INPLACE_S_LAST syscall.Errno = 0x000401AF + ENUM_E_FIRST syscall.Errno = 0x800401B0 + ENUM_E_LAST syscall.Errno = 0x800401BF + ENUM_S_FIRST syscall.Errno = 0x000401B0 + ENUM_S_LAST syscall.Errno = 0x000401BF + CONVERT10_E_FIRST syscall.Errno = 0x800401C0 + CONVERT10_E_LAST syscall.Errno = 0x800401CF + CONVERT10_S_FIRST syscall.Errno = 0x000401C0 + CONVERT10_S_LAST syscall.Errno = 0x000401CF + CONVERT10_E_OLESTREAM_GET Handle = 0x800401C0 + CONVERT10_E_OLESTREAM_PUT Handle = 0x800401C1 + CONVERT10_E_OLESTREAM_FMT Handle = 0x800401C2 + CONVERT10_E_OLESTREAM_BITMAP_TO_DIB Handle = 0x800401C3 + CONVERT10_E_STG_FMT Handle = 0x800401C4 + CONVERT10_E_STG_NO_STD_STREAM Handle = 0x800401C5 + CONVERT10_E_STG_DIB_TO_BITMAP Handle = 0x800401C6 + CLIPBRD_E_FIRST syscall.Errno = 0x800401D0 + CLIPBRD_E_LAST syscall.Errno = 0x800401DF + CLIPBRD_S_FIRST syscall.Errno = 0x000401D0 + CLIPBRD_S_LAST syscall.Errno = 0x000401DF + CLIPBRD_E_CANT_OPEN Handle = 0x800401D0 + CLIPBRD_E_CANT_EMPTY Handle = 0x800401D1 + CLIPBRD_E_CANT_SET Handle = 0x800401D2 + CLIPBRD_E_BAD_DATA Handle = 0x800401D3 + CLIPBRD_E_CANT_CLOSE Handle = 0x800401D4 + MK_E_FIRST syscall.Errno = 0x800401E0 + MK_E_LAST syscall.Errno = 0x800401EF + MK_S_FIRST syscall.Errno = 0x000401E0 + MK_S_LAST syscall.Errno = 0x000401EF + MK_E_CONNECTMANUALLY Handle = 0x800401E0 + MK_E_EXCEEDEDDEADLINE Handle = 0x800401E1 + MK_E_NEEDGENERIC Handle = 0x800401E2 + MK_E_UNAVAILABLE Handle = 0x800401E3 + MK_E_SYNTAX Handle = 0x800401E4 + MK_E_NOOBJECT Handle = 0x800401E5 + MK_E_INVALIDEXTENSION Handle = 0x800401E6 + MK_E_INTERMEDIATEINTERFACENOTSUPPORTED Handle = 0x800401E7 + MK_E_NOTBINDABLE Handle = 0x800401E8 + MK_E_NOTBOUND Handle = 0x800401E9 + MK_E_CANTOPENFILE Handle = 0x800401EA + MK_E_MUSTBOTHERUSER Handle = 0x800401EB + MK_E_NOINVERSE Handle = 0x800401EC + MK_E_NOSTORAGE Handle = 0x800401ED + MK_E_NOPREFIX Handle = 0x800401EE + MK_E_ENUMERATION_FAILED Handle = 0x800401EF + CO_E_FIRST syscall.Errno = 0x800401F0 + CO_E_LAST syscall.Errno = 0x800401FF + CO_S_FIRST syscall.Errno = 0x000401F0 + CO_S_LAST syscall.Errno = 0x000401FF + CO_E_NOTINITIALIZED Handle = 0x800401F0 + CO_E_ALREADYINITIALIZED Handle = 0x800401F1 + CO_E_CANTDETERMINECLASS Handle = 0x800401F2 + CO_E_CLASSSTRING Handle = 0x800401F3 + CO_E_IIDSTRING Handle = 0x800401F4 + CO_E_APPNOTFOUND Handle = 0x800401F5 + CO_E_APPSINGLEUSE Handle = 0x800401F6 + CO_E_ERRORINAPP Handle = 0x800401F7 + CO_E_DLLNOTFOUND Handle = 0x800401F8 + CO_E_ERRORINDLL Handle = 0x800401F9 + CO_E_WRONGOSFORAPP Handle = 0x800401FA + CO_E_OBJNOTREG Handle = 0x800401FB + CO_E_OBJISREG Handle = 0x800401FC + CO_E_OBJNOTCONNECTED Handle = 0x800401FD + CO_E_APPDIDNTREG Handle = 0x800401FE + CO_E_RELEASED Handle = 0x800401FF + EVENT_E_FIRST syscall.Errno = 0x80040200 + EVENT_E_LAST syscall.Errno = 0x8004021F + EVENT_S_FIRST syscall.Errno = 0x00040200 + EVENT_S_LAST syscall.Errno = 0x0004021F + EVENT_S_SOME_SUBSCRIBERS_FAILED Handle = 0x00040200 + EVENT_E_ALL_SUBSCRIBERS_FAILED Handle = 0x80040201 + EVENT_S_NOSUBSCRIBERS Handle = 0x00040202 + EVENT_E_QUERYSYNTAX Handle = 0x80040203 + EVENT_E_QUERYFIELD Handle = 0x80040204 + EVENT_E_INTERNALEXCEPTION Handle = 0x80040205 + EVENT_E_INTERNALERROR Handle = 0x80040206 + EVENT_E_INVALID_PER_USER_SID Handle = 0x80040207 + EVENT_E_USER_EXCEPTION Handle = 0x80040208 + EVENT_E_TOO_MANY_METHODS Handle = 0x80040209 + EVENT_E_MISSING_EVENTCLASS Handle = 0x8004020A + EVENT_E_NOT_ALL_REMOVED Handle = 0x8004020B + EVENT_E_COMPLUS_NOT_INSTALLED Handle = 0x8004020C + EVENT_E_CANT_MODIFY_OR_DELETE_UNCONFIGURED_OBJECT Handle = 0x8004020D + EVENT_E_CANT_MODIFY_OR_DELETE_CONFIGURED_OBJECT Handle = 0x8004020E + EVENT_E_INVALID_EVENT_CLASS_PARTITION Handle = 0x8004020F + EVENT_E_PER_USER_SID_NOT_LOGGED_ON Handle = 0x80040210 + TPC_E_INVALID_PROPERTY Handle = 0x80040241 + TPC_E_NO_DEFAULT_TABLET Handle = 0x80040212 + TPC_E_UNKNOWN_PROPERTY Handle = 0x8004021B + TPC_E_INVALID_INPUT_RECT Handle = 0x80040219 + TPC_E_INVALID_STROKE Handle = 0x80040222 + TPC_E_INITIALIZE_FAIL Handle = 0x80040223 + TPC_E_NOT_RELEVANT Handle = 0x80040232 + TPC_E_INVALID_PACKET_DESCRIPTION Handle = 0x80040233 + TPC_E_RECOGNIZER_NOT_REGISTERED Handle = 0x80040235 + TPC_E_INVALID_RIGHTS Handle = 0x80040236 + TPC_E_OUT_OF_ORDER_CALL Handle = 0x80040237 + TPC_E_QUEUE_FULL Handle = 0x80040238 + TPC_E_INVALID_CONFIGURATION Handle = 0x80040239 + TPC_E_INVALID_DATA_FROM_RECOGNIZER Handle = 0x8004023A + TPC_S_TRUNCATED Handle = 0x00040252 + TPC_S_INTERRUPTED Handle = 0x00040253 + TPC_S_NO_DATA_TO_PROCESS Handle = 0x00040254 + XACT_E_FIRST syscall.Errno = 0x8004D000 + XACT_E_LAST syscall.Errno = 0x8004D02B + XACT_S_FIRST syscall.Errno = 0x0004D000 + XACT_S_LAST syscall.Errno = 0x0004D010 + XACT_E_ALREADYOTHERSINGLEPHASE Handle = 0x8004D000 + XACT_E_CANTRETAIN Handle = 0x8004D001 + XACT_E_COMMITFAILED Handle = 0x8004D002 + XACT_E_COMMITPREVENTED Handle = 0x8004D003 + XACT_E_HEURISTICABORT Handle = 0x8004D004 + XACT_E_HEURISTICCOMMIT Handle = 0x8004D005 + XACT_E_HEURISTICDAMAGE Handle = 0x8004D006 + XACT_E_HEURISTICDANGER Handle = 0x8004D007 + XACT_E_ISOLATIONLEVEL Handle = 0x8004D008 + XACT_E_NOASYNC Handle = 0x8004D009 + XACT_E_NOENLIST Handle = 0x8004D00A + XACT_E_NOISORETAIN Handle = 0x8004D00B + XACT_E_NORESOURCE Handle = 0x8004D00C + XACT_E_NOTCURRENT Handle = 0x8004D00D + XACT_E_NOTRANSACTION Handle = 0x8004D00E + XACT_E_NOTSUPPORTED Handle = 0x8004D00F + XACT_E_UNKNOWNRMGRID Handle = 0x8004D010 + XACT_E_WRONGSTATE Handle = 0x8004D011 + XACT_E_WRONGUOW Handle = 0x8004D012 + XACT_E_XTIONEXISTS Handle = 0x8004D013 + XACT_E_NOIMPORTOBJECT Handle = 0x8004D014 + XACT_E_INVALIDCOOKIE Handle = 0x8004D015 + XACT_E_INDOUBT Handle = 0x8004D016 + XACT_E_NOTIMEOUT Handle = 0x8004D017 + XACT_E_ALREADYINPROGRESS Handle = 0x8004D018 + XACT_E_ABORTED Handle = 0x8004D019 + XACT_E_LOGFULL Handle = 0x8004D01A + XACT_E_TMNOTAVAILABLE Handle = 0x8004D01B + XACT_E_CONNECTION_DOWN Handle = 0x8004D01C + XACT_E_CONNECTION_DENIED Handle = 0x8004D01D + XACT_E_REENLISTTIMEOUT Handle = 0x8004D01E + XACT_E_TIP_CONNECT_FAILED Handle = 0x8004D01F + XACT_E_TIP_PROTOCOL_ERROR Handle = 0x8004D020 + XACT_E_TIP_PULL_FAILED Handle = 0x8004D021 + XACT_E_DEST_TMNOTAVAILABLE Handle = 0x8004D022 + XACT_E_TIP_DISABLED Handle = 0x8004D023 + XACT_E_NETWORK_TX_DISABLED Handle = 0x8004D024 + XACT_E_PARTNER_NETWORK_TX_DISABLED Handle = 0x8004D025 + XACT_E_XA_TX_DISABLED Handle = 0x8004D026 + XACT_E_UNABLE_TO_READ_DTC_CONFIG Handle = 0x8004D027 + XACT_E_UNABLE_TO_LOAD_DTC_PROXY Handle = 0x8004D028 + XACT_E_ABORTING Handle = 0x8004D029 + XACT_E_PUSH_COMM_FAILURE Handle = 0x8004D02A + XACT_E_PULL_COMM_FAILURE Handle = 0x8004D02B + XACT_E_LU_TX_DISABLED Handle = 0x8004D02C + XACT_E_CLERKNOTFOUND Handle = 0x8004D080 + XACT_E_CLERKEXISTS Handle = 0x8004D081 + XACT_E_RECOVERYINPROGRESS Handle = 0x8004D082 + XACT_E_TRANSACTIONCLOSED Handle = 0x8004D083 + XACT_E_INVALIDLSN Handle = 0x8004D084 + XACT_E_REPLAYREQUEST Handle = 0x8004D085 + XACT_S_ASYNC Handle = 0x0004D000 + XACT_S_DEFECT Handle = 0x0004D001 + XACT_S_READONLY Handle = 0x0004D002 + XACT_S_SOMENORETAIN Handle = 0x0004D003 + XACT_S_OKINFORM Handle = 0x0004D004 + XACT_S_MADECHANGESCONTENT Handle = 0x0004D005 + XACT_S_MADECHANGESINFORM Handle = 0x0004D006 + XACT_S_ALLNORETAIN Handle = 0x0004D007 + XACT_S_ABORTING Handle = 0x0004D008 + XACT_S_SINGLEPHASE Handle = 0x0004D009 + XACT_S_LOCALLY_OK Handle = 0x0004D00A + XACT_S_LASTRESOURCEMANAGER Handle = 0x0004D010 + CONTEXT_E_FIRST syscall.Errno = 0x8004E000 + CONTEXT_E_LAST syscall.Errno = 0x8004E02F + CONTEXT_S_FIRST syscall.Errno = 0x0004E000 + CONTEXT_S_LAST syscall.Errno = 0x0004E02F + CONTEXT_E_ABORTED Handle = 0x8004E002 + CONTEXT_E_ABORTING Handle = 0x8004E003 + CONTEXT_E_NOCONTEXT Handle = 0x8004E004 + CONTEXT_E_WOULD_DEADLOCK Handle = 0x8004E005 + CONTEXT_E_SYNCH_TIMEOUT Handle = 0x8004E006 + CONTEXT_E_OLDREF Handle = 0x8004E007 + CONTEXT_E_ROLENOTFOUND Handle = 0x8004E00C + CONTEXT_E_TMNOTAVAILABLE Handle = 0x8004E00F + CO_E_ACTIVATIONFAILED Handle = 0x8004E021 + CO_E_ACTIVATIONFAILED_EVENTLOGGED Handle = 0x8004E022 + CO_E_ACTIVATIONFAILED_CATALOGERROR Handle = 0x8004E023 + CO_E_ACTIVATIONFAILED_TIMEOUT Handle = 0x8004E024 + CO_E_INITIALIZATIONFAILED Handle = 0x8004E025 + CONTEXT_E_NOJIT Handle = 0x8004E026 + CONTEXT_E_NOTRANSACTION Handle = 0x8004E027 + CO_E_THREADINGMODEL_CHANGED Handle = 0x8004E028 + CO_E_NOIISINTRINSICS Handle = 0x8004E029 + CO_E_NOCOOKIES Handle = 0x8004E02A + CO_E_DBERROR Handle = 0x8004E02B + CO_E_NOTPOOLED Handle = 0x8004E02C + CO_E_NOTCONSTRUCTED Handle = 0x8004E02D + CO_E_NOSYNCHRONIZATION Handle = 0x8004E02E + CO_E_ISOLEVELMISMATCH Handle = 0x8004E02F + CO_E_CALL_OUT_OF_TX_SCOPE_NOT_ALLOWED Handle = 0x8004E030 + CO_E_EXIT_TRANSACTION_SCOPE_NOT_CALLED Handle = 0x8004E031 + OLE_S_USEREG Handle = 0x00040000 + OLE_S_STATIC Handle = 0x00040001 + OLE_S_MAC_CLIPFORMAT Handle = 0x00040002 + DRAGDROP_S_DROP Handle = 0x00040100 + DRAGDROP_S_CANCEL Handle = 0x00040101 + DRAGDROP_S_USEDEFAULTCURSORS Handle = 0x00040102 + DATA_S_SAMEFORMATETC Handle = 0x00040130 + VIEW_S_ALREADY_FROZEN Handle = 0x00040140 + CACHE_S_FORMATETC_NOTSUPPORTED Handle = 0x00040170 + CACHE_S_SAMECACHE Handle = 0x00040171 + CACHE_S_SOMECACHES_NOTUPDATED Handle = 0x00040172 + OLEOBJ_S_INVALIDVERB Handle = 0x00040180 + OLEOBJ_S_CANNOT_DOVERB_NOW Handle = 0x00040181 + OLEOBJ_S_INVALIDHWND Handle = 0x00040182 + INPLACE_S_TRUNCATED Handle = 0x000401A0 + CONVERT10_S_NO_PRESENTATION Handle = 0x000401C0 + MK_S_REDUCED_TO_SELF Handle = 0x000401E2 + MK_S_ME Handle = 0x000401E4 + MK_S_HIM Handle = 0x000401E5 + MK_S_US Handle = 0x000401E6 + MK_S_MONIKERALREADYREGISTERED Handle = 0x000401E7 + SCHED_S_TASK_READY Handle = 0x00041300 + SCHED_S_TASK_RUNNING Handle = 0x00041301 + SCHED_S_TASK_DISABLED Handle = 0x00041302 + SCHED_S_TASK_HAS_NOT_RUN Handle = 0x00041303 + SCHED_S_TASK_NO_MORE_RUNS Handle = 0x00041304 + SCHED_S_TASK_NOT_SCHEDULED Handle = 0x00041305 + SCHED_S_TASK_TERMINATED Handle = 0x00041306 + SCHED_S_TASK_NO_VALID_TRIGGERS Handle = 0x00041307 + SCHED_S_EVENT_TRIGGER Handle = 0x00041308 + SCHED_E_TRIGGER_NOT_FOUND Handle = 0x80041309 + SCHED_E_TASK_NOT_READY Handle = 0x8004130A + SCHED_E_TASK_NOT_RUNNING Handle = 0x8004130B + SCHED_E_SERVICE_NOT_INSTALLED Handle = 0x8004130C + SCHED_E_CANNOT_OPEN_TASK Handle = 0x8004130D + SCHED_E_INVALID_TASK Handle = 0x8004130E + SCHED_E_ACCOUNT_INFORMATION_NOT_SET Handle = 0x8004130F + SCHED_E_ACCOUNT_NAME_NOT_FOUND Handle = 0x80041310 + SCHED_E_ACCOUNT_DBASE_CORRUPT Handle = 0x80041311 + SCHED_E_NO_SECURITY_SERVICES Handle = 0x80041312 + SCHED_E_UNKNOWN_OBJECT_VERSION Handle = 0x80041313 + SCHED_E_UNSUPPORTED_ACCOUNT_OPTION Handle = 0x80041314 + SCHED_E_SERVICE_NOT_RUNNING Handle = 0x80041315 + SCHED_E_UNEXPECTEDNODE Handle = 0x80041316 + SCHED_E_NAMESPACE Handle = 0x80041317 + SCHED_E_INVALIDVALUE Handle = 0x80041318 + SCHED_E_MISSINGNODE Handle = 0x80041319 + SCHED_E_MALFORMEDXML Handle = 0x8004131A + SCHED_S_SOME_TRIGGERS_FAILED Handle = 0x0004131B + SCHED_S_BATCH_LOGON_PROBLEM Handle = 0x0004131C + SCHED_E_TOO_MANY_NODES Handle = 0x8004131D + SCHED_E_PAST_END_BOUNDARY Handle = 0x8004131E + SCHED_E_ALREADY_RUNNING Handle = 0x8004131F + SCHED_E_USER_NOT_LOGGED_ON Handle = 0x80041320 + SCHED_E_INVALID_TASK_HASH Handle = 0x80041321 + SCHED_E_SERVICE_NOT_AVAILABLE Handle = 0x80041322 + SCHED_E_SERVICE_TOO_BUSY Handle = 0x80041323 + SCHED_E_TASK_ATTEMPTED Handle = 0x80041324 + SCHED_S_TASK_QUEUED Handle = 0x00041325 + SCHED_E_TASK_DISABLED Handle = 0x80041326 + SCHED_E_TASK_NOT_V1_COMPAT Handle = 0x80041327 + SCHED_E_START_ON_DEMAND Handle = 0x80041328 + SCHED_E_TASK_NOT_UBPM_COMPAT Handle = 0x80041329 + SCHED_E_DEPRECATED_FEATURE_USED Handle = 0x80041330 + CO_E_CLASS_CREATE_FAILED Handle = 0x80080001 + CO_E_SCM_ERROR Handle = 0x80080002 + CO_E_SCM_RPC_FAILURE Handle = 0x80080003 + CO_E_BAD_PATH Handle = 0x80080004 + CO_E_SERVER_EXEC_FAILURE Handle = 0x80080005 + CO_E_OBJSRV_RPC_FAILURE Handle = 0x80080006 + MK_E_NO_NORMALIZED Handle = 0x80080007 + CO_E_SERVER_STOPPING Handle = 0x80080008 + MEM_E_INVALID_ROOT Handle = 0x80080009 + MEM_E_INVALID_LINK Handle = 0x80080010 + MEM_E_INVALID_SIZE Handle = 0x80080011 + CO_S_NOTALLINTERFACES Handle = 0x00080012 + CO_S_MACHINENAMENOTFOUND Handle = 0x00080013 + CO_E_MISSING_DISPLAYNAME Handle = 0x80080015 + CO_E_RUNAS_VALUE_MUST_BE_AAA Handle = 0x80080016 + CO_E_ELEVATION_DISABLED Handle = 0x80080017 + APPX_E_PACKAGING_INTERNAL Handle = 0x80080200 + APPX_E_INTERLEAVING_NOT_ALLOWED Handle = 0x80080201 + APPX_E_RELATIONSHIPS_NOT_ALLOWED Handle = 0x80080202 + APPX_E_MISSING_REQUIRED_FILE Handle = 0x80080203 + APPX_E_INVALID_MANIFEST Handle = 0x80080204 + APPX_E_INVALID_BLOCKMAP Handle = 0x80080205 + APPX_E_CORRUPT_CONTENT Handle = 0x80080206 + APPX_E_BLOCK_HASH_INVALID Handle = 0x80080207 + APPX_E_REQUESTED_RANGE_TOO_LARGE Handle = 0x80080208 + APPX_E_INVALID_SIP_CLIENT_DATA Handle = 0x80080209 + APPX_E_INVALID_KEY_INFO Handle = 0x8008020A + APPX_E_INVALID_CONTENTGROUPMAP Handle = 0x8008020B + APPX_E_INVALID_APPINSTALLER Handle = 0x8008020C + APPX_E_DELTA_BASELINE_VERSION_MISMATCH Handle = 0x8008020D + APPX_E_DELTA_PACKAGE_MISSING_FILE Handle = 0x8008020E + APPX_E_INVALID_DELTA_PACKAGE Handle = 0x8008020F + APPX_E_DELTA_APPENDED_PACKAGE_NOT_ALLOWED Handle = 0x80080210 + APPX_E_INVALID_PACKAGING_LAYOUT Handle = 0x80080211 + APPX_E_INVALID_PACKAGESIGNCONFIG Handle = 0x80080212 + APPX_E_RESOURCESPRI_NOT_ALLOWED Handle = 0x80080213 + APPX_E_FILE_COMPRESSION_MISMATCH Handle = 0x80080214 + APPX_E_INVALID_PAYLOAD_PACKAGE_EXTENSION Handle = 0x80080215 + APPX_E_INVALID_ENCRYPTION_EXCLUSION_FILE_LIST Handle = 0x80080216 + BT_E_SPURIOUS_ACTIVATION Handle = 0x80080300 + DISP_E_UNKNOWNINTERFACE Handle = 0x80020001 + DISP_E_MEMBERNOTFOUND Handle = 0x80020003 + DISP_E_PARAMNOTFOUND Handle = 0x80020004 + DISP_E_TYPEMISMATCH Handle = 0x80020005 + DISP_E_UNKNOWNNAME Handle = 0x80020006 + DISP_E_NONAMEDARGS Handle = 0x80020007 + DISP_E_BADVARTYPE Handle = 0x80020008 + DISP_E_EXCEPTION Handle = 0x80020009 + DISP_E_OVERFLOW Handle = 0x8002000A + DISP_E_BADINDEX Handle = 0x8002000B + DISP_E_UNKNOWNLCID Handle = 0x8002000C + DISP_E_ARRAYISLOCKED Handle = 0x8002000D + DISP_E_BADPARAMCOUNT Handle = 0x8002000E + DISP_E_PARAMNOTOPTIONAL Handle = 0x8002000F + DISP_E_BADCALLEE Handle = 0x80020010 + DISP_E_NOTACOLLECTION Handle = 0x80020011 + DISP_E_DIVBYZERO Handle = 0x80020012 + DISP_E_BUFFERTOOSMALL Handle = 0x80020013 + TYPE_E_BUFFERTOOSMALL Handle = 0x80028016 + TYPE_E_FIELDNOTFOUND Handle = 0x80028017 + TYPE_E_INVDATAREAD Handle = 0x80028018 + TYPE_E_UNSUPFORMAT Handle = 0x80028019 + TYPE_E_REGISTRYACCESS Handle = 0x8002801C + TYPE_E_LIBNOTREGISTERED Handle = 0x8002801D + TYPE_E_UNDEFINEDTYPE Handle = 0x80028027 + TYPE_E_QUALIFIEDNAMEDISALLOWED Handle = 0x80028028 + TYPE_E_INVALIDSTATE Handle = 0x80028029 + TYPE_E_WRONGTYPEKIND Handle = 0x8002802A + TYPE_E_ELEMENTNOTFOUND Handle = 0x8002802B + TYPE_E_AMBIGUOUSNAME Handle = 0x8002802C + TYPE_E_NAMECONFLICT Handle = 0x8002802D + TYPE_E_UNKNOWNLCID Handle = 0x8002802E + TYPE_E_DLLFUNCTIONNOTFOUND Handle = 0x8002802F + TYPE_E_BADMODULEKIND Handle = 0x800288BD + TYPE_E_SIZETOOBIG Handle = 0x800288C5 + TYPE_E_DUPLICATEID Handle = 0x800288C6 + TYPE_E_INVALIDID Handle = 0x800288CF + TYPE_E_TYPEMISMATCH Handle = 0x80028CA0 + TYPE_E_OUTOFBOUNDS Handle = 0x80028CA1 + TYPE_E_IOERROR Handle = 0x80028CA2 + TYPE_E_CANTCREATETMPFILE Handle = 0x80028CA3 + TYPE_E_CANTLOADLIBRARY Handle = 0x80029C4A + TYPE_E_INCONSISTENTPROPFUNCS Handle = 0x80029C83 + TYPE_E_CIRCULARTYPE Handle = 0x80029C84 + STG_E_INVALIDFUNCTION Handle = 0x80030001 + STG_E_FILENOTFOUND Handle = 0x80030002 + STG_E_PATHNOTFOUND Handle = 0x80030003 + STG_E_TOOMANYOPENFILES Handle = 0x80030004 + STG_E_ACCESSDENIED Handle = 0x80030005 + STG_E_INVALIDHANDLE Handle = 0x80030006 + STG_E_INSUFFICIENTMEMORY Handle = 0x80030008 + STG_E_INVALIDPOINTER Handle = 0x80030009 + STG_E_NOMOREFILES Handle = 0x80030012 + STG_E_DISKISWRITEPROTECTED Handle = 0x80030013 + STG_E_SEEKERROR Handle = 0x80030019 + STG_E_WRITEFAULT Handle = 0x8003001D + STG_E_READFAULT Handle = 0x8003001E + STG_E_SHAREVIOLATION Handle = 0x80030020 + STG_E_LOCKVIOLATION Handle = 0x80030021 + STG_E_FILEALREADYEXISTS Handle = 0x80030050 + STG_E_INVALIDPARAMETER Handle = 0x80030057 + STG_E_MEDIUMFULL Handle = 0x80030070 + STG_E_PROPSETMISMATCHED Handle = 0x800300F0 + STG_E_ABNORMALAPIEXIT Handle = 0x800300FA + STG_E_INVALIDHEADER Handle = 0x800300FB + STG_E_INVALIDNAME Handle = 0x800300FC + STG_E_UNKNOWN Handle = 0x800300FD + STG_E_UNIMPLEMENTEDFUNCTION Handle = 0x800300FE + STG_E_INVALIDFLAG Handle = 0x800300FF + STG_E_INUSE Handle = 0x80030100 + STG_E_NOTCURRENT Handle = 0x80030101 + STG_E_REVERTED Handle = 0x80030102 + STG_E_CANTSAVE Handle = 0x80030103 + STG_E_OLDFORMAT Handle = 0x80030104 + STG_E_OLDDLL Handle = 0x80030105 + STG_E_SHAREREQUIRED Handle = 0x80030106 + STG_E_NOTFILEBASEDSTORAGE Handle = 0x80030107 + STG_E_EXTANTMARSHALLINGS Handle = 0x80030108 + STG_E_DOCFILECORRUPT Handle = 0x80030109 + STG_E_BADBASEADDRESS Handle = 0x80030110 + STG_E_DOCFILETOOLARGE Handle = 0x80030111 + STG_E_NOTSIMPLEFORMAT Handle = 0x80030112 + STG_E_INCOMPLETE Handle = 0x80030201 + STG_E_TERMINATED Handle = 0x80030202 + STG_S_CONVERTED Handle = 0x00030200 + STG_S_BLOCK Handle = 0x00030201 + STG_S_RETRYNOW Handle = 0x00030202 + STG_S_MONITORING Handle = 0x00030203 + STG_S_MULTIPLEOPENS Handle = 0x00030204 + STG_S_CONSOLIDATIONFAILED Handle = 0x00030205 + STG_S_CANNOTCONSOLIDATE Handle = 0x00030206 + STG_S_POWER_CYCLE_REQUIRED Handle = 0x00030207 + STG_E_FIRMWARE_SLOT_INVALID Handle = 0x80030208 + STG_E_FIRMWARE_IMAGE_INVALID Handle = 0x80030209 + STG_E_DEVICE_UNRESPONSIVE Handle = 0x8003020A + STG_E_STATUS_COPY_PROTECTION_FAILURE Handle = 0x80030305 + STG_E_CSS_AUTHENTICATION_FAILURE Handle = 0x80030306 + STG_E_CSS_KEY_NOT_PRESENT Handle = 0x80030307 + STG_E_CSS_KEY_NOT_ESTABLISHED Handle = 0x80030308 + STG_E_CSS_SCRAMBLED_SECTOR Handle = 0x80030309 + STG_E_CSS_REGION_MISMATCH Handle = 0x8003030A + STG_E_RESETS_EXHAUSTED Handle = 0x8003030B + RPC_E_CALL_REJECTED Handle = 0x80010001 + RPC_E_CALL_CANCELED Handle = 0x80010002 + RPC_E_CANTPOST_INSENDCALL Handle = 0x80010003 + RPC_E_CANTCALLOUT_INASYNCCALL Handle = 0x80010004 + RPC_E_CANTCALLOUT_INEXTERNALCALL Handle = 0x80010005 + RPC_E_CONNECTION_TERMINATED Handle = 0x80010006 + RPC_E_SERVER_DIED Handle = 0x80010007 + RPC_E_CLIENT_DIED Handle = 0x80010008 + RPC_E_INVALID_DATAPACKET Handle = 0x80010009 + RPC_E_CANTTRANSMIT_CALL Handle = 0x8001000A + RPC_E_CLIENT_CANTMARSHAL_DATA Handle = 0x8001000B + RPC_E_CLIENT_CANTUNMARSHAL_DATA Handle = 0x8001000C + RPC_E_SERVER_CANTMARSHAL_DATA Handle = 0x8001000D + RPC_E_SERVER_CANTUNMARSHAL_DATA Handle = 0x8001000E + RPC_E_INVALID_DATA Handle = 0x8001000F + RPC_E_INVALID_PARAMETER Handle = 0x80010010 + RPC_E_CANTCALLOUT_AGAIN Handle = 0x80010011 + RPC_E_SERVER_DIED_DNE Handle = 0x80010012 + RPC_E_SYS_CALL_FAILED Handle = 0x80010100 + RPC_E_OUT_OF_RESOURCES Handle = 0x80010101 + RPC_E_ATTEMPTED_MULTITHREAD Handle = 0x80010102 + RPC_E_NOT_REGISTERED Handle = 0x80010103 + RPC_E_FAULT Handle = 0x80010104 + RPC_E_SERVERFAULT Handle = 0x80010105 + RPC_E_CHANGED_MODE Handle = 0x80010106 + RPC_E_INVALIDMETHOD Handle = 0x80010107 + RPC_E_DISCONNECTED Handle = 0x80010108 + RPC_E_RETRY Handle = 0x80010109 + RPC_E_SERVERCALL_RETRYLATER Handle = 0x8001010A + RPC_E_SERVERCALL_REJECTED Handle = 0x8001010B + RPC_E_INVALID_CALLDATA Handle = 0x8001010C + RPC_E_CANTCALLOUT_ININPUTSYNCCALL Handle = 0x8001010D + RPC_E_WRONG_THREAD Handle = 0x8001010E + RPC_E_THREAD_NOT_INIT Handle = 0x8001010F + RPC_E_VERSION_MISMATCH Handle = 0x80010110 + RPC_E_INVALID_HEADER Handle = 0x80010111 + RPC_E_INVALID_EXTENSION Handle = 0x80010112 + RPC_E_INVALID_IPID Handle = 0x80010113 + RPC_E_INVALID_OBJECT Handle = 0x80010114 + RPC_S_CALLPENDING Handle = 0x80010115 + RPC_S_WAITONTIMER Handle = 0x80010116 + RPC_E_CALL_COMPLETE Handle = 0x80010117 + RPC_E_UNSECURE_CALL Handle = 0x80010118 + RPC_E_TOO_LATE Handle = 0x80010119 + RPC_E_NO_GOOD_SECURITY_PACKAGES Handle = 0x8001011A + RPC_E_ACCESS_DENIED Handle = 0x8001011B + RPC_E_REMOTE_DISABLED Handle = 0x8001011C + RPC_E_INVALID_OBJREF Handle = 0x8001011D + RPC_E_NO_CONTEXT Handle = 0x8001011E + RPC_E_TIMEOUT Handle = 0x8001011F + RPC_E_NO_SYNC Handle = 0x80010120 + RPC_E_FULLSIC_REQUIRED Handle = 0x80010121 + RPC_E_INVALID_STD_NAME Handle = 0x80010122 + CO_E_FAILEDTOIMPERSONATE Handle = 0x80010123 + CO_E_FAILEDTOGETSECCTX Handle = 0x80010124 + CO_E_FAILEDTOOPENTHREADTOKEN Handle = 0x80010125 + CO_E_FAILEDTOGETTOKENINFO Handle = 0x80010126 + CO_E_TRUSTEEDOESNTMATCHCLIENT Handle = 0x80010127 + CO_E_FAILEDTOQUERYCLIENTBLANKET Handle = 0x80010128 + CO_E_FAILEDTOSETDACL Handle = 0x80010129 + CO_E_ACCESSCHECKFAILED Handle = 0x8001012A + CO_E_NETACCESSAPIFAILED Handle = 0x8001012B + CO_E_WRONGTRUSTEENAMESYNTAX Handle = 0x8001012C + CO_E_INVALIDSID Handle = 0x8001012D + CO_E_CONVERSIONFAILED Handle = 0x8001012E + CO_E_NOMATCHINGSIDFOUND Handle = 0x8001012F + CO_E_LOOKUPACCSIDFAILED Handle = 0x80010130 + CO_E_NOMATCHINGNAMEFOUND Handle = 0x80010131 + CO_E_LOOKUPACCNAMEFAILED Handle = 0x80010132 + CO_E_SETSERLHNDLFAILED Handle = 0x80010133 + CO_E_FAILEDTOGETWINDIR Handle = 0x80010134 + CO_E_PATHTOOLONG Handle = 0x80010135 + CO_E_FAILEDTOGENUUID Handle = 0x80010136 + CO_E_FAILEDTOCREATEFILE Handle = 0x80010137 + CO_E_FAILEDTOCLOSEHANDLE Handle = 0x80010138 + CO_E_EXCEEDSYSACLLIMIT Handle = 0x80010139 + CO_E_ACESINWRONGORDER Handle = 0x8001013A + CO_E_INCOMPATIBLESTREAMVERSION Handle = 0x8001013B + CO_E_FAILEDTOOPENPROCESSTOKEN Handle = 0x8001013C + CO_E_DECODEFAILED Handle = 0x8001013D + CO_E_ACNOTINITIALIZED Handle = 0x8001013F + CO_E_CANCEL_DISABLED Handle = 0x80010140 + RPC_E_UNEXPECTED Handle = 0x8001FFFF + ERROR_AUDITING_DISABLED Handle = 0xC0090001 + ERROR_ALL_SIDS_FILTERED Handle = 0xC0090002 + ERROR_BIZRULES_NOT_ENABLED Handle = 0xC0090003 + NTE_BAD_UID Handle = 0x80090001 + NTE_BAD_HASH Handle = 0x80090002 + NTE_BAD_KEY Handle = 0x80090003 + NTE_BAD_LEN Handle = 0x80090004 + NTE_BAD_DATA Handle = 0x80090005 + NTE_BAD_SIGNATURE Handle = 0x80090006 + NTE_BAD_VER Handle = 0x80090007 + NTE_BAD_ALGID Handle = 0x80090008 + NTE_BAD_FLAGS Handle = 0x80090009 + NTE_BAD_TYPE Handle = 0x8009000A + NTE_BAD_KEY_STATE Handle = 0x8009000B + NTE_BAD_HASH_STATE Handle = 0x8009000C + NTE_NO_KEY Handle = 0x8009000D + NTE_NO_MEMORY Handle = 0x8009000E + NTE_EXISTS Handle = 0x8009000F + NTE_PERM Handle = 0x80090010 + NTE_NOT_FOUND Handle = 0x80090011 + NTE_DOUBLE_ENCRYPT Handle = 0x80090012 + NTE_BAD_PROVIDER Handle = 0x80090013 + NTE_BAD_PROV_TYPE Handle = 0x80090014 + NTE_BAD_PUBLIC_KEY Handle = 0x80090015 + NTE_BAD_KEYSET Handle = 0x80090016 + NTE_PROV_TYPE_NOT_DEF Handle = 0x80090017 + NTE_PROV_TYPE_ENTRY_BAD Handle = 0x80090018 + NTE_KEYSET_NOT_DEF Handle = 0x80090019 + NTE_KEYSET_ENTRY_BAD Handle = 0x8009001A + NTE_PROV_TYPE_NO_MATCH Handle = 0x8009001B + NTE_SIGNATURE_FILE_BAD Handle = 0x8009001C + NTE_PROVIDER_DLL_FAIL Handle = 0x8009001D + NTE_PROV_DLL_NOT_FOUND Handle = 0x8009001E + NTE_BAD_KEYSET_PARAM Handle = 0x8009001F + NTE_FAIL Handle = 0x80090020 + NTE_SYS_ERR Handle = 0x80090021 + NTE_SILENT_CONTEXT Handle = 0x80090022 + NTE_TOKEN_KEYSET_STORAGE_FULL Handle = 0x80090023 + NTE_TEMPORARY_PROFILE Handle = 0x80090024 + NTE_FIXEDPARAMETER Handle = 0x80090025 + NTE_INVALID_HANDLE Handle = 0x80090026 + NTE_INVALID_PARAMETER Handle = 0x80090027 + NTE_BUFFER_TOO_SMALL Handle = 0x80090028 + NTE_NOT_SUPPORTED Handle = 0x80090029 + NTE_NO_MORE_ITEMS Handle = 0x8009002A + NTE_BUFFERS_OVERLAP Handle = 0x8009002B + NTE_DECRYPTION_FAILURE Handle = 0x8009002C + NTE_INTERNAL_ERROR Handle = 0x8009002D + NTE_UI_REQUIRED Handle = 0x8009002E + NTE_HMAC_NOT_SUPPORTED Handle = 0x8009002F + NTE_DEVICE_NOT_READY Handle = 0x80090030 + NTE_AUTHENTICATION_IGNORED Handle = 0x80090031 + NTE_VALIDATION_FAILED Handle = 0x80090032 + NTE_INCORRECT_PASSWORD Handle = 0x80090033 + NTE_ENCRYPTION_FAILURE Handle = 0x80090034 + NTE_DEVICE_NOT_FOUND Handle = 0x80090035 + NTE_USER_CANCELLED Handle = 0x80090036 + NTE_PASSWORD_CHANGE_REQUIRED Handle = 0x80090037 + NTE_NOT_ACTIVE_CONSOLE Handle = 0x80090038 + SEC_E_INSUFFICIENT_MEMORY Handle = 0x80090300 + SEC_E_INVALID_HANDLE Handle = 0x80090301 + SEC_E_UNSUPPORTED_FUNCTION Handle = 0x80090302 + SEC_E_TARGET_UNKNOWN Handle = 0x80090303 + SEC_E_INTERNAL_ERROR Handle = 0x80090304 + SEC_E_SECPKG_NOT_FOUND Handle = 0x80090305 + SEC_E_NOT_OWNER Handle = 0x80090306 + SEC_E_CANNOT_INSTALL Handle = 0x80090307 + SEC_E_INVALID_TOKEN Handle = 0x80090308 + SEC_E_CANNOT_PACK Handle = 0x80090309 + SEC_E_QOP_NOT_SUPPORTED Handle = 0x8009030A + SEC_E_NO_IMPERSONATION Handle = 0x8009030B + SEC_E_LOGON_DENIED Handle = 0x8009030C + SEC_E_UNKNOWN_CREDENTIALS Handle = 0x8009030D + SEC_E_NO_CREDENTIALS Handle = 0x8009030E + SEC_E_MESSAGE_ALTERED Handle = 0x8009030F + SEC_E_OUT_OF_SEQUENCE Handle = 0x80090310 + SEC_E_NO_AUTHENTICATING_AUTHORITY Handle = 0x80090311 + SEC_I_CONTINUE_NEEDED Handle = 0x00090312 + SEC_I_COMPLETE_NEEDED Handle = 0x00090313 + SEC_I_COMPLETE_AND_CONTINUE Handle = 0x00090314 + SEC_I_LOCAL_LOGON Handle = 0x00090315 + SEC_I_GENERIC_EXTENSION_RECEIVED Handle = 0x00090316 + SEC_E_BAD_PKGID Handle = 0x80090316 + SEC_E_CONTEXT_EXPIRED Handle = 0x80090317 + SEC_I_CONTEXT_EXPIRED Handle = 0x00090317 + SEC_E_INCOMPLETE_MESSAGE Handle = 0x80090318 + SEC_E_INCOMPLETE_CREDENTIALS Handle = 0x80090320 + SEC_E_BUFFER_TOO_SMALL Handle = 0x80090321 + SEC_I_INCOMPLETE_CREDENTIALS Handle = 0x00090320 + SEC_I_RENEGOTIATE Handle = 0x00090321 + SEC_E_WRONG_PRINCIPAL Handle = 0x80090322 + SEC_I_NO_LSA_CONTEXT Handle = 0x00090323 + SEC_E_TIME_SKEW Handle = 0x80090324 + SEC_E_UNTRUSTED_ROOT Handle = 0x80090325 + SEC_E_ILLEGAL_MESSAGE Handle = 0x80090326 + SEC_E_CERT_UNKNOWN Handle = 0x80090327 + SEC_E_CERT_EXPIRED Handle = 0x80090328 + SEC_E_ENCRYPT_FAILURE Handle = 0x80090329 + SEC_E_DECRYPT_FAILURE Handle = 0x80090330 + SEC_E_ALGORITHM_MISMATCH Handle = 0x80090331 + SEC_E_SECURITY_QOS_FAILED Handle = 0x80090332 + SEC_E_UNFINISHED_CONTEXT_DELETED Handle = 0x80090333 + SEC_E_NO_TGT_REPLY Handle = 0x80090334 + SEC_E_NO_IP_ADDRESSES Handle = 0x80090335 + SEC_E_WRONG_CREDENTIAL_HANDLE Handle = 0x80090336 + SEC_E_CRYPTO_SYSTEM_INVALID Handle = 0x80090337 + SEC_E_MAX_REFERRALS_EXCEEDED Handle = 0x80090338 + SEC_E_MUST_BE_KDC Handle = 0x80090339 + SEC_E_STRONG_CRYPTO_NOT_SUPPORTED Handle = 0x8009033A + SEC_E_TOO_MANY_PRINCIPALS Handle = 0x8009033B + SEC_E_NO_PA_DATA Handle = 0x8009033C + SEC_E_PKINIT_NAME_MISMATCH Handle = 0x8009033D + SEC_E_SMARTCARD_LOGON_REQUIRED Handle = 0x8009033E + SEC_E_SHUTDOWN_IN_PROGRESS Handle = 0x8009033F + SEC_E_KDC_INVALID_REQUEST Handle = 0x80090340 + SEC_E_KDC_UNABLE_TO_REFER Handle = 0x80090341 + SEC_E_KDC_UNKNOWN_ETYPE Handle = 0x80090342 + SEC_E_UNSUPPORTED_PREAUTH Handle = 0x80090343 + SEC_E_DELEGATION_REQUIRED Handle = 0x80090345 + SEC_E_BAD_BINDINGS Handle = 0x80090346 + SEC_E_MULTIPLE_ACCOUNTS Handle = 0x80090347 + SEC_E_NO_KERB_KEY Handle = 0x80090348 + SEC_E_CERT_WRONG_USAGE Handle = 0x80090349 + SEC_E_DOWNGRADE_DETECTED Handle = 0x80090350 + SEC_E_SMARTCARD_CERT_REVOKED Handle = 0x80090351 + SEC_E_ISSUING_CA_UNTRUSTED Handle = 0x80090352 + SEC_E_REVOCATION_OFFLINE_C Handle = 0x80090353 + SEC_E_PKINIT_CLIENT_FAILURE Handle = 0x80090354 + SEC_E_SMARTCARD_CERT_EXPIRED Handle = 0x80090355 + SEC_E_NO_S4U_PROT_SUPPORT Handle = 0x80090356 + SEC_E_CROSSREALM_DELEGATION_FAILURE Handle = 0x80090357 + SEC_E_REVOCATION_OFFLINE_KDC Handle = 0x80090358 + SEC_E_ISSUING_CA_UNTRUSTED_KDC Handle = 0x80090359 + SEC_E_KDC_CERT_EXPIRED Handle = 0x8009035A + SEC_E_KDC_CERT_REVOKED Handle = 0x8009035B + SEC_I_SIGNATURE_NEEDED Handle = 0x0009035C + SEC_E_INVALID_PARAMETER Handle = 0x8009035D + SEC_E_DELEGATION_POLICY Handle = 0x8009035E + SEC_E_POLICY_NLTM_ONLY Handle = 0x8009035F + SEC_I_NO_RENEGOTIATION Handle = 0x00090360 + SEC_E_NO_CONTEXT Handle = 0x80090361 + SEC_E_PKU2U_CERT_FAILURE Handle = 0x80090362 + SEC_E_MUTUAL_AUTH_FAILED Handle = 0x80090363 + SEC_I_MESSAGE_FRAGMENT Handle = 0x00090364 + SEC_E_ONLY_HTTPS_ALLOWED Handle = 0x80090365 + SEC_I_CONTINUE_NEEDED_MESSAGE_OK Handle = 0x00090366 + SEC_E_APPLICATION_PROTOCOL_MISMATCH Handle = 0x80090367 + SEC_I_ASYNC_CALL_PENDING Handle = 0x00090368 + SEC_E_INVALID_UPN_NAME Handle = 0x80090369 + SEC_E_EXT_BUFFER_TOO_SMALL Handle = 0x8009036A + SEC_E_INSUFFICIENT_BUFFERS Handle = 0x8009036B + SEC_E_NO_SPM = SEC_E_INTERNAL_ERROR + SEC_E_NOT_SUPPORTED = SEC_E_UNSUPPORTED_FUNCTION + CRYPT_E_MSG_ERROR Handle = 0x80091001 + CRYPT_E_UNKNOWN_ALGO Handle = 0x80091002 + CRYPT_E_OID_FORMAT Handle = 0x80091003 + CRYPT_E_INVALID_MSG_TYPE Handle = 0x80091004 + CRYPT_E_UNEXPECTED_ENCODING Handle = 0x80091005 + CRYPT_E_AUTH_ATTR_MISSING Handle = 0x80091006 + CRYPT_E_HASH_VALUE Handle = 0x80091007 + CRYPT_E_INVALID_INDEX Handle = 0x80091008 + CRYPT_E_ALREADY_DECRYPTED Handle = 0x80091009 + CRYPT_E_NOT_DECRYPTED Handle = 0x8009100A + CRYPT_E_RECIPIENT_NOT_FOUND Handle = 0x8009100B + CRYPT_E_CONTROL_TYPE Handle = 0x8009100C + CRYPT_E_ISSUER_SERIALNUMBER Handle = 0x8009100D + CRYPT_E_SIGNER_NOT_FOUND Handle = 0x8009100E + CRYPT_E_ATTRIBUTES_MISSING Handle = 0x8009100F + CRYPT_E_STREAM_MSG_NOT_READY Handle = 0x80091010 + CRYPT_E_STREAM_INSUFFICIENT_DATA Handle = 0x80091011 + CRYPT_I_NEW_PROTECTION_REQUIRED Handle = 0x00091012 + CRYPT_E_BAD_LEN Handle = 0x80092001 + CRYPT_E_BAD_ENCODE Handle = 0x80092002 + CRYPT_E_FILE_ERROR Handle = 0x80092003 + CRYPT_E_NOT_FOUND Handle = 0x80092004 + CRYPT_E_EXISTS Handle = 0x80092005 + CRYPT_E_NO_PROVIDER Handle = 0x80092006 + CRYPT_E_SELF_SIGNED Handle = 0x80092007 + CRYPT_E_DELETED_PREV Handle = 0x80092008 + CRYPT_E_NO_MATCH Handle = 0x80092009 + CRYPT_E_UNEXPECTED_MSG_TYPE Handle = 0x8009200A + CRYPT_E_NO_KEY_PROPERTY Handle = 0x8009200B + CRYPT_E_NO_DECRYPT_CERT Handle = 0x8009200C + CRYPT_E_BAD_MSG Handle = 0x8009200D + CRYPT_E_NO_SIGNER Handle = 0x8009200E + CRYPT_E_PENDING_CLOSE Handle = 0x8009200F + CRYPT_E_REVOKED Handle = 0x80092010 + CRYPT_E_NO_REVOCATION_DLL Handle = 0x80092011 + CRYPT_E_NO_REVOCATION_CHECK Handle = 0x80092012 + CRYPT_E_REVOCATION_OFFLINE Handle = 0x80092013 + CRYPT_E_NOT_IN_REVOCATION_DATABASE Handle = 0x80092014 + CRYPT_E_INVALID_NUMERIC_STRING Handle = 0x80092020 + CRYPT_E_INVALID_PRINTABLE_STRING Handle = 0x80092021 + CRYPT_E_INVALID_IA5_STRING Handle = 0x80092022 + CRYPT_E_INVALID_X500_STRING Handle = 0x80092023 + CRYPT_E_NOT_CHAR_STRING Handle = 0x80092024 + CRYPT_E_FILERESIZED Handle = 0x80092025 + CRYPT_E_SECURITY_SETTINGS Handle = 0x80092026 + CRYPT_E_NO_VERIFY_USAGE_DLL Handle = 0x80092027 + CRYPT_E_NO_VERIFY_USAGE_CHECK Handle = 0x80092028 + CRYPT_E_VERIFY_USAGE_OFFLINE Handle = 0x80092029 + CRYPT_E_NOT_IN_CTL Handle = 0x8009202A + CRYPT_E_NO_TRUSTED_SIGNER Handle = 0x8009202B + CRYPT_E_MISSING_PUBKEY_PARA Handle = 0x8009202C + CRYPT_E_OBJECT_LOCATOR_OBJECT_NOT_FOUND Handle = 0x8009202D + CRYPT_E_OSS_ERROR Handle = 0x80093000 + OSS_MORE_BUF Handle = 0x80093001 + OSS_NEGATIVE_UINTEGER Handle = 0x80093002 + OSS_PDU_RANGE Handle = 0x80093003 + OSS_MORE_INPUT Handle = 0x80093004 + OSS_DATA_ERROR Handle = 0x80093005 + OSS_BAD_ARG Handle = 0x80093006 + OSS_BAD_VERSION Handle = 0x80093007 + OSS_OUT_MEMORY Handle = 0x80093008 + OSS_PDU_MISMATCH Handle = 0x80093009 + OSS_LIMITED Handle = 0x8009300A + OSS_BAD_PTR Handle = 0x8009300B + OSS_BAD_TIME Handle = 0x8009300C + OSS_INDEFINITE_NOT_SUPPORTED Handle = 0x8009300D + OSS_MEM_ERROR Handle = 0x8009300E + OSS_BAD_TABLE Handle = 0x8009300F + OSS_TOO_LONG Handle = 0x80093010 + OSS_CONSTRAINT_VIOLATED Handle = 0x80093011 + OSS_FATAL_ERROR Handle = 0x80093012 + OSS_ACCESS_SERIALIZATION_ERROR Handle = 0x80093013 + OSS_NULL_TBL Handle = 0x80093014 + OSS_NULL_FCN Handle = 0x80093015 + OSS_BAD_ENCRULES Handle = 0x80093016 + OSS_UNAVAIL_ENCRULES Handle = 0x80093017 + OSS_CANT_OPEN_TRACE_WINDOW Handle = 0x80093018 + OSS_UNIMPLEMENTED Handle = 0x80093019 + OSS_OID_DLL_NOT_LINKED Handle = 0x8009301A + OSS_CANT_OPEN_TRACE_FILE Handle = 0x8009301B + OSS_TRACE_FILE_ALREADY_OPEN Handle = 0x8009301C + OSS_TABLE_MISMATCH Handle = 0x8009301D + OSS_TYPE_NOT_SUPPORTED Handle = 0x8009301E + OSS_REAL_DLL_NOT_LINKED Handle = 0x8009301F + OSS_REAL_CODE_NOT_LINKED Handle = 0x80093020 + OSS_OUT_OF_RANGE Handle = 0x80093021 + OSS_COPIER_DLL_NOT_LINKED Handle = 0x80093022 + OSS_CONSTRAINT_DLL_NOT_LINKED Handle = 0x80093023 + OSS_COMPARATOR_DLL_NOT_LINKED Handle = 0x80093024 + OSS_COMPARATOR_CODE_NOT_LINKED Handle = 0x80093025 + OSS_MEM_MGR_DLL_NOT_LINKED Handle = 0x80093026 + OSS_PDV_DLL_NOT_LINKED Handle = 0x80093027 + OSS_PDV_CODE_NOT_LINKED Handle = 0x80093028 + OSS_API_DLL_NOT_LINKED Handle = 0x80093029 + OSS_BERDER_DLL_NOT_LINKED Handle = 0x8009302A + OSS_PER_DLL_NOT_LINKED Handle = 0x8009302B + OSS_OPEN_TYPE_ERROR Handle = 0x8009302C + OSS_MUTEX_NOT_CREATED Handle = 0x8009302D + OSS_CANT_CLOSE_TRACE_FILE Handle = 0x8009302E + CRYPT_E_ASN1_ERROR Handle = 0x80093100 + CRYPT_E_ASN1_INTERNAL Handle = 0x80093101 + CRYPT_E_ASN1_EOD Handle = 0x80093102 + CRYPT_E_ASN1_CORRUPT Handle = 0x80093103 + CRYPT_E_ASN1_LARGE Handle = 0x80093104 + CRYPT_E_ASN1_CONSTRAINT Handle = 0x80093105 + CRYPT_E_ASN1_MEMORY Handle = 0x80093106 + CRYPT_E_ASN1_OVERFLOW Handle = 0x80093107 + CRYPT_E_ASN1_BADPDU Handle = 0x80093108 + CRYPT_E_ASN1_BADARGS Handle = 0x80093109 + CRYPT_E_ASN1_BADREAL Handle = 0x8009310A + CRYPT_E_ASN1_BADTAG Handle = 0x8009310B + CRYPT_E_ASN1_CHOICE Handle = 0x8009310C + CRYPT_E_ASN1_RULE Handle = 0x8009310D + CRYPT_E_ASN1_UTF8 Handle = 0x8009310E + CRYPT_E_ASN1_PDU_TYPE Handle = 0x80093133 + CRYPT_E_ASN1_NYI Handle = 0x80093134 + CRYPT_E_ASN1_EXTENDED Handle = 0x80093201 + CRYPT_E_ASN1_NOEOD Handle = 0x80093202 + CERTSRV_E_BAD_REQUESTSUBJECT Handle = 0x80094001 + CERTSRV_E_NO_REQUEST Handle = 0x80094002 + CERTSRV_E_BAD_REQUESTSTATUS Handle = 0x80094003 + CERTSRV_E_PROPERTY_EMPTY Handle = 0x80094004 + CERTSRV_E_INVALID_CA_CERTIFICATE Handle = 0x80094005 + CERTSRV_E_SERVER_SUSPENDED Handle = 0x80094006 + CERTSRV_E_ENCODING_LENGTH Handle = 0x80094007 + CERTSRV_E_ROLECONFLICT Handle = 0x80094008 + CERTSRV_E_RESTRICTEDOFFICER Handle = 0x80094009 + CERTSRV_E_KEY_ARCHIVAL_NOT_CONFIGURED Handle = 0x8009400A + CERTSRV_E_NO_VALID_KRA Handle = 0x8009400B + CERTSRV_E_BAD_REQUEST_KEY_ARCHIVAL Handle = 0x8009400C + CERTSRV_E_NO_CAADMIN_DEFINED Handle = 0x8009400D + CERTSRV_E_BAD_RENEWAL_CERT_ATTRIBUTE Handle = 0x8009400E + CERTSRV_E_NO_DB_SESSIONS Handle = 0x8009400F + CERTSRV_E_ALIGNMENT_FAULT Handle = 0x80094010 + CERTSRV_E_ENROLL_DENIED Handle = 0x80094011 + CERTSRV_E_TEMPLATE_DENIED Handle = 0x80094012 + CERTSRV_E_DOWNLEVEL_DC_SSL_OR_UPGRADE Handle = 0x80094013 + CERTSRV_E_ADMIN_DENIED_REQUEST Handle = 0x80094014 + CERTSRV_E_NO_POLICY_SERVER Handle = 0x80094015 + CERTSRV_E_WEAK_SIGNATURE_OR_KEY Handle = 0x80094016 + CERTSRV_E_KEY_ATTESTATION_NOT_SUPPORTED Handle = 0x80094017 + CERTSRV_E_ENCRYPTION_CERT_REQUIRED Handle = 0x80094018 + CERTSRV_E_UNSUPPORTED_CERT_TYPE Handle = 0x80094800 + CERTSRV_E_NO_CERT_TYPE Handle = 0x80094801 + CERTSRV_E_TEMPLATE_CONFLICT Handle = 0x80094802 + CERTSRV_E_SUBJECT_ALT_NAME_REQUIRED Handle = 0x80094803 + CERTSRV_E_ARCHIVED_KEY_REQUIRED Handle = 0x80094804 + CERTSRV_E_SMIME_REQUIRED Handle = 0x80094805 + CERTSRV_E_BAD_RENEWAL_SUBJECT Handle = 0x80094806 + CERTSRV_E_BAD_TEMPLATE_VERSION Handle = 0x80094807 + CERTSRV_E_TEMPLATE_POLICY_REQUIRED Handle = 0x80094808 + CERTSRV_E_SIGNATURE_POLICY_REQUIRED Handle = 0x80094809 + CERTSRV_E_SIGNATURE_COUNT Handle = 0x8009480A + CERTSRV_E_SIGNATURE_REJECTED Handle = 0x8009480B + CERTSRV_E_ISSUANCE_POLICY_REQUIRED Handle = 0x8009480C + CERTSRV_E_SUBJECT_UPN_REQUIRED Handle = 0x8009480D + CERTSRV_E_SUBJECT_DIRECTORY_GUID_REQUIRED Handle = 0x8009480E + CERTSRV_E_SUBJECT_DNS_REQUIRED Handle = 0x8009480F + CERTSRV_E_ARCHIVED_KEY_UNEXPECTED Handle = 0x80094810 + CERTSRV_E_KEY_LENGTH Handle = 0x80094811 + CERTSRV_E_SUBJECT_EMAIL_REQUIRED Handle = 0x80094812 + CERTSRV_E_UNKNOWN_CERT_TYPE Handle = 0x80094813 + CERTSRV_E_CERT_TYPE_OVERLAP Handle = 0x80094814 + CERTSRV_E_TOO_MANY_SIGNATURES Handle = 0x80094815 + CERTSRV_E_RENEWAL_BAD_PUBLIC_KEY Handle = 0x80094816 + CERTSRV_E_INVALID_EK Handle = 0x80094817 + CERTSRV_E_INVALID_IDBINDING Handle = 0x80094818 + CERTSRV_E_INVALID_ATTESTATION Handle = 0x80094819 + CERTSRV_E_KEY_ATTESTATION Handle = 0x8009481A + CERTSRV_E_CORRUPT_KEY_ATTESTATION Handle = 0x8009481B + CERTSRV_E_EXPIRED_CHALLENGE Handle = 0x8009481C + CERTSRV_E_INVALID_RESPONSE Handle = 0x8009481D + CERTSRV_E_INVALID_REQUESTID Handle = 0x8009481E + CERTSRV_E_REQUEST_PRECERTIFICATE_MISMATCH Handle = 0x8009481F + CERTSRV_E_PENDING_CLIENT_RESPONSE Handle = 0x80094820 + XENROLL_E_KEY_NOT_EXPORTABLE Handle = 0x80095000 + XENROLL_E_CANNOT_ADD_ROOT_CERT Handle = 0x80095001 + XENROLL_E_RESPONSE_KA_HASH_NOT_FOUND Handle = 0x80095002 + XENROLL_E_RESPONSE_UNEXPECTED_KA_HASH Handle = 0x80095003 + XENROLL_E_RESPONSE_KA_HASH_MISMATCH Handle = 0x80095004 + XENROLL_E_KEYSPEC_SMIME_MISMATCH Handle = 0x80095005 + TRUST_E_SYSTEM_ERROR Handle = 0x80096001 + TRUST_E_NO_SIGNER_CERT Handle = 0x80096002 + TRUST_E_COUNTER_SIGNER Handle = 0x80096003 + TRUST_E_CERT_SIGNATURE Handle = 0x80096004 + TRUST_E_TIME_STAMP Handle = 0x80096005 + TRUST_E_BAD_DIGEST Handle = 0x80096010 + TRUST_E_MALFORMED_SIGNATURE Handle = 0x80096011 + TRUST_E_BASIC_CONSTRAINTS Handle = 0x80096019 + TRUST_E_FINANCIAL_CRITERIA Handle = 0x8009601E + MSSIPOTF_E_OUTOFMEMRANGE Handle = 0x80097001 + MSSIPOTF_E_CANTGETOBJECT Handle = 0x80097002 + MSSIPOTF_E_NOHEADTABLE Handle = 0x80097003 + MSSIPOTF_E_BAD_MAGICNUMBER Handle = 0x80097004 + MSSIPOTF_E_BAD_OFFSET_TABLE Handle = 0x80097005 + MSSIPOTF_E_TABLE_TAGORDER Handle = 0x80097006 + MSSIPOTF_E_TABLE_LONGWORD Handle = 0x80097007 + MSSIPOTF_E_BAD_FIRST_TABLE_PLACEMENT Handle = 0x80097008 + MSSIPOTF_E_TABLES_OVERLAP Handle = 0x80097009 + MSSIPOTF_E_TABLE_PADBYTES Handle = 0x8009700A + MSSIPOTF_E_FILETOOSMALL Handle = 0x8009700B + MSSIPOTF_E_TABLE_CHECKSUM Handle = 0x8009700C + MSSIPOTF_E_FILE_CHECKSUM Handle = 0x8009700D + MSSIPOTF_E_FAILED_POLICY Handle = 0x80097010 + MSSIPOTF_E_FAILED_HINTS_CHECK Handle = 0x80097011 + MSSIPOTF_E_NOT_OPENTYPE Handle = 0x80097012 + MSSIPOTF_E_FILE Handle = 0x80097013 + MSSIPOTF_E_CRYPT Handle = 0x80097014 + MSSIPOTF_E_BADVERSION Handle = 0x80097015 + MSSIPOTF_E_DSIG_STRUCTURE Handle = 0x80097016 + MSSIPOTF_E_PCONST_CHECK Handle = 0x80097017 + MSSIPOTF_E_STRUCTURE Handle = 0x80097018 + ERROR_CRED_REQUIRES_CONFIRMATION Handle = 0x80097019 + NTE_OP_OK syscall.Errno = 0 + TRUST_E_PROVIDER_UNKNOWN Handle = 0x800B0001 + TRUST_E_ACTION_UNKNOWN Handle = 0x800B0002 + TRUST_E_SUBJECT_FORM_UNKNOWN Handle = 0x800B0003 + TRUST_E_SUBJECT_NOT_TRUSTED Handle = 0x800B0004 + DIGSIG_E_ENCODE Handle = 0x800B0005 + DIGSIG_E_DECODE Handle = 0x800B0006 + DIGSIG_E_EXTENSIBILITY Handle = 0x800B0007 + DIGSIG_E_CRYPTO Handle = 0x800B0008 + PERSIST_E_SIZEDEFINITE Handle = 0x800B0009 + PERSIST_E_SIZEINDEFINITE Handle = 0x800B000A + PERSIST_E_NOTSELFSIZING Handle = 0x800B000B + TRUST_E_NOSIGNATURE Handle = 0x800B0100 + CERT_E_EXPIRED Handle = 0x800B0101 + CERT_E_VALIDITYPERIODNESTING Handle = 0x800B0102 + CERT_E_ROLE Handle = 0x800B0103 + CERT_E_PATHLENCONST Handle = 0x800B0104 + CERT_E_CRITICAL Handle = 0x800B0105 + CERT_E_PURPOSE Handle = 0x800B0106 + CERT_E_ISSUERCHAINING Handle = 0x800B0107 + CERT_E_MALFORMED Handle = 0x800B0108 + CERT_E_UNTRUSTEDROOT Handle = 0x800B0109 + CERT_E_CHAINING Handle = 0x800B010A + TRUST_E_FAIL Handle = 0x800B010B + CERT_E_REVOKED Handle = 0x800B010C + CERT_E_UNTRUSTEDTESTROOT Handle = 0x800B010D + CERT_E_REVOCATION_FAILURE Handle = 0x800B010E + CERT_E_CN_NO_MATCH Handle = 0x800B010F + CERT_E_WRONG_USAGE Handle = 0x800B0110 + TRUST_E_EXPLICIT_DISTRUST Handle = 0x800B0111 + CERT_E_UNTRUSTEDCA Handle = 0x800B0112 + CERT_E_INVALID_POLICY Handle = 0x800B0113 + CERT_E_INVALID_NAME Handle = 0x800B0114 + SPAPI_E_EXPECTED_SECTION_NAME Handle = 0x800F0000 + SPAPI_E_BAD_SECTION_NAME_LINE Handle = 0x800F0001 + SPAPI_E_SECTION_NAME_TOO_LONG Handle = 0x800F0002 + SPAPI_E_GENERAL_SYNTAX Handle = 0x800F0003 + SPAPI_E_WRONG_INF_STYLE Handle = 0x800F0100 + SPAPI_E_SECTION_NOT_FOUND Handle = 0x800F0101 + SPAPI_E_LINE_NOT_FOUND Handle = 0x800F0102 + SPAPI_E_NO_BACKUP Handle = 0x800F0103 + SPAPI_E_NO_ASSOCIATED_CLASS Handle = 0x800F0200 + SPAPI_E_CLASS_MISMATCH Handle = 0x800F0201 + SPAPI_E_DUPLICATE_FOUND Handle = 0x800F0202 + SPAPI_E_NO_DRIVER_SELECTED Handle = 0x800F0203 + SPAPI_E_KEY_DOES_NOT_EXIST Handle = 0x800F0204 + SPAPI_E_INVALID_DEVINST_NAME Handle = 0x800F0205 + SPAPI_E_INVALID_CLASS Handle = 0x800F0206 + SPAPI_E_DEVINST_ALREADY_EXISTS Handle = 0x800F0207 + SPAPI_E_DEVINFO_NOT_REGISTERED Handle = 0x800F0208 + SPAPI_E_INVALID_REG_PROPERTY Handle = 0x800F0209 + SPAPI_E_NO_INF Handle = 0x800F020A + SPAPI_E_NO_SUCH_DEVINST Handle = 0x800F020B + SPAPI_E_CANT_LOAD_CLASS_ICON Handle = 0x800F020C + SPAPI_E_INVALID_CLASS_INSTALLER Handle = 0x800F020D + SPAPI_E_DI_DO_DEFAULT Handle = 0x800F020E + SPAPI_E_DI_NOFILECOPY Handle = 0x800F020F + SPAPI_E_INVALID_HWPROFILE Handle = 0x800F0210 + SPAPI_E_NO_DEVICE_SELECTED Handle = 0x800F0211 + SPAPI_E_DEVINFO_LIST_LOCKED Handle = 0x800F0212 + SPAPI_E_DEVINFO_DATA_LOCKED Handle = 0x800F0213 + SPAPI_E_DI_BAD_PATH Handle = 0x800F0214 + SPAPI_E_NO_CLASSINSTALL_PARAMS Handle = 0x800F0215 + SPAPI_E_FILEQUEUE_LOCKED Handle = 0x800F0216 + SPAPI_E_BAD_SERVICE_INSTALLSECT Handle = 0x800F0217 + SPAPI_E_NO_CLASS_DRIVER_LIST Handle = 0x800F0218 + SPAPI_E_NO_ASSOCIATED_SERVICE Handle = 0x800F0219 + SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE Handle = 0x800F021A + SPAPI_E_DEVICE_INTERFACE_ACTIVE Handle = 0x800F021B + SPAPI_E_DEVICE_INTERFACE_REMOVED Handle = 0x800F021C + SPAPI_E_BAD_INTERFACE_INSTALLSECT Handle = 0x800F021D + SPAPI_E_NO_SUCH_INTERFACE_CLASS Handle = 0x800F021E + SPAPI_E_INVALID_REFERENCE_STRING Handle = 0x800F021F + SPAPI_E_INVALID_MACHINENAME Handle = 0x800F0220 + SPAPI_E_REMOTE_COMM_FAILURE Handle = 0x800F0221 + SPAPI_E_MACHINE_UNAVAILABLE Handle = 0x800F0222 + SPAPI_E_NO_CONFIGMGR_SERVICES Handle = 0x800F0223 + SPAPI_E_INVALID_PROPPAGE_PROVIDER Handle = 0x800F0224 + SPAPI_E_NO_SUCH_DEVICE_INTERFACE Handle = 0x800F0225 + SPAPI_E_DI_POSTPROCESSING_REQUIRED Handle = 0x800F0226 + SPAPI_E_INVALID_COINSTALLER Handle = 0x800F0227 + SPAPI_E_NO_COMPAT_DRIVERS Handle = 0x800F0228 + SPAPI_E_NO_DEVICE_ICON Handle = 0x800F0229 + SPAPI_E_INVALID_INF_LOGCONFIG Handle = 0x800F022A + SPAPI_E_DI_DONT_INSTALL Handle = 0x800F022B + SPAPI_E_INVALID_FILTER_DRIVER Handle = 0x800F022C + SPAPI_E_NON_WINDOWS_NT_DRIVER Handle = 0x800F022D + SPAPI_E_NON_WINDOWS_DRIVER Handle = 0x800F022E + SPAPI_E_NO_CATALOG_FOR_OEM_INF Handle = 0x800F022F + SPAPI_E_DEVINSTALL_QUEUE_NONNATIVE Handle = 0x800F0230 + SPAPI_E_NOT_DISABLEABLE Handle = 0x800F0231 + SPAPI_E_CANT_REMOVE_DEVINST Handle = 0x800F0232 + SPAPI_E_INVALID_TARGET Handle = 0x800F0233 + SPAPI_E_DRIVER_NONNATIVE Handle = 0x800F0234 + SPAPI_E_IN_WOW64 Handle = 0x800F0235 + SPAPI_E_SET_SYSTEM_RESTORE_POINT Handle = 0x800F0236 + SPAPI_E_INCORRECTLY_COPIED_INF Handle = 0x800F0237 + SPAPI_E_SCE_DISABLED Handle = 0x800F0238 + SPAPI_E_UNKNOWN_EXCEPTION Handle = 0x800F0239 + SPAPI_E_PNP_REGISTRY_ERROR Handle = 0x800F023A + SPAPI_E_REMOTE_REQUEST_UNSUPPORTED Handle = 0x800F023B + SPAPI_E_NOT_AN_INSTALLED_OEM_INF Handle = 0x800F023C + SPAPI_E_INF_IN_USE_BY_DEVICES Handle = 0x800F023D + SPAPI_E_DI_FUNCTION_OBSOLETE Handle = 0x800F023E + SPAPI_E_NO_AUTHENTICODE_CATALOG Handle = 0x800F023F + SPAPI_E_AUTHENTICODE_DISALLOWED Handle = 0x800F0240 + SPAPI_E_AUTHENTICODE_TRUSTED_PUBLISHER Handle = 0x800F0241 + SPAPI_E_AUTHENTICODE_TRUST_NOT_ESTABLISHED Handle = 0x800F0242 + SPAPI_E_AUTHENTICODE_PUBLISHER_NOT_TRUSTED Handle = 0x800F0243 + SPAPI_E_SIGNATURE_OSATTRIBUTE_MISMATCH Handle = 0x800F0244 + SPAPI_E_ONLY_VALIDATE_VIA_AUTHENTICODE Handle = 0x800F0245 + SPAPI_E_DEVICE_INSTALLER_NOT_READY Handle = 0x800F0246 + SPAPI_E_DRIVER_STORE_ADD_FAILED Handle = 0x800F0247 + SPAPI_E_DEVICE_INSTALL_BLOCKED Handle = 0x800F0248 + SPAPI_E_DRIVER_INSTALL_BLOCKED Handle = 0x800F0249 + SPAPI_E_WRONG_INF_TYPE Handle = 0x800F024A + SPAPI_E_FILE_HASH_NOT_IN_CATALOG Handle = 0x800F024B + SPAPI_E_DRIVER_STORE_DELETE_FAILED Handle = 0x800F024C + SPAPI_E_UNRECOVERABLE_STACK_OVERFLOW Handle = 0x800F0300 + SPAPI_E_ERROR_NOT_INSTALLED Handle = 0x800F1000 + SCARD_S_SUCCESS = S_OK + SCARD_F_INTERNAL_ERROR Handle = 0x80100001 + SCARD_E_CANCELLED Handle = 0x80100002 + SCARD_E_INVALID_HANDLE Handle = 0x80100003 + SCARD_E_INVALID_PARAMETER Handle = 0x80100004 + SCARD_E_INVALID_TARGET Handle = 0x80100005 + SCARD_E_NO_MEMORY Handle = 0x80100006 + SCARD_F_WAITED_TOO_LONG Handle = 0x80100007 + SCARD_E_INSUFFICIENT_BUFFER Handle = 0x80100008 + SCARD_E_UNKNOWN_READER Handle = 0x80100009 + SCARD_E_TIMEOUT Handle = 0x8010000A + SCARD_E_SHARING_VIOLATION Handle = 0x8010000B + SCARD_E_NO_SMARTCARD Handle = 0x8010000C + SCARD_E_UNKNOWN_CARD Handle = 0x8010000D + SCARD_E_CANT_DISPOSE Handle = 0x8010000E + SCARD_E_PROTO_MISMATCH Handle = 0x8010000F + SCARD_E_NOT_READY Handle = 0x80100010 + SCARD_E_INVALID_VALUE Handle = 0x80100011 + SCARD_E_SYSTEM_CANCELLED Handle = 0x80100012 + SCARD_F_COMM_ERROR Handle = 0x80100013 + SCARD_F_UNKNOWN_ERROR Handle = 0x80100014 + SCARD_E_INVALID_ATR Handle = 0x80100015 + SCARD_E_NOT_TRANSACTED Handle = 0x80100016 + SCARD_E_READER_UNAVAILABLE Handle = 0x80100017 + SCARD_P_SHUTDOWN Handle = 0x80100018 + SCARD_E_PCI_TOO_SMALL Handle = 0x80100019 + SCARD_E_READER_UNSUPPORTED Handle = 0x8010001A + SCARD_E_DUPLICATE_READER Handle = 0x8010001B + SCARD_E_CARD_UNSUPPORTED Handle = 0x8010001C + SCARD_E_NO_SERVICE Handle = 0x8010001D + SCARD_E_SERVICE_STOPPED Handle = 0x8010001E + SCARD_E_UNEXPECTED Handle = 0x8010001F + SCARD_E_ICC_INSTALLATION Handle = 0x80100020 + SCARD_E_ICC_CREATEORDER Handle = 0x80100021 + SCARD_E_UNSUPPORTED_FEATURE Handle = 0x80100022 + SCARD_E_DIR_NOT_FOUND Handle = 0x80100023 + SCARD_E_FILE_NOT_FOUND Handle = 0x80100024 + SCARD_E_NO_DIR Handle = 0x80100025 + SCARD_E_NO_FILE Handle = 0x80100026 + SCARD_E_NO_ACCESS Handle = 0x80100027 + SCARD_E_WRITE_TOO_MANY Handle = 0x80100028 + SCARD_E_BAD_SEEK Handle = 0x80100029 + SCARD_E_INVALID_CHV Handle = 0x8010002A + SCARD_E_UNKNOWN_RES_MNG Handle = 0x8010002B + SCARD_E_NO_SUCH_CERTIFICATE Handle = 0x8010002C + SCARD_E_CERTIFICATE_UNAVAILABLE Handle = 0x8010002D + SCARD_E_NO_READERS_AVAILABLE Handle = 0x8010002E + SCARD_E_COMM_DATA_LOST Handle = 0x8010002F + SCARD_E_NO_KEY_CONTAINER Handle = 0x80100030 + SCARD_E_SERVER_TOO_BUSY Handle = 0x80100031 + SCARD_E_PIN_CACHE_EXPIRED Handle = 0x80100032 + SCARD_E_NO_PIN_CACHE Handle = 0x80100033 + SCARD_E_READ_ONLY_CARD Handle = 0x80100034 + SCARD_W_UNSUPPORTED_CARD Handle = 0x80100065 + SCARD_W_UNRESPONSIVE_CARD Handle = 0x80100066 + SCARD_W_UNPOWERED_CARD Handle = 0x80100067 + SCARD_W_RESET_CARD Handle = 0x80100068 + SCARD_W_REMOVED_CARD Handle = 0x80100069 + SCARD_W_SECURITY_VIOLATION Handle = 0x8010006A + SCARD_W_WRONG_CHV Handle = 0x8010006B + SCARD_W_CHV_BLOCKED Handle = 0x8010006C + SCARD_W_EOF Handle = 0x8010006D + SCARD_W_CANCELLED_BY_USER Handle = 0x8010006E + SCARD_W_CARD_NOT_AUTHENTICATED Handle = 0x8010006F + SCARD_W_CACHE_ITEM_NOT_FOUND Handle = 0x80100070 + SCARD_W_CACHE_ITEM_STALE Handle = 0x80100071 + SCARD_W_CACHE_ITEM_TOO_BIG Handle = 0x80100072 + COMADMIN_E_OBJECTERRORS Handle = 0x80110401 + COMADMIN_E_OBJECTINVALID Handle = 0x80110402 + COMADMIN_E_KEYMISSING Handle = 0x80110403 + COMADMIN_E_ALREADYINSTALLED Handle = 0x80110404 + COMADMIN_E_APP_FILE_WRITEFAIL Handle = 0x80110407 + COMADMIN_E_APP_FILE_READFAIL Handle = 0x80110408 + COMADMIN_E_APP_FILE_VERSION Handle = 0x80110409 + COMADMIN_E_BADPATH Handle = 0x8011040A + COMADMIN_E_APPLICATIONEXISTS Handle = 0x8011040B + COMADMIN_E_ROLEEXISTS Handle = 0x8011040C + COMADMIN_E_CANTCOPYFILE Handle = 0x8011040D + COMADMIN_E_NOUSER Handle = 0x8011040F + COMADMIN_E_INVALIDUSERIDS Handle = 0x80110410 + COMADMIN_E_NOREGISTRYCLSID Handle = 0x80110411 + COMADMIN_E_BADREGISTRYPROGID Handle = 0x80110412 + COMADMIN_E_AUTHENTICATIONLEVEL Handle = 0x80110413 + COMADMIN_E_USERPASSWDNOTVALID Handle = 0x80110414 + COMADMIN_E_CLSIDORIIDMISMATCH Handle = 0x80110418 + COMADMIN_E_REMOTEINTERFACE Handle = 0x80110419 + COMADMIN_E_DLLREGISTERSERVER Handle = 0x8011041A + COMADMIN_E_NOSERVERSHARE Handle = 0x8011041B + COMADMIN_E_DLLLOADFAILED Handle = 0x8011041D + COMADMIN_E_BADREGISTRYLIBID Handle = 0x8011041E + COMADMIN_E_APPDIRNOTFOUND Handle = 0x8011041F + COMADMIN_E_REGISTRARFAILED Handle = 0x80110423 + COMADMIN_E_COMPFILE_DOESNOTEXIST Handle = 0x80110424 + COMADMIN_E_COMPFILE_LOADDLLFAIL Handle = 0x80110425 + COMADMIN_E_COMPFILE_GETCLASSOBJ Handle = 0x80110426 + COMADMIN_E_COMPFILE_CLASSNOTAVAIL Handle = 0x80110427 + COMADMIN_E_COMPFILE_BADTLB Handle = 0x80110428 + COMADMIN_E_COMPFILE_NOTINSTALLABLE Handle = 0x80110429 + COMADMIN_E_NOTCHANGEABLE Handle = 0x8011042A + COMADMIN_E_NOTDELETEABLE Handle = 0x8011042B + COMADMIN_E_SESSION Handle = 0x8011042C + COMADMIN_E_COMP_MOVE_LOCKED Handle = 0x8011042D + COMADMIN_E_COMP_MOVE_BAD_DEST Handle = 0x8011042E + COMADMIN_E_REGISTERTLB Handle = 0x80110430 + COMADMIN_E_SYSTEMAPP Handle = 0x80110433 + COMADMIN_E_COMPFILE_NOREGISTRAR Handle = 0x80110434 + COMADMIN_E_COREQCOMPINSTALLED Handle = 0x80110435 + COMADMIN_E_SERVICENOTINSTALLED Handle = 0x80110436 + COMADMIN_E_PROPERTYSAVEFAILED Handle = 0x80110437 + COMADMIN_E_OBJECTEXISTS Handle = 0x80110438 + COMADMIN_E_COMPONENTEXISTS Handle = 0x80110439 + COMADMIN_E_REGFILE_CORRUPT Handle = 0x8011043B + COMADMIN_E_PROPERTY_OVERFLOW Handle = 0x8011043C + COMADMIN_E_NOTINREGISTRY Handle = 0x8011043E + COMADMIN_E_OBJECTNOTPOOLABLE Handle = 0x8011043F + COMADMIN_E_APPLID_MATCHES_CLSID Handle = 0x80110446 + COMADMIN_E_ROLE_DOES_NOT_EXIST Handle = 0x80110447 + COMADMIN_E_START_APP_NEEDS_COMPONENTS Handle = 0x80110448 + COMADMIN_E_REQUIRES_DIFFERENT_PLATFORM Handle = 0x80110449 + COMADMIN_E_CAN_NOT_EXPORT_APP_PROXY Handle = 0x8011044A + COMADMIN_E_CAN_NOT_START_APP Handle = 0x8011044B + COMADMIN_E_CAN_NOT_EXPORT_SYS_APP Handle = 0x8011044C + COMADMIN_E_CANT_SUBSCRIBE_TO_COMPONENT Handle = 0x8011044D + COMADMIN_E_EVENTCLASS_CANT_BE_SUBSCRIBER Handle = 0x8011044E + COMADMIN_E_LIB_APP_PROXY_INCOMPATIBLE Handle = 0x8011044F + COMADMIN_E_BASE_PARTITION_ONLY Handle = 0x80110450 + COMADMIN_E_START_APP_DISABLED Handle = 0x80110451 + COMADMIN_E_CAT_DUPLICATE_PARTITION_NAME Handle = 0x80110457 + COMADMIN_E_CAT_INVALID_PARTITION_NAME Handle = 0x80110458 + COMADMIN_E_CAT_PARTITION_IN_USE Handle = 0x80110459 + COMADMIN_E_FILE_PARTITION_DUPLICATE_FILES Handle = 0x8011045A + COMADMIN_E_CAT_IMPORTED_COMPONENTS_NOT_ALLOWED Handle = 0x8011045B + COMADMIN_E_AMBIGUOUS_APPLICATION_NAME Handle = 0x8011045C + COMADMIN_E_AMBIGUOUS_PARTITION_NAME Handle = 0x8011045D + COMADMIN_E_REGDB_NOTINITIALIZED Handle = 0x80110472 + COMADMIN_E_REGDB_NOTOPEN Handle = 0x80110473 + COMADMIN_E_REGDB_SYSTEMERR Handle = 0x80110474 + COMADMIN_E_REGDB_ALREADYRUNNING Handle = 0x80110475 + COMADMIN_E_MIG_VERSIONNOTSUPPORTED Handle = 0x80110480 + COMADMIN_E_MIG_SCHEMANOTFOUND Handle = 0x80110481 + COMADMIN_E_CAT_BITNESSMISMATCH Handle = 0x80110482 + COMADMIN_E_CAT_UNACCEPTABLEBITNESS Handle = 0x80110483 + COMADMIN_E_CAT_WRONGAPPBITNESS Handle = 0x80110484 + COMADMIN_E_CAT_PAUSE_RESUME_NOT_SUPPORTED Handle = 0x80110485 + COMADMIN_E_CAT_SERVERFAULT Handle = 0x80110486 + COMQC_E_APPLICATION_NOT_QUEUED Handle = 0x80110600 + COMQC_E_NO_QUEUEABLE_INTERFACES Handle = 0x80110601 + COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE Handle = 0x80110602 + COMQC_E_NO_IPERSISTSTREAM Handle = 0x80110603 + COMQC_E_BAD_MESSAGE Handle = 0x80110604 + COMQC_E_UNAUTHENTICATED Handle = 0x80110605 + COMQC_E_UNTRUSTED_ENQUEUER Handle = 0x80110606 + MSDTC_E_DUPLICATE_RESOURCE Handle = 0x80110701 + COMADMIN_E_OBJECT_PARENT_MISSING Handle = 0x80110808 + COMADMIN_E_OBJECT_DOES_NOT_EXIST Handle = 0x80110809 + COMADMIN_E_APP_NOT_RUNNING Handle = 0x8011080A + COMADMIN_E_INVALID_PARTITION Handle = 0x8011080B + COMADMIN_E_SVCAPP_NOT_POOLABLE_OR_RECYCLABLE Handle = 0x8011080D + COMADMIN_E_USER_IN_SET Handle = 0x8011080E + COMADMIN_E_CANTRECYCLELIBRARYAPPS Handle = 0x8011080F + COMADMIN_E_CANTRECYCLESERVICEAPPS Handle = 0x80110811 + COMADMIN_E_PROCESSALREADYRECYCLED Handle = 0x80110812 + COMADMIN_E_PAUSEDPROCESSMAYNOTBERECYCLED Handle = 0x80110813 + COMADMIN_E_CANTMAKEINPROCSERVICE Handle = 0x80110814 + COMADMIN_E_PROGIDINUSEBYCLSID Handle = 0x80110815 + COMADMIN_E_DEFAULT_PARTITION_NOT_IN_SET Handle = 0x80110816 + COMADMIN_E_RECYCLEDPROCESSMAYNOTBEPAUSED Handle = 0x80110817 + COMADMIN_E_PARTITION_ACCESSDENIED Handle = 0x80110818 + COMADMIN_E_PARTITION_MSI_ONLY Handle = 0x80110819 + COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_1_0_FORMAT Handle = 0x8011081A + COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_NONBASE_PARTITIONS Handle = 0x8011081B + COMADMIN_E_COMP_MOVE_SOURCE Handle = 0x8011081C + COMADMIN_E_COMP_MOVE_DEST Handle = 0x8011081D + COMADMIN_E_COMP_MOVE_PRIVATE Handle = 0x8011081E + COMADMIN_E_BASEPARTITION_REQUIRED_IN_SET Handle = 0x8011081F + COMADMIN_E_CANNOT_ALIAS_EVENTCLASS Handle = 0x80110820 + COMADMIN_E_PRIVATE_ACCESSDENIED Handle = 0x80110821 + COMADMIN_E_SAFERINVALID Handle = 0x80110822 + COMADMIN_E_REGISTRY_ACCESSDENIED Handle = 0x80110823 + COMADMIN_E_PARTITIONS_DISABLED Handle = 0x80110824 + WER_S_REPORT_DEBUG Handle = 0x001B0000 + WER_S_REPORT_UPLOADED Handle = 0x001B0001 + WER_S_REPORT_QUEUED Handle = 0x001B0002 + WER_S_DISABLED Handle = 0x001B0003 + WER_S_SUSPENDED_UPLOAD Handle = 0x001B0004 + WER_S_DISABLED_QUEUE Handle = 0x001B0005 + WER_S_DISABLED_ARCHIVE Handle = 0x001B0006 + WER_S_REPORT_ASYNC Handle = 0x001B0007 + WER_S_IGNORE_ASSERT_INSTANCE Handle = 0x001B0008 + WER_S_IGNORE_ALL_ASSERTS Handle = 0x001B0009 + WER_S_ASSERT_CONTINUE Handle = 0x001B000A + WER_S_THROTTLED Handle = 0x001B000B + WER_S_REPORT_UPLOADED_CAB Handle = 0x001B000C + WER_E_CRASH_FAILURE Handle = 0x801B8000 + WER_E_CANCELED Handle = 0x801B8001 + WER_E_NETWORK_FAILURE Handle = 0x801B8002 + WER_E_NOT_INITIALIZED Handle = 0x801B8003 + WER_E_ALREADY_REPORTING Handle = 0x801B8004 + WER_E_DUMP_THROTTLED Handle = 0x801B8005 + WER_E_INSUFFICIENT_CONSENT Handle = 0x801B8006 + WER_E_TOO_HEAVY Handle = 0x801B8007 + ERROR_FLT_IO_COMPLETE Handle = 0x001F0001 + ERROR_FLT_NO_HANDLER_DEFINED Handle = 0x801F0001 + ERROR_FLT_CONTEXT_ALREADY_DEFINED Handle = 0x801F0002 + ERROR_FLT_INVALID_ASYNCHRONOUS_REQUEST Handle = 0x801F0003 + ERROR_FLT_DISALLOW_FAST_IO Handle = 0x801F0004 + ERROR_FLT_INVALID_NAME_REQUEST Handle = 0x801F0005 + ERROR_FLT_NOT_SAFE_TO_POST_OPERATION Handle = 0x801F0006 + ERROR_FLT_NOT_INITIALIZED Handle = 0x801F0007 + ERROR_FLT_FILTER_NOT_READY Handle = 0x801F0008 + ERROR_FLT_POST_OPERATION_CLEANUP Handle = 0x801F0009 + ERROR_FLT_INTERNAL_ERROR Handle = 0x801F000A + ERROR_FLT_DELETING_OBJECT Handle = 0x801F000B + ERROR_FLT_MUST_BE_NONPAGED_POOL Handle = 0x801F000C + ERROR_FLT_DUPLICATE_ENTRY Handle = 0x801F000D + ERROR_FLT_CBDQ_DISABLED Handle = 0x801F000E + ERROR_FLT_DO_NOT_ATTACH Handle = 0x801F000F + ERROR_FLT_DO_NOT_DETACH Handle = 0x801F0010 + ERROR_FLT_INSTANCE_ALTITUDE_COLLISION Handle = 0x801F0011 + ERROR_FLT_INSTANCE_NAME_COLLISION Handle = 0x801F0012 + ERROR_FLT_FILTER_NOT_FOUND Handle = 0x801F0013 + ERROR_FLT_VOLUME_NOT_FOUND Handle = 0x801F0014 + ERROR_FLT_INSTANCE_NOT_FOUND Handle = 0x801F0015 + ERROR_FLT_CONTEXT_ALLOCATION_NOT_FOUND Handle = 0x801F0016 + ERROR_FLT_INVALID_CONTEXT_REGISTRATION Handle = 0x801F0017 + ERROR_FLT_NAME_CACHE_MISS Handle = 0x801F0018 + ERROR_FLT_NO_DEVICE_OBJECT Handle = 0x801F0019 + ERROR_FLT_VOLUME_ALREADY_MOUNTED Handle = 0x801F001A + ERROR_FLT_ALREADY_ENLISTED Handle = 0x801F001B + ERROR_FLT_CONTEXT_ALREADY_LINKED Handle = 0x801F001C + ERROR_FLT_NO_WAITER_FOR_REPLY Handle = 0x801F0020 + ERROR_FLT_REGISTRATION_BUSY Handle = 0x801F0023 + ERROR_HUNG_DISPLAY_DRIVER_THREAD Handle = 0x80260001 + DWM_E_COMPOSITIONDISABLED Handle = 0x80263001 + DWM_E_REMOTING_NOT_SUPPORTED Handle = 0x80263002 + DWM_E_NO_REDIRECTION_SURFACE_AVAILABLE Handle = 0x80263003 + DWM_E_NOT_QUEUING_PRESENTS Handle = 0x80263004 + DWM_E_ADAPTER_NOT_FOUND Handle = 0x80263005 + DWM_S_GDI_REDIRECTION_SURFACE Handle = 0x00263005 + DWM_E_TEXTURE_TOO_LARGE Handle = 0x80263007 + DWM_S_GDI_REDIRECTION_SURFACE_BLT_VIA_GDI Handle = 0x00263008 + ERROR_MONITOR_NO_DESCRIPTOR Handle = 0x00261001 + ERROR_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT Handle = 0x00261002 + ERROR_MONITOR_INVALID_DESCRIPTOR_CHECKSUM Handle = 0xC0261003 + ERROR_MONITOR_INVALID_STANDARD_TIMING_BLOCK Handle = 0xC0261004 + ERROR_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED Handle = 0xC0261005 + ERROR_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK Handle = 0xC0261006 + ERROR_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK Handle = 0xC0261007 + ERROR_MONITOR_NO_MORE_DESCRIPTOR_DATA Handle = 0xC0261008 + ERROR_MONITOR_INVALID_DETAILED_TIMING_BLOCK Handle = 0xC0261009 + ERROR_MONITOR_INVALID_MANUFACTURE_DATE Handle = 0xC026100A + ERROR_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER Handle = 0xC0262000 + ERROR_GRAPHICS_INSUFFICIENT_DMA_BUFFER Handle = 0xC0262001 + ERROR_GRAPHICS_INVALID_DISPLAY_ADAPTER Handle = 0xC0262002 + ERROR_GRAPHICS_ADAPTER_WAS_RESET Handle = 0xC0262003 + ERROR_GRAPHICS_INVALID_DRIVER_MODEL Handle = 0xC0262004 + ERROR_GRAPHICS_PRESENT_MODE_CHANGED Handle = 0xC0262005 + ERROR_GRAPHICS_PRESENT_OCCLUDED Handle = 0xC0262006 + ERROR_GRAPHICS_PRESENT_DENIED Handle = 0xC0262007 + ERROR_GRAPHICS_CANNOTCOLORCONVERT Handle = 0xC0262008 + ERROR_GRAPHICS_DRIVER_MISMATCH Handle = 0xC0262009 + ERROR_GRAPHICS_PARTIAL_DATA_POPULATED Handle = 0x4026200A + ERROR_GRAPHICS_PRESENT_REDIRECTION_DISABLED Handle = 0xC026200B + ERROR_GRAPHICS_PRESENT_UNOCCLUDED Handle = 0xC026200C + ERROR_GRAPHICS_WINDOWDC_NOT_AVAILABLE Handle = 0xC026200D + ERROR_GRAPHICS_WINDOWLESS_PRESENT_DISABLED Handle = 0xC026200E + ERROR_GRAPHICS_PRESENT_INVALID_WINDOW Handle = 0xC026200F + ERROR_GRAPHICS_PRESENT_BUFFER_NOT_BOUND Handle = 0xC0262010 + ERROR_GRAPHICS_VAIL_STATE_CHANGED Handle = 0xC0262011 + ERROR_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN Handle = 0xC0262012 + ERROR_GRAPHICS_INDIRECT_DISPLAY_DEVICE_STOPPED Handle = 0xC0262013 + ERROR_GRAPHICS_NO_VIDEO_MEMORY Handle = 0xC0262100 + ERROR_GRAPHICS_CANT_LOCK_MEMORY Handle = 0xC0262101 + ERROR_GRAPHICS_ALLOCATION_BUSY Handle = 0xC0262102 + ERROR_GRAPHICS_TOO_MANY_REFERENCES Handle = 0xC0262103 + ERROR_GRAPHICS_TRY_AGAIN_LATER Handle = 0xC0262104 + ERROR_GRAPHICS_TRY_AGAIN_NOW Handle = 0xC0262105 + ERROR_GRAPHICS_ALLOCATION_INVALID Handle = 0xC0262106 + ERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE Handle = 0xC0262107 + ERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED Handle = 0xC0262108 + ERROR_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION Handle = 0xC0262109 + ERROR_GRAPHICS_INVALID_ALLOCATION_USAGE Handle = 0xC0262110 + ERROR_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION Handle = 0xC0262111 + ERROR_GRAPHICS_ALLOCATION_CLOSED Handle = 0xC0262112 + ERROR_GRAPHICS_INVALID_ALLOCATION_INSTANCE Handle = 0xC0262113 + ERROR_GRAPHICS_INVALID_ALLOCATION_HANDLE Handle = 0xC0262114 + ERROR_GRAPHICS_WRONG_ALLOCATION_DEVICE Handle = 0xC0262115 + ERROR_GRAPHICS_ALLOCATION_CONTENT_LOST Handle = 0xC0262116 + ERROR_GRAPHICS_GPU_EXCEPTION_ON_DEVICE Handle = 0xC0262200 + ERROR_GRAPHICS_SKIP_ALLOCATION_PREPARATION Handle = 0x40262201 + ERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY Handle = 0xC0262300 + ERROR_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED Handle = 0xC0262301 + ERROR_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED Handle = 0xC0262302 + ERROR_GRAPHICS_INVALID_VIDPN Handle = 0xC0262303 + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE Handle = 0xC0262304 + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET Handle = 0xC0262305 + ERROR_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED Handle = 0xC0262306 + ERROR_GRAPHICS_MODE_NOT_PINNED Handle = 0x00262307 + ERROR_GRAPHICS_INVALID_VIDPN_SOURCEMODESET Handle = 0xC0262308 + ERROR_GRAPHICS_INVALID_VIDPN_TARGETMODESET Handle = 0xC0262309 + ERROR_GRAPHICS_INVALID_FREQUENCY Handle = 0xC026230A + ERROR_GRAPHICS_INVALID_ACTIVE_REGION Handle = 0xC026230B + ERROR_GRAPHICS_INVALID_TOTAL_REGION Handle = 0xC026230C + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE Handle = 0xC0262310 + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE Handle = 0xC0262311 + ERROR_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET Handle = 0xC0262312 + ERROR_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY Handle = 0xC0262313 + ERROR_GRAPHICS_MODE_ALREADY_IN_MODESET Handle = 0xC0262314 + ERROR_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET Handle = 0xC0262315 + ERROR_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET Handle = 0xC0262316 + ERROR_GRAPHICS_SOURCE_ALREADY_IN_SET Handle = 0xC0262317 + ERROR_GRAPHICS_TARGET_ALREADY_IN_SET Handle = 0xC0262318 + ERROR_GRAPHICS_INVALID_VIDPN_PRESENT_PATH Handle = 0xC0262319 + ERROR_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY Handle = 0xC026231A + ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET Handle = 0xC026231B + ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE Handle = 0xC026231C + ERROR_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET Handle = 0xC026231D + ERROR_GRAPHICS_NO_PREFERRED_MODE Handle = 0x0026231E + ERROR_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET Handle = 0xC026231F + ERROR_GRAPHICS_STALE_MODESET Handle = 0xC0262320 + ERROR_GRAPHICS_INVALID_MONITOR_SOURCEMODESET Handle = 0xC0262321 + ERROR_GRAPHICS_INVALID_MONITOR_SOURCE_MODE Handle = 0xC0262322 + ERROR_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN Handle = 0xC0262323 + ERROR_GRAPHICS_MODE_ID_MUST_BE_UNIQUE Handle = 0xC0262324 + ERROR_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION Handle = 0xC0262325 + ERROR_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES Handle = 0xC0262326 + ERROR_GRAPHICS_PATH_NOT_IN_TOPOLOGY Handle = 0xC0262327 + ERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE Handle = 0xC0262328 + ERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET Handle = 0xC0262329 + ERROR_GRAPHICS_INVALID_MONITORDESCRIPTORSET Handle = 0xC026232A + ERROR_GRAPHICS_INVALID_MONITORDESCRIPTOR Handle = 0xC026232B + ERROR_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET Handle = 0xC026232C + ERROR_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET Handle = 0xC026232D + ERROR_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE Handle = 0xC026232E + ERROR_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE Handle = 0xC026232F + ERROR_GRAPHICS_RESOURCES_NOT_RELATED Handle = 0xC0262330 + ERROR_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE Handle = 0xC0262331 + ERROR_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE Handle = 0xC0262332 + ERROR_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET Handle = 0xC0262333 + ERROR_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER Handle = 0xC0262334 + ERROR_GRAPHICS_NO_VIDPNMGR Handle = 0xC0262335 + ERROR_GRAPHICS_NO_ACTIVE_VIDPN Handle = 0xC0262336 + ERROR_GRAPHICS_STALE_VIDPN_TOPOLOGY Handle = 0xC0262337 + ERROR_GRAPHICS_MONITOR_NOT_CONNECTED Handle = 0xC0262338 + ERROR_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY Handle = 0xC0262339 + ERROR_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE Handle = 0xC026233A + ERROR_GRAPHICS_INVALID_VISIBLEREGION_SIZE Handle = 0xC026233B + ERROR_GRAPHICS_INVALID_STRIDE Handle = 0xC026233C + ERROR_GRAPHICS_INVALID_PIXELFORMAT Handle = 0xC026233D + ERROR_GRAPHICS_INVALID_COLORBASIS Handle = 0xC026233E + ERROR_GRAPHICS_INVALID_PIXELVALUEACCESSMODE Handle = 0xC026233F + ERROR_GRAPHICS_TARGET_NOT_IN_TOPOLOGY Handle = 0xC0262340 + ERROR_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT Handle = 0xC0262341 + ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE Handle = 0xC0262342 + ERROR_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN Handle = 0xC0262343 + ERROR_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL Handle = 0xC0262344 + ERROR_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION Handle = 0xC0262345 + ERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED Handle = 0xC0262346 + ERROR_GRAPHICS_INVALID_GAMMA_RAMP Handle = 0xC0262347 + ERROR_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED Handle = 0xC0262348 + ERROR_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED Handle = 0xC0262349 + ERROR_GRAPHICS_MODE_NOT_IN_MODESET Handle = 0xC026234A + ERROR_GRAPHICS_DATASET_IS_EMPTY Handle = 0x0026234B + ERROR_GRAPHICS_NO_MORE_ELEMENTS_IN_DATASET Handle = 0x0026234C + ERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON Handle = 0xC026234D + ERROR_GRAPHICS_INVALID_PATH_CONTENT_TYPE Handle = 0xC026234E + ERROR_GRAPHICS_INVALID_COPYPROTECTION_TYPE Handle = 0xC026234F + ERROR_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS Handle = 0xC0262350 + ERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_PINNED Handle = 0x00262351 + ERROR_GRAPHICS_INVALID_SCANLINE_ORDERING Handle = 0xC0262352 + ERROR_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED Handle = 0xC0262353 + ERROR_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS Handle = 0xC0262354 + ERROR_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT Handle = 0xC0262355 + ERROR_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM Handle = 0xC0262356 + ERROR_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN Handle = 0xC0262357 + ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT Handle = 0xC0262358 + ERROR_GRAPHICS_MAX_NUM_PATHS_REACHED Handle = 0xC0262359 + ERROR_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION Handle = 0xC026235A + ERROR_GRAPHICS_INVALID_CLIENT_TYPE Handle = 0xC026235B + ERROR_GRAPHICS_CLIENTVIDPN_NOT_SET Handle = 0xC026235C + ERROR_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED Handle = 0xC0262400 + ERROR_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED Handle = 0xC0262401 + ERROR_GRAPHICS_UNKNOWN_CHILD_STATUS Handle = 0x4026242F + ERROR_GRAPHICS_NOT_A_LINKED_ADAPTER Handle = 0xC0262430 + ERROR_GRAPHICS_LEADLINK_NOT_ENUMERATED Handle = 0xC0262431 + ERROR_GRAPHICS_CHAINLINKS_NOT_ENUMERATED Handle = 0xC0262432 + ERROR_GRAPHICS_ADAPTER_CHAIN_NOT_READY Handle = 0xC0262433 + ERROR_GRAPHICS_CHAINLINKS_NOT_STARTED Handle = 0xC0262434 + ERROR_GRAPHICS_CHAINLINKS_NOT_POWERED_ON Handle = 0xC0262435 + ERROR_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE Handle = 0xC0262436 + ERROR_GRAPHICS_LEADLINK_START_DEFERRED Handle = 0x40262437 + ERROR_GRAPHICS_NOT_POST_DEVICE_DRIVER Handle = 0xC0262438 + ERROR_GRAPHICS_POLLING_TOO_FREQUENTLY Handle = 0x40262439 + ERROR_GRAPHICS_START_DEFERRED Handle = 0x4026243A + ERROR_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED Handle = 0xC026243B + ERROR_GRAPHICS_DEPENDABLE_CHILD_STATUS Handle = 0x4026243C + ERROR_GRAPHICS_OPM_NOT_SUPPORTED Handle = 0xC0262500 + ERROR_GRAPHICS_COPP_NOT_SUPPORTED Handle = 0xC0262501 + ERROR_GRAPHICS_UAB_NOT_SUPPORTED Handle = 0xC0262502 + ERROR_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS Handle = 0xC0262503 + ERROR_GRAPHICS_OPM_NO_VIDEO_OUTPUTS_EXIST Handle = 0xC0262505 + ERROR_GRAPHICS_OPM_INTERNAL_ERROR Handle = 0xC026250B + ERROR_GRAPHICS_OPM_INVALID_HANDLE Handle = 0xC026250C + ERROR_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH Handle = 0xC026250E + ERROR_GRAPHICS_OPM_SPANNING_MODE_ENABLED Handle = 0xC026250F + ERROR_GRAPHICS_OPM_THEATER_MODE_ENABLED Handle = 0xC0262510 + ERROR_GRAPHICS_PVP_HFS_FAILED Handle = 0xC0262511 + ERROR_GRAPHICS_OPM_INVALID_SRM Handle = 0xC0262512 + ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP Handle = 0xC0262513 + ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP Handle = 0xC0262514 + ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA Handle = 0xC0262515 + ERROR_GRAPHICS_OPM_HDCP_SRM_NEVER_SET Handle = 0xC0262516 + ERROR_GRAPHICS_OPM_RESOLUTION_TOO_HIGH Handle = 0xC0262517 + ERROR_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE Handle = 0xC0262518 + ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_NO_LONGER_EXISTS Handle = 0xC026251A + ERROR_GRAPHICS_OPM_SESSION_TYPE_CHANGE_IN_PROGRESS Handle = 0xC026251B + ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS Handle = 0xC026251C + ERROR_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST Handle = 0xC026251D + ERROR_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR Handle = 0xC026251E + ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS Handle = 0xC026251F + ERROR_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED Handle = 0xC0262520 + ERROR_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST Handle = 0xC0262521 + ERROR_GRAPHICS_I2C_NOT_SUPPORTED Handle = 0xC0262580 + ERROR_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST Handle = 0xC0262581 + ERROR_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA Handle = 0xC0262582 + ERROR_GRAPHICS_I2C_ERROR_RECEIVING_DATA Handle = 0xC0262583 + ERROR_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED Handle = 0xC0262584 + ERROR_GRAPHICS_DDCCI_INVALID_DATA Handle = 0xC0262585 + ERROR_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE Handle = 0xC0262586 + ERROR_GRAPHICS_MCA_INVALID_CAPABILITIES_STRING Handle = 0xC0262587 + ERROR_GRAPHICS_MCA_INTERNAL_ERROR Handle = 0xC0262588 + ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND Handle = 0xC0262589 + ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH Handle = 0xC026258A + ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM Handle = 0xC026258B + ERROR_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE Handle = 0xC026258C + ERROR_GRAPHICS_MONITOR_NO_LONGER_EXISTS Handle = 0xC026258D + ERROR_GRAPHICS_DDCCI_CURRENT_CURRENT_VALUE_GREATER_THAN_MAXIMUM_VALUE Handle = 0xC02625D8 + ERROR_GRAPHICS_MCA_INVALID_VCP_VERSION Handle = 0xC02625D9 + ERROR_GRAPHICS_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION Handle = 0xC02625DA + ERROR_GRAPHICS_MCA_MCCS_VERSION_MISMATCH Handle = 0xC02625DB + ERROR_GRAPHICS_MCA_UNSUPPORTED_MCCS_VERSION Handle = 0xC02625DC + ERROR_GRAPHICS_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED Handle = 0xC02625DE + ERROR_GRAPHICS_MCA_UNSUPPORTED_COLOR_TEMPERATURE Handle = 0xC02625DF + ERROR_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED Handle = 0xC02625E0 + ERROR_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME Handle = 0xC02625E1 + ERROR_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP Handle = 0xC02625E2 + ERROR_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED Handle = 0xC02625E3 + ERROR_GRAPHICS_INVALID_POINTER Handle = 0xC02625E4 + ERROR_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE Handle = 0xC02625E5 + ERROR_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL Handle = 0xC02625E6 + ERROR_GRAPHICS_INTERNAL_ERROR Handle = 0xC02625E7 + ERROR_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS Handle = 0xC02605E8 + NAP_E_INVALID_PACKET Handle = 0x80270001 + NAP_E_MISSING_SOH Handle = 0x80270002 + NAP_E_CONFLICTING_ID Handle = 0x80270003 + NAP_E_NO_CACHED_SOH Handle = 0x80270004 + NAP_E_STILL_BOUND Handle = 0x80270005 + NAP_E_NOT_REGISTERED Handle = 0x80270006 + NAP_E_NOT_INITIALIZED Handle = 0x80270007 + NAP_E_MISMATCHED_ID Handle = 0x80270008 + NAP_E_NOT_PENDING Handle = 0x80270009 + NAP_E_ID_NOT_FOUND Handle = 0x8027000A + NAP_E_MAXSIZE_TOO_SMALL Handle = 0x8027000B + NAP_E_SERVICE_NOT_RUNNING Handle = 0x8027000C + NAP_S_CERT_ALREADY_PRESENT Handle = 0x0027000D + NAP_E_ENTITY_DISABLED Handle = 0x8027000E + NAP_E_NETSH_GROUPPOLICY_ERROR Handle = 0x8027000F + NAP_E_TOO_MANY_CALLS Handle = 0x80270010 + NAP_E_SHV_CONFIG_EXISTED Handle = 0x80270011 + NAP_E_SHV_CONFIG_NOT_FOUND Handle = 0x80270012 + NAP_E_SHV_TIMEOUT Handle = 0x80270013 + TPM_E_ERROR_MASK Handle = 0x80280000 + TPM_E_AUTHFAIL Handle = 0x80280001 + TPM_E_BADINDEX Handle = 0x80280002 + TPM_E_BAD_PARAMETER Handle = 0x80280003 + TPM_E_AUDITFAILURE Handle = 0x80280004 + TPM_E_CLEAR_DISABLED Handle = 0x80280005 + TPM_E_DEACTIVATED Handle = 0x80280006 + TPM_E_DISABLED Handle = 0x80280007 + TPM_E_DISABLED_CMD Handle = 0x80280008 + TPM_E_FAIL Handle = 0x80280009 + TPM_E_BAD_ORDINAL Handle = 0x8028000A + TPM_E_INSTALL_DISABLED Handle = 0x8028000B + TPM_E_INVALID_KEYHANDLE Handle = 0x8028000C + TPM_E_KEYNOTFOUND Handle = 0x8028000D + TPM_E_INAPPROPRIATE_ENC Handle = 0x8028000E + TPM_E_MIGRATEFAIL Handle = 0x8028000F + TPM_E_INVALID_PCR_INFO Handle = 0x80280010 + TPM_E_NOSPACE Handle = 0x80280011 + TPM_E_NOSRK Handle = 0x80280012 + TPM_E_NOTSEALED_BLOB Handle = 0x80280013 + TPM_E_OWNER_SET Handle = 0x80280014 + TPM_E_RESOURCES Handle = 0x80280015 + TPM_E_SHORTRANDOM Handle = 0x80280016 + TPM_E_SIZE Handle = 0x80280017 + TPM_E_WRONGPCRVAL Handle = 0x80280018 + TPM_E_BAD_PARAM_SIZE Handle = 0x80280019 + TPM_E_SHA_THREAD Handle = 0x8028001A + TPM_E_SHA_ERROR Handle = 0x8028001B + TPM_E_FAILEDSELFTEST Handle = 0x8028001C + TPM_E_AUTH2FAIL Handle = 0x8028001D + TPM_E_BADTAG Handle = 0x8028001E + TPM_E_IOERROR Handle = 0x8028001F + TPM_E_ENCRYPT_ERROR Handle = 0x80280020 + TPM_E_DECRYPT_ERROR Handle = 0x80280021 + TPM_E_INVALID_AUTHHANDLE Handle = 0x80280022 + TPM_E_NO_ENDORSEMENT Handle = 0x80280023 + TPM_E_INVALID_KEYUSAGE Handle = 0x80280024 + TPM_E_WRONG_ENTITYTYPE Handle = 0x80280025 + TPM_E_INVALID_POSTINIT Handle = 0x80280026 + TPM_E_INAPPROPRIATE_SIG Handle = 0x80280027 + TPM_E_BAD_KEY_PROPERTY Handle = 0x80280028 + TPM_E_BAD_MIGRATION Handle = 0x80280029 + TPM_E_BAD_SCHEME Handle = 0x8028002A + TPM_E_BAD_DATASIZE Handle = 0x8028002B + TPM_E_BAD_MODE Handle = 0x8028002C + TPM_E_BAD_PRESENCE Handle = 0x8028002D + TPM_E_BAD_VERSION Handle = 0x8028002E + TPM_E_NO_WRAP_TRANSPORT Handle = 0x8028002F + TPM_E_AUDITFAIL_UNSUCCESSFUL Handle = 0x80280030 + TPM_E_AUDITFAIL_SUCCESSFUL Handle = 0x80280031 + TPM_E_NOTRESETABLE Handle = 0x80280032 + TPM_E_NOTLOCAL Handle = 0x80280033 + TPM_E_BAD_TYPE Handle = 0x80280034 + TPM_E_INVALID_RESOURCE Handle = 0x80280035 + TPM_E_NOTFIPS Handle = 0x80280036 + TPM_E_INVALID_FAMILY Handle = 0x80280037 + TPM_E_NO_NV_PERMISSION Handle = 0x80280038 + TPM_E_REQUIRES_SIGN Handle = 0x80280039 + TPM_E_KEY_NOTSUPPORTED Handle = 0x8028003A + TPM_E_AUTH_CONFLICT Handle = 0x8028003B + TPM_E_AREA_LOCKED Handle = 0x8028003C + TPM_E_BAD_LOCALITY Handle = 0x8028003D + TPM_E_READ_ONLY Handle = 0x8028003E + TPM_E_PER_NOWRITE Handle = 0x8028003F + TPM_E_FAMILYCOUNT Handle = 0x80280040 + TPM_E_WRITE_LOCKED Handle = 0x80280041 + TPM_E_BAD_ATTRIBUTES Handle = 0x80280042 + TPM_E_INVALID_STRUCTURE Handle = 0x80280043 + TPM_E_KEY_OWNER_CONTROL Handle = 0x80280044 + TPM_E_BAD_COUNTER Handle = 0x80280045 + TPM_E_NOT_FULLWRITE Handle = 0x80280046 + TPM_E_CONTEXT_GAP Handle = 0x80280047 + TPM_E_MAXNVWRITES Handle = 0x80280048 + TPM_E_NOOPERATOR Handle = 0x80280049 + TPM_E_RESOURCEMISSING Handle = 0x8028004A + TPM_E_DELEGATE_LOCK Handle = 0x8028004B + TPM_E_DELEGATE_FAMILY Handle = 0x8028004C + TPM_E_DELEGATE_ADMIN Handle = 0x8028004D + TPM_E_TRANSPORT_NOTEXCLUSIVE Handle = 0x8028004E + TPM_E_OWNER_CONTROL Handle = 0x8028004F + TPM_E_DAA_RESOURCES Handle = 0x80280050 + TPM_E_DAA_INPUT_DATA0 Handle = 0x80280051 + TPM_E_DAA_INPUT_DATA1 Handle = 0x80280052 + TPM_E_DAA_ISSUER_SETTINGS Handle = 0x80280053 + TPM_E_DAA_TPM_SETTINGS Handle = 0x80280054 + TPM_E_DAA_STAGE Handle = 0x80280055 + TPM_E_DAA_ISSUER_VALIDITY Handle = 0x80280056 + TPM_E_DAA_WRONG_W Handle = 0x80280057 + TPM_E_BAD_HANDLE Handle = 0x80280058 + TPM_E_BAD_DELEGATE Handle = 0x80280059 + TPM_E_BADCONTEXT Handle = 0x8028005A + TPM_E_TOOMANYCONTEXTS Handle = 0x8028005B + TPM_E_MA_TICKET_SIGNATURE Handle = 0x8028005C + TPM_E_MA_DESTINATION Handle = 0x8028005D + TPM_E_MA_SOURCE Handle = 0x8028005E + TPM_E_MA_AUTHORITY Handle = 0x8028005F + TPM_E_PERMANENTEK Handle = 0x80280061 + TPM_E_BAD_SIGNATURE Handle = 0x80280062 + TPM_E_NOCONTEXTSPACE Handle = 0x80280063 + TPM_20_E_ASYMMETRIC Handle = 0x80280081 + TPM_20_E_ATTRIBUTES Handle = 0x80280082 + TPM_20_E_HASH Handle = 0x80280083 + TPM_20_E_VALUE Handle = 0x80280084 + TPM_20_E_HIERARCHY Handle = 0x80280085 + TPM_20_E_KEY_SIZE Handle = 0x80280087 + TPM_20_E_MGF Handle = 0x80280088 + TPM_20_E_MODE Handle = 0x80280089 + TPM_20_E_TYPE Handle = 0x8028008A + TPM_20_E_HANDLE Handle = 0x8028008B + TPM_20_E_KDF Handle = 0x8028008C + TPM_20_E_RANGE Handle = 0x8028008D + TPM_20_E_AUTH_FAIL Handle = 0x8028008E + TPM_20_E_NONCE Handle = 0x8028008F + TPM_20_E_PP Handle = 0x80280090 + TPM_20_E_SCHEME Handle = 0x80280092 + TPM_20_E_SIZE Handle = 0x80280095 + TPM_20_E_SYMMETRIC Handle = 0x80280096 + TPM_20_E_TAG Handle = 0x80280097 + TPM_20_E_SELECTOR Handle = 0x80280098 + TPM_20_E_INSUFFICIENT Handle = 0x8028009A + TPM_20_E_SIGNATURE Handle = 0x8028009B + TPM_20_E_KEY Handle = 0x8028009C + TPM_20_E_POLICY_FAIL Handle = 0x8028009D + TPM_20_E_INTEGRITY Handle = 0x8028009F + TPM_20_E_TICKET Handle = 0x802800A0 + TPM_20_E_RESERVED_BITS Handle = 0x802800A1 + TPM_20_E_BAD_AUTH Handle = 0x802800A2 + TPM_20_E_EXPIRED Handle = 0x802800A3 + TPM_20_E_POLICY_CC Handle = 0x802800A4 + TPM_20_E_BINDING Handle = 0x802800A5 + TPM_20_E_CURVE Handle = 0x802800A6 + TPM_20_E_ECC_POINT Handle = 0x802800A7 + TPM_20_E_INITIALIZE Handle = 0x80280100 + TPM_20_E_FAILURE Handle = 0x80280101 + TPM_20_E_SEQUENCE Handle = 0x80280103 + TPM_20_E_PRIVATE Handle = 0x8028010B + TPM_20_E_HMAC Handle = 0x80280119 + TPM_20_E_DISABLED Handle = 0x80280120 + TPM_20_E_EXCLUSIVE Handle = 0x80280121 + TPM_20_E_ECC_CURVE Handle = 0x80280123 + TPM_20_E_AUTH_TYPE Handle = 0x80280124 + TPM_20_E_AUTH_MISSING Handle = 0x80280125 + TPM_20_E_POLICY Handle = 0x80280126 + TPM_20_E_PCR Handle = 0x80280127 + TPM_20_E_PCR_CHANGED Handle = 0x80280128 + TPM_20_E_UPGRADE Handle = 0x8028012D + TPM_20_E_TOO_MANY_CONTEXTS Handle = 0x8028012E + TPM_20_E_AUTH_UNAVAILABLE Handle = 0x8028012F + TPM_20_E_REBOOT Handle = 0x80280130 + TPM_20_E_UNBALANCED Handle = 0x80280131 + TPM_20_E_COMMAND_SIZE Handle = 0x80280142 + TPM_20_E_COMMAND_CODE Handle = 0x80280143 + TPM_20_E_AUTHSIZE Handle = 0x80280144 + TPM_20_E_AUTH_CONTEXT Handle = 0x80280145 + TPM_20_E_NV_RANGE Handle = 0x80280146 + TPM_20_E_NV_SIZE Handle = 0x80280147 + TPM_20_E_NV_LOCKED Handle = 0x80280148 + TPM_20_E_NV_AUTHORIZATION Handle = 0x80280149 + TPM_20_E_NV_UNINITIALIZED Handle = 0x8028014A + TPM_20_E_NV_SPACE Handle = 0x8028014B + TPM_20_E_NV_DEFINED Handle = 0x8028014C + TPM_20_E_BAD_CONTEXT Handle = 0x80280150 + TPM_20_E_CPHASH Handle = 0x80280151 + TPM_20_E_PARENT Handle = 0x80280152 + TPM_20_E_NEEDS_TEST Handle = 0x80280153 + TPM_20_E_NO_RESULT Handle = 0x80280154 + TPM_20_E_SENSITIVE Handle = 0x80280155 + TPM_E_COMMAND_BLOCKED Handle = 0x80280400 + TPM_E_INVALID_HANDLE Handle = 0x80280401 + TPM_E_DUPLICATE_VHANDLE Handle = 0x80280402 + TPM_E_EMBEDDED_COMMAND_BLOCKED Handle = 0x80280403 + TPM_E_EMBEDDED_COMMAND_UNSUPPORTED Handle = 0x80280404 + TPM_E_RETRY Handle = 0x80280800 + TPM_E_NEEDS_SELFTEST Handle = 0x80280801 + TPM_E_DOING_SELFTEST Handle = 0x80280802 + TPM_E_DEFEND_LOCK_RUNNING Handle = 0x80280803 + TPM_20_E_CONTEXT_GAP Handle = 0x80280901 + TPM_20_E_OBJECT_MEMORY Handle = 0x80280902 + TPM_20_E_SESSION_MEMORY Handle = 0x80280903 + TPM_20_E_MEMORY Handle = 0x80280904 + TPM_20_E_SESSION_HANDLES Handle = 0x80280905 + TPM_20_E_OBJECT_HANDLES Handle = 0x80280906 + TPM_20_E_LOCALITY Handle = 0x80280907 + TPM_20_E_YIELDED Handle = 0x80280908 + TPM_20_E_CANCELED Handle = 0x80280909 + TPM_20_E_TESTING Handle = 0x8028090A + TPM_20_E_NV_RATE Handle = 0x80280920 + TPM_20_E_LOCKOUT Handle = 0x80280921 + TPM_20_E_RETRY Handle = 0x80280922 + TPM_20_E_NV_UNAVAILABLE Handle = 0x80280923 + TBS_E_INTERNAL_ERROR Handle = 0x80284001 + TBS_E_BAD_PARAMETER Handle = 0x80284002 + TBS_E_INVALID_OUTPUT_POINTER Handle = 0x80284003 + TBS_E_INVALID_CONTEXT Handle = 0x80284004 + TBS_E_INSUFFICIENT_BUFFER Handle = 0x80284005 + TBS_E_IOERROR Handle = 0x80284006 + TBS_E_INVALID_CONTEXT_PARAM Handle = 0x80284007 + TBS_E_SERVICE_NOT_RUNNING Handle = 0x80284008 + TBS_E_TOO_MANY_TBS_CONTEXTS Handle = 0x80284009 + TBS_E_TOO_MANY_RESOURCES Handle = 0x8028400A + TBS_E_SERVICE_START_PENDING Handle = 0x8028400B + TBS_E_PPI_NOT_SUPPORTED Handle = 0x8028400C + TBS_E_COMMAND_CANCELED Handle = 0x8028400D + TBS_E_BUFFER_TOO_LARGE Handle = 0x8028400E + TBS_E_TPM_NOT_FOUND Handle = 0x8028400F + TBS_E_SERVICE_DISABLED Handle = 0x80284010 + TBS_E_NO_EVENT_LOG Handle = 0x80284011 + TBS_E_ACCESS_DENIED Handle = 0x80284012 + TBS_E_PROVISIONING_NOT_ALLOWED Handle = 0x80284013 + TBS_E_PPI_FUNCTION_UNSUPPORTED Handle = 0x80284014 + TBS_E_OWNERAUTH_NOT_FOUND Handle = 0x80284015 + TBS_E_PROVISIONING_INCOMPLETE Handle = 0x80284016 + TPMAPI_E_INVALID_STATE Handle = 0x80290100 + TPMAPI_E_NOT_ENOUGH_DATA Handle = 0x80290101 + TPMAPI_E_TOO_MUCH_DATA Handle = 0x80290102 + TPMAPI_E_INVALID_OUTPUT_POINTER Handle = 0x80290103 + TPMAPI_E_INVALID_PARAMETER Handle = 0x80290104 + TPMAPI_E_OUT_OF_MEMORY Handle = 0x80290105 + TPMAPI_E_BUFFER_TOO_SMALL Handle = 0x80290106 + TPMAPI_E_INTERNAL_ERROR Handle = 0x80290107 + TPMAPI_E_ACCESS_DENIED Handle = 0x80290108 + TPMAPI_E_AUTHORIZATION_FAILED Handle = 0x80290109 + TPMAPI_E_INVALID_CONTEXT_HANDLE Handle = 0x8029010A + TPMAPI_E_TBS_COMMUNICATION_ERROR Handle = 0x8029010B + TPMAPI_E_TPM_COMMAND_ERROR Handle = 0x8029010C + TPMAPI_E_MESSAGE_TOO_LARGE Handle = 0x8029010D + TPMAPI_E_INVALID_ENCODING Handle = 0x8029010E + TPMAPI_E_INVALID_KEY_SIZE Handle = 0x8029010F + TPMAPI_E_ENCRYPTION_FAILED Handle = 0x80290110 + TPMAPI_E_INVALID_KEY_PARAMS Handle = 0x80290111 + TPMAPI_E_INVALID_MIGRATION_AUTHORIZATION_BLOB Handle = 0x80290112 + TPMAPI_E_INVALID_PCR_INDEX Handle = 0x80290113 + TPMAPI_E_INVALID_DELEGATE_BLOB Handle = 0x80290114 + TPMAPI_E_INVALID_CONTEXT_PARAMS Handle = 0x80290115 + TPMAPI_E_INVALID_KEY_BLOB Handle = 0x80290116 + TPMAPI_E_INVALID_PCR_DATA Handle = 0x80290117 + TPMAPI_E_INVALID_OWNER_AUTH Handle = 0x80290118 + TPMAPI_E_FIPS_RNG_CHECK_FAILED Handle = 0x80290119 + TPMAPI_E_EMPTY_TCG_LOG Handle = 0x8029011A + TPMAPI_E_INVALID_TCG_LOG_ENTRY Handle = 0x8029011B + TPMAPI_E_TCG_SEPARATOR_ABSENT Handle = 0x8029011C + TPMAPI_E_TCG_INVALID_DIGEST_ENTRY Handle = 0x8029011D + TPMAPI_E_POLICY_DENIES_OPERATION Handle = 0x8029011E + TPMAPI_E_NV_BITS_NOT_DEFINED Handle = 0x8029011F + TPMAPI_E_NV_BITS_NOT_READY Handle = 0x80290120 + TPMAPI_E_SEALING_KEY_NOT_AVAILABLE Handle = 0x80290121 + TPMAPI_E_NO_AUTHORIZATION_CHAIN_FOUND Handle = 0x80290122 + TPMAPI_E_SVN_COUNTER_NOT_AVAILABLE Handle = 0x80290123 + TPMAPI_E_OWNER_AUTH_NOT_NULL Handle = 0x80290124 + TPMAPI_E_ENDORSEMENT_AUTH_NOT_NULL Handle = 0x80290125 + TPMAPI_E_AUTHORIZATION_REVOKED Handle = 0x80290126 + TPMAPI_E_MALFORMED_AUTHORIZATION_KEY Handle = 0x80290127 + TPMAPI_E_AUTHORIZING_KEY_NOT_SUPPORTED Handle = 0x80290128 + TPMAPI_E_INVALID_AUTHORIZATION_SIGNATURE Handle = 0x80290129 + TPMAPI_E_MALFORMED_AUTHORIZATION_POLICY Handle = 0x8029012A + TPMAPI_E_MALFORMED_AUTHORIZATION_OTHER Handle = 0x8029012B + TPMAPI_E_SEALING_KEY_CHANGED Handle = 0x8029012C + TBSIMP_E_BUFFER_TOO_SMALL Handle = 0x80290200 + TBSIMP_E_CLEANUP_FAILED Handle = 0x80290201 + TBSIMP_E_INVALID_CONTEXT_HANDLE Handle = 0x80290202 + TBSIMP_E_INVALID_CONTEXT_PARAM Handle = 0x80290203 + TBSIMP_E_TPM_ERROR Handle = 0x80290204 + TBSIMP_E_HASH_BAD_KEY Handle = 0x80290205 + TBSIMP_E_DUPLICATE_VHANDLE Handle = 0x80290206 + TBSIMP_E_INVALID_OUTPUT_POINTER Handle = 0x80290207 + TBSIMP_E_INVALID_PARAMETER Handle = 0x80290208 + TBSIMP_E_RPC_INIT_FAILED Handle = 0x80290209 + TBSIMP_E_SCHEDULER_NOT_RUNNING Handle = 0x8029020A + TBSIMP_E_COMMAND_CANCELED Handle = 0x8029020B + TBSIMP_E_OUT_OF_MEMORY Handle = 0x8029020C + TBSIMP_E_LIST_NO_MORE_ITEMS Handle = 0x8029020D + TBSIMP_E_LIST_NOT_FOUND Handle = 0x8029020E + TBSIMP_E_NOT_ENOUGH_SPACE Handle = 0x8029020F + TBSIMP_E_NOT_ENOUGH_TPM_CONTEXTS Handle = 0x80290210 + TBSIMP_E_COMMAND_FAILED Handle = 0x80290211 + TBSIMP_E_UNKNOWN_ORDINAL Handle = 0x80290212 + TBSIMP_E_RESOURCE_EXPIRED Handle = 0x80290213 + TBSIMP_E_INVALID_RESOURCE Handle = 0x80290214 + TBSIMP_E_NOTHING_TO_UNLOAD Handle = 0x80290215 + TBSIMP_E_HASH_TABLE_FULL Handle = 0x80290216 + TBSIMP_E_TOO_MANY_TBS_CONTEXTS Handle = 0x80290217 + TBSIMP_E_TOO_MANY_RESOURCES Handle = 0x80290218 + TBSIMP_E_PPI_NOT_SUPPORTED Handle = 0x80290219 + TBSIMP_E_TPM_INCOMPATIBLE Handle = 0x8029021A + TBSIMP_E_NO_EVENT_LOG Handle = 0x8029021B + TPM_E_PPI_ACPI_FAILURE Handle = 0x80290300 + TPM_E_PPI_USER_ABORT Handle = 0x80290301 + TPM_E_PPI_BIOS_FAILURE Handle = 0x80290302 + TPM_E_PPI_NOT_SUPPORTED Handle = 0x80290303 + TPM_E_PPI_BLOCKED_IN_BIOS Handle = 0x80290304 + TPM_E_PCP_ERROR_MASK Handle = 0x80290400 + TPM_E_PCP_DEVICE_NOT_READY Handle = 0x80290401 + TPM_E_PCP_INVALID_HANDLE Handle = 0x80290402 + TPM_E_PCP_INVALID_PARAMETER Handle = 0x80290403 + TPM_E_PCP_FLAG_NOT_SUPPORTED Handle = 0x80290404 + TPM_E_PCP_NOT_SUPPORTED Handle = 0x80290405 + TPM_E_PCP_BUFFER_TOO_SMALL Handle = 0x80290406 + TPM_E_PCP_INTERNAL_ERROR Handle = 0x80290407 + TPM_E_PCP_AUTHENTICATION_FAILED Handle = 0x80290408 + TPM_E_PCP_AUTHENTICATION_IGNORED Handle = 0x80290409 + TPM_E_PCP_POLICY_NOT_FOUND Handle = 0x8029040A + TPM_E_PCP_PROFILE_NOT_FOUND Handle = 0x8029040B + TPM_E_PCP_VALIDATION_FAILED Handle = 0x8029040C + TPM_E_PCP_WRONG_PARENT Handle = 0x8029040E + TPM_E_KEY_NOT_LOADED Handle = 0x8029040F + TPM_E_NO_KEY_CERTIFICATION Handle = 0x80290410 + TPM_E_KEY_NOT_FINALIZED Handle = 0x80290411 + TPM_E_ATTESTATION_CHALLENGE_NOT_SET Handle = 0x80290412 + TPM_E_NOT_PCR_BOUND Handle = 0x80290413 + TPM_E_KEY_ALREADY_FINALIZED Handle = 0x80290414 + TPM_E_KEY_USAGE_POLICY_NOT_SUPPORTED Handle = 0x80290415 + TPM_E_KEY_USAGE_POLICY_INVALID Handle = 0x80290416 + TPM_E_SOFT_KEY_ERROR Handle = 0x80290417 + TPM_E_KEY_NOT_AUTHENTICATED Handle = 0x80290418 + TPM_E_PCP_KEY_NOT_AIK Handle = 0x80290419 + TPM_E_KEY_NOT_SIGNING_KEY Handle = 0x8029041A + TPM_E_LOCKED_OUT Handle = 0x8029041B + TPM_E_CLAIM_TYPE_NOT_SUPPORTED Handle = 0x8029041C + TPM_E_VERSION_NOT_SUPPORTED Handle = 0x8029041D + TPM_E_BUFFER_LENGTH_MISMATCH Handle = 0x8029041E + TPM_E_PCP_IFX_RSA_KEY_CREATION_BLOCKED Handle = 0x8029041F + TPM_E_PCP_TICKET_MISSING Handle = 0x80290420 + TPM_E_PCP_RAW_POLICY_NOT_SUPPORTED Handle = 0x80290421 + TPM_E_PCP_KEY_HANDLE_INVALIDATED Handle = 0x80290422 + TPM_E_PCP_UNSUPPORTED_PSS_SALT Handle = 0x40290423 + TPM_E_ZERO_EXHAUST_ENABLED Handle = 0x80290500 + PLA_E_DCS_NOT_FOUND Handle = 0x80300002 + PLA_E_DCS_IN_USE Handle = 0x803000AA + PLA_E_TOO_MANY_FOLDERS Handle = 0x80300045 + PLA_E_NO_MIN_DISK Handle = 0x80300070 + PLA_E_DCS_ALREADY_EXISTS Handle = 0x803000B7 + PLA_S_PROPERTY_IGNORED Handle = 0x00300100 + PLA_E_PROPERTY_CONFLICT Handle = 0x80300101 + PLA_E_DCS_SINGLETON_REQUIRED Handle = 0x80300102 + PLA_E_CREDENTIALS_REQUIRED Handle = 0x80300103 + PLA_E_DCS_NOT_RUNNING Handle = 0x80300104 + PLA_E_CONFLICT_INCL_EXCL_API Handle = 0x80300105 + PLA_E_NETWORK_EXE_NOT_VALID Handle = 0x80300106 + PLA_E_EXE_ALREADY_CONFIGURED Handle = 0x80300107 + PLA_E_EXE_PATH_NOT_VALID Handle = 0x80300108 + PLA_E_DC_ALREADY_EXISTS Handle = 0x80300109 + PLA_E_DCS_START_WAIT_TIMEOUT Handle = 0x8030010A + PLA_E_DC_START_WAIT_TIMEOUT Handle = 0x8030010B + PLA_E_REPORT_WAIT_TIMEOUT Handle = 0x8030010C + PLA_E_NO_DUPLICATES Handle = 0x8030010D + PLA_E_EXE_FULL_PATH_REQUIRED Handle = 0x8030010E + PLA_E_INVALID_SESSION_NAME Handle = 0x8030010F + PLA_E_PLA_CHANNEL_NOT_ENABLED Handle = 0x80300110 + PLA_E_TASKSCHED_CHANNEL_NOT_ENABLED Handle = 0x80300111 + PLA_E_RULES_MANAGER_FAILED Handle = 0x80300112 + PLA_E_CABAPI_FAILURE Handle = 0x80300113 + FVE_E_LOCKED_VOLUME Handle = 0x80310000 + FVE_E_NOT_ENCRYPTED Handle = 0x80310001 + FVE_E_NO_TPM_BIOS Handle = 0x80310002 + FVE_E_NO_MBR_METRIC Handle = 0x80310003 + FVE_E_NO_BOOTSECTOR_METRIC Handle = 0x80310004 + FVE_E_NO_BOOTMGR_METRIC Handle = 0x80310005 + FVE_E_WRONG_BOOTMGR Handle = 0x80310006 + FVE_E_SECURE_KEY_REQUIRED Handle = 0x80310007 + FVE_E_NOT_ACTIVATED Handle = 0x80310008 + FVE_E_ACTION_NOT_ALLOWED Handle = 0x80310009 + FVE_E_AD_SCHEMA_NOT_INSTALLED Handle = 0x8031000A + FVE_E_AD_INVALID_DATATYPE Handle = 0x8031000B + FVE_E_AD_INVALID_DATASIZE Handle = 0x8031000C + FVE_E_AD_NO_VALUES Handle = 0x8031000D + FVE_E_AD_ATTR_NOT_SET Handle = 0x8031000E + FVE_E_AD_GUID_NOT_FOUND Handle = 0x8031000F + FVE_E_BAD_INFORMATION Handle = 0x80310010 + FVE_E_TOO_SMALL Handle = 0x80310011 + FVE_E_SYSTEM_VOLUME Handle = 0x80310012 + FVE_E_FAILED_WRONG_FS Handle = 0x80310013 + FVE_E_BAD_PARTITION_SIZE Handle = 0x80310014 + FVE_E_NOT_SUPPORTED Handle = 0x80310015 + FVE_E_BAD_DATA Handle = 0x80310016 + FVE_E_VOLUME_NOT_BOUND Handle = 0x80310017 + FVE_E_TPM_NOT_OWNED Handle = 0x80310018 + FVE_E_NOT_DATA_VOLUME Handle = 0x80310019 + FVE_E_AD_INSUFFICIENT_BUFFER Handle = 0x8031001A + FVE_E_CONV_READ Handle = 0x8031001B + FVE_E_CONV_WRITE Handle = 0x8031001C + FVE_E_KEY_REQUIRED Handle = 0x8031001D + FVE_E_CLUSTERING_NOT_SUPPORTED Handle = 0x8031001E + FVE_E_VOLUME_BOUND_ALREADY Handle = 0x8031001F + FVE_E_OS_NOT_PROTECTED Handle = 0x80310020 + FVE_E_PROTECTION_DISABLED Handle = 0x80310021 + FVE_E_RECOVERY_KEY_REQUIRED Handle = 0x80310022 + FVE_E_FOREIGN_VOLUME Handle = 0x80310023 + FVE_E_OVERLAPPED_UPDATE Handle = 0x80310024 + FVE_E_TPM_SRK_AUTH_NOT_ZERO Handle = 0x80310025 + FVE_E_FAILED_SECTOR_SIZE Handle = 0x80310026 + FVE_E_FAILED_AUTHENTICATION Handle = 0x80310027 + FVE_E_NOT_OS_VOLUME Handle = 0x80310028 + FVE_E_AUTOUNLOCK_ENABLED Handle = 0x80310029 + FVE_E_WRONG_BOOTSECTOR Handle = 0x8031002A + FVE_E_WRONG_SYSTEM_FS Handle = 0x8031002B + FVE_E_POLICY_PASSWORD_REQUIRED Handle = 0x8031002C + FVE_E_CANNOT_SET_FVEK_ENCRYPTED Handle = 0x8031002D + FVE_E_CANNOT_ENCRYPT_NO_KEY Handle = 0x8031002E + FVE_E_BOOTABLE_CDDVD Handle = 0x80310030 + FVE_E_PROTECTOR_EXISTS Handle = 0x80310031 + FVE_E_RELATIVE_PATH Handle = 0x80310032 + FVE_E_PROTECTOR_NOT_FOUND Handle = 0x80310033 + FVE_E_INVALID_KEY_FORMAT Handle = 0x80310034 + FVE_E_INVALID_PASSWORD_FORMAT Handle = 0x80310035 + FVE_E_FIPS_RNG_CHECK_FAILED Handle = 0x80310036 + FVE_E_FIPS_PREVENTS_RECOVERY_PASSWORD Handle = 0x80310037 + FVE_E_FIPS_PREVENTS_EXTERNAL_KEY_EXPORT Handle = 0x80310038 + FVE_E_NOT_DECRYPTED Handle = 0x80310039 + FVE_E_INVALID_PROTECTOR_TYPE Handle = 0x8031003A + FVE_E_NO_PROTECTORS_TO_TEST Handle = 0x8031003B + FVE_E_KEYFILE_NOT_FOUND Handle = 0x8031003C + FVE_E_KEYFILE_INVALID Handle = 0x8031003D + FVE_E_KEYFILE_NO_VMK Handle = 0x8031003E + FVE_E_TPM_DISABLED Handle = 0x8031003F + FVE_E_NOT_ALLOWED_IN_SAFE_MODE Handle = 0x80310040 + FVE_E_TPM_INVALID_PCR Handle = 0x80310041 + FVE_E_TPM_NO_VMK Handle = 0x80310042 + FVE_E_PIN_INVALID Handle = 0x80310043 + FVE_E_AUTH_INVALID_APPLICATION Handle = 0x80310044 + FVE_E_AUTH_INVALID_CONFIG Handle = 0x80310045 + FVE_E_FIPS_DISABLE_PROTECTION_NOT_ALLOWED Handle = 0x80310046 + FVE_E_FS_NOT_EXTENDED Handle = 0x80310047 + FVE_E_FIRMWARE_TYPE_NOT_SUPPORTED Handle = 0x80310048 + FVE_E_NO_LICENSE Handle = 0x80310049 + FVE_E_NOT_ON_STACK Handle = 0x8031004A + FVE_E_FS_MOUNTED Handle = 0x8031004B + FVE_E_TOKEN_NOT_IMPERSONATED Handle = 0x8031004C + FVE_E_DRY_RUN_FAILED Handle = 0x8031004D + FVE_E_REBOOT_REQUIRED Handle = 0x8031004E + FVE_E_DEBUGGER_ENABLED Handle = 0x8031004F + FVE_E_RAW_ACCESS Handle = 0x80310050 + FVE_E_RAW_BLOCKED Handle = 0x80310051 + FVE_E_BCD_APPLICATIONS_PATH_INCORRECT Handle = 0x80310052 + FVE_E_NOT_ALLOWED_IN_VERSION Handle = 0x80310053 + FVE_E_NO_AUTOUNLOCK_MASTER_KEY Handle = 0x80310054 + FVE_E_MOR_FAILED Handle = 0x80310055 + FVE_E_HIDDEN_VOLUME Handle = 0x80310056 + FVE_E_TRANSIENT_STATE Handle = 0x80310057 + FVE_E_PUBKEY_NOT_ALLOWED Handle = 0x80310058 + FVE_E_VOLUME_HANDLE_OPEN Handle = 0x80310059 + FVE_E_NO_FEATURE_LICENSE Handle = 0x8031005A + FVE_E_INVALID_STARTUP_OPTIONS Handle = 0x8031005B + FVE_E_POLICY_RECOVERY_PASSWORD_NOT_ALLOWED Handle = 0x8031005C + FVE_E_POLICY_RECOVERY_PASSWORD_REQUIRED Handle = 0x8031005D + FVE_E_POLICY_RECOVERY_KEY_NOT_ALLOWED Handle = 0x8031005E + FVE_E_POLICY_RECOVERY_KEY_REQUIRED Handle = 0x8031005F + FVE_E_POLICY_STARTUP_PIN_NOT_ALLOWED Handle = 0x80310060 + FVE_E_POLICY_STARTUP_PIN_REQUIRED Handle = 0x80310061 + FVE_E_POLICY_STARTUP_KEY_NOT_ALLOWED Handle = 0x80310062 + FVE_E_POLICY_STARTUP_KEY_REQUIRED Handle = 0x80310063 + FVE_E_POLICY_STARTUP_PIN_KEY_NOT_ALLOWED Handle = 0x80310064 + FVE_E_POLICY_STARTUP_PIN_KEY_REQUIRED Handle = 0x80310065 + FVE_E_POLICY_STARTUP_TPM_NOT_ALLOWED Handle = 0x80310066 + FVE_E_POLICY_STARTUP_TPM_REQUIRED Handle = 0x80310067 + FVE_E_POLICY_INVALID_PIN_LENGTH Handle = 0x80310068 + FVE_E_KEY_PROTECTOR_NOT_SUPPORTED Handle = 0x80310069 + FVE_E_POLICY_PASSPHRASE_NOT_ALLOWED Handle = 0x8031006A + FVE_E_POLICY_PASSPHRASE_REQUIRED Handle = 0x8031006B + FVE_E_FIPS_PREVENTS_PASSPHRASE Handle = 0x8031006C + FVE_E_OS_VOLUME_PASSPHRASE_NOT_ALLOWED Handle = 0x8031006D + FVE_E_INVALID_BITLOCKER_OID Handle = 0x8031006E + FVE_E_VOLUME_TOO_SMALL Handle = 0x8031006F + FVE_E_DV_NOT_SUPPORTED_ON_FS Handle = 0x80310070 + FVE_E_DV_NOT_ALLOWED_BY_GP Handle = 0x80310071 + FVE_E_POLICY_USER_CERTIFICATE_NOT_ALLOWED Handle = 0x80310072 + FVE_E_POLICY_USER_CERTIFICATE_REQUIRED Handle = 0x80310073 + FVE_E_POLICY_USER_CERT_MUST_BE_HW Handle = 0x80310074 + FVE_E_POLICY_USER_CONFIGURE_FDV_AUTOUNLOCK_NOT_ALLOWED Handle = 0x80310075 + FVE_E_POLICY_USER_CONFIGURE_RDV_AUTOUNLOCK_NOT_ALLOWED Handle = 0x80310076 + FVE_E_POLICY_USER_CONFIGURE_RDV_NOT_ALLOWED Handle = 0x80310077 + FVE_E_POLICY_USER_ENABLE_RDV_NOT_ALLOWED Handle = 0x80310078 + FVE_E_POLICY_USER_DISABLE_RDV_NOT_ALLOWED Handle = 0x80310079 + FVE_E_POLICY_INVALID_PASSPHRASE_LENGTH Handle = 0x80310080 + FVE_E_POLICY_PASSPHRASE_TOO_SIMPLE Handle = 0x80310081 + FVE_E_RECOVERY_PARTITION Handle = 0x80310082 + FVE_E_POLICY_CONFLICT_FDV_RK_OFF_AUK_ON Handle = 0x80310083 + FVE_E_POLICY_CONFLICT_RDV_RK_OFF_AUK_ON Handle = 0x80310084 + FVE_E_NON_BITLOCKER_OID Handle = 0x80310085 + FVE_E_POLICY_PROHIBITS_SELFSIGNED Handle = 0x80310086 + FVE_E_POLICY_CONFLICT_RO_AND_STARTUP_KEY_REQUIRED Handle = 0x80310087 + FVE_E_CONV_RECOVERY_FAILED Handle = 0x80310088 + FVE_E_VIRTUALIZED_SPACE_TOO_BIG Handle = 0x80310089 + FVE_E_POLICY_CONFLICT_OSV_RP_OFF_ADB_ON Handle = 0x80310090 + FVE_E_POLICY_CONFLICT_FDV_RP_OFF_ADB_ON Handle = 0x80310091 + FVE_E_POLICY_CONFLICT_RDV_RP_OFF_ADB_ON Handle = 0x80310092 + FVE_E_NON_BITLOCKER_KU Handle = 0x80310093 + FVE_E_PRIVATEKEY_AUTH_FAILED Handle = 0x80310094 + FVE_E_REMOVAL_OF_DRA_FAILED Handle = 0x80310095 + FVE_E_OPERATION_NOT_SUPPORTED_ON_VISTA_VOLUME Handle = 0x80310096 + FVE_E_CANT_LOCK_AUTOUNLOCK_ENABLED_VOLUME Handle = 0x80310097 + FVE_E_FIPS_HASH_KDF_NOT_ALLOWED Handle = 0x80310098 + FVE_E_ENH_PIN_INVALID Handle = 0x80310099 + FVE_E_INVALID_PIN_CHARS Handle = 0x8031009A + FVE_E_INVALID_DATUM_TYPE Handle = 0x8031009B + FVE_E_EFI_ONLY Handle = 0x8031009C + FVE_E_MULTIPLE_NKP_CERTS Handle = 0x8031009D + FVE_E_REMOVAL_OF_NKP_FAILED Handle = 0x8031009E + FVE_E_INVALID_NKP_CERT Handle = 0x8031009F + FVE_E_NO_EXISTING_PIN Handle = 0x803100A0 + FVE_E_PROTECTOR_CHANGE_PIN_MISMATCH Handle = 0x803100A1 + FVE_E_PIN_PROTECTOR_CHANGE_BY_STD_USER_DISALLOWED Handle = 0x803100A2 + FVE_E_PROTECTOR_CHANGE_MAX_PIN_CHANGE_ATTEMPTS_REACHED Handle = 0x803100A3 + FVE_E_POLICY_PASSPHRASE_REQUIRES_ASCII Handle = 0x803100A4 + FVE_E_FULL_ENCRYPTION_NOT_ALLOWED_ON_TP_STORAGE Handle = 0x803100A5 + FVE_E_WIPE_NOT_ALLOWED_ON_TP_STORAGE Handle = 0x803100A6 + FVE_E_KEY_LENGTH_NOT_SUPPORTED_BY_EDRIVE Handle = 0x803100A7 + FVE_E_NO_EXISTING_PASSPHRASE Handle = 0x803100A8 + FVE_E_PROTECTOR_CHANGE_PASSPHRASE_MISMATCH Handle = 0x803100A9 + FVE_E_PASSPHRASE_TOO_LONG Handle = 0x803100AA + FVE_E_NO_PASSPHRASE_WITH_TPM Handle = 0x803100AB + FVE_E_NO_TPM_WITH_PASSPHRASE Handle = 0x803100AC + FVE_E_NOT_ALLOWED_ON_CSV_STACK Handle = 0x803100AD + FVE_E_NOT_ALLOWED_ON_CLUSTER Handle = 0x803100AE + FVE_E_EDRIVE_NO_FAILOVER_TO_SW Handle = 0x803100AF + FVE_E_EDRIVE_BAND_IN_USE Handle = 0x803100B0 + FVE_E_EDRIVE_DISALLOWED_BY_GP Handle = 0x803100B1 + FVE_E_EDRIVE_INCOMPATIBLE_VOLUME Handle = 0x803100B2 + FVE_E_NOT_ALLOWED_TO_UPGRADE_WHILE_CONVERTING Handle = 0x803100B3 + FVE_E_EDRIVE_DV_NOT_SUPPORTED Handle = 0x803100B4 + FVE_E_NO_PREBOOT_KEYBOARD_DETECTED Handle = 0x803100B5 + FVE_E_NO_PREBOOT_KEYBOARD_OR_WINRE_DETECTED Handle = 0x803100B6 + FVE_E_POLICY_REQUIRES_STARTUP_PIN_ON_TOUCH_DEVICE Handle = 0x803100B7 + FVE_E_POLICY_REQUIRES_RECOVERY_PASSWORD_ON_TOUCH_DEVICE Handle = 0x803100B8 + FVE_E_WIPE_CANCEL_NOT_APPLICABLE Handle = 0x803100B9 + FVE_E_SECUREBOOT_DISABLED Handle = 0x803100BA + FVE_E_SECUREBOOT_CONFIGURATION_INVALID Handle = 0x803100BB + FVE_E_EDRIVE_DRY_RUN_FAILED Handle = 0x803100BC + FVE_E_SHADOW_COPY_PRESENT Handle = 0x803100BD + FVE_E_POLICY_INVALID_ENHANCED_BCD_SETTINGS Handle = 0x803100BE + FVE_E_EDRIVE_INCOMPATIBLE_FIRMWARE Handle = 0x803100BF + FVE_E_PROTECTOR_CHANGE_MAX_PASSPHRASE_CHANGE_ATTEMPTS_REACHED Handle = 0x803100C0 + FVE_E_PASSPHRASE_PROTECTOR_CHANGE_BY_STD_USER_DISALLOWED Handle = 0x803100C1 + FVE_E_LIVEID_ACCOUNT_SUSPENDED Handle = 0x803100C2 + FVE_E_LIVEID_ACCOUNT_BLOCKED Handle = 0x803100C3 + FVE_E_NOT_PROVISIONED_ON_ALL_VOLUMES Handle = 0x803100C4 + FVE_E_DE_FIXED_DATA_NOT_SUPPORTED Handle = 0x803100C5 + FVE_E_DE_HARDWARE_NOT_COMPLIANT Handle = 0x803100C6 + FVE_E_DE_WINRE_NOT_CONFIGURED Handle = 0x803100C7 + FVE_E_DE_PROTECTION_SUSPENDED Handle = 0x803100C8 + FVE_E_DE_OS_VOLUME_NOT_PROTECTED Handle = 0x803100C9 + FVE_E_DE_DEVICE_LOCKEDOUT Handle = 0x803100CA + FVE_E_DE_PROTECTION_NOT_YET_ENABLED Handle = 0x803100CB + FVE_E_INVALID_PIN_CHARS_DETAILED Handle = 0x803100CC + FVE_E_DEVICE_LOCKOUT_COUNTER_UNAVAILABLE Handle = 0x803100CD + FVE_E_DEVICELOCKOUT_COUNTER_MISMATCH Handle = 0x803100CE + FVE_E_BUFFER_TOO_LARGE Handle = 0x803100CF + FVE_E_NO_SUCH_CAPABILITY_ON_TARGET Handle = 0x803100D0 + FVE_E_DE_PREVENTED_FOR_OS Handle = 0x803100D1 + FVE_E_DE_VOLUME_OPTED_OUT Handle = 0x803100D2 + FVE_E_DE_VOLUME_NOT_SUPPORTED Handle = 0x803100D3 + FVE_E_EOW_NOT_SUPPORTED_IN_VERSION Handle = 0x803100D4 + FVE_E_ADBACKUP_NOT_ENABLED Handle = 0x803100D5 + FVE_E_VOLUME_EXTEND_PREVENTS_EOW_DECRYPT Handle = 0x803100D6 + FVE_E_NOT_DE_VOLUME Handle = 0x803100D7 + FVE_E_PROTECTION_CANNOT_BE_DISABLED Handle = 0x803100D8 + FVE_E_OSV_KSR_NOT_ALLOWED Handle = 0x803100D9 + FVE_E_AD_BACKUP_REQUIRED_POLICY_NOT_SET_OS_DRIVE Handle = 0x803100DA + FVE_E_AD_BACKUP_REQUIRED_POLICY_NOT_SET_FIXED_DRIVE Handle = 0x803100DB + FVE_E_AD_BACKUP_REQUIRED_POLICY_NOT_SET_REMOVABLE_DRIVE Handle = 0x803100DC + FVE_E_KEY_ROTATION_NOT_SUPPORTED Handle = 0x803100DD + FVE_E_EXECUTE_REQUEST_SENT_TOO_SOON Handle = 0x803100DE + FVE_E_KEY_ROTATION_NOT_ENABLED Handle = 0x803100DF + FVE_E_DEVICE_NOT_JOINED Handle = 0x803100E0 + FWP_E_CALLOUT_NOT_FOUND Handle = 0x80320001 + FWP_E_CONDITION_NOT_FOUND Handle = 0x80320002 + FWP_E_FILTER_NOT_FOUND Handle = 0x80320003 + FWP_E_LAYER_NOT_FOUND Handle = 0x80320004 + FWP_E_PROVIDER_NOT_FOUND Handle = 0x80320005 + FWP_E_PROVIDER_CONTEXT_NOT_FOUND Handle = 0x80320006 + FWP_E_SUBLAYER_NOT_FOUND Handle = 0x80320007 + FWP_E_NOT_FOUND Handle = 0x80320008 + FWP_E_ALREADY_EXISTS Handle = 0x80320009 + FWP_E_IN_USE Handle = 0x8032000A + FWP_E_DYNAMIC_SESSION_IN_PROGRESS Handle = 0x8032000B + FWP_E_WRONG_SESSION Handle = 0x8032000C + FWP_E_NO_TXN_IN_PROGRESS Handle = 0x8032000D + FWP_E_TXN_IN_PROGRESS Handle = 0x8032000E + FWP_E_TXN_ABORTED Handle = 0x8032000F + FWP_E_SESSION_ABORTED Handle = 0x80320010 + FWP_E_INCOMPATIBLE_TXN Handle = 0x80320011 + FWP_E_TIMEOUT Handle = 0x80320012 + FWP_E_NET_EVENTS_DISABLED Handle = 0x80320013 + FWP_E_INCOMPATIBLE_LAYER Handle = 0x80320014 + FWP_E_KM_CLIENTS_ONLY Handle = 0x80320015 + FWP_E_LIFETIME_MISMATCH Handle = 0x80320016 + FWP_E_BUILTIN_OBJECT Handle = 0x80320017 + FWP_E_TOO_MANY_CALLOUTS Handle = 0x80320018 + FWP_E_NOTIFICATION_DROPPED Handle = 0x80320019 + FWP_E_TRAFFIC_MISMATCH Handle = 0x8032001A + FWP_E_INCOMPATIBLE_SA_STATE Handle = 0x8032001B + FWP_E_NULL_POINTER Handle = 0x8032001C + FWP_E_INVALID_ENUMERATOR Handle = 0x8032001D + FWP_E_INVALID_FLAGS Handle = 0x8032001E + FWP_E_INVALID_NET_MASK Handle = 0x8032001F + FWP_E_INVALID_RANGE Handle = 0x80320020 + FWP_E_INVALID_INTERVAL Handle = 0x80320021 + FWP_E_ZERO_LENGTH_ARRAY Handle = 0x80320022 + FWP_E_NULL_DISPLAY_NAME Handle = 0x80320023 + FWP_E_INVALID_ACTION_TYPE Handle = 0x80320024 + FWP_E_INVALID_WEIGHT Handle = 0x80320025 + FWP_E_MATCH_TYPE_MISMATCH Handle = 0x80320026 + FWP_E_TYPE_MISMATCH Handle = 0x80320027 + FWP_E_OUT_OF_BOUNDS Handle = 0x80320028 + FWP_E_RESERVED Handle = 0x80320029 + FWP_E_DUPLICATE_CONDITION Handle = 0x8032002A + FWP_E_DUPLICATE_KEYMOD Handle = 0x8032002B + FWP_E_ACTION_INCOMPATIBLE_WITH_LAYER Handle = 0x8032002C + FWP_E_ACTION_INCOMPATIBLE_WITH_SUBLAYER Handle = 0x8032002D + FWP_E_CONTEXT_INCOMPATIBLE_WITH_LAYER Handle = 0x8032002E + FWP_E_CONTEXT_INCOMPATIBLE_WITH_CALLOUT Handle = 0x8032002F + FWP_E_INCOMPATIBLE_AUTH_METHOD Handle = 0x80320030 + FWP_E_INCOMPATIBLE_DH_GROUP Handle = 0x80320031 + FWP_E_EM_NOT_SUPPORTED Handle = 0x80320032 + FWP_E_NEVER_MATCH Handle = 0x80320033 + FWP_E_PROVIDER_CONTEXT_MISMATCH Handle = 0x80320034 + FWP_E_INVALID_PARAMETER Handle = 0x80320035 + FWP_E_TOO_MANY_SUBLAYERS Handle = 0x80320036 + FWP_E_CALLOUT_NOTIFICATION_FAILED Handle = 0x80320037 + FWP_E_INVALID_AUTH_TRANSFORM Handle = 0x80320038 + FWP_E_INVALID_CIPHER_TRANSFORM Handle = 0x80320039 + FWP_E_INCOMPATIBLE_CIPHER_TRANSFORM Handle = 0x8032003A + FWP_E_INVALID_TRANSFORM_COMBINATION Handle = 0x8032003B + FWP_E_DUPLICATE_AUTH_METHOD Handle = 0x8032003C + FWP_E_INVALID_TUNNEL_ENDPOINT Handle = 0x8032003D + FWP_E_L2_DRIVER_NOT_READY Handle = 0x8032003E + FWP_E_KEY_DICTATOR_ALREADY_REGISTERED Handle = 0x8032003F + FWP_E_KEY_DICTATION_INVALID_KEYING_MATERIAL Handle = 0x80320040 + FWP_E_CONNECTIONS_DISABLED Handle = 0x80320041 + FWP_E_INVALID_DNS_NAME Handle = 0x80320042 + FWP_E_STILL_ON Handle = 0x80320043 + FWP_E_IKEEXT_NOT_RUNNING Handle = 0x80320044 + FWP_E_DROP_NOICMP Handle = 0x80320104 + WS_S_ASYNC Handle = 0x003D0000 + WS_S_END Handle = 0x003D0001 + WS_E_INVALID_FORMAT Handle = 0x803D0000 + WS_E_OBJECT_FAULTED Handle = 0x803D0001 + WS_E_NUMERIC_OVERFLOW Handle = 0x803D0002 + WS_E_INVALID_OPERATION Handle = 0x803D0003 + WS_E_OPERATION_ABORTED Handle = 0x803D0004 + WS_E_ENDPOINT_ACCESS_DENIED Handle = 0x803D0005 + WS_E_OPERATION_TIMED_OUT Handle = 0x803D0006 + WS_E_OPERATION_ABANDONED Handle = 0x803D0007 + WS_E_QUOTA_EXCEEDED Handle = 0x803D0008 + WS_E_NO_TRANSLATION_AVAILABLE Handle = 0x803D0009 + WS_E_SECURITY_VERIFICATION_FAILURE Handle = 0x803D000A + WS_E_ADDRESS_IN_USE Handle = 0x803D000B + WS_E_ADDRESS_NOT_AVAILABLE Handle = 0x803D000C + WS_E_ENDPOINT_NOT_FOUND Handle = 0x803D000D + WS_E_ENDPOINT_NOT_AVAILABLE Handle = 0x803D000E + WS_E_ENDPOINT_FAILURE Handle = 0x803D000F + WS_E_ENDPOINT_UNREACHABLE Handle = 0x803D0010 + WS_E_ENDPOINT_ACTION_NOT_SUPPORTED Handle = 0x803D0011 + WS_E_ENDPOINT_TOO_BUSY Handle = 0x803D0012 + WS_E_ENDPOINT_FAULT_RECEIVED Handle = 0x803D0013 + WS_E_ENDPOINT_DISCONNECTED Handle = 0x803D0014 + WS_E_PROXY_FAILURE Handle = 0x803D0015 + WS_E_PROXY_ACCESS_DENIED Handle = 0x803D0016 + WS_E_NOT_SUPPORTED Handle = 0x803D0017 + WS_E_PROXY_REQUIRES_BASIC_AUTH Handle = 0x803D0018 + WS_E_PROXY_REQUIRES_DIGEST_AUTH Handle = 0x803D0019 + WS_E_PROXY_REQUIRES_NTLM_AUTH Handle = 0x803D001A + WS_E_PROXY_REQUIRES_NEGOTIATE_AUTH Handle = 0x803D001B + WS_E_SERVER_REQUIRES_BASIC_AUTH Handle = 0x803D001C + WS_E_SERVER_REQUIRES_DIGEST_AUTH Handle = 0x803D001D + WS_E_SERVER_REQUIRES_NTLM_AUTH Handle = 0x803D001E + WS_E_SERVER_REQUIRES_NEGOTIATE_AUTH Handle = 0x803D001F + WS_E_INVALID_ENDPOINT_URL Handle = 0x803D0020 + WS_E_OTHER Handle = 0x803D0021 + WS_E_SECURITY_TOKEN_EXPIRED Handle = 0x803D0022 + WS_E_SECURITY_SYSTEM_FAILURE Handle = 0x803D0023 + ERROR_NDIS_INTERFACE_CLOSING syscall.Errno = 0x80340002 + ERROR_NDIS_BAD_VERSION syscall.Errno = 0x80340004 + ERROR_NDIS_BAD_CHARACTERISTICS syscall.Errno = 0x80340005 + ERROR_NDIS_ADAPTER_NOT_FOUND syscall.Errno = 0x80340006 + ERROR_NDIS_OPEN_FAILED syscall.Errno = 0x80340007 + ERROR_NDIS_DEVICE_FAILED syscall.Errno = 0x80340008 + ERROR_NDIS_MULTICAST_FULL syscall.Errno = 0x80340009 + ERROR_NDIS_MULTICAST_EXISTS syscall.Errno = 0x8034000A + ERROR_NDIS_MULTICAST_NOT_FOUND syscall.Errno = 0x8034000B + ERROR_NDIS_REQUEST_ABORTED syscall.Errno = 0x8034000C + ERROR_NDIS_RESET_IN_PROGRESS syscall.Errno = 0x8034000D + ERROR_NDIS_NOT_SUPPORTED syscall.Errno = 0x803400BB + ERROR_NDIS_INVALID_PACKET syscall.Errno = 0x8034000F + ERROR_NDIS_ADAPTER_NOT_READY syscall.Errno = 0x80340011 + ERROR_NDIS_INVALID_LENGTH syscall.Errno = 0x80340014 + ERROR_NDIS_INVALID_DATA syscall.Errno = 0x80340015 + ERROR_NDIS_BUFFER_TOO_SHORT syscall.Errno = 0x80340016 + ERROR_NDIS_INVALID_OID syscall.Errno = 0x80340017 + ERROR_NDIS_ADAPTER_REMOVED syscall.Errno = 0x80340018 + ERROR_NDIS_UNSUPPORTED_MEDIA syscall.Errno = 0x80340019 + ERROR_NDIS_GROUP_ADDRESS_IN_USE syscall.Errno = 0x8034001A + ERROR_NDIS_FILE_NOT_FOUND syscall.Errno = 0x8034001B + ERROR_NDIS_ERROR_READING_FILE syscall.Errno = 0x8034001C + ERROR_NDIS_ALREADY_MAPPED syscall.Errno = 0x8034001D + ERROR_NDIS_RESOURCE_CONFLICT syscall.Errno = 0x8034001E + ERROR_NDIS_MEDIA_DISCONNECTED syscall.Errno = 0x8034001F + ERROR_NDIS_INVALID_ADDRESS syscall.Errno = 0x80340022 + ERROR_NDIS_INVALID_DEVICE_REQUEST syscall.Errno = 0x80340010 + ERROR_NDIS_PAUSED syscall.Errno = 0x8034002A + ERROR_NDIS_INTERFACE_NOT_FOUND syscall.Errno = 0x8034002B + ERROR_NDIS_UNSUPPORTED_REVISION syscall.Errno = 0x8034002C + ERROR_NDIS_INVALID_PORT syscall.Errno = 0x8034002D + ERROR_NDIS_INVALID_PORT_STATE syscall.Errno = 0x8034002E + ERROR_NDIS_LOW_POWER_STATE syscall.Errno = 0x8034002F + ERROR_NDIS_REINIT_REQUIRED syscall.Errno = 0x80340030 + ERROR_NDIS_NO_QUEUES syscall.Errno = 0x80340031 + ERROR_NDIS_DOT11_AUTO_CONFIG_ENABLED syscall.Errno = 0x80342000 + ERROR_NDIS_DOT11_MEDIA_IN_USE syscall.Errno = 0x80342001 + ERROR_NDIS_DOT11_POWER_STATE_INVALID syscall.Errno = 0x80342002 + ERROR_NDIS_PM_WOL_PATTERN_LIST_FULL syscall.Errno = 0x80342003 + ERROR_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL syscall.Errno = 0x80342004 + ERROR_NDIS_DOT11_AP_CHANNEL_CURRENTLY_NOT_AVAILABLE syscall.Errno = 0x80342005 + ERROR_NDIS_DOT11_AP_BAND_CURRENTLY_NOT_AVAILABLE syscall.Errno = 0x80342006 + ERROR_NDIS_DOT11_AP_CHANNEL_NOT_ALLOWED syscall.Errno = 0x80342007 + ERROR_NDIS_DOT11_AP_BAND_NOT_ALLOWED syscall.Errno = 0x80342008 + ERROR_NDIS_INDICATION_REQUIRED syscall.Errno = 0x00340001 + ERROR_NDIS_OFFLOAD_POLICY syscall.Errno = 0xC034100F + ERROR_NDIS_OFFLOAD_CONNECTION_REJECTED syscall.Errno = 0xC0341012 + ERROR_NDIS_OFFLOAD_PATH_REJECTED syscall.Errno = 0xC0341013 + ERROR_HV_INVALID_HYPERCALL_CODE syscall.Errno = 0xC0350002 + ERROR_HV_INVALID_HYPERCALL_INPUT syscall.Errno = 0xC0350003 + ERROR_HV_INVALID_ALIGNMENT syscall.Errno = 0xC0350004 + ERROR_HV_INVALID_PARAMETER syscall.Errno = 0xC0350005 + ERROR_HV_ACCESS_DENIED syscall.Errno = 0xC0350006 + ERROR_HV_INVALID_PARTITION_STATE syscall.Errno = 0xC0350007 + ERROR_HV_OPERATION_DENIED syscall.Errno = 0xC0350008 + ERROR_HV_UNKNOWN_PROPERTY syscall.Errno = 0xC0350009 + ERROR_HV_PROPERTY_VALUE_OUT_OF_RANGE syscall.Errno = 0xC035000A + ERROR_HV_INSUFFICIENT_MEMORY syscall.Errno = 0xC035000B + ERROR_HV_PARTITION_TOO_DEEP syscall.Errno = 0xC035000C + ERROR_HV_INVALID_PARTITION_ID syscall.Errno = 0xC035000D + ERROR_HV_INVALID_VP_INDEX syscall.Errno = 0xC035000E + ERROR_HV_INVALID_PORT_ID syscall.Errno = 0xC0350011 + ERROR_HV_INVALID_CONNECTION_ID syscall.Errno = 0xC0350012 + ERROR_HV_INSUFFICIENT_BUFFERS syscall.Errno = 0xC0350013 + ERROR_HV_NOT_ACKNOWLEDGED syscall.Errno = 0xC0350014 + ERROR_HV_INVALID_VP_STATE syscall.Errno = 0xC0350015 + ERROR_HV_ACKNOWLEDGED syscall.Errno = 0xC0350016 + ERROR_HV_INVALID_SAVE_RESTORE_STATE syscall.Errno = 0xC0350017 + ERROR_HV_INVALID_SYNIC_STATE syscall.Errno = 0xC0350018 + ERROR_HV_OBJECT_IN_USE syscall.Errno = 0xC0350019 + ERROR_HV_INVALID_PROXIMITY_DOMAIN_INFO syscall.Errno = 0xC035001A + ERROR_HV_NO_DATA syscall.Errno = 0xC035001B + ERROR_HV_INACTIVE syscall.Errno = 0xC035001C + ERROR_HV_NO_RESOURCES syscall.Errno = 0xC035001D + ERROR_HV_FEATURE_UNAVAILABLE syscall.Errno = 0xC035001E + ERROR_HV_INSUFFICIENT_BUFFER syscall.Errno = 0xC0350033 + ERROR_HV_INSUFFICIENT_DEVICE_DOMAINS syscall.Errno = 0xC0350038 + ERROR_HV_CPUID_FEATURE_VALIDATION syscall.Errno = 0xC035003C + ERROR_HV_CPUID_XSAVE_FEATURE_VALIDATION syscall.Errno = 0xC035003D + ERROR_HV_PROCESSOR_STARTUP_TIMEOUT syscall.Errno = 0xC035003E + ERROR_HV_SMX_ENABLED syscall.Errno = 0xC035003F + ERROR_HV_INVALID_LP_INDEX syscall.Errno = 0xC0350041 + ERROR_HV_INVALID_REGISTER_VALUE syscall.Errno = 0xC0350050 + ERROR_HV_INVALID_VTL_STATE syscall.Errno = 0xC0350051 + ERROR_HV_NX_NOT_DETECTED syscall.Errno = 0xC0350055 + ERROR_HV_INVALID_DEVICE_ID syscall.Errno = 0xC0350057 + ERROR_HV_INVALID_DEVICE_STATE syscall.Errno = 0xC0350058 + ERROR_HV_PENDING_PAGE_REQUESTS syscall.Errno = 0x00350059 + ERROR_HV_PAGE_REQUEST_INVALID syscall.Errno = 0xC0350060 + ERROR_HV_INVALID_CPU_GROUP_ID syscall.Errno = 0xC035006F + ERROR_HV_INVALID_CPU_GROUP_STATE syscall.Errno = 0xC0350070 + ERROR_HV_OPERATION_FAILED syscall.Errno = 0xC0350071 + ERROR_HV_NOT_ALLOWED_WITH_NESTED_VIRT_ACTIVE syscall.Errno = 0xC0350072 + ERROR_HV_INSUFFICIENT_ROOT_MEMORY syscall.Errno = 0xC0350073 + ERROR_HV_NOT_PRESENT syscall.Errno = 0xC0351000 + ERROR_VID_DUPLICATE_HANDLER syscall.Errno = 0xC0370001 + ERROR_VID_TOO_MANY_HANDLERS syscall.Errno = 0xC0370002 + ERROR_VID_QUEUE_FULL syscall.Errno = 0xC0370003 + ERROR_VID_HANDLER_NOT_PRESENT syscall.Errno = 0xC0370004 + ERROR_VID_INVALID_OBJECT_NAME syscall.Errno = 0xC0370005 + ERROR_VID_PARTITION_NAME_TOO_LONG syscall.Errno = 0xC0370006 + ERROR_VID_MESSAGE_QUEUE_NAME_TOO_LONG syscall.Errno = 0xC0370007 + ERROR_VID_PARTITION_ALREADY_EXISTS syscall.Errno = 0xC0370008 + ERROR_VID_PARTITION_DOES_NOT_EXIST syscall.Errno = 0xC0370009 + ERROR_VID_PARTITION_NAME_NOT_FOUND syscall.Errno = 0xC037000A + ERROR_VID_MESSAGE_QUEUE_ALREADY_EXISTS syscall.Errno = 0xC037000B + ERROR_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT syscall.Errno = 0xC037000C + ERROR_VID_MB_STILL_REFERENCED syscall.Errno = 0xC037000D + ERROR_VID_CHILD_GPA_PAGE_SET_CORRUPTED syscall.Errno = 0xC037000E + ERROR_VID_INVALID_NUMA_SETTINGS syscall.Errno = 0xC037000F + ERROR_VID_INVALID_NUMA_NODE_INDEX syscall.Errno = 0xC0370010 + ERROR_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED syscall.Errno = 0xC0370011 + ERROR_VID_INVALID_MEMORY_BLOCK_HANDLE syscall.Errno = 0xC0370012 + ERROR_VID_PAGE_RANGE_OVERFLOW syscall.Errno = 0xC0370013 + ERROR_VID_INVALID_MESSAGE_QUEUE_HANDLE syscall.Errno = 0xC0370014 + ERROR_VID_INVALID_GPA_RANGE_HANDLE syscall.Errno = 0xC0370015 + ERROR_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE syscall.Errno = 0xC0370016 + ERROR_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED syscall.Errno = 0xC0370017 + ERROR_VID_INVALID_PPM_HANDLE syscall.Errno = 0xC0370018 + ERROR_VID_MBPS_ARE_LOCKED syscall.Errno = 0xC0370019 + ERROR_VID_MESSAGE_QUEUE_CLOSED syscall.Errno = 0xC037001A + ERROR_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED syscall.Errno = 0xC037001B + ERROR_VID_STOP_PENDING syscall.Errno = 0xC037001C + ERROR_VID_INVALID_PROCESSOR_STATE syscall.Errno = 0xC037001D + ERROR_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT syscall.Errno = 0xC037001E + ERROR_VID_KM_INTERFACE_ALREADY_INITIALIZED syscall.Errno = 0xC037001F + ERROR_VID_MB_PROPERTY_ALREADY_SET_RESET syscall.Errno = 0xC0370020 + ERROR_VID_MMIO_RANGE_DESTROYED syscall.Errno = 0xC0370021 + ERROR_VID_INVALID_CHILD_GPA_PAGE_SET syscall.Errno = 0xC0370022 + ERROR_VID_RESERVE_PAGE_SET_IS_BEING_USED syscall.Errno = 0xC0370023 + ERROR_VID_RESERVE_PAGE_SET_TOO_SMALL syscall.Errno = 0xC0370024 + ERROR_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE syscall.Errno = 0xC0370025 + ERROR_VID_MBP_COUNT_EXCEEDED_LIMIT syscall.Errno = 0xC0370026 + ERROR_VID_SAVED_STATE_CORRUPT syscall.Errno = 0xC0370027 + ERROR_VID_SAVED_STATE_UNRECOGNIZED_ITEM syscall.Errno = 0xC0370028 + ERROR_VID_SAVED_STATE_INCOMPATIBLE syscall.Errno = 0xC0370029 + ERROR_VID_VTL_ACCESS_DENIED syscall.Errno = 0xC037002A + ERROR_VMCOMPUTE_TERMINATED_DURING_START syscall.Errno = 0xC0370100 + ERROR_VMCOMPUTE_IMAGE_MISMATCH syscall.Errno = 0xC0370101 + ERROR_VMCOMPUTE_HYPERV_NOT_INSTALLED syscall.Errno = 0xC0370102 + ERROR_VMCOMPUTE_OPERATION_PENDING syscall.Errno = 0xC0370103 + ERROR_VMCOMPUTE_TOO_MANY_NOTIFICATIONS syscall.Errno = 0xC0370104 + ERROR_VMCOMPUTE_INVALID_STATE syscall.Errno = 0xC0370105 + ERROR_VMCOMPUTE_UNEXPECTED_EXIT syscall.Errno = 0xC0370106 + ERROR_VMCOMPUTE_TERMINATED syscall.Errno = 0xC0370107 + ERROR_VMCOMPUTE_CONNECT_FAILED syscall.Errno = 0xC0370108 + ERROR_VMCOMPUTE_TIMEOUT syscall.Errno = 0xC0370109 + ERROR_VMCOMPUTE_CONNECTION_CLOSED syscall.Errno = 0xC037010A + ERROR_VMCOMPUTE_UNKNOWN_MESSAGE syscall.Errno = 0xC037010B + ERROR_VMCOMPUTE_UNSUPPORTED_PROTOCOL_VERSION syscall.Errno = 0xC037010C + ERROR_VMCOMPUTE_INVALID_JSON syscall.Errno = 0xC037010D + ERROR_VMCOMPUTE_SYSTEM_NOT_FOUND syscall.Errno = 0xC037010E + ERROR_VMCOMPUTE_SYSTEM_ALREADY_EXISTS syscall.Errno = 0xC037010F + ERROR_VMCOMPUTE_SYSTEM_ALREADY_STOPPED syscall.Errno = 0xC0370110 + ERROR_VMCOMPUTE_PROTOCOL_ERROR syscall.Errno = 0xC0370111 + ERROR_VMCOMPUTE_INVALID_LAYER syscall.Errno = 0xC0370112 + ERROR_VMCOMPUTE_WINDOWS_INSIDER_REQUIRED syscall.Errno = 0xC0370113 + HCS_E_TERMINATED_DURING_START Handle = 0x80370100 + HCS_E_IMAGE_MISMATCH Handle = 0x80370101 + HCS_E_HYPERV_NOT_INSTALLED Handle = 0x80370102 + HCS_E_INVALID_STATE Handle = 0x80370105 + HCS_E_UNEXPECTED_EXIT Handle = 0x80370106 + HCS_E_TERMINATED Handle = 0x80370107 + HCS_E_CONNECT_FAILED Handle = 0x80370108 + HCS_E_CONNECTION_TIMEOUT Handle = 0x80370109 + HCS_E_CONNECTION_CLOSED Handle = 0x8037010A + HCS_E_UNKNOWN_MESSAGE Handle = 0x8037010B + HCS_E_UNSUPPORTED_PROTOCOL_VERSION Handle = 0x8037010C + HCS_E_INVALID_JSON Handle = 0x8037010D + HCS_E_SYSTEM_NOT_FOUND Handle = 0x8037010E + HCS_E_SYSTEM_ALREADY_EXISTS Handle = 0x8037010F + HCS_E_SYSTEM_ALREADY_STOPPED Handle = 0x80370110 + HCS_E_PROTOCOL_ERROR Handle = 0x80370111 + HCS_E_INVALID_LAYER Handle = 0x80370112 + HCS_E_WINDOWS_INSIDER_REQUIRED Handle = 0x80370113 + HCS_E_SERVICE_NOT_AVAILABLE Handle = 0x80370114 + HCS_E_OPERATION_NOT_STARTED Handle = 0x80370115 + HCS_E_OPERATION_ALREADY_STARTED Handle = 0x80370116 + HCS_E_OPERATION_PENDING Handle = 0x80370117 + HCS_E_OPERATION_TIMEOUT Handle = 0x80370118 + HCS_E_OPERATION_SYSTEM_CALLBACK_ALREADY_SET Handle = 0x80370119 + HCS_E_OPERATION_RESULT_ALLOCATION_FAILED Handle = 0x8037011A + HCS_E_ACCESS_DENIED Handle = 0x8037011B + HCS_E_GUEST_CRITICAL_ERROR Handle = 0x8037011C + ERROR_VNET_VIRTUAL_SWITCH_NAME_NOT_FOUND syscall.Errno = 0xC0370200 + ERROR_VID_REMOTE_NODE_PARENT_GPA_PAGES_USED syscall.Errno = 0x80370001 + WHV_E_UNKNOWN_CAPABILITY Handle = 0x80370300 + WHV_E_INSUFFICIENT_BUFFER Handle = 0x80370301 + WHV_E_UNKNOWN_PROPERTY Handle = 0x80370302 + WHV_E_UNSUPPORTED_HYPERVISOR_CONFIG Handle = 0x80370303 + WHV_E_INVALID_PARTITION_CONFIG Handle = 0x80370304 + WHV_E_GPA_RANGE_NOT_FOUND Handle = 0x80370305 + WHV_E_VP_ALREADY_EXISTS Handle = 0x80370306 + WHV_E_VP_DOES_NOT_EXIST Handle = 0x80370307 + WHV_E_INVALID_VP_STATE Handle = 0x80370308 + WHV_E_INVALID_VP_REGISTER_NAME Handle = 0x80370309 + ERROR_VSMB_SAVED_STATE_FILE_NOT_FOUND syscall.Errno = 0xC0370400 + ERROR_VSMB_SAVED_STATE_CORRUPT syscall.Errno = 0xC0370401 + ERROR_VOLMGR_INCOMPLETE_REGENERATION syscall.Errno = 0x80380001 + ERROR_VOLMGR_INCOMPLETE_DISK_MIGRATION syscall.Errno = 0x80380002 + ERROR_VOLMGR_DATABASE_FULL syscall.Errno = 0xC0380001 + ERROR_VOLMGR_DISK_CONFIGURATION_CORRUPTED syscall.Errno = 0xC0380002 + ERROR_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC syscall.Errno = 0xC0380003 + ERROR_VOLMGR_PACK_CONFIG_UPDATE_FAILED syscall.Errno = 0xC0380004 + ERROR_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME syscall.Errno = 0xC0380005 + ERROR_VOLMGR_DISK_DUPLICATE syscall.Errno = 0xC0380006 + ERROR_VOLMGR_DISK_DYNAMIC syscall.Errno = 0xC0380007 + ERROR_VOLMGR_DISK_ID_INVALID syscall.Errno = 0xC0380008 + ERROR_VOLMGR_DISK_INVALID syscall.Errno = 0xC0380009 + ERROR_VOLMGR_DISK_LAST_VOTER syscall.Errno = 0xC038000A + ERROR_VOLMGR_DISK_LAYOUT_INVALID syscall.Errno = 0xC038000B + ERROR_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS syscall.Errno = 0xC038000C + ERROR_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED syscall.Errno = 0xC038000D + ERROR_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL syscall.Errno = 0xC038000E + ERROR_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS syscall.Errno = 0xC038000F + ERROR_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS syscall.Errno = 0xC0380010 + ERROR_VOLMGR_DISK_MISSING syscall.Errno = 0xC0380011 + ERROR_VOLMGR_DISK_NOT_EMPTY syscall.Errno = 0xC0380012 + ERROR_VOLMGR_DISK_NOT_ENOUGH_SPACE syscall.Errno = 0xC0380013 + ERROR_VOLMGR_DISK_REVECTORING_FAILED syscall.Errno = 0xC0380014 + ERROR_VOLMGR_DISK_SECTOR_SIZE_INVALID syscall.Errno = 0xC0380015 + ERROR_VOLMGR_DISK_SET_NOT_CONTAINED syscall.Errno = 0xC0380016 + ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS syscall.Errno = 0xC0380017 + ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES syscall.Errno = 0xC0380018 + ERROR_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED syscall.Errno = 0xC0380019 + ERROR_VOLMGR_EXTENT_ALREADY_USED syscall.Errno = 0xC038001A + ERROR_VOLMGR_EXTENT_NOT_CONTIGUOUS syscall.Errno = 0xC038001B + ERROR_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION syscall.Errno = 0xC038001C + ERROR_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED syscall.Errno = 0xC038001D + ERROR_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION syscall.Errno = 0xC038001E + ERROR_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH syscall.Errno = 0xC038001F + ERROR_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED syscall.Errno = 0xC0380020 + ERROR_VOLMGR_INTERLEAVE_LENGTH_INVALID syscall.Errno = 0xC0380021 + ERROR_VOLMGR_MAXIMUM_REGISTERED_USERS syscall.Errno = 0xC0380022 + ERROR_VOLMGR_MEMBER_IN_SYNC syscall.Errno = 0xC0380023 + ERROR_VOLMGR_MEMBER_INDEX_DUPLICATE syscall.Errno = 0xC0380024 + ERROR_VOLMGR_MEMBER_INDEX_INVALID syscall.Errno = 0xC0380025 + ERROR_VOLMGR_MEMBER_MISSING syscall.Errno = 0xC0380026 + ERROR_VOLMGR_MEMBER_NOT_DETACHED syscall.Errno = 0xC0380027 + ERROR_VOLMGR_MEMBER_REGENERATING syscall.Errno = 0xC0380028 + ERROR_VOLMGR_ALL_DISKS_FAILED syscall.Errno = 0xC0380029 + ERROR_VOLMGR_NO_REGISTERED_USERS syscall.Errno = 0xC038002A + ERROR_VOLMGR_NO_SUCH_USER syscall.Errno = 0xC038002B + ERROR_VOLMGR_NOTIFICATION_RESET syscall.Errno = 0xC038002C + ERROR_VOLMGR_NUMBER_OF_MEMBERS_INVALID syscall.Errno = 0xC038002D + ERROR_VOLMGR_NUMBER_OF_PLEXES_INVALID syscall.Errno = 0xC038002E + ERROR_VOLMGR_PACK_DUPLICATE syscall.Errno = 0xC038002F + ERROR_VOLMGR_PACK_ID_INVALID syscall.Errno = 0xC0380030 + ERROR_VOLMGR_PACK_INVALID syscall.Errno = 0xC0380031 + ERROR_VOLMGR_PACK_NAME_INVALID syscall.Errno = 0xC0380032 + ERROR_VOLMGR_PACK_OFFLINE syscall.Errno = 0xC0380033 + ERROR_VOLMGR_PACK_HAS_QUORUM syscall.Errno = 0xC0380034 + ERROR_VOLMGR_PACK_WITHOUT_QUORUM syscall.Errno = 0xC0380035 + ERROR_VOLMGR_PARTITION_STYLE_INVALID syscall.Errno = 0xC0380036 + ERROR_VOLMGR_PARTITION_UPDATE_FAILED syscall.Errno = 0xC0380037 + ERROR_VOLMGR_PLEX_IN_SYNC syscall.Errno = 0xC0380038 + ERROR_VOLMGR_PLEX_INDEX_DUPLICATE syscall.Errno = 0xC0380039 + ERROR_VOLMGR_PLEX_INDEX_INVALID syscall.Errno = 0xC038003A + ERROR_VOLMGR_PLEX_LAST_ACTIVE syscall.Errno = 0xC038003B + ERROR_VOLMGR_PLEX_MISSING syscall.Errno = 0xC038003C + ERROR_VOLMGR_PLEX_REGENERATING syscall.Errno = 0xC038003D + ERROR_VOLMGR_PLEX_TYPE_INVALID syscall.Errno = 0xC038003E + ERROR_VOLMGR_PLEX_NOT_RAID5 syscall.Errno = 0xC038003F + ERROR_VOLMGR_PLEX_NOT_SIMPLE syscall.Errno = 0xC0380040 + ERROR_VOLMGR_STRUCTURE_SIZE_INVALID syscall.Errno = 0xC0380041 + ERROR_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS syscall.Errno = 0xC0380042 + ERROR_VOLMGR_TRANSACTION_IN_PROGRESS syscall.Errno = 0xC0380043 + ERROR_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE syscall.Errno = 0xC0380044 + ERROR_VOLMGR_VOLUME_CONTAINS_MISSING_DISK syscall.Errno = 0xC0380045 + ERROR_VOLMGR_VOLUME_ID_INVALID syscall.Errno = 0xC0380046 + ERROR_VOLMGR_VOLUME_LENGTH_INVALID syscall.Errno = 0xC0380047 + ERROR_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE syscall.Errno = 0xC0380048 + ERROR_VOLMGR_VOLUME_NOT_MIRRORED syscall.Errno = 0xC0380049 + ERROR_VOLMGR_VOLUME_NOT_RETAINED syscall.Errno = 0xC038004A + ERROR_VOLMGR_VOLUME_OFFLINE syscall.Errno = 0xC038004B + ERROR_VOLMGR_VOLUME_RETAINED syscall.Errno = 0xC038004C + ERROR_VOLMGR_NUMBER_OF_EXTENTS_INVALID syscall.Errno = 0xC038004D + ERROR_VOLMGR_DIFFERENT_SECTOR_SIZE syscall.Errno = 0xC038004E + ERROR_VOLMGR_BAD_BOOT_DISK syscall.Errno = 0xC038004F + ERROR_VOLMGR_PACK_CONFIG_OFFLINE syscall.Errno = 0xC0380050 + ERROR_VOLMGR_PACK_CONFIG_ONLINE syscall.Errno = 0xC0380051 + ERROR_VOLMGR_NOT_PRIMARY_PACK syscall.Errno = 0xC0380052 + ERROR_VOLMGR_PACK_LOG_UPDATE_FAILED syscall.Errno = 0xC0380053 + ERROR_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID syscall.Errno = 0xC0380054 + ERROR_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID syscall.Errno = 0xC0380055 + ERROR_VOLMGR_VOLUME_MIRRORED syscall.Errno = 0xC0380056 + ERROR_VOLMGR_PLEX_NOT_SIMPLE_SPANNED syscall.Errno = 0xC0380057 + ERROR_VOLMGR_NO_VALID_LOG_COPIES syscall.Errno = 0xC0380058 + ERROR_VOLMGR_PRIMARY_PACK_PRESENT syscall.Errno = 0xC0380059 + ERROR_VOLMGR_NUMBER_OF_DISKS_INVALID syscall.Errno = 0xC038005A + ERROR_VOLMGR_MIRROR_NOT_SUPPORTED syscall.Errno = 0xC038005B + ERROR_VOLMGR_RAID5_NOT_SUPPORTED syscall.Errno = 0xC038005C + ERROR_BCD_NOT_ALL_ENTRIES_IMPORTED syscall.Errno = 0x80390001 + ERROR_BCD_TOO_MANY_ELEMENTS syscall.Errno = 0xC0390002 + ERROR_BCD_NOT_ALL_ENTRIES_SYNCHRONIZED syscall.Errno = 0x80390003 + ERROR_VHD_DRIVE_FOOTER_MISSING syscall.Errno = 0xC03A0001 + ERROR_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH syscall.Errno = 0xC03A0002 + ERROR_VHD_DRIVE_FOOTER_CORRUPT syscall.Errno = 0xC03A0003 + ERROR_VHD_FORMAT_UNKNOWN syscall.Errno = 0xC03A0004 + ERROR_VHD_FORMAT_UNSUPPORTED_VERSION syscall.Errno = 0xC03A0005 + ERROR_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH syscall.Errno = 0xC03A0006 + ERROR_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION syscall.Errno = 0xC03A0007 + ERROR_VHD_SPARSE_HEADER_CORRUPT syscall.Errno = 0xC03A0008 + ERROR_VHD_BLOCK_ALLOCATION_FAILURE syscall.Errno = 0xC03A0009 + ERROR_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT syscall.Errno = 0xC03A000A + ERROR_VHD_INVALID_BLOCK_SIZE syscall.Errno = 0xC03A000B + ERROR_VHD_BITMAP_MISMATCH syscall.Errno = 0xC03A000C + ERROR_VHD_PARENT_VHD_NOT_FOUND syscall.Errno = 0xC03A000D + ERROR_VHD_CHILD_PARENT_ID_MISMATCH syscall.Errno = 0xC03A000E + ERROR_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH syscall.Errno = 0xC03A000F + ERROR_VHD_METADATA_READ_FAILURE syscall.Errno = 0xC03A0010 + ERROR_VHD_METADATA_WRITE_FAILURE syscall.Errno = 0xC03A0011 + ERROR_VHD_INVALID_SIZE syscall.Errno = 0xC03A0012 + ERROR_VHD_INVALID_FILE_SIZE syscall.Errno = 0xC03A0013 + ERROR_VIRTDISK_PROVIDER_NOT_FOUND syscall.Errno = 0xC03A0014 + ERROR_VIRTDISK_NOT_VIRTUAL_DISK syscall.Errno = 0xC03A0015 + ERROR_VHD_PARENT_VHD_ACCESS_DENIED syscall.Errno = 0xC03A0016 + ERROR_VHD_CHILD_PARENT_SIZE_MISMATCH syscall.Errno = 0xC03A0017 + ERROR_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED syscall.Errno = 0xC03A0018 + ERROR_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT syscall.Errno = 0xC03A0019 + ERROR_VIRTUAL_DISK_LIMITATION syscall.Errno = 0xC03A001A + ERROR_VHD_INVALID_TYPE syscall.Errno = 0xC03A001B + ERROR_VHD_INVALID_STATE syscall.Errno = 0xC03A001C + ERROR_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE syscall.Errno = 0xC03A001D + ERROR_VIRTDISK_DISK_ALREADY_OWNED syscall.Errno = 0xC03A001E + ERROR_VIRTDISK_DISK_ONLINE_AND_WRITABLE syscall.Errno = 0xC03A001F + ERROR_CTLOG_TRACKING_NOT_INITIALIZED syscall.Errno = 0xC03A0020 + ERROR_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE syscall.Errno = 0xC03A0021 + ERROR_CTLOG_VHD_CHANGED_OFFLINE syscall.Errno = 0xC03A0022 + ERROR_CTLOG_INVALID_TRACKING_STATE syscall.Errno = 0xC03A0023 + ERROR_CTLOG_INCONSISTENT_TRACKING_FILE syscall.Errno = 0xC03A0024 + ERROR_VHD_RESIZE_WOULD_TRUNCATE_DATA syscall.Errno = 0xC03A0025 + ERROR_VHD_COULD_NOT_COMPUTE_MINIMUM_VIRTUAL_SIZE syscall.Errno = 0xC03A0026 + ERROR_VHD_ALREADY_AT_OR_BELOW_MINIMUM_VIRTUAL_SIZE syscall.Errno = 0xC03A0027 + ERROR_VHD_METADATA_FULL syscall.Errno = 0xC03A0028 + ERROR_VHD_INVALID_CHANGE_TRACKING_ID syscall.Errno = 0xC03A0029 + ERROR_VHD_CHANGE_TRACKING_DISABLED syscall.Errno = 0xC03A002A + ERROR_VHD_MISSING_CHANGE_TRACKING_INFORMATION syscall.Errno = 0xC03A0030 + ERROR_QUERY_STORAGE_ERROR syscall.Errno = 0x803A0001 + HCN_E_NETWORK_NOT_FOUND Handle = 0x803B0001 + HCN_E_ENDPOINT_NOT_FOUND Handle = 0x803B0002 + HCN_E_LAYER_NOT_FOUND Handle = 0x803B0003 + HCN_E_SWITCH_NOT_FOUND Handle = 0x803B0004 + HCN_E_SUBNET_NOT_FOUND Handle = 0x803B0005 + HCN_E_ADAPTER_NOT_FOUND Handle = 0x803B0006 + HCN_E_PORT_NOT_FOUND Handle = 0x803B0007 + HCN_E_POLICY_NOT_FOUND Handle = 0x803B0008 + HCN_E_VFP_PORTSETTING_NOT_FOUND Handle = 0x803B0009 + HCN_E_INVALID_NETWORK Handle = 0x803B000A + HCN_E_INVALID_NETWORK_TYPE Handle = 0x803B000B + HCN_E_INVALID_ENDPOINT Handle = 0x803B000C + HCN_E_INVALID_POLICY Handle = 0x803B000D + HCN_E_INVALID_POLICY_TYPE Handle = 0x803B000E + HCN_E_INVALID_REMOTE_ENDPOINT_OPERATION Handle = 0x803B000F + HCN_E_NETWORK_ALREADY_EXISTS Handle = 0x803B0010 + HCN_E_LAYER_ALREADY_EXISTS Handle = 0x803B0011 + HCN_E_POLICY_ALREADY_EXISTS Handle = 0x803B0012 + HCN_E_PORT_ALREADY_EXISTS Handle = 0x803B0013 + HCN_E_ENDPOINT_ALREADY_ATTACHED Handle = 0x803B0014 + HCN_E_REQUEST_UNSUPPORTED Handle = 0x803B0015 + HCN_E_MAPPING_NOT_SUPPORTED Handle = 0x803B0016 + HCN_E_DEGRADED_OPERATION Handle = 0x803B0017 + HCN_E_SHARED_SWITCH_MODIFICATION Handle = 0x803B0018 + HCN_E_GUID_CONVERSION_FAILURE Handle = 0x803B0019 + HCN_E_REGKEY_FAILURE Handle = 0x803B001A + HCN_E_INVALID_JSON Handle = 0x803B001B + HCN_E_INVALID_JSON_REFERENCE Handle = 0x803B001C + HCN_E_ENDPOINT_SHARING_DISABLED Handle = 0x803B001D + HCN_E_INVALID_IP Handle = 0x803B001E + HCN_E_SWITCH_EXTENSION_NOT_FOUND Handle = 0x803B001F + HCN_E_MANAGER_STOPPED Handle = 0x803B0020 + GCN_E_MODULE_NOT_FOUND Handle = 0x803B0021 + GCN_E_NO_REQUEST_HANDLERS Handle = 0x803B0022 + GCN_E_REQUEST_UNSUPPORTED Handle = 0x803B0023 + GCN_E_RUNTIMEKEYS_FAILED Handle = 0x803B0024 + GCN_E_NETADAPTER_TIMEOUT Handle = 0x803B0025 + GCN_E_NETADAPTER_NOT_FOUND Handle = 0x803B0026 + GCN_E_NETCOMPARTMENT_NOT_FOUND Handle = 0x803B0027 + GCN_E_NETINTERFACE_NOT_FOUND Handle = 0x803B0028 + GCN_E_DEFAULTNAMESPACE_EXISTS Handle = 0x803B0029 + HCN_E_ICS_DISABLED Handle = 0x803B002A + HCN_E_ENDPOINT_NAMESPACE_ALREADY_EXISTS Handle = 0x803B002B + HCN_E_ENTITY_HAS_REFERENCES Handle = 0x803B002C + HCN_E_INVALID_INTERNAL_PORT Handle = 0x803B002D + HCN_E_NAMESPACE_ATTACH_FAILED Handle = 0x803B002E + HCN_E_ADDR_INVALID_OR_RESERVED Handle = 0x803B002F + SDIAG_E_CANCELLED syscall.Errno = 0x803C0100 + SDIAG_E_SCRIPT syscall.Errno = 0x803C0101 + SDIAG_E_POWERSHELL syscall.Errno = 0x803C0102 + SDIAG_E_MANAGEDHOST syscall.Errno = 0x803C0103 + SDIAG_E_NOVERIFIER syscall.Errno = 0x803C0104 + SDIAG_S_CANNOTRUN syscall.Errno = 0x003C0105 + SDIAG_E_DISABLED syscall.Errno = 0x803C0106 + SDIAG_E_TRUST syscall.Errno = 0x803C0107 + SDIAG_E_CANNOTRUN syscall.Errno = 0x803C0108 + SDIAG_E_VERSION syscall.Errno = 0x803C0109 + SDIAG_E_RESOURCE syscall.Errno = 0x803C010A + SDIAG_E_ROOTCAUSE syscall.Errno = 0x803C010B + WPN_E_CHANNEL_CLOSED Handle = 0x803E0100 + WPN_E_CHANNEL_REQUEST_NOT_COMPLETE Handle = 0x803E0101 + WPN_E_INVALID_APP Handle = 0x803E0102 + WPN_E_OUTSTANDING_CHANNEL_REQUEST Handle = 0x803E0103 + WPN_E_DUPLICATE_CHANNEL Handle = 0x803E0104 + WPN_E_PLATFORM_UNAVAILABLE Handle = 0x803E0105 + WPN_E_NOTIFICATION_POSTED Handle = 0x803E0106 + WPN_E_NOTIFICATION_HIDDEN Handle = 0x803E0107 + WPN_E_NOTIFICATION_NOT_POSTED Handle = 0x803E0108 + WPN_E_CLOUD_DISABLED Handle = 0x803E0109 + WPN_E_CLOUD_INCAPABLE Handle = 0x803E0110 + WPN_E_CLOUD_AUTH_UNAVAILABLE Handle = 0x803E011A + WPN_E_CLOUD_SERVICE_UNAVAILABLE Handle = 0x803E011B + WPN_E_FAILED_LOCK_SCREEN_UPDATE_INTIALIZATION Handle = 0x803E011C + WPN_E_NOTIFICATION_DISABLED Handle = 0x803E0111 + WPN_E_NOTIFICATION_INCAPABLE Handle = 0x803E0112 + WPN_E_INTERNET_INCAPABLE Handle = 0x803E0113 + WPN_E_NOTIFICATION_TYPE_DISABLED Handle = 0x803E0114 + WPN_E_NOTIFICATION_SIZE Handle = 0x803E0115 + WPN_E_TAG_SIZE Handle = 0x803E0116 + WPN_E_ACCESS_DENIED Handle = 0x803E0117 + WPN_E_DUPLICATE_REGISTRATION Handle = 0x803E0118 + WPN_E_PUSH_NOTIFICATION_INCAPABLE Handle = 0x803E0119 + WPN_E_DEV_ID_SIZE Handle = 0x803E0120 + WPN_E_TAG_ALPHANUMERIC Handle = 0x803E012A + WPN_E_INVALID_HTTP_STATUS_CODE Handle = 0x803E012B + WPN_E_OUT_OF_SESSION Handle = 0x803E0200 + WPN_E_POWER_SAVE Handle = 0x803E0201 + WPN_E_IMAGE_NOT_FOUND_IN_CACHE Handle = 0x803E0202 + WPN_E_ALL_URL_NOT_COMPLETED Handle = 0x803E0203 + WPN_E_INVALID_CLOUD_IMAGE Handle = 0x803E0204 + WPN_E_NOTIFICATION_ID_MATCHED Handle = 0x803E0205 + WPN_E_CALLBACK_ALREADY_REGISTERED Handle = 0x803E0206 + WPN_E_TOAST_NOTIFICATION_DROPPED Handle = 0x803E0207 + WPN_E_STORAGE_LOCKED Handle = 0x803E0208 + WPN_E_GROUP_SIZE Handle = 0x803E0209 + WPN_E_GROUP_ALPHANUMERIC Handle = 0x803E020A + WPN_E_CLOUD_DISABLED_FOR_APP Handle = 0x803E020B + E_MBN_CONTEXT_NOT_ACTIVATED Handle = 0x80548201 + E_MBN_BAD_SIM Handle = 0x80548202 + E_MBN_DATA_CLASS_NOT_AVAILABLE Handle = 0x80548203 + E_MBN_INVALID_ACCESS_STRING Handle = 0x80548204 + E_MBN_MAX_ACTIVATED_CONTEXTS Handle = 0x80548205 + E_MBN_PACKET_SVC_DETACHED Handle = 0x80548206 + E_MBN_PROVIDER_NOT_VISIBLE Handle = 0x80548207 + E_MBN_RADIO_POWER_OFF Handle = 0x80548208 + E_MBN_SERVICE_NOT_ACTIVATED Handle = 0x80548209 + E_MBN_SIM_NOT_INSERTED Handle = 0x8054820A + E_MBN_VOICE_CALL_IN_PROGRESS Handle = 0x8054820B + E_MBN_INVALID_CACHE Handle = 0x8054820C + E_MBN_NOT_REGISTERED Handle = 0x8054820D + E_MBN_PROVIDERS_NOT_FOUND Handle = 0x8054820E + E_MBN_PIN_NOT_SUPPORTED Handle = 0x8054820F + E_MBN_PIN_REQUIRED Handle = 0x80548210 + E_MBN_PIN_DISABLED Handle = 0x80548211 + E_MBN_FAILURE Handle = 0x80548212 + E_MBN_INVALID_PROFILE Handle = 0x80548218 + E_MBN_DEFAULT_PROFILE_EXIST Handle = 0x80548219 + E_MBN_SMS_ENCODING_NOT_SUPPORTED Handle = 0x80548220 + E_MBN_SMS_FILTER_NOT_SUPPORTED Handle = 0x80548221 + E_MBN_SMS_INVALID_MEMORY_INDEX Handle = 0x80548222 + E_MBN_SMS_LANG_NOT_SUPPORTED Handle = 0x80548223 + E_MBN_SMS_MEMORY_FAILURE Handle = 0x80548224 + E_MBN_SMS_NETWORK_TIMEOUT Handle = 0x80548225 + E_MBN_SMS_UNKNOWN_SMSC_ADDRESS Handle = 0x80548226 + E_MBN_SMS_FORMAT_NOT_SUPPORTED Handle = 0x80548227 + E_MBN_SMS_OPERATION_NOT_ALLOWED Handle = 0x80548228 + E_MBN_SMS_MEMORY_FULL Handle = 0x80548229 + PEER_E_IPV6_NOT_INSTALLED Handle = 0x80630001 + PEER_E_NOT_INITIALIZED Handle = 0x80630002 + PEER_E_CANNOT_START_SERVICE Handle = 0x80630003 + PEER_E_NOT_LICENSED Handle = 0x80630004 + PEER_E_INVALID_GRAPH Handle = 0x80630010 + PEER_E_DBNAME_CHANGED Handle = 0x80630011 + PEER_E_DUPLICATE_GRAPH Handle = 0x80630012 + PEER_E_GRAPH_NOT_READY Handle = 0x80630013 + PEER_E_GRAPH_SHUTTING_DOWN Handle = 0x80630014 + PEER_E_GRAPH_IN_USE Handle = 0x80630015 + PEER_E_INVALID_DATABASE Handle = 0x80630016 + PEER_E_TOO_MANY_ATTRIBUTES Handle = 0x80630017 + PEER_E_CONNECTION_NOT_FOUND Handle = 0x80630103 + PEER_E_CONNECT_SELF Handle = 0x80630106 + PEER_E_ALREADY_LISTENING Handle = 0x80630107 + PEER_E_NODE_NOT_FOUND Handle = 0x80630108 + PEER_E_CONNECTION_FAILED Handle = 0x80630109 + PEER_E_CONNECTION_NOT_AUTHENTICATED Handle = 0x8063010A + PEER_E_CONNECTION_REFUSED Handle = 0x8063010B + PEER_E_CLASSIFIER_TOO_LONG Handle = 0x80630201 + PEER_E_TOO_MANY_IDENTITIES Handle = 0x80630202 + PEER_E_NO_KEY_ACCESS Handle = 0x80630203 + PEER_E_GROUPS_EXIST Handle = 0x80630204 + PEER_E_RECORD_NOT_FOUND Handle = 0x80630301 + PEER_E_DATABASE_ACCESSDENIED Handle = 0x80630302 + PEER_E_DBINITIALIZATION_FAILED Handle = 0x80630303 + PEER_E_MAX_RECORD_SIZE_EXCEEDED Handle = 0x80630304 + PEER_E_DATABASE_ALREADY_PRESENT Handle = 0x80630305 + PEER_E_DATABASE_NOT_PRESENT Handle = 0x80630306 + PEER_E_IDENTITY_NOT_FOUND Handle = 0x80630401 + PEER_E_EVENT_HANDLE_NOT_FOUND Handle = 0x80630501 + PEER_E_INVALID_SEARCH Handle = 0x80630601 + PEER_E_INVALID_ATTRIBUTES Handle = 0x80630602 + PEER_E_INVITATION_NOT_TRUSTED Handle = 0x80630701 + PEER_E_CHAIN_TOO_LONG Handle = 0x80630703 + PEER_E_INVALID_TIME_PERIOD Handle = 0x80630705 + PEER_E_CIRCULAR_CHAIN_DETECTED Handle = 0x80630706 + PEER_E_CERT_STORE_CORRUPTED Handle = 0x80630801 + PEER_E_NO_CLOUD Handle = 0x80631001 + PEER_E_CLOUD_NAME_AMBIGUOUS Handle = 0x80631005 + PEER_E_INVALID_RECORD Handle = 0x80632010 + PEER_E_NOT_AUTHORIZED Handle = 0x80632020 + PEER_E_PASSWORD_DOES_NOT_MEET_POLICY Handle = 0x80632021 + PEER_E_DEFERRED_VALIDATION Handle = 0x80632030 + PEER_E_INVALID_GROUP_PROPERTIES Handle = 0x80632040 + PEER_E_INVALID_PEER_NAME Handle = 0x80632050 + PEER_E_INVALID_CLASSIFIER Handle = 0x80632060 + PEER_E_INVALID_FRIENDLY_NAME Handle = 0x80632070 + PEER_E_INVALID_ROLE_PROPERTY Handle = 0x80632071 + PEER_E_INVALID_CLASSIFIER_PROPERTY Handle = 0x80632072 + PEER_E_INVALID_RECORD_EXPIRATION Handle = 0x80632080 + PEER_E_INVALID_CREDENTIAL_INFO Handle = 0x80632081 + PEER_E_INVALID_CREDENTIAL Handle = 0x80632082 + PEER_E_INVALID_RECORD_SIZE Handle = 0x80632083 + PEER_E_UNSUPPORTED_VERSION Handle = 0x80632090 + PEER_E_GROUP_NOT_READY Handle = 0x80632091 + PEER_E_GROUP_IN_USE Handle = 0x80632092 + PEER_E_INVALID_GROUP Handle = 0x80632093 + PEER_E_NO_MEMBERS_FOUND Handle = 0x80632094 + PEER_E_NO_MEMBER_CONNECTIONS Handle = 0x80632095 + PEER_E_UNABLE_TO_LISTEN Handle = 0x80632096 + PEER_E_IDENTITY_DELETED Handle = 0x806320A0 + PEER_E_SERVICE_NOT_AVAILABLE Handle = 0x806320A1 + PEER_E_CONTACT_NOT_FOUND Handle = 0x80636001 + PEER_S_GRAPH_DATA_CREATED Handle = 0x00630001 + PEER_S_NO_EVENT_DATA Handle = 0x00630002 + PEER_S_ALREADY_CONNECTED Handle = 0x00632000 + PEER_S_SUBSCRIPTION_EXISTS Handle = 0x00636000 + PEER_S_NO_CONNECTIVITY Handle = 0x00630005 + PEER_S_ALREADY_A_MEMBER Handle = 0x00630006 + PEER_E_CANNOT_CONVERT_PEER_NAME Handle = 0x80634001 + PEER_E_INVALID_PEER_HOST_NAME Handle = 0x80634002 + PEER_E_NO_MORE Handle = 0x80634003 + PEER_E_PNRP_DUPLICATE_PEER_NAME Handle = 0x80634005 + PEER_E_INVITE_CANCELLED Handle = 0x80637000 + PEER_E_INVITE_RESPONSE_NOT_AVAILABLE Handle = 0x80637001 + PEER_E_NOT_SIGNED_IN Handle = 0x80637003 + PEER_E_PRIVACY_DECLINED Handle = 0x80637004 + PEER_E_TIMEOUT Handle = 0x80637005 + PEER_E_INVALID_ADDRESS Handle = 0x80637007 + PEER_E_FW_EXCEPTION_DISABLED Handle = 0x80637008 + PEER_E_FW_BLOCKED_BY_POLICY Handle = 0x80637009 + PEER_E_FW_BLOCKED_BY_SHIELDS_UP Handle = 0x8063700A + PEER_E_FW_DECLINED Handle = 0x8063700B + UI_E_CREATE_FAILED Handle = 0x802A0001 + UI_E_SHUTDOWN_CALLED Handle = 0x802A0002 + UI_E_ILLEGAL_REENTRANCY Handle = 0x802A0003 + UI_E_OBJECT_SEALED Handle = 0x802A0004 + UI_E_VALUE_NOT_SET Handle = 0x802A0005 + UI_E_VALUE_NOT_DETERMINED Handle = 0x802A0006 + UI_E_INVALID_OUTPUT Handle = 0x802A0007 + UI_E_BOOLEAN_EXPECTED Handle = 0x802A0008 + UI_E_DIFFERENT_OWNER Handle = 0x802A0009 + UI_E_AMBIGUOUS_MATCH Handle = 0x802A000A + UI_E_FP_OVERFLOW Handle = 0x802A000B + UI_E_WRONG_THREAD Handle = 0x802A000C + UI_E_STORYBOARD_ACTIVE Handle = 0x802A0101 + UI_E_STORYBOARD_NOT_PLAYING Handle = 0x802A0102 + UI_E_START_KEYFRAME_AFTER_END Handle = 0x802A0103 + UI_E_END_KEYFRAME_NOT_DETERMINED Handle = 0x802A0104 + UI_E_LOOPS_OVERLAP Handle = 0x802A0105 + UI_E_TRANSITION_ALREADY_USED Handle = 0x802A0106 + UI_E_TRANSITION_NOT_IN_STORYBOARD Handle = 0x802A0107 + UI_E_TRANSITION_ECLIPSED Handle = 0x802A0108 + UI_E_TIME_BEFORE_LAST_UPDATE Handle = 0x802A0109 + UI_E_TIMER_CLIENT_ALREADY_CONNECTED Handle = 0x802A010A + UI_E_INVALID_DIMENSION Handle = 0x802A010B + UI_E_PRIMITIVE_OUT_OF_BOUNDS Handle = 0x802A010C + UI_E_WINDOW_CLOSED Handle = 0x802A0201 + E_BLUETOOTH_ATT_INVALID_HANDLE Handle = 0x80650001 + E_BLUETOOTH_ATT_READ_NOT_PERMITTED Handle = 0x80650002 + E_BLUETOOTH_ATT_WRITE_NOT_PERMITTED Handle = 0x80650003 + E_BLUETOOTH_ATT_INVALID_PDU Handle = 0x80650004 + E_BLUETOOTH_ATT_INSUFFICIENT_AUTHENTICATION Handle = 0x80650005 + E_BLUETOOTH_ATT_REQUEST_NOT_SUPPORTED Handle = 0x80650006 + E_BLUETOOTH_ATT_INVALID_OFFSET Handle = 0x80650007 + E_BLUETOOTH_ATT_INSUFFICIENT_AUTHORIZATION Handle = 0x80650008 + E_BLUETOOTH_ATT_PREPARE_QUEUE_FULL Handle = 0x80650009 + E_BLUETOOTH_ATT_ATTRIBUTE_NOT_FOUND Handle = 0x8065000A + E_BLUETOOTH_ATT_ATTRIBUTE_NOT_LONG Handle = 0x8065000B + E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE Handle = 0x8065000C + E_BLUETOOTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH Handle = 0x8065000D + E_BLUETOOTH_ATT_UNLIKELY Handle = 0x8065000E + E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION Handle = 0x8065000F + E_BLUETOOTH_ATT_UNSUPPORTED_GROUP_TYPE Handle = 0x80650010 + E_BLUETOOTH_ATT_INSUFFICIENT_RESOURCES Handle = 0x80650011 + E_BLUETOOTH_ATT_UNKNOWN_ERROR Handle = 0x80651000 + E_AUDIO_ENGINE_NODE_NOT_FOUND Handle = 0x80660001 + E_HDAUDIO_EMPTY_CONNECTION_LIST Handle = 0x80660002 + E_HDAUDIO_CONNECTION_LIST_NOT_SUPPORTED Handle = 0x80660003 + E_HDAUDIO_NO_LOGICAL_DEVICES_CREATED Handle = 0x80660004 + E_HDAUDIO_NULL_LINKED_LIST_ENTRY Handle = 0x80660005 + STATEREPOSITORY_E_CONCURRENCY_LOCKING_FAILURE Handle = 0x80670001 + STATEREPOSITORY_E_STATEMENT_INPROGRESS Handle = 0x80670002 + STATEREPOSITORY_E_CONFIGURATION_INVALID Handle = 0x80670003 + STATEREPOSITORY_E_UNKNOWN_SCHEMA_VERSION Handle = 0x80670004 + STATEREPOSITORY_ERROR_DICTIONARY_CORRUPTED Handle = 0x80670005 + STATEREPOSITORY_E_BLOCKED Handle = 0x80670006 + STATEREPOSITORY_E_BUSY_RETRY Handle = 0x80670007 + STATEREPOSITORY_E_BUSY_RECOVERY_RETRY Handle = 0x80670008 + STATEREPOSITORY_E_LOCKED_RETRY Handle = 0x80670009 + STATEREPOSITORY_E_LOCKED_SHAREDCACHE_RETRY Handle = 0x8067000A + STATEREPOSITORY_E_TRANSACTION_REQUIRED Handle = 0x8067000B + STATEREPOSITORY_E_BUSY_TIMEOUT_EXCEEDED Handle = 0x8067000C + STATEREPOSITORY_E_BUSY_RECOVERY_TIMEOUT_EXCEEDED Handle = 0x8067000D + STATEREPOSITORY_E_LOCKED_TIMEOUT_EXCEEDED Handle = 0x8067000E + STATEREPOSITORY_E_LOCKED_SHAREDCACHE_TIMEOUT_EXCEEDED Handle = 0x8067000F + STATEREPOSITORY_E_SERVICE_STOP_IN_PROGRESS Handle = 0x80670010 + STATEREPOSTORY_E_NESTED_TRANSACTION_NOT_SUPPORTED Handle = 0x80670011 + STATEREPOSITORY_ERROR_CACHE_CORRUPTED Handle = 0x80670012 + STATEREPOSITORY_TRANSACTION_CALLER_ID_CHANGED Handle = 0x00670013 + STATEREPOSITORY_TRANSACTION_IN_PROGRESS Handle = 0x00670014 + ERROR_SPACES_POOL_WAS_DELETED Handle = 0x00E70001 + ERROR_SPACES_FAULT_DOMAIN_TYPE_INVALID Handle = 0x80E70001 + ERROR_SPACES_INTERNAL_ERROR Handle = 0x80E70002 + ERROR_SPACES_RESILIENCY_TYPE_INVALID Handle = 0x80E70003 + ERROR_SPACES_DRIVE_SECTOR_SIZE_INVALID Handle = 0x80E70004 + ERROR_SPACES_DRIVE_REDUNDANCY_INVALID Handle = 0x80E70006 + ERROR_SPACES_NUMBER_OF_DATA_COPIES_INVALID Handle = 0x80E70007 + ERROR_SPACES_PARITY_LAYOUT_INVALID Handle = 0x80E70008 + ERROR_SPACES_INTERLEAVE_LENGTH_INVALID Handle = 0x80E70009 + ERROR_SPACES_NUMBER_OF_COLUMNS_INVALID Handle = 0x80E7000A + ERROR_SPACES_NOT_ENOUGH_DRIVES Handle = 0x80E7000B + ERROR_SPACES_EXTENDED_ERROR Handle = 0x80E7000C + ERROR_SPACES_PROVISIONING_TYPE_INVALID Handle = 0x80E7000D + ERROR_SPACES_ALLOCATION_SIZE_INVALID Handle = 0x80E7000E + ERROR_SPACES_ENCLOSURE_AWARE_INVALID Handle = 0x80E7000F + ERROR_SPACES_WRITE_CACHE_SIZE_INVALID Handle = 0x80E70010 + ERROR_SPACES_NUMBER_OF_GROUPS_INVALID Handle = 0x80E70011 + ERROR_SPACES_DRIVE_OPERATIONAL_STATE_INVALID Handle = 0x80E70012 + ERROR_SPACES_ENTRY_INCOMPLETE Handle = 0x80E70013 + ERROR_SPACES_ENTRY_INVALID Handle = 0x80E70014 + ERROR_VOLSNAP_BOOTFILE_NOT_VALID Handle = 0x80820001 + ERROR_VOLSNAP_ACTIVATION_TIMEOUT Handle = 0x80820002 + ERROR_TIERING_NOT_SUPPORTED_ON_VOLUME Handle = 0x80830001 + ERROR_TIERING_VOLUME_DISMOUNT_IN_PROGRESS Handle = 0x80830002 + ERROR_TIERING_STORAGE_TIER_NOT_FOUND Handle = 0x80830003 + ERROR_TIERING_INVALID_FILE_ID Handle = 0x80830004 + ERROR_TIERING_WRONG_CLUSTER_NODE Handle = 0x80830005 + ERROR_TIERING_ALREADY_PROCESSING Handle = 0x80830006 + ERROR_TIERING_CANNOT_PIN_OBJECT Handle = 0x80830007 + ERROR_TIERING_FILE_IS_NOT_PINNED Handle = 0x80830008 + ERROR_NOT_A_TIERED_VOLUME Handle = 0x80830009 + ERROR_ATTRIBUTE_NOT_PRESENT Handle = 0x8083000A + ERROR_SECCORE_INVALID_COMMAND Handle = 0xC0E80000 + ERROR_NO_APPLICABLE_APP_LICENSES_FOUND Handle = 0xC0EA0001 + ERROR_CLIP_LICENSE_NOT_FOUND Handle = 0xC0EA0002 + ERROR_CLIP_DEVICE_LICENSE_MISSING Handle = 0xC0EA0003 + ERROR_CLIP_LICENSE_INVALID_SIGNATURE Handle = 0xC0EA0004 + ERROR_CLIP_KEYHOLDER_LICENSE_MISSING_OR_INVALID Handle = 0xC0EA0005 + ERROR_CLIP_LICENSE_EXPIRED Handle = 0xC0EA0006 + ERROR_CLIP_LICENSE_SIGNED_BY_UNKNOWN_SOURCE Handle = 0xC0EA0007 + ERROR_CLIP_LICENSE_NOT_SIGNED Handle = 0xC0EA0008 + ERROR_CLIP_LICENSE_HARDWARE_ID_OUT_OF_TOLERANCE Handle = 0xC0EA0009 + ERROR_CLIP_LICENSE_DEVICE_ID_MISMATCH Handle = 0xC0EA000A + DXGI_STATUS_OCCLUDED Handle = 0x087A0001 + DXGI_STATUS_CLIPPED Handle = 0x087A0002 + DXGI_STATUS_NO_REDIRECTION Handle = 0x087A0004 + DXGI_STATUS_NO_DESKTOP_ACCESS Handle = 0x087A0005 + DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE Handle = 0x087A0006 + DXGI_STATUS_MODE_CHANGED Handle = 0x087A0007 + DXGI_STATUS_MODE_CHANGE_IN_PROGRESS Handle = 0x087A0008 + DXGI_ERROR_INVALID_CALL Handle = 0x887A0001 + DXGI_ERROR_NOT_FOUND Handle = 0x887A0002 + DXGI_ERROR_MORE_DATA Handle = 0x887A0003 + DXGI_ERROR_UNSUPPORTED Handle = 0x887A0004 + DXGI_ERROR_DEVICE_REMOVED Handle = 0x887A0005 + DXGI_ERROR_DEVICE_HUNG Handle = 0x887A0006 + DXGI_ERROR_DEVICE_RESET Handle = 0x887A0007 + DXGI_ERROR_WAS_STILL_DRAWING Handle = 0x887A000A + DXGI_ERROR_FRAME_STATISTICS_DISJOINT Handle = 0x887A000B + DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE Handle = 0x887A000C + DXGI_ERROR_DRIVER_INTERNAL_ERROR Handle = 0x887A0020 + DXGI_ERROR_NONEXCLUSIVE Handle = 0x887A0021 + DXGI_ERROR_NOT_CURRENTLY_AVAILABLE Handle = 0x887A0022 + DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED Handle = 0x887A0023 + DXGI_ERROR_REMOTE_OUTOFMEMORY Handle = 0x887A0024 + DXGI_ERROR_ACCESS_LOST Handle = 0x887A0026 + DXGI_ERROR_WAIT_TIMEOUT Handle = 0x887A0027 + DXGI_ERROR_SESSION_DISCONNECTED Handle = 0x887A0028 + DXGI_ERROR_RESTRICT_TO_OUTPUT_STALE Handle = 0x887A0029 + DXGI_ERROR_CANNOT_PROTECT_CONTENT Handle = 0x887A002A + DXGI_ERROR_ACCESS_DENIED Handle = 0x887A002B + DXGI_ERROR_NAME_ALREADY_EXISTS Handle = 0x887A002C + DXGI_ERROR_SDK_COMPONENT_MISSING Handle = 0x887A002D + DXGI_ERROR_NOT_CURRENT Handle = 0x887A002E + DXGI_ERROR_HW_PROTECTION_OUTOFMEMORY Handle = 0x887A0030 + DXGI_ERROR_DYNAMIC_CODE_POLICY_VIOLATION Handle = 0x887A0031 + DXGI_ERROR_NON_COMPOSITED_UI Handle = 0x887A0032 + DXGI_STATUS_UNOCCLUDED Handle = 0x087A0009 + DXGI_STATUS_DDA_WAS_STILL_DRAWING Handle = 0x087A000A + DXGI_ERROR_MODE_CHANGE_IN_PROGRESS Handle = 0x887A0025 + DXGI_STATUS_PRESENT_REQUIRED Handle = 0x087A002F + DXGI_ERROR_CACHE_CORRUPT Handle = 0x887A0033 + DXGI_ERROR_CACHE_FULL Handle = 0x887A0034 + DXGI_ERROR_CACHE_HASH_COLLISION Handle = 0x887A0035 + DXGI_ERROR_ALREADY_EXISTS Handle = 0x887A0036 + DXGI_DDI_ERR_WASSTILLDRAWING Handle = 0x887B0001 + DXGI_DDI_ERR_UNSUPPORTED Handle = 0x887B0002 + DXGI_DDI_ERR_NONEXCLUSIVE Handle = 0x887B0003 + D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS Handle = 0x88790001 + D3D10_ERROR_FILE_NOT_FOUND Handle = 0x88790002 + D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS Handle = 0x887C0001 + D3D11_ERROR_FILE_NOT_FOUND Handle = 0x887C0002 + D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS Handle = 0x887C0003 + D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD Handle = 0x887C0004 + D3D12_ERROR_ADAPTER_NOT_FOUND Handle = 0x887E0001 + D3D12_ERROR_DRIVER_VERSION_MISMATCH Handle = 0x887E0002 + D2DERR_WRONG_STATE Handle = 0x88990001 + D2DERR_NOT_INITIALIZED Handle = 0x88990002 + D2DERR_UNSUPPORTED_OPERATION Handle = 0x88990003 + D2DERR_SCANNER_FAILED Handle = 0x88990004 + D2DERR_SCREEN_ACCESS_DENIED Handle = 0x88990005 + D2DERR_DISPLAY_STATE_INVALID Handle = 0x88990006 + D2DERR_ZERO_VECTOR Handle = 0x88990007 + D2DERR_INTERNAL_ERROR Handle = 0x88990008 + D2DERR_DISPLAY_FORMAT_NOT_SUPPORTED Handle = 0x88990009 + D2DERR_INVALID_CALL Handle = 0x8899000A + D2DERR_NO_HARDWARE_DEVICE Handle = 0x8899000B + D2DERR_RECREATE_TARGET Handle = 0x8899000C + D2DERR_TOO_MANY_SHADER_ELEMENTS Handle = 0x8899000D + D2DERR_SHADER_COMPILE_FAILED Handle = 0x8899000E + D2DERR_MAX_TEXTURE_SIZE_EXCEEDED Handle = 0x8899000F + D2DERR_UNSUPPORTED_VERSION Handle = 0x88990010 + D2DERR_BAD_NUMBER Handle = 0x88990011 + D2DERR_WRONG_FACTORY Handle = 0x88990012 + D2DERR_LAYER_ALREADY_IN_USE Handle = 0x88990013 + D2DERR_POP_CALL_DID_NOT_MATCH_PUSH Handle = 0x88990014 + D2DERR_WRONG_RESOURCE_DOMAIN Handle = 0x88990015 + D2DERR_PUSH_POP_UNBALANCED Handle = 0x88990016 + D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT Handle = 0x88990017 + D2DERR_INCOMPATIBLE_BRUSH_TYPES Handle = 0x88990018 + D2DERR_WIN32_ERROR Handle = 0x88990019 + D2DERR_TARGET_NOT_GDI_COMPATIBLE Handle = 0x8899001A + D2DERR_TEXT_EFFECT_IS_WRONG_TYPE Handle = 0x8899001B + D2DERR_TEXT_RENDERER_NOT_RELEASED Handle = 0x8899001C + D2DERR_EXCEEDS_MAX_BITMAP_SIZE Handle = 0x8899001D + D2DERR_INVALID_GRAPH_CONFIGURATION Handle = 0x8899001E + D2DERR_INVALID_INTERNAL_GRAPH_CONFIGURATION Handle = 0x8899001F + D2DERR_CYCLIC_GRAPH Handle = 0x88990020 + D2DERR_BITMAP_CANNOT_DRAW Handle = 0x88990021 + D2DERR_OUTSTANDING_BITMAP_REFERENCES Handle = 0x88990022 + D2DERR_ORIGINAL_TARGET_NOT_BOUND Handle = 0x88990023 + D2DERR_INVALID_TARGET Handle = 0x88990024 + D2DERR_BITMAP_BOUND_AS_TARGET Handle = 0x88990025 + D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES Handle = 0x88990026 + D2DERR_INTERMEDIATE_TOO_LARGE Handle = 0x88990027 + D2DERR_EFFECT_IS_NOT_REGISTERED Handle = 0x88990028 + D2DERR_INVALID_PROPERTY Handle = 0x88990029 + D2DERR_NO_SUBPROPERTIES Handle = 0x8899002A + D2DERR_PRINT_JOB_CLOSED Handle = 0x8899002B + D2DERR_PRINT_FORMAT_NOT_SUPPORTED Handle = 0x8899002C + D2DERR_TOO_MANY_TRANSFORM_INPUTS Handle = 0x8899002D + D2DERR_INVALID_GLYPH_IMAGE Handle = 0x8899002E + DWRITE_E_FILEFORMAT Handle = 0x88985000 + DWRITE_E_UNEXPECTED Handle = 0x88985001 + DWRITE_E_NOFONT Handle = 0x88985002 + DWRITE_E_FILENOTFOUND Handle = 0x88985003 + DWRITE_E_FILEACCESS Handle = 0x88985004 + DWRITE_E_FONTCOLLECTIONOBSOLETE Handle = 0x88985005 + DWRITE_E_ALREADYREGISTERED Handle = 0x88985006 + DWRITE_E_CACHEFORMAT Handle = 0x88985007 + DWRITE_E_CACHEVERSION Handle = 0x88985008 + DWRITE_E_UNSUPPORTEDOPERATION Handle = 0x88985009 + DWRITE_E_TEXTRENDERERINCOMPATIBLE Handle = 0x8898500A + DWRITE_E_FLOWDIRECTIONCONFLICTS Handle = 0x8898500B + DWRITE_E_NOCOLOR Handle = 0x8898500C + DWRITE_E_REMOTEFONT Handle = 0x8898500D + DWRITE_E_DOWNLOADCANCELLED Handle = 0x8898500E + DWRITE_E_DOWNLOADFAILED Handle = 0x8898500F + DWRITE_E_TOOMANYDOWNLOADS Handle = 0x88985010 + WINCODEC_ERR_WRONGSTATE Handle = 0x88982F04 + WINCODEC_ERR_VALUEOUTOFRANGE Handle = 0x88982F05 + WINCODEC_ERR_UNKNOWNIMAGEFORMAT Handle = 0x88982F07 + WINCODEC_ERR_UNSUPPORTEDVERSION Handle = 0x88982F0B + WINCODEC_ERR_NOTINITIALIZED Handle = 0x88982F0C + WINCODEC_ERR_ALREADYLOCKED Handle = 0x88982F0D + WINCODEC_ERR_PROPERTYNOTFOUND Handle = 0x88982F40 + WINCODEC_ERR_PROPERTYNOTSUPPORTED Handle = 0x88982F41 + WINCODEC_ERR_PROPERTYSIZE Handle = 0x88982F42 + WINCODEC_ERR_CODECPRESENT Handle = 0x88982F43 + WINCODEC_ERR_CODECNOTHUMBNAIL Handle = 0x88982F44 + WINCODEC_ERR_PALETTEUNAVAILABLE Handle = 0x88982F45 + WINCODEC_ERR_CODECTOOMANYSCANLINES Handle = 0x88982F46 + WINCODEC_ERR_INTERNALERROR Handle = 0x88982F48 + WINCODEC_ERR_SOURCERECTDOESNOTMATCHDIMENSIONS Handle = 0x88982F49 + WINCODEC_ERR_COMPONENTNOTFOUND Handle = 0x88982F50 + WINCODEC_ERR_IMAGESIZEOUTOFRANGE Handle = 0x88982F51 + WINCODEC_ERR_TOOMUCHMETADATA Handle = 0x88982F52 + WINCODEC_ERR_BADIMAGE Handle = 0x88982F60 + WINCODEC_ERR_BADHEADER Handle = 0x88982F61 + WINCODEC_ERR_FRAMEMISSING Handle = 0x88982F62 + WINCODEC_ERR_BADMETADATAHEADER Handle = 0x88982F63 + WINCODEC_ERR_BADSTREAMDATA Handle = 0x88982F70 + WINCODEC_ERR_STREAMWRITE Handle = 0x88982F71 + WINCODEC_ERR_STREAMREAD Handle = 0x88982F72 + WINCODEC_ERR_STREAMNOTAVAILABLE Handle = 0x88982F73 + WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT Handle = 0x88982F80 + WINCODEC_ERR_UNSUPPORTEDOPERATION Handle = 0x88982F81 + WINCODEC_ERR_INVALIDREGISTRATION Handle = 0x88982F8A + WINCODEC_ERR_COMPONENTINITIALIZEFAILURE Handle = 0x88982F8B + WINCODEC_ERR_INSUFFICIENTBUFFER Handle = 0x88982F8C + WINCODEC_ERR_DUPLICATEMETADATAPRESENT Handle = 0x88982F8D + WINCODEC_ERR_PROPERTYUNEXPECTEDTYPE Handle = 0x88982F8E + WINCODEC_ERR_UNEXPECTEDSIZE Handle = 0x88982F8F + WINCODEC_ERR_INVALIDQUERYREQUEST Handle = 0x88982F90 + WINCODEC_ERR_UNEXPECTEDMETADATATYPE Handle = 0x88982F91 + WINCODEC_ERR_REQUESTONLYVALIDATMETADATAROOT Handle = 0x88982F92 + WINCODEC_ERR_INVALIDQUERYCHARACTER Handle = 0x88982F93 + WINCODEC_ERR_WIN32ERROR Handle = 0x88982F94 + WINCODEC_ERR_INVALIDPROGRESSIVELEVEL Handle = 0x88982F95 + WINCODEC_ERR_INVALIDJPEGSCANINDEX Handle = 0x88982F96 + MILERR_OBJECTBUSY Handle = 0x88980001 + MILERR_INSUFFICIENTBUFFER Handle = 0x88980002 + MILERR_WIN32ERROR Handle = 0x88980003 + MILERR_SCANNER_FAILED Handle = 0x88980004 + MILERR_SCREENACCESSDENIED Handle = 0x88980005 + MILERR_DISPLAYSTATEINVALID Handle = 0x88980006 + MILERR_NONINVERTIBLEMATRIX Handle = 0x88980007 + MILERR_ZEROVECTOR Handle = 0x88980008 + MILERR_TERMINATED Handle = 0x88980009 + MILERR_BADNUMBER Handle = 0x8898000A + MILERR_INTERNALERROR Handle = 0x88980080 + MILERR_DISPLAYFORMATNOTSUPPORTED Handle = 0x88980084 + MILERR_INVALIDCALL Handle = 0x88980085 + MILERR_ALREADYLOCKED Handle = 0x88980086 + MILERR_NOTLOCKED Handle = 0x88980087 + MILERR_DEVICECANNOTRENDERTEXT Handle = 0x88980088 + MILERR_GLYPHBITMAPMISSED Handle = 0x88980089 + MILERR_MALFORMEDGLYPHCACHE Handle = 0x8898008A + MILERR_GENERIC_IGNORE Handle = 0x8898008B + MILERR_MALFORMED_GUIDELINE_DATA Handle = 0x8898008C + MILERR_NO_HARDWARE_DEVICE Handle = 0x8898008D + MILERR_NEED_RECREATE_AND_PRESENT Handle = 0x8898008E + MILERR_ALREADY_INITIALIZED Handle = 0x8898008F + MILERR_MISMATCHED_SIZE Handle = 0x88980090 + MILERR_NO_REDIRECTION_SURFACE_AVAILABLE Handle = 0x88980091 + MILERR_REMOTING_NOT_SUPPORTED Handle = 0x88980092 + MILERR_QUEUED_PRESENT_NOT_SUPPORTED Handle = 0x88980093 + MILERR_NOT_QUEUING_PRESENTS Handle = 0x88980094 + MILERR_NO_REDIRECTION_SURFACE_RETRY_LATER Handle = 0x88980095 + MILERR_TOOMANYSHADERELEMNTS Handle = 0x88980096 + MILERR_MROW_READLOCK_FAILED Handle = 0x88980097 + MILERR_MROW_UPDATE_FAILED Handle = 0x88980098 + MILERR_SHADER_COMPILE_FAILED Handle = 0x88980099 + MILERR_MAX_TEXTURE_SIZE_EXCEEDED Handle = 0x8898009A + MILERR_QPC_TIME_WENT_BACKWARD Handle = 0x8898009B + MILERR_DXGI_ENUMERATION_OUT_OF_SYNC Handle = 0x8898009D + MILERR_ADAPTER_NOT_FOUND Handle = 0x8898009E + MILERR_COLORSPACE_NOT_SUPPORTED Handle = 0x8898009F + MILERR_PREFILTER_NOT_SUPPORTED Handle = 0x889800A0 + MILERR_DISPLAYID_ACCESS_DENIED Handle = 0x889800A1 + UCEERR_INVALIDPACKETHEADER Handle = 0x88980400 + UCEERR_UNKNOWNPACKET Handle = 0x88980401 + UCEERR_ILLEGALPACKET Handle = 0x88980402 + UCEERR_MALFORMEDPACKET Handle = 0x88980403 + UCEERR_ILLEGALHANDLE Handle = 0x88980404 + UCEERR_HANDLELOOKUPFAILED Handle = 0x88980405 + UCEERR_RENDERTHREADFAILURE Handle = 0x88980406 + UCEERR_CTXSTACKFRSTTARGETNULL Handle = 0x88980407 + UCEERR_CONNECTIONIDLOOKUPFAILED Handle = 0x88980408 + UCEERR_BLOCKSFULL Handle = 0x88980409 + UCEERR_MEMORYFAILURE Handle = 0x8898040A + UCEERR_PACKETRECORDOUTOFRANGE Handle = 0x8898040B + UCEERR_ILLEGALRECORDTYPE Handle = 0x8898040C + UCEERR_OUTOFHANDLES Handle = 0x8898040D + UCEERR_UNCHANGABLE_UPDATE_ATTEMPTED Handle = 0x8898040E + UCEERR_NO_MULTIPLE_WORKER_THREADS Handle = 0x8898040F + UCEERR_REMOTINGNOTSUPPORTED Handle = 0x88980410 + UCEERR_MISSINGENDCOMMAND Handle = 0x88980411 + UCEERR_MISSINGBEGINCOMMAND Handle = 0x88980412 + UCEERR_CHANNELSYNCTIMEDOUT Handle = 0x88980413 + UCEERR_CHANNELSYNCABANDONED Handle = 0x88980414 + UCEERR_UNSUPPORTEDTRANSPORTVERSION Handle = 0x88980415 + UCEERR_TRANSPORTUNAVAILABLE Handle = 0x88980416 + UCEERR_FEEDBACK_UNSUPPORTED Handle = 0x88980417 + UCEERR_COMMANDTRANSPORTDENIED Handle = 0x88980418 + UCEERR_GRAPHICSSTREAMUNAVAILABLE Handle = 0x88980419 + UCEERR_GRAPHICSSTREAMALREADYOPEN Handle = 0x88980420 + UCEERR_TRANSPORTDISCONNECTED Handle = 0x88980421 + UCEERR_TRANSPORTOVERLOADED Handle = 0x88980422 + UCEERR_PARTITION_ZOMBIED Handle = 0x88980423 + MILAVERR_NOCLOCK Handle = 0x88980500 + MILAVERR_NOMEDIATYPE Handle = 0x88980501 + MILAVERR_NOVIDEOMIXER Handle = 0x88980502 + MILAVERR_NOVIDEOPRESENTER Handle = 0x88980503 + MILAVERR_NOREADYFRAMES Handle = 0x88980504 + MILAVERR_MODULENOTLOADED Handle = 0x88980505 + MILAVERR_WMPFACTORYNOTREGISTERED Handle = 0x88980506 + MILAVERR_INVALIDWMPVERSION Handle = 0x88980507 + MILAVERR_INSUFFICIENTVIDEORESOURCES Handle = 0x88980508 + MILAVERR_VIDEOACCELERATIONNOTAVAILABLE Handle = 0x88980509 + MILAVERR_REQUESTEDTEXTURETOOBIG Handle = 0x8898050A + MILAVERR_SEEKFAILED Handle = 0x8898050B + MILAVERR_UNEXPECTEDWMPFAILURE Handle = 0x8898050C + MILAVERR_MEDIAPLAYERCLOSED Handle = 0x8898050D + MILAVERR_UNKNOWNHARDWAREERROR Handle = 0x8898050E + MILEFFECTSERR_UNKNOWNPROPERTY Handle = 0x8898060E + MILEFFECTSERR_EFFECTNOTPARTOFGROUP Handle = 0x8898060F + MILEFFECTSERR_NOINPUTSOURCEATTACHED Handle = 0x88980610 + MILEFFECTSERR_CONNECTORNOTCONNECTED Handle = 0x88980611 + MILEFFECTSERR_CONNECTORNOTASSOCIATEDWITHEFFECT Handle = 0x88980612 + MILEFFECTSERR_RESERVED Handle = 0x88980613 + MILEFFECTSERR_CYCLEDETECTED Handle = 0x88980614 + MILEFFECTSERR_EFFECTINMORETHANONEGRAPH Handle = 0x88980615 + MILEFFECTSERR_EFFECTALREADYINAGRAPH Handle = 0x88980616 + MILEFFECTSERR_EFFECTHASNOCHILDREN Handle = 0x88980617 + MILEFFECTSERR_ALREADYATTACHEDTOLISTENER Handle = 0x88980618 + MILEFFECTSERR_NOTAFFINETRANSFORM Handle = 0x88980619 + MILEFFECTSERR_EMPTYBOUNDS Handle = 0x8898061A + MILEFFECTSERR_OUTPUTSIZETOOLARGE Handle = 0x8898061B + DWMERR_STATE_TRANSITION_FAILED Handle = 0x88980700 + DWMERR_THEME_FAILED Handle = 0x88980701 + DWMERR_CATASTROPHIC_FAILURE Handle = 0x88980702 + DCOMPOSITION_ERROR_WINDOW_ALREADY_COMPOSED Handle = 0x88980800 + DCOMPOSITION_ERROR_SURFACE_BEING_RENDERED Handle = 0x88980801 + DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED Handle = 0x88980802 + ONL_E_INVALID_AUTHENTICATION_TARGET Handle = 0x80860001 + ONL_E_ACCESS_DENIED_BY_TOU Handle = 0x80860002 + ONL_E_INVALID_APPLICATION Handle = 0x80860003 + ONL_E_PASSWORD_UPDATE_REQUIRED Handle = 0x80860004 + ONL_E_ACCOUNT_UPDATE_REQUIRED Handle = 0x80860005 + ONL_E_FORCESIGNIN Handle = 0x80860006 + ONL_E_ACCOUNT_LOCKED Handle = 0x80860007 + ONL_E_PARENTAL_CONSENT_REQUIRED Handle = 0x80860008 + ONL_E_EMAIL_VERIFICATION_REQUIRED Handle = 0x80860009 + ONL_E_ACCOUNT_SUSPENDED_COMPROIMISE Handle = 0x8086000A + ONL_E_ACCOUNT_SUSPENDED_ABUSE Handle = 0x8086000B + ONL_E_ACTION_REQUIRED Handle = 0x8086000C + ONL_CONNECTION_COUNT_LIMIT Handle = 0x8086000D + ONL_E_CONNECTED_ACCOUNT_CAN_NOT_SIGNOUT Handle = 0x8086000E + ONL_E_USER_AUTHENTICATION_REQUIRED Handle = 0x8086000F + ONL_E_REQUEST_THROTTLED Handle = 0x80860010 + FA_E_MAX_PERSISTED_ITEMS_REACHED Handle = 0x80270220 + FA_E_HOMEGROUP_NOT_AVAILABLE Handle = 0x80270222 + E_MONITOR_RESOLUTION_TOO_LOW Handle = 0x80270250 + E_ELEVATED_ACTIVATION_NOT_SUPPORTED Handle = 0x80270251 + E_UAC_DISABLED Handle = 0x80270252 + E_FULL_ADMIN_NOT_SUPPORTED Handle = 0x80270253 + E_APPLICATION_NOT_REGISTERED Handle = 0x80270254 + E_MULTIPLE_EXTENSIONS_FOR_APPLICATION Handle = 0x80270255 + E_MULTIPLE_PACKAGES_FOR_FAMILY Handle = 0x80270256 + E_APPLICATION_MANAGER_NOT_RUNNING Handle = 0x80270257 + S_STORE_LAUNCHED_FOR_REMEDIATION Handle = 0x00270258 + S_APPLICATION_ACTIVATION_ERROR_HANDLED_BY_DIALOG Handle = 0x00270259 + E_APPLICATION_ACTIVATION_TIMED_OUT Handle = 0x8027025A + E_APPLICATION_ACTIVATION_EXEC_FAILURE Handle = 0x8027025B + E_APPLICATION_TEMPORARY_LICENSE_ERROR Handle = 0x8027025C + E_APPLICATION_TRIAL_LICENSE_EXPIRED Handle = 0x8027025D + E_SKYDRIVE_ROOT_TARGET_FILE_SYSTEM_NOT_SUPPORTED Handle = 0x80270260 + E_SKYDRIVE_ROOT_TARGET_OVERLAP Handle = 0x80270261 + E_SKYDRIVE_ROOT_TARGET_CANNOT_INDEX Handle = 0x80270262 + E_SKYDRIVE_FILE_NOT_UPLOADED Handle = 0x80270263 + E_SKYDRIVE_UPDATE_AVAILABILITY_FAIL Handle = 0x80270264 + E_SKYDRIVE_ROOT_TARGET_VOLUME_ROOT_NOT_SUPPORTED Handle = 0x80270265 + E_SYNCENGINE_FILE_SIZE_OVER_LIMIT Handle = 0x8802B001 + E_SYNCENGINE_FILE_SIZE_EXCEEDS_REMAINING_QUOTA Handle = 0x8802B002 + E_SYNCENGINE_UNSUPPORTED_FILE_NAME Handle = 0x8802B003 + E_SYNCENGINE_FOLDER_ITEM_COUNT_LIMIT_EXCEEDED Handle = 0x8802B004 + E_SYNCENGINE_FILE_SYNC_PARTNER_ERROR Handle = 0x8802B005 + E_SYNCENGINE_SYNC_PAUSED_BY_SERVICE Handle = 0x8802B006 + E_SYNCENGINE_FILE_IDENTIFIER_UNKNOWN Handle = 0x8802C002 + E_SYNCENGINE_SERVICE_AUTHENTICATION_FAILED Handle = 0x8802C003 + E_SYNCENGINE_UNKNOWN_SERVICE_ERROR Handle = 0x8802C004 + E_SYNCENGINE_SERVICE_RETURNED_UNEXPECTED_SIZE Handle = 0x8802C005 + E_SYNCENGINE_REQUEST_BLOCKED_BY_SERVICE Handle = 0x8802C006 + E_SYNCENGINE_REQUEST_BLOCKED_DUE_TO_CLIENT_ERROR Handle = 0x8802C007 + E_SYNCENGINE_FOLDER_INACCESSIBLE Handle = 0x8802D001 + E_SYNCENGINE_UNSUPPORTED_FOLDER_NAME Handle = 0x8802D002 + E_SYNCENGINE_UNSUPPORTED_MARKET Handle = 0x8802D003 + E_SYNCENGINE_PATH_LENGTH_LIMIT_EXCEEDED Handle = 0x8802D004 + E_SYNCENGINE_REMOTE_PATH_LENGTH_LIMIT_EXCEEDED Handle = 0x8802D005 + E_SYNCENGINE_CLIENT_UPDATE_NEEDED Handle = 0x8802D006 + E_SYNCENGINE_PROXY_AUTHENTICATION_REQUIRED Handle = 0x8802D007 + E_SYNCENGINE_STORAGE_SERVICE_PROVISIONING_FAILED Handle = 0x8802D008 + E_SYNCENGINE_UNSUPPORTED_REPARSE_POINT Handle = 0x8802D009 + E_SYNCENGINE_STORAGE_SERVICE_BLOCKED Handle = 0x8802D00A + E_SYNCENGINE_FOLDER_IN_REDIRECTION Handle = 0x8802D00B + EAS_E_POLICY_NOT_MANAGED_BY_OS Handle = 0x80550001 + EAS_E_POLICY_COMPLIANT_WITH_ACTIONS Handle = 0x80550002 + EAS_E_REQUESTED_POLICY_NOT_ENFORCEABLE Handle = 0x80550003 + EAS_E_CURRENT_USER_HAS_BLANK_PASSWORD Handle = 0x80550004 + EAS_E_REQUESTED_POLICY_PASSWORD_EXPIRATION_INCOMPATIBLE Handle = 0x80550005 + EAS_E_USER_CANNOT_CHANGE_PASSWORD Handle = 0x80550006 + EAS_E_ADMINS_HAVE_BLANK_PASSWORD Handle = 0x80550007 + EAS_E_ADMINS_CANNOT_CHANGE_PASSWORD Handle = 0x80550008 + EAS_E_LOCAL_CONTROLLED_USERS_CANNOT_CHANGE_PASSWORD Handle = 0x80550009 + EAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CONNECTED_ADMINS Handle = 0x8055000A + EAS_E_CONNECTED_ADMINS_NEED_TO_CHANGE_PASSWORD Handle = 0x8055000B + EAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CURRENT_CONNECTED_USER Handle = 0x8055000C + EAS_E_CURRENT_CONNECTED_USER_NEED_TO_CHANGE_PASSWORD Handle = 0x8055000D + WEB_E_UNSUPPORTED_FORMAT Handle = 0x83750001 + WEB_E_INVALID_XML Handle = 0x83750002 + WEB_E_MISSING_REQUIRED_ELEMENT Handle = 0x83750003 + WEB_E_MISSING_REQUIRED_ATTRIBUTE Handle = 0x83750004 + WEB_E_UNEXPECTED_CONTENT Handle = 0x83750005 + WEB_E_RESOURCE_TOO_LARGE Handle = 0x83750006 + WEB_E_INVALID_JSON_STRING Handle = 0x83750007 + WEB_E_INVALID_JSON_NUMBER Handle = 0x83750008 + WEB_E_JSON_VALUE_NOT_FOUND Handle = 0x83750009 + HTTP_E_STATUS_UNEXPECTED Handle = 0x80190001 + HTTP_E_STATUS_UNEXPECTED_REDIRECTION Handle = 0x80190003 + HTTP_E_STATUS_UNEXPECTED_CLIENT_ERROR Handle = 0x80190004 + HTTP_E_STATUS_UNEXPECTED_SERVER_ERROR Handle = 0x80190005 + HTTP_E_STATUS_AMBIGUOUS Handle = 0x8019012C + HTTP_E_STATUS_MOVED Handle = 0x8019012D + HTTP_E_STATUS_REDIRECT Handle = 0x8019012E + HTTP_E_STATUS_REDIRECT_METHOD Handle = 0x8019012F + HTTP_E_STATUS_NOT_MODIFIED Handle = 0x80190130 + HTTP_E_STATUS_USE_PROXY Handle = 0x80190131 + HTTP_E_STATUS_REDIRECT_KEEP_VERB Handle = 0x80190133 + HTTP_E_STATUS_BAD_REQUEST Handle = 0x80190190 + HTTP_E_STATUS_DENIED Handle = 0x80190191 + HTTP_E_STATUS_PAYMENT_REQ Handle = 0x80190192 + HTTP_E_STATUS_FORBIDDEN Handle = 0x80190193 + HTTP_E_STATUS_NOT_FOUND Handle = 0x80190194 + HTTP_E_STATUS_BAD_METHOD Handle = 0x80190195 + HTTP_E_STATUS_NONE_ACCEPTABLE Handle = 0x80190196 + HTTP_E_STATUS_PROXY_AUTH_REQ Handle = 0x80190197 + HTTP_E_STATUS_REQUEST_TIMEOUT Handle = 0x80190198 + HTTP_E_STATUS_CONFLICT Handle = 0x80190199 + HTTP_E_STATUS_GONE Handle = 0x8019019A + HTTP_E_STATUS_LENGTH_REQUIRED Handle = 0x8019019B + HTTP_E_STATUS_PRECOND_FAILED Handle = 0x8019019C + HTTP_E_STATUS_REQUEST_TOO_LARGE Handle = 0x8019019D + HTTP_E_STATUS_URI_TOO_LONG Handle = 0x8019019E + HTTP_E_STATUS_UNSUPPORTED_MEDIA Handle = 0x8019019F + HTTP_E_STATUS_RANGE_NOT_SATISFIABLE Handle = 0x801901A0 + HTTP_E_STATUS_EXPECTATION_FAILED Handle = 0x801901A1 + HTTP_E_STATUS_SERVER_ERROR Handle = 0x801901F4 + HTTP_E_STATUS_NOT_SUPPORTED Handle = 0x801901F5 + HTTP_E_STATUS_BAD_GATEWAY Handle = 0x801901F6 + HTTP_E_STATUS_SERVICE_UNAVAIL Handle = 0x801901F7 + HTTP_E_STATUS_GATEWAY_TIMEOUT Handle = 0x801901F8 + HTTP_E_STATUS_VERSION_NOT_SUP Handle = 0x801901F9 + E_INVALID_PROTOCOL_OPERATION Handle = 0x83760001 + E_INVALID_PROTOCOL_FORMAT Handle = 0x83760002 + E_PROTOCOL_EXTENSIONS_NOT_SUPPORTED Handle = 0x83760003 + E_SUBPROTOCOL_NOT_SUPPORTED Handle = 0x83760004 + E_PROTOCOL_VERSION_NOT_SUPPORTED Handle = 0x83760005 + INPUT_E_OUT_OF_ORDER Handle = 0x80400000 + INPUT_E_REENTRANCY Handle = 0x80400001 + INPUT_E_MULTIMODAL Handle = 0x80400002 + INPUT_E_PACKET Handle = 0x80400003 + INPUT_E_FRAME Handle = 0x80400004 + INPUT_E_HISTORY Handle = 0x80400005 + INPUT_E_DEVICE_INFO Handle = 0x80400006 + INPUT_E_TRANSFORM Handle = 0x80400007 + INPUT_E_DEVICE_PROPERTY Handle = 0x80400008 + INET_E_INVALID_URL Handle = 0x800C0002 + INET_E_NO_SESSION Handle = 0x800C0003 + INET_E_CANNOT_CONNECT Handle = 0x800C0004 + INET_E_RESOURCE_NOT_FOUND Handle = 0x800C0005 + INET_E_OBJECT_NOT_FOUND Handle = 0x800C0006 + INET_E_DATA_NOT_AVAILABLE Handle = 0x800C0007 + INET_E_DOWNLOAD_FAILURE Handle = 0x800C0008 + INET_E_AUTHENTICATION_REQUIRED Handle = 0x800C0009 + INET_E_NO_VALID_MEDIA Handle = 0x800C000A + INET_E_CONNECTION_TIMEOUT Handle = 0x800C000B + INET_E_INVALID_REQUEST Handle = 0x800C000C + INET_E_UNKNOWN_PROTOCOL Handle = 0x800C000D + INET_E_SECURITY_PROBLEM Handle = 0x800C000E + INET_E_CANNOT_LOAD_DATA Handle = 0x800C000F + INET_E_CANNOT_INSTANTIATE_OBJECT Handle = 0x800C0010 + INET_E_INVALID_CERTIFICATE Handle = 0x800C0019 + INET_E_REDIRECT_FAILED Handle = 0x800C0014 + INET_E_REDIRECT_TO_DIR Handle = 0x800C0015 + ERROR_DBG_CREATE_PROCESS_FAILURE_LOCKDOWN Handle = 0x80B00001 + ERROR_DBG_ATTACH_PROCESS_FAILURE_LOCKDOWN Handle = 0x80B00002 + ERROR_DBG_CONNECT_SERVER_FAILURE_LOCKDOWN Handle = 0x80B00003 + ERROR_DBG_START_SERVER_FAILURE_LOCKDOWN Handle = 0x80B00004 + ERROR_IO_PREEMPTED Handle = 0x89010001 + JSCRIPT_E_CANTEXECUTE Handle = 0x89020001 + WEP_E_NOT_PROVISIONED_ON_ALL_VOLUMES Handle = 0x88010001 + WEP_E_FIXED_DATA_NOT_SUPPORTED Handle = 0x88010002 + WEP_E_HARDWARE_NOT_COMPLIANT Handle = 0x88010003 + WEP_E_LOCK_NOT_CONFIGURED Handle = 0x88010004 + WEP_E_PROTECTION_SUSPENDED Handle = 0x88010005 + WEP_E_NO_LICENSE Handle = 0x88010006 + WEP_E_OS_NOT_PROTECTED Handle = 0x88010007 + WEP_E_UNEXPECTED_FAIL Handle = 0x88010008 + WEP_E_BUFFER_TOO_LARGE Handle = 0x88010009 + ERROR_SVHDX_ERROR_STORED Handle = 0xC05C0000 + ERROR_SVHDX_ERROR_NOT_AVAILABLE Handle = 0xC05CFF00 + ERROR_SVHDX_UNIT_ATTENTION_AVAILABLE Handle = 0xC05CFF01 + ERROR_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED Handle = 0xC05CFF02 + ERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED Handle = 0xC05CFF03 + ERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED Handle = 0xC05CFF04 + ERROR_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED Handle = 0xC05CFF05 + ERROR_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED Handle = 0xC05CFF06 + ERROR_SVHDX_RESERVATION_CONFLICT Handle = 0xC05CFF07 + ERROR_SVHDX_WRONG_FILE_TYPE Handle = 0xC05CFF08 + ERROR_SVHDX_VERSION_MISMATCH Handle = 0xC05CFF09 + ERROR_VHD_SHARED Handle = 0xC05CFF0A + ERROR_SVHDX_NO_INITIATOR Handle = 0xC05CFF0B + ERROR_VHDSET_BACKING_STORAGE_NOT_FOUND Handle = 0xC05CFF0C + ERROR_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP Handle = 0xC05D0000 + ERROR_SMB_BAD_CLUSTER_DIALECT Handle = 0xC05D0001 + WININET_E_OUT_OF_HANDLES Handle = 0x80072EE1 + WININET_E_TIMEOUT Handle = 0x80072EE2 + WININET_E_EXTENDED_ERROR Handle = 0x80072EE3 + WININET_E_INTERNAL_ERROR Handle = 0x80072EE4 + WININET_E_INVALID_URL Handle = 0x80072EE5 + WININET_E_UNRECOGNIZED_SCHEME Handle = 0x80072EE6 + WININET_E_NAME_NOT_RESOLVED Handle = 0x80072EE7 + WININET_E_PROTOCOL_NOT_FOUND Handle = 0x80072EE8 + WININET_E_INVALID_OPTION Handle = 0x80072EE9 + WININET_E_BAD_OPTION_LENGTH Handle = 0x80072EEA + WININET_E_OPTION_NOT_SETTABLE Handle = 0x80072EEB + WININET_E_SHUTDOWN Handle = 0x80072EEC + WININET_E_INCORRECT_USER_NAME Handle = 0x80072EED + WININET_E_INCORRECT_PASSWORD Handle = 0x80072EEE + WININET_E_LOGIN_FAILURE Handle = 0x80072EEF + WININET_E_INVALID_OPERATION Handle = 0x80072EF0 + WININET_E_OPERATION_CANCELLED Handle = 0x80072EF1 + WININET_E_INCORRECT_HANDLE_TYPE Handle = 0x80072EF2 + WININET_E_INCORRECT_HANDLE_STATE Handle = 0x80072EF3 + WININET_E_NOT_PROXY_REQUEST Handle = 0x80072EF4 + WININET_E_REGISTRY_VALUE_NOT_FOUND Handle = 0x80072EF5 + WININET_E_BAD_REGISTRY_PARAMETER Handle = 0x80072EF6 + WININET_E_NO_DIRECT_ACCESS Handle = 0x80072EF7 + WININET_E_NO_CONTEXT Handle = 0x80072EF8 + WININET_E_NO_CALLBACK Handle = 0x80072EF9 + WININET_E_REQUEST_PENDING Handle = 0x80072EFA + WININET_E_INCORRECT_FORMAT Handle = 0x80072EFB + WININET_E_ITEM_NOT_FOUND Handle = 0x80072EFC + WININET_E_CANNOT_CONNECT Handle = 0x80072EFD + WININET_E_CONNECTION_ABORTED Handle = 0x80072EFE + WININET_E_CONNECTION_RESET Handle = 0x80072EFF + WININET_E_FORCE_RETRY Handle = 0x80072F00 + WININET_E_INVALID_PROXY_REQUEST Handle = 0x80072F01 + WININET_E_NEED_UI Handle = 0x80072F02 + WININET_E_HANDLE_EXISTS Handle = 0x80072F04 + WININET_E_SEC_CERT_DATE_INVALID Handle = 0x80072F05 + WININET_E_SEC_CERT_CN_INVALID Handle = 0x80072F06 + WININET_E_HTTP_TO_HTTPS_ON_REDIR Handle = 0x80072F07 + WININET_E_HTTPS_TO_HTTP_ON_REDIR Handle = 0x80072F08 + WININET_E_MIXED_SECURITY Handle = 0x80072F09 + WININET_E_CHG_POST_IS_NON_SECURE Handle = 0x80072F0A + WININET_E_POST_IS_NON_SECURE Handle = 0x80072F0B + WININET_E_CLIENT_AUTH_CERT_NEEDED Handle = 0x80072F0C + WININET_E_INVALID_CA Handle = 0x80072F0D + WININET_E_CLIENT_AUTH_NOT_SETUP Handle = 0x80072F0E + WININET_E_ASYNC_THREAD_FAILED Handle = 0x80072F0F + WININET_E_REDIRECT_SCHEME_CHANGE Handle = 0x80072F10 + WININET_E_DIALOG_PENDING Handle = 0x80072F11 + WININET_E_RETRY_DIALOG Handle = 0x80072F12 + WININET_E_NO_NEW_CONTAINERS Handle = 0x80072F13 + WININET_E_HTTPS_HTTP_SUBMIT_REDIR Handle = 0x80072F14 + WININET_E_SEC_CERT_ERRORS Handle = 0x80072F17 + WININET_E_SEC_CERT_REV_FAILED Handle = 0x80072F19 + WININET_E_HEADER_NOT_FOUND Handle = 0x80072F76 + WININET_E_DOWNLEVEL_SERVER Handle = 0x80072F77 + WININET_E_INVALID_SERVER_RESPONSE Handle = 0x80072F78 + WININET_E_INVALID_HEADER Handle = 0x80072F79 + WININET_E_INVALID_QUERY_REQUEST Handle = 0x80072F7A + WININET_E_HEADER_ALREADY_EXISTS Handle = 0x80072F7B + WININET_E_REDIRECT_FAILED Handle = 0x80072F7C + WININET_E_SECURITY_CHANNEL_ERROR Handle = 0x80072F7D + WININET_E_UNABLE_TO_CACHE_FILE Handle = 0x80072F7E + WININET_E_TCPIP_NOT_INSTALLED Handle = 0x80072F7F + WININET_E_DISCONNECTED Handle = 0x80072F83 + WININET_E_SERVER_UNREACHABLE Handle = 0x80072F84 + WININET_E_PROXY_SERVER_UNREACHABLE Handle = 0x80072F85 + WININET_E_BAD_AUTO_PROXY_SCRIPT Handle = 0x80072F86 + WININET_E_UNABLE_TO_DOWNLOAD_SCRIPT Handle = 0x80072F87 + WININET_E_SEC_INVALID_CERT Handle = 0x80072F89 + WININET_E_SEC_CERT_REVOKED Handle = 0x80072F8A + WININET_E_FAILED_DUETOSECURITYCHECK Handle = 0x80072F8B + WININET_E_NOT_INITIALIZED Handle = 0x80072F8C + WININET_E_LOGIN_FAILURE_DISPLAY_ENTITY_BODY Handle = 0x80072F8E + WININET_E_DECODING_FAILED Handle = 0x80072F8F + WININET_E_NOT_REDIRECTED Handle = 0x80072F80 + WININET_E_COOKIE_NEEDS_CONFIRMATION Handle = 0x80072F81 + WININET_E_COOKIE_DECLINED Handle = 0x80072F82 + WININET_E_REDIRECT_NEEDS_CONFIRMATION Handle = 0x80072F88 + SQLITE_E_ERROR Handle = 0x87AF0001 + SQLITE_E_INTERNAL Handle = 0x87AF0002 + SQLITE_E_PERM Handle = 0x87AF0003 + SQLITE_E_ABORT Handle = 0x87AF0004 + SQLITE_E_BUSY Handle = 0x87AF0005 + SQLITE_E_LOCKED Handle = 0x87AF0006 + SQLITE_E_NOMEM Handle = 0x87AF0007 + SQLITE_E_READONLY Handle = 0x87AF0008 + SQLITE_E_INTERRUPT Handle = 0x87AF0009 + SQLITE_E_IOERR Handle = 0x87AF000A + SQLITE_E_CORRUPT Handle = 0x87AF000B + SQLITE_E_NOTFOUND Handle = 0x87AF000C + SQLITE_E_FULL Handle = 0x87AF000D + SQLITE_E_CANTOPEN Handle = 0x87AF000E + SQLITE_E_PROTOCOL Handle = 0x87AF000F + SQLITE_E_EMPTY Handle = 0x87AF0010 + SQLITE_E_SCHEMA Handle = 0x87AF0011 + SQLITE_E_TOOBIG Handle = 0x87AF0012 + SQLITE_E_CONSTRAINT Handle = 0x87AF0013 + SQLITE_E_MISMATCH Handle = 0x87AF0014 + SQLITE_E_MISUSE Handle = 0x87AF0015 + SQLITE_E_NOLFS Handle = 0x87AF0016 + SQLITE_E_AUTH Handle = 0x87AF0017 + SQLITE_E_FORMAT Handle = 0x87AF0018 + SQLITE_E_RANGE Handle = 0x87AF0019 + SQLITE_E_NOTADB Handle = 0x87AF001A + SQLITE_E_NOTICE Handle = 0x87AF001B + SQLITE_E_WARNING Handle = 0x87AF001C + SQLITE_E_ROW Handle = 0x87AF0064 + SQLITE_E_DONE Handle = 0x87AF0065 + SQLITE_E_IOERR_READ Handle = 0x87AF010A + SQLITE_E_IOERR_SHORT_READ Handle = 0x87AF020A + SQLITE_E_IOERR_WRITE Handle = 0x87AF030A + SQLITE_E_IOERR_FSYNC Handle = 0x87AF040A + SQLITE_E_IOERR_DIR_FSYNC Handle = 0x87AF050A + SQLITE_E_IOERR_TRUNCATE Handle = 0x87AF060A + SQLITE_E_IOERR_FSTAT Handle = 0x87AF070A + SQLITE_E_IOERR_UNLOCK Handle = 0x87AF080A + SQLITE_E_IOERR_RDLOCK Handle = 0x87AF090A + SQLITE_E_IOERR_DELETE Handle = 0x87AF0A0A + SQLITE_E_IOERR_BLOCKED Handle = 0x87AF0B0A + SQLITE_E_IOERR_NOMEM Handle = 0x87AF0C0A + SQLITE_E_IOERR_ACCESS Handle = 0x87AF0D0A + SQLITE_E_IOERR_CHECKRESERVEDLOCK Handle = 0x87AF0E0A + SQLITE_E_IOERR_LOCK Handle = 0x87AF0F0A + SQLITE_E_IOERR_CLOSE Handle = 0x87AF100A + SQLITE_E_IOERR_DIR_CLOSE Handle = 0x87AF110A + SQLITE_E_IOERR_SHMOPEN Handle = 0x87AF120A + SQLITE_E_IOERR_SHMSIZE Handle = 0x87AF130A + SQLITE_E_IOERR_SHMLOCK Handle = 0x87AF140A + SQLITE_E_IOERR_SHMMAP Handle = 0x87AF150A + SQLITE_E_IOERR_SEEK Handle = 0x87AF160A + SQLITE_E_IOERR_DELETE_NOENT Handle = 0x87AF170A + SQLITE_E_IOERR_MMAP Handle = 0x87AF180A + SQLITE_E_IOERR_GETTEMPPATH Handle = 0x87AF190A + SQLITE_E_IOERR_CONVPATH Handle = 0x87AF1A0A + SQLITE_E_IOERR_VNODE Handle = 0x87AF1A02 + SQLITE_E_IOERR_AUTH Handle = 0x87AF1A03 + SQLITE_E_LOCKED_SHAREDCACHE Handle = 0x87AF0106 + SQLITE_E_BUSY_RECOVERY Handle = 0x87AF0105 + SQLITE_E_BUSY_SNAPSHOT Handle = 0x87AF0205 + SQLITE_E_CANTOPEN_NOTEMPDIR Handle = 0x87AF010E + SQLITE_E_CANTOPEN_ISDIR Handle = 0x87AF020E + SQLITE_E_CANTOPEN_FULLPATH Handle = 0x87AF030E + SQLITE_E_CANTOPEN_CONVPATH Handle = 0x87AF040E + SQLITE_E_CORRUPT_VTAB Handle = 0x87AF010B + SQLITE_E_READONLY_RECOVERY Handle = 0x87AF0108 + SQLITE_E_READONLY_CANTLOCK Handle = 0x87AF0208 + SQLITE_E_READONLY_ROLLBACK Handle = 0x87AF0308 + SQLITE_E_READONLY_DBMOVED Handle = 0x87AF0408 + SQLITE_E_ABORT_ROLLBACK Handle = 0x87AF0204 + SQLITE_E_CONSTRAINT_CHECK Handle = 0x87AF0113 + SQLITE_E_CONSTRAINT_COMMITHOOK Handle = 0x87AF0213 + SQLITE_E_CONSTRAINT_FOREIGNKEY Handle = 0x87AF0313 + SQLITE_E_CONSTRAINT_FUNCTION Handle = 0x87AF0413 + SQLITE_E_CONSTRAINT_NOTNULL Handle = 0x87AF0513 + SQLITE_E_CONSTRAINT_PRIMARYKEY Handle = 0x87AF0613 + SQLITE_E_CONSTRAINT_TRIGGER Handle = 0x87AF0713 + SQLITE_E_CONSTRAINT_UNIQUE Handle = 0x87AF0813 + SQLITE_E_CONSTRAINT_VTAB Handle = 0x87AF0913 + SQLITE_E_CONSTRAINT_ROWID Handle = 0x87AF0A13 + SQLITE_E_NOTICE_RECOVER_WAL Handle = 0x87AF011B + SQLITE_E_NOTICE_RECOVER_ROLLBACK Handle = 0x87AF021B + SQLITE_E_WARNING_AUTOINDEX Handle = 0x87AF011C + UTC_E_TOGGLE_TRACE_STARTED Handle = 0x87C51001 + UTC_E_ALTERNATIVE_TRACE_CANNOT_PREEMPT Handle = 0x87C51002 + UTC_E_AOT_NOT_RUNNING Handle = 0x87C51003 + UTC_E_SCRIPT_TYPE_INVALID Handle = 0x87C51004 + UTC_E_SCENARIODEF_NOT_FOUND Handle = 0x87C51005 + UTC_E_TRACEPROFILE_NOT_FOUND Handle = 0x87C51006 + UTC_E_FORWARDER_ALREADY_ENABLED Handle = 0x87C51007 + UTC_E_FORWARDER_ALREADY_DISABLED Handle = 0x87C51008 + UTC_E_EVENTLOG_ENTRY_MALFORMED Handle = 0x87C51009 + UTC_E_DIAGRULES_SCHEMAVERSION_MISMATCH Handle = 0x87C5100A + UTC_E_SCRIPT_TERMINATED Handle = 0x87C5100B + UTC_E_INVALID_CUSTOM_FILTER Handle = 0x87C5100C + UTC_E_TRACE_NOT_RUNNING Handle = 0x87C5100D + UTC_E_REESCALATED_TOO_QUICKLY Handle = 0x87C5100E + UTC_E_ESCALATION_ALREADY_RUNNING Handle = 0x87C5100F + UTC_E_PERFTRACK_ALREADY_TRACING Handle = 0x87C51010 + UTC_E_REACHED_MAX_ESCALATIONS Handle = 0x87C51011 + UTC_E_FORWARDER_PRODUCER_MISMATCH Handle = 0x87C51012 + UTC_E_INTENTIONAL_SCRIPT_FAILURE Handle = 0x87C51013 + UTC_E_SQM_INIT_FAILED Handle = 0x87C51014 + UTC_E_NO_WER_LOGGER_SUPPORTED Handle = 0x87C51015 + UTC_E_TRACERS_DONT_EXIST Handle = 0x87C51016 + UTC_E_WINRT_INIT_FAILED Handle = 0x87C51017 + UTC_E_SCENARIODEF_SCHEMAVERSION_MISMATCH Handle = 0x87C51018 + UTC_E_INVALID_FILTER Handle = 0x87C51019 + UTC_E_EXE_TERMINATED Handle = 0x87C5101A + UTC_E_ESCALATION_NOT_AUTHORIZED Handle = 0x87C5101B + UTC_E_SETUP_NOT_AUTHORIZED Handle = 0x87C5101C + UTC_E_CHILD_PROCESS_FAILED Handle = 0x87C5101D + UTC_E_COMMAND_LINE_NOT_AUTHORIZED Handle = 0x87C5101E + UTC_E_CANNOT_LOAD_SCENARIO_EDITOR_XML Handle = 0x87C5101F + UTC_E_ESCALATION_TIMED_OUT Handle = 0x87C51020 + UTC_E_SETUP_TIMED_OUT Handle = 0x87C51021 + UTC_E_TRIGGER_MISMATCH Handle = 0x87C51022 + UTC_E_TRIGGER_NOT_FOUND Handle = 0x87C51023 + UTC_E_SIF_NOT_SUPPORTED Handle = 0x87C51024 + UTC_E_DELAY_TERMINATED Handle = 0x87C51025 + UTC_E_DEVICE_TICKET_ERROR Handle = 0x87C51026 + UTC_E_TRACE_BUFFER_LIMIT_EXCEEDED Handle = 0x87C51027 + UTC_E_API_RESULT_UNAVAILABLE Handle = 0x87C51028 + UTC_E_RPC_TIMEOUT Handle = 0x87C51029 + UTC_E_RPC_WAIT_FAILED Handle = 0x87C5102A + UTC_E_API_BUSY Handle = 0x87C5102B + UTC_E_TRACE_MIN_DURATION_REQUIREMENT_NOT_MET Handle = 0x87C5102C + UTC_E_EXCLUSIVITY_NOT_AVAILABLE Handle = 0x87C5102D + UTC_E_GETFILE_FILE_PATH_NOT_APPROVED Handle = 0x87C5102E + UTC_E_ESCALATION_DIRECTORY_ALREADY_EXISTS Handle = 0x87C5102F + UTC_E_TIME_TRIGGER_ON_START_INVALID Handle = 0x87C51030 + UTC_E_TIME_TRIGGER_ONLY_VALID_ON_SINGLE_TRANSITION Handle = 0x87C51031 + UTC_E_TIME_TRIGGER_INVALID_TIME_RANGE Handle = 0x87C51032 + UTC_E_MULTIPLE_TIME_TRIGGER_ON_SINGLE_STATE Handle = 0x87C51033 + UTC_E_BINARY_MISSING Handle = 0x87C51034 + UTC_E_NETWORK_CAPTURE_NOT_ALLOWED Handle = 0x87C51035 + UTC_E_FAILED_TO_RESOLVE_CONTAINER_ID Handle = 0x87C51036 + UTC_E_UNABLE_TO_RESOLVE_SESSION Handle = 0x87C51037 + UTC_E_THROTTLED Handle = 0x87C51038 + UTC_E_UNAPPROVED_SCRIPT Handle = 0x87C51039 + UTC_E_SCRIPT_MISSING Handle = 0x87C5103A + UTC_E_SCENARIO_THROTTLED Handle = 0x87C5103B + UTC_E_API_NOT_SUPPORTED Handle = 0x87C5103C + UTC_E_GETFILE_EXTERNAL_PATH_NOT_APPROVED Handle = 0x87C5103D + UTC_E_TRY_GET_SCENARIO_TIMEOUT_EXCEEDED Handle = 0x87C5103E + UTC_E_CERT_REV_FAILED Handle = 0x87C5103F + UTC_E_FAILED_TO_START_NDISCAP Handle = 0x87C51040 + UTC_E_KERNELDUMP_LIMIT_REACHED Handle = 0x87C51041 + UTC_E_MISSING_AGGREGATE_EVENT_TAG Handle = 0x87C51042 + UTC_E_INVALID_AGGREGATION_STRUCT Handle = 0x87C51043 + UTC_E_ACTION_NOT_SUPPORTED_IN_DESTINATION Handle = 0x87C51044 + UTC_E_FILTER_MISSING_ATTRIBUTE Handle = 0x87C51045 + UTC_E_FILTER_INVALID_TYPE Handle = 0x87C51046 + UTC_E_FILTER_VARIABLE_NOT_FOUND Handle = 0x87C51047 + UTC_E_FILTER_FUNCTION_RESTRICTED Handle = 0x87C51048 + UTC_E_FILTER_VERSION_MISMATCH Handle = 0x87C51049 + UTC_E_FILTER_INVALID_FUNCTION Handle = 0x87C51050 + UTC_E_FILTER_INVALID_FUNCTION_PARAMS Handle = 0x87C51051 + UTC_E_FILTER_INVALID_COMMAND Handle = 0x87C51052 + UTC_E_FILTER_ILLEGAL_EVAL Handle = 0x87C51053 + UTC_E_TTTRACER_RETURNED_ERROR Handle = 0x87C51054 + UTC_E_AGENT_DIAGNOSTICS_TOO_LARGE Handle = 0x87C51055 + UTC_E_FAILED_TO_RECEIVE_AGENT_DIAGNOSTICS Handle = 0x87C51056 + UTC_E_SCENARIO_HAS_NO_ACTIONS Handle = 0x87C51057 + UTC_E_TTTRACER_STORAGE_FULL Handle = 0x87C51058 + UTC_E_INSUFFICIENT_SPACE_TO_START_TRACE Handle = 0x87C51059 + UTC_E_ESCALATION_CANCELLED_AT_SHUTDOWN Handle = 0x87C5105A + UTC_E_GETFILEINFOACTION_FILE_NOT_APPROVED Handle = 0x87C5105B + UTC_E_SETREGKEYACTION_TYPE_NOT_APPROVED Handle = 0x87C5105C + WINML_ERR_INVALID_DEVICE Handle = 0x88900001 + WINML_ERR_INVALID_BINDING Handle = 0x88900002 + WINML_ERR_VALUE_NOTFOUND Handle = 0x88900003 + WINML_ERR_SIZE_MISMATCH Handle = 0x88900004 + STATUS_WAIT_0 NTStatus = 0x00000000 + STATUS_SUCCESS NTStatus = 0x00000000 + STATUS_WAIT_1 NTStatus = 0x00000001 + STATUS_WAIT_2 NTStatus = 0x00000002 + STATUS_WAIT_3 NTStatus = 0x00000003 + STATUS_WAIT_63 NTStatus = 0x0000003F + STATUS_ABANDONED NTStatus = 0x00000080 + STATUS_ABANDONED_WAIT_0 NTStatus = 0x00000080 + STATUS_ABANDONED_WAIT_63 NTStatus = 0x000000BF + STATUS_USER_APC NTStatus = 0x000000C0 + STATUS_ALREADY_COMPLETE NTStatus = 0x000000FF + STATUS_KERNEL_APC NTStatus = 0x00000100 + STATUS_ALERTED NTStatus = 0x00000101 + STATUS_TIMEOUT NTStatus = 0x00000102 + STATUS_PENDING NTStatus = 0x00000103 + STATUS_REPARSE NTStatus = 0x00000104 + STATUS_MORE_ENTRIES NTStatus = 0x00000105 + STATUS_NOT_ALL_ASSIGNED NTStatus = 0x00000106 + STATUS_SOME_NOT_MAPPED NTStatus = 0x00000107 + STATUS_OPLOCK_BREAK_IN_PROGRESS NTStatus = 0x00000108 + STATUS_VOLUME_MOUNTED NTStatus = 0x00000109 + STATUS_RXACT_COMMITTED NTStatus = 0x0000010A + STATUS_NOTIFY_CLEANUP NTStatus = 0x0000010B + STATUS_NOTIFY_ENUM_DIR NTStatus = 0x0000010C + STATUS_NO_QUOTAS_FOR_ACCOUNT NTStatus = 0x0000010D + STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED NTStatus = 0x0000010E + STATUS_PAGE_FAULT_TRANSITION NTStatus = 0x00000110 + STATUS_PAGE_FAULT_DEMAND_ZERO NTStatus = 0x00000111 + STATUS_PAGE_FAULT_COPY_ON_WRITE NTStatus = 0x00000112 + STATUS_PAGE_FAULT_GUARD_PAGE NTStatus = 0x00000113 + STATUS_PAGE_FAULT_PAGING_FILE NTStatus = 0x00000114 + STATUS_CACHE_PAGE_LOCKED NTStatus = 0x00000115 + STATUS_CRASH_DUMP NTStatus = 0x00000116 + STATUS_BUFFER_ALL_ZEROS NTStatus = 0x00000117 + STATUS_REPARSE_OBJECT NTStatus = 0x00000118 + STATUS_RESOURCE_REQUIREMENTS_CHANGED NTStatus = 0x00000119 + STATUS_TRANSLATION_COMPLETE NTStatus = 0x00000120 + STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY NTStatus = 0x00000121 + STATUS_NOTHING_TO_TERMINATE NTStatus = 0x00000122 + STATUS_PROCESS_NOT_IN_JOB NTStatus = 0x00000123 + STATUS_PROCESS_IN_JOB NTStatus = 0x00000124 + STATUS_VOLSNAP_HIBERNATE_READY NTStatus = 0x00000125 + STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY NTStatus = 0x00000126 + STATUS_INTERRUPT_VECTOR_ALREADY_CONNECTED NTStatus = 0x00000127 + STATUS_INTERRUPT_STILL_CONNECTED NTStatus = 0x00000128 + STATUS_PROCESS_CLONED NTStatus = 0x00000129 + STATUS_FILE_LOCKED_WITH_ONLY_READERS NTStatus = 0x0000012A + STATUS_FILE_LOCKED_WITH_WRITERS NTStatus = 0x0000012B + STATUS_VALID_IMAGE_HASH NTStatus = 0x0000012C + STATUS_VALID_CATALOG_HASH NTStatus = 0x0000012D + STATUS_VALID_STRONG_CODE_HASH NTStatus = 0x0000012E + STATUS_GHOSTED NTStatus = 0x0000012F + STATUS_DATA_OVERWRITTEN NTStatus = 0x00000130 + STATUS_RESOURCEMANAGER_READ_ONLY NTStatus = 0x00000202 + STATUS_RING_PREVIOUSLY_EMPTY NTStatus = 0x00000210 + STATUS_RING_PREVIOUSLY_FULL NTStatus = 0x00000211 + STATUS_RING_PREVIOUSLY_ABOVE_QUOTA NTStatus = 0x00000212 + STATUS_RING_NEWLY_EMPTY NTStatus = 0x00000213 + STATUS_RING_SIGNAL_OPPOSITE_ENDPOINT NTStatus = 0x00000214 + STATUS_OPLOCK_SWITCHED_TO_NEW_HANDLE NTStatus = 0x00000215 + STATUS_OPLOCK_HANDLE_CLOSED NTStatus = 0x00000216 + STATUS_WAIT_FOR_OPLOCK NTStatus = 0x00000367 + STATUS_REPARSE_GLOBAL NTStatus = 0x00000368 + STATUS_FLT_IO_COMPLETE NTStatus = 0x001C0001 + STATUS_OBJECT_NAME_EXISTS NTStatus = 0x40000000 + STATUS_THREAD_WAS_SUSPENDED NTStatus = 0x40000001 + STATUS_WORKING_SET_LIMIT_RANGE NTStatus = 0x40000002 + STATUS_IMAGE_NOT_AT_BASE NTStatus = 0x40000003 + STATUS_RXACT_STATE_CREATED NTStatus = 0x40000004 + STATUS_SEGMENT_NOTIFICATION NTStatus = 0x40000005 + STATUS_LOCAL_USER_SESSION_KEY NTStatus = 0x40000006 + STATUS_BAD_CURRENT_DIRECTORY NTStatus = 0x40000007 + STATUS_SERIAL_MORE_WRITES NTStatus = 0x40000008 + STATUS_REGISTRY_RECOVERED NTStatus = 0x40000009 + STATUS_FT_READ_RECOVERY_FROM_BACKUP NTStatus = 0x4000000A + STATUS_FT_WRITE_RECOVERY NTStatus = 0x4000000B + STATUS_SERIAL_COUNTER_TIMEOUT NTStatus = 0x4000000C + STATUS_NULL_LM_PASSWORD NTStatus = 0x4000000D + STATUS_IMAGE_MACHINE_TYPE_MISMATCH NTStatus = 0x4000000E + STATUS_RECEIVE_PARTIAL NTStatus = 0x4000000F + STATUS_RECEIVE_EXPEDITED NTStatus = 0x40000010 + STATUS_RECEIVE_PARTIAL_EXPEDITED NTStatus = 0x40000011 + STATUS_EVENT_DONE NTStatus = 0x40000012 + STATUS_EVENT_PENDING NTStatus = 0x40000013 + STATUS_CHECKING_FILE_SYSTEM NTStatus = 0x40000014 + STATUS_FATAL_APP_EXIT NTStatus = 0x40000015 + STATUS_PREDEFINED_HANDLE NTStatus = 0x40000016 + STATUS_WAS_UNLOCKED NTStatus = 0x40000017 + STATUS_SERVICE_NOTIFICATION NTStatus = 0x40000018 + STATUS_WAS_LOCKED NTStatus = 0x40000019 + STATUS_LOG_HARD_ERROR NTStatus = 0x4000001A + STATUS_ALREADY_WIN32 NTStatus = 0x4000001B + STATUS_WX86_UNSIMULATE NTStatus = 0x4000001C + STATUS_WX86_CONTINUE NTStatus = 0x4000001D + STATUS_WX86_SINGLE_STEP NTStatus = 0x4000001E + STATUS_WX86_BREAKPOINT NTStatus = 0x4000001F + STATUS_WX86_EXCEPTION_CONTINUE NTStatus = 0x40000020 + STATUS_WX86_EXCEPTION_LASTCHANCE NTStatus = 0x40000021 + STATUS_WX86_EXCEPTION_CHAIN NTStatus = 0x40000022 + STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE NTStatus = 0x40000023 + STATUS_NO_YIELD_PERFORMED NTStatus = 0x40000024 + STATUS_TIMER_RESUME_IGNORED NTStatus = 0x40000025 + STATUS_ARBITRATION_UNHANDLED NTStatus = 0x40000026 + STATUS_CARDBUS_NOT_SUPPORTED NTStatus = 0x40000027 + STATUS_WX86_CREATEWX86TIB NTStatus = 0x40000028 + STATUS_MP_PROCESSOR_MISMATCH NTStatus = 0x40000029 + STATUS_HIBERNATED NTStatus = 0x4000002A + STATUS_RESUME_HIBERNATION NTStatus = 0x4000002B + STATUS_FIRMWARE_UPDATED NTStatus = 0x4000002C + STATUS_DRIVERS_LEAKING_LOCKED_PAGES NTStatus = 0x4000002D + STATUS_MESSAGE_RETRIEVED NTStatus = 0x4000002E + STATUS_SYSTEM_POWERSTATE_TRANSITION NTStatus = 0x4000002F + STATUS_ALPC_CHECK_COMPLETION_LIST NTStatus = 0x40000030 + STATUS_SYSTEM_POWERSTATE_COMPLEX_TRANSITION NTStatus = 0x40000031 + STATUS_ACCESS_AUDIT_BY_POLICY NTStatus = 0x40000032 + STATUS_ABANDON_HIBERFILE NTStatus = 0x40000033 + STATUS_BIZRULES_NOT_ENABLED NTStatus = 0x40000034 + STATUS_FT_READ_FROM_COPY NTStatus = 0x40000035 + STATUS_IMAGE_AT_DIFFERENT_BASE NTStatus = 0x40000036 + STATUS_PATCH_DEFERRED NTStatus = 0x40000037 + STATUS_HEURISTIC_DAMAGE_POSSIBLE NTStatus = 0x40190001 + STATUS_GUARD_PAGE_VIOLATION NTStatus = 0x80000001 + STATUS_DATATYPE_MISALIGNMENT NTStatus = 0x80000002 + STATUS_BREAKPOINT NTStatus = 0x80000003 + STATUS_SINGLE_STEP NTStatus = 0x80000004 + STATUS_BUFFER_OVERFLOW NTStatus = 0x80000005 + STATUS_NO_MORE_FILES NTStatus = 0x80000006 + STATUS_WAKE_SYSTEM_DEBUGGER NTStatus = 0x80000007 + STATUS_HANDLES_CLOSED NTStatus = 0x8000000A + STATUS_NO_INHERITANCE NTStatus = 0x8000000B + STATUS_GUID_SUBSTITUTION_MADE NTStatus = 0x8000000C + STATUS_PARTIAL_COPY NTStatus = 0x8000000D + STATUS_DEVICE_PAPER_EMPTY NTStatus = 0x8000000E + STATUS_DEVICE_POWERED_OFF NTStatus = 0x8000000F + STATUS_DEVICE_OFF_LINE NTStatus = 0x80000010 + STATUS_DEVICE_BUSY NTStatus = 0x80000011 + STATUS_NO_MORE_EAS NTStatus = 0x80000012 + STATUS_INVALID_EA_NAME NTStatus = 0x80000013 + STATUS_EA_LIST_INCONSISTENT NTStatus = 0x80000014 + STATUS_INVALID_EA_FLAG NTStatus = 0x80000015 + STATUS_VERIFY_REQUIRED NTStatus = 0x80000016 + STATUS_EXTRANEOUS_INFORMATION NTStatus = 0x80000017 + STATUS_RXACT_COMMIT_NECESSARY NTStatus = 0x80000018 + STATUS_NO_MORE_ENTRIES NTStatus = 0x8000001A + STATUS_FILEMARK_DETECTED NTStatus = 0x8000001B + STATUS_MEDIA_CHANGED NTStatus = 0x8000001C + STATUS_BUS_RESET NTStatus = 0x8000001D + STATUS_END_OF_MEDIA NTStatus = 0x8000001E + STATUS_BEGINNING_OF_MEDIA NTStatus = 0x8000001F + STATUS_MEDIA_CHECK NTStatus = 0x80000020 + STATUS_SETMARK_DETECTED NTStatus = 0x80000021 + STATUS_NO_DATA_DETECTED NTStatus = 0x80000022 + STATUS_REDIRECTOR_HAS_OPEN_HANDLES NTStatus = 0x80000023 + STATUS_SERVER_HAS_OPEN_HANDLES NTStatus = 0x80000024 + STATUS_ALREADY_DISCONNECTED NTStatus = 0x80000025 + STATUS_LONGJUMP NTStatus = 0x80000026 + STATUS_CLEANER_CARTRIDGE_INSTALLED NTStatus = 0x80000027 + STATUS_PLUGPLAY_QUERY_VETOED NTStatus = 0x80000028 + STATUS_UNWIND_CONSOLIDATE NTStatus = 0x80000029 + STATUS_REGISTRY_HIVE_RECOVERED NTStatus = 0x8000002A + STATUS_DLL_MIGHT_BE_INSECURE NTStatus = 0x8000002B + STATUS_DLL_MIGHT_BE_INCOMPATIBLE NTStatus = 0x8000002C + STATUS_STOPPED_ON_SYMLINK NTStatus = 0x8000002D + STATUS_CANNOT_GRANT_REQUESTED_OPLOCK NTStatus = 0x8000002E + STATUS_NO_ACE_CONDITION NTStatus = 0x8000002F + STATUS_DEVICE_SUPPORT_IN_PROGRESS NTStatus = 0x80000030 + STATUS_DEVICE_POWER_CYCLE_REQUIRED NTStatus = 0x80000031 + STATUS_NO_WORK_DONE NTStatus = 0x80000032 + STATUS_CLUSTER_NODE_ALREADY_UP NTStatus = 0x80130001 + STATUS_CLUSTER_NODE_ALREADY_DOWN NTStatus = 0x80130002 + STATUS_CLUSTER_NETWORK_ALREADY_ONLINE NTStatus = 0x80130003 + STATUS_CLUSTER_NETWORK_ALREADY_OFFLINE NTStatus = 0x80130004 + STATUS_CLUSTER_NODE_ALREADY_MEMBER NTStatus = 0x80130005 + STATUS_FLT_BUFFER_TOO_SMALL NTStatus = 0x801C0001 + STATUS_FVE_PARTIAL_METADATA NTStatus = 0x80210001 + STATUS_FVE_TRANSIENT_STATE NTStatus = 0x80210002 + STATUS_CLOUD_FILE_PROPERTY_BLOB_CHECKSUM_MISMATCH NTStatus = 0x8000CF00 + STATUS_UNSUCCESSFUL NTStatus = 0xC0000001 + STATUS_NOT_IMPLEMENTED NTStatus = 0xC0000002 + STATUS_INVALID_INFO_CLASS NTStatus = 0xC0000003 + STATUS_INFO_LENGTH_MISMATCH NTStatus = 0xC0000004 + STATUS_ACCESS_VIOLATION NTStatus = 0xC0000005 + STATUS_IN_PAGE_ERROR NTStatus = 0xC0000006 + STATUS_PAGEFILE_QUOTA NTStatus = 0xC0000007 + STATUS_INVALID_HANDLE NTStatus = 0xC0000008 + STATUS_BAD_INITIAL_STACK NTStatus = 0xC0000009 + STATUS_BAD_INITIAL_PC NTStatus = 0xC000000A + STATUS_INVALID_CID NTStatus = 0xC000000B + STATUS_TIMER_NOT_CANCELED NTStatus = 0xC000000C + STATUS_INVALID_PARAMETER NTStatus = 0xC000000D + STATUS_NO_SUCH_DEVICE NTStatus = 0xC000000E + STATUS_NO_SUCH_FILE NTStatus = 0xC000000F + STATUS_INVALID_DEVICE_REQUEST NTStatus = 0xC0000010 + STATUS_END_OF_FILE NTStatus = 0xC0000011 + STATUS_WRONG_VOLUME NTStatus = 0xC0000012 + STATUS_NO_MEDIA_IN_DEVICE NTStatus = 0xC0000013 + STATUS_UNRECOGNIZED_MEDIA NTStatus = 0xC0000014 + STATUS_NONEXISTENT_SECTOR NTStatus = 0xC0000015 + STATUS_MORE_PROCESSING_REQUIRED NTStatus = 0xC0000016 + STATUS_NO_MEMORY NTStatus = 0xC0000017 + STATUS_CONFLICTING_ADDRESSES NTStatus = 0xC0000018 + STATUS_NOT_MAPPED_VIEW NTStatus = 0xC0000019 + STATUS_UNABLE_TO_FREE_VM NTStatus = 0xC000001A + STATUS_UNABLE_TO_DELETE_SECTION NTStatus = 0xC000001B + STATUS_INVALID_SYSTEM_SERVICE NTStatus = 0xC000001C + STATUS_ILLEGAL_INSTRUCTION NTStatus = 0xC000001D + STATUS_INVALID_LOCK_SEQUENCE NTStatus = 0xC000001E + STATUS_INVALID_VIEW_SIZE NTStatus = 0xC000001F + STATUS_INVALID_FILE_FOR_SECTION NTStatus = 0xC0000020 + STATUS_ALREADY_COMMITTED NTStatus = 0xC0000021 + STATUS_ACCESS_DENIED NTStatus = 0xC0000022 + STATUS_BUFFER_TOO_SMALL NTStatus = 0xC0000023 + STATUS_OBJECT_TYPE_MISMATCH NTStatus = 0xC0000024 + STATUS_NONCONTINUABLE_EXCEPTION NTStatus = 0xC0000025 + STATUS_INVALID_DISPOSITION NTStatus = 0xC0000026 + STATUS_UNWIND NTStatus = 0xC0000027 + STATUS_BAD_STACK NTStatus = 0xC0000028 + STATUS_INVALID_UNWIND_TARGET NTStatus = 0xC0000029 + STATUS_NOT_LOCKED NTStatus = 0xC000002A + STATUS_PARITY_ERROR NTStatus = 0xC000002B + STATUS_UNABLE_TO_DECOMMIT_VM NTStatus = 0xC000002C + STATUS_NOT_COMMITTED NTStatus = 0xC000002D + STATUS_INVALID_PORT_ATTRIBUTES NTStatus = 0xC000002E + STATUS_PORT_MESSAGE_TOO_LONG NTStatus = 0xC000002F + STATUS_INVALID_PARAMETER_MIX NTStatus = 0xC0000030 + STATUS_INVALID_QUOTA_LOWER NTStatus = 0xC0000031 + STATUS_DISK_CORRUPT_ERROR NTStatus = 0xC0000032 + STATUS_OBJECT_NAME_INVALID NTStatus = 0xC0000033 + STATUS_OBJECT_NAME_NOT_FOUND NTStatus = 0xC0000034 + STATUS_OBJECT_NAME_COLLISION NTStatus = 0xC0000035 + STATUS_PORT_DO_NOT_DISTURB NTStatus = 0xC0000036 + STATUS_PORT_DISCONNECTED NTStatus = 0xC0000037 + STATUS_DEVICE_ALREADY_ATTACHED NTStatus = 0xC0000038 + STATUS_OBJECT_PATH_INVALID NTStatus = 0xC0000039 + STATUS_OBJECT_PATH_NOT_FOUND NTStatus = 0xC000003A + STATUS_OBJECT_PATH_SYNTAX_BAD NTStatus = 0xC000003B + STATUS_DATA_OVERRUN NTStatus = 0xC000003C + STATUS_DATA_LATE_ERROR NTStatus = 0xC000003D + STATUS_DATA_ERROR NTStatus = 0xC000003E + STATUS_CRC_ERROR NTStatus = 0xC000003F + STATUS_SECTION_TOO_BIG NTStatus = 0xC0000040 + STATUS_PORT_CONNECTION_REFUSED NTStatus = 0xC0000041 + STATUS_INVALID_PORT_HANDLE NTStatus = 0xC0000042 + STATUS_SHARING_VIOLATION NTStatus = 0xC0000043 + STATUS_QUOTA_EXCEEDED NTStatus = 0xC0000044 + STATUS_INVALID_PAGE_PROTECTION NTStatus = 0xC0000045 + STATUS_MUTANT_NOT_OWNED NTStatus = 0xC0000046 + STATUS_SEMAPHORE_LIMIT_EXCEEDED NTStatus = 0xC0000047 + STATUS_PORT_ALREADY_SET NTStatus = 0xC0000048 + STATUS_SECTION_NOT_IMAGE NTStatus = 0xC0000049 + STATUS_SUSPEND_COUNT_EXCEEDED NTStatus = 0xC000004A + STATUS_THREAD_IS_TERMINATING NTStatus = 0xC000004B + STATUS_BAD_WORKING_SET_LIMIT NTStatus = 0xC000004C + STATUS_INCOMPATIBLE_FILE_MAP NTStatus = 0xC000004D + STATUS_SECTION_PROTECTION NTStatus = 0xC000004E + STATUS_EAS_NOT_SUPPORTED NTStatus = 0xC000004F + STATUS_EA_TOO_LARGE NTStatus = 0xC0000050 + STATUS_NONEXISTENT_EA_ENTRY NTStatus = 0xC0000051 + STATUS_NO_EAS_ON_FILE NTStatus = 0xC0000052 + STATUS_EA_CORRUPT_ERROR NTStatus = 0xC0000053 + STATUS_FILE_LOCK_CONFLICT NTStatus = 0xC0000054 + STATUS_LOCK_NOT_GRANTED NTStatus = 0xC0000055 + STATUS_DELETE_PENDING NTStatus = 0xC0000056 + STATUS_CTL_FILE_NOT_SUPPORTED NTStatus = 0xC0000057 + STATUS_UNKNOWN_REVISION NTStatus = 0xC0000058 + STATUS_REVISION_MISMATCH NTStatus = 0xC0000059 + STATUS_INVALID_OWNER NTStatus = 0xC000005A + STATUS_INVALID_PRIMARY_GROUP NTStatus = 0xC000005B + STATUS_NO_IMPERSONATION_TOKEN NTStatus = 0xC000005C + STATUS_CANT_DISABLE_MANDATORY NTStatus = 0xC000005D + STATUS_NO_LOGON_SERVERS NTStatus = 0xC000005E + STATUS_NO_SUCH_LOGON_SESSION NTStatus = 0xC000005F + STATUS_NO_SUCH_PRIVILEGE NTStatus = 0xC0000060 + STATUS_PRIVILEGE_NOT_HELD NTStatus = 0xC0000061 + STATUS_INVALID_ACCOUNT_NAME NTStatus = 0xC0000062 + STATUS_USER_EXISTS NTStatus = 0xC0000063 + STATUS_NO_SUCH_USER NTStatus = 0xC0000064 + STATUS_GROUP_EXISTS NTStatus = 0xC0000065 + STATUS_NO_SUCH_GROUP NTStatus = 0xC0000066 + STATUS_MEMBER_IN_GROUP NTStatus = 0xC0000067 + STATUS_MEMBER_NOT_IN_GROUP NTStatus = 0xC0000068 + STATUS_LAST_ADMIN NTStatus = 0xC0000069 + STATUS_WRONG_PASSWORD NTStatus = 0xC000006A + STATUS_ILL_FORMED_PASSWORD NTStatus = 0xC000006B + STATUS_PASSWORD_RESTRICTION NTStatus = 0xC000006C + STATUS_LOGON_FAILURE NTStatus = 0xC000006D + STATUS_ACCOUNT_RESTRICTION NTStatus = 0xC000006E + STATUS_INVALID_LOGON_HOURS NTStatus = 0xC000006F + STATUS_INVALID_WORKSTATION NTStatus = 0xC0000070 + STATUS_PASSWORD_EXPIRED NTStatus = 0xC0000071 + STATUS_ACCOUNT_DISABLED NTStatus = 0xC0000072 + STATUS_NONE_MAPPED NTStatus = 0xC0000073 + STATUS_TOO_MANY_LUIDS_REQUESTED NTStatus = 0xC0000074 + STATUS_LUIDS_EXHAUSTED NTStatus = 0xC0000075 + STATUS_INVALID_SUB_AUTHORITY NTStatus = 0xC0000076 + STATUS_INVALID_ACL NTStatus = 0xC0000077 + STATUS_INVALID_SID NTStatus = 0xC0000078 + STATUS_INVALID_SECURITY_DESCR NTStatus = 0xC0000079 + STATUS_PROCEDURE_NOT_FOUND NTStatus = 0xC000007A + STATUS_INVALID_IMAGE_FORMAT NTStatus = 0xC000007B + STATUS_NO_TOKEN NTStatus = 0xC000007C + STATUS_BAD_INHERITANCE_ACL NTStatus = 0xC000007D + STATUS_RANGE_NOT_LOCKED NTStatus = 0xC000007E + STATUS_DISK_FULL NTStatus = 0xC000007F + STATUS_SERVER_DISABLED NTStatus = 0xC0000080 + STATUS_SERVER_NOT_DISABLED NTStatus = 0xC0000081 + STATUS_TOO_MANY_GUIDS_REQUESTED NTStatus = 0xC0000082 + STATUS_GUIDS_EXHAUSTED NTStatus = 0xC0000083 + STATUS_INVALID_ID_AUTHORITY NTStatus = 0xC0000084 + STATUS_AGENTS_EXHAUSTED NTStatus = 0xC0000085 + STATUS_INVALID_VOLUME_LABEL NTStatus = 0xC0000086 + STATUS_SECTION_NOT_EXTENDED NTStatus = 0xC0000087 + STATUS_NOT_MAPPED_DATA NTStatus = 0xC0000088 + STATUS_RESOURCE_DATA_NOT_FOUND NTStatus = 0xC0000089 + STATUS_RESOURCE_TYPE_NOT_FOUND NTStatus = 0xC000008A + STATUS_RESOURCE_NAME_NOT_FOUND NTStatus = 0xC000008B + STATUS_ARRAY_BOUNDS_EXCEEDED NTStatus = 0xC000008C + STATUS_FLOAT_DENORMAL_OPERAND NTStatus = 0xC000008D + STATUS_FLOAT_DIVIDE_BY_ZERO NTStatus = 0xC000008E + STATUS_FLOAT_INEXACT_RESULT NTStatus = 0xC000008F + STATUS_FLOAT_INVALID_OPERATION NTStatus = 0xC0000090 + STATUS_FLOAT_OVERFLOW NTStatus = 0xC0000091 + STATUS_FLOAT_STACK_CHECK NTStatus = 0xC0000092 + STATUS_FLOAT_UNDERFLOW NTStatus = 0xC0000093 + STATUS_INTEGER_DIVIDE_BY_ZERO NTStatus = 0xC0000094 + STATUS_INTEGER_OVERFLOW NTStatus = 0xC0000095 + STATUS_PRIVILEGED_INSTRUCTION NTStatus = 0xC0000096 + STATUS_TOO_MANY_PAGING_FILES NTStatus = 0xC0000097 + STATUS_FILE_INVALID NTStatus = 0xC0000098 + STATUS_ALLOTTED_SPACE_EXCEEDED NTStatus = 0xC0000099 + STATUS_INSUFFICIENT_RESOURCES NTStatus = 0xC000009A + STATUS_DFS_EXIT_PATH_FOUND NTStatus = 0xC000009B + STATUS_DEVICE_DATA_ERROR NTStatus = 0xC000009C + STATUS_DEVICE_NOT_CONNECTED NTStatus = 0xC000009D + STATUS_DEVICE_POWER_FAILURE NTStatus = 0xC000009E + STATUS_FREE_VM_NOT_AT_BASE NTStatus = 0xC000009F + STATUS_MEMORY_NOT_ALLOCATED NTStatus = 0xC00000A0 + STATUS_WORKING_SET_QUOTA NTStatus = 0xC00000A1 + STATUS_MEDIA_WRITE_PROTECTED NTStatus = 0xC00000A2 + STATUS_DEVICE_NOT_READY NTStatus = 0xC00000A3 + STATUS_INVALID_GROUP_ATTRIBUTES NTStatus = 0xC00000A4 + STATUS_BAD_IMPERSONATION_LEVEL NTStatus = 0xC00000A5 + STATUS_CANT_OPEN_ANONYMOUS NTStatus = 0xC00000A6 + STATUS_BAD_VALIDATION_CLASS NTStatus = 0xC00000A7 + STATUS_BAD_TOKEN_TYPE NTStatus = 0xC00000A8 + STATUS_BAD_MASTER_BOOT_RECORD NTStatus = 0xC00000A9 + STATUS_INSTRUCTION_MISALIGNMENT NTStatus = 0xC00000AA + STATUS_INSTANCE_NOT_AVAILABLE NTStatus = 0xC00000AB + STATUS_PIPE_NOT_AVAILABLE NTStatus = 0xC00000AC + STATUS_INVALID_PIPE_STATE NTStatus = 0xC00000AD + STATUS_PIPE_BUSY NTStatus = 0xC00000AE + STATUS_ILLEGAL_FUNCTION NTStatus = 0xC00000AF + STATUS_PIPE_DISCONNECTED NTStatus = 0xC00000B0 + STATUS_PIPE_CLOSING NTStatus = 0xC00000B1 + STATUS_PIPE_CONNECTED NTStatus = 0xC00000B2 + STATUS_PIPE_LISTENING NTStatus = 0xC00000B3 + STATUS_INVALID_READ_MODE NTStatus = 0xC00000B4 + STATUS_IO_TIMEOUT NTStatus = 0xC00000B5 + STATUS_FILE_FORCED_CLOSED NTStatus = 0xC00000B6 + STATUS_PROFILING_NOT_STARTED NTStatus = 0xC00000B7 + STATUS_PROFILING_NOT_STOPPED NTStatus = 0xC00000B8 + STATUS_COULD_NOT_INTERPRET NTStatus = 0xC00000B9 + STATUS_FILE_IS_A_DIRECTORY NTStatus = 0xC00000BA + STATUS_NOT_SUPPORTED NTStatus = 0xC00000BB + STATUS_REMOTE_NOT_LISTENING NTStatus = 0xC00000BC + STATUS_DUPLICATE_NAME NTStatus = 0xC00000BD + STATUS_BAD_NETWORK_PATH NTStatus = 0xC00000BE + STATUS_NETWORK_BUSY NTStatus = 0xC00000BF + STATUS_DEVICE_DOES_NOT_EXIST NTStatus = 0xC00000C0 + STATUS_TOO_MANY_COMMANDS NTStatus = 0xC00000C1 + STATUS_ADAPTER_HARDWARE_ERROR NTStatus = 0xC00000C2 + STATUS_INVALID_NETWORK_RESPONSE NTStatus = 0xC00000C3 + STATUS_UNEXPECTED_NETWORK_ERROR NTStatus = 0xC00000C4 + STATUS_BAD_REMOTE_ADAPTER NTStatus = 0xC00000C5 + STATUS_PRINT_QUEUE_FULL NTStatus = 0xC00000C6 + STATUS_NO_SPOOL_SPACE NTStatus = 0xC00000C7 + STATUS_PRINT_CANCELLED NTStatus = 0xC00000C8 + STATUS_NETWORK_NAME_DELETED NTStatus = 0xC00000C9 + STATUS_NETWORK_ACCESS_DENIED NTStatus = 0xC00000CA + STATUS_BAD_DEVICE_TYPE NTStatus = 0xC00000CB + STATUS_BAD_NETWORK_NAME NTStatus = 0xC00000CC + STATUS_TOO_MANY_NAMES NTStatus = 0xC00000CD + STATUS_TOO_MANY_SESSIONS NTStatus = 0xC00000CE + STATUS_SHARING_PAUSED NTStatus = 0xC00000CF + STATUS_REQUEST_NOT_ACCEPTED NTStatus = 0xC00000D0 + STATUS_REDIRECTOR_PAUSED NTStatus = 0xC00000D1 + STATUS_NET_WRITE_FAULT NTStatus = 0xC00000D2 + STATUS_PROFILING_AT_LIMIT NTStatus = 0xC00000D3 + STATUS_NOT_SAME_DEVICE NTStatus = 0xC00000D4 + STATUS_FILE_RENAMED NTStatus = 0xC00000D5 + STATUS_VIRTUAL_CIRCUIT_CLOSED NTStatus = 0xC00000D6 + STATUS_NO_SECURITY_ON_OBJECT NTStatus = 0xC00000D7 + STATUS_CANT_WAIT NTStatus = 0xC00000D8 + STATUS_PIPE_EMPTY NTStatus = 0xC00000D9 + STATUS_CANT_ACCESS_DOMAIN_INFO NTStatus = 0xC00000DA + STATUS_CANT_TERMINATE_SELF NTStatus = 0xC00000DB + STATUS_INVALID_SERVER_STATE NTStatus = 0xC00000DC + STATUS_INVALID_DOMAIN_STATE NTStatus = 0xC00000DD + STATUS_INVALID_DOMAIN_ROLE NTStatus = 0xC00000DE + STATUS_NO_SUCH_DOMAIN NTStatus = 0xC00000DF + STATUS_DOMAIN_EXISTS NTStatus = 0xC00000E0 + STATUS_DOMAIN_LIMIT_EXCEEDED NTStatus = 0xC00000E1 + STATUS_OPLOCK_NOT_GRANTED NTStatus = 0xC00000E2 + STATUS_INVALID_OPLOCK_PROTOCOL NTStatus = 0xC00000E3 + STATUS_INTERNAL_DB_CORRUPTION NTStatus = 0xC00000E4 + STATUS_INTERNAL_ERROR NTStatus = 0xC00000E5 + STATUS_GENERIC_NOT_MAPPED NTStatus = 0xC00000E6 + STATUS_BAD_DESCRIPTOR_FORMAT NTStatus = 0xC00000E7 + STATUS_INVALID_USER_BUFFER NTStatus = 0xC00000E8 + STATUS_UNEXPECTED_IO_ERROR NTStatus = 0xC00000E9 + STATUS_UNEXPECTED_MM_CREATE_ERR NTStatus = 0xC00000EA + STATUS_UNEXPECTED_MM_MAP_ERROR NTStatus = 0xC00000EB + STATUS_UNEXPECTED_MM_EXTEND_ERR NTStatus = 0xC00000EC + STATUS_NOT_LOGON_PROCESS NTStatus = 0xC00000ED + STATUS_LOGON_SESSION_EXISTS NTStatus = 0xC00000EE + STATUS_INVALID_PARAMETER_1 NTStatus = 0xC00000EF + STATUS_INVALID_PARAMETER_2 NTStatus = 0xC00000F0 + STATUS_INVALID_PARAMETER_3 NTStatus = 0xC00000F1 + STATUS_INVALID_PARAMETER_4 NTStatus = 0xC00000F2 + STATUS_INVALID_PARAMETER_5 NTStatus = 0xC00000F3 + STATUS_INVALID_PARAMETER_6 NTStatus = 0xC00000F4 + STATUS_INVALID_PARAMETER_7 NTStatus = 0xC00000F5 + STATUS_INVALID_PARAMETER_8 NTStatus = 0xC00000F6 + STATUS_INVALID_PARAMETER_9 NTStatus = 0xC00000F7 + STATUS_INVALID_PARAMETER_10 NTStatus = 0xC00000F8 + STATUS_INVALID_PARAMETER_11 NTStatus = 0xC00000F9 + STATUS_INVALID_PARAMETER_12 NTStatus = 0xC00000FA + STATUS_REDIRECTOR_NOT_STARTED NTStatus = 0xC00000FB + STATUS_REDIRECTOR_STARTED NTStatus = 0xC00000FC + STATUS_STACK_OVERFLOW NTStatus = 0xC00000FD + STATUS_NO_SUCH_PACKAGE NTStatus = 0xC00000FE + STATUS_BAD_FUNCTION_TABLE NTStatus = 0xC00000FF + STATUS_VARIABLE_NOT_FOUND NTStatus = 0xC0000100 + STATUS_DIRECTORY_NOT_EMPTY NTStatus = 0xC0000101 + STATUS_FILE_CORRUPT_ERROR NTStatus = 0xC0000102 + STATUS_NOT_A_DIRECTORY NTStatus = 0xC0000103 + STATUS_BAD_LOGON_SESSION_STATE NTStatus = 0xC0000104 + STATUS_LOGON_SESSION_COLLISION NTStatus = 0xC0000105 + STATUS_NAME_TOO_LONG NTStatus = 0xC0000106 + STATUS_FILES_OPEN NTStatus = 0xC0000107 + STATUS_CONNECTION_IN_USE NTStatus = 0xC0000108 + STATUS_MESSAGE_NOT_FOUND NTStatus = 0xC0000109 + STATUS_PROCESS_IS_TERMINATING NTStatus = 0xC000010A + STATUS_INVALID_LOGON_TYPE NTStatus = 0xC000010B + STATUS_NO_GUID_TRANSLATION NTStatus = 0xC000010C + STATUS_CANNOT_IMPERSONATE NTStatus = 0xC000010D + STATUS_IMAGE_ALREADY_LOADED NTStatus = 0xC000010E + STATUS_ABIOS_NOT_PRESENT NTStatus = 0xC000010F + STATUS_ABIOS_LID_NOT_EXIST NTStatus = 0xC0000110 + STATUS_ABIOS_LID_ALREADY_OWNED NTStatus = 0xC0000111 + STATUS_ABIOS_NOT_LID_OWNER NTStatus = 0xC0000112 + STATUS_ABIOS_INVALID_COMMAND NTStatus = 0xC0000113 + STATUS_ABIOS_INVALID_LID NTStatus = 0xC0000114 + STATUS_ABIOS_SELECTOR_NOT_AVAILABLE NTStatus = 0xC0000115 + STATUS_ABIOS_INVALID_SELECTOR NTStatus = 0xC0000116 + STATUS_NO_LDT NTStatus = 0xC0000117 + STATUS_INVALID_LDT_SIZE NTStatus = 0xC0000118 + STATUS_INVALID_LDT_OFFSET NTStatus = 0xC0000119 + STATUS_INVALID_LDT_DESCRIPTOR NTStatus = 0xC000011A + STATUS_INVALID_IMAGE_NE_FORMAT NTStatus = 0xC000011B + STATUS_RXACT_INVALID_STATE NTStatus = 0xC000011C + STATUS_RXACT_COMMIT_FAILURE NTStatus = 0xC000011D + STATUS_MAPPED_FILE_SIZE_ZERO NTStatus = 0xC000011E + STATUS_TOO_MANY_OPENED_FILES NTStatus = 0xC000011F + STATUS_CANCELLED NTStatus = 0xC0000120 + STATUS_CANNOT_DELETE NTStatus = 0xC0000121 + STATUS_INVALID_COMPUTER_NAME NTStatus = 0xC0000122 + STATUS_FILE_DELETED NTStatus = 0xC0000123 + STATUS_SPECIAL_ACCOUNT NTStatus = 0xC0000124 + STATUS_SPECIAL_GROUP NTStatus = 0xC0000125 + STATUS_SPECIAL_USER NTStatus = 0xC0000126 + STATUS_MEMBERS_PRIMARY_GROUP NTStatus = 0xC0000127 + STATUS_FILE_CLOSED NTStatus = 0xC0000128 + STATUS_TOO_MANY_THREADS NTStatus = 0xC0000129 + STATUS_THREAD_NOT_IN_PROCESS NTStatus = 0xC000012A + STATUS_TOKEN_ALREADY_IN_USE NTStatus = 0xC000012B + STATUS_PAGEFILE_QUOTA_EXCEEDED NTStatus = 0xC000012C + STATUS_COMMITMENT_LIMIT NTStatus = 0xC000012D + STATUS_INVALID_IMAGE_LE_FORMAT NTStatus = 0xC000012E + STATUS_INVALID_IMAGE_NOT_MZ NTStatus = 0xC000012F + STATUS_INVALID_IMAGE_PROTECT NTStatus = 0xC0000130 + STATUS_INVALID_IMAGE_WIN_16 NTStatus = 0xC0000131 + STATUS_LOGON_SERVER_CONFLICT NTStatus = 0xC0000132 + STATUS_TIME_DIFFERENCE_AT_DC NTStatus = 0xC0000133 + STATUS_SYNCHRONIZATION_REQUIRED NTStatus = 0xC0000134 + STATUS_DLL_NOT_FOUND NTStatus = 0xC0000135 + STATUS_OPEN_FAILED NTStatus = 0xC0000136 + STATUS_IO_PRIVILEGE_FAILED NTStatus = 0xC0000137 + STATUS_ORDINAL_NOT_FOUND NTStatus = 0xC0000138 + STATUS_ENTRYPOINT_NOT_FOUND NTStatus = 0xC0000139 + STATUS_CONTROL_C_EXIT NTStatus = 0xC000013A + STATUS_LOCAL_DISCONNECT NTStatus = 0xC000013B + STATUS_REMOTE_DISCONNECT NTStatus = 0xC000013C + STATUS_REMOTE_RESOURCES NTStatus = 0xC000013D + STATUS_LINK_FAILED NTStatus = 0xC000013E + STATUS_LINK_TIMEOUT NTStatus = 0xC000013F + STATUS_INVALID_CONNECTION NTStatus = 0xC0000140 + STATUS_INVALID_ADDRESS NTStatus = 0xC0000141 + STATUS_DLL_INIT_FAILED NTStatus = 0xC0000142 + STATUS_MISSING_SYSTEMFILE NTStatus = 0xC0000143 + STATUS_UNHANDLED_EXCEPTION NTStatus = 0xC0000144 + STATUS_APP_INIT_FAILURE NTStatus = 0xC0000145 + STATUS_PAGEFILE_CREATE_FAILED NTStatus = 0xC0000146 + STATUS_NO_PAGEFILE NTStatus = 0xC0000147 + STATUS_INVALID_LEVEL NTStatus = 0xC0000148 + STATUS_WRONG_PASSWORD_CORE NTStatus = 0xC0000149 + STATUS_ILLEGAL_FLOAT_CONTEXT NTStatus = 0xC000014A + STATUS_PIPE_BROKEN NTStatus = 0xC000014B + STATUS_REGISTRY_CORRUPT NTStatus = 0xC000014C + STATUS_REGISTRY_IO_FAILED NTStatus = 0xC000014D + STATUS_NO_EVENT_PAIR NTStatus = 0xC000014E + STATUS_UNRECOGNIZED_VOLUME NTStatus = 0xC000014F + STATUS_SERIAL_NO_DEVICE_INITED NTStatus = 0xC0000150 + STATUS_NO_SUCH_ALIAS NTStatus = 0xC0000151 + STATUS_MEMBER_NOT_IN_ALIAS NTStatus = 0xC0000152 + STATUS_MEMBER_IN_ALIAS NTStatus = 0xC0000153 + STATUS_ALIAS_EXISTS NTStatus = 0xC0000154 + STATUS_LOGON_NOT_GRANTED NTStatus = 0xC0000155 + STATUS_TOO_MANY_SECRETS NTStatus = 0xC0000156 + STATUS_SECRET_TOO_LONG NTStatus = 0xC0000157 + STATUS_INTERNAL_DB_ERROR NTStatus = 0xC0000158 + STATUS_FULLSCREEN_MODE NTStatus = 0xC0000159 + STATUS_TOO_MANY_CONTEXT_IDS NTStatus = 0xC000015A + STATUS_LOGON_TYPE_NOT_GRANTED NTStatus = 0xC000015B + STATUS_NOT_REGISTRY_FILE NTStatus = 0xC000015C + STATUS_NT_CROSS_ENCRYPTION_REQUIRED NTStatus = 0xC000015D + STATUS_DOMAIN_CTRLR_CONFIG_ERROR NTStatus = 0xC000015E + STATUS_FT_MISSING_MEMBER NTStatus = 0xC000015F + STATUS_ILL_FORMED_SERVICE_ENTRY NTStatus = 0xC0000160 + STATUS_ILLEGAL_CHARACTER NTStatus = 0xC0000161 + STATUS_UNMAPPABLE_CHARACTER NTStatus = 0xC0000162 + STATUS_UNDEFINED_CHARACTER NTStatus = 0xC0000163 + STATUS_FLOPPY_VOLUME NTStatus = 0xC0000164 + STATUS_FLOPPY_ID_MARK_NOT_FOUND NTStatus = 0xC0000165 + STATUS_FLOPPY_WRONG_CYLINDER NTStatus = 0xC0000166 + STATUS_FLOPPY_UNKNOWN_ERROR NTStatus = 0xC0000167 + STATUS_FLOPPY_BAD_REGISTERS NTStatus = 0xC0000168 + STATUS_DISK_RECALIBRATE_FAILED NTStatus = 0xC0000169 + STATUS_DISK_OPERATION_FAILED NTStatus = 0xC000016A + STATUS_DISK_RESET_FAILED NTStatus = 0xC000016B + STATUS_SHARED_IRQ_BUSY NTStatus = 0xC000016C + STATUS_FT_ORPHANING NTStatus = 0xC000016D + STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT NTStatus = 0xC000016E + STATUS_PARTITION_FAILURE NTStatus = 0xC0000172 + STATUS_INVALID_BLOCK_LENGTH NTStatus = 0xC0000173 + STATUS_DEVICE_NOT_PARTITIONED NTStatus = 0xC0000174 + STATUS_UNABLE_TO_LOCK_MEDIA NTStatus = 0xC0000175 + STATUS_UNABLE_TO_UNLOAD_MEDIA NTStatus = 0xC0000176 + STATUS_EOM_OVERFLOW NTStatus = 0xC0000177 + STATUS_NO_MEDIA NTStatus = 0xC0000178 + STATUS_NO_SUCH_MEMBER NTStatus = 0xC000017A + STATUS_INVALID_MEMBER NTStatus = 0xC000017B + STATUS_KEY_DELETED NTStatus = 0xC000017C + STATUS_NO_LOG_SPACE NTStatus = 0xC000017D + STATUS_TOO_MANY_SIDS NTStatus = 0xC000017E + STATUS_LM_CROSS_ENCRYPTION_REQUIRED NTStatus = 0xC000017F + STATUS_KEY_HAS_CHILDREN NTStatus = 0xC0000180 + STATUS_CHILD_MUST_BE_VOLATILE NTStatus = 0xC0000181 + STATUS_DEVICE_CONFIGURATION_ERROR NTStatus = 0xC0000182 + STATUS_DRIVER_INTERNAL_ERROR NTStatus = 0xC0000183 + STATUS_INVALID_DEVICE_STATE NTStatus = 0xC0000184 + STATUS_IO_DEVICE_ERROR NTStatus = 0xC0000185 + STATUS_DEVICE_PROTOCOL_ERROR NTStatus = 0xC0000186 + STATUS_BACKUP_CONTROLLER NTStatus = 0xC0000187 + STATUS_LOG_FILE_FULL NTStatus = 0xC0000188 + STATUS_TOO_LATE NTStatus = 0xC0000189 + STATUS_NO_TRUST_LSA_SECRET NTStatus = 0xC000018A + STATUS_NO_TRUST_SAM_ACCOUNT NTStatus = 0xC000018B + STATUS_TRUSTED_DOMAIN_FAILURE NTStatus = 0xC000018C + STATUS_TRUSTED_RELATIONSHIP_FAILURE NTStatus = 0xC000018D + STATUS_EVENTLOG_FILE_CORRUPT NTStatus = 0xC000018E + STATUS_EVENTLOG_CANT_START NTStatus = 0xC000018F + STATUS_TRUST_FAILURE NTStatus = 0xC0000190 + STATUS_MUTANT_LIMIT_EXCEEDED NTStatus = 0xC0000191 + STATUS_NETLOGON_NOT_STARTED NTStatus = 0xC0000192 + STATUS_ACCOUNT_EXPIRED NTStatus = 0xC0000193 + STATUS_POSSIBLE_DEADLOCK NTStatus = 0xC0000194 + STATUS_NETWORK_CREDENTIAL_CONFLICT NTStatus = 0xC0000195 + STATUS_REMOTE_SESSION_LIMIT NTStatus = 0xC0000196 + STATUS_EVENTLOG_FILE_CHANGED NTStatus = 0xC0000197 + STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT NTStatus = 0xC0000198 + STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT NTStatus = 0xC0000199 + STATUS_NOLOGON_SERVER_TRUST_ACCOUNT NTStatus = 0xC000019A + STATUS_DOMAIN_TRUST_INCONSISTENT NTStatus = 0xC000019B + STATUS_FS_DRIVER_REQUIRED NTStatus = 0xC000019C + STATUS_IMAGE_ALREADY_LOADED_AS_DLL NTStatus = 0xC000019D + STATUS_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING NTStatus = 0xC000019E + STATUS_SHORT_NAMES_NOT_ENABLED_ON_VOLUME NTStatus = 0xC000019F + STATUS_SECURITY_STREAM_IS_INCONSISTENT NTStatus = 0xC00001A0 + STATUS_INVALID_LOCK_RANGE NTStatus = 0xC00001A1 + STATUS_INVALID_ACE_CONDITION NTStatus = 0xC00001A2 + STATUS_IMAGE_SUBSYSTEM_NOT_PRESENT NTStatus = 0xC00001A3 + STATUS_NOTIFICATION_GUID_ALREADY_DEFINED NTStatus = 0xC00001A4 + STATUS_INVALID_EXCEPTION_HANDLER NTStatus = 0xC00001A5 + STATUS_DUPLICATE_PRIVILEGES NTStatus = 0xC00001A6 + STATUS_NOT_ALLOWED_ON_SYSTEM_FILE NTStatus = 0xC00001A7 + STATUS_REPAIR_NEEDED NTStatus = 0xC00001A8 + STATUS_QUOTA_NOT_ENABLED NTStatus = 0xC00001A9 + STATUS_NO_APPLICATION_PACKAGE NTStatus = 0xC00001AA + STATUS_FILE_METADATA_OPTIMIZATION_IN_PROGRESS NTStatus = 0xC00001AB + STATUS_NOT_SAME_OBJECT NTStatus = 0xC00001AC + STATUS_FATAL_MEMORY_EXHAUSTION NTStatus = 0xC00001AD + STATUS_ERROR_PROCESS_NOT_IN_JOB NTStatus = 0xC00001AE + STATUS_CPU_SET_INVALID NTStatus = 0xC00001AF + STATUS_IO_DEVICE_INVALID_DATA NTStatus = 0xC00001B0 + STATUS_IO_UNALIGNED_WRITE NTStatus = 0xC00001B1 + STATUS_NETWORK_OPEN_RESTRICTION NTStatus = 0xC0000201 + STATUS_NO_USER_SESSION_KEY NTStatus = 0xC0000202 + STATUS_USER_SESSION_DELETED NTStatus = 0xC0000203 + STATUS_RESOURCE_LANG_NOT_FOUND NTStatus = 0xC0000204 + STATUS_INSUFF_SERVER_RESOURCES NTStatus = 0xC0000205 + STATUS_INVALID_BUFFER_SIZE NTStatus = 0xC0000206 + STATUS_INVALID_ADDRESS_COMPONENT NTStatus = 0xC0000207 + STATUS_INVALID_ADDRESS_WILDCARD NTStatus = 0xC0000208 + STATUS_TOO_MANY_ADDRESSES NTStatus = 0xC0000209 + STATUS_ADDRESS_ALREADY_EXISTS NTStatus = 0xC000020A + STATUS_ADDRESS_CLOSED NTStatus = 0xC000020B + STATUS_CONNECTION_DISCONNECTED NTStatus = 0xC000020C + STATUS_CONNECTION_RESET NTStatus = 0xC000020D + STATUS_TOO_MANY_NODES NTStatus = 0xC000020E + STATUS_TRANSACTION_ABORTED NTStatus = 0xC000020F + STATUS_TRANSACTION_TIMED_OUT NTStatus = 0xC0000210 + STATUS_TRANSACTION_NO_RELEASE NTStatus = 0xC0000211 + STATUS_TRANSACTION_NO_MATCH NTStatus = 0xC0000212 + STATUS_TRANSACTION_RESPONDED NTStatus = 0xC0000213 + STATUS_TRANSACTION_INVALID_ID NTStatus = 0xC0000214 + STATUS_TRANSACTION_INVALID_TYPE NTStatus = 0xC0000215 + STATUS_NOT_SERVER_SESSION NTStatus = 0xC0000216 + STATUS_NOT_CLIENT_SESSION NTStatus = 0xC0000217 + STATUS_CANNOT_LOAD_REGISTRY_FILE NTStatus = 0xC0000218 + STATUS_DEBUG_ATTACH_FAILED NTStatus = 0xC0000219 + STATUS_SYSTEM_PROCESS_TERMINATED NTStatus = 0xC000021A + STATUS_DATA_NOT_ACCEPTED NTStatus = 0xC000021B + STATUS_NO_BROWSER_SERVERS_FOUND NTStatus = 0xC000021C + STATUS_VDM_HARD_ERROR NTStatus = 0xC000021D + STATUS_DRIVER_CANCEL_TIMEOUT NTStatus = 0xC000021E + STATUS_REPLY_MESSAGE_MISMATCH NTStatus = 0xC000021F + STATUS_MAPPED_ALIGNMENT NTStatus = 0xC0000220 + STATUS_IMAGE_CHECKSUM_MISMATCH NTStatus = 0xC0000221 + STATUS_LOST_WRITEBEHIND_DATA NTStatus = 0xC0000222 + STATUS_CLIENT_SERVER_PARAMETERS_INVALID NTStatus = 0xC0000223 + STATUS_PASSWORD_MUST_CHANGE NTStatus = 0xC0000224 + STATUS_NOT_FOUND NTStatus = 0xC0000225 + STATUS_NOT_TINY_STREAM NTStatus = 0xC0000226 + STATUS_RECOVERY_FAILURE NTStatus = 0xC0000227 + STATUS_STACK_OVERFLOW_READ NTStatus = 0xC0000228 + STATUS_FAIL_CHECK NTStatus = 0xC0000229 + STATUS_DUPLICATE_OBJECTID NTStatus = 0xC000022A + STATUS_OBJECTID_EXISTS NTStatus = 0xC000022B + STATUS_CONVERT_TO_LARGE NTStatus = 0xC000022C + STATUS_RETRY NTStatus = 0xC000022D + STATUS_FOUND_OUT_OF_SCOPE NTStatus = 0xC000022E + STATUS_ALLOCATE_BUCKET NTStatus = 0xC000022F + STATUS_PROPSET_NOT_FOUND NTStatus = 0xC0000230 + STATUS_MARSHALL_OVERFLOW NTStatus = 0xC0000231 + STATUS_INVALID_VARIANT NTStatus = 0xC0000232 + STATUS_DOMAIN_CONTROLLER_NOT_FOUND NTStatus = 0xC0000233 + STATUS_ACCOUNT_LOCKED_OUT NTStatus = 0xC0000234 + STATUS_HANDLE_NOT_CLOSABLE NTStatus = 0xC0000235 + STATUS_CONNECTION_REFUSED NTStatus = 0xC0000236 + STATUS_GRACEFUL_DISCONNECT NTStatus = 0xC0000237 + STATUS_ADDRESS_ALREADY_ASSOCIATED NTStatus = 0xC0000238 + STATUS_ADDRESS_NOT_ASSOCIATED NTStatus = 0xC0000239 + STATUS_CONNECTION_INVALID NTStatus = 0xC000023A + STATUS_CONNECTION_ACTIVE NTStatus = 0xC000023B + STATUS_NETWORK_UNREACHABLE NTStatus = 0xC000023C + STATUS_HOST_UNREACHABLE NTStatus = 0xC000023D + STATUS_PROTOCOL_UNREACHABLE NTStatus = 0xC000023E + STATUS_PORT_UNREACHABLE NTStatus = 0xC000023F + STATUS_REQUEST_ABORTED NTStatus = 0xC0000240 + STATUS_CONNECTION_ABORTED NTStatus = 0xC0000241 + STATUS_BAD_COMPRESSION_BUFFER NTStatus = 0xC0000242 + STATUS_USER_MAPPED_FILE NTStatus = 0xC0000243 + STATUS_AUDIT_FAILED NTStatus = 0xC0000244 + STATUS_TIMER_RESOLUTION_NOT_SET NTStatus = 0xC0000245 + STATUS_CONNECTION_COUNT_LIMIT NTStatus = 0xC0000246 + STATUS_LOGIN_TIME_RESTRICTION NTStatus = 0xC0000247 + STATUS_LOGIN_WKSTA_RESTRICTION NTStatus = 0xC0000248 + STATUS_IMAGE_MP_UP_MISMATCH NTStatus = 0xC0000249 + STATUS_INSUFFICIENT_LOGON_INFO NTStatus = 0xC0000250 + STATUS_BAD_DLL_ENTRYPOINT NTStatus = 0xC0000251 + STATUS_BAD_SERVICE_ENTRYPOINT NTStatus = 0xC0000252 + STATUS_LPC_REPLY_LOST NTStatus = 0xC0000253 + STATUS_IP_ADDRESS_CONFLICT1 NTStatus = 0xC0000254 + STATUS_IP_ADDRESS_CONFLICT2 NTStatus = 0xC0000255 + STATUS_REGISTRY_QUOTA_LIMIT NTStatus = 0xC0000256 + STATUS_PATH_NOT_COVERED NTStatus = 0xC0000257 + STATUS_NO_CALLBACK_ACTIVE NTStatus = 0xC0000258 + STATUS_LICENSE_QUOTA_EXCEEDED NTStatus = 0xC0000259 + STATUS_PWD_TOO_SHORT NTStatus = 0xC000025A + STATUS_PWD_TOO_RECENT NTStatus = 0xC000025B + STATUS_PWD_HISTORY_CONFLICT NTStatus = 0xC000025C + STATUS_PLUGPLAY_NO_DEVICE NTStatus = 0xC000025E + STATUS_UNSUPPORTED_COMPRESSION NTStatus = 0xC000025F + STATUS_INVALID_HW_PROFILE NTStatus = 0xC0000260 + STATUS_INVALID_PLUGPLAY_DEVICE_PATH NTStatus = 0xC0000261 + STATUS_DRIVER_ORDINAL_NOT_FOUND NTStatus = 0xC0000262 + STATUS_DRIVER_ENTRYPOINT_NOT_FOUND NTStatus = 0xC0000263 + STATUS_RESOURCE_NOT_OWNED NTStatus = 0xC0000264 + STATUS_TOO_MANY_LINKS NTStatus = 0xC0000265 + STATUS_QUOTA_LIST_INCONSISTENT NTStatus = 0xC0000266 + STATUS_FILE_IS_OFFLINE NTStatus = 0xC0000267 + STATUS_EVALUATION_EXPIRATION NTStatus = 0xC0000268 + STATUS_ILLEGAL_DLL_RELOCATION NTStatus = 0xC0000269 + STATUS_LICENSE_VIOLATION NTStatus = 0xC000026A + STATUS_DLL_INIT_FAILED_LOGOFF NTStatus = 0xC000026B + STATUS_DRIVER_UNABLE_TO_LOAD NTStatus = 0xC000026C + STATUS_DFS_UNAVAILABLE NTStatus = 0xC000026D + STATUS_VOLUME_DISMOUNTED NTStatus = 0xC000026E + STATUS_WX86_INTERNAL_ERROR NTStatus = 0xC000026F + STATUS_WX86_FLOAT_STACK_CHECK NTStatus = 0xC0000270 + STATUS_VALIDATE_CONTINUE NTStatus = 0xC0000271 + STATUS_NO_MATCH NTStatus = 0xC0000272 + STATUS_NO_MORE_MATCHES NTStatus = 0xC0000273 + STATUS_NOT_A_REPARSE_POINT NTStatus = 0xC0000275 + STATUS_IO_REPARSE_TAG_INVALID NTStatus = 0xC0000276 + STATUS_IO_REPARSE_TAG_MISMATCH NTStatus = 0xC0000277 + STATUS_IO_REPARSE_DATA_INVALID NTStatus = 0xC0000278 + STATUS_IO_REPARSE_TAG_NOT_HANDLED NTStatus = 0xC0000279 + STATUS_PWD_TOO_LONG NTStatus = 0xC000027A + STATUS_STOWED_EXCEPTION NTStatus = 0xC000027B + STATUS_CONTEXT_STOWED_EXCEPTION NTStatus = 0xC000027C + STATUS_REPARSE_POINT_NOT_RESOLVED NTStatus = 0xC0000280 + STATUS_DIRECTORY_IS_A_REPARSE_POINT NTStatus = 0xC0000281 + STATUS_RANGE_LIST_CONFLICT NTStatus = 0xC0000282 + STATUS_SOURCE_ELEMENT_EMPTY NTStatus = 0xC0000283 + STATUS_DESTINATION_ELEMENT_FULL NTStatus = 0xC0000284 + STATUS_ILLEGAL_ELEMENT_ADDRESS NTStatus = 0xC0000285 + STATUS_MAGAZINE_NOT_PRESENT NTStatus = 0xC0000286 + STATUS_REINITIALIZATION_NEEDED NTStatus = 0xC0000287 + STATUS_DEVICE_REQUIRES_CLEANING NTStatus = 0x80000288 + STATUS_DEVICE_DOOR_OPEN NTStatus = 0x80000289 + STATUS_ENCRYPTION_FAILED NTStatus = 0xC000028A + STATUS_DECRYPTION_FAILED NTStatus = 0xC000028B + STATUS_RANGE_NOT_FOUND NTStatus = 0xC000028C + STATUS_NO_RECOVERY_POLICY NTStatus = 0xC000028D + STATUS_NO_EFS NTStatus = 0xC000028E + STATUS_WRONG_EFS NTStatus = 0xC000028F + STATUS_NO_USER_KEYS NTStatus = 0xC0000290 + STATUS_FILE_NOT_ENCRYPTED NTStatus = 0xC0000291 + STATUS_NOT_EXPORT_FORMAT NTStatus = 0xC0000292 + STATUS_FILE_ENCRYPTED NTStatus = 0xC0000293 + STATUS_WAKE_SYSTEM NTStatus = 0x40000294 + STATUS_WMI_GUID_NOT_FOUND NTStatus = 0xC0000295 + STATUS_WMI_INSTANCE_NOT_FOUND NTStatus = 0xC0000296 + STATUS_WMI_ITEMID_NOT_FOUND NTStatus = 0xC0000297 + STATUS_WMI_TRY_AGAIN NTStatus = 0xC0000298 + STATUS_SHARED_POLICY NTStatus = 0xC0000299 + STATUS_POLICY_OBJECT_NOT_FOUND NTStatus = 0xC000029A + STATUS_POLICY_ONLY_IN_DS NTStatus = 0xC000029B + STATUS_VOLUME_NOT_UPGRADED NTStatus = 0xC000029C + STATUS_REMOTE_STORAGE_NOT_ACTIVE NTStatus = 0xC000029D + STATUS_REMOTE_STORAGE_MEDIA_ERROR NTStatus = 0xC000029E + STATUS_NO_TRACKING_SERVICE NTStatus = 0xC000029F + STATUS_SERVER_SID_MISMATCH NTStatus = 0xC00002A0 + STATUS_DS_NO_ATTRIBUTE_OR_VALUE NTStatus = 0xC00002A1 + STATUS_DS_INVALID_ATTRIBUTE_SYNTAX NTStatus = 0xC00002A2 + STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED NTStatus = 0xC00002A3 + STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS NTStatus = 0xC00002A4 + STATUS_DS_BUSY NTStatus = 0xC00002A5 + STATUS_DS_UNAVAILABLE NTStatus = 0xC00002A6 + STATUS_DS_NO_RIDS_ALLOCATED NTStatus = 0xC00002A7 + STATUS_DS_NO_MORE_RIDS NTStatus = 0xC00002A8 + STATUS_DS_INCORRECT_ROLE_OWNER NTStatus = 0xC00002A9 + STATUS_DS_RIDMGR_INIT_ERROR NTStatus = 0xC00002AA + STATUS_DS_OBJ_CLASS_VIOLATION NTStatus = 0xC00002AB + STATUS_DS_CANT_ON_NON_LEAF NTStatus = 0xC00002AC + STATUS_DS_CANT_ON_RDN NTStatus = 0xC00002AD + STATUS_DS_CANT_MOD_OBJ_CLASS NTStatus = 0xC00002AE + STATUS_DS_CROSS_DOM_MOVE_FAILED NTStatus = 0xC00002AF + STATUS_DS_GC_NOT_AVAILABLE NTStatus = 0xC00002B0 + STATUS_DIRECTORY_SERVICE_REQUIRED NTStatus = 0xC00002B1 + STATUS_REPARSE_ATTRIBUTE_CONFLICT NTStatus = 0xC00002B2 + STATUS_CANT_ENABLE_DENY_ONLY NTStatus = 0xC00002B3 + STATUS_FLOAT_MULTIPLE_FAULTS NTStatus = 0xC00002B4 + STATUS_FLOAT_MULTIPLE_TRAPS NTStatus = 0xC00002B5 + STATUS_DEVICE_REMOVED NTStatus = 0xC00002B6 + STATUS_JOURNAL_DELETE_IN_PROGRESS NTStatus = 0xC00002B7 + STATUS_JOURNAL_NOT_ACTIVE NTStatus = 0xC00002B8 + STATUS_NOINTERFACE NTStatus = 0xC00002B9 + STATUS_DS_RIDMGR_DISABLED NTStatus = 0xC00002BA + STATUS_DS_ADMIN_LIMIT_EXCEEDED NTStatus = 0xC00002C1 + STATUS_DRIVER_FAILED_SLEEP NTStatus = 0xC00002C2 + STATUS_MUTUAL_AUTHENTICATION_FAILED NTStatus = 0xC00002C3 + STATUS_CORRUPT_SYSTEM_FILE NTStatus = 0xC00002C4 + STATUS_DATATYPE_MISALIGNMENT_ERROR NTStatus = 0xC00002C5 + STATUS_WMI_READ_ONLY NTStatus = 0xC00002C6 + STATUS_WMI_SET_FAILURE NTStatus = 0xC00002C7 + STATUS_COMMITMENT_MINIMUM NTStatus = 0xC00002C8 + STATUS_REG_NAT_CONSUMPTION NTStatus = 0xC00002C9 + STATUS_TRANSPORT_FULL NTStatus = 0xC00002CA + STATUS_DS_SAM_INIT_FAILURE NTStatus = 0xC00002CB + STATUS_ONLY_IF_CONNECTED NTStatus = 0xC00002CC + STATUS_DS_SENSITIVE_GROUP_VIOLATION NTStatus = 0xC00002CD + STATUS_PNP_RESTART_ENUMERATION NTStatus = 0xC00002CE + STATUS_JOURNAL_ENTRY_DELETED NTStatus = 0xC00002CF + STATUS_DS_CANT_MOD_PRIMARYGROUPID NTStatus = 0xC00002D0 + STATUS_SYSTEM_IMAGE_BAD_SIGNATURE NTStatus = 0xC00002D1 + STATUS_PNP_REBOOT_REQUIRED NTStatus = 0xC00002D2 + STATUS_POWER_STATE_INVALID NTStatus = 0xC00002D3 + STATUS_DS_INVALID_GROUP_TYPE NTStatus = 0xC00002D4 + STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN NTStatus = 0xC00002D5 + STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN NTStatus = 0xC00002D6 + STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER NTStatus = 0xC00002D7 + STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER NTStatus = 0xC00002D8 + STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER NTStatus = 0xC00002D9 + STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER NTStatus = 0xC00002DA + STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER NTStatus = 0xC00002DB + STATUS_DS_HAVE_PRIMARY_MEMBERS NTStatus = 0xC00002DC + STATUS_WMI_NOT_SUPPORTED NTStatus = 0xC00002DD + STATUS_INSUFFICIENT_POWER NTStatus = 0xC00002DE + STATUS_SAM_NEED_BOOTKEY_PASSWORD NTStatus = 0xC00002DF + STATUS_SAM_NEED_BOOTKEY_FLOPPY NTStatus = 0xC00002E0 + STATUS_DS_CANT_START NTStatus = 0xC00002E1 + STATUS_DS_INIT_FAILURE NTStatus = 0xC00002E2 + STATUS_SAM_INIT_FAILURE NTStatus = 0xC00002E3 + STATUS_DS_GC_REQUIRED NTStatus = 0xC00002E4 + STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY NTStatus = 0xC00002E5 + STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS NTStatus = 0xC00002E6 + STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED NTStatus = 0xC00002E7 + STATUS_MULTIPLE_FAULT_VIOLATION NTStatus = 0xC00002E8 + STATUS_CURRENT_DOMAIN_NOT_ALLOWED NTStatus = 0xC00002E9 + STATUS_CANNOT_MAKE NTStatus = 0xC00002EA + STATUS_SYSTEM_SHUTDOWN NTStatus = 0xC00002EB + STATUS_DS_INIT_FAILURE_CONSOLE NTStatus = 0xC00002EC + STATUS_DS_SAM_INIT_FAILURE_CONSOLE NTStatus = 0xC00002ED + STATUS_UNFINISHED_CONTEXT_DELETED NTStatus = 0xC00002EE + STATUS_NO_TGT_REPLY NTStatus = 0xC00002EF + STATUS_OBJECTID_NOT_FOUND NTStatus = 0xC00002F0 + STATUS_NO_IP_ADDRESSES NTStatus = 0xC00002F1 + STATUS_WRONG_CREDENTIAL_HANDLE NTStatus = 0xC00002F2 + STATUS_CRYPTO_SYSTEM_INVALID NTStatus = 0xC00002F3 + STATUS_MAX_REFERRALS_EXCEEDED NTStatus = 0xC00002F4 + STATUS_MUST_BE_KDC NTStatus = 0xC00002F5 + STATUS_STRONG_CRYPTO_NOT_SUPPORTED NTStatus = 0xC00002F6 + STATUS_TOO_MANY_PRINCIPALS NTStatus = 0xC00002F7 + STATUS_NO_PA_DATA NTStatus = 0xC00002F8 + STATUS_PKINIT_NAME_MISMATCH NTStatus = 0xC00002F9 + STATUS_SMARTCARD_LOGON_REQUIRED NTStatus = 0xC00002FA + STATUS_KDC_INVALID_REQUEST NTStatus = 0xC00002FB + STATUS_KDC_UNABLE_TO_REFER NTStatus = 0xC00002FC + STATUS_KDC_UNKNOWN_ETYPE NTStatus = 0xC00002FD + STATUS_SHUTDOWN_IN_PROGRESS NTStatus = 0xC00002FE + STATUS_SERVER_SHUTDOWN_IN_PROGRESS NTStatus = 0xC00002FF + STATUS_NOT_SUPPORTED_ON_SBS NTStatus = 0xC0000300 + STATUS_WMI_GUID_DISCONNECTED NTStatus = 0xC0000301 + STATUS_WMI_ALREADY_DISABLED NTStatus = 0xC0000302 + STATUS_WMI_ALREADY_ENABLED NTStatus = 0xC0000303 + STATUS_MFT_TOO_FRAGMENTED NTStatus = 0xC0000304 + STATUS_COPY_PROTECTION_FAILURE NTStatus = 0xC0000305 + STATUS_CSS_AUTHENTICATION_FAILURE NTStatus = 0xC0000306 + STATUS_CSS_KEY_NOT_PRESENT NTStatus = 0xC0000307 + STATUS_CSS_KEY_NOT_ESTABLISHED NTStatus = 0xC0000308 + STATUS_CSS_SCRAMBLED_SECTOR NTStatus = 0xC0000309 + STATUS_CSS_REGION_MISMATCH NTStatus = 0xC000030A + STATUS_CSS_RESETS_EXHAUSTED NTStatus = 0xC000030B + STATUS_PASSWORD_CHANGE_REQUIRED NTStatus = 0xC000030C + STATUS_LOST_MODE_LOGON_RESTRICTION NTStatus = 0xC000030D + STATUS_PKINIT_FAILURE NTStatus = 0xC0000320 + STATUS_SMARTCARD_SUBSYSTEM_FAILURE NTStatus = 0xC0000321 + STATUS_NO_KERB_KEY NTStatus = 0xC0000322 + STATUS_HOST_DOWN NTStatus = 0xC0000350 + STATUS_UNSUPPORTED_PREAUTH NTStatus = 0xC0000351 + STATUS_EFS_ALG_BLOB_TOO_BIG NTStatus = 0xC0000352 + STATUS_PORT_NOT_SET NTStatus = 0xC0000353 + STATUS_DEBUGGER_INACTIVE NTStatus = 0xC0000354 + STATUS_DS_VERSION_CHECK_FAILURE NTStatus = 0xC0000355 + STATUS_AUDITING_DISABLED NTStatus = 0xC0000356 + STATUS_PRENT4_MACHINE_ACCOUNT NTStatus = 0xC0000357 + STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER NTStatus = 0xC0000358 + STATUS_INVALID_IMAGE_WIN_32 NTStatus = 0xC0000359 + STATUS_INVALID_IMAGE_WIN_64 NTStatus = 0xC000035A + STATUS_BAD_BINDINGS NTStatus = 0xC000035B + STATUS_NETWORK_SESSION_EXPIRED NTStatus = 0xC000035C + STATUS_APPHELP_BLOCK NTStatus = 0xC000035D + STATUS_ALL_SIDS_FILTERED NTStatus = 0xC000035E + STATUS_NOT_SAFE_MODE_DRIVER NTStatus = 0xC000035F + STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT NTStatus = 0xC0000361 + STATUS_ACCESS_DISABLED_BY_POLICY_PATH NTStatus = 0xC0000362 + STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER NTStatus = 0xC0000363 + STATUS_ACCESS_DISABLED_BY_POLICY_OTHER NTStatus = 0xC0000364 + STATUS_FAILED_DRIVER_ENTRY NTStatus = 0xC0000365 + STATUS_DEVICE_ENUMERATION_ERROR NTStatus = 0xC0000366 + STATUS_MOUNT_POINT_NOT_RESOLVED NTStatus = 0xC0000368 + STATUS_INVALID_DEVICE_OBJECT_PARAMETER NTStatus = 0xC0000369 + STATUS_MCA_OCCURED NTStatus = 0xC000036A + STATUS_DRIVER_BLOCKED_CRITICAL NTStatus = 0xC000036B + STATUS_DRIVER_BLOCKED NTStatus = 0xC000036C + STATUS_DRIVER_DATABASE_ERROR NTStatus = 0xC000036D + STATUS_SYSTEM_HIVE_TOO_LARGE NTStatus = 0xC000036E + STATUS_INVALID_IMPORT_OF_NON_DLL NTStatus = 0xC000036F + STATUS_DS_SHUTTING_DOWN NTStatus = 0x40000370 + STATUS_NO_SECRETS NTStatus = 0xC0000371 + STATUS_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY NTStatus = 0xC0000372 + STATUS_FAILED_STACK_SWITCH NTStatus = 0xC0000373 + STATUS_HEAP_CORRUPTION NTStatus = 0xC0000374 + STATUS_SMARTCARD_WRONG_PIN NTStatus = 0xC0000380 + STATUS_SMARTCARD_CARD_BLOCKED NTStatus = 0xC0000381 + STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED NTStatus = 0xC0000382 + STATUS_SMARTCARD_NO_CARD NTStatus = 0xC0000383 + STATUS_SMARTCARD_NO_KEY_CONTAINER NTStatus = 0xC0000384 + STATUS_SMARTCARD_NO_CERTIFICATE NTStatus = 0xC0000385 + STATUS_SMARTCARD_NO_KEYSET NTStatus = 0xC0000386 + STATUS_SMARTCARD_IO_ERROR NTStatus = 0xC0000387 + STATUS_DOWNGRADE_DETECTED NTStatus = 0xC0000388 + STATUS_SMARTCARD_CERT_REVOKED NTStatus = 0xC0000389 + STATUS_ISSUING_CA_UNTRUSTED NTStatus = 0xC000038A + STATUS_REVOCATION_OFFLINE_C NTStatus = 0xC000038B + STATUS_PKINIT_CLIENT_FAILURE NTStatus = 0xC000038C + STATUS_SMARTCARD_CERT_EXPIRED NTStatus = 0xC000038D + STATUS_DRIVER_FAILED_PRIOR_UNLOAD NTStatus = 0xC000038E + STATUS_SMARTCARD_SILENT_CONTEXT NTStatus = 0xC000038F + STATUS_PER_USER_TRUST_QUOTA_EXCEEDED NTStatus = 0xC0000401 + STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED NTStatus = 0xC0000402 + STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED NTStatus = 0xC0000403 + STATUS_DS_NAME_NOT_UNIQUE NTStatus = 0xC0000404 + STATUS_DS_DUPLICATE_ID_FOUND NTStatus = 0xC0000405 + STATUS_DS_GROUP_CONVERSION_ERROR NTStatus = 0xC0000406 + STATUS_VOLSNAP_PREPARE_HIBERNATE NTStatus = 0xC0000407 + STATUS_USER2USER_REQUIRED NTStatus = 0xC0000408 + STATUS_STACK_BUFFER_OVERRUN NTStatus = 0xC0000409 + STATUS_NO_S4U_PROT_SUPPORT NTStatus = 0xC000040A + STATUS_CROSSREALM_DELEGATION_FAILURE NTStatus = 0xC000040B + STATUS_REVOCATION_OFFLINE_KDC NTStatus = 0xC000040C + STATUS_ISSUING_CA_UNTRUSTED_KDC NTStatus = 0xC000040D + STATUS_KDC_CERT_EXPIRED NTStatus = 0xC000040E + STATUS_KDC_CERT_REVOKED NTStatus = 0xC000040F + STATUS_PARAMETER_QUOTA_EXCEEDED NTStatus = 0xC0000410 + STATUS_HIBERNATION_FAILURE NTStatus = 0xC0000411 + STATUS_DELAY_LOAD_FAILED NTStatus = 0xC0000412 + STATUS_AUTHENTICATION_FIREWALL_FAILED NTStatus = 0xC0000413 + STATUS_VDM_DISALLOWED NTStatus = 0xC0000414 + STATUS_HUNG_DISPLAY_DRIVER_THREAD NTStatus = 0xC0000415 + STATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE NTStatus = 0xC0000416 + STATUS_INVALID_CRUNTIME_PARAMETER NTStatus = 0xC0000417 + STATUS_NTLM_BLOCKED NTStatus = 0xC0000418 + STATUS_DS_SRC_SID_EXISTS_IN_FOREST NTStatus = 0xC0000419 + STATUS_DS_DOMAIN_NAME_EXISTS_IN_FOREST NTStatus = 0xC000041A + STATUS_DS_FLAT_NAME_EXISTS_IN_FOREST NTStatus = 0xC000041B + STATUS_INVALID_USER_PRINCIPAL_NAME NTStatus = 0xC000041C + STATUS_FATAL_USER_CALLBACK_EXCEPTION NTStatus = 0xC000041D + STATUS_ASSERTION_FAILURE NTStatus = 0xC0000420 + STATUS_VERIFIER_STOP NTStatus = 0xC0000421 + STATUS_CALLBACK_POP_STACK NTStatus = 0xC0000423 + STATUS_INCOMPATIBLE_DRIVER_BLOCKED NTStatus = 0xC0000424 + STATUS_HIVE_UNLOADED NTStatus = 0xC0000425 + STATUS_COMPRESSION_DISABLED NTStatus = 0xC0000426 + STATUS_FILE_SYSTEM_LIMITATION NTStatus = 0xC0000427 + STATUS_INVALID_IMAGE_HASH NTStatus = 0xC0000428 + STATUS_NOT_CAPABLE NTStatus = 0xC0000429 + STATUS_REQUEST_OUT_OF_SEQUENCE NTStatus = 0xC000042A + STATUS_IMPLEMENTATION_LIMIT NTStatus = 0xC000042B + STATUS_ELEVATION_REQUIRED NTStatus = 0xC000042C + STATUS_NO_SECURITY_CONTEXT NTStatus = 0xC000042D + STATUS_PKU2U_CERT_FAILURE NTStatus = 0xC000042F + STATUS_BEYOND_VDL NTStatus = 0xC0000432 + STATUS_ENCOUNTERED_WRITE_IN_PROGRESS NTStatus = 0xC0000433 + STATUS_PTE_CHANGED NTStatus = 0xC0000434 + STATUS_PURGE_FAILED NTStatus = 0xC0000435 + STATUS_CRED_REQUIRES_CONFIRMATION NTStatus = 0xC0000440 + STATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE NTStatus = 0xC0000441 + STATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER NTStatus = 0xC0000442 + STATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE NTStatus = 0xC0000443 + STATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE NTStatus = 0xC0000444 + STATUS_CS_ENCRYPTION_FILE_NOT_CSE NTStatus = 0xC0000445 + STATUS_INVALID_LABEL NTStatus = 0xC0000446 + STATUS_DRIVER_PROCESS_TERMINATED NTStatus = 0xC0000450 + STATUS_AMBIGUOUS_SYSTEM_DEVICE NTStatus = 0xC0000451 + STATUS_SYSTEM_DEVICE_NOT_FOUND NTStatus = 0xC0000452 + STATUS_RESTART_BOOT_APPLICATION NTStatus = 0xC0000453 + STATUS_INSUFFICIENT_NVRAM_RESOURCES NTStatus = 0xC0000454 + STATUS_INVALID_SESSION NTStatus = 0xC0000455 + STATUS_THREAD_ALREADY_IN_SESSION NTStatus = 0xC0000456 + STATUS_THREAD_NOT_IN_SESSION NTStatus = 0xC0000457 + STATUS_INVALID_WEIGHT NTStatus = 0xC0000458 + STATUS_REQUEST_PAUSED NTStatus = 0xC0000459 + STATUS_NO_RANGES_PROCESSED NTStatus = 0xC0000460 + STATUS_DISK_RESOURCES_EXHAUSTED NTStatus = 0xC0000461 + STATUS_NEEDS_REMEDIATION NTStatus = 0xC0000462 + STATUS_DEVICE_FEATURE_NOT_SUPPORTED NTStatus = 0xC0000463 + STATUS_DEVICE_UNREACHABLE NTStatus = 0xC0000464 + STATUS_INVALID_TOKEN NTStatus = 0xC0000465 + STATUS_SERVER_UNAVAILABLE NTStatus = 0xC0000466 + STATUS_FILE_NOT_AVAILABLE NTStatus = 0xC0000467 + STATUS_DEVICE_INSUFFICIENT_RESOURCES NTStatus = 0xC0000468 + STATUS_PACKAGE_UPDATING NTStatus = 0xC0000469 + STATUS_NOT_READ_FROM_COPY NTStatus = 0xC000046A + STATUS_FT_WRITE_FAILURE NTStatus = 0xC000046B + STATUS_FT_DI_SCAN_REQUIRED NTStatus = 0xC000046C + STATUS_OBJECT_NOT_EXTERNALLY_BACKED NTStatus = 0xC000046D + STATUS_EXTERNAL_BACKING_PROVIDER_UNKNOWN NTStatus = 0xC000046E + STATUS_COMPRESSION_NOT_BENEFICIAL NTStatus = 0xC000046F + STATUS_DATA_CHECKSUM_ERROR NTStatus = 0xC0000470 + STATUS_INTERMIXED_KERNEL_EA_OPERATION NTStatus = 0xC0000471 + STATUS_TRIM_READ_ZERO_NOT_SUPPORTED NTStatus = 0xC0000472 + STATUS_TOO_MANY_SEGMENT_DESCRIPTORS NTStatus = 0xC0000473 + STATUS_INVALID_OFFSET_ALIGNMENT NTStatus = 0xC0000474 + STATUS_INVALID_FIELD_IN_PARAMETER_LIST NTStatus = 0xC0000475 + STATUS_OPERATION_IN_PROGRESS NTStatus = 0xC0000476 + STATUS_INVALID_INITIATOR_TARGET_PATH NTStatus = 0xC0000477 + STATUS_SCRUB_DATA_DISABLED NTStatus = 0xC0000478 + STATUS_NOT_REDUNDANT_STORAGE NTStatus = 0xC0000479 + STATUS_RESIDENT_FILE_NOT_SUPPORTED NTStatus = 0xC000047A + STATUS_COMPRESSED_FILE_NOT_SUPPORTED NTStatus = 0xC000047B + STATUS_DIRECTORY_NOT_SUPPORTED NTStatus = 0xC000047C + STATUS_IO_OPERATION_TIMEOUT NTStatus = 0xC000047D + STATUS_SYSTEM_NEEDS_REMEDIATION NTStatus = 0xC000047E + STATUS_APPX_INTEGRITY_FAILURE_CLR_NGEN NTStatus = 0xC000047F + STATUS_SHARE_UNAVAILABLE NTStatus = 0xC0000480 + STATUS_APISET_NOT_HOSTED NTStatus = 0xC0000481 + STATUS_APISET_NOT_PRESENT NTStatus = 0xC0000482 + STATUS_DEVICE_HARDWARE_ERROR NTStatus = 0xC0000483 + STATUS_FIRMWARE_SLOT_INVALID NTStatus = 0xC0000484 + STATUS_FIRMWARE_IMAGE_INVALID NTStatus = 0xC0000485 + STATUS_STORAGE_TOPOLOGY_ID_MISMATCH NTStatus = 0xC0000486 + STATUS_WIM_NOT_BOOTABLE NTStatus = 0xC0000487 + STATUS_BLOCKED_BY_PARENTAL_CONTROLS NTStatus = 0xC0000488 + STATUS_NEEDS_REGISTRATION NTStatus = 0xC0000489 + STATUS_QUOTA_ACTIVITY NTStatus = 0xC000048A + STATUS_CALLBACK_INVOKE_INLINE NTStatus = 0xC000048B + STATUS_BLOCK_TOO_MANY_REFERENCES NTStatus = 0xC000048C + STATUS_MARKED_TO_DISALLOW_WRITES NTStatus = 0xC000048D + STATUS_NETWORK_ACCESS_DENIED_EDP NTStatus = 0xC000048E + STATUS_ENCLAVE_FAILURE NTStatus = 0xC000048F + STATUS_PNP_NO_COMPAT_DRIVERS NTStatus = 0xC0000490 + STATUS_PNP_DRIVER_PACKAGE_NOT_FOUND NTStatus = 0xC0000491 + STATUS_PNP_DRIVER_CONFIGURATION_NOT_FOUND NTStatus = 0xC0000492 + STATUS_PNP_DRIVER_CONFIGURATION_INCOMPLETE NTStatus = 0xC0000493 + STATUS_PNP_FUNCTION_DRIVER_REQUIRED NTStatus = 0xC0000494 + STATUS_PNP_DEVICE_CONFIGURATION_PENDING NTStatus = 0xC0000495 + STATUS_DEVICE_HINT_NAME_BUFFER_TOO_SMALL NTStatus = 0xC0000496 + STATUS_PACKAGE_NOT_AVAILABLE NTStatus = 0xC0000497 + STATUS_DEVICE_IN_MAINTENANCE NTStatus = 0xC0000499 + STATUS_NOT_SUPPORTED_ON_DAX NTStatus = 0xC000049A + STATUS_FREE_SPACE_TOO_FRAGMENTED NTStatus = 0xC000049B + STATUS_DAX_MAPPING_EXISTS NTStatus = 0xC000049C + STATUS_CHILD_PROCESS_BLOCKED NTStatus = 0xC000049D + STATUS_STORAGE_LOST_DATA_PERSISTENCE NTStatus = 0xC000049E + STATUS_VRF_CFG_ENABLED NTStatus = 0xC000049F + STATUS_PARTITION_TERMINATING NTStatus = 0xC00004A0 + STATUS_EXTERNAL_SYSKEY_NOT_SUPPORTED NTStatus = 0xC00004A1 + STATUS_ENCLAVE_VIOLATION NTStatus = 0xC00004A2 + STATUS_FILE_PROTECTED_UNDER_DPL NTStatus = 0xC00004A3 + STATUS_VOLUME_NOT_CLUSTER_ALIGNED NTStatus = 0xC00004A4 + STATUS_NO_PHYSICALLY_ALIGNED_FREE_SPACE_FOUND NTStatus = 0xC00004A5 + STATUS_APPX_FILE_NOT_ENCRYPTED NTStatus = 0xC00004A6 + STATUS_RWRAW_ENCRYPTED_FILE_NOT_ENCRYPTED NTStatus = 0xC00004A7 + STATUS_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILEOFFSET NTStatus = 0xC00004A8 + STATUS_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILERANGE NTStatus = 0xC00004A9 + STATUS_RWRAW_ENCRYPTED_INVALID_EDATAINFO_PARAMETER NTStatus = 0xC00004AA + STATUS_FT_READ_FAILURE NTStatus = 0xC00004AB + STATUS_PATCH_CONFLICT NTStatus = 0xC00004AC + STATUS_STORAGE_RESERVE_ID_INVALID NTStatus = 0xC00004AD + STATUS_STORAGE_RESERVE_DOES_NOT_EXIST NTStatus = 0xC00004AE + STATUS_STORAGE_RESERVE_ALREADY_EXISTS NTStatus = 0xC00004AF + STATUS_STORAGE_RESERVE_NOT_EMPTY NTStatus = 0xC00004B0 + STATUS_NOT_A_DAX_VOLUME NTStatus = 0xC00004B1 + STATUS_NOT_DAX_MAPPABLE NTStatus = 0xC00004B2 + STATUS_CASE_DIFFERING_NAMES_IN_DIR NTStatus = 0xC00004B3 + STATUS_FILE_NOT_SUPPORTED NTStatus = 0xC00004B4 + STATUS_NOT_SUPPORTED_WITH_BTT NTStatus = 0xC00004B5 + STATUS_ENCRYPTION_DISABLED NTStatus = 0xC00004B6 + STATUS_ENCRYPTING_METADATA_DISALLOWED NTStatus = 0xC00004B7 + STATUS_CANT_CLEAR_ENCRYPTION_FLAG NTStatus = 0xC00004B8 + STATUS_INVALID_TASK_NAME NTStatus = 0xC0000500 + STATUS_INVALID_TASK_INDEX NTStatus = 0xC0000501 + STATUS_THREAD_ALREADY_IN_TASK NTStatus = 0xC0000502 + STATUS_CALLBACK_BYPASS NTStatus = 0xC0000503 + STATUS_UNDEFINED_SCOPE NTStatus = 0xC0000504 + STATUS_INVALID_CAP NTStatus = 0xC0000505 + STATUS_NOT_GUI_PROCESS NTStatus = 0xC0000506 + STATUS_DEVICE_HUNG NTStatus = 0xC0000507 + STATUS_CONTAINER_ASSIGNED NTStatus = 0xC0000508 + STATUS_JOB_NO_CONTAINER NTStatus = 0xC0000509 + STATUS_DEVICE_UNRESPONSIVE NTStatus = 0xC000050A + STATUS_REPARSE_POINT_ENCOUNTERED NTStatus = 0xC000050B + STATUS_ATTRIBUTE_NOT_PRESENT NTStatus = 0xC000050C + STATUS_NOT_A_TIERED_VOLUME NTStatus = 0xC000050D + STATUS_ALREADY_HAS_STREAM_ID NTStatus = 0xC000050E + STATUS_JOB_NOT_EMPTY NTStatus = 0xC000050F + STATUS_ALREADY_INITIALIZED NTStatus = 0xC0000510 + STATUS_ENCLAVE_NOT_TERMINATED NTStatus = 0xC0000511 + STATUS_ENCLAVE_IS_TERMINATING NTStatus = 0xC0000512 + STATUS_SMB1_NOT_AVAILABLE NTStatus = 0xC0000513 + STATUS_SMR_GARBAGE_COLLECTION_REQUIRED NTStatus = 0xC0000514 + STATUS_INTERRUPTED NTStatus = 0xC0000515 + STATUS_THREAD_NOT_RUNNING NTStatus = 0xC0000516 + STATUS_FAIL_FAST_EXCEPTION NTStatus = 0xC0000602 + STATUS_IMAGE_CERT_REVOKED NTStatus = 0xC0000603 + STATUS_DYNAMIC_CODE_BLOCKED NTStatus = 0xC0000604 + STATUS_IMAGE_CERT_EXPIRED NTStatus = 0xC0000605 + STATUS_STRICT_CFG_VIOLATION NTStatus = 0xC0000606 + STATUS_SET_CONTEXT_DENIED NTStatus = 0xC000060A + STATUS_CROSS_PARTITION_VIOLATION NTStatus = 0xC000060B + STATUS_PORT_CLOSED NTStatus = 0xC0000700 + STATUS_MESSAGE_LOST NTStatus = 0xC0000701 + STATUS_INVALID_MESSAGE NTStatus = 0xC0000702 + STATUS_REQUEST_CANCELED NTStatus = 0xC0000703 + STATUS_RECURSIVE_DISPATCH NTStatus = 0xC0000704 + STATUS_LPC_RECEIVE_BUFFER_EXPECTED NTStatus = 0xC0000705 + STATUS_LPC_INVALID_CONNECTION_USAGE NTStatus = 0xC0000706 + STATUS_LPC_REQUESTS_NOT_ALLOWED NTStatus = 0xC0000707 + STATUS_RESOURCE_IN_USE NTStatus = 0xC0000708 + STATUS_HARDWARE_MEMORY_ERROR NTStatus = 0xC0000709 + STATUS_THREADPOOL_HANDLE_EXCEPTION NTStatus = 0xC000070A + STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED NTStatus = 0xC000070B + STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED NTStatus = 0xC000070C + STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED NTStatus = 0xC000070D + STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED NTStatus = 0xC000070E + STATUS_THREADPOOL_RELEASED_DURING_OPERATION NTStatus = 0xC000070F + STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING NTStatus = 0xC0000710 + STATUS_APC_RETURNED_WHILE_IMPERSONATING NTStatus = 0xC0000711 + STATUS_PROCESS_IS_PROTECTED NTStatus = 0xC0000712 + STATUS_MCA_EXCEPTION NTStatus = 0xC0000713 + STATUS_CERTIFICATE_MAPPING_NOT_UNIQUE NTStatus = 0xC0000714 + STATUS_SYMLINK_CLASS_DISABLED NTStatus = 0xC0000715 + STATUS_INVALID_IDN_NORMALIZATION NTStatus = 0xC0000716 + STATUS_NO_UNICODE_TRANSLATION NTStatus = 0xC0000717 + STATUS_ALREADY_REGISTERED NTStatus = 0xC0000718 + STATUS_CONTEXT_MISMATCH NTStatus = 0xC0000719 + STATUS_PORT_ALREADY_HAS_COMPLETION_LIST NTStatus = 0xC000071A + STATUS_CALLBACK_RETURNED_THREAD_PRIORITY NTStatus = 0xC000071B + STATUS_INVALID_THREAD NTStatus = 0xC000071C + STATUS_CALLBACK_RETURNED_TRANSACTION NTStatus = 0xC000071D + STATUS_CALLBACK_RETURNED_LDR_LOCK NTStatus = 0xC000071E + STATUS_CALLBACK_RETURNED_LANG NTStatus = 0xC000071F + STATUS_CALLBACK_RETURNED_PRI_BACK NTStatus = 0xC0000720 + STATUS_CALLBACK_RETURNED_THREAD_AFFINITY NTStatus = 0xC0000721 + STATUS_LPC_HANDLE_COUNT_EXCEEDED NTStatus = 0xC0000722 + STATUS_EXECUTABLE_MEMORY_WRITE NTStatus = 0xC0000723 + STATUS_KERNEL_EXECUTABLE_MEMORY_WRITE NTStatus = 0xC0000724 + STATUS_ATTACHED_EXECUTABLE_MEMORY_WRITE NTStatus = 0xC0000725 + STATUS_TRIGGERED_EXECUTABLE_MEMORY_WRITE NTStatus = 0xC0000726 + STATUS_DISK_REPAIR_DISABLED NTStatus = 0xC0000800 + STATUS_DS_DOMAIN_RENAME_IN_PROGRESS NTStatus = 0xC0000801 + STATUS_DISK_QUOTA_EXCEEDED NTStatus = 0xC0000802 + STATUS_DATA_LOST_REPAIR NTStatus = 0x80000803 + STATUS_CONTENT_BLOCKED NTStatus = 0xC0000804 + STATUS_BAD_CLUSTERS NTStatus = 0xC0000805 + STATUS_VOLUME_DIRTY NTStatus = 0xC0000806 + STATUS_DISK_REPAIR_REDIRECTED NTStatus = 0x40000807 + STATUS_DISK_REPAIR_UNSUCCESSFUL NTStatus = 0xC0000808 + STATUS_CORRUPT_LOG_OVERFULL NTStatus = 0xC0000809 + STATUS_CORRUPT_LOG_CORRUPTED NTStatus = 0xC000080A + STATUS_CORRUPT_LOG_UNAVAILABLE NTStatus = 0xC000080B + STATUS_CORRUPT_LOG_DELETED_FULL NTStatus = 0xC000080C + STATUS_CORRUPT_LOG_CLEARED NTStatus = 0xC000080D + STATUS_ORPHAN_NAME_EXHAUSTED NTStatus = 0xC000080E + STATUS_PROACTIVE_SCAN_IN_PROGRESS NTStatus = 0xC000080F + STATUS_ENCRYPTED_IO_NOT_POSSIBLE NTStatus = 0xC0000810 + STATUS_CORRUPT_LOG_UPLEVEL_RECORDS NTStatus = 0xC0000811 + STATUS_FILE_CHECKED_OUT NTStatus = 0xC0000901 + STATUS_CHECKOUT_REQUIRED NTStatus = 0xC0000902 + STATUS_BAD_FILE_TYPE NTStatus = 0xC0000903 + STATUS_FILE_TOO_LARGE NTStatus = 0xC0000904 + STATUS_FORMS_AUTH_REQUIRED NTStatus = 0xC0000905 + STATUS_VIRUS_INFECTED NTStatus = 0xC0000906 + STATUS_VIRUS_DELETED NTStatus = 0xC0000907 + STATUS_BAD_MCFG_TABLE NTStatus = 0xC0000908 + STATUS_CANNOT_BREAK_OPLOCK NTStatus = 0xC0000909 + STATUS_BAD_KEY NTStatus = 0xC000090A + STATUS_BAD_DATA NTStatus = 0xC000090B + STATUS_NO_KEY NTStatus = 0xC000090C + STATUS_FILE_HANDLE_REVOKED NTStatus = 0xC0000910 + STATUS_WOW_ASSERTION NTStatus = 0xC0009898 + STATUS_INVALID_SIGNATURE NTStatus = 0xC000A000 + STATUS_HMAC_NOT_SUPPORTED NTStatus = 0xC000A001 + STATUS_AUTH_TAG_MISMATCH NTStatus = 0xC000A002 + STATUS_INVALID_STATE_TRANSITION NTStatus = 0xC000A003 + STATUS_INVALID_KERNEL_INFO_VERSION NTStatus = 0xC000A004 + STATUS_INVALID_PEP_INFO_VERSION NTStatus = 0xC000A005 + STATUS_HANDLE_REVOKED NTStatus = 0xC000A006 + STATUS_EOF_ON_GHOSTED_RANGE NTStatus = 0xC000A007 + STATUS_IPSEC_QUEUE_OVERFLOW NTStatus = 0xC000A010 + STATUS_ND_QUEUE_OVERFLOW NTStatus = 0xC000A011 + STATUS_HOPLIMIT_EXCEEDED NTStatus = 0xC000A012 + STATUS_PROTOCOL_NOT_SUPPORTED NTStatus = 0xC000A013 + STATUS_FASTPATH_REJECTED NTStatus = 0xC000A014 + STATUS_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED NTStatus = 0xC000A080 + STATUS_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR NTStatus = 0xC000A081 + STATUS_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR NTStatus = 0xC000A082 + STATUS_XML_PARSE_ERROR NTStatus = 0xC000A083 + STATUS_XMLDSIG_ERROR NTStatus = 0xC000A084 + STATUS_WRONG_COMPARTMENT NTStatus = 0xC000A085 + STATUS_AUTHIP_FAILURE NTStatus = 0xC000A086 + STATUS_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS NTStatus = 0xC000A087 + STATUS_DS_OID_NOT_FOUND NTStatus = 0xC000A088 + STATUS_INCORRECT_ACCOUNT_TYPE NTStatus = 0xC000A089 + STATUS_HASH_NOT_SUPPORTED NTStatus = 0xC000A100 + STATUS_HASH_NOT_PRESENT NTStatus = 0xC000A101 + STATUS_SECONDARY_IC_PROVIDER_NOT_REGISTERED NTStatus = 0xC000A121 + STATUS_GPIO_CLIENT_INFORMATION_INVALID NTStatus = 0xC000A122 + STATUS_GPIO_VERSION_NOT_SUPPORTED NTStatus = 0xC000A123 + STATUS_GPIO_INVALID_REGISTRATION_PACKET NTStatus = 0xC000A124 + STATUS_GPIO_OPERATION_DENIED NTStatus = 0xC000A125 + STATUS_GPIO_INCOMPATIBLE_CONNECT_MODE NTStatus = 0xC000A126 + STATUS_GPIO_INTERRUPT_ALREADY_UNMASKED NTStatus = 0x8000A127 + STATUS_CANNOT_SWITCH_RUNLEVEL NTStatus = 0xC000A141 + STATUS_INVALID_RUNLEVEL_SETTING NTStatus = 0xC000A142 + STATUS_RUNLEVEL_SWITCH_TIMEOUT NTStatus = 0xC000A143 + STATUS_SERVICES_FAILED_AUTOSTART NTStatus = 0x4000A144 + STATUS_RUNLEVEL_SWITCH_AGENT_TIMEOUT NTStatus = 0xC000A145 + STATUS_RUNLEVEL_SWITCH_IN_PROGRESS NTStatus = 0xC000A146 + STATUS_NOT_APPCONTAINER NTStatus = 0xC000A200 + STATUS_NOT_SUPPORTED_IN_APPCONTAINER NTStatus = 0xC000A201 + STATUS_INVALID_PACKAGE_SID_LENGTH NTStatus = 0xC000A202 + STATUS_LPAC_ACCESS_DENIED NTStatus = 0xC000A203 + STATUS_ADMINLESS_ACCESS_DENIED NTStatus = 0xC000A204 + STATUS_APP_DATA_NOT_FOUND NTStatus = 0xC000A281 + STATUS_APP_DATA_EXPIRED NTStatus = 0xC000A282 + STATUS_APP_DATA_CORRUPT NTStatus = 0xC000A283 + STATUS_APP_DATA_LIMIT_EXCEEDED NTStatus = 0xC000A284 + STATUS_APP_DATA_REBOOT_REQUIRED NTStatus = 0xC000A285 + STATUS_OFFLOAD_READ_FLT_NOT_SUPPORTED NTStatus = 0xC000A2A1 + STATUS_OFFLOAD_WRITE_FLT_NOT_SUPPORTED NTStatus = 0xC000A2A2 + STATUS_OFFLOAD_READ_FILE_NOT_SUPPORTED NTStatus = 0xC000A2A3 + STATUS_OFFLOAD_WRITE_FILE_NOT_SUPPORTED NTStatus = 0xC000A2A4 + STATUS_WOF_WIM_HEADER_CORRUPT NTStatus = 0xC000A2A5 + STATUS_WOF_WIM_RESOURCE_TABLE_CORRUPT NTStatus = 0xC000A2A6 + STATUS_WOF_FILE_RESOURCE_TABLE_CORRUPT NTStatus = 0xC000A2A7 + STATUS_FILE_SYSTEM_VIRTUALIZATION_UNAVAILABLE NTStatus = 0xC000CE01 + STATUS_FILE_SYSTEM_VIRTUALIZATION_METADATA_CORRUPT NTStatus = 0xC000CE02 + STATUS_FILE_SYSTEM_VIRTUALIZATION_BUSY NTStatus = 0xC000CE03 + STATUS_FILE_SYSTEM_VIRTUALIZATION_PROVIDER_UNKNOWN NTStatus = 0xC000CE04 + STATUS_FILE_SYSTEM_VIRTUALIZATION_INVALID_OPERATION NTStatus = 0xC000CE05 + STATUS_CLOUD_FILE_SYNC_ROOT_METADATA_CORRUPT NTStatus = 0xC000CF00 + STATUS_CLOUD_FILE_PROVIDER_NOT_RUNNING NTStatus = 0xC000CF01 + STATUS_CLOUD_FILE_METADATA_CORRUPT NTStatus = 0xC000CF02 + STATUS_CLOUD_FILE_METADATA_TOO_LARGE NTStatus = 0xC000CF03 + STATUS_CLOUD_FILE_PROPERTY_BLOB_TOO_LARGE NTStatus = 0x8000CF04 + STATUS_CLOUD_FILE_TOO_MANY_PROPERTY_BLOBS NTStatus = 0x8000CF05 + STATUS_CLOUD_FILE_PROPERTY_VERSION_NOT_SUPPORTED NTStatus = 0xC000CF06 + STATUS_NOT_A_CLOUD_FILE NTStatus = 0xC000CF07 + STATUS_CLOUD_FILE_NOT_IN_SYNC NTStatus = 0xC000CF08 + STATUS_CLOUD_FILE_ALREADY_CONNECTED NTStatus = 0xC000CF09 + STATUS_CLOUD_FILE_NOT_SUPPORTED NTStatus = 0xC000CF0A + STATUS_CLOUD_FILE_INVALID_REQUEST NTStatus = 0xC000CF0B + STATUS_CLOUD_FILE_READ_ONLY_VOLUME NTStatus = 0xC000CF0C + STATUS_CLOUD_FILE_CONNECTED_PROVIDER_ONLY NTStatus = 0xC000CF0D + STATUS_CLOUD_FILE_VALIDATION_FAILED NTStatus = 0xC000CF0E + STATUS_CLOUD_FILE_AUTHENTICATION_FAILED NTStatus = 0xC000CF0F + STATUS_CLOUD_FILE_INSUFFICIENT_RESOURCES NTStatus = 0xC000CF10 + STATUS_CLOUD_FILE_NETWORK_UNAVAILABLE NTStatus = 0xC000CF11 + STATUS_CLOUD_FILE_UNSUCCESSFUL NTStatus = 0xC000CF12 + STATUS_CLOUD_FILE_NOT_UNDER_SYNC_ROOT NTStatus = 0xC000CF13 + STATUS_CLOUD_FILE_IN_USE NTStatus = 0xC000CF14 + STATUS_CLOUD_FILE_PINNED NTStatus = 0xC000CF15 + STATUS_CLOUD_FILE_REQUEST_ABORTED NTStatus = 0xC000CF16 + STATUS_CLOUD_FILE_PROPERTY_CORRUPT NTStatus = 0xC000CF17 + STATUS_CLOUD_FILE_ACCESS_DENIED NTStatus = 0xC000CF18 + STATUS_CLOUD_FILE_INCOMPATIBLE_HARDLINKS NTStatus = 0xC000CF19 + STATUS_CLOUD_FILE_PROPERTY_LOCK_CONFLICT NTStatus = 0xC000CF1A + STATUS_CLOUD_FILE_REQUEST_CANCELED NTStatus = 0xC000CF1B + STATUS_CLOUD_FILE_PROVIDER_TERMINATED NTStatus = 0xC000CF1D + STATUS_NOT_A_CLOUD_SYNC_ROOT NTStatus = 0xC000CF1E + STATUS_CLOUD_FILE_REQUEST_TIMEOUT NTStatus = 0xC000CF1F + STATUS_ACPI_INVALID_OPCODE NTStatus = 0xC0140001 + STATUS_ACPI_STACK_OVERFLOW NTStatus = 0xC0140002 + STATUS_ACPI_ASSERT_FAILED NTStatus = 0xC0140003 + STATUS_ACPI_INVALID_INDEX NTStatus = 0xC0140004 + STATUS_ACPI_INVALID_ARGUMENT NTStatus = 0xC0140005 + STATUS_ACPI_FATAL NTStatus = 0xC0140006 + STATUS_ACPI_INVALID_SUPERNAME NTStatus = 0xC0140007 + STATUS_ACPI_INVALID_ARGTYPE NTStatus = 0xC0140008 + STATUS_ACPI_INVALID_OBJTYPE NTStatus = 0xC0140009 + STATUS_ACPI_INVALID_TARGETTYPE NTStatus = 0xC014000A + STATUS_ACPI_INCORRECT_ARGUMENT_COUNT NTStatus = 0xC014000B + STATUS_ACPI_ADDRESS_NOT_MAPPED NTStatus = 0xC014000C + STATUS_ACPI_INVALID_EVENTTYPE NTStatus = 0xC014000D + STATUS_ACPI_HANDLER_COLLISION NTStatus = 0xC014000E + STATUS_ACPI_INVALID_DATA NTStatus = 0xC014000F + STATUS_ACPI_INVALID_REGION NTStatus = 0xC0140010 + STATUS_ACPI_INVALID_ACCESS_SIZE NTStatus = 0xC0140011 + STATUS_ACPI_ACQUIRE_GLOBAL_LOCK NTStatus = 0xC0140012 + STATUS_ACPI_ALREADY_INITIALIZED NTStatus = 0xC0140013 + STATUS_ACPI_NOT_INITIALIZED NTStatus = 0xC0140014 + STATUS_ACPI_INVALID_MUTEX_LEVEL NTStatus = 0xC0140015 + STATUS_ACPI_MUTEX_NOT_OWNED NTStatus = 0xC0140016 + STATUS_ACPI_MUTEX_NOT_OWNER NTStatus = 0xC0140017 + STATUS_ACPI_RS_ACCESS NTStatus = 0xC0140018 + STATUS_ACPI_INVALID_TABLE NTStatus = 0xC0140019 + STATUS_ACPI_REG_HANDLER_FAILED NTStatus = 0xC0140020 + STATUS_ACPI_POWER_REQUEST_FAILED NTStatus = 0xC0140021 + STATUS_CTX_WINSTATION_NAME_INVALID NTStatus = 0xC00A0001 + STATUS_CTX_INVALID_PD NTStatus = 0xC00A0002 + STATUS_CTX_PD_NOT_FOUND NTStatus = 0xC00A0003 + STATUS_CTX_CDM_CONNECT NTStatus = 0x400A0004 + STATUS_CTX_CDM_DISCONNECT NTStatus = 0x400A0005 + STATUS_CTX_CLOSE_PENDING NTStatus = 0xC00A0006 + STATUS_CTX_NO_OUTBUF NTStatus = 0xC00A0007 + STATUS_CTX_MODEM_INF_NOT_FOUND NTStatus = 0xC00A0008 + STATUS_CTX_INVALID_MODEMNAME NTStatus = 0xC00A0009 + STATUS_CTX_RESPONSE_ERROR NTStatus = 0xC00A000A + STATUS_CTX_MODEM_RESPONSE_TIMEOUT NTStatus = 0xC00A000B + STATUS_CTX_MODEM_RESPONSE_NO_CARRIER NTStatus = 0xC00A000C + STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE NTStatus = 0xC00A000D + STATUS_CTX_MODEM_RESPONSE_BUSY NTStatus = 0xC00A000E + STATUS_CTX_MODEM_RESPONSE_VOICE NTStatus = 0xC00A000F + STATUS_CTX_TD_ERROR NTStatus = 0xC00A0010 + STATUS_CTX_LICENSE_CLIENT_INVALID NTStatus = 0xC00A0012 + STATUS_CTX_LICENSE_NOT_AVAILABLE NTStatus = 0xC00A0013 + STATUS_CTX_LICENSE_EXPIRED NTStatus = 0xC00A0014 + STATUS_CTX_WINSTATION_NOT_FOUND NTStatus = 0xC00A0015 + STATUS_CTX_WINSTATION_NAME_COLLISION NTStatus = 0xC00A0016 + STATUS_CTX_WINSTATION_BUSY NTStatus = 0xC00A0017 + STATUS_CTX_BAD_VIDEO_MODE NTStatus = 0xC00A0018 + STATUS_CTX_GRAPHICS_INVALID NTStatus = 0xC00A0022 + STATUS_CTX_NOT_CONSOLE NTStatus = 0xC00A0024 + STATUS_CTX_CLIENT_QUERY_TIMEOUT NTStatus = 0xC00A0026 + STATUS_CTX_CONSOLE_DISCONNECT NTStatus = 0xC00A0027 + STATUS_CTX_CONSOLE_CONNECT NTStatus = 0xC00A0028 + STATUS_CTX_SHADOW_DENIED NTStatus = 0xC00A002A + STATUS_CTX_WINSTATION_ACCESS_DENIED NTStatus = 0xC00A002B + STATUS_CTX_INVALID_WD NTStatus = 0xC00A002E + STATUS_CTX_WD_NOT_FOUND NTStatus = 0xC00A002F + STATUS_CTX_SHADOW_INVALID NTStatus = 0xC00A0030 + STATUS_CTX_SHADOW_DISABLED NTStatus = 0xC00A0031 + STATUS_RDP_PROTOCOL_ERROR NTStatus = 0xC00A0032 + STATUS_CTX_CLIENT_LICENSE_NOT_SET NTStatus = 0xC00A0033 + STATUS_CTX_CLIENT_LICENSE_IN_USE NTStatus = 0xC00A0034 + STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE NTStatus = 0xC00A0035 + STATUS_CTX_SHADOW_NOT_RUNNING NTStatus = 0xC00A0036 + STATUS_CTX_LOGON_DISABLED NTStatus = 0xC00A0037 + STATUS_CTX_SECURITY_LAYER_ERROR NTStatus = 0xC00A0038 + STATUS_TS_INCOMPATIBLE_SESSIONS NTStatus = 0xC00A0039 + STATUS_TS_VIDEO_SUBSYSTEM_ERROR NTStatus = 0xC00A003A + STATUS_PNP_BAD_MPS_TABLE NTStatus = 0xC0040035 + STATUS_PNP_TRANSLATION_FAILED NTStatus = 0xC0040036 + STATUS_PNP_IRQ_TRANSLATION_FAILED NTStatus = 0xC0040037 + STATUS_PNP_INVALID_ID NTStatus = 0xC0040038 + STATUS_IO_REISSUE_AS_CACHED NTStatus = 0xC0040039 + STATUS_MUI_FILE_NOT_FOUND NTStatus = 0xC00B0001 + STATUS_MUI_INVALID_FILE NTStatus = 0xC00B0002 + STATUS_MUI_INVALID_RC_CONFIG NTStatus = 0xC00B0003 + STATUS_MUI_INVALID_LOCALE_NAME NTStatus = 0xC00B0004 + STATUS_MUI_INVALID_ULTIMATEFALLBACK_NAME NTStatus = 0xC00B0005 + STATUS_MUI_FILE_NOT_LOADED NTStatus = 0xC00B0006 + STATUS_RESOURCE_ENUM_USER_STOP NTStatus = 0xC00B0007 + STATUS_FLT_NO_HANDLER_DEFINED NTStatus = 0xC01C0001 + STATUS_FLT_CONTEXT_ALREADY_DEFINED NTStatus = 0xC01C0002 + STATUS_FLT_INVALID_ASYNCHRONOUS_REQUEST NTStatus = 0xC01C0003 + STATUS_FLT_DISALLOW_FAST_IO NTStatus = 0xC01C0004 + STATUS_FLT_INVALID_NAME_REQUEST NTStatus = 0xC01C0005 + STATUS_FLT_NOT_SAFE_TO_POST_OPERATION NTStatus = 0xC01C0006 + STATUS_FLT_NOT_INITIALIZED NTStatus = 0xC01C0007 + STATUS_FLT_FILTER_NOT_READY NTStatus = 0xC01C0008 + STATUS_FLT_POST_OPERATION_CLEANUP NTStatus = 0xC01C0009 + STATUS_FLT_INTERNAL_ERROR NTStatus = 0xC01C000A + STATUS_FLT_DELETING_OBJECT NTStatus = 0xC01C000B + STATUS_FLT_MUST_BE_NONPAGED_POOL NTStatus = 0xC01C000C + STATUS_FLT_DUPLICATE_ENTRY NTStatus = 0xC01C000D + STATUS_FLT_CBDQ_DISABLED NTStatus = 0xC01C000E + STATUS_FLT_DO_NOT_ATTACH NTStatus = 0xC01C000F + STATUS_FLT_DO_NOT_DETACH NTStatus = 0xC01C0010 + STATUS_FLT_INSTANCE_ALTITUDE_COLLISION NTStatus = 0xC01C0011 + STATUS_FLT_INSTANCE_NAME_COLLISION NTStatus = 0xC01C0012 + STATUS_FLT_FILTER_NOT_FOUND NTStatus = 0xC01C0013 + STATUS_FLT_VOLUME_NOT_FOUND NTStatus = 0xC01C0014 + STATUS_FLT_INSTANCE_NOT_FOUND NTStatus = 0xC01C0015 + STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND NTStatus = 0xC01C0016 + STATUS_FLT_INVALID_CONTEXT_REGISTRATION NTStatus = 0xC01C0017 + STATUS_FLT_NAME_CACHE_MISS NTStatus = 0xC01C0018 + STATUS_FLT_NO_DEVICE_OBJECT NTStatus = 0xC01C0019 + STATUS_FLT_VOLUME_ALREADY_MOUNTED NTStatus = 0xC01C001A + STATUS_FLT_ALREADY_ENLISTED NTStatus = 0xC01C001B + STATUS_FLT_CONTEXT_ALREADY_LINKED NTStatus = 0xC01C001C + STATUS_FLT_NO_WAITER_FOR_REPLY NTStatus = 0xC01C0020 + STATUS_FLT_REGISTRATION_BUSY NTStatus = 0xC01C0023 + STATUS_SXS_SECTION_NOT_FOUND NTStatus = 0xC0150001 + STATUS_SXS_CANT_GEN_ACTCTX NTStatus = 0xC0150002 + STATUS_SXS_INVALID_ACTCTXDATA_FORMAT NTStatus = 0xC0150003 + STATUS_SXS_ASSEMBLY_NOT_FOUND NTStatus = 0xC0150004 + STATUS_SXS_MANIFEST_FORMAT_ERROR NTStatus = 0xC0150005 + STATUS_SXS_MANIFEST_PARSE_ERROR NTStatus = 0xC0150006 + STATUS_SXS_ACTIVATION_CONTEXT_DISABLED NTStatus = 0xC0150007 + STATUS_SXS_KEY_NOT_FOUND NTStatus = 0xC0150008 + STATUS_SXS_VERSION_CONFLICT NTStatus = 0xC0150009 + STATUS_SXS_WRONG_SECTION_TYPE NTStatus = 0xC015000A + STATUS_SXS_THREAD_QUERIES_DISABLED NTStatus = 0xC015000B + STATUS_SXS_ASSEMBLY_MISSING NTStatus = 0xC015000C + STATUS_SXS_RELEASE_ACTIVATION_CONTEXT NTStatus = 0x4015000D + STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET NTStatus = 0xC015000E + STATUS_SXS_EARLY_DEACTIVATION NTStatus = 0xC015000F + STATUS_SXS_INVALID_DEACTIVATION NTStatus = 0xC0150010 + STATUS_SXS_MULTIPLE_DEACTIVATION NTStatus = 0xC0150011 + STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY NTStatus = 0xC0150012 + STATUS_SXS_PROCESS_TERMINATION_REQUESTED NTStatus = 0xC0150013 + STATUS_SXS_CORRUPT_ACTIVATION_STACK NTStatus = 0xC0150014 + STATUS_SXS_CORRUPTION NTStatus = 0xC0150015 + STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE NTStatus = 0xC0150016 + STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME NTStatus = 0xC0150017 + STATUS_SXS_IDENTITY_DUPLICATE_ATTRIBUTE NTStatus = 0xC0150018 + STATUS_SXS_IDENTITY_PARSE_ERROR NTStatus = 0xC0150019 + STATUS_SXS_COMPONENT_STORE_CORRUPT NTStatus = 0xC015001A + STATUS_SXS_FILE_HASH_MISMATCH NTStatus = 0xC015001B + STATUS_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT NTStatus = 0xC015001C + STATUS_SXS_IDENTITIES_DIFFERENT NTStatus = 0xC015001D + STATUS_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT NTStatus = 0xC015001E + STATUS_SXS_FILE_NOT_PART_OF_ASSEMBLY NTStatus = 0xC015001F + STATUS_ADVANCED_INSTALLER_FAILED NTStatus = 0xC0150020 + STATUS_XML_ENCODING_MISMATCH NTStatus = 0xC0150021 + STATUS_SXS_MANIFEST_TOO_BIG NTStatus = 0xC0150022 + STATUS_SXS_SETTING_NOT_REGISTERED NTStatus = 0xC0150023 + STATUS_SXS_TRANSACTION_CLOSURE_INCOMPLETE NTStatus = 0xC0150024 + STATUS_SMI_PRIMITIVE_INSTALLER_FAILED NTStatus = 0xC0150025 + STATUS_GENERIC_COMMAND_FAILED NTStatus = 0xC0150026 + STATUS_SXS_FILE_HASH_MISSING NTStatus = 0xC0150027 + STATUS_CLUSTER_INVALID_NODE NTStatus = 0xC0130001 + STATUS_CLUSTER_NODE_EXISTS NTStatus = 0xC0130002 + STATUS_CLUSTER_JOIN_IN_PROGRESS NTStatus = 0xC0130003 + STATUS_CLUSTER_NODE_NOT_FOUND NTStatus = 0xC0130004 + STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND NTStatus = 0xC0130005 + STATUS_CLUSTER_NETWORK_EXISTS NTStatus = 0xC0130006 + STATUS_CLUSTER_NETWORK_NOT_FOUND NTStatus = 0xC0130007 + STATUS_CLUSTER_NETINTERFACE_EXISTS NTStatus = 0xC0130008 + STATUS_CLUSTER_NETINTERFACE_NOT_FOUND NTStatus = 0xC0130009 + STATUS_CLUSTER_INVALID_REQUEST NTStatus = 0xC013000A + STATUS_CLUSTER_INVALID_NETWORK_PROVIDER NTStatus = 0xC013000B + STATUS_CLUSTER_NODE_DOWN NTStatus = 0xC013000C + STATUS_CLUSTER_NODE_UNREACHABLE NTStatus = 0xC013000D + STATUS_CLUSTER_NODE_NOT_MEMBER NTStatus = 0xC013000E + STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS NTStatus = 0xC013000F + STATUS_CLUSTER_INVALID_NETWORK NTStatus = 0xC0130010 + STATUS_CLUSTER_NO_NET_ADAPTERS NTStatus = 0xC0130011 + STATUS_CLUSTER_NODE_UP NTStatus = 0xC0130012 + STATUS_CLUSTER_NODE_PAUSED NTStatus = 0xC0130013 + STATUS_CLUSTER_NODE_NOT_PAUSED NTStatus = 0xC0130014 + STATUS_CLUSTER_NO_SECURITY_CONTEXT NTStatus = 0xC0130015 + STATUS_CLUSTER_NETWORK_NOT_INTERNAL NTStatus = 0xC0130016 + STATUS_CLUSTER_POISONED NTStatus = 0xC0130017 + STATUS_CLUSTER_NON_CSV_PATH NTStatus = 0xC0130018 + STATUS_CLUSTER_CSV_VOLUME_NOT_LOCAL NTStatus = 0xC0130019 + STATUS_CLUSTER_CSV_READ_OPLOCK_BREAK_IN_PROGRESS NTStatus = 0xC0130020 + STATUS_CLUSTER_CSV_AUTO_PAUSE_ERROR NTStatus = 0xC0130021 + STATUS_CLUSTER_CSV_REDIRECTED NTStatus = 0xC0130022 + STATUS_CLUSTER_CSV_NOT_REDIRECTED NTStatus = 0xC0130023 + STATUS_CLUSTER_CSV_VOLUME_DRAINING NTStatus = 0xC0130024 + STATUS_CLUSTER_CSV_SNAPSHOT_CREATION_IN_PROGRESS NTStatus = 0xC0130025 + STATUS_CLUSTER_CSV_VOLUME_DRAINING_SUCCEEDED_DOWNLEVEL NTStatus = 0xC0130026 + STATUS_CLUSTER_CSV_NO_SNAPSHOTS NTStatus = 0xC0130027 + STATUS_CSV_IO_PAUSE_TIMEOUT NTStatus = 0xC0130028 + STATUS_CLUSTER_CSV_INVALID_HANDLE NTStatus = 0xC0130029 + STATUS_CLUSTER_CSV_SUPPORTED_ONLY_ON_COORDINATOR NTStatus = 0xC0130030 + STATUS_CLUSTER_CAM_TICKET_REPLAY_DETECTED NTStatus = 0xC0130031 + STATUS_TRANSACTIONAL_CONFLICT NTStatus = 0xC0190001 + STATUS_INVALID_TRANSACTION NTStatus = 0xC0190002 + STATUS_TRANSACTION_NOT_ACTIVE NTStatus = 0xC0190003 + STATUS_TM_INITIALIZATION_FAILED NTStatus = 0xC0190004 + STATUS_RM_NOT_ACTIVE NTStatus = 0xC0190005 + STATUS_RM_METADATA_CORRUPT NTStatus = 0xC0190006 + STATUS_TRANSACTION_NOT_JOINED NTStatus = 0xC0190007 + STATUS_DIRECTORY_NOT_RM NTStatus = 0xC0190008 + STATUS_COULD_NOT_RESIZE_LOG NTStatus = 0x80190009 + STATUS_TRANSACTIONS_UNSUPPORTED_REMOTE NTStatus = 0xC019000A + STATUS_LOG_RESIZE_INVALID_SIZE NTStatus = 0xC019000B + STATUS_REMOTE_FILE_VERSION_MISMATCH NTStatus = 0xC019000C + STATUS_CRM_PROTOCOL_ALREADY_EXISTS NTStatus = 0xC019000F + STATUS_TRANSACTION_PROPAGATION_FAILED NTStatus = 0xC0190010 + STATUS_CRM_PROTOCOL_NOT_FOUND NTStatus = 0xC0190011 + STATUS_TRANSACTION_SUPERIOR_EXISTS NTStatus = 0xC0190012 + STATUS_TRANSACTION_REQUEST_NOT_VALID NTStatus = 0xC0190013 + STATUS_TRANSACTION_NOT_REQUESTED NTStatus = 0xC0190014 + STATUS_TRANSACTION_ALREADY_ABORTED NTStatus = 0xC0190015 + STATUS_TRANSACTION_ALREADY_COMMITTED NTStatus = 0xC0190016 + STATUS_TRANSACTION_INVALID_MARSHALL_BUFFER NTStatus = 0xC0190017 + STATUS_CURRENT_TRANSACTION_NOT_VALID NTStatus = 0xC0190018 + STATUS_LOG_GROWTH_FAILED NTStatus = 0xC0190019 + STATUS_OBJECT_NO_LONGER_EXISTS NTStatus = 0xC0190021 + STATUS_STREAM_MINIVERSION_NOT_FOUND NTStatus = 0xC0190022 + STATUS_STREAM_MINIVERSION_NOT_VALID NTStatus = 0xC0190023 + STATUS_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION NTStatus = 0xC0190024 + STATUS_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT NTStatus = 0xC0190025 + STATUS_CANT_CREATE_MORE_STREAM_MINIVERSIONS NTStatus = 0xC0190026 + STATUS_HANDLE_NO_LONGER_VALID NTStatus = 0xC0190028 + STATUS_NO_TXF_METADATA NTStatus = 0x80190029 + STATUS_LOG_CORRUPTION_DETECTED NTStatus = 0xC0190030 + STATUS_CANT_RECOVER_WITH_HANDLE_OPEN NTStatus = 0x80190031 + STATUS_RM_DISCONNECTED NTStatus = 0xC0190032 + STATUS_ENLISTMENT_NOT_SUPERIOR NTStatus = 0xC0190033 + STATUS_RECOVERY_NOT_NEEDED NTStatus = 0x40190034 + STATUS_RM_ALREADY_STARTED NTStatus = 0x40190035 + STATUS_FILE_IDENTITY_NOT_PERSISTENT NTStatus = 0xC0190036 + STATUS_CANT_BREAK_TRANSACTIONAL_DEPENDENCY NTStatus = 0xC0190037 + STATUS_CANT_CROSS_RM_BOUNDARY NTStatus = 0xC0190038 + STATUS_TXF_DIR_NOT_EMPTY NTStatus = 0xC0190039 + STATUS_INDOUBT_TRANSACTIONS_EXIST NTStatus = 0xC019003A + STATUS_TM_VOLATILE NTStatus = 0xC019003B + STATUS_ROLLBACK_TIMER_EXPIRED NTStatus = 0xC019003C + STATUS_TXF_ATTRIBUTE_CORRUPT NTStatus = 0xC019003D + STATUS_EFS_NOT_ALLOWED_IN_TRANSACTION NTStatus = 0xC019003E + STATUS_TRANSACTIONAL_OPEN_NOT_ALLOWED NTStatus = 0xC019003F + STATUS_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE NTStatus = 0xC0190040 + STATUS_TXF_METADATA_ALREADY_PRESENT NTStatus = 0x80190041 + STATUS_TRANSACTION_SCOPE_CALLBACKS_NOT_SET NTStatus = 0x80190042 + STATUS_TRANSACTION_REQUIRED_PROMOTION NTStatus = 0xC0190043 + STATUS_CANNOT_EXECUTE_FILE_IN_TRANSACTION NTStatus = 0xC0190044 + STATUS_TRANSACTIONS_NOT_FROZEN NTStatus = 0xC0190045 + STATUS_TRANSACTION_FREEZE_IN_PROGRESS NTStatus = 0xC0190046 + STATUS_NOT_SNAPSHOT_VOLUME NTStatus = 0xC0190047 + STATUS_NO_SAVEPOINT_WITH_OPEN_FILES NTStatus = 0xC0190048 + STATUS_SPARSE_NOT_ALLOWED_IN_TRANSACTION NTStatus = 0xC0190049 + STATUS_TM_IDENTITY_MISMATCH NTStatus = 0xC019004A + STATUS_FLOATED_SECTION NTStatus = 0xC019004B + STATUS_CANNOT_ACCEPT_TRANSACTED_WORK NTStatus = 0xC019004C + STATUS_CANNOT_ABORT_TRANSACTIONS NTStatus = 0xC019004D + STATUS_TRANSACTION_NOT_FOUND NTStatus = 0xC019004E + STATUS_RESOURCEMANAGER_NOT_FOUND NTStatus = 0xC019004F + STATUS_ENLISTMENT_NOT_FOUND NTStatus = 0xC0190050 + STATUS_TRANSACTIONMANAGER_NOT_FOUND NTStatus = 0xC0190051 + STATUS_TRANSACTIONMANAGER_NOT_ONLINE NTStatus = 0xC0190052 + STATUS_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION NTStatus = 0xC0190053 + STATUS_TRANSACTION_NOT_ROOT NTStatus = 0xC0190054 + STATUS_TRANSACTION_OBJECT_EXPIRED NTStatus = 0xC0190055 + STATUS_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION NTStatus = 0xC0190056 + STATUS_TRANSACTION_RESPONSE_NOT_ENLISTED NTStatus = 0xC0190057 + STATUS_TRANSACTION_RECORD_TOO_LONG NTStatus = 0xC0190058 + STATUS_NO_LINK_TRACKING_IN_TRANSACTION NTStatus = 0xC0190059 + STATUS_OPERATION_NOT_SUPPORTED_IN_TRANSACTION NTStatus = 0xC019005A + STATUS_TRANSACTION_INTEGRITY_VIOLATED NTStatus = 0xC019005B + STATUS_TRANSACTIONMANAGER_IDENTITY_MISMATCH NTStatus = 0xC019005C + STATUS_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT NTStatus = 0xC019005D + STATUS_TRANSACTION_MUST_WRITETHROUGH NTStatus = 0xC019005E + STATUS_TRANSACTION_NO_SUPERIOR NTStatus = 0xC019005F + STATUS_EXPIRED_HANDLE NTStatus = 0xC0190060 + STATUS_TRANSACTION_NOT_ENLISTED NTStatus = 0xC0190061 + STATUS_LOG_SECTOR_INVALID NTStatus = 0xC01A0001 + STATUS_LOG_SECTOR_PARITY_INVALID NTStatus = 0xC01A0002 + STATUS_LOG_SECTOR_REMAPPED NTStatus = 0xC01A0003 + STATUS_LOG_BLOCK_INCOMPLETE NTStatus = 0xC01A0004 + STATUS_LOG_INVALID_RANGE NTStatus = 0xC01A0005 + STATUS_LOG_BLOCKS_EXHAUSTED NTStatus = 0xC01A0006 + STATUS_LOG_READ_CONTEXT_INVALID NTStatus = 0xC01A0007 + STATUS_LOG_RESTART_INVALID NTStatus = 0xC01A0008 + STATUS_LOG_BLOCK_VERSION NTStatus = 0xC01A0009 + STATUS_LOG_BLOCK_INVALID NTStatus = 0xC01A000A + STATUS_LOG_READ_MODE_INVALID NTStatus = 0xC01A000B + STATUS_LOG_NO_RESTART NTStatus = 0x401A000C + STATUS_LOG_METADATA_CORRUPT NTStatus = 0xC01A000D + STATUS_LOG_METADATA_INVALID NTStatus = 0xC01A000E + STATUS_LOG_METADATA_INCONSISTENT NTStatus = 0xC01A000F + STATUS_LOG_RESERVATION_INVALID NTStatus = 0xC01A0010 + STATUS_LOG_CANT_DELETE NTStatus = 0xC01A0011 + STATUS_LOG_CONTAINER_LIMIT_EXCEEDED NTStatus = 0xC01A0012 + STATUS_LOG_START_OF_LOG NTStatus = 0xC01A0013 + STATUS_LOG_POLICY_ALREADY_INSTALLED NTStatus = 0xC01A0014 + STATUS_LOG_POLICY_NOT_INSTALLED NTStatus = 0xC01A0015 + STATUS_LOG_POLICY_INVALID NTStatus = 0xC01A0016 + STATUS_LOG_POLICY_CONFLICT NTStatus = 0xC01A0017 + STATUS_LOG_PINNED_ARCHIVE_TAIL NTStatus = 0xC01A0018 + STATUS_LOG_RECORD_NONEXISTENT NTStatus = 0xC01A0019 + STATUS_LOG_RECORDS_RESERVED_INVALID NTStatus = 0xC01A001A + STATUS_LOG_SPACE_RESERVED_INVALID NTStatus = 0xC01A001B + STATUS_LOG_TAIL_INVALID NTStatus = 0xC01A001C + STATUS_LOG_FULL NTStatus = 0xC01A001D + STATUS_LOG_MULTIPLEXED NTStatus = 0xC01A001E + STATUS_LOG_DEDICATED NTStatus = 0xC01A001F + STATUS_LOG_ARCHIVE_NOT_IN_PROGRESS NTStatus = 0xC01A0020 + STATUS_LOG_ARCHIVE_IN_PROGRESS NTStatus = 0xC01A0021 + STATUS_LOG_EPHEMERAL NTStatus = 0xC01A0022 + STATUS_LOG_NOT_ENOUGH_CONTAINERS NTStatus = 0xC01A0023 + STATUS_LOG_CLIENT_ALREADY_REGISTERED NTStatus = 0xC01A0024 + STATUS_LOG_CLIENT_NOT_REGISTERED NTStatus = 0xC01A0025 + STATUS_LOG_FULL_HANDLER_IN_PROGRESS NTStatus = 0xC01A0026 + STATUS_LOG_CONTAINER_READ_FAILED NTStatus = 0xC01A0027 + STATUS_LOG_CONTAINER_WRITE_FAILED NTStatus = 0xC01A0028 + STATUS_LOG_CONTAINER_OPEN_FAILED NTStatus = 0xC01A0029 + STATUS_LOG_CONTAINER_STATE_INVALID NTStatus = 0xC01A002A + STATUS_LOG_STATE_INVALID NTStatus = 0xC01A002B + STATUS_LOG_PINNED NTStatus = 0xC01A002C + STATUS_LOG_METADATA_FLUSH_FAILED NTStatus = 0xC01A002D + STATUS_LOG_INCONSISTENT_SECURITY NTStatus = 0xC01A002E + STATUS_LOG_APPENDED_FLUSH_FAILED NTStatus = 0xC01A002F + STATUS_LOG_PINNED_RESERVATION NTStatus = 0xC01A0030 + STATUS_VIDEO_HUNG_DISPLAY_DRIVER_THREAD NTStatus = 0xC01B00EA + STATUS_VIDEO_HUNG_DISPLAY_DRIVER_THREAD_RECOVERED NTStatus = 0x801B00EB + STATUS_VIDEO_DRIVER_DEBUG_REPORT_REQUEST NTStatus = 0x401B00EC + STATUS_MONITOR_NO_DESCRIPTOR NTStatus = 0xC01D0001 + STATUS_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT NTStatus = 0xC01D0002 + STATUS_MONITOR_INVALID_DESCRIPTOR_CHECKSUM NTStatus = 0xC01D0003 + STATUS_MONITOR_INVALID_STANDARD_TIMING_BLOCK NTStatus = 0xC01D0004 + STATUS_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED NTStatus = 0xC01D0005 + STATUS_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK NTStatus = 0xC01D0006 + STATUS_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK NTStatus = 0xC01D0007 + STATUS_MONITOR_NO_MORE_DESCRIPTOR_DATA NTStatus = 0xC01D0008 + STATUS_MONITOR_INVALID_DETAILED_TIMING_BLOCK NTStatus = 0xC01D0009 + STATUS_MONITOR_INVALID_MANUFACTURE_DATE NTStatus = 0xC01D000A + STATUS_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER NTStatus = 0xC01E0000 + STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER NTStatus = 0xC01E0001 + STATUS_GRAPHICS_INVALID_DISPLAY_ADAPTER NTStatus = 0xC01E0002 + STATUS_GRAPHICS_ADAPTER_WAS_RESET NTStatus = 0xC01E0003 + STATUS_GRAPHICS_INVALID_DRIVER_MODEL NTStatus = 0xC01E0004 + STATUS_GRAPHICS_PRESENT_MODE_CHANGED NTStatus = 0xC01E0005 + STATUS_GRAPHICS_PRESENT_OCCLUDED NTStatus = 0xC01E0006 + STATUS_GRAPHICS_PRESENT_DENIED NTStatus = 0xC01E0007 + STATUS_GRAPHICS_CANNOTCOLORCONVERT NTStatus = 0xC01E0008 + STATUS_GRAPHICS_DRIVER_MISMATCH NTStatus = 0xC01E0009 + STATUS_GRAPHICS_PARTIAL_DATA_POPULATED NTStatus = 0x401E000A + STATUS_GRAPHICS_PRESENT_REDIRECTION_DISABLED NTStatus = 0xC01E000B + STATUS_GRAPHICS_PRESENT_UNOCCLUDED NTStatus = 0xC01E000C + STATUS_GRAPHICS_WINDOWDC_NOT_AVAILABLE NTStatus = 0xC01E000D + STATUS_GRAPHICS_WINDOWLESS_PRESENT_DISABLED NTStatus = 0xC01E000E + STATUS_GRAPHICS_PRESENT_INVALID_WINDOW NTStatus = 0xC01E000F + STATUS_GRAPHICS_PRESENT_BUFFER_NOT_BOUND NTStatus = 0xC01E0010 + STATUS_GRAPHICS_VAIL_STATE_CHANGED NTStatus = 0xC01E0011 + STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN NTStatus = 0xC01E0012 + STATUS_GRAPHICS_INDIRECT_DISPLAY_DEVICE_STOPPED NTStatus = 0xC01E0013 + STATUS_GRAPHICS_NO_VIDEO_MEMORY NTStatus = 0xC01E0100 + STATUS_GRAPHICS_CANT_LOCK_MEMORY NTStatus = 0xC01E0101 + STATUS_GRAPHICS_ALLOCATION_BUSY NTStatus = 0xC01E0102 + STATUS_GRAPHICS_TOO_MANY_REFERENCES NTStatus = 0xC01E0103 + STATUS_GRAPHICS_TRY_AGAIN_LATER NTStatus = 0xC01E0104 + STATUS_GRAPHICS_TRY_AGAIN_NOW NTStatus = 0xC01E0105 + STATUS_GRAPHICS_ALLOCATION_INVALID NTStatus = 0xC01E0106 + STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE NTStatus = 0xC01E0107 + STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED NTStatus = 0xC01E0108 + STATUS_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION NTStatus = 0xC01E0109 + STATUS_GRAPHICS_INVALID_ALLOCATION_USAGE NTStatus = 0xC01E0110 + STATUS_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION NTStatus = 0xC01E0111 + STATUS_GRAPHICS_ALLOCATION_CLOSED NTStatus = 0xC01E0112 + STATUS_GRAPHICS_INVALID_ALLOCATION_INSTANCE NTStatus = 0xC01E0113 + STATUS_GRAPHICS_INVALID_ALLOCATION_HANDLE NTStatus = 0xC01E0114 + STATUS_GRAPHICS_WRONG_ALLOCATION_DEVICE NTStatus = 0xC01E0115 + STATUS_GRAPHICS_ALLOCATION_CONTENT_LOST NTStatus = 0xC01E0116 + STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE NTStatus = 0xC01E0200 + STATUS_GRAPHICS_SKIP_ALLOCATION_PREPARATION NTStatus = 0x401E0201 + STATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY NTStatus = 0xC01E0300 + STATUS_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED NTStatus = 0xC01E0301 + STATUS_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED NTStatus = 0xC01E0302 + STATUS_GRAPHICS_INVALID_VIDPN NTStatus = 0xC01E0303 + STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE NTStatus = 0xC01E0304 + STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET NTStatus = 0xC01E0305 + STATUS_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED NTStatus = 0xC01E0306 + STATUS_GRAPHICS_MODE_NOT_PINNED NTStatus = 0x401E0307 + STATUS_GRAPHICS_INVALID_VIDPN_SOURCEMODESET NTStatus = 0xC01E0308 + STATUS_GRAPHICS_INVALID_VIDPN_TARGETMODESET NTStatus = 0xC01E0309 + STATUS_GRAPHICS_INVALID_FREQUENCY NTStatus = 0xC01E030A + STATUS_GRAPHICS_INVALID_ACTIVE_REGION NTStatus = 0xC01E030B + STATUS_GRAPHICS_INVALID_TOTAL_REGION NTStatus = 0xC01E030C + STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE NTStatus = 0xC01E0310 + STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE NTStatus = 0xC01E0311 + STATUS_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET NTStatus = 0xC01E0312 + STATUS_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY NTStatus = 0xC01E0313 + STATUS_GRAPHICS_MODE_ALREADY_IN_MODESET NTStatus = 0xC01E0314 + STATUS_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET NTStatus = 0xC01E0315 + STATUS_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET NTStatus = 0xC01E0316 + STATUS_GRAPHICS_SOURCE_ALREADY_IN_SET NTStatus = 0xC01E0317 + STATUS_GRAPHICS_TARGET_ALREADY_IN_SET NTStatus = 0xC01E0318 + STATUS_GRAPHICS_INVALID_VIDPN_PRESENT_PATH NTStatus = 0xC01E0319 + STATUS_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY NTStatus = 0xC01E031A + STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET NTStatus = 0xC01E031B + STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE NTStatus = 0xC01E031C + STATUS_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET NTStatus = 0xC01E031D + STATUS_GRAPHICS_NO_PREFERRED_MODE NTStatus = 0x401E031E + STATUS_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET NTStatus = 0xC01E031F + STATUS_GRAPHICS_STALE_MODESET NTStatus = 0xC01E0320 + STATUS_GRAPHICS_INVALID_MONITOR_SOURCEMODESET NTStatus = 0xC01E0321 + STATUS_GRAPHICS_INVALID_MONITOR_SOURCE_MODE NTStatus = 0xC01E0322 + STATUS_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN NTStatus = 0xC01E0323 + STATUS_GRAPHICS_MODE_ID_MUST_BE_UNIQUE NTStatus = 0xC01E0324 + STATUS_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION NTStatus = 0xC01E0325 + STATUS_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES NTStatus = 0xC01E0326 + STATUS_GRAPHICS_PATH_NOT_IN_TOPOLOGY NTStatus = 0xC01E0327 + STATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE NTStatus = 0xC01E0328 + STATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET NTStatus = 0xC01E0329 + STATUS_GRAPHICS_INVALID_MONITORDESCRIPTORSET NTStatus = 0xC01E032A + STATUS_GRAPHICS_INVALID_MONITORDESCRIPTOR NTStatus = 0xC01E032B + STATUS_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET NTStatus = 0xC01E032C + STATUS_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET NTStatus = 0xC01E032D + STATUS_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE NTStatus = 0xC01E032E + STATUS_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE NTStatus = 0xC01E032F + STATUS_GRAPHICS_RESOURCES_NOT_RELATED NTStatus = 0xC01E0330 + STATUS_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE NTStatus = 0xC01E0331 + STATUS_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE NTStatus = 0xC01E0332 + STATUS_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET NTStatus = 0xC01E0333 + STATUS_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER NTStatus = 0xC01E0334 + STATUS_GRAPHICS_NO_VIDPNMGR NTStatus = 0xC01E0335 + STATUS_GRAPHICS_NO_ACTIVE_VIDPN NTStatus = 0xC01E0336 + STATUS_GRAPHICS_STALE_VIDPN_TOPOLOGY NTStatus = 0xC01E0337 + STATUS_GRAPHICS_MONITOR_NOT_CONNECTED NTStatus = 0xC01E0338 + STATUS_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY NTStatus = 0xC01E0339 + STATUS_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE NTStatus = 0xC01E033A + STATUS_GRAPHICS_INVALID_VISIBLEREGION_SIZE NTStatus = 0xC01E033B + STATUS_GRAPHICS_INVALID_STRIDE NTStatus = 0xC01E033C + STATUS_GRAPHICS_INVALID_PIXELFORMAT NTStatus = 0xC01E033D + STATUS_GRAPHICS_INVALID_COLORBASIS NTStatus = 0xC01E033E + STATUS_GRAPHICS_INVALID_PIXELVALUEACCESSMODE NTStatus = 0xC01E033F + STATUS_GRAPHICS_TARGET_NOT_IN_TOPOLOGY NTStatus = 0xC01E0340 + STATUS_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT NTStatus = 0xC01E0341 + STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE NTStatus = 0xC01E0342 + STATUS_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN NTStatus = 0xC01E0343 + STATUS_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL NTStatus = 0xC01E0344 + STATUS_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION NTStatus = 0xC01E0345 + STATUS_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED NTStatus = 0xC01E0346 + STATUS_GRAPHICS_INVALID_GAMMA_RAMP NTStatus = 0xC01E0347 + STATUS_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED NTStatus = 0xC01E0348 + STATUS_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED NTStatus = 0xC01E0349 + STATUS_GRAPHICS_MODE_NOT_IN_MODESET NTStatus = 0xC01E034A + STATUS_GRAPHICS_DATASET_IS_EMPTY NTStatus = 0x401E034B + STATUS_GRAPHICS_NO_MORE_ELEMENTS_IN_DATASET NTStatus = 0x401E034C + STATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON NTStatus = 0xC01E034D + STATUS_GRAPHICS_INVALID_PATH_CONTENT_TYPE NTStatus = 0xC01E034E + STATUS_GRAPHICS_INVALID_COPYPROTECTION_TYPE NTStatus = 0xC01E034F + STATUS_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS NTStatus = 0xC01E0350 + STATUS_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_PINNED NTStatus = 0x401E0351 + STATUS_GRAPHICS_INVALID_SCANLINE_ORDERING NTStatus = 0xC01E0352 + STATUS_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED NTStatus = 0xC01E0353 + STATUS_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS NTStatus = 0xC01E0354 + STATUS_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT NTStatus = 0xC01E0355 + STATUS_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM NTStatus = 0xC01E0356 + STATUS_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN NTStatus = 0xC01E0357 + STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT NTStatus = 0xC01E0358 + STATUS_GRAPHICS_MAX_NUM_PATHS_REACHED NTStatus = 0xC01E0359 + STATUS_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION NTStatus = 0xC01E035A + STATUS_GRAPHICS_INVALID_CLIENT_TYPE NTStatus = 0xC01E035B + STATUS_GRAPHICS_CLIENTVIDPN_NOT_SET NTStatus = 0xC01E035C + STATUS_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED NTStatus = 0xC01E0400 + STATUS_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED NTStatus = 0xC01E0401 + STATUS_GRAPHICS_UNKNOWN_CHILD_STATUS NTStatus = 0x401E042F + STATUS_GRAPHICS_NOT_A_LINKED_ADAPTER NTStatus = 0xC01E0430 + STATUS_GRAPHICS_LEADLINK_NOT_ENUMERATED NTStatus = 0xC01E0431 + STATUS_GRAPHICS_CHAINLINKS_NOT_ENUMERATED NTStatus = 0xC01E0432 + STATUS_GRAPHICS_ADAPTER_CHAIN_NOT_READY NTStatus = 0xC01E0433 + STATUS_GRAPHICS_CHAINLINKS_NOT_STARTED NTStatus = 0xC01E0434 + STATUS_GRAPHICS_CHAINLINKS_NOT_POWERED_ON NTStatus = 0xC01E0435 + STATUS_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE NTStatus = 0xC01E0436 + STATUS_GRAPHICS_LEADLINK_START_DEFERRED NTStatus = 0x401E0437 + STATUS_GRAPHICS_NOT_POST_DEVICE_DRIVER NTStatus = 0xC01E0438 + STATUS_GRAPHICS_POLLING_TOO_FREQUENTLY NTStatus = 0x401E0439 + STATUS_GRAPHICS_START_DEFERRED NTStatus = 0x401E043A + STATUS_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED NTStatus = 0xC01E043B + STATUS_GRAPHICS_DEPENDABLE_CHILD_STATUS NTStatus = 0x401E043C + STATUS_GRAPHICS_OPM_NOT_SUPPORTED NTStatus = 0xC01E0500 + STATUS_GRAPHICS_COPP_NOT_SUPPORTED NTStatus = 0xC01E0501 + STATUS_GRAPHICS_UAB_NOT_SUPPORTED NTStatus = 0xC01E0502 + STATUS_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS NTStatus = 0xC01E0503 + STATUS_GRAPHICS_OPM_NO_PROTECTED_OUTPUTS_EXIST NTStatus = 0xC01E0505 + STATUS_GRAPHICS_OPM_INTERNAL_ERROR NTStatus = 0xC01E050B + STATUS_GRAPHICS_OPM_INVALID_HANDLE NTStatus = 0xC01E050C + STATUS_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH NTStatus = 0xC01E050E + STATUS_GRAPHICS_OPM_SPANNING_MODE_ENABLED NTStatus = 0xC01E050F + STATUS_GRAPHICS_OPM_THEATER_MODE_ENABLED NTStatus = 0xC01E0510 + STATUS_GRAPHICS_PVP_HFS_FAILED NTStatus = 0xC01E0511 + STATUS_GRAPHICS_OPM_INVALID_SRM NTStatus = 0xC01E0512 + STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP NTStatus = 0xC01E0513 + STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP NTStatus = 0xC01E0514 + STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA NTStatus = 0xC01E0515 + STATUS_GRAPHICS_OPM_HDCP_SRM_NEVER_SET NTStatus = 0xC01E0516 + STATUS_GRAPHICS_OPM_RESOLUTION_TOO_HIGH NTStatus = 0xC01E0517 + STATUS_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE NTStatus = 0xC01E0518 + STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_NO_LONGER_EXISTS NTStatus = 0xC01E051A + STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS NTStatus = 0xC01E051C + STATUS_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST NTStatus = 0xC01E051D + STATUS_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR NTStatus = 0xC01E051E + STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS NTStatus = 0xC01E051F + STATUS_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED NTStatus = 0xC01E0520 + STATUS_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST NTStatus = 0xC01E0521 + STATUS_GRAPHICS_I2C_NOT_SUPPORTED NTStatus = 0xC01E0580 + STATUS_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST NTStatus = 0xC01E0581 + STATUS_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA NTStatus = 0xC01E0582 + STATUS_GRAPHICS_I2C_ERROR_RECEIVING_DATA NTStatus = 0xC01E0583 + STATUS_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED NTStatus = 0xC01E0584 + STATUS_GRAPHICS_DDCCI_INVALID_DATA NTStatus = 0xC01E0585 + STATUS_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE NTStatus = 0xC01E0586 + STATUS_GRAPHICS_DDCCI_INVALID_CAPABILITIES_STRING NTStatus = 0xC01E0587 + STATUS_GRAPHICS_MCA_INTERNAL_ERROR NTStatus = 0xC01E0588 + STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND NTStatus = 0xC01E0589 + STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH NTStatus = 0xC01E058A + STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM NTStatus = 0xC01E058B + STATUS_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE NTStatus = 0xC01E058C + STATUS_GRAPHICS_MONITOR_NO_LONGER_EXISTS NTStatus = 0xC01E058D + STATUS_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED NTStatus = 0xC01E05E0 + STATUS_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME NTStatus = 0xC01E05E1 + STATUS_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP NTStatus = 0xC01E05E2 + STATUS_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED NTStatus = 0xC01E05E3 + STATUS_GRAPHICS_INVALID_POINTER NTStatus = 0xC01E05E4 + STATUS_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE NTStatus = 0xC01E05E5 + STATUS_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL NTStatus = 0xC01E05E6 + STATUS_GRAPHICS_INTERNAL_ERROR NTStatus = 0xC01E05E7 + STATUS_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS NTStatus = 0xC01E05E8 + STATUS_FVE_LOCKED_VOLUME NTStatus = 0xC0210000 + STATUS_FVE_NOT_ENCRYPTED NTStatus = 0xC0210001 + STATUS_FVE_BAD_INFORMATION NTStatus = 0xC0210002 + STATUS_FVE_TOO_SMALL NTStatus = 0xC0210003 + STATUS_FVE_FAILED_WRONG_FS NTStatus = 0xC0210004 + STATUS_FVE_BAD_PARTITION_SIZE NTStatus = 0xC0210005 + STATUS_FVE_FS_NOT_EXTENDED NTStatus = 0xC0210006 + STATUS_FVE_FS_MOUNTED NTStatus = 0xC0210007 + STATUS_FVE_NO_LICENSE NTStatus = 0xC0210008 + STATUS_FVE_ACTION_NOT_ALLOWED NTStatus = 0xC0210009 + STATUS_FVE_BAD_DATA NTStatus = 0xC021000A + STATUS_FVE_VOLUME_NOT_BOUND NTStatus = 0xC021000B + STATUS_FVE_NOT_DATA_VOLUME NTStatus = 0xC021000C + STATUS_FVE_CONV_READ_ERROR NTStatus = 0xC021000D + STATUS_FVE_CONV_WRITE_ERROR NTStatus = 0xC021000E + STATUS_FVE_OVERLAPPED_UPDATE NTStatus = 0xC021000F + STATUS_FVE_FAILED_SECTOR_SIZE NTStatus = 0xC0210010 + STATUS_FVE_FAILED_AUTHENTICATION NTStatus = 0xC0210011 + STATUS_FVE_NOT_OS_VOLUME NTStatus = 0xC0210012 + STATUS_FVE_KEYFILE_NOT_FOUND NTStatus = 0xC0210013 + STATUS_FVE_KEYFILE_INVALID NTStatus = 0xC0210014 + STATUS_FVE_KEYFILE_NO_VMK NTStatus = 0xC0210015 + STATUS_FVE_TPM_DISABLED NTStatus = 0xC0210016 + STATUS_FVE_TPM_SRK_AUTH_NOT_ZERO NTStatus = 0xC0210017 + STATUS_FVE_TPM_INVALID_PCR NTStatus = 0xC0210018 + STATUS_FVE_TPM_NO_VMK NTStatus = 0xC0210019 + STATUS_FVE_PIN_INVALID NTStatus = 0xC021001A + STATUS_FVE_AUTH_INVALID_APPLICATION NTStatus = 0xC021001B + STATUS_FVE_AUTH_INVALID_CONFIG NTStatus = 0xC021001C + STATUS_FVE_DEBUGGER_ENABLED NTStatus = 0xC021001D + STATUS_FVE_DRY_RUN_FAILED NTStatus = 0xC021001E + STATUS_FVE_BAD_METADATA_POINTER NTStatus = 0xC021001F + STATUS_FVE_OLD_METADATA_COPY NTStatus = 0xC0210020 + STATUS_FVE_REBOOT_REQUIRED NTStatus = 0xC0210021 + STATUS_FVE_RAW_ACCESS NTStatus = 0xC0210022 + STATUS_FVE_RAW_BLOCKED NTStatus = 0xC0210023 + STATUS_FVE_NO_AUTOUNLOCK_MASTER_KEY NTStatus = 0xC0210024 + STATUS_FVE_MOR_FAILED NTStatus = 0xC0210025 + STATUS_FVE_NO_FEATURE_LICENSE NTStatus = 0xC0210026 + STATUS_FVE_POLICY_USER_DISABLE_RDV_NOT_ALLOWED NTStatus = 0xC0210027 + STATUS_FVE_CONV_RECOVERY_FAILED NTStatus = 0xC0210028 + STATUS_FVE_VIRTUALIZED_SPACE_TOO_BIG NTStatus = 0xC0210029 + STATUS_FVE_INVALID_DATUM_TYPE NTStatus = 0xC021002A + STATUS_FVE_VOLUME_TOO_SMALL NTStatus = 0xC0210030 + STATUS_FVE_ENH_PIN_INVALID NTStatus = 0xC0210031 + STATUS_FVE_FULL_ENCRYPTION_NOT_ALLOWED_ON_TP_STORAGE NTStatus = 0xC0210032 + STATUS_FVE_WIPE_NOT_ALLOWED_ON_TP_STORAGE NTStatus = 0xC0210033 + STATUS_FVE_NOT_ALLOWED_ON_CSV_STACK NTStatus = 0xC0210034 + STATUS_FVE_NOT_ALLOWED_ON_CLUSTER NTStatus = 0xC0210035 + STATUS_FVE_NOT_ALLOWED_TO_UPGRADE_WHILE_CONVERTING NTStatus = 0xC0210036 + STATUS_FVE_WIPE_CANCEL_NOT_APPLICABLE NTStatus = 0xC0210037 + STATUS_FVE_EDRIVE_DRY_RUN_FAILED NTStatus = 0xC0210038 + STATUS_FVE_SECUREBOOT_DISABLED NTStatus = 0xC0210039 + STATUS_FVE_SECUREBOOT_CONFIG_CHANGE NTStatus = 0xC021003A + STATUS_FVE_DEVICE_LOCKEDOUT NTStatus = 0xC021003B + STATUS_FVE_VOLUME_EXTEND_PREVENTS_EOW_DECRYPT NTStatus = 0xC021003C + STATUS_FVE_NOT_DE_VOLUME NTStatus = 0xC021003D + STATUS_FVE_PROTECTION_DISABLED NTStatus = 0xC021003E + STATUS_FVE_PROTECTION_CANNOT_BE_DISABLED NTStatus = 0xC021003F + STATUS_FVE_OSV_KSR_NOT_ALLOWED NTStatus = 0xC0210040 + STATUS_FWP_CALLOUT_NOT_FOUND NTStatus = 0xC0220001 + STATUS_FWP_CONDITION_NOT_FOUND NTStatus = 0xC0220002 + STATUS_FWP_FILTER_NOT_FOUND NTStatus = 0xC0220003 + STATUS_FWP_LAYER_NOT_FOUND NTStatus = 0xC0220004 + STATUS_FWP_PROVIDER_NOT_FOUND NTStatus = 0xC0220005 + STATUS_FWP_PROVIDER_CONTEXT_NOT_FOUND NTStatus = 0xC0220006 + STATUS_FWP_SUBLAYER_NOT_FOUND NTStatus = 0xC0220007 + STATUS_FWP_NOT_FOUND NTStatus = 0xC0220008 + STATUS_FWP_ALREADY_EXISTS NTStatus = 0xC0220009 + STATUS_FWP_IN_USE NTStatus = 0xC022000A + STATUS_FWP_DYNAMIC_SESSION_IN_PROGRESS NTStatus = 0xC022000B + STATUS_FWP_WRONG_SESSION NTStatus = 0xC022000C + STATUS_FWP_NO_TXN_IN_PROGRESS NTStatus = 0xC022000D + STATUS_FWP_TXN_IN_PROGRESS NTStatus = 0xC022000E + STATUS_FWP_TXN_ABORTED NTStatus = 0xC022000F + STATUS_FWP_SESSION_ABORTED NTStatus = 0xC0220010 + STATUS_FWP_INCOMPATIBLE_TXN NTStatus = 0xC0220011 + STATUS_FWP_TIMEOUT NTStatus = 0xC0220012 + STATUS_FWP_NET_EVENTS_DISABLED NTStatus = 0xC0220013 + STATUS_FWP_INCOMPATIBLE_LAYER NTStatus = 0xC0220014 + STATUS_FWP_KM_CLIENTS_ONLY NTStatus = 0xC0220015 + STATUS_FWP_LIFETIME_MISMATCH NTStatus = 0xC0220016 + STATUS_FWP_BUILTIN_OBJECT NTStatus = 0xC0220017 + STATUS_FWP_TOO_MANY_CALLOUTS NTStatus = 0xC0220018 + STATUS_FWP_NOTIFICATION_DROPPED NTStatus = 0xC0220019 + STATUS_FWP_TRAFFIC_MISMATCH NTStatus = 0xC022001A + STATUS_FWP_INCOMPATIBLE_SA_STATE NTStatus = 0xC022001B + STATUS_FWP_NULL_POINTER NTStatus = 0xC022001C + STATUS_FWP_INVALID_ENUMERATOR NTStatus = 0xC022001D + STATUS_FWP_INVALID_FLAGS NTStatus = 0xC022001E + STATUS_FWP_INVALID_NET_MASK NTStatus = 0xC022001F + STATUS_FWP_INVALID_RANGE NTStatus = 0xC0220020 + STATUS_FWP_INVALID_INTERVAL NTStatus = 0xC0220021 + STATUS_FWP_ZERO_LENGTH_ARRAY NTStatus = 0xC0220022 + STATUS_FWP_NULL_DISPLAY_NAME NTStatus = 0xC0220023 + STATUS_FWP_INVALID_ACTION_TYPE NTStatus = 0xC0220024 + STATUS_FWP_INVALID_WEIGHT NTStatus = 0xC0220025 + STATUS_FWP_MATCH_TYPE_MISMATCH NTStatus = 0xC0220026 + STATUS_FWP_TYPE_MISMATCH NTStatus = 0xC0220027 + STATUS_FWP_OUT_OF_BOUNDS NTStatus = 0xC0220028 + STATUS_FWP_RESERVED NTStatus = 0xC0220029 + STATUS_FWP_DUPLICATE_CONDITION NTStatus = 0xC022002A + STATUS_FWP_DUPLICATE_KEYMOD NTStatus = 0xC022002B + STATUS_FWP_ACTION_INCOMPATIBLE_WITH_LAYER NTStatus = 0xC022002C + STATUS_FWP_ACTION_INCOMPATIBLE_WITH_SUBLAYER NTStatus = 0xC022002D + STATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_LAYER NTStatus = 0xC022002E + STATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_CALLOUT NTStatus = 0xC022002F + STATUS_FWP_INCOMPATIBLE_AUTH_METHOD NTStatus = 0xC0220030 + STATUS_FWP_INCOMPATIBLE_DH_GROUP NTStatus = 0xC0220031 + STATUS_FWP_EM_NOT_SUPPORTED NTStatus = 0xC0220032 + STATUS_FWP_NEVER_MATCH NTStatus = 0xC0220033 + STATUS_FWP_PROVIDER_CONTEXT_MISMATCH NTStatus = 0xC0220034 + STATUS_FWP_INVALID_PARAMETER NTStatus = 0xC0220035 + STATUS_FWP_TOO_MANY_SUBLAYERS NTStatus = 0xC0220036 + STATUS_FWP_CALLOUT_NOTIFICATION_FAILED NTStatus = 0xC0220037 + STATUS_FWP_INVALID_AUTH_TRANSFORM NTStatus = 0xC0220038 + STATUS_FWP_INVALID_CIPHER_TRANSFORM NTStatus = 0xC0220039 + STATUS_FWP_INCOMPATIBLE_CIPHER_TRANSFORM NTStatus = 0xC022003A + STATUS_FWP_INVALID_TRANSFORM_COMBINATION NTStatus = 0xC022003B + STATUS_FWP_DUPLICATE_AUTH_METHOD NTStatus = 0xC022003C + STATUS_FWP_INVALID_TUNNEL_ENDPOINT NTStatus = 0xC022003D + STATUS_FWP_L2_DRIVER_NOT_READY NTStatus = 0xC022003E + STATUS_FWP_KEY_DICTATOR_ALREADY_REGISTERED NTStatus = 0xC022003F + STATUS_FWP_KEY_DICTATION_INVALID_KEYING_MATERIAL NTStatus = 0xC0220040 + STATUS_FWP_CONNECTIONS_DISABLED NTStatus = 0xC0220041 + STATUS_FWP_INVALID_DNS_NAME NTStatus = 0xC0220042 + STATUS_FWP_STILL_ON NTStatus = 0xC0220043 + STATUS_FWP_IKEEXT_NOT_RUNNING NTStatus = 0xC0220044 + STATUS_FWP_TCPIP_NOT_READY NTStatus = 0xC0220100 + STATUS_FWP_INJECT_HANDLE_CLOSING NTStatus = 0xC0220101 + STATUS_FWP_INJECT_HANDLE_STALE NTStatus = 0xC0220102 + STATUS_FWP_CANNOT_PEND NTStatus = 0xC0220103 + STATUS_FWP_DROP_NOICMP NTStatus = 0xC0220104 + STATUS_NDIS_CLOSING NTStatus = 0xC0230002 + STATUS_NDIS_BAD_VERSION NTStatus = 0xC0230004 + STATUS_NDIS_BAD_CHARACTERISTICS NTStatus = 0xC0230005 + STATUS_NDIS_ADAPTER_NOT_FOUND NTStatus = 0xC0230006 + STATUS_NDIS_OPEN_FAILED NTStatus = 0xC0230007 + STATUS_NDIS_DEVICE_FAILED NTStatus = 0xC0230008 + STATUS_NDIS_MULTICAST_FULL NTStatus = 0xC0230009 + STATUS_NDIS_MULTICAST_EXISTS NTStatus = 0xC023000A + STATUS_NDIS_MULTICAST_NOT_FOUND NTStatus = 0xC023000B + STATUS_NDIS_REQUEST_ABORTED NTStatus = 0xC023000C + STATUS_NDIS_RESET_IN_PROGRESS NTStatus = 0xC023000D + STATUS_NDIS_NOT_SUPPORTED NTStatus = 0xC02300BB + STATUS_NDIS_INVALID_PACKET NTStatus = 0xC023000F + STATUS_NDIS_ADAPTER_NOT_READY NTStatus = 0xC0230011 + STATUS_NDIS_INVALID_LENGTH NTStatus = 0xC0230014 + STATUS_NDIS_INVALID_DATA NTStatus = 0xC0230015 + STATUS_NDIS_BUFFER_TOO_SHORT NTStatus = 0xC0230016 + STATUS_NDIS_INVALID_OID NTStatus = 0xC0230017 + STATUS_NDIS_ADAPTER_REMOVED NTStatus = 0xC0230018 + STATUS_NDIS_UNSUPPORTED_MEDIA NTStatus = 0xC0230019 + STATUS_NDIS_GROUP_ADDRESS_IN_USE NTStatus = 0xC023001A + STATUS_NDIS_FILE_NOT_FOUND NTStatus = 0xC023001B + STATUS_NDIS_ERROR_READING_FILE NTStatus = 0xC023001C + STATUS_NDIS_ALREADY_MAPPED NTStatus = 0xC023001D + STATUS_NDIS_RESOURCE_CONFLICT NTStatus = 0xC023001E + STATUS_NDIS_MEDIA_DISCONNECTED NTStatus = 0xC023001F + STATUS_NDIS_INVALID_ADDRESS NTStatus = 0xC0230022 + STATUS_NDIS_INVALID_DEVICE_REQUEST NTStatus = 0xC0230010 + STATUS_NDIS_PAUSED NTStatus = 0xC023002A + STATUS_NDIS_INTERFACE_NOT_FOUND NTStatus = 0xC023002B + STATUS_NDIS_UNSUPPORTED_REVISION NTStatus = 0xC023002C + STATUS_NDIS_INVALID_PORT NTStatus = 0xC023002D + STATUS_NDIS_INVALID_PORT_STATE NTStatus = 0xC023002E + STATUS_NDIS_LOW_POWER_STATE NTStatus = 0xC023002F + STATUS_NDIS_REINIT_REQUIRED NTStatus = 0xC0230030 + STATUS_NDIS_NO_QUEUES NTStatus = 0xC0230031 + STATUS_NDIS_DOT11_AUTO_CONFIG_ENABLED NTStatus = 0xC0232000 + STATUS_NDIS_DOT11_MEDIA_IN_USE NTStatus = 0xC0232001 + STATUS_NDIS_DOT11_POWER_STATE_INVALID NTStatus = 0xC0232002 + STATUS_NDIS_PM_WOL_PATTERN_LIST_FULL NTStatus = 0xC0232003 + STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL NTStatus = 0xC0232004 + STATUS_NDIS_DOT11_AP_CHANNEL_CURRENTLY_NOT_AVAILABLE NTStatus = 0xC0232005 + STATUS_NDIS_DOT11_AP_BAND_CURRENTLY_NOT_AVAILABLE NTStatus = 0xC0232006 + STATUS_NDIS_DOT11_AP_CHANNEL_NOT_ALLOWED NTStatus = 0xC0232007 + STATUS_NDIS_DOT11_AP_BAND_NOT_ALLOWED NTStatus = 0xC0232008 + STATUS_NDIS_INDICATION_REQUIRED NTStatus = 0x40230001 + STATUS_NDIS_OFFLOAD_POLICY NTStatus = 0xC023100F + STATUS_NDIS_OFFLOAD_CONNECTION_REJECTED NTStatus = 0xC0231012 + STATUS_NDIS_OFFLOAD_PATH_REJECTED NTStatus = 0xC0231013 + STATUS_TPM_ERROR_MASK NTStatus = 0xC0290000 + STATUS_TPM_AUTHFAIL NTStatus = 0xC0290001 + STATUS_TPM_BADINDEX NTStatus = 0xC0290002 + STATUS_TPM_BAD_PARAMETER NTStatus = 0xC0290003 + STATUS_TPM_AUDITFAILURE NTStatus = 0xC0290004 + STATUS_TPM_CLEAR_DISABLED NTStatus = 0xC0290005 + STATUS_TPM_DEACTIVATED NTStatus = 0xC0290006 + STATUS_TPM_DISABLED NTStatus = 0xC0290007 + STATUS_TPM_DISABLED_CMD NTStatus = 0xC0290008 + STATUS_TPM_FAIL NTStatus = 0xC0290009 + STATUS_TPM_BAD_ORDINAL NTStatus = 0xC029000A + STATUS_TPM_INSTALL_DISABLED NTStatus = 0xC029000B + STATUS_TPM_INVALID_KEYHANDLE NTStatus = 0xC029000C + STATUS_TPM_KEYNOTFOUND NTStatus = 0xC029000D + STATUS_TPM_INAPPROPRIATE_ENC NTStatus = 0xC029000E + STATUS_TPM_MIGRATEFAIL NTStatus = 0xC029000F + STATUS_TPM_INVALID_PCR_INFO NTStatus = 0xC0290010 + STATUS_TPM_NOSPACE NTStatus = 0xC0290011 + STATUS_TPM_NOSRK NTStatus = 0xC0290012 + STATUS_TPM_NOTSEALED_BLOB NTStatus = 0xC0290013 + STATUS_TPM_OWNER_SET NTStatus = 0xC0290014 + STATUS_TPM_RESOURCES NTStatus = 0xC0290015 + STATUS_TPM_SHORTRANDOM NTStatus = 0xC0290016 + STATUS_TPM_SIZE NTStatus = 0xC0290017 + STATUS_TPM_WRONGPCRVAL NTStatus = 0xC0290018 + STATUS_TPM_BAD_PARAM_SIZE NTStatus = 0xC0290019 + STATUS_TPM_SHA_THREAD NTStatus = 0xC029001A + STATUS_TPM_SHA_ERROR NTStatus = 0xC029001B + STATUS_TPM_FAILEDSELFTEST NTStatus = 0xC029001C + STATUS_TPM_AUTH2FAIL NTStatus = 0xC029001D + STATUS_TPM_BADTAG NTStatus = 0xC029001E + STATUS_TPM_IOERROR NTStatus = 0xC029001F + STATUS_TPM_ENCRYPT_ERROR NTStatus = 0xC0290020 + STATUS_TPM_DECRYPT_ERROR NTStatus = 0xC0290021 + STATUS_TPM_INVALID_AUTHHANDLE NTStatus = 0xC0290022 + STATUS_TPM_NO_ENDORSEMENT NTStatus = 0xC0290023 + STATUS_TPM_INVALID_KEYUSAGE NTStatus = 0xC0290024 + STATUS_TPM_WRONG_ENTITYTYPE NTStatus = 0xC0290025 + STATUS_TPM_INVALID_POSTINIT NTStatus = 0xC0290026 + STATUS_TPM_INAPPROPRIATE_SIG NTStatus = 0xC0290027 + STATUS_TPM_BAD_KEY_PROPERTY NTStatus = 0xC0290028 + STATUS_TPM_BAD_MIGRATION NTStatus = 0xC0290029 + STATUS_TPM_BAD_SCHEME NTStatus = 0xC029002A + STATUS_TPM_BAD_DATASIZE NTStatus = 0xC029002B + STATUS_TPM_BAD_MODE NTStatus = 0xC029002C + STATUS_TPM_BAD_PRESENCE NTStatus = 0xC029002D + STATUS_TPM_BAD_VERSION NTStatus = 0xC029002E + STATUS_TPM_NO_WRAP_TRANSPORT NTStatus = 0xC029002F + STATUS_TPM_AUDITFAIL_UNSUCCESSFUL NTStatus = 0xC0290030 + STATUS_TPM_AUDITFAIL_SUCCESSFUL NTStatus = 0xC0290031 + STATUS_TPM_NOTRESETABLE NTStatus = 0xC0290032 + STATUS_TPM_NOTLOCAL NTStatus = 0xC0290033 + STATUS_TPM_BAD_TYPE NTStatus = 0xC0290034 + STATUS_TPM_INVALID_RESOURCE NTStatus = 0xC0290035 + STATUS_TPM_NOTFIPS NTStatus = 0xC0290036 + STATUS_TPM_INVALID_FAMILY NTStatus = 0xC0290037 + STATUS_TPM_NO_NV_PERMISSION NTStatus = 0xC0290038 + STATUS_TPM_REQUIRES_SIGN NTStatus = 0xC0290039 + STATUS_TPM_KEY_NOTSUPPORTED NTStatus = 0xC029003A + STATUS_TPM_AUTH_CONFLICT NTStatus = 0xC029003B + STATUS_TPM_AREA_LOCKED NTStatus = 0xC029003C + STATUS_TPM_BAD_LOCALITY NTStatus = 0xC029003D + STATUS_TPM_READ_ONLY NTStatus = 0xC029003E + STATUS_TPM_PER_NOWRITE NTStatus = 0xC029003F + STATUS_TPM_FAMILYCOUNT NTStatus = 0xC0290040 + STATUS_TPM_WRITE_LOCKED NTStatus = 0xC0290041 + STATUS_TPM_BAD_ATTRIBUTES NTStatus = 0xC0290042 + STATUS_TPM_INVALID_STRUCTURE NTStatus = 0xC0290043 + STATUS_TPM_KEY_OWNER_CONTROL NTStatus = 0xC0290044 + STATUS_TPM_BAD_COUNTER NTStatus = 0xC0290045 + STATUS_TPM_NOT_FULLWRITE NTStatus = 0xC0290046 + STATUS_TPM_CONTEXT_GAP NTStatus = 0xC0290047 + STATUS_TPM_MAXNVWRITES NTStatus = 0xC0290048 + STATUS_TPM_NOOPERATOR NTStatus = 0xC0290049 + STATUS_TPM_RESOURCEMISSING NTStatus = 0xC029004A + STATUS_TPM_DELEGATE_LOCK NTStatus = 0xC029004B + STATUS_TPM_DELEGATE_FAMILY NTStatus = 0xC029004C + STATUS_TPM_DELEGATE_ADMIN NTStatus = 0xC029004D + STATUS_TPM_TRANSPORT_NOTEXCLUSIVE NTStatus = 0xC029004E + STATUS_TPM_OWNER_CONTROL NTStatus = 0xC029004F + STATUS_TPM_DAA_RESOURCES NTStatus = 0xC0290050 + STATUS_TPM_DAA_INPUT_DATA0 NTStatus = 0xC0290051 + STATUS_TPM_DAA_INPUT_DATA1 NTStatus = 0xC0290052 + STATUS_TPM_DAA_ISSUER_SETTINGS NTStatus = 0xC0290053 + STATUS_TPM_DAA_TPM_SETTINGS NTStatus = 0xC0290054 + STATUS_TPM_DAA_STAGE NTStatus = 0xC0290055 + STATUS_TPM_DAA_ISSUER_VALIDITY NTStatus = 0xC0290056 + STATUS_TPM_DAA_WRONG_W NTStatus = 0xC0290057 + STATUS_TPM_BAD_HANDLE NTStatus = 0xC0290058 + STATUS_TPM_BAD_DELEGATE NTStatus = 0xC0290059 + STATUS_TPM_BADCONTEXT NTStatus = 0xC029005A + STATUS_TPM_TOOMANYCONTEXTS NTStatus = 0xC029005B + STATUS_TPM_MA_TICKET_SIGNATURE NTStatus = 0xC029005C + STATUS_TPM_MA_DESTINATION NTStatus = 0xC029005D + STATUS_TPM_MA_SOURCE NTStatus = 0xC029005E + STATUS_TPM_MA_AUTHORITY NTStatus = 0xC029005F + STATUS_TPM_PERMANENTEK NTStatus = 0xC0290061 + STATUS_TPM_BAD_SIGNATURE NTStatus = 0xC0290062 + STATUS_TPM_NOCONTEXTSPACE NTStatus = 0xC0290063 + STATUS_TPM_20_E_ASYMMETRIC NTStatus = 0xC0290081 + STATUS_TPM_20_E_ATTRIBUTES NTStatus = 0xC0290082 + STATUS_TPM_20_E_HASH NTStatus = 0xC0290083 + STATUS_TPM_20_E_VALUE NTStatus = 0xC0290084 + STATUS_TPM_20_E_HIERARCHY NTStatus = 0xC0290085 + STATUS_TPM_20_E_KEY_SIZE NTStatus = 0xC0290087 + STATUS_TPM_20_E_MGF NTStatus = 0xC0290088 + STATUS_TPM_20_E_MODE NTStatus = 0xC0290089 + STATUS_TPM_20_E_TYPE NTStatus = 0xC029008A + STATUS_TPM_20_E_HANDLE NTStatus = 0xC029008B + STATUS_TPM_20_E_KDF NTStatus = 0xC029008C + STATUS_TPM_20_E_RANGE NTStatus = 0xC029008D + STATUS_TPM_20_E_AUTH_FAIL NTStatus = 0xC029008E + STATUS_TPM_20_E_NONCE NTStatus = 0xC029008F + STATUS_TPM_20_E_PP NTStatus = 0xC0290090 + STATUS_TPM_20_E_SCHEME NTStatus = 0xC0290092 + STATUS_TPM_20_E_SIZE NTStatus = 0xC0290095 + STATUS_TPM_20_E_SYMMETRIC NTStatus = 0xC0290096 + STATUS_TPM_20_E_TAG NTStatus = 0xC0290097 + STATUS_TPM_20_E_SELECTOR NTStatus = 0xC0290098 + STATUS_TPM_20_E_INSUFFICIENT NTStatus = 0xC029009A + STATUS_TPM_20_E_SIGNATURE NTStatus = 0xC029009B + STATUS_TPM_20_E_KEY NTStatus = 0xC029009C + STATUS_TPM_20_E_POLICY_FAIL NTStatus = 0xC029009D + STATUS_TPM_20_E_INTEGRITY NTStatus = 0xC029009F + STATUS_TPM_20_E_TICKET NTStatus = 0xC02900A0 + STATUS_TPM_20_E_RESERVED_BITS NTStatus = 0xC02900A1 + STATUS_TPM_20_E_BAD_AUTH NTStatus = 0xC02900A2 + STATUS_TPM_20_E_EXPIRED NTStatus = 0xC02900A3 + STATUS_TPM_20_E_POLICY_CC NTStatus = 0xC02900A4 + STATUS_TPM_20_E_BINDING NTStatus = 0xC02900A5 + STATUS_TPM_20_E_CURVE NTStatus = 0xC02900A6 + STATUS_TPM_20_E_ECC_POINT NTStatus = 0xC02900A7 + STATUS_TPM_20_E_INITIALIZE NTStatus = 0xC0290100 + STATUS_TPM_20_E_FAILURE NTStatus = 0xC0290101 + STATUS_TPM_20_E_SEQUENCE NTStatus = 0xC0290103 + STATUS_TPM_20_E_PRIVATE NTStatus = 0xC029010B + STATUS_TPM_20_E_HMAC NTStatus = 0xC0290119 + STATUS_TPM_20_E_DISABLED NTStatus = 0xC0290120 + STATUS_TPM_20_E_EXCLUSIVE NTStatus = 0xC0290121 + STATUS_TPM_20_E_ECC_CURVE NTStatus = 0xC0290123 + STATUS_TPM_20_E_AUTH_TYPE NTStatus = 0xC0290124 + STATUS_TPM_20_E_AUTH_MISSING NTStatus = 0xC0290125 + STATUS_TPM_20_E_POLICY NTStatus = 0xC0290126 + STATUS_TPM_20_E_PCR NTStatus = 0xC0290127 + STATUS_TPM_20_E_PCR_CHANGED NTStatus = 0xC0290128 + STATUS_TPM_20_E_UPGRADE NTStatus = 0xC029012D + STATUS_TPM_20_E_TOO_MANY_CONTEXTS NTStatus = 0xC029012E + STATUS_TPM_20_E_AUTH_UNAVAILABLE NTStatus = 0xC029012F + STATUS_TPM_20_E_REBOOT NTStatus = 0xC0290130 + STATUS_TPM_20_E_UNBALANCED NTStatus = 0xC0290131 + STATUS_TPM_20_E_COMMAND_SIZE NTStatus = 0xC0290142 + STATUS_TPM_20_E_COMMAND_CODE NTStatus = 0xC0290143 + STATUS_TPM_20_E_AUTHSIZE NTStatus = 0xC0290144 + STATUS_TPM_20_E_AUTH_CONTEXT NTStatus = 0xC0290145 + STATUS_TPM_20_E_NV_RANGE NTStatus = 0xC0290146 + STATUS_TPM_20_E_NV_SIZE NTStatus = 0xC0290147 + STATUS_TPM_20_E_NV_LOCKED NTStatus = 0xC0290148 + STATUS_TPM_20_E_NV_AUTHORIZATION NTStatus = 0xC0290149 + STATUS_TPM_20_E_NV_UNINITIALIZED NTStatus = 0xC029014A + STATUS_TPM_20_E_NV_SPACE NTStatus = 0xC029014B + STATUS_TPM_20_E_NV_DEFINED NTStatus = 0xC029014C + STATUS_TPM_20_E_BAD_CONTEXT NTStatus = 0xC0290150 + STATUS_TPM_20_E_CPHASH NTStatus = 0xC0290151 + STATUS_TPM_20_E_PARENT NTStatus = 0xC0290152 + STATUS_TPM_20_E_NEEDS_TEST NTStatus = 0xC0290153 + STATUS_TPM_20_E_NO_RESULT NTStatus = 0xC0290154 + STATUS_TPM_20_E_SENSITIVE NTStatus = 0xC0290155 + STATUS_TPM_COMMAND_BLOCKED NTStatus = 0xC0290400 + STATUS_TPM_INVALID_HANDLE NTStatus = 0xC0290401 + STATUS_TPM_DUPLICATE_VHANDLE NTStatus = 0xC0290402 + STATUS_TPM_EMBEDDED_COMMAND_BLOCKED NTStatus = 0xC0290403 + STATUS_TPM_EMBEDDED_COMMAND_UNSUPPORTED NTStatus = 0xC0290404 + STATUS_TPM_RETRY NTStatus = 0xC0290800 + STATUS_TPM_NEEDS_SELFTEST NTStatus = 0xC0290801 + STATUS_TPM_DOING_SELFTEST NTStatus = 0xC0290802 + STATUS_TPM_DEFEND_LOCK_RUNNING NTStatus = 0xC0290803 + STATUS_TPM_COMMAND_CANCELED NTStatus = 0xC0291001 + STATUS_TPM_TOO_MANY_CONTEXTS NTStatus = 0xC0291002 + STATUS_TPM_NOT_FOUND NTStatus = 0xC0291003 + STATUS_TPM_ACCESS_DENIED NTStatus = 0xC0291004 + STATUS_TPM_INSUFFICIENT_BUFFER NTStatus = 0xC0291005 + STATUS_TPM_PPI_FUNCTION_UNSUPPORTED NTStatus = 0xC0291006 + STATUS_PCP_ERROR_MASK NTStatus = 0xC0292000 + STATUS_PCP_DEVICE_NOT_READY NTStatus = 0xC0292001 + STATUS_PCP_INVALID_HANDLE NTStatus = 0xC0292002 + STATUS_PCP_INVALID_PARAMETER NTStatus = 0xC0292003 + STATUS_PCP_FLAG_NOT_SUPPORTED NTStatus = 0xC0292004 + STATUS_PCP_NOT_SUPPORTED NTStatus = 0xC0292005 + STATUS_PCP_BUFFER_TOO_SMALL NTStatus = 0xC0292006 + STATUS_PCP_INTERNAL_ERROR NTStatus = 0xC0292007 + STATUS_PCP_AUTHENTICATION_FAILED NTStatus = 0xC0292008 + STATUS_PCP_AUTHENTICATION_IGNORED NTStatus = 0xC0292009 + STATUS_PCP_POLICY_NOT_FOUND NTStatus = 0xC029200A + STATUS_PCP_PROFILE_NOT_FOUND NTStatus = 0xC029200B + STATUS_PCP_VALIDATION_FAILED NTStatus = 0xC029200C + STATUS_PCP_DEVICE_NOT_FOUND NTStatus = 0xC029200D + STATUS_PCP_WRONG_PARENT NTStatus = 0xC029200E + STATUS_PCP_KEY_NOT_LOADED NTStatus = 0xC029200F + STATUS_PCP_NO_KEY_CERTIFICATION NTStatus = 0xC0292010 + STATUS_PCP_KEY_NOT_FINALIZED NTStatus = 0xC0292011 + STATUS_PCP_ATTESTATION_CHALLENGE_NOT_SET NTStatus = 0xC0292012 + STATUS_PCP_NOT_PCR_BOUND NTStatus = 0xC0292013 + STATUS_PCP_KEY_ALREADY_FINALIZED NTStatus = 0xC0292014 + STATUS_PCP_KEY_USAGE_POLICY_NOT_SUPPORTED NTStatus = 0xC0292015 + STATUS_PCP_KEY_USAGE_POLICY_INVALID NTStatus = 0xC0292016 + STATUS_PCP_SOFT_KEY_ERROR NTStatus = 0xC0292017 + STATUS_PCP_KEY_NOT_AUTHENTICATED NTStatus = 0xC0292018 + STATUS_PCP_KEY_NOT_AIK NTStatus = 0xC0292019 + STATUS_PCP_KEY_NOT_SIGNING_KEY NTStatus = 0xC029201A + STATUS_PCP_LOCKED_OUT NTStatus = 0xC029201B + STATUS_PCP_CLAIM_TYPE_NOT_SUPPORTED NTStatus = 0xC029201C + STATUS_PCP_TPM_VERSION_NOT_SUPPORTED NTStatus = 0xC029201D + STATUS_PCP_BUFFER_LENGTH_MISMATCH NTStatus = 0xC029201E + STATUS_PCP_IFX_RSA_KEY_CREATION_BLOCKED NTStatus = 0xC029201F + STATUS_PCP_TICKET_MISSING NTStatus = 0xC0292020 + STATUS_PCP_RAW_POLICY_NOT_SUPPORTED NTStatus = 0xC0292021 + STATUS_PCP_KEY_HANDLE_INVALIDATED NTStatus = 0xC0292022 + STATUS_PCP_UNSUPPORTED_PSS_SALT NTStatus = 0x40292023 + STATUS_RTPM_CONTEXT_CONTINUE NTStatus = 0x00293000 + STATUS_RTPM_CONTEXT_COMPLETE NTStatus = 0x00293001 + STATUS_RTPM_NO_RESULT NTStatus = 0xC0293002 + STATUS_RTPM_PCR_READ_INCOMPLETE NTStatus = 0xC0293003 + STATUS_RTPM_INVALID_CONTEXT NTStatus = 0xC0293004 + STATUS_RTPM_UNSUPPORTED_CMD NTStatus = 0xC0293005 + STATUS_TPM_ZERO_EXHAUST_ENABLED NTStatus = 0xC0294000 + STATUS_HV_INVALID_HYPERCALL_CODE NTStatus = 0xC0350002 + STATUS_HV_INVALID_HYPERCALL_INPUT NTStatus = 0xC0350003 + STATUS_HV_INVALID_ALIGNMENT NTStatus = 0xC0350004 + STATUS_HV_INVALID_PARAMETER NTStatus = 0xC0350005 + STATUS_HV_ACCESS_DENIED NTStatus = 0xC0350006 + STATUS_HV_INVALID_PARTITION_STATE NTStatus = 0xC0350007 + STATUS_HV_OPERATION_DENIED NTStatus = 0xC0350008 + STATUS_HV_UNKNOWN_PROPERTY NTStatus = 0xC0350009 + STATUS_HV_PROPERTY_VALUE_OUT_OF_RANGE NTStatus = 0xC035000A + STATUS_HV_INSUFFICIENT_MEMORY NTStatus = 0xC035000B + STATUS_HV_PARTITION_TOO_DEEP NTStatus = 0xC035000C + STATUS_HV_INVALID_PARTITION_ID NTStatus = 0xC035000D + STATUS_HV_INVALID_VP_INDEX NTStatus = 0xC035000E + STATUS_HV_INVALID_PORT_ID NTStatus = 0xC0350011 + STATUS_HV_INVALID_CONNECTION_ID NTStatus = 0xC0350012 + STATUS_HV_INSUFFICIENT_BUFFERS NTStatus = 0xC0350013 + STATUS_HV_NOT_ACKNOWLEDGED NTStatus = 0xC0350014 + STATUS_HV_INVALID_VP_STATE NTStatus = 0xC0350015 + STATUS_HV_ACKNOWLEDGED NTStatus = 0xC0350016 + STATUS_HV_INVALID_SAVE_RESTORE_STATE NTStatus = 0xC0350017 + STATUS_HV_INVALID_SYNIC_STATE NTStatus = 0xC0350018 + STATUS_HV_OBJECT_IN_USE NTStatus = 0xC0350019 + STATUS_HV_INVALID_PROXIMITY_DOMAIN_INFO NTStatus = 0xC035001A + STATUS_HV_NO_DATA NTStatus = 0xC035001B + STATUS_HV_INACTIVE NTStatus = 0xC035001C + STATUS_HV_NO_RESOURCES NTStatus = 0xC035001D + STATUS_HV_FEATURE_UNAVAILABLE NTStatus = 0xC035001E + STATUS_HV_INSUFFICIENT_BUFFER NTStatus = 0xC0350033 + STATUS_HV_INSUFFICIENT_DEVICE_DOMAINS NTStatus = 0xC0350038 + STATUS_HV_CPUID_FEATURE_VALIDATION_ERROR NTStatus = 0xC035003C + STATUS_HV_CPUID_XSAVE_FEATURE_VALIDATION_ERROR NTStatus = 0xC035003D + STATUS_HV_PROCESSOR_STARTUP_TIMEOUT NTStatus = 0xC035003E + STATUS_HV_SMX_ENABLED NTStatus = 0xC035003F + STATUS_HV_INVALID_LP_INDEX NTStatus = 0xC0350041 + STATUS_HV_INVALID_REGISTER_VALUE NTStatus = 0xC0350050 + STATUS_HV_INVALID_VTL_STATE NTStatus = 0xC0350051 + STATUS_HV_NX_NOT_DETECTED NTStatus = 0xC0350055 + STATUS_HV_INVALID_DEVICE_ID NTStatus = 0xC0350057 + STATUS_HV_INVALID_DEVICE_STATE NTStatus = 0xC0350058 + STATUS_HV_PENDING_PAGE_REQUESTS NTStatus = 0x00350059 + STATUS_HV_PAGE_REQUEST_INVALID NTStatus = 0xC0350060 + STATUS_HV_INVALID_CPU_GROUP_ID NTStatus = 0xC035006F + STATUS_HV_INVALID_CPU_GROUP_STATE NTStatus = 0xC0350070 + STATUS_HV_OPERATION_FAILED NTStatus = 0xC0350071 + STATUS_HV_NOT_ALLOWED_WITH_NESTED_VIRT_ACTIVE NTStatus = 0xC0350072 + STATUS_HV_INSUFFICIENT_ROOT_MEMORY NTStatus = 0xC0350073 + STATUS_HV_NOT_PRESENT NTStatus = 0xC0351000 + STATUS_VID_DUPLICATE_HANDLER NTStatus = 0xC0370001 + STATUS_VID_TOO_MANY_HANDLERS NTStatus = 0xC0370002 + STATUS_VID_QUEUE_FULL NTStatus = 0xC0370003 + STATUS_VID_HANDLER_NOT_PRESENT NTStatus = 0xC0370004 + STATUS_VID_INVALID_OBJECT_NAME NTStatus = 0xC0370005 + STATUS_VID_PARTITION_NAME_TOO_LONG NTStatus = 0xC0370006 + STATUS_VID_MESSAGE_QUEUE_NAME_TOO_LONG NTStatus = 0xC0370007 + STATUS_VID_PARTITION_ALREADY_EXISTS NTStatus = 0xC0370008 + STATUS_VID_PARTITION_DOES_NOT_EXIST NTStatus = 0xC0370009 + STATUS_VID_PARTITION_NAME_NOT_FOUND NTStatus = 0xC037000A + STATUS_VID_MESSAGE_QUEUE_ALREADY_EXISTS NTStatus = 0xC037000B + STATUS_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT NTStatus = 0xC037000C + STATUS_VID_MB_STILL_REFERENCED NTStatus = 0xC037000D + STATUS_VID_CHILD_GPA_PAGE_SET_CORRUPTED NTStatus = 0xC037000E + STATUS_VID_INVALID_NUMA_SETTINGS NTStatus = 0xC037000F + STATUS_VID_INVALID_NUMA_NODE_INDEX NTStatus = 0xC0370010 + STATUS_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED NTStatus = 0xC0370011 + STATUS_VID_INVALID_MEMORY_BLOCK_HANDLE NTStatus = 0xC0370012 + STATUS_VID_PAGE_RANGE_OVERFLOW NTStatus = 0xC0370013 + STATUS_VID_INVALID_MESSAGE_QUEUE_HANDLE NTStatus = 0xC0370014 + STATUS_VID_INVALID_GPA_RANGE_HANDLE NTStatus = 0xC0370015 + STATUS_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE NTStatus = 0xC0370016 + STATUS_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED NTStatus = 0xC0370017 + STATUS_VID_INVALID_PPM_HANDLE NTStatus = 0xC0370018 + STATUS_VID_MBPS_ARE_LOCKED NTStatus = 0xC0370019 + STATUS_VID_MESSAGE_QUEUE_CLOSED NTStatus = 0xC037001A + STATUS_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED NTStatus = 0xC037001B + STATUS_VID_STOP_PENDING NTStatus = 0xC037001C + STATUS_VID_INVALID_PROCESSOR_STATE NTStatus = 0xC037001D + STATUS_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT NTStatus = 0xC037001E + STATUS_VID_KM_INTERFACE_ALREADY_INITIALIZED NTStatus = 0xC037001F + STATUS_VID_MB_PROPERTY_ALREADY_SET_RESET NTStatus = 0xC0370020 + STATUS_VID_MMIO_RANGE_DESTROYED NTStatus = 0xC0370021 + STATUS_VID_INVALID_CHILD_GPA_PAGE_SET NTStatus = 0xC0370022 + STATUS_VID_RESERVE_PAGE_SET_IS_BEING_USED NTStatus = 0xC0370023 + STATUS_VID_RESERVE_PAGE_SET_TOO_SMALL NTStatus = 0xC0370024 + STATUS_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE NTStatus = 0xC0370025 + STATUS_VID_MBP_COUNT_EXCEEDED_LIMIT NTStatus = 0xC0370026 + STATUS_VID_SAVED_STATE_CORRUPT NTStatus = 0xC0370027 + STATUS_VID_SAVED_STATE_UNRECOGNIZED_ITEM NTStatus = 0xC0370028 + STATUS_VID_SAVED_STATE_INCOMPATIBLE NTStatus = 0xC0370029 + STATUS_VID_VTL_ACCESS_DENIED NTStatus = 0xC037002A + STATUS_VID_REMOTE_NODE_PARENT_GPA_PAGES_USED NTStatus = 0x80370001 + STATUS_IPSEC_BAD_SPI NTStatus = 0xC0360001 + STATUS_IPSEC_SA_LIFETIME_EXPIRED NTStatus = 0xC0360002 + STATUS_IPSEC_WRONG_SA NTStatus = 0xC0360003 + STATUS_IPSEC_REPLAY_CHECK_FAILED NTStatus = 0xC0360004 + STATUS_IPSEC_INVALID_PACKET NTStatus = 0xC0360005 + STATUS_IPSEC_INTEGRITY_CHECK_FAILED NTStatus = 0xC0360006 + STATUS_IPSEC_CLEAR_TEXT_DROP NTStatus = 0xC0360007 + STATUS_IPSEC_AUTH_FIREWALL_DROP NTStatus = 0xC0360008 + STATUS_IPSEC_THROTTLE_DROP NTStatus = 0xC0360009 + STATUS_IPSEC_DOSP_BLOCK NTStatus = 0xC0368000 + STATUS_IPSEC_DOSP_RECEIVED_MULTICAST NTStatus = 0xC0368001 + STATUS_IPSEC_DOSP_INVALID_PACKET NTStatus = 0xC0368002 + STATUS_IPSEC_DOSP_STATE_LOOKUP_FAILED NTStatus = 0xC0368003 + STATUS_IPSEC_DOSP_MAX_ENTRIES NTStatus = 0xC0368004 + STATUS_IPSEC_DOSP_KEYMOD_NOT_ALLOWED NTStatus = 0xC0368005 + STATUS_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES NTStatus = 0xC0368006 + STATUS_VOLMGR_INCOMPLETE_REGENERATION NTStatus = 0x80380001 + STATUS_VOLMGR_INCOMPLETE_DISK_MIGRATION NTStatus = 0x80380002 + STATUS_VOLMGR_DATABASE_FULL NTStatus = 0xC0380001 + STATUS_VOLMGR_DISK_CONFIGURATION_CORRUPTED NTStatus = 0xC0380002 + STATUS_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC NTStatus = 0xC0380003 + STATUS_VOLMGR_PACK_CONFIG_UPDATE_FAILED NTStatus = 0xC0380004 + STATUS_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME NTStatus = 0xC0380005 + STATUS_VOLMGR_DISK_DUPLICATE NTStatus = 0xC0380006 + STATUS_VOLMGR_DISK_DYNAMIC NTStatus = 0xC0380007 + STATUS_VOLMGR_DISK_ID_INVALID NTStatus = 0xC0380008 + STATUS_VOLMGR_DISK_INVALID NTStatus = 0xC0380009 + STATUS_VOLMGR_DISK_LAST_VOTER NTStatus = 0xC038000A + STATUS_VOLMGR_DISK_LAYOUT_INVALID NTStatus = 0xC038000B + STATUS_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS NTStatus = 0xC038000C + STATUS_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED NTStatus = 0xC038000D + STATUS_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL NTStatus = 0xC038000E + STATUS_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS NTStatus = 0xC038000F + STATUS_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS NTStatus = 0xC0380010 + STATUS_VOLMGR_DISK_MISSING NTStatus = 0xC0380011 + STATUS_VOLMGR_DISK_NOT_EMPTY NTStatus = 0xC0380012 + STATUS_VOLMGR_DISK_NOT_ENOUGH_SPACE NTStatus = 0xC0380013 + STATUS_VOLMGR_DISK_REVECTORING_FAILED NTStatus = 0xC0380014 + STATUS_VOLMGR_DISK_SECTOR_SIZE_INVALID NTStatus = 0xC0380015 + STATUS_VOLMGR_DISK_SET_NOT_CONTAINED NTStatus = 0xC0380016 + STATUS_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS NTStatus = 0xC0380017 + STATUS_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES NTStatus = 0xC0380018 + STATUS_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED NTStatus = 0xC0380019 + STATUS_VOLMGR_EXTENT_ALREADY_USED NTStatus = 0xC038001A + STATUS_VOLMGR_EXTENT_NOT_CONTIGUOUS NTStatus = 0xC038001B + STATUS_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION NTStatus = 0xC038001C + STATUS_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED NTStatus = 0xC038001D + STATUS_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION NTStatus = 0xC038001E + STATUS_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH NTStatus = 0xC038001F + STATUS_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED NTStatus = 0xC0380020 + STATUS_VOLMGR_INTERLEAVE_LENGTH_INVALID NTStatus = 0xC0380021 + STATUS_VOLMGR_MAXIMUM_REGISTERED_USERS NTStatus = 0xC0380022 + STATUS_VOLMGR_MEMBER_IN_SYNC NTStatus = 0xC0380023 + STATUS_VOLMGR_MEMBER_INDEX_DUPLICATE NTStatus = 0xC0380024 + STATUS_VOLMGR_MEMBER_INDEX_INVALID NTStatus = 0xC0380025 + STATUS_VOLMGR_MEMBER_MISSING NTStatus = 0xC0380026 + STATUS_VOLMGR_MEMBER_NOT_DETACHED NTStatus = 0xC0380027 + STATUS_VOLMGR_MEMBER_REGENERATING NTStatus = 0xC0380028 + STATUS_VOLMGR_ALL_DISKS_FAILED NTStatus = 0xC0380029 + STATUS_VOLMGR_NO_REGISTERED_USERS NTStatus = 0xC038002A + STATUS_VOLMGR_NO_SUCH_USER NTStatus = 0xC038002B + STATUS_VOLMGR_NOTIFICATION_RESET NTStatus = 0xC038002C + STATUS_VOLMGR_NUMBER_OF_MEMBERS_INVALID NTStatus = 0xC038002D + STATUS_VOLMGR_NUMBER_OF_PLEXES_INVALID NTStatus = 0xC038002E + STATUS_VOLMGR_PACK_DUPLICATE NTStatus = 0xC038002F + STATUS_VOLMGR_PACK_ID_INVALID NTStatus = 0xC0380030 + STATUS_VOLMGR_PACK_INVALID NTStatus = 0xC0380031 + STATUS_VOLMGR_PACK_NAME_INVALID NTStatus = 0xC0380032 + STATUS_VOLMGR_PACK_OFFLINE NTStatus = 0xC0380033 + STATUS_VOLMGR_PACK_HAS_QUORUM NTStatus = 0xC0380034 + STATUS_VOLMGR_PACK_WITHOUT_QUORUM NTStatus = 0xC0380035 + STATUS_VOLMGR_PARTITION_STYLE_INVALID NTStatus = 0xC0380036 + STATUS_VOLMGR_PARTITION_UPDATE_FAILED NTStatus = 0xC0380037 + STATUS_VOLMGR_PLEX_IN_SYNC NTStatus = 0xC0380038 + STATUS_VOLMGR_PLEX_INDEX_DUPLICATE NTStatus = 0xC0380039 + STATUS_VOLMGR_PLEX_INDEX_INVALID NTStatus = 0xC038003A + STATUS_VOLMGR_PLEX_LAST_ACTIVE NTStatus = 0xC038003B + STATUS_VOLMGR_PLEX_MISSING NTStatus = 0xC038003C + STATUS_VOLMGR_PLEX_REGENERATING NTStatus = 0xC038003D + STATUS_VOLMGR_PLEX_TYPE_INVALID NTStatus = 0xC038003E + STATUS_VOLMGR_PLEX_NOT_RAID5 NTStatus = 0xC038003F + STATUS_VOLMGR_PLEX_NOT_SIMPLE NTStatus = 0xC0380040 + STATUS_VOLMGR_STRUCTURE_SIZE_INVALID NTStatus = 0xC0380041 + STATUS_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS NTStatus = 0xC0380042 + STATUS_VOLMGR_TRANSACTION_IN_PROGRESS NTStatus = 0xC0380043 + STATUS_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE NTStatus = 0xC0380044 + STATUS_VOLMGR_VOLUME_CONTAINS_MISSING_DISK NTStatus = 0xC0380045 + STATUS_VOLMGR_VOLUME_ID_INVALID NTStatus = 0xC0380046 + STATUS_VOLMGR_VOLUME_LENGTH_INVALID NTStatus = 0xC0380047 + STATUS_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE NTStatus = 0xC0380048 + STATUS_VOLMGR_VOLUME_NOT_MIRRORED NTStatus = 0xC0380049 + STATUS_VOLMGR_VOLUME_NOT_RETAINED NTStatus = 0xC038004A + STATUS_VOLMGR_VOLUME_OFFLINE NTStatus = 0xC038004B + STATUS_VOLMGR_VOLUME_RETAINED NTStatus = 0xC038004C + STATUS_VOLMGR_NUMBER_OF_EXTENTS_INVALID NTStatus = 0xC038004D + STATUS_VOLMGR_DIFFERENT_SECTOR_SIZE NTStatus = 0xC038004E + STATUS_VOLMGR_BAD_BOOT_DISK NTStatus = 0xC038004F + STATUS_VOLMGR_PACK_CONFIG_OFFLINE NTStatus = 0xC0380050 + STATUS_VOLMGR_PACK_CONFIG_ONLINE NTStatus = 0xC0380051 + STATUS_VOLMGR_NOT_PRIMARY_PACK NTStatus = 0xC0380052 + STATUS_VOLMGR_PACK_LOG_UPDATE_FAILED NTStatus = 0xC0380053 + STATUS_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID NTStatus = 0xC0380054 + STATUS_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID NTStatus = 0xC0380055 + STATUS_VOLMGR_VOLUME_MIRRORED NTStatus = 0xC0380056 + STATUS_VOLMGR_PLEX_NOT_SIMPLE_SPANNED NTStatus = 0xC0380057 + STATUS_VOLMGR_NO_VALID_LOG_COPIES NTStatus = 0xC0380058 + STATUS_VOLMGR_PRIMARY_PACK_PRESENT NTStatus = 0xC0380059 + STATUS_VOLMGR_NUMBER_OF_DISKS_INVALID NTStatus = 0xC038005A + STATUS_VOLMGR_MIRROR_NOT_SUPPORTED NTStatus = 0xC038005B + STATUS_VOLMGR_RAID5_NOT_SUPPORTED NTStatus = 0xC038005C + STATUS_BCD_NOT_ALL_ENTRIES_IMPORTED NTStatus = 0x80390001 + STATUS_BCD_TOO_MANY_ELEMENTS NTStatus = 0xC0390002 + STATUS_BCD_NOT_ALL_ENTRIES_SYNCHRONIZED NTStatus = 0x80390003 + STATUS_VHD_DRIVE_FOOTER_MISSING NTStatus = 0xC03A0001 + STATUS_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH NTStatus = 0xC03A0002 + STATUS_VHD_DRIVE_FOOTER_CORRUPT NTStatus = 0xC03A0003 + STATUS_VHD_FORMAT_UNKNOWN NTStatus = 0xC03A0004 + STATUS_VHD_FORMAT_UNSUPPORTED_VERSION NTStatus = 0xC03A0005 + STATUS_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH NTStatus = 0xC03A0006 + STATUS_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION NTStatus = 0xC03A0007 + STATUS_VHD_SPARSE_HEADER_CORRUPT NTStatus = 0xC03A0008 + STATUS_VHD_BLOCK_ALLOCATION_FAILURE NTStatus = 0xC03A0009 + STATUS_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT NTStatus = 0xC03A000A + STATUS_VHD_INVALID_BLOCK_SIZE NTStatus = 0xC03A000B + STATUS_VHD_BITMAP_MISMATCH NTStatus = 0xC03A000C + STATUS_VHD_PARENT_VHD_NOT_FOUND NTStatus = 0xC03A000D + STATUS_VHD_CHILD_PARENT_ID_MISMATCH NTStatus = 0xC03A000E + STATUS_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH NTStatus = 0xC03A000F + STATUS_VHD_METADATA_READ_FAILURE NTStatus = 0xC03A0010 + STATUS_VHD_METADATA_WRITE_FAILURE NTStatus = 0xC03A0011 + STATUS_VHD_INVALID_SIZE NTStatus = 0xC03A0012 + STATUS_VHD_INVALID_FILE_SIZE NTStatus = 0xC03A0013 + STATUS_VIRTDISK_PROVIDER_NOT_FOUND NTStatus = 0xC03A0014 + STATUS_VIRTDISK_NOT_VIRTUAL_DISK NTStatus = 0xC03A0015 + STATUS_VHD_PARENT_VHD_ACCESS_DENIED NTStatus = 0xC03A0016 + STATUS_VHD_CHILD_PARENT_SIZE_MISMATCH NTStatus = 0xC03A0017 + STATUS_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED NTStatus = 0xC03A0018 + STATUS_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT NTStatus = 0xC03A0019 + STATUS_VIRTUAL_DISK_LIMITATION NTStatus = 0xC03A001A + STATUS_VHD_INVALID_TYPE NTStatus = 0xC03A001B + STATUS_VHD_INVALID_STATE NTStatus = 0xC03A001C + STATUS_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE NTStatus = 0xC03A001D + STATUS_VIRTDISK_DISK_ALREADY_OWNED NTStatus = 0xC03A001E + STATUS_VIRTDISK_DISK_ONLINE_AND_WRITABLE NTStatus = 0xC03A001F + STATUS_CTLOG_TRACKING_NOT_INITIALIZED NTStatus = 0xC03A0020 + STATUS_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE NTStatus = 0xC03A0021 + STATUS_CTLOG_VHD_CHANGED_OFFLINE NTStatus = 0xC03A0022 + STATUS_CTLOG_INVALID_TRACKING_STATE NTStatus = 0xC03A0023 + STATUS_CTLOG_INCONSISTENT_TRACKING_FILE NTStatus = 0xC03A0024 + STATUS_VHD_METADATA_FULL NTStatus = 0xC03A0028 + STATUS_VHD_INVALID_CHANGE_TRACKING_ID NTStatus = 0xC03A0029 + STATUS_VHD_CHANGE_TRACKING_DISABLED NTStatus = 0xC03A002A + STATUS_VHD_MISSING_CHANGE_TRACKING_INFORMATION NTStatus = 0xC03A0030 + STATUS_VHD_RESIZE_WOULD_TRUNCATE_DATA NTStatus = 0xC03A0031 + STATUS_VHD_COULD_NOT_COMPUTE_MINIMUM_VIRTUAL_SIZE NTStatus = 0xC03A0032 + STATUS_VHD_ALREADY_AT_OR_BELOW_MINIMUM_VIRTUAL_SIZE NTStatus = 0xC03A0033 + STATUS_QUERY_STORAGE_ERROR NTStatus = 0x803A0001 + STATUS_GDI_HANDLE_LEAK NTStatus = 0x803F0001 + STATUS_RKF_KEY_NOT_FOUND NTStatus = 0xC0400001 + STATUS_RKF_DUPLICATE_KEY NTStatus = 0xC0400002 + STATUS_RKF_BLOB_FULL NTStatus = 0xC0400003 + STATUS_RKF_STORE_FULL NTStatus = 0xC0400004 + STATUS_RKF_FILE_BLOCKED NTStatus = 0xC0400005 + STATUS_RKF_ACTIVE_KEY NTStatus = 0xC0400006 + STATUS_RDBSS_RESTART_OPERATION NTStatus = 0xC0410001 + STATUS_RDBSS_CONTINUE_OPERATION NTStatus = 0xC0410002 + STATUS_RDBSS_POST_OPERATION NTStatus = 0xC0410003 + STATUS_RDBSS_RETRY_LOOKUP NTStatus = 0xC0410004 + STATUS_BTH_ATT_INVALID_HANDLE NTStatus = 0xC0420001 + STATUS_BTH_ATT_READ_NOT_PERMITTED NTStatus = 0xC0420002 + STATUS_BTH_ATT_WRITE_NOT_PERMITTED NTStatus = 0xC0420003 + STATUS_BTH_ATT_INVALID_PDU NTStatus = 0xC0420004 + STATUS_BTH_ATT_INSUFFICIENT_AUTHENTICATION NTStatus = 0xC0420005 + STATUS_BTH_ATT_REQUEST_NOT_SUPPORTED NTStatus = 0xC0420006 + STATUS_BTH_ATT_INVALID_OFFSET NTStatus = 0xC0420007 + STATUS_BTH_ATT_INSUFFICIENT_AUTHORIZATION NTStatus = 0xC0420008 + STATUS_BTH_ATT_PREPARE_QUEUE_FULL NTStatus = 0xC0420009 + STATUS_BTH_ATT_ATTRIBUTE_NOT_FOUND NTStatus = 0xC042000A + STATUS_BTH_ATT_ATTRIBUTE_NOT_LONG NTStatus = 0xC042000B + STATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE NTStatus = 0xC042000C + STATUS_BTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH NTStatus = 0xC042000D + STATUS_BTH_ATT_UNLIKELY NTStatus = 0xC042000E + STATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION NTStatus = 0xC042000F + STATUS_BTH_ATT_UNSUPPORTED_GROUP_TYPE NTStatus = 0xC0420010 + STATUS_BTH_ATT_INSUFFICIENT_RESOURCES NTStatus = 0xC0420011 + STATUS_BTH_ATT_UNKNOWN_ERROR NTStatus = 0xC0421000 + STATUS_SECUREBOOT_ROLLBACK_DETECTED NTStatus = 0xC0430001 + STATUS_SECUREBOOT_POLICY_VIOLATION NTStatus = 0xC0430002 + STATUS_SECUREBOOT_INVALID_POLICY NTStatus = 0xC0430003 + STATUS_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND NTStatus = 0xC0430004 + STATUS_SECUREBOOT_POLICY_NOT_SIGNED NTStatus = 0xC0430005 + STATUS_SECUREBOOT_NOT_ENABLED NTStatus = 0x80430006 + STATUS_SECUREBOOT_FILE_REPLACED NTStatus = 0xC0430007 + STATUS_SECUREBOOT_POLICY_NOT_AUTHORIZED NTStatus = 0xC0430008 + STATUS_SECUREBOOT_POLICY_UNKNOWN NTStatus = 0xC0430009 + STATUS_SECUREBOOT_POLICY_MISSING_ANTIROLLBACKVERSION NTStatus = 0xC043000A + STATUS_SECUREBOOT_PLATFORM_ID_MISMATCH NTStatus = 0xC043000B + STATUS_SECUREBOOT_POLICY_ROLLBACK_DETECTED NTStatus = 0xC043000C + STATUS_SECUREBOOT_POLICY_UPGRADE_MISMATCH NTStatus = 0xC043000D + STATUS_SECUREBOOT_REQUIRED_POLICY_FILE_MISSING NTStatus = 0xC043000E + STATUS_SECUREBOOT_NOT_BASE_POLICY NTStatus = 0xC043000F + STATUS_SECUREBOOT_NOT_SUPPLEMENTAL_POLICY NTStatus = 0xC0430010 + STATUS_PLATFORM_MANIFEST_NOT_AUTHORIZED NTStatus = 0xC0EB0001 + STATUS_PLATFORM_MANIFEST_INVALID NTStatus = 0xC0EB0002 + STATUS_PLATFORM_MANIFEST_FILE_NOT_AUTHORIZED NTStatus = 0xC0EB0003 + STATUS_PLATFORM_MANIFEST_CATALOG_NOT_AUTHORIZED NTStatus = 0xC0EB0004 + STATUS_PLATFORM_MANIFEST_BINARY_ID_NOT_FOUND NTStatus = 0xC0EB0005 + STATUS_PLATFORM_MANIFEST_NOT_ACTIVE NTStatus = 0xC0EB0006 + STATUS_PLATFORM_MANIFEST_NOT_SIGNED NTStatus = 0xC0EB0007 + STATUS_SYSTEM_INTEGRITY_ROLLBACK_DETECTED NTStatus = 0xC0E90001 + STATUS_SYSTEM_INTEGRITY_POLICY_VIOLATION NTStatus = 0xC0E90002 + STATUS_SYSTEM_INTEGRITY_INVALID_POLICY NTStatus = 0xC0E90003 + STATUS_SYSTEM_INTEGRITY_POLICY_NOT_SIGNED NTStatus = 0xC0E90004 + STATUS_SYSTEM_INTEGRITY_TOO_MANY_POLICIES NTStatus = 0xC0E90005 + STATUS_SYSTEM_INTEGRITY_SUPPLEMENTAL_POLICY_NOT_AUTHORIZED NTStatus = 0xC0E90006 + STATUS_NO_APPLICABLE_APP_LICENSES_FOUND NTStatus = 0xC0EA0001 + STATUS_CLIP_LICENSE_NOT_FOUND NTStatus = 0xC0EA0002 + STATUS_CLIP_DEVICE_LICENSE_MISSING NTStatus = 0xC0EA0003 + STATUS_CLIP_LICENSE_INVALID_SIGNATURE NTStatus = 0xC0EA0004 + STATUS_CLIP_KEYHOLDER_LICENSE_MISSING_OR_INVALID NTStatus = 0xC0EA0005 + STATUS_CLIP_LICENSE_EXPIRED NTStatus = 0xC0EA0006 + STATUS_CLIP_LICENSE_SIGNED_BY_UNKNOWN_SOURCE NTStatus = 0xC0EA0007 + STATUS_CLIP_LICENSE_NOT_SIGNED NTStatus = 0xC0EA0008 + STATUS_CLIP_LICENSE_HARDWARE_ID_OUT_OF_TOLERANCE NTStatus = 0xC0EA0009 + STATUS_CLIP_LICENSE_DEVICE_ID_MISMATCH NTStatus = 0xC0EA000A + STATUS_AUDIO_ENGINE_NODE_NOT_FOUND NTStatus = 0xC0440001 + STATUS_HDAUDIO_EMPTY_CONNECTION_LIST NTStatus = 0xC0440002 + STATUS_HDAUDIO_CONNECTION_LIST_NOT_SUPPORTED NTStatus = 0xC0440003 + STATUS_HDAUDIO_NO_LOGICAL_DEVICES_CREATED NTStatus = 0xC0440004 + STATUS_HDAUDIO_NULL_LINKED_LIST_ENTRY NTStatus = 0xC0440005 + STATUS_SPACES_REPAIRED NTStatus = 0x00E70000 + STATUS_SPACES_PAUSE NTStatus = 0x00E70001 + STATUS_SPACES_COMPLETE NTStatus = 0x00E70002 + STATUS_SPACES_REDIRECT NTStatus = 0x00E70003 + STATUS_SPACES_FAULT_DOMAIN_TYPE_INVALID NTStatus = 0xC0E70001 + STATUS_SPACES_RESILIENCY_TYPE_INVALID NTStatus = 0xC0E70003 + STATUS_SPACES_DRIVE_SECTOR_SIZE_INVALID NTStatus = 0xC0E70004 + STATUS_SPACES_DRIVE_REDUNDANCY_INVALID NTStatus = 0xC0E70006 + STATUS_SPACES_NUMBER_OF_DATA_COPIES_INVALID NTStatus = 0xC0E70007 + STATUS_SPACES_INTERLEAVE_LENGTH_INVALID NTStatus = 0xC0E70009 + STATUS_SPACES_NUMBER_OF_COLUMNS_INVALID NTStatus = 0xC0E7000A + STATUS_SPACES_NOT_ENOUGH_DRIVES NTStatus = 0xC0E7000B + STATUS_SPACES_EXTENDED_ERROR NTStatus = 0xC0E7000C + STATUS_SPACES_PROVISIONING_TYPE_INVALID NTStatus = 0xC0E7000D + STATUS_SPACES_ALLOCATION_SIZE_INVALID NTStatus = 0xC0E7000E + STATUS_SPACES_ENCLOSURE_AWARE_INVALID NTStatus = 0xC0E7000F + STATUS_SPACES_WRITE_CACHE_SIZE_INVALID NTStatus = 0xC0E70010 + STATUS_SPACES_NUMBER_OF_GROUPS_INVALID NTStatus = 0xC0E70011 + STATUS_SPACES_DRIVE_OPERATIONAL_STATE_INVALID NTStatus = 0xC0E70012 + STATUS_SPACES_UPDATE_COLUMN_STATE NTStatus = 0xC0E70013 + STATUS_SPACES_MAP_REQUIRED NTStatus = 0xC0E70014 + STATUS_SPACES_UNSUPPORTED_VERSION NTStatus = 0xC0E70015 + STATUS_SPACES_CORRUPT_METADATA NTStatus = 0xC0E70016 + STATUS_SPACES_DRT_FULL NTStatus = 0xC0E70017 + STATUS_SPACES_INCONSISTENCY NTStatus = 0xC0E70018 + STATUS_SPACES_LOG_NOT_READY NTStatus = 0xC0E70019 + STATUS_SPACES_NO_REDUNDANCY NTStatus = 0xC0E7001A + STATUS_SPACES_DRIVE_NOT_READY NTStatus = 0xC0E7001B + STATUS_SPACES_DRIVE_SPLIT NTStatus = 0xC0E7001C + STATUS_SPACES_DRIVE_LOST_DATA NTStatus = 0xC0E7001D + STATUS_SPACES_ENTRY_INCOMPLETE NTStatus = 0xC0E7001E + STATUS_SPACES_ENTRY_INVALID NTStatus = 0xC0E7001F + STATUS_SPACES_MARK_DIRTY NTStatus = 0xC0E70020 + STATUS_VOLSNAP_BOOTFILE_NOT_VALID NTStatus = 0xC0500003 + STATUS_VOLSNAP_ACTIVATION_TIMEOUT NTStatus = 0xC0500004 + STATUS_IO_PREEMPTED NTStatus = 0xC0510001 + STATUS_SVHDX_ERROR_STORED NTStatus = 0xC05C0000 + STATUS_SVHDX_ERROR_NOT_AVAILABLE NTStatus = 0xC05CFF00 + STATUS_SVHDX_UNIT_ATTENTION_AVAILABLE NTStatus = 0xC05CFF01 + STATUS_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED NTStatus = 0xC05CFF02 + STATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED NTStatus = 0xC05CFF03 + STATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED NTStatus = 0xC05CFF04 + STATUS_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED NTStatus = 0xC05CFF05 + STATUS_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED NTStatus = 0xC05CFF06 + STATUS_SVHDX_RESERVATION_CONFLICT NTStatus = 0xC05CFF07 + STATUS_SVHDX_WRONG_FILE_TYPE NTStatus = 0xC05CFF08 + STATUS_SVHDX_VERSION_MISMATCH NTStatus = 0xC05CFF09 + STATUS_VHD_SHARED NTStatus = 0xC05CFF0A + STATUS_SVHDX_NO_INITIATOR NTStatus = 0xC05CFF0B + STATUS_VHDSET_BACKING_STORAGE_NOT_FOUND NTStatus = 0xC05CFF0C + STATUS_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP NTStatus = 0xC05D0000 + STATUS_SMB_BAD_CLUSTER_DIALECT NTStatus = 0xC05D0001 + STATUS_SMB_GUEST_LOGON_BLOCKED NTStatus = 0xC05D0002 + STATUS_SECCORE_INVALID_COMMAND NTStatus = 0xC0E80000 + STATUS_VSM_NOT_INITIALIZED NTStatus = 0xC0450000 + STATUS_VSM_DMA_PROTECTION_NOT_IN_USE NTStatus = 0xC0450001 + STATUS_APPEXEC_CONDITION_NOT_SATISFIED NTStatus = 0xC0EC0000 + STATUS_APPEXEC_HANDLE_INVALIDATED NTStatus = 0xC0EC0001 + STATUS_APPEXEC_INVALID_HOST_GENERATION NTStatus = 0xC0EC0002 + STATUS_APPEXEC_UNEXPECTED_PROCESS_REGISTRATION NTStatus = 0xC0EC0003 + STATUS_APPEXEC_INVALID_HOST_STATE NTStatus = 0xC0EC0004 + STATUS_APPEXEC_NO_DONOR NTStatus = 0xC0EC0005 + STATUS_APPEXEC_HOST_ID_MISMATCH NTStatus = 0xC0EC0006 + STATUS_APPEXEC_UNKNOWN_USER NTStatus = 0xC0EC0007 +) diff --git a/vendor/golang.org/x/sys/windows/zknownfolderids_windows.go b/vendor/golang.org/x/sys/windows/zknownfolderids_windows.go new file mode 100644 index 0000000..6048ac6 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/zknownfolderids_windows.go @@ -0,0 +1,149 @@ +// Code generated by 'mkknownfolderids.bash'; DO NOT EDIT. + +package windows + +type KNOWNFOLDERID GUID + +var ( + FOLDERID_NetworkFolder = &KNOWNFOLDERID{0xd20beec4, 0x5ca8, 0x4905, [8]byte{0xae, 0x3b, 0xbf, 0x25, 0x1e, 0xa0, 0x9b, 0x53}} + FOLDERID_ComputerFolder = &KNOWNFOLDERID{0x0ac0837c, 0xbbf8, 0x452a, [8]byte{0x85, 0x0d, 0x79, 0xd0, 0x8e, 0x66, 0x7c, 0xa7}} + FOLDERID_InternetFolder = &KNOWNFOLDERID{0x4d9f7874, 0x4e0c, 0x4904, [8]byte{0x96, 0x7b, 0x40, 0xb0, 0xd2, 0x0c, 0x3e, 0x4b}} + FOLDERID_ControlPanelFolder = &KNOWNFOLDERID{0x82a74aeb, 0xaeb4, 0x465c, [8]byte{0xa0, 0x14, 0xd0, 0x97, 0xee, 0x34, 0x6d, 0x63}} + FOLDERID_PrintersFolder = &KNOWNFOLDERID{0x76fc4e2d, 0xd6ad, 0x4519, [8]byte{0xa6, 0x63, 0x37, 0xbd, 0x56, 0x06, 0x81, 0x85}} + FOLDERID_SyncManagerFolder = &KNOWNFOLDERID{0x43668bf8, 0xc14e, 0x49b2, [8]byte{0x97, 0xc9, 0x74, 0x77, 0x84, 0xd7, 0x84, 0xb7}} + FOLDERID_SyncSetupFolder = &KNOWNFOLDERID{0x0f214138, 0xb1d3, 0x4a90, [8]byte{0xbb, 0xa9, 0x27, 0xcb, 0xc0, 0xc5, 0x38, 0x9a}} + FOLDERID_ConflictFolder = &KNOWNFOLDERID{0x4bfefb45, 0x347d, 0x4006, [8]byte{0xa5, 0xbe, 0xac, 0x0c, 0xb0, 0x56, 0x71, 0x92}} + FOLDERID_SyncResultsFolder = &KNOWNFOLDERID{0x289a9a43, 0xbe44, 0x4057, [8]byte{0xa4, 0x1b, 0x58, 0x7a, 0x76, 0xd7, 0xe7, 0xf9}} + FOLDERID_RecycleBinFolder = &KNOWNFOLDERID{0xb7534046, 0x3ecb, 0x4c18, [8]byte{0xbe, 0x4e, 0x64, 0xcd, 0x4c, 0xb7, 0xd6, 0xac}} + FOLDERID_ConnectionsFolder = &KNOWNFOLDERID{0x6f0cd92b, 0x2e97, 0x45d1, [8]byte{0x88, 0xff, 0xb0, 0xd1, 0x86, 0xb8, 0xde, 0xdd}} + FOLDERID_Fonts = &KNOWNFOLDERID{0xfd228cb7, 0xae11, 0x4ae3, [8]byte{0x86, 0x4c, 0x16, 0xf3, 0x91, 0x0a, 0xb8, 0xfe}} + FOLDERID_Desktop = &KNOWNFOLDERID{0xb4bfcc3a, 0xdb2c, 0x424c, [8]byte{0xb0, 0x29, 0x7f, 0xe9, 0x9a, 0x87, 0xc6, 0x41}} + FOLDERID_Startup = &KNOWNFOLDERID{0xb97d20bb, 0xf46a, 0x4c97, [8]byte{0xba, 0x10, 0x5e, 0x36, 0x08, 0x43, 0x08, 0x54}} + FOLDERID_Programs = &KNOWNFOLDERID{0xa77f5d77, 0x2e2b, 0x44c3, [8]byte{0xa6, 0xa2, 0xab, 0xa6, 0x01, 0x05, 0x4a, 0x51}} + FOLDERID_StartMenu = &KNOWNFOLDERID{0x625b53c3, 0xab48, 0x4ec1, [8]byte{0xba, 0x1f, 0xa1, 0xef, 0x41, 0x46, 0xfc, 0x19}} + FOLDERID_Recent = &KNOWNFOLDERID{0xae50c081, 0xebd2, 0x438a, [8]byte{0x86, 0x55, 0x8a, 0x09, 0x2e, 0x34, 0x98, 0x7a}} + FOLDERID_SendTo = &KNOWNFOLDERID{0x8983036c, 0x27c0, 0x404b, [8]byte{0x8f, 0x08, 0x10, 0x2d, 0x10, 0xdc, 0xfd, 0x74}} + FOLDERID_Documents = &KNOWNFOLDERID{0xfdd39ad0, 0x238f, 0x46af, [8]byte{0xad, 0xb4, 0x6c, 0x85, 0x48, 0x03, 0x69, 0xc7}} + FOLDERID_Favorites = &KNOWNFOLDERID{0x1777f761, 0x68ad, 0x4d8a, [8]byte{0x87, 0xbd, 0x30, 0xb7, 0x59, 0xfa, 0x33, 0xdd}} + FOLDERID_NetHood = &KNOWNFOLDERID{0xc5abbf53, 0xe17f, 0x4121, [8]byte{0x89, 0x00, 0x86, 0x62, 0x6f, 0xc2, 0xc9, 0x73}} + FOLDERID_PrintHood = &KNOWNFOLDERID{0x9274bd8d, 0xcfd1, 0x41c3, [8]byte{0xb3, 0x5e, 0xb1, 0x3f, 0x55, 0xa7, 0x58, 0xf4}} + FOLDERID_Templates = &KNOWNFOLDERID{0xa63293e8, 0x664e, 0x48db, [8]byte{0xa0, 0x79, 0xdf, 0x75, 0x9e, 0x05, 0x09, 0xf7}} + FOLDERID_CommonStartup = &KNOWNFOLDERID{0x82a5ea35, 0xd9cd, 0x47c5, [8]byte{0x96, 0x29, 0xe1, 0x5d, 0x2f, 0x71, 0x4e, 0x6e}} + FOLDERID_CommonPrograms = &KNOWNFOLDERID{0x0139d44e, 0x6afe, 0x49f2, [8]byte{0x86, 0x90, 0x3d, 0xaf, 0xca, 0xe6, 0xff, 0xb8}} + FOLDERID_CommonStartMenu = &KNOWNFOLDERID{0xa4115719, 0xd62e, 0x491d, [8]byte{0xaa, 0x7c, 0xe7, 0x4b, 0x8b, 0xe3, 0xb0, 0x67}} + FOLDERID_PublicDesktop = &KNOWNFOLDERID{0xc4aa340d, 0xf20f, 0x4863, [8]byte{0xaf, 0xef, 0xf8, 0x7e, 0xf2, 0xe6, 0xba, 0x25}} + FOLDERID_ProgramData = &KNOWNFOLDERID{0x62ab5d82, 0xfdc1, 0x4dc3, [8]byte{0xa9, 0xdd, 0x07, 0x0d, 0x1d, 0x49, 0x5d, 0x97}} + FOLDERID_CommonTemplates = &KNOWNFOLDERID{0xb94237e7, 0x57ac, 0x4347, [8]byte{0x91, 0x51, 0xb0, 0x8c, 0x6c, 0x32, 0xd1, 0xf7}} + FOLDERID_PublicDocuments = &KNOWNFOLDERID{0xed4824af, 0xdce4, 0x45a8, [8]byte{0x81, 0xe2, 0xfc, 0x79, 0x65, 0x08, 0x36, 0x34}} + FOLDERID_RoamingAppData = &KNOWNFOLDERID{0x3eb685db, 0x65f9, 0x4cf6, [8]byte{0xa0, 0x3a, 0xe3, 0xef, 0x65, 0x72, 0x9f, 0x3d}} + FOLDERID_LocalAppData = &KNOWNFOLDERID{0xf1b32785, 0x6fba, 0x4fcf, [8]byte{0x9d, 0x55, 0x7b, 0x8e, 0x7f, 0x15, 0x70, 0x91}} + FOLDERID_LocalAppDataLow = &KNOWNFOLDERID{0xa520a1a4, 0x1780, 0x4ff6, [8]byte{0xbd, 0x18, 0x16, 0x73, 0x43, 0xc5, 0xaf, 0x16}} + FOLDERID_InternetCache = &KNOWNFOLDERID{0x352481e8, 0x33be, 0x4251, [8]byte{0xba, 0x85, 0x60, 0x07, 0xca, 0xed, 0xcf, 0x9d}} + FOLDERID_Cookies = &KNOWNFOLDERID{0x2b0f765d, 0xc0e9, 0x4171, [8]byte{0x90, 0x8e, 0x08, 0xa6, 0x11, 0xb8, 0x4f, 0xf6}} + FOLDERID_History = &KNOWNFOLDERID{0xd9dc8a3b, 0xb784, 0x432e, [8]byte{0xa7, 0x81, 0x5a, 0x11, 0x30, 0xa7, 0x59, 0x63}} + FOLDERID_System = &KNOWNFOLDERID{0x1ac14e77, 0x02e7, 0x4e5d, [8]byte{0xb7, 0x44, 0x2e, 0xb1, 0xae, 0x51, 0x98, 0xb7}} + FOLDERID_SystemX86 = &KNOWNFOLDERID{0xd65231b0, 0xb2f1, 0x4857, [8]byte{0xa4, 0xce, 0xa8, 0xe7, 0xc6, 0xea, 0x7d, 0x27}} + FOLDERID_Windows = &KNOWNFOLDERID{0xf38bf404, 0x1d43, 0x42f2, [8]byte{0x93, 0x05, 0x67, 0xde, 0x0b, 0x28, 0xfc, 0x23}} + FOLDERID_Profile = &KNOWNFOLDERID{0x5e6c858f, 0x0e22, 0x4760, [8]byte{0x9a, 0xfe, 0xea, 0x33, 0x17, 0xb6, 0x71, 0x73}} + FOLDERID_Pictures = &KNOWNFOLDERID{0x33e28130, 0x4e1e, 0x4676, [8]byte{0x83, 0x5a, 0x98, 0x39, 0x5c, 0x3b, 0xc3, 0xbb}} + FOLDERID_ProgramFilesX86 = &KNOWNFOLDERID{0x7c5a40ef, 0xa0fb, 0x4bfc, [8]byte{0x87, 0x4a, 0xc0, 0xf2, 0xe0, 0xb9, 0xfa, 0x8e}} + FOLDERID_ProgramFilesCommonX86 = &KNOWNFOLDERID{0xde974d24, 0xd9c6, 0x4d3e, [8]byte{0xbf, 0x91, 0xf4, 0x45, 0x51, 0x20, 0xb9, 0x17}} + FOLDERID_ProgramFilesX64 = &KNOWNFOLDERID{0x6d809377, 0x6af0, 0x444b, [8]byte{0x89, 0x57, 0xa3, 0x77, 0x3f, 0x02, 0x20, 0x0e}} + FOLDERID_ProgramFilesCommonX64 = &KNOWNFOLDERID{0x6365d5a7, 0x0f0d, 0x45e5, [8]byte{0x87, 0xf6, 0x0d, 0xa5, 0x6b, 0x6a, 0x4f, 0x7d}} + FOLDERID_ProgramFiles = &KNOWNFOLDERID{0x905e63b6, 0xc1bf, 0x494e, [8]byte{0xb2, 0x9c, 0x65, 0xb7, 0x32, 0xd3, 0xd2, 0x1a}} + FOLDERID_ProgramFilesCommon = &KNOWNFOLDERID{0xf7f1ed05, 0x9f6d, 0x47a2, [8]byte{0xaa, 0xae, 0x29, 0xd3, 0x17, 0xc6, 0xf0, 0x66}} + FOLDERID_UserProgramFiles = &KNOWNFOLDERID{0x5cd7aee2, 0x2219, 0x4a67, [8]byte{0xb8, 0x5d, 0x6c, 0x9c, 0xe1, 0x56, 0x60, 0xcb}} + FOLDERID_UserProgramFilesCommon = &KNOWNFOLDERID{0xbcbd3057, 0xca5c, 0x4622, [8]byte{0xb4, 0x2d, 0xbc, 0x56, 0xdb, 0x0a, 0xe5, 0x16}} + FOLDERID_AdminTools = &KNOWNFOLDERID{0x724ef170, 0xa42d, 0x4fef, [8]byte{0x9f, 0x26, 0xb6, 0x0e, 0x84, 0x6f, 0xba, 0x4f}} + FOLDERID_CommonAdminTools = &KNOWNFOLDERID{0xd0384e7d, 0xbac3, 0x4797, [8]byte{0x8f, 0x14, 0xcb, 0xa2, 0x29, 0xb3, 0x92, 0xb5}} + FOLDERID_Music = &KNOWNFOLDERID{0x4bd8d571, 0x6d19, 0x48d3, [8]byte{0xbe, 0x97, 0x42, 0x22, 0x20, 0x08, 0x0e, 0x43}} + FOLDERID_Videos = &KNOWNFOLDERID{0x18989b1d, 0x99b5, 0x455b, [8]byte{0x84, 0x1c, 0xab, 0x7c, 0x74, 0xe4, 0xdd, 0xfc}} + FOLDERID_Ringtones = &KNOWNFOLDERID{0xc870044b, 0xf49e, 0x4126, [8]byte{0xa9, 0xc3, 0xb5, 0x2a, 0x1f, 0xf4, 0x11, 0xe8}} + FOLDERID_PublicPictures = &KNOWNFOLDERID{0xb6ebfb86, 0x6907, 0x413c, [8]byte{0x9a, 0xf7, 0x4f, 0xc2, 0xab, 0xf0, 0x7c, 0xc5}} + FOLDERID_PublicMusic = &KNOWNFOLDERID{0x3214fab5, 0x9757, 0x4298, [8]byte{0xbb, 0x61, 0x92, 0xa9, 0xde, 0xaa, 0x44, 0xff}} + FOLDERID_PublicVideos = &KNOWNFOLDERID{0x2400183a, 0x6185, 0x49fb, [8]byte{0xa2, 0xd8, 0x4a, 0x39, 0x2a, 0x60, 0x2b, 0xa3}} + FOLDERID_PublicRingtones = &KNOWNFOLDERID{0xe555ab60, 0x153b, 0x4d17, [8]byte{0x9f, 0x04, 0xa5, 0xfe, 0x99, 0xfc, 0x15, 0xec}} + FOLDERID_ResourceDir = &KNOWNFOLDERID{0x8ad10c31, 0x2adb, 0x4296, [8]byte{0xa8, 0xf7, 0xe4, 0x70, 0x12, 0x32, 0xc9, 0x72}} + FOLDERID_LocalizedResourcesDir = &KNOWNFOLDERID{0x2a00375e, 0x224c, 0x49de, [8]byte{0xb8, 0xd1, 0x44, 0x0d, 0xf7, 0xef, 0x3d, 0xdc}} + FOLDERID_CommonOEMLinks = &KNOWNFOLDERID{0xc1bae2d0, 0x10df, 0x4334, [8]byte{0xbe, 0xdd, 0x7a, 0xa2, 0x0b, 0x22, 0x7a, 0x9d}} + FOLDERID_CDBurning = &KNOWNFOLDERID{0x9e52ab10, 0xf80d, 0x49df, [8]byte{0xac, 0xb8, 0x43, 0x30, 0xf5, 0x68, 0x78, 0x55}} + FOLDERID_UserProfiles = &KNOWNFOLDERID{0x0762d272, 0xc50a, 0x4bb0, [8]byte{0xa3, 0x82, 0x69, 0x7d, 0xcd, 0x72, 0x9b, 0x80}} + FOLDERID_Playlists = &KNOWNFOLDERID{0xde92c1c7, 0x837f, 0x4f69, [8]byte{0xa3, 0xbb, 0x86, 0xe6, 0x31, 0x20, 0x4a, 0x23}} + FOLDERID_SamplePlaylists = &KNOWNFOLDERID{0x15ca69b3, 0x30ee, 0x49c1, [8]byte{0xac, 0xe1, 0x6b, 0x5e, 0xc3, 0x72, 0xaf, 0xb5}} + FOLDERID_SampleMusic = &KNOWNFOLDERID{0xb250c668, 0xf57d, 0x4ee1, [8]byte{0xa6, 0x3c, 0x29, 0x0e, 0xe7, 0xd1, 0xaa, 0x1f}} + FOLDERID_SamplePictures = &KNOWNFOLDERID{0xc4900540, 0x2379, 0x4c75, [8]byte{0x84, 0x4b, 0x64, 0xe6, 0xfa, 0xf8, 0x71, 0x6b}} + FOLDERID_SampleVideos = &KNOWNFOLDERID{0x859ead94, 0x2e85, 0x48ad, [8]byte{0xa7, 0x1a, 0x09, 0x69, 0xcb, 0x56, 0xa6, 0xcd}} + FOLDERID_PhotoAlbums = &KNOWNFOLDERID{0x69d2cf90, 0xfc33, 0x4fb7, [8]byte{0x9a, 0x0c, 0xeb, 0xb0, 0xf0, 0xfc, 0xb4, 0x3c}} + FOLDERID_Public = &KNOWNFOLDERID{0xdfdf76a2, 0xc82a, 0x4d63, [8]byte{0x90, 0x6a, 0x56, 0x44, 0xac, 0x45, 0x73, 0x85}} + FOLDERID_ChangeRemovePrograms = &KNOWNFOLDERID{0xdf7266ac, 0x9274, 0x4867, [8]byte{0x8d, 0x55, 0x3b, 0xd6, 0x61, 0xde, 0x87, 0x2d}} + FOLDERID_AppUpdates = &KNOWNFOLDERID{0xa305ce99, 0xf527, 0x492b, [8]byte{0x8b, 0x1a, 0x7e, 0x76, 0xfa, 0x98, 0xd6, 0xe4}} + FOLDERID_AddNewPrograms = &KNOWNFOLDERID{0xde61d971, 0x5ebc, 0x4f02, [8]byte{0xa3, 0xa9, 0x6c, 0x82, 0x89, 0x5e, 0x5c, 0x04}} + FOLDERID_Downloads = &KNOWNFOLDERID{0x374de290, 0x123f, 0x4565, [8]byte{0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b}} + FOLDERID_PublicDownloads = &KNOWNFOLDERID{0x3d644c9b, 0x1fb8, 0x4f30, [8]byte{0x9b, 0x45, 0xf6, 0x70, 0x23, 0x5f, 0x79, 0xc0}} + FOLDERID_SavedSearches = &KNOWNFOLDERID{0x7d1d3a04, 0xdebb, 0x4115, [8]byte{0x95, 0xcf, 0x2f, 0x29, 0xda, 0x29, 0x20, 0xda}} + FOLDERID_QuickLaunch = &KNOWNFOLDERID{0x52a4f021, 0x7b75, 0x48a9, [8]byte{0x9f, 0x6b, 0x4b, 0x87, 0xa2, 0x10, 0xbc, 0x8f}} + FOLDERID_Contacts = &KNOWNFOLDERID{0x56784854, 0xc6cb, 0x462b, [8]byte{0x81, 0x69, 0x88, 0xe3, 0x50, 0xac, 0xb8, 0x82}} + FOLDERID_SidebarParts = &KNOWNFOLDERID{0xa75d362e, 0x50fc, 0x4fb7, [8]byte{0xac, 0x2c, 0xa8, 0xbe, 0xaa, 0x31, 0x44, 0x93}} + FOLDERID_SidebarDefaultParts = &KNOWNFOLDERID{0x7b396e54, 0x9ec5, 0x4300, [8]byte{0xbe, 0x0a, 0x24, 0x82, 0xeb, 0xae, 0x1a, 0x26}} + FOLDERID_PublicGameTasks = &KNOWNFOLDERID{0xdebf2536, 0xe1a8, 0x4c59, [8]byte{0xb6, 0xa2, 0x41, 0x45, 0x86, 0x47, 0x6a, 0xea}} + FOLDERID_GameTasks = &KNOWNFOLDERID{0x054fae61, 0x4dd8, 0x4787, [8]byte{0x80, 0xb6, 0x09, 0x02, 0x20, 0xc4, 0xb7, 0x00}} + FOLDERID_SavedGames = &KNOWNFOLDERID{0x4c5c32ff, 0xbb9d, 0x43b0, [8]byte{0xb5, 0xb4, 0x2d, 0x72, 0xe5, 0x4e, 0xaa, 0xa4}} + FOLDERID_Games = &KNOWNFOLDERID{0xcac52c1a, 0xb53d, 0x4edc, [8]byte{0x92, 0xd7, 0x6b, 0x2e, 0x8a, 0xc1, 0x94, 0x34}} + FOLDERID_SEARCH_MAPI = &KNOWNFOLDERID{0x98ec0e18, 0x2098, 0x4d44, [8]byte{0x86, 0x44, 0x66, 0x97, 0x93, 0x15, 0xa2, 0x81}} + FOLDERID_SEARCH_CSC = &KNOWNFOLDERID{0xee32e446, 0x31ca, 0x4aba, [8]byte{0x81, 0x4f, 0xa5, 0xeb, 0xd2, 0xfd, 0x6d, 0x5e}} + FOLDERID_Links = &KNOWNFOLDERID{0xbfb9d5e0, 0xc6a9, 0x404c, [8]byte{0xb2, 0xb2, 0xae, 0x6d, 0xb6, 0xaf, 0x49, 0x68}} + FOLDERID_UsersFiles = &KNOWNFOLDERID{0xf3ce0f7c, 0x4901, 0x4acc, [8]byte{0x86, 0x48, 0xd5, 0xd4, 0x4b, 0x04, 0xef, 0x8f}} + FOLDERID_UsersLibraries = &KNOWNFOLDERID{0xa302545d, 0xdeff, 0x464b, [8]byte{0xab, 0xe8, 0x61, 0xc8, 0x64, 0x8d, 0x93, 0x9b}} + FOLDERID_SearchHome = &KNOWNFOLDERID{0x190337d1, 0xb8ca, 0x4121, [8]byte{0xa6, 0x39, 0x6d, 0x47, 0x2d, 0x16, 0x97, 0x2a}} + FOLDERID_OriginalImages = &KNOWNFOLDERID{0x2c36c0aa, 0x5812, 0x4b87, [8]byte{0xbf, 0xd0, 0x4c, 0xd0, 0xdf, 0xb1, 0x9b, 0x39}} + FOLDERID_DocumentsLibrary = &KNOWNFOLDERID{0x7b0db17d, 0x9cd2, 0x4a93, [8]byte{0x97, 0x33, 0x46, 0xcc, 0x89, 0x02, 0x2e, 0x7c}} + FOLDERID_MusicLibrary = &KNOWNFOLDERID{0x2112ab0a, 0xc86a, 0x4ffe, [8]byte{0xa3, 0x68, 0x0d, 0xe9, 0x6e, 0x47, 0x01, 0x2e}} + FOLDERID_PicturesLibrary = &KNOWNFOLDERID{0xa990ae9f, 0xa03b, 0x4e80, [8]byte{0x94, 0xbc, 0x99, 0x12, 0xd7, 0x50, 0x41, 0x04}} + FOLDERID_VideosLibrary = &KNOWNFOLDERID{0x491e922f, 0x5643, 0x4af4, [8]byte{0xa7, 0xeb, 0x4e, 0x7a, 0x13, 0x8d, 0x81, 0x74}} + FOLDERID_RecordedTVLibrary = &KNOWNFOLDERID{0x1a6fdba2, 0xf42d, 0x4358, [8]byte{0xa7, 0x98, 0xb7, 0x4d, 0x74, 0x59, 0x26, 0xc5}} + FOLDERID_HomeGroup = &KNOWNFOLDERID{0x52528a6b, 0xb9e3, 0x4add, [8]byte{0xb6, 0x0d, 0x58, 0x8c, 0x2d, 0xba, 0x84, 0x2d}} + FOLDERID_HomeGroupCurrentUser = &KNOWNFOLDERID{0x9b74b6a3, 0x0dfd, 0x4f11, [8]byte{0x9e, 0x78, 0x5f, 0x78, 0x00, 0xf2, 0xe7, 0x72}} + FOLDERID_DeviceMetadataStore = &KNOWNFOLDERID{0x5ce4a5e9, 0xe4eb, 0x479d, [8]byte{0xb8, 0x9f, 0x13, 0x0c, 0x02, 0x88, 0x61, 0x55}} + FOLDERID_Libraries = &KNOWNFOLDERID{0x1b3ea5dc, 0xb587, 0x4786, [8]byte{0xb4, 0xef, 0xbd, 0x1d, 0xc3, 0x32, 0xae, 0xae}} + FOLDERID_PublicLibraries = &KNOWNFOLDERID{0x48daf80b, 0xe6cf, 0x4f4e, [8]byte{0xb8, 0x00, 0x0e, 0x69, 0xd8, 0x4e, 0xe3, 0x84}} + FOLDERID_UserPinned = &KNOWNFOLDERID{0x9e3995ab, 0x1f9c, 0x4f13, [8]byte{0xb8, 0x27, 0x48, 0xb2, 0x4b, 0x6c, 0x71, 0x74}} + FOLDERID_ImplicitAppShortcuts = &KNOWNFOLDERID{0xbcb5256f, 0x79f6, 0x4cee, [8]byte{0xb7, 0x25, 0xdc, 0x34, 0xe4, 0x02, 0xfd, 0x46}} + FOLDERID_AccountPictures = &KNOWNFOLDERID{0x008ca0b1, 0x55b4, 0x4c56, [8]byte{0xb8, 0xa8, 0x4d, 0xe4, 0xb2, 0x99, 0xd3, 0xbe}} + FOLDERID_PublicUserTiles = &KNOWNFOLDERID{0x0482af6c, 0x08f1, 0x4c34, [8]byte{0x8c, 0x90, 0xe1, 0x7e, 0xc9, 0x8b, 0x1e, 0x17}} + FOLDERID_AppsFolder = &KNOWNFOLDERID{0x1e87508d, 0x89c2, 0x42f0, [8]byte{0x8a, 0x7e, 0x64, 0x5a, 0x0f, 0x50, 0xca, 0x58}} + FOLDERID_StartMenuAllPrograms = &KNOWNFOLDERID{0xf26305ef, 0x6948, 0x40b9, [8]byte{0xb2, 0x55, 0x81, 0x45, 0x3d, 0x09, 0xc7, 0x85}} + FOLDERID_CommonStartMenuPlaces = &KNOWNFOLDERID{0xa440879f, 0x87a0, 0x4f7d, [8]byte{0xb7, 0x00, 0x02, 0x07, 0xb9, 0x66, 0x19, 0x4a}} + FOLDERID_ApplicationShortcuts = &KNOWNFOLDERID{0xa3918781, 0xe5f2, 0x4890, [8]byte{0xb3, 0xd9, 0xa7, 0xe5, 0x43, 0x32, 0x32, 0x8c}} + FOLDERID_RoamingTiles = &KNOWNFOLDERID{0x00bcfc5a, 0xed94, 0x4e48, [8]byte{0x96, 0xa1, 0x3f, 0x62, 0x17, 0xf2, 0x19, 0x90}} + FOLDERID_RoamedTileImages = &KNOWNFOLDERID{0xaaa8d5a5, 0xf1d6, 0x4259, [8]byte{0xba, 0xa8, 0x78, 0xe7, 0xef, 0x60, 0x83, 0x5e}} + FOLDERID_Screenshots = &KNOWNFOLDERID{0xb7bede81, 0xdf94, 0x4682, [8]byte{0xa7, 0xd8, 0x57, 0xa5, 0x26, 0x20, 0xb8, 0x6f}} + FOLDERID_CameraRoll = &KNOWNFOLDERID{0xab5fb87b, 0x7ce2, 0x4f83, [8]byte{0x91, 0x5d, 0x55, 0x08, 0x46, 0xc9, 0x53, 0x7b}} + FOLDERID_SkyDrive = &KNOWNFOLDERID{0xa52bba46, 0xe9e1, 0x435f, [8]byte{0xb3, 0xd9, 0x28, 0xda, 0xa6, 0x48, 0xc0, 0xf6}} + FOLDERID_OneDrive = &KNOWNFOLDERID{0xa52bba46, 0xe9e1, 0x435f, [8]byte{0xb3, 0xd9, 0x28, 0xda, 0xa6, 0x48, 0xc0, 0xf6}} + FOLDERID_SkyDriveDocuments = &KNOWNFOLDERID{0x24d89e24, 0x2f19, 0x4534, [8]byte{0x9d, 0xde, 0x6a, 0x66, 0x71, 0xfb, 0xb8, 0xfe}} + FOLDERID_SkyDrivePictures = &KNOWNFOLDERID{0x339719b5, 0x8c47, 0x4894, [8]byte{0x94, 0xc2, 0xd8, 0xf7, 0x7a, 0xdd, 0x44, 0xa6}} + FOLDERID_SkyDriveMusic = &KNOWNFOLDERID{0xc3f2459e, 0x80d6, 0x45dc, [8]byte{0xbf, 0xef, 0x1f, 0x76, 0x9f, 0x2b, 0xe7, 0x30}} + FOLDERID_SkyDriveCameraRoll = &KNOWNFOLDERID{0x767e6811, 0x49cb, 0x4273, [8]byte{0x87, 0xc2, 0x20, 0xf3, 0x55, 0xe1, 0x08, 0x5b}} + FOLDERID_SearchHistory = &KNOWNFOLDERID{0x0d4c3db6, 0x03a3, 0x462f, [8]byte{0xa0, 0xe6, 0x08, 0x92, 0x4c, 0x41, 0xb5, 0xd4}} + FOLDERID_SearchTemplates = &KNOWNFOLDERID{0x7e636bfe, 0xdfa9, 0x4d5e, [8]byte{0xb4, 0x56, 0xd7, 0xb3, 0x98, 0x51, 0xd8, 0xa9}} + FOLDERID_CameraRollLibrary = &KNOWNFOLDERID{0x2b20df75, 0x1eda, 0x4039, [8]byte{0x80, 0x97, 0x38, 0x79, 0x82, 0x27, 0xd5, 0xb7}} + FOLDERID_SavedPictures = &KNOWNFOLDERID{0x3b193882, 0xd3ad, 0x4eab, [8]byte{0x96, 0x5a, 0x69, 0x82, 0x9d, 0x1f, 0xb5, 0x9f}} + FOLDERID_SavedPicturesLibrary = &KNOWNFOLDERID{0xe25b5812, 0xbe88, 0x4bd9, [8]byte{0x94, 0xb0, 0x29, 0x23, 0x34, 0x77, 0xb6, 0xc3}} + FOLDERID_RetailDemo = &KNOWNFOLDERID{0x12d4c69e, 0x24ad, 0x4923, [8]byte{0xbe, 0x19, 0x31, 0x32, 0x1c, 0x43, 0xa7, 0x67}} + FOLDERID_Device = &KNOWNFOLDERID{0x1c2ac1dc, 0x4358, 0x4b6c, [8]byte{0x97, 0x33, 0xaf, 0x21, 0x15, 0x65, 0x76, 0xf0}} + FOLDERID_DevelopmentFiles = &KNOWNFOLDERID{0xdbe8e08e, 0x3053, 0x4bbc, [8]byte{0xb1, 0x83, 0x2a, 0x7b, 0x2b, 0x19, 0x1e, 0x59}} + FOLDERID_Objects3D = &KNOWNFOLDERID{0x31c0dd25, 0x9439, 0x4f12, [8]byte{0xbf, 0x41, 0x7f, 0xf4, 0xed, 0xa3, 0x87, 0x22}} + FOLDERID_AppCaptures = &KNOWNFOLDERID{0xedc0fe71, 0x98d8, 0x4f4a, [8]byte{0xb9, 0x20, 0xc8, 0xdc, 0x13, 0x3c, 0xb1, 0x65}} + FOLDERID_LocalDocuments = &KNOWNFOLDERID{0xf42ee2d3, 0x909f, 0x4907, [8]byte{0x88, 0x71, 0x4c, 0x22, 0xfc, 0x0b, 0xf7, 0x56}} + FOLDERID_LocalPictures = &KNOWNFOLDERID{0x0ddd015d, 0xb06c, 0x45d5, [8]byte{0x8c, 0x4c, 0xf5, 0x97, 0x13, 0x85, 0x46, 0x39}} + FOLDERID_LocalVideos = &KNOWNFOLDERID{0x35286a68, 0x3c57, 0x41a1, [8]byte{0xbb, 0xb1, 0x0e, 0xae, 0x73, 0xd7, 0x6c, 0x95}} + FOLDERID_LocalMusic = &KNOWNFOLDERID{0xa0c69a99, 0x21c8, 0x4671, [8]byte{0x87, 0x03, 0x79, 0x34, 0x16, 0x2f, 0xcf, 0x1d}} + FOLDERID_LocalDownloads = &KNOWNFOLDERID{0x7d83ee9b, 0x2244, 0x4e70, [8]byte{0xb1, 0xf5, 0x53, 0x93, 0x04, 0x2a, 0xf1, 0xe4}} + FOLDERID_RecordedCalls = &KNOWNFOLDERID{0x2f8b40c2, 0x83ed, 0x48ee, [8]byte{0xb3, 0x83, 0xa1, 0xf1, 0x57, 0xec, 0x6f, 0x9a}} + FOLDERID_AllAppMods = &KNOWNFOLDERID{0x7ad67899, 0x66af, 0x43ba, [8]byte{0x91, 0x56, 0x6a, 0xad, 0x42, 0xe6, 0xc5, 0x96}} + FOLDERID_CurrentAppMods = &KNOWNFOLDERID{0x3db40b20, 0x2a30, 0x4dbe, [8]byte{0x91, 0x7e, 0x77, 0x1d, 0xd2, 0x1d, 0xd0, 0x99}} + FOLDERID_AppDataDesktop = &KNOWNFOLDERID{0xb2c5e279, 0x7add, 0x439f, [8]byte{0xb2, 0x8c, 0xc4, 0x1f, 0xe1, 0xbb, 0xf6, 0x72}} + FOLDERID_AppDataDocuments = &KNOWNFOLDERID{0x7be16610, 0x1f7f, 0x44ac, [8]byte{0xbf, 0xf0, 0x83, 0xe1, 0x5f, 0x2f, 0xfc, 0xa1}} + FOLDERID_AppDataFavorites = &KNOWNFOLDERID{0x7cfbefbc, 0xde1f, 0x45aa, [8]byte{0xb8, 0x43, 0xa5, 0x42, 0xac, 0x53, 0x6c, 0xc9}} + FOLDERID_AppDataProgramData = &KNOWNFOLDERID{0x559d40a3, 0xa036, 0x40fa, [8]byte{0xaf, 0x61, 0x84, 0xcb, 0x43, 0x0a, 0x4d, 0x34}} +) diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go new file mode 100644 index 0000000..a58bc48 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -0,0 +1,4695 @@ +// Code generated by 'go generate'; DO NOT EDIT. + +package windows + +import ( + "syscall" + "unsafe" +) + +var _ unsafe.Pointer + +// Do the interface allocations only once for common +// Errno values. +const ( + errnoERROR_IO_PENDING = 997 +) + +var ( + errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) + errERROR_EINVAL error = syscall.EINVAL +) + +// errnoErr returns common boxed Errno values, to prevent +// allocations at runtime. +func errnoErr(e syscall.Errno) error { + switch e { + case 0: + return errERROR_EINVAL + case errnoERROR_IO_PENDING: + return errERROR_IO_PENDING + } + // TODO: add more here, after collecting data on the common + // error values see on Windows. (perhaps when running + // all.bat?) + return e +} + +var ( + modCfgMgr32 = NewLazySystemDLL("CfgMgr32.dll") + modadvapi32 = NewLazySystemDLL("advapi32.dll") + modcrypt32 = NewLazySystemDLL("crypt32.dll") + moddnsapi = NewLazySystemDLL("dnsapi.dll") + moddwmapi = NewLazySystemDLL("dwmapi.dll") + modiphlpapi = NewLazySystemDLL("iphlpapi.dll") + modkernel32 = NewLazySystemDLL("kernel32.dll") + modmswsock = NewLazySystemDLL("mswsock.dll") + modnetapi32 = NewLazySystemDLL("netapi32.dll") + modntdll = NewLazySystemDLL("ntdll.dll") + modole32 = NewLazySystemDLL("ole32.dll") + modpsapi = NewLazySystemDLL("psapi.dll") + modsechost = NewLazySystemDLL("sechost.dll") + modsecur32 = NewLazySystemDLL("secur32.dll") + modsetupapi = NewLazySystemDLL("setupapi.dll") + modshell32 = NewLazySystemDLL("shell32.dll") + moduser32 = NewLazySystemDLL("user32.dll") + moduserenv = NewLazySystemDLL("userenv.dll") + modversion = NewLazySystemDLL("version.dll") + modwinmm = NewLazySystemDLL("winmm.dll") + modwintrust = NewLazySystemDLL("wintrust.dll") + modws2_32 = NewLazySystemDLL("ws2_32.dll") + modwtsapi32 = NewLazySystemDLL("wtsapi32.dll") + + procCM_Get_DevNode_Status = modCfgMgr32.NewProc("CM_Get_DevNode_Status") + procCM_Get_Device_Interface_ListW = modCfgMgr32.NewProc("CM_Get_Device_Interface_ListW") + procCM_Get_Device_Interface_List_SizeW = modCfgMgr32.NewProc("CM_Get_Device_Interface_List_SizeW") + procCM_MapCrToWin32Err = modCfgMgr32.NewProc("CM_MapCrToWin32Err") + procAdjustTokenGroups = modadvapi32.NewProc("AdjustTokenGroups") + procAdjustTokenPrivileges = modadvapi32.NewProc("AdjustTokenPrivileges") + procAllocateAndInitializeSid = modadvapi32.NewProc("AllocateAndInitializeSid") + procBuildSecurityDescriptorW = modadvapi32.NewProc("BuildSecurityDescriptorW") + procChangeServiceConfig2W = modadvapi32.NewProc("ChangeServiceConfig2W") + procChangeServiceConfigW = modadvapi32.NewProc("ChangeServiceConfigW") + procCheckTokenMembership = modadvapi32.NewProc("CheckTokenMembership") + procCloseServiceHandle = modadvapi32.NewProc("CloseServiceHandle") + procControlService = modadvapi32.NewProc("ControlService") + procConvertSecurityDescriptorToStringSecurityDescriptorW = modadvapi32.NewProc("ConvertSecurityDescriptorToStringSecurityDescriptorW") + procConvertSidToStringSidW = modadvapi32.NewProc("ConvertSidToStringSidW") + procConvertStringSecurityDescriptorToSecurityDescriptorW = modadvapi32.NewProc("ConvertStringSecurityDescriptorToSecurityDescriptorW") + procConvertStringSidToSidW = modadvapi32.NewProc("ConvertStringSidToSidW") + procCopySid = modadvapi32.NewProc("CopySid") + procCreateProcessAsUserW = modadvapi32.NewProc("CreateProcessAsUserW") + procCreateServiceW = modadvapi32.NewProc("CreateServiceW") + procCreateWellKnownSid = modadvapi32.NewProc("CreateWellKnownSid") + procCryptAcquireContextW = modadvapi32.NewProc("CryptAcquireContextW") + procCryptGenRandom = modadvapi32.NewProc("CryptGenRandom") + procCryptReleaseContext = modadvapi32.NewProc("CryptReleaseContext") + procDeleteService = modadvapi32.NewProc("DeleteService") + procDeregisterEventSource = modadvapi32.NewProc("DeregisterEventSource") + procDuplicateTokenEx = modadvapi32.NewProc("DuplicateTokenEx") + procEnumDependentServicesW = modadvapi32.NewProc("EnumDependentServicesW") + procEnumServicesStatusExW = modadvapi32.NewProc("EnumServicesStatusExW") + procEqualSid = modadvapi32.NewProc("EqualSid") + procFreeSid = modadvapi32.NewProc("FreeSid") + procGetAce = modadvapi32.NewProc("GetAce") + procGetLengthSid = modadvapi32.NewProc("GetLengthSid") + procGetNamedSecurityInfoW = modadvapi32.NewProc("GetNamedSecurityInfoW") + procGetSecurityDescriptorControl = modadvapi32.NewProc("GetSecurityDescriptorControl") + procGetSecurityDescriptorDacl = modadvapi32.NewProc("GetSecurityDescriptorDacl") + procGetSecurityDescriptorGroup = modadvapi32.NewProc("GetSecurityDescriptorGroup") + procGetSecurityDescriptorLength = modadvapi32.NewProc("GetSecurityDescriptorLength") + procGetSecurityDescriptorOwner = modadvapi32.NewProc("GetSecurityDescriptorOwner") + procGetSecurityDescriptorRMControl = modadvapi32.NewProc("GetSecurityDescriptorRMControl") + procGetSecurityDescriptorSacl = modadvapi32.NewProc("GetSecurityDescriptorSacl") + procGetSecurityInfo = modadvapi32.NewProc("GetSecurityInfo") + procGetSidIdentifierAuthority = modadvapi32.NewProc("GetSidIdentifierAuthority") + procGetSidSubAuthority = modadvapi32.NewProc("GetSidSubAuthority") + procGetSidSubAuthorityCount = modadvapi32.NewProc("GetSidSubAuthorityCount") + procGetTokenInformation = modadvapi32.NewProc("GetTokenInformation") + procImpersonateSelf = modadvapi32.NewProc("ImpersonateSelf") + procInitializeSecurityDescriptor = modadvapi32.NewProc("InitializeSecurityDescriptor") + procInitiateSystemShutdownExW = modadvapi32.NewProc("InitiateSystemShutdownExW") + procIsTokenRestricted = modadvapi32.NewProc("IsTokenRestricted") + procIsValidSecurityDescriptor = modadvapi32.NewProc("IsValidSecurityDescriptor") + procIsValidSid = modadvapi32.NewProc("IsValidSid") + procIsWellKnownSid = modadvapi32.NewProc("IsWellKnownSid") + procLookupAccountNameW = modadvapi32.NewProc("LookupAccountNameW") + procLookupAccountSidW = modadvapi32.NewProc("LookupAccountSidW") + procLookupPrivilegeValueW = modadvapi32.NewProc("LookupPrivilegeValueW") + procMakeAbsoluteSD = modadvapi32.NewProc("MakeAbsoluteSD") + procMakeSelfRelativeSD = modadvapi32.NewProc("MakeSelfRelativeSD") + procNotifyServiceStatusChangeW = modadvapi32.NewProc("NotifyServiceStatusChangeW") + procOpenProcessToken = modadvapi32.NewProc("OpenProcessToken") + procOpenSCManagerW = modadvapi32.NewProc("OpenSCManagerW") + procOpenServiceW = modadvapi32.NewProc("OpenServiceW") + procOpenThreadToken = modadvapi32.NewProc("OpenThreadToken") + procQueryServiceConfig2W = modadvapi32.NewProc("QueryServiceConfig2W") + procQueryServiceConfigW = modadvapi32.NewProc("QueryServiceConfigW") + procQueryServiceDynamicInformation = modadvapi32.NewProc("QueryServiceDynamicInformation") + procQueryServiceLockStatusW = modadvapi32.NewProc("QueryServiceLockStatusW") + procQueryServiceStatus = modadvapi32.NewProc("QueryServiceStatus") + procQueryServiceStatusEx = modadvapi32.NewProc("QueryServiceStatusEx") + procRegCloseKey = modadvapi32.NewProc("RegCloseKey") + procRegEnumKeyExW = modadvapi32.NewProc("RegEnumKeyExW") + procRegNotifyChangeKeyValue = modadvapi32.NewProc("RegNotifyChangeKeyValue") + procRegOpenKeyExW = modadvapi32.NewProc("RegOpenKeyExW") + procRegQueryInfoKeyW = modadvapi32.NewProc("RegQueryInfoKeyW") + procRegQueryValueExW = modadvapi32.NewProc("RegQueryValueExW") + procRegisterEventSourceW = modadvapi32.NewProc("RegisterEventSourceW") + procRegisterServiceCtrlHandlerExW = modadvapi32.NewProc("RegisterServiceCtrlHandlerExW") + procReportEventW = modadvapi32.NewProc("ReportEventW") + procRevertToSelf = modadvapi32.NewProc("RevertToSelf") + procSetEntriesInAclW = modadvapi32.NewProc("SetEntriesInAclW") + procSetKernelObjectSecurity = modadvapi32.NewProc("SetKernelObjectSecurity") + procSetNamedSecurityInfoW = modadvapi32.NewProc("SetNamedSecurityInfoW") + procSetSecurityDescriptorControl = modadvapi32.NewProc("SetSecurityDescriptorControl") + procSetSecurityDescriptorDacl = modadvapi32.NewProc("SetSecurityDescriptorDacl") + procSetSecurityDescriptorGroup = modadvapi32.NewProc("SetSecurityDescriptorGroup") + procSetSecurityDescriptorOwner = modadvapi32.NewProc("SetSecurityDescriptorOwner") + procSetSecurityDescriptorRMControl = modadvapi32.NewProc("SetSecurityDescriptorRMControl") + procSetSecurityDescriptorSacl = modadvapi32.NewProc("SetSecurityDescriptorSacl") + procSetSecurityInfo = modadvapi32.NewProc("SetSecurityInfo") + procSetServiceStatus = modadvapi32.NewProc("SetServiceStatus") + procSetThreadToken = modadvapi32.NewProc("SetThreadToken") + procSetTokenInformation = modadvapi32.NewProc("SetTokenInformation") + procStartServiceCtrlDispatcherW = modadvapi32.NewProc("StartServiceCtrlDispatcherW") + procStartServiceW = modadvapi32.NewProc("StartServiceW") + procCertAddCertificateContextToStore = modcrypt32.NewProc("CertAddCertificateContextToStore") + procCertCloseStore = modcrypt32.NewProc("CertCloseStore") + procCertCreateCertificateContext = modcrypt32.NewProc("CertCreateCertificateContext") + procCertDeleteCertificateFromStore = modcrypt32.NewProc("CertDeleteCertificateFromStore") + procCertDuplicateCertificateContext = modcrypt32.NewProc("CertDuplicateCertificateContext") + procCertEnumCertificatesInStore = modcrypt32.NewProc("CertEnumCertificatesInStore") + procCertFindCertificateInStore = modcrypt32.NewProc("CertFindCertificateInStore") + procCertFindChainInStore = modcrypt32.NewProc("CertFindChainInStore") + procCertFindExtension = modcrypt32.NewProc("CertFindExtension") + procCertFreeCertificateChain = modcrypt32.NewProc("CertFreeCertificateChain") + procCertFreeCertificateContext = modcrypt32.NewProc("CertFreeCertificateContext") + procCertGetCertificateChain = modcrypt32.NewProc("CertGetCertificateChain") + procCertGetNameStringW = modcrypt32.NewProc("CertGetNameStringW") + procCertOpenStore = modcrypt32.NewProc("CertOpenStore") + procCertOpenSystemStoreW = modcrypt32.NewProc("CertOpenSystemStoreW") + procCertVerifyCertificateChainPolicy = modcrypt32.NewProc("CertVerifyCertificateChainPolicy") + procCryptAcquireCertificatePrivateKey = modcrypt32.NewProc("CryptAcquireCertificatePrivateKey") + procCryptDecodeObject = modcrypt32.NewProc("CryptDecodeObject") + procCryptProtectData = modcrypt32.NewProc("CryptProtectData") + procCryptQueryObject = modcrypt32.NewProc("CryptQueryObject") + procCryptUnprotectData = modcrypt32.NewProc("CryptUnprotectData") + procPFXImportCertStore = modcrypt32.NewProc("PFXImportCertStore") + procDnsNameCompare_W = moddnsapi.NewProc("DnsNameCompare_W") + procDnsQuery_W = moddnsapi.NewProc("DnsQuery_W") + procDnsRecordListFree = moddnsapi.NewProc("DnsRecordListFree") + procDwmGetWindowAttribute = moddwmapi.NewProc("DwmGetWindowAttribute") + procDwmSetWindowAttribute = moddwmapi.NewProc("DwmSetWindowAttribute") + procCancelMibChangeNotify2 = modiphlpapi.NewProc("CancelMibChangeNotify2") + procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses") + procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo") + procGetBestInterfaceEx = modiphlpapi.NewProc("GetBestInterfaceEx") + procGetIfEntry = modiphlpapi.NewProc("GetIfEntry") + procGetIfEntry2Ex = modiphlpapi.NewProc("GetIfEntry2Ex") + procGetUnicastIpAddressEntry = modiphlpapi.NewProc("GetUnicastIpAddressEntry") + procNotifyIpInterfaceChange = modiphlpapi.NewProc("NotifyIpInterfaceChange") + procNotifyUnicastIpAddressChange = modiphlpapi.NewProc("NotifyUnicastIpAddressChange") + procAddDllDirectory = modkernel32.NewProc("AddDllDirectory") + procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject") + procCancelIo = modkernel32.NewProc("CancelIo") + procCancelIoEx = modkernel32.NewProc("CancelIoEx") + procClearCommBreak = modkernel32.NewProc("ClearCommBreak") + procClearCommError = modkernel32.NewProc("ClearCommError") + procCloseHandle = modkernel32.NewProc("CloseHandle") + procClosePseudoConsole = modkernel32.NewProc("ClosePseudoConsole") + procConnectNamedPipe = modkernel32.NewProc("ConnectNamedPipe") + procCreateDirectoryW = modkernel32.NewProc("CreateDirectoryW") + procCreateEventExW = modkernel32.NewProc("CreateEventExW") + procCreateEventW = modkernel32.NewProc("CreateEventW") + procCreateFileMappingW = modkernel32.NewProc("CreateFileMappingW") + procCreateFileW = modkernel32.NewProc("CreateFileW") + procCreateHardLinkW = modkernel32.NewProc("CreateHardLinkW") + procCreateIoCompletionPort = modkernel32.NewProc("CreateIoCompletionPort") + procCreateJobObjectW = modkernel32.NewProc("CreateJobObjectW") + procCreateMutexExW = modkernel32.NewProc("CreateMutexExW") + procCreateMutexW = modkernel32.NewProc("CreateMutexW") + procCreateNamedPipeW = modkernel32.NewProc("CreateNamedPipeW") + procCreatePipe = modkernel32.NewProc("CreatePipe") + procCreateProcessW = modkernel32.NewProc("CreateProcessW") + procCreatePseudoConsole = modkernel32.NewProc("CreatePseudoConsole") + procCreateSymbolicLinkW = modkernel32.NewProc("CreateSymbolicLinkW") + procCreateToolhelp32Snapshot = modkernel32.NewProc("CreateToolhelp32Snapshot") + procDefineDosDeviceW = modkernel32.NewProc("DefineDosDeviceW") + procDeleteFileW = modkernel32.NewProc("DeleteFileW") + procDeleteProcThreadAttributeList = modkernel32.NewProc("DeleteProcThreadAttributeList") + procDeleteVolumeMountPointW = modkernel32.NewProc("DeleteVolumeMountPointW") + procDeviceIoControl = modkernel32.NewProc("DeviceIoControl") + procDisconnectNamedPipe = modkernel32.NewProc("DisconnectNamedPipe") + procDuplicateHandle = modkernel32.NewProc("DuplicateHandle") + procEscapeCommFunction = modkernel32.NewProc("EscapeCommFunction") + procExitProcess = modkernel32.NewProc("ExitProcess") + procExpandEnvironmentStringsW = modkernel32.NewProc("ExpandEnvironmentStringsW") + procFindClose = modkernel32.NewProc("FindClose") + procFindCloseChangeNotification = modkernel32.NewProc("FindCloseChangeNotification") + procFindFirstChangeNotificationW = modkernel32.NewProc("FindFirstChangeNotificationW") + procFindFirstFileW = modkernel32.NewProc("FindFirstFileW") + procFindFirstVolumeMountPointW = modkernel32.NewProc("FindFirstVolumeMountPointW") + procFindFirstVolumeW = modkernel32.NewProc("FindFirstVolumeW") + procFindNextChangeNotification = modkernel32.NewProc("FindNextChangeNotification") + procFindNextFileW = modkernel32.NewProc("FindNextFileW") + procFindNextVolumeMountPointW = modkernel32.NewProc("FindNextVolumeMountPointW") + procFindNextVolumeW = modkernel32.NewProc("FindNextVolumeW") + procFindResourceW = modkernel32.NewProc("FindResourceW") + procFindVolumeClose = modkernel32.NewProc("FindVolumeClose") + procFindVolumeMountPointClose = modkernel32.NewProc("FindVolumeMountPointClose") + procFlushFileBuffers = modkernel32.NewProc("FlushFileBuffers") + procFlushViewOfFile = modkernel32.NewProc("FlushViewOfFile") + procFormatMessageW = modkernel32.NewProc("FormatMessageW") + procFreeEnvironmentStringsW = modkernel32.NewProc("FreeEnvironmentStringsW") + procFreeLibrary = modkernel32.NewProc("FreeLibrary") + procGenerateConsoleCtrlEvent = modkernel32.NewProc("GenerateConsoleCtrlEvent") + procGetACP = modkernel32.NewProc("GetACP") + procGetActiveProcessorCount = modkernel32.NewProc("GetActiveProcessorCount") + procGetCommModemStatus = modkernel32.NewProc("GetCommModemStatus") + procGetCommState = modkernel32.NewProc("GetCommState") + procGetCommTimeouts = modkernel32.NewProc("GetCommTimeouts") + procGetCommandLineW = modkernel32.NewProc("GetCommandLineW") + procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW") + procGetComputerNameW = modkernel32.NewProc("GetComputerNameW") + procGetConsoleCP = modkernel32.NewProc("GetConsoleCP") + procGetConsoleMode = modkernel32.NewProc("GetConsoleMode") + procGetConsoleOutputCP = modkernel32.NewProc("GetConsoleOutputCP") + procGetConsoleScreenBufferInfo = modkernel32.NewProc("GetConsoleScreenBufferInfo") + procGetCurrentDirectoryW = modkernel32.NewProc("GetCurrentDirectoryW") + procGetCurrentProcessId = modkernel32.NewProc("GetCurrentProcessId") + procGetCurrentThreadId = modkernel32.NewProc("GetCurrentThreadId") + procGetDiskFreeSpaceExW = modkernel32.NewProc("GetDiskFreeSpaceExW") + procGetDriveTypeW = modkernel32.NewProc("GetDriveTypeW") + procGetEnvironmentStringsW = modkernel32.NewProc("GetEnvironmentStringsW") + procGetEnvironmentVariableW = modkernel32.NewProc("GetEnvironmentVariableW") + procGetExitCodeProcess = modkernel32.NewProc("GetExitCodeProcess") + procGetFileAttributesExW = modkernel32.NewProc("GetFileAttributesExW") + procGetFileAttributesW = modkernel32.NewProc("GetFileAttributesW") + procGetFileInformationByHandle = modkernel32.NewProc("GetFileInformationByHandle") + procGetFileInformationByHandleEx = modkernel32.NewProc("GetFileInformationByHandleEx") + procGetFileTime = modkernel32.NewProc("GetFileTime") + procGetFileType = modkernel32.NewProc("GetFileType") + procGetFinalPathNameByHandleW = modkernel32.NewProc("GetFinalPathNameByHandleW") + procGetFullPathNameW = modkernel32.NewProc("GetFullPathNameW") + procGetLargePageMinimum = modkernel32.NewProc("GetLargePageMinimum") + procGetLastError = modkernel32.NewProc("GetLastError") + procGetLogicalDriveStringsW = modkernel32.NewProc("GetLogicalDriveStringsW") + procGetLogicalDrives = modkernel32.NewProc("GetLogicalDrives") + procGetLongPathNameW = modkernel32.NewProc("GetLongPathNameW") + procGetMaximumProcessorCount = modkernel32.NewProc("GetMaximumProcessorCount") + procGetModuleFileNameW = modkernel32.NewProc("GetModuleFileNameW") + procGetModuleHandleExW = modkernel32.NewProc("GetModuleHandleExW") + procGetNamedPipeClientProcessId = modkernel32.NewProc("GetNamedPipeClientProcessId") + procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW") + procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo") + procGetNamedPipeServerProcessId = modkernel32.NewProc("GetNamedPipeServerProcessId") + procGetOverlappedResult = modkernel32.NewProc("GetOverlappedResult") + procGetPriorityClass = modkernel32.NewProc("GetPriorityClass") + procGetProcAddress = modkernel32.NewProc("GetProcAddress") + procGetProcessId = modkernel32.NewProc("GetProcessId") + procGetProcessPreferredUILanguages = modkernel32.NewProc("GetProcessPreferredUILanguages") + procGetProcessShutdownParameters = modkernel32.NewProc("GetProcessShutdownParameters") + procGetProcessTimes = modkernel32.NewProc("GetProcessTimes") + procGetProcessWorkingSetSizeEx = modkernel32.NewProc("GetProcessWorkingSetSizeEx") + procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus") + procGetShortPathNameW = modkernel32.NewProc("GetShortPathNameW") + procGetStartupInfoW = modkernel32.NewProc("GetStartupInfoW") + procGetStdHandle = modkernel32.NewProc("GetStdHandle") + procGetSystemDirectoryW = modkernel32.NewProc("GetSystemDirectoryW") + procGetSystemPreferredUILanguages = modkernel32.NewProc("GetSystemPreferredUILanguages") + procGetSystemTimeAsFileTime = modkernel32.NewProc("GetSystemTimeAsFileTime") + procGetSystemTimePreciseAsFileTime = modkernel32.NewProc("GetSystemTimePreciseAsFileTime") + procGetSystemWindowsDirectoryW = modkernel32.NewProc("GetSystemWindowsDirectoryW") + procGetTempPathW = modkernel32.NewProc("GetTempPathW") + procGetThreadPreferredUILanguages = modkernel32.NewProc("GetThreadPreferredUILanguages") + procGetTickCount64 = modkernel32.NewProc("GetTickCount64") + procGetTimeZoneInformation = modkernel32.NewProc("GetTimeZoneInformation") + procGetUserPreferredUILanguages = modkernel32.NewProc("GetUserPreferredUILanguages") + procGetVersion = modkernel32.NewProc("GetVersion") + procGetVolumeInformationByHandleW = modkernel32.NewProc("GetVolumeInformationByHandleW") + procGetVolumeInformationW = modkernel32.NewProc("GetVolumeInformationW") + procGetVolumeNameForVolumeMountPointW = modkernel32.NewProc("GetVolumeNameForVolumeMountPointW") + procGetVolumePathNameW = modkernel32.NewProc("GetVolumePathNameW") + procGetVolumePathNamesForVolumeNameW = modkernel32.NewProc("GetVolumePathNamesForVolumeNameW") + procGetWindowsDirectoryW = modkernel32.NewProc("GetWindowsDirectoryW") + procInitializeProcThreadAttributeList = modkernel32.NewProc("InitializeProcThreadAttributeList") + procIsWow64Process = modkernel32.NewProc("IsWow64Process") + procIsWow64Process2 = modkernel32.NewProc("IsWow64Process2") + procLoadLibraryExW = modkernel32.NewProc("LoadLibraryExW") + procLoadLibraryW = modkernel32.NewProc("LoadLibraryW") + procLoadResource = modkernel32.NewProc("LoadResource") + procLocalAlloc = modkernel32.NewProc("LocalAlloc") + procLocalFree = modkernel32.NewProc("LocalFree") + procLockFileEx = modkernel32.NewProc("LockFileEx") + procLockResource = modkernel32.NewProc("LockResource") + procMapViewOfFile = modkernel32.NewProc("MapViewOfFile") + procModule32FirstW = modkernel32.NewProc("Module32FirstW") + procModule32NextW = modkernel32.NewProc("Module32NextW") + procMoveFileExW = modkernel32.NewProc("MoveFileExW") + procMoveFileW = modkernel32.NewProc("MoveFileW") + procMultiByteToWideChar = modkernel32.NewProc("MultiByteToWideChar") + procOpenEventW = modkernel32.NewProc("OpenEventW") + procOpenMutexW = modkernel32.NewProc("OpenMutexW") + procOpenProcess = modkernel32.NewProc("OpenProcess") + procOpenThread = modkernel32.NewProc("OpenThread") + procPostQueuedCompletionStatus = modkernel32.NewProc("PostQueuedCompletionStatus") + procProcess32FirstW = modkernel32.NewProc("Process32FirstW") + procProcess32NextW = modkernel32.NewProc("Process32NextW") + procProcessIdToSessionId = modkernel32.NewProc("ProcessIdToSessionId") + procPulseEvent = modkernel32.NewProc("PulseEvent") + procPurgeComm = modkernel32.NewProc("PurgeComm") + procQueryDosDeviceW = modkernel32.NewProc("QueryDosDeviceW") + procQueryFullProcessImageNameW = modkernel32.NewProc("QueryFullProcessImageNameW") + procQueryInformationJobObject = modkernel32.NewProc("QueryInformationJobObject") + procReadConsoleW = modkernel32.NewProc("ReadConsoleW") + procReadDirectoryChangesW = modkernel32.NewProc("ReadDirectoryChangesW") + procReadFile = modkernel32.NewProc("ReadFile") + procReadProcessMemory = modkernel32.NewProc("ReadProcessMemory") + procReleaseMutex = modkernel32.NewProc("ReleaseMutex") + procRemoveDirectoryW = modkernel32.NewProc("RemoveDirectoryW") + procRemoveDllDirectory = modkernel32.NewProc("RemoveDllDirectory") + procResetEvent = modkernel32.NewProc("ResetEvent") + procResizePseudoConsole = modkernel32.NewProc("ResizePseudoConsole") + procResumeThread = modkernel32.NewProc("ResumeThread") + procSetCommBreak = modkernel32.NewProc("SetCommBreak") + procSetCommMask = modkernel32.NewProc("SetCommMask") + procSetCommState = modkernel32.NewProc("SetCommState") + procSetCommTimeouts = modkernel32.NewProc("SetCommTimeouts") + procSetConsoleCP = modkernel32.NewProc("SetConsoleCP") + procSetConsoleCursorPosition = modkernel32.NewProc("SetConsoleCursorPosition") + procSetConsoleMode = modkernel32.NewProc("SetConsoleMode") + procSetConsoleOutputCP = modkernel32.NewProc("SetConsoleOutputCP") + procSetCurrentDirectoryW = modkernel32.NewProc("SetCurrentDirectoryW") + procSetDefaultDllDirectories = modkernel32.NewProc("SetDefaultDllDirectories") + procSetDllDirectoryW = modkernel32.NewProc("SetDllDirectoryW") + procSetEndOfFile = modkernel32.NewProc("SetEndOfFile") + procSetEnvironmentVariableW = modkernel32.NewProc("SetEnvironmentVariableW") + procSetErrorMode = modkernel32.NewProc("SetErrorMode") + procSetEvent = modkernel32.NewProc("SetEvent") + procSetFileAttributesW = modkernel32.NewProc("SetFileAttributesW") + procSetFileCompletionNotificationModes = modkernel32.NewProc("SetFileCompletionNotificationModes") + procSetFileInformationByHandle = modkernel32.NewProc("SetFileInformationByHandle") + procSetFilePointer = modkernel32.NewProc("SetFilePointer") + procSetFileTime = modkernel32.NewProc("SetFileTime") + procSetFileValidData = modkernel32.NewProc("SetFileValidData") + procSetHandleInformation = modkernel32.NewProc("SetHandleInformation") + procSetInformationJobObject = modkernel32.NewProc("SetInformationJobObject") + procSetNamedPipeHandleState = modkernel32.NewProc("SetNamedPipeHandleState") + procSetPriorityClass = modkernel32.NewProc("SetPriorityClass") + procSetProcessPriorityBoost = modkernel32.NewProc("SetProcessPriorityBoost") + procSetProcessShutdownParameters = modkernel32.NewProc("SetProcessShutdownParameters") + procSetProcessWorkingSetSizeEx = modkernel32.NewProc("SetProcessWorkingSetSizeEx") + procSetStdHandle = modkernel32.NewProc("SetStdHandle") + procSetVolumeLabelW = modkernel32.NewProc("SetVolumeLabelW") + procSetVolumeMountPointW = modkernel32.NewProc("SetVolumeMountPointW") + procSetupComm = modkernel32.NewProc("SetupComm") + procSizeofResource = modkernel32.NewProc("SizeofResource") + procSleepEx = modkernel32.NewProc("SleepEx") + procTerminateJobObject = modkernel32.NewProc("TerminateJobObject") + procTerminateProcess = modkernel32.NewProc("TerminateProcess") + procThread32First = modkernel32.NewProc("Thread32First") + procThread32Next = modkernel32.NewProc("Thread32Next") + procUnlockFileEx = modkernel32.NewProc("UnlockFileEx") + procUnmapViewOfFile = modkernel32.NewProc("UnmapViewOfFile") + procUpdateProcThreadAttribute = modkernel32.NewProc("UpdateProcThreadAttribute") + procVirtualAlloc = modkernel32.NewProc("VirtualAlloc") + procVirtualFree = modkernel32.NewProc("VirtualFree") + procVirtualLock = modkernel32.NewProc("VirtualLock") + procVirtualProtect = modkernel32.NewProc("VirtualProtect") + procVirtualProtectEx = modkernel32.NewProc("VirtualProtectEx") + procVirtualQuery = modkernel32.NewProc("VirtualQuery") + procVirtualQueryEx = modkernel32.NewProc("VirtualQueryEx") + procVirtualUnlock = modkernel32.NewProc("VirtualUnlock") + procWTSGetActiveConsoleSessionId = modkernel32.NewProc("WTSGetActiveConsoleSessionId") + procWaitCommEvent = modkernel32.NewProc("WaitCommEvent") + procWaitForMultipleObjects = modkernel32.NewProc("WaitForMultipleObjects") + procWaitForSingleObject = modkernel32.NewProc("WaitForSingleObject") + procWriteConsoleW = modkernel32.NewProc("WriteConsoleW") + procWriteFile = modkernel32.NewProc("WriteFile") + procWriteProcessMemory = modkernel32.NewProc("WriteProcessMemory") + procAcceptEx = modmswsock.NewProc("AcceptEx") + procGetAcceptExSockaddrs = modmswsock.NewProc("GetAcceptExSockaddrs") + procTransmitFile = modmswsock.NewProc("TransmitFile") + procNetApiBufferFree = modnetapi32.NewProc("NetApiBufferFree") + procNetGetJoinInformation = modnetapi32.NewProc("NetGetJoinInformation") + procNetUserEnum = modnetapi32.NewProc("NetUserEnum") + procNetUserGetInfo = modnetapi32.NewProc("NetUserGetInfo") + procNtCreateFile = modntdll.NewProc("NtCreateFile") + procNtCreateNamedPipeFile = modntdll.NewProc("NtCreateNamedPipeFile") + procNtQueryInformationProcess = modntdll.NewProc("NtQueryInformationProcess") + procNtQuerySystemInformation = modntdll.NewProc("NtQuerySystemInformation") + procNtSetInformationFile = modntdll.NewProc("NtSetInformationFile") + procNtSetInformationProcess = modntdll.NewProc("NtSetInformationProcess") + procNtSetSystemInformation = modntdll.NewProc("NtSetSystemInformation") + procRtlAddFunctionTable = modntdll.NewProc("RtlAddFunctionTable") + procRtlDefaultNpAcl = modntdll.NewProc("RtlDefaultNpAcl") + procRtlDeleteFunctionTable = modntdll.NewProc("RtlDeleteFunctionTable") + procRtlDosPathNameToNtPathName_U_WithStatus = modntdll.NewProc("RtlDosPathNameToNtPathName_U_WithStatus") + procRtlDosPathNameToRelativeNtPathName_U_WithStatus = modntdll.NewProc("RtlDosPathNameToRelativeNtPathName_U_WithStatus") + procRtlGetCurrentPeb = modntdll.NewProc("RtlGetCurrentPeb") + procRtlGetNtVersionNumbers = modntdll.NewProc("RtlGetNtVersionNumbers") + procRtlGetVersion = modntdll.NewProc("RtlGetVersion") + procRtlInitString = modntdll.NewProc("RtlInitString") + procRtlInitUnicodeString = modntdll.NewProc("RtlInitUnicodeString") + procRtlNtStatusToDosErrorNoTeb = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb") + procCLSIDFromString = modole32.NewProc("CLSIDFromString") + procCoCreateGuid = modole32.NewProc("CoCreateGuid") + procCoGetObject = modole32.NewProc("CoGetObject") + procCoInitializeEx = modole32.NewProc("CoInitializeEx") + procCoTaskMemFree = modole32.NewProc("CoTaskMemFree") + procCoUninitialize = modole32.NewProc("CoUninitialize") + procStringFromGUID2 = modole32.NewProc("StringFromGUID2") + procEnumProcessModules = modpsapi.NewProc("EnumProcessModules") + procEnumProcessModulesEx = modpsapi.NewProc("EnumProcessModulesEx") + procEnumProcesses = modpsapi.NewProc("EnumProcesses") + procGetModuleBaseNameW = modpsapi.NewProc("GetModuleBaseNameW") + procGetModuleFileNameExW = modpsapi.NewProc("GetModuleFileNameExW") + procGetModuleInformation = modpsapi.NewProc("GetModuleInformation") + procQueryWorkingSetEx = modpsapi.NewProc("QueryWorkingSetEx") + procSubscribeServiceChangeNotifications = modsechost.NewProc("SubscribeServiceChangeNotifications") + procUnsubscribeServiceChangeNotifications = modsechost.NewProc("UnsubscribeServiceChangeNotifications") + procGetUserNameExW = modsecur32.NewProc("GetUserNameExW") + procTranslateNameW = modsecur32.NewProc("TranslateNameW") + procSetupDiBuildDriverInfoList = modsetupapi.NewProc("SetupDiBuildDriverInfoList") + procSetupDiCallClassInstaller = modsetupapi.NewProc("SetupDiCallClassInstaller") + procSetupDiCancelDriverInfoSearch = modsetupapi.NewProc("SetupDiCancelDriverInfoSearch") + procSetupDiClassGuidsFromNameExW = modsetupapi.NewProc("SetupDiClassGuidsFromNameExW") + procSetupDiClassNameFromGuidExW = modsetupapi.NewProc("SetupDiClassNameFromGuidExW") + procSetupDiCreateDeviceInfoListExW = modsetupapi.NewProc("SetupDiCreateDeviceInfoListExW") + procSetupDiCreateDeviceInfoW = modsetupapi.NewProc("SetupDiCreateDeviceInfoW") + procSetupDiDestroyDeviceInfoList = modsetupapi.NewProc("SetupDiDestroyDeviceInfoList") + procSetupDiDestroyDriverInfoList = modsetupapi.NewProc("SetupDiDestroyDriverInfoList") + procSetupDiEnumDeviceInfo = modsetupapi.NewProc("SetupDiEnumDeviceInfo") + procSetupDiEnumDriverInfoW = modsetupapi.NewProc("SetupDiEnumDriverInfoW") + procSetupDiGetClassDevsExW = modsetupapi.NewProc("SetupDiGetClassDevsExW") + procSetupDiGetClassInstallParamsW = modsetupapi.NewProc("SetupDiGetClassInstallParamsW") + procSetupDiGetDeviceInfoListDetailW = modsetupapi.NewProc("SetupDiGetDeviceInfoListDetailW") + procSetupDiGetDeviceInstallParamsW = modsetupapi.NewProc("SetupDiGetDeviceInstallParamsW") + procSetupDiGetDeviceInstanceIdW = modsetupapi.NewProc("SetupDiGetDeviceInstanceIdW") + procSetupDiGetDevicePropertyW = modsetupapi.NewProc("SetupDiGetDevicePropertyW") + procSetupDiGetDeviceRegistryPropertyW = modsetupapi.NewProc("SetupDiGetDeviceRegistryPropertyW") + procSetupDiGetDriverInfoDetailW = modsetupapi.NewProc("SetupDiGetDriverInfoDetailW") + procSetupDiGetSelectedDevice = modsetupapi.NewProc("SetupDiGetSelectedDevice") + procSetupDiGetSelectedDriverW = modsetupapi.NewProc("SetupDiGetSelectedDriverW") + procSetupDiOpenDevRegKey = modsetupapi.NewProc("SetupDiOpenDevRegKey") + procSetupDiSetClassInstallParamsW = modsetupapi.NewProc("SetupDiSetClassInstallParamsW") + procSetupDiSetDeviceInstallParamsW = modsetupapi.NewProc("SetupDiSetDeviceInstallParamsW") + procSetupDiSetDeviceRegistryPropertyW = modsetupapi.NewProc("SetupDiSetDeviceRegistryPropertyW") + procSetupDiSetSelectedDevice = modsetupapi.NewProc("SetupDiSetSelectedDevice") + procSetupDiSetSelectedDriverW = modsetupapi.NewProc("SetupDiSetSelectedDriverW") + procSetupUninstallOEMInfW = modsetupapi.NewProc("SetupUninstallOEMInfW") + procCommandLineToArgvW = modshell32.NewProc("CommandLineToArgvW") + procSHGetKnownFolderPath = modshell32.NewProc("SHGetKnownFolderPath") + procShellExecuteW = modshell32.NewProc("ShellExecuteW") + procEnumChildWindows = moduser32.NewProc("EnumChildWindows") + procEnumWindows = moduser32.NewProc("EnumWindows") + procExitWindowsEx = moduser32.NewProc("ExitWindowsEx") + procGetClassNameW = moduser32.NewProc("GetClassNameW") + procGetDesktopWindow = moduser32.NewProc("GetDesktopWindow") + procGetForegroundWindow = moduser32.NewProc("GetForegroundWindow") + procGetGUIThreadInfo = moduser32.NewProc("GetGUIThreadInfo") + procGetKeyboardLayout = moduser32.NewProc("GetKeyboardLayout") + procGetShellWindow = moduser32.NewProc("GetShellWindow") + procGetWindowThreadProcessId = moduser32.NewProc("GetWindowThreadProcessId") + procIsWindow = moduser32.NewProc("IsWindow") + procIsWindowUnicode = moduser32.NewProc("IsWindowUnicode") + procIsWindowVisible = moduser32.NewProc("IsWindowVisible") + procLoadKeyboardLayoutW = moduser32.NewProc("LoadKeyboardLayoutW") + procMessageBoxW = moduser32.NewProc("MessageBoxW") + procToUnicodeEx = moduser32.NewProc("ToUnicodeEx") + procUnloadKeyboardLayout = moduser32.NewProc("UnloadKeyboardLayout") + procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock") + procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock") + procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW") + procGetFileVersionInfoSizeW = modversion.NewProc("GetFileVersionInfoSizeW") + procGetFileVersionInfoW = modversion.NewProc("GetFileVersionInfoW") + procVerQueryValueW = modversion.NewProc("VerQueryValueW") + proctimeBeginPeriod = modwinmm.NewProc("timeBeginPeriod") + proctimeEndPeriod = modwinmm.NewProc("timeEndPeriod") + procWinVerifyTrustEx = modwintrust.NewProc("WinVerifyTrustEx") + procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW") + procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW") + procWSACleanup = modws2_32.NewProc("WSACleanup") + procWSADuplicateSocketW = modws2_32.NewProc("WSADuplicateSocketW") + procWSAEnumProtocolsW = modws2_32.NewProc("WSAEnumProtocolsW") + procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult") + procWSAIoctl = modws2_32.NewProc("WSAIoctl") + procWSALookupServiceBeginW = modws2_32.NewProc("WSALookupServiceBeginW") + procWSALookupServiceEnd = modws2_32.NewProc("WSALookupServiceEnd") + procWSALookupServiceNextW = modws2_32.NewProc("WSALookupServiceNextW") + procWSARecv = modws2_32.NewProc("WSARecv") + procWSARecvFrom = modws2_32.NewProc("WSARecvFrom") + procWSASend = modws2_32.NewProc("WSASend") + procWSASendTo = modws2_32.NewProc("WSASendTo") + procWSASocketW = modws2_32.NewProc("WSASocketW") + procWSAStartup = modws2_32.NewProc("WSAStartup") + procbind = modws2_32.NewProc("bind") + procclosesocket = modws2_32.NewProc("closesocket") + procconnect = modws2_32.NewProc("connect") + procgethostbyname = modws2_32.NewProc("gethostbyname") + procgetpeername = modws2_32.NewProc("getpeername") + procgetprotobyname = modws2_32.NewProc("getprotobyname") + procgetservbyname = modws2_32.NewProc("getservbyname") + procgetsockname = modws2_32.NewProc("getsockname") + procgetsockopt = modws2_32.NewProc("getsockopt") + proclisten = modws2_32.NewProc("listen") + procntohs = modws2_32.NewProc("ntohs") + procrecvfrom = modws2_32.NewProc("recvfrom") + procsendto = modws2_32.NewProc("sendto") + procsetsockopt = modws2_32.NewProc("setsockopt") + procshutdown = modws2_32.NewProc("shutdown") + procsocket = modws2_32.NewProc("socket") + procWTSEnumerateSessionsW = modwtsapi32.NewProc("WTSEnumerateSessionsW") + procWTSFreeMemory = modwtsapi32.NewProc("WTSFreeMemory") + procWTSQueryUserToken = modwtsapi32.NewProc("WTSQueryUserToken") +) + +func cm_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) (ret CONFIGRET) { + r0, _, _ := syscall.Syscall6(procCM_Get_DevNode_Status.Addr(), 4, uintptr(unsafe.Pointer(status)), uintptr(unsafe.Pointer(problemNumber)), uintptr(devInst), uintptr(flags), 0, 0) + ret = CONFIGRET(r0) + return +} + +func cm_Get_Device_Interface_List(interfaceClass *GUID, deviceID *uint16, buffer *uint16, bufferLen uint32, flags uint32) (ret CONFIGRET) { + r0, _, _ := syscall.Syscall6(procCM_Get_Device_Interface_ListW.Addr(), 5, uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(unsafe.Pointer(buffer)), uintptr(bufferLen), uintptr(flags), 0) + ret = CONFIGRET(r0) + return +} + +func cm_Get_Device_Interface_List_Size(len *uint32, interfaceClass *GUID, deviceID *uint16, flags uint32) (ret CONFIGRET) { + r0, _, _ := syscall.Syscall6(procCM_Get_Device_Interface_List_SizeW.Addr(), 4, uintptr(unsafe.Pointer(len)), uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(flags), 0, 0) + ret = CONFIGRET(r0) + return +} + +func cm_MapCrToWin32Err(configRet CONFIGRET, defaultWin32Error Errno) (ret Errno) { + r0, _, _ := syscall.Syscall(procCM_MapCrToWin32Err.Addr(), 2, uintptr(configRet), uintptr(defaultWin32Error), 0) + ret = Errno(r0) + return +} + +func AdjustTokenGroups(token Token, resetToDefault bool, newstate *Tokengroups, buflen uint32, prevstate *Tokengroups, returnlen *uint32) (err error) { + var _p0 uint32 + if resetToDefault { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall6(procAdjustTokenGroups.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func AdjustTokenPrivileges(token Token, disableAllPrivileges bool, newstate *Tokenprivileges, buflen uint32, prevstate *Tokenprivileges, returnlen *uint32) (err error) { + var _p0 uint32 + if disableAllPrivileges { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall6(procAdjustTokenPrivileges.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) { + r1, _, e1 := syscall.Syscall12(procAllocateAndInitializeSid.Addr(), 11, uintptr(unsafe.Pointer(identAuth)), uintptr(subAuth), uintptr(subAuth0), uintptr(subAuth1), uintptr(subAuth2), uintptr(subAuth3), uintptr(subAuth4), uintptr(subAuth5), uintptr(subAuth6), uintptr(subAuth7), uintptr(unsafe.Pointer(sid)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func buildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, countAccessEntries uint32, accessEntries *EXPLICIT_ACCESS, countAuditEntries uint32, auditEntries *EXPLICIT_ACCESS, oldSecurityDescriptor *SECURITY_DESCRIPTOR, sizeNewSecurityDescriptor *uint32, newSecurityDescriptor **SECURITY_DESCRIPTOR) (ret error) { + r0, _, _ := syscall.Syscall9(procBuildSecurityDescriptorW.Addr(), 9, uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(countAccessEntries), uintptr(unsafe.Pointer(accessEntries)), uintptr(countAuditEntries), uintptr(unsafe.Pointer(auditEntries)), uintptr(unsafe.Pointer(oldSecurityDescriptor)), uintptr(unsafe.Pointer(sizeNewSecurityDescriptor)), uintptr(unsafe.Pointer(newSecurityDescriptor))) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) { + r1, _, e1 := syscall.Syscall(procChangeServiceConfig2W.Addr(), 3, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(info))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) { + r1, _, e1 := syscall.Syscall12(procChangeServiceConfigW.Addr(), 11, uintptr(service), uintptr(serviceType), uintptr(startType), uintptr(errorControl), uintptr(unsafe.Pointer(binaryPathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), uintptr(unsafe.Pointer(displayName)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) { + r1, _, e1 := syscall.Syscall(procCheckTokenMembership.Addr(), 3, uintptr(tokenHandle), uintptr(unsafe.Pointer(sidToCheck)), uintptr(unsafe.Pointer(isMember))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CloseServiceHandle(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procCloseServiceHandle.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) { + r1, _, e1 := syscall.Syscall(procControlService.Addr(), 3, uintptr(service), uintptr(control), uintptr(unsafe.Pointer(status))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func convertSecurityDescriptorToStringSecurityDescriptor(sd *SECURITY_DESCRIPTOR, revision uint32, securityInformation SECURITY_INFORMATION, str **uint16, strLen *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procConvertSecurityDescriptorToStringSecurityDescriptorW.Addr(), 5, uintptr(unsafe.Pointer(sd)), uintptr(revision), uintptr(securityInformation), uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(strLen)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) { + r1, _, e1 := syscall.Syscall(procConvertSidToStringSidW.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(stringSid)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd **SECURITY_DESCRIPTOR, size *uint32) (err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(str) + if err != nil { + return + } + return _convertStringSecurityDescriptorToSecurityDescriptor(_p0, revision, sd, size) +} + +func _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision uint32, sd **SECURITY_DESCRIPTOR, size *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procConvertStringSecurityDescriptorToSecurityDescriptorW.Addr(), 4, uintptr(unsafe.Pointer(str)), uintptr(revision), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(size)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) { + r1, _, e1 := syscall.Syscall(procConvertStringSidToSidW.Addr(), 2, uintptr(unsafe.Pointer(stringSid)), uintptr(unsafe.Pointer(sid)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) { + r1, _, e1 := syscall.Syscall(procCopySid.Addr(), 3, uintptr(destSidLen), uintptr(unsafe.Pointer(destSid)), uintptr(unsafe.Pointer(srcSid))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CreateProcessAsUser(token Token, appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) { + var _p0 uint32 + if inheritHandles { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall12(procCreateProcessAsUserW.Addr(), 11, uintptr(token), uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall15(procCreateServiceW.Addr(), 13, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(unsafe.Pointer(displayName)), uintptr(access), uintptr(srvType), uintptr(startType), uintptr(errCtl), uintptr(unsafe.Pointer(pathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), 0, 0) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func createWellKnownSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID, sid *SID, sizeSid *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procCreateWellKnownSid.Addr(), 4, uintptr(sidType), uintptr(unsafe.Pointer(domainSid)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sizeSid)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procCryptAcquireContextW.Addr(), 5, uintptr(unsafe.Pointer(provhandle)), uintptr(unsafe.Pointer(container)), uintptr(unsafe.Pointer(provider)), uintptr(provtype), uintptr(flags), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) { + r1, _, e1 := syscall.Syscall(procCryptGenRandom.Addr(), 3, uintptr(provhandle), uintptr(buflen), uintptr(unsafe.Pointer(buf))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptReleaseContext(provhandle Handle, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procCryptReleaseContext.Addr(), 2, uintptr(provhandle), uintptr(flags), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func DeleteService(service Handle) (err error) { + r1, _, e1 := syscall.Syscall(procDeleteService.Addr(), 1, uintptr(service), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func DeregisterEventSource(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procDeregisterEventSource.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes *SecurityAttributes, impersonationLevel uint32, tokenType uint32, newToken *Token) (err error) { + r1, _, e1 := syscall.Syscall6(procDuplicateTokenEx.Addr(), 6, uintptr(existingToken), uintptr(desiredAccess), uintptr(unsafe.Pointer(tokenAttributes)), uintptr(impersonationLevel), uintptr(tokenType), uintptr(unsafe.Pointer(newToken))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procEnumDependentServicesW.Addr(), 6, uintptr(service), uintptr(activityState), uintptr(unsafe.Pointer(services)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) { + r1, _, e1 := syscall.Syscall12(procEnumServicesStatusExW.Addr(), 10, uintptr(mgr), uintptr(infoLevel), uintptr(serviceType), uintptr(serviceState), uintptr(unsafe.Pointer(services)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)), uintptr(unsafe.Pointer(resumeHandle)), uintptr(unsafe.Pointer(groupName)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) { + r0, _, _ := syscall.Syscall(procEqualSid.Addr(), 2, uintptr(unsafe.Pointer(sid1)), uintptr(unsafe.Pointer(sid2)), 0) + isEqual = r0 != 0 + return +} + +func FreeSid(sid *SID) (err error) { + r1, _, e1 := syscall.Syscall(procFreeSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + if r1 != 0 { + err = errnoErr(e1) + } + return +} + +func GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (err error) { + r1, _, e1 := syscall.Syscall(procGetAce.Addr(), 3, uintptr(unsafe.Pointer(acl)), uintptr(aceIndex), uintptr(unsafe.Pointer(pAce))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetLengthSid(sid *SID) (len uint32) { + r0, _, _ := syscall.Syscall(procGetLengthSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + len = uint32(r0) + return +} + +func getNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) { + var _p0 *uint16 + _p0, ret = syscall.UTF16PtrFromString(objectName) + if ret != nil { + return + } + return _getNamedSecurityInfo(_p0, objectType, securityInformation, owner, group, dacl, sacl, sd) +} + +func _getNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) { + r0, _, _ := syscall.Syscall9(procGetNamedSecurityInfoW.Addr(), 8, uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd)), 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func getSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, control *SECURITY_DESCRIPTOR_CONTROL, revision *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetSecurityDescriptorControl.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(control)), uintptr(unsafe.Pointer(revision))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func getSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent *bool, dacl **ACL, daclDefaulted *bool) (err error) { + var _p0 uint32 + if *daclPresent { + _p0 = 1 + } + var _p1 uint32 + if *daclDefaulted { + _p1 = 1 + } + r1, _, e1 := syscall.Syscall6(procGetSecurityDescriptorDacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(&_p1)), 0, 0) + *daclPresent = _p0 != 0 + *daclDefaulted = _p1 != 0 + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func getSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group **SID, groupDefaulted *bool) (err error) { + var _p0 uint32 + if *groupDefaulted { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall(procGetSecurityDescriptorGroup.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(&_p0))) + *groupDefaulted = _p0 != 0 + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func getSecurityDescriptorLength(sd *SECURITY_DESCRIPTOR) (len uint32) { + r0, _, _ := syscall.Syscall(procGetSecurityDescriptorLength.Addr(), 1, uintptr(unsafe.Pointer(sd)), 0, 0) + len = uint32(r0) + return +} + +func getSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner **SID, ownerDefaulted *bool) (err error) { + var _p0 uint32 + if *ownerDefaulted { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall(procGetSecurityDescriptorOwner.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(&_p0))) + *ownerDefaulted = _p0 != 0 + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func getSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) (ret error) { + r0, _, _ := syscall.Syscall(procGetSecurityDescriptorRMControl.Addr(), 2, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl)), 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func getSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent *bool, sacl **ACL, saclDefaulted *bool) (err error) { + var _p0 uint32 + if *saclPresent { + _p0 = 1 + } + var _p1 uint32 + if *saclDefaulted { + _p1 = 1 + } + r1, _, e1 := syscall.Syscall6(procGetSecurityDescriptorSacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(&_p1)), 0, 0) + *saclPresent = _p0 != 0 + *saclDefaulted = _p1 != 0 + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func getSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) { + r0, _, _ := syscall.Syscall9(procGetSecurityInfo.Addr(), 8, uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd)), 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func getSidIdentifierAuthority(sid *SID) (authority *SidIdentifierAuthority) { + r0, _, _ := syscall.Syscall(procGetSidIdentifierAuthority.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + authority = (*SidIdentifierAuthority)(unsafe.Pointer(r0)) + return +} + +func getSidSubAuthority(sid *SID, index uint32) (subAuthority *uint32) { + r0, _, _ := syscall.Syscall(procGetSidSubAuthority.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(index), 0) + subAuthority = (*uint32)(unsafe.Pointer(r0)) + return +} + +func getSidSubAuthorityCount(sid *SID) (count *uint8) { + r0, _, _ := syscall.Syscall(procGetSidSubAuthorityCount.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + count = (*uint8)(unsafe.Pointer(r0)) + return +} + +func GetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetTokenInformation.Addr(), 5, uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), uintptr(unsafe.Pointer(returnedLen)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ImpersonateSelf(impersonationlevel uint32) (err error) { + r1, _, e1 := syscall.Syscall(procImpersonateSelf.Addr(), 1, uintptr(impersonationlevel), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func initializeSecurityDescriptor(absoluteSD *SECURITY_DESCRIPTOR, revision uint32) (err error) { + r1, _, e1 := syscall.Syscall(procInitializeSecurityDescriptor.Addr(), 2, uintptr(unsafe.Pointer(absoluteSD)), uintptr(revision), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint32, forceAppsClosed bool, rebootAfterShutdown bool, reason uint32) (err error) { + var _p0 uint32 + if forceAppsClosed { + _p0 = 1 + } + var _p1 uint32 + if rebootAfterShutdown { + _p1 = 1 + } + r1, _, e1 := syscall.Syscall6(procInitiateSystemShutdownExW.Addr(), 6, uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(message)), uintptr(timeout), uintptr(_p0), uintptr(_p1), uintptr(reason)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func isTokenRestricted(tokenHandle Token) (ret bool, err error) { + r0, _, e1 := syscall.Syscall(procIsTokenRestricted.Addr(), 1, uintptr(tokenHandle), 0, 0) + ret = r0 != 0 + if !ret { + err = errnoErr(e1) + } + return +} + +func isValidSecurityDescriptor(sd *SECURITY_DESCRIPTOR) (isValid bool) { + r0, _, _ := syscall.Syscall(procIsValidSecurityDescriptor.Addr(), 1, uintptr(unsafe.Pointer(sd)), 0, 0) + isValid = r0 != 0 + return +} + +func isValidSid(sid *SID) (isValid bool) { + r0, _, _ := syscall.Syscall(procIsValidSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + isValid = r0 != 0 + return +} + +func isWellKnownSid(sid *SID, sidType WELL_KNOWN_SID_TYPE) (isWellKnown bool) { + r0, _, _ := syscall.Syscall(procIsWellKnownSid.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(sidType), 0) + isWellKnown = r0 != 0 + return +} + +func LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procLookupAccountNameW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procLookupAccountSidW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func LookupPrivilegeValue(systemname *uint16, name *uint16, luid *LUID) (err error) { + r1, _, e1 := syscall.Syscall(procLookupPrivilegeValueW.Addr(), 3, uintptr(unsafe.Pointer(systemname)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func makeAbsoluteSD(selfRelativeSD *SECURITY_DESCRIPTOR, absoluteSD *SECURITY_DESCRIPTOR, absoluteSDSize *uint32, dacl *ACL, daclSize *uint32, sacl *ACL, saclSize *uint32, owner *SID, ownerSize *uint32, group *SID, groupSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall12(procMakeAbsoluteSD.Addr(), 11, uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(absoluteSDSize)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(daclSize)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(saclSize)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(ownerSize)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(groupSize)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procMakeSelfRelativeSD.Addr(), 3, uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(selfRelativeSDSize))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERVICE_NOTIFY) (ret error) { + r0, _, _ := syscall.Syscall(procNotifyServiceStatusChangeW.Addr(), 3, uintptr(service), uintptr(notifyMask), uintptr(unsafe.Pointer(notifier))) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func OpenProcessToken(process Handle, access uint32, token *Token) (err error) { + r1, _, e1 := syscall.Syscall(procOpenProcessToken.Addr(), 3, uintptr(process), uintptr(access), uintptr(unsafe.Pointer(token))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procOpenSCManagerW.Addr(), 3, uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(databaseName)), uintptr(access)) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procOpenServiceW.Addr(), 3, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(access)) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func OpenThreadToken(thread Handle, access uint32, openAsSelf bool, token *Token) (err error) { + var _p0 uint32 + if openAsSelf { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall6(procOpenThreadToken.Addr(), 4, uintptr(thread), uintptr(access), uintptr(_p0), uintptr(unsafe.Pointer(token)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryServiceConfig2W.Addr(), 5, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryServiceConfigW.Addr(), 4, uintptr(service), uintptr(unsafe.Pointer(serviceConfig)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) { + err = procQueryServiceDynamicInformation.Find() + if err != nil { + return + } + r1, _, e1 := syscall.Syscall(procQueryServiceDynamicInformation.Addr(), 3, uintptr(service), uintptr(infoLevel), uintptr(dynamicInfo)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryServiceLockStatus(mgr Handle, lockStatus *QUERY_SERVICE_LOCK_STATUS, bufSize uint32, bytesNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryServiceLockStatusW.Addr(), 4, uintptr(mgr), uintptr(unsafe.Pointer(lockStatus)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) { + r1, _, e1 := syscall.Syscall(procQueryServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(status)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryServiceStatusEx.Addr(), 5, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func RegCloseKey(key Handle) (regerrno error) { + r0, _, _ := syscall.Syscall(procRegCloseKey.Addr(), 1, uintptr(key), 0, 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) { + r0, _, _ := syscall.Syscall9(procRegEnumKeyExW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(lastWriteTime)), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, event Handle, asynchronous bool) (regerrno error) { + var _p0 uint32 + if watchSubtree { + _p0 = 1 + } + var _p1 uint32 + if asynchronous { + _p1 = 1 + } + r0, _, _ := syscall.Syscall6(procRegNotifyChangeKeyValue.Addr(), 5, uintptr(key), uintptr(_p0), uintptr(notifyFilter), uintptr(event), uintptr(_p1), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) { + r0, _, _ := syscall.Syscall6(procRegOpenKeyExW.Addr(), 5, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(options), uintptr(desiredAccess), uintptr(unsafe.Pointer(result)), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) { + r0, _, _ := syscall.Syscall12(procRegQueryInfoKeyW.Addr(), 12, uintptr(key), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(subkeysLen)), uintptr(unsafe.Pointer(maxSubkeyLen)), uintptr(unsafe.Pointer(maxClassLen)), uintptr(unsafe.Pointer(valuesLen)), uintptr(unsafe.Pointer(maxValueNameLen)), uintptr(unsafe.Pointer(maxValueLen)), uintptr(unsafe.Pointer(saLen)), uintptr(unsafe.Pointer(lastWriteTime))) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) { + r0, _, _ := syscall.Syscall6(procRegQueryValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen))) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procRegisterEventSourceW.Addr(), 2, uintptr(unsafe.Pointer(uncServerName)), uintptr(unsafe.Pointer(sourceName)), 0) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procRegisterServiceCtrlHandlerExW.Addr(), 3, uintptr(unsafe.Pointer(serviceName)), uintptr(handlerProc), uintptr(context)) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procReportEventW.Addr(), 9, uintptr(log), uintptr(etype), uintptr(category), uintptr(eventId), uintptr(usrSId), uintptr(numStrings), uintptr(dataSize), uintptr(unsafe.Pointer(strings)), uintptr(unsafe.Pointer(rawData))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func RevertToSelf() (err error) { + r1, _, e1 := syscall.Syscall(procRevertToSelf.Addr(), 0, 0, 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) { + r0, _, _ := syscall.Syscall6(procSetEntriesInAclW.Addr(), 4, uintptr(countExplicitEntries), uintptr(unsafe.Pointer(explicitEntries)), uintptr(unsafe.Pointer(oldACL)), uintptr(unsafe.Pointer(newACL)), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func SetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) { + r1, _, e1 := syscall.Syscall(procSetKernelObjectSecurity.Addr(), 3, uintptr(handle), uintptr(securityInformation), uintptr(unsafe.Pointer(securityDescriptor))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) { + var _p0 *uint16 + _p0, ret = syscall.UTF16PtrFromString(objectName) + if ret != nil { + return + } + return _SetNamedSecurityInfo(_p0, objectType, securityInformation, owner, group, dacl, sacl) +} + +func _SetNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) { + r0, _, _ := syscall.Syscall9(procSetNamedSecurityInfoW.Addr(), 7, uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func setSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) (err error) { + r1, _, e1 := syscall.Syscall(procSetSecurityDescriptorControl.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(controlBitsOfInterest), uintptr(controlBitsToSet)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent bool, dacl *ACL, daclDefaulted bool) (err error) { + var _p0 uint32 + if daclPresent { + _p0 = 1 + } + var _p1 uint32 + if daclDefaulted { + _p1 = 1 + } + r1, _, e1 := syscall.Syscall6(procSetSecurityDescriptorDacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(dacl)), uintptr(_p1), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group *SID, groupDefaulted bool) (err error) { + var _p0 uint32 + if groupDefaulted { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall(procSetSecurityDescriptorGroup.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(_p0)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner *SID, ownerDefaulted bool) (err error) { + var _p0 uint32 + if ownerDefaulted { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall(procSetSecurityDescriptorOwner.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(_p0)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) { + syscall.Syscall(procSetSecurityDescriptorRMControl.Addr(), 2, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl)), 0) + return +} + +func setSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent bool, sacl *ACL, saclDefaulted bool) (err error) { + var _p0 uint32 + if saclPresent { + _p0 = 1 + } + var _p1 uint32 + if saclDefaulted { + _p1 = 1 + } + r1, _, e1 := syscall.Syscall6(procSetSecurityDescriptorSacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(sacl)), uintptr(_p1), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) { + r0, _, _ := syscall.Syscall9(procSetSecurityInfo.Addr(), 7, uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) { + r1, _, e1 := syscall.Syscall(procSetServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(serviceStatus)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetThreadToken(thread *Handle, token Token) (err error) { + r1, _, e1 := syscall.Syscall(procSetThreadToken.Addr(), 2, uintptr(unsafe.Pointer(thread)), uintptr(token), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetTokenInformation.Addr(), 4, uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) { + r1, _, e1 := syscall.Syscall(procStartServiceCtrlDispatcherW.Addr(), 1, uintptr(unsafe.Pointer(serviceTable)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) { + r1, _, e1 := syscall.Syscall(procStartServiceW.Addr(), 3, uintptr(service), uintptr(numArgs), uintptr(unsafe.Pointer(argVectors))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) { + r1, _, e1 := syscall.Syscall6(procCertAddCertificateContextToStore.Addr(), 4, uintptr(store), uintptr(unsafe.Pointer(certContext)), uintptr(addDisposition), uintptr(unsafe.Pointer(storeContext)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CertCloseStore(store Handle, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procCertCloseStore.Addr(), 2, uintptr(store), uintptr(flags), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) { + r0, _, e1 := syscall.Syscall(procCertCreateCertificateContext.Addr(), 3, uintptr(certEncodingType), uintptr(unsafe.Pointer(certEncoded)), uintptr(encodedLen)) + context = (*CertContext)(unsafe.Pointer(r0)) + if context == nil { + err = errnoErr(e1) + } + return +} + +func CertDeleteCertificateFromStore(certContext *CertContext) (err error) { + r1, _, e1 := syscall.Syscall(procCertDeleteCertificateFromStore.Addr(), 1, uintptr(unsafe.Pointer(certContext)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CertDuplicateCertificateContext(certContext *CertContext) (dupContext *CertContext) { + r0, _, _ := syscall.Syscall(procCertDuplicateCertificateContext.Addr(), 1, uintptr(unsafe.Pointer(certContext)), 0, 0) + dupContext = (*CertContext)(unsafe.Pointer(r0)) + return +} + +func CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) { + r0, _, e1 := syscall.Syscall(procCertEnumCertificatesInStore.Addr(), 2, uintptr(store), uintptr(unsafe.Pointer(prevContext)), 0) + context = (*CertContext)(unsafe.Pointer(r0)) + if context == nil { + err = errnoErr(e1) + } + return +} + +func CertFindCertificateInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevCertContext *CertContext) (cert *CertContext, err error) { + r0, _, e1 := syscall.Syscall6(procCertFindCertificateInStore.Addr(), 6, uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevCertContext))) + cert = (*CertContext)(unsafe.Pointer(r0)) + if cert == nil { + err = errnoErr(e1) + } + return +} + +func CertFindChainInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevChainContext *CertChainContext) (certchain *CertChainContext, err error) { + r0, _, e1 := syscall.Syscall6(procCertFindChainInStore.Addr(), 6, uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevChainContext))) + certchain = (*CertChainContext)(unsafe.Pointer(r0)) + if certchain == nil { + err = errnoErr(e1) + } + return +} + +func CertFindExtension(objId *byte, countExtensions uint32, extensions *CertExtension) (ret *CertExtension) { + r0, _, _ := syscall.Syscall(procCertFindExtension.Addr(), 3, uintptr(unsafe.Pointer(objId)), uintptr(countExtensions), uintptr(unsafe.Pointer(extensions))) + ret = (*CertExtension)(unsafe.Pointer(r0)) + return +} + +func CertFreeCertificateChain(ctx *CertChainContext) { + syscall.Syscall(procCertFreeCertificateChain.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0) + return +} + +func CertFreeCertificateContext(ctx *CertContext) (err error) { + r1, _, e1 := syscall.Syscall(procCertFreeCertificateContext.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) { + r1, _, e1 := syscall.Syscall9(procCertGetCertificateChain.Addr(), 8, uintptr(engine), uintptr(unsafe.Pointer(leaf)), uintptr(unsafe.Pointer(time)), uintptr(additionalStore), uintptr(unsafe.Pointer(para)), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(chainCtx)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CertGetNameString(certContext *CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) { + r0, _, _ := syscall.Syscall6(procCertGetNameStringW.Addr(), 6, uintptr(unsafe.Pointer(certContext)), uintptr(nameType), uintptr(flags), uintptr(typePara), uintptr(unsafe.Pointer(name)), uintptr(size)) + chars = uint32(r0) + return +} + +func CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCertOpenStore.Addr(), 5, uintptr(storeProvider), uintptr(msgAndCertEncodingType), uintptr(cryptProv), uintptr(flags), uintptr(para), 0) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) { + r0, _, e1 := syscall.Syscall(procCertOpenSystemStoreW.Addr(), 2, uintptr(hprov), uintptr(unsafe.Pointer(name)), 0) + store = Handle(r0) + if store == 0 { + err = errnoErr(e1) + } + return +} + +func CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) { + r1, _, e1 := syscall.Syscall6(procCertVerifyCertificateChainPolicy.Addr(), 4, uintptr(policyOID), uintptr(unsafe.Pointer(chain)), uintptr(unsafe.Pointer(para)), uintptr(unsafe.Pointer(status)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptAcquireCertificatePrivateKey(cert *CertContext, flags uint32, parameters unsafe.Pointer, cryptProvOrNCryptKey *Handle, keySpec *uint32, callerFreeProvOrNCryptKey *bool) (err error) { + var _p0 uint32 + if *callerFreeProvOrNCryptKey { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall6(procCryptAcquireCertificatePrivateKey.Addr(), 6, uintptr(unsafe.Pointer(cert)), uintptr(flags), uintptr(parameters), uintptr(unsafe.Pointer(cryptProvOrNCryptKey)), uintptr(unsafe.Pointer(keySpec)), uintptr(unsafe.Pointer(&_p0))) + *callerFreeProvOrNCryptKey = _p0 != 0 + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procCryptDecodeObject.Addr(), 7, uintptr(encodingType), uintptr(unsafe.Pointer(structType)), uintptr(unsafe.Pointer(encodedBytes)), uintptr(lenEncodedBytes), uintptr(flags), uintptr(decoded), uintptr(unsafe.Pointer(decodedLen)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) { + r1, _, e1 := syscall.Syscall9(procCryptProtectData.Addr(), 7, uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *Handle, msg *Handle, context *unsafe.Pointer) (err error) { + r1, _, e1 := syscall.Syscall12(procCryptQueryObject.Addr(), 11, uintptr(objectType), uintptr(object), uintptr(expectedContentTypeFlags), uintptr(expectedFormatTypeFlags), uintptr(flags), uintptr(unsafe.Pointer(msgAndCertEncodingType)), uintptr(unsafe.Pointer(contentType)), uintptr(unsafe.Pointer(formatType)), uintptr(unsafe.Pointer(certStore)), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(context)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) { + r1, _, e1 := syscall.Syscall9(procCryptUnprotectData.Addr(), 7, uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) { + r0, _, e1 := syscall.Syscall(procPFXImportCertStore.Addr(), 3, uintptr(unsafe.Pointer(pfx)), uintptr(unsafe.Pointer(password)), uintptr(flags)) + store = Handle(r0) + if store == 0 { + err = errnoErr(e1) + } + return +} + +func DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) { + r0, _, _ := syscall.Syscall(procDnsNameCompare_W.Addr(), 2, uintptr(unsafe.Pointer(name1)), uintptr(unsafe.Pointer(name2)), 0) + same = r0 != 0 + return +} + +func DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) { + var _p0 *uint16 + _p0, status = syscall.UTF16PtrFromString(name) + if status != nil { + return + } + return _DnsQuery(_p0, qtype, options, extra, qrs, pr) +} + +func _DnsQuery(name *uint16, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) { + r0, _, _ := syscall.Syscall6(procDnsQuery_W.Addr(), 6, uintptr(unsafe.Pointer(name)), uintptr(qtype), uintptr(options), uintptr(unsafe.Pointer(extra)), uintptr(unsafe.Pointer(qrs)), uintptr(unsafe.Pointer(pr))) + if r0 != 0 { + status = syscall.Errno(r0) + } + return +} + +func DnsRecordListFree(rl *DNSRecord, freetype uint32) { + syscall.Syscall(procDnsRecordListFree.Addr(), 2, uintptr(unsafe.Pointer(rl)), uintptr(freetype), 0) + return +} + +func DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) { + r0, _, _ := syscall.Syscall6(procDwmGetWindowAttribute.Addr(), 4, uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) { + r0, _, _ := syscall.Syscall6(procDwmSetWindowAttribute.Addr(), 4, uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func CancelMibChangeNotify2(notificationHandle Handle) (errcode error) { + r0, _, _ := syscall.Syscall(procCancelMibChangeNotify2.Addr(), 1, uintptr(notificationHandle), 0, 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) { + r0, _, _ := syscall.Syscall6(procGetAdaptersAddresses.Addr(), 5, uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) { + r0, _, _ := syscall.Syscall(procGetAdaptersInfo.Addr(), 2, uintptr(unsafe.Pointer(ai)), uintptr(unsafe.Pointer(ol)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) { + r0, _, _ := syscall.Syscall(procGetBestInterfaceEx.Addr(), 2, uintptr(sockaddr), uintptr(unsafe.Pointer(pdwBestIfIndex)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetIfEntry(pIfRow *MibIfRow) (errcode error) { + r0, _, _ := syscall.Syscall(procGetIfEntry.Addr(), 1, uintptr(unsafe.Pointer(pIfRow)), 0, 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) { + r0, _, _ := syscall.Syscall(procGetIfEntry2Ex.Addr(), 2, uintptr(level), uintptr(unsafe.Pointer(row)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) { + r0, _, _ := syscall.Syscall(procGetUnicastIpAddressEntry.Addr(), 1, uintptr(unsafe.Pointer(row)), 0, 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) { + var _p0 uint32 + if initialNotification { + _p0 = 1 + } + r0, _, _ := syscall.Syscall6(procNotifyIpInterfaceChange.Addr(), 5, uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) { + var _p0 uint32 + if initialNotification { + _p0 = 1 + } + r0, _, _ := syscall.Syscall6(procNotifyUnicastIpAddressChange.Addr(), 5, uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func AddDllDirectory(path *uint16) (cookie uintptr, err error) { + r0, _, e1 := syscall.Syscall(procAddDllDirectory.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + cookie = uintptr(r0) + if cookie == 0 { + err = errnoErr(e1) + } + return +} + +func AssignProcessToJobObject(job Handle, process Handle) (err error) { + r1, _, e1 := syscall.Syscall(procAssignProcessToJobObject.Addr(), 2, uintptr(job), uintptr(process), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CancelIo(s Handle) (err error) { + r1, _, e1 := syscall.Syscall(procCancelIo.Addr(), 1, uintptr(s), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CancelIoEx(s Handle, o *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall(procCancelIoEx.Addr(), 2, uintptr(s), uintptr(unsafe.Pointer(o)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ClearCommBreak(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procClearCommBreak.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ClearCommError(handle Handle, lpErrors *uint32, lpStat *ComStat) (err error) { + r1, _, e1 := syscall.Syscall(procClearCommError.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(lpErrors)), uintptr(unsafe.Pointer(lpStat))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CloseHandle(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procCloseHandle.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ClosePseudoConsole(console Handle) { + syscall.Syscall(procClosePseudoConsole.Addr(), 1, uintptr(console), 0, 0) + return +} + +func ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall(procConnectNamedPipe.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) { + r1, _, e1 := syscall.Syscall(procCreateDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(sa)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateEventExW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess), 0, 0) + handle = Handle(r0) + if handle == 0 || e1 == ERROR_ALREADY_EXISTS { + err = errnoErr(e1) + } + return +} + +func CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateEventW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(manualReset), uintptr(initialState), uintptr(unsafe.Pointer(name)), 0, 0) + handle = Handle(r0) + if handle == 0 || e1 == ERROR_ALREADY_EXISTS { + err = errnoErr(e1) + } + return +} + +func CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateFileMappingW.Addr(), 6, uintptr(fhandle), uintptr(unsafe.Pointer(sa)), uintptr(prot), uintptr(maxSizeHigh), uintptr(maxSizeLow), uintptr(unsafe.Pointer(name))) + handle = Handle(r0) + if handle == 0 || e1 == ERROR_ALREADY_EXISTS { + err = errnoErr(e1) + } + return +} + +func CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile Handle) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall9(procCreateFileW.Addr(), 7, uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile), 0, 0) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procCreateHardLinkW.Addr(), 3, uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(existingfilename)), uintptr(reserved)) + if r1&0xff == 0 { + err = errnoErr(e1) + } + return +} + +func CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uintptr, threadcnt uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateIoCompletionPort.Addr(), 4, uintptr(filehandle), uintptr(cphandle), uintptr(key), uintptr(threadcnt), 0, 0) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func CreateJobObject(jobAttr *SecurityAttributes, name *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procCreateJobObjectW.Addr(), 2, uintptr(unsafe.Pointer(jobAttr)), uintptr(unsafe.Pointer(name)), 0) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func CreateMutexEx(mutexAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateMutexExW.Addr(), 4, uintptr(unsafe.Pointer(mutexAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess), 0, 0) + handle = Handle(r0) + if handle == 0 || e1 == ERROR_ALREADY_EXISTS { + err = errnoErr(e1) + } + return +} + +func CreateMutex(mutexAttrs *SecurityAttributes, initialOwner bool, name *uint16) (handle Handle, err error) { + var _p0 uint32 + if initialOwner { + _p0 = 1 + } + r0, _, e1 := syscall.Syscall(procCreateMutexW.Addr(), 3, uintptr(unsafe.Pointer(mutexAttrs)), uintptr(_p0), uintptr(unsafe.Pointer(name))) + handle = Handle(r0) + if handle == 0 || e1 == ERROR_ALREADY_EXISTS { + err = errnoErr(e1) + } + return +} + +func CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall9(procCreateNamedPipeW.Addr(), 8, uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa)), 0) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procCreatePipe.Addr(), 4, uintptr(unsafe.Pointer(readhandle)), uintptr(unsafe.Pointer(writehandle)), uintptr(unsafe.Pointer(sa)), uintptr(size), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) { + var _p0 uint32 + if inheritHandles { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall12(procCreateProcessW.Addr(), 10, uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func createPseudoConsole(size uint32, in Handle, out Handle, flags uint32, pconsole *Handle) (hr error) { + r0, _, _ := syscall.Syscall6(procCreatePseudoConsole.Addr(), 5, uintptr(size), uintptr(in), uintptr(out), uintptr(flags), uintptr(unsafe.Pointer(pconsole)), 0) + if r0 != 0 { + hr = syscall.Errno(r0) + } + return +} + +func CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procCreateSymbolicLinkW.Addr(), 3, uintptr(unsafe.Pointer(symlinkfilename)), uintptr(unsafe.Pointer(targetfilename)), uintptr(flags)) + if r1&0xff == 0 { + err = errnoErr(e1) + } + return +} + +func CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procCreateToolhelp32Snapshot.Addr(), 2, uintptr(flags), uintptr(processId), 0) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procDefineDosDeviceW.Addr(), 3, uintptr(flags), uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func DeleteFile(path *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procDeleteFileW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func deleteProcThreadAttributeList(attrlist *ProcThreadAttributeList) { + syscall.Syscall(procDeleteProcThreadAttributeList.Addr(), 1, uintptr(unsafe.Pointer(attrlist)), 0, 0) + return +} + +func DeleteVolumeMountPoint(volumeMountPoint *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procDeleteVolumeMountPointW.Addr(), 1, uintptr(unsafe.Pointer(volumeMountPoint)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall9(procDeviceIoControl.Addr(), 8, uintptr(handle), uintptr(ioControlCode), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferSize), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferSize), uintptr(unsafe.Pointer(bytesReturned)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func DisconnectNamedPipe(pipe Handle) (err error) { + r1, _, e1 := syscall.Syscall(procDisconnectNamedPipe.Addr(), 1, uintptr(pipe), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) { + var _p0 uint32 + if bInheritHandle { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall9(procDuplicateHandle.Addr(), 7, uintptr(hSourceProcessHandle), uintptr(hSourceHandle), uintptr(hTargetProcessHandle), uintptr(unsafe.Pointer(lpTargetHandle)), uintptr(dwDesiredAccess), uintptr(_p0), uintptr(dwOptions), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func EscapeCommFunction(handle Handle, dwFunc uint32) (err error) { + r1, _, e1 := syscall.Syscall(procEscapeCommFunction.Addr(), 2, uintptr(handle), uintptr(dwFunc), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ExitProcess(exitcode uint32) { + syscall.Syscall(procExitProcess.Addr(), 1, uintptr(exitcode), 0, 0) + return +} + +func ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procExpandEnvironmentStringsW.Addr(), 3, uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size)) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func FindClose(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindClose.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FindCloseChangeNotification(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindCloseChangeNotification.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(path) + if err != nil { + return + } + return _FindFirstChangeNotification(_p0, watchSubtree, notifyFilter) +} + +func _FindFirstChangeNotification(path *uint16, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) { + var _p1 uint32 + if watchSubtree { + _p1 = 1 + } + r0, _, e1 := syscall.Syscall(procFindFirstChangeNotificationW.Addr(), 3, uintptr(unsafe.Pointer(path)), uintptr(_p1), uintptr(notifyFilter)) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procFindFirstFileW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(data)), 0) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func FindFirstVolumeMountPoint(rootPathName *uint16, volumeMountPoint *uint16, bufferLength uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procFindFirstVolumeMountPointW.Addr(), 3, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength)) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func FindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procFindFirstVolumeW.Addr(), 2, uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength), 0) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func FindNextChangeNotification(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindNextChangeNotification.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func findNextFile1(handle Handle, data *win32finddata1) (err error) { + r1, _, e1 := syscall.Syscall(procFindNextFileW.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FindNextVolumeMountPoint(findVolumeMountPoint Handle, volumeMountPoint *uint16, bufferLength uint32) (err error) { + r1, _, e1 := syscall.Syscall(procFindNextVolumeMountPointW.Addr(), 3, uintptr(findVolumeMountPoint), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FindNextVolume(findVolume Handle, volumeName *uint16, bufferLength uint32) (err error) { + r1, _, e1 := syscall.Syscall(procFindNextVolumeW.Addr(), 3, uintptr(findVolume), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func findResource(module Handle, name uintptr, resType uintptr) (resInfo Handle, err error) { + r0, _, e1 := syscall.Syscall(procFindResourceW.Addr(), 3, uintptr(module), uintptr(name), uintptr(resType)) + resInfo = Handle(r0) + if resInfo == 0 { + err = errnoErr(e1) + } + return +} + +func FindVolumeClose(findVolume Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindVolumeClose.Addr(), 1, uintptr(findVolume), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FindVolumeMountPointClose(findVolumeMountPoint Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindVolumeMountPointClose.Addr(), 1, uintptr(findVolumeMountPoint), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FlushFileBuffers(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFlushFileBuffers.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FlushViewOfFile(addr uintptr, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procFlushViewOfFile.Addr(), 2, uintptr(addr), uintptr(length), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) { + var _p0 *uint16 + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := syscall.Syscall9(procFormatMessageW.Addr(), 7, uintptr(flags), uintptr(msgsrc), uintptr(msgid), uintptr(langid), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(args)), 0, 0) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func FreeEnvironmentStrings(envs *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procFreeEnvironmentStringsW.Addr(), 1, uintptr(unsafe.Pointer(envs)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FreeLibrary(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFreeLibrary.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GenerateConsoleCtrlEvent(ctrlEvent uint32, processGroupID uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGenerateConsoleCtrlEvent.Addr(), 2, uintptr(ctrlEvent), uintptr(processGroupID), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetACP() (acp uint32) { + r0, _, _ := syscall.Syscall(procGetACP.Addr(), 0, 0, 0, 0) + acp = uint32(r0) + return +} + +func GetActiveProcessorCount(groupNumber uint16) (ret uint32) { + r0, _, _ := syscall.Syscall(procGetActiveProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0) + ret = uint32(r0) + return +} + +func GetCommModemStatus(handle Handle, lpModemStat *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetCommModemStatus.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(lpModemStat)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetCommState(handle Handle, lpDCB *DCB) (err error) { + r1, _, e1 := syscall.Syscall(procGetCommState.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(lpDCB)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) { + r1, _, e1 := syscall.Syscall(procGetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetCommandLine() (cmd *uint16) { + r0, _, _ := syscall.Syscall(procGetCommandLineW.Addr(), 0, 0, 0, 0) + cmd = (*uint16)(unsafe.Pointer(r0)) + return +} + +func GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetComputerNameExW.Addr(), 3, uintptr(nametype), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetComputerName(buf *uint16, n *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetComputerNameW.Addr(), 2, uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetConsoleCP() (cp uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetConsoleCP.Addr(), 0, 0, 0, 0) + cp = uint32(r0) + if cp == 0 { + err = errnoErr(e1) + } + return +} + +func GetConsoleMode(console Handle, mode *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(mode)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetConsoleOutputCP() (cp uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetConsoleOutputCP.Addr(), 0, 0, 0, 0) + cp = uint32(r0) + if cp == 0 { + err = errnoErr(e1) + } + return +} + +func GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) { + r1, _, e1 := syscall.Syscall(procGetConsoleScreenBufferInfo.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(info)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetCurrentDirectoryW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetCurrentProcessId() (pid uint32) { + r0, _, _ := syscall.Syscall(procGetCurrentProcessId.Addr(), 0, 0, 0, 0) + pid = uint32(r0) + return +} + +func GetCurrentThreadId() (id uint32) { + r0, _, _ := syscall.Syscall(procGetCurrentThreadId.Addr(), 0, 0, 0, 0) + id = uint32(r0) + return +} + +func GetDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *uint64, totalNumberOfBytes *uint64, totalNumberOfFreeBytes *uint64) (err error) { + r1, _, e1 := syscall.Syscall6(procGetDiskFreeSpaceExW.Addr(), 4, uintptr(unsafe.Pointer(directoryName)), uintptr(unsafe.Pointer(freeBytesAvailableToCaller)), uintptr(unsafe.Pointer(totalNumberOfBytes)), uintptr(unsafe.Pointer(totalNumberOfFreeBytes)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetDriveType(rootPathName *uint16) (driveType uint32) { + r0, _, _ := syscall.Syscall(procGetDriveTypeW.Addr(), 1, uintptr(unsafe.Pointer(rootPathName)), 0, 0) + driveType = uint32(r0) + return +} + +func GetEnvironmentStrings() (envs *uint16, err error) { + r0, _, e1 := syscall.Syscall(procGetEnvironmentStringsW.Addr(), 0, 0, 0, 0) + envs = (*uint16)(unsafe.Pointer(r0)) + if envs == nil { + err = errnoErr(e1) + } + return +} + +func GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetEnvironmentVariableW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(size)) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetExitCodeProcess.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(exitcode)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) { + r1, _, e1 := syscall.Syscall(procGetFileAttributesExW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(level), uintptr(unsafe.Pointer(info))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetFileAttributes(name *uint16) (attrs uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetFileAttributesW.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + attrs = uint32(r0) + if attrs == INVALID_FILE_ATTRIBUTES { + err = errnoErr(e1) + } + return +} + +func GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) { + r1, _, e1 := syscall.Syscall(procGetFileInformationByHandle.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, outBufferLen uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(), 4, uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferLen), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) { + r1, _, e1 := syscall.Syscall6(procGetFileTime.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetFileType(filehandle Handle) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetFileType.Addr(), 1, uintptr(filehandle), 0, 0) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetFinalPathNameByHandle(file Handle, filePath *uint16, filePathSize uint32, flags uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall6(procGetFinalPathNameByHandleW.Addr(), 4, uintptr(file), uintptr(unsafe.Pointer(filePath)), uintptr(filePathSize), uintptr(flags), 0, 0) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) { + r0, _, e1 := syscall.Syscall6(procGetFullPathNameW.Addr(), 4, uintptr(unsafe.Pointer(path)), uintptr(buflen), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(fname)), 0, 0) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetLargePageMinimum() (size uintptr) { + r0, _, _ := syscall.Syscall(procGetLargePageMinimum.Addr(), 0, 0, 0, 0) + size = uintptr(r0) + return +} + +func GetLastError() (lasterr error) { + r0, _, _ := syscall.Syscall(procGetLastError.Addr(), 0, 0, 0, 0) + if r0 != 0 { + lasterr = syscall.Errno(r0) + } + return +} + +func GetLogicalDriveStrings(bufferLength uint32, buffer *uint16) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetLogicalDriveStringsW.Addr(), 2, uintptr(bufferLength), uintptr(unsafe.Pointer(buffer)), 0) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetLogicalDrives() (drivesBitMask uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetLogicalDrives.Addr(), 0, 0, 0, 0) + drivesBitMask = uint32(r0) + if drivesBitMask == 0 { + err = errnoErr(e1) + } + return +} + +func GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetLongPathNameW.Addr(), 3, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(buf)), uintptr(buflen)) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetMaximumProcessorCount(groupNumber uint16) (ret uint32) { + r0, _, _ := syscall.Syscall(procGetMaximumProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0) + ret = uint32(r0) + return +} + +func GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetModuleFileNameW.Addr(), 3, uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size)) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err error) { + r1, _, e1 := syscall.Syscall(procGetModuleHandleExW.Addr(), 3, uintptr(flags), uintptr(unsafe.Pointer(moduleName)), uintptr(unsafe.Pointer(module))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetNamedPipeClientProcessId(pipe Handle, clientProcessID *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetNamedPipeClientProcessId.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(clientProcessID)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procGetNamedPipeHandleStateW.Addr(), 7, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetNamedPipeInfo.Addr(), 5, uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetNamedPipeServerProcessId(pipe Handle, serverProcessID *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetNamedPipeServerProcessId.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(serverProcessID)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error) { + var _p0 uint32 + if wait { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall6(procGetOverlappedResult.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(done)), uintptr(_p0), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetPriorityClass(process Handle) (ret uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetPriorityClass.Addr(), 1, uintptr(process), 0, 0) + ret = uint32(r0) + if ret == 0 { + err = errnoErr(e1) + } + return +} + +func GetProcAddress(module Handle, procname string) (proc uintptr, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(procname) + if err != nil { + return + } + return _GetProcAddress(module, _p0) +} + +func _GetProcAddress(module Handle, procname *byte) (proc uintptr, err error) { + r0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), uintptr(unsafe.Pointer(procname)), 0) + proc = uintptr(r0) + if proc == 0 { + err = errnoErr(e1) + } + return +} + +func GetProcessId(process Handle) (id uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetProcessId.Addr(), 1, uintptr(process), 0, 0) + id = uint32(r0) + if id == 0 { + err = errnoErr(e1) + } + return +} + +func getProcessPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetProcessPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetProcessShutdownParameters(level *uint32, flags *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetProcessShutdownParameters.Addr(), 2, uintptr(unsafe.Pointer(level)), uintptr(unsafe.Pointer(flags)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) { + r1, _, e1 := syscall.Syscall6(procGetProcessTimes.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(creationTime)), uintptr(unsafe.Pointer(exitTime)), uintptr(unsafe.Pointer(kernelTime)), uintptr(unsafe.Pointer(userTime)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetProcessWorkingSetSizeEx(hProcess Handle, lpMinimumWorkingSetSize *uintptr, lpMaximumWorkingSetSize *uintptr, flags *uint32) { + syscall.Syscall6(procGetProcessWorkingSetSizeEx.Addr(), 4, uintptr(hProcess), uintptr(unsafe.Pointer(lpMinimumWorkingSetSize)), uintptr(unsafe.Pointer(lpMaximumWorkingSetSize)), uintptr(unsafe.Pointer(flags)), 0, 0) + return +} + +func GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uintptr, overlapped **Overlapped, timeout uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetQueuedCompletionStatus.Addr(), 5, uintptr(cphandle), uintptr(unsafe.Pointer(qty)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(overlapped)), uintptr(timeout), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetShortPathNameW.Addr(), 3, uintptr(unsafe.Pointer(longpath)), uintptr(unsafe.Pointer(shortpath)), uintptr(buflen)) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func getStartupInfo(startupInfo *StartupInfo) { + syscall.Syscall(procGetStartupInfoW.Addr(), 1, uintptr(unsafe.Pointer(startupInfo)), 0, 0) + return +} + +func GetStdHandle(stdhandle uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procGetStdHandle.Addr(), 1, uintptr(stdhandle), 0, 0) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func getSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetSystemDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0) + len = uint32(r0) + if len == 0 { + err = errnoErr(e1) + } + return +} + +func getSystemPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetSystemPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetSystemTimeAsFileTime(time *Filetime) { + syscall.Syscall(procGetSystemTimeAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0) + return +} + +func GetSystemTimePreciseAsFileTime(time *Filetime) { + syscall.Syscall(procGetSystemTimePreciseAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0) + return +} + +func getSystemWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetSystemWindowsDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0) + len = uint32(r0) + if len == 0 { + err = errnoErr(e1) + } + return +} + +func GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetTempPathW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func getThreadPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetThreadPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func getTickCount64() (ms uint64) { + r0, _, _ := syscall.Syscall(procGetTickCount64.Addr(), 0, 0, 0, 0) + ms = uint64(r0) + return +} + +func GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetTimeZoneInformation.Addr(), 1, uintptr(unsafe.Pointer(tzi)), 0, 0) + rc = uint32(r0) + if rc == 0xffffffff { + err = errnoErr(e1) + } + return +} + +func getUserPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetUserPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetVersion() (ver uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetVersion.Addr(), 0, 0, 0, 0) + ver = uint32(r0) + if ver == 0 { + err = errnoErr(e1) + } + return +} + +func GetVolumeInformationByHandle(file Handle, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procGetVolumeInformationByHandleW.Addr(), 8, uintptr(file), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetVolumeInformation(rootPathName *uint16, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procGetVolumeInformationW.Addr(), 8, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetVolumeNameForVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16, bufferlength uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetVolumeNameForVolumeMountPointW.Addr(), 3, uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferlength)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetVolumePathName(fileName *uint16, volumePathName *uint16, bufferLength uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetVolumePathNameW.Addr(), 3, uintptr(unsafe.Pointer(fileName)), uintptr(unsafe.Pointer(volumePathName)), uintptr(bufferLength)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetVolumePathNamesForVolumeName(volumeName *uint16, volumePathNames *uint16, bufferLength uint32, returnLength *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetVolumePathNamesForVolumeNameW.Addr(), 4, uintptr(unsafe.Pointer(volumeName)), uintptr(unsafe.Pointer(volumePathNames)), uintptr(bufferLength), uintptr(unsafe.Pointer(returnLength)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func getWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetWindowsDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0) + len = uint32(r0) + if len == 0 { + err = errnoErr(e1) + } + return +} + +func initializeProcThreadAttributeList(attrlist *ProcThreadAttributeList, attrcount uint32, flags uint32, size *uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procInitializeProcThreadAttributeList.Addr(), 4, uintptr(unsafe.Pointer(attrlist)), uintptr(attrcount), uintptr(flags), uintptr(unsafe.Pointer(size)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func IsWow64Process(handle Handle, isWow64 *bool) (err error) { + var _p0 uint32 + if *isWow64 { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall(procIsWow64Process.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(&_p0)), 0) + *isWow64 = _p0 != 0 + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func IsWow64Process2(handle Handle, processMachine *uint16, nativeMachine *uint16) (err error) { + err = procIsWow64Process2.Find() + if err != nil { + return + } + r1, _, e1 := syscall.Syscall(procIsWow64Process2.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(processMachine)), uintptr(unsafe.Pointer(nativeMachine))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(libname) + if err != nil { + return + } + return _LoadLibraryEx(_p0, zero, flags) +} + +func _LoadLibraryEx(libname *uint16, zero Handle, flags uintptr) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procLoadLibraryExW.Addr(), 3, uintptr(unsafe.Pointer(libname)), uintptr(zero), uintptr(flags)) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func LoadLibrary(libname string) (handle Handle, err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(libname) + if err != nil { + return + } + return _LoadLibrary(_p0) +} + +func _LoadLibrary(libname *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procLoadLibraryW.Addr(), 1, uintptr(unsafe.Pointer(libname)), 0, 0) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func LoadResource(module Handle, resInfo Handle) (resData Handle, err error) { + r0, _, e1 := syscall.Syscall(procLoadResource.Addr(), 2, uintptr(module), uintptr(resInfo), 0) + resData = Handle(r0) + if resData == 0 { + err = errnoErr(e1) + } + return +} + +func LocalAlloc(flags uint32, length uint32) (ptr uintptr, err error) { + r0, _, e1 := syscall.Syscall(procLocalAlloc.Addr(), 2, uintptr(flags), uintptr(length), 0) + ptr = uintptr(r0) + if ptr == 0 { + err = errnoErr(e1) + } + return +} + +func LocalFree(hmem Handle) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procLocalFree.Addr(), 1, uintptr(hmem), 0, 0) + handle = Handle(r0) + if handle != 0 { + err = errnoErr(e1) + } + return +} + +func LockFileEx(file Handle, flags uint32, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall6(procLockFileEx.Addr(), 6, uintptr(file), uintptr(flags), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func LockResource(resData Handle) (addr uintptr, err error) { + r0, _, e1 := syscall.Syscall(procLockResource.Addr(), 1, uintptr(resData), 0, 0) + addr = uintptr(r0) + if addr == 0 { + err = errnoErr(e1) + } + return +} + +func MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error) { + r0, _, e1 := syscall.Syscall6(procMapViewOfFile.Addr(), 5, uintptr(handle), uintptr(access), uintptr(offsetHigh), uintptr(offsetLow), uintptr(length), 0) + addr = uintptr(r0) + if addr == 0 { + err = errnoErr(e1) + } + return +} + +func Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procModule32FirstW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func Module32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procModule32NextW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procMoveFileExW.Addr(), 3, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), uintptr(flags)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func MoveFile(from *uint16, to *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procMoveFileW.Addr(), 2, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) { + r0, _, e1 := syscall.Syscall6(procMultiByteToWideChar.Addr(), 6, uintptr(codePage), uintptr(dwFlags), uintptr(unsafe.Pointer(str)), uintptr(nstr), uintptr(unsafe.Pointer(wchar)), uintptr(nwchar)) + nwrite = int32(r0) + if nwrite == 0 { + err = errnoErr(e1) + } + return +} + +func OpenEvent(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) { + var _p0 uint32 + if inheritHandle { + _p0 = 1 + } + r0, _, e1 := syscall.Syscall(procOpenEventW.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name))) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func OpenMutex(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) { + var _p0 uint32 + if inheritHandle { + _p0 = 1 + } + r0, _, e1 := syscall.Syscall(procOpenMutexW.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name))) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error) { + var _p0 uint32 + if inheritHandle { + _p0 = 1 + } + r0, _, e1 := syscall.Syscall(procOpenProcess.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(processId)) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func OpenThread(desiredAccess uint32, inheritHandle bool, threadId uint32) (handle Handle, err error) { + var _p0 uint32 + if inheritHandle { + _p0 = 1 + } + r0, _, e1 := syscall.Syscall(procOpenThread.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(threadId)) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uintptr, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall6(procPostQueuedCompletionStatus.Addr(), 4, uintptr(cphandle), uintptr(qty), uintptr(key), uintptr(unsafe.Pointer(overlapped)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procProcess32FirstW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procProcess32NextW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procProcessIdToSessionId.Addr(), 2, uintptr(pid), uintptr(unsafe.Pointer(sessionid)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func PulseEvent(event Handle) (err error) { + r1, _, e1 := syscall.Syscall(procPulseEvent.Addr(), 1, uintptr(event), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func PurgeComm(handle Handle, dwFlags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procPurgeComm.Addr(), 2, uintptr(handle), uintptr(dwFlags), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procQueryDosDeviceW.Addr(), 3, uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath)), uintptr(max)) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func QueryFullProcessImageName(proc Handle, flags uint32, exeName *uint16, size *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryFullProcessImageNameW.Addr(), 4, uintptr(proc), uintptr(flags), uintptr(unsafe.Pointer(exeName)), uintptr(unsafe.Pointer(size)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryInformationJobObject(job Handle, JobObjectInformationClass int32, JobObjectInformation uintptr, JobObjectInformationLength uint32, retlen *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryInformationJobObject.Addr(), 5, uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength), uintptr(unsafe.Pointer(retlen)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) { + r1, _, e1 := syscall.Syscall6(procReadConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(toread), uintptr(unsafe.Pointer(read)), uintptr(unsafe.Pointer(inputControl)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) { + var _p0 uint32 + if watchSubTree { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall9(procReadDirectoryChangesW.Addr(), 8, uintptr(handle), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(_p0), uintptr(mask), uintptr(unsafe.Pointer(retlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r1, _, e1 := syscall.Syscall6(procReadFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procReadProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesRead)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ReleaseMutex(mutex Handle) (err error) { + r1, _, e1 := syscall.Syscall(procReleaseMutex.Addr(), 1, uintptr(mutex), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func RemoveDirectory(path *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procRemoveDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func RemoveDllDirectory(cookie uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procRemoveDllDirectory.Addr(), 1, uintptr(cookie), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ResetEvent(event Handle) (err error) { + r1, _, e1 := syscall.Syscall(procResetEvent.Addr(), 1, uintptr(event), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func resizePseudoConsole(pconsole Handle, size uint32) (hr error) { + r0, _, _ := syscall.Syscall(procResizePseudoConsole.Addr(), 2, uintptr(pconsole), uintptr(size), 0) + if r0 != 0 { + hr = syscall.Errno(r0) + } + return +} + +func ResumeThread(thread Handle) (ret uint32, err error) { + r0, _, e1 := syscall.Syscall(procResumeThread.Addr(), 1, uintptr(thread), 0, 0) + ret = uint32(r0) + if ret == 0xffffffff { + err = errnoErr(e1) + } + return +} + +func SetCommBreak(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procSetCommBreak.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetCommMask(handle Handle, dwEvtMask uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetCommMask.Addr(), 2, uintptr(handle), uintptr(dwEvtMask), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetCommState(handle Handle, lpDCB *DCB) (err error) { + r1, _, e1 := syscall.Syscall(procSetCommState.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(lpDCB)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) { + r1, _, e1 := syscall.Syscall(procSetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetConsoleCP(cp uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetConsoleCP.Addr(), 1, uintptr(cp), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setConsoleCursorPosition(console Handle, position uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetConsoleCursorPosition.Addr(), 2, uintptr(console), uintptr(position), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetConsoleMode(console Handle, mode uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(console), uintptr(mode), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetConsoleOutputCP(cp uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetConsoleOutputCP.Addr(), 1, uintptr(cp), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetCurrentDirectory(path *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetCurrentDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetDefaultDllDirectories(directoryFlags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetDefaultDllDirectories.Addr(), 1, uintptr(directoryFlags), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetDllDirectory(path string) (err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(path) + if err != nil { + return + } + return _SetDllDirectory(_p0) +} + +func _SetDllDirectory(path *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetDllDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetEndOfFile(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procSetEndOfFile.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetEnvironmentVariable(name *uint16, value *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetEnvironmentVariableW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetErrorMode(mode uint32) (ret uint32) { + r0, _, _ := syscall.Syscall(procSetErrorMode.Addr(), 1, uintptr(mode), 0, 0) + ret = uint32(r0) + return +} + +func SetEvent(event Handle) (err error) { + r1, _, e1 := syscall.Syscall(procSetEvent.Addr(), 1, uintptr(event), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetFileAttributes(name *uint16, attrs uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetFileAttributesW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(attrs), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) { + r1, _, e1 := syscall.Syscall(procSetFileCompletionNotificationModes.Addr(), 2, uintptr(handle), uintptr(flags), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetFileInformationByHandle(handle Handle, class uint32, inBuffer *byte, inBufferLen uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetFileInformationByHandle.Addr(), 4, uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) { + r0, _, e1 := syscall.Syscall6(procSetFilePointer.Addr(), 4, uintptr(handle), uintptr(lowoffset), uintptr(unsafe.Pointer(highoffsetptr)), uintptr(whence), 0, 0) + newlowoffset = uint32(r0) + if newlowoffset == 0xffffffff { + err = errnoErr(e1) + } + return +} + +func SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) { + r1, _, e1 := syscall.Syscall6(procSetFileTime.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetFileValidData(handle Handle, validDataLength int64) (err error) { + r1, _, e1 := syscall.Syscall(procSetFileValidData.Addr(), 2, uintptr(handle), uintptr(validDataLength), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetHandleInformation.Addr(), 3, uintptr(handle), uintptr(mask), uintptr(flags)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetInformationJobObject(job Handle, JobObjectInformationClass uint32, JobObjectInformation uintptr, JobObjectInformationLength uint32) (ret int, err error) { + r0, _, e1 := syscall.Syscall6(procSetInformationJobObject.Addr(), 4, uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength), 0, 0) + ret = int(r0) + if ret == 0 { + err = errnoErr(e1) + } + return +} + +func SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetNamedPipeHandleState.Addr(), 4, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetPriorityClass(process Handle, priorityClass uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetPriorityClass.Addr(), 2, uintptr(process), uintptr(priorityClass), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetProcessPriorityBoost(process Handle, disable bool) (err error) { + var _p0 uint32 + if disable { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall(procSetProcessPriorityBoost.Addr(), 2, uintptr(process), uintptr(_p0), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetProcessShutdownParameters(level uint32, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetProcessShutdownParameters.Addr(), 2, uintptr(level), uintptr(flags), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr, dwMaximumWorkingSetSize uintptr, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetProcessWorkingSetSizeEx.Addr(), 4, uintptr(hProcess), uintptr(dwMinimumWorkingSetSize), uintptr(dwMaximumWorkingSetSize), uintptr(flags), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetStdHandle(stdhandle uint32, handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procSetStdHandle.Addr(), 2, uintptr(stdhandle), uintptr(handle), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetVolumeLabelW.Addr(), 2, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeName)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetVolumeMountPointW.Addr(), 2, uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupComm(handle Handle, dwInQueue uint32, dwOutQueue uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetupComm.Addr(), 3, uintptr(handle), uintptr(dwInQueue), uintptr(dwOutQueue)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SizeofResource(module Handle, resInfo Handle) (size uint32, err error) { + r0, _, e1 := syscall.Syscall(procSizeofResource.Addr(), 2, uintptr(module), uintptr(resInfo), 0) + size = uint32(r0) + if size == 0 { + err = errnoErr(e1) + } + return +} + +func SleepEx(milliseconds uint32, alertable bool) (ret uint32) { + var _p0 uint32 + if alertable { + _p0 = 1 + } + r0, _, _ := syscall.Syscall(procSleepEx.Addr(), 2, uintptr(milliseconds), uintptr(_p0), 0) + ret = uint32(r0) + return +} + +func TerminateJobObject(job Handle, exitCode uint32) (err error) { + r1, _, e1 := syscall.Syscall(procTerminateJobObject.Addr(), 2, uintptr(job), uintptr(exitCode), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func TerminateProcess(handle Handle, exitcode uint32) (err error) { + r1, _, e1 := syscall.Syscall(procTerminateProcess.Addr(), 2, uintptr(handle), uintptr(exitcode), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func Thread32First(snapshot Handle, threadEntry *ThreadEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procThread32First.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func Thread32Next(snapshot Handle, threadEntry *ThreadEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procThread32Next.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func UnlockFileEx(file Handle, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall6(procUnlockFileEx.Addr(), 5, uintptr(file), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func UnmapViewOfFile(addr uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procUnmapViewOfFile.Addr(), 1, uintptr(addr), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func updateProcThreadAttribute(attrlist *ProcThreadAttributeList, flags uint32, attr uintptr, value unsafe.Pointer, size uintptr, prevvalue unsafe.Pointer, returnedsize *uintptr) (err error) { + r1, _, e1 := syscall.Syscall9(procUpdateProcThreadAttribute.Addr(), 7, uintptr(unsafe.Pointer(attrlist)), uintptr(flags), uintptr(attr), uintptr(value), uintptr(size), uintptr(prevvalue), uintptr(unsafe.Pointer(returnedsize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) { + r0, _, e1 := syscall.Syscall6(procVirtualAlloc.Addr(), 4, uintptr(address), uintptr(size), uintptr(alloctype), uintptr(protect), 0, 0) + value = uintptr(r0) + if value == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualFree.Addr(), 3, uintptr(address), uintptr(size), uintptr(freetype)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualLock(addr uintptr, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualLock.Addr(), 2, uintptr(addr), uintptr(length), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procVirtualProtect.Addr(), 4, uintptr(address), uintptr(size), uintptr(newprotect), uintptr(unsafe.Pointer(oldprotect)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procVirtualProtectEx.Addr(), 5, uintptr(process), uintptr(address), uintptr(size), uintptr(newProtect), uintptr(unsafe.Pointer(oldProtect)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualQuery.Addr(), 3, uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procVirtualQueryEx.Addr(), 4, uintptr(process), uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualUnlock(addr uintptr, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualUnlock.Addr(), 2, uintptr(addr), uintptr(length), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func WTSGetActiveConsoleSessionId() (sessionID uint32) { + r0, _, _ := syscall.Syscall(procWTSGetActiveConsoleSessionId.Addr(), 0, 0, 0, 0) + sessionID = uint32(r0) + return +} + +func WaitCommEvent(handle Handle, lpEvtMask *uint32, lpOverlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall(procWaitCommEvent.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(lpEvtMask)), uintptr(unsafe.Pointer(lpOverlapped))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func waitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMilliseconds uint32) (event uint32, err error) { + var _p0 uint32 + if waitAll { + _p0 = 1 + } + r0, _, e1 := syscall.Syscall6(procWaitForMultipleObjects.Addr(), 4, uintptr(count), uintptr(handles), uintptr(_p0), uintptr(waitMilliseconds), 0, 0) + event = uint32(r0) + if event == 0xffffffff { + err = errnoErr(e1) + } + return +} + +func WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) { + r0, _, e1 := syscall.Syscall(procWaitForSingleObject.Addr(), 2, uintptr(handle), uintptr(waitMilliseconds), 0) + event = uint32(r0) + if event == 0xffffffff { + err = errnoErr(e1) + } + return +} + +func WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) { + r1, _, e1 := syscall.Syscall6(procWriteConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(towrite), uintptr(unsafe.Pointer(written)), uintptr(unsafe.Pointer(reserved)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r1, _, e1 := syscall.Syscall6(procWriteFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procWriteProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesWritten)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall9(procAcceptEx.Addr(), 8, uintptr(ls), uintptr(as), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) { + syscall.Syscall9(procGetAcceptExSockaddrs.Addr(), 8, uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(lrsa)), uintptr(unsafe.Pointer(lrsalen)), uintptr(unsafe.Pointer(rrsa)), uintptr(unsafe.Pointer(rrsalen)), 0) + return +} + +func TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procTransmitFile.Addr(), 7, uintptr(s), uintptr(handle), uintptr(bytesToWrite), uintptr(bytsPerSend), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(transmitFileBuf)), uintptr(flags), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func NetApiBufferFree(buf *byte) (neterr error) { + r0, _, _ := syscall.Syscall(procNetApiBufferFree.Addr(), 1, uintptr(unsafe.Pointer(buf)), 0, 0) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + +func NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) { + r0, _, _ := syscall.Syscall(procNetGetJoinInformation.Addr(), 3, uintptr(unsafe.Pointer(server)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bufType))) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + +func NetUserEnum(serverName *uint16, level uint32, filter uint32, buf **byte, prefMaxLen uint32, entriesRead *uint32, totalEntries *uint32, resumeHandle *uint32) (neterr error) { + r0, _, _ := syscall.Syscall9(procNetUserEnum.Addr(), 8, uintptr(unsafe.Pointer(serverName)), uintptr(level), uintptr(filter), uintptr(unsafe.Pointer(buf)), uintptr(prefMaxLen), uintptr(unsafe.Pointer(entriesRead)), uintptr(unsafe.Pointer(totalEntries)), uintptr(unsafe.Pointer(resumeHandle)), 0) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + +func NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) { + r0, _, _ := syscall.Syscall6(procNetUserGetInfo.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(userName)), uintptr(level), uintptr(unsafe.Pointer(buf)), 0, 0) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + +func NtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, allocationSize *int64, attributes uint32, share uint32, disposition uint32, options uint32, eabuffer uintptr, ealength uint32) (ntstatus error) { + r0, _, _ := syscall.Syscall12(procNtCreateFile.Addr(), 11, uintptr(unsafe.Pointer(handle)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(allocationSize)), uintptr(attributes), uintptr(share), uintptr(disposition), uintptr(options), uintptr(eabuffer), uintptr(ealength), 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (ntstatus error) { + r0, _, _ := syscall.Syscall15(procNtCreateNamedPipeFile.Addr(), 14, uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout)), 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32, retLen *uint32) (ntstatus error) { + r0, _, _ := syscall.Syscall6(procNtQueryInformationProcess.Addr(), 5, uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), uintptr(unsafe.Pointer(retLen)), 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) { + r0, _, _ := syscall.Syscall6(procNtQuerySystemInformation.Addr(), 4, uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen), uintptr(unsafe.Pointer(retLen)), 0, 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) { + r0, _, _ := syscall.Syscall6(procNtSetInformationFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), uintptr(class), 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) { + r0, _, _ := syscall.Syscall6(procNtSetInformationProcess.Addr(), 4, uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), 0, 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) { + r0, _, _ := syscall.Syscall(procNtSetSystemInformation.Addr(), 3, uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen)) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) { + r0, _, _ := syscall.Syscall(procRtlAddFunctionTable.Addr(), 3, uintptr(unsafe.Pointer(functionTable)), uintptr(entryCount), uintptr(baseAddress)) + ret = r0 != 0 + return +} + +func RtlDefaultNpAcl(acl **ACL) (ntstatus error) { + r0, _, _ := syscall.Syscall(procRtlDefaultNpAcl.Addr(), 1, uintptr(unsafe.Pointer(acl)), 0, 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) { + r0, _, _ := syscall.Syscall(procRtlDeleteFunctionTable.Addr(), 1, uintptr(unsafe.Pointer(functionTable)), 0, 0) + ret = r0 != 0 + return +} + +func RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) { + r0, _, _ := syscall.Syscall6(procRtlDosPathNameToNtPathName_U_WithStatus.Addr(), 4, uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName)), 0, 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func RtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) { + r0, _, _ := syscall.Syscall6(procRtlDosPathNameToRelativeNtPathName_U_WithStatus.Addr(), 4, uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName)), 0, 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func RtlGetCurrentPeb() (peb *PEB) { + r0, _, _ := syscall.Syscall(procRtlGetCurrentPeb.Addr(), 0, 0, 0, 0) + peb = (*PEB)(unsafe.Pointer(r0)) + return +} + +func rtlGetNtVersionNumbers(majorVersion *uint32, minorVersion *uint32, buildNumber *uint32) { + syscall.Syscall(procRtlGetNtVersionNumbers.Addr(), 3, uintptr(unsafe.Pointer(majorVersion)), uintptr(unsafe.Pointer(minorVersion)), uintptr(unsafe.Pointer(buildNumber))) + return +} + +func rtlGetVersion(info *OsVersionInfoEx) (ntstatus error) { + r0, _, _ := syscall.Syscall(procRtlGetVersion.Addr(), 1, uintptr(unsafe.Pointer(info)), 0, 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func RtlInitString(destinationString *NTString, sourceString *byte) { + syscall.Syscall(procRtlInitString.Addr(), 2, uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString)), 0) + return +} + +func RtlInitUnicodeString(destinationString *NTUnicodeString, sourceString *uint16) { + syscall.Syscall(procRtlInitUnicodeString.Addr(), 2, uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString)), 0) + return +} + +func rtlNtStatusToDosErrorNoTeb(ntstatus NTStatus) (ret syscall.Errno) { + r0, _, _ := syscall.Syscall(procRtlNtStatusToDosErrorNoTeb.Addr(), 1, uintptr(ntstatus), 0, 0) + ret = syscall.Errno(r0) + return +} + +func clsidFromString(lpsz *uint16, pclsid *GUID) (ret error) { + r0, _, _ := syscall.Syscall(procCLSIDFromString.Addr(), 2, uintptr(unsafe.Pointer(lpsz)), uintptr(unsafe.Pointer(pclsid)), 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func coCreateGuid(pguid *GUID) (ret error) { + r0, _, _ := syscall.Syscall(procCoCreateGuid.Addr(), 1, uintptr(unsafe.Pointer(pguid)), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func CoGetObject(name *uint16, bindOpts *BIND_OPTS3, guid *GUID, functionTable **uintptr) (ret error) { + r0, _, _ := syscall.Syscall6(procCoGetObject.Addr(), 4, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bindOpts)), uintptr(unsafe.Pointer(guid)), uintptr(unsafe.Pointer(functionTable)), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func CoInitializeEx(reserved uintptr, coInit uint32) (ret error) { + r0, _, _ := syscall.Syscall(procCoInitializeEx.Addr(), 2, uintptr(reserved), uintptr(coInit), 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func CoTaskMemFree(address unsafe.Pointer) { + syscall.Syscall(procCoTaskMemFree.Addr(), 1, uintptr(address), 0, 0) + return +} + +func CoUninitialize() { + syscall.Syscall(procCoUninitialize.Addr(), 0, 0, 0, 0) + return +} + +func stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) { + r0, _, _ := syscall.Syscall(procStringFromGUID2.Addr(), 3, uintptr(unsafe.Pointer(rguid)), uintptr(unsafe.Pointer(lpsz)), uintptr(cchMax)) + chars = int32(r0) + return +} + +func EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procEnumProcessModules.Addr(), 4, uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procEnumProcessModulesEx.Addr(), 5, uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), uintptr(filterFlag), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func enumProcesses(processIds *uint32, nSize uint32, bytesReturned *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procEnumProcesses.Addr(), 3, uintptr(unsafe.Pointer(processIds)), uintptr(nSize), uintptr(unsafe.Pointer(bytesReturned))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetModuleBaseNameW.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(baseName)), uintptr(size), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetModuleFileNameExW.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetModuleInformation.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(modinfo)), uintptr(cb), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryWorkingSetEx(process Handle, pv uintptr, cb uint32) (err error) { + r1, _, e1 := syscall.Syscall(procQueryWorkingSetEx.Addr(), 3, uintptr(process), uintptr(pv), uintptr(cb)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SubscribeServiceChangeNotifications(service Handle, eventType uint32, callback uintptr, callbackCtx uintptr, subscription *uintptr) (ret error) { + ret = procSubscribeServiceChangeNotifications.Find() + if ret != nil { + return + } + r0, _, _ := syscall.Syscall6(procSubscribeServiceChangeNotifications.Addr(), 5, uintptr(service), uintptr(eventType), uintptr(callback), uintptr(callbackCtx), uintptr(unsafe.Pointer(subscription)), 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func UnsubscribeServiceChangeNotifications(subscription uintptr) (err error) { + err = procUnsubscribeServiceChangeNotifications.Find() + if err != nil { + return + } + syscall.Syscall(procUnsubscribeServiceChangeNotifications.Addr(), 1, uintptr(subscription), 0, 0) + return +} + +func GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetUserNameExW.Addr(), 3, uintptr(nameFormat), uintptr(unsafe.Pointer(nameBuffre)), uintptr(unsafe.Pointer(nSize))) + if r1&0xff == 0 { + err = errnoErr(e1) + } + return +} + +func TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procTranslateNameW.Addr(), 5, uintptr(unsafe.Pointer(accName)), uintptr(accNameFormat), uintptr(desiredNameFormat), uintptr(unsafe.Pointer(translatedName)), uintptr(unsafe.Pointer(nSize)), 0) + if r1&0xff == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiBuildDriverInfoList.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiCallClassInstaller.Addr(), 3, uintptr(installFunction), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiCancelDriverInfoSearch.Addr(), 1, uintptr(deviceInfoSet), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGuidListSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiClassGuidsFromNameExW.Addr(), 6, uintptr(unsafe.Pointer(className)), uintptr(unsafe.Pointer(classGuidList)), uintptr(classGuidListSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiClassNameFromGuidExW.Addr(), 6, uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(className)), uintptr(classNameSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName *uint16, reserved uintptr) (handle DevInfo, err error) { + r0, _, e1 := syscall.Syscall6(procSetupDiCreateDeviceInfoListExW.Addr(), 4, uintptr(unsafe.Pointer(classGUID)), uintptr(hwndParent), uintptr(unsafe.Pointer(machineName)), uintptr(reserved), 0, 0) + handle = DevInfo(r0) + if handle == DevInfo(InvalidHandle) { + err = errnoErr(e1) + } + return +} + +func setupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUID *GUID, DeviceDescription *uint16, hwndParent uintptr, CreationFlags DICD, deviceInfoData *DevInfoData) (err error) { + r1, _, e1 := syscall.Syscall9(procSetupDiCreateDeviceInfoW.Addr(), 7, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(DeviceName)), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(DeviceDescription)), uintptr(hwndParent), uintptr(CreationFlags), uintptr(unsafe.Pointer(deviceInfoData)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiDestroyDeviceInfoList.Addr(), 1, uintptr(deviceInfoSet), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiDestroyDriverInfoList.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfoData *DevInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiEnumDeviceInfo.Addr(), 3, uintptr(deviceInfoSet), uintptr(memberIndex), uintptr(unsafe.Pointer(deviceInfoData))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex uint32, driverInfoData *DrvInfoData) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiEnumDriverInfoW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType), uintptr(memberIndex), uintptr(unsafe.Pointer(driverInfoData)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, deviceInfoSet DevInfo, machineName *uint16, reserved uintptr) (handle DevInfo, err error) { + r0, _, e1 := syscall.Syscall9(procSetupDiGetClassDevsExW.Addr(), 7, uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(Enumerator)), uintptr(hwndParent), uintptr(Flags), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(machineName)), uintptr(reserved), 0, 0) + handle = DevInfo(r0) + if handle == DevInfo(InvalidHandle) { + err = errnoErr(e1) + } + return +} + +func SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiGetClassInstallParamsW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), uintptr(unsafe.Pointer(requiredSize)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInfoListDetailW.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoSetDetailData)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, instanceId *uint16, instanceIdSize uint32, instanceIdRequiredSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiGetDeviceInstanceIdW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(instanceId)), uintptr(instanceIdSize), uintptr(unsafe.Pointer(instanceIdRequiredSize)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY, propertyType *DEVPROPTYPE, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procSetupDiGetDevicePropertyW.Addr(), 8, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(propertyKey)), uintptr(unsafe.Pointer(propertyType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(flags), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyRegDataType *uint32, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procSetupDiGetDeviceRegistryPropertyW.Addr(), 7, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyRegDataType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData, driverInfoDetailData *DrvInfoDetailData, driverInfoDetailDataSize uint32, requiredSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiGetDriverInfoDetailW.Addr(), 6, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)), uintptr(unsafe.Pointer(driverInfoDetailData)), uintptr(driverInfoDetailDataSize), uintptr(unsafe.Pointer(requiredSize))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiGetSelectedDevice.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiGetSelectedDriverW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key Handle, err error) { + r0, _, e1 := syscall.Syscall6(procSetupDiOpenDevRegKey.Addr(), 6, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(Scope), uintptr(HwProfile), uintptr(KeyType), uintptr(samDesired)) + key = Handle(r0) + if key == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func SetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiSetClassInstallParamsW.Addr(), 4, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiSetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffer *byte, propertyBufferSize uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiSetDeviceRegistryPropertyW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiSetSelectedDevice.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiSetSelectedDriverW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procSetupUninstallOEMInfW.Addr(), 3, uintptr(unsafe.Pointer(infFileName)), uintptr(flags), uintptr(reserved)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func commandLineToArgv(cmd *uint16, argc *int32) (argv **uint16, err error) { + r0, _, e1 := syscall.Syscall(procCommandLineToArgvW.Addr(), 2, uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc)), 0) + argv = (**uint16)(unsafe.Pointer(r0)) + if argv == nil { + err = errnoErr(e1) + } + return +} + +func shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) { + r0, _, _ := syscall.Syscall6(procSHGetKnownFolderPath.Addr(), 4, uintptr(unsafe.Pointer(id)), uintptr(flags), uintptr(token), uintptr(unsafe.Pointer(path)), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) { + r1, _, e1 := syscall.Syscall6(procShellExecuteW.Addr(), 6, uintptr(hwnd), uintptr(unsafe.Pointer(verb)), uintptr(unsafe.Pointer(file)), uintptr(unsafe.Pointer(args)), uintptr(unsafe.Pointer(cwd)), uintptr(showCmd)) + if r1 <= 32 { + err = errnoErr(e1) + } + return +} + +func EnumChildWindows(hwnd HWND, enumFunc uintptr, param unsafe.Pointer) { + syscall.Syscall(procEnumChildWindows.Addr(), 3, uintptr(hwnd), uintptr(enumFunc), uintptr(param)) + return +} + +func EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) { + r1, _, e1 := syscall.Syscall(procEnumWindows.Addr(), 2, uintptr(enumFunc), uintptr(param), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ExitWindowsEx(flags uint32, reason uint32) (err error) { + r1, _, e1 := syscall.Syscall(procExitWindowsEx.Addr(), 2, uintptr(flags), uintptr(reason), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, err error) { + r0, _, e1 := syscall.Syscall(procGetClassNameW.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(className)), uintptr(maxCount)) + copied = int32(r0) + if copied == 0 { + err = errnoErr(e1) + } + return +} + +func GetDesktopWindow() (hwnd HWND) { + r0, _, _ := syscall.Syscall(procGetDesktopWindow.Addr(), 0, 0, 0, 0) + hwnd = HWND(r0) + return +} + +func GetForegroundWindow() (hwnd HWND) { + r0, _, _ := syscall.Syscall(procGetForegroundWindow.Addr(), 0, 0, 0, 0) + hwnd = HWND(r0) + return +} + +func GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) { + r1, _, e1 := syscall.Syscall(procGetGUIThreadInfo.Addr(), 2, uintptr(thread), uintptr(unsafe.Pointer(info)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetKeyboardLayout(tid uint32) (hkl Handle) { + r0, _, _ := syscall.Syscall(procGetKeyboardLayout.Addr(), 1, uintptr(tid), 0, 0) + hkl = Handle(r0) + return +} + +func GetShellWindow() (shellWindow HWND) { + r0, _, _ := syscall.Syscall(procGetShellWindow.Addr(), 0, 0, 0, 0) + shellWindow = HWND(r0) + return +} + +func GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetWindowThreadProcessId.Addr(), 2, uintptr(hwnd), uintptr(unsafe.Pointer(pid)), 0) + tid = uint32(r0) + if tid == 0 { + err = errnoErr(e1) + } + return +} + +func IsWindow(hwnd HWND) (isWindow bool) { + r0, _, _ := syscall.Syscall(procIsWindow.Addr(), 1, uintptr(hwnd), 0, 0) + isWindow = r0 != 0 + return +} + +func IsWindowUnicode(hwnd HWND) (isUnicode bool) { + r0, _, _ := syscall.Syscall(procIsWindowUnicode.Addr(), 1, uintptr(hwnd), 0, 0) + isUnicode = r0 != 0 + return +} + +func IsWindowVisible(hwnd HWND) (isVisible bool) { + r0, _, _ := syscall.Syscall(procIsWindowVisible.Addr(), 1, uintptr(hwnd), 0, 0) + isVisible = r0 != 0 + return +} + +func LoadKeyboardLayout(name *uint16, flags uint32) (hkl Handle, err error) { + r0, _, e1 := syscall.Syscall(procLoadKeyboardLayoutW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(flags), 0) + hkl = Handle(r0) + if hkl == 0 { + err = errnoErr(e1) + } + return +} + +func MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) { + r0, _, e1 := syscall.Syscall6(procMessageBoxW.Addr(), 4, uintptr(hwnd), uintptr(unsafe.Pointer(text)), uintptr(unsafe.Pointer(caption)), uintptr(boxtype), 0, 0) + ret = int32(r0) + if ret == 0 { + err = errnoErr(e1) + } + return +} + +func ToUnicodeEx(vkey uint32, scancode uint32, keystate *byte, pwszBuff *uint16, cchBuff int32, flags uint32, hkl Handle) (ret int32) { + r0, _, _ := syscall.Syscall9(procToUnicodeEx.Addr(), 7, uintptr(vkey), uintptr(scancode), uintptr(unsafe.Pointer(keystate)), uintptr(unsafe.Pointer(pwszBuff)), uintptr(cchBuff), uintptr(flags), uintptr(hkl), 0, 0) + ret = int32(r0) + return +} + +func UnloadKeyboardLayout(hkl Handle) (err error) { + r1, _, e1 := syscall.Syscall(procUnloadKeyboardLayout.Addr(), 1, uintptr(hkl), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) (err error) { + var _p0 uint32 + if inheritExisting { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall(procCreateEnvironmentBlock.Addr(), 3, uintptr(unsafe.Pointer(block)), uintptr(token), uintptr(_p0)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func DestroyEnvironmentBlock(block *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procDestroyEnvironmentBlock.Addr(), 1, uintptr(unsafe.Pointer(block)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetUserProfileDirectoryW.Addr(), 3, uintptr(t), uintptr(unsafe.Pointer(dir)), uintptr(unsafe.Pointer(dirLen))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetFileVersionInfoSize(filename string, zeroHandle *Handle) (bufSize uint32, err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(filename) + if err != nil { + return + } + return _GetFileVersionInfoSize(_p0, zeroHandle) +} + +func _GetFileVersionInfoSize(filename *uint16, zeroHandle *Handle) (bufSize uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetFileVersionInfoSizeW.Addr(), 2, uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(zeroHandle)), 0) + bufSize = uint32(r0) + if bufSize == 0 { + err = errnoErr(e1) + } + return +} + +func GetFileVersionInfo(filename string, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(filename) + if err != nil { + return + } + return _GetFileVersionInfo(_p0, handle, bufSize, buffer) +} + +func _GetFileVersionInfo(filename *uint16, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) { + r1, _, e1 := syscall.Syscall6(procGetFileVersionInfoW.Addr(), 4, uintptr(unsafe.Pointer(filename)), uintptr(handle), uintptr(bufSize), uintptr(buffer), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(subBlock) + if err != nil { + return + } + return _VerQueryValue(block, _p0, pointerToBufferPointer, bufSize) +} + +func _VerQueryValue(block unsafe.Pointer, subBlock *uint16, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procVerQueryValueW.Addr(), 4, uintptr(block), uintptr(unsafe.Pointer(subBlock)), uintptr(pointerToBufferPointer), uintptr(unsafe.Pointer(bufSize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func TimeBeginPeriod(period uint32) (err error) { + r1, _, e1 := syscall.Syscall(proctimeBeginPeriod.Addr(), 1, uintptr(period), 0, 0) + if r1 != 0 { + err = errnoErr(e1) + } + return +} + +func TimeEndPeriod(period uint32) (err error) { + r1, _, e1 := syscall.Syscall(proctimeEndPeriod.Addr(), 1, uintptr(period), 0, 0) + if r1 != 0 { + err = errnoErr(e1) + } + return +} + +func WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) { + r0, _, _ := syscall.Syscall(procWinVerifyTrustEx.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(actionId)), uintptr(unsafe.Pointer(data))) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func FreeAddrInfoW(addrinfo *AddrinfoW) { + syscall.Syscall(procFreeAddrInfoW.Addr(), 1, uintptr(unsafe.Pointer(addrinfo)), 0, 0) + return +} + +func GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) { + r0, _, _ := syscall.Syscall6(procGetAddrInfoW.Addr(), 4, uintptr(unsafe.Pointer(nodename)), uintptr(unsafe.Pointer(servicename)), uintptr(unsafe.Pointer(hints)), uintptr(unsafe.Pointer(result)), 0, 0) + if r0 != 0 { + sockerr = syscall.Errno(r0) + } + return +} + +func WSACleanup() (err error) { + r1, _, e1 := syscall.Syscall(procWSACleanup.Addr(), 0, 0, 0, 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSADuplicateSocket(s Handle, processID uint32, info *WSAProtocolInfo) (err error) { + r1, _, e1 := syscall.Syscall(procWSADuplicateSocketW.Addr(), 3, uintptr(s), uintptr(processID), uintptr(unsafe.Pointer(info))) + if r1 != 0 { + err = errnoErr(e1) + } + return +} + +func WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) { + r0, _, e1 := syscall.Syscall(procWSAEnumProtocolsW.Addr(), 3, uintptr(unsafe.Pointer(protocols)), uintptr(unsafe.Pointer(protocolBuffer)), uintptr(unsafe.Pointer(bufferLength))) + n = int32(r0) + if n == -1 { + err = errnoErr(e1) + } + return +} + +func WSAGetOverlappedResult(h Handle, o *Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) { + var _p0 uint32 + if wait { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall6(procWSAGetOverlappedResult.Addr(), 5, uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) { + r1, _, e1 := syscall.Syscall9(procWSAIoctl.Addr(), 9, uintptr(s), uintptr(iocc), uintptr(unsafe.Pointer(inbuf)), uintptr(cbif), uintptr(unsafe.Pointer(outbuf)), uintptr(cbob), uintptr(unsafe.Pointer(cbbr)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine)) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSALookupServiceBegin(querySet *WSAQUERYSET, flags uint32, handle *Handle) (err error) { + r1, _, e1 := syscall.Syscall(procWSALookupServiceBeginW.Addr(), 3, uintptr(unsafe.Pointer(querySet)), uintptr(flags), uintptr(unsafe.Pointer(handle))) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSALookupServiceEnd(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procWSALookupServiceEnd.Addr(), 1, uintptr(handle), 0, 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSALookupServiceNext(handle Handle, flags uint32, size *int32, querySet *WSAQUERYSET) (err error) { + r1, _, e1 := syscall.Syscall6(procWSALookupServiceNextW.Addr(), 4, uintptr(handle), uintptr(flags), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(querySet)), 0, 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSARecv.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSARecvFrom.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSASend.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSASendTo.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(to)), uintptr(tolen), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, group uint32, flags uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procWSASocketW.Addr(), 6, uintptr(af), uintptr(typ), uintptr(protocol), uintptr(unsafe.Pointer(protoInfo)), uintptr(group), uintptr(flags)) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func WSAStartup(verreq uint32, data *WSAData) (sockerr error) { + r0, _, _ := syscall.Syscall(procWSAStartup.Addr(), 2, uintptr(verreq), uintptr(unsafe.Pointer(data)), 0) + if r0 != 0 { + sockerr = syscall.Errno(r0) + } + return +} + +func bind(s Handle, name unsafe.Pointer, namelen int32) (err error) { + r1, _, e1 := syscall.Syscall(procbind.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func Closesocket(s Handle) (err error) { + r1, _, e1 := syscall.Syscall(procclosesocket.Addr(), 1, uintptr(s), 0, 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func connect(s Handle, name unsafe.Pointer, namelen int32) (err error) { + r1, _, e1 := syscall.Syscall(procconnect.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func GetHostByName(name string) (h *Hostent, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(name) + if err != nil { + return + } + return _GetHostByName(_p0) +} + +func _GetHostByName(name *byte) (h *Hostent, err error) { + r0, _, e1 := syscall.Syscall(procgethostbyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + h = (*Hostent)(unsafe.Pointer(r0)) + if h == nil { + err = errnoErr(e1) + } + return +} + +func getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { + r1, _, e1 := syscall.Syscall(procgetpeername.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func GetProtoByName(name string) (p *Protoent, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(name) + if err != nil { + return + } + return _GetProtoByName(_p0) +} + +func _GetProtoByName(name *byte) (p *Protoent, err error) { + r0, _, e1 := syscall.Syscall(procgetprotobyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + p = (*Protoent)(unsafe.Pointer(r0)) + if p == nil { + err = errnoErr(e1) + } + return +} + +func GetServByName(name string, proto string) (s *Servent, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(name) + if err != nil { + return + } + var _p1 *byte + _p1, err = syscall.BytePtrFromString(proto) + if err != nil { + return + } + return _GetServByName(_p0, _p1) +} + +func _GetServByName(name *byte, proto *byte) (s *Servent, err error) { + r0, _, e1 := syscall.Syscall(procgetservbyname.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(proto)), 0) + s = (*Servent)(unsafe.Pointer(r0)) + if s == nil { + err = errnoErr(e1) + } + return +} + +func getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { + r1, _, e1 := syscall.Syscall(procgetsockname.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) { + r1, _, e1 := syscall.Syscall6(procgetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(unsafe.Pointer(optlen)), 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func listen(s Handle, backlog int32) (err error) { + r1, _, e1 := syscall.Syscall(proclisten.Addr(), 2, uintptr(s), uintptr(backlog), 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func Ntohs(netshort uint16) (u uint16) { + r0, _, _ := syscall.Syscall(procntohs.Addr(), 1, uintptr(netshort), 0, 0) + u = uint16(r0) + return +} + +func recvfrom(s Handle, buf []byte, flags int32, from *RawSockaddrAny, fromlen *int32) (n int32, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := syscall.Syscall6(procrecvfrom.Addr(), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int32(r0) + if n == -1 { + err = errnoErr(e1) + } + return +} + +func sendto(s Handle, buf []byte, flags int32, to unsafe.Pointer, tolen int32) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r1, _, e1 := syscall.Syscall6(procsendto.Addr(), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(tolen)) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) { + r1, _, e1 := syscall.Syscall6(procsetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(optlen), 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func shutdown(s Handle, how int32) (err error) { + r1, _, e1 := syscall.Syscall(procshutdown.Addr(), 2, uintptr(s), uintptr(how), 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func socket(af int32, typ int32, protocol int32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procsocket.Addr(), 3, uintptr(af), uintptr(typ), uintptr(protocol)) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessions **WTS_SESSION_INFO, count *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procWTSEnumerateSessionsW.Addr(), 5, uintptr(handle), uintptr(reserved), uintptr(version), uintptr(unsafe.Pointer(sessions)), uintptr(unsafe.Pointer(count)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func WTSFreeMemory(ptr uintptr) { + syscall.Syscall(procWTSFreeMemory.Addr(), 1, uintptr(ptr), 0, 0) + return +} + +func WTSQueryUserToken(session uint32, token *Token) (err error) { + r1, _, e1 := syscall.Syscall(procWTSQueryUserToken.Addr(), 2, uintptr(session), uintptr(unsafe.Pointer(token)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go b/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go index 6e34df4..89f5097 100644 --- a/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go +++ b/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go @@ -207,6 +207,9 @@ func childrenOf(n ast.Node) []ast.Node { return false // no recursion }) + // TODO(adonovan): be more careful about missing (!Pos.Valid) + // tokens in trees produced from invalid input. + // Then add fake Nodes for bare tokens. switch n := n.(type) { case *ast.ArrayType: @@ -226,9 +229,12 @@ func childrenOf(n ast.Node) []ast.Node { children = append(children, tok(n.OpPos, len(n.Op.String()))) case *ast.BlockStmt: - children = append(children, - tok(n.Lbrace, len("{")), - tok(n.Rbrace, len("}"))) + if n.Lbrace.IsValid() { + children = append(children, tok(n.Lbrace, len("{"))) + } + if n.Rbrace.IsValid() { + children = append(children, tok(n.Rbrace, len("}"))) + } case *ast.BranchStmt: children = append(children, @@ -304,9 +310,12 @@ func childrenOf(n ast.Node) []ast.Node { // TODO(adonovan): Field.{Doc,Comment,Tag}? case *ast.FieldList: - children = append(children, - tok(n.Opening, len("(")), // or len("[") - tok(n.Closing, len(")"))) // or len("]") + if n.Opening.IsValid() { + children = append(children, tok(n.Opening, len("("))) + } + if n.Closing.IsValid() { + children = append(children, tok(n.Closing, len(")"))) + } case *ast.File: // TODO test: Doc diff --git a/vendor/golang.org/x/tools/go/ast/astutil/imports.go b/vendor/golang.org/x/tools/go/ast/astutil/imports.go index a6b5ed0..5e5601a 100644 --- a/vendor/golang.org/x/tools/go/ast/astutil/imports.go +++ b/vendor/golang.org/x/tools/go/ast/astutil/imports.go @@ -9,6 +9,7 @@ import ( "fmt" "go/ast" "go/token" + "slices" "strconv" "strings" ) @@ -186,7 +187,7 @@ func AddNamedImport(fset *token.FileSet, f *ast.File, name, path string) (added spec.(*ast.ImportSpec).Path.ValuePos = first.Pos() first.Specs = append(first.Specs, spec) } - f.Decls = append(f.Decls[:i], f.Decls[i+1:]...) + f.Decls = slices.Delete(f.Decls, i, i+1) i-- } diff --git a/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go b/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go index 5c8dbbb..4ad0549 100644 --- a/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go +++ b/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go @@ -67,6 +67,10 @@ var abort = new(int) // singleton, to signal termination of Apply // // The methods Replace, Delete, InsertBefore, and InsertAfter // can be used to change the AST without disrupting Apply. +// +// This type is not to be confused with [inspector.Cursor] from +// package [golang.org/x/tools/go/ast/inspector], which provides +// stateless navigation of immutable syntax trees. type Cursor struct { parent ast.Node name string diff --git a/vendor/golang.org/x/tools/go/buildutil/allpackages.go b/vendor/golang.org/x/tools/go/buildutil/allpackages.go index dfb8cd6..32886a7 100644 --- a/vendor/golang.org/x/tools/go/buildutil/allpackages.go +++ b/vendor/golang.org/x/tools/go/buildutil/allpackages.go @@ -52,7 +52,6 @@ func ForEachPackage(ctxt *build.Context, found func(importPath string, err error var wg sync.WaitGroup for _, root := range ctxt.SrcDirs() { - root := root wg.Add(1) go func() { allPackages(ctxt, root, ch) @@ -107,7 +106,6 @@ func allPackages(ctxt *build.Context, root string, ch chan<- item) { ch <- item{pkg, err} } for _, fi := range files { - fi := fi if fi.IsDir() { wg.Add(1) go func() { diff --git a/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go b/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go new file mode 100644 index 0000000..7b90bc9 --- /dev/null +++ b/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go @@ -0,0 +1,236 @@ +// 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. + +// Package gcexportdata provides functions for reading and writing +// export data, which is a serialized description of the API of a Go +// package including the names, kinds, types, and locations of all +// exported declarations. +// +// The standard Go compiler (cmd/compile) writes an export data file +// for each package it compiles, which it later reads when compiling +// packages that import the earlier one. The compiler must thus +// contain logic to both write and read export data. +// (See the "Export" section in the cmd/compile/README file.) +// +// The [Read] function in this package can read files produced by the +// compiler, producing [go/types] data structures. As a matter of +// policy, Read supports export data files produced by only the last +// two Go releases plus tip; see https://go.dev/issue/68898. The +// export data files produced by the compiler contain additional +// details related to generics, inlining, and other optimizations that +// cannot be decoded by the [Read] function. +// +// In files written by the compiler, the export data is not at the +// start of the file. Before calling Read, use [NewReader] to locate +// the desired portion of the file. +// +// The [Write] function in this package encodes the exported API of a +// Go package ([types.Package]) as a file. Such files can be later +// decoded by Read, but cannot be consumed by the compiler. +// +// # Future changes +// +// Although Read supports the formats written by both Write and the +// compiler, the two are quite different, and there is an open +// proposal (https://go.dev/issue/69491) to separate these APIs. +// +// Under that proposal, this package would ultimately provide only the +// Read operation for compiler export data, which must be defined in +// this module (golang.org/x/tools), not in the standard library, to +// avoid version skew for developer tools that need to read compiler +// export data both before and after a Go release, such as from Go +// 1.23 to Go 1.24. Because this package lives in the tools module, +// clients can update their version of the module some time before the +// Go 1.24 release and rebuild and redeploy their tools, which will +// then be able to consume both Go 1.23 and Go 1.24 export data files, +// so they will work before and after the Go update. (See discussion +// at https://go.dev/issue/15651.) +// +// The operations to import and export [go/types] data structures +// would be defined in the go/types package as Import and Export. +// [Write] would (eventually) delegate to Export, +// and [Read], when it detects a file produced by Export, +// would delegate to Import. +// +// # Deprecations +// +// The [NewImporter] and [Find] functions are deprecated and should +// not be used in new code. The [WriteBundle] and [ReadBundle] +// functions are experimental, and there is an open proposal to +// deprecate them (https://go.dev/issue/69573). +package gcexportdata + +import ( + "bufio" + "bytes" + "encoding/json" + "fmt" + "go/token" + "go/types" + "io" + "os/exec" + + "golang.org/x/tools/internal/gcimporter" +) + +// Find returns the name of an object (.o) or archive (.a) file +// containing type information for the specified import path, +// using the go command. +// If no file was found, an empty filename is returned. +// +// A relative srcDir is interpreted relative to the current working directory. +// +// Find also returns the package's resolved (canonical) import path, +// reflecting the effects of srcDir and vendoring on importPath. +// +// Deprecated: Use the higher-level API in golang.org/x/tools/go/packages, +// which is more efficient. +func Find(importPath, srcDir string) (filename, path string) { + cmd := exec.Command("go", "list", "-json", "-export", "--", importPath) + cmd.Dir = srcDir + out, err := cmd.Output() + if err != nil { + return "", "" + } + var data struct { + ImportPath string + Export string + } + json.Unmarshal(out, &data) + return data.Export, data.ImportPath +} + +// NewReader returns a reader for the export data section of an object +// (.o) or archive (.a) file read from r. The new reader may provide +// additional trailing data beyond the end of the export data. +func NewReader(r io.Reader) (io.Reader, error) { + buf := bufio.NewReader(r) + size, err := gcimporter.FindExportData(buf) + if err != nil { + return nil, err + } + + // We were given an archive and found the __.PKGDEF in it. + // This tells us the size of the export data, and we don't + // need to return the entire file. + return &io.LimitedReader{ + R: buf, + N: size, + }, nil +} + +// readAll works the same way as io.ReadAll, but avoids allocations and copies +// by preallocating a byte slice of the necessary size if the size is known up +// front. This is always possible when the input is an archive. In that case, +// NewReader will return the known size using an io.LimitedReader. +func readAll(r io.Reader) ([]byte, error) { + if lr, ok := r.(*io.LimitedReader); ok { + data := make([]byte, lr.N) + _, err := io.ReadFull(lr, data) + return data, err + } + return io.ReadAll(r) +} + +// Read reads export data from in, decodes it, and returns type +// information for the package. +// +// Read is capable of reading export data produced by [Write] at the +// same source code version, or by the last two Go releases (plus tip) +// of the standard Go compiler. Reading files from older compilers may +// produce an error. +// +// The package path (effectively its linker symbol prefix) is +// specified by path, since unlike the package name, this information +// may not be recorded in the export data. +// +// File position information is added to fset. +// +// Read may inspect and add to the imports map to ensure that references +// within the export data to other packages are consistent. The caller +// must ensure that imports[path] does not exist, or exists but is +// incomplete (see types.Package.Complete), and Read inserts the +// resulting package into this map entry. +// +// On return, the state of the reader is undefined. +func Read(in io.Reader, fset *token.FileSet, imports map[string]*types.Package, path string) (*types.Package, error) { + data, err := readAll(in) + if err != nil { + return nil, fmt.Errorf("reading export data for %q: %v", path, err) + } + + if bytes.HasPrefix(data, []byte("!")) { + return nil, fmt.Errorf("can't read export data for %q directly from an archive file (call gcexportdata.NewReader first to extract export data)", path) + } + + // The indexed export format starts with an 'i'; the older + // binary export format starts with a 'c', 'd', or 'v' + // (from "version"). Select appropriate importer. + if len(data) > 0 { + switch data[0] { + case 'v', 'c', 'd': + // binary, produced by cmd/compile till go1.10 + return nil, fmt.Errorf("binary (%c) import format is no longer supported", data[0]) + + case 'i': + // indexed, produced by cmd/compile till go1.19, + // and also by [Write]. + // + // If proposal #69491 is accepted, go/types + // serialization will be implemented by + // types.Export, to which Write would eventually + // delegate (explicitly dropping any pretence at + // inter-version Write-Read compatibility). + // This [Read] function would delegate to types.Import + // when it detects that the file was produced by Export. + _, pkg, err := gcimporter.IImportData(fset, imports, data[1:], path) + return pkg, err + + case 'u': + // unified, produced by cmd/compile since go1.20 + _, pkg, err := gcimporter.UImportData(fset, imports, data[1:], path) + return pkg, err + + default: + l := min(len(data), 10) + return nil, fmt.Errorf("unexpected export data with prefix %q for path %s", string(data[:l]), path) + } + } + return nil, fmt.Errorf("empty export data for %s", path) +} + +// Write writes encoded type information for the specified package to out. +// The FileSet provides file position information for named objects. +func Write(out io.Writer, fset *token.FileSet, pkg *types.Package) error { + if _, err := io.WriteString(out, "i"); err != nil { + return err + } + return gcimporter.IExportData(out, fset, pkg) +} + +// ReadBundle reads an export bundle from in, decodes it, and returns type +// information for the packages. +// File position information is added to fset. +// +// ReadBundle may inspect and add to the imports map to ensure that references +// within the export bundle to other packages are consistent. +// +// On return, the state of the reader is undefined. +// +// Experimental: This API is experimental and may change in the future. +func ReadBundle(in io.Reader, fset *token.FileSet, imports map[string]*types.Package) ([]*types.Package, error) { + data, err := readAll(in) + if err != nil { + return nil, fmt.Errorf("reading export bundle: %v", err) + } + return gcimporter.IImportBundle(fset, imports, data) +} + +// WriteBundle writes encoded type information for the specified packages to out. +// The FileSet provides file position information for named objects. +// +// Experimental: This API is experimental and may change in the future. +func WriteBundle(out io.Writer, fset *token.FileSet, pkgs []*types.Package) error { + return gcimporter.IExportBundle(out, fset, pkgs) +} diff --git a/vendor/golang.org/x/tools/go/gcexportdata/importer.go b/vendor/golang.org/x/tools/go/gcexportdata/importer.go new file mode 100644 index 0000000..37a7247 --- /dev/null +++ b/vendor/golang.org/x/tools/go/gcexportdata/importer.go @@ -0,0 +1,75 @@ +// 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. + +package gcexportdata + +import ( + "fmt" + "go/token" + "go/types" + "os" +) + +// NewImporter returns a new instance of the types.Importer interface +// that reads type information from export data files written by gc. +// The Importer also satisfies types.ImporterFrom. +// +// Export data files are located using "go build" workspace conventions +// and the build.Default context. +// +// Use this importer instead of go/importer.For("gc", ...) to avoid the +// version-skew problems described in the documentation of this package, +// or to control the FileSet or access the imports map populated during +// package loading. +// +// Deprecated: Use the higher-level API in golang.org/x/tools/go/packages, +// which is more efficient. +func NewImporter(fset *token.FileSet, imports map[string]*types.Package) types.ImporterFrom { + return importer{fset, imports} +} + +type importer struct { + fset *token.FileSet + imports map[string]*types.Package +} + +func (imp importer) Import(importPath string) (*types.Package, error) { + return imp.ImportFrom(importPath, "", 0) +} + +func (imp importer) ImportFrom(importPath, srcDir string, mode types.ImportMode) (_ *types.Package, err error) { + filename, path := Find(importPath, srcDir) + if filename == "" { + if importPath == "unsafe" { + // Even for unsafe, call Find first in case + // the package was vendored. + return types.Unsafe, nil + } + return nil, fmt.Errorf("can't find import: %s", importPath) + } + + if pkg, ok := imp.imports[path]; ok && pkg.Complete() { + return pkg, nil // cache hit + } + + // open file + f, err := os.Open(filename) + if err != nil { + return nil, err + } + defer func() { + f.Close() + if err != nil { + // add file name to error + err = fmt.Errorf("reading export data: %s: %v", filename, err) + } + }() + + r, err := NewReader(f) + if err != nil { + return nil, err + } + + return Read(r, imp.fset, imp.imports, path) +} diff --git a/vendor/golang.org/x/tools/go/loader/doc.go b/vendor/golang.org/x/tools/go/loader/doc.go index e35b1fd..769a1fc 100644 --- a/vendor/golang.org/x/tools/go/loader/doc.go +++ b/vendor/golang.org/x/tools/go/loader/doc.go @@ -164,7 +164,7 @@ package loader // entry is created in this cache by startLoad the first time the // package is imported. The first goroutine to request an entry becomes // responsible for completing the task and broadcasting completion to -// subsequent requestors, which block until then. +// subsequent requesters, which block until then. // // Type checking occurs in (parallel) postorder: we cannot type-check a // set of files until we have loaded and type-checked all of their diff --git a/vendor/golang.org/x/tools/go/packages/doc.go b/vendor/golang.org/x/tools/go/packages/doc.go new file mode 100644 index 0000000..f1931d1 --- /dev/null +++ b/vendor/golang.org/x/tools/go/packages/doc.go @@ -0,0 +1,251 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package packages loads Go packages for inspection and analysis. + +The [Load] function takes as input a list of patterns and returns a +list of [Package] values describing individual packages matched by those +patterns. +A [Config] specifies configuration options, the most important of which is +the [LoadMode], which controls the amount of detail in the loaded packages. + +Load passes most patterns directly to the underlying build tool. +The default build tool is the go command. +Its supported patterns are described at +https://pkg.go.dev/cmd/go#hdr-Package_lists_and_patterns. +Other build systems may be supported by providing a "driver"; +see [The driver protocol]. + +All patterns with the prefix "query=", where query is a +non-empty string of letters from [a-z], are reserved and may be +interpreted as query operators. + +Two query operators are currently supported: "file" and "pattern". + +The query "file=path/to/file.go" matches the package or packages enclosing +the Go source file path/to/file.go. For example "file=~/go/src/fmt/print.go" +might return the packages "fmt" and "fmt [fmt.test]". + +The query "pattern=string" causes "string" to be passed directly to +the underlying build tool. In most cases this is unnecessary, +but an application can use Load("pattern=" + x) as an escaping mechanism +to ensure that x is not interpreted as a query operator if it contains '='. + +All other query operators are reserved for future use and currently +cause Load to report an error. + +The Package struct provides basic information about the package, including + + - ID, a unique identifier for the package in the returned set; + - GoFiles, the names of the package's Go source files; + - Imports, a map from source import strings to the Packages they name; + - Types, the type information for the package's exported symbols; + - Syntax, the parsed syntax trees for the package's source code; and + - TypesInfo, the result of a complete type-check of the package syntax trees. + +(See the documentation for type Package for the complete list of fields +and more detailed descriptions.) + +For example, + + Load(nil, "bytes", "unicode...") + +returns four Package structs describing the standard library packages +bytes, unicode, unicode/utf16, and unicode/utf8. Note that one pattern +can match multiple packages and that a package might be matched by +multiple patterns: in general it is not possible to determine which +packages correspond to which patterns. + +Note that the list returned by Load contains only the packages matched +by the patterns. Their dependencies can be found by walking the import +graph using the Imports fields. + +The Load function can be configured by passing a pointer to a Config as +the first argument. A nil Config is equivalent to the zero Config, which +causes Load to run in [LoadFiles] mode, collecting minimal information. +See the documentation for type Config for details. + +As noted earlier, the Config.Mode controls the amount of detail +reported about the loaded packages. See the documentation for type LoadMode +for details. + +Most tools should pass their command-line arguments (after any flags) +uninterpreted to Load, so that it can interpret them +according to the conventions of the underlying build system. + +See the Example function for typical usage. + +# The driver protocol + +Load may be used to load Go packages even in Go projects that use +alternative build systems, by installing an appropriate "driver" +program for the build system and specifying its location in the +GOPACKAGESDRIVER environment variable. +For example, +https://github.com/bazelbuild/rules_go/wiki/Editor-and-tool-integration +explains how to use the driver for Bazel. + +The driver program is responsible for interpreting patterns in its +preferred notation and reporting information about the packages that +those patterns identify. Drivers must also support the special "file=" +and "pattern=" patterns described above. + +The patterns are provided as positional command-line arguments. A +JSON-encoded [DriverRequest] message providing additional information +is written to the driver's standard input. The driver must write a +JSON-encoded [DriverResponse] message to its standard output. (This +message differs from the JSON schema produced by 'go list'.) + +The value of the PWD environment variable seen by the driver process +is the preferred name of its working directory. (The working directory +may have other aliases due to symbolic links; see the comment on the +Dir field of [exec.Cmd] for related information.) +When the driver process emits in its response the name of a file +that is a descendant of this directory, it must use an absolute path +that has the value of PWD as a prefix, to ensure that the returned +filenames satisfy the original query. +*/ +package packages // import "golang.org/x/tools/go/packages" + +/* + +Motivation and design considerations + +The new package's design solves problems addressed by two existing +packages: go/build, which locates and describes packages, and +golang.org/x/tools/go/loader, which loads, parses and type-checks them. +The go/build.Package structure encodes too much of the 'go build' way +of organizing projects, leaving us in need of a data type that describes a +package of Go source code independent of the underlying build system. +We wanted something that works equally well with go build and vgo, and +also other build systems such as Bazel and Blaze, making it possible to +construct analysis tools that work in all these environments. +Tools such as errcheck and staticcheck were essentially unavailable to +the Go community at Google, and some of Google's internal tools for Go +are unavailable externally. +This new package provides a uniform way to obtain package metadata by +querying each of these build systems, optionally supporting their +preferred command-line notations for packages, so that tools integrate +neatly with users' build environments. The Metadata query function +executes an external query tool appropriate to the current workspace. + +Loading packages always returns the complete import graph "all the way down", +even if all you want is information about a single package, because the query +mechanisms of all the build systems we currently support ({go,vgo} list, and +blaze/bazel aspect-based query) cannot provide detailed information +about one package without visiting all its dependencies too, so there is +no additional asymptotic cost to providing transitive information. +(This property might not be true of a hypothetical 5th build system.) + +In calls to TypeCheck, all initial packages, and any package that +transitively depends on one of them, must be loaded from source. +Consider A->B->C->D->E: if A,C are initial, A,B,C must be loaded from +source; D may be loaded from export data, and E may not be loaded at all +(though it's possible that D's export data mentions it, so a +types.Package may be created for it and exposed.) + +The old loader had a feature to suppress type-checking of function +bodies on a per-package basis, primarily intended to reduce the work of +obtaining type information for imported packages. Now that imports are +satisfied by export data, the optimization no longer seems necessary. + +Despite some early attempts, the old loader did not exploit export data, +instead always using the equivalent of WholeProgram mode. This was due +to the complexity of mixing source and export data packages (now +resolved by the upward traversal mentioned above), and because export data +files were nearly always missing or stale. Now that 'go build' supports +caching, all the underlying build systems can guarantee to produce +export data in a reasonable (amortized) time. + +Test "main" packages synthesized by the build system are now reported as +first-class packages, avoiding the need for clients (such as go/ssa) to +reinvent this generation logic. + +One way in which go/packages is simpler than the old loader is in its +treatment of in-package tests. In-package tests are packages that +consist of all the files of the library under test, plus the test files. +The old loader constructed in-package tests by a two-phase process of +mutation called "augmentation": first it would construct and type check +all the ordinary library packages and type-check the packages that +depend on them; then it would add more (test) files to the package and +type-check again. This two-phase approach had four major problems: +1) in processing the tests, the loader modified the library package, + leaving no way for a client application to see both the test + package and the library package; one would mutate into the other. +2) because test files can declare additional methods on types defined in + the library portion of the package, the dispatch of method calls in + the library portion was affected by the presence of the test files. + This should have been a clue that the packages were logically + different. +3) this model of "augmentation" assumed at most one in-package test + per library package, which is true of projects using 'go build', + but not other build systems. +4) because of the two-phase nature of test processing, all packages that + import the library package had to be processed before augmentation, + forcing a "one-shot" API and preventing the client from calling Load + in several times in sequence as is now possible in WholeProgram mode. + (TypeCheck mode has a similar one-shot restriction for a different reason.) + +Early drafts of this package supported "multi-shot" operation. +Although it allowed clients to make a sequence of calls (or concurrent +calls) to Load, building up the graph of Packages incrementally, +it was of marginal value: it complicated the API +(since it allowed some options to vary across calls but not others), +it complicated the implementation, +it cannot be made to work in Types mode, as explained above, +and it was less efficient than making one combined call (when this is possible). +Among the clients we have inspected, none made multiple calls to load +but could not be easily and satisfactorily modified to make only a single call. +However, applications changes may be required. +For example, the ssadump command loads the user-specified packages +and in addition the runtime package. It is tempting to simply append +"runtime" to the user-provided list, but that does not work if the user +specified an ad-hoc package such as [a.go b.go]. +Instead, ssadump no longer requests the runtime package, +but seeks it among the dependencies of the user-specified packages, +and emits an error if it is not found. + +Questions & Tasks + +- Add GOARCH/GOOS? + They are not portable concepts, but could be made portable. + Our goal has been to allow users to express themselves using the conventions + of the underlying build system: if the build system honors GOARCH + during a build and during a metadata query, then so should + applications built atop that query mechanism. + Conversely, if the target architecture of the build is determined by + command-line flags, the application can pass the relevant + flags through to the build system using a command such as: + myapp -query_flag="--cpu=amd64" -query_flag="--os=darwin" + However, this approach is low-level, unwieldy, and non-portable. + GOOS and GOARCH seem important enough to warrant a dedicated option. + +- How should we handle partial failures such as a mixture of good and + malformed patterns, existing and non-existent packages, successful and + failed builds, import failures, import cycles, and so on, in a call to + Load? + +- Support bazel, blaze, and go1.10 list, not just go1.11 list. + +- Handle (and test) various partial success cases, e.g. + a mixture of good packages and: + invalid patterns + nonexistent packages + empty packages + packages with malformed package or import declarations + unreadable files + import cycles + other parse errors + type errors + Make sure we record errors at the correct place in the graph. + +- Missing packages among initial arguments are not reported. + Return bogus packages for them, like golist does. + +- "undeclared name" errors (for example) are reported out of source file + order. I suspect this is due to the breadth-first resolution now used + by go/types. Is that a bug? Discuss with gri. + +*/ diff --git a/vendor/golang.org/x/tools/go/packages/external.go b/vendor/golang.org/x/tools/go/packages/external.go new file mode 100644 index 0000000..f37bc65 --- /dev/null +++ b/vendor/golang.org/x/tools/go/packages/external.go @@ -0,0 +1,153 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packages + +// This file defines the protocol that enables an external "driver" +// tool to supply package metadata in place of 'go list'. + +import ( + "bytes" + "encoding/json" + "fmt" + "os" + "os/exec" + "slices" + "strings" +) + +// DriverRequest defines the schema of a request for package metadata +// from an external driver program. The JSON-encoded DriverRequest +// message is provided to the driver program's standard input. The +// query patterns are provided as command-line arguments. +// +// See the package documentation for an overview. +type DriverRequest struct { + Mode LoadMode `json:"mode"` + + // Env specifies the environment the underlying build system should be run in. + Env []string `json:"env"` + + // BuildFlags are flags that should be passed to the underlying build system. + BuildFlags []string `json:"build_flags"` + + // Tests specifies whether the patterns should also return test packages. + Tests bool `json:"tests"` + + // Overlay maps file paths (relative to the driver's working directory) + // to the contents of overlay files (see Config.Overlay). + Overlay map[string][]byte `json:"overlay"` +} + +// DriverResponse defines the schema of a response from an external +// driver program, providing the results of a query for package +// metadata. The driver program must write a JSON-encoded +// DriverResponse message to its standard output. +// +// See the package documentation for an overview. +type DriverResponse struct { + // NotHandled is returned if the request can't be handled by the current + // driver. If an external driver returns a response with NotHandled, the + // rest of the DriverResponse is ignored, and go/packages will fallback + // to the next driver. If go/packages is extended in the future to support + // lists of multiple drivers, go/packages will fall back to the next driver. + NotHandled bool + + // Compiler and Arch are the arguments pass of types.SizesFor + // to get a types.Sizes to use when type checking. + Compiler string + Arch string + + // Roots is the set of package IDs that make up the root packages. + // We have to encode this separately because when we encode a single package + // we cannot know if it is one of the roots as that requires knowledge of the + // graph it is part of. + Roots []string `json:",omitempty"` + + // Packages is the full set of packages in the graph. + // The packages are not connected into a graph. + // The Imports if populated will be stubs that only have their ID set. + // Imports will be connected and then type and syntax information added in a + // later pass (see refine). + Packages []*Package + + // GoVersion is the minor version number used by the driver + // (e.g. the go command on the PATH) when selecting .go files. + // Zero means unknown. + GoVersion int +} + +// driver is the type for functions that query the build system for the +// packages named by the patterns. +type driver func(cfg *Config, patterns []string) (*DriverResponse, error) + +// findExternalDriver returns the file path of a tool that supplies +// the build system package structure, or "" if not found. +// If GOPACKAGESDRIVER is set in the environment findExternalTool returns its +// value, otherwise it searches for a binary named gopackagesdriver on the PATH. +func findExternalDriver(cfg *Config) driver { + const toolPrefix = "GOPACKAGESDRIVER=" + tool := "" + for _, env := range cfg.Env { + if val, ok := strings.CutPrefix(env, toolPrefix); ok { + tool = val + } + } + if tool != "" && tool == "off" { + return nil + } + if tool == "" { + var err error + tool, err = exec.LookPath("gopackagesdriver") + if err != nil { + return nil + } + } + return func(cfg *Config, patterns []string) (*DriverResponse, error) { + req, err := json.Marshal(DriverRequest{ + Mode: cfg.Mode, + Env: cfg.Env, + BuildFlags: cfg.BuildFlags, + Tests: cfg.Tests, + Overlay: cfg.Overlay, + }) + if err != nil { + return nil, fmt.Errorf("failed to encode message to driver tool: %v", err) + } + + buf := new(bytes.Buffer) + stderr := new(bytes.Buffer) + cmd := exec.CommandContext(cfg.Context, tool, patterns...) + cmd.Dir = cfg.Dir + // The cwd gets resolved to the real path. On Darwin, where + // /tmp is a symlink, this breaks anything that expects the + // working directory to keep the original path, including the + // go command when dealing with modules. + // + // os.Getwd stdlib has a special feature where if the + // cwd and the PWD are the same node then it trusts + // the PWD, so by setting it in the env for the child + // process we fix up all the paths returned by the go + // command. + // + // (See similar trick in Invocation.run in ../../internal/gocommand/invoke.go) + cmd.Env = append(slices.Clip(cfg.Env), "PWD="+cfg.Dir) + cmd.Stdin = bytes.NewReader(req) + cmd.Stdout = buf + cmd.Stderr = stderr + + if err := cmd.Run(); err != nil { + return nil, fmt.Errorf("%v: %v: %s", tool, err, cmd.Stderr) + } + if len(stderr.Bytes()) != 0 && os.Getenv("GOPACKAGESPRINTDRIVERERRORS") != "" { + fmt.Fprintf(os.Stderr, "%s stderr: <<%s>>\n", cmdDebugStr(cmd), stderr) + } + + var response DriverResponse + if err := json.Unmarshal(buf.Bytes(), &response); err != nil { + return nil, err + } + return &response, nil + } +} diff --git a/vendor/golang.org/x/tools/go/packages/golist.go b/vendor/golang.org/x/tools/go/packages/golist.go new file mode 100644 index 0000000..96e43cd --- /dev/null +++ b/vendor/golang.org/x/tools/go/packages/golist.go @@ -0,0 +1,1084 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packages + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "log" + "os" + "os/exec" + "path" + "path/filepath" + "reflect" + "sort" + "strconv" + "strings" + "sync" + "unicode" + + "golang.org/x/tools/internal/gocommand" + "golang.org/x/tools/internal/packagesinternal" +) + +// debug controls verbose logging. +var debug, _ = strconv.ParseBool(os.Getenv("GOPACKAGESDEBUG")) + +// A goTooOldError reports that the go command +// found by exec.LookPath is too old to use the new go list behavior. +type goTooOldError struct { + error +} + +// responseDeduper wraps a DriverResponse, deduplicating its contents. +type responseDeduper struct { + seenRoots map[string]bool + seenPackages map[string]*Package + dr *DriverResponse +} + +func newDeduper() *responseDeduper { + return &responseDeduper{ + dr: &DriverResponse{}, + seenRoots: map[string]bool{}, + seenPackages: map[string]*Package{}, + } +} + +// addAll fills in r with a DriverResponse. +func (r *responseDeduper) addAll(dr *DriverResponse) { + for _, pkg := range dr.Packages { + r.addPackage(pkg) + } + for _, root := range dr.Roots { + r.addRoot(root) + } + r.dr.GoVersion = dr.GoVersion +} + +func (r *responseDeduper) addPackage(p *Package) { + if r.seenPackages[p.ID] != nil { + return + } + r.seenPackages[p.ID] = p + r.dr.Packages = append(r.dr.Packages, p) +} + +func (r *responseDeduper) addRoot(id string) { + if r.seenRoots[id] { + return + } + r.seenRoots[id] = true + r.dr.Roots = append(r.dr.Roots, id) +} + +type golistState struct { + cfg *Config + ctx context.Context + + runner *gocommand.Runner + + // overlay is the JSON file that encodes the Config.Overlay + // mapping, used by 'go list -overlay=...'. + overlay string + + envOnce sync.Once + goEnvError error + goEnv map[string]string + + rootsOnce sync.Once + rootDirsError error + rootDirs map[string]string + + goVersionOnce sync.Once + goVersionError error + goVersion int // The X in Go 1.X. + + // vendorDirs caches the (non)existence of vendor directories. + vendorDirs map[string]bool +} + +// getEnv returns Go environment variables. Only specific variables are +// populated -- computing all of them is slow. +func (state *golistState) getEnv() (map[string]string, error) { + state.envOnce.Do(func() { + var b *bytes.Buffer + b, state.goEnvError = state.invokeGo("env", "-json", "GOMOD", "GOPATH") + if state.goEnvError != nil { + return + } + + state.goEnv = make(map[string]string) + decoder := json.NewDecoder(b) + if state.goEnvError = decoder.Decode(&state.goEnv); state.goEnvError != nil { + return + } + }) + return state.goEnv, state.goEnvError +} + +// mustGetEnv is a convenience function that can be used if getEnv has already succeeded. +func (state *golistState) mustGetEnv() map[string]string { + env, err := state.getEnv() + if err != nil { + panic(fmt.Sprintf("mustGetEnv: %v", err)) + } + return env +} + +// goListDriver uses the go list command to interpret the patterns and produce +// the build system package structure. +// See driver for more details. +// +// overlay is the JSON file that encodes the cfg.Overlay +// mapping, used by 'go list -overlay=...' +func goListDriver(cfg *Config, runner *gocommand.Runner, overlay string, patterns []string) (_ *DriverResponse, err error) { + // Make sure that any asynchronous go commands are killed when we return. + parentCtx := cfg.Context + if parentCtx == nil { + parentCtx = context.Background() + } + ctx, cancel := context.WithCancel(parentCtx) + defer cancel() + + response := newDeduper() + + state := &golistState{ + cfg: cfg, + ctx: ctx, + vendorDirs: map[string]bool{}, + overlay: overlay, + runner: runner, + } + + // Fill in response.Sizes asynchronously if necessary. + if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&(NeedTypes|NeedTypesInfo) != 0 { + errCh := make(chan error) + go func() { + compiler, arch, err := getSizesForArgs(ctx, state.cfgInvocation(), runner) + response.dr.Compiler = compiler + response.dr.Arch = arch + errCh <- err + }() + defer func() { + if sizesErr := <-errCh; sizesErr != nil { + err = sizesErr + } + }() + } + + // Determine files requested in contains patterns + var containFiles []string + restPatterns := make([]string, 0, len(patterns)) + // Extract file= and other [querytype]= patterns. Report an error if querytype + // doesn't exist. +extractQueries: + for _, pattern := range patterns { + eqidx := strings.Index(pattern, "=") + if eqidx < 0 { + restPatterns = append(restPatterns, pattern) + } else { + query, value := pattern[:eqidx], pattern[eqidx+len("="):] + switch query { + case "file": + containFiles = append(containFiles, value) + case "pattern": + restPatterns = append(restPatterns, value) + case "": // not a reserved query + restPatterns = append(restPatterns, pattern) + default: + for _, rune := range query { + if rune < 'a' || rune > 'z' { // not a reserved query + restPatterns = append(restPatterns, pattern) + continue extractQueries + } + } + // Reject all other patterns containing "=" + return nil, fmt.Errorf("invalid query type %q in query pattern %q", query, pattern) + } + } + } + + // See if we have any patterns to pass through to go list. Zero initial + // patterns also requires a go list call, since it's the equivalent of + // ".". + if len(restPatterns) > 0 || len(patterns) == 0 { + dr, err := state.createDriverResponse(restPatterns...) + if err != nil { + return nil, err + } + response.addAll(dr) + } + + if len(containFiles) != 0 { + if err := state.runContainsQueries(response, containFiles); err != nil { + return nil, err + } + } + + // (We may yet return an error due to defer.) + return response.dr, nil +} + +func (state *golistState) runContainsQueries(response *responseDeduper, queries []string) error { + for _, query := range queries { + // TODO(matloob): Do only one query per directory. + fdir := filepath.Dir(query) + // Pass absolute path of directory to go list so that it knows to treat it as a directory, + // not a package path. + pattern, err := filepath.Abs(fdir) + if err != nil { + return fmt.Errorf("could not determine absolute path of file= query path %q: %v", query, err) + } + dirResponse, err := state.createDriverResponse(pattern) + + // If there was an error loading the package, or no packages are returned, + // or the package is returned with errors, try to load the file as an + // ad-hoc package. + // Usually the error will appear in a returned package, but may not if we're + // in module mode and the ad-hoc is located outside a module. + if err != nil || len(dirResponse.Packages) == 0 || len(dirResponse.Packages) == 1 && len(dirResponse.Packages[0].GoFiles) == 0 && + len(dirResponse.Packages[0].Errors) == 1 { + var queryErr error + if dirResponse, queryErr = state.adhocPackage(pattern, query); queryErr != nil { + return err // return the original error + } + } + isRoot := make(map[string]bool, len(dirResponse.Roots)) + for _, root := range dirResponse.Roots { + isRoot[root] = true + } + for _, pkg := range dirResponse.Packages { + // Add any new packages to the main set + // We don't bother to filter packages that will be dropped by the changes of roots, + // that will happen anyway during graph construction outside this function. + // Over-reporting packages is not a problem. + response.addPackage(pkg) + // if the package was not a root one, it cannot have the file + if !isRoot[pkg.ID] { + continue + } + for _, pkgFile := range pkg.GoFiles { + if filepath.Base(query) == filepath.Base(pkgFile) { + response.addRoot(pkg.ID) + break + } + } + } + } + return nil +} + +// adhocPackage attempts to load or construct an ad-hoc package for a given +// query, if the original call to the driver produced inadequate results. +func (state *golistState) adhocPackage(pattern, query string) (*DriverResponse, error) { + response, err := state.createDriverResponse(query) + if err != nil { + return nil, err + } + // If we get nothing back from `go list`, + // try to make this file into its own ad-hoc package. + // TODO(rstambler): Should this check against the original response? + if len(response.Packages) == 0 { + response.Packages = append(response.Packages, &Package{ + ID: "command-line-arguments", + PkgPath: query, + GoFiles: []string{query}, + CompiledGoFiles: []string{query}, + Imports: make(map[string]*Package), + }) + response.Roots = append(response.Roots, "command-line-arguments") + } + // Handle special cases. + if len(response.Packages) == 1 { + // golang/go#33482: If this is a file= query for ad-hoc packages where + // the file only exists on an overlay, and exists outside of a module, + // add the file to the package and remove the errors. + if response.Packages[0].ID == "command-line-arguments" || + filepath.ToSlash(response.Packages[0].PkgPath) == filepath.ToSlash(query) { + if len(response.Packages[0].GoFiles) == 0 { + filename := filepath.Join(pattern, filepath.Base(query)) // avoid recomputing abspath + // TODO(matloob): check if the file is outside of a root dir? + for path := range state.cfg.Overlay { + if path == filename { + response.Packages[0].Errors = nil + response.Packages[0].GoFiles = []string{path} + response.Packages[0].CompiledGoFiles = []string{path} + } + } + } + } + } + return response, nil +} + +// Fields must match go list; +// see $GOROOT/src/cmd/go/internal/load/pkg.go. +type jsonPackage struct { + ImportPath string + Dir string + Name string + Target string + Export string + GoFiles []string + CompiledGoFiles []string + IgnoredGoFiles []string + IgnoredOtherFiles []string + EmbedPatterns []string + EmbedFiles []string + CFiles []string + CgoFiles []string + CXXFiles []string + MFiles []string + HFiles []string + FFiles []string + SFiles []string + SwigFiles []string + SwigCXXFiles []string + SysoFiles []string + Imports []string + ImportMap map[string]string + Deps []string + Module *Module + TestGoFiles []string + TestImports []string + XTestGoFiles []string + XTestImports []string + ForTest string // q in a "p [q.test]" package, else "" + DepOnly bool + + Error *packagesinternal.PackageError + DepsErrors []*packagesinternal.PackageError +} + +type jsonPackageError struct { + ImportStack []string + Pos string + Err string +} + +func otherFiles(p *jsonPackage) [][]string { + return [][]string{p.CFiles, p.CXXFiles, p.MFiles, p.HFiles, p.FFiles, p.SFiles, p.SwigFiles, p.SwigCXXFiles, p.SysoFiles} +} + +// createDriverResponse uses the "go list" command to expand the pattern +// words and return a response for the specified packages. +func (state *golistState) createDriverResponse(words ...string) (*DriverResponse, error) { + // go list uses the following identifiers in ImportPath and Imports: + // + // "p" -- importable package or main (command) + // "q.test" -- q's test executable + // "p [q.test]" -- variant of p as built for q's test executable + // "q_test [q.test]" -- q's external test package + // + // The packages p that are built differently for a test q.test + // are q itself, plus any helpers used by the external test q_test, + // typically including "testing" and all its dependencies. + + // Run "go list" for complete + // information on the specified packages. + goVersion, err := state.getGoVersion() + if err != nil { + return nil, err + } + buf, err := state.invokeGo("list", golistargs(state.cfg, words, goVersion)...) + if err != nil { + return nil, err + } + + seen := make(map[string]*jsonPackage) + pkgs := make(map[string]*Package) + additionalErrors := make(map[string][]Error) + // Decode the JSON and convert it to Package form. + response := &DriverResponse{ + GoVersion: goVersion, + } + for dec := json.NewDecoder(buf); dec.More(); { + p := new(jsonPackage) + if err := dec.Decode(p); err != nil { + return nil, fmt.Errorf("JSON decoding failed: %v", err) + } + + if p.ImportPath == "" { + // The documentation for go list says that “[e]rroneous packages will have + // a non-empty ImportPath”. If for some reason it comes back empty, we + // prefer to error out rather than silently discarding data or handing + // back a package without any way to refer to it. + if p.Error != nil { + return nil, Error{ + Pos: p.Error.Pos, + Msg: p.Error.Err, + } + } + return nil, fmt.Errorf("package missing import path: %+v", p) + } + + // Work around https://golang.org/issue/33157: + // go list -e, when given an absolute path, will find the package contained at + // that directory. But when no package exists there, it will return a fake package + // with an error and the ImportPath set to the absolute path provided to go list. + // Try to convert that absolute path to what its package path would be if it's + // contained in a known module or GOPATH entry. This will allow the package to be + // properly "reclaimed" when overlays are processed. + if filepath.IsAbs(p.ImportPath) && p.Error != nil { + pkgPath, ok, err := state.getPkgPath(p.ImportPath) + if err != nil { + return nil, err + } + if ok { + p.ImportPath = pkgPath + } + } + + if old, found := seen[p.ImportPath]; found { + // If one version of the package has an error, and the other doesn't, assume + // that this is a case where go list is reporting a fake dependency variant + // of the imported package: When a package tries to invalidly import another + // package, go list emits a variant of the imported package (with the same + // import path, but with an error on it, and the package will have a + // DepError set on it). An example of when this can happen is for imports of + // main packages: main packages can not be imported, but they may be + // separately matched and listed by another pattern. + // See golang.org/issue/36188 for more details. + + // The plan is that eventually, hopefully in Go 1.15, the error will be + // reported on the importing package rather than the duplicate "fake" + // version of the imported package. Once all supported versions of Go + // have the new behavior this logic can be deleted. + // TODO(matloob): delete the workaround logic once all supported versions of + // Go return the errors on the proper package. + + // There should be exactly one version of a package that doesn't have an + // error. + if old.Error == nil && p.Error == nil { + if !reflect.DeepEqual(p, old) { + return nil, fmt.Errorf("internal error: go list gives conflicting information for package %v", p.ImportPath) + } + continue + } + + // Determine if this package's error needs to be bubbled up. + // This is a hack, and we expect for go list to eventually set the error + // on the package. + if old.Error != nil { + var errkind string + if strings.Contains(old.Error.Err, "not an importable package") { + errkind = "not an importable package" + } else if strings.Contains(old.Error.Err, "use of internal package") && strings.Contains(old.Error.Err, "not allowed") { + errkind = "use of internal package not allowed" + } + if errkind != "" { + if len(old.Error.ImportStack) < 1 { + return nil, fmt.Errorf(`internal error: go list gave a %q error with empty import stack`, errkind) + } + importingPkg := old.Error.ImportStack[len(old.Error.ImportStack)-1] + if importingPkg == old.ImportPath { + // Using an older version of Go which put this package itself on top of import + // stack, instead of the importer. Look for importer in second from top + // position. + if len(old.Error.ImportStack) < 2 { + return nil, fmt.Errorf(`internal error: go list gave a %q error with an import stack without importing package`, errkind) + } + importingPkg = old.Error.ImportStack[len(old.Error.ImportStack)-2] + } + additionalErrors[importingPkg] = append(additionalErrors[importingPkg], Error{ + Pos: old.Error.Pos, + Msg: old.Error.Err, + Kind: ListError, + }) + } + } + + // Make sure that if there's a version of the package without an error, + // that's the one reported to the user. + if old.Error == nil { + continue + } + + // This package will replace the old one at the end of the loop. + } + seen[p.ImportPath] = p + + pkg := &Package{ + Name: p.Name, + ID: p.ImportPath, + Dir: p.Dir, + Target: p.Target, + GoFiles: absJoin(p.Dir, p.GoFiles, p.CgoFiles), + CompiledGoFiles: absJoin(p.Dir, p.CompiledGoFiles), + OtherFiles: absJoin(p.Dir, otherFiles(p)...), + EmbedFiles: absJoin(p.Dir, p.EmbedFiles), + EmbedPatterns: absJoin(p.Dir, p.EmbedPatterns), + IgnoredFiles: absJoin(p.Dir, p.IgnoredGoFiles, p.IgnoredOtherFiles), + ForTest: p.ForTest, + depsErrors: p.DepsErrors, + Module: p.Module, + } + + if (state.cfg.Mode&typecheckCgo) != 0 && len(p.CgoFiles) != 0 { + if len(p.CompiledGoFiles) > len(p.GoFiles) { + // We need the cgo definitions, which are in the first + // CompiledGoFile after the non-cgo ones. This is a hack but there + // isn't currently a better way to find it. We also need the pure + // Go files and unprocessed cgo files, all of which are already + // in pkg.GoFiles. + cgoTypes := p.CompiledGoFiles[len(p.GoFiles)] + pkg.CompiledGoFiles = append([]string{cgoTypes}, pkg.GoFiles...) + } else { + // golang/go#38990: go list silently fails to do cgo processing + pkg.CompiledGoFiles = nil + pkg.Errors = append(pkg.Errors, Error{ + Msg: "go list failed to return CompiledGoFiles. This may indicate failure to perform cgo processing; try building at the command line. See https://golang.org/issue/38990.", + Kind: ListError, + }) + } + } + + // Work around https://golang.org/issue/28749: + // cmd/go puts assembly, C, and C++ files in CompiledGoFiles. + // Remove files from CompiledGoFiles that are non-go files + // (or are not files that look like they are from the cache). + if len(pkg.CompiledGoFiles) > 0 { + out := pkg.CompiledGoFiles[:0] + for _, f := range pkg.CompiledGoFiles { + if ext := filepath.Ext(f); ext != ".go" && ext != "" { // ext == "" means the file is from the cache, so probably cgo-processed file + continue + } + out = append(out, f) + } + pkg.CompiledGoFiles = out + } + + // Extract the PkgPath from the package's ID. + if i := strings.IndexByte(pkg.ID, ' '); i >= 0 { + pkg.PkgPath = pkg.ID[:i] + } else { + pkg.PkgPath = pkg.ID + } + + if pkg.PkgPath == "unsafe" { + pkg.CompiledGoFiles = nil // ignore fake unsafe.go file (#59929) + } else if len(pkg.CompiledGoFiles) == 0 { + // Work around for pre-go.1.11 versions of go list. + // TODO(matloob): they should be handled by the fallback. + // Can we delete this? + pkg.CompiledGoFiles = pkg.GoFiles + } + + // Assume go list emits only absolute paths for Dir. + if p.Dir != "" && !filepath.IsAbs(p.Dir) { + log.Fatalf("internal error: go list returned non-absolute Package.Dir: %s", p.Dir) + } + + if p.Export != "" && !filepath.IsAbs(p.Export) { + pkg.ExportFile = filepath.Join(p.Dir, p.Export) + } else { + pkg.ExportFile = p.Export + } + + // imports + // + // Imports contains the IDs of all imported packages. + // ImportsMap records (path, ID) only where they differ. + ids := make(map[string]bool) + for _, id := range p.Imports { + ids[id] = true + } + pkg.Imports = make(map[string]*Package) + for path, id := range p.ImportMap { + pkg.Imports[path] = &Package{ID: id} // non-identity import + delete(ids, id) + } + for id := range ids { + if id == "C" { + continue + } + + pkg.Imports[id] = &Package{ID: id} // identity import + } + if !p.DepOnly { + response.Roots = append(response.Roots, pkg.ID) + } + + // Temporary work-around for golang/go#39986. Parse filenames out of + // error messages. This happens if there are unrecoverable syntax + // errors in the source, so we can't match on a specific error message. + // + // TODO(rfindley): remove this heuristic, in favor of considering + // InvalidGoFiles from the list driver. + if err := p.Error; err != nil && state.shouldAddFilenameFromError(p) { + addFilenameFromPos := func(pos string) bool { + split := strings.Split(pos, ":") + if len(split) < 1 { + return false + } + filename := strings.TrimSpace(split[0]) + if filename == "" { + return false + } + if !filepath.IsAbs(filename) { + filename = filepath.Join(state.cfg.Dir, filename) + } + info, _ := os.Stat(filename) + if info == nil { + return false + } + pkg.CompiledGoFiles = append(pkg.CompiledGoFiles, filename) + pkg.GoFiles = append(pkg.GoFiles, filename) + return true + } + found := addFilenameFromPos(err.Pos) + // In some cases, go list only reports the error position in the + // error text, not the error position. One such case is when the + // file's package name is a keyword (see golang.org/issue/39763). + if !found { + addFilenameFromPos(err.Err) + } + } + + if p.Error != nil { + msg := strings.TrimSpace(p.Error.Err) // Trim to work around golang.org/issue/32363. + // Address golang.org/issue/35964 by appending import stack to error message. + if msg == "import cycle not allowed" && len(p.Error.ImportStack) != 0 { + msg += fmt.Sprintf(": import stack: %v", p.Error.ImportStack) + } + pkg.Errors = append(pkg.Errors, Error{ + Pos: p.Error.Pos, + Msg: msg, + Kind: ListError, + }) + } + + pkgs[pkg.ID] = pkg + } + + for id, errs := range additionalErrors { + if p, ok := pkgs[id]; ok { + p.Errors = append(p.Errors, errs...) + } + } + for _, pkg := range pkgs { + response.Packages = append(response.Packages, pkg) + } + sort.Slice(response.Packages, func(i, j int) bool { return response.Packages[i].ID < response.Packages[j].ID }) + + return response, nil +} + +func (state *golistState) shouldAddFilenameFromError(p *jsonPackage) bool { + if len(p.GoFiles) > 0 || len(p.CompiledGoFiles) > 0 { + return false + } + + goV, err := state.getGoVersion() + if err != nil { + return false + } + + // On Go 1.14 and earlier, only add filenames from errors if the import stack is empty. + // The import stack behaves differently for these versions than newer Go versions. + if goV < 15 { + return len(p.Error.ImportStack) == 0 + } + + // On Go 1.15 and later, only parse filenames out of error if there's no import stack, + // or the current package is at the top of the import stack. This is not guaranteed + // to work perfectly, but should avoid some cases where files in errors don't belong to this + // package. + return len(p.Error.ImportStack) == 0 || p.Error.ImportStack[len(p.Error.ImportStack)-1] == p.ImportPath +} + +// getGoVersion returns the effective minor version of the go command. +func (state *golistState) getGoVersion() (int, error) { + state.goVersionOnce.Do(func() { + state.goVersion, state.goVersionError = gocommand.GoVersion(state.ctx, state.cfgInvocation(), state.runner) + }) + return state.goVersion, state.goVersionError +} + +// getPkgPath finds the package path of a directory if it's relative to a root +// directory. +func (state *golistState) getPkgPath(dir string) (string, bool, error) { + absDir, err := filepath.Abs(dir) + if err != nil { + return "", false, err + } + roots, err := state.determineRootDirs() + if err != nil { + return "", false, err + } + + for rdir, rpath := range roots { + // Make sure that the directory is in the module, + // to avoid creating a path relative to another module. + if !strings.HasPrefix(absDir, rdir) { + continue + } + // TODO(matloob): This doesn't properly handle symlinks. + r, err := filepath.Rel(rdir, dir) + if err != nil { + continue + } + if rpath != "" { + // We choose only one root even though the directory even it can belong in multiple modules + // or GOPATH entries. This is okay because we only need to work with absolute dirs when a + // file is missing from disk, for instance when gopls calls go/packages in an overlay. + // Once the file is saved, gopls, or the next invocation of the tool will get the correct + // result straight from golist. + // TODO(matloob): Implement module tiebreaking? + return path.Join(rpath, filepath.ToSlash(r)), true, nil + } + return filepath.ToSlash(r), true, nil + } + return "", false, nil +} + +// absJoin absolutizes and flattens the lists of files. +func absJoin(dir string, fileses ...[]string) (res []string) { + for _, files := range fileses { + for _, file := range files { + if !filepath.IsAbs(file) { + file = filepath.Join(dir, file) + } + res = append(res, file) + } + } + return res +} + +func jsonFlag(cfg *Config, goVersion int) string { + if goVersion < 19 { + return "-json" + } + var fields []string + added := make(map[string]bool) + addFields := func(fs ...string) { + for _, f := range fs { + if !added[f] { + added[f] = true + fields = append(fields, f) + } + } + } + addFields("Name", "ImportPath", "Error") // These fields are always needed + if cfg.Mode&NeedFiles != 0 || cfg.Mode&(NeedTypes|NeedTypesInfo) != 0 { + addFields("Dir", "GoFiles", "IgnoredGoFiles", "IgnoredOtherFiles", "CFiles", + "CgoFiles", "CXXFiles", "MFiles", "HFiles", "FFiles", "SFiles", + "SwigFiles", "SwigCXXFiles", "SysoFiles") + if cfg.Tests { + addFields("TestGoFiles", "XTestGoFiles") + } + } + if cfg.Mode&(NeedTypes|NeedTypesInfo) != 0 { + // CompiledGoFiles seems to be required for the test case TestCgoNoSyntax, + // even when -compiled isn't passed in. + // TODO(#52435): Should we make the test ask for -compiled, or automatically + // request CompiledGoFiles in certain circumstances? + addFields("Dir", "CompiledGoFiles") + } + if cfg.Mode&NeedCompiledGoFiles != 0 { + addFields("Dir", "CompiledGoFiles", "Export") + } + if cfg.Mode&NeedImports != 0 { + // When imports are requested, DepOnly is used to distinguish between packages + // explicitly requested and transitive imports of those packages. + addFields("DepOnly", "Imports", "ImportMap") + if cfg.Tests { + addFields("TestImports", "XTestImports") + } + } + if cfg.Mode&NeedDeps != 0 { + addFields("DepOnly") + } + if usesExportData(cfg) { + // Request Dir in the unlikely case Export is not absolute. + addFields("Dir", "Export") + } + if cfg.Mode&NeedForTest != 0 { + addFields("ForTest") + } + if cfg.Mode&needInternalDepsErrors != 0 { + addFields("DepsErrors") + } + if cfg.Mode&NeedModule != 0 { + addFields("Module") + } + if cfg.Mode&NeedEmbedFiles != 0 { + addFields("EmbedFiles") + } + if cfg.Mode&NeedEmbedPatterns != 0 { + addFields("EmbedPatterns") + } + if cfg.Mode&NeedTarget != 0 { + addFields("Target") + } + return "-json=" + strings.Join(fields, ",") +} + +func golistargs(cfg *Config, words []string, goVersion int) []string { + const findFlags = NeedImports | NeedTypes | NeedSyntax | NeedTypesInfo + fullargs := []string{ + "-e", jsonFlag(cfg, goVersion), + fmt.Sprintf("-compiled=%t", cfg.Mode&(NeedCompiledGoFiles|NeedSyntax|NeedTypes|NeedTypesInfo|NeedTypesSizes) != 0), + fmt.Sprintf("-test=%t", cfg.Tests), + fmt.Sprintf("-export=%t", usesExportData(cfg)), + fmt.Sprintf("-deps=%t", cfg.Mode&NeedImports != 0), + // go list doesn't let you pass -test and -find together, + // probably because you'd just get the TestMain. + fmt.Sprintf("-find=%t", !cfg.Tests && cfg.Mode&findFlags == 0 && !usesExportData(cfg)), + } + + // golang/go#60456: with go1.21 and later, go list serves pgo variants, which + // can be costly to compute and may result in redundant processing for the + // caller. Disable these variants. If someone wants to add e.g. a NeedPGO + // mode flag, that should be a separate proposal. + if goVersion >= 21 { + fullargs = append(fullargs, "-pgo=off") + } + + fullargs = append(fullargs, cfg.BuildFlags...) + fullargs = append(fullargs, "--") + fullargs = append(fullargs, words...) + return fullargs +} + +// cfgInvocation returns an Invocation that reflects cfg's settings. +func (state *golistState) cfgInvocation() gocommand.Invocation { + cfg := state.cfg + return gocommand.Invocation{ + BuildFlags: cfg.BuildFlags, + CleanEnv: cfg.Env != nil, + Env: cfg.Env, + Logf: cfg.Logf, + WorkingDir: cfg.Dir, + Overlay: state.overlay, + } +} + +// invokeGo returns the stdout of a go command invocation. +func (state *golistState) invokeGo(verb string, args ...string) (*bytes.Buffer, error) { + cfg := state.cfg + + inv := state.cfgInvocation() + inv.Verb = verb + inv.Args = args + + stdout, stderr, friendlyErr, err := state.runner.RunRaw(cfg.Context, inv) + if err != nil { + // Check for 'go' executable not being found. + if ee, ok := err.(*exec.Error); ok && ee.Err == exec.ErrNotFound { + return nil, fmt.Errorf("'go list' driver requires 'go', but %s", exec.ErrNotFound) + } + + exitErr, ok := err.(*exec.ExitError) + if !ok { + // Catastrophic error: + // - context cancellation + return nil, fmt.Errorf("couldn't run 'go': %w", err) + } + + // Old go version? + if strings.Contains(stderr.String(), "flag provided but not defined") { + return nil, goTooOldError{fmt.Errorf("unsupported version of go: %s: %s", exitErr, stderr)} + } + + // Related to #24854 + if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "unexpected directory layout") { + return nil, friendlyErr + } + + // Return an error if 'go list' failed due to missing tools in + // $GOROOT/pkg/tool/$GOOS_$GOARCH (#69606). + if len(stderr.String()) > 0 && strings.Contains(stderr.String(), `go: no such tool`) { + return nil, friendlyErr + } + + // Is there an error running the C compiler in cgo? This will be reported in the "Error" field + // and should be suppressed by go list -e. + // + // This condition is not perfect yet because the error message can include other error messages than runtime/cgo. + isPkgPathRune := func(r rune) bool { + // From https://golang.org/ref/spec#Import_declarations: + // Implementation restriction: A compiler may restrict ImportPaths to non-empty strings + // using only characters belonging to Unicode's L, M, N, P, and S general categories + // (the Graphic characters without spaces) and may also exclude the + // characters !"#$%&'()*,:;<=>?[\]^`{|} and the Unicode replacement character U+FFFD. + return unicode.IsOneOf([]*unicode.RangeTable{unicode.L, unicode.M, unicode.N, unicode.P, unicode.S}, r) && + !strings.ContainsRune("!\"#$%&'()*,:;<=>?[\\]^`{|}\uFFFD", r) + } + // golang/go#36770: Handle case where cmd/go prints module download messages before the error. + msg := stderr.String() + for strings.HasPrefix(msg, "go: downloading") { + msg = msg[strings.IndexRune(msg, '\n')+1:] + } + if len(stderr.String()) > 0 && strings.HasPrefix(stderr.String(), "# ") { + msg := msg[len("# "):] + if strings.HasPrefix(strings.TrimLeftFunc(msg, isPkgPathRune), "\n") { + return stdout, nil + } + // Treat pkg-config errors as a special case (golang.org/issue/36770). + if strings.HasPrefix(msg, "pkg-config") { + return stdout, nil + } + } + + // This error only appears in stderr. See golang.org/cl/166398 for a fix in go list to show + // the error in the Err section of stdout in case -e option is provided. + // This fix is provided for backwards compatibility. + if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "named files must be .go files") { + output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`, + strings.Trim(stderr.String(), "\n")) + return bytes.NewBufferString(output), nil + } + + // Similar to the previous error, but currently lacks a fix in Go. + if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "named files must all be in one directory") { + output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`, + strings.Trim(stderr.String(), "\n")) + return bytes.NewBufferString(output), nil + } + + // Backwards compatibility for Go 1.11 because 1.12 and 1.13 put the directory in the ImportPath. + // If the package doesn't exist, put the absolute path of the directory into the error message, + // as Go 1.13 list does. + const noSuchDirectory = "no such directory" + if len(stderr.String()) > 0 && strings.Contains(stderr.String(), noSuchDirectory) { + errstr := stderr.String() + abspath := strings.TrimSpace(errstr[strings.Index(errstr, noSuchDirectory)+len(noSuchDirectory):]) + output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`, + abspath, strings.Trim(stderr.String(), "\n")) + return bytes.NewBufferString(output), nil + } + + // Workaround for #29280: go list -e has incorrect behavior when an ad-hoc package doesn't exist. + // Note that the error message we look for in this case is different that the one looked for above. + if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "no such file or directory") { + output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`, + strings.Trim(stderr.String(), "\n")) + return bytes.NewBufferString(output), nil + } + + // Workaround for #34273. go list -e with GO111MODULE=on has incorrect behavior when listing a + // directory outside any module. + if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "outside available modules") { + output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`, + // TODO(matloob): command-line-arguments isn't correct here. + "command-line-arguments", strings.Trim(stderr.String(), "\n")) + return bytes.NewBufferString(output), nil + } + + // Another variation of the previous error + if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "outside module root") { + output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`, + // TODO(matloob): command-line-arguments isn't correct here. + "command-line-arguments", strings.Trim(stderr.String(), "\n")) + return bytes.NewBufferString(output), nil + } + + // Workaround for an instance of golang.org/issue/26755: go list -e will return a non-zero exit + // status if there's a dependency on a package that doesn't exist. But it should return + // a zero exit status and set an error on that package. + if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "no Go files in") { + // Don't clobber stdout if `go list` actually returned something. + if len(stdout.String()) > 0 { + return stdout, nil + } + // try to extract package name from string + stderrStr := stderr.String() + var importPath string + colon := strings.Index(stderrStr, ":") + if colon > 0 && strings.HasPrefix(stderrStr, "go build ") { + importPath = stderrStr[len("go build "):colon] + } + output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`, + importPath, strings.Trim(stderrStr, "\n")) + return bytes.NewBufferString(output), nil + } + + // Export mode entails a build. + // If that build fails, errors appear on stderr + // (despite the -e flag) and the Export field is blank. + // Do not fail in that case. + // The same is true if an ad-hoc package given to go list doesn't exist. + // TODO(matloob): Remove these once we can depend on go list to exit with a zero status with -e even when + // packages don't exist or a build fails. + if !usesExportData(cfg) && !containsGoFile(args) { + return nil, friendlyErr + } + } + return stdout, nil +} + +func containsGoFile(s []string) bool { + for _, f := range s { + if strings.HasSuffix(f, ".go") { + return true + } + } + return false +} + +func cmdDebugStr(cmd *exec.Cmd) string { + env := make(map[string]string) + for _, kv := range cmd.Env { + split := strings.SplitN(kv, "=", 2) + k, v := split[0], split[1] + env[k] = v + } + + var args []string + for _, arg := range cmd.Args { + quoted := strconv.Quote(arg) + if quoted[1:len(quoted)-1] != arg || strings.Contains(arg, " ") { + args = append(args, quoted) + } else { + args = append(args, arg) + } + } + return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v GOPROXY=%v PWD=%v %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["GOPROXY"], env["PWD"], strings.Join(args, " ")) +} + +// getSizesForArgs queries 'go list' for the appropriate +// Compiler and GOARCH arguments to pass to [types.SizesFor]. +func getSizesForArgs(ctx context.Context, inv gocommand.Invocation, gocmdRunner *gocommand.Runner) (string, string, error) { + inv.Verb = "list" + inv.Args = []string{"-f", "{{context.GOARCH}} {{context.Compiler}}", "--", "unsafe"} + stdout, stderr, friendlyErr, rawErr := gocmdRunner.RunRaw(ctx, inv) + var goarch, compiler string + if rawErr != nil { + rawErrMsg := rawErr.Error() + if strings.Contains(rawErrMsg, "cannot find main module") || + strings.Contains(rawErrMsg, "go.mod file not found") { + // User's running outside of a module. + // All bets are off. Get GOARCH and guess compiler is gc. + // TODO(matloob): Is this a problem in practice? + inv.Verb = "env" + inv.Args = []string{"GOARCH"} + envout, enverr := gocmdRunner.Run(ctx, inv) + if enverr != nil { + return "", "", enverr + } + goarch = strings.TrimSpace(envout.String()) + compiler = "gc" + } else if friendlyErr != nil { + return "", "", friendlyErr + } else { + // This should be unreachable, but be defensive + // in case RunRaw's error results are inconsistent. + return "", "", rawErr + } + } else { + fields := strings.Fields(stdout.String()) + if len(fields) < 2 { + return "", "", fmt.Errorf("could not parse GOARCH and Go compiler in format \" \":\nstdout: <<%s>>\nstderr: <<%s>>", + stdout.String(), stderr.String()) + } + goarch = fields[0] + compiler = fields[1] + } + return compiler, goarch, nil +} diff --git a/vendor/golang.org/x/tools/go/packages/golist_overlay.go b/vendor/golang.org/x/tools/go/packages/golist_overlay.go new file mode 100644 index 0000000..d823c47 --- /dev/null +++ b/vendor/golang.org/x/tools/go/packages/golist_overlay.go @@ -0,0 +1,83 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packages + +import ( + "encoding/json" + "path/filepath" + + "golang.org/x/tools/internal/gocommand" +) + +// determineRootDirs returns a mapping from absolute directories that could +// contain code to their corresponding import path prefixes. +func (state *golistState) determineRootDirs() (map[string]string, error) { + env, err := state.getEnv() + if err != nil { + return nil, err + } + if env["GOMOD"] != "" { + state.rootsOnce.Do(func() { + state.rootDirs, state.rootDirsError = state.determineRootDirsModules() + }) + } else { + state.rootsOnce.Do(func() { + state.rootDirs, state.rootDirsError = state.determineRootDirsGOPATH() + }) + } + return state.rootDirs, state.rootDirsError +} + +func (state *golistState) determineRootDirsModules() (map[string]string, error) { + // List all of the modules--the first will be the directory for the main + // module. Any replaced modules will also need to be treated as roots. + // Editing files in the module cache isn't a great idea, so we don't + // plan to ever support that. + out, err := state.invokeGo("list", "-m", "-json", "all") + if err != nil { + // 'go list all' will fail if we're outside of a module and + // GO111MODULE=on. Try falling back without 'all'. + var innerErr error + out, innerErr = state.invokeGo("list", "-m", "-json") + if innerErr != nil { + return nil, err + } + } + roots := map[string]string{} + modules := map[string]string{} + var i int + for dec := json.NewDecoder(out); dec.More(); { + mod := new(gocommand.ModuleJSON) + if err := dec.Decode(mod); err != nil { + return nil, err + } + if mod.Dir != "" && mod.Path != "" { + // This is a valid module; add it to the map. + absDir, err := filepath.Abs(mod.Dir) + if err != nil { + return nil, err + } + modules[absDir] = mod.Path + // The first result is the main module. + if i == 0 || mod.Replace != nil && mod.Replace.Path != "" { + roots[absDir] = mod.Path + } + } + i++ + } + return roots, nil +} + +func (state *golistState) determineRootDirsGOPATH() (map[string]string, error) { + m := map[string]string{} + for _, dir := range filepath.SplitList(state.mustGetEnv()["GOPATH"]) { + absDir, err := filepath.Abs(dir) + if err != nil { + return nil, err + } + m[filepath.Join(absDir, "src")] = "" + } + return m, nil +} diff --git a/vendor/golang.org/x/tools/go/packages/loadmode_string.go b/vendor/golang.org/x/tools/go/packages/loadmode_string.go new file mode 100644 index 0000000..69eec9f --- /dev/null +++ b/vendor/golang.org/x/tools/go/packages/loadmode_string.go @@ -0,0 +1,56 @@ +// Copyright 2019 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 packages + +import ( + "fmt" + "strings" +) + +var modes = [...]struct { + mode LoadMode + name string +}{ + {NeedName, "NeedName"}, + {NeedFiles, "NeedFiles"}, + {NeedCompiledGoFiles, "NeedCompiledGoFiles"}, + {NeedImports, "NeedImports"}, + {NeedDeps, "NeedDeps"}, + {NeedExportFile, "NeedExportFile"}, + {NeedTypes, "NeedTypes"}, + {NeedSyntax, "NeedSyntax"}, + {NeedTypesInfo, "NeedTypesInfo"}, + {NeedTypesSizes, "NeedTypesSizes"}, + {NeedForTest, "NeedForTest"}, + {NeedModule, "NeedModule"}, + {NeedEmbedFiles, "NeedEmbedFiles"}, + {NeedEmbedPatterns, "NeedEmbedPatterns"}, + {NeedTarget, "NeedTarget"}, +} + +func (mode LoadMode) String() string { + if mode == 0 { + return "LoadMode(0)" + } + var out []string + // named bits + for _, item := range modes { + if (mode & item.mode) != 0 { + mode ^= item.mode + out = append(out, item.name) + } + } + // unnamed residue + if mode != 0 { + if out == nil { + return fmt.Sprintf("LoadMode(%#x)", int(mode)) + } + out = append(out, fmt.Sprintf("%#x", int(mode))) + } + if len(out) == 1 { + return out[0] + } + return "(" + strings.Join(out, "|") + ")" +} diff --git a/vendor/golang.org/x/tools/go/packages/packages.go b/vendor/golang.org/x/tools/go/packages/packages.go new file mode 100644 index 0000000..060ab08 --- /dev/null +++ b/vendor/golang.org/x/tools/go/packages/packages.go @@ -0,0 +1,1559 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packages + +// See doc.go for package documentation and implementation notes. + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "go/ast" + "go/parser" + "go/scanner" + "go/token" + "go/types" + "log" + "os" + "path/filepath" + "runtime" + "strings" + "sync" + "sync/atomic" + "time" + + "golang.org/x/sync/errgroup" + + "golang.org/x/tools/go/gcexportdata" + "golang.org/x/tools/internal/gocommand" + "golang.org/x/tools/internal/packagesinternal" + "golang.org/x/tools/internal/typesinternal" +) + +// A LoadMode controls the amount of detail to return when loading. +// The bits below can be combined to specify which fields should be +// filled in the result packages. +// +// The zero value is a special case, equivalent to combining +// the NeedName, NeedFiles, and NeedCompiledGoFiles bits. +// +// ID and Errors (if present) will always be filled. +// [Load] may return more information than requested. +// +// The Mode flag is a union of several bits named NeedName, +// NeedFiles, and so on, each of which determines whether +// a given field of Package (Name, Files, etc) should be +// populated. +// +// For convenience, we provide named constants for the most +// common combinations of Need flags: +// +// [LoadFiles] lists of files in each package +// [LoadImports] ... plus imports +// [LoadTypes] ... plus type information +// [LoadSyntax] ... plus type-annotated syntax +// [LoadAllSyntax] ... for all dependencies +// +// Unfortunately there are a number of open bugs related to +// interactions among the LoadMode bits: +// - https://go.dev/issue/56633 +// - https://go.dev/issue/56677 +// - https://go.dev/issue/58726 +// - https://go.dev/issue/63517 +type LoadMode int + +const ( + // NeedName adds Name and PkgPath. + NeedName LoadMode = 1 << iota + + // NeedFiles adds Dir, GoFiles, OtherFiles, and IgnoredFiles + NeedFiles + + // NeedCompiledGoFiles adds CompiledGoFiles. + NeedCompiledGoFiles + + // NeedImports adds Imports. If NeedDeps is not set, the Imports field will contain + // "placeholder" Packages with only the ID set. + NeedImports + + // NeedDeps adds the fields requested by the LoadMode in the packages in Imports. + NeedDeps + + // NeedExportFile adds ExportFile. + NeedExportFile + + // NeedTypes adds Types, Fset, and IllTyped. + NeedTypes + + // NeedSyntax adds Syntax and Fset. + NeedSyntax + + // NeedTypesInfo adds TypesInfo and Fset. + NeedTypesInfo + + // NeedTypesSizes adds TypesSizes. + NeedTypesSizes + + // needInternalDepsErrors adds the internal deps errors field for use by gopls. + needInternalDepsErrors + + // NeedForTest adds ForTest. + // + // Tests must also be set on the context for this field to be populated. + NeedForTest + + // typecheckCgo enables full support for type checking cgo. Requires Go 1.15+. + // Modifies CompiledGoFiles and Types, and has no effect on its own. + typecheckCgo + + // NeedModule adds Module. + NeedModule + + // NeedEmbedFiles adds EmbedFiles. + NeedEmbedFiles + + // NeedEmbedPatterns adds EmbedPatterns. + NeedEmbedPatterns + + // NeedTarget adds Target. + NeedTarget + + // Be sure to update loadmode_string.go when adding new items! +) + +const ( + // LoadFiles loads the name and file names for the initial packages. + LoadFiles = NeedName | NeedFiles | NeedCompiledGoFiles + + // LoadImports loads the name, file names, and import mapping for the initial packages. + LoadImports = LoadFiles | NeedImports + + // LoadTypes loads exported type information for the initial packages. + LoadTypes = LoadImports | NeedTypes | NeedTypesSizes + + // LoadSyntax loads typed syntax for the initial packages. + LoadSyntax = LoadTypes | NeedSyntax | NeedTypesInfo + + // LoadAllSyntax loads typed syntax for the initial packages and all dependencies. + LoadAllSyntax = LoadSyntax | NeedDeps + + // Deprecated: NeedExportsFile is a historical misspelling of NeedExportFile. + // + //go:fix inline + NeedExportsFile = NeedExportFile +) + +// A Config specifies details about how packages should be loaded. +// The zero value is a valid configuration. +// +// Calls to [Load] do not modify this struct. +type Config struct { + // Mode controls the level of information returned for each package. + Mode LoadMode + + // Context specifies the context for the load operation. + // Cancelling the context may cause [Load] to abort and + // return an error. + Context context.Context + + // Logf is the logger for the config. + // If the user provides a logger, debug logging is enabled. + // If the GOPACKAGESDEBUG environment variable is set to true, + // but the logger is nil, default to log.Printf. + Logf func(format string, args ...any) + + // Dir is the directory in which to run the build system's query tool + // that provides information about the packages. + // If Dir is empty, the tool is run in the current directory. + Dir string + + // Env is the environment to use when invoking the build system's query tool. + // If Env is nil, the current environment is used. + // As in os/exec's Cmd, only the last value in the slice for + // each environment key is used. To specify the setting of only + // a few variables, append to the current environment, as in: + // + // opt.Env = append(os.Environ(), "GOOS=plan9", "GOARCH=386") + // + Env []string + + // BuildFlags is a list of command-line flags to be passed through to + // the build system's query tool. + BuildFlags []string + + // Fset provides source position information for syntax trees and types. + // If Fset is nil, Load will use a new fileset, but preserve Fset's value. + Fset *token.FileSet + + // ParseFile is called to read and parse each file + // when preparing a package's type-checked syntax tree. + // It must be safe to call ParseFile simultaneously from multiple goroutines. + // If ParseFile is nil, the loader will uses parser.ParseFile. + // + // ParseFile should parse the source from src and use filename only for + // recording position information. + // + // An application may supply a custom implementation of ParseFile + // to change the effective file contents or the behavior of the parser, + // or to modify the syntax tree. For example, selectively eliminating + // unwanted function bodies can significantly accelerate type checking. + ParseFile func(fset *token.FileSet, filename string, src []byte) (*ast.File, error) + + // If Tests is set, the loader includes not just the packages + // matching a particular pattern but also any related test packages, + // including test-only variants of the package and the test executable. + // + // For example, when using the go command, loading "fmt" with Tests=true + // returns four packages, with IDs "fmt" (the standard package), + // "fmt [fmt.test]" (the package as compiled for the test), + // "fmt_test" (the test functions from source files in package fmt_test), + // and "fmt.test" (the test binary). + // + // In build systems with explicit names for tests, + // setting Tests may have no effect. + Tests bool + + // Overlay is a mapping from absolute file paths to file contents. + // + // For each map entry, [Load] uses the alternative file + // contents provided by the overlay mapping instead of reading + // from the file system. This mechanism can be used to enable + // editor-integrated tools to correctly analyze the contents + // of modified but unsaved buffers, for example. + // + // The overlay mapping is passed to the build system's driver + // (see "The driver protocol") so that it too can report + // consistent package metadata about unsaved files. However, + // drivers may vary in their level of support for overlays. + Overlay map[string][]byte +} + +// Load loads and returns the Go packages named by the given patterns. +// +// The cfg parameter specifies loading options; nil behaves the same as an empty [Config]. +// +// The [Config.Mode] field is a set of bits that determine what kinds +// of information should be computed and returned. Modes that require +// more information tend to be slower. See [LoadMode] for details +// and important caveats. Its zero value is equivalent to +// [NeedName] | [NeedFiles] | [NeedCompiledGoFiles]. +// +// Each call to Load returns a new set of [Package] instances. +// The Packages and their Imports form a directed acyclic graph. +// +// If the [NeedTypes] mode flag was set, each call to Load uses a new +// [types.Importer], so [types.Object] and [types.Type] values from +// different calls to Load must not be mixed as they will have +// inconsistent notions of type identity. +// +// If any of the patterns was invalid as defined by the +// underlying build system, Load returns an error. +// It may return an empty list of packages without an error, +// for instance for an empty expansion of a valid wildcard. +// Errors associated with a particular package are recorded in the +// corresponding Package's Errors list, and do not cause Load to +// return an error. Clients may need to handle such errors before +// proceeding with further analysis. The [PrintErrors] function is +// provided for convenient display of all errors. +func Load(cfg *Config, patterns ...string) ([]*Package, error) { + ld := newLoader(cfg) + response, external, err := defaultDriver(&ld.Config, patterns...) + if err != nil { + return nil, err + } + + ld.sizes = types.SizesFor(response.Compiler, response.Arch) + if ld.sizes == nil && ld.Config.Mode&(NeedTypes|NeedTypesSizes|NeedTypesInfo) != 0 { + // Type size information is needed but unavailable. + if external { + // An external driver may fail to populate the Compiler/GOARCH fields, + // especially since they are relatively new (see #63700). + // Provide a sensible fallback in this case. + ld.sizes = types.SizesFor("gc", runtime.GOARCH) + if ld.sizes == nil { // gccgo-only arch + ld.sizes = types.SizesFor("gc", "amd64") + } + } else { + // Go list should never fail to deliver accurate size information. + // Reject the whole Load since the error is the same for every package. + return nil, fmt.Errorf("can't determine type sizes for compiler %q on GOARCH %q", + response.Compiler, response.Arch) + } + } + + return ld.refine(response) +} + +// defaultDriver is a driver that implements go/packages' fallback behavior. +// It will try to request to an external driver, if one exists. If there's +// no external driver, or the driver returns a response with NotHandled set, +// defaultDriver will fall back to the go list driver. +// The boolean result indicates that an external driver handled the request. +func defaultDriver(cfg *Config, patterns ...string) (*DriverResponse, bool, error) { + const ( + // windowsArgMax specifies the maximum command line length for + // the Windows' CreateProcess function. + windowsArgMax = 32767 + // maxEnvSize is a very rough estimation of the maximum environment + // size of a user. + maxEnvSize = 16384 + // safeArgMax specifies the maximum safe command line length to use + // by the underlying driver excl. the environment. We choose the Windows' + // ARG_MAX as the starting point because it's one of the lowest ARG_MAX + // constants out of the different supported platforms, + // e.g., https://www.in-ulm.de/~mascheck/various/argmax/#results. + safeArgMax = windowsArgMax - maxEnvSize + ) + chunks, err := splitIntoChunks(patterns, safeArgMax) + if err != nil { + return nil, false, err + } + + if driver := findExternalDriver(cfg); driver != nil { + response, err := callDriverOnChunks(driver, cfg, chunks) + if err != nil { + return nil, false, err + } else if !response.NotHandled { + return response, true, nil + } + // not handled: fall through + } + + // go list fallback + + // Write overlays once, as there are many calls + // to 'go list' (one per chunk plus others too). + overlayFile, cleanupOverlay, err := gocommand.WriteOverlays(cfg.Overlay) + if err != nil { + return nil, false, err + } + defer cleanupOverlay() + + var runner gocommand.Runner // (shared across many 'go list' calls) + driver := func(cfg *Config, patterns []string) (*DriverResponse, error) { + return goListDriver(cfg, &runner, overlayFile, patterns) + } + response, err := callDriverOnChunks(driver, cfg, chunks) + if err != nil { + return nil, false, err + } + return response, false, err +} + +// splitIntoChunks chunks the slice so that the total number of characters +// in a chunk is no longer than argMax. +func splitIntoChunks(patterns []string, argMax int) ([][]string, error) { + if argMax <= 0 { + return nil, errors.New("failed to split patterns into chunks, negative safe argMax value") + } + var chunks [][]string + charsInChunk := 0 + nextChunkStart := 0 + for i, v := range patterns { + vChars := len(v) + if vChars > argMax { + // a single pattern is longer than the maximum safe ARG_MAX, hardly should happen + return nil, errors.New("failed to split patterns into chunks, a pattern is too long") + } + charsInChunk += vChars + 1 // +1 is for a whitespace between patterns that has to be counted too + if charsInChunk > argMax { + chunks = append(chunks, patterns[nextChunkStart:i]) + nextChunkStart = i + charsInChunk = vChars + } + } + // add the last chunk + if nextChunkStart < len(patterns) { + chunks = append(chunks, patterns[nextChunkStart:]) + } + return chunks, nil +} + +func callDriverOnChunks(driver driver, cfg *Config, chunks [][]string) (*DriverResponse, error) { + if len(chunks) == 0 { + return driver(cfg, nil) + } + responses := make([]*DriverResponse, len(chunks)) + errNotHandled := errors.New("driver returned NotHandled") + var g errgroup.Group + for i, chunk := range chunks { + g.Go(func() (err error) { + responses[i], err = driver(cfg, chunk) + if responses[i] != nil && responses[i].NotHandled { + err = errNotHandled + } + return err + }) + } + if err := g.Wait(); err != nil { + if errors.Is(err, errNotHandled) { + return &DriverResponse{NotHandled: true}, nil + } + return nil, err + } + return mergeResponses(responses...), nil +} + +func mergeResponses(responses ...*DriverResponse) *DriverResponse { + if len(responses) == 0 { + return nil + } + response := newDeduper() + response.dr.NotHandled = false + response.dr.Compiler = responses[0].Compiler + response.dr.Arch = responses[0].Arch + response.dr.GoVersion = responses[0].GoVersion + for _, v := range responses { + response.addAll(v) + } + return response.dr +} + +// A Package describes a loaded Go package. +// +// It also defines part of the JSON schema of [DriverResponse]. +// See the package documentation for an overview. +type Package struct { + // ID is a unique identifier for a package, + // in a syntax provided by the underlying build system. + // + // Because the syntax varies based on the build system, + // clients should treat IDs as opaque and not attempt to + // interpret them. + ID string + + // Name is the package name as it appears in the package source code. + Name string + + // PkgPath is the package path as used by the go/types package. + PkgPath string + + // Dir is the directory associated with the package, if it exists. + // + // For packages listed by the go command, this is the directory containing + // the package files. + Dir string + + // Errors contains any errors encountered querying the metadata + // of the package, or while parsing or type-checking its files. + Errors []Error + + // TypeErrors contains the subset of errors produced during type checking. + TypeErrors []types.Error + + // GoFiles lists the absolute file paths of the package's Go source files. + // It may include files that should not be compiled, for example because + // they contain non-matching build tags, are documentary pseudo-files such as + // unsafe/unsafe.go or builtin/builtin.go, or are subject to cgo preprocessing. + GoFiles []string + + // CompiledGoFiles lists the absolute file paths of the package's source + // files that are suitable for type checking. + // This may differ from GoFiles if files are processed before compilation. + CompiledGoFiles []string + + // OtherFiles lists the absolute file paths of the package's non-Go source files, + // including assembly, C, C++, Fortran, Objective-C, SWIG, and so on. + OtherFiles []string + + // EmbedFiles lists the absolute file paths of the package's files + // embedded with go:embed. + EmbedFiles []string + + // EmbedPatterns lists the absolute file patterns of the package's + // files embedded with go:embed. + EmbedPatterns []string + + // IgnoredFiles lists source files that are not part of the package + // using the current build configuration but that might be part of + // the package using other build configurations. + IgnoredFiles []string + + // ExportFile is the absolute path to a file containing type + // information for the package as provided by the build system. + ExportFile string + + // Target is the absolute install path of the .a file, for libraries, + // and of the executable file, for binaries. + Target string + + // Imports maps import paths appearing in the package's Go source files + // to corresponding loaded Packages. + Imports map[string]*Package + + // Module is the module information for the package if it exists. + // + // Note: it may be missing for std and cmd; see Go issue #65816. + Module *Module + + // -- The following fields are not part of the driver JSON schema. -- + + // Types provides type information for the package. + // The NeedTypes LoadMode bit sets this field for packages matching the + // patterns; type information for dependencies may be missing or incomplete, + // unless NeedDeps and NeedImports are also set. + // + // Each call to [Load] returns a consistent set of type + // symbols, as defined by the comment at [types.Identical]. + // Avoid mixing type information from two or more calls to [Load]. + Types *types.Package `json:"-"` + + // Fset provides position information for Types, TypesInfo, and Syntax. + // It is set only when Types is set. + Fset *token.FileSet `json:"-"` + + // IllTyped indicates whether the package or any dependency contains errors. + // It is set only when Types is set. + IllTyped bool `json:"-"` + + // Syntax is the package's syntax trees, for the files listed in CompiledGoFiles. + // + // The NeedSyntax LoadMode bit populates this field for packages matching the patterns. + // If NeedDeps and NeedImports are also set, this field will also be populated + // for dependencies. + // + // Syntax is kept in the same order as CompiledGoFiles, with the caveat that nils are + // removed. If parsing returned nil, Syntax may be shorter than CompiledGoFiles. + Syntax []*ast.File `json:"-"` + + // TypesInfo provides type information about the package's syntax trees. + // It is set only when Syntax is set. + TypesInfo *types.Info `json:"-"` + + // TypesSizes provides the effective size function for types in TypesInfo. + TypesSizes types.Sizes `json:"-"` + + // -- internal -- + + // ForTest is the package under test, if any. + ForTest string + + // depsErrors is the DepsErrors field from the go list response, if any. + depsErrors []*packagesinternal.PackageError +} + +// Module provides module information for a package. +// +// It also defines part of the JSON schema of [DriverResponse]. +// See the package documentation for an overview. +type Module struct { + Path string // module path + Version string // module version + Replace *Module // replaced by this module + Time *time.Time // time version was created + Main bool // is this the main module? + Indirect bool // is this module only an indirect dependency of main module? + Dir string // directory holding files for this module, if any + GoMod string // path to go.mod file used when loading this module, if any + GoVersion string // go version used in module + Error *ModuleError // error loading module +} + +// ModuleError holds errors loading a module. +type ModuleError struct { + Err string // the error itself +} + +func init() { + packagesinternal.GetDepsErrors = func(p any) []*packagesinternal.PackageError { + return p.(*Package).depsErrors + } + packagesinternal.TypecheckCgo = int(typecheckCgo) + packagesinternal.DepsErrors = int(needInternalDepsErrors) +} + +// An Error describes a problem with a package's metadata, syntax, or types. +type Error struct { + Pos string // "file:line:col" or "file:line" or "" or "-" + Msg string + Kind ErrorKind +} + +// ErrorKind describes the source of the error, allowing the user to +// differentiate between errors generated by the driver, the parser, or the +// type-checker. +type ErrorKind int + +const ( + UnknownError ErrorKind = iota + ListError + ParseError + TypeError +) + +func (err Error) Error() string { + pos := err.Pos + if pos == "" { + pos = "-" // like token.Position{}.String() + } + return pos + ": " + err.Msg +} + +// flatPackage is the JSON form of Package +// It drops all the type and syntax fields, and transforms the Imports +// +// TODO(adonovan): identify this struct with Package, effectively +// publishing the JSON protocol. +type flatPackage struct { + ID string + Name string `json:",omitempty"` + PkgPath string `json:",omitempty"` + Errors []Error `json:",omitempty"` + GoFiles []string `json:",omitempty"` + CompiledGoFiles []string `json:",omitempty"` + OtherFiles []string `json:",omitempty"` + EmbedFiles []string `json:",omitempty"` + EmbedPatterns []string `json:",omitempty"` + IgnoredFiles []string `json:",omitempty"` + ExportFile string `json:",omitempty"` + Imports map[string]string `json:",omitempty"` +} + +// MarshalJSON returns the Package in its JSON form. +// For the most part, the structure fields are written out unmodified, and +// the type and syntax fields are skipped. +// The imports are written out as just a map of path to package id. +// The errors are written using a custom type that tries to preserve the +// structure of error types we know about. +// +// This method exists to enable support for additional build systems. It is +// not intended for use by clients of the API and we may change the format. +func (p *Package) MarshalJSON() ([]byte, error) { + flat := &flatPackage{ + ID: p.ID, + Name: p.Name, + PkgPath: p.PkgPath, + Errors: p.Errors, + GoFiles: p.GoFiles, + CompiledGoFiles: p.CompiledGoFiles, + OtherFiles: p.OtherFiles, + EmbedFiles: p.EmbedFiles, + EmbedPatterns: p.EmbedPatterns, + IgnoredFiles: p.IgnoredFiles, + ExportFile: p.ExportFile, + } + if len(p.Imports) > 0 { + flat.Imports = make(map[string]string, len(p.Imports)) + for path, ipkg := range p.Imports { + flat.Imports[path] = ipkg.ID + } + } + return json.Marshal(flat) +} + +// UnmarshalJSON reads in a Package from its JSON format. +// See MarshalJSON for details about the format accepted. +func (p *Package) UnmarshalJSON(b []byte) error { + flat := &flatPackage{} + if err := json.Unmarshal(b, &flat); err != nil { + return err + } + *p = Package{ + ID: flat.ID, + Name: flat.Name, + PkgPath: flat.PkgPath, + Errors: flat.Errors, + GoFiles: flat.GoFiles, + CompiledGoFiles: flat.CompiledGoFiles, + OtherFiles: flat.OtherFiles, + EmbedFiles: flat.EmbedFiles, + EmbedPatterns: flat.EmbedPatterns, + IgnoredFiles: flat.IgnoredFiles, + ExportFile: flat.ExportFile, + } + if len(flat.Imports) > 0 { + p.Imports = make(map[string]*Package, len(flat.Imports)) + for path, id := range flat.Imports { + p.Imports[path] = &Package{ID: id} + } + } + return nil +} + +func (p *Package) String() string { return p.ID } + +// loaderPackage augments Package with state used during the loading phase +type loaderPackage struct { + *Package + importErrors map[string]error // maps each bad import to its error + preds []*loaderPackage // packages that import this one + unfinishedSuccs atomic.Int32 // number of direct imports not yet loaded + color uint8 // for cycle detection + needsrc bool // load from source (Mode >= LoadTypes) + needtypes bool // type information is either requested or depended on + initial bool // package was matched by a pattern + goVersion int // minor version number of go command on PATH +} + +// loader holds the working state of a single call to load. +type loader struct { + pkgs map[string]*loaderPackage // keyed by Package.ID + Config + sizes types.Sizes // non-nil if needed by mode + parseCache map[string]*parseValue + parseCacheMu sync.Mutex + exportMu sync.Mutex // enforces mutual exclusion of exportdata operations + + // Config.Mode contains the implied mode (see impliedLoadMode). + // Implied mode contains all the fields we need the data for. + // In requestedMode there are the actually requested fields. + // We'll zero them out before returning packages to the user. + // This makes it easier for us to get the conditions where + // we need certain modes right. + requestedMode LoadMode +} + +type parseValue struct { + f *ast.File + err error + ready chan struct{} +} + +func newLoader(cfg *Config) *loader { + ld := &loader{ + parseCache: map[string]*parseValue{}, + } + if cfg != nil { + ld.Config = *cfg + // If the user has provided a logger, use it. + ld.Config.Logf = cfg.Logf + } + if ld.Config.Logf == nil { + // If the GOPACKAGESDEBUG environment variable is set to true, + // but the user has not provided a logger, default to log.Printf. + if debug { + ld.Config.Logf = log.Printf + } else { + ld.Config.Logf = func(format string, args ...any) {} + } + } + if ld.Config.Mode == 0 { + ld.Config.Mode = NeedName | NeedFiles | NeedCompiledGoFiles // Preserve zero behavior of Mode for backwards compatibility. + } + if ld.Config.Env == nil { + ld.Config.Env = os.Environ() + } + if ld.Context == nil { + ld.Context = context.Background() + } + if ld.Dir == "" { + if dir, err := os.Getwd(); err == nil { + ld.Dir = dir + } + } + + // Save the actually requested fields. We'll zero them out before returning packages to the user. + ld.requestedMode = ld.Mode + ld.Mode = impliedLoadMode(ld.Mode) + + if ld.Mode&(NeedSyntax|NeedTypes|NeedTypesInfo) != 0 { + if ld.Fset == nil { + ld.Fset = token.NewFileSet() + } + + // ParseFile is required even in LoadTypes mode + // because we load source if export data is missing. + if ld.ParseFile == nil { + ld.ParseFile = func(fset *token.FileSet, filename string, src []byte) (*ast.File, error) { + // We implicitly promise to keep doing ast.Object resolution. :( + const mode = parser.AllErrors | parser.ParseComments + return parser.ParseFile(fset, filename, src, mode) + } + } + } + + return ld +} + +// refine connects the supplied packages into a graph and then adds type +// and syntax information as requested by the LoadMode. +func (ld *loader) refine(response *DriverResponse) ([]*Package, error) { + roots := response.Roots + rootMap := make(map[string]int, len(roots)) + for i, root := range roots { + rootMap[root] = i + } + ld.pkgs = make(map[string]*loaderPackage) + // first pass, fixup and build the map and roots + var initial = make([]*loaderPackage, len(roots)) + for _, pkg := range response.Packages { + rootIndex := -1 + if i, found := rootMap[pkg.ID]; found { + rootIndex = i + } + + // Overlays can invalidate export data. + // TODO(matloob): make this check fine-grained based on dependencies on overlaid files + exportDataInvalid := len(ld.Overlay) > 0 || pkg.ExportFile == "" && pkg.PkgPath != "unsafe" + // This package needs type information if the caller requested types and the package is + // either a root, or it's a non-root and the user requested dependencies ... + needtypes := (ld.Mode&(NeedTypes|NeedTypesInfo) != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0)) + // This package needs source if the call requested source (or types info, which implies source) + // and the package is either a root, or itas a non- root and the user requested dependencies... + needsrc := ((ld.Mode&(NeedSyntax|NeedTypesInfo) != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0)) || + // ... or if we need types and the exportData is invalid. We fall back to (incompletely) + // typechecking packages from source if they fail to compile. + (ld.Mode&(NeedTypes|NeedTypesInfo) != 0 && exportDataInvalid)) && pkg.PkgPath != "unsafe" + lpkg := &loaderPackage{ + Package: pkg, + needtypes: needtypes, + needsrc: needsrc, + goVersion: response.GoVersion, + } + ld.pkgs[lpkg.ID] = lpkg + if rootIndex >= 0 { + initial[rootIndex] = lpkg + lpkg.initial = true + } + } + for i, root := range roots { + if initial[i] == nil { + return nil, fmt.Errorf("root package %v is missing", root) + } + } + + // Materialize the import graph if it is needed (NeedImports), + // or if we'll be using loadPackages (Need{Syntax|Types|TypesInfo}). + var leaves []*loaderPackage // packages with no unfinished successors + if ld.Mode&(NeedImports|NeedSyntax|NeedTypes|NeedTypesInfo) != 0 { + const ( + white = 0 // new + grey = 1 // in progress + black = 2 // complete + ) + + // visit traverses the import graph, depth-first, + // and materializes the graph as Packages.Imports. + // + // Valid imports are saved in the Packages.Import map. + // Invalid imports (cycles and missing nodes) are saved in the importErrors map. + // Thus, even in the presence of both kinds of errors, + // the Import graph remains a DAG. + // + // visit returns whether the package needs src or has a transitive + // dependency on a package that does. These are the only packages + // for which we load source code. + var stack []*loaderPackage + var visit func(from, lpkg *loaderPackage) bool + visit = func(from, lpkg *loaderPackage) bool { + if lpkg.color == grey { + panic("internal error: grey node") + } + if lpkg.color == white { + lpkg.color = grey + stack = append(stack, lpkg) // push + stubs := lpkg.Imports // the structure form has only stubs with the ID in the Imports + lpkg.Imports = make(map[string]*Package, len(stubs)) + for importPath, ipkg := range stubs { + var importErr error + imp := ld.pkgs[ipkg.ID] + if imp == nil { + // (includes package "C" when DisableCgo) + importErr = fmt.Errorf("missing package: %q", ipkg.ID) + } else if imp.color == grey { + importErr = fmt.Errorf("import cycle: %s", stack) + } + if importErr != nil { + if lpkg.importErrors == nil { + lpkg.importErrors = make(map[string]error) + } + lpkg.importErrors[importPath] = importErr + continue + } + + if visit(lpkg, imp) { + lpkg.needsrc = true + } + lpkg.Imports[importPath] = imp.Package + } + + // -- postorder -- + + // Complete type information is required for the + // immediate dependencies of each source package. + if lpkg.needsrc && ld.Mode&NeedTypes != 0 { + for _, ipkg := range lpkg.Imports { + ld.pkgs[ipkg.ID].needtypes = true + } + } + + // NeedTypeSizes causes TypeSizes to be set even + // on packages for which types aren't needed. + if ld.Mode&NeedTypesSizes != 0 { + lpkg.TypesSizes = ld.sizes + } + + // Add packages with no imports directly to the queue of leaves. + if len(lpkg.Imports) == 0 { + leaves = append(leaves, lpkg) + } + + stack = stack[:len(stack)-1] // pop + lpkg.color = black + } + + // Add edge from predecessor. + if from != nil { + from.unfinishedSuccs.Add(+1) // incref + lpkg.preds = append(lpkg.preds, from) + } + + return lpkg.needsrc + } + + // For each initial package, create its import DAG. + for _, lpkg := range initial { + visit(nil, lpkg) + } + + } else { + // !NeedImports: drop the stub (ID-only) import packages + // that we are not even going to try to resolve. + for _, lpkg := range initial { + lpkg.Imports = nil + } + } + + // Load type data and syntax if needed, starting at + // the initial packages (roots of the import DAG). + if ld.Mode&(NeedSyntax|NeedTypes|NeedTypesInfo) != 0 { + + // We avoid using g.SetLimit to limit concurrency as + // it makes g.Go stop accepting work, which prevents + // workers from enqeuing, and thus finishing, and thus + // allowing the group to make progress: deadlock. + // + // Instead we use the ioLimit and cpuLimit semaphores. + g, _ := errgroup.WithContext(ld.Context) + + // enqueues adds a package to the type-checking queue. + // It must have no unfinished successors. + var enqueue func(*loaderPackage) + enqueue = func(lpkg *loaderPackage) { + g.Go(func() error { + // Parse and type-check. + ld.loadPackage(lpkg) + + // Notify each waiting predecessor, + // and enqueue it when it becomes a leaf. + for _, pred := range lpkg.preds { + if pred.unfinishedSuccs.Add(-1) == 0 { // decref + enqueue(pred) + } + } + + return nil + }) + } + + // Load leaves first, adding new packages + // to the queue as they become leaves. + for _, leaf := range leaves { + enqueue(leaf) + } + + if err := g.Wait(); err != nil { + return nil, err // cancelled + } + } + + // If the context is done, return its error and + // throw out [likely] incomplete packages. + if err := ld.Context.Err(); err != nil { + return nil, err + } + + result := make([]*Package, len(initial)) + for i, lpkg := range initial { + result[i] = lpkg.Package + } + for i := range ld.pkgs { + // Clear all unrequested fields, + // to catch programs that use more than they request. + if ld.requestedMode&NeedName == 0 { + ld.pkgs[i].Name = "" + ld.pkgs[i].PkgPath = "" + } + if ld.requestedMode&NeedFiles == 0 { + ld.pkgs[i].GoFiles = nil + ld.pkgs[i].OtherFiles = nil + ld.pkgs[i].IgnoredFiles = nil + } + if ld.requestedMode&NeedEmbedFiles == 0 { + ld.pkgs[i].EmbedFiles = nil + } + if ld.requestedMode&NeedEmbedPatterns == 0 { + ld.pkgs[i].EmbedPatterns = nil + } + if ld.requestedMode&NeedCompiledGoFiles == 0 { + ld.pkgs[i].CompiledGoFiles = nil + } + if ld.requestedMode&NeedImports == 0 { + ld.pkgs[i].Imports = nil + } + if ld.requestedMode&NeedExportFile == 0 { + ld.pkgs[i].ExportFile = "" + } + if ld.requestedMode&NeedTypes == 0 { + ld.pkgs[i].Types = nil + ld.pkgs[i].IllTyped = false + } + if ld.requestedMode&NeedSyntax == 0 { + ld.pkgs[i].Syntax = nil + } + if ld.requestedMode&(NeedSyntax|NeedTypes|NeedTypesInfo) == 0 { + ld.pkgs[i].Fset = nil + } + if ld.requestedMode&NeedTypesInfo == 0 { + ld.pkgs[i].TypesInfo = nil + } + if ld.requestedMode&NeedTypesSizes == 0 { + ld.pkgs[i].TypesSizes = nil + } + if ld.requestedMode&NeedModule == 0 { + ld.pkgs[i].Module = nil + } + } + + return result, nil +} + +// loadPackage loads/parses/typechecks the specified package. +// It must be called only once per Package, +// after immediate dependencies are loaded. +// Precondition: ld.Mode&(NeedSyntax|NeedTypes|NeedTypesInfo) != 0. +func (ld *loader) loadPackage(lpkg *loaderPackage) { + if lpkg.PkgPath == "unsafe" { + // Fill in the blanks to avoid surprises. + lpkg.Types = types.Unsafe + lpkg.Fset = ld.Fset + lpkg.Syntax = []*ast.File{} + lpkg.TypesInfo = new(types.Info) + lpkg.TypesSizes = ld.sizes + return + } + + // Call NewPackage directly with explicit name. + // This avoids skew between golist and go/types when the files' + // package declarations are inconsistent. + lpkg.Types = types.NewPackage(lpkg.PkgPath, lpkg.Name) + lpkg.Fset = ld.Fset + + // Start shutting down if the context is done and do not load + // source or export data files. + // Packages that import this one will have ld.Context.Err() != nil. + // ld.Context.Err() will be returned later by refine. + if ld.Context.Err() != nil { + return + } + + // Subtle: we populate all Types fields with an empty Package + // before loading export data so that export data processing + // never has to create a types.Package for an indirect dependency, + // which would then require that such created packages be explicitly + // inserted back into the Import graph as a final step after export data loading. + // (Hence this return is after the Types assignment.) + // The Diamond test exercises this case. + if !lpkg.needtypes && !lpkg.needsrc { + return + } + + // TODO(adonovan): this condition looks wrong: + // I think it should be lpkg.needtypes && !lpg.needsrc, + // so that NeedSyntax without NeedTypes can be satisfied by export data. + if !lpkg.needsrc { + if err := ld.loadFromExportData(lpkg); err != nil { + lpkg.Errors = append(lpkg.Errors, Error{ + Pos: "-", + Msg: err.Error(), + Kind: UnknownError, // e.g. can't find/open/parse export data + }) + } + return // not a source package, don't get syntax trees + } + + appendError := func(err error) { + // Convert various error types into the one true Error. + var errs []Error + switch err := err.(type) { + case Error: + // from driver + errs = append(errs, err) + + case *os.PathError: + // from parser + errs = append(errs, Error{ + Pos: err.Path + ":1", + Msg: err.Err.Error(), + Kind: ParseError, + }) + + case scanner.ErrorList: + // from parser + for _, err := range err { + errs = append(errs, Error{ + Pos: err.Pos.String(), + Msg: err.Msg, + Kind: ParseError, + }) + } + + case types.Error: + // from type checker + lpkg.TypeErrors = append(lpkg.TypeErrors, err) + errs = append(errs, Error{ + Pos: err.Fset.Position(err.Pos).String(), + Msg: err.Msg, + Kind: TypeError, + }) + + default: + // unexpected impoverished error from parser? + errs = append(errs, Error{ + Pos: "-", + Msg: err.Error(), + Kind: UnknownError, + }) + + // If you see this error message, please file a bug. + log.Printf("internal error: error %q (%T) without position", err, err) + } + + lpkg.Errors = append(lpkg.Errors, errs...) + } + + // If the go command on the PATH is newer than the runtime, + // then the go/{scanner,ast,parser,types} packages from the + // standard library may be unable to process the files + // selected by go list. + // + // There is currently no way to downgrade the effective + // version of the go command (see issue 52078), so we proceed + // with the newer go command but, in case of parse or type + // errors, we emit an additional diagnostic. + // + // See: + // - golang.org/issue/52078 (flag to set release tags) + // - golang.org/issue/50825 (gopls legacy version support) + // - golang.org/issue/55883 (go/packages confusing error) + // + // Should we assert a hard minimum of (currently) go1.16 here? + var runtimeVersion int + if _, err := fmt.Sscanf(runtime.Version(), "go1.%d", &runtimeVersion); err == nil && runtimeVersion < lpkg.goVersion { + defer func() { + if len(lpkg.Errors) > 0 { + appendError(Error{ + Pos: "-", + Msg: fmt.Sprintf("This application uses version go1.%d of the source-processing packages but runs version go1.%d of 'go list'. It may fail to process source files that rely on newer language features. If so, rebuild the application using a newer version of Go.", runtimeVersion, lpkg.goVersion), + Kind: UnknownError, + }) + } + }() + } + + if ld.Config.Mode&NeedTypes != 0 && len(lpkg.CompiledGoFiles) == 0 && lpkg.ExportFile != "" { + // The config requested loading sources and types, but sources are missing. + // Add an error to the package and fall back to loading from export data. + appendError(Error{"-", fmt.Sprintf("sources missing for package %s", lpkg.ID), ParseError}) + _ = ld.loadFromExportData(lpkg) // ignore any secondary errors + + return // can't get syntax trees for this package + } + + files, errs := ld.parseFiles(lpkg.CompiledGoFiles) + for _, err := range errs { + appendError(err) + } + + lpkg.Syntax = files + if ld.Config.Mode&(NeedTypes|NeedTypesInfo) == 0 { + return + } + + // Start shutting down if the context is done and do not type check. + // Packages that import this one will have ld.Context.Err() != nil. + // ld.Context.Err() will be returned later by refine. + if ld.Context.Err() != nil { + return + } + + // Populate TypesInfo only if needed, as it + // causes the type checker to work much harder. + if ld.Config.Mode&NeedTypesInfo != 0 { + lpkg.TypesInfo = &types.Info{ + Types: make(map[ast.Expr]types.TypeAndValue), + Defs: make(map[*ast.Ident]types.Object), + Uses: make(map[*ast.Ident]types.Object), + Implicits: make(map[ast.Node]types.Object), + Instances: make(map[*ast.Ident]types.Instance), + Scopes: make(map[ast.Node]*types.Scope), + Selections: make(map[*ast.SelectorExpr]*types.Selection), + FileVersions: make(map[*ast.File]string), + } + } + lpkg.TypesSizes = ld.sizes + + importer := importerFunc(func(path string) (*types.Package, error) { + if path == "unsafe" { + return types.Unsafe, nil + } + + // The imports map is keyed by import path. + ipkg := lpkg.Imports[path] + if ipkg == nil { + if err := lpkg.importErrors[path]; err != nil { + return nil, err + } + // There was skew between the metadata and the + // import declarations, likely due to an edit + // race, or because the ParseFile feature was + // used to supply alternative file contents. + return nil, fmt.Errorf("no metadata for %s", path) + } + + if ipkg.Types != nil && ipkg.Types.Complete() { + return ipkg.Types, nil + } + log.Fatalf("internal error: package %q without types was imported from %q", path, lpkg) + panic("unreachable") + }) + + // type-check + tc := &types.Config{ + Importer: importer, + + // Type-check bodies of functions only in initial packages. + // Example: for import graph A->B->C and initial packages {A,C}, + // we can ignore function bodies in B. + IgnoreFuncBodies: ld.Mode&NeedDeps == 0 && !lpkg.initial, + + Error: appendError, + Sizes: ld.sizes, // may be nil + } + if lpkg.Module != nil && lpkg.Module.GoVersion != "" { + tc.GoVersion = "go" + lpkg.Module.GoVersion + } + if (ld.Mode & typecheckCgo) != 0 { + if !typesinternal.SetUsesCgo(tc) { + appendError(Error{ + Msg: "typecheckCgo requires Go 1.15+", + Kind: ListError, + }) + return + } + } + + // Type-checking is CPU intensive. + cpuLimit <- unit{} // acquire a token + defer func() { <-cpuLimit }() // release a token + + typErr := types.NewChecker(tc, ld.Fset, lpkg.Types, lpkg.TypesInfo).Files(lpkg.Syntax) + lpkg.importErrors = nil // no longer needed + + // In go/types go1.21 and go1.22, Checker.Files failed fast with a + // a "too new" error, without calling tc.Error and without + // proceeding to type-check the package (#66525). + // We rely on the runtimeVersion error to give the suggested remedy. + if typErr != nil && len(lpkg.Errors) == 0 && len(lpkg.Syntax) > 0 { + if msg := typErr.Error(); strings.HasPrefix(msg, "package requires newer Go version") { + appendError(types.Error{ + Fset: ld.Fset, + Pos: lpkg.Syntax[0].Package, + Msg: msg, + }) + } + } + + // If !Cgo, the type-checker uses FakeImportC mode, so + // it doesn't invoke the importer for import "C", + // nor report an error for the import, + // or for any undefined C.f reference. + // We must detect this explicitly and correctly + // mark the package as IllTyped (by reporting an error). + // TODO(adonovan): if these errors are annoying, + // we could just set IllTyped quietly. + if tc.FakeImportC { + outer: + for _, f := range lpkg.Syntax { + for _, imp := range f.Imports { + if imp.Path.Value == `"C"` { + err := types.Error{Fset: ld.Fset, Pos: imp.Pos(), Msg: `import "C" ignored`} + appendError(err) + break outer + } + } + } + } + + // If types.Checker.Files had an error that was unreported, + // make sure to report the unknown error so the package is illTyped. + if typErr != nil && len(lpkg.Errors) == 0 { + appendError(typErr) + } + + // Record accumulated errors. + illTyped := len(lpkg.Errors) > 0 + if !illTyped { + for _, imp := range lpkg.Imports { + if imp.IllTyped { + illTyped = true + break + } + } + } + lpkg.IllTyped = illTyped +} + +// An importFunc is an implementation of the single-method +// types.Importer interface based on a function value. +type importerFunc func(path string) (*types.Package, error) + +func (f importerFunc) Import(path string) (*types.Package, error) { return f(path) } + +// We use a counting semaphore to limit +// the number of parallel I/O calls or CPU threads per process. +var ( + ioLimit = make(chan unit, 20) + cpuLimit = make(chan unit, runtime.GOMAXPROCS(0)) +) + +func (ld *loader) parseFile(filename string) (*ast.File, error) { + ld.parseCacheMu.Lock() + v, ok := ld.parseCache[filename] + if ok { + // cache hit + ld.parseCacheMu.Unlock() + <-v.ready + } else { + // cache miss + v = &parseValue{ready: make(chan struct{})} + ld.parseCache[filename] = v + ld.parseCacheMu.Unlock() + + var src []byte + for f, contents := range ld.Config.Overlay { + // TODO(adonovan): Inefficient for large overlays. + // Do an exact name-based map lookup + // (for nonexistent files) followed by a + // FileID-based map lookup (for existing ones). + if sameFile(f, filename) { + src = contents + break + } + } + var err error + if src == nil { + ioLimit <- unit{} // acquire a token + src, err = os.ReadFile(filename) + <-ioLimit // release a token + } + if err != nil { + v.err = err + } else { + // Parsing is CPU intensive. + cpuLimit <- unit{} // acquire a token + v.f, v.err = ld.ParseFile(ld.Fset, filename, src) + <-cpuLimit // release a token + } + + close(v.ready) + } + return v.f, v.err +} + +// parseFiles reads and parses the Go source files and returns the ASTs +// of the ones that could be at least partially parsed, along with a +// list of I/O and parse errors encountered. +// +// Because files are scanned in parallel, the token.Pos +// positions of the resulting ast.Files are not ordered. +func (ld *loader) parseFiles(filenames []string) ([]*ast.File, []error) { + var ( + n = len(filenames) + parsed = make([]*ast.File, n) + errors = make([]error, n) + ) + var g errgroup.Group + for i, filename := range filenames { + // This creates goroutines unnecessarily in the + // cache-hit case, but that case is uncommon. + g.Go(func() error { + parsed[i], errors[i] = ld.parseFile(filename) + return nil + }) + } + g.Wait() + + // Eliminate nils, preserving order. + var o int + for _, f := range parsed { + if f != nil { + parsed[o] = f + o++ + } + } + parsed = parsed[:o] + + o = 0 + for _, err := range errors { + if err != nil { + errors[o] = err + o++ + } + } + errors = errors[:o] + + return parsed, errors +} + +// sameFile returns true if x and y have the same basename and denote +// the same file. +func sameFile(x, y string) bool { + if x == y { + // It could be the case that y doesn't exist. + // For instance, it may be an overlay file that + // hasn't been written to disk. To handle that case + // let x == y through. (We added the exact absolute path + // string to the CompiledGoFiles list, so the unwritten + // overlay case implies x==y.) + return true + } + if strings.EqualFold(filepath.Base(x), filepath.Base(y)) { // (optimisation) + if xi, err := os.Stat(x); err == nil { + if yi, err := os.Stat(y); err == nil { + return os.SameFile(xi, yi) + } + } + } + return false +} + +// loadFromExportData ensures that type information is present for the specified +// package, loading it from an export data file on the first request. +// On success it sets lpkg.Types to a new Package. +func (ld *loader) loadFromExportData(lpkg *loaderPackage) error { + if lpkg.PkgPath == "" { + log.Fatalf("internal error: Package %s has no PkgPath", lpkg) + } + + // Because gcexportdata.Read has the potential to create or + // modify the types.Package for each node in the transitive + // closure of dependencies of lpkg, all exportdata operations + // must be sequential. (Finer-grained locking would require + // changes to the gcexportdata API.) + // + // The exportMu lock guards the lpkg.Types field and the + // types.Package it points to, for each loaderPackage in the graph. + // + // Not all accesses to Package.Pkg need to be protected by exportMu: + // graph ordering ensures that direct dependencies of source + // packages are fully loaded before the importer reads their Pkg field. + ld.exportMu.Lock() + defer ld.exportMu.Unlock() + + if tpkg := lpkg.Types; tpkg != nil && tpkg.Complete() { + return nil // cache hit + } + + lpkg.IllTyped = true // fail safe + + if lpkg.ExportFile == "" { + // Errors while building export data will have been printed to stderr. + return fmt.Errorf("no export data file") + } + f, err := os.Open(lpkg.ExportFile) + if err != nil { + return err + } + defer f.Close() + + // Read gc export data. + // + // We don't currently support gccgo export data because all + // underlying workspaces use the gc toolchain. (Even build + // systems that support gccgo don't use it for workspace + // queries.) + r, err := gcexportdata.NewReader(f) + if err != nil { + return fmt.Errorf("reading %s: %v", lpkg.ExportFile, err) + } + + // Build the view. + // + // The gcexportdata machinery has no concept of package ID. + // It identifies packages by their PkgPath, which although not + // globally unique is unique within the scope of one invocation + // of the linker, type-checker, or gcexportdata. + // + // So, we must build a PkgPath-keyed view of the global + // (conceptually ID-keyed) cache of packages and pass it to + // gcexportdata. The view must contain every existing + // package that might possibly be mentioned by the + // current package---its transitive closure. + // + // In loadPackage, we unconditionally create a types.Package for + // each dependency so that export data loading does not + // create new ones. + // + // TODO(adonovan): it would be simpler and more efficient + // if the export data machinery invoked a callback to + // get-or-create a package instead of a map. + // + view := make(map[string]*types.Package) // view seen by gcexportdata + seen := make(map[*loaderPackage]bool) // all visited packages + var visit func(pkgs map[string]*Package) + visit = func(pkgs map[string]*Package) { + for _, p := range pkgs { + lpkg := ld.pkgs[p.ID] + if !seen[lpkg] { + seen[lpkg] = true + view[lpkg.PkgPath] = lpkg.Types + visit(lpkg.Imports) + } + } + } + visit(lpkg.Imports) + + viewLen := len(view) + 1 // adding the self package + // Parse the export data. + // (May modify incomplete packages in view but not create new ones.) + tpkg, err := gcexportdata.Read(r, ld.Fset, view, lpkg.PkgPath) + if err != nil { + return fmt.Errorf("reading %s: %v", lpkg.ExportFile, err) + } + if _, ok := view["go.shape"]; ok { + // Account for the pseudopackage "go.shape" that gets + // created by generic code. + viewLen++ + } + if viewLen != len(view) { + log.Panicf("golang.org/x/tools/go/packages: unexpected new packages during load of %s", lpkg.PkgPath) + } + + lpkg.Types = tpkg + lpkg.IllTyped = false + return nil +} + +// impliedLoadMode returns loadMode with its dependencies. +func impliedLoadMode(loadMode LoadMode) LoadMode { + if loadMode&(NeedDeps|NeedTypes|NeedTypesInfo) != 0 { + // All these things require knowing the import graph. + loadMode |= NeedImports + } + if loadMode&NeedTypes != 0 { + // Types require the GoVersion from Module. + loadMode |= NeedModule + } + + return loadMode +} + +func usesExportData(cfg *Config) bool { + return cfg.Mode&NeedExportFile != 0 || cfg.Mode&NeedTypes != 0 && cfg.Mode&NeedDeps == 0 +} + +type unit struct{} diff --git a/vendor/golang.org/x/tools/go/packages/visit.go b/vendor/golang.org/x/tools/go/packages/visit.go new file mode 100644 index 0000000..df14ffd --- /dev/null +++ b/vendor/golang.org/x/tools/go/packages/visit.go @@ -0,0 +1,68 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packages + +import ( + "fmt" + "os" + "sort" +) + +// Visit visits all the packages in the import graph whose roots are +// pkgs, calling the optional pre function the first time each package +// is encountered (preorder), and the optional post function after a +// package's dependencies have been visited (postorder). +// The boolean result of pre(pkg) determines whether +// the imports of package pkg are visited. +func Visit(pkgs []*Package, pre func(*Package) bool, post func(*Package)) { + seen := make(map[*Package]bool) + var visit func(*Package) + visit = func(pkg *Package) { + if !seen[pkg] { + seen[pkg] = true + + if pre == nil || pre(pkg) { + paths := make([]string, 0, len(pkg.Imports)) + for path := range pkg.Imports { + paths = append(paths, path) + } + sort.Strings(paths) // Imports is a map, this makes visit stable + for _, path := range paths { + visit(pkg.Imports[path]) + } + } + + if post != nil { + post(pkg) + } + } + } + for _, pkg := range pkgs { + visit(pkg) + } +} + +// PrintErrors prints to os.Stderr the accumulated errors of all +// packages in the import graph rooted at pkgs, dependencies first. +// PrintErrors returns the number of errors printed. +func PrintErrors(pkgs []*Package) int { + var n int + errModules := make(map[*Module]bool) + Visit(pkgs, nil, func(pkg *Package) { + for _, err := range pkg.Errors { + fmt.Fprintln(os.Stderr, err) + n++ + } + + // Print pkg.Module.Error once if present. + mod := pkg.Module + if mod != nil && mod.Error != nil && !errModules[mod] { + errModules[mod] = true + fmt.Fprintln(os.Stderr, mod.Error.Err) + n++ + } + }) + return n +} diff --git a/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go new file mode 100644 index 0000000..d3c2913 --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go @@ -0,0 +1,817 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package objectpath defines a naming scheme for types.Objects +// (that is, named entities in Go programs) relative to their enclosing +// package. +// +// Type-checker objects are canonical, so they are usually identified by +// their address in memory (a pointer), but a pointer has meaning only +// within one address space. By contrast, objectpath names allow the +// identity of an object to be sent from one program to another, +// establishing a correspondence between types.Object variables that are +// distinct but logically equivalent. +// +// A single object may have multiple paths. In this example, +// +// type A struct{ X int } +// type B A +// +// the field X has two paths due to its membership of both A and B. +// The For(obj) function always returns one of these paths, arbitrarily +// but consistently. +package objectpath + +import ( + "fmt" + "go/types" + "strconv" + "strings" + + "golang.org/x/tools/internal/aliases" + "golang.org/x/tools/internal/typesinternal" +) + +// TODO(adonovan): think about generic aliases. + +// A Path is an opaque name that identifies a types.Object +// relative to its package. Conceptually, the name consists of a +// sequence of destructuring operations applied to the package scope +// to obtain the original object. +// The name does not include the package itself. +type Path string + +// Encoding +// +// An object path is a textual and (with training) human-readable encoding +// of a sequence of destructuring operators, starting from a types.Package. +// The sequences represent a path through the package/object/type graph. +// We classify these operators by their type: +// +// PO package->object Package.Scope.Lookup +// OT object->type Object.Type +// TT type->type Type.{Elem,Key,{,{,Recv}Type}Params,Results,Underlying,Rhs} [EKPRUTrCa] +// TO type->object Type.{At,Field,Method,Obj} [AFMO] +// +// All valid paths start with a package and end at an object +// and thus may be defined by the regular language: +// +// objectpath = PO (OT TT* TO)* +// +// The concrete encoding follows directly: +// - The only PO operator is Package.Scope.Lookup, which requires an identifier. +// - The only OT operator is Object.Type, +// which we encode as '.' because dot cannot appear in an identifier. +// - The TT operators are encoded as [EKPRUTrCa]; +// two of these ({,Recv}TypeParams) require an integer operand, +// which is encoded as a string of decimal digits. +// - The TO operators are encoded as [AFMO]; +// three of these (At,Field,Method) require an integer operand, +// which is encoded as a string of decimal digits. +// These indices are stable across different representations +// of the same package, even source and export data. +// The indices used are implementation specific and may not correspond to +// the argument to the go/types function. +// +// In the example below, +// +// package p +// +// type T interface { +// f() (a string, b struct{ X int }) +// } +// +// field X has the path "T.UM0.RA1.F0", +// representing the following sequence of operations: +// +// p.Lookup("T") T +// .Type().Underlying().Method(0). f +// .Type().Results().At(1) b +// .Type().Field(0) X +// +// The encoding is not maximally compact---every R or P is +// followed by an A, for example---but this simplifies the +// encoder and decoder. +const ( + // object->type operators + opType = '.' // .Type() (Object) + + // type->type operators + opElem = 'E' // .Elem() (Pointer, Slice, Array, Chan, Map) + opKey = 'K' // .Key() (Map) + opParams = 'P' // .Params() (Signature) + opResults = 'R' // .Results() (Signature) + opUnderlying = 'U' // .Underlying() (Named) + opTypeParam = 'T' // .TypeParams.At(i) (Named, Signature) + opRecvTypeParam = 'r' // .RecvTypeParams.At(i) (Signature) + opConstraint = 'C' // .Constraint() (TypeParam) + opRhs = 'a' // .Rhs() (Alias) + + // type->object operators + opAt = 'A' // .At(i) (Tuple) + opField = 'F' // .Field(i) (Struct) + opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored) + opObj = 'O' // .Obj() (Named, TypeParam) +) + +// For is equivalent to new(Encoder).For(obj). +// +// It may be more efficient to reuse a single Encoder across several calls. +func For(obj types.Object) (Path, error) { + return new(Encoder).For(obj) +} + +// An Encoder amortizes the cost of encoding the paths of multiple objects. +// The zero value of an Encoder is ready to use. +type Encoder struct { + scopeMemo map[*types.Scope][]types.Object // memoization of scopeObjects +} + +// For returns the path to an object relative to its package, +// or an error if the object is not accessible from the package's Scope. +// +// The For function guarantees to return a path only for the following objects: +// - package-level types +// - exported package-level non-types +// - methods +// - parameter and result variables +// - struct fields +// These objects are sufficient to define the API of their package. +// The objects described by a package's export data are drawn from this set. +// +// The set of objects accessible from a package's Scope depends on +// whether the package was produced by type-checking syntax, or +// reading export data; the latter may have a smaller Scope since +// export data trims objects that are not reachable from an exported +// declaration. For example, the For function will return a path for +// an exported method of an unexported type that is not reachable +// from any public declaration; this path will cause the Object +// function to fail if called on a package loaded from export data. +// TODO(adonovan): is this a bug or feature? Should this package +// compute accessibility in the same way? +// +// For does not return a path for predeclared names, imported package +// names, local names, and unexported package-level names (except +// types). +// +// Example: given this definition, +// +// package p +// +// type T interface { +// f() (a string, b struct{ X int }) +// } +// +// For(X) would return a path that denotes the following sequence of operations: +// +// p.Scope().Lookup("T") (TypeName T) +// .Type().Underlying().Method(0). (method Func f) +// .Type().Results().At(1) (field Var b) +// .Type().Field(0) (field Var X) +// +// where p is the package (*types.Package) to which X belongs. +func (enc *Encoder) For(obj types.Object) (Path, error) { + pkg := obj.Pkg() + + // This table lists the cases of interest. + // + // Object Action + // ------ ------ + // nil reject + // builtin reject + // pkgname reject + // label reject + // var + // package-level accept + // func param/result accept + // local reject + // struct field accept + // const + // package-level accept + // local reject + // func + // package-level accept + // init functions reject + // concrete method accept + // interface method accept + // type + // package-level accept + // local reject + // + // The only accessible package-level objects are members of pkg itself. + // + // The cases are handled in four steps: + // + // 1. reject nil and builtin + // 2. accept package-level objects + // 3. reject obviously invalid objects + // 4. search the API for the path to the param/result/field/method. + + // 1. reference to nil or builtin? + if pkg == nil { + return "", fmt.Errorf("predeclared %s has no path", obj) + } + scope := pkg.Scope() + + // 2. package-level object? + if scope.Lookup(obj.Name()) == obj { + // Only exported objects (and non-exported types) have a path. + // Non-exported types may be referenced by other objects. + if _, ok := obj.(*types.TypeName); !ok && !obj.Exported() { + return "", fmt.Errorf("no path for non-exported %v", obj) + } + return Path(obj.Name()), nil + } + + // 3. Not a package-level object. + // Reject obviously non-viable cases. + switch obj := obj.(type) { + case *types.TypeName: + if _, ok := types.Unalias(obj.Type()).(*types.TypeParam); !ok { + // With the exception of type parameters, only package-level type names + // have a path. + return "", fmt.Errorf("no path for %v", obj) + } + case *types.Const, // Only package-level constants have a path. + *types.Label, // Labels are function-local. + *types.PkgName: // PkgNames are file-local. + return "", fmt.Errorf("no path for %v", obj) + + case *types.Var: + // Could be: + // - a field (obj.IsField()) + // - a func parameter or result + // - a local var. + // Sadly there is no way to distinguish + // a param/result from a local + // so we must proceed to the find. + + case *types.Func: + // A func, if not package-level, must be a method. + if recv := obj.Type().(*types.Signature).Recv(); recv == nil { + return "", fmt.Errorf("func is not a method: %v", obj) + } + + if path, ok := enc.concreteMethod(obj); ok { + // Fast path for concrete methods that avoids looping over scope. + return path, nil + } + + default: + panic(obj) + } + + // 4. Search the API for the path to the var (field/param/result) or method. + + // First inspect package-level named types. + // In the presence of path aliases, these give + // the best paths because non-types may + // refer to types, but not the reverse. + empty := make([]byte, 0, 48) // initial space + objs := enc.scopeObjects(scope) + for _, o := range objs { + tname, ok := o.(*types.TypeName) + if !ok { + continue // handle non-types in second pass + } + + path := append(empty, o.Name()...) + path = append(path, opType) + + T := o.Type() + if alias, ok := T.(*types.Alias); ok { + if r := findTypeParam(obj, aliases.TypeParams(alias), path, opTypeParam); r != nil { + return Path(r), nil + } + if r := find(obj, aliases.Rhs(alias), append(path, opRhs)); r != nil { + return Path(r), nil + } + + } else if tname.IsAlias() { + // legacy alias + if r := find(obj, T, path); r != nil { + return Path(r), nil + } + + } else if named, ok := T.(*types.Named); ok { + // defined (named) type + if r := findTypeParam(obj, named.TypeParams(), path, opTypeParam); r != nil { + return Path(r), nil + } + if r := find(obj, named.Underlying(), append(path, opUnderlying)); r != nil { + return Path(r), nil + } + } + } + + // Then inspect everything else: + // non-types, and declared methods of defined types. + for _, o := range objs { + path := append(empty, o.Name()...) + if _, ok := o.(*types.TypeName); !ok { + if o.Exported() { + // exported non-type (const, var, func) + if r := find(obj, o.Type(), append(path, opType)); r != nil { + return Path(r), nil + } + } + continue + } + + // Inspect declared methods of defined types. + if T, ok := types.Unalias(o.Type()).(*types.Named); ok { + path = append(path, opType) + // The method index here is always with respect + // to the underlying go/types data structures, + // which ultimately derives from source order + // and must be preserved by export data. + for i := 0; i < T.NumMethods(); i++ { + m := T.Method(i) + path2 := appendOpArg(path, opMethod, i) + if m == obj { + return Path(path2), nil // found declared method + } + if r := find(obj, m.Type(), append(path2, opType)); r != nil { + return Path(r), nil + } + } + } + } + + return "", fmt.Errorf("can't find path for %v in %s", obj, pkg.Path()) +} + +func appendOpArg(path []byte, op byte, arg int) []byte { + path = append(path, op) + path = strconv.AppendInt(path, int64(arg), 10) + return path +} + +// concreteMethod returns the path for meth, which must have a non-nil receiver. +// The second return value indicates success and may be false if the method is +// an interface method or if it is an instantiated method. +// +// This function is just an optimization that avoids the general scope walking +// approach. You are expected to fall back to the general approach if this +// function fails. +func (enc *Encoder) concreteMethod(meth *types.Func) (Path, bool) { + // Concrete methods can only be declared on package-scoped named types. For + // that reason we can skip the expensive walk over the package scope: the + // path will always be package -> named type -> method. We can trivially get + // the type name from the receiver, and only have to look over the type's + // methods to find the method index. + // + // Methods on generic types require special consideration, however. Consider + // the following package: + // + // L1: type S[T any] struct{} + // L2: func (recv S[A]) Foo() { recv.Bar() } + // L3: func (recv S[B]) Bar() { } + // L4: type Alias = S[int] + // L5: func _[T any]() { var s S[int]; s.Foo() } + // + // The receivers of methods on generic types are instantiations. L2 and L3 + // instantiate S with the type-parameters A and B, which are scoped to the + // respective methods. L4 and L5 each instantiate S with int. Each of these + // instantiations has its own method set, full of methods (and thus objects) + // with receivers whose types are the respective instantiations. In other + // words, we have + // + // S[A].Foo, S[A].Bar + // S[B].Foo, S[B].Bar + // S[int].Foo, S[int].Bar + // + // We may thus be trying to produce object paths for any of these objects. + // + // S[A].Foo and S[B].Bar are the origin methods, and their paths are S.Foo + // and S.Bar, which are the paths that this function naturally produces. + // + // S[A].Bar, S[B].Foo, and both methods on S[int] are instantiations that + // don't correspond to the origin methods. For S[int], this is significant. + // The most precise object path for S[int].Foo, for example, is Alias.Foo, + // not S.Foo. Our function, however, would produce S.Foo, which would + // resolve to a different object. + // + // For S[A].Bar and S[B].Foo it could be argued that S.Bar and S.Foo are + // still the correct paths, since only the origin methods have meaningful + // paths. But this is likely only true for trivial cases and has edge cases. + // Since this function is only an optimization, we err on the side of giving + // up, deferring to the slower but definitely correct algorithm. Most users + // of objectpath will only be giving us origin methods, anyway, as referring + // to instantiated methods is usually not useful. + + if meth.Origin() != meth { + return "", false + } + + _, named := typesinternal.ReceiverNamed(meth.Type().(*types.Signature).Recv()) + if named == nil { + return "", false + } + + if types.IsInterface(named) { + // Named interfaces don't have to be package-scoped + // + // TODO(dominikh): opt: if scope.Lookup(name) == named, then we can apply this optimization to interface + // methods, too, I think. + return "", false + } + + // Preallocate space for the name, opType, opMethod, and some digits. + name := named.Obj().Name() + path := make([]byte, 0, len(name)+8) + path = append(path, name...) + path = append(path, opType) + + // Method indices are w.r.t. the go/types data structures, + // ultimately deriving from source order, + // which is preserved by export data. + for i := 0; i < named.NumMethods(); i++ { + if named.Method(i) == meth { + path = appendOpArg(path, opMethod, i) + return Path(path), true + } + } + + // Due to golang/go#59944, go/types fails to associate the receiver with + // certain methods on cgo types. + // + // TODO(rfindley): replace this panic once golang/go#59944 is fixed in all Go + // versions gopls supports. + return "", false + // panic(fmt.Sprintf("couldn't find method %s on type %s; methods: %#v", meth, named, enc.namedMethods(named))) +} + +// find finds obj within type T, returning the path to it, or nil if not found. +// +// The seen map is used to short circuit cycles through type parameters. If +// nil, it will be allocated as necessary. +// +// The seenMethods map is used internally to short circuit cycles through +// interface methods, such as occur in the following example: +// +// type I interface { f() interface{I} } +// +// See golang/go#68046 for details. +func find(obj types.Object, T types.Type, path []byte) []byte { + return (&finder{obj: obj}).find(T, path) +} + +// finder closes over search state for a call to find. +type finder struct { + obj types.Object // the sought object + seenTParamNames map[*types.TypeName]bool // for cycle breaking through type parameters + seenMethods map[*types.Func]bool // for cycle breaking through recursive interfaces +} + +func (f *finder) find(T types.Type, path []byte) []byte { + switch T := T.(type) { + case *types.Alias: + return f.find(types.Unalias(T), path) + case *types.Basic, *types.Named: + // Named types belonging to pkg were handled already, + // so T must belong to another package. No path. + return nil + case *types.Pointer: + return f.find(T.Elem(), append(path, opElem)) + case *types.Slice: + return f.find(T.Elem(), append(path, opElem)) + case *types.Array: + return f.find(T.Elem(), append(path, opElem)) + case *types.Chan: + return f.find(T.Elem(), append(path, opElem)) + case *types.Map: + if r := f.find(T.Key(), append(path, opKey)); r != nil { + return r + } + return f.find(T.Elem(), append(path, opElem)) + case *types.Signature: + if r := f.findTypeParam(T.RecvTypeParams(), path, opRecvTypeParam); r != nil { + return r + } + if r := f.findTypeParam(T.TypeParams(), path, opTypeParam); r != nil { + return r + } + if r := f.find(T.Params(), append(path, opParams)); r != nil { + return r + } + return f.find(T.Results(), append(path, opResults)) + case *types.Struct: + for i := 0; i < T.NumFields(); i++ { + fld := T.Field(i) + path2 := appendOpArg(path, opField, i) + if fld == f.obj { + return path2 // found field var + } + if r := f.find(fld.Type(), append(path2, opType)); r != nil { + return r + } + } + return nil + case *types.Tuple: + for i := 0; i < T.Len(); i++ { + v := T.At(i) + path2 := appendOpArg(path, opAt, i) + if v == f.obj { + return path2 // found param/result var + } + if r := f.find(v.Type(), append(path2, opType)); r != nil { + return r + } + } + return nil + case *types.Interface: + for i := 0; i < T.NumMethods(); i++ { + m := T.Method(i) + if f.seenMethods[m] { + return nil + } + path2 := appendOpArg(path, opMethod, i) + if m == f.obj { + return path2 // found interface method + } + if f.seenMethods == nil { + f.seenMethods = make(map[*types.Func]bool) + } + f.seenMethods[m] = true + if r := f.find(m.Type(), append(path2, opType)); r != nil { + return r + } + } + return nil + case *types.TypeParam: + name := T.Obj() + if f.seenTParamNames[name] { + return nil + } + if name == f.obj { + return append(path, opObj) + } + if f.seenTParamNames == nil { + f.seenTParamNames = make(map[*types.TypeName]bool) + } + f.seenTParamNames[name] = true + if r := f.find(T.Constraint(), append(path, opConstraint)); r != nil { + return r + } + return nil + } + panic(T) +} + +func findTypeParam(obj types.Object, list *types.TypeParamList, path []byte, op byte) []byte { + return (&finder{obj: obj}).findTypeParam(list, path, op) +} + +func (f *finder) findTypeParam(list *types.TypeParamList, path []byte, op byte) []byte { + for i := 0; i < list.Len(); i++ { + tparam := list.At(i) + path2 := appendOpArg(path, op, i) + if r := f.find(tparam, path2); r != nil { + return r + } + } + return nil +} + +// Object returns the object denoted by path p within the package pkg. +func Object(pkg *types.Package, p Path) (types.Object, error) { + pathstr := string(p) + if pathstr == "" { + return nil, fmt.Errorf("empty path") + } + + var pkgobj, suffix string + if dot := strings.IndexByte(pathstr, opType); dot < 0 { + pkgobj = pathstr + } else { + pkgobj = pathstr[:dot] + suffix = pathstr[dot:] // suffix starts with "." + } + + obj := pkg.Scope().Lookup(pkgobj) + if obj == nil { + return nil, fmt.Errorf("package %s does not contain %q", pkg.Path(), pkgobj) + } + + // abstraction of *types.{Pointer,Slice,Array,Chan,Map} + type hasElem interface { + Elem() types.Type + } + // abstraction of *types.{Named,Signature} + type hasTypeParams interface { + TypeParams() *types.TypeParamList + } + // abstraction of *types.{Alias,Named,TypeParam} + type hasObj interface { + Obj() *types.TypeName + } + + // The loop state is the pair (t, obj), + // exactly one of which is non-nil, initially obj. + // All suffixes start with '.' (the only object->type operation), + // followed by optional type->type operations, + // then a type->object operation. + // The cycle then repeats. + var t types.Type + for suffix != "" { + code := suffix[0] + suffix = suffix[1:] + + // Codes [AFMTr] have an integer operand. + var index int + switch code { + case opAt, opField, opMethod, opTypeParam, opRecvTypeParam: + rest := strings.TrimLeft(suffix, "0123456789") + numerals := suffix[:len(suffix)-len(rest)] + suffix = rest + i, err := strconv.Atoi(numerals) + if err != nil { + return nil, fmt.Errorf("invalid path: bad numeric operand %q for code %q", numerals, code) + } + index = int(i) + case opObj: + // no operand + default: + // The suffix must end with a type->object operation. + if suffix == "" { + return nil, fmt.Errorf("invalid path: ends with %q, want [AFMO]", code) + } + } + + if code == opType { + if t != nil { + return nil, fmt.Errorf("invalid path: unexpected %q in type context", opType) + } + t = obj.Type() + obj = nil + continue + } + + if t == nil { + return nil, fmt.Errorf("invalid path: code %q in object context", code) + } + + // Inv: t != nil, obj == nil + + t = types.Unalias(t) + switch code { + case opElem: + hasElem, ok := t.(hasElem) // Pointer, Slice, Array, Chan, Map + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want pointer, slice, array, chan or map)", code, t, t) + } + t = hasElem.Elem() + + case opKey: + mapType, ok := t.(*types.Map) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want map)", code, t, t) + } + t = mapType.Key() + + case opParams: + sig, ok := t.(*types.Signature) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) + } + t = sig.Params() + + case opResults: + sig, ok := t.(*types.Signature) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) + } + t = sig.Results() + + case opUnderlying: + named, ok := t.(*types.Named) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named)", code, t, t) + } + t = named.Underlying() + + case opRhs: + if alias, ok := t.(*types.Alias); ok { + t = aliases.Rhs(alias) + } else if false && aliases.Enabled() { + // The Enabled check is too expensive, so for now we + // simply assume that aliases are not enabled. + // TODO(adonovan): replace with "if true {" when go1.24 is assured. + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want alias)", code, t, t) + } + + case opTypeParam: + hasTypeParams, ok := t.(hasTypeParams) // Named, Signature + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or signature)", code, t, t) + } + tparams := hasTypeParams.TypeParams() + if n := tparams.Len(); index >= n { + return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) + } + t = tparams.At(index) + + case opRecvTypeParam: + sig, ok := t.(*types.Signature) // Signature + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) + } + rtparams := sig.RecvTypeParams() + if n := rtparams.Len(); index >= n { + return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) + } + t = rtparams.At(index) + + case opConstraint: + tparam, ok := t.(*types.TypeParam) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want type parameter)", code, t, t) + } + t = tparam.Constraint() + + case opAt: + tuple, ok := t.(*types.Tuple) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want tuple)", code, t, t) + } + if n := tuple.Len(); index >= n { + return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) + } + obj = tuple.At(index) + t = nil + + case opField: + structType, ok := t.(*types.Struct) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want struct)", code, t, t) + } + if n := structType.NumFields(); index >= n { + return nil, fmt.Errorf("field index %d out of range [0-%d)", index, n) + } + obj = structType.Field(index) + t = nil + + case opMethod: + switch t := t.(type) { + case *types.Interface: + if index >= t.NumMethods() { + return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods()) + } + obj = t.Method(index) // Id-ordered + + case *types.Named: + if index >= t.NumMethods() { + return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods()) + } + obj = t.Method(index) + + default: + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want interface or named)", code, t, t) + } + t = nil + + case opObj: + hasObj, ok := t.(hasObj) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or type param)", code, t, t) + } + obj = hasObj.Obj() + t = nil + + default: + return nil, fmt.Errorf("invalid path: unknown code %q", code) + } + } + + if obj == nil { + panic(p) // path does not end in an object-valued operator + } + + if obj.Pkg() != pkg { + return nil, fmt.Errorf("path denotes %s, which belongs to a different package", obj) + } + + return obj, nil // success +} + +// scopeObjects is a memoization of scope objects. +// Callers must not modify the result. +func (enc *Encoder) scopeObjects(scope *types.Scope) []types.Object { + m := enc.scopeMemo + if m == nil { + m = make(map[*types.Scope][]types.Object) + enc.scopeMemo = m + } + objs, ok := m[scope] + if !ok { + names := scope.Names() // allocates and sorts + objs = make([]types.Object, len(names)) + for i, name := range names { + objs[i] = scope.Lookup(name) + } + m[scope] = objs + } + return objs +} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/callee.go b/vendor/golang.org/x/tools/go/types/typeutil/callee.go new file mode 100644 index 0000000..5f10f56 --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/typeutil/callee.go @@ -0,0 +1,85 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package typeutil + +import ( + "go/ast" + "go/types" + _ "unsafe" // for linkname +) + +// Callee returns the named target of a function call, if any: +// a function, method, builtin, or variable. +// +// Functions and methods may potentially have type parameters. +// +// Note: for calls of instantiated functions and methods, Callee returns +// the corresponding generic function or method on the generic type. +func Callee(info *types.Info, call *ast.CallExpr) types.Object { + obj := info.Uses[usedIdent(info, call.Fun)] + if obj == nil { + return nil + } + if _, ok := obj.(*types.TypeName); ok { + return nil + } + return obj +} + +// StaticCallee returns the target (function or method) of a static function +// call, if any. It returns nil for calls to builtins. +// +// Note: for calls of instantiated functions and methods, StaticCallee returns +// the corresponding generic function or method on the generic type. +func StaticCallee(info *types.Info, call *ast.CallExpr) *types.Func { + obj := info.Uses[usedIdent(info, call.Fun)] + fn, _ := obj.(*types.Func) + if fn == nil || interfaceMethod(fn) { + return nil + } + return fn +} + +// usedIdent is the implementation of [internal/typesinternal.UsedIdent]. +// It returns the identifier associated with e. +// See typesinternal.UsedIdent for a fuller description. +// This function should live in typesinternal, but cannot because it would +// create an import cycle. +// +//go:linkname usedIdent golang.org/x/tools/go/types/typeutil.usedIdent +func usedIdent(info *types.Info, e ast.Expr) *ast.Ident { + if info.Types == nil || info.Uses == nil { + panic("one of info.Types or info.Uses is nil; both must be populated") + } + // Look through type instantiation if necessary. + switch d := ast.Unparen(e).(type) { + case *ast.IndexExpr: + if info.Types[d.Index].IsType() { + e = d.X + } + case *ast.IndexListExpr: + e = d.X + } + + switch e := ast.Unparen(e).(type) { + // info.Uses always has the object we want, even for selector expressions. + // We don't need info.Selections. + // See go/types/recording.go:recordSelection. + case *ast.Ident: + return e + case *ast.SelectorExpr: + return e.Sel + } + return nil +} + +// interfaceMethod reports whether its argument is a method of an interface. +// This function should live in typesinternal, but cannot because it would create an import cycle. +// +//go:linkname interfaceMethod golang.org/x/tools/go/types/typeutil.interfaceMethod +func interfaceMethod(f *types.Func) bool { + recv := f.Signature().Recv() + return recv != nil && types.IsInterface(recv.Type()) +} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/imports.go b/vendor/golang.org/x/tools/go/types/typeutil/imports.go new file mode 100644 index 0000000..b81ce0c --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/typeutil/imports.go @@ -0,0 +1,30 @@ +// 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 typeutil + +import "go/types" + +// Dependencies returns all dependencies of the specified packages. +// +// Dependent packages appear in topological order: if package P imports +// package Q, Q appears earlier than P in the result. +// The algorithm follows import statements in the order they +// appear in the source code, so the result is a total order. +func Dependencies(pkgs ...*types.Package) []*types.Package { + var result []*types.Package + seen := make(map[*types.Package]bool) + var visit func(pkgs []*types.Package) + visit = func(pkgs []*types.Package) { + for _, p := range pkgs { + if !seen[p] { + seen[p] = true + visit(p.Imports()) + result = append(result, p) + } + } + } + visit(pkgs) + return result +} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/map.go b/vendor/golang.org/x/tools/go/types/typeutil/map.go new file mode 100644 index 0000000..b6d542c --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/typeutil/map.go @@ -0,0 +1,475 @@ +// 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 typeutil defines various utilities for types, such as [Map], +// a hash table that maps [types.Type] to any value. +package typeutil + +import ( + "bytes" + "fmt" + "go/types" + "hash/maphash" + "unsafe" + + "golang.org/x/tools/internal/typeparams" +) + +// Map is a hash-table-based mapping from types (types.Type) to +// arbitrary values. The concrete types that implement +// the Type interface are pointers. Since they are not canonicalized, +// == cannot be used to check for equivalence, and thus we cannot +// simply use a Go map. +// +// Just as with map[K]V, a nil *Map is a valid empty map. +// +// Read-only map operations ([Map.At], [Map.Len], and so on) may +// safely be called concurrently. +// +// TODO(adonovan): deprecate in favor of https://go.dev/issues/69420 +// and 69559, if the latter proposals for a generic hash-map type and +// a types.Hash function are accepted. +type Map struct { + table map[uint32][]entry // maps hash to bucket; entry.key==nil means unused + length int // number of map entries +} + +// entry is an entry (key/value association) in a hash bucket. +type entry struct { + key types.Type + value any +} + +// SetHasher has no effect. +// +// It is a relic of an optimization that is no longer profitable. Do +// not use [Hasher], [MakeHasher], or [SetHasher] in new code. +func (m *Map) SetHasher(Hasher) {} + +// Delete removes the entry with the given key, if any. +// It returns true if the entry was found. +func (m *Map) Delete(key types.Type) bool { + if m != nil && m.table != nil { + hash := hash(key) + bucket := m.table[hash] + for i, e := range bucket { + if e.key != nil && types.Identical(key, e.key) { + // We can't compact the bucket as it + // would disturb iterators. + bucket[i] = entry{} + m.length-- + return true + } + } + } + return false +} + +// At returns the map entry for the given key. +// The result is nil if the entry is not present. +func (m *Map) At(key types.Type) any { + if m != nil && m.table != nil { + for _, e := range m.table[hash(key)] { + if e.key != nil && types.Identical(key, e.key) { + return e.value + } + } + } + return nil +} + +// Set sets the map entry for key to val, +// and returns the previous entry, if any. +func (m *Map) Set(key types.Type, value any) (prev any) { + if m.table != nil { + hash := hash(key) + bucket := m.table[hash] + var hole *entry + for i, e := range bucket { + if e.key == nil { + hole = &bucket[i] + } else if types.Identical(key, e.key) { + prev = e.value + bucket[i].value = value + return + } + } + + if hole != nil { + *hole = entry{key, value} // overwrite deleted entry + } else { + m.table[hash] = append(bucket, entry{key, value}) + } + } else { + hash := hash(key) + m.table = map[uint32][]entry{hash: {entry{key, value}}} + } + + m.length++ + return +} + +// Len returns the number of map entries. +func (m *Map) Len() int { + if m != nil { + return m.length + } + return 0 +} + +// Iterate calls function f on each entry in the map in unspecified order. +// +// If f should mutate the map, Iterate provides the same guarantees as +// Go maps: if f deletes a map entry that Iterate has not yet reached, +// f will not be invoked for it, but if f inserts a map entry that +// Iterate has not yet reached, whether or not f will be invoked for +// it is unspecified. +func (m *Map) Iterate(f func(key types.Type, value any)) { + if m != nil { + for _, bucket := range m.table { + for _, e := range bucket { + if e.key != nil { + f(e.key, e.value) + } + } + } + } +} + +// Keys returns a new slice containing the set of map keys. +// The order is unspecified. +func (m *Map) Keys() []types.Type { + keys := make([]types.Type, 0, m.Len()) + m.Iterate(func(key types.Type, _ any) { + keys = append(keys, key) + }) + return keys +} + +func (m *Map) toString(values bool) string { + if m == nil { + return "{}" + } + var buf bytes.Buffer + fmt.Fprint(&buf, "{") + sep := "" + m.Iterate(func(key types.Type, value any) { + fmt.Fprint(&buf, sep) + sep = ", " + fmt.Fprint(&buf, key) + if values { + fmt.Fprintf(&buf, ": %q", value) + } + }) + fmt.Fprint(&buf, "}") + return buf.String() +} + +// String returns a string representation of the map's entries. +// Values are printed using fmt.Sprintf("%v", v). +// Order is unspecified. +func (m *Map) String() string { + return m.toString(true) +} + +// KeysString returns a string representation of the map's key set. +// Order is unspecified. +func (m *Map) KeysString() string { + return m.toString(false) +} + +// -- Hasher -- + +// hash returns the hash of type t. +// TODO(adonovan): replace by types.Hash when Go proposal #69420 is accepted. +func hash(t types.Type) uint32 { + return theHasher.Hash(t) +} + +// A Hasher provides a [Hasher.Hash] method to map a type to its hash value. +// Hashers are stateless, and all are equivalent. +type Hasher struct{} + +var theHasher Hasher + +// MakeHasher returns Hasher{}. +// Hashers are stateless; all are equivalent. +func MakeHasher() Hasher { return theHasher } + +// Hash computes a hash value for the given type t such that +// Identical(t, t') => Hash(t) == Hash(t'). +func (h Hasher) Hash(t types.Type) uint32 { + return hasher{inGenericSig: false}.hash(t) +} + +// hasher holds the state of a single Hash traversal: whether we are +// inside the signature of a generic function; this is used to +// optimize [hasher.hashTypeParam]. +type hasher struct{ inGenericSig bool } + +// hashString computes the Fowler–Noll–Vo hash of s. +func hashString(s string) uint32 { + var h uint32 + for i := 0; i < len(s); i++ { + h ^= uint32(s[i]) + h *= 16777619 + } + return h +} + +// hash computes the hash of t. +func (h hasher) hash(t types.Type) uint32 { + // See Identical for rationale. + switch t := t.(type) { + case *types.Basic: + return uint32(t.Kind()) + + case *types.Alias: + return h.hash(types.Unalias(t)) + + case *types.Array: + return 9043 + 2*uint32(t.Len()) + 3*h.hash(t.Elem()) + + case *types.Slice: + return 9049 + 2*h.hash(t.Elem()) + + case *types.Struct: + var hash uint32 = 9059 + for i, n := 0, t.NumFields(); i < n; i++ { + f := t.Field(i) + if f.Anonymous() { + hash += 8861 + } + hash += hashString(t.Tag(i)) + hash += hashString(f.Name()) // (ignore f.Pkg) + hash += h.hash(f.Type()) + } + return hash + + case *types.Pointer: + return 9067 + 2*h.hash(t.Elem()) + + case *types.Signature: + var hash uint32 = 9091 + if t.Variadic() { + hash *= 8863 + } + + tparams := t.TypeParams() + if n := tparams.Len(); n > 0 { + h.inGenericSig = true // affects constraints, params, and results + + for i := range n { + tparam := tparams.At(i) + hash += 7 * h.hash(tparam.Constraint()) + } + } + + return hash + 3*h.hashTuple(t.Params()) + 5*h.hashTuple(t.Results()) + + case *types.Union: + return h.hashUnion(t) + + case *types.Interface: + // Interfaces are identical if they have the same set of methods, with + // identical names and types, and they have the same set of type + // restrictions. See go/types.identical for more details. + var hash uint32 = 9103 + + // Hash methods. + for i, n := 0, t.NumMethods(); i < n; i++ { + // Method order is not significant. + // Ignore m.Pkg(). + m := t.Method(i) + // Use shallow hash on method signature to + // avoid anonymous interface cycles. + hash += 3*hashString(m.Name()) + 5*h.shallowHash(m.Type()) + } + + // Hash type restrictions. + terms, err := typeparams.InterfaceTermSet(t) + // if err != nil t has invalid type restrictions. + if err == nil { + hash += h.hashTermSet(terms) + } + + return hash + + case *types.Map: + return 9109 + 2*h.hash(t.Key()) + 3*h.hash(t.Elem()) + + case *types.Chan: + return 9127 + 2*uint32(t.Dir()) + 3*h.hash(t.Elem()) + + case *types.Named: + hash := h.hashTypeName(t.Obj()) + targs := t.TypeArgs() + for i := 0; i < targs.Len(); i++ { + targ := targs.At(i) + hash += 2 * h.hash(targ) + } + return hash + + case *types.TypeParam: + return h.hashTypeParam(t) + + case *types.Tuple: + return h.hashTuple(t) + } + + panic(fmt.Sprintf("%T: %v", t, t)) +} + +func (h hasher) hashTuple(tuple *types.Tuple) uint32 { + // See go/types.identicalTypes for rationale. + n := tuple.Len() + hash := 9137 + 2*uint32(n) + for i := range n { + hash += 3 * h.hash(tuple.At(i).Type()) + } + return hash +} + +func (h hasher) hashUnion(t *types.Union) uint32 { + // Hash type restrictions. + terms, err := typeparams.UnionTermSet(t) + // if err != nil t has invalid type restrictions. Fall back on a non-zero + // hash. + if err != nil { + return 9151 + } + return h.hashTermSet(terms) +} + +func (h hasher) hashTermSet(terms []*types.Term) uint32 { + hash := 9157 + 2*uint32(len(terms)) + for _, term := range terms { + // term order is not significant. + termHash := h.hash(term.Type()) + if term.Tilde() { + termHash *= 9161 + } + hash += 3 * termHash + } + return hash +} + +// hashTypeParam returns the hash of a type parameter. +func (h hasher) hashTypeParam(t *types.TypeParam) uint32 { + // Within the signature of a generic function, TypeParams are + // identical if they have the same index and constraint, so we + // hash them based on index. + // + // When we are outside a generic function, free TypeParams are + // identical iff they are the same object, so we can use a + // more discriminating hash consistent with object identity. + // This optimization saves [Map] about 4% when hashing all the + // types.Info.Types in the forward closure of net/http. + if !h.inGenericSig { + // Optimization: outside a generic function signature, + // use a more discrimating hash consistent with object identity. + return h.hashTypeName(t.Obj()) + } + return 9173 + 3*uint32(t.Index()) +} + +var theSeed = maphash.MakeSeed() + +// hashTypeName hashes the pointer of tname. +func (hasher) hashTypeName(tname *types.TypeName) uint32 { + // Since types.Identical uses == to compare TypeNames, + // the Hash function uses maphash.Comparable. + // TODO(adonovan): or will, when it becomes available in go1.24. + // In the meantime we use the pointer's numeric value. + // + // hash := maphash.Comparable(theSeed, tname) + // + // (Another approach would be to hash the name and package + // path, and whether or not it is a package-level typename. It + // is rare for a package to define multiple local types with + // the same name.) + ptr := uintptr(unsafe.Pointer(tname)) + if unsafe.Sizeof(ptr) == 8 { + hash := uint64(ptr) + return uint32(hash ^ (hash >> 32)) + } else { + return uint32(ptr) + } +} + +// shallowHash computes a hash of t without looking at any of its +// element Types, to avoid potential anonymous cycles in the types of +// interface methods. +// +// When an unnamed non-empty interface type appears anywhere among the +// arguments or results of an interface method, there is a potential +// for endless recursion. Consider: +// +// type X interface { m() []*interface { X } } +// +// The problem is that the Methods of the interface in m's result type +// include m itself; there is no mention of the named type X that +// might help us break the cycle. +// (See comment in go/types.identical, case *Interface, for more.) +func (h hasher) shallowHash(t types.Type) uint32 { + // t is the type of an interface method (Signature), + // its params or results (Tuples), or their immediate + // elements (mostly Slice, Pointer, Basic, Named), + // so there's no need to optimize anything else. + switch t := t.(type) { + case *types.Alias: + return h.shallowHash(types.Unalias(t)) + + case *types.Signature: + var hash uint32 = 604171 + if t.Variadic() { + hash *= 971767 + } + // The Signature/Tuple recursion is always finite + // and invariably shallow. + return hash + 1062599*h.shallowHash(t.Params()) + 1282529*h.shallowHash(t.Results()) + + case *types.Tuple: + n := t.Len() + hash := 9137 + 2*uint32(n) + for i := range n { + hash += 53471161 * h.shallowHash(t.At(i).Type()) + } + return hash + + case *types.Basic: + return 45212177 * uint32(t.Kind()) + + case *types.Array: + return 1524181 + 2*uint32(t.Len()) + + case *types.Slice: + return 2690201 + + case *types.Struct: + return 3326489 + + case *types.Pointer: + return 4393139 + + case *types.Union: + return 562448657 + + case *types.Interface: + return 2124679 // no recursion here + + case *types.Map: + return 9109 + + case *types.Chan: + return 9127 + + case *types.Named: + return h.hashTypeName(t.Obj()) + + case *types.TypeParam: + return h.hashTypeParam(t) + } + panic(fmt.Sprintf("shallowHash: %T: %v", t, t)) +} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go b/vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go new file mode 100644 index 0000000..f766602 --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go @@ -0,0 +1,71 @@ +// 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. + +// This file implements a cache of method sets. + +package typeutil + +import ( + "go/types" + "sync" +) + +// A MethodSetCache records the method set of each type T for which +// MethodSet(T) is called so that repeat queries are fast. +// The zero value is a ready-to-use cache instance. +type MethodSetCache struct { + mu sync.Mutex + named map[*types.Named]struct{ value, pointer *types.MethodSet } // method sets for named N and *N + others map[types.Type]*types.MethodSet // all other types +} + +// MethodSet returns the method set of type T. It is thread-safe. +// +// If cache is nil, this function is equivalent to types.NewMethodSet(T). +// Utility functions can thus expose an optional *MethodSetCache +// parameter to clients that care about performance. +func (cache *MethodSetCache) MethodSet(T types.Type) *types.MethodSet { + if cache == nil { + return types.NewMethodSet(T) + } + cache.mu.Lock() + defer cache.mu.Unlock() + + switch T := types.Unalias(T).(type) { + case *types.Named: + return cache.lookupNamed(T).value + + case *types.Pointer: + if N, ok := types.Unalias(T.Elem()).(*types.Named); ok { + return cache.lookupNamed(N).pointer + } + } + + // all other types + // (The map uses pointer equivalence, not type identity.) + mset := cache.others[T] + if mset == nil { + mset = types.NewMethodSet(T) + if cache.others == nil { + cache.others = make(map[types.Type]*types.MethodSet) + } + cache.others[T] = mset + } + return mset +} + +func (cache *MethodSetCache) lookupNamed(named *types.Named) struct{ value, pointer *types.MethodSet } { + if cache.named == nil { + cache.named = make(map[*types.Named]struct{ value, pointer *types.MethodSet }) + } + // Avoid recomputing mset(*T) for each distinct Pointer + // instance whose underlying type is a named type. + msets, ok := cache.named[named] + if !ok { + msets.value = types.NewMethodSet(named) + msets.pointer = types.NewMethodSet(types.NewPointer(named)) + cache.named[named] = msets + } + return msets +} diff --git a/vendor/golang.org/x/tools/go/types/typeutil/ui.go b/vendor/golang.org/x/tools/go/types/typeutil/ui.go new file mode 100644 index 0000000..9dda6a2 --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/typeutil/ui.go @@ -0,0 +1,53 @@ +// 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 typeutil + +// This file defines utilities for user interfaces that display types. + +import ( + "go/types" +) + +// IntuitiveMethodSet returns the intuitive method set of a type T, +// which is the set of methods you can call on an addressable value of +// that type. +// +// The result always contains MethodSet(T), and is exactly MethodSet(T) +// for interface types and for pointer-to-concrete types. +// For all other concrete types T, the result additionally +// contains each method belonging to *T if there is no identically +// named method on T itself. +// +// This corresponds to user intuition about method sets; +// this function is intended only for user interfaces. +// +// The order of the result is as for types.MethodSet(T). +func IntuitiveMethodSet(T types.Type, msets *MethodSetCache) []*types.Selection { + isPointerToConcrete := func(T types.Type) bool { + ptr, ok := types.Unalias(T).(*types.Pointer) + return ok && !types.IsInterface(ptr.Elem()) + } + + var result []*types.Selection + mset := msets.MethodSet(T) + if types.IsInterface(T) || isPointerToConcrete(T) { + for i, n := 0, mset.Len(); i < n; i++ { + result = append(result, mset.At(i)) + } + } else { + // T is some other concrete type. + // Report methods of T and *T, preferring those of T. + pmset := msets.MethodSet(types.NewPointer(T)) + for i, n := 0, pmset.Len(); i < n; i++ { + meth := pmset.At(i) + if m := mset.Lookup(meth.Obj().Pkg(), meth.Obj().Name()); m != nil { + meth = m + } + result = append(result, meth) + } + + } + return result +} diff --git a/vendor/golang.org/x/tools/imports/forward.go b/vendor/golang.org/x/tools/imports/forward.go new file mode 100644 index 0000000..cb6db88 --- /dev/null +++ b/vendor/golang.org/x/tools/imports/forward.go @@ -0,0 +1,77 @@ +// Copyright 2019 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 imports implements a Go pretty-printer (like package "go/format") +// that also adds or removes import statements as necessary. +package imports // import "golang.org/x/tools/imports" + +import ( + "log" + "os" + + "golang.org/x/tools/internal/gocommand" + intimp "golang.org/x/tools/internal/imports" +) + +// Options specifies options for processing files. +type Options struct { + Fragment bool // Accept fragment of a source file (no package statement) + AllErrors bool // Report all errors (not just the first 10 on different lines) + + Comments bool // Print comments (true if nil *Options provided) + TabIndent bool // Use tabs for indent (true if nil *Options provided) + TabWidth int // Tab width (8 if nil *Options provided) + + FormatOnly bool // Disable the insertion and deletion of imports +} + +// Debug controls verbose logging. +var Debug = false + +// LocalPrefix is a comma-separated string of import path prefixes, which, if +// set, instructs Process to sort the import paths with the given prefixes +// into another group after 3rd-party packages. +var LocalPrefix string + +// Process formats and adjusts imports for the provided file. +// If opt is nil the defaults are used, and if src is nil the source +// is read from the filesystem. +// +// Note that filename's directory influences which imports can be chosen, +// so it is important that filename be accurate. +// To process data “as if” it were in filename, pass the data as a non-nil src. +func Process(filename string, src []byte, opt *Options) ([]byte, error) { + var err error + if src == nil { + src, err = os.ReadFile(filename) + if err != nil { + return nil, err + } + } + if opt == nil { + opt = &Options{Comments: true, TabIndent: true, TabWidth: 8} + } + intopt := &intimp.Options{ + Env: &intimp.ProcessEnv{ + GocmdRunner: &gocommand.Runner{}, + }, + LocalPrefix: LocalPrefix, + AllErrors: opt.AllErrors, + Comments: opt.Comments, + FormatOnly: opt.FormatOnly, + Fragment: opt.Fragment, + TabIndent: opt.TabIndent, + TabWidth: opt.TabWidth, + } + if Debug { + intopt.Env.Logf = log.Printf + } + return intimp.Process(filename, src, intopt) +} + +// VendorlessPath returns the devendorized version of the import path ipath. +// For example, VendorlessPath("foo/bar/vendor/a/b") returns "a/b". +func VendorlessPath(ipath string) string { + return intimp.VendorlessPath(ipath) +} diff --git a/vendor/golang.org/x/tools/internal/aliases/aliases.go b/vendor/golang.org/x/tools/internal/aliases/aliases.go new file mode 100644 index 0000000..b9425f5 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/aliases/aliases.go @@ -0,0 +1,38 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package aliases + +import ( + "go/token" + "go/types" +) + +// Package aliases defines backward compatible shims +// for the types.Alias type representation added in 1.22. +// This defines placeholders for x/tools until 1.26. + +// NewAlias creates a new TypeName in Package pkg that +// is an alias for the type rhs. +// +// The enabled parameter determines whether the resulting [TypeName]'s +// type is an [types.Alias]. Its value must be the result of a call to +// [Enabled], which computes the effective value of +// GODEBUG=gotypesalias=... by invoking the type checker. The Enabled +// function is expensive and should be called once per task (e.g. +// package import), not once per call to NewAlias. +// +// Precondition: enabled || len(tparams)==0. +// If materialized aliases are disabled, there must not be any type parameters. +func NewAlias(enabled bool, pos token.Pos, pkg *types.Package, name string, rhs types.Type, tparams []*types.TypeParam) *types.TypeName { + if enabled { + tname := types.NewTypeName(pos, pkg, name, nil) + SetTypeParams(types.NewAlias(tname, rhs), tparams) + return tname + } + if len(tparams) > 0 { + panic("cannot create an alias with type parameters when gotypesalias is not enabled") + } + return types.NewTypeName(pos, pkg, name, rhs) +} diff --git a/vendor/golang.org/x/tools/internal/aliases/aliases_go122.go b/vendor/golang.org/x/tools/internal/aliases/aliases_go122.go new file mode 100644 index 0000000..7716a33 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/aliases/aliases_go122.go @@ -0,0 +1,80 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package aliases + +import ( + "go/ast" + "go/parser" + "go/token" + "go/types" +) + +// Rhs returns the type on the right-hand side of the alias declaration. +func Rhs(alias *types.Alias) types.Type { + if alias, ok := any(alias).(interface{ Rhs() types.Type }); ok { + return alias.Rhs() // go1.23+ + } + + // go1.22's Alias didn't have the Rhs method, + // so Unalias is the best we can do. + return types.Unalias(alias) +} + +// TypeParams returns the type parameter list of the alias. +func TypeParams(alias *types.Alias) *types.TypeParamList { + if alias, ok := any(alias).(interface{ TypeParams() *types.TypeParamList }); ok { + return alias.TypeParams() // go1.23+ + } + return nil +} + +// SetTypeParams sets the type parameters of the alias type. +func SetTypeParams(alias *types.Alias, tparams []*types.TypeParam) { + if alias, ok := any(alias).(interface { + SetTypeParams(tparams []*types.TypeParam) + }); ok { + alias.SetTypeParams(tparams) // go1.23+ + } else if len(tparams) > 0 { + panic("cannot set type parameters of an Alias type in go1.22") + } +} + +// TypeArgs returns the type arguments used to instantiate the Alias type. +func TypeArgs(alias *types.Alias) *types.TypeList { + if alias, ok := any(alias).(interface{ TypeArgs() *types.TypeList }); ok { + return alias.TypeArgs() // go1.23+ + } + return nil // empty (go1.22) +} + +// Origin returns the generic Alias type of which alias is an instance. +// If alias is not an instance of a generic alias, Origin returns alias. +func Origin(alias *types.Alias) *types.Alias { + if alias, ok := any(alias).(interface{ Origin() *types.Alias }); ok { + return alias.Origin() // go1.23+ + } + return alias // not an instance of a generic alias (go1.22) +} + +// Enabled reports whether [NewAlias] should create [types.Alias] types. +// +// This function is expensive! Call it sparingly. +func Enabled() bool { + // The only reliable way to compute the answer is to invoke go/types. + // We don't parse the GODEBUG environment variable, because + // (a) it's tricky to do so in a manner that is consistent + // with the godebug package; in particular, a simple + // substring check is not good enough. The value is a + // rightmost-wins list of options. But more importantly: + // (b) it is impossible to detect changes to the effective + // setting caused by os.Setenv("GODEBUG"), as happens in + // many tests. Therefore any attempt to cache the result + // is just incorrect. + fset := token.NewFileSet() + f, _ := parser.ParseFile(fset, "a.go", "package p; type A = int", parser.SkipObjectResolution) + pkg, _ := new(types.Config).Check("p", fset, []*ast.File{f}, nil) + _, enabled := pkg.Scope().Lookup("A").Type().(*types.Alias) + return enabled +} diff --git a/vendor/golang.org/x/tools/internal/event/core/event.go b/vendor/golang.org/x/tools/internal/event/core/event.go new file mode 100644 index 0000000..a6cf0e6 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/event/core/event.go @@ -0,0 +1,85 @@ +// Copyright 2019 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 core provides support for event based telemetry. +package core + +import ( + "fmt" + "time" + + "golang.org/x/tools/internal/event/label" +) + +// Event holds the information about an event of note that occurred. +type Event struct { + at time.Time + + // As events are often on the stack, storing the first few labels directly + // in the event can avoid an allocation at all for the very common cases of + // simple events. + // The length needs to be large enough to cope with the majority of events + // but no so large as to cause undue stack pressure. + // A log message with two values will use 3 labels (one for each value and + // one for the message itself). + + static [3]label.Label // inline storage for the first few labels + dynamic []label.Label // dynamically sized storage for remaining labels +} + +// eventLabelMap implements label.Map for a the labels of an Event. +type eventLabelMap struct { + event Event +} + +func (ev Event) At() time.Time { return ev.at } + +func (ev Event) Format(f fmt.State, r rune) { + if !ev.at.IsZero() { + fmt.Fprint(f, ev.at.Format("2006/01/02 15:04:05 ")) + } + for index := 0; ev.Valid(index); index++ { + if l := ev.Label(index); l.Valid() { + fmt.Fprintf(f, "\n\t%v", l) + } + } +} + +func (ev Event) Valid(index int) bool { + return index >= 0 && index < len(ev.static)+len(ev.dynamic) +} + +func (ev Event) Label(index int) label.Label { + if index < len(ev.static) { + return ev.static[index] + } + return ev.dynamic[index-len(ev.static)] +} + +func (ev Event) Find(key label.Key) label.Label { + for _, l := range ev.static { + if l.Key() == key { + return l + } + } + for _, l := range ev.dynamic { + if l.Key() == key { + return l + } + } + return label.Label{} +} + +func MakeEvent(static [3]label.Label, labels []label.Label) Event { + return Event{ + static: static, + dynamic: labels, + } +} + +// CloneEvent event returns a copy of the event with the time adjusted to at. +func CloneEvent(ev Event, at time.Time) Event { + ev.at = at + return ev +} diff --git a/vendor/golang.org/x/tools/internal/event/core/export.go b/vendor/golang.org/x/tools/internal/event/core/export.go new file mode 100644 index 0000000..05f3a9a --- /dev/null +++ b/vendor/golang.org/x/tools/internal/event/core/export.go @@ -0,0 +1,70 @@ +// Copyright 2019 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 core + +import ( + "context" + "sync/atomic" + "time" + "unsafe" + + "golang.org/x/tools/internal/event/label" +) + +// Exporter is a function that handles events. +// It may return a modified context and event. +type Exporter func(context.Context, Event, label.Map) context.Context + +var ( + exporter unsafe.Pointer +) + +// SetExporter sets the global exporter function that handles all events. +// The exporter is called synchronously from the event call site, so it should +// return quickly so as not to hold up user code. +func SetExporter(e Exporter) { + p := unsafe.Pointer(&e) + if e == nil { + // &e is always valid, and so p is always valid, but for the early abort + // of ProcessEvent to be efficient it needs to make the nil check on the + // pointer without having to dereference it, so we make the nil function + // also a nil pointer + p = nil + } + atomic.StorePointer(&exporter, p) +} + +// deliver is called to deliver an event to the supplied exporter. +// it will fill in the time. +func deliver(ctx context.Context, exporter Exporter, ev Event) context.Context { + // add the current time to the event + ev.at = time.Now() + // hand the event off to the current exporter + return exporter(ctx, ev, ev) +} + +// Export is called to deliver an event to the global exporter if set. +func Export(ctx context.Context, ev Event) context.Context { + // get the global exporter and abort early if there is not one + exporterPtr := (*Exporter)(atomic.LoadPointer(&exporter)) + if exporterPtr == nil { + return ctx + } + return deliver(ctx, *exporterPtr, ev) +} + +// ExportPair is called to deliver a start event to the supplied exporter. +// It also returns a function that will deliver the end event to the same +// exporter. +// It will fill in the time. +func ExportPair(ctx context.Context, begin, end Event) (context.Context, func()) { + // get the global exporter and abort early if there is not one + exporterPtr := (*Exporter)(atomic.LoadPointer(&exporter)) + if exporterPtr == nil { + return ctx, func() {} + } + ctx = deliver(ctx, *exporterPtr, begin) + return ctx, func() { deliver(ctx, *exporterPtr, end) } +} diff --git a/vendor/golang.org/x/tools/internal/event/core/fast.go b/vendor/golang.org/x/tools/internal/event/core/fast.go new file mode 100644 index 0000000..06c1d46 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/event/core/fast.go @@ -0,0 +1,77 @@ +// Copyright 2019 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 core + +import ( + "context" + + "golang.org/x/tools/internal/event/keys" + "golang.org/x/tools/internal/event/label" +) + +// Log1 takes a message and one label delivers a log event to the exporter. +// It is a customized version of Print that is faster and does no allocation. +func Log1(ctx context.Context, message string, t1 label.Label) { + Export(ctx, MakeEvent([3]label.Label{ + keys.Msg.Of(message), + t1, + }, nil)) +} + +// Log2 takes a message and two labels and delivers a log event to the exporter. +// It is a customized version of Print that is faster and does no allocation. +func Log2(ctx context.Context, message string, t1 label.Label, t2 label.Label) { + Export(ctx, MakeEvent([3]label.Label{ + keys.Msg.Of(message), + t1, + t2, + }, nil)) +} + +// Metric1 sends a label event to the exporter with the supplied labels. +func Metric1(ctx context.Context, t1 label.Label) context.Context { + return Export(ctx, MakeEvent([3]label.Label{ + keys.Metric.New(), + t1, + }, nil)) +} + +// Metric2 sends a label event to the exporter with the supplied labels. +func Metric2(ctx context.Context, t1, t2 label.Label) context.Context { + return Export(ctx, MakeEvent([3]label.Label{ + keys.Metric.New(), + t1, + t2, + }, nil)) +} + +// Start1 sends a span start event with the supplied label list to the exporter. +// It also returns a function that will end the span, which should normally be +// deferred. +func Start1(ctx context.Context, name string, t1 label.Label) (context.Context, func()) { + return ExportPair(ctx, + MakeEvent([3]label.Label{ + keys.Start.Of(name), + t1, + }, nil), + MakeEvent([3]label.Label{ + keys.End.New(), + }, nil)) +} + +// Start2 sends a span start event with the supplied label list to the exporter. +// It also returns a function that will end the span, which should normally be +// deferred. +func Start2(ctx context.Context, name string, t1, t2 label.Label) (context.Context, func()) { + return ExportPair(ctx, + MakeEvent([3]label.Label{ + keys.Start.Of(name), + t1, + t2, + }, nil), + MakeEvent([3]label.Label{ + keys.End.New(), + }, nil)) +} diff --git a/vendor/golang.org/x/tools/internal/event/doc.go b/vendor/golang.org/x/tools/internal/event/doc.go new file mode 100644 index 0000000..5dc6e6b --- /dev/null +++ b/vendor/golang.org/x/tools/internal/event/doc.go @@ -0,0 +1,7 @@ +// Copyright 2019 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 event provides a set of packages that cover the main +// concepts of telemetry in an implementation agnostic way. +package event diff --git a/vendor/golang.org/x/tools/internal/event/event.go b/vendor/golang.org/x/tools/internal/event/event.go new file mode 100644 index 0000000..4d55e57 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/event/event.go @@ -0,0 +1,127 @@ +// Copyright 2019 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 event + +import ( + "context" + + "golang.org/x/tools/internal/event/core" + "golang.org/x/tools/internal/event/keys" + "golang.org/x/tools/internal/event/label" +) + +// Exporter is a function that handles events. +// It may return a modified context and event. +type Exporter func(context.Context, core.Event, label.Map) context.Context + +// SetExporter sets the global exporter function that handles all events. +// The exporter is called synchronously from the event call site, so it should +// return quickly so as not to hold up user code. +func SetExporter(e Exporter) { + core.SetExporter(core.Exporter(e)) +} + +// Log takes a message and a label list and combines them into a single event +// before delivering them to the exporter. +func Log(ctx context.Context, message string, labels ...label.Label) { + core.Export(ctx, core.MakeEvent([3]label.Label{ + keys.Msg.Of(message), + }, labels)) +} + +// IsLog returns true if the event was built by the Log function. +// It is intended to be used in exporters to identify the semantics of the +// event when deciding what to do with it. +func IsLog(ev core.Event) bool { + return ev.Label(0).Key() == keys.Msg +} + +// Error takes a message and a label list and combines them into a single event +// before delivering them to the exporter. It captures the error in the +// delivered event. +func Error(ctx context.Context, message string, err error, labels ...label.Label) { + core.Export(ctx, core.MakeEvent([3]label.Label{ + keys.Msg.Of(message), + keys.Err.Of(err), + }, labels)) +} + +// IsError returns true if the event was built by the Error function. +// It is intended to be used in exporters to identify the semantics of the +// event when deciding what to do with it. +func IsError(ev core.Event) bool { + return ev.Label(0).Key() == keys.Msg && + ev.Label(1).Key() == keys.Err +} + +// Metric sends a label event to the exporter with the supplied labels. +func Metric(ctx context.Context, labels ...label.Label) { + core.Export(ctx, core.MakeEvent([3]label.Label{ + keys.Metric.New(), + }, labels)) +} + +// IsMetric returns true if the event was built by the Metric function. +// It is intended to be used in exporters to identify the semantics of the +// event when deciding what to do with it. +func IsMetric(ev core.Event) bool { + return ev.Label(0).Key() == keys.Metric +} + +// Label sends a label event to the exporter with the supplied labels. +func Label(ctx context.Context, labels ...label.Label) context.Context { + return core.Export(ctx, core.MakeEvent([3]label.Label{ + keys.Label.New(), + }, labels)) +} + +// IsLabel returns true if the event was built by the Label function. +// It is intended to be used in exporters to identify the semantics of the +// event when deciding what to do with it. +func IsLabel(ev core.Event) bool { + return ev.Label(0).Key() == keys.Label +} + +// Start sends a span start event with the supplied label list to the exporter. +// It also returns a function that will end the span, which should normally be +// deferred. +func Start(ctx context.Context, name string, labels ...label.Label) (context.Context, func()) { + return core.ExportPair(ctx, + core.MakeEvent([3]label.Label{ + keys.Start.Of(name), + }, labels), + core.MakeEvent([3]label.Label{ + keys.End.New(), + }, nil)) +} + +// IsStart returns true if the event was built by the Start function. +// It is intended to be used in exporters to identify the semantics of the +// event when deciding what to do with it. +func IsStart(ev core.Event) bool { + return ev.Label(0).Key() == keys.Start +} + +// IsEnd returns true if the event was built by the End function. +// It is intended to be used in exporters to identify the semantics of the +// event when deciding what to do with it. +func IsEnd(ev core.Event) bool { + return ev.Label(0).Key() == keys.End +} + +// Detach returns a context without an associated span. +// This allows the creation of spans that are not children of the current span. +func Detach(ctx context.Context) context.Context { + return core.Export(ctx, core.MakeEvent([3]label.Label{ + keys.Detach.New(), + }, nil)) +} + +// IsDetach returns true if the event was built by the Detach function. +// It is intended to be used in exporters to identify the semantics of the +// event when deciding what to do with it. +func IsDetach(ev core.Event) bool { + return ev.Label(0).Key() == keys.Detach +} diff --git a/vendor/golang.org/x/tools/internal/event/keys/keys.go b/vendor/golang.org/x/tools/internal/event/keys/keys.go new file mode 100644 index 0000000..4cfa51b --- /dev/null +++ b/vendor/golang.org/x/tools/internal/event/keys/keys.go @@ -0,0 +1,564 @@ +// Copyright 2019 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 keys + +import ( + "fmt" + "io" + "math" + "strconv" + + "golang.org/x/tools/internal/event/label" +) + +// Value represents a key for untyped values. +type Value struct { + name string + description string +} + +// New creates a new Key for untyped values. +func New(name, description string) *Value { + return &Value{name: name, description: description} +} + +func (k *Value) Name() string { return k.name } +func (k *Value) Description() string { return k.description } + +func (k *Value) Format(w io.Writer, buf []byte, l label.Label) { + fmt.Fprint(w, k.From(l)) +} + +// Get can be used to get a label for the key from a label.Map. +func (k *Value) Get(lm label.Map) any { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return nil +} + +// From can be used to get a value from a Label. +func (k *Value) From(t label.Label) any { return t.UnpackValue() } + +// Of creates a new Label with this key and the supplied value. +func (k *Value) Of(value any) label.Label { return label.OfValue(k, value) } + +// Tag represents a key for tagging labels that have no value. +// These are used when the existence of the label is the entire information it +// carries, such as marking events to be of a specific kind, or from a specific +// package. +type Tag struct { + name string + description string +} + +// NewTag creates a new Key for tagging labels. +func NewTag(name, description string) *Tag { + return &Tag{name: name, description: description} +} + +func (k *Tag) Name() string { return k.name } +func (k *Tag) Description() string { return k.description } + +func (k *Tag) Format(w io.Writer, buf []byte, l label.Label) {} + +// New creates a new Label with this key. +func (k *Tag) New() label.Label { return label.OfValue(k, nil) } + +// Int represents a key +type Int struct { + name string + description string +} + +// NewInt creates a new Key for int values. +func NewInt(name, description string) *Int { + return &Int{name: name, description: description} +} + +func (k *Int) Name() string { return k.name } +func (k *Int) Description() string { return k.description } + +func (k *Int) Format(w io.Writer, buf []byte, l label.Label) { + w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10)) +} + +// Of creates a new Label with this key and the supplied value. +func (k *Int) Of(v int) label.Label { return label.Of64(k, uint64(v)) } + +// Get can be used to get a label for the key from a label.Map. +func (k *Int) Get(lm label.Map) int { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return 0 +} + +// From can be used to get a value from a Label. +func (k *Int) From(t label.Label) int { return int(t.Unpack64()) } + +// Int8 represents a key +type Int8 struct { + name string + description string +} + +// NewInt8 creates a new Key for int8 values. +func NewInt8(name, description string) *Int8 { + return &Int8{name: name, description: description} +} + +func (k *Int8) Name() string { return k.name } +func (k *Int8) Description() string { return k.description } + +func (k *Int8) Format(w io.Writer, buf []byte, l label.Label) { + w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10)) +} + +// Of creates a new Label with this key and the supplied value. +func (k *Int8) Of(v int8) label.Label { return label.Of64(k, uint64(v)) } + +// Get can be used to get a label for the key from a label.Map. +func (k *Int8) Get(lm label.Map) int8 { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return 0 +} + +// From can be used to get a value from a Label. +func (k *Int8) From(t label.Label) int8 { return int8(t.Unpack64()) } + +// Int16 represents a key +type Int16 struct { + name string + description string +} + +// NewInt16 creates a new Key for int16 values. +func NewInt16(name, description string) *Int16 { + return &Int16{name: name, description: description} +} + +func (k *Int16) Name() string { return k.name } +func (k *Int16) Description() string { return k.description } + +func (k *Int16) Format(w io.Writer, buf []byte, l label.Label) { + w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10)) +} + +// Of creates a new Label with this key and the supplied value. +func (k *Int16) Of(v int16) label.Label { return label.Of64(k, uint64(v)) } + +// Get can be used to get a label for the key from a label.Map. +func (k *Int16) Get(lm label.Map) int16 { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return 0 +} + +// From can be used to get a value from a Label. +func (k *Int16) From(t label.Label) int16 { return int16(t.Unpack64()) } + +// Int32 represents a key +type Int32 struct { + name string + description string +} + +// NewInt32 creates a new Key for int32 values. +func NewInt32(name, description string) *Int32 { + return &Int32{name: name, description: description} +} + +func (k *Int32) Name() string { return k.name } +func (k *Int32) Description() string { return k.description } + +func (k *Int32) Format(w io.Writer, buf []byte, l label.Label) { + w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10)) +} + +// Of creates a new Label with this key and the supplied value. +func (k *Int32) Of(v int32) label.Label { return label.Of64(k, uint64(v)) } + +// Get can be used to get a label for the key from a label.Map. +func (k *Int32) Get(lm label.Map) int32 { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return 0 +} + +// From can be used to get a value from a Label. +func (k *Int32) From(t label.Label) int32 { return int32(t.Unpack64()) } + +// Int64 represents a key +type Int64 struct { + name string + description string +} + +// NewInt64 creates a new Key for int64 values. +func NewInt64(name, description string) *Int64 { + return &Int64{name: name, description: description} +} + +func (k *Int64) Name() string { return k.name } +func (k *Int64) Description() string { return k.description } + +func (k *Int64) Format(w io.Writer, buf []byte, l label.Label) { + w.Write(strconv.AppendInt(buf, k.From(l), 10)) +} + +// Of creates a new Label with this key and the supplied value. +func (k *Int64) Of(v int64) label.Label { return label.Of64(k, uint64(v)) } + +// Get can be used to get a label for the key from a label.Map. +func (k *Int64) Get(lm label.Map) int64 { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return 0 +} + +// From can be used to get a value from a Label. +func (k *Int64) From(t label.Label) int64 { return int64(t.Unpack64()) } + +// UInt represents a key +type UInt struct { + name string + description string +} + +// NewUInt creates a new Key for uint values. +func NewUInt(name, description string) *UInt { + return &UInt{name: name, description: description} +} + +func (k *UInt) Name() string { return k.name } +func (k *UInt) Description() string { return k.description } + +func (k *UInt) Format(w io.Writer, buf []byte, l label.Label) { + w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10)) +} + +// Of creates a new Label with this key and the supplied value. +func (k *UInt) Of(v uint) label.Label { return label.Of64(k, uint64(v)) } + +// Get can be used to get a label for the key from a label.Map. +func (k *UInt) Get(lm label.Map) uint { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return 0 +} + +// From can be used to get a value from a Label. +func (k *UInt) From(t label.Label) uint { return uint(t.Unpack64()) } + +// UInt8 represents a key +type UInt8 struct { + name string + description string +} + +// NewUInt8 creates a new Key for uint8 values. +func NewUInt8(name, description string) *UInt8 { + return &UInt8{name: name, description: description} +} + +func (k *UInt8) Name() string { return k.name } +func (k *UInt8) Description() string { return k.description } + +func (k *UInt8) Format(w io.Writer, buf []byte, l label.Label) { + w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10)) +} + +// Of creates a new Label with this key and the supplied value. +func (k *UInt8) Of(v uint8) label.Label { return label.Of64(k, uint64(v)) } + +// Get can be used to get a label for the key from a label.Map. +func (k *UInt8) Get(lm label.Map) uint8 { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return 0 +} + +// From can be used to get a value from a Label. +func (k *UInt8) From(t label.Label) uint8 { return uint8(t.Unpack64()) } + +// UInt16 represents a key +type UInt16 struct { + name string + description string +} + +// NewUInt16 creates a new Key for uint16 values. +func NewUInt16(name, description string) *UInt16 { + return &UInt16{name: name, description: description} +} + +func (k *UInt16) Name() string { return k.name } +func (k *UInt16) Description() string { return k.description } + +func (k *UInt16) Format(w io.Writer, buf []byte, l label.Label) { + w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10)) +} + +// Of creates a new Label with this key and the supplied value. +func (k *UInt16) Of(v uint16) label.Label { return label.Of64(k, uint64(v)) } + +// Get can be used to get a label for the key from a label.Map. +func (k *UInt16) Get(lm label.Map) uint16 { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return 0 +} + +// From can be used to get a value from a Label. +func (k *UInt16) From(t label.Label) uint16 { return uint16(t.Unpack64()) } + +// UInt32 represents a key +type UInt32 struct { + name string + description string +} + +// NewUInt32 creates a new Key for uint32 values. +func NewUInt32(name, description string) *UInt32 { + return &UInt32{name: name, description: description} +} + +func (k *UInt32) Name() string { return k.name } +func (k *UInt32) Description() string { return k.description } + +func (k *UInt32) Format(w io.Writer, buf []byte, l label.Label) { + w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10)) +} + +// Of creates a new Label with this key and the supplied value. +func (k *UInt32) Of(v uint32) label.Label { return label.Of64(k, uint64(v)) } + +// Get can be used to get a label for the key from a label.Map. +func (k *UInt32) Get(lm label.Map) uint32 { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return 0 +} + +// From can be used to get a value from a Label. +func (k *UInt32) From(t label.Label) uint32 { return uint32(t.Unpack64()) } + +// UInt64 represents a key +type UInt64 struct { + name string + description string +} + +// NewUInt64 creates a new Key for uint64 values. +func NewUInt64(name, description string) *UInt64 { + return &UInt64{name: name, description: description} +} + +func (k *UInt64) Name() string { return k.name } +func (k *UInt64) Description() string { return k.description } + +func (k *UInt64) Format(w io.Writer, buf []byte, l label.Label) { + w.Write(strconv.AppendUint(buf, k.From(l), 10)) +} + +// Of creates a new Label with this key and the supplied value. +func (k *UInt64) Of(v uint64) label.Label { return label.Of64(k, v) } + +// Get can be used to get a label for the key from a label.Map. +func (k *UInt64) Get(lm label.Map) uint64 { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return 0 +} + +// From can be used to get a value from a Label. +func (k *UInt64) From(t label.Label) uint64 { return t.Unpack64() } + +// Float32 represents a key +type Float32 struct { + name string + description string +} + +// NewFloat32 creates a new Key for float32 values. +func NewFloat32(name, description string) *Float32 { + return &Float32{name: name, description: description} +} + +func (k *Float32) Name() string { return k.name } +func (k *Float32) Description() string { return k.description } + +func (k *Float32) Format(w io.Writer, buf []byte, l label.Label) { + w.Write(strconv.AppendFloat(buf, float64(k.From(l)), 'E', -1, 32)) +} + +// Of creates a new Label with this key and the supplied value. +func (k *Float32) Of(v float32) label.Label { + return label.Of64(k, uint64(math.Float32bits(v))) +} + +// Get can be used to get a label for the key from a label.Map. +func (k *Float32) Get(lm label.Map) float32 { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return 0 +} + +// From can be used to get a value from a Label. +func (k *Float32) From(t label.Label) float32 { + return math.Float32frombits(uint32(t.Unpack64())) +} + +// Float64 represents a key +type Float64 struct { + name string + description string +} + +// NewFloat64 creates a new Key for int64 values. +func NewFloat64(name, description string) *Float64 { + return &Float64{name: name, description: description} +} + +func (k *Float64) Name() string { return k.name } +func (k *Float64) Description() string { return k.description } + +func (k *Float64) Format(w io.Writer, buf []byte, l label.Label) { + w.Write(strconv.AppendFloat(buf, k.From(l), 'E', -1, 64)) +} + +// Of creates a new Label with this key and the supplied value. +func (k *Float64) Of(v float64) label.Label { + return label.Of64(k, math.Float64bits(v)) +} + +// Get can be used to get a label for the key from a label.Map. +func (k *Float64) Get(lm label.Map) float64 { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return 0 +} + +// From can be used to get a value from a Label. +func (k *Float64) From(t label.Label) float64 { + return math.Float64frombits(t.Unpack64()) +} + +// String represents a key +type String struct { + name string + description string +} + +// NewString creates a new Key for int64 values. +func NewString(name, description string) *String { + return &String{name: name, description: description} +} + +func (k *String) Name() string { return k.name } +func (k *String) Description() string { return k.description } + +func (k *String) Format(w io.Writer, buf []byte, l label.Label) { + w.Write(strconv.AppendQuote(buf, k.From(l))) +} + +// Of creates a new Label with this key and the supplied value. +func (k *String) Of(v string) label.Label { return label.OfString(k, v) } + +// Get can be used to get a label for the key from a label.Map. +func (k *String) Get(lm label.Map) string { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return "" +} + +// From can be used to get a value from a Label. +func (k *String) From(t label.Label) string { return t.UnpackString() } + +// Boolean represents a key +type Boolean struct { + name string + description string +} + +// NewBoolean creates a new Key for bool values. +func NewBoolean(name, description string) *Boolean { + return &Boolean{name: name, description: description} +} + +func (k *Boolean) Name() string { return k.name } +func (k *Boolean) Description() string { return k.description } + +func (k *Boolean) Format(w io.Writer, buf []byte, l label.Label) { + w.Write(strconv.AppendBool(buf, k.From(l))) +} + +// Of creates a new Label with this key and the supplied value. +func (k *Boolean) Of(v bool) label.Label { + if v { + return label.Of64(k, 1) + } + return label.Of64(k, 0) +} + +// Get can be used to get a label for the key from a label.Map. +func (k *Boolean) Get(lm label.Map) bool { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return false +} + +// From can be used to get a value from a Label. +func (k *Boolean) From(t label.Label) bool { return t.Unpack64() > 0 } + +// Error represents a key +type Error struct { + name string + description string +} + +// NewError creates a new Key for int64 values. +func NewError(name, description string) *Error { + return &Error{name: name, description: description} +} + +func (k *Error) Name() string { return k.name } +func (k *Error) Description() string { return k.description } + +func (k *Error) Format(w io.Writer, buf []byte, l label.Label) { + io.WriteString(w, k.From(l).Error()) +} + +// Of creates a new Label with this key and the supplied value. +func (k *Error) Of(v error) label.Label { return label.OfValue(k, v) } + +// Get can be used to get a label for the key from a label.Map. +func (k *Error) Get(lm label.Map) error { + if t := lm.Find(k); t.Valid() { + return k.From(t) + } + return nil +} + +// From can be used to get a value from a Label. +func (k *Error) From(t label.Label) error { + err, _ := t.UnpackValue().(error) + return err +} diff --git a/vendor/golang.org/x/tools/internal/event/keys/standard.go b/vendor/golang.org/x/tools/internal/event/keys/standard.go new file mode 100644 index 0000000..7e95866 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/event/keys/standard.go @@ -0,0 +1,22 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package keys + +var ( + // Msg is a key used to add message strings to label lists. + Msg = NewString("message", "a readable message") + // Label is a key used to indicate an event adds labels to the context. + Label = NewTag("label", "a label context marker") + // Start is used for things like traces that have a name. + Start = NewString("start", "span start") + // Metric is a key used to indicate an event records metrics. + End = NewTag("end", "a span end marker") + // Metric is a key used to indicate an event records metrics. + Detach = NewTag("detach", "a span detach marker") + // Err is a key used to add error values to label lists. + Err = NewError("error", "an error that occurred") + // Metric is a key used to indicate an event records metrics. + Metric = NewTag("metric", "a metric event marker") +) diff --git a/vendor/golang.org/x/tools/internal/event/keys/util.go b/vendor/golang.org/x/tools/internal/event/keys/util.go new file mode 100644 index 0000000..c0e8e73 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/event/keys/util.go @@ -0,0 +1,21 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package keys + +import ( + "sort" + "strings" +) + +// Join returns a canonical join of the keys in S: +// a sorted comma-separated string list. +func Join[S ~[]T, T ~string](s S) string { + strs := make([]string, 0, len(s)) + for _, v := range s { + strs = append(strs, string(v)) + } + sort.Strings(strs) + return strings.Join(strs, ",") +} diff --git a/vendor/golang.org/x/tools/internal/event/label/label.go b/vendor/golang.org/x/tools/internal/event/label/label.go new file mode 100644 index 0000000..92a3910 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/event/label/label.go @@ -0,0 +1,214 @@ +// Copyright 2019 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 label + +import ( + "fmt" + "io" + "reflect" + "slices" + "unsafe" +) + +// Key is used as the identity of a Label. +// Keys are intended to be compared by pointer only, the name should be unique +// for communicating with external systems, but it is not required or enforced. +type Key interface { + // Name returns the key name. + Name() string + // Description returns a string that can be used to describe the value. + Description() string + + // Format is used in formatting to append the value of the label to the + // supplied buffer. + // The formatter may use the supplied buf as a scratch area to avoid + // allocations. + Format(w io.Writer, buf []byte, l Label) +} + +// Label holds a key and value pair. +// It is normally used when passing around lists of labels. +type Label struct { + key Key + packed uint64 + untyped any +} + +// Map is the interface to a collection of Labels indexed by key. +type Map interface { + // Find returns the label that matches the supplied key. + Find(key Key) Label +} + +// List is the interface to something that provides an iterable +// list of labels. +// Iteration should start from 0 and continue until Valid returns false. +type List interface { + // Valid returns true if the index is within range for the list. + // It does not imply the label at that index will itself be valid. + Valid(index int) bool + // Label returns the label at the given index. + Label(index int) Label +} + +// list implements LabelList for a list of Labels. +type list struct { + labels []Label +} + +// filter wraps a LabelList filtering out specific labels. +type filter struct { + keys []Key + underlying List +} + +// listMap implements LabelMap for a simple list of labels. +type listMap struct { + labels []Label +} + +// mapChain implements LabelMap for a list of underlying LabelMap. +type mapChain struct { + maps []Map +} + +// OfValue creates a new label from the key and value. +// This method is for implementing new key types, label creation should +// normally be done with the Of method of the key. +func OfValue(k Key, value any) Label { return Label{key: k, untyped: value} } + +// UnpackValue assumes the label was built using LabelOfValue and returns the value +// that was passed to that constructor. +// This method is for implementing new key types, for type safety normal +// access should be done with the From method of the key. +func (t Label) UnpackValue() any { return t.untyped } + +// Of64 creates a new label from a key and a uint64. This is often +// used for non uint64 values that can be packed into a uint64. +// This method is for implementing new key types, label creation should +// normally be done with the Of method of the key. +func Of64(k Key, v uint64) Label { return Label{key: k, packed: v} } + +// Unpack64 assumes the label was built using LabelOf64 and returns the value that +// was passed to that constructor. +// This method is for implementing new key types, for type safety normal +// access should be done with the From method of the key. +func (t Label) Unpack64() uint64 { return t.packed } + +type stringptr unsafe.Pointer + +// OfString creates a new label from a key and a string. +// This method is for implementing new key types, label creation should +// normally be done with the Of method of the key. +func OfString(k Key, v string) Label { + hdr := (*reflect.StringHeader)(unsafe.Pointer(&v)) + return Label{ + key: k, + packed: uint64(hdr.Len), + untyped: stringptr(hdr.Data), + } +} + +// UnpackString assumes the label was built using LabelOfString and returns the +// value that was passed to that constructor. +// This method is for implementing new key types, for type safety normal +// access should be done with the From method of the key. +func (t Label) UnpackString() string { + var v string + hdr := (*reflect.StringHeader)(unsafe.Pointer(&v)) + hdr.Data = uintptr(t.untyped.(stringptr)) + hdr.Len = int(t.packed) + return v +} + +// Valid returns true if the Label is a valid one (it has a key). +func (t Label) Valid() bool { return t.key != nil } + +// Key returns the key of this Label. +func (t Label) Key() Key { return t.key } + +// Format is used for debug printing of labels. +func (t Label) Format(f fmt.State, r rune) { + if !t.Valid() { + io.WriteString(f, `nil`) + return + } + io.WriteString(f, t.Key().Name()) + io.WriteString(f, "=") + var buf [128]byte + t.Key().Format(f, buf[:0], t) +} + +func (l *list) Valid(index int) bool { + return index >= 0 && index < len(l.labels) +} + +func (l *list) Label(index int) Label { + return l.labels[index] +} + +func (f *filter) Valid(index int) bool { + return f.underlying.Valid(index) +} + +func (f *filter) Label(index int) Label { + l := f.underlying.Label(index) + if slices.Contains(f.keys, l.Key()) { + return Label{} + } + return l +} + +func (lm listMap) Find(key Key) Label { + for _, l := range lm.labels { + if l.Key() == key { + return l + } + } + return Label{} +} + +func (c mapChain) Find(key Key) Label { + for _, src := range c.maps { + l := src.Find(key) + if l.Valid() { + return l + } + } + return Label{} +} + +var emptyList = &list{} + +func NewList(labels ...Label) List { + if len(labels) == 0 { + return emptyList + } + return &list{labels: labels} +} + +func Filter(l List, keys ...Key) List { + if len(keys) == 0 { + return l + } + return &filter{keys: keys, underlying: l} +} + +func NewMap(labels ...Label) Map { + return listMap{labels: labels} +} + +func MergeMaps(srcs ...Map) Map { + var nonNil []Map + for _, src := range srcs { + if src != nil { + nonNil = append(nonNil, src) + } + } + if len(nonNil) == 1 { + return nonNil[0] + } + return mapChain{maps: nonNil} +} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/bimport.go b/vendor/golang.org/x/tools/internal/gcimporter/bimport.go new file mode 100644 index 0000000..734c461 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gcimporter/bimport.go @@ -0,0 +1,89 @@ +// 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. + +// This file contains the remaining vestiges of +// $GOROOT/src/go/internal/gcimporter/bimport.go. + +package gcimporter + +import ( + "fmt" + "go/token" + "go/types" + "sync" +) + +func errorf(format string, args ...any) { + panic(fmt.Sprintf(format, args...)) +} + +const deltaNewFile = -64 // see cmd/compile/internal/gc/bexport.go + +// Synthesize a token.Pos +type fakeFileSet struct { + fset *token.FileSet + files map[string]*fileInfo +} + +type fileInfo struct { + file *token.File + lastline int +} + +const maxlines = 64 * 1024 + +func (s *fakeFileSet) pos(file string, line, column int) token.Pos { + // TODO(mdempsky): Make use of column. + + // Since we don't know the set of needed file positions, we reserve maxlines + // positions per file. We delay calling token.File.SetLines until all + // positions have been calculated (by way of fakeFileSet.setLines), so that + // we can avoid setting unnecessary lines. See also golang/go#46586. + f := s.files[file] + if f == nil { + f = &fileInfo{file: s.fset.AddFile(file, -1, maxlines)} + s.files[file] = f + } + if line > maxlines { + line = 1 + } + if line > f.lastline { + f.lastline = line + } + + // Return a fake position assuming that f.file consists only of newlines. + return token.Pos(f.file.Base() + line - 1) +} + +func (s *fakeFileSet) setLines() { + fakeLinesOnce.Do(func() { + fakeLines = make([]int, maxlines) + for i := range fakeLines { + fakeLines[i] = i + } + }) + for _, f := range s.files { + f.file.SetLines(fakeLines[:f.lastline]) + } +} + +var ( + fakeLines []int + fakeLinesOnce sync.Once +) + +func chanDir(d int) types.ChanDir { + // tag values must match the constants in cmd/compile/internal/gc/go.go + switch d { + case 1 /* Crecv */ : + return types.RecvOnly + case 2 /* Csend */ : + return types.SendOnly + case 3 /* Cboth */ : + return types.SendRecv + default: + errorf("unexpected channel dir %d", d) + return 0 + } +} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/exportdata.go b/vendor/golang.org/x/tools/internal/gcimporter/exportdata.go new file mode 100644 index 0000000..5662a31 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gcimporter/exportdata.go @@ -0,0 +1,421 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file should be kept in sync with $GOROOT/src/internal/exportdata/exportdata.go. +// This file also additionally implements FindExportData for gcexportdata.NewReader. + +package gcimporter + +import ( + "bufio" + "bytes" + "errors" + "fmt" + "go/build" + "io" + "os" + "os/exec" + "path/filepath" + "strings" + "sync" +) + +// FindExportData positions the reader r at the beginning of the +// export data section of an underlying cmd/compile created archive +// file by reading from it. The reader must be positioned at the +// start of the file before calling this function. +// This returns the length of the export data in bytes. +// +// This function is needed by [gcexportdata.Read], which must +// accept inputs produced by the last two releases of cmd/compile, +// plus tip. +func FindExportData(r *bufio.Reader) (size int64, err error) { + arsize, err := FindPackageDefinition(r) + if err != nil { + return + } + size = int64(arsize) + + objapi, headers, err := ReadObjectHeaders(r) + if err != nil { + return + } + size -= int64(len(objapi)) + for _, h := range headers { + size -= int64(len(h)) + } + + // Check for the binary export data section header "$$B\n". + // TODO(taking): Unify with ReadExportDataHeader so that it stops at the 'u' instead of reading + line, err := r.ReadSlice('\n') + if err != nil { + return + } + hdr := string(line) + if hdr != "$$B\n" { + err = fmt.Errorf("unknown export data header: %q", hdr) + return + } + size -= int64(len(hdr)) + + // For files with a binary export data header "$$B\n", + // these are always terminated by an end-of-section marker "\n$$\n". + // So the last bytes must always be this constant. + // + // The end-of-section marker is not a part of the export data itself. + // Do not include these in size. + // + // It would be nice to have sanity check that the final bytes after + // the export data are indeed the end-of-section marker. The split + // of gcexportdata.NewReader and gcexportdata.Read make checking this + // ugly so gcimporter gives up enforcing this. The compiler and go/types + // importer do enforce this, which seems good enough. + const endofsection = "\n$$\n" + size -= int64(len(endofsection)) + + if size < 0 { + err = fmt.Errorf("invalid size (%d) in the archive file: %d bytes remain without section headers (recompile package)", arsize, size) + return + } + + return +} + +// ReadUnified reads the contents of the unified export data from a reader r +// that contains the contents of a GC-created archive file. +// +// On success, the reader will be positioned after the end-of-section marker "\n$$\n". +// +// Supported GC-created archive files have 4 layers of nesting: +// - An archive file containing a package definition file. +// - The package definition file contains headers followed by a data section. +// Headers are lines (≤ 4kb) that do not start with "$$". +// - The data section starts with "$$B\n" followed by export data followed +// by an end of section marker "\n$$\n". (The section start "$$\n" is no +// longer supported.) +// - The export data starts with a format byte ('u') followed by the in +// the given format. (See ReadExportDataHeader for older formats.) +// +// Putting this together, the bytes in a GC-created archive files are expected +// to look like the following. +// See cmd/internal/archive for more details on ar file headers. +// +// | \n | ar file signature +// | __.PKGDEF...size...\n | ar header for __.PKGDEF including size. +// | go object <...>\n | objabi header +// | \n | other headers such as build id +// | $$B\n | binary format marker +// | u\n | unified export +// | $$\n | end-of-section marker +// | [optional padding] | padding byte (0x0A) if size is odd +// | [ar file header] | other ar files +// | [ar file data] | +func ReadUnified(r *bufio.Reader) (data []byte, err error) { + // We historically guaranteed headers at the default buffer size (4096) work. + // This ensures we can use ReadSlice throughout. + const minBufferSize = 4096 + r = bufio.NewReaderSize(r, minBufferSize) + + size, err := FindPackageDefinition(r) + if err != nil { + return + } + n := size + + objapi, headers, err := ReadObjectHeaders(r) + if err != nil { + return + } + n -= len(objapi) + for _, h := range headers { + n -= len(h) + } + + hdrlen, err := ReadExportDataHeader(r) + if err != nil { + return + } + n -= hdrlen + + // size also includes the end of section marker. Remove that many bytes from the end. + const marker = "\n$$\n" + n -= len(marker) + + if n < 0 { + err = fmt.Errorf("invalid size (%d) in the archive file: %d bytes remain without section headers (recompile package)", size, n) + return + } + + // Read n bytes from buf. + data = make([]byte, n) + _, err = io.ReadFull(r, data) + if err != nil { + return + } + + // Check for marker at the end. + var suffix [len(marker)]byte + _, err = io.ReadFull(r, suffix[:]) + if err != nil { + return + } + if s := string(suffix[:]); s != marker { + err = fmt.Errorf("read %q instead of end-of-section marker (%q)", s, marker) + return + } + + return +} + +// FindPackageDefinition positions the reader r at the beginning of a package +// definition file ("__.PKGDEF") within a GC-created archive by reading +// from it, and returns the size of the package definition file in the archive. +// +// The reader must be positioned at the start of the archive file before calling +// this function, and "__.PKGDEF" is assumed to be the first file in the archive. +// +// See cmd/internal/archive for details on the archive format. +func FindPackageDefinition(r *bufio.Reader) (size int, err error) { + // Uses ReadSlice to limit risk of malformed inputs. + + // Read first line to make sure this is an object file. + line, err := r.ReadSlice('\n') + if err != nil { + err = fmt.Errorf("can't find export data (%v)", err) + return + } + + // Is the first line an archive file signature? + if string(line) != "!\n" { + err = fmt.Errorf("not the start of an archive file (%q)", line) + return + } + + // package export block should be first + size = readArchiveHeader(r, "__.PKGDEF") + if size <= 0 { + err = fmt.Errorf("not a package file") + return + } + + return +} + +// ReadObjectHeaders reads object headers from the reader. Object headers are +// lines that do not start with an end-of-section marker "$$". The first header +// is the objabi header. On success, the reader will be positioned at the beginning +// of the end-of-section marker. +// +// It returns an error if any header does not fit in r.Size() bytes. +func ReadObjectHeaders(r *bufio.Reader) (objapi string, headers []string, err error) { + // line is a temporary buffer for headers. + // Use bounded reads (ReadSlice, Peek) to limit risk of malformed inputs. + var line []byte + + // objapi header should be the first line + if line, err = r.ReadSlice('\n'); err != nil { + err = fmt.Errorf("can't find export data (%v)", err) + return + } + objapi = string(line) + + // objapi header begins with "go object ". + if !strings.HasPrefix(objapi, "go object ") { + err = fmt.Errorf("not a go object file: %s", objapi) + return + } + + // process remaining object header lines + for { + // check for an end of section marker "$$" + line, err = r.Peek(2) + if err != nil { + return + } + if string(line) == "$$" { + return // stop + } + + // read next header + line, err = r.ReadSlice('\n') + if err != nil { + return + } + headers = append(headers, string(line)) + } +} + +// ReadExportDataHeader reads the export data header and format from r. +// It returns the number of bytes read, or an error if the format is no longer +// supported or it failed to read. +// +// The only currently supported format is binary export data in the +// unified export format. +func ReadExportDataHeader(r *bufio.Reader) (n int, err error) { + // Read export data header. + line, err := r.ReadSlice('\n') + if err != nil { + return + } + + hdr := string(line) + switch hdr { + case "$$\n": + err = fmt.Errorf("old textual export format no longer supported (recompile package)") + return + + case "$$B\n": + var format byte + format, err = r.ReadByte() + if err != nil { + return + } + // The unified export format starts with a 'u'. + switch format { + case 'u': + default: + // Older no longer supported export formats include: + // indexed export format which started with an 'i'; and + // the older binary export format which started with a 'c', + // 'd', or 'v' (from "version"). + err = fmt.Errorf("binary export format %q is no longer supported (recompile package)", format) + return + } + + default: + err = fmt.Errorf("unknown export data header: %q", hdr) + return + } + + n = len(hdr) + 1 // + 1 is for 'u' + return +} + +// FindPkg returns the filename and unique package id for an import +// path based on package information provided by build.Import (using +// the build.Default build.Context). A relative srcDir is interpreted +// relative to the current working directory. +// +// FindPkg is only used in tests within x/tools. +func FindPkg(path, srcDir string) (filename, id string, err error) { + // TODO(taking): Move internal/exportdata.FindPkg into its own file, + // and then this copy into a _test package. + if path == "" { + return "", "", errors.New("path is empty") + } + + var noext string + switch { + default: + // "x" -> "$GOPATH/pkg/$GOOS_$GOARCH/x.ext", "x" + // Don't require the source files to be present. + if abs, err := filepath.Abs(srcDir); err == nil { // see issue 14282 + srcDir = abs + } + var bp *build.Package + bp, err = build.Import(path, srcDir, build.FindOnly|build.AllowBinary) + if bp.PkgObj == "" { + if bp.Goroot && bp.Dir != "" { + filename, err = lookupGorootExport(bp.Dir) + if err == nil { + _, err = os.Stat(filename) + } + if err == nil { + return filename, bp.ImportPath, nil + } + } + goto notfound + } else { + noext = strings.TrimSuffix(bp.PkgObj, ".a") + } + id = bp.ImportPath + + case build.IsLocalImport(path): + // "./x" -> "/this/directory/x.ext", "/this/directory/x" + noext = filepath.Join(srcDir, path) + id = noext + + case filepath.IsAbs(path): + // for completeness only - go/build.Import + // does not support absolute imports + // "/x" -> "/x.ext", "/x" + noext = path + id = path + } + + if false { // for debugging + if path != id { + fmt.Printf("%s -> %s\n", path, id) + } + } + + // try extensions + for _, ext := range pkgExts { + filename = noext + ext + f, statErr := os.Stat(filename) + if statErr == nil && !f.IsDir() { + return filename, id, nil + } + if err == nil { + err = statErr + } + } + +notfound: + if err == nil { + return "", path, fmt.Errorf("can't find import: %q", path) + } + return "", path, fmt.Errorf("can't find import: %q: %w", path, err) +} + +var pkgExts = [...]string{".a", ".o"} // a file from the build cache will have no extension + +var exportMap sync.Map // package dir → func() (string, error) + +// lookupGorootExport returns the location of the export data +// (normally found in the build cache, but located in GOROOT/pkg +// in prior Go releases) for the package located in pkgDir. +// +// (We use the package's directory instead of its import path +// mainly to simplify handling of the packages in src/vendor +// and cmd/vendor.) +// +// lookupGorootExport is only used in tests within x/tools. +func lookupGorootExport(pkgDir string) (string, error) { + f, ok := exportMap.Load(pkgDir) + if !ok { + var ( + listOnce sync.Once + exportPath string + err error + ) + f, _ = exportMap.LoadOrStore(pkgDir, func() (string, error) { + listOnce.Do(func() { + cmd := exec.Command(filepath.Join(build.Default.GOROOT, "bin", "go"), "list", "-export", "-f", "{{.Export}}", pkgDir) + cmd.Dir = build.Default.GOROOT + cmd.Env = append(os.Environ(), "PWD="+cmd.Dir, "GOROOT="+build.Default.GOROOT) + var output []byte + output, err = cmd.Output() + if err != nil { + if ee, ok := err.(*exec.ExitError); ok && len(ee.Stderr) > 0 { + err = errors.New(string(ee.Stderr)) + } + return + } + + exports := strings.Split(string(bytes.TrimSpace(output)), "\n") + if len(exports) != 1 { + err = fmt.Errorf("go list reported %d exports; expected 1", len(exports)) + return + } + + exportPath = exports[0] + }) + + return exportPath, err + }) + } + + return f.(func() (string, error))() +} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go b/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go new file mode 100644 index 0000000..3dbd21d --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go @@ -0,0 +1,108 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file is a reduced copy of $GOROOT/src/go/internal/gcimporter/gcimporter.go. + +// Package gcimporter provides various functions for reading +// gc-generated object files that can be used to implement the +// Importer interface defined by the Go 1.5 standard library package. +// +// The encoding is deterministic: if the encoder is applied twice to +// the same types.Package data structure, both encodings are equal. +// This property may be important to avoid spurious changes in +// applications such as build systems. +// +// However, the encoder is not necessarily idempotent. Importing an +// exported package may yield a types.Package that, while it +// represents the same set of Go types as the original, may differ in +// the details of its internal representation. Because of these +// differences, re-encoding the imported package may yield a +// different, but equally valid, encoding of the package. +package gcimporter // import "golang.org/x/tools/internal/gcimporter" + +import ( + "bufio" + "fmt" + "go/token" + "go/types" + "io" + "os" +) + +const ( + // Enable debug during development: it adds some additional checks, and + // prevents errors from being recovered. + debug = false + + // If trace is set, debugging output is printed to std out. + trace = false +) + +// Import imports a gc-generated package given its import path and srcDir, adds +// the corresponding package object to the packages map, and returns the object. +// The packages map must contain all packages already imported. +// +// Import is only used in tests. +func Import(fset *token.FileSet, packages map[string]*types.Package, path, srcDir string, lookup func(path string) (io.ReadCloser, error)) (pkg *types.Package, err error) { + var rc io.ReadCloser + var id string + if lookup != nil { + // With custom lookup specified, assume that caller has + // converted path to a canonical import path for use in the map. + if path == "unsafe" { + return types.Unsafe, nil + } + id = path + + // No need to re-import if the package was imported completely before. + if pkg = packages[id]; pkg != nil && pkg.Complete() { + return + } + f, err := lookup(path) + if err != nil { + return nil, err + } + rc = f + } else { + var filename string + filename, id, err = FindPkg(path, srcDir) + if filename == "" { + if path == "unsafe" { + return types.Unsafe, nil + } + return nil, err + } + + // no need to re-import if the package was imported completely before + if pkg = packages[id]; pkg != nil && pkg.Complete() { + return + } + + // open file + f, err := os.Open(filename) + if err != nil { + return nil, err + } + defer func() { + if err != nil { + // add file name to error + err = fmt.Errorf("%s: %v", filename, err) + } + }() + rc = f + } + defer rc.Close() + + buf := bufio.NewReader(rc) + data, err := ReadUnified(buf) + if err != nil { + err = fmt.Errorf("import %q: %v", path, err) + return + } + + // unified: emitted by cmd/compile since go1.20. + _, pkg, err = UImportData(fset, packages, data, id) + + return +} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iexport.go b/vendor/golang.org/x/tools/internal/gcimporter/iexport.go new file mode 100644 index 0000000..780873e --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gcimporter/iexport.go @@ -0,0 +1,1596 @@ +// Copyright 2019 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. + +// Indexed package export. +// +// The indexed export data format is an evolution of the previous +// binary export data format. Its chief contribution is introducing an +// index table, which allows efficient random access of individual +// declarations and inline function bodies. In turn, this allows +// avoiding unnecessary work for compilation units that import large +// packages. +// +// +// The top-level data format is structured as: +// +// Header struct { +// Tag byte // 'i' +// Version uvarint +// StringSize uvarint +// DataSize uvarint +// } +// +// Strings [StringSize]byte +// Data [DataSize]byte +// +// MainIndex []struct{ +// PkgPath stringOff +// PkgName stringOff +// PkgHeight uvarint +// +// Decls []struct{ +// Name stringOff +// Offset declOff +// } +// } +// +// Fingerprint [8]byte +// +// uvarint means a uint64 written out using uvarint encoding. +// +// []T means a uvarint followed by that many T objects. In other +// words: +// +// Len uvarint +// Elems [Len]T +// +// stringOff means a uvarint that indicates an offset within the +// Strings section. At that offset is another uvarint, followed by +// that many bytes, which form the string value. +// +// declOff means a uvarint that indicates an offset within the Data +// section where the associated declaration can be found. +// +// +// There are five kinds of declarations, distinguished by their first +// byte: +// +// type Var struct { +// Tag byte // 'V' +// Pos Pos +// Type typeOff +// } +// +// type Func struct { +// Tag byte // 'F' or 'G' +// Pos Pos +// TypeParams []typeOff // only present if Tag == 'G' +// Signature Signature +// } +// +// type Const struct { +// Tag byte // 'C' +// Pos Pos +// Value Value +// } +// +// type Type struct { +// Tag byte // 'T' or 'U' +// Pos Pos +// TypeParams []typeOff // only present if Tag == 'U' +// Underlying typeOff +// +// Methods []struct{ // omitted if Underlying is an interface type +// Pos Pos +// Name stringOff +// Recv Param +// Signature Signature +// } +// } +// +// type Alias struct { +// Tag byte // 'A' or 'B' +// Pos Pos +// TypeParams []typeOff // only present if Tag == 'B' +// Type typeOff +// } +// +// // "Automatic" declaration of each typeparam +// type TypeParam struct { +// Tag byte // 'P' +// Pos Pos +// Implicit bool +// Constraint typeOff +// } +// +// typeOff means a uvarint that either indicates a predeclared type, +// or an offset into the Data section. If the uvarint is less than +// predeclReserved, then it indicates the index into the predeclared +// types list (see predeclared in bexport.go for order). Otherwise, +// subtracting predeclReserved yields the offset of a type descriptor. +// +// Value means a type, kind, and type-specific value. See +// (*exportWriter).value for details. +// +// +// There are twelve kinds of type descriptors, distinguished by an itag: +// +// type DefinedType struct { +// Tag itag // definedType +// Name stringOff +// PkgPath stringOff +// } +// +// type PointerType struct { +// Tag itag // pointerType +// Elem typeOff +// } +// +// type SliceType struct { +// Tag itag // sliceType +// Elem typeOff +// } +// +// type ArrayType struct { +// Tag itag // arrayType +// Len uint64 +// Elem typeOff +// } +// +// type ChanType struct { +// Tag itag // chanType +// Dir uint64 // 1 RecvOnly; 2 SendOnly; 3 SendRecv +// Elem typeOff +// } +// +// type MapType struct { +// Tag itag // mapType +// Key typeOff +// Elem typeOff +// } +// +// type FuncType struct { +// Tag itag // signatureType +// PkgPath stringOff +// Signature Signature +// } +// +// type StructType struct { +// Tag itag // structType +// PkgPath stringOff +// Fields []struct { +// Pos Pos +// Name stringOff +// Type typeOff +// Embedded bool +// Note stringOff +// } +// } +// +// type InterfaceType struct { +// Tag itag // interfaceType +// PkgPath stringOff +// Embeddeds []struct { +// Pos Pos +// Type typeOff +// } +// Methods []struct { +// Pos Pos +// Name stringOff +// Signature Signature +// } +// } +// +// // Reference to a type param declaration +// type TypeParamType struct { +// Tag itag // typeParamType +// Name stringOff +// PkgPath stringOff +// } +// +// // Instantiation of a generic type (like List[T2] or List[int]) +// type InstanceType struct { +// Tag itag // instanceType +// Pos pos +// TypeArgs []typeOff +// BaseType typeOff +// } +// +// type UnionType struct { +// Tag itag // interfaceType +// Terms []struct { +// tilde bool +// Type typeOff +// } +// } +// +// +// +// type Signature struct { +// Params []Param +// Results []Param +// Variadic bool // omitted if Results is empty +// } +// +// type Param struct { +// Pos Pos +// Name stringOff +// Type typOff +// } +// +// +// Pos encodes a file:line:column triple, incorporating a simple delta +// encoding scheme within a data object. See exportWriter.pos for +// details. + +package gcimporter + +import ( + "bytes" + "encoding/binary" + "fmt" + "go/constant" + "go/token" + "go/types" + "io" + "math/big" + "reflect" + "slices" + "sort" + "strconv" + "strings" + + "golang.org/x/tools/go/types/objectpath" + "golang.org/x/tools/internal/aliases" +) + +// IExportShallow encodes "shallow" export data for the specified package. +// +// For types, we use "shallow" export data. Historically, the Go +// compiler always produced a summary of the types for a given package +// that included types from other packages that it indirectly +// referenced: "deep" export data. This had the advantage that the +// compiler (and analogous tools such as gopls) need only load one +// file per direct import. However, it meant that the files tended to +// get larger based on the level of the package in the import +// graph. For example, higher-level packages in the kubernetes module +// have over 1MB of "deep" export data, even when they have almost no +// content of their own, merely because they mention a major type that +// references many others. In pathological cases the export data was +// 300x larger than the source for a package due to this quadratic +// growth. +// +// "Shallow" export data means that the serialized types describe only +// a single package. If those types mention types from other packages, +// the type checker may need to request additional packages beyond +// just the direct imports. Type information for the entire transitive +// closure of imports is provided (lazily) by the DAG. +// +// No promises are made about the encoding other than that it can be decoded by +// the same version of IIExportShallow. If you plan to save export data in the +// file system, be sure to include a cryptographic digest of the executable in +// the key to avoid version skew. +// +// If the provided reportf func is non-nil, it is used for reporting +// bugs (e.g. recovered panics) encountered during export, enabling us +// to obtain via telemetry the stack that would otherwise be lost by +// merely returning an error. +func IExportShallow(fset *token.FileSet, pkg *types.Package, reportf ReportFunc) ([]byte, error) { + // In principle this operation can only fail if out.Write fails, + // but that's impossible for bytes.Buffer---and as a matter of + // fact iexportCommon doesn't even check for I/O errors. + // TODO(adonovan): handle I/O errors properly. + // TODO(adonovan): use byte slices throughout, avoiding copying. + const bundle, shallow = false, true + var out bytes.Buffer + err := iexportCommon(&out, fset, bundle, shallow, iexportVersion, []*types.Package{pkg}, reportf) + return out.Bytes(), err +} + +// IImportShallow decodes "shallow" types.Package data encoded by +// [IExportShallow] in the same executable. This function cannot import data +// from cmd/compile or gcexportdata.Write. +// +// The importer calls getPackages to obtain package symbols for all +// packages mentioned in the export data, including the one being +// decoded. +// +// If the provided reportf func is non-nil, it will be used for reporting bugs +// encountered during import. +// TODO(rfindley): remove reportf when we are confident enough in the new +// objectpath encoding. +func IImportShallow(fset *token.FileSet, getPackages GetPackagesFunc, data []byte, path string, reportf ReportFunc) (*types.Package, error) { + const bundle = false + const shallow = true + pkgs, err := iimportCommon(fset, getPackages, data, bundle, path, shallow, reportf) + if err != nil { + return nil, err + } + return pkgs[0], nil +} + +// ReportFunc is the type of a function used to report formatted bugs. +type ReportFunc = func(string, ...any) + +// Current bundled export format version. Increase with each format change. +// 0: initial implementation +const bundleVersion = 0 + +// IExportData writes indexed export data for pkg to out. +// +// If no file set is provided, position info will be missing. +// The package path of the top-level package will not be recorded, +// so that calls to IImportData can override with a provided package path. +func IExportData(out io.Writer, fset *token.FileSet, pkg *types.Package) error { + const bundle, shallow = false, false + return iexportCommon(out, fset, bundle, shallow, iexportVersion, []*types.Package{pkg}, nil) +} + +// IExportBundle writes an indexed export bundle for pkgs to out. +func IExportBundle(out io.Writer, fset *token.FileSet, pkgs []*types.Package) error { + const bundle, shallow = true, false + return iexportCommon(out, fset, bundle, shallow, iexportVersion, pkgs, nil) +} + +func iexportCommon(out io.Writer, fset *token.FileSet, bundle, shallow bool, version int, pkgs []*types.Package, reportf ReportFunc) (err error) { + if !debug { + defer func() { + if e := recover(); e != nil { + // Report the stack via telemetry (see #71067). + if reportf != nil { + reportf("panic in exporter") + } + if ierr, ok := e.(internalError); ok { + // internalError usually means we exported a + // bad go/types data structure: a violation + // of an implicit precondition of Export. + err = ierr + return + } + // Not an internal error; panic again. + panic(e) + } + }() + } + + p := iexporter{ + fset: fset, + version: version, + shallow: shallow, + allPkgs: map[*types.Package]bool{}, + stringIndex: map[string]uint64{}, + declIndex: map[types.Object]uint64{}, + tparamNames: map[types.Object]string{}, + typIndex: map[types.Type]uint64{}, + } + if !bundle { + p.localpkg = pkgs[0] + } + + for i, pt := range predeclared() { + p.typIndex[pt] = uint64(i) + } + if len(p.typIndex) > predeclReserved { + panic(internalErrorf("too many predeclared types: %d > %d", len(p.typIndex), predeclReserved)) + } + + // Initialize work queue with exported declarations. + for _, pkg := range pkgs { + scope := pkg.Scope() + for _, name := range scope.Names() { + if token.IsExported(name) { + p.pushDecl(scope.Lookup(name)) + } + } + + if bundle { + // Ensure pkg and its imports are included in the index. + p.allPkgs[pkg] = true + for _, imp := range pkg.Imports() { + p.allPkgs[imp] = true + } + } + } + + // Loop until no more work. + for !p.declTodo.empty() { + p.doDecl(p.declTodo.popHead()) + } + + // Produce index of offset of each file record in files. + var files intWriter + var fileOffset []uint64 // fileOffset[i] is offset in files of file encoded as i + if p.shallow { + fileOffset = make([]uint64, len(p.fileInfos)) + for i, info := range p.fileInfos { + fileOffset[i] = uint64(files.Len()) + p.encodeFile(&files, info.file, info.needed) + } + } + + // Append indices to data0 section. + dataLen := uint64(p.data0.Len()) + w := p.newWriter() + w.writeIndex(p.declIndex) + + if bundle { + w.uint64(uint64(len(pkgs))) + for _, pkg := range pkgs { + w.pkg(pkg) + imps := pkg.Imports() + w.uint64(uint64(len(imps))) + for _, imp := range imps { + w.pkg(imp) + } + } + } + w.flush() + + // Assemble header. + var hdr intWriter + if bundle { + hdr.uint64(bundleVersion) + } + hdr.uint64(uint64(p.version)) + hdr.uint64(uint64(p.strings.Len())) + if p.shallow { + hdr.uint64(uint64(files.Len())) + hdr.uint64(uint64(len(fileOffset))) + for _, offset := range fileOffset { + hdr.uint64(offset) + } + } + hdr.uint64(dataLen) + + // Flush output. + io.Copy(out, &hdr) + io.Copy(out, &p.strings) + if p.shallow { + io.Copy(out, &files) + } + io.Copy(out, &p.data0) + + return nil +} + +// encodeFile writes to w a representation of the file sufficient to +// faithfully restore position information about all needed offsets. +// Mutates the needed array. +func (p *iexporter) encodeFile(w *intWriter, file *token.File, needed []uint64) { + _ = needed[0] // precondition: needed is non-empty + + w.uint64(p.stringOff(file.Name())) + + size := uint64(file.Size()) + w.uint64(size) + + // Sort the set of needed offsets. Duplicates are harmless. + slices.Sort(needed) + + lines := file.Lines() // byte offset of each line start + w.uint64(uint64(len(lines))) + + // Rather than record the entire array of line start offsets, + // we save only a sparse list of (index, offset) pairs for + // the start of each line that contains a needed position. + var sparse [][2]int // (index, offset) pairs +outer: + for i, lineStart := range lines { + lineEnd := size + if i < len(lines)-1 { + lineEnd = uint64(lines[i+1]) + } + // Does this line contains a needed offset? + if needed[0] < lineEnd { + sparse = append(sparse, [2]int{i, lineStart}) + for needed[0] < lineEnd { + needed = needed[1:] + if len(needed) == 0 { + break outer + } + } + } + } + + // Delta-encode the columns. + w.uint64(uint64(len(sparse))) + var prev [2]int + for _, pair := range sparse { + w.uint64(uint64(pair[0] - prev[0])) + w.uint64(uint64(pair[1] - prev[1])) + prev = pair + } +} + +// writeIndex writes out an object index. mainIndex indicates whether +// we're writing out the main index, which is also read by +// non-compiler tools and includes a complete package description +// (i.e., name and height). +func (w *exportWriter) writeIndex(index map[types.Object]uint64) { + type pkgObj struct { + obj types.Object + name string // qualified name; differs from obj.Name for type params + } + // Build a map from packages to objects from that package. + pkgObjs := map[*types.Package][]pkgObj{} + + // For the main index, make sure to include every package that + // we reference, even if we're not exporting (or reexporting) + // any symbols from it. + if w.p.localpkg != nil { + pkgObjs[w.p.localpkg] = nil + } + for pkg := range w.p.allPkgs { + pkgObjs[pkg] = nil + } + + for obj := range index { + name := w.p.exportName(obj) + pkgObjs[obj.Pkg()] = append(pkgObjs[obj.Pkg()], pkgObj{obj, name}) + } + + var pkgs []*types.Package + for pkg, objs := range pkgObjs { + pkgs = append(pkgs, pkg) + + sort.Slice(objs, func(i, j int) bool { + return objs[i].name < objs[j].name + }) + } + + sort.Slice(pkgs, func(i, j int) bool { + return w.exportPath(pkgs[i]) < w.exportPath(pkgs[j]) + }) + + w.uint64(uint64(len(pkgs))) + for _, pkg := range pkgs { + w.string(w.exportPath(pkg)) + w.string(pkg.Name()) + w.uint64(uint64(0)) // package height is not needed for go/types + + objs := pkgObjs[pkg] + w.uint64(uint64(len(objs))) + for _, obj := range objs { + w.string(obj.name) + w.uint64(index[obj.obj]) + } + } +} + +// exportName returns the 'exported' name of an object. It differs from +// obj.Name() only for type parameters (see tparamExportName for details). +func (p *iexporter) exportName(obj types.Object) (res string) { + if name := p.tparamNames[obj]; name != "" { + return name + } + return obj.Name() +} + +type iexporter struct { + fset *token.FileSet + out *bytes.Buffer + version int + + shallow bool // don't put types from other packages in the index + objEncoder *objectpath.Encoder // encodes objects from other packages in shallow mode; lazily allocated + localpkg *types.Package // (nil in bundle mode) + + // allPkgs tracks all packages that have been referenced by + // the export data, so we can ensure to include them in the + // main index. + allPkgs map[*types.Package]bool + + declTodo objQueue + + strings intWriter + stringIndex map[string]uint64 + + // In shallow mode, object positions are encoded as (file, offset). + // Each file is recorded as a line-number table. + // Only the lines of needed positions are saved faithfully. + fileInfo map[*token.File]uint64 // value is index in fileInfos + fileInfos []*filePositions + + data0 intWriter + declIndex map[types.Object]uint64 + tparamNames map[types.Object]string // typeparam->exported name + typIndex map[types.Type]uint64 + + indent int // for tracing support +} + +type filePositions struct { + file *token.File + needed []uint64 // unordered list of needed file offsets +} + +func (p *iexporter) trace(format string, args ...any) { + if !trace { + // Call sites should also be guarded, but having this check here allows + // easily enabling/disabling debug trace statements. + return + } + fmt.Printf(strings.Repeat("..", p.indent)+format+"\n", args...) +} + +// objectpathEncoder returns the lazily allocated objectpath.Encoder to use +// when encoding objects in other packages during shallow export. +// +// Using a shared Encoder amortizes some of cost of objectpath search. +func (p *iexporter) objectpathEncoder() *objectpath.Encoder { + if p.objEncoder == nil { + p.objEncoder = new(objectpath.Encoder) + } + return p.objEncoder +} + +// stringOff returns the offset of s within the string section. +// If not already present, it's added to the end. +func (p *iexporter) stringOff(s string) uint64 { + off, ok := p.stringIndex[s] + if !ok { + off = uint64(p.strings.Len()) + p.stringIndex[s] = off + + p.strings.uint64(uint64(len(s))) + p.strings.WriteString(s) + } + return off +} + +// fileIndexAndOffset returns the index of the token.File and the byte offset of pos within it. +func (p *iexporter) fileIndexAndOffset(file *token.File, pos token.Pos) (uint64, uint64) { + index, ok := p.fileInfo[file] + if !ok { + index = uint64(len(p.fileInfo)) + p.fileInfos = append(p.fileInfos, &filePositions{file: file}) + if p.fileInfo == nil { + p.fileInfo = make(map[*token.File]uint64) + } + p.fileInfo[file] = index + } + // Record each needed offset. + info := p.fileInfos[index] + offset := uint64(file.Offset(pos)) + info.needed = append(info.needed, offset) + + return index, offset +} + +// pushDecl adds n to the declaration work queue, if not already present. +func (p *iexporter) pushDecl(obj types.Object) { + // Package unsafe is known to the compiler and predeclared. + // Caller should not ask us to do export it. + if obj.Pkg() == types.Unsafe { + panic("cannot export package unsafe") + } + + // Shallow export data: don't index decls from other packages. + if p.shallow && obj.Pkg() != p.localpkg { + return + } + + if _, ok := p.declIndex[obj]; ok { + return + } + + p.declIndex[obj] = ^uint64(0) // mark obj present in work queue + p.declTodo.pushTail(obj) +} + +// exportWriter handles writing out individual data section chunks. +type exportWriter struct { + p *iexporter + + data intWriter + prevFile string + prevLine int64 + prevColumn int64 +} + +func (w *exportWriter) exportPath(pkg *types.Package) string { + if pkg == w.p.localpkg { + return "" + } + return pkg.Path() +} + +func (p *iexporter) doDecl(obj types.Object) { + if trace { + p.trace("exporting decl %v (%T)", obj, obj) + p.indent++ + defer func() { + p.indent-- + p.trace("=> %s", obj) + }() + } + w := p.newWriter() + + switch obj := obj.(type) { + case *types.Var: + w.tag(varTag) + w.pos(obj.Pos()) + w.typ(obj.Type(), obj.Pkg()) + + case *types.Func: + sig, _ := obj.Type().(*types.Signature) + if sig.Recv() != nil { + // We shouldn't see methods in the package scope, + // but the type checker may repair "func () F() {}" + // to "func (Invalid) F()" and then treat it like "func F()", + // so allow that. See golang/go#57729. + if sig.Recv().Type() != types.Typ[types.Invalid] { + panic(internalErrorf("unexpected method: %v", sig)) + } + } + + // Function. + if sig.TypeParams().Len() == 0 { + w.tag(funcTag) + } else { + w.tag(genericFuncTag) + } + w.pos(obj.Pos()) + // The tparam list of the function type is the declaration of the type + // params. So, write out the type params right now. Then those type params + // will be referenced via their type offset (via typOff) in all other + // places in the signature and function where they are used. + // + // While importing the type parameters, tparamList computes and records + // their export name, so that it can be later used when writing the index. + if tparams := sig.TypeParams(); tparams.Len() > 0 { + w.tparamList(obj.Name(), tparams, obj.Pkg()) + } + w.signature(sig) + + case *types.Const: + w.tag(constTag) + w.pos(obj.Pos()) + w.value(obj.Type(), obj.Val()) + + case *types.TypeName: + t := obj.Type() + + if tparam, ok := types.Unalias(t).(*types.TypeParam); ok { + w.tag(typeParamTag) + w.pos(obj.Pos()) + constraint := tparam.Constraint() + if p.version >= iexportVersionGo1_18 { + implicit := false + if iface, _ := types.Unalias(constraint).(*types.Interface); iface != nil { + implicit = iface.IsImplicit() + } + w.bool(implicit) + } + w.typ(constraint, obj.Pkg()) + break + } + + if obj.IsAlias() { + alias, materialized := t.(*types.Alias) // may fail when aliases are not enabled + + var tparams *types.TypeParamList + if materialized { + tparams = aliases.TypeParams(alias) + } + if tparams.Len() == 0 { + w.tag(aliasTag) + } else { + w.tag(genericAliasTag) + } + w.pos(obj.Pos()) + if tparams.Len() > 0 { + w.tparamList(obj.Name(), tparams, obj.Pkg()) + } + if materialized { + // Preserve materialized aliases, + // even of non-exported types. + t = aliases.Rhs(alias) + } + w.typ(t, obj.Pkg()) + break + } + + // Defined type. + named, ok := t.(*types.Named) + if !ok { + panic(internalErrorf("%s is not a defined type", t)) + } + + if named.TypeParams().Len() == 0 { + w.tag(typeTag) + } else { + w.tag(genericTypeTag) + } + w.pos(obj.Pos()) + + if named.TypeParams().Len() > 0 { + // While importing the type parameters, tparamList computes and records + // their export name, so that it can be later used when writing the index. + w.tparamList(obj.Name(), named.TypeParams(), obj.Pkg()) + } + + underlying := named.Underlying() + w.typ(underlying, obj.Pkg()) + + if types.IsInterface(t) { + break + } + + n := named.NumMethods() + w.uint64(uint64(n)) + for i := range n { + m := named.Method(i) + w.pos(m.Pos()) + w.string(m.Name()) + sig, _ := m.Type().(*types.Signature) + + // Receiver type parameters are type arguments of the receiver type, so + // their name must be qualified before exporting recv. + if rparams := sig.RecvTypeParams(); rparams.Len() > 0 { + prefix := obj.Name() + "." + m.Name() + for i := 0; i < rparams.Len(); i++ { + rparam := rparams.At(i) + name := tparamExportName(prefix, rparam) + w.p.tparamNames[rparam.Obj()] = name + } + } + w.param(sig.Recv()) + w.signature(sig) + } + + default: + panic(internalErrorf("unexpected object: %v", obj)) + } + + p.declIndex[obj] = w.flush() +} + +func (w *exportWriter) tag(tag byte) { + w.data.WriteByte(tag) +} + +func (w *exportWriter) pos(pos token.Pos) { + if w.p.shallow { + w.posV2(pos) + } else if w.p.version >= iexportVersionPosCol { + w.posV1(pos) + } else { + w.posV0(pos) + } +} + +// posV2 encoding (used only in shallow mode) records positions as +// (file, offset), where file is the index in the token.File table +// (which records the file name and newline offsets) and offset is a +// byte offset. It effectively ignores //line directives. +func (w *exportWriter) posV2(pos token.Pos) { + if pos == token.NoPos { + w.uint64(0) + return + } + file := w.p.fset.File(pos) // fset must be non-nil + index, offset := w.p.fileIndexAndOffset(file, pos) + w.uint64(1 + index) + w.uint64(offset) +} + +func (w *exportWriter) posV1(pos token.Pos) { + if w.p.fset == nil { + w.int64(0) + return + } + + p := w.p.fset.Position(pos) + file := p.Filename + line := int64(p.Line) + column := int64(p.Column) + + deltaColumn := (column - w.prevColumn) << 1 + deltaLine := (line - w.prevLine) << 1 + + if file != w.prevFile { + deltaLine |= 1 + } + if deltaLine != 0 { + deltaColumn |= 1 + } + + w.int64(deltaColumn) + if deltaColumn&1 != 0 { + w.int64(deltaLine) + if deltaLine&1 != 0 { + w.string(file) + } + } + + w.prevFile = file + w.prevLine = line + w.prevColumn = column +} + +func (w *exportWriter) posV0(pos token.Pos) { + if w.p.fset == nil { + w.int64(0) + return + } + + p := w.p.fset.Position(pos) + file := p.Filename + line := int64(p.Line) + + // When file is the same as the last position (common case), + // we can save a few bytes by delta encoding just the line + // number. + // + // Note: Because data objects may be read out of order (or not + // at all), we can only apply delta encoding within a single + // object. This is handled implicitly by tracking prevFile and + // prevLine as fields of exportWriter. + + if file == w.prevFile { + delta := line - w.prevLine + w.int64(delta) + if delta == deltaNewFile { + w.int64(-1) + } + } else { + w.int64(deltaNewFile) + w.int64(line) // line >= 0 + w.string(file) + w.prevFile = file + } + w.prevLine = line +} + +func (w *exportWriter) pkg(pkg *types.Package) { + // Ensure any referenced packages are declared in the main index. + w.p.allPkgs[pkg] = true + + w.string(w.exportPath(pkg)) +} + +func (w *exportWriter) qualifiedType(obj *types.TypeName) { + name := w.p.exportName(obj) + + // Ensure any referenced declarations are written out too. + w.p.pushDecl(obj) + w.string(name) + w.pkg(obj.Pkg()) +} + +// TODO(rfindley): what does 'pkg' even mean here? It would be better to pass +// it in explicitly into signatures and structs that may use it for +// constructing fields. +func (w *exportWriter) typ(t types.Type, pkg *types.Package) { + w.data.uint64(w.p.typOff(t, pkg)) +} + +func (p *iexporter) newWriter() *exportWriter { + return &exportWriter{p: p} +} + +func (w *exportWriter) flush() uint64 { + off := uint64(w.p.data0.Len()) + io.Copy(&w.p.data0, &w.data) + return off +} + +func (p *iexporter) typOff(t types.Type, pkg *types.Package) uint64 { + off, ok := p.typIndex[t] + if !ok { + w := p.newWriter() + w.doTyp(t, pkg) + off = predeclReserved + w.flush() + p.typIndex[t] = off + } + return off +} + +func (w *exportWriter) startType(k itag) { + w.data.uint64(uint64(k)) +} + +func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { + if trace { + w.p.trace("exporting type %s (%T)", t, t) + w.p.indent++ + defer func() { + w.p.indent-- + w.p.trace("=> %s", t) + }() + } + switch t := t.(type) { + case *types.Alias: + if targs := aliases.TypeArgs(t); targs.Len() > 0 { + w.startType(instanceType) + w.pos(t.Obj().Pos()) + w.typeList(targs, pkg) + w.typ(aliases.Origin(t), pkg) + return + } + w.startType(aliasType) + w.qualifiedType(t.Obj()) + + case *types.Named: + if targs := t.TypeArgs(); targs.Len() > 0 { + w.startType(instanceType) + // TODO(rfindley): investigate if this position is correct, and if it + // matters. + w.pos(t.Obj().Pos()) + w.typeList(targs, pkg) + w.typ(t.Origin(), pkg) + return + } + w.startType(definedType) + w.qualifiedType(t.Obj()) + + case *types.TypeParam: + w.startType(typeParamType) + w.qualifiedType(t.Obj()) + + case *types.Pointer: + w.startType(pointerType) + w.typ(t.Elem(), pkg) + + case *types.Slice: + w.startType(sliceType) + w.typ(t.Elem(), pkg) + + case *types.Array: + w.startType(arrayType) + w.uint64(uint64(t.Len())) + w.typ(t.Elem(), pkg) + + case *types.Chan: + w.startType(chanType) + // 1 RecvOnly; 2 SendOnly; 3 SendRecv + var dir uint64 + switch t.Dir() { + case types.RecvOnly: + dir = 1 + case types.SendOnly: + dir = 2 + case types.SendRecv: + dir = 3 + } + w.uint64(dir) + w.typ(t.Elem(), pkg) + + case *types.Map: + w.startType(mapType) + w.typ(t.Key(), pkg) + w.typ(t.Elem(), pkg) + + case *types.Signature: + w.startType(signatureType) + w.pkg(pkg) + w.signature(t) + + case *types.Struct: + w.startType(structType) + n := t.NumFields() + // Even for struct{} we must emit some qualifying package, because that's + // what the compiler does, and thus that's what the importer expects. + fieldPkg := pkg + if n > 0 { + fieldPkg = t.Field(0).Pkg() + } + if fieldPkg == nil { + // TODO(rfindley): improve this very hacky logic. + // + // The importer expects a package to be set for all struct types, even + // those with no fields. A better encoding might be to set NumFields + // before pkg. setPkg panics with a nil package, which may be possible + // to reach with invalid packages (and perhaps valid packages, too?), so + // (arbitrarily) set the localpkg if available. + // + // Alternatively, we may be able to simply guarantee that pkg != nil, by + // reconsidering the encoding of constant values. + if w.p.shallow { + fieldPkg = w.p.localpkg + } else { + panic(internalErrorf("no package to set for empty struct")) + } + } + w.pkg(fieldPkg) + w.uint64(uint64(n)) + + for i := range n { + f := t.Field(i) + if w.p.shallow { + w.objectPath(f) + } + w.pos(f.Pos()) + w.string(f.Name()) // unexported fields implicitly qualified by prior setPkg + w.typ(f.Type(), fieldPkg) + w.bool(f.Anonymous()) + w.string(t.Tag(i)) // note (or tag) + } + + case *types.Interface: + w.startType(interfaceType) + w.pkg(pkg) + + n := t.NumEmbeddeds() + w.uint64(uint64(n)) + for i := 0; i < n; i++ { + ft := t.EmbeddedType(i) + tPkg := pkg + if named, _ := types.Unalias(ft).(*types.Named); named != nil { + w.pos(named.Obj().Pos()) + } else { + w.pos(token.NoPos) + } + w.typ(ft, tPkg) + } + + // See comment for struct fields. In shallow mode we change the encoding + // for interface methods that are promoted from other packages. + + n = t.NumExplicitMethods() + w.uint64(uint64(n)) + for i := 0; i < n; i++ { + m := t.ExplicitMethod(i) + if w.p.shallow { + w.objectPath(m) + } + w.pos(m.Pos()) + w.string(m.Name()) + sig, _ := m.Type().(*types.Signature) + w.signature(sig) + } + + case *types.Union: + w.startType(unionType) + nt := t.Len() + w.uint64(uint64(nt)) + for i := range nt { + term := t.Term(i) + w.bool(term.Tilde()) + w.typ(term.Type(), pkg) + } + + default: + panic(internalErrorf("unexpected type: %v, %v", t, reflect.TypeOf(t))) + } +} + +// objectPath writes the package and objectPath to use to look up obj in a +// different package, when encoding in "shallow" mode. +// +// When doing a shallow import, the importer creates only the local package, +// and requests package symbols for dependencies from the client. +// However, certain types defined in the local package may hold objects defined +// (perhaps deeply) within another package. +// +// For example, consider the following: +// +// package a +// func F() chan * map[string] struct { X int } +// +// package b +// import "a" +// var B = a.F() +// +// In this example, the type of b.B holds fields defined in package a. +// In order to have the correct canonical objects for the field defined in the +// type of B, they are encoded as objectPaths and later looked up in the +// importer. The same problem applies to interface methods. +func (w *exportWriter) objectPath(obj types.Object) { + if obj.Pkg() == nil || obj.Pkg() == w.p.localpkg { + // obj.Pkg() may be nil for the builtin error.Error. + // In this case, or if obj is declared in the local package, no need to + // encode. + w.string("") + return + } + objectPath, err := w.p.objectpathEncoder().For(obj) + if err != nil { + // Fall back to the empty string, which will cause the importer to create a + // new object, which matches earlier behavior. Creating a new object is + // sufficient for many purposes (such as type checking), but causes certain + // references algorithms to fail (golang/go#60819). However, we didn't + // notice this problem during months of gopls@v0.12.0 testing. + // + // TODO(golang/go#61674): this workaround is insufficient, as in the case + // where the field forwarded from an instantiated type that may not appear + // in the export data of the original package: + // + // // package a + // type A[P any] struct{ F P } + // + // // package b + // type B a.A[int] + // + // We need to update references algorithms not to depend on this + // de-duplication, at which point we may want to simply remove the + // workaround here. + w.string("") + return + } + w.string(string(objectPath)) + w.pkg(obj.Pkg()) +} + +func (w *exportWriter) signature(sig *types.Signature) { + w.paramList(sig.Params()) + w.paramList(sig.Results()) + if sig.Params().Len() > 0 { + w.bool(sig.Variadic()) + } +} + +func (w *exportWriter) typeList(ts *types.TypeList, pkg *types.Package) { + w.uint64(uint64(ts.Len())) + for i := 0; i < ts.Len(); i++ { + w.typ(ts.At(i), pkg) + } +} + +func (w *exportWriter) tparamList(prefix string, list *types.TypeParamList, pkg *types.Package) { + ll := uint64(list.Len()) + w.uint64(ll) + for i := 0; i < list.Len(); i++ { + tparam := list.At(i) + // Set the type parameter exportName before exporting its type. + exportName := tparamExportName(prefix, tparam) + w.p.tparamNames[tparam.Obj()] = exportName + w.typ(list.At(i), pkg) + } +} + +const blankMarker = "$" + +// tparamExportName returns the 'exported' name of a type parameter, which +// differs from its actual object name: it is prefixed with a qualifier, and +// blank type parameter names are disambiguated by their index in the type +// parameter list. +func tparamExportName(prefix string, tparam *types.TypeParam) string { + assert(prefix != "") + name := tparam.Obj().Name() + if name == "_" { + name = blankMarker + strconv.Itoa(tparam.Index()) + } + return prefix + "." + name +} + +// tparamName returns the real name of a type parameter, after stripping its +// qualifying prefix and reverting blank-name encoding. See tparamExportName +// for details. +func tparamName(exportName string) string { + // Remove the "path" from the type param name that makes it unique. + ix := strings.LastIndex(exportName, ".") + if ix < 0 { + errorf("malformed type parameter export name %s: missing prefix", exportName) + } + name := exportName[ix+1:] + if strings.HasPrefix(name, blankMarker) { + return "_" + } + return name +} + +func (w *exportWriter) paramList(tup *types.Tuple) { + n := tup.Len() + w.uint64(uint64(n)) + for i := range n { + w.param(tup.At(i)) + } +} + +func (w *exportWriter) param(obj types.Object) { + w.pos(obj.Pos()) + w.localIdent(obj) + w.typ(obj.Type(), obj.Pkg()) +} + +func (w *exportWriter) value(typ types.Type, v constant.Value) { + w.typ(typ, nil) + if w.p.version >= iexportVersionGo1_18 { + w.int64(int64(v.Kind())) + } + + if v.Kind() == constant.Unknown { + // golang/go#60605: treat unknown constant values as if they have invalid type + // + // This loses some fidelity over the package type-checked from source, but that + // is acceptable. + // + // TODO(rfindley): we should switch on the recorded constant kind rather + // than the constant type + return + } + + switch b := typ.Underlying().(*types.Basic); b.Info() & types.IsConstType { + case types.IsBoolean: + w.bool(constant.BoolVal(v)) + case types.IsInteger: + var i big.Int + if i64, exact := constant.Int64Val(v); exact { + i.SetInt64(i64) + } else if ui64, exact := constant.Uint64Val(v); exact { + i.SetUint64(ui64) + } else { + i.SetString(v.ExactString(), 10) + } + w.mpint(&i, typ) + case types.IsFloat: + f := constantToFloat(v) + w.mpfloat(f, typ) + case types.IsComplex: + w.mpfloat(constantToFloat(constant.Real(v)), typ) + w.mpfloat(constantToFloat(constant.Imag(v)), typ) + case types.IsString: + w.string(constant.StringVal(v)) + default: + if b.Kind() == types.Invalid { + // package contains type errors + break + } + panic(internalErrorf("unexpected type %v (%v)", typ, typ.Underlying())) + } +} + +// constantToFloat converts a constant.Value with kind constant.Float to a +// big.Float. +func constantToFloat(x constant.Value) *big.Float { + x = constant.ToFloat(x) + // Use the same floating-point precision (512) as cmd/compile + // (see Mpprec in cmd/compile/internal/gc/mpfloat.go). + const mpprec = 512 + var f big.Float + f.SetPrec(mpprec) + if v, exact := constant.Float64Val(x); exact { + // float64 + f.SetFloat64(v) + } else if num, denom := constant.Num(x), constant.Denom(x); num.Kind() == constant.Int { + // TODO(gri): add big.Rat accessor to constant.Value. + n := valueToRat(num) + d := valueToRat(denom) + f.SetRat(n.Quo(n, d)) + } else { + // Value too large to represent as a fraction => inaccessible. + // TODO(gri): add big.Float accessor to constant.Value. + _, ok := f.SetString(x.ExactString()) + assert(ok) + } + return &f +} + +func valueToRat(x constant.Value) *big.Rat { + // Convert little-endian to big-endian. + // I can't believe this is necessary. + bytes := constant.Bytes(x) + for i := 0; i < len(bytes)/2; i++ { + bytes[i], bytes[len(bytes)-1-i] = bytes[len(bytes)-1-i], bytes[i] + } + return new(big.Rat).SetInt(new(big.Int).SetBytes(bytes)) +} + +// mpint exports a multi-precision integer. +// +// For unsigned types, small values are written out as a single +// byte. Larger values are written out as a length-prefixed big-endian +// byte string, where the length prefix is encoded as its complement. +// For example, bytes 0, 1, and 2 directly represent the integer +// values 0, 1, and 2; while bytes 255, 254, and 253 indicate a 1-, +// 2-, and 3-byte big-endian string follow. +// +// Encoding for signed types use the same general approach as for +// unsigned types, except small values use zig-zag encoding and the +// bottom bit of length prefix byte for large values is reserved as a +// sign bit. +// +// The exact boundary between small and large encodings varies +// according to the maximum number of bytes needed to encode a value +// of type typ. As a special case, 8-bit types are always encoded as a +// single byte. +// +// TODO(mdempsky): Is this level of complexity really worthwhile? +func (w *exportWriter) mpint(x *big.Int, typ types.Type) { + basic, ok := typ.Underlying().(*types.Basic) + if !ok { + panic(internalErrorf("unexpected type %v (%T)", typ.Underlying(), typ.Underlying())) + } + + signed, maxBytes := intSize(basic) + + negative := x.Sign() < 0 + if !signed && negative { + panic(internalErrorf("negative unsigned integer; type %v, value %v", typ, x)) + } + + b := x.Bytes() + if len(b) > 0 && b[0] == 0 { + panic(internalErrorf("leading zeros")) + } + if uint(len(b)) > maxBytes { + panic(internalErrorf("bad mpint length: %d > %d (type %v, value %v)", len(b), maxBytes, typ, x)) + } + + maxSmall := 256 - maxBytes + if signed { + maxSmall = 256 - 2*maxBytes + } + if maxBytes == 1 { + maxSmall = 256 + } + + // Check if x can use small value encoding. + if len(b) <= 1 { + var ux uint + if len(b) == 1 { + ux = uint(b[0]) + } + if signed { + ux <<= 1 + if negative { + ux-- + } + } + if ux < maxSmall { + w.data.WriteByte(byte(ux)) + return + } + } + + n := 256 - uint(len(b)) + if signed { + n = 256 - 2*uint(len(b)) + if negative { + n |= 1 + } + } + if n < maxSmall || n >= 256 { + panic(internalErrorf("encoding mistake: %d, %v, %v => %d", len(b), signed, negative, n)) + } + + w.data.WriteByte(byte(n)) + w.data.Write(b) +} + +// mpfloat exports a multi-precision floating point number. +// +// The number's value is decomposed into mantissa × 2**exponent, where +// mantissa is an integer. The value is written out as mantissa (as a +// multi-precision integer) and then the exponent, except exponent is +// omitted if mantissa is zero. +func (w *exportWriter) mpfloat(f *big.Float, typ types.Type) { + if f.IsInf() { + panic("infinite constant") + } + + // Break into f = mant × 2**exp, with 0.5 <= mant < 1. + var mant big.Float + exp := int64(f.MantExp(&mant)) + + // Scale so that mant is an integer. + prec := mant.MinPrec() + mant.SetMantExp(&mant, int(prec)) + exp -= int64(prec) + + manti, acc := mant.Int(nil) + if acc != big.Exact { + panic(internalErrorf("mantissa scaling failed for %f (%s)", f, acc)) + } + w.mpint(manti, typ) + if manti.Sign() != 0 { + w.int64(exp) + } +} + +func (w *exportWriter) bool(b bool) bool { + var x uint64 + if b { + x = 1 + } + w.uint64(x) + return b +} + +func (w *exportWriter) int64(x int64) { w.data.int64(x) } +func (w *exportWriter) uint64(x uint64) { w.data.uint64(x) } +func (w *exportWriter) string(s string) { w.uint64(w.p.stringOff(s)) } + +func (w *exportWriter) localIdent(obj types.Object) { + // Anonymous parameters. + if obj == nil { + w.string("") + return + } + + name := obj.Name() + if name == "_" { + w.string("_") + return + } + + w.string(name) +} + +type intWriter struct { + bytes.Buffer +} + +func (w *intWriter) int64(x int64) { + var buf [binary.MaxVarintLen64]byte + n := binary.PutVarint(buf[:], x) + w.Write(buf[:n]) +} + +func (w *intWriter) uint64(x uint64) { + var buf [binary.MaxVarintLen64]byte + n := binary.PutUvarint(buf[:], x) + w.Write(buf[:n]) +} + +func assert(cond bool) { + if !cond { + panic("internal error: assertion failed") + } +} + +// The below is copied from go/src/cmd/compile/internal/gc/syntax.go. + +// objQueue is a FIFO queue of types.Object. The zero value of objQueue is +// a ready-to-use empty queue. +type objQueue struct { + ring []types.Object + head, tail int +} + +// empty returns true if q contains no Nodes. +func (q *objQueue) empty() bool { + return q.head == q.tail +} + +// pushTail appends n to the tail of the queue. +func (q *objQueue) pushTail(obj types.Object) { + if len(q.ring) == 0 { + q.ring = make([]types.Object, 16) + } else if q.head+len(q.ring) == q.tail { + // Grow the ring. + nring := make([]types.Object, len(q.ring)*2) + // Copy the old elements. + part := q.ring[q.head%len(q.ring):] + if q.tail-q.head <= len(part) { + part = part[:q.tail-q.head] + copy(nring, part) + } else { + pos := copy(nring, part) + copy(nring[pos:], q.ring[:q.tail%len(q.ring)]) + } + q.ring, q.head, q.tail = nring, 0, q.tail-q.head + } + + q.ring[q.tail%len(q.ring)] = obj + q.tail++ +} + +// popHead pops a node from the head of the queue. It panics if q is empty. +func (q *objQueue) popHead() types.Object { + if q.empty() { + panic("dequeue empty") + } + obj := q.ring[q.head%len(q.ring)] + q.head++ + return obj +} + +// internalError represents an error generated inside this package. +type internalError string + +func (e internalError) Error() string { return "gcimporter: " + string(e) } + +// TODO(adonovan): make this call panic, so that it's symmetric with errorf. +// Otherwise it's easy to forget to do anything with the error. +// +// TODO(adonovan): also, consider switching the names "errorf" and +// "internalErrorf" as the former is used for bugs, whose cause is +// internal inconsistency, whereas the latter is used for ordinary +// situations like bad input, whose cause is external. +func internalErrorf(format string, args ...any) error { + return internalError(fmt.Sprintf(format, args...)) +} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iimport.go b/vendor/golang.org/x/tools/internal/gcimporter/iimport.go new file mode 100644 index 0000000..82e6c9d --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gcimporter/iimport.go @@ -0,0 +1,1120 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Indexed package import. +// See iexport.go for the export data format. + +package gcimporter + +import ( + "bytes" + "encoding/binary" + "fmt" + "go/constant" + "go/token" + "go/types" + "io" + "math/big" + "slices" + "sort" + "strings" + + "golang.org/x/tools/go/types/objectpath" + "golang.org/x/tools/internal/aliases" + "golang.org/x/tools/internal/typesinternal" +) + +type intReader struct { + *bytes.Reader + path string +} + +func (r *intReader) int64() int64 { + i, err := binary.ReadVarint(r.Reader) + if err != nil { + errorf("import %q: read varint error: %v", r.path, err) + } + return i +} + +func (r *intReader) uint64() uint64 { + i, err := binary.ReadUvarint(r.Reader) + if err != nil { + errorf("import %q: read varint error: %v", r.path, err) + } + return i +} + +// Keep this in sync with constants in iexport.go. +const ( + iexportVersionGo1_11 = 0 + iexportVersionPosCol = 1 + iexportVersionGo1_18 = 2 + iexportVersionGenerics = 2 + iexportVersion = iexportVersionGenerics + + iexportVersionCurrent = 2 +) + +type ident struct { + pkg *types.Package + name string +} + +const predeclReserved = 32 + +type itag uint64 + +const ( + // Types + definedType itag = iota + pointerType + sliceType + arrayType + chanType + mapType + signatureType + structType + interfaceType + typeParamType + instanceType + unionType + aliasType +) + +// Object tags +const ( + varTag = 'V' + funcTag = 'F' + genericFuncTag = 'G' + constTag = 'C' + aliasTag = 'A' + genericAliasTag = 'B' + typeParamTag = 'P' + typeTag = 'T' + genericTypeTag = 'U' +) + +// IImportData imports a package from the serialized package data +// and returns 0 and a reference to the package. +// If the export data version is not recognized or the format is otherwise +// compromised, an error is returned. +func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (int, *types.Package, error) { + pkgs, err := iimportCommon(fset, GetPackagesFromMap(imports), data, false, path, false, nil) + if err != nil { + return 0, nil, err + } + return 0, pkgs[0], nil +} + +// IImportBundle imports a set of packages from the serialized package bundle. +func IImportBundle(fset *token.FileSet, imports map[string]*types.Package, data []byte) ([]*types.Package, error) { + return iimportCommon(fset, GetPackagesFromMap(imports), data, true, "", false, nil) +} + +// A GetPackagesFunc function obtains the non-nil symbols for a set of +// packages, creating and recursively importing them as needed. An +// implementation should store each package symbol is in the Pkg +// field of the items array. +// +// Any error causes importing to fail. This can be used to quickly read +// the import manifest of an export data file without fully decoding it. +type GetPackagesFunc = func(items []GetPackagesItem) error + +// A GetPackagesItem is a request from the importer for the package +// symbol of the specified name and path. +type GetPackagesItem struct { + Name, Path string + Pkg *types.Package // to be filled in by GetPackagesFunc call + + // private importer state + pathOffset uint64 + nameIndex map[string]uint64 +} + +// GetPackagesFromMap returns a GetPackagesFunc that retrieves +// packages from the given map of package path to package. +// +// The returned function may mutate m: each requested package that is not +// found is created with types.NewPackage and inserted into m. +func GetPackagesFromMap(m map[string]*types.Package) GetPackagesFunc { + return func(items []GetPackagesItem) error { + for i, item := range items { + pkg, ok := m[item.Path] + if !ok { + pkg = types.NewPackage(item.Path, item.Name) + m[item.Path] = pkg + } + items[i].Pkg = pkg + } + return nil + } +} + +func iimportCommon(fset *token.FileSet, getPackages GetPackagesFunc, data []byte, bundle bool, path string, shallow bool, reportf ReportFunc) (pkgs []*types.Package, err error) { + const currentVersion = iexportVersionCurrent + version := int64(-1) + if !debug { + defer func() { + if e := recover(); e != nil { + if bundle { + err = fmt.Errorf("%v", e) + } else if version > currentVersion { + err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e) + } else { + err = fmt.Errorf("internal error while importing %q (%v); please report an issue", path, e) + } + } + }() + } + + r := &intReader{bytes.NewReader(data), path} + + if bundle { + if v := r.uint64(); v != bundleVersion { + errorf("unknown bundle format version %d", v) + } + } + + version = int64(r.uint64()) + switch version { + case iexportVersionGo1_18, iexportVersionPosCol, iexportVersionGo1_11: + default: + if version > iexportVersionGo1_18 { + errorf("unstable iexport format version %d, just rebuild compiler and std library", version) + } else { + errorf("unknown iexport format version %d", version) + } + } + + sLen := int64(r.uint64()) + var fLen int64 + var fileOffset []uint64 + if shallow { + // Shallow mode uses a different position encoding. + fLen = int64(r.uint64()) + fileOffset = make([]uint64, r.uint64()) + for i := range fileOffset { + fileOffset[i] = r.uint64() + } + } + dLen := int64(r.uint64()) + + whence, _ := r.Seek(0, io.SeekCurrent) + stringData := data[whence : whence+sLen] + fileData := data[whence+sLen : whence+sLen+fLen] + declData := data[whence+sLen+fLen : whence+sLen+fLen+dLen] + r.Seek(sLen+fLen+dLen, io.SeekCurrent) + + p := iimporter{ + version: int(version), + ipath: path, + aliases: aliases.Enabled(), + shallow: shallow, + reportf: reportf, + + stringData: stringData, + stringCache: make(map[uint64]string), + fileOffset: fileOffset, + fileData: fileData, + fileCache: make([]*token.File, len(fileOffset)), + pkgCache: make(map[uint64]*types.Package), + + declData: declData, + pkgIndex: make(map[*types.Package]map[string]uint64), + typCache: make(map[uint64]types.Type), + // Separate map for typeparams, keyed by their package and unique + // name. + tparamIndex: make(map[ident]types.Type), + + fake: fakeFileSet{ + fset: fset, + files: make(map[string]*fileInfo), + }, + } + defer p.fake.setLines() // set lines for files in fset + + for i, pt := range predeclared() { + p.typCache[uint64(i)] = pt + } + + // Gather the relevant packages from the manifest. + items := make([]GetPackagesItem, r.uint64()) + uniquePkgPaths := make(map[string]bool) + for i := range items { + pkgPathOff := r.uint64() + pkgPath := p.stringAt(pkgPathOff) + pkgName := p.stringAt(r.uint64()) + _ = r.uint64() // package height; unused by go/types + + if pkgPath == "" { + pkgPath = path + } + items[i].Name = pkgName + items[i].Path = pkgPath + items[i].pathOffset = pkgPathOff + + // Read index for package. + nameIndex := make(map[string]uint64) + nSyms := r.uint64() + // In shallow mode, only the current package (i=0) has an index. + assert(!(shallow && i > 0 && nSyms != 0)) + for ; nSyms > 0; nSyms-- { + name := p.stringAt(r.uint64()) + nameIndex[name] = r.uint64() + } + + items[i].nameIndex = nameIndex + + uniquePkgPaths[pkgPath] = true + } + // Debugging #63822; hypothesis: there are duplicate PkgPaths. + if len(uniquePkgPaths) != len(items) { + reportf("found duplicate PkgPaths while reading export data manifest: %v", items) + } + + // Request packages all at once from the client, + // enabling a parallel implementation. + if err := getPackages(items); err != nil { + return nil, err // don't wrap this error + } + + // Check the results and complete the index. + pkgList := make([]*types.Package, len(items)) + for i, item := range items { + pkg := item.Pkg + if pkg == nil { + errorf("internal error: getPackages returned nil package for %q", item.Path) + } else if pkg.Path() != item.Path { + errorf("internal error: getPackages returned wrong path %q, want %q", pkg.Path(), item.Path) + } else if pkg.Name() != item.Name { + errorf("internal error: getPackages returned wrong name %s for package %q, want %s", pkg.Name(), item.Path, item.Name) + } + p.pkgCache[item.pathOffset] = pkg + p.pkgIndex[pkg] = item.nameIndex + pkgList[i] = pkg + } + + if bundle { + pkgs = make([]*types.Package, r.uint64()) + for i := range pkgs { + pkg := p.pkgAt(r.uint64()) + imps := make([]*types.Package, r.uint64()) + for j := range imps { + imps[j] = p.pkgAt(r.uint64()) + } + pkg.SetImports(imps) + pkgs[i] = pkg + } + } else { + if len(pkgList) == 0 { + errorf("no packages found for %s", path) + panic("unreachable") + } + pkgs = pkgList[:1] + + // record all referenced packages as imports + list := slices.Clone(pkgList[1:]) + sort.Sort(byPath(list)) + pkgs[0].SetImports(list) + } + + for _, pkg := range pkgs { + if pkg.Complete() { + continue + } + + names := make([]string, 0, len(p.pkgIndex[pkg])) + for name := range p.pkgIndex[pkg] { + names = append(names, name) + } + sort.Strings(names) + for _, name := range names { + p.doDecl(pkg, name) + } + + // package was imported completely and without errors + pkg.MarkComplete() + } + + // SetConstraint can't be called if the constraint type is not yet complete. + // When type params are created in the typeParamTag case of (*importReader).obj(), + // the associated constraint type may not be complete due to recursion. + // Therefore, we defer calling SetConstraint there, and call it here instead + // after all types are complete. + for _, d := range p.later { + d.t.SetConstraint(d.constraint) + } + + for _, typ := range p.interfaceList { + typ.Complete() + } + + // Workaround for golang/go#61561. See the doc for instanceList for details. + for _, typ := range p.instanceList { + if iface, _ := typ.Underlying().(*types.Interface); iface != nil { + iface.Complete() + } + } + + return pkgs, nil +} + +type setConstraintArgs struct { + t *types.TypeParam + constraint types.Type +} + +type iimporter struct { + version int + ipath string + + aliases bool + shallow bool + reportf ReportFunc // if non-nil, used to report bugs + + stringData []byte + stringCache map[uint64]string + fileOffset []uint64 // fileOffset[i] is offset in fileData for info about file encoded as i + fileData []byte + fileCache []*token.File // memoized decoding of file encoded as i + pkgCache map[uint64]*types.Package + + declData []byte + pkgIndex map[*types.Package]map[string]uint64 + typCache map[uint64]types.Type + tparamIndex map[ident]types.Type + + fake fakeFileSet + interfaceList []*types.Interface + + // Workaround for the go/types bug golang/go#61561: instances produced during + // instantiation may contain incomplete interfaces. Here we only complete the + // underlying type of the instance, which is the most common case but doesn't + // handle parameterized interface literals defined deeper in the type. + instanceList []types.Type // instances for later completion (see golang/go#61561) + + // Arguments for calls to SetConstraint that are deferred due to recursive types + later []setConstraintArgs + + indent int // for tracing support +} + +func (p *iimporter) trace(format string, args ...any) { + if !trace { + // Call sites should also be guarded, but having this check here allows + // easily enabling/disabling debug trace statements. + return + } + fmt.Printf(strings.Repeat("..", p.indent)+format+"\n", args...) +} + +func (p *iimporter) doDecl(pkg *types.Package, name string) { + if debug { + p.trace("import decl %s", name) + p.indent++ + defer func() { + p.indent-- + p.trace("=> %s", name) + }() + } + // See if we've already imported this declaration. + if obj := pkg.Scope().Lookup(name); obj != nil { + return + } + + off, ok := p.pkgIndex[pkg][name] + if !ok { + // In deep mode, the index should be complete. In shallow + // mode, we should have already recursively loaded necessary + // dependencies so the above Lookup succeeds. + errorf("%v.%v not in index", pkg, name) + } + + r := &importReader{p: p, currPkg: pkg} + r.declReader.Reset(p.declData[off:]) + + r.obj(name) +} + +func (p *iimporter) stringAt(off uint64) string { + if s, ok := p.stringCache[off]; ok { + return s + } + + slen, n := binary.Uvarint(p.stringData[off:]) + if n <= 0 { + errorf("varint failed") + } + spos := off + uint64(n) + s := string(p.stringData[spos : spos+slen]) + p.stringCache[off] = s + return s +} + +func (p *iimporter) fileAt(index uint64) *token.File { + file := p.fileCache[index] + if file == nil { + off := p.fileOffset[index] + file = p.decodeFile(intReader{bytes.NewReader(p.fileData[off:]), p.ipath}) + p.fileCache[index] = file + } + return file +} + +func (p *iimporter) decodeFile(rd intReader) *token.File { + filename := p.stringAt(rd.uint64()) + size := int(rd.uint64()) + file := p.fake.fset.AddFile(filename, -1, size) + + // SetLines requires a nondecreasing sequence. + // Because it is common for clients to derive the interval + // [start, start+len(name)] from a start position, and we + // want to ensure that the end offset is on the same line, + // we fill in the gaps of the sparse encoding with values + // that strictly increase by the largest possible amount. + // This allows us to avoid having to record the actual end + // offset of each needed line. + + lines := make([]int, int(rd.uint64())) + var index, offset int + for i, n := 0, int(rd.uint64()); i < n; i++ { + index += int(rd.uint64()) + offset += int(rd.uint64()) + lines[index] = offset + + // Ensure monotonicity between points. + for j := index - 1; j > 0 && lines[j] == 0; j-- { + lines[j] = lines[j+1] - 1 + } + } + + // Ensure monotonicity after last point. + for j := len(lines) - 1; j > 0 && lines[j] == 0; j-- { + size-- + lines[j] = size + } + + if !file.SetLines(lines) { + errorf("SetLines failed: %d", lines) // can't happen + } + return file +} + +func (p *iimporter) pkgAt(off uint64) *types.Package { + if pkg, ok := p.pkgCache[off]; ok { + return pkg + } + path := p.stringAt(off) + errorf("missing package %q in %q", path, p.ipath) + return nil +} + +func (p *iimporter) typAt(off uint64, base *types.Named) types.Type { + if t, ok := p.typCache[off]; ok && canReuse(base, t) { + return t + } + + if off < predeclReserved { + errorf("predeclared type missing from cache: %v", off) + } + + r := &importReader{p: p} + r.declReader.Reset(p.declData[off-predeclReserved:]) + t := r.doType(base) + + if canReuse(base, t) { + p.typCache[off] = t + } + return t +} + +// canReuse reports whether the type rhs on the RHS of the declaration for def +// may be re-used. +// +// Specifically, if def is non-nil and rhs is an interface type with methods, it +// may not be re-used because we have a convention of setting the receiver type +// for interface methods to def. +func canReuse(def *types.Named, rhs types.Type) bool { + if def == nil { + return true + } + iface, _ := types.Unalias(rhs).(*types.Interface) + if iface == nil { + return true + } + // Don't use iface.Empty() here as iface may not be complete. + return iface.NumEmbeddeds() == 0 && iface.NumExplicitMethods() == 0 +} + +type importReader struct { + p *iimporter + declReader bytes.Reader + currPkg *types.Package + prevFile string + prevLine int64 + prevColumn int64 +} + +// markBlack is redefined in iimport_go123.go, to work around golang/go#69912. +// +// If TypeNames are not marked black (in the sense of go/types cycle +// detection), they may be mutated when dot-imported. Fix this by punching a +// hole through the type, when compiling with Go 1.23. (The bug has been fixed +// for 1.24, but the fix was not worth back-porting). +var markBlack = func(name *types.TypeName) {} + +func (r *importReader) obj(name string) { + tag := r.byte() + pos := r.pos() + + switch tag { + case aliasTag, genericAliasTag: + var tparams []*types.TypeParam + if tag == genericAliasTag { + tparams = r.tparamList() + } + typ := r.typ() + obj := aliases.NewAlias(r.p.aliases, pos, r.currPkg, name, typ, tparams) + markBlack(obj) // workaround for golang/go#69912 + r.declare(obj) + + case constTag: + typ, val := r.value() + + r.declare(types.NewConst(pos, r.currPkg, name, typ, val)) + + case funcTag, genericFuncTag: + var tparams []*types.TypeParam + if tag == genericFuncTag { + tparams = r.tparamList() + } + sig := r.signature(nil, nil, tparams) + r.declare(types.NewFunc(pos, r.currPkg, name, sig)) + + case typeTag, genericTypeTag: + // Types can be recursive. We need to setup a stub + // declaration before recursing. + obj := types.NewTypeName(pos, r.currPkg, name, nil) + named := types.NewNamed(obj, nil, nil) + + markBlack(obj) // workaround for golang/go#69912 + + // Declare obj before calling r.tparamList, so the new type name is recognized + // if used in the constraint of one of its own typeparams (see #48280). + r.declare(obj) + if tag == genericTypeTag { + tparams := r.tparamList() + named.SetTypeParams(tparams) + } + + underlying := r.p.typAt(r.uint64(), named).Underlying() + named.SetUnderlying(underlying) + + if !isInterface(underlying) { + for n := r.uint64(); n > 0; n-- { + mpos := r.pos() + mname := r.ident() + recv := r.param() + + // If the receiver has any targs, set those as the + // rparams of the method (since those are the + // typeparams being used in the method sig/body). + _, recvNamed := typesinternal.ReceiverNamed(recv) + targs := recvNamed.TypeArgs() + var rparams []*types.TypeParam + if targs.Len() > 0 { + rparams = make([]*types.TypeParam, targs.Len()) + for i := range rparams { + rparams[i] = types.Unalias(targs.At(i)).(*types.TypeParam) + } + } + msig := r.signature(recv, rparams, nil) + + named.AddMethod(types.NewFunc(mpos, r.currPkg, mname, msig)) + } + } + + case typeParamTag: + // We need to "declare" a typeparam in order to have a name that + // can be referenced recursively (if needed) in the type param's + // bound. + if r.p.version < iexportVersionGenerics { + errorf("unexpected type param type") + } + name0 := tparamName(name) + tn := types.NewTypeName(pos, r.currPkg, name0, nil) + t := types.NewTypeParam(tn, nil) + + // To handle recursive references to the typeparam within its + // bound, save the partial type in tparamIndex before reading the bounds. + id := ident{r.currPkg, name} + r.p.tparamIndex[id] = t + var implicit bool + if r.p.version >= iexportVersionGo1_18 { + implicit = r.bool() + } + constraint := r.typ() + if implicit { + iface, _ := types.Unalias(constraint).(*types.Interface) + if iface == nil { + errorf("non-interface constraint marked implicit") + } + iface.MarkImplicit() + } + // The constraint type may not be complete, if we + // are in the middle of a type recursion involving type + // constraints. So, we defer SetConstraint until we have + // completely set up all types in ImportData. + r.p.later = append(r.p.later, setConstraintArgs{t: t, constraint: constraint}) + + case varTag: + typ := r.typ() + + v := types.NewVar(pos, r.currPkg, name, typ) + typesinternal.SetVarKind(v, typesinternal.PackageVar) + r.declare(v) + + default: + errorf("unexpected tag: %v", tag) + } +} + +func (r *importReader) declare(obj types.Object) { + obj.Pkg().Scope().Insert(obj) +} + +func (r *importReader) value() (typ types.Type, val constant.Value) { + typ = r.typ() + if r.p.version >= iexportVersionGo1_18 { + // TODO: add support for using the kind. + _ = constant.Kind(r.int64()) + } + + switch b := typ.Underlying().(*types.Basic); b.Info() & types.IsConstType { + case types.IsBoolean: + val = constant.MakeBool(r.bool()) + + case types.IsString: + val = constant.MakeString(r.string()) + + case types.IsInteger: + var x big.Int + r.mpint(&x, b) + val = constant.Make(&x) + + case types.IsFloat: + val = r.mpfloat(b) + + case types.IsComplex: + re := r.mpfloat(b) + im := r.mpfloat(b) + val = constant.BinaryOp(re, token.ADD, constant.MakeImag(im)) + + default: + if b.Kind() == types.Invalid { + val = constant.MakeUnknown() + return + } + errorf("unexpected type %v", typ) // panics + panic("unreachable") + } + + return +} + +func intSize(b *types.Basic) (signed bool, maxBytes uint) { + if (b.Info() & types.IsUntyped) != 0 { + return true, 64 + } + + switch b.Kind() { + case types.Float32, types.Complex64: + return true, 3 + case types.Float64, types.Complex128: + return true, 7 + } + + signed = (b.Info() & types.IsUnsigned) == 0 + switch b.Kind() { + case types.Int8, types.Uint8: + maxBytes = 1 + case types.Int16, types.Uint16: + maxBytes = 2 + case types.Int32, types.Uint32: + maxBytes = 4 + default: + maxBytes = 8 + } + + return +} + +func (r *importReader) mpint(x *big.Int, typ *types.Basic) { + signed, maxBytes := intSize(typ) + + maxSmall := 256 - maxBytes + if signed { + maxSmall = 256 - 2*maxBytes + } + if maxBytes == 1 { + maxSmall = 256 + } + + n, _ := r.declReader.ReadByte() + if uint(n) < maxSmall { + v := int64(n) + if signed { + v >>= 1 + if n&1 != 0 { + v = ^v + } + } + x.SetInt64(v) + return + } + + v := -n + if signed { + v = -(n &^ 1) >> 1 + } + if v < 1 || uint(v) > maxBytes { + errorf("weird decoding: %v, %v => %v", n, signed, v) + } + b := make([]byte, v) + io.ReadFull(&r.declReader, b) + x.SetBytes(b) + if signed && n&1 != 0 { + x.Neg(x) + } +} + +func (r *importReader) mpfloat(typ *types.Basic) constant.Value { + var mant big.Int + r.mpint(&mant, typ) + var f big.Float + f.SetInt(&mant) + if f.Sign() != 0 { + f.SetMantExp(&f, int(r.int64())) + } + return constant.Make(&f) +} + +func (r *importReader) ident() string { + return r.string() +} + +func (r *importReader) qualifiedIdent() (*types.Package, string) { + name := r.string() + pkg := r.pkg() + return pkg, name +} + +func (r *importReader) pos() token.Pos { + if r.p.shallow { + // precise offsets are encoded only in shallow mode + return r.posv2() + } + if r.p.version >= iexportVersionPosCol { + r.posv1() + } else { + r.posv0() + } + + if r.prevFile == "" && r.prevLine == 0 && r.prevColumn == 0 { + return token.NoPos + } + return r.p.fake.pos(r.prevFile, int(r.prevLine), int(r.prevColumn)) +} + +func (r *importReader) posv0() { + delta := r.int64() + if delta != deltaNewFile { + r.prevLine += delta + } else if l := r.int64(); l == -1 { + r.prevLine += deltaNewFile + } else { + r.prevFile = r.string() + r.prevLine = l + } +} + +func (r *importReader) posv1() { + delta := r.int64() + r.prevColumn += delta >> 1 + if delta&1 != 0 { + delta = r.int64() + r.prevLine += delta >> 1 + if delta&1 != 0 { + r.prevFile = r.string() + } + } +} + +func (r *importReader) posv2() token.Pos { + file := r.uint64() + if file == 0 { + return token.NoPos + } + tf := r.p.fileAt(file - 1) + return tf.Pos(int(r.uint64())) +} + +func (r *importReader) typ() types.Type { + return r.p.typAt(r.uint64(), nil) +} + +func isInterface(t types.Type) bool { + _, ok := types.Unalias(t).(*types.Interface) + return ok +} + +func (r *importReader) pkg() *types.Package { return r.p.pkgAt(r.uint64()) } +func (r *importReader) string() string { return r.p.stringAt(r.uint64()) } + +func (r *importReader) doType(base *types.Named) (res types.Type) { + k := r.kind() + if debug { + r.p.trace("importing type %d (base: %v)", k, base) + r.p.indent++ + defer func() { + r.p.indent-- + r.p.trace("=> %s", res) + }() + } + switch k { + default: + errorf("unexpected kind tag in %q: %v", r.p.ipath, k) + return nil + + case aliasType, definedType: + pkg, name := r.qualifiedIdent() + r.p.doDecl(pkg, name) + return pkg.Scope().Lookup(name).(*types.TypeName).Type() + case pointerType: + return types.NewPointer(r.typ()) + case sliceType: + return types.NewSlice(r.typ()) + case arrayType: + n := r.uint64() + return types.NewArray(r.typ(), int64(n)) + case chanType: + dir := chanDir(int(r.uint64())) + return types.NewChan(dir, r.typ()) + case mapType: + return types.NewMap(r.typ(), r.typ()) + case signatureType: + r.currPkg = r.pkg() + return r.signature(nil, nil, nil) + + case structType: + r.currPkg = r.pkg() + + fields := make([]*types.Var, r.uint64()) + tags := make([]string, len(fields)) + for i := range fields { + var field *types.Var + if r.p.shallow { + field, _ = r.objectPathObject().(*types.Var) + } + + fpos := r.pos() + fname := r.ident() + ftyp := r.typ() + emb := r.bool() + tag := r.string() + + // Either this is not a shallow import, the field is local, or the + // encoded objectPath failed to produce an object (a bug). + // + // Even in this last, buggy case, fall back on creating a new field. As + // discussed in iexport.go, this is not correct, but mostly works and is + // preferable to failing (for now at least). + if field == nil { + field = types.NewField(fpos, r.currPkg, fname, ftyp, emb) + } + + fields[i] = field + tags[i] = tag + } + return types.NewStruct(fields, tags) + + case interfaceType: + r.currPkg = r.pkg() + + embeddeds := make([]types.Type, r.uint64()) + for i := range embeddeds { + _ = r.pos() + embeddeds[i] = r.typ() + } + + methods := make([]*types.Func, r.uint64()) + for i := range methods { + var method *types.Func + if r.p.shallow { + method, _ = r.objectPathObject().(*types.Func) + } + + mpos := r.pos() + mname := r.ident() + + // TODO(mdempsky): Matches bimport.go, but I + // don't agree with this. + var recv *types.Var + if base != nil { + recv = types.NewVar(token.NoPos, r.currPkg, "", base) + } + msig := r.signature(recv, nil, nil) + + if method == nil { + method = types.NewFunc(mpos, r.currPkg, mname, msig) + } + methods[i] = method + } + + typ := types.NewInterfaceType(methods, embeddeds) + r.p.interfaceList = append(r.p.interfaceList, typ) + return typ + + case typeParamType: + if r.p.version < iexportVersionGenerics { + errorf("unexpected type param type") + } + pkg, name := r.qualifiedIdent() + id := ident{pkg, name} + if t, ok := r.p.tparamIndex[id]; ok { + // We're already in the process of importing this typeparam. + return t + } + // Otherwise, import the definition of the typeparam now. + r.p.doDecl(pkg, name) + return r.p.tparamIndex[id] + + case instanceType: + if r.p.version < iexportVersionGenerics { + errorf("unexpected instantiation type") + } + // pos does not matter for instances: they are positioned on the original + // type. + _ = r.pos() + len := r.uint64() + targs := make([]types.Type, len) + for i := range targs { + targs[i] = r.typ() + } + baseType := r.typ() + // The imported instantiated type doesn't include any methods, so + // we must always use the methods of the base (orig) type. + // TODO provide a non-nil *Environment + t, _ := types.Instantiate(nil, baseType, targs, false) + + // Workaround for golang/go#61561. See the doc for instanceList for details. + r.p.instanceList = append(r.p.instanceList, t) + return t + + case unionType: + if r.p.version < iexportVersionGenerics { + errorf("unexpected instantiation type") + } + terms := make([]*types.Term, r.uint64()) + for i := range terms { + terms[i] = types.NewTerm(r.bool(), r.typ()) + } + return types.NewUnion(terms) + } +} + +func (r *importReader) kind() itag { + return itag(r.uint64()) +} + +// objectPathObject is the inverse of exportWriter.objectPath. +// +// In shallow mode, certain fields and methods may need to be looked up in an +// imported package. See the doc for exportWriter.objectPath for a full +// explanation. +func (r *importReader) objectPathObject() types.Object { + objPath := objectpath.Path(r.string()) + if objPath == "" { + return nil + } + pkg := r.pkg() + obj, err := objectpath.Object(pkg, objPath) + if err != nil { + if r.p.reportf != nil { + r.p.reportf("failed to find object for objectPath %q: %v", objPath, err) + } + } + return obj +} + +func (r *importReader) signature(recv *types.Var, rparams []*types.TypeParam, tparams []*types.TypeParam) *types.Signature { + params := r.paramList() + results := r.paramList() + variadic := params.Len() > 0 && r.bool() + return types.NewSignatureType(recv, rparams, tparams, params, results, variadic) +} + +func (r *importReader) tparamList() []*types.TypeParam { + n := r.uint64() + if n == 0 { + return nil + } + xs := make([]*types.TypeParam, n) + for i := range xs { + // Note: the standard library importer is tolerant of nil types here, + // though would panic in SetTypeParams. + xs[i] = types.Unalias(r.typ()).(*types.TypeParam) + } + return xs +} + +func (r *importReader) paramList() *types.Tuple { + xs := make([]*types.Var, r.uint64()) + for i := range xs { + xs[i] = r.param() + } + return types.NewTuple(xs...) +} + +func (r *importReader) param() *types.Var { + pos := r.pos() + name := r.ident() + typ := r.typ() + return types.NewParam(pos, r.currPkg, name, typ) +} + +func (r *importReader) bool() bool { + return r.uint64() != 0 +} + +func (r *importReader) int64() int64 { + n, err := binary.ReadVarint(&r.declReader) + if err != nil { + errorf("readVarint: %v", err) + } + return n +} + +func (r *importReader) uint64() uint64 { + n, err := binary.ReadUvarint(&r.declReader) + if err != nil { + errorf("readUvarint: %v", err) + } + return n +} + +func (r *importReader) byte() byte { + x, err := r.declReader.ReadByte() + if err != nil { + errorf("declReader.ReadByte: %v", err) + } + return x +} + +type byPath []*types.Package + +func (a byPath) Len() int { return len(a) } +func (a byPath) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a byPath) Less(i, j int) bool { return a[i].Path() < a[j].Path() } diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iimport_go122.go b/vendor/golang.org/x/tools/internal/gcimporter/iimport_go122.go new file mode 100644 index 0000000..7586bfa --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gcimporter/iimport_go122.go @@ -0,0 +1,53 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.22 && !go1.24 + +package gcimporter + +import ( + "go/token" + "go/types" + "unsafe" +) + +// TODO(rfindley): delete this workaround once go1.24 is assured. + +func init() { + // Update markBlack so that it correctly sets the color + // of imported TypeNames. + // + // See the doc comment for markBlack for details. + + type color uint32 + const ( + white color = iota + black + grey + ) + type object struct { + _ *types.Scope + _ token.Pos + _ *types.Package + _ string + _ types.Type + _ uint32 + color_ color + _ token.Pos + } + type typeName struct { + object + } + + // If the size of types.TypeName changes, this will fail to compile. + const delta = int64(unsafe.Sizeof(typeName{})) - int64(unsafe.Sizeof(types.TypeName{})) + var _ [-delta * delta]int + + markBlack = func(obj *types.TypeName) { + type uP = unsafe.Pointer + var ptr *typeName + *(*uP)(uP(&ptr)) = uP(obj) + ptr.color_ = black + } +} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/predeclared.go b/vendor/golang.org/x/tools/internal/gcimporter/predeclared.go new file mode 100644 index 0000000..907c855 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gcimporter/predeclared.go @@ -0,0 +1,91 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gcimporter + +import ( + "go/types" + "sync" +) + +// predecl is a cache for the predeclared types in types.Universe. +// +// Cache a distinct result based on the runtime value of any. +// The pointer value of the any type varies based on GODEBUG settings. +var predeclMu sync.Mutex +var predecl map[types.Type][]types.Type + +func predeclared() []types.Type { + anyt := types.Universe.Lookup("any").Type() + + predeclMu.Lock() + defer predeclMu.Unlock() + + if pre, ok := predecl[anyt]; ok { + return pre + } + + if predecl == nil { + predecl = make(map[types.Type][]types.Type) + } + + decls := []types.Type{ // basic types + types.Typ[types.Bool], + types.Typ[types.Int], + types.Typ[types.Int8], + types.Typ[types.Int16], + types.Typ[types.Int32], + types.Typ[types.Int64], + types.Typ[types.Uint], + types.Typ[types.Uint8], + types.Typ[types.Uint16], + types.Typ[types.Uint32], + types.Typ[types.Uint64], + types.Typ[types.Uintptr], + types.Typ[types.Float32], + types.Typ[types.Float64], + types.Typ[types.Complex64], + types.Typ[types.Complex128], + types.Typ[types.String], + + // basic type aliases + types.Universe.Lookup("byte").Type(), + types.Universe.Lookup("rune").Type(), + + // error + types.Universe.Lookup("error").Type(), + + // untyped types + types.Typ[types.UntypedBool], + types.Typ[types.UntypedInt], + types.Typ[types.UntypedRune], + types.Typ[types.UntypedFloat], + types.Typ[types.UntypedComplex], + types.Typ[types.UntypedString], + types.Typ[types.UntypedNil], + + // package unsafe + types.Typ[types.UnsafePointer], + + // invalid type + types.Typ[types.Invalid], // only appears in packages with errors + + // used internally by gc; never used by this package or in .a files + anyType{}, + + // comparable + types.Universe.Lookup("comparable").Type(), + + // any + anyt, + } + + predecl[anyt] = decls + return decls +} + +type anyType struct{} + +func (t anyType) Underlying() types.Type { return t } +func (t anyType) String() string { return "any" } diff --git a/vendor/golang.org/x/tools/internal/gcimporter/support.go b/vendor/golang.org/x/tools/internal/gcimporter/support.go new file mode 100644 index 0000000..4af810d --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gcimporter/support.go @@ -0,0 +1,30 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gcimporter + +import ( + "bufio" + "io" + "strconv" + "strings" +) + +// Copy of $GOROOT/src/cmd/internal/archive.ReadHeader. +func readArchiveHeader(b *bufio.Reader, name string) int { + // architecture-independent object file output + const HeaderSize = 60 + + var buf [HeaderSize]byte + if _, err := io.ReadFull(b, buf[:]); err != nil { + return -1 + } + aname := strings.Trim(string(buf[0:16]), " ") + if !strings.HasPrefix(aname, name) { + return -1 + } + asize := strings.Trim(string(buf[48:58]), " ") + i, _ := strconv.Atoi(asize) + return i +} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go b/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go new file mode 100644 index 0000000..37b4a39 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go @@ -0,0 +1,761 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Derived from go/internal/gcimporter/ureader.go + +package gcimporter + +import ( + "fmt" + "go/token" + "go/types" + "sort" + + "golang.org/x/tools/internal/aliases" + "golang.org/x/tools/internal/pkgbits" + "golang.org/x/tools/internal/typesinternal" +) + +// A pkgReader holds the shared state for reading a unified IR package +// description. +type pkgReader struct { + pkgbits.PkgDecoder + + fake fakeFileSet + + ctxt *types.Context + imports map[string]*types.Package // previously imported packages, indexed by path + aliases bool // create types.Alias nodes + + // lazily initialized arrays corresponding to the unified IR + // PosBase, Pkg, and Type sections, respectively. + posBases []string // position bases (i.e., file names) + pkgs []*types.Package + typs []types.Type + + // laterFns holds functions that need to be invoked at the end of + // import reading. + laterFns []func() + // laterFors is used in case of 'type A B' to ensure that B is processed before A. + laterFors map[types.Type]int + + // ifaces holds a list of constructed Interfaces, which need to have + // Complete called after importing is done. + ifaces []*types.Interface +} + +// later adds a function to be invoked at the end of import reading. +func (pr *pkgReader) later(fn func()) { + pr.laterFns = append(pr.laterFns, fn) +} + +// See cmd/compile/internal/noder.derivedInfo. +type derivedInfo struct { + idx pkgbits.Index +} + +// See cmd/compile/internal/noder.typeInfo. +type typeInfo struct { + idx pkgbits.Index + derived bool +} + +func UImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) { + if !debug { + defer func() { + if x := recover(); x != nil { + err = fmt.Errorf("internal error in importing %q (%v); please report an issue", path, x) + } + }() + } + + s := string(data) + input := pkgbits.NewPkgDecoder(path, s) + pkg = readUnifiedPackage(fset, nil, imports, input) + return +} + +// laterFor adds a function to be invoked at the end of import reading, and records the type that function is finishing. +func (pr *pkgReader) laterFor(t types.Type, fn func()) { + if pr.laterFors == nil { + pr.laterFors = make(map[types.Type]int) + } + pr.laterFors[t] = len(pr.laterFns) + pr.laterFns = append(pr.laterFns, fn) +} + +// readUnifiedPackage reads a package description from the given +// unified IR export data decoder. +func readUnifiedPackage(fset *token.FileSet, ctxt *types.Context, imports map[string]*types.Package, input pkgbits.PkgDecoder) *types.Package { + pr := pkgReader{ + PkgDecoder: input, + + fake: fakeFileSet{ + fset: fset, + files: make(map[string]*fileInfo), + }, + + ctxt: ctxt, + imports: imports, + aliases: aliases.Enabled(), + + posBases: make([]string, input.NumElems(pkgbits.RelocPosBase)), + pkgs: make([]*types.Package, input.NumElems(pkgbits.RelocPkg)), + typs: make([]types.Type, input.NumElems(pkgbits.RelocType)), + } + defer pr.fake.setLines() + + r := pr.newReader(pkgbits.RelocMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic) + pkg := r.pkg() + if r.Version().Has(pkgbits.HasInit) { + r.Bool() + } + + for i, n := 0, r.Len(); i < n; i++ { + // As if r.obj(), but avoiding the Scope.Lookup call, + // to avoid eager loading of imports. + r.Sync(pkgbits.SyncObject) + if r.Version().Has(pkgbits.DerivedFuncInstance) { + assert(!r.Bool()) + } + r.p.objIdx(r.Reloc(pkgbits.RelocObj)) + assert(r.Len() == 0) + } + + r.Sync(pkgbits.SyncEOF) + + for _, fn := range pr.laterFns { + fn() + } + + for _, iface := range pr.ifaces { + iface.Complete() + } + + // Imports() of pkg are all of the transitive packages that were loaded. + var imps []*types.Package + for _, imp := range pr.pkgs { + if imp != nil && imp != pkg { + imps = append(imps, imp) + } + } + sort.Sort(byPath(imps)) + pkg.SetImports(imps) + + pkg.MarkComplete() + return pkg +} + +// A reader holds the state for reading a single unified IR element +// within a package. +type reader struct { + pkgbits.Decoder + + p *pkgReader + + dict *readerDict +} + +// A readerDict holds the state for type parameters that parameterize +// the current unified IR element. +type readerDict struct { + // bounds is a slice of typeInfos corresponding to the underlying + // bounds of the element's type parameters. + bounds []typeInfo + + // tparams is a slice of the constructed TypeParams for the element. + tparams []*types.TypeParam + + // derived is a slice of types derived from tparams, which may be + // instantiated while reading the current element. + derived []derivedInfo + derivedTypes []types.Type // lazily instantiated from derived +} + +func (pr *pkgReader) newReader(k pkgbits.RelocKind, idx pkgbits.Index, marker pkgbits.SyncMarker) *reader { + return &reader{ + Decoder: pr.NewDecoder(k, idx, marker), + p: pr, + } +} + +func (pr *pkgReader) tempReader(k pkgbits.RelocKind, idx pkgbits.Index, marker pkgbits.SyncMarker) *reader { + return &reader{ + Decoder: pr.TempDecoder(k, idx, marker), + p: pr, + } +} + +func (pr *pkgReader) retireReader(r *reader) { + pr.RetireDecoder(&r.Decoder) +} + +// @@@ Positions + +func (r *reader) pos() token.Pos { + r.Sync(pkgbits.SyncPos) + if !r.Bool() { + return token.NoPos + } + + // TODO(mdempsky): Delta encoding. + posBase := r.posBase() + line := r.Uint() + col := r.Uint() + return r.p.fake.pos(posBase, int(line), int(col)) +} + +func (r *reader) posBase() string { + return r.p.posBaseIdx(r.Reloc(pkgbits.RelocPosBase)) +} + +func (pr *pkgReader) posBaseIdx(idx pkgbits.Index) string { + if b := pr.posBases[idx]; b != "" { + return b + } + + var filename string + { + r := pr.tempReader(pkgbits.RelocPosBase, idx, pkgbits.SyncPosBase) + + // Within types2, position bases have a lot more details (e.g., + // keeping track of where //line directives appeared exactly). + // + // For go/types, we just track the file name. + + filename = r.String() + + if r.Bool() { // file base + // Was: "b = token.NewTrimmedFileBase(filename, true)" + } else { // line base + pos := r.pos() + line := r.Uint() + col := r.Uint() + + // Was: "b = token.NewLineBase(pos, filename, true, line, col)" + _, _, _ = pos, line, col + } + pr.retireReader(r) + } + b := filename + pr.posBases[idx] = b + return b +} + +// @@@ Packages + +func (r *reader) pkg() *types.Package { + r.Sync(pkgbits.SyncPkg) + return r.p.pkgIdx(r.Reloc(pkgbits.RelocPkg)) +} + +func (pr *pkgReader) pkgIdx(idx pkgbits.Index) *types.Package { + // TODO(mdempsky): Consider using some non-nil pointer to indicate + // the universe scope, so we don't need to keep re-reading it. + if pkg := pr.pkgs[idx]; pkg != nil { + return pkg + } + + pkg := pr.newReader(pkgbits.RelocPkg, idx, pkgbits.SyncPkgDef).doPkg() + pr.pkgs[idx] = pkg + return pkg +} + +func (r *reader) doPkg() *types.Package { + path := r.String() + switch path { + // cmd/compile emits path="main" for main packages because + // that's the linker symbol prefix it used; but we need + // the package's path as it would be reported by go list, + // hence "main" below. + // See test at go/packages.TestMainPackagePathInModeTypes. + case "", "main": + path = r.p.PkgPath() + case "builtin": + return nil // universe + case "unsafe": + return types.Unsafe + } + + if pkg := r.p.imports[path]; pkg != nil { + return pkg + } + + name := r.String() + + pkg := types.NewPackage(path, name) + r.p.imports[path] = pkg + + return pkg +} + +// @@@ Types + +func (r *reader) typ() types.Type { + return r.p.typIdx(r.typInfo(), r.dict) +} + +func (r *reader) typInfo() typeInfo { + r.Sync(pkgbits.SyncType) + if r.Bool() { + return typeInfo{idx: pkgbits.Index(r.Len()), derived: true} + } + return typeInfo{idx: r.Reloc(pkgbits.RelocType), derived: false} +} + +func (pr *pkgReader) typIdx(info typeInfo, dict *readerDict) types.Type { + idx := info.idx + var where *types.Type + if info.derived { + where = &dict.derivedTypes[idx] + idx = dict.derived[idx].idx + } else { + where = &pr.typs[idx] + } + + if typ := *where; typ != nil { + return typ + } + + var typ types.Type + { + r := pr.tempReader(pkgbits.RelocType, idx, pkgbits.SyncTypeIdx) + r.dict = dict + + typ = r.doTyp() + assert(typ != nil) + pr.retireReader(r) + } + // See comment in pkgReader.typIdx explaining how this happens. + if prev := *where; prev != nil { + return prev + } + + *where = typ + return typ +} + +func (r *reader) doTyp() (res types.Type) { + switch tag := pkgbits.CodeType(r.Code(pkgbits.SyncType)); tag { + default: + errorf("unhandled type tag: %v", tag) + panic("unreachable") + + case pkgbits.TypeBasic: + return types.Typ[r.Len()] + + case pkgbits.TypeNamed: + obj, targs := r.obj() + name := obj.(*types.TypeName) + if len(targs) != 0 { + t, _ := types.Instantiate(r.p.ctxt, name.Type(), targs, false) + return t + } + return name.Type() + + case pkgbits.TypeTypeParam: + return r.dict.tparams[r.Len()] + + case pkgbits.TypeArray: + len := int64(r.Uint64()) + return types.NewArray(r.typ(), len) + case pkgbits.TypeChan: + dir := types.ChanDir(r.Len()) + return types.NewChan(dir, r.typ()) + case pkgbits.TypeMap: + return types.NewMap(r.typ(), r.typ()) + case pkgbits.TypePointer: + return types.NewPointer(r.typ()) + case pkgbits.TypeSignature: + return r.signature(nil, nil, nil) + case pkgbits.TypeSlice: + return types.NewSlice(r.typ()) + case pkgbits.TypeStruct: + return r.structType() + case pkgbits.TypeInterface: + return r.interfaceType() + case pkgbits.TypeUnion: + return r.unionType() + } +} + +func (r *reader) structType() *types.Struct { + fields := make([]*types.Var, r.Len()) + var tags []string + for i := range fields { + pos := r.pos() + pkg, name := r.selector() + ftyp := r.typ() + tag := r.String() + embedded := r.Bool() + + fields[i] = types.NewField(pos, pkg, name, ftyp, embedded) + if tag != "" { + for len(tags) < i { + tags = append(tags, "") + } + tags = append(tags, tag) + } + } + return types.NewStruct(fields, tags) +} + +func (r *reader) unionType() *types.Union { + terms := make([]*types.Term, r.Len()) + for i := range terms { + terms[i] = types.NewTerm(r.Bool(), r.typ()) + } + return types.NewUnion(terms) +} + +func (r *reader) interfaceType() *types.Interface { + methods := make([]*types.Func, r.Len()) + embeddeds := make([]types.Type, r.Len()) + implicit := len(methods) == 0 && len(embeddeds) == 1 && r.Bool() + + for i := range methods { + pos := r.pos() + pkg, name := r.selector() + mtyp := r.signature(nil, nil, nil) + methods[i] = types.NewFunc(pos, pkg, name, mtyp) + } + + for i := range embeddeds { + embeddeds[i] = r.typ() + } + + iface := types.NewInterfaceType(methods, embeddeds) + if implicit { + iface.MarkImplicit() + } + + // We need to call iface.Complete(), but if there are any embedded + // defined types, then we may not have set their underlying + // interface type yet. So we need to defer calling Complete until + // after we've called SetUnderlying everywhere. + // + // TODO(mdempsky): After CL 424876 lands, it should be safe to call + // iface.Complete() immediately. + r.p.ifaces = append(r.p.ifaces, iface) + + return iface +} + +func (r *reader) signature(recv *types.Var, rtparams, tparams []*types.TypeParam) *types.Signature { + r.Sync(pkgbits.SyncSignature) + + params := r.params() + results := r.params() + variadic := r.Bool() + + return types.NewSignatureType(recv, rtparams, tparams, params, results, variadic) +} + +func (r *reader) params() *types.Tuple { + r.Sync(pkgbits.SyncParams) + + params := make([]*types.Var, r.Len()) + for i := range params { + params[i] = r.param() + } + + return types.NewTuple(params...) +} + +func (r *reader) param() *types.Var { + r.Sync(pkgbits.SyncParam) + + pos := r.pos() + pkg, name := r.localIdent() + typ := r.typ() + + return types.NewParam(pos, pkg, name, typ) +} + +// @@@ Objects + +func (r *reader) obj() (types.Object, []types.Type) { + r.Sync(pkgbits.SyncObject) + + if r.Version().Has(pkgbits.DerivedFuncInstance) { + assert(!r.Bool()) + } + + pkg, name := r.p.objIdx(r.Reloc(pkgbits.RelocObj)) + obj := pkgScope(pkg).Lookup(name) + + targs := make([]types.Type, r.Len()) + for i := range targs { + targs[i] = r.typ() + } + + return obj, targs +} + +func (pr *pkgReader) objIdx(idx pkgbits.Index) (*types.Package, string) { + + var objPkg *types.Package + var objName string + var tag pkgbits.CodeObj + { + rname := pr.tempReader(pkgbits.RelocName, idx, pkgbits.SyncObject1) + + objPkg, objName = rname.qualifiedIdent() + assert(objName != "") + + tag = pkgbits.CodeObj(rname.Code(pkgbits.SyncCodeObj)) + pr.retireReader(rname) + } + + if tag == pkgbits.ObjStub { + assert(objPkg == nil || objPkg == types.Unsafe) + return objPkg, objName + } + + // Ignore local types promoted to global scope (#55110). + if _, suffix := splitVargenSuffix(objName); suffix != "" { + return objPkg, objName + } + + if objPkg.Scope().Lookup(objName) == nil { + dict := pr.objDictIdx(idx) + + r := pr.newReader(pkgbits.RelocObj, idx, pkgbits.SyncObject1) + r.dict = dict + + declare := func(obj types.Object) { + objPkg.Scope().Insert(obj) + } + + switch tag { + default: + panic("weird") + + case pkgbits.ObjAlias: + pos := r.pos() + var tparams []*types.TypeParam + if r.Version().Has(pkgbits.AliasTypeParamNames) { + tparams = r.typeParamNames() + } + typ := r.typ() + declare(aliases.NewAlias(r.p.aliases, pos, objPkg, objName, typ, tparams)) + + case pkgbits.ObjConst: + pos := r.pos() + typ := r.typ() + val := r.Value() + declare(types.NewConst(pos, objPkg, objName, typ, val)) + + case pkgbits.ObjFunc: + pos := r.pos() + tparams := r.typeParamNames() + sig := r.signature(nil, nil, tparams) + declare(types.NewFunc(pos, objPkg, objName, sig)) + + case pkgbits.ObjType: + pos := r.pos() + + obj := types.NewTypeName(pos, objPkg, objName, nil) + named := types.NewNamed(obj, nil, nil) + declare(obj) + + named.SetTypeParams(r.typeParamNames()) + + setUnderlying := func(underlying types.Type) { + // If the underlying type is an interface, we need to + // duplicate its methods so we can replace the receiver + // parameter's type (#49906). + if iface, ok := types.Unalias(underlying).(*types.Interface); ok && iface.NumExplicitMethods() != 0 { + methods := make([]*types.Func, iface.NumExplicitMethods()) + for i := range methods { + fn := iface.ExplicitMethod(i) + sig := fn.Type().(*types.Signature) + + recv := types.NewVar(fn.Pos(), fn.Pkg(), "", named) + typesinternal.SetVarKind(recv, typesinternal.RecvVar) + methods[i] = types.NewFunc(fn.Pos(), fn.Pkg(), fn.Name(), types.NewSignatureType(recv, nil, nil, sig.Params(), sig.Results(), sig.Variadic())) + } + + embeds := make([]types.Type, iface.NumEmbeddeds()) + for i := range embeds { + embeds[i] = iface.EmbeddedType(i) + } + + newIface := types.NewInterfaceType(methods, embeds) + r.p.ifaces = append(r.p.ifaces, newIface) + underlying = newIface + } + + named.SetUnderlying(underlying) + } + + // Since go.dev/cl/455279, we can assume rhs.Underlying() will + // always be non-nil. However, to temporarily support users of + // older snapshot releases, we continue to fallback to the old + // behavior for now. + // + // TODO(mdempsky): Remove fallback code and simplify after + // allowing time for snapshot users to upgrade. + rhs := r.typ() + if underlying := rhs.Underlying(); underlying != nil { + setUnderlying(underlying) + } else { + pk := r.p + pk.laterFor(named, func() { + // First be sure that the rhs is initialized, if it needs to be initialized. + delete(pk.laterFors, named) // prevent cycles + if i, ok := pk.laterFors[rhs]; ok { + f := pk.laterFns[i] + pk.laterFns[i] = func() {} // function is running now, so replace it with a no-op + f() // initialize RHS + } + setUnderlying(rhs.Underlying()) + }) + } + + for i, n := 0, r.Len(); i < n; i++ { + named.AddMethod(r.method()) + } + + case pkgbits.ObjVar: + pos := r.pos() + typ := r.typ() + v := types.NewVar(pos, objPkg, objName, typ) + typesinternal.SetVarKind(v, typesinternal.PackageVar) + declare(v) + } + } + + return objPkg, objName +} + +func (pr *pkgReader) objDictIdx(idx pkgbits.Index) *readerDict { + + var dict readerDict + + { + r := pr.tempReader(pkgbits.RelocObjDict, idx, pkgbits.SyncObject1) + if implicits := r.Len(); implicits != 0 { + errorf("unexpected object with %v implicit type parameter(s)", implicits) + } + + dict.bounds = make([]typeInfo, r.Len()) + for i := range dict.bounds { + dict.bounds[i] = r.typInfo() + } + + dict.derived = make([]derivedInfo, r.Len()) + dict.derivedTypes = make([]types.Type, len(dict.derived)) + for i := range dict.derived { + dict.derived[i] = derivedInfo{idx: r.Reloc(pkgbits.RelocType)} + if r.Version().Has(pkgbits.DerivedInfoNeeded) { + assert(!r.Bool()) + } + } + + pr.retireReader(r) + } + // function references follow, but reader doesn't need those + + return &dict +} + +func (r *reader) typeParamNames() []*types.TypeParam { + r.Sync(pkgbits.SyncTypeParamNames) + + // Note: This code assumes it only processes objects without + // implement type parameters. This is currently fine, because + // reader is only used to read in exported declarations, which are + // always package scoped. + + if len(r.dict.bounds) == 0 { + return nil + } + + // Careful: Type parameter lists may have cycles. To allow for this, + // we construct the type parameter list in two passes: first we + // create all the TypeNames and TypeParams, then we construct and + // set the bound type. + + r.dict.tparams = make([]*types.TypeParam, len(r.dict.bounds)) + for i := range r.dict.bounds { + pos := r.pos() + pkg, name := r.localIdent() + + tname := types.NewTypeName(pos, pkg, name, nil) + r.dict.tparams[i] = types.NewTypeParam(tname, nil) + } + + typs := make([]types.Type, len(r.dict.bounds)) + for i, bound := range r.dict.bounds { + typs[i] = r.p.typIdx(bound, r.dict) + } + + // TODO(mdempsky): This is subtle, elaborate further. + // + // We have to save tparams outside of the closure, because + // typeParamNames() can be called multiple times with the same + // dictionary instance. + // + // Also, this needs to happen later to make sure SetUnderlying has + // been called. + // + // TODO(mdempsky): Is it safe to have a single "later" slice or do + // we need to have multiple passes? See comments on CL 386002 and + // go.dev/issue/52104. + tparams := r.dict.tparams + r.p.later(func() { + for i, typ := range typs { + tparams[i].SetConstraint(typ) + } + }) + + return r.dict.tparams +} + +func (r *reader) method() *types.Func { + r.Sync(pkgbits.SyncMethod) + pos := r.pos() + pkg, name := r.selector() + + rparams := r.typeParamNames() + sig := r.signature(r.param(), rparams, nil) + + _ = r.pos() // TODO(mdempsky): Remove; this is a hacker for linker.go. + return types.NewFunc(pos, pkg, name, sig) +} + +func (r *reader) qualifiedIdent() (*types.Package, string) { return r.ident(pkgbits.SyncSym) } +func (r *reader) localIdent() (*types.Package, string) { return r.ident(pkgbits.SyncLocalIdent) } +func (r *reader) selector() (*types.Package, string) { return r.ident(pkgbits.SyncSelector) } + +func (r *reader) ident(marker pkgbits.SyncMarker) (*types.Package, string) { + r.Sync(marker) + return r.pkg(), r.String() +} + +// pkgScope returns pkg.Scope(). +// If pkg is nil, it returns types.Universe instead. +// +// TODO(mdempsky): Remove after x/tools can depend on Go 1.19. +func pkgScope(pkg *types.Package) *types.Scope { + if pkg != nil { + return pkg.Scope() + } + return types.Universe +} + +// See cmd/compile/internal/types.SplitVargenSuffix. +func splitVargenSuffix(name string) (base, suffix string) { + i := len(name) + for i > 0 && name[i-1] >= '0' && name[i-1] <= '9' { + i-- + } + const dot = "·" + if i >= len(dot) && name[i-len(dot):i] == dot { + i -= len(dot) + return name[:i], name[i:] + } + return name, "" +} diff --git a/vendor/golang.org/x/tools/internal/gocommand/invoke.go b/vendor/golang.org/x/tools/internal/gocommand/invoke.go new file mode 100644 index 0000000..5872120 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gocommand/invoke.go @@ -0,0 +1,567 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package gocommand is a helper for calling the go command. +package gocommand + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "log" + "os" + "os/exec" + "path/filepath" + "regexp" + "runtime" + "strconv" + "strings" + "sync" + "time" + + "golang.org/x/tools/internal/event" + "golang.org/x/tools/internal/event/keys" + "golang.org/x/tools/internal/event/label" +) + +// A Runner will run go command invocations and serialize +// them if it sees a concurrency error. +type Runner struct { + // once guards the runner initialization. + once sync.Once + + // inFlight tracks available workers. + inFlight chan struct{} + + // serialized guards the ability to run a go command serially, + // to avoid deadlocks when claiming workers. + serialized chan struct{} +} + +const maxInFlight = 10 + +func (runner *Runner) initialize() { + runner.once.Do(func() { + runner.inFlight = make(chan struct{}, maxInFlight) + runner.serialized = make(chan struct{}, 1) + }) +} + +// 1.13: go: updates to go.mod needed, but contents have changed +// 1.14: go: updating go.mod: existing contents have changed since last read +var modConcurrencyError = regexp.MustCompile(`go:.*go.mod.*contents have changed`) + +// event keys for go command invocations +var ( + verb = keys.NewString("verb", "go command verb") + directory = keys.NewString("directory", "") +) + +func invLabels(inv Invocation) []label.Label { + return []label.Label{verb.Of(inv.Verb), directory.Of(inv.WorkingDir)} +} + +// Run is a convenience wrapper around RunRaw. +// It returns only stdout and a "friendly" error. +func (runner *Runner) Run(ctx context.Context, inv Invocation) (*bytes.Buffer, error) { + ctx, done := event.Start(ctx, "gocommand.Runner.Run", invLabels(inv)...) + defer done() + + stdout, _, friendly, _ := runner.RunRaw(ctx, inv) + return stdout, friendly +} + +// RunPiped runs the invocation serially, always waiting for any concurrent +// invocations to complete first. +func (runner *Runner) RunPiped(ctx context.Context, inv Invocation, stdout, stderr io.Writer) error { + ctx, done := event.Start(ctx, "gocommand.Runner.RunPiped", invLabels(inv)...) + defer done() + + _, err := runner.runPiped(ctx, inv, stdout, stderr) + return err +} + +// RunRaw runs the invocation, serializing requests only if they fight over +// go.mod changes. +// Postcondition: both error results have same nilness. +func (runner *Runner) RunRaw(ctx context.Context, inv Invocation) (*bytes.Buffer, *bytes.Buffer, error, error) { + ctx, done := event.Start(ctx, "gocommand.Runner.RunRaw", invLabels(inv)...) + defer done() + // Make sure the runner is always initialized. + runner.initialize() + + // First, try to run the go command concurrently. + stdout, stderr, friendlyErr, err := runner.runConcurrent(ctx, inv) + + // If we encounter a load concurrency error, we need to retry serially. + if friendlyErr != nil && modConcurrencyError.MatchString(friendlyErr.Error()) { + event.Error(ctx, "Load concurrency error, will retry serially", err) + + // Run serially by calling runPiped. + stdout.Reset() + stderr.Reset() + friendlyErr, err = runner.runPiped(ctx, inv, stdout, stderr) + } + + return stdout, stderr, friendlyErr, err +} + +// Postcondition: both error results have same nilness. +func (runner *Runner) runConcurrent(ctx context.Context, inv Invocation) (*bytes.Buffer, *bytes.Buffer, error, error) { + // Wait for 1 worker to become available. + select { + case <-ctx.Done(): + return nil, nil, ctx.Err(), ctx.Err() + case runner.inFlight <- struct{}{}: + defer func() { <-runner.inFlight }() + } + + stdout, stderr := &bytes.Buffer{}, &bytes.Buffer{} + friendlyErr, err := inv.runWithFriendlyError(ctx, stdout, stderr) + return stdout, stderr, friendlyErr, err +} + +// Postcondition: both error results have same nilness. +func (runner *Runner) runPiped(ctx context.Context, inv Invocation, stdout, stderr io.Writer) (error, error) { + // Make sure the runner is always initialized. + runner.initialize() + + // Acquire the serialization lock. This avoids deadlocks between two + // runPiped commands. + select { + case <-ctx.Done(): + return ctx.Err(), ctx.Err() + case runner.serialized <- struct{}{}: + defer func() { <-runner.serialized }() + } + + // Wait for all in-progress go commands to return before proceeding, + // to avoid load concurrency errors. + for range maxInFlight { + select { + case <-ctx.Done(): + return ctx.Err(), ctx.Err() + case runner.inFlight <- struct{}{}: + // Make sure we always "return" any workers we took. + defer func() { <-runner.inFlight }() + } + } + + return inv.runWithFriendlyError(ctx, stdout, stderr) +} + +// An Invocation represents a call to the go command. +type Invocation struct { + Verb string + Args []string + BuildFlags []string + + // If ModFlag is set, the go command is invoked with -mod=ModFlag. + // TODO(rfindley): remove, in favor of Args. + ModFlag string + + // If ModFile is set, the go command is invoked with -modfile=ModFile. + // TODO(rfindley): remove, in favor of Args. + ModFile string + + // Overlay is the name of the JSON overlay file that describes + // unsaved editor buffers; see [WriteOverlays]. + // If set, the go command is invoked with -overlay=Overlay. + // TODO(rfindley): remove, in favor of Args. + Overlay string + + // If CleanEnv is set, the invocation will run only with the environment + // in Env, not starting with os.Environ. + CleanEnv bool + Env []string + WorkingDir string + Logf func(format string, args ...any) +} + +// Postcondition: both error results have same nilness. +func (i *Invocation) runWithFriendlyError(ctx context.Context, stdout, stderr io.Writer) (friendlyError error, rawError error) { + rawError = i.run(ctx, stdout, stderr) + if rawError != nil { + friendlyError = rawError + // Check for 'go' executable not being found. + if ee, ok := rawError.(*exec.Error); ok && ee.Err == exec.ErrNotFound { + friendlyError = fmt.Errorf("go command required, not found: %v", ee) + } + if ctx.Err() != nil { + friendlyError = ctx.Err() + } + friendlyError = fmt.Errorf("err: %v: stderr: %s", friendlyError, stderr) + } + return +} + +// logf logs if i.Logf is non-nil. +func (i *Invocation) logf(format string, args ...any) { + if i.Logf != nil { + i.Logf(format, args...) + } +} + +func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error { + goArgs := []string{i.Verb} + + appendModFile := func() { + if i.ModFile != "" { + goArgs = append(goArgs, "-modfile="+i.ModFile) + } + } + appendModFlag := func() { + if i.ModFlag != "" { + goArgs = append(goArgs, "-mod="+i.ModFlag) + } + } + appendOverlayFlag := func() { + if i.Overlay != "" { + goArgs = append(goArgs, "-overlay="+i.Overlay) + } + } + + switch i.Verb { + case "env", "version": + goArgs = append(goArgs, i.Args...) + case "mod": + // mod needs the sub-verb before flags. + goArgs = append(goArgs, i.Args[0]) + appendModFile() + goArgs = append(goArgs, i.Args[1:]...) + case "get": + goArgs = append(goArgs, i.BuildFlags...) + appendModFile() + goArgs = append(goArgs, i.Args...) + + default: // notably list and build. + goArgs = append(goArgs, i.BuildFlags...) + appendModFile() + appendModFlag() + appendOverlayFlag() + goArgs = append(goArgs, i.Args...) + } + cmd := exec.Command("go", goArgs...) + cmd.Stdout = stdout + cmd.Stderr = stderr + + // https://go.dev/issue/59541: don't wait forever copying stderr + // after the command has exited. + // After CL 484741 we copy stdout manually, so we we'll stop reading that as + // soon as ctx is done. However, we also don't want to wait around forever + // for stderr. Give a much-longer-than-reasonable delay and then assume that + // something has wedged in the kernel or runtime. + cmd.WaitDelay = 30 * time.Second + + // The cwd gets resolved to the real path. On Darwin, where + // /tmp is a symlink, this breaks anything that expects the + // working directory to keep the original path, including the + // go command when dealing with modules. + // + // os.Getwd has a special feature where if the cwd and the PWD + // are the same node then it trusts the PWD, so by setting it + // in the env for the child process we fix up all the paths + // returned by the go command. + if !i.CleanEnv { + cmd.Env = os.Environ() + } + cmd.Env = append(cmd.Env, i.Env...) + if i.WorkingDir != "" { + cmd.Env = append(cmd.Env, "PWD="+i.WorkingDir) + cmd.Dir = i.WorkingDir + } + + debugStr := cmdDebugStr(cmd) + i.logf("starting %v", debugStr) + start := time.Now() + defer func() { + i.logf("%s for %v", time.Since(start), debugStr) + }() + + return runCmdContext(ctx, cmd) +} + +// DebugHangingGoCommands may be set by tests to enable additional +// instrumentation (including panics) for debugging hanging Go commands. +// +// See golang/go#54461 for details. +var DebugHangingGoCommands = false + +// runCmdContext is like exec.CommandContext except it sends os.Interrupt +// before os.Kill. +func runCmdContext(ctx context.Context, cmd *exec.Cmd) (err error) { + // If cmd.Stdout is not an *os.File, the exec package will create a pipe and + // copy it to the Writer in a goroutine until the process has finished and + // either the pipe reaches EOF or command's WaitDelay expires. + // + // However, the output from 'go list' can be quite large, and we don't want to + // keep reading (and allocating buffers) if we've already decided we don't + // care about the output. We don't want to wait for the process to finish, and + // we don't wait to wait for the WaitDelay to expire either. + // + // Instead, if cmd.Stdout requires a copying goroutine we explicitly replace + // it with a pipe (which is an *os.File), which we can close in order to stop + // copying output as soon as we realize we don't care about it. + var stdoutW *os.File + if cmd.Stdout != nil { + if _, ok := cmd.Stdout.(*os.File); !ok { + var stdoutR *os.File + stdoutR, stdoutW, err = os.Pipe() + if err != nil { + return err + } + prevStdout := cmd.Stdout + cmd.Stdout = stdoutW + + stdoutErr := make(chan error, 1) + go func() { + _, err := io.Copy(prevStdout, stdoutR) + if err != nil { + err = fmt.Errorf("copying stdout: %w", err) + } + stdoutErr <- err + }() + defer func() { + // We started a goroutine to copy a stdout pipe. + // Wait for it to finish, or terminate it if need be. + var err2 error + select { + case err2 = <-stdoutErr: + stdoutR.Close() + case <-ctx.Done(): + stdoutR.Close() + // Per https://pkg.go.dev/os#File.Close, the call to stdoutR.Close + // should cause the Read call in io.Copy to unblock and return + // immediately, but we still need to receive from stdoutErr to confirm + // that it has happened. + <-stdoutErr + err2 = ctx.Err() + } + if err == nil { + err = err2 + } + }() + + // Per https://pkg.go.dev/os/exec#Cmd, “If Stdout and Stderr are the + // same writer, and have a type that can be compared with ==, at most + // one goroutine at a time will call Write.” + // + // Since we're starting a goroutine that writes to cmd.Stdout, we must + // also update cmd.Stderr so that it still holds. + func() { + defer func() { recover() }() + if cmd.Stderr == prevStdout { + cmd.Stderr = cmd.Stdout + } + }() + } + } + + startTime := time.Now() + err = cmd.Start() + if stdoutW != nil { + // The child process has inherited the pipe file, + // so close the copy held in this process. + stdoutW.Close() + stdoutW = nil + } + if err != nil { + return err + } + + resChan := make(chan error, 1) + go func() { + resChan <- cmd.Wait() + }() + + // If we're interested in debugging hanging Go commands, stop waiting after a + // minute and panic with interesting information. + debug := DebugHangingGoCommands + if debug { + timer := time.NewTimer(1 * time.Minute) + defer timer.Stop() + select { + case err := <-resChan: + return err + case <-timer.C: + // HandleHangingGoCommand terminates this process. + // Pass off resChan in case we can collect the command error. + handleHangingGoCommand(startTime, cmd, resChan) + case <-ctx.Done(): + } + } else { + select { + case err := <-resChan: + return err + case <-ctx.Done(): + } + } + + // Cancelled. Interrupt and see if it ends voluntarily. + if err := cmd.Process.Signal(os.Interrupt); err == nil { + // (We used to wait only 1s but this proved + // fragile on loaded builder machines.) + timer := time.NewTimer(5 * time.Second) + defer timer.Stop() + select { + case err := <-resChan: + return err + case <-timer.C: + } + } + + // Didn't shut down in response to interrupt. Kill it hard. + if err := cmd.Process.Kill(); err != nil && !errors.Is(err, os.ErrProcessDone) && debug { + log.Printf("error killing the Go command: %v", err) + } + + return <-resChan +} + +// handleHangingGoCommand outputs debugging information to help diagnose the +// cause of a hanging Go command, and then exits with log.Fatalf. +func handleHangingGoCommand(start time.Time, cmd *exec.Cmd, resChan chan error) { + switch runtime.GOOS { + case "linux", "darwin", "freebsd", "netbsd", "openbsd": + fmt.Fprintln(os.Stderr, `DETECTED A HANGING GO COMMAND + + The gopls test runner has detected a hanging go command. In order to debug + this, the output of ps and lsof/fstat is printed below. + + See golang/go#54461 for more details.`) + + fmt.Fprintln(os.Stderr, "\nps axo ppid,pid,command:") + fmt.Fprintln(os.Stderr, "-------------------------") + psCmd := exec.Command("ps", "axo", "ppid,pid,command") + psCmd.Stdout = os.Stderr + psCmd.Stderr = os.Stderr + if err := psCmd.Run(); err != nil { + log.Printf("Handling hanging Go command: running ps: %v", err) + } + + listFiles := "lsof" + if runtime.GOOS == "freebsd" || runtime.GOOS == "netbsd" { + listFiles = "fstat" + } + + fmt.Fprintln(os.Stderr, "\n"+listFiles+":") + fmt.Fprintln(os.Stderr, "-----") + listFilesCmd := exec.Command(listFiles) + listFilesCmd.Stdout = os.Stderr + listFilesCmd.Stderr = os.Stderr + if err := listFilesCmd.Run(); err != nil { + log.Printf("Handling hanging Go command: running %s: %v", listFiles, err) + } + // Try to extract information about the slow go process by issuing a SIGQUIT. + if err := cmd.Process.Signal(sigStuckProcess); err == nil { + select { + case err := <-resChan: + stderr := "not a bytes.Buffer" + if buf, _ := cmd.Stderr.(*bytes.Buffer); buf != nil { + stderr = buf.String() + } + log.Printf("Quit hanging go command:\n\terr:%v\n\tstderr:\n%v\n\n", err, stderr) + case <-time.After(5 * time.Second): + } + } else { + log.Printf("Sending signal %d to hanging go command: %v", sigStuckProcess, err) + } + } + log.Fatalf("detected hanging go command (golang/go#54461); waited %s\n\tcommand:%s\n\tpid:%d", time.Since(start), cmd, cmd.Process.Pid) +} + +func cmdDebugStr(cmd *exec.Cmd) string { + env := make(map[string]string) + for _, kv := range cmd.Env { + split := strings.SplitN(kv, "=", 2) + if len(split) == 2 { + k, v := split[0], split[1] + env[k] = v + } + } + + var args []string + for _, arg := range cmd.Args { + quoted := strconv.Quote(arg) + if quoted[1:len(quoted)-1] != arg || strings.Contains(arg, " ") { + args = append(args, quoted) + } else { + args = append(args, arg) + } + } + return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v GOPROXY=%v PWD=%v %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["GOPROXY"], env["PWD"], strings.Join(args, " ")) +} + +// WriteOverlays writes each value in the overlay (see the Overlay +// field of go/packages.Config) to a temporary file and returns the name +// of a JSON file describing the mapping that is suitable for the "go +// list -overlay" flag. +// +// On success, the caller must call the cleanup function exactly once +// when the files are no longer needed. +func WriteOverlays(overlay map[string][]byte) (filename string, cleanup func(), err error) { + // Do nothing if there are no overlays in the config. + if len(overlay) == 0 { + return "", func() {}, nil + } + + dir, err := os.MkdirTemp("", "gocommand-*") + if err != nil { + return "", nil, err + } + + // The caller must clean up this directory, + // unless this function returns an error. + // (The cleanup operand of each return + // statement below is ignored.) + defer func() { + cleanup = func() { + os.RemoveAll(dir) + } + if err != nil { + cleanup() + cleanup = nil + } + }() + + // Write each map entry to a temporary file. + overlays := make(map[string]string) + for k, v := range overlay { + // Use a unique basename for each file (001-foo.go), + // to avoid creating nested directories. + base := fmt.Sprintf("%d-%s", 1+len(overlays), filepath.Base(k)) + filename := filepath.Join(dir, base) + err := os.WriteFile(filename, v, 0666) + if err != nil { + return "", nil, err + } + overlays[k] = filename + } + + // Write the JSON overlay file that maps logical file names to temp files. + // + // OverlayJSON is the format overlay files are expected to be in. + // The Replace map maps from overlaid paths to replacement paths: + // the Go command will forward all reads trying to open + // each overlaid path to its replacement path, or consider the overlaid + // path not to exist if the replacement path is empty. + // + // From golang/go#39958. + type OverlayJSON struct { + Replace map[string]string `json:"replace,omitempty"` + } + b, err := json.Marshal(OverlayJSON{Replace: overlays}) + if err != nil { + return "", nil, err + } + filename = filepath.Join(dir, "overlay.json") + if err := os.WriteFile(filename, b, 0666); err != nil { + return "", nil, err + } + + return filename, nil, nil +} diff --git a/vendor/golang.org/x/tools/internal/gocommand/invoke_notunix.go b/vendor/golang.org/x/tools/internal/gocommand/invoke_notunix.go new file mode 100644 index 0000000..469c648 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gocommand/invoke_notunix.go @@ -0,0 +1,13 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !unix + +package gocommand + +import "os" + +// sigStuckProcess is the signal to send to kill a hanging subprocess. +// On Unix we send SIGQUIT, but on non-Unix we only have os.Kill. +var sigStuckProcess = os.Kill diff --git a/vendor/golang.org/x/tools/internal/gocommand/invoke_unix.go b/vendor/golang.org/x/tools/internal/gocommand/invoke_unix.go new file mode 100644 index 0000000..169d37c --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gocommand/invoke_unix.go @@ -0,0 +1,13 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build unix + +package gocommand + +import "syscall" + +// Sigstuckprocess is the signal to send to kill a hanging subprocess. +// Send SIGQUIT to get a stack trace. +var sigStuckProcess = syscall.SIGQUIT diff --git a/vendor/golang.org/x/tools/internal/gocommand/vendor.go b/vendor/golang.org/x/tools/internal/gocommand/vendor.go new file mode 100644 index 0000000..e38d1fb --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gocommand/vendor.go @@ -0,0 +1,163 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gocommand + +import ( + "bytes" + "context" + "fmt" + "os" + "path/filepath" + "regexp" + "strings" + "time" + + "golang.org/x/mod/semver" +) + +// ModuleJSON holds information about a module. +type ModuleJSON struct { + Path string // module path + Version string // module version + Versions []string // available module versions (with -versions) + Replace *ModuleJSON // replaced by this module + Time *time.Time // time version was created + Update *ModuleJSON // available update, if any (with -u) + Main bool // is this the main module? + Indirect bool // is this module only an indirect dependency of main module? + Dir string // directory holding files for this module, if any + GoMod string // path to go.mod file used when loading this module, if any + GoVersion string // go version used in module +} + +var modFlagRegexp = regexp.MustCompile(`-mod[ =](\w+)`) + +// VendorEnabled reports whether vendoring is enabled. It takes a *Runner to execute Go commands +// with the supplied context.Context and Invocation. The Invocation can contain pre-defined fields, +// of which only Verb and Args are modified to run the appropriate Go command. +// Inspired by setDefaultBuildMod in modload/init.go +func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (bool, *ModuleJSON, error) { + mainMod, go114, err := getMainModuleAnd114(ctx, inv, r) + if err != nil { + return false, nil, err + } + + // We check the GOFLAGS to see if there is anything overridden or not. + inv.Verb = "env" + inv.Args = []string{"GOFLAGS"} + stdout, err := r.Run(ctx, inv) + if err != nil { + return false, nil, err + } + goflags := string(bytes.TrimSpace(stdout.Bytes())) + matches := modFlagRegexp.FindStringSubmatch(goflags) + var modFlag string + if len(matches) != 0 { + modFlag = matches[1] + } + // Don't override an explicit '-mod=' argument. + if modFlag == "vendor" { + return true, mainMod, nil + } else if modFlag != "" { + return false, nil, nil + } + if mainMod == nil || !go114 { + return false, nil, nil + } + // Check 1.14's automatic vendor mode. + if fi, err := os.Stat(filepath.Join(mainMod.Dir, "vendor")); err == nil && fi.IsDir() { + if mainMod.GoVersion != "" && semver.Compare("v"+mainMod.GoVersion, "v1.14") >= 0 { + // The Go version is at least 1.14, and a vendor directory exists. + // Set -mod=vendor by default. + return true, mainMod, nil + } + } + return false, nil, nil +} + +// getMainModuleAnd114 gets one of the main modules' information and whether the +// go command in use is 1.14+. This is the information needed to figure out +// if vendoring should be enabled. +func getMainModuleAnd114(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, bool, error) { + const format = `{{.Path}} +{{.Dir}} +{{.GoMod}} +{{.GoVersion}} +{{range context.ReleaseTags}}{{if eq . "go1.14"}}{{.}}{{end}}{{end}} +` + inv.Verb = "list" + inv.Args = []string{"-m", "-f", format} + stdout, err := r.Run(ctx, inv) + if err != nil { + return nil, false, err + } + + lines := strings.Split(stdout.String(), "\n") + if len(lines) < 5 { + return nil, false, fmt.Errorf("unexpected stdout: %q", stdout.String()) + } + mod := &ModuleJSON{ + Path: lines[0], + Dir: lines[1], + GoMod: lines[2], + GoVersion: lines[3], + Main: true, + } + return mod, lines[4] == "go1.14", nil +} + +// WorkspaceVendorEnabled reports whether workspace vendoring is enabled. It takes a *Runner to execute Go commands +// with the supplied context.Context and Invocation. The Invocation can contain pre-defined fields, +// of which only Verb and Args are modified to run the appropriate Go command. +// Inspired by setDefaultBuildMod in modload/init.go +func WorkspaceVendorEnabled(ctx context.Context, inv Invocation, r *Runner) (bool, []*ModuleJSON, error) { + inv.Verb = "env" + inv.Args = []string{"GOWORK"} + stdout, err := r.Run(ctx, inv) + if err != nil { + return false, nil, err + } + goWork := string(bytes.TrimSpace(stdout.Bytes())) + if fi, err := os.Stat(filepath.Join(filepath.Dir(goWork), "vendor")); err == nil && fi.IsDir() { + mainMods, err := getWorkspaceMainModules(ctx, inv, r) + if err != nil { + return false, nil, err + } + return true, mainMods, nil + } + return false, nil, nil +} + +// getWorkspaceMainModules gets the main modules' information. +// This is the information needed to figure out if vendoring should be enabled. +func getWorkspaceMainModules(ctx context.Context, inv Invocation, r *Runner) ([]*ModuleJSON, error) { + const format = `{{.Path}} +{{.Dir}} +{{.GoMod}} +{{.GoVersion}} +` + inv.Verb = "list" + inv.Args = []string{"-m", "-f", format} + stdout, err := r.Run(ctx, inv) + if err != nil { + return nil, err + } + + lines := strings.Split(strings.TrimSuffix(stdout.String(), "\n"), "\n") + if len(lines) < 4 { + return nil, fmt.Errorf("unexpected stdout: %q", stdout.String()) + } + mods := make([]*ModuleJSON, 0, len(lines)/4) + for i := 0; i < len(lines); i += 4 { + mods = append(mods, &ModuleJSON{ + Path: lines[i], + Dir: lines[i+1], + GoMod: lines[i+2], + GoVersion: lines[i+3], + Main: true, + }) + } + return mods, nil +} diff --git a/vendor/golang.org/x/tools/internal/gocommand/version.go b/vendor/golang.org/x/tools/internal/gocommand/version.go new file mode 100644 index 0000000..446c584 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gocommand/version.go @@ -0,0 +1,71 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gocommand + +import ( + "context" + "fmt" + "regexp" + "strings" +) + +// GoVersion reports the minor version number of the highest release +// tag built into the go command on the PATH. +// +// Note that this may be higher than the version of the go tool used +// to build this application, and thus the versions of the standard +// go/{scanner,parser,ast,types} packages that are linked into it. +// In that case, callers should either downgrade to the version of +// go used to build the application, or report an error that the +// application is too old to use the go command on the PATH. +func GoVersion(ctx context.Context, inv Invocation, r *Runner) (int, error) { + inv.Verb = "list" + inv.Args = []string{"-e", "-f", `{{context.ReleaseTags}}`, `--`, `unsafe`} + inv.BuildFlags = nil // This is not a build command. + inv.ModFlag = "" + inv.ModFile = "" + inv.Env = append(inv.Env[:len(inv.Env):len(inv.Env)], "GO111MODULE=off") + + stdoutBytes, err := r.Run(ctx, inv) + if err != nil { + return 0, err + } + stdout := stdoutBytes.String() + if len(stdout) < 3 { + return 0, fmt.Errorf("bad ReleaseTags output: %q", stdout) + } + // Split up "[go1.1 go1.15]" and return highest go1.X value. + tags := strings.Fields(stdout[1 : len(stdout)-2]) + for i := len(tags) - 1; i >= 0; i-- { + var version int + if _, err := fmt.Sscanf(tags[i], "go1.%d", &version); err != nil { + continue + } + return version, nil + } + return 0, fmt.Errorf("no parseable ReleaseTags in %v", tags) +} + +// GoVersionOutput returns the complete output of the go version command. +func GoVersionOutput(ctx context.Context, inv Invocation, r *Runner) (string, error) { + inv.Verb = "version" + goVersion, err := r.Run(ctx, inv) + if err != nil { + return "", err + } + return goVersion.String(), nil +} + +// ParseGoVersionOutput extracts the Go version string +// from the output of the "go version" command. +// Given an unrecognized form, it returns an empty string. +func ParseGoVersionOutput(data string) string { + re := regexp.MustCompile(`^go version (go\S+|devel \S+)`) + m := re.FindStringSubmatch(data) + if len(m) != 2 { + return "" // unrecognized version + } + return m[1] +} diff --git a/vendor/golang.org/x/tools/internal/gopathwalk/walk.go b/vendor/golang.org/x/tools/internal/gopathwalk/walk.go new file mode 100644 index 0000000..5252144 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/gopathwalk/walk.go @@ -0,0 +1,336 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package gopathwalk is like filepath.Walk but specialized for finding Go +// packages, particularly in $GOPATH and $GOROOT. +package gopathwalk + +import ( + "bufio" + "bytes" + "io" + "io/fs" + "os" + "path/filepath" + "runtime" + "slices" + "strings" + "sync" + "time" +) + +// Options controls the behavior of a Walk call. +type Options struct { + // If Logf is non-nil, debug logging is enabled through this function. + Logf func(format string, args ...any) + + // Search module caches. Also disables legacy goimports ignore rules. + ModulesEnabled bool + + // Maximum number of concurrent calls to user-provided callbacks, + // or 0 for GOMAXPROCS. + Concurrency int +} + +// RootType indicates the type of a Root. +type RootType int + +const ( + RootUnknown RootType = iota + RootGOROOT + RootGOPATH + RootCurrentModule + RootModuleCache + RootOther +) + +// A Root is a starting point for a Walk. +type Root struct { + Path string + Type RootType +} + +// Walk concurrently walks Go source directories ($GOROOT, $GOPATH, etc) to find packages. +// +// For each package found, add will be called with the absolute +// paths of the containing source directory and the package directory. +// +// Unlike filepath.WalkDir, Walk follows symbolic links +// (while guarding against cycles). +func Walk(roots []Root, add func(root Root, dir string), opts Options) { + WalkSkip(roots, add, func(Root, string) bool { return false }, opts) +} + +// WalkSkip concurrently walks Go source directories ($GOROOT, $GOPATH, etc) to +// find packages. +// +// For each package found, add will be called with the absolute +// paths of the containing source directory and the package directory. +// For each directory that will be scanned, skip will be called +// with the absolute paths of the containing source directory and the directory. +// If skip returns false on a directory it will be processed. +// +// Unlike filepath.WalkDir, WalkSkip follows symbolic links +// (while guarding against cycles). +func WalkSkip(roots []Root, add func(root Root, dir string), skip func(root Root, dir string) bool, opts Options) { + for _, root := range roots { + walkDir(root, add, skip, opts) + } +} + +// walkDir creates a walker and starts fastwalk with this walker. +func walkDir(root Root, add func(Root, string), skip func(root Root, dir string) bool, opts Options) { + if opts.Logf == nil { + opts.Logf = func(format string, args ...any) {} + } + if _, err := os.Stat(root.Path); os.IsNotExist(err) { + opts.Logf("skipping nonexistent directory: %v", root.Path) + return + } + start := time.Now() + opts.Logf("scanning %s", root.Path) + + concurrency := opts.Concurrency + if concurrency == 0 { + // The walk be either CPU-bound or I/O-bound, depending on what the + // caller-supplied add function does and the details of the user's platform + // and machine. Rather than trying to fine-tune the concurrency level for a + // specific environment, we default to GOMAXPROCS: it is likely to be a good + // choice for a CPU-bound add function, and if it is instead I/O-bound, then + // dealing with I/O saturation is arguably the job of the kernel and/or + // runtime. (Oversaturating I/O seems unlikely to harm performance as badly + // as failing to saturate would.) + concurrency = runtime.GOMAXPROCS(0) + } + w := &walker{ + root: root, + add: add, + skip: skip, + opts: opts, + sem: make(chan struct{}, concurrency), + } + w.init() + + w.sem <- struct{}{} + path := root.Path + if path == "" { + path = "." + } + if fi, err := os.Lstat(path); err == nil { + w.walk(path, nil, fs.FileInfoToDirEntry(fi)) + } else { + w.opts.Logf("scanning directory %v: %v", root.Path, err) + } + <-w.sem + w.walking.Wait() + + opts.Logf("scanned %s in %v", root.Path, time.Since(start)) +} + +// walker is the callback for fastwalk.Walk. +type walker struct { + root Root // The source directory to scan. + add func(Root, string) // The callback that will be invoked for every possible Go package dir. + skip func(Root, string) bool // The callback that will be invoked for every dir. dir is skipped if it returns true. + opts Options // Options passed to Walk by the user. + + walking sync.WaitGroup + sem chan struct{} // Channel of semaphore tokens; send to acquire, receive to release. + ignoredDirs []string + + added sync.Map // map[string]bool +} + +// A symlinkList is a linked list of os.FileInfos for parent directories +// reached via symlinks. +type symlinkList struct { + info os.FileInfo + prev *symlinkList +} + +// init initializes the walker based on its Options +func (w *walker) init() { + var ignoredPaths []string + if w.root.Type == RootModuleCache { + ignoredPaths = []string{"cache"} + } + if !w.opts.ModulesEnabled && w.root.Type == RootGOPATH { + ignoredPaths = w.getIgnoredDirs(w.root.Path) + ignoredPaths = append(ignoredPaths, "v", "mod") + } + + for _, p := range ignoredPaths { + full := filepath.Join(w.root.Path, p) + w.ignoredDirs = append(w.ignoredDirs, full) + w.opts.Logf("Directory added to ignore list: %s", full) + } +} + +// getIgnoredDirs reads an optional config file at /.goimportsignore +// of relative directories to ignore when scanning for go files. +// The provided path is one of the $GOPATH entries with "src" appended. +func (w *walker) getIgnoredDirs(path string) []string { + file := filepath.Join(path, ".goimportsignore") + slurp, err := os.ReadFile(file) + if err != nil { + w.opts.Logf("%v", err) + } else { + w.opts.Logf("Read %s", file) + } + if err != nil { + return nil + } + + var ignoredDirs []string + bs := bufio.NewScanner(bytes.NewReader(slurp)) + for bs.Scan() { + line := strings.TrimSpace(bs.Text()) + if line == "" || strings.HasPrefix(line, "#") { + continue + } + ignoredDirs = append(ignoredDirs, line) + } + return ignoredDirs +} + +// shouldSkipDir reports whether the file should be skipped or not. +func (w *walker) shouldSkipDir(dir string) bool { + if slices.Contains(w.ignoredDirs, dir) { + return true + } + if w.skip != nil { + // Check with the user specified callback. + return w.skip(w.root, dir) + } + return false +} + +// walk walks through the given path. +// +// Errors are logged if w.opts.Logf is non-nil, but otherwise ignored. +func (w *walker) walk(path string, pathSymlinks *symlinkList, d fs.DirEntry) { + if d.Type()&os.ModeSymlink != 0 { + // Walk the symlink's target rather than the symlink itself. + // + // (Note that os.Stat, unlike the lower-lever os.Readlink, + // follows arbitrarily many layers of symlinks, so it will eventually + // reach either a non-symlink or a nonexistent target.) + // + // TODO(bcmills): 'go list all' itself ignores symlinks within GOROOT/src + // and GOPATH/src. Do we really need to traverse them here? If so, why? + + fi, err := os.Stat(path) + if err != nil { + w.opts.Logf("%v", err) + return + } + + // Avoid walking symlink cycles: if we have already followed a symlink to + // this directory as a parent of itself, don't follow it again. + // + // This doesn't catch the first time through a cycle, but it also minimizes + // the number of extra stat calls we make if we *don't* encounter a cycle. + // Since we don't actually expect to encounter symlink cycles in practice, + // this seems like the right tradeoff. + for parent := pathSymlinks; parent != nil; parent = parent.prev { + if os.SameFile(fi, parent.info) { + return + } + } + + pathSymlinks = &symlinkList{ + info: fi, + prev: pathSymlinks, + } + d = fs.FileInfoToDirEntry(fi) + } + + if d.Type().IsRegular() { + if !strings.HasSuffix(path, ".go") { + return + } + + dir := filepath.Dir(path) + if dir == w.root.Path && (w.root.Type == RootGOROOT || w.root.Type == RootGOPATH) { + // Doesn't make sense to have regular files + // directly in your $GOPATH/src or $GOROOT/src. + // + // TODO(bcmills): there are many levels of directory within + // RootModuleCache where this also wouldn't make sense, + // Can we generalize this to any directory without a corresponding + // import path? + return + } + + if _, dup := w.added.LoadOrStore(dir, true); !dup { + w.add(w.root, dir) + } + } + + if !d.IsDir() { + return + } + + base := filepath.Base(path) + if base == "" || base[0] == '.' || base[0] == '_' || + base == "testdata" || + (w.root.Type == RootGOROOT && w.opts.ModulesEnabled && base == "vendor") || + (!w.opts.ModulesEnabled && base == "node_modules") || + w.shouldSkipDir(path) { + return + } + + // Read the directory and walk its entries. + + f, err := os.Open(path) + if err != nil { + w.opts.Logf("%v", err) + return + } + defer f.Close() + + for { + // We impose an arbitrary limit on the number of ReadDir results per + // directory to limit the amount of memory consumed for stale or upcoming + // directory entries. The limit trades off CPU (number of syscalls to read + // the whole directory) against RAM (reachable directory entries other than + // the one currently being processed). + // + // Since we process the directories recursively, we will end up maintaining + // a slice of entries for each level of the directory tree. + // (Compare https://go.dev/issue/36197.) + ents, err := f.ReadDir(1024) + if err != nil { + if err != io.EOF { + w.opts.Logf("%v", err) + } + break + } + + for _, d := range ents { + nextPath := filepath.Join(path, d.Name()) + if d.IsDir() { + select { + case w.sem <- struct{}{}: + // Got a new semaphore token, so we can traverse the directory concurrently. + d := d + w.walking.Add(1) + go func() { + defer func() { + <-w.sem + w.walking.Done() + }() + w.walk(nextPath, pathSymlinks, d) + }() + continue + + default: + // No tokens available, so traverse serially. + } + } + + w.walk(nextPath, pathSymlinks, d) + } + } +} diff --git a/vendor/golang.org/x/tools/internal/imports/fix.go b/vendor/golang.org/x/tools/internal/imports/fix.go new file mode 100644 index 0000000..50b6ca5 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/imports/fix.go @@ -0,0 +1,1898 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package imports + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "go/ast" + "go/build" + "go/parser" + "go/token" + "go/types" + "io/fs" + "io/ioutil" + "os" + "path" + "path/filepath" + "reflect" + "sort" + "strconv" + "strings" + "sync" + "unicode" + "unicode/utf8" + + "maps" + + "golang.org/x/tools/go/ast/astutil" + "golang.org/x/tools/internal/event" + "golang.org/x/tools/internal/gocommand" + "golang.org/x/tools/internal/gopathwalk" + "golang.org/x/tools/internal/stdlib" +) + +// importToGroup is a list of functions which map from an import path to +// a group number. +var importToGroup = []func(localPrefix, importPath string) (num int, ok bool){ + func(localPrefix, importPath string) (num int, ok bool) { + if localPrefix == "" { + return + } + for _, p := range strings.Split(localPrefix, ",") { + if strings.HasPrefix(importPath, p) || strings.TrimSuffix(p, "/") == importPath { + return 3, true + } + } + return + }, + func(_, importPath string) (num int, ok bool) { + if strings.HasPrefix(importPath, "appengine") { + return 2, true + } + return + }, + func(_, importPath string) (num int, ok bool) { + firstComponent := strings.Split(importPath, "/")[0] + if strings.Contains(firstComponent, ".") { + return 1, true + } + return + }, +} + +func importGroup(localPrefix, importPath string) int { + for _, fn := range importToGroup { + if n, ok := fn(localPrefix, importPath); ok { + return n + } + } + return 0 +} + +type ImportFixType int + +const ( + AddImport ImportFixType = iota + DeleteImport + SetImportName +) + +type ImportFix struct { + // StmtInfo represents the import statement this fix will add, remove, or change. + StmtInfo ImportInfo + // IdentName is the identifier that this fix will add or remove. + IdentName string + // FixType is the type of fix this is (AddImport, DeleteImport, SetImportName). + FixType ImportFixType + Relevance float64 // see pkg +} + +// parseOtherFiles parses all the Go files in srcDir except filename, including +// test files if filename looks like a test. +// +// It returns an error only if ctx is cancelled. Files with parse errors are +// ignored. +func parseOtherFiles(ctx context.Context, fset *token.FileSet, srcDir, filename string) ([]*ast.File, error) { + // This could use go/packages but it doesn't buy much, and it fails + // with https://golang.org/issue/26296 in LoadFiles mode in some cases. + considerTests := strings.HasSuffix(filename, "_test.go") + + fileBase := filepath.Base(filename) + packageFileInfos, err := os.ReadDir(srcDir) + if err != nil { + return nil, ctx.Err() + } + + var files []*ast.File + for _, fi := range packageFileInfos { + if ctx.Err() != nil { + return nil, ctx.Err() + } + if fi.Name() == fileBase || !strings.HasSuffix(fi.Name(), ".go") { + continue + } + if !considerTests && strings.HasSuffix(fi.Name(), "_test.go") { + continue + } + + f, err := parser.ParseFile(fset, filepath.Join(srcDir, fi.Name()), nil, parser.SkipObjectResolution) + if err != nil { + continue + } + + files = append(files, f) + } + + return files, ctx.Err() +} + +// addGlobals puts the names of package vars into the provided map. +func addGlobals(f *ast.File, globals map[string]bool) { + for _, decl := range f.Decls { + genDecl, ok := decl.(*ast.GenDecl) + if !ok { + continue + } + + for _, spec := range genDecl.Specs { + valueSpec, ok := spec.(*ast.ValueSpec) + if !ok { + continue + } + globals[valueSpec.Names[0].Name] = true + } + } +} + +// collectReferences builds a map of selector expressions, from +// left hand side (X) to a set of right hand sides (Sel). +func collectReferences(f *ast.File) References { + refs := References{} + + var visitor visitFn + visitor = func(node ast.Node) ast.Visitor { + if node == nil { + return visitor + } + switch v := node.(type) { + case *ast.SelectorExpr: + xident, ok := v.X.(*ast.Ident) + if !ok { + break + } + if xident.Obj != nil { + // If the parser can resolve it, it's not a package ref. + break + } + if !ast.IsExported(v.Sel.Name) { + // Whatever this is, it's not exported from a package. + break + } + pkgName := xident.Name + r := refs[pkgName] + if r == nil { + r = make(map[string]bool) + refs[pkgName] = r + } + r[v.Sel.Name] = true + } + return visitor + } + ast.Walk(visitor, f) + return refs +} + +// collectImports returns all the imports in f. +// Unnamed imports (., _) and "C" are ignored. +func collectImports(f *ast.File) []*ImportInfo { + var imports []*ImportInfo + for _, imp := range f.Imports { + var name string + if imp.Name != nil { + name = imp.Name.Name + } + if imp.Path.Value == `"C"` || name == "_" || name == "." { + continue + } + path := strings.Trim(imp.Path.Value, `"`) + imports = append(imports, &ImportInfo{ + Name: name, + ImportPath: path, + }) + } + return imports +} + +// findMissingImport searches pass's candidates for an import that provides +// pkg, containing all of syms. +func (p *pass) findMissingImport(pkg string, syms map[string]bool) *ImportInfo { + for _, candidate := range p.candidates { + pkgInfo, ok := p.knownPackages[candidate.ImportPath] + if !ok { + continue + } + if p.importIdentifier(candidate) != pkg { + continue + } + + allFound := true + for right := range syms { + if !pkgInfo.Exports[right] { + allFound = false + break + } + } + + if allFound { + return candidate + } + } + return nil +} + +// A pass contains all the inputs and state necessary to fix a file's imports. +// It can be modified in some ways during use; see comments below. +type pass struct { + // Inputs. These must be set before a call to load, and not modified after. + fset *token.FileSet // fset used to parse f and its siblings. + f *ast.File // the file being fixed. + srcDir string // the directory containing f. + logf func(string, ...any) + source Source // the environment to use for go commands, etc. + loadRealPackageNames bool // if true, load package names from disk rather than guessing them. + otherFiles []*ast.File // sibling files. + goroot string + + // Intermediate state, generated by load. + existingImports map[string][]*ImportInfo + allRefs References + missingRefs References + + // Inputs to fix. These can be augmented between successive fix calls. + lastTry bool // indicates that this is the last call and fix should clean up as best it can. + candidates []*ImportInfo // candidate imports in priority order. + knownPackages map[string]*PackageInfo // information about all known packages. +} + +// loadPackageNames saves the package names for everything referenced by imports. +func (p *pass) loadPackageNames(ctx context.Context, imports []*ImportInfo) error { + if p.logf != nil { + p.logf("loading package names for %v packages", len(imports)) + defer func() { + p.logf("done loading package names for %v packages", len(imports)) + }() + } + var unknown []string + for _, imp := range imports { + if _, ok := p.knownPackages[imp.ImportPath]; ok { + continue + } + unknown = append(unknown, imp.ImportPath) + } + + names, err := p.source.LoadPackageNames(ctx, p.srcDir, unknown) + if err != nil { + return err + } + + // TODO(rfindley): revisit this. Why do we need to store known packages with + // no exports? The inconsistent data is confusing. + for path, name := range names { + p.knownPackages[path] = &PackageInfo{ + Name: name, + Exports: map[string]bool{}, + } + } + return nil +} + +// WithoutVersion removes a trailing major version, if there is one. +func WithoutVersion(nm string) string { + if v := path.Base(nm); len(v) > 0 && v[0] == 'v' { + if _, err := strconv.Atoi(v[1:]); err == nil { + // this is, for instance, called with rand/v2 and returns rand + if len(v) < len(nm) { + xnm := nm[:len(nm)-len(v)-1] + return path.Base(xnm) + } + } + } + return nm +} + +// importIdentifier returns the identifier that imp will introduce. It will +// guess if the package name has not been loaded, e.g. because the source +// is not available. +func (p *pass) importIdentifier(imp *ImportInfo) string { + if imp.Name != "" { + return imp.Name + } + known := p.knownPackages[imp.ImportPath] + if known != nil && known.Name != "" { + return WithoutVersion(known.Name) + } + return ImportPathToAssumedName(imp.ImportPath) +} + +// load reads in everything necessary to run a pass, and reports whether the +// file already has all the imports it needs. It fills in p.missingRefs with the +// file's missing symbols, if any, or removes unused imports if not. +func (p *pass) load(ctx context.Context) ([]*ImportFix, bool) { + p.knownPackages = map[string]*PackageInfo{} + p.missingRefs = References{} + p.existingImports = map[string][]*ImportInfo{} + + // Load basic information about the file in question. + p.allRefs = collectReferences(p.f) + + // Load stuff from other files in the same package: + // global variables so we know they don't need resolving, and imports + // that we might want to mimic. + globals := map[string]bool{} + for _, otherFile := range p.otherFiles { + // Don't load globals from files that are in the same directory + // but a different package. Using them to suggest imports is OK. + if p.f.Name.Name == otherFile.Name.Name { + addGlobals(otherFile, globals) + } + p.candidates = append(p.candidates, collectImports(otherFile)...) + } + + // Resolve all the import paths we've seen to package names, and store + // f's imports by the identifier they introduce. + imports := collectImports(p.f) + if p.loadRealPackageNames { + err := p.loadPackageNames(ctx, append(imports, p.candidates...)) + if err != nil { + if p.logf != nil { + p.logf("loading package names: %v", err) + } + return nil, false + } + } + for _, imp := range imports { + p.existingImports[p.importIdentifier(imp)] = append(p.existingImports[p.importIdentifier(imp)], imp) + } + + // Find missing references. + for left, rights := range p.allRefs { + if globals[left] { + continue + } + _, ok := p.existingImports[left] + if !ok { + p.missingRefs[left] = rights + continue + } + } + if len(p.missingRefs) != 0 { + return nil, false + } + + return p.fix() +} + +// fix attempts to satisfy missing imports using p.candidates. If it finds +// everything, or if p.lastTry is true, it updates fixes to add the imports it found, +// delete anything unused, and update import names, and returns true. +func (p *pass) fix() ([]*ImportFix, bool) { + // Find missing imports. + var selected []*ImportInfo + for left, rights := range p.missingRefs { + if imp := p.findMissingImport(left, rights); imp != nil { + selected = append(selected, imp) + } + } + + if !p.lastTry && len(selected) != len(p.missingRefs) { + return nil, false + } + + // Found everything, or giving up. Add the new imports and remove any unused. + var fixes []*ImportFix + for _, identifierImports := range p.existingImports { + for _, imp := range identifierImports { + // We deliberately ignore globals here, because we can't be sure + // they're in the same package. People do things like put multiple + // main packages in the same directory, and we don't want to + // remove imports if they happen to have the same name as a var in + // a different package. + if _, ok := p.allRefs[p.importIdentifier(imp)]; !ok { + fixes = append(fixes, &ImportFix{ + StmtInfo: *imp, + IdentName: p.importIdentifier(imp), + FixType: DeleteImport, + }) + continue + } + + // An existing import may need to update its import name to be correct. + if name := p.importSpecName(imp); name != imp.Name { + fixes = append(fixes, &ImportFix{ + StmtInfo: ImportInfo{ + Name: name, + ImportPath: imp.ImportPath, + }, + IdentName: p.importIdentifier(imp), + FixType: SetImportName, + }) + } + } + } + // Collecting fixes involved map iteration, so sort for stability. See + // golang/go#59976. + sortFixes(fixes) + + // collect selected fixes in a separate slice, so that it can be sorted + // separately. Note that these fixes must occur after fixes to existing + // imports. TODO(rfindley): figure out why. + var selectedFixes []*ImportFix + for _, imp := range selected { + selectedFixes = append(selectedFixes, &ImportFix{ + StmtInfo: ImportInfo{ + Name: p.importSpecName(imp), + ImportPath: imp.ImportPath, + }, + IdentName: p.importIdentifier(imp), + FixType: AddImport, + }) + } + sortFixes(selectedFixes) + + return append(fixes, selectedFixes...), true +} + +func sortFixes(fixes []*ImportFix) { + sort.Slice(fixes, func(i, j int) bool { + fi, fj := fixes[i], fixes[j] + if fi.StmtInfo.ImportPath != fj.StmtInfo.ImportPath { + return fi.StmtInfo.ImportPath < fj.StmtInfo.ImportPath + } + if fi.StmtInfo.Name != fj.StmtInfo.Name { + return fi.StmtInfo.Name < fj.StmtInfo.Name + } + if fi.IdentName != fj.IdentName { + return fi.IdentName < fj.IdentName + } + return fi.FixType < fj.FixType + }) +} + +// importSpecName gets the import name of imp in the import spec. +// +// When the import identifier matches the assumed import name, the import name does +// not appear in the import spec. +func (p *pass) importSpecName(imp *ImportInfo) string { + // If we did not load the real package names, or the name is already set, + // we just return the existing name. + if !p.loadRealPackageNames || imp.Name != "" { + return imp.Name + } + + ident := p.importIdentifier(imp) + if ident == ImportPathToAssumedName(imp.ImportPath) { + return "" // ident not needed since the assumed and real names are the same. + } + return ident +} + +// apply will perform the fixes on f in order. +func apply(fset *token.FileSet, f *ast.File, fixes []*ImportFix) { + for _, fix := range fixes { + switch fix.FixType { + case DeleteImport: + astutil.DeleteNamedImport(fset, f, fix.StmtInfo.Name, fix.StmtInfo.ImportPath) + case AddImport: + astutil.AddNamedImport(fset, f, fix.StmtInfo.Name, fix.StmtInfo.ImportPath) + case SetImportName: + // Find the matching import path and change the name. + for _, spec := range f.Imports { + path := strings.Trim(spec.Path.Value, `"`) + if path == fix.StmtInfo.ImportPath { + spec.Name = &ast.Ident{ + Name: fix.StmtInfo.Name, + NamePos: spec.Pos(), + } + } + } + } + } +} + +// assumeSiblingImportsValid assumes that siblings' use of packages is valid, +// adding the exports they use. +func (p *pass) assumeSiblingImportsValid() { + for _, f := range p.otherFiles { + refs := collectReferences(f) + imports := collectImports(f) + importsByName := map[string]*ImportInfo{} + for _, imp := range imports { + importsByName[p.importIdentifier(imp)] = imp + } + for left, rights := range refs { + if imp, ok := importsByName[left]; ok { + if m, ok := stdlib.PackageSymbols[imp.ImportPath]; ok { + // We have the stdlib in memory; no need to guess. + rights = symbolNameSet(m) + } + // TODO(rfindley): we should set package name here, for consistency. + p.addCandidate(imp, &PackageInfo{ + // no name; we already know it. + Exports: rights, + }) + } + } + } +} + +// addCandidate adds a candidate import to p, and merges in the information +// in pkg. +func (p *pass) addCandidate(imp *ImportInfo, pkg *PackageInfo) { + p.candidates = append(p.candidates, imp) + if existing, ok := p.knownPackages[imp.ImportPath]; ok { + if existing.Name == "" { + existing.Name = pkg.Name + } + for export := range pkg.Exports { + existing.Exports[export] = true + } + } else { + p.knownPackages[imp.ImportPath] = pkg + } +} + +// fixImports adds and removes imports from f so that all its references are +// satisfied and there are no unused imports. +// +// This is declared as a variable rather than a function so goimports can +// easily be extended by adding a file with an init function. +// +// DO NOT REMOVE: used internally at Google. +var fixImports = fixImportsDefault + +func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) error { + fixes, err := getFixes(context.Background(), fset, f, filename, env) + if err != nil { + return err + } + apply(fset, f, fixes) + return nil +} + +// getFixes gets the import fixes that need to be made to f in order to fix the imports. +// It does not modify the ast. +func getFixes(ctx context.Context, fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) ([]*ImportFix, error) { + source, err := NewProcessEnvSource(env, filename, f.Name.Name) + if err != nil { + return nil, err + } + goEnv, err := env.goEnv() + if err != nil { + return nil, err + } + return getFixesWithSource(ctx, fset, f, filename, goEnv["GOROOT"], env.logf, source) +} + +func getFixesWithSource(ctx context.Context, fset *token.FileSet, f *ast.File, filename string, goroot string, logf func(string, ...any), source Source) ([]*ImportFix, error) { + // This logic is defensively duplicated from getFixes. + abs, err := filepath.Abs(filename) + if err != nil { + return nil, err + } + srcDir := filepath.Dir(abs) + + if logf != nil { + logf("fixImports(filename=%q), srcDir=%q ...", filename, srcDir) + } + + // First pass: looking only at f, and using the naive algorithm to + // derive package names from import paths, see if the file is already + // complete. We can't add any imports yet, because we don't know + // if missing references are actually package vars. + p := &pass{ + fset: fset, + f: f, + srcDir: srcDir, + logf: logf, + goroot: goroot, + source: source, + } + if fixes, done := p.load(ctx); done { + return fixes, nil + } + + otherFiles, err := parseOtherFiles(ctx, fset, srcDir, filename) + if err != nil { + return nil, err + } + + // Second pass: add information from other files in the same package, + // like their package vars and imports. + p.otherFiles = otherFiles + if fixes, done := p.load(ctx); done { + return fixes, nil + } + + // Now we can try adding imports from the stdlib. + p.assumeSiblingImportsValid() + addStdlibCandidates(p, p.missingRefs) + if fixes, done := p.fix(); done { + return fixes, nil + } + + // Third pass: get real package names where we had previously used + // the naive algorithm. + p = &pass{ + fset: fset, + f: f, + srcDir: srcDir, + logf: logf, + goroot: goroot, + source: p.source, // safe to reuse, as it's just a wrapper around env + } + p.loadRealPackageNames = true + p.otherFiles = otherFiles + if fixes, done := p.load(ctx); done { + return fixes, nil + } + + if err := addStdlibCandidates(p, p.missingRefs); err != nil { + return nil, err + } + p.assumeSiblingImportsValid() + if fixes, done := p.fix(); done { + return fixes, nil + } + + // Go look for candidates in $GOPATH, etc. We don't necessarily load + // the real exports of sibling imports, so keep assuming their contents. + if err := addExternalCandidates(ctx, p, p.missingRefs, filename); err != nil { + return nil, err + } + + p.lastTry = true + fixes, _ := p.fix() + return fixes, nil +} + +// MaxRelevance is the highest relevance, used for the standard library. +// Chosen arbitrarily to match pre-existing gopls code. +const MaxRelevance = 7.0 + +// getCandidatePkgs works with the passed callback to find all acceptable packages. +// It deduplicates by import path, and uses a cached stdlib rather than reading +// from disk. +func getCandidatePkgs(ctx context.Context, wrappedCallback *scanCallback, filename, filePkg string, env *ProcessEnv) error { + notSelf := func(p *pkg) bool { + return p.packageName != filePkg || p.dir != filepath.Dir(filename) + } + goenv, err := env.goEnv() + if err != nil { + return err + } + + var mu sync.Mutex // to guard asynchronous access to dupCheck + dupCheck := map[string]struct{}{} + + // Start off with the standard library. + for importPath, symbols := range stdlib.PackageSymbols { + p := &pkg{ + dir: filepath.Join(goenv["GOROOT"], "src", importPath), + importPathShort: importPath, + packageName: path.Base(importPath), + relevance: MaxRelevance, + } + dupCheck[importPath] = struct{}{} + if notSelf(p) && wrappedCallback.dirFound(p) && wrappedCallback.packageNameLoaded(p) { + var exports []stdlib.Symbol + for _, sym := range symbols { + switch sym.Kind { + case stdlib.Func, stdlib.Type, stdlib.Var, stdlib.Const: + exports = append(exports, sym) + } + } + wrappedCallback.exportsLoaded(p, exports) + } + } + + scanFilter := &scanCallback{ + rootFound: func(root gopathwalk.Root) bool { + // Exclude goroot results -- getting them is relatively expensive, not cached, + // and generally redundant with the in-memory version. + return root.Type != gopathwalk.RootGOROOT && wrappedCallback.rootFound(root) + }, + dirFound: wrappedCallback.dirFound, + packageNameLoaded: func(pkg *pkg) bool { + mu.Lock() + defer mu.Unlock() + if _, ok := dupCheck[pkg.importPathShort]; ok { + return false + } + dupCheck[pkg.importPathShort] = struct{}{} + return notSelf(pkg) && wrappedCallback.packageNameLoaded(pkg) + }, + exportsLoaded: func(pkg *pkg, exports []stdlib.Symbol) { + // If we're an x_test, load the package under test's test variant. + if strings.HasSuffix(filePkg, "_test") && pkg.dir == filepath.Dir(filename) { + var err error + _, exports, err = loadExportsFromFiles(ctx, env, pkg.dir, true) + if err != nil { + return + } + } + wrappedCallback.exportsLoaded(pkg, exports) + }, + } + resolver, err := env.GetResolver() + if err != nil { + return err + } + return resolver.scan(ctx, scanFilter) +} + +func ScoreImportPaths(ctx context.Context, env *ProcessEnv, paths []string) (map[string]float64, error) { + result := make(map[string]float64) + resolver, err := env.GetResolver() + if err != nil { + return nil, err + } + for _, path := range paths { + result[path] = resolver.scoreImportPath(ctx, path) + } + return result, nil +} + +func PrimeCache(ctx context.Context, resolver Resolver) error { + // Fully scan the disk for directories, but don't actually read any Go files. + callback := &scanCallback{ + rootFound: func(root gopathwalk.Root) bool { + // See getCandidatePkgs: walking GOROOT is apparently expensive and + // unnecessary. + return root.Type != gopathwalk.RootGOROOT + }, + dirFound: func(pkg *pkg) bool { + return false + }, + // packageNameLoaded and exportsLoaded must never be called. + } + + return resolver.scan(ctx, callback) +} + +func candidateImportName(pkg *pkg) string { + if ImportPathToAssumedName(pkg.importPathShort) != pkg.packageName { + return pkg.packageName + } + return "" +} + +// GetAllCandidates calls wrapped for each package whose name starts with +// searchPrefix, and can be imported from filename with the package name filePkg. +// +// Beware that the wrapped function may be called multiple times concurrently. +// TODO(adonovan): encapsulate the concurrency. +func GetAllCandidates(ctx context.Context, wrapped func(ImportFix), searchPrefix, filename, filePkg string, env *ProcessEnv) error { + callback := &scanCallback{ + rootFound: func(gopathwalk.Root) bool { + return true + }, + dirFound: func(pkg *pkg) bool { + if !CanUse(filename, pkg.dir) { + return false + } + // Try the assumed package name first, then a simpler path match + // in case of packages named vN, which are not uncommon. + return strings.HasPrefix(ImportPathToAssumedName(pkg.importPathShort), searchPrefix) || + strings.HasPrefix(path.Base(pkg.importPathShort), searchPrefix) + }, + packageNameLoaded: func(pkg *pkg) bool { + if !strings.HasPrefix(pkg.packageName, searchPrefix) { + return false + } + wrapped(ImportFix{ + StmtInfo: ImportInfo{ + ImportPath: pkg.importPathShort, + Name: candidateImportName(pkg), + }, + IdentName: pkg.packageName, + FixType: AddImport, + Relevance: pkg.relevance, + }) + return false + }, + } + return getCandidatePkgs(ctx, callback, filename, filePkg, env) +} + +// GetImportPaths calls wrapped for each package whose import path starts with +// searchPrefix, and can be imported from filename with the package name filePkg. +func GetImportPaths(ctx context.Context, wrapped func(ImportFix), searchPrefix, filename, filePkg string, env *ProcessEnv) error { + callback := &scanCallback{ + rootFound: func(gopathwalk.Root) bool { + return true + }, + dirFound: func(pkg *pkg) bool { + if !CanUse(filename, pkg.dir) { + return false + } + return strings.HasPrefix(pkg.importPathShort, searchPrefix) + }, + packageNameLoaded: func(pkg *pkg) bool { + wrapped(ImportFix{ + StmtInfo: ImportInfo{ + ImportPath: pkg.importPathShort, + Name: candidateImportName(pkg), + }, + IdentName: pkg.packageName, + FixType: AddImport, + Relevance: pkg.relevance, + }) + return false + }, + } + return getCandidatePkgs(ctx, callback, filename, filePkg, env) +} + +// A PackageExport is a package and its exports. +type PackageExport struct { + Fix *ImportFix + Exports []stdlib.Symbol +} + +// GetPackageExports returns all known packages with name pkg and their exports. +func GetPackageExports(ctx context.Context, wrapped func(PackageExport), searchPkg, filename, filePkg string, env *ProcessEnv) error { + callback := &scanCallback{ + rootFound: func(gopathwalk.Root) bool { + return true + }, + dirFound: func(pkg *pkg) bool { + return pkgIsCandidate(filename, References{searchPkg: nil}, pkg) + }, + packageNameLoaded: func(pkg *pkg) bool { + return pkg.packageName == searchPkg + }, + exportsLoaded: func(pkg *pkg, exports []stdlib.Symbol) { + sortSymbols(exports) + wrapped(PackageExport{ + Fix: &ImportFix{ + StmtInfo: ImportInfo{ + ImportPath: pkg.importPathShort, + Name: candidateImportName(pkg), + }, + IdentName: pkg.packageName, + FixType: AddImport, + Relevance: pkg.relevance, + }, + Exports: exports, + }) + }, + } + return getCandidatePkgs(ctx, callback, filename, filePkg, env) +} + +// TODO(rfindley): we should depend on GOOS and GOARCH, to provide accurate +// imports when doing cross-platform development. +var requiredGoEnvVars = []string{ + "GO111MODULE", + "GOFLAGS", + "GOINSECURE", + "GOMOD", + "GOMODCACHE", + "GONOPROXY", + "GONOSUMDB", + "GOPATH", + "GOPROXY", + "GOROOT", + "GOSUMDB", + "GOWORK", +} + +// ProcessEnv contains environment variables and settings that affect the use of +// the go command, the go/build package, etc. +// +// ...a ProcessEnv *also* overwrites its Env along with derived state in the +// form of the resolver. And because it is lazily initialized, an env may just +// be broken and unusable, but there is no way for the caller to detect that: +// all queries will just fail. +// +// TODO(rfindley): refactor this package so that this type (perhaps renamed to +// just Env or Config) is an immutable configuration struct, to be exchanged +// for an initialized object via a constructor that returns an error. Perhaps +// the signature should be `func NewResolver(*Env) (*Resolver, error)`, where +// resolver is a concrete type used for resolving imports. Via this +// refactoring, we can avoid the need to call ProcessEnv.init and +// ProcessEnv.GoEnv everywhere, and implicitly fix all the places where this +// these are misused. Also, we'd delegate the caller the decision of how to +// handle a broken environment. +type ProcessEnv struct { + GocmdRunner *gocommand.Runner + + BuildFlags []string + ModFlag string + + // SkipPathInScan returns true if the path should be skipped from scans of + // the RootCurrentModule root type. The function argument is a clean, + // absolute path. + SkipPathInScan func(string) bool + + // Env overrides the OS environment, and can be used to specify + // GOPROXY, GO111MODULE, etc. PATH cannot be set here, because + // exec.Command will not honor it. + // Specifying all of requiredGoEnvVars avoids a call to `go env`. + Env map[string]string + + WorkingDir string + + // If Logf is non-nil, debug logging is enabled through this function. + Logf func(format string, args ...any) + + // If set, ModCache holds a shared cache of directory info to use across + // multiple ProcessEnvs. + ModCache *DirInfoCache + + initialized bool // see TODO above + + // resolver and resolverErr are lazily evaluated (see GetResolver). + // This is unclean, but see the big TODO in the docstring for ProcessEnv + // above: for now, we can't be sure that the ProcessEnv is fully initialized. + resolver Resolver + resolverErr error +} + +func (e *ProcessEnv) goEnv() (map[string]string, error) { + if err := e.init(); err != nil { + return nil, err + } + return e.Env, nil +} + +func (e *ProcessEnv) matchFile(dir, name string) (bool, error) { + bctx, err := e.buildContext() + if err != nil { + return false, err + } + return bctx.MatchFile(dir, name) +} + +// CopyConfig copies the env's configuration into a new env. +func (e *ProcessEnv) CopyConfig() *ProcessEnv { + copy := &ProcessEnv{ + GocmdRunner: e.GocmdRunner, + initialized: e.initialized, + BuildFlags: e.BuildFlags, + Logf: e.Logf, + WorkingDir: e.WorkingDir, + resolver: nil, + Env: map[string]string{}, + } + maps.Copy(copy.Env, e.Env) + return copy +} + +func (e *ProcessEnv) init() error { + if e.initialized { + return nil + } + + foundAllRequired := true + for _, k := range requiredGoEnvVars { + if _, ok := e.Env[k]; !ok { + foundAllRequired = false + break + } + } + if foundAllRequired { + e.initialized = true + return nil + } + + if e.Env == nil { + e.Env = map[string]string{} + } + + goEnv := map[string]string{} + stdout, err := e.invokeGo(context.TODO(), "env", append([]string{"-json"}, requiredGoEnvVars...)...) + if err != nil { + return err + } + if err := json.Unmarshal(stdout.Bytes(), &goEnv); err != nil { + return err + } + maps.Copy(e.Env, goEnv) + e.initialized = true + return nil +} + +func (e *ProcessEnv) env() []string { + var env []string // the gocommand package will prepend os.Environ. + for k, v := range e.Env { + env = append(env, k+"="+v) + } + return env +} + +func (e *ProcessEnv) GetResolver() (Resolver, error) { + if err := e.init(); err != nil { + return nil, err + } + + if e.resolver == nil && e.resolverErr == nil { + // TODO(rfindley): we should only use a gopathResolver here if the working + // directory is actually *in* GOPATH. (I seem to recall an open gopls issue + // for this behavior, but I can't find it). + // + // For gopls, we can optionally explicitly choose a resolver type, since we + // already know the view type. + if e.Env["GOMOD"] == "" && (e.Env["GOWORK"] == "" || e.Env["GOWORK"] == "off") { + e.resolver = newGopathResolver(e) + e.logf("created gopath resolver") + } else if r, err := newModuleResolver(e, e.ModCache); err != nil { + e.resolverErr = err + e.logf("failed to create module resolver: %v", err) + } else { + e.resolver = Resolver(r) + e.logf("created module resolver") + } + } + + return e.resolver, e.resolverErr +} + +// logf logs if e.Logf is non-nil. +func (e *ProcessEnv) logf(format string, args ...any) { + if e.Logf != nil { + e.Logf(format, args...) + } +} + +// buildContext returns the build.Context to use for matching files. +// +// TODO(rfindley): support dynamic GOOS, GOARCH here, when doing cross-platform +// development. +func (e *ProcessEnv) buildContext() (*build.Context, error) { + ctx := build.Default + goenv, err := e.goEnv() + if err != nil { + return nil, err + } + ctx.GOROOT = goenv["GOROOT"] + ctx.GOPATH = goenv["GOPATH"] + + // As of Go 1.14, build.Context has a Dir field + // (see golang.org/issue/34860). + // Populate it only if present. + rc := reflect.ValueOf(&ctx).Elem() + dir := rc.FieldByName("Dir") + if dir.IsValid() && dir.Kind() == reflect.String { + dir.SetString(e.WorkingDir) + } + + // Since Go 1.11, go/build.Context.Import may invoke 'go list' depending on + // the value in GO111MODULE in the process's environment. We always want to + // run in GOPATH mode when calling Import, so we need to prevent this from + // happening. In Go 1.16, GO111MODULE defaults to "on", so this problem comes + // up more frequently. + // + // HACK: setting any of the Context I/O hooks prevents Import from invoking + // 'go list', regardless of GO111MODULE. This is undocumented, but it's + // unlikely to change before GOPATH support is removed. + ctx.ReadDir = ioutil.ReadDir + + return &ctx, nil +} + +func (e *ProcessEnv) invokeGo(ctx context.Context, verb string, args ...string) (*bytes.Buffer, error) { + inv := gocommand.Invocation{ + Verb: verb, + Args: args, + BuildFlags: e.BuildFlags, + Env: e.env(), + Logf: e.Logf, + WorkingDir: e.WorkingDir, + } + return e.GocmdRunner.Run(ctx, inv) +} + +func addStdlibCandidates(pass *pass, refs References) error { + localbase := func(nm string) string { + ans := path.Base(nm) + if ans[0] == 'v' { + // this is called, for instance, with math/rand/v2 and returns rand/v2 + if _, err := strconv.Atoi(ans[1:]); err == nil { + ix := strings.LastIndex(nm, ans) + more := path.Base(nm[:ix]) + ans = path.Join(more, ans) + } + } + return ans + } + add := func(pkg string) { + // Prevent self-imports. + if path.Base(pkg) == pass.f.Name.Name && filepath.Join(pass.goroot, "src", pkg) == pass.srcDir { + return + } + exports := symbolNameSet(stdlib.PackageSymbols[pkg]) + pass.addCandidate( + &ImportInfo{ImportPath: pkg}, + &PackageInfo{Name: localbase(pkg), Exports: exports}) + } + for left := range refs { + if left == "rand" { + // Make sure we try crypto/rand before any version of math/rand as both have Int() + // and our policy is to recommend crypto + add("crypto/rand") + // if the user's no later than go1.21, this should be "math/rand" + // but we have no way of figuring out what the user is using + // TODO: investigate using the toolchain version to disambiguate in the stdlib + add("math/rand/v2") + // math/rand has an overlapping API + // TestIssue66407 fails without this + add("math/rand") + continue + } + for importPath := range stdlib.PackageSymbols { + if path.Base(importPath) == left { + add(importPath) + } + } + } + return nil +} + +// A Resolver does the build-system-specific parts of goimports. +type Resolver interface { + // loadPackageNames loads the package names in importPaths. + loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) + + // scan works with callback to search for packages. See scanCallback for details. + scan(ctx context.Context, callback *scanCallback) error + + // loadExports returns the package name and set of exported symbols in the + // package at dir. loadExports may be called concurrently. + loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []stdlib.Symbol, error) + + // scoreImportPath returns the relevance for an import path. + scoreImportPath(ctx context.Context, path string) float64 + + // ClearForNewScan returns a new Resolver based on the receiver that has + // cleared its internal caches of directory contents. + // + // The new resolver should be primed and then set via + // [ProcessEnv.UpdateResolver]. + ClearForNewScan() Resolver +} + +// A scanCallback controls a call to scan and receives its results. +// In general, minor errors will be silently discarded; a user should not +// expect to receive a full series of calls for everything. +type scanCallback struct { + // rootFound is called before scanning a new root dir. If it returns true, + // the root will be scanned. Returning false will not necessarily prevent + // directories from that root making it to dirFound. + rootFound func(gopathwalk.Root) bool + // dirFound is called when a directory is found that is possibly a Go package. + // pkg will be populated with everything except packageName. + // If it returns true, the package's name will be loaded. + dirFound func(pkg *pkg) bool + // packageNameLoaded is called when a package is found and its name is loaded. + // If it returns true, the package's exports will be loaded. + packageNameLoaded func(pkg *pkg) bool + // exportsLoaded is called when a package's exports have been loaded. + exportsLoaded func(pkg *pkg, exports []stdlib.Symbol) +} + +func addExternalCandidates(ctx context.Context, pass *pass, refs References, filename string) error { + ctx, done := event.Start(ctx, "imports.addExternalCandidates") + defer done() + + results, err := pass.source.ResolveReferences(ctx, filename, refs) + if err != nil { + return err + } + + for _, result := range results { + if result == nil { + continue + } + // Don't offer completions that would shadow predeclared + // names, such as github.com/coreos/etcd/error. + if types.Universe.Lookup(result.Package.Name) != nil { // predeclared + // Ideally we would skip this candidate only + // if the predeclared name is actually + // referenced by the file, but that's a lot + // trickier to compute and would still create + // an import that is likely to surprise the + // user before long. + continue + } + pass.addCandidate(result.Import, result.Package) + } + return nil +} + +// notIdentifier reports whether ch is an invalid identifier character. +func notIdentifier(ch rune) bool { + return !('a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || + '0' <= ch && ch <= '9' || + ch == '_' || + ch >= utf8.RuneSelf && (unicode.IsLetter(ch) || unicode.IsDigit(ch))) +} + +// ImportPathToAssumedName returns the assumed package name of an import path. +// It does this using only string parsing of the import path. +// It picks the last element of the path that does not look like a major +// version, and then picks the valid identifier off the start of that element. +// It is used to determine if a local rename should be added to an import for +// clarity. +// This function could be moved to a standard package and exported if we want +// for use in other tools. +func ImportPathToAssumedName(importPath string) string { + base := path.Base(importPath) + if strings.HasPrefix(base, "v") { + if _, err := strconv.Atoi(base[1:]); err == nil { + dir := path.Dir(importPath) + if dir != "." { + base = path.Base(dir) + } + } + } + base = strings.TrimPrefix(base, "go-") + if i := strings.IndexFunc(base, notIdentifier); i >= 0 { + base = base[:i] + } + return base +} + +// gopathResolver implements resolver for GOPATH workspaces. +type gopathResolver struct { + env *ProcessEnv + walked bool + cache *DirInfoCache + scanSema chan struct{} // scanSema prevents concurrent scans. +} + +func newGopathResolver(env *ProcessEnv) *gopathResolver { + r := &gopathResolver{ + env: env, + cache: NewDirInfoCache(), + scanSema: make(chan struct{}, 1), + } + r.scanSema <- struct{}{} + return r +} + +func (r *gopathResolver) ClearForNewScan() Resolver { + return newGopathResolver(r.env) +} + +func (r *gopathResolver) loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) { + names := map[string]string{} + bctx, err := r.env.buildContext() + if err != nil { + return nil, err + } + for _, path := range importPaths { + names[path] = importPathToName(bctx, path, srcDir) + } + return names, nil +} + +// importPathToName finds out the actual package name, as declared in its .go files. +func importPathToName(bctx *build.Context, importPath, srcDir string) string { + // Fast path for standard library without going to disk. + if stdlib.HasPackage(importPath) { + return path.Base(importPath) // stdlib packages always match their paths. + } + + buildPkg, err := bctx.Import(importPath, srcDir, build.FindOnly) + if err != nil { + return "" + } + pkgName, err := packageDirToName(buildPkg.Dir) + if err != nil { + return "" + } + return pkgName +} + +// packageDirToName is a faster version of build.Import if +// the only thing desired is the package name. Given a directory, +// packageDirToName then only parses one file in the package, +// trusting that the files in the directory are consistent. +func packageDirToName(dir string) (packageName string, err error) { + d, err := os.Open(dir) + if err != nil { + return "", err + } + names, err := d.Readdirnames(-1) + d.Close() + if err != nil { + return "", err + } + sort.Strings(names) // to have predictable behavior + var lastErr error + var nfile int + for _, name := range names { + if !strings.HasSuffix(name, ".go") { + continue + } + if strings.HasSuffix(name, "_test.go") { + continue + } + nfile++ + fullFile := filepath.Join(dir, name) + + fset := token.NewFileSet() + f, err := parser.ParseFile(fset, fullFile, nil, parser.PackageClauseOnly) + if err != nil { + lastErr = err + continue + } + pkgName := f.Name.Name + if pkgName == "documentation" { + // Special case from go/build.ImportDir, not + // handled by ctx.MatchFile. + continue + } + if pkgName == "main" { + // Also skip package main, assuming it's a +build ignore generator or example. + // Since you can't import a package main anyway, there's no harm here. + continue + } + return pkgName, nil + } + if lastErr != nil { + return "", lastErr + } + return "", fmt.Errorf("no importable package found in %d Go files", nfile) +} + +type pkg struct { + dir string // absolute file path to pkg directory ("/usr/lib/go/src/net/http") + importPathShort string // vendorless import path ("net/http", "a/b") + packageName string // package name loaded from source if requested + relevance float64 // a weakly-defined score of how relevant a package is. 0 is most relevant. +} + +type pkgDistance struct { + pkg *pkg + distance int // relative distance to target +} + +// byDistanceOrImportPathShortLength sorts by relative distance breaking ties +// on the short import path length and then the import string itself. +type byDistanceOrImportPathShortLength []pkgDistance + +func (s byDistanceOrImportPathShortLength) Len() int { return len(s) } +func (s byDistanceOrImportPathShortLength) Less(i, j int) bool { + di, dj := s[i].distance, s[j].distance + if di == -1 { + return false + } + if dj == -1 { + return true + } + if di != dj { + return di < dj + } + + vi, vj := s[i].pkg.importPathShort, s[j].pkg.importPathShort + if len(vi) != len(vj) { + return len(vi) < len(vj) + } + return vi < vj +} +func (s byDistanceOrImportPathShortLength) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +func distance(basepath, targetpath string) int { + p, err := filepath.Rel(basepath, targetpath) + if err != nil { + return -1 + } + if p == "." { + return 0 + } + return strings.Count(p, string(filepath.Separator)) + 1 +} + +func (r *gopathResolver) scan(ctx context.Context, callback *scanCallback) error { + add := func(root gopathwalk.Root, dir string) { + // We assume cached directories have not changed. We can skip them and their + // children. + if _, ok := r.cache.Load(dir); ok { + return + } + + importpath := filepath.ToSlash(dir[len(root.Path)+len("/"):]) + info := directoryPackageInfo{ + status: directoryScanned, + dir: dir, + rootType: root.Type, + nonCanonicalImportPath: VendorlessPath(importpath), + } + r.cache.Store(dir, info) + } + processDir := func(info directoryPackageInfo) { + // Skip this directory if we were not able to get the package information successfully. + if scanned, err := info.reachedStatus(directoryScanned); !scanned || err != nil { + return + } + + p := &pkg{ + importPathShort: info.nonCanonicalImportPath, + dir: info.dir, + relevance: MaxRelevance - 1, + } + if info.rootType == gopathwalk.RootGOROOT { + p.relevance = MaxRelevance + } + + if !callback.dirFound(p) { + return + } + var err error + p.packageName, err = r.cache.CachePackageName(info) + if err != nil { + return + } + + if !callback.packageNameLoaded(p) { + return + } + if _, exports, err := r.loadExports(ctx, p, false); err == nil { + callback.exportsLoaded(p, exports) + } + } + stop := r.cache.ScanAndListen(ctx, processDir) + defer stop() + + goenv, err := r.env.goEnv() + if err != nil { + return err + } + var roots []gopathwalk.Root + roots = append(roots, gopathwalk.Root{Path: filepath.Join(goenv["GOROOT"], "src"), Type: gopathwalk.RootGOROOT}) + for _, p := range filepath.SplitList(goenv["GOPATH"]) { + roots = append(roots, gopathwalk.Root{Path: filepath.Join(p, "src"), Type: gopathwalk.RootGOPATH}) + } + // The callback is not necessarily safe to use in the goroutine below. Process roots eagerly. + roots = filterRoots(roots, callback.rootFound) + // We can't cancel walks, because we need them to finish to have a usable + // cache. Instead, run them in a separate goroutine and detach. + scanDone := make(chan struct{}) + go func() { + select { + case <-ctx.Done(): + return + case <-r.scanSema: + } + defer func() { r.scanSema <- struct{}{} }() + gopathwalk.Walk(roots, add, gopathwalk.Options{Logf: r.env.Logf, ModulesEnabled: false}) + close(scanDone) + }() + select { + case <-ctx.Done(): + case <-scanDone: + } + return nil +} + +func (r *gopathResolver) scoreImportPath(ctx context.Context, path string) float64 { + if stdlib.HasPackage(path) { + return MaxRelevance + } + return MaxRelevance - 1 +} + +func filterRoots(roots []gopathwalk.Root, include func(gopathwalk.Root) bool) []gopathwalk.Root { + var result []gopathwalk.Root + for _, root := range roots { + if !include(root) { + continue + } + result = append(result, root) + } + return result +} + +func (r *gopathResolver) loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []stdlib.Symbol, error) { + if info, ok := r.cache.Load(pkg.dir); ok && !includeTest { + return r.cache.CacheExports(ctx, r.env, info) + } + return loadExportsFromFiles(ctx, r.env, pkg.dir, includeTest) +} + +// VendorlessPath returns the devendorized version of the import path ipath. +// For example, VendorlessPath("foo/bar/vendor/a/b") returns "a/b". +func VendorlessPath(ipath string) string { + // Devendorize for use in import statement. + if i := strings.LastIndex(ipath, "/vendor/"); i >= 0 { + return ipath[i+len("/vendor/"):] + } + if strings.HasPrefix(ipath, "vendor/") { + return ipath[len("vendor/"):] + } + return ipath +} + +func loadExportsFromFiles(ctx context.Context, env *ProcessEnv, dir string, includeTest bool) (string, []stdlib.Symbol, error) { + // Look for non-test, buildable .go files which could provide exports. + all, err := os.ReadDir(dir) + if err != nil { + return "", nil, err + } + var files []fs.DirEntry + for _, fi := range all { + name := fi.Name() + if !strings.HasSuffix(name, ".go") || (!includeTest && strings.HasSuffix(name, "_test.go")) { + continue + } + match, err := env.matchFile(dir, fi.Name()) + if err != nil || !match { + continue + } + files = append(files, fi) + } + + if len(files) == 0 { + return "", nil, fmt.Errorf("dir %v contains no buildable, non-test .go files", dir) + } + + var pkgName string + var exports []stdlib.Symbol + fset := token.NewFileSet() + for _, fi := range files { + select { + case <-ctx.Done(): + return "", nil, ctx.Err() + default: + } + + fullFile := filepath.Join(dir, fi.Name()) + // Legacy ast.Object resolution is needed here. + f, err := parser.ParseFile(fset, fullFile, nil, 0) + if err != nil { + env.logf("error parsing %v: %v", fullFile, err) + continue + } + if f.Name.Name == "documentation" { + // Special case from go/build.ImportDir, not + // handled by MatchFile above. + continue + } + if includeTest && strings.HasSuffix(f.Name.Name, "_test") { + // x_test package. We want internal test files only. + continue + } + pkgName = f.Name.Name + for name, obj := range f.Scope.Objects { + if ast.IsExported(name) { + var kind stdlib.Kind + switch obj.Kind { + case ast.Con: + kind = stdlib.Const + case ast.Typ: + kind = stdlib.Type + case ast.Var: + kind = stdlib.Var + case ast.Fun: + kind = stdlib.Func + } + exports = append(exports, stdlib.Symbol{ + Name: name, + Kind: kind, + Version: 0, // unknown; be permissive + }) + } + } + } + sortSymbols(exports) + + env.logf("loaded exports in dir %v (package %v): %v", dir, pkgName, exports) + return pkgName, exports, nil +} + +func sortSymbols(syms []stdlib.Symbol) { + sort.Slice(syms, func(i, j int) bool { + return syms[i].Name < syms[j].Name + }) +} + +// A symbolSearcher searches for a package with a set of symbols, among a set +// of candidates. See [symbolSearcher.search]. +// +// The search occurs within the scope of a single file, with context captured +// in srcDir and xtest. +type symbolSearcher struct { + logf func(string, ...any) + srcDir string // directory containing the file + xtest bool // if set, the file containing is an x_test file + loadExports func(ctx context.Context, pkg *pkg, includeTest bool) (string, []stdlib.Symbol, error) +} + +// search searches the provided candidates for a package containing all +// exported symbols. +// +// If successful, returns the resulting package. +func (s *symbolSearcher) search(ctx context.Context, candidates []pkgDistance, pkgName string, symbols map[string]bool) (*pkg, error) { + // Sort the candidates by their import package length, + // assuming that shorter package names are better than long + // ones. Note that this sorts by the de-vendored name, so + // there's no "penalty" for vendoring. + sort.Sort(byDistanceOrImportPathShortLength(candidates)) + if s.logf != nil { + for i, c := range candidates { + s.logf("%s candidate %d/%d: %v in %v", pkgName, i+1, len(candidates), c.pkg.importPathShort, c.pkg.dir) + } + } + + // Arrange rescv so that we can we can await results in order of relevance + // and exit as soon as we find the first match. + // + // Search with bounded concurrency, returning as soon as the first result + // among rescv is non-nil. + rescv := make([]chan *pkg, len(candidates)) + for i := range candidates { + rescv[i] = make(chan *pkg, 1) + } + const maxConcurrentPackageImport = 4 + loadExportsSem := make(chan struct{}, maxConcurrentPackageImport) + + // Ensure that all work is completed at exit. + ctx, cancel := context.WithCancel(ctx) + var wg sync.WaitGroup + defer func() { + cancel() + wg.Wait() + }() + + // Start the search. + wg.Add(1) + go func() { + defer wg.Done() + for i, c := range candidates { + select { + case loadExportsSem <- struct{}{}: + case <-ctx.Done(): + return + } + + i := i + c := c + wg.Add(1) + go func() { + defer func() { + <-loadExportsSem + wg.Done() + }() + if s.logf != nil { + s.logf("loading exports in dir %s (seeking package %s)", c.pkg.dir, pkgName) + } + pkg, err := s.searchOne(ctx, c, symbols) + if err != nil { + if s.logf != nil && ctx.Err() == nil { + s.logf("loading exports in dir %s (seeking package %s): %v", c.pkg.dir, pkgName, err) + } + pkg = nil + } + rescv[i] <- pkg // may be nil + }() + } + }() + + // Await the first (best) result. + for _, resc := range rescv { + select { + case r := <-resc: + if r != nil { + return r, nil + } + case <-ctx.Done(): + return nil, ctx.Err() + } + } + return nil, nil +} + +func (s *symbolSearcher) searchOne(ctx context.Context, c pkgDistance, symbols map[string]bool) (*pkg, error) { + if ctx.Err() != nil { + return nil, ctx.Err() + } + // If we're considering the package under test from an x_test, load the + // test variant. + includeTest := s.xtest && c.pkg.dir == s.srcDir + _, exports, err := s.loadExports(ctx, c.pkg, includeTest) + if err != nil { + return nil, err + } + + exportsMap := make(map[string]bool, len(exports)) + for _, sym := range exports { + exportsMap[sym.Name] = true + } + for symbol := range symbols { + if !exportsMap[symbol] { + return nil, nil // no match + } + } + return c.pkg, nil +} + +// pkgIsCandidate reports whether pkg is a candidate for satisfying the +// finding which package pkgIdent in the file named by filename is trying +// to refer to. +// +// This check is purely lexical and is meant to be as fast as possible +// because it's run over all $GOPATH directories to filter out poor +// candidates in order to limit the CPU and I/O later parsing the +// exports in candidate packages. +// +// filename is the file being formatted. +// pkgIdent is the package being searched for, like "client" (if +// searching for "client.New") +func pkgIsCandidate(filename string, refs References, pkg *pkg) bool { + // Check "internal" and "vendor" visibility: + if !CanUse(filename, pkg.dir) { + return false + } + + // Speed optimization to minimize disk I/O: + // + // Use the matchesPath heuristic to filter to package paths that could + // reasonably match a dangling reference. + // + // This permits mismatch naming like directory "go-foo" being package "foo", + // or "pkg.v3" being "pkg", or directory + // "google.golang.org/api/cloudbilling/v1" being package "cloudbilling", but + // doesn't permit a directory "foo" to be package "bar", which is strongly + // discouraged anyway. There's no reason goimports needs to be slow just to + // accommodate that. + for pkgIdent := range refs { + if matchesPath(pkgIdent, pkg.importPathShort) { + return true + } + } + return false +} + +// CanUse reports whether the package in dir is usable from filename, +// respecting the Go "internal" and "vendor" visibility rules. +func CanUse(filename, dir string) bool { + // Fast path check, before any allocations. If it doesn't contain vendor + // or internal, it's not tricky: + // Note that this can false-negative on directories like "notinternal", + // but we check it correctly below. This is just a fast path. + if !strings.Contains(dir, "vendor") && !strings.Contains(dir, "internal") { + return true + } + + dirSlash := filepath.ToSlash(dir) + if !strings.Contains(dirSlash, "/vendor/") && !strings.Contains(dirSlash, "/internal/") && !strings.HasSuffix(dirSlash, "/internal") { + return true + } + // Vendor or internal directory only visible from children of parent. + // That means the path from the current directory to the target directory + // can contain ../vendor or ../internal but not ../foo/vendor or ../foo/internal + // or bar/vendor or bar/internal. + // After stripping all the leading ../, the only okay place to see vendor or internal + // is at the very beginning of the path. + absfile, err := filepath.Abs(filename) + if err != nil { + return false + } + absdir, err := filepath.Abs(dir) + if err != nil { + return false + } + rel, err := filepath.Rel(absfile, absdir) + if err != nil { + return false + } + relSlash := filepath.ToSlash(rel) + if i := strings.LastIndex(relSlash, "../"); i >= 0 { + relSlash = relSlash[i+len("../"):] + } + return !strings.Contains(relSlash, "/vendor/") && !strings.Contains(relSlash, "/internal/") && !strings.HasSuffix(relSlash, "/internal") +} + +// matchesPath reports whether ident may match a potential package name +// referred to by path, using heuristics to filter out unidiomatic package +// names. +// +// Specifically, it checks whether either of the last two '/'- or '\'-delimited +// path segments matches the identifier. The segment-matching heuristic must +// allow for various conventions around segment naming, including go-foo, +// foo-go, and foo.v3. To handle all of these, matching considers both (1) the +// entire segment, ignoring '-' and '.', as well as (2) the last subsegment +// separated by '-' or '.'. So the segment foo-go matches all of the following +// identifiers: foo, go, and foogo. All matches are case insensitive (for ASCII +// identifiers). +// +// See the docstring for [pkgIsCandidate] for an explanation of how this +// heuristic filters potential candidate packages. +func matchesPath(ident, path string) bool { + // Ignore case, for ASCII. + lowerIfASCII := func(b byte) byte { + if 'A' <= b && b <= 'Z' { + return b + ('a' - 'A') + } + return b + } + + // match reports whether path[start:end] matches ident, ignoring [.-]. + match := func(start, end int) bool { + ii := len(ident) - 1 // current byte in ident + pi := end - 1 // current byte in path + for ; pi >= start && ii >= 0; pi-- { + pb := path[pi] + if pb == '-' || pb == '.' { + continue + } + pb = lowerIfASCII(pb) + ib := lowerIfASCII(ident[ii]) + if pb != ib { + return false + } + ii-- + } + return ii < 0 && pi < start // all bytes matched + } + + // segmentEnd and subsegmentEnd hold the end points of the current segment + // and subsegment intervals. + segmentEnd := len(path) + subsegmentEnd := len(path) + + // Count slashes; we only care about the last two segments. + nslash := 0 + + for i := len(path) - 1; i >= 0; i-- { + switch b := path[i]; b { + // TODO(rfindley): we handle backlashes here only because the previous + // heuristic handled backslashes. This is perhaps overly defensive, but is + // the result of many lessons regarding Chesterton's fence and the + // goimports codebase. + // + // However, this function is only ever called with something called an + // 'importPath'. Is it possible that this is a real import path, and + // therefore we need only consider forward slashes? + case '/', '\\': + if match(i+1, segmentEnd) || match(i+1, subsegmentEnd) { + return true + } + nslash++ + if nslash == 2 { + return false // did not match above + } + segmentEnd, subsegmentEnd = i, i // reset + case '-', '.': + if match(i+1, subsegmentEnd) { + return true + } + subsegmentEnd = i + } + } + return match(0, segmentEnd) || match(0, subsegmentEnd) +} + +type visitFn func(node ast.Node) ast.Visitor + +func (fn visitFn) Visit(node ast.Node) ast.Visitor { + return fn(node) +} + +func symbolNameSet(symbols []stdlib.Symbol) map[string]bool { + names := make(map[string]bool) + for _, sym := range symbols { + switch sym.Kind { + case stdlib.Const, stdlib.Var, stdlib.Type, stdlib.Func: + names[sym.Name] = true + } + } + return names +} diff --git a/vendor/golang.org/x/tools/internal/imports/imports.go b/vendor/golang.org/x/tools/internal/imports/imports.go new file mode 100644 index 0000000..b5f5218 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/imports/imports.go @@ -0,0 +1,359 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package imports implements a Go pretty-printer (like package "go/format") +// that also adds or removes import statements as necessary. +package imports + +import ( + "bufio" + "bytes" + "context" + "fmt" + "go/ast" + "go/format" + "go/parser" + "go/printer" + "go/token" + "io" + "regexp" + "strconv" + "strings" + + "golang.org/x/tools/go/ast/astutil" + "golang.org/x/tools/internal/event" +) + +// Options is golang.org/x/tools/imports.Options with extra internal-only options. +type Options struct { + Env *ProcessEnv // The environment to use. Note: this contains the cached module and filesystem state. + + // LocalPrefix is a comma-separated string of import path prefixes, which, if + // set, instructs Process to sort the import paths with the given prefixes + // into another group after 3rd-party packages. + LocalPrefix string + + Fragment bool // Accept fragment of a source file (no package statement) + AllErrors bool // Report all errors (not just the first 10 on different lines) + + Comments bool // Print comments (true if nil *Options provided) + TabIndent bool // Use tabs for indent (true if nil *Options provided) + TabWidth int // Tab width (8 if nil *Options provided) + + FormatOnly bool // Disable the insertion and deletion of imports +} + +// Process implements golang.org/x/tools/imports.Process with explicit context in opt.Env. +func Process(filename string, src []byte, opt *Options) (formatted []byte, err error) { + fileSet := token.NewFileSet() + var parserMode parser.Mode + if opt.Comments { + parserMode |= parser.ParseComments + } + if opt.AllErrors { + parserMode |= parser.AllErrors + } + file, adjust, err := parse(fileSet, filename, src, parserMode, opt.Fragment) + if err != nil { + return nil, err + } + + if !opt.FormatOnly { + if err := fixImports(fileSet, file, filename, opt.Env); err != nil { + return nil, err + } + } + return formatFile(fileSet, file, src, adjust, opt) +} + +// FixImports returns a list of fixes to the imports that, when applied, +// will leave the imports in the same state as Process. src and opt must +// be specified. +// +// Note that filename's directory influences which imports can be chosen, +// so it is important that filename be accurate. +func FixImports(ctx context.Context, filename string, src []byte, goroot string, logf func(string, ...any), source Source) (fixes []*ImportFix, err error) { + ctx, done := event.Start(ctx, "imports.FixImports") + defer done() + + fileSet := token.NewFileSet() + // TODO(rfindley): these default values for ParseComments and AllErrors were + // extracted from gopls, but are they even needed? + file, _, err := parse(fileSet, filename, src, parser.ParseComments|parser.AllErrors, true) + if err != nil { + return nil, err + } + + return getFixesWithSource(ctx, fileSet, file, filename, goroot, logf, source) +} + +// ApplyFixes applies all of the fixes to the file and formats it. extraMode +// is added in when parsing the file. src and opts must be specified, but no +// env is needed. +func ApplyFixes(fixes []*ImportFix, filename string, src []byte, opt *Options, extraMode parser.Mode) (formatted []byte, err error) { + // Don't use parse() -- we don't care about fragments or statement lists + // here, and we need to work with unparsable files. + fileSet := token.NewFileSet() + parserMode := parser.SkipObjectResolution + if opt.Comments { + parserMode |= parser.ParseComments + } + if opt.AllErrors { + parserMode |= parser.AllErrors + } + parserMode |= extraMode + + file, err := parser.ParseFile(fileSet, filename, src, parserMode) + if file == nil { + return nil, err + } + + // Apply the fixes to the file. + apply(fileSet, file, fixes) + + return formatFile(fileSet, file, src, nil, opt) +} + +// formatFile formats the file syntax tree. +// It may mutate the token.FileSet and the ast.File. +// +// If an adjust function is provided, it is called after formatting +// with the original source (formatFile's src parameter) and the +// formatted file, and returns the postpocessed result. +func formatFile(fset *token.FileSet, file *ast.File, src []byte, adjust func(orig []byte, src []byte) []byte, opt *Options) ([]byte, error) { + mergeImports(file) + sortImports(opt.LocalPrefix, fset.File(file.FileStart), file) + var spacesBefore []string // import paths we need spaces before + for _, impSection := range astutil.Imports(fset, file) { + // Within each block of contiguous imports, see if any + // import lines are in different group numbers. If so, + // we'll need to put a space between them so it's + // compatible with gofmt. + lastGroup := -1 + for _, importSpec := range impSection { + importPath, _ := strconv.Unquote(importSpec.Path.Value) + groupNum := importGroup(opt.LocalPrefix, importPath) + if groupNum != lastGroup && lastGroup != -1 { + spacesBefore = append(spacesBefore, importPath) + } + lastGroup = groupNum + } + + } + + printerMode := printer.UseSpaces + if opt.TabIndent { + printerMode |= printer.TabIndent + } + printConfig := &printer.Config{Mode: printerMode, Tabwidth: opt.TabWidth} + + var buf bytes.Buffer + err := printConfig.Fprint(&buf, fset, file) + if err != nil { + return nil, err + } + out := buf.Bytes() + if adjust != nil { + out = adjust(src, out) + } + if len(spacesBefore) > 0 { + out, err = addImportSpaces(bytes.NewReader(out), spacesBefore) + if err != nil { + return nil, err + } + } + + out, err = format.Source(out) + if err != nil { + return nil, err + } + return out, nil +} + +// parse parses src, which was read from filename, +// as a Go source file or statement list. +func parse(fset *token.FileSet, filename string, src []byte, parserMode parser.Mode, fragment bool) (*ast.File, func(orig, src []byte) []byte, error) { + if parserMode&parser.SkipObjectResolution != 0 { + panic("legacy ast.Object resolution is required") + } + + // Try as whole source file. + file, err := parser.ParseFile(fset, filename, src, parserMode) + if err == nil { + return file, nil, nil + } + // If the error is that the source file didn't begin with a + // package line and we accept fragmented input, fall through to + // try as a source fragment. Stop and return on any other error. + if !fragment || !strings.Contains(err.Error(), "expected 'package'") { + return nil, nil, err + } + + // If this is a declaration list, make it a source file + // by inserting a package clause. + // Insert using a ;, not a newline, so that parse errors are on + // the correct line. + const prefix = "package main;" + psrc := append([]byte(prefix), src...) + file, err = parser.ParseFile(fset, filename, psrc, parserMode) + if err == nil { + // Gofmt will turn the ; into a \n. + // Do that ourselves now and update the file contents, + // so that positions and line numbers are correct going forward. + psrc[len(prefix)-1] = '\n' + fset.File(file.Package).SetLinesForContent(psrc) + + // If a main function exists, we will assume this is a main + // package and leave the file. + if containsMainFunc(file) { + return file, nil, nil + } + + adjust := func(orig, src []byte) []byte { + // Remove the package clause. + src = src[len(prefix):] + return matchSpace(orig, src) + } + return file, adjust, nil + } + // If the error is that the source file didn't begin with a + // declaration, fall through to try as a statement list. + // Stop and return on any other error. + if !strings.Contains(err.Error(), "expected declaration") { + return nil, nil, err + } + + // If this is a statement list, make it a source file + // by inserting a package clause and turning the list + // into a function body. This handles expressions too. + // Insert using a ;, not a newline, so that the line numbers + // in fsrc match the ones in src. + fsrc := append(append([]byte("package p; func _() {"), src...), '}') + file, err = parser.ParseFile(fset, filename, fsrc, parserMode) + if err == nil { + adjust := func(orig, src []byte) []byte { + // Remove the wrapping. + // Gofmt has turned the ; into a \n\n. + src = src[len("package p\n\nfunc _() {"):] + src = src[:len(src)-len("}\n")] + // Gofmt has also indented the function body one level. + // Remove that indent. + src = bytes.ReplaceAll(src, []byte("\n\t"), []byte("\n")) + return matchSpace(orig, src) + } + return file, adjust, nil + } + + // Failed, and out of options. + return nil, nil, err +} + +// containsMainFunc checks if a file contains a function declaration with the +// function signature 'func main()' +func containsMainFunc(file *ast.File) bool { + for _, decl := range file.Decls { + if f, ok := decl.(*ast.FuncDecl); ok { + if f.Name.Name != "main" { + continue + } + + if len(f.Type.Params.List) != 0 { + continue + } + + if f.Type.Results != nil && len(f.Type.Results.List) != 0 { + continue + } + + return true + } + } + + return false +} + +func cutSpace(b []byte) (before, middle, after []byte) { + i := 0 + for i < len(b) && (b[i] == ' ' || b[i] == '\t' || b[i] == '\n') { + i++ + } + j := len(b) + for j > 0 && (b[j-1] == ' ' || b[j-1] == '\t' || b[j-1] == '\n') { + j-- + } + if i <= j { + return b[:i], b[i:j], b[j:] + } + return nil, nil, b[j:] +} + +// matchSpace reformats src to use the same space context as orig. +// 1. If orig begins with blank lines, matchSpace inserts them at the beginning of src. +// 2. matchSpace copies the indentation of the first non-blank line in orig +// to every non-blank line in src. +// 3. matchSpace copies the trailing space from orig and uses it in place +// of src's trailing space. +func matchSpace(orig []byte, src []byte) []byte { + before, _, after := cutSpace(orig) + i := bytes.LastIndex(before, []byte{'\n'}) + before, indent := before[:i+1], before[i+1:] + + _, src, _ = cutSpace(src) + + var b bytes.Buffer + b.Write(before) + for len(src) > 0 { + line := src + if i := bytes.IndexByte(line, '\n'); i >= 0 { + line, src = line[:i+1], line[i+1:] + } else { + src = nil + } + if len(line) > 0 && line[0] != '\n' { // not blank + b.Write(indent) + } + b.Write(line) + } + b.Write(after) + return b.Bytes() +} + +var impLine = regexp.MustCompile(`^\s+(?:[\w\.]+\s+)?"(.+?)"`) + +func addImportSpaces(r io.Reader, breaks []string) ([]byte, error) { + var out bytes.Buffer + in := bufio.NewReader(r) + inImports := false + done := false + for { + s, err := in.ReadString('\n') + if err == io.EOF { + break + } else if err != nil { + return nil, err + } + + if !inImports && !done && strings.HasPrefix(s, "import") { + inImports = true + } + if inImports && (strings.HasPrefix(s, "var") || + strings.HasPrefix(s, "func") || + strings.HasPrefix(s, "const") || + strings.HasPrefix(s, "type")) { + done = true + inImports = false + } + if inImports && len(breaks) > 0 { + if m := impLine.FindStringSubmatch(s); m != nil { + if m[1] == breaks[0] { + out.WriteByte('\n') + breaks = breaks[1:] + } + } + } + + fmt.Fprint(&out, s) + } + return out.Bytes(), nil +} diff --git a/vendor/golang.org/x/tools/internal/imports/mod.go b/vendor/golang.org/x/tools/internal/imports/mod.go new file mode 100644 index 0000000..df94ec8 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/imports/mod.go @@ -0,0 +1,841 @@ +// Copyright 2019 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 imports + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "os" + "path" + "path/filepath" + "regexp" + "slices" + "sort" + "strconv" + "strings" + + "golang.org/x/mod/module" + "golang.org/x/tools/internal/event" + "golang.org/x/tools/internal/gocommand" + "golang.org/x/tools/internal/gopathwalk" + "golang.org/x/tools/internal/stdlib" +) + +// Notes(rfindley): ModuleResolver appears to be heavily optimized for scanning +// as fast as possible, which is desirable for a call to goimports from the +// command line, but it doesn't work as well for gopls, where it suffers from +// slow startup (golang/go#44863) and intermittent hanging (golang/go#59216), +// both caused by populating the cache, albeit in slightly different ways. +// +// A high level list of TODOs: +// - Optimize the scan itself, as there is some redundancy statting and +// reading go.mod files. +// - Invert the relationship between ProcessEnv and Resolver (see the +// docstring of ProcessEnv). +// - Make it easier to use an external resolver implementation. +// +// Smaller TODOs are annotated in the code below. + +// ModuleResolver implements the Resolver interface for a workspace using +// modules. +// +// A goal of the ModuleResolver is to invoke the Go command as little as +// possible. To this end, it runs the Go command only for listing module +// information (i.e. `go list -m -e -json ...`). Package scanning, the process +// of loading package information for the modules, is implemented internally +// via the scan method. +// +// It has two types of state: the state derived from the go command, which +// is populated by init, and the state derived from scans, which is populated +// via scan. A root is considered scanned if it has been walked to discover +// directories. However, if the scan did not require additional information +// from the directory (such as package name or exports), the directory +// information itself may be partially populated. It will be lazily filled in +// as needed by scans, using the scanCallback. +type ModuleResolver struct { + env *ProcessEnv + + // Module state, populated during construction + dummyVendorMod *gocommand.ModuleJSON // if vendoring is enabled, a pseudo-module to represent the /vendor directory + moduleCacheDir string // GOMODCACHE, inferred from GOPATH if unset + roots []gopathwalk.Root // roots to scan, in approximate order of importance + mains []*gocommand.ModuleJSON // main modules + mainByDir map[string]*gocommand.ModuleJSON // module information by dir, to join with roots + modsByModPath []*gocommand.ModuleJSON // all modules, ordered by # of path components in their module path + modsByDir []*gocommand.ModuleJSON // ...or by the number of path components in their Dir. + + // Scanning state, populated by scan + + // scanSema prevents concurrent scans, and guards scannedRoots and the cache + // fields below (though the caches themselves are concurrency safe). + // Receive to acquire, send to release. + scanSema chan struct{} + scannedRoots map[gopathwalk.Root]bool // if true, root has been walked + + // Caches of directory info, populated by scans and scan callbacks + // + // moduleCacheCache stores cached information about roots in the module + // cache, which are immutable and therefore do not need to be invalidated. + // + // otherCache stores information about all other roots (even GOROOT), which + // may change. + moduleCacheCache *DirInfoCache + otherCache *DirInfoCache +} + +// newModuleResolver returns a new module-aware goimports resolver. +// +// Note: use caution when modifying this constructor: changes must also be +// reflected in ModuleResolver.ClearForNewScan. +func newModuleResolver(e *ProcessEnv, moduleCacheCache *DirInfoCache) (*ModuleResolver, error) { + r := &ModuleResolver{ + env: e, + scanSema: make(chan struct{}, 1), + } + r.scanSema <- struct{}{} // release + + goenv, err := r.env.goEnv() + if err != nil { + return nil, err + } + + // TODO(rfindley): can we refactor to share logic with r.env.invokeGo? + inv := gocommand.Invocation{ + BuildFlags: r.env.BuildFlags, + ModFlag: r.env.ModFlag, + Env: r.env.env(), + Logf: r.env.Logf, + WorkingDir: r.env.WorkingDir, + } + + vendorEnabled := false + var mainModVendor *gocommand.ModuleJSON // for module vendoring + var mainModsVendor []*gocommand.ModuleJSON // for workspace vendoring + + goWork := r.env.Env["GOWORK"] + if len(goWork) == 0 { + // TODO(rfindley): VendorEnabled runs the go command to get GOFLAGS, but + // they should be available from the ProcessEnv. Can we avoid the redundant + // invocation? + vendorEnabled, mainModVendor, err = gocommand.VendorEnabled(context.TODO(), inv, r.env.GocmdRunner) + if err != nil { + return nil, err + } + } else { + vendorEnabled, mainModsVendor, err = gocommand.WorkspaceVendorEnabled(context.Background(), inv, r.env.GocmdRunner) + if err != nil { + return nil, err + } + } + + if vendorEnabled { + if mainModVendor != nil { + // Module vendor mode is on, so all the non-Main modules are irrelevant, + // and we need to search /vendor for everything. + r.mains = []*gocommand.ModuleJSON{mainModVendor} + r.dummyVendorMod = &gocommand.ModuleJSON{ + Path: "", + Dir: filepath.Join(mainModVendor.Dir, "vendor"), + } + r.modsByModPath = []*gocommand.ModuleJSON{mainModVendor, r.dummyVendorMod} + r.modsByDir = []*gocommand.ModuleJSON{mainModVendor, r.dummyVendorMod} + } else { + // Workspace vendor mode is on, so all the non-Main modules are irrelevant, + // and we need to search /vendor for everything. + r.mains = mainModsVendor + r.dummyVendorMod = &gocommand.ModuleJSON{ + Path: "", + Dir: filepath.Join(filepath.Dir(goWork), "vendor"), + } + r.modsByModPath = append(slices.Clone(mainModsVendor), r.dummyVendorMod) + r.modsByDir = append(slices.Clone(mainModsVendor), r.dummyVendorMod) + } + } else { + // Vendor mode is off, so run go list -m ... to find everything. + err := r.initAllMods() + // We expect an error when running outside of a module with + // GO111MODULE=on. Other errors are fatal. + if err != nil { + if errMsg := err.Error(); !strings.Contains(errMsg, "working directory is not part of a module") && !strings.Contains(errMsg, "go.mod file not found") { + return nil, err + } + } + } + + r.moduleCacheDir = gomodcacheForEnv(goenv) + if r.moduleCacheDir == "" { + return nil, fmt.Errorf("cannot resolve GOMODCACHE") + } + + sort.Slice(r.modsByModPath, func(i, j int) bool { + count := func(x int) int { + return strings.Count(r.modsByModPath[x].Path, "/") + } + return count(j) < count(i) // descending order + }) + sort.Slice(r.modsByDir, func(i, j int) bool { + count := func(x int) int { + return strings.Count(r.modsByDir[x].Dir, string(filepath.Separator)) + } + return count(j) < count(i) // descending order + }) + + r.roots = []gopathwalk.Root{} + if goenv["GOROOT"] != "" { // "" happens in tests + r.roots = append(r.roots, gopathwalk.Root{Path: filepath.Join(goenv["GOROOT"], "/src"), Type: gopathwalk.RootGOROOT}) + } + r.mainByDir = make(map[string]*gocommand.ModuleJSON) + for _, main := range r.mains { + r.roots = append(r.roots, gopathwalk.Root{Path: main.Dir, Type: gopathwalk.RootCurrentModule}) + r.mainByDir[main.Dir] = main + } + if vendorEnabled { + r.roots = append(r.roots, gopathwalk.Root{Path: r.dummyVendorMod.Dir, Type: gopathwalk.RootOther}) + } else { + addDep := func(mod *gocommand.ModuleJSON) { + if mod.Replace == nil { + // This is redundant with the cache, but we'll skip it cheaply enough + // when we encounter it in the module cache scan. + // + // Including it at a lower index in r.roots than the module cache dir + // helps prioritize matches from within existing dependencies. + r.roots = append(r.roots, gopathwalk.Root{Path: mod.Dir, Type: gopathwalk.RootModuleCache}) + } else { + r.roots = append(r.roots, gopathwalk.Root{Path: mod.Dir, Type: gopathwalk.RootOther}) + } + } + // Walk dependent modules before scanning the full mod cache, direct deps first. + for _, mod := range r.modsByModPath { + if !mod.Indirect && !mod.Main { + addDep(mod) + } + } + for _, mod := range r.modsByModPath { + if mod.Indirect && !mod.Main { + addDep(mod) + } + } + // If provided, share the moduleCacheCache. + // + // TODO(rfindley): The module cache is immutable. However, the loaded + // exports do depend on GOOS and GOARCH. Fortunately, the + // ProcessEnv.buildContext does not adjust these from build.DefaultContext + // (even though it should). So for now, this is OK to share, but we need to + // add logic for handling GOOS/GOARCH. + r.moduleCacheCache = moduleCacheCache + r.roots = append(r.roots, gopathwalk.Root{Path: r.moduleCacheDir, Type: gopathwalk.RootModuleCache}) + } + + r.scannedRoots = map[gopathwalk.Root]bool{} + if r.moduleCacheCache == nil { + r.moduleCacheCache = NewDirInfoCache() + } + r.otherCache = NewDirInfoCache() + return r, nil +} + +// gomodcacheForEnv returns the GOMODCACHE value to use based on the given env +// map, which must have GOMODCACHE and GOPATH populated. +// +// TODO(rfindley): this is defensive refactoring. +// 1. Is this even relevant anymore? Can't we just read GOMODCACHE. +// 2. Use this to separate module cache scanning from other scanning. +func gomodcacheForEnv(goenv map[string]string) string { + if gmc := goenv["GOMODCACHE"]; gmc != "" { + // golang/go#67156: ensure that the module cache is clean, since it is + // assumed as a prefix to directories scanned by gopathwalk, which are + // themselves clean. + return filepath.Clean(gmc) + } + gopaths := filepath.SplitList(goenv["GOPATH"]) + if len(gopaths) == 0 { + return "" + } + return filepath.Join(gopaths[0], "/pkg/mod") +} + +func (r *ModuleResolver) initAllMods() error { + stdout, err := r.env.invokeGo(context.TODO(), "list", "-m", "-e", "-json", "...") + if err != nil { + return err + } + for dec := json.NewDecoder(stdout); dec.More(); { + mod := &gocommand.ModuleJSON{} + if err := dec.Decode(mod); err != nil { + return err + } + if mod.Dir == "" { + r.env.logf("module %v has not been downloaded and will be ignored", mod.Path) + // Can't do anything with a module that's not downloaded. + continue + } + // golang/go#36193: the go command doesn't always clean paths. + mod.Dir = filepath.Clean(mod.Dir) + r.modsByModPath = append(r.modsByModPath, mod) + r.modsByDir = append(r.modsByDir, mod) + if mod.Main { + r.mains = append(r.mains, mod) + } + } + return nil +} + +// ClearForNewScan invalidates the last scan. +// +// It preserves the set of roots, but forgets about the set of directories. +// Though it forgets the set of module cache directories, it remembers their +// contents, since they are assumed to be immutable. +func (r *ModuleResolver) ClearForNewScan() Resolver { + <-r.scanSema // acquire r, to guard scannedRoots + r2 := &ModuleResolver{ + env: r.env, + dummyVendorMod: r.dummyVendorMod, + moduleCacheDir: r.moduleCacheDir, + roots: r.roots, + mains: r.mains, + mainByDir: r.mainByDir, + modsByModPath: r.modsByModPath, + + scanSema: make(chan struct{}, 1), + scannedRoots: make(map[gopathwalk.Root]bool), + otherCache: NewDirInfoCache(), + moduleCacheCache: r.moduleCacheCache, + } + r2.scanSema <- struct{}{} // r2 must start released + // Invalidate root scans. We don't need to invalidate module cache roots, + // because they are immutable. + // (We don't support a use case where GOMODCACHE is cleaned in the middle of + // e.g. a gopls session: the user must restart gopls to get accurate + // imports.) + // + // Scanning for new directories in GOMODCACHE should be handled elsewhere, + // via a call to ScanModuleCache. + for _, root := range r.roots { + if root.Type == gopathwalk.RootModuleCache && r.scannedRoots[root] { + r2.scannedRoots[root] = true + } + } + r.scanSema <- struct{}{} // release r + return r2 +} + +// ClearModuleInfo invalidates resolver state that depends on go.mod file +// contents (essentially, the output of go list -m -json ...). +// +// Notably, it does not forget directory contents, which are reset +// asynchronously via ClearForNewScan. +// +// If the ProcessEnv is a GOPATH environment, ClearModuleInfo is a no op. +// +// TODO(rfindley): move this to a new env.go, consolidating ProcessEnv methods. +func (e *ProcessEnv) ClearModuleInfo() { + if r, ok := e.resolver.(*ModuleResolver); ok { + resolver, err := newModuleResolver(e, e.ModCache) + if err != nil { + e.resolver = nil + e.resolverErr = err + return + } + + <-r.scanSema // acquire (guards caches) + resolver.moduleCacheCache = r.moduleCacheCache + resolver.otherCache = r.otherCache + r.scanSema <- struct{}{} // release + + e.UpdateResolver(resolver) + } +} + +// UpdateResolver sets the resolver for the ProcessEnv to use in imports +// operations. Only for use with the result of [Resolver.ClearForNewScan]. +// +// TODO(rfindley): this awkward API is a result of the (arguably) inverted +// relationship between configuration and state described in the doc comment +// for [ProcessEnv]. +func (e *ProcessEnv) UpdateResolver(r Resolver) { + e.resolver = r + e.resolverErr = nil +} + +// findPackage returns the module and directory from within the main modules +// and their dependencies that contains the package at the given import path, +// or returns nil, "" if no module is in scope. +func (r *ModuleResolver) findPackage(importPath string) (*gocommand.ModuleJSON, string) { + // This can't find packages in the stdlib, but that's harmless for all + // the existing code paths. + for _, m := range r.modsByModPath { + if !strings.HasPrefix(importPath, m.Path) { + continue + } + pathInModule := importPath[len(m.Path):] + pkgDir := filepath.Join(m.Dir, pathInModule) + if r.dirIsNestedModule(pkgDir, m) { + continue + } + + if info, ok := r.cacheLoad(pkgDir); ok { + if loaded, err := info.reachedStatus(nameLoaded); loaded { + if err != nil { + continue // No package in this dir. + } + return m, pkgDir + } + if scanned, err := info.reachedStatus(directoryScanned); scanned && err != nil { + continue // Dir is unreadable, etc. + } + // This is slightly wrong: a directory doesn't have to have an + // importable package to count as a package for package-to-module + // resolution. package main or _test files should count but + // don't. + // TODO(heschi): fix this. + if _, err := r.cachePackageName(info); err == nil { + return m, pkgDir + } + } + + // Not cached. Read the filesystem. + pkgFiles, err := os.ReadDir(pkgDir) + if err != nil { + continue + } + // A module only contains a package if it has buildable go + // files in that directory. If not, it could be provided by an + // outer module. See #29736. + for _, fi := range pkgFiles { + if ok, _ := r.env.matchFile(pkgDir, fi.Name()); ok { + return m, pkgDir + } + } + } + return nil, "" +} + +func (r *ModuleResolver) cacheLoad(dir string) (directoryPackageInfo, bool) { + if info, ok := r.moduleCacheCache.Load(dir); ok { + return info, ok + } + return r.otherCache.Load(dir) +} + +func (r *ModuleResolver) cacheStore(info directoryPackageInfo) { + if info.rootType == gopathwalk.RootModuleCache { + r.moduleCacheCache.Store(info.dir, info) + } else { + r.otherCache.Store(info.dir, info) + } +} + +// cachePackageName caches the package name for a dir already in the cache. +func (r *ModuleResolver) cachePackageName(info directoryPackageInfo) (string, error) { + if info.rootType == gopathwalk.RootModuleCache { + return r.moduleCacheCache.CachePackageName(info) + } + return r.otherCache.CachePackageName(info) +} + +func (r *ModuleResolver) cacheExports(ctx context.Context, env *ProcessEnv, info directoryPackageInfo) (string, []stdlib.Symbol, error) { + if info.rootType == gopathwalk.RootModuleCache { + return r.moduleCacheCache.CacheExports(ctx, env, info) + } + return r.otherCache.CacheExports(ctx, env, info) +} + +// findModuleByDir returns the module that contains dir, or nil if no such +// module is in scope. +func (r *ModuleResolver) findModuleByDir(dir string) *gocommand.ModuleJSON { + // This is quite tricky and may not be correct. dir could be: + // - a package in the main module. + // - a replace target underneath the main module's directory. + // - a nested module in the above. + // - a replace target somewhere totally random. + // - a nested module in the above. + // - in the mod cache. + // - in /vendor/ in -mod=vendor mode. + // - nested module? Dunno. + // Rumor has it that replace targets cannot contain other replace targets. + // + // Note that it is critical here that modsByDir is sorted to have deeper dirs + // first. This ensures that findModuleByDir finds the innermost module. + // See also golang/go#56291. + for _, m := range r.modsByDir { + if !strings.HasPrefix(dir, m.Dir) { + continue + } + + if r.dirIsNestedModule(dir, m) { + continue + } + + return m + } + return nil +} + +// dirIsNestedModule reports if dir is contained in a nested module underneath +// mod, not actually in mod. +func (r *ModuleResolver) dirIsNestedModule(dir string, mod *gocommand.ModuleJSON) bool { + if !strings.HasPrefix(dir, mod.Dir) { + return false + } + if r.dirInModuleCache(dir) { + // Nested modules in the module cache are pruned, + // so it cannot be a nested module. + return false + } + if mod != nil && mod == r.dummyVendorMod { + // The /vendor pseudomodule is flattened and doesn't actually count. + return false + } + modDir, _ := r.modInfo(dir) + if modDir == "" { + return false + } + return modDir != mod.Dir +} + +func readModName(modFile string) string { + modBytes, err := os.ReadFile(modFile) + if err != nil { + return "" + } + return modulePath(modBytes) +} + +func (r *ModuleResolver) modInfo(dir string) (modDir, modName string) { + if r.dirInModuleCache(dir) { + if matches := modCacheRegexp.FindStringSubmatch(dir); len(matches) == 3 { + index := strings.Index(dir, matches[1]+"@"+matches[2]) + modDir := filepath.Join(dir[:index], matches[1]+"@"+matches[2]) + return modDir, readModName(filepath.Join(modDir, "go.mod")) + } + } + for { + if info, ok := r.cacheLoad(dir); ok { + return info.moduleDir, info.moduleName + } + f := filepath.Join(dir, "go.mod") + info, err := os.Stat(f) + if err == nil && !info.IsDir() { + return dir, readModName(f) + } + + d := filepath.Dir(dir) + if len(d) >= len(dir) { + return "", "" // reached top of file system, no go.mod + } + dir = d + } +} + +func (r *ModuleResolver) dirInModuleCache(dir string) bool { + if r.moduleCacheDir == "" { + return false + } + return strings.HasPrefix(dir, r.moduleCacheDir) +} + +func (r *ModuleResolver) loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) { + names := map[string]string{} + for _, path := range importPaths { + // TODO(rfindley): shouldn't this use the dirInfoCache? + _, packageDir := r.findPackage(path) + if packageDir == "" { + continue + } + name, err := packageDirToName(packageDir) + if err != nil { + continue + } + names[path] = name + } + return names, nil +} + +func (r *ModuleResolver) scan(ctx context.Context, callback *scanCallback) error { + ctx, done := event.Start(ctx, "imports.ModuleResolver.scan") + defer done() + + processDir := func(info directoryPackageInfo) { + // Skip this directory if we were not able to get the package information successfully. + if scanned, err := info.reachedStatus(directoryScanned); !scanned || err != nil { + return + } + pkg, err := r.canonicalize(info) + if err != nil { + return + } + if !callback.dirFound(pkg) { + return + } + + pkg.packageName, err = r.cachePackageName(info) + if err != nil { + return + } + if !callback.packageNameLoaded(pkg) { + return + } + + _, exports, err := r.loadExports(ctx, pkg, false) + if err != nil { + return + } + callback.exportsLoaded(pkg, exports) + } + + // Start processing everything in the cache, and listen for the new stuff + // we discover in the walk below. + stop1 := r.moduleCacheCache.ScanAndListen(ctx, processDir) + defer stop1() + stop2 := r.otherCache.ScanAndListen(ctx, processDir) + defer stop2() + + // We assume cached directories are fully cached, including all their + // children, and have not changed. We can skip them. + skip := func(root gopathwalk.Root, dir string) bool { + if r.env.SkipPathInScan != nil && root.Type == gopathwalk.RootCurrentModule { + if root.Path == dir { + return false + } + + if r.env.SkipPathInScan(filepath.Clean(dir)) { + return true + } + } + + info, ok := r.cacheLoad(dir) + if !ok { + return false + } + // This directory can be skipped as long as we have already scanned it. + // Packages with errors will continue to have errors, so there is no need + // to rescan them. + packageScanned, _ := info.reachedStatus(directoryScanned) + return packageScanned + } + + add := func(root gopathwalk.Root, dir string) { + r.cacheStore(r.scanDirForPackage(root, dir)) + } + + // r.roots and the callback are not necessarily safe to use in the + // goroutine below. Process them eagerly. + roots := filterRoots(r.roots, callback.rootFound) + // We can't cancel walks, because we need them to finish to have a usable + // cache. Instead, run them in a separate goroutine and detach. + scanDone := make(chan struct{}) + go func() { + select { + case <-ctx.Done(): + return + case <-r.scanSema: // acquire + } + defer func() { r.scanSema <- struct{}{} }() // release + // We have the lock on r.scannedRoots, and no other scans can run. + for _, root := range roots { + if ctx.Err() != nil { + return + } + + if r.scannedRoots[root] { + continue + } + gopathwalk.WalkSkip([]gopathwalk.Root{root}, add, skip, gopathwalk.Options{Logf: r.env.Logf, ModulesEnabled: true}) + r.scannedRoots[root] = true + } + close(scanDone) + }() + select { + case <-ctx.Done(): + case <-scanDone: + } + return nil +} + +func (r *ModuleResolver) scoreImportPath(ctx context.Context, path string) float64 { + if stdlib.HasPackage(path) { + return MaxRelevance + } + mod, _ := r.findPackage(path) + return modRelevance(mod) +} + +func modRelevance(mod *gocommand.ModuleJSON) float64 { + var relevance float64 + switch { + case mod == nil: // out of scope + return MaxRelevance - 4 + case mod.Indirect: + relevance = MaxRelevance - 3 + case !mod.Main: + relevance = MaxRelevance - 2 + default: + relevance = MaxRelevance - 1 // main module ties with stdlib + } + + _, versionString, ok := module.SplitPathVersion(mod.Path) + if ok { + index := strings.Index(versionString, "v") + if index == -1 { + return relevance + } + if versionNumber, err := strconv.ParseFloat(versionString[index+1:], 64); err == nil { + relevance += versionNumber / 1000 + } + } + + return relevance +} + +// canonicalize gets the result of canonicalizing the packages using the results +// of initializing the resolver from 'go list -m'. +func (r *ModuleResolver) canonicalize(info directoryPackageInfo) (*pkg, error) { + // Packages in GOROOT are already canonical, regardless of the std/cmd modules. + if info.rootType == gopathwalk.RootGOROOT { + return &pkg{ + importPathShort: info.nonCanonicalImportPath, + dir: info.dir, + packageName: path.Base(info.nonCanonicalImportPath), + relevance: MaxRelevance, + }, nil + } + + importPath := info.nonCanonicalImportPath + mod := r.findModuleByDir(info.dir) + // Check if the directory is underneath a module that's in scope. + if mod != nil { + // It is. If dir is the target of a replace directive, + // our guessed import path is wrong. Use the real one. + if mod.Dir == info.dir { + importPath = mod.Path + } else { + dirInMod := info.dir[len(mod.Dir)+len("/"):] + importPath = path.Join(mod.Path, filepath.ToSlash(dirInMod)) + } + } else if !strings.HasPrefix(importPath, info.moduleName) { + // The module's name doesn't match the package's import path. It + // probably needs a replace directive we don't have. + return nil, fmt.Errorf("package in %q is not valid without a replace statement", info.dir) + } + + res := &pkg{ + importPathShort: importPath, + dir: info.dir, + relevance: modRelevance(mod), + } + // We may have discovered a package that has a different version + // in scope already. Canonicalize to that one if possible. + if _, canonicalDir := r.findPackage(importPath); canonicalDir != "" { + res.dir = canonicalDir + } + return res, nil +} + +func (r *ModuleResolver) loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []stdlib.Symbol, error) { + if info, ok := r.cacheLoad(pkg.dir); ok && !includeTest { + return r.cacheExports(ctx, r.env, info) + } + return loadExportsFromFiles(ctx, r.env, pkg.dir, includeTest) +} + +func (r *ModuleResolver) scanDirForPackage(root gopathwalk.Root, dir string) directoryPackageInfo { + subdir := "" + if prefix := root.Path + string(filepath.Separator); strings.HasPrefix(dir, prefix) { + subdir = dir[len(prefix):] + } + importPath := filepath.ToSlash(subdir) + if strings.HasPrefix(importPath, "vendor/") { + // Only enter vendor directories if they're explicitly requested as a root. + return directoryPackageInfo{ + status: directoryScanned, + err: fmt.Errorf("unwanted vendor directory"), + } + } + switch root.Type { + case gopathwalk.RootCurrentModule: + importPath = path.Join(r.mainByDir[root.Path].Path, filepath.ToSlash(subdir)) + case gopathwalk.RootModuleCache: + matches := modCacheRegexp.FindStringSubmatch(subdir) + if len(matches) == 0 { + return directoryPackageInfo{ + status: directoryScanned, + err: fmt.Errorf("invalid module cache path: %v", subdir), + } + } + modPath, err := module.UnescapePath(filepath.ToSlash(matches[1])) + if err != nil { + r.env.logf("decoding module cache path %q: %v", subdir, err) + return directoryPackageInfo{ + status: directoryScanned, + err: fmt.Errorf("decoding module cache path %q: %v", subdir, err), + } + } + importPath = path.Join(modPath, filepath.ToSlash(matches[3])) + } + + modDir, modName := r.modInfo(dir) + result := directoryPackageInfo{ + status: directoryScanned, + dir: dir, + rootType: root.Type, + nonCanonicalImportPath: importPath, + moduleDir: modDir, + moduleName: modName, + } + if root.Type == gopathwalk.RootGOROOT { + // stdlib packages are always in scope, despite the confusing go.mod + return result + } + return result +} + +// modCacheRegexp splits a path in a module cache into module, module version, and package. +var modCacheRegexp = regexp.MustCompile(`(.*)@([^/\\]*)(.*)`) + +var ( + slashSlash = []byte("//") + moduleStr = []byte("module") +) + +// modulePath returns the module path from the gomod file text. +// If it cannot find a module path, it returns an empty string. +// It is tolerant of unrelated problems in the go.mod file. +// +// Copied from cmd/go/internal/modfile. +func modulePath(mod []byte) string { + for len(mod) > 0 { + line := mod + mod = nil + if i := bytes.IndexByte(line, '\n'); i >= 0 { + line, mod = line[:i], line[i+1:] + } + if i := bytes.Index(line, slashSlash); i >= 0 { + line = line[:i] + } + line = bytes.TrimSpace(line) + if !bytes.HasPrefix(line, moduleStr) { + continue + } + line = line[len(moduleStr):] + n := len(line) + line = bytes.TrimSpace(line) + if len(line) == n || len(line) == 0 { + continue + } + + if line[0] == '"' || line[0] == '`' { + p, err := strconv.Unquote(string(line)) + if err != nil { + return "" // malformed quoted string or multiline module path + } + return p + } + + return string(line) + } + return "" // missing module path +} diff --git a/vendor/golang.org/x/tools/internal/imports/mod_cache.go b/vendor/golang.org/x/tools/internal/imports/mod_cache.go new file mode 100644 index 0000000..b96c9d4 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/imports/mod_cache.go @@ -0,0 +1,331 @@ +// Copyright 2019 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 imports + +import ( + "context" + "fmt" + "path" + "path/filepath" + "strings" + "sync" + + "golang.org/x/mod/module" + "golang.org/x/tools/internal/gopathwalk" + "golang.org/x/tools/internal/stdlib" +) + +// To find packages to import, the resolver needs to know about all of +// the packages that could be imported. This includes packages that are +// already in modules that are in (1) the current module, (2) replace targets, +// and (3) packages in the module cache. Packages in (1) and (2) may change over +// time, as the client may edit the current module and locally replaced modules. +// The module cache (which includes all of the packages in (3)) can only +// ever be added to. +// +// The resolver can thus save state about packages in the module cache +// and guarantee that this will not change over time. To obtain information +// about new modules added to the module cache, the module cache should be +// rescanned. +// +// It is OK to serve information about modules that have been deleted, +// as they do still exist. +// TODO(suzmue): can we share information with the caller about +// what module needs to be downloaded to import this package? + +type directoryPackageStatus int + +const ( + _ directoryPackageStatus = iota + directoryScanned + nameLoaded + exportsLoaded +) + +// directoryPackageInfo holds (possibly incomplete) information about packages +// contained in a given directory. +type directoryPackageInfo struct { + // status indicates the extent to which this struct has been filled in. + status directoryPackageStatus + // err is non-nil when there was an error trying to reach status. + err error + + // Set when status >= directoryScanned. + + // dir is the absolute directory of this package. + dir string + rootType gopathwalk.RootType + // nonCanonicalImportPath is the package's expected import path. It may + // not actually be importable at that path. + nonCanonicalImportPath string + + // Module-related information. + moduleDir string // The directory that is the module root of this dir. + moduleName string // The module name that contains this dir. + + // Set when status >= nameLoaded. + + packageName string // the package name, as declared in the source. + + // Set when status >= exportsLoaded. + // TODO(rfindley): it's hard to see this, but exports depend implicitly on + // the default build context GOOS and GOARCH. + // + // We can make this explicit, and key exports by GOOS, GOARCH. + exports []stdlib.Symbol +} + +// reachedStatus returns true when info has a status at least target and any error associated with +// an attempt to reach target. +func (info *directoryPackageInfo) reachedStatus(target directoryPackageStatus) (bool, error) { + if info.err == nil { + return info.status >= target, nil + } + if info.status == target { + return true, info.err + } + return true, nil +} + +// DirInfoCache is a concurrency-safe map for storing information about +// directories that may contain packages. +// +// The information in this cache is built incrementally. Entries are initialized in scan. +// No new keys should be added in any other functions, as all directories containing +// packages are identified in scan. +// +// Other functions, including loadExports and findPackage, may update entries in this cache +// as they discover new things about the directory. +// +// The information in the cache is not expected to change for the cache's +// lifetime, so there is no protection against competing writes. Users should +// take care not to hold the cache across changes to the underlying files. +type DirInfoCache struct { + mu sync.Mutex + // dirs stores information about packages in directories, keyed by absolute path. + dirs map[string]*directoryPackageInfo + listeners map[*int]cacheListener +} + +func NewDirInfoCache() *DirInfoCache { + return &DirInfoCache{ + dirs: make(map[string]*directoryPackageInfo), + listeners: make(map[*int]cacheListener), + } +} + +type cacheListener func(directoryPackageInfo) + +// ScanAndListen calls listener on all the items in the cache, and on anything +// newly added. The returned stop function waits for all in-flight callbacks to +// finish and blocks new ones. +func (d *DirInfoCache) ScanAndListen(ctx context.Context, listener cacheListener) func() { + ctx, cancel := context.WithCancel(ctx) + + // Flushing out all the callbacks is tricky without knowing how many there + // are going to be. Setting an arbitrary limit makes it much easier. + const maxInFlight = 10 + sema := make(chan struct{}, maxInFlight) + for range maxInFlight { + sema <- struct{}{} + } + + cookie := new(int) // A unique ID we can use for the listener. + + // We can't hold mu while calling the listener. + d.mu.Lock() + var keys []string + for key := range d.dirs { + keys = append(keys, key) + } + d.listeners[cookie] = func(info directoryPackageInfo) { + select { + case <-ctx.Done(): + return + case <-sema: + } + listener(info) + sema <- struct{}{} + } + d.mu.Unlock() + + stop := func() { + cancel() + d.mu.Lock() + delete(d.listeners, cookie) + d.mu.Unlock() + for range maxInFlight { + <-sema + } + } + + // Process the pre-existing keys. + for _, k := range keys { + select { + case <-ctx.Done(): + return stop + default: + } + if v, ok := d.Load(k); ok { + listener(v) + } + } + + return stop +} + +// Store stores the package info for dir. +func (d *DirInfoCache) Store(dir string, info directoryPackageInfo) { + d.mu.Lock() + // TODO(rfindley, golang/go#59216): should we overwrite an existing entry? + // That seems incorrect as the cache should be idempotent. + _, old := d.dirs[dir] + d.dirs[dir] = &info + var listeners []cacheListener + for _, l := range d.listeners { + listeners = append(listeners, l) + } + d.mu.Unlock() + + if !old { + for _, l := range listeners { + l(info) + } + } +} + +// Load returns a copy of the directoryPackageInfo for absolute directory dir. +func (d *DirInfoCache) Load(dir string) (directoryPackageInfo, bool) { + d.mu.Lock() + defer d.mu.Unlock() + info, ok := d.dirs[dir] + if !ok { + return directoryPackageInfo{}, false + } + return *info, true +} + +// Keys returns the keys currently present in d. +func (d *DirInfoCache) Keys() (keys []string) { + d.mu.Lock() + defer d.mu.Unlock() + for key := range d.dirs { + keys = append(keys, key) + } + return keys +} + +func (d *DirInfoCache) CachePackageName(info directoryPackageInfo) (string, error) { + if loaded, err := info.reachedStatus(nameLoaded); loaded { + return info.packageName, err + } + if scanned, err := info.reachedStatus(directoryScanned); !scanned || err != nil { + return "", fmt.Errorf("cannot read package name, scan error: %v", err) + } + info.packageName, info.err = packageDirToName(info.dir) + info.status = nameLoaded + d.Store(info.dir, info) + return info.packageName, info.err +} + +func (d *DirInfoCache) CacheExports(ctx context.Context, env *ProcessEnv, info directoryPackageInfo) (string, []stdlib.Symbol, error) { + if reached, _ := info.reachedStatus(exportsLoaded); reached { + return info.packageName, info.exports, info.err + } + if reached, err := info.reachedStatus(nameLoaded); reached && err != nil { + return "", nil, err + } + info.packageName, info.exports, info.err = loadExportsFromFiles(ctx, env, info.dir, false) + if info.err == context.Canceled || info.err == context.DeadlineExceeded { + return info.packageName, info.exports, info.err + } + // The cache structure wants things to proceed linearly. We can skip a + // step here, but only if we succeed. + if info.status == nameLoaded || info.err == nil { + info.status = exportsLoaded + } else { + info.status = nameLoaded + } + d.Store(info.dir, info) + return info.packageName, info.exports, info.err +} + +// ScanModuleCache walks the given directory, which must be a GOMODCACHE value, +// for directory package information, storing the results in cache. +func ScanModuleCache(dir string, cache *DirInfoCache, logf func(string, ...any)) { + // Note(rfindley): it's hard to see, but this function attempts to implement + // just the side effects on cache of calling PrimeCache with a ProcessEnv + // that has the given dir as its GOMODCACHE. + // + // Teasing out the control flow, we see that we can avoid any handling of + // vendor/ and can infer module info entirely from the path, simplifying the + // logic here. + + root := gopathwalk.Root{ + Path: filepath.Clean(dir), + Type: gopathwalk.RootModuleCache, + } + + directoryInfo := func(root gopathwalk.Root, dir string) directoryPackageInfo { + // This is a copy of ModuleResolver.scanDirForPackage, trimmed down to + // logic that applies to a module cache directory. + + subdir := "" + if dir != root.Path { + subdir = dir[len(root.Path)+len("/"):] + } + + matches := modCacheRegexp.FindStringSubmatch(subdir) + if len(matches) == 0 { + return directoryPackageInfo{ + status: directoryScanned, + err: fmt.Errorf("invalid module cache path: %v", subdir), + } + } + modPath, err := module.UnescapePath(filepath.ToSlash(matches[1])) + if err != nil { + if logf != nil { + logf("decoding module cache path %q: %v", subdir, err) + } + return directoryPackageInfo{ + status: directoryScanned, + err: fmt.Errorf("decoding module cache path %q: %v", subdir, err), + } + } + importPath := path.Join(modPath, filepath.ToSlash(matches[3])) + index := strings.Index(dir, matches[1]+"@"+matches[2]) + modDir := filepath.Join(dir[:index], matches[1]+"@"+matches[2]) + modName := readModName(filepath.Join(modDir, "go.mod")) + return directoryPackageInfo{ + status: directoryScanned, + dir: dir, + rootType: root.Type, + nonCanonicalImportPath: importPath, + moduleDir: modDir, + moduleName: modName, + } + } + + add := func(root gopathwalk.Root, dir string) { + info := directoryInfo(root, dir) + cache.Store(info.dir, info) + } + + skip := func(_ gopathwalk.Root, dir string) bool { + // Skip directories that have already been scanned. + // + // Note that gopathwalk only adds "package" directories, which must contain + // a .go file, and all such package directories in the module cache are + // immutable. So if we can load a dir, it can be skipped. + info, ok := cache.Load(dir) + if !ok { + return false + } + packageScanned, _ := info.reachedStatus(directoryScanned) + return packageScanned + } + + gopathwalk.WalkSkip([]gopathwalk.Root{root}, add, skip, gopathwalk.Options{Logf: logf, ModulesEnabled: true}) +} diff --git a/vendor/golang.org/x/tools/internal/imports/sortimports.go b/vendor/golang.org/x/tools/internal/imports/sortimports.go new file mode 100644 index 0000000..67c17bc --- /dev/null +++ b/vendor/golang.org/x/tools/internal/imports/sortimports.go @@ -0,0 +1,298 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Hacked up copy of go/ast/import.go +// Modified to use a single token.File in preference to a FileSet. + +package imports + +import ( + "go/ast" + "go/token" + "log" + "slices" + "sort" + "strconv" +) + +// sortImports sorts runs of consecutive import lines in import blocks in f. +// It also removes duplicate imports when it is possible to do so without data loss. +// +// It may mutate the token.File and the ast.File. +func sortImports(localPrefix string, tokFile *token.File, f *ast.File) { + for i, d := range f.Decls { + d, ok := d.(*ast.GenDecl) + if !ok || d.Tok != token.IMPORT { + // Not an import declaration, so we're done. + // Imports are always first. + break + } + + if len(d.Specs) == 0 { + // Empty import block, remove it. + f.Decls = slices.Delete(f.Decls, i, i+1) + } + + if !d.Lparen.IsValid() { + // Not a block: sorted by default. + continue + } + + // Identify and sort runs of specs on successive lines. + i := 0 + specs := d.Specs[:0] + for j, s := range d.Specs { + if j > i && tokFile.Line(s.Pos()) > 1+tokFile.Line(d.Specs[j-1].End()) { + // j begins a new run. End this one. + specs = append(specs, sortSpecs(localPrefix, tokFile, f, d.Specs[i:j])...) + i = j + } + } + specs = append(specs, sortSpecs(localPrefix, tokFile, f, d.Specs[i:])...) + d.Specs = specs + + // Deduping can leave a blank line before the rparen; clean that up. + // Ignore line directives. + if len(d.Specs) > 0 { + lastSpec := d.Specs[len(d.Specs)-1] + lastLine := tokFile.PositionFor(lastSpec.Pos(), false).Line + if rParenLine := tokFile.PositionFor(d.Rparen, false).Line; rParenLine > lastLine+1 { + tokFile.MergeLine(rParenLine - 1) // has side effects! + } + } + } +} + +// mergeImports merges all the import declarations into the first one. +// Taken from golang.org/x/tools/ast/astutil. +// This does not adjust line numbers properly +func mergeImports(f *ast.File) { + if len(f.Decls) <= 1 { + return + } + + // Merge all the import declarations into the first one. + var first *ast.GenDecl + for i := 0; i < len(f.Decls); i++ { + decl := f.Decls[i] + gen, ok := decl.(*ast.GenDecl) + if !ok || gen.Tok != token.IMPORT || declImports(gen, "C") { + continue + } + if first == nil { + first = gen + continue // Don't touch the first one. + } + // We now know there is more than one package in this import + // declaration. Ensure that it ends up parenthesized. + first.Lparen = first.Pos() + // Move the imports of the other import declaration to the first one. + for _, spec := range gen.Specs { + spec.(*ast.ImportSpec).Path.ValuePos = first.Pos() + first.Specs = append(first.Specs, spec) + } + f.Decls = slices.Delete(f.Decls, i, i+1) + i-- + } +} + +// declImports reports whether gen contains an import of path. +// Taken from golang.org/x/tools/ast/astutil. +func declImports(gen *ast.GenDecl, path string) bool { + if gen.Tok != token.IMPORT { + return false + } + for _, spec := range gen.Specs { + impspec := spec.(*ast.ImportSpec) + if importPath(impspec) == path { + return true + } + } + return false +} + +func importPath(s ast.Spec) string { + t, err := strconv.Unquote(s.(*ast.ImportSpec).Path.Value) + if err == nil { + return t + } + return "" +} + +func importName(s ast.Spec) string { + n := s.(*ast.ImportSpec).Name + if n == nil { + return "" + } + return n.Name +} + +func importComment(s ast.Spec) string { + c := s.(*ast.ImportSpec).Comment + if c == nil { + return "" + } + return c.Text() +} + +// collapse indicates whether prev may be removed, leaving only next. +func collapse(prev, next ast.Spec) bool { + if importPath(next) != importPath(prev) || importName(next) != importName(prev) { + return false + } + return prev.(*ast.ImportSpec).Comment == nil +} + +type posSpan struct { + Start token.Pos + End token.Pos +} + +// sortSpecs sorts the import specs within each import decl. +// It may mutate the token.File. +func sortSpecs(localPrefix string, tokFile *token.File, f *ast.File, specs []ast.Spec) []ast.Spec { + // Can't short-circuit here even if specs are already sorted, + // since they might yet need deduplication. + // A lone import, however, may be safely ignored. + if len(specs) <= 1 { + return specs + } + + // Record positions for specs. + pos := make([]posSpan, len(specs)) + for i, s := range specs { + pos[i] = posSpan{s.Pos(), s.End()} + } + + // Identify comments in this range. + // Any comment from pos[0].Start to the final line counts. + lastLine := tokFile.Line(pos[len(pos)-1].End) + cstart := len(f.Comments) + cend := len(f.Comments) + for i, g := range f.Comments { + if g.Pos() < pos[0].Start { + continue + } + if i < cstart { + cstart = i + } + if tokFile.Line(g.End()) > lastLine { + cend = i + break + } + } + comments := f.Comments[cstart:cend] + + // Assign each comment to the import spec preceding it. + importComment := map[*ast.ImportSpec][]*ast.CommentGroup{} + specIndex := 0 + for _, g := range comments { + for specIndex+1 < len(specs) && pos[specIndex+1].Start <= g.Pos() { + specIndex++ + } + s := specs[specIndex].(*ast.ImportSpec) + importComment[s] = append(importComment[s], g) + } + + // Sort the import specs by import path. + // Remove duplicates, when possible without data loss. + // Reassign the import paths to have the same position sequence. + // Reassign each comment to abut the end of its spec. + // Sort the comments by new position. + sort.Sort(byImportSpec{localPrefix, specs}) + + // Dedup. Thanks to our sorting, we can just consider + // adjacent pairs of imports. + deduped := specs[:0] + for i, s := range specs { + if i == len(specs)-1 || !collapse(s, specs[i+1]) { + deduped = append(deduped, s) + } else { + p := s.Pos() + tokFile.MergeLine(tokFile.Line(p)) // has side effects! + } + } + specs = deduped + + // Fix up comment positions + for i, s := range specs { + s := s.(*ast.ImportSpec) + if s.Name != nil { + s.Name.NamePos = pos[i].Start + } + s.Path.ValuePos = pos[i].Start + s.EndPos = pos[i].End + nextSpecPos := pos[i].End + + for _, g := range importComment[s] { + for _, c := range g.List { + c.Slash = pos[i].End + nextSpecPos = c.End() + } + } + if i < len(specs)-1 { + pos[i+1].Start = nextSpecPos + pos[i+1].End = nextSpecPos + } + } + + sort.Sort(byCommentPos(comments)) + + // Fixup comments can insert blank lines, because import specs are on different lines. + // We remove those blank lines here by merging import spec to the first import spec line. + firstSpecLine := tokFile.Line(specs[0].Pos()) + for _, s := range specs[1:] { + p := s.Pos() + line := tokFile.Line(p) + for previousLine := line - 1; previousLine >= firstSpecLine; { + // MergeLine can panic. Avoid the panic at the cost of not removing the blank line + // golang/go#50329 + if previousLine > 0 && previousLine < tokFile.LineCount() { + tokFile.MergeLine(previousLine) // has side effects! + previousLine-- + } else { + // try to gather some data to diagnose how this could happen + req := "Please report what the imports section of your go file looked like." + log.Printf("panic avoided: first:%d line:%d previous:%d max:%d. %s", + firstSpecLine, line, previousLine, tokFile.LineCount(), req) + } + } + } + return specs +} + +type byImportSpec struct { + localPrefix string + specs []ast.Spec // slice of *ast.ImportSpec +} + +func (x byImportSpec) Len() int { return len(x.specs) } +func (x byImportSpec) Swap(i, j int) { x.specs[i], x.specs[j] = x.specs[j], x.specs[i] } +func (x byImportSpec) Less(i, j int) bool { + ipath := importPath(x.specs[i]) + jpath := importPath(x.specs[j]) + + igroup := importGroup(x.localPrefix, ipath) + jgroup := importGroup(x.localPrefix, jpath) + if igroup != jgroup { + return igroup < jgroup + } + + if ipath != jpath { + return ipath < jpath + } + iname := importName(x.specs[i]) + jname := importName(x.specs[j]) + + if iname != jname { + return iname < jname + } + return importComment(x.specs[i]) < importComment(x.specs[j]) +} + +type byCommentPos []*ast.CommentGroup + +func (x byCommentPos) Len() int { return len(x) } +func (x byCommentPos) Swap(i, j int) { x[i], x[j] = x[j], x[i] } +func (x byCommentPos) Less(i, j int) bool { return x[i].Pos() < x[j].Pos() } diff --git a/vendor/golang.org/x/tools/internal/imports/source.go b/vendor/golang.org/x/tools/internal/imports/source.go new file mode 100644 index 0000000..cbe4f3c --- /dev/null +++ b/vendor/golang.org/x/tools/internal/imports/source.go @@ -0,0 +1,63 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package imports + +import "context" + +// These types document the APIs below. +// +// TODO(rfindley): consider making these defined types rather than aliases. +type ( + ImportPath = string + PackageName = string + Symbol = string + + // References is set of References found in a Go file. The first map key is the + // left hand side of a selector expression, the second key is the right hand + // side, and the value should always be true. + References = map[PackageName]map[Symbol]bool +) + +// A Result satisfies a missing import. +// +// The Import field describes the missing import spec, and the Package field +// summarizes the package exports. +type Result struct { + Import *ImportInfo + Package *PackageInfo +} + +// An ImportInfo represents a single import statement. +type ImportInfo struct { + ImportPath string // import path, e.g. "crypto/rand". + Name string // import name, e.g. "crand", or "" if none. +} + +// A PackageInfo represents what's known about a package. +type PackageInfo struct { + Name string // package name in the package declaration, if known + Exports map[string]bool // set of names of known package level sortSymbols +} + +// A Source provides imports to satisfy unresolved references in the file being +// fixed. +type Source interface { + // LoadPackageNames queries PackageName information for the requested import + // paths, when operating from the provided srcDir. + // + // TODO(rfindley): try to refactor to remove this operation. + LoadPackageNames(ctx context.Context, srcDir string, paths []ImportPath) (map[ImportPath]PackageName, error) + + // ResolveReferences asks the Source for the best package name to satisfy + // each of the missing references, in the context of fixing the given + // filename. + // + // Returns a map from package name to a [Result] for that package name that + // provides the required symbols. Keys may be omitted in the map if no + // candidates satisfy all missing references for that package name. It is up + // to each data source to select the best result for each entry in the + // missing map. + ResolveReferences(ctx context.Context, filename string, missing References) ([]*Result, error) +} diff --git a/vendor/golang.org/x/tools/internal/imports/source_env.go b/vendor/golang.org/x/tools/internal/imports/source_env.go new file mode 100644 index 0000000..ec996c3 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/imports/source_env.go @@ -0,0 +1,129 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package imports + +import ( + "context" + "path/filepath" + "strings" + "sync" + + "golang.org/x/sync/errgroup" + "golang.org/x/tools/internal/gopathwalk" +) + +// ProcessEnvSource implements the [Source] interface using the legacy +// [ProcessEnv] abstraction. +type ProcessEnvSource struct { + env *ProcessEnv + srcDir string + filename string + pkgName string +} + +// NewProcessEnvSource returns a [ProcessEnvSource] wrapping the given +// env, to be used for fixing imports in the file with name filename in package +// named pkgName. +func NewProcessEnvSource(env *ProcessEnv, filename, pkgName string) (*ProcessEnvSource, error) { + abs, err := filepath.Abs(filename) + if err != nil { + return nil, err + } + srcDir := filepath.Dir(abs) + return &ProcessEnvSource{ + env: env, + srcDir: srcDir, + filename: filename, + pkgName: pkgName, + }, nil +} + +func (s *ProcessEnvSource) LoadPackageNames(ctx context.Context, srcDir string, unknown []string) (map[string]string, error) { + r, err := s.env.GetResolver() + if err != nil { + return nil, err + } + return r.loadPackageNames(unknown, srcDir) +} + +func (s *ProcessEnvSource) ResolveReferences(ctx context.Context, filename string, refs map[string]map[string]bool) ([]*Result, error) { + var mu sync.Mutex + found := make(map[string][]pkgDistance) + callback := &scanCallback{ + rootFound: func(gopathwalk.Root) bool { + return true // We want everything. + }, + dirFound: func(pkg *pkg) bool { + return pkgIsCandidate(filename, refs, pkg) + }, + packageNameLoaded: func(pkg *pkg) bool { + if _, want := refs[pkg.packageName]; !want { + return false + } + if pkg.dir == s.srcDir && s.pkgName == pkg.packageName { + // The candidate is in the same directory and has the + // same package name. Don't try to import ourselves. + return false + } + if !CanUse(filename, pkg.dir) { + return false + } + mu.Lock() + defer mu.Unlock() + found[pkg.packageName] = append(found[pkg.packageName], pkgDistance{pkg, distance(s.srcDir, pkg.dir)}) + return false // We'll do our own loading after we sort. + }, + } + resolver, err := s.env.GetResolver() + if err != nil { + return nil, err + } + if err := resolver.scan(ctx, callback); err != nil { + return nil, err + } + + g, ctx := errgroup.WithContext(ctx) + + searcher := symbolSearcher{ + logf: s.env.logf, + srcDir: s.srcDir, + xtest: strings.HasSuffix(s.pkgName, "_test"), + loadExports: resolver.loadExports, + } + + var resultMu sync.Mutex + results := make(map[string]*Result, len(refs)) + for pkgName, symbols := range refs { + g.Go(func() error { + found, err := searcher.search(ctx, found[pkgName], pkgName, symbols) + if err != nil { + return err + } + if found == nil { + return nil // No matching package. + } + + imp := &ImportInfo{ + ImportPath: found.importPathShort, + } + pkg := &PackageInfo{ + Name: pkgName, + Exports: symbols, + } + resultMu.Lock() + results[pkgName] = &Result{Import: imp, Package: pkg} + resultMu.Unlock() + return nil + }) + } + if err := g.Wait(); err != nil { + return nil, err + } + var ans []*Result + for _, x := range results { + ans = append(ans, x) + } + return ans, nil +} diff --git a/vendor/golang.org/x/tools/internal/imports/source_modindex.go b/vendor/golang.org/x/tools/internal/imports/source_modindex.go new file mode 100644 index 0000000..05229f0 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/imports/source_modindex.go @@ -0,0 +1,103 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package imports + +import ( + "context" + "sync" + "time" + + "golang.org/x/tools/internal/modindex" +) + +// This code is here rather than in the modindex package +// to avoid import loops + +// implements Source using modindex, so only for module cache. +// +// this is perhaps over-engineered. A new Index is read at first use. +// And then Update is called after every 15 minutes, and a new Index +// is read if the index changed. It is not clear the Mutex is needed. +type IndexSource struct { + modcachedir string + mutex sync.Mutex + ix *modindex.Index + expires time.Time +} + +// create a new Source. Called from NewView in cache/session.go. +func NewIndexSource(cachedir string) *IndexSource { + return &IndexSource{modcachedir: cachedir} +} + +func (s *IndexSource) LoadPackageNames(ctx context.Context, srcDir string, paths []ImportPath) (map[ImportPath]PackageName, error) { + /// This is used by goimports to resolve the package names of imports of the + // current package, which is irrelevant for the module cache. + return nil, nil +} + +func (s *IndexSource) ResolveReferences(ctx context.Context, filename string, missing References) ([]*Result, error) { + if err := s.maybeReadIndex(); err != nil { + return nil, err + } + var cs []modindex.Candidate + for pkg, nms := range missing { + for nm := range nms { + x := s.ix.Lookup(pkg, nm, false) + cs = append(cs, x...) + } + } + found := make(map[string]*Result) + for _, c := range cs { + var x *Result + if x = found[c.ImportPath]; x == nil { + x = &Result{ + Import: &ImportInfo{ + ImportPath: c.ImportPath, + Name: "", + }, + Package: &PackageInfo{ + Name: c.PkgName, + Exports: make(map[string]bool), + }, + } + found[c.ImportPath] = x + } + x.Package.Exports[c.Name] = true + } + var ans []*Result + for _, x := range found { + ans = append(ans, x) + } + return ans, nil +} + +func (s *IndexSource) maybeReadIndex() error { + s.mutex.Lock() + defer s.mutex.Unlock() + + var readIndex bool + if time.Now().After(s.expires) { + ok, err := modindex.Update(s.modcachedir) + if err != nil { + return err + } + if ok { + readIndex = true + } + } + + if readIndex || s.ix == nil { + ix, err := modindex.ReadIndex(s.modcachedir) + if err != nil { + return err + } + s.ix = ix + // for now refresh every 15 minutes + s.expires = time.Now().Add(time.Minute * 15) + } + + return nil +} diff --git a/vendor/golang.org/x/tools/internal/modindex/directories.go b/vendor/golang.org/x/tools/internal/modindex/directories.go new file mode 100644 index 0000000..2faa6ce --- /dev/null +++ b/vendor/golang.org/x/tools/internal/modindex/directories.go @@ -0,0 +1,135 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package modindex + +import ( + "fmt" + "log" + "os" + "path/filepath" + "regexp" + "slices" + "strings" + "sync" + "time" + + "golang.org/x/mod/semver" + "golang.org/x/tools/internal/gopathwalk" +) + +type directory struct { + path Relpath + importPath string + version string // semantic version + syms []symbol +} + +// byImportPath groups the directories by import path, +// sorting the ones with the same import path by semantic version, +// most recent first. +func byImportPath(dirs []Relpath) (map[string][]*directory, error) { + ans := make(map[string][]*directory) // key is import path + for _, d := range dirs { + ip, sv, err := DirToImportPathVersion(d) + if err != nil { + return nil, err + } + ans[ip] = append(ans[ip], &directory{ + path: d, + importPath: ip, + version: sv, + }) + } + for k, v := range ans { + semanticSort(v) + ans[k] = v + } + return ans, nil +} + +// sort the directories by semantic version, latest first +func semanticSort(v []*directory) { + slices.SortFunc(v, func(l, r *directory) int { + if n := semver.Compare(l.version, r.version); n != 0 { + return -n // latest first + } + return strings.Compare(string(l.path), string(r.path)) + }) +} + +// modCacheRegexp splits a relpathpath into module, module version, and package. +var modCacheRegexp = regexp.MustCompile(`(.*)@([^/\\]*)(.*)`) + +// DirToImportPathVersion computes import path and semantic version +func DirToImportPathVersion(dir Relpath) (string, string, error) { + m := modCacheRegexp.FindStringSubmatch(string(dir)) + // m[1] is the module path + // m[2] is the version major.minor.patch(-
 1 && flds[1][1] == 'D',
+			}
+			if px.Type == Func {
+				n, err := strconv.Atoi(flds[2])
+				if err != nil {
+					continue // should never happen
+				}
+				px.Results = int16(n)
+				if len(flds) >= 4 {
+					sig := strings.Split(flds[3], " ")
+					for i := range sig {
+						// $ cannot otherwise occur. removing the spaces
+						// almost works, but for chan struct{}, e.g.
+						sig[i] = strings.Replace(sig[i], "$", " ", -1)
+					}
+					px.Sig = toFields(sig)
+				}
+			}
+			ans = append(ans, px)
+		}
+	}
+	return ans
+}
+
+func toFields(sig []string) []Field {
+	ans := make([]Field, len(sig)/2)
+	for i := range ans {
+		ans[i] = Field{Arg: sig[2*i], Type: sig[2*i+1]}
+	}
+	return ans
+}
+
+// benchmarks show this is measurably better than strings.Split
+// split into first 4 fields separated by single space
+func fastSplit(x string) []string {
+	ans := make([]string, 0, 4)
+	nxt := 0
+	start := 0
+	for i := 0; i < len(x); i++ {
+		if x[i] != ' ' {
+			continue
+		}
+		ans = append(ans, x[start:i])
+		nxt++
+		start = i + 1
+		if nxt >= 3 {
+			break
+		}
+	}
+	ans = append(ans, x[start:])
+	return ans
+}
+
+func asLexType(c byte) LexType {
+	switch c {
+	case 'C':
+		return Const
+	case 'V':
+		return Var
+	case 'T':
+		return Type
+	case 'F':
+		return Func
+	}
+	return -1
+}
diff --git a/vendor/golang.org/x/tools/internal/modindex/modindex.go b/vendor/golang.org/x/tools/internal/modindex/modindex.go
new file mode 100644
index 0000000..355a53e
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/modindex/modindex.go
@@ -0,0 +1,164 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package modindex contains code for building and searching an index to
+// the Go module cache. The directory containing the index, returned by
+// IndexDir(), contains a file index-name- that contains the name
+// of the current index. We believe writing that short file is atomic.
+// ReadIndex reads that file to get the file name of the index.
+// WriteIndex writes an index with a unique name and then
+// writes that name into a new version of index-name-.
+// ( stands for the CurrentVersion of the index format.)
+package modindex
+
+import (
+	"path/filepath"
+	"slices"
+	"strings"
+	"time"
+
+	"golang.org/x/mod/semver"
+)
+
+// Create always creates a new index for the go module cache that is in cachedir.
+func Create(cachedir string) error {
+	_, err := indexModCache(cachedir, true)
+	return err
+}
+
+// Update the index for the go module cache that is in cachedir,
+// If there is no existing index it will build one.
+// If there are changed directories since the last index, it will
+// write a new one and return true. Otherwise it returns false.
+func Update(cachedir string) (bool, error) {
+	return indexModCache(cachedir, false)
+}
+
+// indexModCache writes an index current as of when it is called.
+// If clear is true the index is constructed from all of GOMODCACHE
+// otherwise the index is constructed from the last previous index
+// and the updates to the cache. It returns true if it wrote an index,
+// false otherwise.
+func indexModCache(cachedir string, clear bool) (bool, error) {
+	cachedir, err := filepath.Abs(cachedir)
+	if err != nil {
+		return false, err
+	}
+	cd := Abspath(cachedir)
+	future := time.Now().Add(24 * time.Hour) // safely in the future
+	ok, err := modindexTimed(future, cd, clear)
+	if err != nil {
+		return false, err
+	}
+	return ok, nil
+}
+
+// modindexTimed writes an index current as of onlyBefore.
+// If clear is true the index is constructed from all of GOMODCACHE
+// otherwise the index is constructed from the last previous index
+// and all the updates to the cache before onlyBefore.
+// It returns true if it wrote a new index, false if it wrote nothing.
+func modindexTimed(onlyBefore time.Time, cachedir Abspath, clear bool) (bool, error) {
+	var curIndex *Index
+	if !clear {
+		var err error
+		curIndex, err = ReadIndex(string(cachedir))
+		if clear && err != nil {
+			return false, err
+		}
+		// TODO(pjw): check that most of those directories still exist
+	}
+	cfg := &work{
+		onlyBefore: onlyBefore,
+		oldIndex:   curIndex,
+		cacheDir:   cachedir,
+	}
+	if curIndex != nil {
+		cfg.onlyAfter = curIndex.Changed
+	}
+	if err := cfg.buildIndex(); err != nil {
+		return false, err
+	}
+	if len(cfg.newIndex.Entries) == 0 && curIndex != nil {
+		// no changes from existing curIndex, don't write a new index
+		return false, nil
+	}
+	if err := cfg.writeIndex(); err != nil {
+		return false, err
+	}
+	return true, nil
+}
+
+type work struct {
+	onlyBefore time.Time // do not use directories later than this
+	onlyAfter  time.Time // only interested in directories after this
+	// directories from before onlyAfter come from oldIndex
+	oldIndex *Index
+	newIndex *Index
+	cacheDir Abspath
+}
+
+func (w *work) buildIndex() error {
+	// The effective date of the new index should be at least
+	// slightly earlier than when the directories are scanned
+	// so set it now.
+	w.newIndex = &Index{Changed: time.Now(), Cachedir: w.cacheDir}
+	dirs := findDirs(string(w.cacheDir), w.onlyAfter, w.onlyBefore)
+	if len(dirs) == 0 {
+		return nil
+	}
+	newdirs, err := byImportPath(dirs)
+	if err != nil {
+		return err
+	}
+	// for each import path it might occur only in newdirs,
+	// only in w.oldIndex, or in both.
+	// If it occurs in both, use the semantically later one
+	if w.oldIndex != nil {
+		for _, e := range w.oldIndex.Entries {
+			found, ok := newdirs[e.ImportPath]
+			if !ok {
+				w.newIndex.Entries = append(w.newIndex.Entries, e)
+				continue // use this one, there is no new one
+			}
+			if semver.Compare(found[0].version, e.Version) > 0 {
+				// use the new one
+			} else {
+				// use the old one, forget the new one
+				w.newIndex.Entries = append(w.newIndex.Entries, e)
+				delete(newdirs, e.ImportPath)
+			}
+		}
+	}
+	// get symbol information for all the new diredtories
+	getSymbols(w.cacheDir, newdirs)
+	// assemble the new index entries
+	for k, v := range newdirs {
+		d := v[0]
+		pkg, names := processSyms(d.syms)
+		if pkg == "" {
+			continue // PJW: does this ever happen?
+		}
+		entry := Entry{
+			PkgName:    pkg,
+			Dir:        d.path,
+			ImportPath: k,
+			Version:    d.version,
+			Names:      names,
+		}
+		w.newIndex.Entries = append(w.newIndex.Entries, entry)
+	}
+	// sort the entries in the new index
+	slices.SortFunc(w.newIndex.Entries, func(l, r Entry) int {
+		if n := strings.Compare(l.PkgName, r.PkgName); n != 0 {
+			return n
+		}
+		return strings.Compare(l.ImportPath, r.ImportPath)
+	})
+	return nil
+}
+
+func (w *work) writeIndex() error {
+	return writeIndex(w.cacheDir, w.newIndex)
+}
diff --git a/vendor/golang.org/x/tools/internal/modindex/symbols.go b/vendor/golang.org/x/tools/internal/modindex/symbols.go
new file mode 100644
index 0000000..31a502c
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/modindex/symbols.go
@@ -0,0 +1,218 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package modindex
+
+import (
+	"fmt"
+	"go/ast"
+	"go/parser"
+	"go/token"
+	"go/types"
+	"os"
+	"path/filepath"
+	"runtime"
+	"slices"
+	"strings"
+
+	"golang.org/x/sync/errgroup"
+)
+
+// The name of a symbol contains information about the symbol:
+//  T for types, TD if the type is deprecated
+//  C for consts, CD if the const is deprecated
+//  V for vars, VD if the var is deprecated
+// and for funcs:  F  ( )*
+// any spaces in  are replaced by $s so that the fields
+// of the name are space separated. F is replaced by FD if the func
+// is deprecated.
+type symbol struct {
+	pkg  string // name of the symbols's package
+	name string // declared name
+	kind string // T, C, V, or F, followed by D if deprecated
+	sig  string // signature information, for F
+}
+
+// find the symbols for the best directories
+func getSymbols(cd Abspath, dirs map[string][]*directory) {
+	var g errgroup.Group
+	g.SetLimit(max(2, runtime.GOMAXPROCS(0)/2))
+	for _, vv := range dirs {
+		// throttling some day?
+		d := vv[0]
+		g.Go(func() error {
+			thedir := filepath.Join(string(cd), string(d.path))
+			mode := parser.SkipObjectResolution | parser.ParseComments
+
+			fi, err := os.ReadDir(thedir)
+			if err != nil {
+				return nil // log this someday?
+			}
+			for _, fx := range fi {
+				if !strings.HasSuffix(fx.Name(), ".go") || strings.HasSuffix(fx.Name(), "_test.go") {
+					continue
+				}
+				fname := filepath.Join(thedir, fx.Name())
+				tr, err := parser.ParseFile(token.NewFileSet(), fname, nil, mode)
+				if err != nil {
+					continue // ignore errors, someday log them?
+				}
+				d.syms = append(d.syms, getFileExports(tr)...)
+			}
+			return nil
+		})
+	}
+	g.Wait()
+}
+
+func getFileExports(f *ast.File) []symbol {
+	pkg := f.Name.Name
+	if pkg == "main" {
+		return nil
+	}
+	var ans []symbol
+	// should we look for //go:build ignore?
+	for _, decl := range f.Decls {
+		switch decl := decl.(type) {
+		case *ast.FuncDecl:
+			if decl.Recv != nil {
+				// ignore methods, as we are completing package selections
+				continue
+			}
+			name := decl.Name.Name
+			dtype := decl.Type
+			// not looking at dtype.TypeParams. That is, treating
+			// generic functions just like non-generic ones.
+			sig := dtype.Params
+			kind := "F"
+			if isDeprecated(decl.Doc) {
+				kind += "D"
+			}
+			result := []string{fmt.Sprintf("%d", dtype.Results.NumFields())}
+			for _, x := range sig.List {
+				// This code creates a string representing the type.
+				// TODO(pjw): it may be fragile:
+				// 1. x.Type could be nil, perhaps in ill-formed code
+				// 2. ExprString might someday change incompatibly to
+				//    include struct tags, which can be arbitrary strings
+				if x.Type == nil {
+					// Can this happen without a parse error? (Files with parse
+					// errors are ignored in getSymbols)
+					continue // maybe report this someday
+				}
+				tp := types.ExprString(x.Type)
+				if len(tp) == 0 {
+					// Can this happen?
+					continue // maybe report this someday
+				}
+				// This is only safe if ExprString never returns anything with a $
+				// The only place a $ can occur seems to be in a struct tag, which
+				// can be an arbitrary string literal, and ExprString does not presently
+				// print struct tags. So for this to happen the type of a formal parameter
+				// has to be a explicit struct, e.g. foo(x struct{a int "$"}) and ExprString
+				// would have to show the struct tag. Even testing for this case seems
+				// a waste of effort, but let's remember the possibility
+				if strings.Contains(tp, "$") {
+					continue
+				}
+				tp = strings.Replace(tp, " ", "$", -1)
+				if len(x.Names) == 0 {
+					result = append(result, "_")
+					result = append(result, tp)
+				} else {
+					for _, y := range x.Names {
+						result = append(result, y.Name)
+						result = append(result, tp)
+					}
+				}
+			}
+			sigs := strings.Join(result, " ")
+			if s := newsym(pkg, name, kind, sigs); s != nil {
+				ans = append(ans, *s)
+			}
+		case *ast.GenDecl:
+			depr := isDeprecated(decl.Doc)
+			switch decl.Tok {
+			case token.CONST, token.VAR:
+				tp := "V"
+				if decl.Tok == token.CONST {
+					tp = "C"
+				}
+				if depr {
+					tp += "D"
+				}
+				for _, sp := range decl.Specs {
+					for _, x := range sp.(*ast.ValueSpec).Names {
+						if s := newsym(pkg, x.Name, tp, ""); s != nil {
+							ans = append(ans, *s)
+						}
+					}
+				}
+			case token.TYPE:
+				tp := "T"
+				if depr {
+					tp += "D"
+				}
+				for _, sp := range decl.Specs {
+					if s := newsym(pkg, sp.(*ast.TypeSpec).Name.Name, tp, ""); s != nil {
+						ans = append(ans, *s)
+					}
+				}
+			}
+		}
+	}
+	return ans
+}
+
+func newsym(pkg, name, kind, sig string) *symbol {
+	if len(name) == 0 || !ast.IsExported(name) {
+		return nil
+	}
+	sym := symbol{pkg: pkg, name: name, kind: kind, sig: sig}
+	return &sym
+}
+
+func isDeprecated(doc *ast.CommentGroup) bool {
+	if doc == nil {
+		return false
+	}
+	// go.dev/wiki/Deprecated Paragraph starting 'Deprecated:'
+	// This code fails for /* Deprecated: */, but it's the code from
+	// gopls/internal/analysis/deprecated
+	lines := strings.Split(doc.Text(), "\n\n")
+	for _, line := range lines {
+		if strings.HasPrefix(line, "Deprecated:") {
+			return true
+		}
+	}
+	return false
+}
+
+// return the package name and the value for the symbols.
+// if there are multiple packages, choose one arbitrarily
+// the returned slice is sorted lexicographically
+func processSyms(syms []symbol) (string, []string) {
+	if len(syms) == 0 {
+		return "", nil
+	}
+	slices.SortFunc(syms, func(l, r symbol) int {
+		return strings.Compare(l.name, r.name)
+	})
+	pkg := syms[0].pkg
+	var names []string
+	for _, s := range syms {
+		var nx string
+		if s.pkg == pkg {
+			if s.sig != "" {
+				nx = fmt.Sprintf("%s %s %s", s.name, s.kind, s.sig)
+			} else {
+				nx = fmt.Sprintf("%s %s", s.name, s.kind)
+			}
+			names = append(names, nx)
+		} else {
+			continue // PJW: do we want to keep track of these?
+		}
+	}
+	return pkg, names
+}
diff --git a/vendor/golang.org/x/tools/internal/modindex/types.go b/vendor/golang.org/x/tools/internal/modindex/types.go
new file mode 100644
index 0000000..ece4488
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/modindex/types.go
@@ -0,0 +1,25 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package modindex
+
+import (
+	"strings"
+)
+
+// some special types to avoid confusions
+
+// distinguish various types of directory names. It's easy to get confused.
+type Abspath string // absolute paths
+type Relpath string // paths with GOMODCACHE prefix removed
+
+func toRelpath(cachedir Abspath, s string) Relpath {
+	if strings.HasPrefix(s, string(cachedir)) {
+		if s == string(cachedir) {
+			return Relpath("")
+		}
+		return Relpath(s[len(cachedir)+1:])
+	}
+	return Relpath(s)
+}
diff --git a/vendor/golang.org/x/tools/internal/packagesinternal/packages.go b/vendor/golang.org/x/tools/internal/packagesinternal/packages.go
new file mode 100644
index 0000000..73eefa2
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/packagesinternal/packages.go
@@ -0,0 +1,17 @@
+// Copyright 2020 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package packagesinternal exposes internal-only fields from go/packages.
+package packagesinternal
+
+var GetDepsErrors = func(p any) []*PackageError { return nil }
+
+type PackageError struct {
+	ImportStack []string // shortest path from package named on command line to this one
+	Pos         string   // position of error (if present, file:line:col)
+	Err         string   // the error itself
+}
+
+var TypecheckCgo int
+var DepsErrors int // must be set as a LoadMode to call GetDepsErrors
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/codes.go b/vendor/golang.org/x/tools/internal/pkgbits/codes.go
new file mode 100644
index 0000000..f0cabde
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/pkgbits/codes.go
@@ -0,0 +1,77 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkgbits
+
+// A Code is an enum value that can be encoded into bitstreams.
+//
+// Code types are preferable for enum types, because they allow
+// Decoder to detect desyncs.
+type Code interface {
+	// Marker returns the SyncMarker for the Code's dynamic type.
+	Marker() SyncMarker
+
+	// Value returns the Code's ordinal value.
+	Value() int
+}
+
+// A CodeVal distinguishes among go/constant.Value encodings.
+type CodeVal int
+
+func (c CodeVal) Marker() SyncMarker { return SyncVal }
+func (c CodeVal) Value() int         { return int(c) }
+
+// Note: These values are public and cannot be changed without
+// updating the go/types importers.
+
+const (
+	ValBool CodeVal = iota
+	ValString
+	ValInt64
+	ValBigInt
+	ValBigRat
+	ValBigFloat
+)
+
+// A CodeType distinguishes among go/types.Type encodings.
+type CodeType int
+
+func (c CodeType) Marker() SyncMarker { return SyncType }
+func (c CodeType) Value() int         { return int(c) }
+
+// Note: These values are public and cannot be changed without
+// updating the go/types importers.
+
+const (
+	TypeBasic CodeType = iota
+	TypeNamed
+	TypePointer
+	TypeSlice
+	TypeArray
+	TypeChan
+	TypeMap
+	TypeSignature
+	TypeStruct
+	TypeInterface
+	TypeUnion
+	TypeTypeParam
+)
+
+// A CodeObj distinguishes among go/types.Object encodings.
+type CodeObj int
+
+func (c CodeObj) Marker() SyncMarker { return SyncCodeObj }
+func (c CodeObj) Value() int         { return int(c) }
+
+// Note: These values are public and cannot be changed without
+// updating the go/types importers.
+
+const (
+	ObjAlias CodeObj = iota
+	ObjConst
+	ObjType
+	ObjFunc
+	ObjVar
+	ObjStub
+)
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/decoder.go b/vendor/golang.org/x/tools/internal/pkgbits/decoder.go
new file mode 100644
index 0000000..c0aba26
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/pkgbits/decoder.go
@@ -0,0 +1,519 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkgbits
+
+import (
+	"encoding/binary"
+	"errors"
+	"fmt"
+	"go/constant"
+	"go/token"
+	"io"
+	"math/big"
+	"os"
+	"runtime"
+	"strings"
+)
+
+// A PkgDecoder provides methods for decoding a package's Unified IR
+// export data.
+type PkgDecoder struct {
+	// version is the file format version.
+	version Version
+
+	// sync indicates whether the file uses sync markers.
+	sync bool
+
+	// pkgPath is the package path for the package to be decoded.
+	//
+	// TODO(mdempsky): Remove; unneeded since CL 391014.
+	pkgPath string
+
+	// elemData is the full data payload of the encoded package.
+	// Elements are densely and contiguously packed together.
+	//
+	// The last 8 bytes of elemData are the package fingerprint.
+	elemData string
+
+	// elemEnds stores the byte-offset end positions of element
+	// bitstreams within elemData.
+	//
+	// For example, element I's bitstream data starts at elemEnds[I-1]
+	// (or 0, if I==0) and ends at elemEnds[I].
+	//
+	// Note: elemEnds is indexed by absolute indices, not
+	// section-relative indices.
+	elemEnds []uint32
+
+	// elemEndsEnds stores the index-offset end positions of relocation
+	// sections within elemEnds.
+	//
+	// For example, section K's end positions start at elemEndsEnds[K-1]
+	// (or 0, if K==0) and end at elemEndsEnds[K].
+	elemEndsEnds [numRelocs]uint32
+
+	scratchRelocEnt []RelocEnt
+}
+
+// PkgPath returns the package path for the package
+//
+// TODO(mdempsky): Remove; unneeded since CL 391014.
+func (pr *PkgDecoder) PkgPath() string { return pr.pkgPath }
+
+// SyncMarkers reports whether pr uses sync markers.
+func (pr *PkgDecoder) SyncMarkers() bool { return pr.sync }
+
+// NewPkgDecoder returns a PkgDecoder initialized to read the Unified
+// IR export data from input. pkgPath is the package path for the
+// compilation unit that produced the export data.
+func NewPkgDecoder(pkgPath, input string) PkgDecoder {
+	pr := PkgDecoder{
+		pkgPath: pkgPath,
+	}
+
+	// TODO(mdempsky): Implement direct indexing of input string to
+	// avoid copying the position information.
+
+	r := strings.NewReader(input)
+
+	var ver uint32
+	assert(binary.Read(r, binary.LittleEndian, &ver) == nil)
+	pr.version = Version(ver)
+
+	if pr.version >= numVersions {
+		panic(fmt.Errorf("cannot decode %q, export data version %d is greater than maximum supported version %d", pkgPath, pr.version, numVersions-1))
+	}
+
+	if pr.version.Has(Flags) {
+		var flags uint32
+		assert(binary.Read(r, binary.LittleEndian, &flags) == nil)
+		pr.sync = flags&flagSyncMarkers != 0
+	}
+
+	assert(binary.Read(r, binary.LittleEndian, pr.elemEndsEnds[:]) == nil)
+
+	pr.elemEnds = make([]uint32, pr.elemEndsEnds[len(pr.elemEndsEnds)-1])
+	assert(binary.Read(r, binary.LittleEndian, pr.elemEnds[:]) == nil)
+
+	pos, err := r.Seek(0, io.SeekCurrent)
+	assert(err == nil)
+
+	pr.elemData = input[pos:]
+
+	const fingerprintSize = 8
+	assert(len(pr.elemData)-fingerprintSize == int(pr.elemEnds[len(pr.elemEnds)-1]))
+
+	return pr
+}
+
+// NumElems returns the number of elements in section k.
+func (pr *PkgDecoder) NumElems(k RelocKind) int {
+	count := int(pr.elemEndsEnds[k])
+	if k > 0 {
+		count -= int(pr.elemEndsEnds[k-1])
+	}
+	return count
+}
+
+// TotalElems returns the total number of elements across all sections.
+func (pr *PkgDecoder) TotalElems() int {
+	return len(pr.elemEnds)
+}
+
+// Fingerprint returns the package fingerprint.
+func (pr *PkgDecoder) Fingerprint() [8]byte {
+	var fp [8]byte
+	copy(fp[:], pr.elemData[len(pr.elemData)-8:])
+	return fp
+}
+
+// AbsIdx returns the absolute index for the given (section, index)
+// pair.
+func (pr *PkgDecoder) AbsIdx(k RelocKind, idx Index) int {
+	absIdx := int(idx)
+	if k > 0 {
+		absIdx += int(pr.elemEndsEnds[k-1])
+	}
+	if absIdx >= int(pr.elemEndsEnds[k]) {
+		panicf("%v:%v is out of bounds; %v", k, idx, pr.elemEndsEnds)
+	}
+	return absIdx
+}
+
+// DataIdx returns the raw element bitstream for the given (section,
+// index) pair.
+func (pr *PkgDecoder) DataIdx(k RelocKind, idx Index) string {
+	absIdx := pr.AbsIdx(k, idx)
+
+	var start uint32
+	if absIdx > 0 {
+		start = pr.elemEnds[absIdx-1]
+	}
+	end := pr.elemEnds[absIdx]
+
+	return pr.elemData[start:end]
+}
+
+// StringIdx returns the string value for the given string index.
+func (pr *PkgDecoder) StringIdx(idx Index) string {
+	return pr.DataIdx(RelocString, idx)
+}
+
+// NewDecoder returns a Decoder for the given (section, index) pair,
+// and decodes the given SyncMarker from the element bitstream.
+func (pr *PkgDecoder) NewDecoder(k RelocKind, idx Index, marker SyncMarker) Decoder {
+	r := pr.NewDecoderRaw(k, idx)
+	r.Sync(marker)
+	return r
+}
+
+// TempDecoder returns a Decoder for the given (section, index) pair,
+// and decodes the given SyncMarker from the element bitstream.
+// If possible the Decoder should be RetireDecoder'd when it is no longer
+// needed, this will avoid heap allocations.
+func (pr *PkgDecoder) TempDecoder(k RelocKind, idx Index, marker SyncMarker) Decoder {
+	r := pr.TempDecoderRaw(k, idx)
+	r.Sync(marker)
+	return r
+}
+
+func (pr *PkgDecoder) RetireDecoder(d *Decoder) {
+	pr.scratchRelocEnt = d.Relocs
+	d.Relocs = nil
+}
+
+// NewDecoderRaw returns a Decoder for the given (section, index) pair.
+//
+// Most callers should use NewDecoder instead.
+func (pr *PkgDecoder) NewDecoderRaw(k RelocKind, idx Index) Decoder {
+	r := Decoder{
+		common: pr,
+		k:      k,
+		Idx:    idx,
+	}
+
+	r.Data.Reset(pr.DataIdx(k, idx))
+	r.Sync(SyncRelocs)
+	r.Relocs = make([]RelocEnt, r.Len())
+	for i := range r.Relocs {
+		r.Sync(SyncReloc)
+		r.Relocs[i] = RelocEnt{RelocKind(r.Len()), Index(r.Len())}
+	}
+
+	return r
+}
+
+func (pr *PkgDecoder) TempDecoderRaw(k RelocKind, idx Index) Decoder {
+	r := Decoder{
+		common: pr,
+		k:      k,
+		Idx:    idx,
+	}
+
+	r.Data.Reset(pr.DataIdx(k, idx))
+	r.Sync(SyncRelocs)
+	l := r.Len()
+	if cap(pr.scratchRelocEnt) >= l {
+		r.Relocs = pr.scratchRelocEnt[:l]
+		pr.scratchRelocEnt = nil
+	} else {
+		r.Relocs = make([]RelocEnt, l)
+	}
+	for i := range r.Relocs {
+		r.Sync(SyncReloc)
+		r.Relocs[i] = RelocEnt{RelocKind(r.Len()), Index(r.Len())}
+	}
+
+	return r
+}
+
+// A Decoder provides methods for decoding an individual element's
+// bitstream data.
+type Decoder struct {
+	common *PkgDecoder
+
+	Relocs []RelocEnt
+	Data   strings.Reader
+
+	k   RelocKind
+	Idx Index
+}
+
+func (r *Decoder) checkErr(err error) {
+	if err != nil {
+		panicf("unexpected decoding error: %w", err)
+	}
+}
+
+func (r *Decoder) rawUvarint() uint64 {
+	x, err := readUvarint(&r.Data)
+	r.checkErr(err)
+	return x
+}
+
+// readUvarint is a type-specialized copy of encoding/binary.ReadUvarint.
+// This avoids the interface conversion and thus has better escape properties,
+// which flows up the stack.
+func readUvarint(r *strings.Reader) (uint64, error) {
+	var x uint64
+	var s uint
+	for i := range binary.MaxVarintLen64 {
+		b, err := r.ReadByte()
+		if err != nil {
+			if i > 0 && err == io.EOF {
+				err = io.ErrUnexpectedEOF
+			}
+			return x, err
+		}
+		if b < 0x80 {
+			if i == binary.MaxVarintLen64-1 && b > 1 {
+				return x, overflow
+			}
+			return x | uint64(b)<> 1)
+	if ux&1 != 0 {
+		x = ^x
+	}
+	return x
+}
+
+func (r *Decoder) rawReloc(k RelocKind, idx int) Index {
+	e := r.Relocs[idx]
+	assert(e.Kind == k)
+	return e.Idx
+}
+
+// Sync decodes a sync marker from the element bitstream and asserts
+// that it matches the expected marker.
+//
+// If r.common.sync is false, then Sync is a no-op.
+func (r *Decoder) Sync(mWant SyncMarker) {
+	if !r.common.sync {
+		return
+	}
+
+	pos, _ := r.Data.Seek(0, io.SeekCurrent)
+	mHave := SyncMarker(r.rawUvarint())
+	writerPCs := make([]int, r.rawUvarint())
+	for i := range writerPCs {
+		writerPCs[i] = int(r.rawUvarint())
+	}
+
+	if mHave == mWant {
+		return
+	}
+
+	// There's some tension here between printing:
+	//
+	// (1) full file paths that tools can recognize (e.g., so emacs
+	//     hyperlinks the "file:line" text for easy navigation), or
+	//
+	// (2) short file paths that are easier for humans to read (e.g., by
+	//     omitting redundant or irrelevant details, so it's easier to
+	//     focus on the useful bits that remain).
+	//
+	// The current formatting favors the former, as it seems more
+	// helpful in practice. But perhaps the formatting could be improved
+	// to better address both concerns. For example, use relative file
+	// paths if they would be shorter, or rewrite file paths to contain
+	// "$GOROOT" (like objabi.AbsFile does) if tools can be taught how
+	// to reliably expand that again.
+
+	fmt.Printf("export data desync: package %q, section %v, index %v, offset %v\n", r.common.pkgPath, r.k, r.Idx, pos)
+
+	fmt.Printf("\nfound %v, written at:\n", mHave)
+	if len(writerPCs) == 0 {
+		fmt.Printf("\t[stack trace unavailable; recompile package %q with -d=syncframes]\n", r.common.pkgPath)
+	}
+	for _, pc := range writerPCs {
+		fmt.Printf("\t%s\n", r.common.StringIdx(r.rawReloc(RelocString, pc)))
+	}
+
+	fmt.Printf("\nexpected %v, reading at:\n", mWant)
+	var readerPCs [32]uintptr // TODO(mdempsky): Dynamically size?
+	n := runtime.Callers(2, readerPCs[:])
+	for _, pc := range fmtFrames(readerPCs[:n]...) {
+		fmt.Printf("\t%s\n", pc)
+	}
+
+	// We already printed a stack trace for the reader, so now we can
+	// simply exit. Printing a second one with panic or base.Fatalf
+	// would just be noise.
+	os.Exit(1)
+}
+
+// Bool decodes and returns a bool value from the element bitstream.
+func (r *Decoder) Bool() bool {
+	r.Sync(SyncBool)
+	x, err := r.Data.ReadByte()
+	r.checkErr(err)
+	assert(x < 2)
+	return x != 0
+}
+
+// Int64 decodes and returns an int64 value from the element bitstream.
+func (r *Decoder) Int64() int64 {
+	r.Sync(SyncInt64)
+	return r.rawVarint()
+}
+
+// Uint64 decodes and returns a uint64 value from the element bitstream.
+func (r *Decoder) Uint64() uint64 {
+	r.Sync(SyncUint64)
+	return r.rawUvarint()
+}
+
+// Len decodes and returns a non-negative int value from the element bitstream.
+func (r *Decoder) Len() int { x := r.Uint64(); v := int(x); assert(uint64(v) == x); return v }
+
+// Int decodes and returns an int value from the element bitstream.
+func (r *Decoder) Int() int { x := r.Int64(); v := int(x); assert(int64(v) == x); return v }
+
+// Uint decodes and returns a uint value from the element bitstream.
+func (r *Decoder) Uint() uint { x := r.Uint64(); v := uint(x); assert(uint64(v) == x); return v }
+
+// Code decodes a Code value from the element bitstream and returns
+// its ordinal value. It's the caller's responsibility to convert the
+// result to an appropriate Code type.
+//
+// TODO(mdempsky): Ideally this method would have signature "Code[T
+// Code] T" instead, but we don't allow generic methods and the
+// compiler can't depend on generics yet anyway.
+func (r *Decoder) Code(mark SyncMarker) int {
+	r.Sync(mark)
+	return r.Len()
+}
+
+// Reloc decodes a relocation of expected section k from the element
+// bitstream and returns an index to the referenced element.
+func (r *Decoder) Reloc(k RelocKind) Index {
+	r.Sync(SyncUseReloc)
+	return r.rawReloc(k, r.Len())
+}
+
+// String decodes and returns a string value from the element
+// bitstream.
+func (r *Decoder) String() string {
+	r.Sync(SyncString)
+	return r.common.StringIdx(r.Reloc(RelocString))
+}
+
+// Strings decodes and returns a variable-length slice of strings from
+// the element bitstream.
+func (r *Decoder) Strings() []string {
+	res := make([]string, r.Len())
+	for i := range res {
+		res[i] = r.String()
+	}
+	return res
+}
+
+// Value decodes and returns a constant.Value from the element
+// bitstream.
+func (r *Decoder) Value() constant.Value {
+	r.Sync(SyncValue)
+	isComplex := r.Bool()
+	val := r.scalar()
+	if isComplex {
+		val = constant.BinaryOp(val, token.ADD, constant.MakeImag(r.scalar()))
+	}
+	return val
+}
+
+func (r *Decoder) scalar() constant.Value {
+	switch tag := CodeVal(r.Code(SyncVal)); tag {
+	default:
+		panic(fmt.Errorf("unexpected scalar tag: %v", tag))
+
+	case ValBool:
+		return constant.MakeBool(r.Bool())
+	case ValString:
+		return constant.MakeString(r.String())
+	case ValInt64:
+		return constant.MakeInt64(r.Int64())
+	case ValBigInt:
+		return constant.Make(r.bigInt())
+	case ValBigRat:
+		num := r.bigInt()
+		denom := r.bigInt()
+		return constant.Make(new(big.Rat).SetFrac(num, denom))
+	case ValBigFloat:
+		return constant.Make(r.bigFloat())
+	}
+}
+
+func (r *Decoder) bigInt() *big.Int {
+	v := new(big.Int).SetBytes([]byte(r.String()))
+	if r.Bool() {
+		v.Neg(v)
+	}
+	return v
+}
+
+func (r *Decoder) bigFloat() *big.Float {
+	v := new(big.Float).SetPrec(512)
+	assert(v.UnmarshalText([]byte(r.String())) == nil)
+	return v
+}
+
+// @@@ Helpers
+
+// TODO(mdempsky): These should probably be removed. I think they're a
+// smell that the export data format is not yet quite right.
+
+// PeekPkgPath returns the package path for the specified package
+// index.
+func (pr *PkgDecoder) PeekPkgPath(idx Index) string {
+	var path string
+	{
+		r := pr.TempDecoder(RelocPkg, idx, SyncPkgDef)
+		path = r.String()
+		pr.RetireDecoder(&r)
+	}
+	if path == "" {
+		path = pr.pkgPath
+	}
+	return path
+}
+
+// PeekObj returns the package path, object name, and CodeObj for the
+// specified object index.
+func (pr *PkgDecoder) PeekObj(idx Index) (string, string, CodeObj) {
+	var ridx Index
+	var name string
+	var rcode int
+	{
+		r := pr.TempDecoder(RelocName, idx, SyncObject1)
+		r.Sync(SyncSym)
+		r.Sync(SyncPkg)
+		ridx = r.Reloc(RelocPkg)
+		name = r.String()
+		rcode = r.Code(SyncCodeObj)
+		pr.RetireDecoder(&r)
+	}
+
+	path := pr.PeekPkgPath(ridx)
+	assert(name != "")
+
+	tag := CodeObj(rcode)
+
+	return path, name, tag
+}
+
+// Version reports the version of the bitstream.
+func (w *Decoder) Version() Version { return w.common.version }
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/doc.go b/vendor/golang.org/x/tools/internal/pkgbits/doc.go
new file mode 100644
index 0000000..c8a2796
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/pkgbits/doc.go
@@ -0,0 +1,32 @@
+// Copyright 2022 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package pkgbits implements low-level coding abstractions for
+// Unified IR's export data format.
+//
+// At a low-level, a package is a collection of bitstream elements.
+// Each element has a "kind" and a dense, non-negative index.
+// Elements can be randomly accessed given their kind and index.
+//
+// Individual elements are sequences of variable-length values (e.g.,
+// integers, booleans, strings, go/constant values, cross-references
+// to other elements). Package pkgbits provides APIs for encoding and
+// decoding these low-level values, but the details of mapping
+// higher-level Go constructs into elements is left to higher-level
+// abstractions.
+//
+// Elements may cross-reference each other with "relocations." For
+// example, an element representing a pointer type has a relocation
+// referring to the element type.
+//
+// Go constructs may be composed as a constellation of multiple
+// elements. For example, a declared function may have one element to
+// describe the object (e.g., its name, type, position), and a
+// separate element to describe its function body. This allows readers
+// some flexibility in efficiently seeking or re-reading data (e.g.,
+// inlining requires re-reading the function body for each inlined
+// call, without needing to re-read the object-level details).
+//
+// This is a copy of internal/pkgbits in the Go implementation.
+package pkgbits
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/encoder.go b/vendor/golang.org/x/tools/internal/pkgbits/encoder.go
new file mode 100644
index 0000000..c17a123
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/pkgbits/encoder.go
@@ -0,0 +1,392 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkgbits
+
+import (
+	"bytes"
+	"crypto/md5"
+	"encoding/binary"
+	"go/constant"
+	"io"
+	"math/big"
+	"runtime"
+	"strings"
+)
+
+// A PkgEncoder provides methods for encoding a package's Unified IR
+// export data.
+type PkgEncoder struct {
+	// version of the bitstream.
+	version Version
+
+	// elems holds the bitstream for previously encoded elements.
+	elems [numRelocs][]string
+
+	// stringsIdx maps previously encoded strings to their index within
+	// the RelocString section, to allow deduplication. That is,
+	// elems[RelocString][stringsIdx[s]] == s (if present).
+	stringsIdx map[string]Index
+
+	// syncFrames is the number of frames to write at each sync
+	// marker. A negative value means sync markers are omitted.
+	syncFrames int
+}
+
+// SyncMarkers reports whether pw uses sync markers.
+func (pw *PkgEncoder) SyncMarkers() bool { return pw.syncFrames >= 0 }
+
+// NewPkgEncoder returns an initialized PkgEncoder.
+//
+// syncFrames is the number of caller frames that should be serialized
+// at Sync points. Serializing additional frames results in larger
+// export data files, but can help diagnosing desync errors in
+// higher-level Unified IR reader/writer code. If syncFrames is
+// negative, then sync markers are omitted entirely.
+func NewPkgEncoder(version Version, syncFrames int) PkgEncoder {
+	return PkgEncoder{
+		version:    version,
+		stringsIdx: make(map[string]Index),
+		syncFrames: syncFrames,
+	}
+}
+
+// DumpTo writes the package's encoded data to out0 and returns the
+// package fingerprint.
+func (pw *PkgEncoder) DumpTo(out0 io.Writer) (fingerprint [8]byte) {
+	h := md5.New()
+	out := io.MultiWriter(out0, h)
+
+	writeUint32 := func(x uint32) {
+		assert(binary.Write(out, binary.LittleEndian, x) == nil)
+	}
+
+	writeUint32(uint32(pw.version))
+
+	if pw.version.Has(Flags) {
+		var flags uint32
+		if pw.SyncMarkers() {
+			flags |= flagSyncMarkers
+		}
+		writeUint32(flags)
+	}
+
+	// Write elemEndsEnds.
+	var sum uint32
+	for _, elems := range &pw.elems {
+		sum += uint32(len(elems))
+		writeUint32(sum)
+	}
+
+	// Write elemEnds.
+	sum = 0
+	for _, elems := range &pw.elems {
+		for _, elem := range elems {
+			sum += uint32(len(elem))
+			writeUint32(sum)
+		}
+	}
+
+	// Write elemData.
+	for _, elems := range &pw.elems {
+		for _, elem := range elems {
+			_, err := io.WriteString(out, elem)
+			assert(err == nil)
+		}
+	}
+
+	// Write fingerprint.
+	copy(fingerprint[:], h.Sum(nil))
+	_, err := out0.Write(fingerprint[:])
+	assert(err == nil)
+
+	return
+}
+
+// StringIdx adds a string value to the strings section, if not
+// already present, and returns its index.
+func (pw *PkgEncoder) StringIdx(s string) Index {
+	if idx, ok := pw.stringsIdx[s]; ok {
+		assert(pw.elems[RelocString][idx] == s)
+		return idx
+	}
+
+	idx := Index(len(pw.elems[RelocString]))
+	pw.elems[RelocString] = append(pw.elems[RelocString], s)
+	pw.stringsIdx[s] = idx
+	return idx
+}
+
+// NewEncoder returns an Encoder for a new element within the given
+// section, and encodes the given SyncMarker as the start of the
+// element bitstream.
+func (pw *PkgEncoder) NewEncoder(k RelocKind, marker SyncMarker) Encoder {
+	e := pw.NewEncoderRaw(k)
+	e.Sync(marker)
+	return e
+}
+
+// NewEncoderRaw returns an Encoder for a new element within the given
+// section.
+//
+// Most callers should use NewEncoder instead.
+func (pw *PkgEncoder) NewEncoderRaw(k RelocKind) Encoder {
+	idx := Index(len(pw.elems[k]))
+	pw.elems[k] = append(pw.elems[k], "") // placeholder
+
+	return Encoder{
+		p:   pw,
+		k:   k,
+		Idx: idx,
+	}
+}
+
+// An Encoder provides methods for encoding an individual element's
+// bitstream data.
+type Encoder struct {
+	p *PkgEncoder
+
+	Relocs   []RelocEnt
+	RelocMap map[RelocEnt]uint32
+	Data     bytes.Buffer // accumulated element bitstream data
+
+	encodingRelocHeader bool
+
+	k   RelocKind
+	Idx Index // index within relocation section
+}
+
+// Flush finalizes the element's bitstream and returns its Index.
+func (w *Encoder) Flush() Index {
+	var sb strings.Builder
+
+	// Backup the data so we write the relocations at the front.
+	var tmp bytes.Buffer
+	io.Copy(&tmp, &w.Data)
+
+	// TODO(mdempsky): Consider writing these out separately so they're
+	// easier to strip, along with function bodies, so that we can prune
+	// down to just the data that's relevant to go/types.
+	if w.encodingRelocHeader {
+		panic("encodingRelocHeader already true; recursive flush?")
+	}
+	w.encodingRelocHeader = true
+	w.Sync(SyncRelocs)
+	w.Len(len(w.Relocs))
+	for _, rEnt := range w.Relocs {
+		w.Sync(SyncReloc)
+		w.Len(int(rEnt.Kind))
+		w.Len(int(rEnt.Idx))
+	}
+
+	io.Copy(&sb, &w.Data)
+	io.Copy(&sb, &tmp)
+	w.p.elems[w.k][w.Idx] = sb.String()
+
+	return w.Idx
+}
+
+func (w *Encoder) checkErr(err error) {
+	if err != nil {
+		panicf("unexpected encoding error: %v", err)
+	}
+}
+
+func (w *Encoder) rawUvarint(x uint64) {
+	var buf [binary.MaxVarintLen64]byte
+	n := binary.PutUvarint(buf[:], x)
+	_, err := w.Data.Write(buf[:n])
+	w.checkErr(err)
+}
+
+func (w *Encoder) rawVarint(x int64) {
+	// Zig-zag encode.
+	ux := uint64(x) << 1
+	if x < 0 {
+		ux = ^ux
+	}
+
+	w.rawUvarint(ux)
+}
+
+func (w *Encoder) rawReloc(r RelocKind, idx Index) int {
+	e := RelocEnt{r, idx}
+	if w.RelocMap != nil {
+		if i, ok := w.RelocMap[e]; ok {
+			return int(i)
+		}
+	} else {
+		w.RelocMap = make(map[RelocEnt]uint32)
+	}
+
+	i := len(w.Relocs)
+	w.RelocMap[e] = uint32(i)
+	w.Relocs = append(w.Relocs, e)
+	return i
+}
+
+func (w *Encoder) Sync(m SyncMarker) {
+	if !w.p.SyncMarkers() {
+		return
+	}
+
+	// Writing out stack frame string references requires working
+	// relocations, but writing out the relocations themselves involves
+	// sync markers. To prevent infinite recursion, we simply trim the
+	// stack frame for sync markers within the relocation header.
+	var frames []string
+	if !w.encodingRelocHeader && w.p.syncFrames > 0 {
+		pcs := make([]uintptr, w.p.syncFrames)
+		n := runtime.Callers(2, pcs)
+		frames = fmtFrames(pcs[:n]...)
+	}
+
+	// TODO(mdempsky): Save space by writing out stack frames as a
+	// linked list so we can share common stack frames.
+	w.rawUvarint(uint64(m))
+	w.rawUvarint(uint64(len(frames)))
+	for _, frame := range frames {
+		w.rawUvarint(uint64(w.rawReloc(RelocString, w.p.StringIdx(frame))))
+	}
+}
+
+// Bool encodes and writes a bool value into the element bitstream,
+// and then returns the bool value.
+//
+// For simple, 2-alternative encodings, the idiomatic way to call Bool
+// is something like:
+//
+//	if w.Bool(x != 0) {
+//		// alternative #1
+//	} else {
+//		// alternative #2
+//	}
+//
+// For multi-alternative encodings, use Code instead.
+func (w *Encoder) Bool(b bool) bool {
+	w.Sync(SyncBool)
+	var x byte
+	if b {
+		x = 1
+	}
+	err := w.Data.WriteByte(x)
+	w.checkErr(err)
+	return b
+}
+
+// Int64 encodes and writes an int64 value into the element bitstream.
+func (w *Encoder) Int64(x int64) {
+	w.Sync(SyncInt64)
+	w.rawVarint(x)
+}
+
+// Uint64 encodes and writes a uint64 value into the element bitstream.
+func (w *Encoder) Uint64(x uint64) {
+	w.Sync(SyncUint64)
+	w.rawUvarint(x)
+}
+
+// Len encodes and writes a non-negative int value into the element bitstream.
+func (w *Encoder) Len(x int) { assert(x >= 0); w.Uint64(uint64(x)) }
+
+// Int encodes and writes an int value into the element bitstream.
+func (w *Encoder) Int(x int) { w.Int64(int64(x)) }
+
+// Uint encodes and writes a uint value into the element bitstream.
+func (w *Encoder) Uint(x uint) { w.Uint64(uint64(x)) }
+
+// Reloc encodes and writes a relocation for the given (section,
+// index) pair into the element bitstream.
+//
+// Note: Only the index is formally written into the element
+// bitstream, so bitstream decoders must know from context which
+// section an encoded relocation refers to.
+func (w *Encoder) Reloc(r RelocKind, idx Index) {
+	w.Sync(SyncUseReloc)
+	w.Len(w.rawReloc(r, idx))
+}
+
+// Code encodes and writes a Code value into the element bitstream.
+func (w *Encoder) Code(c Code) {
+	w.Sync(c.Marker())
+	w.Len(c.Value())
+}
+
+// String encodes and writes a string value into the element
+// bitstream.
+//
+// Internally, strings are deduplicated by adding them to the strings
+// section (if not already present), and then writing a relocation
+// into the element bitstream.
+func (w *Encoder) String(s string) {
+	w.StringRef(w.p.StringIdx(s))
+}
+
+// StringRef writes a reference to the given index, which must be a
+// previously encoded string value.
+func (w *Encoder) StringRef(idx Index) {
+	w.Sync(SyncString)
+	w.Reloc(RelocString, idx)
+}
+
+// Strings encodes and writes a variable-length slice of strings into
+// the element bitstream.
+func (w *Encoder) Strings(ss []string) {
+	w.Len(len(ss))
+	for _, s := range ss {
+		w.String(s)
+	}
+}
+
+// Value encodes and writes a constant.Value into the element
+// bitstream.
+func (w *Encoder) Value(val constant.Value) {
+	w.Sync(SyncValue)
+	if w.Bool(val.Kind() == constant.Complex) {
+		w.scalar(constant.Real(val))
+		w.scalar(constant.Imag(val))
+	} else {
+		w.scalar(val)
+	}
+}
+
+func (w *Encoder) scalar(val constant.Value) {
+	switch v := constant.Val(val).(type) {
+	default:
+		panicf("unhandled %v (%v)", val, val.Kind())
+	case bool:
+		w.Code(ValBool)
+		w.Bool(v)
+	case string:
+		w.Code(ValString)
+		w.String(v)
+	case int64:
+		w.Code(ValInt64)
+		w.Int64(v)
+	case *big.Int:
+		w.Code(ValBigInt)
+		w.bigInt(v)
+	case *big.Rat:
+		w.Code(ValBigRat)
+		w.bigInt(v.Num())
+		w.bigInt(v.Denom())
+	case *big.Float:
+		w.Code(ValBigFloat)
+		w.bigFloat(v)
+	}
+}
+
+func (w *Encoder) bigInt(v *big.Int) {
+	b := v.Bytes()
+	w.String(string(b)) // TODO: More efficient encoding.
+	w.Bool(v.Sign() < 0)
+}
+
+func (w *Encoder) bigFloat(v *big.Float) {
+	b := v.Append(nil, 'p', -1)
+	w.String(string(b)) // TODO: More efficient encoding.
+}
+
+// Version reports the version of the bitstream.
+func (w *Encoder) Version() Version { return w.p.version }
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/flags.go b/vendor/golang.org/x/tools/internal/pkgbits/flags.go
new file mode 100644
index 0000000..6542227
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/pkgbits/flags.go
@@ -0,0 +1,9 @@
+// Copyright 2022 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkgbits
+
+const (
+	flagSyncMarkers = 1 << iota // file format contains sync markers
+)
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/reloc.go b/vendor/golang.org/x/tools/internal/pkgbits/reloc.go
new file mode 100644
index 0000000..fcdfb97
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/pkgbits/reloc.go
@@ -0,0 +1,42 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkgbits
+
+// A RelocKind indicates a particular section within a unified IR export.
+type RelocKind int32
+
+// An Index represents a bitstream element index within a particular
+// section.
+type Index int32
+
+// A relocEnt (relocation entry) is an entry in an element's local
+// reference table.
+//
+// TODO(mdempsky): Rename this too.
+type RelocEnt struct {
+	Kind RelocKind
+	Idx  Index
+}
+
+// Reserved indices within the meta relocation section.
+const (
+	PublicRootIdx  Index = 0
+	PrivateRootIdx Index = 1
+)
+
+const (
+	RelocString RelocKind = iota
+	RelocMeta
+	RelocPosBase
+	RelocPkg
+	RelocName
+	RelocType
+	RelocObj
+	RelocObjExt
+	RelocObjDict
+	RelocBody
+
+	numRelocs = iota
+)
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/support.go b/vendor/golang.org/x/tools/internal/pkgbits/support.go
new file mode 100644
index 0000000..50534a2
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/pkgbits/support.go
@@ -0,0 +1,17 @@
+// Copyright 2022 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkgbits
+
+import "fmt"
+
+func assert(b bool) {
+	if !b {
+		panic("assertion failed")
+	}
+}
+
+func panicf(format string, args ...any) {
+	panic(fmt.Errorf(format, args...))
+}
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/sync.go b/vendor/golang.org/x/tools/internal/pkgbits/sync.go
new file mode 100644
index 0000000..1520b73
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/pkgbits/sync.go
@@ -0,0 +1,136 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkgbits
+
+import (
+	"fmt"
+	"runtime"
+	"strings"
+)
+
+// fmtFrames formats a backtrace for reporting reader/writer desyncs.
+func fmtFrames(pcs ...uintptr) []string {
+	res := make([]string, 0, len(pcs))
+	walkFrames(pcs, func(file string, line int, name string, offset uintptr) {
+		// Trim package from function name. It's just redundant noise.
+		name = strings.TrimPrefix(name, "cmd/compile/internal/noder.")
+
+		res = append(res, fmt.Sprintf("%s:%v: %s +0x%v", file, line, name, offset))
+	})
+	return res
+}
+
+type frameVisitor func(file string, line int, name string, offset uintptr)
+
+// walkFrames calls visit for each call frame represented by pcs.
+//
+// pcs should be a slice of PCs, as returned by runtime.Callers.
+func walkFrames(pcs []uintptr, visit frameVisitor) {
+	if len(pcs) == 0 {
+		return
+	}
+
+	frames := runtime.CallersFrames(pcs)
+	for {
+		frame, more := frames.Next()
+		visit(frame.File, frame.Line, frame.Function, frame.PC-frame.Entry)
+		if !more {
+			return
+		}
+	}
+}
+
+// SyncMarker is an enum type that represents markers that may be
+// written to export data to ensure the reader and writer stay
+// synchronized.
+type SyncMarker int
+
+//go:generate stringer -type=SyncMarker -trimprefix=Sync
+
+const (
+	_ SyncMarker = iota
+
+	// Public markers (known to go/types importers).
+
+	// Low-level coding markers.
+	SyncEOF
+	SyncBool
+	SyncInt64
+	SyncUint64
+	SyncString
+	SyncValue
+	SyncVal
+	SyncRelocs
+	SyncReloc
+	SyncUseReloc
+
+	// Higher-level object and type markers.
+	SyncPublic
+	SyncPos
+	SyncPosBase
+	SyncObject
+	SyncObject1
+	SyncPkg
+	SyncPkgDef
+	SyncMethod
+	SyncType
+	SyncTypeIdx
+	SyncTypeParamNames
+	SyncSignature
+	SyncParams
+	SyncParam
+	SyncCodeObj
+	SyncSym
+	SyncLocalIdent
+	SyncSelector
+
+	// Private markers (only known to cmd/compile).
+	SyncPrivate
+
+	SyncFuncExt
+	SyncVarExt
+	SyncTypeExt
+	SyncPragma
+
+	SyncExprList
+	SyncExprs
+	SyncExpr
+	SyncExprType
+	SyncAssign
+	SyncOp
+	SyncFuncLit
+	SyncCompLit
+
+	SyncDecl
+	SyncFuncBody
+	SyncOpenScope
+	SyncCloseScope
+	SyncCloseAnotherScope
+	SyncDeclNames
+	SyncDeclName
+
+	SyncStmts
+	SyncBlockStmt
+	SyncIfStmt
+	SyncForStmt
+	SyncSwitchStmt
+	SyncRangeStmt
+	SyncCaseClause
+	SyncCommClause
+	SyncSelectStmt
+	SyncDecls
+	SyncLabeledStmt
+	SyncUseObjLocal
+	SyncAddLocal
+	SyncLinkname
+	SyncStmt1
+	SyncStmtsEnd
+	SyncLabel
+	SyncOptLabel
+
+	SyncMultiExpr
+	SyncRType
+	SyncConvRTTI
+)
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.go b/vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.go
new file mode 100644
index 0000000..582ad56
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.go
@@ -0,0 +1,92 @@
+// Code generated by "stringer -type=SyncMarker -trimprefix=Sync"; DO NOT EDIT.
+
+package pkgbits
+
+import "strconv"
+
+func _() {
+	// An "invalid array index" compiler error signifies that the constant values have changed.
+	// Re-run the stringer command to generate them again.
+	var x [1]struct{}
+	_ = x[SyncEOF-1]
+	_ = x[SyncBool-2]
+	_ = x[SyncInt64-3]
+	_ = x[SyncUint64-4]
+	_ = x[SyncString-5]
+	_ = x[SyncValue-6]
+	_ = x[SyncVal-7]
+	_ = x[SyncRelocs-8]
+	_ = x[SyncReloc-9]
+	_ = x[SyncUseReloc-10]
+	_ = x[SyncPublic-11]
+	_ = x[SyncPos-12]
+	_ = x[SyncPosBase-13]
+	_ = x[SyncObject-14]
+	_ = x[SyncObject1-15]
+	_ = x[SyncPkg-16]
+	_ = x[SyncPkgDef-17]
+	_ = x[SyncMethod-18]
+	_ = x[SyncType-19]
+	_ = x[SyncTypeIdx-20]
+	_ = x[SyncTypeParamNames-21]
+	_ = x[SyncSignature-22]
+	_ = x[SyncParams-23]
+	_ = x[SyncParam-24]
+	_ = x[SyncCodeObj-25]
+	_ = x[SyncSym-26]
+	_ = x[SyncLocalIdent-27]
+	_ = x[SyncSelector-28]
+	_ = x[SyncPrivate-29]
+	_ = x[SyncFuncExt-30]
+	_ = x[SyncVarExt-31]
+	_ = x[SyncTypeExt-32]
+	_ = x[SyncPragma-33]
+	_ = x[SyncExprList-34]
+	_ = x[SyncExprs-35]
+	_ = x[SyncExpr-36]
+	_ = x[SyncExprType-37]
+	_ = x[SyncAssign-38]
+	_ = x[SyncOp-39]
+	_ = x[SyncFuncLit-40]
+	_ = x[SyncCompLit-41]
+	_ = x[SyncDecl-42]
+	_ = x[SyncFuncBody-43]
+	_ = x[SyncOpenScope-44]
+	_ = x[SyncCloseScope-45]
+	_ = x[SyncCloseAnotherScope-46]
+	_ = x[SyncDeclNames-47]
+	_ = x[SyncDeclName-48]
+	_ = x[SyncStmts-49]
+	_ = x[SyncBlockStmt-50]
+	_ = x[SyncIfStmt-51]
+	_ = x[SyncForStmt-52]
+	_ = x[SyncSwitchStmt-53]
+	_ = x[SyncRangeStmt-54]
+	_ = x[SyncCaseClause-55]
+	_ = x[SyncCommClause-56]
+	_ = x[SyncSelectStmt-57]
+	_ = x[SyncDecls-58]
+	_ = x[SyncLabeledStmt-59]
+	_ = x[SyncUseObjLocal-60]
+	_ = x[SyncAddLocal-61]
+	_ = x[SyncLinkname-62]
+	_ = x[SyncStmt1-63]
+	_ = x[SyncStmtsEnd-64]
+	_ = x[SyncLabel-65]
+	_ = x[SyncOptLabel-66]
+	_ = x[SyncMultiExpr-67]
+	_ = x[SyncRType-68]
+	_ = x[SyncConvRTTI-69]
+}
+
+const _SyncMarker_name = "EOFBoolInt64Uint64StringValueValRelocsRelocUseRelocPublicPosPosBaseObjectObject1PkgPkgDefMethodTypeTypeIdxTypeParamNamesSignatureParamsParamCodeObjSymLocalIdentSelectorPrivateFuncExtVarExtTypeExtPragmaExprListExprsExprExprTypeAssignOpFuncLitCompLitDeclFuncBodyOpenScopeCloseScopeCloseAnotherScopeDeclNamesDeclNameStmtsBlockStmtIfStmtForStmtSwitchStmtRangeStmtCaseClauseCommClauseSelectStmtDeclsLabeledStmtUseObjLocalAddLocalLinknameStmt1StmtsEndLabelOptLabelMultiExprRTypeConvRTTI"
+
+var _SyncMarker_index = [...]uint16{0, 3, 7, 12, 18, 24, 29, 32, 38, 43, 51, 57, 60, 67, 73, 80, 83, 89, 95, 99, 106, 120, 129, 135, 140, 147, 150, 160, 168, 175, 182, 188, 195, 201, 209, 214, 218, 226, 232, 234, 241, 248, 252, 260, 269, 279, 296, 305, 313, 318, 327, 333, 340, 350, 359, 369, 379, 389, 394, 405, 416, 424, 432, 437, 445, 450, 458, 467, 472, 480}
+
+func (i SyncMarker) String() string {
+	i -= 1
+	if i < 0 || i >= SyncMarker(len(_SyncMarker_index)-1) {
+		return "SyncMarker(" + strconv.FormatInt(int64(i+1), 10) + ")"
+	}
+	return _SyncMarker_name[_SyncMarker_index[i]:_SyncMarker_index[i+1]]
+}
diff --git a/vendor/golang.org/x/tools/internal/pkgbits/version.go b/vendor/golang.org/x/tools/internal/pkgbits/version.go
new file mode 100644
index 0000000..53af9df
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/pkgbits/version.go
@@ -0,0 +1,85 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkgbits
+
+// Version indicates a version of a unified IR bitstream.
+// Each Version indicates the addition, removal, or change of
+// new data in the bitstream.
+//
+// These are serialized to disk and the interpretation remains fixed.
+type Version uint32
+
+const (
+	// V0: initial prototype.
+	//
+	// All data that is not assigned a Field is in version V0
+	// and has not been deprecated.
+	V0 Version = iota
+
+	// V1: adds the Flags uint32 word
+	V1
+
+	// V2: removes unused legacy fields and supports type parameters for aliases.
+	// - remove the legacy "has init" bool from the public root
+	// - remove obj's "derived func instance" bool
+	// - add a TypeParamNames field to ObjAlias
+	// - remove derived info "needed" bool
+	V2
+
+	numVersions = iota
+)
+
+// Field denotes a unit of data in the serialized unified IR bitstream.
+// It is conceptually a like field in a structure.
+//
+// We only really need Fields when the data may or may not be present
+// in a stream based on the Version of the bitstream.
+//
+// Unlike much of pkgbits, Fields are not serialized and
+// can change values as needed.
+type Field int
+
+const (
+	// Flags in a uint32 in the header of a bitstream
+	// that is used to indicate whether optional features are enabled.
+	Flags Field = iota
+
+	// Deprecated: HasInit was a bool indicating whether a package
+	// has any init functions.
+	HasInit
+
+	// Deprecated: DerivedFuncInstance was a bool indicating
+	// whether an object was a function instance.
+	DerivedFuncInstance
+
+	// ObjAlias has a list of TypeParamNames.
+	AliasTypeParamNames
+
+	// Deprecated: DerivedInfoNeeded was a bool indicating
+	// whether a type was a derived type.
+	DerivedInfoNeeded
+
+	numFields = iota
+)
+
+// introduced is the version a field was added.
+var introduced = [numFields]Version{
+	Flags:               V1,
+	AliasTypeParamNames: V2,
+}
+
+// removed is the version a field was removed in or 0 for fields
+// that have not yet been deprecated.
+// (So removed[f]-1 is the last version it is included in.)
+var removed = [numFields]Version{
+	HasInit:             V2,
+	DerivedFuncInstance: V2,
+	DerivedInfoNeeded:   V2,
+}
+
+// Has reports whether field f is present in a bitstream at version v.
+func (v Version) Has(f Field) bool {
+	return introduced[f] <= v && (v < removed[f] || removed[f] == V0)
+}
diff --git a/vendor/golang.org/x/tools/internal/stdlib/deps.go b/vendor/golang.org/x/tools/internal/stdlib/deps.go
new file mode 100644
index 0000000..77cf8d2
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/stdlib/deps.go
@@ -0,0 +1,359 @@
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Code generated by generate.go. DO NOT EDIT.
+
+package stdlib
+
+type pkginfo struct {
+	name string
+	deps string // list of indices of dependencies, as varint-encoded deltas
+}
+
+var deps = [...]pkginfo{
+	{"archive/tar", "\x03j\x03E5\x01\v\x01#\x01\x01\x02\x05\n\x02\x01\x02\x02\v"},
+	{"archive/zip", "\x02\x04`\a\x16\x0205\x01+\x05\x01\x11\x03\x02\r\x04"},
+	{"bufio", "\x03j}F\x13"},
+	{"bytes", "m+R\x03\fH\x02\x02"},
+	{"cmp", ""},
+	{"compress/bzip2", "\x02\x02\xe6\x01C"},
+	{"compress/flate", "\x02k\x03z\r\x025\x01\x03"},
+	{"compress/gzip", "\x02\x04`\a\x03\x15eU"},
+	{"compress/lzw", "\x02k\x03z"},
+	{"compress/zlib", "\x02\x04`\a\x03\x13\x01f"},
+	{"container/heap", "\xae\x02"},
+	{"container/list", ""},
+	{"container/ring", ""},
+	{"context", "m\\i\x01\f"},
+	{"crypto", "\x83\x01gE"},
+	{"crypto/aes", "\x10\n\a\x8e\x02"},
+	{"crypto/cipher", "\x03\x1e\x01\x01\x1d\x11\x1c,Q"},
+	{"crypto/des", "\x10\x13\x1d-,\x96\x01\x03"},
+	{"crypto/dsa", "@\x04)}\x0e"},
+	{"crypto/ecdh", "\x03\v\f\x0e\x04\x14\x04\r\x1c}"},
+	{"crypto/ecdsa", "\x0e\x05\x03\x04\x01\x0e\x16\x01\x04\f\x01\x1c}\x0e\x04L\x01"},
+	{"crypto/ed25519", "\x0e\x1c\x16\n\a\x1c}E"},
+	{"crypto/elliptic", "0=}\x0e:"},
+	{"crypto/fips140", " \x05\x90\x01"},
+	{"crypto/hkdf", "-\x12\x01-\x16"},
+	{"crypto/hmac", "\x1a\x14\x11\x01\x112"},
+	{"crypto/internal/boring", "\x0e\x02\rf"},
+	{"crypto/internal/boring/bbig", "\x1a\xde\x01M"},
+	{"crypto/internal/boring/bcache", "\xb3\x02\x12"},
+	{"crypto/internal/boring/sig", ""},
+	{"crypto/internal/cryptotest", "\x03\r\n)\x0e\x19\x06\x13\x12#\a\t\x11\x11\x11\x1b\x01\f\r\x05\n"},
+	{"crypto/internal/entropy", "E"},
+	{"crypto/internal/fips140", ">/}9\r\x15"},
+	{"crypto/internal/fips140/aes", "\x03\x1d\x03\x02\x13\x04\x01\x01\x05*\x8c\x016"},
+	{"crypto/internal/fips140/aes/gcm", " \x01\x02\x02\x02\x11\x04\x01\x06*\x8a\x01"},
+	{"crypto/internal/fips140/alias", "\xc5\x02"},
+	{"crypto/internal/fips140/bigmod", "%\x17\x01\x06*\x8c\x01"},
+	{"crypto/internal/fips140/check", " \x0e\x06\b\x02\xac\x01["},
+	{"crypto/internal/fips140/check/checktest", "%\xfe\x01\""},
+	{"crypto/internal/fips140/drbg", "\x03\x1c\x01\x01\x04\x13\x04\b\x01(}\x0f9"},
+	{"crypto/internal/fips140/ecdh", "\x03\x1d\x05\x02\t\f1}\x0f9"},
+	{"crypto/internal/fips140/ecdsa", "\x03\x1d\x04\x01\x02\a\x02\x067}H"},
+	{"crypto/internal/fips140/ed25519", "\x03\x1d\x05\x02\x04\v7\xc2\x01\x03"},
+	{"crypto/internal/fips140/edwards25519", "%\a\f\x041\x8c\x019"},
+	{"crypto/internal/fips140/edwards25519/field", "%\x13\x041\x8c\x01"},
+	{"crypto/internal/fips140/hkdf", "\x03\x1d\x05\t\x069"},
+	{"crypto/internal/fips140/hmac", "\x03\x1d\x14\x01\x017"},
+	{"crypto/internal/fips140/mlkem", "\x03\x1d\x05\x02\x0e\x03\x041"},
+	{"crypto/internal/fips140/nistec", "%\f\a\x041\x8c\x01*\x0f\x13"},
+	{"crypto/internal/fips140/nistec/fiat", "%\x135\x8c\x01"},
+	{"crypto/internal/fips140/pbkdf2", "\x03\x1d\x05\t\x069"},
+	{"crypto/internal/fips140/rsa", "\x03\x1d\x04\x01\x02\r\x01\x01\x025}H"},
+	{"crypto/internal/fips140/sha256", "\x03\x1d\x1c\x01\x06*\x8c\x01"},
+	{"crypto/internal/fips140/sha3", "\x03\x1d\x18\x04\x010\x8c\x01L"},
+	{"crypto/internal/fips140/sha512", "\x03\x1d\x1c\x01\x06*\x8c\x01"},
+	{"crypto/internal/fips140/ssh", " \x05"},
+	{"crypto/internal/fips140/subtle", "#"},
+	{"crypto/internal/fips140/tls12", "\x03\x1d\x05\t\x06\x027"},
+	{"crypto/internal/fips140/tls13", "\x03\x1d\x05\b\a\b1"},
+	{"crypto/internal/fips140deps", ""},
+	{"crypto/internal/fips140deps/byteorder", "\x99\x01"},
+	{"crypto/internal/fips140deps/cpu", "\xad\x01\a"},
+	{"crypto/internal/fips140deps/godebug", "\xb5\x01"},
+	{"crypto/internal/fips140hash", "5\x1a4\xc2\x01"},
+	{"crypto/internal/fips140only", "'\r\x01\x01M25"},
+	{"crypto/internal/fips140test", ""},
+	{"crypto/internal/hpke", "\x0e\x01\x01\x03\x1a\x1d#,`N"},
+	{"crypto/internal/impl", "\xb0\x02"},
+	{"crypto/internal/randutil", "\xea\x01\x12"},
+	{"crypto/internal/sysrand", "mi!\x1f\r\x0f\x01\x01\v\x06"},
+	{"crypto/internal/sysrand/internal/seccomp", "m"},
+	{"crypto/md5", "\x0e2-\x16\x16`"},
+	{"crypto/mlkem", "/"},
+	{"crypto/pbkdf2", "2\r\x01-\x16"},
+	{"crypto/rand", "\x1a\x06\a\x19\x04\x01(}\x0eM"},
+	{"crypto/rc4", "#\x1d-\xc2\x01"},
+	{"crypto/rsa", "\x0e\f\x01\t\x0f\f\x01\x04\x06\a\x1c\x03\x1325\r\x01"},
+	{"crypto/sha1", "\x0e\f&-\x16\x16\x14L"},
+	{"crypto/sha256", "\x0e\f\x1aO"},
+	{"crypto/sha3", "\x0e'N\xc2\x01"},
+	{"crypto/sha512", "\x0e\f\x1cM"},
+	{"crypto/subtle", "8\x96\x01U"},
+	{"crypto/tls", "\x03\b\x02\x01\x01\x01\x01\x02\x01\x01\x01\x03\x01\a\x01\v\x02\n\x01\b\x05\x03\x01\x01\x01\x01\x02\x01\x02\x01\x17\x02\x03\x13\x16\x14\b5\x16\x16\r\n\x01\x01\x01\x02\x01\f\x06\x02\x01"},
+	{"crypto/tls/internal/fips140tls", " \x93\x02"},
+	{"crypto/x509", "\x03\v\x01\x01\x01\x01\x01\x01\x01\x011\x03\x02\x01\x01\x02\x05\x0e\x06\x02\x02\x03E\x032\x01\x02\t\x01\x01\x01\a\x10\x05\x01\x06\x02\x05\f\x01\x02\r\x02\x01\x01\x02\x03\x01"},
+	{"crypto/x509/pkix", "c\x06\a\x88\x01G"},
+	{"database/sql", "\x03\nJ\x16\x03z\f\x06\"\x05\n\x02\x03\x01\f\x02\x02\x02"},
+	{"database/sql/driver", "\r`\x03\xae\x01\x11\x10"},
+	{"debug/buildinfo", "\x03W\x02\x01\x01\b\a\x03`\x18\x02\x01+\x0f "},
+	{"debug/dwarf", "\x03c\a\x03z1\x13\x01\x01"},
+	{"debug/elf", "\x03\x06P\r\a\x03`\x19\x01,\x19\x01\x15"},
+	{"debug/gosym", "\x03c\n\xbe\x01\x01\x01\x02"},
+	{"debug/macho", "\x03\x06P\r\n`\x1a,\x19\x01"},
+	{"debug/pe", "\x03\x06P\r\a\x03`\x1a,\x19\x01\x15"},
+	{"debug/plan9obj", "f\a\x03`\x1a,"},
+	{"embed", "m+:\x18\x01T"},
+	{"embed/internal/embedtest", ""},
+	{"encoding", ""},
+	{"encoding/ascii85", "\xea\x01E"},
+	{"encoding/asn1", "\x03j\x03\x87\x01\x01&\x0f\x02\x01\x0f\x03\x01"},
+	{"encoding/base32", "\xea\x01C\x02"},
+	{"encoding/base64", "\x99\x01QC\x02"},
+	{"encoding/binary", "m}\r'\x0f\x05"},
+	{"encoding/csv", "\x02\x01j\x03zF\x11\x02"},
+	{"encoding/gob", "\x02_\x05\a\x03`\x1a\f\x01\x02\x1d\b\x14\x01\x0e\x02"},
+	{"encoding/hex", "m\x03zC\x03"},
+	{"encoding/json", "\x03\x01]\x04\b\x03z\r'\x0f\x02\x01\x02\x0f\x01\x01\x02"},
+	{"encoding/pem", "\x03b\b}C\x03"},
+	{"encoding/xml", "\x02\x01^\f\x03z4\x05\f\x01\x02\x0f\x02"},
+	{"errors", "\xc9\x01|"},
+	{"expvar", "jK9\t\n\x15\r\n\x02\x03\x01\x10"},
+	{"flag", "a\f\x03z,\b\x05\n\x02\x01\x0f"},
+	{"fmt", "mE8\r\x1f\b\x0f\x02\x03\x11"},
+	{"go/ast", "\x03\x01l\x0f\x01j\x03)\b\x0f\x02\x01"},
+	{"go/ast/internal/tests", ""},
+	{"go/build", "\x02\x01j\x03\x01\x03\x02\a\x02\x01\x17\x1e\x04\x02\t\x14\x12\x01+\x01\x04\x01\a\n\x02\x01\x11\x02\x02"},
+	{"go/build/constraint", "m\xc2\x01\x01\x11\x02"},
+	{"go/constant", "p\x10w\x01\x016\x01\x02\x11"},
+	{"go/doc", "\x04l\x01\x06\t=-1\x12\x02\x01\x11\x02"},
+	{"go/doc/comment", "\x03m\xbd\x01\x01\x01\x01\x11\x02"},
+	{"go/format", "\x03m\x01\f\x01\x02jF"},
+	{"go/importer", "s\a\x01\x01\x04\x01i9"},
+	{"go/internal/gccgoimporter", "\x02\x01W\x13\x03\x05\v\x01g\x02,\x01\x05\x13\x01\v\b"},
+	{"go/internal/gcimporter", "\x02n\x10\x01/\x05\x0e',\x17\x03\x02"},
+	{"go/internal/srcimporter", "p\x01\x02\n\x03\x01i,\x01\x05\x14\x02\x13"},
+	{"go/parser", "\x03j\x03\x01\x03\v\x01j\x01+\x06\x14"},
+	{"go/printer", "p\x01\x03\x03\tj\r\x1f\x17\x02\x01\x02\n\x05\x02"},
+	{"go/scanner", "\x03m\x10j2\x12\x01\x12\x02"},
+	{"go/token", "\x04l\xbd\x01\x02\x03\x01\x0e\x02"},
+	{"go/types", "\x03\x01\x06c\x03\x01\x04\b\x03\x02\x15\x1e\x06+\x04\x03\n%\a\n\x01\x01\x01\x02\x01\x0e\x02\x02"},
+	{"go/version", "\xba\x01v"},
+	{"hash", "\xea\x01"},
+	{"hash/adler32", "m\x16\x16"},
+	{"hash/crc32", "m\x16\x16\x14\x85\x01\x01\x12"},
+	{"hash/crc64", "m\x16\x16\x99\x01"},
+	{"hash/fnv", "m\x16\x16`"},
+	{"hash/maphash", "\x94\x01\x05\x1b\x03@N"},
+	{"html", "\xb0\x02\x02\x11"},
+	{"html/template", "\x03g\x06\x19,5\x01\v \x05\x01\x02\x03\x0e\x01\x02\v\x01\x03\x02"},
+	{"image", "\x02k\x1f^\x0f6\x03\x01"},
+	{"image/color", ""},
+	{"image/color/palette", "\x8c\x01"},
+	{"image/draw", "\x8b\x01\x01\x04"},
+	{"image/gif", "\x02\x01\x05e\x03\x1b\x01\x01\x01\vQ"},
+	{"image/internal/imageutil", "\x8b\x01"},
+	{"image/jpeg", "\x02k\x1e\x01\x04Z"},
+	{"image/png", "\x02\a]\n\x13\x02\x06\x01^E"},
+	{"index/suffixarray", "\x03c\a}\r*\f\x01"},
+	{"internal/abi", "\xb4\x01\x91\x01"},
+	{"internal/asan", "\xc5\x02"},
+	{"internal/bisect", "\xa3\x02\x0f\x01"},
+	{"internal/buildcfg", "pG_\x06\x02\x05\f\x01"},
+	{"internal/bytealg", "\xad\x01\x98\x01"},
+	{"internal/byteorder", ""},
+	{"internal/cfg", ""},
+	{"internal/chacha8rand", "\x99\x01\x1b\x91\x01"},
+	{"internal/copyright", ""},
+	{"internal/coverage", ""},
+	{"internal/coverage/calloc", ""},
+	{"internal/coverage/cfile", "j\x06\x17\x16\x01\x02\x01\x01\x01\x01\x01\x01\x01#\x01\x1f,\x06\a\f\x01\x03\f\x06"},
+	{"internal/coverage/cformat", "\x04l-\x04I\f7\x01\x02\f"},
+	{"internal/coverage/cmerge", "p-Z"},
+	{"internal/coverage/decodecounter", "f\n-\v\x02@,\x19\x16"},
+	{"internal/coverage/decodemeta", "\x02d\n\x17\x16\v\x02@,"},
+	{"internal/coverage/encodecounter", "\x02d\n-\f\x01\x02>\f \x17"},
+	{"internal/coverage/encodemeta", "\x02\x01c\n\x13\x04\x16\r\x02>,/"},
+	{"internal/coverage/pods", "\x04l-y\x06\x05\f\x02\x01"},
+	{"internal/coverage/rtcov", "\xc5\x02"},
+	{"internal/coverage/slicereader", "f\nz["},
+	{"internal/coverage/slicewriter", "pz"},
+	{"internal/coverage/stringtab", "p8\x04>"},
+	{"internal/coverage/test", ""},
+	{"internal/coverage/uleb128", ""},
+	{"internal/cpu", "\xc5\x02"},
+	{"internal/dag", "\x04l\xbd\x01\x03"},
+	{"internal/diff", "\x03m\xbe\x01\x02"},
+	{"internal/exportdata", "\x02\x01j\x03\x03]\x1a,\x01\x05\x13\x01\x02"},
+	{"internal/filepathlite", "m+:\x19B"},
+	{"internal/fmtsort", "\x04\x9a\x02\x0f"},
+	{"internal/fuzz", "\x03\nA\x18\x04\x03\x03\x01\f\x0355\r\x02\x1d\x01\x05\x02\x05\f\x01\x02\x01\x01\v\x04\x02"},
+	{"internal/goarch", ""},
+	{"internal/godebug", "\x96\x01 |\x01\x12"},
+	{"internal/godebugs", ""},
+	{"internal/goexperiment", ""},
+	{"internal/goos", ""},
+	{"internal/goroot", "\x96\x02\x01\x05\x14\x02"},
+	{"internal/gover", "\x04"},
+	{"internal/goversion", ""},
+	{"internal/itoa", ""},
+	{"internal/lazyregexp", "\x96\x02\v\x0f\x02"},
+	{"internal/lazytemplate", "\xea\x01,\x1a\x02\v"},
+	{"internal/msan", "\xc5\x02"},
+	{"internal/nettrace", ""},
+	{"internal/obscuretestdata", "e\x85\x01,"},
+	{"internal/oserror", "m"},
+	{"internal/pkgbits", "\x03K\x18\a\x03\x05\vj\x0e\x1e\r\f\x01"},
+	{"internal/platform", ""},
+	{"internal/poll", "mO\x1a\x149\x0f\x01\x01\v\x06"},
+	{"internal/profile", "\x03\x04f\x03z7\r\x01\x01\x0f"},
+	{"internal/profilerecord", ""},
+	{"internal/race", "\x94\x01\xb1\x01"},
+	{"internal/reflectlite", "\x94\x01 3<\""},
+	{"internal/runtime/atomic", "\xc5\x02"},
+	{"internal/runtime/exithook", "\xca\x01{"},
+	{"internal/runtime/maps", "\x94\x01\x01\x1f\v\t\x05\x01w"},
+	{"internal/runtime/math", "\xb4\x01"},
+	{"internal/runtime/sys", "\xb4\x01\x04"},
+	{"internal/runtime/syscall", "\xc5\x02"},
+	{"internal/saferio", "\xea\x01["},
+	{"internal/singleflight", "\xb2\x02"},
+	{"internal/stringslite", "\x98\x01\xad\x01"},
+	{"internal/sync", "\x94\x01 \x14k\x12"},
+	{"internal/synctest", "\xc5\x02"},
+	{"internal/syscall/execenv", "\xb4\x02"},
+	{"internal/syscall/unix", "\xa3\x02\x10\x01\x11"},
+	{"internal/sysinfo", "\x02\x01\xaa\x01=,\x1a\x02"},
+	{"internal/syslist", ""},
+	{"internal/testenv", "\x03\n`\x02\x01*\x1a\x10'+\x01\x05\a\f\x01\x02\x02\x01\n"},
+	{"internal/testlog", "\xb2\x02\x01\x12"},
+	{"internal/testpty", "m\x03\xa6\x01"},
+	{"internal/trace", "\x02\x01\x01\x06\\\a\x03n\x03\x03\x06\x03\n6\x01\x02\x0f\x06"},
+	{"internal/trace/internal/testgen", "\x03c\nl\x03\x02\x03\x011\v\x0f"},
+	{"internal/trace/internal/tracev1", "\x03\x01b\a\x03t\x06\r6\x01"},
+	{"internal/trace/raw", "\x02d\nq\x03\x06E\x01\x11"},
+	{"internal/trace/testtrace", "\x02\x01j\x03l\x03\x06\x057\f\x02\x01"},
+	{"internal/trace/tracev2", ""},
+	{"internal/trace/traceviewer", "\x02]\v\x06\x1a<\x16\a\a\x04\t\n\x15\x01\x05\a\f\x01\x02\r"},
+	{"internal/trace/traceviewer/format", ""},
+	{"internal/trace/version", "pq\t"},
+	{"internal/txtar", "\x03m\xa6\x01\x1a"},
+	{"internal/types/errors", "\xaf\x02"},
+	{"internal/unsafeheader", "\xc5\x02"},
+	{"internal/xcoff", "Y\r\a\x03`\x1a,\x19\x01"},
+	{"internal/zstd", "f\a\x03z\x0f"},
+	{"io", "m\xc5\x01"},
+	{"io/fs", "m+*(1\x12\x12\x04"},
+	{"io/ioutil", "\xea\x01\x01+\x17\x03"},
+	{"iter", "\xc8\x01[\""},
+	{"log", "pz\x05'\r\x0f\x01\f"},
+	{"log/internal", ""},
+	{"log/slog", "\x03\nT\t\x03\x03z\x04\x01\x02\x02\x04'\x05\n\x02\x01\x02\x01\f\x02\x02\x02"},
+	{"log/slog/internal", ""},
+	{"log/slog/internal/benchmarks", "\r`\x03z\x06\x03<\x10"},
+	{"log/slog/internal/buffer", "\xb2\x02"},
+	{"log/slog/internal/slogtest", "\xf0\x01"},
+	{"log/syslog", "m\x03~\x12\x16\x1a\x02\r"},
+	{"maps", "\xed\x01X"},
+	{"math", "\xad\x01LL"},
+	{"math/big", "\x03j\x03)\x14=\r\x02\x024\x01\x02\x13"},
+	{"math/bits", "\xc5\x02"},
+	{"math/cmplx", "\xf7\x01\x02"},
+	{"math/rand", "\xb5\x01B;\x01\x12"},
+	{"math/rand/v2", "m,\x02\\\x02L"},
+	{"mime", "\x02\x01b\b\x03z\f \x17\x03\x02\x0f\x02"},
+	{"mime/multipart", "\x02\x01G#\x03E5\f\x01\x06\x02\x15\x02\x06\x11\x02\x01\x15"},
+	{"mime/quotedprintable", "\x02\x01mz"},
+	{"net", "\x04\t`+\x1d\a\x04\x05\f\x01\x04\x14\x01%\x06\r\n\x05\x01\x01\v\x06\a"},
+	{"net/http", "\x02\x01\x04\x04\x02=\b\x13\x01\a\x03E5\x01\x03\b\x01\x02\x02\x02\x01\x02\x06\x02\x01\x01\n\x01\x01\x05\x01\x02\x05\n\x01\x01\x01\x02\x01\x01\v\x02\x02\x02\b\x01\x01\x01"},
+	{"net/http/cgi", "\x02P\x1b\x03z\x04\b\n\x01\x13\x01\x01\x01\x04\x01\x05\x02\n\x02\x01\x0f\x0e"},
+	{"net/http/cookiejar", "\x04i\x03\x90\x01\x01\b\f\x18\x03\x02\r\x04"},
+	{"net/http/fcgi", "\x02\x01\nY\a\x03z\x16\x01\x01\x14\x1a\x02\r"},
+	{"net/http/httptest", "\x02\x01\nE\x02\x1b\x01z\x04\x12\x01\n\t\x02\x19\x01\x02\r\x0e"},
+	{"net/http/httptrace", "\rEn@\x14\n!"},
+	{"net/http/httputil", "\x02\x01\n`\x03z\x04\x0f\x03\x01\x05\x02\x01\v\x01\x1b\x02\r\x0e"},
+	{"net/http/internal", "\x02\x01j\x03z"},
+	{"net/http/internal/ascii", "\xb0\x02\x11"},
+	{"net/http/internal/httpcommon", "\r`\x03\x96\x01\x0e\x01\x19\x01\x01\x02\x1b\x02"},
+	{"net/http/internal/testcert", "\xb0\x02"},
+	{"net/http/pprof", "\x02\x01\nc\x19,\x11$\x04\x13\x14\x01\r\x06\x03\x01\x02\x01\x0f"},
+	{"net/internal/cgotest", ""},
+	{"net/internal/socktest", "p\xc2\x01\x02"},
+	{"net/mail", "\x02k\x03z\x04\x0f\x03\x14\x1c\x02\r\x04"},
+	{"net/netip", "\x04i+\x01#;\x026\x15"},
+	{"net/rpc", "\x02f\x05\x03\x10\n`\x04\x12\x01\x1d\x0f\x03\x02"},
+	{"net/rpc/jsonrpc", "j\x03\x03z\x16\x11!"},
+	{"net/smtp", "\x19.\v\x13\b\x03z\x16\x14\x1c"},
+	{"net/textproto", "\x02\x01j\x03z\r\t/\x01\x02\x13"},
+	{"net/url", "m\x03\x86\x01%\x12\x02\x01\x15"},
+	{"os", "m+\x01\x18\x03\b\t\r\x03\x01\x04\x10\x018\n\x05\x01\x01\v\x06"},
+	{"os/exec", "\x03\n`H \x01\x14\x01+\x06\a\f\x01\x04\v"},
+	{"os/exec/internal/fdtest", "\xb4\x02"},
+	{"os/signal", "\r\x89\x02\x17\x05\x02"},
+	{"os/user", "\x02\x01j\x03z,\r\f\x01\x02"},
+	{"path", "m+\xab\x01"},
+	{"path/filepath", "m+\x19:+\r\n\x03\x04\x0f"},
+	{"plugin", "m"},
+	{"reflect", "m'\x04\x1c\b\f\x04\x02\x19\x10,\f\x03\x0f\x02\x02"},
+	{"reflect/internal/example1", ""},
+	{"reflect/internal/example2", ""},
+	{"regexp", "\x03\xe7\x018\v\x02\x01\x02\x0f\x02"},
+	{"regexp/syntax", "\xad\x02\x01\x01\x01\x11\x02"},
+	{"runtime", "\x94\x01\x04\x01\x02\f\x06\a\x02\x01\x01\x0f\x03\x01\x01\x01\x01\x01\x03\x0fd"},
+	{"runtime/coverage", "\x9f\x01K"},
+	{"runtime/debug", "pUQ\r\n\x02\x01\x0f\x06"},
+	{"runtime/internal/startlinetest", ""},
+	{"runtime/internal/wasitest", ""},
+	{"runtime/metrics", "\xb6\x01A,\""},
+	{"runtime/pprof", "\x02\x01\x01\x03\x06Y\a\x03$3#\r\x1f\r\n\x01\x01\x01\x02\x02\b\x03\x06"},
+	{"runtime/race", "\xab\x02"},
+	{"runtime/race/internal/amd64v1", ""},
+	{"runtime/trace", "\rcz9\x0f\x01\x12"},
+	{"slices", "\x04\xe9\x01\fL"},
+	{"sort", "\xc9\x0104"},
+	{"strconv", "m+:%\x02J"},
+	{"strings", "m'\x04:\x18\x03\f9\x0f\x02\x02"},
+	{"structs", ""},
+	{"sync", "\xc8\x01\vP\x10\x12"},
+	{"sync/atomic", "\xc5\x02"},
+	{"syscall", "m(\x03\x01\x1b\b\x03\x03\x06\aT\n\x05\x01\x12"},
+	{"testing", "\x03\n`\x02\x01X\x0f\x13\r\x04\x1b\x06\x02\x05\x02\a\x01\x02\x01\x02\x01\f\x02\x02\x02"},
+	{"testing/fstest", "m\x03z\x01\v%\x12\x03\b\a"},
+	{"testing/internal/testdeps", "\x02\v\xa6\x01'\x10,\x03\x05\x03\b\a\x02\r"},
+	{"testing/iotest", "\x03j\x03z\x04"},
+	{"testing/quick", "o\x01\x87\x01\x04#\x12\x0f"},
+	{"testing/slogtest", "\r`\x03\x80\x01.\x05\x12\n"},
+	{"text/scanner", "\x03mz,+\x02"},
+	{"text/tabwriter", "pzY"},
+	{"text/template", "m\x03B8\x01\v\x1f\x01\x05\x01\x02\x05\r\x02\f\x03\x02"},
+	{"text/template/parse", "\x03m\xb3\x01\f\x01\x11\x02"},
+	{"time", "m+\x1d\x1d'*\x0f\x02\x11"},
+	{"time/tzdata", "m\xc7\x01\x11"},
+	{"unicode", ""},
+	{"unicode/utf16", ""},
+	{"unicode/utf8", ""},
+	{"unique", "\x94\x01>\x01P\x0f\x13\x12"},
+	{"unsafe", ""},
+	{"vendor/golang.org/x/crypto/chacha20", "\x10V\a\x8c\x01*'"},
+	{"vendor/golang.org/x/crypto/chacha20poly1305", "\x10V\a\xd9\x01\x04\x01\a"},
+	{"vendor/golang.org/x/crypto/cryptobyte", "c\n\x03\x88\x01&!\n"},
+	{"vendor/golang.org/x/crypto/cryptobyte/asn1", ""},
+	{"vendor/golang.org/x/crypto/internal/alias", "\xc5\x02"},
+	{"vendor/golang.org/x/crypto/internal/poly1305", "Q\x15\x93\x01"},
+	{"vendor/golang.org/x/net/dns/dnsmessage", "m"},
+	{"vendor/golang.org/x/net/http/httpguts", "\x80\x02\x14\x1c\x13\r"},
+	{"vendor/golang.org/x/net/http/httpproxy", "m\x03\x90\x01\x15\x01\x1a\x13\r"},
+	{"vendor/golang.org/x/net/http2/hpack", "\x03j\x03zH"},
+	{"vendor/golang.org/x/net/idna", "p\x87\x019\x13\x10\x02\x01"},
+	{"vendor/golang.org/x/net/nettest", "\x03c\a\x03z\x11\x05\x16\x01\f\f\x01\x02\x02\x01\n"},
+	{"vendor/golang.org/x/sys/cpu", "\x96\x02\r\f\x01\x15"},
+	{"vendor/golang.org/x/text/secure/bidirule", "m\xd6\x01\x11\x01"},
+	{"vendor/golang.org/x/text/transform", "\x03j}Y"},
+	{"vendor/golang.org/x/text/unicode/bidi", "\x03\be~@\x15"},
+	{"vendor/golang.org/x/text/unicode/norm", "f\nzH\x11\x11"},
+	{"weak", "\x94\x01\x8f\x01\""},
+}
diff --git a/vendor/golang.org/x/tools/internal/stdlib/import.go b/vendor/golang.org/x/tools/internal/stdlib/import.go
new file mode 100644
index 0000000..f690987
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/stdlib/import.go
@@ -0,0 +1,89 @@
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package stdlib
+
+// This file provides the API for the import graph of the standard library.
+//
+// Be aware that the compiler-generated code for every package
+// implicitly depends on package "runtime" and a handful of others
+// (see runtimePkgs in GOROOT/src/cmd/internal/objabi/pkgspecial.go).
+
+import (
+	"encoding/binary"
+	"iter"
+	"slices"
+	"strings"
+)
+
+// Imports returns the sequence of packages directly imported by the
+// named standard packages, in name order.
+// The imports of an unknown package are the empty set.
+//
+// The graph is built into the application and may differ from the
+// graph in the Go source tree being analyzed by the application.
+func Imports(pkgs ...string) iter.Seq[string] {
+	return func(yield func(string) bool) {
+		for _, pkg := range pkgs {
+			if i, ok := find(pkg); ok {
+				var depIndex uint64
+				for data := []byte(deps[i].deps); len(data) > 0; {
+					delta, n := binary.Uvarint(data)
+					depIndex += delta
+					if !yield(deps[depIndex].name) {
+						return
+					}
+					data = data[n:]
+				}
+			}
+		}
+	}
+}
+
+// Dependencies returns the set of all dependencies of the named
+// standard packages, including the initial package,
+// in a deterministic topological order.
+// The dependencies of an unknown package are the empty set.
+//
+// The graph is built into the application and may differ from the
+// graph in the Go source tree being analyzed by the application.
+func Dependencies(pkgs ...string) iter.Seq[string] {
+	return func(yield func(string) bool) {
+		for _, pkg := range pkgs {
+			if i, ok := find(pkg); ok {
+				var seen [1 + len(deps)/8]byte // bit set of seen packages
+				var visit func(i int) bool
+				visit = func(i int) bool {
+					bit := byte(1) << (i % 8)
+					if seen[i/8]&bit == 0 {
+						seen[i/8] |= bit
+						var depIndex uint64
+						for data := []byte(deps[i].deps); len(data) > 0; {
+							delta, n := binary.Uvarint(data)
+							depIndex += delta
+							if !visit(int(depIndex)) {
+								return false
+							}
+							data = data[n:]
+						}
+						if !yield(deps[i].name) {
+							return false
+						}
+					}
+					return true
+				}
+				if !visit(i) {
+					return
+				}
+			}
+		}
+	}
+}
+
+// find returns the index of pkg in the deps table.
+func find(pkg string) (int, bool) {
+	return slices.BinarySearchFunc(deps[:], pkg, func(p pkginfo, n string) int {
+		return strings.Compare(p.name, n)
+	})
+}
diff --git a/vendor/golang.org/x/tools/internal/stdlib/manifest.go b/vendor/golang.org/x/tools/internal/stdlib/manifest.go
new file mode 100644
index 0000000..64f0326
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/stdlib/manifest.go
@@ -0,0 +1,17676 @@
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Code generated by generate.go. DO NOT EDIT.
+
+package stdlib
+
+var PackageSymbols = map[string][]Symbol{
+	"archive/tar": {
+		{"(*Header).FileInfo", Method, 1, ""},
+		{"(*Reader).Next", Method, 0, ""},
+		{"(*Reader).Read", Method, 0, ""},
+		{"(*Writer).AddFS", Method, 22, ""},
+		{"(*Writer).Close", Method, 0, ""},
+		{"(*Writer).Flush", Method, 0, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"(*Writer).WriteHeader", Method, 0, ""},
+		{"(Format).String", Method, 10, ""},
+		{"ErrFieldTooLong", Var, 0, ""},
+		{"ErrHeader", Var, 0, ""},
+		{"ErrInsecurePath", Var, 20, ""},
+		{"ErrWriteAfterClose", Var, 0, ""},
+		{"ErrWriteTooLong", Var, 0, ""},
+		{"FileInfoHeader", Func, 1, "func(fi fs.FileInfo, link string) (*Header, error)"},
+		{"FileInfoNames", Type, 23, ""},
+		{"Format", Type, 10, ""},
+		{"FormatGNU", Const, 10, ""},
+		{"FormatPAX", Const, 10, ""},
+		{"FormatUSTAR", Const, 10, ""},
+		{"FormatUnknown", Const, 10, ""},
+		{"Header", Type, 0, ""},
+		{"Header.AccessTime", Field, 0, ""},
+		{"Header.ChangeTime", Field, 0, ""},
+		{"Header.Devmajor", Field, 0, ""},
+		{"Header.Devminor", Field, 0, ""},
+		{"Header.Format", Field, 10, ""},
+		{"Header.Gid", Field, 0, ""},
+		{"Header.Gname", Field, 0, ""},
+		{"Header.Linkname", Field, 0, ""},
+		{"Header.ModTime", Field, 0, ""},
+		{"Header.Mode", Field, 0, ""},
+		{"Header.Name", Field, 0, ""},
+		{"Header.PAXRecords", Field, 10, ""},
+		{"Header.Size", Field, 0, ""},
+		{"Header.Typeflag", Field, 0, ""},
+		{"Header.Uid", Field, 0, ""},
+		{"Header.Uname", Field, 0, ""},
+		{"Header.Xattrs", Field, 3, ""},
+		{"NewReader", Func, 0, "func(r io.Reader) *Reader"},
+		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
+		{"Reader", Type, 0, ""},
+		{"TypeBlock", Const, 0, ""},
+		{"TypeChar", Const, 0, ""},
+		{"TypeCont", Const, 0, ""},
+		{"TypeDir", Const, 0, ""},
+		{"TypeFifo", Const, 0, ""},
+		{"TypeGNULongLink", Const, 1, ""},
+		{"TypeGNULongName", Const, 1, ""},
+		{"TypeGNUSparse", Const, 3, ""},
+		{"TypeLink", Const, 0, ""},
+		{"TypeReg", Const, 0, ""},
+		{"TypeRegA", Const, 0, ""},
+		{"TypeSymlink", Const, 0, ""},
+		{"TypeXGlobalHeader", Const, 0, ""},
+		{"TypeXHeader", Const, 0, ""},
+		{"Writer", Type, 0, ""},
+	},
+	"archive/zip": {
+		{"(*File).DataOffset", Method, 2, ""},
+		{"(*File).FileInfo", Method, 0, ""},
+		{"(*File).ModTime", Method, 0, ""},
+		{"(*File).Mode", Method, 0, ""},
+		{"(*File).Open", Method, 0, ""},
+		{"(*File).OpenRaw", Method, 17, ""},
+		{"(*File).SetModTime", Method, 0, ""},
+		{"(*File).SetMode", Method, 0, ""},
+		{"(*FileHeader).FileInfo", Method, 0, ""},
+		{"(*FileHeader).ModTime", Method, 0, ""},
+		{"(*FileHeader).Mode", Method, 0, ""},
+		{"(*FileHeader).SetModTime", Method, 0, ""},
+		{"(*FileHeader).SetMode", Method, 0, ""},
+		{"(*ReadCloser).Close", Method, 0, ""},
+		{"(*ReadCloser).Open", Method, 16, ""},
+		{"(*ReadCloser).RegisterDecompressor", Method, 6, ""},
+		{"(*Reader).Open", Method, 16, ""},
+		{"(*Reader).RegisterDecompressor", Method, 6, ""},
+		{"(*Writer).AddFS", Method, 22, ""},
+		{"(*Writer).Close", Method, 0, ""},
+		{"(*Writer).Copy", Method, 17, ""},
+		{"(*Writer).Create", Method, 0, ""},
+		{"(*Writer).CreateHeader", Method, 0, ""},
+		{"(*Writer).CreateRaw", Method, 17, ""},
+		{"(*Writer).Flush", Method, 4, ""},
+		{"(*Writer).RegisterCompressor", Method, 6, ""},
+		{"(*Writer).SetComment", Method, 10, ""},
+		{"(*Writer).SetOffset", Method, 5, ""},
+		{"Compressor", Type, 2, ""},
+		{"Decompressor", Type, 2, ""},
+		{"Deflate", Const, 0, ""},
+		{"ErrAlgorithm", Var, 0, ""},
+		{"ErrChecksum", Var, 0, ""},
+		{"ErrFormat", Var, 0, ""},
+		{"ErrInsecurePath", Var, 20, ""},
+		{"File", Type, 0, ""},
+		{"File.FileHeader", Field, 0, ""},
+		{"FileHeader", Type, 0, ""},
+		{"FileHeader.CRC32", Field, 0, ""},
+		{"FileHeader.Comment", Field, 0, ""},
+		{"FileHeader.CompressedSize", Field, 0, ""},
+		{"FileHeader.CompressedSize64", Field, 1, ""},
+		{"FileHeader.CreatorVersion", Field, 0, ""},
+		{"FileHeader.ExternalAttrs", Field, 0, ""},
+		{"FileHeader.Extra", Field, 0, ""},
+		{"FileHeader.Flags", Field, 0, ""},
+		{"FileHeader.Method", Field, 0, ""},
+		{"FileHeader.Modified", Field, 10, ""},
+		{"FileHeader.ModifiedDate", Field, 0, ""},
+		{"FileHeader.ModifiedTime", Field, 0, ""},
+		{"FileHeader.Name", Field, 0, ""},
+		{"FileHeader.NonUTF8", Field, 10, ""},
+		{"FileHeader.ReaderVersion", Field, 0, ""},
+		{"FileHeader.UncompressedSize", Field, 0, ""},
+		{"FileHeader.UncompressedSize64", Field, 1, ""},
+		{"FileInfoHeader", Func, 0, "func(fi fs.FileInfo) (*FileHeader, error)"},
+		{"NewReader", Func, 0, "func(r io.ReaderAt, size int64) (*Reader, error)"},
+		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
+		{"OpenReader", Func, 0, "func(name string) (*ReadCloser, error)"},
+		{"ReadCloser", Type, 0, ""},
+		{"ReadCloser.Reader", Field, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"Reader.Comment", Field, 0, ""},
+		{"Reader.File", Field, 0, ""},
+		{"RegisterCompressor", Func, 2, "func(method uint16, comp Compressor)"},
+		{"RegisterDecompressor", Func, 2, "func(method uint16, dcomp Decompressor)"},
+		{"Store", Const, 0, ""},
+		{"Writer", Type, 0, ""},
+	},
+	"bufio": {
+		{"(*Reader).Buffered", Method, 0, ""},
+		{"(*Reader).Discard", Method, 5, ""},
+		{"(*Reader).Peek", Method, 0, ""},
+		{"(*Reader).Read", Method, 0, ""},
+		{"(*Reader).ReadByte", Method, 0, ""},
+		{"(*Reader).ReadBytes", Method, 0, ""},
+		{"(*Reader).ReadLine", Method, 0, ""},
+		{"(*Reader).ReadRune", Method, 0, ""},
+		{"(*Reader).ReadSlice", Method, 0, ""},
+		{"(*Reader).ReadString", Method, 0, ""},
+		{"(*Reader).Reset", Method, 2, ""},
+		{"(*Reader).Size", Method, 10, ""},
+		{"(*Reader).UnreadByte", Method, 0, ""},
+		{"(*Reader).UnreadRune", Method, 0, ""},
+		{"(*Reader).WriteTo", Method, 1, ""},
+		{"(*Scanner).Buffer", Method, 6, ""},
+		{"(*Scanner).Bytes", Method, 1, ""},
+		{"(*Scanner).Err", Method, 1, ""},
+		{"(*Scanner).Scan", Method, 1, ""},
+		{"(*Scanner).Split", Method, 1, ""},
+		{"(*Scanner).Text", Method, 1, ""},
+		{"(*Writer).Available", Method, 0, ""},
+		{"(*Writer).AvailableBuffer", Method, 18, ""},
+		{"(*Writer).Buffered", Method, 0, ""},
+		{"(*Writer).Flush", Method, 0, ""},
+		{"(*Writer).ReadFrom", Method, 1, ""},
+		{"(*Writer).Reset", Method, 2, ""},
+		{"(*Writer).Size", Method, 10, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"(*Writer).WriteByte", Method, 0, ""},
+		{"(*Writer).WriteRune", Method, 0, ""},
+		{"(*Writer).WriteString", Method, 0, ""},
+		{"(ReadWriter).Available", Method, 0, ""},
+		{"(ReadWriter).AvailableBuffer", Method, 18, ""},
+		{"(ReadWriter).Discard", Method, 5, ""},
+		{"(ReadWriter).Flush", Method, 0, ""},
+		{"(ReadWriter).Peek", Method, 0, ""},
+		{"(ReadWriter).Read", Method, 0, ""},
+		{"(ReadWriter).ReadByte", Method, 0, ""},
+		{"(ReadWriter).ReadBytes", Method, 0, ""},
+		{"(ReadWriter).ReadFrom", Method, 1, ""},
+		{"(ReadWriter).ReadLine", Method, 0, ""},
+		{"(ReadWriter).ReadRune", Method, 0, ""},
+		{"(ReadWriter).ReadSlice", Method, 0, ""},
+		{"(ReadWriter).ReadString", Method, 0, ""},
+		{"(ReadWriter).UnreadByte", Method, 0, ""},
+		{"(ReadWriter).UnreadRune", Method, 0, ""},
+		{"(ReadWriter).Write", Method, 0, ""},
+		{"(ReadWriter).WriteByte", Method, 0, ""},
+		{"(ReadWriter).WriteRune", Method, 0, ""},
+		{"(ReadWriter).WriteString", Method, 0, ""},
+		{"(ReadWriter).WriteTo", Method, 1, ""},
+		{"ErrAdvanceTooFar", Var, 1, ""},
+		{"ErrBadReadCount", Var, 15, ""},
+		{"ErrBufferFull", Var, 0, ""},
+		{"ErrFinalToken", Var, 6, ""},
+		{"ErrInvalidUnreadByte", Var, 0, ""},
+		{"ErrInvalidUnreadRune", Var, 0, ""},
+		{"ErrNegativeAdvance", Var, 1, ""},
+		{"ErrNegativeCount", Var, 0, ""},
+		{"ErrTooLong", Var, 1, ""},
+		{"MaxScanTokenSize", Const, 1, ""},
+		{"NewReadWriter", Func, 0, "func(r *Reader, w *Writer) *ReadWriter"},
+		{"NewReader", Func, 0, "func(rd io.Reader) *Reader"},
+		{"NewReaderSize", Func, 0, "func(rd io.Reader, size int) *Reader"},
+		{"NewScanner", Func, 1, "func(r io.Reader) *Scanner"},
+		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
+		{"NewWriterSize", Func, 0, "func(w io.Writer, size int) *Writer"},
+		{"ReadWriter", Type, 0, ""},
+		{"ReadWriter.Reader", Field, 0, ""},
+		{"ReadWriter.Writer", Field, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"ScanBytes", Func, 1, "func(data []byte, atEOF bool) (advance int, token []byte, err error)"},
+		{"ScanLines", Func, 1, "func(data []byte, atEOF bool) (advance int, token []byte, err error)"},
+		{"ScanRunes", Func, 1, "func(data []byte, atEOF bool) (advance int, token []byte, err error)"},
+		{"ScanWords", Func, 1, "func(data []byte, atEOF bool) (advance int, token []byte, err error)"},
+		{"Scanner", Type, 1, ""},
+		{"SplitFunc", Type, 1, ""},
+		{"Writer", Type, 0, ""},
+	},
+	"bytes": {
+		{"(*Buffer).Available", Method, 21, ""},
+		{"(*Buffer).AvailableBuffer", Method, 21, ""},
+		{"(*Buffer).Bytes", Method, 0, ""},
+		{"(*Buffer).Cap", Method, 5, ""},
+		{"(*Buffer).Grow", Method, 1, ""},
+		{"(*Buffer).Len", Method, 0, ""},
+		{"(*Buffer).Next", Method, 0, ""},
+		{"(*Buffer).Read", Method, 0, ""},
+		{"(*Buffer).ReadByte", Method, 0, ""},
+		{"(*Buffer).ReadBytes", Method, 0, ""},
+		{"(*Buffer).ReadFrom", Method, 0, ""},
+		{"(*Buffer).ReadRune", Method, 0, ""},
+		{"(*Buffer).ReadString", Method, 0, ""},
+		{"(*Buffer).Reset", Method, 0, ""},
+		{"(*Buffer).String", Method, 0, ""},
+		{"(*Buffer).Truncate", Method, 0, ""},
+		{"(*Buffer).UnreadByte", Method, 0, ""},
+		{"(*Buffer).UnreadRune", Method, 0, ""},
+		{"(*Buffer).Write", Method, 0, ""},
+		{"(*Buffer).WriteByte", Method, 0, ""},
+		{"(*Buffer).WriteRune", Method, 0, ""},
+		{"(*Buffer).WriteString", Method, 0, ""},
+		{"(*Buffer).WriteTo", Method, 0, ""},
+		{"(*Reader).Len", Method, 0, ""},
+		{"(*Reader).Read", Method, 0, ""},
+		{"(*Reader).ReadAt", Method, 0, ""},
+		{"(*Reader).ReadByte", Method, 0, ""},
+		{"(*Reader).ReadRune", Method, 0, ""},
+		{"(*Reader).Reset", Method, 7, ""},
+		{"(*Reader).Seek", Method, 0, ""},
+		{"(*Reader).Size", Method, 5, ""},
+		{"(*Reader).UnreadByte", Method, 0, ""},
+		{"(*Reader).UnreadRune", Method, 0, ""},
+		{"(*Reader).WriteTo", Method, 1, ""},
+		{"Buffer", Type, 0, ""},
+		{"Clone", Func, 20, "func(b []byte) []byte"},
+		{"Compare", Func, 0, "func(a []byte, b []byte) int"},
+		{"Contains", Func, 0, "func(b []byte, subslice []byte) bool"},
+		{"ContainsAny", Func, 7, "func(b []byte, chars string) bool"},
+		{"ContainsFunc", Func, 21, "func(b []byte, f func(rune) bool) bool"},
+		{"ContainsRune", Func, 7, "func(b []byte, r rune) bool"},
+		{"Count", Func, 0, "func(s []byte, sep []byte) int"},
+		{"Cut", Func, 18, "func(s []byte, sep []byte) (before []byte, after []byte, found bool)"},
+		{"CutPrefix", Func, 20, "func(s []byte, prefix []byte) (after []byte, found bool)"},
+		{"CutSuffix", Func, 20, "func(s []byte, suffix []byte) (before []byte, found bool)"},
+		{"Equal", Func, 0, "func(a []byte, b []byte) bool"},
+		{"EqualFold", Func, 0, "func(s []byte, t []byte) bool"},
+		{"ErrTooLarge", Var, 0, ""},
+		{"Fields", Func, 0, "func(s []byte) [][]byte"},
+		{"FieldsFunc", Func, 0, "func(s []byte, f func(rune) bool) [][]byte"},
+		{"FieldsFuncSeq", Func, 24, "func(s []byte, f func(rune) bool) iter.Seq[[]byte]"},
+		{"FieldsSeq", Func, 24, "func(s []byte) iter.Seq[[]byte]"},
+		{"HasPrefix", Func, 0, "func(s []byte, prefix []byte) bool"},
+		{"HasSuffix", Func, 0, "func(s []byte, suffix []byte) bool"},
+		{"Index", Func, 0, "func(s []byte, sep []byte) int"},
+		{"IndexAny", Func, 0, "func(s []byte, chars string) int"},
+		{"IndexByte", Func, 0, "func(b []byte, c byte) int"},
+		{"IndexFunc", Func, 0, "func(s []byte, f func(r rune) bool) int"},
+		{"IndexRune", Func, 0, "func(s []byte, r rune) int"},
+		{"Join", Func, 0, "func(s [][]byte, sep []byte) []byte"},
+		{"LastIndex", Func, 0, "func(s []byte, sep []byte) int"},
+		{"LastIndexAny", Func, 0, "func(s []byte, chars string) int"},
+		{"LastIndexByte", Func, 5, "func(s []byte, c byte) int"},
+		{"LastIndexFunc", Func, 0, "func(s []byte, f func(r rune) bool) int"},
+		{"Lines", Func, 24, "func(s []byte) iter.Seq[[]byte]"},
+		{"Map", Func, 0, "func(mapping func(r rune) rune, s []byte) []byte"},
+		{"MinRead", Const, 0, ""},
+		{"NewBuffer", Func, 0, "func(buf []byte) *Buffer"},
+		{"NewBufferString", Func, 0, "func(s string) *Buffer"},
+		{"NewReader", Func, 0, "func(b []byte) *Reader"},
+		{"Reader", Type, 0, ""},
+		{"Repeat", Func, 0, "func(b []byte, count int) []byte"},
+		{"Replace", Func, 0, "func(s []byte, old []byte, new []byte, n int) []byte"},
+		{"ReplaceAll", Func, 12, "func(s []byte, old []byte, new []byte) []byte"},
+		{"Runes", Func, 0, "func(s []byte) []rune"},
+		{"Split", Func, 0, "func(s []byte, sep []byte) [][]byte"},
+		{"SplitAfter", Func, 0, "func(s []byte, sep []byte) [][]byte"},
+		{"SplitAfterN", Func, 0, "func(s []byte, sep []byte, n int) [][]byte"},
+		{"SplitAfterSeq", Func, 24, "func(s []byte, sep []byte) iter.Seq[[]byte]"},
+		{"SplitN", Func, 0, "func(s []byte, sep []byte, n int) [][]byte"},
+		{"SplitSeq", Func, 24, "func(s []byte, sep []byte) iter.Seq[[]byte]"},
+		{"Title", Func, 0, "func(s []byte) []byte"},
+		{"ToLower", Func, 0, "func(s []byte) []byte"},
+		{"ToLowerSpecial", Func, 0, "func(c unicode.SpecialCase, s []byte) []byte"},
+		{"ToTitle", Func, 0, "func(s []byte) []byte"},
+		{"ToTitleSpecial", Func, 0, "func(c unicode.SpecialCase, s []byte) []byte"},
+		{"ToUpper", Func, 0, "func(s []byte) []byte"},
+		{"ToUpperSpecial", Func, 0, "func(c unicode.SpecialCase, s []byte) []byte"},
+		{"ToValidUTF8", Func, 13, "func(s []byte, replacement []byte) []byte"},
+		{"Trim", Func, 0, "func(s []byte, cutset string) []byte"},
+		{"TrimFunc", Func, 0, "func(s []byte, f func(r rune) bool) []byte"},
+		{"TrimLeft", Func, 0, "func(s []byte, cutset string) []byte"},
+		{"TrimLeftFunc", Func, 0, "func(s []byte, f func(r rune) bool) []byte"},
+		{"TrimPrefix", Func, 1, "func(s []byte, prefix []byte) []byte"},
+		{"TrimRight", Func, 0, "func(s []byte, cutset string) []byte"},
+		{"TrimRightFunc", Func, 0, "func(s []byte, f func(r rune) bool) []byte"},
+		{"TrimSpace", Func, 0, "func(s []byte) []byte"},
+		{"TrimSuffix", Func, 1, "func(s []byte, suffix []byte) []byte"},
+	},
+	"cmp": {
+		{"Compare", Func, 21, "func[T Ordered](x T, y T) int"},
+		{"Less", Func, 21, "func[T Ordered](x T, y T) bool"},
+		{"Or", Func, 22, "func[T comparable](vals ...T) T"},
+		{"Ordered", Type, 21, ""},
+	},
+	"compress/bzip2": {
+		{"(StructuralError).Error", Method, 0, ""},
+		{"NewReader", Func, 0, "func(r io.Reader) io.Reader"},
+		{"StructuralError", Type, 0, ""},
+	},
+	"compress/flate": {
+		{"(*ReadError).Error", Method, 0, ""},
+		{"(*WriteError).Error", Method, 0, ""},
+		{"(*Writer).Close", Method, 0, ""},
+		{"(*Writer).Flush", Method, 0, ""},
+		{"(*Writer).Reset", Method, 2, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"(CorruptInputError).Error", Method, 0, ""},
+		{"(InternalError).Error", Method, 0, ""},
+		{"BestCompression", Const, 0, ""},
+		{"BestSpeed", Const, 0, ""},
+		{"CorruptInputError", Type, 0, ""},
+		{"DefaultCompression", Const, 0, ""},
+		{"HuffmanOnly", Const, 7, ""},
+		{"InternalError", Type, 0, ""},
+		{"NewReader", Func, 0, "func(r io.Reader) io.ReadCloser"},
+		{"NewReaderDict", Func, 0, "func(r io.Reader, dict []byte) io.ReadCloser"},
+		{"NewWriter", Func, 0, "func(w io.Writer, level int) (*Writer, error)"},
+		{"NewWriterDict", Func, 0, "func(w io.Writer, level int, dict []byte) (*Writer, error)"},
+		{"NoCompression", Const, 0, ""},
+		{"ReadError", Type, 0, ""},
+		{"ReadError.Err", Field, 0, ""},
+		{"ReadError.Offset", Field, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"Resetter", Type, 4, ""},
+		{"WriteError", Type, 0, ""},
+		{"WriteError.Err", Field, 0, ""},
+		{"WriteError.Offset", Field, 0, ""},
+		{"Writer", Type, 0, ""},
+	},
+	"compress/gzip": {
+		{"(*Reader).Close", Method, 0, ""},
+		{"(*Reader).Multistream", Method, 4, ""},
+		{"(*Reader).Read", Method, 0, ""},
+		{"(*Reader).Reset", Method, 3, ""},
+		{"(*Writer).Close", Method, 0, ""},
+		{"(*Writer).Flush", Method, 1, ""},
+		{"(*Writer).Reset", Method, 2, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"BestCompression", Const, 0, ""},
+		{"BestSpeed", Const, 0, ""},
+		{"DefaultCompression", Const, 0, ""},
+		{"ErrChecksum", Var, 0, ""},
+		{"ErrHeader", Var, 0, ""},
+		{"Header", Type, 0, ""},
+		{"Header.Comment", Field, 0, ""},
+		{"Header.Extra", Field, 0, ""},
+		{"Header.ModTime", Field, 0, ""},
+		{"Header.Name", Field, 0, ""},
+		{"Header.OS", Field, 0, ""},
+		{"HuffmanOnly", Const, 8, ""},
+		{"NewReader", Func, 0, "func(r io.Reader) (*Reader, error)"},
+		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
+		{"NewWriterLevel", Func, 0, "func(w io.Writer, level int) (*Writer, error)"},
+		{"NoCompression", Const, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"Reader.Header", Field, 0, ""},
+		{"Writer", Type, 0, ""},
+		{"Writer.Header", Field, 0, ""},
+	},
+	"compress/lzw": {
+		{"(*Reader).Close", Method, 17, ""},
+		{"(*Reader).Read", Method, 17, ""},
+		{"(*Reader).Reset", Method, 17, ""},
+		{"(*Writer).Close", Method, 17, ""},
+		{"(*Writer).Reset", Method, 17, ""},
+		{"(*Writer).Write", Method, 17, ""},
+		{"LSB", Const, 0, ""},
+		{"MSB", Const, 0, ""},
+		{"NewReader", Func, 0, "func(r io.Reader, order Order, litWidth int) io.ReadCloser"},
+		{"NewWriter", Func, 0, "func(w io.Writer, order Order, litWidth int) io.WriteCloser"},
+		{"Order", Type, 0, ""},
+		{"Reader", Type, 17, ""},
+		{"Writer", Type, 17, ""},
+	},
+	"compress/zlib": {
+		{"(*Writer).Close", Method, 0, ""},
+		{"(*Writer).Flush", Method, 0, ""},
+		{"(*Writer).Reset", Method, 2, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"BestCompression", Const, 0, ""},
+		{"BestSpeed", Const, 0, ""},
+		{"DefaultCompression", Const, 0, ""},
+		{"ErrChecksum", Var, 0, ""},
+		{"ErrDictionary", Var, 0, ""},
+		{"ErrHeader", Var, 0, ""},
+		{"HuffmanOnly", Const, 8, ""},
+		{"NewReader", Func, 0, "func(r io.Reader) (io.ReadCloser, error)"},
+		{"NewReaderDict", Func, 0, "func(r io.Reader, dict []byte) (io.ReadCloser, error)"},
+		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
+		{"NewWriterLevel", Func, 0, "func(w io.Writer, level int) (*Writer, error)"},
+		{"NewWriterLevelDict", Func, 0, "func(w io.Writer, level int, dict []byte) (*Writer, error)"},
+		{"NoCompression", Const, 0, ""},
+		{"Resetter", Type, 4, ""},
+		{"Writer", Type, 0, ""},
+	},
+	"container/heap": {
+		{"Fix", Func, 2, "func(h Interface, i int)"},
+		{"Init", Func, 0, "func(h Interface)"},
+		{"Interface", Type, 0, ""},
+		{"Pop", Func, 0, "func(h Interface) any"},
+		{"Push", Func, 0, "func(h Interface, x any)"},
+		{"Remove", Func, 0, "func(h Interface, i int) any"},
+	},
+	"container/list": {
+		{"(*Element).Next", Method, 0, ""},
+		{"(*Element).Prev", Method, 0, ""},
+		{"(*List).Back", Method, 0, ""},
+		{"(*List).Front", Method, 0, ""},
+		{"(*List).Init", Method, 0, ""},
+		{"(*List).InsertAfter", Method, 0, ""},
+		{"(*List).InsertBefore", Method, 0, ""},
+		{"(*List).Len", Method, 0, ""},
+		{"(*List).MoveAfter", Method, 2, ""},
+		{"(*List).MoveBefore", Method, 2, ""},
+		{"(*List).MoveToBack", Method, 0, ""},
+		{"(*List).MoveToFront", Method, 0, ""},
+		{"(*List).PushBack", Method, 0, ""},
+		{"(*List).PushBackList", Method, 0, ""},
+		{"(*List).PushFront", Method, 0, ""},
+		{"(*List).PushFrontList", Method, 0, ""},
+		{"(*List).Remove", Method, 0, ""},
+		{"Element", Type, 0, ""},
+		{"Element.Value", Field, 0, ""},
+		{"List", Type, 0, ""},
+		{"New", Func, 0, "func() *List"},
+	},
+	"container/ring": {
+		{"(*Ring).Do", Method, 0, ""},
+		{"(*Ring).Len", Method, 0, ""},
+		{"(*Ring).Link", Method, 0, ""},
+		{"(*Ring).Move", Method, 0, ""},
+		{"(*Ring).Next", Method, 0, ""},
+		{"(*Ring).Prev", Method, 0, ""},
+		{"(*Ring).Unlink", Method, 0, ""},
+		{"New", Func, 0, "func(n int) *Ring"},
+		{"Ring", Type, 0, ""},
+		{"Ring.Value", Field, 0, ""},
+	},
+	"context": {
+		{"AfterFunc", Func, 21, "func(ctx Context, f func()) (stop func() bool)"},
+		{"Background", Func, 7, "func() Context"},
+		{"CancelCauseFunc", Type, 20, ""},
+		{"CancelFunc", Type, 7, ""},
+		{"Canceled", Var, 7, ""},
+		{"Cause", Func, 20, "func(c Context) error"},
+		{"Context", Type, 7, ""},
+		{"DeadlineExceeded", Var, 7, ""},
+		{"TODO", Func, 7, "func() Context"},
+		{"WithCancel", Func, 7, "func(parent Context) (ctx Context, cancel CancelFunc)"},
+		{"WithCancelCause", Func, 20, "func(parent Context) (ctx Context, cancel CancelCauseFunc)"},
+		{"WithDeadline", Func, 7, "func(parent Context, d time.Time) (Context, CancelFunc)"},
+		{"WithDeadlineCause", Func, 21, "func(parent Context, d time.Time, cause error) (Context, CancelFunc)"},
+		{"WithTimeout", Func, 7, "func(parent Context, timeout time.Duration) (Context, CancelFunc)"},
+		{"WithTimeoutCause", Func, 21, "func(parent Context, timeout time.Duration, cause error) (Context, CancelFunc)"},
+		{"WithValue", Func, 7, "func(parent Context, key any, val any) Context"},
+		{"WithoutCancel", Func, 21, "func(parent Context) Context"},
+	},
+	"crypto": {
+		{"(Hash).Available", Method, 0, ""},
+		{"(Hash).HashFunc", Method, 4, ""},
+		{"(Hash).New", Method, 0, ""},
+		{"(Hash).Size", Method, 0, ""},
+		{"(Hash).String", Method, 15, ""},
+		{"BLAKE2b_256", Const, 9, ""},
+		{"BLAKE2b_384", Const, 9, ""},
+		{"BLAKE2b_512", Const, 9, ""},
+		{"BLAKE2s_256", Const, 9, ""},
+		{"Decrypter", Type, 5, ""},
+		{"DecrypterOpts", Type, 5, ""},
+		{"Hash", Type, 0, ""},
+		{"MD4", Const, 0, ""},
+		{"MD5", Const, 0, ""},
+		{"MD5SHA1", Const, 0, ""},
+		{"PrivateKey", Type, 0, ""},
+		{"PublicKey", Type, 2, ""},
+		{"RIPEMD160", Const, 0, ""},
+		{"RegisterHash", Func, 0, "func(h Hash, f func() hash.Hash)"},
+		{"SHA1", Const, 0, ""},
+		{"SHA224", Const, 0, ""},
+		{"SHA256", Const, 0, ""},
+		{"SHA384", Const, 0, ""},
+		{"SHA3_224", Const, 4, ""},
+		{"SHA3_256", Const, 4, ""},
+		{"SHA3_384", Const, 4, ""},
+		{"SHA3_512", Const, 4, ""},
+		{"SHA512", Const, 0, ""},
+		{"SHA512_224", Const, 5, ""},
+		{"SHA512_256", Const, 5, ""},
+		{"Signer", Type, 4, ""},
+		{"SignerOpts", Type, 4, ""},
+	},
+	"crypto/aes": {
+		{"(KeySizeError).Error", Method, 0, ""},
+		{"BlockSize", Const, 0, ""},
+		{"KeySizeError", Type, 0, ""},
+		{"NewCipher", Func, 0, "func(key []byte) (cipher.Block, error)"},
+	},
+	"crypto/cipher": {
+		{"(StreamReader).Read", Method, 0, ""},
+		{"(StreamWriter).Close", Method, 0, ""},
+		{"(StreamWriter).Write", Method, 0, ""},
+		{"AEAD", Type, 2, ""},
+		{"Block", Type, 0, ""},
+		{"BlockMode", Type, 0, ""},
+		{"NewCBCDecrypter", Func, 0, "func(b Block, iv []byte) BlockMode"},
+		{"NewCBCEncrypter", Func, 0, "func(b Block, iv []byte) BlockMode"},
+		{"NewCFBDecrypter", Func, 0, "func(block Block, iv []byte) Stream"},
+		{"NewCFBEncrypter", Func, 0, "func(block Block, iv []byte) Stream"},
+		{"NewCTR", Func, 0, "func(block Block, iv []byte) Stream"},
+		{"NewGCM", Func, 2, "func(cipher Block) (AEAD, error)"},
+		{"NewGCMWithNonceSize", Func, 5, "func(cipher Block, size int) (AEAD, error)"},
+		{"NewGCMWithRandomNonce", Func, 24, "func(cipher Block) (AEAD, error)"},
+		{"NewGCMWithTagSize", Func, 11, "func(cipher Block, tagSize int) (AEAD, error)"},
+		{"NewOFB", Func, 0, "func(b Block, iv []byte) Stream"},
+		{"Stream", Type, 0, ""},
+		{"StreamReader", Type, 0, ""},
+		{"StreamReader.R", Field, 0, ""},
+		{"StreamReader.S", Field, 0, ""},
+		{"StreamWriter", Type, 0, ""},
+		{"StreamWriter.Err", Field, 0, ""},
+		{"StreamWriter.S", Field, 0, ""},
+		{"StreamWriter.W", Field, 0, ""},
+	},
+	"crypto/des": {
+		{"(KeySizeError).Error", Method, 0, ""},
+		{"BlockSize", Const, 0, ""},
+		{"KeySizeError", Type, 0, ""},
+		{"NewCipher", Func, 0, "func(key []byte) (cipher.Block, error)"},
+		{"NewTripleDESCipher", Func, 0, "func(key []byte) (cipher.Block, error)"},
+	},
+	"crypto/dsa": {
+		{"ErrInvalidPublicKey", Var, 0, ""},
+		{"GenerateKey", Func, 0, "func(priv *PrivateKey, rand io.Reader) error"},
+		{"GenerateParameters", Func, 0, "func(params *Parameters, rand io.Reader, sizes ParameterSizes) error"},
+		{"L1024N160", Const, 0, ""},
+		{"L2048N224", Const, 0, ""},
+		{"L2048N256", Const, 0, ""},
+		{"L3072N256", Const, 0, ""},
+		{"ParameterSizes", Type, 0, ""},
+		{"Parameters", Type, 0, ""},
+		{"Parameters.G", Field, 0, ""},
+		{"Parameters.P", Field, 0, ""},
+		{"Parameters.Q", Field, 0, ""},
+		{"PrivateKey", Type, 0, ""},
+		{"PrivateKey.PublicKey", Field, 0, ""},
+		{"PrivateKey.X", Field, 0, ""},
+		{"PublicKey", Type, 0, ""},
+		{"PublicKey.Parameters", Field, 0, ""},
+		{"PublicKey.Y", Field, 0, ""},
+		{"Sign", Func, 0, "func(rand io.Reader, priv *PrivateKey, hash []byte) (r *big.Int, s *big.Int, err error)"},
+		{"Verify", Func, 0, "func(pub *PublicKey, hash []byte, r *big.Int, s *big.Int) bool"},
+	},
+	"crypto/ecdh": {
+		{"(*PrivateKey).Bytes", Method, 20, ""},
+		{"(*PrivateKey).Curve", Method, 20, ""},
+		{"(*PrivateKey).ECDH", Method, 20, ""},
+		{"(*PrivateKey).Equal", Method, 20, ""},
+		{"(*PrivateKey).Public", Method, 20, ""},
+		{"(*PrivateKey).PublicKey", Method, 20, ""},
+		{"(*PublicKey).Bytes", Method, 20, ""},
+		{"(*PublicKey).Curve", Method, 20, ""},
+		{"(*PublicKey).Equal", Method, 20, ""},
+		{"Curve", Type, 20, ""},
+		{"P256", Func, 20, "func() Curve"},
+		{"P384", Func, 20, "func() Curve"},
+		{"P521", Func, 20, "func() Curve"},
+		{"PrivateKey", Type, 20, ""},
+		{"PublicKey", Type, 20, ""},
+		{"X25519", Func, 20, "func() Curve"},
+	},
+	"crypto/ecdsa": {
+		{"(*PrivateKey).ECDH", Method, 20, ""},
+		{"(*PrivateKey).Equal", Method, 15, ""},
+		{"(*PrivateKey).Public", Method, 4, ""},
+		{"(*PrivateKey).Sign", Method, 4, ""},
+		{"(*PublicKey).ECDH", Method, 20, ""},
+		{"(*PublicKey).Equal", Method, 15, ""},
+		{"(PrivateKey).Add", Method, 0, ""},
+		{"(PrivateKey).Double", Method, 0, ""},
+		{"(PrivateKey).IsOnCurve", Method, 0, ""},
+		{"(PrivateKey).Params", Method, 0, ""},
+		{"(PrivateKey).ScalarBaseMult", Method, 0, ""},
+		{"(PrivateKey).ScalarMult", Method, 0, ""},
+		{"(PublicKey).Add", Method, 0, ""},
+		{"(PublicKey).Double", Method, 0, ""},
+		{"(PublicKey).IsOnCurve", Method, 0, ""},
+		{"(PublicKey).Params", Method, 0, ""},
+		{"(PublicKey).ScalarBaseMult", Method, 0, ""},
+		{"(PublicKey).ScalarMult", Method, 0, ""},
+		{"GenerateKey", Func, 0, "func(c elliptic.Curve, rand io.Reader) (*PrivateKey, error)"},
+		{"PrivateKey", Type, 0, ""},
+		{"PrivateKey.D", Field, 0, ""},
+		{"PrivateKey.PublicKey", Field, 0, ""},
+		{"PublicKey", Type, 0, ""},
+		{"PublicKey.Curve", Field, 0, ""},
+		{"PublicKey.X", Field, 0, ""},
+		{"PublicKey.Y", Field, 0, ""},
+		{"Sign", Func, 0, "func(rand io.Reader, priv *PrivateKey, hash []byte) (r *big.Int, s *big.Int, err error)"},
+		{"SignASN1", Func, 15, "func(rand io.Reader, priv *PrivateKey, hash []byte) ([]byte, error)"},
+		{"Verify", Func, 0, "func(pub *PublicKey, hash []byte, r *big.Int, s *big.Int) bool"},
+		{"VerifyASN1", Func, 15, "func(pub *PublicKey, hash []byte, sig []byte) bool"},
+	},
+	"crypto/ed25519": {
+		{"(*Options).HashFunc", Method, 20, ""},
+		{"(PrivateKey).Equal", Method, 15, ""},
+		{"(PrivateKey).Public", Method, 13, ""},
+		{"(PrivateKey).Seed", Method, 13, ""},
+		{"(PrivateKey).Sign", Method, 13, ""},
+		{"(PublicKey).Equal", Method, 15, ""},
+		{"GenerateKey", Func, 13, "func(rand io.Reader) (PublicKey, PrivateKey, error)"},
+		{"NewKeyFromSeed", Func, 13, "func(seed []byte) PrivateKey"},
+		{"Options", Type, 20, ""},
+		{"Options.Context", Field, 20, ""},
+		{"Options.Hash", Field, 20, ""},
+		{"PrivateKey", Type, 13, ""},
+		{"PrivateKeySize", Const, 13, ""},
+		{"PublicKey", Type, 13, ""},
+		{"PublicKeySize", Const, 13, ""},
+		{"SeedSize", Const, 13, ""},
+		{"Sign", Func, 13, "func(privateKey PrivateKey, message []byte) []byte"},
+		{"SignatureSize", Const, 13, ""},
+		{"Verify", Func, 13, "func(publicKey PublicKey, message []byte, sig []byte) bool"},
+		{"VerifyWithOptions", Func, 20, "func(publicKey PublicKey, message []byte, sig []byte, opts *Options) error"},
+	},
+	"crypto/elliptic": {
+		{"(*CurveParams).Add", Method, 0, ""},
+		{"(*CurveParams).Double", Method, 0, ""},
+		{"(*CurveParams).IsOnCurve", Method, 0, ""},
+		{"(*CurveParams).Params", Method, 0, ""},
+		{"(*CurveParams).ScalarBaseMult", Method, 0, ""},
+		{"(*CurveParams).ScalarMult", Method, 0, ""},
+		{"Curve", Type, 0, ""},
+		{"CurveParams", Type, 0, ""},
+		{"CurveParams.B", Field, 0, ""},
+		{"CurveParams.BitSize", Field, 0, ""},
+		{"CurveParams.Gx", Field, 0, ""},
+		{"CurveParams.Gy", Field, 0, ""},
+		{"CurveParams.N", Field, 0, ""},
+		{"CurveParams.Name", Field, 5, ""},
+		{"CurveParams.P", Field, 0, ""},
+		{"GenerateKey", Func, 0, "func(curve Curve, rand io.Reader) (priv []byte, x *big.Int, y *big.Int, err error)"},
+		{"Marshal", Func, 0, "func(curve Curve, x *big.Int, y *big.Int) []byte"},
+		{"MarshalCompressed", Func, 15, "func(curve Curve, x *big.Int, y *big.Int) []byte"},
+		{"P224", Func, 0, "func() Curve"},
+		{"P256", Func, 0, "func() Curve"},
+		{"P384", Func, 0, "func() Curve"},
+		{"P521", Func, 0, "func() Curve"},
+		{"Unmarshal", Func, 0, "func(curve Curve, data []byte) (x *big.Int, y *big.Int)"},
+		{"UnmarshalCompressed", Func, 15, "func(curve Curve, data []byte) (x *big.Int, y *big.Int)"},
+	},
+	"crypto/fips140": {
+		{"Enabled", Func, 24, "func() bool"},
+	},
+	"crypto/hkdf": {
+		{"Expand", Func, 24, "func[H hash.Hash](h func() H, pseudorandomKey []byte, info string, keyLength int) ([]byte, error)"},
+		{"Extract", Func, 24, "func[H hash.Hash](h func() H, secret []byte, salt []byte) ([]byte, error)"},
+		{"Key", Func, 24, "func[Hash hash.Hash](h func() Hash, secret []byte, salt []byte, info string, keyLength int) ([]byte, error)"},
+	},
+	"crypto/hmac": {
+		{"Equal", Func, 1, "func(mac1 []byte, mac2 []byte) bool"},
+		{"New", Func, 0, "func(h func() hash.Hash, key []byte) hash.Hash"},
+	},
+	"crypto/md5": {
+		{"BlockSize", Const, 0, ""},
+		{"New", Func, 0, "func() hash.Hash"},
+		{"Size", Const, 0, ""},
+		{"Sum", Func, 2, "func(data []byte) [16]byte"},
+	},
+	"crypto/mlkem": {
+		{"(*DecapsulationKey1024).Bytes", Method, 24, ""},
+		{"(*DecapsulationKey1024).Decapsulate", Method, 24, ""},
+		{"(*DecapsulationKey1024).EncapsulationKey", Method, 24, ""},
+		{"(*DecapsulationKey768).Bytes", Method, 24, ""},
+		{"(*DecapsulationKey768).Decapsulate", Method, 24, ""},
+		{"(*DecapsulationKey768).EncapsulationKey", Method, 24, ""},
+		{"(*EncapsulationKey1024).Bytes", Method, 24, ""},
+		{"(*EncapsulationKey1024).Encapsulate", Method, 24, ""},
+		{"(*EncapsulationKey768).Bytes", Method, 24, ""},
+		{"(*EncapsulationKey768).Encapsulate", Method, 24, ""},
+		{"CiphertextSize1024", Const, 24, ""},
+		{"CiphertextSize768", Const, 24, ""},
+		{"DecapsulationKey1024", Type, 24, ""},
+		{"DecapsulationKey768", Type, 24, ""},
+		{"EncapsulationKey1024", Type, 24, ""},
+		{"EncapsulationKey768", Type, 24, ""},
+		{"EncapsulationKeySize1024", Const, 24, ""},
+		{"EncapsulationKeySize768", Const, 24, ""},
+		{"GenerateKey1024", Func, 24, "func() (*DecapsulationKey1024, error)"},
+		{"GenerateKey768", Func, 24, "func() (*DecapsulationKey768, error)"},
+		{"NewDecapsulationKey1024", Func, 24, "func(seed []byte) (*DecapsulationKey1024, error)"},
+		{"NewDecapsulationKey768", Func, 24, "func(seed []byte) (*DecapsulationKey768, error)"},
+		{"NewEncapsulationKey1024", Func, 24, "func(encapsulationKey []byte) (*EncapsulationKey1024, error)"},
+		{"NewEncapsulationKey768", Func, 24, "func(encapsulationKey []byte) (*EncapsulationKey768, error)"},
+		{"SeedSize", Const, 24, ""},
+		{"SharedKeySize", Const, 24, ""},
+	},
+	"crypto/pbkdf2": {
+		{"Key", Func, 24, "func[Hash hash.Hash](h func() Hash, password string, salt []byte, iter int, keyLength int) ([]byte, error)"},
+	},
+	"crypto/rand": {
+		{"Int", Func, 0, "func(rand io.Reader, max *big.Int) (n *big.Int, err error)"},
+		{"Prime", Func, 0, "func(rand io.Reader, bits int) (*big.Int, error)"},
+		{"Read", Func, 0, "func(b []byte) (n int, err error)"},
+		{"Reader", Var, 0, ""},
+		{"Text", Func, 24, "func() string"},
+	},
+	"crypto/rc4": {
+		{"(*Cipher).Reset", Method, 0, ""},
+		{"(*Cipher).XORKeyStream", Method, 0, ""},
+		{"(KeySizeError).Error", Method, 0, ""},
+		{"Cipher", Type, 0, ""},
+		{"KeySizeError", Type, 0, ""},
+		{"NewCipher", Func, 0, "func(key []byte) (*Cipher, error)"},
+	},
+	"crypto/rsa": {
+		{"(*PSSOptions).HashFunc", Method, 4, ""},
+		{"(*PrivateKey).Decrypt", Method, 5, ""},
+		{"(*PrivateKey).Equal", Method, 15, ""},
+		{"(*PrivateKey).Precompute", Method, 0, ""},
+		{"(*PrivateKey).Public", Method, 4, ""},
+		{"(*PrivateKey).Sign", Method, 4, ""},
+		{"(*PrivateKey).Size", Method, 11, ""},
+		{"(*PrivateKey).Validate", Method, 0, ""},
+		{"(*PublicKey).Equal", Method, 15, ""},
+		{"(*PublicKey).Size", Method, 11, ""},
+		{"CRTValue", Type, 0, ""},
+		{"CRTValue.Coeff", Field, 0, ""},
+		{"CRTValue.Exp", Field, 0, ""},
+		{"CRTValue.R", Field, 0, ""},
+		{"DecryptOAEP", Func, 0, "func(hash hash.Hash, random io.Reader, priv *PrivateKey, ciphertext []byte, label []byte) ([]byte, error)"},
+		{"DecryptPKCS1v15", Func, 0, "func(random io.Reader, priv *PrivateKey, ciphertext []byte) ([]byte, error)"},
+		{"DecryptPKCS1v15SessionKey", Func, 0, "func(random io.Reader, priv *PrivateKey, ciphertext []byte, key []byte) error"},
+		{"EncryptOAEP", Func, 0, "func(hash hash.Hash, random io.Reader, pub *PublicKey, msg []byte, label []byte) ([]byte, error)"},
+		{"EncryptPKCS1v15", Func, 0, "func(random io.Reader, pub *PublicKey, msg []byte) ([]byte, error)"},
+		{"ErrDecryption", Var, 0, ""},
+		{"ErrMessageTooLong", Var, 0, ""},
+		{"ErrVerification", Var, 0, ""},
+		{"GenerateKey", Func, 0, "func(random io.Reader, bits int) (*PrivateKey, error)"},
+		{"GenerateMultiPrimeKey", Func, 0, "func(random io.Reader, nprimes int, bits int) (*PrivateKey, error)"},
+		{"OAEPOptions", Type, 5, ""},
+		{"OAEPOptions.Hash", Field, 5, ""},
+		{"OAEPOptions.Label", Field, 5, ""},
+		{"OAEPOptions.MGFHash", Field, 20, ""},
+		{"PKCS1v15DecryptOptions", Type, 5, ""},
+		{"PKCS1v15DecryptOptions.SessionKeyLen", Field, 5, ""},
+		{"PSSOptions", Type, 2, ""},
+		{"PSSOptions.Hash", Field, 4, ""},
+		{"PSSOptions.SaltLength", Field, 2, ""},
+		{"PSSSaltLengthAuto", Const, 2, ""},
+		{"PSSSaltLengthEqualsHash", Const, 2, ""},
+		{"PrecomputedValues", Type, 0, ""},
+		{"PrecomputedValues.CRTValues", Field, 0, ""},
+		{"PrecomputedValues.Dp", Field, 0, ""},
+		{"PrecomputedValues.Dq", Field, 0, ""},
+		{"PrecomputedValues.Qinv", Field, 0, ""},
+		{"PrivateKey", Type, 0, ""},
+		{"PrivateKey.D", Field, 0, ""},
+		{"PrivateKey.Precomputed", Field, 0, ""},
+		{"PrivateKey.Primes", Field, 0, ""},
+		{"PrivateKey.PublicKey", Field, 0, ""},
+		{"PublicKey", Type, 0, ""},
+		{"PublicKey.E", Field, 0, ""},
+		{"PublicKey.N", Field, 0, ""},
+		{"SignPKCS1v15", Func, 0, "func(random io.Reader, priv *PrivateKey, hash crypto.Hash, hashed []byte) ([]byte, error)"},
+		{"SignPSS", Func, 2, "func(rand io.Reader, priv *PrivateKey, hash crypto.Hash, digest []byte, opts *PSSOptions) ([]byte, error)"},
+		{"VerifyPKCS1v15", Func, 0, "func(pub *PublicKey, hash crypto.Hash, hashed []byte, sig []byte) error"},
+		{"VerifyPSS", Func, 2, "func(pub *PublicKey, hash crypto.Hash, digest []byte, sig []byte, opts *PSSOptions) error"},
+	},
+	"crypto/sha1": {
+		{"BlockSize", Const, 0, ""},
+		{"New", Func, 0, "func() hash.Hash"},
+		{"Size", Const, 0, ""},
+		{"Sum", Func, 2, "func(data []byte) [20]byte"},
+	},
+	"crypto/sha256": {
+		{"BlockSize", Const, 0, ""},
+		{"New", Func, 0, "func() hash.Hash"},
+		{"New224", Func, 0, "func() hash.Hash"},
+		{"Size", Const, 0, ""},
+		{"Size224", Const, 0, ""},
+		{"Sum224", Func, 2, "func(data []byte) [28]byte"},
+		{"Sum256", Func, 2, "func(data []byte) [32]byte"},
+	},
+	"crypto/sha3": {
+		{"(*SHA3).AppendBinary", Method, 24, ""},
+		{"(*SHA3).BlockSize", Method, 24, ""},
+		{"(*SHA3).MarshalBinary", Method, 24, ""},
+		{"(*SHA3).Reset", Method, 24, ""},
+		{"(*SHA3).Size", Method, 24, ""},
+		{"(*SHA3).Sum", Method, 24, ""},
+		{"(*SHA3).UnmarshalBinary", Method, 24, ""},
+		{"(*SHA3).Write", Method, 24, ""},
+		{"(*SHAKE).AppendBinary", Method, 24, ""},
+		{"(*SHAKE).BlockSize", Method, 24, ""},
+		{"(*SHAKE).MarshalBinary", Method, 24, ""},
+		{"(*SHAKE).Read", Method, 24, ""},
+		{"(*SHAKE).Reset", Method, 24, ""},
+		{"(*SHAKE).UnmarshalBinary", Method, 24, ""},
+		{"(*SHAKE).Write", Method, 24, ""},
+		{"New224", Func, 24, "func() *SHA3"},
+		{"New256", Func, 24, "func() *SHA3"},
+		{"New384", Func, 24, "func() *SHA3"},
+		{"New512", Func, 24, "func() *SHA3"},
+		{"NewCSHAKE128", Func, 24, "func(N []byte, S []byte) *SHAKE"},
+		{"NewCSHAKE256", Func, 24, "func(N []byte, S []byte) *SHAKE"},
+		{"NewSHAKE128", Func, 24, "func() *SHAKE"},
+		{"NewSHAKE256", Func, 24, "func() *SHAKE"},
+		{"SHA3", Type, 24, ""},
+		{"SHAKE", Type, 24, ""},
+		{"Sum224", Func, 24, "func(data []byte) [28]byte"},
+		{"Sum256", Func, 24, "func(data []byte) [32]byte"},
+		{"Sum384", Func, 24, "func(data []byte) [48]byte"},
+		{"Sum512", Func, 24, "func(data []byte) [64]byte"},
+		{"SumSHAKE128", Func, 24, "func(data []byte, length int) []byte"},
+		{"SumSHAKE256", Func, 24, "func(data []byte, length int) []byte"},
+	},
+	"crypto/sha512": {
+		{"BlockSize", Const, 0, ""},
+		{"New", Func, 0, "func() hash.Hash"},
+		{"New384", Func, 0, "func() hash.Hash"},
+		{"New512_224", Func, 5, "func() hash.Hash"},
+		{"New512_256", Func, 5, "func() hash.Hash"},
+		{"Size", Const, 0, ""},
+		{"Size224", Const, 5, ""},
+		{"Size256", Const, 5, ""},
+		{"Size384", Const, 0, ""},
+		{"Sum384", Func, 2, "func(data []byte) [48]byte"},
+		{"Sum512", Func, 2, "func(data []byte) [64]byte"},
+		{"Sum512_224", Func, 5, "func(data []byte) [28]byte"},
+		{"Sum512_256", Func, 5, "func(data []byte) [32]byte"},
+	},
+	"crypto/subtle": {
+		{"ConstantTimeByteEq", Func, 0, "func(x uint8, y uint8) int"},
+		{"ConstantTimeCompare", Func, 0, "func(x []byte, y []byte) int"},
+		{"ConstantTimeCopy", Func, 0, "func(v int, x []byte, y []byte)"},
+		{"ConstantTimeEq", Func, 0, "func(x int32, y int32) int"},
+		{"ConstantTimeLessOrEq", Func, 2, "func(x int, y int) int"},
+		{"ConstantTimeSelect", Func, 0, "func(v int, x int, y int) int"},
+		{"WithDataIndependentTiming", Func, 24, "func(f func())"},
+		{"XORBytes", Func, 20, "func(dst []byte, x []byte, y []byte) int"},
+	},
+	"crypto/tls": {
+		{"(*CertificateRequestInfo).Context", Method, 17, ""},
+		{"(*CertificateRequestInfo).SupportsCertificate", Method, 14, ""},
+		{"(*CertificateVerificationError).Error", Method, 20, ""},
+		{"(*CertificateVerificationError).Unwrap", Method, 20, ""},
+		{"(*ClientHelloInfo).Context", Method, 17, ""},
+		{"(*ClientHelloInfo).SupportsCertificate", Method, 14, ""},
+		{"(*ClientSessionState).ResumptionState", Method, 21, ""},
+		{"(*Config).BuildNameToCertificate", Method, 0, ""},
+		{"(*Config).Clone", Method, 8, ""},
+		{"(*Config).DecryptTicket", Method, 21, ""},
+		{"(*Config).EncryptTicket", Method, 21, ""},
+		{"(*Config).SetSessionTicketKeys", Method, 5, ""},
+		{"(*Conn).Close", Method, 0, ""},
+		{"(*Conn).CloseWrite", Method, 8, ""},
+		{"(*Conn).ConnectionState", Method, 0, ""},
+		{"(*Conn).Handshake", Method, 0, ""},
+		{"(*Conn).HandshakeContext", Method, 17, ""},
+		{"(*Conn).LocalAddr", Method, 0, ""},
+		{"(*Conn).NetConn", Method, 18, ""},
+		{"(*Conn).OCSPResponse", Method, 0, ""},
+		{"(*Conn).Read", Method, 0, ""},
+		{"(*Conn).RemoteAddr", Method, 0, ""},
+		{"(*Conn).SetDeadline", Method, 0, ""},
+		{"(*Conn).SetReadDeadline", Method, 0, ""},
+		{"(*Conn).SetWriteDeadline", Method, 0, ""},
+		{"(*Conn).VerifyHostname", Method, 0, ""},
+		{"(*Conn).Write", Method, 0, ""},
+		{"(*ConnectionState).ExportKeyingMaterial", Method, 11, ""},
+		{"(*Dialer).Dial", Method, 15, ""},
+		{"(*Dialer).DialContext", Method, 15, ""},
+		{"(*ECHRejectionError).Error", Method, 23, ""},
+		{"(*QUICConn).Close", Method, 21, ""},
+		{"(*QUICConn).ConnectionState", Method, 21, ""},
+		{"(*QUICConn).HandleData", Method, 21, ""},
+		{"(*QUICConn).NextEvent", Method, 21, ""},
+		{"(*QUICConn).SendSessionTicket", Method, 21, ""},
+		{"(*QUICConn).SetTransportParameters", Method, 21, ""},
+		{"(*QUICConn).Start", Method, 21, ""},
+		{"(*QUICConn).StoreSession", Method, 23, ""},
+		{"(*SessionState).Bytes", Method, 21, ""},
+		{"(AlertError).Error", Method, 21, ""},
+		{"(ClientAuthType).String", Method, 15, ""},
+		{"(CurveID).String", Method, 15, ""},
+		{"(QUICEncryptionLevel).String", Method, 21, ""},
+		{"(RecordHeaderError).Error", Method, 6, ""},
+		{"(SignatureScheme).String", Method, 15, ""},
+		{"AlertError", Type, 21, ""},
+		{"Certificate", Type, 0, ""},
+		{"Certificate.Certificate", Field, 0, ""},
+		{"Certificate.Leaf", Field, 0, ""},
+		{"Certificate.OCSPStaple", Field, 0, ""},
+		{"Certificate.PrivateKey", Field, 0, ""},
+		{"Certificate.SignedCertificateTimestamps", Field, 5, ""},
+		{"Certificate.SupportedSignatureAlgorithms", Field, 14, ""},
+		{"CertificateRequestInfo", Type, 8, ""},
+		{"CertificateRequestInfo.AcceptableCAs", Field, 8, ""},
+		{"CertificateRequestInfo.SignatureSchemes", Field, 8, ""},
+		{"CertificateRequestInfo.Version", Field, 14, ""},
+		{"CertificateVerificationError", Type, 20, ""},
+		{"CertificateVerificationError.Err", Field, 20, ""},
+		{"CertificateVerificationError.UnverifiedCertificates", Field, 20, ""},
+		{"CipherSuite", Type, 14, ""},
+		{"CipherSuite.ID", Field, 14, ""},
+		{"CipherSuite.Insecure", Field, 14, ""},
+		{"CipherSuite.Name", Field, 14, ""},
+		{"CipherSuite.SupportedVersions", Field, 14, ""},
+		{"CipherSuiteName", Func, 14, "func(id uint16) string"},
+		{"CipherSuites", Func, 14, "func() []*CipherSuite"},
+		{"Client", Func, 0, "func(conn net.Conn, config *Config) *Conn"},
+		{"ClientAuthType", Type, 0, ""},
+		{"ClientHelloInfo", Type, 4, ""},
+		{"ClientHelloInfo.CipherSuites", Field, 4, ""},
+		{"ClientHelloInfo.Conn", Field, 8, ""},
+		{"ClientHelloInfo.Extensions", Field, 24, ""},
+		{"ClientHelloInfo.ServerName", Field, 4, ""},
+		{"ClientHelloInfo.SignatureSchemes", Field, 8, ""},
+		{"ClientHelloInfo.SupportedCurves", Field, 4, ""},
+		{"ClientHelloInfo.SupportedPoints", Field, 4, ""},
+		{"ClientHelloInfo.SupportedProtos", Field, 8, ""},
+		{"ClientHelloInfo.SupportedVersions", Field, 8, ""},
+		{"ClientSessionCache", Type, 3, ""},
+		{"ClientSessionState", Type, 3, ""},
+		{"Config", Type, 0, ""},
+		{"Config.Certificates", Field, 0, ""},
+		{"Config.CipherSuites", Field, 0, ""},
+		{"Config.ClientAuth", Field, 0, ""},
+		{"Config.ClientCAs", Field, 0, ""},
+		{"Config.ClientSessionCache", Field, 3, ""},
+		{"Config.CurvePreferences", Field, 3, ""},
+		{"Config.DynamicRecordSizingDisabled", Field, 7, ""},
+		{"Config.EncryptedClientHelloConfigList", Field, 23, ""},
+		{"Config.EncryptedClientHelloKeys", Field, 24, ""},
+		{"Config.EncryptedClientHelloRejectionVerify", Field, 23, ""},
+		{"Config.GetCertificate", Field, 4, ""},
+		{"Config.GetClientCertificate", Field, 8, ""},
+		{"Config.GetConfigForClient", Field, 8, ""},
+		{"Config.InsecureSkipVerify", Field, 0, ""},
+		{"Config.KeyLogWriter", Field, 8, ""},
+		{"Config.MaxVersion", Field, 2, ""},
+		{"Config.MinVersion", Field, 2, ""},
+		{"Config.NameToCertificate", Field, 0, ""},
+		{"Config.NextProtos", Field, 0, ""},
+		{"Config.PreferServerCipherSuites", Field, 1, ""},
+		{"Config.Rand", Field, 0, ""},
+		{"Config.Renegotiation", Field, 7, ""},
+		{"Config.RootCAs", Field, 0, ""},
+		{"Config.ServerName", Field, 0, ""},
+		{"Config.SessionTicketKey", Field, 1, ""},
+		{"Config.SessionTicketsDisabled", Field, 1, ""},
+		{"Config.Time", Field, 0, ""},
+		{"Config.UnwrapSession", Field, 21, ""},
+		{"Config.VerifyConnection", Field, 15, ""},
+		{"Config.VerifyPeerCertificate", Field, 8, ""},
+		{"Config.WrapSession", Field, 21, ""},
+		{"Conn", Type, 0, ""},
+		{"ConnectionState", Type, 0, ""},
+		{"ConnectionState.CipherSuite", Field, 0, ""},
+		{"ConnectionState.CurveID", Field, 25, ""},
+		{"ConnectionState.DidResume", Field, 1, ""},
+		{"ConnectionState.ECHAccepted", Field, 23, ""},
+		{"ConnectionState.HandshakeComplete", Field, 0, ""},
+		{"ConnectionState.NegotiatedProtocol", Field, 0, ""},
+		{"ConnectionState.NegotiatedProtocolIsMutual", Field, 0, ""},
+		{"ConnectionState.OCSPResponse", Field, 5, ""},
+		{"ConnectionState.PeerCertificates", Field, 0, ""},
+		{"ConnectionState.ServerName", Field, 0, ""},
+		{"ConnectionState.SignedCertificateTimestamps", Field, 5, ""},
+		{"ConnectionState.TLSUnique", Field, 4, ""},
+		{"ConnectionState.VerifiedChains", Field, 0, ""},
+		{"ConnectionState.Version", Field, 3, ""},
+		{"CurveID", Type, 3, ""},
+		{"CurveP256", Const, 3, ""},
+		{"CurveP384", Const, 3, ""},
+		{"CurveP521", Const, 3, ""},
+		{"Dial", Func, 0, "func(network string, addr string, config *Config) (*Conn, error)"},
+		{"DialWithDialer", Func, 3, "func(dialer *net.Dialer, network string, addr string, config *Config) (*Conn, error)"},
+		{"Dialer", Type, 15, ""},
+		{"Dialer.Config", Field, 15, ""},
+		{"Dialer.NetDialer", Field, 15, ""},
+		{"ECDSAWithP256AndSHA256", Const, 8, ""},
+		{"ECDSAWithP384AndSHA384", Const, 8, ""},
+		{"ECDSAWithP521AndSHA512", Const, 8, ""},
+		{"ECDSAWithSHA1", Const, 10, ""},
+		{"ECHRejectionError", Type, 23, ""},
+		{"ECHRejectionError.RetryConfigList", Field, 23, ""},
+		{"Ed25519", Const, 13, ""},
+		{"EncryptedClientHelloKey", Type, 24, ""},
+		{"EncryptedClientHelloKey.Config", Field, 24, ""},
+		{"EncryptedClientHelloKey.PrivateKey", Field, 24, ""},
+		{"EncryptedClientHelloKey.SendAsRetry", Field, 24, ""},
+		{"InsecureCipherSuites", Func, 14, "func() []*CipherSuite"},
+		{"Listen", Func, 0, "func(network string, laddr string, config *Config) (net.Listener, error)"},
+		{"LoadX509KeyPair", Func, 0, "func(certFile string, keyFile string) (Certificate, error)"},
+		{"NewLRUClientSessionCache", Func, 3, "func(capacity int) ClientSessionCache"},
+		{"NewListener", Func, 0, "func(inner net.Listener, config *Config) net.Listener"},
+		{"NewResumptionState", Func, 21, "func(ticket []byte, state *SessionState) (*ClientSessionState, error)"},
+		{"NoClientCert", Const, 0, ""},
+		{"PKCS1WithSHA1", Const, 8, ""},
+		{"PKCS1WithSHA256", Const, 8, ""},
+		{"PKCS1WithSHA384", Const, 8, ""},
+		{"PKCS1WithSHA512", Const, 8, ""},
+		{"PSSWithSHA256", Const, 8, ""},
+		{"PSSWithSHA384", Const, 8, ""},
+		{"PSSWithSHA512", Const, 8, ""},
+		{"ParseSessionState", Func, 21, "func(data []byte) (*SessionState, error)"},
+		{"QUICClient", Func, 21, "func(config *QUICConfig) *QUICConn"},
+		{"QUICConfig", Type, 21, ""},
+		{"QUICConfig.EnableSessionEvents", Field, 23, ""},
+		{"QUICConfig.TLSConfig", Field, 21, ""},
+		{"QUICConn", Type, 21, ""},
+		{"QUICEncryptionLevel", Type, 21, ""},
+		{"QUICEncryptionLevelApplication", Const, 21, ""},
+		{"QUICEncryptionLevelEarly", Const, 21, ""},
+		{"QUICEncryptionLevelHandshake", Const, 21, ""},
+		{"QUICEncryptionLevelInitial", Const, 21, ""},
+		{"QUICEvent", Type, 21, ""},
+		{"QUICEvent.Data", Field, 21, ""},
+		{"QUICEvent.Kind", Field, 21, ""},
+		{"QUICEvent.Level", Field, 21, ""},
+		{"QUICEvent.SessionState", Field, 23, ""},
+		{"QUICEvent.Suite", Field, 21, ""},
+		{"QUICEventKind", Type, 21, ""},
+		{"QUICHandshakeDone", Const, 21, ""},
+		{"QUICNoEvent", Const, 21, ""},
+		{"QUICRejectedEarlyData", Const, 21, ""},
+		{"QUICResumeSession", Const, 23, ""},
+		{"QUICServer", Func, 21, "func(config *QUICConfig) *QUICConn"},
+		{"QUICSessionTicketOptions", Type, 21, ""},
+		{"QUICSessionTicketOptions.EarlyData", Field, 21, ""},
+		{"QUICSessionTicketOptions.Extra", Field, 23, ""},
+		{"QUICSetReadSecret", Const, 21, ""},
+		{"QUICSetWriteSecret", Const, 21, ""},
+		{"QUICStoreSession", Const, 23, ""},
+		{"QUICTransportParameters", Const, 21, ""},
+		{"QUICTransportParametersRequired", Const, 21, ""},
+		{"QUICWriteData", Const, 21, ""},
+		{"RecordHeaderError", Type, 6, ""},
+		{"RecordHeaderError.Conn", Field, 12, ""},
+		{"RecordHeaderError.Msg", Field, 6, ""},
+		{"RecordHeaderError.RecordHeader", Field, 6, ""},
+		{"RenegotiateFreelyAsClient", Const, 7, ""},
+		{"RenegotiateNever", Const, 7, ""},
+		{"RenegotiateOnceAsClient", Const, 7, ""},
+		{"RenegotiationSupport", Type, 7, ""},
+		{"RequestClientCert", Const, 0, ""},
+		{"RequireAndVerifyClientCert", Const, 0, ""},
+		{"RequireAnyClientCert", Const, 0, ""},
+		{"Server", Func, 0, "func(conn net.Conn, config *Config) *Conn"},
+		{"SessionState", Type, 21, ""},
+		{"SessionState.EarlyData", Field, 21, ""},
+		{"SessionState.Extra", Field, 21, ""},
+		{"SignatureScheme", Type, 8, ""},
+		{"TLS_AES_128_GCM_SHA256", Const, 12, ""},
+		{"TLS_AES_256_GCM_SHA384", Const, 12, ""},
+		{"TLS_CHACHA20_POLY1305_SHA256", Const, 12, ""},
+		{"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", Const, 2, ""},
+		{"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", Const, 8, ""},
+		{"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", Const, 2, ""},
+		{"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", Const, 2, ""},
+		{"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", Const, 5, ""},
+		{"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305", Const, 8, ""},
+		{"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", Const, 14, ""},
+		{"TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", Const, 2, ""},
+		{"TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", Const, 0, ""},
+		{"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", Const, 0, ""},
+		{"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", Const, 8, ""},
+		{"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", Const, 2, ""},
+		{"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", Const, 1, ""},
+		{"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", Const, 5, ""},
+		{"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305", Const, 8, ""},
+		{"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", Const, 14, ""},
+		{"TLS_ECDHE_RSA_WITH_RC4_128_SHA", Const, 0, ""},
+		{"TLS_FALLBACK_SCSV", Const, 4, ""},
+		{"TLS_RSA_WITH_3DES_EDE_CBC_SHA", Const, 0, ""},
+		{"TLS_RSA_WITH_AES_128_CBC_SHA", Const, 0, ""},
+		{"TLS_RSA_WITH_AES_128_CBC_SHA256", Const, 8, ""},
+		{"TLS_RSA_WITH_AES_128_GCM_SHA256", Const, 6, ""},
+		{"TLS_RSA_WITH_AES_256_CBC_SHA", Const, 1, ""},
+		{"TLS_RSA_WITH_AES_256_GCM_SHA384", Const, 6, ""},
+		{"TLS_RSA_WITH_RC4_128_SHA", Const, 0, ""},
+		{"VerifyClientCertIfGiven", Const, 0, ""},
+		{"VersionName", Func, 21, "func(version uint16) string"},
+		{"VersionSSL30", Const, 2, ""},
+		{"VersionTLS10", Const, 2, ""},
+		{"VersionTLS11", Const, 2, ""},
+		{"VersionTLS12", Const, 2, ""},
+		{"VersionTLS13", Const, 12, ""},
+		{"X25519", Const, 8, ""},
+		{"X25519MLKEM768", Const, 24, ""},
+		{"X509KeyPair", Func, 0, "func(certPEMBlock []byte, keyPEMBlock []byte) (Certificate, error)"},
+	},
+	"crypto/x509": {
+		{"(*CertPool).AddCert", Method, 0, ""},
+		{"(*CertPool).AddCertWithConstraint", Method, 22, ""},
+		{"(*CertPool).AppendCertsFromPEM", Method, 0, ""},
+		{"(*CertPool).Clone", Method, 19, ""},
+		{"(*CertPool).Equal", Method, 19, ""},
+		{"(*CertPool).Subjects", Method, 0, ""},
+		{"(*Certificate).CheckCRLSignature", Method, 0, ""},
+		{"(*Certificate).CheckSignature", Method, 0, ""},
+		{"(*Certificate).CheckSignatureFrom", Method, 0, ""},
+		{"(*Certificate).CreateCRL", Method, 0, ""},
+		{"(*Certificate).Equal", Method, 0, ""},
+		{"(*Certificate).Verify", Method, 0, ""},
+		{"(*Certificate).VerifyHostname", Method, 0, ""},
+		{"(*CertificateRequest).CheckSignature", Method, 5, ""},
+		{"(*OID).UnmarshalBinary", Method, 23, ""},
+		{"(*OID).UnmarshalText", Method, 23, ""},
+		{"(*RevocationList).CheckSignatureFrom", Method, 19, ""},
+		{"(CertificateInvalidError).Error", Method, 0, ""},
+		{"(ConstraintViolationError).Error", Method, 0, ""},
+		{"(HostnameError).Error", Method, 0, ""},
+		{"(InsecureAlgorithmError).Error", Method, 6, ""},
+		{"(OID).AppendBinary", Method, 24, ""},
+		{"(OID).AppendText", Method, 24, ""},
+		{"(OID).Equal", Method, 22, ""},
+		{"(OID).EqualASN1OID", Method, 22, ""},
+		{"(OID).MarshalBinary", Method, 23, ""},
+		{"(OID).MarshalText", Method, 23, ""},
+		{"(OID).String", Method, 22, ""},
+		{"(PublicKeyAlgorithm).String", Method, 10, ""},
+		{"(SignatureAlgorithm).String", Method, 6, ""},
+		{"(SystemRootsError).Error", Method, 1, ""},
+		{"(SystemRootsError).Unwrap", Method, 16, ""},
+		{"(UnhandledCriticalExtension).Error", Method, 0, ""},
+		{"(UnknownAuthorityError).Error", Method, 0, ""},
+		{"CANotAuthorizedForExtKeyUsage", Const, 10, ""},
+		{"CANotAuthorizedForThisName", Const, 0, ""},
+		{"CertPool", Type, 0, ""},
+		{"Certificate", Type, 0, ""},
+		{"Certificate.AuthorityKeyId", Field, 0, ""},
+		{"Certificate.BasicConstraintsValid", Field, 0, ""},
+		{"Certificate.CRLDistributionPoints", Field, 2, ""},
+		{"Certificate.DNSNames", Field, 0, ""},
+		{"Certificate.EmailAddresses", Field, 0, ""},
+		{"Certificate.ExcludedDNSDomains", Field, 9, ""},
+		{"Certificate.ExcludedEmailAddresses", Field, 10, ""},
+		{"Certificate.ExcludedIPRanges", Field, 10, ""},
+		{"Certificate.ExcludedURIDomains", Field, 10, ""},
+		{"Certificate.ExtKeyUsage", Field, 0, ""},
+		{"Certificate.Extensions", Field, 2, ""},
+		{"Certificate.ExtraExtensions", Field, 2, ""},
+		{"Certificate.IPAddresses", Field, 1, ""},
+		{"Certificate.InhibitAnyPolicy", Field, 24, ""},
+		{"Certificate.InhibitAnyPolicyZero", Field, 24, ""},
+		{"Certificate.InhibitPolicyMapping", Field, 24, ""},
+		{"Certificate.InhibitPolicyMappingZero", Field, 24, ""},
+		{"Certificate.IsCA", Field, 0, ""},
+		{"Certificate.Issuer", Field, 0, ""},
+		{"Certificate.IssuingCertificateURL", Field, 2, ""},
+		{"Certificate.KeyUsage", Field, 0, ""},
+		{"Certificate.MaxPathLen", Field, 0, ""},
+		{"Certificate.MaxPathLenZero", Field, 4, ""},
+		{"Certificate.NotAfter", Field, 0, ""},
+		{"Certificate.NotBefore", Field, 0, ""},
+		{"Certificate.OCSPServer", Field, 2, ""},
+		{"Certificate.PermittedDNSDomains", Field, 0, ""},
+		{"Certificate.PermittedDNSDomainsCritical", Field, 0, ""},
+		{"Certificate.PermittedEmailAddresses", Field, 10, ""},
+		{"Certificate.PermittedIPRanges", Field, 10, ""},
+		{"Certificate.PermittedURIDomains", Field, 10, ""},
+		{"Certificate.Policies", Field, 22, ""},
+		{"Certificate.PolicyIdentifiers", Field, 0, ""},
+		{"Certificate.PolicyMappings", Field, 24, ""},
+		{"Certificate.PublicKey", Field, 0, ""},
+		{"Certificate.PublicKeyAlgorithm", Field, 0, ""},
+		{"Certificate.Raw", Field, 0, ""},
+		{"Certificate.RawIssuer", Field, 0, ""},
+		{"Certificate.RawSubject", Field, 0, ""},
+		{"Certificate.RawSubjectPublicKeyInfo", Field, 0, ""},
+		{"Certificate.RawTBSCertificate", Field, 0, ""},
+		{"Certificate.RequireExplicitPolicy", Field, 24, ""},
+		{"Certificate.RequireExplicitPolicyZero", Field, 24, ""},
+		{"Certificate.SerialNumber", Field, 0, ""},
+		{"Certificate.Signature", Field, 0, ""},
+		{"Certificate.SignatureAlgorithm", Field, 0, ""},
+		{"Certificate.Subject", Field, 0, ""},
+		{"Certificate.SubjectKeyId", Field, 0, ""},
+		{"Certificate.URIs", Field, 10, ""},
+		{"Certificate.UnhandledCriticalExtensions", Field, 5, ""},
+		{"Certificate.UnknownExtKeyUsage", Field, 0, ""},
+		{"Certificate.Version", Field, 0, ""},
+		{"CertificateInvalidError", Type, 0, ""},
+		{"CertificateInvalidError.Cert", Field, 0, ""},
+		{"CertificateInvalidError.Detail", Field, 10, ""},
+		{"CertificateInvalidError.Reason", Field, 0, ""},
+		{"CertificateRequest", Type, 3, ""},
+		{"CertificateRequest.Attributes", Field, 3, ""},
+		{"CertificateRequest.DNSNames", Field, 3, ""},
+		{"CertificateRequest.EmailAddresses", Field, 3, ""},
+		{"CertificateRequest.Extensions", Field, 3, ""},
+		{"CertificateRequest.ExtraExtensions", Field, 3, ""},
+		{"CertificateRequest.IPAddresses", Field, 3, ""},
+		{"CertificateRequest.PublicKey", Field, 3, ""},
+		{"CertificateRequest.PublicKeyAlgorithm", Field, 3, ""},
+		{"CertificateRequest.Raw", Field, 3, ""},
+		{"CertificateRequest.RawSubject", Field, 3, ""},
+		{"CertificateRequest.RawSubjectPublicKeyInfo", Field, 3, ""},
+		{"CertificateRequest.RawTBSCertificateRequest", Field, 3, ""},
+		{"CertificateRequest.Signature", Field, 3, ""},
+		{"CertificateRequest.SignatureAlgorithm", Field, 3, ""},
+		{"CertificateRequest.Subject", Field, 3, ""},
+		{"CertificateRequest.URIs", Field, 10, ""},
+		{"CertificateRequest.Version", Field, 3, ""},
+		{"ConstraintViolationError", Type, 0, ""},
+		{"CreateCertificate", Func, 0, "func(rand io.Reader, template *Certificate, parent *Certificate, pub any, priv any) ([]byte, error)"},
+		{"CreateCertificateRequest", Func, 3, "func(rand io.Reader, template *CertificateRequest, priv any) (csr []byte, err error)"},
+		{"CreateRevocationList", Func, 15, "func(rand io.Reader, template *RevocationList, issuer *Certificate, priv crypto.Signer) ([]byte, error)"},
+		{"DSA", Const, 0, ""},
+		{"DSAWithSHA1", Const, 0, ""},
+		{"DSAWithSHA256", Const, 0, ""},
+		{"DecryptPEMBlock", Func, 1, "func(b *pem.Block, password []byte) ([]byte, error)"},
+		{"ECDSA", Const, 1, ""},
+		{"ECDSAWithSHA1", Const, 1, ""},
+		{"ECDSAWithSHA256", Const, 1, ""},
+		{"ECDSAWithSHA384", Const, 1, ""},
+		{"ECDSAWithSHA512", Const, 1, ""},
+		{"Ed25519", Const, 13, ""},
+		{"EncryptPEMBlock", Func, 1, "func(rand io.Reader, blockType string, data []byte, password []byte, alg PEMCipher) (*pem.Block, error)"},
+		{"ErrUnsupportedAlgorithm", Var, 0, ""},
+		{"Expired", Const, 0, ""},
+		{"ExtKeyUsage", Type, 0, ""},
+		{"ExtKeyUsageAny", Const, 0, ""},
+		{"ExtKeyUsageClientAuth", Const, 0, ""},
+		{"ExtKeyUsageCodeSigning", Const, 0, ""},
+		{"ExtKeyUsageEmailProtection", Const, 0, ""},
+		{"ExtKeyUsageIPSECEndSystem", Const, 1, ""},
+		{"ExtKeyUsageIPSECTunnel", Const, 1, ""},
+		{"ExtKeyUsageIPSECUser", Const, 1, ""},
+		{"ExtKeyUsageMicrosoftCommercialCodeSigning", Const, 10, ""},
+		{"ExtKeyUsageMicrosoftKernelCodeSigning", Const, 10, ""},
+		{"ExtKeyUsageMicrosoftServerGatedCrypto", Const, 1, ""},
+		{"ExtKeyUsageNetscapeServerGatedCrypto", Const, 1, ""},
+		{"ExtKeyUsageOCSPSigning", Const, 0, ""},
+		{"ExtKeyUsageServerAuth", Const, 0, ""},
+		{"ExtKeyUsageTimeStamping", Const, 0, ""},
+		{"HostnameError", Type, 0, ""},
+		{"HostnameError.Certificate", Field, 0, ""},
+		{"HostnameError.Host", Field, 0, ""},
+		{"IncompatibleUsage", Const, 1, ""},
+		{"IncorrectPasswordError", Var, 1, ""},
+		{"InsecureAlgorithmError", Type, 6, ""},
+		{"InvalidReason", Type, 0, ""},
+		{"IsEncryptedPEMBlock", Func, 1, "func(b *pem.Block) bool"},
+		{"KeyUsage", Type, 0, ""},
+		{"KeyUsageCRLSign", Const, 0, ""},
+		{"KeyUsageCertSign", Const, 0, ""},
+		{"KeyUsageContentCommitment", Const, 0, ""},
+		{"KeyUsageDataEncipherment", Const, 0, ""},
+		{"KeyUsageDecipherOnly", Const, 0, ""},
+		{"KeyUsageDigitalSignature", Const, 0, ""},
+		{"KeyUsageEncipherOnly", Const, 0, ""},
+		{"KeyUsageKeyAgreement", Const, 0, ""},
+		{"KeyUsageKeyEncipherment", Const, 0, ""},
+		{"MD2WithRSA", Const, 0, ""},
+		{"MD5WithRSA", Const, 0, ""},
+		{"MarshalECPrivateKey", Func, 2, "func(key *ecdsa.PrivateKey) ([]byte, error)"},
+		{"MarshalPKCS1PrivateKey", Func, 0, "func(key *rsa.PrivateKey) []byte"},
+		{"MarshalPKCS1PublicKey", Func, 10, "func(key *rsa.PublicKey) []byte"},
+		{"MarshalPKCS8PrivateKey", Func, 10, "func(key any) ([]byte, error)"},
+		{"MarshalPKIXPublicKey", Func, 0, "func(pub any) ([]byte, error)"},
+		{"NameConstraintsWithoutSANs", Const, 10, ""},
+		{"NameMismatch", Const, 8, ""},
+		{"NewCertPool", Func, 0, "func() *CertPool"},
+		{"NoValidChains", Const, 24, ""},
+		{"NotAuthorizedToSign", Const, 0, ""},
+		{"OID", Type, 22, ""},
+		{"OIDFromInts", Func, 22, "func(oid []uint64) (OID, error)"},
+		{"PEMCipher", Type, 1, ""},
+		{"PEMCipher3DES", Const, 1, ""},
+		{"PEMCipherAES128", Const, 1, ""},
+		{"PEMCipherAES192", Const, 1, ""},
+		{"PEMCipherAES256", Const, 1, ""},
+		{"PEMCipherDES", Const, 1, ""},
+		{"ParseCRL", Func, 0, "func(crlBytes []byte) (*pkix.CertificateList, error)"},
+		{"ParseCertificate", Func, 0, "func(der []byte) (*Certificate, error)"},
+		{"ParseCertificateRequest", Func, 3, "func(asn1Data []byte) (*CertificateRequest, error)"},
+		{"ParseCertificates", Func, 0, "func(der []byte) ([]*Certificate, error)"},
+		{"ParseDERCRL", Func, 0, "func(derBytes []byte) (*pkix.CertificateList, error)"},
+		{"ParseECPrivateKey", Func, 1, "func(der []byte) (*ecdsa.PrivateKey, error)"},
+		{"ParseOID", Func, 23, "func(oid string) (OID, error)"},
+		{"ParsePKCS1PrivateKey", Func, 0, "func(der []byte) (*rsa.PrivateKey, error)"},
+		{"ParsePKCS1PublicKey", Func, 10, "func(der []byte) (*rsa.PublicKey, error)"},
+		{"ParsePKCS8PrivateKey", Func, 0, "func(der []byte) (key any, err error)"},
+		{"ParsePKIXPublicKey", Func, 0, "func(derBytes []byte) (pub any, err error)"},
+		{"ParseRevocationList", Func, 19, "func(der []byte) (*RevocationList, error)"},
+		{"PolicyMapping", Type, 24, ""},
+		{"PolicyMapping.IssuerDomainPolicy", Field, 24, ""},
+		{"PolicyMapping.SubjectDomainPolicy", Field, 24, ""},
+		{"PublicKeyAlgorithm", Type, 0, ""},
+		{"PureEd25519", Const, 13, ""},
+		{"RSA", Const, 0, ""},
+		{"RevocationList", Type, 15, ""},
+		{"RevocationList.AuthorityKeyId", Field, 19, ""},
+		{"RevocationList.Extensions", Field, 19, ""},
+		{"RevocationList.ExtraExtensions", Field, 15, ""},
+		{"RevocationList.Issuer", Field, 19, ""},
+		{"RevocationList.NextUpdate", Field, 15, ""},
+		{"RevocationList.Number", Field, 15, ""},
+		{"RevocationList.Raw", Field, 19, ""},
+		{"RevocationList.RawIssuer", Field, 19, ""},
+		{"RevocationList.RawTBSRevocationList", Field, 19, ""},
+		{"RevocationList.RevokedCertificateEntries", Field, 21, ""},
+		{"RevocationList.RevokedCertificates", Field, 15, ""},
+		{"RevocationList.Signature", Field, 19, ""},
+		{"RevocationList.SignatureAlgorithm", Field, 15, ""},
+		{"RevocationList.ThisUpdate", Field, 15, ""},
+		{"RevocationListEntry", Type, 21, ""},
+		{"RevocationListEntry.Extensions", Field, 21, ""},
+		{"RevocationListEntry.ExtraExtensions", Field, 21, ""},
+		{"RevocationListEntry.Raw", Field, 21, ""},
+		{"RevocationListEntry.ReasonCode", Field, 21, ""},
+		{"RevocationListEntry.RevocationTime", Field, 21, ""},
+		{"RevocationListEntry.SerialNumber", Field, 21, ""},
+		{"SHA1WithRSA", Const, 0, ""},
+		{"SHA256WithRSA", Const, 0, ""},
+		{"SHA256WithRSAPSS", Const, 8, ""},
+		{"SHA384WithRSA", Const, 0, ""},
+		{"SHA384WithRSAPSS", Const, 8, ""},
+		{"SHA512WithRSA", Const, 0, ""},
+		{"SHA512WithRSAPSS", Const, 8, ""},
+		{"SetFallbackRoots", Func, 20, "func(roots *CertPool)"},
+		{"SignatureAlgorithm", Type, 0, ""},
+		{"SystemCertPool", Func, 7, "func() (*CertPool, error)"},
+		{"SystemRootsError", Type, 1, ""},
+		{"SystemRootsError.Err", Field, 7, ""},
+		{"TooManyConstraints", Const, 10, ""},
+		{"TooManyIntermediates", Const, 0, ""},
+		{"UnconstrainedName", Const, 10, ""},
+		{"UnhandledCriticalExtension", Type, 0, ""},
+		{"UnknownAuthorityError", Type, 0, ""},
+		{"UnknownAuthorityError.Cert", Field, 8, ""},
+		{"UnknownPublicKeyAlgorithm", Const, 0, ""},
+		{"UnknownSignatureAlgorithm", Const, 0, ""},
+		{"VerifyOptions", Type, 0, ""},
+		{"VerifyOptions.CertificatePolicies", Field, 24, ""},
+		{"VerifyOptions.CurrentTime", Field, 0, ""},
+		{"VerifyOptions.DNSName", Field, 0, ""},
+		{"VerifyOptions.Intermediates", Field, 0, ""},
+		{"VerifyOptions.KeyUsages", Field, 1, ""},
+		{"VerifyOptions.MaxConstraintComparisions", Field, 10, ""},
+		{"VerifyOptions.Roots", Field, 0, ""},
+	},
+	"crypto/x509/pkix": {
+		{"(*CertificateList).HasExpired", Method, 0, ""},
+		{"(*Name).FillFromRDNSequence", Method, 0, ""},
+		{"(Name).String", Method, 10, ""},
+		{"(Name).ToRDNSequence", Method, 0, ""},
+		{"(RDNSequence).String", Method, 10, ""},
+		{"AlgorithmIdentifier", Type, 0, ""},
+		{"AlgorithmIdentifier.Algorithm", Field, 0, ""},
+		{"AlgorithmIdentifier.Parameters", Field, 0, ""},
+		{"AttributeTypeAndValue", Type, 0, ""},
+		{"AttributeTypeAndValue.Type", Field, 0, ""},
+		{"AttributeTypeAndValue.Value", Field, 0, ""},
+		{"AttributeTypeAndValueSET", Type, 3, ""},
+		{"AttributeTypeAndValueSET.Type", Field, 3, ""},
+		{"AttributeTypeAndValueSET.Value", Field, 3, ""},
+		{"CertificateList", Type, 0, ""},
+		{"CertificateList.SignatureAlgorithm", Field, 0, ""},
+		{"CertificateList.SignatureValue", Field, 0, ""},
+		{"CertificateList.TBSCertList", Field, 0, ""},
+		{"Extension", Type, 0, ""},
+		{"Extension.Critical", Field, 0, ""},
+		{"Extension.Id", Field, 0, ""},
+		{"Extension.Value", Field, 0, ""},
+		{"Name", Type, 0, ""},
+		{"Name.CommonName", Field, 0, ""},
+		{"Name.Country", Field, 0, ""},
+		{"Name.ExtraNames", Field, 5, ""},
+		{"Name.Locality", Field, 0, ""},
+		{"Name.Names", Field, 0, ""},
+		{"Name.Organization", Field, 0, ""},
+		{"Name.OrganizationalUnit", Field, 0, ""},
+		{"Name.PostalCode", Field, 0, ""},
+		{"Name.Province", Field, 0, ""},
+		{"Name.SerialNumber", Field, 0, ""},
+		{"Name.StreetAddress", Field, 0, ""},
+		{"RDNSequence", Type, 0, ""},
+		{"RelativeDistinguishedNameSET", Type, 0, ""},
+		{"RevokedCertificate", Type, 0, ""},
+		{"RevokedCertificate.Extensions", Field, 0, ""},
+		{"RevokedCertificate.RevocationTime", Field, 0, ""},
+		{"RevokedCertificate.SerialNumber", Field, 0, ""},
+		{"TBSCertificateList", Type, 0, ""},
+		{"TBSCertificateList.Extensions", Field, 0, ""},
+		{"TBSCertificateList.Issuer", Field, 0, ""},
+		{"TBSCertificateList.NextUpdate", Field, 0, ""},
+		{"TBSCertificateList.Raw", Field, 0, ""},
+		{"TBSCertificateList.RevokedCertificates", Field, 0, ""},
+		{"TBSCertificateList.Signature", Field, 0, ""},
+		{"TBSCertificateList.ThisUpdate", Field, 0, ""},
+		{"TBSCertificateList.Version", Field, 0, ""},
+	},
+	"database/sql": {
+		{"(*ColumnType).DatabaseTypeName", Method, 8, ""},
+		{"(*ColumnType).DecimalSize", Method, 8, ""},
+		{"(*ColumnType).Length", Method, 8, ""},
+		{"(*ColumnType).Name", Method, 8, ""},
+		{"(*ColumnType).Nullable", Method, 8, ""},
+		{"(*ColumnType).ScanType", Method, 8, ""},
+		{"(*Conn).BeginTx", Method, 9, ""},
+		{"(*Conn).Close", Method, 9, ""},
+		{"(*Conn).ExecContext", Method, 9, ""},
+		{"(*Conn).PingContext", Method, 9, ""},
+		{"(*Conn).PrepareContext", Method, 9, ""},
+		{"(*Conn).QueryContext", Method, 9, ""},
+		{"(*Conn).QueryRowContext", Method, 9, ""},
+		{"(*Conn).Raw", Method, 13, ""},
+		{"(*DB).Begin", Method, 0, ""},
+		{"(*DB).BeginTx", Method, 8, ""},
+		{"(*DB).Close", Method, 0, ""},
+		{"(*DB).Conn", Method, 9, ""},
+		{"(*DB).Driver", Method, 0, ""},
+		{"(*DB).Exec", Method, 0, ""},
+		{"(*DB).ExecContext", Method, 8, ""},
+		{"(*DB).Ping", Method, 1, ""},
+		{"(*DB).PingContext", Method, 8, ""},
+		{"(*DB).Prepare", Method, 0, ""},
+		{"(*DB).PrepareContext", Method, 8, ""},
+		{"(*DB).Query", Method, 0, ""},
+		{"(*DB).QueryContext", Method, 8, ""},
+		{"(*DB).QueryRow", Method, 0, ""},
+		{"(*DB).QueryRowContext", Method, 8, ""},
+		{"(*DB).SetConnMaxIdleTime", Method, 15, ""},
+		{"(*DB).SetConnMaxLifetime", Method, 6, ""},
+		{"(*DB).SetMaxIdleConns", Method, 1, ""},
+		{"(*DB).SetMaxOpenConns", Method, 2, ""},
+		{"(*DB).Stats", Method, 5, ""},
+		{"(*Null).Scan", Method, 22, ""},
+		{"(*NullBool).Scan", Method, 0, ""},
+		{"(*NullByte).Scan", Method, 17, ""},
+		{"(*NullFloat64).Scan", Method, 0, ""},
+		{"(*NullInt16).Scan", Method, 17, ""},
+		{"(*NullInt32).Scan", Method, 13, ""},
+		{"(*NullInt64).Scan", Method, 0, ""},
+		{"(*NullString).Scan", Method, 0, ""},
+		{"(*NullTime).Scan", Method, 13, ""},
+		{"(*Row).Err", Method, 15, ""},
+		{"(*Row).Scan", Method, 0, ""},
+		{"(*Rows).Close", Method, 0, ""},
+		{"(*Rows).ColumnTypes", Method, 8, ""},
+		{"(*Rows).Columns", Method, 0, ""},
+		{"(*Rows).Err", Method, 0, ""},
+		{"(*Rows).Next", Method, 0, ""},
+		{"(*Rows).NextResultSet", Method, 8, ""},
+		{"(*Rows).Scan", Method, 0, ""},
+		{"(*Stmt).Close", Method, 0, ""},
+		{"(*Stmt).Exec", Method, 0, ""},
+		{"(*Stmt).ExecContext", Method, 8, ""},
+		{"(*Stmt).Query", Method, 0, ""},
+		{"(*Stmt).QueryContext", Method, 8, ""},
+		{"(*Stmt).QueryRow", Method, 0, ""},
+		{"(*Stmt).QueryRowContext", Method, 8, ""},
+		{"(*Tx).Commit", Method, 0, ""},
+		{"(*Tx).Exec", Method, 0, ""},
+		{"(*Tx).ExecContext", Method, 8, ""},
+		{"(*Tx).Prepare", Method, 0, ""},
+		{"(*Tx).PrepareContext", Method, 8, ""},
+		{"(*Tx).Query", Method, 0, ""},
+		{"(*Tx).QueryContext", Method, 8, ""},
+		{"(*Tx).QueryRow", Method, 0, ""},
+		{"(*Tx).QueryRowContext", Method, 8, ""},
+		{"(*Tx).Rollback", Method, 0, ""},
+		{"(*Tx).Stmt", Method, 0, ""},
+		{"(*Tx).StmtContext", Method, 8, ""},
+		{"(IsolationLevel).String", Method, 11, ""},
+		{"(Null).Value", Method, 22, ""},
+		{"(NullBool).Value", Method, 0, ""},
+		{"(NullByte).Value", Method, 17, ""},
+		{"(NullFloat64).Value", Method, 0, ""},
+		{"(NullInt16).Value", Method, 17, ""},
+		{"(NullInt32).Value", Method, 13, ""},
+		{"(NullInt64).Value", Method, 0, ""},
+		{"(NullString).Value", Method, 0, ""},
+		{"(NullTime).Value", Method, 13, ""},
+		{"ColumnType", Type, 8, ""},
+		{"Conn", Type, 9, ""},
+		{"DB", Type, 0, ""},
+		{"DBStats", Type, 5, ""},
+		{"DBStats.Idle", Field, 11, ""},
+		{"DBStats.InUse", Field, 11, ""},
+		{"DBStats.MaxIdleClosed", Field, 11, ""},
+		{"DBStats.MaxIdleTimeClosed", Field, 15, ""},
+		{"DBStats.MaxLifetimeClosed", Field, 11, ""},
+		{"DBStats.MaxOpenConnections", Field, 11, ""},
+		{"DBStats.OpenConnections", Field, 5, ""},
+		{"DBStats.WaitCount", Field, 11, ""},
+		{"DBStats.WaitDuration", Field, 11, ""},
+		{"Drivers", Func, 4, "func() []string"},
+		{"ErrConnDone", Var, 9, ""},
+		{"ErrNoRows", Var, 0, ""},
+		{"ErrTxDone", Var, 0, ""},
+		{"IsolationLevel", Type, 8, ""},
+		{"LevelDefault", Const, 8, ""},
+		{"LevelLinearizable", Const, 8, ""},
+		{"LevelReadCommitted", Const, 8, ""},
+		{"LevelReadUncommitted", Const, 8, ""},
+		{"LevelRepeatableRead", Const, 8, ""},
+		{"LevelSerializable", Const, 8, ""},
+		{"LevelSnapshot", Const, 8, ""},
+		{"LevelWriteCommitted", Const, 8, ""},
+		{"Named", Func, 8, "func(name string, value any) NamedArg"},
+		{"NamedArg", Type, 8, ""},
+		{"NamedArg.Name", Field, 8, ""},
+		{"NamedArg.Value", Field, 8, ""},
+		{"Null", Type, 22, ""},
+		{"Null.V", Field, 22, ""},
+		{"Null.Valid", Field, 22, ""},
+		{"NullBool", Type, 0, ""},
+		{"NullBool.Bool", Field, 0, ""},
+		{"NullBool.Valid", Field, 0, ""},
+		{"NullByte", Type, 17, ""},
+		{"NullByte.Byte", Field, 17, ""},
+		{"NullByte.Valid", Field, 17, ""},
+		{"NullFloat64", Type, 0, ""},
+		{"NullFloat64.Float64", Field, 0, ""},
+		{"NullFloat64.Valid", Field, 0, ""},
+		{"NullInt16", Type, 17, ""},
+		{"NullInt16.Int16", Field, 17, ""},
+		{"NullInt16.Valid", Field, 17, ""},
+		{"NullInt32", Type, 13, ""},
+		{"NullInt32.Int32", Field, 13, ""},
+		{"NullInt32.Valid", Field, 13, ""},
+		{"NullInt64", Type, 0, ""},
+		{"NullInt64.Int64", Field, 0, ""},
+		{"NullInt64.Valid", Field, 0, ""},
+		{"NullString", Type, 0, ""},
+		{"NullString.String", Field, 0, ""},
+		{"NullString.Valid", Field, 0, ""},
+		{"NullTime", Type, 13, ""},
+		{"NullTime.Time", Field, 13, ""},
+		{"NullTime.Valid", Field, 13, ""},
+		{"Open", Func, 0, "func(driverName string, dataSourceName string) (*DB, error)"},
+		{"OpenDB", Func, 10, "func(c driver.Connector) *DB"},
+		{"Out", Type, 9, ""},
+		{"Out.Dest", Field, 9, ""},
+		{"Out.In", Field, 9, ""},
+		{"RawBytes", Type, 0, ""},
+		{"Register", Func, 0, "func(name string, driver driver.Driver)"},
+		{"Result", Type, 0, ""},
+		{"Row", Type, 0, ""},
+		{"Rows", Type, 0, ""},
+		{"Scanner", Type, 0, ""},
+		{"Stmt", Type, 0, ""},
+		{"Tx", Type, 0, ""},
+		{"TxOptions", Type, 8, ""},
+		{"TxOptions.Isolation", Field, 8, ""},
+		{"TxOptions.ReadOnly", Field, 8, ""},
+	},
+	"database/sql/driver": {
+		{"(NotNull).ConvertValue", Method, 0, ""},
+		{"(Null).ConvertValue", Method, 0, ""},
+		{"(RowsAffected).LastInsertId", Method, 0, ""},
+		{"(RowsAffected).RowsAffected", Method, 0, ""},
+		{"Bool", Var, 0, ""},
+		{"ColumnConverter", Type, 0, ""},
+		{"Conn", Type, 0, ""},
+		{"ConnBeginTx", Type, 8, ""},
+		{"ConnPrepareContext", Type, 8, ""},
+		{"Connector", Type, 10, ""},
+		{"DefaultParameterConverter", Var, 0, ""},
+		{"Driver", Type, 0, ""},
+		{"DriverContext", Type, 10, ""},
+		{"ErrBadConn", Var, 0, ""},
+		{"ErrRemoveArgument", Var, 9, ""},
+		{"ErrSkip", Var, 0, ""},
+		{"Execer", Type, 0, ""},
+		{"ExecerContext", Type, 8, ""},
+		{"Int32", Var, 0, ""},
+		{"IsScanValue", Func, 0, "func(v any) bool"},
+		{"IsValue", Func, 0, "func(v any) bool"},
+		{"IsolationLevel", Type, 8, ""},
+		{"NamedValue", Type, 8, ""},
+		{"NamedValue.Name", Field, 8, ""},
+		{"NamedValue.Ordinal", Field, 8, ""},
+		{"NamedValue.Value", Field, 8, ""},
+		{"NamedValueChecker", Type, 9, ""},
+		{"NotNull", Type, 0, ""},
+		{"NotNull.Converter", Field, 0, ""},
+		{"Null", Type, 0, ""},
+		{"Null.Converter", Field, 0, ""},
+		{"Pinger", Type, 8, ""},
+		{"Queryer", Type, 1, ""},
+		{"QueryerContext", Type, 8, ""},
+		{"Result", Type, 0, ""},
+		{"ResultNoRows", Var, 0, ""},
+		{"Rows", Type, 0, ""},
+		{"RowsAffected", Type, 0, ""},
+		{"RowsColumnTypeDatabaseTypeName", Type, 8, ""},
+		{"RowsColumnTypeLength", Type, 8, ""},
+		{"RowsColumnTypeNullable", Type, 8, ""},
+		{"RowsColumnTypePrecisionScale", Type, 8, ""},
+		{"RowsColumnTypeScanType", Type, 8, ""},
+		{"RowsNextResultSet", Type, 8, ""},
+		{"SessionResetter", Type, 10, ""},
+		{"Stmt", Type, 0, ""},
+		{"StmtExecContext", Type, 8, ""},
+		{"StmtQueryContext", Type, 8, ""},
+		{"String", Var, 0, ""},
+		{"Tx", Type, 0, ""},
+		{"TxOptions", Type, 8, ""},
+		{"TxOptions.Isolation", Field, 8, ""},
+		{"TxOptions.ReadOnly", Field, 8, ""},
+		{"Validator", Type, 15, ""},
+		{"Value", Type, 0, ""},
+		{"ValueConverter", Type, 0, ""},
+		{"Valuer", Type, 0, ""},
+	},
+	"debug/buildinfo": {
+		{"BuildInfo", Type, 18, ""},
+		{"Read", Func, 18, "func(r io.ReaderAt) (*BuildInfo, error)"},
+		{"ReadFile", Func, 18, "func(name string) (info *BuildInfo, err error)"},
+	},
+	"debug/dwarf": {
+		{"(*AddrType).Basic", Method, 0, ""},
+		{"(*AddrType).Common", Method, 0, ""},
+		{"(*AddrType).Size", Method, 0, ""},
+		{"(*AddrType).String", Method, 0, ""},
+		{"(*ArrayType).Common", Method, 0, ""},
+		{"(*ArrayType).Size", Method, 0, ""},
+		{"(*ArrayType).String", Method, 0, ""},
+		{"(*BasicType).Basic", Method, 0, ""},
+		{"(*BasicType).Common", Method, 0, ""},
+		{"(*BasicType).Size", Method, 0, ""},
+		{"(*BasicType).String", Method, 0, ""},
+		{"(*BoolType).Basic", Method, 0, ""},
+		{"(*BoolType).Common", Method, 0, ""},
+		{"(*BoolType).Size", Method, 0, ""},
+		{"(*BoolType).String", Method, 0, ""},
+		{"(*CharType).Basic", Method, 0, ""},
+		{"(*CharType).Common", Method, 0, ""},
+		{"(*CharType).Size", Method, 0, ""},
+		{"(*CharType).String", Method, 0, ""},
+		{"(*CommonType).Common", Method, 0, ""},
+		{"(*CommonType).Size", Method, 0, ""},
+		{"(*ComplexType).Basic", Method, 0, ""},
+		{"(*ComplexType).Common", Method, 0, ""},
+		{"(*ComplexType).Size", Method, 0, ""},
+		{"(*ComplexType).String", Method, 0, ""},
+		{"(*Data).AddSection", Method, 14, ""},
+		{"(*Data).AddTypes", Method, 3, ""},
+		{"(*Data).LineReader", Method, 5, ""},
+		{"(*Data).Ranges", Method, 7, ""},
+		{"(*Data).Reader", Method, 0, ""},
+		{"(*Data).Type", Method, 0, ""},
+		{"(*DotDotDotType).Common", Method, 0, ""},
+		{"(*DotDotDotType).Size", Method, 0, ""},
+		{"(*DotDotDotType).String", Method, 0, ""},
+		{"(*Entry).AttrField", Method, 5, ""},
+		{"(*Entry).Val", Method, 0, ""},
+		{"(*EnumType).Common", Method, 0, ""},
+		{"(*EnumType).Size", Method, 0, ""},
+		{"(*EnumType).String", Method, 0, ""},
+		{"(*FloatType).Basic", Method, 0, ""},
+		{"(*FloatType).Common", Method, 0, ""},
+		{"(*FloatType).Size", Method, 0, ""},
+		{"(*FloatType).String", Method, 0, ""},
+		{"(*FuncType).Common", Method, 0, ""},
+		{"(*FuncType).Size", Method, 0, ""},
+		{"(*FuncType).String", Method, 0, ""},
+		{"(*IntType).Basic", Method, 0, ""},
+		{"(*IntType).Common", Method, 0, ""},
+		{"(*IntType).Size", Method, 0, ""},
+		{"(*IntType).String", Method, 0, ""},
+		{"(*LineReader).Files", Method, 14, ""},
+		{"(*LineReader).Next", Method, 5, ""},
+		{"(*LineReader).Reset", Method, 5, ""},
+		{"(*LineReader).Seek", Method, 5, ""},
+		{"(*LineReader).SeekPC", Method, 5, ""},
+		{"(*LineReader).Tell", Method, 5, ""},
+		{"(*PtrType).Common", Method, 0, ""},
+		{"(*PtrType).Size", Method, 0, ""},
+		{"(*PtrType).String", Method, 0, ""},
+		{"(*QualType).Common", Method, 0, ""},
+		{"(*QualType).Size", Method, 0, ""},
+		{"(*QualType).String", Method, 0, ""},
+		{"(*Reader).AddressSize", Method, 5, ""},
+		{"(*Reader).ByteOrder", Method, 14, ""},
+		{"(*Reader).Next", Method, 0, ""},
+		{"(*Reader).Seek", Method, 0, ""},
+		{"(*Reader).SeekPC", Method, 7, ""},
+		{"(*Reader).SkipChildren", Method, 0, ""},
+		{"(*StructType).Common", Method, 0, ""},
+		{"(*StructType).Defn", Method, 0, ""},
+		{"(*StructType).Size", Method, 0, ""},
+		{"(*StructType).String", Method, 0, ""},
+		{"(*TypedefType).Common", Method, 0, ""},
+		{"(*TypedefType).Size", Method, 0, ""},
+		{"(*TypedefType).String", Method, 0, ""},
+		{"(*UcharType).Basic", Method, 0, ""},
+		{"(*UcharType).Common", Method, 0, ""},
+		{"(*UcharType).Size", Method, 0, ""},
+		{"(*UcharType).String", Method, 0, ""},
+		{"(*UintType).Basic", Method, 0, ""},
+		{"(*UintType).Common", Method, 0, ""},
+		{"(*UintType).Size", Method, 0, ""},
+		{"(*UintType).String", Method, 0, ""},
+		{"(*UnspecifiedType).Basic", Method, 4, ""},
+		{"(*UnspecifiedType).Common", Method, 4, ""},
+		{"(*UnspecifiedType).Size", Method, 4, ""},
+		{"(*UnspecifiedType).String", Method, 4, ""},
+		{"(*UnsupportedType).Common", Method, 13, ""},
+		{"(*UnsupportedType).Size", Method, 13, ""},
+		{"(*UnsupportedType).String", Method, 13, ""},
+		{"(*VoidType).Common", Method, 0, ""},
+		{"(*VoidType).Size", Method, 0, ""},
+		{"(*VoidType).String", Method, 0, ""},
+		{"(Attr).GoString", Method, 0, ""},
+		{"(Attr).String", Method, 0, ""},
+		{"(Class).GoString", Method, 5, ""},
+		{"(Class).String", Method, 5, ""},
+		{"(DecodeError).Error", Method, 0, ""},
+		{"(Tag).GoString", Method, 0, ""},
+		{"(Tag).String", Method, 0, ""},
+		{"AddrType", Type, 0, ""},
+		{"AddrType.BasicType", Field, 0, ""},
+		{"ArrayType", Type, 0, ""},
+		{"ArrayType.CommonType", Field, 0, ""},
+		{"ArrayType.Count", Field, 0, ""},
+		{"ArrayType.StrideBitSize", Field, 0, ""},
+		{"ArrayType.Type", Field, 0, ""},
+		{"Attr", Type, 0, ""},
+		{"AttrAbstractOrigin", Const, 0, ""},
+		{"AttrAccessibility", Const, 0, ""},
+		{"AttrAddrBase", Const, 14, ""},
+		{"AttrAddrClass", Const, 0, ""},
+		{"AttrAlignment", Const, 14, ""},
+		{"AttrAllocated", Const, 0, ""},
+		{"AttrArtificial", Const, 0, ""},
+		{"AttrAssociated", Const, 0, ""},
+		{"AttrBaseTypes", Const, 0, ""},
+		{"AttrBinaryScale", Const, 14, ""},
+		{"AttrBitOffset", Const, 0, ""},
+		{"AttrBitSize", Const, 0, ""},
+		{"AttrByteSize", Const, 0, ""},
+		{"AttrCallAllCalls", Const, 14, ""},
+		{"AttrCallAllSourceCalls", Const, 14, ""},
+		{"AttrCallAllTailCalls", Const, 14, ""},
+		{"AttrCallColumn", Const, 0, ""},
+		{"AttrCallDataLocation", Const, 14, ""},
+		{"AttrCallDataValue", Const, 14, ""},
+		{"AttrCallFile", Const, 0, ""},
+		{"AttrCallLine", Const, 0, ""},
+		{"AttrCallOrigin", Const, 14, ""},
+		{"AttrCallPC", Const, 14, ""},
+		{"AttrCallParameter", Const, 14, ""},
+		{"AttrCallReturnPC", Const, 14, ""},
+		{"AttrCallTailCall", Const, 14, ""},
+		{"AttrCallTarget", Const, 14, ""},
+		{"AttrCallTargetClobbered", Const, 14, ""},
+		{"AttrCallValue", Const, 14, ""},
+		{"AttrCalling", Const, 0, ""},
+		{"AttrCommonRef", Const, 0, ""},
+		{"AttrCompDir", Const, 0, ""},
+		{"AttrConstExpr", Const, 14, ""},
+		{"AttrConstValue", Const, 0, ""},
+		{"AttrContainingType", Const, 0, ""},
+		{"AttrCount", Const, 0, ""},
+		{"AttrDataBitOffset", Const, 14, ""},
+		{"AttrDataLocation", Const, 0, ""},
+		{"AttrDataMemberLoc", Const, 0, ""},
+		{"AttrDecimalScale", Const, 14, ""},
+		{"AttrDecimalSign", Const, 14, ""},
+		{"AttrDeclColumn", Const, 0, ""},
+		{"AttrDeclFile", Const, 0, ""},
+		{"AttrDeclLine", Const, 0, ""},
+		{"AttrDeclaration", Const, 0, ""},
+		{"AttrDefaultValue", Const, 0, ""},
+		{"AttrDefaulted", Const, 14, ""},
+		{"AttrDeleted", Const, 14, ""},
+		{"AttrDescription", Const, 0, ""},
+		{"AttrDigitCount", Const, 14, ""},
+		{"AttrDiscr", Const, 0, ""},
+		{"AttrDiscrList", Const, 0, ""},
+		{"AttrDiscrValue", Const, 0, ""},
+		{"AttrDwoName", Const, 14, ""},
+		{"AttrElemental", Const, 14, ""},
+		{"AttrEncoding", Const, 0, ""},
+		{"AttrEndianity", Const, 14, ""},
+		{"AttrEntrypc", Const, 0, ""},
+		{"AttrEnumClass", Const, 14, ""},
+		{"AttrExplicit", Const, 14, ""},
+		{"AttrExportSymbols", Const, 14, ""},
+		{"AttrExtension", Const, 0, ""},
+		{"AttrExternal", Const, 0, ""},
+		{"AttrFrameBase", Const, 0, ""},
+		{"AttrFriend", Const, 0, ""},
+		{"AttrHighpc", Const, 0, ""},
+		{"AttrIdentifierCase", Const, 0, ""},
+		{"AttrImport", Const, 0, ""},
+		{"AttrInline", Const, 0, ""},
+		{"AttrIsOptional", Const, 0, ""},
+		{"AttrLanguage", Const, 0, ""},
+		{"AttrLinkageName", Const, 14, ""},
+		{"AttrLocation", Const, 0, ""},
+		{"AttrLoclistsBase", Const, 14, ""},
+		{"AttrLowerBound", Const, 0, ""},
+		{"AttrLowpc", Const, 0, ""},
+		{"AttrMacroInfo", Const, 0, ""},
+		{"AttrMacros", Const, 14, ""},
+		{"AttrMainSubprogram", Const, 14, ""},
+		{"AttrMutable", Const, 14, ""},
+		{"AttrName", Const, 0, ""},
+		{"AttrNamelistItem", Const, 0, ""},
+		{"AttrNoreturn", Const, 14, ""},
+		{"AttrObjectPointer", Const, 14, ""},
+		{"AttrOrdering", Const, 0, ""},
+		{"AttrPictureString", Const, 14, ""},
+		{"AttrPriority", Const, 0, ""},
+		{"AttrProducer", Const, 0, ""},
+		{"AttrPrototyped", Const, 0, ""},
+		{"AttrPure", Const, 14, ""},
+		{"AttrRanges", Const, 0, ""},
+		{"AttrRank", Const, 14, ""},
+		{"AttrRecursive", Const, 14, ""},
+		{"AttrReference", Const, 14, ""},
+		{"AttrReturnAddr", Const, 0, ""},
+		{"AttrRnglistsBase", Const, 14, ""},
+		{"AttrRvalueReference", Const, 14, ""},
+		{"AttrSegment", Const, 0, ""},
+		{"AttrSibling", Const, 0, ""},
+		{"AttrSignature", Const, 14, ""},
+		{"AttrSmall", Const, 14, ""},
+		{"AttrSpecification", Const, 0, ""},
+		{"AttrStartScope", Const, 0, ""},
+		{"AttrStaticLink", Const, 0, ""},
+		{"AttrStmtList", Const, 0, ""},
+		{"AttrStrOffsetsBase", Const, 14, ""},
+		{"AttrStride", Const, 0, ""},
+		{"AttrStrideSize", Const, 0, ""},
+		{"AttrStringLength", Const, 0, ""},
+		{"AttrStringLengthBitSize", Const, 14, ""},
+		{"AttrStringLengthByteSize", Const, 14, ""},
+		{"AttrThreadsScaled", Const, 14, ""},
+		{"AttrTrampoline", Const, 0, ""},
+		{"AttrType", Const, 0, ""},
+		{"AttrUpperBound", Const, 0, ""},
+		{"AttrUseLocation", Const, 0, ""},
+		{"AttrUseUTF8", Const, 0, ""},
+		{"AttrVarParam", Const, 0, ""},
+		{"AttrVirtuality", Const, 0, ""},
+		{"AttrVisibility", Const, 0, ""},
+		{"AttrVtableElemLoc", Const, 0, ""},
+		{"BasicType", Type, 0, ""},
+		{"BasicType.BitOffset", Field, 0, ""},
+		{"BasicType.BitSize", Field, 0, ""},
+		{"BasicType.CommonType", Field, 0, ""},
+		{"BasicType.DataBitOffset", Field, 18, ""},
+		{"BoolType", Type, 0, ""},
+		{"BoolType.BasicType", Field, 0, ""},
+		{"CharType", Type, 0, ""},
+		{"CharType.BasicType", Field, 0, ""},
+		{"Class", Type, 5, ""},
+		{"ClassAddrPtr", Const, 14, ""},
+		{"ClassAddress", Const, 5, ""},
+		{"ClassBlock", Const, 5, ""},
+		{"ClassConstant", Const, 5, ""},
+		{"ClassExprLoc", Const, 5, ""},
+		{"ClassFlag", Const, 5, ""},
+		{"ClassLinePtr", Const, 5, ""},
+		{"ClassLocList", Const, 14, ""},
+		{"ClassLocListPtr", Const, 5, ""},
+		{"ClassMacPtr", Const, 5, ""},
+		{"ClassRangeListPtr", Const, 5, ""},
+		{"ClassReference", Const, 5, ""},
+		{"ClassReferenceAlt", Const, 5, ""},
+		{"ClassReferenceSig", Const, 5, ""},
+		{"ClassRngList", Const, 14, ""},
+		{"ClassRngListsPtr", Const, 14, ""},
+		{"ClassStrOffsetsPtr", Const, 14, ""},
+		{"ClassString", Const, 5, ""},
+		{"ClassStringAlt", Const, 5, ""},
+		{"ClassUnknown", Const, 6, ""},
+		{"CommonType", Type, 0, ""},
+		{"CommonType.ByteSize", Field, 0, ""},
+		{"CommonType.Name", Field, 0, ""},
+		{"ComplexType", Type, 0, ""},
+		{"ComplexType.BasicType", Field, 0, ""},
+		{"Data", Type, 0, ""},
+		{"DecodeError", Type, 0, ""},
+		{"DecodeError.Err", Field, 0, ""},
+		{"DecodeError.Name", Field, 0, ""},
+		{"DecodeError.Offset", Field, 0, ""},
+		{"DotDotDotType", Type, 0, ""},
+		{"DotDotDotType.CommonType", Field, 0, ""},
+		{"Entry", Type, 0, ""},
+		{"Entry.Children", Field, 0, ""},
+		{"Entry.Field", Field, 0, ""},
+		{"Entry.Offset", Field, 0, ""},
+		{"Entry.Tag", Field, 0, ""},
+		{"EnumType", Type, 0, ""},
+		{"EnumType.CommonType", Field, 0, ""},
+		{"EnumType.EnumName", Field, 0, ""},
+		{"EnumType.Val", Field, 0, ""},
+		{"EnumValue", Type, 0, ""},
+		{"EnumValue.Name", Field, 0, ""},
+		{"EnumValue.Val", Field, 0, ""},
+		{"ErrUnknownPC", Var, 5, ""},
+		{"Field", Type, 0, ""},
+		{"Field.Attr", Field, 0, ""},
+		{"Field.Class", Field, 5, ""},
+		{"Field.Val", Field, 0, ""},
+		{"FloatType", Type, 0, ""},
+		{"FloatType.BasicType", Field, 0, ""},
+		{"FuncType", Type, 0, ""},
+		{"FuncType.CommonType", Field, 0, ""},
+		{"FuncType.ParamType", Field, 0, ""},
+		{"FuncType.ReturnType", Field, 0, ""},
+		{"IntType", Type, 0, ""},
+		{"IntType.BasicType", Field, 0, ""},
+		{"LineEntry", Type, 5, ""},
+		{"LineEntry.Address", Field, 5, ""},
+		{"LineEntry.BasicBlock", Field, 5, ""},
+		{"LineEntry.Column", Field, 5, ""},
+		{"LineEntry.Discriminator", Field, 5, ""},
+		{"LineEntry.EndSequence", Field, 5, ""},
+		{"LineEntry.EpilogueBegin", Field, 5, ""},
+		{"LineEntry.File", Field, 5, ""},
+		{"LineEntry.ISA", Field, 5, ""},
+		{"LineEntry.IsStmt", Field, 5, ""},
+		{"LineEntry.Line", Field, 5, ""},
+		{"LineEntry.OpIndex", Field, 5, ""},
+		{"LineEntry.PrologueEnd", Field, 5, ""},
+		{"LineFile", Type, 5, ""},
+		{"LineFile.Length", Field, 5, ""},
+		{"LineFile.Mtime", Field, 5, ""},
+		{"LineFile.Name", Field, 5, ""},
+		{"LineReader", Type, 5, ""},
+		{"LineReaderPos", Type, 5, ""},
+		{"New", Func, 0, "func(abbrev []byte, aranges []byte, frame []byte, info []byte, line []byte, pubnames []byte, ranges []byte, str []byte) (*Data, error)"},
+		{"Offset", Type, 0, ""},
+		{"PtrType", Type, 0, ""},
+		{"PtrType.CommonType", Field, 0, ""},
+		{"PtrType.Type", Field, 0, ""},
+		{"QualType", Type, 0, ""},
+		{"QualType.CommonType", Field, 0, ""},
+		{"QualType.Qual", Field, 0, ""},
+		{"QualType.Type", Field, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"StructField", Type, 0, ""},
+		{"StructField.BitOffset", Field, 0, ""},
+		{"StructField.BitSize", Field, 0, ""},
+		{"StructField.ByteOffset", Field, 0, ""},
+		{"StructField.ByteSize", Field, 0, ""},
+		{"StructField.DataBitOffset", Field, 18, ""},
+		{"StructField.Name", Field, 0, ""},
+		{"StructField.Type", Field, 0, ""},
+		{"StructType", Type, 0, ""},
+		{"StructType.CommonType", Field, 0, ""},
+		{"StructType.Field", Field, 0, ""},
+		{"StructType.Incomplete", Field, 0, ""},
+		{"StructType.Kind", Field, 0, ""},
+		{"StructType.StructName", Field, 0, ""},
+		{"Tag", Type, 0, ""},
+		{"TagAccessDeclaration", Const, 0, ""},
+		{"TagArrayType", Const, 0, ""},
+		{"TagAtomicType", Const, 14, ""},
+		{"TagBaseType", Const, 0, ""},
+		{"TagCallSite", Const, 14, ""},
+		{"TagCallSiteParameter", Const, 14, ""},
+		{"TagCatchDwarfBlock", Const, 0, ""},
+		{"TagClassType", Const, 0, ""},
+		{"TagCoarrayType", Const, 14, ""},
+		{"TagCommonDwarfBlock", Const, 0, ""},
+		{"TagCommonInclusion", Const, 0, ""},
+		{"TagCompileUnit", Const, 0, ""},
+		{"TagCondition", Const, 3, ""},
+		{"TagConstType", Const, 0, ""},
+		{"TagConstant", Const, 0, ""},
+		{"TagDwarfProcedure", Const, 0, ""},
+		{"TagDynamicType", Const, 14, ""},
+		{"TagEntryPoint", Const, 0, ""},
+		{"TagEnumerationType", Const, 0, ""},
+		{"TagEnumerator", Const, 0, ""},
+		{"TagFileType", Const, 0, ""},
+		{"TagFormalParameter", Const, 0, ""},
+		{"TagFriend", Const, 0, ""},
+		{"TagGenericSubrange", Const, 14, ""},
+		{"TagImmutableType", Const, 14, ""},
+		{"TagImportedDeclaration", Const, 0, ""},
+		{"TagImportedModule", Const, 0, ""},
+		{"TagImportedUnit", Const, 0, ""},
+		{"TagInheritance", Const, 0, ""},
+		{"TagInlinedSubroutine", Const, 0, ""},
+		{"TagInterfaceType", Const, 0, ""},
+		{"TagLabel", Const, 0, ""},
+		{"TagLexDwarfBlock", Const, 0, ""},
+		{"TagMember", Const, 0, ""},
+		{"TagModule", Const, 0, ""},
+		{"TagMutableType", Const, 0, ""},
+		{"TagNamelist", Const, 0, ""},
+		{"TagNamelistItem", Const, 0, ""},
+		{"TagNamespace", Const, 0, ""},
+		{"TagPackedType", Const, 0, ""},
+		{"TagPartialUnit", Const, 0, ""},
+		{"TagPointerType", Const, 0, ""},
+		{"TagPtrToMemberType", Const, 0, ""},
+		{"TagReferenceType", Const, 0, ""},
+		{"TagRestrictType", Const, 0, ""},
+		{"TagRvalueReferenceType", Const, 3, ""},
+		{"TagSetType", Const, 0, ""},
+		{"TagSharedType", Const, 3, ""},
+		{"TagSkeletonUnit", Const, 14, ""},
+		{"TagStringType", Const, 0, ""},
+		{"TagStructType", Const, 0, ""},
+		{"TagSubprogram", Const, 0, ""},
+		{"TagSubrangeType", Const, 0, ""},
+		{"TagSubroutineType", Const, 0, ""},
+		{"TagTemplateAlias", Const, 3, ""},
+		{"TagTemplateTypeParameter", Const, 0, ""},
+		{"TagTemplateValueParameter", Const, 0, ""},
+		{"TagThrownType", Const, 0, ""},
+		{"TagTryDwarfBlock", Const, 0, ""},
+		{"TagTypeUnit", Const, 3, ""},
+		{"TagTypedef", Const, 0, ""},
+		{"TagUnionType", Const, 0, ""},
+		{"TagUnspecifiedParameters", Const, 0, ""},
+		{"TagUnspecifiedType", Const, 0, ""},
+		{"TagVariable", Const, 0, ""},
+		{"TagVariant", Const, 0, ""},
+		{"TagVariantPart", Const, 0, ""},
+		{"TagVolatileType", Const, 0, ""},
+		{"TagWithStmt", Const, 0, ""},
+		{"Type", Type, 0, ""},
+		{"TypedefType", Type, 0, ""},
+		{"TypedefType.CommonType", Field, 0, ""},
+		{"TypedefType.Type", Field, 0, ""},
+		{"UcharType", Type, 0, ""},
+		{"UcharType.BasicType", Field, 0, ""},
+		{"UintType", Type, 0, ""},
+		{"UintType.BasicType", Field, 0, ""},
+		{"UnspecifiedType", Type, 4, ""},
+		{"UnspecifiedType.BasicType", Field, 4, ""},
+		{"UnsupportedType", Type, 13, ""},
+		{"UnsupportedType.CommonType", Field, 13, ""},
+		{"UnsupportedType.Tag", Field, 13, ""},
+		{"VoidType", Type, 0, ""},
+		{"VoidType.CommonType", Field, 0, ""},
+	},
+	"debug/elf": {
+		{"(*File).Close", Method, 0, ""},
+		{"(*File).DWARF", Method, 0, ""},
+		{"(*File).DynString", Method, 1, ""},
+		{"(*File).DynValue", Method, 21, ""},
+		{"(*File).DynamicSymbols", Method, 4, ""},
+		{"(*File).DynamicVersionNeeds", Method, 24, ""},
+		{"(*File).DynamicVersions", Method, 24, ""},
+		{"(*File).ImportedLibraries", Method, 0, ""},
+		{"(*File).ImportedSymbols", Method, 0, ""},
+		{"(*File).Section", Method, 0, ""},
+		{"(*File).SectionByType", Method, 0, ""},
+		{"(*File).Symbols", Method, 0, ""},
+		{"(*FormatError).Error", Method, 0, ""},
+		{"(*Prog).Open", Method, 0, ""},
+		{"(*Section).Data", Method, 0, ""},
+		{"(*Section).Open", Method, 0, ""},
+		{"(Class).GoString", Method, 0, ""},
+		{"(Class).String", Method, 0, ""},
+		{"(CompressionType).GoString", Method, 6, ""},
+		{"(CompressionType).String", Method, 6, ""},
+		{"(Data).GoString", Method, 0, ""},
+		{"(Data).String", Method, 0, ""},
+		{"(DynFlag).GoString", Method, 0, ""},
+		{"(DynFlag).String", Method, 0, ""},
+		{"(DynFlag1).GoString", Method, 21, ""},
+		{"(DynFlag1).String", Method, 21, ""},
+		{"(DynTag).GoString", Method, 0, ""},
+		{"(DynTag).String", Method, 0, ""},
+		{"(Machine).GoString", Method, 0, ""},
+		{"(Machine).String", Method, 0, ""},
+		{"(NType).GoString", Method, 0, ""},
+		{"(NType).String", Method, 0, ""},
+		{"(OSABI).GoString", Method, 0, ""},
+		{"(OSABI).String", Method, 0, ""},
+		{"(Prog).ReadAt", Method, 0, ""},
+		{"(ProgFlag).GoString", Method, 0, ""},
+		{"(ProgFlag).String", Method, 0, ""},
+		{"(ProgType).GoString", Method, 0, ""},
+		{"(ProgType).String", Method, 0, ""},
+		{"(R_386).GoString", Method, 0, ""},
+		{"(R_386).String", Method, 0, ""},
+		{"(R_390).GoString", Method, 7, ""},
+		{"(R_390).String", Method, 7, ""},
+		{"(R_AARCH64).GoString", Method, 4, ""},
+		{"(R_AARCH64).String", Method, 4, ""},
+		{"(R_ALPHA).GoString", Method, 0, ""},
+		{"(R_ALPHA).String", Method, 0, ""},
+		{"(R_ARM).GoString", Method, 0, ""},
+		{"(R_ARM).String", Method, 0, ""},
+		{"(R_LARCH).GoString", Method, 19, ""},
+		{"(R_LARCH).String", Method, 19, ""},
+		{"(R_MIPS).GoString", Method, 6, ""},
+		{"(R_MIPS).String", Method, 6, ""},
+		{"(R_PPC).GoString", Method, 0, ""},
+		{"(R_PPC).String", Method, 0, ""},
+		{"(R_PPC64).GoString", Method, 5, ""},
+		{"(R_PPC64).String", Method, 5, ""},
+		{"(R_RISCV).GoString", Method, 11, ""},
+		{"(R_RISCV).String", Method, 11, ""},
+		{"(R_SPARC).GoString", Method, 0, ""},
+		{"(R_SPARC).String", Method, 0, ""},
+		{"(R_X86_64).GoString", Method, 0, ""},
+		{"(R_X86_64).String", Method, 0, ""},
+		{"(Section).ReadAt", Method, 0, ""},
+		{"(SectionFlag).GoString", Method, 0, ""},
+		{"(SectionFlag).String", Method, 0, ""},
+		{"(SectionIndex).GoString", Method, 0, ""},
+		{"(SectionIndex).String", Method, 0, ""},
+		{"(SectionType).GoString", Method, 0, ""},
+		{"(SectionType).String", Method, 0, ""},
+		{"(SymBind).GoString", Method, 0, ""},
+		{"(SymBind).String", Method, 0, ""},
+		{"(SymType).GoString", Method, 0, ""},
+		{"(SymType).String", Method, 0, ""},
+		{"(SymVis).GoString", Method, 0, ""},
+		{"(SymVis).String", Method, 0, ""},
+		{"(Type).GoString", Method, 0, ""},
+		{"(Type).String", Method, 0, ""},
+		{"(Version).GoString", Method, 0, ""},
+		{"(Version).String", Method, 0, ""},
+		{"(VersionIndex).Index", Method, 24, ""},
+		{"(VersionIndex).IsHidden", Method, 24, ""},
+		{"ARM_MAGIC_TRAMP_NUMBER", Const, 0, ""},
+		{"COMPRESS_HIOS", Const, 6, ""},
+		{"COMPRESS_HIPROC", Const, 6, ""},
+		{"COMPRESS_LOOS", Const, 6, ""},
+		{"COMPRESS_LOPROC", Const, 6, ""},
+		{"COMPRESS_ZLIB", Const, 6, ""},
+		{"COMPRESS_ZSTD", Const, 21, ""},
+		{"Chdr32", Type, 6, ""},
+		{"Chdr32.Addralign", Field, 6, ""},
+		{"Chdr32.Size", Field, 6, ""},
+		{"Chdr32.Type", Field, 6, ""},
+		{"Chdr64", Type, 6, ""},
+		{"Chdr64.Addralign", Field, 6, ""},
+		{"Chdr64.Size", Field, 6, ""},
+		{"Chdr64.Type", Field, 6, ""},
+		{"Class", Type, 0, ""},
+		{"CompressionType", Type, 6, ""},
+		{"DF_1_CONFALT", Const, 21, ""},
+		{"DF_1_DIRECT", Const, 21, ""},
+		{"DF_1_DISPRELDNE", Const, 21, ""},
+		{"DF_1_DISPRELPND", Const, 21, ""},
+		{"DF_1_EDITED", Const, 21, ""},
+		{"DF_1_ENDFILTEE", Const, 21, ""},
+		{"DF_1_GLOBAL", Const, 21, ""},
+		{"DF_1_GLOBAUDIT", Const, 21, ""},
+		{"DF_1_GROUP", Const, 21, ""},
+		{"DF_1_IGNMULDEF", Const, 21, ""},
+		{"DF_1_INITFIRST", Const, 21, ""},
+		{"DF_1_INTERPOSE", Const, 21, ""},
+		{"DF_1_KMOD", Const, 21, ""},
+		{"DF_1_LOADFLTR", Const, 21, ""},
+		{"DF_1_NOCOMMON", Const, 21, ""},
+		{"DF_1_NODEFLIB", Const, 21, ""},
+		{"DF_1_NODELETE", Const, 21, ""},
+		{"DF_1_NODIRECT", Const, 21, ""},
+		{"DF_1_NODUMP", Const, 21, ""},
+		{"DF_1_NOHDR", Const, 21, ""},
+		{"DF_1_NOKSYMS", Const, 21, ""},
+		{"DF_1_NOOPEN", Const, 21, ""},
+		{"DF_1_NORELOC", Const, 21, ""},
+		{"DF_1_NOW", Const, 21, ""},
+		{"DF_1_ORIGIN", Const, 21, ""},
+		{"DF_1_PIE", Const, 21, ""},
+		{"DF_1_SINGLETON", Const, 21, ""},
+		{"DF_1_STUB", Const, 21, ""},
+		{"DF_1_SYMINTPOSE", Const, 21, ""},
+		{"DF_1_TRANS", Const, 21, ""},
+		{"DF_1_WEAKFILTER", Const, 21, ""},
+		{"DF_BIND_NOW", Const, 0, ""},
+		{"DF_ORIGIN", Const, 0, ""},
+		{"DF_STATIC_TLS", Const, 0, ""},
+		{"DF_SYMBOLIC", Const, 0, ""},
+		{"DF_TEXTREL", Const, 0, ""},
+		{"DT_ADDRRNGHI", Const, 16, ""},
+		{"DT_ADDRRNGLO", Const, 16, ""},
+		{"DT_AUDIT", Const, 16, ""},
+		{"DT_AUXILIARY", Const, 16, ""},
+		{"DT_BIND_NOW", Const, 0, ""},
+		{"DT_CHECKSUM", Const, 16, ""},
+		{"DT_CONFIG", Const, 16, ""},
+		{"DT_DEBUG", Const, 0, ""},
+		{"DT_DEPAUDIT", Const, 16, ""},
+		{"DT_ENCODING", Const, 0, ""},
+		{"DT_FEATURE", Const, 16, ""},
+		{"DT_FILTER", Const, 16, ""},
+		{"DT_FINI", Const, 0, ""},
+		{"DT_FINI_ARRAY", Const, 0, ""},
+		{"DT_FINI_ARRAYSZ", Const, 0, ""},
+		{"DT_FLAGS", Const, 0, ""},
+		{"DT_FLAGS_1", Const, 16, ""},
+		{"DT_GNU_CONFLICT", Const, 16, ""},
+		{"DT_GNU_CONFLICTSZ", Const, 16, ""},
+		{"DT_GNU_HASH", Const, 16, ""},
+		{"DT_GNU_LIBLIST", Const, 16, ""},
+		{"DT_GNU_LIBLISTSZ", Const, 16, ""},
+		{"DT_GNU_PRELINKED", Const, 16, ""},
+		{"DT_HASH", Const, 0, ""},
+		{"DT_HIOS", Const, 0, ""},
+		{"DT_HIPROC", Const, 0, ""},
+		{"DT_INIT", Const, 0, ""},
+		{"DT_INIT_ARRAY", Const, 0, ""},
+		{"DT_INIT_ARRAYSZ", Const, 0, ""},
+		{"DT_JMPREL", Const, 0, ""},
+		{"DT_LOOS", Const, 0, ""},
+		{"DT_LOPROC", Const, 0, ""},
+		{"DT_MIPS_AUX_DYNAMIC", Const, 16, ""},
+		{"DT_MIPS_BASE_ADDRESS", Const, 16, ""},
+		{"DT_MIPS_COMPACT_SIZE", Const, 16, ""},
+		{"DT_MIPS_CONFLICT", Const, 16, ""},
+		{"DT_MIPS_CONFLICTNO", Const, 16, ""},
+		{"DT_MIPS_CXX_FLAGS", Const, 16, ""},
+		{"DT_MIPS_DELTA_CLASS", Const, 16, ""},
+		{"DT_MIPS_DELTA_CLASSSYM", Const, 16, ""},
+		{"DT_MIPS_DELTA_CLASSSYM_NO", Const, 16, ""},
+		{"DT_MIPS_DELTA_CLASS_NO", Const, 16, ""},
+		{"DT_MIPS_DELTA_INSTANCE", Const, 16, ""},
+		{"DT_MIPS_DELTA_INSTANCE_NO", Const, 16, ""},
+		{"DT_MIPS_DELTA_RELOC", Const, 16, ""},
+		{"DT_MIPS_DELTA_RELOC_NO", Const, 16, ""},
+		{"DT_MIPS_DELTA_SYM", Const, 16, ""},
+		{"DT_MIPS_DELTA_SYM_NO", Const, 16, ""},
+		{"DT_MIPS_DYNSTR_ALIGN", Const, 16, ""},
+		{"DT_MIPS_FLAGS", Const, 16, ""},
+		{"DT_MIPS_GOTSYM", Const, 16, ""},
+		{"DT_MIPS_GP_VALUE", Const, 16, ""},
+		{"DT_MIPS_HIDDEN_GOTIDX", Const, 16, ""},
+		{"DT_MIPS_HIPAGENO", Const, 16, ""},
+		{"DT_MIPS_ICHECKSUM", Const, 16, ""},
+		{"DT_MIPS_INTERFACE", Const, 16, ""},
+		{"DT_MIPS_INTERFACE_SIZE", Const, 16, ""},
+		{"DT_MIPS_IVERSION", Const, 16, ""},
+		{"DT_MIPS_LIBLIST", Const, 16, ""},
+		{"DT_MIPS_LIBLISTNO", Const, 16, ""},
+		{"DT_MIPS_LOCALPAGE_GOTIDX", Const, 16, ""},
+		{"DT_MIPS_LOCAL_GOTIDX", Const, 16, ""},
+		{"DT_MIPS_LOCAL_GOTNO", Const, 16, ""},
+		{"DT_MIPS_MSYM", Const, 16, ""},
+		{"DT_MIPS_OPTIONS", Const, 16, ""},
+		{"DT_MIPS_PERF_SUFFIX", Const, 16, ""},
+		{"DT_MIPS_PIXIE_INIT", Const, 16, ""},
+		{"DT_MIPS_PLTGOT", Const, 16, ""},
+		{"DT_MIPS_PROTECTED_GOTIDX", Const, 16, ""},
+		{"DT_MIPS_RLD_MAP", Const, 16, ""},
+		{"DT_MIPS_RLD_MAP_REL", Const, 16, ""},
+		{"DT_MIPS_RLD_TEXT_RESOLVE_ADDR", Const, 16, ""},
+		{"DT_MIPS_RLD_VERSION", Const, 16, ""},
+		{"DT_MIPS_RWPLT", Const, 16, ""},
+		{"DT_MIPS_SYMBOL_LIB", Const, 16, ""},
+		{"DT_MIPS_SYMTABNO", Const, 16, ""},
+		{"DT_MIPS_TIME_STAMP", Const, 16, ""},
+		{"DT_MIPS_UNREFEXTNO", Const, 16, ""},
+		{"DT_MOVEENT", Const, 16, ""},
+		{"DT_MOVESZ", Const, 16, ""},
+		{"DT_MOVETAB", Const, 16, ""},
+		{"DT_NEEDED", Const, 0, ""},
+		{"DT_NULL", Const, 0, ""},
+		{"DT_PLTGOT", Const, 0, ""},
+		{"DT_PLTPAD", Const, 16, ""},
+		{"DT_PLTPADSZ", Const, 16, ""},
+		{"DT_PLTREL", Const, 0, ""},
+		{"DT_PLTRELSZ", Const, 0, ""},
+		{"DT_POSFLAG_1", Const, 16, ""},
+		{"DT_PPC64_GLINK", Const, 16, ""},
+		{"DT_PPC64_OPD", Const, 16, ""},
+		{"DT_PPC64_OPDSZ", Const, 16, ""},
+		{"DT_PPC64_OPT", Const, 16, ""},
+		{"DT_PPC_GOT", Const, 16, ""},
+		{"DT_PPC_OPT", Const, 16, ""},
+		{"DT_PREINIT_ARRAY", Const, 0, ""},
+		{"DT_PREINIT_ARRAYSZ", Const, 0, ""},
+		{"DT_REL", Const, 0, ""},
+		{"DT_RELA", Const, 0, ""},
+		{"DT_RELACOUNT", Const, 16, ""},
+		{"DT_RELAENT", Const, 0, ""},
+		{"DT_RELASZ", Const, 0, ""},
+		{"DT_RELCOUNT", Const, 16, ""},
+		{"DT_RELENT", Const, 0, ""},
+		{"DT_RELSZ", Const, 0, ""},
+		{"DT_RPATH", Const, 0, ""},
+		{"DT_RUNPATH", Const, 0, ""},
+		{"DT_SONAME", Const, 0, ""},
+		{"DT_SPARC_REGISTER", Const, 16, ""},
+		{"DT_STRSZ", Const, 0, ""},
+		{"DT_STRTAB", Const, 0, ""},
+		{"DT_SYMBOLIC", Const, 0, ""},
+		{"DT_SYMENT", Const, 0, ""},
+		{"DT_SYMINENT", Const, 16, ""},
+		{"DT_SYMINFO", Const, 16, ""},
+		{"DT_SYMINSZ", Const, 16, ""},
+		{"DT_SYMTAB", Const, 0, ""},
+		{"DT_SYMTAB_SHNDX", Const, 16, ""},
+		{"DT_TEXTREL", Const, 0, ""},
+		{"DT_TLSDESC_GOT", Const, 16, ""},
+		{"DT_TLSDESC_PLT", Const, 16, ""},
+		{"DT_USED", Const, 16, ""},
+		{"DT_VALRNGHI", Const, 16, ""},
+		{"DT_VALRNGLO", Const, 16, ""},
+		{"DT_VERDEF", Const, 16, ""},
+		{"DT_VERDEFNUM", Const, 16, ""},
+		{"DT_VERNEED", Const, 0, ""},
+		{"DT_VERNEEDNUM", Const, 0, ""},
+		{"DT_VERSYM", Const, 0, ""},
+		{"Data", Type, 0, ""},
+		{"Dyn32", Type, 0, ""},
+		{"Dyn32.Tag", Field, 0, ""},
+		{"Dyn32.Val", Field, 0, ""},
+		{"Dyn64", Type, 0, ""},
+		{"Dyn64.Tag", Field, 0, ""},
+		{"Dyn64.Val", Field, 0, ""},
+		{"DynFlag", Type, 0, ""},
+		{"DynFlag1", Type, 21, ""},
+		{"DynTag", Type, 0, ""},
+		{"DynamicVersion", Type, 24, ""},
+		{"DynamicVersion.Deps", Field, 24, ""},
+		{"DynamicVersion.Flags", Field, 24, ""},
+		{"DynamicVersion.Index", Field, 24, ""},
+		{"DynamicVersion.Name", Field, 24, ""},
+		{"DynamicVersionDep", Type, 24, ""},
+		{"DynamicVersionDep.Dep", Field, 24, ""},
+		{"DynamicVersionDep.Flags", Field, 24, ""},
+		{"DynamicVersionDep.Index", Field, 24, ""},
+		{"DynamicVersionFlag", Type, 24, ""},
+		{"DynamicVersionNeed", Type, 24, ""},
+		{"DynamicVersionNeed.Name", Field, 24, ""},
+		{"DynamicVersionNeed.Needs", Field, 24, ""},
+		{"EI_ABIVERSION", Const, 0, ""},
+		{"EI_CLASS", Const, 0, ""},
+		{"EI_DATA", Const, 0, ""},
+		{"EI_NIDENT", Const, 0, ""},
+		{"EI_OSABI", Const, 0, ""},
+		{"EI_PAD", Const, 0, ""},
+		{"EI_VERSION", Const, 0, ""},
+		{"ELFCLASS32", Const, 0, ""},
+		{"ELFCLASS64", Const, 0, ""},
+		{"ELFCLASSNONE", Const, 0, ""},
+		{"ELFDATA2LSB", Const, 0, ""},
+		{"ELFDATA2MSB", Const, 0, ""},
+		{"ELFDATANONE", Const, 0, ""},
+		{"ELFMAG", Const, 0, ""},
+		{"ELFOSABI_86OPEN", Const, 0, ""},
+		{"ELFOSABI_AIX", Const, 0, ""},
+		{"ELFOSABI_ARM", Const, 0, ""},
+		{"ELFOSABI_AROS", Const, 11, ""},
+		{"ELFOSABI_CLOUDABI", Const, 11, ""},
+		{"ELFOSABI_FENIXOS", Const, 11, ""},
+		{"ELFOSABI_FREEBSD", Const, 0, ""},
+		{"ELFOSABI_HPUX", Const, 0, ""},
+		{"ELFOSABI_HURD", Const, 0, ""},
+		{"ELFOSABI_IRIX", Const, 0, ""},
+		{"ELFOSABI_LINUX", Const, 0, ""},
+		{"ELFOSABI_MODESTO", Const, 0, ""},
+		{"ELFOSABI_NETBSD", Const, 0, ""},
+		{"ELFOSABI_NONE", Const, 0, ""},
+		{"ELFOSABI_NSK", Const, 0, ""},
+		{"ELFOSABI_OPENBSD", Const, 0, ""},
+		{"ELFOSABI_OPENVMS", Const, 0, ""},
+		{"ELFOSABI_SOLARIS", Const, 0, ""},
+		{"ELFOSABI_STANDALONE", Const, 0, ""},
+		{"ELFOSABI_TRU64", Const, 0, ""},
+		{"EM_386", Const, 0, ""},
+		{"EM_486", Const, 0, ""},
+		{"EM_56800EX", Const, 11, ""},
+		{"EM_68HC05", Const, 11, ""},
+		{"EM_68HC08", Const, 11, ""},
+		{"EM_68HC11", Const, 11, ""},
+		{"EM_68HC12", Const, 0, ""},
+		{"EM_68HC16", Const, 11, ""},
+		{"EM_68K", Const, 0, ""},
+		{"EM_78KOR", Const, 11, ""},
+		{"EM_8051", Const, 11, ""},
+		{"EM_860", Const, 0, ""},
+		{"EM_88K", Const, 0, ""},
+		{"EM_960", Const, 0, ""},
+		{"EM_AARCH64", Const, 4, ""},
+		{"EM_ALPHA", Const, 0, ""},
+		{"EM_ALPHA_STD", Const, 0, ""},
+		{"EM_ALTERA_NIOS2", Const, 11, ""},
+		{"EM_AMDGPU", Const, 11, ""},
+		{"EM_ARC", Const, 0, ""},
+		{"EM_ARCA", Const, 11, ""},
+		{"EM_ARC_COMPACT", Const, 11, ""},
+		{"EM_ARC_COMPACT2", Const, 11, ""},
+		{"EM_ARM", Const, 0, ""},
+		{"EM_AVR", Const, 11, ""},
+		{"EM_AVR32", Const, 11, ""},
+		{"EM_BA1", Const, 11, ""},
+		{"EM_BA2", Const, 11, ""},
+		{"EM_BLACKFIN", Const, 11, ""},
+		{"EM_BPF", Const, 11, ""},
+		{"EM_C166", Const, 11, ""},
+		{"EM_CDP", Const, 11, ""},
+		{"EM_CE", Const, 11, ""},
+		{"EM_CLOUDSHIELD", Const, 11, ""},
+		{"EM_COGE", Const, 11, ""},
+		{"EM_COLDFIRE", Const, 0, ""},
+		{"EM_COOL", Const, 11, ""},
+		{"EM_COREA_1ST", Const, 11, ""},
+		{"EM_COREA_2ND", Const, 11, ""},
+		{"EM_CR", Const, 11, ""},
+		{"EM_CR16", Const, 11, ""},
+		{"EM_CRAYNV2", Const, 11, ""},
+		{"EM_CRIS", Const, 11, ""},
+		{"EM_CRX", Const, 11, ""},
+		{"EM_CSR_KALIMBA", Const, 11, ""},
+		{"EM_CUDA", Const, 11, ""},
+		{"EM_CYPRESS_M8C", Const, 11, ""},
+		{"EM_D10V", Const, 11, ""},
+		{"EM_D30V", Const, 11, ""},
+		{"EM_DSP24", Const, 11, ""},
+		{"EM_DSPIC30F", Const, 11, ""},
+		{"EM_DXP", Const, 11, ""},
+		{"EM_ECOG1", Const, 11, ""},
+		{"EM_ECOG16", Const, 11, ""},
+		{"EM_ECOG1X", Const, 11, ""},
+		{"EM_ECOG2", Const, 11, ""},
+		{"EM_ETPU", Const, 11, ""},
+		{"EM_EXCESS", Const, 11, ""},
+		{"EM_F2MC16", Const, 11, ""},
+		{"EM_FIREPATH", Const, 11, ""},
+		{"EM_FR20", Const, 0, ""},
+		{"EM_FR30", Const, 11, ""},
+		{"EM_FT32", Const, 11, ""},
+		{"EM_FX66", Const, 11, ""},
+		{"EM_H8S", Const, 0, ""},
+		{"EM_H8_300", Const, 0, ""},
+		{"EM_H8_300H", Const, 0, ""},
+		{"EM_H8_500", Const, 0, ""},
+		{"EM_HUANY", Const, 11, ""},
+		{"EM_IA_64", Const, 0, ""},
+		{"EM_INTEL205", Const, 11, ""},
+		{"EM_INTEL206", Const, 11, ""},
+		{"EM_INTEL207", Const, 11, ""},
+		{"EM_INTEL208", Const, 11, ""},
+		{"EM_INTEL209", Const, 11, ""},
+		{"EM_IP2K", Const, 11, ""},
+		{"EM_JAVELIN", Const, 11, ""},
+		{"EM_K10M", Const, 11, ""},
+		{"EM_KM32", Const, 11, ""},
+		{"EM_KMX16", Const, 11, ""},
+		{"EM_KMX32", Const, 11, ""},
+		{"EM_KMX8", Const, 11, ""},
+		{"EM_KVARC", Const, 11, ""},
+		{"EM_L10M", Const, 11, ""},
+		{"EM_LANAI", Const, 11, ""},
+		{"EM_LATTICEMICO32", Const, 11, ""},
+		{"EM_LOONGARCH", Const, 19, ""},
+		{"EM_M16C", Const, 11, ""},
+		{"EM_M32", Const, 0, ""},
+		{"EM_M32C", Const, 11, ""},
+		{"EM_M32R", Const, 11, ""},
+		{"EM_MANIK", Const, 11, ""},
+		{"EM_MAX", Const, 11, ""},
+		{"EM_MAXQ30", Const, 11, ""},
+		{"EM_MCHP_PIC", Const, 11, ""},
+		{"EM_MCST_ELBRUS", Const, 11, ""},
+		{"EM_ME16", Const, 0, ""},
+		{"EM_METAG", Const, 11, ""},
+		{"EM_MICROBLAZE", Const, 11, ""},
+		{"EM_MIPS", Const, 0, ""},
+		{"EM_MIPS_RS3_LE", Const, 0, ""},
+		{"EM_MIPS_RS4_BE", Const, 0, ""},
+		{"EM_MIPS_X", Const, 0, ""},
+		{"EM_MMA", Const, 0, ""},
+		{"EM_MMDSP_PLUS", Const, 11, ""},
+		{"EM_MMIX", Const, 11, ""},
+		{"EM_MN10200", Const, 11, ""},
+		{"EM_MN10300", Const, 11, ""},
+		{"EM_MOXIE", Const, 11, ""},
+		{"EM_MSP430", Const, 11, ""},
+		{"EM_NCPU", Const, 0, ""},
+		{"EM_NDR1", Const, 0, ""},
+		{"EM_NDS32", Const, 11, ""},
+		{"EM_NONE", Const, 0, ""},
+		{"EM_NORC", Const, 11, ""},
+		{"EM_NS32K", Const, 11, ""},
+		{"EM_OPEN8", Const, 11, ""},
+		{"EM_OPENRISC", Const, 11, ""},
+		{"EM_PARISC", Const, 0, ""},
+		{"EM_PCP", Const, 0, ""},
+		{"EM_PDP10", Const, 11, ""},
+		{"EM_PDP11", Const, 11, ""},
+		{"EM_PDSP", Const, 11, ""},
+		{"EM_PJ", Const, 11, ""},
+		{"EM_PPC", Const, 0, ""},
+		{"EM_PPC64", Const, 0, ""},
+		{"EM_PRISM", Const, 11, ""},
+		{"EM_QDSP6", Const, 11, ""},
+		{"EM_R32C", Const, 11, ""},
+		{"EM_RCE", Const, 0, ""},
+		{"EM_RH32", Const, 0, ""},
+		{"EM_RISCV", Const, 11, ""},
+		{"EM_RL78", Const, 11, ""},
+		{"EM_RS08", Const, 11, ""},
+		{"EM_RX", Const, 11, ""},
+		{"EM_S370", Const, 0, ""},
+		{"EM_S390", Const, 0, ""},
+		{"EM_SCORE7", Const, 11, ""},
+		{"EM_SEP", Const, 11, ""},
+		{"EM_SE_C17", Const, 11, ""},
+		{"EM_SE_C33", Const, 11, ""},
+		{"EM_SH", Const, 0, ""},
+		{"EM_SHARC", Const, 11, ""},
+		{"EM_SLE9X", Const, 11, ""},
+		{"EM_SNP1K", Const, 11, ""},
+		{"EM_SPARC", Const, 0, ""},
+		{"EM_SPARC32PLUS", Const, 0, ""},
+		{"EM_SPARCV9", Const, 0, ""},
+		{"EM_ST100", Const, 0, ""},
+		{"EM_ST19", Const, 11, ""},
+		{"EM_ST200", Const, 11, ""},
+		{"EM_ST7", Const, 11, ""},
+		{"EM_ST9PLUS", Const, 11, ""},
+		{"EM_STARCORE", Const, 0, ""},
+		{"EM_STM8", Const, 11, ""},
+		{"EM_STXP7X", Const, 11, ""},
+		{"EM_SVX", Const, 11, ""},
+		{"EM_TILE64", Const, 11, ""},
+		{"EM_TILEGX", Const, 11, ""},
+		{"EM_TILEPRO", Const, 11, ""},
+		{"EM_TINYJ", Const, 0, ""},
+		{"EM_TI_ARP32", Const, 11, ""},
+		{"EM_TI_C2000", Const, 11, ""},
+		{"EM_TI_C5500", Const, 11, ""},
+		{"EM_TI_C6000", Const, 11, ""},
+		{"EM_TI_PRU", Const, 11, ""},
+		{"EM_TMM_GPP", Const, 11, ""},
+		{"EM_TPC", Const, 11, ""},
+		{"EM_TRICORE", Const, 0, ""},
+		{"EM_TRIMEDIA", Const, 11, ""},
+		{"EM_TSK3000", Const, 11, ""},
+		{"EM_UNICORE", Const, 11, ""},
+		{"EM_V800", Const, 0, ""},
+		{"EM_V850", Const, 11, ""},
+		{"EM_VAX", Const, 11, ""},
+		{"EM_VIDEOCORE", Const, 11, ""},
+		{"EM_VIDEOCORE3", Const, 11, ""},
+		{"EM_VIDEOCORE5", Const, 11, ""},
+		{"EM_VISIUM", Const, 11, ""},
+		{"EM_VPP500", Const, 0, ""},
+		{"EM_X86_64", Const, 0, ""},
+		{"EM_XCORE", Const, 11, ""},
+		{"EM_XGATE", Const, 11, ""},
+		{"EM_XIMO16", Const, 11, ""},
+		{"EM_XTENSA", Const, 11, ""},
+		{"EM_Z80", Const, 11, ""},
+		{"EM_ZSP", Const, 11, ""},
+		{"ET_CORE", Const, 0, ""},
+		{"ET_DYN", Const, 0, ""},
+		{"ET_EXEC", Const, 0, ""},
+		{"ET_HIOS", Const, 0, ""},
+		{"ET_HIPROC", Const, 0, ""},
+		{"ET_LOOS", Const, 0, ""},
+		{"ET_LOPROC", Const, 0, ""},
+		{"ET_NONE", Const, 0, ""},
+		{"ET_REL", Const, 0, ""},
+		{"EV_CURRENT", Const, 0, ""},
+		{"EV_NONE", Const, 0, ""},
+		{"ErrNoSymbols", Var, 4, ""},
+		{"File", Type, 0, ""},
+		{"File.FileHeader", Field, 0, ""},
+		{"File.Progs", Field, 0, ""},
+		{"File.Sections", Field, 0, ""},
+		{"FileHeader", Type, 0, ""},
+		{"FileHeader.ABIVersion", Field, 0, ""},
+		{"FileHeader.ByteOrder", Field, 0, ""},
+		{"FileHeader.Class", Field, 0, ""},
+		{"FileHeader.Data", Field, 0, ""},
+		{"FileHeader.Entry", Field, 1, ""},
+		{"FileHeader.Machine", Field, 0, ""},
+		{"FileHeader.OSABI", Field, 0, ""},
+		{"FileHeader.Type", Field, 0, ""},
+		{"FileHeader.Version", Field, 0, ""},
+		{"FormatError", Type, 0, ""},
+		{"Header32", Type, 0, ""},
+		{"Header32.Ehsize", Field, 0, ""},
+		{"Header32.Entry", Field, 0, ""},
+		{"Header32.Flags", Field, 0, ""},
+		{"Header32.Ident", Field, 0, ""},
+		{"Header32.Machine", Field, 0, ""},
+		{"Header32.Phentsize", Field, 0, ""},
+		{"Header32.Phnum", Field, 0, ""},
+		{"Header32.Phoff", Field, 0, ""},
+		{"Header32.Shentsize", Field, 0, ""},
+		{"Header32.Shnum", Field, 0, ""},
+		{"Header32.Shoff", Field, 0, ""},
+		{"Header32.Shstrndx", Field, 0, ""},
+		{"Header32.Type", Field, 0, ""},
+		{"Header32.Version", Field, 0, ""},
+		{"Header64", Type, 0, ""},
+		{"Header64.Ehsize", Field, 0, ""},
+		{"Header64.Entry", Field, 0, ""},
+		{"Header64.Flags", Field, 0, ""},
+		{"Header64.Ident", Field, 0, ""},
+		{"Header64.Machine", Field, 0, ""},
+		{"Header64.Phentsize", Field, 0, ""},
+		{"Header64.Phnum", Field, 0, ""},
+		{"Header64.Phoff", Field, 0, ""},
+		{"Header64.Shentsize", Field, 0, ""},
+		{"Header64.Shnum", Field, 0, ""},
+		{"Header64.Shoff", Field, 0, ""},
+		{"Header64.Shstrndx", Field, 0, ""},
+		{"Header64.Type", Field, 0, ""},
+		{"Header64.Version", Field, 0, ""},
+		{"ImportedSymbol", Type, 0, ""},
+		{"ImportedSymbol.Library", Field, 0, ""},
+		{"ImportedSymbol.Name", Field, 0, ""},
+		{"ImportedSymbol.Version", Field, 0, ""},
+		{"Machine", Type, 0, ""},
+		{"NT_FPREGSET", Const, 0, ""},
+		{"NT_PRPSINFO", Const, 0, ""},
+		{"NT_PRSTATUS", Const, 0, ""},
+		{"NType", Type, 0, ""},
+		{"NewFile", Func, 0, "func(r io.ReaderAt) (*File, error)"},
+		{"OSABI", Type, 0, ""},
+		{"Open", Func, 0, "func(name string) (*File, error)"},
+		{"PF_MASKOS", Const, 0, ""},
+		{"PF_MASKPROC", Const, 0, ""},
+		{"PF_R", Const, 0, ""},
+		{"PF_W", Const, 0, ""},
+		{"PF_X", Const, 0, ""},
+		{"PT_AARCH64_ARCHEXT", Const, 16, ""},
+		{"PT_AARCH64_UNWIND", Const, 16, ""},
+		{"PT_ARM_ARCHEXT", Const, 16, ""},
+		{"PT_ARM_EXIDX", Const, 16, ""},
+		{"PT_DYNAMIC", Const, 0, ""},
+		{"PT_GNU_EH_FRAME", Const, 16, ""},
+		{"PT_GNU_MBIND_HI", Const, 16, ""},
+		{"PT_GNU_MBIND_LO", Const, 16, ""},
+		{"PT_GNU_PROPERTY", Const, 16, ""},
+		{"PT_GNU_RELRO", Const, 16, ""},
+		{"PT_GNU_STACK", Const, 16, ""},
+		{"PT_HIOS", Const, 0, ""},
+		{"PT_HIPROC", Const, 0, ""},
+		{"PT_INTERP", Const, 0, ""},
+		{"PT_LOAD", Const, 0, ""},
+		{"PT_LOOS", Const, 0, ""},
+		{"PT_LOPROC", Const, 0, ""},
+		{"PT_MIPS_ABIFLAGS", Const, 16, ""},
+		{"PT_MIPS_OPTIONS", Const, 16, ""},
+		{"PT_MIPS_REGINFO", Const, 16, ""},
+		{"PT_MIPS_RTPROC", Const, 16, ""},
+		{"PT_NOTE", Const, 0, ""},
+		{"PT_NULL", Const, 0, ""},
+		{"PT_OPENBSD_BOOTDATA", Const, 16, ""},
+		{"PT_OPENBSD_NOBTCFI", Const, 23, ""},
+		{"PT_OPENBSD_RANDOMIZE", Const, 16, ""},
+		{"PT_OPENBSD_WXNEEDED", Const, 16, ""},
+		{"PT_PAX_FLAGS", Const, 16, ""},
+		{"PT_PHDR", Const, 0, ""},
+		{"PT_RISCV_ATTRIBUTES", Const, 25, ""},
+		{"PT_S390_PGSTE", Const, 16, ""},
+		{"PT_SHLIB", Const, 0, ""},
+		{"PT_SUNWSTACK", Const, 16, ""},
+		{"PT_SUNW_EH_FRAME", Const, 16, ""},
+		{"PT_TLS", Const, 0, ""},
+		{"Prog", Type, 0, ""},
+		{"Prog.ProgHeader", Field, 0, ""},
+		{"Prog.ReaderAt", Field, 0, ""},
+		{"Prog32", Type, 0, ""},
+		{"Prog32.Align", Field, 0, ""},
+		{"Prog32.Filesz", Field, 0, ""},
+		{"Prog32.Flags", Field, 0, ""},
+		{"Prog32.Memsz", Field, 0, ""},
+		{"Prog32.Off", Field, 0, ""},
+		{"Prog32.Paddr", Field, 0, ""},
+		{"Prog32.Type", Field, 0, ""},
+		{"Prog32.Vaddr", Field, 0, ""},
+		{"Prog64", Type, 0, ""},
+		{"Prog64.Align", Field, 0, ""},
+		{"Prog64.Filesz", Field, 0, ""},
+		{"Prog64.Flags", Field, 0, ""},
+		{"Prog64.Memsz", Field, 0, ""},
+		{"Prog64.Off", Field, 0, ""},
+		{"Prog64.Paddr", Field, 0, ""},
+		{"Prog64.Type", Field, 0, ""},
+		{"Prog64.Vaddr", Field, 0, ""},
+		{"ProgFlag", Type, 0, ""},
+		{"ProgHeader", Type, 0, ""},
+		{"ProgHeader.Align", Field, 0, ""},
+		{"ProgHeader.Filesz", Field, 0, ""},
+		{"ProgHeader.Flags", Field, 0, ""},
+		{"ProgHeader.Memsz", Field, 0, ""},
+		{"ProgHeader.Off", Field, 0, ""},
+		{"ProgHeader.Paddr", Field, 0, ""},
+		{"ProgHeader.Type", Field, 0, ""},
+		{"ProgHeader.Vaddr", Field, 0, ""},
+		{"ProgType", Type, 0, ""},
+		{"R_386", Type, 0, ""},
+		{"R_386_16", Const, 10, ""},
+		{"R_386_32", Const, 0, ""},
+		{"R_386_32PLT", Const, 10, ""},
+		{"R_386_8", Const, 10, ""},
+		{"R_386_COPY", Const, 0, ""},
+		{"R_386_GLOB_DAT", Const, 0, ""},
+		{"R_386_GOT32", Const, 0, ""},
+		{"R_386_GOT32X", Const, 10, ""},
+		{"R_386_GOTOFF", Const, 0, ""},
+		{"R_386_GOTPC", Const, 0, ""},
+		{"R_386_IRELATIVE", Const, 10, ""},
+		{"R_386_JMP_SLOT", Const, 0, ""},
+		{"R_386_NONE", Const, 0, ""},
+		{"R_386_PC16", Const, 10, ""},
+		{"R_386_PC32", Const, 0, ""},
+		{"R_386_PC8", Const, 10, ""},
+		{"R_386_PLT32", Const, 0, ""},
+		{"R_386_RELATIVE", Const, 0, ""},
+		{"R_386_SIZE32", Const, 10, ""},
+		{"R_386_TLS_DESC", Const, 10, ""},
+		{"R_386_TLS_DESC_CALL", Const, 10, ""},
+		{"R_386_TLS_DTPMOD32", Const, 0, ""},
+		{"R_386_TLS_DTPOFF32", Const, 0, ""},
+		{"R_386_TLS_GD", Const, 0, ""},
+		{"R_386_TLS_GD_32", Const, 0, ""},
+		{"R_386_TLS_GD_CALL", Const, 0, ""},
+		{"R_386_TLS_GD_POP", Const, 0, ""},
+		{"R_386_TLS_GD_PUSH", Const, 0, ""},
+		{"R_386_TLS_GOTDESC", Const, 10, ""},
+		{"R_386_TLS_GOTIE", Const, 0, ""},
+		{"R_386_TLS_IE", Const, 0, ""},
+		{"R_386_TLS_IE_32", Const, 0, ""},
+		{"R_386_TLS_LDM", Const, 0, ""},
+		{"R_386_TLS_LDM_32", Const, 0, ""},
+		{"R_386_TLS_LDM_CALL", Const, 0, ""},
+		{"R_386_TLS_LDM_POP", Const, 0, ""},
+		{"R_386_TLS_LDM_PUSH", Const, 0, ""},
+		{"R_386_TLS_LDO_32", Const, 0, ""},
+		{"R_386_TLS_LE", Const, 0, ""},
+		{"R_386_TLS_LE_32", Const, 0, ""},
+		{"R_386_TLS_TPOFF", Const, 0, ""},
+		{"R_386_TLS_TPOFF32", Const, 0, ""},
+		{"R_390", Type, 7, ""},
+		{"R_390_12", Const, 7, ""},
+		{"R_390_16", Const, 7, ""},
+		{"R_390_20", Const, 7, ""},
+		{"R_390_32", Const, 7, ""},
+		{"R_390_64", Const, 7, ""},
+		{"R_390_8", Const, 7, ""},
+		{"R_390_COPY", Const, 7, ""},
+		{"R_390_GLOB_DAT", Const, 7, ""},
+		{"R_390_GOT12", Const, 7, ""},
+		{"R_390_GOT16", Const, 7, ""},
+		{"R_390_GOT20", Const, 7, ""},
+		{"R_390_GOT32", Const, 7, ""},
+		{"R_390_GOT64", Const, 7, ""},
+		{"R_390_GOTENT", Const, 7, ""},
+		{"R_390_GOTOFF", Const, 7, ""},
+		{"R_390_GOTOFF16", Const, 7, ""},
+		{"R_390_GOTOFF64", Const, 7, ""},
+		{"R_390_GOTPC", Const, 7, ""},
+		{"R_390_GOTPCDBL", Const, 7, ""},
+		{"R_390_GOTPLT12", Const, 7, ""},
+		{"R_390_GOTPLT16", Const, 7, ""},
+		{"R_390_GOTPLT20", Const, 7, ""},
+		{"R_390_GOTPLT32", Const, 7, ""},
+		{"R_390_GOTPLT64", Const, 7, ""},
+		{"R_390_GOTPLTENT", Const, 7, ""},
+		{"R_390_GOTPLTOFF16", Const, 7, ""},
+		{"R_390_GOTPLTOFF32", Const, 7, ""},
+		{"R_390_GOTPLTOFF64", Const, 7, ""},
+		{"R_390_JMP_SLOT", Const, 7, ""},
+		{"R_390_NONE", Const, 7, ""},
+		{"R_390_PC16", Const, 7, ""},
+		{"R_390_PC16DBL", Const, 7, ""},
+		{"R_390_PC32", Const, 7, ""},
+		{"R_390_PC32DBL", Const, 7, ""},
+		{"R_390_PC64", Const, 7, ""},
+		{"R_390_PLT16DBL", Const, 7, ""},
+		{"R_390_PLT32", Const, 7, ""},
+		{"R_390_PLT32DBL", Const, 7, ""},
+		{"R_390_PLT64", Const, 7, ""},
+		{"R_390_RELATIVE", Const, 7, ""},
+		{"R_390_TLS_DTPMOD", Const, 7, ""},
+		{"R_390_TLS_DTPOFF", Const, 7, ""},
+		{"R_390_TLS_GD32", Const, 7, ""},
+		{"R_390_TLS_GD64", Const, 7, ""},
+		{"R_390_TLS_GDCALL", Const, 7, ""},
+		{"R_390_TLS_GOTIE12", Const, 7, ""},
+		{"R_390_TLS_GOTIE20", Const, 7, ""},
+		{"R_390_TLS_GOTIE32", Const, 7, ""},
+		{"R_390_TLS_GOTIE64", Const, 7, ""},
+		{"R_390_TLS_IE32", Const, 7, ""},
+		{"R_390_TLS_IE64", Const, 7, ""},
+		{"R_390_TLS_IEENT", Const, 7, ""},
+		{"R_390_TLS_LDCALL", Const, 7, ""},
+		{"R_390_TLS_LDM32", Const, 7, ""},
+		{"R_390_TLS_LDM64", Const, 7, ""},
+		{"R_390_TLS_LDO32", Const, 7, ""},
+		{"R_390_TLS_LDO64", Const, 7, ""},
+		{"R_390_TLS_LE32", Const, 7, ""},
+		{"R_390_TLS_LE64", Const, 7, ""},
+		{"R_390_TLS_LOAD", Const, 7, ""},
+		{"R_390_TLS_TPOFF", Const, 7, ""},
+		{"R_AARCH64", Type, 4, ""},
+		{"R_AARCH64_ABS16", Const, 4, ""},
+		{"R_AARCH64_ABS32", Const, 4, ""},
+		{"R_AARCH64_ABS64", Const, 4, ""},
+		{"R_AARCH64_ADD_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_ADR_GOT_PAGE", Const, 4, ""},
+		{"R_AARCH64_ADR_PREL_LO21", Const, 4, ""},
+		{"R_AARCH64_ADR_PREL_PG_HI21", Const, 4, ""},
+		{"R_AARCH64_ADR_PREL_PG_HI21_NC", Const, 4, ""},
+		{"R_AARCH64_CALL26", Const, 4, ""},
+		{"R_AARCH64_CONDBR19", Const, 4, ""},
+		{"R_AARCH64_COPY", Const, 4, ""},
+		{"R_AARCH64_GLOB_DAT", Const, 4, ""},
+		{"R_AARCH64_GOT_LD_PREL19", Const, 4, ""},
+		{"R_AARCH64_IRELATIVE", Const, 4, ""},
+		{"R_AARCH64_JUMP26", Const, 4, ""},
+		{"R_AARCH64_JUMP_SLOT", Const, 4, ""},
+		{"R_AARCH64_LD64_GOTOFF_LO15", Const, 10, ""},
+		{"R_AARCH64_LD64_GOTPAGE_LO15", Const, 10, ""},
+		{"R_AARCH64_LD64_GOT_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_LDST128_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_LDST16_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_LDST32_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_LDST64_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_LDST8_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_LD_PREL_LO19", Const, 4, ""},
+		{"R_AARCH64_MOVW_SABS_G0", Const, 4, ""},
+		{"R_AARCH64_MOVW_SABS_G1", Const, 4, ""},
+		{"R_AARCH64_MOVW_SABS_G2", Const, 4, ""},
+		{"R_AARCH64_MOVW_UABS_G0", Const, 4, ""},
+		{"R_AARCH64_MOVW_UABS_G0_NC", Const, 4, ""},
+		{"R_AARCH64_MOVW_UABS_G1", Const, 4, ""},
+		{"R_AARCH64_MOVW_UABS_G1_NC", Const, 4, ""},
+		{"R_AARCH64_MOVW_UABS_G2", Const, 4, ""},
+		{"R_AARCH64_MOVW_UABS_G2_NC", Const, 4, ""},
+		{"R_AARCH64_MOVW_UABS_G3", Const, 4, ""},
+		{"R_AARCH64_NONE", Const, 4, ""},
+		{"R_AARCH64_NULL", Const, 4, ""},
+		{"R_AARCH64_P32_ABS16", Const, 4, ""},
+		{"R_AARCH64_P32_ABS32", Const, 4, ""},
+		{"R_AARCH64_P32_ADD_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_ADR_GOT_PAGE", Const, 4, ""},
+		{"R_AARCH64_P32_ADR_PREL_LO21", Const, 4, ""},
+		{"R_AARCH64_P32_ADR_PREL_PG_HI21", Const, 4, ""},
+		{"R_AARCH64_P32_CALL26", Const, 4, ""},
+		{"R_AARCH64_P32_CONDBR19", Const, 4, ""},
+		{"R_AARCH64_P32_COPY", Const, 4, ""},
+		{"R_AARCH64_P32_GLOB_DAT", Const, 4, ""},
+		{"R_AARCH64_P32_GOT_LD_PREL19", Const, 4, ""},
+		{"R_AARCH64_P32_IRELATIVE", Const, 4, ""},
+		{"R_AARCH64_P32_JUMP26", Const, 4, ""},
+		{"R_AARCH64_P32_JUMP_SLOT", Const, 4, ""},
+		{"R_AARCH64_P32_LD32_GOT_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_LDST128_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_LDST16_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_LDST32_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_LDST64_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_LDST8_ABS_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_LD_PREL_LO19", Const, 4, ""},
+		{"R_AARCH64_P32_MOVW_SABS_G0", Const, 4, ""},
+		{"R_AARCH64_P32_MOVW_UABS_G0", Const, 4, ""},
+		{"R_AARCH64_P32_MOVW_UABS_G0_NC", Const, 4, ""},
+		{"R_AARCH64_P32_MOVW_UABS_G1", Const, 4, ""},
+		{"R_AARCH64_P32_PREL16", Const, 4, ""},
+		{"R_AARCH64_P32_PREL32", Const, 4, ""},
+		{"R_AARCH64_P32_RELATIVE", Const, 4, ""},
+		{"R_AARCH64_P32_TLSDESC", Const, 4, ""},
+		{"R_AARCH64_P32_TLSDESC_ADD_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_TLSDESC_ADR_PAGE21", Const, 4, ""},
+		{"R_AARCH64_P32_TLSDESC_ADR_PREL21", Const, 4, ""},
+		{"R_AARCH64_P32_TLSDESC_CALL", Const, 4, ""},
+		{"R_AARCH64_P32_TLSDESC_LD32_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_TLSDESC_LD_PREL19", Const, 4, ""},
+		{"R_AARCH64_P32_TLSGD_ADD_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_TLSGD_ADR_PAGE21", Const, 4, ""},
+		{"R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21", Const, 4, ""},
+		{"R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19", Const, 4, ""},
+		{"R_AARCH64_P32_TLSLE_ADD_TPREL_HI12", Const, 4, ""},
+		{"R_AARCH64_P32_TLSLE_ADD_TPREL_LO12", Const, 4, ""},
+		{"R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_P32_TLSLE_MOVW_TPREL_G0", Const, 4, ""},
+		{"R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC", Const, 4, ""},
+		{"R_AARCH64_P32_TLSLE_MOVW_TPREL_G1", Const, 4, ""},
+		{"R_AARCH64_P32_TLS_DTPMOD", Const, 4, ""},
+		{"R_AARCH64_P32_TLS_DTPREL", Const, 4, ""},
+		{"R_AARCH64_P32_TLS_TPREL", Const, 4, ""},
+		{"R_AARCH64_P32_TSTBR14", Const, 4, ""},
+		{"R_AARCH64_PREL16", Const, 4, ""},
+		{"R_AARCH64_PREL32", Const, 4, ""},
+		{"R_AARCH64_PREL64", Const, 4, ""},
+		{"R_AARCH64_RELATIVE", Const, 4, ""},
+		{"R_AARCH64_TLSDESC", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_ADD", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_ADD_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_ADR_PAGE21", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_ADR_PREL21", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_CALL", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_LD64_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_LDR", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_LD_PREL19", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_OFF_G0_NC", Const, 4, ""},
+		{"R_AARCH64_TLSDESC_OFF_G1", Const, 4, ""},
+		{"R_AARCH64_TLSGD_ADD_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_TLSGD_ADR_PAGE21", Const, 4, ""},
+		{"R_AARCH64_TLSGD_ADR_PREL21", Const, 10, ""},
+		{"R_AARCH64_TLSGD_MOVW_G0_NC", Const, 10, ""},
+		{"R_AARCH64_TLSGD_MOVW_G1", Const, 10, ""},
+		{"R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21", Const, 4, ""},
+		{"R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_TLSIE_LD_GOTTPREL_PREL19", Const, 4, ""},
+		{"R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC", Const, 4, ""},
+		{"R_AARCH64_TLSIE_MOVW_GOTTPREL_G1", Const, 4, ""},
+		{"R_AARCH64_TLSLD_ADR_PAGE21", Const, 10, ""},
+		{"R_AARCH64_TLSLD_ADR_PREL21", Const, 10, ""},
+		{"R_AARCH64_TLSLD_LDST128_DTPREL_LO12", Const, 10, ""},
+		{"R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC", Const, 10, ""},
+		{"R_AARCH64_TLSLE_ADD_TPREL_HI12", Const, 4, ""},
+		{"R_AARCH64_TLSLE_ADD_TPREL_LO12", Const, 4, ""},
+		{"R_AARCH64_TLSLE_ADD_TPREL_LO12_NC", Const, 4, ""},
+		{"R_AARCH64_TLSLE_LDST128_TPREL_LO12", Const, 10, ""},
+		{"R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC", Const, 10, ""},
+		{"R_AARCH64_TLSLE_MOVW_TPREL_G0", Const, 4, ""},
+		{"R_AARCH64_TLSLE_MOVW_TPREL_G0_NC", Const, 4, ""},
+		{"R_AARCH64_TLSLE_MOVW_TPREL_G1", Const, 4, ""},
+		{"R_AARCH64_TLSLE_MOVW_TPREL_G1_NC", Const, 4, ""},
+		{"R_AARCH64_TLSLE_MOVW_TPREL_G2", Const, 4, ""},
+		{"R_AARCH64_TLS_DTPMOD64", Const, 4, ""},
+		{"R_AARCH64_TLS_DTPREL64", Const, 4, ""},
+		{"R_AARCH64_TLS_TPREL64", Const, 4, ""},
+		{"R_AARCH64_TSTBR14", Const, 4, ""},
+		{"R_ALPHA", Type, 0, ""},
+		{"R_ALPHA_BRADDR", Const, 0, ""},
+		{"R_ALPHA_COPY", Const, 0, ""},
+		{"R_ALPHA_GLOB_DAT", Const, 0, ""},
+		{"R_ALPHA_GPDISP", Const, 0, ""},
+		{"R_ALPHA_GPREL32", Const, 0, ""},
+		{"R_ALPHA_GPRELHIGH", Const, 0, ""},
+		{"R_ALPHA_GPRELLOW", Const, 0, ""},
+		{"R_ALPHA_GPVALUE", Const, 0, ""},
+		{"R_ALPHA_HINT", Const, 0, ""},
+		{"R_ALPHA_IMMED_BR_HI32", Const, 0, ""},
+		{"R_ALPHA_IMMED_GP_16", Const, 0, ""},
+		{"R_ALPHA_IMMED_GP_HI32", Const, 0, ""},
+		{"R_ALPHA_IMMED_LO32", Const, 0, ""},
+		{"R_ALPHA_IMMED_SCN_HI32", Const, 0, ""},
+		{"R_ALPHA_JMP_SLOT", Const, 0, ""},
+		{"R_ALPHA_LITERAL", Const, 0, ""},
+		{"R_ALPHA_LITUSE", Const, 0, ""},
+		{"R_ALPHA_NONE", Const, 0, ""},
+		{"R_ALPHA_OP_PRSHIFT", Const, 0, ""},
+		{"R_ALPHA_OP_PSUB", Const, 0, ""},
+		{"R_ALPHA_OP_PUSH", Const, 0, ""},
+		{"R_ALPHA_OP_STORE", Const, 0, ""},
+		{"R_ALPHA_REFLONG", Const, 0, ""},
+		{"R_ALPHA_REFQUAD", Const, 0, ""},
+		{"R_ALPHA_RELATIVE", Const, 0, ""},
+		{"R_ALPHA_SREL16", Const, 0, ""},
+		{"R_ALPHA_SREL32", Const, 0, ""},
+		{"R_ALPHA_SREL64", Const, 0, ""},
+		{"R_ARM", Type, 0, ""},
+		{"R_ARM_ABS12", Const, 0, ""},
+		{"R_ARM_ABS16", Const, 0, ""},
+		{"R_ARM_ABS32", Const, 0, ""},
+		{"R_ARM_ABS32_NOI", Const, 10, ""},
+		{"R_ARM_ABS8", Const, 0, ""},
+		{"R_ARM_ALU_PCREL_15_8", Const, 10, ""},
+		{"R_ARM_ALU_PCREL_23_15", Const, 10, ""},
+		{"R_ARM_ALU_PCREL_7_0", Const, 10, ""},
+		{"R_ARM_ALU_PC_G0", Const, 10, ""},
+		{"R_ARM_ALU_PC_G0_NC", Const, 10, ""},
+		{"R_ARM_ALU_PC_G1", Const, 10, ""},
+		{"R_ARM_ALU_PC_G1_NC", Const, 10, ""},
+		{"R_ARM_ALU_PC_G2", Const, 10, ""},
+		{"R_ARM_ALU_SBREL_19_12_NC", Const, 10, ""},
+		{"R_ARM_ALU_SBREL_27_20_CK", Const, 10, ""},
+		{"R_ARM_ALU_SB_G0", Const, 10, ""},
+		{"R_ARM_ALU_SB_G0_NC", Const, 10, ""},
+		{"R_ARM_ALU_SB_G1", Const, 10, ""},
+		{"R_ARM_ALU_SB_G1_NC", Const, 10, ""},
+		{"R_ARM_ALU_SB_G2", Const, 10, ""},
+		{"R_ARM_AMP_VCALL9", Const, 0, ""},
+		{"R_ARM_BASE_ABS", Const, 10, ""},
+		{"R_ARM_CALL", Const, 10, ""},
+		{"R_ARM_COPY", Const, 0, ""},
+		{"R_ARM_GLOB_DAT", Const, 0, ""},
+		{"R_ARM_GNU_VTENTRY", Const, 0, ""},
+		{"R_ARM_GNU_VTINHERIT", Const, 0, ""},
+		{"R_ARM_GOT32", Const, 0, ""},
+		{"R_ARM_GOTOFF", Const, 0, ""},
+		{"R_ARM_GOTOFF12", Const, 10, ""},
+		{"R_ARM_GOTPC", Const, 0, ""},
+		{"R_ARM_GOTRELAX", Const, 10, ""},
+		{"R_ARM_GOT_ABS", Const, 10, ""},
+		{"R_ARM_GOT_BREL12", Const, 10, ""},
+		{"R_ARM_GOT_PREL", Const, 10, ""},
+		{"R_ARM_IRELATIVE", Const, 10, ""},
+		{"R_ARM_JUMP24", Const, 10, ""},
+		{"R_ARM_JUMP_SLOT", Const, 0, ""},
+		{"R_ARM_LDC_PC_G0", Const, 10, ""},
+		{"R_ARM_LDC_PC_G1", Const, 10, ""},
+		{"R_ARM_LDC_PC_G2", Const, 10, ""},
+		{"R_ARM_LDC_SB_G0", Const, 10, ""},
+		{"R_ARM_LDC_SB_G1", Const, 10, ""},
+		{"R_ARM_LDC_SB_G2", Const, 10, ""},
+		{"R_ARM_LDRS_PC_G0", Const, 10, ""},
+		{"R_ARM_LDRS_PC_G1", Const, 10, ""},
+		{"R_ARM_LDRS_PC_G2", Const, 10, ""},
+		{"R_ARM_LDRS_SB_G0", Const, 10, ""},
+		{"R_ARM_LDRS_SB_G1", Const, 10, ""},
+		{"R_ARM_LDRS_SB_G2", Const, 10, ""},
+		{"R_ARM_LDR_PC_G1", Const, 10, ""},
+		{"R_ARM_LDR_PC_G2", Const, 10, ""},
+		{"R_ARM_LDR_SBREL_11_10_NC", Const, 10, ""},
+		{"R_ARM_LDR_SB_G0", Const, 10, ""},
+		{"R_ARM_LDR_SB_G1", Const, 10, ""},
+		{"R_ARM_LDR_SB_G2", Const, 10, ""},
+		{"R_ARM_ME_TOO", Const, 10, ""},
+		{"R_ARM_MOVT_ABS", Const, 10, ""},
+		{"R_ARM_MOVT_BREL", Const, 10, ""},
+		{"R_ARM_MOVT_PREL", Const, 10, ""},
+		{"R_ARM_MOVW_ABS_NC", Const, 10, ""},
+		{"R_ARM_MOVW_BREL", Const, 10, ""},
+		{"R_ARM_MOVW_BREL_NC", Const, 10, ""},
+		{"R_ARM_MOVW_PREL_NC", Const, 10, ""},
+		{"R_ARM_NONE", Const, 0, ""},
+		{"R_ARM_PC13", Const, 0, ""},
+		{"R_ARM_PC24", Const, 0, ""},
+		{"R_ARM_PLT32", Const, 0, ""},
+		{"R_ARM_PLT32_ABS", Const, 10, ""},
+		{"R_ARM_PREL31", Const, 10, ""},
+		{"R_ARM_PRIVATE_0", Const, 10, ""},
+		{"R_ARM_PRIVATE_1", Const, 10, ""},
+		{"R_ARM_PRIVATE_10", Const, 10, ""},
+		{"R_ARM_PRIVATE_11", Const, 10, ""},
+		{"R_ARM_PRIVATE_12", Const, 10, ""},
+		{"R_ARM_PRIVATE_13", Const, 10, ""},
+		{"R_ARM_PRIVATE_14", Const, 10, ""},
+		{"R_ARM_PRIVATE_15", Const, 10, ""},
+		{"R_ARM_PRIVATE_2", Const, 10, ""},
+		{"R_ARM_PRIVATE_3", Const, 10, ""},
+		{"R_ARM_PRIVATE_4", Const, 10, ""},
+		{"R_ARM_PRIVATE_5", Const, 10, ""},
+		{"R_ARM_PRIVATE_6", Const, 10, ""},
+		{"R_ARM_PRIVATE_7", Const, 10, ""},
+		{"R_ARM_PRIVATE_8", Const, 10, ""},
+		{"R_ARM_PRIVATE_9", Const, 10, ""},
+		{"R_ARM_RABS32", Const, 0, ""},
+		{"R_ARM_RBASE", Const, 0, ""},
+		{"R_ARM_REL32", Const, 0, ""},
+		{"R_ARM_REL32_NOI", Const, 10, ""},
+		{"R_ARM_RELATIVE", Const, 0, ""},
+		{"R_ARM_RPC24", Const, 0, ""},
+		{"R_ARM_RREL32", Const, 0, ""},
+		{"R_ARM_RSBREL32", Const, 0, ""},
+		{"R_ARM_RXPC25", Const, 10, ""},
+		{"R_ARM_SBREL31", Const, 10, ""},
+		{"R_ARM_SBREL32", Const, 0, ""},
+		{"R_ARM_SWI24", Const, 0, ""},
+		{"R_ARM_TARGET1", Const, 10, ""},
+		{"R_ARM_TARGET2", Const, 10, ""},
+		{"R_ARM_THM_ABS5", Const, 0, ""},
+		{"R_ARM_THM_ALU_ABS_G0_NC", Const, 10, ""},
+		{"R_ARM_THM_ALU_ABS_G1_NC", Const, 10, ""},
+		{"R_ARM_THM_ALU_ABS_G2_NC", Const, 10, ""},
+		{"R_ARM_THM_ALU_ABS_G3", Const, 10, ""},
+		{"R_ARM_THM_ALU_PREL_11_0", Const, 10, ""},
+		{"R_ARM_THM_GOT_BREL12", Const, 10, ""},
+		{"R_ARM_THM_JUMP11", Const, 10, ""},
+		{"R_ARM_THM_JUMP19", Const, 10, ""},
+		{"R_ARM_THM_JUMP24", Const, 10, ""},
+		{"R_ARM_THM_JUMP6", Const, 10, ""},
+		{"R_ARM_THM_JUMP8", Const, 10, ""},
+		{"R_ARM_THM_MOVT_ABS", Const, 10, ""},
+		{"R_ARM_THM_MOVT_BREL", Const, 10, ""},
+		{"R_ARM_THM_MOVT_PREL", Const, 10, ""},
+		{"R_ARM_THM_MOVW_ABS_NC", Const, 10, ""},
+		{"R_ARM_THM_MOVW_BREL", Const, 10, ""},
+		{"R_ARM_THM_MOVW_BREL_NC", Const, 10, ""},
+		{"R_ARM_THM_MOVW_PREL_NC", Const, 10, ""},
+		{"R_ARM_THM_PC12", Const, 10, ""},
+		{"R_ARM_THM_PC22", Const, 0, ""},
+		{"R_ARM_THM_PC8", Const, 0, ""},
+		{"R_ARM_THM_RPC22", Const, 0, ""},
+		{"R_ARM_THM_SWI8", Const, 0, ""},
+		{"R_ARM_THM_TLS_CALL", Const, 10, ""},
+		{"R_ARM_THM_TLS_DESCSEQ16", Const, 10, ""},
+		{"R_ARM_THM_TLS_DESCSEQ32", Const, 10, ""},
+		{"R_ARM_THM_XPC22", Const, 0, ""},
+		{"R_ARM_TLS_CALL", Const, 10, ""},
+		{"R_ARM_TLS_DESCSEQ", Const, 10, ""},
+		{"R_ARM_TLS_DTPMOD32", Const, 10, ""},
+		{"R_ARM_TLS_DTPOFF32", Const, 10, ""},
+		{"R_ARM_TLS_GD32", Const, 10, ""},
+		{"R_ARM_TLS_GOTDESC", Const, 10, ""},
+		{"R_ARM_TLS_IE12GP", Const, 10, ""},
+		{"R_ARM_TLS_IE32", Const, 10, ""},
+		{"R_ARM_TLS_LDM32", Const, 10, ""},
+		{"R_ARM_TLS_LDO12", Const, 10, ""},
+		{"R_ARM_TLS_LDO32", Const, 10, ""},
+		{"R_ARM_TLS_LE12", Const, 10, ""},
+		{"R_ARM_TLS_LE32", Const, 10, ""},
+		{"R_ARM_TLS_TPOFF32", Const, 10, ""},
+		{"R_ARM_V4BX", Const, 10, ""},
+		{"R_ARM_XPC25", Const, 0, ""},
+		{"R_INFO", Func, 0, "func(sym uint32, typ uint32) uint64"},
+		{"R_INFO32", Func, 0, "func(sym uint32, typ uint32) uint32"},
+		{"R_LARCH", Type, 19, ""},
+		{"R_LARCH_32", Const, 19, ""},
+		{"R_LARCH_32_PCREL", Const, 20, ""},
+		{"R_LARCH_64", Const, 19, ""},
+		{"R_LARCH_64_PCREL", Const, 22, ""},
+		{"R_LARCH_ABS64_HI12", Const, 20, ""},
+		{"R_LARCH_ABS64_LO20", Const, 20, ""},
+		{"R_LARCH_ABS_HI20", Const, 20, ""},
+		{"R_LARCH_ABS_LO12", Const, 20, ""},
+		{"R_LARCH_ADD16", Const, 19, ""},
+		{"R_LARCH_ADD24", Const, 19, ""},
+		{"R_LARCH_ADD32", Const, 19, ""},
+		{"R_LARCH_ADD6", Const, 22, ""},
+		{"R_LARCH_ADD64", Const, 19, ""},
+		{"R_LARCH_ADD8", Const, 19, ""},
+		{"R_LARCH_ADD_ULEB128", Const, 22, ""},
+		{"R_LARCH_ALIGN", Const, 22, ""},
+		{"R_LARCH_B16", Const, 20, ""},
+		{"R_LARCH_B21", Const, 20, ""},
+		{"R_LARCH_B26", Const, 20, ""},
+		{"R_LARCH_CFA", Const, 22, ""},
+		{"R_LARCH_COPY", Const, 19, ""},
+		{"R_LARCH_DELETE", Const, 22, ""},
+		{"R_LARCH_GNU_VTENTRY", Const, 20, ""},
+		{"R_LARCH_GNU_VTINHERIT", Const, 20, ""},
+		{"R_LARCH_GOT64_HI12", Const, 20, ""},
+		{"R_LARCH_GOT64_LO20", Const, 20, ""},
+		{"R_LARCH_GOT64_PC_HI12", Const, 20, ""},
+		{"R_LARCH_GOT64_PC_LO20", Const, 20, ""},
+		{"R_LARCH_GOT_HI20", Const, 20, ""},
+		{"R_LARCH_GOT_LO12", Const, 20, ""},
+		{"R_LARCH_GOT_PC_HI20", Const, 20, ""},
+		{"R_LARCH_GOT_PC_LO12", Const, 20, ""},
+		{"R_LARCH_IRELATIVE", Const, 19, ""},
+		{"R_LARCH_JUMP_SLOT", Const, 19, ""},
+		{"R_LARCH_MARK_LA", Const, 19, ""},
+		{"R_LARCH_MARK_PCREL", Const, 19, ""},
+		{"R_LARCH_NONE", Const, 19, ""},
+		{"R_LARCH_PCALA64_HI12", Const, 20, ""},
+		{"R_LARCH_PCALA64_LO20", Const, 20, ""},
+		{"R_LARCH_PCALA_HI20", Const, 20, ""},
+		{"R_LARCH_PCALA_LO12", Const, 20, ""},
+		{"R_LARCH_PCREL20_S2", Const, 22, ""},
+		{"R_LARCH_RELATIVE", Const, 19, ""},
+		{"R_LARCH_RELAX", Const, 20, ""},
+		{"R_LARCH_SOP_ADD", Const, 19, ""},
+		{"R_LARCH_SOP_AND", Const, 19, ""},
+		{"R_LARCH_SOP_ASSERT", Const, 19, ""},
+		{"R_LARCH_SOP_IF_ELSE", Const, 19, ""},
+		{"R_LARCH_SOP_NOT", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_S_0_10_10_16_S2", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_S_0_5_10_16_S2", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_S_10_12", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_S_10_16", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_S_10_16_S2", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_S_10_5", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_S_5_20", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_U", Const, 19, ""},
+		{"R_LARCH_SOP_POP_32_U_10_12", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_ABSOLUTE", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_DUP", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_GPREL", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_PCREL", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_PLT_PCREL", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_TLS_GD", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_TLS_GOT", Const, 19, ""},
+		{"R_LARCH_SOP_PUSH_TLS_TPREL", Const, 19, ""},
+		{"R_LARCH_SOP_SL", Const, 19, ""},
+		{"R_LARCH_SOP_SR", Const, 19, ""},
+		{"R_LARCH_SOP_SUB", Const, 19, ""},
+		{"R_LARCH_SUB16", Const, 19, ""},
+		{"R_LARCH_SUB24", Const, 19, ""},
+		{"R_LARCH_SUB32", Const, 19, ""},
+		{"R_LARCH_SUB6", Const, 22, ""},
+		{"R_LARCH_SUB64", Const, 19, ""},
+		{"R_LARCH_SUB8", Const, 19, ""},
+		{"R_LARCH_SUB_ULEB128", Const, 22, ""},
+		{"R_LARCH_TLS_DTPMOD32", Const, 19, ""},
+		{"R_LARCH_TLS_DTPMOD64", Const, 19, ""},
+		{"R_LARCH_TLS_DTPREL32", Const, 19, ""},
+		{"R_LARCH_TLS_DTPREL64", Const, 19, ""},
+		{"R_LARCH_TLS_GD_HI20", Const, 20, ""},
+		{"R_LARCH_TLS_GD_PC_HI20", Const, 20, ""},
+		{"R_LARCH_TLS_IE64_HI12", Const, 20, ""},
+		{"R_LARCH_TLS_IE64_LO20", Const, 20, ""},
+		{"R_LARCH_TLS_IE64_PC_HI12", Const, 20, ""},
+		{"R_LARCH_TLS_IE64_PC_LO20", Const, 20, ""},
+		{"R_LARCH_TLS_IE_HI20", Const, 20, ""},
+		{"R_LARCH_TLS_IE_LO12", Const, 20, ""},
+		{"R_LARCH_TLS_IE_PC_HI20", Const, 20, ""},
+		{"R_LARCH_TLS_IE_PC_LO12", Const, 20, ""},
+		{"R_LARCH_TLS_LD_HI20", Const, 20, ""},
+		{"R_LARCH_TLS_LD_PC_HI20", Const, 20, ""},
+		{"R_LARCH_TLS_LE64_HI12", Const, 20, ""},
+		{"R_LARCH_TLS_LE64_LO20", Const, 20, ""},
+		{"R_LARCH_TLS_LE_HI20", Const, 20, ""},
+		{"R_LARCH_TLS_LE_LO12", Const, 20, ""},
+		{"R_LARCH_TLS_TPREL32", Const, 19, ""},
+		{"R_LARCH_TLS_TPREL64", Const, 19, ""},
+		{"R_MIPS", Type, 6, ""},
+		{"R_MIPS_16", Const, 6, ""},
+		{"R_MIPS_26", Const, 6, ""},
+		{"R_MIPS_32", Const, 6, ""},
+		{"R_MIPS_64", Const, 6, ""},
+		{"R_MIPS_ADD_IMMEDIATE", Const, 6, ""},
+		{"R_MIPS_CALL16", Const, 6, ""},
+		{"R_MIPS_CALL_HI16", Const, 6, ""},
+		{"R_MIPS_CALL_LO16", Const, 6, ""},
+		{"R_MIPS_DELETE", Const, 6, ""},
+		{"R_MIPS_GOT16", Const, 6, ""},
+		{"R_MIPS_GOT_DISP", Const, 6, ""},
+		{"R_MIPS_GOT_HI16", Const, 6, ""},
+		{"R_MIPS_GOT_LO16", Const, 6, ""},
+		{"R_MIPS_GOT_OFST", Const, 6, ""},
+		{"R_MIPS_GOT_PAGE", Const, 6, ""},
+		{"R_MIPS_GPREL16", Const, 6, ""},
+		{"R_MIPS_GPREL32", Const, 6, ""},
+		{"R_MIPS_HI16", Const, 6, ""},
+		{"R_MIPS_HIGHER", Const, 6, ""},
+		{"R_MIPS_HIGHEST", Const, 6, ""},
+		{"R_MIPS_INSERT_A", Const, 6, ""},
+		{"R_MIPS_INSERT_B", Const, 6, ""},
+		{"R_MIPS_JALR", Const, 6, ""},
+		{"R_MIPS_LITERAL", Const, 6, ""},
+		{"R_MIPS_LO16", Const, 6, ""},
+		{"R_MIPS_NONE", Const, 6, ""},
+		{"R_MIPS_PC16", Const, 6, ""},
+		{"R_MIPS_PC32", Const, 22, ""},
+		{"R_MIPS_PJUMP", Const, 6, ""},
+		{"R_MIPS_REL16", Const, 6, ""},
+		{"R_MIPS_REL32", Const, 6, ""},
+		{"R_MIPS_RELGOT", Const, 6, ""},
+		{"R_MIPS_SCN_DISP", Const, 6, ""},
+		{"R_MIPS_SHIFT5", Const, 6, ""},
+		{"R_MIPS_SHIFT6", Const, 6, ""},
+		{"R_MIPS_SUB", Const, 6, ""},
+		{"R_MIPS_TLS_DTPMOD32", Const, 6, ""},
+		{"R_MIPS_TLS_DTPMOD64", Const, 6, ""},
+		{"R_MIPS_TLS_DTPREL32", Const, 6, ""},
+		{"R_MIPS_TLS_DTPREL64", Const, 6, ""},
+		{"R_MIPS_TLS_DTPREL_HI16", Const, 6, ""},
+		{"R_MIPS_TLS_DTPREL_LO16", Const, 6, ""},
+		{"R_MIPS_TLS_GD", Const, 6, ""},
+		{"R_MIPS_TLS_GOTTPREL", Const, 6, ""},
+		{"R_MIPS_TLS_LDM", Const, 6, ""},
+		{"R_MIPS_TLS_TPREL32", Const, 6, ""},
+		{"R_MIPS_TLS_TPREL64", Const, 6, ""},
+		{"R_MIPS_TLS_TPREL_HI16", Const, 6, ""},
+		{"R_MIPS_TLS_TPREL_LO16", Const, 6, ""},
+		{"R_PPC", Type, 0, ""},
+		{"R_PPC64", Type, 5, ""},
+		{"R_PPC64_ADDR14", Const, 5, ""},
+		{"R_PPC64_ADDR14_BRNTAKEN", Const, 5, ""},
+		{"R_PPC64_ADDR14_BRTAKEN", Const, 5, ""},
+		{"R_PPC64_ADDR16", Const, 5, ""},
+		{"R_PPC64_ADDR16_DS", Const, 5, ""},
+		{"R_PPC64_ADDR16_HA", Const, 5, ""},
+		{"R_PPC64_ADDR16_HI", Const, 5, ""},
+		{"R_PPC64_ADDR16_HIGH", Const, 10, ""},
+		{"R_PPC64_ADDR16_HIGHA", Const, 10, ""},
+		{"R_PPC64_ADDR16_HIGHER", Const, 5, ""},
+		{"R_PPC64_ADDR16_HIGHER34", Const, 20, ""},
+		{"R_PPC64_ADDR16_HIGHERA", Const, 5, ""},
+		{"R_PPC64_ADDR16_HIGHERA34", Const, 20, ""},
+		{"R_PPC64_ADDR16_HIGHEST", Const, 5, ""},
+		{"R_PPC64_ADDR16_HIGHEST34", Const, 20, ""},
+		{"R_PPC64_ADDR16_HIGHESTA", Const, 5, ""},
+		{"R_PPC64_ADDR16_HIGHESTA34", Const, 20, ""},
+		{"R_PPC64_ADDR16_LO", Const, 5, ""},
+		{"R_PPC64_ADDR16_LO_DS", Const, 5, ""},
+		{"R_PPC64_ADDR24", Const, 5, ""},
+		{"R_PPC64_ADDR32", Const, 5, ""},
+		{"R_PPC64_ADDR64", Const, 5, ""},
+		{"R_PPC64_ADDR64_LOCAL", Const, 10, ""},
+		{"R_PPC64_COPY", Const, 20, ""},
+		{"R_PPC64_D28", Const, 20, ""},
+		{"R_PPC64_D34", Const, 20, ""},
+		{"R_PPC64_D34_HA30", Const, 20, ""},
+		{"R_PPC64_D34_HI30", Const, 20, ""},
+		{"R_PPC64_D34_LO", Const, 20, ""},
+		{"R_PPC64_DTPMOD64", Const, 5, ""},
+		{"R_PPC64_DTPREL16", Const, 5, ""},
+		{"R_PPC64_DTPREL16_DS", Const, 5, ""},
+		{"R_PPC64_DTPREL16_HA", Const, 5, ""},
+		{"R_PPC64_DTPREL16_HI", Const, 5, ""},
+		{"R_PPC64_DTPREL16_HIGH", Const, 10, ""},
+		{"R_PPC64_DTPREL16_HIGHA", Const, 10, ""},
+		{"R_PPC64_DTPREL16_HIGHER", Const, 5, ""},
+		{"R_PPC64_DTPREL16_HIGHERA", Const, 5, ""},
+		{"R_PPC64_DTPREL16_HIGHEST", Const, 5, ""},
+		{"R_PPC64_DTPREL16_HIGHESTA", Const, 5, ""},
+		{"R_PPC64_DTPREL16_LO", Const, 5, ""},
+		{"R_PPC64_DTPREL16_LO_DS", Const, 5, ""},
+		{"R_PPC64_DTPREL34", Const, 20, ""},
+		{"R_PPC64_DTPREL64", Const, 5, ""},
+		{"R_PPC64_ENTRY", Const, 10, ""},
+		{"R_PPC64_GLOB_DAT", Const, 20, ""},
+		{"R_PPC64_GNU_VTENTRY", Const, 20, ""},
+		{"R_PPC64_GNU_VTINHERIT", Const, 20, ""},
+		{"R_PPC64_GOT16", Const, 5, ""},
+		{"R_PPC64_GOT16_DS", Const, 5, ""},
+		{"R_PPC64_GOT16_HA", Const, 5, ""},
+		{"R_PPC64_GOT16_HI", Const, 5, ""},
+		{"R_PPC64_GOT16_LO", Const, 5, ""},
+		{"R_PPC64_GOT16_LO_DS", Const, 5, ""},
+		{"R_PPC64_GOT_DTPREL16_DS", Const, 5, ""},
+		{"R_PPC64_GOT_DTPREL16_HA", Const, 5, ""},
+		{"R_PPC64_GOT_DTPREL16_HI", Const, 5, ""},
+		{"R_PPC64_GOT_DTPREL16_LO_DS", Const, 5, ""},
+		{"R_PPC64_GOT_DTPREL_PCREL34", Const, 20, ""},
+		{"R_PPC64_GOT_PCREL34", Const, 20, ""},
+		{"R_PPC64_GOT_TLSGD16", Const, 5, ""},
+		{"R_PPC64_GOT_TLSGD16_HA", Const, 5, ""},
+		{"R_PPC64_GOT_TLSGD16_HI", Const, 5, ""},
+		{"R_PPC64_GOT_TLSGD16_LO", Const, 5, ""},
+		{"R_PPC64_GOT_TLSGD_PCREL34", Const, 20, ""},
+		{"R_PPC64_GOT_TLSLD16", Const, 5, ""},
+		{"R_PPC64_GOT_TLSLD16_HA", Const, 5, ""},
+		{"R_PPC64_GOT_TLSLD16_HI", Const, 5, ""},
+		{"R_PPC64_GOT_TLSLD16_LO", Const, 5, ""},
+		{"R_PPC64_GOT_TLSLD_PCREL34", Const, 20, ""},
+		{"R_PPC64_GOT_TPREL16_DS", Const, 5, ""},
+		{"R_PPC64_GOT_TPREL16_HA", Const, 5, ""},
+		{"R_PPC64_GOT_TPREL16_HI", Const, 5, ""},
+		{"R_PPC64_GOT_TPREL16_LO_DS", Const, 5, ""},
+		{"R_PPC64_GOT_TPREL_PCREL34", Const, 20, ""},
+		{"R_PPC64_IRELATIVE", Const, 10, ""},
+		{"R_PPC64_JMP_IREL", Const, 10, ""},
+		{"R_PPC64_JMP_SLOT", Const, 5, ""},
+		{"R_PPC64_NONE", Const, 5, ""},
+		{"R_PPC64_PCREL28", Const, 20, ""},
+		{"R_PPC64_PCREL34", Const, 20, ""},
+		{"R_PPC64_PCREL_OPT", Const, 20, ""},
+		{"R_PPC64_PLT16_HA", Const, 20, ""},
+		{"R_PPC64_PLT16_HI", Const, 20, ""},
+		{"R_PPC64_PLT16_LO", Const, 20, ""},
+		{"R_PPC64_PLT16_LO_DS", Const, 10, ""},
+		{"R_PPC64_PLT32", Const, 20, ""},
+		{"R_PPC64_PLT64", Const, 20, ""},
+		{"R_PPC64_PLTCALL", Const, 20, ""},
+		{"R_PPC64_PLTCALL_NOTOC", Const, 20, ""},
+		{"R_PPC64_PLTGOT16", Const, 10, ""},
+		{"R_PPC64_PLTGOT16_DS", Const, 10, ""},
+		{"R_PPC64_PLTGOT16_HA", Const, 10, ""},
+		{"R_PPC64_PLTGOT16_HI", Const, 10, ""},
+		{"R_PPC64_PLTGOT16_LO", Const, 10, ""},
+		{"R_PPC64_PLTGOT_LO_DS", Const, 10, ""},
+		{"R_PPC64_PLTREL32", Const, 20, ""},
+		{"R_PPC64_PLTREL64", Const, 20, ""},
+		{"R_PPC64_PLTSEQ", Const, 20, ""},
+		{"R_PPC64_PLTSEQ_NOTOC", Const, 20, ""},
+		{"R_PPC64_PLT_PCREL34", Const, 20, ""},
+		{"R_PPC64_PLT_PCREL34_NOTOC", Const, 20, ""},
+		{"R_PPC64_REL14", Const, 5, ""},
+		{"R_PPC64_REL14_BRNTAKEN", Const, 5, ""},
+		{"R_PPC64_REL14_BRTAKEN", Const, 5, ""},
+		{"R_PPC64_REL16", Const, 5, ""},
+		{"R_PPC64_REL16DX_HA", Const, 10, ""},
+		{"R_PPC64_REL16_HA", Const, 5, ""},
+		{"R_PPC64_REL16_HI", Const, 5, ""},
+		{"R_PPC64_REL16_HIGH", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHA", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHER", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHER34", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHERA", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHERA34", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHEST", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHEST34", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHESTA", Const, 20, ""},
+		{"R_PPC64_REL16_HIGHESTA34", Const, 20, ""},
+		{"R_PPC64_REL16_LO", Const, 5, ""},
+		{"R_PPC64_REL24", Const, 5, ""},
+		{"R_PPC64_REL24_NOTOC", Const, 10, ""},
+		{"R_PPC64_REL24_P9NOTOC", Const, 21, ""},
+		{"R_PPC64_REL30", Const, 20, ""},
+		{"R_PPC64_REL32", Const, 5, ""},
+		{"R_PPC64_REL64", Const, 5, ""},
+		{"R_PPC64_RELATIVE", Const, 18, ""},
+		{"R_PPC64_SECTOFF", Const, 20, ""},
+		{"R_PPC64_SECTOFF_DS", Const, 10, ""},
+		{"R_PPC64_SECTOFF_HA", Const, 20, ""},
+		{"R_PPC64_SECTOFF_HI", Const, 20, ""},
+		{"R_PPC64_SECTOFF_LO", Const, 20, ""},
+		{"R_PPC64_SECTOFF_LO_DS", Const, 10, ""},
+		{"R_PPC64_TLS", Const, 5, ""},
+		{"R_PPC64_TLSGD", Const, 5, ""},
+		{"R_PPC64_TLSLD", Const, 5, ""},
+		{"R_PPC64_TOC", Const, 5, ""},
+		{"R_PPC64_TOC16", Const, 5, ""},
+		{"R_PPC64_TOC16_DS", Const, 5, ""},
+		{"R_PPC64_TOC16_HA", Const, 5, ""},
+		{"R_PPC64_TOC16_HI", Const, 5, ""},
+		{"R_PPC64_TOC16_LO", Const, 5, ""},
+		{"R_PPC64_TOC16_LO_DS", Const, 5, ""},
+		{"R_PPC64_TOCSAVE", Const, 10, ""},
+		{"R_PPC64_TPREL16", Const, 5, ""},
+		{"R_PPC64_TPREL16_DS", Const, 5, ""},
+		{"R_PPC64_TPREL16_HA", Const, 5, ""},
+		{"R_PPC64_TPREL16_HI", Const, 5, ""},
+		{"R_PPC64_TPREL16_HIGH", Const, 10, ""},
+		{"R_PPC64_TPREL16_HIGHA", Const, 10, ""},
+		{"R_PPC64_TPREL16_HIGHER", Const, 5, ""},
+		{"R_PPC64_TPREL16_HIGHERA", Const, 5, ""},
+		{"R_PPC64_TPREL16_HIGHEST", Const, 5, ""},
+		{"R_PPC64_TPREL16_HIGHESTA", Const, 5, ""},
+		{"R_PPC64_TPREL16_LO", Const, 5, ""},
+		{"R_PPC64_TPREL16_LO_DS", Const, 5, ""},
+		{"R_PPC64_TPREL34", Const, 20, ""},
+		{"R_PPC64_TPREL64", Const, 5, ""},
+		{"R_PPC64_UADDR16", Const, 20, ""},
+		{"R_PPC64_UADDR32", Const, 20, ""},
+		{"R_PPC64_UADDR64", Const, 20, ""},
+		{"R_PPC_ADDR14", Const, 0, ""},
+		{"R_PPC_ADDR14_BRNTAKEN", Const, 0, ""},
+		{"R_PPC_ADDR14_BRTAKEN", Const, 0, ""},
+		{"R_PPC_ADDR16", Const, 0, ""},
+		{"R_PPC_ADDR16_HA", Const, 0, ""},
+		{"R_PPC_ADDR16_HI", Const, 0, ""},
+		{"R_PPC_ADDR16_LO", Const, 0, ""},
+		{"R_PPC_ADDR24", Const, 0, ""},
+		{"R_PPC_ADDR32", Const, 0, ""},
+		{"R_PPC_COPY", Const, 0, ""},
+		{"R_PPC_DTPMOD32", Const, 0, ""},
+		{"R_PPC_DTPREL16", Const, 0, ""},
+		{"R_PPC_DTPREL16_HA", Const, 0, ""},
+		{"R_PPC_DTPREL16_HI", Const, 0, ""},
+		{"R_PPC_DTPREL16_LO", Const, 0, ""},
+		{"R_PPC_DTPREL32", Const, 0, ""},
+		{"R_PPC_EMB_BIT_FLD", Const, 0, ""},
+		{"R_PPC_EMB_MRKREF", Const, 0, ""},
+		{"R_PPC_EMB_NADDR16", Const, 0, ""},
+		{"R_PPC_EMB_NADDR16_HA", Const, 0, ""},
+		{"R_PPC_EMB_NADDR16_HI", Const, 0, ""},
+		{"R_PPC_EMB_NADDR16_LO", Const, 0, ""},
+		{"R_PPC_EMB_NADDR32", Const, 0, ""},
+		{"R_PPC_EMB_RELSDA", Const, 0, ""},
+		{"R_PPC_EMB_RELSEC16", Const, 0, ""},
+		{"R_PPC_EMB_RELST_HA", Const, 0, ""},
+		{"R_PPC_EMB_RELST_HI", Const, 0, ""},
+		{"R_PPC_EMB_RELST_LO", Const, 0, ""},
+		{"R_PPC_EMB_SDA21", Const, 0, ""},
+		{"R_PPC_EMB_SDA2I16", Const, 0, ""},
+		{"R_PPC_EMB_SDA2REL", Const, 0, ""},
+		{"R_PPC_EMB_SDAI16", Const, 0, ""},
+		{"R_PPC_GLOB_DAT", Const, 0, ""},
+		{"R_PPC_GOT16", Const, 0, ""},
+		{"R_PPC_GOT16_HA", Const, 0, ""},
+		{"R_PPC_GOT16_HI", Const, 0, ""},
+		{"R_PPC_GOT16_LO", Const, 0, ""},
+		{"R_PPC_GOT_TLSGD16", Const, 0, ""},
+		{"R_PPC_GOT_TLSGD16_HA", Const, 0, ""},
+		{"R_PPC_GOT_TLSGD16_HI", Const, 0, ""},
+		{"R_PPC_GOT_TLSGD16_LO", Const, 0, ""},
+		{"R_PPC_GOT_TLSLD16", Const, 0, ""},
+		{"R_PPC_GOT_TLSLD16_HA", Const, 0, ""},
+		{"R_PPC_GOT_TLSLD16_HI", Const, 0, ""},
+		{"R_PPC_GOT_TLSLD16_LO", Const, 0, ""},
+		{"R_PPC_GOT_TPREL16", Const, 0, ""},
+		{"R_PPC_GOT_TPREL16_HA", Const, 0, ""},
+		{"R_PPC_GOT_TPREL16_HI", Const, 0, ""},
+		{"R_PPC_GOT_TPREL16_LO", Const, 0, ""},
+		{"R_PPC_JMP_SLOT", Const, 0, ""},
+		{"R_PPC_LOCAL24PC", Const, 0, ""},
+		{"R_PPC_NONE", Const, 0, ""},
+		{"R_PPC_PLT16_HA", Const, 0, ""},
+		{"R_PPC_PLT16_HI", Const, 0, ""},
+		{"R_PPC_PLT16_LO", Const, 0, ""},
+		{"R_PPC_PLT32", Const, 0, ""},
+		{"R_PPC_PLTREL24", Const, 0, ""},
+		{"R_PPC_PLTREL32", Const, 0, ""},
+		{"R_PPC_REL14", Const, 0, ""},
+		{"R_PPC_REL14_BRNTAKEN", Const, 0, ""},
+		{"R_PPC_REL14_BRTAKEN", Const, 0, ""},
+		{"R_PPC_REL24", Const, 0, ""},
+		{"R_PPC_REL32", Const, 0, ""},
+		{"R_PPC_RELATIVE", Const, 0, ""},
+		{"R_PPC_SDAREL16", Const, 0, ""},
+		{"R_PPC_SECTOFF", Const, 0, ""},
+		{"R_PPC_SECTOFF_HA", Const, 0, ""},
+		{"R_PPC_SECTOFF_HI", Const, 0, ""},
+		{"R_PPC_SECTOFF_LO", Const, 0, ""},
+		{"R_PPC_TLS", Const, 0, ""},
+		{"R_PPC_TPREL16", Const, 0, ""},
+		{"R_PPC_TPREL16_HA", Const, 0, ""},
+		{"R_PPC_TPREL16_HI", Const, 0, ""},
+		{"R_PPC_TPREL16_LO", Const, 0, ""},
+		{"R_PPC_TPREL32", Const, 0, ""},
+		{"R_PPC_UADDR16", Const, 0, ""},
+		{"R_PPC_UADDR32", Const, 0, ""},
+		{"R_RISCV", Type, 11, ""},
+		{"R_RISCV_32", Const, 11, ""},
+		{"R_RISCV_32_PCREL", Const, 12, ""},
+		{"R_RISCV_64", Const, 11, ""},
+		{"R_RISCV_ADD16", Const, 11, ""},
+		{"R_RISCV_ADD32", Const, 11, ""},
+		{"R_RISCV_ADD64", Const, 11, ""},
+		{"R_RISCV_ADD8", Const, 11, ""},
+		{"R_RISCV_ALIGN", Const, 11, ""},
+		{"R_RISCV_BRANCH", Const, 11, ""},
+		{"R_RISCV_CALL", Const, 11, ""},
+		{"R_RISCV_CALL_PLT", Const, 11, ""},
+		{"R_RISCV_COPY", Const, 11, ""},
+		{"R_RISCV_GNU_VTENTRY", Const, 11, ""},
+		{"R_RISCV_GNU_VTINHERIT", Const, 11, ""},
+		{"R_RISCV_GOT_HI20", Const, 11, ""},
+		{"R_RISCV_GPREL_I", Const, 11, ""},
+		{"R_RISCV_GPREL_S", Const, 11, ""},
+		{"R_RISCV_HI20", Const, 11, ""},
+		{"R_RISCV_JAL", Const, 11, ""},
+		{"R_RISCV_JUMP_SLOT", Const, 11, ""},
+		{"R_RISCV_LO12_I", Const, 11, ""},
+		{"R_RISCV_LO12_S", Const, 11, ""},
+		{"R_RISCV_NONE", Const, 11, ""},
+		{"R_RISCV_PCREL_HI20", Const, 11, ""},
+		{"R_RISCV_PCREL_LO12_I", Const, 11, ""},
+		{"R_RISCV_PCREL_LO12_S", Const, 11, ""},
+		{"R_RISCV_RELATIVE", Const, 11, ""},
+		{"R_RISCV_RELAX", Const, 11, ""},
+		{"R_RISCV_RVC_BRANCH", Const, 11, ""},
+		{"R_RISCV_RVC_JUMP", Const, 11, ""},
+		{"R_RISCV_RVC_LUI", Const, 11, ""},
+		{"R_RISCV_SET16", Const, 11, ""},
+		{"R_RISCV_SET32", Const, 11, ""},
+		{"R_RISCV_SET6", Const, 11, ""},
+		{"R_RISCV_SET8", Const, 11, ""},
+		{"R_RISCV_SUB16", Const, 11, ""},
+		{"R_RISCV_SUB32", Const, 11, ""},
+		{"R_RISCV_SUB6", Const, 11, ""},
+		{"R_RISCV_SUB64", Const, 11, ""},
+		{"R_RISCV_SUB8", Const, 11, ""},
+		{"R_RISCV_TLS_DTPMOD32", Const, 11, ""},
+		{"R_RISCV_TLS_DTPMOD64", Const, 11, ""},
+		{"R_RISCV_TLS_DTPREL32", Const, 11, ""},
+		{"R_RISCV_TLS_DTPREL64", Const, 11, ""},
+		{"R_RISCV_TLS_GD_HI20", Const, 11, ""},
+		{"R_RISCV_TLS_GOT_HI20", Const, 11, ""},
+		{"R_RISCV_TLS_TPREL32", Const, 11, ""},
+		{"R_RISCV_TLS_TPREL64", Const, 11, ""},
+		{"R_RISCV_TPREL_ADD", Const, 11, ""},
+		{"R_RISCV_TPREL_HI20", Const, 11, ""},
+		{"R_RISCV_TPREL_I", Const, 11, ""},
+		{"R_RISCV_TPREL_LO12_I", Const, 11, ""},
+		{"R_RISCV_TPREL_LO12_S", Const, 11, ""},
+		{"R_RISCV_TPREL_S", Const, 11, ""},
+		{"R_SPARC", Type, 0, ""},
+		{"R_SPARC_10", Const, 0, ""},
+		{"R_SPARC_11", Const, 0, ""},
+		{"R_SPARC_13", Const, 0, ""},
+		{"R_SPARC_16", Const, 0, ""},
+		{"R_SPARC_22", Const, 0, ""},
+		{"R_SPARC_32", Const, 0, ""},
+		{"R_SPARC_5", Const, 0, ""},
+		{"R_SPARC_6", Const, 0, ""},
+		{"R_SPARC_64", Const, 0, ""},
+		{"R_SPARC_7", Const, 0, ""},
+		{"R_SPARC_8", Const, 0, ""},
+		{"R_SPARC_COPY", Const, 0, ""},
+		{"R_SPARC_DISP16", Const, 0, ""},
+		{"R_SPARC_DISP32", Const, 0, ""},
+		{"R_SPARC_DISP64", Const, 0, ""},
+		{"R_SPARC_DISP8", Const, 0, ""},
+		{"R_SPARC_GLOB_DAT", Const, 0, ""},
+		{"R_SPARC_GLOB_JMP", Const, 0, ""},
+		{"R_SPARC_GOT10", Const, 0, ""},
+		{"R_SPARC_GOT13", Const, 0, ""},
+		{"R_SPARC_GOT22", Const, 0, ""},
+		{"R_SPARC_H44", Const, 0, ""},
+		{"R_SPARC_HH22", Const, 0, ""},
+		{"R_SPARC_HI22", Const, 0, ""},
+		{"R_SPARC_HIPLT22", Const, 0, ""},
+		{"R_SPARC_HIX22", Const, 0, ""},
+		{"R_SPARC_HM10", Const, 0, ""},
+		{"R_SPARC_JMP_SLOT", Const, 0, ""},
+		{"R_SPARC_L44", Const, 0, ""},
+		{"R_SPARC_LM22", Const, 0, ""},
+		{"R_SPARC_LO10", Const, 0, ""},
+		{"R_SPARC_LOPLT10", Const, 0, ""},
+		{"R_SPARC_LOX10", Const, 0, ""},
+		{"R_SPARC_M44", Const, 0, ""},
+		{"R_SPARC_NONE", Const, 0, ""},
+		{"R_SPARC_OLO10", Const, 0, ""},
+		{"R_SPARC_PC10", Const, 0, ""},
+		{"R_SPARC_PC22", Const, 0, ""},
+		{"R_SPARC_PCPLT10", Const, 0, ""},
+		{"R_SPARC_PCPLT22", Const, 0, ""},
+		{"R_SPARC_PCPLT32", Const, 0, ""},
+		{"R_SPARC_PC_HH22", Const, 0, ""},
+		{"R_SPARC_PC_HM10", Const, 0, ""},
+		{"R_SPARC_PC_LM22", Const, 0, ""},
+		{"R_SPARC_PLT32", Const, 0, ""},
+		{"R_SPARC_PLT64", Const, 0, ""},
+		{"R_SPARC_REGISTER", Const, 0, ""},
+		{"R_SPARC_RELATIVE", Const, 0, ""},
+		{"R_SPARC_UA16", Const, 0, ""},
+		{"R_SPARC_UA32", Const, 0, ""},
+		{"R_SPARC_UA64", Const, 0, ""},
+		{"R_SPARC_WDISP16", Const, 0, ""},
+		{"R_SPARC_WDISP19", Const, 0, ""},
+		{"R_SPARC_WDISP22", Const, 0, ""},
+		{"R_SPARC_WDISP30", Const, 0, ""},
+		{"R_SPARC_WPLT30", Const, 0, ""},
+		{"R_SYM32", Func, 0, "func(info uint32) uint32"},
+		{"R_SYM64", Func, 0, "func(info uint64) uint32"},
+		{"R_TYPE32", Func, 0, "func(info uint32) uint32"},
+		{"R_TYPE64", Func, 0, "func(info uint64) uint32"},
+		{"R_X86_64", Type, 0, ""},
+		{"R_X86_64_16", Const, 0, ""},
+		{"R_X86_64_32", Const, 0, ""},
+		{"R_X86_64_32S", Const, 0, ""},
+		{"R_X86_64_64", Const, 0, ""},
+		{"R_X86_64_8", Const, 0, ""},
+		{"R_X86_64_COPY", Const, 0, ""},
+		{"R_X86_64_DTPMOD64", Const, 0, ""},
+		{"R_X86_64_DTPOFF32", Const, 0, ""},
+		{"R_X86_64_DTPOFF64", Const, 0, ""},
+		{"R_X86_64_GLOB_DAT", Const, 0, ""},
+		{"R_X86_64_GOT32", Const, 0, ""},
+		{"R_X86_64_GOT64", Const, 10, ""},
+		{"R_X86_64_GOTOFF64", Const, 10, ""},
+		{"R_X86_64_GOTPC32", Const, 10, ""},
+		{"R_X86_64_GOTPC32_TLSDESC", Const, 10, ""},
+		{"R_X86_64_GOTPC64", Const, 10, ""},
+		{"R_X86_64_GOTPCREL", Const, 0, ""},
+		{"R_X86_64_GOTPCREL64", Const, 10, ""},
+		{"R_X86_64_GOTPCRELX", Const, 10, ""},
+		{"R_X86_64_GOTPLT64", Const, 10, ""},
+		{"R_X86_64_GOTTPOFF", Const, 0, ""},
+		{"R_X86_64_IRELATIVE", Const, 10, ""},
+		{"R_X86_64_JMP_SLOT", Const, 0, ""},
+		{"R_X86_64_NONE", Const, 0, ""},
+		{"R_X86_64_PC16", Const, 0, ""},
+		{"R_X86_64_PC32", Const, 0, ""},
+		{"R_X86_64_PC32_BND", Const, 10, ""},
+		{"R_X86_64_PC64", Const, 10, ""},
+		{"R_X86_64_PC8", Const, 0, ""},
+		{"R_X86_64_PLT32", Const, 0, ""},
+		{"R_X86_64_PLT32_BND", Const, 10, ""},
+		{"R_X86_64_PLTOFF64", Const, 10, ""},
+		{"R_X86_64_RELATIVE", Const, 0, ""},
+		{"R_X86_64_RELATIVE64", Const, 10, ""},
+		{"R_X86_64_REX_GOTPCRELX", Const, 10, ""},
+		{"R_X86_64_SIZE32", Const, 10, ""},
+		{"R_X86_64_SIZE64", Const, 10, ""},
+		{"R_X86_64_TLSDESC", Const, 10, ""},
+		{"R_X86_64_TLSDESC_CALL", Const, 10, ""},
+		{"R_X86_64_TLSGD", Const, 0, ""},
+		{"R_X86_64_TLSLD", Const, 0, ""},
+		{"R_X86_64_TPOFF32", Const, 0, ""},
+		{"R_X86_64_TPOFF64", Const, 0, ""},
+		{"Rel32", Type, 0, ""},
+		{"Rel32.Info", Field, 0, ""},
+		{"Rel32.Off", Field, 0, ""},
+		{"Rel64", Type, 0, ""},
+		{"Rel64.Info", Field, 0, ""},
+		{"Rel64.Off", Field, 0, ""},
+		{"Rela32", Type, 0, ""},
+		{"Rela32.Addend", Field, 0, ""},
+		{"Rela32.Info", Field, 0, ""},
+		{"Rela32.Off", Field, 0, ""},
+		{"Rela64", Type, 0, ""},
+		{"Rela64.Addend", Field, 0, ""},
+		{"Rela64.Info", Field, 0, ""},
+		{"Rela64.Off", Field, 0, ""},
+		{"SHF_ALLOC", Const, 0, ""},
+		{"SHF_COMPRESSED", Const, 6, ""},
+		{"SHF_EXECINSTR", Const, 0, ""},
+		{"SHF_GROUP", Const, 0, ""},
+		{"SHF_INFO_LINK", Const, 0, ""},
+		{"SHF_LINK_ORDER", Const, 0, ""},
+		{"SHF_MASKOS", Const, 0, ""},
+		{"SHF_MASKPROC", Const, 0, ""},
+		{"SHF_MERGE", Const, 0, ""},
+		{"SHF_OS_NONCONFORMING", Const, 0, ""},
+		{"SHF_STRINGS", Const, 0, ""},
+		{"SHF_TLS", Const, 0, ""},
+		{"SHF_WRITE", Const, 0, ""},
+		{"SHN_ABS", Const, 0, ""},
+		{"SHN_COMMON", Const, 0, ""},
+		{"SHN_HIOS", Const, 0, ""},
+		{"SHN_HIPROC", Const, 0, ""},
+		{"SHN_HIRESERVE", Const, 0, ""},
+		{"SHN_LOOS", Const, 0, ""},
+		{"SHN_LOPROC", Const, 0, ""},
+		{"SHN_LORESERVE", Const, 0, ""},
+		{"SHN_UNDEF", Const, 0, ""},
+		{"SHN_XINDEX", Const, 0, ""},
+		{"SHT_DYNAMIC", Const, 0, ""},
+		{"SHT_DYNSYM", Const, 0, ""},
+		{"SHT_FINI_ARRAY", Const, 0, ""},
+		{"SHT_GNU_ATTRIBUTES", Const, 0, ""},
+		{"SHT_GNU_HASH", Const, 0, ""},
+		{"SHT_GNU_LIBLIST", Const, 0, ""},
+		{"SHT_GNU_VERDEF", Const, 0, ""},
+		{"SHT_GNU_VERNEED", Const, 0, ""},
+		{"SHT_GNU_VERSYM", Const, 0, ""},
+		{"SHT_GROUP", Const, 0, ""},
+		{"SHT_HASH", Const, 0, ""},
+		{"SHT_HIOS", Const, 0, ""},
+		{"SHT_HIPROC", Const, 0, ""},
+		{"SHT_HIUSER", Const, 0, ""},
+		{"SHT_INIT_ARRAY", Const, 0, ""},
+		{"SHT_LOOS", Const, 0, ""},
+		{"SHT_LOPROC", Const, 0, ""},
+		{"SHT_LOUSER", Const, 0, ""},
+		{"SHT_MIPS_ABIFLAGS", Const, 17, ""},
+		{"SHT_NOBITS", Const, 0, ""},
+		{"SHT_NOTE", Const, 0, ""},
+		{"SHT_NULL", Const, 0, ""},
+		{"SHT_PREINIT_ARRAY", Const, 0, ""},
+		{"SHT_PROGBITS", Const, 0, ""},
+		{"SHT_REL", Const, 0, ""},
+		{"SHT_RELA", Const, 0, ""},
+		{"SHT_RISCV_ATTRIBUTES", Const, 25, ""},
+		{"SHT_SHLIB", Const, 0, ""},
+		{"SHT_STRTAB", Const, 0, ""},
+		{"SHT_SYMTAB", Const, 0, ""},
+		{"SHT_SYMTAB_SHNDX", Const, 0, ""},
+		{"STB_GLOBAL", Const, 0, ""},
+		{"STB_HIOS", Const, 0, ""},
+		{"STB_HIPROC", Const, 0, ""},
+		{"STB_LOCAL", Const, 0, ""},
+		{"STB_LOOS", Const, 0, ""},
+		{"STB_LOPROC", Const, 0, ""},
+		{"STB_WEAK", Const, 0, ""},
+		{"STT_COMMON", Const, 0, ""},
+		{"STT_FILE", Const, 0, ""},
+		{"STT_FUNC", Const, 0, ""},
+		{"STT_GNU_IFUNC", Const, 23, ""},
+		{"STT_HIOS", Const, 0, ""},
+		{"STT_HIPROC", Const, 0, ""},
+		{"STT_LOOS", Const, 0, ""},
+		{"STT_LOPROC", Const, 0, ""},
+		{"STT_NOTYPE", Const, 0, ""},
+		{"STT_OBJECT", Const, 0, ""},
+		{"STT_RELC", Const, 23, ""},
+		{"STT_SECTION", Const, 0, ""},
+		{"STT_SRELC", Const, 23, ""},
+		{"STT_TLS", Const, 0, ""},
+		{"STV_DEFAULT", Const, 0, ""},
+		{"STV_HIDDEN", Const, 0, ""},
+		{"STV_INTERNAL", Const, 0, ""},
+		{"STV_PROTECTED", Const, 0, ""},
+		{"ST_BIND", Func, 0, "func(info uint8) SymBind"},
+		{"ST_INFO", Func, 0, "func(bind SymBind, typ SymType) uint8"},
+		{"ST_TYPE", Func, 0, "func(info uint8) SymType"},
+		{"ST_VISIBILITY", Func, 0, "func(other uint8) SymVis"},
+		{"Section", Type, 0, ""},
+		{"Section.ReaderAt", Field, 0, ""},
+		{"Section.SectionHeader", Field, 0, ""},
+		{"Section32", Type, 0, ""},
+		{"Section32.Addr", Field, 0, ""},
+		{"Section32.Addralign", Field, 0, ""},
+		{"Section32.Entsize", Field, 0, ""},
+		{"Section32.Flags", Field, 0, ""},
+		{"Section32.Info", Field, 0, ""},
+		{"Section32.Link", Field, 0, ""},
+		{"Section32.Name", Field, 0, ""},
+		{"Section32.Off", Field, 0, ""},
+		{"Section32.Size", Field, 0, ""},
+		{"Section32.Type", Field, 0, ""},
+		{"Section64", Type, 0, ""},
+		{"Section64.Addr", Field, 0, ""},
+		{"Section64.Addralign", Field, 0, ""},
+		{"Section64.Entsize", Field, 0, ""},
+		{"Section64.Flags", Field, 0, ""},
+		{"Section64.Info", Field, 0, ""},
+		{"Section64.Link", Field, 0, ""},
+		{"Section64.Name", Field, 0, ""},
+		{"Section64.Off", Field, 0, ""},
+		{"Section64.Size", Field, 0, ""},
+		{"Section64.Type", Field, 0, ""},
+		{"SectionFlag", Type, 0, ""},
+		{"SectionHeader", Type, 0, ""},
+		{"SectionHeader.Addr", Field, 0, ""},
+		{"SectionHeader.Addralign", Field, 0, ""},
+		{"SectionHeader.Entsize", Field, 0, ""},
+		{"SectionHeader.FileSize", Field, 6, ""},
+		{"SectionHeader.Flags", Field, 0, ""},
+		{"SectionHeader.Info", Field, 0, ""},
+		{"SectionHeader.Link", Field, 0, ""},
+		{"SectionHeader.Name", Field, 0, ""},
+		{"SectionHeader.Offset", Field, 0, ""},
+		{"SectionHeader.Size", Field, 0, ""},
+		{"SectionHeader.Type", Field, 0, ""},
+		{"SectionIndex", Type, 0, ""},
+		{"SectionType", Type, 0, ""},
+		{"Sym32", Type, 0, ""},
+		{"Sym32.Info", Field, 0, ""},
+		{"Sym32.Name", Field, 0, ""},
+		{"Sym32.Other", Field, 0, ""},
+		{"Sym32.Shndx", Field, 0, ""},
+		{"Sym32.Size", Field, 0, ""},
+		{"Sym32.Value", Field, 0, ""},
+		{"Sym32Size", Const, 0, ""},
+		{"Sym64", Type, 0, ""},
+		{"Sym64.Info", Field, 0, ""},
+		{"Sym64.Name", Field, 0, ""},
+		{"Sym64.Other", Field, 0, ""},
+		{"Sym64.Shndx", Field, 0, ""},
+		{"Sym64.Size", Field, 0, ""},
+		{"Sym64.Value", Field, 0, ""},
+		{"Sym64Size", Const, 0, ""},
+		{"SymBind", Type, 0, ""},
+		{"SymType", Type, 0, ""},
+		{"SymVis", Type, 0, ""},
+		{"Symbol", Type, 0, ""},
+		{"Symbol.HasVersion", Field, 24, ""},
+		{"Symbol.Info", Field, 0, ""},
+		{"Symbol.Library", Field, 13, ""},
+		{"Symbol.Name", Field, 0, ""},
+		{"Symbol.Other", Field, 0, ""},
+		{"Symbol.Section", Field, 0, ""},
+		{"Symbol.Size", Field, 0, ""},
+		{"Symbol.Value", Field, 0, ""},
+		{"Symbol.Version", Field, 13, ""},
+		{"Symbol.VersionIndex", Field, 24, ""},
+		{"Type", Type, 0, ""},
+		{"VER_FLG_BASE", Const, 24, ""},
+		{"VER_FLG_INFO", Const, 24, ""},
+		{"VER_FLG_WEAK", Const, 24, ""},
+		{"Version", Type, 0, ""},
+		{"VersionIndex", Type, 24, ""},
+	},
+	"debug/gosym": {
+		{"(*DecodingError).Error", Method, 0, ""},
+		{"(*LineTable).LineToPC", Method, 0, ""},
+		{"(*LineTable).PCToLine", Method, 0, ""},
+		{"(*Sym).BaseName", Method, 0, ""},
+		{"(*Sym).PackageName", Method, 0, ""},
+		{"(*Sym).ReceiverName", Method, 0, ""},
+		{"(*Sym).Static", Method, 0, ""},
+		{"(*Table).LineToPC", Method, 0, ""},
+		{"(*Table).LookupFunc", Method, 0, ""},
+		{"(*Table).LookupSym", Method, 0, ""},
+		{"(*Table).PCToFunc", Method, 0, ""},
+		{"(*Table).PCToLine", Method, 0, ""},
+		{"(*Table).SymByAddr", Method, 0, ""},
+		{"(*UnknownLineError).Error", Method, 0, ""},
+		{"(Func).BaseName", Method, 0, ""},
+		{"(Func).PackageName", Method, 0, ""},
+		{"(Func).ReceiverName", Method, 0, ""},
+		{"(Func).Static", Method, 0, ""},
+		{"(UnknownFileError).Error", Method, 0, ""},
+		{"DecodingError", Type, 0, ""},
+		{"Func", Type, 0, ""},
+		{"Func.End", Field, 0, ""},
+		{"Func.Entry", Field, 0, ""},
+		{"Func.FrameSize", Field, 0, ""},
+		{"Func.LineTable", Field, 0, ""},
+		{"Func.Locals", Field, 0, ""},
+		{"Func.Obj", Field, 0, ""},
+		{"Func.Params", Field, 0, ""},
+		{"Func.Sym", Field, 0, ""},
+		{"LineTable", Type, 0, ""},
+		{"LineTable.Data", Field, 0, ""},
+		{"LineTable.Line", Field, 0, ""},
+		{"LineTable.PC", Field, 0, ""},
+		{"NewLineTable", Func, 0, "func(data []byte, text uint64) *LineTable"},
+		{"NewTable", Func, 0, "func(symtab []byte, pcln *LineTable) (*Table, error)"},
+		{"Obj", Type, 0, ""},
+		{"Obj.Funcs", Field, 0, ""},
+		{"Obj.Paths", Field, 0, ""},
+		{"Sym", Type, 0, ""},
+		{"Sym.Func", Field, 0, ""},
+		{"Sym.GoType", Field, 0, ""},
+		{"Sym.Name", Field, 0, ""},
+		{"Sym.Type", Field, 0, ""},
+		{"Sym.Value", Field, 0, ""},
+		{"Table", Type, 0, ""},
+		{"Table.Files", Field, 0, ""},
+		{"Table.Funcs", Field, 0, ""},
+		{"Table.Objs", Field, 0, ""},
+		{"Table.Syms", Field, 0, ""},
+		{"UnknownFileError", Type, 0, ""},
+		{"UnknownLineError", Type, 0, ""},
+		{"UnknownLineError.File", Field, 0, ""},
+		{"UnknownLineError.Line", Field, 0, ""},
+	},
+	"debug/macho": {
+		{"(*FatFile).Close", Method, 3, ""},
+		{"(*File).Close", Method, 0, ""},
+		{"(*File).DWARF", Method, 0, ""},
+		{"(*File).ImportedLibraries", Method, 0, ""},
+		{"(*File).ImportedSymbols", Method, 0, ""},
+		{"(*File).Section", Method, 0, ""},
+		{"(*File).Segment", Method, 0, ""},
+		{"(*FormatError).Error", Method, 0, ""},
+		{"(*Section).Data", Method, 0, ""},
+		{"(*Section).Open", Method, 0, ""},
+		{"(*Segment).Data", Method, 0, ""},
+		{"(*Segment).Open", Method, 0, ""},
+		{"(Cpu).GoString", Method, 0, ""},
+		{"(Cpu).String", Method, 0, ""},
+		{"(Dylib).Raw", Method, 0, ""},
+		{"(Dysymtab).Raw", Method, 0, ""},
+		{"(FatArch).Close", Method, 3, ""},
+		{"(FatArch).DWARF", Method, 3, ""},
+		{"(FatArch).ImportedLibraries", Method, 3, ""},
+		{"(FatArch).ImportedSymbols", Method, 3, ""},
+		{"(FatArch).Section", Method, 3, ""},
+		{"(FatArch).Segment", Method, 3, ""},
+		{"(LoadBytes).Raw", Method, 0, ""},
+		{"(LoadCmd).GoString", Method, 0, ""},
+		{"(LoadCmd).String", Method, 0, ""},
+		{"(RelocTypeARM).GoString", Method, 10, ""},
+		{"(RelocTypeARM).String", Method, 10, ""},
+		{"(RelocTypeARM64).GoString", Method, 10, ""},
+		{"(RelocTypeARM64).String", Method, 10, ""},
+		{"(RelocTypeGeneric).GoString", Method, 10, ""},
+		{"(RelocTypeGeneric).String", Method, 10, ""},
+		{"(RelocTypeX86_64).GoString", Method, 10, ""},
+		{"(RelocTypeX86_64).String", Method, 10, ""},
+		{"(Rpath).Raw", Method, 10, ""},
+		{"(Section).ReadAt", Method, 0, ""},
+		{"(Segment).Raw", Method, 0, ""},
+		{"(Segment).ReadAt", Method, 0, ""},
+		{"(Symtab).Raw", Method, 0, ""},
+		{"(Type).GoString", Method, 10, ""},
+		{"(Type).String", Method, 10, ""},
+		{"ARM64_RELOC_ADDEND", Const, 10, ""},
+		{"ARM64_RELOC_BRANCH26", Const, 10, ""},
+		{"ARM64_RELOC_GOT_LOAD_PAGE21", Const, 10, ""},
+		{"ARM64_RELOC_GOT_LOAD_PAGEOFF12", Const, 10, ""},
+		{"ARM64_RELOC_PAGE21", Const, 10, ""},
+		{"ARM64_RELOC_PAGEOFF12", Const, 10, ""},
+		{"ARM64_RELOC_POINTER_TO_GOT", Const, 10, ""},
+		{"ARM64_RELOC_SUBTRACTOR", Const, 10, ""},
+		{"ARM64_RELOC_TLVP_LOAD_PAGE21", Const, 10, ""},
+		{"ARM64_RELOC_TLVP_LOAD_PAGEOFF12", Const, 10, ""},
+		{"ARM64_RELOC_UNSIGNED", Const, 10, ""},
+		{"ARM_RELOC_BR24", Const, 10, ""},
+		{"ARM_RELOC_HALF", Const, 10, ""},
+		{"ARM_RELOC_HALF_SECTDIFF", Const, 10, ""},
+		{"ARM_RELOC_LOCAL_SECTDIFF", Const, 10, ""},
+		{"ARM_RELOC_PAIR", Const, 10, ""},
+		{"ARM_RELOC_PB_LA_PTR", Const, 10, ""},
+		{"ARM_RELOC_SECTDIFF", Const, 10, ""},
+		{"ARM_RELOC_VANILLA", Const, 10, ""},
+		{"ARM_THUMB_32BIT_BRANCH", Const, 10, ""},
+		{"ARM_THUMB_RELOC_BR22", Const, 10, ""},
+		{"Cpu", Type, 0, ""},
+		{"Cpu386", Const, 0, ""},
+		{"CpuAmd64", Const, 0, ""},
+		{"CpuArm", Const, 3, ""},
+		{"CpuArm64", Const, 11, ""},
+		{"CpuPpc", Const, 3, ""},
+		{"CpuPpc64", Const, 3, ""},
+		{"Dylib", Type, 0, ""},
+		{"Dylib.CompatVersion", Field, 0, ""},
+		{"Dylib.CurrentVersion", Field, 0, ""},
+		{"Dylib.LoadBytes", Field, 0, ""},
+		{"Dylib.Name", Field, 0, ""},
+		{"Dylib.Time", Field, 0, ""},
+		{"DylibCmd", Type, 0, ""},
+		{"DylibCmd.Cmd", Field, 0, ""},
+		{"DylibCmd.CompatVersion", Field, 0, ""},
+		{"DylibCmd.CurrentVersion", Field, 0, ""},
+		{"DylibCmd.Len", Field, 0, ""},
+		{"DylibCmd.Name", Field, 0, ""},
+		{"DylibCmd.Time", Field, 0, ""},
+		{"Dysymtab", Type, 0, ""},
+		{"Dysymtab.DysymtabCmd", Field, 0, ""},
+		{"Dysymtab.IndirectSyms", Field, 0, ""},
+		{"Dysymtab.LoadBytes", Field, 0, ""},
+		{"DysymtabCmd", Type, 0, ""},
+		{"DysymtabCmd.Cmd", Field, 0, ""},
+		{"DysymtabCmd.Extrefsymoff", Field, 0, ""},
+		{"DysymtabCmd.Extreloff", Field, 0, ""},
+		{"DysymtabCmd.Iextdefsym", Field, 0, ""},
+		{"DysymtabCmd.Ilocalsym", Field, 0, ""},
+		{"DysymtabCmd.Indirectsymoff", Field, 0, ""},
+		{"DysymtabCmd.Iundefsym", Field, 0, ""},
+		{"DysymtabCmd.Len", Field, 0, ""},
+		{"DysymtabCmd.Locreloff", Field, 0, ""},
+		{"DysymtabCmd.Modtaboff", Field, 0, ""},
+		{"DysymtabCmd.Nextdefsym", Field, 0, ""},
+		{"DysymtabCmd.Nextrefsyms", Field, 0, ""},
+		{"DysymtabCmd.Nextrel", Field, 0, ""},
+		{"DysymtabCmd.Nindirectsyms", Field, 0, ""},
+		{"DysymtabCmd.Nlocalsym", Field, 0, ""},
+		{"DysymtabCmd.Nlocrel", Field, 0, ""},
+		{"DysymtabCmd.Nmodtab", Field, 0, ""},
+		{"DysymtabCmd.Ntoc", Field, 0, ""},
+		{"DysymtabCmd.Nundefsym", Field, 0, ""},
+		{"DysymtabCmd.Tocoffset", Field, 0, ""},
+		{"ErrNotFat", Var, 3, ""},
+		{"FatArch", Type, 3, ""},
+		{"FatArch.FatArchHeader", Field, 3, ""},
+		{"FatArch.File", Field, 3, ""},
+		{"FatArchHeader", Type, 3, ""},
+		{"FatArchHeader.Align", Field, 3, ""},
+		{"FatArchHeader.Cpu", Field, 3, ""},
+		{"FatArchHeader.Offset", Field, 3, ""},
+		{"FatArchHeader.Size", Field, 3, ""},
+		{"FatArchHeader.SubCpu", Field, 3, ""},
+		{"FatFile", Type, 3, ""},
+		{"FatFile.Arches", Field, 3, ""},
+		{"FatFile.Magic", Field, 3, ""},
+		{"File", Type, 0, ""},
+		{"File.ByteOrder", Field, 0, ""},
+		{"File.Dysymtab", Field, 0, ""},
+		{"File.FileHeader", Field, 0, ""},
+		{"File.Loads", Field, 0, ""},
+		{"File.Sections", Field, 0, ""},
+		{"File.Symtab", Field, 0, ""},
+		{"FileHeader", Type, 0, ""},
+		{"FileHeader.Cmdsz", Field, 0, ""},
+		{"FileHeader.Cpu", Field, 0, ""},
+		{"FileHeader.Flags", Field, 0, ""},
+		{"FileHeader.Magic", Field, 0, ""},
+		{"FileHeader.Ncmd", Field, 0, ""},
+		{"FileHeader.SubCpu", Field, 0, ""},
+		{"FileHeader.Type", Field, 0, ""},
+		{"FlagAllModsBound", Const, 10, ""},
+		{"FlagAllowStackExecution", Const, 10, ""},
+		{"FlagAppExtensionSafe", Const, 10, ""},
+		{"FlagBindAtLoad", Const, 10, ""},
+		{"FlagBindsToWeak", Const, 10, ""},
+		{"FlagCanonical", Const, 10, ""},
+		{"FlagDeadStrippableDylib", Const, 10, ""},
+		{"FlagDyldLink", Const, 10, ""},
+		{"FlagForceFlat", Const, 10, ""},
+		{"FlagHasTLVDescriptors", Const, 10, ""},
+		{"FlagIncrLink", Const, 10, ""},
+		{"FlagLazyInit", Const, 10, ""},
+		{"FlagNoFixPrebinding", Const, 10, ""},
+		{"FlagNoHeapExecution", Const, 10, ""},
+		{"FlagNoMultiDefs", Const, 10, ""},
+		{"FlagNoReexportedDylibs", Const, 10, ""},
+		{"FlagNoUndefs", Const, 10, ""},
+		{"FlagPIE", Const, 10, ""},
+		{"FlagPrebindable", Const, 10, ""},
+		{"FlagPrebound", Const, 10, ""},
+		{"FlagRootSafe", Const, 10, ""},
+		{"FlagSetuidSafe", Const, 10, ""},
+		{"FlagSplitSegs", Const, 10, ""},
+		{"FlagSubsectionsViaSymbols", Const, 10, ""},
+		{"FlagTwoLevel", Const, 10, ""},
+		{"FlagWeakDefines", Const, 10, ""},
+		{"FormatError", Type, 0, ""},
+		{"GENERIC_RELOC_LOCAL_SECTDIFF", Const, 10, ""},
+		{"GENERIC_RELOC_PAIR", Const, 10, ""},
+		{"GENERIC_RELOC_PB_LA_PTR", Const, 10, ""},
+		{"GENERIC_RELOC_SECTDIFF", Const, 10, ""},
+		{"GENERIC_RELOC_TLV", Const, 10, ""},
+		{"GENERIC_RELOC_VANILLA", Const, 10, ""},
+		{"Load", Type, 0, ""},
+		{"LoadBytes", Type, 0, ""},
+		{"LoadCmd", Type, 0, ""},
+		{"LoadCmdDylib", Const, 0, ""},
+		{"LoadCmdDylinker", Const, 0, ""},
+		{"LoadCmdDysymtab", Const, 0, ""},
+		{"LoadCmdRpath", Const, 10, ""},
+		{"LoadCmdSegment", Const, 0, ""},
+		{"LoadCmdSegment64", Const, 0, ""},
+		{"LoadCmdSymtab", Const, 0, ""},
+		{"LoadCmdThread", Const, 0, ""},
+		{"LoadCmdUnixThread", Const, 0, ""},
+		{"Magic32", Const, 0, ""},
+		{"Magic64", Const, 0, ""},
+		{"MagicFat", Const, 3, ""},
+		{"NewFatFile", Func, 3, "func(r io.ReaderAt) (*FatFile, error)"},
+		{"NewFile", Func, 0, "func(r io.ReaderAt) (*File, error)"},
+		{"Nlist32", Type, 0, ""},
+		{"Nlist32.Desc", Field, 0, ""},
+		{"Nlist32.Name", Field, 0, ""},
+		{"Nlist32.Sect", Field, 0, ""},
+		{"Nlist32.Type", Field, 0, ""},
+		{"Nlist32.Value", Field, 0, ""},
+		{"Nlist64", Type, 0, ""},
+		{"Nlist64.Desc", Field, 0, ""},
+		{"Nlist64.Name", Field, 0, ""},
+		{"Nlist64.Sect", Field, 0, ""},
+		{"Nlist64.Type", Field, 0, ""},
+		{"Nlist64.Value", Field, 0, ""},
+		{"Open", Func, 0, "func(name string) (*File, error)"},
+		{"OpenFat", Func, 3, "func(name string) (*FatFile, error)"},
+		{"Regs386", Type, 0, ""},
+		{"Regs386.AX", Field, 0, ""},
+		{"Regs386.BP", Field, 0, ""},
+		{"Regs386.BX", Field, 0, ""},
+		{"Regs386.CS", Field, 0, ""},
+		{"Regs386.CX", Field, 0, ""},
+		{"Regs386.DI", Field, 0, ""},
+		{"Regs386.DS", Field, 0, ""},
+		{"Regs386.DX", Field, 0, ""},
+		{"Regs386.ES", Field, 0, ""},
+		{"Regs386.FLAGS", Field, 0, ""},
+		{"Regs386.FS", Field, 0, ""},
+		{"Regs386.GS", Field, 0, ""},
+		{"Regs386.IP", Field, 0, ""},
+		{"Regs386.SI", Field, 0, ""},
+		{"Regs386.SP", Field, 0, ""},
+		{"Regs386.SS", Field, 0, ""},
+		{"RegsAMD64", Type, 0, ""},
+		{"RegsAMD64.AX", Field, 0, ""},
+		{"RegsAMD64.BP", Field, 0, ""},
+		{"RegsAMD64.BX", Field, 0, ""},
+		{"RegsAMD64.CS", Field, 0, ""},
+		{"RegsAMD64.CX", Field, 0, ""},
+		{"RegsAMD64.DI", Field, 0, ""},
+		{"RegsAMD64.DX", Field, 0, ""},
+		{"RegsAMD64.FLAGS", Field, 0, ""},
+		{"RegsAMD64.FS", Field, 0, ""},
+		{"RegsAMD64.GS", Field, 0, ""},
+		{"RegsAMD64.IP", Field, 0, ""},
+		{"RegsAMD64.R10", Field, 0, ""},
+		{"RegsAMD64.R11", Field, 0, ""},
+		{"RegsAMD64.R12", Field, 0, ""},
+		{"RegsAMD64.R13", Field, 0, ""},
+		{"RegsAMD64.R14", Field, 0, ""},
+		{"RegsAMD64.R15", Field, 0, ""},
+		{"RegsAMD64.R8", Field, 0, ""},
+		{"RegsAMD64.R9", Field, 0, ""},
+		{"RegsAMD64.SI", Field, 0, ""},
+		{"RegsAMD64.SP", Field, 0, ""},
+		{"Reloc", Type, 10, ""},
+		{"Reloc.Addr", Field, 10, ""},
+		{"Reloc.Extern", Field, 10, ""},
+		{"Reloc.Len", Field, 10, ""},
+		{"Reloc.Pcrel", Field, 10, ""},
+		{"Reloc.Scattered", Field, 10, ""},
+		{"Reloc.Type", Field, 10, ""},
+		{"Reloc.Value", Field, 10, ""},
+		{"RelocTypeARM", Type, 10, ""},
+		{"RelocTypeARM64", Type, 10, ""},
+		{"RelocTypeGeneric", Type, 10, ""},
+		{"RelocTypeX86_64", Type, 10, ""},
+		{"Rpath", Type, 10, ""},
+		{"Rpath.LoadBytes", Field, 10, ""},
+		{"Rpath.Path", Field, 10, ""},
+		{"RpathCmd", Type, 10, ""},
+		{"RpathCmd.Cmd", Field, 10, ""},
+		{"RpathCmd.Len", Field, 10, ""},
+		{"RpathCmd.Path", Field, 10, ""},
+		{"Section", Type, 0, ""},
+		{"Section.ReaderAt", Field, 0, ""},
+		{"Section.Relocs", Field, 10, ""},
+		{"Section.SectionHeader", Field, 0, ""},
+		{"Section32", Type, 0, ""},
+		{"Section32.Addr", Field, 0, ""},
+		{"Section32.Align", Field, 0, ""},
+		{"Section32.Flags", Field, 0, ""},
+		{"Section32.Name", Field, 0, ""},
+		{"Section32.Nreloc", Field, 0, ""},
+		{"Section32.Offset", Field, 0, ""},
+		{"Section32.Reloff", Field, 0, ""},
+		{"Section32.Reserve1", Field, 0, ""},
+		{"Section32.Reserve2", Field, 0, ""},
+		{"Section32.Seg", Field, 0, ""},
+		{"Section32.Size", Field, 0, ""},
+		{"Section64", Type, 0, ""},
+		{"Section64.Addr", Field, 0, ""},
+		{"Section64.Align", Field, 0, ""},
+		{"Section64.Flags", Field, 0, ""},
+		{"Section64.Name", Field, 0, ""},
+		{"Section64.Nreloc", Field, 0, ""},
+		{"Section64.Offset", Field, 0, ""},
+		{"Section64.Reloff", Field, 0, ""},
+		{"Section64.Reserve1", Field, 0, ""},
+		{"Section64.Reserve2", Field, 0, ""},
+		{"Section64.Reserve3", Field, 0, ""},
+		{"Section64.Seg", Field, 0, ""},
+		{"Section64.Size", Field, 0, ""},
+		{"SectionHeader", Type, 0, ""},
+		{"SectionHeader.Addr", Field, 0, ""},
+		{"SectionHeader.Align", Field, 0, ""},
+		{"SectionHeader.Flags", Field, 0, ""},
+		{"SectionHeader.Name", Field, 0, ""},
+		{"SectionHeader.Nreloc", Field, 0, ""},
+		{"SectionHeader.Offset", Field, 0, ""},
+		{"SectionHeader.Reloff", Field, 0, ""},
+		{"SectionHeader.Seg", Field, 0, ""},
+		{"SectionHeader.Size", Field, 0, ""},
+		{"Segment", Type, 0, ""},
+		{"Segment.LoadBytes", Field, 0, ""},
+		{"Segment.ReaderAt", Field, 0, ""},
+		{"Segment.SegmentHeader", Field, 0, ""},
+		{"Segment32", Type, 0, ""},
+		{"Segment32.Addr", Field, 0, ""},
+		{"Segment32.Cmd", Field, 0, ""},
+		{"Segment32.Filesz", Field, 0, ""},
+		{"Segment32.Flag", Field, 0, ""},
+		{"Segment32.Len", Field, 0, ""},
+		{"Segment32.Maxprot", Field, 0, ""},
+		{"Segment32.Memsz", Field, 0, ""},
+		{"Segment32.Name", Field, 0, ""},
+		{"Segment32.Nsect", Field, 0, ""},
+		{"Segment32.Offset", Field, 0, ""},
+		{"Segment32.Prot", Field, 0, ""},
+		{"Segment64", Type, 0, ""},
+		{"Segment64.Addr", Field, 0, ""},
+		{"Segment64.Cmd", Field, 0, ""},
+		{"Segment64.Filesz", Field, 0, ""},
+		{"Segment64.Flag", Field, 0, ""},
+		{"Segment64.Len", Field, 0, ""},
+		{"Segment64.Maxprot", Field, 0, ""},
+		{"Segment64.Memsz", Field, 0, ""},
+		{"Segment64.Name", Field, 0, ""},
+		{"Segment64.Nsect", Field, 0, ""},
+		{"Segment64.Offset", Field, 0, ""},
+		{"Segment64.Prot", Field, 0, ""},
+		{"SegmentHeader", Type, 0, ""},
+		{"SegmentHeader.Addr", Field, 0, ""},
+		{"SegmentHeader.Cmd", Field, 0, ""},
+		{"SegmentHeader.Filesz", Field, 0, ""},
+		{"SegmentHeader.Flag", Field, 0, ""},
+		{"SegmentHeader.Len", Field, 0, ""},
+		{"SegmentHeader.Maxprot", Field, 0, ""},
+		{"SegmentHeader.Memsz", Field, 0, ""},
+		{"SegmentHeader.Name", Field, 0, ""},
+		{"SegmentHeader.Nsect", Field, 0, ""},
+		{"SegmentHeader.Offset", Field, 0, ""},
+		{"SegmentHeader.Prot", Field, 0, ""},
+		{"Symbol", Type, 0, ""},
+		{"Symbol.Desc", Field, 0, ""},
+		{"Symbol.Name", Field, 0, ""},
+		{"Symbol.Sect", Field, 0, ""},
+		{"Symbol.Type", Field, 0, ""},
+		{"Symbol.Value", Field, 0, ""},
+		{"Symtab", Type, 0, ""},
+		{"Symtab.LoadBytes", Field, 0, ""},
+		{"Symtab.Syms", Field, 0, ""},
+		{"Symtab.SymtabCmd", Field, 0, ""},
+		{"SymtabCmd", Type, 0, ""},
+		{"SymtabCmd.Cmd", Field, 0, ""},
+		{"SymtabCmd.Len", Field, 0, ""},
+		{"SymtabCmd.Nsyms", Field, 0, ""},
+		{"SymtabCmd.Stroff", Field, 0, ""},
+		{"SymtabCmd.Strsize", Field, 0, ""},
+		{"SymtabCmd.Symoff", Field, 0, ""},
+		{"Thread", Type, 0, ""},
+		{"Thread.Cmd", Field, 0, ""},
+		{"Thread.Data", Field, 0, ""},
+		{"Thread.Len", Field, 0, ""},
+		{"Thread.Type", Field, 0, ""},
+		{"Type", Type, 0, ""},
+		{"TypeBundle", Const, 3, ""},
+		{"TypeDylib", Const, 3, ""},
+		{"TypeExec", Const, 0, ""},
+		{"TypeObj", Const, 0, ""},
+		{"X86_64_RELOC_BRANCH", Const, 10, ""},
+		{"X86_64_RELOC_GOT", Const, 10, ""},
+		{"X86_64_RELOC_GOT_LOAD", Const, 10, ""},
+		{"X86_64_RELOC_SIGNED", Const, 10, ""},
+		{"X86_64_RELOC_SIGNED_1", Const, 10, ""},
+		{"X86_64_RELOC_SIGNED_2", Const, 10, ""},
+		{"X86_64_RELOC_SIGNED_4", Const, 10, ""},
+		{"X86_64_RELOC_SUBTRACTOR", Const, 10, ""},
+		{"X86_64_RELOC_TLV", Const, 10, ""},
+		{"X86_64_RELOC_UNSIGNED", Const, 10, ""},
+	},
+	"debug/pe": {
+		{"(*COFFSymbol).FullName", Method, 8, ""},
+		{"(*File).COFFSymbolReadSectionDefAux", Method, 19, ""},
+		{"(*File).Close", Method, 0, ""},
+		{"(*File).DWARF", Method, 0, ""},
+		{"(*File).ImportedLibraries", Method, 0, ""},
+		{"(*File).ImportedSymbols", Method, 0, ""},
+		{"(*File).Section", Method, 0, ""},
+		{"(*FormatError).Error", Method, 0, ""},
+		{"(*Section).Data", Method, 0, ""},
+		{"(*Section).Open", Method, 0, ""},
+		{"(Section).ReadAt", Method, 0, ""},
+		{"(StringTable).String", Method, 8, ""},
+		{"COFFSymbol", Type, 1, ""},
+		{"COFFSymbol.Name", Field, 1, ""},
+		{"COFFSymbol.NumberOfAuxSymbols", Field, 1, ""},
+		{"COFFSymbol.SectionNumber", Field, 1, ""},
+		{"COFFSymbol.StorageClass", Field, 1, ""},
+		{"COFFSymbol.Type", Field, 1, ""},
+		{"COFFSymbol.Value", Field, 1, ""},
+		{"COFFSymbolAuxFormat5", Type, 19, ""},
+		{"COFFSymbolAuxFormat5.Checksum", Field, 19, ""},
+		{"COFFSymbolAuxFormat5.NumLineNumbers", Field, 19, ""},
+		{"COFFSymbolAuxFormat5.NumRelocs", Field, 19, ""},
+		{"COFFSymbolAuxFormat5.SecNum", Field, 19, ""},
+		{"COFFSymbolAuxFormat5.Selection", Field, 19, ""},
+		{"COFFSymbolAuxFormat5.Size", Field, 19, ""},
+		{"COFFSymbolSize", Const, 1, ""},
+		{"DataDirectory", Type, 3, ""},
+		{"DataDirectory.Size", Field, 3, ""},
+		{"DataDirectory.VirtualAddress", Field, 3, ""},
+		{"File", Type, 0, ""},
+		{"File.COFFSymbols", Field, 8, ""},
+		{"File.FileHeader", Field, 0, ""},
+		{"File.OptionalHeader", Field, 3, ""},
+		{"File.Sections", Field, 0, ""},
+		{"File.StringTable", Field, 8, ""},
+		{"File.Symbols", Field, 1, ""},
+		{"FileHeader", Type, 0, ""},
+		{"FileHeader.Characteristics", Field, 0, ""},
+		{"FileHeader.Machine", Field, 0, ""},
+		{"FileHeader.NumberOfSections", Field, 0, ""},
+		{"FileHeader.NumberOfSymbols", Field, 0, ""},
+		{"FileHeader.PointerToSymbolTable", Field, 0, ""},
+		{"FileHeader.SizeOfOptionalHeader", Field, 0, ""},
+		{"FileHeader.TimeDateStamp", Field, 0, ""},
+		{"FormatError", Type, 0, ""},
+		{"IMAGE_COMDAT_SELECT_ANY", Const, 19, ""},
+		{"IMAGE_COMDAT_SELECT_ASSOCIATIVE", Const, 19, ""},
+		{"IMAGE_COMDAT_SELECT_EXACT_MATCH", Const, 19, ""},
+		{"IMAGE_COMDAT_SELECT_LARGEST", Const, 19, ""},
+		{"IMAGE_COMDAT_SELECT_NODUPLICATES", Const, 19, ""},
+		{"IMAGE_COMDAT_SELECT_SAME_SIZE", Const, 19, ""},
+		{"IMAGE_DIRECTORY_ENTRY_ARCHITECTURE", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_BASERELOC", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_DEBUG", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_EXCEPTION", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_EXPORT", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_GLOBALPTR", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_IAT", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_IMPORT", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_RESOURCE", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_SECURITY", Const, 11, ""},
+		{"IMAGE_DIRECTORY_ENTRY_TLS", Const, 11, ""},
+		{"IMAGE_DLLCHARACTERISTICS_APPCONTAINER", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_GUARD_CF", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_NO_BIND", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_NO_ISOLATION", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_NO_SEH", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_NX_COMPAT", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE", Const, 15, ""},
+		{"IMAGE_DLLCHARACTERISTICS_WDM_DRIVER", Const, 15, ""},
+		{"IMAGE_FILE_32BIT_MACHINE", Const, 15, ""},
+		{"IMAGE_FILE_AGGRESIVE_WS_TRIM", Const, 15, ""},
+		{"IMAGE_FILE_BYTES_REVERSED_HI", Const, 15, ""},
+		{"IMAGE_FILE_BYTES_REVERSED_LO", Const, 15, ""},
+		{"IMAGE_FILE_DEBUG_STRIPPED", Const, 15, ""},
+		{"IMAGE_FILE_DLL", Const, 15, ""},
+		{"IMAGE_FILE_EXECUTABLE_IMAGE", Const, 15, ""},
+		{"IMAGE_FILE_LARGE_ADDRESS_AWARE", Const, 15, ""},
+		{"IMAGE_FILE_LINE_NUMS_STRIPPED", Const, 15, ""},
+		{"IMAGE_FILE_LOCAL_SYMS_STRIPPED", Const, 15, ""},
+		{"IMAGE_FILE_MACHINE_AM33", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_AMD64", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_ARM", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_ARM64", Const, 11, ""},
+		{"IMAGE_FILE_MACHINE_ARMNT", Const, 12, ""},
+		{"IMAGE_FILE_MACHINE_EBC", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_I386", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_IA64", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_LOONGARCH32", Const, 19, ""},
+		{"IMAGE_FILE_MACHINE_LOONGARCH64", Const, 19, ""},
+		{"IMAGE_FILE_MACHINE_M32R", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_MIPS16", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_MIPSFPU", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_MIPSFPU16", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_POWERPC", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_POWERPCFP", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_R4000", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_RISCV128", Const, 20, ""},
+		{"IMAGE_FILE_MACHINE_RISCV32", Const, 20, ""},
+		{"IMAGE_FILE_MACHINE_RISCV64", Const, 20, ""},
+		{"IMAGE_FILE_MACHINE_SH3", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_SH3DSP", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_SH4", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_SH5", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_THUMB", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_UNKNOWN", Const, 0, ""},
+		{"IMAGE_FILE_MACHINE_WCEMIPSV2", Const, 0, ""},
+		{"IMAGE_FILE_NET_RUN_FROM_SWAP", Const, 15, ""},
+		{"IMAGE_FILE_RELOCS_STRIPPED", Const, 15, ""},
+		{"IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP", Const, 15, ""},
+		{"IMAGE_FILE_SYSTEM", Const, 15, ""},
+		{"IMAGE_FILE_UP_SYSTEM_ONLY", Const, 15, ""},
+		{"IMAGE_SCN_CNT_CODE", Const, 19, ""},
+		{"IMAGE_SCN_CNT_INITIALIZED_DATA", Const, 19, ""},
+		{"IMAGE_SCN_CNT_UNINITIALIZED_DATA", Const, 19, ""},
+		{"IMAGE_SCN_LNK_COMDAT", Const, 19, ""},
+		{"IMAGE_SCN_MEM_DISCARDABLE", Const, 19, ""},
+		{"IMAGE_SCN_MEM_EXECUTE", Const, 19, ""},
+		{"IMAGE_SCN_MEM_READ", Const, 19, ""},
+		{"IMAGE_SCN_MEM_WRITE", Const, 19, ""},
+		{"IMAGE_SUBSYSTEM_EFI_APPLICATION", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_EFI_ROM", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_NATIVE", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_NATIVE_WINDOWS", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_OS2_CUI", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_POSIX_CUI", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_UNKNOWN", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_WINDOWS_CE_GUI", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_WINDOWS_CUI", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_WINDOWS_GUI", Const, 15, ""},
+		{"IMAGE_SUBSYSTEM_XBOX", Const, 15, ""},
+		{"ImportDirectory", Type, 0, ""},
+		{"ImportDirectory.FirstThunk", Field, 0, ""},
+		{"ImportDirectory.ForwarderChain", Field, 0, ""},
+		{"ImportDirectory.Name", Field, 0, ""},
+		{"ImportDirectory.OriginalFirstThunk", Field, 0, ""},
+		{"ImportDirectory.TimeDateStamp", Field, 0, ""},
+		{"NewFile", Func, 0, "func(r io.ReaderAt) (*File, error)"},
+		{"Open", Func, 0, "func(name string) (*File, error)"},
+		{"OptionalHeader32", Type, 3, ""},
+		{"OptionalHeader32.AddressOfEntryPoint", Field, 3, ""},
+		{"OptionalHeader32.BaseOfCode", Field, 3, ""},
+		{"OptionalHeader32.BaseOfData", Field, 3, ""},
+		{"OptionalHeader32.CheckSum", Field, 3, ""},
+		{"OptionalHeader32.DataDirectory", Field, 3, ""},
+		{"OptionalHeader32.DllCharacteristics", Field, 3, ""},
+		{"OptionalHeader32.FileAlignment", Field, 3, ""},
+		{"OptionalHeader32.ImageBase", Field, 3, ""},
+		{"OptionalHeader32.LoaderFlags", Field, 3, ""},
+		{"OptionalHeader32.Magic", Field, 3, ""},
+		{"OptionalHeader32.MajorImageVersion", Field, 3, ""},
+		{"OptionalHeader32.MajorLinkerVersion", Field, 3, ""},
+		{"OptionalHeader32.MajorOperatingSystemVersion", Field, 3, ""},
+		{"OptionalHeader32.MajorSubsystemVersion", Field, 3, ""},
+		{"OptionalHeader32.MinorImageVersion", Field, 3, ""},
+		{"OptionalHeader32.MinorLinkerVersion", Field, 3, ""},
+		{"OptionalHeader32.MinorOperatingSystemVersion", Field, 3, ""},
+		{"OptionalHeader32.MinorSubsystemVersion", Field, 3, ""},
+		{"OptionalHeader32.NumberOfRvaAndSizes", Field, 3, ""},
+		{"OptionalHeader32.SectionAlignment", Field, 3, ""},
+		{"OptionalHeader32.SizeOfCode", Field, 3, ""},
+		{"OptionalHeader32.SizeOfHeaders", Field, 3, ""},
+		{"OptionalHeader32.SizeOfHeapCommit", Field, 3, ""},
+		{"OptionalHeader32.SizeOfHeapReserve", Field, 3, ""},
+		{"OptionalHeader32.SizeOfImage", Field, 3, ""},
+		{"OptionalHeader32.SizeOfInitializedData", Field, 3, ""},
+		{"OptionalHeader32.SizeOfStackCommit", Field, 3, ""},
+		{"OptionalHeader32.SizeOfStackReserve", Field, 3, ""},
+		{"OptionalHeader32.SizeOfUninitializedData", Field, 3, ""},
+		{"OptionalHeader32.Subsystem", Field, 3, ""},
+		{"OptionalHeader32.Win32VersionValue", Field, 3, ""},
+		{"OptionalHeader64", Type, 3, ""},
+		{"OptionalHeader64.AddressOfEntryPoint", Field, 3, ""},
+		{"OptionalHeader64.BaseOfCode", Field, 3, ""},
+		{"OptionalHeader64.CheckSum", Field, 3, ""},
+		{"OptionalHeader64.DataDirectory", Field, 3, ""},
+		{"OptionalHeader64.DllCharacteristics", Field, 3, ""},
+		{"OptionalHeader64.FileAlignment", Field, 3, ""},
+		{"OptionalHeader64.ImageBase", Field, 3, ""},
+		{"OptionalHeader64.LoaderFlags", Field, 3, ""},
+		{"OptionalHeader64.Magic", Field, 3, ""},
+		{"OptionalHeader64.MajorImageVersion", Field, 3, ""},
+		{"OptionalHeader64.MajorLinkerVersion", Field, 3, ""},
+		{"OptionalHeader64.MajorOperatingSystemVersion", Field, 3, ""},
+		{"OptionalHeader64.MajorSubsystemVersion", Field, 3, ""},
+		{"OptionalHeader64.MinorImageVersion", Field, 3, ""},
+		{"OptionalHeader64.MinorLinkerVersion", Field, 3, ""},
+		{"OptionalHeader64.MinorOperatingSystemVersion", Field, 3, ""},
+		{"OptionalHeader64.MinorSubsystemVersion", Field, 3, ""},
+		{"OptionalHeader64.NumberOfRvaAndSizes", Field, 3, ""},
+		{"OptionalHeader64.SectionAlignment", Field, 3, ""},
+		{"OptionalHeader64.SizeOfCode", Field, 3, ""},
+		{"OptionalHeader64.SizeOfHeaders", Field, 3, ""},
+		{"OptionalHeader64.SizeOfHeapCommit", Field, 3, ""},
+		{"OptionalHeader64.SizeOfHeapReserve", Field, 3, ""},
+		{"OptionalHeader64.SizeOfImage", Field, 3, ""},
+		{"OptionalHeader64.SizeOfInitializedData", Field, 3, ""},
+		{"OptionalHeader64.SizeOfStackCommit", Field, 3, ""},
+		{"OptionalHeader64.SizeOfStackReserve", Field, 3, ""},
+		{"OptionalHeader64.SizeOfUninitializedData", Field, 3, ""},
+		{"OptionalHeader64.Subsystem", Field, 3, ""},
+		{"OptionalHeader64.Win32VersionValue", Field, 3, ""},
+		{"Reloc", Type, 8, ""},
+		{"Reloc.SymbolTableIndex", Field, 8, ""},
+		{"Reloc.Type", Field, 8, ""},
+		{"Reloc.VirtualAddress", Field, 8, ""},
+		{"Section", Type, 0, ""},
+		{"Section.ReaderAt", Field, 0, ""},
+		{"Section.Relocs", Field, 8, ""},
+		{"Section.SectionHeader", Field, 0, ""},
+		{"SectionHeader", Type, 0, ""},
+		{"SectionHeader.Characteristics", Field, 0, ""},
+		{"SectionHeader.Name", Field, 0, ""},
+		{"SectionHeader.NumberOfLineNumbers", Field, 0, ""},
+		{"SectionHeader.NumberOfRelocations", Field, 0, ""},
+		{"SectionHeader.Offset", Field, 0, ""},
+		{"SectionHeader.PointerToLineNumbers", Field, 0, ""},
+		{"SectionHeader.PointerToRelocations", Field, 0, ""},
+		{"SectionHeader.Size", Field, 0, ""},
+		{"SectionHeader.VirtualAddress", Field, 0, ""},
+		{"SectionHeader.VirtualSize", Field, 0, ""},
+		{"SectionHeader32", Type, 0, ""},
+		{"SectionHeader32.Characteristics", Field, 0, ""},
+		{"SectionHeader32.Name", Field, 0, ""},
+		{"SectionHeader32.NumberOfLineNumbers", Field, 0, ""},
+		{"SectionHeader32.NumberOfRelocations", Field, 0, ""},
+		{"SectionHeader32.PointerToLineNumbers", Field, 0, ""},
+		{"SectionHeader32.PointerToRawData", Field, 0, ""},
+		{"SectionHeader32.PointerToRelocations", Field, 0, ""},
+		{"SectionHeader32.SizeOfRawData", Field, 0, ""},
+		{"SectionHeader32.VirtualAddress", Field, 0, ""},
+		{"SectionHeader32.VirtualSize", Field, 0, ""},
+		{"StringTable", Type, 8, ""},
+		{"Symbol", Type, 1, ""},
+		{"Symbol.Name", Field, 1, ""},
+		{"Symbol.SectionNumber", Field, 1, ""},
+		{"Symbol.StorageClass", Field, 1, ""},
+		{"Symbol.Type", Field, 1, ""},
+		{"Symbol.Value", Field, 1, ""},
+	},
+	"debug/plan9obj": {
+		{"(*File).Close", Method, 3, ""},
+		{"(*File).Section", Method, 3, ""},
+		{"(*File).Symbols", Method, 3, ""},
+		{"(*Section).Data", Method, 3, ""},
+		{"(*Section).Open", Method, 3, ""},
+		{"(Section).ReadAt", Method, 3, ""},
+		{"ErrNoSymbols", Var, 18, ""},
+		{"File", Type, 3, ""},
+		{"File.FileHeader", Field, 3, ""},
+		{"File.Sections", Field, 3, ""},
+		{"FileHeader", Type, 3, ""},
+		{"FileHeader.Bss", Field, 3, ""},
+		{"FileHeader.Entry", Field, 3, ""},
+		{"FileHeader.HdrSize", Field, 4, ""},
+		{"FileHeader.LoadAddress", Field, 4, ""},
+		{"FileHeader.Magic", Field, 3, ""},
+		{"FileHeader.PtrSize", Field, 3, ""},
+		{"Magic386", Const, 3, ""},
+		{"Magic64", Const, 3, ""},
+		{"MagicAMD64", Const, 3, ""},
+		{"MagicARM", Const, 3, ""},
+		{"NewFile", Func, 3, "func(r io.ReaderAt) (*File, error)"},
+		{"Open", Func, 3, "func(name string) (*File, error)"},
+		{"Section", Type, 3, ""},
+		{"Section.ReaderAt", Field, 3, ""},
+		{"Section.SectionHeader", Field, 3, ""},
+		{"SectionHeader", Type, 3, ""},
+		{"SectionHeader.Name", Field, 3, ""},
+		{"SectionHeader.Offset", Field, 3, ""},
+		{"SectionHeader.Size", Field, 3, ""},
+		{"Sym", Type, 3, ""},
+		{"Sym.Name", Field, 3, ""},
+		{"Sym.Type", Field, 3, ""},
+		{"Sym.Value", Field, 3, ""},
+	},
+	"embed": {
+		{"(FS).Open", Method, 16, ""},
+		{"(FS).ReadDir", Method, 16, ""},
+		{"(FS).ReadFile", Method, 16, ""},
+		{"FS", Type, 16, ""},
+	},
+	"encoding": {
+		{"BinaryAppender", Type, 24, ""},
+		{"BinaryMarshaler", Type, 2, ""},
+		{"BinaryUnmarshaler", Type, 2, ""},
+		{"TextAppender", Type, 24, ""},
+		{"TextMarshaler", Type, 2, ""},
+		{"TextUnmarshaler", Type, 2, ""},
+	},
+	"encoding/ascii85": {
+		{"(CorruptInputError).Error", Method, 0, ""},
+		{"CorruptInputError", Type, 0, ""},
+		{"Decode", Func, 0, "func(dst []byte, src []byte, flush bool) (ndst int, nsrc int, err error)"},
+		{"Encode", Func, 0, "func(dst []byte, src []byte) int"},
+		{"MaxEncodedLen", Func, 0, "func(n int) int"},
+		{"NewDecoder", Func, 0, "func(r io.Reader) io.Reader"},
+		{"NewEncoder", Func, 0, "func(w io.Writer) io.WriteCloser"},
+	},
+	"encoding/asn1": {
+		{"(BitString).At", Method, 0, ""},
+		{"(BitString).RightAlign", Method, 0, ""},
+		{"(ObjectIdentifier).Equal", Method, 0, ""},
+		{"(ObjectIdentifier).String", Method, 3, ""},
+		{"(StructuralError).Error", Method, 0, ""},
+		{"(SyntaxError).Error", Method, 0, ""},
+		{"BitString", Type, 0, ""},
+		{"BitString.BitLength", Field, 0, ""},
+		{"BitString.Bytes", Field, 0, ""},
+		{"ClassApplication", Const, 6, ""},
+		{"ClassContextSpecific", Const, 6, ""},
+		{"ClassPrivate", Const, 6, ""},
+		{"ClassUniversal", Const, 6, ""},
+		{"Enumerated", Type, 0, ""},
+		{"Flag", Type, 0, ""},
+		{"Marshal", Func, 0, "func(val any) ([]byte, error)"},
+		{"MarshalWithParams", Func, 10, "func(val any, params string) ([]byte, error)"},
+		{"NullBytes", Var, 9, ""},
+		{"NullRawValue", Var, 9, ""},
+		{"ObjectIdentifier", Type, 0, ""},
+		{"RawContent", Type, 0, ""},
+		{"RawValue", Type, 0, ""},
+		{"RawValue.Bytes", Field, 0, ""},
+		{"RawValue.Class", Field, 0, ""},
+		{"RawValue.FullBytes", Field, 0, ""},
+		{"RawValue.IsCompound", Field, 0, ""},
+		{"RawValue.Tag", Field, 0, ""},
+		{"StructuralError", Type, 0, ""},
+		{"StructuralError.Msg", Field, 0, ""},
+		{"SyntaxError", Type, 0, ""},
+		{"SyntaxError.Msg", Field, 0, ""},
+		{"TagBMPString", Const, 14, ""},
+		{"TagBitString", Const, 6, ""},
+		{"TagBoolean", Const, 6, ""},
+		{"TagEnum", Const, 6, ""},
+		{"TagGeneralString", Const, 6, ""},
+		{"TagGeneralizedTime", Const, 6, ""},
+		{"TagIA5String", Const, 6, ""},
+		{"TagInteger", Const, 6, ""},
+		{"TagNull", Const, 9, ""},
+		{"TagNumericString", Const, 10, ""},
+		{"TagOID", Const, 6, ""},
+		{"TagOctetString", Const, 6, ""},
+		{"TagPrintableString", Const, 6, ""},
+		{"TagSequence", Const, 6, ""},
+		{"TagSet", Const, 6, ""},
+		{"TagT61String", Const, 6, ""},
+		{"TagUTCTime", Const, 6, ""},
+		{"TagUTF8String", Const, 6, ""},
+		{"Unmarshal", Func, 0, "func(b []byte, val any) (rest []byte, err error)"},
+		{"UnmarshalWithParams", Func, 0, "func(b []byte, val any, params string) (rest []byte, err error)"},
+	},
+	"encoding/base32": {
+		{"(*Encoding).AppendDecode", Method, 22, ""},
+		{"(*Encoding).AppendEncode", Method, 22, ""},
+		{"(*Encoding).Decode", Method, 0, ""},
+		{"(*Encoding).DecodeString", Method, 0, ""},
+		{"(*Encoding).DecodedLen", Method, 0, ""},
+		{"(*Encoding).Encode", Method, 0, ""},
+		{"(*Encoding).EncodeToString", Method, 0, ""},
+		{"(*Encoding).EncodedLen", Method, 0, ""},
+		{"(CorruptInputError).Error", Method, 0, ""},
+		{"(Encoding).WithPadding", Method, 9, ""},
+		{"CorruptInputError", Type, 0, ""},
+		{"Encoding", Type, 0, ""},
+		{"HexEncoding", Var, 0, ""},
+		{"NewDecoder", Func, 0, "func(enc *Encoding, r io.Reader) io.Reader"},
+		{"NewEncoder", Func, 0, "func(enc *Encoding, w io.Writer) io.WriteCloser"},
+		{"NewEncoding", Func, 0, "func(encoder string) *Encoding"},
+		{"NoPadding", Const, 9, ""},
+		{"StdEncoding", Var, 0, ""},
+		{"StdPadding", Const, 9, ""},
+	},
+	"encoding/base64": {
+		{"(*Encoding).AppendDecode", Method, 22, ""},
+		{"(*Encoding).AppendEncode", Method, 22, ""},
+		{"(*Encoding).Decode", Method, 0, ""},
+		{"(*Encoding).DecodeString", Method, 0, ""},
+		{"(*Encoding).DecodedLen", Method, 0, ""},
+		{"(*Encoding).Encode", Method, 0, ""},
+		{"(*Encoding).EncodeToString", Method, 0, ""},
+		{"(*Encoding).EncodedLen", Method, 0, ""},
+		{"(CorruptInputError).Error", Method, 0, ""},
+		{"(Encoding).Strict", Method, 8, ""},
+		{"(Encoding).WithPadding", Method, 5, ""},
+		{"CorruptInputError", Type, 0, ""},
+		{"Encoding", Type, 0, ""},
+		{"NewDecoder", Func, 0, "func(enc *Encoding, r io.Reader) io.Reader"},
+		{"NewEncoder", Func, 0, "func(enc *Encoding, w io.Writer) io.WriteCloser"},
+		{"NewEncoding", Func, 0, "func(encoder string) *Encoding"},
+		{"NoPadding", Const, 5, ""},
+		{"RawStdEncoding", Var, 5, ""},
+		{"RawURLEncoding", Var, 5, ""},
+		{"StdEncoding", Var, 0, ""},
+		{"StdPadding", Const, 5, ""},
+		{"URLEncoding", Var, 0, ""},
+	},
+	"encoding/binary": {
+		{"Append", Func, 23, "func(buf []byte, order ByteOrder, data any) ([]byte, error)"},
+		{"AppendByteOrder", Type, 19, ""},
+		{"AppendUvarint", Func, 19, "func(buf []byte, x uint64) []byte"},
+		{"AppendVarint", Func, 19, "func(buf []byte, x int64) []byte"},
+		{"BigEndian", Var, 0, ""},
+		{"ByteOrder", Type, 0, ""},
+		{"Decode", Func, 23, "func(buf []byte, order ByteOrder, data any) (int, error)"},
+		{"Encode", Func, 23, "func(buf []byte, order ByteOrder, data any) (int, error)"},
+		{"LittleEndian", Var, 0, ""},
+		{"MaxVarintLen16", Const, 0, ""},
+		{"MaxVarintLen32", Const, 0, ""},
+		{"MaxVarintLen64", Const, 0, ""},
+		{"NativeEndian", Var, 21, ""},
+		{"PutUvarint", Func, 0, "func(buf []byte, x uint64) int"},
+		{"PutVarint", Func, 0, "func(buf []byte, x int64) int"},
+		{"Read", Func, 0, "func(r io.Reader, order ByteOrder, data any) error"},
+		{"ReadUvarint", Func, 0, "func(r io.ByteReader) (uint64, error)"},
+		{"ReadVarint", Func, 0, "func(r io.ByteReader) (int64, error)"},
+		{"Size", Func, 0, "func(v any) int"},
+		{"Uvarint", Func, 0, "func(buf []byte) (uint64, int)"},
+		{"Varint", Func, 0, "func(buf []byte) (int64, int)"},
+		{"Write", Func, 0, "func(w io.Writer, order ByteOrder, data any) error"},
+	},
+	"encoding/csv": {
+		{"(*ParseError).Error", Method, 0, ""},
+		{"(*ParseError).Unwrap", Method, 13, ""},
+		{"(*Reader).FieldPos", Method, 17, ""},
+		{"(*Reader).InputOffset", Method, 19, ""},
+		{"(*Reader).Read", Method, 0, ""},
+		{"(*Reader).ReadAll", Method, 0, ""},
+		{"(*Writer).Error", Method, 1, ""},
+		{"(*Writer).Flush", Method, 0, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"(*Writer).WriteAll", Method, 0, ""},
+		{"ErrBareQuote", Var, 0, ""},
+		{"ErrFieldCount", Var, 0, ""},
+		{"ErrQuote", Var, 0, ""},
+		{"ErrTrailingComma", Var, 0, ""},
+		{"NewReader", Func, 0, "func(r io.Reader) *Reader"},
+		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
+		{"ParseError", Type, 0, ""},
+		{"ParseError.Column", Field, 0, ""},
+		{"ParseError.Err", Field, 0, ""},
+		{"ParseError.Line", Field, 0, ""},
+		{"ParseError.StartLine", Field, 10, ""},
+		{"Reader", Type, 0, ""},
+		{"Reader.Comma", Field, 0, ""},
+		{"Reader.Comment", Field, 0, ""},
+		{"Reader.FieldsPerRecord", Field, 0, ""},
+		{"Reader.LazyQuotes", Field, 0, ""},
+		{"Reader.ReuseRecord", Field, 9, ""},
+		{"Reader.TrailingComma", Field, 0, ""},
+		{"Reader.TrimLeadingSpace", Field, 0, ""},
+		{"Writer", Type, 0, ""},
+		{"Writer.Comma", Field, 0, ""},
+		{"Writer.UseCRLF", Field, 0, ""},
+	},
+	"encoding/gob": {
+		{"(*Decoder).Decode", Method, 0, ""},
+		{"(*Decoder).DecodeValue", Method, 0, ""},
+		{"(*Encoder).Encode", Method, 0, ""},
+		{"(*Encoder).EncodeValue", Method, 0, ""},
+		{"CommonType", Type, 0, ""},
+		{"CommonType.Id", Field, 0, ""},
+		{"CommonType.Name", Field, 0, ""},
+		{"Decoder", Type, 0, ""},
+		{"Encoder", Type, 0, ""},
+		{"GobDecoder", Type, 0, ""},
+		{"GobEncoder", Type, 0, ""},
+		{"NewDecoder", Func, 0, "func(r io.Reader) *Decoder"},
+		{"NewEncoder", Func, 0, "func(w io.Writer) *Encoder"},
+		{"Register", Func, 0, "func(value any)"},
+		{"RegisterName", Func, 0, "func(name string, value any)"},
+	},
+	"encoding/hex": {
+		{"(InvalidByteError).Error", Method, 0, ""},
+		{"AppendDecode", Func, 22, "func(dst []byte, src []byte) ([]byte, error)"},
+		{"AppendEncode", Func, 22, "func(dst []byte, src []byte) []byte"},
+		{"Decode", Func, 0, "func(dst []byte, src []byte) (int, error)"},
+		{"DecodeString", Func, 0, "func(s string) ([]byte, error)"},
+		{"DecodedLen", Func, 0, "func(x int) int"},
+		{"Dump", Func, 0, "func(data []byte) string"},
+		{"Dumper", Func, 0, "func(w io.Writer) io.WriteCloser"},
+		{"Encode", Func, 0, "func(dst []byte, src []byte) int"},
+		{"EncodeToString", Func, 0, "func(src []byte) string"},
+		{"EncodedLen", Func, 0, "func(n int) int"},
+		{"ErrLength", Var, 0, ""},
+		{"InvalidByteError", Type, 0, ""},
+		{"NewDecoder", Func, 10, "func(r io.Reader) io.Reader"},
+		{"NewEncoder", Func, 10, "func(w io.Writer) io.Writer"},
+	},
+	"encoding/json": {
+		{"(*Decoder).Buffered", Method, 1, ""},
+		{"(*Decoder).Decode", Method, 0, ""},
+		{"(*Decoder).DisallowUnknownFields", Method, 10, ""},
+		{"(*Decoder).InputOffset", Method, 14, ""},
+		{"(*Decoder).More", Method, 5, ""},
+		{"(*Decoder).Token", Method, 5, ""},
+		{"(*Decoder).UseNumber", Method, 1, ""},
+		{"(*Encoder).Encode", Method, 0, ""},
+		{"(*Encoder).SetEscapeHTML", Method, 7, ""},
+		{"(*Encoder).SetIndent", Method, 7, ""},
+		{"(*InvalidUTF8Error).Error", Method, 0, ""},
+		{"(*InvalidUnmarshalError).Error", Method, 0, ""},
+		{"(*MarshalerError).Error", Method, 0, ""},
+		{"(*MarshalerError).Unwrap", Method, 13, ""},
+		{"(*RawMessage).MarshalJSON", Method, 0, ""},
+		{"(*RawMessage).UnmarshalJSON", Method, 0, ""},
+		{"(*SyntaxError).Error", Method, 0, ""},
+		{"(*UnmarshalFieldError).Error", Method, 0, ""},
+		{"(*UnmarshalTypeError).Error", Method, 0, ""},
+		{"(*UnsupportedTypeError).Error", Method, 0, ""},
+		{"(*UnsupportedValueError).Error", Method, 0, ""},
+		{"(Delim).String", Method, 5, ""},
+		{"(Number).Float64", Method, 1, ""},
+		{"(Number).Int64", Method, 1, ""},
+		{"(Number).String", Method, 1, ""},
+		{"(RawMessage).MarshalJSON", Method, 8, ""},
+		{"Compact", Func, 0, "func(dst *bytes.Buffer, src []byte) error"},
+		{"Decoder", Type, 0, ""},
+		{"Delim", Type, 5, ""},
+		{"Encoder", Type, 0, ""},
+		{"HTMLEscape", Func, 0, "func(dst *bytes.Buffer, src []byte)"},
+		{"Indent", Func, 0, "func(dst *bytes.Buffer, src []byte, prefix string, indent string) error"},
+		{"InvalidUTF8Error", Type, 0, ""},
+		{"InvalidUTF8Error.S", Field, 0, ""},
+		{"InvalidUnmarshalError", Type, 0, ""},
+		{"InvalidUnmarshalError.Type", Field, 0, ""},
+		{"Marshal", Func, 0, "func(v any) ([]byte, error)"},
+		{"MarshalIndent", Func, 0, "func(v any, prefix string, indent string) ([]byte, error)"},
+		{"Marshaler", Type, 0, ""},
+		{"MarshalerError", Type, 0, ""},
+		{"MarshalerError.Err", Field, 0, ""},
+		{"MarshalerError.Type", Field, 0, ""},
+		{"NewDecoder", Func, 0, "func(r io.Reader) *Decoder"},
+		{"NewEncoder", Func, 0, "func(w io.Writer) *Encoder"},
+		{"Number", Type, 1, ""},
+		{"RawMessage", Type, 0, ""},
+		{"SyntaxError", Type, 0, ""},
+		{"SyntaxError.Offset", Field, 0, ""},
+		{"Token", Type, 5, ""},
+		{"Unmarshal", Func, 0, "func(data []byte, v any) error"},
+		{"UnmarshalFieldError", Type, 0, ""},
+		{"UnmarshalFieldError.Field", Field, 0, ""},
+		{"UnmarshalFieldError.Key", Field, 0, ""},
+		{"UnmarshalFieldError.Type", Field, 0, ""},
+		{"UnmarshalTypeError", Type, 0, ""},
+		{"UnmarshalTypeError.Field", Field, 8, ""},
+		{"UnmarshalTypeError.Offset", Field, 5, ""},
+		{"UnmarshalTypeError.Struct", Field, 8, ""},
+		{"UnmarshalTypeError.Type", Field, 0, ""},
+		{"UnmarshalTypeError.Value", Field, 0, ""},
+		{"Unmarshaler", Type, 0, ""},
+		{"UnsupportedTypeError", Type, 0, ""},
+		{"UnsupportedTypeError.Type", Field, 0, ""},
+		{"UnsupportedValueError", Type, 0, ""},
+		{"UnsupportedValueError.Str", Field, 0, ""},
+		{"UnsupportedValueError.Value", Field, 0, ""},
+		{"Valid", Func, 9, "func(data []byte) bool"},
+	},
+	"encoding/pem": {
+		{"Block", Type, 0, ""},
+		{"Block.Bytes", Field, 0, ""},
+		{"Block.Headers", Field, 0, ""},
+		{"Block.Type", Field, 0, ""},
+		{"Decode", Func, 0, "func(data []byte) (p *Block, rest []byte)"},
+		{"Encode", Func, 0, "func(out io.Writer, b *Block) error"},
+		{"EncodeToMemory", Func, 0, "func(b *Block) []byte"},
+	},
+	"encoding/xml": {
+		{"(*Decoder).Decode", Method, 0, ""},
+		{"(*Decoder).DecodeElement", Method, 0, ""},
+		{"(*Decoder).InputOffset", Method, 4, ""},
+		{"(*Decoder).InputPos", Method, 19, ""},
+		{"(*Decoder).RawToken", Method, 0, ""},
+		{"(*Decoder).Skip", Method, 0, ""},
+		{"(*Decoder).Token", Method, 0, ""},
+		{"(*Encoder).Close", Method, 20, ""},
+		{"(*Encoder).Encode", Method, 0, ""},
+		{"(*Encoder).EncodeElement", Method, 2, ""},
+		{"(*Encoder).EncodeToken", Method, 2, ""},
+		{"(*Encoder).Flush", Method, 2, ""},
+		{"(*Encoder).Indent", Method, 1, ""},
+		{"(*SyntaxError).Error", Method, 0, ""},
+		{"(*TagPathError).Error", Method, 0, ""},
+		{"(*UnsupportedTypeError).Error", Method, 0, ""},
+		{"(CharData).Copy", Method, 0, ""},
+		{"(Comment).Copy", Method, 0, ""},
+		{"(Directive).Copy", Method, 0, ""},
+		{"(ProcInst).Copy", Method, 0, ""},
+		{"(StartElement).Copy", Method, 0, ""},
+		{"(StartElement).End", Method, 2, ""},
+		{"(UnmarshalError).Error", Method, 0, ""},
+		{"Attr", Type, 0, ""},
+		{"Attr.Name", Field, 0, ""},
+		{"Attr.Value", Field, 0, ""},
+		{"CharData", Type, 0, ""},
+		{"Comment", Type, 0, ""},
+		{"CopyToken", Func, 0, "func(t Token) Token"},
+		{"Decoder", Type, 0, ""},
+		{"Decoder.AutoClose", Field, 0, ""},
+		{"Decoder.CharsetReader", Field, 0, ""},
+		{"Decoder.DefaultSpace", Field, 1, ""},
+		{"Decoder.Entity", Field, 0, ""},
+		{"Decoder.Strict", Field, 0, ""},
+		{"Directive", Type, 0, ""},
+		{"Encoder", Type, 0, ""},
+		{"EndElement", Type, 0, ""},
+		{"EndElement.Name", Field, 0, ""},
+		{"Escape", Func, 0, "func(w io.Writer, s []byte)"},
+		{"EscapeText", Func, 1, "func(w io.Writer, s []byte) error"},
+		{"HTMLAutoClose", Var, 0, ""},
+		{"HTMLEntity", Var, 0, ""},
+		{"Header", Const, 0, ""},
+		{"Marshal", Func, 0, "func(v any) ([]byte, error)"},
+		{"MarshalIndent", Func, 0, "func(v any, prefix string, indent string) ([]byte, error)"},
+		{"Marshaler", Type, 2, ""},
+		{"MarshalerAttr", Type, 2, ""},
+		{"Name", Type, 0, ""},
+		{"Name.Local", Field, 0, ""},
+		{"Name.Space", Field, 0, ""},
+		{"NewDecoder", Func, 0, "func(r io.Reader) *Decoder"},
+		{"NewEncoder", Func, 0, "func(w io.Writer) *Encoder"},
+		{"NewTokenDecoder", Func, 10, "func(t TokenReader) *Decoder"},
+		{"ProcInst", Type, 0, ""},
+		{"ProcInst.Inst", Field, 0, ""},
+		{"ProcInst.Target", Field, 0, ""},
+		{"StartElement", Type, 0, ""},
+		{"StartElement.Attr", Field, 0, ""},
+		{"StartElement.Name", Field, 0, ""},
+		{"SyntaxError", Type, 0, ""},
+		{"SyntaxError.Line", Field, 0, ""},
+		{"SyntaxError.Msg", Field, 0, ""},
+		{"TagPathError", Type, 0, ""},
+		{"TagPathError.Field1", Field, 0, ""},
+		{"TagPathError.Field2", Field, 0, ""},
+		{"TagPathError.Struct", Field, 0, ""},
+		{"TagPathError.Tag1", Field, 0, ""},
+		{"TagPathError.Tag2", Field, 0, ""},
+		{"Token", Type, 0, ""},
+		{"TokenReader", Type, 10, ""},
+		{"Unmarshal", Func, 0, "func(data []byte, v any) error"},
+		{"UnmarshalError", Type, 0, ""},
+		{"Unmarshaler", Type, 2, ""},
+		{"UnmarshalerAttr", Type, 2, ""},
+		{"UnsupportedTypeError", Type, 0, ""},
+		{"UnsupportedTypeError.Type", Field, 0, ""},
+	},
+	"errors": {
+		{"As", Func, 13, "func(err error, target any) bool"},
+		{"ErrUnsupported", Var, 21, ""},
+		{"Is", Func, 13, "func(err error, target error) bool"},
+		{"Join", Func, 20, "func(errs ...error) error"},
+		{"New", Func, 0, "func(text string) error"},
+		{"Unwrap", Func, 13, "func(err error) error"},
+	},
+	"expvar": {
+		{"(*Float).Add", Method, 0, ""},
+		{"(*Float).Set", Method, 0, ""},
+		{"(*Float).String", Method, 0, ""},
+		{"(*Float).Value", Method, 8, ""},
+		{"(*Int).Add", Method, 0, ""},
+		{"(*Int).Set", Method, 0, ""},
+		{"(*Int).String", Method, 0, ""},
+		{"(*Int).Value", Method, 8, ""},
+		{"(*Map).Add", Method, 0, ""},
+		{"(*Map).AddFloat", Method, 0, ""},
+		{"(*Map).Delete", Method, 12, ""},
+		{"(*Map).Do", Method, 0, ""},
+		{"(*Map).Get", Method, 0, ""},
+		{"(*Map).Init", Method, 0, ""},
+		{"(*Map).Set", Method, 0, ""},
+		{"(*Map).String", Method, 0, ""},
+		{"(*String).Set", Method, 0, ""},
+		{"(*String).String", Method, 0, ""},
+		{"(*String).Value", Method, 8, ""},
+		{"(Func).String", Method, 0, ""},
+		{"(Func).Value", Method, 8, ""},
+		{"Do", Func, 0, "func(f func(KeyValue))"},
+		{"Float", Type, 0, ""},
+		{"Func", Type, 0, ""},
+		{"Get", Func, 0, "func(name string) Var"},
+		{"Handler", Func, 8, "func() http.Handler"},
+		{"Int", Type, 0, ""},
+		{"KeyValue", Type, 0, ""},
+		{"KeyValue.Key", Field, 0, ""},
+		{"KeyValue.Value", Field, 0, ""},
+		{"Map", Type, 0, ""},
+		{"NewFloat", Func, 0, "func(name string) *Float"},
+		{"NewInt", Func, 0, "func(name string) *Int"},
+		{"NewMap", Func, 0, "func(name string) *Map"},
+		{"NewString", Func, 0, "func(name string) *String"},
+		{"Publish", Func, 0, "func(name string, v Var)"},
+		{"String", Type, 0, ""},
+		{"Var", Type, 0, ""},
+	},
+	"flag": {
+		{"(*FlagSet).Arg", Method, 0, ""},
+		{"(*FlagSet).Args", Method, 0, ""},
+		{"(*FlagSet).Bool", Method, 0, ""},
+		{"(*FlagSet).BoolFunc", Method, 21, ""},
+		{"(*FlagSet).BoolVar", Method, 0, ""},
+		{"(*FlagSet).Duration", Method, 0, ""},
+		{"(*FlagSet).DurationVar", Method, 0, ""},
+		{"(*FlagSet).ErrorHandling", Method, 10, ""},
+		{"(*FlagSet).Float64", Method, 0, ""},
+		{"(*FlagSet).Float64Var", Method, 0, ""},
+		{"(*FlagSet).Func", Method, 16, ""},
+		{"(*FlagSet).Init", Method, 0, ""},
+		{"(*FlagSet).Int", Method, 0, ""},
+		{"(*FlagSet).Int64", Method, 0, ""},
+		{"(*FlagSet).Int64Var", Method, 0, ""},
+		{"(*FlagSet).IntVar", Method, 0, ""},
+		{"(*FlagSet).Lookup", Method, 0, ""},
+		{"(*FlagSet).NArg", Method, 0, ""},
+		{"(*FlagSet).NFlag", Method, 0, ""},
+		{"(*FlagSet).Name", Method, 10, ""},
+		{"(*FlagSet).Output", Method, 10, ""},
+		{"(*FlagSet).Parse", Method, 0, ""},
+		{"(*FlagSet).Parsed", Method, 0, ""},
+		{"(*FlagSet).PrintDefaults", Method, 0, ""},
+		{"(*FlagSet).Set", Method, 0, ""},
+		{"(*FlagSet).SetOutput", Method, 0, ""},
+		{"(*FlagSet).String", Method, 0, ""},
+		{"(*FlagSet).StringVar", Method, 0, ""},
+		{"(*FlagSet).TextVar", Method, 19, ""},
+		{"(*FlagSet).Uint", Method, 0, ""},
+		{"(*FlagSet).Uint64", Method, 0, ""},
+		{"(*FlagSet).Uint64Var", Method, 0, ""},
+		{"(*FlagSet).UintVar", Method, 0, ""},
+		{"(*FlagSet).Var", Method, 0, ""},
+		{"(*FlagSet).Visit", Method, 0, ""},
+		{"(*FlagSet).VisitAll", Method, 0, ""},
+		{"Arg", Func, 0, "func(i int) string"},
+		{"Args", Func, 0, "func() []string"},
+		{"Bool", Func, 0, "func(name string, value bool, usage string) *bool"},
+		{"BoolFunc", Func, 21, "func(name string, usage string, fn func(string) error)"},
+		{"BoolVar", Func, 0, "func(p *bool, name string, value bool, usage string)"},
+		{"CommandLine", Var, 2, ""},
+		{"ContinueOnError", Const, 0, ""},
+		{"Duration", Func, 0, "func(name string, value time.Duration, usage string) *time.Duration"},
+		{"DurationVar", Func, 0, "func(p *time.Duration, name string, value time.Duration, usage string)"},
+		{"ErrHelp", Var, 0, ""},
+		{"ErrorHandling", Type, 0, ""},
+		{"ExitOnError", Const, 0, ""},
+		{"Flag", Type, 0, ""},
+		{"Flag.DefValue", Field, 0, ""},
+		{"Flag.Name", Field, 0, ""},
+		{"Flag.Usage", Field, 0, ""},
+		{"Flag.Value", Field, 0, ""},
+		{"FlagSet", Type, 0, ""},
+		{"FlagSet.Usage", Field, 0, ""},
+		{"Float64", Func, 0, "func(name string, value float64, usage string) *float64"},
+		{"Float64Var", Func, 0, "func(p *float64, name string, value float64, usage string)"},
+		{"Func", Func, 16, "func(name string, usage string, fn func(string) error)"},
+		{"Getter", Type, 2, ""},
+		{"Int", Func, 0, "func(name string, value int, usage string) *int"},
+		{"Int64", Func, 0, "func(name string, value int64, usage string) *int64"},
+		{"Int64Var", Func, 0, "func(p *int64, name string, value int64, usage string)"},
+		{"IntVar", Func, 0, "func(p *int, name string, value int, usage string)"},
+		{"Lookup", Func, 0, "func(name string) *Flag"},
+		{"NArg", Func, 0, "func() int"},
+		{"NFlag", Func, 0, "func() int"},
+		{"NewFlagSet", Func, 0, "func(name string, errorHandling ErrorHandling) *FlagSet"},
+		{"PanicOnError", Const, 0, ""},
+		{"Parse", Func, 0, "func()"},
+		{"Parsed", Func, 0, "func() bool"},
+		{"PrintDefaults", Func, 0, "func()"},
+		{"Set", Func, 0, "func(name string, value string) error"},
+		{"String", Func, 0, "func(name string, value string, usage string) *string"},
+		{"StringVar", Func, 0, "func(p *string, name string, value string, usage string)"},
+		{"TextVar", Func, 19, "func(p encoding.TextUnmarshaler, name string, value encoding.TextMarshaler, usage string)"},
+		{"Uint", Func, 0, "func(name string, value uint, usage string) *uint"},
+		{"Uint64", Func, 0, "func(name string, value uint64, usage string) *uint64"},
+		{"Uint64Var", Func, 0, "func(p *uint64, name string, value uint64, usage string)"},
+		{"UintVar", Func, 0, "func(p *uint, name string, value uint, usage string)"},
+		{"UnquoteUsage", Func, 5, "func(flag *Flag) (name string, usage string)"},
+		{"Usage", Var, 0, ""},
+		{"Value", Type, 0, ""},
+		{"Var", Func, 0, "func(value Value, name string, usage string)"},
+		{"Visit", Func, 0, "func(fn func(*Flag))"},
+		{"VisitAll", Func, 0, "func(fn func(*Flag))"},
+	},
+	"fmt": {
+		{"Append", Func, 19, "func(b []byte, a ...any) []byte"},
+		{"Appendf", Func, 19, "func(b []byte, format string, a ...any) []byte"},
+		{"Appendln", Func, 19, "func(b []byte, a ...any) []byte"},
+		{"Errorf", Func, 0, "func(format string, a ...any) error"},
+		{"FormatString", Func, 20, "func(state State, verb rune) string"},
+		{"Formatter", Type, 0, ""},
+		{"Fprint", Func, 0, "func(w io.Writer, a ...any) (n int, err error)"},
+		{"Fprintf", Func, 0, "func(w io.Writer, format string, a ...any) (n int, err error)"},
+		{"Fprintln", Func, 0, "func(w io.Writer, a ...any) (n int, err error)"},
+		{"Fscan", Func, 0, "func(r io.Reader, a ...any) (n int, err error)"},
+		{"Fscanf", Func, 0, "func(r io.Reader, format string, a ...any) (n int, err error)"},
+		{"Fscanln", Func, 0, "func(r io.Reader, a ...any) (n int, err error)"},
+		{"GoStringer", Type, 0, ""},
+		{"Print", Func, 0, "func(a ...any) (n int, err error)"},
+		{"Printf", Func, 0, "func(format string, a ...any) (n int, err error)"},
+		{"Println", Func, 0, "func(a ...any) (n int, err error)"},
+		{"Scan", Func, 0, "func(a ...any) (n int, err error)"},
+		{"ScanState", Type, 0, ""},
+		{"Scanf", Func, 0, "func(format string, a ...any) (n int, err error)"},
+		{"Scanln", Func, 0, "func(a ...any) (n int, err error)"},
+		{"Scanner", Type, 0, ""},
+		{"Sprint", Func, 0, "func(a ...any) string"},
+		{"Sprintf", Func, 0, "func(format string, a ...any) string"},
+		{"Sprintln", Func, 0, "func(a ...any) string"},
+		{"Sscan", Func, 0, "func(str string, a ...any) (n int, err error)"},
+		{"Sscanf", Func, 0, "func(str string, format string, a ...any) (n int, err error)"},
+		{"Sscanln", Func, 0, "func(str string, a ...any) (n int, err error)"},
+		{"State", Type, 0, ""},
+		{"Stringer", Type, 0, ""},
+	},
+	"go/ast": {
+		{"(*ArrayType).End", Method, 0, ""},
+		{"(*ArrayType).Pos", Method, 0, ""},
+		{"(*AssignStmt).End", Method, 0, ""},
+		{"(*AssignStmt).Pos", Method, 0, ""},
+		{"(*BadDecl).End", Method, 0, ""},
+		{"(*BadDecl).Pos", Method, 0, ""},
+		{"(*BadExpr).End", Method, 0, ""},
+		{"(*BadExpr).Pos", Method, 0, ""},
+		{"(*BadStmt).End", Method, 0, ""},
+		{"(*BadStmt).Pos", Method, 0, ""},
+		{"(*BasicLit).End", Method, 0, ""},
+		{"(*BasicLit).Pos", Method, 0, ""},
+		{"(*BinaryExpr).End", Method, 0, ""},
+		{"(*BinaryExpr).Pos", Method, 0, ""},
+		{"(*BlockStmt).End", Method, 0, ""},
+		{"(*BlockStmt).Pos", Method, 0, ""},
+		{"(*BranchStmt).End", Method, 0, ""},
+		{"(*BranchStmt).Pos", Method, 0, ""},
+		{"(*CallExpr).End", Method, 0, ""},
+		{"(*CallExpr).Pos", Method, 0, ""},
+		{"(*CaseClause).End", Method, 0, ""},
+		{"(*CaseClause).Pos", Method, 0, ""},
+		{"(*ChanType).End", Method, 0, ""},
+		{"(*ChanType).Pos", Method, 0, ""},
+		{"(*CommClause).End", Method, 0, ""},
+		{"(*CommClause).Pos", Method, 0, ""},
+		{"(*Comment).End", Method, 0, ""},
+		{"(*Comment).Pos", Method, 0, ""},
+		{"(*CommentGroup).End", Method, 0, ""},
+		{"(*CommentGroup).Pos", Method, 0, ""},
+		{"(*CommentGroup).Text", Method, 0, ""},
+		{"(*CompositeLit).End", Method, 0, ""},
+		{"(*CompositeLit).Pos", Method, 0, ""},
+		{"(*DeclStmt).End", Method, 0, ""},
+		{"(*DeclStmt).Pos", Method, 0, ""},
+		{"(*DeferStmt).End", Method, 0, ""},
+		{"(*DeferStmt).Pos", Method, 0, ""},
+		{"(*Ellipsis).End", Method, 0, ""},
+		{"(*Ellipsis).Pos", Method, 0, ""},
+		{"(*EmptyStmt).End", Method, 0, ""},
+		{"(*EmptyStmt).Pos", Method, 0, ""},
+		{"(*ExprStmt).End", Method, 0, ""},
+		{"(*ExprStmt).Pos", Method, 0, ""},
+		{"(*Field).End", Method, 0, ""},
+		{"(*Field).Pos", Method, 0, ""},
+		{"(*FieldList).End", Method, 0, ""},
+		{"(*FieldList).NumFields", Method, 0, ""},
+		{"(*FieldList).Pos", Method, 0, ""},
+		{"(*File).End", Method, 0, ""},
+		{"(*File).Pos", Method, 0, ""},
+		{"(*ForStmt).End", Method, 0, ""},
+		{"(*ForStmt).Pos", Method, 0, ""},
+		{"(*FuncDecl).End", Method, 0, ""},
+		{"(*FuncDecl).Pos", Method, 0, ""},
+		{"(*FuncLit).End", Method, 0, ""},
+		{"(*FuncLit).Pos", Method, 0, ""},
+		{"(*FuncType).End", Method, 0, ""},
+		{"(*FuncType).Pos", Method, 0, ""},
+		{"(*GenDecl).End", Method, 0, ""},
+		{"(*GenDecl).Pos", Method, 0, ""},
+		{"(*GoStmt).End", Method, 0, ""},
+		{"(*GoStmt).Pos", Method, 0, ""},
+		{"(*Ident).End", Method, 0, ""},
+		{"(*Ident).IsExported", Method, 0, ""},
+		{"(*Ident).Pos", Method, 0, ""},
+		{"(*Ident).String", Method, 0, ""},
+		{"(*IfStmt).End", Method, 0, ""},
+		{"(*IfStmt).Pos", Method, 0, ""},
+		{"(*ImportSpec).End", Method, 0, ""},
+		{"(*ImportSpec).Pos", Method, 0, ""},
+		{"(*IncDecStmt).End", Method, 0, ""},
+		{"(*IncDecStmt).Pos", Method, 0, ""},
+		{"(*IndexExpr).End", Method, 0, ""},
+		{"(*IndexExpr).Pos", Method, 0, ""},
+		{"(*IndexListExpr).End", Method, 18, ""},
+		{"(*IndexListExpr).Pos", Method, 18, ""},
+		{"(*InterfaceType).End", Method, 0, ""},
+		{"(*InterfaceType).Pos", Method, 0, ""},
+		{"(*KeyValueExpr).End", Method, 0, ""},
+		{"(*KeyValueExpr).Pos", Method, 0, ""},
+		{"(*LabeledStmt).End", Method, 0, ""},
+		{"(*LabeledStmt).Pos", Method, 0, ""},
+		{"(*MapType).End", Method, 0, ""},
+		{"(*MapType).Pos", Method, 0, ""},
+		{"(*Object).Pos", Method, 0, ""},
+		{"(*Package).End", Method, 0, ""},
+		{"(*Package).Pos", Method, 0, ""},
+		{"(*ParenExpr).End", Method, 0, ""},
+		{"(*ParenExpr).Pos", Method, 0, ""},
+		{"(*RangeStmt).End", Method, 0, ""},
+		{"(*RangeStmt).Pos", Method, 0, ""},
+		{"(*ReturnStmt).End", Method, 0, ""},
+		{"(*ReturnStmt).Pos", Method, 0, ""},
+		{"(*Scope).Insert", Method, 0, ""},
+		{"(*Scope).Lookup", Method, 0, ""},
+		{"(*Scope).String", Method, 0, ""},
+		{"(*SelectStmt).End", Method, 0, ""},
+		{"(*SelectStmt).Pos", Method, 0, ""},
+		{"(*SelectorExpr).End", Method, 0, ""},
+		{"(*SelectorExpr).Pos", Method, 0, ""},
+		{"(*SendStmt).End", Method, 0, ""},
+		{"(*SendStmt).Pos", Method, 0, ""},
+		{"(*SliceExpr).End", Method, 0, ""},
+		{"(*SliceExpr).Pos", Method, 0, ""},
+		{"(*StarExpr).End", Method, 0, ""},
+		{"(*StarExpr).Pos", Method, 0, ""},
+		{"(*StructType).End", Method, 0, ""},
+		{"(*StructType).Pos", Method, 0, ""},
+		{"(*SwitchStmt).End", Method, 0, ""},
+		{"(*SwitchStmt).Pos", Method, 0, ""},
+		{"(*TypeAssertExpr).End", Method, 0, ""},
+		{"(*TypeAssertExpr).Pos", Method, 0, ""},
+		{"(*TypeSpec).End", Method, 0, ""},
+		{"(*TypeSpec).Pos", Method, 0, ""},
+		{"(*TypeSwitchStmt).End", Method, 0, ""},
+		{"(*TypeSwitchStmt).Pos", Method, 0, ""},
+		{"(*UnaryExpr).End", Method, 0, ""},
+		{"(*UnaryExpr).Pos", Method, 0, ""},
+		{"(*ValueSpec).End", Method, 0, ""},
+		{"(*ValueSpec).Pos", Method, 0, ""},
+		{"(CommentMap).Comments", Method, 1, ""},
+		{"(CommentMap).Filter", Method, 1, ""},
+		{"(CommentMap).String", Method, 1, ""},
+		{"(CommentMap).Update", Method, 1, ""},
+		{"(ObjKind).String", Method, 0, ""},
+		{"ArrayType", Type, 0, ""},
+		{"ArrayType.Elt", Field, 0, ""},
+		{"ArrayType.Lbrack", Field, 0, ""},
+		{"ArrayType.Len", Field, 0, ""},
+		{"AssignStmt", Type, 0, ""},
+		{"AssignStmt.Lhs", Field, 0, ""},
+		{"AssignStmt.Rhs", Field, 0, ""},
+		{"AssignStmt.Tok", Field, 0, ""},
+		{"AssignStmt.TokPos", Field, 0, ""},
+		{"Bad", Const, 0, ""},
+		{"BadDecl", Type, 0, ""},
+		{"BadDecl.From", Field, 0, ""},
+		{"BadDecl.To", Field, 0, ""},
+		{"BadExpr", Type, 0, ""},
+		{"BadExpr.From", Field, 0, ""},
+		{"BadExpr.To", Field, 0, ""},
+		{"BadStmt", Type, 0, ""},
+		{"BadStmt.From", Field, 0, ""},
+		{"BadStmt.To", Field, 0, ""},
+		{"BasicLit", Type, 0, ""},
+		{"BasicLit.Kind", Field, 0, ""},
+		{"BasicLit.Value", Field, 0, ""},
+		{"BasicLit.ValuePos", Field, 0, ""},
+		{"BinaryExpr", Type, 0, ""},
+		{"BinaryExpr.Op", Field, 0, ""},
+		{"BinaryExpr.OpPos", Field, 0, ""},
+		{"BinaryExpr.X", Field, 0, ""},
+		{"BinaryExpr.Y", Field, 0, ""},
+		{"BlockStmt", Type, 0, ""},
+		{"BlockStmt.Lbrace", Field, 0, ""},
+		{"BlockStmt.List", Field, 0, ""},
+		{"BlockStmt.Rbrace", Field, 0, ""},
+		{"BranchStmt", Type, 0, ""},
+		{"BranchStmt.Label", Field, 0, ""},
+		{"BranchStmt.Tok", Field, 0, ""},
+		{"BranchStmt.TokPos", Field, 0, ""},
+		{"CallExpr", Type, 0, ""},
+		{"CallExpr.Args", Field, 0, ""},
+		{"CallExpr.Ellipsis", Field, 0, ""},
+		{"CallExpr.Fun", Field, 0, ""},
+		{"CallExpr.Lparen", Field, 0, ""},
+		{"CallExpr.Rparen", Field, 0, ""},
+		{"CaseClause", Type, 0, ""},
+		{"CaseClause.Body", Field, 0, ""},
+		{"CaseClause.Case", Field, 0, ""},
+		{"CaseClause.Colon", Field, 0, ""},
+		{"CaseClause.List", Field, 0, ""},
+		{"ChanDir", Type, 0, ""},
+		{"ChanType", Type, 0, ""},
+		{"ChanType.Arrow", Field, 1, ""},
+		{"ChanType.Begin", Field, 0, ""},
+		{"ChanType.Dir", Field, 0, ""},
+		{"ChanType.Value", Field, 0, ""},
+		{"CommClause", Type, 0, ""},
+		{"CommClause.Body", Field, 0, ""},
+		{"CommClause.Case", Field, 0, ""},
+		{"CommClause.Colon", Field, 0, ""},
+		{"CommClause.Comm", Field, 0, ""},
+		{"Comment", Type, 0, ""},
+		{"Comment.Slash", Field, 0, ""},
+		{"Comment.Text", Field, 0, ""},
+		{"CommentGroup", Type, 0, ""},
+		{"CommentGroup.List", Field, 0, ""},
+		{"CommentMap", Type, 1, ""},
+		{"CompositeLit", Type, 0, ""},
+		{"CompositeLit.Elts", Field, 0, ""},
+		{"CompositeLit.Incomplete", Field, 11, ""},
+		{"CompositeLit.Lbrace", Field, 0, ""},
+		{"CompositeLit.Rbrace", Field, 0, ""},
+		{"CompositeLit.Type", Field, 0, ""},
+		{"Con", Const, 0, ""},
+		{"Decl", Type, 0, ""},
+		{"DeclStmt", Type, 0, ""},
+		{"DeclStmt.Decl", Field, 0, ""},
+		{"DeferStmt", Type, 0, ""},
+		{"DeferStmt.Call", Field, 0, ""},
+		{"DeferStmt.Defer", Field, 0, ""},
+		{"Ellipsis", Type, 0, ""},
+		{"Ellipsis.Ellipsis", Field, 0, ""},
+		{"Ellipsis.Elt", Field, 0, ""},
+		{"EmptyStmt", Type, 0, ""},
+		{"EmptyStmt.Implicit", Field, 5, ""},
+		{"EmptyStmt.Semicolon", Field, 0, ""},
+		{"Expr", Type, 0, ""},
+		{"ExprStmt", Type, 0, ""},
+		{"ExprStmt.X", Field, 0, ""},
+		{"Field", Type, 0, ""},
+		{"Field.Comment", Field, 0, ""},
+		{"Field.Doc", Field, 0, ""},
+		{"Field.Names", Field, 0, ""},
+		{"Field.Tag", Field, 0, ""},
+		{"Field.Type", Field, 0, ""},
+		{"FieldFilter", Type, 0, ""},
+		{"FieldList", Type, 0, ""},
+		{"FieldList.Closing", Field, 0, ""},
+		{"FieldList.List", Field, 0, ""},
+		{"FieldList.Opening", Field, 0, ""},
+		{"File", Type, 0, ""},
+		{"File.Comments", Field, 0, ""},
+		{"File.Decls", Field, 0, ""},
+		{"File.Doc", Field, 0, ""},
+		{"File.FileEnd", Field, 20, ""},
+		{"File.FileStart", Field, 20, ""},
+		{"File.GoVersion", Field, 21, ""},
+		{"File.Imports", Field, 0, ""},
+		{"File.Name", Field, 0, ""},
+		{"File.Package", Field, 0, ""},
+		{"File.Scope", Field, 0, ""},
+		{"File.Unresolved", Field, 0, ""},
+		{"FileExports", Func, 0, "func(src *File) bool"},
+		{"Filter", Type, 0, ""},
+		{"FilterDecl", Func, 0, "func(decl Decl, f Filter) bool"},
+		{"FilterFile", Func, 0, "func(src *File, f Filter) bool"},
+		{"FilterFuncDuplicates", Const, 0, ""},
+		{"FilterImportDuplicates", Const, 0, ""},
+		{"FilterPackage", Func, 0, "func(pkg *Package, f Filter) bool"},
+		{"FilterUnassociatedComments", Const, 0, ""},
+		{"ForStmt", Type, 0, ""},
+		{"ForStmt.Body", Field, 0, ""},
+		{"ForStmt.Cond", Field, 0, ""},
+		{"ForStmt.For", Field, 0, ""},
+		{"ForStmt.Init", Field, 0, ""},
+		{"ForStmt.Post", Field, 0, ""},
+		{"Fprint", Func, 0, "func(w io.Writer, fset *token.FileSet, x any, f FieldFilter) error"},
+		{"Fun", Const, 0, ""},
+		{"FuncDecl", Type, 0, ""},
+		{"FuncDecl.Body", Field, 0, ""},
+		{"FuncDecl.Doc", Field, 0, ""},
+		{"FuncDecl.Name", Field, 0, ""},
+		{"FuncDecl.Recv", Field, 0, ""},
+		{"FuncDecl.Type", Field, 0, ""},
+		{"FuncLit", Type, 0, ""},
+		{"FuncLit.Body", Field, 0, ""},
+		{"FuncLit.Type", Field, 0, ""},
+		{"FuncType", Type, 0, ""},
+		{"FuncType.Func", Field, 0, ""},
+		{"FuncType.Params", Field, 0, ""},
+		{"FuncType.Results", Field, 0, ""},
+		{"FuncType.TypeParams", Field, 18, ""},
+		{"GenDecl", Type, 0, ""},
+		{"GenDecl.Doc", Field, 0, ""},
+		{"GenDecl.Lparen", Field, 0, ""},
+		{"GenDecl.Rparen", Field, 0, ""},
+		{"GenDecl.Specs", Field, 0, ""},
+		{"GenDecl.Tok", Field, 0, ""},
+		{"GenDecl.TokPos", Field, 0, ""},
+		{"GoStmt", Type, 0, ""},
+		{"GoStmt.Call", Field, 0, ""},
+		{"GoStmt.Go", Field, 0, ""},
+		{"Ident", Type, 0, ""},
+		{"Ident.Name", Field, 0, ""},
+		{"Ident.NamePos", Field, 0, ""},
+		{"Ident.Obj", Field, 0, ""},
+		{"IfStmt", Type, 0, ""},
+		{"IfStmt.Body", Field, 0, ""},
+		{"IfStmt.Cond", Field, 0, ""},
+		{"IfStmt.Else", Field, 0, ""},
+		{"IfStmt.If", Field, 0, ""},
+		{"IfStmt.Init", Field, 0, ""},
+		{"ImportSpec", Type, 0, ""},
+		{"ImportSpec.Comment", Field, 0, ""},
+		{"ImportSpec.Doc", Field, 0, ""},
+		{"ImportSpec.EndPos", Field, 0, ""},
+		{"ImportSpec.Name", Field, 0, ""},
+		{"ImportSpec.Path", Field, 0, ""},
+		{"Importer", Type, 0, ""},
+		{"IncDecStmt", Type, 0, ""},
+		{"IncDecStmt.Tok", Field, 0, ""},
+		{"IncDecStmt.TokPos", Field, 0, ""},
+		{"IncDecStmt.X", Field, 0, ""},
+		{"IndexExpr", Type, 0, ""},
+		{"IndexExpr.Index", Field, 0, ""},
+		{"IndexExpr.Lbrack", Field, 0, ""},
+		{"IndexExpr.Rbrack", Field, 0, ""},
+		{"IndexExpr.X", Field, 0, ""},
+		{"IndexListExpr", Type, 18, ""},
+		{"IndexListExpr.Indices", Field, 18, ""},
+		{"IndexListExpr.Lbrack", Field, 18, ""},
+		{"IndexListExpr.Rbrack", Field, 18, ""},
+		{"IndexListExpr.X", Field, 18, ""},
+		{"Inspect", Func, 0, "func(node Node, f func(Node) bool)"},
+		{"InterfaceType", Type, 0, ""},
+		{"InterfaceType.Incomplete", Field, 0, ""},
+		{"InterfaceType.Interface", Field, 0, ""},
+		{"InterfaceType.Methods", Field, 0, ""},
+		{"IsExported", Func, 0, "func(name string) bool"},
+		{"IsGenerated", Func, 21, "func(file *File) bool"},
+		{"KeyValueExpr", Type, 0, ""},
+		{"KeyValueExpr.Colon", Field, 0, ""},
+		{"KeyValueExpr.Key", Field, 0, ""},
+		{"KeyValueExpr.Value", Field, 0, ""},
+		{"LabeledStmt", Type, 0, ""},
+		{"LabeledStmt.Colon", Field, 0, ""},
+		{"LabeledStmt.Label", Field, 0, ""},
+		{"LabeledStmt.Stmt", Field, 0, ""},
+		{"Lbl", Const, 0, ""},
+		{"MapType", Type, 0, ""},
+		{"MapType.Key", Field, 0, ""},
+		{"MapType.Map", Field, 0, ""},
+		{"MapType.Value", Field, 0, ""},
+		{"MergeMode", Type, 0, ""},
+		{"MergePackageFiles", Func, 0, "func(pkg *Package, mode MergeMode) *File"},
+		{"NewCommentMap", Func, 1, "func(fset *token.FileSet, node Node, comments []*CommentGroup) CommentMap"},
+		{"NewIdent", Func, 0, "func(name string) *Ident"},
+		{"NewObj", Func, 0, "func(kind ObjKind, name string) *Object"},
+		{"NewPackage", Func, 0, "func(fset *token.FileSet, files map[string]*File, importer Importer, universe *Scope) (*Package, error)"},
+		{"NewScope", Func, 0, "func(outer *Scope) *Scope"},
+		{"Node", Type, 0, ""},
+		{"NotNilFilter", Func, 0, "func(_ string, v reflect.Value) bool"},
+		{"ObjKind", Type, 0, ""},
+		{"Object", Type, 0, ""},
+		{"Object.Data", Field, 0, ""},
+		{"Object.Decl", Field, 0, ""},
+		{"Object.Kind", Field, 0, ""},
+		{"Object.Name", Field, 0, ""},
+		{"Object.Type", Field, 0, ""},
+		{"Package", Type, 0, ""},
+		{"Package.Files", Field, 0, ""},
+		{"Package.Imports", Field, 0, ""},
+		{"Package.Name", Field, 0, ""},
+		{"Package.Scope", Field, 0, ""},
+		{"PackageExports", Func, 0, "func(pkg *Package) bool"},
+		{"ParenExpr", Type, 0, ""},
+		{"ParenExpr.Lparen", Field, 0, ""},
+		{"ParenExpr.Rparen", Field, 0, ""},
+		{"ParenExpr.X", Field, 0, ""},
+		{"Pkg", Const, 0, ""},
+		{"Preorder", Func, 23, "func(root Node) iter.Seq[Node]"},
+		{"Print", Func, 0, "func(fset *token.FileSet, x any) error"},
+		{"RECV", Const, 0, ""},
+		{"RangeStmt", Type, 0, ""},
+		{"RangeStmt.Body", Field, 0, ""},
+		{"RangeStmt.For", Field, 0, ""},
+		{"RangeStmt.Key", Field, 0, ""},
+		{"RangeStmt.Range", Field, 20, ""},
+		{"RangeStmt.Tok", Field, 0, ""},
+		{"RangeStmt.TokPos", Field, 0, ""},
+		{"RangeStmt.Value", Field, 0, ""},
+		{"RangeStmt.X", Field, 0, ""},
+		{"ReturnStmt", Type, 0, ""},
+		{"ReturnStmt.Results", Field, 0, ""},
+		{"ReturnStmt.Return", Field, 0, ""},
+		{"SEND", Const, 0, ""},
+		{"Scope", Type, 0, ""},
+		{"Scope.Objects", Field, 0, ""},
+		{"Scope.Outer", Field, 0, ""},
+		{"SelectStmt", Type, 0, ""},
+		{"SelectStmt.Body", Field, 0, ""},
+		{"SelectStmt.Select", Field, 0, ""},
+		{"SelectorExpr", Type, 0, ""},
+		{"SelectorExpr.Sel", Field, 0, ""},
+		{"SelectorExpr.X", Field, 0, ""},
+		{"SendStmt", Type, 0, ""},
+		{"SendStmt.Arrow", Field, 0, ""},
+		{"SendStmt.Chan", Field, 0, ""},
+		{"SendStmt.Value", Field, 0, ""},
+		{"SliceExpr", Type, 0, ""},
+		{"SliceExpr.High", Field, 0, ""},
+		{"SliceExpr.Lbrack", Field, 0, ""},
+		{"SliceExpr.Low", Field, 0, ""},
+		{"SliceExpr.Max", Field, 2, ""},
+		{"SliceExpr.Rbrack", Field, 0, ""},
+		{"SliceExpr.Slice3", Field, 2, ""},
+		{"SliceExpr.X", Field, 0, ""},
+		{"SortImports", Func, 0, "func(fset *token.FileSet, f *File)"},
+		{"Spec", Type, 0, ""},
+		{"StarExpr", Type, 0, ""},
+		{"StarExpr.Star", Field, 0, ""},
+		{"StarExpr.X", Field, 0, ""},
+		{"Stmt", Type, 0, ""},
+		{"StructType", Type, 0, ""},
+		{"StructType.Fields", Field, 0, ""},
+		{"StructType.Incomplete", Field, 0, ""},
+		{"StructType.Struct", Field, 0, ""},
+		{"SwitchStmt", Type, 0, ""},
+		{"SwitchStmt.Body", Field, 0, ""},
+		{"SwitchStmt.Init", Field, 0, ""},
+		{"SwitchStmt.Switch", Field, 0, ""},
+		{"SwitchStmt.Tag", Field, 0, ""},
+		{"Typ", Const, 0, ""},
+		{"TypeAssertExpr", Type, 0, ""},
+		{"TypeAssertExpr.Lparen", Field, 2, ""},
+		{"TypeAssertExpr.Rparen", Field, 2, ""},
+		{"TypeAssertExpr.Type", Field, 0, ""},
+		{"TypeAssertExpr.X", Field, 0, ""},
+		{"TypeSpec", Type, 0, ""},
+		{"TypeSpec.Assign", Field, 9, ""},
+		{"TypeSpec.Comment", Field, 0, ""},
+		{"TypeSpec.Doc", Field, 0, ""},
+		{"TypeSpec.Name", Field, 0, ""},
+		{"TypeSpec.Type", Field, 0, ""},
+		{"TypeSpec.TypeParams", Field, 18, ""},
+		{"TypeSwitchStmt", Type, 0, ""},
+		{"TypeSwitchStmt.Assign", Field, 0, ""},
+		{"TypeSwitchStmt.Body", Field, 0, ""},
+		{"TypeSwitchStmt.Init", Field, 0, ""},
+		{"TypeSwitchStmt.Switch", Field, 0, ""},
+		{"UnaryExpr", Type, 0, ""},
+		{"UnaryExpr.Op", Field, 0, ""},
+		{"UnaryExpr.OpPos", Field, 0, ""},
+		{"UnaryExpr.X", Field, 0, ""},
+		{"Unparen", Func, 22, "func(e Expr) Expr"},
+		{"ValueSpec", Type, 0, ""},
+		{"ValueSpec.Comment", Field, 0, ""},
+		{"ValueSpec.Doc", Field, 0, ""},
+		{"ValueSpec.Names", Field, 0, ""},
+		{"ValueSpec.Type", Field, 0, ""},
+		{"ValueSpec.Values", Field, 0, ""},
+		{"Var", Const, 0, ""},
+		{"Visitor", Type, 0, ""},
+		{"Walk", Func, 0, "func(v Visitor, node Node)"},
+	},
+	"go/build": {
+		{"(*Context).Import", Method, 0, ""},
+		{"(*Context).ImportDir", Method, 0, ""},
+		{"(*Context).MatchFile", Method, 2, ""},
+		{"(*Context).SrcDirs", Method, 0, ""},
+		{"(*MultiplePackageError).Error", Method, 4, ""},
+		{"(*NoGoError).Error", Method, 0, ""},
+		{"(*Package).IsCommand", Method, 0, ""},
+		{"AllowBinary", Const, 0, ""},
+		{"ArchChar", Func, 0, "func(goarch string) (string, error)"},
+		{"Context", Type, 0, ""},
+		{"Context.BuildTags", Field, 0, ""},
+		{"Context.CgoEnabled", Field, 0, ""},
+		{"Context.Compiler", Field, 0, ""},
+		{"Context.Dir", Field, 14, ""},
+		{"Context.GOARCH", Field, 0, ""},
+		{"Context.GOOS", Field, 0, ""},
+		{"Context.GOPATH", Field, 0, ""},
+		{"Context.GOROOT", Field, 0, ""},
+		{"Context.HasSubdir", Field, 0, ""},
+		{"Context.InstallSuffix", Field, 1, ""},
+		{"Context.IsAbsPath", Field, 0, ""},
+		{"Context.IsDir", Field, 0, ""},
+		{"Context.JoinPath", Field, 0, ""},
+		{"Context.OpenFile", Field, 0, ""},
+		{"Context.ReadDir", Field, 0, ""},
+		{"Context.ReleaseTags", Field, 1, ""},
+		{"Context.SplitPathList", Field, 0, ""},
+		{"Context.ToolTags", Field, 17, ""},
+		{"Context.UseAllFiles", Field, 0, ""},
+		{"Default", Var, 0, ""},
+		{"Directive", Type, 21, ""},
+		{"Directive.Pos", Field, 21, ""},
+		{"Directive.Text", Field, 21, ""},
+		{"FindOnly", Const, 0, ""},
+		{"IgnoreVendor", Const, 6, ""},
+		{"Import", Func, 0, "func(path string, srcDir string, mode ImportMode) (*Package, error)"},
+		{"ImportComment", Const, 4, ""},
+		{"ImportDir", Func, 0, "func(dir string, mode ImportMode) (*Package, error)"},
+		{"ImportMode", Type, 0, ""},
+		{"IsLocalImport", Func, 0, "func(path string) bool"},
+		{"MultiplePackageError", Type, 4, ""},
+		{"MultiplePackageError.Dir", Field, 4, ""},
+		{"MultiplePackageError.Files", Field, 4, ""},
+		{"MultiplePackageError.Packages", Field, 4, ""},
+		{"NoGoError", Type, 0, ""},
+		{"NoGoError.Dir", Field, 0, ""},
+		{"Package", Type, 0, ""},
+		{"Package.AllTags", Field, 2, ""},
+		{"Package.BinDir", Field, 0, ""},
+		{"Package.BinaryOnly", Field, 7, ""},
+		{"Package.CFiles", Field, 0, ""},
+		{"Package.CXXFiles", Field, 2, ""},
+		{"Package.CgoCFLAGS", Field, 0, ""},
+		{"Package.CgoCPPFLAGS", Field, 2, ""},
+		{"Package.CgoCXXFLAGS", Field, 2, ""},
+		{"Package.CgoFFLAGS", Field, 7, ""},
+		{"Package.CgoFiles", Field, 0, ""},
+		{"Package.CgoLDFLAGS", Field, 0, ""},
+		{"Package.CgoPkgConfig", Field, 0, ""},
+		{"Package.ConflictDir", Field, 2, ""},
+		{"Package.Dir", Field, 0, ""},
+		{"Package.Directives", Field, 21, ""},
+		{"Package.Doc", Field, 0, ""},
+		{"Package.EmbedPatternPos", Field, 16, ""},
+		{"Package.EmbedPatterns", Field, 16, ""},
+		{"Package.FFiles", Field, 7, ""},
+		{"Package.GoFiles", Field, 0, ""},
+		{"Package.Goroot", Field, 0, ""},
+		{"Package.HFiles", Field, 0, ""},
+		{"Package.IgnoredGoFiles", Field, 1, ""},
+		{"Package.IgnoredOtherFiles", Field, 16, ""},
+		{"Package.ImportComment", Field, 4, ""},
+		{"Package.ImportPath", Field, 0, ""},
+		{"Package.ImportPos", Field, 0, ""},
+		{"Package.Imports", Field, 0, ""},
+		{"Package.InvalidGoFiles", Field, 6, ""},
+		{"Package.MFiles", Field, 3, ""},
+		{"Package.Name", Field, 0, ""},
+		{"Package.PkgObj", Field, 0, ""},
+		{"Package.PkgRoot", Field, 0, ""},
+		{"Package.PkgTargetRoot", Field, 5, ""},
+		{"Package.Root", Field, 0, ""},
+		{"Package.SFiles", Field, 0, ""},
+		{"Package.SrcRoot", Field, 0, ""},
+		{"Package.SwigCXXFiles", Field, 1, ""},
+		{"Package.SwigFiles", Field, 1, ""},
+		{"Package.SysoFiles", Field, 0, ""},
+		{"Package.TestDirectives", Field, 21, ""},
+		{"Package.TestEmbedPatternPos", Field, 16, ""},
+		{"Package.TestEmbedPatterns", Field, 16, ""},
+		{"Package.TestGoFiles", Field, 0, ""},
+		{"Package.TestImportPos", Field, 0, ""},
+		{"Package.TestImports", Field, 0, ""},
+		{"Package.XTestDirectives", Field, 21, ""},
+		{"Package.XTestEmbedPatternPos", Field, 16, ""},
+		{"Package.XTestEmbedPatterns", Field, 16, ""},
+		{"Package.XTestGoFiles", Field, 0, ""},
+		{"Package.XTestImportPos", Field, 0, ""},
+		{"Package.XTestImports", Field, 0, ""},
+		{"ToolDir", Var, 0, ""},
+	},
+	"go/build/constraint": {
+		{"(*AndExpr).Eval", Method, 16, ""},
+		{"(*AndExpr).String", Method, 16, ""},
+		{"(*NotExpr).Eval", Method, 16, ""},
+		{"(*NotExpr).String", Method, 16, ""},
+		{"(*OrExpr).Eval", Method, 16, ""},
+		{"(*OrExpr).String", Method, 16, ""},
+		{"(*SyntaxError).Error", Method, 16, ""},
+		{"(*TagExpr).Eval", Method, 16, ""},
+		{"(*TagExpr).String", Method, 16, ""},
+		{"AndExpr", Type, 16, ""},
+		{"AndExpr.X", Field, 16, ""},
+		{"AndExpr.Y", Field, 16, ""},
+		{"Expr", Type, 16, ""},
+		{"GoVersion", Func, 21, "func(x Expr) string"},
+		{"IsGoBuild", Func, 16, "func(line string) bool"},
+		{"IsPlusBuild", Func, 16, "func(line string) bool"},
+		{"NotExpr", Type, 16, ""},
+		{"NotExpr.X", Field, 16, ""},
+		{"OrExpr", Type, 16, ""},
+		{"OrExpr.X", Field, 16, ""},
+		{"OrExpr.Y", Field, 16, ""},
+		{"Parse", Func, 16, "func(line string) (Expr, error)"},
+		{"PlusBuildLines", Func, 16, "func(x Expr) ([]string, error)"},
+		{"SyntaxError", Type, 16, ""},
+		{"SyntaxError.Err", Field, 16, ""},
+		{"SyntaxError.Offset", Field, 16, ""},
+		{"TagExpr", Type, 16, ""},
+		{"TagExpr.Tag", Field, 16, ""},
+	},
+	"go/constant": {
+		{"(Kind).String", Method, 18, ""},
+		{"BinaryOp", Func, 5, "func(x_ Value, op token.Token, y_ Value) Value"},
+		{"BitLen", Func, 5, "func(x Value) int"},
+		{"Bool", Const, 5, ""},
+		{"BoolVal", Func, 5, "func(x Value) bool"},
+		{"Bytes", Func, 5, "func(x Value) []byte"},
+		{"Compare", Func, 5, "func(x_ Value, op token.Token, y_ Value) bool"},
+		{"Complex", Const, 5, ""},
+		{"Denom", Func, 5, "func(x Value) Value"},
+		{"Float", Const, 5, ""},
+		{"Float32Val", Func, 5, "func(x Value) (float32, bool)"},
+		{"Float64Val", Func, 5, "func(x Value) (float64, bool)"},
+		{"Imag", Func, 5, "func(x Value) Value"},
+		{"Int", Const, 5, ""},
+		{"Int64Val", Func, 5, "func(x Value) (int64, bool)"},
+		{"Kind", Type, 5, ""},
+		{"Make", Func, 13, "func(x any) Value"},
+		{"MakeBool", Func, 5, "func(b bool) Value"},
+		{"MakeFloat64", Func, 5, "func(x float64) Value"},
+		{"MakeFromBytes", Func, 5, "func(bytes []byte) Value"},
+		{"MakeFromLiteral", Func, 5, "func(lit string, tok token.Token, zero uint) Value"},
+		{"MakeImag", Func, 5, "func(x Value) Value"},
+		{"MakeInt64", Func, 5, "func(x int64) Value"},
+		{"MakeString", Func, 5, "func(s string) Value"},
+		{"MakeUint64", Func, 5, "func(x uint64) Value"},
+		{"MakeUnknown", Func, 5, "func() Value"},
+		{"Num", Func, 5, "func(x Value) Value"},
+		{"Real", Func, 5, "func(x Value) Value"},
+		{"Shift", Func, 5, "func(x Value, op token.Token, s uint) Value"},
+		{"Sign", Func, 5, "func(x Value) int"},
+		{"String", Const, 5, ""},
+		{"StringVal", Func, 5, "func(x Value) string"},
+		{"ToComplex", Func, 6, "func(x Value) Value"},
+		{"ToFloat", Func, 6, "func(x Value) Value"},
+		{"ToInt", Func, 6, "func(x Value) Value"},
+		{"Uint64Val", Func, 5, "func(x Value) (uint64, bool)"},
+		{"UnaryOp", Func, 5, "func(op token.Token, y Value, prec uint) Value"},
+		{"Unknown", Const, 5, ""},
+		{"Val", Func, 13, "func(x Value) any"},
+		{"Value", Type, 5, ""},
+	},
+	"go/doc": {
+		{"(*Package).Filter", Method, 0, ""},
+		{"(*Package).HTML", Method, 19, ""},
+		{"(*Package).Markdown", Method, 19, ""},
+		{"(*Package).Parser", Method, 19, ""},
+		{"(*Package).Printer", Method, 19, ""},
+		{"(*Package).Synopsis", Method, 19, ""},
+		{"(*Package).Text", Method, 19, ""},
+		{"AllDecls", Const, 0, ""},
+		{"AllMethods", Const, 0, ""},
+		{"Example", Type, 0, ""},
+		{"Example.Code", Field, 0, ""},
+		{"Example.Comments", Field, 0, ""},
+		{"Example.Doc", Field, 0, ""},
+		{"Example.EmptyOutput", Field, 1, ""},
+		{"Example.Name", Field, 0, ""},
+		{"Example.Order", Field, 1, ""},
+		{"Example.Output", Field, 0, ""},
+		{"Example.Play", Field, 1, ""},
+		{"Example.Suffix", Field, 14, ""},
+		{"Example.Unordered", Field, 7, ""},
+		{"Examples", Func, 0, "func(testFiles ...*ast.File) []*Example"},
+		{"Filter", Type, 0, ""},
+		{"Func", Type, 0, ""},
+		{"Func.Decl", Field, 0, ""},
+		{"Func.Doc", Field, 0, ""},
+		{"Func.Examples", Field, 14, ""},
+		{"Func.Level", Field, 0, ""},
+		{"Func.Name", Field, 0, ""},
+		{"Func.Orig", Field, 0, ""},
+		{"Func.Recv", Field, 0, ""},
+		{"IllegalPrefixes", Var, 1, ""},
+		{"IsPredeclared", Func, 8, "func(s string) bool"},
+		{"Mode", Type, 0, ""},
+		{"New", Func, 0, "func(pkg *ast.Package, importPath string, mode Mode) *Package"},
+		{"NewFromFiles", Func, 14, "func(fset *token.FileSet, files []*ast.File, importPath string, opts ...any) (*Package, error)"},
+		{"Note", Type, 1, ""},
+		{"Note.Body", Field, 1, ""},
+		{"Note.End", Field, 1, ""},
+		{"Note.Pos", Field, 1, ""},
+		{"Note.UID", Field, 1, ""},
+		{"Package", Type, 0, ""},
+		{"Package.Bugs", Field, 0, ""},
+		{"Package.Consts", Field, 0, ""},
+		{"Package.Doc", Field, 0, ""},
+		{"Package.Examples", Field, 14, ""},
+		{"Package.Filenames", Field, 0, ""},
+		{"Package.Funcs", Field, 0, ""},
+		{"Package.ImportPath", Field, 0, ""},
+		{"Package.Imports", Field, 0, ""},
+		{"Package.Name", Field, 0, ""},
+		{"Package.Notes", Field, 1, ""},
+		{"Package.Types", Field, 0, ""},
+		{"Package.Vars", Field, 0, ""},
+		{"PreserveAST", Const, 12, ""},
+		{"Synopsis", Func, 0, "func(text string) string"},
+		{"ToHTML", Func, 0, "func(w io.Writer, text string, words map[string]string)"},
+		{"ToText", Func, 0, "func(w io.Writer, text string, prefix string, codePrefix string, width int)"},
+		{"Type", Type, 0, ""},
+		{"Type.Consts", Field, 0, ""},
+		{"Type.Decl", Field, 0, ""},
+		{"Type.Doc", Field, 0, ""},
+		{"Type.Examples", Field, 14, ""},
+		{"Type.Funcs", Field, 0, ""},
+		{"Type.Methods", Field, 0, ""},
+		{"Type.Name", Field, 0, ""},
+		{"Type.Vars", Field, 0, ""},
+		{"Value", Type, 0, ""},
+		{"Value.Decl", Field, 0, ""},
+		{"Value.Doc", Field, 0, ""},
+		{"Value.Names", Field, 0, ""},
+	},
+	"go/doc/comment": {
+		{"(*DocLink).DefaultURL", Method, 19, ""},
+		{"(*Heading).DefaultID", Method, 19, ""},
+		{"(*List).BlankBefore", Method, 19, ""},
+		{"(*List).BlankBetween", Method, 19, ""},
+		{"(*Parser).Parse", Method, 19, ""},
+		{"(*Printer).Comment", Method, 19, ""},
+		{"(*Printer).HTML", Method, 19, ""},
+		{"(*Printer).Markdown", Method, 19, ""},
+		{"(*Printer).Text", Method, 19, ""},
+		{"Block", Type, 19, ""},
+		{"Code", Type, 19, ""},
+		{"Code.Text", Field, 19, ""},
+		{"DefaultLookupPackage", Func, 19, "func(name string) (importPath string, ok bool)"},
+		{"Doc", Type, 19, ""},
+		{"Doc.Content", Field, 19, ""},
+		{"Doc.Links", Field, 19, ""},
+		{"DocLink", Type, 19, ""},
+		{"DocLink.ImportPath", Field, 19, ""},
+		{"DocLink.Name", Field, 19, ""},
+		{"DocLink.Recv", Field, 19, ""},
+		{"DocLink.Text", Field, 19, ""},
+		{"Heading", Type, 19, ""},
+		{"Heading.Text", Field, 19, ""},
+		{"Italic", Type, 19, ""},
+		{"Link", Type, 19, ""},
+		{"Link.Auto", Field, 19, ""},
+		{"Link.Text", Field, 19, ""},
+		{"Link.URL", Field, 19, ""},
+		{"LinkDef", Type, 19, ""},
+		{"LinkDef.Text", Field, 19, ""},
+		{"LinkDef.URL", Field, 19, ""},
+		{"LinkDef.Used", Field, 19, ""},
+		{"List", Type, 19, ""},
+		{"List.ForceBlankBefore", Field, 19, ""},
+		{"List.ForceBlankBetween", Field, 19, ""},
+		{"List.Items", Field, 19, ""},
+		{"ListItem", Type, 19, ""},
+		{"ListItem.Content", Field, 19, ""},
+		{"ListItem.Number", Field, 19, ""},
+		{"Paragraph", Type, 19, ""},
+		{"Paragraph.Text", Field, 19, ""},
+		{"Parser", Type, 19, ""},
+		{"Parser.LookupPackage", Field, 19, ""},
+		{"Parser.LookupSym", Field, 19, ""},
+		{"Parser.Words", Field, 19, ""},
+		{"Plain", Type, 19, ""},
+		{"Printer", Type, 19, ""},
+		{"Printer.DocLinkBaseURL", Field, 19, ""},
+		{"Printer.DocLinkURL", Field, 19, ""},
+		{"Printer.HeadingID", Field, 19, ""},
+		{"Printer.HeadingLevel", Field, 19, ""},
+		{"Printer.TextCodePrefix", Field, 19, ""},
+		{"Printer.TextPrefix", Field, 19, ""},
+		{"Printer.TextWidth", Field, 19, ""},
+		{"Text", Type, 19, ""},
+	},
+	"go/format": {
+		{"Node", Func, 1, "func(dst io.Writer, fset *token.FileSet, node any) error"},
+		{"Source", Func, 1, "func(src []byte) ([]byte, error)"},
+	},
+	"go/importer": {
+		{"Default", Func, 5, "func() types.Importer"},
+		{"For", Func, 5, "func(compiler string, lookup Lookup) types.Importer"},
+		{"ForCompiler", Func, 12, "func(fset *token.FileSet, compiler string, lookup Lookup) types.Importer"},
+		{"Lookup", Type, 5, ""},
+	},
+	"go/parser": {
+		{"AllErrors", Const, 1, ""},
+		{"DeclarationErrors", Const, 0, ""},
+		{"ImportsOnly", Const, 0, ""},
+		{"Mode", Type, 0, ""},
+		{"PackageClauseOnly", Const, 0, ""},
+		{"ParseComments", Const, 0, ""},
+		{"ParseDir", Func, 0, "func(fset *token.FileSet, path string, filter func(fs.FileInfo) bool, mode Mode) (pkgs map[string]*ast.Package, first error)"},
+		{"ParseExpr", Func, 0, "func(x string) (ast.Expr, error)"},
+		{"ParseExprFrom", Func, 5, "func(fset *token.FileSet, filename string, src any, mode Mode) (expr ast.Expr, err error)"},
+		{"ParseFile", Func, 0, "func(fset *token.FileSet, filename string, src any, mode Mode) (f *ast.File, err error)"},
+		{"SkipObjectResolution", Const, 17, ""},
+		{"SpuriousErrors", Const, 0, ""},
+		{"Trace", Const, 0, ""},
+	},
+	"go/printer": {
+		{"(*Config).Fprint", Method, 0, ""},
+		{"CommentedNode", Type, 0, ""},
+		{"CommentedNode.Comments", Field, 0, ""},
+		{"CommentedNode.Node", Field, 0, ""},
+		{"Config", Type, 0, ""},
+		{"Config.Indent", Field, 1, ""},
+		{"Config.Mode", Field, 0, ""},
+		{"Config.Tabwidth", Field, 0, ""},
+		{"Fprint", Func, 0, "func(output io.Writer, fset *token.FileSet, node any) error"},
+		{"Mode", Type, 0, ""},
+		{"RawFormat", Const, 0, ""},
+		{"SourcePos", Const, 0, ""},
+		{"TabIndent", Const, 0, ""},
+		{"UseSpaces", Const, 0, ""},
+	},
+	"go/scanner": {
+		{"(*ErrorList).Add", Method, 0, ""},
+		{"(*ErrorList).RemoveMultiples", Method, 0, ""},
+		{"(*ErrorList).Reset", Method, 0, ""},
+		{"(*Scanner).Init", Method, 0, ""},
+		{"(*Scanner).Scan", Method, 0, ""},
+		{"(Error).Error", Method, 0, ""},
+		{"(ErrorList).Err", Method, 0, ""},
+		{"(ErrorList).Error", Method, 0, ""},
+		{"(ErrorList).Len", Method, 0, ""},
+		{"(ErrorList).Less", Method, 0, ""},
+		{"(ErrorList).Sort", Method, 0, ""},
+		{"(ErrorList).Swap", Method, 0, ""},
+		{"Error", Type, 0, ""},
+		{"Error.Msg", Field, 0, ""},
+		{"Error.Pos", Field, 0, ""},
+		{"ErrorHandler", Type, 0, ""},
+		{"ErrorList", Type, 0, ""},
+		{"Mode", Type, 0, ""},
+		{"PrintError", Func, 0, "func(w io.Writer, err error)"},
+		{"ScanComments", Const, 0, ""},
+		{"Scanner", Type, 0, ""},
+		{"Scanner.ErrorCount", Field, 0, ""},
+	},
+	"go/token": {
+		{"(*File).AddLine", Method, 0, ""},
+		{"(*File).AddLineColumnInfo", Method, 11, ""},
+		{"(*File).AddLineInfo", Method, 0, ""},
+		{"(*File).Base", Method, 0, ""},
+		{"(*File).Line", Method, 0, ""},
+		{"(*File).LineCount", Method, 0, ""},
+		{"(*File).LineStart", Method, 12, ""},
+		{"(*File).Lines", Method, 21, ""},
+		{"(*File).MergeLine", Method, 2, ""},
+		{"(*File).Name", Method, 0, ""},
+		{"(*File).Offset", Method, 0, ""},
+		{"(*File).Pos", Method, 0, ""},
+		{"(*File).Position", Method, 0, ""},
+		{"(*File).PositionFor", Method, 4, ""},
+		{"(*File).SetLines", Method, 0, ""},
+		{"(*File).SetLinesForContent", Method, 0, ""},
+		{"(*File).Size", Method, 0, ""},
+		{"(*FileSet).AddFile", Method, 0, ""},
+		{"(*FileSet).Base", Method, 0, ""},
+		{"(*FileSet).File", Method, 0, ""},
+		{"(*FileSet).Iterate", Method, 0, ""},
+		{"(*FileSet).Position", Method, 0, ""},
+		{"(*FileSet).PositionFor", Method, 4, ""},
+		{"(*FileSet).Read", Method, 0, ""},
+		{"(*FileSet).RemoveFile", Method, 20, ""},
+		{"(*FileSet).Write", Method, 0, ""},
+		{"(*Position).IsValid", Method, 0, ""},
+		{"(Pos).IsValid", Method, 0, ""},
+		{"(Position).String", Method, 0, ""},
+		{"(Token).IsKeyword", Method, 0, ""},
+		{"(Token).IsLiteral", Method, 0, ""},
+		{"(Token).IsOperator", Method, 0, ""},
+		{"(Token).Precedence", Method, 0, ""},
+		{"(Token).String", Method, 0, ""},
+		{"ADD", Const, 0, ""},
+		{"ADD_ASSIGN", Const, 0, ""},
+		{"AND", Const, 0, ""},
+		{"AND_ASSIGN", Const, 0, ""},
+		{"AND_NOT", Const, 0, ""},
+		{"AND_NOT_ASSIGN", Const, 0, ""},
+		{"ARROW", Const, 0, ""},
+		{"ASSIGN", Const, 0, ""},
+		{"BREAK", Const, 0, ""},
+		{"CASE", Const, 0, ""},
+		{"CHAN", Const, 0, ""},
+		{"CHAR", Const, 0, ""},
+		{"COLON", Const, 0, ""},
+		{"COMMA", Const, 0, ""},
+		{"COMMENT", Const, 0, ""},
+		{"CONST", Const, 0, ""},
+		{"CONTINUE", Const, 0, ""},
+		{"DEC", Const, 0, ""},
+		{"DEFAULT", Const, 0, ""},
+		{"DEFER", Const, 0, ""},
+		{"DEFINE", Const, 0, ""},
+		{"ELLIPSIS", Const, 0, ""},
+		{"ELSE", Const, 0, ""},
+		{"EOF", Const, 0, ""},
+		{"EQL", Const, 0, ""},
+		{"FALLTHROUGH", Const, 0, ""},
+		{"FLOAT", Const, 0, ""},
+		{"FOR", Const, 0, ""},
+		{"FUNC", Const, 0, ""},
+		{"File", Type, 0, ""},
+		{"FileSet", Type, 0, ""},
+		{"GEQ", Const, 0, ""},
+		{"GO", Const, 0, ""},
+		{"GOTO", Const, 0, ""},
+		{"GTR", Const, 0, ""},
+		{"HighestPrec", Const, 0, ""},
+		{"IDENT", Const, 0, ""},
+		{"IF", Const, 0, ""},
+		{"ILLEGAL", Const, 0, ""},
+		{"IMAG", Const, 0, ""},
+		{"IMPORT", Const, 0, ""},
+		{"INC", Const, 0, ""},
+		{"INT", Const, 0, ""},
+		{"INTERFACE", Const, 0, ""},
+		{"IsExported", Func, 13, "func(name string) bool"},
+		{"IsIdentifier", Func, 13, "func(name string) bool"},
+		{"IsKeyword", Func, 13, "func(name string) bool"},
+		{"LAND", Const, 0, ""},
+		{"LBRACE", Const, 0, ""},
+		{"LBRACK", Const, 0, ""},
+		{"LEQ", Const, 0, ""},
+		{"LOR", Const, 0, ""},
+		{"LPAREN", Const, 0, ""},
+		{"LSS", Const, 0, ""},
+		{"Lookup", Func, 0, "func(ident string) Token"},
+		{"LowestPrec", Const, 0, ""},
+		{"MAP", Const, 0, ""},
+		{"MUL", Const, 0, ""},
+		{"MUL_ASSIGN", Const, 0, ""},
+		{"NEQ", Const, 0, ""},
+		{"NOT", Const, 0, ""},
+		{"NewFileSet", Func, 0, "func() *FileSet"},
+		{"NoPos", Const, 0, ""},
+		{"OR", Const, 0, ""},
+		{"OR_ASSIGN", Const, 0, ""},
+		{"PACKAGE", Const, 0, ""},
+		{"PERIOD", Const, 0, ""},
+		{"Pos", Type, 0, ""},
+		{"Position", Type, 0, ""},
+		{"Position.Column", Field, 0, ""},
+		{"Position.Filename", Field, 0, ""},
+		{"Position.Line", Field, 0, ""},
+		{"Position.Offset", Field, 0, ""},
+		{"QUO", Const, 0, ""},
+		{"QUO_ASSIGN", Const, 0, ""},
+		{"RANGE", Const, 0, ""},
+		{"RBRACE", Const, 0, ""},
+		{"RBRACK", Const, 0, ""},
+		{"REM", Const, 0, ""},
+		{"REM_ASSIGN", Const, 0, ""},
+		{"RETURN", Const, 0, ""},
+		{"RPAREN", Const, 0, ""},
+		{"SELECT", Const, 0, ""},
+		{"SEMICOLON", Const, 0, ""},
+		{"SHL", Const, 0, ""},
+		{"SHL_ASSIGN", Const, 0, ""},
+		{"SHR", Const, 0, ""},
+		{"SHR_ASSIGN", Const, 0, ""},
+		{"STRING", Const, 0, ""},
+		{"STRUCT", Const, 0, ""},
+		{"SUB", Const, 0, ""},
+		{"SUB_ASSIGN", Const, 0, ""},
+		{"SWITCH", Const, 0, ""},
+		{"TILDE", Const, 18, ""},
+		{"TYPE", Const, 0, ""},
+		{"Token", Type, 0, ""},
+		{"UnaryPrec", Const, 0, ""},
+		{"VAR", Const, 0, ""},
+		{"XOR", Const, 0, ""},
+		{"XOR_ASSIGN", Const, 0, ""},
+	},
+	"go/types": {
+		{"(*Alias).Obj", Method, 22, ""},
+		{"(*Alias).Origin", Method, 23, ""},
+		{"(*Alias).Rhs", Method, 23, ""},
+		{"(*Alias).SetTypeParams", Method, 23, ""},
+		{"(*Alias).String", Method, 22, ""},
+		{"(*Alias).TypeArgs", Method, 23, ""},
+		{"(*Alias).TypeParams", Method, 23, ""},
+		{"(*Alias).Underlying", Method, 22, ""},
+		{"(*ArgumentError).Error", Method, 18, ""},
+		{"(*ArgumentError).Unwrap", Method, 18, ""},
+		{"(*Array).Elem", Method, 5, ""},
+		{"(*Array).Len", Method, 5, ""},
+		{"(*Array).String", Method, 5, ""},
+		{"(*Array).Underlying", Method, 5, ""},
+		{"(*Basic).Info", Method, 5, ""},
+		{"(*Basic).Kind", Method, 5, ""},
+		{"(*Basic).Name", Method, 5, ""},
+		{"(*Basic).String", Method, 5, ""},
+		{"(*Basic).Underlying", Method, 5, ""},
+		{"(*Builtin).Exported", Method, 5, ""},
+		{"(*Builtin).Id", Method, 5, ""},
+		{"(*Builtin).Name", Method, 5, ""},
+		{"(*Builtin).Parent", Method, 5, ""},
+		{"(*Builtin).Pkg", Method, 5, ""},
+		{"(*Builtin).Pos", Method, 5, ""},
+		{"(*Builtin).String", Method, 5, ""},
+		{"(*Builtin).Type", Method, 5, ""},
+		{"(*Chan).Dir", Method, 5, ""},
+		{"(*Chan).Elem", Method, 5, ""},
+		{"(*Chan).String", Method, 5, ""},
+		{"(*Chan).Underlying", Method, 5, ""},
+		{"(*Checker).Files", Method, 5, ""},
+		{"(*Config).Check", Method, 5, ""},
+		{"(*Const).Exported", Method, 5, ""},
+		{"(*Const).Id", Method, 5, ""},
+		{"(*Const).Name", Method, 5, ""},
+		{"(*Const).Parent", Method, 5, ""},
+		{"(*Const).Pkg", Method, 5, ""},
+		{"(*Const).Pos", Method, 5, ""},
+		{"(*Const).String", Method, 5, ""},
+		{"(*Const).Type", Method, 5, ""},
+		{"(*Const).Val", Method, 5, ""},
+		{"(*Func).Exported", Method, 5, ""},
+		{"(*Func).FullName", Method, 5, ""},
+		{"(*Func).Id", Method, 5, ""},
+		{"(*Func).Name", Method, 5, ""},
+		{"(*Func).Origin", Method, 19, ""},
+		{"(*Func).Parent", Method, 5, ""},
+		{"(*Func).Pkg", Method, 5, ""},
+		{"(*Func).Pos", Method, 5, ""},
+		{"(*Func).Scope", Method, 5, ""},
+		{"(*Func).Signature", Method, 23, ""},
+		{"(*Func).String", Method, 5, ""},
+		{"(*Func).Type", Method, 5, ""},
+		{"(*Info).ObjectOf", Method, 5, ""},
+		{"(*Info).PkgNameOf", Method, 22, ""},
+		{"(*Info).TypeOf", Method, 5, ""},
+		{"(*Initializer).String", Method, 5, ""},
+		{"(*Interface).Complete", Method, 5, ""},
+		{"(*Interface).Embedded", Method, 5, ""},
+		{"(*Interface).EmbeddedType", Method, 11, ""},
+		{"(*Interface).EmbeddedTypes", Method, 24, ""},
+		{"(*Interface).Empty", Method, 5, ""},
+		{"(*Interface).ExplicitMethod", Method, 5, ""},
+		{"(*Interface).ExplicitMethods", Method, 24, ""},
+		{"(*Interface).IsComparable", Method, 18, ""},
+		{"(*Interface).IsImplicit", Method, 18, ""},
+		{"(*Interface).IsMethodSet", Method, 18, ""},
+		{"(*Interface).MarkImplicit", Method, 18, ""},
+		{"(*Interface).Method", Method, 5, ""},
+		{"(*Interface).Methods", Method, 24, ""},
+		{"(*Interface).NumEmbeddeds", Method, 5, ""},
+		{"(*Interface).NumExplicitMethods", Method, 5, ""},
+		{"(*Interface).NumMethods", Method, 5, ""},
+		{"(*Interface).String", Method, 5, ""},
+		{"(*Interface).Underlying", Method, 5, ""},
+		{"(*Label).Exported", Method, 5, ""},
+		{"(*Label).Id", Method, 5, ""},
+		{"(*Label).Name", Method, 5, ""},
+		{"(*Label).Parent", Method, 5, ""},
+		{"(*Label).Pkg", Method, 5, ""},
+		{"(*Label).Pos", Method, 5, ""},
+		{"(*Label).String", Method, 5, ""},
+		{"(*Label).Type", Method, 5, ""},
+		{"(*Map).Elem", Method, 5, ""},
+		{"(*Map).Key", Method, 5, ""},
+		{"(*Map).String", Method, 5, ""},
+		{"(*Map).Underlying", Method, 5, ""},
+		{"(*MethodSet).At", Method, 5, ""},
+		{"(*MethodSet).Len", Method, 5, ""},
+		{"(*MethodSet).Lookup", Method, 5, ""},
+		{"(*MethodSet).Methods", Method, 24, ""},
+		{"(*MethodSet).String", Method, 5, ""},
+		{"(*Named).AddMethod", Method, 5, ""},
+		{"(*Named).Method", Method, 5, ""},
+		{"(*Named).Methods", Method, 24, ""},
+		{"(*Named).NumMethods", Method, 5, ""},
+		{"(*Named).Obj", Method, 5, ""},
+		{"(*Named).Origin", Method, 18, ""},
+		{"(*Named).SetTypeParams", Method, 18, ""},
+		{"(*Named).SetUnderlying", Method, 5, ""},
+		{"(*Named).String", Method, 5, ""},
+		{"(*Named).TypeArgs", Method, 18, ""},
+		{"(*Named).TypeParams", Method, 18, ""},
+		{"(*Named).Underlying", Method, 5, ""},
+		{"(*Nil).Exported", Method, 5, ""},
+		{"(*Nil).Id", Method, 5, ""},
+		{"(*Nil).Name", Method, 5, ""},
+		{"(*Nil).Parent", Method, 5, ""},
+		{"(*Nil).Pkg", Method, 5, ""},
+		{"(*Nil).Pos", Method, 5, ""},
+		{"(*Nil).String", Method, 5, ""},
+		{"(*Nil).Type", Method, 5, ""},
+		{"(*Package).Complete", Method, 5, ""},
+		{"(*Package).GoVersion", Method, 21, ""},
+		{"(*Package).Imports", Method, 5, ""},
+		{"(*Package).MarkComplete", Method, 5, ""},
+		{"(*Package).Name", Method, 5, ""},
+		{"(*Package).Path", Method, 5, ""},
+		{"(*Package).Scope", Method, 5, ""},
+		{"(*Package).SetImports", Method, 5, ""},
+		{"(*Package).SetName", Method, 6, ""},
+		{"(*Package).String", Method, 5, ""},
+		{"(*PkgName).Exported", Method, 5, ""},
+		{"(*PkgName).Id", Method, 5, ""},
+		{"(*PkgName).Imported", Method, 5, ""},
+		{"(*PkgName).Name", Method, 5, ""},
+		{"(*PkgName).Parent", Method, 5, ""},
+		{"(*PkgName).Pkg", Method, 5, ""},
+		{"(*PkgName).Pos", Method, 5, ""},
+		{"(*PkgName).String", Method, 5, ""},
+		{"(*PkgName).Type", Method, 5, ""},
+		{"(*Pointer).Elem", Method, 5, ""},
+		{"(*Pointer).String", Method, 5, ""},
+		{"(*Pointer).Underlying", Method, 5, ""},
+		{"(*Scope).Child", Method, 5, ""},
+		{"(*Scope).Children", Method, 24, ""},
+		{"(*Scope).Contains", Method, 5, ""},
+		{"(*Scope).End", Method, 5, ""},
+		{"(*Scope).Innermost", Method, 5, ""},
+		{"(*Scope).Insert", Method, 5, ""},
+		{"(*Scope).Len", Method, 5, ""},
+		{"(*Scope).Lookup", Method, 5, ""},
+		{"(*Scope).LookupParent", Method, 5, ""},
+		{"(*Scope).Names", Method, 5, ""},
+		{"(*Scope).NumChildren", Method, 5, ""},
+		{"(*Scope).Parent", Method, 5, ""},
+		{"(*Scope).Pos", Method, 5, ""},
+		{"(*Scope).String", Method, 5, ""},
+		{"(*Scope).WriteTo", Method, 5, ""},
+		{"(*Selection).Index", Method, 5, ""},
+		{"(*Selection).Indirect", Method, 5, ""},
+		{"(*Selection).Kind", Method, 5, ""},
+		{"(*Selection).Obj", Method, 5, ""},
+		{"(*Selection).Recv", Method, 5, ""},
+		{"(*Selection).String", Method, 5, ""},
+		{"(*Selection).Type", Method, 5, ""},
+		{"(*Signature).Params", Method, 5, ""},
+		{"(*Signature).Recv", Method, 5, ""},
+		{"(*Signature).RecvTypeParams", Method, 18, ""},
+		{"(*Signature).Results", Method, 5, ""},
+		{"(*Signature).String", Method, 5, ""},
+		{"(*Signature).TypeParams", Method, 18, ""},
+		{"(*Signature).Underlying", Method, 5, ""},
+		{"(*Signature).Variadic", Method, 5, ""},
+		{"(*Slice).Elem", Method, 5, ""},
+		{"(*Slice).String", Method, 5, ""},
+		{"(*Slice).Underlying", Method, 5, ""},
+		{"(*StdSizes).Alignof", Method, 5, ""},
+		{"(*StdSizes).Offsetsof", Method, 5, ""},
+		{"(*StdSizes).Sizeof", Method, 5, ""},
+		{"(*Struct).Field", Method, 5, ""},
+		{"(*Struct).Fields", Method, 24, ""},
+		{"(*Struct).NumFields", Method, 5, ""},
+		{"(*Struct).String", Method, 5, ""},
+		{"(*Struct).Tag", Method, 5, ""},
+		{"(*Struct).Underlying", Method, 5, ""},
+		{"(*Term).String", Method, 18, ""},
+		{"(*Term).Tilde", Method, 18, ""},
+		{"(*Term).Type", Method, 18, ""},
+		{"(*Tuple).At", Method, 5, ""},
+		{"(*Tuple).Len", Method, 5, ""},
+		{"(*Tuple).String", Method, 5, ""},
+		{"(*Tuple).Underlying", Method, 5, ""},
+		{"(*Tuple).Variables", Method, 24, ""},
+		{"(*TypeList).At", Method, 18, ""},
+		{"(*TypeList).Len", Method, 18, ""},
+		{"(*TypeList).Types", Method, 24, ""},
+		{"(*TypeName).Exported", Method, 5, ""},
+		{"(*TypeName).Id", Method, 5, ""},
+		{"(*TypeName).IsAlias", Method, 9, ""},
+		{"(*TypeName).Name", Method, 5, ""},
+		{"(*TypeName).Parent", Method, 5, ""},
+		{"(*TypeName).Pkg", Method, 5, ""},
+		{"(*TypeName).Pos", Method, 5, ""},
+		{"(*TypeName).String", Method, 5, ""},
+		{"(*TypeName).Type", Method, 5, ""},
+		{"(*TypeParam).Constraint", Method, 18, ""},
+		{"(*TypeParam).Index", Method, 18, ""},
+		{"(*TypeParam).Obj", Method, 18, ""},
+		{"(*TypeParam).SetConstraint", Method, 18, ""},
+		{"(*TypeParam).String", Method, 18, ""},
+		{"(*TypeParam).Underlying", Method, 18, ""},
+		{"(*TypeParamList).At", Method, 18, ""},
+		{"(*TypeParamList).Len", Method, 18, ""},
+		{"(*TypeParamList).TypeParams", Method, 24, ""},
+		{"(*Union).Len", Method, 18, ""},
+		{"(*Union).String", Method, 18, ""},
+		{"(*Union).Term", Method, 18, ""},
+		{"(*Union).Terms", Method, 24, ""},
+		{"(*Union).Underlying", Method, 18, ""},
+		{"(*Var).Anonymous", Method, 5, ""},
+		{"(*Var).Embedded", Method, 11, ""},
+		{"(*Var).Exported", Method, 5, ""},
+		{"(*Var).Id", Method, 5, ""},
+		{"(*Var).IsField", Method, 5, ""},
+		{"(*Var).Kind", Method, 25, ""},
+		{"(*Var).Name", Method, 5, ""},
+		{"(*Var).Origin", Method, 19, ""},
+		{"(*Var).Parent", Method, 5, ""},
+		{"(*Var).Pkg", Method, 5, ""},
+		{"(*Var).Pos", Method, 5, ""},
+		{"(*Var).SetKind", Method, 25, ""},
+		{"(*Var).String", Method, 5, ""},
+		{"(*Var).Type", Method, 5, ""},
+		{"(Checker).ObjectOf", Method, 5, ""},
+		{"(Checker).PkgNameOf", Method, 22, ""},
+		{"(Checker).TypeOf", Method, 5, ""},
+		{"(Error).Error", Method, 5, ""},
+		{"(TypeAndValue).Addressable", Method, 5, ""},
+		{"(TypeAndValue).Assignable", Method, 5, ""},
+		{"(TypeAndValue).HasOk", Method, 5, ""},
+		{"(TypeAndValue).IsBuiltin", Method, 5, ""},
+		{"(TypeAndValue).IsNil", Method, 5, ""},
+		{"(TypeAndValue).IsType", Method, 5, ""},
+		{"(TypeAndValue).IsValue", Method, 5, ""},
+		{"(TypeAndValue).IsVoid", Method, 5, ""},
+		{"(VarKind).String", Method, 25, ""},
+		{"Alias", Type, 22, ""},
+		{"ArgumentError", Type, 18, ""},
+		{"ArgumentError.Err", Field, 18, ""},
+		{"ArgumentError.Index", Field, 18, ""},
+		{"Array", Type, 5, ""},
+		{"AssertableTo", Func, 5, "func(V *Interface, T Type) bool"},
+		{"AssignableTo", Func, 5, "func(V Type, T Type) bool"},
+		{"Basic", Type, 5, ""},
+		{"BasicInfo", Type, 5, ""},
+		{"BasicKind", Type, 5, ""},
+		{"Bool", Const, 5, ""},
+		{"Builtin", Type, 5, ""},
+		{"Byte", Const, 5, ""},
+		{"Chan", Type, 5, ""},
+		{"ChanDir", Type, 5, ""},
+		{"CheckExpr", Func, 13, "func(fset *token.FileSet, pkg *Package, pos token.Pos, expr ast.Expr, info *Info) (err error)"},
+		{"Checker", Type, 5, ""},
+		{"Checker.Info", Field, 5, ""},
+		{"Comparable", Func, 5, "func(T Type) bool"},
+		{"Complex128", Const, 5, ""},
+		{"Complex64", Const, 5, ""},
+		{"Config", Type, 5, ""},
+		{"Config.Context", Field, 18, ""},
+		{"Config.DisableUnusedImportCheck", Field, 5, ""},
+		{"Config.Error", Field, 5, ""},
+		{"Config.FakeImportC", Field, 5, ""},
+		{"Config.GoVersion", Field, 18, ""},
+		{"Config.IgnoreFuncBodies", Field, 5, ""},
+		{"Config.Importer", Field, 5, ""},
+		{"Config.Sizes", Field, 5, ""},
+		{"Const", Type, 5, ""},
+		{"Context", Type, 18, ""},
+		{"ConvertibleTo", Func, 5, "func(V Type, T Type) bool"},
+		{"DefPredeclaredTestFuncs", Func, 5, "func()"},
+		{"Default", Func, 8, "func(t Type) Type"},
+		{"Error", Type, 5, ""},
+		{"Error.Fset", Field, 5, ""},
+		{"Error.Msg", Field, 5, ""},
+		{"Error.Pos", Field, 5, ""},
+		{"Error.Soft", Field, 5, ""},
+		{"Eval", Func, 5, "func(fset *token.FileSet, pkg *Package, pos token.Pos, expr string) (_ TypeAndValue, err error)"},
+		{"ExprString", Func, 5, "func(x ast.Expr) string"},
+		{"FieldVal", Const, 5, ""},
+		{"FieldVar", Const, 25, ""},
+		{"Float32", Const, 5, ""},
+		{"Float64", Const, 5, ""},
+		{"Func", Type, 5, ""},
+		{"Id", Func, 5, "func(pkg *Package, name string) string"},
+		{"Identical", Func, 5, "func(x Type, y Type) bool"},
+		{"IdenticalIgnoreTags", Func, 8, "func(x Type, y Type) bool"},
+		{"Implements", Func, 5, "func(V Type, T *Interface) bool"},
+		{"ImportMode", Type, 6, ""},
+		{"Importer", Type, 5, ""},
+		{"ImporterFrom", Type, 6, ""},
+		{"Info", Type, 5, ""},
+		{"Info.Defs", Field, 5, ""},
+		{"Info.FileVersions", Field, 22, ""},
+		{"Info.Implicits", Field, 5, ""},
+		{"Info.InitOrder", Field, 5, ""},
+		{"Info.Instances", Field, 18, ""},
+		{"Info.Scopes", Field, 5, ""},
+		{"Info.Selections", Field, 5, ""},
+		{"Info.Types", Field, 5, ""},
+		{"Info.Uses", Field, 5, ""},
+		{"Initializer", Type, 5, ""},
+		{"Initializer.Lhs", Field, 5, ""},
+		{"Initializer.Rhs", Field, 5, ""},
+		{"Instance", Type, 18, ""},
+		{"Instance.Type", Field, 18, ""},
+		{"Instance.TypeArgs", Field, 18, ""},
+		{"Instantiate", Func, 18, "func(ctxt *Context, orig Type, targs []Type, validate bool) (Type, error)"},
+		{"Int", Const, 5, ""},
+		{"Int16", Const, 5, ""},
+		{"Int32", Const, 5, ""},
+		{"Int64", Const, 5, ""},
+		{"Int8", Const, 5, ""},
+		{"Interface", Type, 5, ""},
+		{"Invalid", Const, 5, ""},
+		{"IsBoolean", Const, 5, ""},
+		{"IsComplex", Const, 5, ""},
+		{"IsConstType", Const, 5, ""},
+		{"IsFloat", Const, 5, ""},
+		{"IsInteger", Const, 5, ""},
+		{"IsInterface", Func, 5, "func(t Type) bool"},
+		{"IsNumeric", Const, 5, ""},
+		{"IsOrdered", Const, 5, ""},
+		{"IsString", Const, 5, ""},
+		{"IsUnsigned", Const, 5, ""},
+		{"IsUntyped", Const, 5, ""},
+		{"Label", Type, 5, ""},
+		{"LocalVar", Const, 25, ""},
+		{"LookupFieldOrMethod", Func, 5, "func(T Type, addressable bool, pkg *Package, name string) (obj Object, index []int, indirect bool)"},
+		{"LookupSelection", Func, 25, ""},
+		{"Map", Type, 5, ""},
+		{"MethodExpr", Const, 5, ""},
+		{"MethodSet", Type, 5, ""},
+		{"MethodVal", Const, 5, ""},
+		{"MissingMethod", Func, 5, "func(V Type, T *Interface, static bool) (method *Func, wrongType bool)"},
+		{"Named", Type, 5, ""},
+		{"NewAlias", Func, 22, "func(obj *TypeName, rhs Type) *Alias"},
+		{"NewArray", Func, 5, "func(elem Type, len int64) *Array"},
+		{"NewChan", Func, 5, "func(dir ChanDir, elem Type) *Chan"},
+		{"NewChecker", Func, 5, "func(conf *Config, fset *token.FileSet, pkg *Package, info *Info) *Checker"},
+		{"NewConst", Func, 5, "func(pos token.Pos, pkg *Package, name string, typ Type, val constant.Value) *Const"},
+		{"NewContext", Func, 18, "func() *Context"},
+		{"NewField", Func, 5, "func(pos token.Pos, pkg *Package, name string, typ Type, embedded bool) *Var"},
+		{"NewFunc", Func, 5, "func(pos token.Pos, pkg *Package, name string, sig *Signature) *Func"},
+		{"NewInterface", Func, 5, "func(methods []*Func, embeddeds []*Named) *Interface"},
+		{"NewInterfaceType", Func, 11, "func(methods []*Func, embeddeds []Type) *Interface"},
+		{"NewLabel", Func, 5, "func(pos token.Pos, pkg *Package, name string) *Label"},
+		{"NewMap", Func, 5, "func(key Type, elem Type) *Map"},
+		{"NewMethodSet", Func, 5, "func(T Type) *MethodSet"},
+		{"NewNamed", Func, 5, "func(obj *TypeName, underlying Type, methods []*Func) *Named"},
+		{"NewPackage", Func, 5, "func(path string, name string) *Package"},
+		{"NewParam", Func, 5, "func(pos token.Pos, pkg *Package, name string, typ Type) *Var"},
+		{"NewPkgName", Func, 5, "func(pos token.Pos, pkg *Package, name string, imported *Package) *PkgName"},
+		{"NewPointer", Func, 5, "func(elem Type) *Pointer"},
+		{"NewScope", Func, 5, "func(parent *Scope, pos token.Pos, end token.Pos, comment string) *Scope"},
+		{"NewSignature", Func, 5, "func(recv *Var, params *Tuple, results *Tuple, variadic bool) *Signature"},
+		{"NewSignatureType", Func, 18, "func(recv *Var, recvTypeParams []*TypeParam, typeParams []*TypeParam, params *Tuple, results *Tuple, variadic bool) *Signature"},
+		{"NewSlice", Func, 5, "func(elem Type) *Slice"},
+		{"NewStruct", Func, 5, "func(fields []*Var, tags []string) *Struct"},
+		{"NewTerm", Func, 18, "func(tilde bool, typ Type) *Term"},
+		{"NewTuple", Func, 5, "func(x ...*Var) *Tuple"},
+		{"NewTypeName", Func, 5, "func(pos token.Pos, pkg *Package, name string, typ Type) *TypeName"},
+		{"NewTypeParam", Func, 18, "func(obj *TypeName, constraint Type) *TypeParam"},
+		{"NewUnion", Func, 18, "func(terms []*Term) *Union"},
+		{"NewVar", Func, 5, "func(pos token.Pos, pkg *Package, name string, typ Type) *Var"},
+		{"Nil", Type, 5, ""},
+		{"Object", Type, 5, ""},
+		{"ObjectString", Func, 5, "func(obj Object, qf Qualifier) string"},
+		{"Package", Type, 5, ""},
+		{"PackageVar", Const, 25, ""},
+		{"ParamVar", Const, 25, ""},
+		{"PkgName", Type, 5, ""},
+		{"Pointer", Type, 5, ""},
+		{"Qualifier", Type, 5, ""},
+		{"RecvOnly", Const, 5, ""},
+		{"RecvVar", Const, 25, ""},
+		{"RelativeTo", Func, 5, "func(pkg *Package) Qualifier"},
+		{"ResultVar", Const, 25, ""},
+		{"Rune", Const, 5, ""},
+		{"Satisfies", Func, 20, "func(V Type, T *Interface) bool"},
+		{"Scope", Type, 5, ""},
+		{"Selection", Type, 5, ""},
+		{"SelectionKind", Type, 5, ""},
+		{"SelectionString", Func, 5, "func(s *Selection, qf Qualifier) string"},
+		{"SendOnly", Const, 5, ""},
+		{"SendRecv", Const, 5, ""},
+		{"Signature", Type, 5, ""},
+		{"Sizes", Type, 5, ""},
+		{"SizesFor", Func, 9, "func(compiler string, arch string) Sizes"},
+		{"Slice", Type, 5, ""},
+		{"StdSizes", Type, 5, ""},
+		{"StdSizes.MaxAlign", Field, 5, ""},
+		{"StdSizes.WordSize", Field, 5, ""},
+		{"String", Const, 5, ""},
+		{"Struct", Type, 5, ""},
+		{"Term", Type, 18, ""},
+		{"Tuple", Type, 5, ""},
+		{"Typ", Var, 5, ""},
+		{"Type", Type, 5, ""},
+		{"TypeAndValue", Type, 5, ""},
+		{"TypeAndValue.Type", Field, 5, ""},
+		{"TypeAndValue.Value", Field, 5, ""},
+		{"TypeList", Type, 18, ""},
+		{"TypeName", Type, 5, ""},
+		{"TypeParam", Type, 18, ""},
+		{"TypeParamList", Type, 18, ""},
+		{"TypeString", Func, 5, "func(typ Type, qf Qualifier) string"},
+		{"Uint", Const, 5, ""},
+		{"Uint16", Const, 5, ""},
+		{"Uint32", Const, 5, ""},
+		{"Uint64", Const, 5, ""},
+		{"Uint8", Const, 5, ""},
+		{"Uintptr", Const, 5, ""},
+		{"Unalias", Func, 22, "func(t Type) Type"},
+		{"Union", Type, 18, ""},
+		{"Universe", Var, 5, ""},
+		{"Unsafe", Var, 5, ""},
+		{"UnsafePointer", Const, 5, ""},
+		{"UntypedBool", Const, 5, ""},
+		{"UntypedComplex", Const, 5, ""},
+		{"UntypedFloat", Const, 5, ""},
+		{"UntypedInt", Const, 5, ""},
+		{"UntypedNil", Const, 5, ""},
+		{"UntypedRune", Const, 5, ""},
+		{"UntypedString", Const, 5, ""},
+		{"Var", Type, 5, ""},
+		{"VarKind", Type, 25, ""},
+		{"WriteExpr", Func, 5, "func(buf *bytes.Buffer, x ast.Expr)"},
+		{"WriteSignature", Func, 5, "func(buf *bytes.Buffer, sig *Signature, qf Qualifier)"},
+		{"WriteType", Func, 5, "func(buf *bytes.Buffer, typ Type, qf Qualifier)"},
+	},
+	"go/version": {
+		{"Compare", Func, 22, "func(x string, y string) int"},
+		{"IsValid", Func, 22, "func(x string) bool"},
+		{"Lang", Func, 22, "func(x string) string"},
+	},
+	"hash": {
+		{"Hash", Type, 0, ""},
+		{"Hash32", Type, 0, ""},
+		{"Hash64", Type, 0, ""},
+	},
+	"hash/adler32": {
+		{"Checksum", Func, 0, "func(data []byte) uint32"},
+		{"New", Func, 0, "func() hash.Hash32"},
+		{"Size", Const, 0, ""},
+	},
+	"hash/crc32": {
+		{"Castagnoli", Const, 0, ""},
+		{"Checksum", Func, 0, "func(data []byte, tab *Table) uint32"},
+		{"ChecksumIEEE", Func, 0, "func(data []byte) uint32"},
+		{"IEEE", Const, 0, ""},
+		{"IEEETable", Var, 0, ""},
+		{"Koopman", Const, 0, ""},
+		{"MakeTable", Func, 0, "func(poly uint32) *Table"},
+		{"New", Func, 0, "func(tab *Table) hash.Hash32"},
+		{"NewIEEE", Func, 0, "func() hash.Hash32"},
+		{"Size", Const, 0, ""},
+		{"Table", Type, 0, ""},
+		{"Update", Func, 0, "func(crc uint32, tab *Table, p []byte) uint32"},
+	},
+	"hash/crc64": {
+		{"Checksum", Func, 0, "func(data []byte, tab *Table) uint64"},
+		{"ECMA", Const, 0, ""},
+		{"ISO", Const, 0, ""},
+		{"MakeTable", Func, 0, "func(poly uint64) *Table"},
+		{"New", Func, 0, "func(tab *Table) hash.Hash64"},
+		{"Size", Const, 0, ""},
+		{"Table", Type, 0, ""},
+		{"Update", Func, 0, "func(crc uint64, tab *Table, p []byte) uint64"},
+	},
+	"hash/fnv": {
+		{"New128", Func, 9, "func() hash.Hash"},
+		{"New128a", Func, 9, "func() hash.Hash"},
+		{"New32", Func, 0, "func() hash.Hash32"},
+		{"New32a", Func, 0, "func() hash.Hash32"},
+		{"New64", Func, 0, "func() hash.Hash64"},
+		{"New64a", Func, 0, "func() hash.Hash64"},
+	},
+	"hash/maphash": {
+		{"(*Hash).BlockSize", Method, 14, ""},
+		{"(*Hash).Reset", Method, 14, ""},
+		{"(*Hash).Seed", Method, 14, ""},
+		{"(*Hash).SetSeed", Method, 14, ""},
+		{"(*Hash).Size", Method, 14, ""},
+		{"(*Hash).Sum", Method, 14, ""},
+		{"(*Hash).Sum64", Method, 14, ""},
+		{"(*Hash).Write", Method, 14, ""},
+		{"(*Hash).WriteByte", Method, 14, ""},
+		{"(*Hash).WriteString", Method, 14, ""},
+		{"Bytes", Func, 19, "func(seed Seed, b []byte) uint64"},
+		{"Comparable", Func, 24, "func[T comparable](seed Seed, v T) uint64"},
+		{"Hash", Type, 14, ""},
+		{"MakeSeed", Func, 14, "func() Seed"},
+		{"Seed", Type, 14, ""},
+		{"String", Func, 19, "func(seed Seed, s string) uint64"},
+		{"WriteComparable", Func, 24, "func[T comparable](h *Hash, x T)"},
+	},
+	"html": {
+		{"EscapeString", Func, 0, "func(s string) string"},
+		{"UnescapeString", Func, 0, "func(s string) string"},
+	},
+	"html/template": {
+		{"(*Error).Error", Method, 0, ""},
+		{"(*Template).AddParseTree", Method, 0, ""},
+		{"(*Template).Clone", Method, 0, ""},
+		{"(*Template).DefinedTemplates", Method, 6, ""},
+		{"(*Template).Delims", Method, 0, ""},
+		{"(*Template).Execute", Method, 0, ""},
+		{"(*Template).ExecuteTemplate", Method, 0, ""},
+		{"(*Template).Funcs", Method, 0, ""},
+		{"(*Template).Lookup", Method, 0, ""},
+		{"(*Template).Name", Method, 0, ""},
+		{"(*Template).New", Method, 0, ""},
+		{"(*Template).Option", Method, 5, ""},
+		{"(*Template).Parse", Method, 0, ""},
+		{"(*Template).ParseFS", Method, 16, ""},
+		{"(*Template).ParseFiles", Method, 0, ""},
+		{"(*Template).ParseGlob", Method, 0, ""},
+		{"(*Template).Templates", Method, 0, ""},
+		{"CSS", Type, 0, ""},
+		{"ErrAmbigContext", Const, 0, ""},
+		{"ErrBadHTML", Const, 0, ""},
+		{"ErrBranchEnd", Const, 0, ""},
+		{"ErrEndContext", Const, 0, ""},
+		{"ErrJSTemplate", Const, 21, ""},
+		{"ErrNoSuchTemplate", Const, 0, ""},
+		{"ErrOutputContext", Const, 0, ""},
+		{"ErrPartialCharset", Const, 0, ""},
+		{"ErrPartialEscape", Const, 0, ""},
+		{"ErrPredefinedEscaper", Const, 9, ""},
+		{"ErrRangeLoopReentry", Const, 0, ""},
+		{"ErrSlashAmbig", Const, 0, ""},
+		{"Error", Type, 0, ""},
+		{"Error.Description", Field, 0, ""},
+		{"Error.ErrorCode", Field, 0, ""},
+		{"Error.Line", Field, 0, ""},
+		{"Error.Name", Field, 0, ""},
+		{"Error.Node", Field, 4, ""},
+		{"ErrorCode", Type, 0, ""},
+		{"FuncMap", Type, 0, ""},
+		{"HTML", Type, 0, ""},
+		{"HTMLAttr", Type, 0, ""},
+		{"HTMLEscape", Func, 0, "func(w io.Writer, b []byte)"},
+		{"HTMLEscapeString", Func, 0, "func(s string) string"},
+		{"HTMLEscaper", Func, 0, "func(args ...any) string"},
+		{"IsTrue", Func, 6, "func(val any) (truth bool, ok bool)"},
+		{"JS", Type, 0, ""},
+		{"JSEscape", Func, 0, "func(w io.Writer, b []byte)"},
+		{"JSEscapeString", Func, 0, "func(s string) string"},
+		{"JSEscaper", Func, 0, "func(args ...any) string"},
+		{"JSStr", Type, 0, ""},
+		{"Must", Func, 0, "func(t *Template, err error) *Template"},
+		{"New", Func, 0, "func(name string) *Template"},
+		{"OK", Const, 0, ""},
+		{"ParseFS", Func, 16, "func(fs fs.FS, patterns ...string) (*Template, error)"},
+		{"ParseFiles", Func, 0, "func(filenames ...string) (*Template, error)"},
+		{"ParseGlob", Func, 0, "func(pattern string) (*Template, error)"},
+		{"Srcset", Type, 10, ""},
+		{"Template", Type, 0, ""},
+		{"Template.Tree", Field, 2, ""},
+		{"URL", Type, 0, ""},
+		{"URLQueryEscaper", Func, 0, "func(args ...any) string"},
+	},
+	"image": {
+		{"(*Alpha).AlphaAt", Method, 4, ""},
+		{"(*Alpha).At", Method, 0, ""},
+		{"(*Alpha).Bounds", Method, 0, ""},
+		{"(*Alpha).ColorModel", Method, 0, ""},
+		{"(*Alpha).Opaque", Method, 0, ""},
+		{"(*Alpha).PixOffset", Method, 0, ""},
+		{"(*Alpha).RGBA64At", Method, 17, ""},
+		{"(*Alpha).Set", Method, 0, ""},
+		{"(*Alpha).SetAlpha", Method, 0, ""},
+		{"(*Alpha).SetRGBA64", Method, 17, ""},
+		{"(*Alpha).SubImage", Method, 0, ""},
+		{"(*Alpha16).Alpha16At", Method, 4, ""},
+		{"(*Alpha16).At", Method, 0, ""},
+		{"(*Alpha16).Bounds", Method, 0, ""},
+		{"(*Alpha16).ColorModel", Method, 0, ""},
+		{"(*Alpha16).Opaque", Method, 0, ""},
+		{"(*Alpha16).PixOffset", Method, 0, ""},
+		{"(*Alpha16).RGBA64At", Method, 17, ""},
+		{"(*Alpha16).Set", Method, 0, ""},
+		{"(*Alpha16).SetAlpha16", Method, 0, ""},
+		{"(*Alpha16).SetRGBA64", Method, 17, ""},
+		{"(*Alpha16).SubImage", Method, 0, ""},
+		{"(*CMYK).At", Method, 5, ""},
+		{"(*CMYK).Bounds", Method, 5, ""},
+		{"(*CMYK).CMYKAt", Method, 5, ""},
+		{"(*CMYK).ColorModel", Method, 5, ""},
+		{"(*CMYK).Opaque", Method, 5, ""},
+		{"(*CMYK).PixOffset", Method, 5, ""},
+		{"(*CMYK).RGBA64At", Method, 17, ""},
+		{"(*CMYK).Set", Method, 5, ""},
+		{"(*CMYK).SetCMYK", Method, 5, ""},
+		{"(*CMYK).SetRGBA64", Method, 17, ""},
+		{"(*CMYK).SubImage", Method, 5, ""},
+		{"(*Gray).At", Method, 0, ""},
+		{"(*Gray).Bounds", Method, 0, ""},
+		{"(*Gray).ColorModel", Method, 0, ""},
+		{"(*Gray).GrayAt", Method, 4, ""},
+		{"(*Gray).Opaque", Method, 0, ""},
+		{"(*Gray).PixOffset", Method, 0, ""},
+		{"(*Gray).RGBA64At", Method, 17, ""},
+		{"(*Gray).Set", Method, 0, ""},
+		{"(*Gray).SetGray", Method, 0, ""},
+		{"(*Gray).SetRGBA64", Method, 17, ""},
+		{"(*Gray).SubImage", Method, 0, ""},
+		{"(*Gray16).At", Method, 0, ""},
+		{"(*Gray16).Bounds", Method, 0, ""},
+		{"(*Gray16).ColorModel", Method, 0, ""},
+		{"(*Gray16).Gray16At", Method, 4, ""},
+		{"(*Gray16).Opaque", Method, 0, ""},
+		{"(*Gray16).PixOffset", Method, 0, ""},
+		{"(*Gray16).RGBA64At", Method, 17, ""},
+		{"(*Gray16).Set", Method, 0, ""},
+		{"(*Gray16).SetGray16", Method, 0, ""},
+		{"(*Gray16).SetRGBA64", Method, 17, ""},
+		{"(*Gray16).SubImage", Method, 0, ""},
+		{"(*NRGBA).At", Method, 0, ""},
+		{"(*NRGBA).Bounds", Method, 0, ""},
+		{"(*NRGBA).ColorModel", Method, 0, ""},
+		{"(*NRGBA).NRGBAAt", Method, 4, ""},
+		{"(*NRGBA).Opaque", Method, 0, ""},
+		{"(*NRGBA).PixOffset", Method, 0, ""},
+		{"(*NRGBA).RGBA64At", Method, 17, ""},
+		{"(*NRGBA).Set", Method, 0, ""},
+		{"(*NRGBA).SetNRGBA", Method, 0, ""},
+		{"(*NRGBA).SetRGBA64", Method, 17, ""},
+		{"(*NRGBA).SubImage", Method, 0, ""},
+		{"(*NRGBA64).At", Method, 0, ""},
+		{"(*NRGBA64).Bounds", Method, 0, ""},
+		{"(*NRGBA64).ColorModel", Method, 0, ""},
+		{"(*NRGBA64).NRGBA64At", Method, 4, ""},
+		{"(*NRGBA64).Opaque", Method, 0, ""},
+		{"(*NRGBA64).PixOffset", Method, 0, ""},
+		{"(*NRGBA64).RGBA64At", Method, 17, ""},
+		{"(*NRGBA64).Set", Method, 0, ""},
+		{"(*NRGBA64).SetNRGBA64", Method, 0, ""},
+		{"(*NRGBA64).SetRGBA64", Method, 17, ""},
+		{"(*NRGBA64).SubImage", Method, 0, ""},
+		{"(*NYCbCrA).AOffset", Method, 6, ""},
+		{"(*NYCbCrA).At", Method, 6, ""},
+		{"(*NYCbCrA).Bounds", Method, 6, ""},
+		{"(*NYCbCrA).COffset", Method, 6, ""},
+		{"(*NYCbCrA).ColorModel", Method, 6, ""},
+		{"(*NYCbCrA).NYCbCrAAt", Method, 6, ""},
+		{"(*NYCbCrA).Opaque", Method, 6, ""},
+		{"(*NYCbCrA).RGBA64At", Method, 17, ""},
+		{"(*NYCbCrA).SubImage", Method, 6, ""},
+		{"(*NYCbCrA).YCbCrAt", Method, 6, ""},
+		{"(*NYCbCrA).YOffset", Method, 6, ""},
+		{"(*Paletted).At", Method, 0, ""},
+		{"(*Paletted).Bounds", Method, 0, ""},
+		{"(*Paletted).ColorIndexAt", Method, 0, ""},
+		{"(*Paletted).ColorModel", Method, 0, ""},
+		{"(*Paletted).Opaque", Method, 0, ""},
+		{"(*Paletted).PixOffset", Method, 0, ""},
+		{"(*Paletted).RGBA64At", Method, 17, ""},
+		{"(*Paletted).Set", Method, 0, ""},
+		{"(*Paletted).SetColorIndex", Method, 0, ""},
+		{"(*Paletted).SetRGBA64", Method, 17, ""},
+		{"(*Paletted).SubImage", Method, 0, ""},
+		{"(*RGBA).At", Method, 0, ""},
+		{"(*RGBA).Bounds", Method, 0, ""},
+		{"(*RGBA).ColorModel", Method, 0, ""},
+		{"(*RGBA).Opaque", Method, 0, ""},
+		{"(*RGBA).PixOffset", Method, 0, ""},
+		{"(*RGBA).RGBA64At", Method, 17, ""},
+		{"(*RGBA).RGBAAt", Method, 4, ""},
+		{"(*RGBA).Set", Method, 0, ""},
+		{"(*RGBA).SetRGBA", Method, 0, ""},
+		{"(*RGBA).SetRGBA64", Method, 17, ""},
+		{"(*RGBA).SubImage", Method, 0, ""},
+		{"(*RGBA64).At", Method, 0, ""},
+		{"(*RGBA64).Bounds", Method, 0, ""},
+		{"(*RGBA64).ColorModel", Method, 0, ""},
+		{"(*RGBA64).Opaque", Method, 0, ""},
+		{"(*RGBA64).PixOffset", Method, 0, ""},
+		{"(*RGBA64).RGBA64At", Method, 4, ""},
+		{"(*RGBA64).Set", Method, 0, ""},
+		{"(*RGBA64).SetRGBA64", Method, 0, ""},
+		{"(*RGBA64).SubImage", Method, 0, ""},
+		{"(*Uniform).At", Method, 0, ""},
+		{"(*Uniform).Bounds", Method, 0, ""},
+		{"(*Uniform).ColorModel", Method, 0, ""},
+		{"(*Uniform).Convert", Method, 0, ""},
+		{"(*Uniform).Opaque", Method, 0, ""},
+		{"(*Uniform).RGBA", Method, 0, ""},
+		{"(*Uniform).RGBA64At", Method, 17, ""},
+		{"(*YCbCr).At", Method, 0, ""},
+		{"(*YCbCr).Bounds", Method, 0, ""},
+		{"(*YCbCr).COffset", Method, 0, ""},
+		{"(*YCbCr).ColorModel", Method, 0, ""},
+		{"(*YCbCr).Opaque", Method, 0, ""},
+		{"(*YCbCr).RGBA64At", Method, 17, ""},
+		{"(*YCbCr).SubImage", Method, 0, ""},
+		{"(*YCbCr).YCbCrAt", Method, 4, ""},
+		{"(*YCbCr).YOffset", Method, 0, ""},
+		{"(Point).Add", Method, 0, ""},
+		{"(Point).Div", Method, 0, ""},
+		{"(Point).Eq", Method, 0, ""},
+		{"(Point).In", Method, 0, ""},
+		{"(Point).Mod", Method, 0, ""},
+		{"(Point).Mul", Method, 0, ""},
+		{"(Point).String", Method, 0, ""},
+		{"(Point).Sub", Method, 0, ""},
+		{"(Rectangle).Add", Method, 0, ""},
+		{"(Rectangle).At", Method, 5, ""},
+		{"(Rectangle).Bounds", Method, 5, ""},
+		{"(Rectangle).Canon", Method, 0, ""},
+		{"(Rectangle).ColorModel", Method, 5, ""},
+		{"(Rectangle).Dx", Method, 0, ""},
+		{"(Rectangle).Dy", Method, 0, ""},
+		{"(Rectangle).Empty", Method, 0, ""},
+		{"(Rectangle).Eq", Method, 0, ""},
+		{"(Rectangle).In", Method, 0, ""},
+		{"(Rectangle).Inset", Method, 0, ""},
+		{"(Rectangle).Intersect", Method, 0, ""},
+		{"(Rectangle).Overlaps", Method, 0, ""},
+		{"(Rectangle).RGBA64At", Method, 17, ""},
+		{"(Rectangle).Size", Method, 0, ""},
+		{"(Rectangle).String", Method, 0, ""},
+		{"(Rectangle).Sub", Method, 0, ""},
+		{"(Rectangle).Union", Method, 0, ""},
+		{"(YCbCrSubsampleRatio).String", Method, 0, ""},
+		{"Alpha", Type, 0, ""},
+		{"Alpha.Pix", Field, 0, ""},
+		{"Alpha.Rect", Field, 0, ""},
+		{"Alpha.Stride", Field, 0, ""},
+		{"Alpha16", Type, 0, ""},
+		{"Alpha16.Pix", Field, 0, ""},
+		{"Alpha16.Rect", Field, 0, ""},
+		{"Alpha16.Stride", Field, 0, ""},
+		{"Black", Var, 0, ""},
+		{"CMYK", Type, 5, ""},
+		{"CMYK.Pix", Field, 5, ""},
+		{"CMYK.Rect", Field, 5, ""},
+		{"CMYK.Stride", Field, 5, ""},
+		{"Config", Type, 0, ""},
+		{"Config.ColorModel", Field, 0, ""},
+		{"Config.Height", Field, 0, ""},
+		{"Config.Width", Field, 0, ""},
+		{"Decode", Func, 0, "func(r io.Reader) (Image, string, error)"},
+		{"DecodeConfig", Func, 0, "func(r io.Reader) (Config, string, error)"},
+		{"ErrFormat", Var, 0, ""},
+		{"Gray", Type, 0, ""},
+		{"Gray.Pix", Field, 0, ""},
+		{"Gray.Rect", Field, 0, ""},
+		{"Gray.Stride", Field, 0, ""},
+		{"Gray16", Type, 0, ""},
+		{"Gray16.Pix", Field, 0, ""},
+		{"Gray16.Rect", Field, 0, ""},
+		{"Gray16.Stride", Field, 0, ""},
+		{"Image", Type, 0, ""},
+		{"NRGBA", Type, 0, ""},
+		{"NRGBA.Pix", Field, 0, ""},
+		{"NRGBA.Rect", Field, 0, ""},
+		{"NRGBA.Stride", Field, 0, ""},
+		{"NRGBA64", Type, 0, ""},
+		{"NRGBA64.Pix", Field, 0, ""},
+		{"NRGBA64.Rect", Field, 0, ""},
+		{"NRGBA64.Stride", Field, 0, ""},
+		{"NYCbCrA", Type, 6, ""},
+		{"NYCbCrA.A", Field, 6, ""},
+		{"NYCbCrA.AStride", Field, 6, ""},
+		{"NYCbCrA.YCbCr", Field, 6, ""},
+		{"NewAlpha", Func, 0, "func(r Rectangle) *Alpha"},
+		{"NewAlpha16", Func, 0, "func(r Rectangle) *Alpha16"},
+		{"NewCMYK", Func, 5, "func(r Rectangle) *CMYK"},
+		{"NewGray", Func, 0, "func(r Rectangle) *Gray"},
+		{"NewGray16", Func, 0, "func(r Rectangle) *Gray16"},
+		{"NewNRGBA", Func, 0, "func(r Rectangle) *NRGBA"},
+		{"NewNRGBA64", Func, 0, "func(r Rectangle) *NRGBA64"},
+		{"NewNYCbCrA", Func, 6, "func(r Rectangle, subsampleRatio YCbCrSubsampleRatio) *NYCbCrA"},
+		{"NewPaletted", Func, 0, "func(r Rectangle, p color.Palette) *Paletted"},
+		{"NewRGBA", Func, 0, "func(r Rectangle) *RGBA"},
+		{"NewRGBA64", Func, 0, "func(r Rectangle) *RGBA64"},
+		{"NewUniform", Func, 0, "func(c color.Color) *Uniform"},
+		{"NewYCbCr", Func, 0, "func(r Rectangle, subsampleRatio YCbCrSubsampleRatio) *YCbCr"},
+		{"Opaque", Var, 0, ""},
+		{"Paletted", Type, 0, ""},
+		{"Paletted.Palette", Field, 0, ""},
+		{"Paletted.Pix", Field, 0, ""},
+		{"Paletted.Rect", Field, 0, ""},
+		{"Paletted.Stride", Field, 0, ""},
+		{"PalettedImage", Type, 0, ""},
+		{"Point", Type, 0, ""},
+		{"Point.X", Field, 0, ""},
+		{"Point.Y", Field, 0, ""},
+		{"Pt", Func, 0, "func(X int, Y int) Point"},
+		{"RGBA", Type, 0, ""},
+		{"RGBA.Pix", Field, 0, ""},
+		{"RGBA.Rect", Field, 0, ""},
+		{"RGBA.Stride", Field, 0, ""},
+		{"RGBA64", Type, 0, ""},
+		{"RGBA64.Pix", Field, 0, ""},
+		{"RGBA64.Rect", Field, 0, ""},
+		{"RGBA64.Stride", Field, 0, ""},
+		{"RGBA64Image", Type, 17, ""},
+		{"Rect", Func, 0, "func(x0 int, y0 int, x1 int, y1 int) Rectangle"},
+		{"Rectangle", Type, 0, ""},
+		{"Rectangle.Max", Field, 0, ""},
+		{"Rectangle.Min", Field, 0, ""},
+		{"RegisterFormat", Func, 0, "func(name string, magic string, decode func(io.Reader) (Image, error), decodeConfig func(io.Reader) (Config, error))"},
+		{"Transparent", Var, 0, ""},
+		{"Uniform", Type, 0, ""},
+		{"Uniform.C", Field, 0, ""},
+		{"White", Var, 0, ""},
+		{"YCbCr", Type, 0, ""},
+		{"YCbCr.CStride", Field, 0, ""},
+		{"YCbCr.Cb", Field, 0, ""},
+		{"YCbCr.Cr", Field, 0, ""},
+		{"YCbCr.Rect", Field, 0, ""},
+		{"YCbCr.SubsampleRatio", Field, 0, ""},
+		{"YCbCr.Y", Field, 0, ""},
+		{"YCbCr.YStride", Field, 0, ""},
+		{"YCbCrSubsampleRatio", Type, 0, ""},
+		{"YCbCrSubsampleRatio410", Const, 5, ""},
+		{"YCbCrSubsampleRatio411", Const, 5, ""},
+		{"YCbCrSubsampleRatio420", Const, 0, ""},
+		{"YCbCrSubsampleRatio422", Const, 0, ""},
+		{"YCbCrSubsampleRatio440", Const, 1, ""},
+		{"YCbCrSubsampleRatio444", Const, 0, ""},
+		{"ZP", Var, 0, ""},
+		{"ZR", Var, 0, ""},
+	},
+	"image/color": {
+		{"(Alpha).RGBA", Method, 0, ""},
+		{"(Alpha16).RGBA", Method, 0, ""},
+		{"(CMYK).RGBA", Method, 5, ""},
+		{"(Gray).RGBA", Method, 0, ""},
+		{"(Gray16).RGBA", Method, 0, ""},
+		{"(NRGBA).RGBA", Method, 0, ""},
+		{"(NRGBA64).RGBA", Method, 0, ""},
+		{"(NYCbCrA).RGBA", Method, 6, ""},
+		{"(Palette).Convert", Method, 0, ""},
+		{"(Palette).Index", Method, 0, ""},
+		{"(RGBA).RGBA", Method, 0, ""},
+		{"(RGBA64).RGBA", Method, 0, ""},
+		{"(YCbCr).RGBA", Method, 0, ""},
+		{"Alpha", Type, 0, ""},
+		{"Alpha.A", Field, 0, ""},
+		{"Alpha16", Type, 0, ""},
+		{"Alpha16.A", Field, 0, ""},
+		{"Alpha16Model", Var, 0, ""},
+		{"AlphaModel", Var, 0, ""},
+		{"Black", Var, 0, ""},
+		{"CMYK", Type, 5, ""},
+		{"CMYK.C", Field, 5, ""},
+		{"CMYK.K", Field, 5, ""},
+		{"CMYK.M", Field, 5, ""},
+		{"CMYK.Y", Field, 5, ""},
+		{"CMYKModel", Var, 5, ""},
+		{"CMYKToRGB", Func, 5, "func(c uint8, m uint8, y uint8, k uint8) (uint8, uint8, uint8)"},
+		{"Color", Type, 0, ""},
+		{"Gray", Type, 0, ""},
+		{"Gray.Y", Field, 0, ""},
+		{"Gray16", Type, 0, ""},
+		{"Gray16.Y", Field, 0, ""},
+		{"Gray16Model", Var, 0, ""},
+		{"GrayModel", Var, 0, ""},
+		{"Model", Type, 0, ""},
+		{"ModelFunc", Func, 0, "func(f func(Color) Color) Model"},
+		{"NRGBA", Type, 0, ""},
+		{"NRGBA.A", Field, 0, ""},
+		{"NRGBA.B", Field, 0, ""},
+		{"NRGBA.G", Field, 0, ""},
+		{"NRGBA.R", Field, 0, ""},
+		{"NRGBA64", Type, 0, ""},
+		{"NRGBA64.A", Field, 0, ""},
+		{"NRGBA64.B", Field, 0, ""},
+		{"NRGBA64.G", Field, 0, ""},
+		{"NRGBA64.R", Field, 0, ""},
+		{"NRGBA64Model", Var, 0, ""},
+		{"NRGBAModel", Var, 0, ""},
+		{"NYCbCrA", Type, 6, ""},
+		{"NYCbCrA.A", Field, 6, ""},
+		{"NYCbCrA.YCbCr", Field, 6, ""},
+		{"NYCbCrAModel", Var, 6, ""},
+		{"Opaque", Var, 0, ""},
+		{"Palette", Type, 0, ""},
+		{"RGBA", Type, 0, ""},
+		{"RGBA.A", Field, 0, ""},
+		{"RGBA.B", Field, 0, ""},
+		{"RGBA.G", Field, 0, ""},
+		{"RGBA.R", Field, 0, ""},
+		{"RGBA64", Type, 0, ""},
+		{"RGBA64.A", Field, 0, ""},
+		{"RGBA64.B", Field, 0, ""},
+		{"RGBA64.G", Field, 0, ""},
+		{"RGBA64.R", Field, 0, ""},
+		{"RGBA64Model", Var, 0, ""},
+		{"RGBAModel", Var, 0, ""},
+		{"RGBToCMYK", Func, 5, "func(r uint8, g uint8, b uint8) (uint8, uint8, uint8, uint8)"},
+		{"RGBToYCbCr", Func, 0, "func(r uint8, g uint8, b uint8) (uint8, uint8, uint8)"},
+		{"Transparent", Var, 0, ""},
+		{"White", Var, 0, ""},
+		{"YCbCr", Type, 0, ""},
+		{"YCbCr.Cb", Field, 0, ""},
+		{"YCbCr.Cr", Field, 0, ""},
+		{"YCbCr.Y", Field, 0, ""},
+		{"YCbCrModel", Var, 0, ""},
+		{"YCbCrToRGB", Func, 0, "func(y uint8, cb uint8, cr uint8) (uint8, uint8, uint8)"},
+	},
+	"image/color/palette": {
+		{"Plan9", Var, 2, ""},
+		{"WebSafe", Var, 2, ""},
+	},
+	"image/draw": {
+		{"(Op).Draw", Method, 2, ""},
+		{"Draw", Func, 0, "func(dst Image, r image.Rectangle, src image.Image, sp image.Point, op Op)"},
+		{"DrawMask", Func, 0, "func(dst Image, r image.Rectangle, src image.Image, sp image.Point, mask image.Image, mp image.Point, op Op)"},
+		{"Drawer", Type, 2, ""},
+		{"FloydSteinberg", Var, 2, ""},
+		{"Image", Type, 0, ""},
+		{"Op", Type, 0, ""},
+		{"Over", Const, 0, ""},
+		{"Quantizer", Type, 2, ""},
+		{"RGBA64Image", Type, 17, ""},
+		{"Src", Const, 0, ""},
+	},
+	"image/gif": {
+		{"Decode", Func, 0, "func(r io.Reader) (image.Image, error)"},
+		{"DecodeAll", Func, 0, "func(r io.Reader) (*GIF, error)"},
+		{"DecodeConfig", Func, 0, "func(r io.Reader) (image.Config, error)"},
+		{"DisposalBackground", Const, 5, ""},
+		{"DisposalNone", Const, 5, ""},
+		{"DisposalPrevious", Const, 5, ""},
+		{"Encode", Func, 2, "func(w io.Writer, m image.Image, o *Options) error"},
+		{"EncodeAll", Func, 2, "func(w io.Writer, g *GIF) error"},
+		{"GIF", Type, 0, ""},
+		{"GIF.BackgroundIndex", Field, 5, ""},
+		{"GIF.Config", Field, 5, ""},
+		{"GIF.Delay", Field, 0, ""},
+		{"GIF.Disposal", Field, 5, ""},
+		{"GIF.Image", Field, 0, ""},
+		{"GIF.LoopCount", Field, 0, ""},
+		{"Options", Type, 2, ""},
+		{"Options.Drawer", Field, 2, ""},
+		{"Options.NumColors", Field, 2, ""},
+		{"Options.Quantizer", Field, 2, ""},
+	},
+	"image/jpeg": {
+		{"(FormatError).Error", Method, 0, ""},
+		{"(UnsupportedError).Error", Method, 0, ""},
+		{"Decode", Func, 0, "func(r io.Reader) (image.Image, error)"},
+		{"DecodeConfig", Func, 0, "func(r io.Reader) (image.Config, error)"},
+		{"DefaultQuality", Const, 0, ""},
+		{"Encode", Func, 0, "func(w io.Writer, m image.Image, o *Options) error"},
+		{"FormatError", Type, 0, ""},
+		{"Options", Type, 0, ""},
+		{"Options.Quality", Field, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"UnsupportedError", Type, 0, ""},
+	},
+	"image/png": {
+		{"(*Encoder).Encode", Method, 4, ""},
+		{"(FormatError).Error", Method, 0, ""},
+		{"(UnsupportedError).Error", Method, 0, ""},
+		{"BestCompression", Const, 4, ""},
+		{"BestSpeed", Const, 4, ""},
+		{"CompressionLevel", Type, 4, ""},
+		{"Decode", Func, 0, "func(r io.Reader) (image.Image, error)"},
+		{"DecodeConfig", Func, 0, "func(r io.Reader) (image.Config, error)"},
+		{"DefaultCompression", Const, 4, ""},
+		{"Encode", Func, 0, "func(w io.Writer, m image.Image) error"},
+		{"Encoder", Type, 4, ""},
+		{"Encoder.BufferPool", Field, 9, ""},
+		{"Encoder.CompressionLevel", Field, 4, ""},
+		{"EncoderBuffer", Type, 9, ""},
+		{"EncoderBufferPool", Type, 9, ""},
+		{"FormatError", Type, 0, ""},
+		{"NoCompression", Const, 4, ""},
+		{"UnsupportedError", Type, 0, ""},
+	},
+	"index/suffixarray": {
+		{"(*Index).Bytes", Method, 0, ""},
+		{"(*Index).FindAllIndex", Method, 0, ""},
+		{"(*Index).Lookup", Method, 0, ""},
+		{"(*Index).Read", Method, 0, ""},
+		{"(*Index).Write", Method, 0, ""},
+		{"Index", Type, 0, ""},
+		{"New", Func, 0, "func(data []byte) *Index"},
+	},
+	"io": {
+		{"(*LimitedReader).Read", Method, 0, ""},
+		{"(*OffsetWriter).Seek", Method, 20, ""},
+		{"(*OffsetWriter).Write", Method, 20, ""},
+		{"(*OffsetWriter).WriteAt", Method, 20, ""},
+		{"(*PipeReader).Close", Method, 0, ""},
+		{"(*PipeReader).CloseWithError", Method, 0, ""},
+		{"(*PipeReader).Read", Method, 0, ""},
+		{"(*PipeWriter).Close", Method, 0, ""},
+		{"(*PipeWriter).CloseWithError", Method, 0, ""},
+		{"(*PipeWriter).Write", Method, 0, ""},
+		{"(*SectionReader).Outer", Method, 22, ""},
+		{"(*SectionReader).Read", Method, 0, ""},
+		{"(*SectionReader).ReadAt", Method, 0, ""},
+		{"(*SectionReader).Seek", Method, 0, ""},
+		{"(*SectionReader).Size", Method, 0, ""},
+		{"ByteReader", Type, 0, ""},
+		{"ByteScanner", Type, 0, ""},
+		{"ByteWriter", Type, 1, ""},
+		{"Closer", Type, 0, ""},
+		{"Copy", Func, 0, "func(dst Writer, src Reader) (written int64, err error)"},
+		{"CopyBuffer", Func, 5, "func(dst Writer, src Reader, buf []byte) (written int64, err error)"},
+		{"CopyN", Func, 0, "func(dst Writer, src Reader, n int64) (written int64, err error)"},
+		{"Discard", Var, 16, ""},
+		{"EOF", Var, 0, ""},
+		{"ErrClosedPipe", Var, 0, ""},
+		{"ErrNoProgress", Var, 1, ""},
+		{"ErrShortBuffer", Var, 0, ""},
+		{"ErrShortWrite", Var, 0, ""},
+		{"ErrUnexpectedEOF", Var, 0, ""},
+		{"LimitReader", Func, 0, "func(r Reader, n int64) Reader"},
+		{"LimitedReader", Type, 0, ""},
+		{"LimitedReader.N", Field, 0, ""},
+		{"LimitedReader.R", Field, 0, ""},
+		{"MultiReader", Func, 0, "func(readers ...Reader) Reader"},
+		{"MultiWriter", Func, 0, "func(writers ...Writer) Writer"},
+		{"NewOffsetWriter", Func, 20, "func(w WriterAt, off int64) *OffsetWriter"},
+		{"NewSectionReader", Func, 0, "func(r ReaderAt, off int64, n int64) *SectionReader"},
+		{"NopCloser", Func, 16, "func(r Reader) ReadCloser"},
+		{"OffsetWriter", Type, 20, ""},
+		{"Pipe", Func, 0, "func() (*PipeReader, *PipeWriter)"},
+		{"PipeReader", Type, 0, ""},
+		{"PipeWriter", Type, 0, ""},
+		{"ReadAll", Func, 16, "func(r Reader) ([]byte, error)"},
+		{"ReadAtLeast", Func, 0, "func(r Reader, buf []byte, min int) (n int, err error)"},
+		{"ReadCloser", Type, 0, ""},
+		{"ReadFull", Func, 0, "func(r Reader, buf []byte) (n int, err error)"},
+		{"ReadSeekCloser", Type, 16, ""},
+		{"ReadSeeker", Type, 0, ""},
+		{"ReadWriteCloser", Type, 0, ""},
+		{"ReadWriteSeeker", Type, 0, ""},
+		{"ReadWriter", Type, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"ReaderAt", Type, 0, ""},
+		{"ReaderFrom", Type, 0, ""},
+		{"RuneReader", Type, 0, ""},
+		{"RuneScanner", Type, 0, ""},
+		{"SectionReader", Type, 0, ""},
+		{"SeekCurrent", Const, 7, ""},
+		{"SeekEnd", Const, 7, ""},
+		{"SeekStart", Const, 7, ""},
+		{"Seeker", Type, 0, ""},
+		{"StringWriter", Type, 12, ""},
+		{"TeeReader", Func, 0, "func(r Reader, w Writer) Reader"},
+		{"WriteCloser", Type, 0, ""},
+		{"WriteSeeker", Type, 0, ""},
+		{"WriteString", Func, 0, "func(w Writer, s string) (n int, err error)"},
+		{"Writer", Type, 0, ""},
+		{"WriterAt", Type, 0, ""},
+		{"WriterTo", Type, 0, ""},
+	},
+	"io/fs": {
+		{"(*PathError).Error", Method, 16, ""},
+		{"(*PathError).Timeout", Method, 16, ""},
+		{"(*PathError).Unwrap", Method, 16, ""},
+		{"(FileMode).IsDir", Method, 16, ""},
+		{"(FileMode).IsRegular", Method, 16, ""},
+		{"(FileMode).Perm", Method, 16, ""},
+		{"(FileMode).String", Method, 16, ""},
+		{"(FileMode).Type", Method, 16, ""},
+		{"DirEntry", Type, 16, ""},
+		{"ErrClosed", Var, 16, ""},
+		{"ErrExist", Var, 16, ""},
+		{"ErrInvalid", Var, 16, ""},
+		{"ErrNotExist", Var, 16, ""},
+		{"ErrPermission", Var, 16, ""},
+		{"FS", Type, 16, ""},
+		{"File", Type, 16, ""},
+		{"FileInfo", Type, 16, ""},
+		{"FileInfoToDirEntry", Func, 17, "func(info FileInfo) DirEntry"},
+		{"FileMode", Type, 16, ""},
+		{"FormatDirEntry", Func, 21, "func(dir DirEntry) string"},
+		{"FormatFileInfo", Func, 21, "func(info FileInfo) string"},
+		{"Glob", Func, 16, "func(fsys FS, pattern string) (matches []string, err error)"},
+		{"GlobFS", Type, 16, ""},
+		{"Lstat", Func, 25, ""},
+		{"ModeAppend", Const, 16, ""},
+		{"ModeCharDevice", Const, 16, ""},
+		{"ModeDevice", Const, 16, ""},
+		{"ModeDir", Const, 16, ""},
+		{"ModeExclusive", Const, 16, ""},
+		{"ModeIrregular", Const, 16, ""},
+		{"ModeNamedPipe", Const, 16, ""},
+		{"ModePerm", Const, 16, ""},
+		{"ModeSetgid", Const, 16, ""},
+		{"ModeSetuid", Const, 16, ""},
+		{"ModeSocket", Const, 16, ""},
+		{"ModeSticky", Const, 16, ""},
+		{"ModeSymlink", Const, 16, ""},
+		{"ModeTemporary", Const, 16, ""},
+		{"ModeType", Const, 16, ""},
+		{"PathError", Type, 16, ""},
+		{"PathError.Err", Field, 16, ""},
+		{"PathError.Op", Field, 16, ""},
+		{"PathError.Path", Field, 16, ""},
+		{"ReadDir", Func, 16, "func(fsys FS, name string) ([]DirEntry, error)"},
+		{"ReadDirFS", Type, 16, ""},
+		{"ReadDirFile", Type, 16, ""},
+		{"ReadFile", Func, 16, "func(fsys FS, name string) ([]byte, error)"},
+		{"ReadFileFS", Type, 16, ""},
+		{"ReadLink", Func, 25, ""},
+		{"ReadLinkFS", Type, 25, ""},
+		{"SkipAll", Var, 20, ""},
+		{"SkipDir", Var, 16, ""},
+		{"Stat", Func, 16, "func(fsys FS, name string) (FileInfo, error)"},
+		{"StatFS", Type, 16, ""},
+		{"Sub", Func, 16, "func(fsys FS, dir string) (FS, error)"},
+		{"SubFS", Type, 16, ""},
+		{"ValidPath", Func, 16, "func(name string) bool"},
+		{"WalkDir", Func, 16, "func(fsys FS, root string, fn WalkDirFunc) error"},
+		{"WalkDirFunc", Type, 16, ""},
+	},
+	"io/ioutil": {
+		{"Discard", Var, 0, ""},
+		{"NopCloser", Func, 0, "func(r io.Reader) io.ReadCloser"},
+		{"ReadAll", Func, 0, "func(r io.Reader) ([]byte, error)"},
+		{"ReadDir", Func, 0, "func(dirname string) ([]fs.FileInfo, error)"},
+		{"ReadFile", Func, 0, "func(filename string) ([]byte, error)"},
+		{"TempDir", Func, 0, "func(dir string, pattern string) (name string, err error)"},
+		{"TempFile", Func, 0, "func(dir string, pattern string) (f *os.File, err error)"},
+		{"WriteFile", Func, 0, "func(filename string, data []byte, perm fs.FileMode) error"},
+	},
+	"iter": {
+		{"Pull", Func, 23, "func[V any](seq Seq[V]) (next func() (V, bool), stop func())"},
+		{"Pull2", Func, 23, "func[K, V any](seq Seq2[K, V]) (next func() (K, V, bool), stop func())"},
+		{"Seq", Type, 23, ""},
+		{"Seq2", Type, 23, ""},
+	},
+	"log": {
+		{"(*Logger).Fatal", Method, 0, ""},
+		{"(*Logger).Fatalf", Method, 0, ""},
+		{"(*Logger).Fatalln", Method, 0, ""},
+		{"(*Logger).Flags", Method, 0, ""},
+		{"(*Logger).Output", Method, 0, ""},
+		{"(*Logger).Panic", Method, 0, ""},
+		{"(*Logger).Panicf", Method, 0, ""},
+		{"(*Logger).Panicln", Method, 0, ""},
+		{"(*Logger).Prefix", Method, 0, ""},
+		{"(*Logger).Print", Method, 0, ""},
+		{"(*Logger).Printf", Method, 0, ""},
+		{"(*Logger).Println", Method, 0, ""},
+		{"(*Logger).SetFlags", Method, 0, ""},
+		{"(*Logger).SetOutput", Method, 5, ""},
+		{"(*Logger).SetPrefix", Method, 0, ""},
+		{"(*Logger).Writer", Method, 12, ""},
+		{"Default", Func, 16, "func() *Logger"},
+		{"Fatal", Func, 0, "func(v ...any)"},
+		{"Fatalf", Func, 0, "func(format string, v ...any)"},
+		{"Fatalln", Func, 0, "func(v ...any)"},
+		{"Flags", Func, 0, "func() int"},
+		{"LUTC", Const, 5, ""},
+		{"Ldate", Const, 0, ""},
+		{"Llongfile", Const, 0, ""},
+		{"Lmicroseconds", Const, 0, ""},
+		{"Lmsgprefix", Const, 14, ""},
+		{"Logger", Type, 0, ""},
+		{"Lshortfile", Const, 0, ""},
+		{"LstdFlags", Const, 0, ""},
+		{"Ltime", Const, 0, ""},
+		{"New", Func, 0, "func(out io.Writer, prefix string, flag int) *Logger"},
+		{"Output", Func, 5, "func(calldepth int, s string) error"},
+		{"Panic", Func, 0, "func(v ...any)"},
+		{"Panicf", Func, 0, "func(format string, v ...any)"},
+		{"Panicln", Func, 0, "func(v ...any)"},
+		{"Prefix", Func, 0, "func() string"},
+		{"Print", Func, 0, "func(v ...any)"},
+		{"Printf", Func, 0, "func(format string, v ...any)"},
+		{"Println", Func, 0, "func(v ...any)"},
+		{"SetFlags", Func, 0, "func(flag int)"},
+		{"SetOutput", Func, 0, "func(w io.Writer)"},
+		{"SetPrefix", Func, 0, "func(prefix string)"},
+		{"Writer", Func, 13, "func() io.Writer"},
+	},
+	"log/slog": {
+		{"(*JSONHandler).Enabled", Method, 21, ""},
+		{"(*JSONHandler).Handle", Method, 21, ""},
+		{"(*JSONHandler).WithAttrs", Method, 21, ""},
+		{"(*JSONHandler).WithGroup", Method, 21, ""},
+		{"(*Level).UnmarshalJSON", Method, 21, ""},
+		{"(*Level).UnmarshalText", Method, 21, ""},
+		{"(*LevelVar).AppendText", Method, 24, ""},
+		{"(*LevelVar).Level", Method, 21, ""},
+		{"(*LevelVar).MarshalText", Method, 21, ""},
+		{"(*LevelVar).Set", Method, 21, ""},
+		{"(*LevelVar).String", Method, 21, ""},
+		{"(*LevelVar).UnmarshalText", Method, 21, ""},
+		{"(*Logger).Debug", Method, 21, ""},
+		{"(*Logger).DebugContext", Method, 21, ""},
+		{"(*Logger).Enabled", Method, 21, ""},
+		{"(*Logger).Error", Method, 21, ""},
+		{"(*Logger).ErrorContext", Method, 21, ""},
+		{"(*Logger).Handler", Method, 21, ""},
+		{"(*Logger).Info", Method, 21, ""},
+		{"(*Logger).InfoContext", Method, 21, ""},
+		{"(*Logger).Log", Method, 21, ""},
+		{"(*Logger).LogAttrs", Method, 21, ""},
+		{"(*Logger).Warn", Method, 21, ""},
+		{"(*Logger).WarnContext", Method, 21, ""},
+		{"(*Logger).With", Method, 21, ""},
+		{"(*Logger).WithGroup", Method, 21, ""},
+		{"(*Record).Add", Method, 21, ""},
+		{"(*Record).AddAttrs", Method, 21, ""},
+		{"(*TextHandler).Enabled", Method, 21, ""},
+		{"(*TextHandler).Handle", Method, 21, ""},
+		{"(*TextHandler).WithAttrs", Method, 21, ""},
+		{"(*TextHandler).WithGroup", Method, 21, ""},
+		{"(Attr).Equal", Method, 21, ""},
+		{"(Attr).String", Method, 21, ""},
+		{"(Kind).String", Method, 21, ""},
+		{"(Level).AppendText", Method, 24, ""},
+		{"(Level).Level", Method, 21, ""},
+		{"(Level).MarshalJSON", Method, 21, ""},
+		{"(Level).MarshalText", Method, 21, ""},
+		{"(Level).String", Method, 21, ""},
+		{"(Record).Attrs", Method, 21, ""},
+		{"(Record).Clone", Method, 21, ""},
+		{"(Record).NumAttrs", Method, 21, ""},
+		{"(Value).Any", Method, 21, ""},
+		{"(Value).Bool", Method, 21, ""},
+		{"(Value).Duration", Method, 21, ""},
+		{"(Value).Equal", Method, 21, ""},
+		{"(Value).Float64", Method, 21, ""},
+		{"(Value).Group", Method, 21, ""},
+		{"(Value).Int64", Method, 21, ""},
+		{"(Value).Kind", Method, 21, ""},
+		{"(Value).LogValuer", Method, 21, ""},
+		{"(Value).Resolve", Method, 21, ""},
+		{"(Value).String", Method, 21, ""},
+		{"(Value).Time", Method, 21, ""},
+		{"(Value).Uint64", Method, 21, ""},
+		{"Any", Func, 21, "func(key string, value any) Attr"},
+		{"AnyValue", Func, 21, "func(v any) Value"},
+		{"Attr", Type, 21, ""},
+		{"Attr.Key", Field, 21, ""},
+		{"Attr.Value", Field, 21, ""},
+		{"Bool", Func, 21, "func(key string, v bool) Attr"},
+		{"BoolValue", Func, 21, "func(v bool) Value"},
+		{"Debug", Func, 21, "func(msg string, args ...any)"},
+		{"DebugContext", Func, 21, "func(ctx context.Context, msg string, args ...any)"},
+		{"Default", Func, 21, "func() *Logger"},
+		{"DiscardHandler", Var, 24, ""},
+		{"Duration", Func, 21, "func(key string, v time.Duration) Attr"},
+		{"DurationValue", Func, 21, "func(v time.Duration) Value"},
+		{"Error", Func, 21, "func(msg string, args ...any)"},
+		{"ErrorContext", Func, 21, "func(ctx context.Context, msg string, args ...any)"},
+		{"Float64", Func, 21, "func(key string, v float64) Attr"},
+		{"Float64Value", Func, 21, "func(v float64) Value"},
+		{"Group", Func, 21, "func(key string, args ...any) Attr"},
+		{"GroupValue", Func, 21, "func(as ...Attr) Value"},
+		{"Handler", Type, 21, ""},
+		{"HandlerOptions", Type, 21, ""},
+		{"HandlerOptions.AddSource", Field, 21, ""},
+		{"HandlerOptions.Level", Field, 21, ""},
+		{"HandlerOptions.ReplaceAttr", Field, 21, ""},
+		{"Info", Func, 21, "func(msg string, args ...any)"},
+		{"InfoContext", Func, 21, "func(ctx context.Context, msg string, args ...any)"},
+		{"Int", Func, 21, "func(key string, value int) Attr"},
+		{"Int64", Func, 21, "func(key string, value int64) Attr"},
+		{"Int64Value", Func, 21, "func(v int64) Value"},
+		{"IntValue", Func, 21, "func(v int) Value"},
+		{"JSONHandler", Type, 21, ""},
+		{"Kind", Type, 21, ""},
+		{"KindAny", Const, 21, ""},
+		{"KindBool", Const, 21, ""},
+		{"KindDuration", Const, 21, ""},
+		{"KindFloat64", Const, 21, ""},
+		{"KindGroup", Const, 21, ""},
+		{"KindInt64", Const, 21, ""},
+		{"KindLogValuer", Const, 21, ""},
+		{"KindString", Const, 21, ""},
+		{"KindTime", Const, 21, ""},
+		{"KindUint64", Const, 21, ""},
+		{"Level", Type, 21, ""},
+		{"LevelDebug", Const, 21, ""},
+		{"LevelError", Const, 21, ""},
+		{"LevelInfo", Const, 21, ""},
+		{"LevelKey", Const, 21, ""},
+		{"LevelVar", Type, 21, ""},
+		{"LevelWarn", Const, 21, ""},
+		{"Leveler", Type, 21, ""},
+		{"Log", Func, 21, "func(ctx context.Context, level Level, msg string, args ...any)"},
+		{"LogAttrs", Func, 21, "func(ctx context.Context, level Level, msg string, attrs ...Attr)"},
+		{"LogValuer", Type, 21, ""},
+		{"Logger", Type, 21, ""},
+		{"MessageKey", Const, 21, ""},
+		{"New", Func, 21, "func(h Handler) *Logger"},
+		{"NewJSONHandler", Func, 21, "func(w io.Writer, opts *HandlerOptions) *JSONHandler"},
+		{"NewLogLogger", Func, 21, "func(h Handler, level Level) *log.Logger"},
+		{"NewRecord", Func, 21, "func(t time.Time, level Level, msg string, pc uintptr) Record"},
+		{"NewTextHandler", Func, 21, "func(w io.Writer, opts *HandlerOptions) *TextHandler"},
+		{"Record", Type, 21, ""},
+		{"Record.Level", Field, 21, ""},
+		{"Record.Message", Field, 21, ""},
+		{"Record.PC", Field, 21, ""},
+		{"Record.Time", Field, 21, ""},
+		{"SetDefault", Func, 21, "func(l *Logger)"},
+		{"SetLogLoggerLevel", Func, 22, "func(level Level) (oldLevel Level)"},
+		{"Source", Type, 21, ""},
+		{"Source.File", Field, 21, ""},
+		{"Source.Function", Field, 21, ""},
+		{"Source.Line", Field, 21, ""},
+		{"SourceKey", Const, 21, ""},
+		{"String", Func, 21, "func(key string, value string) Attr"},
+		{"StringValue", Func, 21, "func(value string) Value"},
+		{"TextHandler", Type, 21, ""},
+		{"Time", Func, 21, "func(key string, v time.Time) Attr"},
+		{"TimeKey", Const, 21, ""},
+		{"TimeValue", Func, 21, "func(v time.Time) Value"},
+		{"Uint64", Func, 21, "func(key string, v uint64) Attr"},
+		{"Uint64Value", Func, 21, "func(v uint64) Value"},
+		{"Value", Type, 21, ""},
+		{"Warn", Func, 21, "func(msg string, args ...any)"},
+		{"WarnContext", Func, 21, "func(ctx context.Context, msg string, args ...any)"},
+		{"With", Func, 21, "func(args ...any) *Logger"},
+	},
+	"log/syslog": {
+		{"(*Writer).Alert", Method, 0, ""},
+		{"(*Writer).Close", Method, 0, ""},
+		{"(*Writer).Crit", Method, 0, ""},
+		{"(*Writer).Debug", Method, 0, ""},
+		{"(*Writer).Emerg", Method, 0, ""},
+		{"(*Writer).Err", Method, 0, ""},
+		{"(*Writer).Info", Method, 0, ""},
+		{"(*Writer).Notice", Method, 0, ""},
+		{"(*Writer).Warning", Method, 0, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"Dial", Func, 0, "func(network string, raddr string, priority Priority, tag string) (*Writer, error)"},
+		{"LOG_ALERT", Const, 0, ""},
+		{"LOG_AUTH", Const, 1, ""},
+		{"LOG_AUTHPRIV", Const, 1, ""},
+		{"LOG_CRIT", Const, 0, ""},
+		{"LOG_CRON", Const, 1, ""},
+		{"LOG_DAEMON", Const, 1, ""},
+		{"LOG_DEBUG", Const, 0, ""},
+		{"LOG_EMERG", Const, 0, ""},
+		{"LOG_ERR", Const, 0, ""},
+		{"LOG_FTP", Const, 1, ""},
+		{"LOG_INFO", Const, 0, ""},
+		{"LOG_KERN", Const, 1, ""},
+		{"LOG_LOCAL0", Const, 1, ""},
+		{"LOG_LOCAL1", Const, 1, ""},
+		{"LOG_LOCAL2", Const, 1, ""},
+		{"LOG_LOCAL3", Const, 1, ""},
+		{"LOG_LOCAL4", Const, 1, ""},
+		{"LOG_LOCAL5", Const, 1, ""},
+		{"LOG_LOCAL6", Const, 1, ""},
+		{"LOG_LOCAL7", Const, 1, ""},
+		{"LOG_LPR", Const, 1, ""},
+		{"LOG_MAIL", Const, 1, ""},
+		{"LOG_NEWS", Const, 1, ""},
+		{"LOG_NOTICE", Const, 0, ""},
+		{"LOG_SYSLOG", Const, 1, ""},
+		{"LOG_USER", Const, 1, ""},
+		{"LOG_UUCP", Const, 1, ""},
+		{"LOG_WARNING", Const, 0, ""},
+		{"New", Func, 0, "func(priority Priority, tag string) (*Writer, error)"},
+		{"NewLogger", Func, 0, "func(p Priority, logFlag int) (*log.Logger, error)"},
+		{"Priority", Type, 0, ""},
+		{"Writer", Type, 0, ""},
+	},
+	"maps": {
+		{"All", Func, 23, "func[Map ~map[K]V, K comparable, V any](m Map) iter.Seq2[K, V]"},
+		{"Clone", Func, 21, "func[M ~map[K]V, K comparable, V any](m M) M"},
+		{"Collect", Func, 23, "func[K comparable, V any](seq iter.Seq2[K, V]) map[K]V"},
+		{"Copy", Func, 21, "func[M1 ~map[K]V, M2 ~map[K]V, K comparable, V any](dst M1, src M2)"},
+		{"DeleteFunc", Func, 21, "func[M ~map[K]V, K comparable, V any](m M, del func(K, V) bool)"},
+		{"Equal", Func, 21, "func[M1, M2 ~map[K]V, K, V comparable](m1 M1, m2 M2) bool"},
+		{"EqualFunc", Func, 21, "func[M1 ~map[K]V1, M2 ~map[K]V2, K comparable, V1, V2 any](m1 M1, m2 M2, eq func(V1, V2) bool) bool"},
+		{"Insert", Func, 23, "func[Map ~map[K]V, K comparable, V any](m Map, seq iter.Seq2[K, V])"},
+		{"Keys", Func, 23, "func[Map ~map[K]V, K comparable, V any](m Map) iter.Seq[K]"},
+		{"Values", Func, 23, "func[Map ~map[K]V, K comparable, V any](m Map) iter.Seq[V]"},
+	},
+	"math": {
+		{"Abs", Func, 0, "func(x float64) float64"},
+		{"Acos", Func, 0, "func(x float64) float64"},
+		{"Acosh", Func, 0, "func(x float64) float64"},
+		{"Asin", Func, 0, "func(x float64) float64"},
+		{"Asinh", Func, 0, "func(x float64) float64"},
+		{"Atan", Func, 0, "func(x float64) float64"},
+		{"Atan2", Func, 0, "func(y float64, x float64) float64"},
+		{"Atanh", Func, 0, "func(x float64) float64"},
+		{"Cbrt", Func, 0, "func(x float64) float64"},
+		{"Ceil", Func, 0, "func(x float64) float64"},
+		{"Copysign", Func, 0, "func(f float64, sign float64) float64"},
+		{"Cos", Func, 0, "func(x float64) float64"},
+		{"Cosh", Func, 0, "func(x float64) float64"},
+		{"Dim", Func, 0, "func(x float64, y float64) float64"},
+		{"E", Const, 0, ""},
+		{"Erf", Func, 0, "func(x float64) float64"},
+		{"Erfc", Func, 0, "func(x float64) float64"},
+		{"Erfcinv", Func, 10, "func(x float64) float64"},
+		{"Erfinv", Func, 10, "func(x float64) float64"},
+		{"Exp", Func, 0, "func(x float64) float64"},
+		{"Exp2", Func, 0, "func(x float64) float64"},
+		{"Expm1", Func, 0, "func(x float64) float64"},
+		{"FMA", Func, 14, "func(x float64, y float64, z float64) float64"},
+		{"Float32bits", Func, 0, "func(f float32) uint32"},
+		{"Float32frombits", Func, 0, "func(b uint32) float32"},
+		{"Float64bits", Func, 0, "func(f float64) uint64"},
+		{"Float64frombits", Func, 0, "func(b uint64) float64"},
+		{"Floor", Func, 0, "func(x float64) float64"},
+		{"Frexp", Func, 0, "func(f float64) (frac float64, exp int)"},
+		{"Gamma", Func, 0, "func(x float64) float64"},
+		{"Hypot", Func, 0, "func(p float64, q float64) float64"},
+		{"Ilogb", Func, 0, "func(x float64) int"},
+		{"Inf", Func, 0, "func(sign int) float64"},
+		{"IsInf", Func, 0, "func(f float64, sign int) bool"},
+		{"IsNaN", Func, 0, "func(f float64) (is bool)"},
+		{"J0", Func, 0, "func(x float64) float64"},
+		{"J1", Func, 0, "func(x float64) float64"},
+		{"Jn", Func, 0, "func(n int, x float64) float64"},
+		{"Ldexp", Func, 0, "func(frac float64, exp int) float64"},
+		{"Lgamma", Func, 0, "func(x float64) (lgamma float64, sign int)"},
+		{"Ln10", Const, 0, ""},
+		{"Ln2", Const, 0, ""},
+		{"Log", Func, 0, "func(x float64) float64"},
+		{"Log10", Func, 0, "func(x float64) float64"},
+		{"Log10E", Const, 0, ""},
+		{"Log1p", Func, 0, "func(x float64) float64"},
+		{"Log2", Func, 0, "func(x float64) float64"},
+		{"Log2E", Const, 0, ""},
+		{"Logb", Func, 0, "func(x float64) float64"},
+		{"Max", Func, 0, "func(x float64, y float64) float64"},
+		{"MaxFloat32", Const, 0, ""},
+		{"MaxFloat64", Const, 0, ""},
+		{"MaxInt", Const, 17, ""},
+		{"MaxInt16", Const, 0, ""},
+		{"MaxInt32", Const, 0, ""},
+		{"MaxInt64", Const, 0, ""},
+		{"MaxInt8", Const, 0, ""},
+		{"MaxUint", Const, 17, ""},
+		{"MaxUint16", Const, 0, ""},
+		{"MaxUint32", Const, 0, ""},
+		{"MaxUint64", Const, 0, ""},
+		{"MaxUint8", Const, 0, ""},
+		{"Min", Func, 0, "func(x float64, y float64) float64"},
+		{"MinInt", Const, 17, ""},
+		{"MinInt16", Const, 0, ""},
+		{"MinInt32", Const, 0, ""},
+		{"MinInt64", Const, 0, ""},
+		{"MinInt8", Const, 0, ""},
+		{"Mod", Func, 0, "func(x float64, y float64) float64"},
+		{"Modf", Func, 0, "func(f float64) (int float64, frac float64)"},
+		{"NaN", Func, 0, "func() float64"},
+		{"Nextafter", Func, 0, "func(x float64, y float64) (r float64)"},
+		{"Nextafter32", Func, 4, "func(x float32, y float32) (r float32)"},
+		{"Phi", Const, 0, ""},
+		{"Pi", Const, 0, ""},
+		{"Pow", Func, 0, "func(x float64, y float64) float64"},
+		{"Pow10", Func, 0, "func(n int) float64"},
+		{"Remainder", Func, 0, "func(x float64, y float64) float64"},
+		{"Round", Func, 10, "func(x float64) float64"},
+		{"RoundToEven", Func, 10, "func(x float64) float64"},
+		{"Signbit", Func, 0, "func(x float64) bool"},
+		{"Sin", Func, 0, "func(x float64) float64"},
+		{"Sincos", Func, 0, "func(x float64) (sin float64, cos float64)"},
+		{"Sinh", Func, 0, "func(x float64) float64"},
+		{"SmallestNonzeroFloat32", Const, 0, ""},
+		{"SmallestNonzeroFloat64", Const, 0, ""},
+		{"Sqrt", Func, 0, "func(x float64) float64"},
+		{"Sqrt2", Const, 0, ""},
+		{"SqrtE", Const, 0, ""},
+		{"SqrtPhi", Const, 0, ""},
+		{"SqrtPi", Const, 0, ""},
+		{"Tan", Func, 0, "func(x float64) float64"},
+		{"Tanh", Func, 0, "func(x float64) float64"},
+		{"Trunc", Func, 0, "func(x float64) float64"},
+		{"Y0", Func, 0, "func(x float64) float64"},
+		{"Y1", Func, 0, "func(x float64) float64"},
+		{"Yn", Func, 0, "func(n int, x float64) float64"},
+	},
+	"math/big": {
+		{"(*Float).Abs", Method, 5, ""},
+		{"(*Float).Acc", Method, 5, ""},
+		{"(*Float).Add", Method, 5, ""},
+		{"(*Float).Append", Method, 5, ""},
+		{"(*Float).AppendText", Method, 24, ""},
+		{"(*Float).Cmp", Method, 5, ""},
+		{"(*Float).Copy", Method, 5, ""},
+		{"(*Float).Float32", Method, 5, ""},
+		{"(*Float).Float64", Method, 5, ""},
+		{"(*Float).Format", Method, 5, ""},
+		{"(*Float).GobDecode", Method, 7, ""},
+		{"(*Float).GobEncode", Method, 7, ""},
+		{"(*Float).Int", Method, 5, ""},
+		{"(*Float).Int64", Method, 5, ""},
+		{"(*Float).IsInf", Method, 5, ""},
+		{"(*Float).IsInt", Method, 5, ""},
+		{"(*Float).MantExp", Method, 5, ""},
+		{"(*Float).MarshalText", Method, 6, ""},
+		{"(*Float).MinPrec", Method, 5, ""},
+		{"(*Float).Mode", Method, 5, ""},
+		{"(*Float).Mul", Method, 5, ""},
+		{"(*Float).Neg", Method, 5, ""},
+		{"(*Float).Parse", Method, 5, ""},
+		{"(*Float).Prec", Method, 5, ""},
+		{"(*Float).Quo", Method, 5, ""},
+		{"(*Float).Rat", Method, 5, ""},
+		{"(*Float).Scan", Method, 8, ""},
+		{"(*Float).Set", Method, 5, ""},
+		{"(*Float).SetFloat64", Method, 5, ""},
+		{"(*Float).SetInf", Method, 5, ""},
+		{"(*Float).SetInt", Method, 5, ""},
+		{"(*Float).SetInt64", Method, 5, ""},
+		{"(*Float).SetMantExp", Method, 5, ""},
+		{"(*Float).SetMode", Method, 5, ""},
+		{"(*Float).SetPrec", Method, 5, ""},
+		{"(*Float).SetRat", Method, 5, ""},
+		{"(*Float).SetString", Method, 5, ""},
+		{"(*Float).SetUint64", Method, 5, ""},
+		{"(*Float).Sign", Method, 5, ""},
+		{"(*Float).Signbit", Method, 5, ""},
+		{"(*Float).Sqrt", Method, 10, ""},
+		{"(*Float).String", Method, 5, ""},
+		{"(*Float).Sub", Method, 5, ""},
+		{"(*Float).Text", Method, 5, ""},
+		{"(*Float).Uint64", Method, 5, ""},
+		{"(*Float).UnmarshalText", Method, 6, ""},
+		{"(*Int).Abs", Method, 0, ""},
+		{"(*Int).Add", Method, 0, ""},
+		{"(*Int).And", Method, 0, ""},
+		{"(*Int).AndNot", Method, 0, ""},
+		{"(*Int).Append", Method, 6, ""},
+		{"(*Int).AppendText", Method, 24, ""},
+		{"(*Int).Binomial", Method, 0, ""},
+		{"(*Int).Bit", Method, 0, ""},
+		{"(*Int).BitLen", Method, 0, ""},
+		{"(*Int).Bits", Method, 0, ""},
+		{"(*Int).Bytes", Method, 0, ""},
+		{"(*Int).Cmp", Method, 0, ""},
+		{"(*Int).CmpAbs", Method, 10, ""},
+		{"(*Int).Div", Method, 0, ""},
+		{"(*Int).DivMod", Method, 0, ""},
+		{"(*Int).Exp", Method, 0, ""},
+		{"(*Int).FillBytes", Method, 15, ""},
+		{"(*Int).Float64", Method, 21, ""},
+		{"(*Int).Format", Method, 0, ""},
+		{"(*Int).GCD", Method, 0, ""},
+		{"(*Int).GobDecode", Method, 0, ""},
+		{"(*Int).GobEncode", Method, 0, ""},
+		{"(*Int).Int64", Method, 0, ""},
+		{"(*Int).IsInt64", Method, 9, ""},
+		{"(*Int).IsUint64", Method, 9, ""},
+		{"(*Int).Lsh", Method, 0, ""},
+		{"(*Int).MarshalJSON", Method, 1, ""},
+		{"(*Int).MarshalText", Method, 3, ""},
+		{"(*Int).Mod", Method, 0, ""},
+		{"(*Int).ModInverse", Method, 0, ""},
+		{"(*Int).ModSqrt", Method, 5, ""},
+		{"(*Int).Mul", Method, 0, ""},
+		{"(*Int).MulRange", Method, 0, ""},
+		{"(*Int).Neg", Method, 0, ""},
+		{"(*Int).Not", Method, 0, ""},
+		{"(*Int).Or", Method, 0, ""},
+		{"(*Int).ProbablyPrime", Method, 0, ""},
+		{"(*Int).Quo", Method, 0, ""},
+		{"(*Int).QuoRem", Method, 0, ""},
+		{"(*Int).Rand", Method, 0, ""},
+		{"(*Int).Rem", Method, 0, ""},
+		{"(*Int).Rsh", Method, 0, ""},
+		{"(*Int).Scan", Method, 0, ""},
+		{"(*Int).Set", Method, 0, ""},
+		{"(*Int).SetBit", Method, 0, ""},
+		{"(*Int).SetBits", Method, 0, ""},
+		{"(*Int).SetBytes", Method, 0, ""},
+		{"(*Int).SetInt64", Method, 0, ""},
+		{"(*Int).SetString", Method, 0, ""},
+		{"(*Int).SetUint64", Method, 1, ""},
+		{"(*Int).Sign", Method, 0, ""},
+		{"(*Int).Sqrt", Method, 8, ""},
+		{"(*Int).String", Method, 0, ""},
+		{"(*Int).Sub", Method, 0, ""},
+		{"(*Int).Text", Method, 6, ""},
+		{"(*Int).TrailingZeroBits", Method, 13, ""},
+		{"(*Int).Uint64", Method, 1, ""},
+		{"(*Int).UnmarshalJSON", Method, 1, ""},
+		{"(*Int).UnmarshalText", Method, 3, ""},
+		{"(*Int).Xor", Method, 0, ""},
+		{"(*Rat).Abs", Method, 0, ""},
+		{"(*Rat).Add", Method, 0, ""},
+		{"(*Rat).AppendText", Method, 24, ""},
+		{"(*Rat).Cmp", Method, 0, ""},
+		{"(*Rat).Denom", Method, 0, ""},
+		{"(*Rat).Float32", Method, 4, ""},
+		{"(*Rat).Float64", Method, 1, ""},
+		{"(*Rat).FloatPrec", Method, 22, ""},
+		{"(*Rat).FloatString", Method, 0, ""},
+		{"(*Rat).GobDecode", Method, 0, ""},
+		{"(*Rat).GobEncode", Method, 0, ""},
+		{"(*Rat).Inv", Method, 0, ""},
+		{"(*Rat).IsInt", Method, 0, ""},
+		{"(*Rat).MarshalText", Method, 3, ""},
+		{"(*Rat).Mul", Method, 0, ""},
+		{"(*Rat).Neg", Method, 0, ""},
+		{"(*Rat).Num", Method, 0, ""},
+		{"(*Rat).Quo", Method, 0, ""},
+		{"(*Rat).RatString", Method, 0, ""},
+		{"(*Rat).Scan", Method, 0, ""},
+		{"(*Rat).Set", Method, 0, ""},
+		{"(*Rat).SetFloat64", Method, 1, ""},
+		{"(*Rat).SetFrac", Method, 0, ""},
+		{"(*Rat).SetFrac64", Method, 0, ""},
+		{"(*Rat).SetInt", Method, 0, ""},
+		{"(*Rat).SetInt64", Method, 0, ""},
+		{"(*Rat).SetString", Method, 0, ""},
+		{"(*Rat).SetUint64", Method, 13, ""},
+		{"(*Rat).Sign", Method, 0, ""},
+		{"(*Rat).String", Method, 0, ""},
+		{"(*Rat).Sub", Method, 0, ""},
+		{"(*Rat).UnmarshalText", Method, 3, ""},
+		{"(Accuracy).String", Method, 5, ""},
+		{"(ErrNaN).Error", Method, 5, ""},
+		{"(RoundingMode).String", Method, 5, ""},
+		{"Above", Const, 5, ""},
+		{"Accuracy", Type, 5, ""},
+		{"AwayFromZero", Const, 5, ""},
+		{"Below", Const, 5, ""},
+		{"ErrNaN", Type, 5, ""},
+		{"Exact", Const, 5, ""},
+		{"Float", Type, 5, ""},
+		{"Int", Type, 0, ""},
+		{"Jacobi", Func, 5, "func(x *Int, y *Int) int"},
+		{"MaxBase", Const, 0, ""},
+		{"MaxExp", Const, 5, ""},
+		{"MaxPrec", Const, 5, ""},
+		{"MinExp", Const, 5, ""},
+		{"NewFloat", Func, 5, "func(x float64) *Float"},
+		{"NewInt", Func, 0, "func(x int64) *Int"},
+		{"NewRat", Func, 0, "func(a int64, b int64) *Rat"},
+		{"ParseFloat", Func, 5, "func(s string, base int, prec uint, mode RoundingMode) (f *Float, b int, err error)"},
+		{"Rat", Type, 0, ""},
+		{"RoundingMode", Type, 5, ""},
+		{"ToNearestAway", Const, 5, ""},
+		{"ToNearestEven", Const, 5, ""},
+		{"ToNegativeInf", Const, 5, ""},
+		{"ToPositiveInf", Const, 5, ""},
+		{"ToZero", Const, 5, ""},
+		{"Word", Type, 0, ""},
+	},
+	"math/bits": {
+		{"Add", Func, 12, "func(x uint, y uint, carry uint) (sum uint, carryOut uint)"},
+		{"Add32", Func, 12, "func(x uint32, y uint32, carry uint32) (sum uint32, carryOut uint32)"},
+		{"Add64", Func, 12, "func(x uint64, y uint64, carry uint64) (sum uint64, carryOut uint64)"},
+		{"Div", Func, 12, "func(hi uint, lo uint, y uint) (quo uint, rem uint)"},
+		{"Div32", Func, 12, "func(hi uint32, lo uint32, y uint32) (quo uint32, rem uint32)"},
+		{"Div64", Func, 12, "func(hi uint64, lo uint64, y uint64) (quo uint64, rem uint64)"},
+		{"LeadingZeros", Func, 9, "func(x uint) int"},
+		{"LeadingZeros16", Func, 9, "func(x uint16) int"},
+		{"LeadingZeros32", Func, 9, "func(x uint32) int"},
+		{"LeadingZeros64", Func, 9, "func(x uint64) int"},
+		{"LeadingZeros8", Func, 9, "func(x uint8) int"},
+		{"Len", Func, 9, "func(x uint) int"},
+		{"Len16", Func, 9, "func(x uint16) (n int)"},
+		{"Len32", Func, 9, "func(x uint32) (n int)"},
+		{"Len64", Func, 9, "func(x uint64) (n int)"},
+		{"Len8", Func, 9, "func(x uint8) int"},
+		{"Mul", Func, 12, "func(x uint, y uint) (hi uint, lo uint)"},
+		{"Mul32", Func, 12, "func(x uint32, y uint32) (hi uint32, lo uint32)"},
+		{"Mul64", Func, 12, "func(x uint64, y uint64) (hi uint64, lo uint64)"},
+		{"OnesCount", Func, 9, "func(x uint) int"},
+		{"OnesCount16", Func, 9, "func(x uint16) int"},
+		{"OnesCount32", Func, 9, "func(x uint32) int"},
+		{"OnesCount64", Func, 9, "func(x uint64) int"},
+		{"OnesCount8", Func, 9, "func(x uint8) int"},
+		{"Rem", Func, 14, "func(hi uint, lo uint, y uint) uint"},
+		{"Rem32", Func, 14, "func(hi uint32, lo uint32, y uint32) uint32"},
+		{"Rem64", Func, 14, "func(hi uint64, lo uint64, y uint64) uint64"},
+		{"Reverse", Func, 9, "func(x uint) uint"},
+		{"Reverse16", Func, 9, "func(x uint16) uint16"},
+		{"Reverse32", Func, 9, "func(x uint32) uint32"},
+		{"Reverse64", Func, 9, "func(x uint64) uint64"},
+		{"Reverse8", Func, 9, "func(x uint8) uint8"},
+		{"ReverseBytes", Func, 9, "func(x uint) uint"},
+		{"ReverseBytes16", Func, 9, "func(x uint16) uint16"},
+		{"ReverseBytes32", Func, 9, "func(x uint32) uint32"},
+		{"ReverseBytes64", Func, 9, "func(x uint64) uint64"},
+		{"RotateLeft", Func, 9, "func(x uint, k int) uint"},
+		{"RotateLeft16", Func, 9, "func(x uint16, k int) uint16"},
+		{"RotateLeft32", Func, 9, "func(x uint32, k int) uint32"},
+		{"RotateLeft64", Func, 9, "func(x uint64, k int) uint64"},
+		{"RotateLeft8", Func, 9, "func(x uint8, k int) uint8"},
+		{"Sub", Func, 12, "func(x uint, y uint, borrow uint) (diff uint, borrowOut uint)"},
+		{"Sub32", Func, 12, "func(x uint32, y uint32, borrow uint32) (diff uint32, borrowOut uint32)"},
+		{"Sub64", Func, 12, "func(x uint64, y uint64, borrow uint64) (diff uint64, borrowOut uint64)"},
+		{"TrailingZeros", Func, 9, "func(x uint) int"},
+		{"TrailingZeros16", Func, 9, "func(x uint16) int"},
+		{"TrailingZeros32", Func, 9, "func(x uint32) int"},
+		{"TrailingZeros64", Func, 9, "func(x uint64) int"},
+		{"TrailingZeros8", Func, 9, "func(x uint8) int"},
+		{"UintSize", Const, 9, ""},
+	},
+	"math/cmplx": {
+		{"Abs", Func, 0, "func(x complex128) float64"},
+		{"Acos", Func, 0, "func(x complex128) complex128"},
+		{"Acosh", Func, 0, "func(x complex128) complex128"},
+		{"Asin", Func, 0, "func(x complex128) complex128"},
+		{"Asinh", Func, 0, "func(x complex128) complex128"},
+		{"Atan", Func, 0, "func(x complex128) complex128"},
+		{"Atanh", Func, 0, "func(x complex128) complex128"},
+		{"Conj", Func, 0, "func(x complex128) complex128"},
+		{"Cos", Func, 0, "func(x complex128) complex128"},
+		{"Cosh", Func, 0, "func(x complex128) complex128"},
+		{"Cot", Func, 0, "func(x complex128) complex128"},
+		{"Exp", Func, 0, "func(x complex128) complex128"},
+		{"Inf", Func, 0, "func() complex128"},
+		{"IsInf", Func, 0, "func(x complex128) bool"},
+		{"IsNaN", Func, 0, "func(x complex128) bool"},
+		{"Log", Func, 0, "func(x complex128) complex128"},
+		{"Log10", Func, 0, "func(x complex128) complex128"},
+		{"NaN", Func, 0, "func() complex128"},
+		{"Phase", Func, 0, "func(x complex128) float64"},
+		{"Polar", Func, 0, "func(x complex128) (r float64, θ float64)"},
+		{"Pow", Func, 0, "func(x complex128, y complex128) complex128"},
+		{"Rect", Func, 0, "func(r float64, θ float64) complex128"},
+		{"Sin", Func, 0, "func(x complex128) complex128"},
+		{"Sinh", Func, 0, "func(x complex128) complex128"},
+		{"Sqrt", Func, 0, "func(x complex128) complex128"},
+		{"Tan", Func, 0, "func(x complex128) complex128"},
+		{"Tanh", Func, 0, "func(x complex128) complex128"},
+	},
+	"math/rand": {
+		{"(*Rand).ExpFloat64", Method, 0, ""},
+		{"(*Rand).Float32", Method, 0, ""},
+		{"(*Rand).Float64", Method, 0, ""},
+		{"(*Rand).Int", Method, 0, ""},
+		{"(*Rand).Int31", Method, 0, ""},
+		{"(*Rand).Int31n", Method, 0, ""},
+		{"(*Rand).Int63", Method, 0, ""},
+		{"(*Rand).Int63n", Method, 0, ""},
+		{"(*Rand).Intn", Method, 0, ""},
+		{"(*Rand).NormFloat64", Method, 0, ""},
+		{"(*Rand).Perm", Method, 0, ""},
+		{"(*Rand).Read", Method, 6, ""},
+		{"(*Rand).Seed", Method, 0, ""},
+		{"(*Rand).Shuffle", Method, 10, ""},
+		{"(*Rand).Uint32", Method, 0, ""},
+		{"(*Rand).Uint64", Method, 8, ""},
+		{"(*Zipf).Uint64", Method, 0, ""},
+		{"ExpFloat64", Func, 0, "func() float64"},
+		{"Float32", Func, 0, "func() float32"},
+		{"Float64", Func, 0, "func() float64"},
+		{"Int", Func, 0, "func() int"},
+		{"Int31", Func, 0, "func() int32"},
+		{"Int31n", Func, 0, "func(n int32) int32"},
+		{"Int63", Func, 0, "func() int64"},
+		{"Int63n", Func, 0, "func(n int64) int64"},
+		{"Intn", Func, 0, "func(n int) int"},
+		{"New", Func, 0, "func(src Source) *Rand"},
+		{"NewSource", Func, 0, "func(seed int64) Source"},
+		{"NewZipf", Func, 0, "func(r *Rand, s float64, v float64, imax uint64) *Zipf"},
+		{"NormFloat64", Func, 0, "func() float64"},
+		{"Perm", Func, 0, "func(n int) []int"},
+		{"Rand", Type, 0, ""},
+		{"Read", Func, 6, "func(p []byte) (n int, err error)"},
+		{"Seed", Func, 0, "func(seed int64)"},
+		{"Shuffle", Func, 10, "func(n int, swap func(i int, j int))"},
+		{"Source", Type, 0, ""},
+		{"Source64", Type, 8, ""},
+		{"Uint32", Func, 0, "func() uint32"},
+		{"Uint64", Func, 8, "func() uint64"},
+		{"Zipf", Type, 0, ""},
+	},
+	"math/rand/v2": {
+		{"(*ChaCha8).AppendBinary", Method, 24, ""},
+		{"(*ChaCha8).MarshalBinary", Method, 22, ""},
+		{"(*ChaCha8).Read", Method, 23, ""},
+		{"(*ChaCha8).Seed", Method, 22, ""},
+		{"(*ChaCha8).Uint64", Method, 22, ""},
+		{"(*ChaCha8).UnmarshalBinary", Method, 22, ""},
+		{"(*PCG).AppendBinary", Method, 24, ""},
+		{"(*PCG).MarshalBinary", Method, 22, ""},
+		{"(*PCG).Seed", Method, 22, ""},
+		{"(*PCG).Uint64", Method, 22, ""},
+		{"(*PCG).UnmarshalBinary", Method, 22, ""},
+		{"(*Rand).ExpFloat64", Method, 22, ""},
+		{"(*Rand).Float32", Method, 22, ""},
+		{"(*Rand).Float64", Method, 22, ""},
+		{"(*Rand).Int", Method, 22, ""},
+		{"(*Rand).Int32", Method, 22, ""},
+		{"(*Rand).Int32N", Method, 22, ""},
+		{"(*Rand).Int64", Method, 22, ""},
+		{"(*Rand).Int64N", Method, 22, ""},
+		{"(*Rand).IntN", Method, 22, ""},
+		{"(*Rand).NormFloat64", Method, 22, ""},
+		{"(*Rand).Perm", Method, 22, ""},
+		{"(*Rand).Shuffle", Method, 22, ""},
+		{"(*Rand).Uint", Method, 23, ""},
+		{"(*Rand).Uint32", Method, 22, ""},
+		{"(*Rand).Uint32N", Method, 22, ""},
+		{"(*Rand).Uint64", Method, 22, ""},
+		{"(*Rand).Uint64N", Method, 22, ""},
+		{"(*Rand).UintN", Method, 22, ""},
+		{"(*Zipf).Uint64", Method, 22, ""},
+		{"ChaCha8", Type, 22, ""},
+		{"ExpFloat64", Func, 22, "func() float64"},
+		{"Float32", Func, 22, "func() float32"},
+		{"Float64", Func, 22, "func() float64"},
+		{"Int", Func, 22, "func() int"},
+		{"Int32", Func, 22, "func() int32"},
+		{"Int32N", Func, 22, "func(n int32) int32"},
+		{"Int64", Func, 22, "func() int64"},
+		{"Int64N", Func, 22, "func(n int64) int64"},
+		{"IntN", Func, 22, "func(n int) int"},
+		{"N", Func, 22, "func[Int intType](n Int) Int"},
+		{"New", Func, 22, "func(src Source) *Rand"},
+		{"NewChaCha8", Func, 22, "func(seed [32]byte) *ChaCha8"},
+		{"NewPCG", Func, 22, "func(seed1 uint64, seed2 uint64) *PCG"},
+		{"NewZipf", Func, 22, "func(r *Rand, s float64, v float64, imax uint64) *Zipf"},
+		{"NormFloat64", Func, 22, "func() float64"},
+		{"PCG", Type, 22, ""},
+		{"Perm", Func, 22, "func(n int) []int"},
+		{"Rand", Type, 22, ""},
+		{"Shuffle", Func, 22, "func(n int, swap func(i int, j int))"},
+		{"Source", Type, 22, ""},
+		{"Uint", Func, 23, "func() uint"},
+		{"Uint32", Func, 22, "func() uint32"},
+		{"Uint32N", Func, 22, "func(n uint32) uint32"},
+		{"Uint64", Func, 22, "func() uint64"},
+		{"Uint64N", Func, 22, "func(n uint64) uint64"},
+		{"UintN", Func, 22, "func(n uint) uint"},
+		{"Zipf", Type, 22, ""},
+	},
+	"mime": {
+		{"(*WordDecoder).Decode", Method, 5, ""},
+		{"(*WordDecoder).DecodeHeader", Method, 5, ""},
+		{"(WordEncoder).Encode", Method, 5, ""},
+		{"AddExtensionType", Func, 0, "func(ext string, typ string) error"},
+		{"BEncoding", Const, 5, ""},
+		{"ErrInvalidMediaParameter", Var, 9, ""},
+		{"ExtensionsByType", Func, 5, "func(typ string) ([]string, error)"},
+		{"FormatMediaType", Func, 0, "func(t string, param map[string]string) string"},
+		{"ParseMediaType", Func, 0, "func(v string) (mediatype string, params map[string]string, err error)"},
+		{"QEncoding", Const, 5, ""},
+		{"TypeByExtension", Func, 0, "func(ext string) string"},
+		{"WordDecoder", Type, 5, ""},
+		{"WordDecoder.CharsetReader", Field, 5, ""},
+		{"WordEncoder", Type, 5, ""},
+	},
+	"mime/multipart": {
+		{"(*FileHeader).Open", Method, 0, ""},
+		{"(*Form).RemoveAll", Method, 0, ""},
+		{"(*Part).Close", Method, 0, ""},
+		{"(*Part).FileName", Method, 0, ""},
+		{"(*Part).FormName", Method, 0, ""},
+		{"(*Part).Read", Method, 0, ""},
+		{"(*Reader).NextPart", Method, 0, ""},
+		{"(*Reader).NextRawPart", Method, 14, ""},
+		{"(*Reader).ReadForm", Method, 0, ""},
+		{"(*Writer).Boundary", Method, 0, ""},
+		{"(*Writer).Close", Method, 0, ""},
+		{"(*Writer).CreateFormField", Method, 0, ""},
+		{"(*Writer).CreateFormFile", Method, 0, ""},
+		{"(*Writer).CreatePart", Method, 0, ""},
+		{"(*Writer).FormDataContentType", Method, 0, ""},
+		{"(*Writer).SetBoundary", Method, 1, ""},
+		{"(*Writer).WriteField", Method, 0, ""},
+		{"ErrMessageTooLarge", Var, 9, ""},
+		{"File", Type, 0, ""},
+		{"FileContentDisposition", Func, 25, ""},
+		{"FileHeader", Type, 0, ""},
+		{"FileHeader.Filename", Field, 0, ""},
+		{"FileHeader.Header", Field, 0, ""},
+		{"FileHeader.Size", Field, 9, ""},
+		{"Form", Type, 0, ""},
+		{"Form.File", Field, 0, ""},
+		{"Form.Value", Field, 0, ""},
+		{"NewReader", Func, 0, "func(r io.Reader, boundary string) *Reader"},
+		{"NewWriter", Func, 0, "func(w io.Writer) *Writer"},
+		{"Part", Type, 0, ""},
+		{"Part.Header", Field, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"Writer", Type, 0, ""},
+	},
+	"mime/quotedprintable": {
+		{"(*Reader).Read", Method, 5, ""},
+		{"(*Writer).Close", Method, 5, ""},
+		{"(*Writer).Write", Method, 5, ""},
+		{"NewReader", Func, 5, "func(r io.Reader) *Reader"},
+		{"NewWriter", Func, 5, "func(w io.Writer) *Writer"},
+		{"Reader", Type, 5, ""},
+		{"Writer", Type, 5, ""},
+		{"Writer.Binary", Field, 5, ""},
+	},
+	"net": {
+		{"(*AddrError).Error", Method, 0, ""},
+		{"(*AddrError).Temporary", Method, 0, ""},
+		{"(*AddrError).Timeout", Method, 0, ""},
+		{"(*Buffers).Read", Method, 8, ""},
+		{"(*Buffers).WriteTo", Method, 8, ""},
+		{"(*DNSConfigError).Error", Method, 0, ""},
+		{"(*DNSConfigError).Temporary", Method, 0, ""},
+		{"(*DNSConfigError).Timeout", Method, 0, ""},
+		{"(*DNSConfigError).Unwrap", Method, 13, ""},
+		{"(*DNSError).Error", Method, 0, ""},
+		{"(*DNSError).Temporary", Method, 0, ""},
+		{"(*DNSError).Timeout", Method, 0, ""},
+		{"(*DNSError).Unwrap", Method, 23, ""},
+		{"(*Dialer).Dial", Method, 1, ""},
+		{"(*Dialer).DialContext", Method, 7, ""},
+		{"(*Dialer).MultipathTCP", Method, 21, ""},
+		{"(*Dialer).SetMultipathTCP", Method, 21, ""},
+		{"(*IP).UnmarshalText", Method, 2, ""},
+		{"(*IPAddr).Network", Method, 0, ""},
+		{"(*IPAddr).String", Method, 0, ""},
+		{"(*IPConn).Close", Method, 0, ""},
+		{"(*IPConn).File", Method, 0, ""},
+		{"(*IPConn).LocalAddr", Method, 0, ""},
+		{"(*IPConn).Read", Method, 0, ""},
+		{"(*IPConn).ReadFrom", Method, 0, ""},
+		{"(*IPConn).ReadFromIP", Method, 0, ""},
+		{"(*IPConn).ReadMsgIP", Method, 1, ""},
+		{"(*IPConn).RemoteAddr", Method, 0, ""},
+		{"(*IPConn).SetDeadline", Method, 0, ""},
+		{"(*IPConn).SetReadBuffer", Method, 0, ""},
+		{"(*IPConn).SetReadDeadline", Method, 0, ""},
+		{"(*IPConn).SetWriteBuffer", Method, 0, ""},
+		{"(*IPConn).SetWriteDeadline", Method, 0, ""},
+		{"(*IPConn).SyscallConn", Method, 9, ""},
+		{"(*IPConn).Write", Method, 0, ""},
+		{"(*IPConn).WriteMsgIP", Method, 1, ""},
+		{"(*IPConn).WriteTo", Method, 0, ""},
+		{"(*IPConn).WriteToIP", Method, 0, ""},
+		{"(*IPNet).Contains", Method, 0, ""},
+		{"(*IPNet).Network", Method, 0, ""},
+		{"(*IPNet).String", Method, 0, ""},
+		{"(*Interface).Addrs", Method, 0, ""},
+		{"(*Interface).MulticastAddrs", Method, 0, ""},
+		{"(*ListenConfig).Listen", Method, 11, ""},
+		{"(*ListenConfig).ListenPacket", Method, 11, ""},
+		{"(*ListenConfig).MultipathTCP", Method, 21, ""},
+		{"(*ListenConfig).SetMultipathTCP", Method, 21, ""},
+		{"(*OpError).Error", Method, 0, ""},
+		{"(*OpError).Temporary", Method, 0, ""},
+		{"(*OpError).Timeout", Method, 0, ""},
+		{"(*OpError).Unwrap", Method, 13, ""},
+		{"(*ParseError).Error", Method, 0, ""},
+		{"(*ParseError).Temporary", Method, 17, ""},
+		{"(*ParseError).Timeout", Method, 17, ""},
+		{"(*Resolver).LookupAddr", Method, 8, ""},
+		{"(*Resolver).LookupCNAME", Method, 8, ""},
+		{"(*Resolver).LookupHost", Method, 8, ""},
+		{"(*Resolver).LookupIP", Method, 15, ""},
+		{"(*Resolver).LookupIPAddr", Method, 8, ""},
+		{"(*Resolver).LookupMX", Method, 8, ""},
+		{"(*Resolver).LookupNS", Method, 8, ""},
+		{"(*Resolver).LookupNetIP", Method, 18, ""},
+		{"(*Resolver).LookupPort", Method, 8, ""},
+		{"(*Resolver).LookupSRV", Method, 8, ""},
+		{"(*Resolver).LookupTXT", Method, 8, ""},
+		{"(*TCPAddr).AddrPort", Method, 18, ""},
+		{"(*TCPAddr).Network", Method, 0, ""},
+		{"(*TCPAddr).String", Method, 0, ""},
+		{"(*TCPConn).Close", Method, 0, ""},
+		{"(*TCPConn).CloseRead", Method, 0, ""},
+		{"(*TCPConn).CloseWrite", Method, 0, ""},
+		{"(*TCPConn).File", Method, 0, ""},
+		{"(*TCPConn).LocalAddr", Method, 0, ""},
+		{"(*TCPConn).MultipathTCP", Method, 21, ""},
+		{"(*TCPConn).Read", Method, 0, ""},
+		{"(*TCPConn).ReadFrom", Method, 0, ""},
+		{"(*TCPConn).RemoteAddr", Method, 0, ""},
+		{"(*TCPConn).SetDeadline", Method, 0, ""},
+		{"(*TCPConn).SetKeepAlive", Method, 0, ""},
+		{"(*TCPConn).SetKeepAliveConfig", Method, 23, ""},
+		{"(*TCPConn).SetKeepAlivePeriod", Method, 2, ""},
+		{"(*TCPConn).SetLinger", Method, 0, ""},
+		{"(*TCPConn).SetNoDelay", Method, 0, ""},
+		{"(*TCPConn).SetReadBuffer", Method, 0, ""},
+		{"(*TCPConn).SetReadDeadline", Method, 0, ""},
+		{"(*TCPConn).SetWriteBuffer", Method, 0, ""},
+		{"(*TCPConn).SetWriteDeadline", Method, 0, ""},
+		{"(*TCPConn).SyscallConn", Method, 9, ""},
+		{"(*TCPConn).Write", Method, 0, ""},
+		{"(*TCPConn).WriteTo", Method, 22, ""},
+		{"(*TCPListener).Accept", Method, 0, ""},
+		{"(*TCPListener).AcceptTCP", Method, 0, ""},
+		{"(*TCPListener).Addr", Method, 0, ""},
+		{"(*TCPListener).Close", Method, 0, ""},
+		{"(*TCPListener).File", Method, 0, ""},
+		{"(*TCPListener).SetDeadline", Method, 0, ""},
+		{"(*TCPListener).SyscallConn", Method, 10, ""},
+		{"(*UDPAddr).AddrPort", Method, 18, ""},
+		{"(*UDPAddr).Network", Method, 0, ""},
+		{"(*UDPAddr).String", Method, 0, ""},
+		{"(*UDPConn).Close", Method, 0, ""},
+		{"(*UDPConn).File", Method, 0, ""},
+		{"(*UDPConn).LocalAddr", Method, 0, ""},
+		{"(*UDPConn).Read", Method, 0, ""},
+		{"(*UDPConn).ReadFrom", Method, 0, ""},
+		{"(*UDPConn).ReadFromUDP", Method, 0, ""},
+		{"(*UDPConn).ReadFromUDPAddrPort", Method, 18, ""},
+		{"(*UDPConn).ReadMsgUDP", Method, 1, ""},
+		{"(*UDPConn).ReadMsgUDPAddrPort", Method, 18, ""},
+		{"(*UDPConn).RemoteAddr", Method, 0, ""},
+		{"(*UDPConn).SetDeadline", Method, 0, ""},
+		{"(*UDPConn).SetReadBuffer", Method, 0, ""},
+		{"(*UDPConn).SetReadDeadline", Method, 0, ""},
+		{"(*UDPConn).SetWriteBuffer", Method, 0, ""},
+		{"(*UDPConn).SetWriteDeadline", Method, 0, ""},
+		{"(*UDPConn).SyscallConn", Method, 9, ""},
+		{"(*UDPConn).Write", Method, 0, ""},
+		{"(*UDPConn).WriteMsgUDP", Method, 1, ""},
+		{"(*UDPConn).WriteMsgUDPAddrPort", Method, 18, ""},
+		{"(*UDPConn).WriteTo", Method, 0, ""},
+		{"(*UDPConn).WriteToUDP", Method, 0, ""},
+		{"(*UDPConn).WriteToUDPAddrPort", Method, 18, ""},
+		{"(*UnixAddr).Network", Method, 0, ""},
+		{"(*UnixAddr).String", Method, 0, ""},
+		{"(*UnixConn).Close", Method, 0, ""},
+		{"(*UnixConn).CloseRead", Method, 1, ""},
+		{"(*UnixConn).CloseWrite", Method, 1, ""},
+		{"(*UnixConn).File", Method, 0, ""},
+		{"(*UnixConn).LocalAddr", Method, 0, ""},
+		{"(*UnixConn).Read", Method, 0, ""},
+		{"(*UnixConn).ReadFrom", Method, 0, ""},
+		{"(*UnixConn).ReadFromUnix", Method, 0, ""},
+		{"(*UnixConn).ReadMsgUnix", Method, 0, ""},
+		{"(*UnixConn).RemoteAddr", Method, 0, ""},
+		{"(*UnixConn).SetDeadline", Method, 0, ""},
+		{"(*UnixConn).SetReadBuffer", Method, 0, ""},
+		{"(*UnixConn).SetReadDeadline", Method, 0, ""},
+		{"(*UnixConn).SetWriteBuffer", Method, 0, ""},
+		{"(*UnixConn).SetWriteDeadline", Method, 0, ""},
+		{"(*UnixConn).SyscallConn", Method, 9, ""},
+		{"(*UnixConn).Write", Method, 0, ""},
+		{"(*UnixConn).WriteMsgUnix", Method, 0, ""},
+		{"(*UnixConn).WriteTo", Method, 0, ""},
+		{"(*UnixConn).WriteToUnix", Method, 0, ""},
+		{"(*UnixListener).Accept", Method, 0, ""},
+		{"(*UnixListener).AcceptUnix", Method, 0, ""},
+		{"(*UnixListener).Addr", Method, 0, ""},
+		{"(*UnixListener).Close", Method, 0, ""},
+		{"(*UnixListener).File", Method, 0, ""},
+		{"(*UnixListener).SetDeadline", Method, 0, ""},
+		{"(*UnixListener).SetUnlinkOnClose", Method, 8, ""},
+		{"(*UnixListener).SyscallConn", Method, 10, ""},
+		{"(Flags).String", Method, 0, ""},
+		{"(HardwareAddr).String", Method, 0, ""},
+		{"(IP).AppendText", Method, 24, ""},
+		{"(IP).DefaultMask", Method, 0, ""},
+		{"(IP).Equal", Method, 0, ""},
+		{"(IP).IsGlobalUnicast", Method, 0, ""},
+		{"(IP).IsInterfaceLocalMulticast", Method, 0, ""},
+		{"(IP).IsLinkLocalMulticast", Method, 0, ""},
+		{"(IP).IsLinkLocalUnicast", Method, 0, ""},
+		{"(IP).IsLoopback", Method, 0, ""},
+		{"(IP).IsMulticast", Method, 0, ""},
+		{"(IP).IsPrivate", Method, 17, ""},
+		{"(IP).IsUnspecified", Method, 0, ""},
+		{"(IP).MarshalText", Method, 2, ""},
+		{"(IP).Mask", Method, 0, ""},
+		{"(IP).String", Method, 0, ""},
+		{"(IP).To16", Method, 0, ""},
+		{"(IP).To4", Method, 0, ""},
+		{"(IPMask).Size", Method, 0, ""},
+		{"(IPMask).String", Method, 0, ""},
+		{"(InvalidAddrError).Error", Method, 0, ""},
+		{"(InvalidAddrError).Temporary", Method, 0, ""},
+		{"(InvalidAddrError).Timeout", Method, 0, ""},
+		{"(UnknownNetworkError).Error", Method, 0, ""},
+		{"(UnknownNetworkError).Temporary", Method, 0, ""},
+		{"(UnknownNetworkError).Timeout", Method, 0, ""},
+		{"Addr", Type, 0, ""},
+		{"AddrError", Type, 0, ""},
+		{"AddrError.Addr", Field, 0, ""},
+		{"AddrError.Err", Field, 0, ""},
+		{"Buffers", Type, 8, ""},
+		{"CIDRMask", Func, 0, "func(ones int, bits int) IPMask"},
+		{"Conn", Type, 0, ""},
+		{"DNSConfigError", Type, 0, ""},
+		{"DNSConfigError.Err", Field, 0, ""},
+		{"DNSError", Type, 0, ""},
+		{"DNSError.Err", Field, 0, ""},
+		{"DNSError.IsNotFound", Field, 13, ""},
+		{"DNSError.IsTemporary", Field, 6, ""},
+		{"DNSError.IsTimeout", Field, 0, ""},
+		{"DNSError.Name", Field, 0, ""},
+		{"DNSError.Server", Field, 0, ""},
+		{"DNSError.UnwrapErr", Field, 23, ""},
+		{"DefaultResolver", Var, 8, ""},
+		{"Dial", Func, 0, "func(network string, address string) (Conn, error)"},
+		{"DialIP", Func, 0, "func(network string, laddr *IPAddr, raddr *IPAddr) (*IPConn, error)"},
+		{"DialTCP", Func, 0, "func(network string, laddr *TCPAddr, raddr *TCPAddr) (*TCPConn, error)"},
+		{"DialTimeout", Func, 0, "func(network string, address string, timeout time.Duration) (Conn, error)"},
+		{"DialUDP", Func, 0, "func(network string, laddr *UDPAddr, raddr *UDPAddr) (*UDPConn, error)"},
+		{"DialUnix", Func, 0, "func(network string, laddr *UnixAddr, raddr *UnixAddr) (*UnixConn, error)"},
+		{"Dialer", Type, 1, ""},
+		{"Dialer.Cancel", Field, 6, ""},
+		{"Dialer.Control", Field, 11, ""},
+		{"Dialer.ControlContext", Field, 20, ""},
+		{"Dialer.Deadline", Field, 1, ""},
+		{"Dialer.DualStack", Field, 2, ""},
+		{"Dialer.FallbackDelay", Field, 5, ""},
+		{"Dialer.KeepAlive", Field, 3, ""},
+		{"Dialer.KeepAliveConfig", Field, 23, ""},
+		{"Dialer.LocalAddr", Field, 1, ""},
+		{"Dialer.Resolver", Field, 8, ""},
+		{"Dialer.Timeout", Field, 1, ""},
+		{"ErrClosed", Var, 16, ""},
+		{"ErrWriteToConnected", Var, 0, ""},
+		{"Error", Type, 0, ""},
+		{"FileConn", Func, 0, "func(f *os.File) (c Conn, err error)"},
+		{"FileListener", Func, 0, "func(f *os.File) (ln Listener, err error)"},
+		{"FilePacketConn", Func, 0, "func(f *os.File) (c PacketConn, err error)"},
+		{"FlagBroadcast", Const, 0, ""},
+		{"FlagLoopback", Const, 0, ""},
+		{"FlagMulticast", Const, 0, ""},
+		{"FlagPointToPoint", Const, 0, ""},
+		{"FlagRunning", Const, 20, ""},
+		{"FlagUp", Const, 0, ""},
+		{"Flags", Type, 0, ""},
+		{"HardwareAddr", Type, 0, ""},
+		{"IP", Type, 0, ""},
+		{"IPAddr", Type, 0, ""},
+		{"IPAddr.IP", Field, 0, ""},
+		{"IPAddr.Zone", Field, 1, ""},
+		{"IPConn", Type, 0, ""},
+		{"IPMask", Type, 0, ""},
+		{"IPNet", Type, 0, ""},
+		{"IPNet.IP", Field, 0, ""},
+		{"IPNet.Mask", Field, 0, ""},
+		{"IPv4", Func, 0, "func(a byte, b byte, c byte, d byte) IP"},
+		{"IPv4Mask", Func, 0, "func(a byte, b byte, c byte, d byte) IPMask"},
+		{"IPv4allrouter", Var, 0, ""},
+		{"IPv4allsys", Var, 0, ""},
+		{"IPv4bcast", Var, 0, ""},
+		{"IPv4len", Const, 0, ""},
+		{"IPv4zero", Var, 0, ""},
+		{"IPv6interfacelocalallnodes", Var, 0, ""},
+		{"IPv6len", Const, 0, ""},
+		{"IPv6linklocalallnodes", Var, 0, ""},
+		{"IPv6linklocalallrouters", Var, 0, ""},
+		{"IPv6loopback", Var, 0, ""},
+		{"IPv6unspecified", Var, 0, ""},
+		{"IPv6zero", Var, 0, ""},
+		{"Interface", Type, 0, ""},
+		{"Interface.Flags", Field, 0, ""},
+		{"Interface.HardwareAddr", Field, 0, ""},
+		{"Interface.Index", Field, 0, ""},
+		{"Interface.MTU", Field, 0, ""},
+		{"Interface.Name", Field, 0, ""},
+		{"InterfaceAddrs", Func, 0, "func() ([]Addr, error)"},
+		{"InterfaceByIndex", Func, 0, "func(index int) (*Interface, error)"},
+		{"InterfaceByName", Func, 0, "func(name string) (*Interface, error)"},
+		{"Interfaces", Func, 0, "func() ([]Interface, error)"},
+		{"InvalidAddrError", Type, 0, ""},
+		{"JoinHostPort", Func, 0, "func(host string, port string) string"},
+		{"KeepAliveConfig", Type, 23, ""},
+		{"KeepAliveConfig.Count", Field, 23, ""},
+		{"KeepAliveConfig.Enable", Field, 23, ""},
+		{"KeepAliveConfig.Idle", Field, 23, ""},
+		{"KeepAliveConfig.Interval", Field, 23, ""},
+		{"Listen", Func, 0, "func(network string, address string) (Listener, error)"},
+		{"ListenConfig", Type, 11, ""},
+		{"ListenConfig.Control", Field, 11, ""},
+		{"ListenConfig.KeepAlive", Field, 13, ""},
+		{"ListenConfig.KeepAliveConfig", Field, 23, ""},
+		{"ListenIP", Func, 0, "func(network string, laddr *IPAddr) (*IPConn, error)"},
+		{"ListenMulticastUDP", Func, 0, "func(network string, ifi *Interface, gaddr *UDPAddr) (*UDPConn, error)"},
+		{"ListenPacket", Func, 0, "func(network string, address string) (PacketConn, error)"},
+		{"ListenTCP", Func, 0, "func(network string, laddr *TCPAddr) (*TCPListener, error)"},
+		{"ListenUDP", Func, 0, "func(network string, laddr *UDPAddr) (*UDPConn, error)"},
+		{"ListenUnix", Func, 0, "func(network string, laddr *UnixAddr) (*UnixListener, error)"},
+		{"ListenUnixgram", Func, 0, "func(network string, laddr *UnixAddr) (*UnixConn, error)"},
+		{"Listener", Type, 0, ""},
+		{"LookupAddr", Func, 0, "func(addr string) (names []string, err error)"},
+		{"LookupCNAME", Func, 0, "func(host string) (cname string, err error)"},
+		{"LookupHost", Func, 0, "func(host string) (addrs []string, err error)"},
+		{"LookupIP", Func, 0, "func(host string) ([]IP, error)"},
+		{"LookupMX", Func, 0, "func(name string) ([]*MX, error)"},
+		{"LookupNS", Func, 1, "func(name string) ([]*NS, error)"},
+		{"LookupPort", Func, 0, "func(network string, service string) (port int, err error)"},
+		{"LookupSRV", Func, 0, "func(service string, proto string, name string) (cname string, addrs []*SRV, err error)"},
+		{"LookupTXT", Func, 0, "func(name string) ([]string, error)"},
+		{"MX", Type, 0, ""},
+		{"MX.Host", Field, 0, ""},
+		{"MX.Pref", Field, 0, ""},
+		{"NS", Type, 1, ""},
+		{"NS.Host", Field, 1, ""},
+		{"OpError", Type, 0, ""},
+		{"OpError.Addr", Field, 0, ""},
+		{"OpError.Err", Field, 0, ""},
+		{"OpError.Net", Field, 0, ""},
+		{"OpError.Op", Field, 0, ""},
+		{"OpError.Source", Field, 5, ""},
+		{"PacketConn", Type, 0, ""},
+		{"ParseCIDR", Func, 0, "func(s string) (IP, *IPNet, error)"},
+		{"ParseError", Type, 0, ""},
+		{"ParseError.Text", Field, 0, ""},
+		{"ParseError.Type", Field, 0, ""},
+		{"ParseIP", Func, 0, "func(s string) IP"},
+		{"ParseMAC", Func, 0, "func(s string) (hw HardwareAddr, err error)"},
+		{"Pipe", Func, 0, "func() (Conn, Conn)"},
+		{"ResolveIPAddr", Func, 0, "func(network string, address string) (*IPAddr, error)"},
+		{"ResolveTCPAddr", Func, 0, "func(network string, address string) (*TCPAddr, error)"},
+		{"ResolveUDPAddr", Func, 0, "func(network string, address string) (*UDPAddr, error)"},
+		{"ResolveUnixAddr", Func, 0, "func(network string, address string) (*UnixAddr, error)"},
+		{"Resolver", Type, 8, ""},
+		{"Resolver.Dial", Field, 9, ""},
+		{"Resolver.PreferGo", Field, 8, ""},
+		{"Resolver.StrictErrors", Field, 9, ""},
+		{"SRV", Type, 0, ""},
+		{"SRV.Port", Field, 0, ""},
+		{"SRV.Priority", Field, 0, ""},
+		{"SRV.Target", Field, 0, ""},
+		{"SRV.Weight", Field, 0, ""},
+		{"SplitHostPort", Func, 0, "func(hostport string) (host string, port string, err error)"},
+		{"TCPAddr", Type, 0, ""},
+		{"TCPAddr.IP", Field, 0, ""},
+		{"TCPAddr.Port", Field, 0, ""},
+		{"TCPAddr.Zone", Field, 1, ""},
+		{"TCPAddrFromAddrPort", Func, 18, "func(addr netip.AddrPort) *TCPAddr"},
+		{"TCPConn", Type, 0, ""},
+		{"TCPListener", Type, 0, ""},
+		{"UDPAddr", Type, 0, ""},
+		{"UDPAddr.IP", Field, 0, ""},
+		{"UDPAddr.Port", Field, 0, ""},
+		{"UDPAddr.Zone", Field, 1, ""},
+		{"UDPAddrFromAddrPort", Func, 18, "func(addr netip.AddrPort) *UDPAddr"},
+		{"UDPConn", Type, 0, ""},
+		{"UnixAddr", Type, 0, ""},
+		{"UnixAddr.Name", Field, 0, ""},
+		{"UnixAddr.Net", Field, 0, ""},
+		{"UnixConn", Type, 0, ""},
+		{"UnixListener", Type, 0, ""},
+		{"UnknownNetworkError", Type, 0, ""},
+	},
+	"net/http": {
+		{"(*Client).CloseIdleConnections", Method, 12, ""},
+		{"(*Client).Do", Method, 0, ""},
+		{"(*Client).Get", Method, 0, ""},
+		{"(*Client).Head", Method, 0, ""},
+		{"(*Client).Post", Method, 0, ""},
+		{"(*Client).PostForm", Method, 0, ""},
+		{"(*Cookie).String", Method, 0, ""},
+		{"(*Cookie).Valid", Method, 18, ""},
+		{"(*MaxBytesError).Error", Method, 19, ""},
+		{"(*ProtocolError).Error", Method, 0, ""},
+		{"(*ProtocolError).Is", Method, 21, ""},
+		{"(*Protocols).SetHTTP1", Method, 24, ""},
+		{"(*Protocols).SetHTTP2", Method, 24, ""},
+		{"(*Protocols).SetUnencryptedHTTP2", Method, 24, ""},
+		{"(*Request).AddCookie", Method, 0, ""},
+		{"(*Request).BasicAuth", Method, 4, ""},
+		{"(*Request).Clone", Method, 13, ""},
+		{"(*Request).Context", Method, 7, ""},
+		{"(*Request).Cookie", Method, 0, ""},
+		{"(*Request).Cookies", Method, 0, ""},
+		{"(*Request).CookiesNamed", Method, 23, ""},
+		{"(*Request).FormFile", Method, 0, ""},
+		{"(*Request).FormValue", Method, 0, ""},
+		{"(*Request).MultipartReader", Method, 0, ""},
+		{"(*Request).ParseForm", Method, 0, ""},
+		{"(*Request).ParseMultipartForm", Method, 0, ""},
+		{"(*Request).PathValue", Method, 22, ""},
+		{"(*Request).PostFormValue", Method, 1, ""},
+		{"(*Request).ProtoAtLeast", Method, 0, ""},
+		{"(*Request).Referer", Method, 0, ""},
+		{"(*Request).SetBasicAuth", Method, 0, ""},
+		{"(*Request).SetPathValue", Method, 22, ""},
+		{"(*Request).UserAgent", Method, 0, ""},
+		{"(*Request).WithContext", Method, 7, ""},
+		{"(*Request).Write", Method, 0, ""},
+		{"(*Request).WriteProxy", Method, 0, ""},
+		{"(*Response).Cookies", Method, 0, ""},
+		{"(*Response).Location", Method, 0, ""},
+		{"(*Response).ProtoAtLeast", Method, 0, ""},
+		{"(*Response).Write", Method, 0, ""},
+		{"(*ResponseController).EnableFullDuplex", Method, 21, ""},
+		{"(*ResponseController).Flush", Method, 20, ""},
+		{"(*ResponseController).Hijack", Method, 20, ""},
+		{"(*ResponseController).SetReadDeadline", Method, 20, ""},
+		{"(*ResponseController).SetWriteDeadline", Method, 20, ""},
+		{"(*ServeMux).Handle", Method, 0, ""},
+		{"(*ServeMux).HandleFunc", Method, 0, ""},
+		{"(*ServeMux).Handler", Method, 1, ""},
+		{"(*ServeMux).ServeHTTP", Method, 0, ""},
+		{"(*Server).Close", Method, 8, ""},
+		{"(*Server).ListenAndServe", Method, 0, ""},
+		{"(*Server).ListenAndServeTLS", Method, 0, ""},
+		{"(*Server).RegisterOnShutdown", Method, 9, ""},
+		{"(*Server).Serve", Method, 0, ""},
+		{"(*Server).ServeTLS", Method, 9, ""},
+		{"(*Server).SetKeepAlivesEnabled", Method, 3, ""},
+		{"(*Server).Shutdown", Method, 8, ""},
+		{"(*Transport).CancelRequest", Method, 1, ""},
+		{"(*Transport).Clone", Method, 13, ""},
+		{"(*Transport).CloseIdleConnections", Method, 0, ""},
+		{"(*Transport).RegisterProtocol", Method, 0, ""},
+		{"(*Transport).RoundTrip", Method, 0, ""},
+		{"(ConnState).String", Method, 3, ""},
+		{"(Dir).Open", Method, 0, ""},
+		{"(HandlerFunc).ServeHTTP", Method, 0, ""},
+		{"(Header).Add", Method, 0, ""},
+		{"(Header).Clone", Method, 13, ""},
+		{"(Header).Del", Method, 0, ""},
+		{"(Header).Get", Method, 0, ""},
+		{"(Header).Set", Method, 0, ""},
+		{"(Header).Values", Method, 14, ""},
+		{"(Header).Write", Method, 0, ""},
+		{"(Header).WriteSubset", Method, 0, ""},
+		{"(Protocols).HTTP1", Method, 24, ""},
+		{"(Protocols).HTTP2", Method, 24, ""},
+		{"(Protocols).String", Method, 24, ""},
+		{"(Protocols).UnencryptedHTTP2", Method, 24, ""},
+		{"AllowQuerySemicolons", Func, 17, "func(h Handler) Handler"},
+		{"CanonicalHeaderKey", Func, 0, "func(s string) string"},
+		{"Client", Type, 0, ""},
+		{"Client.CheckRedirect", Field, 0, ""},
+		{"Client.Jar", Field, 0, ""},
+		{"Client.Timeout", Field, 3, ""},
+		{"Client.Transport", Field, 0, ""},
+		{"CloseNotifier", Type, 1, ""},
+		{"ConnState", Type, 3, ""},
+		{"Cookie", Type, 0, ""},
+		{"Cookie.Domain", Field, 0, ""},
+		{"Cookie.Expires", Field, 0, ""},
+		{"Cookie.HttpOnly", Field, 0, ""},
+		{"Cookie.MaxAge", Field, 0, ""},
+		{"Cookie.Name", Field, 0, ""},
+		{"Cookie.Partitioned", Field, 23, ""},
+		{"Cookie.Path", Field, 0, ""},
+		{"Cookie.Quoted", Field, 23, ""},
+		{"Cookie.Raw", Field, 0, ""},
+		{"Cookie.RawExpires", Field, 0, ""},
+		{"Cookie.SameSite", Field, 11, ""},
+		{"Cookie.Secure", Field, 0, ""},
+		{"Cookie.Unparsed", Field, 0, ""},
+		{"Cookie.Value", Field, 0, ""},
+		{"CookieJar", Type, 0, ""},
+		{"DefaultClient", Var, 0, ""},
+		{"DefaultMaxHeaderBytes", Const, 0, ""},
+		{"DefaultMaxIdleConnsPerHost", Const, 0, ""},
+		{"DefaultServeMux", Var, 0, ""},
+		{"DefaultTransport", Var, 0, ""},
+		{"DetectContentType", Func, 0, "func(data []byte) string"},
+		{"Dir", Type, 0, ""},
+		{"ErrAbortHandler", Var, 8, ""},
+		{"ErrBodyNotAllowed", Var, 0, ""},
+		{"ErrBodyReadAfterClose", Var, 0, ""},
+		{"ErrContentLength", Var, 0, ""},
+		{"ErrHandlerTimeout", Var, 0, ""},
+		{"ErrHeaderTooLong", Var, 0, ""},
+		{"ErrHijacked", Var, 0, ""},
+		{"ErrLineTooLong", Var, 0, ""},
+		{"ErrMissingBoundary", Var, 0, ""},
+		{"ErrMissingContentLength", Var, 0, ""},
+		{"ErrMissingFile", Var, 0, ""},
+		{"ErrNoCookie", Var, 0, ""},
+		{"ErrNoLocation", Var, 0, ""},
+		{"ErrNotMultipart", Var, 0, ""},
+		{"ErrNotSupported", Var, 0, ""},
+		{"ErrSchemeMismatch", Var, 21, ""},
+		{"ErrServerClosed", Var, 8, ""},
+		{"ErrShortBody", Var, 0, ""},
+		{"ErrSkipAltProtocol", Var, 6, ""},
+		{"ErrUnexpectedTrailer", Var, 0, ""},
+		{"ErrUseLastResponse", Var, 7, ""},
+		{"ErrWriteAfterFlush", Var, 0, ""},
+		{"Error", Func, 0, "func(w ResponseWriter, error string, code int)"},
+		{"FS", Func, 16, "func(fsys fs.FS) FileSystem"},
+		{"File", Type, 0, ""},
+		{"FileServer", Func, 0, "func(root FileSystem) Handler"},
+		{"FileServerFS", Func, 22, "func(root fs.FS) Handler"},
+		{"FileSystem", Type, 0, ""},
+		{"Flusher", Type, 0, ""},
+		{"Get", Func, 0, "func(url string) (resp *Response, err error)"},
+		{"HTTP2Config", Type, 24, ""},
+		{"HTTP2Config.CountError", Field, 24, ""},
+		{"HTTP2Config.MaxConcurrentStreams", Field, 24, ""},
+		{"HTTP2Config.MaxDecoderHeaderTableSize", Field, 24, ""},
+		{"HTTP2Config.MaxEncoderHeaderTableSize", Field, 24, ""},
+		{"HTTP2Config.MaxReadFrameSize", Field, 24, ""},
+		{"HTTP2Config.MaxReceiveBufferPerConnection", Field, 24, ""},
+		{"HTTP2Config.MaxReceiveBufferPerStream", Field, 24, ""},
+		{"HTTP2Config.PermitProhibitedCipherSuites", Field, 24, ""},
+		{"HTTP2Config.PingTimeout", Field, 24, ""},
+		{"HTTP2Config.SendPingTimeout", Field, 24, ""},
+		{"HTTP2Config.WriteByteTimeout", Field, 24, ""},
+		{"Handle", Func, 0, "func(pattern string, handler Handler)"},
+		{"HandleFunc", Func, 0, "func(pattern string, handler func(ResponseWriter, *Request))"},
+		{"Handler", Type, 0, ""},
+		{"HandlerFunc", Type, 0, ""},
+		{"Head", Func, 0, "func(url string) (resp *Response, err error)"},
+		{"Header", Type, 0, ""},
+		{"Hijacker", Type, 0, ""},
+		{"ListenAndServe", Func, 0, "func(addr string, handler Handler) error"},
+		{"ListenAndServeTLS", Func, 0, "func(addr string, certFile string, keyFile string, handler Handler) error"},
+		{"LocalAddrContextKey", Var, 7, ""},
+		{"MaxBytesError", Type, 19, ""},
+		{"MaxBytesError.Limit", Field, 19, ""},
+		{"MaxBytesHandler", Func, 18, "func(h Handler, n int64) Handler"},
+		{"MaxBytesReader", Func, 0, "func(w ResponseWriter, r io.ReadCloser, n int64) io.ReadCloser"},
+		{"MethodConnect", Const, 6, ""},
+		{"MethodDelete", Const, 6, ""},
+		{"MethodGet", Const, 6, ""},
+		{"MethodHead", Const, 6, ""},
+		{"MethodOptions", Const, 6, ""},
+		{"MethodPatch", Const, 6, ""},
+		{"MethodPost", Const, 6, ""},
+		{"MethodPut", Const, 6, ""},
+		{"MethodTrace", Const, 6, ""},
+		{"NewFileTransport", Func, 0, "func(fs FileSystem) RoundTripper"},
+		{"NewFileTransportFS", Func, 22, "func(fsys fs.FS) RoundTripper"},
+		{"NewRequest", Func, 0, "func(method string, url string, body io.Reader) (*Request, error)"},
+		{"NewRequestWithContext", Func, 13, "func(ctx context.Context, method string, url string, body io.Reader) (*Request, error)"},
+		{"NewResponseController", Func, 20, "func(rw ResponseWriter) *ResponseController"},
+		{"NewServeMux", Func, 0, "func() *ServeMux"},
+		{"NoBody", Var, 8, ""},
+		{"NotFound", Func, 0, "func(w ResponseWriter, r *Request)"},
+		{"NotFoundHandler", Func, 0, "func() Handler"},
+		{"ParseCookie", Func, 23, "func(line string) ([]*Cookie, error)"},
+		{"ParseHTTPVersion", Func, 0, "func(vers string) (major int, minor int, ok bool)"},
+		{"ParseSetCookie", Func, 23, "func(line string) (*Cookie, error)"},
+		{"ParseTime", Func, 1, "func(text string) (t time.Time, err error)"},
+		{"Post", Func, 0, "func(url string, contentType string, body io.Reader) (resp *Response, err error)"},
+		{"PostForm", Func, 0, "func(url string, data url.Values) (resp *Response, err error)"},
+		{"ProtocolError", Type, 0, ""},
+		{"ProtocolError.ErrorString", Field, 0, ""},
+		{"Protocols", Type, 24, ""},
+		{"ProxyFromEnvironment", Func, 0, "func(req *Request) (*url.URL, error)"},
+		{"ProxyURL", Func, 0, "func(fixedURL *url.URL) func(*Request) (*url.URL, error)"},
+		{"PushOptions", Type, 8, ""},
+		{"PushOptions.Header", Field, 8, ""},
+		{"PushOptions.Method", Field, 8, ""},
+		{"Pusher", Type, 8, ""},
+		{"ReadRequest", Func, 0, "func(b *bufio.Reader) (*Request, error)"},
+		{"ReadResponse", Func, 0, "func(r *bufio.Reader, req *Request) (*Response, error)"},
+		{"Redirect", Func, 0, "func(w ResponseWriter, r *Request, url string, code int)"},
+		{"RedirectHandler", Func, 0, "func(url string, code int) Handler"},
+		{"Request", Type, 0, ""},
+		{"Request.Body", Field, 0, ""},
+		{"Request.Cancel", Field, 5, ""},
+		{"Request.Close", Field, 0, ""},
+		{"Request.ContentLength", Field, 0, ""},
+		{"Request.Form", Field, 0, ""},
+		{"Request.GetBody", Field, 8, ""},
+		{"Request.Header", Field, 0, ""},
+		{"Request.Host", Field, 0, ""},
+		{"Request.Method", Field, 0, ""},
+		{"Request.MultipartForm", Field, 0, ""},
+		{"Request.Pattern", Field, 23, ""},
+		{"Request.PostForm", Field, 1, ""},
+		{"Request.Proto", Field, 0, ""},
+		{"Request.ProtoMajor", Field, 0, ""},
+		{"Request.ProtoMinor", Field, 0, ""},
+		{"Request.RemoteAddr", Field, 0, ""},
+		{"Request.RequestURI", Field, 0, ""},
+		{"Request.Response", Field, 7, ""},
+		{"Request.TLS", Field, 0, ""},
+		{"Request.Trailer", Field, 0, ""},
+		{"Request.TransferEncoding", Field, 0, ""},
+		{"Request.URL", Field, 0, ""},
+		{"Response", Type, 0, ""},
+		{"Response.Body", Field, 0, ""},
+		{"Response.Close", Field, 0, ""},
+		{"Response.ContentLength", Field, 0, ""},
+		{"Response.Header", Field, 0, ""},
+		{"Response.Proto", Field, 0, ""},
+		{"Response.ProtoMajor", Field, 0, ""},
+		{"Response.ProtoMinor", Field, 0, ""},
+		{"Response.Request", Field, 0, ""},
+		{"Response.Status", Field, 0, ""},
+		{"Response.StatusCode", Field, 0, ""},
+		{"Response.TLS", Field, 3, ""},
+		{"Response.Trailer", Field, 0, ""},
+		{"Response.TransferEncoding", Field, 0, ""},
+		{"Response.Uncompressed", Field, 7, ""},
+		{"ResponseController", Type, 20, ""},
+		{"ResponseWriter", Type, 0, ""},
+		{"RoundTripper", Type, 0, ""},
+		{"SameSite", Type, 11, ""},
+		{"SameSiteDefaultMode", Const, 11, ""},
+		{"SameSiteLaxMode", Const, 11, ""},
+		{"SameSiteNoneMode", Const, 13, ""},
+		{"SameSiteStrictMode", Const, 11, ""},
+		{"Serve", Func, 0, "func(l net.Listener, handler Handler) error"},
+		{"ServeContent", Func, 0, "func(w ResponseWriter, req *Request, name string, modtime time.Time, content io.ReadSeeker)"},
+		{"ServeFile", Func, 0, "func(w ResponseWriter, r *Request, name string)"},
+		{"ServeFileFS", Func, 22, "func(w ResponseWriter, r *Request, fsys fs.FS, name string)"},
+		{"ServeMux", Type, 0, ""},
+		{"ServeTLS", Func, 9, "func(l net.Listener, handler Handler, certFile string, keyFile string) error"},
+		{"Server", Type, 0, ""},
+		{"Server.Addr", Field, 0, ""},
+		{"Server.BaseContext", Field, 13, ""},
+		{"Server.ConnContext", Field, 13, ""},
+		{"Server.ConnState", Field, 3, ""},
+		{"Server.DisableGeneralOptionsHandler", Field, 20, ""},
+		{"Server.ErrorLog", Field, 3, ""},
+		{"Server.HTTP2", Field, 24, ""},
+		{"Server.Handler", Field, 0, ""},
+		{"Server.IdleTimeout", Field, 8, ""},
+		{"Server.MaxHeaderBytes", Field, 0, ""},
+		{"Server.Protocols", Field, 24, ""},
+		{"Server.ReadHeaderTimeout", Field, 8, ""},
+		{"Server.ReadTimeout", Field, 0, ""},
+		{"Server.TLSConfig", Field, 0, ""},
+		{"Server.TLSNextProto", Field, 1, ""},
+		{"Server.WriteTimeout", Field, 0, ""},
+		{"ServerContextKey", Var, 7, ""},
+		{"SetCookie", Func, 0, "func(w ResponseWriter, cookie *Cookie)"},
+		{"StateActive", Const, 3, ""},
+		{"StateClosed", Const, 3, ""},
+		{"StateHijacked", Const, 3, ""},
+		{"StateIdle", Const, 3, ""},
+		{"StateNew", Const, 3, ""},
+		{"StatusAccepted", Const, 0, ""},
+		{"StatusAlreadyReported", Const, 7, ""},
+		{"StatusBadGateway", Const, 0, ""},
+		{"StatusBadRequest", Const, 0, ""},
+		{"StatusConflict", Const, 0, ""},
+		{"StatusContinue", Const, 0, ""},
+		{"StatusCreated", Const, 0, ""},
+		{"StatusEarlyHints", Const, 13, ""},
+		{"StatusExpectationFailed", Const, 0, ""},
+		{"StatusFailedDependency", Const, 7, ""},
+		{"StatusForbidden", Const, 0, ""},
+		{"StatusFound", Const, 0, ""},
+		{"StatusGatewayTimeout", Const, 0, ""},
+		{"StatusGone", Const, 0, ""},
+		{"StatusHTTPVersionNotSupported", Const, 0, ""},
+		{"StatusIMUsed", Const, 7, ""},
+		{"StatusInsufficientStorage", Const, 7, ""},
+		{"StatusInternalServerError", Const, 0, ""},
+		{"StatusLengthRequired", Const, 0, ""},
+		{"StatusLocked", Const, 7, ""},
+		{"StatusLoopDetected", Const, 7, ""},
+		{"StatusMethodNotAllowed", Const, 0, ""},
+		{"StatusMisdirectedRequest", Const, 11, ""},
+		{"StatusMovedPermanently", Const, 0, ""},
+		{"StatusMultiStatus", Const, 7, ""},
+		{"StatusMultipleChoices", Const, 0, ""},
+		{"StatusNetworkAuthenticationRequired", Const, 6, ""},
+		{"StatusNoContent", Const, 0, ""},
+		{"StatusNonAuthoritativeInfo", Const, 0, ""},
+		{"StatusNotAcceptable", Const, 0, ""},
+		{"StatusNotExtended", Const, 7, ""},
+		{"StatusNotFound", Const, 0, ""},
+		{"StatusNotImplemented", Const, 0, ""},
+		{"StatusNotModified", Const, 0, ""},
+		{"StatusOK", Const, 0, ""},
+		{"StatusPartialContent", Const, 0, ""},
+		{"StatusPaymentRequired", Const, 0, ""},
+		{"StatusPermanentRedirect", Const, 7, ""},
+		{"StatusPreconditionFailed", Const, 0, ""},
+		{"StatusPreconditionRequired", Const, 6, ""},
+		{"StatusProcessing", Const, 7, ""},
+		{"StatusProxyAuthRequired", Const, 0, ""},
+		{"StatusRequestEntityTooLarge", Const, 0, ""},
+		{"StatusRequestHeaderFieldsTooLarge", Const, 6, ""},
+		{"StatusRequestTimeout", Const, 0, ""},
+		{"StatusRequestURITooLong", Const, 0, ""},
+		{"StatusRequestedRangeNotSatisfiable", Const, 0, ""},
+		{"StatusResetContent", Const, 0, ""},
+		{"StatusSeeOther", Const, 0, ""},
+		{"StatusServiceUnavailable", Const, 0, ""},
+		{"StatusSwitchingProtocols", Const, 0, ""},
+		{"StatusTeapot", Const, 0, ""},
+		{"StatusTemporaryRedirect", Const, 0, ""},
+		{"StatusText", Func, 0, "func(code int) string"},
+		{"StatusTooEarly", Const, 12, ""},
+		{"StatusTooManyRequests", Const, 6, ""},
+		{"StatusUnauthorized", Const, 0, ""},
+		{"StatusUnavailableForLegalReasons", Const, 6, ""},
+		{"StatusUnprocessableEntity", Const, 7, ""},
+		{"StatusUnsupportedMediaType", Const, 0, ""},
+		{"StatusUpgradeRequired", Const, 7, ""},
+		{"StatusUseProxy", Const, 0, ""},
+		{"StatusVariantAlsoNegotiates", Const, 7, ""},
+		{"StripPrefix", Func, 0, "func(prefix string, h Handler) Handler"},
+		{"TimeFormat", Const, 0, ""},
+		{"TimeoutHandler", Func, 0, "func(h Handler, dt time.Duration, msg string) Handler"},
+		{"TrailerPrefix", Const, 8, ""},
+		{"Transport", Type, 0, ""},
+		{"Transport.Dial", Field, 0, ""},
+		{"Transport.DialContext", Field, 7, ""},
+		{"Transport.DialTLS", Field, 4, ""},
+		{"Transport.DialTLSContext", Field, 14, ""},
+		{"Transport.DisableCompression", Field, 0, ""},
+		{"Transport.DisableKeepAlives", Field, 0, ""},
+		{"Transport.ExpectContinueTimeout", Field, 6, ""},
+		{"Transport.ForceAttemptHTTP2", Field, 13, ""},
+		{"Transport.GetProxyConnectHeader", Field, 16, ""},
+		{"Transport.HTTP2", Field, 24, ""},
+		{"Transport.IdleConnTimeout", Field, 7, ""},
+		{"Transport.MaxConnsPerHost", Field, 11, ""},
+		{"Transport.MaxIdleConns", Field, 7, ""},
+		{"Transport.MaxIdleConnsPerHost", Field, 0, ""},
+		{"Transport.MaxResponseHeaderBytes", Field, 7, ""},
+		{"Transport.OnProxyConnectResponse", Field, 20, ""},
+		{"Transport.Protocols", Field, 24, ""},
+		{"Transport.Proxy", Field, 0, ""},
+		{"Transport.ProxyConnectHeader", Field, 8, ""},
+		{"Transport.ReadBufferSize", Field, 13, ""},
+		{"Transport.ResponseHeaderTimeout", Field, 1, ""},
+		{"Transport.TLSClientConfig", Field, 0, ""},
+		{"Transport.TLSHandshakeTimeout", Field, 3, ""},
+		{"Transport.TLSNextProto", Field, 6, ""},
+		{"Transport.WriteBufferSize", Field, 13, ""},
+	},
+	"net/http/cgi": {
+		{"(*Handler).ServeHTTP", Method, 0, ""},
+		{"Handler", Type, 0, ""},
+		{"Handler.Args", Field, 0, ""},
+		{"Handler.Dir", Field, 0, ""},
+		{"Handler.Env", Field, 0, ""},
+		{"Handler.InheritEnv", Field, 0, ""},
+		{"Handler.Logger", Field, 0, ""},
+		{"Handler.Path", Field, 0, ""},
+		{"Handler.PathLocationHandler", Field, 0, ""},
+		{"Handler.Root", Field, 0, ""},
+		{"Handler.Stderr", Field, 7, ""},
+		{"Request", Func, 0, "func() (*http.Request, error)"},
+		{"RequestFromMap", Func, 0, "func(params map[string]string) (*http.Request, error)"},
+		{"Serve", Func, 0, "func(handler http.Handler) error"},
+	},
+	"net/http/cookiejar": {
+		{"(*Jar).Cookies", Method, 1, ""},
+		{"(*Jar).SetCookies", Method, 1, ""},
+		{"Jar", Type, 1, ""},
+		{"New", Func, 1, "func(o *Options) (*Jar, error)"},
+		{"Options", Type, 1, ""},
+		{"Options.PublicSuffixList", Field, 1, ""},
+		{"PublicSuffixList", Type, 1, ""},
+	},
+	"net/http/fcgi": {
+		{"ErrConnClosed", Var, 5, ""},
+		{"ErrRequestAborted", Var, 5, ""},
+		{"ProcessEnv", Func, 9, "func(r *http.Request) map[string]string"},
+		{"Serve", Func, 0, "func(l net.Listener, handler http.Handler) error"},
+	},
+	"net/http/httptest": {
+		{"(*ResponseRecorder).Flush", Method, 0, ""},
+		{"(*ResponseRecorder).Header", Method, 0, ""},
+		{"(*ResponseRecorder).Result", Method, 7, ""},
+		{"(*ResponseRecorder).Write", Method, 0, ""},
+		{"(*ResponseRecorder).WriteHeader", Method, 0, ""},
+		{"(*ResponseRecorder).WriteString", Method, 6, ""},
+		{"(*Server).Certificate", Method, 9, ""},
+		{"(*Server).Client", Method, 9, ""},
+		{"(*Server).Close", Method, 0, ""},
+		{"(*Server).CloseClientConnections", Method, 0, ""},
+		{"(*Server).Start", Method, 0, ""},
+		{"(*Server).StartTLS", Method, 0, ""},
+		{"DefaultRemoteAddr", Const, 0, ""},
+		{"NewRecorder", Func, 0, "func() *ResponseRecorder"},
+		{"NewRequest", Func, 7, "func(method string, target string, body io.Reader) *http.Request"},
+		{"NewRequestWithContext", Func, 23, "func(ctx context.Context, method string, target string, body io.Reader) *http.Request"},
+		{"NewServer", Func, 0, "func(handler http.Handler) *Server"},
+		{"NewTLSServer", Func, 0, "func(handler http.Handler) *Server"},
+		{"NewUnstartedServer", Func, 0, "func(handler http.Handler) *Server"},
+		{"ResponseRecorder", Type, 0, ""},
+		{"ResponseRecorder.Body", Field, 0, ""},
+		{"ResponseRecorder.Code", Field, 0, ""},
+		{"ResponseRecorder.Flushed", Field, 0, ""},
+		{"ResponseRecorder.HeaderMap", Field, 0, ""},
+		{"Server", Type, 0, ""},
+		{"Server.Config", Field, 0, ""},
+		{"Server.EnableHTTP2", Field, 14, ""},
+		{"Server.Listener", Field, 0, ""},
+		{"Server.TLS", Field, 0, ""},
+		{"Server.URL", Field, 0, ""},
+	},
+	"net/http/httptrace": {
+		{"ClientTrace", Type, 7, ""},
+		{"ClientTrace.ConnectDone", Field, 7, ""},
+		{"ClientTrace.ConnectStart", Field, 7, ""},
+		{"ClientTrace.DNSDone", Field, 7, ""},
+		{"ClientTrace.DNSStart", Field, 7, ""},
+		{"ClientTrace.GetConn", Field, 7, ""},
+		{"ClientTrace.Got100Continue", Field, 7, ""},
+		{"ClientTrace.Got1xxResponse", Field, 11, ""},
+		{"ClientTrace.GotConn", Field, 7, ""},
+		{"ClientTrace.GotFirstResponseByte", Field, 7, ""},
+		{"ClientTrace.PutIdleConn", Field, 7, ""},
+		{"ClientTrace.TLSHandshakeDone", Field, 8, ""},
+		{"ClientTrace.TLSHandshakeStart", Field, 8, ""},
+		{"ClientTrace.Wait100Continue", Field, 7, ""},
+		{"ClientTrace.WroteHeaderField", Field, 11, ""},
+		{"ClientTrace.WroteHeaders", Field, 7, ""},
+		{"ClientTrace.WroteRequest", Field, 7, ""},
+		{"ContextClientTrace", Func, 7, "func(ctx context.Context) *ClientTrace"},
+		{"DNSDoneInfo", Type, 7, ""},
+		{"DNSDoneInfo.Addrs", Field, 7, ""},
+		{"DNSDoneInfo.Coalesced", Field, 7, ""},
+		{"DNSDoneInfo.Err", Field, 7, ""},
+		{"DNSStartInfo", Type, 7, ""},
+		{"DNSStartInfo.Host", Field, 7, ""},
+		{"GotConnInfo", Type, 7, ""},
+		{"GotConnInfo.Conn", Field, 7, ""},
+		{"GotConnInfo.IdleTime", Field, 7, ""},
+		{"GotConnInfo.Reused", Field, 7, ""},
+		{"GotConnInfo.WasIdle", Field, 7, ""},
+		{"WithClientTrace", Func, 7, "func(ctx context.Context, trace *ClientTrace) context.Context"},
+		{"WroteRequestInfo", Type, 7, ""},
+		{"WroteRequestInfo.Err", Field, 7, ""},
+	},
+	"net/http/httputil": {
+		{"(*ClientConn).Close", Method, 0, ""},
+		{"(*ClientConn).Do", Method, 0, ""},
+		{"(*ClientConn).Hijack", Method, 0, ""},
+		{"(*ClientConn).Pending", Method, 0, ""},
+		{"(*ClientConn).Read", Method, 0, ""},
+		{"(*ClientConn).Write", Method, 0, ""},
+		{"(*ProxyRequest).SetURL", Method, 20, ""},
+		{"(*ProxyRequest).SetXForwarded", Method, 20, ""},
+		{"(*ReverseProxy).ServeHTTP", Method, 0, ""},
+		{"(*ServerConn).Close", Method, 0, ""},
+		{"(*ServerConn).Hijack", Method, 0, ""},
+		{"(*ServerConn).Pending", Method, 0, ""},
+		{"(*ServerConn).Read", Method, 0, ""},
+		{"(*ServerConn).Write", Method, 0, ""},
+		{"BufferPool", Type, 6, ""},
+		{"ClientConn", Type, 0, ""},
+		{"DumpRequest", Func, 0, "func(req *http.Request, body bool) ([]byte, error)"},
+		{"DumpRequestOut", Func, 0, "func(req *http.Request, body bool) ([]byte, error)"},
+		{"DumpResponse", Func, 0, "func(resp *http.Response, body bool) ([]byte, error)"},
+		{"ErrClosed", Var, 0, ""},
+		{"ErrLineTooLong", Var, 0, ""},
+		{"ErrPersistEOF", Var, 0, ""},
+		{"ErrPipeline", Var, 0, ""},
+		{"NewChunkedReader", Func, 0, "func(r io.Reader) io.Reader"},
+		{"NewChunkedWriter", Func, 0, "func(w io.Writer) io.WriteCloser"},
+		{"NewClientConn", Func, 0, "func(c net.Conn, r *bufio.Reader) *ClientConn"},
+		{"NewProxyClientConn", Func, 0, "func(c net.Conn, r *bufio.Reader) *ClientConn"},
+		{"NewServerConn", Func, 0, "func(c net.Conn, r *bufio.Reader) *ServerConn"},
+		{"NewSingleHostReverseProxy", Func, 0, "func(target *url.URL) *ReverseProxy"},
+		{"ProxyRequest", Type, 20, ""},
+		{"ProxyRequest.In", Field, 20, ""},
+		{"ProxyRequest.Out", Field, 20, ""},
+		{"ReverseProxy", Type, 0, ""},
+		{"ReverseProxy.BufferPool", Field, 6, ""},
+		{"ReverseProxy.Director", Field, 0, ""},
+		{"ReverseProxy.ErrorHandler", Field, 11, ""},
+		{"ReverseProxy.ErrorLog", Field, 4, ""},
+		{"ReverseProxy.FlushInterval", Field, 0, ""},
+		{"ReverseProxy.ModifyResponse", Field, 8, ""},
+		{"ReverseProxy.Rewrite", Field, 20, ""},
+		{"ReverseProxy.Transport", Field, 0, ""},
+		{"ServerConn", Type, 0, ""},
+	},
+	"net/http/pprof": {
+		{"Cmdline", Func, 0, "func(w http.ResponseWriter, r *http.Request)"},
+		{"Handler", Func, 0, "func(name string) http.Handler"},
+		{"Index", Func, 0, "func(w http.ResponseWriter, r *http.Request)"},
+		{"Profile", Func, 0, "func(w http.ResponseWriter, r *http.Request)"},
+		{"Symbol", Func, 0, "func(w http.ResponseWriter, r *http.Request)"},
+		{"Trace", Func, 5, "func(w http.ResponseWriter, r *http.Request)"},
+	},
+	"net/mail": {
+		{"(*Address).String", Method, 0, ""},
+		{"(*AddressParser).Parse", Method, 5, ""},
+		{"(*AddressParser).ParseList", Method, 5, ""},
+		{"(Header).AddressList", Method, 0, ""},
+		{"(Header).Date", Method, 0, ""},
+		{"(Header).Get", Method, 0, ""},
+		{"Address", Type, 0, ""},
+		{"Address.Address", Field, 0, ""},
+		{"Address.Name", Field, 0, ""},
+		{"AddressParser", Type, 5, ""},
+		{"AddressParser.WordDecoder", Field, 5, ""},
+		{"ErrHeaderNotPresent", Var, 0, ""},
+		{"Header", Type, 0, ""},
+		{"Message", Type, 0, ""},
+		{"Message.Body", Field, 0, ""},
+		{"Message.Header", Field, 0, ""},
+		{"ParseAddress", Func, 1, "func(address string) (*Address, error)"},
+		{"ParseAddressList", Func, 1, "func(list string) ([]*Address, error)"},
+		{"ParseDate", Func, 8, "func(date string) (time.Time, error)"},
+		{"ReadMessage", Func, 0, "func(r io.Reader) (msg *Message, err error)"},
+	},
+	"net/netip": {
+		{"(*Addr).UnmarshalBinary", Method, 18, ""},
+		{"(*Addr).UnmarshalText", Method, 18, ""},
+		{"(*AddrPort).UnmarshalBinary", Method, 18, ""},
+		{"(*AddrPort).UnmarshalText", Method, 18, ""},
+		{"(*Prefix).UnmarshalBinary", Method, 18, ""},
+		{"(*Prefix).UnmarshalText", Method, 18, ""},
+		{"(Addr).AppendBinary", Method, 24, ""},
+		{"(Addr).AppendText", Method, 24, ""},
+		{"(Addr).AppendTo", Method, 18, ""},
+		{"(Addr).As16", Method, 18, ""},
+		{"(Addr).As4", Method, 18, ""},
+		{"(Addr).AsSlice", Method, 18, ""},
+		{"(Addr).BitLen", Method, 18, ""},
+		{"(Addr).Compare", Method, 18, ""},
+		{"(Addr).Is4", Method, 18, ""},
+		{"(Addr).Is4In6", Method, 18, ""},
+		{"(Addr).Is6", Method, 18, ""},
+		{"(Addr).IsGlobalUnicast", Method, 18, ""},
+		{"(Addr).IsInterfaceLocalMulticast", Method, 18, ""},
+		{"(Addr).IsLinkLocalMulticast", Method, 18, ""},
+		{"(Addr).IsLinkLocalUnicast", Method, 18, ""},
+		{"(Addr).IsLoopback", Method, 18, ""},
+		{"(Addr).IsMulticast", Method, 18, ""},
+		{"(Addr).IsPrivate", Method, 18, ""},
+		{"(Addr).IsUnspecified", Method, 18, ""},
+		{"(Addr).IsValid", Method, 18, ""},
+		{"(Addr).Less", Method, 18, ""},
+		{"(Addr).MarshalBinary", Method, 18, ""},
+		{"(Addr).MarshalText", Method, 18, ""},
+		{"(Addr).Next", Method, 18, ""},
+		{"(Addr).Prefix", Method, 18, ""},
+		{"(Addr).Prev", Method, 18, ""},
+		{"(Addr).String", Method, 18, ""},
+		{"(Addr).StringExpanded", Method, 18, ""},
+		{"(Addr).Unmap", Method, 18, ""},
+		{"(Addr).WithZone", Method, 18, ""},
+		{"(Addr).Zone", Method, 18, ""},
+		{"(AddrPort).Addr", Method, 18, ""},
+		{"(AddrPort).AppendBinary", Method, 24, ""},
+		{"(AddrPort).AppendText", Method, 24, ""},
+		{"(AddrPort).AppendTo", Method, 18, ""},
+		{"(AddrPort).Compare", Method, 22, ""},
+		{"(AddrPort).IsValid", Method, 18, ""},
+		{"(AddrPort).MarshalBinary", Method, 18, ""},
+		{"(AddrPort).MarshalText", Method, 18, ""},
+		{"(AddrPort).Port", Method, 18, ""},
+		{"(AddrPort).String", Method, 18, ""},
+		{"(Prefix).Addr", Method, 18, ""},
+		{"(Prefix).AppendBinary", Method, 24, ""},
+		{"(Prefix).AppendText", Method, 24, ""},
+		{"(Prefix).AppendTo", Method, 18, ""},
+		{"(Prefix).Bits", Method, 18, ""},
+		{"(Prefix).Contains", Method, 18, ""},
+		{"(Prefix).IsSingleIP", Method, 18, ""},
+		{"(Prefix).IsValid", Method, 18, ""},
+		{"(Prefix).MarshalBinary", Method, 18, ""},
+		{"(Prefix).MarshalText", Method, 18, ""},
+		{"(Prefix).Masked", Method, 18, ""},
+		{"(Prefix).Overlaps", Method, 18, ""},
+		{"(Prefix).String", Method, 18, ""},
+		{"Addr", Type, 18, ""},
+		{"AddrFrom16", Func, 18, "func(addr [16]byte) Addr"},
+		{"AddrFrom4", Func, 18, "func(addr [4]byte) Addr"},
+		{"AddrFromSlice", Func, 18, "func(slice []byte) (ip Addr, ok bool)"},
+		{"AddrPort", Type, 18, ""},
+		{"AddrPortFrom", Func, 18, "func(ip Addr, port uint16) AddrPort"},
+		{"IPv4Unspecified", Func, 18, "func() Addr"},
+		{"IPv6LinkLocalAllNodes", Func, 18, "func() Addr"},
+		{"IPv6LinkLocalAllRouters", Func, 20, "func() Addr"},
+		{"IPv6Loopback", Func, 20, "func() Addr"},
+		{"IPv6Unspecified", Func, 18, "func() Addr"},
+		{"MustParseAddr", Func, 18, "func(s string) Addr"},
+		{"MustParseAddrPort", Func, 18, "func(s string) AddrPort"},
+		{"MustParsePrefix", Func, 18, "func(s string) Prefix"},
+		{"ParseAddr", Func, 18, "func(s string) (Addr, error)"},
+		{"ParseAddrPort", Func, 18, "func(s string) (AddrPort, error)"},
+		{"ParsePrefix", Func, 18, "func(s string) (Prefix, error)"},
+		{"Prefix", Type, 18, ""},
+		{"PrefixFrom", Func, 18, "func(ip Addr, bits int) Prefix"},
+	},
+	"net/rpc": {
+		{"(*Client).Call", Method, 0, ""},
+		{"(*Client).Close", Method, 0, ""},
+		{"(*Client).Go", Method, 0, ""},
+		{"(*Server).Accept", Method, 0, ""},
+		{"(*Server).HandleHTTP", Method, 0, ""},
+		{"(*Server).Register", Method, 0, ""},
+		{"(*Server).RegisterName", Method, 0, ""},
+		{"(*Server).ServeCodec", Method, 0, ""},
+		{"(*Server).ServeConn", Method, 0, ""},
+		{"(*Server).ServeHTTP", Method, 0, ""},
+		{"(*Server).ServeRequest", Method, 0, ""},
+		{"(ServerError).Error", Method, 0, ""},
+		{"Accept", Func, 0, "func(lis net.Listener)"},
+		{"Call", Type, 0, ""},
+		{"Call.Args", Field, 0, ""},
+		{"Call.Done", Field, 0, ""},
+		{"Call.Error", Field, 0, ""},
+		{"Call.Reply", Field, 0, ""},
+		{"Call.ServiceMethod", Field, 0, ""},
+		{"Client", Type, 0, ""},
+		{"ClientCodec", Type, 0, ""},
+		{"DefaultDebugPath", Const, 0, ""},
+		{"DefaultRPCPath", Const, 0, ""},
+		{"DefaultServer", Var, 0, ""},
+		{"Dial", Func, 0, "func(network string, address string) (*Client, error)"},
+		{"DialHTTP", Func, 0, "func(network string, address string) (*Client, error)"},
+		{"DialHTTPPath", Func, 0, "func(network string, address string, path string) (*Client, error)"},
+		{"ErrShutdown", Var, 0, ""},
+		{"HandleHTTP", Func, 0, "func()"},
+		{"NewClient", Func, 0, "func(conn io.ReadWriteCloser) *Client"},
+		{"NewClientWithCodec", Func, 0, "func(codec ClientCodec) *Client"},
+		{"NewServer", Func, 0, "func() *Server"},
+		{"Register", Func, 0, "func(rcvr any) error"},
+		{"RegisterName", Func, 0, "func(name string, rcvr any) error"},
+		{"Request", Type, 0, ""},
+		{"Request.Seq", Field, 0, ""},
+		{"Request.ServiceMethod", Field, 0, ""},
+		{"Response", Type, 0, ""},
+		{"Response.Error", Field, 0, ""},
+		{"Response.Seq", Field, 0, ""},
+		{"Response.ServiceMethod", Field, 0, ""},
+		{"ServeCodec", Func, 0, "func(codec ServerCodec)"},
+		{"ServeConn", Func, 0, "func(conn io.ReadWriteCloser)"},
+		{"ServeRequest", Func, 0, "func(codec ServerCodec) error"},
+		{"Server", Type, 0, ""},
+		{"ServerCodec", Type, 0, ""},
+		{"ServerError", Type, 0, ""},
+	},
+	"net/rpc/jsonrpc": {
+		{"Dial", Func, 0, "func(network string, address string) (*rpc.Client, error)"},
+		{"NewClient", Func, 0, "func(conn io.ReadWriteCloser) *rpc.Client"},
+		{"NewClientCodec", Func, 0, "func(conn io.ReadWriteCloser) rpc.ClientCodec"},
+		{"NewServerCodec", Func, 0, "func(conn io.ReadWriteCloser) rpc.ServerCodec"},
+		{"ServeConn", Func, 0, "func(conn io.ReadWriteCloser)"},
+	},
+	"net/smtp": {
+		{"(*Client).Auth", Method, 0, ""},
+		{"(*Client).Close", Method, 2, ""},
+		{"(*Client).Data", Method, 0, ""},
+		{"(*Client).Extension", Method, 0, ""},
+		{"(*Client).Hello", Method, 1, ""},
+		{"(*Client).Mail", Method, 0, ""},
+		{"(*Client).Noop", Method, 10, ""},
+		{"(*Client).Quit", Method, 0, ""},
+		{"(*Client).Rcpt", Method, 0, ""},
+		{"(*Client).Reset", Method, 0, ""},
+		{"(*Client).StartTLS", Method, 0, ""},
+		{"(*Client).TLSConnectionState", Method, 5, ""},
+		{"(*Client).Verify", Method, 0, ""},
+		{"Auth", Type, 0, ""},
+		{"CRAMMD5Auth", Func, 0, "func(username string, secret string) Auth"},
+		{"Client", Type, 0, ""},
+		{"Client.Text", Field, 0, ""},
+		{"Dial", Func, 0, "func(addr string) (*Client, error)"},
+		{"NewClient", Func, 0, "func(conn net.Conn, host string) (*Client, error)"},
+		{"PlainAuth", Func, 0, "func(identity string, username string, password string, host string) Auth"},
+		{"SendMail", Func, 0, "func(addr string, a Auth, from string, to []string, msg []byte) error"},
+		{"ServerInfo", Type, 0, ""},
+		{"ServerInfo.Auth", Field, 0, ""},
+		{"ServerInfo.Name", Field, 0, ""},
+		{"ServerInfo.TLS", Field, 0, ""},
+	},
+	"net/textproto": {
+		{"(*Conn).Close", Method, 0, ""},
+		{"(*Conn).Cmd", Method, 0, ""},
+		{"(*Conn).DotReader", Method, 0, ""},
+		{"(*Conn).DotWriter", Method, 0, ""},
+		{"(*Conn).EndRequest", Method, 0, ""},
+		{"(*Conn).EndResponse", Method, 0, ""},
+		{"(*Conn).Next", Method, 0, ""},
+		{"(*Conn).PrintfLine", Method, 0, ""},
+		{"(*Conn).ReadCodeLine", Method, 0, ""},
+		{"(*Conn).ReadContinuedLine", Method, 0, ""},
+		{"(*Conn).ReadContinuedLineBytes", Method, 0, ""},
+		{"(*Conn).ReadDotBytes", Method, 0, ""},
+		{"(*Conn).ReadDotLines", Method, 0, ""},
+		{"(*Conn).ReadLine", Method, 0, ""},
+		{"(*Conn).ReadLineBytes", Method, 0, ""},
+		{"(*Conn).ReadMIMEHeader", Method, 0, ""},
+		{"(*Conn).ReadResponse", Method, 0, ""},
+		{"(*Conn).StartRequest", Method, 0, ""},
+		{"(*Conn).StartResponse", Method, 0, ""},
+		{"(*Error).Error", Method, 0, ""},
+		{"(*Pipeline).EndRequest", Method, 0, ""},
+		{"(*Pipeline).EndResponse", Method, 0, ""},
+		{"(*Pipeline).Next", Method, 0, ""},
+		{"(*Pipeline).StartRequest", Method, 0, ""},
+		{"(*Pipeline).StartResponse", Method, 0, ""},
+		{"(*Reader).DotReader", Method, 0, ""},
+		{"(*Reader).ReadCodeLine", Method, 0, ""},
+		{"(*Reader).ReadContinuedLine", Method, 0, ""},
+		{"(*Reader).ReadContinuedLineBytes", Method, 0, ""},
+		{"(*Reader).ReadDotBytes", Method, 0, ""},
+		{"(*Reader).ReadDotLines", Method, 0, ""},
+		{"(*Reader).ReadLine", Method, 0, ""},
+		{"(*Reader).ReadLineBytes", Method, 0, ""},
+		{"(*Reader).ReadMIMEHeader", Method, 0, ""},
+		{"(*Reader).ReadResponse", Method, 0, ""},
+		{"(*Writer).DotWriter", Method, 0, ""},
+		{"(*Writer).PrintfLine", Method, 0, ""},
+		{"(MIMEHeader).Add", Method, 0, ""},
+		{"(MIMEHeader).Del", Method, 0, ""},
+		{"(MIMEHeader).Get", Method, 0, ""},
+		{"(MIMEHeader).Set", Method, 0, ""},
+		{"(MIMEHeader).Values", Method, 14, ""},
+		{"(ProtocolError).Error", Method, 0, ""},
+		{"CanonicalMIMEHeaderKey", Func, 0, "func(s string) string"},
+		{"Conn", Type, 0, ""},
+		{"Conn.Pipeline", Field, 0, ""},
+		{"Conn.Reader", Field, 0, ""},
+		{"Conn.Writer", Field, 0, ""},
+		{"Dial", Func, 0, "func(network string, addr string) (*Conn, error)"},
+		{"Error", Type, 0, ""},
+		{"Error.Code", Field, 0, ""},
+		{"Error.Msg", Field, 0, ""},
+		{"MIMEHeader", Type, 0, ""},
+		{"NewConn", Func, 0, "func(conn io.ReadWriteCloser) *Conn"},
+		{"NewReader", Func, 0, "func(r *bufio.Reader) *Reader"},
+		{"NewWriter", Func, 0, "func(w *bufio.Writer) *Writer"},
+		{"Pipeline", Type, 0, ""},
+		{"ProtocolError", Type, 0, ""},
+		{"Reader", Type, 0, ""},
+		{"Reader.R", Field, 0, ""},
+		{"TrimBytes", Func, 1, "func(b []byte) []byte"},
+		{"TrimString", Func, 1, "func(s string) string"},
+		{"Writer", Type, 0, ""},
+		{"Writer.W", Field, 0, ""},
+	},
+	"net/url": {
+		{"(*Error).Error", Method, 0, ""},
+		{"(*Error).Temporary", Method, 6, ""},
+		{"(*Error).Timeout", Method, 6, ""},
+		{"(*Error).Unwrap", Method, 13, ""},
+		{"(*URL).AppendBinary", Method, 24, ""},
+		{"(*URL).EscapedFragment", Method, 15, ""},
+		{"(*URL).EscapedPath", Method, 5, ""},
+		{"(*URL).Hostname", Method, 8, ""},
+		{"(*URL).IsAbs", Method, 0, ""},
+		{"(*URL).JoinPath", Method, 19, ""},
+		{"(*URL).MarshalBinary", Method, 8, ""},
+		{"(*URL).Parse", Method, 0, ""},
+		{"(*URL).Port", Method, 8, ""},
+		{"(*URL).Query", Method, 0, ""},
+		{"(*URL).Redacted", Method, 15, ""},
+		{"(*URL).RequestURI", Method, 0, ""},
+		{"(*URL).ResolveReference", Method, 0, ""},
+		{"(*URL).String", Method, 0, ""},
+		{"(*URL).UnmarshalBinary", Method, 8, ""},
+		{"(*Userinfo).Password", Method, 0, ""},
+		{"(*Userinfo).String", Method, 0, ""},
+		{"(*Userinfo).Username", Method, 0, ""},
+		{"(EscapeError).Error", Method, 0, ""},
+		{"(InvalidHostError).Error", Method, 6, ""},
+		{"(Values).Add", Method, 0, ""},
+		{"(Values).Del", Method, 0, ""},
+		{"(Values).Encode", Method, 0, ""},
+		{"(Values).Get", Method, 0, ""},
+		{"(Values).Has", Method, 17, ""},
+		{"(Values).Set", Method, 0, ""},
+		{"Error", Type, 0, ""},
+		{"Error.Err", Field, 0, ""},
+		{"Error.Op", Field, 0, ""},
+		{"Error.URL", Field, 0, ""},
+		{"EscapeError", Type, 0, ""},
+		{"InvalidHostError", Type, 6, ""},
+		{"JoinPath", Func, 19, "func(base string, elem ...string) (result string, err error)"},
+		{"Parse", Func, 0, "func(rawURL string) (*URL, error)"},
+		{"ParseQuery", Func, 0, "func(query string) (Values, error)"},
+		{"ParseRequestURI", Func, 0, "func(rawURL string) (*URL, error)"},
+		{"PathEscape", Func, 8, "func(s string) string"},
+		{"PathUnescape", Func, 8, "func(s string) (string, error)"},
+		{"QueryEscape", Func, 0, "func(s string) string"},
+		{"QueryUnescape", Func, 0, "func(s string) (string, error)"},
+		{"URL", Type, 0, ""},
+		{"URL.ForceQuery", Field, 7, ""},
+		{"URL.Fragment", Field, 0, ""},
+		{"URL.Host", Field, 0, ""},
+		{"URL.OmitHost", Field, 19, ""},
+		{"URL.Opaque", Field, 0, ""},
+		{"URL.Path", Field, 0, ""},
+		{"URL.RawFragment", Field, 15, ""},
+		{"URL.RawPath", Field, 5, ""},
+		{"URL.RawQuery", Field, 0, ""},
+		{"URL.Scheme", Field, 0, ""},
+		{"URL.User", Field, 0, ""},
+		{"User", Func, 0, "func(username string) *Userinfo"},
+		{"UserPassword", Func, 0, "func(username string, password string) *Userinfo"},
+		{"Userinfo", Type, 0, ""},
+		{"Values", Type, 0, ""},
+	},
+	"os": {
+		{"(*File).Chdir", Method, 0, ""},
+		{"(*File).Chmod", Method, 0, ""},
+		{"(*File).Chown", Method, 0, ""},
+		{"(*File).Close", Method, 0, ""},
+		{"(*File).Fd", Method, 0, ""},
+		{"(*File).Name", Method, 0, ""},
+		{"(*File).Read", Method, 0, ""},
+		{"(*File).ReadAt", Method, 0, ""},
+		{"(*File).ReadDir", Method, 16, ""},
+		{"(*File).ReadFrom", Method, 15, ""},
+		{"(*File).Readdir", Method, 0, ""},
+		{"(*File).Readdirnames", Method, 0, ""},
+		{"(*File).Seek", Method, 0, ""},
+		{"(*File).SetDeadline", Method, 10, ""},
+		{"(*File).SetReadDeadline", Method, 10, ""},
+		{"(*File).SetWriteDeadline", Method, 10, ""},
+		{"(*File).Stat", Method, 0, ""},
+		{"(*File).Sync", Method, 0, ""},
+		{"(*File).SyscallConn", Method, 12, ""},
+		{"(*File).Truncate", Method, 0, ""},
+		{"(*File).Write", Method, 0, ""},
+		{"(*File).WriteAt", Method, 0, ""},
+		{"(*File).WriteString", Method, 0, ""},
+		{"(*File).WriteTo", Method, 22, ""},
+		{"(*LinkError).Error", Method, 0, ""},
+		{"(*LinkError).Unwrap", Method, 13, ""},
+		{"(*PathError).Error", Method, 0, ""},
+		{"(*PathError).Timeout", Method, 10, ""},
+		{"(*PathError).Unwrap", Method, 13, ""},
+		{"(*Process).Kill", Method, 0, ""},
+		{"(*Process).Release", Method, 0, ""},
+		{"(*Process).Signal", Method, 0, ""},
+		{"(*Process).Wait", Method, 0, ""},
+		{"(*ProcessState).ExitCode", Method, 12, ""},
+		{"(*ProcessState).Exited", Method, 0, ""},
+		{"(*ProcessState).Pid", Method, 0, ""},
+		{"(*ProcessState).String", Method, 0, ""},
+		{"(*ProcessState).Success", Method, 0, ""},
+		{"(*ProcessState).Sys", Method, 0, ""},
+		{"(*ProcessState).SysUsage", Method, 0, ""},
+		{"(*ProcessState).SystemTime", Method, 0, ""},
+		{"(*ProcessState).UserTime", Method, 0, ""},
+		{"(*Root).Chmod", Method, 25, ""},
+		{"(*Root).Chown", Method, 25, ""},
+		{"(*Root).Chtimes", Method, 25, ""},
+		{"(*Root).Close", Method, 24, ""},
+		{"(*Root).Create", Method, 24, ""},
+		{"(*Root).FS", Method, 24, ""},
+		{"(*Root).Lchown", Method, 25, ""},
+		{"(*Root).Link", Method, 25, ""},
+		{"(*Root).Lstat", Method, 24, ""},
+		{"(*Root).Mkdir", Method, 24, ""},
+		{"(*Root).Name", Method, 24, ""},
+		{"(*Root).Open", Method, 24, ""},
+		{"(*Root).OpenFile", Method, 24, ""},
+		{"(*Root).OpenRoot", Method, 24, ""},
+		{"(*Root).Readlink", Method, 25, ""},
+		{"(*Root).Remove", Method, 24, ""},
+		{"(*Root).Rename", Method, 25, ""},
+		{"(*Root).Stat", Method, 24, ""},
+		{"(*Root).Symlink", Method, 25, ""},
+		{"(*SyscallError).Error", Method, 0, ""},
+		{"(*SyscallError).Timeout", Method, 10, ""},
+		{"(*SyscallError).Unwrap", Method, 13, ""},
+		{"(FileMode).IsDir", Method, 0, ""},
+		{"(FileMode).IsRegular", Method, 1, ""},
+		{"(FileMode).Perm", Method, 0, ""},
+		{"(FileMode).String", Method, 0, ""},
+		{"Args", Var, 0, ""},
+		{"Chdir", Func, 0, "func(dir string) error"},
+		{"Chmod", Func, 0, "func(name string, mode FileMode) error"},
+		{"Chown", Func, 0, "func(name string, uid int, gid int) error"},
+		{"Chtimes", Func, 0, "func(name string, atime time.Time, mtime time.Time) error"},
+		{"Clearenv", Func, 0, "func()"},
+		{"CopyFS", Func, 23, "func(dir string, fsys fs.FS) error"},
+		{"Create", Func, 0, "func(name string) (*File, error)"},
+		{"CreateTemp", Func, 16, "func(dir string, pattern string) (*File, error)"},
+		{"DevNull", Const, 0, ""},
+		{"DirEntry", Type, 16, ""},
+		{"DirFS", Func, 16, "func(dir string) fs.FS"},
+		{"Environ", Func, 0, "func() []string"},
+		{"ErrClosed", Var, 8, ""},
+		{"ErrDeadlineExceeded", Var, 15, ""},
+		{"ErrExist", Var, 0, ""},
+		{"ErrInvalid", Var, 0, ""},
+		{"ErrNoDeadline", Var, 10, ""},
+		{"ErrNotExist", Var, 0, ""},
+		{"ErrPermission", Var, 0, ""},
+		{"ErrProcessDone", Var, 16, ""},
+		{"Executable", Func, 8, "func() (string, error)"},
+		{"Exit", Func, 0, "func(code int)"},
+		{"Expand", Func, 0, "func(s string, mapping func(string) string) string"},
+		{"ExpandEnv", Func, 0, "func(s string) string"},
+		{"File", Type, 0, ""},
+		{"FileInfo", Type, 0, ""},
+		{"FileMode", Type, 0, ""},
+		{"FindProcess", Func, 0, "func(pid int) (*Process, error)"},
+		{"Getegid", Func, 0, "func() int"},
+		{"Getenv", Func, 0, "func(key string) string"},
+		{"Geteuid", Func, 0, "func() int"},
+		{"Getgid", Func, 0, "func() int"},
+		{"Getgroups", Func, 0, "func() ([]int, error)"},
+		{"Getpagesize", Func, 0, "func() int"},
+		{"Getpid", Func, 0, "func() int"},
+		{"Getppid", Func, 0, "func() int"},
+		{"Getuid", Func, 0, "func() int"},
+		{"Getwd", Func, 0, "func() (dir string, err error)"},
+		{"Hostname", Func, 0, "func() (name string, err error)"},
+		{"Interrupt", Var, 0, ""},
+		{"IsExist", Func, 0, "func(err error) bool"},
+		{"IsNotExist", Func, 0, "func(err error) bool"},
+		{"IsPathSeparator", Func, 0, "func(c uint8) bool"},
+		{"IsPermission", Func, 0, "func(err error) bool"},
+		{"IsTimeout", Func, 10, "func(err error) bool"},
+		{"Kill", Var, 0, ""},
+		{"Lchown", Func, 0, "func(name string, uid int, gid int) error"},
+		{"Link", Func, 0, "func(oldname string, newname string) error"},
+		{"LinkError", Type, 0, ""},
+		{"LinkError.Err", Field, 0, ""},
+		{"LinkError.New", Field, 0, ""},
+		{"LinkError.Old", Field, 0, ""},
+		{"LinkError.Op", Field, 0, ""},
+		{"LookupEnv", Func, 5, "func(key string) (string, bool)"},
+		{"Lstat", Func, 0, "func(name string) (FileInfo, error)"},
+		{"Mkdir", Func, 0, "func(name string, perm FileMode) error"},
+		{"MkdirAll", Func, 0, "func(path string, perm FileMode) error"},
+		{"MkdirTemp", Func, 16, "func(dir string, pattern string) (string, error)"},
+		{"ModeAppend", Const, 0, ""},
+		{"ModeCharDevice", Const, 0, ""},
+		{"ModeDevice", Const, 0, ""},
+		{"ModeDir", Const, 0, ""},
+		{"ModeExclusive", Const, 0, ""},
+		{"ModeIrregular", Const, 11, ""},
+		{"ModeNamedPipe", Const, 0, ""},
+		{"ModePerm", Const, 0, ""},
+		{"ModeSetgid", Const, 0, ""},
+		{"ModeSetuid", Const, 0, ""},
+		{"ModeSocket", Const, 0, ""},
+		{"ModeSticky", Const, 0, ""},
+		{"ModeSymlink", Const, 0, ""},
+		{"ModeTemporary", Const, 0, ""},
+		{"ModeType", Const, 0, ""},
+		{"NewFile", Func, 0, "func(fd uintptr, name string) *File"},
+		{"NewSyscallError", Func, 0, "func(syscall string, err error) error"},
+		{"O_APPEND", Const, 0, ""},
+		{"O_CREATE", Const, 0, ""},
+		{"O_EXCL", Const, 0, ""},
+		{"O_RDONLY", Const, 0, ""},
+		{"O_RDWR", Const, 0, ""},
+		{"O_SYNC", Const, 0, ""},
+		{"O_TRUNC", Const, 0, ""},
+		{"O_WRONLY", Const, 0, ""},
+		{"Open", Func, 0, "func(name string) (*File, error)"},
+		{"OpenFile", Func, 0, "func(name string, flag int, perm FileMode) (*File, error)"},
+		{"OpenInRoot", Func, 24, "func(dir string, name string) (*File, error)"},
+		{"OpenRoot", Func, 24, "func(name string) (*Root, error)"},
+		{"PathError", Type, 0, ""},
+		{"PathError.Err", Field, 0, ""},
+		{"PathError.Op", Field, 0, ""},
+		{"PathError.Path", Field, 0, ""},
+		{"PathListSeparator", Const, 0, ""},
+		{"PathSeparator", Const, 0, ""},
+		{"Pipe", Func, 0, "func() (r *File, w *File, err error)"},
+		{"ProcAttr", Type, 0, ""},
+		{"ProcAttr.Dir", Field, 0, ""},
+		{"ProcAttr.Env", Field, 0, ""},
+		{"ProcAttr.Files", Field, 0, ""},
+		{"ProcAttr.Sys", Field, 0, ""},
+		{"Process", Type, 0, ""},
+		{"Process.Pid", Field, 0, ""},
+		{"ProcessState", Type, 0, ""},
+		{"ReadDir", Func, 16, "func(name string) ([]DirEntry, error)"},
+		{"ReadFile", Func, 16, "func(name string) ([]byte, error)"},
+		{"Readlink", Func, 0, "func(name string) (string, error)"},
+		{"Remove", Func, 0, "func(name string) error"},
+		{"RemoveAll", Func, 0, "func(path string) error"},
+		{"Rename", Func, 0, "func(oldpath string, newpath string) error"},
+		{"Root", Type, 24, ""},
+		{"SEEK_CUR", Const, 0, ""},
+		{"SEEK_END", Const, 0, ""},
+		{"SEEK_SET", Const, 0, ""},
+		{"SameFile", Func, 0, "func(fi1 FileInfo, fi2 FileInfo) bool"},
+		{"Setenv", Func, 0, "func(key string, value string) error"},
+		{"Signal", Type, 0, ""},
+		{"StartProcess", Func, 0, "func(name string, argv []string, attr *ProcAttr) (*Process, error)"},
+		{"Stat", Func, 0, "func(name string) (FileInfo, error)"},
+		{"Stderr", Var, 0, ""},
+		{"Stdin", Var, 0, ""},
+		{"Stdout", Var, 0, ""},
+		{"Symlink", Func, 0, "func(oldname string, newname string) error"},
+		{"SyscallError", Type, 0, ""},
+		{"SyscallError.Err", Field, 0, ""},
+		{"SyscallError.Syscall", Field, 0, ""},
+		{"TempDir", Func, 0, "func() string"},
+		{"Truncate", Func, 0, "func(name string, size int64) error"},
+		{"Unsetenv", Func, 4, "func(key string) error"},
+		{"UserCacheDir", Func, 11, "func() (string, error)"},
+		{"UserConfigDir", Func, 13, "func() (string, error)"},
+		{"UserHomeDir", Func, 12, "func() (string, error)"},
+		{"WriteFile", Func, 16, "func(name string, data []byte, perm FileMode) error"},
+	},
+	"os/exec": {
+		{"(*Cmd).CombinedOutput", Method, 0, ""},
+		{"(*Cmd).Environ", Method, 19, ""},
+		{"(*Cmd).Output", Method, 0, ""},
+		{"(*Cmd).Run", Method, 0, ""},
+		{"(*Cmd).Start", Method, 0, ""},
+		{"(*Cmd).StderrPipe", Method, 0, ""},
+		{"(*Cmd).StdinPipe", Method, 0, ""},
+		{"(*Cmd).StdoutPipe", Method, 0, ""},
+		{"(*Cmd).String", Method, 13, ""},
+		{"(*Cmd).Wait", Method, 0, ""},
+		{"(*Error).Error", Method, 0, ""},
+		{"(*Error).Unwrap", Method, 13, ""},
+		{"(*ExitError).Error", Method, 0, ""},
+		{"(ExitError).ExitCode", Method, 12, ""},
+		{"(ExitError).Exited", Method, 0, ""},
+		{"(ExitError).Pid", Method, 0, ""},
+		{"(ExitError).String", Method, 0, ""},
+		{"(ExitError).Success", Method, 0, ""},
+		{"(ExitError).Sys", Method, 0, ""},
+		{"(ExitError).SysUsage", Method, 0, ""},
+		{"(ExitError).SystemTime", Method, 0, ""},
+		{"(ExitError).UserTime", Method, 0, ""},
+		{"Cmd", Type, 0, ""},
+		{"Cmd.Args", Field, 0, ""},
+		{"Cmd.Cancel", Field, 20, ""},
+		{"Cmd.Dir", Field, 0, ""},
+		{"Cmd.Env", Field, 0, ""},
+		{"Cmd.Err", Field, 19, ""},
+		{"Cmd.ExtraFiles", Field, 0, ""},
+		{"Cmd.Path", Field, 0, ""},
+		{"Cmd.Process", Field, 0, ""},
+		{"Cmd.ProcessState", Field, 0, ""},
+		{"Cmd.Stderr", Field, 0, ""},
+		{"Cmd.Stdin", Field, 0, ""},
+		{"Cmd.Stdout", Field, 0, ""},
+		{"Cmd.SysProcAttr", Field, 0, ""},
+		{"Cmd.WaitDelay", Field, 20, ""},
+		{"Command", Func, 0, "func(name string, arg ...string) *Cmd"},
+		{"CommandContext", Func, 7, "func(ctx context.Context, name string, arg ...string) *Cmd"},
+		{"ErrDot", Var, 19, ""},
+		{"ErrNotFound", Var, 0, ""},
+		{"ErrWaitDelay", Var, 20, ""},
+		{"Error", Type, 0, ""},
+		{"Error.Err", Field, 0, ""},
+		{"Error.Name", Field, 0, ""},
+		{"ExitError", Type, 0, ""},
+		{"ExitError.ProcessState", Field, 0, ""},
+		{"ExitError.Stderr", Field, 6, ""},
+		{"LookPath", Func, 0, "func(file string) (string, error)"},
+	},
+	"os/signal": {
+		{"Ignore", Func, 5, "func(sig ...os.Signal)"},
+		{"Ignored", Func, 11, "func(sig os.Signal) bool"},
+		{"Notify", Func, 0, "func(c chan<- os.Signal, sig ...os.Signal)"},
+		{"NotifyContext", Func, 16, "func(parent context.Context, signals ...os.Signal) (ctx context.Context, stop context.CancelFunc)"},
+		{"Reset", Func, 5, "func(sig ...os.Signal)"},
+		{"Stop", Func, 1, "func(c chan<- os.Signal)"},
+	},
+	"os/user": {
+		{"(*User).GroupIds", Method, 7, ""},
+		{"(UnknownGroupError).Error", Method, 7, ""},
+		{"(UnknownGroupIdError).Error", Method, 7, ""},
+		{"(UnknownUserError).Error", Method, 0, ""},
+		{"(UnknownUserIdError).Error", Method, 0, ""},
+		{"Current", Func, 0, "func() (*User, error)"},
+		{"Group", Type, 7, ""},
+		{"Group.Gid", Field, 7, ""},
+		{"Group.Name", Field, 7, ""},
+		{"Lookup", Func, 0, "func(username string) (*User, error)"},
+		{"LookupGroup", Func, 7, "func(name string) (*Group, error)"},
+		{"LookupGroupId", Func, 7, "func(gid string) (*Group, error)"},
+		{"LookupId", Func, 0, "func(uid string) (*User, error)"},
+		{"UnknownGroupError", Type, 7, ""},
+		{"UnknownGroupIdError", Type, 7, ""},
+		{"UnknownUserError", Type, 0, ""},
+		{"UnknownUserIdError", Type, 0, ""},
+		{"User", Type, 0, ""},
+		{"User.Gid", Field, 0, ""},
+		{"User.HomeDir", Field, 0, ""},
+		{"User.Name", Field, 0, ""},
+		{"User.Uid", Field, 0, ""},
+		{"User.Username", Field, 0, ""},
+	},
+	"path": {
+		{"Base", Func, 0, "func(path string) string"},
+		{"Clean", Func, 0, "func(path string) string"},
+		{"Dir", Func, 0, "func(path string) string"},
+		{"ErrBadPattern", Var, 0, ""},
+		{"Ext", Func, 0, "func(path string) string"},
+		{"IsAbs", Func, 0, "func(path string) bool"},
+		{"Join", Func, 0, "func(elem ...string) string"},
+		{"Match", Func, 0, "func(pattern string, name string) (matched bool, err error)"},
+		{"Split", Func, 0, "func(path string) (dir string, file string)"},
+	},
+	"path/filepath": {
+		{"Abs", Func, 0, "func(path string) (string, error)"},
+		{"Base", Func, 0, "func(path string) string"},
+		{"Clean", Func, 0, "func(path string) string"},
+		{"Dir", Func, 0, "func(path string) string"},
+		{"ErrBadPattern", Var, 0, ""},
+		{"EvalSymlinks", Func, 0, "func(path string) (string, error)"},
+		{"Ext", Func, 0, "func(path string) string"},
+		{"FromSlash", Func, 0, "func(path string) string"},
+		{"Glob", Func, 0, "func(pattern string) (matches []string, err error)"},
+		{"HasPrefix", Func, 0, "func(p string, prefix string) bool"},
+		{"IsAbs", Func, 0, "func(path string) bool"},
+		{"IsLocal", Func, 20, "func(path string) bool"},
+		{"Join", Func, 0, "func(elem ...string) string"},
+		{"ListSeparator", Const, 0, ""},
+		{"Localize", Func, 23, "func(path string) (string, error)"},
+		{"Match", Func, 0, "func(pattern string, name string) (matched bool, err error)"},
+		{"Rel", Func, 0, "func(basepath string, targpath string) (string, error)"},
+		{"Separator", Const, 0, ""},
+		{"SkipAll", Var, 20, ""},
+		{"SkipDir", Var, 0, ""},
+		{"Split", Func, 0, "func(path string) (dir string, file string)"},
+		{"SplitList", Func, 0, "func(path string) []string"},
+		{"ToSlash", Func, 0, "func(path string) string"},
+		{"VolumeName", Func, 0, "func(path string) string"},
+		{"Walk", Func, 0, "func(root string, fn WalkFunc) error"},
+		{"WalkDir", Func, 16, "func(root string, fn fs.WalkDirFunc) error"},
+		{"WalkFunc", Type, 0, ""},
+	},
+	"plugin": {
+		{"(*Plugin).Lookup", Method, 8, ""},
+		{"Open", Func, 8, "func(path string) (*Plugin, error)"},
+		{"Plugin", Type, 8, ""},
+		{"Symbol", Type, 8, ""},
+	},
+	"reflect": {
+		{"(*MapIter).Key", Method, 12, ""},
+		{"(*MapIter).Next", Method, 12, ""},
+		{"(*MapIter).Reset", Method, 18, ""},
+		{"(*MapIter).Value", Method, 12, ""},
+		{"(*ValueError).Error", Method, 0, ""},
+		{"(ChanDir).String", Method, 0, ""},
+		{"(Kind).String", Method, 0, ""},
+		{"(Method).IsExported", Method, 17, ""},
+		{"(StructField).IsExported", Method, 17, ""},
+		{"(StructTag).Get", Method, 0, ""},
+		{"(StructTag).Lookup", Method, 7, ""},
+		{"(Value).Addr", Method, 0, ""},
+		{"(Value).Bool", Method, 0, ""},
+		{"(Value).Bytes", Method, 0, ""},
+		{"(Value).Call", Method, 0, ""},
+		{"(Value).CallSlice", Method, 0, ""},
+		{"(Value).CanAddr", Method, 0, ""},
+		{"(Value).CanComplex", Method, 18, ""},
+		{"(Value).CanConvert", Method, 17, ""},
+		{"(Value).CanFloat", Method, 18, ""},
+		{"(Value).CanInt", Method, 18, ""},
+		{"(Value).CanInterface", Method, 0, ""},
+		{"(Value).CanSet", Method, 0, ""},
+		{"(Value).CanUint", Method, 18, ""},
+		{"(Value).Cap", Method, 0, ""},
+		{"(Value).Clear", Method, 21, ""},
+		{"(Value).Close", Method, 0, ""},
+		{"(Value).Comparable", Method, 20, ""},
+		{"(Value).Complex", Method, 0, ""},
+		{"(Value).Convert", Method, 1, ""},
+		{"(Value).Elem", Method, 0, ""},
+		{"(Value).Equal", Method, 20, ""},
+		{"(Value).Field", Method, 0, ""},
+		{"(Value).FieldByIndex", Method, 0, ""},
+		{"(Value).FieldByIndexErr", Method, 18, ""},
+		{"(Value).FieldByName", Method, 0, ""},
+		{"(Value).FieldByNameFunc", Method, 0, ""},
+		{"(Value).Float", Method, 0, ""},
+		{"(Value).Grow", Method, 20, ""},
+		{"(Value).Index", Method, 0, ""},
+		{"(Value).Int", Method, 0, ""},
+		{"(Value).Interface", Method, 0, ""},
+		{"(Value).InterfaceData", Method, 0, ""},
+		{"(Value).IsNil", Method, 0, ""},
+		{"(Value).IsValid", Method, 0, ""},
+		{"(Value).IsZero", Method, 13, ""},
+		{"(Value).Kind", Method, 0, ""},
+		{"(Value).Len", Method, 0, ""},
+		{"(Value).MapIndex", Method, 0, ""},
+		{"(Value).MapKeys", Method, 0, ""},
+		{"(Value).MapRange", Method, 12, ""},
+		{"(Value).Method", Method, 0, ""},
+		{"(Value).MethodByName", Method, 0, ""},
+		{"(Value).NumField", Method, 0, ""},
+		{"(Value).NumMethod", Method, 0, ""},
+		{"(Value).OverflowComplex", Method, 0, ""},
+		{"(Value).OverflowFloat", Method, 0, ""},
+		{"(Value).OverflowInt", Method, 0, ""},
+		{"(Value).OverflowUint", Method, 0, ""},
+		{"(Value).Pointer", Method, 0, ""},
+		{"(Value).Recv", Method, 0, ""},
+		{"(Value).Send", Method, 0, ""},
+		{"(Value).Seq", Method, 23, ""},
+		{"(Value).Seq2", Method, 23, ""},
+		{"(Value).Set", Method, 0, ""},
+		{"(Value).SetBool", Method, 0, ""},
+		{"(Value).SetBytes", Method, 0, ""},
+		{"(Value).SetCap", Method, 2, ""},
+		{"(Value).SetComplex", Method, 0, ""},
+		{"(Value).SetFloat", Method, 0, ""},
+		{"(Value).SetInt", Method, 0, ""},
+		{"(Value).SetIterKey", Method, 18, ""},
+		{"(Value).SetIterValue", Method, 18, ""},
+		{"(Value).SetLen", Method, 0, ""},
+		{"(Value).SetMapIndex", Method, 0, ""},
+		{"(Value).SetPointer", Method, 0, ""},
+		{"(Value).SetString", Method, 0, ""},
+		{"(Value).SetUint", Method, 0, ""},
+		{"(Value).SetZero", Method, 20, ""},
+		{"(Value).Slice", Method, 0, ""},
+		{"(Value).Slice3", Method, 2, ""},
+		{"(Value).String", Method, 0, ""},
+		{"(Value).TryRecv", Method, 0, ""},
+		{"(Value).TrySend", Method, 0, ""},
+		{"(Value).Type", Method, 0, ""},
+		{"(Value).Uint", Method, 0, ""},
+		{"(Value).UnsafeAddr", Method, 0, ""},
+		{"(Value).UnsafePointer", Method, 18, ""},
+		{"Append", Func, 0, "func(s Value, x ...Value) Value"},
+		{"AppendSlice", Func, 0, "func(s Value, t Value) Value"},
+		{"Array", Const, 0, ""},
+		{"ArrayOf", Func, 5, "func(length int, elem Type) Type"},
+		{"Bool", Const, 0, ""},
+		{"BothDir", Const, 0, ""},
+		{"Chan", Const, 0, ""},
+		{"ChanDir", Type, 0, ""},
+		{"ChanOf", Func, 1, "func(dir ChanDir, t Type) Type"},
+		{"Complex128", Const, 0, ""},
+		{"Complex64", Const, 0, ""},
+		{"Copy", Func, 0, "func(dst Value, src Value) int"},
+		{"DeepEqual", Func, 0, "func(x any, y any) bool"},
+		{"Float32", Const, 0, ""},
+		{"Float64", Const, 0, ""},
+		{"Func", Const, 0, ""},
+		{"FuncOf", Func, 5, "func(in []Type, out []Type, variadic bool) Type"},
+		{"Indirect", Func, 0, "func(v Value) Value"},
+		{"Int", Const, 0, ""},
+		{"Int16", Const, 0, ""},
+		{"Int32", Const, 0, ""},
+		{"Int64", Const, 0, ""},
+		{"Int8", Const, 0, ""},
+		{"Interface", Const, 0, ""},
+		{"Invalid", Const, 0, ""},
+		{"Kind", Type, 0, ""},
+		{"MakeChan", Func, 0, "func(typ Type, buffer int) Value"},
+		{"MakeFunc", Func, 1, "func(typ Type, fn func(args []Value) (results []Value)) Value"},
+		{"MakeMap", Func, 0, "func(typ Type) Value"},
+		{"MakeMapWithSize", Func, 9, "func(typ Type, n int) Value"},
+		{"MakeSlice", Func, 0, "func(typ Type, len int, cap int) Value"},
+		{"Map", Const, 0, ""},
+		{"MapIter", Type, 12, ""},
+		{"MapOf", Func, 1, "func(key Type, elem Type) Type"},
+		{"Method", Type, 0, ""},
+		{"Method.Func", Field, 0, ""},
+		{"Method.Index", Field, 0, ""},
+		{"Method.Name", Field, 0, ""},
+		{"Method.PkgPath", Field, 0, ""},
+		{"Method.Type", Field, 0, ""},
+		{"New", Func, 0, "func(typ Type) Value"},
+		{"NewAt", Func, 0, "func(typ Type, p unsafe.Pointer) Value"},
+		{"Pointer", Const, 18, ""},
+		{"PointerTo", Func, 18, "func(t Type) Type"},
+		{"Ptr", Const, 0, ""},
+		{"PtrTo", Func, 0, "func(t Type) Type"},
+		{"RecvDir", Const, 0, ""},
+		{"Select", Func, 1, "func(cases []SelectCase) (chosen int, recv Value, recvOK bool)"},
+		{"SelectCase", Type, 1, ""},
+		{"SelectCase.Chan", Field, 1, ""},
+		{"SelectCase.Dir", Field, 1, ""},
+		{"SelectCase.Send", Field, 1, ""},
+		{"SelectDefault", Const, 1, ""},
+		{"SelectDir", Type, 1, ""},
+		{"SelectRecv", Const, 1, ""},
+		{"SelectSend", Const, 1, ""},
+		{"SendDir", Const, 0, ""},
+		{"Slice", Const, 0, ""},
+		{"SliceAt", Func, 23, "func(typ Type, p unsafe.Pointer, n int) Value"},
+		{"SliceHeader", Type, 0, ""},
+		{"SliceHeader.Cap", Field, 0, ""},
+		{"SliceHeader.Data", Field, 0, ""},
+		{"SliceHeader.Len", Field, 0, ""},
+		{"SliceOf", Func, 1, "func(t Type) Type"},
+		{"String", Const, 0, ""},
+		{"StringHeader", Type, 0, ""},
+		{"StringHeader.Data", Field, 0, ""},
+		{"StringHeader.Len", Field, 0, ""},
+		{"Struct", Const, 0, ""},
+		{"StructField", Type, 0, ""},
+		{"StructField.Anonymous", Field, 0, ""},
+		{"StructField.Index", Field, 0, ""},
+		{"StructField.Name", Field, 0, ""},
+		{"StructField.Offset", Field, 0, ""},
+		{"StructField.PkgPath", Field, 0, ""},
+		{"StructField.Tag", Field, 0, ""},
+		{"StructField.Type", Field, 0, ""},
+		{"StructOf", Func, 7, "func(fields []StructField) Type"},
+		{"StructTag", Type, 0, ""},
+		{"Swapper", Func, 8, "func(slice any) func(i int, j int)"},
+		{"Type", Type, 0, ""},
+		{"TypeFor", Func, 22, "func[T any]() Type"},
+		{"TypeOf", Func, 0, "func(i any) Type"},
+		{"Uint", Const, 0, ""},
+		{"Uint16", Const, 0, ""},
+		{"Uint32", Const, 0, ""},
+		{"Uint64", Const, 0, ""},
+		{"Uint8", Const, 0, ""},
+		{"Uintptr", Const, 0, ""},
+		{"UnsafePointer", Const, 0, ""},
+		{"Value", Type, 0, ""},
+		{"ValueError", Type, 0, ""},
+		{"ValueError.Kind", Field, 0, ""},
+		{"ValueError.Method", Field, 0, ""},
+		{"ValueOf", Func, 0, "func(i any) Value"},
+		{"VisibleFields", Func, 17, "func(t Type) []StructField"},
+		{"Zero", Func, 0, "func(typ Type) Value"},
+	},
+	"regexp": {
+		{"(*Regexp).AppendText", Method, 24, ""},
+		{"(*Regexp).Copy", Method, 6, ""},
+		{"(*Regexp).Expand", Method, 0, ""},
+		{"(*Regexp).ExpandString", Method, 0, ""},
+		{"(*Regexp).Find", Method, 0, ""},
+		{"(*Regexp).FindAll", Method, 0, ""},
+		{"(*Regexp).FindAllIndex", Method, 0, ""},
+		{"(*Regexp).FindAllString", Method, 0, ""},
+		{"(*Regexp).FindAllStringIndex", Method, 0, ""},
+		{"(*Regexp).FindAllStringSubmatch", Method, 0, ""},
+		{"(*Regexp).FindAllStringSubmatchIndex", Method, 0, ""},
+		{"(*Regexp).FindAllSubmatch", Method, 0, ""},
+		{"(*Regexp).FindAllSubmatchIndex", Method, 0, ""},
+		{"(*Regexp).FindIndex", Method, 0, ""},
+		{"(*Regexp).FindReaderIndex", Method, 0, ""},
+		{"(*Regexp).FindReaderSubmatchIndex", Method, 0, ""},
+		{"(*Regexp).FindString", Method, 0, ""},
+		{"(*Regexp).FindStringIndex", Method, 0, ""},
+		{"(*Regexp).FindStringSubmatch", Method, 0, ""},
+		{"(*Regexp).FindStringSubmatchIndex", Method, 0, ""},
+		{"(*Regexp).FindSubmatch", Method, 0, ""},
+		{"(*Regexp).FindSubmatchIndex", Method, 0, ""},
+		{"(*Regexp).LiteralPrefix", Method, 0, ""},
+		{"(*Regexp).Longest", Method, 1, ""},
+		{"(*Regexp).MarshalText", Method, 21, ""},
+		{"(*Regexp).Match", Method, 0, ""},
+		{"(*Regexp).MatchReader", Method, 0, ""},
+		{"(*Regexp).MatchString", Method, 0, ""},
+		{"(*Regexp).NumSubexp", Method, 0, ""},
+		{"(*Regexp).ReplaceAll", Method, 0, ""},
+		{"(*Regexp).ReplaceAllFunc", Method, 0, ""},
+		{"(*Regexp).ReplaceAllLiteral", Method, 0, ""},
+		{"(*Regexp).ReplaceAllLiteralString", Method, 0, ""},
+		{"(*Regexp).ReplaceAllString", Method, 0, ""},
+		{"(*Regexp).ReplaceAllStringFunc", Method, 0, ""},
+		{"(*Regexp).Split", Method, 1, ""},
+		{"(*Regexp).String", Method, 0, ""},
+		{"(*Regexp).SubexpIndex", Method, 15, ""},
+		{"(*Regexp).SubexpNames", Method, 0, ""},
+		{"(*Regexp).UnmarshalText", Method, 21, ""},
+		{"Compile", Func, 0, "func(expr string) (*Regexp, error)"},
+		{"CompilePOSIX", Func, 0, "func(expr string) (*Regexp, error)"},
+		{"Match", Func, 0, "func(pattern string, b []byte) (matched bool, err error)"},
+		{"MatchReader", Func, 0, "func(pattern string, r io.RuneReader) (matched bool, err error)"},
+		{"MatchString", Func, 0, "func(pattern string, s string) (matched bool, err error)"},
+		{"MustCompile", Func, 0, "func(str string) *Regexp"},
+		{"MustCompilePOSIX", Func, 0, "func(str string) *Regexp"},
+		{"QuoteMeta", Func, 0, "func(s string) string"},
+		{"Regexp", Type, 0, ""},
+	},
+	"regexp/syntax": {
+		{"(*Error).Error", Method, 0, ""},
+		{"(*Inst).MatchEmptyWidth", Method, 0, ""},
+		{"(*Inst).MatchRune", Method, 0, ""},
+		{"(*Inst).MatchRunePos", Method, 3, ""},
+		{"(*Inst).String", Method, 0, ""},
+		{"(*Prog).Prefix", Method, 0, ""},
+		{"(*Prog).StartCond", Method, 0, ""},
+		{"(*Prog).String", Method, 0, ""},
+		{"(*Regexp).CapNames", Method, 0, ""},
+		{"(*Regexp).Equal", Method, 0, ""},
+		{"(*Regexp).MaxCap", Method, 0, ""},
+		{"(*Regexp).Simplify", Method, 0, ""},
+		{"(*Regexp).String", Method, 0, ""},
+		{"(ErrorCode).String", Method, 0, ""},
+		{"(InstOp).String", Method, 3, ""},
+		{"(Op).String", Method, 11, ""},
+		{"ClassNL", Const, 0, ""},
+		{"Compile", Func, 0, "func(re *Regexp) (*Prog, error)"},
+		{"DotNL", Const, 0, ""},
+		{"EmptyBeginLine", Const, 0, ""},
+		{"EmptyBeginText", Const, 0, ""},
+		{"EmptyEndLine", Const, 0, ""},
+		{"EmptyEndText", Const, 0, ""},
+		{"EmptyNoWordBoundary", Const, 0, ""},
+		{"EmptyOp", Type, 0, ""},
+		{"EmptyOpContext", Func, 0, "func(r1 rune, r2 rune) EmptyOp"},
+		{"EmptyWordBoundary", Const, 0, ""},
+		{"ErrInternalError", Const, 0, ""},
+		{"ErrInvalidCharClass", Const, 0, ""},
+		{"ErrInvalidCharRange", Const, 0, ""},
+		{"ErrInvalidEscape", Const, 0, ""},
+		{"ErrInvalidNamedCapture", Const, 0, ""},
+		{"ErrInvalidPerlOp", Const, 0, ""},
+		{"ErrInvalidRepeatOp", Const, 0, ""},
+		{"ErrInvalidRepeatSize", Const, 0, ""},
+		{"ErrInvalidUTF8", Const, 0, ""},
+		{"ErrLarge", Const, 20, ""},
+		{"ErrMissingBracket", Const, 0, ""},
+		{"ErrMissingParen", Const, 0, ""},
+		{"ErrMissingRepeatArgument", Const, 0, ""},
+		{"ErrNestingDepth", Const, 19, ""},
+		{"ErrTrailingBackslash", Const, 0, ""},
+		{"ErrUnexpectedParen", Const, 1, ""},
+		{"Error", Type, 0, ""},
+		{"Error.Code", Field, 0, ""},
+		{"Error.Expr", Field, 0, ""},
+		{"ErrorCode", Type, 0, ""},
+		{"Flags", Type, 0, ""},
+		{"FoldCase", Const, 0, ""},
+		{"Inst", Type, 0, ""},
+		{"Inst.Arg", Field, 0, ""},
+		{"Inst.Op", Field, 0, ""},
+		{"Inst.Out", Field, 0, ""},
+		{"Inst.Rune", Field, 0, ""},
+		{"InstAlt", Const, 0, ""},
+		{"InstAltMatch", Const, 0, ""},
+		{"InstCapture", Const, 0, ""},
+		{"InstEmptyWidth", Const, 0, ""},
+		{"InstFail", Const, 0, ""},
+		{"InstMatch", Const, 0, ""},
+		{"InstNop", Const, 0, ""},
+		{"InstOp", Type, 0, ""},
+		{"InstRune", Const, 0, ""},
+		{"InstRune1", Const, 0, ""},
+		{"InstRuneAny", Const, 0, ""},
+		{"InstRuneAnyNotNL", Const, 0, ""},
+		{"IsWordChar", Func, 0, "func(r rune) bool"},
+		{"Literal", Const, 0, ""},
+		{"MatchNL", Const, 0, ""},
+		{"NonGreedy", Const, 0, ""},
+		{"OneLine", Const, 0, ""},
+		{"Op", Type, 0, ""},
+		{"OpAlternate", Const, 0, ""},
+		{"OpAnyChar", Const, 0, ""},
+		{"OpAnyCharNotNL", Const, 0, ""},
+		{"OpBeginLine", Const, 0, ""},
+		{"OpBeginText", Const, 0, ""},
+		{"OpCapture", Const, 0, ""},
+		{"OpCharClass", Const, 0, ""},
+		{"OpConcat", Const, 0, ""},
+		{"OpEmptyMatch", Const, 0, ""},
+		{"OpEndLine", Const, 0, ""},
+		{"OpEndText", Const, 0, ""},
+		{"OpLiteral", Const, 0, ""},
+		{"OpNoMatch", Const, 0, ""},
+		{"OpNoWordBoundary", Const, 0, ""},
+		{"OpPlus", Const, 0, ""},
+		{"OpQuest", Const, 0, ""},
+		{"OpRepeat", Const, 0, ""},
+		{"OpStar", Const, 0, ""},
+		{"OpWordBoundary", Const, 0, ""},
+		{"POSIX", Const, 0, ""},
+		{"Parse", Func, 0, "func(s string, flags Flags) (*Regexp, error)"},
+		{"Perl", Const, 0, ""},
+		{"PerlX", Const, 0, ""},
+		{"Prog", Type, 0, ""},
+		{"Prog.Inst", Field, 0, ""},
+		{"Prog.NumCap", Field, 0, ""},
+		{"Prog.Start", Field, 0, ""},
+		{"Regexp", Type, 0, ""},
+		{"Regexp.Cap", Field, 0, ""},
+		{"Regexp.Flags", Field, 0, ""},
+		{"Regexp.Max", Field, 0, ""},
+		{"Regexp.Min", Field, 0, ""},
+		{"Regexp.Name", Field, 0, ""},
+		{"Regexp.Op", Field, 0, ""},
+		{"Regexp.Rune", Field, 0, ""},
+		{"Regexp.Rune0", Field, 0, ""},
+		{"Regexp.Sub", Field, 0, ""},
+		{"Regexp.Sub0", Field, 0, ""},
+		{"Simple", Const, 0, ""},
+		{"UnicodeGroups", Const, 0, ""},
+		{"WasDollar", Const, 0, ""},
+	},
+	"runtime": {
+		{"(*BlockProfileRecord).Stack", Method, 1, ""},
+		{"(*Frames).Next", Method, 7, ""},
+		{"(*Func).Entry", Method, 0, ""},
+		{"(*Func).FileLine", Method, 0, ""},
+		{"(*Func).Name", Method, 0, ""},
+		{"(*MemProfileRecord).InUseBytes", Method, 0, ""},
+		{"(*MemProfileRecord).InUseObjects", Method, 0, ""},
+		{"(*MemProfileRecord).Stack", Method, 0, ""},
+		{"(*PanicNilError).Error", Method, 21, ""},
+		{"(*PanicNilError).RuntimeError", Method, 21, ""},
+		{"(*Pinner).Pin", Method, 21, ""},
+		{"(*Pinner).Unpin", Method, 21, ""},
+		{"(*StackRecord).Stack", Method, 0, ""},
+		{"(*TypeAssertionError).Error", Method, 0, ""},
+		{"(*TypeAssertionError).RuntimeError", Method, 0, ""},
+		{"(Cleanup).Stop", Method, 24, ""},
+		{"AddCleanup", Func, 24, "func[T, S any](ptr *T, cleanup func(S), arg S) Cleanup"},
+		{"BlockProfile", Func, 1, "func(p []BlockProfileRecord) (n int, ok bool)"},
+		{"BlockProfileRecord", Type, 1, ""},
+		{"BlockProfileRecord.Count", Field, 1, ""},
+		{"BlockProfileRecord.Cycles", Field, 1, ""},
+		{"BlockProfileRecord.StackRecord", Field, 1, ""},
+		{"Breakpoint", Func, 0, "func()"},
+		{"CPUProfile", Func, 0, "func() []byte"},
+		{"Caller", Func, 0, "func(skip int) (pc uintptr, file string, line int, ok bool)"},
+		{"Callers", Func, 0, "func(skip int, pc []uintptr) int"},
+		{"CallersFrames", Func, 7, "func(callers []uintptr) *Frames"},
+		{"Cleanup", Type, 24, ""},
+		{"Compiler", Const, 0, ""},
+		{"Error", Type, 0, ""},
+		{"Frame", Type, 7, ""},
+		{"Frame.Entry", Field, 7, ""},
+		{"Frame.File", Field, 7, ""},
+		{"Frame.Func", Field, 7, ""},
+		{"Frame.Function", Field, 7, ""},
+		{"Frame.Line", Field, 7, ""},
+		{"Frame.PC", Field, 7, ""},
+		{"Frames", Type, 7, ""},
+		{"Func", Type, 0, ""},
+		{"FuncForPC", Func, 0, "func(pc uintptr) *Func"},
+		{"GC", Func, 0, "func()"},
+		{"GOARCH", Const, 0, ""},
+		{"GOMAXPROCS", Func, 0, "func(n int) int"},
+		{"GOOS", Const, 0, ""},
+		{"GOROOT", Func, 0, "func() string"},
+		{"Goexit", Func, 0, "func()"},
+		{"GoroutineProfile", Func, 0, "func(p []StackRecord) (n int, ok bool)"},
+		{"Gosched", Func, 0, "func()"},
+		{"KeepAlive", Func, 7, "func(x any)"},
+		{"LockOSThread", Func, 0, "func()"},
+		{"MemProfile", Func, 0, "func(p []MemProfileRecord, inuseZero bool) (n int, ok bool)"},
+		{"MemProfileRate", Var, 0, ""},
+		{"MemProfileRecord", Type, 0, ""},
+		{"MemProfileRecord.AllocBytes", Field, 0, ""},
+		{"MemProfileRecord.AllocObjects", Field, 0, ""},
+		{"MemProfileRecord.FreeBytes", Field, 0, ""},
+		{"MemProfileRecord.FreeObjects", Field, 0, ""},
+		{"MemProfileRecord.Stack0", Field, 0, ""},
+		{"MemStats", Type, 0, ""},
+		{"MemStats.Alloc", Field, 0, ""},
+		{"MemStats.BuckHashSys", Field, 0, ""},
+		{"MemStats.BySize", Field, 0, ""},
+		{"MemStats.DebugGC", Field, 0, ""},
+		{"MemStats.EnableGC", Field, 0, ""},
+		{"MemStats.Frees", Field, 0, ""},
+		{"MemStats.GCCPUFraction", Field, 5, ""},
+		{"MemStats.GCSys", Field, 2, ""},
+		{"MemStats.HeapAlloc", Field, 0, ""},
+		{"MemStats.HeapIdle", Field, 0, ""},
+		{"MemStats.HeapInuse", Field, 0, ""},
+		{"MemStats.HeapObjects", Field, 0, ""},
+		{"MemStats.HeapReleased", Field, 0, ""},
+		{"MemStats.HeapSys", Field, 0, ""},
+		{"MemStats.LastGC", Field, 0, ""},
+		{"MemStats.Lookups", Field, 0, ""},
+		{"MemStats.MCacheInuse", Field, 0, ""},
+		{"MemStats.MCacheSys", Field, 0, ""},
+		{"MemStats.MSpanInuse", Field, 0, ""},
+		{"MemStats.MSpanSys", Field, 0, ""},
+		{"MemStats.Mallocs", Field, 0, ""},
+		{"MemStats.NextGC", Field, 0, ""},
+		{"MemStats.NumForcedGC", Field, 8, ""},
+		{"MemStats.NumGC", Field, 0, ""},
+		{"MemStats.OtherSys", Field, 2, ""},
+		{"MemStats.PauseEnd", Field, 4, ""},
+		{"MemStats.PauseNs", Field, 0, ""},
+		{"MemStats.PauseTotalNs", Field, 0, ""},
+		{"MemStats.StackInuse", Field, 0, ""},
+		{"MemStats.StackSys", Field, 0, ""},
+		{"MemStats.Sys", Field, 0, ""},
+		{"MemStats.TotalAlloc", Field, 0, ""},
+		{"MutexProfile", Func, 8, "func(p []BlockProfileRecord) (n int, ok bool)"},
+		{"NumCPU", Func, 0, "func() int"},
+		{"NumCgoCall", Func, 0, "func() int64"},
+		{"NumGoroutine", Func, 0, "func() int"},
+		{"PanicNilError", Type, 21, ""},
+		{"Pinner", Type, 21, ""},
+		{"ReadMemStats", Func, 0, "func(m *MemStats)"},
+		{"ReadTrace", Func, 5, "func() []byte"},
+		{"SetBlockProfileRate", Func, 1, "func(rate int)"},
+		{"SetCPUProfileRate", Func, 0, "func(hz int)"},
+		{"SetCgoTraceback", Func, 7, "func(version int, traceback unsafe.Pointer, context unsafe.Pointer, symbolizer unsafe.Pointer)"},
+		{"SetFinalizer", Func, 0, "func(obj any, finalizer any)"},
+		{"SetMutexProfileFraction", Func, 8, "func(rate int) int"},
+		{"Stack", Func, 0, "func(buf []byte, all bool) int"},
+		{"StackRecord", Type, 0, ""},
+		{"StackRecord.Stack0", Field, 0, ""},
+		{"StartTrace", Func, 5, "func() error"},
+		{"StopTrace", Func, 5, "func()"},
+		{"ThreadCreateProfile", Func, 0, "func(p []StackRecord) (n int, ok bool)"},
+		{"TypeAssertionError", Type, 0, ""},
+		{"UnlockOSThread", Func, 0, "func()"},
+		{"Version", Func, 0, "func() string"},
+	},
+	"runtime/cgo": {
+		{"(Handle).Delete", Method, 17, ""},
+		{"(Handle).Value", Method, 17, ""},
+		{"Handle", Type, 17, ""},
+		{"Incomplete", Type, 20, ""},
+		{"NewHandle", Func, 17, ""},
+	},
+	"runtime/coverage": {
+		{"ClearCounters", Func, 20, "func() error"},
+		{"WriteCounters", Func, 20, "func(w io.Writer) error"},
+		{"WriteCountersDir", Func, 20, "func(dir string) error"},
+		{"WriteMeta", Func, 20, "func(w io.Writer) error"},
+		{"WriteMetaDir", Func, 20, "func(dir string) error"},
+	},
+	"runtime/debug": {
+		{"(*BuildInfo).String", Method, 18, ""},
+		{"BuildInfo", Type, 12, ""},
+		{"BuildInfo.Deps", Field, 12, ""},
+		{"BuildInfo.GoVersion", Field, 18, ""},
+		{"BuildInfo.Main", Field, 12, ""},
+		{"BuildInfo.Path", Field, 12, ""},
+		{"BuildInfo.Settings", Field, 18, ""},
+		{"BuildSetting", Type, 18, ""},
+		{"BuildSetting.Key", Field, 18, ""},
+		{"BuildSetting.Value", Field, 18, ""},
+		{"CrashOptions", Type, 23, ""},
+		{"FreeOSMemory", Func, 1, "func()"},
+		{"GCStats", Type, 1, ""},
+		{"GCStats.LastGC", Field, 1, ""},
+		{"GCStats.NumGC", Field, 1, ""},
+		{"GCStats.Pause", Field, 1, ""},
+		{"GCStats.PauseEnd", Field, 4, ""},
+		{"GCStats.PauseQuantiles", Field, 1, ""},
+		{"GCStats.PauseTotal", Field, 1, ""},
+		{"Module", Type, 12, ""},
+		{"Module.Path", Field, 12, ""},
+		{"Module.Replace", Field, 12, ""},
+		{"Module.Sum", Field, 12, ""},
+		{"Module.Version", Field, 12, ""},
+		{"ParseBuildInfo", Func, 18, "func(data string) (bi *BuildInfo, err error)"},
+		{"PrintStack", Func, 0, "func()"},
+		{"ReadBuildInfo", Func, 12, "func() (info *BuildInfo, ok bool)"},
+		{"ReadGCStats", Func, 1, "func(stats *GCStats)"},
+		{"SetCrashOutput", Func, 23, "func(f *os.File, opts CrashOptions) error"},
+		{"SetGCPercent", Func, 1, "func(percent int) int"},
+		{"SetMaxStack", Func, 2, "func(bytes int) int"},
+		{"SetMaxThreads", Func, 2, "func(threads int) int"},
+		{"SetMemoryLimit", Func, 19, "func(limit int64) int64"},
+		{"SetPanicOnFault", Func, 3, "func(enabled bool) bool"},
+		{"SetTraceback", Func, 6, "func(level string)"},
+		{"Stack", Func, 0, "func() []byte"},
+		{"WriteHeapDump", Func, 3, "func(fd uintptr)"},
+	},
+	"runtime/metrics": {
+		{"(Value).Float64", Method, 16, ""},
+		{"(Value).Float64Histogram", Method, 16, ""},
+		{"(Value).Kind", Method, 16, ""},
+		{"(Value).Uint64", Method, 16, ""},
+		{"All", Func, 16, "func() []Description"},
+		{"Description", Type, 16, ""},
+		{"Description.Cumulative", Field, 16, ""},
+		{"Description.Description", Field, 16, ""},
+		{"Description.Kind", Field, 16, ""},
+		{"Description.Name", Field, 16, ""},
+		{"Float64Histogram", Type, 16, ""},
+		{"Float64Histogram.Buckets", Field, 16, ""},
+		{"Float64Histogram.Counts", Field, 16, ""},
+		{"KindBad", Const, 16, ""},
+		{"KindFloat64", Const, 16, ""},
+		{"KindFloat64Histogram", Const, 16, ""},
+		{"KindUint64", Const, 16, ""},
+		{"Read", Func, 16, "func(m []Sample)"},
+		{"Sample", Type, 16, ""},
+		{"Sample.Name", Field, 16, ""},
+		{"Sample.Value", Field, 16, ""},
+		{"Value", Type, 16, ""},
+		{"ValueKind", Type, 16, ""},
+	},
+	"runtime/pprof": {
+		{"(*Profile).Add", Method, 0, ""},
+		{"(*Profile).Count", Method, 0, ""},
+		{"(*Profile).Name", Method, 0, ""},
+		{"(*Profile).Remove", Method, 0, ""},
+		{"(*Profile).WriteTo", Method, 0, ""},
+		{"Do", Func, 9, "func(ctx context.Context, labels LabelSet, f func(context.Context))"},
+		{"ForLabels", Func, 9, "func(ctx context.Context, f func(key string, value string) bool)"},
+		{"Label", Func, 9, "func(ctx context.Context, key string) (string, bool)"},
+		{"LabelSet", Type, 9, ""},
+		{"Labels", Func, 9, "func(args ...string) LabelSet"},
+		{"Lookup", Func, 0, "func(name string) *Profile"},
+		{"NewProfile", Func, 0, "func(name string) *Profile"},
+		{"Profile", Type, 0, ""},
+		{"Profiles", Func, 0, "func() []*Profile"},
+		{"SetGoroutineLabels", Func, 9, "func(ctx context.Context)"},
+		{"StartCPUProfile", Func, 0, "func(w io.Writer) error"},
+		{"StopCPUProfile", Func, 0, "func()"},
+		{"WithLabels", Func, 9, "func(ctx context.Context, labels LabelSet) context.Context"},
+		{"WriteHeapProfile", Func, 0, "func(w io.Writer) error"},
+	},
+	"runtime/trace": {
+		{"(*Region).End", Method, 11, ""},
+		{"(*Task).End", Method, 11, ""},
+		{"IsEnabled", Func, 11, "func() bool"},
+		{"Log", Func, 11, "func(ctx context.Context, category string, message string)"},
+		{"Logf", Func, 11, "func(ctx context.Context, category string, format string, args ...any)"},
+		{"NewTask", Func, 11, "func(pctx context.Context, taskType string) (ctx context.Context, task *Task)"},
+		{"Region", Type, 11, ""},
+		{"Start", Func, 5, "func(w io.Writer) error"},
+		{"StartRegion", Func, 11, "func(ctx context.Context, regionType string) *Region"},
+		{"Stop", Func, 5, "func()"},
+		{"Task", Type, 11, ""},
+		{"WithRegion", Func, 11, "func(ctx context.Context, regionType string, fn func())"},
+	},
+	"slices": {
+		{"All", Func, 23, "func[Slice ~[]E, E any](s Slice) iter.Seq2[int, E]"},
+		{"AppendSeq", Func, 23, "func[Slice ~[]E, E any](s Slice, seq iter.Seq[E]) Slice"},
+		{"Backward", Func, 23, "func[Slice ~[]E, E any](s Slice) iter.Seq2[int, E]"},
+		{"BinarySearch", Func, 21, "func[S ~[]E, E cmp.Ordered](x S, target E) (int, bool)"},
+		{"BinarySearchFunc", Func, 21, "func[S ~[]E, E, T any](x S, target T, cmp func(E, T) int) (int, bool)"},
+		{"Chunk", Func, 23, "func[Slice ~[]E, E any](s Slice, n int) iter.Seq[Slice]"},
+		{"Clip", Func, 21, "func[S ~[]E, E any](s S) S"},
+		{"Clone", Func, 21, "func[S ~[]E, E any](s S) S"},
+		{"Collect", Func, 23, "func[E any](seq iter.Seq[E]) []E"},
+		{"Compact", Func, 21, "func[S ~[]E, E comparable](s S) S"},
+		{"CompactFunc", Func, 21, "func[S ~[]E, E any](s S, eq func(E, E) bool) S"},
+		{"Compare", Func, 21, "func[S ~[]E, E cmp.Ordered](s1 S, s2 S) int"},
+		{"CompareFunc", Func, 21, "func[S1 ~[]E1, S2 ~[]E2, E1, E2 any](s1 S1, s2 S2, cmp func(E1, E2) int) int"},
+		{"Concat", Func, 22, "func[S ~[]E, E any](slices ...S) S"},
+		{"Contains", Func, 21, "func[S ~[]E, E comparable](s S, v E) bool"},
+		{"ContainsFunc", Func, 21, "func[S ~[]E, E any](s S, f func(E) bool) bool"},
+		{"Delete", Func, 21, "func[S ~[]E, E any](s S, i int, j int) S"},
+		{"DeleteFunc", Func, 21, "func[S ~[]E, E any](s S, del func(E) bool) S"},
+		{"Equal", Func, 21, "func[S ~[]E, E comparable](s1 S, s2 S) bool"},
+		{"EqualFunc", Func, 21, "func[S1 ~[]E1, S2 ~[]E2, E1, E2 any](s1 S1, s2 S2, eq func(E1, E2) bool) bool"},
+		{"Grow", Func, 21, "func[S ~[]E, E any](s S, n int) S"},
+		{"Index", Func, 21, "func[S ~[]E, E comparable](s S, v E) int"},
+		{"IndexFunc", Func, 21, "func[S ~[]E, E any](s S, f func(E) bool) int"},
+		{"Insert", Func, 21, "func[S ~[]E, E any](s S, i int, v ...E) S"},
+		{"IsSorted", Func, 21, "func[S ~[]E, E cmp.Ordered](x S) bool"},
+		{"IsSortedFunc", Func, 21, "func[S ~[]E, E any](x S, cmp func(a E, b E) int) bool"},
+		{"Max", Func, 21, "func[S ~[]E, E cmp.Ordered](x S) E"},
+		{"MaxFunc", Func, 21, "func[S ~[]E, E any](x S, cmp func(a E, b E) int) E"},
+		{"Min", Func, 21, "func[S ~[]E, E cmp.Ordered](x S) E"},
+		{"MinFunc", Func, 21, "func[S ~[]E, E any](x S, cmp func(a E, b E) int) E"},
+		{"Repeat", Func, 23, "func[S ~[]E, E any](x S, count int) S"},
+		{"Replace", Func, 21, "func[S ~[]E, E any](s S, i int, j int, v ...E) S"},
+		{"Reverse", Func, 21, "func[S ~[]E, E any](s S)"},
+		{"Sort", Func, 21, "func[S ~[]E, E cmp.Ordered](x S)"},
+		{"SortFunc", Func, 21, "func[S ~[]E, E any](x S, cmp func(a E, b E) int)"},
+		{"SortStableFunc", Func, 21, "func[S ~[]E, E any](x S, cmp func(a E, b E) int)"},
+		{"Sorted", Func, 23, "func[E cmp.Ordered](seq iter.Seq[E]) []E"},
+		{"SortedFunc", Func, 23, "func[E any](seq iter.Seq[E], cmp func(E, E) int) []E"},
+		{"SortedStableFunc", Func, 23, "func[E any](seq iter.Seq[E], cmp func(E, E) int) []E"},
+		{"Values", Func, 23, "func[Slice ~[]E, E any](s Slice) iter.Seq[E]"},
+	},
+	"sort": {
+		{"(Float64Slice).Len", Method, 0, ""},
+		{"(Float64Slice).Less", Method, 0, ""},
+		{"(Float64Slice).Search", Method, 0, ""},
+		{"(Float64Slice).Sort", Method, 0, ""},
+		{"(Float64Slice).Swap", Method, 0, ""},
+		{"(IntSlice).Len", Method, 0, ""},
+		{"(IntSlice).Less", Method, 0, ""},
+		{"(IntSlice).Search", Method, 0, ""},
+		{"(IntSlice).Sort", Method, 0, ""},
+		{"(IntSlice).Swap", Method, 0, ""},
+		{"(StringSlice).Len", Method, 0, ""},
+		{"(StringSlice).Less", Method, 0, ""},
+		{"(StringSlice).Search", Method, 0, ""},
+		{"(StringSlice).Sort", Method, 0, ""},
+		{"(StringSlice).Swap", Method, 0, ""},
+		{"Find", Func, 19, "func(n int, cmp func(int) int) (i int, found bool)"},
+		{"Float64Slice", Type, 0, ""},
+		{"Float64s", Func, 0, "func(x []float64)"},
+		{"Float64sAreSorted", Func, 0, "func(x []float64) bool"},
+		{"IntSlice", Type, 0, ""},
+		{"Interface", Type, 0, ""},
+		{"Ints", Func, 0, "func(x []int)"},
+		{"IntsAreSorted", Func, 0, "func(x []int) bool"},
+		{"IsSorted", Func, 0, "func(data Interface) bool"},
+		{"Reverse", Func, 1, "func(data Interface) Interface"},
+		{"Search", Func, 0, "func(n int, f func(int) bool) int"},
+		{"SearchFloat64s", Func, 0, "func(a []float64, x float64) int"},
+		{"SearchInts", Func, 0, "func(a []int, x int) int"},
+		{"SearchStrings", Func, 0, "func(a []string, x string) int"},
+		{"Slice", Func, 8, "func(x any, less func(i int, j int) bool)"},
+		{"SliceIsSorted", Func, 8, "func(x any, less func(i int, j int) bool) bool"},
+		{"SliceStable", Func, 8, "func(x any, less func(i int, j int) bool)"},
+		{"Sort", Func, 0, "func(data Interface)"},
+		{"Stable", Func, 2, "func(data Interface)"},
+		{"StringSlice", Type, 0, ""},
+		{"Strings", Func, 0, "func(x []string)"},
+		{"StringsAreSorted", Func, 0, "func(x []string) bool"},
+	},
+	"strconv": {
+		{"(*NumError).Error", Method, 0, ""},
+		{"(*NumError).Unwrap", Method, 14, ""},
+		{"AppendBool", Func, 0, "func(dst []byte, b bool) []byte"},
+		{"AppendFloat", Func, 0, "func(dst []byte, f float64, fmt byte, prec int, bitSize int) []byte"},
+		{"AppendInt", Func, 0, "func(dst []byte, i int64, base int) []byte"},
+		{"AppendQuote", Func, 0, "func(dst []byte, s string) []byte"},
+		{"AppendQuoteRune", Func, 0, "func(dst []byte, r rune) []byte"},
+		{"AppendQuoteRuneToASCII", Func, 0, "func(dst []byte, r rune) []byte"},
+		{"AppendQuoteRuneToGraphic", Func, 6, "func(dst []byte, r rune) []byte"},
+		{"AppendQuoteToASCII", Func, 0, "func(dst []byte, s string) []byte"},
+		{"AppendQuoteToGraphic", Func, 6, "func(dst []byte, s string) []byte"},
+		{"AppendUint", Func, 0, "func(dst []byte, i uint64, base int) []byte"},
+		{"Atoi", Func, 0, "func(s string) (int, error)"},
+		{"CanBackquote", Func, 0, "func(s string) bool"},
+		{"ErrRange", Var, 0, ""},
+		{"ErrSyntax", Var, 0, ""},
+		{"FormatBool", Func, 0, "func(b bool) string"},
+		{"FormatComplex", Func, 15, "func(c complex128, fmt byte, prec int, bitSize int) string"},
+		{"FormatFloat", Func, 0, "func(f float64, fmt byte, prec int, bitSize int) string"},
+		{"FormatInt", Func, 0, "func(i int64, base int) string"},
+		{"FormatUint", Func, 0, "func(i uint64, base int) string"},
+		{"IntSize", Const, 0, ""},
+		{"IsGraphic", Func, 6, "func(r rune) bool"},
+		{"IsPrint", Func, 0, "func(r rune) bool"},
+		{"Itoa", Func, 0, "func(i int) string"},
+		{"NumError", Type, 0, ""},
+		{"NumError.Err", Field, 0, ""},
+		{"NumError.Func", Field, 0, ""},
+		{"NumError.Num", Field, 0, ""},
+		{"ParseBool", Func, 0, "func(str string) (bool, error)"},
+		{"ParseComplex", Func, 15, "func(s string, bitSize int) (complex128, error)"},
+		{"ParseFloat", Func, 0, "func(s string, bitSize int) (float64, error)"},
+		{"ParseInt", Func, 0, "func(s string, base int, bitSize int) (i int64, err error)"},
+		{"ParseUint", Func, 0, "func(s string, base int, bitSize int) (uint64, error)"},
+		{"Quote", Func, 0, "func(s string) string"},
+		{"QuoteRune", Func, 0, "func(r rune) string"},
+		{"QuoteRuneToASCII", Func, 0, "func(r rune) string"},
+		{"QuoteRuneToGraphic", Func, 6, "func(r rune) string"},
+		{"QuoteToASCII", Func, 0, "func(s string) string"},
+		{"QuoteToGraphic", Func, 6, "func(s string) string"},
+		{"QuotedPrefix", Func, 17, "func(s string) (string, error)"},
+		{"Unquote", Func, 0, "func(s string) (string, error)"},
+		{"UnquoteChar", Func, 0, "func(s string, quote byte) (value rune, multibyte bool, tail string, err error)"},
+	},
+	"strings": {
+		{"(*Builder).Cap", Method, 12, ""},
+		{"(*Builder).Grow", Method, 10, ""},
+		{"(*Builder).Len", Method, 10, ""},
+		{"(*Builder).Reset", Method, 10, ""},
+		{"(*Builder).String", Method, 10, ""},
+		{"(*Builder).Write", Method, 10, ""},
+		{"(*Builder).WriteByte", Method, 10, ""},
+		{"(*Builder).WriteRune", Method, 10, ""},
+		{"(*Builder).WriteString", Method, 10, ""},
+		{"(*Reader).Len", Method, 0, ""},
+		{"(*Reader).Read", Method, 0, ""},
+		{"(*Reader).ReadAt", Method, 0, ""},
+		{"(*Reader).ReadByte", Method, 0, ""},
+		{"(*Reader).ReadRune", Method, 0, ""},
+		{"(*Reader).Reset", Method, 7, ""},
+		{"(*Reader).Seek", Method, 0, ""},
+		{"(*Reader).Size", Method, 5, ""},
+		{"(*Reader).UnreadByte", Method, 0, ""},
+		{"(*Reader).UnreadRune", Method, 0, ""},
+		{"(*Reader).WriteTo", Method, 1, ""},
+		{"(*Replacer).Replace", Method, 0, ""},
+		{"(*Replacer).WriteString", Method, 0, ""},
+		{"Builder", Type, 10, ""},
+		{"Clone", Func, 18, "func(s string) string"},
+		{"Compare", Func, 5, "func(a string, b string) int"},
+		{"Contains", Func, 0, "func(s string, substr string) bool"},
+		{"ContainsAny", Func, 0, "func(s string, chars string) bool"},
+		{"ContainsFunc", Func, 21, "func(s string, f func(rune) bool) bool"},
+		{"ContainsRune", Func, 0, "func(s string, r rune) bool"},
+		{"Count", Func, 0, "func(s string, substr string) int"},
+		{"Cut", Func, 18, "func(s string, sep string) (before string, after string, found bool)"},
+		{"CutPrefix", Func, 20, "func(s string, prefix string) (after string, found bool)"},
+		{"CutSuffix", Func, 20, "func(s string, suffix string) (before string, found bool)"},
+		{"EqualFold", Func, 0, "func(s string, t string) bool"},
+		{"Fields", Func, 0, "func(s string) []string"},
+		{"FieldsFunc", Func, 0, "func(s string, f func(rune) bool) []string"},
+		{"FieldsFuncSeq", Func, 24, "func(s string, f func(rune) bool) iter.Seq[string]"},
+		{"FieldsSeq", Func, 24, "func(s string) iter.Seq[string]"},
+		{"HasPrefix", Func, 0, "func(s string, prefix string) bool"},
+		{"HasSuffix", Func, 0, "func(s string, suffix string) bool"},
+		{"Index", Func, 0, "func(s string, substr string) int"},
+		{"IndexAny", Func, 0, "func(s string, chars string) int"},
+		{"IndexByte", Func, 2, "func(s string, c byte) int"},
+		{"IndexFunc", Func, 0, "func(s string, f func(rune) bool) int"},
+		{"IndexRune", Func, 0, "func(s string, r rune) int"},
+		{"Join", Func, 0, "func(elems []string, sep string) string"},
+		{"LastIndex", Func, 0, "func(s string, substr string) int"},
+		{"LastIndexAny", Func, 0, "func(s string, chars string) int"},
+		{"LastIndexByte", Func, 5, "func(s string, c byte) int"},
+		{"LastIndexFunc", Func, 0, "func(s string, f func(rune) bool) int"},
+		{"Lines", Func, 24, "func(s string) iter.Seq[string]"},
+		{"Map", Func, 0, "func(mapping func(rune) rune, s string) string"},
+		{"NewReader", Func, 0, "func(s string) *Reader"},
+		{"NewReplacer", Func, 0, "func(oldnew ...string) *Replacer"},
+		{"Reader", Type, 0, ""},
+		{"Repeat", Func, 0, "func(s string, count int) string"},
+		{"Replace", Func, 0, "func(s string, old string, new string, n int) string"},
+		{"ReplaceAll", Func, 12, "func(s string, old string, new string) string"},
+		{"Replacer", Type, 0, ""},
+		{"Split", Func, 0, "func(s string, sep string) []string"},
+		{"SplitAfter", Func, 0, "func(s string, sep string) []string"},
+		{"SplitAfterN", Func, 0, "func(s string, sep string, n int) []string"},
+		{"SplitAfterSeq", Func, 24, "func(s string, sep string) iter.Seq[string]"},
+		{"SplitN", Func, 0, "func(s string, sep string, n int) []string"},
+		{"SplitSeq", Func, 24, "func(s string, sep string) iter.Seq[string]"},
+		{"Title", Func, 0, "func(s string) string"},
+		{"ToLower", Func, 0, "func(s string) string"},
+		{"ToLowerSpecial", Func, 0, "func(c unicode.SpecialCase, s string) string"},
+		{"ToTitle", Func, 0, "func(s string) string"},
+		{"ToTitleSpecial", Func, 0, "func(c unicode.SpecialCase, s string) string"},
+		{"ToUpper", Func, 0, "func(s string) string"},
+		{"ToUpperSpecial", Func, 0, "func(c unicode.SpecialCase, s string) string"},
+		{"ToValidUTF8", Func, 13, "func(s string, replacement string) string"},
+		{"Trim", Func, 0, "func(s string, cutset string) string"},
+		{"TrimFunc", Func, 0, "func(s string, f func(rune) bool) string"},
+		{"TrimLeft", Func, 0, "func(s string, cutset string) string"},
+		{"TrimLeftFunc", Func, 0, "func(s string, f func(rune) bool) string"},
+		{"TrimPrefix", Func, 1, "func(s string, prefix string) string"},
+		{"TrimRight", Func, 0, "func(s string, cutset string) string"},
+		{"TrimRightFunc", Func, 0, "func(s string, f func(rune) bool) string"},
+		{"TrimSpace", Func, 0, "func(s string) string"},
+		{"TrimSuffix", Func, 1, "func(s string, suffix string) string"},
+	},
+	"structs": {
+		{"HostLayout", Type, 23, ""},
+	},
+	"sync": {
+		{"(*Cond).Broadcast", Method, 0, ""},
+		{"(*Cond).Signal", Method, 0, ""},
+		{"(*Cond).Wait", Method, 0, ""},
+		{"(*Map).Clear", Method, 23, ""},
+		{"(*Map).CompareAndDelete", Method, 20, ""},
+		{"(*Map).CompareAndSwap", Method, 20, ""},
+		{"(*Map).Delete", Method, 9, ""},
+		{"(*Map).Load", Method, 9, ""},
+		{"(*Map).LoadAndDelete", Method, 15, ""},
+		{"(*Map).LoadOrStore", Method, 9, ""},
+		{"(*Map).Range", Method, 9, ""},
+		{"(*Map).Store", Method, 9, ""},
+		{"(*Map).Swap", Method, 20, ""},
+		{"(*Mutex).Lock", Method, 0, ""},
+		{"(*Mutex).TryLock", Method, 18, ""},
+		{"(*Mutex).Unlock", Method, 0, ""},
+		{"(*Once).Do", Method, 0, ""},
+		{"(*Pool).Get", Method, 3, ""},
+		{"(*Pool).Put", Method, 3, ""},
+		{"(*RWMutex).Lock", Method, 0, ""},
+		{"(*RWMutex).RLock", Method, 0, ""},
+		{"(*RWMutex).RLocker", Method, 0, ""},
+		{"(*RWMutex).RUnlock", Method, 0, ""},
+		{"(*RWMutex).TryLock", Method, 18, ""},
+		{"(*RWMutex).TryRLock", Method, 18, ""},
+		{"(*RWMutex).Unlock", Method, 0, ""},
+		{"(*WaitGroup).Add", Method, 0, ""},
+		{"(*WaitGroup).Done", Method, 0, ""},
+		{"(*WaitGroup).Go", Method, 25, ""},
+		{"(*WaitGroup).Wait", Method, 0, ""},
+		{"Cond", Type, 0, ""},
+		{"Cond.L", Field, 0, ""},
+		{"Locker", Type, 0, ""},
+		{"Map", Type, 9, ""},
+		{"Mutex", Type, 0, ""},
+		{"NewCond", Func, 0, "func(l Locker) *Cond"},
+		{"Once", Type, 0, ""},
+		{"OnceFunc", Func, 21, "func(f func()) func()"},
+		{"OnceValue", Func, 21, "func[T any](f func() T) func() T"},
+		{"OnceValues", Func, 21, "func[T1, T2 any](f func() (T1, T2)) func() (T1, T2)"},
+		{"Pool", Type, 3, ""},
+		{"Pool.New", Field, 3, ""},
+		{"RWMutex", Type, 0, ""},
+		{"WaitGroup", Type, 0, ""},
+	},
+	"sync/atomic": {
+		{"(*Bool).CompareAndSwap", Method, 19, ""},
+		{"(*Bool).Load", Method, 19, ""},
+		{"(*Bool).Store", Method, 19, ""},
+		{"(*Bool).Swap", Method, 19, ""},
+		{"(*Int32).Add", Method, 19, ""},
+		{"(*Int32).And", Method, 23, ""},
+		{"(*Int32).CompareAndSwap", Method, 19, ""},
+		{"(*Int32).Load", Method, 19, ""},
+		{"(*Int32).Or", Method, 23, ""},
+		{"(*Int32).Store", Method, 19, ""},
+		{"(*Int32).Swap", Method, 19, ""},
+		{"(*Int64).Add", Method, 19, ""},
+		{"(*Int64).And", Method, 23, ""},
+		{"(*Int64).CompareAndSwap", Method, 19, ""},
+		{"(*Int64).Load", Method, 19, ""},
+		{"(*Int64).Or", Method, 23, ""},
+		{"(*Int64).Store", Method, 19, ""},
+		{"(*Int64).Swap", Method, 19, ""},
+		{"(*Pointer).CompareAndSwap", Method, 19, ""},
+		{"(*Pointer).Load", Method, 19, ""},
+		{"(*Pointer).Store", Method, 19, ""},
+		{"(*Pointer).Swap", Method, 19, ""},
+		{"(*Uint32).Add", Method, 19, ""},
+		{"(*Uint32).And", Method, 23, ""},
+		{"(*Uint32).CompareAndSwap", Method, 19, ""},
+		{"(*Uint32).Load", Method, 19, ""},
+		{"(*Uint32).Or", Method, 23, ""},
+		{"(*Uint32).Store", Method, 19, ""},
+		{"(*Uint32).Swap", Method, 19, ""},
+		{"(*Uint64).Add", Method, 19, ""},
+		{"(*Uint64).And", Method, 23, ""},
+		{"(*Uint64).CompareAndSwap", Method, 19, ""},
+		{"(*Uint64).Load", Method, 19, ""},
+		{"(*Uint64).Or", Method, 23, ""},
+		{"(*Uint64).Store", Method, 19, ""},
+		{"(*Uint64).Swap", Method, 19, ""},
+		{"(*Uintptr).Add", Method, 19, ""},
+		{"(*Uintptr).And", Method, 23, ""},
+		{"(*Uintptr).CompareAndSwap", Method, 19, ""},
+		{"(*Uintptr).Load", Method, 19, ""},
+		{"(*Uintptr).Or", Method, 23, ""},
+		{"(*Uintptr).Store", Method, 19, ""},
+		{"(*Uintptr).Swap", Method, 19, ""},
+		{"(*Value).CompareAndSwap", Method, 17, ""},
+		{"(*Value).Load", Method, 4, ""},
+		{"(*Value).Store", Method, 4, ""},
+		{"(*Value).Swap", Method, 17, ""},
+		{"AddInt32", Func, 0, "func(addr *int32, delta int32) (new int32)"},
+		{"AddInt64", Func, 0, "func(addr *int64, delta int64) (new int64)"},
+		{"AddUint32", Func, 0, "func(addr *uint32, delta uint32) (new uint32)"},
+		{"AddUint64", Func, 0, "func(addr *uint64, delta uint64) (new uint64)"},
+		{"AddUintptr", Func, 0, "func(addr *uintptr, delta uintptr) (new uintptr)"},
+		{"AndInt32", Func, 23, "func(addr *int32, mask int32) (old int32)"},
+		{"AndInt64", Func, 23, "func(addr *int64, mask int64) (old int64)"},
+		{"AndUint32", Func, 23, "func(addr *uint32, mask uint32) (old uint32)"},
+		{"AndUint64", Func, 23, "func(addr *uint64, mask uint64) (old uint64)"},
+		{"AndUintptr", Func, 23, "func(addr *uintptr, mask uintptr) (old uintptr)"},
+		{"Bool", Type, 19, ""},
+		{"CompareAndSwapInt32", Func, 0, "func(addr *int32, old int32, new int32) (swapped bool)"},
+		{"CompareAndSwapInt64", Func, 0, "func(addr *int64, old int64, new int64) (swapped bool)"},
+		{"CompareAndSwapPointer", Func, 0, "func(addr *unsafe.Pointer, old unsafe.Pointer, new unsafe.Pointer) (swapped bool)"},
+		{"CompareAndSwapUint32", Func, 0, "func(addr *uint32, old uint32, new uint32) (swapped bool)"},
+		{"CompareAndSwapUint64", Func, 0, "func(addr *uint64, old uint64, new uint64) (swapped bool)"},
+		{"CompareAndSwapUintptr", Func, 0, "func(addr *uintptr, old uintptr, new uintptr) (swapped bool)"},
+		{"Int32", Type, 19, ""},
+		{"Int64", Type, 19, ""},
+		{"LoadInt32", Func, 0, "func(addr *int32) (val int32)"},
+		{"LoadInt64", Func, 0, "func(addr *int64) (val int64)"},
+		{"LoadPointer", Func, 0, "func(addr *unsafe.Pointer) (val unsafe.Pointer)"},
+		{"LoadUint32", Func, 0, "func(addr *uint32) (val uint32)"},
+		{"LoadUint64", Func, 0, "func(addr *uint64) (val uint64)"},
+		{"LoadUintptr", Func, 0, "func(addr *uintptr) (val uintptr)"},
+		{"OrInt32", Func, 23, "func(addr *int32, mask int32) (old int32)"},
+		{"OrInt64", Func, 23, "func(addr *int64, mask int64) (old int64)"},
+		{"OrUint32", Func, 23, "func(addr *uint32, mask uint32) (old uint32)"},
+		{"OrUint64", Func, 23, "func(addr *uint64, mask uint64) (old uint64)"},
+		{"OrUintptr", Func, 23, "func(addr *uintptr, mask uintptr) (old uintptr)"},
+		{"Pointer", Type, 19, ""},
+		{"StoreInt32", Func, 0, "func(addr *int32, val int32)"},
+		{"StoreInt64", Func, 0, "func(addr *int64, val int64)"},
+		{"StorePointer", Func, 0, "func(addr *unsafe.Pointer, val unsafe.Pointer)"},
+		{"StoreUint32", Func, 0, "func(addr *uint32, val uint32)"},
+		{"StoreUint64", Func, 0, "func(addr *uint64, val uint64)"},
+		{"StoreUintptr", Func, 0, "func(addr *uintptr, val uintptr)"},
+		{"SwapInt32", Func, 2, "func(addr *int32, new int32) (old int32)"},
+		{"SwapInt64", Func, 2, "func(addr *int64, new int64) (old int64)"},
+		{"SwapPointer", Func, 2, "func(addr *unsafe.Pointer, new unsafe.Pointer) (old unsafe.Pointer)"},
+		{"SwapUint32", Func, 2, "func(addr *uint32, new uint32) (old uint32)"},
+		{"SwapUint64", Func, 2, "func(addr *uint64, new uint64) (old uint64)"},
+		{"SwapUintptr", Func, 2, "func(addr *uintptr, new uintptr) (old uintptr)"},
+		{"Uint32", Type, 19, ""},
+		{"Uint64", Type, 19, ""},
+		{"Uintptr", Type, 19, ""},
+		{"Value", Type, 4, ""},
+	},
+	"syscall": {
+		{"(*Cmsghdr).SetLen", Method, 0, ""},
+		{"(*DLL).FindProc", Method, 0, ""},
+		{"(*DLL).MustFindProc", Method, 0, ""},
+		{"(*DLL).Release", Method, 0, ""},
+		{"(*DLLError).Error", Method, 0, ""},
+		{"(*DLLError).Unwrap", Method, 16, ""},
+		{"(*Filetime).Nanoseconds", Method, 0, ""},
+		{"(*Iovec).SetLen", Method, 0, ""},
+		{"(*LazyDLL).Handle", Method, 0, ""},
+		{"(*LazyDLL).Load", Method, 0, ""},
+		{"(*LazyDLL).NewProc", Method, 0, ""},
+		{"(*LazyProc).Addr", Method, 0, ""},
+		{"(*LazyProc).Call", Method, 0, ""},
+		{"(*LazyProc).Find", Method, 0, ""},
+		{"(*Msghdr).SetControllen", Method, 0, ""},
+		{"(*Proc).Addr", Method, 0, ""},
+		{"(*Proc).Call", Method, 0, ""},
+		{"(*PtraceRegs).PC", Method, 0, ""},
+		{"(*PtraceRegs).SetPC", Method, 0, ""},
+		{"(*RawSockaddrAny).Sockaddr", Method, 0, ""},
+		{"(*SID).Copy", Method, 0, ""},
+		{"(*SID).Len", Method, 0, ""},
+		{"(*SID).LookupAccount", Method, 0, ""},
+		{"(*SID).String", Method, 0, ""},
+		{"(*Timespec).Nano", Method, 0, ""},
+		{"(*Timespec).Unix", Method, 0, ""},
+		{"(*Timeval).Nano", Method, 0, ""},
+		{"(*Timeval).Nanoseconds", Method, 0, ""},
+		{"(*Timeval).Unix", Method, 0, ""},
+		{"(Errno).Error", Method, 0, ""},
+		{"(Errno).Is", Method, 13, ""},
+		{"(Errno).Temporary", Method, 0, ""},
+		{"(Errno).Timeout", Method, 0, ""},
+		{"(Signal).Signal", Method, 0, ""},
+		{"(Signal).String", Method, 0, ""},
+		{"(Token).Close", Method, 0, ""},
+		{"(Token).GetTokenPrimaryGroup", Method, 0, ""},
+		{"(Token).GetTokenUser", Method, 0, ""},
+		{"(Token).GetUserProfileDirectory", Method, 0, ""},
+		{"(WaitStatus).Continued", Method, 0, ""},
+		{"(WaitStatus).CoreDump", Method, 0, ""},
+		{"(WaitStatus).ExitStatus", Method, 0, ""},
+		{"(WaitStatus).Exited", Method, 0, ""},
+		{"(WaitStatus).Signal", Method, 0, ""},
+		{"(WaitStatus).Signaled", Method, 0, ""},
+		{"(WaitStatus).StopSignal", Method, 0, ""},
+		{"(WaitStatus).Stopped", Method, 0, ""},
+		{"(WaitStatus).TrapCause", Method, 0, ""},
+		{"AF_ALG", Const, 0, ""},
+		{"AF_APPLETALK", Const, 0, ""},
+		{"AF_ARP", Const, 0, ""},
+		{"AF_ASH", Const, 0, ""},
+		{"AF_ATM", Const, 0, ""},
+		{"AF_ATMPVC", Const, 0, ""},
+		{"AF_ATMSVC", Const, 0, ""},
+		{"AF_AX25", Const, 0, ""},
+		{"AF_BLUETOOTH", Const, 0, ""},
+		{"AF_BRIDGE", Const, 0, ""},
+		{"AF_CAIF", Const, 0, ""},
+		{"AF_CAN", Const, 0, ""},
+		{"AF_CCITT", Const, 0, ""},
+		{"AF_CHAOS", Const, 0, ""},
+		{"AF_CNT", Const, 0, ""},
+		{"AF_COIP", Const, 0, ""},
+		{"AF_DATAKIT", Const, 0, ""},
+		{"AF_DECnet", Const, 0, ""},
+		{"AF_DLI", Const, 0, ""},
+		{"AF_E164", Const, 0, ""},
+		{"AF_ECMA", Const, 0, ""},
+		{"AF_ECONET", Const, 0, ""},
+		{"AF_ENCAP", Const, 1, ""},
+		{"AF_FILE", Const, 0, ""},
+		{"AF_HYLINK", Const, 0, ""},
+		{"AF_IEEE80211", Const, 0, ""},
+		{"AF_IEEE802154", Const, 0, ""},
+		{"AF_IMPLINK", Const, 0, ""},
+		{"AF_INET", Const, 0, ""},
+		{"AF_INET6", Const, 0, ""},
+		{"AF_INET6_SDP", Const, 3, ""},
+		{"AF_INET_SDP", Const, 3, ""},
+		{"AF_IPX", Const, 0, ""},
+		{"AF_IRDA", Const, 0, ""},
+		{"AF_ISDN", Const, 0, ""},
+		{"AF_ISO", Const, 0, ""},
+		{"AF_IUCV", Const, 0, ""},
+		{"AF_KEY", Const, 0, ""},
+		{"AF_LAT", Const, 0, ""},
+		{"AF_LINK", Const, 0, ""},
+		{"AF_LLC", Const, 0, ""},
+		{"AF_LOCAL", Const, 0, ""},
+		{"AF_MAX", Const, 0, ""},
+		{"AF_MPLS", Const, 1, ""},
+		{"AF_NATM", Const, 0, ""},
+		{"AF_NDRV", Const, 0, ""},
+		{"AF_NETBEUI", Const, 0, ""},
+		{"AF_NETBIOS", Const, 0, ""},
+		{"AF_NETGRAPH", Const, 0, ""},
+		{"AF_NETLINK", Const, 0, ""},
+		{"AF_NETROM", Const, 0, ""},
+		{"AF_NS", Const, 0, ""},
+		{"AF_OROUTE", Const, 1, ""},
+		{"AF_OSI", Const, 0, ""},
+		{"AF_PACKET", Const, 0, ""},
+		{"AF_PHONET", Const, 0, ""},
+		{"AF_PPP", Const, 0, ""},
+		{"AF_PPPOX", Const, 0, ""},
+		{"AF_PUP", Const, 0, ""},
+		{"AF_RDS", Const, 0, ""},
+		{"AF_RESERVED_36", Const, 0, ""},
+		{"AF_ROSE", Const, 0, ""},
+		{"AF_ROUTE", Const, 0, ""},
+		{"AF_RXRPC", Const, 0, ""},
+		{"AF_SCLUSTER", Const, 0, ""},
+		{"AF_SECURITY", Const, 0, ""},
+		{"AF_SIP", Const, 0, ""},
+		{"AF_SLOW", Const, 0, ""},
+		{"AF_SNA", Const, 0, ""},
+		{"AF_SYSTEM", Const, 0, ""},
+		{"AF_TIPC", Const, 0, ""},
+		{"AF_UNIX", Const, 0, ""},
+		{"AF_UNSPEC", Const, 0, ""},
+		{"AF_UTUN", Const, 16, ""},
+		{"AF_VENDOR00", Const, 0, ""},
+		{"AF_VENDOR01", Const, 0, ""},
+		{"AF_VENDOR02", Const, 0, ""},
+		{"AF_VENDOR03", Const, 0, ""},
+		{"AF_VENDOR04", Const, 0, ""},
+		{"AF_VENDOR05", Const, 0, ""},
+		{"AF_VENDOR06", Const, 0, ""},
+		{"AF_VENDOR07", Const, 0, ""},
+		{"AF_VENDOR08", Const, 0, ""},
+		{"AF_VENDOR09", Const, 0, ""},
+		{"AF_VENDOR10", Const, 0, ""},
+		{"AF_VENDOR11", Const, 0, ""},
+		{"AF_VENDOR12", Const, 0, ""},
+		{"AF_VENDOR13", Const, 0, ""},
+		{"AF_VENDOR14", Const, 0, ""},
+		{"AF_VENDOR15", Const, 0, ""},
+		{"AF_VENDOR16", Const, 0, ""},
+		{"AF_VENDOR17", Const, 0, ""},
+		{"AF_VENDOR18", Const, 0, ""},
+		{"AF_VENDOR19", Const, 0, ""},
+		{"AF_VENDOR20", Const, 0, ""},
+		{"AF_VENDOR21", Const, 0, ""},
+		{"AF_VENDOR22", Const, 0, ""},
+		{"AF_VENDOR23", Const, 0, ""},
+		{"AF_VENDOR24", Const, 0, ""},
+		{"AF_VENDOR25", Const, 0, ""},
+		{"AF_VENDOR26", Const, 0, ""},
+		{"AF_VENDOR27", Const, 0, ""},
+		{"AF_VENDOR28", Const, 0, ""},
+		{"AF_VENDOR29", Const, 0, ""},
+		{"AF_VENDOR30", Const, 0, ""},
+		{"AF_VENDOR31", Const, 0, ""},
+		{"AF_VENDOR32", Const, 0, ""},
+		{"AF_VENDOR33", Const, 0, ""},
+		{"AF_VENDOR34", Const, 0, ""},
+		{"AF_VENDOR35", Const, 0, ""},
+		{"AF_VENDOR36", Const, 0, ""},
+		{"AF_VENDOR37", Const, 0, ""},
+		{"AF_VENDOR38", Const, 0, ""},
+		{"AF_VENDOR39", Const, 0, ""},
+		{"AF_VENDOR40", Const, 0, ""},
+		{"AF_VENDOR41", Const, 0, ""},
+		{"AF_VENDOR42", Const, 0, ""},
+		{"AF_VENDOR43", Const, 0, ""},
+		{"AF_VENDOR44", Const, 0, ""},
+		{"AF_VENDOR45", Const, 0, ""},
+		{"AF_VENDOR46", Const, 0, ""},
+		{"AF_VENDOR47", Const, 0, ""},
+		{"AF_WANPIPE", Const, 0, ""},
+		{"AF_X25", Const, 0, ""},
+		{"AI_CANONNAME", Const, 1, ""},
+		{"AI_NUMERICHOST", Const, 1, ""},
+		{"AI_PASSIVE", Const, 1, ""},
+		{"APPLICATION_ERROR", Const, 0, ""},
+		{"ARPHRD_ADAPT", Const, 0, ""},
+		{"ARPHRD_APPLETLK", Const, 0, ""},
+		{"ARPHRD_ARCNET", Const, 0, ""},
+		{"ARPHRD_ASH", Const, 0, ""},
+		{"ARPHRD_ATM", Const, 0, ""},
+		{"ARPHRD_AX25", Const, 0, ""},
+		{"ARPHRD_BIF", Const, 0, ""},
+		{"ARPHRD_CHAOS", Const, 0, ""},
+		{"ARPHRD_CISCO", Const, 0, ""},
+		{"ARPHRD_CSLIP", Const, 0, ""},
+		{"ARPHRD_CSLIP6", Const, 0, ""},
+		{"ARPHRD_DDCMP", Const, 0, ""},
+		{"ARPHRD_DLCI", Const, 0, ""},
+		{"ARPHRD_ECONET", Const, 0, ""},
+		{"ARPHRD_EETHER", Const, 0, ""},
+		{"ARPHRD_ETHER", Const, 0, ""},
+		{"ARPHRD_EUI64", Const, 0, ""},
+		{"ARPHRD_FCAL", Const, 0, ""},
+		{"ARPHRD_FCFABRIC", Const, 0, ""},
+		{"ARPHRD_FCPL", Const, 0, ""},
+		{"ARPHRD_FCPP", Const, 0, ""},
+		{"ARPHRD_FDDI", Const, 0, ""},
+		{"ARPHRD_FRAD", Const, 0, ""},
+		{"ARPHRD_FRELAY", Const, 1, ""},
+		{"ARPHRD_HDLC", Const, 0, ""},
+		{"ARPHRD_HIPPI", Const, 0, ""},
+		{"ARPHRD_HWX25", Const, 0, ""},
+		{"ARPHRD_IEEE1394", Const, 0, ""},
+		{"ARPHRD_IEEE802", Const, 0, ""},
+		{"ARPHRD_IEEE80211", Const, 0, ""},
+		{"ARPHRD_IEEE80211_PRISM", Const, 0, ""},
+		{"ARPHRD_IEEE80211_RADIOTAP", Const, 0, ""},
+		{"ARPHRD_IEEE802154", Const, 0, ""},
+		{"ARPHRD_IEEE802154_PHY", Const, 0, ""},
+		{"ARPHRD_IEEE802_TR", Const, 0, ""},
+		{"ARPHRD_INFINIBAND", Const, 0, ""},
+		{"ARPHRD_IPDDP", Const, 0, ""},
+		{"ARPHRD_IPGRE", Const, 0, ""},
+		{"ARPHRD_IRDA", Const, 0, ""},
+		{"ARPHRD_LAPB", Const, 0, ""},
+		{"ARPHRD_LOCALTLK", Const, 0, ""},
+		{"ARPHRD_LOOPBACK", Const, 0, ""},
+		{"ARPHRD_METRICOM", Const, 0, ""},
+		{"ARPHRD_NETROM", Const, 0, ""},
+		{"ARPHRD_NONE", Const, 0, ""},
+		{"ARPHRD_PIMREG", Const, 0, ""},
+		{"ARPHRD_PPP", Const, 0, ""},
+		{"ARPHRD_PRONET", Const, 0, ""},
+		{"ARPHRD_RAWHDLC", Const, 0, ""},
+		{"ARPHRD_ROSE", Const, 0, ""},
+		{"ARPHRD_RSRVD", Const, 0, ""},
+		{"ARPHRD_SIT", Const, 0, ""},
+		{"ARPHRD_SKIP", Const, 0, ""},
+		{"ARPHRD_SLIP", Const, 0, ""},
+		{"ARPHRD_SLIP6", Const, 0, ""},
+		{"ARPHRD_STRIP", Const, 1, ""},
+		{"ARPHRD_TUNNEL", Const, 0, ""},
+		{"ARPHRD_TUNNEL6", Const, 0, ""},
+		{"ARPHRD_VOID", Const, 0, ""},
+		{"ARPHRD_X25", Const, 0, ""},
+		{"AUTHTYPE_CLIENT", Const, 0, ""},
+		{"AUTHTYPE_SERVER", Const, 0, ""},
+		{"Accept", Func, 0, "func(fd int) (nfd int, sa Sockaddr, err error)"},
+		{"Accept4", Func, 1, "func(fd int, flags int) (nfd int, sa Sockaddr, err error)"},
+		{"AcceptEx", Func, 0, ""},
+		{"Access", Func, 0, "func(path string, mode uint32) (err error)"},
+		{"Acct", Func, 0, "func(path string) (err error)"},
+		{"AddrinfoW", Type, 1, ""},
+		{"AddrinfoW.Addr", Field, 1, ""},
+		{"AddrinfoW.Addrlen", Field, 1, ""},
+		{"AddrinfoW.Canonname", Field, 1, ""},
+		{"AddrinfoW.Family", Field, 1, ""},
+		{"AddrinfoW.Flags", Field, 1, ""},
+		{"AddrinfoW.Next", Field, 1, ""},
+		{"AddrinfoW.Protocol", Field, 1, ""},
+		{"AddrinfoW.Socktype", Field, 1, ""},
+		{"Adjtime", Func, 0, ""},
+		{"Adjtimex", Func, 0, "func(buf *Timex) (state int, err error)"},
+		{"AllThreadsSyscall", Func, 16, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
+		{"AllThreadsSyscall6", Func, 16, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
+		{"AttachLsf", Func, 0, "func(fd int, i []SockFilter) error"},
+		{"B0", Const, 0, ""},
+		{"B1000000", Const, 0, ""},
+		{"B110", Const, 0, ""},
+		{"B115200", Const, 0, ""},
+		{"B1152000", Const, 0, ""},
+		{"B1200", Const, 0, ""},
+		{"B134", Const, 0, ""},
+		{"B14400", Const, 1, ""},
+		{"B150", Const, 0, ""},
+		{"B1500000", Const, 0, ""},
+		{"B1800", Const, 0, ""},
+		{"B19200", Const, 0, ""},
+		{"B200", Const, 0, ""},
+		{"B2000000", Const, 0, ""},
+		{"B230400", Const, 0, ""},
+		{"B2400", Const, 0, ""},
+		{"B2500000", Const, 0, ""},
+		{"B28800", Const, 1, ""},
+		{"B300", Const, 0, ""},
+		{"B3000000", Const, 0, ""},
+		{"B3500000", Const, 0, ""},
+		{"B38400", Const, 0, ""},
+		{"B4000000", Const, 0, ""},
+		{"B460800", Const, 0, ""},
+		{"B4800", Const, 0, ""},
+		{"B50", Const, 0, ""},
+		{"B500000", Const, 0, ""},
+		{"B57600", Const, 0, ""},
+		{"B576000", Const, 0, ""},
+		{"B600", Const, 0, ""},
+		{"B7200", Const, 1, ""},
+		{"B75", Const, 0, ""},
+		{"B76800", Const, 1, ""},
+		{"B921600", Const, 0, ""},
+		{"B9600", Const, 0, ""},
+		{"BASE_PROTOCOL", Const, 2, ""},
+		{"BIOCFEEDBACK", Const, 0, ""},
+		{"BIOCFLUSH", Const, 0, ""},
+		{"BIOCGBLEN", Const, 0, ""},
+		{"BIOCGDIRECTION", Const, 0, ""},
+		{"BIOCGDIRFILT", Const, 1, ""},
+		{"BIOCGDLT", Const, 0, ""},
+		{"BIOCGDLTLIST", Const, 0, ""},
+		{"BIOCGETBUFMODE", Const, 0, ""},
+		{"BIOCGETIF", Const, 0, ""},
+		{"BIOCGETZMAX", Const, 0, ""},
+		{"BIOCGFEEDBACK", Const, 1, ""},
+		{"BIOCGFILDROP", Const, 1, ""},
+		{"BIOCGHDRCMPLT", Const, 0, ""},
+		{"BIOCGRSIG", Const, 0, ""},
+		{"BIOCGRTIMEOUT", Const, 0, ""},
+		{"BIOCGSEESENT", Const, 0, ""},
+		{"BIOCGSTATS", Const, 0, ""},
+		{"BIOCGSTATSOLD", Const, 1, ""},
+		{"BIOCGTSTAMP", Const, 1, ""},
+		{"BIOCIMMEDIATE", Const, 0, ""},
+		{"BIOCLOCK", Const, 0, ""},
+		{"BIOCPROMISC", Const, 0, ""},
+		{"BIOCROTZBUF", Const, 0, ""},
+		{"BIOCSBLEN", Const, 0, ""},
+		{"BIOCSDIRECTION", Const, 0, ""},
+		{"BIOCSDIRFILT", Const, 1, ""},
+		{"BIOCSDLT", Const, 0, ""},
+		{"BIOCSETBUFMODE", Const, 0, ""},
+		{"BIOCSETF", Const, 0, ""},
+		{"BIOCSETFNR", Const, 0, ""},
+		{"BIOCSETIF", Const, 0, ""},
+		{"BIOCSETWF", Const, 0, ""},
+		{"BIOCSETZBUF", Const, 0, ""},
+		{"BIOCSFEEDBACK", Const, 1, ""},
+		{"BIOCSFILDROP", Const, 1, ""},
+		{"BIOCSHDRCMPLT", Const, 0, ""},
+		{"BIOCSRSIG", Const, 0, ""},
+		{"BIOCSRTIMEOUT", Const, 0, ""},
+		{"BIOCSSEESENT", Const, 0, ""},
+		{"BIOCSTCPF", Const, 1, ""},
+		{"BIOCSTSTAMP", Const, 1, ""},
+		{"BIOCSUDPF", Const, 1, ""},
+		{"BIOCVERSION", Const, 0, ""},
+		{"BPF_A", Const, 0, ""},
+		{"BPF_ABS", Const, 0, ""},
+		{"BPF_ADD", Const, 0, ""},
+		{"BPF_ALIGNMENT", Const, 0, ""},
+		{"BPF_ALIGNMENT32", Const, 1, ""},
+		{"BPF_ALU", Const, 0, ""},
+		{"BPF_AND", Const, 0, ""},
+		{"BPF_B", Const, 0, ""},
+		{"BPF_BUFMODE_BUFFER", Const, 0, ""},
+		{"BPF_BUFMODE_ZBUF", Const, 0, ""},
+		{"BPF_DFLTBUFSIZE", Const, 1, ""},
+		{"BPF_DIRECTION_IN", Const, 1, ""},
+		{"BPF_DIRECTION_OUT", Const, 1, ""},
+		{"BPF_DIV", Const, 0, ""},
+		{"BPF_H", Const, 0, ""},
+		{"BPF_IMM", Const, 0, ""},
+		{"BPF_IND", Const, 0, ""},
+		{"BPF_JA", Const, 0, ""},
+		{"BPF_JEQ", Const, 0, ""},
+		{"BPF_JGE", Const, 0, ""},
+		{"BPF_JGT", Const, 0, ""},
+		{"BPF_JMP", Const, 0, ""},
+		{"BPF_JSET", Const, 0, ""},
+		{"BPF_K", Const, 0, ""},
+		{"BPF_LD", Const, 0, ""},
+		{"BPF_LDX", Const, 0, ""},
+		{"BPF_LEN", Const, 0, ""},
+		{"BPF_LSH", Const, 0, ""},
+		{"BPF_MAJOR_VERSION", Const, 0, ""},
+		{"BPF_MAXBUFSIZE", Const, 0, ""},
+		{"BPF_MAXINSNS", Const, 0, ""},
+		{"BPF_MEM", Const, 0, ""},
+		{"BPF_MEMWORDS", Const, 0, ""},
+		{"BPF_MINBUFSIZE", Const, 0, ""},
+		{"BPF_MINOR_VERSION", Const, 0, ""},
+		{"BPF_MISC", Const, 0, ""},
+		{"BPF_MSH", Const, 0, ""},
+		{"BPF_MUL", Const, 0, ""},
+		{"BPF_NEG", Const, 0, ""},
+		{"BPF_OR", Const, 0, ""},
+		{"BPF_RELEASE", Const, 0, ""},
+		{"BPF_RET", Const, 0, ""},
+		{"BPF_RSH", Const, 0, ""},
+		{"BPF_ST", Const, 0, ""},
+		{"BPF_STX", Const, 0, ""},
+		{"BPF_SUB", Const, 0, ""},
+		{"BPF_TAX", Const, 0, ""},
+		{"BPF_TXA", Const, 0, ""},
+		{"BPF_T_BINTIME", Const, 1, ""},
+		{"BPF_T_BINTIME_FAST", Const, 1, ""},
+		{"BPF_T_BINTIME_MONOTONIC", Const, 1, ""},
+		{"BPF_T_BINTIME_MONOTONIC_FAST", Const, 1, ""},
+		{"BPF_T_FAST", Const, 1, ""},
+		{"BPF_T_FLAG_MASK", Const, 1, ""},
+		{"BPF_T_FORMAT_MASK", Const, 1, ""},
+		{"BPF_T_MICROTIME", Const, 1, ""},
+		{"BPF_T_MICROTIME_FAST", Const, 1, ""},
+		{"BPF_T_MICROTIME_MONOTONIC", Const, 1, ""},
+		{"BPF_T_MICROTIME_MONOTONIC_FAST", Const, 1, ""},
+		{"BPF_T_MONOTONIC", Const, 1, ""},
+		{"BPF_T_MONOTONIC_FAST", Const, 1, ""},
+		{"BPF_T_NANOTIME", Const, 1, ""},
+		{"BPF_T_NANOTIME_FAST", Const, 1, ""},
+		{"BPF_T_NANOTIME_MONOTONIC", Const, 1, ""},
+		{"BPF_T_NANOTIME_MONOTONIC_FAST", Const, 1, ""},
+		{"BPF_T_NONE", Const, 1, ""},
+		{"BPF_T_NORMAL", Const, 1, ""},
+		{"BPF_W", Const, 0, ""},
+		{"BPF_X", Const, 0, ""},
+		{"BRKINT", Const, 0, ""},
+		{"Bind", Func, 0, "func(fd int, sa Sockaddr) (err error)"},
+		{"BindToDevice", Func, 0, "func(fd int, device string) (err error)"},
+		{"BpfBuflen", Func, 0, ""},
+		{"BpfDatalink", Func, 0, ""},
+		{"BpfHdr", Type, 0, ""},
+		{"BpfHdr.Caplen", Field, 0, ""},
+		{"BpfHdr.Datalen", Field, 0, ""},
+		{"BpfHdr.Hdrlen", Field, 0, ""},
+		{"BpfHdr.Pad_cgo_0", Field, 0, ""},
+		{"BpfHdr.Tstamp", Field, 0, ""},
+		{"BpfHeadercmpl", Func, 0, ""},
+		{"BpfInsn", Type, 0, ""},
+		{"BpfInsn.Code", Field, 0, ""},
+		{"BpfInsn.Jf", Field, 0, ""},
+		{"BpfInsn.Jt", Field, 0, ""},
+		{"BpfInsn.K", Field, 0, ""},
+		{"BpfInterface", Func, 0, ""},
+		{"BpfJump", Func, 0, ""},
+		{"BpfProgram", Type, 0, ""},
+		{"BpfProgram.Insns", Field, 0, ""},
+		{"BpfProgram.Len", Field, 0, ""},
+		{"BpfProgram.Pad_cgo_0", Field, 0, ""},
+		{"BpfStat", Type, 0, ""},
+		{"BpfStat.Capt", Field, 2, ""},
+		{"BpfStat.Drop", Field, 0, ""},
+		{"BpfStat.Padding", Field, 2, ""},
+		{"BpfStat.Recv", Field, 0, ""},
+		{"BpfStats", Func, 0, ""},
+		{"BpfStmt", Func, 0, ""},
+		{"BpfTimeout", Func, 0, ""},
+		{"BpfTimeval", Type, 2, ""},
+		{"BpfTimeval.Sec", Field, 2, ""},
+		{"BpfTimeval.Usec", Field, 2, ""},
+		{"BpfVersion", Type, 0, ""},
+		{"BpfVersion.Major", Field, 0, ""},
+		{"BpfVersion.Minor", Field, 0, ""},
+		{"BpfZbuf", Type, 0, ""},
+		{"BpfZbuf.Bufa", Field, 0, ""},
+		{"BpfZbuf.Bufb", Field, 0, ""},
+		{"BpfZbuf.Buflen", Field, 0, ""},
+		{"BpfZbufHeader", Type, 0, ""},
+		{"BpfZbufHeader.Kernel_gen", Field, 0, ""},
+		{"BpfZbufHeader.Kernel_len", Field, 0, ""},
+		{"BpfZbufHeader.User_gen", Field, 0, ""},
+		{"BpfZbufHeader.X_bzh_pad", Field, 0, ""},
+		{"ByHandleFileInformation", Type, 0, ""},
+		{"ByHandleFileInformation.CreationTime", Field, 0, ""},
+		{"ByHandleFileInformation.FileAttributes", Field, 0, ""},
+		{"ByHandleFileInformation.FileIndexHigh", Field, 0, ""},
+		{"ByHandleFileInformation.FileIndexLow", Field, 0, ""},
+		{"ByHandleFileInformation.FileSizeHigh", Field, 0, ""},
+		{"ByHandleFileInformation.FileSizeLow", Field, 0, ""},
+		{"ByHandleFileInformation.LastAccessTime", Field, 0, ""},
+		{"ByHandleFileInformation.LastWriteTime", Field, 0, ""},
+		{"ByHandleFileInformation.NumberOfLinks", Field, 0, ""},
+		{"ByHandleFileInformation.VolumeSerialNumber", Field, 0, ""},
+		{"BytePtrFromString", Func, 1, "func(s string) (*byte, error)"},
+		{"ByteSliceFromString", Func, 1, "func(s string) ([]byte, error)"},
+		{"CCR0_FLUSH", Const, 1, ""},
+		{"CERT_CHAIN_POLICY_AUTHENTICODE", Const, 0, ""},
+		{"CERT_CHAIN_POLICY_AUTHENTICODE_TS", Const, 0, ""},
+		{"CERT_CHAIN_POLICY_BASE", Const, 0, ""},
+		{"CERT_CHAIN_POLICY_BASIC_CONSTRAINTS", Const, 0, ""},
+		{"CERT_CHAIN_POLICY_EV", Const, 0, ""},
+		{"CERT_CHAIN_POLICY_MICROSOFT_ROOT", Const, 0, ""},
+		{"CERT_CHAIN_POLICY_NT_AUTH", Const, 0, ""},
+		{"CERT_CHAIN_POLICY_SSL", Const, 0, ""},
+		{"CERT_E_CN_NO_MATCH", Const, 0, ""},
+		{"CERT_E_EXPIRED", Const, 0, ""},
+		{"CERT_E_PURPOSE", Const, 0, ""},
+		{"CERT_E_ROLE", Const, 0, ""},
+		{"CERT_E_UNTRUSTEDROOT", Const, 0, ""},
+		{"CERT_STORE_ADD_ALWAYS", Const, 0, ""},
+		{"CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG", Const, 0, ""},
+		{"CERT_STORE_PROV_MEMORY", Const, 0, ""},
+		{"CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT", Const, 0, ""},
+		{"CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT", Const, 0, ""},
+		{"CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT", Const, 0, ""},
+		{"CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT", Const, 0, ""},
+		{"CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT", Const, 0, ""},
+		{"CERT_TRUST_INVALID_BASIC_CONSTRAINTS", Const, 0, ""},
+		{"CERT_TRUST_INVALID_EXTENSION", Const, 0, ""},
+		{"CERT_TRUST_INVALID_NAME_CONSTRAINTS", Const, 0, ""},
+		{"CERT_TRUST_INVALID_POLICY_CONSTRAINTS", Const, 0, ""},
+		{"CERT_TRUST_IS_CYCLIC", Const, 0, ""},
+		{"CERT_TRUST_IS_EXPLICIT_DISTRUST", Const, 0, ""},
+		{"CERT_TRUST_IS_NOT_SIGNATURE_VALID", Const, 0, ""},
+		{"CERT_TRUST_IS_NOT_TIME_VALID", Const, 0, ""},
+		{"CERT_TRUST_IS_NOT_VALID_FOR_USAGE", Const, 0, ""},
+		{"CERT_TRUST_IS_OFFLINE_REVOCATION", Const, 0, ""},
+		{"CERT_TRUST_IS_REVOKED", Const, 0, ""},
+		{"CERT_TRUST_IS_UNTRUSTED_ROOT", Const, 0, ""},
+		{"CERT_TRUST_NO_ERROR", Const, 0, ""},
+		{"CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY", Const, 0, ""},
+		{"CERT_TRUST_REVOCATION_STATUS_UNKNOWN", Const, 0, ""},
+		{"CFLUSH", Const, 1, ""},
+		{"CLOCAL", Const, 0, ""},
+		{"CLONE_CHILD_CLEARTID", Const, 2, ""},
+		{"CLONE_CHILD_SETTID", Const, 2, ""},
+		{"CLONE_CLEAR_SIGHAND", Const, 20, ""},
+		{"CLONE_CSIGNAL", Const, 3, ""},
+		{"CLONE_DETACHED", Const, 2, ""},
+		{"CLONE_FILES", Const, 2, ""},
+		{"CLONE_FS", Const, 2, ""},
+		{"CLONE_INTO_CGROUP", Const, 20, ""},
+		{"CLONE_IO", Const, 2, ""},
+		{"CLONE_NEWCGROUP", Const, 20, ""},
+		{"CLONE_NEWIPC", Const, 2, ""},
+		{"CLONE_NEWNET", Const, 2, ""},
+		{"CLONE_NEWNS", Const, 2, ""},
+		{"CLONE_NEWPID", Const, 2, ""},
+		{"CLONE_NEWTIME", Const, 20, ""},
+		{"CLONE_NEWUSER", Const, 2, ""},
+		{"CLONE_NEWUTS", Const, 2, ""},
+		{"CLONE_PARENT", Const, 2, ""},
+		{"CLONE_PARENT_SETTID", Const, 2, ""},
+		{"CLONE_PID", Const, 3, ""},
+		{"CLONE_PIDFD", Const, 20, ""},
+		{"CLONE_PTRACE", Const, 2, ""},
+		{"CLONE_SETTLS", Const, 2, ""},
+		{"CLONE_SIGHAND", Const, 2, ""},
+		{"CLONE_SYSVSEM", Const, 2, ""},
+		{"CLONE_THREAD", Const, 2, ""},
+		{"CLONE_UNTRACED", Const, 2, ""},
+		{"CLONE_VFORK", Const, 2, ""},
+		{"CLONE_VM", Const, 2, ""},
+		{"CPUID_CFLUSH", Const, 1, ""},
+		{"CREAD", Const, 0, ""},
+		{"CREATE_ALWAYS", Const, 0, ""},
+		{"CREATE_NEW", Const, 0, ""},
+		{"CREATE_NEW_PROCESS_GROUP", Const, 1, ""},
+		{"CREATE_UNICODE_ENVIRONMENT", Const, 0, ""},
+		{"CRYPT_DEFAULT_CONTAINER_OPTIONAL", Const, 0, ""},
+		{"CRYPT_DELETEKEYSET", Const, 0, ""},
+		{"CRYPT_MACHINE_KEYSET", Const, 0, ""},
+		{"CRYPT_NEWKEYSET", Const, 0, ""},
+		{"CRYPT_SILENT", Const, 0, ""},
+		{"CRYPT_VERIFYCONTEXT", Const, 0, ""},
+		{"CS5", Const, 0, ""},
+		{"CS6", Const, 0, ""},
+		{"CS7", Const, 0, ""},
+		{"CS8", Const, 0, ""},
+		{"CSIZE", Const, 0, ""},
+		{"CSTART", Const, 1, ""},
+		{"CSTATUS", Const, 1, ""},
+		{"CSTOP", Const, 1, ""},
+		{"CSTOPB", Const, 0, ""},
+		{"CSUSP", Const, 1, ""},
+		{"CTL_MAXNAME", Const, 0, ""},
+		{"CTL_NET", Const, 0, ""},
+		{"CTL_QUERY", Const, 1, ""},
+		{"CTRL_BREAK_EVENT", Const, 1, ""},
+		{"CTRL_CLOSE_EVENT", Const, 14, ""},
+		{"CTRL_C_EVENT", Const, 1, ""},
+		{"CTRL_LOGOFF_EVENT", Const, 14, ""},
+		{"CTRL_SHUTDOWN_EVENT", Const, 14, ""},
+		{"CancelIo", Func, 0, ""},
+		{"CancelIoEx", Func, 1, ""},
+		{"CertAddCertificateContextToStore", Func, 0, ""},
+		{"CertChainContext", Type, 0, ""},
+		{"CertChainContext.ChainCount", Field, 0, ""},
+		{"CertChainContext.Chains", Field, 0, ""},
+		{"CertChainContext.HasRevocationFreshnessTime", Field, 0, ""},
+		{"CertChainContext.LowerQualityChainCount", Field, 0, ""},
+		{"CertChainContext.LowerQualityChains", Field, 0, ""},
+		{"CertChainContext.RevocationFreshnessTime", Field, 0, ""},
+		{"CertChainContext.Size", Field, 0, ""},
+		{"CertChainContext.TrustStatus", Field, 0, ""},
+		{"CertChainElement", Type, 0, ""},
+		{"CertChainElement.ApplicationUsage", Field, 0, ""},
+		{"CertChainElement.CertContext", Field, 0, ""},
+		{"CertChainElement.ExtendedErrorInfo", Field, 0, ""},
+		{"CertChainElement.IssuanceUsage", Field, 0, ""},
+		{"CertChainElement.RevocationInfo", Field, 0, ""},
+		{"CertChainElement.Size", Field, 0, ""},
+		{"CertChainElement.TrustStatus", Field, 0, ""},
+		{"CertChainPara", Type, 0, ""},
+		{"CertChainPara.CacheResync", Field, 0, ""},
+		{"CertChainPara.CheckRevocationFreshnessTime", Field, 0, ""},
+		{"CertChainPara.RequestedUsage", Field, 0, ""},
+		{"CertChainPara.RequstedIssuancePolicy", Field, 0, ""},
+		{"CertChainPara.RevocationFreshnessTime", Field, 0, ""},
+		{"CertChainPara.Size", Field, 0, ""},
+		{"CertChainPara.URLRetrievalTimeout", Field, 0, ""},
+		{"CertChainPolicyPara", Type, 0, ""},
+		{"CertChainPolicyPara.ExtraPolicyPara", Field, 0, ""},
+		{"CertChainPolicyPara.Flags", Field, 0, ""},
+		{"CertChainPolicyPara.Size", Field, 0, ""},
+		{"CertChainPolicyStatus", Type, 0, ""},
+		{"CertChainPolicyStatus.ChainIndex", Field, 0, ""},
+		{"CertChainPolicyStatus.ElementIndex", Field, 0, ""},
+		{"CertChainPolicyStatus.Error", Field, 0, ""},
+		{"CertChainPolicyStatus.ExtraPolicyStatus", Field, 0, ""},
+		{"CertChainPolicyStatus.Size", Field, 0, ""},
+		{"CertCloseStore", Func, 0, ""},
+		{"CertContext", Type, 0, ""},
+		{"CertContext.CertInfo", Field, 0, ""},
+		{"CertContext.EncodedCert", Field, 0, ""},
+		{"CertContext.EncodingType", Field, 0, ""},
+		{"CertContext.Length", Field, 0, ""},
+		{"CertContext.Store", Field, 0, ""},
+		{"CertCreateCertificateContext", Func, 0, ""},
+		{"CertEnhKeyUsage", Type, 0, ""},
+		{"CertEnhKeyUsage.Length", Field, 0, ""},
+		{"CertEnhKeyUsage.UsageIdentifiers", Field, 0, ""},
+		{"CertEnumCertificatesInStore", Func, 0, ""},
+		{"CertFreeCertificateChain", Func, 0, ""},
+		{"CertFreeCertificateContext", Func, 0, ""},
+		{"CertGetCertificateChain", Func, 0, ""},
+		{"CertInfo", Type, 11, ""},
+		{"CertOpenStore", Func, 0, ""},
+		{"CertOpenSystemStore", Func, 0, ""},
+		{"CertRevocationCrlInfo", Type, 11, ""},
+		{"CertRevocationInfo", Type, 0, ""},
+		{"CertRevocationInfo.CrlInfo", Field, 0, ""},
+		{"CertRevocationInfo.FreshnessTime", Field, 0, ""},
+		{"CertRevocationInfo.HasFreshnessTime", Field, 0, ""},
+		{"CertRevocationInfo.OidSpecificInfo", Field, 0, ""},
+		{"CertRevocationInfo.RevocationOid", Field, 0, ""},
+		{"CertRevocationInfo.RevocationResult", Field, 0, ""},
+		{"CertRevocationInfo.Size", Field, 0, ""},
+		{"CertSimpleChain", Type, 0, ""},
+		{"CertSimpleChain.Elements", Field, 0, ""},
+		{"CertSimpleChain.HasRevocationFreshnessTime", Field, 0, ""},
+		{"CertSimpleChain.NumElements", Field, 0, ""},
+		{"CertSimpleChain.RevocationFreshnessTime", Field, 0, ""},
+		{"CertSimpleChain.Size", Field, 0, ""},
+		{"CertSimpleChain.TrustListInfo", Field, 0, ""},
+		{"CertSimpleChain.TrustStatus", Field, 0, ""},
+		{"CertTrustListInfo", Type, 11, ""},
+		{"CertTrustStatus", Type, 0, ""},
+		{"CertTrustStatus.ErrorStatus", Field, 0, ""},
+		{"CertTrustStatus.InfoStatus", Field, 0, ""},
+		{"CertUsageMatch", Type, 0, ""},
+		{"CertUsageMatch.Type", Field, 0, ""},
+		{"CertUsageMatch.Usage", Field, 0, ""},
+		{"CertVerifyCertificateChainPolicy", Func, 0, ""},
+		{"Chdir", Func, 0, "func(path string) (err error)"},
+		{"CheckBpfVersion", Func, 0, ""},
+		{"Chflags", Func, 0, ""},
+		{"Chmod", Func, 0, "func(path string, mode uint32) (err error)"},
+		{"Chown", Func, 0, "func(path string, uid int, gid int) (err error)"},
+		{"Chroot", Func, 0, "func(path string) (err error)"},
+		{"Clearenv", Func, 0, "func()"},
+		{"Close", Func, 0, "func(fd int) (err error)"},
+		{"CloseHandle", Func, 0, ""},
+		{"CloseOnExec", Func, 0, "func(fd int)"},
+		{"Closesocket", Func, 0, ""},
+		{"CmsgLen", Func, 0, "func(datalen int) int"},
+		{"CmsgSpace", Func, 0, "func(datalen int) int"},
+		{"Cmsghdr", Type, 0, ""},
+		{"Cmsghdr.Len", Field, 0, ""},
+		{"Cmsghdr.Level", Field, 0, ""},
+		{"Cmsghdr.Type", Field, 0, ""},
+		{"Cmsghdr.X__cmsg_data", Field, 0, ""},
+		{"CommandLineToArgv", Func, 0, ""},
+		{"ComputerName", Func, 0, ""},
+		{"Conn", Type, 9, ""},
+		{"Connect", Func, 0, "func(fd int, sa Sockaddr) (err error)"},
+		{"ConnectEx", Func, 1, ""},
+		{"ConvertSidToStringSid", Func, 0, ""},
+		{"ConvertStringSidToSid", Func, 0, ""},
+		{"CopySid", Func, 0, ""},
+		{"Creat", Func, 0, "func(path string, mode uint32) (fd int, err error)"},
+		{"CreateDirectory", Func, 0, ""},
+		{"CreateFile", Func, 0, ""},
+		{"CreateFileMapping", Func, 0, ""},
+		{"CreateHardLink", Func, 4, ""},
+		{"CreateIoCompletionPort", Func, 0, ""},
+		{"CreatePipe", Func, 0, ""},
+		{"CreateProcess", Func, 0, ""},
+		{"CreateProcessAsUser", Func, 10, ""},
+		{"CreateSymbolicLink", Func, 4, ""},
+		{"CreateToolhelp32Snapshot", Func, 4, ""},
+		{"Credential", Type, 0, ""},
+		{"Credential.Gid", Field, 0, ""},
+		{"Credential.Groups", Field, 0, ""},
+		{"Credential.NoSetGroups", Field, 9, ""},
+		{"Credential.Uid", Field, 0, ""},
+		{"CryptAcquireContext", Func, 0, ""},
+		{"CryptGenRandom", Func, 0, ""},
+		{"CryptReleaseContext", Func, 0, ""},
+		{"DIOCBSFLUSH", Const, 1, ""},
+		{"DIOCOSFPFLUSH", Const, 1, ""},
+		{"DLL", Type, 0, ""},
+		{"DLL.Handle", Field, 0, ""},
+		{"DLL.Name", Field, 0, ""},
+		{"DLLError", Type, 0, ""},
+		{"DLLError.Err", Field, 0, ""},
+		{"DLLError.Msg", Field, 0, ""},
+		{"DLLError.ObjName", Field, 0, ""},
+		{"DLT_A429", Const, 0, ""},
+		{"DLT_A653_ICM", Const, 0, ""},
+		{"DLT_AIRONET_HEADER", Const, 0, ""},
+		{"DLT_AOS", Const, 1, ""},
+		{"DLT_APPLE_IP_OVER_IEEE1394", Const, 0, ""},
+		{"DLT_ARCNET", Const, 0, ""},
+		{"DLT_ARCNET_LINUX", Const, 0, ""},
+		{"DLT_ATM_CLIP", Const, 0, ""},
+		{"DLT_ATM_RFC1483", Const, 0, ""},
+		{"DLT_AURORA", Const, 0, ""},
+		{"DLT_AX25", Const, 0, ""},
+		{"DLT_AX25_KISS", Const, 0, ""},
+		{"DLT_BACNET_MS_TP", Const, 0, ""},
+		{"DLT_BLUETOOTH_HCI_H4", Const, 0, ""},
+		{"DLT_BLUETOOTH_HCI_H4_WITH_PHDR", Const, 0, ""},
+		{"DLT_CAN20B", Const, 0, ""},
+		{"DLT_CAN_SOCKETCAN", Const, 1, ""},
+		{"DLT_CHAOS", Const, 0, ""},
+		{"DLT_CHDLC", Const, 0, ""},
+		{"DLT_CISCO_IOS", Const, 0, ""},
+		{"DLT_C_HDLC", Const, 0, ""},
+		{"DLT_C_HDLC_WITH_DIR", Const, 0, ""},
+		{"DLT_DBUS", Const, 1, ""},
+		{"DLT_DECT", Const, 1, ""},
+		{"DLT_DOCSIS", Const, 0, ""},
+		{"DLT_DVB_CI", Const, 1, ""},
+		{"DLT_ECONET", Const, 0, ""},
+		{"DLT_EN10MB", Const, 0, ""},
+		{"DLT_EN3MB", Const, 0, ""},
+		{"DLT_ENC", Const, 0, ""},
+		{"DLT_ERF", Const, 0, ""},
+		{"DLT_ERF_ETH", Const, 0, ""},
+		{"DLT_ERF_POS", Const, 0, ""},
+		{"DLT_FC_2", Const, 1, ""},
+		{"DLT_FC_2_WITH_FRAME_DELIMS", Const, 1, ""},
+		{"DLT_FDDI", Const, 0, ""},
+		{"DLT_FLEXRAY", Const, 0, ""},
+		{"DLT_FRELAY", Const, 0, ""},
+		{"DLT_FRELAY_WITH_DIR", Const, 0, ""},
+		{"DLT_GCOM_SERIAL", Const, 0, ""},
+		{"DLT_GCOM_T1E1", Const, 0, ""},
+		{"DLT_GPF_F", Const, 0, ""},
+		{"DLT_GPF_T", Const, 0, ""},
+		{"DLT_GPRS_LLC", Const, 0, ""},
+		{"DLT_GSMTAP_ABIS", Const, 1, ""},
+		{"DLT_GSMTAP_UM", Const, 1, ""},
+		{"DLT_HDLC", Const, 1, ""},
+		{"DLT_HHDLC", Const, 0, ""},
+		{"DLT_HIPPI", Const, 1, ""},
+		{"DLT_IBM_SN", Const, 0, ""},
+		{"DLT_IBM_SP", Const, 0, ""},
+		{"DLT_IEEE802", Const, 0, ""},
+		{"DLT_IEEE802_11", Const, 0, ""},
+		{"DLT_IEEE802_11_RADIO", Const, 0, ""},
+		{"DLT_IEEE802_11_RADIO_AVS", Const, 0, ""},
+		{"DLT_IEEE802_15_4", Const, 0, ""},
+		{"DLT_IEEE802_15_4_LINUX", Const, 0, ""},
+		{"DLT_IEEE802_15_4_NOFCS", Const, 1, ""},
+		{"DLT_IEEE802_15_4_NONASK_PHY", Const, 0, ""},
+		{"DLT_IEEE802_16_MAC_CPS", Const, 0, ""},
+		{"DLT_IEEE802_16_MAC_CPS_RADIO", Const, 0, ""},
+		{"DLT_IPFILTER", Const, 0, ""},
+		{"DLT_IPMB", Const, 0, ""},
+		{"DLT_IPMB_LINUX", Const, 0, ""},
+		{"DLT_IPNET", Const, 1, ""},
+		{"DLT_IPOIB", Const, 1, ""},
+		{"DLT_IPV4", Const, 1, ""},
+		{"DLT_IPV6", Const, 1, ""},
+		{"DLT_IP_OVER_FC", Const, 0, ""},
+		{"DLT_JUNIPER_ATM1", Const, 0, ""},
+		{"DLT_JUNIPER_ATM2", Const, 0, ""},
+		{"DLT_JUNIPER_ATM_CEMIC", Const, 1, ""},
+		{"DLT_JUNIPER_CHDLC", Const, 0, ""},
+		{"DLT_JUNIPER_ES", Const, 0, ""},
+		{"DLT_JUNIPER_ETHER", Const, 0, ""},
+		{"DLT_JUNIPER_FIBRECHANNEL", Const, 1, ""},
+		{"DLT_JUNIPER_FRELAY", Const, 0, ""},
+		{"DLT_JUNIPER_GGSN", Const, 0, ""},
+		{"DLT_JUNIPER_ISM", Const, 0, ""},
+		{"DLT_JUNIPER_MFR", Const, 0, ""},
+		{"DLT_JUNIPER_MLFR", Const, 0, ""},
+		{"DLT_JUNIPER_MLPPP", Const, 0, ""},
+		{"DLT_JUNIPER_MONITOR", Const, 0, ""},
+		{"DLT_JUNIPER_PIC_PEER", Const, 0, ""},
+		{"DLT_JUNIPER_PPP", Const, 0, ""},
+		{"DLT_JUNIPER_PPPOE", Const, 0, ""},
+		{"DLT_JUNIPER_PPPOE_ATM", Const, 0, ""},
+		{"DLT_JUNIPER_SERVICES", Const, 0, ""},
+		{"DLT_JUNIPER_SRX_E2E", Const, 1, ""},
+		{"DLT_JUNIPER_ST", Const, 0, ""},
+		{"DLT_JUNIPER_VP", Const, 0, ""},
+		{"DLT_JUNIPER_VS", Const, 1, ""},
+		{"DLT_LAPB_WITH_DIR", Const, 0, ""},
+		{"DLT_LAPD", Const, 0, ""},
+		{"DLT_LIN", Const, 0, ""},
+		{"DLT_LINUX_EVDEV", Const, 1, ""},
+		{"DLT_LINUX_IRDA", Const, 0, ""},
+		{"DLT_LINUX_LAPD", Const, 0, ""},
+		{"DLT_LINUX_PPP_WITHDIRECTION", Const, 0, ""},
+		{"DLT_LINUX_SLL", Const, 0, ""},
+		{"DLT_LOOP", Const, 0, ""},
+		{"DLT_LTALK", Const, 0, ""},
+		{"DLT_MATCHING_MAX", Const, 1, ""},
+		{"DLT_MATCHING_MIN", Const, 1, ""},
+		{"DLT_MFR", Const, 0, ""},
+		{"DLT_MOST", Const, 0, ""},
+		{"DLT_MPEG_2_TS", Const, 1, ""},
+		{"DLT_MPLS", Const, 1, ""},
+		{"DLT_MTP2", Const, 0, ""},
+		{"DLT_MTP2_WITH_PHDR", Const, 0, ""},
+		{"DLT_MTP3", Const, 0, ""},
+		{"DLT_MUX27010", Const, 1, ""},
+		{"DLT_NETANALYZER", Const, 1, ""},
+		{"DLT_NETANALYZER_TRANSPARENT", Const, 1, ""},
+		{"DLT_NFC_LLCP", Const, 1, ""},
+		{"DLT_NFLOG", Const, 1, ""},
+		{"DLT_NG40", Const, 1, ""},
+		{"DLT_NULL", Const, 0, ""},
+		{"DLT_PCI_EXP", Const, 0, ""},
+		{"DLT_PFLOG", Const, 0, ""},
+		{"DLT_PFSYNC", Const, 0, ""},
+		{"DLT_PPI", Const, 0, ""},
+		{"DLT_PPP", Const, 0, ""},
+		{"DLT_PPP_BSDOS", Const, 0, ""},
+		{"DLT_PPP_ETHER", Const, 0, ""},
+		{"DLT_PPP_PPPD", Const, 0, ""},
+		{"DLT_PPP_SERIAL", Const, 0, ""},
+		{"DLT_PPP_WITH_DIR", Const, 0, ""},
+		{"DLT_PPP_WITH_DIRECTION", Const, 0, ""},
+		{"DLT_PRISM_HEADER", Const, 0, ""},
+		{"DLT_PRONET", Const, 0, ""},
+		{"DLT_RAIF1", Const, 0, ""},
+		{"DLT_RAW", Const, 0, ""},
+		{"DLT_RAWAF_MASK", Const, 1, ""},
+		{"DLT_RIO", Const, 0, ""},
+		{"DLT_SCCP", Const, 0, ""},
+		{"DLT_SITA", Const, 0, ""},
+		{"DLT_SLIP", Const, 0, ""},
+		{"DLT_SLIP_BSDOS", Const, 0, ""},
+		{"DLT_STANAG_5066_D_PDU", Const, 1, ""},
+		{"DLT_SUNATM", Const, 0, ""},
+		{"DLT_SYMANTEC_FIREWALL", Const, 0, ""},
+		{"DLT_TZSP", Const, 0, ""},
+		{"DLT_USB", Const, 0, ""},
+		{"DLT_USB_LINUX", Const, 0, ""},
+		{"DLT_USB_LINUX_MMAPPED", Const, 1, ""},
+		{"DLT_USER0", Const, 0, ""},
+		{"DLT_USER1", Const, 0, ""},
+		{"DLT_USER10", Const, 0, ""},
+		{"DLT_USER11", Const, 0, ""},
+		{"DLT_USER12", Const, 0, ""},
+		{"DLT_USER13", Const, 0, ""},
+		{"DLT_USER14", Const, 0, ""},
+		{"DLT_USER15", Const, 0, ""},
+		{"DLT_USER2", Const, 0, ""},
+		{"DLT_USER3", Const, 0, ""},
+		{"DLT_USER4", Const, 0, ""},
+		{"DLT_USER5", Const, 0, ""},
+		{"DLT_USER6", Const, 0, ""},
+		{"DLT_USER7", Const, 0, ""},
+		{"DLT_USER8", Const, 0, ""},
+		{"DLT_USER9", Const, 0, ""},
+		{"DLT_WIHART", Const, 1, ""},
+		{"DLT_X2E_SERIAL", Const, 0, ""},
+		{"DLT_X2E_XORAYA", Const, 0, ""},
+		{"DNSMXData", Type, 0, ""},
+		{"DNSMXData.NameExchange", Field, 0, ""},
+		{"DNSMXData.Pad", Field, 0, ""},
+		{"DNSMXData.Preference", Field, 0, ""},
+		{"DNSPTRData", Type, 0, ""},
+		{"DNSPTRData.Host", Field, 0, ""},
+		{"DNSRecord", Type, 0, ""},
+		{"DNSRecord.Data", Field, 0, ""},
+		{"DNSRecord.Dw", Field, 0, ""},
+		{"DNSRecord.Length", Field, 0, ""},
+		{"DNSRecord.Name", Field, 0, ""},
+		{"DNSRecord.Next", Field, 0, ""},
+		{"DNSRecord.Reserved", Field, 0, ""},
+		{"DNSRecord.Ttl", Field, 0, ""},
+		{"DNSRecord.Type", Field, 0, ""},
+		{"DNSSRVData", Type, 0, ""},
+		{"DNSSRVData.Pad", Field, 0, ""},
+		{"DNSSRVData.Port", Field, 0, ""},
+		{"DNSSRVData.Priority", Field, 0, ""},
+		{"DNSSRVData.Target", Field, 0, ""},
+		{"DNSSRVData.Weight", Field, 0, ""},
+		{"DNSTXTData", Type, 0, ""},
+		{"DNSTXTData.StringArray", Field, 0, ""},
+		{"DNSTXTData.StringCount", Field, 0, ""},
+		{"DNS_INFO_NO_RECORDS", Const, 4, ""},
+		{"DNS_TYPE_A", Const, 0, ""},
+		{"DNS_TYPE_A6", Const, 0, ""},
+		{"DNS_TYPE_AAAA", Const, 0, ""},
+		{"DNS_TYPE_ADDRS", Const, 0, ""},
+		{"DNS_TYPE_AFSDB", Const, 0, ""},
+		{"DNS_TYPE_ALL", Const, 0, ""},
+		{"DNS_TYPE_ANY", Const, 0, ""},
+		{"DNS_TYPE_ATMA", Const, 0, ""},
+		{"DNS_TYPE_AXFR", Const, 0, ""},
+		{"DNS_TYPE_CERT", Const, 0, ""},
+		{"DNS_TYPE_CNAME", Const, 0, ""},
+		{"DNS_TYPE_DHCID", Const, 0, ""},
+		{"DNS_TYPE_DNAME", Const, 0, ""},
+		{"DNS_TYPE_DNSKEY", Const, 0, ""},
+		{"DNS_TYPE_DS", Const, 0, ""},
+		{"DNS_TYPE_EID", Const, 0, ""},
+		{"DNS_TYPE_GID", Const, 0, ""},
+		{"DNS_TYPE_GPOS", Const, 0, ""},
+		{"DNS_TYPE_HINFO", Const, 0, ""},
+		{"DNS_TYPE_ISDN", Const, 0, ""},
+		{"DNS_TYPE_IXFR", Const, 0, ""},
+		{"DNS_TYPE_KEY", Const, 0, ""},
+		{"DNS_TYPE_KX", Const, 0, ""},
+		{"DNS_TYPE_LOC", Const, 0, ""},
+		{"DNS_TYPE_MAILA", Const, 0, ""},
+		{"DNS_TYPE_MAILB", Const, 0, ""},
+		{"DNS_TYPE_MB", Const, 0, ""},
+		{"DNS_TYPE_MD", Const, 0, ""},
+		{"DNS_TYPE_MF", Const, 0, ""},
+		{"DNS_TYPE_MG", Const, 0, ""},
+		{"DNS_TYPE_MINFO", Const, 0, ""},
+		{"DNS_TYPE_MR", Const, 0, ""},
+		{"DNS_TYPE_MX", Const, 0, ""},
+		{"DNS_TYPE_NAPTR", Const, 0, ""},
+		{"DNS_TYPE_NBSTAT", Const, 0, ""},
+		{"DNS_TYPE_NIMLOC", Const, 0, ""},
+		{"DNS_TYPE_NS", Const, 0, ""},
+		{"DNS_TYPE_NSAP", Const, 0, ""},
+		{"DNS_TYPE_NSAPPTR", Const, 0, ""},
+		{"DNS_TYPE_NSEC", Const, 0, ""},
+		{"DNS_TYPE_NULL", Const, 0, ""},
+		{"DNS_TYPE_NXT", Const, 0, ""},
+		{"DNS_TYPE_OPT", Const, 0, ""},
+		{"DNS_TYPE_PTR", Const, 0, ""},
+		{"DNS_TYPE_PX", Const, 0, ""},
+		{"DNS_TYPE_RP", Const, 0, ""},
+		{"DNS_TYPE_RRSIG", Const, 0, ""},
+		{"DNS_TYPE_RT", Const, 0, ""},
+		{"DNS_TYPE_SIG", Const, 0, ""},
+		{"DNS_TYPE_SINK", Const, 0, ""},
+		{"DNS_TYPE_SOA", Const, 0, ""},
+		{"DNS_TYPE_SRV", Const, 0, ""},
+		{"DNS_TYPE_TEXT", Const, 0, ""},
+		{"DNS_TYPE_TKEY", Const, 0, ""},
+		{"DNS_TYPE_TSIG", Const, 0, ""},
+		{"DNS_TYPE_UID", Const, 0, ""},
+		{"DNS_TYPE_UINFO", Const, 0, ""},
+		{"DNS_TYPE_UNSPEC", Const, 0, ""},
+		{"DNS_TYPE_WINS", Const, 0, ""},
+		{"DNS_TYPE_WINSR", Const, 0, ""},
+		{"DNS_TYPE_WKS", Const, 0, ""},
+		{"DNS_TYPE_X25", Const, 0, ""},
+		{"DT_BLK", Const, 0, ""},
+		{"DT_CHR", Const, 0, ""},
+		{"DT_DIR", Const, 0, ""},
+		{"DT_FIFO", Const, 0, ""},
+		{"DT_LNK", Const, 0, ""},
+		{"DT_REG", Const, 0, ""},
+		{"DT_SOCK", Const, 0, ""},
+		{"DT_UNKNOWN", Const, 0, ""},
+		{"DT_WHT", Const, 0, ""},
+		{"DUPLICATE_CLOSE_SOURCE", Const, 0, ""},
+		{"DUPLICATE_SAME_ACCESS", Const, 0, ""},
+		{"DeleteFile", Func, 0, ""},
+		{"DetachLsf", Func, 0, "func(fd int) error"},
+		{"DeviceIoControl", Func, 4, ""},
+		{"Dirent", Type, 0, ""},
+		{"Dirent.Fileno", Field, 0, ""},
+		{"Dirent.Ino", Field, 0, ""},
+		{"Dirent.Name", Field, 0, ""},
+		{"Dirent.Namlen", Field, 0, ""},
+		{"Dirent.Off", Field, 0, ""},
+		{"Dirent.Pad0", Field, 12, ""},
+		{"Dirent.Pad1", Field, 12, ""},
+		{"Dirent.Pad_cgo_0", Field, 0, ""},
+		{"Dirent.Reclen", Field, 0, ""},
+		{"Dirent.Seekoff", Field, 0, ""},
+		{"Dirent.Type", Field, 0, ""},
+		{"Dirent.X__d_padding", Field, 3, ""},
+		{"DnsNameCompare", Func, 4, ""},
+		{"DnsQuery", Func, 0, ""},
+		{"DnsRecordListFree", Func, 0, ""},
+		{"DnsSectionAdditional", Const, 4, ""},
+		{"DnsSectionAnswer", Const, 4, ""},
+		{"DnsSectionAuthority", Const, 4, ""},
+		{"DnsSectionQuestion", Const, 4, ""},
+		{"Dup", Func, 0, "func(oldfd int) (fd int, err error)"},
+		{"Dup2", Func, 0, "func(oldfd int, newfd int) (err error)"},
+		{"Dup3", Func, 2, "func(oldfd int, newfd int, flags int) (err error)"},
+		{"DuplicateHandle", Func, 0, ""},
+		{"E2BIG", Const, 0, ""},
+		{"EACCES", Const, 0, ""},
+		{"EADDRINUSE", Const, 0, ""},
+		{"EADDRNOTAVAIL", Const, 0, ""},
+		{"EADV", Const, 0, ""},
+		{"EAFNOSUPPORT", Const, 0, ""},
+		{"EAGAIN", Const, 0, ""},
+		{"EALREADY", Const, 0, ""},
+		{"EAUTH", Const, 0, ""},
+		{"EBADARCH", Const, 0, ""},
+		{"EBADE", Const, 0, ""},
+		{"EBADEXEC", Const, 0, ""},
+		{"EBADF", Const, 0, ""},
+		{"EBADFD", Const, 0, ""},
+		{"EBADMACHO", Const, 0, ""},
+		{"EBADMSG", Const, 0, ""},
+		{"EBADR", Const, 0, ""},
+		{"EBADRPC", Const, 0, ""},
+		{"EBADRQC", Const, 0, ""},
+		{"EBADSLT", Const, 0, ""},
+		{"EBFONT", Const, 0, ""},
+		{"EBUSY", Const, 0, ""},
+		{"ECANCELED", Const, 0, ""},
+		{"ECAPMODE", Const, 1, ""},
+		{"ECHILD", Const, 0, ""},
+		{"ECHO", Const, 0, ""},
+		{"ECHOCTL", Const, 0, ""},
+		{"ECHOE", Const, 0, ""},
+		{"ECHOK", Const, 0, ""},
+		{"ECHOKE", Const, 0, ""},
+		{"ECHONL", Const, 0, ""},
+		{"ECHOPRT", Const, 0, ""},
+		{"ECHRNG", Const, 0, ""},
+		{"ECOMM", Const, 0, ""},
+		{"ECONNABORTED", Const, 0, ""},
+		{"ECONNREFUSED", Const, 0, ""},
+		{"ECONNRESET", Const, 0, ""},
+		{"EDEADLK", Const, 0, ""},
+		{"EDEADLOCK", Const, 0, ""},
+		{"EDESTADDRREQ", Const, 0, ""},
+		{"EDEVERR", Const, 0, ""},
+		{"EDOM", Const, 0, ""},
+		{"EDOOFUS", Const, 0, ""},
+		{"EDOTDOT", Const, 0, ""},
+		{"EDQUOT", Const, 0, ""},
+		{"EEXIST", Const, 0, ""},
+		{"EFAULT", Const, 0, ""},
+		{"EFBIG", Const, 0, ""},
+		{"EFER_LMA", Const, 1, ""},
+		{"EFER_LME", Const, 1, ""},
+		{"EFER_NXE", Const, 1, ""},
+		{"EFER_SCE", Const, 1, ""},
+		{"EFTYPE", Const, 0, ""},
+		{"EHOSTDOWN", Const, 0, ""},
+		{"EHOSTUNREACH", Const, 0, ""},
+		{"EHWPOISON", Const, 0, ""},
+		{"EIDRM", Const, 0, ""},
+		{"EILSEQ", Const, 0, ""},
+		{"EINPROGRESS", Const, 0, ""},
+		{"EINTR", Const, 0, ""},
+		{"EINVAL", Const, 0, ""},
+		{"EIO", Const, 0, ""},
+		{"EIPSEC", Const, 1, ""},
+		{"EISCONN", Const, 0, ""},
+		{"EISDIR", Const, 0, ""},
+		{"EISNAM", Const, 0, ""},
+		{"EKEYEXPIRED", Const, 0, ""},
+		{"EKEYREJECTED", Const, 0, ""},
+		{"EKEYREVOKED", Const, 0, ""},
+		{"EL2HLT", Const, 0, ""},
+		{"EL2NSYNC", Const, 0, ""},
+		{"EL3HLT", Const, 0, ""},
+		{"EL3RST", Const, 0, ""},
+		{"ELAST", Const, 0, ""},
+		{"ELF_NGREG", Const, 0, ""},
+		{"ELF_PRARGSZ", Const, 0, ""},
+		{"ELIBACC", Const, 0, ""},
+		{"ELIBBAD", Const, 0, ""},
+		{"ELIBEXEC", Const, 0, ""},
+		{"ELIBMAX", Const, 0, ""},
+		{"ELIBSCN", Const, 0, ""},
+		{"ELNRNG", Const, 0, ""},
+		{"ELOOP", Const, 0, ""},
+		{"EMEDIUMTYPE", Const, 0, ""},
+		{"EMFILE", Const, 0, ""},
+		{"EMLINK", Const, 0, ""},
+		{"EMSGSIZE", Const, 0, ""},
+		{"EMT_TAGOVF", Const, 1, ""},
+		{"EMULTIHOP", Const, 0, ""},
+		{"EMUL_ENABLED", Const, 1, ""},
+		{"EMUL_LINUX", Const, 1, ""},
+		{"EMUL_LINUX32", Const, 1, ""},
+		{"EMUL_MAXID", Const, 1, ""},
+		{"EMUL_NATIVE", Const, 1, ""},
+		{"ENAMETOOLONG", Const, 0, ""},
+		{"ENAVAIL", Const, 0, ""},
+		{"ENDRUNDISC", Const, 1, ""},
+		{"ENEEDAUTH", Const, 0, ""},
+		{"ENETDOWN", Const, 0, ""},
+		{"ENETRESET", Const, 0, ""},
+		{"ENETUNREACH", Const, 0, ""},
+		{"ENFILE", Const, 0, ""},
+		{"ENOANO", Const, 0, ""},
+		{"ENOATTR", Const, 0, ""},
+		{"ENOBUFS", Const, 0, ""},
+		{"ENOCSI", Const, 0, ""},
+		{"ENODATA", Const, 0, ""},
+		{"ENODEV", Const, 0, ""},
+		{"ENOENT", Const, 0, ""},
+		{"ENOEXEC", Const, 0, ""},
+		{"ENOKEY", Const, 0, ""},
+		{"ENOLCK", Const, 0, ""},
+		{"ENOLINK", Const, 0, ""},
+		{"ENOMEDIUM", Const, 0, ""},
+		{"ENOMEM", Const, 0, ""},
+		{"ENOMSG", Const, 0, ""},
+		{"ENONET", Const, 0, ""},
+		{"ENOPKG", Const, 0, ""},
+		{"ENOPOLICY", Const, 0, ""},
+		{"ENOPROTOOPT", Const, 0, ""},
+		{"ENOSPC", Const, 0, ""},
+		{"ENOSR", Const, 0, ""},
+		{"ENOSTR", Const, 0, ""},
+		{"ENOSYS", Const, 0, ""},
+		{"ENOTBLK", Const, 0, ""},
+		{"ENOTCAPABLE", Const, 0, ""},
+		{"ENOTCONN", Const, 0, ""},
+		{"ENOTDIR", Const, 0, ""},
+		{"ENOTEMPTY", Const, 0, ""},
+		{"ENOTNAM", Const, 0, ""},
+		{"ENOTRECOVERABLE", Const, 0, ""},
+		{"ENOTSOCK", Const, 0, ""},
+		{"ENOTSUP", Const, 0, ""},
+		{"ENOTTY", Const, 0, ""},
+		{"ENOTUNIQ", Const, 0, ""},
+		{"ENXIO", Const, 0, ""},
+		{"EN_SW_CTL_INF", Const, 1, ""},
+		{"EN_SW_CTL_PREC", Const, 1, ""},
+		{"EN_SW_CTL_ROUND", Const, 1, ""},
+		{"EN_SW_DATACHAIN", Const, 1, ""},
+		{"EN_SW_DENORM", Const, 1, ""},
+		{"EN_SW_INVOP", Const, 1, ""},
+		{"EN_SW_OVERFLOW", Const, 1, ""},
+		{"EN_SW_PRECLOSS", Const, 1, ""},
+		{"EN_SW_UNDERFLOW", Const, 1, ""},
+		{"EN_SW_ZERODIV", Const, 1, ""},
+		{"EOPNOTSUPP", Const, 0, ""},
+		{"EOVERFLOW", Const, 0, ""},
+		{"EOWNERDEAD", Const, 0, ""},
+		{"EPERM", Const, 0, ""},
+		{"EPFNOSUPPORT", Const, 0, ""},
+		{"EPIPE", Const, 0, ""},
+		{"EPOLLERR", Const, 0, ""},
+		{"EPOLLET", Const, 0, ""},
+		{"EPOLLHUP", Const, 0, ""},
+		{"EPOLLIN", Const, 0, ""},
+		{"EPOLLMSG", Const, 0, ""},
+		{"EPOLLONESHOT", Const, 0, ""},
+		{"EPOLLOUT", Const, 0, ""},
+		{"EPOLLPRI", Const, 0, ""},
+		{"EPOLLRDBAND", Const, 0, ""},
+		{"EPOLLRDHUP", Const, 0, ""},
+		{"EPOLLRDNORM", Const, 0, ""},
+		{"EPOLLWRBAND", Const, 0, ""},
+		{"EPOLLWRNORM", Const, 0, ""},
+		{"EPOLL_CLOEXEC", Const, 0, ""},
+		{"EPOLL_CTL_ADD", Const, 0, ""},
+		{"EPOLL_CTL_DEL", Const, 0, ""},
+		{"EPOLL_CTL_MOD", Const, 0, ""},
+		{"EPOLL_NONBLOCK", Const, 0, ""},
+		{"EPROCLIM", Const, 0, ""},
+		{"EPROCUNAVAIL", Const, 0, ""},
+		{"EPROGMISMATCH", Const, 0, ""},
+		{"EPROGUNAVAIL", Const, 0, ""},
+		{"EPROTO", Const, 0, ""},
+		{"EPROTONOSUPPORT", Const, 0, ""},
+		{"EPROTOTYPE", Const, 0, ""},
+		{"EPWROFF", Const, 0, ""},
+		{"EQFULL", Const, 16, ""},
+		{"ERANGE", Const, 0, ""},
+		{"EREMCHG", Const, 0, ""},
+		{"EREMOTE", Const, 0, ""},
+		{"EREMOTEIO", Const, 0, ""},
+		{"ERESTART", Const, 0, ""},
+		{"ERFKILL", Const, 0, ""},
+		{"EROFS", Const, 0, ""},
+		{"ERPCMISMATCH", Const, 0, ""},
+		{"ERROR_ACCESS_DENIED", Const, 0, ""},
+		{"ERROR_ALREADY_EXISTS", Const, 0, ""},
+		{"ERROR_BROKEN_PIPE", Const, 0, ""},
+		{"ERROR_BUFFER_OVERFLOW", Const, 0, ""},
+		{"ERROR_DIR_NOT_EMPTY", Const, 8, ""},
+		{"ERROR_ENVVAR_NOT_FOUND", Const, 0, ""},
+		{"ERROR_FILE_EXISTS", Const, 0, ""},
+		{"ERROR_FILE_NOT_FOUND", Const, 0, ""},
+		{"ERROR_HANDLE_EOF", Const, 2, ""},
+		{"ERROR_INSUFFICIENT_BUFFER", Const, 0, ""},
+		{"ERROR_IO_PENDING", Const, 0, ""},
+		{"ERROR_MOD_NOT_FOUND", Const, 0, ""},
+		{"ERROR_MORE_DATA", Const, 3, ""},
+		{"ERROR_NETNAME_DELETED", Const, 3, ""},
+		{"ERROR_NOT_FOUND", Const, 1, ""},
+		{"ERROR_NO_MORE_FILES", Const, 0, ""},
+		{"ERROR_OPERATION_ABORTED", Const, 0, ""},
+		{"ERROR_PATH_NOT_FOUND", Const, 0, ""},
+		{"ERROR_PRIVILEGE_NOT_HELD", Const, 4, ""},
+		{"ERROR_PROC_NOT_FOUND", Const, 0, ""},
+		{"ESHLIBVERS", Const, 0, ""},
+		{"ESHUTDOWN", Const, 0, ""},
+		{"ESOCKTNOSUPPORT", Const, 0, ""},
+		{"ESPIPE", Const, 0, ""},
+		{"ESRCH", Const, 0, ""},
+		{"ESRMNT", Const, 0, ""},
+		{"ESTALE", Const, 0, ""},
+		{"ESTRPIPE", Const, 0, ""},
+		{"ETHERCAP_JUMBO_MTU", Const, 1, ""},
+		{"ETHERCAP_VLAN_HWTAGGING", Const, 1, ""},
+		{"ETHERCAP_VLAN_MTU", Const, 1, ""},
+		{"ETHERMIN", Const, 1, ""},
+		{"ETHERMTU", Const, 1, ""},
+		{"ETHERMTU_JUMBO", Const, 1, ""},
+		{"ETHERTYPE_8023", Const, 1, ""},
+		{"ETHERTYPE_AARP", Const, 1, ""},
+		{"ETHERTYPE_ACCTON", Const, 1, ""},
+		{"ETHERTYPE_AEONIC", Const, 1, ""},
+		{"ETHERTYPE_ALPHA", Const, 1, ""},
+		{"ETHERTYPE_AMBER", Const, 1, ""},
+		{"ETHERTYPE_AMOEBA", Const, 1, ""},
+		{"ETHERTYPE_AOE", Const, 1, ""},
+		{"ETHERTYPE_APOLLO", Const, 1, ""},
+		{"ETHERTYPE_APOLLODOMAIN", Const, 1, ""},
+		{"ETHERTYPE_APPLETALK", Const, 1, ""},
+		{"ETHERTYPE_APPLITEK", Const, 1, ""},
+		{"ETHERTYPE_ARGONAUT", Const, 1, ""},
+		{"ETHERTYPE_ARP", Const, 1, ""},
+		{"ETHERTYPE_AT", Const, 1, ""},
+		{"ETHERTYPE_ATALK", Const, 1, ""},
+		{"ETHERTYPE_ATOMIC", Const, 1, ""},
+		{"ETHERTYPE_ATT", Const, 1, ""},
+		{"ETHERTYPE_ATTSTANFORD", Const, 1, ""},
+		{"ETHERTYPE_AUTOPHON", Const, 1, ""},
+		{"ETHERTYPE_AXIS", Const, 1, ""},
+		{"ETHERTYPE_BCLOOP", Const, 1, ""},
+		{"ETHERTYPE_BOFL", Const, 1, ""},
+		{"ETHERTYPE_CABLETRON", Const, 1, ""},
+		{"ETHERTYPE_CHAOS", Const, 1, ""},
+		{"ETHERTYPE_COMDESIGN", Const, 1, ""},
+		{"ETHERTYPE_COMPUGRAPHIC", Const, 1, ""},
+		{"ETHERTYPE_COUNTERPOINT", Const, 1, ""},
+		{"ETHERTYPE_CRONUS", Const, 1, ""},
+		{"ETHERTYPE_CRONUSVLN", Const, 1, ""},
+		{"ETHERTYPE_DCA", Const, 1, ""},
+		{"ETHERTYPE_DDE", Const, 1, ""},
+		{"ETHERTYPE_DEBNI", Const, 1, ""},
+		{"ETHERTYPE_DECAM", Const, 1, ""},
+		{"ETHERTYPE_DECCUST", Const, 1, ""},
+		{"ETHERTYPE_DECDIAG", Const, 1, ""},
+		{"ETHERTYPE_DECDNS", Const, 1, ""},
+		{"ETHERTYPE_DECDTS", Const, 1, ""},
+		{"ETHERTYPE_DECEXPER", Const, 1, ""},
+		{"ETHERTYPE_DECLAST", Const, 1, ""},
+		{"ETHERTYPE_DECLTM", Const, 1, ""},
+		{"ETHERTYPE_DECMUMPS", Const, 1, ""},
+		{"ETHERTYPE_DECNETBIOS", Const, 1, ""},
+		{"ETHERTYPE_DELTACON", Const, 1, ""},
+		{"ETHERTYPE_DIDDLE", Const, 1, ""},
+		{"ETHERTYPE_DLOG1", Const, 1, ""},
+		{"ETHERTYPE_DLOG2", Const, 1, ""},
+		{"ETHERTYPE_DN", Const, 1, ""},
+		{"ETHERTYPE_DOGFIGHT", Const, 1, ""},
+		{"ETHERTYPE_DSMD", Const, 1, ""},
+		{"ETHERTYPE_ECMA", Const, 1, ""},
+		{"ETHERTYPE_ENCRYPT", Const, 1, ""},
+		{"ETHERTYPE_ES", Const, 1, ""},
+		{"ETHERTYPE_EXCELAN", Const, 1, ""},
+		{"ETHERTYPE_EXPERDATA", Const, 1, ""},
+		{"ETHERTYPE_FLIP", Const, 1, ""},
+		{"ETHERTYPE_FLOWCONTROL", Const, 1, ""},
+		{"ETHERTYPE_FRARP", Const, 1, ""},
+		{"ETHERTYPE_GENDYN", Const, 1, ""},
+		{"ETHERTYPE_HAYES", Const, 1, ""},
+		{"ETHERTYPE_HIPPI_FP", Const, 1, ""},
+		{"ETHERTYPE_HITACHI", Const, 1, ""},
+		{"ETHERTYPE_HP", Const, 1, ""},
+		{"ETHERTYPE_IEEEPUP", Const, 1, ""},
+		{"ETHERTYPE_IEEEPUPAT", Const, 1, ""},
+		{"ETHERTYPE_IMLBL", Const, 1, ""},
+		{"ETHERTYPE_IMLBLDIAG", Const, 1, ""},
+		{"ETHERTYPE_IP", Const, 1, ""},
+		{"ETHERTYPE_IPAS", Const, 1, ""},
+		{"ETHERTYPE_IPV6", Const, 1, ""},
+		{"ETHERTYPE_IPX", Const, 1, ""},
+		{"ETHERTYPE_IPXNEW", Const, 1, ""},
+		{"ETHERTYPE_KALPANA", Const, 1, ""},
+		{"ETHERTYPE_LANBRIDGE", Const, 1, ""},
+		{"ETHERTYPE_LANPROBE", Const, 1, ""},
+		{"ETHERTYPE_LAT", Const, 1, ""},
+		{"ETHERTYPE_LBACK", Const, 1, ""},
+		{"ETHERTYPE_LITTLE", Const, 1, ""},
+		{"ETHERTYPE_LLDP", Const, 1, ""},
+		{"ETHERTYPE_LOGICRAFT", Const, 1, ""},
+		{"ETHERTYPE_LOOPBACK", Const, 1, ""},
+		{"ETHERTYPE_MATRA", Const, 1, ""},
+		{"ETHERTYPE_MAX", Const, 1, ""},
+		{"ETHERTYPE_MERIT", Const, 1, ""},
+		{"ETHERTYPE_MICP", Const, 1, ""},
+		{"ETHERTYPE_MOPDL", Const, 1, ""},
+		{"ETHERTYPE_MOPRC", Const, 1, ""},
+		{"ETHERTYPE_MOTOROLA", Const, 1, ""},
+		{"ETHERTYPE_MPLS", Const, 1, ""},
+		{"ETHERTYPE_MPLS_MCAST", Const, 1, ""},
+		{"ETHERTYPE_MUMPS", Const, 1, ""},
+		{"ETHERTYPE_NBPCC", Const, 1, ""},
+		{"ETHERTYPE_NBPCLAIM", Const, 1, ""},
+		{"ETHERTYPE_NBPCLREQ", Const, 1, ""},
+		{"ETHERTYPE_NBPCLRSP", Const, 1, ""},
+		{"ETHERTYPE_NBPCREQ", Const, 1, ""},
+		{"ETHERTYPE_NBPCRSP", Const, 1, ""},
+		{"ETHERTYPE_NBPDG", Const, 1, ""},
+		{"ETHERTYPE_NBPDGB", Const, 1, ""},
+		{"ETHERTYPE_NBPDLTE", Const, 1, ""},
+		{"ETHERTYPE_NBPRAR", Const, 1, ""},
+		{"ETHERTYPE_NBPRAS", Const, 1, ""},
+		{"ETHERTYPE_NBPRST", Const, 1, ""},
+		{"ETHERTYPE_NBPSCD", Const, 1, ""},
+		{"ETHERTYPE_NBPVCD", Const, 1, ""},
+		{"ETHERTYPE_NBS", Const, 1, ""},
+		{"ETHERTYPE_NCD", Const, 1, ""},
+		{"ETHERTYPE_NESTAR", Const, 1, ""},
+		{"ETHERTYPE_NETBEUI", Const, 1, ""},
+		{"ETHERTYPE_NOVELL", Const, 1, ""},
+		{"ETHERTYPE_NS", Const, 1, ""},
+		{"ETHERTYPE_NSAT", Const, 1, ""},
+		{"ETHERTYPE_NSCOMPAT", Const, 1, ""},
+		{"ETHERTYPE_NTRAILER", Const, 1, ""},
+		{"ETHERTYPE_OS9", Const, 1, ""},
+		{"ETHERTYPE_OS9NET", Const, 1, ""},
+		{"ETHERTYPE_PACER", Const, 1, ""},
+		{"ETHERTYPE_PAE", Const, 1, ""},
+		{"ETHERTYPE_PCS", Const, 1, ""},
+		{"ETHERTYPE_PLANNING", Const, 1, ""},
+		{"ETHERTYPE_PPP", Const, 1, ""},
+		{"ETHERTYPE_PPPOE", Const, 1, ""},
+		{"ETHERTYPE_PPPOEDISC", Const, 1, ""},
+		{"ETHERTYPE_PRIMENTS", Const, 1, ""},
+		{"ETHERTYPE_PUP", Const, 1, ""},
+		{"ETHERTYPE_PUPAT", Const, 1, ""},
+		{"ETHERTYPE_QINQ", Const, 1, ""},
+		{"ETHERTYPE_RACAL", Const, 1, ""},
+		{"ETHERTYPE_RATIONAL", Const, 1, ""},
+		{"ETHERTYPE_RAWFR", Const, 1, ""},
+		{"ETHERTYPE_RCL", Const, 1, ""},
+		{"ETHERTYPE_RDP", Const, 1, ""},
+		{"ETHERTYPE_RETIX", Const, 1, ""},
+		{"ETHERTYPE_REVARP", Const, 1, ""},
+		{"ETHERTYPE_SCA", Const, 1, ""},
+		{"ETHERTYPE_SECTRA", Const, 1, ""},
+		{"ETHERTYPE_SECUREDATA", Const, 1, ""},
+		{"ETHERTYPE_SGITW", Const, 1, ""},
+		{"ETHERTYPE_SG_BOUNCE", Const, 1, ""},
+		{"ETHERTYPE_SG_DIAG", Const, 1, ""},
+		{"ETHERTYPE_SG_NETGAMES", Const, 1, ""},
+		{"ETHERTYPE_SG_RESV", Const, 1, ""},
+		{"ETHERTYPE_SIMNET", Const, 1, ""},
+		{"ETHERTYPE_SLOW", Const, 1, ""},
+		{"ETHERTYPE_SLOWPROTOCOLS", Const, 1, ""},
+		{"ETHERTYPE_SNA", Const, 1, ""},
+		{"ETHERTYPE_SNMP", Const, 1, ""},
+		{"ETHERTYPE_SONIX", Const, 1, ""},
+		{"ETHERTYPE_SPIDER", Const, 1, ""},
+		{"ETHERTYPE_SPRITE", Const, 1, ""},
+		{"ETHERTYPE_STP", Const, 1, ""},
+		{"ETHERTYPE_TALARIS", Const, 1, ""},
+		{"ETHERTYPE_TALARISMC", Const, 1, ""},
+		{"ETHERTYPE_TCPCOMP", Const, 1, ""},
+		{"ETHERTYPE_TCPSM", Const, 1, ""},
+		{"ETHERTYPE_TEC", Const, 1, ""},
+		{"ETHERTYPE_TIGAN", Const, 1, ""},
+		{"ETHERTYPE_TRAIL", Const, 1, ""},
+		{"ETHERTYPE_TRANSETHER", Const, 1, ""},
+		{"ETHERTYPE_TYMSHARE", Const, 1, ""},
+		{"ETHERTYPE_UBBST", Const, 1, ""},
+		{"ETHERTYPE_UBDEBUG", Const, 1, ""},
+		{"ETHERTYPE_UBDIAGLOOP", Const, 1, ""},
+		{"ETHERTYPE_UBDL", Const, 1, ""},
+		{"ETHERTYPE_UBNIU", Const, 1, ""},
+		{"ETHERTYPE_UBNMC", Const, 1, ""},
+		{"ETHERTYPE_VALID", Const, 1, ""},
+		{"ETHERTYPE_VARIAN", Const, 1, ""},
+		{"ETHERTYPE_VAXELN", Const, 1, ""},
+		{"ETHERTYPE_VEECO", Const, 1, ""},
+		{"ETHERTYPE_VEXP", Const, 1, ""},
+		{"ETHERTYPE_VGLAB", Const, 1, ""},
+		{"ETHERTYPE_VINES", Const, 1, ""},
+		{"ETHERTYPE_VINESECHO", Const, 1, ""},
+		{"ETHERTYPE_VINESLOOP", Const, 1, ""},
+		{"ETHERTYPE_VITAL", Const, 1, ""},
+		{"ETHERTYPE_VLAN", Const, 1, ""},
+		{"ETHERTYPE_VLTLMAN", Const, 1, ""},
+		{"ETHERTYPE_VPROD", Const, 1, ""},
+		{"ETHERTYPE_VURESERVED", Const, 1, ""},
+		{"ETHERTYPE_WATERLOO", Const, 1, ""},
+		{"ETHERTYPE_WELLFLEET", Const, 1, ""},
+		{"ETHERTYPE_X25", Const, 1, ""},
+		{"ETHERTYPE_X75", Const, 1, ""},
+		{"ETHERTYPE_XNSSM", Const, 1, ""},
+		{"ETHERTYPE_XTP", Const, 1, ""},
+		{"ETHER_ADDR_LEN", Const, 1, ""},
+		{"ETHER_ALIGN", Const, 1, ""},
+		{"ETHER_CRC_LEN", Const, 1, ""},
+		{"ETHER_CRC_POLY_BE", Const, 1, ""},
+		{"ETHER_CRC_POLY_LE", Const, 1, ""},
+		{"ETHER_HDR_LEN", Const, 1, ""},
+		{"ETHER_MAX_DIX_LEN", Const, 1, ""},
+		{"ETHER_MAX_LEN", Const, 1, ""},
+		{"ETHER_MAX_LEN_JUMBO", Const, 1, ""},
+		{"ETHER_MIN_LEN", Const, 1, ""},
+		{"ETHER_PPPOE_ENCAP_LEN", Const, 1, ""},
+		{"ETHER_TYPE_LEN", Const, 1, ""},
+		{"ETHER_VLAN_ENCAP_LEN", Const, 1, ""},
+		{"ETH_P_1588", Const, 0, ""},
+		{"ETH_P_8021Q", Const, 0, ""},
+		{"ETH_P_802_2", Const, 0, ""},
+		{"ETH_P_802_3", Const, 0, ""},
+		{"ETH_P_AARP", Const, 0, ""},
+		{"ETH_P_ALL", Const, 0, ""},
+		{"ETH_P_AOE", Const, 0, ""},
+		{"ETH_P_ARCNET", Const, 0, ""},
+		{"ETH_P_ARP", Const, 0, ""},
+		{"ETH_P_ATALK", Const, 0, ""},
+		{"ETH_P_ATMFATE", Const, 0, ""},
+		{"ETH_P_ATMMPOA", Const, 0, ""},
+		{"ETH_P_AX25", Const, 0, ""},
+		{"ETH_P_BPQ", Const, 0, ""},
+		{"ETH_P_CAIF", Const, 0, ""},
+		{"ETH_P_CAN", Const, 0, ""},
+		{"ETH_P_CONTROL", Const, 0, ""},
+		{"ETH_P_CUST", Const, 0, ""},
+		{"ETH_P_DDCMP", Const, 0, ""},
+		{"ETH_P_DEC", Const, 0, ""},
+		{"ETH_P_DIAG", Const, 0, ""},
+		{"ETH_P_DNA_DL", Const, 0, ""},
+		{"ETH_P_DNA_RC", Const, 0, ""},
+		{"ETH_P_DNA_RT", Const, 0, ""},
+		{"ETH_P_DSA", Const, 0, ""},
+		{"ETH_P_ECONET", Const, 0, ""},
+		{"ETH_P_EDSA", Const, 0, ""},
+		{"ETH_P_FCOE", Const, 0, ""},
+		{"ETH_P_FIP", Const, 0, ""},
+		{"ETH_P_HDLC", Const, 0, ""},
+		{"ETH_P_IEEE802154", Const, 0, ""},
+		{"ETH_P_IEEEPUP", Const, 0, ""},
+		{"ETH_P_IEEEPUPAT", Const, 0, ""},
+		{"ETH_P_IP", Const, 0, ""},
+		{"ETH_P_IPV6", Const, 0, ""},
+		{"ETH_P_IPX", Const, 0, ""},
+		{"ETH_P_IRDA", Const, 0, ""},
+		{"ETH_P_LAT", Const, 0, ""},
+		{"ETH_P_LINK_CTL", Const, 0, ""},
+		{"ETH_P_LOCALTALK", Const, 0, ""},
+		{"ETH_P_LOOP", Const, 0, ""},
+		{"ETH_P_MOBITEX", Const, 0, ""},
+		{"ETH_P_MPLS_MC", Const, 0, ""},
+		{"ETH_P_MPLS_UC", Const, 0, ""},
+		{"ETH_P_PAE", Const, 0, ""},
+		{"ETH_P_PAUSE", Const, 0, ""},
+		{"ETH_P_PHONET", Const, 0, ""},
+		{"ETH_P_PPPTALK", Const, 0, ""},
+		{"ETH_P_PPP_DISC", Const, 0, ""},
+		{"ETH_P_PPP_MP", Const, 0, ""},
+		{"ETH_P_PPP_SES", Const, 0, ""},
+		{"ETH_P_PUP", Const, 0, ""},
+		{"ETH_P_PUPAT", Const, 0, ""},
+		{"ETH_P_RARP", Const, 0, ""},
+		{"ETH_P_SCA", Const, 0, ""},
+		{"ETH_P_SLOW", Const, 0, ""},
+		{"ETH_P_SNAP", Const, 0, ""},
+		{"ETH_P_TEB", Const, 0, ""},
+		{"ETH_P_TIPC", Const, 0, ""},
+		{"ETH_P_TRAILER", Const, 0, ""},
+		{"ETH_P_TR_802_2", Const, 0, ""},
+		{"ETH_P_WAN_PPP", Const, 0, ""},
+		{"ETH_P_WCCP", Const, 0, ""},
+		{"ETH_P_X25", Const, 0, ""},
+		{"ETIME", Const, 0, ""},
+		{"ETIMEDOUT", Const, 0, ""},
+		{"ETOOMANYREFS", Const, 0, ""},
+		{"ETXTBSY", Const, 0, ""},
+		{"EUCLEAN", Const, 0, ""},
+		{"EUNATCH", Const, 0, ""},
+		{"EUSERS", Const, 0, ""},
+		{"EVFILT_AIO", Const, 0, ""},
+		{"EVFILT_FS", Const, 0, ""},
+		{"EVFILT_LIO", Const, 0, ""},
+		{"EVFILT_MACHPORT", Const, 0, ""},
+		{"EVFILT_PROC", Const, 0, ""},
+		{"EVFILT_READ", Const, 0, ""},
+		{"EVFILT_SIGNAL", Const, 0, ""},
+		{"EVFILT_SYSCOUNT", Const, 0, ""},
+		{"EVFILT_THREADMARKER", Const, 0, ""},
+		{"EVFILT_TIMER", Const, 0, ""},
+		{"EVFILT_USER", Const, 0, ""},
+		{"EVFILT_VM", Const, 0, ""},
+		{"EVFILT_VNODE", Const, 0, ""},
+		{"EVFILT_WRITE", Const, 0, ""},
+		{"EV_ADD", Const, 0, ""},
+		{"EV_CLEAR", Const, 0, ""},
+		{"EV_DELETE", Const, 0, ""},
+		{"EV_DISABLE", Const, 0, ""},
+		{"EV_DISPATCH", Const, 0, ""},
+		{"EV_DROP", Const, 3, ""},
+		{"EV_ENABLE", Const, 0, ""},
+		{"EV_EOF", Const, 0, ""},
+		{"EV_ERROR", Const, 0, ""},
+		{"EV_FLAG0", Const, 0, ""},
+		{"EV_FLAG1", Const, 0, ""},
+		{"EV_ONESHOT", Const, 0, ""},
+		{"EV_OOBAND", Const, 0, ""},
+		{"EV_POLL", Const, 0, ""},
+		{"EV_RECEIPT", Const, 0, ""},
+		{"EV_SYSFLAGS", Const, 0, ""},
+		{"EWINDOWS", Const, 0, ""},
+		{"EWOULDBLOCK", Const, 0, ""},
+		{"EXDEV", Const, 0, ""},
+		{"EXFULL", Const, 0, ""},
+		{"EXTA", Const, 0, ""},
+		{"EXTB", Const, 0, ""},
+		{"EXTPROC", Const, 0, ""},
+		{"Environ", Func, 0, "func() []string"},
+		{"EpollCreate", Func, 0, "func(size int) (fd int, err error)"},
+		{"EpollCreate1", Func, 0, "func(flag int) (fd int, err error)"},
+		{"EpollCtl", Func, 0, "func(epfd int, op int, fd int, event *EpollEvent) (err error)"},
+		{"EpollEvent", Type, 0, ""},
+		{"EpollEvent.Events", Field, 0, ""},
+		{"EpollEvent.Fd", Field, 0, ""},
+		{"EpollEvent.Pad", Field, 0, ""},
+		{"EpollEvent.PadFd", Field, 0, ""},
+		{"EpollWait", Func, 0, "func(epfd int, events []EpollEvent, msec int) (n int, err error)"},
+		{"Errno", Type, 0, ""},
+		{"EscapeArg", Func, 0, ""},
+		{"Exchangedata", Func, 0, ""},
+		{"Exec", Func, 0, "func(argv0 string, argv []string, envv []string) (err error)"},
+		{"Exit", Func, 0, "func(code int)"},
+		{"ExitProcess", Func, 0, ""},
+		{"FD_CLOEXEC", Const, 0, ""},
+		{"FD_SETSIZE", Const, 0, ""},
+		{"FILE_ACTION_ADDED", Const, 0, ""},
+		{"FILE_ACTION_MODIFIED", Const, 0, ""},
+		{"FILE_ACTION_REMOVED", Const, 0, ""},
+		{"FILE_ACTION_RENAMED_NEW_NAME", Const, 0, ""},
+		{"FILE_ACTION_RENAMED_OLD_NAME", Const, 0, ""},
+		{"FILE_APPEND_DATA", Const, 0, ""},
+		{"FILE_ATTRIBUTE_ARCHIVE", Const, 0, ""},
+		{"FILE_ATTRIBUTE_DIRECTORY", Const, 0, ""},
+		{"FILE_ATTRIBUTE_HIDDEN", Const, 0, ""},
+		{"FILE_ATTRIBUTE_NORMAL", Const, 0, ""},
+		{"FILE_ATTRIBUTE_READONLY", Const, 0, ""},
+		{"FILE_ATTRIBUTE_REPARSE_POINT", Const, 4, ""},
+		{"FILE_ATTRIBUTE_SYSTEM", Const, 0, ""},
+		{"FILE_BEGIN", Const, 0, ""},
+		{"FILE_CURRENT", Const, 0, ""},
+		{"FILE_END", Const, 0, ""},
+		{"FILE_FLAG_BACKUP_SEMANTICS", Const, 0, ""},
+		{"FILE_FLAG_OPEN_REPARSE_POINT", Const, 4, ""},
+		{"FILE_FLAG_OVERLAPPED", Const, 0, ""},
+		{"FILE_LIST_DIRECTORY", Const, 0, ""},
+		{"FILE_MAP_COPY", Const, 0, ""},
+		{"FILE_MAP_EXECUTE", Const, 0, ""},
+		{"FILE_MAP_READ", Const, 0, ""},
+		{"FILE_MAP_WRITE", Const, 0, ""},
+		{"FILE_NOTIFY_CHANGE_ATTRIBUTES", Const, 0, ""},
+		{"FILE_NOTIFY_CHANGE_CREATION", Const, 0, ""},
+		{"FILE_NOTIFY_CHANGE_DIR_NAME", Const, 0, ""},
+		{"FILE_NOTIFY_CHANGE_FILE_NAME", Const, 0, ""},
+		{"FILE_NOTIFY_CHANGE_LAST_ACCESS", Const, 0, ""},
+		{"FILE_NOTIFY_CHANGE_LAST_WRITE", Const, 0, ""},
+		{"FILE_NOTIFY_CHANGE_SIZE", Const, 0, ""},
+		{"FILE_SHARE_DELETE", Const, 0, ""},
+		{"FILE_SHARE_READ", Const, 0, ""},
+		{"FILE_SHARE_WRITE", Const, 0, ""},
+		{"FILE_SKIP_COMPLETION_PORT_ON_SUCCESS", Const, 2, ""},
+		{"FILE_SKIP_SET_EVENT_ON_HANDLE", Const, 2, ""},
+		{"FILE_TYPE_CHAR", Const, 0, ""},
+		{"FILE_TYPE_DISK", Const, 0, ""},
+		{"FILE_TYPE_PIPE", Const, 0, ""},
+		{"FILE_TYPE_REMOTE", Const, 0, ""},
+		{"FILE_TYPE_UNKNOWN", Const, 0, ""},
+		{"FILE_WRITE_ATTRIBUTES", Const, 0, ""},
+		{"FLUSHO", Const, 0, ""},
+		{"FORMAT_MESSAGE_ALLOCATE_BUFFER", Const, 0, ""},
+		{"FORMAT_MESSAGE_ARGUMENT_ARRAY", Const, 0, ""},
+		{"FORMAT_MESSAGE_FROM_HMODULE", Const, 0, ""},
+		{"FORMAT_MESSAGE_FROM_STRING", Const, 0, ""},
+		{"FORMAT_MESSAGE_FROM_SYSTEM", Const, 0, ""},
+		{"FORMAT_MESSAGE_IGNORE_INSERTS", Const, 0, ""},
+		{"FORMAT_MESSAGE_MAX_WIDTH_MASK", Const, 0, ""},
+		{"FSCTL_GET_REPARSE_POINT", Const, 4, ""},
+		{"F_ADDFILESIGS", Const, 0, ""},
+		{"F_ADDSIGS", Const, 0, ""},
+		{"F_ALLOCATEALL", Const, 0, ""},
+		{"F_ALLOCATECONTIG", Const, 0, ""},
+		{"F_CANCEL", Const, 0, ""},
+		{"F_CHKCLEAN", Const, 0, ""},
+		{"F_CLOSEM", Const, 1, ""},
+		{"F_DUP2FD", Const, 0, ""},
+		{"F_DUP2FD_CLOEXEC", Const, 1, ""},
+		{"F_DUPFD", Const, 0, ""},
+		{"F_DUPFD_CLOEXEC", Const, 0, ""},
+		{"F_EXLCK", Const, 0, ""},
+		{"F_FINDSIGS", Const, 16, ""},
+		{"F_FLUSH_DATA", Const, 0, ""},
+		{"F_FREEZE_FS", Const, 0, ""},
+		{"F_FSCTL", Const, 1, ""},
+		{"F_FSDIRMASK", Const, 1, ""},
+		{"F_FSIN", Const, 1, ""},
+		{"F_FSINOUT", Const, 1, ""},
+		{"F_FSOUT", Const, 1, ""},
+		{"F_FSPRIV", Const, 1, ""},
+		{"F_FSVOID", Const, 1, ""},
+		{"F_FULLFSYNC", Const, 0, ""},
+		{"F_GETCODEDIR", Const, 16, ""},
+		{"F_GETFD", Const, 0, ""},
+		{"F_GETFL", Const, 0, ""},
+		{"F_GETLEASE", Const, 0, ""},
+		{"F_GETLK", Const, 0, ""},
+		{"F_GETLK64", Const, 0, ""},
+		{"F_GETLKPID", Const, 0, ""},
+		{"F_GETNOSIGPIPE", Const, 0, ""},
+		{"F_GETOWN", Const, 0, ""},
+		{"F_GETOWN_EX", Const, 0, ""},
+		{"F_GETPATH", Const, 0, ""},
+		{"F_GETPATH_MTMINFO", Const, 0, ""},
+		{"F_GETPIPE_SZ", Const, 0, ""},
+		{"F_GETPROTECTIONCLASS", Const, 0, ""},
+		{"F_GETPROTECTIONLEVEL", Const, 16, ""},
+		{"F_GETSIG", Const, 0, ""},
+		{"F_GLOBAL_NOCACHE", Const, 0, ""},
+		{"F_LOCK", Const, 0, ""},
+		{"F_LOG2PHYS", Const, 0, ""},
+		{"F_LOG2PHYS_EXT", Const, 0, ""},
+		{"F_MARKDEPENDENCY", Const, 0, ""},
+		{"F_MAXFD", Const, 1, ""},
+		{"F_NOCACHE", Const, 0, ""},
+		{"F_NODIRECT", Const, 0, ""},
+		{"F_NOTIFY", Const, 0, ""},
+		{"F_OGETLK", Const, 0, ""},
+		{"F_OK", Const, 0, ""},
+		{"F_OSETLK", Const, 0, ""},
+		{"F_OSETLKW", Const, 0, ""},
+		{"F_PARAM_MASK", Const, 1, ""},
+		{"F_PARAM_MAX", Const, 1, ""},
+		{"F_PATHPKG_CHECK", Const, 0, ""},
+		{"F_PEOFPOSMODE", Const, 0, ""},
+		{"F_PREALLOCATE", Const, 0, ""},
+		{"F_RDADVISE", Const, 0, ""},
+		{"F_RDAHEAD", Const, 0, ""},
+		{"F_RDLCK", Const, 0, ""},
+		{"F_READAHEAD", Const, 0, ""},
+		{"F_READBOOTSTRAP", Const, 0, ""},
+		{"F_SETBACKINGSTORE", Const, 0, ""},
+		{"F_SETFD", Const, 0, ""},
+		{"F_SETFL", Const, 0, ""},
+		{"F_SETLEASE", Const, 0, ""},
+		{"F_SETLK", Const, 0, ""},
+		{"F_SETLK64", Const, 0, ""},
+		{"F_SETLKW", Const, 0, ""},
+		{"F_SETLKW64", Const, 0, ""},
+		{"F_SETLKWTIMEOUT", Const, 16, ""},
+		{"F_SETLK_REMOTE", Const, 0, ""},
+		{"F_SETNOSIGPIPE", Const, 0, ""},
+		{"F_SETOWN", Const, 0, ""},
+		{"F_SETOWN_EX", Const, 0, ""},
+		{"F_SETPIPE_SZ", Const, 0, ""},
+		{"F_SETPROTECTIONCLASS", Const, 0, ""},
+		{"F_SETSIG", Const, 0, ""},
+		{"F_SETSIZE", Const, 0, ""},
+		{"F_SHLCK", Const, 0, ""},
+		{"F_SINGLE_WRITER", Const, 16, ""},
+		{"F_TEST", Const, 0, ""},
+		{"F_THAW_FS", Const, 0, ""},
+		{"F_TLOCK", Const, 0, ""},
+		{"F_TRANSCODEKEY", Const, 16, ""},
+		{"F_ULOCK", Const, 0, ""},
+		{"F_UNLCK", Const, 0, ""},
+		{"F_UNLCKSYS", Const, 0, ""},
+		{"F_VOLPOSMODE", Const, 0, ""},
+		{"F_WRITEBOOTSTRAP", Const, 0, ""},
+		{"F_WRLCK", Const, 0, ""},
+		{"Faccessat", Func, 0, "func(dirfd int, path string, mode uint32, flags int) (err error)"},
+		{"Fallocate", Func, 0, "func(fd int, mode uint32, off int64, len int64) (err error)"},
+		{"Fbootstraptransfer_t", Type, 0, ""},
+		{"Fbootstraptransfer_t.Buffer", Field, 0, ""},
+		{"Fbootstraptransfer_t.Length", Field, 0, ""},
+		{"Fbootstraptransfer_t.Offset", Field, 0, ""},
+		{"Fchdir", Func, 0, "func(fd int) (err error)"},
+		{"Fchflags", Func, 0, ""},
+		{"Fchmod", Func, 0, "func(fd int, mode uint32) (err error)"},
+		{"Fchmodat", Func, 0, "func(dirfd int, path string, mode uint32, flags int) error"},
+		{"Fchown", Func, 0, "func(fd int, uid int, gid int) (err error)"},
+		{"Fchownat", Func, 0, "func(dirfd int, path string, uid int, gid int, flags int) (err error)"},
+		{"FcntlFlock", Func, 3, "func(fd uintptr, cmd int, lk *Flock_t) error"},
+		{"FdSet", Type, 0, ""},
+		{"FdSet.Bits", Field, 0, ""},
+		{"FdSet.X__fds_bits", Field, 0, ""},
+		{"Fdatasync", Func, 0, "func(fd int) (err error)"},
+		{"FileNotifyInformation", Type, 0, ""},
+		{"FileNotifyInformation.Action", Field, 0, ""},
+		{"FileNotifyInformation.FileName", Field, 0, ""},
+		{"FileNotifyInformation.FileNameLength", Field, 0, ""},
+		{"FileNotifyInformation.NextEntryOffset", Field, 0, ""},
+		{"Filetime", Type, 0, ""},
+		{"Filetime.HighDateTime", Field, 0, ""},
+		{"Filetime.LowDateTime", Field, 0, ""},
+		{"FindClose", Func, 0, ""},
+		{"FindFirstFile", Func, 0, ""},
+		{"FindNextFile", Func, 0, ""},
+		{"Flock", Func, 0, "func(fd int, how int) (err error)"},
+		{"Flock_t", Type, 0, ""},
+		{"Flock_t.Len", Field, 0, ""},
+		{"Flock_t.Pad_cgo_0", Field, 0, ""},
+		{"Flock_t.Pad_cgo_1", Field, 3, ""},
+		{"Flock_t.Pid", Field, 0, ""},
+		{"Flock_t.Start", Field, 0, ""},
+		{"Flock_t.Sysid", Field, 0, ""},
+		{"Flock_t.Type", Field, 0, ""},
+		{"Flock_t.Whence", Field, 0, ""},
+		{"FlushBpf", Func, 0, ""},
+		{"FlushFileBuffers", Func, 0, ""},
+		{"FlushViewOfFile", Func, 0, ""},
+		{"ForkExec", Func, 0, "func(argv0 string, argv []string, attr *ProcAttr) (pid int, err error)"},
+		{"ForkLock", Var, 0, ""},
+		{"FormatMessage", Func, 0, ""},
+		{"Fpathconf", Func, 0, ""},
+		{"FreeAddrInfoW", Func, 1, ""},
+		{"FreeEnvironmentStrings", Func, 0, ""},
+		{"FreeLibrary", Func, 0, ""},
+		{"Fsid", Type, 0, ""},
+		{"Fsid.Val", Field, 0, ""},
+		{"Fsid.X__fsid_val", Field, 2, ""},
+		{"Fsid.X__val", Field, 0, ""},
+		{"Fstat", Func, 0, "func(fd int, stat *Stat_t) (err error)"},
+		{"Fstatat", Func, 12, ""},
+		{"Fstatfs", Func, 0, "func(fd int, buf *Statfs_t) (err error)"},
+		{"Fstore_t", Type, 0, ""},
+		{"Fstore_t.Bytesalloc", Field, 0, ""},
+		{"Fstore_t.Flags", Field, 0, ""},
+		{"Fstore_t.Length", Field, 0, ""},
+		{"Fstore_t.Offset", Field, 0, ""},
+		{"Fstore_t.Posmode", Field, 0, ""},
+		{"Fsync", Func, 0, "func(fd int) (err error)"},
+		{"Ftruncate", Func, 0, "func(fd int, length int64) (err error)"},
+		{"FullPath", Func, 4, ""},
+		{"Futimes", Func, 0, "func(fd int, tv []Timeval) (err error)"},
+		{"Futimesat", Func, 0, "func(dirfd int, path string, tv []Timeval) (err error)"},
+		{"GENERIC_ALL", Const, 0, ""},
+		{"GENERIC_EXECUTE", Const, 0, ""},
+		{"GENERIC_READ", Const, 0, ""},
+		{"GENERIC_WRITE", Const, 0, ""},
+		{"GUID", Type, 1, ""},
+		{"GUID.Data1", Field, 1, ""},
+		{"GUID.Data2", Field, 1, ""},
+		{"GUID.Data3", Field, 1, ""},
+		{"GUID.Data4", Field, 1, ""},
+		{"GetAcceptExSockaddrs", Func, 0, ""},
+		{"GetAdaptersInfo", Func, 0, ""},
+		{"GetAddrInfoW", Func, 1, ""},
+		{"GetCommandLine", Func, 0, ""},
+		{"GetComputerName", Func, 0, ""},
+		{"GetConsoleMode", Func, 1, ""},
+		{"GetCurrentDirectory", Func, 0, ""},
+		{"GetCurrentProcess", Func, 0, ""},
+		{"GetEnvironmentStrings", Func, 0, ""},
+		{"GetEnvironmentVariable", Func, 0, ""},
+		{"GetExitCodeProcess", Func, 0, ""},
+		{"GetFileAttributes", Func, 0, ""},
+		{"GetFileAttributesEx", Func, 0, ""},
+		{"GetFileExInfoStandard", Const, 0, ""},
+		{"GetFileExMaxInfoLevel", Const, 0, ""},
+		{"GetFileInformationByHandle", Func, 0, ""},
+		{"GetFileType", Func, 0, ""},
+		{"GetFullPathName", Func, 0, ""},
+		{"GetHostByName", Func, 0, ""},
+		{"GetIfEntry", Func, 0, ""},
+		{"GetLastError", Func, 0, ""},
+		{"GetLengthSid", Func, 0, ""},
+		{"GetLongPathName", Func, 0, ""},
+		{"GetProcAddress", Func, 0, ""},
+		{"GetProcessTimes", Func, 0, ""},
+		{"GetProtoByName", Func, 0, ""},
+		{"GetQueuedCompletionStatus", Func, 0, ""},
+		{"GetServByName", Func, 0, ""},
+		{"GetShortPathName", Func, 0, ""},
+		{"GetStartupInfo", Func, 0, ""},
+		{"GetStdHandle", Func, 0, ""},
+		{"GetSystemTimeAsFileTime", Func, 0, ""},
+		{"GetTempPath", Func, 0, ""},
+		{"GetTimeZoneInformation", Func, 0, ""},
+		{"GetTokenInformation", Func, 0, ""},
+		{"GetUserNameEx", Func, 0, ""},
+		{"GetUserProfileDirectory", Func, 0, ""},
+		{"GetVersion", Func, 0, ""},
+		{"Getcwd", Func, 0, "func(buf []byte) (n int, err error)"},
+		{"Getdents", Func, 0, "func(fd int, buf []byte) (n int, err error)"},
+		{"Getdirentries", Func, 0, ""},
+		{"Getdtablesize", Func, 0, ""},
+		{"Getegid", Func, 0, "func() (egid int)"},
+		{"Getenv", Func, 0, "func(key string) (value string, found bool)"},
+		{"Geteuid", Func, 0, "func() (euid int)"},
+		{"Getfsstat", Func, 0, ""},
+		{"Getgid", Func, 0, "func() (gid int)"},
+		{"Getgroups", Func, 0, "func() (gids []int, err error)"},
+		{"Getpagesize", Func, 0, "func() int"},
+		{"Getpeername", Func, 0, "func(fd int) (sa Sockaddr, err error)"},
+		{"Getpgid", Func, 0, "func(pid int) (pgid int, err error)"},
+		{"Getpgrp", Func, 0, "func() (pid int)"},
+		{"Getpid", Func, 0, "func() (pid int)"},
+		{"Getppid", Func, 0, "func() (ppid int)"},
+		{"Getpriority", Func, 0, "func(which int, who int) (prio int, err error)"},
+		{"Getrlimit", Func, 0, "func(resource int, rlim *Rlimit) (err error)"},
+		{"Getrusage", Func, 0, "func(who int, rusage *Rusage) (err error)"},
+		{"Getsid", Func, 0, ""},
+		{"Getsockname", Func, 0, "func(fd int) (sa Sockaddr, err error)"},
+		{"Getsockopt", Func, 1, ""},
+		{"GetsockoptByte", Func, 0, ""},
+		{"GetsockoptICMPv6Filter", Func, 2, "func(fd int, level int, opt int) (*ICMPv6Filter, error)"},
+		{"GetsockoptIPMreq", Func, 0, "func(fd int, level int, opt int) (*IPMreq, error)"},
+		{"GetsockoptIPMreqn", Func, 0, "func(fd int, level int, opt int) (*IPMreqn, error)"},
+		{"GetsockoptIPv6MTUInfo", Func, 2, "func(fd int, level int, opt int) (*IPv6MTUInfo, error)"},
+		{"GetsockoptIPv6Mreq", Func, 0, "func(fd int, level int, opt int) (*IPv6Mreq, error)"},
+		{"GetsockoptInet4Addr", Func, 0, "func(fd int, level int, opt int) (value [4]byte, err error)"},
+		{"GetsockoptInt", Func, 0, "func(fd int, level int, opt int) (value int, err error)"},
+		{"GetsockoptUcred", Func, 1, "func(fd int, level int, opt int) (*Ucred, error)"},
+		{"Gettid", Func, 0, "func() (tid int)"},
+		{"Gettimeofday", Func, 0, "func(tv *Timeval) (err error)"},
+		{"Getuid", Func, 0, "func() (uid int)"},
+		{"Getwd", Func, 0, "func() (wd string, err error)"},
+		{"Getxattr", Func, 1, "func(path string, attr string, dest []byte) (sz int, err error)"},
+		{"HANDLE_FLAG_INHERIT", Const, 0, ""},
+		{"HKEY_CLASSES_ROOT", Const, 0, ""},
+		{"HKEY_CURRENT_CONFIG", Const, 0, ""},
+		{"HKEY_CURRENT_USER", Const, 0, ""},
+		{"HKEY_DYN_DATA", Const, 0, ""},
+		{"HKEY_LOCAL_MACHINE", Const, 0, ""},
+		{"HKEY_PERFORMANCE_DATA", Const, 0, ""},
+		{"HKEY_USERS", Const, 0, ""},
+		{"HUPCL", Const, 0, ""},
+		{"Handle", Type, 0, ""},
+		{"Hostent", Type, 0, ""},
+		{"Hostent.AddrList", Field, 0, ""},
+		{"Hostent.AddrType", Field, 0, ""},
+		{"Hostent.Aliases", Field, 0, ""},
+		{"Hostent.Length", Field, 0, ""},
+		{"Hostent.Name", Field, 0, ""},
+		{"ICANON", Const, 0, ""},
+		{"ICMP6_FILTER", Const, 2, ""},
+		{"ICMPV6_FILTER", Const, 2, ""},
+		{"ICMPv6Filter", Type, 2, ""},
+		{"ICMPv6Filter.Data", Field, 2, ""},
+		{"ICMPv6Filter.Filt", Field, 2, ""},
+		{"ICRNL", Const, 0, ""},
+		{"IEXTEN", Const, 0, ""},
+		{"IFAN_ARRIVAL", Const, 1, ""},
+		{"IFAN_DEPARTURE", Const, 1, ""},
+		{"IFA_ADDRESS", Const, 0, ""},
+		{"IFA_ANYCAST", Const, 0, ""},
+		{"IFA_BROADCAST", Const, 0, ""},
+		{"IFA_CACHEINFO", Const, 0, ""},
+		{"IFA_F_DADFAILED", Const, 0, ""},
+		{"IFA_F_DEPRECATED", Const, 0, ""},
+		{"IFA_F_HOMEADDRESS", Const, 0, ""},
+		{"IFA_F_NODAD", Const, 0, ""},
+		{"IFA_F_OPTIMISTIC", Const, 0, ""},
+		{"IFA_F_PERMANENT", Const, 0, ""},
+		{"IFA_F_SECONDARY", Const, 0, ""},
+		{"IFA_F_TEMPORARY", Const, 0, ""},
+		{"IFA_F_TENTATIVE", Const, 0, ""},
+		{"IFA_LABEL", Const, 0, ""},
+		{"IFA_LOCAL", Const, 0, ""},
+		{"IFA_MAX", Const, 0, ""},
+		{"IFA_MULTICAST", Const, 0, ""},
+		{"IFA_ROUTE", Const, 1, ""},
+		{"IFA_UNSPEC", Const, 0, ""},
+		{"IFF_ALLMULTI", Const, 0, ""},
+		{"IFF_ALTPHYS", Const, 0, ""},
+		{"IFF_AUTOMEDIA", Const, 0, ""},
+		{"IFF_BROADCAST", Const, 0, ""},
+		{"IFF_CANTCHANGE", Const, 0, ""},
+		{"IFF_CANTCONFIG", Const, 1, ""},
+		{"IFF_DEBUG", Const, 0, ""},
+		{"IFF_DRV_OACTIVE", Const, 0, ""},
+		{"IFF_DRV_RUNNING", Const, 0, ""},
+		{"IFF_DYING", Const, 0, ""},
+		{"IFF_DYNAMIC", Const, 0, ""},
+		{"IFF_LINK0", Const, 0, ""},
+		{"IFF_LINK1", Const, 0, ""},
+		{"IFF_LINK2", Const, 0, ""},
+		{"IFF_LOOPBACK", Const, 0, ""},
+		{"IFF_MASTER", Const, 0, ""},
+		{"IFF_MONITOR", Const, 0, ""},
+		{"IFF_MULTICAST", Const, 0, ""},
+		{"IFF_NOARP", Const, 0, ""},
+		{"IFF_NOTRAILERS", Const, 0, ""},
+		{"IFF_NO_PI", Const, 0, ""},
+		{"IFF_OACTIVE", Const, 0, ""},
+		{"IFF_ONE_QUEUE", Const, 0, ""},
+		{"IFF_POINTOPOINT", Const, 0, ""},
+		{"IFF_POINTTOPOINT", Const, 0, ""},
+		{"IFF_PORTSEL", Const, 0, ""},
+		{"IFF_PPROMISC", Const, 0, ""},
+		{"IFF_PROMISC", Const, 0, ""},
+		{"IFF_RENAMING", Const, 0, ""},
+		{"IFF_RUNNING", Const, 0, ""},
+		{"IFF_SIMPLEX", Const, 0, ""},
+		{"IFF_SLAVE", Const, 0, ""},
+		{"IFF_SMART", Const, 0, ""},
+		{"IFF_STATICARP", Const, 0, ""},
+		{"IFF_TAP", Const, 0, ""},
+		{"IFF_TUN", Const, 0, ""},
+		{"IFF_TUN_EXCL", Const, 0, ""},
+		{"IFF_UP", Const, 0, ""},
+		{"IFF_VNET_HDR", Const, 0, ""},
+		{"IFLA_ADDRESS", Const, 0, ""},
+		{"IFLA_BROADCAST", Const, 0, ""},
+		{"IFLA_COST", Const, 0, ""},
+		{"IFLA_IFALIAS", Const, 0, ""},
+		{"IFLA_IFNAME", Const, 0, ""},
+		{"IFLA_LINK", Const, 0, ""},
+		{"IFLA_LINKINFO", Const, 0, ""},
+		{"IFLA_LINKMODE", Const, 0, ""},
+		{"IFLA_MAP", Const, 0, ""},
+		{"IFLA_MASTER", Const, 0, ""},
+		{"IFLA_MAX", Const, 0, ""},
+		{"IFLA_MTU", Const, 0, ""},
+		{"IFLA_NET_NS_PID", Const, 0, ""},
+		{"IFLA_OPERSTATE", Const, 0, ""},
+		{"IFLA_PRIORITY", Const, 0, ""},
+		{"IFLA_PROTINFO", Const, 0, ""},
+		{"IFLA_QDISC", Const, 0, ""},
+		{"IFLA_STATS", Const, 0, ""},
+		{"IFLA_TXQLEN", Const, 0, ""},
+		{"IFLA_UNSPEC", Const, 0, ""},
+		{"IFLA_WEIGHT", Const, 0, ""},
+		{"IFLA_WIRELESS", Const, 0, ""},
+		{"IFNAMSIZ", Const, 0, ""},
+		{"IFT_1822", Const, 0, ""},
+		{"IFT_A12MPPSWITCH", Const, 0, ""},
+		{"IFT_AAL2", Const, 0, ""},
+		{"IFT_AAL5", Const, 0, ""},
+		{"IFT_ADSL", Const, 0, ""},
+		{"IFT_AFLANE8023", Const, 0, ""},
+		{"IFT_AFLANE8025", Const, 0, ""},
+		{"IFT_ARAP", Const, 0, ""},
+		{"IFT_ARCNET", Const, 0, ""},
+		{"IFT_ARCNETPLUS", Const, 0, ""},
+		{"IFT_ASYNC", Const, 0, ""},
+		{"IFT_ATM", Const, 0, ""},
+		{"IFT_ATMDXI", Const, 0, ""},
+		{"IFT_ATMFUNI", Const, 0, ""},
+		{"IFT_ATMIMA", Const, 0, ""},
+		{"IFT_ATMLOGICAL", Const, 0, ""},
+		{"IFT_ATMRADIO", Const, 0, ""},
+		{"IFT_ATMSUBINTERFACE", Const, 0, ""},
+		{"IFT_ATMVCIENDPT", Const, 0, ""},
+		{"IFT_ATMVIRTUAL", Const, 0, ""},
+		{"IFT_BGPPOLICYACCOUNTING", Const, 0, ""},
+		{"IFT_BLUETOOTH", Const, 1, ""},
+		{"IFT_BRIDGE", Const, 0, ""},
+		{"IFT_BSC", Const, 0, ""},
+		{"IFT_CARP", Const, 0, ""},
+		{"IFT_CCTEMUL", Const, 0, ""},
+		{"IFT_CELLULAR", Const, 0, ""},
+		{"IFT_CEPT", Const, 0, ""},
+		{"IFT_CES", Const, 0, ""},
+		{"IFT_CHANNEL", Const, 0, ""},
+		{"IFT_CNR", Const, 0, ""},
+		{"IFT_COFFEE", Const, 0, ""},
+		{"IFT_COMPOSITELINK", Const, 0, ""},
+		{"IFT_DCN", Const, 0, ""},
+		{"IFT_DIGITALPOWERLINE", Const, 0, ""},
+		{"IFT_DIGITALWRAPPEROVERHEADCHANNEL", Const, 0, ""},
+		{"IFT_DLSW", Const, 0, ""},
+		{"IFT_DOCSCABLEDOWNSTREAM", Const, 0, ""},
+		{"IFT_DOCSCABLEMACLAYER", Const, 0, ""},
+		{"IFT_DOCSCABLEUPSTREAM", Const, 0, ""},
+		{"IFT_DOCSCABLEUPSTREAMCHANNEL", Const, 1, ""},
+		{"IFT_DS0", Const, 0, ""},
+		{"IFT_DS0BUNDLE", Const, 0, ""},
+		{"IFT_DS1FDL", Const, 0, ""},
+		{"IFT_DS3", Const, 0, ""},
+		{"IFT_DTM", Const, 0, ""},
+		{"IFT_DUMMY", Const, 1, ""},
+		{"IFT_DVBASILN", Const, 0, ""},
+		{"IFT_DVBASIOUT", Const, 0, ""},
+		{"IFT_DVBRCCDOWNSTREAM", Const, 0, ""},
+		{"IFT_DVBRCCMACLAYER", Const, 0, ""},
+		{"IFT_DVBRCCUPSTREAM", Const, 0, ""},
+		{"IFT_ECONET", Const, 1, ""},
+		{"IFT_ENC", Const, 0, ""},
+		{"IFT_EON", Const, 0, ""},
+		{"IFT_EPLRS", Const, 0, ""},
+		{"IFT_ESCON", Const, 0, ""},
+		{"IFT_ETHER", Const, 0, ""},
+		{"IFT_FAITH", Const, 0, ""},
+		{"IFT_FAST", Const, 0, ""},
+		{"IFT_FASTETHER", Const, 0, ""},
+		{"IFT_FASTETHERFX", Const, 0, ""},
+		{"IFT_FDDI", Const, 0, ""},
+		{"IFT_FIBRECHANNEL", Const, 0, ""},
+		{"IFT_FRAMERELAYINTERCONNECT", Const, 0, ""},
+		{"IFT_FRAMERELAYMPI", Const, 0, ""},
+		{"IFT_FRDLCIENDPT", Const, 0, ""},
+		{"IFT_FRELAY", Const, 0, ""},
+		{"IFT_FRELAYDCE", Const, 0, ""},
+		{"IFT_FRF16MFRBUNDLE", Const, 0, ""},
+		{"IFT_FRFORWARD", Const, 0, ""},
+		{"IFT_G703AT2MB", Const, 0, ""},
+		{"IFT_G703AT64K", Const, 0, ""},
+		{"IFT_GIF", Const, 0, ""},
+		{"IFT_GIGABITETHERNET", Const, 0, ""},
+		{"IFT_GR303IDT", Const, 0, ""},
+		{"IFT_GR303RDT", Const, 0, ""},
+		{"IFT_H323GATEKEEPER", Const, 0, ""},
+		{"IFT_H323PROXY", Const, 0, ""},
+		{"IFT_HDH1822", Const, 0, ""},
+		{"IFT_HDLC", Const, 0, ""},
+		{"IFT_HDSL2", Const, 0, ""},
+		{"IFT_HIPERLAN2", Const, 0, ""},
+		{"IFT_HIPPI", Const, 0, ""},
+		{"IFT_HIPPIINTERFACE", Const, 0, ""},
+		{"IFT_HOSTPAD", Const, 0, ""},
+		{"IFT_HSSI", Const, 0, ""},
+		{"IFT_HY", Const, 0, ""},
+		{"IFT_IBM370PARCHAN", Const, 0, ""},
+		{"IFT_IDSL", Const, 0, ""},
+		{"IFT_IEEE1394", Const, 0, ""},
+		{"IFT_IEEE80211", Const, 0, ""},
+		{"IFT_IEEE80212", Const, 0, ""},
+		{"IFT_IEEE8023ADLAG", Const, 0, ""},
+		{"IFT_IFGSN", Const, 0, ""},
+		{"IFT_IMT", Const, 0, ""},
+		{"IFT_INFINIBAND", Const, 1, ""},
+		{"IFT_INTERLEAVE", Const, 0, ""},
+		{"IFT_IP", Const, 0, ""},
+		{"IFT_IPFORWARD", Const, 0, ""},
+		{"IFT_IPOVERATM", Const, 0, ""},
+		{"IFT_IPOVERCDLC", Const, 0, ""},
+		{"IFT_IPOVERCLAW", Const, 0, ""},
+		{"IFT_IPSWITCH", Const, 0, ""},
+		{"IFT_IPXIP", Const, 0, ""},
+		{"IFT_ISDN", Const, 0, ""},
+		{"IFT_ISDNBASIC", Const, 0, ""},
+		{"IFT_ISDNPRIMARY", Const, 0, ""},
+		{"IFT_ISDNS", Const, 0, ""},
+		{"IFT_ISDNU", Const, 0, ""},
+		{"IFT_ISO88022LLC", Const, 0, ""},
+		{"IFT_ISO88023", Const, 0, ""},
+		{"IFT_ISO88024", Const, 0, ""},
+		{"IFT_ISO88025", Const, 0, ""},
+		{"IFT_ISO88025CRFPINT", Const, 0, ""},
+		{"IFT_ISO88025DTR", Const, 0, ""},
+		{"IFT_ISO88025FIBER", Const, 0, ""},
+		{"IFT_ISO88026", Const, 0, ""},
+		{"IFT_ISUP", Const, 0, ""},
+		{"IFT_L2VLAN", Const, 0, ""},
+		{"IFT_L3IPVLAN", Const, 0, ""},
+		{"IFT_L3IPXVLAN", Const, 0, ""},
+		{"IFT_LAPB", Const, 0, ""},
+		{"IFT_LAPD", Const, 0, ""},
+		{"IFT_LAPF", Const, 0, ""},
+		{"IFT_LINEGROUP", Const, 1, ""},
+		{"IFT_LOCALTALK", Const, 0, ""},
+		{"IFT_LOOP", Const, 0, ""},
+		{"IFT_MEDIAMAILOVERIP", Const, 0, ""},
+		{"IFT_MFSIGLINK", Const, 0, ""},
+		{"IFT_MIOX25", Const, 0, ""},
+		{"IFT_MODEM", Const, 0, ""},
+		{"IFT_MPC", Const, 0, ""},
+		{"IFT_MPLS", Const, 0, ""},
+		{"IFT_MPLSTUNNEL", Const, 0, ""},
+		{"IFT_MSDSL", Const, 0, ""},
+		{"IFT_MVL", Const, 0, ""},
+		{"IFT_MYRINET", Const, 0, ""},
+		{"IFT_NFAS", Const, 0, ""},
+		{"IFT_NSIP", Const, 0, ""},
+		{"IFT_OPTICALCHANNEL", Const, 0, ""},
+		{"IFT_OPTICALTRANSPORT", Const, 0, ""},
+		{"IFT_OTHER", Const, 0, ""},
+		{"IFT_P10", Const, 0, ""},
+		{"IFT_P80", Const, 0, ""},
+		{"IFT_PARA", Const, 0, ""},
+		{"IFT_PDP", Const, 0, ""},
+		{"IFT_PFLOG", Const, 0, ""},
+		{"IFT_PFLOW", Const, 1, ""},
+		{"IFT_PFSYNC", Const, 0, ""},
+		{"IFT_PLC", Const, 0, ""},
+		{"IFT_PON155", Const, 1, ""},
+		{"IFT_PON622", Const, 1, ""},
+		{"IFT_POS", Const, 0, ""},
+		{"IFT_PPP", Const, 0, ""},
+		{"IFT_PPPMULTILINKBUNDLE", Const, 0, ""},
+		{"IFT_PROPATM", Const, 1, ""},
+		{"IFT_PROPBWAP2MP", Const, 0, ""},
+		{"IFT_PROPCNLS", Const, 0, ""},
+		{"IFT_PROPDOCSWIRELESSDOWNSTREAM", Const, 0, ""},
+		{"IFT_PROPDOCSWIRELESSMACLAYER", Const, 0, ""},
+		{"IFT_PROPDOCSWIRELESSUPSTREAM", Const, 0, ""},
+		{"IFT_PROPMUX", Const, 0, ""},
+		{"IFT_PROPVIRTUAL", Const, 0, ""},
+		{"IFT_PROPWIRELESSP2P", Const, 0, ""},
+		{"IFT_PTPSERIAL", Const, 0, ""},
+		{"IFT_PVC", Const, 0, ""},
+		{"IFT_Q2931", Const, 1, ""},
+		{"IFT_QLLC", Const, 0, ""},
+		{"IFT_RADIOMAC", Const, 0, ""},
+		{"IFT_RADSL", Const, 0, ""},
+		{"IFT_REACHDSL", Const, 0, ""},
+		{"IFT_RFC1483", Const, 0, ""},
+		{"IFT_RS232", Const, 0, ""},
+		{"IFT_RSRB", Const, 0, ""},
+		{"IFT_SDLC", Const, 0, ""},
+		{"IFT_SDSL", Const, 0, ""},
+		{"IFT_SHDSL", Const, 0, ""},
+		{"IFT_SIP", Const, 0, ""},
+		{"IFT_SIPSIG", Const, 1, ""},
+		{"IFT_SIPTG", Const, 1, ""},
+		{"IFT_SLIP", Const, 0, ""},
+		{"IFT_SMDSDXI", Const, 0, ""},
+		{"IFT_SMDSICIP", Const, 0, ""},
+		{"IFT_SONET", Const, 0, ""},
+		{"IFT_SONETOVERHEADCHANNEL", Const, 0, ""},
+		{"IFT_SONETPATH", Const, 0, ""},
+		{"IFT_SONETVT", Const, 0, ""},
+		{"IFT_SRP", Const, 0, ""},
+		{"IFT_SS7SIGLINK", Const, 0, ""},
+		{"IFT_STACKTOSTACK", Const, 0, ""},
+		{"IFT_STARLAN", Const, 0, ""},
+		{"IFT_STF", Const, 0, ""},
+		{"IFT_T1", Const, 0, ""},
+		{"IFT_TDLC", Const, 0, ""},
+		{"IFT_TELINK", Const, 1, ""},
+		{"IFT_TERMPAD", Const, 0, ""},
+		{"IFT_TR008", Const, 0, ""},
+		{"IFT_TRANSPHDLC", Const, 0, ""},
+		{"IFT_TUNNEL", Const, 0, ""},
+		{"IFT_ULTRA", Const, 0, ""},
+		{"IFT_USB", Const, 0, ""},
+		{"IFT_V11", Const, 0, ""},
+		{"IFT_V35", Const, 0, ""},
+		{"IFT_V36", Const, 0, ""},
+		{"IFT_V37", Const, 0, ""},
+		{"IFT_VDSL", Const, 0, ""},
+		{"IFT_VIRTUALIPADDRESS", Const, 0, ""},
+		{"IFT_VIRTUALTG", Const, 1, ""},
+		{"IFT_VOICEDID", Const, 1, ""},
+		{"IFT_VOICEEM", Const, 0, ""},
+		{"IFT_VOICEEMFGD", Const, 1, ""},
+		{"IFT_VOICEENCAP", Const, 0, ""},
+		{"IFT_VOICEFGDEANA", Const, 1, ""},
+		{"IFT_VOICEFXO", Const, 0, ""},
+		{"IFT_VOICEFXS", Const, 0, ""},
+		{"IFT_VOICEOVERATM", Const, 0, ""},
+		{"IFT_VOICEOVERCABLE", Const, 1, ""},
+		{"IFT_VOICEOVERFRAMERELAY", Const, 0, ""},
+		{"IFT_VOICEOVERIP", Const, 0, ""},
+		{"IFT_X213", Const, 0, ""},
+		{"IFT_X25", Const, 0, ""},
+		{"IFT_X25DDN", Const, 0, ""},
+		{"IFT_X25HUNTGROUP", Const, 0, ""},
+		{"IFT_X25MLP", Const, 0, ""},
+		{"IFT_X25PLE", Const, 0, ""},
+		{"IFT_XETHER", Const, 0, ""},
+		{"IGNBRK", Const, 0, ""},
+		{"IGNCR", Const, 0, ""},
+		{"IGNORE", Const, 0, ""},
+		{"IGNPAR", Const, 0, ""},
+		{"IMAXBEL", Const, 0, ""},
+		{"INFINITE", Const, 0, ""},
+		{"INLCR", Const, 0, ""},
+		{"INPCK", Const, 0, ""},
+		{"INVALID_FILE_ATTRIBUTES", Const, 0, ""},
+		{"IN_ACCESS", Const, 0, ""},
+		{"IN_ALL_EVENTS", Const, 0, ""},
+		{"IN_ATTRIB", Const, 0, ""},
+		{"IN_CLASSA_HOST", Const, 0, ""},
+		{"IN_CLASSA_MAX", Const, 0, ""},
+		{"IN_CLASSA_NET", Const, 0, ""},
+		{"IN_CLASSA_NSHIFT", Const, 0, ""},
+		{"IN_CLASSB_HOST", Const, 0, ""},
+		{"IN_CLASSB_MAX", Const, 0, ""},
+		{"IN_CLASSB_NET", Const, 0, ""},
+		{"IN_CLASSB_NSHIFT", Const, 0, ""},
+		{"IN_CLASSC_HOST", Const, 0, ""},
+		{"IN_CLASSC_NET", Const, 0, ""},
+		{"IN_CLASSC_NSHIFT", Const, 0, ""},
+		{"IN_CLASSD_HOST", Const, 0, ""},
+		{"IN_CLASSD_NET", Const, 0, ""},
+		{"IN_CLASSD_NSHIFT", Const, 0, ""},
+		{"IN_CLOEXEC", Const, 0, ""},
+		{"IN_CLOSE", Const, 0, ""},
+		{"IN_CLOSE_NOWRITE", Const, 0, ""},
+		{"IN_CLOSE_WRITE", Const, 0, ""},
+		{"IN_CREATE", Const, 0, ""},
+		{"IN_DELETE", Const, 0, ""},
+		{"IN_DELETE_SELF", Const, 0, ""},
+		{"IN_DONT_FOLLOW", Const, 0, ""},
+		{"IN_EXCL_UNLINK", Const, 0, ""},
+		{"IN_IGNORED", Const, 0, ""},
+		{"IN_ISDIR", Const, 0, ""},
+		{"IN_LINKLOCALNETNUM", Const, 0, ""},
+		{"IN_LOOPBACKNET", Const, 0, ""},
+		{"IN_MASK_ADD", Const, 0, ""},
+		{"IN_MODIFY", Const, 0, ""},
+		{"IN_MOVE", Const, 0, ""},
+		{"IN_MOVED_FROM", Const, 0, ""},
+		{"IN_MOVED_TO", Const, 0, ""},
+		{"IN_MOVE_SELF", Const, 0, ""},
+		{"IN_NONBLOCK", Const, 0, ""},
+		{"IN_ONESHOT", Const, 0, ""},
+		{"IN_ONLYDIR", Const, 0, ""},
+		{"IN_OPEN", Const, 0, ""},
+		{"IN_Q_OVERFLOW", Const, 0, ""},
+		{"IN_RFC3021_HOST", Const, 1, ""},
+		{"IN_RFC3021_MASK", Const, 1, ""},
+		{"IN_RFC3021_NET", Const, 1, ""},
+		{"IN_RFC3021_NSHIFT", Const, 1, ""},
+		{"IN_UNMOUNT", Const, 0, ""},
+		{"IOC_IN", Const, 1, ""},
+		{"IOC_INOUT", Const, 1, ""},
+		{"IOC_OUT", Const, 1, ""},
+		{"IOC_VENDOR", Const, 3, ""},
+		{"IOC_WS2", Const, 1, ""},
+		{"IO_REPARSE_TAG_SYMLINK", Const, 4, ""},
+		{"IPMreq", Type, 0, ""},
+		{"IPMreq.Interface", Field, 0, ""},
+		{"IPMreq.Multiaddr", Field, 0, ""},
+		{"IPMreqn", Type, 0, ""},
+		{"IPMreqn.Address", Field, 0, ""},
+		{"IPMreqn.Ifindex", Field, 0, ""},
+		{"IPMreqn.Multiaddr", Field, 0, ""},
+		{"IPPROTO_3PC", Const, 0, ""},
+		{"IPPROTO_ADFS", Const, 0, ""},
+		{"IPPROTO_AH", Const, 0, ""},
+		{"IPPROTO_AHIP", Const, 0, ""},
+		{"IPPROTO_APES", Const, 0, ""},
+		{"IPPROTO_ARGUS", Const, 0, ""},
+		{"IPPROTO_AX25", Const, 0, ""},
+		{"IPPROTO_BHA", Const, 0, ""},
+		{"IPPROTO_BLT", Const, 0, ""},
+		{"IPPROTO_BRSATMON", Const, 0, ""},
+		{"IPPROTO_CARP", Const, 0, ""},
+		{"IPPROTO_CFTP", Const, 0, ""},
+		{"IPPROTO_CHAOS", Const, 0, ""},
+		{"IPPROTO_CMTP", Const, 0, ""},
+		{"IPPROTO_COMP", Const, 0, ""},
+		{"IPPROTO_CPHB", Const, 0, ""},
+		{"IPPROTO_CPNX", Const, 0, ""},
+		{"IPPROTO_DCCP", Const, 0, ""},
+		{"IPPROTO_DDP", Const, 0, ""},
+		{"IPPROTO_DGP", Const, 0, ""},
+		{"IPPROTO_DIVERT", Const, 0, ""},
+		{"IPPROTO_DIVERT_INIT", Const, 3, ""},
+		{"IPPROTO_DIVERT_RESP", Const, 3, ""},
+		{"IPPROTO_DONE", Const, 0, ""},
+		{"IPPROTO_DSTOPTS", Const, 0, ""},
+		{"IPPROTO_EGP", Const, 0, ""},
+		{"IPPROTO_EMCON", Const, 0, ""},
+		{"IPPROTO_ENCAP", Const, 0, ""},
+		{"IPPROTO_EON", Const, 0, ""},
+		{"IPPROTO_ESP", Const, 0, ""},
+		{"IPPROTO_ETHERIP", Const, 0, ""},
+		{"IPPROTO_FRAGMENT", Const, 0, ""},
+		{"IPPROTO_GGP", Const, 0, ""},
+		{"IPPROTO_GMTP", Const, 0, ""},
+		{"IPPROTO_GRE", Const, 0, ""},
+		{"IPPROTO_HELLO", Const, 0, ""},
+		{"IPPROTO_HMP", Const, 0, ""},
+		{"IPPROTO_HOPOPTS", Const, 0, ""},
+		{"IPPROTO_ICMP", Const, 0, ""},
+		{"IPPROTO_ICMPV6", Const, 0, ""},
+		{"IPPROTO_IDP", Const, 0, ""},
+		{"IPPROTO_IDPR", Const, 0, ""},
+		{"IPPROTO_IDRP", Const, 0, ""},
+		{"IPPROTO_IGMP", Const, 0, ""},
+		{"IPPROTO_IGP", Const, 0, ""},
+		{"IPPROTO_IGRP", Const, 0, ""},
+		{"IPPROTO_IL", Const, 0, ""},
+		{"IPPROTO_INLSP", Const, 0, ""},
+		{"IPPROTO_INP", Const, 0, ""},
+		{"IPPROTO_IP", Const, 0, ""},
+		{"IPPROTO_IPCOMP", Const, 0, ""},
+		{"IPPROTO_IPCV", Const, 0, ""},
+		{"IPPROTO_IPEIP", Const, 0, ""},
+		{"IPPROTO_IPIP", Const, 0, ""},
+		{"IPPROTO_IPPC", Const, 0, ""},
+		{"IPPROTO_IPV4", Const, 0, ""},
+		{"IPPROTO_IPV6", Const, 0, ""},
+		{"IPPROTO_IPV6_ICMP", Const, 1, ""},
+		{"IPPROTO_IRTP", Const, 0, ""},
+		{"IPPROTO_KRYPTOLAN", Const, 0, ""},
+		{"IPPROTO_LARP", Const, 0, ""},
+		{"IPPROTO_LEAF1", Const, 0, ""},
+		{"IPPROTO_LEAF2", Const, 0, ""},
+		{"IPPROTO_MAX", Const, 0, ""},
+		{"IPPROTO_MAXID", Const, 0, ""},
+		{"IPPROTO_MEAS", Const, 0, ""},
+		{"IPPROTO_MH", Const, 1, ""},
+		{"IPPROTO_MHRP", Const, 0, ""},
+		{"IPPROTO_MICP", Const, 0, ""},
+		{"IPPROTO_MOBILE", Const, 0, ""},
+		{"IPPROTO_MPLS", Const, 1, ""},
+		{"IPPROTO_MTP", Const, 0, ""},
+		{"IPPROTO_MUX", Const, 0, ""},
+		{"IPPROTO_ND", Const, 0, ""},
+		{"IPPROTO_NHRP", Const, 0, ""},
+		{"IPPROTO_NONE", Const, 0, ""},
+		{"IPPROTO_NSP", Const, 0, ""},
+		{"IPPROTO_NVPII", Const, 0, ""},
+		{"IPPROTO_OLD_DIVERT", Const, 0, ""},
+		{"IPPROTO_OSPFIGP", Const, 0, ""},
+		{"IPPROTO_PFSYNC", Const, 0, ""},
+		{"IPPROTO_PGM", Const, 0, ""},
+		{"IPPROTO_PIGP", Const, 0, ""},
+		{"IPPROTO_PIM", Const, 0, ""},
+		{"IPPROTO_PRM", Const, 0, ""},
+		{"IPPROTO_PUP", Const, 0, ""},
+		{"IPPROTO_PVP", Const, 0, ""},
+		{"IPPROTO_RAW", Const, 0, ""},
+		{"IPPROTO_RCCMON", Const, 0, ""},
+		{"IPPROTO_RDP", Const, 0, ""},
+		{"IPPROTO_ROUTING", Const, 0, ""},
+		{"IPPROTO_RSVP", Const, 0, ""},
+		{"IPPROTO_RVD", Const, 0, ""},
+		{"IPPROTO_SATEXPAK", Const, 0, ""},
+		{"IPPROTO_SATMON", Const, 0, ""},
+		{"IPPROTO_SCCSP", Const, 0, ""},
+		{"IPPROTO_SCTP", Const, 0, ""},
+		{"IPPROTO_SDRP", Const, 0, ""},
+		{"IPPROTO_SEND", Const, 1, ""},
+		{"IPPROTO_SEP", Const, 0, ""},
+		{"IPPROTO_SKIP", Const, 0, ""},
+		{"IPPROTO_SPACER", Const, 0, ""},
+		{"IPPROTO_SRPC", Const, 0, ""},
+		{"IPPROTO_ST", Const, 0, ""},
+		{"IPPROTO_SVMTP", Const, 0, ""},
+		{"IPPROTO_SWIPE", Const, 0, ""},
+		{"IPPROTO_TCF", Const, 0, ""},
+		{"IPPROTO_TCP", Const, 0, ""},
+		{"IPPROTO_TLSP", Const, 0, ""},
+		{"IPPROTO_TP", Const, 0, ""},
+		{"IPPROTO_TPXX", Const, 0, ""},
+		{"IPPROTO_TRUNK1", Const, 0, ""},
+		{"IPPROTO_TRUNK2", Const, 0, ""},
+		{"IPPROTO_TTP", Const, 0, ""},
+		{"IPPROTO_UDP", Const, 0, ""},
+		{"IPPROTO_UDPLITE", Const, 0, ""},
+		{"IPPROTO_VINES", Const, 0, ""},
+		{"IPPROTO_VISA", Const, 0, ""},
+		{"IPPROTO_VMTP", Const, 0, ""},
+		{"IPPROTO_VRRP", Const, 1, ""},
+		{"IPPROTO_WBEXPAK", Const, 0, ""},
+		{"IPPROTO_WBMON", Const, 0, ""},
+		{"IPPROTO_WSN", Const, 0, ""},
+		{"IPPROTO_XNET", Const, 0, ""},
+		{"IPPROTO_XTP", Const, 0, ""},
+		{"IPV6_2292DSTOPTS", Const, 0, ""},
+		{"IPV6_2292HOPLIMIT", Const, 0, ""},
+		{"IPV6_2292HOPOPTS", Const, 0, ""},
+		{"IPV6_2292NEXTHOP", Const, 0, ""},
+		{"IPV6_2292PKTINFO", Const, 0, ""},
+		{"IPV6_2292PKTOPTIONS", Const, 0, ""},
+		{"IPV6_2292RTHDR", Const, 0, ""},
+		{"IPV6_ADDRFORM", Const, 0, ""},
+		{"IPV6_ADD_MEMBERSHIP", Const, 0, ""},
+		{"IPV6_AUTHHDR", Const, 0, ""},
+		{"IPV6_AUTH_LEVEL", Const, 1, ""},
+		{"IPV6_AUTOFLOWLABEL", Const, 0, ""},
+		{"IPV6_BINDANY", Const, 0, ""},
+		{"IPV6_BINDV6ONLY", Const, 0, ""},
+		{"IPV6_BOUND_IF", Const, 0, ""},
+		{"IPV6_CHECKSUM", Const, 0, ""},
+		{"IPV6_DEFAULT_MULTICAST_HOPS", Const, 0, ""},
+		{"IPV6_DEFAULT_MULTICAST_LOOP", Const, 0, ""},
+		{"IPV6_DEFHLIM", Const, 0, ""},
+		{"IPV6_DONTFRAG", Const, 0, ""},
+		{"IPV6_DROP_MEMBERSHIP", Const, 0, ""},
+		{"IPV6_DSTOPTS", Const, 0, ""},
+		{"IPV6_ESP_NETWORK_LEVEL", Const, 1, ""},
+		{"IPV6_ESP_TRANS_LEVEL", Const, 1, ""},
+		{"IPV6_FAITH", Const, 0, ""},
+		{"IPV6_FLOWINFO_MASK", Const, 0, ""},
+		{"IPV6_FLOWLABEL_MASK", Const, 0, ""},
+		{"IPV6_FRAGTTL", Const, 0, ""},
+		{"IPV6_FW_ADD", Const, 0, ""},
+		{"IPV6_FW_DEL", Const, 0, ""},
+		{"IPV6_FW_FLUSH", Const, 0, ""},
+		{"IPV6_FW_GET", Const, 0, ""},
+		{"IPV6_FW_ZERO", Const, 0, ""},
+		{"IPV6_HLIMDEC", Const, 0, ""},
+		{"IPV6_HOPLIMIT", Const, 0, ""},
+		{"IPV6_HOPOPTS", Const, 0, ""},
+		{"IPV6_IPCOMP_LEVEL", Const, 1, ""},
+		{"IPV6_IPSEC_POLICY", Const, 0, ""},
+		{"IPV6_JOIN_ANYCAST", Const, 0, ""},
+		{"IPV6_JOIN_GROUP", Const, 0, ""},
+		{"IPV6_LEAVE_ANYCAST", Const, 0, ""},
+		{"IPV6_LEAVE_GROUP", Const, 0, ""},
+		{"IPV6_MAXHLIM", Const, 0, ""},
+		{"IPV6_MAXOPTHDR", Const, 0, ""},
+		{"IPV6_MAXPACKET", Const, 0, ""},
+		{"IPV6_MAX_GROUP_SRC_FILTER", Const, 0, ""},
+		{"IPV6_MAX_MEMBERSHIPS", Const, 0, ""},
+		{"IPV6_MAX_SOCK_SRC_FILTER", Const, 0, ""},
+		{"IPV6_MIN_MEMBERSHIPS", Const, 0, ""},
+		{"IPV6_MMTU", Const, 0, ""},
+		{"IPV6_MSFILTER", Const, 0, ""},
+		{"IPV6_MTU", Const, 0, ""},
+		{"IPV6_MTU_DISCOVER", Const, 0, ""},
+		{"IPV6_MULTICAST_HOPS", Const, 0, ""},
+		{"IPV6_MULTICAST_IF", Const, 0, ""},
+		{"IPV6_MULTICAST_LOOP", Const, 0, ""},
+		{"IPV6_NEXTHOP", Const, 0, ""},
+		{"IPV6_OPTIONS", Const, 1, ""},
+		{"IPV6_PATHMTU", Const, 0, ""},
+		{"IPV6_PIPEX", Const, 1, ""},
+		{"IPV6_PKTINFO", Const, 0, ""},
+		{"IPV6_PMTUDISC_DO", Const, 0, ""},
+		{"IPV6_PMTUDISC_DONT", Const, 0, ""},
+		{"IPV6_PMTUDISC_PROBE", Const, 0, ""},
+		{"IPV6_PMTUDISC_WANT", Const, 0, ""},
+		{"IPV6_PORTRANGE", Const, 0, ""},
+		{"IPV6_PORTRANGE_DEFAULT", Const, 0, ""},
+		{"IPV6_PORTRANGE_HIGH", Const, 0, ""},
+		{"IPV6_PORTRANGE_LOW", Const, 0, ""},
+		{"IPV6_PREFER_TEMPADDR", Const, 0, ""},
+		{"IPV6_RECVDSTOPTS", Const, 0, ""},
+		{"IPV6_RECVDSTPORT", Const, 3, ""},
+		{"IPV6_RECVERR", Const, 0, ""},
+		{"IPV6_RECVHOPLIMIT", Const, 0, ""},
+		{"IPV6_RECVHOPOPTS", Const, 0, ""},
+		{"IPV6_RECVPATHMTU", Const, 0, ""},
+		{"IPV6_RECVPKTINFO", Const, 0, ""},
+		{"IPV6_RECVRTHDR", Const, 0, ""},
+		{"IPV6_RECVTCLASS", Const, 0, ""},
+		{"IPV6_ROUTER_ALERT", Const, 0, ""},
+		{"IPV6_RTABLE", Const, 1, ""},
+		{"IPV6_RTHDR", Const, 0, ""},
+		{"IPV6_RTHDRDSTOPTS", Const, 0, ""},
+		{"IPV6_RTHDR_LOOSE", Const, 0, ""},
+		{"IPV6_RTHDR_STRICT", Const, 0, ""},
+		{"IPV6_RTHDR_TYPE_0", Const, 0, ""},
+		{"IPV6_RXDSTOPTS", Const, 0, ""},
+		{"IPV6_RXHOPOPTS", Const, 0, ""},
+		{"IPV6_SOCKOPT_RESERVED1", Const, 0, ""},
+		{"IPV6_TCLASS", Const, 0, ""},
+		{"IPV6_UNICAST_HOPS", Const, 0, ""},
+		{"IPV6_USE_MIN_MTU", Const, 0, ""},
+		{"IPV6_V6ONLY", Const, 0, ""},
+		{"IPV6_VERSION", Const, 0, ""},
+		{"IPV6_VERSION_MASK", Const, 0, ""},
+		{"IPV6_XFRM_POLICY", Const, 0, ""},
+		{"IP_ADD_MEMBERSHIP", Const, 0, ""},
+		{"IP_ADD_SOURCE_MEMBERSHIP", Const, 0, ""},
+		{"IP_AUTH_LEVEL", Const, 1, ""},
+		{"IP_BINDANY", Const, 0, ""},
+		{"IP_BLOCK_SOURCE", Const, 0, ""},
+		{"IP_BOUND_IF", Const, 0, ""},
+		{"IP_DEFAULT_MULTICAST_LOOP", Const, 0, ""},
+		{"IP_DEFAULT_MULTICAST_TTL", Const, 0, ""},
+		{"IP_DF", Const, 0, ""},
+		{"IP_DIVERTFL", Const, 3, ""},
+		{"IP_DONTFRAG", Const, 0, ""},
+		{"IP_DROP_MEMBERSHIP", Const, 0, ""},
+		{"IP_DROP_SOURCE_MEMBERSHIP", Const, 0, ""},
+		{"IP_DUMMYNET3", Const, 0, ""},
+		{"IP_DUMMYNET_CONFIGURE", Const, 0, ""},
+		{"IP_DUMMYNET_DEL", Const, 0, ""},
+		{"IP_DUMMYNET_FLUSH", Const, 0, ""},
+		{"IP_DUMMYNET_GET", Const, 0, ""},
+		{"IP_EF", Const, 1, ""},
+		{"IP_ERRORMTU", Const, 1, ""},
+		{"IP_ESP_NETWORK_LEVEL", Const, 1, ""},
+		{"IP_ESP_TRANS_LEVEL", Const, 1, ""},
+		{"IP_FAITH", Const, 0, ""},
+		{"IP_FREEBIND", Const, 0, ""},
+		{"IP_FW3", Const, 0, ""},
+		{"IP_FW_ADD", Const, 0, ""},
+		{"IP_FW_DEL", Const, 0, ""},
+		{"IP_FW_FLUSH", Const, 0, ""},
+		{"IP_FW_GET", Const, 0, ""},
+		{"IP_FW_NAT_CFG", Const, 0, ""},
+		{"IP_FW_NAT_DEL", Const, 0, ""},
+		{"IP_FW_NAT_GET_CONFIG", Const, 0, ""},
+		{"IP_FW_NAT_GET_LOG", Const, 0, ""},
+		{"IP_FW_RESETLOG", Const, 0, ""},
+		{"IP_FW_TABLE_ADD", Const, 0, ""},
+		{"IP_FW_TABLE_DEL", Const, 0, ""},
+		{"IP_FW_TABLE_FLUSH", Const, 0, ""},
+		{"IP_FW_TABLE_GETSIZE", Const, 0, ""},
+		{"IP_FW_TABLE_LIST", Const, 0, ""},
+		{"IP_FW_ZERO", Const, 0, ""},
+		{"IP_HDRINCL", Const, 0, ""},
+		{"IP_IPCOMP_LEVEL", Const, 1, ""},
+		{"IP_IPSECFLOWINFO", Const, 1, ""},
+		{"IP_IPSEC_LOCAL_AUTH", Const, 1, ""},
+		{"IP_IPSEC_LOCAL_CRED", Const, 1, ""},
+		{"IP_IPSEC_LOCAL_ID", Const, 1, ""},
+		{"IP_IPSEC_POLICY", Const, 0, ""},
+		{"IP_IPSEC_REMOTE_AUTH", Const, 1, ""},
+		{"IP_IPSEC_REMOTE_CRED", Const, 1, ""},
+		{"IP_IPSEC_REMOTE_ID", Const, 1, ""},
+		{"IP_MAXPACKET", Const, 0, ""},
+		{"IP_MAX_GROUP_SRC_FILTER", Const, 0, ""},
+		{"IP_MAX_MEMBERSHIPS", Const, 0, ""},
+		{"IP_MAX_SOCK_MUTE_FILTER", Const, 0, ""},
+		{"IP_MAX_SOCK_SRC_FILTER", Const, 0, ""},
+		{"IP_MAX_SOURCE_FILTER", Const, 0, ""},
+		{"IP_MF", Const, 0, ""},
+		{"IP_MINFRAGSIZE", Const, 1, ""},
+		{"IP_MINTTL", Const, 0, ""},
+		{"IP_MIN_MEMBERSHIPS", Const, 0, ""},
+		{"IP_MSFILTER", Const, 0, ""},
+		{"IP_MSS", Const, 0, ""},
+		{"IP_MTU", Const, 0, ""},
+		{"IP_MTU_DISCOVER", Const, 0, ""},
+		{"IP_MULTICAST_IF", Const, 0, ""},
+		{"IP_MULTICAST_IFINDEX", Const, 0, ""},
+		{"IP_MULTICAST_LOOP", Const, 0, ""},
+		{"IP_MULTICAST_TTL", Const, 0, ""},
+		{"IP_MULTICAST_VIF", Const, 0, ""},
+		{"IP_NAT__XXX", Const, 0, ""},
+		{"IP_OFFMASK", Const, 0, ""},
+		{"IP_OLD_FW_ADD", Const, 0, ""},
+		{"IP_OLD_FW_DEL", Const, 0, ""},
+		{"IP_OLD_FW_FLUSH", Const, 0, ""},
+		{"IP_OLD_FW_GET", Const, 0, ""},
+		{"IP_OLD_FW_RESETLOG", Const, 0, ""},
+		{"IP_OLD_FW_ZERO", Const, 0, ""},
+		{"IP_ONESBCAST", Const, 0, ""},
+		{"IP_OPTIONS", Const, 0, ""},
+		{"IP_ORIGDSTADDR", Const, 0, ""},
+		{"IP_PASSSEC", Const, 0, ""},
+		{"IP_PIPEX", Const, 1, ""},
+		{"IP_PKTINFO", Const, 0, ""},
+		{"IP_PKTOPTIONS", Const, 0, ""},
+		{"IP_PMTUDISC", Const, 0, ""},
+		{"IP_PMTUDISC_DO", Const, 0, ""},
+		{"IP_PMTUDISC_DONT", Const, 0, ""},
+		{"IP_PMTUDISC_PROBE", Const, 0, ""},
+		{"IP_PMTUDISC_WANT", Const, 0, ""},
+		{"IP_PORTRANGE", Const, 0, ""},
+		{"IP_PORTRANGE_DEFAULT", Const, 0, ""},
+		{"IP_PORTRANGE_HIGH", Const, 0, ""},
+		{"IP_PORTRANGE_LOW", Const, 0, ""},
+		{"IP_RECVDSTADDR", Const, 0, ""},
+		{"IP_RECVDSTPORT", Const, 1, ""},
+		{"IP_RECVERR", Const, 0, ""},
+		{"IP_RECVIF", Const, 0, ""},
+		{"IP_RECVOPTS", Const, 0, ""},
+		{"IP_RECVORIGDSTADDR", Const, 0, ""},
+		{"IP_RECVPKTINFO", Const, 0, ""},
+		{"IP_RECVRETOPTS", Const, 0, ""},
+		{"IP_RECVRTABLE", Const, 1, ""},
+		{"IP_RECVTOS", Const, 0, ""},
+		{"IP_RECVTTL", Const, 0, ""},
+		{"IP_RETOPTS", Const, 0, ""},
+		{"IP_RF", Const, 0, ""},
+		{"IP_ROUTER_ALERT", Const, 0, ""},
+		{"IP_RSVP_OFF", Const, 0, ""},
+		{"IP_RSVP_ON", Const, 0, ""},
+		{"IP_RSVP_VIF_OFF", Const, 0, ""},
+		{"IP_RSVP_VIF_ON", Const, 0, ""},
+		{"IP_RTABLE", Const, 1, ""},
+		{"IP_SENDSRCADDR", Const, 0, ""},
+		{"IP_STRIPHDR", Const, 0, ""},
+		{"IP_TOS", Const, 0, ""},
+		{"IP_TRAFFIC_MGT_BACKGROUND", Const, 0, ""},
+		{"IP_TRANSPARENT", Const, 0, ""},
+		{"IP_TTL", Const, 0, ""},
+		{"IP_UNBLOCK_SOURCE", Const, 0, ""},
+		{"IP_XFRM_POLICY", Const, 0, ""},
+		{"IPv6MTUInfo", Type, 2, ""},
+		{"IPv6MTUInfo.Addr", Field, 2, ""},
+		{"IPv6MTUInfo.Mtu", Field, 2, ""},
+		{"IPv6Mreq", Type, 0, ""},
+		{"IPv6Mreq.Interface", Field, 0, ""},
+		{"IPv6Mreq.Multiaddr", Field, 0, ""},
+		{"ISIG", Const, 0, ""},
+		{"ISTRIP", Const, 0, ""},
+		{"IUCLC", Const, 0, ""},
+		{"IUTF8", Const, 0, ""},
+		{"IXANY", Const, 0, ""},
+		{"IXOFF", Const, 0, ""},
+		{"IXON", Const, 0, ""},
+		{"IfAddrmsg", Type, 0, ""},
+		{"IfAddrmsg.Family", Field, 0, ""},
+		{"IfAddrmsg.Flags", Field, 0, ""},
+		{"IfAddrmsg.Index", Field, 0, ""},
+		{"IfAddrmsg.Prefixlen", Field, 0, ""},
+		{"IfAddrmsg.Scope", Field, 0, ""},
+		{"IfAnnounceMsghdr", Type, 1, ""},
+		{"IfAnnounceMsghdr.Hdrlen", Field, 2, ""},
+		{"IfAnnounceMsghdr.Index", Field, 1, ""},
+		{"IfAnnounceMsghdr.Msglen", Field, 1, ""},
+		{"IfAnnounceMsghdr.Name", Field, 1, ""},
+		{"IfAnnounceMsghdr.Type", Field, 1, ""},
+		{"IfAnnounceMsghdr.Version", Field, 1, ""},
+		{"IfAnnounceMsghdr.What", Field, 1, ""},
+		{"IfData", Type, 0, ""},
+		{"IfData.Addrlen", Field, 0, ""},
+		{"IfData.Baudrate", Field, 0, ""},
+		{"IfData.Capabilities", Field, 2, ""},
+		{"IfData.Collisions", Field, 0, ""},
+		{"IfData.Datalen", Field, 0, ""},
+		{"IfData.Epoch", Field, 0, ""},
+		{"IfData.Hdrlen", Field, 0, ""},
+		{"IfData.Hwassist", Field, 0, ""},
+		{"IfData.Ibytes", Field, 0, ""},
+		{"IfData.Ierrors", Field, 0, ""},
+		{"IfData.Imcasts", Field, 0, ""},
+		{"IfData.Ipackets", Field, 0, ""},
+		{"IfData.Iqdrops", Field, 0, ""},
+		{"IfData.Lastchange", Field, 0, ""},
+		{"IfData.Link_state", Field, 0, ""},
+		{"IfData.Mclpool", Field, 2, ""},
+		{"IfData.Metric", Field, 0, ""},
+		{"IfData.Mtu", Field, 0, ""},
+		{"IfData.Noproto", Field, 0, ""},
+		{"IfData.Obytes", Field, 0, ""},
+		{"IfData.Oerrors", Field, 0, ""},
+		{"IfData.Omcasts", Field, 0, ""},
+		{"IfData.Opackets", Field, 0, ""},
+		{"IfData.Pad", Field, 2, ""},
+		{"IfData.Pad_cgo_0", Field, 2, ""},
+		{"IfData.Pad_cgo_1", Field, 2, ""},
+		{"IfData.Physical", Field, 0, ""},
+		{"IfData.Recvquota", Field, 0, ""},
+		{"IfData.Recvtiming", Field, 0, ""},
+		{"IfData.Reserved1", Field, 0, ""},
+		{"IfData.Reserved2", Field, 0, ""},
+		{"IfData.Spare_char1", Field, 0, ""},
+		{"IfData.Spare_char2", Field, 0, ""},
+		{"IfData.Type", Field, 0, ""},
+		{"IfData.Typelen", Field, 0, ""},
+		{"IfData.Unused1", Field, 0, ""},
+		{"IfData.Unused2", Field, 0, ""},
+		{"IfData.Xmitquota", Field, 0, ""},
+		{"IfData.Xmittiming", Field, 0, ""},
+		{"IfInfomsg", Type, 0, ""},
+		{"IfInfomsg.Change", Field, 0, ""},
+		{"IfInfomsg.Family", Field, 0, ""},
+		{"IfInfomsg.Flags", Field, 0, ""},
+		{"IfInfomsg.Index", Field, 0, ""},
+		{"IfInfomsg.Type", Field, 0, ""},
+		{"IfInfomsg.X__ifi_pad", Field, 0, ""},
+		{"IfMsghdr", Type, 0, ""},
+		{"IfMsghdr.Addrs", Field, 0, ""},
+		{"IfMsghdr.Data", Field, 0, ""},
+		{"IfMsghdr.Flags", Field, 0, ""},
+		{"IfMsghdr.Hdrlen", Field, 2, ""},
+		{"IfMsghdr.Index", Field, 0, ""},
+		{"IfMsghdr.Msglen", Field, 0, ""},
+		{"IfMsghdr.Pad1", Field, 2, ""},
+		{"IfMsghdr.Pad2", Field, 2, ""},
+		{"IfMsghdr.Pad_cgo_0", Field, 0, ""},
+		{"IfMsghdr.Pad_cgo_1", Field, 2, ""},
+		{"IfMsghdr.Tableid", Field, 2, ""},
+		{"IfMsghdr.Type", Field, 0, ""},
+		{"IfMsghdr.Version", Field, 0, ""},
+		{"IfMsghdr.Xflags", Field, 2, ""},
+		{"IfaMsghdr", Type, 0, ""},
+		{"IfaMsghdr.Addrs", Field, 0, ""},
+		{"IfaMsghdr.Flags", Field, 0, ""},
+		{"IfaMsghdr.Hdrlen", Field, 2, ""},
+		{"IfaMsghdr.Index", Field, 0, ""},
+		{"IfaMsghdr.Metric", Field, 0, ""},
+		{"IfaMsghdr.Msglen", Field, 0, ""},
+		{"IfaMsghdr.Pad1", Field, 2, ""},
+		{"IfaMsghdr.Pad2", Field, 2, ""},
+		{"IfaMsghdr.Pad_cgo_0", Field, 0, ""},
+		{"IfaMsghdr.Tableid", Field, 2, ""},
+		{"IfaMsghdr.Type", Field, 0, ""},
+		{"IfaMsghdr.Version", Field, 0, ""},
+		{"IfmaMsghdr", Type, 0, ""},
+		{"IfmaMsghdr.Addrs", Field, 0, ""},
+		{"IfmaMsghdr.Flags", Field, 0, ""},
+		{"IfmaMsghdr.Index", Field, 0, ""},
+		{"IfmaMsghdr.Msglen", Field, 0, ""},
+		{"IfmaMsghdr.Pad_cgo_0", Field, 0, ""},
+		{"IfmaMsghdr.Type", Field, 0, ""},
+		{"IfmaMsghdr.Version", Field, 0, ""},
+		{"IfmaMsghdr2", Type, 0, ""},
+		{"IfmaMsghdr2.Addrs", Field, 0, ""},
+		{"IfmaMsghdr2.Flags", Field, 0, ""},
+		{"IfmaMsghdr2.Index", Field, 0, ""},
+		{"IfmaMsghdr2.Msglen", Field, 0, ""},
+		{"IfmaMsghdr2.Pad_cgo_0", Field, 0, ""},
+		{"IfmaMsghdr2.Refcount", Field, 0, ""},
+		{"IfmaMsghdr2.Type", Field, 0, ""},
+		{"IfmaMsghdr2.Version", Field, 0, ""},
+		{"ImplementsGetwd", Const, 0, ""},
+		{"Inet4Pktinfo", Type, 0, ""},
+		{"Inet4Pktinfo.Addr", Field, 0, ""},
+		{"Inet4Pktinfo.Ifindex", Field, 0, ""},
+		{"Inet4Pktinfo.Spec_dst", Field, 0, ""},
+		{"Inet6Pktinfo", Type, 0, ""},
+		{"Inet6Pktinfo.Addr", Field, 0, ""},
+		{"Inet6Pktinfo.Ifindex", Field, 0, ""},
+		{"InotifyAddWatch", Func, 0, "func(fd int, pathname string, mask uint32) (watchdesc int, err error)"},
+		{"InotifyEvent", Type, 0, ""},
+		{"InotifyEvent.Cookie", Field, 0, ""},
+		{"InotifyEvent.Len", Field, 0, ""},
+		{"InotifyEvent.Mask", Field, 0, ""},
+		{"InotifyEvent.Name", Field, 0, ""},
+		{"InotifyEvent.Wd", Field, 0, ""},
+		{"InotifyInit", Func, 0, "func() (fd int, err error)"},
+		{"InotifyInit1", Func, 0, "func(flags int) (fd int, err error)"},
+		{"InotifyRmWatch", Func, 0, "func(fd int, watchdesc uint32) (success int, err error)"},
+		{"InterfaceAddrMessage", Type, 0, ""},
+		{"InterfaceAddrMessage.Data", Field, 0, ""},
+		{"InterfaceAddrMessage.Header", Field, 0, ""},
+		{"InterfaceAnnounceMessage", Type, 1, ""},
+		{"InterfaceAnnounceMessage.Header", Field, 1, ""},
+		{"InterfaceInfo", Type, 0, ""},
+		{"InterfaceInfo.Address", Field, 0, ""},
+		{"InterfaceInfo.BroadcastAddress", Field, 0, ""},
+		{"InterfaceInfo.Flags", Field, 0, ""},
+		{"InterfaceInfo.Netmask", Field, 0, ""},
+		{"InterfaceMessage", Type, 0, ""},
+		{"InterfaceMessage.Data", Field, 0, ""},
+		{"InterfaceMessage.Header", Field, 0, ""},
+		{"InterfaceMulticastAddrMessage", Type, 0, ""},
+		{"InterfaceMulticastAddrMessage.Data", Field, 0, ""},
+		{"InterfaceMulticastAddrMessage.Header", Field, 0, ""},
+		{"InvalidHandle", Const, 0, ""},
+		{"Ioperm", Func, 0, "func(from int, num int, on int) (err error)"},
+		{"Iopl", Func, 0, "func(level int) (err error)"},
+		{"Iovec", Type, 0, ""},
+		{"Iovec.Base", Field, 0, ""},
+		{"Iovec.Len", Field, 0, ""},
+		{"IpAdapterInfo", Type, 0, ""},
+		{"IpAdapterInfo.AdapterName", Field, 0, ""},
+		{"IpAdapterInfo.Address", Field, 0, ""},
+		{"IpAdapterInfo.AddressLength", Field, 0, ""},
+		{"IpAdapterInfo.ComboIndex", Field, 0, ""},
+		{"IpAdapterInfo.CurrentIpAddress", Field, 0, ""},
+		{"IpAdapterInfo.Description", Field, 0, ""},
+		{"IpAdapterInfo.DhcpEnabled", Field, 0, ""},
+		{"IpAdapterInfo.DhcpServer", Field, 0, ""},
+		{"IpAdapterInfo.GatewayList", Field, 0, ""},
+		{"IpAdapterInfo.HaveWins", Field, 0, ""},
+		{"IpAdapterInfo.Index", Field, 0, ""},
+		{"IpAdapterInfo.IpAddressList", Field, 0, ""},
+		{"IpAdapterInfo.LeaseExpires", Field, 0, ""},
+		{"IpAdapterInfo.LeaseObtained", Field, 0, ""},
+		{"IpAdapterInfo.Next", Field, 0, ""},
+		{"IpAdapterInfo.PrimaryWinsServer", Field, 0, ""},
+		{"IpAdapterInfo.SecondaryWinsServer", Field, 0, ""},
+		{"IpAdapterInfo.Type", Field, 0, ""},
+		{"IpAddrString", Type, 0, ""},
+		{"IpAddrString.Context", Field, 0, ""},
+		{"IpAddrString.IpAddress", Field, 0, ""},
+		{"IpAddrString.IpMask", Field, 0, ""},
+		{"IpAddrString.Next", Field, 0, ""},
+		{"IpAddressString", Type, 0, ""},
+		{"IpAddressString.String", Field, 0, ""},
+		{"IpMaskString", Type, 0, ""},
+		{"IpMaskString.String", Field, 2, ""},
+		{"Issetugid", Func, 0, ""},
+		{"KEY_ALL_ACCESS", Const, 0, ""},
+		{"KEY_CREATE_LINK", Const, 0, ""},
+		{"KEY_CREATE_SUB_KEY", Const, 0, ""},
+		{"KEY_ENUMERATE_SUB_KEYS", Const, 0, ""},
+		{"KEY_EXECUTE", Const, 0, ""},
+		{"KEY_NOTIFY", Const, 0, ""},
+		{"KEY_QUERY_VALUE", Const, 0, ""},
+		{"KEY_READ", Const, 0, ""},
+		{"KEY_SET_VALUE", Const, 0, ""},
+		{"KEY_WOW64_32KEY", Const, 0, ""},
+		{"KEY_WOW64_64KEY", Const, 0, ""},
+		{"KEY_WRITE", Const, 0, ""},
+		{"Kevent", Func, 0, ""},
+		{"Kevent_t", Type, 0, ""},
+		{"Kevent_t.Data", Field, 0, ""},
+		{"Kevent_t.Fflags", Field, 0, ""},
+		{"Kevent_t.Filter", Field, 0, ""},
+		{"Kevent_t.Flags", Field, 0, ""},
+		{"Kevent_t.Ident", Field, 0, ""},
+		{"Kevent_t.Pad_cgo_0", Field, 2, ""},
+		{"Kevent_t.Udata", Field, 0, ""},
+		{"Kill", Func, 0, "func(pid int, sig Signal) (err error)"},
+		{"Klogctl", Func, 0, "func(typ int, buf []byte) (n int, err error)"},
+		{"Kqueue", Func, 0, ""},
+		{"LANG_ENGLISH", Const, 0, ""},
+		{"LAYERED_PROTOCOL", Const, 2, ""},
+		{"LCNT_OVERLOAD_FLUSH", Const, 1, ""},
+		{"LINUX_REBOOT_CMD_CAD_OFF", Const, 0, ""},
+		{"LINUX_REBOOT_CMD_CAD_ON", Const, 0, ""},
+		{"LINUX_REBOOT_CMD_HALT", Const, 0, ""},
+		{"LINUX_REBOOT_CMD_KEXEC", Const, 0, ""},
+		{"LINUX_REBOOT_CMD_POWER_OFF", Const, 0, ""},
+		{"LINUX_REBOOT_CMD_RESTART", Const, 0, ""},
+		{"LINUX_REBOOT_CMD_RESTART2", Const, 0, ""},
+		{"LINUX_REBOOT_CMD_SW_SUSPEND", Const, 0, ""},
+		{"LINUX_REBOOT_MAGIC1", Const, 0, ""},
+		{"LINUX_REBOOT_MAGIC2", Const, 0, ""},
+		{"LOCK_EX", Const, 0, ""},
+		{"LOCK_NB", Const, 0, ""},
+		{"LOCK_SH", Const, 0, ""},
+		{"LOCK_UN", Const, 0, ""},
+		{"LazyDLL", Type, 0, ""},
+		{"LazyDLL.Name", Field, 0, ""},
+		{"LazyProc", Type, 0, ""},
+		{"LazyProc.Name", Field, 0, ""},
+		{"Lchown", Func, 0, "func(path string, uid int, gid int) (err error)"},
+		{"Linger", Type, 0, ""},
+		{"Linger.Linger", Field, 0, ""},
+		{"Linger.Onoff", Field, 0, ""},
+		{"Link", Func, 0, "func(oldpath string, newpath string) (err error)"},
+		{"Listen", Func, 0, "func(s int, n int) (err error)"},
+		{"Listxattr", Func, 1, "func(path string, dest []byte) (sz int, err error)"},
+		{"LoadCancelIoEx", Func, 1, ""},
+		{"LoadConnectEx", Func, 1, ""},
+		{"LoadCreateSymbolicLink", Func, 4, ""},
+		{"LoadDLL", Func, 0, ""},
+		{"LoadGetAddrInfo", Func, 1, ""},
+		{"LoadLibrary", Func, 0, ""},
+		{"LoadSetFileCompletionNotificationModes", Func, 2, ""},
+		{"LocalFree", Func, 0, ""},
+		{"Log2phys_t", Type, 0, ""},
+		{"Log2phys_t.Contigbytes", Field, 0, ""},
+		{"Log2phys_t.Devoffset", Field, 0, ""},
+		{"Log2phys_t.Flags", Field, 0, ""},
+		{"LookupAccountName", Func, 0, ""},
+		{"LookupAccountSid", Func, 0, ""},
+		{"LookupSID", Func, 0, ""},
+		{"LsfJump", Func, 0, "func(code int, k int, jt int, jf int) *SockFilter"},
+		{"LsfSocket", Func, 0, "func(ifindex int, proto int) (int, error)"},
+		{"LsfStmt", Func, 0, "func(code int, k int) *SockFilter"},
+		{"Lstat", Func, 0, "func(path string, stat *Stat_t) (err error)"},
+		{"MADV_AUTOSYNC", Const, 1, ""},
+		{"MADV_CAN_REUSE", Const, 0, ""},
+		{"MADV_CORE", Const, 1, ""},
+		{"MADV_DOFORK", Const, 0, ""},
+		{"MADV_DONTFORK", Const, 0, ""},
+		{"MADV_DONTNEED", Const, 0, ""},
+		{"MADV_FREE", Const, 0, ""},
+		{"MADV_FREE_REUSABLE", Const, 0, ""},
+		{"MADV_FREE_REUSE", Const, 0, ""},
+		{"MADV_HUGEPAGE", Const, 0, ""},
+		{"MADV_HWPOISON", Const, 0, ""},
+		{"MADV_MERGEABLE", Const, 0, ""},
+		{"MADV_NOCORE", Const, 1, ""},
+		{"MADV_NOHUGEPAGE", Const, 0, ""},
+		{"MADV_NORMAL", Const, 0, ""},
+		{"MADV_NOSYNC", Const, 1, ""},
+		{"MADV_PROTECT", Const, 1, ""},
+		{"MADV_RANDOM", Const, 0, ""},
+		{"MADV_REMOVE", Const, 0, ""},
+		{"MADV_SEQUENTIAL", Const, 0, ""},
+		{"MADV_SPACEAVAIL", Const, 3, ""},
+		{"MADV_UNMERGEABLE", Const, 0, ""},
+		{"MADV_WILLNEED", Const, 0, ""},
+		{"MADV_ZERO_WIRED_PAGES", Const, 0, ""},
+		{"MAP_32BIT", Const, 0, ""},
+		{"MAP_ALIGNED_SUPER", Const, 3, ""},
+		{"MAP_ALIGNMENT_16MB", Const, 3, ""},
+		{"MAP_ALIGNMENT_1TB", Const, 3, ""},
+		{"MAP_ALIGNMENT_256TB", Const, 3, ""},
+		{"MAP_ALIGNMENT_4GB", Const, 3, ""},
+		{"MAP_ALIGNMENT_64KB", Const, 3, ""},
+		{"MAP_ALIGNMENT_64PB", Const, 3, ""},
+		{"MAP_ALIGNMENT_MASK", Const, 3, ""},
+		{"MAP_ALIGNMENT_SHIFT", Const, 3, ""},
+		{"MAP_ANON", Const, 0, ""},
+		{"MAP_ANONYMOUS", Const, 0, ""},
+		{"MAP_COPY", Const, 0, ""},
+		{"MAP_DENYWRITE", Const, 0, ""},
+		{"MAP_EXECUTABLE", Const, 0, ""},
+		{"MAP_FILE", Const, 0, ""},
+		{"MAP_FIXED", Const, 0, ""},
+		{"MAP_FLAGMASK", Const, 3, ""},
+		{"MAP_GROWSDOWN", Const, 0, ""},
+		{"MAP_HASSEMAPHORE", Const, 0, ""},
+		{"MAP_HUGETLB", Const, 0, ""},
+		{"MAP_INHERIT", Const, 3, ""},
+		{"MAP_INHERIT_COPY", Const, 3, ""},
+		{"MAP_INHERIT_DEFAULT", Const, 3, ""},
+		{"MAP_INHERIT_DONATE_COPY", Const, 3, ""},
+		{"MAP_INHERIT_NONE", Const, 3, ""},
+		{"MAP_INHERIT_SHARE", Const, 3, ""},
+		{"MAP_JIT", Const, 0, ""},
+		{"MAP_LOCKED", Const, 0, ""},
+		{"MAP_NOCACHE", Const, 0, ""},
+		{"MAP_NOCORE", Const, 1, ""},
+		{"MAP_NOEXTEND", Const, 0, ""},
+		{"MAP_NONBLOCK", Const, 0, ""},
+		{"MAP_NORESERVE", Const, 0, ""},
+		{"MAP_NOSYNC", Const, 1, ""},
+		{"MAP_POPULATE", Const, 0, ""},
+		{"MAP_PREFAULT_READ", Const, 1, ""},
+		{"MAP_PRIVATE", Const, 0, ""},
+		{"MAP_RENAME", Const, 0, ""},
+		{"MAP_RESERVED0080", Const, 0, ""},
+		{"MAP_RESERVED0100", Const, 1, ""},
+		{"MAP_SHARED", Const, 0, ""},
+		{"MAP_STACK", Const, 0, ""},
+		{"MAP_TRYFIXED", Const, 3, ""},
+		{"MAP_TYPE", Const, 0, ""},
+		{"MAP_WIRED", Const, 3, ""},
+		{"MAXIMUM_REPARSE_DATA_BUFFER_SIZE", Const, 4, ""},
+		{"MAXLEN_IFDESCR", Const, 0, ""},
+		{"MAXLEN_PHYSADDR", Const, 0, ""},
+		{"MAX_ADAPTER_ADDRESS_LENGTH", Const, 0, ""},
+		{"MAX_ADAPTER_DESCRIPTION_LENGTH", Const, 0, ""},
+		{"MAX_ADAPTER_NAME_LENGTH", Const, 0, ""},
+		{"MAX_COMPUTERNAME_LENGTH", Const, 0, ""},
+		{"MAX_INTERFACE_NAME_LEN", Const, 0, ""},
+		{"MAX_LONG_PATH", Const, 0, ""},
+		{"MAX_PATH", Const, 0, ""},
+		{"MAX_PROTOCOL_CHAIN", Const, 2, ""},
+		{"MCL_CURRENT", Const, 0, ""},
+		{"MCL_FUTURE", Const, 0, ""},
+		{"MNT_DETACH", Const, 0, ""},
+		{"MNT_EXPIRE", Const, 0, ""},
+		{"MNT_FORCE", Const, 0, ""},
+		{"MSG_BCAST", Const, 1, ""},
+		{"MSG_CMSG_CLOEXEC", Const, 0, ""},
+		{"MSG_COMPAT", Const, 0, ""},
+		{"MSG_CONFIRM", Const, 0, ""},
+		{"MSG_CONTROLMBUF", Const, 1, ""},
+		{"MSG_CTRUNC", Const, 0, ""},
+		{"MSG_DONTROUTE", Const, 0, ""},
+		{"MSG_DONTWAIT", Const, 0, ""},
+		{"MSG_EOF", Const, 0, ""},
+		{"MSG_EOR", Const, 0, ""},
+		{"MSG_ERRQUEUE", Const, 0, ""},
+		{"MSG_FASTOPEN", Const, 1, ""},
+		{"MSG_FIN", Const, 0, ""},
+		{"MSG_FLUSH", Const, 0, ""},
+		{"MSG_HAVEMORE", Const, 0, ""},
+		{"MSG_HOLD", Const, 0, ""},
+		{"MSG_IOVUSRSPACE", Const, 1, ""},
+		{"MSG_LENUSRSPACE", Const, 1, ""},
+		{"MSG_MCAST", Const, 1, ""},
+		{"MSG_MORE", Const, 0, ""},
+		{"MSG_NAMEMBUF", Const, 1, ""},
+		{"MSG_NBIO", Const, 0, ""},
+		{"MSG_NEEDSA", Const, 0, ""},
+		{"MSG_NOSIGNAL", Const, 0, ""},
+		{"MSG_NOTIFICATION", Const, 0, ""},
+		{"MSG_OOB", Const, 0, ""},
+		{"MSG_PEEK", Const, 0, ""},
+		{"MSG_PROXY", Const, 0, ""},
+		{"MSG_RCVMORE", Const, 0, ""},
+		{"MSG_RST", Const, 0, ""},
+		{"MSG_SEND", Const, 0, ""},
+		{"MSG_SYN", Const, 0, ""},
+		{"MSG_TRUNC", Const, 0, ""},
+		{"MSG_TRYHARD", Const, 0, ""},
+		{"MSG_USERFLAGS", Const, 1, ""},
+		{"MSG_WAITALL", Const, 0, ""},
+		{"MSG_WAITFORONE", Const, 0, ""},
+		{"MSG_WAITSTREAM", Const, 0, ""},
+		{"MS_ACTIVE", Const, 0, ""},
+		{"MS_ASYNC", Const, 0, ""},
+		{"MS_BIND", Const, 0, ""},
+		{"MS_DEACTIVATE", Const, 0, ""},
+		{"MS_DIRSYNC", Const, 0, ""},
+		{"MS_INVALIDATE", Const, 0, ""},
+		{"MS_I_VERSION", Const, 0, ""},
+		{"MS_KERNMOUNT", Const, 0, ""},
+		{"MS_KILLPAGES", Const, 0, ""},
+		{"MS_MANDLOCK", Const, 0, ""},
+		{"MS_MGC_MSK", Const, 0, ""},
+		{"MS_MGC_VAL", Const, 0, ""},
+		{"MS_MOVE", Const, 0, ""},
+		{"MS_NOATIME", Const, 0, ""},
+		{"MS_NODEV", Const, 0, ""},
+		{"MS_NODIRATIME", Const, 0, ""},
+		{"MS_NOEXEC", Const, 0, ""},
+		{"MS_NOSUID", Const, 0, ""},
+		{"MS_NOUSER", Const, 0, ""},
+		{"MS_POSIXACL", Const, 0, ""},
+		{"MS_PRIVATE", Const, 0, ""},
+		{"MS_RDONLY", Const, 0, ""},
+		{"MS_REC", Const, 0, ""},
+		{"MS_RELATIME", Const, 0, ""},
+		{"MS_REMOUNT", Const, 0, ""},
+		{"MS_RMT_MASK", Const, 0, ""},
+		{"MS_SHARED", Const, 0, ""},
+		{"MS_SILENT", Const, 0, ""},
+		{"MS_SLAVE", Const, 0, ""},
+		{"MS_STRICTATIME", Const, 0, ""},
+		{"MS_SYNC", Const, 0, ""},
+		{"MS_SYNCHRONOUS", Const, 0, ""},
+		{"MS_UNBINDABLE", Const, 0, ""},
+		{"Madvise", Func, 0, "func(b []byte, advice int) (err error)"},
+		{"MapViewOfFile", Func, 0, ""},
+		{"MaxTokenInfoClass", Const, 0, ""},
+		{"Mclpool", Type, 2, ""},
+		{"Mclpool.Alive", Field, 2, ""},
+		{"Mclpool.Cwm", Field, 2, ""},
+		{"Mclpool.Grown", Field, 2, ""},
+		{"Mclpool.Hwm", Field, 2, ""},
+		{"Mclpool.Lwm", Field, 2, ""},
+		{"MibIfRow", Type, 0, ""},
+		{"MibIfRow.AdminStatus", Field, 0, ""},
+		{"MibIfRow.Descr", Field, 0, ""},
+		{"MibIfRow.DescrLen", Field, 0, ""},
+		{"MibIfRow.InDiscards", Field, 0, ""},
+		{"MibIfRow.InErrors", Field, 0, ""},
+		{"MibIfRow.InNUcastPkts", Field, 0, ""},
+		{"MibIfRow.InOctets", Field, 0, ""},
+		{"MibIfRow.InUcastPkts", Field, 0, ""},
+		{"MibIfRow.InUnknownProtos", Field, 0, ""},
+		{"MibIfRow.Index", Field, 0, ""},
+		{"MibIfRow.LastChange", Field, 0, ""},
+		{"MibIfRow.Mtu", Field, 0, ""},
+		{"MibIfRow.Name", Field, 0, ""},
+		{"MibIfRow.OperStatus", Field, 0, ""},
+		{"MibIfRow.OutDiscards", Field, 0, ""},
+		{"MibIfRow.OutErrors", Field, 0, ""},
+		{"MibIfRow.OutNUcastPkts", Field, 0, ""},
+		{"MibIfRow.OutOctets", Field, 0, ""},
+		{"MibIfRow.OutQLen", Field, 0, ""},
+		{"MibIfRow.OutUcastPkts", Field, 0, ""},
+		{"MibIfRow.PhysAddr", Field, 0, ""},
+		{"MibIfRow.PhysAddrLen", Field, 0, ""},
+		{"MibIfRow.Speed", Field, 0, ""},
+		{"MibIfRow.Type", Field, 0, ""},
+		{"Mkdir", Func, 0, "func(path string, mode uint32) (err error)"},
+		{"Mkdirat", Func, 0, "func(dirfd int, path string, mode uint32) (err error)"},
+		{"Mkfifo", Func, 0, "func(path string, mode uint32) (err error)"},
+		{"Mknod", Func, 0, "func(path string, mode uint32, dev int) (err error)"},
+		{"Mknodat", Func, 0, "func(dirfd int, path string, mode uint32, dev int) (err error)"},
+		{"Mlock", Func, 0, "func(b []byte) (err error)"},
+		{"Mlockall", Func, 0, "func(flags int) (err error)"},
+		{"Mmap", Func, 0, "func(fd int, offset int64, length int, prot int, flags int) (data []byte, err error)"},
+		{"Mount", Func, 0, "func(source string, target string, fstype string, flags uintptr, data string) (err error)"},
+		{"MoveFile", Func, 0, ""},
+		{"Mprotect", Func, 0, "func(b []byte, prot int) (err error)"},
+		{"Msghdr", Type, 0, ""},
+		{"Msghdr.Control", Field, 0, ""},
+		{"Msghdr.Controllen", Field, 0, ""},
+		{"Msghdr.Flags", Field, 0, ""},
+		{"Msghdr.Iov", Field, 0, ""},
+		{"Msghdr.Iovlen", Field, 0, ""},
+		{"Msghdr.Name", Field, 0, ""},
+		{"Msghdr.Namelen", Field, 0, ""},
+		{"Msghdr.Pad_cgo_0", Field, 0, ""},
+		{"Msghdr.Pad_cgo_1", Field, 0, ""},
+		{"Munlock", Func, 0, "func(b []byte) (err error)"},
+		{"Munlockall", Func, 0, "func() (err error)"},
+		{"Munmap", Func, 0, "func(b []byte) (err error)"},
+		{"MustLoadDLL", Func, 0, ""},
+		{"NAME_MAX", Const, 0, ""},
+		{"NETLINK_ADD_MEMBERSHIP", Const, 0, ""},
+		{"NETLINK_AUDIT", Const, 0, ""},
+		{"NETLINK_BROADCAST_ERROR", Const, 0, ""},
+		{"NETLINK_CONNECTOR", Const, 0, ""},
+		{"NETLINK_DNRTMSG", Const, 0, ""},
+		{"NETLINK_DROP_MEMBERSHIP", Const, 0, ""},
+		{"NETLINK_ECRYPTFS", Const, 0, ""},
+		{"NETLINK_FIB_LOOKUP", Const, 0, ""},
+		{"NETLINK_FIREWALL", Const, 0, ""},
+		{"NETLINK_GENERIC", Const, 0, ""},
+		{"NETLINK_INET_DIAG", Const, 0, ""},
+		{"NETLINK_IP6_FW", Const, 0, ""},
+		{"NETLINK_ISCSI", Const, 0, ""},
+		{"NETLINK_KOBJECT_UEVENT", Const, 0, ""},
+		{"NETLINK_NETFILTER", Const, 0, ""},
+		{"NETLINK_NFLOG", Const, 0, ""},
+		{"NETLINK_NO_ENOBUFS", Const, 0, ""},
+		{"NETLINK_PKTINFO", Const, 0, ""},
+		{"NETLINK_RDMA", Const, 0, ""},
+		{"NETLINK_ROUTE", Const, 0, ""},
+		{"NETLINK_SCSITRANSPORT", Const, 0, ""},
+		{"NETLINK_SELINUX", Const, 0, ""},
+		{"NETLINK_UNUSED", Const, 0, ""},
+		{"NETLINK_USERSOCK", Const, 0, ""},
+		{"NETLINK_XFRM", Const, 0, ""},
+		{"NET_RT_DUMP", Const, 0, ""},
+		{"NET_RT_DUMP2", Const, 0, ""},
+		{"NET_RT_FLAGS", Const, 0, ""},
+		{"NET_RT_IFLIST", Const, 0, ""},
+		{"NET_RT_IFLIST2", Const, 0, ""},
+		{"NET_RT_IFLISTL", Const, 1, ""},
+		{"NET_RT_IFMALIST", Const, 0, ""},
+		{"NET_RT_MAXID", Const, 0, ""},
+		{"NET_RT_OIFLIST", Const, 1, ""},
+		{"NET_RT_OOIFLIST", Const, 1, ""},
+		{"NET_RT_STAT", Const, 0, ""},
+		{"NET_RT_STATS", Const, 1, ""},
+		{"NET_RT_TABLE", Const, 1, ""},
+		{"NET_RT_TRASH", Const, 0, ""},
+		{"NLA_ALIGNTO", Const, 0, ""},
+		{"NLA_F_NESTED", Const, 0, ""},
+		{"NLA_F_NET_BYTEORDER", Const, 0, ""},
+		{"NLA_HDRLEN", Const, 0, ""},
+		{"NLMSG_ALIGNTO", Const, 0, ""},
+		{"NLMSG_DONE", Const, 0, ""},
+		{"NLMSG_ERROR", Const, 0, ""},
+		{"NLMSG_HDRLEN", Const, 0, ""},
+		{"NLMSG_MIN_TYPE", Const, 0, ""},
+		{"NLMSG_NOOP", Const, 0, ""},
+		{"NLMSG_OVERRUN", Const, 0, ""},
+		{"NLM_F_ACK", Const, 0, ""},
+		{"NLM_F_APPEND", Const, 0, ""},
+		{"NLM_F_ATOMIC", Const, 0, ""},
+		{"NLM_F_CREATE", Const, 0, ""},
+		{"NLM_F_DUMP", Const, 0, ""},
+		{"NLM_F_ECHO", Const, 0, ""},
+		{"NLM_F_EXCL", Const, 0, ""},
+		{"NLM_F_MATCH", Const, 0, ""},
+		{"NLM_F_MULTI", Const, 0, ""},
+		{"NLM_F_REPLACE", Const, 0, ""},
+		{"NLM_F_REQUEST", Const, 0, ""},
+		{"NLM_F_ROOT", Const, 0, ""},
+		{"NOFLSH", Const, 0, ""},
+		{"NOTE_ABSOLUTE", Const, 0, ""},
+		{"NOTE_ATTRIB", Const, 0, ""},
+		{"NOTE_BACKGROUND", Const, 16, ""},
+		{"NOTE_CHILD", Const, 0, ""},
+		{"NOTE_CRITICAL", Const, 16, ""},
+		{"NOTE_DELETE", Const, 0, ""},
+		{"NOTE_EOF", Const, 1, ""},
+		{"NOTE_EXEC", Const, 0, ""},
+		{"NOTE_EXIT", Const, 0, ""},
+		{"NOTE_EXITSTATUS", Const, 0, ""},
+		{"NOTE_EXIT_CSERROR", Const, 16, ""},
+		{"NOTE_EXIT_DECRYPTFAIL", Const, 16, ""},
+		{"NOTE_EXIT_DETAIL", Const, 16, ""},
+		{"NOTE_EXIT_DETAIL_MASK", Const, 16, ""},
+		{"NOTE_EXIT_MEMORY", Const, 16, ""},
+		{"NOTE_EXIT_REPARENTED", Const, 16, ""},
+		{"NOTE_EXTEND", Const, 0, ""},
+		{"NOTE_FFAND", Const, 0, ""},
+		{"NOTE_FFCOPY", Const, 0, ""},
+		{"NOTE_FFCTRLMASK", Const, 0, ""},
+		{"NOTE_FFLAGSMASK", Const, 0, ""},
+		{"NOTE_FFNOP", Const, 0, ""},
+		{"NOTE_FFOR", Const, 0, ""},
+		{"NOTE_FORK", Const, 0, ""},
+		{"NOTE_LEEWAY", Const, 16, ""},
+		{"NOTE_LINK", Const, 0, ""},
+		{"NOTE_LOWAT", Const, 0, ""},
+		{"NOTE_NONE", Const, 0, ""},
+		{"NOTE_NSECONDS", Const, 0, ""},
+		{"NOTE_PCTRLMASK", Const, 0, ""},
+		{"NOTE_PDATAMASK", Const, 0, ""},
+		{"NOTE_REAP", Const, 0, ""},
+		{"NOTE_RENAME", Const, 0, ""},
+		{"NOTE_RESOURCEEND", Const, 0, ""},
+		{"NOTE_REVOKE", Const, 0, ""},
+		{"NOTE_SECONDS", Const, 0, ""},
+		{"NOTE_SIGNAL", Const, 0, ""},
+		{"NOTE_TRACK", Const, 0, ""},
+		{"NOTE_TRACKERR", Const, 0, ""},
+		{"NOTE_TRIGGER", Const, 0, ""},
+		{"NOTE_TRUNCATE", Const, 1, ""},
+		{"NOTE_USECONDS", Const, 0, ""},
+		{"NOTE_VM_ERROR", Const, 0, ""},
+		{"NOTE_VM_PRESSURE", Const, 0, ""},
+		{"NOTE_VM_PRESSURE_SUDDEN_TERMINATE", Const, 0, ""},
+		{"NOTE_VM_PRESSURE_TERMINATE", Const, 0, ""},
+		{"NOTE_WRITE", Const, 0, ""},
+		{"NameCanonical", Const, 0, ""},
+		{"NameCanonicalEx", Const, 0, ""},
+		{"NameDisplay", Const, 0, ""},
+		{"NameDnsDomain", Const, 0, ""},
+		{"NameFullyQualifiedDN", Const, 0, ""},
+		{"NameSamCompatible", Const, 0, ""},
+		{"NameServicePrincipal", Const, 0, ""},
+		{"NameUniqueId", Const, 0, ""},
+		{"NameUnknown", Const, 0, ""},
+		{"NameUserPrincipal", Const, 0, ""},
+		{"Nanosleep", Func, 0, "func(time *Timespec, leftover *Timespec) (err error)"},
+		{"NetApiBufferFree", Func, 0, ""},
+		{"NetGetJoinInformation", Func, 2, ""},
+		{"NetSetupDomainName", Const, 2, ""},
+		{"NetSetupUnjoined", Const, 2, ""},
+		{"NetSetupUnknownStatus", Const, 2, ""},
+		{"NetSetupWorkgroupName", Const, 2, ""},
+		{"NetUserGetInfo", Func, 0, ""},
+		{"NetlinkMessage", Type, 0, ""},
+		{"NetlinkMessage.Data", Field, 0, ""},
+		{"NetlinkMessage.Header", Field, 0, ""},
+		{"NetlinkRIB", Func, 0, "func(proto int, family int) ([]byte, error)"},
+		{"NetlinkRouteAttr", Type, 0, ""},
+		{"NetlinkRouteAttr.Attr", Field, 0, ""},
+		{"NetlinkRouteAttr.Value", Field, 0, ""},
+		{"NetlinkRouteRequest", Type, 0, ""},
+		{"NetlinkRouteRequest.Data", Field, 0, ""},
+		{"NetlinkRouteRequest.Header", Field, 0, ""},
+		{"NewCallback", Func, 0, ""},
+		{"NewCallbackCDecl", Func, 3, ""},
+		{"NewLazyDLL", Func, 0, ""},
+		{"NlAttr", Type, 0, ""},
+		{"NlAttr.Len", Field, 0, ""},
+		{"NlAttr.Type", Field, 0, ""},
+		{"NlMsgerr", Type, 0, ""},
+		{"NlMsgerr.Error", Field, 0, ""},
+		{"NlMsgerr.Msg", Field, 0, ""},
+		{"NlMsghdr", Type, 0, ""},
+		{"NlMsghdr.Flags", Field, 0, ""},
+		{"NlMsghdr.Len", Field, 0, ""},
+		{"NlMsghdr.Pid", Field, 0, ""},
+		{"NlMsghdr.Seq", Field, 0, ""},
+		{"NlMsghdr.Type", Field, 0, ""},
+		{"NsecToFiletime", Func, 0, ""},
+		{"NsecToTimespec", Func, 0, "func(nsec int64) Timespec"},
+		{"NsecToTimeval", Func, 0, "func(nsec int64) Timeval"},
+		{"Ntohs", Func, 0, ""},
+		{"OCRNL", Const, 0, ""},
+		{"OFDEL", Const, 0, ""},
+		{"OFILL", Const, 0, ""},
+		{"OFIOGETBMAP", Const, 1, ""},
+		{"OID_PKIX_KP_SERVER_AUTH", Var, 0, ""},
+		{"OID_SERVER_GATED_CRYPTO", Var, 0, ""},
+		{"OID_SGC_NETSCAPE", Var, 0, ""},
+		{"OLCUC", Const, 0, ""},
+		{"ONLCR", Const, 0, ""},
+		{"ONLRET", Const, 0, ""},
+		{"ONOCR", Const, 0, ""},
+		{"ONOEOT", Const, 1, ""},
+		{"OPEN_ALWAYS", Const, 0, ""},
+		{"OPEN_EXISTING", Const, 0, ""},
+		{"OPOST", Const, 0, ""},
+		{"O_ACCMODE", Const, 0, ""},
+		{"O_ALERT", Const, 0, ""},
+		{"O_ALT_IO", Const, 1, ""},
+		{"O_APPEND", Const, 0, ""},
+		{"O_ASYNC", Const, 0, ""},
+		{"O_CLOEXEC", Const, 0, ""},
+		{"O_CREAT", Const, 0, ""},
+		{"O_DIRECT", Const, 0, ""},
+		{"O_DIRECTORY", Const, 0, ""},
+		{"O_DP_GETRAWENCRYPTED", Const, 16, ""},
+		{"O_DSYNC", Const, 0, ""},
+		{"O_EVTONLY", Const, 0, ""},
+		{"O_EXCL", Const, 0, ""},
+		{"O_EXEC", Const, 0, ""},
+		{"O_EXLOCK", Const, 0, ""},
+		{"O_FSYNC", Const, 0, ""},
+		{"O_LARGEFILE", Const, 0, ""},
+		{"O_NDELAY", Const, 0, ""},
+		{"O_NOATIME", Const, 0, ""},
+		{"O_NOCTTY", Const, 0, ""},
+		{"O_NOFOLLOW", Const, 0, ""},
+		{"O_NONBLOCK", Const, 0, ""},
+		{"O_NOSIGPIPE", Const, 1, ""},
+		{"O_POPUP", Const, 0, ""},
+		{"O_RDONLY", Const, 0, ""},
+		{"O_RDWR", Const, 0, ""},
+		{"O_RSYNC", Const, 0, ""},
+		{"O_SHLOCK", Const, 0, ""},
+		{"O_SYMLINK", Const, 0, ""},
+		{"O_SYNC", Const, 0, ""},
+		{"O_TRUNC", Const, 0, ""},
+		{"O_TTY_INIT", Const, 0, ""},
+		{"O_WRONLY", Const, 0, ""},
+		{"Open", Func, 0, "func(path string, mode int, perm uint32) (fd int, err error)"},
+		{"OpenCurrentProcessToken", Func, 0, ""},
+		{"OpenProcess", Func, 0, ""},
+		{"OpenProcessToken", Func, 0, ""},
+		{"Openat", Func, 0, "func(dirfd int, path string, flags int, mode uint32) (fd int, err error)"},
+		{"Overlapped", Type, 0, ""},
+		{"Overlapped.HEvent", Field, 0, ""},
+		{"Overlapped.Internal", Field, 0, ""},
+		{"Overlapped.InternalHigh", Field, 0, ""},
+		{"Overlapped.Offset", Field, 0, ""},
+		{"Overlapped.OffsetHigh", Field, 0, ""},
+		{"PACKET_ADD_MEMBERSHIP", Const, 0, ""},
+		{"PACKET_BROADCAST", Const, 0, ""},
+		{"PACKET_DROP_MEMBERSHIP", Const, 0, ""},
+		{"PACKET_FASTROUTE", Const, 0, ""},
+		{"PACKET_HOST", Const, 0, ""},
+		{"PACKET_LOOPBACK", Const, 0, ""},
+		{"PACKET_MR_ALLMULTI", Const, 0, ""},
+		{"PACKET_MR_MULTICAST", Const, 0, ""},
+		{"PACKET_MR_PROMISC", Const, 0, ""},
+		{"PACKET_MULTICAST", Const, 0, ""},
+		{"PACKET_OTHERHOST", Const, 0, ""},
+		{"PACKET_OUTGOING", Const, 0, ""},
+		{"PACKET_RECV_OUTPUT", Const, 0, ""},
+		{"PACKET_RX_RING", Const, 0, ""},
+		{"PACKET_STATISTICS", Const, 0, ""},
+		{"PAGE_EXECUTE_READ", Const, 0, ""},
+		{"PAGE_EXECUTE_READWRITE", Const, 0, ""},
+		{"PAGE_EXECUTE_WRITECOPY", Const, 0, ""},
+		{"PAGE_READONLY", Const, 0, ""},
+		{"PAGE_READWRITE", Const, 0, ""},
+		{"PAGE_WRITECOPY", Const, 0, ""},
+		{"PARENB", Const, 0, ""},
+		{"PARMRK", Const, 0, ""},
+		{"PARODD", Const, 0, ""},
+		{"PENDIN", Const, 0, ""},
+		{"PFL_HIDDEN", Const, 2, ""},
+		{"PFL_MATCHES_PROTOCOL_ZERO", Const, 2, ""},
+		{"PFL_MULTIPLE_PROTO_ENTRIES", Const, 2, ""},
+		{"PFL_NETWORKDIRECT_PROVIDER", Const, 2, ""},
+		{"PFL_RECOMMENDED_PROTO_ENTRY", Const, 2, ""},
+		{"PF_FLUSH", Const, 1, ""},
+		{"PKCS_7_ASN_ENCODING", Const, 0, ""},
+		{"PMC5_PIPELINE_FLUSH", Const, 1, ""},
+		{"PRIO_PGRP", Const, 2, ""},
+		{"PRIO_PROCESS", Const, 2, ""},
+		{"PRIO_USER", Const, 2, ""},
+		{"PRI_IOFLUSH", Const, 1, ""},
+		{"PROCESS_QUERY_INFORMATION", Const, 0, ""},
+		{"PROCESS_TERMINATE", Const, 2, ""},
+		{"PROT_EXEC", Const, 0, ""},
+		{"PROT_GROWSDOWN", Const, 0, ""},
+		{"PROT_GROWSUP", Const, 0, ""},
+		{"PROT_NONE", Const, 0, ""},
+		{"PROT_READ", Const, 0, ""},
+		{"PROT_WRITE", Const, 0, ""},
+		{"PROV_DH_SCHANNEL", Const, 0, ""},
+		{"PROV_DSS", Const, 0, ""},
+		{"PROV_DSS_DH", Const, 0, ""},
+		{"PROV_EC_ECDSA_FULL", Const, 0, ""},
+		{"PROV_EC_ECDSA_SIG", Const, 0, ""},
+		{"PROV_EC_ECNRA_FULL", Const, 0, ""},
+		{"PROV_EC_ECNRA_SIG", Const, 0, ""},
+		{"PROV_FORTEZZA", Const, 0, ""},
+		{"PROV_INTEL_SEC", Const, 0, ""},
+		{"PROV_MS_EXCHANGE", Const, 0, ""},
+		{"PROV_REPLACE_OWF", Const, 0, ""},
+		{"PROV_RNG", Const, 0, ""},
+		{"PROV_RSA_AES", Const, 0, ""},
+		{"PROV_RSA_FULL", Const, 0, ""},
+		{"PROV_RSA_SCHANNEL", Const, 0, ""},
+		{"PROV_RSA_SIG", Const, 0, ""},
+		{"PROV_SPYRUS_LYNKS", Const, 0, ""},
+		{"PROV_SSL", Const, 0, ""},
+		{"PR_CAPBSET_DROP", Const, 0, ""},
+		{"PR_CAPBSET_READ", Const, 0, ""},
+		{"PR_CLEAR_SECCOMP_FILTER", Const, 0, ""},
+		{"PR_ENDIAN_BIG", Const, 0, ""},
+		{"PR_ENDIAN_LITTLE", Const, 0, ""},
+		{"PR_ENDIAN_PPC_LITTLE", Const, 0, ""},
+		{"PR_FPEMU_NOPRINT", Const, 0, ""},
+		{"PR_FPEMU_SIGFPE", Const, 0, ""},
+		{"PR_FP_EXC_ASYNC", Const, 0, ""},
+		{"PR_FP_EXC_DISABLED", Const, 0, ""},
+		{"PR_FP_EXC_DIV", Const, 0, ""},
+		{"PR_FP_EXC_INV", Const, 0, ""},
+		{"PR_FP_EXC_NONRECOV", Const, 0, ""},
+		{"PR_FP_EXC_OVF", Const, 0, ""},
+		{"PR_FP_EXC_PRECISE", Const, 0, ""},
+		{"PR_FP_EXC_RES", Const, 0, ""},
+		{"PR_FP_EXC_SW_ENABLE", Const, 0, ""},
+		{"PR_FP_EXC_UND", Const, 0, ""},
+		{"PR_GET_DUMPABLE", Const, 0, ""},
+		{"PR_GET_ENDIAN", Const, 0, ""},
+		{"PR_GET_FPEMU", Const, 0, ""},
+		{"PR_GET_FPEXC", Const, 0, ""},
+		{"PR_GET_KEEPCAPS", Const, 0, ""},
+		{"PR_GET_NAME", Const, 0, ""},
+		{"PR_GET_PDEATHSIG", Const, 0, ""},
+		{"PR_GET_SECCOMP", Const, 0, ""},
+		{"PR_GET_SECCOMP_FILTER", Const, 0, ""},
+		{"PR_GET_SECUREBITS", Const, 0, ""},
+		{"PR_GET_TIMERSLACK", Const, 0, ""},
+		{"PR_GET_TIMING", Const, 0, ""},
+		{"PR_GET_TSC", Const, 0, ""},
+		{"PR_GET_UNALIGN", Const, 0, ""},
+		{"PR_MCE_KILL", Const, 0, ""},
+		{"PR_MCE_KILL_CLEAR", Const, 0, ""},
+		{"PR_MCE_KILL_DEFAULT", Const, 0, ""},
+		{"PR_MCE_KILL_EARLY", Const, 0, ""},
+		{"PR_MCE_KILL_GET", Const, 0, ""},
+		{"PR_MCE_KILL_LATE", Const, 0, ""},
+		{"PR_MCE_KILL_SET", Const, 0, ""},
+		{"PR_SECCOMP_FILTER_EVENT", Const, 0, ""},
+		{"PR_SECCOMP_FILTER_SYSCALL", Const, 0, ""},
+		{"PR_SET_DUMPABLE", Const, 0, ""},
+		{"PR_SET_ENDIAN", Const, 0, ""},
+		{"PR_SET_FPEMU", Const, 0, ""},
+		{"PR_SET_FPEXC", Const, 0, ""},
+		{"PR_SET_KEEPCAPS", Const, 0, ""},
+		{"PR_SET_NAME", Const, 0, ""},
+		{"PR_SET_PDEATHSIG", Const, 0, ""},
+		{"PR_SET_PTRACER", Const, 0, ""},
+		{"PR_SET_SECCOMP", Const, 0, ""},
+		{"PR_SET_SECCOMP_FILTER", Const, 0, ""},
+		{"PR_SET_SECUREBITS", Const, 0, ""},
+		{"PR_SET_TIMERSLACK", Const, 0, ""},
+		{"PR_SET_TIMING", Const, 0, ""},
+		{"PR_SET_TSC", Const, 0, ""},
+		{"PR_SET_UNALIGN", Const, 0, ""},
+		{"PR_TASK_PERF_EVENTS_DISABLE", Const, 0, ""},
+		{"PR_TASK_PERF_EVENTS_ENABLE", Const, 0, ""},
+		{"PR_TIMING_STATISTICAL", Const, 0, ""},
+		{"PR_TIMING_TIMESTAMP", Const, 0, ""},
+		{"PR_TSC_ENABLE", Const, 0, ""},
+		{"PR_TSC_SIGSEGV", Const, 0, ""},
+		{"PR_UNALIGN_NOPRINT", Const, 0, ""},
+		{"PR_UNALIGN_SIGBUS", Const, 0, ""},
+		{"PTRACE_ARCH_PRCTL", Const, 0, ""},
+		{"PTRACE_ATTACH", Const, 0, ""},
+		{"PTRACE_CONT", Const, 0, ""},
+		{"PTRACE_DETACH", Const, 0, ""},
+		{"PTRACE_EVENT_CLONE", Const, 0, ""},
+		{"PTRACE_EVENT_EXEC", Const, 0, ""},
+		{"PTRACE_EVENT_EXIT", Const, 0, ""},
+		{"PTRACE_EVENT_FORK", Const, 0, ""},
+		{"PTRACE_EVENT_VFORK", Const, 0, ""},
+		{"PTRACE_EVENT_VFORK_DONE", Const, 0, ""},
+		{"PTRACE_GETCRUNCHREGS", Const, 0, ""},
+		{"PTRACE_GETEVENTMSG", Const, 0, ""},
+		{"PTRACE_GETFPREGS", Const, 0, ""},
+		{"PTRACE_GETFPXREGS", Const, 0, ""},
+		{"PTRACE_GETHBPREGS", Const, 0, ""},
+		{"PTRACE_GETREGS", Const, 0, ""},
+		{"PTRACE_GETREGSET", Const, 0, ""},
+		{"PTRACE_GETSIGINFO", Const, 0, ""},
+		{"PTRACE_GETVFPREGS", Const, 0, ""},
+		{"PTRACE_GETWMMXREGS", Const, 0, ""},
+		{"PTRACE_GET_THREAD_AREA", Const, 0, ""},
+		{"PTRACE_KILL", Const, 0, ""},
+		{"PTRACE_OLDSETOPTIONS", Const, 0, ""},
+		{"PTRACE_O_MASK", Const, 0, ""},
+		{"PTRACE_O_TRACECLONE", Const, 0, ""},
+		{"PTRACE_O_TRACEEXEC", Const, 0, ""},
+		{"PTRACE_O_TRACEEXIT", Const, 0, ""},
+		{"PTRACE_O_TRACEFORK", Const, 0, ""},
+		{"PTRACE_O_TRACESYSGOOD", Const, 0, ""},
+		{"PTRACE_O_TRACEVFORK", Const, 0, ""},
+		{"PTRACE_O_TRACEVFORKDONE", Const, 0, ""},
+		{"PTRACE_PEEKDATA", Const, 0, ""},
+		{"PTRACE_PEEKTEXT", Const, 0, ""},
+		{"PTRACE_PEEKUSR", Const, 0, ""},
+		{"PTRACE_POKEDATA", Const, 0, ""},
+		{"PTRACE_POKETEXT", Const, 0, ""},
+		{"PTRACE_POKEUSR", Const, 0, ""},
+		{"PTRACE_SETCRUNCHREGS", Const, 0, ""},
+		{"PTRACE_SETFPREGS", Const, 0, ""},
+		{"PTRACE_SETFPXREGS", Const, 0, ""},
+		{"PTRACE_SETHBPREGS", Const, 0, ""},
+		{"PTRACE_SETOPTIONS", Const, 0, ""},
+		{"PTRACE_SETREGS", Const, 0, ""},
+		{"PTRACE_SETREGSET", Const, 0, ""},
+		{"PTRACE_SETSIGINFO", Const, 0, ""},
+		{"PTRACE_SETVFPREGS", Const, 0, ""},
+		{"PTRACE_SETWMMXREGS", Const, 0, ""},
+		{"PTRACE_SET_SYSCALL", Const, 0, ""},
+		{"PTRACE_SET_THREAD_AREA", Const, 0, ""},
+		{"PTRACE_SINGLEBLOCK", Const, 0, ""},
+		{"PTRACE_SINGLESTEP", Const, 0, ""},
+		{"PTRACE_SYSCALL", Const, 0, ""},
+		{"PTRACE_SYSEMU", Const, 0, ""},
+		{"PTRACE_SYSEMU_SINGLESTEP", Const, 0, ""},
+		{"PTRACE_TRACEME", Const, 0, ""},
+		{"PT_ATTACH", Const, 0, ""},
+		{"PT_ATTACHEXC", Const, 0, ""},
+		{"PT_CONTINUE", Const, 0, ""},
+		{"PT_DATA_ADDR", Const, 0, ""},
+		{"PT_DENY_ATTACH", Const, 0, ""},
+		{"PT_DETACH", Const, 0, ""},
+		{"PT_FIRSTMACH", Const, 0, ""},
+		{"PT_FORCEQUOTA", Const, 0, ""},
+		{"PT_KILL", Const, 0, ""},
+		{"PT_MASK", Const, 1, ""},
+		{"PT_READ_D", Const, 0, ""},
+		{"PT_READ_I", Const, 0, ""},
+		{"PT_READ_U", Const, 0, ""},
+		{"PT_SIGEXC", Const, 0, ""},
+		{"PT_STEP", Const, 0, ""},
+		{"PT_TEXT_ADDR", Const, 0, ""},
+		{"PT_TEXT_END_ADDR", Const, 0, ""},
+		{"PT_THUPDATE", Const, 0, ""},
+		{"PT_TRACE_ME", Const, 0, ""},
+		{"PT_WRITE_D", Const, 0, ""},
+		{"PT_WRITE_I", Const, 0, ""},
+		{"PT_WRITE_U", Const, 0, ""},
+		{"ParseDirent", Func, 0, "func(buf []byte, max int, names []string) (consumed int, count int, newnames []string)"},
+		{"ParseNetlinkMessage", Func, 0, "func(b []byte) ([]NetlinkMessage, error)"},
+		{"ParseNetlinkRouteAttr", Func, 0, "func(m *NetlinkMessage) ([]NetlinkRouteAttr, error)"},
+		{"ParseRoutingMessage", Func, 0, ""},
+		{"ParseRoutingSockaddr", Func, 0, ""},
+		{"ParseSocketControlMessage", Func, 0, "func(b []byte) ([]SocketControlMessage, error)"},
+		{"ParseUnixCredentials", Func, 0, "func(m *SocketControlMessage) (*Ucred, error)"},
+		{"ParseUnixRights", Func, 0, "func(m *SocketControlMessage) ([]int, error)"},
+		{"PathMax", Const, 0, ""},
+		{"Pathconf", Func, 0, ""},
+		{"Pause", Func, 0, "func() (err error)"},
+		{"Pipe", Func, 0, "func(p []int) error"},
+		{"Pipe2", Func, 1, "func(p []int, flags int) error"},
+		{"PivotRoot", Func, 0, "func(newroot string, putold string) (err error)"},
+		{"Pointer", Type, 11, ""},
+		{"PostQueuedCompletionStatus", Func, 0, ""},
+		{"Pread", Func, 0, "func(fd int, p []byte, offset int64) (n int, err error)"},
+		{"Proc", Type, 0, ""},
+		{"Proc.Dll", Field, 0, ""},
+		{"Proc.Name", Field, 0, ""},
+		{"ProcAttr", Type, 0, ""},
+		{"ProcAttr.Dir", Field, 0, ""},
+		{"ProcAttr.Env", Field, 0, ""},
+		{"ProcAttr.Files", Field, 0, ""},
+		{"ProcAttr.Sys", Field, 0, ""},
+		{"Process32First", Func, 4, ""},
+		{"Process32Next", Func, 4, ""},
+		{"ProcessEntry32", Type, 4, ""},
+		{"ProcessEntry32.DefaultHeapID", Field, 4, ""},
+		{"ProcessEntry32.ExeFile", Field, 4, ""},
+		{"ProcessEntry32.Flags", Field, 4, ""},
+		{"ProcessEntry32.ModuleID", Field, 4, ""},
+		{"ProcessEntry32.ParentProcessID", Field, 4, ""},
+		{"ProcessEntry32.PriClassBase", Field, 4, ""},
+		{"ProcessEntry32.ProcessID", Field, 4, ""},
+		{"ProcessEntry32.Size", Field, 4, ""},
+		{"ProcessEntry32.Threads", Field, 4, ""},
+		{"ProcessEntry32.Usage", Field, 4, ""},
+		{"ProcessInformation", Type, 0, ""},
+		{"ProcessInformation.Process", Field, 0, ""},
+		{"ProcessInformation.ProcessId", Field, 0, ""},
+		{"ProcessInformation.Thread", Field, 0, ""},
+		{"ProcessInformation.ThreadId", Field, 0, ""},
+		{"Protoent", Type, 0, ""},
+		{"Protoent.Aliases", Field, 0, ""},
+		{"Protoent.Name", Field, 0, ""},
+		{"Protoent.Proto", Field, 0, ""},
+		{"PtraceAttach", Func, 0, "func(pid int) (err error)"},
+		{"PtraceCont", Func, 0, "func(pid int, signal int) (err error)"},
+		{"PtraceDetach", Func, 0, "func(pid int) (err error)"},
+		{"PtraceGetEventMsg", Func, 0, "func(pid int) (msg uint, err error)"},
+		{"PtraceGetRegs", Func, 0, "func(pid int, regsout *PtraceRegs) (err error)"},
+		{"PtracePeekData", Func, 0, "func(pid int, addr uintptr, out []byte) (count int, err error)"},
+		{"PtracePeekText", Func, 0, "func(pid int, addr uintptr, out []byte) (count int, err error)"},
+		{"PtracePokeData", Func, 0, "func(pid int, addr uintptr, data []byte) (count int, err error)"},
+		{"PtracePokeText", Func, 0, "func(pid int, addr uintptr, data []byte) (count int, err error)"},
+		{"PtraceRegs", Type, 0, ""},
+		{"PtraceRegs.Cs", Field, 0, ""},
+		{"PtraceRegs.Ds", Field, 0, ""},
+		{"PtraceRegs.Eax", Field, 0, ""},
+		{"PtraceRegs.Ebp", Field, 0, ""},
+		{"PtraceRegs.Ebx", Field, 0, ""},
+		{"PtraceRegs.Ecx", Field, 0, ""},
+		{"PtraceRegs.Edi", Field, 0, ""},
+		{"PtraceRegs.Edx", Field, 0, ""},
+		{"PtraceRegs.Eflags", Field, 0, ""},
+		{"PtraceRegs.Eip", Field, 0, ""},
+		{"PtraceRegs.Es", Field, 0, ""},
+		{"PtraceRegs.Esi", Field, 0, ""},
+		{"PtraceRegs.Esp", Field, 0, ""},
+		{"PtraceRegs.Fs", Field, 0, ""},
+		{"PtraceRegs.Fs_base", Field, 0, ""},
+		{"PtraceRegs.Gs", Field, 0, ""},
+		{"PtraceRegs.Gs_base", Field, 0, ""},
+		{"PtraceRegs.Orig_eax", Field, 0, ""},
+		{"PtraceRegs.Orig_rax", Field, 0, ""},
+		{"PtraceRegs.R10", Field, 0, ""},
+		{"PtraceRegs.R11", Field, 0, ""},
+		{"PtraceRegs.R12", Field, 0, ""},
+		{"PtraceRegs.R13", Field, 0, ""},
+		{"PtraceRegs.R14", Field, 0, ""},
+		{"PtraceRegs.R15", Field, 0, ""},
+		{"PtraceRegs.R8", Field, 0, ""},
+		{"PtraceRegs.R9", Field, 0, ""},
+		{"PtraceRegs.Rax", Field, 0, ""},
+		{"PtraceRegs.Rbp", Field, 0, ""},
+		{"PtraceRegs.Rbx", Field, 0, ""},
+		{"PtraceRegs.Rcx", Field, 0, ""},
+		{"PtraceRegs.Rdi", Field, 0, ""},
+		{"PtraceRegs.Rdx", Field, 0, ""},
+		{"PtraceRegs.Rip", Field, 0, ""},
+		{"PtraceRegs.Rsi", Field, 0, ""},
+		{"PtraceRegs.Rsp", Field, 0, ""},
+		{"PtraceRegs.Ss", Field, 0, ""},
+		{"PtraceRegs.Uregs", Field, 0, ""},
+		{"PtraceRegs.Xcs", Field, 0, ""},
+		{"PtraceRegs.Xds", Field, 0, ""},
+		{"PtraceRegs.Xes", Field, 0, ""},
+		{"PtraceRegs.Xfs", Field, 0, ""},
+		{"PtraceRegs.Xgs", Field, 0, ""},
+		{"PtraceRegs.Xss", Field, 0, ""},
+		{"PtraceSetOptions", Func, 0, "func(pid int, options int) (err error)"},
+		{"PtraceSetRegs", Func, 0, "func(pid int, regs *PtraceRegs) (err error)"},
+		{"PtraceSingleStep", Func, 0, "func(pid int) (err error)"},
+		{"PtraceSyscall", Func, 1, "func(pid int, signal int) (err error)"},
+		{"Pwrite", Func, 0, "func(fd int, p []byte, offset int64) (n int, err error)"},
+		{"REG_BINARY", Const, 0, ""},
+		{"REG_DWORD", Const, 0, ""},
+		{"REG_DWORD_BIG_ENDIAN", Const, 0, ""},
+		{"REG_DWORD_LITTLE_ENDIAN", Const, 0, ""},
+		{"REG_EXPAND_SZ", Const, 0, ""},
+		{"REG_FULL_RESOURCE_DESCRIPTOR", Const, 0, ""},
+		{"REG_LINK", Const, 0, ""},
+		{"REG_MULTI_SZ", Const, 0, ""},
+		{"REG_NONE", Const, 0, ""},
+		{"REG_QWORD", Const, 0, ""},
+		{"REG_QWORD_LITTLE_ENDIAN", Const, 0, ""},
+		{"REG_RESOURCE_LIST", Const, 0, ""},
+		{"REG_RESOURCE_REQUIREMENTS_LIST", Const, 0, ""},
+		{"REG_SZ", Const, 0, ""},
+		{"RLIMIT_AS", Const, 0, ""},
+		{"RLIMIT_CORE", Const, 0, ""},
+		{"RLIMIT_CPU", Const, 0, ""},
+		{"RLIMIT_CPU_USAGE_MONITOR", Const, 16, ""},
+		{"RLIMIT_DATA", Const, 0, ""},
+		{"RLIMIT_FSIZE", Const, 0, ""},
+		{"RLIMIT_NOFILE", Const, 0, ""},
+		{"RLIMIT_STACK", Const, 0, ""},
+		{"RLIM_INFINITY", Const, 0, ""},
+		{"RTAX_ADVMSS", Const, 0, ""},
+		{"RTAX_AUTHOR", Const, 0, ""},
+		{"RTAX_BRD", Const, 0, ""},
+		{"RTAX_CWND", Const, 0, ""},
+		{"RTAX_DST", Const, 0, ""},
+		{"RTAX_FEATURES", Const, 0, ""},
+		{"RTAX_FEATURE_ALLFRAG", Const, 0, ""},
+		{"RTAX_FEATURE_ECN", Const, 0, ""},
+		{"RTAX_FEATURE_SACK", Const, 0, ""},
+		{"RTAX_FEATURE_TIMESTAMP", Const, 0, ""},
+		{"RTAX_GATEWAY", Const, 0, ""},
+		{"RTAX_GENMASK", Const, 0, ""},
+		{"RTAX_HOPLIMIT", Const, 0, ""},
+		{"RTAX_IFA", Const, 0, ""},
+		{"RTAX_IFP", Const, 0, ""},
+		{"RTAX_INITCWND", Const, 0, ""},
+		{"RTAX_INITRWND", Const, 0, ""},
+		{"RTAX_LABEL", Const, 1, ""},
+		{"RTAX_LOCK", Const, 0, ""},
+		{"RTAX_MAX", Const, 0, ""},
+		{"RTAX_MTU", Const, 0, ""},
+		{"RTAX_NETMASK", Const, 0, ""},
+		{"RTAX_REORDERING", Const, 0, ""},
+		{"RTAX_RTO_MIN", Const, 0, ""},
+		{"RTAX_RTT", Const, 0, ""},
+		{"RTAX_RTTVAR", Const, 0, ""},
+		{"RTAX_SRC", Const, 1, ""},
+		{"RTAX_SRCMASK", Const, 1, ""},
+		{"RTAX_SSTHRESH", Const, 0, ""},
+		{"RTAX_TAG", Const, 1, ""},
+		{"RTAX_UNSPEC", Const, 0, ""},
+		{"RTAX_WINDOW", Const, 0, ""},
+		{"RTA_ALIGNTO", Const, 0, ""},
+		{"RTA_AUTHOR", Const, 0, ""},
+		{"RTA_BRD", Const, 0, ""},
+		{"RTA_CACHEINFO", Const, 0, ""},
+		{"RTA_DST", Const, 0, ""},
+		{"RTA_FLOW", Const, 0, ""},
+		{"RTA_GATEWAY", Const, 0, ""},
+		{"RTA_GENMASK", Const, 0, ""},
+		{"RTA_IFA", Const, 0, ""},
+		{"RTA_IFP", Const, 0, ""},
+		{"RTA_IIF", Const, 0, ""},
+		{"RTA_LABEL", Const, 1, ""},
+		{"RTA_MAX", Const, 0, ""},
+		{"RTA_METRICS", Const, 0, ""},
+		{"RTA_MULTIPATH", Const, 0, ""},
+		{"RTA_NETMASK", Const, 0, ""},
+		{"RTA_OIF", Const, 0, ""},
+		{"RTA_PREFSRC", Const, 0, ""},
+		{"RTA_PRIORITY", Const, 0, ""},
+		{"RTA_SRC", Const, 0, ""},
+		{"RTA_SRCMASK", Const, 1, ""},
+		{"RTA_TABLE", Const, 0, ""},
+		{"RTA_TAG", Const, 1, ""},
+		{"RTA_UNSPEC", Const, 0, ""},
+		{"RTCF_DIRECTSRC", Const, 0, ""},
+		{"RTCF_DOREDIRECT", Const, 0, ""},
+		{"RTCF_LOG", Const, 0, ""},
+		{"RTCF_MASQ", Const, 0, ""},
+		{"RTCF_NAT", Const, 0, ""},
+		{"RTCF_VALVE", Const, 0, ""},
+		{"RTF_ADDRCLASSMASK", Const, 0, ""},
+		{"RTF_ADDRCONF", Const, 0, ""},
+		{"RTF_ALLONLINK", Const, 0, ""},
+		{"RTF_ANNOUNCE", Const, 1, ""},
+		{"RTF_BLACKHOLE", Const, 0, ""},
+		{"RTF_BROADCAST", Const, 0, ""},
+		{"RTF_CACHE", Const, 0, ""},
+		{"RTF_CLONED", Const, 1, ""},
+		{"RTF_CLONING", Const, 0, ""},
+		{"RTF_CONDEMNED", Const, 0, ""},
+		{"RTF_DEFAULT", Const, 0, ""},
+		{"RTF_DELCLONE", Const, 0, ""},
+		{"RTF_DONE", Const, 0, ""},
+		{"RTF_DYNAMIC", Const, 0, ""},
+		{"RTF_FLOW", Const, 0, ""},
+		{"RTF_FMASK", Const, 0, ""},
+		{"RTF_GATEWAY", Const, 0, ""},
+		{"RTF_GWFLAG_COMPAT", Const, 3, ""},
+		{"RTF_HOST", Const, 0, ""},
+		{"RTF_IFREF", Const, 0, ""},
+		{"RTF_IFSCOPE", Const, 0, ""},
+		{"RTF_INTERFACE", Const, 0, ""},
+		{"RTF_IRTT", Const, 0, ""},
+		{"RTF_LINKRT", Const, 0, ""},
+		{"RTF_LLDATA", Const, 0, ""},
+		{"RTF_LLINFO", Const, 0, ""},
+		{"RTF_LOCAL", Const, 0, ""},
+		{"RTF_MASK", Const, 1, ""},
+		{"RTF_MODIFIED", Const, 0, ""},
+		{"RTF_MPATH", Const, 1, ""},
+		{"RTF_MPLS", Const, 1, ""},
+		{"RTF_MSS", Const, 0, ""},
+		{"RTF_MTU", Const, 0, ""},
+		{"RTF_MULTICAST", Const, 0, ""},
+		{"RTF_NAT", Const, 0, ""},
+		{"RTF_NOFORWARD", Const, 0, ""},
+		{"RTF_NONEXTHOP", Const, 0, ""},
+		{"RTF_NOPMTUDISC", Const, 0, ""},
+		{"RTF_PERMANENT_ARP", Const, 1, ""},
+		{"RTF_PINNED", Const, 0, ""},
+		{"RTF_POLICY", Const, 0, ""},
+		{"RTF_PRCLONING", Const, 0, ""},
+		{"RTF_PROTO1", Const, 0, ""},
+		{"RTF_PROTO2", Const, 0, ""},
+		{"RTF_PROTO3", Const, 0, ""},
+		{"RTF_PROXY", Const, 16, ""},
+		{"RTF_REINSTATE", Const, 0, ""},
+		{"RTF_REJECT", Const, 0, ""},
+		{"RTF_RNH_LOCKED", Const, 0, ""},
+		{"RTF_ROUTER", Const, 16, ""},
+		{"RTF_SOURCE", Const, 1, ""},
+		{"RTF_SRC", Const, 1, ""},
+		{"RTF_STATIC", Const, 0, ""},
+		{"RTF_STICKY", Const, 0, ""},
+		{"RTF_THROW", Const, 0, ""},
+		{"RTF_TUNNEL", Const, 1, ""},
+		{"RTF_UP", Const, 0, ""},
+		{"RTF_USETRAILERS", Const, 1, ""},
+		{"RTF_WASCLONED", Const, 0, ""},
+		{"RTF_WINDOW", Const, 0, ""},
+		{"RTF_XRESOLVE", Const, 0, ""},
+		{"RTM_ADD", Const, 0, ""},
+		{"RTM_BASE", Const, 0, ""},
+		{"RTM_CHANGE", Const, 0, ""},
+		{"RTM_CHGADDR", Const, 1, ""},
+		{"RTM_DELACTION", Const, 0, ""},
+		{"RTM_DELADDR", Const, 0, ""},
+		{"RTM_DELADDRLABEL", Const, 0, ""},
+		{"RTM_DELETE", Const, 0, ""},
+		{"RTM_DELLINK", Const, 0, ""},
+		{"RTM_DELMADDR", Const, 0, ""},
+		{"RTM_DELNEIGH", Const, 0, ""},
+		{"RTM_DELQDISC", Const, 0, ""},
+		{"RTM_DELROUTE", Const, 0, ""},
+		{"RTM_DELRULE", Const, 0, ""},
+		{"RTM_DELTCLASS", Const, 0, ""},
+		{"RTM_DELTFILTER", Const, 0, ""},
+		{"RTM_DESYNC", Const, 1, ""},
+		{"RTM_F_CLONED", Const, 0, ""},
+		{"RTM_F_EQUALIZE", Const, 0, ""},
+		{"RTM_F_NOTIFY", Const, 0, ""},
+		{"RTM_F_PREFIX", Const, 0, ""},
+		{"RTM_GET", Const, 0, ""},
+		{"RTM_GET2", Const, 0, ""},
+		{"RTM_GETACTION", Const, 0, ""},
+		{"RTM_GETADDR", Const, 0, ""},
+		{"RTM_GETADDRLABEL", Const, 0, ""},
+		{"RTM_GETANYCAST", Const, 0, ""},
+		{"RTM_GETDCB", Const, 0, ""},
+		{"RTM_GETLINK", Const, 0, ""},
+		{"RTM_GETMULTICAST", Const, 0, ""},
+		{"RTM_GETNEIGH", Const, 0, ""},
+		{"RTM_GETNEIGHTBL", Const, 0, ""},
+		{"RTM_GETQDISC", Const, 0, ""},
+		{"RTM_GETROUTE", Const, 0, ""},
+		{"RTM_GETRULE", Const, 0, ""},
+		{"RTM_GETTCLASS", Const, 0, ""},
+		{"RTM_GETTFILTER", Const, 0, ""},
+		{"RTM_IEEE80211", Const, 0, ""},
+		{"RTM_IFANNOUNCE", Const, 0, ""},
+		{"RTM_IFINFO", Const, 0, ""},
+		{"RTM_IFINFO2", Const, 0, ""},
+		{"RTM_LLINFO_UPD", Const, 1, ""},
+		{"RTM_LOCK", Const, 0, ""},
+		{"RTM_LOSING", Const, 0, ""},
+		{"RTM_MAX", Const, 0, ""},
+		{"RTM_MAXSIZE", Const, 1, ""},
+		{"RTM_MISS", Const, 0, ""},
+		{"RTM_NEWACTION", Const, 0, ""},
+		{"RTM_NEWADDR", Const, 0, ""},
+		{"RTM_NEWADDRLABEL", Const, 0, ""},
+		{"RTM_NEWLINK", Const, 0, ""},
+		{"RTM_NEWMADDR", Const, 0, ""},
+		{"RTM_NEWMADDR2", Const, 0, ""},
+		{"RTM_NEWNDUSEROPT", Const, 0, ""},
+		{"RTM_NEWNEIGH", Const, 0, ""},
+		{"RTM_NEWNEIGHTBL", Const, 0, ""},
+		{"RTM_NEWPREFIX", Const, 0, ""},
+		{"RTM_NEWQDISC", Const, 0, ""},
+		{"RTM_NEWROUTE", Const, 0, ""},
+		{"RTM_NEWRULE", Const, 0, ""},
+		{"RTM_NEWTCLASS", Const, 0, ""},
+		{"RTM_NEWTFILTER", Const, 0, ""},
+		{"RTM_NR_FAMILIES", Const, 0, ""},
+		{"RTM_NR_MSGTYPES", Const, 0, ""},
+		{"RTM_OIFINFO", Const, 1, ""},
+		{"RTM_OLDADD", Const, 0, ""},
+		{"RTM_OLDDEL", Const, 0, ""},
+		{"RTM_OOIFINFO", Const, 1, ""},
+		{"RTM_REDIRECT", Const, 0, ""},
+		{"RTM_RESOLVE", Const, 0, ""},
+		{"RTM_RTTUNIT", Const, 0, ""},
+		{"RTM_SETDCB", Const, 0, ""},
+		{"RTM_SETGATE", Const, 1, ""},
+		{"RTM_SETLINK", Const, 0, ""},
+		{"RTM_SETNEIGHTBL", Const, 0, ""},
+		{"RTM_VERSION", Const, 0, ""},
+		{"RTNH_ALIGNTO", Const, 0, ""},
+		{"RTNH_F_DEAD", Const, 0, ""},
+		{"RTNH_F_ONLINK", Const, 0, ""},
+		{"RTNH_F_PERVASIVE", Const, 0, ""},
+		{"RTNLGRP_IPV4_IFADDR", Const, 1, ""},
+		{"RTNLGRP_IPV4_MROUTE", Const, 1, ""},
+		{"RTNLGRP_IPV4_ROUTE", Const, 1, ""},
+		{"RTNLGRP_IPV4_RULE", Const, 1, ""},
+		{"RTNLGRP_IPV6_IFADDR", Const, 1, ""},
+		{"RTNLGRP_IPV6_IFINFO", Const, 1, ""},
+		{"RTNLGRP_IPV6_MROUTE", Const, 1, ""},
+		{"RTNLGRP_IPV6_PREFIX", Const, 1, ""},
+		{"RTNLGRP_IPV6_ROUTE", Const, 1, ""},
+		{"RTNLGRP_IPV6_RULE", Const, 1, ""},
+		{"RTNLGRP_LINK", Const, 1, ""},
+		{"RTNLGRP_ND_USEROPT", Const, 1, ""},
+		{"RTNLGRP_NEIGH", Const, 1, ""},
+		{"RTNLGRP_NONE", Const, 1, ""},
+		{"RTNLGRP_NOTIFY", Const, 1, ""},
+		{"RTNLGRP_TC", Const, 1, ""},
+		{"RTN_ANYCAST", Const, 0, ""},
+		{"RTN_BLACKHOLE", Const, 0, ""},
+		{"RTN_BROADCAST", Const, 0, ""},
+		{"RTN_LOCAL", Const, 0, ""},
+		{"RTN_MAX", Const, 0, ""},
+		{"RTN_MULTICAST", Const, 0, ""},
+		{"RTN_NAT", Const, 0, ""},
+		{"RTN_PROHIBIT", Const, 0, ""},
+		{"RTN_THROW", Const, 0, ""},
+		{"RTN_UNICAST", Const, 0, ""},
+		{"RTN_UNREACHABLE", Const, 0, ""},
+		{"RTN_UNSPEC", Const, 0, ""},
+		{"RTN_XRESOLVE", Const, 0, ""},
+		{"RTPROT_BIRD", Const, 0, ""},
+		{"RTPROT_BOOT", Const, 0, ""},
+		{"RTPROT_DHCP", Const, 0, ""},
+		{"RTPROT_DNROUTED", Const, 0, ""},
+		{"RTPROT_GATED", Const, 0, ""},
+		{"RTPROT_KERNEL", Const, 0, ""},
+		{"RTPROT_MRT", Const, 0, ""},
+		{"RTPROT_NTK", Const, 0, ""},
+		{"RTPROT_RA", Const, 0, ""},
+		{"RTPROT_REDIRECT", Const, 0, ""},
+		{"RTPROT_STATIC", Const, 0, ""},
+		{"RTPROT_UNSPEC", Const, 0, ""},
+		{"RTPROT_XORP", Const, 0, ""},
+		{"RTPROT_ZEBRA", Const, 0, ""},
+		{"RTV_EXPIRE", Const, 0, ""},
+		{"RTV_HOPCOUNT", Const, 0, ""},
+		{"RTV_MTU", Const, 0, ""},
+		{"RTV_RPIPE", Const, 0, ""},
+		{"RTV_RTT", Const, 0, ""},
+		{"RTV_RTTVAR", Const, 0, ""},
+		{"RTV_SPIPE", Const, 0, ""},
+		{"RTV_SSTHRESH", Const, 0, ""},
+		{"RTV_WEIGHT", Const, 0, ""},
+		{"RT_CACHING_CONTEXT", Const, 1, ""},
+		{"RT_CLASS_DEFAULT", Const, 0, ""},
+		{"RT_CLASS_LOCAL", Const, 0, ""},
+		{"RT_CLASS_MAIN", Const, 0, ""},
+		{"RT_CLASS_MAX", Const, 0, ""},
+		{"RT_CLASS_UNSPEC", Const, 0, ""},
+		{"RT_DEFAULT_FIB", Const, 1, ""},
+		{"RT_NORTREF", Const, 1, ""},
+		{"RT_SCOPE_HOST", Const, 0, ""},
+		{"RT_SCOPE_LINK", Const, 0, ""},
+		{"RT_SCOPE_NOWHERE", Const, 0, ""},
+		{"RT_SCOPE_SITE", Const, 0, ""},
+		{"RT_SCOPE_UNIVERSE", Const, 0, ""},
+		{"RT_TABLEID_MAX", Const, 1, ""},
+		{"RT_TABLE_COMPAT", Const, 0, ""},
+		{"RT_TABLE_DEFAULT", Const, 0, ""},
+		{"RT_TABLE_LOCAL", Const, 0, ""},
+		{"RT_TABLE_MAIN", Const, 0, ""},
+		{"RT_TABLE_MAX", Const, 0, ""},
+		{"RT_TABLE_UNSPEC", Const, 0, ""},
+		{"RUSAGE_CHILDREN", Const, 0, ""},
+		{"RUSAGE_SELF", Const, 0, ""},
+		{"RUSAGE_THREAD", Const, 0, ""},
+		{"Radvisory_t", Type, 0, ""},
+		{"Radvisory_t.Count", Field, 0, ""},
+		{"Radvisory_t.Offset", Field, 0, ""},
+		{"Radvisory_t.Pad_cgo_0", Field, 0, ""},
+		{"RawConn", Type, 9, ""},
+		{"RawSockaddr", Type, 0, ""},
+		{"RawSockaddr.Data", Field, 0, ""},
+		{"RawSockaddr.Family", Field, 0, ""},
+		{"RawSockaddr.Len", Field, 0, ""},
+		{"RawSockaddrAny", Type, 0, ""},
+		{"RawSockaddrAny.Addr", Field, 0, ""},
+		{"RawSockaddrAny.Pad", Field, 0, ""},
+		{"RawSockaddrDatalink", Type, 0, ""},
+		{"RawSockaddrDatalink.Alen", Field, 0, ""},
+		{"RawSockaddrDatalink.Data", Field, 0, ""},
+		{"RawSockaddrDatalink.Family", Field, 0, ""},
+		{"RawSockaddrDatalink.Index", Field, 0, ""},
+		{"RawSockaddrDatalink.Len", Field, 0, ""},
+		{"RawSockaddrDatalink.Nlen", Field, 0, ""},
+		{"RawSockaddrDatalink.Pad_cgo_0", Field, 2, ""},
+		{"RawSockaddrDatalink.Slen", Field, 0, ""},
+		{"RawSockaddrDatalink.Type", Field, 0, ""},
+		{"RawSockaddrInet4", Type, 0, ""},
+		{"RawSockaddrInet4.Addr", Field, 0, ""},
+		{"RawSockaddrInet4.Family", Field, 0, ""},
+		{"RawSockaddrInet4.Len", Field, 0, ""},
+		{"RawSockaddrInet4.Port", Field, 0, ""},
+		{"RawSockaddrInet4.Zero", Field, 0, ""},
+		{"RawSockaddrInet6", Type, 0, ""},
+		{"RawSockaddrInet6.Addr", Field, 0, ""},
+		{"RawSockaddrInet6.Family", Field, 0, ""},
+		{"RawSockaddrInet6.Flowinfo", Field, 0, ""},
+		{"RawSockaddrInet6.Len", Field, 0, ""},
+		{"RawSockaddrInet6.Port", Field, 0, ""},
+		{"RawSockaddrInet6.Scope_id", Field, 0, ""},
+		{"RawSockaddrLinklayer", Type, 0, ""},
+		{"RawSockaddrLinklayer.Addr", Field, 0, ""},
+		{"RawSockaddrLinklayer.Family", Field, 0, ""},
+		{"RawSockaddrLinklayer.Halen", Field, 0, ""},
+		{"RawSockaddrLinklayer.Hatype", Field, 0, ""},
+		{"RawSockaddrLinklayer.Ifindex", Field, 0, ""},
+		{"RawSockaddrLinklayer.Pkttype", Field, 0, ""},
+		{"RawSockaddrLinklayer.Protocol", Field, 0, ""},
+		{"RawSockaddrNetlink", Type, 0, ""},
+		{"RawSockaddrNetlink.Family", Field, 0, ""},
+		{"RawSockaddrNetlink.Groups", Field, 0, ""},
+		{"RawSockaddrNetlink.Pad", Field, 0, ""},
+		{"RawSockaddrNetlink.Pid", Field, 0, ""},
+		{"RawSockaddrUnix", Type, 0, ""},
+		{"RawSockaddrUnix.Family", Field, 0, ""},
+		{"RawSockaddrUnix.Len", Field, 0, ""},
+		{"RawSockaddrUnix.Pad_cgo_0", Field, 2, ""},
+		{"RawSockaddrUnix.Path", Field, 0, ""},
+		{"RawSyscall", Func, 0, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
+		{"RawSyscall6", Func, 0, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
+		{"Read", Func, 0, "func(fd int, p []byte) (n int, err error)"},
+		{"ReadConsole", Func, 1, ""},
+		{"ReadDirectoryChanges", Func, 0, ""},
+		{"ReadDirent", Func, 0, "func(fd int, buf []byte) (n int, err error)"},
+		{"ReadFile", Func, 0, ""},
+		{"Readlink", Func, 0, "func(path string, buf []byte) (n int, err error)"},
+		{"Reboot", Func, 0, "func(cmd int) (err error)"},
+		{"Recvfrom", Func, 0, "func(fd int, p []byte, flags int) (n int, from Sockaddr, err error)"},
+		{"Recvmsg", Func, 0, "func(fd int, p []byte, oob []byte, flags int) (n int, oobn int, recvflags int, from Sockaddr, err error)"},
+		{"RegCloseKey", Func, 0, ""},
+		{"RegEnumKeyEx", Func, 0, ""},
+		{"RegOpenKeyEx", Func, 0, ""},
+		{"RegQueryInfoKey", Func, 0, ""},
+		{"RegQueryValueEx", Func, 0, ""},
+		{"RemoveDirectory", Func, 0, ""},
+		{"Removexattr", Func, 1, "func(path string, attr string) (err error)"},
+		{"Rename", Func, 0, "func(oldpath string, newpath string) (err error)"},
+		{"Renameat", Func, 0, "func(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)"},
+		{"Revoke", Func, 0, ""},
+		{"Rlimit", Type, 0, ""},
+		{"Rlimit.Cur", Field, 0, ""},
+		{"Rlimit.Max", Field, 0, ""},
+		{"Rmdir", Func, 0, "func(path string) error"},
+		{"RouteMessage", Type, 0, ""},
+		{"RouteMessage.Data", Field, 0, ""},
+		{"RouteMessage.Header", Field, 0, ""},
+		{"RouteRIB", Func, 0, ""},
+		{"RoutingMessage", Type, 0, ""},
+		{"RtAttr", Type, 0, ""},
+		{"RtAttr.Len", Field, 0, ""},
+		{"RtAttr.Type", Field, 0, ""},
+		{"RtGenmsg", Type, 0, ""},
+		{"RtGenmsg.Family", Field, 0, ""},
+		{"RtMetrics", Type, 0, ""},
+		{"RtMetrics.Expire", Field, 0, ""},
+		{"RtMetrics.Filler", Field, 0, ""},
+		{"RtMetrics.Hopcount", Field, 0, ""},
+		{"RtMetrics.Locks", Field, 0, ""},
+		{"RtMetrics.Mtu", Field, 0, ""},
+		{"RtMetrics.Pad", Field, 3, ""},
+		{"RtMetrics.Pksent", Field, 0, ""},
+		{"RtMetrics.Recvpipe", Field, 0, ""},
+		{"RtMetrics.Refcnt", Field, 2, ""},
+		{"RtMetrics.Rtt", Field, 0, ""},
+		{"RtMetrics.Rttvar", Field, 0, ""},
+		{"RtMetrics.Sendpipe", Field, 0, ""},
+		{"RtMetrics.Ssthresh", Field, 0, ""},
+		{"RtMetrics.Weight", Field, 0, ""},
+		{"RtMsg", Type, 0, ""},
+		{"RtMsg.Dst_len", Field, 0, ""},
+		{"RtMsg.Family", Field, 0, ""},
+		{"RtMsg.Flags", Field, 0, ""},
+		{"RtMsg.Protocol", Field, 0, ""},
+		{"RtMsg.Scope", Field, 0, ""},
+		{"RtMsg.Src_len", Field, 0, ""},
+		{"RtMsg.Table", Field, 0, ""},
+		{"RtMsg.Tos", Field, 0, ""},
+		{"RtMsg.Type", Field, 0, ""},
+		{"RtMsghdr", Type, 0, ""},
+		{"RtMsghdr.Addrs", Field, 0, ""},
+		{"RtMsghdr.Errno", Field, 0, ""},
+		{"RtMsghdr.Flags", Field, 0, ""},
+		{"RtMsghdr.Fmask", Field, 0, ""},
+		{"RtMsghdr.Hdrlen", Field, 2, ""},
+		{"RtMsghdr.Index", Field, 0, ""},
+		{"RtMsghdr.Inits", Field, 0, ""},
+		{"RtMsghdr.Mpls", Field, 2, ""},
+		{"RtMsghdr.Msglen", Field, 0, ""},
+		{"RtMsghdr.Pad_cgo_0", Field, 0, ""},
+		{"RtMsghdr.Pad_cgo_1", Field, 2, ""},
+		{"RtMsghdr.Pid", Field, 0, ""},
+		{"RtMsghdr.Priority", Field, 2, ""},
+		{"RtMsghdr.Rmx", Field, 0, ""},
+		{"RtMsghdr.Seq", Field, 0, ""},
+		{"RtMsghdr.Tableid", Field, 2, ""},
+		{"RtMsghdr.Type", Field, 0, ""},
+		{"RtMsghdr.Use", Field, 0, ""},
+		{"RtMsghdr.Version", Field, 0, ""},
+		{"RtNexthop", Type, 0, ""},
+		{"RtNexthop.Flags", Field, 0, ""},
+		{"RtNexthop.Hops", Field, 0, ""},
+		{"RtNexthop.Ifindex", Field, 0, ""},
+		{"RtNexthop.Len", Field, 0, ""},
+		{"Rusage", Type, 0, ""},
+		{"Rusage.CreationTime", Field, 0, ""},
+		{"Rusage.ExitTime", Field, 0, ""},
+		{"Rusage.Idrss", Field, 0, ""},
+		{"Rusage.Inblock", Field, 0, ""},
+		{"Rusage.Isrss", Field, 0, ""},
+		{"Rusage.Ixrss", Field, 0, ""},
+		{"Rusage.KernelTime", Field, 0, ""},
+		{"Rusage.Majflt", Field, 0, ""},
+		{"Rusage.Maxrss", Field, 0, ""},
+		{"Rusage.Minflt", Field, 0, ""},
+		{"Rusage.Msgrcv", Field, 0, ""},
+		{"Rusage.Msgsnd", Field, 0, ""},
+		{"Rusage.Nivcsw", Field, 0, ""},
+		{"Rusage.Nsignals", Field, 0, ""},
+		{"Rusage.Nswap", Field, 0, ""},
+		{"Rusage.Nvcsw", Field, 0, ""},
+		{"Rusage.Oublock", Field, 0, ""},
+		{"Rusage.Stime", Field, 0, ""},
+		{"Rusage.UserTime", Field, 0, ""},
+		{"Rusage.Utime", Field, 0, ""},
+		{"SCM_BINTIME", Const, 0, ""},
+		{"SCM_CREDENTIALS", Const, 0, ""},
+		{"SCM_CREDS", Const, 0, ""},
+		{"SCM_RIGHTS", Const, 0, ""},
+		{"SCM_TIMESTAMP", Const, 0, ""},
+		{"SCM_TIMESTAMPING", Const, 0, ""},
+		{"SCM_TIMESTAMPNS", Const, 0, ""},
+		{"SCM_TIMESTAMP_MONOTONIC", Const, 0, ""},
+		{"SHUT_RD", Const, 0, ""},
+		{"SHUT_RDWR", Const, 0, ""},
+		{"SHUT_WR", Const, 0, ""},
+		{"SID", Type, 0, ""},
+		{"SIDAndAttributes", Type, 0, ""},
+		{"SIDAndAttributes.Attributes", Field, 0, ""},
+		{"SIDAndAttributes.Sid", Field, 0, ""},
+		{"SIGABRT", Const, 0, ""},
+		{"SIGALRM", Const, 0, ""},
+		{"SIGBUS", Const, 0, ""},
+		{"SIGCHLD", Const, 0, ""},
+		{"SIGCLD", Const, 0, ""},
+		{"SIGCONT", Const, 0, ""},
+		{"SIGEMT", Const, 0, ""},
+		{"SIGFPE", Const, 0, ""},
+		{"SIGHUP", Const, 0, ""},
+		{"SIGILL", Const, 0, ""},
+		{"SIGINFO", Const, 0, ""},
+		{"SIGINT", Const, 0, ""},
+		{"SIGIO", Const, 0, ""},
+		{"SIGIOT", Const, 0, ""},
+		{"SIGKILL", Const, 0, ""},
+		{"SIGLIBRT", Const, 1, ""},
+		{"SIGLWP", Const, 0, ""},
+		{"SIGPIPE", Const, 0, ""},
+		{"SIGPOLL", Const, 0, ""},
+		{"SIGPROF", Const, 0, ""},
+		{"SIGPWR", Const, 0, ""},
+		{"SIGQUIT", Const, 0, ""},
+		{"SIGSEGV", Const, 0, ""},
+		{"SIGSTKFLT", Const, 0, ""},
+		{"SIGSTOP", Const, 0, ""},
+		{"SIGSYS", Const, 0, ""},
+		{"SIGTERM", Const, 0, ""},
+		{"SIGTHR", Const, 0, ""},
+		{"SIGTRAP", Const, 0, ""},
+		{"SIGTSTP", Const, 0, ""},
+		{"SIGTTIN", Const, 0, ""},
+		{"SIGTTOU", Const, 0, ""},
+		{"SIGUNUSED", Const, 0, ""},
+		{"SIGURG", Const, 0, ""},
+		{"SIGUSR1", Const, 0, ""},
+		{"SIGUSR2", Const, 0, ""},
+		{"SIGVTALRM", Const, 0, ""},
+		{"SIGWINCH", Const, 0, ""},
+		{"SIGXCPU", Const, 0, ""},
+		{"SIGXFSZ", Const, 0, ""},
+		{"SIOCADDDLCI", Const, 0, ""},
+		{"SIOCADDMULTI", Const, 0, ""},
+		{"SIOCADDRT", Const, 0, ""},
+		{"SIOCAIFADDR", Const, 0, ""},
+		{"SIOCAIFGROUP", Const, 0, ""},
+		{"SIOCALIFADDR", Const, 0, ""},
+		{"SIOCARPIPLL", Const, 0, ""},
+		{"SIOCATMARK", Const, 0, ""},
+		{"SIOCAUTOADDR", Const, 0, ""},
+		{"SIOCAUTONETMASK", Const, 0, ""},
+		{"SIOCBRDGADD", Const, 1, ""},
+		{"SIOCBRDGADDS", Const, 1, ""},
+		{"SIOCBRDGARL", Const, 1, ""},
+		{"SIOCBRDGDADDR", Const, 1, ""},
+		{"SIOCBRDGDEL", Const, 1, ""},
+		{"SIOCBRDGDELS", Const, 1, ""},
+		{"SIOCBRDGFLUSH", Const, 1, ""},
+		{"SIOCBRDGFRL", Const, 1, ""},
+		{"SIOCBRDGGCACHE", Const, 1, ""},
+		{"SIOCBRDGGFD", Const, 1, ""},
+		{"SIOCBRDGGHT", Const, 1, ""},
+		{"SIOCBRDGGIFFLGS", Const, 1, ""},
+		{"SIOCBRDGGMA", Const, 1, ""},
+		{"SIOCBRDGGPARAM", Const, 1, ""},
+		{"SIOCBRDGGPRI", Const, 1, ""},
+		{"SIOCBRDGGRL", Const, 1, ""},
+		{"SIOCBRDGGSIFS", Const, 1, ""},
+		{"SIOCBRDGGTO", Const, 1, ""},
+		{"SIOCBRDGIFS", Const, 1, ""},
+		{"SIOCBRDGRTS", Const, 1, ""},
+		{"SIOCBRDGSADDR", Const, 1, ""},
+		{"SIOCBRDGSCACHE", Const, 1, ""},
+		{"SIOCBRDGSFD", Const, 1, ""},
+		{"SIOCBRDGSHT", Const, 1, ""},
+		{"SIOCBRDGSIFCOST", Const, 1, ""},
+		{"SIOCBRDGSIFFLGS", Const, 1, ""},
+		{"SIOCBRDGSIFPRIO", Const, 1, ""},
+		{"SIOCBRDGSMA", Const, 1, ""},
+		{"SIOCBRDGSPRI", Const, 1, ""},
+		{"SIOCBRDGSPROTO", Const, 1, ""},
+		{"SIOCBRDGSTO", Const, 1, ""},
+		{"SIOCBRDGSTXHC", Const, 1, ""},
+		{"SIOCDARP", Const, 0, ""},
+		{"SIOCDELDLCI", Const, 0, ""},
+		{"SIOCDELMULTI", Const, 0, ""},
+		{"SIOCDELRT", Const, 0, ""},
+		{"SIOCDEVPRIVATE", Const, 0, ""},
+		{"SIOCDIFADDR", Const, 0, ""},
+		{"SIOCDIFGROUP", Const, 0, ""},
+		{"SIOCDIFPHYADDR", Const, 0, ""},
+		{"SIOCDLIFADDR", Const, 0, ""},
+		{"SIOCDRARP", Const, 0, ""},
+		{"SIOCGARP", Const, 0, ""},
+		{"SIOCGDRVSPEC", Const, 0, ""},
+		{"SIOCGETKALIVE", Const, 1, ""},
+		{"SIOCGETLABEL", Const, 1, ""},
+		{"SIOCGETPFLOW", Const, 1, ""},
+		{"SIOCGETPFSYNC", Const, 1, ""},
+		{"SIOCGETSGCNT", Const, 0, ""},
+		{"SIOCGETVIFCNT", Const, 0, ""},
+		{"SIOCGETVLAN", Const, 0, ""},
+		{"SIOCGHIWAT", Const, 0, ""},
+		{"SIOCGIFADDR", Const, 0, ""},
+		{"SIOCGIFADDRPREF", Const, 1, ""},
+		{"SIOCGIFALIAS", Const, 1, ""},
+		{"SIOCGIFALTMTU", Const, 0, ""},
+		{"SIOCGIFASYNCMAP", Const, 0, ""},
+		{"SIOCGIFBOND", Const, 0, ""},
+		{"SIOCGIFBR", Const, 0, ""},
+		{"SIOCGIFBRDADDR", Const, 0, ""},
+		{"SIOCGIFCAP", Const, 0, ""},
+		{"SIOCGIFCONF", Const, 0, ""},
+		{"SIOCGIFCOUNT", Const, 0, ""},
+		{"SIOCGIFDATA", Const, 1, ""},
+		{"SIOCGIFDESCR", Const, 0, ""},
+		{"SIOCGIFDEVMTU", Const, 0, ""},
+		{"SIOCGIFDLT", Const, 1, ""},
+		{"SIOCGIFDSTADDR", Const, 0, ""},
+		{"SIOCGIFENCAP", Const, 0, ""},
+		{"SIOCGIFFIB", Const, 1, ""},
+		{"SIOCGIFFLAGS", Const, 0, ""},
+		{"SIOCGIFGATTR", Const, 1, ""},
+		{"SIOCGIFGENERIC", Const, 0, ""},
+		{"SIOCGIFGMEMB", Const, 0, ""},
+		{"SIOCGIFGROUP", Const, 0, ""},
+		{"SIOCGIFHARDMTU", Const, 3, ""},
+		{"SIOCGIFHWADDR", Const, 0, ""},
+		{"SIOCGIFINDEX", Const, 0, ""},
+		{"SIOCGIFKPI", Const, 0, ""},
+		{"SIOCGIFMAC", Const, 0, ""},
+		{"SIOCGIFMAP", Const, 0, ""},
+		{"SIOCGIFMEDIA", Const, 0, ""},
+		{"SIOCGIFMEM", Const, 0, ""},
+		{"SIOCGIFMETRIC", Const, 0, ""},
+		{"SIOCGIFMTU", Const, 0, ""},
+		{"SIOCGIFNAME", Const, 0, ""},
+		{"SIOCGIFNETMASK", Const, 0, ""},
+		{"SIOCGIFPDSTADDR", Const, 0, ""},
+		{"SIOCGIFPFLAGS", Const, 0, ""},
+		{"SIOCGIFPHYS", Const, 0, ""},
+		{"SIOCGIFPRIORITY", Const, 1, ""},
+		{"SIOCGIFPSRCADDR", Const, 0, ""},
+		{"SIOCGIFRDOMAIN", Const, 1, ""},
+		{"SIOCGIFRTLABEL", Const, 1, ""},
+		{"SIOCGIFSLAVE", Const, 0, ""},
+		{"SIOCGIFSTATUS", Const, 0, ""},
+		{"SIOCGIFTIMESLOT", Const, 1, ""},
+		{"SIOCGIFTXQLEN", Const, 0, ""},
+		{"SIOCGIFVLAN", Const, 0, ""},
+		{"SIOCGIFWAKEFLAGS", Const, 0, ""},
+		{"SIOCGIFXFLAGS", Const, 1, ""},
+		{"SIOCGLIFADDR", Const, 0, ""},
+		{"SIOCGLIFPHYADDR", Const, 0, ""},
+		{"SIOCGLIFPHYRTABLE", Const, 1, ""},
+		{"SIOCGLIFPHYTTL", Const, 3, ""},
+		{"SIOCGLINKSTR", Const, 1, ""},
+		{"SIOCGLOWAT", Const, 0, ""},
+		{"SIOCGPGRP", Const, 0, ""},
+		{"SIOCGPRIVATE_0", Const, 0, ""},
+		{"SIOCGPRIVATE_1", Const, 0, ""},
+		{"SIOCGRARP", Const, 0, ""},
+		{"SIOCGSPPPPARAMS", Const, 3, ""},
+		{"SIOCGSTAMP", Const, 0, ""},
+		{"SIOCGSTAMPNS", Const, 0, ""},
+		{"SIOCGVH", Const, 1, ""},
+		{"SIOCGVNETID", Const, 3, ""},
+		{"SIOCIFCREATE", Const, 0, ""},
+		{"SIOCIFCREATE2", Const, 0, ""},
+		{"SIOCIFDESTROY", Const, 0, ""},
+		{"SIOCIFGCLONERS", Const, 0, ""},
+		{"SIOCINITIFADDR", Const, 1, ""},
+		{"SIOCPROTOPRIVATE", Const, 0, ""},
+		{"SIOCRSLVMULTI", Const, 0, ""},
+		{"SIOCRTMSG", Const, 0, ""},
+		{"SIOCSARP", Const, 0, ""},
+		{"SIOCSDRVSPEC", Const, 0, ""},
+		{"SIOCSETKALIVE", Const, 1, ""},
+		{"SIOCSETLABEL", Const, 1, ""},
+		{"SIOCSETPFLOW", Const, 1, ""},
+		{"SIOCSETPFSYNC", Const, 1, ""},
+		{"SIOCSETVLAN", Const, 0, ""},
+		{"SIOCSHIWAT", Const, 0, ""},
+		{"SIOCSIFADDR", Const, 0, ""},
+		{"SIOCSIFADDRPREF", Const, 1, ""},
+		{"SIOCSIFALTMTU", Const, 0, ""},
+		{"SIOCSIFASYNCMAP", Const, 0, ""},
+		{"SIOCSIFBOND", Const, 0, ""},
+		{"SIOCSIFBR", Const, 0, ""},
+		{"SIOCSIFBRDADDR", Const, 0, ""},
+		{"SIOCSIFCAP", Const, 0, ""},
+		{"SIOCSIFDESCR", Const, 0, ""},
+		{"SIOCSIFDSTADDR", Const, 0, ""},
+		{"SIOCSIFENCAP", Const, 0, ""},
+		{"SIOCSIFFIB", Const, 1, ""},
+		{"SIOCSIFFLAGS", Const, 0, ""},
+		{"SIOCSIFGATTR", Const, 1, ""},
+		{"SIOCSIFGENERIC", Const, 0, ""},
+		{"SIOCSIFHWADDR", Const, 0, ""},
+		{"SIOCSIFHWBROADCAST", Const, 0, ""},
+		{"SIOCSIFKPI", Const, 0, ""},
+		{"SIOCSIFLINK", Const, 0, ""},
+		{"SIOCSIFLLADDR", Const, 0, ""},
+		{"SIOCSIFMAC", Const, 0, ""},
+		{"SIOCSIFMAP", Const, 0, ""},
+		{"SIOCSIFMEDIA", Const, 0, ""},
+		{"SIOCSIFMEM", Const, 0, ""},
+		{"SIOCSIFMETRIC", Const, 0, ""},
+		{"SIOCSIFMTU", Const, 0, ""},
+		{"SIOCSIFNAME", Const, 0, ""},
+		{"SIOCSIFNETMASK", Const, 0, ""},
+		{"SIOCSIFPFLAGS", Const, 0, ""},
+		{"SIOCSIFPHYADDR", Const, 0, ""},
+		{"SIOCSIFPHYS", Const, 0, ""},
+		{"SIOCSIFPRIORITY", Const, 1, ""},
+		{"SIOCSIFRDOMAIN", Const, 1, ""},
+		{"SIOCSIFRTLABEL", Const, 1, ""},
+		{"SIOCSIFRVNET", Const, 0, ""},
+		{"SIOCSIFSLAVE", Const, 0, ""},
+		{"SIOCSIFTIMESLOT", Const, 1, ""},
+		{"SIOCSIFTXQLEN", Const, 0, ""},
+		{"SIOCSIFVLAN", Const, 0, ""},
+		{"SIOCSIFVNET", Const, 0, ""},
+		{"SIOCSIFXFLAGS", Const, 1, ""},
+		{"SIOCSLIFPHYADDR", Const, 0, ""},
+		{"SIOCSLIFPHYRTABLE", Const, 1, ""},
+		{"SIOCSLIFPHYTTL", Const, 3, ""},
+		{"SIOCSLINKSTR", Const, 1, ""},
+		{"SIOCSLOWAT", Const, 0, ""},
+		{"SIOCSPGRP", Const, 0, ""},
+		{"SIOCSRARP", Const, 0, ""},
+		{"SIOCSSPPPPARAMS", Const, 3, ""},
+		{"SIOCSVH", Const, 1, ""},
+		{"SIOCSVNETID", Const, 3, ""},
+		{"SIOCZIFDATA", Const, 1, ""},
+		{"SIO_GET_EXTENSION_FUNCTION_POINTER", Const, 1, ""},
+		{"SIO_GET_INTERFACE_LIST", Const, 0, ""},
+		{"SIO_KEEPALIVE_VALS", Const, 3, ""},
+		{"SIO_UDP_CONNRESET", Const, 4, ""},
+		{"SOCK_CLOEXEC", Const, 0, ""},
+		{"SOCK_DCCP", Const, 0, ""},
+		{"SOCK_DGRAM", Const, 0, ""},
+		{"SOCK_FLAGS_MASK", Const, 1, ""},
+		{"SOCK_MAXADDRLEN", Const, 0, ""},
+		{"SOCK_NONBLOCK", Const, 0, ""},
+		{"SOCK_NOSIGPIPE", Const, 1, ""},
+		{"SOCK_PACKET", Const, 0, ""},
+		{"SOCK_RAW", Const, 0, ""},
+		{"SOCK_RDM", Const, 0, ""},
+		{"SOCK_SEQPACKET", Const, 0, ""},
+		{"SOCK_STREAM", Const, 0, ""},
+		{"SOL_AAL", Const, 0, ""},
+		{"SOL_ATM", Const, 0, ""},
+		{"SOL_DECNET", Const, 0, ""},
+		{"SOL_ICMPV6", Const, 0, ""},
+		{"SOL_IP", Const, 0, ""},
+		{"SOL_IPV6", Const, 0, ""},
+		{"SOL_IRDA", Const, 0, ""},
+		{"SOL_PACKET", Const, 0, ""},
+		{"SOL_RAW", Const, 0, ""},
+		{"SOL_SOCKET", Const, 0, ""},
+		{"SOL_TCP", Const, 0, ""},
+		{"SOL_X25", Const, 0, ""},
+		{"SOMAXCONN", Const, 0, ""},
+		{"SO_ACCEPTCONN", Const, 0, ""},
+		{"SO_ACCEPTFILTER", Const, 0, ""},
+		{"SO_ATTACH_FILTER", Const, 0, ""},
+		{"SO_BINDANY", Const, 1, ""},
+		{"SO_BINDTODEVICE", Const, 0, ""},
+		{"SO_BINTIME", Const, 0, ""},
+		{"SO_BROADCAST", Const, 0, ""},
+		{"SO_BSDCOMPAT", Const, 0, ""},
+		{"SO_DEBUG", Const, 0, ""},
+		{"SO_DETACH_FILTER", Const, 0, ""},
+		{"SO_DOMAIN", Const, 0, ""},
+		{"SO_DONTROUTE", Const, 0, ""},
+		{"SO_DONTTRUNC", Const, 0, ""},
+		{"SO_ERROR", Const, 0, ""},
+		{"SO_KEEPALIVE", Const, 0, ""},
+		{"SO_LABEL", Const, 0, ""},
+		{"SO_LINGER", Const, 0, ""},
+		{"SO_LINGER_SEC", Const, 0, ""},
+		{"SO_LISTENINCQLEN", Const, 0, ""},
+		{"SO_LISTENQLEN", Const, 0, ""},
+		{"SO_LISTENQLIMIT", Const, 0, ""},
+		{"SO_MARK", Const, 0, ""},
+		{"SO_NETPROC", Const, 1, ""},
+		{"SO_NKE", Const, 0, ""},
+		{"SO_NOADDRERR", Const, 0, ""},
+		{"SO_NOHEADER", Const, 1, ""},
+		{"SO_NOSIGPIPE", Const, 0, ""},
+		{"SO_NOTIFYCONFLICT", Const, 0, ""},
+		{"SO_NO_CHECK", Const, 0, ""},
+		{"SO_NO_DDP", Const, 0, ""},
+		{"SO_NO_OFFLOAD", Const, 0, ""},
+		{"SO_NP_EXTENSIONS", Const, 0, ""},
+		{"SO_NREAD", Const, 0, ""},
+		{"SO_NUMRCVPKT", Const, 16, ""},
+		{"SO_NWRITE", Const, 0, ""},
+		{"SO_OOBINLINE", Const, 0, ""},
+		{"SO_OVERFLOWED", Const, 1, ""},
+		{"SO_PASSCRED", Const, 0, ""},
+		{"SO_PASSSEC", Const, 0, ""},
+		{"SO_PEERCRED", Const, 0, ""},
+		{"SO_PEERLABEL", Const, 0, ""},
+		{"SO_PEERNAME", Const, 0, ""},
+		{"SO_PEERSEC", Const, 0, ""},
+		{"SO_PRIORITY", Const, 0, ""},
+		{"SO_PROTOCOL", Const, 0, ""},
+		{"SO_PROTOTYPE", Const, 1, ""},
+		{"SO_RANDOMPORT", Const, 0, ""},
+		{"SO_RCVBUF", Const, 0, ""},
+		{"SO_RCVBUFFORCE", Const, 0, ""},
+		{"SO_RCVLOWAT", Const, 0, ""},
+		{"SO_RCVTIMEO", Const, 0, ""},
+		{"SO_RESTRICTIONS", Const, 0, ""},
+		{"SO_RESTRICT_DENYIN", Const, 0, ""},
+		{"SO_RESTRICT_DENYOUT", Const, 0, ""},
+		{"SO_RESTRICT_DENYSET", Const, 0, ""},
+		{"SO_REUSEADDR", Const, 0, ""},
+		{"SO_REUSEPORT", Const, 0, ""},
+		{"SO_REUSESHAREUID", Const, 0, ""},
+		{"SO_RTABLE", Const, 1, ""},
+		{"SO_RXQ_OVFL", Const, 0, ""},
+		{"SO_SECURITY_AUTHENTICATION", Const, 0, ""},
+		{"SO_SECURITY_ENCRYPTION_NETWORK", Const, 0, ""},
+		{"SO_SECURITY_ENCRYPTION_TRANSPORT", Const, 0, ""},
+		{"SO_SETFIB", Const, 0, ""},
+		{"SO_SNDBUF", Const, 0, ""},
+		{"SO_SNDBUFFORCE", Const, 0, ""},
+		{"SO_SNDLOWAT", Const, 0, ""},
+		{"SO_SNDTIMEO", Const, 0, ""},
+		{"SO_SPLICE", Const, 1, ""},
+		{"SO_TIMESTAMP", Const, 0, ""},
+		{"SO_TIMESTAMPING", Const, 0, ""},
+		{"SO_TIMESTAMPNS", Const, 0, ""},
+		{"SO_TIMESTAMP_MONOTONIC", Const, 0, ""},
+		{"SO_TYPE", Const, 0, ""},
+		{"SO_UPCALLCLOSEWAIT", Const, 0, ""},
+		{"SO_UPDATE_ACCEPT_CONTEXT", Const, 0, ""},
+		{"SO_UPDATE_CONNECT_CONTEXT", Const, 1, ""},
+		{"SO_USELOOPBACK", Const, 0, ""},
+		{"SO_USER_COOKIE", Const, 1, ""},
+		{"SO_VENDOR", Const, 3, ""},
+		{"SO_WANTMORE", Const, 0, ""},
+		{"SO_WANTOOBFLAG", Const, 0, ""},
+		{"SSLExtraCertChainPolicyPara", Type, 0, ""},
+		{"SSLExtraCertChainPolicyPara.AuthType", Field, 0, ""},
+		{"SSLExtraCertChainPolicyPara.Checks", Field, 0, ""},
+		{"SSLExtraCertChainPolicyPara.ServerName", Field, 0, ""},
+		{"SSLExtraCertChainPolicyPara.Size", Field, 0, ""},
+		{"STANDARD_RIGHTS_ALL", Const, 0, ""},
+		{"STANDARD_RIGHTS_EXECUTE", Const, 0, ""},
+		{"STANDARD_RIGHTS_READ", Const, 0, ""},
+		{"STANDARD_RIGHTS_REQUIRED", Const, 0, ""},
+		{"STANDARD_RIGHTS_WRITE", Const, 0, ""},
+		{"STARTF_USESHOWWINDOW", Const, 0, ""},
+		{"STARTF_USESTDHANDLES", Const, 0, ""},
+		{"STD_ERROR_HANDLE", Const, 0, ""},
+		{"STD_INPUT_HANDLE", Const, 0, ""},
+		{"STD_OUTPUT_HANDLE", Const, 0, ""},
+		{"SUBLANG_ENGLISH_US", Const, 0, ""},
+		{"SW_FORCEMINIMIZE", Const, 0, ""},
+		{"SW_HIDE", Const, 0, ""},
+		{"SW_MAXIMIZE", Const, 0, ""},
+		{"SW_MINIMIZE", Const, 0, ""},
+		{"SW_NORMAL", Const, 0, ""},
+		{"SW_RESTORE", Const, 0, ""},
+		{"SW_SHOW", Const, 0, ""},
+		{"SW_SHOWDEFAULT", Const, 0, ""},
+		{"SW_SHOWMAXIMIZED", Const, 0, ""},
+		{"SW_SHOWMINIMIZED", Const, 0, ""},
+		{"SW_SHOWMINNOACTIVE", Const, 0, ""},
+		{"SW_SHOWNA", Const, 0, ""},
+		{"SW_SHOWNOACTIVATE", Const, 0, ""},
+		{"SW_SHOWNORMAL", Const, 0, ""},
+		{"SYMBOLIC_LINK_FLAG_DIRECTORY", Const, 4, ""},
+		{"SYNCHRONIZE", Const, 0, ""},
+		{"SYSCTL_VERSION", Const, 1, ""},
+		{"SYSCTL_VERS_0", Const, 1, ""},
+		{"SYSCTL_VERS_1", Const, 1, ""},
+		{"SYSCTL_VERS_MASK", Const, 1, ""},
+		{"SYS_ABORT2", Const, 0, ""},
+		{"SYS_ACCEPT", Const, 0, ""},
+		{"SYS_ACCEPT4", Const, 0, ""},
+		{"SYS_ACCEPT_NOCANCEL", Const, 0, ""},
+		{"SYS_ACCESS", Const, 0, ""},
+		{"SYS_ACCESS_EXTENDED", Const, 0, ""},
+		{"SYS_ACCT", Const, 0, ""},
+		{"SYS_ADD_KEY", Const, 0, ""},
+		{"SYS_ADD_PROFIL", Const, 0, ""},
+		{"SYS_ADJFREQ", Const, 1, ""},
+		{"SYS_ADJTIME", Const, 0, ""},
+		{"SYS_ADJTIMEX", Const, 0, ""},
+		{"SYS_AFS_SYSCALL", Const, 0, ""},
+		{"SYS_AIO_CANCEL", Const, 0, ""},
+		{"SYS_AIO_ERROR", Const, 0, ""},
+		{"SYS_AIO_FSYNC", Const, 0, ""},
+		{"SYS_AIO_MLOCK", Const, 14, ""},
+		{"SYS_AIO_READ", Const, 0, ""},
+		{"SYS_AIO_RETURN", Const, 0, ""},
+		{"SYS_AIO_SUSPEND", Const, 0, ""},
+		{"SYS_AIO_SUSPEND_NOCANCEL", Const, 0, ""},
+		{"SYS_AIO_WAITCOMPLETE", Const, 14, ""},
+		{"SYS_AIO_WRITE", Const, 0, ""},
+		{"SYS_ALARM", Const, 0, ""},
+		{"SYS_ARCH_PRCTL", Const, 0, ""},
+		{"SYS_ARM_FADVISE64_64", Const, 0, ""},
+		{"SYS_ARM_SYNC_FILE_RANGE", Const, 0, ""},
+		{"SYS_ATGETMSG", Const, 0, ""},
+		{"SYS_ATPGETREQ", Const, 0, ""},
+		{"SYS_ATPGETRSP", Const, 0, ""},
+		{"SYS_ATPSNDREQ", Const, 0, ""},
+		{"SYS_ATPSNDRSP", Const, 0, ""},
+		{"SYS_ATPUTMSG", Const, 0, ""},
+		{"SYS_ATSOCKET", Const, 0, ""},
+		{"SYS_AUDIT", Const, 0, ""},
+		{"SYS_AUDITCTL", Const, 0, ""},
+		{"SYS_AUDITON", Const, 0, ""},
+		{"SYS_AUDIT_SESSION_JOIN", Const, 0, ""},
+		{"SYS_AUDIT_SESSION_PORT", Const, 0, ""},
+		{"SYS_AUDIT_SESSION_SELF", Const, 0, ""},
+		{"SYS_BDFLUSH", Const, 0, ""},
+		{"SYS_BIND", Const, 0, ""},
+		{"SYS_BINDAT", Const, 3, ""},
+		{"SYS_BREAK", Const, 0, ""},
+		{"SYS_BRK", Const, 0, ""},
+		{"SYS_BSDTHREAD_CREATE", Const, 0, ""},
+		{"SYS_BSDTHREAD_REGISTER", Const, 0, ""},
+		{"SYS_BSDTHREAD_TERMINATE", Const, 0, ""},
+		{"SYS_CAPGET", Const, 0, ""},
+		{"SYS_CAPSET", Const, 0, ""},
+		{"SYS_CAP_ENTER", Const, 0, ""},
+		{"SYS_CAP_FCNTLS_GET", Const, 1, ""},
+		{"SYS_CAP_FCNTLS_LIMIT", Const, 1, ""},
+		{"SYS_CAP_GETMODE", Const, 0, ""},
+		{"SYS_CAP_GETRIGHTS", Const, 0, ""},
+		{"SYS_CAP_IOCTLS_GET", Const, 1, ""},
+		{"SYS_CAP_IOCTLS_LIMIT", Const, 1, ""},
+		{"SYS_CAP_NEW", Const, 0, ""},
+		{"SYS_CAP_RIGHTS_GET", Const, 1, ""},
+		{"SYS_CAP_RIGHTS_LIMIT", Const, 1, ""},
+		{"SYS_CHDIR", Const, 0, ""},
+		{"SYS_CHFLAGS", Const, 0, ""},
+		{"SYS_CHFLAGSAT", Const, 3, ""},
+		{"SYS_CHMOD", Const, 0, ""},
+		{"SYS_CHMOD_EXTENDED", Const, 0, ""},
+		{"SYS_CHOWN", Const, 0, ""},
+		{"SYS_CHOWN32", Const, 0, ""},
+		{"SYS_CHROOT", Const, 0, ""},
+		{"SYS_CHUD", Const, 0, ""},
+		{"SYS_CLOCK_ADJTIME", Const, 0, ""},
+		{"SYS_CLOCK_GETCPUCLOCKID2", Const, 1, ""},
+		{"SYS_CLOCK_GETRES", Const, 0, ""},
+		{"SYS_CLOCK_GETTIME", Const, 0, ""},
+		{"SYS_CLOCK_NANOSLEEP", Const, 0, ""},
+		{"SYS_CLOCK_SETTIME", Const, 0, ""},
+		{"SYS_CLONE", Const, 0, ""},
+		{"SYS_CLOSE", Const, 0, ""},
+		{"SYS_CLOSEFROM", Const, 0, ""},
+		{"SYS_CLOSE_NOCANCEL", Const, 0, ""},
+		{"SYS_CONNECT", Const, 0, ""},
+		{"SYS_CONNECTAT", Const, 3, ""},
+		{"SYS_CONNECT_NOCANCEL", Const, 0, ""},
+		{"SYS_COPYFILE", Const, 0, ""},
+		{"SYS_CPUSET", Const, 0, ""},
+		{"SYS_CPUSET_GETAFFINITY", Const, 0, ""},
+		{"SYS_CPUSET_GETID", Const, 0, ""},
+		{"SYS_CPUSET_SETAFFINITY", Const, 0, ""},
+		{"SYS_CPUSET_SETID", Const, 0, ""},
+		{"SYS_CREAT", Const, 0, ""},
+		{"SYS_CREATE_MODULE", Const, 0, ""},
+		{"SYS_CSOPS", Const, 0, ""},
+		{"SYS_CSOPS_AUDITTOKEN", Const, 16, ""},
+		{"SYS_DELETE", Const, 0, ""},
+		{"SYS_DELETE_MODULE", Const, 0, ""},
+		{"SYS_DUP", Const, 0, ""},
+		{"SYS_DUP2", Const, 0, ""},
+		{"SYS_DUP3", Const, 0, ""},
+		{"SYS_EACCESS", Const, 0, ""},
+		{"SYS_EPOLL_CREATE", Const, 0, ""},
+		{"SYS_EPOLL_CREATE1", Const, 0, ""},
+		{"SYS_EPOLL_CTL", Const, 0, ""},
+		{"SYS_EPOLL_CTL_OLD", Const, 0, ""},
+		{"SYS_EPOLL_PWAIT", Const, 0, ""},
+		{"SYS_EPOLL_WAIT", Const, 0, ""},
+		{"SYS_EPOLL_WAIT_OLD", Const, 0, ""},
+		{"SYS_EVENTFD", Const, 0, ""},
+		{"SYS_EVENTFD2", Const, 0, ""},
+		{"SYS_EXCHANGEDATA", Const, 0, ""},
+		{"SYS_EXECVE", Const, 0, ""},
+		{"SYS_EXIT", Const, 0, ""},
+		{"SYS_EXIT_GROUP", Const, 0, ""},
+		{"SYS_EXTATTRCTL", Const, 0, ""},
+		{"SYS_EXTATTR_DELETE_FD", Const, 0, ""},
+		{"SYS_EXTATTR_DELETE_FILE", Const, 0, ""},
+		{"SYS_EXTATTR_DELETE_LINK", Const, 0, ""},
+		{"SYS_EXTATTR_GET_FD", Const, 0, ""},
+		{"SYS_EXTATTR_GET_FILE", Const, 0, ""},
+		{"SYS_EXTATTR_GET_LINK", Const, 0, ""},
+		{"SYS_EXTATTR_LIST_FD", Const, 0, ""},
+		{"SYS_EXTATTR_LIST_FILE", Const, 0, ""},
+		{"SYS_EXTATTR_LIST_LINK", Const, 0, ""},
+		{"SYS_EXTATTR_SET_FD", Const, 0, ""},
+		{"SYS_EXTATTR_SET_FILE", Const, 0, ""},
+		{"SYS_EXTATTR_SET_LINK", Const, 0, ""},
+		{"SYS_FACCESSAT", Const, 0, ""},
+		{"SYS_FADVISE64", Const, 0, ""},
+		{"SYS_FADVISE64_64", Const, 0, ""},
+		{"SYS_FALLOCATE", Const, 0, ""},
+		{"SYS_FANOTIFY_INIT", Const, 0, ""},
+		{"SYS_FANOTIFY_MARK", Const, 0, ""},
+		{"SYS_FCHDIR", Const, 0, ""},
+		{"SYS_FCHFLAGS", Const, 0, ""},
+		{"SYS_FCHMOD", Const, 0, ""},
+		{"SYS_FCHMODAT", Const, 0, ""},
+		{"SYS_FCHMOD_EXTENDED", Const, 0, ""},
+		{"SYS_FCHOWN", Const, 0, ""},
+		{"SYS_FCHOWN32", Const, 0, ""},
+		{"SYS_FCHOWNAT", Const, 0, ""},
+		{"SYS_FCHROOT", Const, 1, ""},
+		{"SYS_FCNTL", Const, 0, ""},
+		{"SYS_FCNTL64", Const, 0, ""},
+		{"SYS_FCNTL_NOCANCEL", Const, 0, ""},
+		{"SYS_FDATASYNC", Const, 0, ""},
+		{"SYS_FEXECVE", Const, 0, ""},
+		{"SYS_FFCLOCK_GETCOUNTER", Const, 0, ""},
+		{"SYS_FFCLOCK_GETESTIMATE", Const, 0, ""},
+		{"SYS_FFCLOCK_SETESTIMATE", Const, 0, ""},
+		{"SYS_FFSCTL", Const, 0, ""},
+		{"SYS_FGETATTRLIST", Const, 0, ""},
+		{"SYS_FGETXATTR", Const, 0, ""},
+		{"SYS_FHOPEN", Const, 0, ""},
+		{"SYS_FHSTAT", Const, 0, ""},
+		{"SYS_FHSTATFS", Const, 0, ""},
+		{"SYS_FILEPORT_MAKEFD", Const, 0, ""},
+		{"SYS_FILEPORT_MAKEPORT", Const, 0, ""},
+		{"SYS_FKTRACE", Const, 1, ""},
+		{"SYS_FLISTXATTR", Const, 0, ""},
+		{"SYS_FLOCK", Const, 0, ""},
+		{"SYS_FORK", Const, 0, ""},
+		{"SYS_FPATHCONF", Const, 0, ""},
+		{"SYS_FREEBSD6_FTRUNCATE", Const, 0, ""},
+		{"SYS_FREEBSD6_LSEEK", Const, 0, ""},
+		{"SYS_FREEBSD6_MMAP", Const, 0, ""},
+		{"SYS_FREEBSD6_PREAD", Const, 0, ""},
+		{"SYS_FREEBSD6_PWRITE", Const, 0, ""},
+		{"SYS_FREEBSD6_TRUNCATE", Const, 0, ""},
+		{"SYS_FREMOVEXATTR", Const, 0, ""},
+		{"SYS_FSCTL", Const, 0, ""},
+		{"SYS_FSETATTRLIST", Const, 0, ""},
+		{"SYS_FSETXATTR", Const, 0, ""},
+		{"SYS_FSGETPATH", Const, 0, ""},
+		{"SYS_FSTAT", Const, 0, ""},
+		{"SYS_FSTAT64", Const, 0, ""},
+		{"SYS_FSTAT64_EXTENDED", Const, 0, ""},
+		{"SYS_FSTATAT", Const, 0, ""},
+		{"SYS_FSTATAT64", Const, 0, ""},
+		{"SYS_FSTATFS", Const, 0, ""},
+		{"SYS_FSTATFS64", Const, 0, ""},
+		{"SYS_FSTATV", Const, 0, ""},
+		{"SYS_FSTATVFS1", Const, 1, ""},
+		{"SYS_FSTAT_EXTENDED", Const, 0, ""},
+		{"SYS_FSYNC", Const, 0, ""},
+		{"SYS_FSYNC_NOCANCEL", Const, 0, ""},
+		{"SYS_FSYNC_RANGE", Const, 1, ""},
+		{"SYS_FTIME", Const, 0, ""},
+		{"SYS_FTRUNCATE", Const, 0, ""},
+		{"SYS_FTRUNCATE64", Const, 0, ""},
+		{"SYS_FUTEX", Const, 0, ""},
+		{"SYS_FUTIMENS", Const, 1, ""},
+		{"SYS_FUTIMES", Const, 0, ""},
+		{"SYS_FUTIMESAT", Const, 0, ""},
+		{"SYS_GETATTRLIST", Const, 0, ""},
+		{"SYS_GETAUDIT", Const, 0, ""},
+		{"SYS_GETAUDIT_ADDR", Const, 0, ""},
+		{"SYS_GETAUID", Const, 0, ""},
+		{"SYS_GETCONTEXT", Const, 0, ""},
+		{"SYS_GETCPU", Const, 0, ""},
+		{"SYS_GETCWD", Const, 0, ""},
+		{"SYS_GETDENTS", Const, 0, ""},
+		{"SYS_GETDENTS64", Const, 0, ""},
+		{"SYS_GETDIRENTRIES", Const, 0, ""},
+		{"SYS_GETDIRENTRIES64", Const, 0, ""},
+		{"SYS_GETDIRENTRIESATTR", Const, 0, ""},
+		{"SYS_GETDTABLECOUNT", Const, 1, ""},
+		{"SYS_GETDTABLESIZE", Const, 0, ""},
+		{"SYS_GETEGID", Const, 0, ""},
+		{"SYS_GETEGID32", Const, 0, ""},
+		{"SYS_GETEUID", Const, 0, ""},
+		{"SYS_GETEUID32", Const, 0, ""},
+		{"SYS_GETFH", Const, 0, ""},
+		{"SYS_GETFSSTAT", Const, 0, ""},
+		{"SYS_GETFSSTAT64", Const, 0, ""},
+		{"SYS_GETGID", Const, 0, ""},
+		{"SYS_GETGID32", Const, 0, ""},
+		{"SYS_GETGROUPS", Const, 0, ""},
+		{"SYS_GETGROUPS32", Const, 0, ""},
+		{"SYS_GETHOSTUUID", Const, 0, ""},
+		{"SYS_GETITIMER", Const, 0, ""},
+		{"SYS_GETLCID", Const, 0, ""},
+		{"SYS_GETLOGIN", Const, 0, ""},
+		{"SYS_GETLOGINCLASS", Const, 0, ""},
+		{"SYS_GETPEERNAME", Const, 0, ""},
+		{"SYS_GETPGID", Const, 0, ""},
+		{"SYS_GETPGRP", Const, 0, ""},
+		{"SYS_GETPID", Const, 0, ""},
+		{"SYS_GETPMSG", Const, 0, ""},
+		{"SYS_GETPPID", Const, 0, ""},
+		{"SYS_GETPRIORITY", Const, 0, ""},
+		{"SYS_GETRESGID", Const, 0, ""},
+		{"SYS_GETRESGID32", Const, 0, ""},
+		{"SYS_GETRESUID", Const, 0, ""},
+		{"SYS_GETRESUID32", Const, 0, ""},
+		{"SYS_GETRLIMIT", Const, 0, ""},
+		{"SYS_GETRTABLE", Const, 1, ""},
+		{"SYS_GETRUSAGE", Const, 0, ""},
+		{"SYS_GETSGROUPS", Const, 0, ""},
+		{"SYS_GETSID", Const, 0, ""},
+		{"SYS_GETSOCKNAME", Const, 0, ""},
+		{"SYS_GETSOCKOPT", Const, 0, ""},
+		{"SYS_GETTHRID", Const, 1, ""},
+		{"SYS_GETTID", Const, 0, ""},
+		{"SYS_GETTIMEOFDAY", Const, 0, ""},
+		{"SYS_GETUID", Const, 0, ""},
+		{"SYS_GETUID32", Const, 0, ""},
+		{"SYS_GETVFSSTAT", Const, 1, ""},
+		{"SYS_GETWGROUPS", Const, 0, ""},
+		{"SYS_GETXATTR", Const, 0, ""},
+		{"SYS_GET_KERNEL_SYMS", Const, 0, ""},
+		{"SYS_GET_MEMPOLICY", Const, 0, ""},
+		{"SYS_GET_ROBUST_LIST", Const, 0, ""},
+		{"SYS_GET_THREAD_AREA", Const, 0, ""},
+		{"SYS_GSSD_SYSCALL", Const, 14, ""},
+		{"SYS_GTTY", Const, 0, ""},
+		{"SYS_IDENTITYSVC", Const, 0, ""},
+		{"SYS_IDLE", Const, 0, ""},
+		{"SYS_INITGROUPS", Const, 0, ""},
+		{"SYS_INIT_MODULE", Const, 0, ""},
+		{"SYS_INOTIFY_ADD_WATCH", Const, 0, ""},
+		{"SYS_INOTIFY_INIT", Const, 0, ""},
+		{"SYS_INOTIFY_INIT1", Const, 0, ""},
+		{"SYS_INOTIFY_RM_WATCH", Const, 0, ""},
+		{"SYS_IOCTL", Const, 0, ""},
+		{"SYS_IOPERM", Const, 0, ""},
+		{"SYS_IOPL", Const, 0, ""},
+		{"SYS_IOPOLICYSYS", Const, 0, ""},
+		{"SYS_IOPRIO_GET", Const, 0, ""},
+		{"SYS_IOPRIO_SET", Const, 0, ""},
+		{"SYS_IO_CANCEL", Const, 0, ""},
+		{"SYS_IO_DESTROY", Const, 0, ""},
+		{"SYS_IO_GETEVENTS", Const, 0, ""},
+		{"SYS_IO_SETUP", Const, 0, ""},
+		{"SYS_IO_SUBMIT", Const, 0, ""},
+		{"SYS_IPC", Const, 0, ""},
+		{"SYS_ISSETUGID", Const, 0, ""},
+		{"SYS_JAIL", Const, 0, ""},
+		{"SYS_JAIL_ATTACH", Const, 0, ""},
+		{"SYS_JAIL_GET", Const, 0, ""},
+		{"SYS_JAIL_REMOVE", Const, 0, ""},
+		{"SYS_JAIL_SET", Const, 0, ""},
+		{"SYS_KAS_INFO", Const, 16, ""},
+		{"SYS_KDEBUG_TRACE", Const, 0, ""},
+		{"SYS_KENV", Const, 0, ""},
+		{"SYS_KEVENT", Const, 0, ""},
+		{"SYS_KEVENT64", Const, 0, ""},
+		{"SYS_KEXEC_LOAD", Const, 0, ""},
+		{"SYS_KEYCTL", Const, 0, ""},
+		{"SYS_KILL", Const, 0, ""},
+		{"SYS_KLDFIND", Const, 0, ""},
+		{"SYS_KLDFIRSTMOD", Const, 0, ""},
+		{"SYS_KLDLOAD", Const, 0, ""},
+		{"SYS_KLDNEXT", Const, 0, ""},
+		{"SYS_KLDSTAT", Const, 0, ""},
+		{"SYS_KLDSYM", Const, 0, ""},
+		{"SYS_KLDUNLOAD", Const, 0, ""},
+		{"SYS_KLDUNLOADF", Const, 0, ""},
+		{"SYS_KMQ_NOTIFY", Const, 14, ""},
+		{"SYS_KMQ_OPEN", Const, 14, ""},
+		{"SYS_KMQ_SETATTR", Const, 14, ""},
+		{"SYS_KMQ_TIMEDRECEIVE", Const, 14, ""},
+		{"SYS_KMQ_TIMEDSEND", Const, 14, ""},
+		{"SYS_KMQ_UNLINK", Const, 14, ""},
+		{"SYS_KQUEUE", Const, 0, ""},
+		{"SYS_KQUEUE1", Const, 1, ""},
+		{"SYS_KSEM_CLOSE", Const, 14, ""},
+		{"SYS_KSEM_DESTROY", Const, 14, ""},
+		{"SYS_KSEM_GETVALUE", Const, 14, ""},
+		{"SYS_KSEM_INIT", Const, 14, ""},
+		{"SYS_KSEM_OPEN", Const, 14, ""},
+		{"SYS_KSEM_POST", Const, 14, ""},
+		{"SYS_KSEM_TIMEDWAIT", Const, 14, ""},
+		{"SYS_KSEM_TRYWAIT", Const, 14, ""},
+		{"SYS_KSEM_UNLINK", Const, 14, ""},
+		{"SYS_KSEM_WAIT", Const, 14, ""},
+		{"SYS_KTIMER_CREATE", Const, 0, ""},
+		{"SYS_KTIMER_DELETE", Const, 0, ""},
+		{"SYS_KTIMER_GETOVERRUN", Const, 0, ""},
+		{"SYS_KTIMER_GETTIME", Const, 0, ""},
+		{"SYS_KTIMER_SETTIME", Const, 0, ""},
+		{"SYS_KTRACE", Const, 0, ""},
+		{"SYS_LCHFLAGS", Const, 0, ""},
+		{"SYS_LCHMOD", Const, 0, ""},
+		{"SYS_LCHOWN", Const, 0, ""},
+		{"SYS_LCHOWN32", Const, 0, ""},
+		{"SYS_LEDGER", Const, 16, ""},
+		{"SYS_LGETFH", Const, 0, ""},
+		{"SYS_LGETXATTR", Const, 0, ""},
+		{"SYS_LINK", Const, 0, ""},
+		{"SYS_LINKAT", Const, 0, ""},
+		{"SYS_LIO_LISTIO", Const, 0, ""},
+		{"SYS_LISTEN", Const, 0, ""},
+		{"SYS_LISTXATTR", Const, 0, ""},
+		{"SYS_LLISTXATTR", Const, 0, ""},
+		{"SYS_LOCK", Const, 0, ""},
+		{"SYS_LOOKUP_DCOOKIE", Const, 0, ""},
+		{"SYS_LPATHCONF", Const, 0, ""},
+		{"SYS_LREMOVEXATTR", Const, 0, ""},
+		{"SYS_LSEEK", Const, 0, ""},
+		{"SYS_LSETXATTR", Const, 0, ""},
+		{"SYS_LSTAT", Const, 0, ""},
+		{"SYS_LSTAT64", Const, 0, ""},
+		{"SYS_LSTAT64_EXTENDED", Const, 0, ""},
+		{"SYS_LSTATV", Const, 0, ""},
+		{"SYS_LSTAT_EXTENDED", Const, 0, ""},
+		{"SYS_LUTIMES", Const, 0, ""},
+		{"SYS_MAC_SYSCALL", Const, 0, ""},
+		{"SYS_MADVISE", Const, 0, ""},
+		{"SYS_MADVISE1", Const, 0, ""},
+		{"SYS_MAXSYSCALL", Const, 0, ""},
+		{"SYS_MBIND", Const, 0, ""},
+		{"SYS_MIGRATE_PAGES", Const, 0, ""},
+		{"SYS_MINCORE", Const, 0, ""},
+		{"SYS_MINHERIT", Const, 0, ""},
+		{"SYS_MKCOMPLEX", Const, 0, ""},
+		{"SYS_MKDIR", Const, 0, ""},
+		{"SYS_MKDIRAT", Const, 0, ""},
+		{"SYS_MKDIR_EXTENDED", Const, 0, ""},
+		{"SYS_MKFIFO", Const, 0, ""},
+		{"SYS_MKFIFOAT", Const, 0, ""},
+		{"SYS_MKFIFO_EXTENDED", Const, 0, ""},
+		{"SYS_MKNOD", Const, 0, ""},
+		{"SYS_MKNODAT", Const, 0, ""},
+		{"SYS_MLOCK", Const, 0, ""},
+		{"SYS_MLOCKALL", Const, 0, ""},
+		{"SYS_MMAP", Const, 0, ""},
+		{"SYS_MMAP2", Const, 0, ""},
+		{"SYS_MODCTL", Const, 1, ""},
+		{"SYS_MODFIND", Const, 0, ""},
+		{"SYS_MODFNEXT", Const, 0, ""},
+		{"SYS_MODIFY_LDT", Const, 0, ""},
+		{"SYS_MODNEXT", Const, 0, ""},
+		{"SYS_MODSTAT", Const, 0, ""},
+		{"SYS_MODWATCH", Const, 0, ""},
+		{"SYS_MOUNT", Const, 0, ""},
+		{"SYS_MOVE_PAGES", Const, 0, ""},
+		{"SYS_MPROTECT", Const, 0, ""},
+		{"SYS_MPX", Const, 0, ""},
+		{"SYS_MQUERY", Const, 1, ""},
+		{"SYS_MQ_GETSETATTR", Const, 0, ""},
+		{"SYS_MQ_NOTIFY", Const, 0, ""},
+		{"SYS_MQ_OPEN", Const, 0, ""},
+		{"SYS_MQ_TIMEDRECEIVE", Const, 0, ""},
+		{"SYS_MQ_TIMEDSEND", Const, 0, ""},
+		{"SYS_MQ_UNLINK", Const, 0, ""},
+		{"SYS_MREMAP", Const, 0, ""},
+		{"SYS_MSGCTL", Const, 0, ""},
+		{"SYS_MSGGET", Const, 0, ""},
+		{"SYS_MSGRCV", Const, 0, ""},
+		{"SYS_MSGRCV_NOCANCEL", Const, 0, ""},
+		{"SYS_MSGSND", Const, 0, ""},
+		{"SYS_MSGSND_NOCANCEL", Const, 0, ""},
+		{"SYS_MSGSYS", Const, 0, ""},
+		{"SYS_MSYNC", Const, 0, ""},
+		{"SYS_MSYNC_NOCANCEL", Const, 0, ""},
+		{"SYS_MUNLOCK", Const, 0, ""},
+		{"SYS_MUNLOCKALL", Const, 0, ""},
+		{"SYS_MUNMAP", Const, 0, ""},
+		{"SYS_NAME_TO_HANDLE_AT", Const, 0, ""},
+		{"SYS_NANOSLEEP", Const, 0, ""},
+		{"SYS_NEWFSTATAT", Const, 0, ""},
+		{"SYS_NFSCLNT", Const, 0, ""},
+		{"SYS_NFSSERVCTL", Const, 0, ""},
+		{"SYS_NFSSVC", Const, 0, ""},
+		{"SYS_NFSTAT", Const, 0, ""},
+		{"SYS_NICE", Const, 0, ""},
+		{"SYS_NLM_SYSCALL", Const, 14, ""},
+		{"SYS_NLSTAT", Const, 0, ""},
+		{"SYS_NMOUNT", Const, 0, ""},
+		{"SYS_NSTAT", Const, 0, ""},
+		{"SYS_NTP_ADJTIME", Const, 0, ""},
+		{"SYS_NTP_GETTIME", Const, 0, ""},
+		{"SYS_NUMA_GETAFFINITY", Const, 14, ""},
+		{"SYS_NUMA_SETAFFINITY", Const, 14, ""},
+		{"SYS_OABI_SYSCALL_BASE", Const, 0, ""},
+		{"SYS_OBREAK", Const, 0, ""},
+		{"SYS_OLDFSTAT", Const, 0, ""},
+		{"SYS_OLDLSTAT", Const, 0, ""},
+		{"SYS_OLDOLDUNAME", Const, 0, ""},
+		{"SYS_OLDSTAT", Const, 0, ""},
+		{"SYS_OLDUNAME", Const, 0, ""},
+		{"SYS_OPEN", Const, 0, ""},
+		{"SYS_OPENAT", Const, 0, ""},
+		{"SYS_OPENBSD_POLL", Const, 0, ""},
+		{"SYS_OPEN_BY_HANDLE_AT", Const, 0, ""},
+		{"SYS_OPEN_DPROTECTED_NP", Const, 16, ""},
+		{"SYS_OPEN_EXTENDED", Const, 0, ""},
+		{"SYS_OPEN_NOCANCEL", Const, 0, ""},
+		{"SYS_OVADVISE", Const, 0, ""},
+		{"SYS_PACCEPT", Const, 1, ""},
+		{"SYS_PATHCONF", Const, 0, ""},
+		{"SYS_PAUSE", Const, 0, ""},
+		{"SYS_PCICONFIG_IOBASE", Const, 0, ""},
+		{"SYS_PCICONFIG_READ", Const, 0, ""},
+		{"SYS_PCICONFIG_WRITE", Const, 0, ""},
+		{"SYS_PDFORK", Const, 0, ""},
+		{"SYS_PDGETPID", Const, 0, ""},
+		{"SYS_PDKILL", Const, 0, ""},
+		{"SYS_PERF_EVENT_OPEN", Const, 0, ""},
+		{"SYS_PERSONALITY", Const, 0, ""},
+		{"SYS_PID_HIBERNATE", Const, 0, ""},
+		{"SYS_PID_RESUME", Const, 0, ""},
+		{"SYS_PID_SHUTDOWN_SOCKETS", Const, 0, ""},
+		{"SYS_PID_SUSPEND", Const, 0, ""},
+		{"SYS_PIPE", Const, 0, ""},
+		{"SYS_PIPE2", Const, 0, ""},
+		{"SYS_PIVOT_ROOT", Const, 0, ""},
+		{"SYS_PMC_CONTROL", Const, 1, ""},
+		{"SYS_PMC_GET_INFO", Const, 1, ""},
+		{"SYS_POLL", Const, 0, ""},
+		{"SYS_POLLTS", Const, 1, ""},
+		{"SYS_POLL_NOCANCEL", Const, 0, ""},
+		{"SYS_POSIX_FADVISE", Const, 0, ""},
+		{"SYS_POSIX_FALLOCATE", Const, 0, ""},
+		{"SYS_POSIX_OPENPT", Const, 0, ""},
+		{"SYS_POSIX_SPAWN", Const, 0, ""},
+		{"SYS_PPOLL", Const, 0, ""},
+		{"SYS_PRCTL", Const, 0, ""},
+		{"SYS_PREAD", Const, 0, ""},
+		{"SYS_PREAD64", Const, 0, ""},
+		{"SYS_PREADV", Const, 0, ""},
+		{"SYS_PREAD_NOCANCEL", Const, 0, ""},
+		{"SYS_PRLIMIT64", Const, 0, ""},
+		{"SYS_PROCCTL", Const, 3, ""},
+		{"SYS_PROCESS_POLICY", Const, 0, ""},
+		{"SYS_PROCESS_VM_READV", Const, 0, ""},
+		{"SYS_PROCESS_VM_WRITEV", Const, 0, ""},
+		{"SYS_PROC_INFO", Const, 0, ""},
+		{"SYS_PROF", Const, 0, ""},
+		{"SYS_PROFIL", Const, 0, ""},
+		{"SYS_PSELECT", Const, 0, ""},
+		{"SYS_PSELECT6", Const, 0, ""},
+		{"SYS_PSET_ASSIGN", Const, 1, ""},
+		{"SYS_PSET_CREATE", Const, 1, ""},
+		{"SYS_PSET_DESTROY", Const, 1, ""},
+		{"SYS_PSYNCH_CVBROAD", Const, 0, ""},
+		{"SYS_PSYNCH_CVCLRPREPOST", Const, 0, ""},
+		{"SYS_PSYNCH_CVSIGNAL", Const, 0, ""},
+		{"SYS_PSYNCH_CVWAIT", Const, 0, ""},
+		{"SYS_PSYNCH_MUTEXDROP", Const, 0, ""},
+		{"SYS_PSYNCH_MUTEXWAIT", Const, 0, ""},
+		{"SYS_PSYNCH_RW_DOWNGRADE", Const, 0, ""},
+		{"SYS_PSYNCH_RW_LONGRDLOCK", Const, 0, ""},
+		{"SYS_PSYNCH_RW_RDLOCK", Const, 0, ""},
+		{"SYS_PSYNCH_RW_UNLOCK", Const, 0, ""},
+		{"SYS_PSYNCH_RW_UNLOCK2", Const, 0, ""},
+		{"SYS_PSYNCH_RW_UPGRADE", Const, 0, ""},
+		{"SYS_PSYNCH_RW_WRLOCK", Const, 0, ""},
+		{"SYS_PSYNCH_RW_YIELDWRLOCK", Const, 0, ""},
+		{"SYS_PTRACE", Const, 0, ""},
+		{"SYS_PUTPMSG", Const, 0, ""},
+		{"SYS_PWRITE", Const, 0, ""},
+		{"SYS_PWRITE64", Const, 0, ""},
+		{"SYS_PWRITEV", Const, 0, ""},
+		{"SYS_PWRITE_NOCANCEL", Const, 0, ""},
+		{"SYS_QUERY_MODULE", Const, 0, ""},
+		{"SYS_QUOTACTL", Const, 0, ""},
+		{"SYS_RASCTL", Const, 1, ""},
+		{"SYS_RCTL_ADD_RULE", Const, 0, ""},
+		{"SYS_RCTL_GET_LIMITS", Const, 0, ""},
+		{"SYS_RCTL_GET_RACCT", Const, 0, ""},
+		{"SYS_RCTL_GET_RULES", Const, 0, ""},
+		{"SYS_RCTL_REMOVE_RULE", Const, 0, ""},
+		{"SYS_READ", Const, 0, ""},
+		{"SYS_READAHEAD", Const, 0, ""},
+		{"SYS_READDIR", Const, 0, ""},
+		{"SYS_READLINK", Const, 0, ""},
+		{"SYS_READLINKAT", Const, 0, ""},
+		{"SYS_READV", Const, 0, ""},
+		{"SYS_READV_NOCANCEL", Const, 0, ""},
+		{"SYS_READ_NOCANCEL", Const, 0, ""},
+		{"SYS_REBOOT", Const, 0, ""},
+		{"SYS_RECV", Const, 0, ""},
+		{"SYS_RECVFROM", Const, 0, ""},
+		{"SYS_RECVFROM_NOCANCEL", Const, 0, ""},
+		{"SYS_RECVMMSG", Const, 0, ""},
+		{"SYS_RECVMSG", Const, 0, ""},
+		{"SYS_RECVMSG_NOCANCEL", Const, 0, ""},
+		{"SYS_REMAP_FILE_PAGES", Const, 0, ""},
+		{"SYS_REMOVEXATTR", Const, 0, ""},
+		{"SYS_RENAME", Const, 0, ""},
+		{"SYS_RENAMEAT", Const, 0, ""},
+		{"SYS_REQUEST_KEY", Const, 0, ""},
+		{"SYS_RESTART_SYSCALL", Const, 0, ""},
+		{"SYS_REVOKE", Const, 0, ""},
+		{"SYS_RFORK", Const, 0, ""},
+		{"SYS_RMDIR", Const, 0, ""},
+		{"SYS_RTPRIO", Const, 0, ""},
+		{"SYS_RTPRIO_THREAD", Const, 0, ""},
+		{"SYS_RT_SIGACTION", Const, 0, ""},
+		{"SYS_RT_SIGPENDING", Const, 0, ""},
+		{"SYS_RT_SIGPROCMASK", Const, 0, ""},
+		{"SYS_RT_SIGQUEUEINFO", Const, 0, ""},
+		{"SYS_RT_SIGRETURN", Const, 0, ""},
+		{"SYS_RT_SIGSUSPEND", Const, 0, ""},
+		{"SYS_RT_SIGTIMEDWAIT", Const, 0, ""},
+		{"SYS_RT_TGSIGQUEUEINFO", Const, 0, ""},
+		{"SYS_SBRK", Const, 0, ""},
+		{"SYS_SCHED_GETAFFINITY", Const, 0, ""},
+		{"SYS_SCHED_GETPARAM", Const, 0, ""},
+		{"SYS_SCHED_GETSCHEDULER", Const, 0, ""},
+		{"SYS_SCHED_GET_PRIORITY_MAX", Const, 0, ""},
+		{"SYS_SCHED_GET_PRIORITY_MIN", Const, 0, ""},
+		{"SYS_SCHED_RR_GET_INTERVAL", Const, 0, ""},
+		{"SYS_SCHED_SETAFFINITY", Const, 0, ""},
+		{"SYS_SCHED_SETPARAM", Const, 0, ""},
+		{"SYS_SCHED_SETSCHEDULER", Const, 0, ""},
+		{"SYS_SCHED_YIELD", Const, 0, ""},
+		{"SYS_SCTP_GENERIC_RECVMSG", Const, 0, ""},
+		{"SYS_SCTP_GENERIC_SENDMSG", Const, 0, ""},
+		{"SYS_SCTP_GENERIC_SENDMSG_IOV", Const, 0, ""},
+		{"SYS_SCTP_PEELOFF", Const, 0, ""},
+		{"SYS_SEARCHFS", Const, 0, ""},
+		{"SYS_SECURITY", Const, 0, ""},
+		{"SYS_SELECT", Const, 0, ""},
+		{"SYS_SELECT_NOCANCEL", Const, 0, ""},
+		{"SYS_SEMCONFIG", Const, 1, ""},
+		{"SYS_SEMCTL", Const, 0, ""},
+		{"SYS_SEMGET", Const, 0, ""},
+		{"SYS_SEMOP", Const, 0, ""},
+		{"SYS_SEMSYS", Const, 0, ""},
+		{"SYS_SEMTIMEDOP", Const, 0, ""},
+		{"SYS_SEM_CLOSE", Const, 0, ""},
+		{"SYS_SEM_DESTROY", Const, 0, ""},
+		{"SYS_SEM_GETVALUE", Const, 0, ""},
+		{"SYS_SEM_INIT", Const, 0, ""},
+		{"SYS_SEM_OPEN", Const, 0, ""},
+		{"SYS_SEM_POST", Const, 0, ""},
+		{"SYS_SEM_TRYWAIT", Const, 0, ""},
+		{"SYS_SEM_UNLINK", Const, 0, ""},
+		{"SYS_SEM_WAIT", Const, 0, ""},
+		{"SYS_SEM_WAIT_NOCANCEL", Const, 0, ""},
+		{"SYS_SEND", Const, 0, ""},
+		{"SYS_SENDFILE", Const, 0, ""},
+		{"SYS_SENDFILE64", Const, 0, ""},
+		{"SYS_SENDMMSG", Const, 0, ""},
+		{"SYS_SENDMSG", Const, 0, ""},
+		{"SYS_SENDMSG_NOCANCEL", Const, 0, ""},
+		{"SYS_SENDTO", Const, 0, ""},
+		{"SYS_SENDTO_NOCANCEL", Const, 0, ""},
+		{"SYS_SETATTRLIST", Const, 0, ""},
+		{"SYS_SETAUDIT", Const, 0, ""},
+		{"SYS_SETAUDIT_ADDR", Const, 0, ""},
+		{"SYS_SETAUID", Const, 0, ""},
+		{"SYS_SETCONTEXT", Const, 0, ""},
+		{"SYS_SETDOMAINNAME", Const, 0, ""},
+		{"SYS_SETEGID", Const, 0, ""},
+		{"SYS_SETEUID", Const, 0, ""},
+		{"SYS_SETFIB", Const, 0, ""},
+		{"SYS_SETFSGID", Const, 0, ""},
+		{"SYS_SETFSGID32", Const, 0, ""},
+		{"SYS_SETFSUID", Const, 0, ""},
+		{"SYS_SETFSUID32", Const, 0, ""},
+		{"SYS_SETGID", Const, 0, ""},
+		{"SYS_SETGID32", Const, 0, ""},
+		{"SYS_SETGROUPS", Const, 0, ""},
+		{"SYS_SETGROUPS32", Const, 0, ""},
+		{"SYS_SETHOSTNAME", Const, 0, ""},
+		{"SYS_SETITIMER", Const, 0, ""},
+		{"SYS_SETLCID", Const, 0, ""},
+		{"SYS_SETLOGIN", Const, 0, ""},
+		{"SYS_SETLOGINCLASS", Const, 0, ""},
+		{"SYS_SETNS", Const, 0, ""},
+		{"SYS_SETPGID", Const, 0, ""},
+		{"SYS_SETPRIORITY", Const, 0, ""},
+		{"SYS_SETPRIVEXEC", Const, 0, ""},
+		{"SYS_SETREGID", Const, 0, ""},
+		{"SYS_SETREGID32", Const, 0, ""},
+		{"SYS_SETRESGID", Const, 0, ""},
+		{"SYS_SETRESGID32", Const, 0, ""},
+		{"SYS_SETRESUID", Const, 0, ""},
+		{"SYS_SETRESUID32", Const, 0, ""},
+		{"SYS_SETREUID", Const, 0, ""},
+		{"SYS_SETREUID32", Const, 0, ""},
+		{"SYS_SETRLIMIT", Const, 0, ""},
+		{"SYS_SETRTABLE", Const, 1, ""},
+		{"SYS_SETSGROUPS", Const, 0, ""},
+		{"SYS_SETSID", Const, 0, ""},
+		{"SYS_SETSOCKOPT", Const, 0, ""},
+		{"SYS_SETTID", Const, 0, ""},
+		{"SYS_SETTID_WITH_PID", Const, 0, ""},
+		{"SYS_SETTIMEOFDAY", Const, 0, ""},
+		{"SYS_SETUID", Const, 0, ""},
+		{"SYS_SETUID32", Const, 0, ""},
+		{"SYS_SETWGROUPS", Const, 0, ""},
+		{"SYS_SETXATTR", Const, 0, ""},
+		{"SYS_SET_MEMPOLICY", Const, 0, ""},
+		{"SYS_SET_ROBUST_LIST", Const, 0, ""},
+		{"SYS_SET_THREAD_AREA", Const, 0, ""},
+		{"SYS_SET_TID_ADDRESS", Const, 0, ""},
+		{"SYS_SGETMASK", Const, 0, ""},
+		{"SYS_SHARED_REGION_CHECK_NP", Const, 0, ""},
+		{"SYS_SHARED_REGION_MAP_AND_SLIDE_NP", Const, 0, ""},
+		{"SYS_SHMAT", Const, 0, ""},
+		{"SYS_SHMCTL", Const, 0, ""},
+		{"SYS_SHMDT", Const, 0, ""},
+		{"SYS_SHMGET", Const, 0, ""},
+		{"SYS_SHMSYS", Const, 0, ""},
+		{"SYS_SHM_OPEN", Const, 0, ""},
+		{"SYS_SHM_UNLINK", Const, 0, ""},
+		{"SYS_SHUTDOWN", Const, 0, ""},
+		{"SYS_SIGACTION", Const, 0, ""},
+		{"SYS_SIGALTSTACK", Const, 0, ""},
+		{"SYS_SIGNAL", Const, 0, ""},
+		{"SYS_SIGNALFD", Const, 0, ""},
+		{"SYS_SIGNALFD4", Const, 0, ""},
+		{"SYS_SIGPENDING", Const, 0, ""},
+		{"SYS_SIGPROCMASK", Const, 0, ""},
+		{"SYS_SIGQUEUE", Const, 0, ""},
+		{"SYS_SIGQUEUEINFO", Const, 1, ""},
+		{"SYS_SIGRETURN", Const, 0, ""},
+		{"SYS_SIGSUSPEND", Const, 0, ""},
+		{"SYS_SIGSUSPEND_NOCANCEL", Const, 0, ""},
+		{"SYS_SIGTIMEDWAIT", Const, 0, ""},
+		{"SYS_SIGWAIT", Const, 0, ""},
+		{"SYS_SIGWAITINFO", Const, 0, ""},
+		{"SYS_SOCKET", Const, 0, ""},
+		{"SYS_SOCKETCALL", Const, 0, ""},
+		{"SYS_SOCKETPAIR", Const, 0, ""},
+		{"SYS_SPLICE", Const, 0, ""},
+		{"SYS_SSETMASK", Const, 0, ""},
+		{"SYS_SSTK", Const, 0, ""},
+		{"SYS_STACK_SNAPSHOT", Const, 0, ""},
+		{"SYS_STAT", Const, 0, ""},
+		{"SYS_STAT64", Const, 0, ""},
+		{"SYS_STAT64_EXTENDED", Const, 0, ""},
+		{"SYS_STATFS", Const, 0, ""},
+		{"SYS_STATFS64", Const, 0, ""},
+		{"SYS_STATV", Const, 0, ""},
+		{"SYS_STATVFS1", Const, 1, ""},
+		{"SYS_STAT_EXTENDED", Const, 0, ""},
+		{"SYS_STIME", Const, 0, ""},
+		{"SYS_STTY", Const, 0, ""},
+		{"SYS_SWAPCONTEXT", Const, 0, ""},
+		{"SYS_SWAPCTL", Const, 1, ""},
+		{"SYS_SWAPOFF", Const, 0, ""},
+		{"SYS_SWAPON", Const, 0, ""},
+		{"SYS_SYMLINK", Const, 0, ""},
+		{"SYS_SYMLINKAT", Const, 0, ""},
+		{"SYS_SYNC", Const, 0, ""},
+		{"SYS_SYNCFS", Const, 0, ""},
+		{"SYS_SYNC_FILE_RANGE", Const, 0, ""},
+		{"SYS_SYSARCH", Const, 0, ""},
+		{"SYS_SYSCALL", Const, 0, ""},
+		{"SYS_SYSCALL_BASE", Const, 0, ""},
+		{"SYS_SYSFS", Const, 0, ""},
+		{"SYS_SYSINFO", Const, 0, ""},
+		{"SYS_SYSLOG", Const, 0, ""},
+		{"SYS_TEE", Const, 0, ""},
+		{"SYS_TGKILL", Const, 0, ""},
+		{"SYS_THREAD_SELFID", Const, 0, ""},
+		{"SYS_THR_CREATE", Const, 0, ""},
+		{"SYS_THR_EXIT", Const, 0, ""},
+		{"SYS_THR_KILL", Const, 0, ""},
+		{"SYS_THR_KILL2", Const, 0, ""},
+		{"SYS_THR_NEW", Const, 0, ""},
+		{"SYS_THR_SELF", Const, 0, ""},
+		{"SYS_THR_SET_NAME", Const, 0, ""},
+		{"SYS_THR_SUSPEND", Const, 0, ""},
+		{"SYS_THR_WAKE", Const, 0, ""},
+		{"SYS_TIME", Const, 0, ""},
+		{"SYS_TIMERFD_CREATE", Const, 0, ""},
+		{"SYS_TIMERFD_GETTIME", Const, 0, ""},
+		{"SYS_TIMERFD_SETTIME", Const, 0, ""},
+		{"SYS_TIMER_CREATE", Const, 0, ""},
+		{"SYS_TIMER_DELETE", Const, 0, ""},
+		{"SYS_TIMER_GETOVERRUN", Const, 0, ""},
+		{"SYS_TIMER_GETTIME", Const, 0, ""},
+		{"SYS_TIMER_SETTIME", Const, 0, ""},
+		{"SYS_TIMES", Const, 0, ""},
+		{"SYS_TKILL", Const, 0, ""},
+		{"SYS_TRUNCATE", Const, 0, ""},
+		{"SYS_TRUNCATE64", Const, 0, ""},
+		{"SYS_TUXCALL", Const, 0, ""},
+		{"SYS_UGETRLIMIT", Const, 0, ""},
+		{"SYS_ULIMIT", Const, 0, ""},
+		{"SYS_UMASK", Const, 0, ""},
+		{"SYS_UMASK_EXTENDED", Const, 0, ""},
+		{"SYS_UMOUNT", Const, 0, ""},
+		{"SYS_UMOUNT2", Const, 0, ""},
+		{"SYS_UNAME", Const, 0, ""},
+		{"SYS_UNDELETE", Const, 0, ""},
+		{"SYS_UNLINK", Const, 0, ""},
+		{"SYS_UNLINKAT", Const, 0, ""},
+		{"SYS_UNMOUNT", Const, 0, ""},
+		{"SYS_UNSHARE", Const, 0, ""},
+		{"SYS_USELIB", Const, 0, ""},
+		{"SYS_USTAT", Const, 0, ""},
+		{"SYS_UTIME", Const, 0, ""},
+		{"SYS_UTIMENSAT", Const, 0, ""},
+		{"SYS_UTIMES", Const, 0, ""},
+		{"SYS_UTRACE", Const, 0, ""},
+		{"SYS_UUIDGEN", Const, 0, ""},
+		{"SYS_VADVISE", Const, 1, ""},
+		{"SYS_VFORK", Const, 0, ""},
+		{"SYS_VHANGUP", Const, 0, ""},
+		{"SYS_VM86", Const, 0, ""},
+		{"SYS_VM86OLD", Const, 0, ""},
+		{"SYS_VMSPLICE", Const, 0, ""},
+		{"SYS_VM_PRESSURE_MONITOR", Const, 0, ""},
+		{"SYS_VSERVER", Const, 0, ""},
+		{"SYS_WAIT4", Const, 0, ""},
+		{"SYS_WAIT4_NOCANCEL", Const, 0, ""},
+		{"SYS_WAIT6", Const, 1, ""},
+		{"SYS_WAITEVENT", Const, 0, ""},
+		{"SYS_WAITID", Const, 0, ""},
+		{"SYS_WAITID_NOCANCEL", Const, 0, ""},
+		{"SYS_WAITPID", Const, 0, ""},
+		{"SYS_WATCHEVENT", Const, 0, ""},
+		{"SYS_WORKQ_KERNRETURN", Const, 0, ""},
+		{"SYS_WORKQ_OPEN", Const, 0, ""},
+		{"SYS_WRITE", Const, 0, ""},
+		{"SYS_WRITEV", Const, 0, ""},
+		{"SYS_WRITEV_NOCANCEL", Const, 0, ""},
+		{"SYS_WRITE_NOCANCEL", Const, 0, ""},
+		{"SYS_YIELD", Const, 0, ""},
+		{"SYS__LLSEEK", Const, 0, ""},
+		{"SYS__LWP_CONTINUE", Const, 1, ""},
+		{"SYS__LWP_CREATE", Const, 1, ""},
+		{"SYS__LWP_CTL", Const, 1, ""},
+		{"SYS__LWP_DETACH", Const, 1, ""},
+		{"SYS__LWP_EXIT", Const, 1, ""},
+		{"SYS__LWP_GETNAME", Const, 1, ""},
+		{"SYS__LWP_GETPRIVATE", Const, 1, ""},
+		{"SYS__LWP_KILL", Const, 1, ""},
+		{"SYS__LWP_PARK", Const, 1, ""},
+		{"SYS__LWP_SELF", Const, 1, ""},
+		{"SYS__LWP_SETNAME", Const, 1, ""},
+		{"SYS__LWP_SETPRIVATE", Const, 1, ""},
+		{"SYS__LWP_SUSPEND", Const, 1, ""},
+		{"SYS__LWP_UNPARK", Const, 1, ""},
+		{"SYS__LWP_UNPARK_ALL", Const, 1, ""},
+		{"SYS__LWP_WAIT", Const, 1, ""},
+		{"SYS__LWP_WAKEUP", Const, 1, ""},
+		{"SYS__NEWSELECT", Const, 0, ""},
+		{"SYS__PSET_BIND", Const, 1, ""},
+		{"SYS__SCHED_GETAFFINITY", Const, 1, ""},
+		{"SYS__SCHED_GETPARAM", Const, 1, ""},
+		{"SYS__SCHED_SETAFFINITY", Const, 1, ""},
+		{"SYS__SCHED_SETPARAM", Const, 1, ""},
+		{"SYS__SYSCTL", Const, 0, ""},
+		{"SYS__UMTX_LOCK", Const, 0, ""},
+		{"SYS__UMTX_OP", Const, 0, ""},
+		{"SYS__UMTX_UNLOCK", Const, 0, ""},
+		{"SYS___ACL_ACLCHECK_FD", Const, 0, ""},
+		{"SYS___ACL_ACLCHECK_FILE", Const, 0, ""},
+		{"SYS___ACL_ACLCHECK_LINK", Const, 0, ""},
+		{"SYS___ACL_DELETE_FD", Const, 0, ""},
+		{"SYS___ACL_DELETE_FILE", Const, 0, ""},
+		{"SYS___ACL_DELETE_LINK", Const, 0, ""},
+		{"SYS___ACL_GET_FD", Const, 0, ""},
+		{"SYS___ACL_GET_FILE", Const, 0, ""},
+		{"SYS___ACL_GET_LINK", Const, 0, ""},
+		{"SYS___ACL_SET_FD", Const, 0, ""},
+		{"SYS___ACL_SET_FILE", Const, 0, ""},
+		{"SYS___ACL_SET_LINK", Const, 0, ""},
+		{"SYS___CAP_RIGHTS_GET", Const, 14, ""},
+		{"SYS___CLONE", Const, 1, ""},
+		{"SYS___DISABLE_THREADSIGNAL", Const, 0, ""},
+		{"SYS___GETCWD", Const, 0, ""},
+		{"SYS___GETLOGIN", Const, 1, ""},
+		{"SYS___GET_TCB", Const, 1, ""},
+		{"SYS___MAC_EXECVE", Const, 0, ""},
+		{"SYS___MAC_GETFSSTAT", Const, 0, ""},
+		{"SYS___MAC_GET_FD", Const, 0, ""},
+		{"SYS___MAC_GET_FILE", Const, 0, ""},
+		{"SYS___MAC_GET_LCID", Const, 0, ""},
+		{"SYS___MAC_GET_LCTX", Const, 0, ""},
+		{"SYS___MAC_GET_LINK", Const, 0, ""},
+		{"SYS___MAC_GET_MOUNT", Const, 0, ""},
+		{"SYS___MAC_GET_PID", Const, 0, ""},
+		{"SYS___MAC_GET_PROC", Const, 0, ""},
+		{"SYS___MAC_MOUNT", Const, 0, ""},
+		{"SYS___MAC_SET_FD", Const, 0, ""},
+		{"SYS___MAC_SET_FILE", Const, 0, ""},
+		{"SYS___MAC_SET_LCTX", Const, 0, ""},
+		{"SYS___MAC_SET_LINK", Const, 0, ""},
+		{"SYS___MAC_SET_PROC", Const, 0, ""},
+		{"SYS___MAC_SYSCALL", Const, 0, ""},
+		{"SYS___OLD_SEMWAIT_SIGNAL", Const, 0, ""},
+		{"SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL", Const, 0, ""},
+		{"SYS___POSIX_CHOWN", Const, 1, ""},
+		{"SYS___POSIX_FCHOWN", Const, 1, ""},
+		{"SYS___POSIX_LCHOWN", Const, 1, ""},
+		{"SYS___POSIX_RENAME", Const, 1, ""},
+		{"SYS___PTHREAD_CANCELED", Const, 0, ""},
+		{"SYS___PTHREAD_CHDIR", Const, 0, ""},
+		{"SYS___PTHREAD_FCHDIR", Const, 0, ""},
+		{"SYS___PTHREAD_KILL", Const, 0, ""},
+		{"SYS___PTHREAD_MARKCANCEL", Const, 0, ""},
+		{"SYS___PTHREAD_SIGMASK", Const, 0, ""},
+		{"SYS___QUOTACTL", Const, 1, ""},
+		{"SYS___SEMCTL", Const, 1, ""},
+		{"SYS___SEMWAIT_SIGNAL", Const, 0, ""},
+		{"SYS___SEMWAIT_SIGNAL_NOCANCEL", Const, 0, ""},
+		{"SYS___SETLOGIN", Const, 1, ""},
+		{"SYS___SETUGID", Const, 0, ""},
+		{"SYS___SET_TCB", Const, 1, ""},
+		{"SYS___SIGACTION_SIGTRAMP", Const, 1, ""},
+		{"SYS___SIGTIMEDWAIT", Const, 1, ""},
+		{"SYS___SIGWAIT", Const, 0, ""},
+		{"SYS___SIGWAIT_NOCANCEL", Const, 0, ""},
+		{"SYS___SYSCTL", Const, 0, ""},
+		{"SYS___TFORK", Const, 1, ""},
+		{"SYS___THREXIT", Const, 1, ""},
+		{"SYS___THRSIGDIVERT", Const, 1, ""},
+		{"SYS___THRSLEEP", Const, 1, ""},
+		{"SYS___THRWAKEUP", Const, 1, ""},
+		{"S_ARCH1", Const, 1, ""},
+		{"S_ARCH2", Const, 1, ""},
+		{"S_BLKSIZE", Const, 0, ""},
+		{"S_IEXEC", Const, 0, ""},
+		{"S_IFBLK", Const, 0, ""},
+		{"S_IFCHR", Const, 0, ""},
+		{"S_IFDIR", Const, 0, ""},
+		{"S_IFIFO", Const, 0, ""},
+		{"S_IFLNK", Const, 0, ""},
+		{"S_IFMT", Const, 0, ""},
+		{"S_IFREG", Const, 0, ""},
+		{"S_IFSOCK", Const, 0, ""},
+		{"S_IFWHT", Const, 0, ""},
+		{"S_IREAD", Const, 0, ""},
+		{"S_IRGRP", Const, 0, ""},
+		{"S_IROTH", Const, 0, ""},
+		{"S_IRUSR", Const, 0, ""},
+		{"S_IRWXG", Const, 0, ""},
+		{"S_IRWXO", Const, 0, ""},
+		{"S_IRWXU", Const, 0, ""},
+		{"S_ISGID", Const, 0, ""},
+		{"S_ISTXT", Const, 0, ""},
+		{"S_ISUID", Const, 0, ""},
+		{"S_ISVTX", Const, 0, ""},
+		{"S_IWGRP", Const, 0, ""},
+		{"S_IWOTH", Const, 0, ""},
+		{"S_IWRITE", Const, 0, ""},
+		{"S_IWUSR", Const, 0, ""},
+		{"S_IXGRP", Const, 0, ""},
+		{"S_IXOTH", Const, 0, ""},
+		{"S_IXUSR", Const, 0, ""},
+		{"S_LOGIN_SET", Const, 1, ""},
+		{"SecurityAttributes", Type, 0, ""},
+		{"SecurityAttributes.InheritHandle", Field, 0, ""},
+		{"SecurityAttributes.Length", Field, 0, ""},
+		{"SecurityAttributes.SecurityDescriptor", Field, 0, ""},
+		{"Seek", Func, 0, "func(fd int, offset int64, whence int) (off int64, err error)"},
+		{"Select", Func, 0, "func(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)"},
+		{"Sendfile", Func, 0, "func(outfd int, infd int, offset *int64, count int) (written int, err error)"},
+		{"Sendmsg", Func, 0, "func(fd int, p []byte, oob []byte, to Sockaddr, flags int) (err error)"},
+		{"SendmsgN", Func, 3, "func(fd int, p []byte, oob []byte, to Sockaddr, flags int) (n int, err error)"},
+		{"Sendto", Func, 0, "func(fd int, p []byte, flags int, to Sockaddr) (err error)"},
+		{"Servent", Type, 0, ""},
+		{"Servent.Aliases", Field, 0, ""},
+		{"Servent.Name", Field, 0, ""},
+		{"Servent.Port", Field, 0, ""},
+		{"Servent.Proto", Field, 0, ""},
+		{"SetBpf", Func, 0, ""},
+		{"SetBpfBuflen", Func, 0, ""},
+		{"SetBpfDatalink", Func, 0, ""},
+		{"SetBpfHeadercmpl", Func, 0, ""},
+		{"SetBpfImmediate", Func, 0, ""},
+		{"SetBpfInterface", Func, 0, ""},
+		{"SetBpfPromisc", Func, 0, ""},
+		{"SetBpfTimeout", Func, 0, ""},
+		{"SetCurrentDirectory", Func, 0, ""},
+		{"SetEndOfFile", Func, 0, ""},
+		{"SetEnvironmentVariable", Func, 0, ""},
+		{"SetFileAttributes", Func, 0, ""},
+		{"SetFileCompletionNotificationModes", Func, 2, ""},
+		{"SetFilePointer", Func, 0, ""},
+		{"SetFileTime", Func, 0, ""},
+		{"SetHandleInformation", Func, 0, ""},
+		{"SetKevent", Func, 0, ""},
+		{"SetLsfPromisc", Func, 0, "func(name string, m bool) error"},
+		{"SetNonblock", Func, 0, "func(fd int, nonblocking bool) (err error)"},
+		{"Setdomainname", Func, 0, "func(p []byte) (err error)"},
+		{"Setegid", Func, 0, "func(egid int) (err error)"},
+		{"Setenv", Func, 0, "func(key string, value string) error"},
+		{"Seteuid", Func, 0, "func(euid int) (err error)"},
+		{"Setfsgid", Func, 0, "func(gid int) (err error)"},
+		{"Setfsuid", Func, 0, "func(uid int) (err error)"},
+		{"Setgid", Func, 0, "func(gid int) (err error)"},
+		{"Setgroups", Func, 0, "func(gids []int) (err error)"},
+		{"Sethostname", Func, 0, "func(p []byte) (err error)"},
+		{"Setlogin", Func, 0, ""},
+		{"Setpgid", Func, 0, "func(pid int, pgid int) (err error)"},
+		{"Setpriority", Func, 0, "func(which int, who int, prio int) (err error)"},
+		{"Setprivexec", Func, 0, ""},
+		{"Setregid", Func, 0, "func(rgid int, egid int) (err error)"},
+		{"Setresgid", Func, 0, "func(rgid int, egid int, sgid int) (err error)"},
+		{"Setresuid", Func, 0, "func(ruid int, euid int, suid int) (err error)"},
+		{"Setreuid", Func, 0, "func(ruid int, euid int) (err error)"},
+		{"Setrlimit", Func, 0, "func(resource int, rlim *Rlimit) error"},
+		{"Setsid", Func, 0, "func() (pid int, err error)"},
+		{"Setsockopt", Func, 0, ""},
+		{"SetsockoptByte", Func, 0, "func(fd int, level int, opt int, value byte) (err error)"},
+		{"SetsockoptICMPv6Filter", Func, 2, "func(fd int, level int, opt int, filter *ICMPv6Filter) error"},
+		{"SetsockoptIPMreq", Func, 0, "func(fd int, level int, opt int, mreq *IPMreq) (err error)"},
+		{"SetsockoptIPMreqn", Func, 0, "func(fd int, level int, opt int, mreq *IPMreqn) (err error)"},
+		{"SetsockoptIPv6Mreq", Func, 0, "func(fd int, level int, opt int, mreq *IPv6Mreq) (err error)"},
+		{"SetsockoptInet4Addr", Func, 0, "func(fd int, level int, opt int, value [4]byte) (err error)"},
+		{"SetsockoptInt", Func, 0, "func(fd int, level int, opt int, value int) (err error)"},
+		{"SetsockoptLinger", Func, 0, "func(fd int, level int, opt int, l *Linger) (err error)"},
+		{"SetsockoptString", Func, 0, "func(fd int, level int, opt int, s string) (err error)"},
+		{"SetsockoptTimeval", Func, 0, "func(fd int, level int, opt int, tv *Timeval) (err error)"},
+		{"Settimeofday", Func, 0, "func(tv *Timeval) (err error)"},
+		{"Setuid", Func, 0, "func(uid int) (err error)"},
+		{"Setxattr", Func, 1, "func(path string, attr string, data []byte, flags int) (err error)"},
+		{"Shutdown", Func, 0, "func(fd int, how int) (err error)"},
+		{"SidTypeAlias", Const, 0, ""},
+		{"SidTypeComputer", Const, 0, ""},
+		{"SidTypeDeletedAccount", Const, 0, ""},
+		{"SidTypeDomain", Const, 0, ""},
+		{"SidTypeGroup", Const, 0, ""},
+		{"SidTypeInvalid", Const, 0, ""},
+		{"SidTypeLabel", Const, 0, ""},
+		{"SidTypeUnknown", Const, 0, ""},
+		{"SidTypeUser", Const, 0, ""},
+		{"SidTypeWellKnownGroup", Const, 0, ""},
+		{"Signal", Type, 0, ""},
+		{"SizeofBpfHdr", Const, 0, ""},
+		{"SizeofBpfInsn", Const, 0, ""},
+		{"SizeofBpfProgram", Const, 0, ""},
+		{"SizeofBpfStat", Const, 0, ""},
+		{"SizeofBpfVersion", Const, 0, ""},
+		{"SizeofBpfZbuf", Const, 0, ""},
+		{"SizeofBpfZbufHeader", Const, 0, ""},
+		{"SizeofCmsghdr", Const, 0, ""},
+		{"SizeofICMPv6Filter", Const, 2, ""},
+		{"SizeofIPMreq", Const, 0, ""},
+		{"SizeofIPMreqn", Const, 0, ""},
+		{"SizeofIPv6MTUInfo", Const, 2, ""},
+		{"SizeofIPv6Mreq", Const, 0, ""},
+		{"SizeofIfAddrmsg", Const, 0, ""},
+		{"SizeofIfAnnounceMsghdr", Const, 1, ""},
+		{"SizeofIfData", Const, 0, ""},
+		{"SizeofIfInfomsg", Const, 0, ""},
+		{"SizeofIfMsghdr", Const, 0, ""},
+		{"SizeofIfaMsghdr", Const, 0, ""},
+		{"SizeofIfmaMsghdr", Const, 0, ""},
+		{"SizeofIfmaMsghdr2", Const, 0, ""},
+		{"SizeofInet4Pktinfo", Const, 0, ""},
+		{"SizeofInet6Pktinfo", Const, 0, ""},
+		{"SizeofInotifyEvent", Const, 0, ""},
+		{"SizeofLinger", Const, 0, ""},
+		{"SizeofMsghdr", Const, 0, ""},
+		{"SizeofNlAttr", Const, 0, ""},
+		{"SizeofNlMsgerr", Const, 0, ""},
+		{"SizeofNlMsghdr", Const, 0, ""},
+		{"SizeofRtAttr", Const, 0, ""},
+		{"SizeofRtGenmsg", Const, 0, ""},
+		{"SizeofRtMetrics", Const, 0, ""},
+		{"SizeofRtMsg", Const, 0, ""},
+		{"SizeofRtMsghdr", Const, 0, ""},
+		{"SizeofRtNexthop", Const, 0, ""},
+		{"SizeofSockFilter", Const, 0, ""},
+		{"SizeofSockFprog", Const, 0, ""},
+		{"SizeofSockaddrAny", Const, 0, ""},
+		{"SizeofSockaddrDatalink", Const, 0, ""},
+		{"SizeofSockaddrInet4", Const, 0, ""},
+		{"SizeofSockaddrInet6", Const, 0, ""},
+		{"SizeofSockaddrLinklayer", Const, 0, ""},
+		{"SizeofSockaddrNetlink", Const, 0, ""},
+		{"SizeofSockaddrUnix", Const, 0, ""},
+		{"SizeofTCPInfo", Const, 1, ""},
+		{"SizeofUcred", Const, 0, ""},
+		{"SlicePtrFromStrings", Func, 1, "func(ss []string) ([]*byte, error)"},
+		{"SockFilter", Type, 0, ""},
+		{"SockFilter.Code", Field, 0, ""},
+		{"SockFilter.Jf", Field, 0, ""},
+		{"SockFilter.Jt", Field, 0, ""},
+		{"SockFilter.K", Field, 0, ""},
+		{"SockFprog", Type, 0, ""},
+		{"SockFprog.Filter", Field, 0, ""},
+		{"SockFprog.Len", Field, 0, ""},
+		{"SockFprog.Pad_cgo_0", Field, 0, ""},
+		{"Sockaddr", Type, 0, ""},
+		{"SockaddrDatalink", Type, 0, ""},
+		{"SockaddrDatalink.Alen", Field, 0, ""},
+		{"SockaddrDatalink.Data", Field, 0, ""},
+		{"SockaddrDatalink.Family", Field, 0, ""},
+		{"SockaddrDatalink.Index", Field, 0, ""},
+		{"SockaddrDatalink.Len", Field, 0, ""},
+		{"SockaddrDatalink.Nlen", Field, 0, ""},
+		{"SockaddrDatalink.Slen", Field, 0, ""},
+		{"SockaddrDatalink.Type", Field, 0, ""},
+		{"SockaddrGen", Type, 0, ""},
+		{"SockaddrInet4", Type, 0, ""},
+		{"SockaddrInet4.Addr", Field, 0, ""},
+		{"SockaddrInet4.Port", Field, 0, ""},
+		{"SockaddrInet6", Type, 0, ""},
+		{"SockaddrInet6.Addr", Field, 0, ""},
+		{"SockaddrInet6.Port", Field, 0, ""},
+		{"SockaddrInet6.ZoneId", Field, 0, ""},
+		{"SockaddrLinklayer", Type, 0, ""},
+		{"SockaddrLinklayer.Addr", Field, 0, ""},
+		{"SockaddrLinklayer.Halen", Field, 0, ""},
+		{"SockaddrLinklayer.Hatype", Field, 0, ""},
+		{"SockaddrLinklayer.Ifindex", Field, 0, ""},
+		{"SockaddrLinklayer.Pkttype", Field, 0, ""},
+		{"SockaddrLinklayer.Protocol", Field, 0, ""},
+		{"SockaddrNetlink", Type, 0, ""},
+		{"SockaddrNetlink.Family", Field, 0, ""},
+		{"SockaddrNetlink.Groups", Field, 0, ""},
+		{"SockaddrNetlink.Pad", Field, 0, ""},
+		{"SockaddrNetlink.Pid", Field, 0, ""},
+		{"SockaddrUnix", Type, 0, ""},
+		{"SockaddrUnix.Name", Field, 0, ""},
+		{"Socket", Func, 0, "func(domain int, typ int, proto int) (fd int, err error)"},
+		{"SocketControlMessage", Type, 0, ""},
+		{"SocketControlMessage.Data", Field, 0, ""},
+		{"SocketControlMessage.Header", Field, 0, ""},
+		{"SocketDisableIPv6", Var, 0, ""},
+		{"Socketpair", Func, 0, "func(domain int, typ int, proto int) (fd [2]int, err error)"},
+		{"Splice", Func, 0, "func(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)"},
+		{"StartProcess", Func, 0, "func(argv0 string, argv []string, attr *ProcAttr) (pid int, handle uintptr, err error)"},
+		{"StartupInfo", Type, 0, ""},
+		{"StartupInfo.Cb", Field, 0, ""},
+		{"StartupInfo.Desktop", Field, 0, ""},
+		{"StartupInfo.FillAttribute", Field, 0, ""},
+		{"StartupInfo.Flags", Field, 0, ""},
+		{"StartupInfo.ShowWindow", Field, 0, ""},
+		{"StartupInfo.StdErr", Field, 0, ""},
+		{"StartupInfo.StdInput", Field, 0, ""},
+		{"StartupInfo.StdOutput", Field, 0, ""},
+		{"StartupInfo.Title", Field, 0, ""},
+		{"StartupInfo.X", Field, 0, ""},
+		{"StartupInfo.XCountChars", Field, 0, ""},
+		{"StartupInfo.XSize", Field, 0, ""},
+		{"StartupInfo.Y", Field, 0, ""},
+		{"StartupInfo.YCountChars", Field, 0, ""},
+		{"StartupInfo.YSize", Field, 0, ""},
+		{"Stat", Func, 0, "func(path string, stat *Stat_t) (err error)"},
+		{"Stat_t", Type, 0, ""},
+		{"Stat_t.Atim", Field, 0, ""},
+		{"Stat_t.Atim_ext", Field, 12, ""},
+		{"Stat_t.Atimespec", Field, 0, ""},
+		{"Stat_t.Birthtimespec", Field, 0, ""},
+		{"Stat_t.Blksize", Field, 0, ""},
+		{"Stat_t.Blocks", Field, 0, ""},
+		{"Stat_t.Btim_ext", Field, 12, ""},
+		{"Stat_t.Ctim", Field, 0, ""},
+		{"Stat_t.Ctim_ext", Field, 12, ""},
+		{"Stat_t.Ctimespec", Field, 0, ""},
+		{"Stat_t.Dev", Field, 0, ""},
+		{"Stat_t.Flags", Field, 0, ""},
+		{"Stat_t.Gen", Field, 0, ""},
+		{"Stat_t.Gid", Field, 0, ""},
+		{"Stat_t.Ino", Field, 0, ""},
+		{"Stat_t.Lspare", Field, 0, ""},
+		{"Stat_t.Lspare0", Field, 2, ""},
+		{"Stat_t.Lspare1", Field, 2, ""},
+		{"Stat_t.Mode", Field, 0, ""},
+		{"Stat_t.Mtim", Field, 0, ""},
+		{"Stat_t.Mtim_ext", Field, 12, ""},
+		{"Stat_t.Mtimespec", Field, 0, ""},
+		{"Stat_t.Nlink", Field, 0, ""},
+		{"Stat_t.Pad_cgo_0", Field, 0, ""},
+		{"Stat_t.Pad_cgo_1", Field, 0, ""},
+		{"Stat_t.Pad_cgo_2", Field, 0, ""},
+		{"Stat_t.Padding0", Field, 12, ""},
+		{"Stat_t.Padding1", Field, 12, ""},
+		{"Stat_t.Qspare", Field, 0, ""},
+		{"Stat_t.Rdev", Field, 0, ""},
+		{"Stat_t.Size", Field, 0, ""},
+		{"Stat_t.Spare", Field, 2, ""},
+		{"Stat_t.Uid", Field, 0, ""},
+		{"Stat_t.X__pad0", Field, 0, ""},
+		{"Stat_t.X__pad1", Field, 0, ""},
+		{"Stat_t.X__pad2", Field, 0, ""},
+		{"Stat_t.X__st_birthtim", Field, 2, ""},
+		{"Stat_t.X__st_ino", Field, 0, ""},
+		{"Stat_t.X__unused", Field, 0, ""},
+		{"Statfs", Func, 0, "func(path string, buf *Statfs_t) (err error)"},
+		{"Statfs_t", Type, 0, ""},
+		{"Statfs_t.Asyncreads", Field, 0, ""},
+		{"Statfs_t.Asyncwrites", Field, 0, ""},
+		{"Statfs_t.Bavail", Field, 0, ""},
+		{"Statfs_t.Bfree", Field, 0, ""},
+		{"Statfs_t.Blocks", Field, 0, ""},
+		{"Statfs_t.Bsize", Field, 0, ""},
+		{"Statfs_t.Charspare", Field, 0, ""},
+		{"Statfs_t.F_asyncreads", Field, 2, ""},
+		{"Statfs_t.F_asyncwrites", Field, 2, ""},
+		{"Statfs_t.F_bavail", Field, 2, ""},
+		{"Statfs_t.F_bfree", Field, 2, ""},
+		{"Statfs_t.F_blocks", Field, 2, ""},
+		{"Statfs_t.F_bsize", Field, 2, ""},
+		{"Statfs_t.F_ctime", Field, 2, ""},
+		{"Statfs_t.F_favail", Field, 2, ""},
+		{"Statfs_t.F_ffree", Field, 2, ""},
+		{"Statfs_t.F_files", Field, 2, ""},
+		{"Statfs_t.F_flags", Field, 2, ""},
+		{"Statfs_t.F_fsid", Field, 2, ""},
+		{"Statfs_t.F_fstypename", Field, 2, ""},
+		{"Statfs_t.F_iosize", Field, 2, ""},
+		{"Statfs_t.F_mntfromname", Field, 2, ""},
+		{"Statfs_t.F_mntfromspec", Field, 3, ""},
+		{"Statfs_t.F_mntonname", Field, 2, ""},
+		{"Statfs_t.F_namemax", Field, 2, ""},
+		{"Statfs_t.F_owner", Field, 2, ""},
+		{"Statfs_t.F_spare", Field, 2, ""},
+		{"Statfs_t.F_syncreads", Field, 2, ""},
+		{"Statfs_t.F_syncwrites", Field, 2, ""},
+		{"Statfs_t.Ffree", Field, 0, ""},
+		{"Statfs_t.Files", Field, 0, ""},
+		{"Statfs_t.Flags", Field, 0, ""},
+		{"Statfs_t.Frsize", Field, 0, ""},
+		{"Statfs_t.Fsid", Field, 0, ""},
+		{"Statfs_t.Fssubtype", Field, 0, ""},
+		{"Statfs_t.Fstypename", Field, 0, ""},
+		{"Statfs_t.Iosize", Field, 0, ""},
+		{"Statfs_t.Mntfromname", Field, 0, ""},
+		{"Statfs_t.Mntonname", Field, 0, ""},
+		{"Statfs_t.Mount_info", Field, 2, ""},
+		{"Statfs_t.Namelen", Field, 0, ""},
+		{"Statfs_t.Namemax", Field, 0, ""},
+		{"Statfs_t.Owner", Field, 0, ""},
+		{"Statfs_t.Pad_cgo_0", Field, 0, ""},
+		{"Statfs_t.Pad_cgo_1", Field, 2, ""},
+		{"Statfs_t.Reserved", Field, 0, ""},
+		{"Statfs_t.Spare", Field, 0, ""},
+		{"Statfs_t.Syncreads", Field, 0, ""},
+		{"Statfs_t.Syncwrites", Field, 0, ""},
+		{"Statfs_t.Type", Field, 0, ""},
+		{"Statfs_t.Version", Field, 0, ""},
+		{"Stderr", Var, 0, ""},
+		{"Stdin", Var, 0, ""},
+		{"Stdout", Var, 0, ""},
+		{"StringBytePtr", Func, 0, "func(s string) *byte"},
+		{"StringByteSlice", Func, 0, "func(s string) []byte"},
+		{"StringSlicePtr", Func, 0, "func(ss []string) []*byte"},
+		{"StringToSid", Func, 0, ""},
+		{"StringToUTF16", Func, 0, ""},
+		{"StringToUTF16Ptr", Func, 0, ""},
+		{"Symlink", Func, 0, "func(oldpath string, newpath string) (err error)"},
+		{"Sync", Func, 0, "func()"},
+		{"SyncFileRange", Func, 0, "func(fd int, off int64, n int64, flags int) (err error)"},
+		{"SysProcAttr", Type, 0, ""},
+		{"SysProcAttr.AdditionalInheritedHandles", Field, 17, ""},
+		{"SysProcAttr.AmbientCaps", Field, 9, ""},
+		{"SysProcAttr.CgroupFD", Field, 20, ""},
+		{"SysProcAttr.Chroot", Field, 0, ""},
+		{"SysProcAttr.Cloneflags", Field, 2, ""},
+		{"SysProcAttr.CmdLine", Field, 0, ""},
+		{"SysProcAttr.CreationFlags", Field, 1, ""},
+		{"SysProcAttr.Credential", Field, 0, ""},
+		{"SysProcAttr.Ctty", Field, 1, ""},
+		{"SysProcAttr.Foreground", Field, 5, ""},
+		{"SysProcAttr.GidMappings", Field, 4, ""},
+		{"SysProcAttr.GidMappingsEnableSetgroups", Field, 5, ""},
+		{"SysProcAttr.HideWindow", Field, 0, ""},
+		{"SysProcAttr.Jail", Field, 21, ""},
+		{"SysProcAttr.NoInheritHandles", Field, 16, ""},
+		{"SysProcAttr.Noctty", Field, 0, ""},
+		{"SysProcAttr.ParentProcess", Field, 17, ""},
+		{"SysProcAttr.Pdeathsig", Field, 0, ""},
+		{"SysProcAttr.Pgid", Field, 5, ""},
+		{"SysProcAttr.PidFD", Field, 22, ""},
+		{"SysProcAttr.ProcessAttributes", Field, 13, ""},
+		{"SysProcAttr.Ptrace", Field, 0, ""},
+		{"SysProcAttr.Setctty", Field, 0, ""},
+		{"SysProcAttr.Setpgid", Field, 0, ""},
+		{"SysProcAttr.Setsid", Field, 0, ""},
+		{"SysProcAttr.ThreadAttributes", Field, 13, ""},
+		{"SysProcAttr.Token", Field, 10, ""},
+		{"SysProcAttr.UidMappings", Field, 4, ""},
+		{"SysProcAttr.Unshareflags", Field, 7, ""},
+		{"SysProcAttr.UseCgroupFD", Field, 20, ""},
+		{"SysProcIDMap", Type, 4, ""},
+		{"SysProcIDMap.ContainerID", Field, 4, ""},
+		{"SysProcIDMap.HostID", Field, 4, ""},
+		{"SysProcIDMap.Size", Field, 4, ""},
+		{"Syscall", Func, 0, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
+		{"Syscall12", Func, 0, ""},
+		{"Syscall15", Func, 0, ""},
+		{"Syscall18", Func, 12, ""},
+		{"Syscall6", Func, 0, "func(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr) (r1 uintptr, r2 uintptr, err Errno)"},
+		{"Syscall9", Func, 0, ""},
+		{"SyscallN", Func, 18, ""},
+		{"Sysctl", Func, 0, ""},
+		{"SysctlUint32", Func, 0, ""},
+		{"Sysctlnode", Type, 2, ""},
+		{"Sysctlnode.Flags", Field, 2, ""},
+		{"Sysctlnode.Name", Field, 2, ""},
+		{"Sysctlnode.Num", Field, 2, ""},
+		{"Sysctlnode.Un", Field, 2, ""},
+		{"Sysctlnode.Ver", Field, 2, ""},
+		{"Sysctlnode.X__rsvd", Field, 2, ""},
+		{"Sysctlnode.X_sysctl_desc", Field, 2, ""},
+		{"Sysctlnode.X_sysctl_func", Field, 2, ""},
+		{"Sysctlnode.X_sysctl_parent", Field, 2, ""},
+		{"Sysctlnode.X_sysctl_size", Field, 2, ""},
+		{"Sysinfo", Func, 0, "func(info *Sysinfo_t) (err error)"},
+		{"Sysinfo_t", Type, 0, ""},
+		{"Sysinfo_t.Bufferram", Field, 0, ""},
+		{"Sysinfo_t.Freehigh", Field, 0, ""},
+		{"Sysinfo_t.Freeram", Field, 0, ""},
+		{"Sysinfo_t.Freeswap", Field, 0, ""},
+		{"Sysinfo_t.Loads", Field, 0, ""},
+		{"Sysinfo_t.Pad", Field, 0, ""},
+		{"Sysinfo_t.Pad_cgo_0", Field, 0, ""},
+		{"Sysinfo_t.Pad_cgo_1", Field, 0, ""},
+		{"Sysinfo_t.Procs", Field, 0, ""},
+		{"Sysinfo_t.Sharedram", Field, 0, ""},
+		{"Sysinfo_t.Totalhigh", Field, 0, ""},
+		{"Sysinfo_t.Totalram", Field, 0, ""},
+		{"Sysinfo_t.Totalswap", Field, 0, ""},
+		{"Sysinfo_t.Unit", Field, 0, ""},
+		{"Sysinfo_t.Uptime", Field, 0, ""},
+		{"Sysinfo_t.X_f", Field, 0, ""},
+		{"Systemtime", Type, 0, ""},
+		{"Systemtime.Day", Field, 0, ""},
+		{"Systemtime.DayOfWeek", Field, 0, ""},
+		{"Systemtime.Hour", Field, 0, ""},
+		{"Systemtime.Milliseconds", Field, 0, ""},
+		{"Systemtime.Minute", Field, 0, ""},
+		{"Systemtime.Month", Field, 0, ""},
+		{"Systemtime.Second", Field, 0, ""},
+		{"Systemtime.Year", Field, 0, ""},
+		{"TCGETS", Const, 0, ""},
+		{"TCIFLUSH", Const, 1, ""},
+		{"TCIOFLUSH", Const, 1, ""},
+		{"TCOFLUSH", Const, 1, ""},
+		{"TCPInfo", Type, 1, ""},
+		{"TCPInfo.Advmss", Field, 1, ""},
+		{"TCPInfo.Ato", Field, 1, ""},
+		{"TCPInfo.Backoff", Field, 1, ""},
+		{"TCPInfo.Ca_state", Field, 1, ""},
+		{"TCPInfo.Fackets", Field, 1, ""},
+		{"TCPInfo.Last_ack_recv", Field, 1, ""},
+		{"TCPInfo.Last_ack_sent", Field, 1, ""},
+		{"TCPInfo.Last_data_recv", Field, 1, ""},
+		{"TCPInfo.Last_data_sent", Field, 1, ""},
+		{"TCPInfo.Lost", Field, 1, ""},
+		{"TCPInfo.Options", Field, 1, ""},
+		{"TCPInfo.Pad_cgo_0", Field, 1, ""},
+		{"TCPInfo.Pmtu", Field, 1, ""},
+		{"TCPInfo.Probes", Field, 1, ""},
+		{"TCPInfo.Rcv_mss", Field, 1, ""},
+		{"TCPInfo.Rcv_rtt", Field, 1, ""},
+		{"TCPInfo.Rcv_space", Field, 1, ""},
+		{"TCPInfo.Rcv_ssthresh", Field, 1, ""},
+		{"TCPInfo.Reordering", Field, 1, ""},
+		{"TCPInfo.Retrans", Field, 1, ""},
+		{"TCPInfo.Retransmits", Field, 1, ""},
+		{"TCPInfo.Rto", Field, 1, ""},
+		{"TCPInfo.Rtt", Field, 1, ""},
+		{"TCPInfo.Rttvar", Field, 1, ""},
+		{"TCPInfo.Sacked", Field, 1, ""},
+		{"TCPInfo.Snd_cwnd", Field, 1, ""},
+		{"TCPInfo.Snd_mss", Field, 1, ""},
+		{"TCPInfo.Snd_ssthresh", Field, 1, ""},
+		{"TCPInfo.State", Field, 1, ""},
+		{"TCPInfo.Total_retrans", Field, 1, ""},
+		{"TCPInfo.Unacked", Field, 1, ""},
+		{"TCPKeepalive", Type, 3, ""},
+		{"TCPKeepalive.Interval", Field, 3, ""},
+		{"TCPKeepalive.OnOff", Field, 3, ""},
+		{"TCPKeepalive.Time", Field, 3, ""},
+		{"TCP_CA_NAME_MAX", Const, 0, ""},
+		{"TCP_CONGCTL", Const, 1, ""},
+		{"TCP_CONGESTION", Const, 0, ""},
+		{"TCP_CONNECTIONTIMEOUT", Const, 0, ""},
+		{"TCP_CORK", Const, 0, ""},
+		{"TCP_DEFER_ACCEPT", Const, 0, ""},
+		{"TCP_ENABLE_ECN", Const, 16, ""},
+		{"TCP_INFO", Const, 0, ""},
+		{"TCP_KEEPALIVE", Const, 0, ""},
+		{"TCP_KEEPCNT", Const, 0, ""},
+		{"TCP_KEEPIDLE", Const, 0, ""},
+		{"TCP_KEEPINIT", Const, 1, ""},
+		{"TCP_KEEPINTVL", Const, 0, ""},
+		{"TCP_LINGER2", Const, 0, ""},
+		{"TCP_MAXBURST", Const, 0, ""},
+		{"TCP_MAXHLEN", Const, 0, ""},
+		{"TCP_MAXOLEN", Const, 0, ""},
+		{"TCP_MAXSEG", Const, 0, ""},
+		{"TCP_MAXWIN", Const, 0, ""},
+		{"TCP_MAX_SACK", Const, 0, ""},
+		{"TCP_MAX_WINSHIFT", Const, 0, ""},
+		{"TCP_MD5SIG", Const, 0, ""},
+		{"TCP_MD5SIG_MAXKEYLEN", Const, 0, ""},
+		{"TCP_MINMSS", Const, 0, ""},
+		{"TCP_MINMSSOVERLOAD", Const, 0, ""},
+		{"TCP_MSS", Const, 0, ""},
+		{"TCP_NODELAY", Const, 0, ""},
+		{"TCP_NOOPT", Const, 0, ""},
+		{"TCP_NOPUSH", Const, 0, ""},
+		{"TCP_NOTSENT_LOWAT", Const, 16, ""},
+		{"TCP_NSTATES", Const, 1, ""},
+		{"TCP_QUICKACK", Const, 0, ""},
+		{"TCP_RXT_CONNDROPTIME", Const, 0, ""},
+		{"TCP_RXT_FINDROP", Const, 0, ""},
+		{"TCP_SACK_ENABLE", Const, 1, ""},
+		{"TCP_SENDMOREACKS", Const, 16, ""},
+		{"TCP_SYNCNT", Const, 0, ""},
+		{"TCP_VENDOR", Const, 3, ""},
+		{"TCP_WINDOW_CLAMP", Const, 0, ""},
+		{"TCSAFLUSH", Const, 1, ""},
+		{"TCSETS", Const, 0, ""},
+		{"TF_DISCONNECT", Const, 0, ""},
+		{"TF_REUSE_SOCKET", Const, 0, ""},
+		{"TF_USE_DEFAULT_WORKER", Const, 0, ""},
+		{"TF_USE_KERNEL_APC", Const, 0, ""},
+		{"TF_USE_SYSTEM_THREAD", Const, 0, ""},
+		{"TF_WRITE_BEHIND", Const, 0, ""},
+		{"TH32CS_INHERIT", Const, 4, ""},
+		{"TH32CS_SNAPALL", Const, 4, ""},
+		{"TH32CS_SNAPHEAPLIST", Const, 4, ""},
+		{"TH32CS_SNAPMODULE", Const, 4, ""},
+		{"TH32CS_SNAPMODULE32", Const, 4, ""},
+		{"TH32CS_SNAPPROCESS", Const, 4, ""},
+		{"TH32CS_SNAPTHREAD", Const, 4, ""},
+		{"TIME_ZONE_ID_DAYLIGHT", Const, 0, ""},
+		{"TIME_ZONE_ID_STANDARD", Const, 0, ""},
+		{"TIME_ZONE_ID_UNKNOWN", Const, 0, ""},
+		{"TIOCCBRK", Const, 0, ""},
+		{"TIOCCDTR", Const, 0, ""},
+		{"TIOCCONS", Const, 0, ""},
+		{"TIOCDCDTIMESTAMP", Const, 0, ""},
+		{"TIOCDRAIN", Const, 0, ""},
+		{"TIOCDSIMICROCODE", Const, 0, ""},
+		{"TIOCEXCL", Const, 0, ""},
+		{"TIOCEXT", Const, 0, ""},
+		{"TIOCFLAG_CDTRCTS", Const, 1, ""},
+		{"TIOCFLAG_CLOCAL", Const, 1, ""},
+		{"TIOCFLAG_CRTSCTS", Const, 1, ""},
+		{"TIOCFLAG_MDMBUF", Const, 1, ""},
+		{"TIOCFLAG_PPS", Const, 1, ""},
+		{"TIOCFLAG_SOFTCAR", Const, 1, ""},
+		{"TIOCFLUSH", Const, 0, ""},
+		{"TIOCGDEV", Const, 0, ""},
+		{"TIOCGDRAINWAIT", Const, 0, ""},
+		{"TIOCGETA", Const, 0, ""},
+		{"TIOCGETD", Const, 0, ""},
+		{"TIOCGFLAGS", Const, 1, ""},
+		{"TIOCGICOUNT", Const, 0, ""},
+		{"TIOCGLCKTRMIOS", Const, 0, ""},
+		{"TIOCGLINED", Const, 1, ""},
+		{"TIOCGPGRP", Const, 0, ""},
+		{"TIOCGPTN", Const, 0, ""},
+		{"TIOCGQSIZE", Const, 1, ""},
+		{"TIOCGRANTPT", Const, 1, ""},
+		{"TIOCGRS485", Const, 0, ""},
+		{"TIOCGSERIAL", Const, 0, ""},
+		{"TIOCGSID", Const, 0, ""},
+		{"TIOCGSIZE", Const, 1, ""},
+		{"TIOCGSOFTCAR", Const, 0, ""},
+		{"TIOCGTSTAMP", Const, 1, ""},
+		{"TIOCGWINSZ", Const, 0, ""},
+		{"TIOCINQ", Const, 0, ""},
+		{"TIOCIXOFF", Const, 0, ""},
+		{"TIOCIXON", Const, 0, ""},
+		{"TIOCLINUX", Const, 0, ""},
+		{"TIOCMBIC", Const, 0, ""},
+		{"TIOCMBIS", Const, 0, ""},
+		{"TIOCMGDTRWAIT", Const, 0, ""},
+		{"TIOCMGET", Const, 0, ""},
+		{"TIOCMIWAIT", Const, 0, ""},
+		{"TIOCMODG", Const, 0, ""},
+		{"TIOCMODS", Const, 0, ""},
+		{"TIOCMSDTRWAIT", Const, 0, ""},
+		{"TIOCMSET", Const, 0, ""},
+		{"TIOCM_CAR", Const, 0, ""},
+		{"TIOCM_CD", Const, 0, ""},
+		{"TIOCM_CTS", Const, 0, ""},
+		{"TIOCM_DCD", Const, 0, ""},
+		{"TIOCM_DSR", Const, 0, ""},
+		{"TIOCM_DTR", Const, 0, ""},
+		{"TIOCM_LE", Const, 0, ""},
+		{"TIOCM_RI", Const, 0, ""},
+		{"TIOCM_RNG", Const, 0, ""},
+		{"TIOCM_RTS", Const, 0, ""},
+		{"TIOCM_SR", Const, 0, ""},
+		{"TIOCM_ST", Const, 0, ""},
+		{"TIOCNOTTY", Const, 0, ""},
+		{"TIOCNXCL", Const, 0, ""},
+		{"TIOCOUTQ", Const, 0, ""},
+		{"TIOCPKT", Const, 0, ""},
+		{"TIOCPKT_DATA", Const, 0, ""},
+		{"TIOCPKT_DOSTOP", Const, 0, ""},
+		{"TIOCPKT_FLUSHREAD", Const, 0, ""},
+		{"TIOCPKT_FLUSHWRITE", Const, 0, ""},
+		{"TIOCPKT_IOCTL", Const, 0, ""},
+		{"TIOCPKT_NOSTOP", Const, 0, ""},
+		{"TIOCPKT_START", Const, 0, ""},
+		{"TIOCPKT_STOP", Const, 0, ""},
+		{"TIOCPTMASTER", Const, 0, ""},
+		{"TIOCPTMGET", Const, 1, ""},
+		{"TIOCPTSNAME", Const, 1, ""},
+		{"TIOCPTYGNAME", Const, 0, ""},
+		{"TIOCPTYGRANT", Const, 0, ""},
+		{"TIOCPTYUNLK", Const, 0, ""},
+		{"TIOCRCVFRAME", Const, 1, ""},
+		{"TIOCREMOTE", Const, 0, ""},
+		{"TIOCSBRK", Const, 0, ""},
+		{"TIOCSCONS", Const, 0, ""},
+		{"TIOCSCTTY", Const, 0, ""},
+		{"TIOCSDRAINWAIT", Const, 0, ""},
+		{"TIOCSDTR", Const, 0, ""},
+		{"TIOCSERCONFIG", Const, 0, ""},
+		{"TIOCSERGETLSR", Const, 0, ""},
+		{"TIOCSERGETMULTI", Const, 0, ""},
+		{"TIOCSERGSTRUCT", Const, 0, ""},
+		{"TIOCSERGWILD", Const, 0, ""},
+		{"TIOCSERSETMULTI", Const, 0, ""},
+		{"TIOCSERSWILD", Const, 0, ""},
+		{"TIOCSER_TEMT", Const, 0, ""},
+		{"TIOCSETA", Const, 0, ""},
+		{"TIOCSETAF", Const, 0, ""},
+		{"TIOCSETAW", Const, 0, ""},
+		{"TIOCSETD", Const, 0, ""},
+		{"TIOCSFLAGS", Const, 1, ""},
+		{"TIOCSIG", Const, 0, ""},
+		{"TIOCSLCKTRMIOS", Const, 0, ""},
+		{"TIOCSLINED", Const, 1, ""},
+		{"TIOCSPGRP", Const, 0, ""},
+		{"TIOCSPTLCK", Const, 0, ""},
+		{"TIOCSQSIZE", Const, 1, ""},
+		{"TIOCSRS485", Const, 0, ""},
+		{"TIOCSSERIAL", Const, 0, ""},
+		{"TIOCSSIZE", Const, 1, ""},
+		{"TIOCSSOFTCAR", Const, 0, ""},
+		{"TIOCSTART", Const, 0, ""},
+		{"TIOCSTAT", Const, 0, ""},
+		{"TIOCSTI", Const, 0, ""},
+		{"TIOCSTOP", Const, 0, ""},
+		{"TIOCSTSTAMP", Const, 1, ""},
+		{"TIOCSWINSZ", Const, 0, ""},
+		{"TIOCTIMESTAMP", Const, 0, ""},
+		{"TIOCUCNTL", Const, 0, ""},
+		{"TIOCVHANGUP", Const, 0, ""},
+		{"TIOCXMTFRAME", Const, 1, ""},
+		{"TOKEN_ADJUST_DEFAULT", Const, 0, ""},
+		{"TOKEN_ADJUST_GROUPS", Const, 0, ""},
+		{"TOKEN_ADJUST_PRIVILEGES", Const, 0, ""},
+		{"TOKEN_ADJUST_SESSIONID", Const, 11, ""},
+		{"TOKEN_ALL_ACCESS", Const, 0, ""},
+		{"TOKEN_ASSIGN_PRIMARY", Const, 0, ""},
+		{"TOKEN_DUPLICATE", Const, 0, ""},
+		{"TOKEN_EXECUTE", Const, 0, ""},
+		{"TOKEN_IMPERSONATE", Const, 0, ""},
+		{"TOKEN_QUERY", Const, 0, ""},
+		{"TOKEN_QUERY_SOURCE", Const, 0, ""},
+		{"TOKEN_READ", Const, 0, ""},
+		{"TOKEN_WRITE", Const, 0, ""},
+		{"TOSTOP", Const, 0, ""},
+		{"TRUNCATE_EXISTING", Const, 0, ""},
+		{"TUNATTACHFILTER", Const, 0, ""},
+		{"TUNDETACHFILTER", Const, 0, ""},
+		{"TUNGETFEATURES", Const, 0, ""},
+		{"TUNGETIFF", Const, 0, ""},
+		{"TUNGETSNDBUF", Const, 0, ""},
+		{"TUNGETVNETHDRSZ", Const, 0, ""},
+		{"TUNSETDEBUG", Const, 0, ""},
+		{"TUNSETGROUP", Const, 0, ""},
+		{"TUNSETIFF", Const, 0, ""},
+		{"TUNSETLINK", Const, 0, ""},
+		{"TUNSETNOCSUM", Const, 0, ""},
+		{"TUNSETOFFLOAD", Const, 0, ""},
+		{"TUNSETOWNER", Const, 0, ""},
+		{"TUNSETPERSIST", Const, 0, ""},
+		{"TUNSETSNDBUF", Const, 0, ""},
+		{"TUNSETTXFILTER", Const, 0, ""},
+		{"TUNSETVNETHDRSZ", Const, 0, ""},
+		{"Tee", Func, 0, "func(rfd int, wfd int, len int, flags int) (n int64, err error)"},
+		{"TerminateProcess", Func, 0, ""},
+		{"Termios", Type, 0, ""},
+		{"Termios.Cc", Field, 0, ""},
+		{"Termios.Cflag", Field, 0, ""},
+		{"Termios.Iflag", Field, 0, ""},
+		{"Termios.Ispeed", Field, 0, ""},
+		{"Termios.Lflag", Field, 0, ""},
+		{"Termios.Line", Field, 0, ""},
+		{"Termios.Oflag", Field, 0, ""},
+		{"Termios.Ospeed", Field, 0, ""},
+		{"Termios.Pad_cgo_0", Field, 0, ""},
+		{"Tgkill", Func, 0, "func(tgid int, tid int, sig Signal) (err error)"},
+		{"Time", Func, 0, "func(t *Time_t) (tt Time_t, err error)"},
+		{"Time_t", Type, 0, ""},
+		{"Times", Func, 0, "func(tms *Tms) (ticks uintptr, err error)"},
+		{"Timespec", Type, 0, ""},
+		{"Timespec.Nsec", Field, 0, ""},
+		{"Timespec.Pad_cgo_0", Field, 2, ""},
+		{"Timespec.Sec", Field, 0, ""},
+		{"TimespecToNsec", Func, 0, "func(ts Timespec) int64"},
+		{"Timeval", Type, 0, ""},
+		{"Timeval.Pad_cgo_0", Field, 0, ""},
+		{"Timeval.Sec", Field, 0, ""},
+		{"Timeval.Usec", Field, 0, ""},
+		{"Timeval32", Type, 0, ""},
+		{"Timeval32.Sec", Field, 0, ""},
+		{"Timeval32.Usec", Field, 0, ""},
+		{"TimevalToNsec", Func, 0, "func(tv Timeval) int64"},
+		{"Timex", Type, 0, ""},
+		{"Timex.Calcnt", Field, 0, ""},
+		{"Timex.Constant", Field, 0, ""},
+		{"Timex.Errcnt", Field, 0, ""},
+		{"Timex.Esterror", Field, 0, ""},
+		{"Timex.Freq", Field, 0, ""},
+		{"Timex.Jitcnt", Field, 0, ""},
+		{"Timex.Jitter", Field, 0, ""},
+		{"Timex.Maxerror", Field, 0, ""},
+		{"Timex.Modes", Field, 0, ""},
+		{"Timex.Offset", Field, 0, ""},
+		{"Timex.Pad_cgo_0", Field, 0, ""},
+		{"Timex.Pad_cgo_1", Field, 0, ""},
+		{"Timex.Pad_cgo_2", Field, 0, ""},
+		{"Timex.Pad_cgo_3", Field, 0, ""},
+		{"Timex.Ppsfreq", Field, 0, ""},
+		{"Timex.Precision", Field, 0, ""},
+		{"Timex.Shift", Field, 0, ""},
+		{"Timex.Stabil", Field, 0, ""},
+		{"Timex.Status", Field, 0, ""},
+		{"Timex.Stbcnt", Field, 0, ""},
+		{"Timex.Tai", Field, 0, ""},
+		{"Timex.Tick", Field, 0, ""},
+		{"Timex.Time", Field, 0, ""},
+		{"Timex.Tolerance", Field, 0, ""},
+		{"Timezoneinformation", Type, 0, ""},
+		{"Timezoneinformation.Bias", Field, 0, ""},
+		{"Timezoneinformation.DaylightBias", Field, 0, ""},
+		{"Timezoneinformation.DaylightDate", Field, 0, ""},
+		{"Timezoneinformation.DaylightName", Field, 0, ""},
+		{"Timezoneinformation.StandardBias", Field, 0, ""},
+		{"Timezoneinformation.StandardDate", Field, 0, ""},
+		{"Timezoneinformation.StandardName", Field, 0, ""},
+		{"Tms", Type, 0, ""},
+		{"Tms.Cstime", Field, 0, ""},
+		{"Tms.Cutime", Field, 0, ""},
+		{"Tms.Stime", Field, 0, ""},
+		{"Tms.Utime", Field, 0, ""},
+		{"Token", Type, 0, ""},
+		{"TokenAccessInformation", Const, 0, ""},
+		{"TokenAuditPolicy", Const, 0, ""},
+		{"TokenDefaultDacl", Const, 0, ""},
+		{"TokenElevation", Const, 0, ""},
+		{"TokenElevationType", Const, 0, ""},
+		{"TokenGroups", Const, 0, ""},
+		{"TokenGroupsAndPrivileges", Const, 0, ""},
+		{"TokenHasRestrictions", Const, 0, ""},
+		{"TokenImpersonationLevel", Const, 0, ""},
+		{"TokenIntegrityLevel", Const, 0, ""},
+		{"TokenLinkedToken", Const, 0, ""},
+		{"TokenLogonSid", Const, 0, ""},
+		{"TokenMandatoryPolicy", Const, 0, ""},
+		{"TokenOrigin", Const, 0, ""},
+		{"TokenOwner", Const, 0, ""},
+		{"TokenPrimaryGroup", Const, 0, ""},
+		{"TokenPrivileges", Const, 0, ""},
+		{"TokenRestrictedSids", Const, 0, ""},
+		{"TokenSandBoxInert", Const, 0, ""},
+		{"TokenSessionId", Const, 0, ""},
+		{"TokenSessionReference", Const, 0, ""},
+		{"TokenSource", Const, 0, ""},
+		{"TokenStatistics", Const, 0, ""},
+		{"TokenType", Const, 0, ""},
+		{"TokenUIAccess", Const, 0, ""},
+		{"TokenUser", Const, 0, ""},
+		{"TokenVirtualizationAllowed", Const, 0, ""},
+		{"TokenVirtualizationEnabled", Const, 0, ""},
+		{"Tokenprimarygroup", Type, 0, ""},
+		{"Tokenprimarygroup.PrimaryGroup", Field, 0, ""},
+		{"Tokenuser", Type, 0, ""},
+		{"Tokenuser.User", Field, 0, ""},
+		{"TranslateAccountName", Func, 0, ""},
+		{"TranslateName", Func, 0, ""},
+		{"TransmitFile", Func, 0, ""},
+		{"TransmitFileBuffers", Type, 0, ""},
+		{"TransmitFileBuffers.Head", Field, 0, ""},
+		{"TransmitFileBuffers.HeadLength", Field, 0, ""},
+		{"TransmitFileBuffers.Tail", Field, 0, ""},
+		{"TransmitFileBuffers.TailLength", Field, 0, ""},
+		{"Truncate", Func, 0, "func(path string, length int64) (err error)"},
+		{"UNIX_PATH_MAX", Const, 12, ""},
+		{"USAGE_MATCH_TYPE_AND", Const, 0, ""},
+		{"USAGE_MATCH_TYPE_OR", Const, 0, ""},
+		{"UTF16FromString", Func, 1, ""},
+		{"UTF16PtrFromString", Func, 1, ""},
+		{"UTF16ToString", Func, 0, ""},
+		{"Ucred", Type, 0, ""},
+		{"Ucred.Gid", Field, 0, ""},
+		{"Ucred.Pid", Field, 0, ""},
+		{"Ucred.Uid", Field, 0, ""},
+		{"Umask", Func, 0, "func(mask int) (oldmask int)"},
+		{"Uname", Func, 0, "func(buf *Utsname) (err error)"},
+		{"Undelete", Func, 0, ""},
+		{"UnixCredentials", Func, 0, "func(ucred *Ucred) []byte"},
+		{"UnixRights", Func, 0, "func(fds ...int) []byte"},
+		{"Unlink", Func, 0, "func(path string) error"},
+		{"Unlinkat", Func, 0, "func(dirfd int, path string) error"},
+		{"UnmapViewOfFile", Func, 0, ""},
+		{"Unmount", Func, 0, "func(target string, flags int) (err error)"},
+		{"Unsetenv", Func, 4, "func(key string) error"},
+		{"Unshare", Func, 0, "func(flags int) (err error)"},
+		{"UserInfo10", Type, 0, ""},
+		{"UserInfo10.Comment", Field, 0, ""},
+		{"UserInfo10.FullName", Field, 0, ""},
+		{"UserInfo10.Name", Field, 0, ""},
+		{"UserInfo10.UsrComment", Field, 0, ""},
+		{"Ustat", Func, 0, "func(dev int, ubuf *Ustat_t) (err error)"},
+		{"Ustat_t", Type, 0, ""},
+		{"Ustat_t.Fname", Field, 0, ""},
+		{"Ustat_t.Fpack", Field, 0, ""},
+		{"Ustat_t.Pad_cgo_0", Field, 0, ""},
+		{"Ustat_t.Pad_cgo_1", Field, 0, ""},
+		{"Ustat_t.Tfree", Field, 0, ""},
+		{"Ustat_t.Tinode", Field, 0, ""},
+		{"Utimbuf", Type, 0, ""},
+		{"Utimbuf.Actime", Field, 0, ""},
+		{"Utimbuf.Modtime", Field, 0, ""},
+		{"Utime", Func, 0, "func(path string, buf *Utimbuf) (err error)"},
+		{"Utimes", Func, 0, "func(path string, tv []Timeval) (err error)"},
+		{"UtimesNano", Func, 1, "func(path string, ts []Timespec) (err error)"},
+		{"Utsname", Type, 0, ""},
+		{"Utsname.Domainname", Field, 0, ""},
+		{"Utsname.Machine", Field, 0, ""},
+		{"Utsname.Nodename", Field, 0, ""},
+		{"Utsname.Release", Field, 0, ""},
+		{"Utsname.Sysname", Field, 0, ""},
+		{"Utsname.Version", Field, 0, ""},
+		{"VDISCARD", Const, 0, ""},
+		{"VDSUSP", Const, 1, ""},
+		{"VEOF", Const, 0, ""},
+		{"VEOL", Const, 0, ""},
+		{"VEOL2", Const, 0, ""},
+		{"VERASE", Const, 0, ""},
+		{"VERASE2", Const, 1, ""},
+		{"VINTR", Const, 0, ""},
+		{"VKILL", Const, 0, ""},
+		{"VLNEXT", Const, 0, ""},
+		{"VMIN", Const, 0, ""},
+		{"VQUIT", Const, 0, ""},
+		{"VREPRINT", Const, 0, ""},
+		{"VSTART", Const, 0, ""},
+		{"VSTATUS", Const, 1, ""},
+		{"VSTOP", Const, 0, ""},
+		{"VSUSP", Const, 0, ""},
+		{"VSWTC", Const, 0, ""},
+		{"VT0", Const, 1, ""},
+		{"VT1", Const, 1, ""},
+		{"VTDLY", Const, 1, ""},
+		{"VTIME", Const, 0, ""},
+		{"VWERASE", Const, 0, ""},
+		{"VirtualLock", Func, 0, ""},
+		{"VirtualUnlock", Func, 0, ""},
+		{"WAIT_ABANDONED", Const, 0, ""},
+		{"WAIT_FAILED", Const, 0, ""},
+		{"WAIT_OBJECT_0", Const, 0, ""},
+		{"WAIT_TIMEOUT", Const, 0, ""},
+		{"WALL", Const, 0, ""},
+		{"WALLSIG", Const, 1, ""},
+		{"WALTSIG", Const, 1, ""},
+		{"WCLONE", Const, 0, ""},
+		{"WCONTINUED", Const, 0, ""},
+		{"WCOREFLAG", Const, 0, ""},
+		{"WEXITED", Const, 0, ""},
+		{"WLINUXCLONE", Const, 0, ""},
+		{"WNOHANG", Const, 0, ""},
+		{"WNOTHREAD", Const, 0, ""},
+		{"WNOWAIT", Const, 0, ""},
+		{"WNOZOMBIE", Const, 1, ""},
+		{"WOPTSCHECKED", Const, 1, ""},
+		{"WORDSIZE", Const, 0, ""},
+		{"WSABuf", Type, 0, ""},
+		{"WSABuf.Buf", Field, 0, ""},
+		{"WSABuf.Len", Field, 0, ""},
+		{"WSACleanup", Func, 0, ""},
+		{"WSADESCRIPTION_LEN", Const, 0, ""},
+		{"WSAData", Type, 0, ""},
+		{"WSAData.Description", Field, 0, ""},
+		{"WSAData.HighVersion", Field, 0, ""},
+		{"WSAData.MaxSockets", Field, 0, ""},
+		{"WSAData.MaxUdpDg", Field, 0, ""},
+		{"WSAData.SystemStatus", Field, 0, ""},
+		{"WSAData.VendorInfo", Field, 0, ""},
+		{"WSAData.Version", Field, 0, ""},
+		{"WSAEACCES", Const, 2, ""},
+		{"WSAECONNABORTED", Const, 9, ""},
+		{"WSAECONNRESET", Const, 3, ""},
+		{"WSAENOPROTOOPT", Const, 23, ""},
+		{"WSAEnumProtocols", Func, 2, ""},
+		{"WSAID_CONNECTEX", Var, 1, ""},
+		{"WSAIoctl", Func, 0, ""},
+		{"WSAPROTOCOL_LEN", Const, 2, ""},
+		{"WSAProtocolChain", Type, 2, ""},
+		{"WSAProtocolChain.ChainEntries", Field, 2, ""},
+		{"WSAProtocolChain.ChainLen", Field, 2, ""},
+		{"WSAProtocolInfo", Type, 2, ""},
+		{"WSAProtocolInfo.AddressFamily", Field, 2, ""},
+		{"WSAProtocolInfo.CatalogEntryId", Field, 2, ""},
+		{"WSAProtocolInfo.MaxSockAddr", Field, 2, ""},
+		{"WSAProtocolInfo.MessageSize", Field, 2, ""},
+		{"WSAProtocolInfo.MinSockAddr", Field, 2, ""},
+		{"WSAProtocolInfo.NetworkByteOrder", Field, 2, ""},
+		{"WSAProtocolInfo.Protocol", Field, 2, ""},
+		{"WSAProtocolInfo.ProtocolChain", Field, 2, ""},
+		{"WSAProtocolInfo.ProtocolMaxOffset", Field, 2, ""},
+		{"WSAProtocolInfo.ProtocolName", Field, 2, ""},
+		{"WSAProtocolInfo.ProviderFlags", Field, 2, ""},
+		{"WSAProtocolInfo.ProviderId", Field, 2, ""},
+		{"WSAProtocolInfo.ProviderReserved", Field, 2, ""},
+		{"WSAProtocolInfo.SecurityScheme", Field, 2, ""},
+		{"WSAProtocolInfo.ServiceFlags1", Field, 2, ""},
+		{"WSAProtocolInfo.ServiceFlags2", Field, 2, ""},
+		{"WSAProtocolInfo.ServiceFlags3", Field, 2, ""},
+		{"WSAProtocolInfo.ServiceFlags4", Field, 2, ""},
+		{"WSAProtocolInfo.SocketType", Field, 2, ""},
+		{"WSAProtocolInfo.Version", Field, 2, ""},
+		{"WSARecv", Func, 0, ""},
+		{"WSARecvFrom", Func, 0, ""},
+		{"WSASYS_STATUS_LEN", Const, 0, ""},
+		{"WSASend", Func, 0, ""},
+		{"WSASendTo", Func, 0, ""},
+		{"WSASendto", Func, 0, ""},
+		{"WSAStartup", Func, 0, ""},
+		{"WSTOPPED", Const, 0, ""},
+		{"WTRAPPED", Const, 1, ""},
+		{"WUNTRACED", Const, 0, ""},
+		{"Wait4", Func, 0, "func(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error)"},
+		{"WaitForSingleObject", Func, 0, ""},
+		{"WaitStatus", Type, 0, ""},
+		{"WaitStatus.ExitCode", Field, 0, ""},
+		{"Win32FileAttributeData", Type, 0, ""},
+		{"Win32FileAttributeData.CreationTime", Field, 0, ""},
+		{"Win32FileAttributeData.FileAttributes", Field, 0, ""},
+		{"Win32FileAttributeData.FileSizeHigh", Field, 0, ""},
+		{"Win32FileAttributeData.FileSizeLow", Field, 0, ""},
+		{"Win32FileAttributeData.LastAccessTime", Field, 0, ""},
+		{"Win32FileAttributeData.LastWriteTime", Field, 0, ""},
+		{"Win32finddata", Type, 0, ""},
+		{"Win32finddata.AlternateFileName", Field, 0, ""},
+		{"Win32finddata.CreationTime", Field, 0, ""},
+		{"Win32finddata.FileAttributes", Field, 0, ""},
+		{"Win32finddata.FileName", Field, 0, ""},
+		{"Win32finddata.FileSizeHigh", Field, 0, ""},
+		{"Win32finddata.FileSizeLow", Field, 0, ""},
+		{"Win32finddata.LastAccessTime", Field, 0, ""},
+		{"Win32finddata.LastWriteTime", Field, 0, ""},
+		{"Win32finddata.Reserved0", Field, 0, ""},
+		{"Win32finddata.Reserved1", Field, 0, ""},
+		{"Write", Func, 0, "func(fd int, p []byte) (n int, err error)"},
+		{"WriteConsole", Func, 1, ""},
+		{"WriteFile", Func, 0, ""},
+		{"X509_ASN_ENCODING", Const, 0, ""},
+		{"XCASE", Const, 0, ""},
+		{"XP1_CONNECTIONLESS", Const, 2, ""},
+		{"XP1_CONNECT_DATA", Const, 2, ""},
+		{"XP1_DISCONNECT_DATA", Const, 2, ""},
+		{"XP1_EXPEDITED_DATA", Const, 2, ""},
+		{"XP1_GRACEFUL_CLOSE", Const, 2, ""},
+		{"XP1_GUARANTEED_DELIVERY", Const, 2, ""},
+		{"XP1_GUARANTEED_ORDER", Const, 2, ""},
+		{"XP1_IFS_HANDLES", Const, 2, ""},
+		{"XP1_MESSAGE_ORIENTED", Const, 2, ""},
+		{"XP1_MULTIPOINT_CONTROL_PLANE", Const, 2, ""},
+		{"XP1_MULTIPOINT_DATA_PLANE", Const, 2, ""},
+		{"XP1_PARTIAL_MESSAGE", Const, 2, ""},
+		{"XP1_PSEUDO_STREAM", Const, 2, ""},
+		{"XP1_QOS_SUPPORTED", Const, 2, ""},
+		{"XP1_SAN_SUPPORT_SDP", Const, 2, ""},
+		{"XP1_SUPPORT_BROADCAST", Const, 2, ""},
+		{"XP1_SUPPORT_MULTIPOINT", Const, 2, ""},
+		{"XP1_UNI_RECV", Const, 2, ""},
+		{"XP1_UNI_SEND", Const, 2, ""},
+	},
+	"syscall/js": {
+		{"CopyBytesToGo", Func, 0, ""},
+		{"CopyBytesToJS", Func, 0, ""},
+		{"Error", Type, 0, ""},
+		{"Func", Type, 0, ""},
+		{"FuncOf", Func, 0, ""},
+		{"Global", Func, 0, ""},
+		{"Null", Func, 0, ""},
+		{"Type", Type, 0, ""},
+		{"TypeBoolean", Const, 0, ""},
+		{"TypeFunction", Const, 0, ""},
+		{"TypeNull", Const, 0, ""},
+		{"TypeNumber", Const, 0, ""},
+		{"TypeObject", Const, 0, ""},
+		{"TypeString", Const, 0, ""},
+		{"TypeSymbol", Const, 0, ""},
+		{"TypeUndefined", Const, 0, ""},
+		{"Undefined", Func, 0, ""},
+		{"Value", Type, 0, ""},
+		{"ValueError", Type, 0, ""},
+		{"ValueOf", Func, 0, ""},
+	},
+	"testing": {
+		{"(*B).Chdir", Method, 24, ""},
+		{"(*B).Cleanup", Method, 14, ""},
+		{"(*B).Context", Method, 24, ""},
+		{"(*B).Elapsed", Method, 20, ""},
+		{"(*B).Error", Method, 0, ""},
+		{"(*B).Errorf", Method, 0, ""},
+		{"(*B).Fail", Method, 0, ""},
+		{"(*B).FailNow", Method, 0, ""},
+		{"(*B).Failed", Method, 0, ""},
+		{"(*B).Fatal", Method, 0, ""},
+		{"(*B).Fatalf", Method, 0, ""},
+		{"(*B).Helper", Method, 9, ""},
+		{"(*B).Log", Method, 0, ""},
+		{"(*B).Logf", Method, 0, ""},
+		{"(*B).Loop", Method, 24, ""},
+		{"(*B).Name", Method, 8, ""},
+		{"(*B).ReportAllocs", Method, 1, ""},
+		{"(*B).ReportMetric", Method, 13, ""},
+		{"(*B).ResetTimer", Method, 0, ""},
+		{"(*B).Run", Method, 7, ""},
+		{"(*B).RunParallel", Method, 3, ""},
+		{"(*B).SetBytes", Method, 0, ""},
+		{"(*B).SetParallelism", Method, 3, ""},
+		{"(*B).Setenv", Method, 17, ""},
+		{"(*B).Skip", Method, 1, ""},
+		{"(*B).SkipNow", Method, 1, ""},
+		{"(*B).Skipf", Method, 1, ""},
+		{"(*B).Skipped", Method, 1, ""},
+		{"(*B).StartTimer", Method, 0, ""},
+		{"(*B).StopTimer", Method, 0, ""},
+		{"(*B).TempDir", Method, 15, ""},
+		{"(*F).Add", Method, 18, ""},
+		{"(*F).Chdir", Method, 24, ""},
+		{"(*F).Cleanup", Method, 18, ""},
+		{"(*F).Context", Method, 24, ""},
+		{"(*F).Error", Method, 18, ""},
+		{"(*F).Errorf", Method, 18, ""},
+		{"(*F).Fail", Method, 18, ""},
+		{"(*F).FailNow", Method, 18, ""},
+		{"(*F).Failed", Method, 18, ""},
+		{"(*F).Fatal", Method, 18, ""},
+		{"(*F).Fatalf", Method, 18, ""},
+		{"(*F).Fuzz", Method, 18, ""},
+		{"(*F).Helper", Method, 18, ""},
+		{"(*F).Log", Method, 18, ""},
+		{"(*F).Logf", Method, 18, ""},
+		{"(*F).Name", Method, 18, ""},
+		{"(*F).Setenv", Method, 18, ""},
+		{"(*F).Skip", Method, 18, ""},
+		{"(*F).SkipNow", Method, 18, ""},
+		{"(*F).Skipf", Method, 18, ""},
+		{"(*F).Skipped", Method, 18, ""},
+		{"(*F).TempDir", Method, 18, ""},
+		{"(*M).Run", Method, 4, ""},
+		{"(*PB).Next", Method, 3, ""},
+		{"(*T).Chdir", Method, 24, ""},
+		{"(*T).Cleanup", Method, 14, ""},
+		{"(*T).Context", Method, 24, ""},
+		{"(*T).Deadline", Method, 15, ""},
+		{"(*T).Error", Method, 0, ""},
+		{"(*T).Errorf", Method, 0, ""},
+		{"(*T).Fail", Method, 0, ""},
+		{"(*T).FailNow", Method, 0, ""},
+		{"(*T).Failed", Method, 0, ""},
+		{"(*T).Fatal", Method, 0, ""},
+		{"(*T).Fatalf", Method, 0, ""},
+		{"(*T).Helper", Method, 9, ""},
+		{"(*T).Log", Method, 0, ""},
+		{"(*T).Logf", Method, 0, ""},
+		{"(*T).Name", Method, 8, ""},
+		{"(*T).Parallel", Method, 0, ""},
+		{"(*T).Run", Method, 7, ""},
+		{"(*T).Setenv", Method, 17, ""},
+		{"(*T).Skip", Method, 1, ""},
+		{"(*T).SkipNow", Method, 1, ""},
+		{"(*T).Skipf", Method, 1, ""},
+		{"(*T).Skipped", Method, 1, ""},
+		{"(*T).TempDir", Method, 15, ""},
+		{"(BenchmarkResult).AllocedBytesPerOp", Method, 1, ""},
+		{"(BenchmarkResult).AllocsPerOp", Method, 1, ""},
+		{"(BenchmarkResult).MemString", Method, 1, ""},
+		{"(BenchmarkResult).NsPerOp", Method, 0, ""},
+		{"(BenchmarkResult).String", Method, 0, ""},
+		{"AllocsPerRun", Func, 1, "func(runs int, f func()) (avg float64)"},
+		{"B", Type, 0, ""},
+		{"B.N", Field, 0, ""},
+		{"Benchmark", Func, 0, "func(f func(b *B)) BenchmarkResult"},
+		{"BenchmarkResult", Type, 0, ""},
+		{"BenchmarkResult.Bytes", Field, 0, ""},
+		{"BenchmarkResult.Extra", Field, 13, ""},
+		{"BenchmarkResult.MemAllocs", Field, 1, ""},
+		{"BenchmarkResult.MemBytes", Field, 1, ""},
+		{"BenchmarkResult.N", Field, 0, ""},
+		{"BenchmarkResult.T", Field, 0, ""},
+		{"Cover", Type, 2, ""},
+		{"Cover.Blocks", Field, 2, ""},
+		{"Cover.Counters", Field, 2, ""},
+		{"Cover.CoveredPackages", Field, 2, ""},
+		{"Cover.Mode", Field, 2, ""},
+		{"CoverBlock", Type, 2, ""},
+		{"CoverBlock.Col0", Field, 2, ""},
+		{"CoverBlock.Col1", Field, 2, ""},
+		{"CoverBlock.Line0", Field, 2, ""},
+		{"CoverBlock.Line1", Field, 2, ""},
+		{"CoverBlock.Stmts", Field, 2, ""},
+		{"CoverMode", Func, 8, "func() string"},
+		{"Coverage", Func, 4, "func() float64"},
+		{"F", Type, 18, ""},
+		{"Init", Func, 13, "func()"},
+		{"InternalBenchmark", Type, 0, ""},
+		{"InternalBenchmark.F", Field, 0, ""},
+		{"InternalBenchmark.Name", Field, 0, ""},
+		{"InternalExample", Type, 0, ""},
+		{"InternalExample.F", Field, 0, ""},
+		{"InternalExample.Name", Field, 0, ""},
+		{"InternalExample.Output", Field, 0, ""},
+		{"InternalExample.Unordered", Field, 7, ""},
+		{"InternalFuzzTarget", Type, 18, ""},
+		{"InternalFuzzTarget.Fn", Field, 18, ""},
+		{"InternalFuzzTarget.Name", Field, 18, ""},
+		{"InternalTest", Type, 0, ""},
+		{"InternalTest.F", Field, 0, ""},
+		{"InternalTest.Name", Field, 0, ""},
+		{"M", Type, 4, ""},
+		{"Main", Func, 0, "func(matchString func(pat string, str string) (bool, error), tests []InternalTest, benchmarks []InternalBenchmark, examples []InternalExample)"},
+		{"MainStart", Func, 4, "func(deps testDeps, tests []InternalTest, benchmarks []InternalBenchmark, fuzzTargets []InternalFuzzTarget, examples []InternalExample) *M"},
+		{"PB", Type, 3, ""},
+		{"RegisterCover", Func, 2, "func(c Cover)"},
+		{"RunBenchmarks", Func, 0, "func(matchString func(pat string, str string) (bool, error), benchmarks []InternalBenchmark)"},
+		{"RunExamples", Func, 0, "func(matchString func(pat string, str string) (bool, error), examples []InternalExample) (ok bool)"},
+		{"RunTests", Func, 0, "func(matchString func(pat string, str string) (bool, error), tests []InternalTest) (ok bool)"},
+		{"Short", Func, 0, "func() bool"},
+		{"T", Type, 0, ""},
+		{"TB", Type, 2, ""},
+		{"Testing", Func, 21, "func() bool"},
+		{"Verbose", Func, 1, "func() bool"},
+	},
+	"testing/fstest": {
+		{"(MapFS).Glob", Method, 16, ""},
+		{"(MapFS).Lstat", Method, 25, ""},
+		{"(MapFS).Open", Method, 16, ""},
+		{"(MapFS).ReadDir", Method, 16, ""},
+		{"(MapFS).ReadFile", Method, 16, ""},
+		{"(MapFS).ReadLink", Method, 25, ""},
+		{"(MapFS).Stat", Method, 16, ""},
+		{"(MapFS).Sub", Method, 16, ""},
+		{"MapFS", Type, 16, ""},
+		{"MapFile", Type, 16, ""},
+		{"MapFile.Data", Field, 16, ""},
+		{"MapFile.ModTime", Field, 16, ""},
+		{"MapFile.Mode", Field, 16, ""},
+		{"MapFile.Sys", Field, 16, ""},
+		{"TestFS", Func, 16, "func(fsys fs.FS, expected ...string) error"},
+	},
+	"testing/iotest": {
+		{"DataErrReader", Func, 0, "func(r io.Reader) io.Reader"},
+		{"ErrReader", Func, 16, "func(err error) io.Reader"},
+		{"ErrTimeout", Var, 0, ""},
+		{"HalfReader", Func, 0, "func(r io.Reader) io.Reader"},
+		{"NewReadLogger", Func, 0, "func(prefix string, r io.Reader) io.Reader"},
+		{"NewWriteLogger", Func, 0, "func(prefix string, w io.Writer) io.Writer"},
+		{"OneByteReader", Func, 0, "func(r io.Reader) io.Reader"},
+		{"TestReader", Func, 16, "func(r io.Reader, content []byte) error"},
+		{"TimeoutReader", Func, 0, "func(r io.Reader) io.Reader"},
+		{"TruncateWriter", Func, 0, "func(w io.Writer, n int64) io.Writer"},
+	},
+	"testing/quick": {
+		{"(*CheckEqualError).Error", Method, 0, ""},
+		{"(*CheckError).Error", Method, 0, ""},
+		{"(SetupError).Error", Method, 0, ""},
+		{"Check", Func, 0, "func(f any, config *Config) error"},
+		{"CheckEqual", Func, 0, "func(f any, g any, config *Config) error"},
+		{"CheckEqualError", Type, 0, ""},
+		{"CheckEqualError.CheckError", Field, 0, ""},
+		{"CheckEqualError.Out1", Field, 0, ""},
+		{"CheckEqualError.Out2", Field, 0, ""},
+		{"CheckError", Type, 0, ""},
+		{"CheckError.Count", Field, 0, ""},
+		{"CheckError.In", Field, 0, ""},
+		{"Config", Type, 0, ""},
+		{"Config.MaxCount", Field, 0, ""},
+		{"Config.MaxCountScale", Field, 0, ""},
+		{"Config.Rand", Field, 0, ""},
+		{"Config.Values", Field, 0, ""},
+		{"Generator", Type, 0, ""},
+		{"SetupError", Type, 0, ""},
+		{"Value", Func, 0, "func(t reflect.Type, rand *rand.Rand) (value reflect.Value, ok bool)"},
+	},
+	"testing/slogtest": {
+		{"Run", Func, 22, "func(t *testing.T, newHandler func(*testing.T) slog.Handler, result func(*testing.T) map[string]any)"},
+		{"TestHandler", Func, 21, "func(h slog.Handler, results func() []map[string]any) error"},
+	},
+	"text/scanner": {
+		{"(*Position).IsValid", Method, 0, ""},
+		{"(*Scanner).Init", Method, 0, ""},
+		{"(*Scanner).IsValid", Method, 0, ""},
+		{"(*Scanner).Next", Method, 0, ""},
+		{"(*Scanner).Peek", Method, 0, ""},
+		{"(*Scanner).Pos", Method, 0, ""},
+		{"(*Scanner).Scan", Method, 0, ""},
+		{"(*Scanner).TokenText", Method, 0, ""},
+		{"(Position).String", Method, 0, ""},
+		{"(Scanner).String", Method, 0, ""},
+		{"Char", Const, 0, ""},
+		{"Comment", Const, 0, ""},
+		{"EOF", Const, 0, ""},
+		{"Float", Const, 0, ""},
+		{"GoTokens", Const, 0, ""},
+		{"GoWhitespace", Const, 0, ""},
+		{"Ident", Const, 0, ""},
+		{"Int", Const, 0, ""},
+		{"Position", Type, 0, ""},
+		{"Position.Column", Field, 0, ""},
+		{"Position.Filename", Field, 0, ""},
+		{"Position.Line", Field, 0, ""},
+		{"Position.Offset", Field, 0, ""},
+		{"RawString", Const, 0, ""},
+		{"ScanChars", Const, 0, ""},
+		{"ScanComments", Const, 0, ""},
+		{"ScanFloats", Const, 0, ""},
+		{"ScanIdents", Const, 0, ""},
+		{"ScanInts", Const, 0, ""},
+		{"ScanRawStrings", Const, 0, ""},
+		{"ScanStrings", Const, 0, ""},
+		{"Scanner", Type, 0, ""},
+		{"Scanner.Error", Field, 0, ""},
+		{"Scanner.ErrorCount", Field, 0, ""},
+		{"Scanner.IsIdentRune", Field, 4, ""},
+		{"Scanner.Mode", Field, 0, ""},
+		{"Scanner.Position", Field, 0, ""},
+		{"Scanner.Whitespace", Field, 0, ""},
+		{"SkipComments", Const, 0, ""},
+		{"String", Const, 0, ""},
+		{"TokenString", Func, 0, "func(tok rune) string"},
+	},
+	"text/tabwriter": {
+		{"(*Writer).Flush", Method, 0, ""},
+		{"(*Writer).Init", Method, 0, ""},
+		{"(*Writer).Write", Method, 0, ""},
+		{"AlignRight", Const, 0, ""},
+		{"Debug", Const, 0, ""},
+		{"DiscardEmptyColumns", Const, 0, ""},
+		{"Escape", Const, 0, ""},
+		{"FilterHTML", Const, 0, ""},
+		{"NewWriter", Func, 0, "func(output io.Writer, minwidth int, tabwidth int, padding int, padchar byte, flags uint) *Writer"},
+		{"StripEscape", Const, 0, ""},
+		{"TabIndent", Const, 0, ""},
+		{"Writer", Type, 0, ""},
+	},
+	"text/template": {
+		{"(*Template).AddParseTree", Method, 0, ""},
+		{"(*Template).Clone", Method, 0, ""},
+		{"(*Template).DefinedTemplates", Method, 5, ""},
+		{"(*Template).Delims", Method, 0, ""},
+		{"(*Template).Execute", Method, 0, ""},
+		{"(*Template).ExecuteTemplate", Method, 0, ""},
+		{"(*Template).Funcs", Method, 0, ""},
+		{"(*Template).Lookup", Method, 0, ""},
+		{"(*Template).Name", Method, 0, ""},
+		{"(*Template).New", Method, 0, ""},
+		{"(*Template).Option", Method, 5, ""},
+		{"(*Template).Parse", Method, 0, ""},
+		{"(*Template).ParseFS", Method, 16, ""},
+		{"(*Template).ParseFiles", Method, 0, ""},
+		{"(*Template).ParseGlob", Method, 0, ""},
+		{"(*Template).Templates", Method, 0, ""},
+		{"(ExecError).Error", Method, 6, ""},
+		{"(ExecError).Unwrap", Method, 13, ""},
+		{"(Template).Copy", Method, 2, ""},
+		{"(Template).ErrorContext", Method, 1, ""},
+		{"ExecError", Type, 6, ""},
+		{"ExecError.Err", Field, 6, ""},
+		{"ExecError.Name", Field, 6, ""},
+		{"FuncMap", Type, 0, ""},
+		{"HTMLEscape", Func, 0, "func(w io.Writer, b []byte)"},
+		{"HTMLEscapeString", Func, 0, "func(s string) string"},
+		{"HTMLEscaper", Func, 0, "func(args ...any) string"},
+		{"IsTrue", Func, 6, "func(val any) (truth bool, ok bool)"},
+		{"JSEscape", Func, 0, "func(w io.Writer, b []byte)"},
+		{"JSEscapeString", Func, 0, "func(s string) string"},
+		{"JSEscaper", Func, 0, "func(args ...any) string"},
+		{"Must", Func, 0, "func(t *Template, err error) *Template"},
+		{"New", Func, 0, "func(name string) *Template"},
+		{"ParseFS", Func, 16, "func(fsys fs.FS, patterns ...string) (*Template, error)"},
+		{"ParseFiles", Func, 0, "func(filenames ...string) (*Template, error)"},
+		{"ParseGlob", Func, 0, "func(pattern string) (*Template, error)"},
+		{"Template", Type, 0, ""},
+		{"Template.Tree", Field, 0, ""},
+		{"URLQueryEscaper", Func, 0, "func(args ...any) string"},
+	},
+	"text/template/parse": {
+		{"(*ActionNode).Copy", Method, 0, ""},
+		{"(*ActionNode).String", Method, 0, ""},
+		{"(*BoolNode).Copy", Method, 0, ""},
+		{"(*BoolNode).String", Method, 0, ""},
+		{"(*BranchNode).Copy", Method, 4, ""},
+		{"(*BranchNode).String", Method, 0, ""},
+		{"(*BreakNode).Copy", Method, 18, ""},
+		{"(*BreakNode).String", Method, 18, ""},
+		{"(*ChainNode).Add", Method, 1, ""},
+		{"(*ChainNode).Copy", Method, 1, ""},
+		{"(*ChainNode).String", Method, 1, ""},
+		{"(*CommandNode).Copy", Method, 0, ""},
+		{"(*CommandNode).String", Method, 0, ""},
+		{"(*CommentNode).Copy", Method, 16, ""},
+		{"(*CommentNode).String", Method, 16, ""},
+		{"(*ContinueNode).Copy", Method, 18, ""},
+		{"(*ContinueNode).String", Method, 18, ""},
+		{"(*DotNode).Copy", Method, 0, ""},
+		{"(*DotNode).String", Method, 0, ""},
+		{"(*DotNode).Type", Method, 0, ""},
+		{"(*FieldNode).Copy", Method, 0, ""},
+		{"(*FieldNode).String", Method, 0, ""},
+		{"(*IdentifierNode).Copy", Method, 0, ""},
+		{"(*IdentifierNode).SetPos", Method, 1, ""},
+		{"(*IdentifierNode).SetTree", Method, 4, ""},
+		{"(*IdentifierNode).String", Method, 0, ""},
+		{"(*IfNode).Copy", Method, 0, ""},
+		{"(*IfNode).String", Method, 0, ""},
+		{"(*ListNode).Copy", Method, 0, ""},
+		{"(*ListNode).CopyList", Method, 0, ""},
+		{"(*ListNode).String", Method, 0, ""},
+		{"(*NilNode).Copy", Method, 1, ""},
+		{"(*NilNode).String", Method, 1, ""},
+		{"(*NilNode).Type", Method, 1, ""},
+		{"(*NumberNode).Copy", Method, 0, ""},
+		{"(*NumberNode).String", Method, 0, ""},
+		{"(*PipeNode).Copy", Method, 0, ""},
+		{"(*PipeNode).CopyPipe", Method, 0, ""},
+		{"(*PipeNode).String", Method, 0, ""},
+		{"(*RangeNode).Copy", Method, 0, ""},
+		{"(*RangeNode).String", Method, 0, ""},
+		{"(*StringNode).Copy", Method, 0, ""},
+		{"(*StringNode).String", Method, 0, ""},
+		{"(*TemplateNode).Copy", Method, 0, ""},
+		{"(*TemplateNode).String", Method, 0, ""},
+		{"(*TextNode).Copy", Method, 0, ""},
+		{"(*TextNode).String", Method, 0, ""},
+		{"(*Tree).Copy", Method, 2, ""},
+		{"(*Tree).ErrorContext", Method, 1, ""},
+		{"(*Tree).Parse", Method, 0, ""},
+		{"(*VariableNode).Copy", Method, 0, ""},
+		{"(*VariableNode).String", Method, 0, ""},
+		{"(*WithNode).Copy", Method, 0, ""},
+		{"(*WithNode).String", Method, 0, ""},
+		{"(ActionNode).Position", Method, 1, ""},
+		{"(ActionNode).Type", Method, 0, ""},
+		{"(BoolNode).Position", Method, 1, ""},
+		{"(BoolNode).Type", Method, 0, ""},
+		{"(BranchNode).Position", Method, 1, ""},
+		{"(BranchNode).Type", Method, 0, ""},
+		{"(BreakNode).Position", Method, 18, ""},
+		{"(BreakNode).Type", Method, 18, ""},
+		{"(ChainNode).Position", Method, 1, ""},
+		{"(ChainNode).Type", Method, 1, ""},
+		{"(CommandNode).Position", Method, 1, ""},
+		{"(CommandNode).Type", Method, 0, ""},
+		{"(CommentNode).Position", Method, 16, ""},
+		{"(CommentNode).Type", Method, 16, ""},
+		{"(ContinueNode).Position", Method, 18, ""},
+		{"(ContinueNode).Type", Method, 18, ""},
+		{"(DotNode).Position", Method, 1, ""},
+		{"(FieldNode).Position", Method, 1, ""},
+		{"(FieldNode).Type", Method, 0, ""},
+		{"(IdentifierNode).Position", Method, 1, ""},
+		{"(IdentifierNode).Type", Method, 0, ""},
+		{"(IfNode).Position", Method, 1, ""},
+		{"(IfNode).Type", Method, 0, ""},
+		{"(ListNode).Position", Method, 1, ""},
+		{"(ListNode).Type", Method, 0, ""},
+		{"(NilNode).Position", Method, 1, ""},
+		{"(NodeType).Type", Method, 0, ""},
+		{"(NumberNode).Position", Method, 1, ""},
+		{"(NumberNode).Type", Method, 0, ""},
+		{"(PipeNode).Position", Method, 1, ""},
+		{"(PipeNode).Type", Method, 0, ""},
+		{"(Pos).Position", Method, 1, ""},
+		{"(RangeNode).Position", Method, 1, ""},
+		{"(RangeNode).Type", Method, 0, ""},
+		{"(StringNode).Position", Method, 1, ""},
+		{"(StringNode).Type", Method, 0, ""},
+		{"(TemplateNode).Position", Method, 1, ""},
+		{"(TemplateNode).Type", Method, 0, ""},
+		{"(TextNode).Position", Method, 1, ""},
+		{"(TextNode).Type", Method, 0, ""},
+		{"(VariableNode).Position", Method, 1, ""},
+		{"(VariableNode).Type", Method, 0, ""},
+		{"(WithNode).Position", Method, 1, ""},
+		{"(WithNode).Type", Method, 0, ""},
+		{"ActionNode", Type, 0, ""},
+		{"ActionNode.Line", Field, 0, ""},
+		{"ActionNode.NodeType", Field, 0, ""},
+		{"ActionNode.Pipe", Field, 0, ""},
+		{"ActionNode.Pos", Field, 1, ""},
+		{"BoolNode", Type, 0, ""},
+		{"BoolNode.NodeType", Field, 0, ""},
+		{"BoolNode.Pos", Field, 1, ""},
+		{"BoolNode.True", Field, 0, ""},
+		{"BranchNode", Type, 0, ""},
+		{"BranchNode.ElseList", Field, 0, ""},
+		{"BranchNode.Line", Field, 0, ""},
+		{"BranchNode.List", Field, 0, ""},
+		{"BranchNode.NodeType", Field, 0, ""},
+		{"BranchNode.Pipe", Field, 0, ""},
+		{"BranchNode.Pos", Field, 1, ""},
+		{"BreakNode", Type, 18, ""},
+		{"BreakNode.Line", Field, 18, ""},
+		{"BreakNode.NodeType", Field, 18, ""},
+		{"BreakNode.Pos", Field, 18, ""},
+		{"ChainNode", Type, 1, ""},
+		{"ChainNode.Field", Field, 1, ""},
+		{"ChainNode.Node", Field, 1, ""},
+		{"ChainNode.NodeType", Field, 1, ""},
+		{"ChainNode.Pos", Field, 1, ""},
+		{"CommandNode", Type, 0, ""},
+		{"CommandNode.Args", Field, 0, ""},
+		{"CommandNode.NodeType", Field, 0, ""},
+		{"CommandNode.Pos", Field, 1, ""},
+		{"CommentNode", Type, 16, ""},
+		{"CommentNode.NodeType", Field, 16, ""},
+		{"CommentNode.Pos", Field, 16, ""},
+		{"CommentNode.Text", Field, 16, ""},
+		{"ContinueNode", Type, 18, ""},
+		{"ContinueNode.Line", Field, 18, ""},
+		{"ContinueNode.NodeType", Field, 18, ""},
+		{"ContinueNode.Pos", Field, 18, ""},
+		{"DotNode", Type, 0, ""},
+		{"DotNode.NodeType", Field, 4, ""},
+		{"DotNode.Pos", Field, 1, ""},
+		{"FieldNode", Type, 0, ""},
+		{"FieldNode.Ident", Field, 0, ""},
+		{"FieldNode.NodeType", Field, 0, ""},
+		{"FieldNode.Pos", Field, 1, ""},
+		{"IdentifierNode", Type, 0, ""},
+		{"IdentifierNode.Ident", Field, 0, ""},
+		{"IdentifierNode.NodeType", Field, 0, ""},
+		{"IdentifierNode.Pos", Field, 1, ""},
+		{"IfNode", Type, 0, ""},
+		{"IfNode.BranchNode", Field, 0, ""},
+		{"IsEmptyTree", Func, 0, "func(n Node) bool"},
+		{"ListNode", Type, 0, ""},
+		{"ListNode.NodeType", Field, 0, ""},
+		{"ListNode.Nodes", Field, 0, ""},
+		{"ListNode.Pos", Field, 1, ""},
+		{"Mode", Type, 16, ""},
+		{"New", Func, 0, "func(name string, funcs ...map[string]any) *Tree"},
+		{"NewIdentifier", Func, 0, "func(ident string) *IdentifierNode"},
+		{"NilNode", Type, 1, ""},
+		{"NilNode.NodeType", Field, 4, ""},
+		{"NilNode.Pos", Field, 1, ""},
+		{"Node", Type, 0, ""},
+		{"NodeAction", Const, 0, ""},
+		{"NodeBool", Const, 0, ""},
+		{"NodeBreak", Const, 18, ""},
+		{"NodeChain", Const, 1, ""},
+		{"NodeCommand", Const, 0, ""},
+		{"NodeComment", Const, 16, ""},
+		{"NodeContinue", Const, 18, ""},
+		{"NodeDot", Const, 0, ""},
+		{"NodeField", Const, 0, ""},
+		{"NodeIdentifier", Const, 0, ""},
+		{"NodeIf", Const, 0, ""},
+		{"NodeList", Const, 0, ""},
+		{"NodeNil", Const, 1, ""},
+		{"NodeNumber", Const, 0, ""},
+		{"NodePipe", Const, 0, ""},
+		{"NodeRange", Const, 0, ""},
+		{"NodeString", Const, 0, ""},
+		{"NodeTemplate", Const, 0, ""},
+		{"NodeText", Const, 0, ""},
+		{"NodeType", Type, 0, ""},
+		{"NodeVariable", Const, 0, ""},
+		{"NodeWith", Const, 0, ""},
+		{"NumberNode", Type, 0, ""},
+		{"NumberNode.Complex128", Field, 0, ""},
+		{"NumberNode.Float64", Field, 0, ""},
+		{"NumberNode.Int64", Field, 0, ""},
+		{"NumberNode.IsComplex", Field, 0, ""},
+		{"NumberNode.IsFloat", Field, 0, ""},
+		{"NumberNode.IsInt", Field, 0, ""},
+		{"NumberNode.IsUint", Field, 0, ""},
+		{"NumberNode.NodeType", Field, 0, ""},
+		{"NumberNode.Pos", Field, 1, ""},
+		{"NumberNode.Text", Field, 0, ""},
+		{"NumberNode.Uint64", Field, 0, ""},
+		{"Parse", Func, 0, "func(name string, text string, leftDelim string, rightDelim string, funcs ...map[string]any) (map[string]*Tree, error)"},
+		{"ParseComments", Const, 16, ""},
+		{"PipeNode", Type, 0, ""},
+		{"PipeNode.Cmds", Field, 0, ""},
+		{"PipeNode.Decl", Field, 0, ""},
+		{"PipeNode.IsAssign", Field, 11, ""},
+		{"PipeNode.Line", Field, 0, ""},
+		{"PipeNode.NodeType", Field, 0, ""},
+		{"PipeNode.Pos", Field, 1, ""},
+		{"Pos", Type, 1, ""},
+		{"RangeNode", Type, 0, ""},
+		{"RangeNode.BranchNode", Field, 0, ""},
+		{"SkipFuncCheck", Const, 17, ""},
+		{"StringNode", Type, 0, ""},
+		{"StringNode.NodeType", Field, 0, ""},
+		{"StringNode.Pos", Field, 1, ""},
+		{"StringNode.Quoted", Field, 0, ""},
+		{"StringNode.Text", Field, 0, ""},
+		{"TemplateNode", Type, 0, ""},
+		{"TemplateNode.Line", Field, 0, ""},
+		{"TemplateNode.Name", Field, 0, ""},
+		{"TemplateNode.NodeType", Field, 0, ""},
+		{"TemplateNode.Pipe", Field, 0, ""},
+		{"TemplateNode.Pos", Field, 1, ""},
+		{"TextNode", Type, 0, ""},
+		{"TextNode.NodeType", Field, 0, ""},
+		{"TextNode.Pos", Field, 1, ""},
+		{"TextNode.Text", Field, 0, ""},
+		{"Tree", Type, 0, ""},
+		{"Tree.Mode", Field, 16, ""},
+		{"Tree.Name", Field, 0, ""},
+		{"Tree.ParseName", Field, 1, ""},
+		{"Tree.Root", Field, 0, ""},
+		{"VariableNode", Type, 0, ""},
+		{"VariableNode.Ident", Field, 0, ""},
+		{"VariableNode.NodeType", Field, 0, ""},
+		{"VariableNode.Pos", Field, 1, ""},
+		{"WithNode", Type, 0, ""},
+		{"WithNode.BranchNode", Field, 0, ""},
+	},
+	"time": {
+		{"(*Location).String", Method, 0, ""},
+		{"(*ParseError).Error", Method, 0, ""},
+		{"(*Ticker).Reset", Method, 15, ""},
+		{"(*Ticker).Stop", Method, 0, ""},
+		{"(*Time).GobDecode", Method, 0, ""},
+		{"(*Time).UnmarshalBinary", Method, 2, ""},
+		{"(*Time).UnmarshalJSON", Method, 0, ""},
+		{"(*Time).UnmarshalText", Method, 2, ""},
+		{"(*Timer).Reset", Method, 1, ""},
+		{"(*Timer).Stop", Method, 0, ""},
+		{"(Duration).Abs", Method, 19, ""},
+		{"(Duration).Hours", Method, 0, ""},
+		{"(Duration).Microseconds", Method, 13, ""},
+		{"(Duration).Milliseconds", Method, 13, ""},
+		{"(Duration).Minutes", Method, 0, ""},
+		{"(Duration).Nanoseconds", Method, 0, ""},
+		{"(Duration).Round", Method, 9, ""},
+		{"(Duration).Seconds", Method, 0, ""},
+		{"(Duration).String", Method, 0, ""},
+		{"(Duration).Truncate", Method, 9, ""},
+		{"(Month).String", Method, 0, ""},
+		{"(Time).Add", Method, 0, ""},
+		{"(Time).AddDate", Method, 0, ""},
+		{"(Time).After", Method, 0, ""},
+		{"(Time).AppendBinary", Method, 24, ""},
+		{"(Time).AppendFormat", Method, 5, ""},
+		{"(Time).AppendText", Method, 24, ""},
+		{"(Time).Before", Method, 0, ""},
+		{"(Time).Clock", Method, 0, ""},
+		{"(Time).Compare", Method, 20, ""},
+		{"(Time).Date", Method, 0, ""},
+		{"(Time).Day", Method, 0, ""},
+		{"(Time).Equal", Method, 0, ""},
+		{"(Time).Format", Method, 0, ""},
+		{"(Time).GoString", Method, 17, ""},
+		{"(Time).GobEncode", Method, 0, ""},
+		{"(Time).Hour", Method, 0, ""},
+		{"(Time).ISOWeek", Method, 0, ""},
+		{"(Time).In", Method, 0, ""},
+		{"(Time).IsDST", Method, 17, ""},
+		{"(Time).IsZero", Method, 0, ""},
+		{"(Time).Local", Method, 0, ""},
+		{"(Time).Location", Method, 0, ""},
+		{"(Time).MarshalBinary", Method, 2, ""},
+		{"(Time).MarshalJSON", Method, 0, ""},
+		{"(Time).MarshalText", Method, 2, ""},
+		{"(Time).Minute", Method, 0, ""},
+		{"(Time).Month", Method, 0, ""},
+		{"(Time).Nanosecond", Method, 0, ""},
+		{"(Time).Round", Method, 1, ""},
+		{"(Time).Second", Method, 0, ""},
+		{"(Time).String", Method, 0, ""},
+		{"(Time).Sub", Method, 0, ""},
+		{"(Time).Truncate", Method, 1, ""},
+		{"(Time).UTC", Method, 0, ""},
+		{"(Time).Unix", Method, 0, ""},
+		{"(Time).UnixMicro", Method, 17, ""},
+		{"(Time).UnixMilli", Method, 17, ""},
+		{"(Time).UnixNano", Method, 0, ""},
+		{"(Time).Weekday", Method, 0, ""},
+		{"(Time).Year", Method, 0, ""},
+		{"(Time).YearDay", Method, 1, ""},
+		{"(Time).Zone", Method, 0, ""},
+		{"(Time).ZoneBounds", Method, 19, ""},
+		{"(Weekday).String", Method, 0, ""},
+		{"ANSIC", Const, 0, ""},
+		{"After", Func, 0, "func(d Duration) <-chan Time"},
+		{"AfterFunc", Func, 0, "func(d Duration, f func()) *Timer"},
+		{"April", Const, 0, ""},
+		{"August", Const, 0, ""},
+		{"Date", Func, 0, "func(year int, month Month, day int, hour int, min int, sec int, nsec int, loc *Location) Time"},
+		{"DateOnly", Const, 20, ""},
+		{"DateTime", Const, 20, ""},
+		{"December", Const, 0, ""},
+		{"Duration", Type, 0, ""},
+		{"February", Const, 0, ""},
+		{"FixedZone", Func, 0, "func(name string, offset int) *Location"},
+		{"Friday", Const, 0, ""},
+		{"Hour", Const, 0, ""},
+		{"January", Const, 0, ""},
+		{"July", Const, 0, ""},
+		{"June", Const, 0, ""},
+		{"Kitchen", Const, 0, ""},
+		{"Layout", Const, 17, ""},
+		{"LoadLocation", Func, 0, "func(name string) (*Location, error)"},
+		{"LoadLocationFromTZData", Func, 10, "func(name string, data []byte) (*Location, error)"},
+		{"Local", Var, 0, ""},
+		{"Location", Type, 0, ""},
+		{"March", Const, 0, ""},
+		{"May", Const, 0, ""},
+		{"Microsecond", Const, 0, ""},
+		{"Millisecond", Const, 0, ""},
+		{"Minute", Const, 0, ""},
+		{"Monday", Const, 0, ""},
+		{"Month", Type, 0, ""},
+		{"Nanosecond", Const, 0, ""},
+		{"NewTicker", Func, 0, "func(d Duration) *Ticker"},
+		{"NewTimer", Func, 0, "func(d Duration) *Timer"},
+		{"November", Const, 0, ""},
+		{"Now", Func, 0, "func() Time"},
+		{"October", Const, 0, ""},
+		{"Parse", Func, 0, "func(layout string, value string) (Time, error)"},
+		{"ParseDuration", Func, 0, "func(s string) (Duration, error)"},
+		{"ParseError", Type, 0, ""},
+		{"ParseError.Layout", Field, 0, ""},
+		{"ParseError.LayoutElem", Field, 0, ""},
+		{"ParseError.Message", Field, 0, ""},
+		{"ParseError.Value", Field, 0, ""},
+		{"ParseError.ValueElem", Field, 0, ""},
+		{"ParseInLocation", Func, 1, "func(layout string, value string, loc *Location) (Time, error)"},
+		{"RFC1123", Const, 0, ""},
+		{"RFC1123Z", Const, 0, ""},
+		{"RFC3339", Const, 0, ""},
+		{"RFC3339Nano", Const, 0, ""},
+		{"RFC822", Const, 0, ""},
+		{"RFC822Z", Const, 0, ""},
+		{"RFC850", Const, 0, ""},
+		{"RubyDate", Const, 0, ""},
+		{"Saturday", Const, 0, ""},
+		{"Second", Const, 0, ""},
+		{"September", Const, 0, ""},
+		{"Since", Func, 0, "func(t Time) Duration"},
+		{"Sleep", Func, 0, "func(d Duration)"},
+		{"Stamp", Const, 0, ""},
+		{"StampMicro", Const, 0, ""},
+		{"StampMilli", Const, 0, ""},
+		{"StampNano", Const, 0, ""},
+		{"Sunday", Const, 0, ""},
+		{"Thursday", Const, 0, ""},
+		{"Tick", Func, 0, "func(d Duration) <-chan Time"},
+		{"Ticker", Type, 0, ""},
+		{"Ticker.C", Field, 0, ""},
+		{"Time", Type, 0, ""},
+		{"TimeOnly", Const, 20, ""},
+		{"Timer", Type, 0, ""},
+		{"Timer.C", Field, 0, ""},
+		{"Tuesday", Const, 0, ""},
+		{"UTC", Var, 0, ""},
+		{"Unix", Func, 0, "func(sec int64, nsec int64) Time"},
+		{"UnixDate", Const, 0, ""},
+		{"UnixMicro", Func, 17, "func(usec int64) Time"},
+		{"UnixMilli", Func, 17, "func(msec int64) Time"},
+		{"Until", Func, 8, "func(t Time) Duration"},
+		{"Wednesday", Const, 0, ""},
+		{"Weekday", Type, 0, ""},
+	},
+	"unicode": {
+		{"(SpecialCase).ToLower", Method, 0, ""},
+		{"(SpecialCase).ToTitle", Method, 0, ""},
+		{"(SpecialCase).ToUpper", Method, 0, ""},
+		{"ASCII_Hex_Digit", Var, 0, ""},
+		{"Adlam", Var, 7, ""},
+		{"Ahom", Var, 5, ""},
+		{"Anatolian_Hieroglyphs", Var, 5, ""},
+		{"Arabic", Var, 0, ""},
+		{"Armenian", Var, 0, ""},
+		{"Avestan", Var, 0, ""},
+		{"AzeriCase", Var, 0, ""},
+		{"Balinese", Var, 0, ""},
+		{"Bamum", Var, 0, ""},
+		{"Bassa_Vah", Var, 4, ""},
+		{"Batak", Var, 0, ""},
+		{"Bengali", Var, 0, ""},
+		{"Bhaiksuki", Var, 7, ""},
+		{"Bidi_Control", Var, 0, ""},
+		{"Bopomofo", Var, 0, ""},
+		{"Brahmi", Var, 0, ""},
+		{"Braille", Var, 0, ""},
+		{"Buginese", Var, 0, ""},
+		{"Buhid", Var, 0, ""},
+		{"C", Var, 0, ""},
+		{"Canadian_Aboriginal", Var, 0, ""},
+		{"Carian", Var, 0, ""},
+		{"CaseRange", Type, 0, ""},
+		{"CaseRange.Delta", Field, 0, ""},
+		{"CaseRange.Hi", Field, 0, ""},
+		{"CaseRange.Lo", Field, 0, ""},
+		{"CaseRanges", Var, 0, ""},
+		{"Categories", Var, 0, ""},
+		{"Caucasian_Albanian", Var, 4, ""},
+		{"Cc", Var, 0, ""},
+		{"Cf", Var, 0, ""},
+		{"Chakma", Var, 1, ""},
+		{"Cham", Var, 0, ""},
+		{"Cherokee", Var, 0, ""},
+		{"Chorasmian", Var, 16, ""},
+		{"Co", Var, 0, ""},
+		{"Common", Var, 0, ""},
+		{"Coptic", Var, 0, ""},
+		{"Cs", Var, 0, ""},
+		{"Cuneiform", Var, 0, ""},
+		{"Cypriot", Var, 0, ""},
+		{"Cypro_Minoan", Var, 21, ""},
+		{"Cyrillic", Var, 0, ""},
+		{"Dash", Var, 0, ""},
+		{"Deprecated", Var, 0, ""},
+		{"Deseret", Var, 0, ""},
+		{"Devanagari", Var, 0, ""},
+		{"Diacritic", Var, 0, ""},
+		{"Digit", Var, 0, ""},
+		{"Dives_Akuru", Var, 16, ""},
+		{"Dogra", Var, 13, ""},
+		{"Duployan", Var, 4, ""},
+		{"Egyptian_Hieroglyphs", Var, 0, ""},
+		{"Elbasan", Var, 4, ""},
+		{"Elymaic", Var, 14, ""},
+		{"Ethiopic", Var, 0, ""},
+		{"Extender", Var, 0, ""},
+		{"FoldCategory", Var, 0, ""},
+		{"FoldScript", Var, 0, ""},
+		{"Georgian", Var, 0, ""},
+		{"Glagolitic", Var, 0, ""},
+		{"Gothic", Var, 0, ""},
+		{"Grantha", Var, 4, ""},
+		{"GraphicRanges", Var, 0, ""},
+		{"Greek", Var, 0, ""},
+		{"Gujarati", Var, 0, ""},
+		{"Gunjala_Gondi", Var, 13, ""},
+		{"Gurmukhi", Var, 0, ""},
+		{"Han", Var, 0, ""},
+		{"Hangul", Var, 0, ""},
+		{"Hanifi_Rohingya", Var, 13, ""},
+		{"Hanunoo", Var, 0, ""},
+		{"Hatran", Var, 5, ""},
+		{"Hebrew", Var, 0, ""},
+		{"Hex_Digit", Var, 0, ""},
+		{"Hiragana", Var, 0, ""},
+		{"Hyphen", Var, 0, ""},
+		{"IDS_Binary_Operator", Var, 0, ""},
+		{"IDS_Trinary_Operator", Var, 0, ""},
+		{"Ideographic", Var, 0, ""},
+		{"Imperial_Aramaic", Var, 0, ""},
+		{"In", Func, 2, "func(r rune, ranges ...*RangeTable) bool"},
+		{"Inherited", Var, 0, ""},
+		{"Inscriptional_Pahlavi", Var, 0, ""},
+		{"Inscriptional_Parthian", Var, 0, ""},
+		{"Is", Func, 0, "func(rangeTab *RangeTable, r rune) bool"},
+		{"IsControl", Func, 0, "func(r rune) bool"},
+		{"IsDigit", Func, 0, "func(r rune) bool"},
+		{"IsGraphic", Func, 0, "func(r rune) bool"},
+		{"IsLetter", Func, 0, "func(r rune) bool"},
+		{"IsLower", Func, 0, "func(r rune) bool"},
+		{"IsMark", Func, 0, "func(r rune) bool"},
+		{"IsNumber", Func, 0, "func(r rune) bool"},
+		{"IsOneOf", Func, 0, "func(ranges []*RangeTable, r rune) bool"},
+		{"IsPrint", Func, 0, "func(r rune) bool"},
+		{"IsPunct", Func, 0, "func(r rune) bool"},
+		{"IsSpace", Func, 0, "func(r rune) bool"},
+		{"IsSymbol", Func, 0, "func(r rune) bool"},
+		{"IsTitle", Func, 0, "func(r rune) bool"},
+		{"IsUpper", Func, 0, "func(r rune) bool"},
+		{"Javanese", Var, 0, ""},
+		{"Join_Control", Var, 0, ""},
+		{"Kaithi", Var, 0, ""},
+		{"Kannada", Var, 0, ""},
+		{"Katakana", Var, 0, ""},
+		{"Kawi", Var, 21, ""},
+		{"Kayah_Li", Var, 0, ""},
+		{"Kharoshthi", Var, 0, ""},
+		{"Khitan_Small_Script", Var, 16, ""},
+		{"Khmer", Var, 0, ""},
+		{"Khojki", Var, 4, ""},
+		{"Khudawadi", Var, 4, ""},
+		{"L", Var, 0, ""},
+		{"Lao", Var, 0, ""},
+		{"Latin", Var, 0, ""},
+		{"Lepcha", Var, 0, ""},
+		{"Letter", Var, 0, ""},
+		{"Limbu", Var, 0, ""},
+		{"Linear_A", Var, 4, ""},
+		{"Linear_B", Var, 0, ""},
+		{"Lisu", Var, 0, ""},
+		{"Ll", Var, 0, ""},
+		{"Lm", Var, 0, ""},
+		{"Lo", Var, 0, ""},
+		{"Logical_Order_Exception", Var, 0, ""},
+		{"Lower", Var, 0, ""},
+		{"LowerCase", Const, 0, ""},
+		{"Lt", Var, 0, ""},
+		{"Lu", Var, 0, ""},
+		{"Lycian", Var, 0, ""},
+		{"Lydian", Var, 0, ""},
+		{"M", Var, 0, ""},
+		{"Mahajani", Var, 4, ""},
+		{"Makasar", Var, 13, ""},
+		{"Malayalam", Var, 0, ""},
+		{"Mandaic", Var, 0, ""},
+		{"Manichaean", Var, 4, ""},
+		{"Marchen", Var, 7, ""},
+		{"Mark", Var, 0, ""},
+		{"Masaram_Gondi", Var, 10, ""},
+		{"MaxASCII", Const, 0, ""},
+		{"MaxCase", Const, 0, ""},
+		{"MaxLatin1", Const, 0, ""},
+		{"MaxRune", Const, 0, ""},
+		{"Mc", Var, 0, ""},
+		{"Me", Var, 0, ""},
+		{"Medefaidrin", Var, 13, ""},
+		{"Meetei_Mayek", Var, 0, ""},
+		{"Mende_Kikakui", Var, 4, ""},
+		{"Meroitic_Cursive", Var, 1, ""},
+		{"Meroitic_Hieroglyphs", Var, 1, ""},
+		{"Miao", Var, 1, ""},
+		{"Mn", Var, 0, ""},
+		{"Modi", Var, 4, ""},
+		{"Mongolian", Var, 0, ""},
+		{"Mro", Var, 4, ""},
+		{"Multani", Var, 5, ""},
+		{"Myanmar", Var, 0, ""},
+		{"N", Var, 0, ""},
+		{"Nabataean", Var, 4, ""},
+		{"Nag_Mundari", Var, 21, ""},
+		{"Nandinagari", Var, 14, ""},
+		{"Nd", Var, 0, ""},
+		{"New_Tai_Lue", Var, 0, ""},
+		{"Newa", Var, 7, ""},
+		{"Nko", Var, 0, ""},
+		{"Nl", Var, 0, ""},
+		{"No", Var, 0, ""},
+		{"Noncharacter_Code_Point", Var, 0, ""},
+		{"Number", Var, 0, ""},
+		{"Nushu", Var, 10, ""},
+		{"Nyiakeng_Puachue_Hmong", Var, 14, ""},
+		{"Ogham", Var, 0, ""},
+		{"Ol_Chiki", Var, 0, ""},
+		{"Old_Hungarian", Var, 5, ""},
+		{"Old_Italic", Var, 0, ""},
+		{"Old_North_Arabian", Var, 4, ""},
+		{"Old_Permic", Var, 4, ""},
+		{"Old_Persian", Var, 0, ""},
+		{"Old_Sogdian", Var, 13, ""},
+		{"Old_South_Arabian", Var, 0, ""},
+		{"Old_Turkic", Var, 0, ""},
+		{"Old_Uyghur", Var, 21, ""},
+		{"Oriya", Var, 0, ""},
+		{"Osage", Var, 7, ""},
+		{"Osmanya", Var, 0, ""},
+		{"Other", Var, 0, ""},
+		{"Other_Alphabetic", Var, 0, ""},
+		{"Other_Default_Ignorable_Code_Point", Var, 0, ""},
+		{"Other_Grapheme_Extend", Var, 0, ""},
+		{"Other_ID_Continue", Var, 0, ""},
+		{"Other_ID_Start", Var, 0, ""},
+		{"Other_Lowercase", Var, 0, ""},
+		{"Other_Math", Var, 0, ""},
+		{"Other_Uppercase", Var, 0, ""},
+		{"P", Var, 0, ""},
+		{"Pahawh_Hmong", Var, 4, ""},
+		{"Palmyrene", Var, 4, ""},
+		{"Pattern_Syntax", Var, 0, ""},
+		{"Pattern_White_Space", Var, 0, ""},
+		{"Pau_Cin_Hau", Var, 4, ""},
+		{"Pc", Var, 0, ""},
+		{"Pd", Var, 0, ""},
+		{"Pe", Var, 0, ""},
+		{"Pf", Var, 0, ""},
+		{"Phags_Pa", Var, 0, ""},
+		{"Phoenician", Var, 0, ""},
+		{"Pi", Var, 0, ""},
+		{"Po", Var, 0, ""},
+		{"Prepended_Concatenation_Mark", Var, 7, ""},
+		{"PrintRanges", Var, 0, ""},
+		{"Properties", Var, 0, ""},
+		{"Ps", Var, 0, ""},
+		{"Psalter_Pahlavi", Var, 4, ""},
+		{"Punct", Var, 0, ""},
+		{"Quotation_Mark", Var, 0, ""},
+		{"Radical", Var, 0, ""},
+		{"Range16", Type, 0, ""},
+		{"Range16.Hi", Field, 0, ""},
+		{"Range16.Lo", Field, 0, ""},
+		{"Range16.Stride", Field, 0, ""},
+		{"Range32", Type, 0, ""},
+		{"Range32.Hi", Field, 0, ""},
+		{"Range32.Lo", Field, 0, ""},
+		{"Range32.Stride", Field, 0, ""},
+		{"RangeTable", Type, 0, ""},
+		{"RangeTable.LatinOffset", Field, 1, ""},
+		{"RangeTable.R16", Field, 0, ""},
+		{"RangeTable.R32", Field, 0, ""},
+		{"Regional_Indicator", Var, 10, ""},
+		{"Rejang", Var, 0, ""},
+		{"ReplacementChar", Const, 0, ""},
+		{"Runic", Var, 0, ""},
+		{"S", Var, 0, ""},
+		{"STerm", Var, 0, ""},
+		{"Samaritan", Var, 0, ""},
+		{"Saurashtra", Var, 0, ""},
+		{"Sc", Var, 0, ""},
+		{"Scripts", Var, 0, ""},
+		{"Sentence_Terminal", Var, 7, ""},
+		{"Sharada", Var, 1, ""},
+		{"Shavian", Var, 0, ""},
+		{"Siddham", Var, 4, ""},
+		{"SignWriting", Var, 5, ""},
+		{"SimpleFold", Func, 0, "func(r rune) rune"},
+		{"Sinhala", Var, 0, ""},
+		{"Sk", Var, 0, ""},
+		{"Sm", Var, 0, ""},
+		{"So", Var, 0, ""},
+		{"Soft_Dotted", Var, 0, ""},
+		{"Sogdian", Var, 13, ""},
+		{"Sora_Sompeng", Var, 1, ""},
+		{"Soyombo", Var, 10, ""},
+		{"Space", Var, 0, ""},
+		{"SpecialCase", Type, 0, ""},
+		{"Sundanese", Var, 0, ""},
+		{"Syloti_Nagri", Var, 0, ""},
+		{"Symbol", Var, 0, ""},
+		{"Syriac", Var, 0, ""},
+		{"Tagalog", Var, 0, ""},
+		{"Tagbanwa", Var, 0, ""},
+		{"Tai_Le", Var, 0, ""},
+		{"Tai_Tham", Var, 0, ""},
+		{"Tai_Viet", Var, 0, ""},
+		{"Takri", Var, 1, ""},
+		{"Tamil", Var, 0, ""},
+		{"Tangsa", Var, 21, ""},
+		{"Tangut", Var, 7, ""},
+		{"Telugu", Var, 0, ""},
+		{"Terminal_Punctuation", Var, 0, ""},
+		{"Thaana", Var, 0, ""},
+		{"Thai", Var, 0, ""},
+		{"Tibetan", Var, 0, ""},
+		{"Tifinagh", Var, 0, ""},
+		{"Tirhuta", Var, 4, ""},
+		{"Title", Var, 0, ""},
+		{"TitleCase", Const, 0, ""},
+		{"To", Func, 0, "func(_case int, r rune) rune"},
+		{"ToLower", Func, 0, "func(r rune) rune"},
+		{"ToTitle", Func, 0, "func(r rune) rune"},
+		{"ToUpper", Func, 0, "func(r rune) rune"},
+		{"Toto", Var, 21, ""},
+		{"TurkishCase", Var, 0, ""},
+		{"Ugaritic", Var, 0, ""},
+		{"Unified_Ideograph", Var, 0, ""},
+		{"Upper", Var, 0, ""},
+		{"UpperCase", Const, 0, ""},
+		{"UpperLower", Const, 0, ""},
+		{"Vai", Var, 0, ""},
+		{"Variation_Selector", Var, 0, ""},
+		{"Version", Const, 0, ""},
+		{"Vithkuqi", Var, 21, ""},
+		{"Wancho", Var, 14, ""},
+		{"Warang_Citi", Var, 4, ""},
+		{"White_Space", Var, 0, ""},
+		{"Yezidi", Var, 16, ""},
+		{"Yi", Var, 0, ""},
+		{"Z", Var, 0, ""},
+		{"Zanabazar_Square", Var, 10, ""},
+		{"Zl", Var, 0, ""},
+		{"Zp", Var, 0, ""},
+		{"Zs", Var, 0, ""},
+	},
+	"unicode/utf16": {
+		{"AppendRune", Func, 20, "func(a []uint16, r rune) []uint16"},
+		{"Decode", Func, 0, "func(s []uint16) []rune"},
+		{"DecodeRune", Func, 0, "func(r1 rune, r2 rune) rune"},
+		{"Encode", Func, 0, "func(s []rune) []uint16"},
+		{"EncodeRune", Func, 0, "func(r rune) (r1 rune, r2 rune)"},
+		{"IsSurrogate", Func, 0, "func(r rune) bool"},
+		{"RuneLen", Func, 23, "func(r rune) int"},
+	},
+	"unicode/utf8": {
+		{"AppendRune", Func, 18, "func(p []byte, r rune) []byte"},
+		{"DecodeLastRune", Func, 0, "func(p []byte) (r rune, size int)"},
+		{"DecodeLastRuneInString", Func, 0, "func(s string) (r rune, size int)"},
+		{"DecodeRune", Func, 0, "func(p []byte) (r rune, size int)"},
+		{"DecodeRuneInString", Func, 0, "func(s string) (r rune, size int)"},
+		{"EncodeRune", Func, 0, "func(p []byte, r rune) int"},
+		{"FullRune", Func, 0, "func(p []byte) bool"},
+		{"FullRuneInString", Func, 0, "func(s string) bool"},
+		{"MaxRune", Const, 0, ""},
+		{"RuneCount", Func, 0, "func(p []byte) int"},
+		{"RuneCountInString", Func, 0, "func(s string) (n int)"},
+		{"RuneError", Const, 0, ""},
+		{"RuneLen", Func, 0, "func(r rune) int"},
+		{"RuneSelf", Const, 0, ""},
+		{"RuneStart", Func, 0, "func(b byte) bool"},
+		{"UTFMax", Const, 0, ""},
+		{"Valid", Func, 0, "func(p []byte) bool"},
+		{"ValidRune", Func, 1, "func(r rune) bool"},
+		{"ValidString", Func, 0, "func(s string) bool"},
+	},
+	"unique": {
+		{"(Handle).Value", Method, 23, ""},
+		{"Handle", Type, 23, ""},
+		{"Make", Func, 23, "func[T comparable](value T) Handle[T]"},
+	},
+	"unsafe": {
+		{"Add", Func, 0, ""},
+		{"Alignof", Func, 0, ""},
+		{"Offsetof", Func, 0, ""},
+		{"Pointer", Type, 0, ""},
+		{"Sizeof", Func, 0, ""},
+		{"Slice", Func, 0, ""},
+		{"SliceData", Func, 0, ""},
+		{"String", Func, 0, ""},
+		{"StringData", Func, 0, ""},
+	},
+	"weak": {
+		{"(Pointer).Value", Method, 24, ""},
+		{"Make", Func, 24, "func[T any](ptr *T) Pointer[T]"},
+		{"Pointer", Type, 24, ""},
+	},
+}
diff --git a/vendor/golang.org/x/tools/internal/stdlib/stdlib.go b/vendor/golang.org/x/tools/internal/stdlib/stdlib.go
new file mode 100644
index 0000000..e223e0f
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/stdlib/stdlib.go
@@ -0,0 +1,105 @@
+// Copyright 2022 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:generate go run generate.go
+
+// Package stdlib provides a table of all exported symbols in the
+// standard library, along with the version at which they first
+// appeared. It also provides the import graph of std packages.
+package stdlib
+
+import (
+	"fmt"
+	"strings"
+)
+
+type Symbol struct {
+	Name    string
+	Kind    Kind
+	Version Version // Go version that first included the symbol
+	// Signature provides the type of a function (defined only for Kind=Func).
+	// Imported types are denoted as pkg.T; pkg is not fully qualified.
+	// TODO(adonovan): use an unambiguous encoding that is parseable.
+	//
+	// Example2:
+	//    func[M ~map[K]V, K comparable, V any](m M) M
+	//    func(fi fs.FileInfo, link string) (*Header, error)
+	Signature string // if Kind == stdlib.Func
+}
+
+// A Kind indicates the kind of a symbol:
+// function, variable, constant, type, and so on.
+type Kind int8
+
+const (
+	Invalid Kind = iota // Example name:
+	Type                // "Buffer"
+	Func                // "Println"
+	Var                 // "EOF"
+	Const               // "Pi"
+	Field               // "Point.X"
+	Method              // "(*Buffer).Grow"
+)
+
+func (kind Kind) String() string {
+	return [...]string{
+		Invalid: "invalid",
+		Type:    "type",
+		Func:    "func",
+		Var:     "var",
+		Const:   "const",
+		Field:   "field",
+		Method:  "method",
+	}[kind]
+}
+
+// A Version represents a version of Go of the form "go1.%d".
+type Version int8
+
+// String returns a version string of the form "go1.23", without allocating.
+func (v Version) String() string { return versions[v] }
+
+var versions [30]string // (increase constant as needed)
+
+func init() {
+	for i := range versions {
+		versions[i] = fmt.Sprintf("go1.%d", i)
+	}
+}
+
+// HasPackage reports whether the specified package path is part of
+// the standard library's public API.
+func HasPackage(path string) bool {
+	_, ok := PackageSymbols[path]
+	return ok
+}
+
+// SplitField splits the field symbol name into type and field
+// components. It must be called only on Field symbols.
+//
+// Example: "File.Package" -> ("File", "Package")
+func (sym *Symbol) SplitField() (typename, name string) {
+	if sym.Kind != Field {
+		panic("not a field")
+	}
+	typename, name, _ = strings.Cut(sym.Name, ".")
+	return
+}
+
+// SplitMethod splits the method symbol name into pointer, receiver,
+// and method components. It must be called only on Method symbols.
+//
+// Example: "(*Buffer).Grow" -> (true, "Buffer", "Grow")
+func (sym *Symbol) SplitMethod() (ptr bool, recv, name string) {
+	if sym.Kind != Method {
+		panic("not a method")
+	}
+	recv, name, _ = strings.Cut(sym.Name, ".")
+	recv = recv[len("(") : len(recv)-len(")")]
+	ptr = recv[0] == '*'
+	if ptr {
+		recv = recv[len("*"):]
+	}
+	return
+}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/common.go b/vendor/golang.org/x/tools/internal/typeparams/common.go
new file mode 100644
index 0000000..cdae2b8
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typeparams/common.go
@@ -0,0 +1,68 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package typeparams contains common utilities for writing tools that
+// interact with generic Go code, as introduced with Go 1.18. It
+// supplements the standard library APIs. Notably, the StructuralTerms
+// API computes a minimal representation of the structural
+// restrictions on a type parameter.
+//
+// An external version of these APIs is available in the
+// golang.org/x/exp/typeparams module.
+package typeparams
+
+import (
+	"go/ast"
+	"go/token"
+	"go/types"
+)
+
+// UnpackIndexExpr extracts data from AST nodes that represent index
+// expressions.
+//
+// For an ast.IndexExpr, the resulting indices slice will contain exactly one
+// index expression. For an ast.IndexListExpr (go1.18+), it may have a variable
+// number of index expressions.
+//
+// For nodes that don't represent index expressions, the first return value of
+// UnpackIndexExpr will be nil.
+func UnpackIndexExpr(n ast.Node) (x ast.Expr, lbrack token.Pos, indices []ast.Expr, rbrack token.Pos) {
+	switch e := n.(type) {
+	case *ast.IndexExpr:
+		return e.X, e.Lbrack, []ast.Expr{e.Index}, e.Rbrack
+	case *ast.IndexListExpr:
+		return e.X, e.Lbrack, e.Indices, e.Rbrack
+	}
+	return nil, token.NoPos, nil, token.NoPos
+}
+
+// PackIndexExpr returns an *ast.IndexExpr or *ast.IndexListExpr, depending on
+// the cardinality of indices. Calling PackIndexExpr with len(indices) == 0
+// will panic.
+func PackIndexExpr(x ast.Expr, lbrack token.Pos, indices []ast.Expr, rbrack token.Pos) ast.Expr {
+	switch len(indices) {
+	case 0:
+		panic("empty indices")
+	case 1:
+		return &ast.IndexExpr{
+			X:      x,
+			Lbrack: lbrack,
+			Index:  indices[0],
+			Rbrack: rbrack,
+		}
+	default:
+		return &ast.IndexListExpr{
+			X:       x,
+			Lbrack:  lbrack,
+			Indices: indices,
+			Rbrack:  rbrack,
+		}
+	}
+}
+
+// IsTypeParam reports whether t is a type parameter (or an alias of one).
+func IsTypeParam(t types.Type) bool {
+	_, ok := types.Unalias(t).(*types.TypeParam)
+	return ok
+}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/coretype.go b/vendor/golang.org/x/tools/internal/typeparams/coretype.go
new file mode 100644
index 0000000..27a2b17
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typeparams/coretype.go
@@ -0,0 +1,155 @@
+// Copyright 2022 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package typeparams
+
+import (
+	"fmt"
+	"go/types"
+)
+
+// CoreType returns the core type of T or nil if T does not have a core type.
+//
+// See https://go.dev/ref/spec#Core_types for the definition of a core type.
+func CoreType(T types.Type) types.Type {
+	U := T.Underlying()
+	if _, ok := U.(*types.Interface); !ok {
+		return U // for non-interface types,
+	}
+
+	terms, err := NormalTerms(U)
+	if len(terms) == 0 || err != nil {
+		// len(terms) -> empty type set of interface.
+		// err != nil => U is invalid, exceeds complexity bounds, or has an empty type set.
+		return nil // no core type.
+	}
+
+	U = terms[0].Type().Underlying()
+	var identical int // i in [0,identical) => Identical(U, terms[i].Type().Underlying())
+	for identical = 1; identical < len(terms); identical++ {
+		if !types.Identical(U, terms[identical].Type().Underlying()) {
+			break
+		}
+	}
+
+	if identical == len(terms) {
+		// https://go.dev/ref/spec#Core_types
+		// "There is a single type U which is the underlying type of all types in the type set of T"
+		return U
+	}
+	ch, ok := U.(*types.Chan)
+	if !ok {
+		return nil // no core type as identical < len(terms) and U is not a channel.
+	}
+	// https://go.dev/ref/spec#Core_types
+	// "the type chan E if T contains only bidirectional channels, or the type chan<- E or
+	// <-chan E depending on the direction of the directional channels present."
+	for chans := identical; chans < len(terms); chans++ {
+		curr, ok := terms[chans].Type().Underlying().(*types.Chan)
+		if !ok {
+			return nil
+		}
+		if !types.Identical(ch.Elem(), curr.Elem()) {
+			return nil // channel elements are not identical.
+		}
+		if ch.Dir() == types.SendRecv {
+			// ch is bidirectional. We can safely always use curr's direction.
+			ch = curr
+		} else if curr.Dir() != types.SendRecv && ch.Dir() != curr.Dir() {
+			// ch and curr are not bidirectional and not the same direction.
+			return nil
+		}
+	}
+	return ch
+}
+
+// NormalTerms returns a slice of terms representing the normalized structural
+// type restrictions of a type, if any.
+//
+// For all types other than *types.TypeParam, *types.Interface, and
+// *types.Union, this is just a single term with Tilde() == false and
+// Type() == typ. For *types.TypeParam, *types.Interface, and *types.Union, see
+// below.
+//
+// Structural type restrictions of a type parameter are created via
+// non-interface types embedded in its constraint interface (directly, or via a
+// chain of interface embeddings). For example, in the declaration type
+// T[P interface{~int; m()}] int the structural restriction of the type
+// parameter P is ~int.
+//
+// With interface embedding and unions, the specification of structural type
+// restrictions may be arbitrarily complex. For example, consider the
+// following:
+//
+//	type A interface{ ~string|~[]byte }
+//
+//	type B interface{ int|string }
+//
+//	type C interface { ~string|~int }
+//
+//	type T[P interface{ A|B; C }] int
+//
+// In this example, the structural type restriction of P is ~string|int: A|B
+// expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int,
+// which when intersected with C (~string|~int) yields ~string|int.
+//
+// NormalTerms computes these expansions and reductions, producing a
+// "normalized" form of the embeddings. A structural restriction is normalized
+// if it is a single union containing no interface terms, and is minimal in the
+// sense that removing any term changes the set of types satisfying the
+// constraint. It is left as a proof for the reader that, modulo sorting, there
+// is exactly one such normalized form.
+//
+// Because the minimal representation always takes this form, NormalTerms
+// returns a slice of tilde terms corresponding to the terms of the union in
+// the normalized structural restriction. An error is returned if the type is
+// invalid, exceeds complexity bounds, or has an empty type set. In the latter
+// case, NormalTerms returns ErrEmptyTypeSet.
+//
+// NormalTerms makes no guarantees about the order of terms, except that it
+// is deterministic.
+func NormalTerms(T types.Type) ([]*types.Term, error) {
+	// typeSetOf(T) == typeSetOf(Unalias(T))
+	typ := types.Unalias(T)
+	if named, ok := typ.(*types.Named); ok {
+		typ = named.Underlying()
+	}
+	switch typ := typ.(type) {
+	case *types.TypeParam:
+		return StructuralTerms(typ)
+	case *types.Union:
+		return UnionTermSet(typ)
+	case *types.Interface:
+		return InterfaceTermSet(typ)
+	default:
+		return []*types.Term{types.NewTerm(false, T)}, nil
+	}
+}
+
+// Deref returns the type of the variable pointed to by t,
+// if t's core type is a pointer; otherwise it returns t.
+//
+// Do not assume that Deref(T)==T implies T is not a pointer:
+// consider "type T *T", for example.
+//
+// TODO(adonovan): ideally this would live in typesinternal, but that
+// creates an import cycle. Move there when we melt this package down.
+func Deref(t types.Type) types.Type {
+	if ptr, ok := CoreType(t).(*types.Pointer); ok {
+		return ptr.Elem()
+	}
+	return t
+}
+
+// MustDeref returns the type of the variable pointed to by t.
+// It panics if t's core type is not a pointer.
+//
+// TODO(adonovan): ideally this would live in typesinternal, but that
+// creates an import cycle. Move there when we melt this package down.
+func MustDeref(t types.Type) types.Type {
+	if ptr, ok := CoreType(t).(*types.Pointer); ok {
+		return ptr.Elem()
+	}
+	panic(fmt.Sprintf("%v is not a pointer", t))
+}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/free.go b/vendor/golang.org/x/tools/internal/typeparams/free.go
new file mode 100644
index 0000000..709d2fc
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typeparams/free.go
@@ -0,0 +1,131 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package typeparams
+
+import (
+	"go/types"
+
+	"golang.org/x/tools/internal/aliases"
+)
+
+// Free is a memoization of the set of free type parameters within a
+// type. It makes a sequence of calls to [Free.Has] for overlapping
+// types more efficient. The zero value is ready for use.
+//
+// NOTE: Adapted from go/types/infer.go. If it is later exported, factor.
+type Free struct {
+	seen map[types.Type]bool
+}
+
+// Has reports whether the specified type has a free type parameter.
+func (w *Free) Has(typ types.Type) (res bool) {
+	// detect cycles
+	if x, ok := w.seen[typ]; ok {
+		return x
+	}
+	if w.seen == nil {
+		w.seen = make(map[types.Type]bool)
+	}
+	w.seen[typ] = false
+	defer func() {
+		w.seen[typ] = res
+	}()
+
+	switch t := typ.(type) {
+	case nil, *types.Basic: // TODO(gri) should nil be handled here?
+		break
+
+	case *types.Alias:
+		if aliases.TypeParams(t).Len() > aliases.TypeArgs(t).Len() {
+			return true // This is an uninstantiated Alias.
+		}
+		// The expansion of an alias can have free type parameters,
+		// whether or not the alias itself has type parameters:
+		//
+		//   func _[K comparable]() {
+		//     type Set      = map[K]bool // free(Set)      = {K}
+		//     type MapTo[V] = map[K]V    // free(Map[foo]) = {V}
+		//   }
+		//
+		// So, we must Unalias.
+		return w.Has(types.Unalias(t))
+
+	case *types.Array:
+		return w.Has(t.Elem())
+
+	case *types.Slice:
+		return w.Has(t.Elem())
+
+	case *types.Struct:
+		for i, n := 0, t.NumFields(); i < n; i++ {
+			if w.Has(t.Field(i).Type()) {
+				return true
+			}
+		}
+
+	case *types.Pointer:
+		return w.Has(t.Elem())
+
+	case *types.Tuple:
+		n := t.Len()
+		for i := range n {
+			if w.Has(t.At(i).Type()) {
+				return true
+			}
+		}
+
+	case *types.Signature:
+		// t.tparams may not be nil if we are looking at a signature
+		// of a generic function type (or an interface method) that is
+		// part of the type we're testing. We don't care about these type
+		// parameters.
+		// Similarly, the receiver of a method may declare (rather than
+		// use) type parameters, we don't care about those either.
+		// Thus, we only need to look at the input and result parameters.
+		return w.Has(t.Params()) || w.Has(t.Results())
+
+	case *types.Interface:
+		for i, n := 0, t.NumMethods(); i < n; i++ {
+			if w.Has(t.Method(i).Type()) {
+				return true
+			}
+		}
+		terms, err := InterfaceTermSet(t)
+		if err != nil {
+			return false // ill typed
+		}
+		for _, term := range terms {
+			if w.Has(term.Type()) {
+				return true
+			}
+		}
+
+	case *types.Map:
+		return w.Has(t.Key()) || w.Has(t.Elem())
+
+	case *types.Chan:
+		return w.Has(t.Elem())
+
+	case *types.Named:
+		args := t.TypeArgs()
+		if params := t.TypeParams(); params.Len() > args.Len() {
+			return true // this is an uninstantiated named type.
+		}
+		for i, n := 0, args.Len(); i < n; i++ {
+			if w.Has(args.At(i)) {
+				return true
+			}
+		}
+		return w.Has(t.Underlying()) // recurse for types local to parameterized functions
+
+	case *types.TypeParam:
+		return true
+
+	default:
+		panic(t) // unreachable
+	}
+
+	return false
+}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/normalize.go b/vendor/golang.org/x/tools/internal/typeparams/normalize.go
new file mode 100644
index 0000000..f49802b
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typeparams/normalize.go
@@ -0,0 +1,218 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package typeparams
+
+import (
+	"errors"
+	"fmt"
+	"go/types"
+	"os"
+	"strings"
+)
+
+//go:generate go run copytermlist.go
+
+const debug = false
+
+var ErrEmptyTypeSet = errors.New("empty type set")
+
+// StructuralTerms returns a slice of terms representing the normalized
+// structural type restrictions of a type parameter, if any.
+//
+// Structural type restrictions of a type parameter are created via
+// non-interface types embedded in its constraint interface (directly, or via a
+// chain of interface embeddings). For example, in the declaration
+//
+//	type T[P interface{~int; m()}] int
+//
+// the structural restriction of the type parameter P is ~int.
+//
+// With interface embedding and unions, the specification of structural type
+// restrictions may be arbitrarily complex. For example, consider the
+// following:
+//
+//	type A interface{ ~string|~[]byte }
+//
+//	type B interface{ int|string }
+//
+//	type C interface { ~string|~int }
+//
+//	type T[P interface{ A|B; C }] int
+//
+// In this example, the structural type restriction of P is ~string|int: A|B
+// expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int,
+// which when intersected with C (~string|~int) yields ~string|int.
+//
+// StructuralTerms computes these expansions and reductions, producing a
+// "normalized" form of the embeddings. A structural restriction is normalized
+// if it is a single union containing no interface terms, and is minimal in the
+// sense that removing any term changes the set of types satisfying the
+// constraint. It is left as a proof for the reader that, modulo sorting, there
+// is exactly one such normalized form.
+//
+// Because the minimal representation always takes this form, StructuralTerms
+// returns a slice of tilde terms corresponding to the terms of the union in
+// the normalized structural restriction. An error is returned if the
+// constraint interface is invalid, exceeds complexity bounds, or has an empty
+// type set. In the latter case, StructuralTerms returns ErrEmptyTypeSet.
+//
+// StructuralTerms makes no guarantees about the order of terms, except that it
+// is deterministic.
+func StructuralTerms(tparam *types.TypeParam) ([]*types.Term, error) {
+	constraint := tparam.Constraint()
+	if constraint == nil {
+		return nil, fmt.Errorf("%s has nil constraint", tparam)
+	}
+	iface, _ := constraint.Underlying().(*types.Interface)
+	if iface == nil {
+		return nil, fmt.Errorf("constraint is %T, not *types.Interface", constraint.Underlying())
+	}
+	return InterfaceTermSet(iface)
+}
+
+// InterfaceTermSet computes the normalized terms for a constraint interface,
+// returning an error if the term set cannot be computed or is empty. In the
+// latter case, the error will be ErrEmptyTypeSet.
+//
+// See the documentation of StructuralTerms for more information on
+// normalization.
+func InterfaceTermSet(iface *types.Interface) ([]*types.Term, error) {
+	return computeTermSet(iface)
+}
+
+// UnionTermSet computes the normalized terms for a union, returning an error
+// if the term set cannot be computed or is empty. In the latter case, the
+// error will be ErrEmptyTypeSet.
+//
+// See the documentation of StructuralTerms for more information on
+// normalization.
+func UnionTermSet(union *types.Union) ([]*types.Term, error) {
+	return computeTermSet(union)
+}
+
+func computeTermSet(typ types.Type) ([]*types.Term, error) {
+	tset, err := computeTermSetInternal(typ, make(map[types.Type]*termSet), 0)
+	if err != nil {
+		return nil, err
+	}
+	if tset.terms.isEmpty() {
+		return nil, ErrEmptyTypeSet
+	}
+	if tset.terms.isAll() {
+		return nil, nil
+	}
+	var terms []*types.Term
+	for _, term := range tset.terms {
+		terms = append(terms, types.NewTerm(term.tilde, term.typ))
+	}
+	return terms, nil
+}
+
+// A termSet holds the normalized set of terms for a given type.
+//
+// The name termSet is intentionally distinct from 'type set': a type set is
+// all types that implement a type (and includes method restrictions), whereas
+// a term set just represents the structural restrictions on a type.
+type termSet struct {
+	complete bool
+	terms    termlist
+}
+
+func indentf(depth int, format string, args ...any) {
+	fmt.Fprintf(os.Stderr, strings.Repeat(".", depth)+format+"\n", args...)
+}
+
+func computeTermSetInternal(t types.Type, seen map[types.Type]*termSet, depth int) (res *termSet, err error) {
+	if t == nil {
+		panic("nil type")
+	}
+
+	if debug {
+		indentf(depth, "%s", t.String())
+		defer func() {
+			if err != nil {
+				indentf(depth, "=> %s", err)
+			} else {
+				indentf(depth, "=> %s", res.terms.String())
+			}
+		}()
+	}
+
+	const maxTermCount = 100
+	if tset, ok := seen[t]; ok {
+		if !tset.complete {
+			return nil, fmt.Errorf("cycle detected in the declaration of %s", t)
+		}
+		return tset, nil
+	}
+
+	// Mark the current type as seen to avoid infinite recursion.
+	tset := new(termSet)
+	defer func() {
+		tset.complete = true
+	}()
+	seen[t] = tset
+
+	switch u := t.Underlying().(type) {
+	case *types.Interface:
+		// The term set of an interface is the intersection of the term sets of its
+		// embedded types.
+		tset.terms = allTermlist
+		for i := 0; i < u.NumEmbeddeds(); i++ {
+			embedded := u.EmbeddedType(i)
+			if _, ok := embedded.Underlying().(*types.TypeParam); ok {
+				return nil, fmt.Errorf("invalid embedded type %T", embedded)
+			}
+			tset2, err := computeTermSetInternal(embedded, seen, depth+1)
+			if err != nil {
+				return nil, err
+			}
+			tset.terms = tset.terms.intersect(tset2.terms)
+		}
+	case *types.Union:
+		// The term set of a union is the union of term sets of its terms.
+		tset.terms = nil
+		for i := 0; i < u.Len(); i++ {
+			t := u.Term(i)
+			var terms termlist
+			switch t.Type().Underlying().(type) {
+			case *types.Interface:
+				tset2, err := computeTermSetInternal(t.Type(), seen, depth+1)
+				if err != nil {
+					return nil, err
+				}
+				terms = tset2.terms
+			case *types.TypeParam, *types.Union:
+				// A stand-alone type parameter or union is not permitted as union
+				// term.
+				return nil, fmt.Errorf("invalid union term %T", t)
+			default:
+				if t.Type() == types.Typ[types.Invalid] {
+					continue
+				}
+				terms = termlist{{t.Tilde(), t.Type()}}
+			}
+			tset.terms = tset.terms.union(terms)
+			if len(tset.terms) > maxTermCount {
+				return nil, fmt.Errorf("exceeded max term count %d", maxTermCount)
+			}
+		}
+	case *types.TypeParam:
+		panic("unreachable")
+	default:
+		// For all other types, the term set is just a single non-tilde term
+		// holding the type itself.
+		if u != types.Typ[types.Invalid] {
+			tset.terms = termlist{{false, t}}
+		}
+	}
+	return tset, nil
+}
+
+// under is a facade for the go/types internal function of the same name. It is
+// used by typeterm.go.
+func under(t types.Type) types.Type {
+	return t.Underlying()
+}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/termlist.go b/vendor/golang.org/x/tools/internal/typeparams/termlist.go
new file mode 100644
index 0000000..9bc2914
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typeparams/termlist.go
@@ -0,0 +1,169 @@
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
+// Source: ../../cmd/compile/internal/types2/termlist.go
+
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Code generated by copytermlist.go DO NOT EDIT.
+
+package typeparams
+
+import (
+	"go/types"
+	"strings"
+)
+
+// A termlist represents the type set represented by the union
+// t1 ∪ y2 ∪ ... tn of the type sets of the terms t1 to tn.
+// A termlist is in normal form if all terms are disjoint.
+// termlist operations don't require the operands to be in
+// normal form.
+type termlist []*term
+
+// allTermlist represents the set of all types.
+// It is in normal form.
+var allTermlist = termlist{new(term)}
+
+// termSep is the separator used between individual terms.
+const termSep = " | "
+
+// String prints the termlist exactly (without normalization).
+func (xl termlist) String() string {
+	if len(xl) == 0 {
+		return "∅"
+	}
+	var buf strings.Builder
+	for i, x := range xl {
+		if i > 0 {
+			buf.WriteString(termSep)
+		}
+		buf.WriteString(x.String())
+	}
+	return buf.String()
+}
+
+// isEmpty reports whether the termlist xl represents the empty set of types.
+func (xl termlist) isEmpty() bool {
+	// If there's a non-nil term, the entire list is not empty.
+	// If the termlist is in normal form, this requires at most
+	// one iteration.
+	for _, x := range xl {
+		if x != nil {
+			return false
+		}
+	}
+	return true
+}
+
+// isAll reports whether the termlist xl represents the set of all types.
+func (xl termlist) isAll() bool {
+	// If there's a 𝓤 term, the entire list is 𝓤.
+	// If the termlist is in normal form, this requires at most
+	// one iteration.
+	for _, x := range xl {
+		if x != nil && x.typ == nil {
+			return true
+		}
+	}
+	return false
+}
+
+// norm returns the normal form of xl.
+func (xl termlist) norm() termlist {
+	// Quadratic algorithm, but good enough for now.
+	// TODO(gri) fix asymptotic performance
+	used := make([]bool, len(xl))
+	var rl termlist
+	for i, xi := range xl {
+		if xi == nil || used[i] {
+			continue
+		}
+		for j := i + 1; j < len(xl); j++ {
+			xj := xl[j]
+			if xj == nil || used[j] {
+				continue
+			}
+			if u1, u2 := xi.union(xj); u2 == nil {
+				// If we encounter a 𝓤 term, the entire list is 𝓤.
+				// Exit early.
+				// (Note that this is not just an optimization;
+				// if we continue, we may end up with a 𝓤 term
+				// and other terms and the result would not be
+				// in normal form.)
+				if u1.typ == nil {
+					return allTermlist
+				}
+				xi = u1
+				used[j] = true // xj is now unioned into xi - ignore it in future iterations
+			}
+		}
+		rl = append(rl, xi)
+	}
+	return rl
+}
+
+// union returns the union xl ∪ yl.
+func (xl termlist) union(yl termlist) termlist {
+	return append(xl, yl...).norm()
+}
+
+// intersect returns the intersection xl ∩ yl.
+func (xl termlist) intersect(yl termlist) termlist {
+	if xl.isEmpty() || yl.isEmpty() {
+		return nil
+	}
+
+	// Quadratic algorithm, but good enough for now.
+	// TODO(gri) fix asymptotic performance
+	var rl termlist
+	for _, x := range xl {
+		for _, y := range yl {
+			if r := x.intersect(y); r != nil {
+				rl = append(rl, r)
+			}
+		}
+	}
+	return rl.norm()
+}
+
+// equal reports whether xl and yl represent the same type set.
+func (xl termlist) equal(yl termlist) bool {
+	// TODO(gri) this should be more efficient
+	return xl.subsetOf(yl) && yl.subsetOf(xl)
+}
+
+// includes reports whether t ∈ xl.
+func (xl termlist) includes(t types.Type) bool {
+	for _, x := range xl {
+		if x.includes(t) {
+			return true
+		}
+	}
+	return false
+}
+
+// supersetOf reports whether y ⊆ xl.
+func (xl termlist) supersetOf(y *term) bool {
+	for _, x := range xl {
+		if y.subsetOf(x) {
+			return true
+		}
+	}
+	return false
+}
+
+// subsetOf reports whether xl ⊆ yl.
+func (xl termlist) subsetOf(yl termlist) bool {
+	if yl.isEmpty() {
+		return xl.isEmpty()
+	}
+
+	// each term x of xl must be a subset of yl
+	for _, x := range xl {
+		if !yl.supersetOf(x) {
+			return false // x is not a subset yl
+		}
+	}
+	return true
+}
diff --git a/vendor/golang.org/x/tools/internal/typeparams/typeterm.go b/vendor/golang.org/x/tools/internal/typeparams/typeterm.go
new file mode 100644
index 0000000..fa758cd
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typeparams/typeterm.go
@@ -0,0 +1,172 @@
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
+// Source: ../../cmd/compile/internal/types2/typeterm.go
+
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Code generated by copytermlist.go DO NOT EDIT.
+
+package typeparams
+
+import "go/types"
+
+// A term describes elementary type sets:
+//
+//	 ∅:  (*term)(nil)     == ∅                      // set of no types (empty set)
+//	 𝓤:  &term{}          == 𝓤                      // set of all types (𝓤niverse)
+//	 T:  &term{false, T}  == {T}                    // set of type T
+//	~t:  &term{true, t}   == {t' | under(t') == t}  // set of types with underlying type t
+type term struct {
+	tilde bool // valid if typ != nil
+	typ   types.Type
+}
+
+func (x *term) String() string {
+	switch {
+	case x == nil:
+		return "∅"
+	case x.typ == nil:
+		return "𝓤"
+	case x.tilde:
+		return "~" + x.typ.String()
+	default:
+		return x.typ.String()
+	}
+}
+
+// equal reports whether x and y represent the same type set.
+func (x *term) equal(y *term) bool {
+	// easy cases
+	switch {
+	case x == nil || y == nil:
+		return x == y
+	case x.typ == nil || y.typ == nil:
+		return x.typ == y.typ
+	}
+	// ∅ ⊂ x, y ⊂ 𝓤
+
+	return x.tilde == y.tilde && types.Identical(x.typ, y.typ)
+}
+
+// union returns the union x ∪ y: zero, one, or two non-nil terms.
+func (x *term) union(y *term) (_, _ *term) {
+	// easy cases
+	switch {
+	case x == nil && y == nil:
+		return nil, nil // ∅ ∪ ∅ == ∅
+	case x == nil:
+		return y, nil // ∅ ∪ y == y
+	case y == nil:
+		return x, nil // x ∪ ∅ == x
+	case x.typ == nil:
+		return x, nil // 𝓤 ∪ y == 𝓤
+	case y.typ == nil:
+		return y, nil // x ∪ 𝓤 == 𝓤
+	}
+	// ∅ ⊂ x, y ⊂ 𝓤
+
+	if x.disjoint(y) {
+		return x, y // x ∪ y == (x, y) if x ∩ y == ∅
+	}
+	// x.typ == y.typ
+
+	// ~t ∪ ~t == ~t
+	// ~t ∪  T == ~t
+	//  T ∪ ~t == ~t
+	//  T ∪  T ==  T
+	if x.tilde || !y.tilde {
+		return x, nil
+	}
+	return y, nil
+}
+
+// intersect returns the intersection x ∩ y.
+func (x *term) intersect(y *term) *term {
+	// easy cases
+	switch {
+	case x == nil || y == nil:
+		return nil // ∅ ∩ y == ∅ and ∩ ∅ == ∅
+	case x.typ == nil:
+		return y // 𝓤 ∩ y == y
+	case y.typ == nil:
+		return x // x ∩ 𝓤 == x
+	}
+	// ∅ ⊂ x, y ⊂ 𝓤
+
+	if x.disjoint(y) {
+		return nil // x ∩ y == ∅ if x ∩ y == ∅
+	}
+	// x.typ == y.typ
+
+	// ~t ∩ ~t == ~t
+	// ~t ∩  T ==  T
+	//  T ∩ ~t ==  T
+	//  T ∩  T ==  T
+	if !x.tilde || y.tilde {
+		return x
+	}
+	return y
+}
+
+// includes reports whether t ∈ x.
+func (x *term) includes(t types.Type) bool {
+	// easy cases
+	switch {
+	case x == nil:
+		return false // t ∈ ∅ == false
+	case x.typ == nil:
+		return true // t ∈ 𝓤 == true
+	}
+	// ∅ ⊂ x ⊂ 𝓤
+
+	u := t
+	if x.tilde {
+		u = under(u)
+	}
+	return types.Identical(x.typ, u)
+}
+
+// subsetOf reports whether x ⊆ y.
+func (x *term) subsetOf(y *term) bool {
+	// easy cases
+	switch {
+	case x == nil:
+		return true // ∅ ⊆ y == true
+	case y == nil:
+		return false // x ⊆ ∅ == false since x != ∅
+	case y.typ == nil:
+		return true // x ⊆ 𝓤 == true
+	case x.typ == nil:
+		return false // 𝓤 ⊆ y == false since y != 𝓤
+	}
+	// ∅ ⊂ x, y ⊂ 𝓤
+
+	if x.disjoint(y) {
+		return false // x ⊆ y == false if x ∩ y == ∅
+	}
+	// x.typ == y.typ
+
+	// ~t ⊆ ~t == true
+	// ~t ⊆ T == false
+	//  T ⊆ ~t == true
+	//  T ⊆  T == true
+	return !x.tilde || y.tilde
+}
+
+// disjoint reports whether x ∩ y == ∅.
+// x.typ and y.typ must not be nil.
+func (x *term) disjoint(y *term) bool {
+	if debug && (x.typ == nil || y.typ == nil) {
+		panic("invalid argument(s)")
+	}
+	ux := x.typ
+	if y.tilde {
+		ux = under(ux)
+	}
+	uy := y.typ
+	if x.tilde {
+		uy = under(uy)
+	}
+	return !types.Identical(ux, uy)
+}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/classify_call.go b/vendor/golang.org/x/tools/internal/typesinternal/classify_call.go
new file mode 100644
index 0000000..3db2a13
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typesinternal/classify_call.go
@@ -0,0 +1,137 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package typesinternal
+
+import (
+	"fmt"
+	"go/ast"
+	"go/types"
+	_ "unsafe"
+)
+
+// CallKind describes the function position of an [*ast.CallExpr].
+type CallKind int
+
+const (
+	CallStatic     CallKind = iota // static call to known function
+	CallInterface                  // dynamic call through an interface method
+	CallDynamic                    // dynamic call of a func value
+	CallBuiltin                    // call to a builtin function
+	CallConversion                 // a conversion (not a call)
+)
+
+var callKindNames = []string{
+	"CallStatic",
+	"CallInterface",
+	"CallDynamic",
+	"CallBuiltin",
+	"CallConversion",
+}
+
+func (k CallKind) String() string {
+	if i := int(k); i >= 0 && i < len(callKindNames) {
+		return callKindNames[i]
+	}
+	return fmt.Sprintf("typeutil.CallKind(%d)", k)
+}
+
+// ClassifyCall classifies the function position of a call expression ([*ast.CallExpr]).
+// It distinguishes among true function calls, calls to builtins, and type conversions,
+// and further classifies function calls as static calls (where the function is known),
+// dynamic interface calls, and other dynamic calls.
+//
+// For the declarations:
+//
+//	func f() {}
+//	func g[T any]() {}
+//	var v func()
+//	var s []func()
+//	type I interface { M() }
+//	var i I
+//
+// ClassifyCall returns the following:
+//
+//	f()           CallStatic
+//	g[int]()      CallStatic
+//	i.M()         CallInterface
+//	min(1, 2)     CallBuiltin
+//	v()           CallDynamic
+//	s[0]()        CallDynamic
+//	int(x)        CallConversion
+//	[]byte("")    CallConversion
+func ClassifyCall(info *types.Info, call *ast.CallExpr) CallKind {
+	if info.Types == nil {
+		panic("ClassifyCall: info.Types is nil")
+	}
+	tv := info.Types[call.Fun]
+	if tv.IsType() {
+		return CallConversion
+	}
+	if tv.IsBuiltin() {
+		return CallBuiltin
+	}
+	obj := info.Uses[UsedIdent(info, call.Fun)]
+	// Classify the call by the type of the object, if any.
+	switch obj := obj.(type) {
+	case *types.Func:
+		if interfaceMethod(obj) {
+			return CallInterface
+		}
+		return CallStatic
+	default:
+		return CallDynamic
+	}
+}
+
+// UsedIdent returns the identifier such that info.Uses[UsedIdent(info, e)]
+// is the [types.Object] used by e, if any.
+//
+// If e is one of various forms of reference:
+//
+//	f, c, v, T           lexical reference
+//	pkg.X                qualified identifier
+//	f[T] or pkg.F[K,V]   instantiations of the above kinds
+//	expr.f               field or method value selector
+//	T.f                  method expression selector
+//
+// UsedIdent returns the identifier whose is associated value in [types.Info.Uses]
+// is the object to which it refers.
+//
+// For the declarations:
+//
+//	func F[T any] {...}
+//	type I interface { M() }
+//	var (
+//	  x int
+//	  s struct { f  int }
+//	  a []int
+//	  i I
+//	)
+//
+// UsedIdent returns the following:
+//
+//	Expr          UsedIdent
+//	x             x
+//	s.f           f
+//	F[int]        F
+//	i.M           M
+//	I.M           M
+//	min           min
+//	int           int
+//	1             nil
+//	a[0]          nil
+//	[]byte        nil
+//
+// Note: if e is an instantiated function or method, UsedIdent returns
+// the corresponding generic function or method on the generic type.
+func UsedIdent(info *types.Info, e ast.Expr) *ast.Ident {
+	return usedIdent(info, e)
+}
+
+//go:linkname usedIdent golang.org/x/tools/go/types/typeutil.usedIdent
+func usedIdent(info *types.Info, e ast.Expr) *ast.Ident
+
+//go:linkname interfaceMethod golang.org/x/tools/go/types/typeutil.interfaceMethod
+func interfaceMethod(f *types.Func) bool
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/element.go b/vendor/golang.org/x/tools/internal/typesinternal/element.go
new file mode 100644
index 0000000..4957f02
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typesinternal/element.go
@@ -0,0 +1,133 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package typesinternal
+
+import (
+	"fmt"
+	"go/types"
+
+	"golang.org/x/tools/go/types/typeutil"
+)
+
+// ForEachElement calls f for type T and each type reachable from its
+// type through reflection. It does this by recursively stripping off
+// type constructors; in addition, for each named type N, the type *N
+// is added to the result as it may have additional methods.
+//
+// The caller must provide an initially empty set used to de-duplicate
+// identical types, potentially across multiple calls to ForEachElement.
+// (Its final value holds all the elements seen, matching the arguments
+// passed to f.)
+//
+// TODO(adonovan): share/harmonize with go/callgraph/rta.
+func ForEachElement(rtypes *typeutil.Map, msets *typeutil.MethodSetCache, T types.Type, f func(types.Type)) {
+	var visit func(T types.Type, skip bool)
+	visit = func(T types.Type, skip bool) {
+		if !skip {
+			if seen, _ := rtypes.Set(T, true).(bool); seen {
+				return // de-dup
+			}
+
+			f(T) // notify caller of new element type
+		}
+
+		// Recursion over signatures of each method.
+		tmset := msets.MethodSet(T)
+		for i := 0; i < tmset.Len(); i++ {
+			sig := tmset.At(i).Type().(*types.Signature)
+			// It is tempting to call visit(sig, false)
+			// but, as noted in golang.org/cl/65450043,
+			// the Signature.Recv field is ignored by
+			// types.Identical and typeutil.Map, which
+			// is confusing at best.
+			//
+			// More importantly, the true signature rtype
+			// reachable from a method using reflection
+			// has no receiver but an extra ordinary parameter.
+			// For the Read method of io.Reader we want:
+			//   func(Reader, []byte) (int, error)
+			// but here sig is:
+			//   func([]byte) (int, error)
+			// with .Recv = Reader (though it is hard to
+			// notice because it doesn't affect Signature.String
+			// or types.Identical).
+			//
+			// TODO(adonovan): construct and visit the correct
+			// non-method signature with an extra parameter
+			// (though since unnamed func types have no methods
+			// there is essentially no actual demand for this).
+			//
+			// TODO(adonovan): document whether or not it is
+			// safe to skip non-exported methods (as RTA does).
+			visit(sig.Params(), true)  // skip the Tuple
+			visit(sig.Results(), true) // skip the Tuple
+		}
+
+		switch T := T.(type) {
+		case *types.Alias:
+			visit(types.Unalias(T), skip) // emulates the pre-Alias behavior
+
+		case *types.Basic:
+			// nop
+
+		case *types.Interface:
+			// nop---handled by recursion over method set.
+
+		case *types.Pointer:
+			visit(T.Elem(), false)
+
+		case *types.Slice:
+			visit(T.Elem(), false)
+
+		case *types.Chan:
+			visit(T.Elem(), false)
+
+		case *types.Map:
+			visit(T.Key(), false)
+			visit(T.Elem(), false)
+
+		case *types.Signature:
+			if T.Recv() != nil {
+				panic(fmt.Sprintf("Signature %s has Recv %s", T, T.Recv()))
+			}
+			visit(T.Params(), true)  // skip the Tuple
+			visit(T.Results(), true) // skip the Tuple
+
+		case *types.Named:
+			// A pointer-to-named type can be derived from a named
+			// type via reflection.  It may have methods too.
+			visit(types.NewPointer(T), false)
+
+			// Consider 'type T struct{S}' where S has methods.
+			// Reflection provides no way to get from T to struct{S},
+			// only to S, so the method set of struct{S} is unwanted,
+			// so set 'skip' flag during recursion.
+			visit(T.Underlying(), true) // skip the unnamed type
+
+		case *types.Array:
+			visit(T.Elem(), false)
+
+		case *types.Struct:
+			for i, n := 0, T.NumFields(); i < n; i++ {
+				// TODO(adonovan): document whether or not
+				// it is safe to skip non-exported fields.
+				visit(T.Field(i).Type(), false)
+			}
+
+		case *types.Tuple:
+			for i, n := 0, T.Len(); i < n; i++ {
+				visit(T.At(i).Type(), false)
+			}
+
+		case *types.TypeParam, *types.Union:
+			// forEachReachable must not be called on parameterized types.
+			panic(T)
+
+		default:
+			panic(T)
+		}
+	}
+	visit(T, false)
+}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go b/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go
new file mode 100644
index 0000000..235a6de
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go
@@ -0,0 +1,1560 @@
+// Copyright 2020 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package typesinternal
+
+//go:generate stringer -type=ErrorCode
+
+type ErrorCode int
+
+// This file defines the error codes that can be produced during type-checking.
+// Collectively, these codes provide an identifier that may be used to
+// implement special handling for certain types of errors.
+//
+// Error codes should be fine-grained enough that the exact nature of the error
+// can be easily determined, but coarse enough that they are not an
+// implementation detail of the type checking algorithm. As a rule-of-thumb,
+// errors should be considered equivalent if there is a theoretical refactoring
+// of the type checker in which they are emitted in exactly one place. For
+// example, the type checker emits different error messages for "too many
+// arguments" and "too few arguments", but one can imagine an alternative type
+// checker where this check instead just emits a single "wrong number of
+// arguments", so these errors should have the same code.
+//
+// Error code names should be as brief as possible while retaining accuracy and
+// distinctiveness. In most cases names should start with an adjective
+// describing the nature of the error (e.g. "invalid", "unused", "misplaced"),
+// and end with a noun identifying the relevant language object. For example,
+// "DuplicateDecl" or "InvalidSliceExpr". For brevity, naming follows the
+// convention that "bad" implies a problem with syntax, and "invalid" implies a
+// problem with types.
+
+const (
+	// InvalidSyntaxTree occurs if an invalid syntax tree is provided
+	// to the type checker. It should never happen.
+	InvalidSyntaxTree ErrorCode = -1
+)
+
+const (
+	_ ErrorCode = iota
+
+	// Test is reserved for errors that only apply while in self-test mode.
+	Test
+
+	/* package names */
+
+	// BlankPkgName occurs when a package name is the blank identifier "_".
+	//
+	// Per the spec:
+	//  "The PackageName must not be the blank identifier."
+	BlankPkgName
+
+	// MismatchedPkgName occurs when a file's package name doesn't match the
+	// package name already established by other files.
+	MismatchedPkgName
+
+	// InvalidPkgUse occurs when a package identifier is used outside of a
+	// selector expression.
+	//
+	// Example:
+	//  import "fmt"
+	//
+	//  var _ = fmt
+	InvalidPkgUse
+
+	/* imports */
+
+	// BadImportPath occurs when an import path is not valid.
+	BadImportPath
+
+	// BrokenImport occurs when importing a package fails.
+	//
+	// Example:
+	//  import "amissingpackage"
+	BrokenImport
+
+	// ImportCRenamed occurs when the special import "C" is renamed. "C" is a
+	// pseudo-package, and must not be renamed.
+	//
+	// Example:
+	//  import _ "C"
+	ImportCRenamed
+
+	// UnusedImport occurs when an import is unused.
+	//
+	// Example:
+	//  import "fmt"
+	//
+	//  func main() {}
+	UnusedImport
+
+	/* initialization */
+
+	// InvalidInitCycle occurs when an invalid cycle is detected within the
+	// initialization graph.
+	//
+	// Example:
+	//  var x int = f()
+	//
+	//  func f() int { return x }
+	InvalidInitCycle
+
+	/* decls */
+
+	// DuplicateDecl occurs when an identifier is declared multiple times.
+	//
+	// Example:
+	//  var x = 1
+	//  var x = 2
+	DuplicateDecl
+
+	// InvalidDeclCycle occurs when a declaration cycle is not valid.
+	//
+	// Example:
+	//  import "unsafe"
+	//
+	//  type T struct {
+	//  	a [n]int
+	//  }
+	//
+	//  var n = unsafe.Sizeof(T{})
+	InvalidDeclCycle
+
+	// InvalidTypeCycle occurs when a cycle in type definitions results in a
+	// type that is not well-defined.
+	//
+	// Example:
+	//  import "unsafe"
+	//
+	//  type T [unsafe.Sizeof(T{})]int
+	InvalidTypeCycle
+
+	/* decls > const */
+
+	// InvalidConstInit occurs when a const declaration has a non-constant
+	// initializer.
+	//
+	// Example:
+	//  var x int
+	//  const _ = x
+	InvalidConstInit
+
+	// InvalidConstVal occurs when a const value cannot be converted to its
+	// target type.
+	//
+	// TODO(findleyr): this error code and example are not very clear. Consider
+	// removing it.
+	//
+	// Example:
+	//  const _ = 1 << "hello"
+	InvalidConstVal
+
+	// InvalidConstType occurs when the underlying type in a const declaration
+	// is not a valid constant type.
+	//
+	// Example:
+	//  const c *int = 4
+	InvalidConstType
+
+	/* decls > var (+ other variable assignment codes) */
+
+	// UntypedNilUse occurs when the predeclared (untyped) value nil is used to
+	// initialize a variable declared without an explicit type.
+	//
+	// Example:
+	//  var x = nil
+	UntypedNilUse
+
+	// WrongAssignCount occurs when the number of values on the right-hand side
+	// of an assignment or initialization expression does not match the number
+	// of variables on the left-hand side.
+	//
+	// Example:
+	//  var x = 1, 2
+	WrongAssignCount
+
+	// UnassignableOperand occurs when the left-hand side of an assignment is
+	// not assignable.
+	//
+	// Example:
+	//  func f() {
+	//  	const c = 1
+	//  	c = 2
+	//  }
+	UnassignableOperand
+
+	// NoNewVar occurs when a short variable declaration (':=') does not declare
+	// new variables.
+	//
+	// Example:
+	//  func f() {
+	//  	x := 1
+	//  	x := 2
+	//  }
+	NoNewVar
+
+	// MultiValAssignOp occurs when an assignment operation (+=, *=, etc) does
+	// not have single-valued left-hand or right-hand side.
+	//
+	// Per the spec:
+	//  "In assignment operations, both the left- and right-hand expression lists
+	//  must contain exactly one single-valued expression"
+	//
+	// Example:
+	//  func f() int {
+	//  	x, y := 1, 2
+	//  	x, y += 1
+	//  	return x + y
+	//  }
+	MultiValAssignOp
+
+	// InvalidIfaceAssign occurs when a value of type T is used as an
+	// interface, but T does not implement a method of the expected interface.
+	//
+	// Example:
+	//  type I interface {
+	//  	f()
+	//  }
+	//
+	//  type T int
+	//
+	//  var x I = T(1)
+	InvalidIfaceAssign
+
+	// InvalidChanAssign occurs when a chan assignment is invalid.
+	//
+	// Per the spec, a value x is assignable to a channel type T if:
+	//  "x is a bidirectional channel value, T is a channel type, x's type V and
+	//  T have identical element types, and at least one of V or T is not a
+	//  defined type."
+	//
+	// Example:
+	//  type T1 chan int
+	//  type T2 chan int
+	//
+	//  var x T1
+	//  // Invalid assignment because both types are named
+	//  var _ T2 = x
+	InvalidChanAssign
+
+	// IncompatibleAssign occurs when the type of the right-hand side expression
+	// in an assignment cannot be assigned to the type of the variable being
+	// assigned.
+	//
+	// Example:
+	//  var x []int
+	//  var _ int = x
+	IncompatibleAssign
+
+	// UnaddressableFieldAssign occurs when trying to assign to a struct field
+	// in a map value.
+	//
+	// Example:
+	//  func f() {
+	//  	m := make(map[string]struct{i int})
+	//  	m["foo"].i = 42
+	//  }
+	UnaddressableFieldAssign
+
+	/* decls > type (+ other type expression codes) */
+
+	// NotAType occurs when the identifier used as the underlying type in a type
+	// declaration or the right-hand side of a type alias does not denote a type.
+	//
+	// Example:
+	//  var S = 2
+	//
+	//  type T S
+	NotAType
+
+	// InvalidArrayLen occurs when an array length is not a constant value.
+	//
+	// Example:
+	//  var n = 3
+	//  var _ = [n]int{}
+	InvalidArrayLen
+
+	// BlankIfaceMethod occurs when a method name is '_'.
+	//
+	// Per the spec:
+	//  "The name of each explicitly specified method must be unique and not
+	//  blank."
+	//
+	// Example:
+	//  type T interface {
+	//  	_(int)
+	//  }
+	BlankIfaceMethod
+
+	// IncomparableMapKey occurs when a map key type does not support the == and
+	// != operators.
+	//
+	// Per the spec:
+	//  "The comparison operators == and != must be fully defined for operands of
+	//  the key type; thus the key type must not be a function, map, or slice."
+	//
+	// Example:
+	//  var x map[T]int
+	//
+	//  type T []int
+	IncomparableMapKey
+
+	// InvalidIfaceEmbed occurs when a non-interface type is embedded in an
+	// interface.
+	//
+	// Example:
+	//  type T struct {}
+	//
+	//  func (T) m()
+	//
+	//  type I interface {
+	//  	T
+	//  }
+	InvalidIfaceEmbed
+
+	// InvalidPtrEmbed occurs when an embedded field is of the pointer form *T,
+	// and T itself is itself a pointer, an unsafe.Pointer, or an interface.
+	//
+	// Per the spec:
+	//  "An embedded field must be specified as a type name T or as a pointer to
+	//  a non-interface type name *T, and T itself may not be a pointer type."
+	//
+	// Example:
+	//  type T *int
+	//
+	//  type S struct {
+	//  	*T
+	//  }
+	InvalidPtrEmbed
+
+	/* decls > func and method */
+
+	// BadRecv occurs when a method declaration does not have exactly one
+	// receiver parameter.
+	//
+	// Example:
+	//  func () _() {}
+	BadRecv
+
+	// InvalidRecv occurs when a receiver type expression is not of the form T
+	// or *T, or T is a pointer type.
+	//
+	// Example:
+	//  type T struct {}
+	//
+	//  func (**T) m() {}
+	InvalidRecv
+
+	// DuplicateFieldAndMethod occurs when an identifier appears as both a field
+	// and method name.
+	//
+	// Example:
+	//  type T struct {
+	//  	m int
+	//  }
+	//
+	//  func (T) m() {}
+	DuplicateFieldAndMethod
+
+	// DuplicateMethod occurs when two methods on the same receiver type have
+	// the same name.
+	//
+	// Example:
+	//  type T struct {}
+	//  func (T) m() {}
+	//  func (T) m(i int) int { return i }
+	DuplicateMethod
+
+	/* decls > special */
+
+	// InvalidBlank occurs when a blank identifier is used as a value or type.
+	//
+	// Per the spec:
+	//  "The blank identifier may appear as an operand only on the left-hand side
+	//  of an assignment."
+	//
+	// Example:
+	//  var x = _
+	InvalidBlank
+
+	// InvalidIota occurs when the predeclared identifier iota is used outside
+	// of a constant declaration.
+	//
+	// Example:
+	//  var x = iota
+	InvalidIota
+
+	// MissingInitBody occurs when an init function is missing its body.
+	//
+	// Example:
+	//  func init()
+	MissingInitBody
+
+	// InvalidInitSig occurs when an init function declares parameters or
+	// results.
+	//
+	// Example:
+	//  func init() int { return 1 }
+	InvalidInitSig
+
+	// InvalidInitDecl occurs when init is declared as anything other than a
+	// function.
+	//
+	// Example:
+	//  var init = 1
+	InvalidInitDecl
+
+	// InvalidMainDecl occurs when main is declared as anything other than a
+	// function, in a main package.
+	InvalidMainDecl
+
+	/* exprs */
+
+	// TooManyValues occurs when a function returns too many values for the
+	// expression context in which it is used.
+	//
+	// Example:
+	//  func ReturnTwo() (int, int) {
+	//  	return 1, 2
+	//  }
+	//
+	//  var x = ReturnTwo()
+	TooManyValues
+
+	// NotAnExpr occurs when a type expression is used where a value expression
+	// is expected.
+	//
+	// Example:
+	//  type T struct {}
+	//
+	//  func f() {
+	//  	T
+	//  }
+	NotAnExpr
+
+	/* exprs > const */
+
+	// TruncatedFloat occurs when a float constant is truncated to an integer
+	// value.
+	//
+	// Example:
+	//  var _ int = 98.6
+	TruncatedFloat
+
+	// NumericOverflow occurs when a numeric constant overflows its target type.
+	//
+	// Example:
+	//  var x int8 = 1000
+	NumericOverflow
+
+	/* exprs > operation */
+
+	// UndefinedOp occurs when an operator is not defined for the type(s) used
+	// in an operation.
+	//
+	// Example:
+	//  var c = "a" - "b"
+	UndefinedOp
+
+	// MismatchedTypes occurs when operand types are incompatible in a binary
+	// operation.
+	//
+	// Example:
+	//  var a = "hello"
+	//  var b = 1
+	//  var c = a - b
+	MismatchedTypes
+
+	// DivByZero occurs when a division operation is provable at compile
+	// time to be a division by zero.
+	//
+	// Example:
+	//  const divisor = 0
+	//  var x int = 1/divisor
+	DivByZero
+
+	// NonNumericIncDec occurs when an increment or decrement operator is
+	// applied to a non-numeric value.
+	//
+	// Example:
+	//  func f() {
+	//  	var c = "c"
+	//  	c++
+	//  }
+	NonNumericIncDec
+
+	/* exprs > ptr */
+
+	// UnaddressableOperand occurs when the & operator is applied to an
+	// unaddressable expression.
+	//
+	// Example:
+	//  var x = &1
+	UnaddressableOperand
+
+	// InvalidIndirection occurs when a non-pointer value is indirected via the
+	// '*' operator.
+	//
+	// Example:
+	//  var x int
+	//  var y = *x
+	InvalidIndirection
+
+	/* exprs > [] */
+
+	// NonIndexableOperand occurs when an index operation is applied to a value
+	// that cannot be indexed.
+	//
+	// Example:
+	//  var x = 1
+	//  var y = x[1]
+	NonIndexableOperand
+
+	// InvalidIndex occurs when an index argument is not of integer type,
+	// negative, or out-of-bounds.
+	//
+	// Example:
+	//  var s = [...]int{1,2,3}
+	//  var x = s[5]
+	//
+	// Example:
+	//  var s = []int{1,2,3}
+	//  var _ = s[-1]
+	//
+	// Example:
+	//  var s = []int{1,2,3}
+	//  var i string
+	//  var _ = s[i]
+	InvalidIndex
+
+	// SwappedSliceIndices occurs when constant indices in a slice expression
+	// are decreasing in value.
+	//
+	// Example:
+	//  var _ = []int{1,2,3}[2:1]
+	SwappedSliceIndices
+
+	/* operators > slice */
+
+	// NonSliceableOperand occurs when a slice operation is applied to a value
+	// whose type is not sliceable, or is unaddressable.
+	//
+	// Example:
+	//  var x = [...]int{1, 2, 3}[:1]
+	//
+	// Example:
+	//  var x = 1
+	//  var y = 1[:1]
+	NonSliceableOperand
+
+	// InvalidSliceExpr occurs when a three-index slice expression (a[x:y:z]) is
+	// applied to a string.
+	//
+	// Example:
+	//  var s = "hello"
+	//  var x = s[1:2:3]
+	InvalidSliceExpr
+
+	/* exprs > shift */
+
+	// InvalidShiftCount occurs when the right-hand side of a shift operation is
+	// either non-integer, negative, or too large.
+	//
+	// Example:
+	//  var (
+	//  	x string
+	//  	y int = 1 << x
+	//  )
+	InvalidShiftCount
+
+	// InvalidShiftOperand occurs when the shifted operand is not an integer.
+	//
+	// Example:
+	//  var s = "hello"
+	//  var x = s << 2
+	InvalidShiftOperand
+
+	/* exprs > chan */
+
+	// InvalidReceive occurs when there is a channel receive from a value that
+	// is either not a channel, or is a send-only channel.
+	//
+	// Example:
+	//  func f() {
+	//  	var x = 1
+	//  	<-x
+	//  }
+	InvalidReceive
+
+	// InvalidSend occurs when there is a channel send to a value that is not a
+	// channel, or is a receive-only channel.
+	//
+	// Example:
+	//  func f() {
+	//  	var x = 1
+	//  	x <- "hello!"
+	//  }
+	InvalidSend
+
+	/* exprs > literal */
+
+	// DuplicateLitKey occurs when an index is duplicated in a slice, array, or
+	// map literal.
+	//
+	// Example:
+	//  var _ = []int{0:1, 0:2}
+	//
+	// Example:
+	//  var _ = map[string]int{"a": 1, "a": 2}
+	DuplicateLitKey
+
+	// MissingLitKey occurs when a map literal is missing a key expression.
+	//
+	// Example:
+	//  var _ = map[string]int{1}
+	MissingLitKey
+
+	// InvalidLitIndex occurs when the key in a key-value element of a slice or
+	// array literal is not an integer constant.
+	//
+	// Example:
+	//  var i = 0
+	//  var x = []string{i: "world"}
+	InvalidLitIndex
+
+	// OversizeArrayLit occurs when an array literal exceeds its length.
+	//
+	// Example:
+	//  var _ = [2]int{1,2,3}
+	OversizeArrayLit
+
+	// MixedStructLit occurs when a struct literal contains a mix of positional
+	// and named elements.
+	//
+	// Example:
+	//  var _ = struct{i, j int}{i: 1, 2}
+	MixedStructLit
+
+	// InvalidStructLit occurs when a positional struct literal has an incorrect
+	// number of values.
+	//
+	// Example:
+	//  var _ = struct{i, j int}{1,2,3}
+	InvalidStructLit
+
+	// MissingLitField occurs when a struct literal refers to a field that does
+	// not exist on the struct type.
+	//
+	// Example:
+	//  var _ = struct{i int}{j: 2}
+	MissingLitField
+
+	// DuplicateLitField occurs when a struct literal contains duplicated
+	// fields.
+	//
+	// Example:
+	//  var _ = struct{i int}{i: 1, i: 2}
+	DuplicateLitField
+
+	// UnexportedLitField occurs when a positional struct literal implicitly
+	// assigns an unexported field of an imported type.
+	UnexportedLitField
+
+	// InvalidLitField occurs when a field name is not a valid identifier.
+	//
+	// Example:
+	//  var _ = struct{i int}{1: 1}
+	InvalidLitField
+
+	// UntypedLit occurs when a composite literal omits a required type
+	// identifier.
+	//
+	// Example:
+	//  type outer struct{
+	//  	inner struct { i int }
+	//  }
+	//
+	//  var _ = outer{inner: {1}}
+	UntypedLit
+
+	// InvalidLit occurs when a composite literal expression does not match its
+	// type.
+	//
+	// Example:
+	//  type P *struct{
+	//  	x int
+	//  }
+	//  var _ = P {}
+	InvalidLit
+
+	/* exprs > selector */
+
+	// AmbiguousSelector occurs when a selector is ambiguous.
+	//
+	// Example:
+	//  type E1 struct { i int }
+	//  type E2 struct { i int }
+	//  type T struct { E1; E2 }
+	//
+	//  var x T
+	//  var _ = x.i
+	AmbiguousSelector
+
+	// UndeclaredImportedName occurs when a package-qualified identifier is
+	// undeclared by the imported package.
+	//
+	// Example:
+	//  import "go/types"
+	//
+	//  var _ = types.NotAnActualIdentifier
+	UndeclaredImportedName
+
+	// UnexportedName occurs when a selector refers to an unexported identifier
+	// of an imported package.
+	//
+	// Example:
+	//  import "reflect"
+	//
+	//  type _ reflect.flag
+	UnexportedName
+
+	// UndeclaredName occurs when an identifier is not declared in the current
+	// scope.
+	//
+	// Example:
+	//  var x T
+	UndeclaredName
+
+	// MissingFieldOrMethod occurs when a selector references a field or method
+	// that does not exist.
+	//
+	// Example:
+	//  type T struct {}
+	//
+	//  var x = T{}.f
+	MissingFieldOrMethod
+
+	/* exprs > ... */
+
+	// BadDotDotDotSyntax occurs when a "..." occurs in a context where it is
+	// not valid.
+	//
+	// Example:
+	//  var _ = map[int][...]int{0: {}}
+	BadDotDotDotSyntax
+
+	// NonVariadicDotDotDot occurs when a "..." is used on the final argument to
+	// a non-variadic function.
+	//
+	// Example:
+	//  func printArgs(s []string) {
+	//  	for _, a := range s {
+	//  		println(a)
+	//  	}
+	//  }
+	//
+	//  func f() {
+	//  	s := []string{"a", "b", "c"}
+	//  	printArgs(s...)
+	//  }
+	NonVariadicDotDotDot
+
+	// MisplacedDotDotDot occurs when a "..." is used somewhere other than the
+	// final argument to a function call.
+	//
+	// Example:
+	//  func printArgs(args ...int) {
+	//  	for _, a := range args {
+	//  		println(a)
+	//  	}
+	//  }
+	//
+	//  func f() {
+	//  	a := []int{1,2,3}
+	//  	printArgs(0, a...)
+	//  }
+	MisplacedDotDotDot
+
+	// InvalidDotDotDotOperand occurs when a "..." operator is applied to a
+	// single-valued operand.
+	//
+	// Example:
+	//  func printArgs(args ...int) {
+	//  	for _, a := range args {
+	//  		println(a)
+	//  	}
+	//  }
+	//
+	//  func f() {
+	//  	a := 1
+	//  	printArgs(a...)
+	//  }
+	//
+	// Example:
+	//  func args() (int, int) {
+	//  	return 1, 2
+	//  }
+	//
+	//  func printArgs(args ...int) {
+	//  	for _, a := range args {
+	//  		println(a)
+	//  	}
+	//  }
+	//
+	//  func g() {
+	//  	printArgs(args()...)
+	//  }
+	InvalidDotDotDotOperand
+
+	// InvalidDotDotDot occurs when a "..." is used in a non-variadic built-in
+	// function.
+	//
+	// Example:
+	//  var s = []int{1, 2, 3}
+	//  var l = len(s...)
+	InvalidDotDotDot
+
+	/* exprs > built-in */
+
+	// UncalledBuiltin occurs when a built-in function is used as a
+	// function-valued expression, instead of being called.
+	//
+	// Per the spec:
+	//  "The built-in functions do not have standard Go types, so they can only
+	//  appear in call expressions; they cannot be used as function values."
+	//
+	// Example:
+	//  var _ = copy
+	UncalledBuiltin
+
+	// InvalidAppend occurs when append is called with a first argument that is
+	// not a slice.
+	//
+	// Example:
+	//  var _ = append(1, 2)
+	InvalidAppend
+
+	// InvalidCap occurs when an argument to the cap built-in function is not of
+	// supported type.
+	//
+	// See https://golang.org/ref/spec#Length_and_capacity for information on
+	// which underlying types are supported as arguments to cap and len.
+	//
+	// Example:
+	//  var s = 2
+	//  var x = cap(s)
+	InvalidCap
+
+	// InvalidClose occurs when close(...) is called with an argument that is
+	// not of channel type, or that is a receive-only channel.
+	//
+	// Example:
+	//  func f() {
+	//  	var x int
+	//  	close(x)
+	//  }
+	InvalidClose
+
+	// InvalidCopy occurs when the arguments are not of slice type or do not
+	// have compatible type.
+	//
+	// See https://golang.org/ref/spec#Appending_and_copying_slices for more
+	// information on the type requirements for the copy built-in.
+	//
+	// Example:
+	//  func f() {
+	//  	var x []int
+	//  	y := []int64{1,2,3}
+	//  	copy(x, y)
+	//  }
+	InvalidCopy
+
+	// InvalidComplex occurs when the complex built-in function is called with
+	// arguments with incompatible types.
+	//
+	// Example:
+	//  var _ = complex(float32(1), float64(2))
+	InvalidComplex
+
+	// InvalidDelete occurs when the delete built-in function is called with a
+	// first argument that is not a map.
+	//
+	// Example:
+	//  func f() {
+	//  	m := "hello"
+	//  	delete(m, "e")
+	//  }
+	InvalidDelete
+
+	// InvalidImag occurs when the imag built-in function is called with an
+	// argument that does not have complex type.
+	//
+	// Example:
+	//  var _ = imag(int(1))
+	InvalidImag
+
+	// InvalidLen occurs when an argument to the len built-in function is not of
+	// supported type.
+	//
+	// See https://golang.org/ref/spec#Length_and_capacity for information on
+	// which underlying types are supported as arguments to cap and len.
+	//
+	// Example:
+	//  var s = 2
+	//  var x = len(s)
+	InvalidLen
+
+	// SwappedMakeArgs occurs when make is called with three arguments, and its
+	// length argument is larger than its capacity argument.
+	//
+	// Example:
+	//  var x = make([]int, 3, 2)
+	SwappedMakeArgs
+
+	// InvalidMake occurs when make is called with an unsupported type argument.
+	//
+	// See https://golang.org/ref/spec#Making_slices_maps_and_channels for
+	// information on the types that may be created using make.
+	//
+	// Example:
+	//  var x = make(int)
+	InvalidMake
+
+	// InvalidReal occurs when the real built-in function is called with an
+	// argument that does not have complex type.
+	//
+	// Example:
+	//  var _ = real(int(1))
+	InvalidReal
+
+	/* exprs > assertion */
+
+	// InvalidAssert occurs when a type assertion is applied to a
+	// value that is not of interface type.
+	//
+	// Example:
+	//  var x = 1
+	//  var _ = x.(float64)
+	InvalidAssert
+
+	// ImpossibleAssert occurs for a type assertion x.(T) when the value x of
+	// interface cannot have dynamic type T, due to a missing or mismatching
+	// method on T.
+	//
+	// Example:
+	//  type T int
+	//
+	//  func (t *T) m() int { return int(*t) }
+	//
+	//  type I interface { m() int }
+	//
+	//  var x I
+	//  var _ = x.(T)
+	ImpossibleAssert
+
+	/* exprs > conversion */
+
+	// InvalidConversion occurs when the argument type cannot be converted to the
+	// target.
+	//
+	// See https://golang.org/ref/spec#Conversions for the rules of
+	// convertibility.
+	//
+	// Example:
+	//  var x float64
+	//  var _ = string(x)
+	InvalidConversion
+
+	// InvalidUntypedConversion occurs when there is no valid implicit
+	// conversion from an untyped value satisfying the type constraints of the
+	// context in which it is used.
+	//
+	// Example:
+	//  var _ = 1 + ""
+	InvalidUntypedConversion
+
+	/* offsetof */
+
+	// BadOffsetofSyntax occurs when unsafe.Offsetof is called with an argument
+	// that is not a selector expression.
+	//
+	// Example:
+	//  import "unsafe"
+	//
+	//  var x int
+	//  var _ = unsafe.Offsetof(x)
+	BadOffsetofSyntax
+
+	// InvalidOffsetof occurs when unsafe.Offsetof is called with a method
+	// selector, rather than a field selector, or when the field is embedded via
+	// a pointer.
+	//
+	// Per the spec:
+	//
+	//  "If f is an embedded field, it must be reachable without pointer
+	//  indirections through fields of the struct. "
+	//
+	// Example:
+	//  import "unsafe"
+	//
+	//  type T struct { f int }
+	//  type S struct { *T }
+	//  var s S
+	//  var _ = unsafe.Offsetof(s.f)
+	//
+	// Example:
+	//  import "unsafe"
+	//
+	//  type S struct{}
+	//
+	//  func (S) m() {}
+	//
+	//  var s S
+	//  var _ = unsafe.Offsetof(s.m)
+	InvalidOffsetof
+
+	/* control flow > scope */
+
+	// UnusedExpr occurs when a side-effect free expression is used as a
+	// statement. Such a statement has no effect.
+	//
+	// Example:
+	//  func f(i int) {
+	//  	i*i
+	//  }
+	UnusedExpr
+
+	// UnusedVar occurs when a variable is declared but unused.
+	//
+	// Example:
+	//  func f() {
+	//  	x := 1
+	//  }
+	UnusedVar
+
+	// MissingReturn occurs when a function with results is missing a return
+	// statement.
+	//
+	// Example:
+	//  func f() int {}
+	MissingReturn
+
+	// WrongResultCount occurs when a return statement returns an incorrect
+	// number of values.
+	//
+	// Example:
+	//  func ReturnOne() int {
+	//  	return 1, 2
+	//  }
+	WrongResultCount
+
+	// OutOfScopeResult occurs when the name of a value implicitly returned by
+	// an empty return statement is shadowed in a nested scope.
+	//
+	// Example:
+	//  func factor(n int) (i int) {
+	//  	for i := 2; i < n; i++ {
+	//  		if n%i == 0 {
+	//  			return
+	//  		}
+	//  	}
+	//  	return 0
+	//  }
+	OutOfScopeResult
+
+	/* control flow > if */
+
+	// InvalidCond occurs when an if condition is not a boolean expression.
+	//
+	// Example:
+	//  func checkReturn(i int) {
+	//  	if i {
+	//  		panic("non-zero return")
+	//  	}
+	//  }
+	InvalidCond
+
+	/* control flow > for */
+
+	// InvalidPostDecl occurs when there is a declaration in a for-loop post
+	// statement.
+	//
+	// Example:
+	//  func f() {
+	//  	for i := 0; i < 10; j := 0 {}
+	//  }
+	InvalidPostDecl
+
+	// InvalidChanRange occurs when a send-only channel used in a range
+	// expression.
+	//
+	// Example:
+	//  func sum(c chan<- int) {
+	//  	s := 0
+	//  	for i := range c {
+	//  		s += i
+	//  	}
+	//  }
+	InvalidChanRange
+
+	// InvalidIterVar occurs when two iteration variables are used while ranging
+	// over a channel.
+	//
+	// Example:
+	//  func f(c chan int) {
+	//  	for k, v := range c {
+	//  		println(k, v)
+	//  	}
+	//  }
+	InvalidIterVar
+
+	// InvalidRangeExpr occurs when the type of a range expression is not array,
+	// slice, string, map, or channel.
+	//
+	// Example:
+	//  func f(i int) {
+	//  	for j := range i {
+	//  		println(j)
+	//  	}
+	//  }
+	InvalidRangeExpr
+
+	/* control flow > switch */
+
+	// MisplacedBreak occurs when a break statement is not within a for, switch,
+	// or select statement of the innermost function definition.
+	//
+	// Example:
+	//  func f() {
+	//  	break
+	//  }
+	MisplacedBreak
+
+	// MisplacedContinue occurs when a continue statement is not within a for
+	// loop of the innermost function definition.
+	//
+	// Example:
+	//  func sumeven(n int) int {
+	//  	proceed := func() {
+	//  		continue
+	//  	}
+	//  	sum := 0
+	//  	for i := 1; i <= n; i++ {
+	//  		if i % 2 != 0 {
+	//  			proceed()
+	//  		}
+	//  		sum += i
+	//  	}
+	//  	return sum
+	//  }
+	MisplacedContinue
+
+	// MisplacedFallthrough occurs when a fallthrough statement is not within an
+	// expression switch.
+	//
+	// Example:
+	//  func typename(i interface{}) string {
+	//  	switch i.(type) {
+	//  	case int64:
+	//  		fallthrough
+	//  	case int:
+	//  		return "int"
+	//  	}
+	//  	return "unsupported"
+	//  }
+	MisplacedFallthrough
+
+	// DuplicateCase occurs when a type or expression switch has duplicate
+	// cases.
+	//
+	// Example:
+	//  func printInt(i int) {
+	//  	switch i {
+	//  	case 1:
+	//  		println("one")
+	//  	case 1:
+	//  		println("One")
+	//  	}
+	//  }
+	DuplicateCase
+
+	// DuplicateDefault occurs when a type or expression switch has multiple
+	// default clauses.
+	//
+	// Example:
+	//  func printInt(i int) {
+	//  	switch i {
+	//  	case 1:
+	//  		println("one")
+	//  	default:
+	//  		println("One")
+	//  	default:
+	//  		println("1")
+	//  	}
+	//  }
+	DuplicateDefault
+
+	// BadTypeKeyword occurs when a .(type) expression is used anywhere other
+	// than a type switch.
+	//
+	// Example:
+	//  type I interface {
+	//  	m()
+	//  }
+	//  var t I
+	//  var _ = t.(type)
+	BadTypeKeyword
+
+	// InvalidTypeSwitch occurs when .(type) is used on an expression that is
+	// not of interface type.
+	//
+	// Example:
+	//  func f(i int) {
+	//  	switch x := i.(type) {}
+	//  }
+	InvalidTypeSwitch
+
+	// InvalidExprSwitch occurs when a switch expression is not comparable.
+	//
+	// Example:
+	//  func _() {
+	//  	var a struct{ _ func() }
+	//  	switch a /* ERROR cannot switch on a */ {
+	//  	}
+	//  }
+	InvalidExprSwitch
+
+	/* control flow > select */
+
+	// InvalidSelectCase occurs when a select case is not a channel send or
+	// receive.
+	//
+	// Example:
+	//  func checkChan(c <-chan int) bool {
+	//  	select {
+	//  	case c:
+	//  		return true
+	//  	default:
+	//  		return false
+	//  	}
+	//  }
+	InvalidSelectCase
+
+	/* control flow > labels and jumps */
+
+	// UndeclaredLabel occurs when an undeclared label is jumped to.
+	//
+	// Example:
+	//  func f() {
+	//  	goto L
+	//  }
+	UndeclaredLabel
+
+	// DuplicateLabel occurs when a label is declared more than once.
+	//
+	// Example:
+	//  func f() int {
+	//  L:
+	//  L:
+	//  	return 1
+	//  }
+	DuplicateLabel
+
+	// MisplacedLabel occurs when a break or continue label is not on a for,
+	// switch, or select statement.
+	//
+	// Example:
+	//  func f() {
+	//  L:
+	//  	a := []int{1,2,3}
+	//  	for _, e := range a {
+	//  		if e > 10 {
+	//  			break L
+	//  		}
+	//  		println(a)
+	//  	}
+	//  }
+	MisplacedLabel
+
+	// UnusedLabel occurs when a label is declared but not used.
+	//
+	// Example:
+	//  func f() {
+	//  L:
+	//  }
+	UnusedLabel
+
+	// JumpOverDecl occurs when a label jumps over a variable declaration.
+	//
+	// Example:
+	//  func f() int {
+	//  	goto L
+	//  	x := 2
+	//  L:
+	//  	x++
+	//  	return x
+	//  }
+	JumpOverDecl
+
+	// JumpIntoBlock occurs when a forward jump goes to a label inside a nested
+	// block.
+	//
+	// Example:
+	//  func f(x int) {
+	//  	goto L
+	//  	if x > 0 {
+	//  	L:
+	//  		print("inside block")
+	//  	}
+	// }
+	JumpIntoBlock
+
+	/* control flow > calls */
+
+	// InvalidMethodExpr occurs when a pointer method is called but the argument
+	// is not addressable.
+	//
+	// Example:
+	//  type T struct {}
+	//
+	//  func (*T) m() int { return 1 }
+	//
+	//  var _ = T.m(T{})
+	InvalidMethodExpr
+
+	// WrongArgCount occurs when too few or too many arguments are passed by a
+	// function call.
+	//
+	// Example:
+	//  func f(i int) {}
+	//  var x = f()
+	WrongArgCount
+
+	// InvalidCall occurs when an expression is called that is not of function
+	// type.
+	//
+	// Example:
+	//  var x = "x"
+	//  var y = x()
+	InvalidCall
+
+	/* control flow > suspended */
+
+	// UnusedResults occurs when a restricted expression-only built-in function
+	// is suspended via go or defer. Such a suspension discards the results of
+	// these side-effect free built-in functions, and therefore is ineffectual.
+	//
+	// Example:
+	//  func f(a []int) int {
+	//  	defer len(a)
+	//  	return i
+	//  }
+	UnusedResults
+
+	// InvalidDefer occurs when a deferred expression is not a function call,
+	// for example if the expression is a type conversion.
+	//
+	// Example:
+	//  func f(i int) int {
+	//  	defer int32(i)
+	//  	return i
+	//  }
+	InvalidDefer
+
+	// InvalidGo occurs when a go expression is not a function call, for example
+	// if the expression is a type conversion.
+	//
+	// Example:
+	//  func f(i int) int {
+	//  	go int32(i)
+	//  	return i
+	//  }
+	InvalidGo
+
+	// All codes below were added in Go 1.17.
+
+	/* decl */
+
+	// BadDecl occurs when a declaration has invalid syntax.
+	BadDecl
+
+	// RepeatedDecl occurs when an identifier occurs more than once on the left
+	// hand side of a short variable declaration.
+	//
+	// Example:
+	//  func _() {
+	//  	x, y, y := 1, 2, 3
+	//  }
+	RepeatedDecl
+
+	/* unsafe */
+
+	// InvalidUnsafeAdd occurs when unsafe.Add is called with a
+	// length argument that is not of integer type.
+	//
+	// Example:
+	//  import "unsafe"
+	//
+	//  var p unsafe.Pointer
+	//  var _ = unsafe.Add(p, float64(1))
+	InvalidUnsafeAdd
+
+	// InvalidUnsafeSlice occurs when unsafe.Slice is called with a
+	// pointer argument that is not of pointer type or a length argument
+	// that is not of integer type, negative, or out of bounds.
+	//
+	// Example:
+	//  import "unsafe"
+	//
+	//  var x int
+	//  var _ = unsafe.Slice(x, 1)
+	//
+	// Example:
+	//  import "unsafe"
+	//
+	//  var x int
+	//  var _ = unsafe.Slice(&x, float64(1))
+	//
+	// Example:
+	//  import "unsafe"
+	//
+	//  var x int
+	//  var _ = unsafe.Slice(&x, -1)
+	//
+	// Example:
+	//  import "unsafe"
+	//
+	//  var x int
+	//  var _ = unsafe.Slice(&x, uint64(1) << 63)
+	InvalidUnsafeSlice
+
+	// All codes below were added in Go 1.18.
+
+	/* features */
+
+	// UnsupportedFeature occurs when a language feature is used that is not
+	// supported at this Go version.
+	UnsupportedFeature
+
+	/* type params */
+
+	// NotAGenericType occurs when a non-generic type is used where a generic
+	// type is expected: in type or function instantiation.
+	//
+	// Example:
+	//  type T int
+	//
+	//  var _ T[int]
+	NotAGenericType
+
+	// WrongTypeArgCount occurs when a type or function is instantiated with an
+	// incorrect number of type arguments, including when a generic type or
+	// function is used without instantiation.
+	//
+	// Errors involving failed type inference are assigned other error codes.
+	//
+	// Example:
+	//  type T[p any] int
+	//
+	//  var _ T[int, string]
+	//
+	// Example:
+	//  func f[T any]() {}
+	//
+	//  var x = f
+	WrongTypeArgCount
+
+	// CannotInferTypeArgs occurs when type or function type argument inference
+	// fails to infer all type arguments.
+	//
+	// Example:
+	//  func f[T any]() {}
+	//
+	//  func _() {
+	//  	f()
+	//  }
+	//
+	// Example:
+	//   type N[P, Q any] struct{}
+	//
+	//   var _ N[int]
+	CannotInferTypeArgs
+
+	// InvalidTypeArg occurs when a type argument does not satisfy its
+	// corresponding type parameter constraints.
+	//
+	// Example:
+	//  type T[P ~int] struct{}
+	//
+	//  var _ T[string]
+	InvalidTypeArg // arguments? InferenceFailed
+
+	// InvalidInstanceCycle occurs when an invalid cycle is detected
+	// within the instantiation graph.
+	//
+	// Example:
+	//  func f[T any]() { f[*T]() }
+	InvalidInstanceCycle
+
+	// InvalidUnion occurs when an embedded union or approximation element is
+	// not valid.
+	//
+	// Example:
+	//  type _ interface {
+	//   	~int | interface{ m() }
+	//  }
+	InvalidUnion
+
+	// MisplacedConstraintIface occurs when a constraint-type interface is used
+	// outside of constraint position.
+	//
+	// Example:
+	//   type I interface { ~int }
+	//
+	//   var _ I
+	MisplacedConstraintIface
+
+	// InvalidMethodTypeParams occurs when methods have type parameters.
+	//
+	// It cannot be encountered with an AST parsed using go/parser.
+	InvalidMethodTypeParams
+
+	// MisplacedTypeParam occurs when a type parameter is used in a place where
+	// it is not permitted.
+	//
+	// Example:
+	//  type T[P any] P
+	//
+	// Example:
+	//  type T[P any] struct{ *P }
+	MisplacedTypeParam
+
+	// InvalidUnsafeSliceData occurs when unsafe.SliceData is called with
+	// an argument that is not of slice type. It also occurs if it is used
+	// in a package compiled for a language version before go1.20.
+	//
+	// Example:
+	//  import "unsafe"
+	//
+	//  var x int
+	//  var _ = unsafe.SliceData(x)
+	InvalidUnsafeSliceData
+
+	// InvalidUnsafeString occurs when unsafe.String is called with
+	// a length argument that is not of integer type, negative, or
+	// out of bounds. It also occurs if it is used in a package
+	// compiled for a language version before go1.20.
+	//
+	// Example:
+	//  import "unsafe"
+	//
+	//  var b [10]byte
+	//  var _ = unsafe.String(&b[0], -1)
+	InvalidUnsafeString
+
+	// InvalidUnsafeStringData occurs if it is used in a package
+	// compiled for a language version before go1.20.
+	_ // not used anymore
+
+)
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go b/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go
new file mode 100644
index 0000000..15ecf7c
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go
@@ -0,0 +1,179 @@
+// Code generated by "stringer -type=ErrorCode"; DO NOT EDIT.
+
+package typesinternal
+
+import "strconv"
+
+func _() {
+	// An "invalid array index" compiler error signifies that the constant values have changed.
+	// Re-run the stringer command to generate them again.
+	var x [1]struct{}
+	_ = x[InvalidSyntaxTree - -1]
+	_ = x[Test-1]
+	_ = x[BlankPkgName-2]
+	_ = x[MismatchedPkgName-3]
+	_ = x[InvalidPkgUse-4]
+	_ = x[BadImportPath-5]
+	_ = x[BrokenImport-6]
+	_ = x[ImportCRenamed-7]
+	_ = x[UnusedImport-8]
+	_ = x[InvalidInitCycle-9]
+	_ = x[DuplicateDecl-10]
+	_ = x[InvalidDeclCycle-11]
+	_ = x[InvalidTypeCycle-12]
+	_ = x[InvalidConstInit-13]
+	_ = x[InvalidConstVal-14]
+	_ = x[InvalidConstType-15]
+	_ = x[UntypedNilUse-16]
+	_ = x[WrongAssignCount-17]
+	_ = x[UnassignableOperand-18]
+	_ = x[NoNewVar-19]
+	_ = x[MultiValAssignOp-20]
+	_ = x[InvalidIfaceAssign-21]
+	_ = x[InvalidChanAssign-22]
+	_ = x[IncompatibleAssign-23]
+	_ = x[UnaddressableFieldAssign-24]
+	_ = x[NotAType-25]
+	_ = x[InvalidArrayLen-26]
+	_ = x[BlankIfaceMethod-27]
+	_ = x[IncomparableMapKey-28]
+	_ = x[InvalidIfaceEmbed-29]
+	_ = x[InvalidPtrEmbed-30]
+	_ = x[BadRecv-31]
+	_ = x[InvalidRecv-32]
+	_ = x[DuplicateFieldAndMethod-33]
+	_ = x[DuplicateMethod-34]
+	_ = x[InvalidBlank-35]
+	_ = x[InvalidIota-36]
+	_ = x[MissingInitBody-37]
+	_ = x[InvalidInitSig-38]
+	_ = x[InvalidInitDecl-39]
+	_ = x[InvalidMainDecl-40]
+	_ = x[TooManyValues-41]
+	_ = x[NotAnExpr-42]
+	_ = x[TruncatedFloat-43]
+	_ = x[NumericOverflow-44]
+	_ = x[UndefinedOp-45]
+	_ = x[MismatchedTypes-46]
+	_ = x[DivByZero-47]
+	_ = x[NonNumericIncDec-48]
+	_ = x[UnaddressableOperand-49]
+	_ = x[InvalidIndirection-50]
+	_ = x[NonIndexableOperand-51]
+	_ = x[InvalidIndex-52]
+	_ = x[SwappedSliceIndices-53]
+	_ = x[NonSliceableOperand-54]
+	_ = x[InvalidSliceExpr-55]
+	_ = x[InvalidShiftCount-56]
+	_ = x[InvalidShiftOperand-57]
+	_ = x[InvalidReceive-58]
+	_ = x[InvalidSend-59]
+	_ = x[DuplicateLitKey-60]
+	_ = x[MissingLitKey-61]
+	_ = x[InvalidLitIndex-62]
+	_ = x[OversizeArrayLit-63]
+	_ = x[MixedStructLit-64]
+	_ = x[InvalidStructLit-65]
+	_ = x[MissingLitField-66]
+	_ = x[DuplicateLitField-67]
+	_ = x[UnexportedLitField-68]
+	_ = x[InvalidLitField-69]
+	_ = x[UntypedLit-70]
+	_ = x[InvalidLit-71]
+	_ = x[AmbiguousSelector-72]
+	_ = x[UndeclaredImportedName-73]
+	_ = x[UnexportedName-74]
+	_ = x[UndeclaredName-75]
+	_ = x[MissingFieldOrMethod-76]
+	_ = x[BadDotDotDotSyntax-77]
+	_ = x[NonVariadicDotDotDot-78]
+	_ = x[MisplacedDotDotDot-79]
+	_ = x[InvalidDotDotDotOperand-80]
+	_ = x[InvalidDotDotDot-81]
+	_ = x[UncalledBuiltin-82]
+	_ = x[InvalidAppend-83]
+	_ = x[InvalidCap-84]
+	_ = x[InvalidClose-85]
+	_ = x[InvalidCopy-86]
+	_ = x[InvalidComplex-87]
+	_ = x[InvalidDelete-88]
+	_ = x[InvalidImag-89]
+	_ = x[InvalidLen-90]
+	_ = x[SwappedMakeArgs-91]
+	_ = x[InvalidMake-92]
+	_ = x[InvalidReal-93]
+	_ = x[InvalidAssert-94]
+	_ = x[ImpossibleAssert-95]
+	_ = x[InvalidConversion-96]
+	_ = x[InvalidUntypedConversion-97]
+	_ = x[BadOffsetofSyntax-98]
+	_ = x[InvalidOffsetof-99]
+	_ = x[UnusedExpr-100]
+	_ = x[UnusedVar-101]
+	_ = x[MissingReturn-102]
+	_ = x[WrongResultCount-103]
+	_ = x[OutOfScopeResult-104]
+	_ = x[InvalidCond-105]
+	_ = x[InvalidPostDecl-106]
+	_ = x[InvalidChanRange-107]
+	_ = x[InvalidIterVar-108]
+	_ = x[InvalidRangeExpr-109]
+	_ = x[MisplacedBreak-110]
+	_ = x[MisplacedContinue-111]
+	_ = x[MisplacedFallthrough-112]
+	_ = x[DuplicateCase-113]
+	_ = x[DuplicateDefault-114]
+	_ = x[BadTypeKeyword-115]
+	_ = x[InvalidTypeSwitch-116]
+	_ = x[InvalidExprSwitch-117]
+	_ = x[InvalidSelectCase-118]
+	_ = x[UndeclaredLabel-119]
+	_ = x[DuplicateLabel-120]
+	_ = x[MisplacedLabel-121]
+	_ = x[UnusedLabel-122]
+	_ = x[JumpOverDecl-123]
+	_ = x[JumpIntoBlock-124]
+	_ = x[InvalidMethodExpr-125]
+	_ = x[WrongArgCount-126]
+	_ = x[InvalidCall-127]
+	_ = x[UnusedResults-128]
+	_ = x[InvalidDefer-129]
+	_ = x[InvalidGo-130]
+	_ = x[BadDecl-131]
+	_ = x[RepeatedDecl-132]
+	_ = x[InvalidUnsafeAdd-133]
+	_ = x[InvalidUnsafeSlice-134]
+	_ = x[UnsupportedFeature-135]
+	_ = x[NotAGenericType-136]
+	_ = x[WrongTypeArgCount-137]
+	_ = x[CannotInferTypeArgs-138]
+	_ = x[InvalidTypeArg-139]
+	_ = x[InvalidInstanceCycle-140]
+	_ = x[InvalidUnion-141]
+	_ = x[MisplacedConstraintIface-142]
+	_ = x[InvalidMethodTypeParams-143]
+	_ = x[MisplacedTypeParam-144]
+	_ = x[InvalidUnsafeSliceData-145]
+	_ = x[InvalidUnsafeString-146]
+}
+
+const (
+	_ErrorCode_name_0 = "InvalidSyntaxTree"
+	_ErrorCode_name_1 = "TestBlankPkgNameMismatchedPkgNameInvalidPkgUseBadImportPathBrokenImportImportCRenamedUnusedImportInvalidInitCycleDuplicateDeclInvalidDeclCycleInvalidTypeCycleInvalidConstInitInvalidConstValInvalidConstTypeUntypedNilUseWrongAssignCountUnassignableOperandNoNewVarMultiValAssignOpInvalidIfaceAssignInvalidChanAssignIncompatibleAssignUnaddressableFieldAssignNotATypeInvalidArrayLenBlankIfaceMethodIncomparableMapKeyInvalidIfaceEmbedInvalidPtrEmbedBadRecvInvalidRecvDuplicateFieldAndMethodDuplicateMethodInvalidBlankInvalidIotaMissingInitBodyInvalidInitSigInvalidInitDeclInvalidMainDeclTooManyValuesNotAnExprTruncatedFloatNumericOverflowUndefinedOpMismatchedTypesDivByZeroNonNumericIncDecUnaddressableOperandInvalidIndirectionNonIndexableOperandInvalidIndexSwappedSliceIndicesNonSliceableOperandInvalidSliceExprInvalidShiftCountInvalidShiftOperandInvalidReceiveInvalidSendDuplicateLitKeyMissingLitKeyInvalidLitIndexOversizeArrayLitMixedStructLitInvalidStructLitMissingLitFieldDuplicateLitFieldUnexportedLitFieldInvalidLitFieldUntypedLitInvalidLitAmbiguousSelectorUndeclaredImportedNameUnexportedNameUndeclaredNameMissingFieldOrMethodBadDotDotDotSyntaxNonVariadicDotDotDotMisplacedDotDotDotInvalidDotDotDotOperandInvalidDotDotDotUncalledBuiltinInvalidAppendInvalidCapInvalidCloseInvalidCopyInvalidComplexInvalidDeleteInvalidImagInvalidLenSwappedMakeArgsInvalidMakeInvalidRealInvalidAssertImpossibleAssertInvalidConversionInvalidUntypedConversionBadOffsetofSyntaxInvalidOffsetofUnusedExprUnusedVarMissingReturnWrongResultCountOutOfScopeResultInvalidCondInvalidPostDeclInvalidChanRangeInvalidIterVarInvalidRangeExprMisplacedBreakMisplacedContinueMisplacedFallthroughDuplicateCaseDuplicateDefaultBadTypeKeywordInvalidTypeSwitchInvalidExprSwitchInvalidSelectCaseUndeclaredLabelDuplicateLabelMisplacedLabelUnusedLabelJumpOverDeclJumpIntoBlockInvalidMethodExprWrongArgCountInvalidCallUnusedResultsInvalidDeferInvalidGoBadDeclRepeatedDeclInvalidUnsafeAddInvalidUnsafeSliceUnsupportedFeatureNotAGenericTypeWrongTypeArgCountCannotInferTypeArgsInvalidTypeArgInvalidInstanceCycleInvalidUnionMisplacedConstraintIfaceInvalidMethodTypeParamsMisplacedTypeParamInvalidUnsafeSliceDataInvalidUnsafeString"
+)
+
+var (
+	_ErrorCode_index_1 = [...]uint16{0, 4, 16, 33, 46, 59, 71, 85, 97, 113, 126, 142, 158, 174, 189, 205, 218, 234, 253, 261, 277, 295, 312, 330, 354, 362, 377, 393, 411, 428, 443, 450, 461, 484, 499, 511, 522, 537, 551, 566, 581, 594, 603, 617, 632, 643, 658, 667, 683, 703, 721, 740, 752, 771, 790, 806, 823, 842, 856, 867, 882, 895, 910, 926, 940, 956, 971, 988, 1006, 1021, 1031, 1041, 1058, 1080, 1094, 1108, 1128, 1146, 1166, 1184, 1207, 1223, 1238, 1251, 1261, 1273, 1284, 1298, 1311, 1322, 1332, 1347, 1358, 1369, 1382, 1398, 1415, 1439, 1456, 1471, 1481, 1490, 1503, 1519, 1535, 1546, 1561, 1577, 1591, 1607, 1621, 1638, 1658, 1671, 1687, 1701, 1718, 1735, 1752, 1767, 1781, 1795, 1806, 1818, 1831, 1848, 1861, 1872, 1885, 1897, 1906, 1913, 1925, 1941, 1959, 1977, 1992, 2009, 2028, 2042, 2062, 2074, 2098, 2121, 2139, 2161, 2180}
+)
+
+func (i ErrorCode) String() string {
+	switch {
+	case i == -1:
+		return _ErrorCode_name_0
+	case 1 <= i && i <= 146:
+		i -= 1
+		return _ErrorCode_name_1[_ErrorCode_index_1[i]:_ErrorCode_index_1[i+1]]
+	default:
+		return "ErrorCode(" + strconv.FormatInt(int64(i), 10) + ")"
+	}
+}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/qualifier.go b/vendor/golang.org/x/tools/internal/typesinternal/qualifier.go
new file mode 100644
index 0000000..b64f714
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typesinternal/qualifier.go
@@ -0,0 +1,46 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package typesinternal
+
+import (
+	"go/ast"
+	"go/types"
+	"strconv"
+)
+
+// FileQualifier returns a [types.Qualifier] function that qualifies
+// imported symbols appropriately based on the import environment of a given
+// file.
+// If the same package is imported multiple times, the last appearance is
+// recorded.
+func FileQualifier(f *ast.File, pkg *types.Package) types.Qualifier {
+	// Construct mapping of import paths to their defined names.
+	// It is only necessary to look at renaming imports.
+	imports := make(map[string]string)
+	for _, imp := range f.Imports {
+		if imp.Name != nil && imp.Name.Name != "_" {
+			path, _ := strconv.Unquote(imp.Path.Value)
+			imports[path] = imp.Name.Name
+		}
+	}
+
+	// Define qualifier to replace full package paths with names of the imports.
+	return func(p *types.Package) string {
+		if p == nil || p == pkg {
+			return ""
+		}
+
+		if name, ok := imports[p.Path()]; ok {
+			if name == "." {
+				return ""
+			} else {
+				return name
+			}
+		}
+
+		// If there is no local renaming, fall back to the package name.
+		return p.Name()
+	}
+}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/recv.go b/vendor/golang.org/x/tools/internal/typesinternal/recv.go
new file mode 100644
index 0000000..8352ea7
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typesinternal/recv.go
@@ -0,0 +1,44 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package typesinternal
+
+import (
+	"go/types"
+)
+
+// ReceiverNamed returns the named type (if any) associated with the
+// type of recv, which may be of the form N or *N, or aliases thereof.
+// It also reports whether a Pointer was present.
+//
+// The named result may be nil if recv is from a method on an
+// anonymous interface or struct types or in ill-typed code.
+func ReceiverNamed(recv *types.Var) (isPtr bool, named *types.Named) {
+	t := recv.Type()
+	if ptr, ok := types.Unalias(t).(*types.Pointer); ok {
+		isPtr = true
+		t = ptr.Elem()
+	}
+	named, _ = types.Unalias(t).(*types.Named)
+	return
+}
+
+// Unpointer returns T given *T or an alias thereof.
+// For all other types it is the identity function.
+// It does not look at underlying types.
+// The result may be an alias.
+//
+// Use this function to strip off the optional pointer on a receiver
+// in a field or method selection, without losing the named type
+// (which is needed to compute the method set).
+//
+// See also [typeparams.MustDeref], which removes one level of
+// indirection from the type, regardless of named types (analogous to
+// a LOAD instruction).
+func Unpointer(t types.Type) types.Type {
+	if ptr, ok := types.Unalias(t).(*types.Pointer); ok {
+		return ptr.Elem()
+	}
+	return t
+}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/toonew.go b/vendor/golang.org/x/tools/internal/typesinternal/toonew.go
new file mode 100644
index 0000000..cc86487
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typesinternal/toonew.go
@@ -0,0 +1,89 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package typesinternal
+
+import (
+	"go/types"
+
+	"golang.org/x/tools/internal/stdlib"
+	"golang.org/x/tools/internal/versions"
+)
+
+// TooNewStdSymbols computes the set of package-level symbols
+// exported by pkg that are not available at the specified version.
+// The result maps each symbol to its minimum version.
+//
+// The pkg is allowed to contain type errors.
+func TooNewStdSymbols(pkg *types.Package, version string) map[types.Object]string {
+	disallowed := make(map[types.Object]string)
+
+	// Pass 1: package-level symbols.
+	symbols := stdlib.PackageSymbols[pkg.Path()]
+	for _, sym := range symbols {
+		symver := sym.Version.String()
+		if versions.Before(version, symver) {
+			switch sym.Kind {
+			case stdlib.Func, stdlib.Var, stdlib.Const, stdlib.Type:
+				disallowed[pkg.Scope().Lookup(sym.Name)] = symver
+			}
+		}
+	}
+
+	// Pass 2: fields and methods.
+	//
+	// We allow fields and methods if their associated type is
+	// disallowed, as otherwise we would report false positives
+	// for compatibility shims. Consider:
+	//
+	//   //go:build go1.22
+	//   type T struct { F std.Real } // correct new API
+	//
+	//   //go:build !go1.22
+	//   type T struct { F fake } // shim
+	//   type fake struct { ... }
+	//   func (fake) M () {}
+	//
+	// These alternative declarations of T use either the std.Real
+	// type, introduced in go1.22, or a fake type, for the field
+	// F. (The fakery could be arbitrarily deep, involving more
+	// nested fields and methods than are shown here.) Clients
+	// that use the compatibility shim T will compile with any
+	// version of go, whether older or newer than go1.22, but only
+	// the newer version will use the std.Real implementation.
+	//
+	// Now consider a reference to method M in new(T).F.M() in a
+	// module that requires a minimum of go1.21. The analysis may
+	// occur using a version of Go higher than 1.21, selecting the
+	// first version of T, so the method M is Real.M. This would
+	// spuriously cause the analyzer to report a reference to a
+	// too-new symbol even though this expression compiles just
+	// fine (with the fake implementation) using go1.21.
+	for _, sym := range symbols {
+		symVersion := sym.Version.String()
+		if !versions.Before(version, symVersion) {
+			continue // allowed
+		}
+
+		var obj types.Object
+		switch sym.Kind {
+		case stdlib.Field:
+			typename, name := sym.SplitField()
+			if t := pkg.Scope().Lookup(typename); t != nil && disallowed[t] == "" {
+				obj, _, _ = types.LookupFieldOrMethod(t.Type(), false, pkg, name)
+			}
+
+		case stdlib.Method:
+			ptr, recvname, name := sym.SplitMethod()
+			if t := pkg.Scope().Lookup(recvname); t != nil && disallowed[t] == "" {
+				obj, _, _ = types.LookupFieldOrMethod(t.Type(), ptr, pkg, name)
+			}
+		}
+		if obj != nil {
+			disallowed[obj] = symVersion
+		}
+	}
+
+	return disallowed
+}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/types.go b/vendor/golang.org/x/tools/internal/typesinternal/types.go
new file mode 100644
index 0000000..a5cd7e8
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typesinternal/types.go
@@ -0,0 +1,155 @@
+// Copyright 2020 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package typesinternal provides access to internal go/types APIs that are not
+// yet exported.
+package typesinternal
+
+import (
+	"go/ast"
+	"go/token"
+	"go/types"
+	"reflect"
+	"unsafe"
+
+	"golang.org/x/tools/internal/aliases"
+)
+
+func SetUsesCgo(conf *types.Config) bool {
+	v := reflect.ValueOf(conf).Elem()
+
+	f := v.FieldByName("go115UsesCgo")
+	if !f.IsValid() {
+		f = v.FieldByName("UsesCgo")
+		if !f.IsValid() {
+			return false
+		}
+	}
+
+	addr := unsafe.Pointer(f.UnsafeAddr())
+	*(*bool)(addr) = true
+
+	return true
+}
+
+// ErrorCodeStartEnd extracts additional information from types.Error values
+// generated by Go version 1.16 and later: the error code, start position, and
+// end position. If all positions are valid, start <= err.Pos <= end.
+//
+// If the data could not be read, the final result parameter will be false.
+//
+// TODO(adonovan): eliminate start/end when proposal #71803 is accepted.
+func ErrorCodeStartEnd(err types.Error) (code ErrorCode, start, end token.Pos, ok bool) {
+	var data [3]int
+	// By coincidence all of these fields are ints, which simplifies things.
+	v := reflect.ValueOf(err)
+	for i, name := range []string{"go116code", "go116start", "go116end"} {
+		f := v.FieldByName(name)
+		if !f.IsValid() {
+			return 0, 0, 0, false
+		}
+		data[i] = int(f.Int())
+	}
+	return ErrorCode(data[0]), token.Pos(data[1]), token.Pos(data[2]), true
+}
+
+// NameRelativeTo returns a types.Qualifier that qualifies members of
+// all packages other than pkg, using only the package name.
+// (By contrast, [types.RelativeTo] uses the complete package path,
+// which is often excessive.)
+//
+// If pkg is nil, it is equivalent to [*types.Package.Name].
+func NameRelativeTo(pkg *types.Package) types.Qualifier {
+	return func(other *types.Package) string {
+		if pkg != nil && pkg == other {
+			return "" // same package; unqualified
+		}
+		return other.Name()
+	}
+}
+
+// TypeNameFor returns the type name symbol for the specified type, if
+// it is a [*types.Alias], [*types.Named], [*types.TypeParam], or a
+// [*types.Basic] representing a type.
+//
+// For all other types, and for Basic types representing a builtin,
+// constant, or nil, it returns nil. Be careful not to convert the
+// resulting nil pointer to a [types.Object]!
+//
+// If t is the type of a constant, it may be an "untyped" type, which
+// has no TypeName. To access the name of such types (e.g. "untyped
+// int"), use [types.Basic.Name].
+func TypeNameFor(t types.Type) *types.TypeName {
+	switch t := t.(type) {
+	case *types.Alias:
+		return t.Obj()
+	case *types.Named:
+		return t.Obj()
+	case *types.TypeParam:
+		return t.Obj()
+	case *types.Basic:
+		// See issues #71886 and #66890 for some history.
+		if tname, ok := types.Universe.Lookup(t.Name()).(*types.TypeName); ok {
+			return tname
+		}
+	}
+	return nil
+}
+
+// A NamedOrAlias is a [types.Type] that is named (as
+// defined by the spec) and capable of bearing type parameters: it
+// abstracts aliases ([types.Alias]) and defined types
+// ([types.Named]).
+//
+// Every type declared by an explicit "type" declaration is a
+// NamedOrAlias. (Built-in type symbols may additionally
+// have type [types.Basic], which is not a NamedOrAlias,
+// though the spec regards them as "named"; see [TypeNameFor].)
+//
+// NamedOrAlias cannot expose the Origin method, because
+// [types.Alias.Origin] and [types.Named.Origin] have different
+// (covariant) result types; use [Origin] instead.
+type NamedOrAlias interface {
+	types.Type
+	Obj() *types.TypeName
+	TypeArgs() *types.TypeList
+	TypeParams() *types.TypeParamList
+	SetTypeParams(tparams []*types.TypeParam)
+}
+
+var (
+	_ NamedOrAlias = (*types.Alias)(nil)
+	_ NamedOrAlias = (*types.Named)(nil)
+)
+
+// Origin returns the generic type of the Named or Alias type t if it
+// is instantiated, otherwise it returns t.
+func Origin(t NamedOrAlias) NamedOrAlias {
+	switch t := t.(type) {
+	case *types.Alias:
+		return aliases.Origin(t)
+	case *types.Named:
+		return t.Origin()
+	}
+	return t
+}
+
+// IsPackageLevel reports whether obj is a package-level symbol.
+func IsPackageLevel(obj types.Object) bool {
+	return obj.Pkg() != nil && obj.Parent() == obj.Pkg().Scope()
+}
+
+// NewTypesInfo returns a *types.Info with all maps populated.
+func NewTypesInfo() *types.Info {
+	return &types.Info{
+		Types:        map[ast.Expr]types.TypeAndValue{},
+		Instances:    map[*ast.Ident]types.Instance{},
+		Defs:         map[*ast.Ident]types.Object{},
+		Uses:         map[*ast.Ident]types.Object{},
+		Implicits:    map[ast.Node]types.Object{},
+		Selections:   map[*ast.SelectorExpr]*types.Selection{},
+		Scopes:       map[ast.Node]*types.Scope{},
+		FileVersions: map[*ast.File]string{},
+	}
+}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/varkind.go b/vendor/golang.org/x/tools/internal/typesinternal/varkind.go
new file mode 100644
index 0000000..e5da049
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typesinternal/varkind.go
@@ -0,0 +1,40 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package typesinternal
+
+// TODO(adonovan): when CL 645115 lands, define the go1.25 version of
+// this API that actually does something.
+
+import "go/types"
+
+type VarKind uint8
+
+const (
+	_          VarKind = iota // (not meaningful)
+	PackageVar                // a package-level variable
+	LocalVar                  // a local variable
+	RecvVar                   // a method receiver variable
+	ParamVar                  // a function parameter variable
+	ResultVar                 // a function result variable
+	FieldVar                  // a struct field
+)
+
+func (kind VarKind) String() string {
+	return [...]string{
+		0:          "VarKind(0)",
+		PackageVar: "PackageVar",
+		LocalVar:   "LocalVar",
+		RecvVar:    "RecvVar",
+		ParamVar:   "ParamVar",
+		ResultVar:  "ResultVar",
+		FieldVar:   "FieldVar",
+	}[kind]
+}
+
+// GetVarKind returns an invalid VarKind.
+func GetVarKind(v *types.Var) VarKind { return 0 }
+
+// SetVarKind has no effect.
+func SetVarKind(v *types.Var, kind VarKind) {}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go b/vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go
new file mode 100644
index 0000000..d272949
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go
@@ -0,0 +1,392 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package typesinternal
+
+import (
+	"fmt"
+	"go/ast"
+	"go/token"
+	"go/types"
+	"strings"
+)
+
+// ZeroString returns the string representation of the zero value for any type t.
+// The boolean result indicates whether the type is or contains an invalid type
+// or a non-basic (constraint) interface type.
+//
+// Even for invalid input types, ZeroString may return a partially correct
+// string representation. The caller should use the returned isValid boolean
+// to determine the validity of the expression.
+//
+// When assigning to a wider type (such as 'any'), it's the caller's
+// responsibility to handle any necessary type conversions.
+//
+// This string can be used on the right-hand side of an assignment where the
+// left-hand side has that explicit type.
+// References to named types are qualified by an appropriate (optional)
+// qualifier function.
+// Exception: This does not apply to tuples. Their string representation is
+// informational only and cannot be used in an assignment.
+//
+// See [ZeroExpr] for a variant that returns an [ast.Expr].
+func ZeroString(t types.Type, qual types.Qualifier) (_ string, isValid bool) {
+	switch t := t.(type) {
+	case *types.Basic:
+		switch {
+		case t.Info()&types.IsBoolean != 0:
+			return "false", true
+		case t.Info()&types.IsNumeric != 0:
+			return "0", true
+		case t.Info()&types.IsString != 0:
+			return `""`, true
+		case t.Kind() == types.UnsafePointer:
+			fallthrough
+		case t.Kind() == types.UntypedNil:
+			return "nil", true
+		case t.Kind() == types.Invalid:
+			return "invalid", false
+		default:
+			panic(fmt.Sprintf("ZeroString for unexpected type %v", t))
+		}
+
+	case *types.Pointer, *types.Slice, *types.Chan, *types.Map, *types.Signature:
+		return "nil", true
+
+	case *types.Interface:
+		if !t.IsMethodSet() {
+			return "invalid", false
+		}
+		return "nil", true
+
+	case *types.Named:
+		switch under := t.Underlying().(type) {
+		case *types.Struct, *types.Array:
+			return types.TypeString(t, qual) + "{}", true
+		default:
+			return ZeroString(under, qual)
+		}
+
+	case *types.Alias:
+		switch t.Underlying().(type) {
+		case *types.Struct, *types.Array:
+			return types.TypeString(t, qual) + "{}", true
+		default:
+			// A type parameter can have alias but alias type's underlying type
+			// can never be a type parameter.
+			// Use types.Unalias to preserve the info of type parameter instead
+			// of call Underlying() going right through and get the underlying
+			// type of the type parameter which is always an interface.
+			return ZeroString(types.Unalias(t), qual)
+		}
+
+	case *types.Array, *types.Struct:
+		return types.TypeString(t, qual) + "{}", true
+
+	case *types.TypeParam:
+		// Assumes func new is not shadowed.
+		return "*new(" + types.TypeString(t, qual) + ")", true
+
+	case *types.Tuple:
+		// Tuples are not normal values.
+		// We are currently format as "(t[0], ..., t[n])". Could be something else.
+		isValid := true
+		components := make([]string, t.Len())
+		for i := 0; i < t.Len(); i++ {
+			comp, ok := ZeroString(t.At(i).Type(), qual)
+
+			components[i] = comp
+			isValid = isValid && ok
+		}
+		return "(" + strings.Join(components, ", ") + ")", isValid
+
+	case *types.Union:
+		// Variables of these types cannot be created, so it makes
+		// no sense to ask for their zero value.
+		panic(fmt.Sprintf("invalid type for a variable: %v", t))
+
+	default:
+		panic(t) // unreachable.
+	}
+}
+
+// ZeroExpr returns the ast.Expr representation of the zero value for any type t.
+// The boolean result indicates whether the type is or contains an invalid type
+// or a non-basic (constraint) interface type.
+//
+// Even for invalid input types, ZeroExpr may return a partially correct ast.Expr
+// representation. The caller should use the returned isValid boolean to determine
+// the validity of the expression.
+//
+// This function is designed for types suitable for variables and should not be
+// used with Tuple or Union types.References to named types are qualified by an
+// appropriate (optional) qualifier function.
+//
+// See [ZeroString] for a variant that returns a string.
+func ZeroExpr(t types.Type, qual types.Qualifier) (_ ast.Expr, isValid bool) {
+	switch t := t.(type) {
+	case *types.Basic:
+		switch {
+		case t.Info()&types.IsBoolean != 0:
+			return &ast.Ident{Name: "false"}, true
+		case t.Info()&types.IsNumeric != 0:
+			return &ast.BasicLit{Kind: token.INT, Value: "0"}, true
+		case t.Info()&types.IsString != 0:
+			return &ast.BasicLit{Kind: token.STRING, Value: `""`}, true
+		case t.Kind() == types.UnsafePointer:
+			fallthrough
+		case t.Kind() == types.UntypedNil:
+			return ast.NewIdent("nil"), true
+		case t.Kind() == types.Invalid:
+			return &ast.BasicLit{Kind: token.STRING, Value: `"invalid"`}, false
+		default:
+			panic(fmt.Sprintf("ZeroExpr for unexpected type %v", t))
+		}
+
+	case *types.Pointer, *types.Slice, *types.Chan, *types.Map, *types.Signature:
+		return ast.NewIdent("nil"), true
+
+	case *types.Interface:
+		if !t.IsMethodSet() {
+			return &ast.BasicLit{Kind: token.STRING, Value: `"invalid"`}, false
+		}
+		return ast.NewIdent("nil"), true
+
+	case *types.Named:
+		switch under := t.Underlying().(type) {
+		case *types.Struct, *types.Array:
+			return &ast.CompositeLit{
+				Type: TypeExpr(t, qual),
+			}, true
+		default:
+			return ZeroExpr(under, qual)
+		}
+
+	case *types.Alias:
+		switch t.Underlying().(type) {
+		case *types.Struct, *types.Array:
+			return &ast.CompositeLit{
+				Type: TypeExpr(t, qual),
+			}, true
+		default:
+			return ZeroExpr(types.Unalias(t), qual)
+		}
+
+	case *types.Array, *types.Struct:
+		return &ast.CompositeLit{
+			Type: TypeExpr(t, qual),
+		}, true
+
+	case *types.TypeParam:
+		return &ast.StarExpr{ // *new(T)
+			X: &ast.CallExpr{
+				// Assumes func new is not shadowed.
+				Fun: ast.NewIdent("new"),
+				Args: []ast.Expr{
+					ast.NewIdent(t.Obj().Name()),
+				},
+			},
+		}, true
+
+	case *types.Tuple:
+		// Unlike ZeroString, there is no ast.Expr can express tuple by
+		// "(t[0], ..., t[n])".
+		panic(fmt.Sprintf("invalid type for a variable: %v", t))
+
+	case *types.Union:
+		// Variables of these types cannot be created, so it makes
+		// no sense to ask for their zero value.
+		panic(fmt.Sprintf("invalid type for a variable: %v", t))
+
+	default:
+		panic(t) // unreachable.
+	}
+}
+
+// IsZeroExpr uses simple syntactic heuristics to report whether expr
+// is a obvious zero value, such as 0, "", nil, or false.
+// It cannot do better without type information.
+func IsZeroExpr(expr ast.Expr) bool {
+	switch e := expr.(type) {
+	case *ast.BasicLit:
+		return e.Value == "0" || e.Value == `""`
+	case *ast.Ident:
+		return e.Name == "nil" || e.Name == "false"
+	default:
+		return false
+	}
+}
+
+// TypeExpr returns syntax for the specified type. References to named types
+// are qualified by an appropriate (optional) qualifier function.
+// It may panic for types such as Tuple or Union.
+func TypeExpr(t types.Type, qual types.Qualifier) ast.Expr {
+	switch t := t.(type) {
+	case *types.Basic:
+		switch t.Kind() {
+		case types.UnsafePointer:
+			return &ast.SelectorExpr{X: ast.NewIdent(qual(types.NewPackage("unsafe", "unsafe"))), Sel: ast.NewIdent("Pointer")}
+		default:
+			return ast.NewIdent(t.Name())
+		}
+
+	case *types.Pointer:
+		return &ast.UnaryExpr{
+			Op: token.MUL,
+			X:  TypeExpr(t.Elem(), qual),
+		}
+
+	case *types.Array:
+		return &ast.ArrayType{
+			Len: &ast.BasicLit{
+				Kind:  token.INT,
+				Value: fmt.Sprintf("%d", t.Len()),
+			},
+			Elt: TypeExpr(t.Elem(), qual),
+		}
+
+	case *types.Slice:
+		return &ast.ArrayType{
+			Elt: TypeExpr(t.Elem(), qual),
+		}
+
+	case *types.Map:
+		return &ast.MapType{
+			Key:   TypeExpr(t.Key(), qual),
+			Value: TypeExpr(t.Elem(), qual),
+		}
+
+	case *types.Chan:
+		dir := ast.ChanDir(t.Dir())
+		if t.Dir() == types.SendRecv {
+			dir = ast.SEND | ast.RECV
+		}
+		return &ast.ChanType{
+			Dir:   dir,
+			Value: TypeExpr(t.Elem(), qual),
+		}
+
+	case *types.Signature:
+		var params []*ast.Field
+		for i := 0; i < t.Params().Len(); i++ {
+			params = append(params, &ast.Field{
+				Type: TypeExpr(t.Params().At(i).Type(), qual),
+				Names: []*ast.Ident{
+					{
+						Name: t.Params().At(i).Name(),
+					},
+				},
+			})
+		}
+		if t.Variadic() {
+			last := params[len(params)-1]
+			last.Type = &ast.Ellipsis{Elt: last.Type.(*ast.ArrayType).Elt}
+		}
+		var returns []*ast.Field
+		for i := 0; i < t.Results().Len(); i++ {
+			returns = append(returns, &ast.Field{
+				Type: TypeExpr(t.Results().At(i).Type(), qual),
+			})
+		}
+		return &ast.FuncType{
+			Params: &ast.FieldList{
+				List: params,
+			},
+			Results: &ast.FieldList{
+				List: returns,
+			},
+		}
+
+	case *types.TypeParam:
+		pkgName := qual(t.Obj().Pkg())
+		if pkgName == "" || t.Obj().Pkg() == nil {
+			return ast.NewIdent(t.Obj().Name())
+		}
+		return &ast.SelectorExpr{
+			X:   ast.NewIdent(pkgName),
+			Sel: ast.NewIdent(t.Obj().Name()),
+		}
+
+	// types.TypeParam also implements interface NamedOrAlias. To differentiate,
+	// case TypeParam need to be present before case NamedOrAlias.
+	// TODO(hxjiang): remove this comment once TypeArgs() is added to interface
+	// NamedOrAlias.
+	case NamedOrAlias:
+		var expr ast.Expr = ast.NewIdent(t.Obj().Name())
+		if pkgName := qual(t.Obj().Pkg()); pkgName != "." && pkgName != "" {
+			expr = &ast.SelectorExpr{
+				X:   ast.NewIdent(pkgName),
+				Sel: expr.(*ast.Ident),
+			}
+		}
+
+		// TODO(hxjiang): call t.TypeArgs after adding method TypeArgs() to
+		// typesinternal.NamedOrAlias.
+		if hasTypeArgs, ok := t.(interface{ TypeArgs() *types.TypeList }); ok {
+			if typeArgs := hasTypeArgs.TypeArgs(); typeArgs != nil && typeArgs.Len() > 0 {
+				var indices []ast.Expr
+				for i := range typeArgs.Len() {
+					indices = append(indices, TypeExpr(typeArgs.At(i), qual))
+				}
+				expr = &ast.IndexListExpr{
+					X:       expr,
+					Indices: indices,
+				}
+			}
+		}
+
+		return expr
+
+	case *types.Struct:
+		return ast.NewIdent(t.String())
+
+	case *types.Interface:
+		return ast.NewIdent(t.String())
+
+	case *types.Union:
+		if t.Len() == 0 {
+			panic("Union type should have at least one term")
+		}
+		// Same as go/ast, the return expression will put last term in the
+		// Y field at topmost level of BinaryExpr.
+		// For union of type "float32 | float64 | int64", the structure looks
+		// similar to:
+		// {
+		// 	X: {
+		// 		X: float32,
+		// 		Op: |
+		// 		Y: float64,
+		// 	}
+		// 	Op: |,
+		// 	Y: int64,
+		// }
+		var union ast.Expr
+		for i := range t.Len() {
+			term := t.Term(i)
+			termExpr := TypeExpr(term.Type(), qual)
+			if term.Tilde() {
+				termExpr = &ast.UnaryExpr{
+					Op: token.TILDE,
+					X:  termExpr,
+				}
+			}
+			if i == 0 {
+				union = termExpr
+			} else {
+				union = &ast.BinaryExpr{
+					X:  union,
+					Op: token.OR,
+					Y:  termExpr,
+				}
+			}
+		}
+		return union
+
+	case *types.Tuple:
+		panic("invalid input type types.Tuple")
+
+	default:
+		panic("unreachable")
+	}
+}
diff --git a/vendor/golang.org/x/tools/internal/versions/features.go b/vendor/golang.org/x/tools/internal/versions/features.go
new file mode 100644
index 0000000..b53f178
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/versions/features.go
@@ -0,0 +1,43 @@
+// Copyright 2023 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package versions
+
+// This file contains predicates for working with file versions to
+// decide when a tool should consider a language feature enabled.
+
+// GoVersions that features in x/tools can be gated to.
+const (
+	Go1_18 = "go1.18"
+	Go1_19 = "go1.19"
+	Go1_20 = "go1.20"
+	Go1_21 = "go1.21"
+	Go1_22 = "go1.22"
+)
+
+// Future is an invalid unknown Go version sometime in the future.
+// Do not use directly with Compare.
+const Future = ""
+
+// AtLeast reports whether the file version v comes after a Go release.
+//
+// Use this predicate to enable a behavior once a certain Go release
+// has happened (and stays enabled in the future).
+func AtLeast(v, release string) bool {
+	if v == Future {
+		return true // an unknown future version is always after y.
+	}
+	return Compare(Lang(v), Lang(release)) >= 0
+}
+
+// Before reports whether the file version v is strictly before a Go release.
+//
+// Use this predicate to disable a behavior once a certain Go release
+// has happened (and stays enabled in the future).
+func Before(v, release string) bool {
+	if v == Future {
+		return false // an unknown future version happens after y.
+	}
+	return Compare(Lang(v), Lang(release)) < 0
+}
diff --git a/vendor/golang.org/x/tools/internal/versions/gover.go b/vendor/golang.org/x/tools/internal/versions/gover.go
new file mode 100644
index 0000000..bbabcd2
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/versions/gover.go
@@ -0,0 +1,172 @@
+// Copyright 2023 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This is a fork of internal/gover for use by x/tools until
+// go1.21 and earlier are no longer supported by x/tools.
+
+package versions
+
+import "strings"
+
+// A gover is a parsed Go gover: major[.Minor[.Patch]][kind[pre]]
+// The numbers are the original decimal strings to avoid integer overflows
+// and since there is very little actual math. (Probably overflow doesn't matter in practice,
+// but at the time this code was written, there was an existing test that used
+// go1.99999999999, which does not fit in an int on 32-bit platforms.
+// The "big decimal" representation avoids the problem entirely.)
+type gover struct {
+	major string // decimal
+	minor string // decimal or ""
+	patch string // decimal or ""
+	kind  string // "", "alpha", "beta", "rc"
+	pre   string // decimal or ""
+}
+
+// compare returns -1, 0, or +1 depending on whether
+// x < y, x == y, or x > y, interpreted as toolchain versions.
+// The versions x and y must not begin with a "go" prefix: just "1.21" not "go1.21".
+// Malformed versions compare less than well-formed versions and equal to each other.
+// The language version "1.21" compares less than the release candidate and eventual releases "1.21rc1" and "1.21.0".
+func compare(x, y string) int {
+	vx := parse(x)
+	vy := parse(y)
+
+	if c := cmpInt(vx.major, vy.major); c != 0 {
+		return c
+	}
+	if c := cmpInt(vx.minor, vy.minor); c != 0 {
+		return c
+	}
+	if c := cmpInt(vx.patch, vy.patch); c != 0 {
+		return c
+	}
+	if c := strings.Compare(vx.kind, vy.kind); c != 0 { // "" < alpha < beta < rc
+		return c
+	}
+	if c := cmpInt(vx.pre, vy.pre); c != 0 {
+		return c
+	}
+	return 0
+}
+
+// lang returns the Go language version. For example, lang("1.2.3") == "1.2".
+func lang(x string) string {
+	v := parse(x)
+	if v.minor == "" || v.major == "1" && v.minor == "0" {
+		return v.major
+	}
+	return v.major + "." + v.minor
+}
+
+// isValid reports whether the version x is valid.
+func isValid(x string) bool {
+	return parse(x) != gover{}
+}
+
+// parse parses the Go version string x into a version.
+// It returns the zero version if x is malformed.
+func parse(x string) gover {
+	var v gover
+
+	// Parse major version.
+	var ok bool
+	v.major, x, ok = cutInt(x)
+	if !ok {
+		return gover{}
+	}
+	if x == "" {
+		// Interpret "1" as "1.0.0".
+		v.minor = "0"
+		v.patch = "0"
+		return v
+	}
+
+	// Parse . before minor version.
+	if x[0] != '.' {
+		return gover{}
+	}
+
+	// Parse minor version.
+	v.minor, x, ok = cutInt(x[1:])
+	if !ok {
+		return gover{}
+	}
+	if x == "" {
+		// Patch missing is same as "0" for older versions.
+		// Starting in Go 1.21, patch missing is different from explicit .0.
+		if cmpInt(v.minor, "21") < 0 {
+			v.patch = "0"
+		}
+		return v
+	}
+
+	// Parse patch if present.
+	if x[0] == '.' {
+		v.patch, x, ok = cutInt(x[1:])
+		if !ok || x != "" {
+			// Note that we are disallowing prereleases (alpha, beta, rc) for patch releases here (x != "").
+			// Allowing them would be a bit confusing because we already have:
+			//	1.21 < 1.21rc1
+			// But a prerelease of a patch would have the opposite effect:
+			//	1.21.3rc1 < 1.21.3
+			// We've never needed them before, so let's not start now.
+			return gover{}
+		}
+		return v
+	}
+
+	// Parse prerelease.
+	i := 0
+	for i < len(x) && (x[i] < '0' || '9' < x[i]) {
+		if x[i] < 'a' || 'z' < x[i] {
+			return gover{}
+		}
+		i++
+	}
+	if i == 0 {
+		return gover{}
+	}
+	v.kind, x = x[:i], x[i:]
+	if x == "" {
+		return v
+	}
+	v.pre, x, ok = cutInt(x)
+	if !ok || x != "" {
+		return gover{}
+	}
+
+	return v
+}
+
+// cutInt scans the leading decimal number at the start of x to an integer
+// and returns that value and the rest of the string.
+func cutInt(x string) (n, rest string, ok bool) {
+	i := 0
+	for i < len(x) && '0' <= x[i] && x[i] <= '9' {
+		i++
+	}
+	if i == 0 || x[0] == '0' && i != 1 { // no digits or unnecessary leading zero
+		return "", "", false
+	}
+	return x[:i], x[i:], true
+}
+
+// cmpInt returns cmp.Compare(x, y) interpreting x and y as decimal numbers.
+// (Copied from golang.org/x/mod/semver's compareInt.)
+func cmpInt(x, y string) int {
+	if x == y {
+		return 0
+	}
+	if len(x) < len(y) {
+		return -1
+	}
+	if len(x) > len(y) {
+		return +1
+	}
+	if x < y {
+		return -1
+	} else {
+		return +1
+	}
+}
diff --git a/vendor/golang.org/x/tools/internal/versions/types.go b/vendor/golang.org/x/tools/internal/versions/types.go
new file mode 100644
index 0000000..0fc10ce
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/versions/types.go
@@ -0,0 +1,33 @@
+// Copyright 2023 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package versions
+
+import (
+	"go/ast"
+	"go/types"
+)
+
+// FileVersion returns a file's Go version.
+// The reported version is an unknown Future version if a
+// version cannot be determined.
+func FileVersion(info *types.Info, file *ast.File) string {
+	// In tools built with Go >= 1.22, the Go version of a file
+	// follow a cascades of sources:
+	// 1) types.Info.FileVersion, which follows the cascade:
+	//   1.a) file version (ast.File.GoVersion),
+	//   1.b) the package version (types.Config.GoVersion), or
+	// 2) is some unknown Future version.
+	//
+	// File versions require a valid package version to be provided to types
+	// in Config.GoVersion. Config.GoVersion is either from the package's module
+	// or the toolchain (go run). This value should be provided by go/packages
+	// or unitchecker.Config.GoVersion.
+	if v := info.FileVersions[file]; IsValid(v) {
+		return v
+	}
+	// Note: we could instead return runtime.Version() [if valid].
+	// This would act as a max version on what a tool can support.
+	return Future
+}
diff --git a/vendor/golang.org/x/tools/internal/versions/versions.go b/vendor/golang.org/x/tools/internal/versions/versions.go
new file mode 100644
index 0000000..8d1f745
--- /dev/null
+++ b/vendor/golang.org/x/tools/internal/versions/versions.go
@@ -0,0 +1,57 @@
+// Copyright 2023 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package versions
+
+import (
+	"strings"
+)
+
+// Note: If we use build tags to use go/versions when go >=1.22,
+// we run into go.dev/issue/53737. Under some operations users would see an
+// import of "go/versions" even if they would not compile the file.
+// For example, during `go get -u ./...` (go.dev/issue/64490) we do not try to include
+// For this reason, this library just a clone of go/versions for the moment.
+
+// Lang returns the Go language version for version x.
+// If x is not a valid version, Lang returns the empty string.
+// For example:
+//
+//	Lang("go1.21rc2") = "go1.21"
+//	Lang("go1.21.2") = "go1.21"
+//	Lang("go1.21") = "go1.21"
+//	Lang("go1") = "go1"
+//	Lang("bad") = ""
+//	Lang("1.21") = ""
+func Lang(x string) string {
+	v := lang(stripGo(x))
+	if v == "" {
+		return ""
+	}
+	return x[:2+len(v)] // "go"+v without allocation
+}
+
+// Compare returns -1, 0, or +1 depending on whether
+// x < y, x == y, or x > y, interpreted as Go versions.
+// The versions x and y must begin with a "go" prefix: "go1.21" not "1.21".
+// Invalid versions, including the empty string, compare less than
+// valid versions and equal to each other.
+// The language version "go1.21" compares less than the
+// release candidate and eventual releases "go1.21rc1" and "go1.21.0".
+// Custom toolchain suffixes are ignored during comparison:
+// "go1.21.0" and "go1.21.0-bigcorp" are equal.
+func Compare(x, y string) int { return compare(stripGo(x), stripGo(y)) }
+
+// IsValid reports whether the version x is valid.
+func IsValid(x string) bool { return isValid(stripGo(x)) }
+
+// stripGo converts from a "go1.21" version to a "1.21" version.
+// If v does not start with "go", stripGo returns the empty string (a known invalid version).
+func stripGo(v string) string {
+	v, _, _ = strings.Cut(v, "-") // strip -bigcorp suffix.
+	if len(v) < 2 || v[:2] != "go" {
+		return ""
+	}
+	return v[2:]
+}
diff --git a/vendor/google.golang.org/protobuf/encoding/protowire/wire.go b/vendor/google.golang.org/protobuf/encoding/protowire/wire.go
index e942bc9..743bfb8 100644
--- a/vendor/google.golang.org/protobuf/encoding/protowire/wire.go
+++ b/vendor/google.golang.org/protobuf/encoding/protowire/wire.go
@@ -371,7 +371,31 @@ func ConsumeVarint(b []byte) (v uint64, n int) {
 func SizeVarint(v uint64) int {
 	// This computes 1 + (bits.Len64(v)-1)/7.
 	// 9/64 is a good enough approximation of 1/7
-	return int(9*uint32(bits.Len64(v))+64) / 64
+	//
+	// The Go compiler can translate the bits.LeadingZeros64 call into the LZCNT
+	// instruction, which is very fast on CPUs from the last few years. The
+	// specific way of expressing the calculation matches C++ Protobuf, see
+	// https://godbolt.org/z/4P3h53oM4 for the C++ code and how gcc/clang
+	// optimize that function for GOAMD64=v1 and GOAMD64=v3 (-march=haswell).
+
+	// By OR'ing v with 1, we guarantee that v is never 0, without changing the
+	// result of SizeVarint. LZCNT is not defined for 0, meaning the compiler
+	// needs to add extra instructions to handle that case.
+	//
+	// The Go compiler currently (go1.24.4) does not make use of this knowledge.
+	// This opportunity (removing the XOR instruction, which handles the 0 case)
+	// results in a small (1%) performance win across CPU architectures.
+	//
+	// Independently of avoiding the 0 case, we need the v |= 1 line because
+	// it allows the Go compiler to eliminate an extra XCHGL barrier.
+	v |= 1
+
+	// It would be clearer to write log2value := 63 - uint32(...), but
+	// writing uint32(...) ^ 63 is much more efficient (-14% ARM, -20% Intel).
+	// Proof of identity for our value range [0..63]:
+	// https://go.dev/play/p/Pdn9hEWYakX
+	log2value := uint32(bits.LeadingZeros64(v)) ^ 63
+	return int((log2value*9 + (64 + 9)) / 64)
 }
 
 // AppendFixed32 appends v to b as a little-endian uint32.
diff --git a/vendor/google.golang.org/protobuf/internal/genid/api_gen.go b/vendor/google.golang.org/protobuf/internal/genid/api_gen.go
index df8f918..3ceb6fa 100644
--- a/vendor/google.golang.org/protobuf/internal/genid/api_gen.go
+++ b/vendor/google.golang.org/protobuf/internal/genid/api_gen.go
@@ -27,6 +27,7 @@ const (
 	Api_SourceContext_field_name protoreflect.Name = "source_context"
 	Api_Mixins_field_name        protoreflect.Name = "mixins"
 	Api_Syntax_field_name        protoreflect.Name = "syntax"
+	Api_Edition_field_name       protoreflect.Name = "edition"
 
 	Api_Name_field_fullname          protoreflect.FullName = "google.protobuf.Api.name"
 	Api_Methods_field_fullname       protoreflect.FullName = "google.protobuf.Api.methods"
@@ -35,6 +36,7 @@ const (
 	Api_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Api.source_context"
 	Api_Mixins_field_fullname        protoreflect.FullName = "google.protobuf.Api.mixins"
 	Api_Syntax_field_fullname        protoreflect.FullName = "google.protobuf.Api.syntax"
+	Api_Edition_field_fullname       protoreflect.FullName = "google.protobuf.Api.edition"
 )
 
 // Field numbers for google.protobuf.Api.
@@ -46,6 +48,7 @@ const (
 	Api_SourceContext_field_number protoreflect.FieldNumber = 5
 	Api_Mixins_field_number        protoreflect.FieldNumber = 6
 	Api_Syntax_field_number        protoreflect.FieldNumber = 7
+	Api_Edition_field_number       protoreflect.FieldNumber = 8
 )
 
 // Names for google.protobuf.Method.
@@ -63,6 +66,7 @@ const (
 	Method_ResponseStreaming_field_name protoreflect.Name = "response_streaming"
 	Method_Options_field_name           protoreflect.Name = "options"
 	Method_Syntax_field_name            protoreflect.Name = "syntax"
+	Method_Edition_field_name           protoreflect.Name = "edition"
 
 	Method_Name_field_fullname              protoreflect.FullName = "google.protobuf.Method.name"
 	Method_RequestTypeUrl_field_fullname    protoreflect.FullName = "google.protobuf.Method.request_type_url"
@@ -71,6 +75,7 @@ const (
 	Method_ResponseStreaming_field_fullname protoreflect.FullName = "google.protobuf.Method.response_streaming"
 	Method_Options_field_fullname           protoreflect.FullName = "google.protobuf.Method.options"
 	Method_Syntax_field_fullname            protoreflect.FullName = "google.protobuf.Method.syntax"
+	Method_Edition_field_fullname           protoreflect.FullName = "google.protobuf.Method.edition"
 )
 
 // Field numbers for google.protobuf.Method.
@@ -82,6 +87,7 @@ const (
 	Method_ResponseStreaming_field_number protoreflect.FieldNumber = 5
 	Method_Options_field_number           protoreflect.FieldNumber = 6
 	Method_Syntax_field_number            protoreflect.FieldNumber = 7
+	Method_Edition_field_number           protoreflect.FieldNumber = 8
 )
 
 // Names for google.protobuf.Mixin.
diff --git a/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go b/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go
index 3952478..950a6a3 100644
--- a/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go
+++ b/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go
@@ -34,6 +34,19 @@ const (
 	Edition_EDITION_MAX_enum_value             = 2147483647
 )
 
+// Full and short names for google.protobuf.SymbolVisibility.
+const (
+	SymbolVisibility_enum_fullname = "google.protobuf.SymbolVisibility"
+	SymbolVisibility_enum_name     = "SymbolVisibility"
+)
+
+// Enum values for google.protobuf.SymbolVisibility.
+const (
+	SymbolVisibility_VISIBILITY_UNSET_enum_value  = 0
+	SymbolVisibility_VISIBILITY_LOCAL_enum_value  = 1
+	SymbolVisibility_VISIBILITY_EXPORT_enum_value = 2
+)
+
 // Names for google.protobuf.FileDescriptorSet.
 const (
 	FileDescriptorSet_message_name     protoreflect.Name     = "FileDescriptorSet"
@@ -65,6 +78,7 @@ const (
 	FileDescriptorProto_Dependency_field_name       protoreflect.Name = "dependency"
 	FileDescriptorProto_PublicDependency_field_name protoreflect.Name = "public_dependency"
 	FileDescriptorProto_WeakDependency_field_name   protoreflect.Name = "weak_dependency"
+	FileDescriptorProto_OptionDependency_field_name protoreflect.Name = "option_dependency"
 	FileDescriptorProto_MessageType_field_name      protoreflect.Name = "message_type"
 	FileDescriptorProto_EnumType_field_name         protoreflect.Name = "enum_type"
 	FileDescriptorProto_Service_field_name          protoreflect.Name = "service"
@@ -79,6 +93,7 @@ const (
 	FileDescriptorProto_Dependency_field_fullname       protoreflect.FullName = "google.protobuf.FileDescriptorProto.dependency"
 	FileDescriptorProto_PublicDependency_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.public_dependency"
 	FileDescriptorProto_WeakDependency_field_fullname   protoreflect.FullName = "google.protobuf.FileDescriptorProto.weak_dependency"
+	FileDescriptorProto_OptionDependency_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.option_dependency"
 	FileDescriptorProto_MessageType_field_fullname      protoreflect.FullName = "google.protobuf.FileDescriptorProto.message_type"
 	FileDescriptorProto_EnumType_field_fullname         protoreflect.FullName = "google.protobuf.FileDescriptorProto.enum_type"
 	FileDescriptorProto_Service_field_fullname          protoreflect.FullName = "google.protobuf.FileDescriptorProto.service"
@@ -96,6 +111,7 @@ const (
 	FileDescriptorProto_Dependency_field_number       protoreflect.FieldNumber = 3
 	FileDescriptorProto_PublicDependency_field_number protoreflect.FieldNumber = 10
 	FileDescriptorProto_WeakDependency_field_number   protoreflect.FieldNumber = 11
+	FileDescriptorProto_OptionDependency_field_number protoreflect.FieldNumber = 15
 	FileDescriptorProto_MessageType_field_number      protoreflect.FieldNumber = 4
 	FileDescriptorProto_EnumType_field_number         protoreflect.FieldNumber = 5
 	FileDescriptorProto_Service_field_number          protoreflect.FieldNumber = 6
@@ -124,6 +140,7 @@ const (
 	DescriptorProto_Options_field_name        protoreflect.Name = "options"
 	DescriptorProto_ReservedRange_field_name  protoreflect.Name = "reserved_range"
 	DescriptorProto_ReservedName_field_name   protoreflect.Name = "reserved_name"
+	DescriptorProto_Visibility_field_name     protoreflect.Name = "visibility"
 
 	DescriptorProto_Name_field_fullname           protoreflect.FullName = "google.protobuf.DescriptorProto.name"
 	DescriptorProto_Field_field_fullname          protoreflect.FullName = "google.protobuf.DescriptorProto.field"
@@ -135,6 +152,7 @@ const (
 	DescriptorProto_Options_field_fullname        protoreflect.FullName = "google.protobuf.DescriptorProto.options"
 	DescriptorProto_ReservedRange_field_fullname  protoreflect.FullName = "google.protobuf.DescriptorProto.reserved_range"
 	DescriptorProto_ReservedName_field_fullname   protoreflect.FullName = "google.protobuf.DescriptorProto.reserved_name"
+	DescriptorProto_Visibility_field_fullname     protoreflect.FullName = "google.protobuf.DescriptorProto.visibility"
 )
 
 // Field numbers for google.protobuf.DescriptorProto.
@@ -149,6 +167,7 @@ const (
 	DescriptorProto_Options_field_number        protoreflect.FieldNumber = 7
 	DescriptorProto_ReservedRange_field_number  protoreflect.FieldNumber = 9
 	DescriptorProto_ReservedName_field_number   protoreflect.FieldNumber = 10
+	DescriptorProto_Visibility_field_number     protoreflect.FieldNumber = 11
 )
 
 // Names for google.protobuf.DescriptorProto.ExtensionRange.
@@ -388,12 +407,14 @@ const (
 	EnumDescriptorProto_Options_field_name       protoreflect.Name = "options"
 	EnumDescriptorProto_ReservedRange_field_name protoreflect.Name = "reserved_range"
 	EnumDescriptorProto_ReservedName_field_name  protoreflect.Name = "reserved_name"
+	EnumDescriptorProto_Visibility_field_name    protoreflect.Name = "visibility"
 
 	EnumDescriptorProto_Name_field_fullname          protoreflect.FullName = "google.protobuf.EnumDescriptorProto.name"
 	EnumDescriptorProto_Value_field_fullname         protoreflect.FullName = "google.protobuf.EnumDescriptorProto.value"
 	EnumDescriptorProto_Options_field_fullname       protoreflect.FullName = "google.protobuf.EnumDescriptorProto.options"
 	EnumDescriptorProto_ReservedRange_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.reserved_range"
 	EnumDescriptorProto_ReservedName_field_fullname  protoreflect.FullName = "google.protobuf.EnumDescriptorProto.reserved_name"
+	EnumDescriptorProto_Visibility_field_fullname    protoreflect.FullName = "google.protobuf.EnumDescriptorProto.visibility"
 )
 
 // Field numbers for google.protobuf.EnumDescriptorProto.
@@ -403,6 +424,7 @@ const (
 	EnumDescriptorProto_Options_field_number       protoreflect.FieldNumber = 3
 	EnumDescriptorProto_ReservedRange_field_number protoreflect.FieldNumber = 4
 	EnumDescriptorProto_ReservedName_field_number  protoreflect.FieldNumber = 5
+	EnumDescriptorProto_Visibility_field_number    protoreflect.FieldNumber = 6
 )
 
 // Names for google.protobuf.EnumDescriptorProto.EnumReservedRange.
@@ -1008,32 +1030,35 @@ const (
 
 // Field names for google.protobuf.FeatureSet.
 const (
-	FeatureSet_FieldPresence_field_name         protoreflect.Name = "field_presence"
-	FeatureSet_EnumType_field_name              protoreflect.Name = "enum_type"
-	FeatureSet_RepeatedFieldEncoding_field_name protoreflect.Name = "repeated_field_encoding"
-	FeatureSet_Utf8Validation_field_name        protoreflect.Name = "utf8_validation"
-	FeatureSet_MessageEncoding_field_name       protoreflect.Name = "message_encoding"
-	FeatureSet_JsonFormat_field_name            protoreflect.Name = "json_format"
-	FeatureSet_EnforceNamingStyle_field_name    protoreflect.Name = "enforce_naming_style"
-
-	FeatureSet_FieldPresence_field_fullname         protoreflect.FullName = "google.protobuf.FeatureSet.field_presence"
-	FeatureSet_EnumType_field_fullname              protoreflect.FullName = "google.protobuf.FeatureSet.enum_type"
-	FeatureSet_RepeatedFieldEncoding_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.repeated_field_encoding"
-	FeatureSet_Utf8Validation_field_fullname        protoreflect.FullName = "google.protobuf.FeatureSet.utf8_validation"
-	FeatureSet_MessageEncoding_field_fullname       protoreflect.FullName = "google.protobuf.FeatureSet.message_encoding"
-	FeatureSet_JsonFormat_field_fullname            protoreflect.FullName = "google.protobuf.FeatureSet.json_format"
-	FeatureSet_EnforceNamingStyle_field_fullname    protoreflect.FullName = "google.protobuf.FeatureSet.enforce_naming_style"
+	FeatureSet_FieldPresence_field_name           protoreflect.Name = "field_presence"
+	FeatureSet_EnumType_field_name                protoreflect.Name = "enum_type"
+	FeatureSet_RepeatedFieldEncoding_field_name   protoreflect.Name = "repeated_field_encoding"
+	FeatureSet_Utf8Validation_field_name          protoreflect.Name = "utf8_validation"
+	FeatureSet_MessageEncoding_field_name         protoreflect.Name = "message_encoding"
+	FeatureSet_JsonFormat_field_name              protoreflect.Name = "json_format"
+	FeatureSet_EnforceNamingStyle_field_name      protoreflect.Name = "enforce_naming_style"
+	FeatureSet_DefaultSymbolVisibility_field_name protoreflect.Name = "default_symbol_visibility"
+
+	FeatureSet_FieldPresence_field_fullname           protoreflect.FullName = "google.protobuf.FeatureSet.field_presence"
+	FeatureSet_EnumType_field_fullname                protoreflect.FullName = "google.protobuf.FeatureSet.enum_type"
+	FeatureSet_RepeatedFieldEncoding_field_fullname   protoreflect.FullName = "google.protobuf.FeatureSet.repeated_field_encoding"
+	FeatureSet_Utf8Validation_field_fullname          protoreflect.FullName = "google.protobuf.FeatureSet.utf8_validation"
+	FeatureSet_MessageEncoding_field_fullname         protoreflect.FullName = "google.protobuf.FeatureSet.message_encoding"
+	FeatureSet_JsonFormat_field_fullname              protoreflect.FullName = "google.protobuf.FeatureSet.json_format"
+	FeatureSet_EnforceNamingStyle_field_fullname      protoreflect.FullName = "google.protobuf.FeatureSet.enforce_naming_style"
+	FeatureSet_DefaultSymbolVisibility_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.default_symbol_visibility"
 )
 
 // Field numbers for google.protobuf.FeatureSet.
 const (
-	FeatureSet_FieldPresence_field_number         protoreflect.FieldNumber = 1
-	FeatureSet_EnumType_field_number              protoreflect.FieldNumber = 2
-	FeatureSet_RepeatedFieldEncoding_field_number protoreflect.FieldNumber = 3
-	FeatureSet_Utf8Validation_field_number        protoreflect.FieldNumber = 4
-	FeatureSet_MessageEncoding_field_number       protoreflect.FieldNumber = 5
-	FeatureSet_JsonFormat_field_number            protoreflect.FieldNumber = 6
-	FeatureSet_EnforceNamingStyle_field_number    protoreflect.FieldNumber = 7
+	FeatureSet_FieldPresence_field_number           protoreflect.FieldNumber = 1
+	FeatureSet_EnumType_field_number                protoreflect.FieldNumber = 2
+	FeatureSet_RepeatedFieldEncoding_field_number   protoreflect.FieldNumber = 3
+	FeatureSet_Utf8Validation_field_number          protoreflect.FieldNumber = 4
+	FeatureSet_MessageEncoding_field_number         protoreflect.FieldNumber = 5
+	FeatureSet_JsonFormat_field_number              protoreflect.FieldNumber = 6
+	FeatureSet_EnforceNamingStyle_field_number      protoreflect.FieldNumber = 7
+	FeatureSet_DefaultSymbolVisibility_field_number protoreflect.FieldNumber = 8
 )
 
 // Full and short names for google.protobuf.FeatureSet.FieldPresence.
@@ -1128,6 +1153,27 @@ const (
 	FeatureSet_STYLE_LEGACY_enum_value                 = 2
 )
 
+// Names for google.protobuf.FeatureSet.VisibilityFeature.
+const (
+	FeatureSet_VisibilityFeature_message_name     protoreflect.Name     = "VisibilityFeature"
+	FeatureSet_VisibilityFeature_message_fullname protoreflect.FullName = "google.protobuf.FeatureSet.VisibilityFeature"
+)
+
+// Full and short names for google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility.
+const (
+	FeatureSet_VisibilityFeature_DefaultSymbolVisibility_enum_fullname = "google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility"
+	FeatureSet_VisibilityFeature_DefaultSymbolVisibility_enum_name     = "DefaultSymbolVisibility"
+)
+
+// Enum values for google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility.
+const (
+	FeatureSet_VisibilityFeature_DEFAULT_SYMBOL_VISIBILITY_UNKNOWN_enum_value = 0
+	FeatureSet_VisibilityFeature_EXPORT_ALL_enum_value                        = 1
+	FeatureSet_VisibilityFeature_EXPORT_TOP_LEVEL_enum_value                  = 2
+	FeatureSet_VisibilityFeature_LOCAL_ALL_enum_value                         = 3
+	FeatureSet_VisibilityFeature_STRICT_enum_value                            = 4
+)
+
 // Names for google.protobuf.FeatureSetDefaults.
 const (
 	FeatureSetDefaults_message_name     protoreflect.Name     = "FeatureSetDefaults"
diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go
index a4a0a29..730331e 100644
--- a/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go
+++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go
@@ -21,6 +21,8 @@ func (p *SourcePath) appendFileDescriptorProto(b []byte) []byte {
 		b = p.appendRepeatedField(b, "public_dependency", nil)
 	case 11:
 		b = p.appendRepeatedField(b, "weak_dependency", nil)
+	case 15:
+		b = p.appendRepeatedField(b, "option_dependency", nil)
 	case 4:
 		b = p.appendRepeatedField(b, "message_type", (*SourcePath).appendDescriptorProto)
 	case 5:
@@ -66,6 +68,8 @@ func (p *SourcePath) appendDescriptorProto(b []byte) []byte {
 		b = p.appendRepeatedField(b, "reserved_range", (*SourcePath).appendDescriptorProto_ReservedRange)
 	case 10:
 		b = p.appendRepeatedField(b, "reserved_name", nil)
+	case 11:
+		b = p.appendSingularField(b, "visibility", nil)
 	}
 	return b
 }
@@ -85,6 +89,8 @@ func (p *SourcePath) appendEnumDescriptorProto(b []byte) []byte {
 		b = p.appendRepeatedField(b, "reserved_range", (*SourcePath).appendEnumDescriptorProto_EnumReservedRange)
 	case 5:
 		b = p.appendRepeatedField(b, "reserved_name", nil)
+	case 6:
+		b = p.appendSingularField(b, "visibility", nil)
 	}
 	return b
 }
@@ -400,6 +406,8 @@ func (p *SourcePath) appendFeatureSet(b []byte) []byte {
 		b = p.appendSingularField(b, "json_format", nil)
 	case 7:
 		b = p.appendSingularField(b, "enforce_naming_style", nil)
+	case 8:
+		b = p.appendSingularField(b, "default_symbol_visibility", nil)
 	}
 	return b
 }
diff --git a/vendor/modules.txt b/vendor/modules.txt
index ab752f4..2ef50f5 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -1,10 +1,6 @@
 # github.com/KyleBanks/depth v1.2.1
 ## explicit
 github.com/KyleBanks/depth
-# github.com/PuerkitoBio/purell v1.2.1
-## explicit; go 1.21
-# github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578
-## explicit
 # github.com/araujo88/gin-gonic-xss-middleware v0.0.0-20221014023455-d89f16de6a7e
 ## explicit; go 1.19
 github.com/araujo88/gin-gonic-xss-middleware
@@ -12,7 +8,7 @@ github.com/araujo88/gin-gonic-xss-middleware
 ## explicit
 github.com/aymerick/douceur/css
 github.com/aymerick/douceur/parser
-# github.com/bytedance/sonic v1.13.2
+# github.com/bytedance/sonic v1.14.0
 ## explicit; go 1.17
 github.com/bytedance/sonic
 github.com/bytedance/sonic/ast
@@ -46,25 +42,23 @@ github.com/bytedance/sonic/internal/utils
 github.com/bytedance/sonic/option
 github.com/bytedance/sonic/unquote
 github.com/bytedance/sonic/utf8
-# github.com/bytedance/sonic/loader v0.2.4
+# github.com/bytedance/sonic/loader v0.3.0
 ## explicit; go 1.16
 github.com/bytedance/sonic/loader
 github.com/bytedance/sonic/loader/internal/abi
 github.com/bytedance/sonic/loader/internal/iasm/expr
 github.com/bytedance/sonic/loader/internal/iasm/x86_64
 github.com/bytedance/sonic/loader/internal/rt
-# github.com/cespare/xxhash/v2 v2.1.2
+# github.com/cespare/xxhash/v2 v2.2.0
 ## explicit; go 1.11
 github.com/cespare/xxhash/v2
-# github.com/cloudwego/base64x v0.1.5
-## explicit; go 1.16
+# github.com/cloudwego/base64x v0.1.6
+## explicit; go 1.17
 github.com/cloudwego/base64x
 github.com/cloudwego/base64x/internal/native
 github.com/cloudwego/base64x/internal/native/avx2
 github.com/cloudwego/base64x/internal/native/sse
 github.com/cloudwego/base64x/internal/rt
-# github.com/cpuguy83/go-md2man/v2 v2.0.6
-## explicit; go 1.12
 # github.com/davecgh/go-spew v1.1.1
 ## explicit
 github.com/davecgh/go-spew/spew
@@ -83,15 +77,16 @@ github.com/gin-contrib/cors
 # github.com/gin-contrib/secure v1.1.1
 ## explicit; go 1.21.0
 github.com/gin-contrib/secure
-# github.com/gin-contrib/sse v1.0.0
-## explicit; go 1.13
+# github.com/gin-contrib/sse v1.1.0
+## explicit; go 1.23
 github.com/gin-contrib/sse
-# github.com/gin-gonic/gin v1.10.0
-## explicit; go 1.20
+# github.com/gin-gonic/gin v1.11.0
+## explicit; go 1.23.0
 github.com/gin-gonic/gin
 github.com/gin-gonic/gin/binding
+github.com/gin-gonic/gin/codec/json
 github.com/gin-gonic/gin/internal/bytesconv
-github.com/gin-gonic/gin/internal/json
+github.com/gin-gonic/gin/internal/fs
 github.com/gin-gonic/gin/render
 # github.com/go-openapi/jsonpointer v0.21.1
 ## explicit; go 1.20
@@ -113,7 +108,7 @@ github.com/go-playground/locales/currency
 # github.com/go-playground/universal-translator v0.18.1
 ## explicit; go 1.18
 github.com/go-playground/universal-translator
-# github.com/go-playground/validator/v10 v10.26.0
+# github.com/go-playground/validator/v10 v10.27.0
 ## explicit; go 1.20
 github.com/go-playground/validator/v10
 # github.com/go-redis/redis/v8 v8.11.5
@@ -137,6 +132,17 @@ github.com/goccy/go-json/internal/encoder/vm_color_indent
 github.com/goccy/go-json/internal/encoder/vm_indent
 github.com/goccy/go-json/internal/errors
 github.com/goccy/go-json/internal/runtime
+# github.com/goccy/go-yaml v1.18.0
+## explicit; go 1.21.0
+github.com/goccy/go-yaml
+github.com/goccy/go-yaml/ast
+github.com/goccy/go-yaml/internal/errors
+github.com/goccy/go-yaml/internal/format
+github.com/goccy/go-yaml/lexer
+github.com/goccy/go-yaml/parser
+github.com/goccy/go-yaml/printer
+github.com/goccy/go-yaml/scanner
+github.com/goccy/go-yaml/token
 # github.com/golang-jwt/jwt v3.2.2+incompatible
 ## explicit
 github.com/golang-jwt/jwt
@@ -195,7 +201,7 @@ github.com/klauspost/compress/internal/cpuinfo
 github.com/klauspost/compress/internal/snapref
 github.com/klauspost/compress/zstd
 github.com/klauspost/compress/zstd/internal/xxhash
-# github.com/klauspost/cpuid/v2 v2.2.10
+# github.com/klauspost/cpuid/v2 v2.3.0
 ## explicit; go 1.22
 github.com/klauspost/cpuid/v2
 # github.com/leodido/go-urn v1.4.0
@@ -228,7 +234,7 @@ github.com/modern-go/reflect2
 # github.com/montanaflynn/stats v0.7.1
 ## explicit; go 1.13
 github.com/montanaflynn/stats
-# github.com/pelletier/go-toml/v2 v2.2.3
+# github.com/pelletier/go-toml/v2 v2.2.4
 ## explicit; go 1.21.0
 github.com/pelletier/go-toml/v2
 github.com/pelletier/go-toml/v2/internal/characters
@@ -238,14 +244,29 @@ github.com/pelletier/go-toml/v2/unstable
 # github.com/pmezard/go-difflib v1.0.0
 ## explicit
 github.com/pmezard/go-difflib/difflib
-# github.com/russross/blackfriday/v2 v2.1.0
-## explicit
+# github.com/quic-go/qpack v0.5.1
+## explicit; go 1.22
+github.com/quic-go/qpack
+# github.com/quic-go/quic-go v0.54.0
+## explicit; go 1.23
+github.com/quic-go/quic-go
+github.com/quic-go/quic-go/http3
+github.com/quic-go/quic-go/internal/ackhandler
+github.com/quic-go/quic-go/internal/congestion
+github.com/quic-go/quic-go/internal/flowcontrol
+github.com/quic-go/quic-go/internal/handshake
+github.com/quic-go/quic-go/internal/protocol
+github.com/quic-go/quic-go/internal/qerr
+github.com/quic-go/quic-go/internal/utils
+github.com/quic-go/quic-go/internal/utils/linkedlist
+github.com/quic-go/quic-go/internal/utils/ringbuffer
+github.com/quic-go/quic-go/internal/wire
+github.com/quic-go/quic-go/logging
+github.com/quic-go/quic-go/quicvarint
 # github.com/shopspring/decimal v1.4.0
 ## explicit; go 1.10
 github.com/shopspring/decimal
-# github.com/shurcooL/sanitized_anchor_name v1.0.0
-## explicit
-# github.com/stretchr/testify v1.10.0
+# github.com/stretchr/testify v1.11.1
 ## explicit; go 1.17
 github.com/stretchr/testify/assert
 github.com/stretchr/testify/assert/yaml
@@ -277,11 +298,9 @@ github.com/twitchyliquid64/golang-asm/objabi
 github.com/twitchyliquid64/golang-asm/src
 github.com/twitchyliquid64/golang-asm/sys
 github.com/twitchyliquid64/golang-asm/unsafeheader
-# github.com/ugorji/go/codec v1.2.12
-## explicit; go 1.11
+# github.com/ugorji/go/codec v1.3.0
+## explicit; go 1.21
 github.com/ugorji/go/codec
-# github.com/urfave/cli/v2 v2.27.6
-## explicit; go 1.18
 # github.com/xdg-go/pbkdf2 v1.0.0
 ## explicit; go 1.9
 github.com/xdg-go/pbkdf2
@@ -291,8 +310,6 @@ github.com/xdg-go/scram
 # github.com/xdg-go/stringprep v1.0.4
 ## explicit; go 1.11
 github.com/xdg-go/stringprep
-# github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1
-## explicit; go 1.15
 # github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78
 ## explicit; go 1.17
 github.com/youmark/pkcs8
@@ -348,6 +365,8 @@ go.mongodb.org/mongo-driver/x/mongo/driver/wiremessage
 # go.uber.org/mock v0.5.0
 ## explicit; go 1.22
 go.uber.org/mock/gomock
+go.uber.org/mock/mockgen
+go.uber.org/mock/mockgen/model
 # go.uber.org/multierr v1.10.0
 ## explicit; go 1.19
 go.uber.org/multierr
@@ -362,19 +381,31 @@ go.uber.org/zap/internal/exit
 go.uber.org/zap/internal/pool
 go.uber.org/zap/internal/stacktrace
 go.uber.org/zap/zapcore
-# golang.org/x/arch v0.15.0
+# golang.org/x/arch v0.20.0
 ## explicit; go 1.23.0
 golang.org/x/arch/x86/x86asm
-# golang.org/x/crypto v0.36.0
+# golang.org/x/crypto v0.40.0
 ## explicit; go 1.23.0
 golang.org/x/crypto/bcrypt
 golang.org/x/crypto/blowfish
+golang.org/x/crypto/chacha20
+golang.org/x/crypto/chacha20poly1305
+golang.org/x/crypto/hkdf
+golang.org/x/crypto/internal/alias
+golang.org/x/crypto/internal/poly1305
 golang.org/x/crypto/ocsp
 golang.org/x/crypto/pbkdf2
 golang.org/x/crypto/scrypt
 golang.org/x/crypto/sha3
-# golang.org/x/net v0.38.0
+# golang.org/x/mod v0.25.0
+## explicit; go 1.23.0
+golang.org/x/mod/internal/lazyregexp
+golang.org/x/mod/modfile
+golang.org/x/mod/module
+golang.org/x/mod/semver
+# golang.org/x/net v0.42.0
 ## explicit; go 1.23.0
+golang.org/x/net/bpf
 golang.org/x/net/html
 golang.org/x/net/html/atom
 golang.org/x/net/http/httpguts
@@ -383,18 +414,23 @@ golang.org/x/net/http2/h2c
 golang.org/x/net/http2/hpack
 golang.org/x/net/idna
 golang.org/x/net/internal/httpcommon
+golang.org/x/net/internal/iana
+golang.org/x/net/internal/socket
+golang.org/x/net/ipv4
+golang.org/x/net/ipv6
 golang.org/x/net/webdav
 golang.org/x/net/webdav/internal/xml
-# golang.org/x/sync v0.12.0
+# golang.org/x/sync v0.16.0
 ## explicit; go 1.23.0
 golang.org/x/sync/errgroup
 golang.org/x/sync/semaphore
 golang.org/x/sync/singleflight
-# golang.org/x/sys v0.31.0
+# golang.org/x/sys v0.35.0
 ## explicit; go 1.23.0
 golang.org/x/sys/cpu
 golang.org/x/sys/unix
-# golang.org/x/text v0.23.0
+golang.org/x/sys/windows
+# golang.org/x/text v0.27.0
 ## explicit; go 1.23.0
 golang.org/x/text/cases
 golang.org/x/text/internal
@@ -412,14 +448,35 @@ golang.org/x/text/width
 # golang.org/x/time v0.11.0
 ## explicit; go 1.23.0
 golang.org/x/time/rate
-# golang.org/x/tools v0.31.0
+# golang.org/x/tools v0.34.0
 ## explicit; go 1.23.0
 golang.org/x/tools/go/ast/astutil
 golang.org/x/tools/go/buildutil
+golang.org/x/tools/go/gcexportdata
 golang.org/x/tools/go/internal/cgo
 golang.org/x/tools/go/loader
-# google.golang.org/protobuf v1.36.6
-## explicit; go 1.22
+golang.org/x/tools/go/packages
+golang.org/x/tools/go/types/objectpath
+golang.org/x/tools/go/types/typeutil
+golang.org/x/tools/imports
+golang.org/x/tools/internal/aliases
+golang.org/x/tools/internal/event
+golang.org/x/tools/internal/event/core
+golang.org/x/tools/internal/event/keys
+golang.org/x/tools/internal/event/label
+golang.org/x/tools/internal/gcimporter
+golang.org/x/tools/internal/gocommand
+golang.org/x/tools/internal/gopathwalk
+golang.org/x/tools/internal/imports
+golang.org/x/tools/internal/modindex
+golang.org/x/tools/internal/packagesinternal
+golang.org/x/tools/internal/pkgbits
+golang.org/x/tools/internal/stdlib
+golang.org/x/tools/internal/typeparams
+golang.org/x/tools/internal/typesinternal
+golang.org/x/tools/internal/versions
+# google.golang.org/protobuf v1.36.9
+## explicit; go 1.23
 google.golang.org/protobuf/encoding/protowire
 google.golang.org/protobuf/internal/detrand
 google.golang.org/protobuf/internal/encoding/messageset
@@ -433,8 +490,6 @@ google.golang.org/protobuf/proto
 google.golang.org/protobuf/reflect/protoreflect
 google.golang.org/protobuf/reflect/protoregistry
 google.golang.org/protobuf/runtime/protoiface
-# gopkg.in/yaml.v2 v2.4.0
-## explicit; go 1.15
 # gopkg.in/yaml.v3 v3.0.1
 ## explicit
 gopkg.in/yaml.v3
@@ -450,5 +505,3 @@ gorm.io/gorm/logger
 gorm.io/gorm/migrator
 gorm.io/gorm/schema
 gorm.io/gorm/utils
-# sigs.k8s.io/yaml v1.4.0
-## explicit; go 1.12